[
  {
    "path": ".gitignore",
    "content": "node_modules\ntest\n.DS_Store\ndocs/.vuepress/dist\n.temp\npackage-lock.json"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2019 zhukunpenglinyutong\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "# 知识如果不整理，就会流失90%\n\n<p align=\"center\">\n    <a href=\"javascript:;\"><img src=\"https://img.shields.io/github/license/zhukunpenglinyutong/notes.svg\" alt=\"LICENSE\"></a>\n    <a href=\"javascript:;\"><img src=\"https://img.shields.io/github/repo-size/zhukunpenglinyutong/notes.svg\" alt=\"repo-size\"></a>\n    <a href=\"javascript:;\"><img src=\"https://www.codetriage.com/zhukunpenglinyutong/notes/badges/users.svg\" alt=\"CodeTriage\"></a>\n    <a href=\"javascript:;\"><img src=\"https://img.shields.io/github/commit-activity/m/zhukunpenglinyutong/notes.svg\" alt=\"提交活动\"></a>\n    <a href=\"javascript:;\"><img src=\"https://img.shields.io/github/last-commit/zhukunpenglinyutong/notes.svg\" alt=\"最后一次提交\"></a>\n    <img style=\"width:80%\" src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/zkp-blog-bg.png\" />\n</p>\n\n---\n\n## 🏅前言\n\n我一直认为知识是有关联的，不是零散的，所以需要体系来把知识关联起来，可能我现在关联的不是很好，但是我相信随着我学习的深入，我能汇总出来不错的前端知识体系 🆙\n\n更佳的查阅体验，请访问 [Notes网站](https://notes.itzkp.com)\n\n---\n\n## 🎖使用说明\n\n```sh\n# 克隆\ngit clone https://github.com/zhukunpenglinyutong/notes.git\n\n# 安装依赖（注意，一定要yarn安装，并注意不要删除 yarn.lock）\nyarn\n\n# 预览，VuePress会启动一个预览的网址\nnpm run start\n\n# 打包，打包后资源在 docs/.vuepress/dist下\nnpm run build\n```\n\n---\n\n\n## 🎨 不足与请教\n\n因为入行的时间太短（2019.6 毕业），所以项目会有很多地方不完善。各位前行者，大佬们，如果看出这个项目有的地方可以完善，或者有的地方不好，我拜求各位的指点，我会以很快的速度验证，然后更改的。我会时刻以谦逊姿态请教学习，高调的热情创造宣传，我期待各位大佬们能指出我的不足，我定会虚心请教，牢记恩情。（很多思想不是我不用，是我不知道，所以拜求指教）\n\n---\n\n## 交流\n\n**个人微信，提供内推机会，猎头朋友们有意也可加入交流**\n\n<img style=\"width:140px;\" src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/zkp.png\">\n\n---\n\n## 💌 致谢\n\n致谢所有 star 和 关注我的 朋友们，多谢你们的鼓励和支持。"
  },
  {
    "path": "docs/.vuepress/components/About.vue",
    "content": "<template>\n    <div class=\"my-main-container\">\n        <div class=\"my-container\">\n          <el-card class=\"my-card\" :body-style=\"{ padding: '0px' }\">\n              <div style=\"height: 50px; margin: 0;\"></div>\n              <a \n                class=\"my-avatar-link\" \n                @click=\"clickAvatar\"\n                :class=\"{ 'my-rotate': canRotate }\"\n                >\n                  <img class=\"my-avatar\" :src=\"$withBase('/avatar.jpg')\">\n              </a>\n              <div class=\"my-title\" style=\"text-align: center\">Xerrors</div>\n              <br>\n              <p>🚩</p>\n              <p>计科大三在读</p>\n              <p>菜鸡 弱鸡 垃圾</p>\n              <br>\n              <p>\n                <img class=\"my-svg\" :src=\"$withBase('/svg/quote-left.svg')\" type=\"image/svg+xml\"/>\n                  敬畏代码 敬畏技术\n                <img class=\"my-svg\" :src=\"$withBase('/svg/quote-right.svg')\" type=\"image/svg+xml\"/>\n              </p>\n              <br>\n              <p>💒</p>\n              <p>江苏 · 无锡</p>\n              <br>\n              <div class=\"my-something\">\n                  <a href=\"https://github.com/zhukunpenglinyutong\">\n                    <img class=\"my-svg\" :src=\"$withBase('/svg/github.svg')\" type=\"image/svg+xml\"/>\n                  </a>\n                  <a href=\"270750933@qq.com\">\n                    <img class=\"my-svg\" :src=\"$withBase('/svg/mail.svg')\" type=\"image/svg+xml\"/>\n                  </a>\n                  <a href=\"https://dev.tencent.com/u/Xerrors\">\n                    <img class=\"my-svg\" :src=\"$withBase('/svg/tencent.svg')\" type=\"image/svg+xml\"/>\n                  </a>\n              </div>\n          </el-card>\n          <div class=\"my-button-box\">\n            <div class=\"my-go-home\">\n              <router-link to=\"/\" style=\"color: white;\">Home</router-link>\n            </div>\n          </div>\n        </div>\n    </div>\n</template>\n\n<script>\nexport default {\n  data() {\n    return {\n      count: 0,\n      canRotate: false\n    }\n  },\n  methods: {\n    clickAvatar() {\n      this.count += 1\n      if (this.count > 10) {\n        this.canRotate = true\n      }\n    }\n  }\n};\n</script>\n\n<style scoped>\n.my-main-container {\n    display:flex;/*Flex布局*/\n    display: -webkit-flex; /* Safari */\n    align-items: center;/*指定垂直居中*/\n    width: 100%;\n    height: 100vh;\n    background:url(../public/dark.png) #444;\n    user-select: none;\n}\n\nh1, h2, h3, p {\n    color: #eee;\n}\n.my-title {\n  color: #eee;\n  font-size: 2.5rem;\n}\n\n.my-button-box {\n  margin-top: 2rem;\n  height: 3rem;\n}\n\n.my-go-home {\n  opacity: 0;\n  animation: showup 1s 0.5s forwards;\n  color: white;\n}\n\n.my-container {\n  margin: 0 auto;\n  text-align: center;\n}\n\n.my-card {\n    color: #c9e4d7;\n    width: 370px;\n    height: 600px;\n    margin: 0 auto;\n    border: 0px;\n    /* animation: showup 1s forwards; */\n}\n\n.el-card__body{\n  height: 100%;\n}\n\n.my-card *{\n  display: block;\n  margin: 5px auto;\n}\n\n.my-svg {\n  margin: 5px;\n  width: 25px; \n  height: 25px;\n  display: inline-block;\n}\n\n.my-avatar {\n  display: block;\n  position: relative;\n  width: 100px;\n  height: 100px;\n  margin: 0 auto;\n  border-radius:50%;\n  border: 3px solid #ffffff\n}\n\n.my-something {\n  margin: 0 auto;\n  align-self: flex-end;\n}\n\n.my-something a {\n  display: inline-block;\n}\n\n.my-rotate {\n  animation: myrotate linear 2s infinite;\n}\n\n@keyframes gradientBG {\n\t0% {\n\t\tbackground-position: 0% 50%;\n\t}\n\t50% {\n\t\tbackground-position: 100% 50%;\n\t}\n\t100% {\n\t\tbackground-position: 0% 50%;\n\t}\n}\n\n@keyframes showup {\n  0% {\n    transform: translateY(6rem);\n    opacity: 0;\n  }\n  100% {\n    transform: translateY(0);\n    opacity: 1;\n  }\n}\n\n@keyframes showbtn {\n  from { opacity: 0; }\n  to { opacity: 1; }\n}\n\n@keyframes myrotate {\n  from { transform: rotate(0deg); }\n  to { transform: rotate(360deg); }\n}\n</style>"
  },
  {
    "path": "docs/.vuepress/config.js",
    "content": "module.exports = {\n  head: [\n    ['link', { rel: 'manifest', href: '/manifest.json' }],\n    ['link', { rel: 'apple-touch-icon', href: '/favicon.ico' }],\n  ],\n  title: '朱昆鹏',\n  description: '朱昆鹏 个人博客',\n  permalink: \"/:year/:month-:day-:slug\",\n  themeConfig: {\n    sidebar: false,\n    github: \"https://github.com/zhukunpenglinyutong/\",\n    logo: '/avatar.jpg',\n    lastUpdated: '修改于',\n    search: true,\n    searchMaxSuggestions: 6,\n    nav: [\n      { text: '前端体系', link: '/blog/' },\n      { text: '开源项目', link: '/github-open/' },\n      { text: '友链', link: '/links/' },\n      { text: '网站更新', link: '/update/' },\n      {\n        text: '其他',\n        items: [\n          // { text: '网站介绍', link: '/website/' },\n          { text: '导航', link: '/guide/' },\n          { text: '前端速查', link: '/quickcheck/' },\n          // { text: '年度计划', link: '/plan-list/' },\n          { text: '读书笔记', link: '/book/' },\n          { text: '个人介绍', link: '/my/' }\n        ]\n      }\n    ]\n  },\n  // plugins: ['@vuepress/pwa'],\n  plugins: {\n    '@vuepress/medium-zoom': {\n      selector: '.need-zoom :not(a) > img',\n      options: {\n        margin: 16,\n        background: 'rgba(0,0,0,0.7)'\n      }\n    },\n    'vuepress-plugin-smooth-scroll':{},\n    'vuepress-plugin-mathjax': {\n      macros: {\n        '\\\\Z': '\\\\mathbb{Z}',\n      },\n    },\n  },\n  configureWebpack: {\n    resolve: {\n      alias: {\n        // '@alias': 'src/'\n      }\n    }\n  }\n}"
  },
  {
    "path": "docs/.vuepress/enhanceApp.js",
    "content": "import Vue from 'vue'\nimport Element from 'element-ui'\n// import 'element-ui/lib/theme-chalk/index.css'\nimport './public/style/theme/dist/light.css'\nimport './public/style/theme/dist/dark.css'\nimport animated from 'animate.css'\n\nimport Viewer from 'v-viewer'\nimport 'viewerjs/dist/viewer.css'\n\nVue.use(Viewer)\n\nexport default ({\n  Vue,\n}) => {\n  Vue.use(Element, animated)\n}"
  },
  {
    "path": "docs/.vuepress/mixins/index.js",
    "content": ""
  },
  {
    "path": "docs/.vuepress/public/json/guide.json",
    "content": "{\n    \"tags\": [\n        {\n            \"label\": \"计算机\",\n            \"name\": \"first\",\n            \"classes\": [\n                {\n                    \"title\": \"Linux\",\n                    \"links\": [\n                        {\n                            \"name\": \"基础\",\n                            \"description\": \"全能的网站\",\n                            \"link\": \"https://www.baidu.com\"\n                        },\n                        {\n                            \"name\": \"基础\",\n                            \"description\": \"全能的网站\",\n                            \"link\": \"https://www.baidu.com\"\n                        },\n                        {\n                            \"name\": \"基础\",\n                            \"description\": \"全能的网站\",\n                            \"link\": \"https://www.baidu.com\"\n                        },\n                        {\n                            \"name\": \"基础\",\n                            \"description\": \"全能的网站\",\n                            \"link\": \"https://www.baidu.com\"\n                        },\n                        {\n                            \"name\": \"基础\",\n                            \"description\": \"全能的网站\",\n                            \"link\": \"https://www.baidu.com\"\n                        },\n                        {\n                            \"name\": \"基础\",\n                            \"description\": \"全能的网站\",\n                            \"link\": \"https://www.baidu.com\"\n                        },\n                        {\n                            \"name\": \"基础\",\n                            \"description\": \"全能的网站\",\n                            \"link\": \"https://www.baidu.com\"\n                        },\n                        {\n                            \"name\": \"基础\",\n                            \"description\": \"全能的网站\",\n                            \"link\": \"https://www.baidu.com\"\n                        },\n                        {\n                            \"name\": \"基础\",\n                            \"description\": \"全能的网站\",\n                            \"link\": \"https://www.baidu.com\"\n                        },\n                        {\n                            \"name\": \"基础\",\n                            \"description\": \"全能的网站\",\n                            \"link\": \"https://www.baidu.com\"\n                        },\n                        {\n                            \"name\": \"基础\",\n                            \"description\": \"全能的网站\",\n                            \"link\": \"https://www.baidu.com\"\n                        },\n                        {\n                            \"name\": \"基础\",\n                            \"description\": \"全能的网站\",\n                            \"link\": \"https://www.baidu.com\"\n                        },\n                        {\n                            \"name\": \"基础\",\n                            \"description\": \"全能的网站\",\n                            \"link\": \"https://www.baidu.com\"\n                        },\n                        {\n                            \"name\": \"基础\",\n                            \"description\": \"全能的网站\",\n                            \"link\": \"https://www.baidu.com\"\n                        },\n                        {\n                            \"name\": \"基础\",\n                            \"description\": \"全能的网站\",\n                            \"link\": \"https://www.baidu.com\"\n                        },\n                        {\n                            \"name\": \"基础\",\n                            \"description\": \"全能的网站\",\n                            \"link\": \"https://www.baidu.com\"\n                        },\n                        {\n                            \"name\": \"基础\",\n                            \"description\": \"全能的网站\",\n                            \"link\": \"https://www.baidu.com\"\n                        },\n                        {\n                            \"name\": \"基础\",\n                            \"description\": \"全能的网站\",\n                            \"link\": \"https://www.baidu.com\"\n                        }\n                    ]\n                }\n            ]\n        },\n        {\n            \"label\": \"网络安全\",\n            \"name\": \"second\",\n            \"classes\": [\n                {\n                    \"title\": \"Linux\",\n                    \"links\": [\n                        {\n                            \"name\": \"基础\",\n                            \"description\": \"全能的网站\",\n                            \"link\": \"https://www.baidu.com\"\n                        },\n                        {\n                            \"name\": \"基础\",\n                            \"description\": \"全能的网站\",\n                            \"link\": \"https://www.baidu.com\"\n                        },\n                        {\n                            \"name\": \"基础\",\n                            \"description\": \"全能的网站\",\n                            \"link\": \"https://www.baidu.com\"\n                        },\n                        {\n                            \"name\": \"基础\",\n                            \"description\": \"全能的网站\",\n                            \"link\": \"https://www.baidu.com\"\n                        },\n                        {\n                            \"name\": \"基础\",\n                            \"description\": \"全能的网站\",\n                            \"link\": \"https://www.baidu.com\"\n                        },\n                        {\n                            \"name\": \"基础\",\n                            \"description\": \"全能的网站\",\n                            \"link\": \"https://www.baidu.com\"\n                        },\n                        {\n                            \"name\": \"基础\",\n                            \"description\": \"全能的网站\",\n                            \"link\": \"https://www.baidu.com\"\n                        },\n                        {\n                            \"name\": \"基础\",\n                            \"description\": \"全能的网站\",\n                            \"link\": \"https://www.baidu.com\"\n                        },\n                        {\n                            \"name\": \"基础\",\n                            \"description\": \"全能的网站\",\n                            \"link\": \"https://www.baidu.com\"\n                        },\n                        {\n                            \"name\": \"基础\",\n                            \"description\": \"全能的网站\",\n                            \"link\": \"https://www.baidu.com\"\n                        },\n                        {\n                            \"name\": \"基础\",\n                            \"description\": \"全能的网站\",\n                            \"link\": \"https://www.baidu.com\"\n                        },\n                        {\n                            \"name\": \"基础\",\n                            \"description\": \"全能的网站\",\n                            \"link\": \"https://www.baidu.com\"\n                        },\n                        {\n                            \"name\": \"基础\",\n                            \"description\": \"全能的网站\",\n                            \"link\": \"https://www.baidu.com\"\n                        },\n                        {\n                            \"name\": \"基础\",\n                            \"description\": \"全能的网站\",\n                            \"link\": \"https://www.baidu.com\"\n                        },\n                        {\n                            \"name\": \"基础\",\n                            \"description\": \"全能的网站\",\n                            \"link\": \"https://www.baidu.com\"\n                        },\n                        {\n                            \"name\": \"基础\",\n                            \"description\": \"全能的网站\",\n                            \"link\": \"https://www.baidu.com\"\n                        },\n                        {\n                            \"name\": \"基础\",\n                            \"description\": \"全能的网站\",\n                            \"link\": \"https://www.baidu.com\"\n                        },\n                        {\n                            \"name\": \"基础\",\n                            \"description\": \"全能的网站\",\n                            \"link\": \"https://www.baidu.com\"\n                        }\n                    ]\n                }\n            ]\n        },\n        {\n            \"label\": \"前端\",\n            \"name\": \"third\",\n            \"classes\": [\n                {\n                    \"title\": \"Linux\",\n                    \"links\": [\n                        {\n                            \"name\": \"基础\",\n                            \"description\": \"全能的网站\",\n                            \"link\": \"https://www.baidu.com\"\n                        },\n                        {\n                            \"name\": \"基础\",\n                            \"description\": \"全能的网站\",\n                            \"link\": \"https://www.baidu.com\"\n                        },\n                        {\n                            \"name\": \"基础\",\n                            \"description\": \"全能的网站\",\n                            \"link\": \"https://www.baidu.com\"\n                        },\n                        {\n                            \"name\": \"基础\",\n                            \"description\": \"全能的网站\",\n                            \"link\": \"https://www.baidu.com\"\n                        },\n                        {\n                            \"name\": \"基础\",\n                            \"description\": \"全能的网站\",\n                            \"link\": \"https://www.baidu.com\"\n                        },\n                        {\n                            \"name\": \"基础\",\n                            \"description\": \"全能的网站\",\n                            \"link\": \"https://www.baidu.com\"\n                        },\n                        {\n                            \"name\": \"基础\",\n                            \"description\": \"全能的网站\",\n                            \"link\": \"https://www.baidu.com\"\n                        },\n                        {\n                            \"name\": \"基础\",\n                            \"description\": \"全能的网站\",\n                            \"link\": \"https://www.baidu.com\"\n                        },\n                        {\n                            \"name\": \"基础\",\n                            \"description\": \"全能的网站\",\n                            \"link\": \"https://www.baidu.com\"\n                        },\n                        {\n                            \"name\": \"基础\",\n                            \"description\": \"全能的网站\",\n                            \"link\": \"https://www.baidu.com\"\n                        },\n                        {\n                            \"name\": \"基础\",\n                            \"description\": \"全能的网站\",\n                            \"link\": \"https://www.baidu.com\"\n                        },\n                        {\n                            \"name\": \"基础\",\n                            \"description\": \"全能的网站\",\n                            \"link\": \"https://www.baidu.com\"\n                        },\n                        {\n                            \"name\": \"基础\",\n                            \"description\": \"全能的网站\",\n                            \"link\": \"https://www.baidu.com\"\n                        },\n                        {\n                            \"name\": \"基础\",\n                            \"description\": \"全能的网站\",\n                            \"link\": \"https://www.baidu.com\"\n                        },\n                        {\n                            \"name\": \"基础\",\n                            \"description\": \"全能的网站\",\n                            \"link\": \"https://www.baidu.com\"\n                        },\n                        {\n                            \"name\": \"基础\",\n                            \"description\": \"全能的网站\",\n                            \"link\": \"https://www.baidu.com\"\n                        },\n                        {\n                            \"name\": \"基础\",\n                            \"description\": \"全能的网站\",\n                            \"link\": \"https://www.baidu.com\"\n                        },\n                        {\n                            \"name\": \"基础\",\n                            \"description\": \"全能的网站\",\n                            \"link\": \"https://www.baidu.com\"\n                        }\n                    ]\n                }\n            ]\n        },\n        {\n            \"label\": \"深度学习\",\n            \"name\": \"fourth\",\n            \"classes\": [\n                {\n                    \"title\": \"Linux\",\n                    \"links\": [\n                        {\n                            \"name\": \"基础\",\n                            \"description\": \"全能的网站\",\n                            \"link\": \"https://www.baidu.com\"\n                        },\n                        {\n                            \"name\": \"基础\",\n                            \"description\": \"全能的网站\",\n                            \"link\": \"https://www.baidu.com\"\n                        },\n                        {\n                            \"name\": \"基础\",\n                            \"description\": \"全能的网站\",\n                            \"link\": \"https://www.baidu.com\"\n                        },\n                        {\n                            \"name\": \"基础\",\n                            \"description\": \"全能的网站\",\n                            \"link\": \"https://www.baidu.com\"\n                        },\n                        {\n                            \"name\": \"基础\",\n                            \"description\": \"全能的网站\",\n                            \"link\": \"https://www.baidu.com\"\n                        },\n                        {\n                            \"name\": \"基础\",\n                            \"description\": \"全能的网站\",\n                            \"link\": \"https://www.baidu.com\"\n                        },\n                        {\n                            \"name\": \"基础\",\n                            \"description\": \"全能的网站\",\n                            \"link\": \"https://www.baidu.com\"\n                        },\n                        {\n                            \"name\": \"基础\",\n                            \"description\": \"全能的网站\",\n                            \"link\": \"https://www.baidu.com\"\n                        },\n                        {\n                            \"name\": \"基础\",\n                            \"description\": \"全能的网站\",\n                            \"link\": \"https://www.baidu.com\"\n                        },\n                        {\n                            \"name\": \"基础\",\n                            \"description\": \"全能的网站\",\n                            \"link\": \"https://www.baidu.com\"\n                        },\n                        {\n                            \"name\": \"基础\",\n                            \"description\": \"全能的网站\",\n                            \"link\": \"https://www.baidu.com\"\n                        },\n                        {\n                            \"name\": \"基础\",\n                            \"description\": \"全能的网站\",\n                            \"link\": \"https://www.baidu.com\"\n                        },\n                        {\n                            \"name\": \"基础\",\n                            \"description\": \"全能的网站\",\n                            \"link\": \"https://www.baidu.com\"\n                        },\n                        {\n                            \"name\": \"基础\",\n                            \"description\": \"全能的网站\",\n                            \"link\": \"https://www.baidu.com\"\n                        },\n                        {\n                            \"name\": \"基础\",\n                            \"description\": \"全能的网站\",\n                            \"link\": \"https://www.baidu.com\"\n                        },\n                        {\n                            \"name\": \"基础\",\n                            \"description\": \"全能的网站\",\n                            \"link\": \"https://www.baidu.com\"\n                        },\n                        {\n                            \"name\": \"基础\",\n                            \"description\": \"全能的网站\",\n                            \"link\": \"https://www.baidu.com\"\n                        },\n                        {\n                            \"name\": \"基础\",\n                            \"description\": \"全能的网站\",\n                            \"link\": \"https://www.baidu.com\"\n                        }\n                    ]\n                }\n            ]\n        }\n    ]\n}"
  },
  {
    "path": "docs/.vuepress/public/manifest.json",
    "content": "{\n    \"name\": \"Angor\",\n    \"short_name\": \"Angor\",\n    \"start_url\": \"index.html\",\n    \"display\": \"standalone\",\n    \"background_color\": \"#2196f3\",\n    \"description\": \"Angor 的 heiheihei\",\n    \"theme_color\": \"blue\",\n    \"icons\": [\n      {\n        \"src\": \"./favicon.png\",\n        \"sizes\": \"144x144\",\n        \"type\": \"image/png\"\n      }\n    ]\n}"
  },
  {
    "path": "docs/.vuepress/public/style/config.json",
    "content": "{\"global\":{\"$--color-primary\":\"#282C34\",\"$--color-warning\":\"#E7C000\",\"$--color-danger\":\"#CC0000\",\"$--color-text-primary\":\"#2C3E50\"},\"local\":{}}"
  },
  {
    "path": "docs/.vuepress/public/style/theme/dark.css",
    "content": "@charset \"UTF-8\";.el-pagination--small .arrow.disabled,.el-table .hidden-columns,.el-table td.is-hidden>*,.el-table th.is-hidden>*,.el-table--hidden{visibility:hidden}.el-input__suffix,.el-tree.is-dragging .el-tree-node__content *{pointer-events:none}.el-dropdown .el-dropdown-selfdefine:focus:active,.el-dropdown .el-dropdown-selfdefine:focus:not(.focusing),.el-message__closeBtn:focus,.el-message__content:focus,.el-popover:focus,.el-popover:focus:active,.el-popover__reference:focus:hover,.el-popover__reference:focus:not(.focusing),.el-rate:active,.el-rate:focus,.el-tooltip:focus:hover,.el-tooltip:focus:not(.focusing),.el-upload-list__item.is-success:active,.el-upload-list__item.is-success:not(.focusing):focus{outline-width:0}@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-display:\"auto\";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-ice-cream-round:before{content:\"\\e6a0\"}.el-icon-ice-cream-square:before{content:\"\\e6a3\"}.el-icon-lollipop:before{content:\"\\e6a4\"}.el-icon-potato-strips:before{content:\"\\e6a5\"}.el-icon-milk-tea:before{content:\"\\e6a6\"}.el-icon-ice-drink:before{content:\"\\e6a7\"}.el-icon-ice-tea:before{content:\"\\e6a9\"}.el-icon-coffee:before{content:\"\\e6aa\"}.el-icon-orange:before{content:\"\\e6ab\"}.el-icon-pear:before{content:\"\\e6ac\"}.el-icon-apple:before{content:\"\\e6ad\"}.el-icon-cherry:before{content:\"\\e6ae\"}.el-icon-watermelon:before{content:\"\\e6af\"}.el-icon-grape:before{content:\"\\e6b0\"}.el-icon-refrigerator:before{content:\"\\e6b1\"}.el-icon-goblet-square-full:before{content:\"\\e6b2\"}.el-icon-goblet-square:before{content:\"\\e6b3\"}.el-icon-goblet-full:before{content:\"\\e6b4\"}.el-icon-goblet:before{content:\"\\e6b5\"}.el-icon-cold-drink:before{content:\"\\e6b6\"}.el-icon-coffee-cup:before{content:\"\\e6b8\"}.el-icon-water-cup:before{content:\"\\e6b9\"}.el-icon-hot-water:before{content:\"\\e6ba\"}.el-icon-ice-cream:before{content:\"\\e6bb\"}.el-icon-dessert:before{content:\"\\e6bc\"}.el-icon-sugar:before{content:\"\\e6bd\"}.el-icon-tableware:before{content:\"\\e6be\"}.el-icon-burger:before{content:\"\\e6bf\"}.el-icon-knife-fork:before{content:\"\\e6c1\"}.el-icon-fork-spoon:before{content:\"\\e6c2\"}.el-icon-chicken:before{content:\"\\e6c3\"}.el-icon-food:before{content:\"\\e6c4\"}.el-icon-dish-1:before{content:\"\\e6c5\"}.el-icon-dish:before{content:\"\\e6c6\"}.el-icon-moon-night:before{content:\"\\e6ee\"}.el-icon-moon:before{content:\"\\e6f0\"}.el-icon-cloudy-and-sunny:before{content:\"\\e6f1\"}.el-icon-partly-cloudy:before{content:\"\\e6f2\"}.el-icon-cloudy:before{content:\"\\e6f3\"}.el-icon-sunny:before{content:\"\\e6f6\"}.el-icon-sunset:before{content:\"\\e6f7\"}.el-icon-sunrise-1:before{content:\"\\e6f8\"}.el-icon-sunrise:before{content:\"\\e6f9\"}.el-icon-heavy-rain:before{content:\"\\e6fa\"}.el-icon-lightning:before{content:\"\\e6fb\"}.el-icon-light-rain:before{content:\"\\e6fc\"}.el-icon-wind-power:before{content:\"\\e6fd\"}.el-icon-baseball:before{content:\"\\e712\"}.el-icon-soccer:before{content:\"\\e713\"}.el-icon-football:before{content:\"\\e715\"}.el-icon-basketball:before{content:\"\\e716\"}.el-icon-ship:before{content:\"\\e73f\"}.el-icon-truck:before{content:\"\\e740\"}.el-icon-bicycle:before{content:\"\\e741\"}.el-icon-mobile-phone:before{content:\"\\e6d3\"}.el-icon-service:before{content:\"\\e6d4\"}.el-icon-key:before{content:\"\\e6e2\"}.el-icon-unlock:before{content:\"\\e6e4\"}.el-icon-lock:before{content:\"\\e6e5\"}.el-icon-watch:before{content:\"\\e6fe\"}.el-icon-watch-1:before{content:\"\\e6ff\"}.el-icon-timer:before{content:\"\\e702\"}.el-icon-alarm-clock:before{content:\"\\e703\"}.el-icon-map-location:before{content:\"\\e704\"}.el-icon-delete-location:before{content:\"\\e705\"}.el-icon-add-location:before{content:\"\\e706\"}.el-icon-location-information:before{content:\"\\e707\"}.el-icon-location-outline:before{content:\"\\e708\"}.el-icon-location:before{content:\"\\e79e\"}.el-icon-place:before{content:\"\\e709\"}.el-icon-discover:before{content:\"\\e70a\"}.el-icon-first-aid-kit:before{content:\"\\e70b\"}.el-icon-trophy-1:before{content:\"\\e70c\"}.el-icon-trophy:before{content:\"\\e70d\"}.el-icon-medal:before{content:\"\\e70e\"}.el-icon-medal-1:before{content:\"\\e70f\"}.el-icon-stopwatch:before{content:\"\\e710\"}.el-icon-mic:before{content:\"\\e711\"}.el-icon-copy-document:before{content:\"\\e718\"}.el-icon-full-screen:before{content:\"\\e719\"}.el-icon-switch-button:before{content:\"\\e71b\"}.el-icon-aim:before{content:\"\\e71c\"}.el-icon-crop:before{content:\"\\e71d\"}.el-icon-odometer:before{content:\"\\e71e\"}.el-icon-time:before{content:\"\\e71f\"}.el-icon-bangzhu:before{content:\"\\e724\"}.el-icon-close-notification:before{content:\"\\e726\"}.el-icon-microphone:before{content:\"\\e727\"}.el-icon-turn-off-microphone:before{content:\"\\e728\"}.el-icon-position:before{content:\"\\e729\"}.el-icon-postcard:before{content:\"\\e72a\"}.el-icon-message:before{content:\"\\e72b\"}.el-icon-chat-line-square:before{content:\"\\e72d\"}.el-icon-chat-dot-square:before{content:\"\\e72e\"}.el-icon-chat-dot-round:before{content:\"\\e72f\"}.el-icon-chat-square:before{content:\"\\e730\"}.el-icon-chat-line-round:before{content:\"\\e731\"}.el-icon-chat-round:before{content:\"\\e732\"}.el-icon-set-up:before{content:\"\\e733\"}.el-icon-turn-off:before{content:\"\\e734\"}.el-icon-open:before{content:\"\\e735\"}.el-icon-connection:before{content:\"\\e736\"}.el-icon-link:before{content:\"\\e737\"}.el-icon-cpu:before{content:\"\\e738\"}.el-icon-thumb:before{content:\"\\e739\"}.el-icon-female:before{content:\"\\e73a\"}.el-icon-male:before{content:\"\\e73b\"}.el-icon-guide:before{content:\"\\e73c\"}.el-icon-news:before{content:\"\\e73e\"}.el-icon-price-tag:before{content:\"\\e744\"}.el-icon-discount:before{content:\"\\e745\"}.el-icon-wallet:before{content:\"\\e747\"}.el-icon-coin:before{content:\"\\e748\"}.el-icon-money:before{content:\"\\e749\"}.el-icon-bank-card:before{content:\"\\e74a\"}.el-icon-box:before{content:\"\\e74b\"}.el-icon-present:before{content:\"\\e74c\"}.el-icon-sell:before{content:\"\\e6d5\"}.el-icon-sold-out:before{content:\"\\e6d6\"}.el-icon-shopping-bag-2:before{content:\"\\e74d\"}.el-icon-shopping-bag-1:before{content:\"\\e74e\"}.el-icon-shopping-cart-2:before{content:\"\\e74f\"}.el-icon-shopping-cart-1:before{content:\"\\e750\"}.el-icon-shopping-cart-full:before{content:\"\\e751\"}.el-icon-smoking:before{content:\"\\e752\"}.el-icon-no-smoking:before{content:\"\\e753\"}.el-icon-house:before{content:\"\\e754\"}.el-icon-table-lamp:before{content:\"\\e755\"}.el-icon-school:before{content:\"\\e756\"}.el-icon-office-building:before{content:\"\\e757\"}.el-icon-toilet-paper:before{content:\"\\e758\"}.el-icon-notebook-2:before{content:\"\\e759\"}.el-icon-notebook-1:before{content:\"\\e75a\"}.el-icon-files:before{content:\"\\e75b\"}.el-icon-collection:before{content:\"\\e75c\"}.el-icon-receiving:before{content:\"\\e75d\"}.el-icon-suitcase-1:before{content:\"\\e760\"}.el-icon-suitcase:before{content:\"\\e761\"}.el-icon-film:before{content:\"\\e763\"}.el-icon-collection-tag:before{content:\"\\e765\"}.el-icon-data-analysis:before{content:\"\\e766\"}.el-icon-pie-chart:before{content:\"\\e767\"}.el-icon-data-board:before{content:\"\\e768\"}.el-icon-data-line:before{content:\"\\e76d\"}.el-icon-reading:before{content:\"\\e769\"}.el-icon-magic-stick:before{content:\"\\e76a\"}.el-icon-coordinate:before{content:\"\\e76b\"}.el-icon-mouse:before{content:\"\\e76c\"}.el-icon-brush:before{content:\"\\e76e\"}.el-icon-headset:before{content:\"\\e76f\"}.el-icon-umbrella:before{content:\"\\e770\"}.el-icon-scissors:before{content:\"\\e771\"}.el-icon-mobile:before{content:\"\\e773\"}.el-icon-attract:before{content:\"\\e774\"}.el-icon-monitor:before{content:\"\\e775\"}.el-icon-search:before{content:\"\\e778\"}.el-icon-takeaway-box:before{content:\"\\e77a\"}.el-icon-paperclip:before{content:\"\\e77d\"}.el-icon-printer:before{content:\"\\e77e\"}.el-icon-document-add:before{content:\"\\e782\"}.el-icon-document:before{content:\"\\e785\"}.el-icon-document-checked:before{content:\"\\e786\"}.el-icon-document-copy:before{content:\"\\e787\"}.el-icon-document-delete:before{content:\"\\e788\"}.el-icon-document-remove:before{content:\"\\e789\"}.el-icon-tickets:before{content:\"\\e78b\"}.el-icon-folder-checked:before{content:\"\\e77f\"}.el-icon-folder-delete:before{content:\"\\e780\"}.el-icon-folder-remove:before{content:\"\\e781\"}.el-icon-folder-add:before{content:\"\\e783\"}.el-icon-folder-opened:before{content:\"\\e784\"}.el-icon-folder:before{content:\"\\e78a\"}.el-icon-edit-outline:before{content:\"\\e764\"}.el-icon-edit:before{content:\"\\e78c\"}.el-icon-date:before{content:\"\\e78e\"}.el-icon-c-scale-to-original:before{content:\"\\e7c6\"}.el-icon-view:before{content:\"\\e6ce\"}.el-icon-loading:before{content:\"\\e6cf\"}.el-icon-rank:before{content:\"\\e6d1\"}.el-icon-sort-down:before{content:\"\\e7c4\"}.el-icon-sort-up:before{content:\"\\e7c5\"}.el-icon-sort:before{content:\"\\e6d2\"}.el-icon-finished:before{content:\"\\e6cd\"}.el-icon-refresh-left:before{content:\"\\e6c7\"}.el-icon-refresh-right:before{content:\"\\e6c8\"}.el-icon-refresh:before{content:\"\\e6d0\"}.el-icon-video-play:before{content:\"\\e7c0\"}.el-icon-video-pause:before{content:\"\\e7c1\"}.el-icon-d-arrow-right:before{content:\"\\e6dc\"}.el-icon-d-arrow-left:before{content:\"\\e6dd\"}.el-icon-arrow-up:before{content:\"\\e6e1\"}.el-icon-arrow-down:before{content:\"\\e6df\"}.el-icon-arrow-right:before{content:\"\\e6e0\"}.el-icon-arrow-left:before{content:\"\\e6de\"}.el-icon-top-right:before{content:\"\\e6e7\"}.el-icon-top-left:before{content:\"\\e6e8\"}.el-icon-top:before{content:\"\\e6e6\"}.el-icon-bottom:before{content:\"\\e6eb\"}.el-icon-right:before{content:\"\\e6e9\"}.el-icon-back:before{content:\"\\e6ea\"}.el-icon-bottom-right:before{content:\"\\e6ec\"}.el-icon-bottom-left:before{content:\"\\e6ed\"}.el-icon-caret-top:before{content:\"\\e78f\"}.el-icon-caret-bottom:before{content:\"\\e790\"}.el-icon-caret-right:before{content:\"\\e791\"}.el-icon-caret-left:before{content:\"\\e792\"}.el-icon-d-caret:before{content:\"\\e79a\"}.el-icon-share:before{content:\"\\e793\"}.el-icon-menu:before{content:\"\\e798\"}.el-icon-s-grid:before{content:\"\\e7a6\"}.el-icon-s-check:before{content:\"\\e7a7\"}.el-icon-s-data:before{content:\"\\e7a8\"}.el-icon-s-opportunity:before{content:\"\\e7aa\"}.el-icon-s-custom:before{content:\"\\e7ab\"}.el-icon-s-claim:before{content:\"\\e7ad\"}.el-icon-s-finance:before{content:\"\\e7ae\"}.el-icon-s-comment:before{content:\"\\e7af\"}.el-icon-s-flag:before{content:\"\\e7b0\"}.el-icon-s-marketing:before{content:\"\\e7b1\"}.el-icon-s-shop:before{content:\"\\e7b4\"}.el-icon-s-open:before{content:\"\\e7b5\"}.el-icon-s-management:before{content:\"\\e7b6\"}.el-icon-s-ticket:before{content:\"\\e7b7\"}.el-icon-s-release:before{content:\"\\e7b8\"}.el-icon-s-home:before{content:\"\\e7b9\"}.el-icon-s-promotion:before{content:\"\\e7ba\"}.el-icon-s-operation:before{content:\"\\e7bb\"}.el-icon-s-unfold:before{content:\"\\e7bc\"}.el-icon-s-fold:before{content:\"\\e7a9\"}.el-icon-s-platform:before{content:\"\\e7bd\"}.el-icon-s-order:before{content:\"\\e7be\"}.el-icon-s-cooperation:before{content:\"\\e7bf\"}.el-icon-bell:before{content:\"\\e725\"}.el-icon-message-solid:before{content:\"\\e799\"}.el-icon-video-camera:before{content:\"\\e772\"}.el-icon-video-camera-solid:before{content:\"\\e796\"}.el-icon-camera:before{content:\"\\e779\"}.el-icon-camera-solid:before{content:\"\\e79b\"}.el-icon-download:before{content:\"\\e77c\"}.el-icon-upload2:before{content:\"\\e77b\"}.el-icon-upload:before{content:\"\\e7c3\"}.el-icon-picture-outline-round:before{content:\"\\e75f\"}.el-icon-picture-outline:before{content:\"\\e75e\"}.el-icon-picture:before{content:\"\\e79f\"}.el-icon-close:before{content:\"\\e6db\"}.el-icon-check:before{content:\"\\e6da\"}.el-icon-plus:before{content:\"\\e6d9\"}.el-icon-minus:before{content:\"\\e6d8\"}.el-icon-help:before{content:\"\\e73d\"}.el-icon-s-help:before{content:\"\\e7b3\"}.el-icon-circle-close:before{content:\"\\e78d\"}.el-icon-circle-check:before{content:\"\\e720\"}.el-icon-circle-plus-outline:before{content:\"\\e723\"}.el-icon-remove-outline:before{content:\"\\e722\"}.el-icon-zoom-out:before{content:\"\\e776\"}.el-icon-zoom-in:before{content:\"\\e777\"}.el-icon-error:before{content:\"\\e79d\"}.el-icon-success:before{content:\"\\e79c\"}.el-icon-circle-plus:before{content:\"\\e7a0\"}.el-icon-remove:before{content:\"\\e7a2\"}.el-icon-info:before{content:\"\\e7a1\"}.el-icon-question:before{content:\"\\e7a4\"}.el-icon-warning-outline:before{content:\"\\e6c9\"}.el-icon-warning:before{content:\"\\e7a3\"}.el-icon-goods:before{content:\"\\e7c2\"}.el-icon-s-goods:before{content:\"\\e7b2\"}.el-icon-star-off:before{content:\"\\e717\"}.el-icon-star-on:before{content:\"\\e797\"}.el-icon-more-outline:before{content:\"\\e6cc\"}.el-icon-more:before{content:\"\\e794\"}.el-icon-phone-outline:before{content:\"\\e6cb\"}.el-icon-phone:before{content:\"\\e795\"}.el-icon-user:before{content:\"\\e6e3\"}.el-icon-user-solid:before{content:\"\\e7a5\"}.el-icon-setting:before{content:\"\\e6ca\"}.el-icon-s-tools:before{content:\"\\e7ac\"}.el-icon-delete:before{content:\"\\e6d7\"}.el-icon-delete-solid:before{content:\"\\e7c9\"}.el-icon-eleme:before{content:\"\\e7c7\"}.el-icon-platform-eleme:before{content:\"\\e7ca\"}.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)}}.el-pagination{white-space:nowrap;padding:2px 5px;color:#FFF;font-weight:700}.el-pagination::after,.el-pagination::before{display:table;content:\"\"}.el-pagination::after{clear:both}.el-pagination button,.el-pagination span:not([class*=suffix]){display:inline-block;font-size:13px;min-width:35.5px;height:28px;line-height:28px;vertical-align:top;-webkit-box-sizing:border-box;box-sizing:border-box}.el-pagination .el-input__inner{text-align:center;-moz-appearance:textfield;line-height:normal}.el-pagination .el-input__suffix{right:0;-webkit-transform:scale(.8);transform:scale(.8)}.el-pagination .el-select .el-input{width:100px;margin:0 5px}.el-pagination .el-select .el-input .el-input__inner{padding-right:25px;border-radius:3px}.el-pagination button{border:none;padding:0 6px;background:0 0}.el-pagination button:focus{outline:0}.el-pagination button:hover{color:#D71A1B}.el-pagination button:disabled{color:#CCC;background-color:#232222;cursor:not-allowed}.el-pagination .btn-next,.el-pagination .btn-prev{background:center center no-repeat #232222;background-size:16px;cursor:pointer;margin:0;color:#FFF}.el-pagination .btn-next .el-icon,.el-pagination .btn-prev .el-icon{display:block;font-size:12px;font-weight:700}.el-pagination .btn-prev{padding-right:12px}.el-pagination .btn-next{padding-left:12px}.el-pagination .el-pager li.disabled{color:#CCC;cursor:not-allowed}.el-pager li,.el-pager li.btn-quicknext:hover,.el-pager li.btn-quickprev:hover{cursor:pointer}.el-pagination--small .btn-next,.el-pagination--small .btn-prev,.el-pagination--small .el-pager li,.el-pagination--small .el-pager li.btn-quicknext,.el-pagination--small .el-pager li.btn-quickprev,.el-pagination--small .el-pager li:last-child{border-color:transparent;font-size:12px;line-height:22px;height:22px;min-width:22px}.el-pagination--small .more::before,.el-pagination--small li.more::before{line-height:24px}.el-pagination--small button,.el-pagination--small span:not([class*=suffix]){height:22px;line-height:22px}.el-pagination--small .el-pagination__editor,.el-pagination--small .el-pagination__editor.el-input .el-input__inner{height:22px}.el-pagination__sizes{margin:0 10px 0 0;font-weight:400;color:#B8B8B8}.el-pagination__sizes .el-input .el-input__inner{font-size:13px;padding-left:8px}.el-pagination__sizes .el-input .el-input__inner:hover{border-color:#D71A1B}.el-pagination__total{margin-right:10px;font-weight:400;color:#B8B8B8}.el-pagination__jump{margin-left:24px;font-weight:400;color:#B8B8B8}.el-pagination__jump .el-input__inner{padding:0 3px}.el-pagination__rightwrapper{float:right}.el-pagination__editor{line-height:18px;padding:0 2px;height:28px;text-align:center;margin:0 2px;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:3px}.el-pager,.el-pagination.is-background .btn-next,.el-pagination.is-background .btn-prev{padding:0}.el-pagination__editor.el-input{width:50px}.el-pagination__editor.el-input .el-input__inner{height:28px}.el-pagination__editor .el-input__inner::-webkit-inner-spin-button,.el-pagination__editor .el-input__inner::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.el-pagination.is-background .btn-next,.el-pagination.is-background .btn-prev,.el-pagination.is-background .el-pager li{margin:0 5px;background-color:#323131;color:#B8B8B8;min-width:30px;border-radius:2px}.el-pagination.is-background .btn-next.disabled,.el-pagination.is-background .btn-next:disabled,.el-pagination.is-background .btn-prev.disabled,.el-pagination.is-background .btn-prev:disabled,.el-pagination.is-background .el-pager li.disabled{color:#CCC}.el-pagination.is-background .el-pager li:not(.disabled):hover{color:#D71A1B}.el-pagination.is-background .el-pager li:not(.disabled).active{background-color:#D71A1B;color:#232222}.el-dialog,.el-pager li{background:#232222;-webkit-box-sizing:border-box}.el-pagination.is-background.el-pagination--small .btn-next,.el-pagination.is-background.el-pagination--small .btn-prev,.el-pagination.is-background.el-pagination--small .el-pager li{margin:0 3px;min-width:22px}.el-pager,.el-pager li{vertical-align:top;margin:0;display:inline-block}.el-pager{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;list-style:none;font-size:0}.el-date-table,.el-table th{-webkit-user-select:none;-moz-user-select:none}.el-pager .more::before{line-height:30px}.el-pager li{padding:0 4px;font-size:13px;min-width:35.5px;height:28px;line-height:28px;box-sizing:border-box;text-align:center}.el-menu--collapse .el-menu .el-submenu,.el-menu--popup{min-width:200px}.el-pager li.btn-quicknext,.el-pager li.btn-quickprev{line-height:28px;color:#FFF}.el-pager li.btn-quicknext.disabled,.el-pager li.btn-quickprev.disabled{color:#CCC}.el-pager li.active+li{border-left:0}.el-pager li:hover{color:#D71A1B}.el-pager li.active{color:#D71A1B;cursor:default}@-webkit-keyframes v-modal-in{0%{opacity:0}}@-webkit-keyframes v-modal-out{100%{opacity:0}}.el-dialog{position:relative;margin:0 auto 50px;border-radius:2px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.3);box-shadow:0 1px 3px rgba(0,0,0,.3);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:#B8B8B8}.el-dialog__headerbtn:focus .el-dialog__close,.el-dialog__headerbtn:hover .el-dialog__close{color:#D71A1B}.el-dialog__title{line-height:24px;font-size:18px;color:#FFF}.el-dialog__body{padding:30px 20px;color:#B8B8B8;font-size:14px;word-break:break-all}.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}}.el-autocomplete{position:relative;display:inline-block}.el-autocomplete-suggestion{margin:5px 0;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);border-radius:4px;border:1px solid #7A7A7A;-webkit-box-sizing:border-box;box-sizing:border-box;background-color:#232222}.el-dropdown-menu,.el-menu--collapse .el-submenu .el-menu{z-index:10;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-autocomplete-suggestion__wrap{max-height:280px;padding:10px 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-autocomplete-suggestion__list{margin:0;padding:0}.el-autocomplete-suggestion li{padding:0 20px;margin:0;line-height:34px;cursor:pointer;color:#B8B8B8;font-size:14px;list-style:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.el-autocomplete-suggestion li.highlighted,.el-autocomplete-suggestion li:hover{background-color:#171315}.el-autocomplete-suggestion li.divider{margin-top:6px;border-top:1px solid #F4F4F4}.el-autocomplete-suggestion li.divider:last-child{margin-bottom:-6px}.el-autocomplete-suggestion.is-loading li{text-align:center;height:100px;line-height:100px;font-size:20px;color:#999}.el-autocomplete-suggestion.is-loading li::after{display:inline-block;content:\"\";height:100%;vertical-align:middle}.el-autocomplete-suggestion.is-loading li:hover{background-color:#232222}.el-autocomplete-suggestion.is-loading .el-icon-loading{vertical-align:middle}.el-dropdown{display:inline-block;position:relative;color:#B8B8B8;font-size:14px}.el-dropdown .el-button-group{display:block}.el-dropdown .el-button-group .el-button{float:none}.el-dropdown .el-dropdown__caret-button{padding-left:5px;padding-right:5px;position:relative;border-left:none}.el-dropdown .el-dropdown__caret-button::before{content:'';position:absolute;display:block;width:1px;top:5px;bottom:5px;left:0;background:rgba(255,255,255,.5)}.el-dropdown .el-dropdown__caret-button.el-button--default::before{background:rgba(190,190,190,.5)}.el-dropdown .el-dropdown__caret-button:hover::before{top:0;bottom:0}.el-dropdown .el-dropdown__caret-button .el-dropdown__icon{padding-left:0}.el-dropdown__icon{font-size:12px;margin:0 3px}.el-dropdown-menu{position:absolute;top:0;left:0;padding:10px 0;margin:5px 0;background-color:#232222;border:1px solid #454545;border-radius:4px;box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-dropdown-menu__item{list-style:none;line-height:36px;padding:0 20px;margin:0;font-size:14px;color:#B8B8B8;cursor:pointer;outline:0}.el-dropdown-menu__item:focus,.el-dropdown-menu__item:not(.is-disabled):hover{background-color:#352121;color:#b31c1c}.el-dropdown-menu__item i{margin-right:5px}.el-dropdown-menu__item--divided{position:relative;margin-top:6px;border-top:1px solid #454545}.el-dropdown-menu__item--divided:before{content:'';height:6px;display:block;margin:0 -20px;background-color:#232222}.el-dropdown-menu__item.is-disabled{cursor:default;color:#bbb;pointer-events:none}.el-dropdown-menu--medium{padding:6px 0}.el-dropdown-menu--medium .el-dropdown-menu__item{line-height:30px;padding:0 17px;font-size:14px}.el-dropdown-menu--medium .el-dropdown-menu__item.el-dropdown-menu__item--divided{margin-top:6px}.el-dropdown-menu--medium .el-dropdown-menu__item.el-dropdown-menu__item--divided:before{height:6px;margin:0 -17px}.el-dropdown-menu--small{padding:6px 0}.el-dropdown-menu--small .el-dropdown-menu__item{line-height:27px;padding:0 15px;font-size:13px}.el-dropdown-menu--small .el-dropdown-menu__item.el-dropdown-menu__item--divided{margin-top:4px}.el-dropdown-menu--small .el-dropdown-menu__item.el-dropdown-menu__item--divided:before{height:4px;margin:0 -15px}.el-dropdown-menu--mini{padding:3px 0}.el-dropdown-menu--mini .el-dropdown-menu__item{line-height:24px;padding:0 10px;font-size:12px}.el-dropdown-menu--mini .el-dropdown-menu__item.el-dropdown-menu__item--divided{margin-top:3px}.el-dropdown-menu--mini .el-dropdown-menu__item.el-dropdown-menu__item--divided:before{height:3px;margin:0 -10px}.el-menu{border-right:solid 1px #e6e6e6;list-style:none;position:relative;margin:0;padding-left:0;background-color:#232222}.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::after,.el-menu::before{display:table;content:\"\"}.el-menu::after{clear:both}.el-menu.el-menu--horizontal{border-bottom:solid 1px #e6e6e6}.el-menu--horizontal{border-right:none}.el-menu--horizontal>.el-menu-item{float:left;height:60px;line-height:60px;margin:0;border-bottom:2px solid transparent;color:#BCBCBC}.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:#FFF}.el-menu--horizontal>.el-submenu.is-active .el-submenu__title{border-bottom:2px solid #D71A1B;color:#FFF}.el-menu--horizontal>.el-submenu .el-submenu__title{height:60px;line-height:60px;border-bottom:2px solid transparent;color:#BCBCBC}.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:#232222;float:none;height:36px;line-height:36px;padding:0 10px;color:#BCBCBC}.el-menu--horizontal .el-menu .el-menu-item.is-active,.el-menu--horizontal .el-menu .el-submenu.is-active>.el-submenu__title{color:#FFF}.el-menu--horizontal .el-menu-item:not(.is-disabled):focus,.el-menu--horizontal .el-menu-item:not(.is-disabled):hover{outline:0;color:#FFF}.el-menu--horizontal>.el-menu-item.is-active{border-bottom:2px solid #D71A1B;color:#FFF}.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%;border:1px solid #7A7A7A;border-radius:2px;box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-menu-item,.el-submenu__title{height:56px;line-height:56px;position:relative;-webkit-box-sizing:border-box;white-space:nowrap;list-style:none}.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:#FFF;padding:0 20px;cursor:pointer;-webkit-transition:border-color .3s,background-color .3s,color .3s;transition:border-color .3s,background-color .3s,color .3s;box-sizing:border-box}.el-menu-item *{vertical-align:middle}.el-menu-item i{color:#BCBCBC}.el-menu-item:focus,.el-menu-item:hover{outline:0;background-color:#352121}.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:#D71A1B}.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:#FFF;padding:0 20px;cursor:pointer;-webkit-transition:border-color .3s,background-color .3s,color .3s;transition:border-color .3s,background-color .3s,color .3s;box-sizing:border-box}.el-submenu__title *{vertical-align:middle}.el-submenu__title i{color:#BCBCBC}.el-submenu__title:focus,.el-submenu__title:hover{outline:0;background-color:#352121}.el-submenu__title.is-disabled{opacity:.25;cursor:not-allowed;background:0 0!important}.el-submenu__title:hover{background-color:#352121}.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:#D71A1B}.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:#BCBCBC}.el-radio-button__inner,.el-radio-group{display:inline-block;line-height:1;vertical-align:middle}.horizontal-collapse-transition .el-submenu__title .el-submenu__icon-arrow{-webkit-transition:.2s;transition:.2s;opacity:0}.el-radio-group{font-size:0}.el-radio-button{position:relative;display:inline-block;outline:0}.el-radio-button__inner{white-space:nowrap;background:#232222;border:1px solid #BEBEBE;font-weight:500;border-left:0;color:#B8B8B8;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;position:relative;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:#D71A1B}.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 #BEBEBE;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:#232222;background-color:#D71A1B;border-color:#D71A1B;-webkit-box-shadow:-1px 0 0 0 #D71A1B;box-shadow:-1px 0 0 0 #D71A1B}.el-radio-button__orig-radio:disabled+.el-radio-button__inner{color:#CCC;cursor:not-allowed;background-image:none;background-color:#232222;border-color:#454545;-webkit-box-shadow:none;box-shadow:none}.el-radio-button__orig-radio:disabled:checked+.el-radio-button__inner{background-color:#171514}.el-radio-button:last-child .el-radio-button__inner{border-radius:0 4px 4px 0}.el-popover,.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):not(.is-disabled){-webkit-box-shadow:0 0 2px 2px #D71A1B;box-shadow:0 0 2px 2px #D71A1B}.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__core,.el-switch__label{display:inline-block;cursor:pointer}.el-switch.is-disabled .el-switch__core,.el-switch.is-disabled .el-switch__label{cursor:not-allowed}.el-switch__label{-webkit-transition:.2s;transition:.2s;height:20px;font-size:14px;font-weight:500;vertical-align:middle;color:#FFF}.el-switch__label.is-active{color:#D71A1B}.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__core{margin:0;position:relative;width:40px;height:20px;border:1px solid #BEBEBE;outline:0;border-radius:10px;-webkit-box-sizing:border-box;box-sizing:border-box;background:#BEBEBE;-webkit-transition:border-color .3s,background-color .3s;transition:border-color .3s,background-color .3s;vertical-align:middle}.el-switch__core:after{content:\"\";position:absolute;top:1px;left:1px;border-radius:100%;-webkit-transition:all .3s;transition:all .3s;width:16px;height:16px;background-color:#232222}.el-switch.is-checked .el-switch__core{border-color:#D71A1B;background-color:#D71A1B}.el-switch.is-checked .el-switch__core::after{left:100%;margin-left:-17px}.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}.el-select-dropdown{position:absolute;z-index:1001;border:1px solid #7A7A7A;border-radius:4px;background-color:#232222;-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:#D71A1B;background-color:#232222}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected.hover{background-color:#171315}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected::after{position:absolute;right:20px;font-family:element-icons;content:\"\\e6da\";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}.el-select-dropdown__item{font-size:14px;padding:0 20px;position:relative;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#B8B8B8;height:34px;line-height:34px;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer}.el-select-dropdown__item.is-disabled{color:#CCC;cursor:not-allowed}.el-select-dropdown__item.is-disabled:hover{background-color:#232222}.el-select-dropdown__item.hover,.el-select-dropdown__item:hover{background-color:#171315}.el-select-dropdown__item.selected{color:#D71A1B;font-weight:700}.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:#7A7A7A}.el-select-group__title{padding-left:20px;font-size:12px;color:#B8B8B8;line-height:30px}.el-select-group .el-select-dropdown__item{padding-left:20px}.el-select{display:inline-block;position:relative}.el-select .el-select__tags>span{display:contents}.el-select:hover .el-input__inner{border-color:#CCC}.el-select .el-input__inner{cursor:pointer;padding-right:35px}.el-select .el-input__inner:focus{border-color:#D71A1B}.el-select .el-input .el-select__caret{color:#CCC;font-size:14px;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg);cursor:pointer}.el-select .el-input .el-select__caret.is-reverse{-webkit-transform:rotateZ(0);transform:rotateZ(0)}.el-select .el-input .el-select__caret.is-show-close{font-size:14px;text-align:center;-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg);border-radius:100%;color:#CCC;-webkit-transition:color .2s cubic-bezier(.645,.045,.355,1);transition:color .2s cubic-bezier(.645,.045,.355,1)}.el-select .el-input .el-select__caret.is-show-close:hover{color:#BCBCBC}.el-select .el-input.is-disabled .el-input__inner{cursor:not-allowed}.el-select .el-input.is-disabled .el-input__inner:hover{border-color:#7A7A7A}.el-select .el-input.is-focus .el-input__inner{border-color:#D71A1B}.el-select>.el-input{display:block}.el-select__input{border:none;outline:0;padding:0;margin-left:15px;color:#666;font-size:14px;-webkit-appearance:none;-moz-appearance:none;appearance:none;height:28px;background-color:transparent}.el-select__input.is-mini{height:14px}.el-select__close{cursor:pointer;position:absolute;top:8px;z-index:1000;right:25px;color:#CCC;line-height:18px;font-size:14px}.el-select__close:hover{color:#BCBCBC}.el-select__tags{position:absolute;line-height:normal;white-space:normal;z-index:1;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-wrap:wrap;flex-wrap:wrap}.el-select .el-tag__close{margin-top:-2px}.el-select .el-tag{-webkit-box-sizing:border-box;box-sizing:border-box;border-color:transparent;margin:2px 0 2px 6px;background-color:#f0f2f5}.el-select .el-tag__close.el-icon-close{background-color:#CCC;right:-7px;top:0;color:#232222}.el-select .el-tag__close.el-icon-close:hover{background-color:#BCBCBC}.el-table,.el-table__expanded-cell{background-color:#232222}.el-select .el-tag__close.el-icon-close::before{display:block;-webkit-transform:translate(0,.5px);transform:translate(0,.5px)}.el-table{position:relative;overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:1;-ms-flex:1;flex:1;width:100%;max-width:100%;font-size:14px;color:#B8B8B8}.el-table--mini,.el-table--small,.el-table__expand-icon{font-size:12px}.el-table__empty-block{min-height:60px;text-align:center;width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-table__empty-text{line-height:60px;width:50%;color:#BCBCBC}.el-table__expand-column .cell{padding:0;text-align:center}.el-table__expand-icon{position:relative;cursor:pointer;color:#666;-webkit-transition:-webkit-transform .2s ease-in-out;transition:-webkit-transform .2s ease-in-out;transition:transform .2s ease-in-out;transition:transform .2s ease-in-out,-webkit-transform .2s ease-in-out;height:20px}.el-table__expand-icon--expanded{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.el-table__expand-icon>.el-icon{position:absolute;left:50%;top:50%;margin-left:-5px;margin-top:-5px}.el-table__expanded-cell[class*=cell]{padding:20px 50px}.el-table__expanded-cell:hover{background-color:transparent!important}.el-table__placeholder{display:inline-block;width:20px}.el-table__append-wrapper{overflow:hidden}.el-table--fit{border-right:0;border-bottom:0}.el-table--fit td.gutter,.el-table--fit th.gutter{border-right-width:1px}.el-table--scrollable-x .el-table__body-wrapper{overflow-x:auto}.el-table--scrollable-y .el-table__body-wrapper{overflow-y:auto}.el-table thead{color:#BCBCBC;font-weight:500}.el-table thead.is-group th{background:#171315}.el-table th,.el-table tr{background-color:#232222}.el-table td,.el-table th{padding:12px 0;min-width:0;-webkit-box-sizing:border-box;box-sizing:border-box;text-overflow:ellipsis;vertical-align:middle;position:relative;text-align:left}.el-table td.is-center,.el-table th.is-center{text-align:center}.el-table td.is-right,.el-table th.is-right{text-align:right}.el-table td.gutter,.el-table th.gutter{width:15px;border-right-width:0;border-bottom-width:0;padding:0}.el-table--medium td,.el-table--medium th{padding:10px 0}.el-table--small td,.el-table--small th{padding:8px 0}.el-table--mini td,.el-table--mini th{padding:6px 0}.el-table .cell,.el-table--border td:first-child .cell,.el-table--border th:first-child .cell{padding-left:10px}.el-table tr input[type=checkbox]{margin:0}.el-table td,.el-table th.is-leaf{border-bottom:1px solid #454545}.el-table th.is-sortable{cursor:pointer}.el-table th{overflow:hidden;-ms-user-select:none;user-select:none}.el-table th>.cell{display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;position:relative;vertical-align:middle;padding-left:10px;padding-right:10px;width:100%}.el-table th>.cell.highlight{color:#D71A1B}.el-table th.required>div::before{display:inline-block;content:\"\";width:8px;height:8px;border-radius:50%;background:#ff4d51;margin-right:5px;vertical-align:middle}.el-table td div{-webkit-box-sizing:border-box;box-sizing:border-box}.el-table td.gutter{width:0}.el-table .cell{-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden;text-overflow:ellipsis;white-space:normal;word-break:break-all;line-height:23px;padding-right:10px}.el-table .cell.el-tooltip{white-space:nowrap;min-width:50px}.el-table--border,.el-table--group{border:1px solid #454545}.el-table--border::after,.el-table--group::after,.el-table::before{content:'';position:absolute;background-color:#454545;z-index:1}.el-table--border::after,.el-table--group::after{top:0;right:0;width:1px;height:100%}.el-table::before{left:0;bottom:0;width:100%;height:1px}.el-table--border{border-right:none;border-bottom:none}.el-table--border.el-loading-parent--relative{border-color:transparent}.el-table--border td,.el-table--border th,.el-table__body-wrapper .el-table--border.is-scrolling-left~.el-table__fixed{border-right:1px solid #454545}.el-table--border th.gutter:last-of-type{border-bottom:1px solid #454545;border-bottom-width:1px}.el-table--border th,.el-table__fixed-right-patch{border-bottom:1px solid #454545}.el-table__fixed,.el-table__fixed-right{position:absolute;top:0;left:0;overflow-x:hidden;overflow-y:hidden;-webkit-box-shadow:0 0 10px rgba(0,0,0,.12);box-shadow:0 0 10px rgba(0,0,0,.12)}.el-table__fixed-right::before,.el-table__fixed::before{content:'';position:absolute;left:0;bottom:0;width:100%;height:1px;background-color:#454545;z-index:4}.el-table__fixed-right-patch{position:absolute;top:-1px;right:0;background-color:#232222}.el-table__fixed-right{top:0;left:auto;right:0}.el-table__fixed-right .el-table__fixed-body-wrapper,.el-table__fixed-right .el-table__fixed-footer-wrapper,.el-table__fixed-right .el-table__fixed-header-wrapper{left:auto;right:0}.el-table__fixed-header-wrapper{position:absolute;left:0;top:0;z-index:3}.el-table__fixed-footer-wrapper{position:absolute;left:0;bottom:0;z-index:3}.el-table__fixed-footer-wrapper tbody td{border-top:1px solid #454545;background-color:#171315;color:#B8B8B8}.el-table__fixed-body-wrapper{position:absolute;left:0;top:37px;overflow:hidden;z-index:3}.el-table__body-wrapper,.el-table__footer-wrapper,.el-table__header-wrapper{width:100%}.el-table__footer-wrapper{margin-top:-1px}.el-table__footer-wrapper td{border-top:1px solid #454545}.el-table__body,.el-table__footer,.el-table__header{table-layout:fixed;border-collapse:separate}.el-table__footer-wrapper,.el-table__header-wrapper{overflow:hidden}.el-table__footer-wrapper tbody td,.el-table__header-wrapper tbody td{background-color:#171315;color:#B8B8B8}.el-table__body-wrapper{overflow:hidden;position:relative}.el-table__body-wrapper.is-scrolling-left~.el-table__fixed,.el-table__body-wrapper.is-scrolling-none~.el-table__fixed,.el-table__body-wrapper.is-scrolling-none~.el-table__fixed-right,.el-table__body-wrapper.is-scrolling-right~.el-table__fixed-right{-webkit-box-shadow:none;box-shadow:none}.el-picker-panel,.el-table-filter{-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-table__body-wrapper .el-table--border.is-scrolling-right~.el-table__fixed-right{border-left:1px solid #454545}.el-table .caret-wrapper{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:34px;width:24px;vertical-align:middle;cursor:pointer;overflow:initial;position:relative}.el-table .sort-caret{width:0;height:0;border:5px solid transparent;position:absolute;left:7px}.el-table .sort-caret.ascending{border-bottom-color:#CCC;top:5px}.el-table .sort-caret.descending{border-top-color:#CCC;bottom:7px}.el-table .ascending .sort-caret.ascending{border-bottom-color:#D71A1B}.el-table .descending .sort-caret.descending{border-top-color:#D71A1B}.el-table .hidden-columns{position:absolute;z-index:-1}.el-table--striped .el-table__body tr.el-table__row--striped td{background:#FAFAFA}.el-table--striped .el-table__body tr.el-table__row--striped.current-row td{background-color:#352121}.el-table__body tr.hover-row.current-row>td,.el-table__body tr.hover-row.el-table__row--striped.current-row>td,.el-table__body tr.hover-row.el-table__row--striped>td,.el-table__body tr.hover-row>td{background-color:#171315}.el-table__body tr.current-row>td{background-color:#352121}.el-table__column-resize-proxy{position:absolute;left:200px;top:0;bottom:0;width:0;border-left:1px solid #454545;z-index:10}.el-table__column-filter-trigger{display:inline-block;line-height:34px;cursor:pointer}.el-table__column-filter-trigger i{color:#B8B8B8;font-size:12px;-webkit-transform:scale(.75);transform:scale(.75)}.el-table--enable-row-transition .el-table__body td{-webkit-transition:background-color .25s ease;transition:background-color .25s ease}.el-table--enable-row-hover .el-table__body tr:hover>td{background-color:#171315}.el-table--fluid-height .el-table__fixed,.el-table--fluid-height .el-table__fixed-right{bottom:0;overflow:hidden}.el-table [class*=el-table__row--level] .el-table__expand-icon{display:inline-block;width:20px;line-height:20px;height:20px;text-align:center;margin-right:3px}.el-table-column--selection .cell{padding-left:14px;padding-right:14px}.el-table-filter{border:1px solid #454545;border-radius:2px;background-color:#232222;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);-webkit-box-sizing:border-box;box-sizing:border-box;margin:2px 0}.el-date-table td,.el-date-table td div{height:30px;-webkit-box-sizing:border-box}.el-table-filter__list{padding:5px 0;margin:0;list-style:none;min-width:100px}.el-table-filter__list-item{line-height:36px;padding:0 10px;cursor:pointer;font-size:14px}.el-table-filter__list-item:hover{background-color:#352121;color:#b31c1c}.el-table-filter__list-item.is-active{background-color:#D71A1B;color:#232222}.el-table-filter__content{min-width:100px}.el-table-filter__bottom{border-top:1px solid #454545;padding:8px}.el-table-filter__bottom button{background:0 0;border:none;color:#B8B8B8;cursor:pointer;font-size:13px;padding:0 3px}.el-date-table td.in-range div,.el-date-table td.in-range div:hover,.el-date-table.is-week-mode .el-date-table__row.current div,.el-date-table.is-week-mode .el-date-table__row:hover div{background-color:#171514}.el-table-filter__bottom button:hover{color:#D71A1B}.el-table-filter__bottom button:focus{outline:0}.el-table-filter__bottom button.is-disabled{color:#CCC;cursor:not-allowed}.el-table-filter__wrap{max-height:280px}.el-table-filter__checkbox-group{padding:10px}.el-table-filter__checkbox-group label.el-checkbox{display:block;margin-right:5px;margin-bottom:8px;margin-left:5px}.el-table-filter__checkbox-group .el-checkbox:last-child{margin-bottom:0}.el-date-table{font-size:12px;-ms-user-select:none;user-select:none}.el-date-table.is-week-mode .el-date-table__row:hover td.available:hover{color:#B8B8B8}.el-date-table.is-week-mode .el-date-table__row:hover td:first-child div{margin-left:5px;border-top-left-radius:15px;border-bottom-left-radius:15px}.el-date-table.is-week-mode .el-date-table__row:hover td:last-child div{margin-right:5px;border-top-right-radius:15px;border-bottom-right-radius:15px}.el-date-table td{width:32px;padding:4px 0;box-sizing:border-box;text-align:center;cursor:pointer;position:relative}.el-date-table td div{padding:3px 0;box-sizing:border-box}.el-date-table td span{width:24px;height:24px;display:block;margin:0 auto;line-height:24px;position:absolute;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);border-radius:50%}.el-date-table td.next-month,.el-date-table td.prev-month{color:#CCC}.el-date-table td.today{position:relative}.el-date-table td.today span{color:#D71A1B;font-weight:700}.el-date-table td.today.end-date span,.el-date-table td.today.start-date span{color:#232222}.el-date-table td.available:hover{color:#D71A1B}.el-date-table td.current:not(.disabled) span{color:#232222;background-color:#D71A1B}.el-date-table td.end-date div,.el-date-table td.start-date div{color:#232222}.el-date-table td.end-date span,.el-date-table td.start-date span{background-color:#D71A1B}.el-date-table td.start-date div{margin-left:5px;border-top-left-radius:15px;border-bottom-left-radius:15px}.el-date-table td.end-date div{margin-right:5px;border-top-right-radius:15px;border-bottom-right-radius:15px}.el-date-table td.disabled div{background-color:#171315;opacity:1;cursor:not-allowed;color:#CCC}.el-date-table td.selected div{margin-left:5px;margin-right:5px;background-color:#171514;border-radius:15px}.el-date-table td.selected div:hover{background-color:#171514}.el-date-table td.selected span{background-color:#D71A1B;color:#232222;border-radius:15px}.el-date-table td.week{font-size:80%;color:#B8B8B8}.el-month-table,.el-year-table{font-size:12px;border-collapse:collapse}.el-date-table th{padding:5px;color:#B8B8B8;font-weight:400;border-bottom:solid 1px #454545}.el-month-table{margin:-1px}.el-month-table td{text-align:center;padding:8px 0;cursor:pointer}.el-month-table td div{height:48px;padding:6px 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-month-table td.today .cell{color:#D71A1B;font-weight:700}.el-month-table td.today.end-date .cell,.el-month-table td.today.start-date .cell{color:#232222}.el-month-table td.disabled .cell{background-color:#171315;cursor:not-allowed;color:#CCC}.el-month-table td.disabled .cell:hover{color:#CCC}.el-month-table td .cell{width:60px;height:36px;display:block;line-height:36px;color:#B8B8B8;margin:0 auto;border-radius:18px}.el-month-table td .cell:hover{color:#D71A1B}.el-month-table td.in-range div,.el-month-table td.in-range div:hover{background-color:#171514}.el-month-table td.end-date div,.el-month-table td.start-date div{color:#232222}.el-month-table td.end-date .cell,.el-month-table td.start-date .cell{color:#232222;background-color:#D71A1B}.el-month-table td.start-date div{border-top-left-radius:24px;border-bottom-left-radius:24px}.el-month-table td.end-date div{border-top-right-radius:24px;border-bottom-right-radius:24px}.el-month-table td.current:not(.disabled) .cell{color:#D71A1B}.el-year-table{margin:-1px}.el-year-table .el-icon{color:#FFF}.el-year-table td{text-align:center;padding:20px 3px;cursor:pointer}.el-year-table td.today .cell{color:#D71A1B;font-weight:700}.el-year-table td.disabled .cell{background-color:#171315;cursor:not-allowed;color:#CCC}.el-year-table td.disabled .cell:hover{color:#CCC}.el-year-table td .cell{width:48px;height:32px;display:block;line-height:32px;color:#B8B8B8;margin:0 auto}.el-year-table td .cell:hover,.el-year-table td.current:not(.disabled) .cell{color:#D71A1B}.el-date-range-picker{width:646px}.el-date-range-picker.has-sidebar{width:756px}.el-date-range-picker table{table-layout:fixed;width:100%}.el-date-range-picker .el-picker-panel__body{min-width:513px}.el-date-range-picker .el-picker-panel__content{margin:0}.el-date-range-picker__header{position:relative;text-align:center;height:28px}.el-date-range-picker__header [class*=arrow-left]{float:left}.el-date-range-picker__header [class*=arrow-right]{float:right}.el-date-range-picker__header div{font-size:16px;font-weight:500;margin-right:50px}.el-date-range-picker__content{float:left;width:50%;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:16px}.el-date-range-picker__content.is-left{border-right:1px solid #e4e4e4}.el-date-range-picker__content .el-date-range-picker__header div{margin-left:50px;margin-right:50px}.el-date-range-picker__editors-wrap{-webkit-box-sizing:border-box;box-sizing:border-box;display:table-cell}.el-date-range-picker__editors-wrap.is-right{text-align:right}.el-date-range-picker__time-header{position:relative;border-bottom:1px solid #e4e4e4;font-size:12px;padding:8px 5px 5px;display:table;width:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.el-date-range-picker__time-header>.el-icon-arrow-right{font-size:20px;vertical-align:middle;display:table-cell;color:#FFF}.el-date-range-picker__time-picker-wrap{position:relative;display:table-cell;padding:0 5px}.el-date-range-picker__time-picker-wrap .el-picker-panel{position:absolute;top:13px;right:0;z-index:1;background:#232222}.el-date-picker{width:322px}.el-date-picker.has-sidebar.has-time{width:434px}.el-date-picker.has-sidebar{width:438px}.el-date-picker.has-time .el-picker-panel__body-wrapper{position:relative}.el-date-picker .el-picker-panel__content{width:292px}.el-date-picker table{table-layout:fixed;width:100%}.el-date-picker__editor-wrap{position:relative;display:table-cell;padding:0 5px}.el-date-picker__time-header{position:relative;border-bottom:1px solid #e4e4e4;font-size:12px;padding:8px 5px 5px;display:table;width:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.el-date-picker__header{margin:12px;text-align:center}.el-date-picker__header--bordered{margin-bottom:0;padding-bottom:12px;border-bottom:solid 1px #454545}.el-date-picker__header--bordered+.el-picker-panel__content{margin-top:0}.el-date-picker__header-label{font-size:16px;font-weight:500;padding:0 5px;line-height:22px;text-align:center;cursor:pointer;color:#B8B8B8}.el-date-picker__header-label.active,.el-date-picker__header-label:hover{color:#D71A1B}.el-date-picker__prev-btn{float:left}.el-date-picker__next-btn{float:right}.el-date-picker__time-wrap{padding:10px;text-align:center}.el-date-picker__time-label{float:left;cursor:pointer;line-height:30px;margin-left:10px}.time-select{margin:5px 0;min-width:0}.time-select .el-picker-panel__content{max-height:200px;margin:0}.time-select-item{padding:8px 10px;font-size:14px;line-height:20px}.time-select-item.selected:not(.disabled){color:#D71A1B;font-weight:700}.time-select-item.disabled{color:#7A7A7A;cursor:not-allowed}.time-select-item:hover{background-color:#171315;font-weight:700;cursor:pointer}.el-date-editor{position:relative;display:inline-block;text-align:left}.el-date-editor.el-input,.el-date-editor.el-input__inner{width:220px}.el-date-editor--monthrange.el-input,.el-date-editor--monthrange.el-input__inner{width:300px}.el-date-editor--daterange.el-input,.el-date-editor--daterange.el-input__inner,.el-date-editor--timerange.el-input,.el-date-editor--timerange.el-input__inner{width:350px}.el-date-editor--datetimerange.el-input,.el-date-editor--datetimerange.el-input__inner{width:400px}.el-date-editor--dates .el-input__inner{text-overflow:ellipsis;white-space:nowrap}.el-date-editor .el-icon-circle-close{cursor:pointer}.el-date-editor .el-range__icon{font-size:14px;margin-left:-5px;color:#CCC;float:left;line-height:32px}.el-date-editor .el-range-input,.el-date-editor .el-range-separator{height:100%;margin:0;text-align:center;display:inline-block;font-size:14px}.el-date-editor .el-range-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;outline:0;padding:0;width:39%;color:#B8B8B8}.el-date-editor .el-range-input::-webkit-input-placeholder{color:#CCC}.el-date-editor .el-range-input::-ms-input-placeholder{color:#CCC}.el-date-editor .el-range-input::placeholder{color:#CCC}.el-date-editor .el-range-separator{padding:0 5px;line-height:32px;width:5%;color:#FFF}.el-date-editor .el-range__close-icon{font-size:14px;color:#CCC;width:25px;display:inline-block;float:right;line-height:32px}.el-range-editor.el-input__inner{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:3px 10px}.el-range-editor .el-range-input{line-height:1}.el-range-editor.is-active,.el-range-editor.is-active:hover{border-color:#D71A1B}.el-range-editor--medium.el-input__inner{height:36px}.el-range-editor--medium .el-range-separator{line-height:28px;font-size:14px}.el-range-editor--medium .el-range-input{font-size:14px}.el-range-editor--medium .el-range__close-icon,.el-range-editor--medium .el-range__icon{line-height:28px}.el-range-editor--small.el-input__inner{height:32px}.el-range-editor--small .el-range-separator{line-height:24px;font-size:13px}.el-range-editor--small .el-range-input{font-size:13px}.el-range-editor--small .el-range__close-icon,.el-range-editor--small .el-range__icon{line-height:24px}.el-range-editor--mini.el-input__inner{height:28px}.el-range-editor--mini .el-range-separator{line-height:20px;font-size:12px}.el-range-editor--mini .el-range-input{font-size:12px}.el-range-editor--mini .el-range__close-icon,.el-range-editor--mini .el-range__icon{line-height:20px}.el-range-editor.is-disabled{background-color:#171315;border-color:#7A7A7A;color:#CCC;cursor:not-allowed}.el-range-editor.is-disabled:focus,.el-range-editor.is-disabled:hover{border-color:#7A7A7A}.el-range-editor.is-disabled input{background-color:#171315;color:#CCC;cursor:not-allowed}.el-range-editor.is-disabled input::-webkit-input-placeholder{color:#CCC}.el-range-editor.is-disabled input::-ms-input-placeholder{color:#CCC}.el-range-editor.is-disabled input::placeholder{color:#CCC}.el-range-editor.is-disabled .el-range-separator{color:#CCC}.el-picker-panel{color:#B8B8B8;border:1px solid #7A7A7A;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);background:#232222;border-radius:4px;line-height:30px;margin:5px 0}.el-popover,.el-time-panel{-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-picker-panel__body-wrapper::after,.el-picker-panel__body::after{content:\"\";display:table;clear:both}.el-picker-panel__content{position:relative;margin:15px}.el-picker-panel__footer{border-top:1px solid #e4e4e4;padding:4px;text-align:right;background-color:#232222;position:relative;font-size:0}.el-picker-panel__shortcut{display:block;width:100%;border:0;background-color:transparent;line-height:28px;font-size:14px;color:#B8B8B8;padding-left:12px;text-align:left;outline:0;cursor:pointer}.el-picker-panel__shortcut:hover{color:#D71A1B}.el-picker-panel__shortcut.active{background-color:#e6f1fe;color:#D71A1B}.el-picker-panel__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-picker-panel__btn[disabled]{color:#ccc;cursor:not-allowed}.el-picker-panel__icon-btn{font-size:12px;color:#FFF;border:0;background:0 0;cursor:pointer;outline:0;margin-top:8px}.el-picker-panel__icon-btn:hover{color:#D71A1B}.el-picker-panel__icon-btn.is-disabled{color:#bbb}.el-picker-panel__icon-btn.is-disabled:hover{cursor:not-allowed}.el-picker-panel__link-btn{vertical-align:middle}.el-picker-panel [slot=sidebar],.el-picker-panel__sidebar{position:absolute;top:0;bottom:0;width:110px;border-right:1px solid #e4e4e4;-webkit-box-sizing:border-box;box-sizing:border-box;padding-top:6px;background-color:#232222;overflow:auto}.el-picker-panel [slot=sidebar]+.el-picker-panel__body,.el-picker-panel__sidebar+.el-picker-panel__body{margin-left:110px}.el-time-spinner.has-seconds .el-time-spinner__wrapper{width:33.3%}.el-time-spinner__wrapper{max-height:190px;overflow:auto;display:inline-block;width:50%;vertical-align:top;position:relative}.el-time-spinner__wrapper .el-scrollbar__wrap:not(.el-scrollbar__wrap--hidden-default){padding-bottom:15px}.el-time-spinner__input.el-input .el-input__inner,.el-time-spinner__list{padding:0;text-align:center}.el-time-spinner__wrapper.is-arrow{-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;overflow:hidden}.el-time-spinner__wrapper.is-arrow .el-time-spinner__list{-webkit-transform:translateY(-32px);transform:translateY(-32px)}.el-time-spinner__wrapper.is-arrow .el-time-spinner__item:hover:not(.disabled):not(.active){background:#232222;cursor:default}.el-time-spinner__arrow{font-size:12px;color:#BCBCBC;position:absolute;left:0;width:100%;z-index:1;text-align:center;height:30px;line-height:30px;cursor:pointer}.el-time-spinner__arrow:hover{color:#D71A1B}.el-time-spinner__arrow.el-icon-arrow-up{top:10px}.el-time-spinner__arrow.el-icon-arrow-down{bottom:10px}.el-time-spinner__input.el-input{width:70%}.el-time-spinner__list{margin:0;list-style:none}.el-time-spinner__list::after,.el-time-spinner__list::before{content:'';display:block;width:100%;height:80px}.el-time-spinner__item{height:32px;line-height:32px;font-size:12px;color:#B8B8B8}.el-time-spinner__item:hover:not(.disabled):not(.active){background:#171315;cursor:pointer}.el-time-spinner__item.active:not(.disabled){color:#FFF;font-weight:700}.el-time-spinner__item.disabled{color:#CCC;cursor:not-allowed}.el-time-panel{margin:5px 0;border:1px solid #7A7A7A;background-color:#232222;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);border-radius:2px;position:absolute;width:180px;left:0;z-index:1000;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-box-sizing:content-box;box-sizing:content-box}.el-slider__button,.el-slider__button-wrapper{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.el-time-panel__content{font-size:0;position:relative;overflow:hidden}.el-time-panel__content::after,.el-time-panel__content::before{content:\"\";top:50%;position:absolute;margin-top:-15px;height:32px;z-index:-1;left:0;right:0;-webkit-box-sizing:border-box;box-sizing:border-box;padding-top:6px;text-align:left;border-top:1px solid #7A7A7A;border-bottom:1px solid #7A7A7A}.el-time-panel__content::after{left:50%;margin-left:12%;margin-right:12%}.el-time-panel__content::before{padding-left:50%;margin-right:12%;margin-left:12%}.el-time-panel__content.has-seconds::after{left:calc(100% / 3 * 2)}.el-time-panel__content.has-seconds::before{padding-left:calc(100% / 3)}.el-time-panel__footer{border-top:1px solid #e4e4e4;padding:4px;height:36px;line-height:25px;text-align:right;-webkit-box-sizing:border-box;box-sizing:border-box}.el-time-panel__btn{border:none;line-height:28px;padding:0 5px;margin:0 5px;cursor:pointer;background-color:transparent;outline:0;font-size:12px;color:#FFF}.el-time-panel__btn.confirm{font-weight:800;color:#D71A1B}.el-time-range-picker{width:354px;overflow:visible}.el-time-range-picker__content{position:relative;text-align:center;padding:10px}.el-time-range-picker__cell{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:4px 7px 7px;width:50%;display:inline-block}.el-time-range-picker__header{margin-bottom:5px;text-align:center;font-size:14px}.el-time-range-picker__body{border-radius:2px;border:1px solid #7A7A7A}.el-popover{position:absolute;background:#232222;min-width:150px;border:1px solid #454545;padding:12px;z-index:2000;color:#B8B8B8;line-height:1.4;text-align:justify;font-size:14px;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);word-break:break-all}.el-popover--plain{padding:18px 20px}.el-popover__title{color:#FFF;font-size:16px;line-height:1;margin-bottom:12px}.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}@keyframes v-modal-in{0%{opacity:0}}@keyframes v-modal-out{100%{opacity:0}}.v-modal{position:fixed;left:0;top:0;width:100%;height:100%;opacity:.5;background:#F4F4F4}.el-popup-parent--hidden{overflow:hidden}.el-message-box{display:inline-block;width:420px;padding-bottom:10px;vertical-align:middle;background-color:#232222;border-radius:4px;border:1px solid #454545;font-size:18px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);text-align:left;overflow:hidden;-webkit-backface-visibility:hidden;backface-visibility:hidden}.el-message-box__wrapper{position:fixed;top:0;bottom:0;left:0;right:0;text-align:center}.el-message-box__wrapper::after{content:\"\";display:inline-block;height:100%;width:0;vertical-align:middle}.el-message-box__header{position:relative;padding:15px 15px 10px}.el-message-box__title{padding-left:0;margin-bottom:0;font-size:18px;line-height:1;color:#FFF}.el-message-box__headerbtn{position:absolute;top:15px;right:15px;padding:0;border:none;outline:0;background:0 0;font-size:16px;cursor:pointer}.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,.el-message-box__input input.invalid,.el-message-box__input input.invalid:focus{border-color:#F56C6C}.el-message-box__headerbtn .el-message-box__close{color:#B8B8B8}.el-message-box__headerbtn:focus .el-message-box__close,.el-message-box__headerbtn:hover .el-message-box__close{color:#D71A1B}.el-message-box__content{padding:10px 15px;color:#B8B8B8;font-size:14px}.el-message-box__container{position:relative}.el-message-box__input{padding-top:15px}.el-message-box__status{position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);font-size:24px!important}.el-message-box__status::before{padding-left:1px}.el-message-box__status+.el-message-box__message{padding-left:36px;padding-right:12px}.el-message-box__status.el-icon-success{color:#67C23A}.el-message-box__status.el-icon-info{color:#B8B8B8}.el-message-box__status.el-icon-warning{color:#E6A23C}.el-message-box__status.el-icon-error{color:#F56C6C}.el-message-box__message{margin:0}.el-message-box__message p{margin:0;line-height:24px}.el-message-box__errormsg{color:#F56C6C;font-size:12px;min-height:18px;margin-top:2px}.el-message-box__btns{padding:5px 15px 0;text-align:right}.el-message-box__btns button:nth-child(2){margin-left:10px}.el-message-box__btns-reverse{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.el-message-box--center{padding-bottom:30px}.el-message-box--center .el-message-box__header{padding-top:30px}.el-message-box--center .el-message-box__title{position:relative;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-message-box--center .el-message-box__status{position:relative;top:auto;padding-right:5px;text-align:center;-webkit-transform:translateY(-1px);transform:translateY(-1px)}.el-message-box--center .el-message-box__message{margin-left:0}.el-message-box--center .el-message-box__btns,.el-message-box--center .el-message-box__content{text-align:center}.el-message-box--center .el-message-box__content{padding-left:27px;padding-right:27px}.msgbox-fade-enter-active{-webkit-animation:msgbox-fade-in .3s;animation:msgbox-fade-in .3s}.msgbox-fade-leave-active{-webkit-animation:msgbox-fade-out .3s;animation:msgbox-fade-out .3s}@-webkit-keyframes msgbox-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 msgbox-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 msgbox-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 msgbox-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}}.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:#CCC}.el-breadcrumb__separator[class*=icon]{margin:0 6px;font-weight:400}.el-breadcrumb__item{float:left}.el-breadcrumb__inner{color:#B8B8B8}.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:#FFF}.el-breadcrumb__inner a:hover,.el-breadcrumb__inner.is-link:hover{color:#D71A1B;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:#B8B8B8;cursor:text}.el-breadcrumb__item:last-child .el-breadcrumb__separator{display:none}.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{display:inline-block;margin-right:10px;vertical-align:top}.el-form--inline .el-form-item__label{float:none;display:inline-block}.el-form--inline .el-form-item__content{display:inline-block;vertical-align:top}.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::after{clear:both}.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-wrap{float:left}.el-form-item__label-wrap .el-form-item__label{display:inline-block;float:none}.el-form-item__label{text-align:right;vertical-align:middle;float:left;font-size:14px;color:#B8B8B8;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__content::after{clear:both}.el-form-item__content .el-input-group{vertical-align:top}.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:not(.is-no-asterisk) .el-form-item__label-wrap>.el-form-item__label:before,.el-form-item.is-required:not(.is-no-asterisk)>.el-form-item__label:before{content:'*';color:#F56C6C;margin-right:4px}.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--feedback .el-input__validateIcon{display:inline-block}.el-tabs__header{padding:0;position:relative;margin:0 0 15px}.el-tabs__active-bar{position:absolute;bottom:0;left:0;height:2px;background-color:#D71A1B;z-index:1;-webkit-transition:-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:transform .3s cubic-bezier(.645,.045,.355,1);transition:transform .3s cubic-bezier(.645,.045,.355,1),-webkit-transform .3s cubic-bezier(.645,.045,.355,1);list-style:none}.el-tabs__new-tab{float:right;border:1px solid #d3dce6;height:18px;width:18px;line-height:18px;margin:12px 0 9px 10px;border-radius:3px;text-align:center;font-size:12px;color:#d3dce6;cursor:pointer;-webkit-transition:all .15s;transition:all .15s}.el-collapse-item__arrow,.el-tabs__nav{-webkit-transition:-webkit-transform .3s}.el-tabs__new-tab .el-icon-plus{-webkit-transform:scale(.8,.8);transform:scale(.8,.8)}.el-tabs__new-tab:hover{color:#D71A1B}.el-tabs__nav-wrap{overflow:hidden;margin-bottom:-1px;position:relative}.el-tabs__nav-wrap::after{content:\"\";position:absolute;left:0;bottom:0;width:100%;height:2px;background-color:#7A7A7A;z-index:1}.el-tabs--border-card>.el-tabs__header .el-tabs__nav-wrap::after,.el-tabs--card>.el-tabs__header .el-tabs__nav-wrap::after{content:none}.el-tabs__nav-wrap.is-scrollable{padding:0 20px;-webkit-box-sizing:border-box;box-sizing:border-box}.el-tabs__nav-scroll{overflow:hidden}.el-tabs__nav-next,.el-tabs__nav-prev{position:absolute;cursor:pointer;line-height:44px;font-size:12px;color:#BCBCBC}.el-tabs__nav-next{right:0}.el-tabs__nav-prev{left:0}.el-tabs__nav{white-space:nowrap;position:relative;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;float:left;z-index:2}.el-tabs__nav.is-stretch{min-width:100%;display:-webkit-box;display:-ms-flexbox;display:flex}.el-tabs__nav.is-stretch>*{-webkit-box-flex:1;-ms-flex:1;flex:1;text-align:center}.el-tabs__item{padding:0 20px;height:40px;-webkit-box-sizing:border-box;box-sizing:border-box;line-height:40px;display:inline-block;list-style:none;font-size:14px;font-weight:500;color:#FFF;position:relative}.el-tabs__item:focus,.el-tabs__item:focus:active{outline:0}.el-tabs__item:focus.is-active.is-focus:not(:active){-webkit-box-shadow:0 0 2px 2px #D71A1B inset;box-shadow:0 0 2px 2px #D71A1B inset;border-radius:3px}.el-tabs__item .el-icon-close{border-radius:50%;text-align:center;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);margin-left:5px}.el-tabs__item .el-icon-close:before{-webkit-transform:scale(.9);transform:scale(.9);display:inline-block}.el-tabs__item .el-icon-close:hover{background-color:#CCC;color:#232222}.el-tabs__item.is-active{color:#D71A1B}.el-tabs__item:hover{color:#D71A1B;cursor:pointer}.el-tabs__item.is-disabled{color:#CCC;cursor:default}.el-tabs__content{overflow:hidden;position:relative}.el-tabs--card>.el-tabs__header{border-bottom:1px solid #7A7A7A}.el-tabs--card>.el-tabs__header .el-tabs__nav{border:1px solid #7A7A7A;border-bottom:none;border-radius:4px 4px 0 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-tabs--card>.el-tabs__header .el-tabs__active-bar{display:none}.el-tabs--card>.el-tabs__header .el-tabs__item .el-icon-close{position:relative;font-size:12px;width:0;height:14px;vertical-align:middle;line-height:15px;overflow:hidden;top:-1px;right:-2px;-webkit-transform-origin:100% 50%;transform-origin:100% 50%}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable .el-icon-close,.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover .el-icon-close{width:14px}.el-tabs--card>.el-tabs__header .el-tabs__item{border-bottom:1px solid transparent;border-left:1px solid #7A7A7A;-webkit-transition:color .3s cubic-bezier(.645,.045,.355,1),padding .3s cubic-bezier(.645,.045,.355,1);transition:color .3s cubic-bezier(.645,.045,.355,1),padding .3s cubic-bezier(.645,.045,.355,1)}.el-tabs--card>.el-tabs__header .el-tabs__item:first-child{border-left:none}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover{padding-left:13px;padding-right:13px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active{border-bottom-color:#232222}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable{padding-left:20px;padding-right:20px}.el-tabs--border-card{background:#232222;border:1px solid #BEBEBE;-webkit-box-shadow:0 2px 4px 0 rgba(0,0,0,.12),0 0 6px 0 rgba(0,0,0,.04);box-shadow:0 2px 4px 0 rgba(0,0,0,.12),0 0 6px 0 rgba(0,0,0,.04)}.el-tabs--border-card>.el-tabs__content{padding:15px}.el-tabs--border-card>.el-tabs__header{background-color:#171315;border-bottom:1px solid #7A7A7A;margin:0}.el-tabs--border-card>.el-tabs__header .el-tabs__item{-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);border:1px solid transparent;margin-top:-1px;color:#BCBCBC}.el-tabs--border-card>.el-tabs__header .el-tabs__item+.el-tabs__item,.el-tabs--border-card>.el-tabs__header .el-tabs__item:first-child{margin-left:-1px}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active{color:#D71A1B;background-color:#232222;border-right-color:#BEBEBE;border-left-color:#BEBEBE}.el-tabs--border-card>.el-tabs__header .el-tabs__item:not(.is-disabled):hover{color:#D71A1B}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-disabled{color:#CCC}.el-tabs--border-card>.el-tabs__header .is-scrollable .el-tabs__item:first-child{margin-left:0}.el-tabs--bottom .el-tabs__item.is-bottom:nth-child(2),.el-tabs--bottom .el-tabs__item.is-top:nth-child(2),.el-tabs--top .el-tabs__item.is-bottom:nth-child(2),.el-tabs--top .el-tabs__item.is-top:nth-child(2){padding-left:0}.el-tabs--bottom .el-tabs__item.is-bottom:last-child,.el-tabs--bottom .el-tabs__item.is-top:last-child,.el-tabs--top .el-tabs__item.is-bottom:last-child,.el-tabs--top .el-tabs__item.is-top:last-child{padding-right:0}.el-tabs--bottom .el-tabs--left>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom .el-tabs--right>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--left>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--right>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2){padding-left:20px}.el-tabs--bottom .el-tabs--left>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom .el-tabs--right>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top .el-tabs--left>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top .el-tabs--right>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:last-child{padding-right:20px}.el-tabs--bottom .el-tabs__header.is-bottom{margin-bottom:0;margin-top:10px}.el-tabs--bottom.el-tabs--border-card .el-tabs__header.is-bottom{border-bottom:0;border-top:1px solid #BEBEBE}.el-tabs--bottom.el-tabs--border-card .el-tabs__nav-wrap.is-bottom{margin-top:-1px;margin-bottom:0}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom:not(.is-active){border:1px solid transparent}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom{margin:0 -1px -1px}.el-tabs--left,.el-tabs--right{overflow:hidden}.el-tabs--left .el-tabs__header.is-left,.el-tabs--left .el-tabs__header.is-right,.el-tabs--left .el-tabs__nav-scroll,.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__header.is-left,.el-tabs--right .el-tabs__header.is-right,.el-tabs--right .el-tabs__nav-scroll,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{height:100%}.el-tabs--left .el-tabs__active-bar.is-left,.el-tabs--left .el-tabs__active-bar.is-right,.el-tabs--right .el-tabs__active-bar.is-left,.el-tabs--right .el-tabs__active-bar.is-right{top:0;bottom:auto;width:2px;height:auto}.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{margin-bottom:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{height:30px;line-height:30px;width:100%;text-align:center;cursor:pointer}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i{-webkit-transform:rotateZ(90deg);transform:rotateZ(90deg)}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{left:auto;top:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next{right:auto;bottom:0}.el-tabs--left .el-tabs__active-bar.is-left,.el-tabs--left .el-tabs__nav-wrap.is-left::after{right:0;left:auto}.el-tabs--left .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--left .el-tabs__nav-wrap.is-right.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-right.is-scrollable{padding:30px 0}.el-tabs--left .el-tabs__nav-wrap.is-left::after,.el-tabs--left .el-tabs__nav-wrap.is-right::after,.el-tabs--right .el-tabs__nav-wrap.is-left::after,.el-tabs--right .el-tabs__nav-wrap.is-right::after{height:100%;width:2px;bottom:auto;top:0}.el-tabs--left .el-tabs__nav.is-left,.el-tabs--left .el-tabs__nav.is-right,.el-tabs--right .el-tabs__nav.is-left,.el-tabs--right .el-tabs__nav.is-right{float:none}.el-tabs--left .el-tabs__item.is-left,.el-tabs--left .el-tabs__item.is-right,.el-tabs--right .el-tabs__item.is-left,.el-tabs--right .el-tabs__item.is-right{display:block}.el-tabs--left.el-tabs--card .el-tabs__active-bar.is-left,.el-tabs--right.el-tabs--card .el-tabs__active-bar.is-right{display:none}.el-tabs--left .el-tabs__header.is-left{float:left;margin-bottom:0;margin-right:10px}.el-tabs--left .el-tabs__nav-wrap.is-left{margin-right:-1px}.el-tabs--left .el-tabs__item.is-left{text-align:right}.el-tabs--left.el-tabs--card .el-tabs__item.is-left{border-left:none;border-right:1px solid #7A7A7A;border-bottom:none;border-top:1px solid #7A7A7A;text-align:left}.el-tabs--left.el-tabs--card .el-tabs__item.is-left:first-child{border-right:1px solid #7A7A7A;border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active{border:1px solid #7A7A7A;border-right-color:#fff;border-left:none;border-bottom:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:first-child{border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:last-child{border-bottom:none}.el-tabs--left.el-tabs--card .el-tabs__nav{border-radius:4px 0 0 4px;border-bottom:1px solid #7A7A7A;border-right:none}.el-tabs--left.el-tabs--card .el-tabs__new-tab{float:none}.el-tabs--left.el-tabs--border-card .el-tabs__header.is-left{border-right:1px solid #dfe4ed}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left{border:1px solid transparent;margin:-1px 0 -1px -1px}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left.is-active{border-color:#d1dbe5 transparent}.el-tabs--right .el-tabs__header.is-right{float:right;margin-bottom:0;margin-left:10px}.el-tabs--right .el-tabs__nav-wrap.is-right{margin-left:-1px}.el-tabs--right .el-tabs__nav-wrap.is-right::after{left:0;right:auto}.el-tabs--right .el-tabs__active-bar.is-right{left:0}.el-tabs--right.el-tabs--card .el-tabs__item.is-right{border-bottom:none;border-top:1px solid #7A7A7A}.el-tabs--right.el-tabs--card .el-tabs__item.is-right:first-child{border-left:1px solid #7A7A7A;border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active{border:1px solid #7A7A7A;border-left-color:#fff;border-right:none;border-bottom:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:first-child{border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:last-child{border-bottom:none}.el-tabs--right.el-tabs--card .el-tabs__nav{border-radius:0 4px 4px 0;border-bottom:1px solid #7A7A7A;border-left:none}.el-tabs--right.el-tabs--border-card .el-tabs__header.is-right{border-left:1px solid #dfe4ed}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right{border:1px solid transparent;margin:-1px -1px -1px 0}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right.is-active{border-color:#d1dbe5 transparent}.slideInLeft-transition,.slideInRight-transition{display:inline-block}.slideInRight-enter{-webkit-animation:slideInRight-enter .3s;animation:slideInRight-enter .3s}.slideInRight-leave{position:absolute;left:0;right:0;-webkit-animation:slideInRight-leave .3s;animation:slideInRight-leave .3s}.slideInLeft-enter{-webkit-animation:slideInLeft-enter .3s;animation:slideInLeft-enter .3s}.slideInLeft-leave{position:absolute;left:0;right:0;-webkit-animation:slideInLeft-leave .3s;animation:slideInLeft-leave .3s}@-webkit-keyframes slideInRight-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes slideInRight-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes slideInRight-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}100%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}}@keyframes slideInRight-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}100%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}}@-webkit-keyframes slideInLeft-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes slideInLeft-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes slideInLeft-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}100%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%);opacity:0}}@keyframes slideInLeft-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}100%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%);opacity:0}}.el-tree{position:relative;cursor:default;background:#232222;color:#B8B8B8}.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:#BCBCBC;font-size:14px}.el-tree__drop-indicator{position:absolute;left:0;right:0;height:1px;background-color:#D71A1B}.el-tree-node{white-space:nowrap;outline:0}.el-tree-node:focus>.el-tree-node__content{background-color:#171315}.el-tree-node.is-drop-inner>.el-tree-node__content .el-tree-node__label{background-color:#D71A1B;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>label.el-checkbox{margin-right:8px}.el-tree-node__content:hover{background-color:#171315}.el-tree.is-dragging .el-tree-node__content{cursor:move}.el-tree.is-dragging.is-drop-not-allow .el-tree-node__content{cursor:not-allowed}.el-tree-node__expand-icon{cursor:pointer;color:#CCC;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:#CCC}.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:#312121}.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:#232222;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-light .el-alert__closebtn{color:#CCC}.el-alert.is-dark .el-alert__closebtn,.el-alert.is-dark .el-alert__description{color:#232222}.el-alert.is-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-alert--success.is-light{background-color:#2a3224;color:#67C23A}.el-alert--success.is-light .el-alert__description{color:#67C23A}.el-alert--success.is-dark{background-color:#67C23A;color:#232222}.el-alert--info.is-light{background-color:#323131;color:#B8B8B8}.el-alert--info.is-dark{background-color:#B8B8B8;color:#232222}.el-alert--info .el-alert__description{color:#B8B8B8}.el-alert--warning.is-light{background-color:#372f25;color:#E6A23C}.el-alert--warning.is-light .el-alert__description{color:#E6A23C}.el-alert--warning.is-dark{background-color:#E6A23C;color:#232222}.el-alert--error.is-light{background-color:#382929;color:#F56C6C}.el-alert--error.is-light .el-alert__description{color:#F56C6C}.el-alert--error.is-dark{background-color:#F56C6C;color:#232222}.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;opacity:1;position:absolute;top:12px;right:15px;cursor:pointer}.el-alert-fade-enter,.el-alert-fade-leave-active,.el-loading-fade-enter,.el-loading-fade-leave-active,.el-notification-fade-leave-active{opacity:0}.el-alert__closebtn.is-customed{font-style:normal;font-size:13px;top:9px}.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 #454545;position:fixed;background-color:#232222;-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;margin-right:8px}.el-notification__title{font-weight:700;font-size:16px;color:#FFF;margin:0}.el-notification__content{font-size:14px;line-height:21px;margin:6px 0 0;color:#B8B8B8;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:#BCBCBC;font-size:16px}.el-notification__closeBtn:hover{color:#B8B8B8}.el-notification .el-icon-success{color:#67C23A}.el-notification .el-icon-error{color:#F56C6C}.el-notification .el-icon-info{color:#B8B8B8}.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-input-number{position:relative;display:inline-block;width:180px;line-height:38px}.el-input-number .el-input{display:block}.el-input-number .el-input__inner{-webkit-appearance:none;padding-left:50px;padding-right:50px;text-align:center}.el-input-number__decrease,.el-input-number__increase{position:absolute;z-index:1;top:1px;width:40px;height:auto;text-align:center;background:#171315;color:#B8B8B8;cursor:pointer;font-size:13px}.el-input-number__decrease:hover,.el-input-number__increase:hover{color:#D71A1B}.el-input-number__decrease:hover:not(.is-disabled)~.el-input .el-input__inner:not(.is-disabled),.el-input-number__increase:hover:not(.is-disabled)~.el-input .el-input__inner:not(.is-disabled){border-color:#D71A1B}.el-input-number__decrease.is-disabled,.el-input-number__increase.is-disabled{color:#CCC;cursor:not-allowed}.el-input-number__increase{right:1px;border-radius:0 4px 4px 0;border-left:1px solid #BEBEBE}.el-input-number__decrease{left:1px;border-radius:4px 0 0 4px;border-right:1px solid #BEBEBE}.el-input-number.is-disabled .el-input-number__decrease,.el-input-number.is-disabled .el-input-number__increase{border-color:#7A7A7A;color:#7A7A7A}.el-input-number.is-disabled .el-input-number__decrease:hover,.el-input-number.is-disabled .el-input-number__increase:hover{color:#7A7A7A;cursor:not-allowed}.el-input-number--medium{width:200px;line-height:34px}.el-input-number--medium .el-input-number__decrease,.el-input-number--medium .el-input-number__increase{width:36px;font-size:14px}.el-input-number--medium .el-input__inner{padding-left:43px;padding-right:43px}.el-input-number--small{width:130px;line-height:30px}.el-input-number--small .el-input-number__decrease,.el-input-number--small .el-input-number__increase{width:32px;font-size:13px}.el-input-number--small .el-input-number__decrease [class*=el-icon],.el-input-number--small .el-input-number__increase [class*=el-icon]{-webkit-transform:scale(.9);transform:scale(.9)}.el-input-number--small .el-input__inner{padding-left:39px;padding-right:39px}.el-input-number--mini{width:130px;line-height:26px}.el-input-number--mini .el-input-number__decrease,.el-input-number--mini .el-input-number__increase{width:28px;font-size:12px}.el-input-number--mini .el-input-number__decrease [class*=el-icon],.el-input-number--mini .el-input-number__increase [class*=el-icon]{-webkit-transform:scale(.8);transform:scale(.8)}.el-input-number--mini .el-input__inner{padding-left:35px;padding-right:35px}.el-input-number.is-without-controls .el-input__inner{padding-left:15px;padding-right:15px}.el-input-number.is-controls-right .el-input__inner{padding-left:15px;padding-right:50px}.el-input-number.is-controls-right .el-input-number__decrease,.el-input-number.is-controls-right .el-input-number__increase{height:auto;line-height:19px}.el-input-number.is-controls-right .el-input-number__decrease [class*=el-icon],.el-input-number.is-controls-right .el-input-number__increase [class*=el-icon]{-webkit-transform:scale(.8);transform:scale(.8)}.el-input-number.is-controls-right .el-input-number__increase{border-radius:0 4px 0 0;border-bottom:1px solid #BEBEBE}.el-input-number.is-controls-right .el-input-number__decrease{right:1px;bottom:1px;top:auto;left:auto;border-right:none;border-left:1px solid #BEBEBE;border-radius:0 0 4px}.el-input-number.is-controls-right[class*=medium] [class*=decrease],.el-input-number.is-controls-right[class*=medium] [class*=increase]{line-height:17px}.el-input-number.is-controls-right[class*=small] [class*=decrease],.el-input-number.is-controls-right[class*=small] [class*=increase]{line-height:15px}.el-input-number.is-controls-right[class*=mini] [class*=decrease],.el-input-number.is-controls-right[class*=mini] [class*=increase]{line-height:13px}.el-tooltip__popper{position:absolute;border-radius:4px;padding:10px;z-index:2000;font-size:12px;line-height:1.2;min-width:10px;word-wrap:break-word}.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-progress-bar__inner::after,.el-row::after,.el-row::before,.el-slider::after,.el-slider::before,.el-slider__button-wrapper::after,.el-upload-cover::after{content:\"\"}.el-tooltip__popper[x-placement^=top]{margin-bottom:12px}.el-tooltip__popper[x-placement^=top] .popper__arrow{bottom:-6px;border-top-color:#FFF;border-bottom-width:0}.el-tooltip__popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-5px;border-top-color:#FFF;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:#FFF}.el-tooltip__popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-5px;border-top-width:0;border-bottom-color:#FFF}.el-tooltip__popper[x-placement^=right]{margin-left:12px}.el-tooltip__popper[x-placement^=right] .popper__arrow{left:-6px;border-right-color:#FFF;border-left-width:0}.el-tooltip__popper[x-placement^=right] .popper__arrow::after{bottom:-5px;left:1px;border-right-color:#FFF;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:#FFF}.el-tooltip__popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-5px;margin-left:-5px;border-right-width:0;border-left-color:#FFF}.el-tooltip__popper.is-dark{background:#FFF;color:#232222}.el-tooltip__popper.is-light{background:#232222;border:1px solid #FFF}.el-tooltip__popper.is-light[x-placement^=top] .popper__arrow{border-top-color:#FFF}.el-tooltip__popper.is-light[x-placement^=top] .popper__arrow::after{border-top-color:#232222}.el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow{border-bottom-color:#FFF}.el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow::after{border-bottom-color:#232222}.el-tooltip__popper.is-light[x-placement^=left] .popper__arrow{border-left-color:#FFF}.el-tooltip__popper.is-light[x-placement^=left] .popper__arrow::after{border-left-color:#232222}.el-tooltip__popper.is-light[x-placement^=right] .popper__arrow{border-right-color:#FFF}.el-tooltip__popper.is-light[x-placement^=right] .popper__arrow::after{border-right-color:#232222}.el-slider::after,.el-slider::before{display:table}.el-slider__button-wrapper .el-tooltip,.el-slider__button-wrapper::after{vertical-align:middle;display:inline-block}.el-slider::after{clear:both}.el-slider__runway{width:100%;height:6px;margin:16px 0;background-color:#7A7A7A;border-radius:3px;position:relative;cursor:pointer;vertical-align:middle}.el-slider__runway.show-input{margin-right:160px;width:auto}.el-slider__runway.disabled{cursor:default}.el-slider__runway.disabled .el-slider__bar{background-color:#CCC}.el-slider__runway.disabled .el-slider__button{border-color:#CCC}.el-slider__runway.disabled .el-slider__button-wrapper.dragging,.el-slider__runway.disabled .el-slider__button-wrapper.hover,.el-slider__runway.disabled .el-slider__button-wrapper:hover{cursor:not-allowed}.el-slider__runway.disabled .el-slider__button.dragging,.el-slider__runway.disabled .el-slider__button.hover,.el-slider__runway.disabled .el-slider__button:hover{-webkit-transform:scale(1);transform:scale(1);cursor:not-allowed}.el-slider__button-wrapper,.el-slider__stop{-webkit-transform:translateX(-50%);position:absolute}.el-slider__input{float:right;margin-top:3px;width:130px}.el-slider__input.el-input-number--mini{margin-top:5px}.el-slider__input.el-input-number--medium{margin-top:0}.el-slider__input.el-input-number--large{margin-top:-2px}.el-slider__bar{height:6px;background-color:#D71A1B;border-top-left-radius:3px;border-bottom-left-radius:3px;position:absolute}.el-slider__button-wrapper{height:36px;width:36px;z-index:1001;top:-15px;transform:translateX(-50%);background-color:transparent;text-align:center;user-select:none;line-height:normal}.el-slider__button-wrapper::after{height:100%}.el-slider__button-wrapper.hover,.el-slider__button-wrapper:hover{cursor:-webkit-grab;cursor:grab}.el-slider__button-wrapper.dragging{cursor:-webkit-grabbing;cursor:grabbing}.el-slider__button{width:16px;height:16px;border:2px solid #D71A1B;background-color:#232222;border-radius:50%;-webkit-transition:.2s;transition:.2s;user-select:none}.el-image-viewer__btn,.el-step__icon-inner{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.el-slider__button.dragging,.el-slider__button.hover,.el-slider__button:hover{-webkit-transform:scale(1.2);transform:scale(1.2)}.el-slider__button.hover,.el-slider__button:hover{cursor:-webkit-grab;cursor:grab}.el-slider__button.dragging{cursor:-webkit-grabbing;cursor:grabbing}.el-slider__stop{height:6px;width:6px;border-radius:100%;background-color:#232222;transform:translateX(-50%)}.el-slider__marks{top:0;left:12px;width:18px;height:100%}.el-slider__marks-text{position:absolute;-webkit-transform:translateX(-50%);transform:translateX(-50%);font-size:14px;color:#B8B8B8;margin-top:15px}.el-slider.is-vertical{position:relative}.el-slider.is-vertical .el-slider__runway{width:6px;height:100%;margin:0 16px}.el-slider.is-vertical .el-slider__bar{width:6px;height:auto;border-radius:0 0 3px 3px}.el-slider.is-vertical .el-slider__button-wrapper{top:auto;left:-15px;-webkit-transform:translateY(50%);transform:translateY(50%)}.el-slider.is-vertical .el-slider__stop{-webkit-transform:translateY(50%);transform:translateY(50%)}.el-slider.is-vertical.el-slider--with-input{padding-bottom:58px}.el-slider.is-vertical.el-slider--with-input .el-slider__input{overflow:visible;float:none;position:absolute;bottom:22px;width:36px;margin-top:15px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input__inner{text-align:center;padding-left:5px;padding-right:5px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__decrease,.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase{top:32px;margin-top:-1px;border:1px solid #BEBEBE;line-height:20px;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-transition:border-color .2s cubic-bezier(.645,.045,.355,1);transition:border-color .2s cubic-bezier(.645,.045,.355,1)}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__decrease{width:18px;right:18px;border-bottom-left-radius:4px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase{width:19px;border-bottom-right-radius:4px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase~.el-input .el-input__inner{border-bottom-left-radius:0;border-bottom-right-radius:0}.el-slider.is-vertical.el-slider--with-input .el-slider__input:hover .el-input-number__decrease,.el-slider.is-vertical.el-slider--with-input .el-slider__input:hover .el-input-number__increase{border-color:#CCC}.el-slider.is-vertical.el-slider--with-input .el-slider__input:active .el-input-number__decrease,.el-slider.is-vertical.el-slider--with-input .el-slider__input:active .el-input-number__increase{border-color:#D71A1B}.el-slider.is-vertical .el-slider__marks-text{margin-top:0;left:15px;-webkit-transform:translateY(50%);transform:translateY(50%)}.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-col-pull-0,.el-col-pull-1,.el-col-pull-10,.el-col-pull-11,.el-col-pull-13,.el-col-pull-14,.el-col-pull-15,.el-col-pull-16,.el-col-pull-17,.el-col-pull-18,.el-col-pull-19,.el-col-pull-2,.el-col-pull-20,.el-col-pull-21,.el-col-pull-22,.el-col-pull-23,.el-col-pull-24,.el-col-pull-3,.el-col-pull-4,.el-col-pull-5,.el-col-pull-6,.el-col-pull-7,.el-col-pull-8,.el-col-pull-9,.el-col-push-0,.el-col-push-1,.el-col-push-10,.el-col-push-11,.el-col-push-12,.el-col-push-13,.el-col-push-14,.el-col-push-15,.el-col-push-16,.el-col-push-17,.el-col-push-18,.el-col-push-19,.el-col-push-2,.el-col-push-20,.el-col-push-21,.el-col-push-22,.el-col-push-23,.el-col-push-24,.el-col-push-3,.el-col-push-4,.el-col-push-5,.el-col-push-6,.el-col-push-7,.el-col-push-8,.el-col-push-9,.el-row{position:relative}.el-loading-spinner .el-loading-text{color:#D71A1B;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:#D71A1B;stroke-linecap:round}.el-loading-spinner i{color:#D71A1B}@-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}}.el-row{-webkit-box-sizing:border-box;box-sizing:border-box}.el-row::after,.el-row::before{display:table}.el-row::after{clear:both}.el-row--flex{display:-webkit-box;display:-ms-flexbox;display:flex}.el-col-0,.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}[class*=el-col-]{float:left;-webkit-box-sizing:border-box;box-sizing:border-box}.el-upload--picture-card,.el-upload-dragger{-webkit-box-sizing:border-box;cursor:pointer}.el-col-0{width:0%}.el-col-offset-0{margin-left:0}.el-col-pull-0{right:0}.el-col-push-0{left:0}.el-col-1{width:4.16667%}.el-col-offset-1{margin-left:4.16667%}.el-col-pull-1{right:4.16667%}.el-col-push-1{left:4.16667%}.el-col-2{width:8.33333%}.el-col-offset-2{margin-left:8.33333%}.el-col-pull-2{right:8.33333%}.el-col-push-2{left:8.33333%}.el-col-3{width:12.5%}.el-col-offset-3{margin-left:12.5%}.el-col-pull-3{right:12.5%}.el-col-push-3{left:12.5%}.el-col-4{width:16.66667%}.el-col-offset-4{margin-left:16.66667%}.el-col-pull-4{right:16.66667%}.el-col-push-4{left:16.66667%}.el-col-5{width:20.83333%}.el-col-offset-5{margin-left:20.83333%}.el-col-pull-5{right:20.83333%}.el-col-push-5{left:20.83333%}.el-col-6{width:25%}.el-col-offset-6{margin-left:25%}.el-col-pull-6{right:25%}.el-col-push-6{left:25%}.el-col-7{width:29.16667%}.el-col-offset-7{margin-left:29.16667%}.el-col-pull-7{right:29.16667%}.el-col-push-7{left:29.16667%}.el-col-8{width:33.33333%}.el-col-offset-8{margin-left:33.33333%}.el-col-pull-8{right:33.33333%}.el-col-push-8{left:33.33333%}.el-col-9{width:37.5%}.el-col-offset-9{margin-left:37.5%}.el-col-pull-9{right:37.5%}.el-col-push-9{left:37.5%}.el-col-10{width:41.66667%}.el-col-offset-10{margin-left:41.66667%}.el-col-pull-10{right:41.66667%}.el-col-push-10{left:41.66667%}.el-col-11{width:45.83333%}.el-col-offset-11{margin-left:45.83333%}.el-col-pull-11{right:45.83333%}.el-col-push-11{left:45.83333%}.el-col-12{width:50%}.el-col-offset-12{margin-left:50%}.el-col-pull-12{position:relative;right:50%}.el-col-push-12{left:50%}.el-col-13{width:54.16667%}.el-col-offset-13{margin-left:54.16667%}.el-col-pull-13{right:54.16667%}.el-col-push-13{left:54.16667%}.el-col-14{width:58.33333%}.el-col-offset-14{margin-left:58.33333%}.el-col-pull-14{right:58.33333%}.el-col-push-14{left:58.33333%}.el-col-15{width:62.5%}.el-col-offset-15{margin-left:62.5%}.el-col-pull-15{right:62.5%}.el-col-push-15{left:62.5%}.el-col-16{width:66.66667%}.el-col-offset-16{margin-left:66.66667%}.el-col-pull-16{right:66.66667%}.el-col-push-16{left:66.66667%}.el-col-17{width:70.83333%}.el-col-offset-17{margin-left:70.83333%}.el-col-pull-17{right:70.83333%}.el-col-push-17{left:70.83333%}.el-col-18{width:75%}.el-col-offset-18{margin-left:75%}.el-col-pull-18{right:75%}.el-col-push-18{left:75%}.el-col-19{width:79.16667%}.el-col-offset-19{margin-left:79.16667%}.el-col-pull-19{right:79.16667%}.el-col-push-19{left:79.16667%}.el-col-20{width:83.33333%}.el-col-offset-20{margin-left:83.33333%}.el-col-pull-20{right:83.33333%}.el-col-push-20{left:83.33333%}.el-col-21{width:87.5%}.el-col-offset-21{margin-left:87.5%}.el-col-pull-21{right:87.5%}.el-col-push-21{left:87.5%}.el-col-22{width:91.66667%}.el-col-offset-22{margin-left:91.66667%}.el-col-pull-22{right:91.66667%}.el-col-push-22{left:91.66667%}.el-col-23{width:95.83333%}.el-col-offset-23{margin-left:95.83333%}.el-col-pull-23{right:95.83333%}.el-col-push-23{left:95.83333%}.el-col-24{width:100%}.el-col-offset-24{margin-left:100%}.el-col-pull-24{right:100%}.el-col-push-24{left:100%}@media only screen and (max-width:767px){.el-col-xs-0{display:none;width:0%}.el-col-xs-offset-0{margin-left:0}.el-col-xs-pull-0{position:relative;right:0}.el-col-xs-push-0{position:relative;left:0}.el-col-xs-1{width:4.16667%}.el-col-xs-offset-1{margin-left:4.16667%}.el-col-xs-pull-1{position:relative;right:4.16667%}.el-col-xs-push-1{position:relative;left:4.16667%}.el-col-xs-2{width:8.33333%}.el-col-xs-offset-2{margin-left:8.33333%}.el-col-xs-pull-2{position:relative;right:8.33333%}.el-col-xs-push-2{position:relative;left:8.33333%}.el-col-xs-3{width:12.5%}.el-col-xs-offset-3{margin-left:12.5%}.el-col-xs-pull-3{position:relative;right:12.5%}.el-col-xs-push-3{position:relative;left:12.5%}.el-col-xs-4{width:16.66667%}.el-col-xs-offset-4{margin-left:16.66667%}.el-col-xs-pull-4{position:relative;right:16.66667%}.el-col-xs-push-4{position:relative;left:16.66667%}.el-col-xs-5{width:20.83333%}.el-col-xs-offset-5{margin-left:20.83333%}.el-col-xs-pull-5{position:relative;right:20.83333%}.el-col-xs-push-5{position:relative;left:20.83333%}.el-col-xs-6{width:25%}.el-col-xs-offset-6{margin-left:25%}.el-col-xs-pull-6{position:relative;right:25%}.el-col-xs-push-6{position:relative;left:25%}.el-col-xs-7{width:29.16667%}.el-col-xs-offset-7{margin-left:29.16667%}.el-col-xs-pull-7{position:relative;right:29.16667%}.el-col-xs-push-7{position:relative;left:29.16667%}.el-col-xs-8{width:33.33333%}.el-col-xs-offset-8{margin-left:33.33333%}.el-col-xs-pull-8{position:relative;right:33.33333%}.el-col-xs-push-8{position:relative;left:33.33333%}.el-col-xs-9{width:37.5%}.el-col-xs-offset-9{margin-left:37.5%}.el-col-xs-pull-9{position:relative;right:37.5%}.el-col-xs-push-9{position:relative;left:37.5%}.el-col-xs-10{width:41.66667%}.el-col-xs-offset-10{margin-left:41.66667%}.el-col-xs-pull-10{position:relative;right:41.66667%}.el-col-xs-push-10{position:relative;left:41.66667%}.el-col-xs-11{width:45.83333%}.el-col-xs-offset-11{margin-left:45.83333%}.el-col-xs-pull-11{position:relative;right:45.83333%}.el-col-xs-push-11{position:relative;left:45.83333%}.el-col-xs-12{width:50%}.el-col-xs-offset-12{margin-left:50%}.el-col-xs-pull-12{position:relative;right:50%}.el-col-xs-push-12{position:relative;left:50%}.el-col-xs-13{width:54.16667%}.el-col-xs-offset-13{margin-left:54.16667%}.el-col-xs-pull-13{position:relative;right:54.16667%}.el-col-xs-push-13{position:relative;left:54.16667%}.el-col-xs-14{width:58.33333%}.el-col-xs-offset-14{margin-left:58.33333%}.el-col-xs-pull-14{position:relative;right:58.33333%}.el-col-xs-push-14{position:relative;left:58.33333%}.el-col-xs-15{width:62.5%}.el-col-xs-offset-15{margin-left:62.5%}.el-col-xs-pull-15{position:relative;right:62.5%}.el-col-xs-push-15{position:relative;left:62.5%}.el-col-xs-16{width:66.66667%}.el-col-xs-offset-16{margin-left:66.66667%}.el-col-xs-pull-16{position:relative;right:66.66667%}.el-col-xs-push-16{position:relative;left:66.66667%}.el-col-xs-17{width:70.83333%}.el-col-xs-offset-17{margin-left:70.83333%}.el-col-xs-pull-17{position:relative;right:70.83333%}.el-col-xs-push-17{position:relative;left:70.83333%}.el-col-xs-18{width:75%}.el-col-xs-offset-18{margin-left:75%}.el-col-xs-pull-18{position:relative;right:75%}.el-col-xs-push-18{position:relative;left:75%}.el-col-xs-19{width:79.16667%}.el-col-xs-offset-19{margin-left:79.16667%}.el-col-xs-pull-19{position:relative;right:79.16667%}.el-col-xs-push-19{position:relative;left:79.16667%}.el-col-xs-20{width:83.33333%}.el-col-xs-offset-20{margin-left:83.33333%}.el-col-xs-pull-20{position:relative;right:83.33333%}.el-col-xs-push-20{position:relative;left:83.33333%}.el-col-xs-21{width:87.5%}.el-col-xs-offset-21{margin-left:87.5%}.el-col-xs-pull-21{position:relative;right:87.5%}.el-col-xs-push-21{position:relative;left:87.5%}.el-col-xs-22{width:91.66667%}.el-col-xs-offset-22{margin-left:91.66667%}.el-col-xs-pull-22{position:relative;right:91.66667%}.el-col-xs-push-22{position:relative;left:91.66667%}.el-col-xs-23{width:95.83333%}.el-col-xs-offset-23{margin-left:95.83333%}.el-col-xs-pull-23{position:relative;right:95.83333%}.el-col-xs-push-23{position:relative;left:95.83333%}.el-col-xs-24{width:100%}.el-col-xs-offset-24{margin-left:100%}.el-col-xs-pull-24{position:relative;right:100%}.el-col-xs-push-24{position:relative;left:100%}}@media only screen and (min-width:768px){.el-col-sm-0{display:none;width:0%}.el-col-sm-offset-0{margin-left:0}.el-col-sm-pull-0{position:relative;right:0}.el-col-sm-push-0{position:relative;left:0}.el-col-sm-1{width:4.16667%}.el-col-sm-offset-1{margin-left:4.16667%}.el-col-sm-pull-1{position:relative;right:4.16667%}.el-col-sm-push-1{position:relative;left:4.16667%}.el-col-sm-2{width:8.33333%}.el-col-sm-offset-2{margin-left:8.33333%}.el-col-sm-pull-2{position:relative;right:8.33333%}.el-col-sm-push-2{position:relative;left:8.33333%}.el-col-sm-3{width:12.5%}.el-col-sm-offset-3{margin-left:12.5%}.el-col-sm-pull-3{position:relative;right:12.5%}.el-col-sm-push-3{position:relative;left:12.5%}.el-col-sm-4{width:16.66667%}.el-col-sm-offset-4{margin-left:16.66667%}.el-col-sm-pull-4{position:relative;right:16.66667%}.el-col-sm-push-4{position:relative;left:16.66667%}.el-col-sm-5{width:20.83333%}.el-col-sm-offset-5{margin-left:20.83333%}.el-col-sm-pull-5{position:relative;right:20.83333%}.el-col-sm-push-5{position:relative;left:20.83333%}.el-col-sm-6{width:25%}.el-col-sm-offset-6{margin-left:25%}.el-col-sm-pull-6{position:relative;right:25%}.el-col-sm-push-6{position:relative;left:25%}.el-col-sm-7{width:29.16667%}.el-col-sm-offset-7{margin-left:29.16667%}.el-col-sm-pull-7{position:relative;right:29.16667%}.el-col-sm-push-7{position:relative;left:29.16667%}.el-col-sm-8{width:33.33333%}.el-col-sm-offset-8{margin-left:33.33333%}.el-col-sm-pull-8{position:relative;right:33.33333%}.el-col-sm-push-8{position:relative;left:33.33333%}.el-col-sm-9{width:37.5%}.el-col-sm-offset-9{margin-left:37.5%}.el-col-sm-pull-9{position:relative;right:37.5%}.el-col-sm-push-9{position:relative;left:37.5%}.el-col-sm-10{width:41.66667%}.el-col-sm-offset-10{margin-left:41.66667%}.el-col-sm-pull-10{position:relative;right:41.66667%}.el-col-sm-push-10{position:relative;left:41.66667%}.el-col-sm-11{width:45.83333%}.el-col-sm-offset-11{margin-left:45.83333%}.el-col-sm-pull-11{position:relative;right:45.83333%}.el-col-sm-push-11{position:relative;left:45.83333%}.el-col-sm-12{width:50%}.el-col-sm-offset-12{margin-left:50%}.el-col-sm-pull-12{position:relative;right:50%}.el-col-sm-push-12{position:relative;left:50%}.el-col-sm-13{width:54.16667%}.el-col-sm-offset-13{margin-left:54.16667%}.el-col-sm-pull-13{position:relative;right:54.16667%}.el-col-sm-push-13{position:relative;left:54.16667%}.el-col-sm-14{width:58.33333%}.el-col-sm-offset-14{margin-left:58.33333%}.el-col-sm-pull-14{position:relative;right:58.33333%}.el-col-sm-push-14{position:relative;left:58.33333%}.el-col-sm-15{width:62.5%}.el-col-sm-offset-15{margin-left:62.5%}.el-col-sm-pull-15{position:relative;right:62.5%}.el-col-sm-push-15{position:relative;left:62.5%}.el-col-sm-16{width:66.66667%}.el-col-sm-offset-16{margin-left:66.66667%}.el-col-sm-pull-16{position:relative;right:66.66667%}.el-col-sm-push-16{position:relative;left:66.66667%}.el-col-sm-17{width:70.83333%}.el-col-sm-offset-17{margin-left:70.83333%}.el-col-sm-pull-17{position:relative;right:70.83333%}.el-col-sm-push-17{position:relative;left:70.83333%}.el-col-sm-18{width:75%}.el-col-sm-offset-18{margin-left:75%}.el-col-sm-pull-18{position:relative;right:75%}.el-col-sm-push-18{position:relative;left:75%}.el-col-sm-19{width:79.16667%}.el-col-sm-offset-19{margin-left:79.16667%}.el-col-sm-pull-19{position:relative;right:79.16667%}.el-col-sm-push-19{position:relative;left:79.16667%}.el-col-sm-20{width:83.33333%}.el-col-sm-offset-20{margin-left:83.33333%}.el-col-sm-pull-20{position:relative;right:83.33333%}.el-col-sm-push-20{position:relative;left:83.33333%}.el-col-sm-21{width:87.5%}.el-col-sm-offset-21{margin-left:87.5%}.el-col-sm-pull-21{position:relative;right:87.5%}.el-col-sm-push-21{position:relative;left:87.5%}.el-col-sm-22{width:91.66667%}.el-col-sm-offset-22{margin-left:91.66667%}.el-col-sm-pull-22{position:relative;right:91.66667%}.el-col-sm-push-22{position:relative;left:91.66667%}.el-col-sm-23{width:95.83333%}.el-col-sm-offset-23{margin-left:95.83333%}.el-col-sm-pull-23{position:relative;right:95.83333%}.el-col-sm-push-23{position:relative;left:95.83333%}.el-col-sm-24{width:100%}.el-col-sm-offset-24{margin-left:100%}.el-col-sm-pull-24{position:relative;right:100%}.el-col-sm-push-24{position:relative;left:100%}}@media only screen and (min-width:992px){.el-col-md-0{display:none;width:0%}.el-col-md-offset-0{margin-left:0}.el-col-md-pull-0{position:relative;right:0}.el-col-md-push-0{position:relative;left:0}.el-col-md-1{width:4.16667%}.el-col-md-offset-1{margin-left:4.16667%}.el-col-md-pull-1{position:relative;right:4.16667%}.el-col-md-push-1{position:relative;left:4.16667%}.el-col-md-2{width:8.33333%}.el-col-md-offset-2{margin-left:8.33333%}.el-col-md-pull-2{position:relative;right:8.33333%}.el-col-md-push-2{position:relative;left:8.33333%}.el-col-md-3{width:12.5%}.el-col-md-offset-3{margin-left:12.5%}.el-col-md-pull-3{position:relative;right:12.5%}.el-col-md-push-3{position:relative;left:12.5%}.el-col-md-4{width:16.66667%}.el-col-md-offset-4{margin-left:16.66667%}.el-col-md-pull-4{position:relative;right:16.66667%}.el-col-md-push-4{position:relative;left:16.66667%}.el-col-md-5{width:20.83333%}.el-col-md-offset-5{margin-left:20.83333%}.el-col-md-pull-5{position:relative;right:20.83333%}.el-col-md-push-5{position:relative;left:20.83333%}.el-col-md-6{width:25%}.el-col-md-offset-6{margin-left:25%}.el-col-md-pull-6{position:relative;right:25%}.el-col-md-push-6{position:relative;left:25%}.el-col-md-7{width:29.16667%}.el-col-md-offset-7{margin-left:29.16667%}.el-col-md-pull-7{position:relative;right:29.16667%}.el-col-md-push-7{position:relative;left:29.16667%}.el-col-md-8{width:33.33333%}.el-col-md-offset-8{margin-left:33.33333%}.el-col-md-pull-8{position:relative;right:33.33333%}.el-col-md-push-8{position:relative;left:33.33333%}.el-col-md-9{width:37.5%}.el-col-md-offset-9{margin-left:37.5%}.el-col-md-pull-9{position:relative;right:37.5%}.el-col-md-push-9{position:relative;left:37.5%}.el-col-md-10{width:41.66667%}.el-col-md-offset-10{margin-left:41.66667%}.el-col-md-pull-10{position:relative;right:41.66667%}.el-col-md-push-10{position:relative;left:41.66667%}.el-col-md-11{width:45.83333%}.el-col-md-offset-11{margin-left:45.83333%}.el-col-md-pull-11{position:relative;right:45.83333%}.el-col-md-push-11{position:relative;left:45.83333%}.el-col-md-12{width:50%}.el-col-md-offset-12{margin-left:50%}.el-col-md-pull-12{position:relative;right:50%}.el-col-md-push-12{position:relative;left:50%}.el-col-md-13{width:54.16667%}.el-col-md-offset-13{margin-left:54.16667%}.el-col-md-pull-13{position:relative;right:54.16667%}.el-col-md-push-13{position:relative;left:54.16667%}.el-col-md-14{width:58.33333%}.el-col-md-offset-14{margin-left:58.33333%}.el-col-md-pull-14{position:relative;right:58.33333%}.el-col-md-push-14{position:relative;left:58.33333%}.el-col-md-15{width:62.5%}.el-col-md-offset-15{margin-left:62.5%}.el-col-md-pull-15{position:relative;right:62.5%}.el-col-md-push-15{position:relative;left:62.5%}.el-col-md-16{width:66.66667%}.el-col-md-offset-16{margin-left:66.66667%}.el-col-md-pull-16{position:relative;right:66.66667%}.el-col-md-push-16{position:relative;left:66.66667%}.el-col-md-17{width:70.83333%}.el-col-md-offset-17{margin-left:70.83333%}.el-col-md-pull-17{position:relative;right:70.83333%}.el-col-md-push-17{position:relative;left:70.83333%}.el-col-md-18{width:75%}.el-col-md-offset-18{margin-left:75%}.el-col-md-pull-18{position:relative;right:75%}.el-col-md-push-18{position:relative;left:75%}.el-col-md-19{width:79.16667%}.el-col-md-offset-19{margin-left:79.16667%}.el-col-md-pull-19{position:relative;right:79.16667%}.el-col-md-push-19{position:relative;left:79.16667%}.el-col-md-20{width:83.33333%}.el-col-md-offset-20{margin-left:83.33333%}.el-col-md-pull-20{position:relative;right:83.33333%}.el-col-md-push-20{position:relative;left:83.33333%}.el-col-md-21{width:87.5%}.el-col-md-offset-21{margin-left:87.5%}.el-col-md-pull-21{position:relative;right:87.5%}.el-col-md-push-21{position:relative;left:87.5%}.el-col-md-22{width:91.66667%}.el-col-md-offset-22{margin-left:91.66667%}.el-col-md-pull-22{position:relative;right:91.66667%}.el-col-md-push-22{position:relative;left:91.66667%}.el-col-md-23{width:95.83333%}.el-col-md-offset-23{margin-left:95.83333%}.el-col-md-pull-23{position:relative;right:95.83333%}.el-col-md-push-23{position:relative;left:95.83333%}.el-col-md-24{width:100%}.el-col-md-offset-24{margin-left:100%}.el-col-md-pull-24{position:relative;right:100%}.el-col-md-push-24{position:relative;left:100%}}@media only screen and (min-width:1200px){.el-col-lg-0{display:none;width:0%}.el-col-lg-offset-0{margin-left:0}.el-col-lg-pull-0{position:relative;right:0}.el-col-lg-push-0{position:relative;left:0}.el-col-lg-1{width:4.16667%}.el-col-lg-offset-1{margin-left:4.16667%}.el-col-lg-pull-1{position:relative;right:4.16667%}.el-col-lg-push-1{position:relative;left:4.16667%}.el-col-lg-2{width:8.33333%}.el-col-lg-offset-2{margin-left:8.33333%}.el-col-lg-pull-2{position:relative;right:8.33333%}.el-col-lg-push-2{position:relative;left:8.33333%}.el-col-lg-3{width:12.5%}.el-col-lg-offset-3{margin-left:12.5%}.el-col-lg-pull-3{position:relative;right:12.5%}.el-col-lg-push-3{position:relative;left:12.5%}.el-col-lg-4{width:16.66667%}.el-col-lg-offset-4{margin-left:16.66667%}.el-col-lg-pull-4{position:relative;right:16.66667%}.el-col-lg-push-4{position:relative;left:16.66667%}.el-col-lg-5{width:20.83333%}.el-col-lg-offset-5{margin-left:20.83333%}.el-col-lg-pull-5{position:relative;right:20.83333%}.el-col-lg-push-5{position:relative;left:20.83333%}.el-col-lg-6{width:25%}.el-col-lg-offset-6{margin-left:25%}.el-col-lg-pull-6{position:relative;right:25%}.el-col-lg-push-6{position:relative;left:25%}.el-col-lg-7{width:29.16667%}.el-col-lg-offset-7{margin-left:29.16667%}.el-col-lg-pull-7{position:relative;right:29.16667%}.el-col-lg-push-7{position:relative;left:29.16667%}.el-col-lg-8{width:33.33333%}.el-col-lg-offset-8{margin-left:33.33333%}.el-col-lg-pull-8{position:relative;right:33.33333%}.el-col-lg-push-8{position:relative;left:33.33333%}.el-col-lg-9{width:37.5%}.el-col-lg-offset-9{margin-left:37.5%}.el-col-lg-pull-9{position:relative;right:37.5%}.el-col-lg-push-9{position:relative;left:37.5%}.el-col-lg-10{width:41.66667%}.el-col-lg-offset-10{margin-left:41.66667%}.el-col-lg-pull-10{position:relative;right:41.66667%}.el-col-lg-push-10{position:relative;left:41.66667%}.el-col-lg-11{width:45.83333%}.el-col-lg-offset-11{margin-left:45.83333%}.el-col-lg-pull-11{position:relative;right:45.83333%}.el-col-lg-push-11{position:relative;left:45.83333%}.el-col-lg-12{width:50%}.el-col-lg-offset-12{margin-left:50%}.el-col-lg-pull-12{position:relative;right:50%}.el-col-lg-push-12{position:relative;left:50%}.el-col-lg-13{width:54.16667%}.el-col-lg-offset-13{margin-left:54.16667%}.el-col-lg-pull-13{position:relative;right:54.16667%}.el-col-lg-push-13{position:relative;left:54.16667%}.el-col-lg-14{width:58.33333%}.el-col-lg-offset-14{margin-left:58.33333%}.el-col-lg-pull-14{position:relative;right:58.33333%}.el-col-lg-push-14{position:relative;left:58.33333%}.el-col-lg-15{width:62.5%}.el-col-lg-offset-15{margin-left:62.5%}.el-col-lg-pull-15{position:relative;right:62.5%}.el-col-lg-push-15{position:relative;left:62.5%}.el-col-lg-16{width:66.66667%}.el-col-lg-offset-16{margin-left:66.66667%}.el-col-lg-pull-16{position:relative;right:66.66667%}.el-col-lg-push-16{position:relative;left:66.66667%}.el-col-lg-17{width:70.83333%}.el-col-lg-offset-17{margin-left:70.83333%}.el-col-lg-pull-17{position:relative;right:70.83333%}.el-col-lg-push-17{position:relative;left:70.83333%}.el-col-lg-18{width:75%}.el-col-lg-offset-18{margin-left:75%}.el-col-lg-pull-18{position:relative;right:75%}.el-col-lg-push-18{position:relative;left:75%}.el-col-lg-19{width:79.16667%}.el-col-lg-offset-19{margin-left:79.16667%}.el-col-lg-pull-19{position:relative;right:79.16667%}.el-col-lg-push-19{position:relative;left:79.16667%}.el-col-lg-20{width:83.33333%}.el-col-lg-offset-20{margin-left:83.33333%}.el-col-lg-pull-20{position:relative;right:83.33333%}.el-col-lg-push-20{position:relative;left:83.33333%}.el-col-lg-21{width:87.5%}.el-col-lg-offset-21{margin-left:87.5%}.el-col-lg-pull-21{position:relative;right:87.5%}.el-col-lg-push-21{position:relative;left:87.5%}.el-col-lg-22{width:91.66667%}.el-col-lg-offset-22{margin-left:91.66667%}.el-col-lg-pull-22{position:relative;right:91.66667%}.el-col-lg-push-22{position:relative;left:91.66667%}.el-col-lg-23{width:95.83333%}.el-col-lg-offset-23{margin-left:95.83333%}.el-col-lg-pull-23{position:relative;right:95.83333%}.el-col-lg-push-23{position:relative;left:95.83333%}.el-col-lg-24{width:100%}.el-col-lg-offset-24{margin-left:100%}.el-col-lg-pull-24{position:relative;right:100%}.el-col-lg-push-24{position:relative;left:100%}}@media only screen and (min-width:1920px){.el-col-xl-0{display:none;width:0%}.el-col-xl-offset-0{margin-left:0}.el-col-xl-pull-0{position:relative;right:0}.el-col-xl-push-0{position:relative;left:0}.el-col-xl-1{width:4.16667%}.el-col-xl-offset-1{margin-left:4.16667%}.el-col-xl-pull-1{position:relative;right:4.16667%}.el-col-xl-push-1{position:relative;left:4.16667%}.el-col-xl-2{width:8.33333%}.el-col-xl-offset-2{margin-left:8.33333%}.el-col-xl-pull-2{position:relative;right:8.33333%}.el-col-xl-push-2{position:relative;left:8.33333%}.el-col-xl-3{width:12.5%}.el-col-xl-offset-3{margin-left:12.5%}.el-col-xl-pull-3{position:relative;right:12.5%}.el-col-xl-push-3{position:relative;left:12.5%}.el-col-xl-4{width:16.66667%}.el-col-xl-offset-4{margin-left:16.66667%}.el-col-xl-pull-4{position:relative;right:16.66667%}.el-col-xl-push-4{position:relative;left:16.66667%}.el-col-xl-5{width:20.83333%}.el-col-xl-offset-5{margin-left:20.83333%}.el-col-xl-pull-5{position:relative;right:20.83333%}.el-col-xl-push-5{position:relative;left:20.83333%}.el-col-xl-6{width:25%}.el-col-xl-offset-6{margin-left:25%}.el-col-xl-pull-6{position:relative;right:25%}.el-col-xl-push-6{position:relative;left:25%}.el-col-xl-7{width:29.16667%}.el-col-xl-offset-7{margin-left:29.16667%}.el-col-xl-pull-7{position:relative;right:29.16667%}.el-col-xl-push-7{position:relative;left:29.16667%}.el-col-xl-8{width:33.33333%}.el-col-xl-offset-8{margin-left:33.33333%}.el-col-xl-pull-8{position:relative;right:33.33333%}.el-col-xl-push-8{position:relative;left:33.33333%}.el-col-xl-9{width:37.5%}.el-col-xl-offset-9{margin-left:37.5%}.el-col-xl-pull-9{position:relative;right:37.5%}.el-col-xl-push-9{position:relative;left:37.5%}.el-col-xl-10{width:41.66667%}.el-col-xl-offset-10{margin-left:41.66667%}.el-col-xl-pull-10{position:relative;right:41.66667%}.el-col-xl-push-10{position:relative;left:41.66667%}.el-col-xl-11{width:45.83333%}.el-col-xl-offset-11{margin-left:45.83333%}.el-col-xl-pull-11{position:relative;right:45.83333%}.el-col-xl-push-11{position:relative;left:45.83333%}.el-col-xl-12{width:50%}.el-col-xl-offset-12{margin-left:50%}.el-col-xl-pull-12{position:relative;right:50%}.el-col-xl-push-12{position:relative;left:50%}.el-col-xl-13{width:54.16667%}.el-col-xl-offset-13{margin-left:54.16667%}.el-col-xl-pull-13{position:relative;right:54.16667%}.el-col-xl-push-13{position:relative;left:54.16667%}.el-col-xl-14{width:58.33333%}.el-col-xl-offset-14{margin-left:58.33333%}.el-col-xl-pull-14{position:relative;right:58.33333%}.el-col-xl-push-14{position:relative;left:58.33333%}.el-col-xl-15{width:62.5%}.el-col-xl-offset-15{margin-left:62.5%}.el-col-xl-pull-15{position:relative;right:62.5%}.el-col-xl-push-15{position:relative;left:62.5%}.el-col-xl-16{width:66.66667%}.el-col-xl-offset-16{margin-left:66.66667%}.el-col-xl-pull-16{position:relative;right:66.66667%}.el-col-xl-push-16{position:relative;left:66.66667%}.el-col-xl-17{width:70.83333%}.el-col-xl-offset-17{margin-left:70.83333%}.el-col-xl-pull-17{position:relative;right:70.83333%}.el-col-xl-push-17{position:relative;left:70.83333%}.el-col-xl-18{width:75%}.el-col-xl-offset-18{margin-left:75%}.el-col-xl-pull-18{position:relative;right:75%}.el-col-xl-push-18{position:relative;left:75%}.el-col-xl-19{width:79.16667%}.el-col-xl-offset-19{margin-left:79.16667%}.el-col-xl-pull-19{position:relative;right:79.16667%}.el-col-xl-push-19{position:relative;left:79.16667%}.el-col-xl-20{width:83.33333%}.el-col-xl-offset-20{margin-left:83.33333%}.el-col-xl-pull-20{position:relative;right:83.33333%}.el-col-xl-push-20{position:relative;left:83.33333%}.el-col-xl-21{width:87.5%}.el-col-xl-offset-21{margin-left:87.5%}.el-col-xl-pull-21{position:relative;right:87.5%}.el-col-xl-push-21{position:relative;left:87.5%}.el-col-xl-22{width:91.66667%}.el-col-xl-offset-22{margin-left:91.66667%}.el-col-xl-pull-22{position:relative;right:91.66667%}.el-col-xl-push-22{position:relative;left:91.66667%}.el-col-xl-23{width:95.83333%}.el-col-xl-offset-23{margin-left:95.83333%}.el-col-xl-pull-23{position:relative;right:95.83333%}.el-col-xl-push-23{position:relative;left:95.83333%}.el-col-xl-24{width:100%}.el-col-xl-offset-24{margin-left:100%}.el-col-xl-pull-24{position:relative;right:100%}.el-col-xl-push-24{position:relative;left:100%}}@-webkit-keyframes progress{0%{background-position:0 0}100%{background-position:32px 0}}.el-upload{display:inline-block;text-align:center;cursor:pointer;outline:0}.el-upload__input{display:none}.el-upload__tip{font-size:12px;color:#B8B8B8;margin-top:7px}.el-upload iframe{position:absolute;z-index:-1;top:0;left:0;opacity:0;filter:alpha(opacity=0)}.el-upload--picture-card{background-color:#fbfdff;border:1px dashed #c0ccda;border-radius:6px;box-sizing:border-box;width:148px;height:148px;line-height:146px;vertical-align:top}.el-upload--picture-card i{font-size:28px;color:#8c939d}.el-upload--picture-card:hover,.el-upload:focus{border-color:#D71A1B;color:#D71A1B}.el-upload:focus .el-upload-dragger{border-color:#D71A1B}.el-upload-dragger{background-color:#fff;border:1px dashed #d9d9d9;border-radius:6px;box-sizing:border-box;width:360px;height:180px;text-align:center;position:relative;overflow:hidden}.el-upload-dragger .el-icon-upload{font-size:67px;color:#CCC;margin:40px 0 16px;line-height:50px}.el-upload-dragger+.el-upload__tip{text-align:center}.el-upload-dragger~.el-upload__files{border-top:1px solid #BEBEBE;margin-top:7px;padding-top:5px}.el-upload-dragger .el-upload__text{color:#B8B8B8;font-size:14px;text-align:center}.el-upload-dragger .el-upload__text em{color:#D71A1B;font-style:normal}.el-upload-dragger:hover{border-color:#D71A1B}.el-upload-dragger.is-dragover{background-color:rgba(32,159,255,.06);border:2px dashed #D71A1B}.el-upload-list{margin:0;padding:0;list-style:none}.el-upload-list__item{-webkit-transition:all .5s cubic-bezier(.55,0,.1,1);transition:all .5s cubic-bezier(.55,0,.1,1);font-size:14px;color:#B8B8B8;line-height:1.8;margin-top:5px;position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:4px;width:100%}.el-upload-list__item .el-progress{position:absolute;top:20px;width:100%}.el-upload-list__item .el-progress__text{position:absolute;right:0;top:-13px}.el-upload-list__item .el-progress-bar{margin-right:0;padding-right:0}.el-upload-list__item:first-child{margin-top:10px}.el-upload-list__item .el-icon-upload-success{color:#67C23A}.el-upload-list__item .el-icon-close{display:none;position:absolute;top:5px;right:5px;cursor:pointer;opacity:.75;color:#B8B8B8}.el-upload-list__item .el-icon-close:hover{opacity:1}.el-upload-list__item .el-icon-close-tip{display:none;position:absolute;top:5px;right:5px;font-size:12px;cursor:pointer;opacity:1;color:#D71A1B}.el-upload-list__item:hover{background-color:#171315}.el-upload-list__item:hover .el-icon-close{display:inline-block}.el-upload-list__item:hover .el-progress__text{display:none}.el-upload-list__item.is-success .el-upload-list__item-status-label{display:block}.el-upload-list__item.is-success .el-upload-list__item-name:focus,.el-upload-list__item.is-success .el-upload-list__item-name:hover{color:#D71A1B;cursor:pointer}.el-upload-list__item.is-success:focus:not(:hover) .el-icon-close-tip{display:inline-block}.el-upload-list__item.is-success:active .el-icon-close-tip,.el-upload-list__item.is-success:focus .el-upload-list__item-status-label,.el-upload-list__item.is-success:hover .el-upload-list__item-status-label,.el-upload-list__item.is-success:not(.focusing):focus .el-icon-close-tip{display:none}.el-upload-list.is-disabled .el-upload-list__item:hover .el-upload-list__item-status-label{display:block}.el-upload-list__item-name{color:#B8B8B8;display:block;margin-right:40px;overflow:hidden;padding-left:4px;text-overflow:ellipsis;-webkit-transition:color .3s;transition:color .3s;white-space:nowrap}.el-upload-list__item-name [class^=el-icon]{height:100%;margin-right:7px;color:#BCBCBC;line-height:inherit}.el-upload-list__item-status-label{position:absolute;right:5px;top:0;line-height:inherit;display:none}.el-upload-list__item-delete{position:absolute;right:10px;top:0;font-size:12px;color:#B8B8B8;display:none}.el-upload-list__item-delete:hover{color:#D71A1B}.el-upload-list--picture-card{margin:0;display:inline;vertical-align:top}.el-upload-list--picture-card .el-upload-list__item{overflow:hidden;background-color:#fff;border:1px solid #c0ccda;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;width:148px;height:148px;margin:0 8px 8px 0;display:inline-block}.el-upload-list--picture-card .el-upload-list__item .el-icon-check,.el-upload-list--picture-card .el-upload-list__item .el-icon-circle-check{color:#232222}.el-upload-list--picture-card .el-upload-list__item .el-icon-close,.el-upload-list--picture-card .el-upload-list__item:hover .el-upload-list__item-status-label{display:none}.el-upload-list--picture-card .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture-card .el-upload-list__item-name{display:none}.el-upload-list--picture-card .el-upload-list__item-thumbnail{width:100%;height:100%}.el-upload-list--picture-card .el-upload-list__item-status-label{position:absolute;right:-15px;top:-6px;width:40px;height:24px;background:#13ce66;text-align:center;-webkit-transform:rotate(45deg);transform:rotate(45deg);-webkit-box-shadow:0 0 1pc 1px rgba(0,0,0,.2);box-shadow:0 0 1pc 1px rgba(0,0,0,.2)}.el-upload-list--picture-card .el-upload-list__item-status-label i{font-size:12px;margin-top:11px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.el-upload-list--picture-card .el-upload-list__item-actions{position:absolute;width:100%;height:100%;left:0;top:0;cursor:default;text-align:center;color:#fff;opacity:0;font-size:20px;background-color:rgba(0,0,0,.5);-webkit-transition:opacity .3s;transition:opacity .3s}.el-upload-list--picture-card .el-upload-list__item-actions::after{display:inline-block;content:\"\";height:100%;vertical-align:middle}.el-upload-list--picture-card .el-upload-list__item-actions span{display:none;cursor:pointer}.el-upload-list--picture-card .el-upload-list__item-actions span+span{margin-left:15px}.el-upload-list--picture-card .el-upload-list__item-actions .el-upload-list__item-delete{position:static;font-size:inherit;color:inherit}.el-upload-list--picture-card .el-upload-list__item-actions:hover{opacity:1}.el-upload-list--picture-card .el-upload-list__item-actions:hover span{display:inline-block}.el-upload-list--picture-card .el-progress{top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);bottom:auto;width:126px}.el-upload-list--picture-card .el-progress .el-progress__text{top:50%}.el-upload-list--picture .el-upload-list__item{overflow:hidden;z-index:0;background-color:#fff;border:1px solid #c0ccda;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;margin-top:10px;padding:10px 10px 10px 90px;height:92px}.el-upload-list--picture .el-upload-list__item .el-icon-check,.el-upload-list--picture .el-upload-list__item .el-icon-circle-check{color:#232222}.el-upload-list--picture .el-upload-list__item:hover .el-upload-list__item-status-label{background:0 0;-webkit-box-shadow:none;box-shadow:none;top:-2px;right:-12px}.el-upload-list--picture .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name{line-height:70px;margin-top:0}.el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name i{display:none}.el-upload-list--picture .el-upload-list__item-thumbnail{vertical-align:middle;display:inline-block;width:70px;height:70px;float:left;position:relative;z-index:1;margin-left:-80px;background-color:#232222}.el-upload-list--picture .el-upload-list__item-name{display:block;margin-top:20px}.el-upload-list--picture .el-upload-list__item-name i{font-size:70px;line-height:1;position:absolute;left:9px;top:10px}.el-upload-list--picture .el-upload-list__item-status-label{position:absolute;right:-17px;top:-7px;width:46px;height:26px;background:#13ce66;text-align:center;-webkit-transform:rotate(45deg);transform:rotate(45deg);-webkit-box-shadow:0 1px 1px #ccc;box-shadow:0 1px 1px #ccc}.el-upload-list--picture .el-upload-list__item-status-label i{font-size:12px;margin-top:12px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.el-upload-list--picture .el-progress{position:relative;top:-7px}.el-upload-cover{position:absolute;left:0;top:0;width:100%;height:100%;overflow:hidden;z-index:10;cursor:default}.el-upload-cover::after{display:inline-block;height:100%;vertical-align:middle}.el-upload-cover img{display:block;width:100%;height:100%}.el-upload-cover__label{position:absolute;right:-15px;top:-6px;width:40px;height:24px;background:#13ce66;text-align:center;-webkit-transform:rotate(45deg);transform:rotate(45deg);-webkit-box-shadow:0 0 1pc 1px rgba(0,0,0,.2);box-shadow:0 0 1pc 1px rgba(0,0,0,.2)}.el-upload-cover__label i{font-size:12px;margin-top:11px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);color:#fff}.el-upload-cover__progress{display:inline-block;vertical-align:middle;position:static;width:243px}.el-upload-cover__progress+.el-upload__inner{opacity:0}.el-upload-cover__content{position:absolute;top:0;left:0;width:100%;height:100%}.el-upload-cover__interact{position:absolute;bottom:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,.72);text-align:center}.el-upload-cover__interact .btn{display:inline-block;color:#232222;font-size:14px;cursor:pointer;vertical-align:middle;-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);margin-top:60px}.el-upload-cover__interact .btn span{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.el-upload-cover__interact .btn:not(:first-child){margin-left:35px}.el-upload-cover__interact .btn:hover{-webkit-transform:translateY(-13px);transform:translateY(-13px)}.el-upload-cover__interact .btn:hover span{opacity:1}.el-upload-cover__interact .btn i{color:#232222;display:block;font-size:24px;line-height:inherit;margin:0 auto 5px}.el-upload-cover__title{position:absolute;bottom:0;left:0;background-color:#232222;height:36px;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:400;text-align:left;padding:0 10px;margin:0;line-height:36px;font-size:14px;color:#FFF}.el-upload-cover+.el-upload__inner{opacity:0;position:relative;z-index:1}.el-progress{position:relative;line-height:1}.el-progress__text{font-size:14px;color:#B8B8B8;display:inline-block;vertical-align:middle;margin-left:10px;line-height:1}.el-progress__text i{vertical-align:middle;display:block}.el-progress--circle,.el-progress--dashboard{display:inline-block}.el-progress--circle .el-progress__text,.el-progress--dashboard .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,.el-progress--dashboard .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,.el-spinner{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-warning .el-progress-bar__inner{background-color:#E6A23C}.el-progress.is-warning .el-progress__text{color:#E6A23C}.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:#454545;overflow:hidden;position:relative;vertical-align:middle}.el-progress-bar__inner{position:absolute;left:0;top:0;height:100%;background-color:#D71A1B;text-align:right;border-radius:100px;line-height:1;white-space:nowrap;-webkit-transition:width .6s ease;transition:width .6s ease}.el-card,.el-message{border-radius:4px;overflow:hidden}.el-progress-bar__inner::after{height:100%}.el-progress-bar__innerText{color:#232222;font-size:12px;margin:0 5px}@keyframes progress{0%{background-position:0 0}100%{background-position:32px 0}}.el-time-spinner{width:100%;white-space:nowrap}.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}}.el-message{min-width:380px;-webkit-box-sizing:border-box;box-sizing:border-box;border-width:1px;border-style:solid;border-color:#454545;position:fixed;left:50%;top:20px;-webkit-transform:translateX(-50%);transform:translateX(-50%);background-color:#edf2fc;-webkit-transition:opacity .3s,top .4s,-webkit-transform .4s;transition:opacity .3s,top .4s,-webkit-transform .4s;transition:opacity .3s,transform .4s,top .4s;transition:opacity .3s,transform .4s,top .4s,-webkit-transform .4s;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:#B8B8B8}.el-message--success{background-color:#2a3224;border-color:#314227}.el-message--success .el-message__content{color:#67C23A}.el-message--warning{background-color:#372f25;border-color:#4a3c27}.el-message--warning .el-message__content{color:#E6A23C}.el-message--error{background-color:#382929;border-color:#4d3131}.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:#CCC;font-size:16px}.el-message__closeBtn:hover{color:#BCBCBC}.el-message .el-icon-success{color:#67C23A}.el-message .el-icon-error{color:#F56C6C}.el-message .el-icon-info{color:#B8B8B8}.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%)}.el-badge{position:relative;vertical-align:middle;display:inline-block}.el-badge__content{background-color:#F56C6C;border-radius:10px;color:#232222;display:inline-block;font-size:12px;height:18px;line-height:18px;padding:0 6px;text-align:center;white-space:nowrap;border:1px solid #232222}.el-badge__content.is-fixed{position:absolute;top:0;right:10px;-webkit-transform:translateY(-50%) translateX(100%);transform:translateY(-50%) translateX(100%)}.el-rate__icon,.el-rate__item{position:relative;display:inline-block}.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%}.el-badge__content--primary{background-color:#D71A1B}.el-badge__content--success{background-color:#67C23A}.el-badge__content--warning{background-color:#E6A23C}.el-badge__content--info{background-color:#B8B8B8}.el-badge__content--danger{background-color:#F56C6C}.el-card{border:1px solid #454545;background-color:#232222;color:#FFF;-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 #454545;-webkit-box-sizing:border-box;box-sizing:border-box}.el-card__body{padding:20px}.el-rate{height:20px;line-height:1}.el-rate__item{font-size:0;vertical-align:middle}.el-rate__icon{font-size:18px;margin-right:6px;color:#CCC;-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-step.is-vertical,.el-steps{display:-webkit-box;display:-ms-flexbox}.el-rate__text{font-size:14px;vertical-align:middle}.el-steps{display:flex}.el-steps--simple{padding:13px 8%;border-radius:4px;background:#171315}.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}.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:#FFF;border-color:#FFF}.el-step__head.is-wait{color:#CCC;border-color:#CCC}.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:#D71A1B;border-color:#D71A1B}.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:#232222;-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;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:#CCC}.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:#FFF}.el-step__title.is-wait{color:#CCC}.el-step__title.is-success{color:#67C23A}.el-step__title.is-error{color:#F56C6C}.el-step__title.is-finish{color:#D71A1B}.el-step__description{padding-right:10%;margin-top:-5px;font-size:12px;line-height:20px;font-weight:400}.el-step__description.is-process{color:#FFF}.el-step__description.is-wait{color:#CCC}.el-step__description.is-success{color:#67C23A}.el-step__description.is-error{color:#F56C6C}.el-step__description.is-finish{color:#D71A1B}.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: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:#CCC}.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}.el-carousel{position:relative}.el-carousel--horizontal{overflow-x:hidden}.el-carousel--vertical{overflow-y:hidden}.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:#232222;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;margin:0;padding:0;z-index:2}.el-carousel__indicators--horizontal{bottom:0;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.el-carousel__indicators--vertical{right:0;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.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:#CCC;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{background-color:transparent;cursor:pointer}.el-carousel__indicator:hover button{opacity:.72}.el-carousel__indicator--horizontal{display:inline-block;padding:12px 4px}.el-carousel__indicator--vertical{padding:4px 12px}.el-carousel__indicator--vertical .el-carousel__button{width:2px;height:15px}.el-carousel__indicator.is-active button{opacity:1}.el-carousel__button{display:block;opacity:.48;width:30px;height:2px;background-color:#232222;border:none;outline:0;padding:0;margin:0;cursor:pointer;-webkit-transition:.3s;transition:.3s}.el-carousel__item,.el-carousel__mask{height:100%;top:0;left:0;position:absolute}.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}.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:#232222;opacity:.24;-webkit-transition:.2s;transition:.2s}.el-fade-in-enter,.el-fade-in-leave-active,.el-fade-in-linear-enter,.el-fade-in-linear-leave,.el-fade-in-linear-leave-active,.fade-in-linear-enter,.fade-in-linear-leave,.fade-in-linear-leave-active{opacity:0}.fade-in-linear-enter-active,.fade-in-linear-leave-active{-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.el-fade-in-linear-enter-active,.el-fade-in-linear-leave-active{-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.el-fade-in-enter-active,.el-fade-in-leave-active{-webkit-transition:all .3s cubic-bezier(.55,0,.1,1);transition:all .3s cubic-bezier(.55,0,.1,1)}.el-zoom-in-center-enter-active,.el-zoom-in-center-leave-active{-webkit-transition:all .3s cubic-bezier(.55,0,.1,1);transition:all .3s cubic-bezier(.55,0,.1,1)}.el-zoom-in-center-enter,.el-zoom-in-center-leave-active{opacity:0;-webkit-transform:scaleX(0);transform:scaleX(0)}.el-zoom-in-top-enter-active,.el-zoom-in-top-leave-active{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);-webkit-transform-origin:center top;transform-origin:center top}.el-zoom-in-top-enter,.el-zoom-in-top-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.el-zoom-in-bottom-enter-active,.el-zoom-in-bottom-leave-active{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);-webkit-transform-origin:center bottom;transform-origin:center bottom}.el-zoom-in-bottom-enter,.el-zoom-in-bottom-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.el-zoom-in-left-enter-active,.el-zoom-in-left-leave-active{opacity:1;-webkit-transform:scale(1,1);transform:scale(1,1);-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);-webkit-transform-origin:top left;transform-origin:top left}.el-zoom-in-left-enter,.el-zoom-in-left-leave-active{opacity:0;-webkit-transform:scale(.45,.45);transform:scale(.45,.45)}.collapse-transition{-webkit-transition:.3s height ease-in-out,.3s padding-top ease-in-out,.3s padding-bottom ease-in-out;transition:.3s height ease-in-out,.3s padding-top ease-in-out,.3s padding-bottom ease-in-out}.horizontal-collapse-transition{-webkit-transition:.3s width ease-in-out,.3s padding-left ease-in-out,.3s padding-right ease-in-out;transition:.3s width ease-in-out,.3s padding-left ease-in-out,.3s padding-right ease-in-out}.el-list-enter-active,.el-list-leave-active{-webkit-transition:all 1s;transition:all 1s}.el-list-enter,.el-list-leave-active{opacity:0;-webkit-transform:translateY(-30px);transform:translateY(-30px)}.el-opacity-transition{-webkit-transition:opacity .3s cubic-bezier(.55,0,.1,1);transition:opacity .3s cubic-bezier(.55,0,.1,1)}.el-collapse{border-top:1px solid #454545;border-bottom:1px solid #454545}.el-collapse-item.is-disabled .el-collapse-item__header{color:#bbb;cursor:not-allowed}.el-collapse-item__header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:48px;line-height:48px;background-color:#232222;color:#FFF;cursor:pointer;border-bottom:1px solid #454545;font-size:13px;font-weight:500;-webkit-transition:border-bottom-color .3s;transition:border-bottom-color .3s;outline:0}.el-collapse-item__arrow{margin:0 8px 0 auto;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;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:#D71A1B}.el-collapse-item__header.is-active{border-bottom-color:transparent}.el-collapse-item__wrap{will-change:height;background-color:#232222;overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;border-bottom:1px solid #454545}.el-cascader__tags,.el-tag{-webkit-box-sizing:border-box}.el-collapse-item__content{padding-bottom:25px;font-size:13px;color:#FFF;line-height:1.769230769230769}.el-collapse-item:last-child{margin-bottom:-1px}.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:#454545;border-bottom-width:0}.el-popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-6px;border-top-color:#232222;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:#454545}.el-popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-6px;border-top-width:0;border-bottom-color:#232222}.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:#454545;border-left-width:0}.el-popper[x-placement^=right] .popper__arrow::after{bottom:-6px;left:1px;border-right-color:#232222;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:#454545}.el-popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-6px;margin-left:-6px;border-right-width:0;border-left-color:#232222}.el-tag{background-color:#352121;border-color:#472021;display:inline-block;height:32px;padding:0 10px;line-height:30px;font-size:12px;color:#D71A1B;border-width:1px;border-style:solid;border-radius:4px;box-sizing:border-box;white-space:nowrap}.el-tag.is-hit{border-color:#D71A1B}.el-tag .el-tag__close{color:#d71a1b}.el-tag .el-tag__close:hover{color:#232222;background-color:#d71a1b}.el-tag.el-tag--info{background-color:#323131;border-color:#414040;color:#b8b8b8}.el-tag.el-tag--info.is-hit{border-color:#B8B8B8}.el-tag.el-tag--info .el-tag__close{color:#b8b8b8}.el-tag.el-tag--info .el-tag__close:hover{color:#232222;background-color:#b8b8b8}.el-tag.el-tag--success{background-color:#2a3224;border-color:#314227;color:#67c23a}.el-tag.el-tag--success.is-hit{border-color:#67C23A}.el-tag.el-tag--success .el-tag__close{color:#67c23a}.el-tag.el-tag--success .el-tag__close:hover{color:#232222;background-color:#67c23a}.el-tag.el-tag--warning{background-color:#372f25;border-color:#4a3c27;color:#e6a23c}.el-tag.el-tag--warning.is-hit{border-color:#E6A23C}.el-tag.el-tag--warning .el-tag__close{color:#e6a23c}.el-tag.el-tag--warning .el-tag__close:hover{color:#232222;background-color:#e6a23c}.el-tag.el-tag--danger{background-color:#382929;border-color:#4d3131;color:#f56c6c}.el-tag.el-tag--danger.is-hit{border-color:#F56C6C}.el-tag.el-tag--danger .el-tag__close{color:#f56c6c}.el-tag.el-tag--danger .el-tag__close:hover{color:#232222;background-color:#f56c6c}.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}.el-tag .el-icon-close::before{display:block}.el-tag--dark{background-color:#d71a1b;border-color:#d71a1b;color:#232222}.el-tag--dark.is-hit{border-color:#D71A1B}.el-tag--dark .el-tag__close{color:#232222}.el-tag--dark .el-tag__close:hover{color:#232222;background-color:#b31c1c}.el-tag--dark.el-tag--info{background-color:#b8b8b8;border-color:#b8b8b8;color:#232222}.el-tag--dark.el-tag--info.is-hit{border-color:#B8B8B8}.el-tag--dark.el-tag--info .el-tag__close{color:#232222}.el-tag--dark.el-tag--info .el-tag__close:hover{color:#232222;background-color:#9a9a9a}.el-tag--dark.el-tag--success{background-color:#67c23a;border-color:#67c23a;color:#232222}.el-tag--dark.el-tag--success.is-hit{border-color:#67C23A}.el-tag--dark.el-tag--success .el-tag__close{color:#232222}.el-tag--dark.el-tag--success .el-tag__close:hover{color:#232222;background-color:#59a235}.el-tag--dark.el-tag--warning{background-color:#e6a23c;border-color:#e6a23c;color:#232222}.el-tag--dark.el-tag--warning.is-hit{border-color:#E6A23C}.el-tag--dark.el-tag--warning .el-tag__close{color:#232222}.el-tag--dark.el-tag--warning .el-tag__close:hover{color:#232222;background-color:#bf8837}.el-tag--dark.el-tag--danger{background-color:#f56c6c;border-color:#f56c6c;color:#232222}.el-tag--dark.el-tag--danger.is-hit{border-color:#F56C6C}.el-tag--dark.el-tag--danger .el-tag__close{color:#232222}.el-tag--dark.el-tag--danger .el-tag__close:hover{color:#232222;background-color:#cb5d5d}.el-tag--plain{background-color:#232222;border-color:#6b1f1f;color:#d71a1b}.el-tag--plain.is-hit{border-color:#D71A1B}.el-tag--plain .el-tag__close{color:#d71a1b}.el-tag--plain .el-tag__close:hover{color:#232222;background-color:#d71a1b}.el-tag--plain.el-tag--info{background-color:#232222;border-color:#5f5e5e;color:#b8b8b8}.el-tag--plain.el-tag--info.is-hit{border-color:#B8B8B8}.el-tag--plain.el-tag--info .el-tag__close{color:#b8b8b8}.el-tag--plain.el-tag--info .el-tag__close:hover{color:#232222;background-color:#b8b8b8}.el-tag--plain.el-tag--success{background-color:#232222;border-color:#3e622c;color:#67c23a}.el-tag--plain.el-tag--success.is-hit{border-color:#67C23A}.el-tag--plain.el-tag--success .el-tag__close{color:#67c23a}.el-tag--plain.el-tag--success .el-tag__close:hover{color:#232222;background-color:#67c23a}.el-tag--plain.el-tag--warning{background-color:#232222;border-color:#71552c;color:#e6a23c}.el-tag--plain.el-tag--warning.is-hit{border-color:#E6A23C}.el-tag--plain.el-tag--warning .el-tag__close{color:#e6a23c}.el-tag--plain.el-tag--warning .el-tag__close:hover{color:#232222;background-color:#e6a23c}.el-tag--plain.el-tag--danger{background-color:#232222;border-color:#774040;color:#f56c6c}.el-tag--plain.el-tag--danger.is-hit{border-color:#F56C6C}.el-tag--plain.el-tag--danger .el-tag__close{color:#f56c6c}.el-tag--plain.el-tag--danger .el-tag__close:hover{color:#232222;background-color:#f56c6c}.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)}.el-cascader{display:inline-block;position:relative;font-size:14px;line-height:40px}.el-cascader:not(.is-disabled):hover .el-input__inner{cursor:pointer;border-color:#CCC}.el-cascader .el-input .el-input__inner:focus,.el-cascader .el-input.is-focus .el-input__inner{border-color:#D71A1B}.el-cascader .el-input{cursor:pointer}.el-cascader .el-input .el-input__inner{text-overflow:ellipsis}.el-cascader .el-input .el-icon-arrow-down{-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;font-size:14px}.el-cascader .el-input .el-icon-arrow-down.is-reverse{-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg)}.el-cascader .el-input .el-icon-circle-close:hover{color:#BCBCBC}.el-cascader--medium{font-size:14px;line-height:36px}.el-cascader--small{font-size:13px;line-height:32px}.el-cascader--mini{font-size:12px;line-height:28px}.el-cascader.is-disabled .el-cascader__label{z-index:2;color:#CCC}.el-cascader__dropdown{margin:5px 0;font-size:14px;background:#232222;border:1px solid #7A7A7A;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)}.el-cascader__tags{position:absolute;left:0;right:30px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;line-height:normal;text-align:left;box-sizing:border-box}.el-cascader__tags .el-tag{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;max-width:100%;margin:2px 0 2px 6px;text-overflow:ellipsis;background:#f0f2f5}.el-cascader__tags .el-tag:not(.is-hit){border-color:transparent}.el-cascader__tags .el-tag>span{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:hidden;text-overflow:ellipsis}.el-cascader__tags .el-tag .el-icon-close{-webkit-box-flex:0;-ms-flex:none;flex:none;background-color:#CCC;color:#232222}.el-cascader__tags .el-tag .el-icon-close:hover{background-color:#BCBCBC}.el-cascader__suggestion-panel{border-radius:4px}.el-cascader__suggestion-list{max-height:204px;margin:0;padding:6px 0;font-size:14px;color:#B8B8B8;text-align:center}.el-cascader__suggestion-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:34px;padding:0 15px;text-align:left;outline:0;cursor:pointer}.el-cascader__suggestion-item:focus,.el-cascader__suggestion-item:hover{background:#171315}.el-cascader__suggestion-item.is-checked{color:#D71A1B;font-weight:700}.el-cascader__suggestion-item>span{margin-right:10px}.el-cascader__empty-text{margin:10px 0;color:#CCC}.el-cascader__search-input{-webkit-box-flex:1;-ms-flex:1;flex:1;height:24px;min-width:60px;margin:2px 0 2px 15px;padding:0;color:#B8B8B8;border:none;outline:0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-cascader__search-input::-webkit-input-placeholder{color:#CCC}.el-cascader__search-input::-ms-input-placeholder{color:#CCC}.el-cascader__search-input::placeholder{color:#CCC}.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 #D71A1B;box-shadow:0 0 3px 2px #D71A1B}.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(rgba(0,0,0,0)));background:linear-gradient(to top,#000,rgba(0,0,0,0))}.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:#F4F4F4;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:#D71A1B;border-color:#D71A1B}.el-color-dropdown__link-btn{cursor:pointer;color:#D71A1B;text-decoration:none;padding:15px;font-size:12px}.el-color-dropdown__link-btn:hover{color:tint(#D71A1B,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:#232222;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:#232222;border:1px solid #454545;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)}.el-textarea{position:relative;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:#B8B8B8;background-color:#232222;background-image:none;border:1px solid #BEBEBE;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:#CCC}.el-textarea__inner::-ms-input-placeholder{color:#CCC}.el-textarea__inner::placeholder{color:#CCC}.el-textarea__inner:hover{border-color:#CCC}.el-textarea__inner:focus{outline:0;border-color:#D71A1B}.el-textarea .el-input__count{color:#B8B8B8;background:#232222;position:absolute;font-size:12px;bottom:5px;right:10px}.el-textarea.is-disabled .el-textarea__inner{background-color:#171315;border-color:#7A7A7A;color:#CCC;cursor:not-allowed}.el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder{color:#CCC}.el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder{color:#CCC}.el-textarea.is-disabled .el-textarea__inner::placeholder{color:#CCC}.el-textarea.is-exceed .el-textarea__inner{border-color:#F56C6C}.el-textarea.is-exceed .el-input__count{color:#F56C6C}.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:#CCC;font-size:14px;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:#BCBCBC}.el-input .el-input__count{height:100%;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#B8B8B8;font-size:12px}.el-input .el-input__count .el-input__count-inner{background:#232222;line-height:initial;display:inline-block;padding:0 5px}.el-input__inner{-webkit-appearance:none;background-color:#232222;background-image:none;border-radius:4px;border:1px solid #BEBEBE;-webkit-box-sizing:border-box;box-sizing:border-box;color:#B8B8B8;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;height:100%;color:#CCC;text-align:center}.el-input__inner::-webkit-input-placeholder{color:#CCC}.el-input__inner::-ms-input-placeholder{color:#CCC}.el-input__inner::placeholder{color:#CCC}.el-input__inner:hover{border-color:#CCC}.el-input.is-active .el-input__inner,.el-input__inner:focus{border-color:#D71A1B;outline:0}.el-input__suffix{right:5px;transition:all .3s}.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:#171315;border-color:#7A7A7A;color:#CCC;cursor:not-allowed}.el-input.is-disabled .el-input__inner::-webkit-input-placeholder{color:#CCC}.el-input.is-disabled .el-input__inner::-ms-input-placeholder{color:#CCC}.el-input.is-disabled .el-input__inner::placeholder{color:#CCC}.el-input.is-disabled .el-input__icon{cursor:not-allowed}.el-link,.el-transfer-panel__filter .el-icon-circle-close{cursor:pointer}.el-input.is-exceed .el-input__inner{border-color:#F56C6C}.el-input.is-exceed .el-input__suffix .el-input__count{color:#F56C6C}.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;border-spacing:0}.el-input-group>.el-input__inner{vertical-align:middle;display:table-cell}.el-input-group__append,.el-input-group__prepend{background-color:#171315;color:#B8B8B8;vertical-align:middle;display:table-cell;position:relative;border:1px solid #BEBEBE;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}.el-transfer{font-size:14px}.el-transfer__buttons{display:inline-block;vertical-align:middle;padding:0 30px}.el-transfer__button{display:block;margin:0 auto;padding:10px;border-radius:50%;color:#232222;background-color:#D71A1B;font-size:0}.el-transfer-panel__item+.el-transfer-panel__item,.el-transfer__button [class*=el-icon-]+span{margin-left:0}.el-transfer__button.is-with-texts{border-radius:4px}.el-transfer__button.is-disabled,.el-transfer__button.is-disabled:hover{border:1px solid #BEBEBE;background-color:#171315;color:#CCC}.el-transfer__button:first-child{margin-bottom:10px}.el-transfer__button:nth-child(2){margin:0}.el-transfer__button i,.el-transfer__button span{font-size:14px}.el-transfer-panel{border:1px solid #454545;border-radius:4px;overflow:hidden;background:#232222;display:inline-block;vertical-align:middle;width:200px;max-height:100%;-webkit-box-sizing:border-box;box-sizing:border-box;position:relative}.el-transfer-panel__body{height:246px}.el-transfer-panel__body.is-with-footer{padding-bottom:40px}.el-transfer-panel__list{margin:0;padding:6px 0;list-style:none;height:246px;overflow:auto;-webkit-box-sizing:border-box;box-sizing:border-box}.el-transfer-panel__list.is-filterable{height:194px;padding-top:0}.el-transfer-panel__item{height:30px;line-height:30px;padding-left:15px;display:block!important}.el-transfer-panel__item.el-checkbox{color:#B8B8B8}.el-transfer-panel__item:hover{color:#D71A1B}.el-transfer-panel__item.el-checkbox .el-checkbox__label{width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:24px;line-height:30px}.el-transfer-panel__item .el-checkbox__input{position:absolute;top:8px}.el-transfer-panel__filter{text-align:center;margin:15px;-webkit-box-sizing:border-box;box-sizing:border-box;display:block;width:auto}.el-transfer-panel__filter .el-input__inner{height:32px;width:100%;font-size:12px;display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:16px;padding-right:10px;padding-left:30px}.el-transfer-panel__filter .el-input__icon{margin-left:5px}.el-transfer-panel .el-transfer-panel__header{height:40px;line-height:40px;background:#171315;margin:0;padding-left:15px;border-bottom:1px solid #454545;-webkit-box-sizing:border-box;box-sizing:border-box;color:#F4F4F4}.el-transfer-panel .el-transfer-panel__header .el-checkbox{display:block;line-height:40px}.el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label{font-size:16px;color:#FFF;font-weight:400}.el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label span{position:absolute;right:15px;color:#BCBCBC;font-size:12px;font-weight:400}.el-divider__text,.el-link{font-weight:500;font-size:14px}.el-transfer-panel .el-transfer-panel__footer{height:40px;background:#232222;margin:0;padding:0;border-top:1px solid #454545;position:absolute;bottom:0;left:0;width:100%;z-index:1}.el-transfer-panel .el-transfer-panel__footer::after{display:inline-block;content:\"\";height:100%;vertical-align:middle}.el-container,.el-timeline-item__node{display:-webkit-box;display:-ms-flexbox}.el-transfer-panel .el-transfer-panel__footer .el-checkbox{padding-left:20px;color:#B8B8B8}.el-transfer-panel .el-transfer-panel__empty{margin:0;height:30px;line-height:30px;padding:6px 15px 0;color:#BCBCBC;text-align:center}.el-transfer-panel .el-checkbox__label{padding-left:8px}.el-transfer-panel .el-checkbox__inner{height:14px;width:14px;border-radius:3px}.el-transfer-panel .el-checkbox__inner::after{height:6px;width:3px;left:4px}.el-container{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,.el-drawer{-webkit-box-orient:vertical;-webkit-box-direction:normal}.el-aside,.el-header{-webkit-box-sizing:border-box}.el-container.is-vertical{-ms-flex-direction:column;flex-direction:column}.el-header{padding:0 20px;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0}.el-aside{overflow:auto;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0}.el-footer,.el-main{-webkit-box-sizing:border-box}.el-main{display:block;-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-preferred-size:auto;flex-basis:auto;overflow:auto;box-sizing:border-box;padding:20px}.el-footer{padding:0 20px;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0}.el-timeline{margin:0;font-size:14px;list-style:none}.el-timeline .el-timeline-item:last-child .el-timeline-item__tail{display:none}.el-timeline-item{position:relative;padding-bottom:20px}.el-timeline-item__wrapper{position:relative;padding-left:28px;top:-3px}.el-timeline-item__tail{position:absolute;left:4px;height:100%;border-left:2px solid #7A7A7A}.el-timeline-item__icon{color:#232222;font-size:13px}.el-timeline-item__node{position:absolute;background-color:#7A7A7A;border-radius:50%;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-image__error,.el-timeline-item__dot{display:-webkit-box;display:-ms-flexbox}.el-timeline-item__node--normal{left:-1px;width:12px;height:12px}.el-timeline-item__node--large{left:-2px;width:14px;height:14px}.el-timeline-item__node--primary{background-color:#D71A1B}.el-timeline-item__node--success{background-color:#67C23A}.el-timeline-item__node--warning{background-color:#E6A23C}.el-timeline-item__node--danger{background-color:#F56C6C}.el-timeline-item__node--info{background-color:#B8B8B8}.el-timeline-item__dot{position:absolute;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-timeline-item__content{color:#FFF}.el-timeline-item__timestamp{color:#BCBCBC;line-height:1;font-size:13px}.el-timeline-item__timestamp.is-top{margin-bottom:8px;padding-top:4px}.el-timeline-item__timestamp.is-bottom{margin-top:8px}.el-link{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;vertical-align:middle;position:relative;text-decoration:none;outline:0;padding:0}.el-link.is-underline:hover:after{content:\"\";position:absolute;left:0;right:0;height:0;bottom:0;border-bottom:1px solid #D71A1B}.el-link.el-link--default:after,.el-link.el-link--primary.is-underline:hover:after,.el-link.el-link--primary:after{border-color:#D71A1B}.el-link.is-disabled{cursor:not-allowed}.el-link [class*=el-icon-]+span{margin-left:5px}.el-link.el-link--default{color:#B8B8B8}.el-link.el-link--default:hover{color:#D71A1B}.el-link.el-link--default.is-disabled{color:#CCC}.el-link.el-link--primary{color:#D71A1B}.el-link.el-link--primary:hover{color:#b31c1c}.el-link.el-link--primary.is-disabled{color:#7d1e1f}.el-link.el-link--danger.is-underline:hover:after,.el-link.el-link--danger:after{border-color:#F56C6C}.el-link.el-link--danger{color:#F56C6C}.el-link.el-link--danger:hover{color:#cb5d5d}.el-link.el-link--danger.is-disabled{color:#8c4747}.el-link.el-link--success.is-underline:hover:after,.el-link.el-link--success:after{border-color:#67C23A}.el-link.el-link--success{color:#67C23A}.el-link.el-link--success:hover{color:#59a235}.el-link.el-link--success.is-disabled{color:#45722e}.el-link.el-link--warning.is-underline:hover:after,.el-link.el-link--warning:after{border-color:#E6A23C}.el-link.el-link--warning{color:#E6A23C}.el-link.el-link--warning:hover{color:#bf8837}.el-link.el-link--warning.is-disabled{color:#85622f}.el-link.el-link--info.is-underline:hover:after,.el-link.el-link--info:after{border-color:#B8B8B8}.el-link.el-link--info{color:#B8B8B8}.el-link.el-link--info:hover{color:#9a9a9a}.el-link.el-link--info.is-disabled{color:#6e6d6d}.el-divider{background-color:#BEBEBE;position:relative}.el-divider--horizontal{display:block;height:1px;width:100%;margin:24px 0}.el-divider--vertical{display:inline-block;width:1px;height:1em;margin:0 8px;vertical-align:middle;position:relative}.el-divider__text{position:absolute;background-color:#232222;padding:0 20px;color:#FFF}.el-image__error,.el-image__placeholder{background:#171315}.el-divider__text.is-left{left:20px;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.el-divider__text.is-center{left:50%;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.el-divider__text.is-right{right:20px;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.el-image__error,.el-image__inner,.el-image__placeholder{width:100%;height:100%}.el-image{position:relative;display:inline-block;overflow:hidden}.el-image__inner{vertical-align:top}.el-image__inner--center{position:relative;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);display:block}.el-image__error{display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:14px;color:#CCC;vertical-align:middle}.el-image__preview{cursor:pointer}.el-image-viewer__wrapper{position:fixed;top:0;right:0;bottom:0;left:0}.el-image-viewer__btn{position:absolute;z-index: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;border-radius:50%;opacity:.8;cursor:pointer;-webkit-box-sizing:border-box;box-sizing:border-box;user-select:none}.el-button,.el-checkbox{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.el-image-viewer__close{top:40px;right:40px;width:40px;height:40px;font-size:40px}.el-image-viewer__canvas{width:100%;height:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-image-viewer__actions{left:50%;bottom:30px;-webkit-transform:translateX(-50%);transform:translateX(-50%);width:282px;height:44px;padding:0 23px;background-color:#606266;border-color:#fff;border-radius:22px}.el-image-viewer__actions__inner{width:100%;height:100%;text-align:justify;cursor:default;font-size:23px;color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-pack:distribute;justify-content:space-around}.el-image-viewer__next,.el-image-viewer__prev{top:50%;width:44px;height:44px;font-size:24px;color:#fff;background-color:#606266;border-color:#fff}.el-image-viewer__prev{-webkit-transform:translateY(-50%);transform:translateY(-50%);left:40px}.el-image-viewer__next{-webkit-transform:translateY(-50%);transform:translateY(-50%);right:40px;text-indent:2px}.el-image-viewer__mask{position:absolute;width:100%;height:100%;top:0;left:0;opacity:.5;background:#000}.viewer-fade-enter-active{-webkit-animation:viewer-fade-in .3s;animation:viewer-fade-in .3s}.viewer-fade-leave-active{-webkit-animation:viewer-fade-out .3s;animation:viewer-fade-out .3s}@-webkit-keyframes viewer-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 viewer-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 viewer-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 viewer-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}}.el-button{display:inline-block;line-height:1;white-space:nowrap;cursor:pointer;background:#232222;border:1px solid #BEBEBE;color:#B8B8B8;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;-webkit-transition:.1s;transition:.1s;font-weight:500;padding:12px 20px;font-size:14px;border-radius:4px}.el-button+.el-button{margin-left:10px}.el-button:focus,.el-button:hover{color:#D71A1B;border-color:#592020;background-color:#352121}.el-button:active{color:#da3031;border-color:#da3031;outline:0}.el-button::-moz-focus-inner{border:0}.el-button [class*=el-icon-]+span{margin-left:5px}.el-button.is-plain:focus,.el-button.is-plain:hover{background:#232222;border-color:#D71A1B;color:#D71A1B}.el-button.is-active,.el-button.is-plain:active{color:#da3031;border-color:#da3031}.el-button.is-plain:active{background:#232222;outline:0}.el-button.is-disabled,.el-button.is-disabled:focus,.el-button.is-disabled:hover{color:#CCC;cursor:not-allowed;background-image:none;background-color:#232222;border-color:#454545}.el-button.is-disabled.el-button--text{background-color:transparent}.el-button.is-disabled.is-plain,.el-button.is-disabled.is-plain:focus,.el-button.is-disabled.is-plain:hover{background-color:#232222;border-color:#454545;color:#CCC}.el-button.is-loading{position:relative;pointer-events:none}.el-button.is-loading:before{pointer-events:none;content:'';position:absolute;left:-1px;top:-1px;right:-1px;bottom:-1px;border-radius:inherit;background-color:rgba(255,255,255,.35)}.el-button.is-round{border-radius:20px;padding:12px 23px}.el-button.is-circle{border-radius:50%;padding:12px}.el-button--primary{color:#232222;background-color:#D71A1B;border-color:#D71A1B}.el-button--primary:focus,.el-button--primary:hover{background:#b31c1c;border-color:#b31c1c;color:#232222}.el-button--primary.is-active,.el-button--primary:active{background:#da3031;border-color:#da3031;color:#232222}.el-button--primary:active{outline:0}.el-button--primary.is-disabled,.el-button--primary.is-disabled:active,.el-button--primary.is-disabled:focus,.el-button--primary.is-disabled:hover{color:#232222;background-color:#7d1e1f;border-color:#7d1e1f}.el-button--primary.is-plain{color:#D71A1B;background:#352121;border-color:#6b1f1f}.el-button--primary.is-plain:focus,.el-button--primary.is-plain:hover{background:#D71A1B;border-color:#D71A1B;color:#232222}.el-button--primary.is-plain:active{background:#da3031;border-color:#da3031;color:#232222;outline:0}.el-button--primary.is-plain.is-disabled,.el-button--primary.is-plain.is-disabled:active,.el-button--primary.is-plain.is-disabled:focus,.el-button--primary.is-plain.is-disabled:hover{color:#8f1d1e;background-color:#352121;border-color:#472021}.el-button--success{color:#232222;background-color:#67C23A;border-color:#67C23A}.el-button--success:focus,.el-button--success:hover{background:#59a235;border-color:#59a235;color:#232222}.el-button--success.is-active,.el-button--success:active{background:#75c74d;border-color:#75c74d;color:#232222}.el-button--success:active{outline:0}.el-button--success.is-disabled,.el-button--success.is-disabled:active,.el-button--success.is-disabled:focus,.el-button--success.is-disabled:hover{color:#232222;background-color:#45722e;border-color:#45722e}.el-button--success.is-plain{color:#67C23A;background:#2a3224;border-color:#3e622c}.el-button--success.is-plain:focus,.el-button--success.is-plain:hover{background:#67C23A;border-color:#67C23A;color:#232222}.el-button--success.is-plain:active{background:#75c74d;border-color:#75c74d;color:#232222;outline:0}.el-button--success.is-plain.is-disabled,.el-button--success.is-plain.is-disabled:active,.el-button--success.is-plain.is-disabled:focus,.el-button--success.is-plain.is-disabled:hover{color:#4c8230;background-color:#2a3224;border-color:#314227}.el-button--warning{color:#232222;background-color:#E6A23C;border-color:#E6A23C}.el-button--warning:focus,.el-button--warning:hover{background:#bf8837;border-color:#bf8837;color:#232222}.el-button--warning.is-active,.el-button--warning:active{background:#e7aa4e;border-color:#e7aa4e;color:#232222}.el-button--warning:active{outline:0}.el-button--warning.is-disabled,.el-button--warning.is-disabled:active,.el-button--warning.is-disabled:focus,.el-button--warning.is-disabled:hover{color:#232222;background-color:#85622f;border-color:#85622f}.el-button--warning.is-plain{color:#E6A23C;background:#372f25;border-color:#71552c}.el-button--warning.is-plain:focus,.el-button--warning.is-plain:hover{background:#E6A23C;border-color:#E6A23C;color:#232222}.el-button--warning.is-plain:active{background:#e7aa4e;border-color:#e7aa4e;color:#232222;outline:0}.el-button--warning.is-plain.is-disabled,.el-button--warning.is-plain.is-disabled:active,.el-button--warning.is-plain.is-disabled:focus,.el-button--warning.is-plain.is-disabled:hover{color:#986f32;background-color:#372f25;border-color:#4a3c27}.el-button--danger{color:#232222;background-color:#F56C6C;border-color:#F56C6C}.el-button--danger:focus,.el-button--danger:hover{background:#cb5d5d;border-color:#cb5d5d;color:#232222}.el-button--danger.is-active,.el-button--danger:active{background:#f57a7a;border-color:#f57a7a;color:#232222}.el-button--danger:active{outline:0}.el-button--danger.is-disabled,.el-button--danger.is-disabled:active,.el-button--danger.is-disabled:focus,.el-button--danger.is-disabled:hover{color:#232222;background-color:#8c4747;border-color:#8c4747}.el-button--danger.is-plain{color:#F56C6C;background:#382929;border-color:#774040}.el-button--danger.is-plain:focus,.el-button--danger.is-plain:hover{background:#F56C6C;border-color:#F56C6C;color:#232222}.el-button--danger.is-plain:active{background:#f57a7a;border-color:#f57a7a;color:#232222;outline:0}.el-button--danger.is-plain.is-disabled,.el-button--danger.is-plain.is-disabled:active,.el-button--danger.is-plain.is-disabled:focus,.el-button--danger.is-plain.is-disabled:hover{color:#a14e4e;background-color:#382929;border-color:#4d3131}.el-button--info{color:#232222;background-color:#B8B8B8;border-color:#B8B8B8}.el-button--info:focus,.el-button--info:hover{background:#9a9a9a;border-color:#9a9a9a;color:#232222}.el-button--info.is-active,.el-button--info:active{background:#bebebe;border-color:#bebebe;color:#232222}.el-button--info:active{outline:0}.el-button--info.is-disabled,.el-button--info.is-disabled:active,.el-button--info.is-disabled:focus,.el-button--info.is-disabled:hover{color:#232222;background-color:#6e6d6d;border-color:#6e6d6d}.el-button--info.is-plain{color:#B8B8B8;background:#323131;border-color:#5f5e5e}.el-button--info.is-plain:focus,.el-button--info.is-plain:hover{background:#B8B8B8;border-color:#B8B8B8;color:#232222}.el-button--info.is-plain:active{background:#bebebe;border-color:#bebebe;color:#232222;outline:0}.el-button--info.is-plain.is-disabled,.el-button--info.is-plain.is-disabled:active,.el-button--info.is-plain.is-disabled:focus,.el-button--info.is-plain.is-disabled:hover{color:#7c7c7c;background-color:#323131;border-color:#414040}.el-button--text,.el-button--text.is-disabled,.el-button--text.is-disabled:focus,.el-button--text.is-disabled:hover,.el-button--text:active{border-color:transparent}.el-button--medium{padding:10px 20px;font-size:14px;border-radius:4px}.el-button--mini,.el-button--small{font-size:12px;border-radius:3px}.el-button--medium.is-round{padding:10px 20px}.el-button--medium.is-circle{padding:10px}.el-button--small,.el-button--small.is-round{padding:9px 15px}.el-button--small.is-circle{padding:9px}.el-button--mini,.el-button--mini.is-round{padding:7px 15px}.el-button--mini.is-circle{padding:7px}.el-button--text{color:#D71A1B;background:0 0;padding-left:0;padding-right:0}.el-button--text:focus,.el-button--text:hover{color:#b31c1c;border-color:transparent;background-color:transparent}.el-button--text:active{color:#da3031;background-color:transparent}.el-button-group{display:inline-block;vertical-align:middle}.el-button-group::after,.el-button-group::before{display:table;content:\"\"}.el-button-group::after{clear:both}.el-button-group>.el-button{float:left;position:relative}.el-button-group>.el-button+.el-button{margin-left:0}.el-button-group>.el-button.is-disabled{z-index:1}.el-button-group>.el-button:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.el-button-group>.el-button:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.el-button-group>.el-button:first-child:last-child{border-radius:4px}.el-button-group>.el-button:first-child:last-child.is-round{border-radius:20px}.el-button-group>.el-button:first-child:last-child.is-circle{border-radius:50%}.el-button-group>.el-button:not(:first-child):not(:last-child){border-radius:0}.el-button-group>.el-button:not(:last-child){margin-right:-1px}.el-button-group>.el-button.is-active,.el-button-group>.el-button:active,.el-button-group>.el-button:focus,.el-button-group>.el-button:hover{z-index:1}.el-button-group>.el-dropdown>.el-button{border-top-left-radius:0;border-bottom-left-radius:0;border-left-color:rgba(35,34,34,.5)}.el-button-group .el-button--primary:first-child{border-right-color:rgba(35,34,34,.5)}.el-button-group .el-button--primary:last-child{border-left-color:rgba(35,34,34,.5)}.el-button-group .el-button--primary:not(:first-child):not(:last-child){border-left-color:rgba(35,34,34,.5);border-right-color:rgba(35,34,34,.5)}.el-button-group .el-button--success:first-child{border-right-color:rgba(35,34,34,.5)}.el-button-group .el-button--success:last-child{border-left-color:rgba(35,34,34,.5)}.el-button-group .el-button--success:not(:first-child):not(:last-child){border-left-color:rgba(35,34,34,.5);border-right-color:rgba(35,34,34,.5)}.el-button-group .el-button--warning:first-child{border-right-color:rgba(35,34,34,.5)}.el-button-group .el-button--warning:last-child{border-left-color:rgba(35,34,34,.5)}.el-button-group .el-button--warning:not(:first-child):not(:last-child){border-left-color:rgba(35,34,34,.5);border-right-color:rgba(35,34,34,.5)}.el-button-group .el-button--danger:first-child{border-right-color:rgba(35,34,34,.5)}.el-button-group .el-button--danger:last-child{border-left-color:rgba(35,34,34,.5)}.el-button-group .el-button--danger:not(:first-child):not(:last-child){border-left-color:rgba(35,34,34,.5);border-right-color:rgba(35,34,34,.5)}.el-button-group .el-button--info:first-child{border-right-color:rgba(35,34,34,.5)}.el-button-group .el-button--info:last-child{border-left-color:rgba(35,34,34,.5)}.el-button-group .el-button--info:not(:first-child):not(:last-child){border-left-color:rgba(35,34,34,.5);border-right-color:rgba(35,34,34,.5)}.el-calendar{background-color:#fff}.el-calendar__header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:12px 20px;border-bottom:1px solid #454545}.el-backtop,.el-page-header{display:-webkit-box;display:-ms-flexbox}.el-calendar__title{color:#000;-ms-flex-item-align:center;align-self:center}.el-calendar__body{padding:12px 20px 35px}.el-calendar-table{table-layout:fixed;width:100%}.el-calendar-table thead th{padding:12px 0;color:#B8B8B8;font-weight:400}.el-calendar-table:not(.is-range) td.next,.el-calendar-table:not(.is-range) td.prev{color:#CCC}.el-backtop,.el-calendar-table td.is-today{color:#D71A1B}.el-calendar-table td{border-bottom:1px solid #454545;border-right:1px solid #454545;vertical-align:top;-webkit-transition:background-color .2s ease;transition:background-color .2s ease}.el-calendar-table td.is-selected{background-color:#F2F8FE}.el-calendar-table tr:first-child td{border-top:1px solid #454545}.el-calendar-table tr td:first-child{border-left:1px solid #454545}.el-calendar-table tr.el-calendar-table__row--hide-border td{border-top:none}.el-calendar-table .el-calendar-day{-webkit-box-sizing:border-box;box-sizing:border-box;padding:8px;height:85px}.el-calendar-table .el-calendar-day:hover{cursor:pointer;background-color:#F2F8FE}.el-backtop{position:fixed;background-color:#232222;width:40px;height:40px;border-radius:50%;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;font-size:20px;-webkit-box-shadow:0 0 6px rgba(0,0,0,.12);box-shadow:0 0 6px rgba(0,0,0,.12);cursor:pointer;z-index:5}.el-backtop:hover{background-color:#171514}.el-page-header{display:flex;line-height:24px}.el-page-header__left{display:-webkit-box;display:-ms-flexbox;display:flex;cursor:pointer;margin-right:40px;position:relative}.el-page-header__left::after{content:\"\";position:absolute;width:1px;height:16px;right:-20px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);background-color:#BEBEBE}.el-checkbox,.el-checkbox__input{display:inline-block;position:relative;white-space:nowrap}.el-page-header__left .el-icon-back{font-size:18px;margin-right:6px;-ms-flex-item-align:center;align-self:center}.el-page-header__title{font-size:14px;font-weight:500}.el-page-header__content{font-size:18px;color:#FFF}.el-checkbox{color:#B8B8B8;font-weight:500;font-size:14px;cursor:pointer;user-select:none;margin-right:30px}.el-checkbox-button__inner,.el-radio{font-weight:500;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.el-checkbox.is-bordered{padding:9px 20px 9px 10px;border-radius:4px;border:1px solid #BEBEBE;-webkit-box-sizing:border-box;box-sizing:border-box;line-height:normal;height:40px}.el-checkbox.is-bordered.is-checked{border-color:#D71A1B}.el-checkbox.is-bordered.is-disabled{border-color:#454545;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;outline:0;line-height:1;vertical-align:middle}.el-checkbox__input.is-disabled .el-checkbox__inner{background-color:#edf2fc;border-color:#BEBEBE;cursor:not-allowed}.el-checkbox__input.is-disabled .el-checkbox__inner::after{cursor:not-allowed;border-color:#CCC}.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:#171514;border-color:#BEBEBE}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after{border-color:#CCC}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner{background-color:#171514;border-color:#BEBEBE}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner::before{background-color:#CCC;border-color:#CCC}.el-checkbox__input.is-checked .el-checkbox__inner,.el-checkbox__input.is-indeterminate .el-checkbox__inner{background-color:#D71A1B;border-color:#D71A1B}.el-checkbox__input.is-disabled+span.el-checkbox__label{color:#CCC;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:#D71A1B}.el-checkbox__input.is-focus .el-checkbox__inner{border-color:#D71A1B}.el-checkbox__input.is-indeterminate .el-checkbox__inner::before{content:'';position:absolute;display:block;background-color:#232222;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 #BEBEBE;border-radius:2px;-webkit-box-sizing:border-box;box-sizing:border-box;width:14px;height:14px;background-color:#232222;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:#D71A1B}.el-checkbox__inner::after{-webkit-box-sizing:content-box;box-sizing:content-box;content:\"\";border:1px solid #232222;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 ease-in .05s;transition:-webkit-transform .15s ease-in .05s;transition:transform .15s ease-in .05s;transition:transform .15s ease-in .05s,-webkit-transform .15s ease-in .05s;-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:last-of-type{margin-right:0}.el-checkbox-button__inner{line-height:1;white-space:nowrap;vertical-align:middle;cursor:pointer;background:#232222;border:1px solid #BEBEBE;border-left:0;color:#B8B8B8;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;-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-checkbox-button__inner.is-round{padding:12px 20px}.el-checkbox-button__inner:hover{color:#D71A1B}.el-checkbox-button__inner [class*=el-icon-]{line-height:.9}.el-radio,.el-radio__input{line-height:1;outline:0;white-space:nowrap}.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-radio,.el-radio__inner,.el-radio__input{position:relative;display:inline-block}.el-checkbox-button.is-checked .el-checkbox-button__inner{color:#232222;background-color:#D71A1B;border-color:#D71A1B;-webkit-box-shadow:-1px 0 0 0 #8f1d1e;box-shadow:-1px 0 0 0 #8f1d1e}.el-checkbox-button.is-checked:first-child .el-checkbox-button__inner{border-left-color:#D71A1B}.el-checkbox-button.is-disabled .el-checkbox-button__inner{color:#CCC;cursor:not-allowed;background-image:none;background-color:#232222;border-color:#454545;-webkit-box-shadow:none;box-shadow:none}.el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner{border-left-color:#454545}.el-checkbox-button:first-child .el-checkbox-button__inner{border-left:1px solid #BEBEBE;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:#D71A1B}.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}.el-radio,.el-radio--medium.is-bordered .el-radio__label{font-size:14px}.el-radio{color:#B8B8B8;cursor:pointer;margin-right:30px}.el-cascader-node>.el-radio,.el-radio:last-child{margin-right:0}.el-radio.is-bordered{padding:12px 20px 0 10px;border-radius:4px;border:1px solid #BEBEBE;-webkit-box-sizing:border-box;box-sizing:border-box;height:40px}.el-radio.is-bordered.is-checked{border-color:#D71A1B}.el-radio.is-bordered.is-disabled{cursor:not-allowed;border-color:#454545}.el-radio__input.is-disabled .el-radio__inner,.el-radio__input.is-disabled.is-checked .el-radio__inner{background-color:#171315;border-color:#7A7A7A}.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__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:#171315}.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:#CCC}.el-radio__input.is-disabled+span.el-radio__label{color:#CCC;cursor:not-allowed}.el-radio__input.is-checked .el-radio__inner{border-color:#D71A1B;background:#D71A1B}.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:#D71A1B}.el-radio__input.is-focus .el-radio__inner{border-color:#D71A1B}.el-radio__inner{border:1px solid #BEBEBE;border-radius:100%;width:14px;height:14px;background-color:#232222;cursor:pointer;-webkit-box-sizing:border-box;box-sizing:border-box}.el-radio__inner:hover{border-color:#D71A1B}.el-radio__inner::after{width:4px;height:4px;border-radius:100%;background-color:#232222;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 ease-in;transition:-webkit-transform .15s ease-in;transition:transform .15s ease-in;transition:transform .15s ease-in,-webkit-transform .15s ease-in}.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):not(.is-disabled) .el-radio__inner{-webkit-box-shadow:0 0 2px 2px #D71A1B;box-shadow:0 0 2px 2px #D71A1B}.el-radio__label{font-size:14px;padding-left:10px}.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{scrollbar-width:none}.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(188,188,188,.3);-webkit-transition:.3s background-color;transition:.3s background-color}.el-scrollbar__thumb:hover{background-color:rgba(188,188,188,.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%}.el-cascader-panel{display:-webkit-box;display:-ms-flexbox;display:flex;border-radius:4px;font-size:14px}.el-cascader-panel.is-bordered{border:1px solid #7A7A7A;border-radius:4px}.el-cascader-menu{min-width:180px;-webkit-box-sizing:border-box;box-sizing:border-box;color:#B8B8B8;border-right:solid 1px #7A7A7A}.el-cascader-menu:last-child{border-right:none}.el-cascader-menu:last-child .el-cascader-node{padding-right:20px}.el-cascader-menu__wrap{height:204px}.el-cascader-menu__list{position:relative;min-height:100%;margin:0;padding:6px 0;list-style:none;-webkit-box-sizing:border-box;box-sizing:border-box}.el-avatar,.el-drawer{-webkit-box-sizing:border-box;overflow:hidden}.el-cascader-menu__hover-zone{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.el-cascader-menu__empty-text{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);text-align:center;color:#CCC}.el-cascader-node{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:0 30px 0 20px;height:34px;line-height:34px;outline:0}.el-cascader-node.is-selectable.in-active-path{color:#B8B8B8}.el-cascader-node.in-active-path,.el-cascader-node.is-active,.el-cascader-node.is-selectable.in-checked-path{color:#D71A1B;font-weight:700}.el-cascader-node:not(.is-disabled){cursor:pointer}.el-cascader-node:not(.is-disabled):focus,.el-cascader-node:not(.is-disabled):hover{background:#171315}.el-cascader-node.is-disabled{color:#CCC;cursor:not-allowed}.el-cascader-node__prefix{position:absolute;left:10px}.el-cascader-node__postfix{position:absolute;right:10px}.el-cascader-node__label{-webkit-box-flex:1;-ms-flex:1;flex:1;padding:0 10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.el-cascader-node>.el-radio .el-radio__label{padding-left:0}.el-avatar{display:inline-block;box-sizing:border-box;text-align:center;color:#fff;background:#C0C4CC;width:40px;height:40px;line-height:40px;font-size:14px}.el-avatar>img{display:block;height:100%;vertical-align:middle}.el-drawer,.el-drawer__header{display:-webkit-box;display:-ms-flexbox}.el-avatar--circle{border-radius:50%}.el-avatar--square{border-radius:4px}.el-avatar--icon{font-size:18px}.el-avatar--large{width:40px;height:40px;line-height:40px}.el-avatar--medium{width:36px;height:36px;line-height:36px}.el-avatar--small{width:28px;height:28px;line-height:28px}.el-drawer.btt,.el-drawer.ttb,.el-drawer__container{left:0;right:0;width:100%}.el-drawer.ltr,.el-drawer.rtl,.el-drawer__container{top:0;bottom:0;height:100%}@-webkit-keyframes el-drawer-fade-in{0%{opacity:0}100%{opacity:1}}@keyframes el-drawer-fade-in{0%{opacity:0}100%{opacity:1}}@-webkit-keyframes rtl-drawer-in{0%{-webkit-transform:translate(100%,0);transform:translate(100%,0)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@keyframes rtl-drawer-in{0%{-webkit-transform:translate(100%,0);transform:translate(100%,0)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@-webkit-keyframes rtl-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(100%,0);transform:translate(100%,0)}}@keyframes rtl-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(100%,0);transform:translate(100%,0)}}@-webkit-keyframes ltr-drawer-in{0%{-webkit-transform:translate(-100%,0);transform:translate(-100%,0)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@keyframes ltr-drawer-in{0%{-webkit-transform:translate(-100%,0);transform:translate(-100%,0)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@-webkit-keyframes ltr-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(-100%,0);transform:translate(-100%,0)}}@keyframes ltr-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(-100%,0);transform:translate(-100%,0)}}@-webkit-keyframes ttb-drawer-in{0%{-webkit-transform:translate(0,-100%);transform:translate(0,-100%)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@keyframes ttb-drawer-in{0%{-webkit-transform:translate(0,-100%);transform:translate(0,-100%)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@-webkit-keyframes ttb-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(0,-100%);transform:translate(0,-100%)}}@keyframes ttb-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(0,-100%);transform:translate(0,-100%)}}@-webkit-keyframes btt-drawer-in{0%{-webkit-transform:translate(0,100%);transform:translate(0,100%)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@keyframes btt-drawer-in{0%{-webkit-transform:translate(0,100%);transform:translate(0,100%)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@-webkit-keyframes btt-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(0,100%);transform:translate(0,100%)}}@keyframes btt-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(0,100%);transform:translate(0,100%)}}.el-drawer{position:absolute;box-sizing:border-box;background-color:#232222;display:flex;-ms-flex-direction:column;flex-direction:column;-webkit-box-shadow:0 8px 10px -5px rgba(0,0,0,.2),0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12);box-shadow:0 8px 10px -5px rgba(0,0,0,.2),0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12)}.el-drawer.rtl{-webkit-animation:rtl-drawer-out .3s;animation:rtl-drawer-out .3s;right:0}.el-drawer__open .el-drawer.rtl{-webkit-animation:rtl-drawer-in .3s 1ms;animation:rtl-drawer-in .3s 1ms}.el-drawer.ltr{-webkit-animation:ltr-drawer-out .3s;animation:ltr-drawer-out .3s;left:0}.el-drawer__open .el-drawer.ltr{-webkit-animation:ltr-drawer-in .3s 1ms;animation:ltr-drawer-in .3s 1ms}.el-drawer.ttb{-webkit-animation:ttb-drawer-out .3s;animation:ttb-drawer-out .3s;top:0}.el-drawer__open .el-drawer.ttb{-webkit-animation:ttb-drawer-in .3s 1ms;animation:ttb-drawer-in .3s 1ms}.el-drawer.btt{-webkit-animation:btt-drawer-out .3s;animation:btt-drawer-out .3s;bottom:0}.el-drawer__open .el-drawer.btt{-webkit-animation:btt-drawer-in .3s 1ms;animation:btt-drawer-in .3s 1ms}.el-drawer__wrapper{position:fixed;top:0;right:0;bottom:0;left:0;overflow:hidden;margin:0}.el-drawer__header{-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#72767b;display:flex;margin-bottom:32px;padding:20px 20px 0}.el-drawer__header>:first-child{-webkit-box-flex:1;-ms-flex:1;flex:1}.el-drawer__title{margin:0;-webkit-box-flex:1;-ms-flex:1;flex:1;line-height:inherit;font-size:1rem}.el-drawer__close-btn{border:none;cursor:pointer;font-size:20px;color:inherit;background-color:transparent}.el-drawer__body{-webkit-box-flex:1;-ms-flex:1;flex:1}.el-drawer__body>*{-webkit-box-sizing:border-box;box-sizing:border-box}.el-drawer__container{position:relative}.el-drawer-fade-enter-active{-webkit-animation:el-drawer-fade-in .3s;animation:el-drawer-fade-in .3s}.el-drawer-fade-leave-active{animation:el-drawer-fade-in .3s reverse}.el-popconfirm__main{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-popconfirm__icon{margin-right:5px}.el-popconfirm__action{text-align:right;margin:0}"
  },
  {
    "path": "docs/.vuepress/public/style/theme/dist/dark.css",
    "content": "@charset \"UTF-8\";.dark-mode .el-pagination--small .arrow.disabled,.dark-mode .el-table .hidden-columns,.dark-mode .el-table td.is-hidden>*,.dark-mode .el-table th.is-hidden>*,.dark-mode .el-table--hidden{visibility:hidden}.dark-mode .el-input__suffix,.dark-mode .el-tree.is-dragging .el-tree-node__content *{pointer-events:none}.dark-mode .el-dropdown .el-dropdown-selfdefine:focus:active,.dark-mode .el-dropdown .el-dropdown-selfdefine:focus:not(.focusing),.dark-mode .el-message__closeBtn:focus,.dark-mode .el-message__content:focus,.dark-mode .el-popover:focus,.dark-mode .el-popover:focus:active,.dark-mode .el-popover__reference:focus:hover,.dark-mode .el-popover__reference:focus:not(.focusing),.dark-mode .el-rate:active,.dark-mode .el-rate:focus,.dark-mode .el-tooltip:focus:hover,.dark-mode .el-tooltip:focus:not(.focusing),.dark-mode .el-upload-list__item.is-success:active,.dark-mode .el-upload-list__item.is-success:not(.focusing):focus{outline-width:0}@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-display:auto;font-style:normal}.dark-mode [class*=\" el-icon-\"],.dark-mode [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}.dark-mode .el-icon-ice-cream-round:before{content:\"\\e6a0\"}.dark-mode .el-icon-ice-cream-square:before{content:\"\\e6a3\"}.dark-mode .el-icon-lollipop:before{content:\"\\e6a4\"}.dark-mode .el-icon-potato-strips:before{content:\"\\e6a5\"}.dark-mode .el-icon-milk-tea:before{content:\"\\e6a6\"}.dark-mode .el-icon-ice-drink:before{content:\"\\e6a7\"}.dark-mode .el-icon-ice-tea:before{content:\"\\e6a9\"}.dark-mode .el-icon-coffee:before{content:\"\\e6aa\"}.dark-mode .el-icon-orange:before{content:\"\\e6ab\"}.dark-mode .el-icon-pear:before{content:\"\\e6ac\"}.dark-mode .el-icon-apple:before{content:\"\\e6ad\"}.dark-mode .el-icon-cherry:before{content:\"\\e6ae\"}.dark-mode .el-icon-watermelon:before{content:\"\\e6af\"}.dark-mode .el-icon-grape:before{content:\"\\e6b0\"}.dark-mode .el-icon-refrigerator:before{content:\"\\e6b1\"}.dark-mode .el-icon-goblet-square-full:before{content:\"\\e6b2\"}.dark-mode .el-icon-goblet-square:before{content:\"\\e6b3\"}.dark-mode .el-icon-goblet-full:before{content:\"\\e6b4\"}.dark-mode .el-icon-goblet:before{content:\"\\e6b5\"}.dark-mode .el-icon-cold-drink:before{content:\"\\e6b6\"}.dark-mode .el-icon-coffee-cup:before{content:\"\\e6b8\"}.dark-mode .el-icon-water-cup:before{content:\"\\e6b9\"}.dark-mode .el-icon-hot-water:before{content:\"\\e6ba\"}.dark-mode .el-icon-ice-cream:before{content:\"\\e6bb\"}.dark-mode .el-icon-dessert:before{content:\"\\e6bc\"}.dark-mode .el-icon-sugar:before{content:\"\\e6bd\"}.dark-mode .el-icon-tableware:before{content:\"\\e6be\"}.dark-mode .el-icon-burger:before{content:\"\\e6bf\"}.dark-mode .el-icon-knife-fork:before{content:\"\\e6c1\"}.dark-mode .el-icon-fork-spoon:before{content:\"\\e6c2\"}.dark-mode .el-icon-chicken:before{content:\"\\e6c3\"}.dark-mode .el-icon-food:before{content:\"\\e6c4\"}.dark-mode .el-icon-dish-1:before{content:\"\\e6c5\"}.dark-mode .el-icon-dish:before{content:\"\\e6c6\"}.dark-mode .el-icon-moon-night:before{content:\"\\e6ee\"}.dark-mode .el-icon-moon:before{content:\"\\e6f0\"}.dark-mode .el-icon-cloudy-and-sunny:before{content:\"\\e6f1\"}.dark-mode .el-icon-partly-cloudy:before{content:\"\\e6f2\"}.dark-mode .el-icon-cloudy:before{content:\"\\e6f3\"}.dark-mode .el-icon-sunny:before{content:\"\\e6f6\"}.dark-mode .el-icon-sunset:before{content:\"\\e6f7\"}.dark-mode .el-icon-sunrise-1:before{content:\"\\e6f8\"}.dark-mode .el-icon-sunrise:before{content:\"\\e6f9\"}.dark-mode .el-icon-heavy-rain:before{content:\"\\e6fa\"}.dark-mode .el-icon-lightning:before{content:\"\\e6fb\"}.dark-mode .el-icon-light-rain:before{content:\"\\e6fc\"}.dark-mode .el-icon-wind-power:before{content:\"\\e6fd\"}.dark-mode .el-icon-baseball:before{content:\"\\e712\"}.dark-mode .el-icon-soccer:before{content:\"\\e713\"}.dark-mode .el-icon-football:before{content:\"\\e715\"}.dark-mode .el-icon-basketball:before{content:\"\\e716\"}.dark-mode .el-icon-ship:before{content:\"\\e73f\"}.dark-mode .el-icon-truck:before{content:\"\\e740\"}.dark-mode .el-icon-bicycle:before{content:\"\\e741\"}.dark-mode .el-icon-mobile-phone:before{content:\"\\e6d3\"}.dark-mode .el-icon-service:before{content:\"\\e6d4\"}.dark-mode .el-icon-key:before{content:\"\\e6e2\"}.dark-mode .el-icon-unlock:before{content:\"\\e6e4\"}.dark-mode .el-icon-lock:before{content:\"\\e6e5\"}.dark-mode .el-icon-watch:before{content:\"\\e6fe\"}.dark-mode .el-icon-watch-1:before{content:\"\\e6ff\"}.dark-mode .el-icon-timer:before{content:\"\\e702\"}.dark-mode .el-icon-alarm-clock:before{content:\"\\e703\"}.dark-mode .el-icon-map-location:before{content:\"\\e704\"}.dark-mode .el-icon-delete-location:before{content:\"\\e705\"}.dark-mode .el-icon-add-location:before{content:\"\\e706\"}.dark-mode .el-icon-location-information:before{content:\"\\e707\"}.dark-mode .el-icon-location-outline:before{content:\"\\e708\"}.dark-mode .el-icon-location:before{content:\"\\e79e\"}.dark-mode .el-icon-place:before{content:\"\\e709\"}.dark-mode .el-icon-discover:before{content:\"\\e70a\"}.dark-mode .el-icon-first-aid-kit:before{content:\"\\e70b\"}.dark-mode .el-icon-trophy-1:before{content:\"\\e70c\"}.dark-mode .el-icon-trophy:before{content:\"\\e70d\"}.dark-mode .el-icon-medal:before{content:\"\\e70e\"}.dark-mode .el-icon-medal-1:before{content:\"\\e70f\"}.dark-mode .el-icon-stopwatch:before{content:\"\\e710\"}.dark-mode .el-icon-mic:before{content:\"\\e711\"}.dark-mode .el-icon-copy-document:before{content:\"\\e718\"}.dark-mode .el-icon-full-screen:before{content:\"\\e719\"}.dark-mode .el-icon-switch-button:before{content:\"\\e71b\"}.dark-mode .el-icon-aim:before{content:\"\\e71c\"}.dark-mode .el-icon-crop:before{content:\"\\e71d\"}.dark-mode .el-icon-odometer:before{content:\"\\e71e\"}.dark-mode .el-icon-time:before{content:\"\\e71f\"}.dark-mode .el-icon-bangzhu:before{content:\"\\e724\"}.dark-mode .el-icon-close-notification:before{content:\"\\e726\"}.dark-mode .el-icon-microphone:before{content:\"\\e727\"}.dark-mode .el-icon-turn-off-microphone:before{content:\"\\e728\"}.dark-mode .el-icon-position:before{content:\"\\e729\"}.dark-mode .el-icon-postcard:before{content:\"\\e72a\"}.dark-mode .el-icon-message:before{content:\"\\e72b\"}.dark-mode .el-icon-chat-line-square:before{content:\"\\e72d\"}.dark-mode .el-icon-chat-dot-square:before{content:\"\\e72e\"}.dark-mode .el-icon-chat-dot-round:before{content:\"\\e72f\"}.dark-mode .el-icon-chat-square:before{content:\"\\e730\"}.dark-mode .el-icon-chat-line-round:before{content:\"\\e731\"}.dark-mode .el-icon-chat-round:before{content:\"\\e732\"}.dark-mode .el-icon-set-up:before{content:\"\\e733\"}.dark-mode .el-icon-turn-off:before{content:\"\\e734\"}.dark-mode .el-icon-open:before{content:\"\\e735\"}.dark-mode .el-icon-connection:before{content:\"\\e736\"}.dark-mode .el-icon-link:before{content:\"\\e737\"}.dark-mode .el-icon-cpu:before{content:\"\\e738\"}.dark-mode .el-icon-thumb:before{content:\"\\e739\"}.dark-mode .el-icon-female:before{content:\"\\e73a\"}.dark-mode .el-icon-male:before{content:\"\\e73b\"}.dark-mode .el-icon-guide:before{content:\"\\e73c\"}.dark-mode .el-icon-news:before{content:\"\\e73e\"}.dark-mode .el-icon-price-tag:before{content:\"\\e744\"}.dark-mode .el-icon-discount:before{content:\"\\e745\"}.dark-mode .el-icon-wallet:before{content:\"\\e747\"}.dark-mode .el-icon-coin:before{content:\"\\e748\"}.dark-mode .el-icon-money:before{content:\"\\e749\"}.dark-mode .el-icon-bank-card:before{content:\"\\e74a\"}.dark-mode .el-icon-box:before{content:\"\\e74b\"}.dark-mode .el-icon-present:before{content:\"\\e74c\"}.dark-mode .el-icon-sell:before{content:\"\\e6d5\"}.dark-mode .el-icon-sold-out:before{content:\"\\e6d6\"}.dark-mode .el-icon-shopping-bag-2:before{content:\"\\e74d\"}.dark-mode .el-icon-shopping-bag-1:before{content:\"\\e74e\"}.dark-mode .el-icon-shopping-cart-2:before{content:\"\\e74f\"}.dark-mode .el-icon-shopping-cart-1:before{content:\"\\e750\"}.dark-mode .el-icon-shopping-cart-full:before{content:\"\\e751\"}.dark-mode .el-icon-smoking:before{content:\"\\e752\"}.dark-mode .el-icon-no-smoking:before{content:\"\\e753\"}.dark-mode .el-icon-house:before{content:\"\\e754\"}.dark-mode .el-icon-table-lamp:before{content:\"\\e755\"}.dark-mode .el-icon-school:before{content:\"\\e756\"}.dark-mode .el-icon-office-building:before{content:\"\\e757\"}.dark-mode .el-icon-toilet-paper:before{content:\"\\e758\"}.dark-mode .el-icon-notebook-2:before{content:\"\\e759\"}.dark-mode .el-icon-notebook-1:before{content:\"\\e75a\"}.dark-mode .el-icon-files:before{content:\"\\e75b\"}.dark-mode .el-icon-collection:before{content:\"\\e75c\"}.dark-mode .el-icon-receiving:before{content:\"\\e75d\"}.dark-mode .el-icon-suitcase-1:before{content:\"\\e760\"}.dark-mode .el-icon-suitcase:before{content:\"\\e761\"}.dark-mode .el-icon-film:before{content:\"\\e763\"}.dark-mode .el-icon-collection-tag:before{content:\"\\e765\"}.dark-mode .el-icon-data-analysis:before{content:\"\\e766\"}.dark-mode .el-icon-pie-chart:before{content:\"\\e767\"}.dark-mode .el-icon-data-board:before{content:\"\\e768\"}.dark-mode .el-icon-data-line:before{content:\"\\e76d\"}.dark-mode .el-icon-reading:before{content:\"\\e769\"}.dark-mode .el-icon-magic-stick:before{content:\"\\e76a\"}.dark-mode .el-icon-coordinate:before{content:\"\\e76b\"}.dark-mode .el-icon-mouse:before{content:\"\\e76c\"}.dark-mode .el-icon-brush:before{content:\"\\e76e\"}.dark-mode .el-icon-headset:before{content:\"\\e76f\"}.dark-mode .el-icon-umbrella:before{content:\"\\e770\"}.dark-mode .el-icon-scissors:before{content:\"\\e771\"}.dark-mode .el-icon-mobile:before{content:\"\\e773\"}.dark-mode .el-icon-attract:before{content:\"\\e774\"}.dark-mode .el-icon-monitor:before{content:\"\\e775\"}.dark-mode .el-icon-search:before{content:\"\\e778\"}.dark-mode .el-icon-takeaway-box:before{content:\"\\e77a\"}.dark-mode .el-icon-paperclip:before{content:\"\\e77d\"}.dark-mode .el-icon-printer:before{content:\"\\e77e\"}.dark-mode .el-icon-document-add:before{content:\"\\e782\"}.dark-mode .el-icon-document:before{content:\"\\e785\"}.dark-mode .el-icon-document-checked:before{content:\"\\e786\"}.dark-mode .el-icon-document-copy:before{content:\"\\e787\"}.dark-mode .el-icon-document-delete:before{content:\"\\e788\"}.dark-mode .el-icon-document-remove:before{content:\"\\e789\"}.dark-mode .el-icon-tickets:before{content:\"\\e78b\"}.dark-mode .el-icon-folder-checked:before{content:\"\\e77f\"}.dark-mode .el-icon-folder-delete:before{content:\"\\e780\"}.dark-mode .el-icon-folder-remove:before{content:\"\\e781\"}.dark-mode .el-icon-folder-add:before{content:\"\\e783\"}.dark-mode .el-icon-folder-opened:before{content:\"\\e784\"}.dark-mode .el-icon-folder:before{content:\"\\e78a\"}.dark-mode .el-icon-edit-outline:before{content:\"\\e764\"}.dark-mode .el-icon-edit:before{content:\"\\e78c\"}.dark-mode .el-icon-date:before{content:\"\\e78e\"}.dark-mode .el-icon-c-scale-to-original:before{content:\"\\e7c6\"}.dark-mode .el-icon-view:before{content:\"\\e6ce\"}.dark-mode .el-icon-loading:before{content:\"\\e6cf\"}.dark-mode .el-icon-rank:before{content:\"\\e6d1\"}.dark-mode .el-icon-sort-down:before{content:\"\\e7c4\"}.dark-mode .el-icon-sort-up:before{content:\"\\e7c5\"}.dark-mode .el-icon-sort:before{content:\"\\e6d2\"}.dark-mode .el-icon-finished:before{content:\"\\e6cd\"}.dark-mode .el-icon-refresh-left:before{content:\"\\e6c7\"}.dark-mode .el-icon-refresh-right:before{content:\"\\e6c8\"}.dark-mode .el-icon-refresh:before{content:\"\\e6d0\"}.dark-mode .el-icon-video-play:before{content:\"\\e7c0\"}.dark-mode .el-icon-video-pause:before{content:\"\\e7c1\"}.dark-mode .el-icon-d-arrow-right:before{content:\"\\e6dc\"}.dark-mode .el-icon-d-arrow-left:before{content:\"\\e6dd\"}.dark-mode .el-icon-arrow-up:before{content:\"\\e6e1\"}.dark-mode .el-icon-arrow-down:before{content:\"\\e6df\"}.dark-mode .el-icon-arrow-right:before{content:\"\\e6e0\"}.dark-mode .el-icon-arrow-left:before{content:\"\\e6de\"}.dark-mode .el-icon-top-right:before{content:\"\\e6e7\"}.dark-mode .el-icon-top-left:before{content:\"\\e6e8\"}.dark-mode .el-icon-top:before{content:\"\\e6e6\"}.dark-mode .el-icon-bottom:before{content:\"\\e6eb\"}.dark-mode .el-icon-right:before{content:\"\\e6e9\"}.dark-mode .el-icon-back:before{content:\"\\e6ea\"}.dark-mode .el-icon-bottom-right:before{content:\"\\e6ec\"}.dark-mode .el-icon-bottom-left:before{content:\"\\e6ed\"}.dark-mode .el-icon-caret-top:before{content:\"\\e78f\"}.dark-mode .el-icon-caret-bottom:before{content:\"\\e790\"}.dark-mode .el-icon-caret-right:before{content:\"\\e791\"}.dark-mode .el-icon-caret-left:before{content:\"\\e792\"}.dark-mode .el-icon-d-caret:before{content:\"\\e79a\"}.dark-mode .el-icon-share:before{content:\"\\e793\"}.dark-mode .el-icon-menu:before{content:\"\\e798\"}.dark-mode .el-icon-s-grid:before{content:\"\\e7a6\"}.dark-mode .el-icon-s-check:before{content:\"\\e7a7\"}.dark-mode .el-icon-s-data:before{content:\"\\e7a8\"}.dark-mode .el-icon-s-opportunity:before{content:\"\\e7aa\"}.dark-mode .el-icon-s-custom:before{content:\"\\e7ab\"}.dark-mode .el-icon-s-claim:before{content:\"\\e7ad\"}.dark-mode .el-icon-s-finance:before{content:\"\\e7ae\"}.dark-mode .el-icon-s-comment:before{content:\"\\e7af\"}.dark-mode .el-icon-s-flag:before{content:\"\\e7b0\"}.dark-mode .el-icon-s-marketing:before{content:\"\\e7b1\"}.dark-mode .el-icon-s-shop:before{content:\"\\e7b4\"}.dark-mode .el-icon-s-open:before{content:\"\\e7b5\"}.dark-mode .el-icon-s-management:before{content:\"\\e7b6\"}.dark-mode .el-icon-s-ticket:before{content:\"\\e7b7\"}.dark-mode .el-icon-s-release:before{content:\"\\e7b8\"}.dark-mode .el-icon-s-home:before{content:\"\\e7b9\"}.dark-mode .el-icon-s-promotion:before{content:\"\\e7ba\"}.dark-mode .el-icon-s-operation:before{content:\"\\e7bb\"}.dark-mode .el-icon-s-unfold:before{content:\"\\e7bc\"}.dark-mode .el-icon-s-fold:before{content:\"\\e7a9\"}.dark-mode .el-icon-s-platform:before{content:\"\\e7bd\"}.dark-mode .el-icon-s-order:before{content:\"\\e7be\"}.dark-mode .el-icon-s-cooperation:before{content:\"\\e7bf\"}.dark-mode .el-icon-bell:before{content:\"\\e725\"}.dark-mode .el-icon-message-solid:before{content:\"\\e799\"}.dark-mode .el-icon-video-camera:before{content:\"\\e772\"}.dark-mode .el-icon-video-camera-solid:before{content:\"\\e796\"}.dark-mode .el-icon-camera:before{content:\"\\e779\"}.dark-mode .el-icon-camera-solid:before{content:\"\\e79b\"}.dark-mode .el-icon-download:before{content:\"\\e77c\"}.dark-mode .el-icon-upload2:before{content:\"\\e77b\"}.dark-mode .el-icon-upload:before{content:\"\\e7c3\"}.dark-mode .el-icon-picture-outline-round:before{content:\"\\e75f\"}.dark-mode .el-icon-picture-outline:before{content:\"\\e75e\"}.dark-mode .el-icon-picture:before{content:\"\\e79f\"}.dark-mode .el-icon-close:before{content:\"\\e6db\"}.dark-mode .el-icon-check:before{content:\"\\e6da\"}.dark-mode .el-icon-plus:before{content:\"\\e6d9\"}.dark-mode .el-icon-minus:before{content:\"\\e6d8\"}.dark-mode .el-icon-help:before{content:\"\\e73d\"}.dark-mode .el-icon-s-help:before{content:\"\\e7b3\"}.dark-mode .el-icon-circle-close:before{content:\"\\e78d\"}.dark-mode .el-icon-circle-check:before{content:\"\\e720\"}.dark-mode .el-icon-circle-plus-outline:before{content:\"\\e723\"}.dark-mode .el-icon-remove-outline:before{content:\"\\e722\"}.dark-mode .el-icon-zoom-out:before{content:\"\\e776\"}.dark-mode .el-icon-zoom-in:before{content:\"\\e777\"}.dark-mode .el-icon-error:before{content:\"\\e79d\"}.dark-mode .el-icon-success:before{content:\"\\e79c\"}.dark-mode .el-icon-circle-plus:before{content:\"\\e7a0\"}.dark-mode .el-icon-remove:before{content:\"\\e7a2\"}.dark-mode .el-icon-info:before{content:\"\\e7a1\"}.dark-mode .el-icon-question:before{content:\"\\e7a4\"}.dark-mode .el-icon-warning-outline:before{content:\"\\e6c9\"}.dark-mode .el-icon-warning:before{content:\"\\e7a3\"}.dark-mode .el-icon-goods:before{content:\"\\e7c2\"}.dark-mode .el-icon-s-goods:before{content:\"\\e7b2\"}.dark-mode .el-icon-star-off:before{content:\"\\e717\"}.dark-mode .el-icon-star-on:before{content:\"\\e797\"}.dark-mode .el-icon-more-outline:before{content:\"\\e6cc\"}.dark-mode .el-icon-more:before{content:\"\\e794\"}.dark-mode .el-icon-phone-outline:before{content:\"\\e6cb\"}.dark-mode .el-icon-phone:before{content:\"\\e795\"}.dark-mode .el-icon-user:before{content:\"\\e6e3\"}.dark-mode .el-icon-user-solid:before{content:\"\\e7a5\"}.dark-mode .el-icon-setting:before{content:\"\\e6ca\"}.dark-mode .el-icon-s-tools:before{content:\"\\e7ac\"}.dark-mode .el-icon-delete:before{content:\"\\e6d7\"}.dark-mode .el-icon-delete-solid:before{content:\"\\e7c9\"}.dark-mode .el-icon-eleme:before{content:\"\\e7c7\"}.dark-mode .el-icon-platform-eleme:before{content:\"\\e7ca\"}.dark-mode .el-icon-loading{-webkit-animation:rotating 2s linear infinite;animation:rotating 2s linear infinite}.dark-mode .el-icon--right{margin-left:5px}.dark-mode .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)}}.dark-mode .el-pagination{white-space:nowrap;padding:2px 5px;color:#fff;font-weight:700}.dark-mode .el-pagination::after,.dark-mode .el-pagination::before{display:table;content:\"\"}.dark-mode .el-pagination::after{clear:both}.dark-mode .el-pagination button,.dark-mode .el-pagination span:not([class*=suffix]){display:inline-block;font-size:13px;min-width:35.5px;height:28px;line-height:28px;vertical-align:top;-webkit-box-sizing:border-box;box-sizing:border-box}.dark-mode .el-pagination .el-input__inner{text-align:center;-moz-appearance:textfield;line-height:normal}.dark-mode .el-pagination .el-input__suffix{right:0;-webkit-transform:scale(.8);transform:scale(.8)}.dark-mode .el-pagination .el-select .el-input{width:100px;margin:0 5px}.dark-mode .el-pagination .el-select .el-input .el-input__inner{padding-right:25px;border-radius:3px}.dark-mode .el-pagination button{border:none;padding:0 6px;background:0 0}.dark-mode .el-pagination button:focus{outline:0}.dark-mode .el-pagination button:hover{color:#d71a1b}.dark-mode .el-pagination button:disabled{color:#ccc;background-color:#232222;cursor:not-allowed}.dark-mode .el-pagination .btn-next,.dark-mode .el-pagination .btn-prev{background:center center no-repeat #232222;background-size:16px;cursor:pointer;margin:0;color:#fff}.dark-mode .el-pagination .btn-next .el-icon,.dark-mode .el-pagination .btn-prev .el-icon{display:block;font-size:12px;font-weight:700}.dark-mode .el-pagination .btn-prev{padding-right:12px}.dark-mode .el-pagination .btn-next{padding-left:12px}.dark-mode .el-pagination .el-pager li.disabled{color:#ccc;cursor:not-allowed}.dark-mode .el-pager li,.dark-mode .el-pager li.btn-quicknext:hover,.dark-mode .el-pager li.btn-quickprev:hover{cursor:pointer}.dark-mode .el-pagination--small .btn-next,.dark-mode .el-pagination--small .btn-prev,.dark-mode .el-pagination--small .el-pager li,.dark-mode .el-pagination--small .el-pager li.btn-quicknext,.dark-mode .el-pagination--small .el-pager li.btn-quickprev,.dark-mode .el-pagination--small .el-pager li:last-child{border-color:transparent;font-size:12px;line-height:22px;height:22px;min-width:22px}.dark-mode .el-pagination--small .more::before,.dark-mode .el-pagination--small li.more::before{line-height:24px}.dark-mode .el-pagination--small button,.dark-mode .el-pagination--small span:not([class*=suffix]){height:22px;line-height:22px}.dark-mode .el-pagination--small .el-pagination__editor,.dark-mode .el-pagination--small .el-pagination__editor.el-input .el-input__inner{height:22px}.dark-mode .el-pagination__sizes{margin:0 10px 0 0;font-weight:400;color:#b8b8b8}.dark-mode .el-pagination__sizes .el-input .el-input__inner{font-size:13px;padding-left:8px}.dark-mode .el-pagination__sizes .el-input .el-input__inner:hover{border-color:#d71a1b}.dark-mode .el-pagination__total{margin-right:10px;font-weight:400;color:#b8b8b8}.dark-mode .el-pagination__jump{margin-left:24px;font-weight:400;color:#b8b8b8}.dark-mode .el-pagination__jump .el-input__inner{padding:0 3px}.dark-mode .el-pagination__rightwrapper{float:right}.dark-mode .el-pagination__editor{line-height:18px;padding:0 2px;height:28px;text-align:center;margin:0 2px;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:3px}.dark-mode .el-pager,.dark-mode .el-pagination.is-background .btn-next,.dark-mode .el-pagination.is-background .btn-prev{padding:0}.dark-mode .el-pagination__editor.el-input{width:50px}.dark-mode .el-pagination__editor.el-input .el-input__inner{height:28px}.dark-mode .el-pagination__editor .el-input__inner::-webkit-inner-spin-button,.dark-mode .el-pagination__editor .el-input__inner::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.dark-mode .el-pagination.is-background .btn-next,.dark-mode .el-pagination.is-background .btn-prev,.dark-mode .el-pagination.is-background .el-pager li{margin:0 5px;background-color:#323131;color:#b8b8b8;min-width:30px;border-radius:2px}.dark-mode .el-pagination.is-background .btn-next.disabled,.dark-mode .el-pagination.is-background .btn-next:disabled,.dark-mode .el-pagination.is-background .btn-prev.disabled,.dark-mode .el-pagination.is-background .btn-prev:disabled,.dark-mode .el-pagination.is-background .el-pager li.disabled{color:#ccc}.dark-mode .el-pagination.is-background .el-pager li:not(.disabled):hover{color:#d71a1b}.dark-mode .el-pagination.is-background .el-pager li:not(.disabled).active{background-color:#d71a1b;color:#232222}.dark-mode .el-dialog,.dark-mode .el-pager li{background:#232222;-webkit-box-sizing:border-box}.dark-mode .el-pagination.is-background.el-pagination--small .btn-next,.dark-mode .el-pagination.is-background.el-pagination--small .btn-prev,.dark-mode .el-pagination.is-background.el-pagination--small .el-pager li{margin:0 3px;min-width:22px}.dark-mode .el-pager,.dark-mode .el-pager li{vertical-align:top;margin:0;display:inline-block}.dark-mode .el-pager{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;list-style:none;font-size:0}.dark-mode .el-date-table,.dark-mode .el-table th{-webkit-user-select:none;-moz-user-select:none}.dark-mode .el-pager .more::before{line-height:30px}.dark-mode .el-pager li{padding:0 4px;font-size:13px;min-width:35.5px;height:28px;line-height:28px;box-sizing:border-box;text-align:center}.dark-mode .el-menu--collapse .el-menu .el-submenu,.dark-mode .el-menu--popup{min-width:200px}.dark-mode .el-pager li.btn-quicknext,.dark-mode .el-pager li.btn-quickprev{line-height:28px;color:#fff}.dark-mode .el-pager li.btn-quicknext.disabled,.dark-mode .el-pager li.btn-quickprev.disabled{color:#ccc}.dark-mode .el-pager li.active+li{border-left:0}.dark-mode .el-pager li:hover{color:#d71a1b}.dark-mode .el-pager li.active{color:#d71a1b;cursor:default}@-webkit-keyframes v-modal-in{0%{opacity:0}}@-webkit-keyframes v-modal-out{100%{opacity:0}}.dark-mode .el-dialog{position:relative;margin:0 auto 50px;border-radius:2px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.3);box-shadow:0 1px 3px rgba(0,0,0,.3);box-sizing:border-box;width:50%}.dark-mode .el-dialog.is-fullscreen{width:100%;margin-top:0;margin-bottom:0;height:100%;overflow:auto}.dark-mode .el-dialog__wrapper{position:fixed;top:0;right:0;bottom:0;left:0;overflow:auto;margin:0}.dark-mode .el-dialog__header{padding:20px 20px 10px}.dark-mode .el-dialog__headerbtn{position:absolute;top:20px;right:20px;padding:0;background:0 0;border:none;outline:0;cursor:pointer;font-size:16px}.dark-mode .el-dialog__headerbtn .el-dialog__close{color:#b8b8b8}.dark-mode .el-dialog__headerbtn:focus .el-dialog__close,.dark-mode .el-dialog__headerbtn:hover .el-dialog__close{color:#d71a1b}.dark-mode .el-dialog__title{line-height:24px;font-size:18px;color:#fff}.dark-mode .el-dialog__body{padding:30px 20px;color:#b8b8b8;font-size:14px;word-break:break-all}.dark-mode .el-dialog__footer{padding:10px 20px 20px;text-align:right;-webkit-box-sizing:border-box;box-sizing:border-box}.dark-mode .el-dialog--center{text-align:center}.dark-mode .el-dialog--center .el-dialog__body{text-align:initial;padding:25px 25px 30px}.dark-mode .el-dialog--center .el-dialog__footer{text-align:inherit}.dark-mode .dialog-fade-enter-active{-webkit-animation:dialog-fade-in .3s;animation:dialog-fade-in .3s}.dark-mode .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}}.dark-mode .el-autocomplete{position:relative;display:inline-block}.dark-mode .el-autocomplete-suggestion{margin:5px 0;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);border-radius:4px;border:1px solid #7a7a7a;-webkit-box-sizing:border-box;box-sizing:border-box;background-color:#232222}.dark-mode .el-dropdown-menu,.dark-mode .el-menu--collapse .el-submenu .el-menu{z-index:10;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.dark-mode .el-autocomplete-suggestion__wrap{max-height:280px;padding:10px 0;-webkit-box-sizing:border-box;box-sizing:border-box}.dark-mode .el-autocomplete-suggestion__list{margin:0;padding:0}.dark-mode .el-autocomplete-suggestion li{padding:0 20px;margin:0;line-height:34px;cursor:pointer;color:#b8b8b8;font-size:14px;list-style:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.dark-mode .el-autocomplete-suggestion li.highlighted,.dark-mode .el-autocomplete-suggestion li:hover{background-color:#171315}.dark-mode .el-autocomplete-suggestion li.divider{margin-top:6px;border-top:1px solid #f4f4f4}.dark-mode .el-autocomplete-suggestion li.divider:last-child{margin-bottom:-6px}.dark-mode .el-autocomplete-suggestion.is-loading li{text-align:center;height:100px;line-height:100px;font-size:20px;color:#999}.dark-mode .el-autocomplete-suggestion.is-loading li::after{display:inline-block;content:\"\";height:100%;vertical-align:middle}.dark-mode .el-autocomplete-suggestion.is-loading li:hover{background-color:#232222}.dark-mode .el-autocomplete-suggestion.is-loading .el-icon-loading{vertical-align:middle}.dark-mode .el-dropdown{display:inline-block;position:relative;color:#b8b8b8;font-size:14px}.dark-mode .el-dropdown .el-button-group{display:block}.dark-mode .el-dropdown .el-button-group .el-button{float:none}.dark-mode .el-dropdown .el-dropdown__caret-button{padding-left:5px;padding-right:5px;position:relative;border-left:none}.dark-mode .el-dropdown .el-dropdown__caret-button::before{content:'';position:absolute;display:block;width:1px;top:5px;bottom:5px;left:0;background:rgba(255,255,255,.5)}.dark-mode .el-dropdown .el-dropdown__caret-button.el-button--default::before{background:rgba(190,190,190,.5)}.dark-mode .el-dropdown .el-dropdown__caret-button:hover::before{top:0;bottom:0}.dark-mode .el-dropdown .el-dropdown__caret-button .el-dropdown__icon{padding-left:0}.dark-mode .el-dropdown__icon{font-size:12px;margin:0 3px}.dark-mode .el-dropdown-menu{position:absolute;top:0;left:0;padding:10px 0;margin:5px 0;background-color:#232222;border:1px solid #454545;border-radius:4px;box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.dark-mode .el-dropdown-menu__item{list-style:none;line-height:36px;padding:0 20px;margin:0;font-size:14px;color:#b8b8b8;cursor:pointer;outline:0}.dark-mode .el-dropdown-menu__item:focus,.dark-mode .el-dropdown-menu__item:not(.is-disabled):hover{background-color:#352121;color:#b31c1c}.dark-mode .el-dropdown-menu__item i{margin-right:5px}.dark-mode .el-dropdown-menu__item--divided{position:relative;margin-top:6px;border-top:1px solid #454545}.dark-mode .el-dropdown-menu__item--divided:before{content:'';height:6px;display:block;margin:0 -20px;background-color:#232222}.dark-mode .el-dropdown-menu__item.is-disabled{cursor:default;color:#bbb;pointer-events:none}.dark-mode .el-dropdown-menu--medium{padding:6px 0}.dark-mode .el-dropdown-menu--medium .el-dropdown-menu__item{line-height:30px;padding:0 17px;font-size:14px}.dark-mode .el-dropdown-menu--medium .el-dropdown-menu__item.el-dropdown-menu__item--divided{margin-top:6px}.dark-mode .el-dropdown-menu--medium .el-dropdown-menu__item.el-dropdown-menu__item--divided:before{height:6px;margin:0 -17px}.dark-mode .el-dropdown-menu--small{padding:6px 0}.dark-mode .el-dropdown-menu--small .el-dropdown-menu__item{line-height:27px;padding:0 15px;font-size:13px}.dark-mode .el-dropdown-menu--small .el-dropdown-menu__item.el-dropdown-menu__item--divided{margin-top:4px}.dark-mode .el-dropdown-menu--small .el-dropdown-menu__item.el-dropdown-menu__item--divided:before{height:4px;margin:0 -15px}.dark-mode .el-dropdown-menu--mini{padding:3px 0}.dark-mode .el-dropdown-menu--mini .el-dropdown-menu__item{line-height:24px;padding:0 10px;font-size:12px}.dark-mode .el-dropdown-menu--mini .el-dropdown-menu__item.el-dropdown-menu__item--divided{margin-top:3px}.dark-mode .el-dropdown-menu--mini .el-dropdown-menu__item.el-dropdown-menu__item--divided:before{height:3px;margin:0 -10px}.dark-mode .el-menu{border-right:solid 1px #e6e6e6;list-style:none;position:relative;margin:0;padding-left:0;background-color:#232222}.dark-mode .el-menu--horizontal>.el-menu-item:not(.is-disabled):focus,.dark-mode .el-menu--horizontal>.el-menu-item:not(.is-disabled):hover,.dark-mode .el-menu--horizontal>.el-submenu .el-submenu__title:hover{background-color:#fff}.dark-mode .el-menu::after,.dark-mode .el-menu::before{display:table;content:\"\"}.dark-mode .el-menu::after{clear:both}.dark-mode .el-menu.el-menu--horizontal{border-bottom:solid 1px #e6e6e6}.dark-mode .el-menu--horizontal{border-right:none}.dark-mode .el-menu--horizontal>.el-menu-item{float:left;height:60px;line-height:60px;margin:0;border-bottom:2px solid transparent;color:#bcbcbc}.dark-mode .el-menu--horizontal>.el-menu-item a,.dark-mode .el-menu--horizontal>.el-menu-item a:hover{color:inherit}.dark-mode .el-menu--horizontal>.el-submenu{float:left}.dark-mode .el-menu--horizontal>.el-submenu:focus,.dark-mode .el-menu--horizontal>.el-submenu:hover{outline:0}.dark-mode .el-menu--horizontal>.el-submenu:focus .el-submenu__title,.dark-mode .el-menu--horizontal>.el-submenu:hover .el-submenu__title{color:#fff}.dark-mode .el-menu--horizontal>.el-submenu.is-active .el-submenu__title{border-bottom:2px solid #d71a1b;color:#fff}.dark-mode .el-menu--horizontal>.el-submenu .el-submenu__title{height:60px;line-height:60px;border-bottom:2px solid transparent;color:#bcbcbc}.dark-mode .el-menu--horizontal>.el-submenu .el-submenu__icon-arrow{position:static;vertical-align:middle;margin-left:8px;margin-top:-3px}.dark-mode .el-menu--horizontal .el-menu .el-menu-item,.dark-mode .el-menu--horizontal .el-menu .el-submenu__title{background-color:#232222;float:none;height:36px;line-height:36px;padding:0 10px;color:#bcbcbc}.dark-mode .el-menu--horizontal .el-menu .el-menu-item.is-active,.dark-mode .el-menu--horizontal .el-menu .el-submenu.is-active>.el-submenu__title{color:#fff}.dark-mode .el-menu--horizontal .el-menu-item:not(.is-disabled):focus,.dark-mode .el-menu--horizontal .el-menu-item:not(.is-disabled):hover{outline:0;color:#fff}.dark-mode .el-menu--horizontal>.el-menu-item.is-active{border-bottom:2px solid #d71a1b;color:#fff}.dark-mode .el-menu--collapse{width:64px}.dark-mode .el-menu--collapse>.el-menu-item [class^=el-icon-],.dark-mode .el-menu--collapse>.el-submenu>.el-submenu__title [class^=el-icon-]{margin:0;vertical-align:middle;width:24px;text-align:center}.dark-mode .el-menu--collapse>.el-menu-item .el-submenu__icon-arrow,.dark-mode .el-menu--collapse>.el-submenu>.el-submenu__title .el-submenu__icon-arrow{display:none}.dark-mode .el-menu--collapse>.el-menu-item span,.dark-mode .el-menu--collapse>.el-submenu>.el-submenu__title span{height:0;width:0;overflow:hidden;visibility:hidden;display:inline-block}.dark-mode .el-menu--collapse>.el-menu-item.is-active i{color:inherit}.dark-mode .el-menu--collapse .el-submenu{position:relative}.dark-mode .el-menu--collapse .el-submenu .el-menu{position:absolute;margin-left:5px;top:0;left:100%;border:1px solid #7a7a7a;border-radius:2px;box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.dark-mode .el-menu-item,.dark-mode .el-submenu__title{height:56px;line-height:56px;position:relative;-webkit-box-sizing:border-box;white-space:nowrap;list-style:none}.dark-mode .el-menu--collapse .el-submenu.is-opened>.el-submenu__title .el-submenu__icon-arrow{-webkit-transform:none;transform:none}.dark-mode .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)}.dark-mode .el-menu--popup-bottom-start{margin-top:5px}.dark-mode .el-menu--popup-right-start{margin-left:5px;margin-right:5px}.dark-mode .el-menu-item{font-size:14px;color:#fff;padding:0 20px;cursor:pointer;-webkit-transition:border-color .3s,background-color .3s,color .3s;transition:border-color .3s,background-color .3s,color .3s;box-sizing:border-box}.dark-mode .el-menu-item *{vertical-align:middle}.dark-mode .el-menu-item i{color:#bcbcbc}.dark-mode .el-menu-item:focus,.dark-mode .el-menu-item:hover{outline:0;background-color:#352121}.dark-mode .el-menu-item.is-disabled{opacity:.25;cursor:not-allowed;background:0 0!important}.dark-mode .el-menu-item [class^=el-icon-]{margin-right:5px;width:24px;text-align:center;font-size:18px;vertical-align:middle}.dark-mode .el-menu-item.is-active{color:#d71a1b}.dark-mode .el-menu-item.is-active i{color:inherit}.dark-mode .el-submenu{list-style:none;margin:0;padding-left:0}.dark-mode .el-submenu__title{font-size:14px;color:#fff;padding:0 20px;cursor:pointer;-webkit-transition:border-color .3s,background-color .3s,color .3s;transition:border-color .3s,background-color .3s,color .3s;box-sizing:border-box}.dark-mode .el-submenu__title *{vertical-align:middle}.dark-mode .el-submenu__title i{color:#bcbcbc}.dark-mode .el-submenu__title:focus,.dark-mode .el-submenu__title:hover{outline:0;background-color:#352121}.dark-mode .el-submenu__title.is-disabled{opacity:.25;cursor:not-allowed;background:0 0!important}.dark-mode .el-submenu__title:hover{background-color:#352121}.dark-mode .el-submenu .el-menu{border:none}.dark-mode .el-submenu .el-menu-item{height:50px;line-height:50px;padding:0 45px;min-width:200px}.dark-mode .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}.dark-mode .el-submenu.is-active .el-submenu__title{border-bottom-color:#d71a1b}.dark-mode .el-submenu.is-opened>.el-submenu__title .el-submenu__icon-arrow{-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg)}.dark-mode .el-submenu.is-disabled .el-menu-item,.dark-mode .el-submenu.is-disabled .el-submenu__title{opacity:.25;cursor:not-allowed;background:0 0!important}.dark-mode .el-submenu [class^=el-icon-]{vertical-align:middle;margin-right:5px;width:24px;text-align:center;font-size:18px}.dark-mode .el-menu-item-group>ul{padding:0}.dark-mode .el-menu-item-group__title{padding:7px 0 7px 20px;line-height:normal;font-size:12px;color:#bcbcbc}.dark-mode .el-radio-button__inner,.dark-mode .el-radio-group{display:inline-block;line-height:1;vertical-align:middle}.dark-mode .horizontal-collapse-transition .el-submenu__title .el-submenu__icon-arrow{-webkit-transition:.2s;transition:.2s;opacity:0}.dark-mode .el-radio-group{font-size:0}.dark-mode .el-radio-button{position:relative;display:inline-block;outline:0}.dark-mode .el-radio-button__inner{white-space:nowrap;background:#232222;border:1px solid #bebebe;font-weight:500;border-left:0;color:#b8b8b8;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;position:relative;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}.dark-mode .el-radio-button__inner.is-round{padding:12px 20px}.dark-mode .el-radio-button__inner:hover{color:#d71a1b}.dark-mode .el-radio-button__inner [class*=el-icon-]{line-height:.9}.dark-mode .el-radio-button__inner [class*=el-icon-]+span{margin-left:5px}.dark-mode .el-radio-button:first-child .el-radio-button__inner{border-left:1px solid #bebebe;border-radius:4px 0 0 4px;-webkit-box-shadow:none!important;box-shadow:none!important}.dark-mode .el-radio-button__orig-radio{opacity:0;outline:0;position:absolute;z-index:-1}.dark-mode .el-radio-button__orig-radio:checked+.el-radio-button__inner{color:#232222;background-color:#d71a1b;border-color:#d71a1b;-webkit-box-shadow:-1px 0 0 0 #d71a1b;box-shadow:-1px 0 0 0 #d71a1b}.dark-mode .el-radio-button__orig-radio:disabled+.el-radio-button__inner{color:#ccc;cursor:not-allowed;background-image:none;background-color:#232222;border-color:#454545;-webkit-box-shadow:none;box-shadow:none}.dark-mode .el-radio-button__orig-radio:disabled:checked+.el-radio-button__inner{background-color:#171514}.dark-mode .el-radio-button:last-child .el-radio-button__inner{border-radius:0 4px 4px 0}.dark-mode .el-popover,.dark-mode .el-radio-button:first-child:last-child .el-radio-button__inner{border-radius:4px}.dark-mode .el-radio-button--medium .el-radio-button__inner{padding:10px 20px;font-size:14px;border-radius:0}.dark-mode .el-radio-button--medium .el-radio-button__inner.is-round{padding:10px 20px}.dark-mode .el-radio-button--small .el-radio-button__inner{padding:9px 15px;font-size:12px;border-radius:0}.dark-mode .el-radio-button--small .el-radio-button__inner.is-round{padding:9px 15px}.dark-mode .el-radio-button--mini .el-radio-button__inner{padding:7px 15px;font-size:12px;border-radius:0}.dark-mode .el-radio-button--mini .el-radio-button__inner.is-round{padding:7px 15px}.dark-mode .el-radio-button:focus:not(.is-focus):not(:active):not(.is-disabled){-webkit-box-shadow:0 0 2px 2px #d71a1b;box-shadow:0 0 2px 2px #d71a1b}.dark-mode .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}.dark-mode .el-switch__core,.dark-mode .el-switch__label{display:inline-block;cursor:pointer}.dark-mode .el-switch.is-disabled .el-switch__core,.dark-mode .el-switch.is-disabled .el-switch__label{cursor:not-allowed}.dark-mode .el-switch__label{-webkit-transition:.2s;transition:.2s;height:20px;font-size:14px;font-weight:500;vertical-align:middle;color:#fff}.dark-mode .el-switch__label.is-active{color:#d71a1b}.dark-mode .el-switch__label--left{margin-right:10px}.dark-mode .el-switch__label--right{margin-left:10px}.dark-mode .el-switch__label *{line-height:1;font-size:14px;display:inline-block}.dark-mode .el-switch__input{position:absolute;width:0;height:0;opacity:0;margin:0}.dark-mode .el-switch__core{margin:0;position:relative;width:40px;height:20px;border:1px solid #bebebe;outline:0;border-radius:10px;-webkit-box-sizing:border-box;box-sizing:border-box;background:#bebebe;-webkit-transition:border-color .3s,background-color .3s;transition:border-color .3s,background-color .3s;vertical-align:middle}.dark-mode .el-switch__core:after{content:\"\";position:absolute;top:1px;left:1px;border-radius:100%;-webkit-transition:all .3s;transition:all .3s;width:16px;height:16px;background-color:#232222}.dark-mode .el-switch.is-checked .el-switch__core{border-color:#d71a1b;background-color:#d71a1b}.dark-mode .el-switch.is-checked .el-switch__core::after{left:100%;margin-left:-17px}.dark-mode .el-switch.is-disabled{opacity:.6}.dark-mode .el-switch--wide .el-switch__label.el-switch__label--left span{left:10px}.dark-mode .el-switch--wide .el-switch__label.el-switch__label--right span{right:10px}.dark-mode .el-switch .label-fade-enter,.dark-mode .el-switch .label-fade-leave-active{opacity:0}.dark-mode .el-select-dropdown{position:absolute;z-index:1001;border:1px solid #7a7a7a;border-radius:4px;background-color:#232222;-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}.dark-mode .el-select-dropdown.is-multiple .el-select-dropdown__item.selected{color:#d71a1b;background-color:#232222}.dark-mode .el-select-dropdown.is-multiple .el-select-dropdown__item.selected.hover{background-color:#171315}.dark-mode .el-select-dropdown.is-multiple .el-select-dropdown__item.selected::after{position:absolute;right:20px;font-family:element-icons;content:\"\\e6da\";font-size:12px;font-weight:700;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.dark-mode .el-select-dropdown .el-scrollbar.is-empty .el-select-dropdown__list{padding:0}.dark-mode .el-select-dropdown__empty{padding:10px 0;margin:0;text-align:center;color:#999;font-size:14px}.dark-mode .el-select-dropdown__wrap{max-height:274px}.dark-mode .el-select-dropdown__list{list-style:none;padding:6px 0;margin:0;-webkit-box-sizing:border-box;box-sizing:border-box}.dark-mode .el-select-dropdown__item{font-size:14px;padding:0 20px;position:relative;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#b8b8b8;height:34px;line-height:34px;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer}.dark-mode .el-select-dropdown__item.is-disabled{color:#ccc;cursor:not-allowed}.dark-mode .el-select-dropdown__item.is-disabled:hover{background-color:#232222}.dark-mode .el-select-dropdown__item.hover,.dark-mode .el-select-dropdown__item:hover{background-color:#171315}.dark-mode .el-select-dropdown__item.selected{color:#d71a1b;font-weight:700}.dark-mode .el-select-group{margin:0;padding:0}.dark-mode .el-select-group__wrap{position:relative;list-style:none;margin:0;padding:0}.dark-mode .el-select-group__wrap:not(:last-of-type){padding-bottom:24px}.dark-mode .el-select-group__wrap:not(:last-of-type)::after{content:'';position:absolute;display:block;left:20px;right:20px;bottom:12px;height:1px;background:#7a7a7a}.dark-mode .el-select-group__title{padding-left:20px;font-size:12px;color:#b8b8b8;line-height:30px}.dark-mode .el-select-group .el-select-dropdown__item{padding-left:20px}.dark-mode .el-select{display:inline-block;position:relative}.dark-mode .el-select .el-select__tags>span{display:contents}.dark-mode .el-select:hover .el-input__inner{border-color:#ccc}.dark-mode .el-select .el-input__inner{cursor:pointer;padding-right:35px}.dark-mode .el-select .el-input__inner:focus{border-color:#d71a1b}.dark-mode .el-select .el-input .el-select__caret{color:#ccc;font-size:14px;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg);cursor:pointer}.dark-mode .el-select .el-input .el-select__caret.is-reverse{-webkit-transform:rotateZ(0);transform:rotateZ(0)}.dark-mode .el-select .el-input .el-select__caret.is-show-close{font-size:14px;text-align:center;-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg);border-radius:100%;color:#ccc;-webkit-transition:color .2s cubic-bezier(.645,.045,.355,1);transition:color .2s cubic-bezier(.645,.045,.355,1)}.dark-mode .el-select .el-input .el-select__caret.is-show-close:hover{color:#bcbcbc}.dark-mode .el-select .el-input.is-disabled .el-input__inner{cursor:not-allowed}.dark-mode .el-select .el-input.is-disabled .el-input__inner:hover{border-color:#7a7a7a}.dark-mode .el-select .el-input.is-focus .el-input__inner{border-color:#d71a1b}.dark-mode .el-select>.el-input{display:block}.dark-mode .el-select__input{border:none;outline:0;padding:0;margin-left:15px;color:#666;font-size:14px;-webkit-appearance:none;-moz-appearance:none;appearance:none;height:28px;background-color:transparent}.dark-mode .el-select__input.is-mini{height:14px}.dark-mode .el-select__close{cursor:pointer;position:absolute;top:8px;z-index:1000;right:25px;color:#ccc;line-height:18px;font-size:14px}.dark-mode .el-select__close:hover{color:#bcbcbc}.dark-mode .el-select__tags{position:absolute;line-height:normal;white-space:normal;z-index:1;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-wrap:wrap;flex-wrap:wrap}.dark-mode .el-select .el-tag__close{margin-top:-2px}.dark-mode .el-select .el-tag{-webkit-box-sizing:border-box;box-sizing:border-box;border-color:transparent;margin:2px 0 2px 6px;background-color:#f0f2f5}.dark-mode .el-select .el-tag__close.el-icon-close{background-color:#ccc;right:-7px;top:0;color:#232222}.dark-mode .el-select .el-tag__close.el-icon-close:hover{background-color:#bcbcbc}.dark-mode .el-table,.dark-mode .el-table__expanded-cell{background-color:#232222}.dark-mode .el-select .el-tag__close.el-icon-close::before{display:block;-webkit-transform:translate(0,.5px);transform:translate(0,.5px)}.dark-mode .el-table{position:relative;overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:1;-ms-flex:1;flex:1;width:100%;max-width:100%;font-size:14px;color:#b8b8b8}.dark-mode .el-table--mini,.dark-mode .el-table--small,.dark-mode .el-table__expand-icon{font-size:12px}.dark-mode .el-table__empty-block{min-height:60px;text-align:center;width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.dark-mode .el-table__empty-text{line-height:60px;width:50%;color:#bcbcbc}.dark-mode .el-table__expand-column .cell{padding:0;text-align:center}.dark-mode .el-table__expand-icon{position:relative;cursor:pointer;color:#666;-webkit-transition:-webkit-transform .2s ease-in-out;transition:-webkit-transform .2s ease-in-out;transition:transform .2s ease-in-out;transition:transform .2s ease-in-out,-webkit-transform .2s ease-in-out;height:20px}.dark-mode .el-table__expand-icon--expanded{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.dark-mode .el-table__expand-icon>.el-icon{position:absolute;left:50%;top:50%;margin-left:-5px;margin-top:-5px}.dark-mode .el-table__expanded-cell[class*=cell]{padding:20px 50px}.dark-mode .el-table__expanded-cell:hover{background-color:transparent!important}.dark-mode .el-table__placeholder{display:inline-block;width:20px}.dark-mode .el-table__append-wrapper{overflow:hidden}.dark-mode .el-table--fit{border-right:0;border-bottom:0}.dark-mode .el-table--fit td.gutter,.dark-mode .el-table--fit th.gutter{border-right-width:1px}.dark-mode .el-table--scrollable-x .el-table__body-wrapper{overflow-x:auto}.dark-mode .el-table--scrollable-y .el-table__body-wrapper{overflow-y:auto}.dark-mode .el-table thead{color:#bcbcbc;font-weight:500}.dark-mode .el-table thead.is-group th{background:#171315}.dark-mode .el-table th,.dark-mode .el-table tr{background-color:#232222}.dark-mode .el-table td,.dark-mode .el-table th{padding:12px 0;min-width:0;-webkit-box-sizing:border-box;box-sizing:border-box;text-overflow:ellipsis;vertical-align:middle;position:relative;text-align:left}.dark-mode .el-table td.is-center,.dark-mode .el-table th.is-center{text-align:center}.dark-mode .el-table td.is-right,.dark-mode .el-table th.is-right{text-align:right}.dark-mode .el-table td.gutter,.dark-mode .el-table th.gutter{width:15px;border-right-width:0;border-bottom-width:0;padding:0}.dark-mode .el-table--medium td,.dark-mode .el-table--medium th{padding:10px 0}.dark-mode .el-table--small td,.dark-mode .el-table--small th{padding:8px 0}.dark-mode .el-table--mini td,.dark-mode .el-table--mini th{padding:6px 0}.dark-mode .el-table .cell,.dark-mode .el-table--border td:first-child .cell,.dark-mode .el-table--border th:first-child .cell{padding-left:10px}.dark-mode .el-table tr input[type=checkbox]{margin:0}.dark-mode .el-table td,.dark-mode .el-table th.is-leaf{border-bottom:1px solid #454545}.dark-mode .el-table th.is-sortable{cursor:pointer}.dark-mode .el-table th{overflow:hidden;-ms-user-select:none;user-select:none}.dark-mode .el-table th>.cell{display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;position:relative;vertical-align:middle;padding-left:10px;padding-right:10px;width:100%}.dark-mode .el-table th>.cell.highlight{color:#d71a1b}.dark-mode .el-table th.required>div::before{display:inline-block;content:\"\";width:8px;height:8px;border-radius:50%;background:#ff4d51;margin-right:5px;vertical-align:middle}.dark-mode .el-table td div{-webkit-box-sizing:border-box;box-sizing:border-box}.dark-mode .el-table td.gutter{width:0}.dark-mode .el-table .cell{-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden;text-overflow:ellipsis;white-space:normal;word-break:break-all;line-height:23px;padding-right:10px}.dark-mode .el-table .cell.el-tooltip{white-space:nowrap;min-width:50px}.dark-mode .el-table--border,.dark-mode .el-table--group{border:1px solid #454545}.dark-mode .el-table--border::after,.dark-mode .el-table--group::after,.dark-mode .el-table::before{content:'';position:absolute;background-color:#454545;z-index:1}.dark-mode .el-table--border::after,.dark-mode .el-table--group::after{top:0;right:0;width:1px;height:100%}.dark-mode .el-table::before{left:0;bottom:0;width:100%;height:1px}.dark-mode .el-table--border{border-right:none;border-bottom:none}.dark-mode .el-table--border.el-loading-parent--relative{border-color:transparent}.dark-mode .el-table--border td,.dark-mode .el-table--border th,.dark-mode .el-table__body-wrapper .el-table--border.is-scrolling-left~.el-table__fixed{border-right:1px solid #454545}.dark-mode .el-table--border th.gutter:last-of-type{border-bottom:1px solid #454545;border-bottom-width:1px}.dark-mode .el-table--border th,.dark-mode .el-table__fixed-right-patch{border-bottom:1px solid #454545}.dark-mode .el-table__fixed,.dark-mode .el-table__fixed-right{position:absolute;top:0;left:0;overflow-x:hidden;overflow-y:hidden;-webkit-box-shadow:0 0 10px rgba(0,0,0,.12);box-shadow:0 0 10px rgba(0,0,0,.12)}.dark-mode .el-table__fixed-right::before,.dark-mode .el-table__fixed::before{content:'';position:absolute;left:0;bottom:0;width:100%;height:1px;background-color:#454545;z-index:4}.dark-mode .el-table__fixed-right-patch{position:absolute;top:-1px;right:0;background-color:#232222}.dark-mode .el-table__fixed-right{top:0;left:auto;right:0}.dark-mode .el-table__fixed-right .el-table__fixed-body-wrapper,.dark-mode .el-table__fixed-right .el-table__fixed-footer-wrapper,.dark-mode .el-table__fixed-right .el-table__fixed-header-wrapper{left:auto;right:0}.dark-mode .el-table__fixed-header-wrapper{position:absolute;left:0;top:0;z-index:3}.dark-mode .el-table__fixed-footer-wrapper{position:absolute;left:0;bottom:0;z-index:3}.dark-mode .el-table__fixed-footer-wrapper tbody td{border-top:1px solid #454545;background-color:#171315;color:#b8b8b8}.dark-mode .el-table__fixed-body-wrapper{position:absolute;left:0;top:37px;overflow:hidden;z-index:3}.dark-mode .el-table__body-wrapper,.dark-mode .el-table__footer-wrapper,.dark-mode .el-table__header-wrapper{width:100%}.dark-mode .el-table__footer-wrapper{margin-top:-1px}.dark-mode .el-table__footer-wrapper td{border-top:1px solid #454545}.dark-mode .el-table__body,.dark-mode .el-table__footer,.dark-mode .el-table__header{table-layout:fixed;border-collapse:separate}.dark-mode .el-table__footer-wrapper,.dark-mode .el-table__header-wrapper{overflow:hidden}.dark-mode .el-table__footer-wrapper tbody td,.dark-mode .el-table__header-wrapper tbody td{background-color:#171315;color:#b8b8b8}.dark-mode .el-table__body-wrapper{overflow:hidden;position:relative}.dark-mode .el-table__body-wrapper.is-scrolling-left~.el-table__fixed,.dark-mode .el-table__body-wrapper.is-scrolling-none~.el-table__fixed,.dark-mode .el-table__body-wrapper.is-scrolling-none~.el-table__fixed-right,.dark-mode .el-table__body-wrapper.is-scrolling-right~.el-table__fixed-right{-webkit-box-shadow:none;box-shadow:none}.dark-mode .el-picker-panel,.dark-mode .el-table-filter{-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.dark-mode .el-table__body-wrapper .el-table--border.is-scrolling-right~.el-table__fixed-right{border-left:1px solid #454545}.dark-mode .el-table .caret-wrapper{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:34px;width:24px;vertical-align:middle;cursor:pointer;overflow:initial;position:relative}.dark-mode .el-table .sort-caret{width:0;height:0;border:5px solid transparent;position:absolute;left:7px}.dark-mode .el-table .sort-caret.ascending{border-bottom-color:#ccc;top:5px}.dark-mode .el-table .sort-caret.descending{border-top-color:#ccc;bottom:7px}.dark-mode .el-table .ascending .sort-caret.ascending{border-bottom-color:#d71a1b}.dark-mode .el-table .descending .sort-caret.descending{border-top-color:#d71a1b}.dark-mode .el-table .hidden-columns{position:absolute;z-index:-1}.dark-mode .el-table--striped .el-table__body tr.el-table__row--striped td{background:#fafafa}.dark-mode .el-table--striped .el-table__body tr.el-table__row--striped.current-row td{background-color:#352121}.dark-mode .el-table__body tr.hover-row.current-row>td,.dark-mode .el-table__body tr.hover-row.el-table__row--striped.current-row>td,.dark-mode .el-table__body tr.hover-row.el-table__row--striped>td,.dark-mode .el-table__body tr.hover-row>td{background-color:#171315}.dark-mode .el-table__body tr.current-row>td{background-color:#352121}.dark-mode .el-table__column-resize-proxy{position:absolute;left:200px;top:0;bottom:0;width:0;border-left:1px solid #454545;z-index:10}.dark-mode .el-table__column-filter-trigger{display:inline-block;line-height:34px;cursor:pointer}.dark-mode .el-table__column-filter-trigger i{color:#b8b8b8;font-size:12px;-webkit-transform:scale(.75);transform:scale(.75)}.dark-mode .el-table--enable-row-transition .el-table__body td{-webkit-transition:background-color .25s ease;transition:background-color .25s ease}.dark-mode .el-table--enable-row-hover .el-table__body tr:hover>td{background-color:#171315}.dark-mode .el-table--fluid-height .el-table__fixed,.dark-mode .el-table--fluid-height .el-table__fixed-right{bottom:0;overflow:hidden}.dark-mode .el-table [class*=el-table__row--level] .el-table__expand-icon{display:inline-block;width:20px;line-height:20px;height:20px;text-align:center;margin-right:3px}.dark-mode .el-table-column--selection .cell{padding-left:14px;padding-right:14px}.dark-mode .el-table-filter{border:1px solid #454545;border-radius:2px;background-color:#232222;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);-webkit-box-sizing:border-box;box-sizing:border-box;margin:2px 0}.dark-mode .el-date-table td,.dark-mode .el-date-table td div{height:30px;-webkit-box-sizing:border-box}.dark-mode .el-table-filter__list{padding:5px 0;margin:0;list-style:none;min-width:100px}.dark-mode .el-table-filter__list-item{line-height:36px;padding:0 10px;cursor:pointer;font-size:14px}.dark-mode .el-table-filter__list-item:hover{background-color:#352121;color:#b31c1c}.dark-mode .el-table-filter__list-item.is-active{background-color:#d71a1b;color:#232222}.dark-mode .el-table-filter__content{min-width:100px}.dark-mode .el-table-filter__bottom{border-top:1px solid #454545;padding:8px}.dark-mode .el-table-filter__bottom button{background:0 0;border:none;color:#b8b8b8;cursor:pointer;font-size:13px;padding:0 3px}.dark-mode .el-date-table td.in-range div,.dark-mode .el-date-table td.in-range div:hover,.dark-mode .el-date-table.is-week-mode .el-date-table__row.current div,.dark-mode .el-date-table.is-week-mode .el-date-table__row:hover div{background-color:#171514}.dark-mode .el-table-filter__bottom button:hover{color:#d71a1b}.dark-mode .el-table-filter__bottom button:focus{outline:0}.dark-mode .el-table-filter__bottom button.is-disabled{color:#ccc;cursor:not-allowed}.dark-mode .el-table-filter__wrap{max-height:280px}.dark-mode .el-table-filter__checkbox-group{padding:10px}.dark-mode .el-table-filter__checkbox-group label.el-checkbox{display:block;margin-right:5px;margin-bottom:8px;margin-left:5px}.dark-mode .el-table-filter__checkbox-group .el-checkbox:last-child{margin-bottom:0}.dark-mode .el-date-table{font-size:12px;-ms-user-select:none;user-select:none}.dark-mode .el-date-table.is-week-mode .el-date-table__row:hover td.available:hover{color:#b8b8b8}.dark-mode .el-date-table.is-week-mode .el-date-table__row:hover td:first-child div{margin-left:5px;border-top-left-radius:15px;border-bottom-left-radius:15px}.dark-mode .el-date-table.is-week-mode .el-date-table__row:hover td:last-child div{margin-right:5px;border-top-right-radius:15px;border-bottom-right-radius:15px}.dark-mode .el-date-table td{width:32px;padding:4px 0;box-sizing:border-box;text-align:center;cursor:pointer;position:relative}.dark-mode .el-date-table td div{padding:3px 0;box-sizing:border-box}.dark-mode .el-date-table td span{width:24px;height:24px;display:block;margin:0 auto;line-height:24px;position:absolute;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);border-radius:50%}.dark-mode .el-date-table td.next-month,.dark-mode .el-date-table td.prev-month{color:#ccc}.dark-mode .el-date-table td.today{position:relative}.dark-mode .el-date-table td.today span{color:#d71a1b;font-weight:700}.dark-mode .el-date-table td.today.end-date span,.dark-mode .el-date-table td.today.start-date span{color:#232222}.dark-mode .el-date-table td.available:hover{color:#d71a1b}.dark-mode .el-date-table td.current:not(.disabled) span{color:#232222;background-color:#d71a1b}.dark-mode .el-date-table td.end-date div,.dark-mode .el-date-table td.start-date div{color:#232222}.dark-mode .el-date-table td.end-date span,.dark-mode .el-date-table td.start-date span{background-color:#d71a1b}.dark-mode .el-date-table td.start-date div{margin-left:5px;border-top-left-radius:15px;border-bottom-left-radius:15px}.dark-mode .el-date-table td.end-date div{margin-right:5px;border-top-right-radius:15px;border-bottom-right-radius:15px}.dark-mode .el-date-table td.disabled div{background-color:#171315;opacity:1;cursor:not-allowed;color:#ccc}.dark-mode .el-date-table td.selected div{margin-left:5px;margin-right:5px;background-color:#171514;border-radius:15px}.dark-mode .el-date-table td.selected div:hover{background-color:#171514}.dark-mode .el-date-table td.selected span{background-color:#d71a1b;color:#232222;border-radius:15px}.dark-mode .el-date-table td.week{font-size:80%;color:#b8b8b8}.dark-mode .el-month-table,.dark-mode .el-year-table{font-size:12px;border-collapse:collapse}.dark-mode .el-date-table th{padding:5px;color:#b8b8b8;font-weight:400;border-bottom:solid 1px #454545}.dark-mode .el-month-table{margin:-1px}.dark-mode .el-month-table td{text-align:center;padding:8px 0;cursor:pointer}.dark-mode .el-month-table td div{height:48px;padding:6px 0;-webkit-box-sizing:border-box;box-sizing:border-box}.dark-mode .el-month-table td.today .cell{color:#d71a1b;font-weight:700}.dark-mode .el-month-table td.today.end-date .cell,.dark-mode .el-month-table td.today.start-date .cell{color:#232222}.dark-mode .el-month-table td.disabled .cell{background-color:#171315;cursor:not-allowed;color:#ccc}.dark-mode .el-month-table td.disabled .cell:hover{color:#ccc}.dark-mode .el-month-table td .cell{width:60px;height:36px;display:block;line-height:36px;color:#b8b8b8;margin:0 auto;border-radius:18px}.dark-mode .el-month-table td .cell:hover{color:#d71a1b}.dark-mode .el-month-table td.in-range div,.dark-mode .el-month-table td.in-range div:hover{background-color:#171514}.dark-mode .el-month-table td.end-date div,.dark-mode .el-month-table td.start-date div{color:#232222}.dark-mode .el-month-table td.end-date .cell,.dark-mode .el-month-table td.start-date .cell{color:#232222;background-color:#d71a1b}.dark-mode .el-month-table td.start-date div{border-top-left-radius:24px;border-bottom-left-radius:24px}.dark-mode .el-month-table td.end-date div{border-top-right-radius:24px;border-bottom-right-radius:24px}.dark-mode .el-month-table td.current:not(.disabled) .cell{color:#d71a1b}.dark-mode .el-year-table{margin:-1px}.dark-mode .el-year-table .el-icon{color:#fff}.dark-mode .el-year-table td{text-align:center;padding:20px 3px;cursor:pointer}.dark-mode .el-year-table td.today .cell{color:#d71a1b;font-weight:700}.dark-mode .el-year-table td.disabled .cell{background-color:#171315;cursor:not-allowed;color:#ccc}.dark-mode .el-year-table td.disabled .cell:hover{color:#ccc}.dark-mode .el-year-table td .cell{width:48px;height:32px;display:block;line-height:32px;color:#b8b8b8;margin:0 auto}.dark-mode .el-year-table td .cell:hover,.dark-mode .el-year-table td.current:not(.disabled) .cell{color:#d71a1b}.dark-mode .el-date-range-picker{width:646px}.dark-mode .el-date-range-picker.has-sidebar{width:756px}.dark-mode .el-date-range-picker table{table-layout:fixed;width:100%}.dark-mode .el-date-range-picker .el-picker-panel__body{min-width:513px}.dark-mode .el-date-range-picker .el-picker-panel__content{margin:0}.dark-mode .el-date-range-picker__header{position:relative;text-align:center;height:28px}.dark-mode .el-date-range-picker__header [class*=arrow-left]{float:left}.dark-mode .el-date-range-picker__header [class*=arrow-right]{float:right}.dark-mode .el-date-range-picker__header div{font-size:16px;font-weight:500;margin-right:50px}.dark-mode .el-date-range-picker__content{float:left;width:50%;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:16px}.dark-mode .el-date-range-picker__content.is-left{border-right:1px solid #e4e4e4}.dark-mode .el-date-range-picker__content .el-date-range-picker__header div{margin-left:50px;margin-right:50px}.dark-mode .el-date-range-picker__editors-wrap{-webkit-box-sizing:border-box;box-sizing:border-box;display:table-cell}.dark-mode .el-date-range-picker__editors-wrap.is-right{text-align:right}.dark-mode .el-date-range-picker__time-header{position:relative;border-bottom:1px solid #e4e4e4;font-size:12px;padding:8px 5px 5px;display:table;width:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.dark-mode .el-date-range-picker__time-header>.el-icon-arrow-right{font-size:20px;vertical-align:middle;display:table-cell;color:#fff}.dark-mode .el-date-range-picker__time-picker-wrap{position:relative;display:table-cell;padding:0 5px}.dark-mode .el-date-range-picker__time-picker-wrap .el-picker-panel{position:absolute;top:13px;right:0;z-index:1;background:#232222}.dark-mode .el-date-picker{width:322px}.dark-mode .el-date-picker.has-sidebar.has-time{width:434px}.dark-mode .el-date-picker.has-sidebar{width:438px}.dark-mode .el-date-picker.has-time .el-picker-panel__body-wrapper{position:relative}.dark-mode .el-date-picker .el-picker-panel__content{width:292px}.dark-mode .el-date-picker table{table-layout:fixed;width:100%}.dark-mode .el-date-picker__editor-wrap{position:relative;display:table-cell;padding:0 5px}.dark-mode .el-date-picker__time-header{position:relative;border-bottom:1px solid #e4e4e4;font-size:12px;padding:8px 5px 5px;display:table;width:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.dark-mode .el-date-picker__header{margin:12px;text-align:center}.dark-mode .el-date-picker__header--bordered{margin-bottom:0;padding-bottom:12px;border-bottom:solid 1px #454545}.dark-mode .el-date-picker__header--bordered+.el-picker-panel__content{margin-top:0}.dark-mode .el-date-picker__header-label{font-size:16px;font-weight:500;padding:0 5px;line-height:22px;text-align:center;cursor:pointer;color:#b8b8b8}.dark-mode .el-date-picker__header-label.active,.dark-mode .el-date-picker__header-label:hover{color:#d71a1b}.dark-mode .el-date-picker__prev-btn{float:left}.dark-mode .el-date-picker__next-btn{float:right}.dark-mode .el-date-picker__time-wrap{padding:10px;text-align:center}.dark-mode .el-date-picker__time-label{float:left;cursor:pointer;line-height:30px;margin-left:10px}.dark-mode .time-select{margin:5px 0;min-width:0}.dark-mode .time-select .el-picker-panel__content{max-height:200px;margin:0}.dark-mode .time-select-item{padding:8px 10px;font-size:14px;line-height:20px}.dark-mode .time-select-item.selected:not(.disabled){color:#d71a1b;font-weight:700}.dark-mode .time-select-item.disabled{color:#7a7a7a;cursor:not-allowed}.dark-mode .time-select-item:hover{background-color:#171315;font-weight:700;cursor:pointer}.dark-mode .el-date-editor{position:relative;display:inline-block;text-align:left}.dark-mode .el-date-editor.el-input,.dark-mode .el-date-editor.el-input__inner{width:220px}.dark-mode .el-date-editor--monthrange.el-input,.dark-mode .el-date-editor--monthrange.el-input__inner{width:300px}.dark-mode .el-date-editor--daterange.el-input,.dark-mode .el-date-editor--daterange.el-input__inner,.dark-mode .el-date-editor--timerange.el-input,.dark-mode .el-date-editor--timerange.el-input__inner{width:350px}.dark-mode .el-date-editor--datetimerange.el-input,.dark-mode .el-date-editor--datetimerange.el-input__inner{width:400px}.dark-mode .el-date-editor--dates .el-input__inner{text-overflow:ellipsis;white-space:nowrap}.dark-mode .el-date-editor .el-icon-circle-close{cursor:pointer}.dark-mode .el-date-editor .el-range__icon{font-size:14px;margin-left:-5px;color:#ccc;float:left;line-height:32px}.dark-mode .el-date-editor .el-range-input,.dark-mode .el-date-editor .el-range-separator{height:100%;margin:0;text-align:center;display:inline-block;font-size:14px}.dark-mode .el-date-editor .el-range-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;outline:0;padding:0;width:39%;color:#b8b8b8}.dark-mode .el-date-editor .el-range-input::-webkit-input-placeholder{color:#ccc}.dark-mode .el-date-editor .el-range-input::-ms-input-placeholder{color:#ccc}.dark-mode .el-date-editor .el-range-input::placeholder{color:#ccc}.dark-mode .el-date-editor .el-range-separator{padding:0 5px;line-height:32px;width:5%;color:#fff}.dark-mode .el-date-editor .el-range__close-icon{font-size:14px;color:#ccc;width:25px;display:inline-block;float:right;line-height:32px}.dark-mode .el-range-editor.el-input__inner{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:3px 10px}.dark-mode .el-range-editor .el-range-input{line-height:1}.dark-mode .el-range-editor.is-active,.dark-mode .el-range-editor.is-active:hover{border-color:#d71a1b}.dark-mode .el-range-editor--medium.el-input__inner{height:36px}.dark-mode .el-range-editor--medium .el-range-separator{line-height:28px;font-size:14px}.dark-mode .el-range-editor--medium .el-range-input{font-size:14px}.dark-mode .el-range-editor--medium .el-range__close-icon,.dark-mode .el-range-editor--medium .el-range__icon{line-height:28px}.dark-mode .el-range-editor--small.el-input__inner{height:32px}.dark-mode .el-range-editor--small .el-range-separator{line-height:24px;font-size:13px}.dark-mode .el-range-editor--small .el-range-input{font-size:13px}.dark-mode .el-range-editor--small .el-range__close-icon,.dark-mode .el-range-editor--small .el-range__icon{line-height:24px}.dark-mode .el-range-editor--mini.el-input__inner{height:28px}.dark-mode .el-range-editor--mini .el-range-separator{line-height:20px;font-size:12px}.dark-mode .el-range-editor--mini .el-range-input{font-size:12px}.dark-mode .el-range-editor--mini .el-range__close-icon,.dark-mode .el-range-editor--mini .el-range__icon{line-height:20px}.dark-mode .el-range-editor.is-disabled{background-color:#171315;border-color:#7a7a7a;color:#ccc;cursor:not-allowed}.dark-mode .el-range-editor.is-disabled:focus,.dark-mode .el-range-editor.is-disabled:hover{border-color:#7a7a7a}.dark-mode .el-range-editor.is-disabled input{background-color:#171315;color:#ccc;cursor:not-allowed}.dark-mode .el-range-editor.is-disabled input::-webkit-input-placeholder{color:#ccc}.dark-mode .el-range-editor.is-disabled input::-ms-input-placeholder{color:#ccc}.dark-mode .el-range-editor.is-disabled input::placeholder{color:#ccc}.dark-mode .el-range-editor.is-disabled .el-range-separator{color:#ccc}.dark-mode .el-picker-panel{color:#b8b8b8;border:1px solid #7a7a7a;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);background:#232222;border-radius:4px;line-height:30px;margin:5px 0}.dark-mode .el-popover,.dark-mode .el-time-panel{-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.dark-mode .el-picker-panel__body-wrapper::after,.dark-mode .el-picker-panel__body::after{content:\"\";display:table;clear:both}.dark-mode .el-picker-panel__content{position:relative;margin:15px}.dark-mode .el-picker-panel__footer{border-top:1px solid #e4e4e4;padding:4px;text-align:right;background-color:#232222;position:relative;font-size:0}.dark-mode .el-picker-panel__shortcut{display:block;width:100%;border:0;background-color:transparent;line-height:28px;font-size:14px;color:#b8b8b8;padding-left:12px;text-align:left;outline:0;cursor:pointer}.dark-mode .el-picker-panel__shortcut:hover{color:#d71a1b}.dark-mode .el-picker-panel__shortcut.active{background-color:#e6f1fe;color:#d71a1b}.dark-mode .el-picker-panel__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}.dark-mode .el-picker-panel__btn[disabled]{color:#ccc;cursor:not-allowed}.dark-mode .el-picker-panel__icon-btn{font-size:12px;color:#fff;border:0;background:0 0;cursor:pointer;outline:0;margin-top:8px}.dark-mode .el-picker-panel__icon-btn:hover{color:#d71a1b}.dark-mode .el-picker-panel__icon-btn.is-disabled{color:#bbb}.dark-mode .el-picker-panel__icon-btn.is-disabled:hover{cursor:not-allowed}.dark-mode .el-picker-panel__link-btn{vertical-align:middle}.dark-mode .el-picker-panel [slot=sidebar],.dark-mode .el-picker-panel__sidebar{position:absolute;top:0;bottom:0;width:110px;border-right:1px solid #e4e4e4;-webkit-box-sizing:border-box;box-sizing:border-box;padding-top:6px;background-color:#232222;overflow:auto}.dark-mode .el-picker-panel [slot=sidebar]+.el-picker-panel__body,.dark-mode .el-picker-panel__sidebar+.el-picker-panel__body{margin-left:110px}.dark-mode .el-time-spinner.has-seconds .el-time-spinner__wrapper{width:33.3%}.dark-mode .el-time-spinner__wrapper{max-height:190px;overflow:auto;display:inline-block;width:50%;vertical-align:top;position:relative}.dark-mode .el-time-spinner__wrapper .el-scrollbar__wrap:not(.el-scrollbar__wrap--hidden-default){padding-bottom:15px}.dark-mode .el-time-spinner__input.el-input .el-input__inner,.dark-mode .el-time-spinner__list{padding:0;text-align:center}.dark-mode .el-time-spinner__wrapper.is-arrow{-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;overflow:hidden}.dark-mode .el-time-spinner__wrapper.is-arrow .el-time-spinner__list{-webkit-transform:translateY(-32px);transform:translateY(-32px)}.dark-mode .el-time-spinner__wrapper.is-arrow .el-time-spinner__item:hover:not(.disabled):not(.active){background:#232222;cursor:default}.dark-mode .el-time-spinner__arrow{font-size:12px;color:#bcbcbc;position:absolute;left:0;width:100%;z-index:1;text-align:center;height:30px;line-height:30px;cursor:pointer}.dark-mode .el-time-spinner__arrow:hover{color:#d71a1b}.dark-mode .el-time-spinner__arrow.el-icon-arrow-up{top:10px}.dark-mode .el-time-spinner__arrow.el-icon-arrow-down{bottom:10px}.dark-mode .el-time-spinner__input.el-input{width:70%}.dark-mode .el-time-spinner__list{margin:0;list-style:none}.dark-mode .el-time-spinner__list::after,.dark-mode .el-time-spinner__list::before{content:'';display:block;width:100%;height:80px}.dark-mode .el-time-spinner__item{height:32px;line-height:32px;font-size:12px;color:#b8b8b8}.dark-mode .el-time-spinner__item:hover:not(.disabled):not(.active){background:#171315;cursor:pointer}.dark-mode .el-time-spinner__item.active:not(.disabled){color:#fff;font-weight:700}.dark-mode .el-time-spinner__item.disabled{color:#ccc;cursor:not-allowed}.dark-mode .el-time-panel{margin:5px 0;border:1px solid #7a7a7a;background-color:#232222;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);border-radius:2px;position:absolute;width:180px;left:0;z-index:1000;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-box-sizing:content-box;box-sizing:content-box}.dark-mode .el-slider__button,.dark-mode .el-slider__button-wrapper{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.dark-mode .el-time-panel__content{font-size:0;position:relative;overflow:hidden}.dark-mode .el-time-panel__content::after,.dark-mode .el-time-panel__content::before{content:\"\";top:50%;position:absolute;margin-top:-15px;height:32px;z-index:-1;left:0;right:0;-webkit-box-sizing:border-box;box-sizing:border-box;padding-top:6px;text-align:left;border-top:1px solid #7a7a7a;border-bottom:1px solid #7a7a7a}.dark-mode .el-time-panel__content::after{left:50%;margin-left:12%;margin-right:12%}.dark-mode .el-time-panel__content::before{padding-left:50%;margin-right:12%;margin-left:12%}.dark-mode .el-time-panel__content.has-seconds::after{left:calc(100% / 3 * 2)}.dark-mode .el-time-panel__content.has-seconds::before{padding-left:calc(100% / 3)}.dark-mode .el-time-panel__footer{border-top:1px solid #e4e4e4;padding:4px;height:36px;line-height:25px;text-align:right;-webkit-box-sizing:border-box;box-sizing:border-box}.dark-mode .el-time-panel__btn{border:none;line-height:28px;padding:0 5px;margin:0 5px;cursor:pointer;background-color:transparent;outline:0;font-size:12px;color:#fff}.dark-mode .el-time-panel__btn.confirm{font-weight:800;color:#d71a1b}.dark-mode .el-time-range-picker{width:354px;overflow:visible}.dark-mode .el-time-range-picker__content{position:relative;text-align:center;padding:10px}.dark-mode .el-time-range-picker__cell{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:4px 7px 7px;width:50%;display:inline-block}.dark-mode .el-time-range-picker__header{margin-bottom:5px;text-align:center;font-size:14px}.dark-mode .el-time-range-picker__body{border-radius:2px;border:1px solid #7a7a7a}.dark-mode .el-popover{position:absolute;background:#232222;min-width:150px;border:1px solid #454545;padding:12px;z-index:2000;color:#b8b8b8;line-height:1.4;text-align:justify;font-size:14px;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);word-break:break-all}.dark-mode .el-popover--plain{padding:18px 20px}.dark-mode .el-popover__title{color:#fff;font-size:16px;line-height:1;margin-bottom:12px}.dark-mode .v-modal-enter{-webkit-animation:v-modal-in .2s ease;animation:v-modal-in .2s ease}.dark-mode .v-modal-leave{-webkit-animation:v-modal-out .2s ease forwards;animation:v-modal-out .2s ease forwards}@keyframes v-modal-in{0%{opacity:0}}@keyframes v-modal-out{100%{opacity:0}}.dark-mode .v-modal{position:fixed;left:0;top:0;width:100%;height:100%;opacity:.5;background:#f4f4f4}.dark-mode .el-popup-parent--hidden{overflow:hidden}.dark-mode .el-message-box{display:inline-block;width:420px;padding-bottom:10px;vertical-align:middle;background-color:#232222;border-radius:4px;border:1px solid #454545;font-size:18px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);text-align:left;overflow:hidden;-webkit-backface-visibility:hidden;backface-visibility:hidden}.dark-mode .el-message-box__wrapper{position:fixed;top:0;bottom:0;left:0;right:0;text-align:center}.dark-mode .el-message-box__wrapper::after{content:\"\";display:inline-block;height:100%;width:0;vertical-align:middle}.dark-mode .el-message-box__header{position:relative;padding:15px 15px 10px}.dark-mode .el-message-box__title{padding-left:0;margin-bottom:0;font-size:18px;line-height:1;color:#fff}.dark-mode .el-message-box__headerbtn{position:absolute;top:15px;right:15px;padding:0;border:none;outline:0;background:0 0;font-size:16px;cursor:pointer}.dark-mode .el-form-item.is-error .el-input__inner,.dark-mode .el-form-item.is-error .el-input__inner:focus,.dark-mode .el-form-item.is-error .el-textarea__inner,.dark-mode .el-form-item.is-error .el-textarea__inner:focus,.dark-mode .el-message-box__input input.invalid,.dark-mode .el-message-box__input input.invalid:focus{border-color:#f56c6c}.dark-mode .el-message-box__headerbtn .el-message-box__close{color:#b8b8b8}.dark-mode .el-message-box__headerbtn:focus .el-message-box__close,.dark-mode .el-message-box__headerbtn:hover .el-message-box__close{color:#d71a1b}.dark-mode .el-message-box__content{padding:10px 15px;color:#b8b8b8;font-size:14px}.dark-mode .el-message-box__container{position:relative}.dark-mode .el-message-box__input{padding-top:15px}.dark-mode .el-message-box__status{position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);font-size:24px!important}.dark-mode .el-message-box__status::before{padding-left:1px}.dark-mode .el-message-box__status+.el-message-box__message{padding-left:36px;padding-right:12px}.dark-mode .el-message-box__status.el-icon-success{color:#67c23a}.dark-mode .el-message-box__status.el-icon-info{color:#b8b8b8}.dark-mode .el-message-box__status.el-icon-warning{color:#e6a23c}.dark-mode .el-message-box__status.el-icon-error{color:#f56c6c}.dark-mode .el-message-box__message{margin:0}.dark-mode .el-message-box__message p{margin:0;line-height:24px}.dark-mode .el-message-box__errormsg{color:#f56c6c;font-size:12px;min-height:18px;margin-top:2px}.dark-mode .el-message-box__btns{padding:5px 15px 0;text-align:right}.dark-mode .el-message-box__btns button:nth-child(2){margin-left:10px}.dark-mode .el-message-box__btns-reverse{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.dark-mode .el-message-box--center{padding-bottom:30px}.dark-mode .el-message-box--center .el-message-box__header{padding-top:30px}.dark-mode .el-message-box--center .el-message-box__title{position:relative;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}.dark-mode .el-message-box--center .el-message-box__status{position:relative;top:auto;padding-right:5px;text-align:center;-webkit-transform:translateY(-1px);transform:translateY(-1px)}.dark-mode .el-message-box--center .el-message-box__message{margin-left:0}.dark-mode .el-message-box--center .el-message-box__btns,.dark-mode .el-message-box--center .el-message-box__content{text-align:center}.dark-mode .el-message-box--center .el-message-box__content{padding-left:27px;padding-right:27px}.dark-mode .msgbox-fade-enter-active{-webkit-animation:msgbox-fade-in .3s;animation:msgbox-fade-in .3s}.dark-mode .msgbox-fade-leave-active{-webkit-animation:msgbox-fade-out .3s;animation:msgbox-fade-out .3s}@-webkit-keyframes msgbox-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 msgbox-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 msgbox-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 msgbox-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}}.dark-mode .el-breadcrumb{font-size:14px;line-height:1}.dark-mode .el-breadcrumb::after,.dark-mode .el-breadcrumb::before{display:table;content:\"\"}.dark-mode .el-breadcrumb::after{clear:both}.dark-mode .el-breadcrumb__separator{margin:0 9px;font-weight:700;color:#ccc}.dark-mode .el-breadcrumb__separator[class*=icon]{margin:0 6px;font-weight:400}.dark-mode .el-breadcrumb__item{float:left}.dark-mode .el-breadcrumb__inner{color:#b8b8b8}.dark-mode .el-breadcrumb__inner a,.dark-mode .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:#fff}.dark-mode .el-breadcrumb__inner a:hover,.dark-mode .el-breadcrumb__inner.is-link:hover{color:#d71a1b;cursor:pointer}.dark-mode .el-breadcrumb__item:last-child .el-breadcrumb__inner,.dark-mode .el-breadcrumb__item:last-child .el-breadcrumb__inner a,.dark-mode .el-breadcrumb__item:last-child .el-breadcrumb__inner a:hover,.dark-mode .el-breadcrumb__item:last-child .el-breadcrumb__inner:hover{font-weight:400;color:#b8b8b8;cursor:text}.dark-mode .el-breadcrumb__item:last-child .el-breadcrumb__separator{display:none}.dark-mode .el-form--label-left .el-form-item__label{text-align:left}.dark-mode .el-form--label-top .el-form-item__label{float:none;display:inline-block;text-align:left;padding:0 0 10px}.dark-mode .el-form--inline .el-form-item{display:inline-block;margin-right:10px;vertical-align:top}.dark-mode .el-form--inline .el-form-item__label{float:none;display:inline-block}.dark-mode .el-form--inline .el-form-item__content{display:inline-block;vertical-align:top}.dark-mode .el-form--inline.el-form--label-top .el-form-item__content{display:block}.dark-mode .el-form-item{margin-bottom:22px}.dark-mode .el-form-item::after,.dark-mode .el-form-item::before{display:table;content:\"\"}.dark-mode .el-form-item::after{clear:both}.dark-mode .el-form-item .el-form-item{margin-bottom:0}.dark-mode .el-form-item--mini.el-form-item,.dark-mode .el-form-item--small.el-form-item{margin-bottom:18px}.dark-mode .el-form-item .el-input__validateIcon{display:none}.dark-mode .el-form-item--medium .el-form-item__content,.dark-mode .el-form-item--medium .el-form-item__label{line-height:36px}.dark-mode .el-form-item--small .el-form-item__content,.dark-mode .el-form-item--small .el-form-item__label{line-height:32px}.dark-mode .el-form-item--small .el-form-item__error{padding-top:2px}.dark-mode .el-form-item--mini .el-form-item__content,.dark-mode .el-form-item--mini .el-form-item__label{line-height:28px}.dark-mode .el-form-item--mini .el-form-item__error{padding-top:1px}.dark-mode .el-form-item__label-wrap{float:left}.dark-mode .el-form-item__label-wrap .el-form-item__label{display:inline-block;float:none}.dark-mode .el-form-item__label{text-align:right;vertical-align:middle;float:left;font-size:14px;color:#b8b8b8;line-height:40px;padding:0 12px 0 0;-webkit-box-sizing:border-box;box-sizing:border-box}.dark-mode .el-form-item__content{line-height:40px;position:relative;font-size:14px}.dark-mode .el-form-item__content::after,.dark-mode .el-form-item__content::before{display:table;content:\"\"}.dark-mode .el-form-item__content::after{clear:both}.dark-mode .el-form-item__content .el-input-group{vertical-align:top}.dark-mode .el-form-item__error{color:#f56c6c;font-size:12px;line-height:1;padding-top:4px;position:absolute;top:100%;left:0}.dark-mode .el-form-item__error--inline{position:relative;top:auto;left:auto;display:inline-block;margin-left:10px}.dark-mode .el-form-item.is-required:not(.is-no-asterisk) .el-form-item__label-wrap>.el-form-item__label:before,.dark-mode .el-form-item.is-required:not(.is-no-asterisk)>.el-form-item__label:before{content:'*';color:#f56c6c;margin-right:4px}.dark-mode .el-form-item.is-error .el-input-group__append .el-input__inner,.dark-mode .el-form-item.is-error .el-input-group__prepend .el-input__inner{border-color:transparent}.dark-mode .el-form-item.is-error .el-input__validateIcon{color:#f56c6c}.dark-mode .el-form-item--feedback .el-input__validateIcon{display:inline-block}.dark-mode .el-tabs__header{padding:0;position:relative;margin:0 0 15px}.dark-mode .el-tabs__active-bar{position:absolute;bottom:0;left:0;height:2px;background-color:#d71a1b;z-index:1;-webkit-transition:-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:transform .3s cubic-bezier(.645,.045,.355,1);transition:transform .3s cubic-bezier(.645,.045,.355,1),-webkit-transform .3s cubic-bezier(.645,.045,.355,1);list-style:none}.dark-mode .el-tabs__new-tab{float:right;border:1px solid #d3dce6;height:18px;width:18px;line-height:18px;margin:12px 0 9px 10px;border-radius:3px;text-align:center;font-size:12px;color:#d3dce6;cursor:pointer;-webkit-transition:all .15s;transition:all .15s}.dark-mode .el-collapse-item__arrow,.dark-mode .el-tabs__nav{-webkit-transition:-webkit-transform .3s}.dark-mode .el-tabs__new-tab .el-icon-plus{-webkit-transform:scale(.8,.8);transform:scale(.8,.8)}.dark-mode .el-tabs__new-tab:hover{color:#d71a1b}.dark-mode .el-tabs__nav-wrap{overflow:hidden;margin-bottom:-1px;position:relative}.dark-mode .el-tabs__nav-wrap::after{content:\"\";position:absolute;left:0;bottom:0;width:100%;height:2px;background-color:#7a7a7a;z-index:1}.dark-mode .el-tabs--border-card>.el-tabs__header .el-tabs__nav-wrap::after,.dark-mode .el-tabs--card>.el-tabs__header .el-tabs__nav-wrap::after{content:none}.dark-mode .el-tabs__nav-wrap.is-scrollable{padding:0 20px;-webkit-box-sizing:border-box;box-sizing:border-box}.dark-mode .el-tabs__nav-scroll{overflow:hidden}.dark-mode .el-tabs__nav-next,.dark-mode .el-tabs__nav-prev{position:absolute;cursor:pointer;line-height:44px;font-size:12px;color:#bcbcbc}.dark-mode .el-tabs__nav-next{right:0}.dark-mode .el-tabs__nav-prev{left:0}.dark-mode .el-tabs__nav{white-space:nowrap;position:relative;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;float:left;z-index:2}.dark-mode .el-tabs__nav.is-stretch{min-width:100%;display:-webkit-box;display:-ms-flexbox;display:flex}.dark-mode .el-tabs__nav.is-stretch>*{-webkit-box-flex:1;-ms-flex:1;flex:1;text-align:center}.dark-mode .el-tabs__item{padding:0 20px;height:40px;-webkit-box-sizing:border-box;box-sizing:border-box;line-height:40px;display:inline-block;list-style:none;font-size:14px;font-weight:500;color:#fff;position:relative}.dark-mode .el-tabs__item:focus,.dark-mode .el-tabs__item:focus:active{outline:0}.dark-mode .el-tabs__item:focus.is-active.is-focus:not(:active){-webkit-box-shadow:0 0 2px 2px #d71a1b inset;box-shadow:0 0 2px 2px #d71a1b inset;border-radius:3px}.dark-mode .el-tabs__item .el-icon-close{border-radius:50%;text-align:center;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);margin-left:5px}.dark-mode .el-tabs__item .el-icon-close:before{-webkit-transform:scale(.9);transform:scale(.9);display:inline-block}.dark-mode .el-tabs__item .el-icon-close:hover{background-color:#ccc;color:#232222}.dark-mode .el-tabs__item.is-active{color:#d71a1b}.dark-mode .el-tabs__item:hover{color:#d71a1b;cursor:pointer}.dark-mode .el-tabs__item.is-disabled{color:#ccc;cursor:default}.dark-mode .el-tabs__content{overflow:hidden;position:relative}.dark-mode .el-tabs--card>.el-tabs__header{border-bottom:1px solid #7a7a7a}.dark-mode .el-tabs--card>.el-tabs__header .el-tabs__nav{border:1px solid #7a7a7a;border-bottom:none;border-radius:4px 4px 0 0;-webkit-box-sizing:border-box;box-sizing:border-box}.dark-mode .el-tabs--card>.el-tabs__header .el-tabs__active-bar{display:none}.dark-mode .el-tabs--card>.el-tabs__header .el-tabs__item .el-icon-close{position:relative;font-size:12px;width:0;height:14px;vertical-align:middle;line-height:15px;overflow:hidden;top:-1px;right:-2px;-webkit-transform-origin:100% 50%;transform-origin:100% 50%}.dark-mode .el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable .el-icon-close,.dark-mode .el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover .el-icon-close{width:14px}.dark-mode .el-tabs--card>.el-tabs__header .el-tabs__item{border-bottom:1px solid transparent;border-left:1px solid #7a7a7a;-webkit-transition:color .3s cubic-bezier(.645,.045,.355,1),padding .3s cubic-bezier(.645,.045,.355,1);transition:color .3s cubic-bezier(.645,.045,.355,1),padding .3s cubic-bezier(.645,.045,.355,1)}.dark-mode .el-tabs--card>.el-tabs__header .el-tabs__item:first-child{border-left:none}.dark-mode .el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover{padding-left:13px;padding-right:13px}.dark-mode .el-tabs--card>.el-tabs__header .el-tabs__item.is-active{border-bottom-color:#232222}.dark-mode .el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable{padding-left:20px;padding-right:20px}.dark-mode .el-tabs--border-card{background:#232222;border:1px solid #bebebe;-webkit-box-shadow:0 2px 4px 0 rgba(0,0,0,.12),0 0 6px 0 rgba(0,0,0,.04);box-shadow:0 2px 4px 0 rgba(0,0,0,.12),0 0 6px 0 rgba(0,0,0,.04)}.dark-mode .el-tabs--border-card>.el-tabs__content{padding:15px}.dark-mode .el-tabs--border-card>.el-tabs__header{background-color:#171315;border-bottom:1px solid #7a7a7a;margin:0}.dark-mode .el-tabs--border-card>.el-tabs__header .el-tabs__item{-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);border:1px solid transparent;margin-top:-1px;color:#bcbcbc}.dark-mode .el-tabs--border-card>.el-tabs__header .el-tabs__item+.el-tabs__item,.dark-mode .el-tabs--border-card>.el-tabs__header .el-tabs__item:first-child{margin-left:-1px}.dark-mode .el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active{color:#d71a1b;background-color:#232222;border-right-color:#bebebe;border-left-color:#bebebe}.dark-mode .el-tabs--border-card>.el-tabs__header .el-tabs__item:not(.is-disabled):hover{color:#d71a1b}.dark-mode .el-tabs--border-card>.el-tabs__header .el-tabs__item.is-disabled{color:#ccc}.dark-mode .el-tabs--border-card>.el-tabs__header .is-scrollable .el-tabs__item:first-child{margin-left:0}.dark-mode .el-tabs--bottom .el-tabs__item.is-bottom:nth-child(2),.dark-mode .el-tabs--bottom .el-tabs__item.is-top:nth-child(2),.dark-mode .el-tabs--top .el-tabs__item.is-bottom:nth-child(2),.dark-mode .el-tabs--top .el-tabs__item.is-top:nth-child(2){padding-left:0}.dark-mode .el-tabs--bottom .el-tabs__item.is-bottom:last-child,.dark-mode .el-tabs--bottom .el-tabs__item.is-top:last-child,.dark-mode .el-tabs--top .el-tabs__item.is-bottom:last-child,.dark-mode .el-tabs--top .el-tabs__item.is-top:last-child{padding-right:0}.dark-mode .el-tabs--bottom .el-tabs--left>.el-tabs__header .el-tabs__item:nth-child(2),.dark-mode .el-tabs--bottom .el-tabs--right>.el-tabs__header .el-tabs__item:nth-child(2),.dark-mode .el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.dark-mode .el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2),.dark-mode .el-tabs--top .el-tabs--left>.el-tabs__header .el-tabs__item:nth-child(2),.dark-mode .el-tabs--top .el-tabs--right>.el-tabs__header .el-tabs__item:nth-child(2),.dark-mode .el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.dark-mode .el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2){padding-left:20px}.dark-mode .el-tabs--bottom .el-tabs--left>.el-tabs__header .el-tabs__item:last-child,.dark-mode .el-tabs--bottom .el-tabs--right>.el-tabs__header .el-tabs__item:last-child,.dark-mode .el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.dark-mode .el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:last-child,.dark-mode .el-tabs--top .el-tabs--left>.el-tabs__header .el-tabs__item:last-child,.dark-mode .el-tabs--top .el-tabs--right>.el-tabs__header .el-tabs__item:last-child,.dark-mode .el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.dark-mode .el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:last-child{padding-right:20px}.dark-mode .el-tabs--bottom .el-tabs__header.is-bottom{margin-bottom:0;margin-top:10px}.dark-mode .el-tabs--bottom.el-tabs--border-card .el-tabs__header.is-bottom{border-bottom:0;border-top:1px solid #bebebe}.dark-mode .el-tabs--bottom.el-tabs--border-card .el-tabs__nav-wrap.is-bottom{margin-top:-1px;margin-bottom:0}.dark-mode .el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom:not(.is-active){border:1px solid transparent}.dark-mode .el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom{margin:0 -1px -1px}.dark-mode .el-tabs--left,.dark-mode .el-tabs--right{overflow:hidden}.dark-mode .el-tabs--left .el-tabs__header.is-left,.dark-mode .el-tabs--left .el-tabs__header.is-right,.dark-mode .el-tabs--left .el-tabs__nav-scroll,.dark-mode .el-tabs--left .el-tabs__nav-wrap.is-left,.dark-mode .el-tabs--left .el-tabs__nav-wrap.is-right,.dark-mode .el-tabs--right .el-tabs__header.is-left,.dark-mode .el-tabs--right .el-tabs__header.is-right,.dark-mode .el-tabs--right .el-tabs__nav-scroll,.dark-mode .el-tabs--right .el-tabs__nav-wrap.is-left,.dark-mode .el-tabs--right .el-tabs__nav-wrap.is-right{height:100%}.dark-mode .el-tabs--left .el-tabs__active-bar.is-left,.dark-mode .el-tabs--left .el-tabs__active-bar.is-right,.dark-mode .el-tabs--right .el-tabs__active-bar.is-left,.dark-mode .el-tabs--right .el-tabs__active-bar.is-right{top:0;bottom:auto;width:2px;height:auto}.dark-mode .el-tabs--left .el-tabs__nav-wrap.is-left,.dark-mode .el-tabs--left .el-tabs__nav-wrap.is-right,.dark-mode .el-tabs--right .el-tabs__nav-wrap.is-left,.dark-mode .el-tabs--right .el-tabs__nav-wrap.is-right{margin-bottom:0}.dark-mode .el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.dark-mode .el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.dark-mode .el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.dark-mode .el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.dark-mode .el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.dark-mode .el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.dark-mode .el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.dark-mode .el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{height:30px;line-height:30px;width:100%;text-align:center;cursor:pointer}.dark-mode .el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.dark-mode .el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.dark-mode .el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.dark-mode .el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i,.dark-mode .el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.dark-mode .el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.dark-mode .el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.dark-mode .el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i{-webkit-transform:rotateZ(90deg);transform:rotateZ(90deg)}.dark-mode .el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.dark-mode .el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.dark-mode .el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.dark-mode .el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{left:auto;top:0}.dark-mode .el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.dark-mode .el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.dark-mode .el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.dark-mode .el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next{right:auto;bottom:0}.dark-mode .el-tabs--left .el-tabs__active-bar.is-left,.dark-mode .el-tabs--left .el-tabs__nav-wrap.is-left::after{right:0;left:auto}.dark-mode .el-tabs--left .el-tabs__nav-wrap.is-left.is-scrollable,.dark-mode .el-tabs--left .el-tabs__nav-wrap.is-right.is-scrollable,.dark-mode .el-tabs--right .el-tabs__nav-wrap.is-left.is-scrollable,.dark-mode .el-tabs--right .el-tabs__nav-wrap.is-right.is-scrollable{padding:30px 0}.dark-mode .el-tabs--left .el-tabs__nav-wrap.is-left::after,.dark-mode .el-tabs--left .el-tabs__nav-wrap.is-right::after,.dark-mode .el-tabs--right .el-tabs__nav-wrap.is-left::after,.dark-mode .el-tabs--right .el-tabs__nav-wrap.is-right::after{height:100%;width:2px;bottom:auto;top:0}.dark-mode .el-tabs--left .el-tabs__nav.is-left,.dark-mode .el-tabs--left .el-tabs__nav.is-right,.dark-mode .el-tabs--right .el-tabs__nav.is-left,.dark-mode .el-tabs--right .el-tabs__nav.is-right{float:none}.dark-mode .el-tabs--left .el-tabs__item.is-left,.dark-mode .el-tabs--left .el-tabs__item.is-right,.dark-mode .el-tabs--right .el-tabs__item.is-left,.dark-mode .el-tabs--right .el-tabs__item.is-right{display:block}.dark-mode .el-tabs--left.el-tabs--card .el-tabs__active-bar.is-left,.dark-mode .el-tabs--right.el-tabs--card .el-tabs__active-bar.is-right{display:none}.dark-mode .el-tabs--left .el-tabs__header.is-left{float:left;margin-bottom:0;margin-right:10px}.dark-mode .el-tabs--left .el-tabs__nav-wrap.is-left{margin-right:-1px}.dark-mode .el-tabs--left .el-tabs__item.is-left{text-align:right}.dark-mode .el-tabs--left.el-tabs--card .el-tabs__item.is-left{border-left:none;border-right:1px solid #7a7a7a;border-bottom:none;border-top:1px solid #7a7a7a;text-align:left}.dark-mode .el-tabs--left.el-tabs--card .el-tabs__item.is-left:first-child{border-right:1px solid #7a7a7a;border-top:none}.dark-mode .el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active{border:1px solid #7a7a7a;border-right-color:#fff;border-left:none;border-bottom:none}.dark-mode .el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:first-child{border-top:none}.dark-mode .el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:last-child{border-bottom:none}.dark-mode .el-tabs--left.el-tabs--card .el-tabs__nav{border-radius:4px 0 0 4px;border-bottom:1px solid #7a7a7a;border-right:none}.dark-mode .el-tabs--left.el-tabs--card .el-tabs__new-tab{float:none}.dark-mode .el-tabs--left.el-tabs--border-card .el-tabs__header.is-left{border-right:1px solid #dfe4ed}.dark-mode .el-tabs--left.el-tabs--border-card .el-tabs__item.is-left{border:1px solid transparent;margin:-1px 0 -1px -1px}.dark-mode .el-tabs--left.el-tabs--border-card .el-tabs__item.is-left.is-active{border-color:#d1dbe5 transparent}.dark-mode .el-tabs--right .el-tabs__header.is-right{float:right;margin-bottom:0;margin-left:10px}.dark-mode .el-tabs--right .el-tabs__nav-wrap.is-right{margin-left:-1px}.dark-mode .el-tabs--right .el-tabs__nav-wrap.is-right::after{left:0;right:auto}.dark-mode .el-tabs--right .el-tabs__active-bar.is-right{left:0}.dark-mode .el-tabs--right.el-tabs--card .el-tabs__item.is-right{border-bottom:none;border-top:1px solid #7a7a7a}.dark-mode .el-tabs--right.el-tabs--card .el-tabs__item.is-right:first-child{border-left:1px solid #7a7a7a;border-top:none}.dark-mode .el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active{border:1px solid #7a7a7a;border-left-color:#fff;border-right:none;border-bottom:none}.dark-mode .el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:first-child{border-top:none}.dark-mode .el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:last-child{border-bottom:none}.dark-mode .el-tabs--right.el-tabs--card .el-tabs__nav{border-radius:0 4px 4px 0;border-bottom:1px solid #7a7a7a;border-left:none}.dark-mode .el-tabs--right.el-tabs--border-card .el-tabs__header.is-right{border-left:1px solid #dfe4ed}.dark-mode .el-tabs--right.el-tabs--border-card .el-tabs__item.is-right{border:1px solid transparent;margin:-1px -1px -1px 0}.dark-mode .el-tabs--right.el-tabs--border-card .el-tabs__item.is-right.is-active{border-color:#d1dbe5 transparent}.dark-mode .slideInLeft-transition,.dark-mode .slideInRight-transition{display:inline-block}.dark-mode .slideInRight-enter{-webkit-animation:slideInRight-enter .3s;animation:slideInRight-enter .3s}.dark-mode .slideInRight-leave{position:absolute;left:0;right:0;-webkit-animation:slideInRight-leave .3s;animation:slideInRight-leave .3s}.dark-mode .slideInLeft-enter{-webkit-animation:slideInLeft-enter .3s;animation:slideInLeft-enter .3s}.dark-mode .slideInLeft-leave{position:absolute;left:0;right:0;-webkit-animation:slideInLeft-leave .3s;animation:slideInLeft-leave .3s}@-webkit-keyframes slideInRight-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes slideInRight-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes slideInRight-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}100%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}}@keyframes slideInRight-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}100%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}}@-webkit-keyframes slideInLeft-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes slideInLeft-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes slideInLeft-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}100%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%);opacity:0}}@keyframes slideInLeft-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}100%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%);opacity:0}}.dark-mode .el-tree{position:relative;cursor:default;background:#232222;color:#b8b8b8}.dark-mode .el-tree__empty-block{position:relative;min-height:60px;text-align:center;width:100%;height:100%}.dark-mode .el-tree__empty-text{position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);color:#bcbcbc;font-size:14px}.dark-mode .el-tree__drop-indicator{position:absolute;left:0;right:0;height:1px;background-color:#d71a1b}.dark-mode .el-tree-node{white-space:nowrap;outline:0}.dark-mode .el-tree-node:focus>.el-tree-node__content{background-color:#171315}.dark-mode .el-tree-node.is-drop-inner>.el-tree-node__content .el-tree-node__label{background-color:#d71a1b;color:#fff}.dark-mode .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}.dark-mode .el-tree-node__content>.el-tree-node__expand-icon{padding:6px}.dark-mode .el-tree-node__content>label.el-checkbox{margin-right:8px}.dark-mode .el-tree-node__content:hover{background-color:#171315}.dark-mode .el-tree.is-dragging .el-tree-node__content{cursor:move}.dark-mode .el-tree.is-dragging.is-drop-not-allow .el-tree-node__content{cursor:not-allowed}.dark-mode .el-tree-node__expand-icon{cursor:pointer;color:#ccc;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}.dark-mode .el-tree-node__expand-icon.expanded{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.dark-mode .el-tree-node__expand-icon.is-leaf{color:transparent;cursor:default}.dark-mode .el-tree-node__label{font-size:14px}.dark-mode .el-tree-node__loading-icon{margin-right:8px;font-size:14px;color:#ccc}.dark-mode .el-tree-node>.el-tree-node__children{overflow:hidden;background-color:transparent}.dark-mode .el-tree-node.is-expanded>.el-tree-node__children{display:block}.dark-mode .el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content{background-color:#312121}.dark-mode .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:#232222;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}.dark-mode .el-alert.is-light .el-alert__closebtn{color:#ccc}.dark-mode .el-alert.is-dark .el-alert__closebtn,.dark-mode .el-alert.is-dark .el-alert__description{color:#232222}.dark-mode .el-alert.is-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.dark-mode .el-alert--success.is-light{background-color:#2a3224;color:#67c23a}.dark-mode .el-alert--success.is-light .el-alert__description{color:#67c23a}.dark-mode .el-alert--success.is-dark{background-color:#67c23a;color:#232222}.dark-mode .el-alert--info.is-light{background-color:#323131;color:#b8b8b8}.dark-mode .el-alert--info.is-dark{background-color:#b8b8b8;color:#232222}.dark-mode .el-alert--info .el-alert__description{color:#b8b8b8}.dark-mode .el-alert--warning.is-light{background-color:#372f25;color:#e6a23c}.dark-mode .el-alert--warning.is-light .el-alert__description{color:#e6a23c}.dark-mode .el-alert--warning.is-dark{background-color:#e6a23c;color:#232222}.dark-mode .el-alert--error.is-light{background-color:#382929;color:#f56c6c}.dark-mode .el-alert--error.is-light .el-alert__description{color:#f56c6c}.dark-mode .el-alert--error.is-dark{background-color:#f56c6c;color:#232222}.dark-mode .el-alert__content{display:table-cell;padding:0 8px}.dark-mode .el-alert__icon{font-size:16px;width:16px}.dark-mode .el-alert__icon.is-big{font-size:28px;width:28px}.dark-mode .el-alert__title{font-size:13px;line-height:18px}.dark-mode .el-alert__title.is-bold{font-weight:700}.dark-mode .el-alert .el-alert__description{font-size:12px;margin:5px 0 0}.dark-mode .el-alert__closebtn{font-size:12px;opacity:1;position:absolute;top:12px;right:15px;cursor:pointer}.dark-mode .el-alert-fade-enter,.dark-mode .el-alert-fade-leave-active,.dark-mode .el-loading-fade-enter,.dark-mode .el-loading-fade-leave-active,.dark-mode .el-notification-fade-leave-active{opacity:0}.dark-mode .el-alert__closebtn.is-customed{font-style:normal;font-size:13px;top:9px}.dark-mode .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 #454545;position:fixed;background-color:#232222;-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}.dark-mode .el-notification.right{right:16px}.dark-mode .el-notification.left{left:16px}.dark-mode .el-notification__group{margin-left:13px;margin-right:8px}.dark-mode .el-notification__title{font-weight:700;font-size:16px;color:#fff;margin:0}.dark-mode .el-notification__content{font-size:14px;line-height:21px;margin:6px 0 0;color:#b8b8b8;text-align:justify}.dark-mode .el-notification__content p{margin:0}.dark-mode .el-notification__icon{height:24px;width:24px;font-size:24px}.dark-mode .el-notification__closeBtn{position:absolute;top:18px;right:15px;cursor:pointer;color:#bcbcbc;font-size:16px}.dark-mode .el-notification__closeBtn:hover{color:#b8b8b8}.dark-mode .el-notification .el-icon-success{color:#67c23a}.dark-mode .el-notification .el-icon-error{color:#f56c6c}.dark-mode .el-notification .el-icon-info{color:#b8b8b8}.dark-mode .el-notification .el-icon-warning{color:#e6a23c}.dark-mode .el-notification-fade-enter.right{right:0;-webkit-transform:translateX(100%);transform:translateX(100%)}.dark-mode .el-notification-fade-enter.left{left:0;-webkit-transform:translateX(-100%);transform:translateX(-100%)}.dark-mode .el-input-number{position:relative;display:inline-block;width:180px;line-height:38px}.dark-mode .el-input-number .el-input{display:block}.dark-mode .el-input-number .el-input__inner{-webkit-appearance:none;padding-left:50px;padding-right:50px;text-align:center}.dark-mode .el-input-number__decrease,.dark-mode .el-input-number__increase{position:absolute;z-index:1;top:1px;width:40px;height:auto;text-align:center;background:#171315;color:#b8b8b8;cursor:pointer;font-size:13px}.dark-mode .el-input-number__decrease:hover,.dark-mode .el-input-number__increase:hover{color:#d71a1b}.dark-mode .el-input-number__decrease:hover:not(.is-disabled)~.el-input .el-input__inner:not(.is-disabled),.dark-mode .el-input-number__increase:hover:not(.is-disabled)~.el-input .el-input__inner:not(.is-disabled){border-color:#d71a1b}.dark-mode .el-input-number__decrease.is-disabled,.dark-mode .el-input-number__increase.is-disabled{color:#ccc;cursor:not-allowed}.dark-mode .el-input-number__increase{right:1px;border-radius:0 4px 4px 0;border-left:1px solid #bebebe}.dark-mode .el-input-number__decrease{left:1px;border-radius:4px 0 0 4px;border-right:1px solid #bebebe}.dark-mode .el-input-number.is-disabled .el-input-number__decrease,.dark-mode .el-input-number.is-disabled .el-input-number__increase{border-color:#7a7a7a;color:#7a7a7a}.dark-mode .el-input-number.is-disabled .el-input-number__decrease:hover,.dark-mode .el-input-number.is-disabled .el-input-number__increase:hover{color:#7a7a7a;cursor:not-allowed}.dark-mode .el-input-number--medium{width:200px;line-height:34px}.dark-mode .el-input-number--medium .el-input-number__decrease,.dark-mode .el-input-number--medium .el-input-number__increase{width:36px;font-size:14px}.dark-mode .el-input-number--medium .el-input__inner{padding-left:43px;padding-right:43px}.dark-mode .el-input-number--small{width:130px;line-height:30px}.dark-mode .el-input-number--small .el-input-number__decrease,.dark-mode .el-input-number--small .el-input-number__increase{width:32px;font-size:13px}.dark-mode .el-input-number--small .el-input-number__decrease [class*=el-icon],.dark-mode .el-input-number--small .el-input-number__increase [class*=el-icon]{-webkit-transform:scale(.9);transform:scale(.9)}.dark-mode .el-input-number--small .el-input__inner{padding-left:39px;padding-right:39px}.dark-mode .el-input-number--mini{width:130px;line-height:26px}.dark-mode .el-input-number--mini .el-input-number__decrease,.dark-mode .el-input-number--mini .el-input-number__increase{width:28px;font-size:12px}.dark-mode .el-input-number--mini .el-input-number__decrease [class*=el-icon],.dark-mode .el-input-number--mini .el-input-number__increase [class*=el-icon]{-webkit-transform:scale(.8);transform:scale(.8)}.dark-mode .el-input-number--mini .el-input__inner{padding-left:35px;padding-right:35px}.dark-mode .el-input-number.is-without-controls .el-input__inner{padding-left:15px;padding-right:15px}.dark-mode .el-input-number.is-controls-right .el-input__inner{padding-left:15px;padding-right:50px}.dark-mode .el-input-number.is-controls-right .el-input-number__decrease,.dark-mode .el-input-number.is-controls-right .el-input-number__increase{height:auto;line-height:19px}.dark-mode .el-input-number.is-controls-right .el-input-number__decrease [class*=el-icon],.dark-mode .el-input-number.is-controls-right .el-input-number__increase [class*=el-icon]{-webkit-transform:scale(.8);transform:scale(.8)}.dark-mode .el-input-number.is-controls-right .el-input-number__increase{border-radius:0 4px 0 0;border-bottom:1px solid #bebebe}.dark-mode .el-input-number.is-controls-right .el-input-number__decrease{right:1px;bottom:1px;top:auto;left:auto;border-right:none;border-left:1px solid #bebebe;border-radius:0 0 4px}.dark-mode .el-input-number.is-controls-right[class*=medium] [class*=decrease],.dark-mode .el-input-number.is-controls-right[class*=medium] [class*=increase]{line-height:17px}.dark-mode .el-input-number.is-controls-right[class*=small] [class*=decrease],.dark-mode .el-input-number.is-controls-right[class*=small] [class*=increase]{line-height:15px}.dark-mode .el-input-number.is-controls-right[class*=mini] [class*=decrease],.dark-mode .el-input-number.is-controls-right[class*=mini] [class*=increase]{line-height:13px}.dark-mode .el-tooltip__popper{position:absolute;border-radius:4px;padding:10px;z-index:2000;font-size:12px;line-height:1.2;min-width:10px;word-wrap:break-word}.dark-mode .el-tooltip__popper .popper__arrow,.dark-mode .el-tooltip__popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.dark-mode .el-tooltip__popper .popper__arrow{border-width:6px}.dark-mode .el-tooltip__popper .popper__arrow::after{content:\" \";border-width:5px}.dark-mode .el-progress-bar__inner::after,.dark-mode .el-row::after,.dark-mode .el-row::before,.dark-mode .el-slider::after,.dark-mode .el-slider::before,.dark-mode .el-slider__button-wrapper::after,.dark-mode .el-upload-cover::after{content:\"\"}.dark-mode .el-tooltip__popper[x-placement^=top]{margin-bottom:12px}.dark-mode .el-tooltip__popper[x-placement^=top] .popper__arrow{bottom:-6px;border-top-color:#fff;border-bottom-width:0}.dark-mode .el-tooltip__popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-5px;border-top-color:#fff;border-bottom-width:0}.dark-mode .el-tooltip__popper[x-placement^=bottom]{margin-top:12px}.dark-mode .el-tooltip__popper[x-placement^=bottom] .popper__arrow{top:-6px;border-top-width:0;border-bottom-color:#fff}.dark-mode .el-tooltip__popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-5px;border-top-width:0;border-bottom-color:#fff}.dark-mode .el-tooltip__popper[x-placement^=right]{margin-left:12px}.dark-mode .el-tooltip__popper[x-placement^=right] .popper__arrow{left:-6px;border-right-color:#fff;border-left-width:0}.dark-mode .el-tooltip__popper[x-placement^=right] .popper__arrow::after{bottom:-5px;left:1px;border-right-color:#fff;border-left-width:0}.dark-mode .el-tooltip__popper[x-placement^=left]{margin-right:12px}.dark-mode .el-tooltip__popper[x-placement^=left] .popper__arrow{right:-6px;border-right-width:0;border-left-color:#fff}.dark-mode .el-tooltip__popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-5px;margin-left:-5px;border-right-width:0;border-left-color:#fff}.dark-mode .el-tooltip__popper.is-dark{background:#fff;color:#232222}.dark-mode .el-tooltip__popper.is-light{background:#232222;border:1px solid #fff}.dark-mode .el-tooltip__popper.is-light[x-placement^=top] .popper__arrow{border-top-color:#fff}.dark-mode .el-tooltip__popper.is-light[x-placement^=top] .popper__arrow::after{border-top-color:#232222}.dark-mode .el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow{border-bottom-color:#fff}.dark-mode .el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow::after{border-bottom-color:#232222}.dark-mode .el-tooltip__popper.is-light[x-placement^=left] .popper__arrow{border-left-color:#fff}.dark-mode .el-tooltip__popper.is-light[x-placement^=left] .popper__arrow::after{border-left-color:#232222}.dark-mode .el-tooltip__popper.is-light[x-placement^=right] .popper__arrow{border-right-color:#fff}.dark-mode .el-tooltip__popper.is-light[x-placement^=right] .popper__arrow::after{border-right-color:#232222}.dark-mode .el-slider::after,.dark-mode .el-slider::before{display:table}.dark-mode .el-slider__button-wrapper .el-tooltip,.dark-mode .el-slider__button-wrapper::after{vertical-align:middle;display:inline-block}.dark-mode .el-slider::after{clear:both}.dark-mode .el-slider__runway{width:100%;height:6px;margin:16px 0;background-color:#7a7a7a;border-radius:3px;position:relative;cursor:pointer;vertical-align:middle}.dark-mode .el-slider__runway.show-input{margin-right:160px;width:auto}.dark-mode .el-slider__runway.disabled{cursor:default}.dark-mode .el-slider__runway.disabled .el-slider__bar{background-color:#ccc}.dark-mode .el-slider__runway.disabled .el-slider__button{border-color:#ccc}.dark-mode .el-slider__runway.disabled .el-slider__button-wrapper.dragging,.dark-mode .el-slider__runway.disabled .el-slider__button-wrapper.hover,.dark-mode .el-slider__runway.disabled .el-slider__button-wrapper:hover{cursor:not-allowed}.dark-mode .el-slider__runway.disabled .el-slider__button.dragging,.dark-mode .el-slider__runway.disabled .el-slider__button.hover,.dark-mode .el-slider__runway.disabled .el-slider__button:hover{-webkit-transform:scale(1);transform:scale(1);cursor:not-allowed}.dark-mode .el-slider__button-wrapper,.dark-mode .el-slider__stop{-webkit-transform:translateX(-50%);position:absolute}.dark-mode .el-slider__input{float:right;margin-top:3px;width:130px}.dark-mode .el-slider__input.el-input-number--mini{margin-top:5px}.dark-mode .el-slider__input.el-input-number--medium{margin-top:0}.dark-mode .el-slider__input.el-input-number--large{margin-top:-2px}.dark-mode .el-slider__bar{height:6px;background-color:#d71a1b;border-top-left-radius:3px;border-bottom-left-radius:3px;position:absolute}.dark-mode .el-slider__button-wrapper{height:36px;width:36px;z-index:1001;top:-15px;transform:translateX(-50%);background-color:transparent;text-align:center;user-select:none;line-height:normal}.dark-mode .el-slider__button-wrapper::after{height:100%}.dark-mode .el-slider__button-wrapper.hover,.dark-mode .el-slider__button-wrapper:hover{cursor:-webkit-grab;cursor:grab}.dark-mode .el-slider__button-wrapper.dragging{cursor:-webkit-grabbing;cursor:grabbing}.dark-mode .el-slider__button{width:16px;height:16px;border:2px solid #d71a1b;background-color:#232222;border-radius:50%;-webkit-transition:.2s;transition:.2s;user-select:none}.dark-mode .el-image-viewer__btn,.dark-mode .el-step__icon-inner{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.dark-mode .el-slider__button.dragging,.dark-mode .el-slider__button.hover,.dark-mode .el-slider__button:hover{-webkit-transform:scale(1.2);transform:scale(1.2)}.dark-mode .el-slider__button.hover,.dark-mode .el-slider__button:hover{cursor:-webkit-grab;cursor:grab}.dark-mode .el-slider__button.dragging{cursor:-webkit-grabbing;cursor:grabbing}.dark-mode .el-slider__stop{height:6px;width:6px;border-radius:100%;background-color:#232222;transform:translateX(-50%)}.dark-mode .el-slider__marks{top:0;left:12px;width:18px;height:100%}.dark-mode .el-slider__marks-text{position:absolute;-webkit-transform:translateX(-50%);transform:translateX(-50%);font-size:14px;color:#b8b8b8;margin-top:15px}.dark-mode .el-slider.is-vertical{position:relative}.dark-mode .el-slider.is-vertical .el-slider__runway{width:6px;height:100%;margin:0 16px}.dark-mode .el-slider.is-vertical .el-slider__bar{width:6px;height:auto;border-radius:0 0 3px 3px}.dark-mode .el-slider.is-vertical .el-slider__button-wrapper{top:auto;left:-15px;-webkit-transform:translateY(50%);transform:translateY(50%)}.dark-mode .el-slider.is-vertical .el-slider__stop{-webkit-transform:translateY(50%);transform:translateY(50%)}.dark-mode .el-slider.is-vertical.el-slider--with-input{padding-bottom:58px}.dark-mode .el-slider.is-vertical.el-slider--with-input .el-slider__input{overflow:visible;float:none;position:absolute;bottom:22px;width:36px;margin-top:15px}.dark-mode .el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input__inner{text-align:center;padding-left:5px;padding-right:5px}.dark-mode .el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__decrease,.dark-mode .el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase{top:32px;margin-top:-1px;border:1px solid #bebebe;line-height:20px;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-transition:border-color .2s cubic-bezier(.645,.045,.355,1);transition:border-color .2s cubic-bezier(.645,.045,.355,1)}.dark-mode .el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__decrease{width:18px;right:18px;border-bottom-left-radius:4px}.dark-mode .el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase{width:19px;border-bottom-right-radius:4px}.dark-mode .el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase~.el-input .el-input__inner{border-bottom-left-radius:0;border-bottom-right-radius:0}.dark-mode .el-slider.is-vertical.el-slider--with-input .el-slider__input:hover .el-input-number__decrease,.dark-mode .el-slider.is-vertical.el-slider--with-input .el-slider__input:hover .el-input-number__increase{border-color:#ccc}.dark-mode .el-slider.is-vertical.el-slider--with-input .el-slider__input:active .el-input-number__decrease,.dark-mode .el-slider.is-vertical.el-slider--with-input .el-slider__input:active .el-input-number__increase{border-color:#d71a1b}.dark-mode .el-slider.is-vertical .el-slider__marks-text{margin-top:0;left:15px;-webkit-transform:translateY(50%);transform:translateY(50%)}.dark-mode .el-loading-parent--relative{position:relative!important}.dark-mode .el-loading-parent--hidden{overflow:hidden!important}.dark-mode .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}.dark-mode .el-loading-mask.is-fullscreen{position:fixed}.dark-mode .el-loading-mask.is-fullscreen .el-loading-spinner{margin-top:-25px}.dark-mode .el-loading-mask.is-fullscreen .el-loading-spinner .circular{height:50px;width:50px}.dark-mode .el-loading-spinner{top:50%;margin-top:-21px;width:100%;text-align:center;position:absolute}.dark-mode .el-col-pull-0,.dark-mode .el-col-pull-1,.dark-mode .el-col-pull-10,.dark-mode .el-col-pull-11,.dark-mode .el-col-pull-13,.dark-mode .el-col-pull-14,.dark-mode .el-col-pull-15,.dark-mode .el-col-pull-16,.dark-mode .el-col-pull-17,.dark-mode .el-col-pull-18,.dark-mode .el-col-pull-19,.dark-mode .el-col-pull-2,.dark-mode .el-col-pull-20,.dark-mode .el-col-pull-21,.dark-mode .el-col-pull-22,.dark-mode .el-col-pull-23,.dark-mode .el-col-pull-24,.dark-mode .el-col-pull-3,.dark-mode .el-col-pull-4,.dark-mode .el-col-pull-5,.dark-mode .el-col-pull-6,.dark-mode .el-col-pull-7,.dark-mode .el-col-pull-8,.dark-mode .el-col-pull-9,.dark-mode .el-col-push-0,.dark-mode .el-col-push-1,.dark-mode .el-col-push-10,.dark-mode .el-col-push-11,.dark-mode .el-col-push-12,.dark-mode .el-col-push-13,.dark-mode .el-col-push-14,.dark-mode .el-col-push-15,.dark-mode .el-col-push-16,.dark-mode .el-col-push-17,.dark-mode .el-col-push-18,.dark-mode .el-col-push-19,.dark-mode .el-col-push-2,.dark-mode .el-col-push-20,.dark-mode .el-col-push-21,.dark-mode .el-col-push-22,.dark-mode .el-col-push-23,.dark-mode .el-col-push-24,.dark-mode .el-col-push-3,.dark-mode .el-col-push-4,.dark-mode .el-col-push-5,.dark-mode .el-col-push-6,.dark-mode .el-col-push-7,.dark-mode .el-col-push-8,.dark-mode .el-col-push-9,.dark-mode .el-row{position:relative}.dark-mode .el-loading-spinner .el-loading-text{color:#d71a1b;margin:3px 0;font-size:14px}.dark-mode .el-loading-spinner .circular{height:42px;width:42px;-webkit-animation:loading-rotate 2s linear infinite;animation:loading-rotate 2s linear infinite}.dark-mode .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:#d71a1b;stroke-linecap:round}.dark-mode .el-loading-spinner i{color:#d71a1b}@-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}}.dark-mode .el-row{-webkit-box-sizing:border-box;box-sizing:border-box}.dark-mode .el-row::after,.dark-mode .el-row::before{display:table}.dark-mode .el-row::after{clear:both}.dark-mode .el-row--flex{display:-webkit-box;display:-ms-flexbox;display:flex}.dark-mode .el-col-0,.dark-mode .el-row--flex:after,.dark-mode .el-row--flex:before{display:none}.dark-mode .el-row--flex.is-justify-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.dark-mode .el-row--flex.is-justify-end{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.dark-mode .el-row--flex.is-justify-space-between{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.dark-mode .el-row--flex.is-justify-space-around{-ms-flex-pack:distribute;justify-content:space-around}.dark-mode .el-row--flex.is-align-middle{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.dark-mode .el-row--flex.is-align-bottom{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.dark-mode [class*=el-col-]{float:left;-webkit-box-sizing:border-box;box-sizing:border-box}.dark-mode .el-upload--picture-card,.dark-mode .el-upload-dragger{-webkit-box-sizing:border-box;cursor:pointer}.dark-mode .el-col-0{width:0%}.dark-mode .el-col-offset-0{margin-left:0}.dark-mode .el-col-pull-0{right:0}.dark-mode .el-col-push-0{left:0}.dark-mode .el-col-1{width:4.16667%}.dark-mode .el-col-offset-1{margin-left:4.16667%}.dark-mode .el-col-pull-1{right:4.16667%}.dark-mode .el-col-push-1{left:4.16667%}.dark-mode .el-col-2{width:8.33333%}.dark-mode .el-col-offset-2{margin-left:8.33333%}.dark-mode .el-col-pull-2{right:8.33333%}.dark-mode .el-col-push-2{left:8.33333%}.dark-mode .el-col-3{width:12.5%}.dark-mode .el-col-offset-3{margin-left:12.5%}.dark-mode .el-col-pull-3{right:12.5%}.dark-mode .el-col-push-3{left:12.5%}.dark-mode .el-col-4{width:16.66667%}.dark-mode .el-col-offset-4{margin-left:16.66667%}.dark-mode .el-col-pull-4{right:16.66667%}.dark-mode .el-col-push-4{left:16.66667%}.dark-mode .el-col-5{width:20.83333%}.dark-mode .el-col-offset-5{margin-left:20.83333%}.dark-mode .el-col-pull-5{right:20.83333%}.dark-mode .el-col-push-5{left:20.83333%}.dark-mode .el-col-6{width:25%}.dark-mode .el-col-offset-6{margin-left:25%}.dark-mode .el-col-pull-6{right:25%}.dark-mode .el-col-push-6{left:25%}.dark-mode .el-col-7{width:29.16667%}.dark-mode .el-col-offset-7{margin-left:29.16667%}.dark-mode .el-col-pull-7{right:29.16667%}.dark-mode .el-col-push-7{left:29.16667%}.dark-mode .el-col-8{width:33.33333%}.dark-mode .el-col-offset-8{margin-left:33.33333%}.dark-mode .el-col-pull-8{right:33.33333%}.dark-mode .el-col-push-8{left:33.33333%}.dark-mode .el-col-9{width:37.5%}.dark-mode .el-col-offset-9{margin-left:37.5%}.dark-mode .el-col-pull-9{right:37.5%}.dark-mode .el-col-push-9{left:37.5%}.dark-mode .el-col-10{width:41.66667%}.dark-mode .el-col-offset-10{margin-left:41.66667%}.dark-mode .el-col-pull-10{right:41.66667%}.dark-mode .el-col-push-10{left:41.66667%}.dark-mode .el-col-11{width:45.83333%}.dark-mode .el-col-offset-11{margin-left:45.83333%}.dark-mode .el-col-pull-11{right:45.83333%}.dark-mode .el-col-push-11{left:45.83333%}.dark-mode .el-col-12{width:50%}.dark-mode .el-col-offset-12{margin-left:50%}.dark-mode .el-col-pull-12{position:relative;right:50%}.dark-mode .el-col-push-12{left:50%}.dark-mode .el-col-13{width:54.16667%}.dark-mode .el-col-offset-13{margin-left:54.16667%}.dark-mode .el-col-pull-13{right:54.16667%}.dark-mode .el-col-push-13{left:54.16667%}.dark-mode .el-col-14{width:58.33333%}.dark-mode .el-col-offset-14{margin-left:58.33333%}.dark-mode .el-col-pull-14{right:58.33333%}.dark-mode .el-col-push-14{left:58.33333%}.dark-mode .el-col-15{width:62.5%}.dark-mode .el-col-offset-15{margin-left:62.5%}.dark-mode .el-col-pull-15{right:62.5%}.dark-mode .el-col-push-15{left:62.5%}.dark-mode .el-col-16{width:66.66667%}.dark-mode .el-col-offset-16{margin-left:66.66667%}.dark-mode .el-col-pull-16{right:66.66667%}.dark-mode .el-col-push-16{left:66.66667%}.dark-mode .el-col-17{width:70.83333%}.dark-mode .el-col-offset-17{margin-left:70.83333%}.dark-mode .el-col-pull-17{right:70.83333%}.dark-mode .el-col-push-17{left:70.83333%}.dark-mode .el-col-18{width:75%}.dark-mode .el-col-offset-18{margin-left:75%}.dark-mode .el-col-pull-18{right:75%}.dark-mode .el-col-push-18{left:75%}.dark-mode .el-col-19{width:79.16667%}.dark-mode .el-col-offset-19{margin-left:79.16667%}.dark-mode .el-col-pull-19{right:79.16667%}.dark-mode .el-col-push-19{left:79.16667%}.dark-mode .el-col-20{width:83.33333%}.dark-mode .el-col-offset-20{margin-left:83.33333%}.dark-mode .el-col-pull-20{right:83.33333%}.dark-mode .el-col-push-20{left:83.33333%}.dark-mode .el-col-21{width:87.5%}.dark-mode .el-col-offset-21{margin-left:87.5%}.dark-mode .el-col-pull-21{right:87.5%}.dark-mode .el-col-push-21{left:87.5%}.dark-mode .el-col-22{width:91.66667%}.dark-mode .el-col-offset-22{margin-left:91.66667%}.dark-mode .el-col-pull-22{right:91.66667%}.dark-mode .el-col-push-22{left:91.66667%}.dark-mode .el-col-23{width:95.83333%}.dark-mode .el-col-offset-23{margin-left:95.83333%}.dark-mode .el-col-pull-23{right:95.83333%}.dark-mode .el-col-push-23{left:95.83333%}.dark-mode .el-col-24{width:100%}.dark-mode .el-col-offset-24{margin-left:100%}.dark-mode .el-col-pull-24{right:100%}.dark-mode .el-col-push-24{left:100%}@media only screen and (max-width:767px){.dark-mode .el-col-xs-0{display:none;width:0%}.dark-mode .el-col-xs-offset-0{margin-left:0}.dark-mode .el-col-xs-pull-0{position:relative;right:0}.dark-mode .el-col-xs-push-0{position:relative;left:0}.dark-mode .el-col-xs-1{width:4.16667%}.dark-mode .el-col-xs-offset-1{margin-left:4.16667%}.dark-mode .el-col-xs-pull-1{position:relative;right:4.16667%}.dark-mode .el-col-xs-push-1{position:relative;left:4.16667%}.dark-mode .el-col-xs-2{width:8.33333%}.dark-mode .el-col-xs-offset-2{margin-left:8.33333%}.dark-mode .el-col-xs-pull-2{position:relative;right:8.33333%}.dark-mode .el-col-xs-push-2{position:relative;left:8.33333%}.dark-mode .el-col-xs-3{width:12.5%}.dark-mode .el-col-xs-offset-3{margin-left:12.5%}.dark-mode .el-col-xs-pull-3{position:relative;right:12.5%}.dark-mode .el-col-xs-push-3{position:relative;left:12.5%}.dark-mode .el-col-xs-4{width:16.66667%}.dark-mode .el-col-xs-offset-4{margin-left:16.66667%}.dark-mode .el-col-xs-pull-4{position:relative;right:16.66667%}.dark-mode .el-col-xs-push-4{position:relative;left:16.66667%}.dark-mode .el-col-xs-5{width:20.83333%}.dark-mode .el-col-xs-offset-5{margin-left:20.83333%}.dark-mode .el-col-xs-pull-5{position:relative;right:20.83333%}.dark-mode .el-col-xs-push-5{position:relative;left:20.83333%}.dark-mode .el-col-xs-6{width:25%}.dark-mode .el-col-xs-offset-6{margin-left:25%}.dark-mode .el-col-xs-pull-6{position:relative;right:25%}.dark-mode .el-col-xs-push-6{position:relative;left:25%}.dark-mode .el-col-xs-7{width:29.16667%}.dark-mode .el-col-xs-offset-7{margin-left:29.16667%}.dark-mode .el-col-xs-pull-7{position:relative;right:29.16667%}.dark-mode .el-col-xs-push-7{position:relative;left:29.16667%}.dark-mode .el-col-xs-8{width:33.33333%}.dark-mode .el-col-xs-offset-8{margin-left:33.33333%}.dark-mode .el-col-xs-pull-8{position:relative;right:33.33333%}.dark-mode .el-col-xs-push-8{position:relative;left:33.33333%}.dark-mode .el-col-xs-9{width:37.5%}.dark-mode .el-col-xs-offset-9{margin-left:37.5%}.dark-mode .el-col-xs-pull-9{position:relative;right:37.5%}.dark-mode .el-col-xs-push-9{position:relative;left:37.5%}.dark-mode .el-col-xs-10{width:41.66667%}.dark-mode .el-col-xs-offset-10{margin-left:41.66667%}.dark-mode .el-col-xs-pull-10{position:relative;right:41.66667%}.dark-mode .el-col-xs-push-10{position:relative;left:41.66667%}.dark-mode .el-col-xs-11{width:45.83333%}.dark-mode .el-col-xs-offset-11{margin-left:45.83333%}.dark-mode .el-col-xs-pull-11{position:relative;right:45.83333%}.dark-mode .el-col-xs-push-11{position:relative;left:45.83333%}.dark-mode .el-col-xs-12{width:50%}.dark-mode .el-col-xs-offset-12{margin-left:50%}.dark-mode .el-col-xs-pull-12{position:relative;right:50%}.dark-mode .el-col-xs-push-12{position:relative;left:50%}.dark-mode .el-col-xs-13{width:54.16667%}.dark-mode .el-col-xs-offset-13{margin-left:54.16667%}.dark-mode .el-col-xs-pull-13{position:relative;right:54.16667%}.dark-mode .el-col-xs-push-13{position:relative;left:54.16667%}.dark-mode .el-col-xs-14{width:58.33333%}.dark-mode .el-col-xs-offset-14{margin-left:58.33333%}.dark-mode .el-col-xs-pull-14{position:relative;right:58.33333%}.dark-mode .el-col-xs-push-14{position:relative;left:58.33333%}.dark-mode .el-col-xs-15{width:62.5%}.dark-mode .el-col-xs-offset-15{margin-left:62.5%}.dark-mode .el-col-xs-pull-15{position:relative;right:62.5%}.dark-mode .el-col-xs-push-15{position:relative;left:62.5%}.dark-mode .el-col-xs-16{width:66.66667%}.dark-mode .el-col-xs-offset-16{margin-left:66.66667%}.dark-mode .el-col-xs-pull-16{position:relative;right:66.66667%}.dark-mode .el-col-xs-push-16{position:relative;left:66.66667%}.dark-mode .el-col-xs-17{width:70.83333%}.dark-mode .el-col-xs-offset-17{margin-left:70.83333%}.dark-mode .el-col-xs-pull-17{position:relative;right:70.83333%}.dark-mode .el-col-xs-push-17{position:relative;left:70.83333%}.dark-mode .el-col-xs-18{width:75%}.dark-mode .el-col-xs-offset-18{margin-left:75%}.dark-mode .el-col-xs-pull-18{position:relative;right:75%}.dark-mode .el-col-xs-push-18{position:relative;left:75%}.dark-mode .el-col-xs-19{width:79.16667%}.dark-mode .el-col-xs-offset-19{margin-left:79.16667%}.dark-mode .el-col-xs-pull-19{position:relative;right:79.16667%}.dark-mode .el-col-xs-push-19{position:relative;left:79.16667%}.dark-mode .el-col-xs-20{width:83.33333%}.dark-mode .el-col-xs-offset-20{margin-left:83.33333%}.dark-mode .el-col-xs-pull-20{position:relative;right:83.33333%}.dark-mode .el-col-xs-push-20{position:relative;left:83.33333%}.dark-mode .el-col-xs-21{width:87.5%}.dark-mode .el-col-xs-offset-21{margin-left:87.5%}.dark-mode .el-col-xs-pull-21{position:relative;right:87.5%}.dark-mode .el-col-xs-push-21{position:relative;left:87.5%}.dark-mode .el-col-xs-22{width:91.66667%}.dark-mode .el-col-xs-offset-22{margin-left:91.66667%}.dark-mode .el-col-xs-pull-22{position:relative;right:91.66667%}.dark-mode .el-col-xs-push-22{position:relative;left:91.66667%}.dark-mode .el-col-xs-23{width:95.83333%}.dark-mode .el-col-xs-offset-23{margin-left:95.83333%}.dark-mode .el-col-xs-pull-23{position:relative;right:95.83333%}.dark-mode .el-col-xs-push-23{position:relative;left:95.83333%}.dark-mode .el-col-xs-24{width:100%}.dark-mode .el-col-xs-offset-24{margin-left:100%}.dark-mode .el-col-xs-pull-24{position:relative;right:100%}.dark-mode .el-col-xs-push-24{position:relative;left:100%}}@media only screen and (min-width:768px){.dark-mode .el-col-sm-0{display:none;width:0%}.dark-mode .el-col-sm-offset-0{margin-left:0}.dark-mode .el-col-sm-pull-0{position:relative;right:0}.dark-mode .el-col-sm-push-0{position:relative;left:0}.dark-mode .el-col-sm-1{width:4.16667%}.dark-mode .el-col-sm-offset-1{margin-left:4.16667%}.dark-mode .el-col-sm-pull-1{position:relative;right:4.16667%}.dark-mode .el-col-sm-push-1{position:relative;left:4.16667%}.dark-mode .el-col-sm-2{width:8.33333%}.dark-mode .el-col-sm-offset-2{margin-left:8.33333%}.dark-mode .el-col-sm-pull-2{position:relative;right:8.33333%}.dark-mode .el-col-sm-push-2{position:relative;left:8.33333%}.dark-mode .el-col-sm-3{width:12.5%}.dark-mode .el-col-sm-offset-3{margin-left:12.5%}.dark-mode .el-col-sm-pull-3{position:relative;right:12.5%}.dark-mode .el-col-sm-push-3{position:relative;left:12.5%}.dark-mode .el-col-sm-4{width:16.66667%}.dark-mode .el-col-sm-offset-4{margin-left:16.66667%}.dark-mode .el-col-sm-pull-4{position:relative;right:16.66667%}.dark-mode .el-col-sm-push-4{position:relative;left:16.66667%}.dark-mode .el-col-sm-5{width:20.83333%}.dark-mode .el-col-sm-offset-5{margin-left:20.83333%}.dark-mode .el-col-sm-pull-5{position:relative;right:20.83333%}.dark-mode .el-col-sm-push-5{position:relative;left:20.83333%}.dark-mode .el-col-sm-6{width:25%}.dark-mode .el-col-sm-offset-6{margin-left:25%}.dark-mode .el-col-sm-pull-6{position:relative;right:25%}.dark-mode .el-col-sm-push-6{position:relative;left:25%}.dark-mode .el-col-sm-7{width:29.16667%}.dark-mode .el-col-sm-offset-7{margin-left:29.16667%}.dark-mode .el-col-sm-pull-7{position:relative;right:29.16667%}.dark-mode .el-col-sm-push-7{position:relative;left:29.16667%}.dark-mode .el-col-sm-8{width:33.33333%}.dark-mode .el-col-sm-offset-8{margin-left:33.33333%}.dark-mode .el-col-sm-pull-8{position:relative;right:33.33333%}.dark-mode .el-col-sm-push-8{position:relative;left:33.33333%}.dark-mode .el-col-sm-9{width:37.5%}.dark-mode .el-col-sm-offset-9{margin-left:37.5%}.dark-mode .el-col-sm-pull-9{position:relative;right:37.5%}.dark-mode .el-col-sm-push-9{position:relative;left:37.5%}.dark-mode .el-col-sm-10{width:41.66667%}.dark-mode .el-col-sm-offset-10{margin-left:41.66667%}.dark-mode .el-col-sm-pull-10{position:relative;right:41.66667%}.dark-mode .el-col-sm-push-10{position:relative;left:41.66667%}.dark-mode .el-col-sm-11{width:45.83333%}.dark-mode .el-col-sm-offset-11{margin-left:45.83333%}.dark-mode .el-col-sm-pull-11{position:relative;right:45.83333%}.dark-mode .el-col-sm-push-11{position:relative;left:45.83333%}.dark-mode .el-col-sm-12{width:50%}.dark-mode .el-col-sm-offset-12{margin-left:50%}.dark-mode .el-col-sm-pull-12{position:relative;right:50%}.dark-mode .el-col-sm-push-12{position:relative;left:50%}.dark-mode .el-col-sm-13{width:54.16667%}.dark-mode .el-col-sm-offset-13{margin-left:54.16667%}.dark-mode .el-col-sm-pull-13{position:relative;right:54.16667%}.dark-mode .el-col-sm-push-13{position:relative;left:54.16667%}.dark-mode .el-col-sm-14{width:58.33333%}.dark-mode .el-col-sm-offset-14{margin-left:58.33333%}.dark-mode .el-col-sm-pull-14{position:relative;right:58.33333%}.dark-mode .el-col-sm-push-14{position:relative;left:58.33333%}.dark-mode .el-col-sm-15{width:62.5%}.dark-mode .el-col-sm-offset-15{margin-left:62.5%}.dark-mode .el-col-sm-pull-15{position:relative;right:62.5%}.dark-mode .el-col-sm-push-15{position:relative;left:62.5%}.dark-mode .el-col-sm-16{width:66.66667%}.dark-mode .el-col-sm-offset-16{margin-left:66.66667%}.dark-mode .el-col-sm-pull-16{position:relative;right:66.66667%}.dark-mode .el-col-sm-push-16{position:relative;left:66.66667%}.dark-mode .el-col-sm-17{width:70.83333%}.dark-mode .el-col-sm-offset-17{margin-left:70.83333%}.dark-mode .el-col-sm-pull-17{position:relative;right:70.83333%}.dark-mode .el-col-sm-push-17{position:relative;left:70.83333%}.dark-mode .el-col-sm-18{width:75%}.dark-mode .el-col-sm-offset-18{margin-left:75%}.dark-mode .el-col-sm-pull-18{position:relative;right:75%}.dark-mode .el-col-sm-push-18{position:relative;left:75%}.dark-mode .el-col-sm-19{width:79.16667%}.dark-mode .el-col-sm-offset-19{margin-left:79.16667%}.dark-mode .el-col-sm-pull-19{position:relative;right:79.16667%}.dark-mode .el-col-sm-push-19{position:relative;left:79.16667%}.dark-mode .el-col-sm-20{width:83.33333%}.dark-mode .el-col-sm-offset-20{margin-left:83.33333%}.dark-mode .el-col-sm-pull-20{position:relative;right:83.33333%}.dark-mode .el-col-sm-push-20{position:relative;left:83.33333%}.dark-mode .el-col-sm-21{width:87.5%}.dark-mode .el-col-sm-offset-21{margin-left:87.5%}.dark-mode .el-col-sm-pull-21{position:relative;right:87.5%}.dark-mode .el-col-sm-push-21{position:relative;left:87.5%}.dark-mode .el-col-sm-22{width:91.66667%}.dark-mode .el-col-sm-offset-22{margin-left:91.66667%}.dark-mode .el-col-sm-pull-22{position:relative;right:91.66667%}.dark-mode .el-col-sm-push-22{position:relative;left:91.66667%}.dark-mode .el-col-sm-23{width:95.83333%}.dark-mode .el-col-sm-offset-23{margin-left:95.83333%}.dark-mode .el-col-sm-pull-23{position:relative;right:95.83333%}.dark-mode .el-col-sm-push-23{position:relative;left:95.83333%}.dark-mode .el-col-sm-24{width:100%}.dark-mode .el-col-sm-offset-24{margin-left:100%}.dark-mode .el-col-sm-pull-24{position:relative;right:100%}.dark-mode .el-col-sm-push-24{position:relative;left:100%}}@media only screen and (min-width:992px){.dark-mode .el-col-md-0{display:none;width:0%}.dark-mode .el-col-md-offset-0{margin-left:0}.dark-mode .el-col-md-pull-0{position:relative;right:0}.dark-mode .el-col-md-push-0{position:relative;left:0}.dark-mode .el-col-md-1{width:4.16667%}.dark-mode .el-col-md-offset-1{margin-left:4.16667%}.dark-mode .el-col-md-pull-1{position:relative;right:4.16667%}.dark-mode .el-col-md-push-1{position:relative;left:4.16667%}.dark-mode .el-col-md-2{width:8.33333%}.dark-mode .el-col-md-offset-2{margin-left:8.33333%}.dark-mode .el-col-md-pull-2{position:relative;right:8.33333%}.dark-mode .el-col-md-push-2{position:relative;left:8.33333%}.dark-mode .el-col-md-3{width:12.5%}.dark-mode .el-col-md-offset-3{margin-left:12.5%}.dark-mode .el-col-md-pull-3{position:relative;right:12.5%}.dark-mode .el-col-md-push-3{position:relative;left:12.5%}.dark-mode .el-col-md-4{width:16.66667%}.dark-mode .el-col-md-offset-4{margin-left:16.66667%}.dark-mode .el-col-md-pull-4{position:relative;right:16.66667%}.dark-mode .el-col-md-push-4{position:relative;left:16.66667%}.dark-mode .el-col-md-5{width:20.83333%}.dark-mode .el-col-md-offset-5{margin-left:20.83333%}.dark-mode .el-col-md-pull-5{position:relative;right:20.83333%}.dark-mode .el-col-md-push-5{position:relative;left:20.83333%}.dark-mode .el-col-md-6{width:25%}.dark-mode .el-col-md-offset-6{margin-left:25%}.dark-mode .el-col-md-pull-6{position:relative;right:25%}.dark-mode .el-col-md-push-6{position:relative;left:25%}.dark-mode .el-col-md-7{width:29.16667%}.dark-mode .el-col-md-offset-7{margin-left:29.16667%}.dark-mode .el-col-md-pull-7{position:relative;right:29.16667%}.dark-mode .el-col-md-push-7{position:relative;left:29.16667%}.dark-mode .el-col-md-8{width:33.33333%}.dark-mode .el-col-md-offset-8{margin-left:33.33333%}.dark-mode .el-col-md-pull-8{position:relative;right:33.33333%}.dark-mode .el-col-md-push-8{position:relative;left:33.33333%}.dark-mode .el-col-md-9{width:37.5%}.dark-mode .el-col-md-offset-9{margin-left:37.5%}.dark-mode .el-col-md-pull-9{position:relative;right:37.5%}.dark-mode .el-col-md-push-9{position:relative;left:37.5%}.dark-mode .el-col-md-10{width:41.66667%}.dark-mode .el-col-md-offset-10{margin-left:41.66667%}.dark-mode .el-col-md-pull-10{position:relative;right:41.66667%}.dark-mode .el-col-md-push-10{position:relative;left:41.66667%}.dark-mode .el-col-md-11{width:45.83333%}.dark-mode .el-col-md-offset-11{margin-left:45.83333%}.dark-mode .el-col-md-pull-11{position:relative;right:45.83333%}.dark-mode .el-col-md-push-11{position:relative;left:45.83333%}.dark-mode .el-col-md-12{width:50%}.dark-mode .el-col-md-offset-12{margin-left:50%}.dark-mode .el-col-md-pull-12{position:relative;right:50%}.dark-mode .el-col-md-push-12{position:relative;left:50%}.dark-mode .el-col-md-13{width:54.16667%}.dark-mode .el-col-md-offset-13{margin-left:54.16667%}.dark-mode .el-col-md-pull-13{position:relative;right:54.16667%}.dark-mode .el-col-md-push-13{position:relative;left:54.16667%}.dark-mode .el-col-md-14{width:58.33333%}.dark-mode .el-col-md-offset-14{margin-left:58.33333%}.dark-mode .el-col-md-pull-14{position:relative;right:58.33333%}.dark-mode .el-col-md-push-14{position:relative;left:58.33333%}.dark-mode .el-col-md-15{width:62.5%}.dark-mode .el-col-md-offset-15{margin-left:62.5%}.dark-mode .el-col-md-pull-15{position:relative;right:62.5%}.dark-mode .el-col-md-push-15{position:relative;left:62.5%}.dark-mode .el-col-md-16{width:66.66667%}.dark-mode .el-col-md-offset-16{margin-left:66.66667%}.dark-mode .el-col-md-pull-16{position:relative;right:66.66667%}.dark-mode .el-col-md-push-16{position:relative;left:66.66667%}.dark-mode .el-col-md-17{width:70.83333%}.dark-mode .el-col-md-offset-17{margin-left:70.83333%}.dark-mode .el-col-md-pull-17{position:relative;right:70.83333%}.dark-mode .el-col-md-push-17{position:relative;left:70.83333%}.dark-mode .el-col-md-18{width:75%}.dark-mode .el-col-md-offset-18{margin-left:75%}.dark-mode .el-col-md-pull-18{position:relative;right:75%}.dark-mode .el-col-md-push-18{position:relative;left:75%}.dark-mode .el-col-md-19{width:79.16667%}.dark-mode .el-col-md-offset-19{margin-left:79.16667%}.dark-mode .el-col-md-pull-19{position:relative;right:79.16667%}.dark-mode .el-col-md-push-19{position:relative;left:79.16667%}.dark-mode .el-col-md-20{width:83.33333%}.dark-mode .el-col-md-offset-20{margin-left:83.33333%}.dark-mode .el-col-md-pull-20{position:relative;right:83.33333%}.dark-mode .el-col-md-push-20{position:relative;left:83.33333%}.dark-mode .el-col-md-21{width:87.5%}.dark-mode .el-col-md-offset-21{margin-left:87.5%}.dark-mode .el-col-md-pull-21{position:relative;right:87.5%}.dark-mode .el-col-md-push-21{position:relative;left:87.5%}.dark-mode .el-col-md-22{width:91.66667%}.dark-mode .el-col-md-offset-22{margin-left:91.66667%}.dark-mode .el-col-md-pull-22{position:relative;right:91.66667%}.dark-mode .el-col-md-push-22{position:relative;left:91.66667%}.dark-mode .el-col-md-23{width:95.83333%}.dark-mode .el-col-md-offset-23{margin-left:95.83333%}.dark-mode .el-col-md-pull-23{position:relative;right:95.83333%}.dark-mode .el-col-md-push-23{position:relative;left:95.83333%}.dark-mode .el-col-md-24{width:100%}.dark-mode .el-col-md-offset-24{margin-left:100%}.dark-mode .el-col-md-pull-24{position:relative;right:100%}.dark-mode .el-col-md-push-24{position:relative;left:100%}}@media only screen and (min-width:1200px){.dark-mode .el-col-lg-0{display:none;width:0%}.dark-mode .el-col-lg-offset-0{margin-left:0}.dark-mode .el-col-lg-pull-0{position:relative;right:0}.dark-mode .el-col-lg-push-0{position:relative;left:0}.dark-mode .el-col-lg-1{width:4.16667%}.dark-mode .el-col-lg-offset-1{margin-left:4.16667%}.dark-mode .el-col-lg-pull-1{position:relative;right:4.16667%}.dark-mode .el-col-lg-push-1{position:relative;left:4.16667%}.dark-mode .el-col-lg-2{width:8.33333%}.dark-mode .el-col-lg-offset-2{margin-left:8.33333%}.dark-mode .el-col-lg-pull-2{position:relative;right:8.33333%}.dark-mode .el-col-lg-push-2{position:relative;left:8.33333%}.dark-mode .el-col-lg-3{width:12.5%}.dark-mode .el-col-lg-offset-3{margin-left:12.5%}.dark-mode .el-col-lg-pull-3{position:relative;right:12.5%}.dark-mode .el-col-lg-push-3{position:relative;left:12.5%}.dark-mode .el-col-lg-4{width:16.66667%}.dark-mode .el-col-lg-offset-4{margin-left:16.66667%}.dark-mode .el-col-lg-pull-4{position:relative;right:16.66667%}.dark-mode .el-col-lg-push-4{position:relative;left:16.66667%}.dark-mode .el-col-lg-5{width:20.83333%}.dark-mode .el-col-lg-offset-5{margin-left:20.83333%}.dark-mode .el-col-lg-pull-5{position:relative;right:20.83333%}.dark-mode .el-col-lg-push-5{position:relative;left:20.83333%}.dark-mode .el-col-lg-6{width:25%}.dark-mode .el-col-lg-offset-6{margin-left:25%}.dark-mode .el-col-lg-pull-6{position:relative;right:25%}.dark-mode .el-col-lg-push-6{position:relative;left:25%}.dark-mode .el-col-lg-7{width:29.16667%}.dark-mode .el-col-lg-offset-7{margin-left:29.16667%}.dark-mode .el-col-lg-pull-7{position:relative;right:29.16667%}.dark-mode .el-col-lg-push-7{position:relative;left:29.16667%}.dark-mode .el-col-lg-8{width:33.33333%}.dark-mode .el-col-lg-offset-8{margin-left:33.33333%}.dark-mode .el-col-lg-pull-8{position:relative;right:33.33333%}.dark-mode .el-col-lg-push-8{position:relative;left:33.33333%}.dark-mode .el-col-lg-9{width:37.5%}.dark-mode .el-col-lg-offset-9{margin-left:37.5%}.dark-mode .el-col-lg-pull-9{position:relative;right:37.5%}.dark-mode .el-col-lg-push-9{position:relative;left:37.5%}.dark-mode .el-col-lg-10{width:41.66667%}.dark-mode .el-col-lg-offset-10{margin-left:41.66667%}.dark-mode .el-col-lg-pull-10{position:relative;right:41.66667%}.dark-mode .el-col-lg-push-10{position:relative;left:41.66667%}.dark-mode .el-col-lg-11{width:45.83333%}.dark-mode .el-col-lg-offset-11{margin-left:45.83333%}.dark-mode .el-col-lg-pull-11{position:relative;right:45.83333%}.dark-mode .el-col-lg-push-11{position:relative;left:45.83333%}.dark-mode .el-col-lg-12{width:50%}.dark-mode .el-col-lg-offset-12{margin-left:50%}.dark-mode .el-col-lg-pull-12{position:relative;right:50%}.dark-mode .el-col-lg-push-12{position:relative;left:50%}.dark-mode .el-col-lg-13{width:54.16667%}.dark-mode .el-col-lg-offset-13{margin-left:54.16667%}.dark-mode .el-col-lg-pull-13{position:relative;right:54.16667%}.dark-mode .el-col-lg-push-13{position:relative;left:54.16667%}.dark-mode .el-col-lg-14{width:58.33333%}.dark-mode .el-col-lg-offset-14{margin-left:58.33333%}.dark-mode .el-col-lg-pull-14{position:relative;right:58.33333%}.dark-mode .el-col-lg-push-14{position:relative;left:58.33333%}.dark-mode .el-col-lg-15{width:62.5%}.dark-mode .el-col-lg-offset-15{margin-left:62.5%}.dark-mode .el-col-lg-pull-15{position:relative;right:62.5%}.dark-mode .el-col-lg-push-15{position:relative;left:62.5%}.dark-mode .el-col-lg-16{width:66.66667%}.dark-mode .el-col-lg-offset-16{margin-left:66.66667%}.dark-mode .el-col-lg-pull-16{position:relative;right:66.66667%}.dark-mode .el-col-lg-push-16{position:relative;left:66.66667%}.dark-mode .el-col-lg-17{width:70.83333%}.dark-mode .el-col-lg-offset-17{margin-left:70.83333%}.dark-mode .el-col-lg-pull-17{position:relative;right:70.83333%}.dark-mode .el-col-lg-push-17{position:relative;left:70.83333%}.dark-mode .el-col-lg-18{width:75%}.dark-mode .el-col-lg-offset-18{margin-left:75%}.dark-mode .el-col-lg-pull-18{position:relative;right:75%}.dark-mode .el-col-lg-push-18{position:relative;left:75%}.dark-mode .el-col-lg-19{width:79.16667%}.dark-mode .el-col-lg-offset-19{margin-left:79.16667%}.dark-mode .el-col-lg-pull-19{position:relative;right:79.16667%}.dark-mode .el-col-lg-push-19{position:relative;left:79.16667%}.dark-mode .el-col-lg-20{width:83.33333%}.dark-mode .el-col-lg-offset-20{margin-left:83.33333%}.dark-mode .el-col-lg-pull-20{position:relative;right:83.33333%}.dark-mode .el-col-lg-push-20{position:relative;left:83.33333%}.dark-mode .el-col-lg-21{width:87.5%}.dark-mode .el-col-lg-offset-21{margin-left:87.5%}.dark-mode .el-col-lg-pull-21{position:relative;right:87.5%}.dark-mode .el-col-lg-push-21{position:relative;left:87.5%}.dark-mode .el-col-lg-22{width:91.66667%}.dark-mode .el-col-lg-offset-22{margin-left:91.66667%}.dark-mode .el-col-lg-pull-22{position:relative;right:91.66667%}.dark-mode .el-col-lg-push-22{position:relative;left:91.66667%}.dark-mode .el-col-lg-23{width:95.83333%}.dark-mode .el-col-lg-offset-23{margin-left:95.83333%}.dark-mode .el-col-lg-pull-23{position:relative;right:95.83333%}.dark-mode .el-col-lg-push-23{position:relative;left:95.83333%}.dark-mode .el-col-lg-24{width:100%}.dark-mode .el-col-lg-offset-24{margin-left:100%}.dark-mode .el-col-lg-pull-24{position:relative;right:100%}.dark-mode .el-col-lg-push-24{position:relative;left:100%}}@media only screen and (min-width:1920px){.dark-mode .el-col-xl-0{display:none;width:0%}.dark-mode .el-col-xl-offset-0{margin-left:0}.dark-mode .el-col-xl-pull-0{position:relative;right:0}.dark-mode .el-col-xl-push-0{position:relative;left:0}.dark-mode .el-col-xl-1{width:4.16667%}.dark-mode .el-col-xl-offset-1{margin-left:4.16667%}.dark-mode .el-col-xl-pull-1{position:relative;right:4.16667%}.dark-mode .el-col-xl-push-1{position:relative;left:4.16667%}.dark-mode .el-col-xl-2{width:8.33333%}.dark-mode .el-col-xl-offset-2{margin-left:8.33333%}.dark-mode .el-col-xl-pull-2{position:relative;right:8.33333%}.dark-mode .el-col-xl-push-2{position:relative;left:8.33333%}.dark-mode .el-col-xl-3{width:12.5%}.dark-mode .el-col-xl-offset-3{margin-left:12.5%}.dark-mode .el-col-xl-pull-3{position:relative;right:12.5%}.dark-mode .el-col-xl-push-3{position:relative;left:12.5%}.dark-mode .el-col-xl-4{width:16.66667%}.dark-mode .el-col-xl-offset-4{margin-left:16.66667%}.dark-mode .el-col-xl-pull-4{position:relative;right:16.66667%}.dark-mode .el-col-xl-push-4{position:relative;left:16.66667%}.dark-mode .el-col-xl-5{width:20.83333%}.dark-mode .el-col-xl-offset-5{margin-left:20.83333%}.dark-mode .el-col-xl-pull-5{position:relative;right:20.83333%}.dark-mode .el-col-xl-push-5{position:relative;left:20.83333%}.dark-mode .el-col-xl-6{width:25%}.dark-mode .el-col-xl-offset-6{margin-left:25%}.dark-mode .el-col-xl-pull-6{position:relative;right:25%}.dark-mode .el-col-xl-push-6{position:relative;left:25%}.dark-mode .el-col-xl-7{width:29.16667%}.dark-mode .el-col-xl-offset-7{margin-left:29.16667%}.dark-mode .el-col-xl-pull-7{position:relative;right:29.16667%}.dark-mode .el-col-xl-push-7{position:relative;left:29.16667%}.dark-mode .el-col-xl-8{width:33.33333%}.dark-mode .el-col-xl-offset-8{margin-left:33.33333%}.dark-mode .el-col-xl-pull-8{position:relative;right:33.33333%}.dark-mode .el-col-xl-push-8{position:relative;left:33.33333%}.dark-mode .el-col-xl-9{width:37.5%}.dark-mode .el-col-xl-offset-9{margin-left:37.5%}.dark-mode .el-col-xl-pull-9{position:relative;right:37.5%}.dark-mode .el-col-xl-push-9{position:relative;left:37.5%}.dark-mode .el-col-xl-10{width:41.66667%}.dark-mode .el-col-xl-offset-10{margin-left:41.66667%}.dark-mode .el-col-xl-pull-10{position:relative;right:41.66667%}.dark-mode .el-col-xl-push-10{position:relative;left:41.66667%}.dark-mode .el-col-xl-11{width:45.83333%}.dark-mode .el-col-xl-offset-11{margin-left:45.83333%}.dark-mode .el-col-xl-pull-11{position:relative;right:45.83333%}.dark-mode .el-col-xl-push-11{position:relative;left:45.83333%}.dark-mode .el-col-xl-12{width:50%}.dark-mode .el-col-xl-offset-12{margin-left:50%}.dark-mode .el-col-xl-pull-12{position:relative;right:50%}.dark-mode .el-col-xl-push-12{position:relative;left:50%}.dark-mode .el-col-xl-13{width:54.16667%}.dark-mode .el-col-xl-offset-13{margin-left:54.16667%}.dark-mode .el-col-xl-pull-13{position:relative;right:54.16667%}.dark-mode .el-col-xl-push-13{position:relative;left:54.16667%}.dark-mode .el-col-xl-14{width:58.33333%}.dark-mode .el-col-xl-offset-14{margin-left:58.33333%}.dark-mode .el-col-xl-pull-14{position:relative;right:58.33333%}.dark-mode .el-col-xl-push-14{position:relative;left:58.33333%}.dark-mode .el-col-xl-15{width:62.5%}.dark-mode .el-col-xl-offset-15{margin-left:62.5%}.dark-mode .el-col-xl-pull-15{position:relative;right:62.5%}.dark-mode .el-col-xl-push-15{position:relative;left:62.5%}.dark-mode .el-col-xl-16{width:66.66667%}.dark-mode .el-col-xl-offset-16{margin-left:66.66667%}.dark-mode .el-col-xl-pull-16{position:relative;right:66.66667%}.dark-mode .el-col-xl-push-16{position:relative;left:66.66667%}.dark-mode .el-col-xl-17{width:70.83333%}.dark-mode .el-col-xl-offset-17{margin-left:70.83333%}.dark-mode .el-col-xl-pull-17{position:relative;right:70.83333%}.dark-mode .el-col-xl-push-17{position:relative;left:70.83333%}.dark-mode .el-col-xl-18{width:75%}.dark-mode .el-col-xl-offset-18{margin-left:75%}.dark-mode .el-col-xl-pull-18{position:relative;right:75%}.dark-mode .el-col-xl-push-18{position:relative;left:75%}.dark-mode .el-col-xl-19{width:79.16667%}.dark-mode .el-col-xl-offset-19{margin-left:79.16667%}.dark-mode .el-col-xl-pull-19{position:relative;right:79.16667%}.dark-mode .el-col-xl-push-19{position:relative;left:79.16667%}.dark-mode .el-col-xl-20{width:83.33333%}.dark-mode .el-col-xl-offset-20{margin-left:83.33333%}.dark-mode .el-col-xl-pull-20{position:relative;right:83.33333%}.dark-mode .el-col-xl-push-20{position:relative;left:83.33333%}.dark-mode .el-col-xl-21{width:87.5%}.dark-mode .el-col-xl-offset-21{margin-left:87.5%}.dark-mode .el-col-xl-pull-21{position:relative;right:87.5%}.dark-mode .el-col-xl-push-21{position:relative;left:87.5%}.dark-mode .el-col-xl-22{width:91.66667%}.dark-mode .el-col-xl-offset-22{margin-left:91.66667%}.dark-mode .el-col-xl-pull-22{position:relative;right:91.66667%}.dark-mode .el-col-xl-push-22{position:relative;left:91.66667%}.dark-mode .el-col-xl-23{width:95.83333%}.dark-mode .el-col-xl-offset-23{margin-left:95.83333%}.dark-mode .el-col-xl-pull-23{position:relative;right:95.83333%}.dark-mode .el-col-xl-push-23{position:relative;left:95.83333%}.dark-mode .el-col-xl-24{width:100%}.dark-mode .el-col-xl-offset-24{margin-left:100%}.dark-mode .el-col-xl-pull-24{position:relative;right:100%}.dark-mode .el-col-xl-push-24{position:relative;left:100%}}@-webkit-keyframes progress{0%{background-position:0 0}100%{background-position:32px 0}}.dark-mode .el-upload{display:inline-block;text-align:center;cursor:pointer;outline:0}.dark-mode .el-upload__input{display:none}.dark-mode .el-upload__tip{font-size:12px;color:#b8b8b8;margin-top:7px}.dark-mode .el-upload iframe{position:absolute;z-index:-1;top:0;left:0;opacity:0}.dark-mode .el-upload--picture-card{background-color:#fbfdff;border:1px dashed #c0ccda;border-radius:6px;box-sizing:border-box;width:148px;height:148px;line-height:146px;vertical-align:top}.dark-mode .el-upload--picture-card i{font-size:28px;color:#8c939d}.dark-mode .el-upload--picture-card:hover,.dark-mode .el-upload:focus{border-color:#d71a1b;color:#d71a1b}.dark-mode .el-upload:focus .el-upload-dragger{border-color:#d71a1b}.dark-mode .el-upload-dragger{background-color:#fff;border:1px dashed #d9d9d9;border-radius:6px;box-sizing:border-box;width:360px;height:180px;text-align:center;position:relative;overflow:hidden}.dark-mode .el-upload-dragger .el-icon-upload{font-size:67px;color:#ccc;margin:40px 0 16px;line-height:50px}.dark-mode .el-upload-dragger+.el-upload__tip{text-align:center}.dark-mode .el-upload-dragger~.el-upload__files{border-top:1px solid #bebebe;margin-top:7px;padding-top:5px}.dark-mode .el-upload-dragger .el-upload__text{color:#b8b8b8;font-size:14px;text-align:center}.dark-mode .el-upload-dragger .el-upload__text em{color:#d71a1b;font-style:normal}.dark-mode .el-upload-dragger:hover{border-color:#d71a1b}.dark-mode .el-upload-dragger.is-dragover{background-color:rgba(32,159,255,.06);border:2px dashed #d71a1b}.dark-mode .el-upload-list{margin:0;padding:0;list-style:none}.dark-mode .el-upload-list__item{-webkit-transition:all .5s cubic-bezier(.55,0,.1,1);transition:all .5s cubic-bezier(.55,0,.1,1);font-size:14px;color:#b8b8b8;line-height:1.8;margin-top:5px;position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:4px;width:100%}.dark-mode .el-upload-list__item .el-progress{position:absolute;top:20px;width:100%}.dark-mode .el-upload-list__item .el-progress__text{position:absolute;right:0;top:-13px}.dark-mode .el-upload-list__item .el-progress-bar{margin-right:0;padding-right:0}.dark-mode .el-upload-list__item:first-child{margin-top:10px}.dark-mode .el-upload-list__item .el-icon-upload-success{color:#67c23a}.dark-mode .el-upload-list__item .el-icon-close{display:none;position:absolute;top:5px;right:5px;cursor:pointer;opacity:.75;color:#b8b8b8}.dark-mode .el-upload-list__item .el-icon-close:hover{opacity:1}.dark-mode .el-upload-list__item .el-icon-close-tip{display:none;position:absolute;top:5px;right:5px;font-size:12px;cursor:pointer;opacity:1;color:#d71a1b}.dark-mode .el-upload-list__item:hover{background-color:#171315}.dark-mode .el-upload-list__item:hover .el-icon-close{display:inline-block}.dark-mode .el-upload-list__item:hover .el-progress__text{display:none}.dark-mode .el-upload-list__item.is-success .el-upload-list__item-status-label{display:block}.dark-mode .el-upload-list__item.is-success .el-upload-list__item-name:focus,.dark-mode .el-upload-list__item.is-success .el-upload-list__item-name:hover{color:#d71a1b;cursor:pointer}.dark-mode .el-upload-list__item.is-success:focus:not(:hover) .el-icon-close-tip{display:inline-block}.dark-mode .el-upload-list__item.is-success:active .el-icon-close-tip,.dark-mode .el-upload-list__item.is-success:focus .el-upload-list__item-status-label,.dark-mode .el-upload-list__item.is-success:hover .el-upload-list__item-status-label,.dark-mode .el-upload-list__item.is-success:not(.focusing):focus .el-icon-close-tip{display:none}.dark-mode .el-upload-list.is-disabled .el-upload-list__item:hover .el-upload-list__item-status-label{display:block}.dark-mode .el-upload-list__item-name{color:#b8b8b8;display:block;margin-right:40px;overflow:hidden;padding-left:4px;text-overflow:ellipsis;-webkit-transition:color .3s;transition:color .3s;white-space:nowrap}.dark-mode .el-upload-list__item-name [class^=el-icon]{height:100%;margin-right:7px;color:#bcbcbc;line-height:inherit}.dark-mode .el-upload-list__item-status-label{position:absolute;right:5px;top:0;line-height:inherit;display:none}.dark-mode .el-upload-list__item-delete{position:absolute;right:10px;top:0;font-size:12px;color:#b8b8b8;display:none}.dark-mode .el-upload-list__item-delete:hover{color:#d71a1b}.dark-mode .el-upload-list--picture-card{margin:0;display:inline;vertical-align:top}.dark-mode .el-upload-list--picture-card .el-upload-list__item{overflow:hidden;background-color:#fff;border:1px solid #c0ccda;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;width:148px;height:148px;margin:0 8px 8px 0;display:inline-block}.dark-mode .el-upload-list--picture-card .el-upload-list__item .el-icon-check,.dark-mode .el-upload-list--picture-card .el-upload-list__item .el-icon-circle-check{color:#232222}.dark-mode .el-upload-list--picture-card .el-upload-list__item .el-icon-close,.dark-mode .el-upload-list--picture-card .el-upload-list__item:hover .el-upload-list__item-status-label{display:none}.dark-mode .el-upload-list--picture-card .el-upload-list__item:hover .el-progress__text{display:block}.dark-mode .el-upload-list--picture-card .el-upload-list__item-name{display:none}.dark-mode .el-upload-list--picture-card .el-upload-list__item-thumbnail{width:100%;height:100%}.dark-mode .el-upload-list--picture-card .el-upload-list__item-status-label{position:absolute;right:-15px;top:-6px;width:40px;height:24px;background:#13ce66;text-align:center;-webkit-transform:rotate(45deg);transform:rotate(45deg);-webkit-box-shadow:0 0 1pc 1px rgba(0,0,0,.2);box-shadow:0 0 1pc 1px rgba(0,0,0,.2)}.dark-mode .el-upload-list--picture-card .el-upload-list__item-status-label i{font-size:12px;margin-top:11px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.dark-mode .el-upload-list--picture-card .el-upload-list__item-actions{position:absolute;width:100%;height:100%;left:0;top:0;cursor:default;text-align:center;color:#fff;opacity:0;font-size:20px;background-color:rgba(0,0,0,.5);-webkit-transition:opacity .3s;transition:opacity .3s}.dark-mode .el-upload-list--picture-card .el-upload-list__item-actions::after{display:inline-block;content:\"\";height:100%;vertical-align:middle}.dark-mode .el-upload-list--picture-card .el-upload-list__item-actions span{display:none;cursor:pointer}.dark-mode .el-upload-list--picture-card .el-upload-list__item-actions span+span{margin-left:15px}.dark-mode .el-upload-list--picture-card .el-upload-list__item-actions .el-upload-list__item-delete{position:static;font-size:inherit;color:inherit}.dark-mode .el-upload-list--picture-card .el-upload-list__item-actions:hover{opacity:1}.dark-mode .el-upload-list--picture-card .el-upload-list__item-actions:hover span{display:inline-block}.dark-mode .el-upload-list--picture-card .el-progress{top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);bottom:auto;width:126px}.dark-mode .el-upload-list--picture-card .el-progress .el-progress__text{top:50%}.dark-mode .el-upload-list--picture .el-upload-list__item{overflow:hidden;z-index:0;background-color:#fff;border:1px solid #c0ccda;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;margin-top:10px;padding:10px 10px 10px 90px;height:92px}.dark-mode .el-upload-list--picture .el-upload-list__item .el-icon-check,.dark-mode .el-upload-list--picture .el-upload-list__item .el-icon-circle-check{color:#232222}.dark-mode .el-upload-list--picture .el-upload-list__item:hover .el-upload-list__item-status-label{background:0 0;-webkit-box-shadow:none;box-shadow:none;top:-2px;right:-12px}.dark-mode .el-upload-list--picture .el-upload-list__item:hover .el-progress__text{display:block}.dark-mode .el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name{line-height:70px;margin-top:0}.dark-mode .el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name i{display:none}.dark-mode .el-upload-list--picture .el-upload-list__item-thumbnail{vertical-align:middle;display:inline-block;width:70px;height:70px;float:left;position:relative;z-index:1;margin-left:-80px;background-color:#232222}.dark-mode .el-upload-list--picture .el-upload-list__item-name{display:block;margin-top:20px}.dark-mode .el-upload-list--picture .el-upload-list__item-name i{font-size:70px;line-height:1;position:absolute;left:9px;top:10px}.dark-mode .el-upload-list--picture .el-upload-list__item-status-label{position:absolute;right:-17px;top:-7px;width:46px;height:26px;background:#13ce66;text-align:center;-webkit-transform:rotate(45deg);transform:rotate(45deg);-webkit-box-shadow:0 1px 1px #ccc;box-shadow:0 1px 1px #ccc}.dark-mode .el-upload-list--picture .el-upload-list__item-status-label i{font-size:12px;margin-top:12px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.dark-mode .el-upload-list--picture .el-progress{position:relative;top:-7px}.dark-mode .el-upload-cover{position:absolute;left:0;top:0;width:100%;height:100%;overflow:hidden;z-index:10;cursor:default}.dark-mode .el-upload-cover::after{display:inline-block;height:100%;vertical-align:middle}.dark-mode .el-upload-cover img{display:block;width:100%;height:100%}.dark-mode .el-upload-cover__label{position:absolute;right:-15px;top:-6px;width:40px;height:24px;background:#13ce66;text-align:center;-webkit-transform:rotate(45deg);transform:rotate(45deg);-webkit-box-shadow:0 0 1pc 1px rgba(0,0,0,.2);box-shadow:0 0 1pc 1px rgba(0,0,0,.2)}.dark-mode .el-upload-cover__label i{font-size:12px;margin-top:11px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);color:#fff}.dark-mode .el-upload-cover__progress{display:inline-block;vertical-align:middle;position:static;width:243px}.dark-mode .el-upload-cover__progress+.el-upload__inner{opacity:0}.dark-mode .el-upload-cover__content{position:absolute;top:0;left:0;width:100%;height:100%}.dark-mode .el-upload-cover__interact{position:absolute;bottom:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,.72);text-align:center}.dark-mode .el-upload-cover__interact .btn{display:inline-block;color:#232222;font-size:14px;cursor:pointer;vertical-align:middle;-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);margin-top:60px}.dark-mode .el-upload-cover__interact .btn span{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.dark-mode .el-upload-cover__interact .btn:not(:first-child){margin-left:35px}.dark-mode .el-upload-cover__interact .btn:hover{-webkit-transform:translateY(-13px);transform:translateY(-13px)}.dark-mode .el-upload-cover__interact .btn:hover span{opacity:1}.dark-mode .el-upload-cover__interact .btn i{color:#232222;display:block;font-size:24px;line-height:inherit;margin:0 auto 5px}.dark-mode .el-upload-cover__title{position:absolute;bottom:0;left:0;background-color:#232222;height:36px;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:400;text-align:left;padding:0 10px;margin:0;line-height:36px;font-size:14px;color:#fff}.dark-mode .el-upload-cover+.el-upload__inner{opacity:0;position:relative;z-index:1}.dark-mode .el-progress{position:relative;line-height:1}.dark-mode .el-progress__text{font-size:14px;color:#b8b8b8;display:inline-block;vertical-align:middle;margin-left:10px;line-height:1}.dark-mode .el-progress__text i{vertical-align:middle;display:block}.dark-mode .el-progress--circle,.dark-mode .el-progress--dashboard{display:inline-block}.dark-mode .el-progress--circle .el-progress__text,.dark-mode .el-progress--dashboard .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%)}.dark-mode .el-progress--circle .el-progress__text i,.dark-mode .el-progress--dashboard .el-progress__text i{vertical-align:middle;display:inline-block}.dark-mode .el-progress--without-text .el-progress__text{display:none}.dark-mode .el-progress--without-text .el-progress-bar{padding-right:0;margin-right:0;display:block}.dark-mode .el-progress-bar,.dark-mode .el-progress-bar__inner::after,.dark-mode .el-progress-bar__innerText,.dark-mode .el-spinner{display:inline-block;vertical-align:middle}.dark-mode .el-progress--text-inside .el-progress-bar{padding-right:0;margin-right:0}.dark-mode .el-progress.is-success .el-progress-bar__inner{background-color:#67c23a}.dark-mode .el-progress.is-success .el-progress__text{color:#67c23a}.dark-mode .el-progress.is-warning .el-progress-bar__inner{background-color:#e6a23c}.dark-mode .el-progress.is-warning .el-progress__text{color:#e6a23c}.dark-mode .el-progress.is-exception .el-progress-bar__inner{background-color:#f56c6c}.dark-mode .el-progress.is-exception .el-progress__text{color:#f56c6c}.dark-mode .el-progress-bar{padding-right:50px;width:100%;margin-right:-55px;-webkit-box-sizing:border-box;box-sizing:border-box}.dark-mode .el-progress-bar__outer{height:6px;border-radius:100px;background-color:#454545;overflow:hidden;position:relative;vertical-align:middle}.dark-mode .el-progress-bar__inner{position:absolute;left:0;top:0;height:100%;background-color:#d71a1b;text-align:right;border-radius:100px;line-height:1;white-space:nowrap;-webkit-transition:width .6s ease;transition:width .6s ease}.dark-mode .el-card,.dark-mode .el-message{border-radius:4px;overflow:hidden}.dark-mode .el-progress-bar__inner::after{height:100%}.dark-mode .el-progress-bar__innerText{color:#232222;font-size:12px;margin:0 5px}@keyframes progress{0%{background-position:0 0}100%{background-position:32px 0}}.dark-mode .el-time-spinner{width:100%;white-space:nowrap}.dark-mode .el-spinner-inner{-webkit-animation:rotate 2s linear infinite;animation:rotate 2s linear infinite;width:50px;height:50px}.dark-mode .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}}.dark-mode .el-message{min-width:380px;-webkit-box-sizing:border-box;box-sizing:border-box;border-width:1px;border-style:solid;border-color:#454545;position:fixed;left:50%;top:20px;-webkit-transform:translateX(-50%);transform:translateX(-50%);background-color:#edf2fc;-webkit-transition:opacity .3s,top .4s,-webkit-transform .4s;transition:opacity .3s,top .4s,-webkit-transform .4s;transition:opacity .3s,transform .4s,top .4s;transition:opacity .3s,transform .4s,top .4s,-webkit-transform .4s;padding:15px 15px 15px 20px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.dark-mode .el-message.is-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.dark-mode .el-message.is-closable .el-message__content{padding-right:16px}.dark-mode .el-message p{margin:0}.dark-mode .el-message--info .el-message__content{color:#b8b8b8}.dark-mode .el-message--success{background-color:#2a3224;border-color:#314227}.dark-mode .el-message--success .el-message__content{color:#67c23a}.dark-mode .el-message--warning{background-color:#372f25;border-color:#4a3c27}.dark-mode .el-message--warning .el-message__content{color:#e6a23c}.dark-mode .el-message--error{background-color:#382929;border-color:#4d3131}.dark-mode .el-message--error .el-message__content{color:#f56c6c}.dark-mode .el-message__icon{margin-right:10px}.dark-mode .el-message__content{padding:0;font-size:14px;line-height:1}.dark-mode .el-message__closeBtn{position:absolute;top:50%;right:15px;-webkit-transform:translateY(-50%);transform:translateY(-50%);cursor:pointer;color:#ccc;font-size:16px}.dark-mode .el-message__closeBtn:hover{color:#bcbcbc}.dark-mode .el-message .el-icon-success{color:#67c23a}.dark-mode .el-message .el-icon-error{color:#f56c6c}.dark-mode .el-message .el-icon-info{color:#b8b8b8}.dark-mode .el-message .el-icon-warning{color:#e6a23c}.dark-mode .el-message-fade-enter,.dark-mode .el-message-fade-leave-active{opacity:0;-webkit-transform:translate(-50%,-100%);transform:translate(-50%,-100%)}.dark-mode .el-badge{position:relative;vertical-align:middle;display:inline-block}.dark-mode .el-badge__content{background-color:#f56c6c;border-radius:10px;color:#232222;display:inline-block;font-size:12px;height:18px;line-height:18px;padding:0 6px;text-align:center;white-space:nowrap;border:1px solid #232222}.dark-mode .el-badge__content.is-fixed{position:absolute;top:0;right:10px;-webkit-transform:translateY(-50%) translateX(100%);transform:translateY(-50%) translateX(100%)}.dark-mode .el-rate__icon,.dark-mode .el-rate__item{position:relative;display:inline-block}.dark-mode .el-badge__content.is-fixed.is-dot{right:5px}.dark-mode .el-badge__content.is-dot{height:8px;width:8px;padding:0;right:0;border-radius:50%}.dark-mode .el-badge__content--primary{background-color:#d71a1b}.dark-mode .el-badge__content--success{background-color:#67c23a}.dark-mode .el-badge__content--warning{background-color:#e6a23c}.dark-mode .el-badge__content--info{background-color:#b8b8b8}.dark-mode .el-badge__content--danger{background-color:#f56c6c}.dark-mode .el-card{border:1px solid #454545;background-color:#232222;color:#fff;-webkit-transition:.3s;transition:.3s}.dark-mode .el-card.is-always-shadow,.dark-mode .el-card.is-hover-shadow:focus,.dark-mode .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)}.dark-mode .el-card__header{padding:18px 20px;border-bottom:1px solid #454545;-webkit-box-sizing:border-box;box-sizing:border-box}.dark-mode .el-card__body{padding:20px}.dark-mode .el-rate{height:20px;line-height:1}.dark-mode .el-rate__item{font-size:0;vertical-align:middle}.dark-mode .el-rate__icon{font-size:18px;margin-right:6px;color:#ccc;-webkit-transition:.3s;transition:.3s}.dark-mode .el-rate__decimal,.dark-mode .el-rate__icon .path2{position:absolute;top:0;left:0}.dark-mode .el-rate__icon.hover{-webkit-transform:scale(1.15);transform:scale(1.15)}.dark-mode .el-rate__decimal{display:inline-block;overflow:hidden}.dark-mode .el-step.is-vertical,.dark-mode .el-steps{display:-webkit-box;display:-ms-flexbox}.dark-mode .el-rate__text{font-size:14px;vertical-align:middle}.dark-mode .el-steps{display:flex}.dark-mode .el-steps--simple{padding:13px 8%;border-radius:4px;background:#171315}.dark-mode .el-steps--horizontal{white-space:nowrap}.dark-mode .el-steps--vertical{height:100%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column;flex-flow:column}.dark-mode .el-step{position:relative;-ms-flex-negative:1;flex-shrink:1}.dark-mode .el-step:last-of-type .el-step__line{display:none}.dark-mode .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}.dark-mode .el-step:last-of-type .el-step__description,.dark-mode .el-step:last-of-type .el-step__main{padding-right:0}.dark-mode .el-step__head{position:relative;width:100%}.dark-mode .el-step__head.is-process{color:#fff;border-color:#fff}.dark-mode .el-step__head.is-wait{color:#ccc;border-color:#ccc}.dark-mode .el-step__head.is-success{color:#67c23a;border-color:#67c23a}.dark-mode .el-step__head.is-error{color:#f56c6c;border-color:#f56c6c}.dark-mode .el-step__head.is-finish{color:#d71a1b;border-color:#d71a1b}.dark-mode .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:#232222;-webkit-transition:.15s ease-out;transition:.15s ease-out}.dark-mode .el-step__icon.is-text{border-radius:50%;border:2px solid;border-color:inherit}.dark-mode .el-step__icon.is-icon{width:40px}.dark-mode .el-step__icon-inner{display:inline-block;user-select:none;text-align:center;font-weight:700;line-height:1;color:inherit}.dark-mode .el-step__icon-inner[class*=el-icon]:not(.is-status){font-size:25px;font-weight:400}.dark-mode .el-step__icon-inner.is-status{-webkit-transform:translateY(1px);transform:translateY(1px)}.dark-mode .el-step__line{position:absolute;border-color:inherit;background-color:#ccc}.dark-mode .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}.dark-mode .el-step__main{white-space:normal;text-align:left}.dark-mode .el-step__title{font-size:16px;line-height:38px}.dark-mode .el-step__title.is-process{font-weight:700;color:#fff}.dark-mode .el-step__title.is-wait{color:#ccc}.dark-mode .el-step__title.is-success{color:#67c23a}.dark-mode .el-step__title.is-error{color:#f56c6c}.dark-mode .el-step__title.is-finish{color:#d71a1b}.dark-mode .el-step__description{padding-right:10%;margin-top:-5px;font-size:12px;line-height:20px;font-weight:400}.dark-mode .el-step__description.is-process{color:#fff}.dark-mode .el-step__description.is-wait{color:#ccc}.dark-mode .el-step__description.is-success{color:#67c23a}.dark-mode .el-step__description.is-error{color:#f56c6c}.dark-mode .el-step__description.is-finish{color:#d71a1b}.dark-mode .el-step.is-horizontal{display:inline-block}.dark-mode .el-step.is-horizontal .el-step__line{height:2px;top:11px;left:0;right:0}.dark-mode .el-step.is-vertical{display:flex}.dark-mode .el-step.is-vertical .el-step__head{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;width:24px}.dark-mode .el-step.is-vertical .el-step__main{padding-left:10px;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.dark-mode .el-step.is-vertical .el-step__title{line-height:24px;padding-bottom:8px}.dark-mode .el-step.is-vertical .el-step__line{width:2px;top:0;bottom:0;left:11px}.dark-mode .el-step.is-vertical .el-step__icon.is-icon{width:24px}.dark-mode .el-step.is-center .el-step__head,.dark-mode .el-step.is-center .el-step__main{text-align:center}.dark-mode .el-step.is-center .el-step__description{padding-left:20%;padding-right:20%}.dark-mode .el-step.is-center .el-step__line{left:50%;right:-50%}.dark-mode .el-step.is-simple{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.dark-mode .el-step.is-simple .el-step__head{width:auto;font-size:0;padding-right:10px}.dark-mode .el-step.is-simple .el-step__icon{background:0 0;width:16px;height:16px;font-size:12px}.dark-mode .el-step.is-simple .el-step__icon-inner[class*=el-icon]:not(.is-status){font-size:18px}.dark-mode .el-step.is-simple .el-step__icon-inner.is-status{-webkit-transform:scale(.8) translateY(1px);transform:scale(.8) translateY(1px)}.dark-mode .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}.dark-mode .el-step.is-simple .el-step__title{font-size:16px;line-height:20px}.dark-mode .el-step.is-simple:not(:last-of-type) .el-step__title{max-width:50%;word-break:break-all}.dark-mode .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}.dark-mode .el-step.is-simple .el-step__arrow::after,.dark-mode .el-step.is-simple .el-step__arrow::before{content:'';display:inline-block;position:absolute;height:15px;width:1px;background:#ccc}.dark-mode .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}.dark-mode .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%}.dark-mode .el-step.is-simple:last-of-type .el-step__arrow{display:none}.dark-mode .el-carousel{position:relative}.dark-mode .el-carousel--horizontal{overflow-x:hidden}.dark-mode .el-carousel--vertical{overflow-y:hidden}.dark-mode .el-carousel__container{position:relative;height:300px}.dark-mode .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:#232222;position:absolute;top:50%;z-index:10;-webkit-transform:translateY(-50%);transform:translateY(-50%);text-align:center;font-size:12px}.dark-mode .el-carousel__arrow--left{left:16px}.dark-mode .el-carousel__arrow--right{right:16px}.dark-mode .el-carousel__arrow:hover{background-color:rgba(31,45,61,.23)}.dark-mode .el-carousel__arrow i{cursor:pointer}.dark-mode .el-carousel__indicators{position:absolute;list-style:none;margin:0;padding:0;z-index:2}.dark-mode .el-carousel__indicators--horizontal{bottom:0;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.dark-mode .el-carousel__indicators--vertical{right:0;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.dark-mode .el-carousel__indicators--outside{bottom:26px;text-align:center;position:static;-webkit-transform:none;transform:none}.dark-mode .el-carousel__indicators--outside .el-carousel__indicator:hover button{opacity:.64}.dark-mode .el-carousel__indicators--outside button{background-color:#ccc;opacity:.24}.dark-mode .el-carousel__indicators--labels{left:0;right:0;-webkit-transform:none;transform:none;text-align:center}.dark-mode .el-carousel__indicators--labels .el-carousel__button{height:auto;width:auto;padding:2px 18px;font-size:12px}.dark-mode .el-carousel__indicators--labels .el-carousel__indicator{padding:6px 4px}.dark-mode .el-carousel__indicator{background-color:transparent;cursor:pointer}.dark-mode .el-carousel__indicator:hover button{opacity:.72}.dark-mode .el-carousel__indicator--horizontal{display:inline-block;padding:12px 4px}.dark-mode .el-carousel__indicator--vertical{padding:4px 12px}.dark-mode .el-carousel__indicator--vertical .el-carousel__button{width:2px;height:15px}.dark-mode .el-carousel__indicator.is-active button{opacity:1}.dark-mode .el-carousel__button{display:block;opacity:.48;width:30px;height:2px;background-color:#232222;border:none;outline:0;padding:0;margin:0;cursor:pointer;-webkit-transition:.3s;transition:.3s}.dark-mode .el-carousel__item,.dark-mode .el-carousel__mask{height:100%;top:0;left:0;position:absolute}.dark-mode .carousel-arrow-left-enter,.dark-mode .carousel-arrow-left-leave-active{-webkit-transform:translateY(-50%) translateX(-10px);transform:translateY(-50%) translateX(-10px);opacity:0}.dark-mode .carousel-arrow-right-enter,.dark-mode .carousel-arrow-right-leave-active{-webkit-transform:translateY(-50%) translateX(10px);transform:translateY(-50%) translateX(10px);opacity:0}.dark-mode .el-carousel__item{width:100%;display:inline-block;overflow:hidden;z-index:0}.dark-mode .el-carousel__item.is-active{z-index:2}.dark-mode .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}.dark-mode .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}.dark-mode .el-carousel__item--card.is-in-stage{cursor:pointer;z-index:1}.dark-mode .el-carousel__item--card.is-in-stage.is-hover .el-carousel__mask,.dark-mode .el-carousel__item--card.is-in-stage:hover .el-carousel__mask{opacity:.12}.dark-mode .el-carousel__item--card.is-active{z-index:2}.dark-mode .el-carousel__mask{width:100%;background-color:#232222;opacity:.24;-webkit-transition:.2s;transition:.2s}.dark-mode .el-fade-in-enter,.dark-mode .el-fade-in-leave-active,.dark-mode .el-fade-in-linear-enter,.dark-mode .el-fade-in-linear-leave,.dark-mode .el-fade-in-linear-leave-active,.dark-mode .fade-in-linear-enter,.dark-mode .fade-in-linear-leave,.dark-mode .fade-in-linear-leave-active{opacity:0}.dark-mode .fade-in-linear-enter-active,.dark-mode .fade-in-linear-leave-active{-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.dark-mode .el-fade-in-linear-enter-active,.dark-mode .el-fade-in-linear-leave-active{-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.dark-mode .el-fade-in-enter-active,.dark-mode .el-fade-in-leave-active{-webkit-transition:all .3s cubic-bezier(.55,0,.1,1);transition:all .3s cubic-bezier(.55,0,.1,1)}.dark-mode .el-zoom-in-center-enter-active,.dark-mode .el-zoom-in-center-leave-active{-webkit-transition:all .3s cubic-bezier(.55,0,.1,1);transition:all .3s cubic-bezier(.55,0,.1,1)}.dark-mode .el-zoom-in-center-enter,.dark-mode .el-zoom-in-center-leave-active{opacity:0;-webkit-transform:scaleX(0);transform:scaleX(0)}.dark-mode .el-zoom-in-top-enter-active,.dark-mode .el-zoom-in-top-leave-active{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);-webkit-transform-origin:center top;transform-origin:center top}.dark-mode .el-zoom-in-top-enter,.dark-mode .el-zoom-in-top-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.dark-mode .el-zoom-in-bottom-enter-active,.dark-mode .el-zoom-in-bottom-leave-active{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);-webkit-transform-origin:center bottom;transform-origin:center bottom}.dark-mode .el-zoom-in-bottom-enter,.dark-mode .el-zoom-in-bottom-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.dark-mode .el-zoom-in-left-enter-active,.dark-mode .el-zoom-in-left-leave-active{opacity:1;-webkit-transform:scale(1,1);transform:scale(1,1);-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);-webkit-transform-origin:top left;transform-origin:top left}.dark-mode .el-zoom-in-left-enter,.dark-mode .el-zoom-in-left-leave-active{opacity:0;-webkit-transform:scale(.45,.45);transform:scale(.45,.45)}.dark-mode .collapse-transition{-webkit-transition:.3s height ease-in-out,.3s padding-top ease-in-out,.3s padding-bottom ease-in-out;transition:.3s height ease-in-out,.3s padding-top ease-in-out,.3s padding-bottom ease-in-out}.dark-mode .horizontal-collapse-transition{-webkit-transition:.3s width ease-in-out,.3s padding-left ease-in-out,.3s padding-right ease-in-out;transition:.3s width ease-in-out,.3s padding-left ease-in-out,.3s padding-right ease-in-out}.dark-mode .el-list-enter-active,.dark-mode .el-list-leave-active{-webkit-transition:all 1s;transition:all 1s}.dark-mode .el-list-enter,.dark-mode .el-list-leave-active{opacity:0;-webkit-transform:translateY(-30px);transform:translateY(-30px)}.dark-mode .el-opacity-transition{-webkit-transition:opacity .3s cubic-bezier(.55,0,.1,1);transition:opacity .3s cubic-bezier(.55,0,.1,1)}.dark-mode .el-collapse{border-top:1px solid #454545;border-bottom:1px solid #454545}.dark-mode .el-collapse-item.is-disabled .el-collapse-item__header{color:#bbb;cursor:not-allowed}.dark-mode .el-collapse-item__header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:48px;line-height:48px;background-color:#232222;color:#fff;cursor:pointer;border-bottom:1px solid #454545;font-size:13px;font-weight:500;-webkit-transition:border-bottom-color .3s;transition:border-bottom-color .3s;outline:0}.dark-mode .el-collapse-item__arrow{margin:0 8px 0 auto;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;font-weight:300}.dark-mode .el-collapse-item__arrow.is-active{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.dark-mode .el-collapse-item__header.focusing:focus:not(:hover){color:#d71a1b}.dark-mode .el-collapse-item__header.is-active{border-bottom-color:transparent}.dark-mode .el-collapse-item__wrap{will-change:height;background-color:#232222;overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;border-bottom:1px solid #454545}.dark-mode .el-cascader__tags,.dark-mode .el-tag{-webkit-box-sizing:border-box}.dark-mode .el-collapse-item__content{padding-bottom:25px;font-size:13px;color:#fff;line-height:1.769230769230769}.dark-mode .el-collapse-item:last-child{margin-bottom:-1px}.dark-mode .el-popper .popper__arrow,.dark-mode .el-popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.dark-mode .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))}.dark-mode .el-popper .popper__arrow::after{content:\" \";border-width:6px}.dark-mode .el-popper[x-placement^=top]{margin-bottom:12px}.dark-mode .el-popper[x-placement^=top] .popper__arrow{bottom:-6px;left:50%;margin-right:3px;border-top-color:#454545;border-bottom-width:0}.dark-mode .el-popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-6px;border-top-color:#232222;border-bottom-width:0}.dark-mode .el-popper[x-placement^=bottom]{margin-top:12px}.dark-mode .el-popper[x-placement^=bottom] .popper__arrow{top:-6px;left:50%;margin-right:3px;border-top-width:0;border-bottom-color:#454545}.dark-mode .el-popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-6px;border-top-width:0;border-bottom-color:#232222}.dark-mode .el-popper[x-placement^=right]{margin-left:12px}.dark-mode .el-popper[x-placement^=right] .popper__arrow{top:50%;left:-6px;margin-bottom:3px;border-right-color:#454545;border-left-width:0}.dark-mode .el-popper[x-placement^=right] .popper__arrow::after{bottom:-6px;left:1px;border-right-color:#232222;border-left-width:0}.dark-mode .el-popper[x-placement^=left]{margin-right:12px}.dark-mode .el-popper[x-placement^=left] .popper__arrow{top:50%;right:-6px;margin-bottom:3px;border-right-width:0;border-left-color:#454545}.dark-mode .el-popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-6px;margin-left:-6px;border-right-width:0;border-left-color:#232222}.dark-mode .el-tag{background-color:#352121;border-color:#472021;display:inline-block;height:32px;padding:0 10px;line-height:30px;font-size:12px;color:#d71a1b;border-width:1px;border-style:solid;border-radius:4px;box-sizing:border-box;white-space:nowrap}.dark-mode .el-tag.is-hit{border-color:#d71a1b}.dark-mode .el-tag .el-tag__close{color:#d71a1b}.dark-mode .el-tag .el-tag__close:hover{color:#232222;background-color:#d71a1b}.dark-mode .el-tag.el-tag--info{background-color:#323131;border-color:#414040;color:#b8b8b8}.dark-mode .el-tag.el-tag--info.is-hit{border-color:#b8b8b8}.dark-mode .el-tag.el-tag--info .el-tag__close{color:#b8b8b8}.dark-mode .el-tag.el-tag--info .el-tag__close:hover{color:#232222;background-color:#b8b8b8}.dark-mode .el-tag.el-tag--success{background-color:#2a3224;border-color:#314227;color:#67c23a}.dark-mode .el-tag.el-tag--success.is-hit{border-color:#67c23a}.dark-mode .el-tag.el-tag--success .el-tag__close{color:#67c23a}.dark-mode .el-tag.el-tag--success .el-tag__close:hover{color:#232222;background-color:#67c23a}.dark-mode .el-tag.el-tag--warning{background-color:#372f25;border-color:#4a3c27;color:#e6a23c}.dark-mode .el-tag.el-tag--warning.is-hit{border-color:#e6a23c}.dark-mode .el-tag.el-tag--warning .el-tag__close{color:#e6a23c}.dark-mode .el-tag.el-tag--warning .el-tag__close:hover{color:#232222;background-color:#e6a23c}.dark-mode .el-tag.el-tag--danger{background-color:#382929;border-color:#4d3131;color:#f56c6c}.dark-mode .el-tag.el-tag--danger.is-hit{border-color:#f56c6c}.dark-mode .el-tag.el-tag--danger .el-tag__close{color:#f56c6c}.dark-mode .el-tag.el-tag--danger .el-tag__close:hover{color:#232222;background-color:#f56c6c}.dark-mode .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}.dark-mode .el-tag .el-icon-close::before{display:block}.dark-mode .el-tag--dark{background-color:#d71a1b;border-color:#d71a1b;color:#232222}.dark-mode .el-tag--dark.is-hit{border-color:#d71a1b}.dark-mode .el-tag--dark .el-tag__close{color:#232222}.dark-mode .el-tag--dark .el-tag__close:hover{color:#232222;background-color:#b31c1c}.dark-mode .el-tag--dark.el-tag--info{background-color:#b8b8b8;border-color:#b8b8b8;color:#232222}.dark-mode .el-tag--dark.el-tag--info.is-hit{border-color:#b8b8b8}.dark-mode .el-tag--dark.el-tag--info .el-tag__close{color:#232222}.dark-mode .el-tag--dark.el-tag--info .el-tag__close:hover{color:#232222;background-color:#9a9a9a}.dark-mode .el-tag--dark.el-tag--success{background-color:#67c23a;border-color:#67c23a;color:#232222}.dark-mode .el-tag--dark.el-tag--success.is-hit{border-color:#67c23a}.dark-mode .el-tag--dark.el-tag--success .el-tag__close{color:#232222}.dark-mode .el-tag--dark.el-tag--success .el-tag__close:hover{color:#232222;background-color:#59a235}.dark-mode .el-tag--dark.el-tag--warning{background-color:#e6a23c;border-color:#e6a23c;color:#232222}.dark-mode .el-tag--dark.el-tag--warning.is-hit{border-color:#e6a23c}.dark-mode .el-tag--dark.el-tag--warning .el-tag__close{color:#232222}.dark-mode .el-tag--dark.el-tag--warning .el-tag__close:hover{color:#232222;background-color:#bf8837}.dark-mode .el-tag--dark.el-tag--danger{background-color:#f56c6c;border-color:#f56c6c;color:#232222}.dark-mode .el-tag--dark.el-tag--danger.is-hit{border-color:#f56c6c}.dark-mode .el-tag--dark.el-tag--danger .el-tag__close{color:#232222}.dark-mode .el-tag--dark.el-tag--danger .el-tag__close:hover{color:#232222;background-color:#cb5d5d}.dark-mode .el-tag--plain{background-color:#232222;border-color:#6b1f1f;color:#d71a1b}.dark-mode .el-tag--plain.is-hit{border-color:#d71a1b}.dark-mode .el-tag--plain .el-tag__close{color:#d71a1b}.dark-mode .el-tag--plain .el-tag__close:hover{color:#232222;background-color:#d71a1b}.dark-mode .el-tag--plain.el-tag--info{background-color:#232222;border-color:#5f5e5e;color:#b8b8b8}.dark-mode .el-tag--plain.el-tag--info.is-hit{border-color:#b8b8b8}.dark-mode .el-tag--plain.el-tag--info .el-tag__close{color:#b8b8b8}.dark-mode .el-tag--plain.el-tag--info .el-tag__close:hover{color:#232222;background-color:#b8b8b8}.dark-mode .el-tag--plain.el-tag--success{background-color:#232222;border-color:#3e622c;color:#67c23a}.dark-mode .el-tag--plain.el-tag--success.is-hit{border-color:#67c23a}.dark-mode .el-tag--plain.el-tag--success .el-tag__close{color:#67c23a}.dark-mode .el-tag--plain.el-tag--success .el-tag__close:hover{color:#232222;background-color:#67c23a}.dark-mode .el-tag--plain.el-tag--warning{background-color:#232222;border-color:#71552c;color:#e6a23c}.dark-mode .el-tag--plain.el-tag--warning.is-hit{border-color:#e6a23c}.dark-mode .el-tag--plain.el-tag--warning .el-tag__close{color:#e6a23c}.dark-mode .el-tag--plain.el-tag--warning .el-tag__close:hover{color:#232222;background-color:#e6a23c}.dark-mode .el-tag--plain.el-tag--danger{background-color:#232222;border-color:#774040;color:#f56c6c}.dark-mode .el-tag--plain.el-tag--danger.is-hit{border-color:#f56c6c}.dark-mode .el-tag--plain.el-tag--danger .el-tag__close{color:#f56c6c}.dark-mode .el-tag--plain.el-tag--danger .el-tag__close:hover{color:#232222;background-color:#f56c6c}.dark-mode .el-tag--medium{height:28px;line-height:26px}.dark-mode .el-tag--medium .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.dark-mode .el-tag--small{height:24px;padding:0 8px;line-height:22px}.dark-mode .el-tag--small .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.dark-mode .el-tag--mini{height:20px;padding:0 5px;line-height:19px}.dark-mode .el-tag--mini .el-icon-close{margin-left:-3px;-webkit-transform:scale(.7);transform:scale(.7)}.dark-mode .el-cascader{display:inline-block;position:relative;font-size:14px;line-height:40px}.dark-mode .el-cascader:not(.is-disabled):hover .el-input__inner{cursor:pointer;border-color:#ccc}.dark-mode .el-cascader .el-input .el-input__inner:focus,.dark-mode .el-cascader .el-input.is-focus .el-input__inner{border-color:#d71a1b}.dark-mode .el-cascader .el-input{cursor:pointer}.dark-mode .el-cascader .el-input .el-input__inner{text-overflow:ellipsis}.dark-mode .el-cascader .el-input .el-icon-arrow-down{-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;font-size:14px}.dark-mode .el-cascader .el-input .el-icon-arrow-down.is-reverse{-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg)}.dark-mode .el-cascader .el-input .el-icon-circle-close:hover{color:#bcbcbc}.dark-mode .el-cascader--medium{font-size:14px;line-height:36px}.dark-mode .el-cascader--small{font-size:13px;line-height:32px}.dark-mode .el-cascader--mini{font-size:12px;line-height:28px}.dark-mode .el-cascader.is-disabled .el-cascader__label{z-index:2;color:#ccc}.dark-mode .el-cascader__dropdown{margin:5px 0;font-size:14px;background:#232222;border:1px solid #7a7a7a;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)}.dark-mode .el-cascader__tags{position:absolute;left:0;right:30px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;line-height:normal;text-align:left;box-sizing:border-box}.dark-mode .el-cascader__tags .el-tag{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;max-width:100%;margin:2px 0 2px 6px;text-overflow:ellipsis;background:#f0f2f5}.dark-mode .el-cascader__tags .el-tag:not(.is-hit){border-color:transparent}.dark-mode .el-cascader__tags .el-tag>span{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:hidden;text-overflow:ellipsis}.dark-mode .el-cascader__tags .el-tag .el-icon-close{-webkit-box-flex:0;-ms-flex:none;flex:none;background-color:#ccc;color:#232222}.dark-mode .el-cascader__tags .el-tag .el-icon-close:hover{background-color:#bcbcbc}.dark-mode .el-cascader__suggestion-panel{border-radius:4px}.dark-mode .el-cascader__suggestion-list{max-height:204px;margin:0;padding:6px 0;font-size:14px;color:#b8b8b8;text-align:center}.dark-mode .el-cascader__suggestion-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:34px;padding:0 15px;text-align:left;outline:0;cursor:pointer}.dark-mode .el-cascader__suggestion-item:focus,.dark-mode .el-cascader__suggestion-item:hover{background:#171315}.dark-mode .el-cascader__suggestion-item.is-checked{color:#d71a1b;font-weight:700}.dark-mode .el-cascader__suggestion-item>span{margin-right:10px}.dark-mode .el-cascader__empty-text{margin:10px 0;color:#ccc}.dark-mode .el-cascader__search-input{-webkit-box-flex:1;-ms-flex:1;flex:1;height:24px;min-width:60px;margin:2px 0 2px 15px;padding:0;color:#b8b8b8;border:none;outline:0;-webkit-box-sizing:border-box;box-sizing:border-box}.dark-mode .el-cascader__search-input::-webkit-input-placeholder{color:#ccc}.dark-mode .el-cascader__search-input::-ms-input-placeholder{color:#ccc}.dark-mode .el-cascader__search-input::placeholder{color:#ccc}.dark-mode .el-color-predefine{display:-webkit-box;display:-ms-flexbox;display:flex;font-size:12px;margin-top:8px;width:280px}.dark-mode .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}.dark-mode .el-color-predefine__color-selector{margin:0 0 8px 8px;width:20px;height:20px;border-radius:4px;cursor:pointer}.dark-mode .el-color-predefine__color-selector:nth-child(10n+1){margin-left:0}.dark-mode .el-color-predefine__color-selector.selected{-webkit-box-shadow:0 0 3px 2px #d71a1b;box-shadow:0 0 3px 2px #d71a1b}.dark-mode .el-color-predefine__color-selector>div{display:-webkit-box;display:-ms-flexbox;display:flex;height:100%;border-radius:3px}.dark-mode .el-color-predefine__color-selector.is-alpha{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.dark-mode .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}.dark-mode .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%}.dark-mode .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}.dark-mode .el-color-hue-slider.is-vertical{width:12px;height:180px;padding:2px 0}.dark-mode .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%)}.dark-mode .el-color-hue-slider.is-vertical .el-color-hue-slider__thumb{left:0;top:0;width:100%;height:4px}.dark-mode .el-color-svpanel{position:relative;width:280px;height:180px}.dark-mode .el-color-svpanel__black,.dark-mode .el-color-svpanel__white{position:absolute;top:0;left:0;right:0;bottom:0}.dark-mode .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))}.dark-mode .el-color-svpanel__black{background:-webkit-gradient(linear,left bottom,left top,from(#000),to(rgba(0,0,0,0)));background:linear-gradient(to top,#000,rgba(0,0,0,0))}.dark-mode .el-color-svpanel__cursor{position:absolute}.dark-mode .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)}.dark-mode .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==)}.dark-mode .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%}.dark-mode .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}.dark-mode .el-color-alpha-slider.is-vertical{width:20px;height:180px}.dark-mode .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%)}.dark-mode .el-color-alpha-slider.is-vertical .el-color-alpha-slider__thumb{left:0;top:0;width:100%;height:4px}.dark-mode .el-color-dropdown{width:300px}.dark-mode .el-color-dropdown__main-wrapper{margin-bottom:6px}.dark-mode .el-color-dropdown__main-wrapper::after{content:\"\";display:table;clear:both}.dark-mode .el-color-dropdown__btns{margin-top:6px;text-align:right}.dark-mode .el-color-dropdown__value{float:left;line-height:26px;font-size:12px;color:#f4f4f4;width:160px}.dark-mode .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}.dark-mode .el-color-dropdown__btn[disabled]{color:#ccc;cursor:not-allowed}.dark-mode .el-color-dropdown__btn:hover{color:#d71a1b;border-color:#d71a1b}.dark-mode .el-color-dropdown__link-btn{cursor:pointer;color:#d71a1b;text-decoration:none;padding:15px;font-size:12px}.dark-mode .el-color-dropdown__link-btn:hover{color:tint(#d71a1b,20%)}.dark-mode .el-color-picker{display:inline-block;position:relative;line-height:normal;height:40px}.dark-mode .el-color-picker.is-disabled .el-color-picker__trigger{cursor:not-allowed}.dark-mode .el-color-picker--medium{height:36px}.dark-mode .el-color-picker--medium .el-color-picker__trigger{height:36px;width:36px}.dark-mode .el-color-picker--medium .el-color-picker__mask{height:34px;width:34px}.dark-mode .el-color-picker--small{height:32px}.dark-mode .el-color-picker--small .el-color-picker__trigger{height:32px;width:32px}.dark-mode .el-color-picker--small .el-color-picker__mask{height:30px;width:30px}.dark-mode .el-color-picker--small .el-color-picker__empty,.dark-mode .el-color-picker--small .el-color-picker__icon{-webkit-transform:translate3d(-50%,-50%,0) scale(.8);transform:translate3d(-50%,-50%,0) scale(.8)}.dark-mode .el-color-picker--mini{height:28px}.dark-mode .el-color-picker--mini .el-color-picker__trigger{height:28px;width:28px}.dark-mode .el-color-picker--mini .el-color-picker__mask{height:26px;width:26px}.dark-mode .el-color-picker--mini .el-color-picker__empty,.dark-mode .el-color-picker--mini .el-color-picker__icon{-webkit-transform:translate3d(-50%,-50%,0) scale(.8);transform:translate3d(-50%,-50%,0) scale(.8)}.dark-mode .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)}.dark-mode .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}.dark-mode .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}.dark-mode .el-color-picker__color.is-alpha{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.dark-mode .el-color-picker__color-inner{position:absolute;left:0;top:0;right:0;bottom:0}.dark-mode .el-color-picker__empty,.dark-mode .el-color-picker__icon{top:50%;left:50%;font-size:12px;position:absolute}.dark-mode .el-color-picker__empty{color:#999;-webkit-transform:translate3d(-50%,-50%,0);transform:translate3d(-50%,-50%,0)}.dark-mode .el-color-picker__icon{display:inline-block;width:100%;-webkit-transform:translate3d(-50%,-50%,0);transform:translate3d(-50%,-50%,0);color:#232222;text-align:center}.dark-mode .el-color-picker__panel{position:absolute;z-index:10;padding:6px;-webkit-box-sizing:content-box;box-sizing:content-box;background-color:#232222;border:1px solid #454545;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)}.dark-mode .el-textarea{position:relative;display:inline-block;width:100%;vertical-align:bottom;font-size:14px}.dark-mode .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:#b8b8b8;background-color:#232222;background-image:none;border:1px solid #bebebe;border-radius:4px;-webkit-transition:border-color .2s cubic-bezier(.645,.045,.355,1);transition:border-color .2s cubic-bezier(.645,.045,.355,1)}.dark-mode .el-textarea__inner::-webkit-input-placeholder{color:#ccc}.dark-mode .el-textarea__inner::-ms-input-placeholder{color:#ccc}.dark-mode .el-textarea__inner::placeholder{color:#ccc}.dark-mode .el-textarea__inner:hover{border-color:#ccc}.dark-mode .el-textarea__inner:focus{outline:0;border-color:#d71a1b}.dark-mode .el-textarea .el-input__count{color:#b8b8b8;background:#232222;position:absolute;font-size:12px;bottom:5px;right:10px}.dark-mode .el-textarea.is-disabled .el-textarea__inner{background-color:#171315;border-color:#7a7a7a;color:#ccc;cursor:not-allowed}.dark-mode .el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder{color:#ccc}.dark-mode .el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder{color:#ccc}.dark-mode .el-textarea.is-disabled .el-textarea__inner::placeholder{color:#ccc}.dark-mode .el-textarea.is-exceed .el-textarea__inner{border-color:#f56c6c}.dark-mode .el-textarea.is-exceed .el-input__count{color:#f56c6c}.dark-mode .el-input{position:relative;font-size:14px;display:inline-block;width:100%}.dark-mode .el-input::-webkit-scrollbar{z-index:11;width:6px}.dark-mode .el-input::-webkit-scrollbar:horizontal{height:6px}.dark-mode .el-input::-webkit-scrollbar-thumb{border-radius:5px;width:6px;background:#b4bccc}.dark-mode .el-input::-webkit-scrollbar-corner{background:#fff}.dark-mode .el-input::-webkit-scrollbar-track{background:#fff}.dark-mode .el-input::-webkit-scrollbar-track-piece{background:#fff;width:6px}.dark-mode .el-input .el-input__clear{color:#ccc;font-size:14px;cursor:pointer;-webkit-transition:color .2s cubic-bezier(.645,.045,.355,1);transition:color .2s cubic-bezier(.645,.045,.355,1)}.dark-mode .el-input .el-input__clear:hover{color:#bcbcbc}.dark-mode .el-input .el-input__count{height:100%;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#b8b8b8;font-size:12px}.dark-mode .el-input .el-input__count .el-input__count-inner{background:#232222;line-height:initial;display:inline-block;padding:0 5px}.dark-mode .el-input__inner{-webkit-appearance:none;background-color:#232222;background-image:none;border-radius:4px;border:1px solid #bebebe;-webkit-box-sizing:border-box;box-sizing:border-box;color:#b8b8b8;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%}.dark-mode .el-input__prefix,.dark-mode .el-input__suffix{position:absolute;top:0;-webkit-transition:all .3s;height:100%;color:#ccc;text-align:center}.dark-mode .el-input__inner::-webkit-input-placeholder{color:#ccc}.dark-mode .el-input__inner::-ms-input-placeholder{color:#ccc}.dark-mode .el-input__inner::placeholder{color:#ccc}.dark-mode .el-input__inner:hover{border-color:#ccc}.dark-mode .el-input.is-active .el-input__inner,.dark-mode .el-input__inner:focus{border-color:#d71a1b;outline:0}.dark-mode .el-input__suffix{right:5px;transition:all .3s}.dark-mode .el-input__suffix-inner{pointer-events:all}.dark-mode .el-input__prefix{left:5px;transition:all .3s}.dark-mode .el-input__icon{height:100%;width:25px;text-align:center;-webkit-transition:all .3s;transition:all .3s;line-height:40px}.dark-mode .el-input__icon:after{content:'';height:100%;width:0;display:inline-block;vertical-align:middle}.dark-mode .el-input__validateIcon{pointer-events:none}.dark-mode .el-input.is-disabled .el-input__inner{background-color:#171315;border-color:#7a7a7a;color:#ccc;cursor:not-allowed}.dark-mode .el-input.is-disabled .el-input__inner::-webkit-input-placeholder{color:#ccc}.dark-mode .el-input.is-disabled .el-input__inner::-ms-input-placeholder{color:#ccc}.dark-mode .el-input.is-disabled .el-input__inner::placeholder{color:#ccc}.dark-mode .el-input.is-disabled .el-input__icon{cursor:not-allowed}.dark-mode .el-link,.dark-mode .el-transfer-panel__filter .el-icon-circle-close{cursor:pointer}.dark-mode .el-input.is-exceed .el-input__inner{border-color:#f56c6c}.dark-mode .el-input.is-exceed .el-input__suffix .el-input__count{color:#f56c6c}.dark-mode .el-input--suffix .el-input__inner{padding-right:30px}.dark-mode .el-input--prefix .el-input__inner{padding-left:30px}.dark-mode .el-input--medium{font-size:14px}.dark-mode .el-input--medium .el-input__inner{height:36px;line-height:36px}.dark-mode .el-input--medium .el-input__icon{line-height:36px}.dark-mode .el-input--small{font-size:13px}.dark-mode .el-input--small .el-input__inner{height:32px;line-height:32px}.dark-mode .el-input--small .el-input__icon{line-height:32px}.dark-mode .el-input--mini{font-size:12px}.dark-mode .el-input--mini .el-input__inner{height:28px;line-height:28px}.dark-mode .el-input--mini .el-input__icon{line-height:28px}.dark-mode .el-input-group{line-height:normal;display:inline-table;width:100%;border-collapse:separate;border-spacing:0}.dark-mode .el-input-group>.el-input__inner{vertical-align:middle;display:table-cell}.dark-mode .el-input-group__append,.dark-mode .el-input-group__prepend{background-color:#171315;color:#b8b8b8;vertical-align:middle;display:table-cell;position:relative;border:1px solid #bebebe;border-radius:4px;padding:0 20px;width:1px;white-space:nowrap}.dark-mode .el-input-group--prepend .el-input__inner,.dark-mode .el-input-group__append{border-top-left-radius:0;border-bottom-left-radius:0}.dark-mode .el-input-group--append .el-input__inner,.dark-mode .el-input-group__prepend{border-top-right-radius:0;border-bottom-right-radius:0}.dark-mode .el-input-group__append:focus,.dark-mode .el-input-group__prepend:focus{outline:0}.dark-mode .el-input-group__append .el-button,.dark-mode .el-input-group__append .el-select,.dark-mode .el-input-group__prepend .el-button,.dark-mode .el-input-group__prepend .el-select{display:inline-block;margin:-10px -20px}.dark-mode .el-input-group__append button.el-button,.dark-mode .el-input-group__append div.el-select .el-input__inner,.dark-mode .el-input-group__append div.el-select:hover .el-input__inner,.dark-mode .el-input-group__prepend button.el-button,.dark-mode .el-input-group__prepend div.el-select .el-input__inner,.dark-mode .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}.dark-mode .el-input-group__append .el-button,.dark-mode .el-input-group__append .el-input,.dark-mode .el-input-group__prepend .el-button,.dark-mode .el-input-group__prepend .el-input{font-size:inherit}.dark-mode .el-input-group__prepend{border-right:0}.dark-mode .el-input-group__append{border-left:0}.dark-mode .el-input-group--append .el-select .el-input.is-focus .el-input__inner,.dark-mode .el-input-group--prepend .el-select .el-input.is-focus .el-input__inner{border-color:transparent}.dark-mode .el-input__inner::-ms-clear{display:none;width:0;height:0}.dark-mode .el-transfer{font-size:14px}.dark-mode .el-transfer__buttons{display:inline-block;vertical-align:middle;padding:0 30px}.dark-mode .el-transfer__button{display:block;margin:0 auto;padding:10px;border-radius:50%;color:#232222;background-color:#d71a1b;font-size:0}.dark-mode .el-transfer-panel__item+.el-transfer-panel__item,.dark-mode .el-transfer__button [class*=el-icon-]+span{margin-left:0}.dark-mode .el-transfer__button.is-with-texts{border-radius:4px}.dark-mode .el-transfer__button.is-disabled,.dark-mode .el-transfer__button.is-disabled:hover{border:1px solid #bebebe;background-color:#171315;color:#ccc}.dark-mode .el-transfer__button:first-child{margin-bottom:10px}.dark-mode .el-transfer__button:nth-child(2){margin:0}.dark-mode .el-transfer__button i,.dark-mode .el-transfer__button span{font-size:14px}.dark-mode .el-transfer-panel{border:1px solid #454545;border-radius:4px;overflow:hidden;background:#232222;display:inline-block;vertical-align:middle;width:200px;max-height:100%;-webkit-box-sizing:border-box;box-sizing:border-box;position:relative}.dark-mode .el-transfer-panel__body{height:246px}.dark-mode .el-transfer-panel__body.is-with-footer{padding-bottom:40px}.dark-mode .el-transfer-panel__list{margin:0;padding:6px 0;list-style:none;height:246px;overflow:auto;-webkit-box-sizing:border-box;box-sizing:border-box}.dark-mode .el-transfer-panel__list.is-filterable{height:194px;padding-top:0}.dark-mode .el-transfer-panel__item{height:30px;line-height:30px;padding-left:15px;display:block!important}.dark-mode .el-transfer-panel__item.el-checkbox{color:#b8b8b8}.dark-mode .el-transfer-panel__item:hover{color:#d71a1b}.dark-mode .el-transfer-panel__item.el-checkbox .el-checkbox__label{width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:24px;line-height:30px}.dark-mode .el-transfer-panel__item .el-checkbox__input{position:absolute;top:8px}.dark-mode .el-transfer-panel__filter{text-align:center;margin:15px;-webkit-box-sizing:border-box;box-sizing:border-box;display:block;width:auto}.dark-mode .el-transfer-panel__filter .el-input__inner{height:32px;width:100%;font-size:12px;display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:16px;padding-right:10px;padding-left:30px}.dark-mode .el-transfer-panel__filter .el-input__icon{margin-left:5px}.dark-mode .el-transfer-panel .el-transfer-panel__header{height:40px;line-height:40px;background:#171315;margin:0;padding-left:15px;border-bottom:1px solid #454545;-webkit-box-sizing:border-box;box-sizing:border-box;color:#f4f4f4}.dark-mode .el-transfer-panel .el-transfer-panel__header .el-checkbox{display:block;line-height:40px}.dark-mode .el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label{font-size:16px;color:#fff;font-weight:400}.dark-mode .el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label span{position:absolute;right:15px;color:#bcbcbc;font-size:12px;font-weight:400}.dark-mode .el-divider__text,.dark-mode .el-link{font-weight:500;font-size:14px}.dark-mode .el-transfer-panel .el-transfer-panel__footer{height:40px;background:#232222;margin:0;padding:0;border-top:1px solid #454545;position:absolute;bottom:0;left:0;width:100%;z-index:1}.dark-mode .el-transfer-panel .el-transfer-panel__footer::after{display:inline-block;content:\"\";height:100%;vertical-align:middle}.dark-mode .el-container,.dark-mode .el-timeline-item__node{display:-webkit-box;display:-ms-flexbox}.dark-mode .el-transfer-panel .el-transfer-panel__footer .el-checkbox{padding-left:20px;color:#b8b8b8}.dark-mode .el-transfer-panel .el-transfer-panel__empty{margin:0;height:30px;line-height:30px;padding:6px 15px 0;color:#bcbcbc;text-align:center}.dark-mode .el-transfer-panel .el-checkbox__label{padding-left:8px}.dark-mode .el-transfer-panel .el-checkbox__inner{height:14px;width:14px;border-radius:3px}.dark-mode .el-transfer-panel .el-checkbox__inner::after{height:6px;width:3px;left:4px}.dark-mode .el-container{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}.dark-mode .el-container.is-vertical,.dark-mode .el-drawer{-webkit-box-orient:vertical;-webkit-box-direction:normal}.dark-mode .el-aside,.dark-mode .el-header{-webkit-box-sizing:border-box}.dark-mode .el-container.is-vertical{-ms-flex-direction:column;flex-direction:column}.dark-mode .el-header{padding:0 20px;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0}.dark-mode .el-aside{overflow:auto;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0}.dark-mode .el-footer,.dark-mode .el-main{-webkit-box-sizing:border-box}.dark-mode .el-main{display:block;-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-preferred-size:auto;flex-basis:auto;overflow:auto;box-sizing:border-box;padding:20px}.dark-mode .el-footer{padding:0 20px;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0}.dark-mode .el-timeline{margin:0;font-size:14px;list-style:none}.dark-mode .el-timeline .el-timeline-item:last-child .el-timeline-item__tail{display:none}.dark-mode .el-timeline-item{position:relative;padding-bottom:20px}.dark-mode .el-timeline-item__wrapper{position:relative;padding-left:28px;top:-3px}.dark-mode .el-timeline-item__tail{position:absolute;left:4px;height:100%;border-left:2px solid #7a7a7a}.dark-mode .el-timeline-item__icon{color:#232222;font-size:13px}.dark-mode .el-timeline-item__node{position:absolute;background-color:#7a7a7a;border-radius:50%;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.dark-mode .el-image__error,.dark-mode .el-timeline-item__dot{display:-webkit-box;display:-ms-flexbox}.dark-mode .el-timeline-item__node--normal{left:-1px;width:12px;height:12px}.dark-mode .el-timeline-item__node--large{left:-2px;width:14px;height:14px}.dark-mode .el-timeline-item__node--primary{background-color:#d71a1b}.dark-mode .el-timeline-item__node--success{background-color:#67c23a}.dark-mode .el-timeline-item__node--warning{background-color:#e6a23c}.dark-mode .el-timeline-item__node--danger{background-color:#f56c6c}.dark-mode .el-timeline-item__node--info{background-color:#b8b8b8}.dark-mode .el-timeline-item__dot{position:absolute;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.dark-mode .el-timeline-item__content{color:#fff}.dark-mode .el-timeline-item__timestamp{color:#bcbcbc;line-height:1;font-size:13px}.dark-mode .el-timeline-item__timestamp.is-top{margin-bottom:8px;padding-top:4px}.dark-mode .el-timeline-item__timestamp.is-bottom{margin-top:8px}.dark-mode .el-link{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;vertical-align:middle;position:relative;text-decoration:none;outline:0;padding:0}.dark-mode .el-link.is-underline:hover:after{content:\"\";position:absolute;left:0;right:0;height:0;bottom:0;border-bottom:1px solid #d71a1b}.dark-mode .el-link.el-link--default:after,.dark-mode .el-link.el-link--primary.is-underline:hover:after,.dark-mode .el-link.el-link--primary:after{border-color:#d71a1b}.dark-mode .el-link.is-disabled{cursor:not-allowed}.dark-mode .el-link [class*=el-icon-]+span{margin-left:5px}.dark-mode .el-link.el-link--default{color:#b8b8b8}.dark-mode .el-link.el-link--default:hover{color:#d71a1b}.dark-mode .el-link.el-link--default.is-disabled{color:#ccc}.dark-mode .el-link.el-link--primary{color:#d71a1b}.dark-mode .el-link.el-link--primary:hover{color:#b31c1c}.dark-mode .el-link.el-link--primary.is-disabled{color:#7d1e1f}.dark-mode .el-link.el-link--danger.is-underline:hover:after,.dark-mode .el-link.el-link--danger:after{border-color:#f56c6c}.dark-mode .el-link.el-link--danger{color:#f56c6c}.dark-mode .el-link.el-link--danger:hover{color:#cb5d5d}.dark-mode .el-link.el-link--danger.is-disabled{color:#8c4747}.dark-mode .el-link.el-link--success.is-underline:hover:after,.dark-mode .el-link.el-link--success:after{border-color:#67c23a}.dark-mode .el-link.el-link--success{color:#67c23a}.dark-mode .el-link.el-link--success:hover{color:#59a235}.dark-mode .el-link.el-link--success.is-disabled{color:#45722e}.dark-mode .el-link.el-link--warning.is-underline:hover:after,.dark-mode .el-link.el-link--warning:after{border-color:#e6a23c}.dark-mode .el-link.el-link--warning{color:#e6a23c}.dark-mode .el-link.el-link--warning:hover{color:#bf8837}.dark-mode .el-link.el-link--warning.is-disabled{color:#85622f}.dark-mode .el-link.el-link--info.is-underline:hover:after,.dark-mode .el-link.el-link--info:after{border-color:#b8b8b8}.dark-mode .el-link.el-link--info{color:#b8b8b8}.dark-mode .el-link.el-link--info:hover{color:#9a9a9a}.dark-mode .el-link.el-link--info.is-disabled{color:#6e6d6d}.dark-mode .el-divider{background-color:#bebebe;position:relative}.dark-mode .el-divider--horizontal{display:block;height:1px;width:100%;margin:24px 0}.dark-mode .el-divider--vertical{display:inline-block;width:1px;height:1em;margin:0 8px;vertical-align:middle;position:relative}.dark-mode .el-divider__text{position:absolute;background-color:#232222;padding:0 20px;color:#fff}.dark-mode .el-image__error,.dark-mode .el-image__placeholder{background:#171315}.dark-mode .el-divider__text.is-left{left:20px;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.dark-mode .el-divider__text.is-center{left:50%;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.dark-mode .el-divider__text.is-right{right:20px;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.dark-mode .el-image__error,.dark-mode .el-image__inner,.dark-mode .el-image__placeholder{width:100%;height:100%}.dark-mode .el-image{position:relative;display:inline-block;overflow:hidden}.dark-mode .el-image__inner{vertical-align:top}.dark-mode .el-image__inner--center{position:relative;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);display:block}.dark-mode .el-image__error{display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:14px;color:#ccc;vertical-align:middle}.dark-mode .el-image__preview{cursor:pointer}.dark-mode .el-image-viewer__wrapper{position:fixed;top:0;right:0;bottom:0;left:0}.dark-mode .el-image-viewer__btn{position:absolute;z-index: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;border-radius:50%;opacity:.8;cursor:pointer;-webkit-box-sizing:border-box;box-sizing:border-box;user-select:none}.dark-mode .el-button,.dark-mode .el-checkbox{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.dark-mode .el-image-viewer__close{top:40px;right:40px;width:40px;height:40px;font-size:40px}.dark-mode .el-image-viewer__canvas{width:100%;height:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.dark-mode .el-image-viewer__actions{left:50%;bottom:30px;-webkit-transform:translateX(-50%);transform:translateX(-50%);width:282px;height:44px;padding:0 23px;background-color:#606266;border-color:#fff;border-radius:22px}.dark-mode .el-image-viewer__actions__inner{width:100%;height:100%;text-align:justify;cursor:default;font-size:23px;color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-pack:distribute;justify-content:space-around}.dark-mode .el-image-viewer__next,.dark-mode .el-image-viewer__prev{top:50%;width:44px;height:44px;font-size:24px;color:#fff;background-color:#606266;border-color:#fff}.dark-mode .el-image-viewer__prev{-webkit-transform:translateY(-50%);transform:translateY(-50%);left:40px}.dark-mode .el-image-viewer__next{-webkit-transform:translateY(-50%);transform:translateY(-50%);right:40px;text-indent:2px}.dark-mode .el-image-viewer__mask{position:absolute;width:100%;height:100%;top:0;left:0;opacity:.5;background:#000}.dark-mode .viewer-fade-enter-active{-webkit-animation:viewer-fade-in .3s;animation:viewer-fade-in .3s}.dark-mode .viewer-fade-leave-active{-webkit-animation:viewer-fade-out .3s;animation:viewer-fade-out .3s}@-webkit-keyframes viewer-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 viewer-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 viewer-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 viewer-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}}.dark-mode .el-button{display:inline-block;line-height:1;white-space:nowrap;cursor:pointer;background:#232222;border:1px solid #bebebe;color:#b8b8b8;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;-webkit-transition:.1s;transition:.1s;font-weight:500;padding:12px 20px;font-size:14px;border-radius:4px}.dark-mode .el-button+.el-button{margin-left:10px}.dark-mode .el-button:focus,.dark-mode .el-button:hover{color:#d71a1b;border-color:#592020;background-color:#352121}.dark-mode .el-button:active{color:#da3031;border-color:#da3031;outline:0}.dark-mode .el-button::-moz-focus-inner{border:0}.dark-mode .el-button [class*=el-icon-]+span{margin-left:5px}.dark-mode .el-button.is-plain:focus,.dark-mode .el-button.is-plain:hover{background:#232222;border-color:#d71a1b;color:#d71a1b}.dark-mode .el-button.is-active,.dark-mode .el-button.is-plain:active{color:#da3031;border-color:#da3031}.dark-mode .el-button.is-plain:active{background:#232222;outline:0}.dark-mode .el-button.is-disabled,.dark-mode .el-button.is-disabled:focus,.dark-mode .el-button.is-disabled:hover{color:#ccc;cursor:not-allowed;background-image:none;background-color:#232222;border-color:#454545}.dark-mode .el-button.is-disabled.el-button--text{background-color:transparent}.dark-mode .el-button.is-disabled.is-plain,.dark-mode .el-button.is-disabled.is-plain:focus,.dark-mode .el-button.is-disabled.is-plain:hover{background-color:#232222;border-color:#454545;color:#ccc}.dark-mode .el-button.is-loading{position:relative;pointer-events:none}.dark-mode .el-button.is-loading:before{pointer-events:none;content:'';position:absolute;left:-1px;top:-1px;right:-1px;bottom:-1px;border-radius:inherit;background-color:rgba(255,255,255,.35)}.dark-mode .el-button.is-round{border-radius:20px;padding:12px 23px}.dark-mode .el-button.is-circle{border-radius:50%;padding:12px}.dark-mode .el-button--primary{color:#232222;background-color:#d71a1b;border-color:#d71a1b}.dark-mode .el-button--primary:focus,.dark-mode .el-button--primary:hover{background:#b31c1c;border-color:#b31c1c;color:#232222}.dark-mode .el-button--primary.is-active,.dark-mode .el-button--primary:active{background:#da3031;border-color:#da3031;color:#232222}.dark-mode .el-button--primary:active{outline:0}.dark-mode .el-button--primary.is-disabled,.dark-mode .el-button--primary.is-disabled:active,.dark-mode .el-button--primary.is-disabled:focus,.dark-mode .el-button--primary.is-disabled:hover{color:#232222;background-color:#7d1e1f;border-color:#7d1e1f}.dark-mode .el-button--primary.is-plain{color:#d71a1b;background:#352121;border-color:#6b1f1f}.dark-mode .el-button--primary.is-plain:focus,.dark-mode .el-button--primary.is-plain:hover{background:#d71a1b;border-color:#d71a1b;color:#232222}.dark-mode .el-button--primary.is-plain:active{background:#da3031;border-color:#da3031;color:#232222;outline:0}.dark-mode .el-button--primary.is-plain.is-disabled,.dark-mode .el-button--primary.is-plain.is-disabled:active,.dark-mode .el-button--primary.is-plain.is-disabled:focus,.dark-mode .el-button--primary.is-plain.is-disabled:hover{color:#8f1d1e;background-color:#352121;border-color:#472021}.dark-mode .el-button--success{color:#232222;background-color:#67c23a;border-color:#67c23a}.dark-mode .el-button--success:focus,.dark-mode .el-button--success:hover{background:#59a235;border-color:#59a235;color:#232222}.dark-mode .el-button--success.is-active,.dark-mode .el-button--success:active{background:#75c74d;border-color:#75c74d;color:#232222}.dark-mode .el-button--success:active{outline:0}.dark-mode .el-button--success.is-disabled,.dark-mode .el-button--success.is-disabled:active,.dark-mode .el-button--success.is-disabled:focus,.dark-mode .el-button--success.is-disabled:hover{color:#232222;background-color:#45722e;border-color:#45722e}.dark-mode .el-button--success.is-plain{color:#67c23a;background:#2a3224;border-color:#3e622c}.dark-mode .el-button--success.is-plain:focus,.dark-mode .el-button--success.is-plain:hover{background:#67c23a;border-color:#67c23a;color:#232222}.dark-mode .el-button--success.is-plain:active{background:#75c74d;border-color:#75c74d;color:#232222;outline:0}.dark-mode .el-button--success.is-plain.is-disabled,.dark-mode .el-button--success.is-plain.is-disabled:active,.dark-mode .el-button--success.is-plain.is-disabled:focus,.dark-mode .el-button--success.is-plain.is-disabled:hover{color:#4c8230;background-color:#2a3224;border-color:#314227}.dark-mode .el-button--warning{color:#232222;background-color:#e6a23c;border-color:#e6a23c}.dark-mode .el-button--warning:focus,.dark-mode .el-button--warning:hover{background:#bf8837;border-color:#bf8837;color:#232222}.dark-mode .el-button--warning.is-active,.dark-mode .el-button--warning:active{background:#e7aa4e;border-color:#e7aa4e;color:#232222}.dark-mode .el-button--warning:active{outline:0}.dark-mode .el-button--warning.is-disabled,.dark-mode .el-button--warning.is-disabled:active,.dark-mode .el-button--warning.is-disabled:focus,.dark-mode .el-button--warning.is-disabled:hover{color:#232222;background-color:#85622f;border-color:#85622f}.dark-mode .el-button--warning.is-plain{color:#e6a23c;background:#372f25;border-color:#71552c}.dark-mode .el-button--warning.is-plain:focus,.dark-mode .el-button--warning.is-plain:hover{background:#e6a23c;border-color:#e6a23c;color:#232222}.dark-mode .el-button--warning.is-plain:active{background:#e7aa4e;border-color:#e7aa4e;color:#232222;outline:0}.dark-mode .el-button--warning.is-plain.is-disabled,.dark-mode .el-button--warning.is-plain.is-disabled:active,.dark-mode .el-button--warning.is-plain.is-disabled:focus,.dark-mode .el-button--warning.is-plain.is-disabled:hover{color:#986f32;background-color:#372f25;border-color:#4a3c27}.dark-mode .el-button--danger{color:#232222;background-color:#f56c6c;border-color:#f56c6c}.dark-mode .el-button--danger:focus,.dark-mode .el-button--danger:hover{background:#cb5d5d;border-color:#cb5d5d;color:#232222}.dark-mode .el-button--danger.is-active,.dark-mode .el-button--danger:active{background:#f57a7a;border-color:#f57a7a;color:#232222}.dark-mode .el-button--danger:active{outline:0}.dark-mode .el-button--danger.is-disabled,.dark-mode .el-button--danger.is-disabled:active,.dark-mode .el-button--danger.is-disabled:focus,.dark-mode .el-button--danger.is-disabled:hover{color:#232222;background-color:#8c4747;border-color:#8c4747}.dark-mode .el-button--danger.is-plain{color:#f56c6c;background:#382929;border-color:#774040}.dark-mode .el-button--danger.is-plain:focus,.dark-mode .el-button--danger.is-plain:hover{background:#f56c6c;border-color:#f56c6c;color:#232222}.dark-mode .el-button--danger.is-plain:active{background:#f57a7a;border-color:#f57a7a;color:#232222;outline:0}.dark-mode .el-button--danger.is-plain.is-disabled,.dark-mode .el-button--danger.is-plain.is-disabled:active,.dark-mode .el-button--danger.is-plain.is-disabled:focus,.dark-mode .el-button--danger.is-plain.is-disabled:hover{color:#a14e4e;background-color:#382929;border-color:#4d3131}.dark-mode .el-button--info{color:#232222;background-color:#b8b8b8;border-color:#b8b8b8}.dark-mode .el-button--info:focus,.dark-mode .el-button--info:hover{background:#9a9a9a;border-color:#9a9a9a;color:#232222}.dark-mode .el-button--info.is-active,.dark-mode .el-button--info:active{background:#bebebe;border-color:#bebebe;color:#232222}.dark-mode .el-button--info:active{outline:0}.dark-mode .el-button--info.is-disabled,.dark-mode .el-button--info.is-disabled:active,.dark-mode .el-button--info.is-disabled:focus,.dark-mode .el-button--info.is-disabled:hover{color:#232222;background-color:#6e6d6d;border-color:#6e6d6d}.dark-mode .el-button--info.is-plain{color:#b8b8b8;background:#323131;border-color:#5f5e5e}.dark-mode .el-button--info.is-plain:focus,.dark-mode .el-button--info.is-plain:hover{background:#b8b8b8;border-color:#b8b8b8;color:#232222}.dark-mode .el-button--info.is-plain:active{background:#bebebe;border-color:#bebebe;color:#232222;outline:0}.dark-mode .el-button--info.is-plain.is-disabled,.dark-mode .el-button--info.is-plain.is-disabled:active,.dark-mode .el-button--info.is-plain.is-disabled:focus,.dark-mode .el-button--info.is-plain.is-disabled:hover{color:#7c7c7c;background-color:#323131;border-color:#414040}.dark-mode .el-button--text,.dark-mode .el-button--text.is-disabled,.dark-mode .el-button--text.is-disabled:focus,.dark-mode .el-button--text.is-disabled:hover,.dark-mode .el-button--text:active{border-color:transparent}.dark-mode .el-button--medium{padding:10px 20px;font-size:14px;border-radius:4px}.dark-mode .el-button--mini,.dark-mode .el-button--small{font-size:12px;border-radius:3px}.dark-mode .el-button--medium.is-round{padding:10px 20px}.dark-mode .el-button--medium.is-circle{padding:10px}.dark-mode .el-button--small,.dark-mode .el-button--small.is-round{padding:9px 15px}.dark-mode .el-button--small.is-circle{padding:9px}.dark-mode .el-button--mini,.dark-mode .el-button--mini.is-round{padding:7px 15px}.dark-mode .el-button--mini.is-circle{padding:7px}.dark-mode .el-button--text{color:#d71a1b;background:0 0;padding-left:0;padding-right:0}.dark-mode .el-button--text:focus,.dark-mode .el-button--text:hover{color:#b31c1c;border-color:transparent;background-color:transparent}.dark-mode .el-button--text:active{color:#da3031;background-color:transparent}.dark-mode .el-button-group{display:inline-block;vertical-align:middle}.dark-mode .el-button-group::after,.dark-mode .el-button-group::before{display:table;content:\"\"}.dark-mode .el-button-group::after{clear:both}.dark-mode .el-button-group>.el-button{float:left;position:relative}.dark-mode .el-button-group>.el-button+.el-button{margin-left:0}.dark-mode .el-button-group>.el-button.is-disabled{z-index:1}.dark-mode .el-button-group>.el-button:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.dark-mode .el-button-group>.el-button:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.dark-mode .el-button-group>.el-button:first-child:last-child{border-radius:4px}.dark-mode .el-button-group>.el-button:first-child:last-child.is-round{border-radius:20px}.dark-mode .el-button-group>.el-button:first-child:last-child.is-circle{border-radius:50%}.dark-mode .el-button-group>.el-button:not(:first-child):not(:last-child){border-radius:0}.dark-mode .el-button-group>.el-button:not(:last-child){margin-right:-1px}.dark-mode .el-button-group>.el-button.is-active,.dark-mode .el-button-group>.el-button:active,.dark-mode .el-button-group>.el-button:focus,.dark-mode .el-button-group>.el-button:hover{z-index:1}.dark-mode .el-button-group>.el-dropdown>.el-button{border-top-left-radius:0;border-bottom-left-radius:0;border-left-color:rgba(35,34,34,.5)}.dark-mode .el-button-group .el-button--primary:first-child{border-right-color:rgba(35,34,34,.5)}.dark-mode .el-button-group .el-button--primary:last-child{border-left-color:rgba(35,34,34,.5)}.dark-mode .el-button-group .el-button--primary:not(:first-child):not(:last-child){border-left-color:rgba(35,34,34,.5);border-right-color:rgba(35,34,34,.5)}.dark-mode .el-button-group .el-button--success:first-child{border-right-color:rgba(35,34,34,.5)}.dark-mode .el-button-group .el-button--success:last-child{border-left-color:rgba(35,34,34,.5)}.dark-mode .el-button-group .el-button--success:not(:first-child):not(:last-child){border-left-color:rgba(35,34,34,.5);border-right-color:rgba(35,34,34,.5)}.dark-mode .el-button-group .el-button--warning:first-child{border-right-color:rgba(35,34,34,.5)}.dark-mode .el-button-group .el-button--warning:last-child{border-left-color:rgba(35,34,34,.5)}.dark-mode .el-button-group .el-button--warning:not(:first-child):not(:last-child){border-left-color:rgba(35,34,34,.5);border-right-color:rgba(35,34,34,.5)}.dark-mode .el-button-group .el-button--danger:first-child{border-right-color:rgba(35,34,34,.5)}.dark-mode .el-button-group .el-button--danger:last-child{border-left-color:rgba(35,34,34,.5)}.dark-mode .el-button-group .el-button--danger:not(:first-child):not(:last-child){border-left-color:rgba(35,34,34,.5);border-right-color:rgba(35,34,34,.5)}.dark-mode .el-button-group .el-button--info:first-child{border-right-color:rgba(35,34,34,.5)}.dark-mode .el-button-group .el-button--info:last-child{border-left-color:rgba(35,34,34,.5)}.dark-mode .el-button-group .el-button--info:not(:first-child):not(:last-child){border-left-color:rgba(35,34,34,.5);border-right-color:rgba(35,34,34,.5)}.dark-mode .el-calendar{background-color:#fff}.dark-mode .el-calendar__header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:12px 20px;border-bottom:1px solid #454545}.dark-mode .el-backtop,.dark-mode .el-page-header{display:-webkit-box;display:-ms-flexbox}.dark-mode .el-calendar__title{color:#000;-ms-flex-item-align:center;align-self:center}.dark-mode .el-calendar__body{padding:12px 20px 35px}.dark-mode .el-calendar-table{table-layout:fixed;width:100%}.dark-mode .el-calendar-table thead th{padding:12px 0;color:#b8b8b8;font-weight:400}.dark-mode .el-calendar-table:not(.is-range) td.next,.dark-mode .el-calendar-table:not(.is-range) td.prev{color:#ccc}.dark-mode .el-backtop,.dark-mode .el-calendar-table td.is-today{color:#d71a1b}.dark-mode .el-calendar-table td{border-bottom:1px solid #454545;border-right:1px solid #454545;vertical-align:top;-webkit-transition:background-color .2s ease;transition:background-color .2s ease}.dark-mode .el-calendar-table td.is-selected{background-color:#f2f8fe}.dark-mode .el-calendar-table tr:first-child td{border-top:1px solid #454545}.dark-mode .el-calendar-table tr td:first-child{border-left:1px solid #454545}.dark-mode .el-calendar-table tr.el-calendar-table__row--hide-border td{border-top:none}.dark-mode .el-calendar-table .el-calendar-day{-webkit-box-sizing:border-box;box-sizing:border-box;padding:8px;height:85px}.dark-mode .el-calendar-table .el-calendar-day:hover{cursor:pointer;background-color:#f2f8fe}.dark-mode .el-backtop{position:fixed;background-color:#232222;width:40px;height:40px;border-radius:50%;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;font-size:20px;-webkit-box-shadow:0 0 6px rgba(0,0,0,.12);box-shadow:0 0 6px rgba(0,0,0,.12);cursor:pointer;z-index:5}.dark-mode .el-backtop:hover{background-color:#171514}.dark-mode .el-page-header{display:flex;line-height:24px}.dark-mode .el-page-header__left{display:-webkit-box;display:-ms-flexbox;display:flex;cursor:pointer;margin-right:40px;position:relative}.dark-mode .el-page-header__left::after{content:\"\";position:absolute;width:1px;height:16px;right:-20px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);background-color:#bebebe}.dark-mode .el-checkbox,.dark-mode .el-checkbox__input{display:inline-block;position:relative;white-space:nowrap}.dark-mode .el-page-header__left .el-icon-back{font-size:18px;margin-right:6px;-ms-flex-item-align:center;align-self:center}.dark-mode .el-page-header__title{font-size:14px;font-weight:500}.dark-mode .el-page-header__content{font-size:18px;color:#fff}.dark-mode .el-checkbox{color:#b8b8b8;font-weight:500;font-size:14px;cursor:pointer;user-select:none;margin-right:30px}.dark-mode .el-checkbox-button__inner,.dark-mode .el-radio{font-weight:500;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.dark-mode .el-checkbox.is-bordered{padding:9px 20px 9px 10px;border-radius:4px;border:1px solid #bebebe;-webkit-box-sizing:border-box;box-sizing:border-box;line-height:normal;height:40px}.dark-mode .el-checkbox.is-bordered.is-checked{border-color:#d71a1b}.dark-mode .el-checkbox.is-bordered.is-disabled{border-color:#454545;cursor:not-allowed}.dark-mode .el-checkbox.is-bordered+.el-checkbox.is-bordered{margin-left:10px}.dark-mode .el-checkbox.is-bordered.el-checkbox--medium{padding:7px 20px 7px 10px;border-radius:4px;height:36px}.dark-mode .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label{line-height:17px;font-size:14px}.dark-mode .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__inner{height:14px;width:14px}.dark-mode .el-checkbox.is-bordered.el-checkbox--small{padding:5px 15px 5px 10px;border-radius:3px;height:32px}.dark-mode .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label{line-height:15px;font-size:12px}.dark-mode .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner{height:12px;width:12px}.dark-mode .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner::after{height:6px;width:2px}.dark-mode .el-checkbox.is-bordered.el-checkbox--mini{padding:3px 15px 3px 10px;border-radius:3px;height:28px}.dark-mode .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__label{line-height:12px;font-size:12px}.dark-mode .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner{height:12px;width:12px}.dark-mode .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner::after{height:6px;width:2px}.dark-mode .el-checkbox__input{cursor:pointer;outline:0;line-height:1;vertical-align:middle}.dark-mode .el-checkbox__input.is-disabled .el-checkbox__inner{background-color:#edf2fc;border-color:#bebebe;cursor:not-allowed}.dark-mode .el-checkbox__input.is-disabled .el-checkbox__inner::after{cursor:not-allowed;border-color:#ccc}.dark-mode .el-checkbox__input.is-disabled .el-checkbox__inner+.el-checkbox__label{cursor:not-allowed}.dark-mode .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner{background-color:#171514;border-color:#bebebe}.dark-mode .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after{border-color:#ccc}.dark-mode .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner{background-color:#171514;border-color:#bebebe}.dark-mode .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner::before{background-color:#ccc;border-color:#ccc}.dark-mode .el-checkbox__input.is-checked .el-checkbox__inner,.dark-mode .el-checkbox__input.is-indeterminate .el-checkbox__inner{background-color:#d71a1b;border-color:#d71a1b}.dark-mode .el-checkbox__input.is-disabled+span.el-checkbox__label{color:#ccc;cursor:not-allowed}.dark-mode .el-checkbox__input.is-checked .el-checkbox__inner::after{-webkit-transform:rotate(45deg) scaleY(1);transform:rotate(45deg) scaleY(1)}.dark-mode .el-checkbox__input.is-checked+.el-checkbox__label{color:#d71a1b}.dark-mode .el-checkbox__input.is-focus .el-checkbox__inner{border-color:#d71a1b}.dark-mode .el-checkbox__input.is-indeterminate .el-checkbox__inner::before{content:'';position:absolute;display:block;background-color:#232222;height:2px;-webkit-transform:scale(.5);transform:scale(.5);left:0;right:0;top:5px}.dark-mode .el-checkbox__input.is-indeterminate .el-checkbox__inner::after{display:none}.dark-mode .el-checkbox__inner{display:inline-block;position:relative;border:1px solid #bebebe;border-radius:2px;-webkit-box-sizing:border-box;box-sizing:border-box;width:14px;height:14px;background-color:#232222;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)}.dark-mode .el-checkbox__inner:hover{border-color:#d71a1b}.dark-mode .el-checkbox__inner::after{-webkit-box-sizing:content-box;box-sizing:content-box;content:\"\";border:1px solid #232222;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 ease-in .05s;transition:-webkit-transform .15s ease-in .05s;transition:transform .15s ease-in .05s;transition:transform .15s ease-in .05s,-webkit-transform .15s ease-in .05s;-webkit-transform-origin:center;transform-origin:center}.dark-mode .el-checkbox__original{opacity:0;outline:0;position:absolute;margin:0;width:0;height:0;z-index:-1}.dark-mode .el-checkbox-button,.dark-mode .el-checkbox-button__inner{display:inline-block;position:relative}.dark-mode .el-checkbox__label{display:inline-block;padding-left:10px;line-height:19px;font-size:14px}.dark-mode .el-checkbox:last-of-type{margin-right:0}.dark-mode .el-checkbox-button__inner{line-height:1;white-space:nowrap;vertical-align:middle;cursor:pointer;background:#232222;border:1px solid #bebebe;border-left:0;color:#b8b8b8;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;-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}.dark-mode .el-checkbox-button__inner.is-round{padding:12px 20px}.dark-mode .el-checkbox-button__inner:hover{color:#d71a1b}.dark-mode .el-checkbox-button__inner [class*=el-icon-]{line-height:.9}.dark-mode .el-radio,.dark-mode .el-radio__input{line-height:1;outline:0;white-space:nowrap}.dark-mode .el-checkbox-button__inner [class*=el-icon-]+span{margin-left:5px}.dark-mode .el-checkbox-button__original{opacity:0;outline:0;position:absolute;margin:0;z-index:-1}.dark-mode .el-radio,.dark-mode .el-radio__inner,.dark-mode .el-radio__input{position:relative;display:inline-block}.dark-mode .el-checkbox-button.is-checked .el-checkbox-button__inner{color:#232222;background-color:#d71a1b;border-color:#d71a1b;-webkit-box-shadow:-1px 0 0 0 #8f1d1e;box-shadow:-1px 0 0 0 #8f1d1e}.dark-mode .el-checkbox-button.is-checked:first-child .el-checkbox-button__inner{border-left-color:#d71a1b}.dark-mode .el-checkbox-button.is-disabled .el-checkbox-button__inner{color:#ccc;cursor:not-allowed;background-image:none;background-color:#232222;border-color:#454545;-webkit-box-shadow:none;box-shadow:none}.dark-mode .el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner{border-left-color:#454545}.dark-mode .el-checkbox-button:first-child .el-checkbox-button__inner{border-left:1px solid #bebebe;border-radius:4px 0 0 4px;-webkit-box-shadow:none!important;box-shadow:none!important}.dark-mode .el-checkbox-button.is-focus .el-checkbox-button__inner{border-color:#d71a1b}.dark-mode .el-checkbox-button:last-child .el-checkbox-button__inner{border-radius:0 4px 4px 0}.dark-mode .el-checkbox-button--medium .el-checkbox-button__inner{padding:10px 20px;font-size:14px;border-radius:0}.dark-mode .el-checkbox-button--medium .el-checkbox-button__inner.is-round{padding:10px 20px}.dark-mode .el-checkbox-button--small .el-checkbox-button__inner{padding:9px 15px;font-size:12px;border-radius:0}.dark-mode .el-checkbox-button--small .el-checkbox-button__inner.is-round{padding:9px 15px}.dark-mode .el-checkbox-button--mini .el-checkbox-button__inner{padding:7px 15px;font-size:12px;border-radius:0}.dark-mode .el-checkbox-button--mini .el-checkbox-button__inner.is-round{padding:7px 15px}.dark-mode .el-checkbox-group{font-size:0}.dark-mode .el-radio,.dark-mode .el-radio--medium.is-bordered .el-radio__label{font-size:14px}.dark-mode .el-radio{color:#b8b8b8;cursor:pointer;margin-right:30px}.dark-mode .el-cascader-node>.el-radio,.dark-mode .el-radio:last-child{margin-right:0}.dark-mode .el-radio.is-bordered{padding:12px 20px 0 10px;border-radius:4px;border:1px solid #bebebe;-webkit-box-sizing:border-box;box-sizing:border-box;height:40px}.dark-mode .el-radio.is-bordered.is-checked{border-color:#d71a1b}.dark-mode .el-radio.is-bordered.is-disabled{cursor:not-allowed;border-color:#454545}.dark-mode .el-radio__input.is-disabled .el-radio__inner,.dark-mode .el-radio__input.is-disabled.is-checked .el-radio__inner{background-color:#171315;border-color:#7a7a7a}.dark-mode .el-radio.is-bordered+.el-radio.is-bordered{margin-left:10px}.dark-mode .el-radio--medium.is-bordered{padding:10px 20px 0 10px;border-radius:4px;height:36px}.dark-mode .el-radio--mini.is-bordered .el-radio__label,.dark-mode .el-radio--small.is-bordered .el-radio__label{font-size:12px}.dark-mode .el-radio--medium.is-bordered .el-radio__inner{height:14px;width:14px}.dark-mode .el-radio--small.is-bordered{padding:8px 15px 0 10px;border-radius:3px;height:32px}.dark-mode .el-radio--small.is-bordered .el-radio__inner{height:12px;width:12px}.dark-mode .el-radio--mini.is-bordered{padding:6px 15px 0 10px;border-radius:3px;height:28px}.dark-mode .el-radio--mini.is-bordered .el-radio__inner{height:12px;width:12px}.dark-mode .el-radio__input{cursor:pointer;vertical-align:middle}.dark-mode .el-radio__input.is-disabled .el-radio__inner{cursor:not-allowed}.dark-mode .el-radio__input.is-disabled .el-radio__inner::after{cursor:not-allowed;background-color:#171315}.dark-mode .el-radio__input.is-disabled .el-radio__inner+.el-radio__label{cursor:not-allowed}.dark-mode .el-radio__input.is-disabled.is-checked .el-radio__inner::after{background-color:#ccc}.dark-mode .el-radio__input.is-disabled+span.el-radio__label{color:#ccc;cursor:not-allowed}.dark-mode .el-radio__input.is-checked .el-radio__inner{border-color:#d71a1b;background:#d71a1b}.dark-mode .el-radio__input.is-checked .el-radio__inner::after{-webkit-transform:translate(-50%,-50%) scale(1);transform:translate(-50%,-50%) scale(1)}.dark-mode .el-radio__input.is-checked+.el-radio__label{color:#d71a1b}.dark-mode .el-radio__input.is-focus .el-radio__inner{border-color:#d71a1b}.dark-mode .el-radio__inner{border:1px solid #bebebe;border-radius:100%;width:14px;height:14px;background-color:#232222;cursor:pointer;-webkit-box-sizing:border-box;box-sizing:border-box}.dark-mode .el-radio__inner:hover{border-color:#d71a1b}.dark-mode .el-radio__inner::after{width:4px;height:4px;border-radius:100%;background-color:#232222;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 ease-in;transition:-webkit-transform .15s ease-in;transition:transform .15s ease-in;transition:transform .15s ease-in,-webkit-transform .15s ease-in}.dark-mode .el-radio__original{opacity:0;outline:0;position:absolute;z-index:-1;top:0;left:0;right:0;bottom:0;margin:0}.dark-mode .el-radio:focus:not(.is-focus):not(:active):not(.is-disabled) .el-radio__inner{-webkit-box-shadow:0 0 2px 2px #d71a1b;box-shadow:0 0 2px 2px #d71a1b}.dark-mode .el-radio__label{font-size:14px;padding-left:10px}.dark-mode .el-scrollbar{overflow:hidden;position:relative}.dark-mode .el-scrollbar:active>.el-scrollbar__bar,.dark-mode .el-scrollbar:focus>.el-scrollbar__bar,.dark-mode .el-scrollbar:hover>.el-scrollbar__bar{opacity:1;-webkit-transition:opacity 340ms ease-out;transition:opacity 340ms ease-out}.dark-mode .el-scrollbar__wrap{overflow:scroll;height:100%}.dark-mode .el-scrollbar__wrap--hidden-default{scrollbar-width:none}.dark-mode .el-scrollbar__wrap--hidden-default::-webkit-scrollbar{width:0;height:0}.dark-mode .el-scrollbar__thumb{position:relative;display:block;width:0;height:0;cursor:pointer;border-radius:inherit;background-color:rgba(188,188,188,.3);-webkit-transition:.3s background-color;transition:.3s background-color}.dark-mode .el-scrollbar__thumb:hover{background-color:rgba(188,188,188,.5)}.dark-mode .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}.dark-mode .el-scrollbar__bar.is-vertical{width:6px;top:2px}.dark-mode .el-scrollbar__bar.is-vertical>div{width:100%}.dark-mode .el-scrollbar__bar.is-horizontal{height:6px;left:2px}.dark-mode .el-scrollbar__bar.is-horizontal>div{height:100%}.dark-mode .el-cascader-panel{display:-webkit-box;display:-ms-flexbox;display:flex;border-radius:4px;font-size:14px}.dark-mode .el-cascader-panel.is-bordered{border:1px solid #7a7a7a;border-radius:4px}.dark-mode .el-cascader-menu{min-width:180px;-webkit-box-sizing:border-box;box-sizing:border-box;color:#b8b8b8;border-right:solid 1px #7a7a7a}.dark-mode .el-cascader-menu:last-child{border-right:none}.dark-mode .el-cascader-menu:last-child .el-cascader-node{padding-right:20px}.dark-mode .el-cascader-menu__wrap{height:204px}.dark-mode .el-cascader-menu__list{position:relative;min-height:100%;margin:0;padding:6px 0;list-style:none;-webkit-box-sizing:border-box;box-sizing:border-box}.dark-mode .el-avatar,.dark-mode .el-drawer{-webkit-box-sizing:border-box;overflow:hidden}.dark-mode .el-cascader-menu__hover-zone{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.dark-mode .el-cascader-menu__empty-text{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);text-align:center;color:#ccc}.dark-mode .el-cascader-node{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:0 30px 0 20px;height:34px;line-height:34px;outline:0}.dark-mode .el-cascader-node.is-selectable.in-active-path{color:#b8b8b8}.dark-mode .el-cascader-node.in-active-path,.dark-mode .el-cascader-node.is-active,.dark-mode .el-cascader-node.is-selectable.in-checked-path{color:#d71a1b;font-weight:700}.dark-mode .el-cascader-node:not(.is-disabled){cursor:pointer}.dark-mode .el-cascader-node:not(.is-disabled):focus,.dark-mode .el-cascader-node:not(.is-disabled):hover{background:#171315}.dark-mode .el-cascader-node.is-disabled{color:#ccc;cursor:not-allowed}.dark-mode .el-cascader-node__prefix{position:absolute;left:10px}.dark-mode .el-cascader-node__postfix{position:absolute;right:10px}.dark-mode .el-cascader-node__label{-webkit-box-flex:1;-ms-flex:1;flex:1;padding:0 10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.dark-mode .el-cascader-node>.el-radio .el-radio__label{padding-left:0}.dark-mode .el-avatar{display:inline-block;box-sizing:border-box;text-align:center;color:#fff;background:#c0c4cc;width:40px;height:40px;line-height:40px;font-size:14px}.dark-mode .el-avatar>img{display:block;height:100%;vertical-align:middle}.dark-mode .el-drawer,.dark-mode .el-drawer__header{display:-webkit-box;display:-ms-flexbox}.dark-mode .el-avatar--circle{border-radius:50%}.dark-mode .el-avatar--square{border-radius:4px}.dark-mode .el-avatar--icon{font-size:18px}.dark-mode .el-avatar--large{width:40px;height:40px;line-height:40px}.dark-mode .el-avatar--medium{width:36px;height:36px;line-height:36px}.dark-mode .el-avatar--small{width:28px;height:28px;line-height:28px}.dark-mode .el-drawer.btt,.dark-mode .el-drawer.ttb,.dark-mode .el-drawer__container{left:0;right:0;width:100%}.dark-mode .el-drawer.ltr,.dark-mode .el-drawer.rtl,.dark-mode .el-drawer__container{top:0;bottom:0;height:100%}@-webkit-keyframes el-drawer-fade-in{0%{opacity:0}100%{opacity:1}}@keyframes el-drawer-fade-in{0%{opacity:0}100%{opacity:1}}@-webkit-keyframes rtl-drawer-in{0%{-webkit-transform:translate(100%,0);transform:translate(100%,0)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@keyframes rtl-drawer-in{0%{-webkit-transform:translate(100%,0);transform:translate(100%,0)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@-webkit-keyframes rtl-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(100%,0);transform:translate(100%,0)}}@keyframes rtl-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(100%,0);transform:translate(100%,0)}}@-webkit-keyframes ltr-drawer-in{0%{-webkit-transform:translate(-100%,0);transform:translate(-100%,0)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@keyframes ltr-drawer-in{0%{-webkit-transform:translate(-100%,0);transform:translate(-100%,0)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@-webkit-keyframes ltr-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(-100%,0);transform:translate(-100%,0)}}@keyframes ltr-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(-100%,0);transform:translate(-100%,0)}}@-webkit-keyframes ttb-drawer-in{0%{-webkit-transform:translate(0,-100%);transform:translate(0,-100%)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@keyframes ttb-drawer-in{0%{-webkit-transform:translate(0,-100%);transform:translate(0,-100%)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@-webkit-keyframes ttb-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(0,-100%);transform:translate(0,-100%)}}@keyframes ttb-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(0,-100%);transform:translate(0,-100%)}}@-webkit-keyframes btt-drawer-in{0%{-webkit-transform:translate(0,100%);transform:translate(0,100%)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@keyframes btt-drawer-in{0%{-webkit-transform:translate(0,100%);transform:translate(0,100%)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@-webkit-keyframes btt-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(0,100%);transform:translate(0,100%)}}@keyframes btt-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(0,100%);transform:translate(0,100%)}}.dark-mode .el-drawer{position:absolute;box-sizing:border-box;background-color:#232222;display:flex;-ms-flex-direction:column;flex-direction:column;-webkit-box-shadow:0 8px 10px -5px rgba(0,0,0,.2),0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12);box-shadow:0 8px 10px -5px rgba(0,0,0,.2),0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12)}.dark-mode .el-drawer.rtl{-webkit-animation:rtl-drawer-out .3s;animation:rtl-drawer-out .3s;right:0}.dark-mode .el-drawer__open .el-drawer.rtl{-webkit-animation:rtl-drawer-in .3s 1ms;animation:rtl-drawer-in .3s 1ms}.dark-mode .el-drawer.ltr{-webkit-animation:ltr-drawer-out .3s;animation:ltr-drawer-out .3s;left:0}.dark-mode .el-drawer__open .el-drawer.ltr{-webkit-animation:ltr-drawer-in .3s 1ms;animation:ltr-drawer-in .3s 1ms}.dark-mode .el-drawer.ttb{-webkit-animation:ttb-drawer-out .3s;animation:ttb-drawer-out .3s;top:0}.dark-mode .el-drawer__open .el-drawer.ttb{-webkit-animation:ttb-drawer-in .3s 1ms;animation:ttb-drawer-in .3s 1ms}.dark-mode .el-drawer.btt{-webkit-animation:btt-drawer-out .3s;animation:btt-drawer-out .3s;bottom:0}.dark-mode .el-drawer__open .el-drawer.btt{-webkit-animation:btt-drawer-in .3s 1ms;animation:btt-drawer-in .3s 1ms}.dark-mode .el-drawer__wrapper{position:fixed;top:0;right:0;bottom:0;left:0;overflow:hidden;margin:0}.dark-mode .el-drawer__header{-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#72767b;display:flex;margin-bottom:32px;padding:20px 20px 0}.dark-mode .el-drawer__header>:first-child{-webkit-box-flex:1;-ms-flex:1;flex:1}.dark-mode .el-drawer__title{margin:0;-webkit-box-flex:1;-ms-flex:1;flex:1;line-height:inherit;font-size:1rem}.dark-mode .el-drawer__close-btn{border:none;cursor:pointer;font-size:20px;color:inherit;background-color:transparent}.dark-mode .el-drawer__body{-webkit-box-flex:1;-ms-flex:1;flex:1}.dark-mode .el-drawer__body>*{-webkit-box-sizing:border-box;box-sizing:border-box}.dark-mode .el-drawer__container{position:relative}.dark-mode .el-drawer-fade-enter-active{-webkit-animation:el-drawer-fade-in .3s;animation:el-drawer-fade-in .3s}.dark-mode .el-drawer-fade-leave-active{animation:el-drawer-fade-in .3s reverse}.dark-mode .el-popconfirm__main{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.dark-mode .el-popconfirm__icon{margin-right:5px}.dark-mode .el-popconfirm__action{text-align:right;margin:0}"
  },
  {
    "path": "docs/.vuepress/public/style/theme/dist/light.css",
    "content": "@charset \"UTF-8\";.light-mode .el-pagination--small .arrow.disabled,.light-mode .el-table .hidden-columns,.light-mode .el-table td.is-hidden>*,.light-mode .el-table th.is-hidden>*,.light-mode .el-table--hidden{visibility:hidden}.light-mode .el-dropdown .el-dropdown-selfdefine:focus:active,.light-mode .el-dropdown .el-dropdown-selfdefine:focus:not(.focusing),.light-mode .el-message__closeBtn:focus,.light-mode .el-message__content:focus,.light-mode .el-popover:focus,.light-mode .el-popover:focus:active,.light-mode .el-popover__reference:focus:hover,.light-mode .el-popover__reference:focus:not(.focusing),.light-mode .el-rate:active,.light-mode .el-rate:focus,.light-mode .el-tooltip:focus:hover,.light-mode .el-tooltip:focus:not(.focusing),.light-mode .el-upload-list__item.is-success:active,.light-mode .el-upload-list__item.is-success:not(.focusing):focus{outline-width:0}.light-mode .el-input__suffix,.light-mode .el-tree.is-dragging .el-tree-node__content *{pointer-events:none}@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-display:auto;font-style:normal}.light-mode [class*=\" el-icon-\"],.light-mode [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}.light-mode .el-icon-ice-cream-round:before{content:\"\\e6a0\"}.light-mode .el-icon-ice-cream-square:before{content:\"\\e6a3\"}.light-mode .el-icon-lollipop:before{content:\"\\e6a4\"}.light-mode .el-icon-potato-strips:before{content:\"\\e6a5\"}.light-mode .el-icon-milk-tea:before{content:\"\\e6a6\"}.light-mode .el-icon-ice-drink:before{content:\"\\e6a7\"}.light-mode .el-icon-ice-tea:before{content:\"\\e6a9\"}.light-mode .el-icon-coffee:before{content:\"\\e6aa\"}.light-mode .el-icon-orange:before{content:\"\\e6ab\"}.light-mode .el-icon-pear:before{content:\"\\e6ac\"}.light-mode .el-icon-apple:before{content:\"\\e6ad\"}.light-mode .el-icon-cherry:before{content:\"\\e6ae\"}.light-mode .el-icon-watermelon:before{content:\"\\e6af\"}.light-mode .el-icon-grape:before{content:\"\\e6b0\"}.light-mode .el-icon-refrigerator:before{content:\"\\e6b1\"}.light-mode .el-icon-goblet-square-full:before{content:\"\\e6b2\"}.light-mode .el-icon-goblet-square:before{content:\"\\e6b3\"}.light-mode .el-icon-goblet-full:before{content:\"\\e6b4\"}.light-mode .el-icon-goblet:before{content:\"\\e6b5\"}.light-mode .el-icon-cold-drink:before{content:\"\\e6b6\"}.light-mode .el-icon-coffee-cup:before{content:\"\\e6b8\"}.light-mode .el-icon-water-cup:before{content:\"\\e6b9\"}.light-mode .el-icon-hot-water:before{content:\"\\e6ba\"}.light-mode .el-icon-ice-cream:before{content:\"\\e6bb\"}.light-mode .el-icon-dessert:before{content:\"\\e6bc\"}.light-mode .el-icon-sugar:before{content:\"\\e6bd\"}.light-mode .el-icon-tableware:before{content:\"\\e6be\"}.light-mode .el-icon-burger:before{content:\"\\e6bf\"}.light-mode .el-icon-knife-fork:before{content:\"\\e6c1\"}.light-mode .el-icon-fork-spoon:before{content:\"\\e6c2\"}.light-mode .el-icon-chicken:before{content:\"\\e6c3\"}.light-mode .el-icon-food:before{content:\"\\e6c4\"}.light-mode .el-icon-dish-1:before{content:\"\\e6c5\"}.light-mode .el-icon-dish:before{content:\"\\e6c6\"}.light-mode .el-icon-moon-night:before{content:\"\\e6ee\"}.light-mode .el-icon-moon:before{content:\"\\e6f0\"}.light-mode .el-icon-cloudy-and-sunny:before{content:\"\\e6f1\"}.light-mode .el-icon-partly-cloudy:before{content:\"\\e6f2\"}.light-mode .el-icon-cloudy:before{content:\"\\e6f3\"}.light-mode .el-icon-sunny:before{content:\"\\e6f6\"}.light-mode .el-icon-sunset:before{content:\"\\e6f7\"}.light-mode .el-icon-sunrise-1:before{content:\"\\e6f8\"}.light-mode .el-icon-sunrise:before{content:\"\\e6f9\"}.light-mode .el-icon-heavy-rain:before{content:\"\\e6fa\"}.light-mode .el-icon-lightning:before{content:\"\\e6fb\"}.light-mode .el-icon-light-rain:before{content:\"\\e6fc\"}.light-mode .el-icon-wind-power:before{content:\"\\e6fd\"}.light-mode .el-icon-baseball:before{content:\"\\e712\"}.light-mode .el-icon-soccer:before{content:\"\\e713\"}.light-mode .el-icon-football:before{content:\"\\e715\"}.light-mode .el-icon-basketball:before{content:\"\\e716\"}.light-mode .el-icon-ship:before{content:\"\\e73f\"}.light-mode .el-icon-truck:before{content:\"\\e740\"}.light-mode .el-icon-bicycle:before{content:\"\\e741\"}.light-mode .el-icon-mobile-phone:before{content:\"\\e6d3\"}.light-mode .el-icon-service:before{content:\"\\e6d4\"}.light-mode .el-icon-key:before{content:\"\\e6e2\"}.light-mode .el-icon-unlock:before{content:\"\\e6e4\"}.light-mode .el-icon-lock:before{content:\"\\e6e5\"}.light-mode .el-icon-watch:before{content:\"\\e6fe\"}.light-mode .el-icon-watch-1:before{content:\"\\e6ff\"}.light-mode .el-icon-timer:before{content:\"\\e702\"}.light-mode .el-icon-alarm-clock:before{content:\"\\e703\"}.light-mode .el-icon-map-location:before{content:\"\\e704\"}.light-mode .el-icon-delete-location:before{content:\"\\e705\"}.light-mode .el-icon-add-location:before{content:\"\\e706\"}.light-mode .el-icon-location-information:before{content:\"\\e707\"}.light-mode .el-icon-location-outline:before{content:\"\\e708\"}.light-mode .el-icon-location:before{content:\"\\e79e\"}.light-mode .el-icon-place:before{content:\"\\e709\"}.light-mode .el-icon-discover:before{content:\"\\e70a\"}.light-mode .el-icon-first-aid-kit:before{content:\"\\e70b\"}.light-mode .el-icon-trophy-1:before{content:\"\\e70c\"}.light-mode .el-icon-trophy:before{content:\"\\e70d\"}.light-mode .el-icon-medal:before{content:\"\\e70e\"}.light-mode .el-icon-medal-1:before{content:\"\\e70f\"}.light-mode .el-icon-stopwatch:before{content:\"\\e710\"}.light-mode .el-icon-mic:before{content:\"\\e711\"}.light-mode .el-icon-copy-document:before{content:\"\\e718\"}.light-mode .el-icon-full-screen:before{content:\"\\e719\"}.light-mode .el-icon-switch-button:before{content:\"\\e71b\"}.light-mode .el-icon-aim:before{content:\"\\e71c\"}.light-mode .el-icon-crop:before{content:\"\\e71d\"}.light-mode .el-icon-odometer:before{content:\"\\e71e\"}.light-mode .el-icon-time:before{content:\"\\e71f\"}.light-mode .el-icon-bangzhu:before{content:\"\\e724\"}.light-mode .el-icon-close-notification:before{content:\"\\e726\"}.light-mode .el-icon-microphone:before{content:\"\\e727\"}.light-mode .el-icon-turn-off-microphone:before{content:\"\\e728\"}.light-mode .el-icon-position:before{content:\"\\e729\"}.light-mode .el-icon-postcard:before{content:\"\\e72a\"}.light-mode .el-icon-message:before{content:\"\\e72b\"}.light-mode .el-icon-chat-line-square:before{content:\"\\e72d\"}.light-mode .el-icon-chat-dot-square:before{content:\"\\e72e\"}.light-mode .el-icon-chat-dot-round:before{content:\"\\e72f\"}.light-mode .el-icon-chat-square:before{content:\"\\e730\"}.light-mode .el-icon-chat-line-round:before{content:\"\\e731\"}.light-mode .el-icon-chat-round:before{content:\"\\e732\"}.light-mode .el-icon-set-up:before{content:\"\\e733\"}.light-mode .el-icon-turn-off:before{content:\"\\e734\"}.light-mode .el-icon-open:before{content:\"\\e735\"}.light-mode .el-icon-connection:before{content:\"\\e736\"}.light-mode .el-icon-link:before{content:\"\\e737\"}.light-mode .el-icon-cpu:before{content:\"\\e738\"}.light-mode .el-icon-thumb:before{content:\"\\e739\"}.light-mode .el-icon-female:before{content:\"\\e73a\"}.light-mode .el-icon-male:before{content:\"\\e73b\"}.light-mode .el-icon-guide:before{content:\"\\e73c\"}.light-mode .el-icon-news:before{content:\"\\e73e\"}.light-mode .el-icon-price-tag:before{content:\"\\e744\"}.light-mode .el-icon-discount:before{content:\"\\e745\"}.light-mode .el-icon-wallet:before{content:\"\\e747\"}.light-mode .el-icon-coin:before{content:\"\\e748\"}.light-mode .el-icon-money:before{content:\"\\e749\"}.light-mode .el-icon-bank-card:before{content:\"\\e74a\"}.light-mode .el-icon-box:before{content:\"\\e74b\"}.light-mode .el-icon-present:before{content:\"\\e74c\"}.light-mode .el-icon-sell:before{content:\"\\e6d5\"}.light-mode .el-icon-sold-out:before{content:\"\\e6d6\"}.light-mode .el-icon-shopping-bag-2:before{content:\"\\e74d\"}.light-mode .el-icon-shopping-bag-1:before{content:\"\\e74e\"}.light-mode .el-icon-shopping-cart-2:before{content:\"\\e74f\"}.light-mode .el-icon-shopping-cart-1:before{content:\"\\e750\"}.light-mode .el-icon-shopping-cart-full:before{content:\"\\e751\"}.light-mode .el-icon-smoking:before{content:\"\\e752\"}.light-mode .el-icon-no-smoking:before{content:\"\\e753\"}.light-mode .el-icon-house:before{content:\"\\e754\"}.light-mode .el-icon-table-lamp:before{content:\"\\e755\"}.light-mode .el-icon-school:before{content:\"\\e756\"}.light-mode .el-icon-office-building:before{content:\"\\e757\"}.light-mode .el-icon-toilet-paper:before{content:\"\\e758\"}.light-mode .el-icon-notebook-2:before{content:\"\\e759\"}.light-mode .el-icon-notebook-1:before{content:\"\\e75a\"}.light-mode .el-icon-files:before{content:\"\\e75b\"}.light-mode .el-icon-collection:before{content:\"\\e75c\"}.light-mode .el-icon-receiving:before{content:\"\\e75d\"}.light-mode .el-icon-suitcase-1:before{content:\"\\e760\"}.light-mode .el-icon-suitcase:before{content:\"\\e761\"}.light-mode .el-icon-film:before{content:\"\\e763\"}.light-mode .el-icon-collection-tag:before{content:\"\\e765\"}.light-mode .el-icon-data-analysis:before{content:\"\\e766\"}.light-mode .el-icon-pie-chart:before{content:\"\\e767\"}.light-mode .el-icon-data-board:before{content:\"\\e768\"}.light-mode .el-icon-data-line:before{content:\"\\e76d\"}.light-mode .el-icon-reading:before{content:\"\\e769\"}.light-mode .el-icon-magic-stick:before{content:\"\\e76a\"}.light-mode .el-icon-coordinate:before{content:\"\\e76b\"}.light-mode .el-icon-mouse:before{content:\"\\e76c\"}.light-mode .el-icon-brush:before{content:\"\\e76e\"}.light-mode .el-icon-headset:before{content:\"\\e76f\"}.light-mode .el-icon-umbrella:before{content:\"\\e770\"}.light-mode .el-icon-scissors:before{content:\"\\e771\"}.light-mode .el-icon-mobile:before{content:\"\\e773\"}.light-mode .el-icon-attract:before{content:\"\\e774\"}.light-mode .el-icon-monitor:before{content:\"\\e775\"}.light-mode .el-icon-search:before{content:\"\\e778\"}.light-mode .el-icon-takeaway-box:before{content:\"\\e77a\"}.light-mode .el-icon-paperclip:before{content:\"\\e77d\"}.light-mode .el-icon-printer:before{content:\"\\e77e\"}.light-mode .el-icon-document-add:before{content:\"\\e782\"}.light-mode .el-icon-document:before{content:\"\\e785\"}.light-mode .el-icon-document-checked:before{content:\"\\e786\"}.light-mode .el-icon-document-copy:before{content:\"\\e787\"}.light-mode .el-icon-document-delete:before{content:\"\\e788\"}.light-mode .el-icon-document-remove:before{content:\"\\e789\"}.light-mode .el-icon-tickets:before{content:\"\\e78b\"}.light-mode .el-icon-folder-checked:before{content:\"\\e77f\"}.light-mode .el-icon-folder-delete:before{content:\"\\e780\"}.light-mode .el-icon-folder-remove:before{content:\"\\e781\"}.light-mode .el-icon-folder-add:before{content:\"\\e783\"}.light-mode .el-icon-folder-opened:before{content:\"\\e784\"}.light-mode .el-icon-folder:before{content:\"\\e78a\"}.light-mode .el-icon-edit-outline:before{content:\"\\e764\"}.light-mode .el-icon-edit:before{content:\"\\e78c\"}.light-mode .el-icon-date:before{content:\"\\e78e\"}.light-mode .el-icon-c-scale-to-original:before{content:\"\\e7c6\"}.light-mode .el-icon-view:before{content:\"\\e6ce\"}.light-mode .el-icon-loading:before{content:\"\\e6cf\"}.light-mode .el-icon-rank:before{content:\"\\e6d1\"}.light-mode .el-icon-sort-down:before{content:\"\\e7c4\"}.light-mode .el-icon-sort-up:before{content:\"\\e7c5\"}.light-mode .el-icon-sort:before{content:\"\\e6d2\"}.light-mode .el-icon-finished:before{content:\"\\e6cd\"}.light-mode .el-icon-refresh-left:before{content:\"\\e6c7\"}.light-mode .el-icon-refresh-right:before{content:\"\\e6c8\"}.light-mode .el-icon-refresh:before{content:\"\\e6d0\"}.light-mode .el-icon-video-play:before{content:\"\\e7c0\"}.light-mode .el-icon-video-pause:before{content:\"\\e7c1\"}.light-mode .el-icon-d-arrow-right:before{content:\"\\e6dc\"}.light-mode .el-icon-d-arrow-left:before{content:\"\\e6dd\"}.light-mode .el-icon-arrow-up:before{content:\"\\e6e1\"}.light-mode .el-icon-arrow-down:before{content:\"\\e6df\"}.light-mode .el-icon-arrow-right:before{content:\"\\e6e0\"}.light-mode .el-icon-arrow-left:before{content:\"\\e6de\"}.light-mode .el-icon-top-right:before{content:\"\\e6e7\"}.light-mode .el-icon-top-left:before{content:\"\\e6e8\"}.light-mode .el-icon-top:before{content:\"\\e6e6\"}.light-mode .el-icon-bottom:before{content:\"\\e6eb\"}.light-mode .el-icon-right:before{content:\"\\e6e9\"}.light-mode .el-icon-back:before{content:\"\\e6ea\"}.light-mode .el-icon-bottom-right:before{content:\"\\e6ec\"}.light-mode .el-icon-bottom-left:before{content:\"\\e6ed\"}.light-mode .el-icon-caret-top:before{content:\"\\e78f\"}.light-mode .el-icon-caret-bottom:before{content:\"\\e790\"}.light-mode .el-icon-caret-right:before{content:\"\\e791\"}.light-mode .el-icon-caret-left:before{content:\"\\e792\"}.light-mode .el-icon-d-caret:before{content:\"\\e79a\"}.light-mode .el-icon-share:before{content:\"\\e793\"}.light-mode .el-icon-menu:before{content:\"\\e798\"}.light-mode .el-icon-s-grid:before{content:\"\\e7a6\"}.light-mode .el-icon-s-check:before{content:\"\\e7a7\"}.light-mode .el-icon-s-data:before{content:\"\\e7a8\"}.light-mode .el-icon-s-opportunity:before{content:\"\\e7aa\"}.light-mode .el-icon-s-custom:before{content:\"\\e7ab\"}.light-mode .el-icon-s-claim:before{content:\"\\e7ad\"}.light-mode .el-icon-s-finance:before{content:\"\\e7ae\"}.light-mode .el-icon-s-comment:before{content:\"\\e7af\"}.light-mode .el-icon-s-flag:before{content:\"\\e7b0\"}.light-mode .el-icon-s-marketing:before{content:\"\\e7b1\"}.light-mode .el-icon-s-shop:before{content:\"\\e7b4\"}.light-mode .el-icon-s-open:before{content:\"\\e7b5\"}.light-mode .el-icon-s-management:before{content:\"\\e7b6\"}.light-mode .el-icon-s-ticket:before{content:\"\\e7b7\"}.light-mode .el-icon-s-release:before{content:\"\\e7b8\"}.light-mode .el-icon-s-home:before{content:\"\\e7b9\"}.light-mode .el-icon-s-promotion:before{content:\"\\e7ba\"}.light-mode .el-icon-s-operation:before{content:\"\\e7bb\"}.light-mode .el-icon-s-unfold:before{content:\"\\e7bc\"}.light-mode .el-icon-s-fold:before{content:\"\\e7a9\"}.light-mode .el-icon-s-platform:before{content:\"\\e7bd\"}.light-mode .el-icon-s-order:before{content:\"\\e7be\"}.light-mode .el-icon-s-cooperation:before{content:\"\\e7bf\"}.light-mode .el-icon-bell:before{content:\"\\e725\"}.light-mode .el-icon-message-solid:before{content:\"\\e799\"}.light-mode .el-icon-video-camera:before{content:\"\\e772\"}.light-mode .el-icon-video-camera-solid:before{content:\"\\e796\"}.light-mode .el-icon-camera:before{content:\"\\e779\"}.light-mode .el-icon-camera-solid:before{content:\"\\e79b\"}.light-mode .el-icon-download:before{content:\"\\e77c\"}.light-mode .el-icon-upload2:before{content:\"\\e77b\"}.light-mode .el-icon-upload:before{content:\"\\e7c3\"}.light-mode .el-icon-picture-outline-round:before{content:\"\\e75f\"}.light-mode .el-icon-picture-outline:before{content:\"\\e75e\"}.light-mode .el-icon-picture:before{content:\"\\e79f\"}.light-mode .el-icon-close:before{content:\"\\e6db\"}.light-mode .el-icon-check:before{content:\"\\e6da\"}.light-mode .el-icon-plus:before{content:\"\\e6d9\"}.light-mode .el-icon-minus:before{content:\"\\e6d8\"}.light-mode .el-icon-help:before{content:\"\\e73d\"}.light-mode .el-icon-s-help:before{content:\"\\e7b3\"}.light-mode .el-icon-circle-close:before{content:\"\\e78d\"}.light-mode .el-icon-circle-check:before{content:\"\\e720\"}.light-mode .el-icon-circle-plus-outline:before{content:\"\\e723\"}.light-mode .el-icon-remove-outline:before{content:\"\\e722\"}.light-mode .el-icon-zoom-out:before{content:\"\\e776\"}.light-mode .el-icon-zoom-in:before{content:\"\\e777\"}.light-mode .el-icon-error:before{content:\"\\e79d\"}.light-mode .el-icon-success:before{content:\"\\e79c\"}.light-mode .el-icon-circle-plus:before{content:\"\\e7a0\"}.light-mode .el-icon-remove:before{content:\"\\e7a2\"}.light-mode .el-icon-info:before{content:\"\\e7a1\"}.light-mode .el-icon-question:before{content:\"\\e7a4\"}.light-mode .el-icon-warning-outline:before{content:\"\\e6c9\"}.light-mode .el-icon-warning:before{content:\"\\e7a3\"}.light-mode .el-icon-goods:before{content:\"\\e7c2\"}.light-mode .el-icon-s-goods:before{content:\"\\e7b2\"}.light-mode .el-icon-star-off:before{content:\"\\e717\"}.light-mode .el-icon-star-on:before{content:\"\\e797\"}.light-mode .el-icon-more-outline:before{content:\"\\e6cc\"}.light-mode .el-icon-more:before{content:\"\\e794\"}.light-mode .el-icon-phone-outline:before{content:\"\\e6cb\"}.light-mode .el-icon-phone:before{content:\"\\e795\"}.light-mode .el-icon-user:before{content:\"\\e6e3\"}.light-mode .el-icon-user-solid:before{content:\"\\e7a5\"}.light-mode .el-icon-setting:before{content:\"\\e6ca\"}.light-mode .el-icon-s-tools:before{content:\"\\e7ac\"}.light-mode .el-icon-delete:before{content:\"\\e6d7\"}.light-mode .el-icon-delete-solid:before{content:\"\\e7c9\"}.light-mode .el-icon-eleme:before{content:\"\\e7c7\"}.light-mode .el-icon-platform-eleme:before{content:\"\\e7ca\"}.light-mode .el-icon-loading{-webkit-animation:rotating 2s linear infinite;animation:rotating 2s linear infinite}.light-mode .el-icon--right{margin-left:5px}.light-mode .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)}}.light-mode .el-pagination{white-space:nowrap;padding:2px 5px;color:#2c3e50;font-weight:700}.light-mode .el-pagination::after,.light-mode .el-pagination::before{display:table;content:\"\"}.light-mode .el-pagination::after{clear:both}.light-mode .el-pagination button,.light-mode .el-pagination span:not([class*=suffix]){display:inline-block;font-size:13px;min-width:35.5px;height:28px;line-height:28px;vertical-align:top;-webkit-box-sizing:border-box;box-sizing:border-box}.light-mode .el-pagination .el-input__inner{text-align:center;-moz-appearance:textfield;line-height:normal}.light-mode .el-pagination .el-input__suffix{right:0;-webkit-transform:scale(.8);transform:scale(.8)}.light-mode .el-pagination .el-select .el-input{width:100px;margin:0 5px}.light-mode .el-pagination .el-select .el-input .el-input__inner{padding-right:25px;border-radius:3px}.light-mode .el-pagination button{border:none;padding:0 6px;background:0 0}.light-mode .el-pagination button:focus{outline:0}.light-mode .el-pagination button:hover{color:#282c34}.light-mode .el-pagination button:disabled{color:#c0c4cc;background-color:#fff;cursor:not-allowed}.light-mode .el-pagination .btn-next,.light-mode .el-pagination .btn-prev{background:center center no-repeat #fff;background-size:16px;cursor:pointer;margin:0;color:#2c3e50}.light-mode .el-pagination .btn-next .el-icon,.light-mode .el-pagination .btn-prev .el-icon{display:block;font-size:12px;font-weight:700}.light-mode .el-pagination .btn-prev{padding-right:12px}.light-mode .el-pagination .btn-next{padding-left:12px}.light-mode .el-pagination .el-pager li.disabled{color:#c0c4cc;cursor:not-allowed}.light-mode .el-pager li,.light-mode .el-pager li.btn-quicknext:hover,.light-mode .el-pager li.btn-quickprev:hover{cursor:pointer}.light-mode .el-pagination--small .btn-next,.light-mode .el-pagination--small .btn-prev,.light-mode .el-pagination--small .el-pager li,.light-mode .el-pagination--small .el-pager li.btn-quicknext,.light-mode .el-pagination--small .el-pager li.btn-quickprev,.light-mode .el-pagination--small .el-pager li:last-child{border-color:transparent;font-size:12px;line-height:22px;height:22px;min-width:22px}.light-mode .el-pagination--small .more::before,.light-mode .el-pagination--small li.more::before{line-height:24px}.light-mode .el-pagination--small button,.light-mode .el-pagination--small span:not([class*=suffix]){height:22px;line-height:22px}.light-mode .el-pagination--small .el-pagination__editor,.light-mode .el-pagination--small .el-pagination__editor.el-input .el-input__inner{height:22px}.light-mode .el-pagination__sizes{margin:0 10px 0 0;font-weight:400;color:#606266}.light-mode .el-pagination__sizes .el-input .el-input__inner{font-size:13px;padding-left:8px}.light-mode .el-pagination__sizes .el-input .el-input__inner:hover{border-color:#282c34}.light-mode .el-pagination__total{margin-right:10px;font-weight:400;color:#606266}.light-mode .el-pagination__jump{margin-left:24px;font-weight:400;color:#606266}.light-mode .el-pagination__jump .el-input__inner{padding:0 3px}.light-mode .el-pagination__rightwrapper{float:right}.light-mode .el-pagination__editor{line-height:18px;padding:0 2px;height:28px;text-align:center;margin:0 2px;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:3px}.light-mode .el-pager,.light-mode .el-pagination.is-background .btn-next,.light-mode .el-pagination.is-background .btn-prev{padding:0}.light-mode .el-pagination__editor.el-input{width:50px}.light-mode .el-pagination__editor.el-input .el-input__inner{height:28px}.light-mode .el-pagination__editor .el-input__inner::-webkit-inner-spin-button,.light-mode .el-pagination__editor .el-input__inner::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.light-mode .el-pagination.is-background .btn-next,.light-mode .el-pagination.is-background .btn-prev,.light-mode .el-pagination.is-background .el-pager li{margin:0 5px;background-color:#f4f4f5;color:#606266;min-width:30px;border-radius:2px}.light-mode .el-pagination.is-background .btn-next.disabled,.light-mode .el-pagination.is-background .btn-next:disabled,.light-mode .el-pagination.is-background .btn-prev.disabled,.light-mode .el-pagination.is-background .btn-prev:disabled,.light-mode .el-pagination.is-background .el-pager li.disabled{color:#c0c4cc}.light-mode .el-pagination.is-background .el-pager li:not(.disabled):hover{color:#282c34}.light-mode .el-pagination.is-background .el-pager li:not(.disabled).active{background-color:#282c34;color:#fff}.light-mode .el-dialog,.light-mode .el-pager li{background:#fff;-webkit-box-sizing:border-box}.light-mode .el-pagination.is-background.el-pagination--small .btn-next,.light-mode .el-pagination.is-background.el-pagination--small .btn-prev,.light-mode .el-pagination.is-background.el-pagination--small .el-pager li{margin:0 3px;min-width:22px}.light-mode .el-pager,.light-mode .el-pager li{vertical-align:top;margin:0;display:inline-block}.light-mode .el-pager{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;list-style:none;font-size:0}.light-mode .el-date-table,.light-mode .el-table th{-webkit-user-select:none;-ms-user-select:none}.light-mode .el-pager .more::before{line-height:30px}.light-mode .el-pager li{padding:0 4px;font-size:13px;min-width:35.5px;height:28px;line-height:28px;box-sizing:border-box;text-align:center}.light-mode .el-menu--collapse .el-menu .el-submenu,.light-mode .el-menu--popup{min-width:200px}.light-mode .el-pager li.btn-quicknext,.light-mode .el-pager li.btn-quickprev{line-height:28px;color:#2c3e50}.light-mode .el-pager li.btn-quicknext.disabled,.light-mode .el-pager li.btn-quickprev.disabled{color:#c0c4cc}.light-mode .el-pager li.active+li{border-left:0}.light-mode .el-pager li:hover{color:#282c34}.light-mode .el-pager li.active{color:#282c34;cursor:default}@-webkit-keyframes v-modal-in{0%{opacity:0}}@-webkit-keyframes v-modal-out{100%{opacity:0}}.light-mode .el-dialog{position:relative;margin:0 auto 50px;border-radius:2px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.3);box-shadow:0 1px 3px rgba(0,0,0,.3);box-sizing:border-box;width:50%}.light-mode .el-dialog.is-fullscreen{width:100%;margin-top:0;margin-bottom:0;height:100%;overflow:auto}.light-mode .el-dialog__wrapper{position:fixed;top:0;right:0;bottom:0;left:0;overflow:auto;margin:0}.light-mode .el-dialog__header{padding:20px 20px 10px}.light-mode .el-dialog__headerbtn{position:absolute;top:20px;right:20px;padding:0;background:0 0;border:none;outline:0;cursor:pointer;font-size:16px}.light-mode .el-dialog__headerbtn .el-dialog__close{color:#909399}.light-mode .el-dialog__headerbtn:focus .el-dialog__close,.light-mode .el-dialog__headerbtn:hover .el-dialog__close{color:#282c34}.light-mode .el-dialog__title{line-height:24px;font-size:18px;color:#2c3e50}.light-mode .el-dialog__body{padding:30px 20px;color:#606266;font-size:14px;word-break:break-all}.light-mode .el-dialog__footer{padding:10px 20px 20px;text-align:right;-webkit-box-sizing:border-box;box-sizing:border-box}.light-mode .el-dialog--center{text-align:center}.light-mode .el-dialog--center .el-dialog__body{text-align:initial;padding:25px 25px 30px}.light-mode .el-dialog--center .el-dialog__footer{text-align:inherit}.light-mode .dialog-fade-enter-active{-webkit-animation:dialog-fade-in .3s;animation:dialog-fade-in .3s}.light-mode .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}}.light-mode .el-autocomplete{position:relative;display:inline-block}.light-mode .el-autocomplete-suggestion{margin:5px 0;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);border-radius:4px;border:1px solid #e4e7ed;-webkit-box-sizing:border-box;box-sizing:border-box;background-color:#fff}.light-mode .el-dropdown-menu,.light-mode .el-menu--collapse .el-submenu .el-menu{z-index:10;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.light-mode .el-autocomplete-suggestion__wrap{max-height:280px;padding:10px 0;-webkit-box-sizing:border-box;box-sizing:border-box}.light-mode .el-autocomplete-suggestion__list{margin:0;padding:0}.light-mode .el-autocomplete-suggestion li{padding:0 20px;margin:0;line-height:34px;cursor:pointer;color:#606266;font-size:14px;list-style:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.light-mode .el-autocomplete-suggestion li.highlighted,.light-mode .el-autocomplete-suggestion li:hover{background-color:#f5f7fa}.light-mode .el-autocomplete-suggestion li.divider{margin-top:6px;border-top:1px solid #000}.light-mode .el-autocomplete-suggestion li.divider:last-child{margin-bottom:-6px}.light-mode .el-autocomplete-suggestion.is-loading li{text-align:center;height:100px;line-height:100px;font-size:20px;color:#999}.light-mode .el-autocomplete-suggestion.is-loading li::after{display:inline-block;content:\"\";height:100%;vertical-align:middle}.light-mode .el-autocomplete-suggestion.is-loading li:hover{background-color:#fff}.light-mode .el-autocomplete-suggestion.is-loading .el-icon-loading{vertical-align:middle}.light-mode .el-dropdown{display:inline-block;position:relative;color:#606266;font-size:14px}.light-mode .el-dropdown .el-button-group{display:block}.light-mode .el-dropdown .el-button-group .el-button{float:none}.light-mode .el-dropdown .el-dropdown__caret-button{padding-left:5px;padding-right:5px;position:relative;border-left:none}.light-mode .el-dropdown .el-dropdown__caret-button::before{content:'';position:absolute;display:block;width:1px;top:5px;bottom:5px;left:0;background:rgba(255,255,255,.5)}.light-mode .el-dropdown .el-dropdown__caret-button.el-button--default::before{background:rgba(220,223,230,.5)}.light-mode .el-dropdown .el-dropdown__caret-button:hover::before{top:0;bottom:0}.light-mode .el-dropdown .el-dropdown__caret-button .el-dropdown__icon{padding-left:0}.light-mode .el-dropdown__icon{font-size:12px;margin:0 3px}.light-mode .el-dropdown-menu{position:absolute;top:0;left:0;padding:10px 0;margin:5px 0;background-color:#fff;border:1px solid #ebeef5;border-radius:4px;box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.light-mode .el-dropdown-menu__item{list-style:none;line-height:36px;padding:0 20px;margin:0;font-size:14px;color:#606266;cursor:pointer;outline:0}.light-mode .el-dropdown-menu__item:focus,.light-mode .el-dropdown-menu__item:not(.is-disabled):hover{background-color:#eaeaeb;color:#53565d}.light-mode .el-dropdown-menu__item i{margin-right:5px}.light-mode .el-dropdown-menu__item--divided{position:relative;margin-top:6px;border-top:1px solid #ebeef5}.light-mode .el-dropdown-menu__item--divided:before{content:'';height:6px;display:block;margin:0 -20px;background-color:#fff}.light-mode .el-dropdown-menu__item.is-disabled{cursor:default;color:#bbb;pointer-events:none}.light-mode .el-dropdown-menu--medium{padding:6px 0}.light-mode .el-dropdown-menu--medium .el-dropdown-menu__item{line-height:30px;padding:0 17px;font-size:14px}.light-mode .el-dropdown-menu--medium .el-dropdown-menu__item.el-dropdown-menu__item--divided{margin-top:6px}.light-mode .el-dropdown-menu--medium .el-dropdown-menu__item.el-dropdown-menu__item--divided:before{height:6px;margin:0 -17px}.light-mode .el-dropdown-menu--small{padding:6px 0}.light-mode .el-dropdown-menu--small .el-dropdown-menu__item{line-height:27px;padding:0 15px;font-size:13px}.light-mode .el-dropdown-menu--small .el-dropdown-menu__item.el-dropdown-menu__item--divided{margin-top:4px}.light-mode .el-dropdown-menu--small .el-dropdown-menu__item.el-dropdown-menu__item--divided:before{height:4px;margin:0 -15px}.light-mode .el-dropdown-menu--mini{padding:3px 0}.light-mode .el-dropdown-menu--mini .el-dropdown-menu__item{line-height:24px;padding:0 10px;font-size:12px}.light-mode .el-dropdown-menu--mini .el-dropdown-menu__item.el-dropdown-menu__item--divided{margin-top:3px}.light-mode .el-dropdown-menu--mini .el-dropdown-menu__item.el-dropdown-menu__item--divided:before{height:3px;margin:0 -10px}.light-mode .el-menu{border-right:solid 1px #e6e6e6;list-style:none;position:relative;margin:0;padding-left:0;background-color:#fff}.light-mode .el-menu--horizontal>.el-menu-item:not(.is-disabled):focus,.light-mode .el-menu--horizontal>.el-menu-item:not(.is-disabled):hover,.light-mode .el-menu--horizontal>.el-submenu .el-submenu__title:hover{background-color:#fff}.light-mode .el-menu::after,.light-mode .el-menu::before{display:table;content:\"\"}.light-mode .el-menu::after{clear:both}.light-mode .el-menu.el-menu--horizontal{border-bottom:solid 1px #e6e6e6}.light-mode .el-menu--horizontal{border-right:none}.light-mode .el-menu--horizontal>.el-menu-item{float:left;height:60px;line-height:60px;margin:0;border-bottom:2px solid transparent;color:#909399}.light-mode .el-menu--horizontal>.el-menu-item a,.light-mode .el-menu--horizontal>.el-menu-item a:hover{color:inherit}.light-mode .el-menu--horizontal>.el-submenu{float:left}.light-mode .el-menu--horizontal>.el-submenu:focus,.light-mode .el-menu--horizontal>.el-submenu:hover{outline:0}.light-mode .el-menu--horizontal>.el-submenu:focus .el-submenu__title,.light-mode .el-menu--horizontal>.el-submenu:hover .el-submenu__title{color:#2c3e50}.light-mode .el-menu--horizontal>.el-submenu.is-active .el-submenu__title{border-bottom:2px solid #282c34;color:#2c3e50}.light-mode .el-menu--horizontal>.el-submenu .el-submenu__title{height:60px;line-height:60px;border-bottom:2px solid transparent;color:#909399}.light-mode .el-menu--horizontal>.el-submenu .el-submenu__icon-arrow{position:static;vertical-align:middle;margin-left:8px;margin-top:-3px}.light-mode .el-menu--horizontal .el-menu .el-menu-item,.light-mode .el-menu--horizontal .el-menu .el-submenu__title{background-color:#fff;float:none;height:36px;line-height:36px;padding:0 10px;color:#909399}.light-mode .el-menu--horizontal .el-menu .el-menu-item.is-active,.light-mode .el-menu--horizontal .el-menu .el-submenu.is-active>.el-submenu__title{color:#2c3e50}.light-mode .el-menu--horizontal .el-menu-item:not(.is-disabled):focus,.light-mode .el-menu--horizontal .el-menu-item:not(.is-disabled):hover{outline:0;color:#2c3e50}.light-mode .el-menu--horizontal>.el-menu-item.is-active{border-bottom:2px solid #282c34;color:#2c3e50}.light-mode .el-menu--collapse{width:64px}.light-mode .el-menu--collapse>.el-menu-item [class^=el-icon-],.light-mode .el-menu--collapse>.el-submenu>.el-submenu__title [class^=el-icon-]{margin:0;vertical-align:middle;width:24px;text-align:center}.light-mode .el-menu--collapse>.el-menu-item .el-submenu__icon-arrow,.light-mode .el-menu--collapse>.el-submenu>.el-submenu__title .el-submenu__icon-arrow{display:none}.light-mode .el-menu--collapse>.el-menu-item span,.light-mode .el-menu--collapse>.el-submenu>.el-submenu__title span{height:0;width:0;overflow:hidden;visibility:hidden;display:inline-block}.light-mode .el-menu--collapse>.el-menu-item.is-active i{color:inherit}.light-mode .el-menu--collapse .el-submenu{position:relative}.light-mode .el-menu--collapse .el-submenu .el-menu{position:absolute;margin-left:5px;top:0;left:100%;border:1px solid #e4e7ed;border-radius:2px;box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.light-mode .el-menu-item,.light-mode .el-submenu__title{height:56px;line-height:56px;position:relative;-webkit-box-sizing:border-box;white-space:nowrap;list-style:none}.light-mode .el-menu--collapse .el-submenu.is-opened>.el-submenu__title .el-submenu__icon-arrow{-webkit-transform:none;transform:none}.light-mode .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)}.light-mode .el-menu--popup-bottom-start{margin-top:5px}.light-mode .el-menu--popup-right-start{margin-left:5px;margin-right:5px}.light-mode .el-menu-item{font-size:14px;color:#2c3e50;padding:0 20px;cursor:pointer;-webkit-transition:border-color .3s,background-color .3s,color .3s;transition:border-color .3s,background-color .3s,color .3s;box-sizing:border-box}.light-mode .el-menu-item *{vertical-align:middle}.light-mode .el-menu-item i{color:#909399}.light-mode .el-menu-item:focus,.light-mode .el-menu-item:hover{outline:0;background-color:#eaeaeb}.light-mode .el-menu-item.is-disabled{opacity:.25;cursor:not-allowed;background:0 0!important}.light-mode .el-menu-item [class^=el-icon-]{margin-right:5px;width:24px;text-align:center;font-size:18px;vertical-align:middle}.light-mode .el-menu-item.is-active{color:#282c34}.light-mode .el-menu-item.is-active i{color:inherit}.light-mode .el-submenu{list-style:none;margin:0;padding-left:0}.light-mode .el-submenu__title{font-size:14px;color:#2c3e50;padding:0 20px;cursor:pointer;-webkit-transition:border-color .3s,background-color .3s,color .3s;transition:border-color .3s,background-color .3s,color .3s;box-sizing:border-box}.light-mode .el-submenu__title *{vertical-align:middle}.light-mode .el-submenu__title i{color:#909399}.light-mode .el-submenu__title:focus,.light-mode .el-submenu__title:hover{outline:0;background-color:#eaeaeb}.light-mode .el-submenu__title.is-disabled{opacity:.25;cursor:not-allowed;background:0 0!important}.light-mode .el-submenu__title:hover{background-color:#eaeaeb}.light-mode .el-submenu .el-menu{border:none}.light-mode .el-submenu .el-menu-item{height:50px;line-height:50px;padding:0 45px;min-width:200px}.light-mode .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}.light-mode .el-submenu.is-active .el-submenu__title{border-bottom-color:#282c34}.light-mode .el-submenu.is-opened>.el-submenu__title .el-submenu__icon-arrow{-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg)}.light-mode .el-submenu.is-disabled .el-menu-item,.light-mode .el-submenu.is-disabled .el-submenu__title{opacity:.25;cursor:not-allowed;background:0 0!important}.light-mode .el-submenu [class^=el-icon-]{vertical-align:middle;margin-right:5px;width:24px;text-align:center;font-size:18px}.light-mode .el-menu-item-group>ul{padding:0}.light-mode .el-menu-item-group__title{padding:7px 0 7px 20px;line-height:normal;font-size:12px;color:#909399}.light-mode .el-radio-button__inner,.light-mode .el-radio-group{display:inline-block;line-height:1;vertical-align:middle}.light-mode .horizontal-collapse-transition .el-submenu__title .el-submenu__icon-arrow{-webkit-transition:.2s;transition:.2s;opacity:0}.light-mode .el-radio-group{font-size:0}.light-mode .el-radio-button{position:relative;display:inline-block;outline:0}.light-mode .el-radio-button__inner{white-space:nowrap;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;outline:0;margin:0;position:relative;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}.light-mode .el-radio-button__inner.is-round{padding:12px 20px}.light-mode .el-radio-button__inner:hover{color:#282c34}.light-mode .el-radio-button__inner [class*=el-icon-]{line-height:.9}.light-mode .el-radio-button__inner [class*=el-icon-]+span{margin-left:5px}.light-mode .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}.light-mode .el-radio-button__orig-radio{opacity:0;outline:0;position:absolute;z-index:-1}.light-mode .el-radio-button__orig-radio:checked+.el-radio-button__inner{color:#fff;background-color:#282c34;border-color:#282c34;-webkit-box-shadow:-1px 0 0 0 #282c34;box-shadow:-1px 0 0 0 #282c34}.light-mode .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}.light-mode .el-radio-button__orig-radio:disabled:checked+.el-radio-button__inner{background-color:#f2f6fc}.light-mode .el-radio-button:last-child .el-radio-button__inner{border-radius:0 4px 4px 0}.light-mode .el-popover,.light-mode .el-radio-button:first-child:last-child .el-radio-button__inner{border-radius:4px}.light-mode .el-radio-button--medium .el-radio-button__inner{padding:10px 20px;font-size:14px;border-radius:0}.light-mode .el-radio-button--medium .el-radio-button__inner.is-round{padding:10px 20px}.light-mode .el-radio-button--small .el-radio-button__inner{padding:9px 15px;font-size:12px;border-radius:0}.light-mode .el-radio-button--small .el-radio-button__inner.is-round{padding:9px 15px}.light-mode .el-radio-button--mini .el-radio-button__inner{padding:7px 15px;font-size:12px;border-radius:0}.light-mode .el-radio-button--mini .el-radio-button__inner.is-round{padding:7px 15px}.light-mode .el-radio-button:focus:not(.is-focus):not(:active):not(.is-disabled){-webkit-box-shadow:0 0 2px 2px #282c34;box-shadow:0 0 2px 2px #282c34}.light-mode .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}.light-mode .el-switch__core,.light-mode .el-switch__label{display:inline-block;cursor:pointer}.light-mode .el-switch.is-disabled .el-switch__core,.light-mode .el-switch.is-disabled .el-switch__label{cursor:not-allowed}.light-mode .el-switch__label{-webkit-transition:.2s;transition:.2s;height:20px;font-size:14px;font-weight:500;vertical-align:middle;color:#2c3e50}.light-mode .el-switch__label.is-active{color:#282c34}.light-mode .el-switch__label--left{margin-right:10px}.light-mode .el-switch__label--right{margin-left:10px}.light-mode .el-switch__label *{line-height:1;font-size:14px;display:inline-block}.light-mode .el-switch__input{position:absolute;width:0;height:0;opacity:0;margin:0}.light-mode .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;vertical-align:middle}.light-mode .el-switch__core:after{content:\"\";position:absolute;top:1px;left:1px;border-radius:100%;-webkit-transition:all .3s;transition:all .3s;width:16px;height:16px;background-color:#fff}.light-mode .el-switch.is-checked .el-switch__core{border-color:#282c34;background-color:#282c34}.light-mode .el-switch.is-checked .el-switch__core::after{left:100%;margin-left:-17px}.light-mode .el-switch.is-disabled{opacity:.6}.light-mode .el-switch--wide .el-switch__label.el-switch__label--left span{left:10px}.light-mode .el-switch--wide .el-switch__label.el-switch__label--right span{right:10px}.light-mode .el-switch .label-fade-enter,.light-mode .el-switch .label-fade-leave-active{opacity:0}.light-mode .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}.light-mode .el-select-dropdown.is-multiple .el-select-dropdown__item.selected{color:#282c34;background-color:#fff}.light-mode .el-select-dropdown.is-multiple .el-select-dropdown__item.selected.hover{background-color:#f5f7fa}.light-mode .el-select-dropdown.is-multiple .el-select-dropdown__item.selected::after{position:absolute;right:20px;font-family:element-icons;content:\"\\e6da\";font-size:12px;font-weight:700;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.light-mode .el-select-dropdown .el-scrollbar.is-empty .el-select-dropdown__list{padding:0}.light-mode .el-select-dropdown__empty{padding:10px 0;margin:0;text-align:center;color:#999;font-size:14px}.light-mode .el-select-dropdown__wrap{max-height:274px}.light-mode .el-select-dropdown__list{list-style:none;padding:6px 0;margin:0;-webkit-box-sizing:border-box;box-sizing:border-box}.light-mode .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}.light-mode .el-select .el-tag,.light-mode .el-table{-webkit-box-sizing:border-box}.light-mode .el-select-dropdown__item.is-disabled{color:#c0c4cc;cursor:not-allowed}.light-mode .el-select-dropdown__item.is-disabled:hover{background-color:#fff}.light-mode .el-select-dropdown__item.hover,.light-mode .el-select-dropdown__item:hover{background-color:#f5f7fa}.light-mode .el-select-dropdown__item.selected{color:#282c34;font-weight:700}.light-mode .el-select-group{margin:0;padding:0}.light-mode .el-select-group__wrap{position:relative;list-style:none;margin:0;padding:0}.light-mode .el-select-group__wrap:not(:last-of-type){padding-bottom:24px}.light-mode .el-select-group__wrap:not(:last-of-type)::after{content:'';position:absolute;display:block;left:20px;right:20px;bottom:12px;height:1px;background:#e4e7ed}.light-mode .el-select-group__title{padding-left:20px;font-size:12px;color:#909399;line-height:30px}.light-mode .el-select-group .el-select-dropdown__item{padding-left:20px}.light-mode .el-select{display:inline-block;position:relative}.light-mode .el-select .el-select__tags>span{display:contents}.light-mode .el-select:hover .el-input__inner{border-color:#c0c4cc}.light-mode .el-select .el-input__inner{cursor:pointer;padding-right:35px}.light-mode .el-select .el-input__inner:focus{border-color:#282c34}.light-mode .el-select .el-input .el-select__caret{color:#c0c4cc;font-size:14px;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg);cursor:pointer}.light-mode .el-select .el-input .el-select__caret.is-reverse{-webkit-transform:rotateZ(0);transform:rotateZ(0)}.light-mode .el-select .el-input .el-select__caret.is-show-close{font-size:14px;text-align:center;-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg);border-radius:100%;color:#c0c4cc;-webkit-transition:color .2s cubic-bezier(.645,.045,.355,1);transition:color .2s cubic-bezier(.645,.045,.355,1)}.light-mode .el-select .el-input .el-select__caret.is-show-close:hover{color:#909399}.light-mode .el-select .el-input.is-disabled .el-input__inner{cursor:not-allowed}.light-mode .el-select .el-input.is-disabled .el-input__inner:hover{border-color:#e4e7ed}.light-mode .el-select .el-input.is-focus .el-input__inner{border-color:#282c34}.light-mode .el-select>.el-input{display:block}.light-mode .el-select__input{border:none;outline:0;padding:0;margin-left:15px;color:#666;font-size:14px;-webkit-appearance:none;-moz-appearance:none;appearance:none;height:28px;background-color:transparent}.light-mode .el-select__input.is-mini{height:14px}.light-mode .el-select__close{cursor:pointer;position:absolute;top:8px;z-index:1000;right:25px;color:#c0c4cc;line-height:18px;font-size:14px}.light-mode .el-select__close:hover{color:#909399}.light-mode .el-select__tags{position:absolute;line-height:normal;white-space:normal;z-index:1;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-wrap:wrap;flex-wrap:wrap}.light-mode .el-select .el-tag__close{margin-top:-2px}.light-mode .el-select .el-tag{box-sizing:border-box;border-color:transparent;margin:2px 0 2px 6px;background-color:#f0f2f5}.light-mode .el-select .el-tag__close.el-icon-close{background-color:#c0c4cc;right:-7px;top:0;color:#fff}.light-mode .el-select .el-tag__close.el-icon-close:hover{background-color:#909399}.light-mode .el-table,.light-mode .el-table__expanded-cell{background-color:#fff}.light-mode .el-select .el-tag__close.el-icon-close::before{display:block;-webkit-transform:translate(0,.5px);transform:translate(0,.5px)}.light-mode .el-table{position:relative;overflow:hidden;box-sizing:border-box;-webkit-box-flex:1;-ms-flex:1;flex:1;width:100%;max-width:100%;font-size:14px;color:#606266}.light-mode .el-table--mini,.light-mode .el-table--small,.light-mode .el-table__expand-icon{font-size:12px}.light-mode .el-table__empty-block{min-height:60px;text-align:center;width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.light-mode .el-table__empty-text{line-height:60px;width:50%;color:#909399}.light-mode .el-table__expand-column .cell{padding:0;text-align:center}.light-mode .el-table__expand-icon{position:relative;cursor:pointer;color:#666;-webkit-transition:-webkit-transform .2s ease-in-out;transition:-webkit-transform .2s ease-in-out;transition:transform .2s ease-in-out;transition:transform .2s ease-in-out,-webkit-transform .2s ease-in-out;height:20px}.light-mode .el-table__expand-icon--expanded{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.light-mode .el-table__expand-icon>.el-icon{position:absolute;left:50%;top:50%;margin-left:-5px;margin-top:-5px}.light-mode .el-table__expanded-cell[class*=cell]{padding:20px 50px}.light-mode .el-table__expanded-cell:hover{background-color:transparent!important}.light-mode .el-table__placeholder{display:inline-block;width:20px}.light-mode .el-table__append-wrapper{overflow:hidden}.light-mode .el-table--fit{border-right:0;border-bottom:0}.light-mode .el-table--fit td.gutter,.light-mode .el-table--fit th.gutter{border-right-width:1px}.light-mode .el-table--scrollable-x .el-table__body-wrapper{overflow-x:auto}.light-mode .el-table--scrollable-y .el-table__body-wrapper{overflow-y:auto}.light-mode .el-table thead{color:#909399;font-weight:500}.light-mode .el-table thead.is-group th{background:#f5f7fa}.light-mode .el-table th,.light-mode .el-table tr{background-color:#fff}.light-mode .el-table td,.light-mode .el-table th{padding:12px 0;min-width:0;-webkit-box-sizing:border-box;box-sizing:border-box;text-overflow:ellipsis;vertical-align:middle;position:relative;text-align:left}.light-mode .el-table td.is-center,.light-mode .el-table th.is-center{text-align:center}.light-mode .el-table td.is-right,.light-mode .el-table th.is-right{text-align:right}.light-mode .el-table td.gutter,.light-mode .el-table th.gutter{width:15px;border-right-width:0;border-bottom-width:0;padding:0}.light-mode .el-table--medium td,.light-mode .el-table--medium th{padding:10px 0}.light-mode .el-table--small td,.light-mode .el-table--small th{padding:8px 0}.light-mode .el-table--mini td,.light-mode .el-table--mini th{padding:6px 0}.light-mode .el-table .cell,.light-mode .el-table th div{padding-right:10px;overflow:hidden;text-overflow:ellipsis}.light-mode .el-table .cell,.light-mode .el-table th div,.light-mode .el-table--border td:first-child .cell,.light-mode .el-table--border th:first-child .cell{padding-left:10px}.light-mode .el-table tr input[type=checkbox]{margin:0}.light-mode .el-table td,.light-mode .el-table th.is-leaf{border-bottom:1px solid #ebeef5}.light-mode .el-table th.is-sortable{cursor:pointer}.light-mode .el-table th{white-space:nowrap;overflow:hidden;-moz-user-select:none;user-select:none}.light-mode .el-table th div{display:inline-block;line-height:40px;-webkit-box-sizing:border-box;box-sizing:border-box;white-space:nowrap}.light-mode .el-table th>.cell{position:relative;word-wrap:normal;text-overflow:ellipsis;display:inline-block;vertical-align:middle;width:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.light-mode .el-table th>.cell.highlight{color:#282c34}.light-mode .el-table th.required>div::before{display:inline-block;content:\"\";width:8px;height:8px;border-radius:50%;background:#ff4d51;margin-right:5px;vertical-align:middle}.light-mode .el-table td div{-webkit-box-sizing:border-box;box-sizing:border-box}.light-mode .el-table td.gutter{width:0}.light-mode .el-table .cell{-webkit-box-sizing:border-box;box-sizing:border-box;white-space:normal;word-break:break-all;line-height:23px}.light-mode .el-table .cell.el-tooltip{white-space:nowrap;min-width:50px}.light-mode .el-table--border,.light-mode .el-table--group{border:1px solid #ebeef5}.light-mode .el-table--border::after,.light-mode .el-table--group::after,.light-mode .el-table::before{content:'';position:absolute;background-color:#ebeef5;z-index:1}.light-mode .el-table--border::after,.light-mode .el-table--group::after{top:0;right:0;width:1px;height:100%}.light-mode .el-table::before{left:0;bottom:0;width:100%;height:1px}.light-mode .el-table--border{border-right:none;border-bottom:none}.light-mode .el-table--border.el-loading-parent--relative{border-color:transparent}.light-mode .el-table--border td,.light-mode .el-table--border th,.light-mode .el-table__body-wrapper .el-table--border.is-scrolling-left~.el-table__fixed{border-right:1px solid #ebeef5}.light-mode .el-table--border th.gutter:last-of-type{border-bottom:1px solid #ebeef5;border-bottom-width:1px}.light-mode .el-table--border th,.light-mode .el-table__fixed-right-patch{border-bottom:1px solid #ebeef5}.light-mode .el-table__fixed,.light-mode .el-table__fixed-right{position:absolute;top:0;left:0;overflow-x:hidden;overflow-y:hidden;-webkit-box-shadow:0 0 10px rgba(0,0,0,.12);box-shadow:0 0 10px rgba(0,0,0,.12)}.light-mode .el-table__fixed-right::before,.light-mode .el-table__fixed::before{content:'';position:absolute;left:0;bottom:0;width:100%;height:1px;background-color:#ebeef5;z-index:4}.light-mode .el-table__fixed-right-patch{position:absolute;top:-1px;right:0;background-color:#fff}.light-mode .el-table__fixed-right{top:0;left:auto;right:0}.light-mode .el-table__fixed-right .el-table__fixed-body-wrapper,.light-mode .el-table__fixed-right .el-table__fixed-footer-wrapper,.light-mode .el-table__fixed-right .el-table__fixed-header-wrapper{left:auto;right:0}.light-mode .el-table__fixed-header-wrapper{position:absolute;left:0;top:0;z-index:3}.light-mode .el-table__fixed-footer-wrapper{position:absolute;left:0;bottom:0;z-index:3}.light-mode .el-table__fixed-footer-wrapper tbody td{border-top:1px solid #ebeef5;background-color:#f5f7fa;color:#606266}.light-mode .el-table__fixed-body-wrapper{position:absolute;left:0;top:37px;overflow:hidden;z-index:3}.light-mode .el-table__body-wrapper,.light-mode .el-table__footer-wrapper,.light-mode .el-table__header-wrapper{width:100%}.light-mode .el-table__footer-wrapper{margin-top:-1px}.light-mode .el-table__footer-wrapper td{border-top:1px solid #ebeef5}.light-mode .el-table__body,.light-mode .el-table__footer,.light-mode .el-table__header{table-layout:fixed;border-collapse:separate}.light-mode .el-table__footer-wrapper,.light-mode .el-table__header-wrapper{overflow:hidden}.light-mode .el-table__footer-wrapper tbody td,.light-mode .el-table__header-wrapper tbody td{background-color:#f5f7fa;color:#606266}.light-mode .el-table__body-wrapper{overflow:hidden;position:relative}.light-mode .el-table__body-wrapper.is-scrolling-left~.el-table__fixed,.light-mode .el-table__body-wrapper.is-scrolling-none~.el-table__fixed,.light-mode .el-table__body-wrapper.is-scrolling-none~.el-table__fixed-right,.light-mode .el-table__body-wrapper.is-scrolling-right~.el-table__fixed-right{-webkit-box-shadow:none;box-shadow:none}.light-mode .el-picker-panel,.light-mode .el-table-filter{-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.light-mode .el-table__body-wrapper .el-table--border.is-scrolling-right~.el-table__fixed-right{border-left:1px solid #ebeef5}.light-mode .el-table .caret-wrapper{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:34px;width:24px;vertical-align:middle;cursor:pointer;overflow:initial;position:relative}.light-mode .el-table .sort-caret{width:0;height:0;border:5px solid transparent;position:absolute;left:7px}.light-mode .el-table .sort-caret.ascending{border-bottom-color:#c0c4cc;top:5px}.light-mode .el-table .sort-caret.descending{border-top-color:#c0c4cc;bottom:7px}.light-mode .el-table .ascending .sort-caret.ascending{border-bottom-color:#282c34}.light-mode .el-table .descending .sort-caret.descending{border-top-color:#282c34}.light-mode .el-table .hidden-columns{position:absolute;z-index:-1}.light-mode .el-table--striped .el-table__body tr.el-table__row--striped td{background:#fafafa}.light-mode .el-table--striped .el-table__body tr.el-table__row--striped.current-row td{background-color:#eaeaeb}.light-mode .el-table__body tr.hover-row.current-row>td,.light-mode .el-table__body tr.hover-row.el-table__row--striped.current-row>td,.light-mode .el-table__body tr.hover-row.el-table__row--striped>td,.light-mode .el-table__body tr.hover-row>td{background-color:#f5f7fa}.light-mode .el-table__body tr.current-row>td{background-color:#eaeaeb}.light-mode .el-table__column-resize-proxy{position:absolute;left:200px;top:0;bottom:0;width:0;border-left:1px solid #ebeef5;z-index:10}.light-mode .el-table__column-filter-trigger{display:inline-block;line-height:34px;cursor:pointer}.light-mode .el-table__column-filter-trigger i{color:#909399;font-size:12px;-webkit-transform:scale(.75);transform:scale(.75)}.light-mode .el-table--enable-row-transition .el-table__body td{-webkit-transition:background-color .25s ease;transition:background-color .25s ease}.light-mode .el-table--enable-row-hover .el-table__body tr:hover>td{background-color:#f5f7fa}.light-mode .el-table--fluid-height .el-table__fixed,.light-mode .el-table--fluid-height .el-table__fixed-right{bottom:0;overflow:hidden}.light-mode .el-table [class*=el-table__row--level] .el-table__expand-icon{display:inline-block;width:20px;line-height:20px;height:20px;text-align:center;margin-right:3px}.light-mode .el-table-column--selection .cell{padding-left:14px;padding-right:14px}.light-mode .el-table-filter{border:1px solid #ebeef5;border-radius:2px;background-color:#fff;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);-webkit-box-sizing:border-box;box-sizing:border-box;margin:2px 0}.light-mode .el-date-table td,.light-mode .el-date-table td div{height:30px;-webkit-box-sizing:border-box}.light-mode .el-table-filter__list{padding:5px 0;margin:0;list-style:none;min-width:100px}.light-mode .el-table-filter__list-item{line-height:36px;padding:0 10px;cursor:pointer;font-size:14px}.light-mode .el-table-filter__list-item:hover{background-color:#eaeaeb;color:#53565d}.light-mode .el-table-filter__list-item.is-active{background-color:#282c34;color:#fff}.light-mode .el-table-filter__content{min-width:100px}.light-mode .el-table-filter__bottom{border-top:1px solid #ebeef5;padding:8px}.light-mode .el-table-filter__bottom button{background:0 0;border:none;color:#606266;cursor:pointer;font-size:13px;padding:0 3px}.light-mode .el-date-table td.in-range div,.light-mode .el-date-table td.in-range div:hover,.light-mode .el-date-table.is-week-mode .el-date-table__row.current div,.light-mode .el-date-table.is-week-mode .el-date-table__row:hover div{background-color:#f2f6fc}.light-mode .el-table-filter__bottom button:hover{color:#282c34}.light-mode .el-table-filter__bottom button:focus{outline:0}.light-mode .el-table-filter__bottom button.is-disabled{color:#c0c4cc;cursor:not-allowed}.light-mode .el-table-filter__wrap{max-height:280px}.light-mode .el-table-filter__checkbox-group{padding:10px}.light-mode .el-table-filter__checkbox-group label.el-checkbox{display:block;margin-right:5px;margin-bottom:8px;margin-left:5px}.light-mode .el-table-filter__checkbox-group .el-checkbox:last-child{margin-bottom:0}.light-mode .el-date-table{font-size:12px;-moz-user-select:none;user-select:none}.light-mode .el-slider__button-wrapper,.light-mode .el-time-panel{-webkit-user-select:none;-ms-user-select:none}.light-mode .el-date-table.is-week-mode .el-date-table__row:hover td.available:hover{color:#606266}.light-mode .el-date-table.is-week-mode .el-date-table__row:hover td:first-child div{margin-left:5px;border-top-left-radius:15px;border-bottom-left-radius:15px}.light-mode .el-date-table.is-week-mode .el-date-table__row:hover td:last-child div{margin-right:5px;border-top-right-radius:15px;border-bottom-right-radius:15px}.light-mode .el-date-table td{width:32px;padding:4px 0;box-sizing:border-box;text-align:center;cursor:pointer;position:relative}.light-mode .el-date-table td div{padding:3px 0;box-sizing:border-box}.light-mode .el-date-table td span{width:24px;height:24px;display:block;margin:0 auto;line-height:24px;position:absolute;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);border-radius:50%}.light-mode .el-date-table td.next-month,.light-mode .el-date-table td.prev-month{color:#c0c4cc}.light-mode .el-date-table td.today{position:relative}.light-mode .el-date-table td.today span{color:#282c34;font-weight:700}.light-mode .el-date-table td.today.end-date span,.light-mode .el-date-table td.today.start-date span{color:#fff}.light-mode .el-date-table td.available:hover{color:#282c34}.light-mode .el-date-table td.current:not(.disabled) span{color:#fff;background-color:#282c34}.light-mode .el-date-table td.end-date div,.light-mode .el-date-table td.start-date div{color:#fff}.light-mode .el-date-table td.end-date span,.light-mode .el-date-table td.start-date span{background-color:#282c34}.light-mode .el-date-table td.start-date div{margin-left:5px;border-top-left-radius:15px;border-bottom-left-radius:15px}.light-mode .el-date-table td.end-date div{margin-right:5px;border-top-right-radius:15px;border-bottom-right-radius:15px}.light-mode .el-date-table td.disabled div{background-color:#f5f7fa;opacity:1;cursor:not-allowed;color:#c0c4cc}.light-mode .el-date-table td.selected div{margin-left:5px;margin-right:5px;background-color:#f2f6fc;border-radius:15px}.light-mode .el-date-table td.selected div:hover{background-color:#f2f6fc}.light-mode .el-date-table td.selected span{background-color:#282c34;color:#fff;border-radius:15px}.light-mode .el-date-table td.week{font-size:80%;color:#606266}.light-mode .el-month-table,.light-mode .el-year-table{font-size:12px;border-collapse:collapse}.light-mode .el-date-table th{padding:5px;color:#606266;font-weight:400;border-bottom:solid 1px #ebeef5}.light-mode .el-month-table{margin:-1px}.light-mode .el-month-table td{text-align:center;padding:8px 0;cursor:pointer}.light-mode .el-month-table td div{height:48px;padding:6px 0;-webkit-box-sizing:border-box;box-sizing:border-box}.light-mode .el-month-table td.today .cell{color:#282c34;font-weight:700}.light-mode .el-month-table td.today.end-date .cell,.light-mode .el-month-table td.today.start-date .cell{color:#fff}.light-mode .el-month-table td.disabled .cell{background-color:#f5f7fa;cursor:not-allowed;color:#c0c4cc}.light-mode .el-month-table td.disabled .cell:hover{color:#c0c4cc}.light-mode .el-month-table td .cell{width:60px;height:36px;display:block;line-height:36px;color:#606266;margin:0 auto;border-radius:18px}.light-mode .el-month-table td .cell:hover{color:#282c34}.light-mode .el-month-table td.in-range div,.light-mode .el-month-table td.in-range div:hover{background-color:#f2f6fc}.light-mode .el-month-table td.end-date div,.light-mode .el-month-table td.start-date div{color:#fff}.light-mode .el-month-table td.end-date .cell,.light-mode .el-month-table td.start-date .cell{color:#fff;background-color:#282c34}.light-mode .el-month-table td.start-date div{border-top-left-radius:24px;border-bottom-left-radius:24px}.light-mode .el-month-table td.end-date div{border-top-right-radius:24px;border-bottom-right-radius:24px}.light-mode .el-month-table td.current:not(.disabled) .cell{color:#282c34}.light-mode .el-year-table{margin:-1px}.light-mode .el-year-table .el-icon{color:#2c3e50}.light-mode .el-year-table td{text-align:center;padding:20px 3px;cursor:pointer}.light-mode .el-year-table td.today .cell{color:#282c34;font-weight:700}.light-mode .el-year-table td.disabled .cell{background-color:#f5f7fa;cursor:not-allowed;color:#c0c4cc}.light-mode .el-year-table td.disabled .cell:hover{color:#c0c4cc}.light-mode .el-year-table td .cell{width:48px;height:32px;display:block;line-height:32px;color:#606266;margin:0 auto}.light-mode .el-year-table td .cell:hover,.light-mode .el-year-table td.current:not(.disabled) .cell{color:#282c34}.light-mode .el-date-range-picker{width:646px}.light-mode .el-date-range-picker.has-sidebar{width:756px}.light-mode .el-date-range-picker table{table-layout:fixed;width:100%}.light-mode .el-date-range-picker .el-picker-panel__body{min-width:513px}.light-mode .el-date-range-picker .el-picker-panel__content{margin:0}.light-mode .el-date-range-picker__header{position:relative;text-align:center;height:28px}.light-mode .el-date-range-picker__header [class*=arrow-left]{float:left}.light-mode .el-date-range-picker__header [class*=arrow-right]{float:right}.light-mode .el-date-range-picker__header div{font-size:16px;font-weight:500;margin-right:50px}.light-mode .el-date-range-picker__content{float:left;width:50%;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:16px}.light-mode .el-date-range-picker__content.is-left{border-right:1px solid #e4e4e4}.light-mode .el-date-range-picker__content .el-date-range-picker__header div{margin-left:50px;margin-right:50px}.light-mode .el-date-range-picker__editors-wrap{-webkit-box-sizing:border-box;box-sizing:border-box;display:table-cell}.light-mode .el-date-range-picker__editors-wrap.is-right{text-align:right}.light-mode .el-date-range-picker__time-header{position:relative;border-bottom:1px solid #e4e4e4;font-size:12px;padding:8px 5px 5px;display:table;width:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.light-mode .el-date-range-picker__time-header>.el-icon-arrow-right{font-size:20px;vertical-align:middle;display:table-cell;color:#2c3e50}.light-mode .el-date-range-picker__time-picker-wrap{position:relative;display:table-cell;padding:0 5px}.light-mode .el-date-range-picker__time-picker-wrap .el-picker-panel{position:absolute;top:13px;right:0;z-index:1;background:#fff}.light-mode .el-date-picker{width:322px}.light-mode .el-date-picker.has-sidebar.has-time{width:434px}.light-mode .el-date-picker.has-sidebar{width:438px}.light-mode .el-date-picker.has-time .el-picker-panel__body-wrapper{position:relative}.light-mode .el-date-picker .el-picker-panel__content{width:292px}.light-mode .el-date-picker table{table-layout:fixed;width:100%}.light-mode .el-date-picker__editor-wrap{position:relative;display:table-cell;padding:0 5px}.light-mode .el-date-picker__time-header{position:relative;border-bottom:1px solid #e4e4e4;font-size:12px;padding:8px 5px 5px;display:table;width:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.light-mode .el-date-picker__header{margin:12px;text-align:center}.light-mode .el-date-picker__header--bordered{margin-bottom:0;padding-bottom:12px;border-bottom:solid 1px #ebeef5}.light-mode .el-date-picker__header--bordered+.el-picker-panel__content{margin-top:0}.light-mode .el-date-picker__header-label{font-size:16px;font-weight:500;padding:0 5px;line-height:22px;text-align:center;cursor:pointer;color:#606266}.light-mode .el-date-picker__header-label.active,.light-mode .el-date-picker__header-label:hover{color:#282c34}.light-mode .el-date-picker__prev-btn{float:left}.light-mode .el-date-picker__next-btn{float:right}.light-mode .el-date-picker__time-wrap{padding:10px;text-align:center}.light-mode .el-date-picker__time-label{float:left;cursor:pointer;line-height:30px;margin-left:10px}.light-mode .time-select{margin:5px 0;min-width:0}.light-mode .time-select .el-picker-panel__content{max-height:200px;margin:0}.light-mode .time-select-item{padding:8px 10px;font-size:14px;line-height:20px}.light-mode .time-select-item.selected:not(.disabled){color:#282c34;font-weight:700}.light-mode .time-select-item.disabled{color:#e4e7ed;cursor:not-allowed}.light-mode .time-select-item:hover{background-color:#f5f7fa;font-weight:700;cursor:pointer}.light-mode .el-date-editor{position:relative;display:inline-block;text-align:left}.light-mode .el-date-editor.el-input,.light-mode .el-date-editor.el-input__inner{width:220px}.light-mode .el-date-editor--monthrange.el-input,.light-mode .el-date-editor--monthrange.el-input__inner{width:300px}.light-mode .el-date-editor--daterange.el-input,.light-mode .el-date-editor--daterange.el-input__inner,.light-mode .el-date-editor--timerange.el-input,.light-mode .el-date-editor--timerange.el-input__inner{width:350px}.light-mode .el-date-editor--datetimerange.el-input,.light-mode .el-date-editor--datetimerange.el-input__inner{width:400px}.light-mode .el-date-editor--dates .el-input__inner{text-overflow:ellipsis;white-space:nowrap}.light-mode .el-date-editor .el-icon-circle-close{cursor:pointer}.light-mode .el-date-editor .el-range__icon{font-size:14px;margin-left:-5px;color:#c0c4cc;float:left;line-height:32px}.light-mode .el-date-editor .el-range-input,.light-mode .el-date-editor .el-range-separator{height:100%;margin:0;text-align:center;display:inline-block;font-size:14px}.light-mode .el-date-editor .el-range-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;outline:0;padding:0;width:39%;color:#606266}.light-mode .el-date-editor .el-range-input::-webkit-input-placeholder{color:#c0c4cc}.light-mode .el-date-editor .el-range-input::-ms-input-placeholder{color:#c0c4cc}.light-mode .el-date-editor .el-range-input::placeholder{color:#c0c4cc}.light-mode .el-date-editor .el-range-separator{padding:0 5px;line-height:32px;width:5%;color:#2c3e50}.light-mode .el-date-editor .el-range__close-icon{font-size:14px;color:#c0c4cc;width:25px;display:inline-block;float:right;line-height:32px}.light-mode .el-range-editor.el-input__inner{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:3px 10px}.light-mode .el-range-editor .el-range-input{line-height:1}.light-mode .el-range-editor.is-active,.light-mode .el-range-editor.is-active:hover{border-color:#282c34}.light-mode .el-range-editor--medium.el-input__inner{height:36px}.light-mode .el-range-editor--medium .el-range-separator{line-height:28px;font-size:14px}.light-mode .el-range-editor--medium .el-range-input{font-size:14px}.light-mode .el-range-editor--medium .el-range__close-icon,.light-mode .el-range-editor--medium .el-range__icon{line-height:28px}.light-mode .el-range-editor--small.el-input__inner{height:32px}.light-mode .el-range-editor--small .el-range-separator{line-height:24px;font-size:13px}.light-mode .el-range-editor--small .el-range-input{font-size:13px}.light-mode .el-range-editor--small .el-range__close-icon,.light-mode .el-range-editor--small .el-range__icon{line-height:24px}.light-mode .el-range-editor--mini.el-input__inner{height:28px}.light-mode .el-range-editor--mini .el-range-separator{line-height:20px;font-size:12px}.light-mode .el-range-editor--mini .el-range-input{font-size:12px}.light-mode .el-range-editor--mini .el-range__close-icon,.light-mode .el-range-editor--mini .el-range__icon{line-height:20px}.light-mode .el-range-editor.is-disabled{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.light-mode .el-range-editor.is-disabled:focus,.light-mode .el-range-editor.is-disabled:hover{border-color:#e4e7ed}.light-mode .el-range-editor.is-disabled input{background-color:#f5f7fa;color:#c0c4cc;cursor:not-allowed}.light-mode .el-range-editor.is-disabled input::-webkit-input-placeholder{color:#c0c4cc}.light-mode .el-range-editor.is-disabled input::-ms-input-placeholder{color:#c0c4cc}.light-mode .el-range-editor.is-disabled input::placeholder{color:#c0c4cc}.light-mode .el-range-editor.is-disabled .el-range-separator{color:#c0c4cc}.light-mode .el-picker-panel{color:#606266;border:1px solid #e4e7ed;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);background:#fff;border-radius:4px;line-height:30px;margin:5px 0}.light-mode .el-popover,.light-mode .el-time-panel{-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.light-mode .el-picker-panel__body-wrapper::after,.light-mode .el-picker-panel__body::after{content:\"\";display:table;clear:both}.light-mode .el-picker-panel__content{position:relative;margin:15px}.light-mode .el-picker-panel__footer{border-top:1px solid #e4e4e4;padding:4px;text-align:right;background-color:#fff;position:relative;font-size:0}.light-mode .el-picker-panel__shortcut{display:block;width:100%;border:0;background-color:transparent;line-height:28px;font-size:14px;color:#606266;padding-left:12px;text-align:left;outline:0;cursor:pointer}.light-mode .el-picker-panel__shortcut:hover{color:#282c34}.light-mode .el-picker-panel__shortcut.active{background-color:#e6f1fe;color:#282c34}.light-mode .el-picker-panel__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}.light-mode .el-picker-panel__btn[disabled]{color:#ccc;cursor:not-allowed}.light-mode .el-picker-panel__icon-btn{font-size:12px;color:#2c3e50;border:0;background:0 0;cursor:pointer;outline:0;margin-top:8px}.light-mode .el-picker-panel__icon-btn:hover{color:#282c34}.light-mode .el-picker-panel__icon-btn.is-disabled{color:#bbb}.light-mode .el-picker-panel__icon-btn.is-disabled:hover{cursor:not-allowed}.light-mode .el-picker-panel__link-btn{vertical-align:middle}.light-mode .el-picker-panel [slot=sidebar],.light-mode .el-picker-panel__sidebar{position:absolute;top:0;bottom:0;width:110px;border-right:1px solid #e4e4e4;-webkit-box-sizing:border-box;box-sizing:border-box;padding-top:6px;background-color:#fff;overflow:auto}.light-mode .el-picker-panel [slot=sidebar]+.el-picker-panel__body,.light-mode .el-picker-panel__sidebar+.el-picker-panel__body{margin-left:110px}.light-mode .el-time-spinner.has-seconds .el-time-spinner__wrapper{width:33.3%}.light-mode .el-time-spinner__wrapper{max-height:190px;overflow:auto;display:inline-block;width:50%;vertical-align:top;position:relative}.light-mode .el-time-spinner__wrapper .el-scrollbar__wrap:not(.el-scrollbar__wrap--hidden-default){padding-bottom:15px}.light-mode .el-time-spinner__input.el-input .el-input__inner,.light-mode .el-time-spinner__list{padding:0;text-align:center}.light-mode .el-time-spinner__wrapper.is-arrow{-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;overflow:hidden}.light-mode .el-time-spinner__wrapper.is-arrow .el-time-spinner__list{-webkit-transform:translateY(-32px);transform:translateY(-32px)}.light-mode .el-time-spinner__wrapper.is-arrow .el-time-spinner__item:hover:not(.disabled):not(.active){background:#fff;cursor:default}.light-mode .el-time-spinner__arrow{font-size:12px;color:#909399;position:absolute;left:0;width:100%;z-index:1;text-align:center;height:30px;line-height:30px;cursor:pointer}.light-mode .el-time-spinner__arrow:hover{color:#282c34}.light-mode .el-time-spinner__arrow.el-icon-arrow-up{top:10px}.light-mode .el-time-spinner__arrow.el-icon-arrow-down{bottom:10px}.light-mode .el-time-spinner__input.el-input{width:70%}.light-mode .el-time-spinner__list{margin:0;list-style:none}.light-mode .el-time-spinner__list::after,.light-mode .el-time-spinner__list::before{content:'';display:block;width:100%;height:80px}.light-mode .el-time-spinner__item{height:32px;line-height:32px;font-size:12px;color:#606266}.light-mode .el-time-spinner__item:hover:not(.disabled):not(.active){background:#f5f7fa;cursor:pointer}.light-mode .el-time-spinner__item.active:not(.disabled){color:#2c3e50;font-weight:700}.light-mode .el-time-spinner__item.disabled{color:#c0c4cc;cursor:not-allowed}.light-mode .el-time-panel{margin:5px 0;border:1px solid #e4e7ed;background-color:#fff;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);border-radius:2px;position:absolute;width:180px;left:0;z-index:1000;-moz-user-select:none;user-select:none;-webkit-box-sizing:content-box;box-sizing:content-box}.light-mode .el-time-panel__content{font-size:0;position:relative;overflow:hidden}.light-mode .el-time-panel__content::after,.light-mode .el-time-panel__content::before{content:\"\";top:50%;position:absolute;margin-top:-15px;height:32px;z-index:-1;left:0;right:0;-webkit-box-sizing:border-box;box-sizing:border-box;padding-top:6px;text-align:left;border-top:1px solid #e4e7ed;border-bottom:1px solid #e4e7ed}.light-mode .el-time-panel__content::after{left:50%;margin-left:12%;margin-right:12%}.light-mode .el-time-panel__content::before{padding-left:50%;margin-right:12%;margin-left:12%}.light-mode .el-time-panel__content.has-seconds::after{left:calc(100% / 3 * 2)}.light-mode .el-time-panel__content.has-seconds::before{padding-left:calc(100% / 3)}.light-mode .el-time-panel__footer{border-top:1px solid #e4e4e4;padding:4px;height:36px;line-height:25px;text-align:right;-webkit-box-sizing:border-box;box-sizing:border-box}.light-mode .el-time-panel__btn{border:none;line-height:28px;padding:0 5px;margin:0 5px;cursor:pointer;background-color:transparent;outline:0;font-size:12px;color:#2c3e50}.light-mode .el-time-panel__btn.confirm{font-weight:800;color:#282c34}.light-mode .el-time-range-picker{width:354px;overflow:visible}.light-mode .el-time-range-picker__content{position:relative;text-align:center;padding:10px}.light-mode .el-time-range-picker__cell{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:4px 7px 7px;width:50%;display:inline-block}.light-mode .el-time-range-picker__header{margin-bottom:5px;text-align:center;font-size:14px}.light-mode .el-time-range-picker__body{border-radius:2px;border:1px solid #e4e7ed}.light-mode .el-popover{position:absolute;background:#fff;min-width:150px;border:1px solid #ebeef5;padding:12px;z-index:2000;color:#606266;line-height:1.4;text-align:justify;font-size:14px;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);word-break:break-all}.light-mode .el-popover--plain{padding:18px 20px}.light-mode .el-popover__title{color:#2c3e50;font-size:16px;line-height:1;margin-bottom:12px}.light-mode .v-modal-enter{-webkit-animation:v-modal-in .2s ease;animation:v-modal-in .2s ease}.light-mode .v-modal-leave{-webkit-animation:v-modal-out .2s ease forwards;animation:v-modal-out .2s ease forwards}@keyframes v-modal-in{0%{opacity:0}}@keyframes v-modal-out{100%{opacity:0}}.light-mode .v-modal{position:fixed;left:0;top:0;width:100%;height:100%;opacity:.5;background:#000}.light-mode .el-popup-parent--hidden{overflow:hidden}.light-mode .el-message-box{display:inline-block;width:420px;padding-bottom:10px;vertical-align:middle;background-color:#fff;border-radius:4px;border:1px solid #ebeef5;font-size:18px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);text-align:left;overflow:hidden;-webkit-backface-visibility:hidden;backface-visibility:hidden}.light-mode .el-message-box__wrapper{position:fixed;top:0;bottom:0;left:0;right:0;text-align:center}.light-mode .el-message-box__wrapper::after{content:\"\";display:inline-block;height:100%;width:0;vertical-align:middle}.light-mode .el-message-box__header{position:relative;padding:15px 15px 10px}.light-mode .el-message-box__title{padding-left:0;margin-bottom:0;font-size:18px;line-height:1;color:#2c3e50}.light-mode .el-message-box__headerbtn{position:absolute;top:15px;right:15px;padding:0;border:none;outline:0;background:0 0;font-size:16px;cursor:pointer}.light-mode .el-form-item.is-error .el-input__inner,.light-mode .el-form-item.is-error .el-input__inner:focus,.light-mode .el-form-item.is-error .el-textarea__inner,.light-mode .el-form-item.is-error .el-textarea__inner:focus,.light-mode .el-message-box__input input.invalid,.light-mode .el-message-box__input input.invalid:focus{border-color:#c00}.light-mode .el-message-box__headerbtn .el-message-box__close{color:#909399}.light-mode .el-message-box__headerbtn:focus .el-message-box__close,.light-mode .el-message-box__headerbtn:hover .el-message-box__close{color:#282c34}.light-mode .el-message-box__content{position:relative;padding:10px 15px;color:#606266;font-size:14px}.light-mode .el-message-box__input{padding-top:15px}.light-mode .el-message-box__status{position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);font-size:24px!important}.light-mode .el-message-box__status::before{padding-left:1px}.light-mode .el-message-box__status+.el-message-box__message{padding-left:36px;padding-right:12px}.light-mode .el-message-box__status.el-icon-success{color:#67c23a}.light-mode .el-message-box__status.el-icon-info{color:#909399}.light-mode .el-message-box__status.el-icon-warning{color:#e7c000}.light-mode .el-message-box__status.el-icon-error{color:#c00}.light-mode .el-message-box__message{margin:0}.light-mode .el-message-box__message p{margin:0;line-height:24px}.light-mode .el-message-box__errormsg{color:#c00;font-size:12px;min-height:18px;margin-top:2px}.light-mode .el-message-box__btns{padding:5px 15px 0;text-align:right}.light-mode .el-message-box__btns button:nth-child(2){margin-left:10px}.light-mode .el-message-box__btns-reverse{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.light-mode .el-container,.light-mode .el-container.is-vertical,.light-mode .el-drawer,.light-mode .el-link,.light-mode .el-steps--vertical{-webkit-box-direction:normal}.light-mode .el-message-box--center{padding-bottom:30px}.light-mode .el-message-box--center .el-message-box__header{padding-top:30px}.light-mode .el-message-box--center .el-message-box__title{position:relative;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}.light-mode .el-message-box--center .el-message-box__status{position:relative;top:auto;padding-right:5px;text-align:center;-webkit-transform:translateY(-1px);transform:translateY(-1px)}.light-mode .el-message-box--center .el-message-box__message{margin-left:0}.light-mode .el-message-box--center .el-message-box__btns,.light-mode .el-message-box--center .el-message-box__content{text-align:center}.light-mode .el-message-box--center .el-message-box__content{padding-left:27px;padding-right:27px}.light-mode .msgbox-fade-enter-active{-webkit-animation:msgbox-fade-in .3s;animation:msgbox-fade-in .3s}.light-mode .msgbox-fade-leave-active{-webkit-animation:msgbox-fade-out .3s;animation:msgbox-fade-out .3s}@-webkit-keyframes msgbox-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 msgbox-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 msgbox-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 msgbox-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}}.light-mode .el-breadcrumb{font-size:14px;line-height:1}.light-mode .el-breadcrumb::after,.light-mode .el-breadcrumb::before{display:table;content:\"\"}.light-mode .el-breadcrumb::after{clear:both}.light-mode .el-breadcrumb__separator{margin:0 9px;font-weight:700;color:#c0c4cc}.light-mode .el-breadcrumb__separator[class*=icon]{margin:0 6px;font-weight:400}.light-mode .el-breadcrumb__item{float:left}.light-mode .el-breadcrumb__inner{color:#606266}.light-mode .el-breadcrumb__inner a,.light-mode .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:#2c3e50}.light-mode .el-breadcrumb__inner a:hover,.light-mode .el-breadcrumb__inner.is-link:hover{color:#282c34;cursor:pointer}.light-mode .el-breadcrumb__item:last-child .el-breadcrumb__inner,.light-mode .el-breadcrumb__item:last-child .el-breadcrumb__inner a,.light-mode .el-breadcrumb__item:last-child .el-breadcrumb__inner a:hover,.light-mode .el-breadcrumb__item:last-child .el-breadcrumb__inner:hover{font-weight:400;color:#606266;cursor:text}.light-mode .el-breadcrumb__item:last-child .el-breadcrumb__separator{display:none}.light-mode .el-form--label-left .el-form-item__label{text-align:left}.light-mode .el-form--label-top .el-form-item__label{float:none;display:inline-block;text-align:left;padding:0 0 10px}.light-mode .el-form--inline .el-form-item{display:inline-block;margin-right:10px;vertical-align:top}.light-mode .el-form--inline .el-form-item__label{float:none;display:inline-block}.light-mode .el-form--inline .el-form-item__content{display:inline-block;vertical-align:top}.light-mode .el-form--inline.el-form--label-top .el-form-item__content{display:block}.light-mode .el-form-item{margin-bottom:22px}.light-mode .el-form-item::after,.light-mode .el-form-item::before{display:table;content:\"\"}.light-mode .el-form-item::after{clear:both}.light-mode .el-form-item .el-form-item{margin-bottom:0}.light-mode .el-form-item--mini.el-form-item,.light-mode .el-form-item--small.el-form-item{margin-bottom:18px}.light-mode .el-form-item .el-input__validateIcon{display:none}.light-mode .el-form-item--medium .el-form-item__content,.light-mode .el-form-item--medium .el-form-item__label{line-height:36px}.light-mode .el-form-item--small .el-form-item__content,.light-mode .el-form-item--small .el-form-item__label{line-height:32px}.light-mode .el-form-item--small .el-form-item__error{padding-top:2px}.light-mode .el-form-item--mini .el-form-item__content,.light-mode .el-form-item--mini .el-form-item__label{line-height:28px}.light-mode .el-form-item--mini .el-form-item__error{padding-top:1px}.light-mode .el-form-item__label-wrap{float:left}.light-mode .el-form-item__label-wrap .el-form-item__label{display:inline-block;float:none}.light-mode .el-form-item__label{text-align:right;vertical-align:middle;float:left;font-size:14px;color:#606266;line-height:40px;padding:0 12px 0 0;-webkit-box-sizing:border-box;box-sizing:border-box}.light-mode .el-form-item__content{line-height:40px;position:relative;font-size:14px}.light-mode .el-form-item__content::after,.light-mode .el-form-item__content::before{display:table;content:\"\"}.light-mode .el-form-item__content::after{clear:both}.light-mode .el-form-item__content .el-input-group{vertical-align:top}.light-mode .el-form-item__error{color:#c00;font-size:12px;line-height:1;padding-top:4px;position:absolute;top:100%;left:0}.light-mode .el-form-item__error--inline{position:relative;top:auto;left:auto;display:inline-block;margin-left:10px}.light-mode .el-form-item.is-required:not(.is-no-asterisk) .el-form-item__label-wrap>.el-form-item__label:before,.light-mode .el-form-item.is-required:not(.is-no-asterisk)>.el-form-item__label:before{content:'*';color:#c00;margin-right:4px}.light-mode .el-form-item.is-error .el-input-group__append .el-input__inner,.light-mode .el-form-item.is-error .el-input-group__prepend .el-input__inner{border-color:transparent}.light-mode .el-form-item.is-error .el-input__validateIcon{color:#c00}.light-mode .el-form-item--feedback .el-input__validateIcon{display:inline-block}.light-mode .el-tabs__header{padding:0;position:relative;margin:0 0 15px}.light-mode .el-tabs__active-bar{position:absolute;bottom:0;left:0;height:2px;background-color:#282c34;z-index:1;-webkit-transition:-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:transform .3s cubic-bezier(.645,.045,.355,1);transition:transform .3s cubic-bezier(.645,.045,.355,1),-webkit-transform .3s cubic-bezier(.645,.045,.355,1);list-style:none}.light-mode .el-tabs__new-tab{float:right;border:1px solid #d3dce6;height:18px;width:18px;line-height:18px;margin:12px 0 9px 10px;border-radius:3px;text-align:center;font-size:12px;color:#d3dce6;cursor:pointer;-webkit-transition:all .15s;transition:all .15s}.light-mode .el-collapse-item__arrow,.light-mode .el-tabs__nav{-webkit-transition:-webkit-transform .3s}.light-mode .el-tabs__new-tab .el-icon-plus{-webkit-transform:scale(.8,.8);transform:scale(.8,.8)}.light-mode .el-tabs__new-tab:hover{color:#282c34}.light-mode .el-tabs__nav-wrap{overflow:hidden;margin-bottom:-1px;position:relative}.light-mode .el-tabs__nav-wrap::after{content:\"\";position:absolute;left:0;bottom:0;width:100%;height:2px;background-color:#e4e7ed;z-index:1}.light-mode .el-tabs--border-card>.el-tabs__header .el-tabs__nav-wrap::after,.light-mode .el-tabs--card>.el-tabs__header .el-tabs__nav-wrap::after{content:none}.light-mode .el-tabs__nav-wrap.is-scrollable{padding:0 20px;-webkit-box-sizing:border-box;box-sizing:border-box}.light-mode .el-tabs__nav-scroll{overflow:hidden}.light-mode .el-tabs__nav-next,.light-mode .el-tabs__nav-prev{position:absolute;cursor:pointer;line-height:44px;font-size:12px;color:#909399}.light-mode .el-tabs__nav-next{right:0}.light-mode .el-tabs__nav-prev{left:0}.light-mode .el-tabs__nav{white-space:nowrap;position:relative;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;float:left;z-index:2}.light-mode .el-tabs__nav.is-stretch{min-width:100%;display:-webkit-box;display:-ms-flexbox;display:flex}.light-mode .el-tabs__nav.is-stretch>*{-webkit-box-flex:1;-ms-flex:1;flex:1;text-align:center}.light-mode .el-tabs__item{padding:0 20px;height:40px;-webkit-box-sizing:border-box;box-sizing:border-box;line-height:40px;display:inline-block;list-style:none;font-size:14px;font-weight:500;color:#2c3e50;position:relative}.light-mode .el-tabs__item:focus,.light-mode .el-tabs__item:focus:active{outline:0}.light-mode .el-tabs__item:focus.is-active.is-focus:not(:active){-webkit-box-shadow:0 0 2px 2px #282c34 inset;box-shadow:0 0 2px 2px #282c34 inset;border-radius:3px}.light-mode .el-tabs__item .el-icon-close{border-radius:50%;text-align:center;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);margin-left:5px}.light-mode .el-tabs__item .el-icon-close:before{-webkit-transform:scale(.9);transform:scale(.9);display:inline-block}.light-mode .el-tabs__item .el-icon-close:hover{background-color:#c0c4cc;color:#fff}.light-mode .el-tabs__item.is-active{color:#282c34}.light-mode .el-tabs__item:hover{color:#282c34;cursor:pointer}.light-mode .el-tabs__item.is-disabled{color:#c0c4cc;cursor:default}.light-mode .el-tabs__content{overflow:hidden;position:relative}.light-mode .el-tabs--card>.el-tabs__header{border-bottom:1px solid #e4e7ed}.light-mode .el-tabs--card>.el-tabs__header .el-tabs__nav{border:1px solid #e4e7ed;border-bottom:none;border-radius:4px 4px 0 0;-webkit-box-sizing:border-box;box-sizing:border-box}.light-mode .el-tabs--card>.el-tabs__header .el-tabs__active-bar{display:none}.light-mode .el-tabs--card>.el-tabs__header .el-tabs__item .el-icon-close{position:relative;font-size:12px;width:0;height:14px;vertical-align:middle;line-height:15px;overflow:hidden;top:-1px;right:-2px;-webkit-transform-origin:100% 50%;transform-origin:100% 50%}.light-mode .el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable .el-icon-close,.light-mode .el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover .el-icon-close{width:14px}.light-mode .el-tabs--card>.el-tabs__header .el-tabs__item{border-bottom:1px solid transparent;border-left:1px solid #e4e7ed;-webkit-transition:color .3s cubic-bezier(.645,.045,.355,1),padding .3s cubic-bezier(.645,.045,.355,1);transition:color .3s cubic-bezier(.645,.045,.355,1),padding .3s cubic-bezier(.645,.045,.355,1)}.light-mode .el-tabs--card>.el-tabs__header .el-tabs__item:first-child{border-left:none}.light-mode .el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover{padding-left:13px;padding-right:13px}.light-mode .el-tabs--card>.el-tabs__header .el-tabs__item.is-active{border-bottom-color:#fff}.light-mode .el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable{padding-left:20px;padding-right:20px}.light-mode .el-tabs--border-card{background:#fff;border:1px solid #dcdfe6;-webkit-box-shadow:0 2px 4px 0 rgba(0,0,0,.12),0 0 6px 0 rgba(0,0,0,.04);box-shadow:0 2px 4px 0 rgba(0,0,0,.12),0 0 6px 0 rgba(0,0,0,.04)}.light-mode .el-tabs--border-card>.el-tabs__content{padding:15px}.light-mode .el-tabs--border-card>.el-tabs__header{background-color:#f5f7fa;border-bottom:1px solid #e4e7ed;margin:0}.light-mode .el-tabs--border-card>.el-tabs__header .el-tabs__item{-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);border:1px solid transparent;margin-top:-1px;color:#909399}.light-mode .el-tabs--border-card>.el-tabs__header .el-tabs__item+.el-tabs__item,.light-mode .el-tabs--border-card>.el-tabs__header .el-tabs__item:first-child{margin-left:-1px}.light-mode .el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active{color:#282c34;background-color:#fff;border-right-color:#dcdfe6;border-left-color:#dcdfe6}.light-mode .el-tabs--border-card>.el-tabs__header .el-tabs__item:not(.is-disabled):hover{color:#282c34}.light-mode .el-tabs--border-card>.el-tabs__header .el-tabs__item.is-disabled{color:#c0c4cc}.light-mode .el-tabs--border-card>.el-tabs__header .is-scrollable .el-tabs__item:first-child{margin-left:0}.light-mode .el-tabs--bottom .el-tabs__item.is-bottom:nth-child(2),.light-mode .el-tabs--bottom .el-tabs__item.is-top:nth-child(2),.light-mode .el-tabs--top .el-tabs__item.is-bottom:nth-child(2),.light-mode .el-tabs--top .el-tabs__item.is-top:nth-child(2){padding-left:0}.light-mode .el-tabs--bottom .el-tabs__item.is-bottom:last-child,.light-mode .el-tabs--bottom .el-tabs__item.is-top:last-child,.light-mode .el-tabs--top .el-tabs__item.is-bottom:last-child,.light-mode .el-tabs--top .el-tabs__item.is-top:last-child{padding-right:0}.light-mode .el-tabs--bottom .el-tabs--left>.el-tabs__header .el-tabs__item:nth-child(2),.light-mode .el-tabs--bottom .el-tabs--right>.el-tabs__header .el-tabs__item:nth-child(2),.light-mode .el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.light-mode .el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2),.light-mode .el-tabs--top .el-tabs--left>.el-tabs__header .el-tabs__item:nth-child(2),.light-mode .el-tabs--top .el-tabs--right>.el-tabs__header .el-tabs__item:nth-child(2),.light-mode .el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.light-mode .el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2){padding-left:20px}.light-mode .el-tabs--bottom .el-tabs--left>.el-tabs__header .el-tabs__item:last-child,.light-mode .el-tabs--bottom .el-tabs--right>.el-tabs__header .el-tabs__item:last-child,.light-mode .el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.light-mode .el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:last-child,.light-mode .el-tabs--top .el-tabs--left>.el-tabs__header .el-tabs__item:last-child,.light-mode .el-tabs--top .el-tabs--right>.el-tabs__header .el-tabs__item:last-child,.light-mode .el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.light-mode .el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:last-child{padding-right:20px}.light-mode .el-tabs--bottom .el-tabs__header.is-bottom{margin-bottom:0;margin-top:10px}.light-mode .el-tabs--bottom.el-tabs--border-card .el-tabs__header.is-bottom{border-bottom:0;border-top:1px solid #dcdfe6}.light-mode .el-tabs--bottom.el-tabs--border-card .el-tabs__nav-wrap.is-bottom{margin-top:-1px;margin-bottom:0}.light-mode .el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom:not(.is-active){border:1px solid transparent}.light-mode .el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom{margin:0 -1px -1px}.light-mode .el-tabs--left,.light-mode .el-tabs--right{overflow:hidden}.light-mode .el-tabs--left .el-tabs__header.is-left,.light-mode .el-tabs--left .el-tabs__header.is-right,.light-mode .el-tabs--left .el-tabs__nav-scroll,.light-mode .el-tabs--left .el-tabs__nav-wrap.is-left,.light-mode .el-tabs--left .el-tabs__nav-wrap.is-right,.light-mode .el-tabs--right .el-tabs__header.is-left,.light-mode .el-tabs--right .el-tabs__header.is-right,.light-mode .el-tabs--right .el-tabs__nav-scroll,.light-mode .el-tabs--right .el-tabs__nav-wrap.is-left,.light-mode .el-tabs--right .el-tabs__nav-wrap.is-right{height:100%}.light-mode .el-tabs--left .el-tabs__active-bar.is-left,.light-mode .el-tabs--left .el-tabs__active-bar.is-right,.light-mode .el-tabs--right .el-tabs__active-bar.is-left,.light-mode .el-tabs--right .el-tabs__active-bar.is-right{top:0;bottom:auto;width:2px;height:auto}.light-mode .el-tabs--left .el-tabs__nav-wrap.is-left,.light-mode .el-tabs--left .el-tabs__nav-wrap.is-right,.light-mode .el-tabs--right .el-tabs__nav-wrap.is-left,.light-mode .el-tabs--right .el-tabs__nav-wrap.is-right{margin-bottom:0}.light-mode .el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.light-mode .el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.light-mode .el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.light-mode .el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.light-mode .el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.light-mode .el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.light-mode .el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.light-mode .el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{height:30px;line-height:30px;width:100%;text-align:center;cursor:pointer}.light-mode .el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.light-mode .el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.light-mode .el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.light-mode .el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i,.light-mode .el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.light-mode .el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.light-mode .el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.light-mode .el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i{-webkit-transform:rotateZ(90deg);transform:rotateZ(90deg)}.light-mode .el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.light-mode .el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.light-mode .el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.light-mode .el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{left:auto;top:0}.light-mode .el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.light-mode .el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.light-mode .el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.light-mode .el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next{right:auto;bottom:0}.light-mode .el-tabs--left .el-tabs__active-bar.is-left,.light-mode .el-tabs--left .el-tabs__nav-wrap.is-left::after{right:0;left:auto}.light-mode .el-tabs--left .el-tabs__nav-wrap.is-left.is-scrollable,.light-mode .el-tabs--left .el-tabs__nav-wrap.is-right.is-scrollable,.light-mode .el-tabs--right .el-tabs__nav-wrap.is-left.is-scrollable,.light-mode .el-tabs--right .el-tabs__nav-wrap.is-right.is-scrollable{padding:30px 0}.light-mode .el-tabs--left .el-tabs__nav-wrap.is-left::after,.light-mode .el-tabs--left .el-tabs__nav-wrap.is-right::after,.light-mode .el-tabs--right .el-tabs__nav-wrap.is-left::after,.light-mode .el-tabs--right .el-tabs__nav-wrap.is-right::after{height:100%;width:2px;bottom:auto;top:0}.light-mode .el-tabs--left .el-tabs__nav.is-left,.light-mode .el-tabs--left .el-tabs__nav.is-right,.light-mode .el-tabs--right .el-tabs__nav.is-left,.light-mode .el-tabs--right .el-tabs__nav.is-right{float:none}.light-mode .el-tabs--left .el-tabs__item.is-left,.light-mode .el-tabs--left .el-tabs__item.is-right,.light-mode .el-tabs--right .el-tabs__item.is-left,.light-mode .el-tabs--right .el-tabs__item.is-right{display:block}.light-mode .el-tabs--left.el-tabs--card .el-tabs__active-bar.is-left,.light-mode .el-tabs--right.el-tabs--card .el-tabs__active-bar.is-right{display:none}.light-mode .el-tabs--left .el-tabs__header.is-left{float:left;margin-bottom:0;margin-right:10px}.light-mode .el-tabs--left .el-tabs__nav-wrap.is-left{margin-right:-1px}.light-mode .el-tabs--left .el-tabs__item.is-left{text-align:right}.light-mode .el-tabs--left.el-tabs--card .el-tabs__item.is-left{border-left:none;border-right:1px solid #e4e7ed;border-bottom:none;border-top:1px solid #e4e7ed;text-align:left}.light-mode .el-tabs--left.el-tabs--card .el-tabs__item.is-left:first-child{border-right:1px solid #e4e7ed;border-top:none}.light-mode .el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active{border:1px solid #e4e7ed;border-right-color:#fff;border-left:none;border-bottom:none}.light-mode .el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:first-child{border-top:none}.light-mode .el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:last-child{border-bottom:none}.light-mode .el-tabs--left.el-tabs--card .el-tabs__nav{border-radius:4px 0 0 4px;border-bottom:1px solid #e4e7ed;border-right:none}.light-mode .el-tabs--left.el-tabs--card .el-tabs__new-tab{float:none}.light-mode .el-tabs--left.el-tabs--border-card .el-tabs__header.is-left{border-right:1px solid #dfe4ed}.light-mode .el-tabs--left.el-tabs--border-card .el-tabs__item.is-left{border:1px solid transparent;margin:-1px 0 -1px -1px}.light-mode .el-tabs--left.el-tabs--border-card .el-tabs__item.is-left.is-active{border-color:#d1dbe5 transparent}.light-mode .el-tabs--right .el-tabs__header.is-right{float:right;margin-bottom:0;margin-left:10px}.light-mode .el-tabs--right .el-tabs__nav-wrap.is-right{margin-left:-1px}.light-mode .el-tabs--right .el-tabs__nav-wrap.is-right::after{left:0;right:auto}.light-mode .el-tabs--right .el-tabs__active-bar.is-right{left:0}.light-mode .el-tabs--right.el-tabs--card .el-tabs__item.is-right{border-bottom:none;border-top:1px solid #e4e7ed}.light-mode .el-tabs--right.el-tabs--card .el-tabs__item.is-right:first-child{border-left:1px solid #e4e7ed;border-top:none}.light-mode .el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active{border:1px solid #e4e7ed;border-left-color:#fff;border-right:none;border-bottom:none}.light-mode .el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:first-child{border-top:none}.light-mode .el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:last-child{border-bottom:none}.light-mode .el-tabs--right.el-tabs--card .el-tabs__nav{border-radius:0 4px 4px 0;border-bottom:1px solid #e4e7ed;border-left:none}.light-mode .el-tabs--right.el-tabs--border-card .el-tabs__header.is-right{border-left:1px solid #dfe4ed}.light-mode .el-tabs--right.el-tabs--border-card .el-tabs__item.is-right{border:1px solid transparent;margin:-1px -1px -1px 0}.light-mode .el-tabs--right.el-tabs--border-card .el-tabs__item.is-right.is-active{border-color:#d1dbe5 transparent}.light-mode .slideInLeft-transition,.light-mode .slideInRight-transition{display:inline-block}.light-mode .slideInRight-enter{-webkit-animation:slideInRight-enter .3s;animation:slideInRight-enter .3s}.light-mode .slideInRight-leave{position:absolute;left:0;right:0;-webkit-animation:slideInRight-leave .3s;animation:slideInRight-leave .3s}.light-mode .slideInLeft-enter{-webkit-animation:slideInLeft-enter .3s;animation:slideInLeft-enter .3s}.light-mode .slideInLeft-leave{position:absolute;left:0;right:0;-webkit-animation:slideInLeft-leave .3s;animation:slideInLeft-leave .3s}@-webkit-keyframes slideInRight-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes slideInRight-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes slideInRight-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}100%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}}@keyframes slideInRight-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}100%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}}@-webkit-keyframes slideInLeft-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes slideInLeft-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes slideInLeft-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}100%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%);opacity:0}}@keyframes slideInLeft-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}100%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%);opacity:0}}.light-mode .el-tree{position:relative;cursor:default;background:#fff;color:#606266}.light-mode .el-tree__empty-block{position:relative;min-height:60px;text-align:center;width:100%;height:100%}.light-mode .el-tree__empty-text{position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);color:#909399}.light-mode .el-tree__drop-indicator{position:absolute;left:0;right:0;height:1px;background-color:#282c34}.light-mode .el-tree-node{white-space:nowrap;outline:0}.light-mode .el-tree-node:focus>.el-tree-node__content{background-color:#f5f7fa}.light-mode .el-tree-node.is-drop-inner>.el-tree-node__content .el-tree-node__label{background-color:#282c34;color:#fff}.light-mode .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}.light-mode .el-tree-node__content>.el-tree-node__expand-icon{padding:6px}.light-mode .el-tree-node__content>label.el-checkbox{margin-right:8px}.light-mode .el-tree-node__content:hover{background-color:#f5f7fa}.light-mode .el-tree.is-dragging .el-tree-node__content{cursor:move}.light-mode .el-tree.is-dragging.is-drop-not-allow .el-tree-node__content{cursor:not-allowed}.light-mode .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}.light-mode .el-tree-node__expand-icon.expanded{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.light-mode .el-tree-node__expand-icon.is-leaf{color:transparent;cursor:default}.light-mode .el-tree-node__label{font-size:14px}.light-mode .el-tree-node__loading-icon{margin-right:8px;font-size:14px;color:#c0c4cc}.light-mode .el-tree-node>.el-tree-node__children{overflow:hidden;background-color:transparent}.light-mode .el-tree-node.is-expanded>.el-tree-node__children{display:block}.light-mode .el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content{background-color:#eeeeef}.light-mode .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}.light-mode .el-alert.is-light .el-alert__closebtn{color:#c0c4cc}.light-mode .el-alert.is-dark .el-alert__closebtn,.light-mode .el-alert.is-dark .el-alert__description{color:#fff}.light-mode .el-alert.is-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.light-mode .el-alert--success.is-light{background-color:#f0f9eb;color:#67c23a}.light-mode .el-alert--success.is-light .el-alert__description{color:#67c23a}.light-mode .el-alert--success.is-dark{background-color:#67c23a;color:#fff}.light-mode .el-alert--info.is-light{background-color:#f4f4f5;color:#909399}.light-mode .el-alert--info.is-dark{background-color:#909399;color:#fff}.light-mode .el-alert--info .el-alert__description{color:#909399}.light-mode .el-alert--warning.is-light{background-color:#fdf9e6;color:#e7c000}.light-mode .el-alert--warning.is-light .el-alert__description{color:#e7c000}.light-mode .el-alert--warning.is-dark{background-color:#e7c000;color:#fff}.light-mode .el-alert--error.is-light{background-color:#fae6e6;color:#c00}.light-mode .el-alert--error.is-light .el-alert__description{color:#c00}.light-mode .el-alert--error.is-dark{background-color:#c00;color:#fff}.light-mode .el-alert__content{display:table-cell;padding:0 8px}.light-mode .el-alert__icon{font-size:16px;width:16px}.light-mode .el-alert__icon.is-big{font-size:28px;width:28px}.light-mode .el-alert__title{font-size:13px;line-height:18px}.light-mode .el-alert__title.is-bold{font-weight:700}.light-mode .el-alert .el-alert__description{font-size:12px;margin:5px 0 0}.light-mode .el-alert__closebtn{font-size:12px;opacity:1;position:absolute;top:12px;right:15px;cursor:pointer}.light-mode .el-alert-fade-enter,.light-mode .el-alert-fade-leave-active,.light-mode .el-loading-fade-enter,.light-mode .el-loading-fade-leave-active,.light-mode .el-notification-fade-leave-active{opacity:0}.light-mode .el-alert__closebtn.is-customed{font-style:normal;font-size:13px;top:9px}.light-mode .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}.light-mode .el-notification.right{right:16px}.light-mode .el-notification.left{left:16px}.light-mode .el-notification__group{margin-left:13px;margin-right:8px}.light-mode .el-notification__title{font-weight:700;font-size:16px;color:#2c3e50;margin:0}.light-mode .el-notification__content{font-size:14px;line-height:21px;margin:6px 0 0;color:#606266;text-align:justify}.light-mode .el-notification__content p{margin:0}.light-mode .el-notification__icon{height:24px;width:24px;font-size:24px}.light-mode .el-notification__closeBtn{position:absolute;top:18px;right:15px;cursor:pointer;color:#909399;font-size:16px}.light-mode .el-notification__closeBtn:hover{color:#606266}.light-mode .el-notification .el-icon-success{color:#67c23a}.light-mode .el-notification .el-icon-error{color:#c00}.light-mode .el-notification .el-icon-info{color:#909399}.light-mode .el-notification .el-icon-warning{color:#e7c000}.light-mode .el-notification-fade-enter.right{right:0;-webkit-transform:translateX(100%);transform:translateX(100%)}.light-mode .el-notification-fade-enter.left{left:0;-webkit-transform:translateX(-100%);transform:translateX(-100%)}.light-mode .el-input-number{position:relative;display:inline-block;width:180px;line-height:38px}.light-mode .el-input-number .el-input{display:block}.light-mode .el-input-number .el-input__inner{-webkit-appearance:none;padding-left:50px;padding-right:50px;text-align:center}.light-mode .el-input-number__decrease,.light-mode .el-input-number__increase{position:absolute;z-index:1;top:1px;width:40px;height:auto;text-align:center;background:#f5f7fa;color:#606266;cursor:pointer;font-size:13px}.light-mode .el-input-number__decrease:hover,.light-mode .el-input-number__increase:hover{color:#282c34}.light-mode .el-input-number__decrease:hover:not(.is-disabled)~.el-input .el-input__inner:not(.is-disabled),.light-mode .el-input-number__increase:hover:not(.is-disabled)~.el-input .el-input__inner:not(.is-disabled){border-color:#282c34}.light-mode .el-input-number__decrease.is-disabled,.light-mode .el-input-number__increase.is-disabled{color:#c0c4cc;cursor:not-allowed}.light-mode .el-input-number__increase{right:1px;border-radius:0 4px 4px 0;border-left:1px solid #dcdfe6}.light-mode .el-input-number__decrease{left:1px;border-radius:4px 0 0 4px;border-right:1px solid #dcdfe6}.light-mode .el-input-number.is-disabled .el-input-number__decrease,.light-mode .el-input-number.is-disabled .el-input-number__increase{border-color:#e4e7ed;color:#e4e7ed}.light-mode .el-input-number.is-disabled .el-input-number__decrease:hover,.light-mode .el-input-number.is-disabled .el-input-number__increase:hover{color:#e4e7ed;cursor:not-allowed}.light-mode .el-input-number--medium{width:200px;line-height:34px}.light-mode .el-input-number--medium .el-input-number__decrease,.light-mode .el-input-number--medium .el-input-number__increase{width:36px;font-size:14px}.light-mode .el-input-number--medium .el-input__inner{padding-left:43px;padding-right:43px}.light-mode .el-input-number--small{width:130px;line-height:30px}.light-mode .el-input-number--small .el-input-number__decrease,.light-mode .el-input-number--small .el-input-number__increase{width:32px;font-size:13px}.light-mode .el-input-number--small .el-input-number__decrease [class*=el-icon],.light-mode .el-input-number--small .el-input-number__increase [class*=el-icon]{-webkit-transform:scale(.9);transform:scale(.9)}.light-mode .el-input-number--small .el-input__inner{padding-left:39px;padding-right:39px}.light-mode .el-input-number--mini{width:130px;line-height:26px}.light-mode .el-input-number--mini .el-input-number__decrease,.light-mode .el-input-number--mini .el-input-number__increase{width:28px;font-size:12px}.light-mode .el-input-number--mini .el-input-number__decrease [class*=el-icon],.light-mode .el-input-number--mini .el-input-number__increase [class*=el-icon]{-webkit-transform:scale(.8);transform:scale(.8)}.light-mode .el-input-number--mini .el-input__inner{padding-left:35px;padding-right:35px}.light-mode .el-input-number.is-without-controls .el-input__inner{padding-left:15px;padding-right:15px}.light-mode .el-input-number.is-controls-right .el-input__inner{padding-left:15px;padding-right:50px}.light-mode .el-input-number.is-controls-right .el-input-number__decrease,.light-mode .el-input-number.is-controls-right .el-input-number__increase{height:auto;line-height:19px}.light-mode .el-input-number.is-controls-right .el-input-number__decrease [class*=el-icon],.light-mode .el-input-number.is-controls-right .el-input-number__increase [class*=el-icon]{-webkit-transform:scale(.8);transform:scale(.8)}.light-mode .el-input-number.is-controls-right .el-input-number__increase{border-radius:0 4px 0 0;border-bottom:1px solid #dcdfe6}.light-mode .el-input-number.is-controls-right .el-input-number__decrease{right:1px;bottom:1px;top:auto;left:auto;border-right:none;border-left:1px solid #dcdfe6;border-radius:0 0 4px}.light-mode .el-input-number.is-controls-right[class*=medium] [class*=decrease],.light-mode .el-input-number.is-controls-right[class*=medium] [class*=increase]{line-height:17px}.light-mode .el-input-number.is-controls-right[class*=small] [class*=decrease],.light-mode .el-input-number.is-controls-right[class*=small] [class*=increase]{line-height:15px}.light-mode .el-input-number.is-controls-right[class*=mini] [class*=decrease],.light-mode .el-input-number.is-controls-right[class*=mini] [class*=increase]{line-height:13px}.light-mode .el-tooltip__popper{position:absolute;border-radius:4px;padding:10px;z-index:2000;font-size:12px;line-height:1.2;min-width:10px;word-wrap:break-word}.light-mode .el-tooltip__popper .popper__arrow,.light-mode .el-tooltip__popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.light-mode .el-tooltip__popper .popper__arrow{border-width:6px}.light-mode .el-tooltip__popper .popper__arrow::after{content:\" \";border-width:5px}.light-mode .el-progress-bar__inner::after,.light-mode .el-row::after,.light-mode .el-row::before,.light-mode .el-slider::after,.light-mode .el-slider::before,.light-mode .el-slider__button-wrapper::after,.light-mode .el-upload-cover::after{content:\"\"}.light-mode .el-tooltip__popper[x-placement^=top]{margin-bottom:12px}.light-mode .el-tooltip__popper[x-placement^=top] .popper__arrow{bottom:-6px;border-top-color:#2c3e50;border-bottom-width:0}.light-mode .el-tooltip__popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-5px;border-top-color:#2c3e50;border-bottom-width:0}.light-mode .el-tooltip__popper[x-placement^=bottom]{margin-top:12px}.light-mode .el-tooltip__popper[x-placement^=bottom] .popper__arrow{top:-6px;border-top-width:0;border-bottom-color:#2c3e50}.light-mode .el-tooltip__popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-5px;border-top-width:0;border-bottom-color:#2c3e50}.light-mode .el-tooltip__popper[x-placement^=right]{margin-left:12px}.light-mode .el-tooltip__popper[x-placement^=right] .popper__arrow{left:-6px;border-right-color:#2c3e50;border-left-width:0}.light-mode .el-tooltip__popper[x-placement^=right] .popper__arrow::after{bottom:-5px;left:1px;border-right-color:#2c3e50;border-left-width:0}.light-mode .el-tooltip__popper[x-placement^=left]{margin-right:12px}.light-mode .el-tooltip__popper[x-placement^=left] .popper__arrow{right:-6px;border-right-width:0;border-left-color:#2c3e50}.light-mode .el-tooltip__popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-5px;margin-left:-5px;border-right-width:0;border-left-color:#2c3e50}.light-mode .el-tooltip__popper.is-dark{background:#2c3e50;color:#fff}.light-mode .el-tooltip__popper.is-light{background:#fff;border:1px solid #2c3e50}.light-mode .el-tooltip__popper.is-light[x-placement^=top] .popper__arrow{border-top-color:#2c3e50}.light-mode .el-tooltip__popper.is-light[x-placement^=top] .popper__arrow::after{border-top-color:#fff}.light-mode .el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow{border-bottom-color:#2c3e50}.light-mode .el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow::after{border-bottom-color:#fff}.light-mode .el-tooltip__popper.is-light[x-placement^=left] .popper__arrow{border-left-color:#2c3e50}.light-mode .el-tooltip__popper.is-light[x-placement^=left] .popper__arrow::after{border-left-color:#fff}.light-mode .el-tooltip__popper.is-light[x-placement^=right] .popper__arrow{border-right-color:#2c3e50}.light-mode .el-tooltip__popper.is-light[x-placement^=right] .popper__arrow::after{border-right-color:#fff}.light-mode .el-slider::after,.light-mode .el-slider::before{display:table}.light-mode .el-slider__button-wrapper .el-tooltip,.light-mode .el-slider__button-wrapper::after{vertical-align:middle;display:inline-block}.light-mode .el-slider::after{clear:both}.light-mode .el-slider__runway{width:100%;height:6px;margin:16px 0;background-color:#e4e7ed;border-radius:3px;position:relative;cursor:pointer;vertical-align:middle}.light-mode .el-slider__runway.show-input{margin-right:160px;width:auto}.light-mode .el-slider__runway.disabled{cursor:default}.light-mode .el-slider__runway.disabled .el-slider__bar{background-color:#c0c4cc}.light-mode .el-slider__runway.disabled .el-slider__button{border-color:#c0c4cc}.light-mode .el-slider__runway.disabled .el-slider__button-wrapper.dragging,.light-mode .el-slider__runway.disabled .el-slider__button-wrapper.hover,.light-mode .el-slider__runway.disabled .el-slider__button-wrapper:hover{cursor:not-allowed}.light-mode .el-slider__runway.disabled .el-slider__button.dragging,.light-mode .el-slider__runway.disabled .el-slider__button.hover,.light-mode .el-slider__runway.disabled .el-slider__button:hover{-webkit-transform:scale(1);transform:scale(1);cursor:not-allowed}.light-mode .el-slider__button-wrapper,.light-mode .el-slider__stop{-webkit-transform:translateX(-50%);position:absolute}.light-mode .el-slider__input{float:right;margin-top:3px;width:130px}.light-mode .el-slider__input.el-input-number--mini{margin-top:5px}.light-mode .el-slider__input.el-input-number--medium{margin-top:0}.light-mode .el-slider__input.el-input-number--large{margin-top:-2px}.light-mode .el-slider__bar{height:6px;background-color:#282c34;border-top-left-radius:3px;border-bottom-left-radius:3px;position:absolute}.light-mode .el-slider__button-wrapper{height:36px;width:36px;z-index:1001;top:-15px;transform:translateX(-50%);background-color:transparent;text-align:center;-moz-user-select:none;user-select:none;line-height:normal}.light-mode .el-slider__button,.light-mode .el-step__icon-inner{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.light-mode .el-slider__button-wrapper::after{height:100%}.light-mode .el-slider__button-wrapper.hover,.light-mode .el-slider__button-wrapper:hover{cursor:-webkit-grab;cursor:grab}.light-mode .el-slider__button-wrapper.dragging{cursor:-webkit-grabbing;cursor:grabbing}.light-mode .el-slider__button{width:16px;height:16px;border:2px solid #282c34;background-color:#fff;border-radius:50%;-webkit-transition:.2s;transition:.2s;user-select:none}.light-mode .el-slider__button.dragging,.light-mode .el-slider__button.hover,.light-mode .el-slider__button:hover{-webkit-transform:scale(1.2);transform:scale(1.2)}.light-mode .el-slider__button.hover,.light-mode .el-slider__button:hover{cursor:-webkit-grab;cursor:grab}.light-mode .el-slider__button.dragging{cursor:-webkit-grabbing;cursor:grabbing}.light-mode .el-slider__stop{height:6px;width:6px;border-radius:100%;background-color:#fff;transform:translateX(-50%)}.light-mode .el-slider__marks{top:0;left:12px;width:18px;height:100%}.light-mode .el-slider__marks-text{position:absolute;-webkit-transform:translateX(-50%);transform:translateX(-50%);font-size:14px;color:#909399;margin-top:15px}.light-mode .el-slider.is-vertical{position:relative}.light-mode .el-slider.is-vertical .el-slider__runway{width:6px;height:100%;margin:0 16px}.light-mode .el-slider.is-vertical .el-slider__bar{width:6px;height:auto;border-radius:0 0 3px 3px}.light-mode .el-slider.is-vertical .el-slider__button-wrapper{top:auto;left:-15px;-webkit-transform:translateY(50%);transform:translateY(50%)}.light-mode .el-slider.is-vertical .el-slider__stop{-webkit-transform:translateY(50%);transform:translateY(50%)}.light-mode .el-slider.is-vertical.el-slider--with-input{padding-bottom:58px}.light-mode .el-slider.is-vertical.el-slider--with-input .el-slider__input{overflow:visible;float:none;position:absolute;bottom:22px;width:36px;margin-top:15px}.light-mode .el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input__inner{text-align:center;padding-left:5px;padding-right:5px}.light-mode .el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__decrease,.light-mode .el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase{top:32px;margin-top:-1px;border:1px solid #dcdfe6;line-height:20px;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-transition:border-color .2s cubic-bezier(.645,.045,.355,1);transition:border-color .2s cubic-bezier(.645,.045,.355,1)}.light-mode .el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__decrease{width:18px;right:18px;border-bottom-left-radius:4px}.light-mode .el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase{width:19px;border-bottom-right-radius:4px}.light-mode .el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase~.el-input .el-input__inner{border-bottom-left-radius:0;border-bottom-right-radius:0}.light-mode .el-slider.is-vertical.el-slider--with-input .el-slider__input:hover .el-input-number__decrease,.light-mode .el-slider.is-vertical.el-slider--with-input .el-slider__input:hover .el-input-number__increase{border-color:#c0c4cc}.light-mode .el-slider.is-vertical.el-slider--with-input .el-slider__input:active .el-input-number__decrease,.light-mode .el-slider.is-vertical.el-slider--with-input .el-slider__input:active .el-input-number__increase{border-color:#282c34}.light-mode .el-slider.is-vertical .el-slider__marks-text{margin-top:0;left:15px;-webkit-transform:translateY(50%);transform:translateY(50%)}.light-mode .el-loading-parent--relative{position:relative!important}.light-mode .el-loading-parent--hidden{overflow:hidden!important}.light-mode .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}.light-mode .el-loading-mask.is-fullscreen{position:fixed}.light-mode .el-loading-mask.is-fullscreen .el-loading-spinner{margin-top:-25px}.light-mode .el-loading-mask.is-fullscreen .el-loading-spinner .circular{height:50px;width:50px}.light-mode .el-loading-spinner{top:50%;margin-top:-21px;width:100%;text-align:center;position:absolute}.light-mode .el-col-pull-0,.light-mode .el-col-pull-1,.light-mode .el-col-pull-10,.light-mode .el-col-pull-11,.light-mode .el-col-pull-13,.light-mode .el-col-pull-14,.light-mode .el-col-pull-15,.light-mode .el-col-pull-16,.light-mode .el-col-pull-17,.light-mode .el-col-pull-18,.light-mode .el-col-pull-19,.light-mode .el-col-pull-2,.light-mode .el-col-pull-20,.light-mode .el-col-pull-21,.light-mode .el-col-pull-22,.light-mode .el-col-pull-23,.light-mode .el-col-pull-24,.light-mode .el-col-pull-3,.light-mode .el-col-pull-4,.light-mode .el-col-pull-5,.light-mode .el-col-pull-6,.light-mode .el-col-pull-7,.light-mode .el-col-pull-8,.light-mode .el-col-pull-9,.light-mode .el-col-push-0,.light-mode .el-col-push-1,.light-mode .el-col-push-10,.light-mode .el-col-push-11,.light-mode .el-col-push-12,.light-mode .el-col-push-13,.light-mode .el-col-push-14,.light-mode .el-col-push-15,.light-mode .el-col-push-16,.light-mode .el-col-push-17,.light-mode .el-col-push-18,.light-mode .el-col-push-19,.light-mode .el-col-push-2,.light-mode .el-col-push-20,.light-mode .el-col-push-21,.light-mode .el-col-push-22,.light-mode .el-col-push-23,.light-mode .el-col-push-24,.light-mode .el-col-push-3,.light-mode .el-col-push-4,.light-mode .el-col-push-5,.light-mode .el-col-push-6,.light-mode .el-col-push-7,.light-mode .el-col-push-8,.light-mode .el-col-push-9,.light-mode .el-row{position:relative}.light-mode .el-loading-spinner .el-loading-text{color:#282c34;margin:3px 0;font-size:14px}.light-mode .el-loading-spinner .circular{height:42px;width:42px;-webkit-animation:loading-rotate 2s linear infinite;animation:loading-rotate 2s linear infinite}.light-mode .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:#282c34;stroke-linecap:round}.light-mode .el-loading-spinner i{color:#282c34}@-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}}.light-mode .el-row{-webkit-box-sizing:border-box;box-sizing:border-box}.light-mode .el-row::after,.light-mode .el-row::before{display:table}.light-mode .el-row::after{clear:both}.light-mode .el-row--flex{display:-webkit-box;display:-ms-flexbox;display:flex}.light-mode .el-col-0,.light-mode .el-row--flex:after,.light-mode .el-row--flex:before{display:none}.light-mode .el-row--flex.is-justify-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.light-mode .el-row--flex.is-justify-end{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.light-mode .el-row--flex.is-justify-space-between{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.light-mode .el-row--flex.is-justify-space-around{-ms-flex-pack:distribute;justify-content:space-around}.light-mode .el-row--flex.is-align-middle{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.light-mode .el-row--flex.is-align-bottom{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.light-mode [class*=el-col-]{float:left;-webkit-box-sizing:border-box;box-sizing:border-box}.light-mode .el-upload--picture-card,.light-mode .el-upload-dragger{-webkit-box-sizing:border-box;cursor:pointer}.light-mode .el-col-0{width:0%}.light-mode .el-col-offset-0{margin-left:0}.light-mode .el-col-pull-0{right:0}.light-mode .el-col-push-0{left:0}.light-mode .el-col-1{width:4.16667%}.light-mode .el-col-offset-1{margin-left:4.16667%}.light-mode .el-col-pull-1{right:4.16667%}.light-mode .el-col-push-1{left:4.16667%}.light-mode .el-col-2{width:8.33333%}.light-mode .el-col-offset-2{margin-left:8.33333%}.light-mode .el-col-pull-2{right:8.33333%}.light-mode .el-col-push-2{left:8.33333%}.light-mode .el-col-3{width:12.5%}.light-mode .el-col-offset-3{margin-left:12.5%}.light-mode .el-col-pull-3{right:12.5%}.light-mode .el-col-push-3{left:12.5%}.light-mode .el-col-4{width:16.66667%}.light-mode .el-col-offset-4{margin-left:16.66667%}.light-mode .el-col-pull-4{right:16.66667%}.light-mode .el-col-push-4{left:16.66667%}.light-mode .el-col-5{width:20.83333%}.light-mode .el-col-offset-5{margin-left:20.83333%}.light-mode .el-col-pull-5{right:20.83333%}.light-mode .el-col-push-5{left:20.83333%}.light-mode .el-col-6{width:25%}.light-mode .el-col-offset-6{margin-left:25%}.light-mode .el-col-pull-6{right:25%}.light-mode .el-col-push-6{left:25%}.light-mode .el-col-7{width:29.16667%}.light-mode .el-col-offset-7{margin-left:29.16667%}.light-mode .el-col-pull-7{right:29.16667%}.light-mode .el-col-push-7{left:29.16667%}.light-mode .el-col-8{width:33.33333%}.light-mode .el-col-offset-8{margin-left:33.33333%}.light-mode .el-col-pull-8{right:33.33333%}.light-mode .el-col-push-8{left:33.33333%}.light-mode .el-col-9{width:37.5%}.light-mode .el-col-offset-9{margin-left:37.5%}.light-mode .el-col-pull-9{right:37.5%}.light-mode .el-col-push-9{left:37.5%}.light-mode .el-col-10{width:41.66667%}.light-mode .el-col-offset-10{margin-left:41.66667%}.light-mode .el-col-pull-10{right:41.66667%}.light-mode .el-col-push-10{left:41.66667%}.light-mode .el-col-11{width:45.83333%}.light-mode .el-col-offset-11{margin-left:45.83333%}.light-mode .el-col-pull-11{right:45.83333%}.light-mode .el-col-push-11{left:45.83333%}.light-mode .el-col-12{width:50%}.light-mode .el-col-offset-12{margin-left:50%}.light-mode .el-col-pull-12{position:relative;right:50%}.light-mode .el-col-push-12{left:50%}.light-mode .el-col-13{width:54.16667%}.light-mode .el-col-offset-13{margin-left:54.16667%}.light-mode .el-col-pull-13{right:54.16667%}.light-mode .el-col-push-13{left:54.16667%}.light-mode .el-col-14{width:58.33333%}.light-mode .el-col-offset-14{margin-left:58.33333%}.light-mode .el-col-pull-14{right:58.33333%}.light-mode .el-col-push-14{left:58.33333%}.light-mode .el-col-15{width:62.5%}.light-mode .el-col-offset-15{margin-left:62.5%}.light-mode .el-col-pull-15{right:62.5%}.light-mode .el-col-push-15{left:62.5%}.light-mode .el-col-16{width:66.66667%}.light-mode .el-col-offset-16{margin-left:66.66667%}.light-mode .el-col-pull-16{right:66.66667%}.light-mode .el-col-push-16{left:66.66667%}.light-mode .el-col-17{width:70.83333%}.light-mode .el-col-offset-17{margin-left:70.83333%}.light-mode .el-col-pull-17{right:70.83333%}.light-mode .el-col-push-17{left:70.83333%}.light-mode .el-col-18{width:75%}.light-mode .el-col-offset-18{margin-left:75%}.light-mode .el-col-pull-18{right:75%}.light-mode .el-col-push-18{left:75%}.light-mode .el-col-19{width:79.16667%}.light-mode .el-col-offset-19{margin-left:79.16667%}.light-mode .el-col-pull-19{right:79.16667%}.light-mode .el-col-push-19{left:79.16667%}.light-mode .el-col-20{width:83.33333%}.light-mode .el-col-offset-20{margin-left:83.33333%}.light-mode .el-col-pull-20{right:83.33333%}.light-mode .el-col-push-20{left:83.33333%}.light-mode .el-col-21{width:87.5%}.light-mode .el-col-offset-21{margin-left:87.5%}.light-mode .el-col-pull-21{right:87.5%}.light-mode .el-col-push-21{left:87.5%}.light-mode .el-col-22{width:91.66667%}.light-mode .el-col-offset-22{margin-left:91.66667%}.light-mode .el-col-pull-22{right:91.66667%}.light-mode .el-col-push-22{left:91.66667%}.light-mode .el-col-23{width:95.83333%}.light-mode .el-col-offset-23{margin-left:95.83333%}.light-mode .el-col-pull-23{right:95.83333%}.light-mode .el-col-push-23{left:95.83333%}.light-mode .el-col-24{width:100%}.light-mode .el-col-offset-24{margin-left:100%}.light-mode .el-col-pull-24{right:100%}.light-mode .el-col-push-24{left:100%}@media only screen and (max-width:767px){.light-mode .el-col-xs-0{display:none;width:0%}.light-mode .el-col-xs-offset-0{margin-left:0}.light-mode .el-col-xs-pull-0{position:relative;right:0}.light-mode .el-col-xs-push-0{position:relative;left:0}.light-mode .el-col-xs-1{width:4.16667%}.light-mode .el-col-xs-offset-1{margin-left:4.16667%}.light-mode .el-col-xs-pull-1{position:relative;right:4.16667%}.light-mode .el-col-xs-push-1{position:relative;left:4.16667%}.light-mode .el-col-xs-2{width:8.33333%}.light-mode .el-col-xs-offset-2{margin-left:8.33333%}.light-mode .el-col-xs-pull-2{position:relative;right:8.33333%}.light-mode .el-col-xs-push-2{position:relative;left:8.33333%}.light-mode .el-col-xs-3{width:12.5%}.light-mode .el-col-xs-offset-3{margin-left:12.5%}.light-mode .el-col-xs-pull-3{position:relative;right:12.5%}.light-mode .el-col-xs-push-3{position:relative;left:12.5%}.light-mode .el-col-xs-4{width:16.66667%}.light-mode .el-col-xs-offset-4{margin-left:16.66667%}.light-mode .el-col-xs-pull-4{position:relative;right:16.66667%}.light-mode .el-col-xs-push-4{position:relative;left:16.66667%}.light-mode .el-col-xs-5{width:20.83333%}.light-mode .el-col-xs-offset-5{margin-left:20.83333%}.light-mode .el-col-xs-pull-5{position:relative;right:20.83333%}.light-mode .el-col-xs-push-5{position:relative;left:20.83333%}.light-mode .el-col-xs-6{width:25%}.light-mode .el-col-xs-offset-6{margin-left:25%}.light-mode .el-col-xs-pull-6{position:relative;right:25%}.light-mode .el-col-xs-push-6{position:relative;left:25%}.light-mode .el-col-xs-7{width:29.16667%}.light-mode .el-col-xs-offset-7{margin-left:29.16667%}.light-mode .el-col-xs-pull-7{position:relative;right:29.16667%}.light-mode .el-col-xs-push-7{position:relative;left:29.16667%}.light-mode .el-col-xs-8{width:33.33333%}.light-mode .el-col-xs-offset-8{margin-left:33.33333%}.light-mode .el-col-xs-pull-8{position:relative;right:33.33333%}.light-mode .el-col-xs-push-8{position:relative;left:33.33333%}.light-mode .el-col-xs-9{width:37.5%}.light-mode .el-col-xs-offset-9{margin-left:37.5%}.light-mode .el-col-xs-pull-9{position:relative;right:37.5%}.light-mode .el-col-xs-push-9{position:relative;left:37.5%}.light-mode .el-col-xs-10{width:41.66667%}.light-mode .el-col-xs-offset-10{margin-left:41.66667%}.light-mode .el-col-xs-pull-10{position:relative;right:41.66667%}.light-mode .el-col-xs-push-10{position:relative;left:41.66667%}.light-mode .el-col-xs-11{width:45.83333%}.light-mode .el-col-xs-offset-11{margin-left:45.83333%}.light-mode .el-col-xs-pull-11{position:relative;right:45.83333%}.light-mode .el-col-xs-push-11{position:relative;left:45.83333%}.light-mode .el-col-xs-12{width:50%}.light-mode .el-col-xs-offset-12{margin-left:50%}.light-mode .el-col-xs-pull-12{position:relative;right:50%}.light-mode .el-col-xs-push-12{position:relative;left:50%}.light-mode .el-col-xs-13{width:54.16667%}.light-mode .el-col-xs-offset-13{margin-left:54.16667%}.light-mode .el-col-xs-pull-13{position:relative;right:54.16667%}.light-mode .el-col-xs-push-13{position:relative;left:54.16667%}.light-mode .el-col-xs-14{width:58.33333%}.light-mode .el-col-xs-offset-14{margin-left:58.33333%}.light-mode .el-col-xs-pull-14{position:relative;right:58.33333%}.light-mode .el-col-xs-push-14{position:relative;left:58.33333%}.light-mode .el-col-xs-15{width:62.5%}.light-mode .el-col-xs-offset-15{margin-left:62.5%}.light-mode .el-col-xs-pull-15{position:relative;right:62.5%}.light-mode .el-col-xs-push-15{position:relative;left:62.5%}.light-mode .el-col-xs-16{width:66.66667%}.light-mode .el-col-xs-offset-16{margin-left:66.66667%}.light-mode .el-col-xs-pull-16{position:relative;right:66.66667%}.light-mode .el-col-xs-push-16{position:relative;left:66.66667%}.light-mode .el-col-xs-17{width:70.83333%}.light-mode .el-col-xs-offset-17{margin-left:70.83333%}.light-mode .el-col-xs-pull-17{position:relative;right:70.83333%}.light-mode .el-col-xs-push-17{position:relative;left:70.83333%}.light-mode .el-col-xs-18{width:75%}.light-mode .el-col-xs-offset-18{margin-left:75%}.light-mode .el-col-xs-pull-18{position:relative;right:75%}.light-mode .el-col-xs-push-18{position:relative;left:75%}.light-mode .el-col-xs-19{width:79.16667%}.light-mode .el-col-xs-offset-19{margin-left:79.16667%}.light-mode .el-col-xs-pull-19{position:relative;right:79.16667%}.light-mode .el-col-xs-push-19{position:relative;left:79.16667%}.light-mode .el-col-xs-20{width:83.33333%}.light-mode .el-col-xs-offset-20{margin-left:83.33333%}.light-mode .el-col-xs-pull-20{position:relative;right:83.33333%}.light-mode .el-col-xs-push-20{position:relative;left:83.33333%}.light-mode .el-col-xs-21{width:87.5%}.light-mode .el-col-xs-offset-21{margin-left:87.5%}.light-mode .el-col-xs-pull-21{position:relative;right:87.5%}.light-mode .el-col-xs-push-21{position:relative;left:87.5%}.light-mode .el-col-xs-22{width:91.66667%}.light-mode .el-col-xs-offset-22{margin-left:91.66667%}.light-mode .el-col-xs-pull-22{position:relative;right:91.66667%}.light-mode .el-col-xs-push-22{position:relative;left:91.66667%}.light-mode .el-col-xs-23{width:95.83333%}.light-mode .el-col-xs-offset-23{margin-left:95.83333%}.light-mode .el-col-xs-pull-23{position:relative;right:95.83333%}.light-mode .el-col-xs-push-23{position:relative;left:95.83333%}.light-mode .el-col-xs-24{width:100%}.light-mode .el-col-xs-offset-24{margin-left:100%}.light-mode .el-col-xs-pull-24{position:relative;right:100%}.light-mode .el-col-xs-push-24{position:relative;left:100%}}@media only screen and (min-width:768px){.light-mode .el-col-sm-0{display:none;width:0%}.light-mode .el-col-sm-offset-0{margin-left:0}.light-mode .el-col-sm-pull-0{position:relative;right:0}.light-mode .el-col-sm-push-0{position:relative;left:0}.light-mode .el-col-sm-1{width:4.16667%}.light-mode .el-col-sm-offset-1{margin-left:4.16667%}.light-mode .el-col-sm-pull-1{position:relative;right:4.16667%}.light-mode .el-col-sm-push-1{position:relative;left:4.16667%}.light-mode .el-col-sm-2{width:8.33333%}.light-mode .el-col-sm-offset-2{margin-left:8.33333%}.light-mode .el-col-sm-pull-2{position:relative;right:8.33333%}.light-mode .el-col-sm-push-2{position:relative;left:8.33333%}.light-mode .el-col-sm-3{width:12.5%}.light-mode .el-col-sm-offset-3{margin-left:12.5%}.light-mode .el-col-sm-pull-3{position:relative;right:12.5%}.light-mode .el-col-sm-push-3{position:relative;left:12.5%}.light-mode .el-col-sm-4{width:16.66667%}.light-mode .el-col-sm-offset-4{margin-left:16.66667%}.light-mode .el-col-sm-pull-4{position:relative;right:16.66667%}.light-mode .el-col-sm-push-4{position:relative;left:16.66667%}.light-mode .el-col-sm-5{width:20.83333%}.light-mode .el-col-sm-offset-5{margin-left:20.83333%}.light-mode .el-col-sm-pull-5{position:relative;right:20.83333%}.light-mode .el-col-sm-push-5{position:relative;left:20.83333%}.light-mode .el-col-sm-6{width:25%}.light-mode .el-col-sm-offset-6{margin-left:25%}.light-mode .el-col-sm-pull-6{position:relative;right:25%}.light-mode .el-col-sm-push-6{position:relative;left:25%}.light-mode .el-col-sm-7{width:29.16667%}.light-mode .el-col-sm-offset-7{margin-left:29.16667%}.light-mode .el-col-sm-pull-7{position:relative;right:29.16667%}.light-mode .el-col-sm-push-7{position:relative;left:29.16667%}.light-mode .el-col-sm-8{width:33.33333%}.light-mode .el-col-sm-offset-8{margin-left:33.33333%}.light-mode .el-col-sm-pull-8{position:relative;right:33.33333%}.light-mode .el-col-sm-push-8{position:relative;left:33.33333%}.light-mode .el-col-sm-9{width:37.5%}.light-mode .el-col-sm-offset-9{margin-left:37.5%}.light-mode .el-col-sm-pull-9{position:relative;right:37.5%}.light-mode .el-col-sm-push-9{position:relative;left:37.5%}.light-mode .el-col-sm-10{width:41.66667%}.light-mode .el-col-sm-offset-10{margin-left:41.66667%}.light-mode .el-col-sm-pull-10{position:relative;right:41.66667%}.light-mode .el-col-sm-push-10{position:relative;left:41.66667%}.light-mode .el-col-sm-11{width:45.83333%}.light-mode .el-col-sm-offset-11{margin-left:45.83333%}.light-mode .el-col-sm-pull-11{position:relative;right:45.83333%}.light-mode .el-col-sm-push-11{position:relative;left:45.83333%}.light-mode .el-col-sm-12{width:50%}.light-mode .el-col-sm-offset-12{margin-left:50%}.light-mode .el-col-sm-pull-12{position:relative;right:50%}.light-mode .el-col-sm-push-12{position:relative;left:50%}.light-mode .el-col-sm-13{width:54.16667%}.light-mode .el-col-sm-offset-13{margin-left:54.16667%}.light-mode .el-col-sm-pull-13{position:relative;right:54.16667%}.light-mode .el-col-sm-push-13{position:relative;left:54.16667%}.light-mode .el-col-sm-14{width:58.33333%}.light-mode .el-col-sm-offset-14{margin-left:58.33333%}.light-mode .el-col-sm-pull-14{position:relative;right:58.33333%}.light-mode .el-col-sm-push-14{position:relative;left:58.33333%}.light-mode .el-col-sm-15{width:62.5%}.light-mode .el-col-sm-offset-15{margin-left:62.5%}.light-mode .el-col-sm-pull-15{position:relative;right:62.5%}.light-mode .el-col-sm-push-15{position:relative;left:62.5%}.light-mode .el-col-sm-16{width:66.66667%}.light-mode .el-col-sm-offset-16{margin-left:66.66667%}.light-mode .el-col-sm-pull-16{position:relative;right:66.66667%}.light-mode .el-col-sm-push-16{position:relative;left:66.66667%}.light-mode .el-col-sm-17{width:70.83333%}.light-mode .el-col-sm-offset-17{margin-left:70.83333%}.light-mode .el-col-sm-pull-17{position:relative;right:70.83333%}.light-mode .el-col-sm-push-17{position:relative;left:70.83333%}.light-mode .el-col-sm-18{width:75%}.light-mode .el-col-sm-offset-18{margin-left:75%}.light-mode .el-col-sm-pull-18{position:relative;right:75%}.light-mode .el-col-sm-push-18{position:relative;left:75%}.light-mode .el-col-sm-19{width:79.16667%}.light-mode .el-col-sm-offset-19{margin-left:79.16667%}.light-mode .el-col-sm-pull-19{position:relative;right:79.16667%}.light-mode .el-col-sm-push-19{position:relative;left:79.16667%}.light-mode .el-col-sm-20{width:83.33333%}.light-mode .el-col-sm-offset-20{margin-left:83.33333%}.light-mode .el-col-sm-pull-20{position:relative;right:83.33333%}.light-mode .el-col-sm-push-20{position:relative;left:83.33333%}.light-mode .el-col-sm-21{width:87.5%}.light-mode .el-col-sm-offset-21{margin-left:87.5%}.light-mode .el-col-sm-pull-21{position:relative;right:87.5%}.light-mode .el-col-sm-push-21{position:relative;left:87.5%}.light-mode .el-col-sm-22{width:91.66667%}.light-mode .el-col-sm-offset-22{margin-left:91.66667%}.light-mode .el-col-sm-pull-22{position:relative;right:91.66667%}.light-mode .el-col-sm-push-22{position:relative;left:91.66667%}.light-mode .el-col-sm-23{width:95.83333%}.light-mode .el-col-sm-offset-23{margin-left:95.83333%}.light-mode .el-col-sm-pull-23{position:relative;right:95.83333%}.light-mode .el-col-sm-push-23{position:relative;left:95.83333%}.light-mode .el-col-sm-24{width:100%}.light-mode .el-col-sm-offset-24{margin-left:100%}.light-mode .el-col-sm-pull-24{position:relative;right:100%}.light-mode .el-col-sm-push-24{position:relative;left:100%}}@media only screen and (min-width:992px){.light-mode .el-col-md-0{display:none;width:0%}.light-mode .el-col-md-offset-0{margin-left:0}.light-mode .el-col-md-pull-0{position:relative;right:0}.light-mode .el-col-md-push-0{position:relative;left:0}.light-mode .el-col-md-1{width:4.16667%}.light-mode .el-col-md-offset-1{margin-left:4.16667%}.light-mode .el-col-md-pull-1{position:relative;right:4.16667%}.light-mode .el-col-md-push-1{position:relative;left:4.16667%}.light-mode .el-col-md-2{width:8.33333%}.light-mode .el-col-md-offset-2{margin-left:8.33333%}.light-mode .el-col-md-pull-2{position:relative;right:8.33333%}.light-mode .el-col-md-push-2{position:relative;left:8.33333%}.light-mode .el-col-md-3{width:12.5%}.light-mode .el-col-md-offset-3{margin-left:12.5%}.light-mode .el-col-md-pull-3{position:relative;right:12.5%}.light-mode .el-col-md-push-3{position:relative;left:12.5%}.light-mode .el-col-md-4{width:16.66667%}.light-mode .el-col-md-offset-4{margin-left:16.66667%}.light-mode .el-col-md-pull-4{position:relative;right:16.66667%}.light-mode .el-col-md-push-4{position:relative;left:16.66667%}.light-mode .el-col-md-5{width:20.83333%}.light-mode .el-col-md-offset-5{margin-left:20.83333%}.light-mode .el-col-md-pull-5{position:relative;right:20.83333%}.light-mode .el-col-md-push-5{position:relative;left:20.83333%}.light-mode .el-col-md-6{width:25%}.light-mode .el-col-md-offset-6{margin-left:25%}.light-mode .el-col-md-pull-6{position:relative;right:25%}.light-mode .el-col-md-push-6{position:relative;left:25%}.light-mode .el-col-md-7{width:29.16667%}.light-mode .el-col-md-offset-7{margin-left:29.16667%}.light-mode .el-col-md-pull-7{position:relative;right:29.16667%}.light-mode .el-col-md-push-7{position:relative;left:29.16667%}.light-mode .el-col-md-8{width:33.33333%}.light-mode .el-col-md-offset-8{margin-left:33.33333%}.light-mode .el-col-md-pull-8{position:relative;right:33.33333%}.light-mode .el-col-md-push-8{position:relative;left:33.33333%}.light-mode .el-col-md-9{width:37.5%}.light-mode .el-col-md-offset-9{margin-left:37.5%}.light-mode .el-col-md-pull-9{position:relative;right:37.5%}.light-mode .el-col-md-push-9{position:relative;left:37.5%}.light-mode .el-col-md-10{width:41.66667%}.light-mode .el-col-md-offset-10{margin-left:41.66667%}.light-mode .el-col-md-pull-10{position:relative;right:41.66667%}.light-mode .el-col-md-push-10{position:relative;left:41.66667%}.light-mode .el-col-md-11{width:45.83333%}.light-mode .el-col-md-offset-11{margin-left:45.83333%}.light-mode .el-col-md-pull-11{position:relative;right:45.83333%}.light-mode .el-col-md-push-11{position:relative;left:45.83333%}.light-mode .el-col-md-12{width:50%}.light-mode .el-col-md-offset-12{margin-left:50%}.light-mode .el-col-md-pull-12{position:relative;right:50%}.light-mode .el-col-md-push-12{position:relative;left:50%}.light-mode .el-col-md-13{width:54.16667%}.light-mode .el-col-md-offset-13{margin-left:54.16667%}.light-mode .el-col-md-pull-13{position:relative;right:54.16667%}.light-mode .el-col-md-push-13{position:relative;left:54.16667%}.light-mode .el-col-md-14{width:58.33333%}.light-mode .el-col-md-offset-14{margin-left:58.33333%}.light-mode .el-col-md-pull-14{position:relative;right:58.33333%}.light-mode .el-col-md-push-14{position:relative;left:58.33333%}.light-mode .el-col-md-15{width:62.5%}.light-mode .el-col-md-offset-15{margin-left:62.5%}.light-mode .el-col-md-pull-15{position:relative;right:62.5%}.light-mode .el-col-md-push-15{position:relative;left:62.5%}.light-mode .el-col-md-16{width:66.66667%}.light-mode .el-col-md-offset-16{margin-left:66.66667%}.light-mode .el-col-md-pull-16{position:relative;right:66.66667%}.light-mode .el-col-md-push-16{position:relative;left:66.66667%}.light-mode .el-col-md-17{width:70.83333%}.light-mode .el-col-md-offset-17{margin-left:70.83333%}.light-mode .el-col-md-pull-17{position:relative;right:70.83333%}.light-mode .el-col-md-push-17{position:relative;left:70.83333%}.light-mode .el-col-md-18{width:75%}.light-mode .el-col-md-offset-18{margin-left:75%}.light-mode .el-col-md-pull-18{position:relative;right:75%}.light-mode .el-col-md-push-18{position:relative;left:75%}.light-mode .el-col-md-19{width:79.16667%}.light-mode .el-col-md-offset-19{margin-left:79.16667%}.light-mode .el-col-md-pull-19{position:relative;right:79.16667%}.light-mode .el-col-md-push-19{position:relative;left:79.16667%}.light-mode .el-col-md-20{width:83.33333%}.light-mode .el-col-md-offset-20{margin-left:83.33333%}.light-mode .el-col-md-pull-20{position:relative;right:83.33333%}.light-mode .el-col-md-push-20{position:relative;left:83.33333%}.light-mode .el-col-md-21{width:87.5%}.light-mode .el-col-md-offset-21{margin-left:87.5%}.light-mode .el-col-md-pull-21{position:relative;right:87.5%}.light-mode .el-col-md-push-21{position:relative;left:87.5%}.light-mode .el-col-md-22{width:91.66667%}.light-mode .el-col-md-offset-22{margin-left:91.66667%}.light-mode .el-col-md-pull-22{position:relative;right:91.66667%}.light-mode .el-col-md-push-22{position:relative;left:91.66667%}.light-mode .el-col-md-23{width:95.83333%}.light-mode .el-col-md-offset-23{margin-left:95.83333%}.light-mode .el-col-md-pull-23{position:relative;right:95.83333%}.light-mode .el-col-md-push-23{position:relative;left:95.83333%}.light-mode .el-col-md-24{width:100%}.light-mode .el-col-md-offset-24{margin-left:100%}.light-mode .el-col-md-pull-24{position:relative;right:100%}.light-mode .el-col-md-push-24{position:relative;left:100%}}@media only screen and (min-width:1200px){.light-mode .el-col-lg-0{display:none;width:0%}.light-mode .el-col-lg-offset-0{margin-left:0}.light-mode .el-col-lg-pull-0{position:relative;right:0}.light-mode .el-col-lg-push-0{position:relative;left:0}.light-mode .el-col-lg-1{width:4.16667%}.light-mode .el-col-lg-offset-1{margin-left:4.16667%}.light-mode .el-col-lg-pull-1{position:relative;right:4.16667%}.light-mode .el-col-lg-push-1{position:relative;left:4.16667%}.light-mode .el-col-lg-2{width:8.33333%}.light-mode .el-col-lg-offset-2{margin-left:8.33333%}.light-mode .el-col-lg-pull-2{position:relative;right:8.33333%}.light-mode .el-col-lg-push-2{position:relative;left:8.33333%}.light-mode .el-col-lg-3{width:12.5%}.light-mode .el-col-lg-offset-3{margin-left:12.5%}.light-mode .el-col-lg-pull-3{position:relative;right:12.5%}.light-mode .el-col-lg-push-3{position:relative;left:12.5%}.light-mode .el-col-lg-4{width:16.66667%}.light-mode .el-col-lg-offset-4{margin-left:16.66667%}.light-mode .el-col-lg-pull-4{position:relative;right:16.66667%}.light-mode .el-col-lg-push-4{position:relative;left:16.66667%}.light-mode .el-col-lg-5{width:20.83333%}.light-mode .el-col-lg-offset-5{margin-left:20.83333%}.light-mode .el-col-lg-pull-5{position:relative;right:20.83333%}.light-mode .el-col-lg-push-5{position:relative;left:20.83333%}.light-mode .el-col-lg-6{width:25%}.light-mode .el-col-lg-offset-6{margin-left:25%}.light-mode .el-col-lg-pull-6{position:relative;right:25%}.light-mode .el-col-lg-push-6{position:relative;left:25%}.light-mode .el-col-lg-7{width:29.16667%}.light-mode .el-col-lg-offset-7{margin-left:29.16667%}.light-mode .el-col-lg-pull-7{position:relative;right:29.16667%}.light-mode .el-col-lg-push-7{position:relative;left:29.16667%}.light-mode .el-col-lg-8{width:33.33333%}.light-mode .el-col-lg-offset-8{margin-left:33.33333%}.light-mode .el-col-lg-pull-8{position:relative;right:33.33333%}.light-mode .el-col-lg-push-8{position:relative;left:33.33333%}.light-mode .el-col-lg-9{width:37.5%}.light-mode .el-col-lg-offset-9{margin-left:37.5%}.light-mode .el-col-lg-pull-9{position:relative;right:37.5%}.light-mode .el-col-lg-push-9{position:relative;left:37.5%}.light-mode .el-col-lg-10{width:41.66667%}.light-mode .el-col-lg-offset-10{margin-left:41.66667%}.light-mode .el-col-lg-pull-10{position:relative;right:41.66667%}.light-mode .el-col-lg-push-10{position:relative;left:41.66667%}.light-mode .el-col-lg-11{width:45.83333%}.light-mode .el-col-lg-offset-11{margin-left:45.83333%}.light-mode .el-col-lg-pull-11{position:relative;right:45.83333%}.light-mode .el-col-lg-push-11{position:relative;left:45.83333%}.light-mode .el-col-lg-12{width:50%}.light-mode .el-col-lg-offset-12{margin-left:50%}.light-mode .el-col-lg-pull-12{position:relative;right:50%}.light-mode .el-col-lg-push-12{position:relative;left:50%}.light-mode .el-col-lg-13{width:54.16667%}.light-mode .el-col-lg-offset-13{margin-left:54.16667%}.light-mode .el-col-lg-pull-13{position:relative;right:54.16667%}.light-mode .el-col-lg-push-13{position:relative;left:54.16667%}.light-mode .el-col-lg-14{width:58.33333%}.light-mode .el-col-lg-offset-14{margin-left:58.33333%}.light-mode .el-col-lg-pull-14{position:relative;right:58.33333%}.light-mode .el-col-lg-push-14{position:relative;left:58.33333%}.light-mode .el-col-lg-15{width:62.5%}.light-mode .el-col-lg-offset-15{margin-left:62.5%}.light-mode .el-col-lg-pull-15{position:relative;right:62.5%}.light-mode .el-col-lg-push-15{position:relative;left:62.5%}.light-mode .el-col-lg-16{width:66.66667%}.light-mode .el-col-lg-offset-16{margin-left:66.66667%}.light-mode .el-col-lg-pull-16{position:relative;right:66.66667%}.light-mode .el-col-lg-push-16{position:relative;left:66.66667%}.light-mode .el-col-lg-17{width:70.83333%}.light-mode .el-col-lg-offset-17{margin-left:70.83333%}.light-mode .el-col-lg-pull-17{position:relative;right:70.83333%}.light-mode .el-col-lg-push-17{position:relative;left:70.83333%}.light-mode .el-col-lg-18{width:75%}.light-mode .el-col-lg-offset-18{margin-left:75%}.light-mode .el-col-lg-pull-18{position:relative;right:75%}.light-mode .el-col-lg-push-18{position:relative;left:75%}.light-mode .el-col-lg-19{width:79.16667%}.light-mode .el-col-lg-offset-19{margin-left:79.16667%}.light-mode .el-col-lg-pull-19{position:relative;right:79.16667%}.light-mode .el-col-lg-push-19{position:relative;left:79.16667%}.light-mode .el-col-lg-20{width:83.33333%}.light-mode .el-col-lg-offset-20{margin-left:83.33333%}.light-mode .el-col-lg-pull-20{position:relative;right:83.33333%}.light-mode .el-col-lg-push-20{position:relative;left:83.33333%}.light-mode .el-col-lg-21{width:87.5%}.light-mode .el-col-lg-offset-21{margin-left:87.5%}.light-mode .el-col-lg-pull-21{position:relative;right:87.5%}.light-mode .el-col-lg-push-21{position:relative;left:87.5%}.light-mode .el-col-lg-22{width:91.66667%}.light-mode .el-col-lg-offset-22{margin-left:91.66667%}.light-mode .el-col-lg-pull-22{position:relative;right:91.66667%}.light-mode .el-col-lg-push-22{position:relative;left:91.66667%}.light-mode .el-col-lg-23{width:95.83333%}.light-mode .el-col-lg-offset-23{margin-left:95.83333%}.light-mode .el-col-lg-pull-23{position:relative;right:95.83333%}.light-mode .el-col-lg-push-23{position:relative;left:95.83333%}.light-mode .el-col-lg-24{width:100%}.light-mode .el-col-lg-offset-24{margin-left:100%}.light-mode .el-col-lg-pull-24{position:relative;right:100%}.light-mode .el-col-lg-push-24{position:relative;left:100%}}@media only screen and (min-width:1920px){.light-mode .el-col-xl-0{display:none;width:0%}.light-mode .el-col-xl-offset-0{margin-left:0}.light-mode .el-col-xl-pull-0{position:relative;right:0}.light-mode .el-col-xl-push-0{position:relative;left:0}.light-mode .el-col-xl-1{width:4.16667%}.light-mode .el-col-xl-offset-1{margin-left:4.16667%}.light-mode .el-col-xl-pull-1{position:relative;right:4.16667%}.light-mode .el-col-xl-push-1{position:relative;left:4.16667%}.light-mode .el-col-xl-2{width:8.33333%}.light-mode .el-col-xl-offset-2{margin-left:8.33333%}.light-mode .el-col-xl-pull-2{position:relative;right:8.33333%}.light-mode .el-col-xl-push-2{position:relative;left:8.33333%}.light-mode .el-col-xl-3{width:12.5%}.light-mode .el-col-xl-offset-3{margin-left:12.5%}.light-mode .el-col-xl-pull-3{position:relative;right:12.5%}.light-mode .el-col-xl-push-3{position:relative;left:12.5%}.light-mode .el-col-xl-4{width:16.66667%}.light-mode .el-col-xl-offset-4{margin-left:16.66667%}.light-mode .el-col-xl-pull-4{position:relative;right:16.66667%}.light-mode .el-col-xl-push-4{position:relative;left:16.66667%}.light-mode .el-col-xl-5{width:20.83333%}.light-mode .el-col-xl-offset-5{margin-left:20.83333%}.light-mode .el-col-xl-pull-5{position:relative;right:20.83333%}.light-mode .el-col-xl-push-5{position:relative;left:20.83333%}.light-mode .el-col-xl-6{width:25%}.light-mode .el-col-xl-offset-6{margin-left:25%}.light-mode .el-col-xl-pull-6{position:relative;right:25%}.light-mode .el-col-xl-push-6{position:relative;left:25%}.light-mode .el-col-xl-7{width:29.16667%}.light-mode .el-col-xl-offset-7{margin-left:29.16667%}.light-mode .el-col-xl-pull-7{position:relative;right:29.16667%}.light-mode .el-col-xl-push-7{position:relative;left:29.16667%}.light-mode .el-col-xl-8{width:33.33333%}.light-mode .el-col-xl-offset-8{margin-left:33.33333%}.light-mode .el-col-xl-pull-8{position:relative;right:33.33333%}.light-mode .el-col-xl-push-8{position:relative;left:33.33333%}.light-mode .el-col-xl-9{width:37.5%}.light-mode .el-col-xl-offset-9{margin-left:37.5%}.light-mode .el-col-xl-pull-9{position:relative;right:37.5%}.light-mode .el-col-xl-push-9{position:relative;left:37.5%}.light-mode .el-col-xl-10{width:41.66667%}.light-mode .el-col-xl-offset-10{margin-left:41.66667%}.light-mode .el-col-xl-pull-10{position:relative;right:41.66667%}.light-mode .el-col-xl-push-10{position:relative;left:41.66667%}.light-mode .el-col-xl-11{width:45.83333%}.light-mode .el-col-xl-offset-11{margin-left:45.83333%}.light-mode .el-col-xl-pull-11{position:relative;right:45.83333%}.light-mode .el-col-xl-push-11{position:relative;left:45.83333%}.light-mode .el-col-xl-12{width:50%}.light-mode .el-col-xl-offset-12{margin-left:50%}.light-mode .el-col-xl-pull-12{position:relative;right:50%}.light-mode .el-col-xl-push-12{position:relative;left:50%}.light-mode .el-col-xl-13{width:54.16667%}.light-mode .el-col-xl-offset-13{margin-left:54.16667%}.light-mode .el-col-xl-pull-13{position:relative;right:54.16667%}.light-mode .el-col-xl-push-13{position:relative;left:54.16667%}.light-mode .el-col-xl-14{width:58.33333%}.light-mode .el-col-xl-offset-14{margin-left:58.33333%}.light-mode .el-col-xl-pull-14{position:relative;right:58.33333%}.light-mode .el-col-xl-push-14{position:relative;left:58.33333%}.light-mode .el-col-xl-15{width:62.5%}.light-mode .el-col-xl-offset-15{margin-left:62.5%}.light-mode .el-col-xl-pull-15{position:relative;right:62.5%}.light-mode .el-col-xl-push-15{position:relative;left:62.5%}.light-mode .el-col-xl-16{width:66.66667%}.light-mode .el-col-xl-offset-16{margin-left:66.66667%}.light-mode .el-col-xl-pull-16{position:relative;right:66.66667%}.light-mode .el-col-xl-push-16{position:relative;left:66.66667%}.light-mode .el-col-xl-17{width:70.83333%}.light-mode .el-col-xl-offset-17{margin-left:70.83333%}.light-mode .el-col-xl-pull-17{position:relative;right:70.83333%}.light-mode .el-col-xl-push-17{position:relative;left:70.83333%}.light-mode .el-col-xl-18{width:75%}.light-mode .el-col-xl-offset-18{margin-left:75%}.light-mode .el-col-xl-pull-18{position:relative;right:75%}.light-mode .el-col-xl-push-18{position:relative;left:75%}.light-mode .el-col-xl-19{width:79.16667%}.light-mode .el-col-xl-offset-19{margin-left:79.16667%}.light-mode .el-col-xl-pull-19{position:relative;right:79.16667%}.light-mode .el-col-xl-push-19{position:relative;left:79.16667%}.light-mode .el-col-xl-20{width:83.33333%}.light-mode .el-col-xl-offset-20{margin-left:83.33333%}.light-mode .el-col-xl-pull-20{position:relative;right:83.33333%}.light-mode .el-col-xl-push-20{position:relative;left:83.33333%}.light-mode .el-col-xl-21{width:87.5%}.light-mode .el-col-xl-offset-21{margin-left:87.5%}.light-mode .el-col-xl-pull-21{position:relative;right:87.5%}.light-mode .el-col-xl-push-21{position:relative;left:87.5%}.light-mode .el-col-xl-22{width:91.66667%}.light-mode .el-col-xl-offset-22{margin-left:91.66667%}.light-mode .el-col-xl-pull-22{position:relative;right:91.66667%}.light-mode .el-col-xl-push-22{position:relative;left:91.66667%}.light-mode .el-col-xl-23{width:95.83333%}.light-mode .el-col-xl-offset-23{margin-left:95.83333%}.light-mode .el-col-xl-pull-23{position:relative;right:95.83333%}.light-mode .el-col-xl-push-23{position:relative;left:95.83333%}.light-mode .el-col-xl-24{width:100%}.light-mode .el-col-xl-offset-24{margin-left:100%}.light-mode .el-col-xl-pull-24{position:relative;right:100%}.light-mode .el-col-xl-push-24{position:relative;left:100%}}@-webkit-keyframes progress{0%{background-position:0 0}100%{background-position:32px 0}}.light-mode .el-upload{display:inline-block;text-align:center;cursor:pointer;outline:0}.light-mode .el-upload__input{display:none}.light-mode .el-upload__tip{font-size:12px;color:#606266;margin-top:7px}.light-mode .el-upload iframe{position:absolute;z-index:-1;top:0;left:0;opacity:0}.light-mode .el-upload--picture-card{background-color:#fbfdff;border:1px dashed #c0ccda;border-radius:6px;box-sizing:border-box;width:148px;height:148px;line-height:146px;vertical-align:top}.light-mode .el-upload--picture-card i{font-size:28px;color:#8c939d}.light-mode .el-upload--picture-card:hover,.light-mode .el-upload:focus{border-color:#282c34;color:#282c34}.light-mode .el-upload:focus .el-upload-dragger{border-color:#282c34}.light-mode .el-upload-dragger{background-color:#fff;border:1px dashed #d9d9d9;border-radius:6px;box-sizing:border-box;width:360px;height:180px;text-align:center;position:relative;overflow:hidden}.light-mode .el-upload-dragger .el-icon-upload{font-size:67px;color:#c0c4cc;margin:40px 0 16px;line-height:50px}.light-mode .el-upload-dragger+.el-upload__tip{text-align:center}.light-mode .el-upload-dragger~.el-upload__files{border-top:1px solid #dcdfe6;margin-top:7px;padding-top:5px}.light-mode .el-upload-dragger .el-upload__text{color:#606266;font-size:14px;text-align:center}.light-mode .el-upload-dragger .el-upload__text em{color:#282c34;font-style:normal}.light-mode .el-upload-dragger:hover{border-color:#282c34}.light-mode .el-upload-dragger.is-dragover{background-color:rgba(32,159,255,.06);border:2px dashed #282c34}.light-mode .el-upload-list{margin:0;padding:0;list-style:none}.light-mode .el-upload-list__item{-webkit-transition:all .5s cubic-bezier(.55,0,.1,1);transition:all .5s cubic-bezier(.55,0,.1,1);font-size:14px;color:#606266;line-height:1.8;margin-top:5px;position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:4px;width:100%}.light-mode .el-upload-list__item .el-progress{position:absolute;top:20px;width:100%}.light-mode .el-upload-list__item .el-progress__text{position:absolute;right:0;top:-13px}.light-mode .el-upload-list__item .el-progress-bar{margin-right:0;padding-right:0}.light-mode .el-upload-list__item:first-child{margin-top:10px}.light-mode .el-upload-list__item .el-icon-upload-success{color:#67c23a}.light-mode .el-upload-list__item .el-icon-close{display:none;position:absolute;top:5px;right:5px;cursor:pointer;opacity:.75;color:#606266}.light-mode .el-upload-list__item .el-icon-close:hover{opacity:1}.light-mode .el-upload-list__item .el-icon-close-tip{display:none;position:absolute;top:5px;right:5px;font-size:12px;cursor:pointer;opacity:1;color:#282c34}.light-mode .el-upload-list__item:hover{background-color:#f5f7fa}.light-mode .el-upload-list__item:hover .el-icon-close{display:inline-block}.light-mode .el-upload-list__item:hover .el-progress__text{display:none}.light-mode .el-upload-list__item.is-success .el-upload-list__item-status-label{display:block}.light-mode .el-upload-list__item.is-success .el-upload-list__item-name:focus,.light-mode .el-upload-list__item.is-success .el-upload-list__item-name:hover{color:#282c34;cursor:pointer}.light-mode .el-upload-list__item.is-success:focus:not(:hover) .el-icon-close-tip{display:inline-block}.light-mode .el-upload-list__item.is-success:active .el-icon-close-tip,.light-mode .el-upload-list__item.is-success:focus .el-upload-list__item-status-label,.light-mode .el-upload-list__item.is-success:hover .el-upload-list__item-status-label,.light-mode .el-upload-list__item.is-success:not(.focusing):focus .el-icon-close-tip{display:none}.light-mode .el-upload-list.is-disabled .el-upload-list__item:hover .el-upload-list__item-status-label{display:block}.light-mode .el-upload-list__item-name{color:#606266;display:block;margin-right:40px;overflow:hidden;padding-left:4px;text-overflow:ellipsis;-webkit-transition:color .3s;transition:color .3s;white-space:nowrap}.light-mode .el-upload-list__item-name [class^=el-icon]{height:100%;margin-right:7px;color:#909399;line-height:inherit}.light-mode .el-upload-list__item-status-label{position:absolute;right:5px;top:0;line-height:inherit;display:none}.light-mode .el-upload-list__item-delete{position:absolute;right:10px;top:0;font-size:12px;color:#606266;display:none}.light-mode .el-upload-list__item-delete:hover{color:#282c34}.light-mode .el-upload-list--picture-card{margin:0;display:inline;vertical-align:top}.light-mode .el-upload-list--picture-card .el-upload-list__item{overflow:hidden;background-color:#fff;border:1px solid #c0ccda;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;width:148px;height:148px;margin:0 8px 8px 0;display:inline-block}.light-mode .el-upload-list--picture-card .el-upload-list__item .el-icon-check,.light-mode .el-upload-list--picture-card .el-upload-list__item .el-icon-circle-check{color:#fff}.light-mode .el-upload-list--picture-card .el-upload-list__item .el-icon-close,.light-mode .el-upload-list--picture-card .el-upload-list__item:hover .el-upload-list__item-status-label{display:none}.light-mode .el-upload-list--picture-card .el-upload-list__item:hover .el-progress__text{display:block}.light-mode .el-upload-list--picture-card .el-upload-list__item-name{display:none}.light-mode .el-upload-list--picture-card .el-upload-list__item-thumbnail{width:100%;height:100%}.light-mode .el-upload-list--picture-card .el-upload-list__item-status-label{position:absolute;right:-15px;top:-6px;width:40px;height:24px;background:#13ce66;text-align:center;-webkit-transform:rotate(45deg);transform:rotate(45deg);-webkit-box-shadow:0 0 1pc 1px rgba(0,0,0,.2);box-shadow:0 0 1pc 1px rgba(0,0,0,.2)}.light-mode .el-upload-list--picture-card .el-upload-list__item-status-label i{font-size:12px;margin-top:11px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.light-mode .el-upload-list--picture-card .el-upload-list__item-actions{position:absolute;width:100%;height:100%;left:0;top:0;cursor:default;text-align:center;color:#fff;opacity:0;font-size:20px;background-color:rgba(0,0,0,.5);-webkit-transition:opacity .3s;transition:opacity .3s}.light-mode .el-upload-list--picture-card .el-upload-list__item-actions::after{display:inline-block;content:\"\";height:100%;vertical-align:middle}.light-mode .el-upload-list--picture-card .el-upload-list__item-actions span{display:none;cursor:pointer}.light-mode .el-upload-list--picture-card .el-upload-list__item-actions span+span{margin-left:15px}.light-mode .el-upload-list--picture-card .el-upload-list__item-actions .el-upload-list__item-delete{position:static;font-size:inherit;color:inherit}.light-mode .el-upload-list--picture-card .el-upload-list__item-actions:hover{opacity:1}.light-mode .el-upload-list--picture-card .el-upload-list__item-actions:hover span{display:inline-block}.light-mode .el-upload-list--picture-card .el-progress{top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);bottom:auto;width:126px}.light-mode .el-upload-list--picture-card .el-progress .el-progress__text{top:50%}.light-mode .el-upload-list--picture .el-upload-list__item{overflow:hidden;z-index:0;background-color:#fff;border:1px solid #c0ccda;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;margin-top:10px;padding:10px 10px 10px 90px;height:92px}.light-mode .el-upload-list--picture .el-upload-list__item .el-icon-check,.light-mode .el-upload-list--picture .el-upload-list__item .el-icon-circle-check{color:#fff}.light-mode .el-upload-list--picture .el-upload-list__item:hover .el-upload-list__item-status-label{background:0 0;-webkit-box-shadow:none;box-shadow:none;top:-2px;right:-12px}.light-mode .el-upload-list--picture .el-upload-list__item:hover .el-progress__text{display:block}.light-mode .el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name{line-height:70px;margin-top:0}.light-mode .el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name i{display:none}.light-mode .el-upload-list--picture .el-upload-list__item-thumbnail{vertical-align:middle;display:inline-block;width:70px;height:70px;float:left;position:relative;z-index:1;margin-left:-80px;background-color:#fff}.light-mode .el-upload-list--picture .el-upload-list__item-name{display:block;margin-top:20px}.light-mode .el-upload-list--picture .el-upload-list__item-name i{font-size:70px;line-height:1;position:absolute;left:9px;top:10px}.light-mode .el-upload-list--picture .el-upload-list__item-status-label{position:absolute;right:-17px;top:-7px;width:46px;height:26px;background:#13ce66;text-align:center;-webkit-transform:rotate(45deg);transform:rotate(45deg);-webkit-box-shadow:0 1px 1px #ccc;box-shadow:0 1px 1px #ccc}.light-mode .el-upload-list--picture .el-upload-list__item-status-label i{font-size:12px;margin-top:12px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.light-mode .el-upload-list--picture .el-progress{position:relative;top:-7px}.light-mode .el-upload-cover{position:absolute;left:0;top:0;width:100%;height:100%;overflow:hidden;z-index:10;cursor:default}.light-mode .el-upload-cover::after{display:inline-block;height:100%;vertical-align:middle}.light-mode .el-upload-cover img{display:block;width:100%;height:100%}.light-mode .el-upload-cover__label{position:absolute;right:-15px;top:-6px;width:40px;height:24px;background:#13ce66;text-align:center;-webkit-transform:rotate(45deg);transform:rotate(45deg);-webkit-box-shadow:0 0 1pc 1px rgba(0,0,0,.2);box-shadow:0 0 1pc 1px rgba(0,0,0,.2)}.light-mode .el-upload-cover__label i{font-size:12px;margin-top:11px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);color:#fff}.light-mode .el-upload-cover__progress{display:inline-block;vertical-align:middle;position:static;width:243px}.light-mode .el-upload-cover__progress+.el-upload__inner{opacity:0}.light-mode .el-upload-cover__content{position:absolute;top:0;left:0;width:100%;height:100%}.light-mode .el-upload-cover__interact{position:absolute;bottom:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,.72);text-align:center}.light-mode .el-upload-cover__interact .btn{display:inline-block;color:#fff;font-size:14px;cursor:pointer;vertical-align:middle;-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);margin-top:60px}.light-mode .el-upload-cover__interact .btn span{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.light-mode .el-upload-cover__interact .btn:not(:first-child){margin-left:35px}.light-mode .el-upload-cover__interact .btn:hover{-webkit-transform:translateY(-13px);transform:translateY(-13px)}.light-mode .el-upload-cover__interact .btn:hover span{opacity:1}.light-mode .el-upload-cover__interact .btn i{color:#fff;display:block;font-size:24px;line-height:inherit;margin:0 auto 5px}.light-mode .el-upload-cover__title{position:absolute;bottom:0;left:0;background-color:#fff;height:36px;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:400;text-align:left;padding:0 10px;margin:0;line-height:36px;font-size:14px;color:#2c3e50}.light-mode .el-upload-cover+.el-upload__inner{opacity:0;position:relative;z-index:1}.light-mode .el-progress{position:relative;line-height:1}.light-mode .el-progress__text{font-size:14px;color:#606266;display:inline-block;vertical-align:middle;margin-left:10px;line-height:1}.light-mode .el-progress__text i{vertical-align:middle;display:block}.light-mode .el-progress--circle,.light-mode .el-progress--dashboard{display:inline-block}.light-mode .el-progress--circle .el-progress__text,.light-mode .el-progress--dashboard .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%)}.light-mode .el-progress--circle .el-progress__text i,.light-mode .el-progress--dashboard .el-progress__text i{vertical-align:middle;display:inline-block}.light-mode .el-progress--without-text .el-progress__text{display:none}.light-mode .el-progress--without-text .el-progress-bar{padding-right:0;margin-right:0;display:block}.light-mode .el-progress-bar,.light-mode .el-progress-bar__inner::after,.light-mode .el-progress-bar__innerText,.light-mode .el-spinner{display:inline-block;vertical-align:middle}.light-mode .el-progress--text-inside .el-progress-bar{padding-right:0;margin-right:0}.light-mode .el-progress.is-success .el-progress-bar__inner{background-color:#67c23a}.light-mode .el-progress.is-success .el-progress__text{color:#67c23a}.light-mode .el-progress.is-warning .el-progress-bar__inner{background-color:#e7c000}.light-mode .el-progress.is-warning .el-progress__text{color:#e7c000}.light-mode .el-progress.is-exception .el-progress-bar__inner{background-color:#c00}.light-mode .el-progress.is-exception .el-progress__text{color:#c00}.light-mode .el-progress-bar{padding-right:50px;width:100%;margin-right:-55px;-webkit-box-sizing:border-box;box-sizing:border-box}.light-mode .el-progress-bar__outer{height:6px;border-radius:100px;background-color:#ebeef5;overflow:hidden;position:relative;vertical-align:middle}.light-mode .el-progress-bar__inner{position:absolute;left:0;top:0;height:100%;background-color:#282c34;text-align:right;border-radius:100px;line-height:1;white-space:nowrap;-webkit-transition:width .6s ease;transition:width .6s ease}.light-mode .el-card,.light-mode .el-message{border-radius:4px;overflow:hidden}.light-mode .el-progress-bar__inner::after{height:100%}.light-mode .el-progress-bar__innerText{color:#fff;font-size:12px;margin:0 5px}@keyframes progress{0%{background-position:0 0}100%{background-position:32px 0}}.light-mode .el-time-spinner{width:100%;white-space:nowrap}.light-mode .el-spinner-inner{-webkit-animation:rotate 2s linear infinite;animation:rotate 2s linear infinite;width:50px;height:50px}.light-mode .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}}.light-mode .el-message{min-width:380px;-webkit-box-sizing:border-box;box-sizing:border-box;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,top .4s,-webkit-transform .4s;transition:opacity .3s,top .4s,-webkit-transform .4s;transition:opacity .3s,transform .4s,top .4s;transition:opacity .3s,transform .4s,top .4s,-webkit-transform .4s;padding:15px 15px 15px 20px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.light-mode .el-message.is-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.light-mode .el-message.is-closable .el-message__content{padding-right:16px}.light-mode .el-message p{margin:0}.light-mode .el-message--info .el-message__content{color:#909399}.light-mode .el-message--success{background-color:#f0f9eb;border-color:#e1f3d8}.light-mode .el-message--success .el-message__content{color:#67c23a}.light-mode .el-message--warning{background-color:#fdf9e6;border-color:#faf2cc}.light-mode .el-message--warning .el-message__content{color:#e7c000}.light-mode .el-message--error{background-color:#fae6e6;border-color:#f5cccc}.light-mode .el-message--error .el-message__content{color:#c00}.light-mode .el-message__icon{margin-right:10px}.light-mode .el-message__content{padding:0;font-size:14px;line-height:1}.light-mode .el-message__closeBtn{position:absolute;top:50%;right:15px;-webkit-transform:translateY(-50%);transform:translateY(-50%);cursor:pointer;color:#c0c4cc;font-size:16px}.light-mode .el-message__closeBtn:hover{color:#909399}.light-mode .el-message .el-icon-success{color:#67c23a}.light-mode .el-message .el-icon-error{color:#c00}.light-mode .el-message .el-icon-info{color:#909399}.light-mode .el-message .el-icon-warning{color:#e7c000}.light-mode .el-message-fade-enter,.light-mode .el-message-fade-leave-active{opacity:0;-webkit-transform:translate(-50%,-100%);transform:translate(-50%,-100%)}.light-mode .el-badge{position:relative;vertical-align:middle;display:inline-block}.light-mode .el-badge__content{background-color:#c00;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}.light-mode .el-badge__content.is-fixed{position:absolute;top:0;right:10px;-webkit-transform:translateY(-50%) translateX(100%);transform:translateY(-50%) translateX(100%)}.light-mode .el-rate__icon,.light-mode .el-rate__item{position:relative;display:inline-block}.light-mode .el-badge__content.is-fixed.is-dot{right:5px}.light-mode .el-badge__content.is-dot{height:8px;width:8px;padding:0;right:0;border-radius:50%}.light-mode .el-badge__content--primary{background-color:#282c34}.light-mode .el-badge__content--success{background-color:#67c23a}.light-mode .el-badge__content--warning{background-color:#e7c000}.light-mode .el-badge__content--info{background-color:#909399}.light-mode .el-badge__content--danger{background-color:#c00}.light-mode .el-card{border:1px solid #ebeef5;background-color:#fff;color:#2c3e50;-webkit-transition:.3s;transition:.3s}.light-mode .el-card.is-always-shadow,.light-mode .el-card.is-hover-shadow:focus,.light-mode .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)}.light-mode .el-card__header{padding:18px 20px;border-bottom:1px solid #ebeef5;-webkit-box-sizing:border-box;box-sizing:border-box}.light-mode .el-card__body{padding:20px}.light-mode .el-rate{height:20px;line-height:1}.light-mode .el-rate__item{font-size:0;vertical-align:middle}.light-mode .el-rate__icon{font-size:18px;margin-right:6px;color:#c0c4cc;-webkit-transition:.3s;transition:.3s}.light-mode .el-rate__decimal,.light-mode .el-rate__icon .path2{position:absolute;top:0;left:0}.light-mode .el-rate__icon.hover{-webkit-transform:scale(1.15);transform:scale(1.15)}.light-mode .el-rate__decimal{display:inline-block;overflow:hidden}.light-mode .el-step.is-vertical,.light-mode .el-steps{display:-webkit-box;display:-ms-flexbox}.light-mode .el-rate__text{font-size:14px;vertical-align:middle}.light-mode .el-steps{display:flex}.light-mode .el-steps--simple{padding:13px 8%;border-radius:4px;background:#f5f7fa}.light-mode .el-steps--horizontal{white-space:nowrap}.light-mode .el-steps--vertical{height:100%;-webkit-box-orient:vertical;-ms-flex-flow:column;flex-flow:column}.light-mode .el-step{position:relative;-ms-flex-negative:1;flex-shrink:1}.light-mode .el-step:last-of-type .el-step__line{display:none}.light-mode .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}.light-mode .el-step:last-of-type .el-step__description,.light-mode .el-step:last-of-type .el-step__main{padding-right:0}.light-mode .el-step__head{position:relative;width:100%}.light-mode .el-step__head.is-process{color:#2c3e50;border-color:#2c3e50}.light-mode .el-step__head.is-wait{color:#c0c4cc;border-color:#c0c4cc}.light-mode .el-step__head.is-success{color:#67c23a;border-color:#67c23a}.light-mode .el-step__head.is-error{color:#c00;border-color:#c00}.light-mode .el-step__head.is-finish{color:#282c34;border-color:#282c34}.light-mode .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}.light-mode .el-step__icon.is-text{border-radius:50%;border:2px solid;border-color:inherit}.light-mode .el-step__icon.is-icon{width:40px}.light-mode .el-step__icon-inner{display:inline-block;user-select:none;text-align:center;font-weight:700;line-height:1;color:inherit}.light-mode .el-button,.light-mode .el-checkbox,.light-mode .el-image-viewer__btn{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.light-mode .el-step__icon-inner[class*=el-icon]:not(.is-status){font-size:25px;font-weight:400}.light-mode .el-step__icon-inner.is-status{-webkit-transform:translateY(1px);transform:translateY(1px)}.light-mode .el-step__line{position:absolute;border-color:inherit;background-color:#c0c4cc}.light-mode .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}.light-mode .el-step__main{white-space:normal;text-align:left}.light-mode .el-step__title{font-size:16px;line-height:38px}.light-mode .el-step__title.is-process{font-weight:700;color:#2c3e50}.light-mode .el-step__title.is-wait{color:#c0c4cc}.light-mode .el-step__title.is-success{color:#67c23a}.light-mode .el-step__title.is-error{color:#c00}.light-mode .el-step__title.is-finish{color:#282c34}.light-mode .el-step__description{padding-right:10%;margin-top:-5px;font-size:12px;line-height:20px;font-weight:400}.light-mode .el-step__description.is-process{color:#2c3e50}.light-mode .el-step__description.is-wait{color:#c0c4cc}.light-mode .el-step__description.is-success{color:#67c23a}.light-mode .el-step__description.is-error{color:#c00}.light-mode .el-step__description.is-finish{color:#282c34}.light-mode .el-step.is-horizontal{display:inline-block}.light-mode .el-step.is-horizontal .el-step__line{height:2px;top:11px;left:0;right:0}.light-mode .el-step.is-vertical{display:flex}.light-mode .el-step.is-vertical .el-step__head{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;width:24px}.light-mode .el-step.is-vertical .el-step__main{padding-left:10px;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.light-mode .el-step.is-vertical .el-step__title{line-height:24px;padding-bottom:8px}.light-mode .el-step.is-vertical .el-step__line{width:2px;top:0;bottom:0;left:11px}.light-mode .el-step.is-vertical .el-step__icon.is-icon{width:24px}.light-mode .el-step.is-center .el-step__head,.light-mode .el-step.is-center .el-step__main{text-align:center}.light-mode .el-step.is-center .el-step__description{padding-left:20%;padding-right:20%}.light-mode .el-step.is-center .el-step__line{left:50%;right:-50%}.light-mode .el-step.is-simple{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.light-mode .el-step.is-simple .el-step__head{width:auto;font-size:0;padding-right:10px}.light-mode .el-step.is-simple .el-step__icon{background:0 0;width:16px;height:16px;font-size:12px}.light-mode .el-step.is-simple .el-step__icon-inner[class*=el-icon]:not(.is-status){font-size:18px}.light-mode .el-step.is-simple .el-step__icon-inner.is-status{-webkit-transform:scale(.8) translateY(1px);transform:scale(.8) translateY(1px)}.light-mode .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}.light-mode .el-step.is-simple .el-step__title{font-size:16px;line-height:20px}.light-mode .el-step.is-simple:not(:last-of-type) .el-step__title{max-width:50%;word-break:break-all}.light-mode .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}.light-mode .el-step.is-simple .el-step__arrow::after,.light-mode .el-step.is-simple .el-step__arrow::before{content:'';display:inline-block;position:absolute;height:15px;width:1px;background:#c0c4cc}.light-mode .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}.light-mode .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%}.light-mode .el-step.is-simple:last-of-type .el-step__arrow{display:none}.light-mode .el-carousel{position:relative}.light-mode .el-carousel--horizontal{overflow-x:hidden}.light-mode .el-carousel--vertical{overflow-y:hidden}.light-mode .el-carousel__container{position:relative;height:300px}.light-mode .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}.light-mode .el-carousel__arrow--left{left:16px}.light-mode .el-carousel__arrow--right{right:16px}.light-mode .el-carousel__arrow:hover{background-color:rgba(31,45,61,.23)}.light-mode .el-carousel__arrow i{cursor:pointer}.light-mode .el-carousel__indicators{position:absolute;list-style:none;margin:0;padding:0;z-index:2}.light-mode .el-carousel__indicators--horizontal{bottom:0;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.light-mode .el-carousel__indicators--vertical{right:0;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.light-mode .el-carousel__indicators--outside{bottom:26px;text-align:center;position:static;-webkit-transform:none;transform:none}.light-mode .el-carousel__indicators--outside .el-carousel__indicator:hover button{opacity:.64}.light-mode .el-carousel__indicators--outside button{background-color:#c0c4cc;opacity:.24}.light-mode .el-carousel__indicators--labels{left:0;right:0;-webkit-transform:none;transform:none;text-align:center}.light-mode .el-carousel__indicators--labels .el-carousel__button{height:auto;width:auto;padding:2px 18px;font-size:12px}.light-mode .el-carousel__indicators--labels .el-carousel__indicator{padding:6px 4px}.light-mode .el-carousel__indicator{background-color:transparent;cursor:pointer}.light-mode .el-carousel__indicator:hover button{opacity:.72}.light-mode .el-carousel__indicator--horizontal{display:inline-block;padding:12px 4px}.light-mode .el-carousel__indicator--vertical{padding:4px 12px}.light-mode .el-carousel__indicator--vertical .el-carousel__button{width:2px;height:15px}.light-mode .el-carousel__indicator.is-active button{opacity:1}.light-mode .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}.light-mode .el-carousel__item,.light-mode .el-carousel__mask{height:100%;top:0;left:0;position:absolute}.light-mode .carousel-arrow-left-enter,.light-mode .carousel-arrow-left-leave-active{-webkit-transform:translateY(-50%) translateX(-10px);transform:translateY(-50%) translateX(-10px);opacity:0}.light-mode .carousel-arrow-right-enter,.light-mode .carousel-arrow-right-leave-active{-webkit-transform:translateY(-50%) translateX(10px);transform:translateY(-50%) translateX(10px);opacity:0}.light-mode .el-carousel__item{width:100%;display:inline-block;overflow:hidden;z-index:0}.light-mode .el-carousel__item.is-active{z-index:2}.light-mode .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}.light-mode .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}.light-mode .el-carousel__item--card.is-in-stage{cursor:pointer;z-index:1}.light-mode .el-carousel__item--card.is-in-stage.is-hover .el-carousel__mask,.light-mode .el-carousel__item--card.is-in-stage:hover .el-carousel__mask{opacity:.12}.light-mode .el-carousel__item--card.is-active{z-index:2}.light-mode .el-carousel__mask{width:100%;background-color:#fff;opacity:.24;-webkit-transition:.2s;transition:.2s}.light-mode .el-fade-in-enter,.light-mode .el-fade-in-leave-active,.light-mode .el-fade-in-linear-enter,.light-mode .el-fade-in-linear-leave,.light-mode .el-fade-in-linear-leave-active,.light-mode .fade-in-linear-enter,.light-mode .fade-in-linear-leave,.light-mode .fade-in-linear-leave-active{opacity:0}.light-mode .fade-in-linear-enter-active,.light-mode .fade-in-linear-leave-active{-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.light-mode .el-fade-in-linear-enter-active,.light-mode .el-fade-in-linear-leave-active{-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.light-mode .el-fade-in-enter-active,.light-mode .el-fade-in-leave-active{-webkit-transition:all .3s cubic-bezier(.55,0,.1,1);transition:all .3s cubic-bezier(.55,0,.1,1)}.light-mode .el-zoom-in-center-enter-active,.light-mode .el-zoom-in-center-leave-active{-webkit-transition:all .3s cubic-bezier(.55,0,.1,1);transition:all .3s cubic-bezier(.55,0,.1,1)}.light-mode .el-zoom-in-center-enter,.light-mode .el-zoom-in-center-leave-active{opacity:0;-webkit-transform:scaleX(0);transform:scaleX(0)}.light-mode .el-zoom-in-top-enter-active,.light-mode .el-zoom-in-top-leave-active{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);-webkit-transform-origin:center top;transform-origin:center top}.light-mode .el-zoom-in-top-enter,.light-mode .el-zoom-in-top-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.light-mode .el-zoom-in-bottom-enter-active,.light-mode .el-zoom-in-bottom-leave-active{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);-webkit-transform-origin:center bottom;transform-origin:center bottom}.light-mode .el-zoom-in-bottom-enter,.light-mode .el-zoom-in-bottom-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.light-mode .el-zoom-in-left-enter-active,.light-mode .el-zoom-in-left-leave-active{opacity:1;-webkit-transform:scale(1,1);transform:scale(1,1);-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);-webkit-transform-origin:top left;transform-origin:top left}.light-mode .el-zoom-in-left-enter,.light-mode .el-zoom-in-left-leave-active{opacity:0;-webkit-transform:scale(.45,.45);transform:scale(.45,.45)}.light-mode .collapse-transition{-webkit-transition:.3s height ease-in-out,.3s padding-top ease-in-out,.3s padding-bottom ease-in-out;transition:.3s height ease-in-out,.3s padding-top ease-in-out,.3s padding-bottom ease-in-out}.light-mode .horizontal-collapse-transition{-webkit-transition:.3s width ease-in-out,.3s padding-left ease-in-out,.3s padding-right ease-in-out;transition:.3s width ease-in-out,.3s padding-left ease-in-out,.3s padding-right ease-in-out}.light-mode .el-list-enter-active,.light-mode .el-list-leave-active{-webkit-transition:all 1s;transition:all 1s}.light-mode .el-list-enter,.light-mode .el-list-leave-active{opacity:0;-webkit-transform:translateY(-30px);transform:translateY(-30px)}.light-mode .el-opacity-transition{-webkit-transition:opacity .3s cubic-bezier(.55,0,.1,1);transition:opacity .3s cubic-bezier(.55,0,.1,1)}.light-mode .el-collapse{border-top:1px solid #ebeef5;border-bottom:1px solid #ebeef5}.light-mode .el-collapse-item.is-disabled .el-collapse-item__header{color:#bbb;cursor:not-allowed}.light-mode .el-collapse-item__header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:48px;line-height:48px;background-color:#fff;color:#2c3e50;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}.light-mode .el-collapse-item__arrow{margin:0 8px 0 auto;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;font-weight:300}.light-mode .el-collapse-item__arrow.is-active{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.light-mode .el-collapse-item__header.focusing:focus:not(:hover){color:#282c34}.light-mode .el-collapse-item__header.is-active{border-bottom-color:transparent}.light-mode .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}.light-mode .el-cascader__tags,.light-mode .el-tag{-webkit-box-sizing:border-box}.light-mode .el-collapse-item__content{padding-bottom:25px;font-size:13px;color:#2c3e50;line-height:1.769230769230769}.light-mode .el-collapse-item:last-child{margin-bottom:-1px}.light-mode .el-popper .popper__arrow,.light-mode .el-popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.light-mode .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))}.light-mode .el-popper .popper__arrow::after{content:\" \";border-width:6px}.light-mode .el-popper[x-placement^=top]{margin-bottom:12px}.light-mode .el-popper[x-placement^=top] .popper__arrow{bottom:-6px;left:50%;margin-right:3px;border-top-color:#ebeef5;border-bottom-width:0}.light-mode .el-popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-6px;border-top-color:#fff;border-bottom-width:0}.light-mode .el-popper[x-placement^=bottom]{margin-top:12px}.light-mode .el-popper[x-placement^=bottom] .popper__arrow{top:-6px;left:50%;margin-right:3px;border-top-width:0;border-bottom-color:#ebeef5}.light-mode .el-popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-6px;border-top-width:0;border-bottom-color:#fff}.light-mode .el-popper[x-placement^=right]{margin-left:12px}.light-mode .el-popper[x-placement^=right] .popper__arrow{top:50%;left:-6px;margin-bottom:3px;border-right-color:#ebeef5;border-left-width:0}.light-mode .el-popper[x-placement^=right] .popper__arrow::after{bottom:-6px;left:1px;border-right-color:#fff;border-left-width:0}.light-mode .el-popper[x-placement^=left]{margin-right:12px}.light-mode .el-popper[x-placement^=left] .popper__arrow{top:50%;right:-6px;margin-bottom:3px;border-right-width:0;border-left-color:#ebeef5}.light-mode .el-popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-6px;margin-left:-6px;border-right-width:0;border-left-color:#fff}.light-mode .el-tag{background-color:#eaeaeb;border-color:#d4d5d6;display:inline-block;height:32px;padding:0 10px;line-height:30px;font-size:12px;color:#282c34;border-width:1px;border-style:solid;border-radius:4px;box-sizing:border-box;white-space:nowrap}.light-mode .el-tag.is-hit{border-color:#282c34}.light-mode .el-tag .el-tag__close{color:#282c34}.light-mode .el-tag .el-tag__close:hover{color:#fff;background-color:#282c34}.light-mode .el-tag.el-tag--info{background-color:#f4f4f5;border-color:#e9e9eb;color:#909399}.light-mode .el-tag.el-tag--info.is-hit{border-color:#909399}.light-mode .el-tag.el-tag--info .el-tag__close{color:#909399}.light-mode .el-tag.el-tag--info .el-tag__close:hover{color:#fff;background-color:#909399}.light-mode .el-tag.el-tag--success{background-color:#f0f9eb;border-color:#e1f3d8;color:#67c23a}.light-mode .el-tag.el-tag--success.is-hit{border-color:#67c23a}.light-mode .el-tag.el-tag--success .el-tag__close{color:#67c23a}.light-mode .el-tag.el-tag--success .el-tag__close:hover{color:#fff;background-color:#67c23a}.light-mode .el-tag.el-tag--warning{background-color:#fdf9e6;border-color:#faf2cc;color:#e7c000}.light-mode .el-tag.el-tag--warning.is-hit{border-color:#e7c000}.light-mode .el-tag.el-tag--warning .el-tag__close{color:#e7c000}.light-mode .el-tag.el-tag--warning .el-tag__close:hover{color:#fff;background-color:#e7c000}.light-mode .el-tag.el-tag--danger{background-color:#fae6e6;border-color:#f5cccc;color:#c00}.light-mode .el-tag.el-tag--danger.is-hit{border-color:#c00}.light-mode .el-tag.el-tag--danger .el-tag__close{color:#c00}.light-mode .el-tag.el-tag--danger .el-tag__close:hover{color:#fff;background-color:#c00}.light-mode .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}.light-mode .el-tag .el-icon-close::before{display:block}.light-mode .el-tag--dark{background-color:#282c34;border-color:#282c34;color:#fff}.light-mode .el-tag--dark.is-hit{border-color:#282c34}.light-mode .el-tag--dark .el-tag__close{color:#fff}.light-mode .el-tag--dark .el-tag__close:hover{color:#fff;background-color:#53565d}.light-mode .el-tag--dark.el-tag--info{background-color:#909399;border-color:#909399;color:#fff}.light-mode .el-tag--dark.el-tag--info.is-hit{border-color:#909399}.light-mode .el-tag--dark.el-tag--info .el-tag__close{color:#fff}.light-mode .el-tag--dark.el-tag--info .el-tag__close:hover{color:#fff;background-color:#a6a9ad}.light-mode .el-tag--dark.el-tag--success{background-color:#67c23a;border-color:#67c23a;color:#fff}.light-mode .el-tag--dark.el-tag--success.is-hit{border-color:#67c23a}.light-mode .el-tag--dark.el-tag--success .el-tag__close{color:#fff}.light-mode .el-tag--dark.el-tag--success .el-tag__close:hover{color:#fff;background-color:#85ce61}.light-mode .el-tag--dark.el-tag--warning{background-color:#e7c000;border-color:#e7c000;color:#fff}.light-mode .el-tag--dark.el-tag--warning.is-hit{border-color:#e7c000}.light-mode .el-tag--dark.el-tag--warning .el-tag__close{color:#fff}.light-mode .el-tag--dark.el-tag--warning .el-tag__close:hover{color:#fff;background-color:#eccd33}.light-mode .el-tag--dark.el-tag--danger{background-color:#c00;border-color:#c00;color:#fff}.light-mode .el-tag--dark.el-tag--danger.is-hit{border-color:#c00}.light-mode .el-tag--dark.el-tag--danger .el-tag__close{color:#fff}.light-mode .el-tag--dark.el-tag--danger .el-tag__close:hover{color:#fff;background-color:#d63333}.light-mode .el-tag--plain{background-color:#fff;border-color:#a9abae;color:#282c34}.light-mode .el-tag--plain.is-hit{border-color:#282c34}.light-mode .el-tag--plain .el-tag__close{color:#282c34}.light-mode .el-tag--plain .el-tag__close:hover{color:#fff;background-color:#282c34}.light-mode .el-tag--plain.el-tag--info{background-color:#fff;border-color:#d3d4d6;color:#909399}.light-mode .el-tag--plain.el-tag--info.is-hit{border-color:#909399}.light-mode .el-tag--plain.el-tag--info .el-tag__close{color:#909399}.light-mode .el-tag--plain.el-tag--info .el-tag__close:hover{color:#fff;background-color:#909399}.light-mode .el-tag--plain.el-tag--success{background-color:#fff;border-color:#c2e7b0;color:#67c23a}.light-mode .el-tag--plain.el-tag--success.is-hit{border-color:#67c23a}.light-mode .el-tag--plain.el-tag--success .el-tag__close{color:#67c23a}.light-mode .el-tag--plain.el-tag--success .el-tag__close:hover{color:#fff;background-color:#67c23a}.light-mode .el-tag--plain.el-tag--warning{background-color:#fff;border-color:#f5e699;color:#e7c000}.light-mode .el-tag--plain.el-tag--warning.is-hit{border-color:#e7c000}.light-mode .el-tag--plain.el-tag--warning .el-tag__close{color:#e7c000}.light-mode .el-tag--plain.el-tag--warning .el-tag__close:hover{color:#fff;background-color:#e7c000}.light-mode .el-tag--plain.el-tag--danger{background-color:#fff;border-color:#eb9999;color:#c00}.light-mode .el-tag--plain.el-tag--danger.is-hit{border-color:#c00}.light-mode .el-tag--plain.el-tag--danger .el-tag__close{color:#c00}.light-mode .el-tag--plain.el-tag--danger .el-tag__close:hover{color:#fff;background-color:#c00}.light-mode .el-tag--medium{height:28px;line-height:26px}.light-mode .el-tag--medium .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.light-mode .el-tag--small{height:24px;padding:0 8px;line-height:22px}.light-mode .el-tag--small .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.light-mode .el-tag--mini{height:20px;padding:0 5px;line-height:19px}.light-mode .el-tag--mini .el-icon-close{margin-left:-3px;-webkit-transform:scale(.7);transform:scale(.7)}.light-mode .el-cascader{display:inline-block;position:relative;font-size:14px;line-height:40px}.light-mode .el-cascader:not(.is-disabled):hover .el-input__inner{cursor:pointer;border-color:#c0c4cc}.light-mode .el-cascader .el-input .el-input__inner:focus,.light-mode .el-cascader .el-input.is-focus .el-input__inner{border-color:#282c34}.light-mode .el-cascader .el-input{cursor:pointer}.light-mode .el-cascader .el-input .el-input__inner{text-overflow:ellipsis}.light-mode .el-cascader .el-input .el-icon-arrow-down{-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;font-size:14px}.light-mode .el-cascader .el-input .el-icon-arrow-down.is-reverse{-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg)}.light-mode .el-cascader .el-input .el-icon-circle-close:hover{color:#909399}.light-mode .el-cascader--medium{font-size:14px;line-height:36px}.light-mode .el-cascader--small{font-size:13px;line-height:32px}.light-mode .el-cascader--mini{font-size:12px;line-height:28px}.light-mode .el-cascader.is-disabled .el-cascader__label{z-index:2;color:#c0c4cc}.light-mode .el-cascader__dropdown{margin:5px 0;font-size:14px;background:#fff;border:1px solid #e4e7ed;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)}.light-mode .el-cascader__tags{position:absolute;left:0;right:30px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;line-height:normal;text-align:left;box-sizing:border-box}.light-mode .el-cascader__tags .el-tag{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;max-width:100%;margin:2px 0 2px 6px;text-overflow:ellipsis;background:#f0f2f5}.light-mode .el-cascader__tags .el-tag:not(.is-hit){border-color:transparent}.light-mode .el-cascader__tags .el-tag>span{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:hidden;text-overflow:ellipsis}.light-mode .el-cascader__tags .el-tag .el-icon-close{-webkit-box-flex:0;-ms-flex:none;flex:none;background-color:#c0c4cc;color:#fff}.light-mode .el-cascader__tags .el-tag .el-icon-close:hover{background-color:#909399}.light-mode .el-cascader__suggestion-panel{border-radius:4px}.light-mode .el-cascader__suggestion-list{max-height:204px;margin:0;padding:6px 0;font-size:14px;color:#606266;text-align:center}.light-mode .el-cascader__suggestion-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:34px;padding:0 15px;text-align:left;outline:0;cursor:pointer}.light-mode .el-cascader__suggestion-item:focus,.light-mode .el-cascader__suggestion-item:hover{background:#f5f7fa}.light-mode .el-cascader__suggestion-item.is-checked{color:#282c34;font-weight:700}.light-mode .el-cascader__suggestion-item>span{margin-right:10px}.light-mode .el-cascader__empty-text{margin:10px 0;color:#c0c4cc}.light-mode .el-cascader__search-input{-webkit-box-flex:1;-ms-flex:1;flex:1;height:24px;min-width:60px;margin:2px 0 2px 15px;padding:0;color:#606266;border:none;outline:0;-webkit-box-sizing:border-box;box-sizing:border-box}.light-mode .el-cascader__search-input::-webkit-input-placeholder{color:#c0c4cc}.light-mode .el-cascader__search-input::-ms-input-placeholder{color:#c0c4cc}.light-mode .el-cascader__search-input::placeholder{color:#c0c4cc}.light-mode .el-color-predefine{display:-webkit-box;display:-ms-flexbox;display:flex;font-size:12px;margin-top:8px;width:280px}.light-mode .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}.light-mode .el-color-predefine__color-selector{margin:0 0 8px 8px;width:20px;height:20px;border-radius:4px;cursor:pointer}.light-mode .el-color-predefine__color-selector:nth-child(10n+1){margin-left:0}.light-mode .el-color-predefine__color-selector.selected{-webkit-box-shadow:0 0 3px 2px #282c34;box-shadow:0 0 3px 2px #282c34}.light-mode .el-color-predefine__color-selector>div{display:-webkit-box;display:-ms-flexbox;display:flex;height:100%;border-radius:3px}.light-mode .el-color-predefine__color-selector.is-alpha{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.light-mode .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}.light-mode .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%}.light-mode .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}.light-mode .el-color-hue-slider.is-vertical{width:12px;height:180px;padding:2px 0}.light-mode .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%)}.light-mode .el-color-hue-slider.is-vertical .el-color-hue-slider__thumb{left:0;top:0;width:100%;height:4px}.light-mode .el-color-svpanel{position:relative;width:280px;height:180px}.light-mode .el-color-svpanel__black,.light-mode .el-color-svpanel__white{position:absolute;top:0;left:0;right:0;bottom:0}.light-mode .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))}.light-mode .el-color-svpanel__black{background:-webkit-gradient(linear,left bottom,left top,from(#000),to(rgba(0,0,0,0)));background:linear-gradient(to top,#000,rgba(0,0,0,0))}.light-mode .el-color-svpanel__cursor{position:absolute}.light-mode .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)}.light-mode .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==)}.light-mode .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%}.light-mode .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}.light-mode .el-color-alpha-slider.is-vertical{width:20px;height:180px}.light-mode .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%)}.light-mode .el-color-alpha-slider.is-vertical .el-color-alpha-slider__thumb{left:0;top:0;width:100%;height:4px}.light-mode .el-color-dropdown{width:300px}.light-mode .el-color-dropdown__main-wrapper{margin-bottom:6px}.light-mode .el-color-dropdown__main-wrapper::after{content:\"\";display:table;clear:both}.light-mode .el-color-dropdown__btns{margin-top:6px;text-align:right}.light-mode .el-color-dropdown__value{float:left;line-height:26px;font-size:12px;color:#000;width:160px}.light-mode .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}.light-mode .el-color-dropdown__btn[disabled]{color:#ccc;cursor:not-allowed}.light-mode .el-color-dropdown__btn:hover{color:#282c34;border-color:#282c34}.light-mode .el-color-dropdown__link-btn{cursor:pointer;color:#282c34;text-decoration:none;padding:15px;font-size:12px}.light-mode .el-color-dropdown__link-btn:hover{color:tint(#282c34,20%)}.light-mode .el-color-picker{display:inline-block;position:relative;line-height:normal;height:40px}.light-mode .el-color-picker.is-disabled .el-color-picker__trigger{cursor:not-allowed}.light-mode .el-color-picker--medium{height:36px}.light-mode .el-color-picker--medium .el-color-picker__trigger{height:36px;width:36px}.light-mode .el-color-picker--medium .el-color-picker__mask{height:34px;width:34px}.light-mode .el-color-picker--small{height:32px}.light-mode .el-color-picker--small .el-color-picker__trigger{height:32px;width:32px}.light-mode .el-color-picker--small .el-color-picker__mask{height:30px;width:30px}.light-mode .el-color-picker--small .el-color-picker__empty,.light-mode .el-color-picker--small .el-color-picker__icon{-webkit-transform:translate3d(-50%,-50%,0) scale(.8);transform:translate3d(-50%,-50%,0) scale(.8)}.light-mode .el-color-picker--mini{height:28px}.light-mode .el-color-picker--mini .el-color-picker__trigger{height:28px;width:28px}.light-mode .el-color-picker--mini .el-color-picker__mask{height:26px;width:26px}.light-mode .el-color-picker--mini .el-color-picker__empty,.light-mode .el-color-picker--mini .el-color-picker__icon{-webkit-transform:translate3d(-50%,-50%,0) scale(.8);transform:translate3d(-50%,-50%,0) scale(.8)}.light-mode .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)}.light-mode .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}.light-mode .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}.light-mode .el-color-picker__color.is-alpha{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.light-mode .el-color-picker__color-inner{position:absolute;left:0;top:0;right:0;bottom:0}.light-mode .el-color-picker__empty,.light-mode .el-color-picker__icon{top:50%;left:50%;font-size:12px;position:absolute}.light-mode .el-color-picker__empty{color:#999;-webkit-transform:translate3d(-50%,-50%,0);transform:translate3d(-50%,-50%,0)}.light-mode .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}.light-mode .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)}.light-mode .el-textarea{position:relative;display:inline-block;width:100%;vertical-align:bottom;font-size:14px}.light-mode .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)}.light-mode .el-textarea__inner::-webkit-input-placeholder{color:#c0c4cc}.light-mode .el-textarea__inner::-ms-input-placeholder{color:#c0c4cc}.light-mode .el-textarea__inner::placeholder{color:#c0c4cc}.light-mode .el-textarea__inner:hover{border-color:#c0c4cc}.light-mode .el-textarea__inner:focus{outline:0;border-color:#282c34}.light-mode .el-textarea .el-input__count{color:#909399;background:#fff;position:absolute;font-size:12px;bottom:5px;right:10px}.light-mode .el-textarea.is-disabled .el-textarea__inner{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.light-mode .el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder{color:#c0c4cc}.light-mode .el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder{color:#c0c4cc}.light-mode .el-textarea.is-disabled .el-textarea__inner::placeholder{color:#c0c4cc}.light-mode .el-textarea.is-exceed .el-textarea__inner{border-color:#c00}.light-mode .el-textarea.is-exceed .el-input__count{color:#c00}.light-mode .el-input{position:relative;font-size:14px;display:inline-block;width:100%}.light-mode .el-input::-webkit-scrollbar{z-index:11;width:6px}.light-mode .el-input::-webkit-scrollbar:horizontal{height:6px}.light-mode .el-input::-webkit-scrollbar-thumb{border-radius:5px;width:6px;background:#b4bccc}.light-mode .el-input::-webkit-scrollbar-corner{background:#fff}.light-mode .el-input::-webkit-scrollbar-track{background:#fff}.light-mode .el-input::-webkit-scrollbar-track-piece{background:#fff;width:6px}.light-mode .el-input .el-input__clear{color:#c0c4cc;font-size:14px;cursor:pointer;-webkit-transition:color .2s cubic-bezier(.645,.045,.355,1);transition:color .2s cubic-bezier(.645,.045,.355,1)}.light-mode .el-input .el-input__clear:hover{color:#909399}.light-mode .el-input .el-input__count{height:100%;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#909399;font-size:12px}.light-mode .el-input .el-input__count .el-input__count-inner{background:#fff;line-height:initial;display:inline-block;padding:0 5px}.light-mode .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%}.light-mode .el-button,.light-mode .el-transfer-panel{-webkit-box-sizing:border-box}.light-mode .el-input__prefix,.light-mode .el-input__suffix{position:absolute;top:0;-webkit-transition:all .3s;height:100%;color:#c0c4cc;text-align:center}.light-mode .el-input__inner::-webkit-input-placeholder{color:#c0c4cc}.light-mode .el-input__inner::-ms-input-placeholder{color:#c0c4cc}.light-mode .el-input__inner::placeholder{color:#c0c4cc}.light-mode .el-input__inner:hover{border-color:#c0c4cc}.light-mode .el-input.is-active .el-input__inner,.light-mode .el-input__inner:focus{border-color:#282c34;outline:0}.light-mode .el-input__suffix{right:5px;transition:all .3s}.light-mode .el-input__suffix-inner{pointer-events:all}.light-mode .el-input__prefix{left:5px;transition:all .3s}.light-mode .el-input__icon{height:100%;width:25px;text-align:center;-webkit-transition:all .3s;transition:all .3s;line-height:40px}.light-mode .el-input__icon:after{content:'';height:100%;width:0;display:inline-block;vertical-align:middle}.light-mode .el-input__validateIcon{pointer-events:none}.light-mode .el-input.is-disabled .el-input__inner{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.light-mode .el-input.is-disabled .el-input__inner::-webkit-input-placeholder{color:#c0c4cc}.light-mode .el-input.is-disabled .el-input__inner::-ms-input-placeholder{color:#c0c4cc}.light-mode .el-input.is-disabled .el-input__inner::placeholder{color:#c0c4cc}.light-mode .el-input.is-disabled .el-input__icon{cursor:not-allowed}.light-mode .el-input.is-exceed .el-input__inner{border-color:#c00}.light-mode .el-input.is-exceed .el-input__suffix .el-input__count{color:#c00}.light-mode .el-input--suffix .el-input__inner{padding-right:30px}.light-mode .el-input--prefix .el-input__inner{padding-left:30px}.light-mode .el-input--medium{font-size:14px}.light-mode .el-input--medium .el-input__inner{height:36px;line-height:36px}.light-mode .el-input--medium .el-input__icon{line-height:36px}.light-mode .el-input--small{font-size:13px}.light-mode .el-input--small .el-input__inner{height:32px;line-height:32px}.light-mode .el-input--small .el-input__icon{line-height:32px}.light-mode .el-input--mini{font-size:12px}.light-mode .el-input--mini .el-input__inner{height:28px;line-height:28px}.light-mode .el-input--mini .el-input__icon{line-height:28px}.light-mode .el-input-group{line-height:normal;display:inline-table;width:100%;border-collapse:separate;border-spacing:0}.light-mode .el-input-group>.el-input__inner{vertical-align:middle;display:table-cell}.light-mode .el-input-group__append,.light-mode .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}.light-mode .el-input-group--prepend .el-input__inner,.light-mode .el-input-group__append{border-top-left-radius:0;border-bottom-left-radius:0}.light-mode .el-input-group--append .el-input__inner,.light-mode .el-input-group__prepend{border-top-right-radius:0;border-bottom-right-radius:0}.light-mode .el-input-group__append:focus,.light-mode .el-input-group__prepend:focus{outline:0}.light-mode .el-input-group__append .el-button,.light-mode .el-input-group__append .el-select,.light-mode .el-input-group__prepend .el-button,.light-mode .el-input-group__prepend .el-select{display:inline-block;margin:-10px -20px}.light-mode .el-input-group__append button.el-button,.light-mode .el-input-group__append div.el-select .el-input__inner,.light-mode .el-input-group__append div.el-select:hover .el-input__inner,.light-mode .el-input-group__prepend button.el-button,.light-mode .el-input-group__prepend div.el-select .el-input__inner,.light-mode .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}.light-mode .el-input-group__append .el-button,.light-mode .el-input-group__append .el-input,.light-mode .el-input-group__prepend .el-button,.light-mode .el-input-group__prepend .el-input{font-size:inherit}.light-mode .el-input-group__prepend{border-right:0}.light-mode .el-input-group__append{border-left:0}.light-mode .el-input-group--append .el-select .el-input.is-focus .el-input__inner,.light-mode .el-input-group--prepend .el-select .el-input.is-focus .el-input__inner{border-color:transparent}.light-mode .el-input__inner::-ms-clear{display:none;width:0;height:0}.light-mode .el-button{display:inline-block;line-height:1;white-space:nowrap;cursor:pointer;background:#fff;border:1px solid #dcdfe6;color:#606266;-webkit-appearance:none;text-align:center;box-sizing:border-box;outline:0;margin:0;-webkit-transition:.1s;transition:.1s;font-weight:500;padding:12px 20px;font-size:14px;border-radius:4px}.light-mode .el-button+.el-button{margin-left:10px}.light-mode .el-button:focus,.light-mode .el-button:hover{color:#282c34;border-color:#bfc0c2;background-color:#eaeaeb}.light-mode .el-button:active{color:#24282f;border-color:#24282f;outline:0}.light-mode .el-button::-moz-focus-inner{border:0}.light-mode .el-button [class*=el-icon-]+span{margin-left:5px}.light-mode .el-button.is-plain:focus,.light-mode .el-button.is-plain:hover{background:#fff;border-color:#282c34;color:#282c34}.light-mode .el-button.is-active,.light-mode .el-button.is-plain:active{color:#24282f;border-color:#24282f}.light-mode .el-button.is-plain:active{background:#fff;outline:0}.light-mode .el-button.is-disabled,.light-mode .el-button.is-disabled:focus,.light-mode .el-button.is-disabled:hover{color:#c0c4cc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#ebeef5}.light-mode .el-link,.light-mode .el-transfer-panel__filter .el-icon-circle-close{cursor:pointer}.light-mode .el-button.is-disabled.el-button--text{background-color:transparent}.light-mode .el-button.is-disabled.is-plain,.light-mode .el-button.is-disabled.is-plain:focus,.light-mode .el-button.is-disabled.is-plain:hover{background-color:#fff;border-color:#ebeef5;color:#c0c4cc}.light-mode .el-button.is-loading{position:relative;pointer-events:none}.light-mode .el-button.is-loading:before{pointer-events:none;content:'';position:absolute;left:-1px;top:-1px;right:-1px;bottom:-1px;border-radius:inherit;background-color:rgba(255,255,255,.35)}.light-mode .el-button.is-round{border-radius:20px;padding:12px 23px}.light-mode .el-button.is-circle{border-radius:50%;padding:12px}.light-mode .el-button--primary{color:#fff;background-color:#282c34;border-color:#282c34}.light-mode .el-button--primary:focus,.light-mode .el-button--primary:hover{background:#53565d;border-color:#53565d;color:#fff}.light-mode .el-button--primary.is-active,.light-mode .el-button--primary:active{background:#24282f;border-color:#24282f;color:#fff}.light-mode .el-button--primary:active{outline:0}.light-mode .el-button--primary.is-disabled,.light-mode .el-button--primary.is-disabled:active,.light-mode .el-button--primary.is-disabled:focus,.light-mode .el-button--primary.is-disabled:hover{color:#fff;background-color:#94969a;border-color:#94969a}.light-mode .el-button--primary.is-plain{color:#282c34;background:#eaeaeb;border-color:#a9abae}.light-mode .el-button--primary.is-plain:focus,.light-mode .el-button--primary.is-plain:hover{background:#282c34;border-color:#282c34;color:#fff}.light-mode .el-button--primary.is-plain:active{background:#24282f;border-color:#24282f;color:#fff;outline:0}.light-mode .el-button--primary.is-plain.is-disabled,.light-mode .el-button--primary.is-plain.is-disabled:active,.light-mode .el-button--primary.is-plain.is-disabled:focus,.light-mode .el-button--primary.is-plain.is-disabled:hover{color:#7e8085;background-color:#eaeaeb;border-color:#d4d5d6}.light-mode .el-button--success{color:#fff;background-color:#67c23a;border-color:#67c23a}.light-mode .el-button--success:focus,.light-mode .el-button--success:hover{background:#85ce61;border-color:#85ce61;color:#fff}.light-mode .el-button--success.is-active,.light-mode .el-button--success:active{background:#5daf34;border-color:#5daf34;color:#fff}.light-mode .el-button--success:active{outline:0}.light-mode .el-button--success.is-disabled,.light-mode .el-button--success.is-disabled:active,.light-mode .el-button--success.is-disabled:focus,.light-mode .el-button--success.is-disabled:hover{color:#fff;background-color:#b3e19d;border-color:#b3e19d}.light-mode .el-button--success.is-plain{color:#67c23a;background:#f0f9eb;border-color:#c2e7b0}.light-mode .el-button--success.is-plain:focus,.light-mode .el-button--success.is-plain:hover{background:#67c23a;border-color:#67c23a;color:#fff}.light-mode .el-button--success.is-plain:active{background:#5daf34;border-color:#5daf34;color:#fff;outline:0}.light-mode .el-button--success.is-plain.is-disabled,.light-mode .el-button--success.is-plain.is-disabled:active,.light-mode .el-button--success.is-plain.is-disabled:focus,.light-mode .el-button--success.is-plain.is-disabled:hover{color:#a4da89;background-color:#f0f9eb;border-color:#e1f3d8}.light-mode .el-button--warning{color:#fff;background-color:#e7c000;border-color:#e7c000}.light-mode .el-button--warning:focus,.light-mode .el-button--warning:hover{background:#eccd33;border-color:#eccd33;color:#fff}.light-mode .el-button--warning.is-active,.light-mode .el-button--warning:active{background:#d0ad00;border-color:#d0ad00;color:#fff}.light-mode .el-button--warning:active{outline:0}.light-mode .el-button--warning.is-disabled,.light-mode .el-button--warning.is-disabled:active,.light-mode .el-button--warning.is-disabled:focus,.light-mode .el-button--warning.is-disabled:hover{color:#fff;background-color:#f3e080;border-color:#f3e080}.light-mode .el-button--warning.is-plain{color:#e7c000;background:#fdf9e6;border-color:#f5e699}.light-mode .el-button--warning.is-plain:focus,.light-mode .el-button--warning.is-plain:hover{background:#e7c000;border-color:#e7c000;color:#fff}.light-mode .el-button--warning.is-plain:active{background:#d0ad00;border-color:#d0ad00;color:#fff;outline:0}.light-mode .el-button--warning.is-plain.is-disabled,.light-mode .el-button--warning.is-plain.is-disabled:active,.light-mode .el-button--warning.is-plain.is-disabled:focus,.light-mode .el-button--warning.is-plain.is-disabled:hover{color:#f1d966;background-color:#fdf9e6;border-color:#faf2cc}.light-mode .el-button--danger{color:#fff;background-color:#c00;border-color:#c00}.light-mode .el-button--danger:focus,.light-mode .el-button--danger:hover{background:#d63333;border-color:#d63333;color:#fff}.light-mode .el-button--danger.is-active,.light-mode .el-button--danger:active{background:#b80000;border-color:#b80000;color:#fff}.light-mode .el-button--danger:active{outline:0}.light-mode .el-button--danger.is-disabled,.light-mode .el-button--danger.is-disabled:active,.light-mode .el-button--danger.is-disabled:focus,.light-mode .el-button--danger.is-disabled:hover{color:#fff;background-color:#e68080;border-color:#e68080}.light-mode .el-button--danger.is-plain{color:#c00;background:#fae6e6;border-color:#eb9999}.light-mode .el-button--danger.is-plain:focus,.light-mode .el-button--danger.is-plain:hover{background:#c00;border-color:#c00;color:#fff}.light-mode .el-button--danger.is-plain:active{background:#b80000;border-color:#b80000;color:#fff;outline:0}.light-mode .el-button--danger.is-plain.is-disabled,.light-mode .el-button--danger.is-plain.is-disabled:active,.light-mode .el-button--danger.is-plain.is-disabled:focus,.light-mode .el-button--danger.is-plain.is-disabled:hover{color:#e06666;background-color:#fae6e6;border-color:#f5cccc}.light-mode .el-button--info{color:#fff;background-color:#909399;border-color:#909399}.light-mode .el-button--info:focus,.light-mode .el-button--info:hover{background:#a6a9ad;border-color:#a6a9ad;color:#fff}.light-mode .el-button--info.is-active,.light-mode .el-button--info:active{background:#82848a;border-color:#82848a;color:#fff}.light-mode .el-button--info:active{outline:0}.light-mode .el-button--info.is-disabled,.light-mode .el-button--info.is-disabled:active,.light-mode .el-button--info.is-disabled:focus,.light-mode .el-button--info.is-disabled:hover{color:#fff;background-color:#c8c9cc;border-color:#c8c9cc}.light-mode .el-button--info.is-plain{color:#909399;background:#f4f4f5;border-color:#d3d4d6}.light-mode .el-button--info.is-plain:focus,.light-mode .el-button--info.is-plain:hover{background:#909399;border-color:#909399;color:#fff}.light-mode .el-button--info.is-plain:active{background:#82848a;border-color:#82848a;color:#fff;outline:0}.light-mode .el-button--info.is-plain.is-disabled,.light-mode .el-button--info.is-plain.is-disabled:active,.light-mode .el-button--info.is-plain.is-disabled:focus,.light-mode .el-button--info.is-plain.is-disabled:hover{color:#bcbec2;background-color:#f4f4f5;border-color:#e9e9eb}.light-mode .el-button--text,.light-mode .el-button--text.is-disabled,.light-mode .el-button--text.is-disabled:focus,.light-mode .el-button--text.is-disabled:hover,.light-mode .el-button--text:active{border-color:transparent}.light-mode .el-button--medium{padding:10px 20px;font-size:14px;border-radius:4px}.light-mode .el-button--mini,.light-mode .el-button--small{font-size:12px;border-radius:3px}.light-mode .el-button--medium.is-round{padding:10px 20px}.light-mode .el-button--medium.is-circle{padding:10px}.light-mode .el-button--small,.light-mode .el-button--small.is-round{padding:9px 15px}.light-mode .el-button--small.is-circle{padding:9px}.light-mode .el-button--mini,.light-mode .el-button--mini.is-round{padding:7px 15px}.light-mode .el-button--mini.is-circle{padding:7px}.light-mode .el-button--text{color:#282c34;background:0 0;padding-left:0;padding-right:0}.light-mode .el-button--text:focus,.light-mode .el-button--text:hover{color:#53565d;border-color:transparent;background-color:transparent}.light-mode .el-button--text:active{color:#24282f;background-color:transparent}.light-mode .el-button-group{display:inline-block;vertical-align:middle}.light-mode .el-button-group::after,.light-mode .el-button-group::before{display:table;content:\"\"}.light-mode .el-button-group::after{clear:both}.light-mode .el-button-group>.el-button{float:left;position:relative}.light-mode .el-button-group>.el-button+.el-button{margin-left:0}.light-mode .el-button-group>.el-button.is-disabled{z-index:1}.light-mode .el-button-group>.el-button:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.light-mode .el-button-group>.el-button:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.light-mode .el-button-group>.el-button:first-child:last-child{border-radius:4px}.light-mode .el-button-group>.el-button:first-child:last-child.is-round{border-radius:20px}.light-mode .el-button-group>.el-button:first-child:last-child.is-circle{border-radius:50%}.light-mode .el-button-group>.el-button:not(:first-child):not(:last-child){border-radius:0}.light-mode .el-button-group>.el-button:not(:last-child){margin-right:-1px}.light-mode .el-button-group>.el-button.is-active,.light-mode .el-button-group>.el-button:active,.light-mode .el-button-group>.el-button:focus,.light-mode .el-button-group>.el-button:hover{z-index:1}.light-mode .el-button-group>.el-dropdown>.el-button{border-top-left-radius:0;border-bottom-left-radius:0;border-left-color:rgba(255,255,255,.5)}.light-mode .el-button-group .el-button--primary:first-child{border-right-color:rgba(255,255,255,.5)}.light-mode .el-button-group .el-button--primary:last-child{border-left-color:rgba(255,255,255,.5)}.light-mode .el-button-group .el-button--primary:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.light-mode .el-button-group .el-button--success:first-child{border-right-color:rgba(255,255,255,.5)}.light-mode .el-button-group .el-button--success:last-child{border-left-color:rgba(255,255,255,.5)}.light-mode .el-button-group .el-button--success:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.light-mode .el-button-group .el-button--warning:first-child{border-right-color:rgba(255,255,255,.5)}.light-mode .el-button-group .el-button--warning:last-child{border-left-color:rgba(255,255,255,.5)}.light-mode .el-button-group .el-button--warning:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.light-mode .el-button-group .el-button--danger:first-child{border-right-color:rgba(255,255,255,.5)}.light-mode .el-button-group .el-button--danger:last-child{border-left-color:rgba(255,255,255,.5)}.light-mode .el-button-group .el-button--danger:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.light-mode .el-button-group .el-button--info:first-child{border-right-color:rgba(255,255,255,.5)}.light-mode .el-button-group .el-button--info:last-child{border-left-color:rgba(255,255,255,.5)}.light-mode .el-button-group .el-button--info:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.light-mode .el-transfer{font-size:14px}.light-mode .el-transfer__buttons{display:inline-block;vertical-align:middle;padding:0 30px}.light-mode .el-transfer__button{display:block;margin:0 auto;padding:10px;border-radius:50%;color:#fff;background-color:#282c34;font-size:0}.light-mode .el-transfer__button.is-with-texts{border-radius:4px}.light-mode .el-transfer__button.is-disabled,.light-mode .el-transfer__button.is-disabled:hover{border:1px solid #dcdfe6;background-color:#f5f7fa;color:#c0c4cc}.light-mode .el-transfer__button:first-child{margin-bottom:10px}.light-mode .el-transfer__button:nth-child(2){margin:0}.light-mode .el-transfer__button i,.light-mode .el-transfer__button span{font-size:14px}.light-mode .el-transfer__button [class*=el-icon-]+span{margin-left:0}.light-mode .el-transfer-panel{border:1px solid #ebeef5;border-radius:4px;overflow:hidden;background:#fff;display:inline-block;vertical-align:middle;width:200px;max-height:100%;box-sizing:border-box;position:relative}.light-mode .el-transfer-panel__body{height:246px}.light-mode .el-transfer-panel__body.is-with-footer{padding-bottom:40px}.light-mode .el-transfer-panel__list{margin:0;padding:6px 0;list-style:none;height:246px;overflow:auto;-webkit-box-sizing:border-box;box-sizing:border-box}.light-mode .el-transfer-panel__list.is-filterable{height:194px;padding-top:0}.light-mode .el-transfer-panel__item{height:30px;line-height:30px;padding-left:15px;display:block}.light-mode .el-transfer-panel__item+.el-transfer-panel__item{margin-left:0;display:block!important}.light-mode .el-transfer-panel__item.el-checkbox{color:#606266}.light-mode .el-transfer-panel__item:hover{color:#282c34}.light-mode .el-transfer-panel__item.el-checkbox .el-checkbox__label{width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:24px;line-height:30px}.light-mode .el-transfer-panel__item .el-checkbox__input{position:absolute;top:8px}.light-mode .el-transfer-panel__filter{text-align:center;margin:15px;-webkit-box-sizing:border-box;box-sizing:border-box;display:block;width:auto}.light-mode .el-transfer-panel__filter .el-input__inner{height:32px;width:100%;font-size:12px;display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:16px;padding-right:10px;padding-left:30px}.light-mode .el-transfer-panel__filter .el-input__icon{margin-left:5px}.light-mode .el-transfer-panel .el-transfer-panel__header{height:40px;line-height:40px;background:#f5f7fa;margin:0;padding-left:15px;border-bottom:1px solid #ebeef5;-webkit-box-sizing:border-box;box-sizing:border-box;color:#000}.light-mode .el-transfer-panel .el-transfer-panel__header .el-checkbox{display:block;line-height:40px}.light-mode .el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label{font-size:16px;color:#2c3e50;font-weight:400}.light-mode .el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label span{position:absolute;right:15px;color:#909399;font-size:12px;font-weight:400}.light-mode .el-divider__text,.light-mode .el-link{font-weight:500;font-size:14px}.light-mode .el-transfer-panel .el-transfer-panel__footer{height:40px;background:#fff;margin:0;padding:0;border-top:1px solid #ebeef5;position:absolute;bottom:0;left:0;width:100%;z-index:1}.light-mode .el-transfer-panel .el-transfer-panel__footer::after{display:inline-block;content:\"\";height:100%;vertical-align:middle}.light-mode .el-container,.light-mode .el-timeline-item__node{display:-webkit-box;display:-ms-flexbox}.light-mode .el-transfer-panel .el-transfer-panel__footer .el-checkbox{padding-left:20px;color:#606266}.light-mode .el-transfer-panel .el-transfer-panel__empty{margin:0;height:30px;line-height:30px;padding:6px 15px 0;color:#909399;text-align:center}.light-mode .el-transfer-panel .el-checkbox__label{padding-left:8px}.light-mode .el-transfer-panel .el-checkbox__inner{height:14px;width:14px;border-radius:3px}.light-mode .el-transfer-panel .el-checkbox__inner::after{height:6px;width:3px;left:4px}.light-mode .el-container{display:flex;-webkit-box-orient:horizontal;-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}.light-mode .el-aside,.light-mode .el-header{-webkit-box-sizing:border-box}.light-mode .el-container.is-vertical{-webkit-box-orient:vertical;-ms-flex-direction:column;flex-direction:column}.light-mode .el-header{padding:0 20px;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0}.light-mode .el-aside{overflow:auto;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0}.light-mode .el-footer,.light-mode .el-main{-webkit-box-sizing:border-box}.light-mode .el-main{display:block;-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-preferred-size:auto;flex-basis:auto;overflow:auto;box-sizing:border-box;padding:20px}.light-mode .el-footer{padding:0 20px;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0}.light-mode .el-timeline{margin:0;font-size:14px;list-style:none}.light-mode .el-timeline .el-timeline-item:last-child .el-timeline-item__tail{display:none}.light-mode .el-timeline-item{position:relative;padding-bottom:20px}.light-mode .el-timeline-item__wrapper{position:relative;padding-left:28px;top:-3px}.light-mode .el-timeline-item__tail{position:absolute;left:4px;height:100%;border-left:2px solid #e4e7ed}.light-mode .el-timeline-item__icon{color:#fff;font-size:13px}.light-mode .el-timeline-item__node{position:absolute;background-color:#e4e7ed;border-radius:50%;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.light-mode .el-image__error,.light-mode .el-timeline-item__dot{display:-webkit-box;display:-ms-flexbox}.light-mode .el-timeline-item__node--normal{left:-1px;width:12px;height:12px}.light-mode .el-timeline-item__node--large{left:-2px;width:14px;height:14px}.light-mode .el-timeline-item__node--primary{background-color:#282c34}.light-mode .el-timeline-item__node--success{background-color:#67c23a}.light-mode .el-timeline-item__node--warning{background-color:#e7c000}.light-mode .el-timeline-item__node--danger{background-color:#c00}.light-mode .el-timeline-item__node--info{background-color:#909399}.light-mode .el-timeline-item__dot{position:absolute;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.light-mode .el-timeline-item__content{color:#2c3e50}.light-mode .el-timeline-item__timestamp{color:#909399;line-height:1;font-size:13px}.light-mode .el-timeline-item__timestamp.is-top{margin-bottom:8px;padding-top:4px}.light-mode .el-timeline-item__timestamp.is-bottom{margin-top:8px}.light-mode .el-link{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;vertical-align:middle;position:relative;text-decoration:none;outline:0;padding:0}.light-mode .el-link.is-underline:hover:after{content:\"\";position:absolute;left:0;right:0;height:0;bottom:0;border-bottom:1px solid #282c34}.light-mode .el-link.el-link--default:after,.light-mode .el-link.el-link--primary.is-underline:hover:after,.light-mode .el-link.el-link--primary:after{border-color:#282c34}.light-mode .el-link.is-disabled{cursor:not-allowed}.light-mode .el-link [class*=el-icon-]+span{margin-left:5px}.light-mode .el-link.el-link--default{color:#606266}.light-mode .el-link.el-link--default:hover{color:#282c34}.light-mode .el-link.el-link--default.is-disabled{color:#c0c4cc}.light-mode .el-link.el-link--primary{color:#282c34}.light-mode .el-link.el-link--primary:hover{color:#53565d}.light-mode .el-link.el-link--primary.is-disabled{color:#94969a}.light-mode .el-link.el-link--danger.is-underline:hover:after,.light-mode .el-link.el-link--danger:after{border-color:#c00}.light-mode .el-link.el-link--danger{color:#c00}.light-mode .el-link.el-link--danger:hover{color:#d63333}.light-mode .el-link.el-link--danger.is-disabled{color:#e68080}.light-mode .el-link.el-link--success.is-underline:hover:after,.light-mode .el-link.el-link--success:after{border-color:#67c23a}.light-mode .el-link.el-link--success{color:#67c23a}.light-mode .el-link.el-link--success:hover{color:#85ce61}.light-mode .el-link.el-link--success.is-disabled{color:#b3e19d}.light-mode .el-link.el-link--warning.is-underline:hover:after,.light-mode .el-link.el-link--warning:after{border-color:#e7c000}.light-mode .el-link.el-link--warning{color:#e7c000}.light-mode .el-link.el-link--warning:hover{color:#eccd33}.light-mode .el-link.el-link--warning.is-disabled{color:#f3e080}.light-mode .el-link.el-link--info.is-underline:hover:after,.light-mode .el-link.el-link--info:after{border-color:#909399}.light-mode .el-link.el-link--info{color:#909399}.light-mode .el-link.el-link--info:hover{color:#a6a9ad}.light-mode .el-link.el-link--info.is-disabled{color:#c8c9cc}.light-mode .el-divider{background-color:#dcdfe6;position:relative}.light-mode .el-divider--horizontal{display:block;height:1px;width:100%;margin:24px 0}.light-mode .el-divider--vertical{display:inline-block;width:1px;height:1em;margin:0 8px;vertical-align:middle;position:relative}.light-mode .el-divider__text{position:absolute;background-color:#fff;padding:0 20px;color:#2c3e50}.light-mode .el-image__error,.light-mode .el-image__placeholder{background:#f5f7fa}.light-mode .el-divider__text.is-left{left:20px;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.light-mode .el-divider__text.is-center{left:50%;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.light-mode .el-divider__text.is-right{right:20px;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.light-mode .el-image__error,.light-mode .el-image__inner,.light-mode .el-image__placeholder{width:100%;height:100%}.light-mode .el-image{position:relative;display:inline-block;overflow:hidden}.light-mode .el-image__inner{vertical-align:top}.light-mode .el-image__inner--center{position:relative;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);display:block}.light-mode .el-image__error{display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:14px;color:#c0c4cc;vertical-align:middle}.light-mode .el-image__preview{cursor:pointer}.light-mode .el-image-viewer__wrapper{position:fixed;top:0;right:0;bottom:0;left:0}.light-mode .el-image-viewer__btn{position:absolute;z-index: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;border-radius:50%;opacity:.8;cursor:pointer;-webkit-box-sizing:border-box;box-sizing:border-box;user-select:none}.light-mode .el-image-viewer__close{top:40px;right:40px;width:40px;height:40px;font-size:40px}.light-mode .el-image-viewer__canvas{width:100%;height:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.light-mode .el-image-viewer__actions{left:50%;bottom:30px;-webkit-transform:translateX(-50%);transform:translateX(-50%);width:282px;height:44px;padding:0 23px;background-color:#606266;border-color:#fff;border-radius:22px}.light-mode .el-image-viewer__actions__inner{width:100%;height:100%;text-align:justify;cursor:default;font-size:23px;color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-pack:distribute;justify-content:space-around}.light-mode .el-image-viewer__next,.light-mode .el-image-viewer__prev{top:50%;width:44px;height:44px;font-size:24px;color:#fff;background-color:#606266;border-color:#fff}.light-mode .el-image-viewer__prev{-webkit-transform:translateY(-50%);transform:translateY(-50%);left:40px}.light-mode .el-image-viewer__next{-webkit-transform:translateY(-50%);transform:translateY(-50%);right:40px;text-indent:2px}.light-mode .el-image-viewer__mask{position:absolute;width:100%;height:100%;top:0;left:0;opacity:.5;background:#000}.light-mode .viewer-fade-enter-active{-webkit-animation:viewer-fade-in .3s;animation:viewer-fade-in .3s}.light-mode .viewer-fade-leave-active{-webkit-animation:viewer-fade-out .3s;animation:viewer-fade-out .3s}@-webkit-keyframes viewer-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 viewer-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 viewer-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 viewer-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}}.light-mode .el-calendar{background-color:#fff}.light-mode .el-calendar__header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:12px 20px;border-bottom:1px solid #ebeef5}.light-mode .el-backtop,.light-mode .el-page-header{display:-webkit-box;display:-ms-flexbox}.light-mode .el-calendar__title{color:#000;-ms-flex-item-align:center;align-self:center}.light-mode .el-calendar__body{padding:12px 20px 35px}.light-mode .el-calendar-table{table-layout:fixed;width:100%}.light-mode .el-calendar-table thead th{padding:12px 0;color:#606266;font-weight:400}.light-mode .el-calendar-table:not(.is-range) td.next,.light-mode .el-calendar-table:not(.is-range) td.prev{color:#c0c4cc}.light-mode .el-backtop,.light-mode .el-calendar-table td.is-today{color:#282c34}.light-mode .el-calendar-table td{border-bottom:1px solid #ebeef5;border-right:1px solid #ebeef5;vertical-align:top;-webkit-transition:background-color .2s ease;transition:background-color .2s ease}.light-mode .el-calendar-table td.is-selected{background-color:#f2f8fe}.light-mode .el-calendar-table tr:first-child td{border-top:1px solid #ebeef5}.light-mode .el-calendar-table tr td:first-child{border-left:1px solid #ebeef5}.light-mode .el-calendar-table tr.el-calendar-table__row--hide-border td{border-top:none}.light-mode .el-calendar-table .el-calendar-day{-webkit-box-sizing:border-box;box-sizing:border-box;padding:8px;height:85px}.light-mode .el-calendar-table .el-calendar-day:hover{cursor:pointer;background-color:#f2f8fe}.light-mode .el-backtop{position:fixed;background-color:#fff;width:40px;height:40px;border-radius:50%;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;font-size:20px;-webkit-box-shadow:0 0 6px rgba(0,0,0,.12);box-shadow:0 0 6px rgba(0,0,0,.12);cursor:pointer;z-index:5}.light-mode .el-backtop:hover{background-color:#f2f6fc}.light-mode .el-page-header{display:flex;line-height:24px}.light-mode .el-page-header__left{display:-webkit-box;display:-ms-flexbox;display:flex;cursor:pointer;margin-right:40px;position:relative}.light-mode .el-page-header__left::after{content:\"\";position:absolute;width:1px;height:16px;right:-20px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);background-color:#dcdfe6}.light-mode .el-checkbox,.light-mode .el-checkbox__input{display:inline-block;position:relative;white-space:nowrap}.light-mode .el-page-header__left .el-icon-back{font-size:18px;margin-right:6px;-ms-flex-item-align:center;align-self:center}.light-mode .el-page-header__title{font-size:14px;font-weight:500}.light-mode .el-page-header__content{font-size:18px;color:#2c3e50}.light-mode .el-checkbox{color:#606266;font-weight:500;font-size:14px;cursor:pointer;user-select:none;margin-right:30px}.light-mode .el-checkbox-button__inner,.light-mode .el-radio{font-weight:500;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.light-mode .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}.light-mode .el-checkbox.is-bordered.is-checked{border-color:#282c34}.light-mode .el-checkbox.is-bordered.is-disabled{border-color:#ebeef5;cursor:not-allowed}.light-mode .el-checkbox.is-bordered+.el-checkbox.is-bordered{margin-left:10px}.light-mode .el-checkbox.is-bordered.el-checkbox--medium{padding:7px 20px 7px 10px;border-radius:4px;height:36px}.light-mode .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label{line-height:17px;font-size:14px}.light-mode .el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__inner{height:14px;width:14px}.light-mode .el-checkbox.is-bordered.el-checkbox--small{padding:5px 15px 5px 10px;border-radius:3px;height:32px}.light-mode .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label{line-height:15px;font-size:12px}.light-mode .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner{height:12px;width:12px}.light-mode .el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner::after{height:6px;width:2px}.light-mode .el-checkbox.is-bordered.el-checkbox--mini{padding:3px 15px 3px 10px;border-radius:3px;height:28px}.light-mode .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__label{line-height:12px;font-size:12px}.light-mode .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner{height:12px;width:12px}.light-mode .el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner::after{height:6px;width:2px}.light-mode .el-checkbox__input{cursor:pointer;outline:0;line-height:1;vertical-align:middle}.light-mode .el-checkbox__input.is-disabled .el-checkbox__inner{background-color:#edf2fc;border-color:#dcdfe6;cursor:not-allowed}.light-mode .el-checkbox__input.is-disabled .el-checkbox__inner::after{cursor:not-allowed;border-color:#c0c4cc}.light-mode .el-checkbox__input.is-disabled .el-checkbox__inner+.el-checkbox__label{cursor:not-allowed}.light-mode .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner{background-color:#f2f6fc;border-color:#dcdfe6}.light-mode .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after{border-color:#c0c4cc}.light-mode .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner{background-color:#f2f6fc;border-color:#dcdfe6}.light-mode .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner::before{background-color:#c0c4cc;border-color:#c0c4cc}.light-mode .el-checkbox__input.is-checked .el-checkbox__inner,.light-mode .el-checkbox__input.is-indeterminate .el-checkbox__inner{background-color:#282c34;border-color:#282c34}.light-mode .el-checkbox__input.is-disabled+span.el-checkbox__label{color:#c0c4cc;cursor:not-allowed}.light-mode .el-checkbox__input.is-checked .el-checkbox__inner::after{-webkit-transform:rotate(45deg) scaleY(1);transform:rotate(45deg) scaleY(1)}.light-mode .el-checkbox__input.is-checked+.el-checkbox__label{color:#282c34}.light-mode .el-checkbox__input.is-focus .el-checkbox__inner{border-color:#282c34}.light-mode .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}.light-mode .el-checkbox__input.is-indeterminate .el-checkbox__inner::after{display:none}.light-mode .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)}.light-mode .el-checkbox__inner:hover{border-color:#282c34}.light-mode .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 ease-in .05s;transition:-webkit-transform .15s ease-in .05s;transition:transform .15s ease-in .05s;transition:transform .15s ease-in .05s,-webkit-transform .15s ease-in .05s;-webkit-transform-origin:center;transform-origin:center}.light-mode .el-checkbox__original{opacity:0;outline:0;position:absolute;margin:0;width:0;height:0;z-index:-1}.light-mode .el-checkbox-button,.light-mode .el-checkbox-button__inner{display:inline-block;position:relative}.light-mode .el-checkbox__label{display:inline-block;padding-left:10px;line-height:19px;font-size:14px}.light-mode .el-checkbox:last-of-type{margin-right:0}.light-mode .el-checkbox-button__inner{line-height:1;white-space:nowrap;vertical-align:middle;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;outline:0;margin:0;-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}.light-mode .el-checkbox-button__inner.is-round{padding:12px 20px}.light-mode .el-checkbox-button__inner:hover{color:#282c34}.light-mode .el-checkbox-button__inner [class*=el-icon-]{line-height:.9}.light-mode .el-radio,.light-mode .el-radio__input{line-height:1;outline:0;white-space:nowrap}.light-mode .el-checkbox-button__inner [class*=el-icon-]+span{margin-left:5px}.light-mode .el-checkbox-button__original{opacity:0;outline:0;position:absolute;margin:0;z-index:-1}.light-mode .el-radio,.light-mode .el-radio__inner,.light-mode .el-radio__input{position:relative;display:inline-block}.light-mode .el-checkbox-button.is-checked .el-checkbox-button__inner{color:#fff;background-color:#282c34;border-color:#282c34;-webkit-box-shadow:-1px 0 0 0 #7e8085;box-shadow:-1px 0 0 0 #7e8085}.light-mode .el-checkbox-button.is-checked:first-child .el-checkbox-button__inner{border-left-color:#282c34}.light-mode .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}.light-mode .el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner{border-left-color:#ebeef5}.light-mode .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}.light-mode .el-checkbox-button.is-focus .el-checkbox-button__inner{border-color:#282c34}.light-mode .el-checkbox-button:last-child .el-checkbox-button__inner{border-radius:0 4px 4px 0}.light-mode .el-checkbox-button--medium .el-checkbox-button__inner{padding:10px 20px;font-size:14px;border-radius:0}.light-mode .el-checkbox-button--medium .el-checkbox-button__inner.is-round{padding:10px 20px}.light-mode .el-checkbox-button--small .el-checkbox-button__inner{padding:9px 15px;font-size:12px;border-radius:0}.light-mode .el-checkbox-button--small .el-checkbox-button__inner.is-round{padding:9px 15px}.light-mode .el-checkbox-button--mini .el-checkbox-button__inner{padding:7px 15px;font-size:12px;border-radius:0}.light-mode .el-checkbox-button--mini .el-checkbox-button__inner.is-round{padding:7px 15px}.light-mode .el-checkbox-group{font-size:0}.light-mode .el-radio,.light-mode .el-radio--medium.is-bordered .el-radio__label{font-size:14px}.light-mode .el-radio{color:#606266;cursor:pointer;margin-right:30px}.light-mode .el-cascader-node>.el-radio,.light-mode .el-radio:last-child{margin-right:0}.light-mode .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}.light-mode .el-radio.is-bordered.is-checked{border-color:#282c34}.light-mode .el-radio.is-bordered.is-disabled{cursor:not-allowed;border-color:#ebeef5}.light-mode .el-radio__input.is-disabled .el-radio__inner,.light-mode .el-radio__input.is-disabled.is-checked .el-radio__inner{background-color:#f5f7fa;border-color:#e4e7ed}.light-mode .el-radio.is-bordered+.el-radio.is-bordered{margin-left:10px}.light-mode .el-radio--medium.is-bordered{padding:10px 20px 0 10px;border-radius:4px;height:36px}.light-mode .el-radio--mini.is-bordered .el-radio__label,.light-mode .el-radio--small.is-bordered .el-radio__label{font-size:12px}.light-mode .el-radio--medium.is-bordered .el-radio__inner{height:14px;width:14px}.light-mode .el-radio--small.is-bordered{padding:8px 15px 0 10px;border-radius:3px;height:32px}.light-mode .el-radio--small.is-bordered .el-radio__inner{height:12px;width:12px}.light-mode .el-radio--mini.is-bordered{padding:6px 15px 0 10px;border-radius:3px;height:28px}.light-mode .el-radio--mini.is-bordered .el-radio__inner{height:12px;width:12px}.light-mode .el-radio__input{cursor:pointer;vertical-align:middle}.light-mode .el-radio__input.is-disabled .el-radio__inner{cursor:not-allowed}.light-mode .el-radio__input.is-disabled .el-radio__inner::after{cursor:not-allowed;background-color:#f5f7fa}.light-mode .el-radio__input.is-disabled .el-radio__inner+.el-radio__label{cursor:not-allowed}.light-mode .el-radio__input.is-disabled.is-checked .el-radio__inner::after{background-color:#c0c4cc}.light-mode .el-radio__input.is-disabled+span.el-radio__label{color:#c0c4cc;cursor:not-allowed}.light-mode .el-radio__input.is-checked .el-radio__inner{border-color:#282c34;background:#282c34}.light-mode .el-radio__input.is-checked .el-radio__inner::after{-webkit-transform:translate(-50%,-50%) scale(1);transform:translate(-50%,-50%) scale(1)}.light-mode .el-radio__input.is-checked+.el-radio__label{color:#282c34}.light-mode .el-radio__input.is-focus .el-radio__inner{border-color:#282c34}.light-mode .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}.light-mode .el-radio__inner:hover{border-color:#282c34}.light-mode .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 ease-in;transition:-webkit-transform .15s ease-in;transition:transform .15s ease-in;transition:transform .15s ease-in,-webkit-transform .15s ease-in}.light-mode .el-radio__original{opacity:0;outline:0;position:absolute;z-index:-1;top:0;left:0;right:0;bottom:0;margin:0}.light-mode .el-radio:focus:not(.is-focus):not(:active):not(.is-disabled) .el-radio__inner{-webkit-box-shadow:0 0 2px 2px #282c34;box-shadow:0 0 2px 2px #282c34}.light-mode .el-radio__label{font-size:14px;padding-left:10px}.light-mode .el-scrollbar{overflow:hidden;position:relative}.light-mode .el-scrollbar:active>.el-scrollbar__bar,.light-mode .el-scrollbar:focus>.el-scrollbar__bar,.light-mode .el-scrollbar:hover>.el-scrollbar__bar{opacity:1;-webkit-transition:opacity 340ms ease-out;transition:opacity 340ms ease-out}.light-mode .el-scrollbar__wrap{overflow:scroll;height:100%}.light-mode .el-scrollbar__wrap--hidden-default::-webkit-scrollbar{width:0;height:0}.light-mode .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}.light-mode .el-scrollbar__thumb:hover{background-color:rgba(144,147,153,.5)}.light-mode .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}.light-mode .el-scrollbar__bar.is-vertical{width:6px;top:2px}.light-mode .el-scrollbar__bar.is-vertical>div{width:100%}.light-mode .el-scrollbar__bar.is-horizontal{height:6px;left:2px}.light-mode .el-scrollbar__bar.is-horizontal>div{height:100%}.light-mode .el-cascader-panel{display:-webkit-box;display:-ms-flexbox;display:flex;border-radius:4px;font-size:14px}.light-mode .el-cascader-node,.light-mode .el-drawer{display:-webkit-box;display:-ms-flexbox}.light-mode .el-cascader-panel.is-bordered{border:1px solid #e4e7ed;border-radius:4px}.light-mode .el-cascader-menu{min-width:180px;-webkit-box-sizing:border-box;box-sizing:border-box;color:#606266;border-right:solid 1px #e4e7ed}.light-mode .el-cascader-menu:last-child{border-right:none}.light-mode .el-cascader-menu:last-child .el-cascader-node{padding-right:20px}.light-mode .el-cascader-menu__wrap{height:204px}.light-mode .el-cascader-menu__list{position:relative;min-height:100%;margin:0;padding:6px 0;list-style:none;-webkit-box-sizing:border-box;box-sizing:border-box}.light-mode .el-avatar,.light-mode .el-drawer{-webkit-box-sizing:border-box;overflow:hidden}.light-mode .el-cascader-menu__hover-zone{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.light-mode .el-cascader-menu__empty-text{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);text-align:center;color:#c0c4cc}.light-mode .el-cascader-node{position:relative;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:0 30px 0 20px;height:34px;line-height:34px;outline:0}.light-mode .el-cascader-node.is-selectable.in-active-path{color:#606266}.light-mode .el-cascader-node.in-active-path,.light-mode .el-cascader-node.is-active,.light-mode .el-cascader-node.is-selectable.in-checked-path{color:#282c34;font-weight:700}.light-mode .el-cascader-node:not(.is-disabled){cursor:pointer}.light-mode .el-cascader-node:not(.is-disabled):focus,.light-mode .el-cascader-node:not(.is-disabled):hover{background:#f5f7fa}.light-mode .el-cascader-node.is-disabled{color:#c0c4cc;cursor:not-allowed}.light-mode .el-cascader-node__prefix{position:absolute;left:10px}.light-mode .el-cascader-node__postfix{position:absolute;right:10px}.light-mode .el-cascader-node__label{-webkit-box-flex:1;-ms-flex:1;flex:1;padding:0 10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.light-mode .el-cascader-node>.el-radio .el-radio__label{padding-left:0}.light-mode .el-avatar{display:inline-block;box-sizing:border-box;text-align:center;color:#fff;background:#c0c4cc;width:40px;height:40px;line-height:40px;font-size:14px}.light-mode .el-avatar>img{display:block;height:100%;vertical-align:middle}.light-mode .el-avatar--circle{border-radius:50%}.light-mode .el-avatar--square{border-radius:4px}.light-mode .el-avatar--icon{font-size:18px}.light-mode .el-avatar--large{width:40px;height:40px;line-height:40px}.light-mode .el-avatar--medium{width:36px;height:36px;line-height:36px}.light-mode .el-avatar--small{width:28px;height:28px;line-height:28px}.light-mode .el-drawer.btt,.light-mode .el-drawer.ttb,.light-mode .el-drawer__container{left:0;right:0;width:100%}.light-mode .el-drawer.ltr,.light-mode .el-drawer.rtl,.light-mode .el-drawer__container{top:0;bottom:0;height:100%}@-webkit-keyframes el-drawer-fade-in{0%{opacity:0}100%{opacity:1}}@keyframes el-drawer-fade-in{0%{opacity:0}100%{opacity:1}}@-webkit-keyframes rtl-drawer-in{0%{-webkit-transform:translate(100%,0);transform:translate(100%,0)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@keyframes rtl-drawer-in{0%{-webkit-transform:translate(100%,0);transform:translate(100%,0)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@-webkit-keyframes rtl-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(100%,0);transform:translate(100%,0)}}@keyframes rtl-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(100%,0);transform:translate(100%,0)}}@-webkit-keyframes ltr-drawer-in{0%{-webkit-transform:translate(-100%,0);transform:translate(-100%,0)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@keyframes ltr-drawer-in{0%{-webkit-transform:translate(-100%,0);transform:translate(-100%,0)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@-webkit-keyframes ltr-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(-100%,0);transform:translate(-100%,0)}}@keyframes ltr-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(-100%,0);transform:translate(-100%,0)}}@-webkit-keyframes ttb-drawer-in{0%{-webkit-transform:translate(0,-100%);transform:translate(0,-100%)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@keyframes ttb-drawer-in{0%{-webkit-transform:translate(0,-100%);transform:translate(0,-100%)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@-webkit-keyframes ttb-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(0,-100%);transform:translate(0,-100%)}}@keyframes ttb-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(0,-100%);transform:translate(0,-100%)}}@-webkit-keyframes btt-drawer-in{0%{-webkit-transform:translate(0,100%);transform:translate(0,100%)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@keyframes btt-drawer-in{0%{-webkit-transform:translate(0,100%);transform:translate(0,100%)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@-webkit-keyframes btt-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(0,100%);transform:translate(0,100%)}}@keyframes btt-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(0,100%);transform:translate(0,100%)}}.light-mode .el-drawer{position:absolute;box-sizing:border-box;background-color:#fff;display:flex;-webkit-box-orient:vertical;-ms-flex-direction:column;flex-direction:column;-webkit-box-shadow:0 8px 10px -5px rgba(0,0,0,.2),0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12);box-shadow:0 8px 10px -5px rgba(0,0,0,.2),0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12)}.light-mode .el-drawer.rtl{-webkit-animation:rtl-drawer-out 225ms cubic-bezier(0,0,.2,1) 0s;animation:rtl-drawer-out 225ms cubic-bezier(0,0,.2,1) 0s;right:0}.light-mode .el-drawer__open .el-drawer.rtl{-webkit-animation:rtl-drawer-in 225ms cubic-bezier(0,0,.2,1) 0s;animation:rtl-drawer-in 225ms cubic-bezier(0,0,.2,1) 0s}.light-mode .el-drawer.ltr{-webkit-animation:ltr-drawer-out 225ms cubic-bezier(0,0,.2,1) 0s;animation:ltr-drawer-out 225ms cubic-bezier(0,0,.2,1) 0s;left:0}.light-mode .el-drawer__open .el-drawer.ltr{-webkit-animation:ltr-drawer-in 225ms cubic-bezier(0,0,.2,1) 0s;animation:ltr-drawer-in 225ms cubic-bezier(0,0,.2,1) 0s}.light-mode .el-drawer.ttb{-webkit-animation:ttb-drawer-out 225ms cubic-bezier(0,0,.2,1) 0s;animation:ttb-drawer-out 225ms cubic-bezier(0,0,.2,1) 0s;top:0}.light-mode .el-drawer__open .el-drawer.ttb{-webkit-animation:ttb-drawer-in 225ms cubic-bezier(0,0,.2,1) 0s;animation:ttb-drawer-in 225ms cubic-bezier(0,0,.2,1) 0s}.light-mode .el-drawer.btt{-webkit-animation:btt-drawer-out 225ms cubic-bezier(0,0,.2,1) 0s;animation:btt-drawer-out 225ms cubic-bezier(0,0,.2,1) 0s;bottom:0}.light-mode .el-drawer__open .el-drawer.btt{-webkit-animation:btt-drawer-in 225ms cubic-bezier(0,0,.2,1) 0s;animation:btt-drawer-in 225ms cubic-bezier(0,0,.2,1) 0s}.light-mode .el-drawer__header{-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#72767b;display:-webkit-box;display:-ms-flexbox;display:flex;margin-bottom:32px;padding:20px 20px 0}.light-mode .el-drawer__header>:first-child{-webkit-box-flex:1;-ms-flex:1;flex:1}.light-mode .el-drawer__title{margin:0;-webkit-box-flex:1;-ms-flex:1;flex:1;line-height:inherit;font-size:1rem}.light-mode .el-drawer__close-btn{border:none;cursor:pointer;font-size:20px;color:inherit;background-color:transparent}.light-mode .el-drawer__body{-webkit-box-flex:1;-ms-flex:1;flex:1}.light-mode .el-drawer__body>*{-webkit-box-sizing:border-box;box-sizing:border-box}.light-mode .el-drawer__container{position:relative}.light-mode .el-drawer-fade-enter-active{-webkit-animation:el-drawer-fade-in 225ms cubic-bezier(0,0,.2,1) 0s;animation:el-drawer-fade-in 225ms cubic-bezier(0,0,.2,1) 0s}.light-mode .el-drawer-fade-leave-active{animation:el-drawer-fade-in 225ms cubic-bezier(0,0,.2,1) 0s reverse}"
  },
  {
    "path": "docs/.vuepress/public/style/theme/gulpfile.js",
    "content": "// gulpfile.js\n\nvar path = require('path')\nvar gulp = require('gulp')\nvar cleanCSS = require('gulp-clean-css')\nvar cssWrap = require('gulp-css-wrap')\n\n// var customThemeName = '.dark-mode'\n\ngulp.task('css-wrap-dark', function() {\n  return gulp.src( path.resolve('./dark.css'))\n    .pipe(cssWrap({selector: '.dark-mode'}))\n    .pipe(cleanCSS())\n    .pipe(gulp.dest('./dist'))\n})\n\ngulp.task('css-wrap-light', function() {\n  return gulp.src( path.resolve('./light.css'))\n    .pipe(cssWrap({selector: '.light-mode'}))\n    .pipe(cleanCSS())\n    .pipe(gulp.dest('./dist'))\n})\n\ngulp.task('move-font', function() {\n  return gulp.src(['./fonts/**']).pipe(gulp.dest('./dist/fonts'));\n});"
  },
  {
    "path": "docs/.vuepress/public/style/theme/light.css",
    "content": "@charset \"UTF-8\";.el-pagination--small .arrow.disabled,.el-table .hidden-columns,.el-table td.is-hidden>*,.el-table th.is-hidden>*,.el-table--hidden{visibility:hidden}.el-dropdown .el-dropdown-selfdefine:focus:active,.el-dropdown .el-dropdown-selfdefine:focus:not(.focusing),.el-message__closeBtn:focus,.el-message__content:focus,.el-popover:focus,.el-popover:focus:active,.el-popover__reference:focus:hover,.el-popover__reference:focus:not(.focusing),.el-rate:active,.el-rate:focus,.el-tooltip:focus:hover,.el-tooltip:focus:not(.focusing),.el-upload-list__item.is-success:active,.el-upload-list__item.is-success:not(.focusing):focus{outline-width:0}.el-input__suffix,.el-tree.is-dragging .el-tree-node__content *{pointer-events:none}@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-display:\"auto\";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-ice-cream-round:before{content:\"\\e6a0\"}.el-icon-ice-cream-square:before{content:\"\\e6a3\"}.el-icon-lollipop:before{content:\"\\e6a4\"}.el-icon-potato-strips:before{content:\"\\e6a5\"}.el-icon-milk-tea:before{content:\"\\e6a6\"}.el-icon-ice-drink:before{content:\"\\e6a7\"}.el-icon-ice-tea:before{content:\"\\e6a9\"}.el-icon-coffee:before{content:\"\\e6aa\"}.el-icon-orange:before{content:\"\\e6ab\"}.el-icon-pear:before{content:\"\\e6ac\"}.el-icon-apple:before{content:\"\\e6ad\"}.el-icon-cherry:before{content:\"\\e6ae\"}.el-icon-watermelon:before{content:\"\\e6af\"}.el-icon-grape:before{content:\"\\e6b0\"}.el-icon-refrigerator:before{content:\"\\e6b1\"}.el-icon-goblet-square-full:before{content:\"\\e6b2\"}.el-icon-goblet-square:before{content:\"\\e6b3\"}.el-icon-goblet-full:before{content:\"\\e6b4\"}.el-icon-goblet:before{content:\"\\e6b5\"}.el-icon-cold-drink:before{content:\"\\e6b6\"}.el-icon-coffee-cup:before{content:\"\\e6b8\"}.el-icon-water-cup:before{content:\"\\e6b9\"}.el-icon-hot-water:before{content:\"\\e6ba\"}.el-icon-ice-cream:before{content:\"\\e6bb\"}.el-icon-dessert:before{content:\"\\e6bc\"}.el-icon-sugar:before{content:\"\\e6bd\"}.el-icon-tableware:before{content:\"\\e6be\"}.el-icon-burger:before{content:\"\\e6bf\"}.el-icon-knife-fork:before{content:\"\\e6c1\"}.el-icon-fork-spoon:before{content:\"\\e6c2\"}.el-icon-chicken:before{content:\"\\e6c3\"}.el-icon-food:before{content:\"\\e6c4\"}.el-icon-dish-1:before{content:\"\\e6c5\"}.el-icon-dish:before{content:\"\\e6c6\"}.el-icon-moon-night:before{content:\"\\e6ee\"}.el-icon-moon:before{content:\"\\e6f0\"}.el-icon-cloudy-and-sunny:before{content:\"\\e6f1\"}.el-icon-partly-cloudy:before{content:\"\\e6f2\"}.el-icon-cloudy:before{content:\"\\e6f3\"}.el-icon-sunny:before{content:\"\\e6f6\"}.el-icon-sunset:before{content:\"\\e6f7\"}.el-icon-sunrise-1:before{content:\"\\e6f8\"}.el-icon-sunrise:before{content:\"\\e6f9\"}.el-icon-heavy-rain:before{content:\"\\e6fa\"}.el-icon-lightning:before{content:\"\\e6fb\"}.el-icon-light-rain:before{content:\"\\e6fc\"}.el-icon-wind-power:before{content:\"\\e6fd\"}.el-icon-baseball:before{content:\"\\e712\"}.el-icon-soccer:before{content:\"\\e713\"}.el-icon-football:before{content:\"\\e715\"}.el-icon-basketball:before{content:\"\\e716\"}.el-icon-ship:before{content:\"\\e73f\"}.el-icon-truck:before{content:\"\\e740\"}.el-icon-bicycle:before{content:\"\\e741\"}.el-icon-mobile-phone:before{content:\"\\e6d3\"}.el-icon-service:before{content:\"\\e6d4\"}.el-icon-key:before{content:\"\\e6e2\"}.el-icon-unlock:before{content:\"\\e6e4\"}.el-icon-lock:before{content:\"\\e6e5\"}.el-icon-watch:before{content:\"\\e6fe\"}.el-icon-watch-1:before{content:\"\\e6ff\"}.el-icon-timer:before{content:\"\\e702\"}.el-icon-alarm-clock:before{content:\"\\e703\"}.el-icon-map-location:before{content:\"\\e704\"}.el-icon-delete-location:before{content:\"\\e705\"}.el-icon-add-location:before{content:\"\\e706\"}.el-icon-location-information:before{content:\"\\e707\"}.el-icon-location-outline:before{content:\"\\e708\"}.el-icon-location:before{content:\"\\e79e\"}.el-icon-place:before{content:\"\\e709\"}.el-icon-discover:before{content:\"\\e70a\"}.el-icon-first-aid-kit:before{content:\"\\e70b\"}.el-icon-trophy-1:before{content:\"\\e70c\"}.el-icon-trophy:before{content:\"\\e70d\"}.el-icon-medal:before{content:\"\\e70e\"}.el-icon-medal-1:before{content:\"\\e70f\"}.el-icon-stopwatch:before{content:\"\\e710\"}.el-icon-mic:before{content:\"\\e711\"}.el-icon-copy-document:before{content:\"\\e718\"}.el-icon-full-screen:before{content:\"\\e719\"}.el-icon-switch-button:before{content:\"\\e71b\"}.el-icon-aim:before{content:\"\\e71c\"}.el-icon-crop:before{content:\"\\e71d\"}.el-icon-odometer:before{content:\"\\e71e\"}.el-icon-time:before{content:\"\\e71f\"}.el-icon-bangzhu:before{content:\"\\e724\"}.el-icon-close-notification:before{content:\"\\e726\"}.el-icon-microphone:before{content:\"\\e727\"}.el-icon-turn-off-microphone:before{content:\"\\e728\"}.el-icon-position:before{content:\"\\e729\"}.el-icon-postcard:before{content:\"\\e72a\"}.el-icon-message:before{content:\"\\e72b\"}.el-icon-chat-line-square:before{content:\"\\e72d\"}.el-icon-chat-dot-square:before{content:\"\\e72e\"}.el-icon-chat-dot-round:before{content:\"\\e72f\"}.el-icon-chat-square:before{content:\"\\e730\"}.el-icon-chat-line-round:before{content:\"\\e731\"}.el-icon-chat-round:before{content:\"\\e732\"}.el-icon-set-up:before{content:\"\\e733\"}.el-icon-turn-off:before{content:\"\\e734\"}.el-icon-open:before{content:\"\\e735\"}.el-icon-connection:before{content:\"\\e736\"}.el-icon-link:before{content:\"\\e737\"}.el-icon-cpu:before{content:\"\\e738\"}.el-icon-thumb:before{content:\"\\e739\"}.el-icon-female:before{content:\"\\e73a\"}.el-icon-male:before{content:\"\\e73b\"}.el-icon-guide:before{content:\"\\e73c\"}.el-icon-news:before{content:\"\\e73e\"}.el-icon-price-tag:before{content:\"\\e744\"}.el-icon-discount:before{content:\"\\e745\"}.el-icon-wallet:before{content:\"\\e747\"}.el-icon-coin:before{content:\"\\e748\"}.el-icon-money:before{content:\"\\e749\"}.el-icon-bank-card:before{content:\"\\e74a\"}.el-icon-box:before{content:\"\\e74b\"}.el-icon-present:before{content:\"\\e74c\"}.el-icon-sell:before{content:\"\\e6d5\"}.el-icon-sold-out:before{content:\"\\e6d6\"}.el-icon-shopping-bag-2:before{content:\"\\e74d\"}.el-icon-shopping-bag-1:before{content:\"\\e74e\"}.el-icon-shopping-cart-2:before{content:\"\\e74f\"}.el-icon-shopping-cart-1:before{content:\"\\e750\"}.el-icon-shopping-cart-full:before{content:\"\\e751\"}.el-icon-smoking:before{content:\"\\e752\"}.el-icon-no-smoking:before{content:\"\\e753\"}.el-icon-house:before{content:\"\\e754\"}.el-icon-table-lamp:before{content:\"\\e755\"}.el-icon-school:before{content:\"\\e756\"}.el-icon-office-building:before{content:\"\\e757\"}.el-icon-toilet-paper:before{content:\"\\e758\"}.el-icon-notebook-2:before{content:\"\\e759\"}.el-icon-notebook-1:before{content:\"\\e75a\"}.el-icon-files:before{content:\"\\e75b\"}.el-icon-collection:before{content:\"\\e75c\"}.el-icon-receiving:before{content:\"\\e75d\"}.el-icon-suitcase-1:before{content:\"\\e760\"}.el-icon-suitcase:before{content:\"\\e761\"}.el-icon-film:before{content:\"\\e763\"}.el-icon-collection-tag:before{content:\"\\e765\"}.el-icon-data-analysis:before{content:\"\\e766\"}.el-icon-pie-chart:before{content:\"\\e767\"}.el-icon-data-board:before{content:\"\\e768\"}.el-icon-data-line:before{content:\"\\e76d\"}.el-icon-reading:before{content:\"\\e769\"}.el-icon-magic-stick:before{content:\"\\e76a\"}.el-icon-coordinate:before{content:\"\\e76b\"}.el-icon-mouse:before{content:\"\\e76c\"}.el-icon-brush:before{content:\"\\e76e\"}.el-icon-headset:before{content:\"\\e76f\"}.el-icon-umbrella:before{content:\"\\e770\"}.el-icon-scissors:before{content:\"\\e771\"}.el-icon-mobile:before{content:\"\\e773\"}.el-icon-attract:before{content:\"\\e774\"}.el-icon-monitor:before{content:\"\\e775\"}.el-icon-search:before{content:\"\\e778\"}.el-icon-takeaway-box:before{content:\"\\e77a\"}.el-icon-paperclip:before{content:\"\\e77d\"}.el-icon-printer:before{content:\"\\e77e\"}.el-icon-document-add:before{content:\"\\e782\"}.el-icon-document:before{content:\"\\e785\"}.el-icon-document-checked:before{content:\"\\e786\"}.el-icon-document-copy:before{content:\"\\e787\"}.el-icon-document-delete:before{content:\"\\e788\"}.el-icon-document-remove:before{content:\"\\e789\"}.el-icon-tickets:before{content:\"\\e78b\"}.el-icon-folder-checked:before{content:\"\\e77f\"}.el-icon-folder-delete:before{content:\"\\e780\"}.el-icon-folder-remove:before{content:\"\\e781\"}.el-icon-folder-add:before{content:\"\\e783\"}.el-icon-folder-opened:before{content:\"\\e784\"}.el-icon-folder:before{content:\"\\e78a\"}.el-icon-edit-outline:before{content:\"\\e764\"}.el-icon-edit:before{content:\"\\e78c\"}.el-icon-date:before{content:\"\\e78e\"}.el-icon-c-scale-to-original:before{content:\"\\e7c6\"}.el-icon-view:before{content:\"\\e6ce\"}.el-icon-loading:before{content:\"\\e6cf\"}.el-icon-rank:before{content:\"\\e6d1\"}.el-icon-sort-down:before{content:\"\\e7c4\"}.el-icon-sort-up:before{content:\"\\e7c5\"}.el-icon-sort:before{content:\"\\e6d2\"}.el-icon-finished:before{content:\"\\e6cd\"}.el-icon-refresh-left:before{content:\"\\e6c7\"}.el-icon-refresh-right:before{content:\"\\e6c8\"}.el-icon-refresh:before{content:\"\\e6d0\"}.el-icon-video-play:before{content:\"\\e7c0\"}.el-icon-video-pause:before{content:\"\\e7c1\"}.el-icon-d-arrow-right:before{content:\"\\e6dc\"}.el-icon-d-arrow-left:before{content:\"\\e6dd\"}.el-icon-arrow-up:before{content:\"\\e6e1\"}.el-icon-arrow-down:before{content:\"\\e6df\"}.el-icon-arrow-right:before{content:\"\\e6e0\"}.el-icon-arrow-left:before{content:\"\\e6de\"}.el-icon-top-right:before{content:\"\\e6e7\"}.el-icon-top-left:before{content:\"\\e6e8\"}.el-icon-top:before{content:\"\\e6e6\"}.el-icon-bottom:before{content:\"\\e6eb\"}.el-icon-right:before{content:\"\\e6e9\"}.el-icon-back:before{content:\"\\e6ea\"}.el-icon-bottom-right:before{content:\"\\e6ec\"}.el-icon-bottom-left:before{content:\"\\e6ed\"}.el-icon-caret-top:before{content:\"\\e78f\"}.el-icon-caret-bottom:before{content:\"\\e790\"}.el-icon-caret-right:before{content:\"\\e791\"}.el-icon-caret-left:before{content:\"\\e792\"}.el-icon-d-caret:before{content:\"\\e79a\"}.el-icon-share:before{content:\"\\e793\"}.el-icon-menu:before{content:\"\\e798\"}.el-icon-s-grid:before{content:\"\\e7a6\"}.el-icon-s-check:before{content:\"\\e7a7\"}.el-icon-s-data:before{content:\"\\e7a8\"}.el-icon-s-opportunity:before{content:\"\\e7aa\"}.el-icon-s-custom:before{content:\"\\e7ab\"}.el-icon-s-claim:before{content:\"\\e7ad\"}.el-icon-s-finance:before{content:\"\\e7ae\"}.el-icon-s-comment:before{content:\"\\e7af\"}.el-icon-s-flag:before{content:\"\\e7b0\"}.el-icon-s-marketing:before{content:\"\\e7b1\"}.el-icon-s-shop:before{content:\"\\e7b4\"}.el-icon-s-open:before{content:\"\\e7b5\"}.el-icon-s-management:before{content:\"\\e7b6\"}.el-icon-s-ticket:before{content:\"\\e7b7\"}.el-icon-s-release:before{content:\"\\e7b8\"}.el-icon-s-home:before{content:\"\\e7b9\"}.el-icon-s-promotion:before{content:\"\\e7ba\"}.el-icon-s-operation:before{content:\"\\e7bb\"}.el-icon-s-unfold:before{content:\"\\e7bc\"}.el-icon-s-fold:before{content:\"\\e7a9\"}.el-icon-s-platform:before{content:\"\\e7bd\"}.el-icon-s-order:before{content:\"\\e7be\"}.el-icon-s-cooperation:before{content:\"\\e7bf\"}.el-icon-bell:before{content:\"\\e725\"}.el-icon-message-solid:before{content:\"\\e799\"}.el-icon-video-camera:before{content:\"\\e772\"}.el-icon-video-camera-solid:before{content:\"\\e796\"}.el-icon-camera:before{content:\"\\e779\"}.el-icon-camera-solid:before{content:\"\\e79b\"}.el-icon-download:before{content:\"\\e77c\"}.el-icon-upload2:before{content:\"\\e77b\"}.el-icon-upload:before{content:\"\\e7c3\"}.el-icon-picture-outline-round:before{content:\"\\e75f\"}.el-icon-picture-outline:before{content:\"\\e75e\"}.el-icon-picture:before{content:\"\\e79f\"}.el-icon-close:before{content:\"\\e6db\"}.el-icon-check:before{content:\"\\e6da\"}.el-icon-plus:before{content:\"\\e6d9\"}.el-icon-minus:before{content:\"\\e6d8\"}.el-icon-help:before{content:\"\\e73d\"}.el-icon-s-help:before{content:\"\\e7b3\"}.el-icon-circle-close:before{content:\"\\e78d\"}.el-icon-circle-check:before{content:\"\\e720\"}.el-icon-circle-plus-outline:before{content:\"\\e723\"}.el-icon-remove-outline:before{content:\"\\e722\"}.el-icon-zoom-out:before{content:\"\\e776\"}.el-icon-zoom-in:before{content:\"\\e777\"}.el-icon-error:before{content:\"\\e79d\"}.el-icon-success:before{content:\"\\e79c\"}.el-icon-circle-plus:before{content:\"\\e7a0\"}.el-icon-remove:before{content:\"\\e7a2\"}.el-icon-info:before{content:\"\\e7a1\"}.el-icon-question:before{content:\"\\e7a4\"}.el-icon-warning-outline:before{content:\"\\e6c9\"}.el-icon-warning:before{content:\"\\e7a3\"}.el-icon-goods:before{content:\"\\e7c2\"}.el-icon-s-goods:before{content:\"\\e7b2\"}.el-icon-star-off:before{content:\"\\e717\"}.el-icon-star-on:before{content:\"\\e797\"}.el-icon-more-outline:before{content:\"\\e6cc\"}.el-icon-more:before{content:\"\\e794\"}.el-icon-phone-outline:before{content:\"\\e6cb\"}.el-icon-phone:before{content:\"\\e795\"}.el-icon-user:before{content:\"\\e6e3\"}.el-icon-user-solid:before{content:\"\\e7a5\"}.el-icon-setting:before{content:\"\\e6ca\"}.el-icon-s-tools:before{content:\"\\e7ac\"}.el-icon-delete:before{content:\"\\e6d7\"}.el-icon-delete-solid:before{content:\"\\e7c9\"}.el-icon-eleme:before{content:\"\\e7c7\"}.el-icon-platform-eleme:before{content:\"\\e7ca\"}.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)}}.el-pagination{white-space:nowrap;padding:2px 5px;color:#2C3E50;font-weight:700}.el-pagination::after,.el-pagination::before{display:table;content:\"\"}.el-pagination::after{clear:both}.el-pagination button,.el-pagination span:not([class*=suffix]){display:inline-block;font-size:13px;min-width:35.5px;height:28px;line-height:28px;vertical-align:top;-webkit-box-sizing:border-box;box-sizing:border-box}.el-pagination .el-input__inner{text-align:center;-moz-appearance:textfield;line-height:normal}.el-pagination .el-input__suffix{right:0;-webkit-transform:scale(.8);transform:scale(.8)}.el-pagination .el-select .el-input{width:100px;margin:0 5px}.el-pagination .el-select .el-input .el-input__inner{padding-right:25px;border-radius:3px}.el-pagination button{border:none;padding:0 6px;background:0 0}.el-pagination button:focus{outline:0}.el-pagination button:hover{color:#282C34}.el-pagination button:disabled{color:#C0C4CC;background-color:#FFF;cursor:not-allowed}.el-pagination .btn-next,.el-pagination .btn-prev{background:center center no-repeat #FFF;background-size:16px;cursor:pointer;margin:0;color:#2C3E50}.el-pagination .btn-next .el-icon,.el-pagination .btn-prev .el-icon{display:block;font-size:12px;font-weight:700}.el-pagination .btn-prev{padding-right:12px}.el-pagination .btn-next{padding-left:12px}.el-pagination .el-pager li.disabled{color:#C0C4CC;cursor:not-allowed}.el-pager li,.el-pager li.btn-quicknext:hover,.el-pager li.btn-quickprev:hover{cursor:pointer}.el-pagination--small .btn-next,.el-pagination--small .btn-prev,.el-pagination--small .el-pager li,.el-pagination--small .el-pager li.btn-quicknext,.el-pagination--small .el-pager li.btn-quickprev,.el-pagination--small .el-pager li:last-child{border-color:transparent;font-size:12px;line-height:22px;height:22px;min-width:22px}.el-pagination--small .more::before,.el-pagination--small li.more::before{line-height:24px}.el-pagination--small button,.el-pagination--small span:not([class*=suffix]){height:22px;line-height:22px}.el-pagination--small .el-pagination__editor,.el-pagination--small .el-pagination__editor.el-input .el-input__inner{height:22px}.el-pagination__sizes{margin:0 10px 0 0;font-weight:400;color:#606266}.el-pagination__sizes .el-input .el-input__inner{font-size:13px;padding-left:8px}.el-pagination__sizes .el-input .el-input__inner:hover{border-color:#282C34}.el-pagination__total{margin-right:10px;font-weight:400;color:#606266}.el-pagination__jump{margin-left:24px;font-weight:400;color:#606266}.el-pagination__jump .el-input__inner{padding:0 3px}.el-pagination__rightwrapper{float:right}.el-pagination__editor{line-height:18px;padding:0 2px;height:28px;text-align:center;margin:0 2px;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:3px}.el-pager,.el-pagination.is-background .btn-next,.el-pagination.is-background .btn-prev{padding:0}.el-pagination__editor.el-input{width:50px}.el-pagination__editor.el-input .el-input__inner{height:28px}.el-pagination__editor .el-input__inner::-webkit-inner-spin-button,.el-pagination__editor .el-input__inner::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.el-pagination.is-background .btn-next,.el-pagination.is-background .btn-prev,.el-pagination.is-background .el-pager li{margin:0 5px;background-color:#f4f4f5;color:#606266;min-width:30px;border-radius:2px}.el-pagination.is-background .btn-next.disabled,.el-pagination.is-background .btn-next:disabled,.el-pagination.is-background .btn-prev.disabled,.el-pagination.is-background .btn-prev:disabled,.el-pagination.is-background .el-pager li.disabled{color:#C0C4CC}.el-pagination.is-background .el-pager li:not(.disabled):hover{color:#282C34}.el-pagination.is-background .el-pager li:not(.disabled).active{background-color:#282C34;color:#FFF}.el-dialog,.el-pager li{background:#FFF;-webkit-box-sizing:border-box}.el-pagination.is-background.el-pagination--small .btn-next,.el-pagination.is-background.el-pagination--small .btn-prev,.el-pagination.is-background.el-pagination--small .el-pager li{margin:0 3px;min-width:22px}.el-pager,.el-pager li{vertical-align:top;margin:0;display:inline-block}.el-pager{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;list-style:none;font-size:0}.el-date-table,.el-table th{-webkit-user-select:none;-ms-user-select:none}.el-pager .more::before{line-height:30px}.el-pager li{padding:0 4px;font-size:13px;min-width:35.5px;height:28px;line-height:28px;box-sizing:border-box;text-align:center}.el-menu--collapse .el-menu .el-submenu,.el-menu--popup{min-width:200px}.el-pager li.btn-quicknext,.el-pager li.btn-quickprev{line-height:28px;color:#2C3E50}.el-pager li.btn-quicknext.disabled,.el-pager li.btn-quickprev.disabled{color:#C0C4CC}.el-pager li.active+li{border-left:0}.el-pager li:hover{color:#282C34}.el-pager li.active{color:#282C34;cursor:default}@-webkit-keyframes v-modal-in{0%{opacity:0}}@-webkit-keyframes v-modal-out{100%{opacity:0}}.el-dialog{position:relative;margin:0 auto 50px;border-radius:2px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.3);box-shadow:0 1px 3px rgba(0,0,0,.3);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:#282C34}.el-dialog__title{line-height:24px;font-size:18px;color:#2C3E50}.el-dialog__body{padding:30px 20px;color:#606266;font-size:14px;word-break:break-all}.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}}.el-autocomplete{position:relative;display:inline-block}.el-autocomplete-suggestion{margin:5px 0;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);border-radius:4px;border:1px solid #E4E7ED;-webkit-box-sizing:border-box;box-sizing:border-box;background-color:#FFF}.el-dropdown-menu,.el-menu--collapse .el-submenu .el-menu{z-index:10;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-autocomplete-suggestion__wrap{max-height:280px;padding:10px 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-autocomplete-suggestion__list{margin:0;padding:0}.el-autocomplete-suggestion li{padding:0 20px;margin:0;line-height:34px;cursor:pointer;color:#606266;font-size:14px;list-style:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.el-autocomplete-suggestion li.highlighted,.el-autocomplete-suggestion li:hover{background-color:#F5F7FA}.el-autocomplete-suggestion li.divider{margin-top:6px;border-top:1px solid #000}.el-autocomplete-suggestion li.divider:last-child{margin-bottom:-6px}.el-autocomplete-suggestion.is-loading li{text-align:center;height:100px;line-height:100px;font-size:20px;color:#999}.el-autocomplete-suggestion.is-loading li::after{display:inline-block;content:\"\";height:100%;vertical-align:middle}.el-autocomplete-suggestion.is-loading li:hover{background-color:#FFF}.el-autocomplete-suggestion.is-loading .el-icon-loading{vertical-align:middle}.el-dropdown{display:inline-block;position:relative;color:#606266;font-size:14px}.el-dropdown .el-button-group{display:block}.el-dropdown .el-button-group .el-button{float:none}.el-dropdown .el-dropdown__caret-button{padding-left:5px;padding-right:5px;position:relative;border-left:none}.el-dropdown .el-dropdown__caret-button::before{content:'';position:absolute;display:block;width:1px;top:5px;bottom:5px;left:0;background:rgba(255,255,255,.5)}.el-dropdown .el-dropdown__caret-button.el-button--default::before{background:rgba(220,223,230,.5)}.el-dropdown .el-dropdown__caret-button:hover::before{top:0;bottom:0}.el-dropdown .el-dropdown__caret-button .el-dropdown__icon{padding-left:0}.el-dropdown__icon{font-size:12px;margin:0 3px}.el-dropdown-menu{position:absolute;top:0;left:0;padding:10px 0;margin:5px 0;background-color:#FFF;border:1px solid #EBEEF5;border-radius:4px;box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-dropdown-menu__item{list-style:none;line-height:36px;padding:0 20px;margin:0;font-size:14px;color:#606266;cursor:pointer;outline:0}.el-dropdown-menu__item:focus,.el-dropdown-menu__item:not(.is-disabled):hover{background-color:#eaeaeb;color:#53565d}.el-dropdown-menu__item i{margin-right:5px}.el-dropdown-menu__item--divided{position:relative;margin-top:6px;border-top:1px solid #EBEEF5}.el-dropdown-menu__item--divided:before{content:'';height:6px;display:block;margin:0 -20px;background-color:#FFF}.el-dropdown-menu__item.is-disabled{cursor:default;color:#bbb;pointer-events:none}.el-dropdown-menu--medium{padding:6px 0}.el-dropdown-menu--medium .el-dropdown-menu__item{line-height:30px;padding:0 17px;font-size:14px}.el-dropdown-menu--medium .el-dropdown-menu__item.el-dropdown-menu__item--divided{margin-top:6px}.el-dropdown-menu--medium .el-dropdown-menu__item.el-dropdown-menu__item--divided:before{height:6px;margin:0 -17px}.el-dropdown-menu--small{padding:6px 0}.el-dropdown-menu--small .el-dropdown-menu__item{line-height:27px;padding:0 15px;font-size:13px}.el-dropdown-menu--small .el-dropdown-menu__item.el-dropdown-menu__item--divided{margin-top:4px}.el-dropdown-menu--small .el-dropdown-menu__item.el-dropdown-menu__item--divided:before{height:4px;margin:0 -15px}.el-dropdown-menu--mini{padding:3px 0}.el-dropdown-menu--mini .el-dropdown-menu__item{line-height:24px;padding:0 10px;font-size:12px}.el-dropdown-menu--mini .el-dropdown-menu__item.el-dropdown-menu__item--divided{margin-top:3px}.el-dropdown-menu--mini .el-dropdown-menu__item.el-dropdown-menu__item--divided:before{height:3px;margin:0 -10px}.el-menu{border-right:solid 1px #e6e6e6;list-style:none;position:relative;margin:0;padding-left:0;background-color:#FFF}.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::after,.el-menu::before{display:table;content:\"\"}.el-menu::after{clear:both}.el-menu.el-menu--horizontal{border-bottom:solid 1px #e6e6e6}.el-menu--horizontal{border-right:none}.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:#2C3E50}.el-menu--horizontal>.el-submenu.is-active .el-submenu__title{border-bottom:2px solid #282C34;color:#2C3E50}.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.is-active>.el-submenu__title{color:#2C3E50}.el-menu--horizontal .el-menu-item:not(.is-disabled):focus,.el-menu--horizontal .el-menu-item:not(.is-disabled):hover{outline:0;color:#2C3E50}.el-menu--horizontal>.el-menu-item.is-active{border-bottom:2px solid #282C34;color:#2C3E50}.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%;border:1px solid #E4E7ED;border-radius:2px;box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-menu-item,.el-submenu__title{height:56px;line-height:56px;position:relative;-webkit-box-sizing:border-box;white-space:nowrap;list-style:none}.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:#2C3E50;padding:0 20px;cursor:pointer;-webkit-transition:border-color .3s,background-color .3s,color .3s;transition:border-color .3s,background-color .3s,color .3s;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:#eaeaeb}.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:#282C34}.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:#2C3E50;padding:0 20px;cursor:pointer;-webkit-transition:border-color .3s,background-color .3s,color .3s;transition:border-color .3s,background-color .3s,color .3s;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:#eaeaeb}.el-submenu__title.is-disabled{opacity:.25;cursor:not-allowed;background:0 0!important}.el-submenu__title:hover{background-color:#eaeaeb}.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:#282C34}.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}.el-radio-button__inner,.el-radio-group{display:inline-block;line-height:1;vertical-align:middle}.horizontal-collapse-transition .el-submenu__title .el-submenu__icon-arrow{-webkit-transition:.2s;transition:.2s;opacity:0}.el-radio-group{font-size:0}.el-radio-button{position:relative;display:inline-block;outline:0}.el-radio-button__inner{white-space:nowrap;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;outline:0;margin:0;position:relative;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:#282C34}.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:#282C34;border-color:#282C34;-webkit-box-shadow:-1px 0 0 0 #282C34;box-shadow:-1px 0 0 0 #282C34}.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-popover,.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):not(.is-disabled){-webkit-box-shadow:0 0 2px 2px #282C34;box-shadow:0 0 2px 2px #282C34}.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__core,.el-switch__label{display:inline-block;cursor:pointer}.el-switch.is-disabled .el-switch__core,.el-switch.is-disabled .el-switch__label{cursor:not-allowed}.el-switch__label{-webkit-transition:.2s;transition:.2s;height:20px;font-size:14px;font-weight:500;vertical-align:middle;color:#2C3E50}.el-switch__label.is-active{color:#282C34}.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__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;vertical-align:middle}.el-switch__core:after{content:\"\";position:absolute;top:1px;left:1px;border-radius:100%;-webkit-transition:all .3s;transition:all .3s;width:16px;height:16px;background-color:#FFF}.el-switch.is-checked .el-switch__core{border-color:#282C34;background-color:#282C34}.el-switch.is-checked .el-switch__core::after{left:100%;margin-left:-17px}.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}.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:#282C34;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:\"\\e6da\";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}.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 .el-tag,.el-table{-webkit-box-sizing:border-box}.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:#282C34;font-weight:700}.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}.el-select{display:inline-block;position:relative}.el-select .el-select__tags>span{display:contents}.el-select:hover .el-input__inner{border-color:#C0C4CC}.el-select .el-input__inner{cursor:pointer;padding-right:35px}.el-select .el-input__inner:focus{border-color:#282C34}.el-select .el-input .el-select__caret{color:#C0C4CC;font-size:14px;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg);cursor:pointer}.el-select .el-input .el-select__caret.is-reverse{-webkit-transform:rotateZ(0);transform:rotateZ(0)}.el-select .el-input .el-select__caret.is-show-close{font-size:14px;text-align:center;-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg);border-radius:100%;color:#C0C4CC;-webkit-transition:color .2s cubic-bezier(.645,.045,.355,1);transition:color .2s cubic-bezier(.645,.045,.355,1)}.el-select .el-input .el-select__caret.is-show-close:hover{color:#909399}.el-select .el-input.is-disabled .el-input__inner{cursor:not-allowed}.el-select .el-input.is-disabled .el-input__inner:hover{border-color:#E4E7ED}.el-select .el-input.is-focus .el-input__inner{border-color:#282C34}.el-select>.el-input{display:block}.el-select__input{border:none;outline:0;padding:0;margin-left:15px;color:#666;font-size:14px;-webkit-appearance:none;-moz-appearance:none;appearance:none;height:28px;background-color:transparent}.el-select__input.is-mini{height:14px}.el-select__close{cursor:pointer;position:absolute;top:8px;z-index:1000;right:25px;color:#C0C4CC;line-height:18px;font-size:14px}.el-select__close:hover{color:#909399}.el-select__tags{position:absolute;line-height:normal;white-space:normal;z-index:1;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-wrap:wrap;flex-wrap:wrap}.el-select .el-tag__close{margin-top:-2px}.el-select .el-tag{box-sizing:border-box;border-color:transparent;margin:2px 0 2px 6px;background-color:#f0f2f5}.el-select .el-tag__close.el-icon-close{background-color:#C0C4CC;right:-7px;top:0;color:#FFF}.el-select .el-tag__close.el-icon-close:hover{background-color:#909399}.el-table,.el-table__expanded-cell{background-color:#FFF}.el-select .el-tag__close.el-icon-close::before{display:block;-webkit-transform:translate(0,.5px);transform:translate(0,.5px)}.el-table{position:relative;overflow:hidden;box-sizing:border-box;-webkit-box-flex:1;-ms-flex:1;flex:1;width:100%;max-width:100%;font-size:14px;color:#606266}.el-table--mini,.el-table--small,.el-table__expand-icon{font-size:12px}.el-table__empty-block{min-height:60px;text-align:center;width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-table__empty-text{line-height:60px;width:50%;color:#909399}.el-table__expand-column .cell{padding:0;text-align:center}.el-table__expand-icon{position:relative;cursor:pointer;color:#666;-webkit-transition:-webkit-transform .2s ease-in-out;transition:-webkit-transform .2s ease-in-out;transition:transform .2s ease-in-out;transition:transform .2s ease-in-out,-webkit-transform .2s ease-in-out;height:20px}.el-table__expand-icon--expanded{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.el-table__expand-icon>.el-icon{position:absolute;left:50%;top:50%;margin-left:-5px;margin-top:-5px}.el-table__expanded-cell[class*=cell]{padding:20px 50px}.el-table__expanded-cell:hover{background-color:transparent!important}.el-table__placeholder{display:inline-block;width:20px}.el-table__append-wrapper{overflow:hidden}.el-table--fit{border-right:0;border-bottom:0}.el-table--fit td.gutter,.el-table--fit th.gutter{border-right-width:1px}.el-table--scrollable-x .el-table__body-wrapper{overflow-x:auto}.el-table--scrollable-y .el-table__body-wrapper{overflow-y:auto}.el-table thead{color:#909399;font-weight:500}.el-table thead.is-group th{background:#F5F7FA}.el-table th,.el-table tr{background-color:#FFF}.el-table td,.el-table th{padding:12px 0;min-width:0;-webkit-box-sizing:border-box;box-sizing:border-box;text-overflow:ellipsis;vertical-align:middle;position:relative;text-align:left}.el-table td.is-center,.el-table th.is-center{text-align:center}.el-table td.is-right,.el-table th.is-right{text-align:right}.el-table td.gutter,.el-table th.gutter{width:15px;border-right-width:0;border-bottom-width:0;padding:0}.el-table--medium td,.el-table--medium th{padding:10px 0}.el-table--small td,.el-table--small th{padding:8px 0}.el-table--mini td,.el-table--mini th{padding:6px 0}.el-table .cell,.el-table th div{padding-right:10px;overflow:hidden;text-overflow:ellipsis}.el-table .cell,.el-table th div,.el-table--border td:first-child .cell,.el-table--border th:first-child .cell{padding-left:10px}.el-table tr input[type=checkbox]{margin:0}.el-table td,.el-table th.is-leaf{border-bottom:1px solid #EBEEF5}.el-table th.is-sortable{cursor:pointer}.el-table th{white-space:nowrap;overflow:hidden;-moz-user-select:none;user-select:none}.el-table th div{display:inline-block;line-height:40px;-webkit-box-sizing:border-box;box-sizing:border-box;white-space:nowrap}.el-table th>.cell{position:relative;word-wrap:normal;text-overflow:ellipsis;display:inline-block;vertical-align:middle;width:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.el-table th>.cell.highlight{color:#282C34}.el-table th.required>div::before{display:inline-block;content:\"\";width:8px;height:8px;border-radius:50%;background:#ff4d51;margin-right:5px;vertical-align:middle}.el-table td div{-webkit-box-sizing:border-box;box-sizing:border-box}.el-table td.gutter{width:0}.el-table .cell{-webkit-box-sizing:border-box;box-sizing:border-box;white-space:normal;word-break:break-all;line-height:23px}.el-table .cell.el-tooltip{white-space:nowrap;min-width:50px}.el-table--border,.el-table--group{border:1px solid #EBEEF5}.el-table--border::after,.el-table--group::after,.el-table::before{content:'';position:absolute;background-color:#EBEEF5;z-index:1}.el-table--border::after,.el-table--group::after{top:0;right:0;width:1px;height:100%}.el-table::before{left:0;bottom:0;width:100%;height:1px}.el-table--border{border-right:none;border-bottom:none}.el-table--border.el-loading-parent--relative{border-color:transparent}.el-table--border td,.el-table--border th,.el-table__body-wrapper .el-table--border.is-scrolling-left~.el-table__fixed{border-right:1px solid #EBEEF5}.el-table--border th.gutter:last-of-type{border-bottom:1px solid #EBEEF5;border-bottom-width:1px}.el-table--border th,.el-table__fixed-right-patch{border-bottom:1px solid #EBEEF5}.el-table__fixed,.el-table__fixed-right{position:absolute;top:0;left:0;overflow-x:hidden;overflow-y:hidden;-webkit-box-shadow:0 0 10px rgba(0,0,0,.12);box-shadow:0 0 10px rgba(0,0,0,.12)}.el-table__fixed-right::before,.el-table__fixed::before{content:'';position:absolute;left:0;bottom:0;width:100%;height:1px;background-color:#EBEEF5;z-index:4}.el-table__fixed-right-patch{position:absolute;top:-1px;right:0;background-color:#FFF}.el-table__fixed-right{top:0;left:auto;right:0}.el-table__fixed-right .el-table__fixed-body-wrapper,.el-table__fixed-right .el-table__fixed-footer-wrapper,.el-table__fixed-right .el-table__fixed-header-wrapper{left:auto;right:0}.el-table__fixed-header-wrapper{position:absolute;left:0;top:0;z-index:3}.el-table__fixed-footer-wrapper{position:absolute;left:0;bottom:0;z-index:3}.el-table__fixed-footer-wrapper tbody td{border-top:1px solid #EBEEF5;background-color:#F5F7FA;color:#606266}.el-table__fixed-body-wrapper{position:absolute;left:0;top:37px;overflow:hidden;z-index:3}.el-table__body-wrapper,.el-table__footer-wrapper,.el-table__header-wrapper{width:100%}.el-table__footer-wrapper{margin-top:-1px}.el-table__footer-wrapper td{border-top:1px solid #EBEEF5}.el-table__body,.el-table__footer,.el-table__header{table-layout:fixed;border-collapse:separate}.el-table__footer-wrapper,.el-table__header-wrapper{overflow:hidden}.el-table__footer-wrapper tbody td,.el-table__header-wrapper tbody td{background-color:#F5F7FA;color:#606266}.el-table__body-wrapper{overflow:hidden;position:relative}.el-table__body-wrapper.is-scrolling-left~.el-table__fixed,.el-table__body-wrapper.is-scrolling-none~.el-table__fixed,.el-table__body-wrapper.is-scrolling-none~.el-table__fixed-right,.el-table__body-wrapper.is-scrolling-right~.el-table__fixed-right{-webkit-box-shadow:none;box-shadow:none}.el-picker-panel,.el-table-filter{-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-table__body-wrapper .el-table--border.is-scrolling-right~.el-table__fixed-right{border-left:1px solid #EBEEF5}.el-table .caret-wrapper{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:34px;width:24px;vertical-align:middle;cursor:pointer;overflow:initial;position:relative}.el-table .sort-caret{width:0;height:0;border:5px solid transparent;position:absolute;left:7px}.el-table .sort-caret.ascending{border-bottom-color:#C0C4CC;top:5px}.el-table .sort-caret.descending{border-top-color:#C0C4CC;bottom:7px}.el-table .ascending .sort-caret.ascending{border-bottom-color:#282C34}.el-table .descending .sort-caret.descending{border-top-color:#282C34}.el-table .hidden-columns{position:absolute;z-index:-1}.el-table--striped .el-table__body tr.el-table__row--striped td{background:#FAFAFA}.el-table--striped .el-table__body tr.el-table__row--striped.current-row td{background-color:#eaeaeb}.el-table__body tr.hover-row.current-row>td,.el-table__body tr.hover-row.el-table__row--striped.current-row>td,.el-table__body tr.hover-row.el-table__row--striped>td,.el-table__body tr.hover-row>td{background-color:#F5F7FA}.el-table__body tr.current-row>td{background-color:#eaeaeb}.el-table__column-resize-proxy{position:absolute;left:200px;top:0;bottom:0;width:0;border-left:1px solid #EBEEF5;z-index:10}.el-table__column-filter-trigger{display:inline-block;line-height:34px;cursor:pointer}.el-table__column-filter-trigger i{color:#909399;font-size:12px;-webkit-transform:scale(.75);transform:scale(.75)}.el-table--enable-row-transition .el-table__body td{-webkit-transition:background-color .25s ease;transition:background-color .25s ease}.el-table--enable-row-hover .el-table__body tr:hover>td{background-color:#F5F7FA}.el-table--fluid-height .el-table__fixed,.el-table--fluid-height .el-table__fixed-right{bottom:0;overflow:hidden}.el-table [class*=el-table__row--level] .el-table__expand-icon{display:inline-block;width:20px;line-height:20px;height:20px;text-align:center;margin-right:3px}.el-table-column--selection .cell{padding-left:14px;padding-right:14px}.el-table-filter{border:1px solid #EBEEF5;border-radius:2px;background-color:#FFF;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);-webkit-box-sizing:border-box;box-sizing:border-box;margin:2px 0}.el-date-table td,.el-date-table td div{height:30px;-webkit-box-sizing:border-box}.el-table-filter__list{padding:5px 0;margin:0;list-style:none;min-width:100px}.el-table-filter__list-item{line-height:36px;padding:0 10px;cursor:pointer;font-size:14px}.el-table-filter__list-item:hover{background-color:#eaeaeb;color:#53565d}.el-table-filter__list-item.is-active{background-color:#282C34;color:#FFF}.el-table-filter__content{min-width:100px}.el-table-filter__bottom{border-top:1px solid #EBEEF5;padding:8px}.el-table-filter__bottom button{background:0 0;border:none;color:#606266;cursor:pointer;font-size:13px;padding:0 3px}.el-date-table td.in-range div,.el-date-table td.in-range div:hover,.el-date-table.is-week-mode .el-date-table__row.current div,.el-date-table.is-week-mode .el-date-table__row:hover div{background-color:#F2F6FC}.el-table-filter__bottom button:hover{color:#282C34}.el-table-filter__bottom button:focus{outline:0}.el-table-filter__bottom button.is-disabled{color:#C0C4CC;cursor:not-allowed}.el-table-filter__wrap{max-height:280px}.el-table-filter__checkbox-group{padding:10px}.el-table-filter__checkbox-group label.el-checkbox{display:block;margin-right:5px;margin-bottom:8px;margin-left:5px}.el-table-filter__checkbox-group .el-checkbox:last-child{margin-bottom:0}.el-date-table{font-size:12px;-moz-user-select:none;user-select:none}.el-slider__button-wrapper,.el-time-panel{-webkit-user-select:none;-ms-user-select:none}.el-date-table.is-week-mode .el-date-table__row:hover td.available:hover{color:#606266}.el-date-table.is-week-mode .el-date-table__row:hover td:first-child div{margin-left:5px;border-top-left-radius:15px;border-bottom-left-radius:15px}.el-date-table.is-week-mode .el-date-table__row:hover td:last-child div{margin-right:5px;border-top-right-radius:15px;border-bottom-right-radius:15px}.el-date-table td{width:32px;padding:4px 0;box-sizing:border-box;text-align:center;cursor:pointer;position:relative}.el-date-table td div{padding:3px 0;box-sizing:border-box}.el-date-table td span{width:24px;height:24px;display:block;margin:0 auto;line-height:24px;position:absolute;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);border-radius:50%}.el-date-table td.next-month,.el-date-table td.prev-month{color:#C0C4CC}.el-date-table td.today{position:relative}.el-date-table td.today span{color:#282C34;font-weight:700}.el-date-table td.today.end-date span,.el-date-table td.today.start-date span{color:#FFF}.el-date-table td.available:hover{color:#282C34}.el-date-table td.current:not(.disabled) span{color:#FFF;background-color:#282C34}.el-date-table td.end-date div,.el-date-table td.start-date div{color:#FFF}.el-date-table td.end-date span,.el-date-table td.start-date span{background-color:#282C34}.el-date-table td.start-date div{margin-left:5px;border-top-left-radius:15px;border-bottom-left-radius:15px}.el-date-table td.end-date div{margin-right:5px;border-top-right-radius:15px;border-bottom-right-radius:15px}.el-date-table td.disabled div{background-color:#F5F7FA;opacity:1;cursor:not-allowed;color:#C0C4CC}.el-date-table td.selected div{margin-left:5px;margin-right:5px;background-color:#F2F6FC;border-radius:15px}.el-date-table td.selected div:hover{background-color:#F2F6FC}.el-date-table td.selected span{background-color:#282C34;color:#FFF;border-radius:15px}.el-date-table td.week{font-size:80%;color:#606266}.el-month-table,.el-year-table{font-size:12px;border-collapse:collapse}.el-date-table th{padding:5px;color:#606266;font-weight:400;border-bottom:solid 1px #EBEEF5}.el-month-table{margin:-1px}.el-month-table td{text-align:center;padding:8px 0;cursor:pointer}.el-month-table td div{height:48px;padding:6px 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-month-table td.today .cell{color:#282C34;font-weight:700}.el-month-table td.today.end-date .cell,.el-month-table td.today.start-date .cell{color:#FFF}.el-month-table td.disabled .cell{background-color:#F5F7FA;cursor:not-allowed;color:#C0C4CC}.el-month-table td.disabled .cell:hover{color:#C0C4CC}.el-month-table td .cell{width:60px;height:36px;display:block;line-height:36px;color:#606266;margin:0 auto;border-radius:18px}.el-month-table td .cell:hover{color:#282C34}.el-month-table td.in-range div,.el-month-table td.in-range div:hover{background-color:#F2F6FC}.el-month-table td.end-date div,.el-month-table td.start-date div{color:#FFF}.el-month-table td.end-date .cell,.el-month-table td.start-date .cell{color:#FFF;background-color:#282C34}.el-month-table td.start-date div{border-top-left-radius:24px;border-bottom-left-radius:24px}.el-month-table td.end-date div{border-top-right-radius:24px;border-bottom-right-radius:24px}.el-month-table td.current:not(.disabled) .cell{color:#282C34}.el-year-table{margin:-1px}.el-year-table .el-icon{color:#2C3E50}.el-year-table td{text-align:center;padding:20px 3px;cursor:pointer}.el-year-table td.today .cell{color:#282C34;font-weight:700}.el-year-table td.disabled .cell{background-color:#F5F7FA;cursor:not-allowed;color:#C0C4CC}.el-year-table td.disabled .cell:hover{color:#C0C4CC}.el-year-table td .cell{width:48px;height:32px;display:block;line-height:32px;color:#606266;margin:0 auto}.el-year-table td .cell:hover,.el-year-table td.current:not(.disabled) .cell{color:#282C34}.el-date-range-picker{width:646px}.el-date-range-picker.has-sidebar{width:756px}.el-date-range-picker table{table-layout:fixed;width:100%}.el-date-range-picker .el-picker-panel__body{min-width:513px}.el-date-range-picker .el-picker-panel__content{margin:0}.el-date-range-picker__header{position:relative;text-align:center;height:28px}.el-date-range-picker__header [class*=arrow-left]{float:left}.el-date-range-picker__header [class*=arrow-right]{float:right}.el-date-range-picker__header div{font-size:16px;font-weight:500;margin-right:50px}.el-date-range-picker__content{float:left;width:50%;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:16px}.el-date-range-picker__content.is-left{border-right:1px solid #e4e4e4}.el-date-range-picker__content .el-date-range-picker__header div{margin-left:50px;margin-right:50px}.el-date-range-picker__editors-wrap{-webkit-box-sizing:border-box;box-sizing:border-box;display:table-cell}.el-date-range-picker__editors-wrap.is-right{text-align:right}.el-date-range-picker__time-header{position:relative;border-bottom:1px solid #e4e4e4;font-size:12px;padding:8px 5px 5px;display:table;width:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.el-date-range-picker__time-header>.el-icon-arrow-right{font-size:20px;vertical-align:middle;display:table-cell;color:#2C3E50}.el-date-range-picker__time-picker-wrap{position:relative;display:table-cell;padding:0 5px}.el-date-range-picker__time-picker-wrap .el-picker-panel{position:absolute;top:13px;right:0;z-index:1;background:#FFF}.el-date-picker{width:322px}.el-date-picker.has-sidebar.has-time{width:434px}.el-date-picker.has-sidebar{width:438px}.el-date-picker.has-time .el-picker-panel__body-wrapper{position:relative}.el-date-picker .el-picker-panel__content{width:292px}.el-date-picker table{table-layout:fixed;width:100%}.el-date-picker__editor-wrap{position:relative;display:table-cell;padding:0 5px}.el-date-picker__time-header{position:relative;border-bottom:1px solid #e4e4e4;font-size:12px;padding:8px 5px 5px;display:table;width:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.el-date-picker__header{margin:12px;text-align:center}.el-date-picker__header--bordered{margin-bottom:0;padding-bottom:12px;border-bottom:solid 1px #EBEEF5}.el-date-picker__header--bordered+.el-picker-panel__content{margin-top:0}.el-date-picker__header-label{font-size:16px;font-weight:500;padding:0 5px;line-height:22px;text-align:center;cursor:pointer;color:#606266}.el-date-picker__header-label.active,.el-date-picker__header-label:hover{color:#282C34}.el-date-picker__prev-btn{float:left}.el-date-picker__next-btn{float:right}.el-date-picker__time-wrap{padding:10px;text-align:center}.el-date-picker__time-label{float:left;cursor:pointer;line-height:30px;margin-left:10px}.time-select{margin:5px 0;min-width:0}.time-select .el-picker-panel__content{max-height:200px;margin:0}.time-select-item{padding:8px 10px;font-size:14px;line-height:20px}.time-select-item.selected:not(.disabled){color:#282C34;font-weight:700}.time-select-item.disabled{color:#E4E7ED;cursor:not-allowed}.time-select-item:hover{background-color:#F5F7FA;font-weight:700;cursor:pointer}.el-date-editor{position:relative;display:inline-block;text-align:left}.el-date-editor.el-input,.el-date-editor.el-input__inner{width:220px}.el-date-editor--monthrange.el-input,.el-date-editor--monthrange.el-input__inner{width:300px}.el-date-editor--daterange.el-input,.el-date-editor--daterange.el-input__inner,.el-date-editor--timerange.el-input,.el-date-editor--timerange.el-input__inner{width:350px}.el-date-editor--datetimerange.el-input,.el-date-editor--datetimerange.el-input__inner{width:400px}.el-date-editor--dates .el-input__inner{text-overflow:ellipsis;white-space:nowrap}.el-date-editor .el-icon-circle-close{cursor:pointer}.el-date-editor .el-range__icon{font-size:14px;margin-left:-5px;color:#C0C4CC;float:left;line-height:32px}.el-date-editor .el-range-input,.el-date-editor .el-range-separator{height:100%;margin:0;text-align:center;display:inline-block;font-size:14px}.el-date-editor .el-range-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;outline:0;padding:0;width:39%;color:#606266}.el-date-editor .el-range-input::-webkit-input-placeholder{color:#C0C4CC}.el-date-editor .el-range-input::-ms-input-placeholder{color:#C0C4CC}.el-date-editor .el-range-input::placeholder{color:#C0C4CC}.el-date-editor .el-range-separator{padding:0 5px;line-height:32px;width:5%;color:#2C3E50}.el-date-editor .el-range__close-icon{font-size:14px;color:#C0C4CC;width:25px;display:inline-block;float:right;line-height:32px}.el-range-editor.el-input__inner{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:3px 10px}.el-range-editor .el-range-input{line-height:1}.el-range-editor.is-active,.el-range-editor.is-active:hover{border-color:#282C34}.el-range-editor--medium.el-input__inner{height:36px}.el-range-editor--medium .el-range-separator{line-height:28px;font-size:14px}.el-range-editor--medium .el-range-input{font-size:14px}.el-range-editor--medium .el-range__close-icon,.el-range-editor--medium .el-range__icon{line-height:28px}.el-range-editor--small.el-input__inner{height:32px}.el-range-editor--small .el-range-separator{line-height:24px;font-size:13px}.el-range-editor--small .el-range-input{font-size:13px}.el-range-editor--small .el-range__close-icon,.el-range-editor--small .el-range__icon{line-height:24px}.el-range-editor--mini.el-input__inner{height:28px}.el-range-editor--mini .el-range-separator{line-height:20px;font-size:12px}.el-range-editor--mini .el-range-input{font-size:12px}.el-range-editor--mini .el-range__close-icon,.el-range-editor--mini .el-range__icon{line-height:20px}.el-range-editor.is-disabled{background-color:#F5F7FA;border-color:#E4E7ED;color:#C0C4CC;cursor:not-allowed}.el-range-editor.is-disabled:focus,.el-range-editor.is-disabled:hover{border-color:#E4E7ED}.el-range-editor.is-disabled input{background-color:#F5F7FA;color:#C0C4CC;cursor:not-allowed}.el-range-editor.is-disabled input::-webkit-input-placeholder{color:#C0C4CC}.el-range-editor.is-disabled input::-ms-input-placeholder{color:#C0C4CC}.el-range-editor.is-disabled input::placeholder{color:#C0C4CC}.el-range-editor.is-disabled .el-range-separator{color:#C0C4CC}.el-picker-panel{color:#606266;border:1px solid #E4E7ED;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);background:#FFF;border-radius:4px;line-height:30px;margin:5px 0}.el-popover,.el-time-panel{-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-picker-panel__body-wrapper::after,.el-picker-panel__body::after{content:\"\";display:table;clear:both}.el-picker-panel__content{position:relative;margin:15px}.el-picker-panel__footer{border-top:1px solid #e4e4e4;padding:4px;text-align:right;background-color:#FFF;position:relative;font-size:0}.el-picker-panel__shortcut{display:block;width:100%;border:0;background-color:transparent;line-height:28px;font-size:14px;color:#606266;padding-left:12px;text-align:left;outline:0;cursor:pointer}.el-picker-panel__shortcut:hover{color:#282C34}.el-picker-panel__shortcut.active{background-color:#e6f1fe;color:#282C34}.el-picker-panel__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-picker-panel__btn[disabled]{color:#ccc;cursor:not-allowed}.el-picker-panel__icon-btn{font-size:12px;color:#2C3E50;border:0;background:0 0;cursor:pointer;outline:0;margin-top:8px}.el-picker-panel__icon-btn:hover{color:#282C34}.el-picker-panel__icon-btn.is-disabled{color:#bbb}.el-picker-panel__icon-btn.is-disabled:hover{cursor:not-allowed}.el-picker-panel__link-btn{vertical-align:middle}.el-picker-panel [slot=sidebar],.el-picker-panel__sidebar{position:absolute;top:0;bottom:0;width:110px;border-right:1px solid #e4e4e4;-webkit-box-sizing:border-box;box-sizing:border-box;padding-top:6px;background-color:#FFF;overflow:auto}.el-picker-panel [slot=sidebar]+.el-picker-panel__body,.el-picker-panel__sidebar+.el-picker-panel__body{margin-left:110px}.el-time-spinner.has-seconds .el-time-spinner__wrapper{width:33.3%}.el-time-spinner__wrapper{max-height:190px;overflow:auto;display:inline-block;width:50%;vertical-align:top;position:relative}.el-time-spinner__wrapper .el-scrollbar__wrap:not(.el-scrollbar__wrap--hidden-default){padding-bottom:15px}.el-time-spinner__input.el-input .el-input__inner,.el-time-spinner__list{padding:0;text-align:center}.el-time-spinner__wrapper.is-arrow{-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;overflow:hidden}.el-time-spinner__wrapper.is-arrow .el-time-spinner__list{-webkit-transform:translateY(-32px);transform:translateY(-32px)}.el-time-spinner__wrapper.is-arrow .el-time-spinner__item:hover:not(.disabled):not(.active){background:#FFF;cursor:default}.el-time-spinner__arrow{font-size:12px;color:#909399;position:absolute;left:0;width:100%;z-index:1;text-align:center;height:30px;line-height:30px;cursor:pointer}.el-time-spinner__arrow:hover{color:#282C34}.el-time-spinner__arrow.el-icon-arrow-up{top:10px}.el-time-spinner__arrow.el-icon-arrow-down{bottom:10px}.el-time-spinner__input.el-input{width:70%}.el-time-spinner__list{margin:0;list-style:none}.el-time-spinner__list::after,.el-time-spinner__list::before{content:'';display:block;width:100%;height:80px}.el-time-spinner__item{height:32px;line-height:32px;font-size:12px;color:#606266}.el-time-spinner__item:hover:not(.disabled):not(.active){background:#F5F7FA;cursor:pointer}.el-time-spinner__item.active:not(.disabled){color:#2C3E50;font-weight:700}.el-time-spinner__item.disabled{color:#C0C4CC;cursor:not-allowed}.el-time-panel{margin:5px 0;border:1px solid #E4E7ED;background-color:#FFF;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);border-radius:2px;position:absolute;width:180px;left:0;z-index:1000;-moz-user-select:none;user-select:none;-webkit-box-sizing:content-box;box-sizing:content-box}.el-time-panel__content{font-size:0;position:relative;overflow:hidden}.el-time-panel__content::after,.el-time-panel__content::before{content:\"\";top:50%;position:absolute;margin-top:-15px;height:32px;z-index:-1;left:0;right:0;-webkit-box-sizing:border-box;box-sizing:border-box;padding-top:6px;text-align:left;border-top:1px solid #E4E7ED;border-bottom:1px solid #E4E7ED}.el-time-panel__content::after{left:50%;margin-left:12%;margin-right:12%}.el-time-panel__content::before{padding-left:50%;margin-right:12%;margin-left:12%}.el-time-panel__content.has-seconds::after{left:calc(100% / 3 * 2)}.el-time-panel__content.has-seconds::before{padding-left:calc(100% / 3)}.el-time-panel__footer{border-top:1px solid #e4e4e4;padding:4px;height:36px;line-height:25px;text-align:right;-webkit-box-sizing:border-box;box-sizing:border-box}.el-time-panel__btn{border:none;line-height:28px;padding:0 5px;margin:0 5px;cursor:pointer;background-color:transparent;outline:0;font-size:12px;color:#2C3E50}.el-time-panel__btn.confirm{font-weight:800;color:#282C34}.el-time-range-picker{width:354px;overflow:visible}.el-time-range-picker__content{position:relative;text-align:center;padding:10px}.el-time-range-picker__cell{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:4px 7px 7px;width:50%;display:inline-block}.el-time-range-picker__header{margin-bottom:5px;text-align:center;font-size:14px}.el-time-range-picker__body{border-radius:2px;border:1px solid #E4E7ED}.el-popover{position:absolute;background:#FFF;min-width:150px;border:1px solid #EBEEF5;padding:12px;z-index:2000;color:#606266;line-height:1.4;text-align:justify;font-size:14px;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);word-break:break-all}.el-popover--plain{padding:18px 20px}.el-popover__title{color:#2C3E50;font-size:16px;line-height:1;margin-bottom:12px}.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}@keyframes v-modal-in{0%{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-popup-parent--hidden{overflow:hidden}.el-message-box{display:inline-block;width:420px;padding-bottom:10px;vertical-align:middle;background-color:#FFF;border-radius:4px;border:1px solid #EBEEF5;font-size:18px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);text-align:left;overflow:hidden;-webkit-backface-visibility:hidden;backface-visibility:hidden}.el-message-box__wrapper{position:fixed;top:0;bottom:0;left:0;right:0;text-align:center}.el-message-box__wrapper::after{content:\"\";display:inline-block;height:100%;width:0;vertical-align:middle}.el-message-box__header{position:relative;padding:15px 15px 10px}.el-message-box__title{padding-left:0;margin-bottom:0;font-size:18px;line-height:1;color:#2C3E50}.el-message-box__headerbtn{position:absolute;top:15px;right:15px;padding:0;border:none;outline:0;background:0 0;font-size:16px;cursor:pointer}.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,.el-message-box__input input.invalid,.el-message-box__input input.invalid:focus{border-color:#C00}.el-message-box__headerbtn .el-message-box__close{color:#909399}.el-message-box__headerbtn:focus .el-message-box__close,.el-message-box__headerbtn:hover .el-message-box__close{color:#282C34}.el-message-box__content{position:relative;padding:10px 15px;color:#606266;font-size:14px}.el-message-box__input{padding-top:15px}.el-message-box__status{position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);font-size:24px!important}.el-message-box__status::before{padding-left:1px}.el-message-box__status+.el-message-box__message{padding-left:36px;padding-right:12px}.el-message-box__status.el-icon-success{color:#67C23A}.el-message-box__status.el-icon-info{color:#909399}.el-message-box__status.el-icon-warning{color:#E7C000}.el-message-box__status.el-icon-error{color:#C00}.el-message-box__message{margin:0}.el-message-box__message p{margin:0;line-height:24px}.el-message-box__errormsg{color:#C00;font-size:12px;min-height:18px;margin-top:2px}.el-message-box__btns{padding:5px 15px 0;text-align:right}.el-message-box__btns button:nth-child(2){margin-left:10px}.el-message-box__btns-reverse{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.el-container,.el-container.is-vertical,.el-drawer,.el-link,.el-steps--vertical{-webkit-box-direction:normal}.el-message-box--center{padding-bottom:30px}.el-message-box--center .el-message-box__header{padding-top:30px}.el-message-box--center .el-message-box__title{position:relative;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-message-box--center .el-message-box__status{position:relative;top:auto;padding-right:5px;text-align:center;-webkit-transform:translateY(-1px);transform:translateY(-1px)}.el-message-box--center .el-message-box__message{margin-left:0}.el-message-box--center .el-message-box__btns,.el-message-box--center .el-message-box__content{text-align:center}.el-message-box--center .el-message-box__content{padding-left:27px;padding-right:27px}.msgbox-fade-enter-active{-webkit-animation:msgbox-fade-in .3s;animation:msgbox-fade-in .3s}.msgbox-fade-leave-active{-webkit-animation:msgbox-fade-out .3s;animation:msgbox-fade-out .3s}@-webkit-keyframes msgbox-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 msgbox-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 msgbox-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 msgbox-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}}.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:#2C3E50}.el-breadcrumb__inner a:hover,.el-breadcrumb__inner.is-link:hover{color:#282C34;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}.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{display:inline-block;margin-right:10px;vertical-align:top}.el-form--inline .el-form-item__label{float:none;display:inline-block}.el-form--inline .el-form-item__content{display:inline-block;vertical-align:top}.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::after{clear:both}.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-wrap{float:left}.el-form-item__label-wrap .el-form-item__label{display:inline-block;float:none}.el-form-item__label{text-align:right;vertical-align:middle;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__content::after{clear:both}.el-form-item__content .el-input-group{vertical-align:top}.el-form-item__error{color:#C00;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:not(.is-no-asterisk) .el-form-item__label-wrap>.el-form-item__label:before,.el-form-item.is-required:not(.is-no-asterisk)>.el-form-item__label:before{content:'*';color:#C00;margin-right:4px}.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:#C00}.el-form-item--feedback .el-input__validateIcon{display:inline-block}.el-tabs__header{padding:0;position:relative;margin:0 0 15px}.el-tabs__active-bar{position:absolute;bottom:0;left:0;height:2px;background-color:#282C34;z-index:1;-webkit-transition:-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:transform .3s cubic-bezier(.645,.045,.355,1);transition:transform .3s cubic-bezier(.645,.045,.355,1),-webkit-transform .3s cubic-bezier(.645,.045,.355,1);list-style:none}.el-tabs__new-tab{float:right;border:1px solid #d3dce6;height:18px;width:18px;line-height:18px;margin:12px 0 9px 10px;border-radius:3px;text-align:center;font-size:12px;color:#d3dce6;cursor:pointer;-webkit-transition:all .15s;transition:all .15s}.el-collapse-item__arrow,.el-tabs__nav{-webkit-transition:-webkit-transform .3s}.el-tabs__new-tab .el-icon-plus{-webkit-transform:scale(.8,.8);transform:scale(.8,.8)}.el-tabs__new-tab:hover{color:#282C34}.el-tabs__nav-wrap{overflow:hidden;margin-bottom:-1px;position:relative}.el-tabs__nav-wrap::after{content:\"\";position:absolute;left:0;bottom:0;width:100%;height:2px;background-color:#E4E7ED;z-index:1}.el-tabs--border-card>.el-tabs__header .el-tabs__nav-wrap::after,.el-tabs--card>.el-tabs__header .el-tabs__nav-wrap::after{content:none}.el-tabs__nav-wrap.is-scrollable{padding:0 20px;-webkit-box-sizing:border-box;box-sizing:border-box}.el-tabs__nav-scroll{overflow:hidden}.el-tabs__nav-next,.el-tabs__nav-prev{position:absolute;cursor:pointer;line-height:44px;font-size:12px;color:#909399}.el-tabs__nav-next{right:0}.el-tabs__nav-prev{left:0}.el-tabs__nav{white-space:nowrap;position:relative;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;float:left;z-index:2}.el-tabs__nav.is-stretch{min-width:100%;display:-webkit-box;display:-ms-flexbox;display:flex}.el-tabs__nav.is-stretch>*{-webkit-box-flex:1;-ms-flex:1;flex:1;text-align:center}.el-tabs__item{padding:0 20px;height:40px;-webkit-box-sizing:border-box;box-sizing:border-box;line-height:40px;display:inline-block;list-style:none;font-size:14px;font-weight:500;color:#2C3E50;position:relative}.el-tabs__item:focus,.el-tabs__item:focus:active{outline:0}.el-tabs__item:focus.is-active.is-focus:not(:active){-webkit-box-shadow:0 0 2px 2px #282C34 inset;box-shadow:0 0 2px 2px #282C34 inset;border-radius:3px}.el-tabs__item .el-icon-close{border-radius:50%;text-align:center;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);margin-left:5px}.el-tabs__item .el-icon-close:before{-webkit-transform:scale(.9);transform:scale(.9);display:inline-block}.el-tabs__item .el-icon-close:hover{background-color:#C0C4CC;color:#FFF}.el-tabs__item.is-active{color:#282C34}.el-tabs__item:hover{color:#282C34;cursor:pointer}.el-tabs__item.is-disabled{color:#C0C4CC;cursor:default}.el-tabs__content{overflow:hidden;position:relative}.el-tabs--card>.el-tabs__header{border-bottom:1px solid #E4E7ED}.el-tabs--card>.el-tabs__header .el-tabs__nav{border:1px solid #E4E7ED;border-bottom:none;border-radius:4px 4px 0 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-tabs--card>.el-tabs__header .el-tabs__active-bar{display:none}.el-tabs--card>.el-tabs__header .el-tabs__item .el-icon-close{position:relative;font-size:12px;width:0;height:14px;vertical-align:middle;line-height:15px;overflow:hidden;top:-1px;right:-2px;-webkit-transform-origin:100% 50%;transform-origin:100% 50%}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable .el-icon-close,.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover .el-icon-close{width:14px}.el-tabs--card>.el-tabs__header .el-tabs__item{border-bottom:1px solid transparent;border-left:1px solid #E4E7ED;-webkit-transition:color .3s cubic-bezier(.645,.045,.355,1),padding .3s cubic-bezier(.645,.045,.355,1);transition:color .3s cubic-bezier(.645,.045,.355,1),padding .3s cubic-bezier(.645,.045,.355,1)}.el-tabs--card>.el-tabs__header .el-tabs__item:first-child{border-left:none}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover{padding-left:13px;padding-right:13px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active{border-bottom-color:#FFF}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable{padding-left:20px;padding-right:20px}.el-tabs--border-card{background:#FFF;border:1px solid #DCDFE6;-webkit-box-shadow:0 2px 4px 0 rgba(0,0,0,.12),0 0 6px 0 rgba(0,0,0,.04);box-shadow:0 2px 4px 0 rgba(0,0,0,.12),0 0 6px 0 rgba(0,0,0,.04)}.el-tabs--border-card>.el-tabs__content{padding:15px}.el-tabs--border-card>.el-tabs__header{background-color:#F5F7FA;border-bottom:1px solid #E4E7ED;margin:0}.el-tabs--border-card>.el-tabs__header .el-tabs__item{-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);border:1px solid transparent;margin-top:-1px;color:#909399}.el-tabs--border-card>.el-tabs__header .el-tabs__item+.el-tabs__item,.el-tabs--border-card>.el-tabs__header .el-tabs__item:first-child{margin-left:-1px}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active{color:#282C34;background-color:#FFF;border-right-color:#DCDFE6;border-left-color:#DCDFE6}.el-tabs--border-card>.el-tabs__header .el-tabs__item:not(.is-disabled):hover{color:#282C34}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-disabled{color:#C0C4CC}.el-tabs--border-card>.el-tabs__header .is-scrollable .el-tabs__item:first-child{margin-left:0}.el-tabs--bottom .el-tabs__item.is-bottom:nth-child(2),.el-tabs--bottom .el-tabs__item.is-top:nth-child(2),.el-tabs--top .el-tabs__item.is-bottom:nth-child(2),.el-tabs--top .el-tabs__item.is-top:nth-child(2){padding-left:0}.el-tabs--bottom .el-tabs__item.is-bottom:last-child,.el-tabs--bottom .el-tabs__item.is-top:last-child,.el-tabs--top .el-tabs__item.is-bottom:last-child,.el-tabs--top .el-tabs__item.is-top:last-child{padding-right:0}.el-tabs--bottom .el-tabs--left>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom .el-tabs--right>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--left>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--right>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2){padding-left:20px}.el-tabs--bottom .el-tabs--left>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom .el-tabs--right>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top .el-tabs--left>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top .el-tabs--right>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:last-child{padding-right:20px}.el-tabs--bottom .el-tabs__header.is-bottom{margin-bottom:0;margin-top:10px}.el-tabs--bottom.el-tabs--border-card .el-tabs__header.is-bottom{border-bottom:0;border-top:1px solid #DCDFE6}.el-tabs--bottom.el-tabs--border-card .el-tabs__nav-wrap.is-bottom{margin-top:-1px;margin-bottom:0}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom:not(.is-active){border:1px solid transparent}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom{margin:0 -1px -1px}.el-tabs--left,.el-tabs--right{overflow:hidden}.el-tabs--left .el-tabs__header.is-left,.el-tabs--left .el-tabs__header.is-right,.el-tabs--left .el-tabs__nav-scroll,.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__header.is-left,.el-tabs--right .el-tabs__header.is-right,.el-tabs--right .el-tabs__nav-scroll,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{height:100%}.el-tabs--left .el-tabs__active-bar.is-left,.el-tabs--left .el-tabs__active-bar.is-right,.el-tabs--right .el-tabs__active-bar.is-left,.el-tabs--right .el-tabs__active-bar.is-right{top:0;bottom:auto;width:2px;height:auto}.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{margin-bottom:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{height:30px;line-height:30px;width:100%;text-align:center;cursor:pointer}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i{-webkit-transform:rotateZ(90deg);transform:rotateZ(90deg)}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{left:auto;top:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next{right:auto;bottom:0}.el-tabs--left .el-tabs__active-bar.is-left,.el-tabs--left .el-tabs__nav-wrap.is-left::after{right:0;left:auto}.el-tabs--left .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--left .el-tabs__nav-wrap.is-right.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-right.is-scrollable{padding:30px 0}.el-tabs--left .el-tabs__nav-wrap.is-left::after,.el-tabs--left .el-tabs__nav-wrap.is-right::after,.el-tabs--right .el-tabs__nav-wrap.is-left::after,.el-tabs--right .el-tabs__nav-wrap.is-right::after{height:100%;width:2px;bottom:auto;top:0}.el-tabs--left .el-tabs__nav.is-left,.el-tabs--left .el-tabs__nav.is-right,.el-tabs--right .el-tabs__nav.is-left,.el-tabs--right .el-tabs__nav.is-right{float:none}.el-tabs--left .el-tabs__item.is-left,.el-tabs--left .el-tabs__item.is-right,.el-tabs--right .el-tabs__item.is-left,.el-tabs--right .el-tabs__item.is-right{display:block}.el-tabs--left.el-tabs--card .el-tabs__active-bar.is-left,.el-tabs--right.el-tabs--card .el-tabs__active-bar.is-right{display:none}.el-tabs--left .el-tabs__header.is-left{float:left;margin-bottom:0;margin-right:10px}.el-tabs--left .el-tabs__nav-wrap.is-left{margin-right:-1px}.el-tabs--left .el-tabs__item.is-left{text-align:right}.el-tabs--left.el-tabs--card .el-tabs__item.is-left{border-left:none;border-right:1px solid #E4E7ED;border-bottom:none;border-top:1px solid #E4E7ED;text-align:left}.el-tabs--left.el-tabs--card .el-tabs__item.is-left:first-child{border-right:1px solid #E4E7ED;border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active{border:1px solid #E4E7ED;border-right-color:#fff;border-left:none;border-bottom:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:first-child{border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:last-child{border-bottom:none}.el-tabs--left.el-tabs--card .el-tabs__nav{border-radius:4px 0 0 4px;border-bottom:1px solid #E4E7ED;border-right:none}.el-tabs--left.el-tabs--card .el-tabs__new-tab{float:none}.el-tabs--left.el-tabs--border-card .el-tabs__header.is-left{border-right:1px solid #dfe4ed}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left{border:1px solid transparent;margin:-1px 0 -1px -1px}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left.is-active{border-color:#d1dbe5 transparent}.el-tabs--right .el-tabs__header.is-right{float:right;margin-bottom:0;margin-left:10px}.el-tabs--right .el-tabs__nav-wrap.is-right{margin-left:-1px}.el-tabs--right .el-tabs__nav-wrap.is-right::after{left:0;right:auto}.el-tabs--right .el-tabs__active-bar.is-right{left:0}.el-tabs--right.el-tabs--card .el-tabs__item.is-right{border-bottom:none;border-top:1px solid #E4E7ED}.el-tabs--right.el-tabs--card .el-tabs__item.is-right:first-child{border-left:1px solid #E4E7ED;border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active{border:1px solid #E4E7ED;border-left-color:#fff;border-right:none;border-bottom:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:first-child{border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:last-child{border-bottom:none}.el-tabs--right.el-tabs--card .el-tabs__nav{border-radius:0 4px 4px 0;border-bottom:1px solid #E4E7ED;border-left:none}.el-tabs--right.el-tabs--border-card .el-tabs__header.is-right{border-left:1px solid #dfe4ed}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right{border:1px solid transparent;margin:-1px -1px -1px 0}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right.is-active{border-color:#d1dbe5 transparent}.slideInLeft-transition,.slideInRight-transition{display:inline-block}.slideInRight-enter{-webkit-animation:slideInRight-enter .3s;animation:slideInRight-enter .3s}.slideInRight-leave{position:absolute;left:0;right:0;-webkit-animation:slideInRight-leave .3s;animation:slideInRight-leave .3s}.slideInLeft-enter{-webkit-animation:slideInLeft-enter .3s;animation:slideInLeft-enter .3s}.slideInLeft-leave{position:absolute;left:0;right:0;-webkit-animation:slideInLeft-leave .3s;animation:slideInLeft-leave .3s}@-webkit-keyframes slideInRight-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes slideInRight-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes slideInRight-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}100%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}}@keyframes slideInRight-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}100%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}}@-webkit-keyframes slideInLeft-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes slideInLeft-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes slideInLeft-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}100%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%);opacity:0}}@keyframes slideInLeft-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}100%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%);opacity:0}}.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:#909399}.el-tree__drop-indicator{position:absolute;left:0;right:0;height:1px;background-color:#282C34}.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:#282C34;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>label.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.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:#eeeeef}.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-light .el-alert__closebtn{color:#C0C4CC}.el-alert.is-dark .el-alert__closebtn,.el-alert.is-dark .el-alert__description{color:#FFF}.el-alert.is-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-alert--success.is-light{background-color:#f0f9eb;color:#67C23A}.el-alert--success.is-light .el-alert__description{color:#67C23A}.el-alert--success.is-dark{background-color:#67C23A;color:#FFF}.el-alert--info.is-light{background-color:#f4f4f5;color:#909399}.el-alert--info.is-dark{background-color:#909399;color:#FFF}.el-alert--info .el-alert__description{color:#909399}.el-alert--warning.is-light{background-color:#fdf9e6;color:#E7C000}.el-alert--warning.is-light .el-alert__description{color:#E7C000}.el-alert--warning.is-dark{background-color:#E7C000;color:#FFF}.el-alert--error.is-light{background-color:#fae6e6;color:#C00}.el-alert--error.is-light .el-alert__description{color:#C00}.el-alert--error.is-dark{background-color:#C00;color:#FFF}.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;opacity:1;position:absolute;top:12px;right:15px;cursor:pointer}.el-alert-fade-enter,.el-alert-fade-leave-active,.el-loading-fade-enter,.el-loading-fade-leave-active,.el-notification-fade-leave-active{opacity:0}.el-alert__closebtn.is-customed{font-style:normal;font-size:13px;top:9px}.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;margin-right:8px}.el-notification__title{font-weight:700;font-size:16px;color:#2C3E50;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:#C00}.el-notification .el-icon-info{color:#909399}.el-notification .el-icon-warning{color:#E7C000}.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-input-number{position:relative;display:inline-block;width:180px;line-height:38px}.el-input-number .el-input{display:block}.el-input-number .el-input__inner{-webkit-appearance:none;padding-left:50px;padding-right:50px;text-align:center}.el-input-number__decrease,.el-input-number__increase{position:absolute;z-index:1;top:1px;width:40px;height:auto;text-align:center;background:#F5F7FA;color:#606266;cursor:pointer;font-size:13px}.el-input-number__decrease:hover,.el-input-number__increase:hover{color:#282C34}.el-input-number__decrease:hover:not(.is-disabled)~.el-input .el-input__inner:not(.is-disabled),.el-input-number__increase:hover:not(.is-disabled)~.el-input .el-input__inner:not(.is-disabled){border-color:#282C34}.el-input-number__decrease.is-disabled,.el-input-number__increase.is-disabled{color:#C0C4CC;cursor:not-allowed}.el-input-number__increase{right:1px;border-radius:0 4px 4px 0;border-left:1px solid #DCDFE6}.el-input-number__decrease{left:1px;border-radius:4px 0 0 4px;border-right:1px solid #DCDFE6}.el-input-number.is-disabled .el-input-number__decrease,.el-input-number.is-disabled .el-input-number__increase{border-color:#E4E7ED;color:#E4E7ED}.el-input-number.is-disabled .el-input-number__decrease:hover,.el-input-number.is-disabled .el-input-number__increase:hover{color:#E4E7ED;cursor:not-allowed}.el-input-number--medium{width:200px;line-height:34px}.el-input-number--medium .el-input-number__decrease,.el-input-number--medium .el-input-number__increase{width:36px;font-size:14px}.el-input-number--medium .el-input__inner{padding-left:43px;padding-right:43px}.el-input-number--small{width:130px;line-height:30px}.el-input-number--small .el-input-number__decrease,.el-input-number--small .el-input-number__increase{width:32px;font-size:13px}.el-input-number--small .el-input-number__decrease [class*=el-icon],.el-input-number--small .el-input-number__increase [class*=el-icon]{-webkit-transform:scale(.9);transform:scale(.9)}.el-input-number--small .el-input__inner{padding-left:39px;padding-right:39px}.el-input-number--mini{width:130px;line-height:26px}.el-input-number--mini .el-input-number__decrease,.el-input-number--mini .el-input-number__increase{width:28px;font-size:12px}.el-input-number--mini .el-input-number__decrease [class*=el-icon],.el-input-number--mini .el-input-number__increase [class*=el-icon]{-webkit-transform:scale(.8);transform:scale(.8)}.el-input-number--mini .el-input__inner{padding-left:35px;padding-right:35px}.el-input-number.is-without-controls .el-input__inner{padding-left:15px;padding-right:15px}.el-input-number.is-controls-right .el-input__inner{padding-left:15px;padding-right:50px}.el-input-number.is-controls-right .el-input-number__decrease,.el-input-number.is-controls-right .el-input-number__increase{height:auto;line-height:19px}.el-input-number.is-controls-right .el-input-number__decrease [class*=el-icon],.el-input-number.is-controls-right .el-input-number__increase [class*=el-icon]{-webkit-transform:scale(.8);transform:scale(.8)}.el-input-number.is-controls-right .el-input-number__increase{border-radius:0 4px 0 0;border-bottom:1px solid #DCDFE6}.el-input-number.is-controls-right .el-input-number__decrease{right:1px;bottom:1px;top:auto;left:auto;border-right:none;border-left:1px solid #DCDFE6;border-radius:0 0 4px}.el-input-number.is-controls-right[class*=medium] [class*=decrease],.el-input-number.is-controls-right[class*=medium] [class*=increase]{line-height:17px}.el-input-number.is-controls-right[class*=small] [class*=decrease],.el-input-number.is-controls-right[class*=small] [class*=increase]{line-height:15px}.el-input-number.is-controls-right[class*=mini] [class*=decrease],.el-input-number.is-controls-right[class*=mini] [class*=increase]{line-height:13px}.el-tooltip__popper{position:absolute;border-radius:4px;padding:10px;z-index:2000;font-size:12px;line-height:1.2;min-width:10px;word-wrap:break-word}.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-progress-bar__inner::after,.el-row::after,.el-row::before,.el-slider::after,.el-slider::before,.el-slider__button-wrapper::after,.el-upload-cover::after{content:\"\"}.el-tooltip__popper[x-placement^=top]{margin-bottom:12px}.el-tooltip__popper[x-placement^=top] .popper__arrow{bottom:-6px;border-top-color:#2C3E50;border-bottom-width:0}.el-tooltip__popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-5px;border-top-color:#2C3E50;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:#2C3E50}.el-tooltip__popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-5px;border-top-width:0;border-bottom-color:#2C3E50}.el-tooltip__popper[x-placement^=right]{margin-left:12px}.el-tooltip__popper[x-placement^=right] .popper__arrow{left:-6px;border-right-color:#2C3E50;border-left-width:0}.el-tooltip__popper[x-placement^=right] .popper__arrow::after{bottom:-5px;left:1px;border-right-color:#2C3E50;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:#2C3E50}.el-tooltip__popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-5px;margin-left:-5px;border-right-width:0;border-left-color:#2C3E50}.el-tooltip__popper.is-dark{background:#2C3E50;color:#FFF}.el-tooltip__popper.is-light{background:#FFF;border:1px solid #2C3E50}.el-tooltip__popper.is-light[x-placement^=top] .popper__arrow{border-top-color:#2C3E50}.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:#2C3E50}.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:#2C3E50}.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:#2C3E50}.el-tooltip__popper.is-light[x-placement^=right] .popper__arrow::after{border-right-color:#FFF}.el-slider::after,.el-slider::before{display:table}.el-slider__button-wrapper .el-tooltip,.el-slider__button-wrapper::after{vertical-align:middle;display:inline-block}.el-slider::after{clear:both}.el-slider__runway{width:100%;height:6px;margin:16px 0;background-color:#E4E7ED;border-radius:3px;position:relative;cursor:pointer;vertical-align:middle}.el-slider__runway.show-input{margin-right:160px;width:auto}.el-slider__runway.disabled{cursor:default}.el-slider__runway.disabled .el-slider__bar{background-color:#C0C4CC}.el-slider__runway.disabled .el-slider__button{border-color:#C0C4CC}.el-slider__runway.disabled .el-slider__button-wrapper.dragging,.el-slider__runway.disabled .el-slider__button-wrapper.hover,.el-slider__runway.disabled .el-slider__button-wrapper:hover{cursor:not-allowed}.el-slider__runway.disabled .el-slider__button.dragging,.el-slider__runway.disabled .el-slider__button.hover,.el-slider__runway.disabled .el-slider__button:hover{-webkit-transform:scale(1);transform:scale(1);cursor:not-allowed}.el-slider__button-wrapper,.el-slider__stop{-webkit-transform:translateX(-50%);position:absolute}.el-slider__input{float:right;margin-top:3px;width:130px}.el-slider__input.el-input-number--mini{margin-top:5px}.el-slider__input.el-input-number--medium{margin-top:0}.el-slider__input.el-input-number--large{margin-top:-2px}.el-slider__bar{height:6px;background-color:#282C34;border-top-left-radius:3px;border-bottom-left-radius:3px;position:absolute}.el-slider__button-wrapper{height:36px;width:36px;z-index:1001;top:-15px;transform:translateX(-50%);background-color:transparent;text-align:center;-moz-user-select:none;user-select:none;line-height:normal}.el-slider__button,.el-step__icon-inner{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.el-slider__button-wrapper::after{height:100%}.el-slider__button-wrapper.hover,.el-slider__button-wrapper:hover{cursor:-webkit-grab;cursor:grab}.el-slider__button-wrapper.dragging{cursor:-webkit-grabbing;cursor:grabbing}.el-slider__button{width:16px;height:16px;border:2px solid #282C34;background-color:#FFF;border-radius:50%;-webkit-transition:.2s;transition:.2s;user-select:none}.el-slider__button.dragging,.el-slider__button.hover,.el-slider__button:hover{-webkit-transform:scale(1.2);transform:scale(1.2)}.el-slider__button.hover,.el-slider__button:hover{cursor:-webkit-grab;cursor:grab}.el-slider__button.dragging{cursor:-webkit-grabbing;cursor:grabbing}.el-slider__stop{height:6px;width:6px;border-radius:100%;background-color:#FFF;transform:translateX(-50%)}.el-slider__marks{top:0;left:12px;width:18px;height:100%}.el-slider__marks-text{position:absolute;-webkit-transform:translateX(-50%);transform:translateX(-50%);font-size:14px;color:#909399;margin-top:15px}.el-slider.is-vertical{position:relative}.el-slider.is-vertical .el-slider__runway{width:6px;height:100%;margin:0 16px}.el-slider.is-vertical .el-slider__bar{width:6px;height:auto;border-radius:0 0 3px 3px}.el-slider.is-vertical .el-slider__button-wrapper{top:auto;left:-15px;-webkit-transform:translateY(50%);transform:translateY(50%)}.el-slider.is-vertical .el-slider__stop{-webkit-transform:translateY(50%);transform:translateY(50%)}.el-slider.is-vertical.el-slider--with-input{padding-bottom:58px}.el-slider.is-vertical.el-slider--with-input .el-slider__input{overflow:visible;float:none;position:absolute;bottom:22px;width:36px;margin-top:15px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input__inner{text-align:center;padding-left:5px;padding-right:5px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__decrease,.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase{top:32px;margin-top:-1px;border:1px solid #DCDFE6;line-height:20px;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-transition:border-color .2s cubic-bezier(.645,.045,.355,1);transition:border-color .2s cubic-bezier(.645,.045,.355,1)}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__decrease{width:18px;right:18px;border-bottom-left-radius:4px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase{width:19px;border-bottom-right-radius:4px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase~.el-input .el-input__inner{border-bottom-left-radius:0;border-bottom-right-radius:0}.el-slider.is-vertical.el-slider--with-input .el-slider__input:hover .el-input-number__decrease,.el-slider.is-vertical.el-slider--with-input .el-slider__input:hover .el-input-number__increase{border-color:#C0C4CC}.el-slider.is-vertical.el-slider--with-input .el-slider__input:active .el-input-number__decrease,.el-slider.is-vertical.el-slider--with-input .el-slider__input:active .el-input-number__increase{border-color:#282C34}.el-slider.is-vertical .el-slider__marks-text{margin-top:0;left:15px;-webkit-transform:translateY(50%);transform:translateY(50%)}.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-col-pull-0,.el-col-pull-1,.el-col-pull-10,.el-col-pull-11,.el-col-pull-13,.el-col-pull-14,.el-col-pull-15,.el-col-pull-16,.el-col-pull-17,.el-col-pull-18,.el-col-pull-19,.el-col-pull-2,.el-col-pull-20,.el-col-pull-21,.el-col-pull-22,.el-col-pull-23,.el-col-pull-24,.el-col-pull-3,.el-col-pull-4,.el-col-pull-5,.el-col-pull-6,.el-col-pull-7,.el-col-pull-8,.el-col-pull-9,.el-col-push-0,.el-col-push-1,.el-col-push-10,.el-col-push-11,.el-col-push-12,.el-col-push-13,.el-col-push-14,.el-col-push-15,.el-col-push-16,.el-col-push-17,.el-col-push-18,.el-col-push-19,.el-col-push-2,.el-col-push-20,.el-col-push-21,.el-col-push-22,.el-col-push-23,.el-col-push-24,.el-col-push-3,.el-col-push-4,.el-col-push-5,.el-col-push-6,.el-col-push-7,.el-col-push-8,.el-col-push-9,.el-row{position:relative}.el-loading-spinner .el-loading-text{color:#282C34;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:#282C34;stroke-linecap:round}.el-loading-spinner i{color:#282C34}@-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}}.el-row{-webkit-box-sizing:border-box;box-sizing:border-box}.el-row::after,.el-row::before{display:table}.el-row::after{clear:both}.el-row--flex{display:-webkit-box;display:-ms-flexbox;display:flex}.el-col-0,.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}[class*=el-col-]{float:left;-webkit-box-sizing:border-box;box-sizing:border-box}.el-upload--picture-card,.el-upload-dragger{-webkit-box-sizing:border-box;cursor:pointer}.el-col-0{width:0%}.el-col-offset-0{margin-left:0}.el-col-pull-0{right:0}.el-col-push-0{left:0}.el-col-1{width:4.16667%}.el-col-offset-1{margin-left:4.16667%}.el-col-pull-1{right:4.16667%}.el-col-push-1{left:4.16667%}.el-col-2{width:8.33333%}.el-col-offset-2{margin-left:8.33333%}.el-col-pull-2{right:8.33333%}.el-col-push-2{left:8.33333%}.el-col-3{width:12.5%}.el-col-offset-3{margin-left:12.5%}.el-col-pull-3{right:12.5%}.el-col-push-3{left:12.5%}.el-col-4{width:16.66667%}.el-col-offset-4{margin-left:16.66667%}.el-col-pull-4{right:16.66667%}.el-col-push-4{left:16.66667%}.el-col-5{width:20.83333%}.el-col-offset-5{margin-left:20.83333%}.el-col-pull-5{right:20.83333%}.el-col-push-5{left:20.83333%}.el-col-6{width:25%}.el-col-offset-6{margin-left:25%}.el-col-pull-6{right:25%}.el-col-push-6{left:25%}.el-col-7{width:29.16667%}.el-col-offset-7{margin-left:29.16667%}.el-col-pull-7{right:29.16667%}.el-col-push-7{left:29.16667%}.el-col-8{width:33.33333%}.el-col-offset-8{margin-left:33.33333%}.el-col-pull-8{right:33.33333%}.el-col-push-8{left:33.33333%}.el-col-9{width:37.5%}.el-col-offset-9{margin-left:37.5%}.el-col-pull-9{right:37.5%}.el-col-push-9{left:37.5%}.el-col-10{width:41.66667%}.el-col-offset-10{margin-left:41.66667%}.el-col-pull-10{right:41.66667%}.el-col-push-10{left:41.66667%}.el-col-11{width:45.83333%}.el-col-offset-11{margin-left:45.83333%}.el-col-pull-11{right:45.83333%}.el-col-push-11{left:45.83333%}.el-col-12{width:50%}.el-col-offset-12{margin-left:50%}.el-col-pull-12{position:relative;right:50%}.el-col-push-12{left:50%}.el-col-13{width:54.16667%}.el-col-offset-13{margin-left:54.16667%}.el-col-pull-13{right:54.16667%}.el-col-push-13{left:54.16667%}.el-col-14{width:58.33333%}.el-col-offset-14{margin-left:58.33333%}.el-col-pull-14{right:58.33333%}.el-col-push-14{left:58.33333%}.el-col-15{width:62.5%}.el-col-offset-15{margin-left:62.5%}.el-col-pull-15{right:62.5%}.el-col-push-15{left:62.5%}.el-col-16{width:66.66667%}.el-col-offset-16{margin-left:66.66667%}.el-col-pull-16{right:66.66667%}.el-col-push-16{left:66.66667%}.el-col-17{width:70.83333%}.el-col-offset-17{margin-left:70.83333%}.el-col-pull-17{right:70.83333%}.el-col-push-17{left:70.83333%}.el-col-18{width:75%}.el-col-offset-18{margin-left:75%}.el-col-pull-18{right:75%}.el-col-push-18{left:75%}.el-col-19{width:79.16667%}.el-col-offset-19{margin-left:79.16667%}.el-col-pull-19{right:79.16667%}.el-col-push-19{left:79.16667%}.el-col-20{width:83.33333%}.el-col-offset-20{margin-left:83.33333%}.el-col-pull-20{right:83.33333%}.el-col-push-20{left:83.33333%}.el-col-21{width:87.5%}.el-col-offset-21{margin-left:87.5%}.el-col-pull-21{right:87.5%}.el-col-push-21{left:87.5%}.el-col-22{width:91.66667%}.el-col-offset-22{margin-left:91.66667%}.el-col-pull-22{right:91.66667%}.el-col-push-22{left:91.66667%}.el-col-23{width:95.83333%}.el-col-offset-23{margin-left:95.83333%}.el-col-pull-23{right:95.83333%}.el-col-push-23{left:95.83333%}.el-col-24{width:100%}.el-col-offset-24{margin-left:100%}.el-col-pull-24{right:100%}.el-col-push-24{left:100%}@media only screen and (max-width:767px){.el-col-xs-0{display:none;width:0%}.el-col-xs-offset-0{margin-left:0}.el-col-xs-pull-0{position:relative;right:0}.el-col-xs-push-0{position:relative;left:0}.el-col-xs-1{width:4.16667%}.el-col-xs-offset-1{margin-left:4.16667%}.el-col-xs-pull-1{position:relative;right:4.16667%}.el-col-xs-push-1{position:relative;left:4.16667%}.el-col-xs-2{width:8.33333%}.el-col-xs-offset-2{margin-left:8.33333%}.el-col-xs-pull-2{position:relative;right:8.33333%}.el-col-xs-push-2{position:relative;left:8.33333%}.el-col-xs-3{width:12.5%}.el-col-xs-offset-3{margin-left:12.5%}.el-col-xs-pull-3{position:relative;right:12.5%}.el-col-xs-push-3{position:relative;left:12.5%}.el-col-xs-4{width:16.66667%}.el-col-xs-offset-4{margin-left:16.66667%}.el-col-xs-pull-4{position:relative;right:16.66667%}.el-col-xs-push-4{position:relative;left:16.66667%}.el-col-xs-5{width:20.83333%}.el-col-xs-offset-5{margin-left:20.83333%}.el-col-xs-pull-5{position:relative;right:20.83333%}.el-col-xs-push-5{position:relative;left:20.83333%}.el-col-xs-6{width:25%}.el-col-xs-offset-6{margin-left:25%}.el-col-xs-pull-6{position:relative;right:25%}.el-col-xs-push-6{position:relative;left:25%}.el-col-xs-7{width:29.16667%}.el-col-xs-offset-7{margin-left:29.16667%}.el-col-xs-pull-7{position:relative;right:29.16667%}.el-col-xs-push-7{position:relative;left:29.16667%}.el-col-xs-8{width:33.33333%}.el-col-xs-offset-8{margin-left:33.33333%}.el-col-xs-pull-8{position:relative;right:33.33333%}.el-col-xs-push-8{position:relative;left:33.33333%}.el-col-xs-9{width:37.5%}.el-col-xs-offset-9{margin-left:37.5%}.el-col-xs-pull-9{position:relative;right:37.5%}.el-col-xs-push-9{position:relative;left:37.5%}.el-col-xs-10{width:41.66667%}.el-col-xs-offset-10{margin-left:41.66667%}.el-col-xs-pull-10{position:relative;right:41.66667%}.el-col-xs-push-10{position:relative;left:41.66667%}.el-col-xs-11{width:45.83333%}.el-col-xs-offset-11{margin-left:45.83333%}.el-col-xs-pull-11{position:relative;right:45.83333%}.el-col-xs-push-11{position:relative;left:45.83333%}.el-col-xs-12{width:50%}.el-col-xs-offset-12{margin-left:50%}.el-col-xs-pull-12{position:relative;right:50%}.el-col-xs-push-12{position:relative;left:50%}.el-col-xs-13{width:54.16667%}.el-col-xs-offset-13{margin-left:54.16667%}.el-col-xs-pull-13{position:relative;right:54.16667%}.el-col-xs-push-13{position:relative;left:54.16667%}.el-col-xs-14{width:58.33333%}.el-col-xs-offset-14{margin-left:58.33333%}.el-col-xs-pull-14{position:relative;right:58.33333%}.el-col-xs-push-14{position:relative;left:58.33333%}.el-col-xs-15{width:62.5%}.el-col-xs-offset-15{margin-left:62.5%}.el-col-xs-pull-15{position:relative;right:62.5%}.el-col-xs-push-15{position:relative;left:62.5%}.el-col-xs-16{width:66.66667%}.el-col-xs-offset-16{margin-left:66.66667%}.el-col-xs-pull-16{position:relative;right:66.66667%}.el-col-xs-push-16{position:relative;left:66.66667%}.el-col-xs-17{width:70.83333%}.el-col-xs-offset-17{margin-left:70.83333%}.el-col-xs-pull-17{position:relative;right:70.83333%}.el-col-xs-push-17{position:relative;left:70.83333%}.el-col-xs-18{width:75%}.el-col-xs-offset-18{margin-left:75%}.el-col-xs-pull-18{position:relative;right:75%}.el-col-xs-push-18{position:relative;left:75%}.el-col-xs-19{width:79.16667%}.el-col-xs-offset-19{margin-left:79.16667%}.el-col-xs-pull-19{position:relative;right:79.16667%}.el-col-xs-push-19{position:relative;left:79.16667%}.el-col-xs-20{width:83.33333%}.el-col-xs-offset-20{margin-left:83.33333%}.el-col-xs-pull-20{position:relative;right:83.33333%}.el-col-xs-push-20{position:relative;left:83.33333%}.el-col-xs-21{width:87.5%}.el-col-xs-offset-21{margin-left:87.5%}.el-col-xs-pull-21{position:relative;right:87.5%}.el-col-xs-push-21{position:relative;left:87.5%}.el-col-xs-22{width:91.66667%}.el-col-xs-offset-22{margin-left:91.66667%}.el-col-xs-pull-22{position:relative;right:91.66667%}.el-col-xs-push-22{position:relative;left:91.66667%}.el-col-xs-23{width:95.83333%}.el-col-xs-offset-23{margin-left:95.83333%}.el-col-xs-pull-23{position:relative;right:95.83333%}.el-col-xs-push-23{position:relative;left:95.83333%}.el-col-xs-24{width:100%}.el-col-xs-offset-24{margin-left:100%}.el-col-xs-pull-24{position:relative;right:100%}.el-col-xs-push-24{position:relative;left:100%}}@media only screen and (min-width:768px){.el-col-sm-0{display:none;width:0%}.el-col-sm-offset-0{margin-left:0}.el-col-sm-pull-0{position:relative;right:0}.el-col-sm-push-0{position:relative;left:0}.el-col-sm-1{width:4.16667%}.el-col-sm-offset-1{margin-left:4.16667%}.el-col-sm-pull-1{position:relative;right:4.16667%}.el-col-sm-push-1{position:relative;left:4.16667%}.el-col-sm-2{width:8.33333%}.el-col-sm-offset-2{margin-left:8.33333%}.el-col-sm-pull-2{position:relative;right:8.33333%}.el-col-sm-push-2{position:relative;left:8.33333%}.el-col-sm-3{width:12.5%}.el-col-sm-offset-3{margin-left:12.5%}.el-col-sm-pull-3{position:relative;right:12.5%}.el-col-sm-push-3{position:relative;left:12.5%}.el-col-sm-4{width:16.66667%}.el-col-sm-offset-4{margin-left:16.66667%}.el-col-sm-pull-4{position:relative;right:16.66667%}.el-col-sm-push-4{position:relative;left:16.66667%}.el-col-sm-5{width:20.83333%}.el-col-sm-offset-5{margin-left:20.83333%}.el-col-sm-pull-5{position:relative;right:20.83333%}.el-col-sm-push-5{position:relative;left:20.83333%}.el-col-sm-6{width:25%}.el-col-sm-offset-6{margin-left:25%}.el-col-sm-pull-6{position:relative;right:25%}.el-col-sm-push-6{position:relative;left:25%}.el-col-sm-7{width:29.16667%}.el-col-sm-offset-7{margin-left:29.16667%}.el-col-sm-pull-7{position:relative;right:29.16667%}.el-col-sm-push-7{position:relative;left:29.16667%}.el-col-sm-8{width:33.33333%}.el-col-sm-offset-8{margin-left:33.33333%}.el-col-sm-pull-8{position:relative;right:33.33333%}.el-col-sm-push-8{position:relative;left:33.33333%}.el-col-sm-9{width:37.5%}.el-col-sm-offset-9{margin-left:37.5%}.el-col-sm-pull-9{position:relative;right:37.5%}.el-col-sm-push-9{position:relative;left:37.5%}.el-col-sm-10{width:41.66667%}.el-col-sm-offset-10{margin-left:41.66667%}.el-col-sm-pull-10{position:relative;right:41.66667%}.el-col-sm-push-10{position:relative;left:41.66667%}.el-col-sm-11{width:45.83333%}.el-col-sm-offset-11{margin-left:45.83333%}.el-col-sm-pull-11{position:relative;right:45.83333%}.el-col-sm-push-11{position:relative;left:45.83333%}.el-col-sm-12{width:50%}.el-col-sm-offset-12{margin-left:50%}.el-col-sm-pull-12{position:relative;right:50%}.el-col-sm-push-12{position:relative;left:50%}.el-col-sm-13{width:54.16667%}.el-col-sm-offset-13{margin-left:54.16667%}.el-col-sm-pull-13{position:relative;right:54.16667%}.el-col-sm-push-13{position:relative;left:54.16667%}.el-col-sm-14{width:58.33333%}.el-col-sm-offset-14{margin-left:58.33333%}.el-col-sm-pull-14{position:relative;right:58.33333%}.el-col-sm-push-14{position:relative;left:58.33333%}.el-col-sm-15{width:62.5%}.el-col-sm-offset-15{margin-left:62.5%}.el-col-sm-pull-15{position:relative;right:62.5%}.el-col-sm-push-15{position:relative;left:62.5%}.el-col-sm-16{width:66.66667%}.el-col-sm-offset-16{margin-left:66.66667%}.el-col-sm-pull-16{position:relative;right:66.66667%}.el-col-sm-push-16{position:relative;left:66.66667%}.el-col-sm-17{width:70.83333%}.el-col-sm-offset-17{margin-left:70.83333%}.el-col-sm-pull-17{position:relative;right:70.83333%}.el-col-sm-push-17{position:relative;left:70.83333%}.el-col-sm-18{width:75%}.el-col-sm-offset-18{margin-left:75%}.el-col-sm-pull-18{position:relative;right:75%}.el-col-sm-push-18{position:relative;left:75%}.el-col-sm-19{width:79.16667%}.el-col-sm-offset-19{margin-left:79.16667%}.el-col-sm-pull-19{position:relative;right:79.16667%}.el-col-sm-push-19{position:relative;left:79.16667%}.el-col-sm-20{width:83.33333%}.el-col-sm-offset-20{margin-left:83.33333%}.el-col-sm-pull-20{position:relative;right:83.33333%}.el-col-sm-push-20{position:relative;left:83.33333%}.el-col-sm-21{width:87.5%}.el-col-sm-offset-21{margin-left:87.5%}.el-col-sm-pull-21{position:relative;right:87.5%}.el-col-sm-push-21{position:relative;left:87.5%}.el-col-sm-22{width:91.66667%}.el-col-sm-offset-22{margin-left:91.66667%}.el-col-sm-pull-22{position:relative;right:91.66667%}.el-col-sm-push-22{position:relative;left:91.66667%}.el-col-sm-23{width:95.83333%}.el-col-sm-offset-23{margin-left:95.83333%}.el-col-sm-pull-23{position:relative;right:95.83333%}.el-col-sm-push-23{position:relative;left:95.83333%}.el-col-sm-24{width:100%}.el-col-sm-offset-24{margin-left:100%}.el-col-sm-pull-24{position:relative;right:100%}.el-col-sm-push-24{position:relative;left:100%}}@media only screen and (min-width:992px){.el-col-md-0{display:none;width:0%}.el-col-md-offset-0{margin-left:0}.el-col-md-pull-0{position:relative;right:0}.el-col-md-push-0{position:relative;left:0}.el-col-md-1{width:4.16667%}.el-col-md-offset-1{margin-left:4.16667%}.el-col-md-pull-1{position:relative;right:4.16667%}.el-col-md-push-1{position:relative;left:4.16667%}.el-col-md-2{width:8.33333%}.el-col-md-offset-2{margin-left:8.33333%}.el-col-md-pull-2{position:relative;right:8.33333%}.el-col-md-push-2{position:relative;left:8.33333%}.el-col-md-3{width:12.5%}.el-col-md-offset-3{margin-left:12.5%}.el-col-md-pull-3{position:relative;right:12.5%}.el-col-md-push-3{position:relative;left:12.5%}.el-col-md-4{width:16.66667%}.el-col-md-offset-4{margin-left:16.66667%}.el-col-md-pull-4{position:relative;right:16.66667%}.el-col-md-push-4{position:relative;left:16.66667%}.el-col-md-5{width:20.83333%}.el-col-md-offset-5{margin-left:20.83333%}.el-col-md-pull-5{position:relative;right:20.83333%}.el-col-md-push-5{position:relative;left:20.83333%}.el-col-md-6{width:25%}.el-col-md-offset-6{margin-left:25%}.el-col-md-pull-6{position:relative;right:25%}.el-col-md-push-6{position:relative;left:25%}.el-col-md-7{width:29.16667%}.el-col-md-offset-7{margin-left:29.16667%}.el-col-md-pull-7{position:relative;right:29.16667%}.el-col-md-push-7{position:relative;left:29.16667%}.el-col-md-8{width:33.33333%}.el-col-md-offset-8{margin-left:33.33333%}.el-col-md-pull-8{position:relative;right:33.33333%}.el-col-md-push-8{position:relative;left:33.33333%}.el-col-md-9{width:37.5%}.el-col-md-offset-9{margin-left:37.5%}.el-col-md-pull-9{position:relative;right:37.5%}.el-col-md-push-9{position:relative;left:37.5%}.el-col-md-10{width:41.66667%}.el-col-md-offset-10{margin-left:41.66667%}.el-col-md-pull-10{position:relative;right:41.66667%}.el-col-md-push-10{position:relative;left:41.66667%}.el-col-md-11{width:45.83333%}.el-col-md-offset-11{margin-left:45.83333%}.el-col-md-pull-11{position:relative;right:45.83333%}.el-col-md-push-11{position:relative;left:45.83333%}.el-col-md-12{width:50%}.el-col-md-offset-12{margin-left:50%}.el-col-md-pull-12{position:relative;right:50%}.el-col-md-push-12{position:relative;left:50%}.el-col-md-13{width:54.16667%}.el-col-md-offset-13{margin-left:54.16667%}.el-col-md-pull-13{position:relative;right:54.16667%}.el-col-md-push-13{position:relative;left:54.16667%}.el-col-md-14{width:58.33333%}.el-col-md-offset-14{margin-left:58.33333%}.el-col-md-pull-14{position:relative;right:58.33333%}.el-col-md-push-14{position:relative;left:58.33333%}.el-col-md-15{width:62.5%}.el-col-md-offset-15{margin-left:62.5%}.el-col-md-pull-15{position:relative;right:62.5%}.el-col-md-push-15{position:relative;left:62.5%}.el-col-md-16{width:66.66667%}.el-col-md-offset-16{margin-left:66.66667%}.el-col-md-pull-16{position:relative;right:66.66667%}.el-col-md-push-16{position:relative;left:66.66667%}.el-col-md-17{width:70.83333%}.el-col-md-offset-17{margin-left:70.83333%}.el-col-md-pull-17{position:relative;right:70.83333%}.el-col-md-push-17{position:relative;left:70.83333%}.el-col-md-18{width:75%}.el-col-md-offset-18{margin-left:75%}.el-col-md-pull-18{position:relative;right:75%}.el-col-md-push-18{position:relative;left:75%}.el-col-md-19{width:79.16667%}.el-col-md-offset-19{margin-left:79.16667%}.el-col-md-pull-19{position:relative;right:79.16667%}.el-col-md-push-19{position:relative;left:79.16667%}.el-col-md-20{width:83.33333%}.el-col-md-offset-20{margin-left:83.33333%}.el-col-md-pull-20{position:relative;right:83.33333%}.el-col-md-push-20{position:relative;left:83.33333%}.el-col-md-21{width:87.5%}.el-col-md-offset-21{margin-left:87.5%}.el-col-md-pull-21{position:relative;right:87.5%}.el-col-md-push-21{position:relative;left:87.5%}.el-col-md-22{width:91.66667%}.el-col-md-offset-22{margin-left:91.66667%}.el-col-md-pull-22{position:relative;right:91.66667%}.el-col-md-push-22{position:relative;left:91.66667%}.el-col-md-23{width:95.83333%}.el-col-md-offset-23{margin-left:95.83333%}.el-col-md-pull-23{position:relative;right:95.83333%}.el-col-md-push-23{position:relative;left:95.83333%}.el-col-md-24{width:100%}.el-col-md-offset-24{margin-left:100%}.el-col-md-pull-24{position:relative;right:100%}.el-col-md-push-24{position:relative;left:100%}}@media only screen and (min-width:1200px){.el-col-lg-0{display:none;width:0%}.el-col-lg-offset-0{margin-left:0}.el-col-lg-pull-0{position:relative;right:0}.el-col-lg-push-0{position:relative;left:0}.el-col-lg-1{width:4.16667%}.el-col-lg-offset-1{margin-left:4.16667%}.el-col-lg-pull-1{position:relative;right:4.16667%}.el-col-lg-push-1{position:relative;left:4.16667%}.el-col-lg-2{width:8.33333%}.el-col-lg-offset-2{margin-left:8.33333%}.el-col-lg-pull-2{position:relative;right:8.33333%}.el-col-lg-push-2{position:relative;left:8.33333%}.el-col-lg-3{width:12.5%}.el-col-lg-offset-3{margin-left:12.5%}.el-col-lg-pull-3{position:relative;right:12.5%}.el-col-lg-push-3{position:relative;left:12.5%}.el-col-lg-4{width:16.66667%}.el-col-lg-offset-4{margin-left:16.66667%}.el-col-lg-pull-4{position:relative;right:16.66667%}.el-col-lg-push-4{position:relative;left:16.66667%}.el-col-lg-5{width:20.83333%}.el-col-lg-offset-5{margin-left:20.83333%}.el-col-lg-pull-5{position:relative;right:20.83333%}.el-col-lg-push-5{position:relative;left:20.83333%}.el-col-lg-6{width:25%}.el-col-lg-offset-6{margin-left:25%}.el-col-lg-pull-6{position:relative;right:25%}.el-col-lg-push-6{position:relative;left:25%}.el-col-lg-7{width:29.16667%}.el-col-lg-offset-7{margin-left:29.16667%}.el-col-lg-pull-7{position:relative;right:29.16667%}.el-col-lg-push-7{position:relative;left:29.16667%}.el-col-lg-8{width:33.33333%}.el-col-lg-offset-8{margin-left:33.33333%}.el-col-lg-pull-8{position:relative;right:33.33333%}.el-col-lg-push-8{position:relative;left:33.33333%}.el-col-lg-9{width:37.5%}.el-col-lg-offset-9{margin-left:37.5%}.el-col-lg-pull-9{position:relative;right:37.5%}.el-col-lg-push-9{position:relative;left:37.5%}.el-col-lg-10{width:41.66667%}.el-col-lg-offset-10{margin-left:41.66667%}.el-col-lg-pull-10{position:relative;right:41.66667%}.el-col-lg-push-10{position:relative;left:41.66667%}.el-col-lg-11{width:45.83333%}.el-col-lg-offset-11{margin-left:45.83333%}.el-col-lg-pull-11{position:relative;right:45.83333%}.el-col-lg-push-11{position:relative;left:45.83333%}.el-col-lg-12{width:50%}.el-col-lg-offset-12{margin-left:50%}.el-col-lg-pull-12{position:relative;right:50%}.el-col-lg-push-12{position:relative;left:50%}.el-col-lg-13{width:54.16667%}.el-col-lg-offset-13{margin-left:54.16667%}.el-col-lg-pull-13{position:relative;right:54.16667%}.el-col-lg-push-13{position:relative;left:54.16667%}.el-col-lg-14{width:58.33333%}.el-col-lg-offset-14{margin-left:58.33333%}.el-col-lg-pull-14{position:relative;right:58.33333%}.el-col-lg-push-14{position:relative;left:58.33333%}.el-col-lg-15{width:62.5%}.el-col-lg-offset-15{margin-left:62.5%}.el-col-lg-pull-15{position:relative;right:62.5%}.el-col-lg-push-15{position:relative;left:62.5%}.el-col-lg-16{width:66.66667%}.el-col-lg-offset-16{margin-left:66.66667%}.el-col-lg-pull-16{position:relative;right:66.66667%}.el-col-lg-push-16{position:relative;left:66.66667%}.el-col-lg-17{width:70.83333%}.el-col-lg-offset-17{margin-left:70.83333%}.el-col-lg-pull-17{position:relative;right:70.83333%}.el-col-lg-push-17{position:relative;left:70.83333%}.el-col-lg-18{width:75%}.el-col-lg-offset-18{margin-left:75%}.el-col-lg-pull-18{position:relative;right:75%}.el-col-lg-push-18{position:relative;left:75%}.el-col-lg-19{width:79.16667%}.el-col-lg-offset-19{margin-left:79.16667%}.el-col-lg-pull-19{position:relative;right:79.16667%}.el-col-lg-push-19{position:relative;left:79.16667%}.el-col-lg-20{width:83.33333%}.el-col-lg-offset-20{margin-left:83.33333%}.el-col-lg-pull-20{position:relative;right:83.33333%}.el-col-lg-push-20{position:relative;left:83.33333%}.el-col-lg-21{width:87.5%}.el-col-lg-offset-21{margin-left:87.5%}.el-col-lg-pull-21{position:relative;right:87.5%}.el-col-lg-push-21{position:relative;left:87.5%}.el-col-lg-22{width:91.66667%}.el-col-lg-offset-22{margin-left:91.66667%}.el-col-lg-pull-22{position:relative;right:91.66667%}.el-col-lg-push-22{position:relative;left:91.66667%}.el-col-lg-23{width:95.83333%}.el-col-lg-offset-23{margin-left:95.83333%}.el-col-lg-pull-23{position:relative;right:95.83333%}.el-col-lg-push-23{position:relative;left:95.83333%}.el-col-lg-24{width:100%}.el-col-lg-offset-24{margin-left:100%}.el-col-lg-pull-24{position:relative;right:100%}.el-col-lg-push-24{position:relative;left:100%}}@media only screen and (min-width:1920px){.el-col-xl-0{display:none;width:0%}.el-col-xl-offset-0{margin-left:0}.el-col-xl-pull-0{position:relative;right:0}.el-col-xl-push-0{position:relative;left:0}.el-col-xl-1{width:4.16667%}.el-col-xl-offset-1{margin-left:4.16667%}.el-col-xl-pull-1{position:relative;right:4.16667%}.el-col-xl-push-1{position:relative;left:4.16667%}.el-col-xl-2{width:8.33333%}.el-col-xl-offset-2{margin-left:8.33333%}.el-col-xl-pull-2{position:relative;right:8.33333%}.el-col-xl-push-2{position:relative;left:8.33333%}.el-col-xl-3{width:12.5%}.el-col-xl-offset-3{margin-left:12.5%}.el-col-xl-pull-3{position:relative;right:12.5%}.el-col-xl-push-3{position:relative;left:12.5%}.el-col-xl-4{width:16.66667%}.el-col-xl-offset-4{margin-left:16.66667%}.el-col-xl-pull-4{position:relative;right:16.66667%}.el-col-xl-push-4{position:relative;left:16.66667%}.el-col-xl-5{width:20.83333%}.el-col-xl-offset-5{margin-left:20.83333%}.el-col-xl-pull-5{position:relative;right:20.83333%}.el-col-xl-push-5{position:relative;left:20.83333%}.el-col-xl-6{width:25%}.el-col-xl-offset-6{margin-left:25%}.el-col-xl-pull-6{position:relative;right:25%}.el-col-xl-push-6{position:relative;left:25%}.el-col-xl-7{width:29.16667%}.el-col-xl-offset-7{margin-left:29.16667%}.el-col-xl-pull-7{position:relative;right:29.16667%}.el-col-xl-push-7{position:relative;left:29.16667%}.el-col-xl-8{width:33.33333%}.el-col-xl-offset-8{margin-left:33.33333%}.el-col-xl-pull-8{position:relative;right:33.33333%}.el-col-xl-push-8{position:relative;left:33.33333%}.el-col-xl-9{width:37.5%}.el-col-xl-offset-9{margin-left:37.5%}.el-col-xl-pull-9{position:relative;right:37.5%}.el-col-xl-push-9{position:relative;left:37.5%}.el-col-xl-10{width:41.66667%}.el-col-xl-offset-10{margin-left:41.66667%}.el-col-xl-pull-10{position:relative;right:41.66667%}.el-col-xl-push-10{position:relative;left:41.66667%}.el-col-xl-11{width:45.83333%}.el-col-xl-offset-11{margin-left:45.83333%}.el-col-xl-pull-11{position:relative;right:45.83333%}.el-col-xl-push-11{position:relative;left:45.83333%}.el-col-xl-12{width:50%}.el-col-xl-offset-12{margin-left:50%}.el-col-xl-pull-12{position:relative;right:50%}.el-col-xl-push-12{position:relative;left:50%}.el-col-xl-13{width:54.16667%}.el-col-xl-offset-13{margin-left:54.16667%}.el-col-xl-pull-13{position:relative;right:54.16667%}.el-col-xl-push-13{position:relative;left:54.16667%}.el-col-xl-14{width:58.33333%}.el-col-xl-offset-14{margin-left:58.33333%}.el-col-xl-pull-14{position:relative;right:58.33333%}.el-col-xl-push-14{position:relative;left:58.33333%}.el-col-xl-15{width:62.5%}.el-col-xl-offset-15{margin-left:62.5%}.el-col-xl-pull-15{position:relative;right:62.5%}.el-col-xl-push-15{position:relative;left:62.5%}.el-col-xl-16{width:66.66667%}.el-col-xl-offset-16{margin-left:66.66667%}.el-col-xl-pull-16{position:relative;right:66.66667%}.el-col-xl-push-16{position:relative;left:66.66667%}.el-col-xl-17{width:70.83333%}.el-col-xl-offset-17{margin-left:70.83333%}.el-col-xl-pull-17{position:relative;right:70.83333%}.el-col-xl-push-17{position:relative;left:70.83333%}.el-col-xl-18{width:75%}.el-col-xl-offset-18{margin-left:75%}.el-col-xl-pull-18{position:relative;right:75%}.el-col-xl-push-18{position:relative;left:75%}.el-col-xl-19{width:79.16667%}.el-col-xl-offset-19{margin-left:79.16667%}.el-col-xl-pull-19{position:relative;right:79.16667%}.el-col-xl-push-19{position:relative;left:79.16667%}.el-col-xl-20{width:83.33333%}.el-col-xl-offset-20{margin-left:83.33333%}.el-col-xl-pull-20{position:relative;right:83.33333%}.el-col-xl-push-20{position:relative;left:83.33333%}.el-col-xl-21{width:87.5%}.el-col-xl-offset-21{margin-left:87.5%}.el-col-xl-pull-21{position:relative;right:87.5%}.el-col-xl-push-21{position:relative;left:87.5%}.el-col-xl-22{width:91.66667%}.el-col-xl-offset-22{margin-left:91.66667%}.el-col-xl-pull-22{position:relative;right:91.66667%}.el-col-xl-push-22{position:relative;left:91.66667%}.el-col-xl-23{width:95.83333%}.el-col-xl-offset-23{margin-left:95.83333%}.el-col-xl-pull-23{position:relative;right:95.83333%}.el-col-xl-push-23{position:relative;left:95.83333%}.el-col-xl-24{width:100%}.el-col-xl-offset-24{margin-left:100%}.el-col-xl-pull-24{position:relative;right:100%}.el-col-xl-push-24{position:relative;left:100%}}@-webkit-keyframes progress{0%{background-position:0 0}100%{background-position:32px 0}}.el-upload{display:inline-block;text-align:center;cursor:pointer;outline:0}.el-upload__input{display:none}.el-upload__tip{font-size:12px;color:#606266;margin-top:7px}.el-upload iframe{position:absolute;z-index:-1;top:0;left:0;opacity:0;filter:alpha(opacity=0)}.el-upload--picture-card{background-color:#fbfdff;border:1px dashed #c0ccda;border-radius:6px;box-sizing:border-box;width:148px;height:148px;line-height:146px;vertical-align:top}.el-upload--picture-card i{font-size:28px;color:#8c939d}.el-upload--picture-card:hover,.el-upload:focus{border-color:#282C34;color:#282C34}.el-upload:focus .el-upload-dragger{border-color:#282C34}.el-upload-dragger{background-color:#fff;border:1px dashed #d9d9d9;border-radius:6px;box-sizing:border-box;width:360px;height:180px;text-align:center;position:relative;overflow:hidden}.el-upload-dragger .el-icon-upload{font-size:67px;color:#C0C4CC;margin:40px 0 16px;line-height:50px}.el-upload-dragger+.el-upload__tip{text-align:center}.el-upload-dragger~.el-upload__files{border-top:1px solid #DCDFE6;margin-top:7px;padding-top:5px}.el-upload-dragger .el-upload__text{color:#606266;font-size:14px;text-align:center}.el-upload-dragger .el-upload__text em{color:#282C34;font-style:normal}.el-upload-dragger:hover{border-color:#282C34}.el-upload-dragger.is-dragover{background-color:rgba(32,159,255,.06);border:2px dashed #282C34}.el-upload-list{margin:0;padding:0;list-style:none}.el-upload-list__item{-webkit-transition:all .5s cubic-bezier(.55,0,.1,1);transition:all .5s cubic-bezier(.55,0,.1,1);font-size:14px;color:#606266;line-height:1.8;margin-top:5px;position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:4px;width:100%}.el-upload-list__item .el-progress{position:absolute;top:20px;width:100%}.el-upload-list__item .el-progress__text{position:absolute;right:0;top:-13px}.el-upload-list__item .el-progress-bar{margin-right:0;padding-right:0}.el-upload-list__item:first-child{margin-top:10px}.el-upload-list__item .el-icon-upload-success{color:#67C23A}.el-upload-list__item .el-icon-close{display:none;position:absolute;top:5px;right:5px;cursor:pointer;opacity:.75;color:#606266}.el-upload-list__item .el-icon-close:hover{opacity:1}.el-upload-list__item .el-icon-close-tip{display:none;position:absolute;top:5px;right:5px;font-size:12px;cursor:pointer;opacity:1;color:#282C34}.el-upload-list__item:hover{background-color:#F5F7FA}.el-upload-list__item:hover .el-icon-close{display:inline-block}.el-upload-list__item:hover .el-progress__text{display:none}.el-upload-list__item.is-success .el-upload-list__item-status-label{display:block}.el-upload-list__item.is-success .el-upload-list__item-name:focus,.el-upload-list__item.is-success .el-upload-list__item-name:hover{color:#282C34;cursor:pointer}.el-upload-list__item.is-success:focus:not(:hover) .el-icon-close-tip{display:inline-block}.el-upload-list__item.is-success:active .el-icon-close-tip,.el-upload-list__item.is-success:focus .el-upload-list__item-status-label,.el-upload-list__item.is-success:hover .el-upload-list__item-status-label,.el-upload-list__item.is-success:not(.focusing):focus .el-icon-close-tip{display:none}.el-upload-list.is-disabled .el-upload-list__item:hover .el-upload-list__item-status-label{display:block}.el-upload-list__item-name{color:#606266;display:block;margin-right:40px;overflow:hidden;padding-left:4px;text-overflow:ellipsis;-webkit-transition:color .3s;transition:color .3s;white-space:nowrap}.el-upload-list__item-name [class^=el-icon]{height:100%;margin-right:7px;color:#909399;line-height:inherit}.el-upload-list__item-status-label{position:absolute;right:5px;top:0;line-height:inherit;display:none}.el-upload-list__item-delete{position:absolute;right:10px;top:0;font-size:12px;color:#606266;display:none}.el-upload-list__item-delete:hover{color:#282C34}.el-upload-list--picture-card{margin:0;display:inline;vertical-align:top}.el-upload-list--picture-card .el-upload-list__item{overflow:hidden;background-color:#fff;border:1px solid #c0ccda;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;width:148px;height:148px;margin:0 8px 8px 0;display:inline-block}.el-upload-list--picture-card .el-upload-list__item .el-icon-check,.el-upload-list--picture-card .el-upload-list__item .el-icon-circle-check{color:#FFF}.el-upload-list--picture-card .el-upload-list__item .el-icon-close,.el-upload-list--picture-card .el-upload-list__item:hover .el-upload-list__item-status-label{display:none}.el-upload-list--picture-card .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture-card .el-upload-list__item-name{display:none}.el-upload-list--picture-card .el-upload-list__item-thumbnail{width:100%;height:100%}.el-upload-list--picture-card .el-upload-list__item-status-label{position:absolute;right:-15px;top:-6px;width:40px;height:24px;background:#13ce66;text-align:center;-webkit-transform:rotate(45deg);transform:rotate(45deg);-webkit-box-shadow:0 0 1pc 1px rgba(0,0,0,.2);box-shadow:0 0 1pc 1px rgba(0,0,0,.2)}.el-upload-list--picture-card .el-upload-list__item-status-label i{font-size:12px;margin-top:11px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.el-upload-list--picture-card .el-upload-list__item-actions{position:absolute;width:100%;height:100%;left:0;top:0;cursor:default;text-align:center;color:#fff;opacity:0;font-size:20px;background-color:rgba(0,0,0,.5);-webkit-transition:opacity .3s;transition:opacity .3s}.el-upload-list--picture-card .el-upload-list__item-actions::after{display:inline-block;content:\"\";height:100%;vertical-align:middle}.el-upload-list--picture-card .el-upload-list__item-actions span{display:none;cursor:pointer}.el-upload-list--picture-card .el-upload-list__item-actions span+span{margin-left:15px}.el-upload-list--picture-card .el-upload-list__item-actions .el-upload-list__item-delete{position:static;font-size:inherit;color:inherit}.el-upload-list--picture-card .el-upload-list__item-actions:hover{opacity:1}.el-upload-list--picture-card .el-upload-list__item-actions:hover span{display:inline-block}.el-upload-list--picture-card .el-progress{top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);bottom:auto;width:126px}.el-upload-list--picture-card .el-progress .el-progress__text{top:50%}.el-upload-list--picture .el-upload-list__item{overflow:hidden;z-index:0;background-color:#fff;border:1px solid #c0ccda;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;margin-top:10px;padding:10px 10px 10px 90px;height:92px}.el-upload-list--picture .el-upload-list__item .el-icon-check,.el-upload-list--picture .el-upload-list__item .el-icon-circle-check{color:#FFF}.el-upload-list--picture .el-upload-list__item:hover .el-upload-list__item-status-label{background:0 0;-webkit-box-shadow:none;box-shadow:none;top:-2px;right:-12px}.el-upload-list--picture .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name{line-height:70px;margin-top:0}.el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name i{display:none}.el-upload-list--picture .el-upload-list__item-thumbnail{vertical-align:middle;display:inline-block;width:70px;height:70px;float:left;position:relative;z-index:1;margin-left:-80px;background-color:#FFF}.el-upload-list--picture .el-upload-list__item-name{display:block;margin-top:20px}.el-upload-list--picture .el-upload-list__item-name i{font-size:70px;line-height:1;position:absolute;left:9px;top:10px}.el-upload-list--picture .el-upload-list__item-status-label{position:absolute;right:-17px;top:-7px;width:46px;height:26px;background:#13ce66;text-align:center;-webkit-transform:rotate(45deg);transform:rotate(45deg);-webkit-box-shadow:0 1px 1px #ccc;box-shadow:0 1px 1px #ccc}.el-upload-list--picture .el-upload-list__item-status-label i{font-size:12px;margin-top:12px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.el-upload-list--picture .el-progress{position:relative;top:-7px}.el-upload-cover{position:absolute;left:0;top:0;width:100%;height:100%;overflow:hidden;z-index:10;cursor:default}.el-upload-cover::after{display:inline-block;height:100%;vertical-align:middle}.el-upload-cover img{display:block;width:100%;height:100%}.el-upload-cover__label{position:absolute;right:-15px;top:-6px;width:40px;height:24px;background:#13ce66;text-align:center;-webkit-transform:rotate(45deg);transform:rotate(45deg);-webkit-box-shadow:0 0 1pc 1px rgba(0,0,0,.2);box-shadow:0 0 1pc 1px rgba(0,0,0,.2)}.el-upload-cover__label i{font-size:12px;margin-top:11px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);color:#fff}.el-upload-cover__progress{display:inline-block;vertical-align:middle;position:static;width:243px}.el-upload-cover__progress+.el-upload__inner{opacity:0}.el-upload-cover__content{position:absolute;top:0;left:0;width:100%;height:100%}.el-upload-cover__interact{position:absolute;bottom:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,.72);text-align:center}.el-upload-cover__interact .btn{display:inline-block;color:#FFF;font-size:14px;cursor:pointer;vertical-align:middle;-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);margin-top:60px}.el-upload-cover__interact .btn span{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.el-upload-cover__interact .btn:not(:first-child){margin-left:35px}.el-upload-cover__interact .btn:hover{-webkit-transform:translateY(-13px);transform:translateY(-13px)}.el-upload-cover__interact .btn:hover span{opacity:1}.el-upload-cover__interact .btn i{color:#FFF;display:block;font-size:24px;line-height:inherit;margin:0 auto 5px}.el-upload-cover__title{position:absolute;bottom:0;left:0;background-color:#FFF;height:36px;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:400;text-align:left;padding:0 10px;margin:0;line-height:36px;font-size:14px;color:#2C3E50}.el-upload-cover+.el-upload__inner{opacity:0;position:relative;z-index: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,.el-progress--dashboard{display:inline-block}.el-progress--circle .el-progress__text,.el-progress--dashboard .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,.el-progress--dashboard .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,.el-spinner{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-warning .el-progress-bar__inner{background-color:#E7C000}.el-progress.is-warning .el-progress__text{color:#E7C000}.el-progress.is-exception .el-progress-bar__inner{background-color:#C00}.el-progress.is-exception .el-progress__text{color:#C00}.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:#282C34;text-align:right;border-radius:100px;line-height:1;white-space:nowrap;-webkit-transition:width .6s ease;transition:width .6s ease}.el-card,.el-message{border-radius:4px;overflow:hidden}.el-progress-bar__inner::after{height:100%}.el-progress-bar__innerText{color:#FFF;font-size:12px;margin:0 5px}@keyframes progress{0%{background-position:0 0}100%{background-position:32px 0}}.el-time-spinner{width:100%;white-space:nowrap}.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}}.el-message{min-width:380px;-webkit-box-sizing:border-box;box-sizing:border-box;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,top .4s,-webkit-transform .4s;transition:opacity .3s,top .4s,-webkit-transform .4s;transition:opacity .3s,transform .4s,top .4s;transition:opacity .3s,transform .4s,top .4s,-webkit-transform .4s;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:#fdf9e6;border-color:#faf2cc}.el-message--warning .el-message__content{color:#E7C000}.el-message--error{background-color:#fae6e6;border-color:#f5cccc}.el-message--error .el-message__content{color:#C00}.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:#C00}.el-message .el-icon-info{color:#909399}.el-message .el-icon-warning{color:#E7C000}.el-message-fade-enter,.el-message-fade-leave-active{opacity:0;-webkit-transform:translate(-50%,-100%);transform:translate(-50%,-100%)}.el-badge{position:relative;vertical-align:middle;display:inline-block}.el-badge__content{background-color:#C00;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-rate__icon,.el-rate__item{position:relative;display:inline-block}.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%}.el-badge__content--primary{background-color:#282C34}.el-badge__content--success{background-color:#67C23A}.el-badge__content--warning{background-color:#E7C000}.el-badge__content--info{background-color:#909399}.el-badge__content--danger{background-color:#C00}.el-card{border:1px solid #EBEEF5;background-color:#FFF;color:#2C3E50;-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}.el-rate{height:20px;line-height:1}.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-step.is-vertical,.el-steps{display:-webkit-box;display:-ms-flexbox}.el-rate__text{font-size:14px;vertical-align:middle}.el-steps{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;-ms-flex-flow:column;flex-flow:column}.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:#2C3E50;border-color:#2C3E50}.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:#C00;border-color:#C00}.el-step__head.is-finish{color:#282C34;border-color:#282C34}.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;user-select:none;text-align:center;font-weight:700;line-height:1;color:inherit}.el-button,.el-checkbox,.el-image-viewer__btn{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.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:#2C3E50}.el-step__title.is-wait{color:#C0C4CC}.el-step__title.is-success{color:#67C23A}.el-step__title.is-error{color:#C00}.el-step__title.is-finish{color:#282C34}.el-step__description{padding-right:10%;margin-top:-5px;font-size:12px;line-height:20px;font-weight:400}.el-step__description.is-process{color:#2C3E50}.el-step__description.is-wait{color:#C0C4CC}.el-step__description.is-success{color:#67C23A}.el-step__description.is-error{color:#C00}.el-step__description.is-finish{color:#282C34}.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: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}.el-carousel{position:relative}.el-carousel--horizontal{overflow-x:hidden}.el-carousel--vertical{overflow-y:hidden}.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;margin:0;padding:0;z-index:2}.el-carousel__indicators--horizontal{bottom:0;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.el-carousel__indicators--vertical{right:0;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.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{background-color:transparent;cursor:pointer}.el-carousel__indicator:hover button{opacity:.72}.el-carousel__indicator--horizontal{display:inline-block;padding:12px 4px}.el-carousel__indicator--vertical{padding:4px 12px}.el-carousel__indicator--vertical .el-carousel__button{width:2px;height:15px}.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}.el-carousel__item,.el-carousel__mask{height:100%;top:0;left:0;position:absolute}.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}.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}.el-fade-in-enter,.el-fade-in-leave-active,.el-fade-in-linear-enter,.el-fade-in-linear-leave,.el-fade-in-linear-leave-active,.fade-in-linear-enter,.fade-in-linear-leave,.fade-in-linear-leave-active{opacity:0}.fade-in-linear-enter-active,.fade-in-linear-leave-active{-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.el-fade-in-linear-enter-active,.el-fade-in-linear-leave-active{-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.el-fade-in-enter-active,.el-fade-in-leave-active{-webkit-transition:all .3s cubic-bezier(.55,0,.1,1);transition:all .3s cubic-bezier(.55,0,.1,1)}.el-zoom-in-center-enter-active,.el-zoom-in-center-leave-active{-webkit-transition:all .3s cubic-bezier(.55,0,.1,1);transition:all .3s cubic-bezier(.55,0,.1,1)}.el-zoom-in-center-enter,.el-zoom-in-center-leave-active{opacity:0;-webkit-transform:scaleX(0);transform:scaleX(0)}.el-zoom-in-top-enter-active,.el-zoom-in-top-leave-active{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);-webkit-transform-origin:center top;transform-origin:center top}.el-zoom-in-top-enter,.el-zoom-in-top-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.el-zoom-in-bottom-enter-active,.el-zoom-in-bottom-leave-active{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);-webkit-transform-origin:center bottom;transform-origin:center bottom}.el-zoom-in-bottom-enter,.el-zoom-in-bottom-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.el-zoom-in-left-enter-active,.el-zoom-in-left-leave-active{opacity:1;-webkit-transform:scale(1,1);transform:scale(1,1);-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);-webkit-transform-origin:top left;transform-origin:top left}.el-zoom-in-left-enter,.el-zoom-in-left-leave-active{opacity:0;-webkit-transform:scale(.45,.45);transform:scale(.45,.45)}.collapse-transition{-webkit-transition:.3s height ease-in-out,.3s padding-top ease-in-out,.3s padding-bottom ease-in-out;transition:.3s height ease-in-out,.3s padding-top ease-in-out,.3s padding-bottom ease-in-out}.horizontal-collapse-transition{-webkit-transition:.3s width ease-in-out,.3s padding-left ease-in-out,.3s padding-right ease-in-out;transition:.3s width ease-in-out,.3s padding-left ease-in-out,.3s padding-right ease-in-out}.el-list-enter-active,.el-list-leave-active{-webkit-transition:all 1s;transition:all 1s}.el-list-enter,.el-list-leave-active{opacity:0;-webkit-transform:translateY(-30px);transform:translateY(-30px)}.el-opacity-transition{-webkit-transition:opacity .3s cubic-bezier(.55,0,.1,1);transition:opacity .3s cubic-bezier(.55,0,.1,1)}.el-collapse{border-top:1px solid #EBEEF5;border-bottom:1px solid #EBEEF5}.el-collapse-item.is-disabled .el-collapse-item__header{color:#bbb;cursor:not-allowed}.el-collapse-item__header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:48px;line-height:48px;background-color:#FFF;color:#2C3E50;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:0 8px 0 auto;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;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:#282C34}.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-cascader__tags,.el-tag{-webkit-box-sizing:border-box}.el-collapse-item__content{padding-bottom:25px;font-size:13px;color:#2C3E50;line-height:1.769230769230769}.el-collapse-item:last-child{margin-bottom:-1px}.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-tag{background-color:#eaeaeb;border-color:#d4d5d6;display:inline-block;height:32px;padding:0 10px;line-height:30px;font-size:12px;color:#282C34;border-width:1px;border-style:solid;border-radius:4px;box-sizing:border-box;white-space:nowrap}.el-tag.is-hit{border-color:#282C34}.el-tag .el-tag__close{color:#282c34}.el-tag .el-tag__close:hover{color:#FFF;background-color:#282c34}.el-tag.el-tag--info{background-color:#f4f4f5;border-color:#e9e9eb;color:#909399}.el-tag.el-tag--info.is-hit{border-color:#909399}.el-tag.el-tag--info .el-tag__close{color:#909399}.el-tag.el-tag--info .el-tag__close:hover{color:#FFF;background-color:#909399}.el-tag.el-tag--success{background-color:#f0f9eb;border-color:#e1f3d8;color:#67c23a}.el-tag.el-tag--success.is-hit{border-color:#67C23A}.el-tag.el-tag--success .el-tag__close{color:#67c23a}.el-tag.el-tag--success .el-tag__close:hover{color:#FFF;background-color:#67c23a}.el-tag.el-tag--warning{background-color:#fdf9e6;border-color:#faf2cc;color:#e7c000}.el-tag.el-tag--warning.is-hit{border-color:#E7C000}.el-tag.el-tag--warning .el-tag__close{color:#e7c000}.el-tag.el-tag--warning .el-tag__close:hover{color:#FFF;background-color:#e7c000}.el-tag.el-tag--danger{background-color:#fae6e6;border-color:#f5cccc;color:#c00}.el-tag.el-tag--danger.is-hit{border-color:#C00}.el-tag.el-tag--danger .el-tag__close{color:#c00}.el-tag.el-tag--danger .el-tag__close:hover{color:#FFF;background-color:#c00}.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}.el-tag .el-icon-close::before{display:block}.el-tag--dark{background-color:#282c34;border-color:#282c34;color:#fff}.el-tag--dark.is-hit{border-color:#282C34}.el-tag--dark .el-tag__close{color:#fff}.el-tag--dark .el-tag__close:hover{color:#FFF;background-color:#53565d}.el-tag--dark.el-tag--info{background-color:#909399;border-color:#909399;color:#fff}.el-tag--dark.el-tag--info.is-hit{border-color:#909399}.el-tag--dark.el-tag--info .el-tag__close{color:#fff}.el-tag--dark.el-tag--info .el-tag__close:hover{color:#FFF;background-color:#a6a9ad}.el-tag--dark.el-tag--success{background-color:#67c23a;border-color:#67c23a;color:#fff}.el-tag--dark.el-tag--success.is-hit{border-color:#67C23A}.el-tag--dark.el-tag--success .el-tag__close{color:#fff}.el-tag--dark.el-tag--success .el-tag__close:hover{color:#FFF;background-color:#85ce61}.el-tag--dark.el-tag--warning{background-color:#e7c000;border-color:#e7c000;color:#fff}.el-tag--dark.el-tag--warning.is-hit{border-color:#E7C000}.el-tag--dark.el-tag--warning .el-tag__close{color:#fff}.el-tag--dark.el-tag--warning .el-tag__close:hover{color:#FFF;background-color:#eccd33}.el-tag--dark.el-tag--danger{background-color:#c00;border-color:#c00;color:#fff}.el-tag--dark.el-tag--danger.is-hit{border-color:#C00}.el-tag--dark.el-tag--danger .el-tag__close{color:#fff}.el-tag--dark.el-tag--danger .el-tag__close:hover{color:#FFF;background-color:#d63333}.el-tag--plain{background-color:#fff;border-color:#a9abae;color:#282c34}.el-tag--plain.is-hit{border-color:#282C34}.el-tag--plain .el-tag__close{color:#282c34}.el-tag--plain .el-tag__close:hover{color:#FFF;background-color:#282c34}.el-tag--plain.el-tag--info{background-color:#fff;border-color:#d3d4d6;color:#909399}.el-tag--plain.el-tag--info.is-hit{border-color:#909399}.el-tag--plain.el-tag--info .el-tag__close{color:#909399}.el-tag--plain.el-tag--info .el-tag__close:hover{color:#FFF;background-color:#909399}.el-tag--plain.el-tag--success{background-color:#fff;border-color:#c2e7b0;color:#67c23a}.el-tag--plain.el-tag--success.is-hit{border-color:#67C23A}.el-tag--plain.el-tag--success .el-tag__close{color:#67c23a}.el-tag--plain.el-tag--success .el-tag__close:hover{color:#FFF;background-color:#67c23a}.el-tag--plain.el-tag--warning{background-color:#fff;border-color:#f5e699;color:#e7c000}.el-tag--plain.el-tag--warning.is-hit{border-color:#E7C000}.el-tag--plain.el-tag--warning .el-tag__close{color:#e7c000}.el-tag--plain.el-tag--warning .el-tag__close:hover{color:#FFF;background-color:#e7c000}.el-tag--plain.el-tag--danger{background-color:#fff;border-color:#eb9999;color:#c00}.el-tag--plain.el-tag--danger.is-hit{border-color:#C00}.el-tag--plain.el-tag--danger .el-tag__close{color:#c00}.el-tag--plain.el-tag--danger .el-tag__close:hover{color:#FFF;background-color:#c00}.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)}.el-cascader{display:inline-block;position:relative;font-size:14px;line-height:40px}.el-cascader:not(.is-disabled):hover .el-input__inner{cursor:pointer;border-color:#C0C4CC}.el-cascader .el-input .el-input__inner:focus,.el-cascader .el-input.is-focus .el-input__inner{border-color:#282C34}.el-cascader .el-input{cursor:pointer}.el-cascader .el-input .el-input__inner{text-overflow:ellipsis}.el-cascader .el-input .el-icon-arrow-down{-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;font-size:14px}.el-cascader .el-input .el-icon-arrow-down.is-reverse{-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg)}.el-cascader .el-input .el-icon-circle-close:hover{color:#909399}.el-cascader--medium{font-size:14px;line-height:36px}.el-cascader--small{font-size:13px;line-height:32px}.el-cascader--mini{font-size:12px;line-height:28px}.el-cascader.is-disabled .el-cascader__label{z-index:2;color:#C0C4CC}.el-cascader__dropdown{margin:5px 0;font-size:14px;background:#FFF;border:1px solid #E4E7ED;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)}.el-cascader__tags{position:absolute;left:0;right:30px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;line-height:normal;text-align:left;box-sizing:border-box}.el-cascader__tags .el-tag{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;max-width:100%;margin:2px 0 2px 6px;text-overflow:ellipsis;background:#f0f2f5}.el-cascader__tags .el-tag:not(.is-hit){border-color:transparent}.el-cascader__tags .el-tag>span{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:hidden;text-overflow:ellipsis}.el-cascader__tags .el-tag .el-icon-close{-webkit-box-flex:0;-ms-flex:none;flex:none;background-color:#C0C4CC;color:#FFF}.el-cascader__tags .el-tag .el-icon-close:hover{background-color:#909399}.el-cascader__suggestion-panel{border-radius:4px}.el-cascader__suggestion-list{max-height:204px;margin:0;padding:6px 0;font-size:14px;color:#606266;text-align:center}.el-cascader__suggestion-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:34px;padding:0 15px;text-align:left;outline:0;cursor:pointer}.el-cascader__suggestion-item:focus,.el-cascader__suggestion-item:hover{background:#F5F7FA}.el-cascader__suggestion-item.is-checked{color:#282C34;font-weight:700}.el-cascader__suggestion-item>span{margin-right:10px}.el-cascader__empty-text{margin:10px 0;color:#C0C4CC}.el-cascader__search-input{-webkit-box-flex:1;-ms-flex:1;flex:1;height:24px;min-width:60px;margin:2px 0 2px 15px;padding:0;color:#606266;border:none;outline:0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-cascader__search-input::-webkit-input-placeholder{color:#C0C4CC}.el-cascader__search-input::-ms-input-placeholder{color:#C0C4CC}.el-cascader__search-input::placeholder{color:#C0C4CC}.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 #282C34;box-shadow:0 0 3px 2px #282C34}.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(rgba(0,0,0,0)));background:linear-gradient(to top,#000,rgba(0,0,0,0))}.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:#282C34;border-color:#282C34}.el-color-dropdown__link-btn{cursor:pointer;color:#282C34;text-decoration:none;padding:15px;font-size:12px}.el-color-dropdown__link-btn:hover{color:tint(#282C34,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)}.el-textarea{position:relative;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:#282C34}.el-textarea .el-input__count{color:#909399;background:#FFF;position:absolute;font-size:12px;bottom:5px;right:10px}.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-textarea.is-exceed .el-textarea__inner{border-color:#C00}.el-textarea.is-exceed .el-input__count{color:#C00}.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;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 .el-input__count{height:100%;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#909399;font-size:12px}.el-input .el-input__count .el-input__count-inner{background:#FFF;line-height:initial;display:inline-block;padding:0 5px}.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-button,.el-transfer-panel{-webkit-box-sizing:border-box}.el-input__prefix,.el-input__suffix{position:absolute;top:0;-webkit-transition:all .3s;height:100%;color:#C0C4CC;text-align:center}.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:#282C34;outline:0}.el-input__suffix{right:5px;transition:all .3s}.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.is-exceed .el-input__inner{border-color:#C00}.el-input.is-exceed .el-input__suffix .el-input__count{color:#C00}.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;border-spacing:0}.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}.el-button{display:inline-block;line-height:1;white-space:nowrap;cursor:pointer;background:#FFF;border:1px solid #DCDFE6;color:#606266;-webkit-appearance:none;text-align:center;box-sizing:border-box;outline:0;margin:0;-webkit-transition:.1s;transition:.1s;font-weight:500;padding:12px 20px;font-size:14px;border-radius:4px}.el-button+.el-button{margin-left:10px}.el-button:focus,.el-button:hover{color:#282C34;border-color:#bfc0c2;background-color:#eaeaeb}.el-button:active{color:#24282f;border-color:#24282f;outline:0}.el-button::-moz-focus-inner{border:0}.el-button [class*=el-icon-]+span{margin-left:5px}.el-button.is-plain:focus,.el-button.is-plain:hover{background:#FFF;border-color:#282C34;color:#282C34}.el-button.is-active,.el-button.is-plain:active{color:#24282f;border-color:#24282f}.el-button.is-plain:active{background:#FFF;outline:0}.el-button.is-disabled,.el-button.is-disabled:focus,.el-button.is-disabled:hover{color:#C0C4CC;cursor:not-allowed;background-image:none;background-color:#FFF;border-color:#EBEEF5}.el-link,.el-transfer-panel__filter .el-icon-circle-close{cursor:pointer}.el-button.is-disabled.el-button--text{background-color:transparent}.el-button.is-disabled.is-plain,.el-button.is-disabled.is-plain:focus,.el-button.is-disabled.is-plain:hover{background-color:#FFF;border-color:#EBEEF5;color:#C0C4CC}.el-button.is-loading{position:relative;pointer-events:none}.el-button.is-loading:before{pointer-events:none;content:'';position:absolute;left:-1px;top:-1px;right:-1px;bottom:-1px;border-radius:inherit;background-color:rgba(255,255,255,.35)}.el-button.is-round{border-radius:20px;padding:12px 23px}.el-button.is-circle{border-radius:50%;padding:12px}.el-button--primary{color:#FFF;background-color:#282C34;border-color:#282C34}.el-button--primary:focus,.el-button--primary:hover{background:#53565d;border-color:#53565d;color:#FFF}.el-button--primary.is-active,.el-button--primary:active{background:#24282f;border-color:#24282f;color:#FFF}.el-button--primary:active{outline:0}.el-button--primary.is-disabled,.el-button--primary.is-disabled:active,.el-button--primary.is-disabled:focus,.el-button--primary.is-disabled:hover{color:#FFF;background-color:#94969a;border-color:#94969a}.el-button--primary.is-plain{color:#282C34;background:#eaeaeb;border-color:#a9abae}.el-button--primary.is-plain:focus,.el-button--primary.is-plain:hover{background:#282C34;border-color:#282C34;color:#FFF}.el-button--primary.is-plain:active{background:#24282f;border-color:#24282f;color:#FFF;outline:0}.el-button--primary.is-plain.is-disabled,.el-button--primary.is-plain.is-disabled:active,.el-button--primary.is-plain.is-disabled:focus,.el-button--primary.is-plain.is-disabled:hover{color:#7e8085;background-color:#eaeaeb;border-color:#d4d5d6}.el-button--success{color:#FFF;background-color:#67C23A;border-color:#67C23A}.el-button--success:focus,.el-button--success:hover{background:#85ce61;border-color:#85ce61;color:#FFF}.el-button--success.is-active,.el-button--success:active{background:#5daf34;border-color:#5daf34;color:#FFF}.el-button--success:active{outline:0}.el-button--success.is-disabled,.el-button--success.is-disabled:active,.el-button--success.is-disabled:focus,.el-button--success.is-disabled:hover{color:#FFF;background-color:#b3e19d;border-color:#b3e19d}.el-button--success.is-plain{color:#67C23A;background:#f0f9eb;border-color:#c2e7b0}.el-button--success.is-plain:focus,.el-button--success.is-plain:hover{background:#67C23A;border-color:#67C23A;color:#FFF}.el-button--success.is-plain:active{background:#5daf34;border-color:#5daf34;color:#FFF;outline:0}.el-button--success.is-plain.is-disabled,.el-button--success.is-plain.is-disabled:active,.el-button--success.is-plain.is-disabled:focus,.el-button--success.is-plain.is-disabled:hover{color:#a4da89;background-color:#f0f9eb;border-color:#e1f3d8}.el-button--warning{color:#FFF;background-color:#E7C000;border-color:#E7C000}.el-button--warning:focus,.el-button--warning:hover{background:#eccd33;border-color:#eccd33;color:#FFF}.el-button--warning.is-active,.el-button--warning:active{background:#d0ad00;border-color:#d0ad00;color:#FFF}.el-button--warning:active{outline:0}.el-button--warning.is-disabled,.el-button--warning.is-disabled:active,.el-button--warning.is-disabled:focus,.el-button--warning.is-disabled:hover{color:#FFF;background-color:#f3e080;border-color:#f3e080}.el-button--warning.is-plain{color:#E7C000;background:#fdf9e6;border-color:#f5e699}.el-button--warning.is-plain:focus,.el-button--warning.is-plain:hover{background:#E7C000;border-color:#E7C000;color:#FFF}.el-button--warning.is-plain:active{background:#d0ad00;border-color:#d0ad00;color:#FFF;outline:0}.el-button--warning.is-plain.is-disabled,.el-button--warning.is-plain.is-disabled:active,.el-button--warning.is-plain.is-disabled:focus,.el-button--warning.is-plain.is-disabled:hover{color:#f1d966;background-color:#fdf9e6;border-color:#faf2cc}.el-button--danger{color:#FFF;background-color:#C00;border-color:#C00}.el-button--danger:focus,.el-button--danger:hover{background:#d63333;border-color:#d63333;color:#FFF}.el-button--danger.is-active,.el-button--danger:active{background:#b80000;border-color:#b80000;color:#FFF}.el-button--danger:active{outline:0}.el-button--danger.is-disabled,.el-button--danger.is-disabled:active,.el-button--danger.is-disabled:focus,.el-button--danger.is-disabled:hover{color:#FFF;background-color:#e68080;border-color:#e68080}.el-button--danger.is-plain{color:#C00;background:#fae6e6;border-color:#eb9999}.el-button--danger.is-plain:focus,.el-button--danger.is-plain:hover{background:#C00;border-color:#C00;color:#FFF}.el-button--danger.is-plain:active{background:#b80000;border-color:#b80000;color:#FFF;outline:0}.el-button--danger.is-plain.is-disabled,.el-button--danger.is-plain.is-disabled:active,.el-button--danger.is-plain.is-disabled:focus,.el-button--danger.is-plain.is-disabled:hover{color:#e06666;background-color:#fae6e6;border-color:#f5cccc}.el-button--info{color:#FFF;background-color:#909399;border-color:#909399}.el-button--info:focus,.el-button--info:hover{background:#a6a9ad;border-color:#a6a9ad;color:#FFF}.el-button--info.is-active,.el-button--info:active{background:#82848a;border-color:#82848a;color:#FFF}.el-button--info:active{outline:0}.el-button--info.is-disabled,.el-button--info.is-disabled:active,.el-button--info.is-disabled:focus,.el-button--info.is-disabled:hover{color:#FFF;background-color:#c8c9cc;border-color:#c8c9cc}.el-button--info.is-plain{color:#909399;background:#f4f4f5;border-color:#d3d4d6}.el-button--info.is-plain:focus,.el-button--info.is-plain:hover{background:#909399;border-color:#909399;color:#FFF}.el-button--info.is-plain:active{background:#82848a;border-color:#82848a;color:#FFF;outline:0}.el-button--info.is-plain.is-disabled,.el-button--info.is-plain.is-disabled:active,.el-button--info.is-plain.is-disabled:focus,.el-button--info.is-plain.is-disabled:hover{color:#bcbec2;background-color:#f4f4f5;border-color:#e9e9eb}.el-button--text,.el-button--text.is-disabled,.el-button--text.is-disabled:focus,.el-button--text.is-disabled:hover,.el-button--text:active{border-color:transparent}.el-button--medium{padding:10px 20px;font-size:14px;border-radius:4px}.el-button--mini,.el-button--small{font-size:12px;border-radius:3px}.el-button--medium.is-round{padding:10px 20px}.el-button--medium.is-circle{padding:10px}.el-button--small,.el-button--small.is-round{padding:9px 15px}.el-button--small.is-circle{padding:9px}.el-button--mini,.el-button--mini.is-round{padding:7px 15px}.el-button--mini.is-circle{padding:7px}.el-button--text{color:#282C34;background:0 0;padding-left:0;padding-right:0}.el-button--text:focus,.el-button--text:hover{color:#53565d;border-color:transparent;background-color:transparent}.el-button--text:active{color:#24282f;background-color:transparent}.el-button-group{display:inline-block;vertical-align:middle}.el-button-group::after,.el-button-group::before{display:table;content:\"\"}.el-button-group::after{clear:both}.el-button-group>.el-button{float:left;position:relative}.el-button-group>.el-button+.el-button{margin-left:0}.el-button-group>.el-button.is-disabled{z-index:1}.el-button-group>.el-button:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.el-button-group>.el-button:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.el-button-group>.el-button:first-child:last-child{border-radius:4px}.el-button-group>.el-button:first-child:last-child.is-round{border-radius:20px}.el-button-group>.el-button:first-child:last-child.is-circle{border-radius:50%}.el-button-group>.el-button:not(:first-child):not(:last-child){border-radius:0}.el-button-group>.el-button:not(:last-child){margin-right:-1px}.el-button-group>.el-button.is-active,.el-button-group>.el-button:active,.el-button-group>.el-button:focus,.el-button-group>.el-button:hover{z-index:1}.el-button-group>.el-dropdown>.el-button{border-top-left-radius:0;border-bottom-left-radius:0;border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--primary:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--primary:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--primary:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--success:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--success:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--success:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--warning:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--warning:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--warning:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--danger:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--danger:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--danger:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--info:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--info:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--info:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-transfer{font-size:14px}.el-transfer__buttons{display:inline-block;vertical-align:middle;padding:0 30px}.el-transfer__button{display:block;margin:0 auto;padding:10px;border-radius:50%;color:#FFF;background-color:#282C34;font-size:0}.el-transfer__button.is-with-texts{border-radius:4px}.el-transfer__button.is-disabled,.el-transfer__button.is-disabled:hover{border:1px solid #DCDFE6;background-color:#F5F7FA;color:#C0C4CC}.el-transfer__button:first-child{margin-bottom:10px}.el-transfer__button:nth-child(2){margin:0}.el-transfer__button i,.el-transfer__button span{font-size:14px}.el-transfer__button [class*=el-icon-]+span{margin-left:0}.el-transfer-panel{border:1px solid #EBEEF5;border-radius:4px;overflow:hidden;background:#FFF;display:inline-block;vertical-align:middle;width:200px;max-height:100%;box-sizing:border-box;position:relative}.el-transfer-panel__body{height:246px}.el-transfer-panel__body.is-with-footer{padding-bottom:40px}.el-transfer-panel__list{margin:0;padding:6px 0;list-style:none;height:246px;overflow:auto;-webkit-box-sizing:border-box;box-sizing:border-box}.el-transfer-panel__list.is-filterable{height:194px;padding-top:0}.el-transfer-panel__item{height:30px;line-height:30px;padding-left:15px;display:block}.el-transfer-panel__item+.el-transfer-panel__item{margin-left:0;display:block!important}.el-transfer-panel__item.el-checkbox{color:#606266}.el-transfer-panel__item:hover{color:#282C34}.el-transfer-panel__item.el-checkbox .el-checkbox__label{width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:24px;line-height:30px}.el-transfer-panel__item .el-checkbox__input{position:absolute;top:8px}.el-transfer-panel__filter{text-align:center;margin:15px;-webkit-box-sizing:border-box;box-sizing:border-box;display:block;width:auto}.el-transfer-panel__filter .el-input__inner{height:32px;width:100%;font-size:12px;display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:16px;padding-right:10px;padding-left:30px}.el-transfer-panel__filter .el-input__icon{margin-left:5px}.el-transfer-panel .el-transfer-panel__header{height:40px;line-height:40px;background:#F5F7FA;margin:0;padding-left:15px;border-bottom:1px solid #EBEEF5;-webkit-box-sizing:border-box;box-sizing:border-box;color:#000}.el-transfer-panel .el-transfer-panel__header .el-checkbox{display:block;line-height:40px}.el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label{font-size:16px;color:#2C3E50;font-weight:400}.el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label span{position:absolute;right:15px;color:#909399;font-size:12px;font-weight:400}.el-divider__text,.el-link{font-weight:500;font-size:14px}.el-transfer-panel .el-transfer-panel__footer{height:40px;background:#FFF;margin:0;padding:0;border-top:1px solid #EBEEF5;position:absolute;bottom:0;left:0;width:100%;z-index:1}.el-transfer-panel .el-transfer-panel__footer::after{display:inline-block;content:\"\";height:100%;vertical-align:middle}.el-container,.el-timeline-item__node{display:-webkit-box;display:-ms-flexbox}.el-transfer-panel .el-transfer-panel__footer .el-checkbox{padding-left:20px;color:#606266}.el-transfer-panel .el-transfer-panel__empty{margin:0;height:30px;line-height:30px;padding:6px 15px 0;color:#909399;text-align:center}.el-transfer-panel .el-checkbox__label{padding-left:8px}.el-transfer-panel .el-checkbox__inner{height:14px;width:14px;border-radius:3px}.el-transfer-panel .el-checkbox__inner::after{height:6px;width:3px;left:4px}.el-container{display:flex;-webkit-box-orient:horizontal;-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-aside,.el-header{-webkit-box-sizing:border-box}.el-container.is-vertical{-webkit-box-orient:vertical;-ms-flex-direction:column;flex-direction:column}.el-header{padding:0 20px;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0}.el-aside{overflow:auto;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0}.el-footer,.el-main{-webkit-box-sizing:border-box}.el-main{display:block;-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-preferred-size:auto;flex-basis:auto;overflow:auto;box-sizing:border-box;padding:20px}.el-footer{padding:0 20px;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0}.el-timeline{margin:0;font-size:14px;list-style:none}.el-timeline .el-timeline-item:last-child .el-timeline-item__tail{display:none}.el-timeline-item{position:relative;padding-bottom:20px}.el-timeline-item__wrapper{position:relative;padding-left:28px;top:-3px}.el-timeline-item__tail{position:absolute;left:4px;height:100%;border-left:2px solid #E4E7ED}.el-timeline-item__icon{color:#FFF;font-size:13px}.el-timeline-item__node{position:absolute;background-color:#E4E7ED;border-radius:50%;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-image__error,.el-timeline-item__dot{display:-webkit-box;display:-ms-flexbox}.el-timeline-item__node--normal{left:-1px;width:12px;height:12px}.el-timeline-item__node--large{left:-2px;width:14px;height:14px}.el-timeline-item__node--primary{background-color:#282C34}.el-timeline-item__node--success{background-color:#67C23A}.el-timeline-item__node--warning{background-color:#E7C000}.el-timeline-item__node--danger{background-color:#C00}.el-timeline-item__node--info{background-color:#909399}.el-timeline-item__dot{position:absolute;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-timeline-item__content{color:#2C3E50}.el-timeline-item__timestamp{color:#909399;line-height:1;font-size:13px}.el-timeline-item__timestamp.is-top{margin-bottom:8px;padding-top:4px}.el-timeline-item__timestamp.is-bottom{margin-top:8px}.el-link{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;vertical-align:middle;position:relative;text-decoration:none;outline:0;padding:0}.el-link.is-underline:hover:after{content:\"\";position:absolute;left:0;right:0;height:0;bottom:0;border-bottom:1px solid #282C34}.el-link.el-link--default:after,.el-link.el-link--primary.is-underline:hover:after,.el-link.el-link--primary:after{border-color:#282C34}.el-link.is-disabled{cursor:not-allowed}.el-link [class*=el-icon-]+span{margin-left:5px}.el-link.el-link--default{color:#606266}.el-link.el-link--default:hover{color:#282C34}.el-link.el-link--default.is-disabled{color:#C0C4CC}.el-link.el-link--primary{color:#282C34}.el-link.el-link--primary:hover{color:#53565d}.el-link.el-link--primary.is-disabled{color:#94969a}.el-link.el-link--danger.is-underline:hover:after,.el-link.el-link--danger:after{border-color:#C00}.el-link.el-link--danger{color:#C00}.el-link.el-link--danger:hover{color:#d63333}.el-link.el-link--danger.is-disabled{color:#e68080}.el-link.el-link--success.is-underline:hover:after,.el-link.el-link--success:after{border-color:#67C23A}.el-link.el-link--success{color:#67C23A}.el-link.el-link--success:hover{color:#85ce61}.el-link.el-link--success.is-disabled{color:#b3e19d}.el-link.el-link--warning.is-underline:hover:after,.el-link.el-link--warning:after{border-color:#E7C000}.el-link.el-link--warning{color:#E7C000}.el-link.el-link--warning:hover{color:#eccd33}.el-link.el-link--warning.is-disabled{color:#f3e080}.el-link.el-link--info.is-underline:hover:after,.el-link.el-link--info:after{border-color:#909399}.el-link.el-link--info{color:#909399}.el-link.el-link--info:hover{color:#a6a9ad}.el-link.el-link--info.is-disabled{color:#c8c9cc}.el-divider{background-color:#DCDFE6;position:relative}.el-divider--horizontal{display:block;height:1px;width:100%;margin:24px 0}.el-divider--vertical{display:inline-block;width:1px;height:1em;margin:0 8px;vertical-align:middle;position:relative}.el-divider__text{position:absolute;background-color:#FFF;padding:0 20px;color:#2C3E50}.el-image__error,.el-image__placeholder{background:#F5F7FA}.el-divider__text.is-left{left:20px;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.el-divider__text.is-center{left:50%;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.el-divider__text.is-right{right:20px;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.el-image__error,.el-image__inner,.el-image__placeholder{width:100%;height:100%}.el-image{position:relative;display:inline-block;overflow:hidden}.el-image__inner{vertical-align:top}.el-image__inner--center{position:relative;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);display:block}.el-image__error{display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:14px;color:#C0C4CC;vertical-align:middle}.el-image__preview{cursor:pointer}.el-image-viewer__wrapper{position:fixed;top:0;right:0;bottom:0;left:0}.el-image-viewer__btn{position:absolute;z-index: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;border-radius:50%;opacity:.8;cursor:pointer;-webkit-box-sizing:border-box;box-sizing:border-box;user-select:none}.el-image-viewer__close{top:40px;right:40px;width:40px;height:40px;font-size:40px}.el-image-viewer__canvas{width:100%;height:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-image-viewer__actions{left:50%;bottom:30px;-webkit-transform:translateX(-50%);transform:translateX(-50%);width:282px;height:44px;padding:0 23px;background-color:#606266;border-color:#fff;border-radius:22px}.el-image-viewer__actions__inner{width:100%;height:100%;text-align:justify;cursor:default;font-size:23px;color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-pack:distribute;justify-content:space-around}.el-image-viewer__next,.el-image-viewer__prev{top:50%;width:44px;height:44px;font-size:24px;color:#fff;background-color:#606266;border-color:#fff}.el-image-viewer__prev{-webkit-transform:translateY(-50%);transform:translateY(-50%);left:40px}.el-image-viewer__next{-webkit-transform:translateY(-50%);transform:translateY(-50%);right:40px;text-indent:2px}.el-image-viewer__mask{position:absolute;width:100%;height:100%;top:0;left:0;opacity:.5;background:#000}.viewer-fade-enter-active{-webkit-animation:viewer-fade-in .3s;animation:viewer-fade-in .3s}.viewer-fade-leave-active{-webkit-animation:viewer-fade-out .3s;animation:viewer-fade-out .3s}@-webkit-keyframes viewer-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 viewer-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 viewer-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 viewer-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}}.el-calendar{background-color:#fff}.el-calendar__header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:12px 20px;border-bottom:1px solid #EBEEF5}.el-backtop,.el-page-header{display:-webkit-box;display:-ms-flexbox}.el-calendar__title{color:#000;-ms-flex-item-align:center;align-self:center}.el-calendar__body{padding:12px 20px 35px}.el-calendar-table{table-layout:fixed;width:100%}.el-calendar-table thead th{padding:12px 0;color:#606266;font-weight:400}.el-calendar-table:not(.is-range) td.next,.el-calendar-table:not(.is-range) td.prev{color:#C0C4CC}.el-backtop,.el-calendar-table td.is-today{color:#282C34}.el-calendar-table td{border-bottom:1px solid #EBEEF5;border-right:1px solid #EBEEF5;vertical-align:top;-webkit-transition:background-color .2s ease;transition:background-color .2s ease}.el-calendar-table td.is-selected{background-color:#F2F8FE}.el-calendar-table tr:first-child td{border-top:1px solid #EBEEF5}.el-calendar-table tr td:first-child{border-left:1px solid #EBEEF5}.el-calendar-table tr.el-calendar-table__row--hide-border td{border-top:none}.el-calendar-table .el-calendar-day{-webkit-box-sizing:border-box;box-sizing:border-box;padding:8px;height:85px}.el-calendar-table .el-calendar-day:hover{cursor:pointer;background-color:#F2F8FE}.el-backtop{position:fixed;background-color:#FFF;width:40px;height:40px;border-radius:50%;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;font-size:20px;-webkit-box-shadow:0 0 6px rgba(0,0,0,.12);box-shadow:0 0 6px rgba(0,0,0,.12);cursor:pointer;z-index:5}.el-backtop:hover{background-color:#F2F6FC}.el-page-header{display:flex;line-height:24px}.el-page-header__left{display:-webkit-box;display:-ms-flexbox;display:flex;cursor:pointer;margin-right:40px;position:relative}.el-page-header__left::after{content:\"\";position:absolute;width:1px;height:16px;right:-20px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);background-color:#DCDFE6}.el-checkbox,.el-checkbox__input{display:inline-block;position:relative;white-space:nowrap}.el-page-header__left .el-icon-back{font-size:18px;margin-right:6px;-ms-flex-item-align:center;align-self:center}.el-page-header__title{font-size:14px;font-weight:500}.el-page-header__content{font-size:18px;color:#2C3E50}.el-checkbox{color:#606266;font-weight:500;font-size:14px;cursor:pointer;user-select:none;margin-right:30px}.el-checkbox-button__inner,.el-radio{font-weight:500;-moz-user-select:none;-webkit-user-select:none;-ms-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:#282C34}.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;outline:0;line-height:1;vertical-align:middle}.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:#282C34;border-color:#282C34}.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:#282C34}.el-checkbox__input.is-focus .el-checkbox__inner{border-color:#282C34}.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:#282C34}.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 ease-in .05s;transition:-webkit-transform .15s ease-in .05s;transition:transform .15s ease-in .05s;transition:transform .15s ease-in .05s,-webkit-transform .15s ease-in .05s;-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:last-of-type{margin-right:0}.el-checkbox-button__inner{line-height:1;white-space:nowrap;vertical-align:middle;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;outline:0;margin:0;-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-checkbox-button__inner.is-round{padding:12px 20px}.el-checkbox-button__inner:hover{color:#282C34}.el-checkbox-button__inner [class*=el-icon-]{line-height:.9}.el-radio,.el-radio__input{line-height:1;outline:0;white-space:nowrap}.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-radio,.el-radio__inner,.el-radio__input{position:relative;display:inline-block}.el-checkbox-button.is-checked .el-checkbox-button__inner{color:#FFF;background-color:#282C34;border-color:#282C34;-webkit-box-shadow:-1px 0 0 0 #7e8085;box-shadow:-1px 0 0 0 #7e8085}.el-checkbox-button.is-checked:first-child .el-checkbox-button__inner{border-left-color:#282C34}.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:#282C34}.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}.el-radio,.el-radio--medium.is-bordered .el-radio__label{font-size:14px}.el-radio{color:#606266;cursor:pointer;margin-right:30px}.el-cascader-node>.el-radio,.el-radio:last-child{margin-right:0}.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:#282C34}.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__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:#282C34;background:#282C34}.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:#282C34}.el-radio__input.is-focus .el-radio__inner{border-color:#282C34}.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:#282C34}.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 ease-in;transition:-webkit-transform .15s ease-in;transition:transform .15s ease-in;transition:transform .15s ease-in,-webkit-transform .15s ease-in}.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):not(.is-disabled) .el-radio__inner{-webkit-box-shadow:0 0 2px 2px #282C34;box-shadow:0 0 2px 2px #282C34}.el-radio__label{font-size:14px;padding-left:10px}.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%}.el-cascader-panel{display:-webkit-box;display:-ms-flexbox;display:flex;border-radius:4px;font-size:14px}.el-cascader-node,.el-drawer{display:-webkit-box;display:-ms-flexbox}.el-cascader-panel.is-bordered{border:1px solid #E4E7ED;border-radius:4px}.el-cascader-menu{min-width:180px;-webkit-box-sizing:border-box;box-sizing:border-box;color:#606266;border-right:solid 1px #E4E7ED}.el-cascader-menu:last-child{border-right:none}.el-cascader-menu:last-child .el-cascader-node{padding-right:20px}.el-cascader-menu__wrap{height:204px}.el-cascader-menu__list{position:relative;min-height:100%;margin:0;padding:6px 0;list-style:none;-webkit-box-sizing:border-box;box-sizing:border-box}.el-avatar,.el-drawer{-webkit-box-sizing:border-box;overflow:hidden}.el-cascader-menu__hover-zone{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.el-cascader-menu__empty-text{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);text-align:center;color:#C0C4CC}.el-cascader-node{position:relative;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:0 30px 0 20px;height:34px;line-height:34px;outline:0}.el-cascader-node.is-selectable.in-active-path{color:#606266}.el-cascader-node.in-active-path,.el-cascader-node.is-active,.el-cascader-node.is-selectable.in-checked-path{color:#282C34;font-weight:700}.el-cascader-node:not(.is-disabled){cursor:pointer}.el-cascader-node:not(.is-disabled):focus,.el-cascader-node:not(.is-disabled):hover{background:#F5F7FA}.el-cascader-node.is-disabled{color:#C0C4CC;cursor:not-allowed}.el-cascader-node__prefix{position:absolute;left:10px}.el-cascader-node__postfix{position:absolute;right:10px}.el-cascader-node__label{-webkit-box-flex:1;-ms-flex:1;flex:1;padding:0 10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.el-cascader-node>.el-radio .el-radio__label{padding-left:0}.el-avatar{display:inline-block;box-sizing:border-box;text-align:center;color:#fff;background:#C0C4CC;width:40px;height:40px;line-height:40px;font-size:14px}.el-avatar>img{display:block;height:100%;vertical-align:middle}.el-avatar--circle{border-radius:50%}.el-avatar--square{border-radius:4px}.el-avatar--icon{font-size:18px}.el-avatar--large{width:40px;height:40px;line-height:40px}.el-avatar--medium{width:36px;height:36px;line-height:36px}.el-avatar--small{width:28px;height:28px;line-height:28px}.el-drawer.btt,.el-drawer.ttb,.el-drawer__container{left:0;right:0;width:100%}.el-drawer.ltr,.el-drawer.rtl,.el-drawer__container{top:0;bottom:0;height:100%}@-webkit-keyframes el-drawer-fade-in{0%{opacity:0}100%{opacity:1}}@keyframes el-drawer-fade-in{0%{opacity:0}100%{opacity:1}}@-webkit-keyframes rtl-drawer-in{0%{-webkit-transform:translate(100%,0);transform:translate(100%,0)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@keyframes rtl-drawer-in{0%{-webkit-transform:translate(100%,0);transform:translate(100%,0)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@-webkit-keyframes rtl-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(100%,0);transform:translate(100%,0)}}@keyframes rtl-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(100%,0);transform:translate(100%,0)}}@-webkit-keyframes ltr-drawer-in{0%{-webkit-transform:translate(-100%,0);transform:translate(-100%,0)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@keyframes ltr-drawer-in{0%{-webkit-transform:translate(-100%,0);transform:translate(-100%,0)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@-webkit-keyframes ltr-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(-100%,0);transform:translate(-100%,0)}}@keyframes ltr-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(-100%,0);transform:translate(-100%,0)}}@-webkit-keyframes ttb-drawer-in{0%{-webkit-transform:translate(0,-100%);transform:translate(0,-100%)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@keyframes ttb-drawer-in{0%{-webkit-transform:translate(0,-100%);transform:translate(0,-100%)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@-webkit-keyframes ttb-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(0,-100%);transform:translate(0,-100%)}}@keyframes ttb-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(0,-100%);transform:translate(0,-100%)}}@-webkit-keyframes btt-drawer-in{0%{-webkit-transform:translate(0,100%);transform:translate(0,100%)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@keyframes btt-drawer-in{0%{-webkit-transform:translate(0,100%);transform:translate(0,100%)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@-webkit-keyframes btt-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(0,100%);transform:translate(0,100%)}}@keyframes btt-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(0,100%);transform:translate(0,100%)}}.el-drawer{position:absolute;box-sizing:border-box;background-color:#FFF;display:flex;-webkit-box-orient:vertical;-ms-flex-direction:column;flex-direction:column;-webkit-box-shadow:0 8px 10px -5px rgba(0,0,0,.2),0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12);box-shadow:0 8px 10px -5px rgba(0,0,0,.2),0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12)}.el-drawer.rtl{-webkit-animation:rtl-drawer-out 225ms cubic-bezier(0,0,.2,1) 0s;animation:rtl-drawer-out 225ms cubic-bezier(0,0,.2,1) 0s;right:0}.el-drawer__open .el-drawer.rtl{-webkit-animation:rtl-drawer-in 225ms cubic-bezier(0,0,.2,1) 0s;animation:rtl-drawer-in 225ms cubic-bezier(0,0,.2,1) 0s}.el-drawer.ltr{-webkit-animation:ltr-drawer-out 225ms cubic-bezier(0,0,.2,1) 0s;animation:ltr-drawer-out 225ms cubic-bezier(0,0,.2,1) 0s;left:0}.el-drawer__open .el-drawer.ltr{-webkit-animation:ltr-drawer-in 225ms cubic-bezier(0,0,.2,1) 0s;animation:ltr-drawer-in 225ms cubic-bezier(0,0,.2,1) 0s}.el-drawer.ttb{-webkit-animation:ttb-drawer-out 225ms cubic-bezier(0,0,.2,1) 0s;animation:ttb-drawer-out 225ms cubic-bezier(0,0,.2,1) 0s;top:0}.el-drawer__open .el-drawer.ttb{-webkit-animation:ttb-drawer-in 225ms cubic-bezier(0,0,.2,1) 0s;animation:ttb-drawer-in 225ms cubic-bezier(0,0,.2,1) 0s}.el-drawer.btt{-webkit-animation:btt-drawer-out 225ms cubic-bezier(0,0,.2,1) 0s;animation:btt-drawer-out 225ms cubic-bezier(0,0,.2,1) 0s;bottom:0}.el-drawer__open .el-drawer.btt{-webkit-animation:btt-drawer-in 225ms cubic-bezier(0,0,.2,1) 0s;animation:btt-drawer-in 225ms cubic-bezier(0,0,.2,1) 0s}.el-drawer__header{-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#72767b;display:-webkit-box;display:-ms-flexbox;display:flex;margin-bottom:32px;padding:20px 20px 0}.el-drawer__header>:first-child{-webkit-box-flex:1;-ms-flex:1;flex:1}.el-drawer__title{margin:0;-webkit-box-flex:1;-ms-flex:1;flex:1;line-height:inherit;font-size:1rem}.el-drawer__close-btn{border:none;cursor:pointer;font-size:20px;color:inherit;background-color:transparent}.el-drawer__body{-webkit-box-flex:1;-ms-flex:1;flex:1}.el-drawer__body>*{-webkit-box-sizing:border-box;box-sizing:border-box}.el-drawer__container{position:relative}.el-drawer-fade-enter-active{-webkit-animation:el-drawer-fade-in 225ms cubic-bezier(0,0,.2,1) 0s;animation:el-drawer-fade-in 225ms cubic-bezier(0,0,.2,1) 0s}.el-drawer-fade-leave-active{animation:el-drawer-fade-in 225ms cubic-bezier(0,0,.2,1) 0s reverse}"
  },
  {
    "path": "docs/.vuepress/styles/palette.styl",
    "content": "// dark mode scheme\n$darkMainColor = #f94135 \t // 主题色\n$darkPrimaryText = #ffffff   // 文字的首要颜色\n$darkRegularText = #b8b8b8   // 常规文字颜色\n$darkSecondaryText = #7f7f7f // 次要文字颜色\n$darkBorder = #373737        // 边框颜色\n$darkBoundary = #171514      // 边界颜色\n$darkBgColor = #171514       // 深色背景颜色\n$darkCard = #232222          // 深色卡片颜色\n$darkMask = rgba(0, 0, 0, 0.9)\n\n// light mode scheme\n$lightMainColor = #d71a1b\n$lightPrimaryText = #292525\n$lightSecondaryText = #8e8787\n$lightRegularText = #4c4e4d\n$lightBorder = #e5e5e5\n$lightBoundary = #e5e5e5\n$lightBgColor = #f4f4f4\n$lightCard = #ffffff\n$lightMask = rgba(255, 255, 255, 0.9) // 遮罩颜色\n\n$darkNavColor = #232222\n$codeBgColor = #171a20\n$accentColor = var(--main-color)\n"
  },
  {
    "path": "docs/.vuepress/theme/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2018-present, Yuxi (Evan) You\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "docs/.vuepress/theme/components/AlgoliaSearchBox.vue",
    "content": "<template>\n  <form\n    id=\"search-form\"\n    class=\"algolia-search-wrapper search-box\"\n    role=\"search\"\n  >\n    <input\n      id=\"algolia-search-input\"\n      class=\"search-query\"\n    >\n  </form>\n</template>\n\n<script>\nexport default {\n  props: ['options'],\n\n  mounted () {\n    this.initialize(this.options, this.$lang)\n  },\n\n  methods: {\n    initialize (userOptions, lang) {\n      Promise.all([\n        import(/* webpackChunkName: \"docsearch\" */ 'docsearch.js/dist/cdn/docsearch.min.js'),\n        import(/* webpackChunkName: \"docsearch\" */ 'docsearch.js/dist/cdn/docsearch.min.css')\n      ]).then(([docsearch]) => {\n        docsearch = docsearch.default\n        const { algoliaOptions = {}} = userOptions\n        docsearch(Object.assign(\n          {},\n          userOptions,\n          {\n            inputSelector: '#algolia-search-input',\n            // #697 Make docsearch work well at i18n mode.\n            algoliaOptions: Object.assign({\n              'facetFilters': [`lang:${lang}`].concat(algoliaOptions.facetFilters || [])\n            }, algoliaOptions),\n            handleSelected: (input, event, suggestion) => {\n              this.$router.push(new URL(suggestion.url).pathname)\n            }\n          }\n        ))\n      })\n    },\n\n    update (options, lang) {\n      this.$el.innerHTML = '<input id=\"algolia-search-input\" class=\"search-query\">'\n      this.initialize(options, lang)\n    }\n  },\n\n  watch: {\n    $lang (newValue) {\n      this.update(this.options, newValue)\n    },\n\n    options (newValue) {\n      this.update(newValue, this.$lang)\n    }\n  }\n}\n</script>\n\n<style lang=\"stylus\">\n.algolia-search-wrapper\n  & > span\n    vertical-align middle\n  .algolia-autocomplete\n    line-height normal\n    .ds-dropdown-menu\n      background-color #fff\n      border 1px solid #999\n      border-radius 4px\n      font-size 16px\n      margin 6px 0 0\n      padding 4px\n      text-align left\n      &:before\n        border-color #999\n      [class*=ds-dataset-]\n        border none\n        padding 0\n      .ds-suggestions\n        margin-top 0\n      .ds-suggestion\n        border-bottom 1px solid var(--border-color)\n    .algolia-docsearch-suggestion--highlight\n      color #2c815b\n    .algolia-docsearch-suggestion\n      border-color var(--border-color)\n      padding 0\n      .algolia-docsearch-suggestion--category-header\n        padding 5px 10px\n        margin-top 0\n        background var(--main-color)\n        color #fff\n        font-weight 600\n        .algolia-docsearch-suggestion--highlight\n          background rgba(255, 255, 255, 0.6)\n      .algolia-docsearch-suggestion--wrapper\n        padding 0\n      .algolia-docsearch-suggestion--title\n        font-weight 600\n        margin-bottom 0\n        color var(--regular-text)\n      .algolia-docsearch-suggestion--subcategory-column\n        vertical-align top\n        padding 5px 7px 5px 5px\n        border-color var(--border-color)\n        background #f1f3f5\n        &:after\n          display none\n      .algolia-docsearch-suggestion--subcategory-column-text\n        color #555\n    .algolia-docsearch-footer\n      border-color var(--border-color)\n    .ds-cursor .algolia-docsearch-suggestion--content\n      background-color #e7edf3 !important\n      color var(--regular-text)\n\n@media (min-width: $MQMobile)\n  .algolia-search-wrapper\n    .algolia-autocomplete\n      .algolia-docsearch-suggestion\n        .algolia-docsearch-suggestion--subcategory-column\n          float none\n          width 150px\n          min-width 150px\n          display table-cell\n        .algolia-docsearch-suggestion--content\n          float none\n          display table-cell\n          width 100%\n          vertical-align top\n        .ds-dropdown-menu\n          min-width 515px !important\n\n@media (max-width: $MQMobile)\n  .algolia-search-wrapper\n    .ds-dropdown-menu\n      min-width calc(100vw - 4rem) !important\n      max-width calc(100vw - 4rem) !important\n    .algolia-docsearch-suggestion--wrapper\n      padding 5px 7px 5px 5px !important\n    .algolia-docsearch-suggestion--subcategory-column\n      padding 0 !important\n      background white !important\n    .algolia-docsearch-suggestion--subcategory-column-text:after\n      content \" > \"\n      font-size 10px\n      line-height 14.4px\n      display inline-block\n      width 5px\n      margin -3px 3px 0\n      vertical-align middle\n\n</style>\n"
  },
  {
    "path": "docs/.vuepress/theme/components/DropdownLink.vue",
    "content": "<template>\n  <div\n    class=\"dropdown-wrapper\"\n    :class=\"{ open }\"\n  >\n    <a\n      class=\"dropdown-title\"\n      @click=\"toggle\"\n    >\n      <span class=\"title\">{{ item.text }}</span>\n      <span\n        class=\"arrow\"\n        :class=\"open ? 'down' : 'right'\"\n      ></span>\n    </a>\n\n    <DropdownTransition>\n      <ul\n        class=\"nav-dropdown\"\n        v-show=\"open\"\n      >\n        <li\n          class=\"dropdown-item\"\n          :key=\"subItem.link || index\"\n          v-for=\"(subItem, index) in item.items\"\n        >\n          <h4 v-if=\"subItem.type === 'links'\">{{ subItem.text }}</h4>\n\n          <ul\n            class=\"dropdown-subitem-wrapper\"\n            v-if=\"subItem.type === 'links'\"\n          >\n            <li\n              class=\"dropdown-subitem\"\n              :key=\"childSubItem.link\"\n              v-for=\"childSubItem in subItem.items\"\n            >\n              <NavLink :item=\"childSubItem\"/>\n            </li>\n          </ul>\n\n          <NavLink\n            v-else\n            :item=\"subItem\"\n          />\n        </li>\n      </ul>\n    </DropdownTransition>\n  </div>\n</template>\n\n<script>\nimport NavLink from '@theme/components/NavLink.vue'\nimport DropdownTransition from '@theme/components/DropdownTransition.vue'\n\nexport default {\n  components: { NavLink, DropdownTransition },\n\n  data () {\n    return {\n      open: false\n    }\n  },\n\n  props: {\n    item: {\n      required: true\n    }\n  },\n\n  methods: {\n    toggle () {\n      this.open = !this.open\n    }\n  }\n}\n</script>\n\n<style lang=\"stylus\">\n.dropdown-wrapper\n  cursor pointer\n  .dropdown-title\n    display block\n    &:hover\n      border-color transparent\n    .arrow\n      vertical-align middle\n      margin-top -1px\n      margin-left 0.4rem\n  .nav-dropdown\n    .dropdown-item\n      color inherit\n      line-height 1.7rem\n      h4\n        margin 0.45rem 0 0\n        border-top 1px solid #eee\n        padding 0.45rem 1.5rem 0 1.25rem\n      .dropdown-subitem-wrapper\n        padding 0\n        list-style none\n        .dropdown-subitem\n          font-size 0.9em\n      a\n        display block\n        line-height 1.7rem\n        position relative\n        border-bottom none\n        font-weight 600\n        margin-bottom 0\n        padding 0 1.5rem 0 1.25rem\n        &:hover\n          color var(--main-color)\n        &.router-link-active\n          color var(--main-color)\n          &::after\n            content \"\"\n            width 0\n            height 0\n            border-left 5px solid var(--main-color)\n            border-top 3px solid transparent\n            border-bottom 3px solid transparent\n            position absolute\n            top calc(50% - 2px)\n            left 9px\n      &:first-child h4\n        margin-top 0\n        padding-top 0\n        border-top 0\n\n@media (max-width: $MQMobile)\n  .dropdown-wrapper\n    &.open .dropdown-title\n      margin-bottom 0.5rem\n    .nav-dropdown\n      transition height .1s ease-out\n      overflow hidden\n      .dropdown-item\n        h4\n          border-top 0\n          margin-top 0\n          padding-top 0\n        h4, & > a\n          font-size 15px\n          line-height 2rem\n        .dropdown-subitem\n          font-size 14px\n          padding-left 1rem\n\n@media (min-width: $MQMobile)\n  .dropdown-wrapper\n    height 1.8rem\n    &:hover .nav-dropdown\n      // override the inline style.\n      display block !important\n    .dropdown-title .arrow\n      // make the arrow always down at desktop\n      border-left 4px solid transparent\n      border-right 4px solid transparent\n      border-top 6px solid $arrowBgColor\n      border-bottom 0\n    .nav-dropdown\n      display none\n      // Avoid height shaked by clicking\n      height auto !important\n      box-sizing border-box;\n      max-height calc(100vh - 2.7rem)\n      overflow-y auto\n      position absolute\n      top 100%\n      right 0\n      background-color var(--card-color)\n      padding 0.6rem 0\n      border 1px solid var(--border-color)\n      // border-bottom-color darken(var(--border-color), 10%)\n      border-bottom-color var(--border-color)\n      text-align left\n      border-radius 0.25rem\n      white-space nowrap\n      margin 0\n</style>\n"
  },
  {
    "path": "docs/.vuepress/theme/components/DropdownTransition.vue",
    "content": "<template>\n  <transition\n    name=\"dropdown\"\n    @enter=\"setHeight\"\n    @after-enter=\"unsetHeight\"\n    @before-leave=\"setHeight\"\n  >\n    <slot/>\n  </transition>\n</template>\n\n<script>\nexport default {\n  name: 'DropdownTransition',\n\n  methods: {\n    setHeight (items) {\n      // explicitly set height so that it can be transitioned\n      items.style.height = items.scrollHeight + 'px'\n    },\n\n    unsetHeight (items) {\n      items.style.height = ''\n    }\n  }\n}\n</script>\n\n<style lang=\"stylus\">\n.dropdown-enter, .dropdown-leave-to\n  height 0 !important\n\n</style>\n"
  },
  {
    "path": "docs/.vuepress/theme/components/Home.vue",
    "content": "<template>\n<div>\n  <main class=\"home\" aria-labelledby=\"main-title\">\n    <header class=\"hero\">\n      <!--\n      <img\n        v-if=\"data.heroImage\"\n        :src=\"$withBase(data.heroImage)\"\n        :alt=\"data.heroAlt || 'hero'\"\n      >\n      -->\n\n      <h1 v-if=\"data.heroText !== null\" id=\"main-title\">{{ data.heroText || $title || 'Hello' }}</h1>\n\n      <p class=\"description\">\n        {{ data.tagline || $description || 'Welcome to your VuePress site' }}\n      </p>\n\n      <!-- <p\n        class=\"action\"\n        v-if=\"data.actionText && data.actionLink\"\n      >\n        <NavLink\n          class=\"action-button\"\n          :item=\"actionLink\"\n        />\n      </p> -->\n    </header>\n\n    <div\n      class=\"features\"\n      v-if=\"data.features && data.features.length\"\n    >\n      <div\n        class=\"feature\"\n        v-for=\"(feature, index) in data.features\"\n        :key=\"index\"\n      >\n        <img\n          v-if=\"feature.image\"\n          :src=\"$withBase(feature.image)\"\n          draggable=\"false\"\n        >\n        <div class=\"my-text-box\">\n          <h2>{{ feature.title }}</h2>\n          <p>{{ feature.details }}</p>\n        </div>\n      </div>\n    </div>\n\n    <Content class=\"theme-default-content custom\"/>\n    </main>\n  </div>\n</template>\n\n<script>\nimport NavLink from '@theme/components/NavLink.vue'\n\nexport default {\n  components: { NavLink },\n  computed: {\n    data () {\n      return this.$page.frontmatter\n    },\n\n    actionLink () {\n      return {\n        link: this.data.actionLink,\n        text: this.data.actionText\n      }\n    }\n  }\n}\n</script>\n\n\n<style lang=\"stylus\">\n.home\n  padding $navbarHeight 2rem 0\n  max-width 960px\n  margin 0px auto\n  display block\n  .hero\n    text-align center\n    img\n      max-width: 100%\n      max-height 280px\n      display block\n      margin 3rem auto 1.5rem\n    h1\n      font-size 3rem\n    h1, .description, .action\n      margin 1.8rem auto\n    .description\n      max-width 35rem\n      font-size 1.6rem\n      line-height 1.3\n  .features\n    margin-top 2.5rem\n    padding 2rem 0\n    box-shadow: 0 2px 12px 0 rgba(0,0,0,0.1);\n    margin 7rem 0 10rem 0\n    border-radius 5px\n    background var(--card-color)\n    animation: showup 0.5s 2s forwards\n  .feature\n    flex-grow 1\n    flex-basis 30%\n    // max-width 30%\n    // add feature styles\n    width 100%\n    display flex\n    align-items center\n    justify-content center\n    // add img tag style\n    img\n      max-width 50%\n      margin 5rem auto\n      display block\n      height 12rem\n      object-fit contain\n    h2\n      font-size 1.4rem\n      font-weight 500\n      border-bottom none\n      padding-bottom 0\n      // color lighten(var(--regular-text), 10%)\n      color var(--regular-text)\n    .my-text-box\n      text-align: left\n      width 50%\n</style>\n\n\n<style lang=\"stylus\" scoped>\n// 为了不打扰前面的，我们在这里修改\n.home\n  .hero\n    color white\n    h1\n      opacity: 0\n      font-weight 500\n      margin-top 6.5rem\n      overflow hidden\n      animation: tracking-in-expand 0.7s cubic-bezier(0.215, 0.610, 0.355, 1.000) both;\n    p.description\n      opacity 0\n      animation: opacityto1 0.5s 0.5s ease forwards    \n      font-size 1.2rem\n      font-weight 300\n      font-family monospace\n      letter-spacing 8px\n\n.nav-bar\n  background-color: var(--card-color)\n\n@media (max-width: 700px)\n  .home\n    .hero\n      h1\n        font-size 2.5rem\n        margin-top 6rem\n      .description\n        font-size 16px\n    .feature\n      flex-direction column\n      h2\n        font-size 1.2rem\n      img \n        margin 0 auto\n      .my-text-box\n        width 80%\n        text-align center\n\n@media (max-width: 419px)\n  .home\n    padding-left 1.5rem\n    padding-right 1.5rem\n    .hero\n      h1\n        margin-top 7rem\n      .description\n        font-size 15px\n      .action-button\n        font-size 1rem\n        padding 0.6rem 1.2rem\n    .featureflex-direction column\n      h2\n        font-size 1.2rem\n\n@keyframes showup {\n  0% {\n    transform: translateY(6rem);\n    opacity: 0;\n  }\n  100% {\n    transform: translateY(0);\n    opacity: 1;\n  }\n}\n\n@keyframes opacityto1 {\n  from { opacity: 0; }\n  to { opacity: 1; }\n}\n\n/* ----------------------------------------------\n * Generated by Animista on 2020-1-10 1:29:2\n * Licensed under FreeBSD License.\n * See http://animista.net/license for more info. \n * w: http://animista.net, t: @cssanimista\n * ---------------------------------------------- */\n\n/**\n * ----------------------------------------\n * animation tracking-in-expand\n * ----------------------------------------\n */\n@keyframes tracking-in-expand {\n  0% {\n    letter-spacing: -0.5em;\n    opacity: 0;\n  }\n  40% {\n    opacity: 0.6;\n  }\n  100% {\n    opacity: 1;\n  }\n}\n\n\n</style>\n\n "
  },
  {
    "path": "docs/.vuepress/theme/components/Mode/ModePicker.vue",
    "content": "<!-- 主题切换功能参考 https://github.com/vuepress-reco/vuepress-theme-reco -->\n<!-- https://github.com/vuepress-reco/vuepress-theme-reco/blob/develop/packages/vuepress-theme-reco/components/Mode/ModePicker.vue -->\n<template>\n  <div class=\"mode-options\">\n    <h4 class=\"title\">切换主题</h4>\n    <ul class=\"color-mode-options\">\n      <li\n        v-for=\"(mode, index) in modeOptions\"\n        :key=\"index\"\n        :class=\"getClass(mode.mode)\"\n        @click=\"selectMode(mode.mode)\"\n      >{{ mode.title }}</li>\n    </ul>\n  </div>\n</template>\n\n<script>\nimport applyMode from './applyMode.js'\nexport default {\n  name: 'ModeOptions',\n  data () {\n    return {\n      modeOptions: [\n        { mode: 'dark', title: '暗' },\n        { mode: 'auto', title: '自动' },\n        { mode: 'light', title: '亮' }\n      ],\n      currentMode: 'auto'\n    }\n  },\n  mounted () {\n    // modePicker 开启时默认使用用户主动设置的模式\n    this.currentMode = localStorage.getItem('mode') || this.$themeConfig.mode || 'auto'\n    // Dark and Light autoswitches\n    // 为了避免在 server-side 被执行，故在 Vue 组件中设置监听器\n    var that = this\n    window.matchMedia('(prefers-color-scheme: dark)').addListener(() => {\n      that.$data.currentMode === 'auto' && applyMode(that.$data.currentMode)\n    })\n    window.matchMedia('(prefers-color-scheme: light)').addListener(() => {\n      that.$data.currentMode === 'auto' && applyMode(that.$data.currentMode)\n    })\n    applyMode(this.currentMode)\n  },\n  methods: {\n    selectMode (mode) {\n      if (mode !== this.currentMode) {\n        this.currentMode = mode\n        applyMode(mode)\n        localStorage.setItem('mode', mode)\n      }\n    },\n    getClass (mode) {\n      return mode !== this.currentMode ? mode : `${mode} active`\n    }\n  }\n}\n</script>\n\n<style lang=\"stylus\">\n@require '../../styles/mode.styl'\n.mode-options\n  background-color var(--bg-color)\n  min-width: 125px;\n  margin: 0;\n  padding: 1em;\n  box-shadow var(--box-shadow);\n  border-radius: 3px;\n  .title\n    margin-top 0\n    margin-bottom .6rem\n    font-weight bold\n    color var(--regular-text)\n  .color-mode-options\n    display: flex;\n    flex-wrap wrap\n    li\n      text-align: center;\n      font-size 12px\n      color var(--regular-text)\n      line-height 18px\n      padding 3px 6px\n      border-top 1px solid #666\n      border-bottom 1px solid #666\n      background-color var(--bg-color)\n      cursor pointer\n      &.dark\n        border-radius: 3px 0 0 3px\n        border-left 1px solid #666\n      &.light\n        border-radius: 0 3px 3px 0\n        border-right 1px solid #666\n      &.active\n        background-color: $accentColor;\n        color #fff\n      &:not(.active)\n        border-right 1px solid #666\n</style>"
  },
  {
    "path": "docs/.vuepress/theme/components/Mode/applyMode.js",
    "content": "import modeOptions from './modeOptions'\n\nfunction render (mode) {\n  const rootElement = document.querySelector(':root')\n  const options = modeOptions[mode]\n  for (const k in options) {\n    rootElement.style.setProperty(k, options[k])\n  }\n  document.getElementsByTagName('body')[0].className = mode + '-mode'\n  // console.log('12312131313', document.getElementsByTagName('body')[0].className)\n}\n\n/**\n * Sets a color scheme for the website.\n * If browser supports \"prefers-color-scheme\", 'auto' mode will respect the setting for light or dark mode\n * otherwise it will set a dark theme during night time\n */\nexport default function applyMode (mode) {\n  if (mode !== 'auto') {\n    render(mode)\n    return\n  }\n\n  const isDarkMode = window.matchMedia('(prefers-color-scheme: dark)').matches\n  const isLightMode = window.matchMedia('(prefers-color-scheme: light)').matches\n\n  if (isDarkMode) render('dark')\n  if (isLightMode) render('light')\n\n  if (!isDarkMode && !isLightMode) {\n    console.log('You specified no preference for a color scheme or your browser does not support it. I schedule dark mode during night time.')\n    const hour = new Date().getHours()\n    if (hour < 6 || hour >= 18) render('dark')\n    else render('light')\n  }\n}"
  },
  {
    "path": "docs/.vuepress/theme/components/Mode/index.vue",
    "content": "<template>\n\t<div class=\"color-picker\">\n\t\t\n\t\t<!-- 自己写的，借鉴 https://juejin.cn/post/6913729045997813768 -->\n\t\t<div @click=\"setTheme\" class=\"toggle\">\n\t\t\t<div class=\"night\">🌜</div>\n\t\t\t<div class=\"day\">🌞</div>\n\t\t\t<input type=\"checkbox\" class=\"switch\" :class=\"{'switch_uncheck': themeValue === 'light', 'switch_check': themeValue === 'dark'}\" />\n\t\t</div>\n\n\t</div>\n</template>\n\n<script>\nimport ClickOutside from 'vue-click-outside'\nimport ModePicker from './ModePicker'\nimport applyMode from './applyMode'\n\nexport default {\n  name: 'UserSettings',\n  directives: {\n    'click-outside': ClickOutside\n  },\n  components: {\n    // ModePicker\n  },\n  data () {\n    return {\n\t  themeValue: (new Date().getHours() >= 18 || new Date().getHours() < 6) ? 'dark' : 'light'\n    }\n  },\n  // 为了在保证 modePicker 在 SSR 中正确开关，并实现管理，Mode 组件将负责 modePicker 关闭的情况\n  mounted () {\n\t// modePicker 关闭时默认使用主题设置的模式\n\t// const themeMode = this.$themeConfig.mode || 'auto'\n    // const { modePicker } = this.$themeConfig\n    // if (modePicker === false) {\n    //   // 为 'auto' 模式设置监听器\n    //   if (themeMode === 'auto') {\n    //     window.matchMedia('(prefers-color-scheme: dark)').addListener(() => {\n    //       applyMode(themeMode)\n    //     })\n    //     window.matchMedia('(prefers-color-scheme: light)').addListener(() => {\n    //       applyMode(themeMode)\n    //     })\n    //   }\n\t//   applyMode(themeMode)\n\t//   this.getThemeValue();\n\t// }\n\t// this.themeValue = document.documentElement.style.getPropertyValue('--card-color') == '#ffffff' ? 'light' : 'dark',\n  },\n  methods: {\n\n\t// 设置样式\n    setTheme () {\n\n\t\t// 容错处理\n\t\tif (this.themeValue == '') {\n\t\t\tconst hour = new Date().getHours()\n\t\t\tif (hour < 6 || hour >= 18) this.themeValue = 'dark'\n\t\t\telse this.themeValue = 'light'\n\t\t}\n\n\t\t// 设置属性\n\t\tthis.themeValue == 'light'\n\t\t\t? applyMode('dark')\n\t\t\t: applyMode('light');\n\n\t\tthis.getThemeValue();\n\n\t},\n\n\t// 获取当前是什么主题 暗：dark | 亮：light\n\tgetThemeValue() {\n\t\tthis.themeValue = document.documentElement.style.getPropertyValue('--card-color') == '#ffffff' ? 'light' : 'dark'\n\t}\n  }\n}\n</script>\n\n<style lang=\"stylus\">\n@require '../../styles/mode.styl'\n.color-picker {\n\tposition: relative;\n\tmargin-right: 20px;\n\n\t.color-button {\n\t\talign-items: center;\n\t\theight: 100%;\n\t\t.iconfont {\n\t\t\tfont-size 1.4rem\n\t\t\tcolor: $accentColor\n\t\t}\n\t}\n\t.color-picker-menu {\n\t\tposition: absolute;\n\t\ttop: 40px;\n\t\tleft: 50%;\n\t\ttransform: translateX(-50%);\n\t\tz-index: 150;\n\t\t&.menu-transition-enter-active,\n\t\t&.menu-transition-leave-active {\n\t\t\ttransition: all 0.25s ease-in-out;\n\t\t}\n\t\t&.menu-transition-enter,\n\t\t&.menu-transition-leave-to {\n\t\t\ttop: 50px;\n\t\t\topacity: 0;\n\t\t}\n\t\tul {\n\t\t\tlist-style-type: none;\n\t\t\tmargin: 0;\n\t\t\tpadding: 0;\n\t\t}\n\t}\n}\n@media (max-width: $MQMobile) {\n\t.color-picker {\n\t\tmargin-right: 1rem;\n\t\t.color-picker-menu {\n\t\t\tleft: calc(50% - 35px);\n\t\t\t&::before {\n\t\t\t\tleft: calc(50% + 35px);\n\t\t\t}\n\t\t}\n\t}\n}\n\n.switch {\n\twidth: 50px;\n    height: 24px;\n    border-radius: 30px;\n    background-color: #4d4d4d;\n    position: relative;\n    background-clip: content-box;\n    display: inline-block;\n    appearance: none;\n    -webkit-appearance: none;\n    -moz-appearance: none;\n    user-select: none;\n    outline: none;\n\tcursor: pointer;\n}\n.switch::before {\n\tposition: absolute;\n    top: 1px;\n    left: 1px;\n    width: 20px;\n    height: 20px;\n    border: 1px solid #4d4d4d;\n    border-radius: 50%;\n    background-color: #fafafa;\n    content: '';\n    position: absolute;\n    border-radius: 50%;\n    margin: auto;\n    transition: .3s;\n\tz-index: 3;\n\tcursor: pointer;\n}\n\n.switch_uncheck::before {\n    left: 2px;\n    transition: .3s;\n}\n.switch_check {\n    background-color: #4d4d4d;\n    transition: .6s;\n}\n.switch_check::before {\n    left: 26px;\n    transition: .3s;\n}\n\n\n.toggle {\n\ttop: 1px;\n\tlef: -6px;\n\tcursor: pointer;\n\tposition: relative;\n}\n.night {\n\tposition: absolute;\n\tleft: 10px;\n\tz-index: 2;\n\ttop: -2px;\n\tuser-select: none;\n\tcursor: pointer;\n}\n.day {\n\tposition: absolute;\n\tz-index: 2;\n    top: -2px;\n    right: 10px;\n\tuser-select: none;\n\tcursor: pointer;\n}\n</style>\n"
  },
  {
    "path": "docs/.vuepress/theme/components/Mode/modeOptions.js",
    "content": "const modeOptions = {\n    light: {\n        '--main-color' : '#d71a1b',\n        '--regular-text' : '#4c4e4d',\n        '--secondary-text' : '#8e8787',\n        '--primary-text' : '#292525',\n        '--bg-color' : '#f4f4f4',\n        '--card-color' : '#ffffff',\n        '--border-color' : '#e5e5e5',\n        '--box-shadow' : 'rgba(34, 36, 38, 0.15)',\n        '--mask-color' : 'rgba(255,255,255,0.9)'\n    },\n    dark: {      \n        '--main-color' : '#f94135',\n        '--regular-text' : '#b8b8b8',\n        '--secondary-text' : '#7f7f7f',\n        '--primary-text' : '#ffffff',\n        '--bg-color' : '#171514',\n        '--card-color' : '#232222',\n        '--border-color' : '#373737',\n        '--box-shadow' : 'rgba(34, 36, 38, 0.15)',\n        '--mask-color' : 'rgba(0,0,0,0.9)'\n    }\n  }\n  \n  export default modeOptions"
  },
  {
    "path": "docs/.vuepress/theme/components/NavLink.vue",
    "content": "<template>\n  <router-link\n    class=\"nav-link\"\n    :to=\"link\"\n    v-if=\"!isExternal(link)\"\n    :exact=\"exact\"\n  >{{ item.text }}</router-link>\n  <a\n    v-else\n    :href=\"link\"\n    class=\"nav-link external\"\n    :target=\"isMailto(link) || isTel(link) ? null : '_blank'\"\n    :rel=\"isMailto(link) || isTel(link) ? null : 'noopener noreferrer'\"\n  >\n    {{ item.text }}\n    <OutboundLink/>\n  </a>\n</template>\n\n<script>\nimport { isExternal, isMailto, isTel, ensureExt } from '../util'\n\nexport default {\n  props: {\n    item: {\n      required: true\n    }\n  },\n\n  computed: {\n    link () {\n      return ensureExt(this.item.link)\n    },\n\n    exact () {\n      if (this.$site.locales) {\n        return Object.keys(this.$site.locales).some(rootLink => rootLink === this.link)\n      }\n      return this.link === '/'\n    }\n  },\n\n  methods: {\n    isExternal,\n    isMailto,\n    isTel\n  }\n}\n</script>\n"
  },
  {
    "path": "docs/.vuepress/theme/components/NavLinks.vue",
    "content": "<template>\n  <nav\n    class=\"nav-links\"\n    v-if=\"userLinks.length || repoLink\"\n  >\n    <!-- user links -->\n    <div\n      class=\"nav-item\"\n      v-for=\"item in userLinks\"\n      :key=\"item.link\"\n    >\n      <DropdownLink\n        v-if=\"item.type === 'links'\"\n        :item=\"item\"\n      />\n      <NavLink\n        v-else\n        :item=\"item\"\n      />\n    </div>\n\n    <!-- repo link -->\n    <a\n      v-if=\"repoLink\"\n      :href=\"repoLink\"\n      class=\"repo-link\"\n      target=\"_blank\"\n      rel=\"noopener noreferrer\"\n    >\n      {{ repoLabel }}\n      <OutboundLink/>\n    </a>\n  </nav>\n</template>\n\n<script>\nimport DropdownLink from '@theme/components/DropdownLink.vue'\nimport { resolveNavLinkItem } from '../util'\nimport NavLink from '@theme/components/NavLink.vue'\n\nexport default {\n  components: { NavLink, DropdownLink },\n\n  computed: {\n    userNav () {\n      return this.$themeLocaleConfig.nav || this.$site.themeConfig.nav || []\n    },\n\n    nav () {\n      const { locales } = this.$site\n      if (locales && Object.keys(locales).length > 1) {\n        const currentLink = this.$page.path\n        const routes = this.$router.options.routes\n        const themeLocales = this.$site.themeConfig.locales || {}\n        const languageDropdown = {\n          text: this.$themeLocaleConfig.selectText || 'Languages',\n          items: Object.keys(locales).map(path => {\n            const locale = locales[path]\n            const text = themeLocales[path] && themeLocales[path].label || locale.lang\n            let link\n            // Stay on the current page\n            if (locale.lang === this.$lang) {\n              link = currentLink\n            } else {\n              // Try to stay on the same page\n              link = currentLink.replace(this.$localeConfig.path, path)\n              // fallback to homepage\n              if (!routes.some(route => route.path === link)) {\n                link = path\n              }\n            }\n            return { text, link }\n          })\n        }\n        return [...this.userNav, languageDropdown]\n      }\n      return this.userNav\n    },\n\n    userLinks () {\n      return (this.nav || []).map(link => {\n        return Object.assign(resolveNavLinkItem(link), {\n          items: (link.items || []).map(resolveNavLinkItem)\n        })\n      })\n    },\n\n    repoLink () {\n      const { repo } = this.$site.themeConfig\n      if (repo) {\n        return /^https?:/.test(repo)\n          ? repo\n          : `https://github.com/${repo}`\n      }\n    },\n\n    repoLabel () {\n      if (!this.repoLink) return\n      if (this.$site.themeConfig.repoLabel) {\n        return this.$site.themeConfig.repoLabel\n      }\n\n      const repoHost = this.repoLink.match(/^https?:\\/\\/[^/]+/)[0]\n      const platforms = ['GitHub', 'GitLab', 'Bitbucket']\n      for (let i = 0; i < platforms.length; i++) {\n        const platform = platforms[i]\n        if (new RegExp(platform, 'i').test(repoHost)) {\n          return platform\n        }\n      }\n\n      return 'Source'\n    }\n  }\n}\n</script>\n\n<style lang=\"stylus\">\n.nav-links\n  display inline-block\n  a\n    line-height 1.4rem\n    color inherit\n    // &:hover\n    //   color var(--main-color)\n    // &:hover, &.router-link-active\n    //   color var(--main-color)\n  .nav-item\n    position relative\n    display inline-block\n    margin-left 1.5rem\n    line-height 2rem\n    &:first-child\n      margin-left 0\n  .repo-link\n    margin-left 1.5rem\n\n@media (max-width: $MQMobile)\n  .nav-links\n    .nav-item, .repo-link\n      margin-left 0\n\n@media (min-width: $MQMobile)\n  .nav-links a\n    &:hover, &.router-link-active\n      // color var(--regular-text)\n  .nav-item > a:not(.external)\n    &:hover, &.router-link-active\n      // margin-bottom -2px\n      // border-bottom 2px solid lighten(var(--main-color), 8%)\n</style>\n"
  },
  {
    "path": "docs/.vuepress/theme/components/Navbar.vue",
    "content": "<template>\n  <header class=\"navbar\">\n    <SidebarButton @toggle-sidebar=\"$emit('toggle-sidebar')\"/>\n\n    <router-link\n      :to=\"$localePath\"\n      class=\"home-link\"\n    >\n      <img\n        class=\"logo\"\n        v-if=\"$site.themeConfig.logo\"\n        :src=\"$withBase($site.themeConfig.logo)\"\n        :alt=\"$siteTitle\"\n      >\n      <span\n        ref=\"siteName\"\n        class=\"site-name\"\n        v-if=\"$siteTitle\"\n        :class=\"{ 'can-hide': $site.themeConfig.logo }\"\n      >{{ $siteTitle }}</span>\n    </router-link>\n\n    <div\n      class=\"links\"\n      :style=\"linksWrapMaxWidth ? {\n        'max-width': linksWrapMaxWidth + 'px'\n      } : {}\"\n    >\n      <Mode />\n      <AlgoliaSearchBox\n        v-if=\"isAlgoliaSearch\"\n        :options=\"algolia\"\n      />\n      <SearchBox v-else-if=\"$site.themeConfig.search !== false && $page.frontmatter.search !== false\"/>\n      <NavLinks class=\"can-hide\"/>\n      <!-- 在这里添加了Girhub的 LOGO 比文字好看些 还是给隐藏了吧 -->\n      <a \n        :href=\"githubLink\" \n        class=\"can-hide\"\n        target=\"_blank\"\n        style=\"display: flex; align-items: center; margin-left: 10px; margin-top: -10px;\">\n        <img \n          class=\"my-svg\" \n          :src=\"$withBase('/github.png')\" \n          style=\"width: 1.4rem; height: 1.4rem;\"\n          />\n      </a>\n      \n    </div>\n  </header>\n</template>\n\n<script>\nimport AlgoliaSearchBox from '@AlgoliaSearchBox'\nimport SearchBox from '@SearchBox'\nimport SidebarButton from '@theme/components/SidebarButton.vue'\nimport NavLinks from '@theme/components/NavLinks.vue'\nimport Mode from '@theme/components/Mode'\n\nexport default {\n  components: { SidebarButton, NavLinks, SearchBox, AlgoliaSearchBox, Mode },\n\n  data () {\n    return {\n      linksWrapMaxWidth: null\n    }\n  },\n\n  mounted () {\n    const MOBILE_DESKTOP_BREAKPOINT = 719 // refer to config.styl\n    const NAVBAR_VERTICAL_PADDING = parseInt(css(this.$el, 'paddingLeft')) + parseInt(css(this.$el, 'paddingRight'))\n    const handleLinksWrapWidth = () => {\n      if (document.documentElement.clientWidth < MOBILE_DESKTOP_BREAKPOINT) {\n        this.linksWrapMaxWidth = null\n      } else {\n        this.linksWrapMaxWidth = this.$el.offsetWidth - NAVBAR_VERTICAL_PADDING\n          - (this.$refs.siteName && this.$refs.siteName.offsetWidth || 0)\n      }\n    }\n    handleLinksWrapWidth()\n    window.addEventListener('resize', handleLinksWrapWidth, false)\n  },\n\n  computed: {\n    algolia () {\n      return this.$themeLocaleConfig.algolia || this.$site.themeConfig.algolia || {}\n    },\n\n    isAlgoliaSearch () {\n      return this.algolia && this.algolia.apiKey && this.algolia.indexName\n    },\n    \n    githubLink () {\n      return this.$themeConfig.github || {}\n    }\n  }\n}\n\nfunction css (el, property) {\n  // NOTE: Known bug, will return 'auto' if style value is 'auto'\n  const win = el.ownerDocument.defaultView\n  // null means not to return pseudo styles\n  return win.getComputedStyle(el, null)[property]\n}\n</script>\n\n<style lang=\"stylus\">\n$navbar-vertical-padding = 0.7rem\n$navbar-horizontal-padding = 1.5rem\n\n.navbar\n  padding $navbar-vertical-padding $navbar-horizontal-padding\n  line-height $navbarHeight - 1.4rem\n  a, span, img\n    display inline-block\n    font-weight 600\n  .logo\n    height $navbarHeight - 1.4rem\n    min-width $navbarHeight - 1.4rem\n    margin-right 0.8rem\n    vertical-align top\n    border-radius: 8%\n  .site-name\n    font-size 1.3rem\n    font-weight 600\n    color var(--regular-text)\n    position relative\n  .links\n    padding-left 1.5rem\n    box-sizing border-box\n    // background-color white\n    white-space nowrap\n    font-size 0.9rem\n    position absolute\n    right $navbar-horizontal-padding\n    top $navbar-vertical-padding\n    display flex\n    .search-box\n      flex: 0 0 auto\n      vertical-align top\n\n@media (max-width: $MQMobile)\n  .navbar\n    padding-left 4rem\n    .can-hide\n      opacity: 0\n      display none\n    .links\n      padding-left 1.5rem\n</style>\n"
  },
  {
    "path": "docs/.vuepress/theme/components/Page.vue",
    "content": "<template>\n  <main class=\"page\" :class=\"{'need-zoom': isBlog}\">\n    <slot name=\"top\" />\n    <div class=\"my-main\">\n      <div :class=\"mainClass\">\n        <!-- 文章标题区域 -->\n        <div ref=\"title\" class=\"my-title-box\" v-if=\"isBlog\">\n          <h2>{{ this.$page.title }}</h2>\n          <div class=\"my-title-info\">\n            <!-- 标题下面的信息栏 -->\n            <span :id=\"$page.path\" class=\"leancloud-visitors\" :data-flag-title=\"$page.title\">\n              <span>作者：{{ this.$page.author || '朱昆鹏' }}</span> &ensp;\n              <span>{{ formatDate(this.$page.frontmatter.date) }} &ensp;</span>\n              <i class=\"el-icon-view\" style=\"margin-right: 3px;\" />\n              <span class=\"leancloud-visitors-count\"></span>\n            </span>\n          </div>\n        </div>\n        <Content class=\"theme-default-content\" />\n        <footer class=\"page-edit\" v-if=\"showFooter\">\n          <!-- <div class=\"edit-link\" v-if=\"editLink\">\n            <a :href=\"editLink\" target=\"_blank\" rel=\"noopener noreferrer\">{{ editLinkText }}</a>\n            <OutboundLink />\n          </div> -->\n\n          <div class=\"last-updated\" v-if=\"lastUpdated\">\n            <span class=\"prefix\">{{ lastUpdatedText }}:</span>\n            <span class=\"time\">{{ lastUpdated }}</span>\n          </div>\n        </footer>\n\n        <div class=\"page-nav\" v-if=\"prev || next\">\n          <p class=\"inner\">\n            <span v-if=\"prev\" class=\"prev\">\n              ←\n              <router-link v-if=\"prev\" class=\"prev\" :to=\"prev.path\">{{ prev.title || prev.path }}</router-link>\n            </span>\n\n            <span v-if=\"next\" class=\"next\">\n              <router-link v-if=\"next\" :to=\"next.path\">{{ next.title || next.path }}</router-link>→\n            </span>\n          </p>\n        </div>\n        <valine v-if=\"!hideComment\"></valine>\n      </div>\n      <div v-if=\"hideContent\" class=\"my-main-right\">\n        <div style=\"font-size:14px\">\n          <!-- <a href=\"https://me.csdn.net/jaykm\" target=\"_blank\">CSDN</a> &nbsp;   -->\n          <a href=\"https://github.com/zhukunpenglinyutong\" target=\"_blank\">GitHub</a> &nbsp; \n          <a href=\"https://juejin.cn/user/2788017219055175\" target=\"_blank\">掘金</a> &nbsp; \n          <!-- <a href=\"270750933@qq.com\">邮件</a> -->\n        </div>\n        <div class=\"my-menu\">\n          <h4 style=\"margin-top: 0;\">目录</h4>\n          <a\n            v-for=\"menu in renderMenus\"\n            :href=\"$page.path + '#' + menu.slug\"\n            :class=\"{\n              'my-menu__lv2': menu.level===2,\n              'my-menu__lv3': menu.level===3,\n            }\"\n          >{{ menu.title }}</a>\n        </div>\n      </div>\n    </div>\n\n    <slot name=\"bottom\" />\n  </main>\n</template>\n\n<script>\nimport { resolvePage, outboundRE, endingSlashRE } from \"../util\";\nimport Valine from \"@theme/components/Valine.vue\";\n\nexport default {\n  props: [\"sidebarItems\"],\n  components: { Valine },\n  computed: {\n    mainClass() {\n      return {\n        \"my-main-left\": true,\n        \"notBlog\": !this.isBlog,\n        \"theme-paper\":\n          this.$page.frontmatter.tag &&\n          this.$page.frontmatter.tag.includes(\"碎碎念\")\n      };\n    },\n\n    hideContent() {\n      // 判断是否隐藏目录\n      if (this.$page.frontmatter.categories) {\n          return this.$page.frontmatter.categories !== 'noRight'\n      }\n      return true\n    },\n\n    hideComment() {\n      return this.$page.frontmatter.hideComment\n    },\n\n    renderMenus() {\n      return this.$page.headers;\n    },\n\n    isBlog() {\n      // 判断是否是博客文章\n      if (this.$page.frontmatter.tag) {\n        return this.$page.frontmatter.tag.includes(\"blog\");\n      }\n      return false;\n    },\n\n    showFooter() {\n      return !this.$page.frontmatter.hideFooter;\n    },\n\n    lastUpdated() {\n      // 通过 hideLastUpdated 标签来判断是否隐藏该标签\n      if (this.$page.frontmatter.hideLastUpdated) {\n        return false;\n      }\n      return this.$page.lastUpdated;\n    },\n\n    lastUpdatedText() {\n      if (typeof this.$themeLocaleConfig.lastUpdated === \"string\") {\n        return this.$themeLocaleConfig.lastUpdated;\n      }\n      if (typeof this.$site.themeConfig.lastUpdated === \"string\") {\n        return this.$site.themeConfig.lastUpdated;\n      }\n      return \"修改于\";\n    },\n\n    prev() {\n      const prev = this.$page.frontmatter.prev;\n      if (prev === false) {\n        return;\n      } else if (prev) {\n        prev.path = this.checkPath(prev.path)\n        return prev;\n      }\n    },\n\n    next() {\n      // 修改部分逻辑\n      const next = this.$page.frontmatter.next;\n      if (next === false) {\n        return;\n      } else if (next) {\n        next.path = this.checkPath(next.path)\n        return next;\n      }\n    },\n  },\n\n  methods: {\n    checkPath(path) {\n      return path.endsWith('/') ? path : path + '/'\n    },\n    createEditLink(repo, docsRepo, docsDir, docsBranch, path) {\n      const bitbucket = /bitbucket.org/;\n      if (bitbucket.test(repo)) {\n        const base = outboundRE.test(docsRepo) ? docsRepo : repo;\n        return (\n          base.replace(endingSlashRE, \"\") +\n          `/src` +\n          `/${docsBranch}/` +\n          (docsDir ? docsDir.replace(endingSlashRE, \"\") + \"/\" : \"\") +\n          path +\n          `?mode=edit&spa=0&at=${docsBranch}&fileviewer=file-view-default`\n        );\n      }\n\n      const base = outboundRE.test(docsRepo)\n        ? docsRepo\n        : `https://github.com/${docsRepo}`;\n      return (\n        base.replace(endingSlashRE, \"\") +\n        `/edit` +\n        `/${docsBranch}/` +\n        (docsDir ? docsDir.replace(endingSlashRE, \"\") + \"/\" : \"\") +\n        path\n      );\n    },\n    formatDate(date) {\n      date = new Date(date);\n\n      return `${date.getFullYear()} 年 ${date.getMonth() + 1} 月 ${date.getDate()} 日`;\n    }\n  }\n};\n\nfunction resolvePrev(page, items) {\n  return find(page, items, -1);\n}\n\nfunction resolveNext(page, items) {\n  return find(page, items, 1);\n}\n\nfunction find(page, items, offset) {\n  const res = [];\n  flatten(items, res);\n  for (let i = 0; i < res.length; i++) {\n    const cur = res[i];\n    if (cur.type === \"page\" && cur.path === decodeURIComponent(page.path)) {\n      return res[i + offset];\n    }\n  }\n}\n\nfunction flatten(items, res) {\n  for (let i = 0, l = items.length; i < l; i++) {\n    if (items[i].type === \"group\") {\n      flatten(items[i].children || [], res);\n    } else {\n      res.push(items[i]);\n    }\n  }\n}\n</script>\n\n<style lang=\"stylus\">\n@require '../styles/wrapper.styl';\n\n.my-main {\n  max-width: 70rem;\n  min-height: 90vh;\n  margin: 0 auto;\n  position: relative;\n  display: flex;\n  justify-content: center;\n}\n\n.my-title-box {\n  @extend $wrapper;\n  border-bottom: 1px solid var(--border-color);\n  .my-title-info {\n    color var(--secondary-text)\n  }\n    \n}\n\n.notBlog {\n  margin: 0 auto;\n}\n\n.my-main-left, .my-main-right>* {\n  background-color: var(--card-color);\n  box-shadow: 0 1px 2px 0 var(--box-shadow);\n}  \n\n.my-main-left {\n  position: relative;\n  max-width: 53rem;\n  padding-bottom: 2rem;\n  width: 100%;\n}\n\n.my-main-right {\n  margin-left: 1rem;\n  width: 300px;\n\n  div + div {\n    margin-top: 0.6rem;\n  }\n\n  >* {\n    padding: 1rem;\n  }\n\n  .my-menu {\n    position: sticky;\n    top: 70px;\n    height: 85vh;\n    overflow-y: scroll;\n    overflow-x: hidden;\n\n    &__lv2, &__lv3 {\n      display: block;\n      vertical-align: middle;\n      line-height: 17px;\n      color: var(--secondary-text);\n      text-overflow: ellipsis;\n      white-space: nowrap;\n    }\n\n    &__lv3 {\n      margin-top: 8px;\n      padding-left: 1rem;\n      font-weight: 400;\n      font-size: 13px;\n\n      &::before {\n        content: '- ';\n      }\n    }\n\n    &__lv2 {\n      margin-top: 16px;\n      font-weight: 600;\n      font-size: 14px;\n    }\n  }\n}\n\n@media (max-width: 1100px) {\n  .my-main-left {\n    margin: 0 auto;\n  }\n\n  .my-main-right {\n    display: none;\n  }\n}\n\n.page {\n  padding: 4.5rem 0 2rem 0;\n  display: block;\n  background: var(--bg-color);\n  min-height: 100vh;\n}\n\n.theme-paper {\n  @extend $wrapper;\n  lo-ft-size = 17px\n  font-family: serif;\n  font-size: 17px;\n  margin: 0 auto;\n  .my-title-box {\n    text-align: center;\n  } \n\n  .content__default {\n    ol, p, ul {\n      line-height: 2;\n      text-indent: 2 * (lo-ft-size + 1);\n    }\n  }\n}\n\n.page-edit {\n  @extend $wrapper;\n  padding-top: 1rem;\n  padding-bottom: 1rem;\n  overflow: auto;\n\n  .edit-link {\n    display: inline-block;\n\n    a {\n      // color: lighten(var(--regular-text), 25%);\n      color var(--regular-text)\n      margin-right: 0.25rem;\n    }\n  }\n\n  .last-updated {\n    float: right;\n    font-size: 0.9em;\n\n    .prefix {\n      font-weight: 500;\n      // color: lighten(var(--regular-text), 25%);\n      color var(--regular-text)\n    }\n\n    .time {\n      font-weight: 400;\n      // color: lighten(var(--regular-text), 25%);\n      color var(--regular-text)\n    }\n  }\n}\n\n.page-nav {\n  @extend $wrapper;\n  padding-top: 1rem;\n  padding-bottom: 0;\n\n  .inner {\n    min-height: 2rem;\n    margin-top: 0;\n    border-top: 1px solid var(--border-color);\n    padding-top: 1rem;\n    overflow: auto; // clear float\n  }\n\n  .next {\n    float: right;\n  }\n}\n\n@media (max-width: $MQMobile) {\n  .theme-paper {\n    lo-ft-size = 16px\n  }\n  .page-edit {\n    .edit-link {\n      margin-bottom: 0.5rem;\n    }\n\n    .last-updated {\n      font-size: 0.8em;\n      float: none;\n      text-align: left;\n    }\n  }\n}\n\n::-webkit-scrollbar {\n    width: 4px;\n    height: 4px;\n}\n::-webkit-scrollbar-track {\n    border-radius: 3px;\n    background: rgba(0,0,0,0.06);\n    -webkit-box-shadow: inset 0 0 5px rgba(0,0,0,0.08);\n}\n::-webkit-scrollbar-thumb {\n    border-radius: 3px;\n    background: rgba(0,0,0,0.12);\n    -webkit-box-shadow: inset 0 0 10px rgba(0,0,0,0.2);\n}\n</style>\n"
  },
  {
    "path": "docs/.vuepress/theme/components/Sidebar.vue",
    "content": "<template>\n  <aside class=\"sidebar\">\n    <NavLinks/>\n    <slot name=\"top\"/>\n    <SidebarLinks :depth=\"0\" :items=\"items\"/>\n    <slot name=\"bottom\"/>\n  </aside>\n</template>\n\n<script>\nimport SidebarLinks from '@theme/components/SidebarLinks.vue'\nimport NavLinks from '@theme/components/NavLinks.vue'\n\nexport default {\n  name: 'Sidebar',\n\n  components: { SidebarLinks, NavLinks },\n\n  props: ['items']\n}\n</script>\n\n<style lang=\"stylus\">\n.sidebar\n  ul\n    padding 0\n    margin 0\n    list-style-type none\n  a\n    display inline-block\n  .nav-links\n    display none\n    border-bottom 1px solid var(--border-color)\n    padding 0.5rem 0 0.75rem 0\n    a\n      font-weight 600\n    .nav-item, .repo-link\n      display block\n      line-height 1.25rem\n      font-size 1.1em\n      padding 0.5rem 0 0.5rem 1.5rem\n  & > .sidebar-links\n    padding 1.5rem 0\n    & > li > a.sidebar-link\n      font-size 1.1em\n      line-height 1.7\n      font-weight bold\n    & > li:not(:first-child)\n      margin-top .75rem\n\n@media (max-width: $MQMobile)\n  .sidebar\n    .nav-links\n      display block\n      .dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active::after\n        top calc(1rem - 2px)\n    & > .sidebar-links\n      padding 1rem 0\n</style>\n"
  },
  {
    "path": "docs/.vuepress/theme/components/SidebarButton.vue",
    "content": "<template>\n  <div class=\"sidebar-button\" @click=\"$emit('toggle-sidebar')\">\n    <svg class=\"icon\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\" role=\"img\" viewBox=\"0 0 448 512\">\n      <path fill=\"currentColor\" d=\"M436 124H12c-6.627 0-12-5.373-12-12V80c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12z\" class=\"\"></path>\n    </svg>\n  </div>\n</template>\n\n<style lang=\"stylus\">\n.sidebar-button\n  cursor pointer\n  display none\n  width 1.25rem\n  height 1.25rem\n  position absolute\n  padding 0.6rem\n  top 0.6rem\n  left 1rem\n  .icon\n    display block\n    width 1.25rem\n    height 1.25rem\n\n@media (max-width: $MQMobile)\n  .sidebar-button\n    display block\n</style>\n"
  },
  {
    "path": "docs/.vuepress/theme/components/SidebarGroup.vue",
    "content": "<template>\n  <section\n    class=\"sidebar-group\"\n    :class=\"[\n      {\n        collapsable,\n        'is-sub-group': depth !== 0\n      },\n      `depth-${depth}`\n    ]\"\n  >\n    <router-link\n      v-if=\"item.path\"\n      class=\"sidebar-heading clickable\"\n      :class=\"{\n        open,\n        'active': isActive($route, item.path)\n      }\"\n      :to=\"item.path\"\n      @click.native=\"$emit('toggle')\"\n    >\n      <span>{{ item.title }}</span>\n      <span\n        class=\"arrow\"\n        v-if=\"collapsable\"\n        :class=\"open ? 'down' : 'right'\">\n      </span>\n    </router-link>\n\n    <p\n      v-else\n      class=\"sidebar-heading\"\n      :class=\"{ open }\"\n      @click=\"$emit('toggle')\"\n    >\n      <span>{{ item.title }}</span>\n      <span\n        class=\"arrow\"\n        v-if=\"collapsable\"\n        :class=\"open ? 'down' : 'right'\">\n      </span>\n    </p>\n\n    <DropdownTransition>\n      <SidebarLinks\n        class=\"sidebar-group-items\"\n        :items=\"item.children\"\n        v-if=\"open || !collapsable\"\n        :sidebarDepth=\"item.sidebarDepth\"\n        :depth=\"depth + 1\"\n      />\n    </DropdownTransition>\n  </section>\n</template>\n\n<script>\nimport { isActive } from '../util'\nimport DropdownTransition from '@theme/components/DropdownTransition.vue'\n\nexport default {\n  name: 'SidebarGroup',\n  props: ['item', 'open', 'collapsable', 'depth'],\n  components: { DropdownTransition },\n  // ref: https://vuejs.org/v2/guide/components-edge-cases.html#Circular-References-Between-Components\n  beforeCreate () {\n    this.$options.components.SidebarLinks = require('./SidebarLinks.vue').default\n  },\n  methods: { isActive }\n}\n</script>\n\n<style lang=\"stylus\">\n.sidebar-group\n  .sidebar-group\n    padding-left 0.5em\n  &:not(.collapsable)\n    .sidebar-heading:not(.clickable)\n      cursor auto\n      color inherit\n  // refine styles of nested sidebar groups\n  &.is-sub-group\n    padding-left 0\n    & > .sidebar-heading\n      font-size 0.95em\n      line-height 1.4\n      font-weight normal\n      padding-left 2rem\n      &:not(.clickable)\n        opacity 0.5\n    & > .sidebar-group-items\n      padding-left 1rem\n      & > li > .sidebar-link\n        font-size: 0.95em;\n        border-left none\n  &.depth-2\n    & > .sidebar-heading\n      border-left none\n\n.sidebar-heading\n  color var(--regular-text)\n  transition color .15s ease\n  cursor pointer\n  font-size 1.1em\n  font-weight bold\n  // text-transform uppercase\n  padding 0.35rem 1.5rem 0.35rem 1.25rem\n  width 100%\n  box-sizing border-box\n  margin 0\n  border-left 0.25rem solid transparent\n  &.open, &:hover\n    color inherit\n  .arrow\n    position relative\n    top -0.12em\n    left 0.5em\n  &.clickable\n    &.active\n      font-weight 600\n      color var(--main-color)\n      border-left-color var(--main-color)\n    &:hover\n      color var(--main-color)\n\n.sidebar-group-items\n  transition height .1s ease-out\n  font-size 0.95em\n  overflow hidden\n</style>\n"
  },
  {
    "path": "docs/.vuepress/theme/components/SidebarLink.vue",
    "content": "<script>\nimport { isActive, hashRE, groupHeaders } from '../util'\n\nexport default {\n  functional: true,\n\n  props: ['item', 'sidebarDepth'],\n\n  render (h,\n    {\n      parent: {\n        $page,\n        $site,\n        $route,\n        $themeConfig,\n        $themeLocaleConfig\n      },\n      props: {\n        item,\n        sidebarDepth\n      }\n    }) {\n    // use custom active class matching logic\n    // due to edge case of paths ending with / + hash\n    const selfActive = isActive($route, item.path)\n    // for sidebar: auto pages, a hash link should be active if one of its child\n    // matches\n    const active = item.type === 'auto'\n      ? selfActive || item.children.some(c => isActive($route, item.basePath + '#' + c.slug))\n      : selfActive\n    const link = item.type === 'external'\n      ? renderExternal(h, item.path, item.title || item.path)\n      : renderLink(h, item.path, item.title || item.path, active)\n\n    const maxDepth = [\n      $page.frontmatter.sidebarDepth,\n      sidebarDepth,\n      $themeLocaleConfig.sidebarDepth,\n      $themeConfig.sidebarDepth,\n      1\n    ].find(depth => depth !== undefined);\n\n    const displayAllHeaders = $themeLocaleConfig.displayAllHeaders\n      || $themeConfig.displayAllHeaders\n\n    if (item.type === 'auto') {\n      return [link, renderChildren(h, item.children, item.basePath, $route, maxDepth)]\n    } else if ((active || displayAllHeaders) && item.headers && !hashRE.test(item.path)) {\n      const children = groupHeaders(item.headers)\n      return [link, renderChildren(h, children, item.path, $route, maxDepth)]\n    } else {\n      return link\n    }\n  }\n}\n\nfunction renderLink (h, to, text, active) {\n  return h('router-link', {\n    props: {\n      to,\n      activeClass: '',\n      exactActiveClass: ''\n    },\n    class: {\n      active,\n      'sidebar-link': true\n    }\n  }, text)\n}\n\nfunction renderChildren (h, children, path, route, maxDepth, depth = 1) {\n  if (!children || depth > maxDepth) return null\n  return h('ul', { class: 'sidebar-sub-headers' }, children.map(c => {\n    const active = isActive(route, path + '#' + c.slug)\n    return h('li', { class: 'sidebar-sub-header' }, [\n      renderLink(h, path + '#' + c.slug, c.title, active),\n      renderChildren(h, c.children, path, route, maxDepth, depth + 1)\n    ])\n  }))\n}\n\nfunction renderExternal (h, to, text) {\n  return h('a', {\n    attrs: {\n      href: to,\n      target: '_blank',\n      rel: 'noopener noreferrer'\n    },\n    class: {\n      'sidebar-link': true\n    }\n  }, [text, h('OutboundLink')])\n}\n</script>\n\n<style lang=\"stylus\">\n.sidebar .sidebar-sub-headers\n  padding-left 1rem\n  font-size 0.95em\n\na.sidebar-link\n  font-size 1em\n  font-weight 400\n  display inline-block\n  color var(--regular-text)\n  border-left 0.25rem solid transparent\n  padding 0.35rem 1rem 0.35rem 1.25rem\n  line-height 1.4\n  width: 100%\n  box-sizing: border-box\n  &:hover\n    color var(--main-color)\n  &.active\n    font-weight 600\n    color var(--main-color)\n    border-left-color var(--main-color)\n  .sidebar-group &\n    padding-left 2rem\n  .sidebar-sub-headers &\n    padding-top 0.25rem\n    padding-bottom 0.25rem\n    border-left none\n    &.active\n      font-weight 500\n</style>\n"
  },
  {
    "path": "docs/.vuepress/theme/components/SidebarLinks.vue",
    "content": "<template>\n  <ul\n    class=\"sidebar-links\"\n    v-if=\"items.length\"\n  >\n    <li v-for=\"(item, i) in items\" :key=\"i\">\n      <SidebarGroup\n        v-if=\"item.type === 'group'\"\n        :item=\"item\"\n        :open=\"i === openGroupIndex\"\n        :collapsable=\"item.collapsable || item.collapsible\"\n        :depth=\"depth\"\n        @toggle=\"toggleGroup(i)\"\n      />\n      <SidebarLink\n        v-else\n        :sidebarDepth=\"sidebarDepth\"\n        :item=\"item\"\n      />\n    </li>\n  </ul>\n</template>\n\n<script>\nimport SidebarGroup from '@theme/components/SidebarGroup.vue'\nimport SidebarLink from '@theme/components/SidebarLink.vue'\nimport { isActive } from '../util'\n\nexport default {\n  name: 'SidebarLinks',\n\n  components: { SidebarGroup, SidebarLink },\n\n  props: [\n    'items',\n    'depth',  // depth of current sidebar links\n    'sidebarDepth' // depth of headers to be extracted\n  ],\n\n  data () {\n    return {\n      openGroupIndex: 0\n    }\n  },\n\n  created () {\n    this.refreshIndex()\n  },\n\n  watch: {\n    '$route' () {\n      this.refreshIndex()\n    }\n  },\n\n  methods: {\n    refreshIndex () {\n      const index = resolveOpenGroupIndex(\n        this.$route,\n        this.items\n      )\n      if (index > -1) {\n        this.openGroupIndex = index\n      }\n    },\n\n    toggleGroup (index) {\n      this.openGroupIndex = index === this.openGroupIndex ? -1 : index\n    },\n\n    isActive (page) {\n      return isActive(this.$route, page.regularPath)\n    }\n  }\n}\n\nfunction resolveOpenGroupIndex (route, items) {\n  for (let i = 0; i < items.length; i++) {\n    const item = items[i]\n    if (item.type === 'group' && item.children.some(c => c.type === 'page' && isActive(route, c.path))) {\n      return i\n    }\n  }\n  return -1\n}\n</script>\n"
  },
  {
    "path": "docs/.vuepress/theme/components/Valine.vue",
    "content": "<template>\n  <div>\n    <section class=\"page-edit\">\n      <div id=\"vcomments\"></div>\n    </section>\n  </div>\n</template>\n\n<script>\nexport default {\n  name: 'Valine',\n  mounted: function () {\n    // require window\n    const Valine = require('valine');\n    if (typeof window !== 'undefined') {\n      this.window = window\n      window.AV = require('leancloud-storage')\n    }\n    this.valine = new Valine()\n    this.initValine()\n  },\n  watch: {\n    $route (to, from) {\n      if (from.path != to.path) {\n        this.initValine()\n      }\n    }\n  },\n  methods: {\n    initValine () {\n      // 容错\n      if (document.getElementsByClassName('leancloud-visitors')[0] === undefined) return;\n\n      let path = location.origin + location.pathname\n      document.getElementsByClassName('leancloud-visitors')[0].id = path\n      this.valine.init({\n        el: '#vcomments',\n        appId: 'JqkJsHkjKIsudETqMQbLboif-gzGzoHsz',// your appId\n        appKey: 'f3lLRBskYYnBE06f9MWpVOhI', // your appKey\n        path: path,\n        visitor: true,\n        avatar: 'zkp',\n        placeholder: '感谢您的建议或者鼓励~'\n      });\n    }\n  }\n}\n</script>\n\n<style lang=\"stylus\" scoped>\n.leancloud-visitors\n  display none\n</style>"
  },
  {
    "path": "docs/.vuepress/theme/global-components/Badge.vue",
    "content": "<script>\nexport default {\n  functional: true,\n  props: {\n    type: {\n      type: String,\n      default: 'tip'\n    },\n    text: String,\n    vertical: {\n      type: String,\n      default: 'top'\n    }\n  },\n  render (h, { props, slots }) {\n    return h('span', {\n      class: ['badge', props.type],\n      style: {\n        verticalAlign: props.vertical\n      }\n    }, props.text || slots().default)\n  }\n}\n</script>\n\n<style lang=\"stylus\" scoped>\n.badge\n  display inline-block\n  font-size 14px\n  height 18px\n  line-height 18px\n  border-radius 3px\n  padding 0 6px\n  color white\n  background-color #42b983\n  &.tip, &.green\n    background-color #42b983\n  &.error\n    background-color #DA5961 //#f66\n  &.warning, &.warn, &.yellow\n    background-color #ffe564\n    // background-color darken(#ffe564, 35%)\n  & + &\n    margin-left 5px\n</style>\n"
  },
  {
    "path": "docs/.vuepress/theme/index.js",
    "content": "const path = require('path')\n\n// Theme API.\nmodule.exports = {\n  extend: '@vuepress/theme-default'\n}\n\nmodule.exports = (options, ctx) => ({\n  alias () {\n    const { themeConfig, siteConfig } = ctx\n    // resolve algolia\n    const isAlgoliaSearch = (\n      themeConfig.algolia\n      || Object.keys(siteConfig.locales && themeConfig.locales || {})\n        .some(base => themeConfig.locales[base].algolia)\n    )\n    return {\n      '@AlgoliaSearchBox': isAlgoliaSearch\n        ? path.resolve(__dirname, 'components/AlgoliaSearchBox.vue')\n        : path.resolve(__dirname, 'noopModule.js')\n    }\n  },\n\n  plugins: [\n    ['@vuepress/active-header-links', options.activeHeaderLinks],\n    ['@vuepress/search', {\n      searchMaxSuggestions: 10\n    }],\n    '@vuepress/plugin-nprogress',\n    ['container', {\n      type: 'tip',\n      defaultTitle: {\n        '/zh/': '提示'\n      }\n    }],\n    ['container', {\n      type: 'warning',\n      defaultTitle: {\n        '/zh/': '注意'\n      }\n    }],\n    ['container', {\n      type: 'danger',\n      defaultTitle: {\n        '/zh/': '警告'\n      }\n    }]\n  ]\n})\n"
  },
  {
    "path": "docs/.vuepress/theme/layouts/404.vue",
    "content": "<template>\n  <div class=\"theme-container\">\n    <div class=\"theme-default-content\">\n      <h1>404</h1>\n      <blockquote>{{ getMsg() }}</blockquote>\n      <router-link to=\"/\">Take me home.</router-link>\n    </div>\n  </div>\n</template>\n\n<script>\nconst msgs = [\n  `There's nothing hereee.`,\n  `How did we get here?`,\n  `That's a Four-Oh-Four.`,\n  `Looks like we've got some broken links.`\n]\n\nexport default {\n  methods: {\n    getMsg () {\n      return msgs[Math.floor(Math.random() * msgs.length)]\n    }\n  }\n}\n</script>\n\n"
  },
  {
    "path": "docs/.vuepress/theme/layouts/Layout.vue",
    "content": "<template>\n  <div\n    class=\"theme-container\"\n    :class=\"pageClasses\"\n    @touchstart=\"onTouchStart\"\n    @touchend=\"onTouchEnd\"\n    v-show=\"isShow\"\n  >\n    <el-backtop></el-backtop>\n\n    <div id=\"my-bg\" :class=\"{ 'my-bg-home': $page.frontmatter.home }\"></div>\n\n    <Navbar :class=\"{\n          'my-nav-home': $page.frontmatter.home && !scrollFlag, \n          'my-nav': !$page.frontmatter.home || scrollFlag\n        }\"\n      v-if=\"shouldShowNavbar\"\n      @toggle-sidebar=\"toggleSidebar\"\n    />\n\n    <div\n      class=\"sidebar-mask\"\n      @click=\"toggleSidebar(false)\"\n    ></div>\n\n    <Sidebar\n      :items=\"sidebarItems\"\n      @toggle-sidebar=\"toggleSidebar\"\n    >\n      <slot\n        name=\"sidebar-top\"\n        slot=\"top\"\n      />\n      <slot\n        name=\"sidebar-bottom\"\n        slot=\"bottom\"\n      />\n    </Sidebar>\n\n    <Home v-if=\"$page.frontmatter.home\"/>\n\n    <div v-else>\n      <Page\n        :sidebar-items=\"sidebarItems\"\n      >\n        <slot\n          name=\"page-top\"\n          slot=\"top\"\n        />\n        <slot\n          name=\"page-bottom\"\n          slot=\"bottom\"\n        />\n      </Page>\n    </div>\n    \n    <div class=\"footer\">\n      © 2019-2021 ❤️ 朱昆鹏<br>\n      <!-- <a href=\"http://www.beian.miit.gov.cn\" target=\"_blank\">皖 ICP 备 19016269 号</a><br> -->\n      <!-- <a href=\"https://me.csdn.net/jaykm\" target=\"_blank\">CSDN</a> &nbsp;   -->\n      <a href=\"https://github.com/zhukunpenglinyutong\" target=\"_blank\">GitHub</a> &nbsp; \n      <a href=\"https://juejin.cn/user/2788017219055175\" target=\"_blank\">掘金</a><br>\n      <!-- <a href=\"270750933@qq.com\">发送邮件</a> -->\n    </div>\n  </div>\n</template>\n\n<script>\n\n</script>\n\n<script>\nimport Home from '@theme/components/Home.vue'\nimport Navbar from '@theme/components/Navbar.vue'\nimport Page from '@theme/components/Page.vue'\nimport Sidebar from '@theme/components/Sidebar.vue'\nimport { resolveSidebarItems } from '../util'\n\nexport default {\n  components: { Home, Page, Sidebar, Navbar },\n\n  data () {\n    return {\n      isSidebarOpen: false,\n      scrollFlag: false,\n      isShow: false // 用来点击三次视图切换插件\n    }\n  },\n\n  computed: {\n    shouldShowNavbar () {\n      const { themeConfig } = this.$site\n      const { frontmatter } = this.$page\n      if (\n        frontmatter.navbar === false\n        || themeConfig.navbar === false) {\n        return false\n      }\n      return (\n        this.$title\n        || themeConfig.logo\n        || themeConfig.repo\n        || themeConfig.nav\n        || this.$themeLocaleConfig.nav\n      )\n    },\n\n    shouldShowSidebar () {\n      const { frontmatter } = this.$page\n      return (\n        !frontmatter.home\n        && frontmatter.sidebar !== false\n        && this.sidebarItems.length\n      )\n    },\n\n    sidebarItems () {\n      return resolveSidebarItems(\n        this.$page,\n        this.$page.regularPath,\n        this.$site,\n        this.$localePath\n      )\n    },\n\n    pageClasses () {\n      const userPageClass = this.$page.frontmatter.pageClass\n      return [\n        {\n          'no-navbar': !this.shouldShowNavbar,\n          'sidebar-open': this.isSidebarOpen,\n          'no-sidebar': !this.shouldShowSidebar,\n          'my-layout-container': this.$page.frontmatter.home\n        },\n        userPageClass\n      ]\n    },\n\n    navClasses () {\n      return [\n        {\n          'my-nav-home': this.$page.frontmatter.home && !this.scrollFlag, \n          'my-nav': !this.$page.frontmatter.home || this.scrollFlag\n        }\n      ]\n    }\n  },\n\n  mounted () {\n\n    // 咱也不知道为啥正常点击不行，所以只能先这样，等到时候（可能就不改了）在看看\n    document.getElementsByClassName('toggle')[0].click()\n    document.getElementsByClassName('toggle')[0].click()\n    document.getElementsByClassName('toggle')[0].click()\n    this.isShow = true;\n\n\n    // 监听滚动事件\n    window.addEventListener('scroll', this.myScroll)\n\n    this.$router.afterEach(() => {\n      this.isSidebarOpen = false\n    })\n\n    var _hmt = _hmt || [];\n    (function() {\n      console.log('百度统计启动')\n      var hm = document.createElement(\"script\");\n      hm.src = \"https://hm.baidu.com/hm.js?483baf44489ad1066740f1e074dc4c8c\";\n      var s = document.getElementsByTagName(\"script\")[0]; \n      s.parentNode.insertBefore(hm, s);\n    })();\n  },\n\n  \n  destroyed () {\n    window.removeEventListener('scroll', this.myScroll)\n  },\n\n  methods: {\n    toggleSidebar (to) {\n      this.isSidebarOpen = typeof to === 'boolean' ? to : !this.isSidebarOpen\n    },\n\n    // side swipe\n    onTouchStart (e) {\n      this.touchStart = {\n        x: e.changedTouches[0].clientX,\n        y: e.changedTouches[0].clientY\n      }\n    },\n\n    onTouchEnd (e) {\n      const dx = e.changedTouches[0].clientX - this.touchStart.x\n      const dy = e.changedTouches[0].clientY - this.touchStart.y\n      if (Math.abs(dx) > Math.abs(dy) && Math.abs(dx) > 40) {\n        if (dx > 0 && this.touchStart.x <= 80) {\n          this.toggleSidebar(true)\n        } else {\n          this.toggleSidebar(false)\n        }\n      }\n    },\n\n    myScroll () {\n      const that = this\n      // 获取背景的高度\n      var bg = document.getElementById('my-bg');\n      var bgHeight = bg.offsetHeight;\n      let scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop\n      that.scrollTop = scrollTop\n\n      if (that.scrollTop > bgHeight / 5) {\n        that.scrollFlag = true\n      } else {\n        that.scrollFlag = false\n      }\n    }\n  }\n}\n</script>\n\n<style lang=\"stylus\">\n/* 隐藏滚动条 */ \n::-webkit-scrollbar {\n  width: 0.4rem !important;\n  height: 0.4rem !important;\n  cursor: pointer;\n}\n\n::-webkit-scrollbar-thumb {\n  background-color: var(--secondary-text);\n  border-radius: 3px;\n  transition: .3s ease;\n}\n\n::-webkit-scrollbar-thumb:hover {\n  background-color: var(--border-color)\n  // background-color: darken(var(--border-color), 30%);\n}\n\n/**修改选中的颜色以及背景 */\n::selection {\n  color: #fff;\n  background: #282c34;\n}\n\n.my-layout-container {\n  user-select:none;\n}\n\n.my-bg-home {\n  position: absolute;\n  width: 100%;\n  height: 32rem;\n  background-color: $darkNavColor;\n  background-image: url('./img/bg.jpg')\n  animation: gradientBG 60s linear infinite;\n  background-size: 150%;\n  z-index: -1;\n  &::before {\n    content ''\n    width 100%\n    height 100%\n    position absolute\n    background #00000055\n  }\n}\n\n.my-nav-home {\n  background-color: $darkNavColor;\n  color: white;\n  border: 0;\n}\n\n.my-nav-home .site-name {\n  color: white\n}\n\n.my-nav {\n  background-color: var(--card-color);\n  /*box-shadow: 0 1px 2px 0 rgba(34,36,38,.15);*/\n\tborder-bottom: 1px solid var(--border-color)\n  transition: all 0.5s ease;\n}\n\n.nav-dropdown {\n  color:  var(--regular-text);\n}\n\n.footer {\n  padding: 2.5rem;\n  line-height: 2;\n  border-top: 1px solid var(--border-color);\n  text-align: center;\n  background: $darkNavColor;\n  color: white;\n  /* color: lighten(#2c3e50, 25%)foot; */\n}\n\n.footer a {\n  color: white;\n  font-weight: 300;\n  font-size: 14px;\n  border-bottom: 1px solid var(--main-color);\n  padding: 2px 0;\n}\n\n@media (max-width: $MQNarrow){\n  .my-bg-home {\n    background-size: auto 100%;\n    animation: none;\n  }\n}\n\n@keyframes gradientBG {\n\t0% {\n\t\tbackground-position: 50% 0%;\n\t}\n\t50% {\n\t\tbackground-position: 50% 100%;\n\t}\n\t100% {\n\t\tbackground-position: 50% 0%;\n\t}\n}\n</style>\n"
  },
  {
    "path": "docs/.vuepress/theme/noopModule.js",
    "content": "export default {}\n"
  },
  {
    "path": "docs/.vuepress/theme/styles/arrow.styl",
    "content": "@require './config'\n\n.arrow\n  display inline-block\n  width 0\n  height 0\n  &.up\n    border-left 4px solid transparent\n    border-right 4px solid transparent\n    border-bottom 6px solid $arrowBgColor\n  &.down\n    border-left 4px solid transparent\n    border-right 4px solid transparent\n    border-top 6px solid $arrowBgColor\n  &.right\n    border-top 4px solid transparent\n    border-bottom 4px solid transparent\n    border-left 6px solid $arrowBgColor\n  &.left\n    border-top 4px solid transparent\n    border-bottom 4px solid transparent\n    border-right 6px solid $arrowBgColor\n"
  },
  {
    "path": "docs/.vuepress/theme/styles/code.styl",
    "content": "{$contentClass}\n  code\n    color var(--primary-color)\n    padding 0.25rem 0.5rem\n    margin 0\n    font-size 0.85em\n    background-color var(--bg-color)\n    border-radius 3px\n    .token\n      &.deleted\n        color #EC5975\n      &.inserted\n        color var(--main-color)\n\n{$contentClass}\n  pre, pre[class*=\"language-\"]\n    line-height 1.4\n    padding 1.25rem 1.5rem\n    margin 0.85rem 0\n    background-color $codeBgColor\n    // border-radius 6px\n    border-radius 0.3rem\n    overflow auto\n    code\n      color #eee\n      padding 0\n      background-color transparent\n      border-radius 0\n\ndiv[class*=\"language-\"]\n  position relative\n  background-color $codeBgColor\n  // border-radius 6px\n  border-radius 0.3rem\n  .highlight-lines\n    user-select none\n    padding-top 1.3rem\n    position absolute\n    top 0\n    left 0\n    width 100%\n    line-height 1.4\n    .highlighted\n      background-color rgba(0, 0, 0, 66%)\n  pre, pre[class*=\"language-\"]\n    background transparent\n    position relative\n    z-index 1\n  &::before\n    position absolute\n    z-index 3\n    top 0.8em\n    right 1em\n    font-size 0.75rem\n    color rgba(255, 255, 255, 0.4)\n  &:not(.line-numbers-mode)\n    .line-numbers-wrapper\n      display none\n  &.line-numbers-mode\n    .highlight-lines .highlighted\n        position relative\n        &:before\n          content ' '\n          position absolute\n          z-index 3\n          left 0\n          top 0\n          display block\n          width $lineNumbersWrapperWidth\n          height 100%\n          background-color rgba(0, 0, 0, 66%)\n    pre\n      padding-left $lineNumbersWrapperWidth + 1 rem\n      vertical-align middle\n    .line-numbers-wrapper\n      position absolute\n      top 0\n      width $lineNumbersWrapperWidth\n      text-align center\n      color rgba(255, 255, 255, 0.3)\n      padding 1.25rem 0\n      line-height 1.4\n      br\n        user-select none\n      .line-number\n        position relative\n        z-index 4\n        user-select none\n        font-size 0.85em\n    &::after\n      content ''\n      position absolute\n      z-index 2\n      top 0\n      left 0\n      width $lineNumbersWrapperWidth\n      height 100%\n      border-radius 6px 0 0 6px\n      border-right 1px solid rgba(0, 0, 0, 66%)\n      background-color $codeBgColor\n\n\nfor lang in $codeLang\n  div{'[class~=\"language-' + lang + '\"]'}\n    &:before\n      content ('' + lang)\n\ndiv[class~=\"language-javascript\"]\n  &:before\n    content \"js\"\n\ndiv[class~=\"language-typescript\"]\n  &:before\n    content \"ts\"\n\ndiv[class~=\"language-markup\"]\n  &:before\n    content \"html\"\n\ndiv[class~=\"language-markdown\"]\n  &:before\n    content \"md\"\n\ndiv[class~=\"language-json\"]:before\n  content \"json\"\n\ndiv[class~=\"language-ruby\"]:before\n  content \"rb\"\n\ndiv[class~=\"language-python\"]:before\n  content \"py\"\n\ndiv[class~=\"language-bash\"]:before\n  content \"sh\"\n\ndiv[class~=\"language-php\"]:before\n  content \"php\"\n\n@import '~prismjs/themes/prism-tomorrow.css'\n"
  },
  {
    "path": "docs/.vuepress/theme/styles/config.styl",
    "content": "$contentClass = '.theme-default-content'\n"
  },
  {
    "path": "docs/.vuepress/theme/styles/custom-blocks.styl",
    "content": ".custom-block\n  .custom-block-title\n    font-weight 600\n    margin-bottom -0.4rem\n  &.tip, &.warning, &.danger\n    padding .1rem 1.5rem\n    border-left-width .5rem\n    border-left-style solid\n    margin 1rem 0\n  &.tip\n    background-color #f3f5f7\n    border-color #42b983\n  &.warning\n    background-color rgba(255,229,100,.3)\n    // border-color darken(#ffe564, 35%)\n    border-color #ffe564\n    color #ffe564\n    // color darken(#ffe564, 70%)\n    .custom-block-title\n      color #ffe564\n      // color darken(#ffe564, 50%)\n    a\n      color var(--regular-text)\n  &.danger\n    background-color #ffe6e6\n    // border-color darken(red, 20%)\n    border-color red\n    // color darken(red, 70%)\n    color red\n    .custom-block-title\n      color red\n      // color darken(red, 40%)\n    a\n      color var(--regular-text)\n\n\n"
  },
  {
    "path": "docs/.vuepress/theme/styles/index.styl",
    "content": "@require './config'\n@require './code'\n@require './custom-blocks'\n@require './arrow'\n@require './wrapper'\n@require './toc'\n@require './mode'\n\nhtml, body\n  padding 0\n  margin 0\n\nhtml\n  background inherit\n\nbody\n  font-family -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen, Ubuntu, Cantarell, \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", sans-serif\n  -webkit-font-smoothing antialiased\n  -moz-osx-font-smoothing grayscale\n  font-size 16px\n  color var(--regular-text)\n  background: var(--bg-color)\n\n.page\n  padding-left $sidebarWidth\n\n.navbar\n  position fixed\n  z-index 20\n  top 0\n  left 0\n  right 0\n  height $navbarHeight\n  // background-color #fff\n  box-sizing border-box\n  // border-bottom 1px solid var(--border-color)\n\n.sidebar-mask\n  position fixed\n  z-index 9\n  top 0\n  left 0\n  width 100vw\n  height 100vh\n  display none\n\n.sidebar\n  font-size 16px\n  background-color #fff\n  width $sidebarWidth\n  position fixed\n  z-index 10\n  margin 0\n  top $navbarHeight\n  left 0\n  bottom 0\n  box-sizing border-box\n  border-right 1px solid var(--border-color)\n  overflow-y auto\n\n{$contentClass}:not(.custom)\n  @extend $wrapper\n  > *:first-child\n    // margin-top $navbarHeight\n\n  a:hover\n    // text-decoration underline\n\n  p.demo\n    padding 1rem 1.5rem\n    border 1px solid var(--border-color)\n    border-radius 4px\n\n  img\n    max-width 100%\n\n{$contentClass}.custom\n  padding 0\n  margin 0\n\n  img\n    max-width 100%\n\na\n  font-weight 500\n  color var(--regular-text)\n  text-decoration none\n\np a code\n  font-weight 400\n  color var(--main-color)\n\nkbd\n  background #eee\n  border solid 0.15rem var(--border-color)\n  border-bottom solid 0.25rem var(--border-color)\n  border-radius 0.15rem\n  padding 0 0.15em\n\nblockquote\n  font-size 1rem\n  color #999;\n  border-left .2rem solid var(--main-color)\n  margin 1rem 0\n  padding .25rem 0 .25rem 1rem\n\n  & > p\n    margin 0\n\nul, ol\n  padding-left 1.2em\n\nstrong\n  font-weight 600\n\nh1, h2, h3, h4, h5, h6\n  font-weight 600\n  line-height 1.25\n\n  {$contentClass}:not(.custom) > &\n    margin-top (0.5rem - $navbarHeight)\n    padding-top ($navbarHeight + 1rem)\n    margin-bottom 0\n\n    &:first-child\n      margin-top -1.5rem\n      margin-bottom 1rem\n\n      + p, + pre, + .custom-block\n        margin-top 2rem\n\n  &:hover .header-anchor\n    opacity: 1\n\n// 标题的字体大小\nh1\n  font-size 1.8rem\n\nh2\n  font-size 1.3rem\n  padding-bottom .3rem\n  // border-bottom 1px solid var(--border-color)\n\nh3\n  font-size 1.1rem\n\na.header-anchor\n  font-size 0.85em\n  float left\n  margin-left -0.87em\n  padding-right 0.23em\n  margin-top 0.125em\n  opacity 0\n\n  &:hover\n    text-decoration none\n\ncode, kbd, .line-number\n  font-family source-code-pro, Menlo, Monaco, Consolas, \"Courier New\", monospace\n\n// 此处是修改样式\np, ul, ol\n  line-height 30px\n  letter-spacing 1px\n  font-weight 400\n  > a\n    border-bottom 1px solid $accentColor\n    transition all .2s\n  > a:hover\n    border-bottom 2px solid $accentColor\n\nhr\n  border 0\n  border-top 1px solid var(--border-color)\n\ntable\n  border-collapse collapse\n  margin 1rem 0\n  display: block\n  overflow-x: auto\n  &>*\n    width 100%\n\ntr\n  border-top 1px solid var(--border-color)\n\n  &:nth-child(2n)\n    // background-color lighten(var(--border-color), 50%)\n    background-color: var(--border-color)\n\nth, td\n  border 1px solid var(--border-color)\n  padding .6em 1em\n\n.theme-container\n  &.sidebar-open\n    .sidebar-mask\n      display: block\n\n  &.no-navbar\n    {$contentClass}:not(.custom) > h1, h2, h3, h4, h5, h6\n      margin-top 1.5rem\n      padding-top 0\n\n    .sidebar\n      top 0\n\n\n@media (min-width: ($MQMobile + 1px))\n  .theme-container.no-sidebar\n    .sidebar\n      display none\n\n    .page\n      padding-left 0\n\n@require 'mobile.styl'\n\n// 重写 ElementUI 样式颜色\n.el-link.el-link--primary\n  color: var(--primary-text)\n  &::hover\n    color: var(--regular-text)\n"
  },
  {
    "path": "docs/.vuepress/theme/styles/mobile.styl",
    "content": "@require './config'\n\n$mobileSidebarWidth = $sidebarWidth * 0.82\n\n// narrow desktop / iPad\n@media (max-width: $MQNarrow)\n  .sidebar\n    font-size 15px\n    width $mobileSidebarWidth\n  .page\n    padding-left $mobileSidebarWidth\n\n// wide mobile\n@media (max-width: $MQMobile)\n  .sidebar\n    top 0\n    padding-top $navbarHeight\n    transform translateX(-100%)\n    transition transform .2s ease\n  .page\n    padding-left 0\n  .theme-container\n    &.sidebar-open\n      .sidebar\n        transform translateX(0)\n    &.no-navbar\n      .sidebar\n        padding-top: 0\n\n// narrow mobile\n@media (max-width: $MQMobileNarrow)\n  h1\n    font-size 1.9rem\n  {$contentClass}\n    div[class*=\"language-\"]\n      margin 0.85rem -1.5rem\n      border-radius 0\n"
  },
  {
    "path": "docs/.vuepress/theme/styles/mode.styl",
    "content": ":root\n  --main-color $lightMainColor\n  --regular-text $lightRegularText\n  --secondary-text $lightSecondaryText\n  --primary-text $lightPrimaryText\n  --bg-color $lightBgColor\n  --card-color $lightCard\n  --border-color $lightBorder\n  --box-shadow $lightShadow\n  --mask-color $lightMaskColor\n  @media (prefers-color-scheme: dark)\n    --main-color $darkMainColor\n    --regular-text $darkRegularText\n    --secondary-text $darkSecondaryText\n    --primary-text $darkPrimaryText\n    --bg-color $darkBgColor\n    --card-color $darkCard\n    --border-color $darkBorder\n    --box-shadow $darkShadow\n    --mask-color $darkMaskColor"
  },
  {
    "path": "docs/.vuepress/theme/styles/toc.styl",
    "content": ".table-of-contents\n  .badge\n    vertical-align middle\n"
  },
  {
    "path": "docs/.vuepress/theme/styles/wrapper.styl",
    "content": "$wrapper\n  max-width $contentWidth\n  margin 0 auto\n  padding 2rem 2.5rem\n  @media (max-width: $MQNarrow)\n    padding 2rem\n  @media (max-width: $MQMobileNarrow)\n    padding 1.5rem\n\n"
  },
  {
    "path": "docs/.vuepress/theme/user-components/Loading.vue",
    "content": "<template>\n  <div class=\"my-loading\">\n    <div class=\"spinner\">\n      <div class=\"rect1\"></div>\n      <div class=\"rect2\"></div>\n      <div class=\"rect3\"></div>\n      <div class=\"rect4\"></div>\n      <div class=\"rect5\"></div>\n    </div>\n  </div>\n</template>\n\n<style scoped>\n.spinner {\n  margin: 100px auto;\n  width: 50px;\n  height: 40px;\n  text-align: center;\n  font-size: 10px;\n}\n\n.spinner > div {\n  background-color: #333;\n  border: 1px aolid white;\n  height: 100%;\n  width: 6px;\n  display: inline-block;\n  \n  -webkit-animation: sk-stretchdelay 1.2s infinite ease-in-out;\n  animation: sk-stretchdelay 1.2s infinite ease-in-out;\n}\n\n.spinner .rect2 {\n  -webkit-animation-delay: -1.1s;\n  animation-delay: -1.1s;\n}\n\n.spinner .rect3 {\n  -webkit-animation-delay: -1.0s;\n  animation-delay: -1.0s;\n}\n\n.spinner .rect4 {\n  -webkit-animation-delay: -0.9s;\n  animation-delay: -0.9s;\n}\n\n.spinner .rect5 {\n  -webkit-animation-delay: -0.8s;\n  animation-delay: -0.8s;\n}\n\n@-webkit-keyframes sk-stretchdelay {\n  0%, 40%, 100% { -webkit-transform: scaleY(0.4) }  \n  20% { -webkit-transform: scaleY(1.0) }\n}\n\n@keyframes sk-stretchdelay {\n  0%, 40%, 100% { \n    transform: scaleY(0.4);\n    -webkit-transform: scaleY(0.4);\n  }  20% { \n    transform: scaleY(1.0);\n    -webkit-transform: scaleY(1.0);\n  }\n}\n</style>\n"
  },
  {
    "path": "docs/.vuepress/theme/util/index.js",
    "content": "export const hashRE = /#.*$/\nexport const extRE = /\\.(md|html)$/\nexport const endingSlashRE = /\\/$/\nexport const outboundRE = /^(https?:|mailto:|tel:|[a-zA-Z]{4,}:)/\n\nexport function normalize (path) {\n  return decodeURI(path)\n    .replace(hashRE, '')\n    .replace(extRE, '')\n}\n\nexport function getHash (path) {\n  const match = path.match(hashRE)\n  if (match) {\n    return match[0]\n  }\n}\n\nexport function isExternal (path) {\n  return outboundRE.test(path)\n}\n\nexport function isMailto (path) {\n  return /^mailto:/.test(path)\n}\n\nexport function isTel (path) {\n  return /^tel:/.test(path)\n}\n\nexport function ensureExt (path) {\n  if (isExternal(path)) {\n    return path\n  }\n  const hashMatch = path.match(hashRE)\n  const hash = hashMatch ? hashMatch[0] : ''\n  const normalized = normalize(path)\n\n  if (endingSlashRE.test(normalized)) {\n    return path\n  }\n  return normalized + '.html' + hash\n}\n\nexport function isActive (route, path) {\n  const routeHash = decodeURIComponent(route.hash)\n  const linkHash = getHash(path)\n  if (linkHash && routeHash !== linkHash) {\n    return false\n  }\n  const routePath = normalize(route.path)\n  const pagePath = normalize(path)\n  return routePath === pagePath\n}\n\nexport function resolvePage (pages, rawPath, base) {\n  if (isExternal(rawPath)) {\n    return {\n      type: 'external',\n      path: rawPath\n    }\n  }\n  if (base) {\n    rawPath = resolvePath(rawPath, base)\n  }\n  const path = normalize(rawPath)\n  for (let i = 0; i < pages.length; i++) {\n    if (normalize(pages[i].regularPath) === path) {\n      return Object.assign({}, pages[i], {\n        type: 'page',\n        path: ensureExt(pages[i].path)\n      })\n    }\n  }\n  console.error(`[vuepress] No matching page found for sidebar item \"${rawPath}\"`)\n  return {}\n}\n\nfunction resolvePath (relative, base, append) {\n  const firstChar = relative.charAt(0)\n  if (firstChar === '/') {\n    return relative\n  }\n\n  if (firstChar === '?' || firstChar === '#') {\n    return base + relative\n  }\n\n  const stack = base.split('/')\n\n  // remove trailing segment if:\n  // - not appending\n  // - appending to trailing slash (last segment is empty)\n  if (!append || !stack[stack.length - 1]) {\n    stack.pop()\n  }\n\n  // resolve relative path\n  const segments = relative.replace(/^\\//, '').split('/')\n  for (let i = 0; i < segments.length; i++) {\n    const segment = segments[i]\n    if (segment === '..') {\n      stack.pop()\n    } else if (segment !== '.') {\n      stack.push(segment)\n    }\n  }\n\n  // ensure leading slash\n  if (stack[0] !== '') {\n    stack.unshift('')\n  }\n\n  return stack.join('/')\n}\n\n/**\n * @param { Page } page\n * @param { string } regularPath\n * @param { SiteData } site\n * @param { string } localePath\n * @returns { SidebarGroup }\n */\nexport function resolveSidebarItems (page, regularPath, site, localePath) {\n  const { pages, themeConfig } = site\n\n  const localeConfig = localePath && themeConfig.locales\n    ? themeConfig.locales[localePath] || themeConfig\n    : themeConfig\n\n  const pageSidebarConfig = page.frontmatter.sidebar || localeConfig.sidebar || themeConfig.sidebar\n  if (pageSidebarConfig === 'auto') {\n    return resolveHeaders(page)\n  }\n\n  const sidebarConfig = localeConfig.sidebar || themeConfig.sidebar\n  if (!sidebarConfig) {\n    return []\n  } else {\n    const { base, config } = resolveMatchingConfig(regularPath, sidebarConfig)\n    return config\n      ? config.map(item => resolveItem(item, pages, base))\n      : []\n  }\n}\n\n/**\n * @param { Page } page\n * @returns { SidebarGroup }\n */\nfunction resolveHeaders (page) {\n  const headers = groupHeaders(page.headers || [])\n  return [{\n    type: 'group',\n    collapsable: false,\n    title: page.title,\n    path: null,\n    children: headers.map(h => ({\n      type: 'auto',\n      title: h.title,\n      basePath: page.path,\n      path: page.path + '#' + h.slug,\n      children: h.children || []\n    }))\n  }]\n}\n\nexport function groupHeaders (headers) {\n  // group h3s under h2\n  headers = headers.map(h => Object.assign({}, h))\n  let lastH2\n  headers.forEach(h => {\n    if (h.level === 2) {\n      lastH2 = h\n    } else if (lastH2) {\n      (lastH2.children || (lastH2.children = [])).push(h)\n    }\n  })\n  return headers.filter(h => h.level === 2)\n}\n\nexport function resolveNavLinkItem (linkItem) {\n  return Object.assign(linkItem, {\n    type: linkItem.items && linkItem.items.length ? 'links' : 'link'\n  })\n}\n\n/**\n * @param { Route } route\n * @param { Array<string|string[]> | Array<SidebarGroup> | [link: string]: SidebarConfig } config\n * @returns { base: string, config: SidebarConfig }\n */\nexport function resolveMatchingConfig (regularPath, config) {\n  if (Array.isArray(config)) {\n    return {\n      base: '/',\n      config: config\n    }\n  }\n  for (const base in config) {\n    if (ensureEndingSlash(regularPath).indexOf(encodeURI(base)) === 0) {\n      return {\n        base,\n        config: config[base]\n      }\n    }\n  }\n  return {}\n}\n\nfunction ensureEndingSlash (path) {\n  return /(\\.html|\\/)$/.test(path)\n    ? path\n    : path + '/'\n}\n\nfunction resolveItem (item, pages, base, groupDepth = 1) {\n  if (typeof item === 'string') {\n    return resolvePage(pages, item, base)\n  } else if (Array.isArray(item)) {\n    return Object.assign(resolvePage(pages, item[0], base), {\n      title: item[1]\n    })\n  } else {\n    if (groupDepth > 3) {\n      console.error(\n        '[vuepress] detected a too deep nested sidebar group.'\n      )\n    }\n    const children = item.children || []\n    if (children.length === 0 && item.path) {\n      return Object.assign(resolvePage(pages, item.path, base), {\n        title: item.title\n      })\n    }\n    return {\n      type: 'group',\n      path: item.path,\n      title: item.title,\n      sidebarDepth: item.sidebarDepth,\n      children: children.map(child => resolveItem(child, pages, base, groupDepth + 1)),\n      collapsable: item.collapsable !== false\n    }\n  }\n}"
  },
  {
    "path": "docs/README.md",
    "content": "---\nhome: true\nheroText: 朱昆鹏\ntagline: 凡是经历，皆为过往\npermalink: /\nactionText: ABOUT\nactionLink: https://github.com/zhukunpenglinyutong\n\nsidebar: false\n\nfeatures:\n- image: /ills/code.svg\n  title: 保持对代码的敬畏\n  details: 保持对代码的敬畏，保持对技术的热爱；\n- image: /ills/life.svg\n  title: 保持对生活的热爱\n  details: 珍惜生活中的每一份小美好，热爱生活；\n- image: /ills/share.svg\n  title: 分享自己的快乐\n  details: 当有开心的事情的时候，记得分享；\n---"
  },
  {
    "path": "docs/blog/1.计算机基础/1.计算机组成原理.md",
    "content": "---\ntitle: 1.计算机组成原理（待完善）\ndate: 2020-01-30 00:00:00\npermalink: \ntag: \n - blog\n - 1.计算机基础\n---\n\n## 🍍第一部分：概述篇\n\n### 1.计算机的发展历史\n\n**计算机发展的四个阶段**\n\n- 第一阶段：电子管计算机 1946 - 1957\n- 第二阶段：晶体管计算机 1957 - 1964\n- 第三阶段：集成电路计算机 1964 - 1980\n- 第四阶段：超大规模集成电路计算机 1980 - 现在\n\n> 第二次世界大战期间，英国为了解密德军海军的密文，设计了世界上第一台电子管计算机，这一阶段最著名的一个电子管计算机是 艾尼阿克（ENIAC）\n> 艾尼阿克（ENIAC\n> 18000 多个电子管，运行耗电量 150千瓦，重30吨，占地1500平方英尺，运行速度是人工的20万倍\n> 问题：集成度小，空间占用大，功耗高，运行慢，操作复杂，更换程序需要接线\n\n> 第二阶段：晶体管计算机 1957 - 1964\n\n> 主要是贝尔实验室的三个科学家发明了晶体管，这一时期最著名的计算机有 TX-0（第一台晶体管计算机），PDP-1（当时性能最高的晶体管计算机，配备4k内存，每秒钟能执行200000条指令，配备了 512x512显示器）\n> 集成度相对较高，空间占用相对较小，功耗较低，运算速度较快，操作简单，交互更加简单\n\n> 第三阶段：集成电路计算机 1964 - 1980\n\n> 主要是 德州仪器的工程师发明了 集成电路（IC）\n> 计算机更小，功耗变得更低，速度更快，这时候计算机已经具备进入千家万户的条件\n> 这一阶段 IBM 有两款卖的非常好的计算机（7094 和 1401），但是这两款计算机软件不相互兼容，所以 IBM推出了兼容产品 System/360（操作系统的雏形），操作系统的出现 让 软件在 不同的硬件上运行成为了可能\n\n> 第四阶段：超大规模集成电路计算机 1980 - 现在\n\n> 一个芯片可以集成上百万个晶体管，速度更快，体积更小，价格更低，用户丰富（文本处理，表格处理，高交互的游戏...）\n\n> warning 第五个阶段？\n\n> 生物计算机，可能以 蛋白质分子作为主要原材料（体积小，效率高，不受信号的干扰，没有热损耗）\n> 量子计算机，遵循量子力学的物理计算机\n\n---\n\n**微型计算机的发展历史**\n\n- 单核CPU（有性能瓶颈）\n  - 1971-1973 500KHz 频率的微型计算机（字长8位）\n  - 1973-1978 高于1MHz 频率的微型计算机（字长8位）\n  - 1978-1985 500MHz 频率的微型计算机（字长16位）\n  - 1985-2000 高于1GHz 频率的微型计算机（字长32位）\n  - 2000-现在 高于2GHz频率的微型计算机（字长64位）\n- 多核CPU\n  - 2005 Intel酷睿系列 双核CPU，AMD速龙系列\n  - 2006 Intel酷睿四核CPUIntel酷睿十六核CPU\n  - Intel酷睿十六核CPU\n  - 在服务器领域 Intel至强系列56核CPU\n\n---\n\n### 2.计算机的分类\n\n- 超级计算机：功能最强，运算速度最快，存储容量最大的计算机，多用于国家高科技领域和尖端技术的研究，运算速度 TFlop/s（每秒万亿次浮点运算）\n- 大型计算机：具有高性能，可处理大量数据与复杂运算（例如人口普查，金融，银行等等），在大型机市场里，IBM占用了很大的份额\n- 迷你计算机（服务器）：不需要特殊的空调场所，具备不错的算力，可以完成较复杂的运算\n- 工作站：高端的通用微型计算机，提供比个人计算机更强大的性能，类似于普通台式电脑，性能强劲\n- 微型计算机（个人计算机）：台式机，笔记本，一体机\n\n---\n\n### 3.计算机的体系与结构\n\n**冯诺依曼体系（将程序指令和数据一起存储的计算机设计概念结构）**\n\n- 存储程序指令\n- 设计通用电路\n\n**解决了早期计算机 仅能执行固定程序的问题**\n\n- 必须有一个存储器\n- 必须有一个控制器\n- 必须有一个运算器\n- 必须有一个输入设备\n- 必须有一个输出设备\n\n---\n\n**现代计算机的结构**\n\n- 多了一个内存，解决CPU与硬盘之间 速率不一致的问题\n\n---\n\n### 4.计算机的层次与编程语言\n\n\n\n---\n\n### 5.计算机的计算单元\n\n---\n\n### 6.计算机的字符和编码集\n\n---\n\n## 🌽第二部分：组成篇\n\n---\n\n## 🥒第三部分：计算篇\n\n---\n\n## 🥜第四部分：实践篇\n\n---\n\n## 一.系统概述\n\n### 1.来造一台简单的计算机\n\n\n逻辑\n\n\n## 📚参考列表（致敬）\n\n- [慕课网 编程必备基础 计算机组成原理+操作系统+计算机网络](https://coding.imooc.com/learn/list/355.html)"
  },
  {
    "path": "docs/blog/1.计算机基础/2.操作系统.md",
    "content": "---\ntitle: 2.操作系统（待完善）\ndate: 2020-01-30 00:00:00\npermalink: \ntag: \n - blog\n - 1.计算机基础\n---\n\n## 🍜第一部分：基础篇\n\n### 1.操作系统概述\n\n> 操作系统是管理计算机硬件和软件资源的**计算机程序**\n\n> 管理配置内存，决定资源供需顺序，控制输入输出设备等\n\n> 操作系统提供让用户和系统交互的操作页面 \n\n> 不局限计算机，还有手机等多种设备，都有操作系统\n\n---\n\n## 🍲第二部分：提升篇\n\n---\n\n## 🍔第三部分：实践篇\n\n---\n\n## 📚参考列表（致敬）\n\n- [慕课网 编程必备基础 计算机组成原理+操作系统+计算机网络](https://coding.imooc.com/learn/list/355.html)"
  },
  {
    "path": "docs/blog/1.计算机基础/3.计算机网络.md",
    "content": "---\ntitle: 3.计算机网络（待完善）\ndate: 2020-01-30 00:00:00\npermalink: \ntag: \n - blog\n - 1.计算机基础\n---\n\n## 🍧第一部分：概述篇\n\n---\n\n## 🍰第二部分：网络层篇\n\n---\n\n## 🍶第三部分：传输层\n\n---\n\n## 🍹第四部分：应用层篇\n\n---\n\n## 🍷第五部分：计算机网络实践\n\n---\n\n## 📚参考列表（致敬）\n\n- [慕课网 编程必备基础 计算机组成原理+操作系统+计算机网络](https://coding.imooc.com/learn/list/355.html)"
  },
  {
    "path": "docs/blog/1.计算机基础/4.数据结构.md",
    "content": "---\ntitle: 4.数据结构（待完善）\ndate: 2020-01-30 00:00:00\npermalink: \ntag: \n - blog\n - 1.计算机基础\n---"
  },
  {
    "path": "docs/blog/1.计算机基础/5.算法.md",
    "content": "---\ntitle: 5.算法（待完善）\ndate: 2020-01-30 00:00:00\npermalink: \ntag: \n - blog\n - 1.计算机基础\n---"
  },
  {
    "path": "docs/blog/1.计算机基础/6.数据库系统概论.md",
    "content": "---\ntitle: 6.数据库系统概论（待完善）\ndate: 2020-01-30 00:00:00\npermalink: \ntag: \n - blog\n - 1.计算机基础\n---"
  },
  {
    "path": "docs/blog/1.计算机基础/7.数据库使用.md",
    "content": "---\ntitle: 7.数据库使用（待完善）\ndate: 2020-01-30 00:00:00\npermalink: \ntag: \n - blog\n - 1.计算机基础\n---"
  },
  {
    "path": "docs/blog/1.计算机基础/8.JS版本数据结构和算法.md",
    "content": "---\ntitle: 8.JS版本数据结构和算法（待完善）\ndate: 2020-01-30 00:00:00\npermalink: \ntag: \n - blog\n - 1.计算机基础\n---\n\n> 前言：本节主要是从JS的角度出发，来进行的数据结构和算法的学习\n\n## 第二章：数据结构和算法简介\n\n---\n\n## 第二章：时间/空间复杂度计算\n\n\n\n\n"
  },
  {
    "path": "docs/blog/10.前端工程化/1.前端工程化绪论.md",
    "content": "---\ntitle: 1.前端工程化绪论\ndate: 2020-01-30 00:00:00\npermalink: \ntag: \n - blog\n - 10.前端工程化\n---\n\n> 为什么我想先写一下工程化绪论呢，因为我想让你明白工程化的历史\n\n> 明白没有工程化的时候 想做一些事情是多么的困难，而有了工程化，想做一些事情是多么简单\n\n> 这样有助于我们 接收未来新的工程化技术\n\n> 我希望你通过阅读这篇内容，能够从之前页面仔的思想，过渡到一名工程师的角度\n\n## 🍱第一部分：工程化发展历史\n\n> 现代前端技术不再是以前刀耕火种的年代了，任何简单机械的重复劳动都应该让机器去完成。\n\n### 第一阶段：模块化\n\n> 最开始的时候 HTML/CSS/JS 掌握三者，然后写个页面和交互，就称之为前端工程师（也称之为页面仔）\n\n> 后来随着前端能做的事情越来越多（因为浏览器能做的事情变多了），前端代码越写越多，最开始受到影响的就是JS\n\n> 因为JS太多了，于是人们就想模块化的使用JS，用于解耦和复用，于是 这时候JS模块化思想出现，各种JS模块化规范出现。\n\n> 现在比较流行的就是 ES Module & Commonjs 两种规范\n\n> 备注：后来CSS也具有模块化，就是CSS预处理器的出现\n\n---\n\n### 第二阶段：工程化工具\n\n> 因为模块化使得一个技术火了起来Node（或者说Node使Commonjs模块规范火了起来）\n\n> 因为前端有了Node，所以能做的事情越来越多，出现了CSS预处理器（Less,Sass,Style...）,CSS后处理器（Postcss），Babel等等\n\n> 这时候人们想做事情越来越多，例如，想让CSS更强大，于是又了CSS预处理器，不行写CSS的兼容性代码，于是CSS后处理器出现，想用ES6语法，而又不想担心其兼容性，Babel就出现了\n\n> 这时候人们越来越贪婪，还想压缩文件，压缩图片，MD5自动命名等等\n\n> 这时候就出现了构建工具（其实FIS是百度很早推出的构建工具），构建工具能统筹这些技术（插件或者Loder），让其经由Webpack这个打包工具，产出你想要的样子\n\n> 最近最火的工程化工具，不用说了，就是webpack\n"
  },
  {
    "path": "docs/blog/10.前端工程化/2.Webpack.md",
    "content": "---\ntitle: 2.Webpack\ndate: 2020-01-30 00:00:00\npermalink: \ntag: \n - blog\n - 10.前端工程化\n---\n\n> 注意此处：内容不全，等待补充...\n\n## 🗂第一部分：webpack初步探索\n\n### 1.webpack是什么\n\n\n> 要从一种写代码的思想说起，就是把不同的代码拆分成不同的文件，然后进行引用，这样做很好，但是对于web会有一个问题\n\n> 通过引用的方式，如果引入关系很多的话，前后顺序，依赖关系等等，非常的混乱\n\n> 后来出现了 CommonJS, CMD, AMD, ESM 的出现，逐渐的解决了这个问题\n\n> 如果你真的体会过前端的原始传统的写法，你就会明白，面对几千个文件，人力是多么的渺小和无力。而webpack的出现，帮你实现了不可能，和实现了奇迹。\n\n> 除了webpack，还有一些其他工具，例如 grunt，gulp，browserify\n\n> webpack比其他框架好的地方在于：Tree shaking，懒加载，代码分隔...\n\n> 不会webpack，你也可以写业务代码，但是学习了webpack，可以极大拓展你的视野，让你认识一个不一样的前端\n\n```js\n// ES Module 导出\nexport default {}\n\n// 引入\nimport {} from ...\n```\n\n---\n\n**基本使用**\n\n- 安装webpack: npm i webpack webpack-cli --save-dev\n- npx webpack index.js 就会自动识别 import 这些依赖，然后也会自动压缩到 dist/main.js（这是webpack的自动设置，我记得我之前用的时候还需要自己配置）\n- ❣️ 注意：npx 会找 node_modules 下面的，就会执行了， webpack-cli 的作用是，能让我们在命令行中运行 webpack\n\n---\n\n### 2.webpack是什么？\n\n> 你可以会认为webpack是一个JS的翻译器，错了，webpack其实只认识 import ，还是为了寻求依赖才具有的这个功能，真的JS翻译器是 babel\n\n> **webpack 是一个 模块打包工具（也能识别 CommonJS, CMD, AMD 规范的代码）**\n\n---\n\n### 3.使用webpack的配置文件（输入 && 输出 && mode）\n\n- 安装好了之后，默认 npx webpack index.js 就能进行打包了（webpack 4.x 默认值功能）\n- 新建文件夹：webpack.config.js\n\n```js\nimport path from 'path'\n\nexport default {\n\n    // 环境（默认是production || development是开发环境，不压缩...）\n    mode: 'production',\n\n    // 入口\n    entry: '入口文件' // 等价于：entry: { main: '入口文件' }\n\n    // 出口\n    output: {\n        filename: '输入文件名',\n        path: path.resolve(__dirname, '输入文件夹')\n    },\n\n    // ......\n\n}\n```\n\n- **备注：npx webpack --config 文件名 这个可以让webpack以特定的文件为规则进行打包**\n\n---\n\n## 📕第二部分：loader\n\n### 0.什么是 loader ？\n\n> 因为webpack本身不知道，如何打包除了js之外的东西\n\n> 所以loader就是对于某些特定文件，告诉webpack如何打包的一种方案\n\n> 例如：css文件，Vue文件，图片文件等等\n\n---\n\n### 1.示例 如何打包图片\n\n- webpack刚开始写的时候，是只想做一个JS打包工具，后来才有的打包所有的功能，而除了打包JS之外的功能，其余的功能都需要来进行配置，例如 打包图片，就需要在 module 进行配置\n-  npm i file-loader -D\n\n```js\nconst path = require('path');\n\nmodule.exports = {\n\n  // 环境（默认是production || development是开发环境，不压缩...）\n  mode: 'production',\n\n  // 入口\n  entry: '入口文件',\n\n  // 出口\n  output: {\n      filename: '输入文件名',\n      path: path.resolve(__dirname, '输入文件夹')\n  },\n\n  // 模块规则（打包模块）\n  module: {\n    rules: [\n      {\n        test: /\\.jpg$/,\n        use: {\n          loader: 'file-loader'\n        }\n      }\n    ]\n  }\n\n};\n```\n\n- **❣️ 思考：file-loader 会把文件放到输出文件夹中，然后换个名字，然后返回名称**\n- 我们在Vue中，会有 .vue 的文件，这时候就需要 在 module 中配置 .vue 的 loader 就可以了\n\n\n---\n\n### 2.使用Loader打包静态资源（图片篇）\n\n**file-loader插件**\n\n```js\nmodule.exports = {\n  // 模块规则\n  module: {\n    rules: [\n      {\n        test: /\\.(jpg|png|gif)$/,\n        use: {\n          loader: 'file-loader',\n          options: {\n            // 占位符\n            name: '[name]_[hash].[ext]',\n            outputPath: 'img/' // 打包输出文件夹\n          }\n        }\n      }\n    ]\n  }\n\n}\n```\n\n---\n\n**url-loader**\n\n- **url-loader 能实现所有 file-loader的功能，配置也不用变**\n- 安装：npm i url-loader --save-dev （-D）\n- 不同的地方在于，url-loader 会把你的图片转为 base64 的字符串（但是这样如果图片很大的话，会导致页面JS也很大）\n- 最佳的实践是，如果图片小的话，就用 url-loader 打包，图片很大的话，就打包到文件夹中\n- 将小的图片打包成 base64 省了一次网络请求，提高了性能\n\n```js\nmodule.exports = {\n  // 模块规则\n  module: {\n    rules: [\n      {\n        test: /\\.(jpg|png|gif)$/,\n        use: {\n          loader: 'url-loader',\n          options: {\n            name: '[name].[ext]', // \n            outputPath: 'images/', // 打包输出文件夹\n            limit: 2048 // 如果小于 2kb，就会打包进JS，如果大于就打包到文件夹中\n          }\n        }\n      }\n    ]\n  }\n\n}\n```\n\n---\n\n### 3.使用loader打包静态资源（样式篇）\n\n- npm i css-loader style-loader --save-dev\n- css-loader：会分析几个CSS之间的依赖关系，最后帮我们打包成一个css，也就是说，css里面可以像JS一样，通过CSS进行引用了\n- style-loader：把css-loader生成的CSS内容加载到 HTML 里面的 header 里面\n\n```js\nmodule.exports = {\n\n  // ...\n\n  module: {\n    rules: [\n      // ...\n      {\n        test: '/\\.css$/',\n        use: ['style-loader', 'css-loader']\n      }\n    ]\n  }\n\n}\n```\n\n---\n\n**如果用其他的语法，例如 scss**\n\n- 安装：npm i node-sass sass-loader --save-dev\n\n```js\nmodule.exports = {\n\n  // ...\n\n  module: {\n    rules: [\n      // ...\n      {\n        test: '/\\.scss$/',\n        use: ['style-loader', 'css-loader', 'sass-loader']\n      }\n    ]\n  }\n\n}\n```\n\n**❣️：loader 执行顺序是，从上到下，从右到左的顺序**\n\n---\n\n**加入厂商前缀的loader：postcss-loader**\n\n- npm i postcss-loader --save-dev\n- 需要创建一个 postcss.config.js 文件\n- 下载自动添加前缀的插件：npm i autoprefixer -save-dev\n\n```js\n// postcss.config.js\n\nmodule.exports = {\n  parser: 'sugarss',\n  plugins: {\n    'postcss-import': {},\n    'postcss-cssnext': {},\n    'cssnano': {}\n  }\n}\n\n// 我们也可以这么写\n// 这么写的作用是，当我们使用 postcss-loader 的时候，会使用 autoprefixer 这个插件\nmodule.exports = {\n  plugins: [\n    require('autoprefixer') // 添加厂商前缀\n  ]\n}\n```\n\n```js\nmodule.exports = {\n\n  // ...\n\n  module: {\n    rules: [\n      // ...\n      {\n        test: '/\\.scss$/',\n        use: ['style-loader', 'css-loader', 'sass-loader', 'postcss-loader']\n      }\n    ]\n  }\n\n}\n```\n\n---\n\n**我们在上面处理静态样式文件，写了四个loader，如果我们想给这个文件进行配置呢？例如给 css-loader 进行配置呢？**\n\n\n```js\nmodule.exports = {\n\n  // ...\n\n  module: {\n    rules: [\n      // ...\n      {\n        test: '/\\.scss$/',\n        use: [\n          'style-loader',\n          {\n            loader: 'css-loader',\n            options: {\n              importLoaders: 2, // 这个表示，我们在css中引入的 文件，不管是 css也好还是scss也好，都要先走 postcss-loader, sass-loader 这两个插件\n              modules: true // 开启css模块化打包\n            }\n          },\n          'sass-loader',\n          'postcss-loader'\n        ]\n      }\n    ]\n  }\n\n}\n\n// CSS 开启模块化 使用\nimport style from 'index.scss'\n\nbtn.style = style.red\n```\n\n---\n\n**如何打包字体文件**\n\n- 主要用 file-loader 进行打包，将字体文件放到合适的目录下\n\n```js\nmodule.exports = {\n  // 模块规则\n  module: {\n    rules: [\n      {\n        test: /\\.(eot|ttf|svg)$/,\n        use: {\n          loader: 'file-loader',\n          options: {\n            // 占位符\n            name: '[name]_[hash].[ext]',\n            outputPath: 'font/' // 打包输出文件夹\n          }\n        }\n      }\n    ]\n  }\n}\n```\n\n---\n\n## 📗第三部分：plugins（插件）\n\n### 1.使用 plugins 让打包更便捷\n\n**使用第一个插件：html-webpack-plugin**\n\n- npm i html-webpack-plugin --save-dev\n- 功能：会在打包完成之后，自动生成一个HTML文件，并把打包之后的JS自动引入到这个HTML文件中\n\n```js\n// 先引入，再实例化\nconst HtmlWebpackPlugin = require('html-webpack-plugin');\n\nmodule.exports = {\n  // 先开发模式，等做完了再生产模式\n  mode: 'development',\n  \n  entry: './src/vue.js',\n  \n  output: {\n    path: path.resolve(__dirname, 'dist'),\n    filename: 'vue.js'\n  },\n\n  // 插件\n  plugins: [\n    new HtmlWebpackPlugin({\n      // 配置，index.html 模板，以此为模板进行注入\n      template: './test/index.html'\n    })\n  ]\n\n}\n\n```\n\n---\n\n**🔥 plugin解释**\n\n- plugin可以在webpack运行到某个时刻的时候，帮你做一些事情（有点像Vue的生命周期函数）\n- 例如：html-webpack-plugin 是在打包结束之后，帮我们做一些事情\n\n---\n\n**介绍另一个插件：clean-webpack-plugin**\n\n- 安装：npm i clean-webpack-plugin --save-dev\n\n```js\nconst htmlWebpackPlugin = requiere('html-webpack-plugin ')\nconst cleanWebpackPlugin = require('clean-webpack-plugin')\n\n\nmodule.exports = {\n  // 先开发模式，等做完了再生产模式\n  mode: 'development',\n  \n  entry: './src/vue.js',\n  \n  output: {\n    path: path.resolve(__dirname, 'dist'),\n    filename: 'vue.js'\n  },\n\n  // 插件\n  plugins: [\n    new htmlWebpackPlugin({\n      // 配置，index.html 模板，以此为模板进行注入\n      template: 'src/index.html'\n    }),\n    new cleanWebpackPlugin(['dist'])\n  ]\n\n}\n\n```\n\n---\n\n## 📘第四部分：其他配置\n\n### 1.entry 与 output\n\n```js\n\nmodule.exports = {\n\n  entry: {\n    main: './src/index.js',\n    main1: './src/index.js'\n  },\n  \n  output: {\n    filename: '[name].js',\n    publicPath: 'https://cdn.com.cn', // 配置引入前缀\n    path: path.resolve(__dirname, 'dist')\n  },\n\n  // 会打包成 main.js, main1.js，还有更多，就要查阅官方文档了\n\n}\n\n\n```\n\n---\n\n### 2.SourceMap配置\n\n- 为什么要有这个东西，因为我们打包之后，所有的都在一个JS中，如果发生错误，调试的话，没有办法准确定位到是哪里的问题\n- SourceMap 是一种映射，它知道我们打包之后的文件每一行，是源文件中的哪一行\n- 解决了我们打包之后，还能正确的找到具体代码\n\n```js\n\nmodule.exports = {\n  \n  // 先开发模式，等做完了再生产模式\n  mode: 'development',\n  \n  // 使用这个就可以了，这个devtool 还有很多配置，具体查阅文档\n  devtool: 'cheap-module-eval-source-map',\n\n  entry: './src/vue.js',\n  \n  output: {\n    path: path.resolve(__dirname, 'dist'),\n    filename: 'vue.js'\n  },\n\n  // ...\n}\n```\n\n---\n\n### 3.使用WebpackDevServer提高开发效率\n\n- 我们更改了文件\n- 解决方法一： webpack --watch\n- 解决方法二：webpackDevServer\n- 安装：npm i webpack-dev-server --save-dev\n\n```js\nmodule.exports = {\n  \n  // 启动一个serve\n  devServer: {\n    contentBase: './dist',\n    open: true\n  }, \n\n  // ...\n  \n}\n```\n\n---\n\n### 4.Hot Module Replacement 热模块更新\n\n- 为什么有这个功能呢？\n- 因为当我们启动 webpackDevServe 或者 --watch 之后都会有一个问题，就是一改变文件，就会重新刷新了，我们之前的一系列操作都不行\n- \n\n```js\nconst webpack = require('webpack')\n\nmodule.exports = {\n  // 启动一个serve\n  devServer: {\n    contentBase: './dist',\n    open: true,\n    hot: true,\n    hotOnly: true\n  },\n\n  plugins: [\n    new webpack.HotModuleReplacementPlugin()\n  ]\n\n  // ...\n\n}\n```\n\n\n---\n\n### 5.使用babel处理ES6语法\n\n[babel官网](https://www.babeljs.cn/)\n\n**首选方案一：建立.babelrc 文件**\n\n- 安装：npm i babel-loader @babel/core --save-dev\n  - @babel/core\n  - babel-loader：webpack 与 babel 做通信的桥梁\n- 安装（这种不用我们写额外的代码，就能处理ES6的特性）：\n  - npm i @babel/plugin-transform-runtime --save\n  - npm i @babel/runtime --save\n  - npm i @babel/runtime-corejs2 --save\n\n```js\n// .babelrc\n\n{\n  'plugins': [['@babel/plugin-transform-runtime', {\n    'corejs': '2',\n    'helpers': true,\n    'regenerator': true,\n    'useESModules': false\n  }]]\n}\n```\n\n```js\n// webpack.config.js\n\nmodule.exports = {\n  module: {\n    rules: [\n      {\n        test: '/\\.js$/',\n        exclude: '/node_modules',\n        loader: 'babel-loader'\n      }\n    ]\n  },\n\n  // ...\n}\n```\n\n---\n\n**方案二：使用webpack插件进行配置（配置项比较多）**\n\n- 安装：npm i babel-loader @babel/core --save-dev\n  - @babel/core\n  - babel-loader：webpack 与 babel 做通信的桥梁\n- 安装：npm i @babel/preset-env --save-dev（这个是真正ES6转ES5 语法，但是注意，这里没转规则，例如 Promise就没转）\n- 安装：npm i @babel/polyfill --save （这个就补充了所有的低版本浏览器中没有的一些语法了，使用就是在 .js 上面引入这个）【❌ 了解即可，这个会写额外的代码】\n- 安装（这种不用我们写额外的代码，就能处理ES6的特性）：\n  - npm i @babel/plugin-transform-runtime --save\n  - npm i @babel/runtime --save\n  - npm i @babel/runtime-corejs2 --save\n\n```js\n// ❣️ 我们这里只能转换语法，说白了只能转换 ES6 中的语法糖，转不了 浏览器内置的一些东西，例如 Promise 等等，这就需要 Polyfill\nmodule.exports = {\n\n  module: {\n    rules: [\n      {\n        test: '/\\.js$/',\n        exclude: '/node_modules',\n        loader: 'babel-loader',\n        options: {\n          // 会多写代码，不用这个\n          // presets: [['@babel/preset-env', {\n          //   useBuiltIns: 'usage' // 用到什么就填充什么，而不是所有都填充进来\n          // }]]\n          'plugins': [['@babel/plugin-transform-runtime', {\n            'corejs': '2',\n            'helpers': true,\n            'regenerator': true,\n            'useESModules': false\n          }]]\n        }\n      }\n    ]\n  },\n\n  // ...\n}\n```\n\n---\n\n- 安装：npm i @babel/polyfill --save\n\n---\n\n## 📙第五部分：webpack高级\n\n### 1.Tree Shaking概念\n\n**我引入什么，就让webpack打包什么，（Tree Shaking 只支持ES Module）**\n\n```js\nmodule.exports = {\n\n}\n```\n\n---\n\n## 🗂第六部分：Webpack 实战配置案例讲解\n\n---\n\n## 🗓第七部分：Webpack 底层原理及脚手架工具分析\n\n> Loader 和 Plugin 的区别\n\n> Loader：处理引用的文件，帮助我们处理模块\n> Plugin：打包的过程中，有些时刻你想做一些事情，这个时候是插件生效的时刻\n\n---\n\n### 1.插件的基本书写\n\n- npm i webpack webpack-cli -D\n\n**书写一个基础webpack 配置文件**\n\n```js\n// webpack.config.js\nconst path = require('path')\n\nmodule.exports = {\n  mode: 'development',\n  entry: {\n    main: './src/index.js'\n  },\n  output: {\n    path: path.resolve(__dirname, 'dist'),\n    filename: '[name].js'\n  }\n}\n```\n\n```js\n// /plugins/plugins-test.js\nclass PluginsTest {\n  constructor() {}\n\n  // compiler 这个可以理解成 webpack 实例\n  apply(compiler) {\n\n  }\n}\n\n// 这就表明了，为什么 webpack plugins 都需要 new，因为 插件都是 class\nmodule.exports = PluginsTest\n```\n\n---\n\n> 插件基本写法，没写完\n\n```js\nconst path = require('path')\nconst PluginsTest = require('./plugins/plugins-test.js')\n\nmodule.exports = {\n  mode: 'development',\n  entry: {\n    main: './src/index.js'\n  },\n  output: {\n    path: path.resolve(__dirname, 'dist'),\n    filename: '[name].js'\n  },\n  plugins: [\n    new PluginsTest({\n      name: '朱昆鹏'\n    })\n  ]\n}\n```\n\n```js\nclass PluginsTest {\n  constructor(opt) {\n    console.log('插件被使用了', opt)\n  }\n\n  // compiler 这个可以理解成 webpack 实例\n  apply(compiler) {\n    // hooks 在某一时刻会自动执行的函数\n    // compilation 存放跟这次打包相关的所有内容\n    // 同步使用 tap | 异步使用 tapAsync（异步需要多传一个cb参数，并执行）\n    compiler.hooks.compilation.tap('PluginsTest', (compilation) => {\n      console.log(compilation.assets['main.js'])\n      // cb()\n      compilation.hooks.optimizeChunkAssets.tapAsync('PluginsTest', (chunks, cb) => {\n        // console.log(chunks[0])\n        // wrapChunks(compilation, chunks);\n        cb();\n      })\n    })\n  }\n}\n\nmodule.exports = PluginsTest\n```\n\n---\n\n## 🔥 第八部分：webpack基础配置\n\n见封装的基础webpack配置：[webpack-currency](https://github.com/zhukunpenglinyutong/webpack-currency)\n\n---\n\n## 📚参考列表（致敬）\n\n- [Webpack-Quickly-Starter](https://github.com/pingan8787/Webpack-Quickly-Starter/)"
  },
  {
    "path": "docs/blog/10.前端工程化/3.Cil书写.md",
    "content": "---\ntitle: 3.Cli书写\ndate: 2020-01-30 00:00:00\npermalink: \ntag: \n - blog\n - 10.前端工程化\n---\n\n> 注意此处：内容不全，结构混乱，等待重构...\n\n## 简单CLI示例（下载自己代码方库的的一个Cli）\n\n---\n\n### 1.代码\n\n```js\n#!/usr/bin/env node\n\nlet zkp = `\n       _            \n ____ | | __  _ __ \n|_  / | |/ / | '_ \\\\ \n / /  |   <  | |_) |\n/___| |_|\\\\_\\\\ | .__/ \n             |_|   \n\n朱昆鹏脚手架 v0.0.1\n\nzkp init 下载Git仓库\n`\n\nconst program = require('commander') // 核心命令行工具\nconst Printer = require('@darkobits/lolcatjs') // 字体渐变（美观用，没啥其他用处，花里胡哨）\nconst shelljs = require('shelljs'); // 前端写shell\nconst userHome = require('user-home') // 获取用户的目录，好进行创建文件夹的操作\nconst inquirer = require('inquirer') // 跟用户进行交互\nconst ora = require('ora') // loading模块\nconst download = require('download-git-repo') // 下载Git项目\n\n// 命令集合\nlet binHeader = {\n\n    init () {\n        inquirer\n            .prompt([\n                {\n                    type: 'text',\n                    message: '请输入文件夹',\n                    name: 'dirname'\n                },\n                {\n                    type: 'list',\n                    message: '请选择拉取的模板',\n                    choices: ['Notes', 'Juejin-Plugin', 'Wheel', 'miniVue', 'Koa-api-template'],\n                    name: 'kind'\n                }\n            ]).then( answers => {\n\n                // console.log(answers) // 示例：{ dirname: 'sss', Kind: 'Notes' }\n                let { dirname, kind } = answers\n\n                const spinner = ora('😺 初始化模板')\n                spinner.start()\n\n                let _projectPath = `${userHome}/Desktop/发布一个cli/${dirname}`\n                shelljs.cd(_projectPath)\n                shelljs.mkdir(dirname)\n\n\n                let templateStr = `direct:https://github.com/zhukunpenglinyutong/${kind}`\n                switch (kind) {\n                    case 'Notes': downloadFn(templateStr, _projectPath, spinner); break;\n                    case 'Juejin-Plugin': downloadFn(templateStr, _projectPath, spinner); break;\n                    case 'Wheel': downloadFn(templateStr, _projectPath, spinner); break;\n                    case 'miniVue': downloadFn(templateStr, _projectPath, spinner); break;\n                    case 'Koa-api-template': downloadFn(templateStr, _projectPath, spinner); break;\n                }                \n            })\n    }\n\n}\n\n// 加载函数\nfunction downloadFn(template, _projectPath, spinner) {\n    download(template, _projectPath,{ clone: true }, err => {\n        spinner.stop()\n        if (err) {\n            console.error(`下载出错`, err.message.trim())\n        } else {\n            console.log('下载成功 ✅')\n        }\n    })\n}\n\n\nprogram.version(Printer.default.fromString(zkp), \"-v, --version\")\n// program.command(\"init\", \"初始化我们的项目\") // zkp --help 中会有提示\n\nprogram\n    .usage(\"[cmd] <options>\")\n    .arguments(\"<cmd> [env]\")\n    .action( (cmd, otherParms) => {\n        let header = binHeader[cmd]\n        typeof header === 'undefined' ? process.exit(1) : header()\n    })\n\nprogram.parse(process.argv)\n```\n\n---\n\n### 2.发布到npm上去\n\n"
  },
  {
    "path": "docs/blog/11.前端性能优化/1.前端性能优化基础.md",
    "content": "---\ntitle: 1.前端性能优化基础\ndate: 2020-01-30 00:00:00\npermalink: \ntag: \n - blog\n - 11.前端性能优化\n---\n\n> 等待书写中..."
  },
  {
    "path": "docs/blog/12.前端代码质量/1.前端代码质量绪论.md",
    "content": "---\ntitle: 1.前端代码质量绪论\ndate: 2020-01-30 00:00:00\npermalink: \ntag: \n - blog\n - 12.前端代码质量\n---\n\n# 1.前端代码质量绪论\n\n> 等待书写中...\n\n---\n\n## 📚参考\n\n- 《代码整洁之道》[美]Robert C. Martin\n- 《重构 改善既有代码的设计》[美]Martin Fowler"
  },
  {
    "path": "docs/blog/12.前端代码质量/2.ESLint.md",
    "content": "---\ntitle: 2.ESLint\ndate: 2020-01-30 00:00:00\npermalink: \ntag: \n - blog\n - 12.前端代码质量\n---\n\n> 等待书写中..."
  },
  {
    "path": "docs/blog/12.前端代码质量/3.前端测试框架Jest.md",
    "content": "---\ntitle: 3.前端测试框架Jest\ndate: 2020-01-30 00:00:00\npermalink: \ntag: \n - blog\n - 12.前端代码质量\n---\n\n> 注意此处：内容不全，结构混乱，等待重构...\n\n> 一般情况写单元测试的时间，是业务时间的二倍\n\n---\n\n## 简介\n\n### 为什么要有测试\n\n- 更新功能时，不会破坏原有逻辑\n- 迭代时，不方便阅读别人的代码\n\n---\n\n## ⛄️第一部分：Jest基础\n\n### 1.在没有测试框架的时代，我们写一个简单的测试\n\n```js\n// 书写一个简单的测试方法\nfunction test (str, fn) {\n    console.log(`%c+++ ${str} +++`, \"color:blue\")\n    fn()\n}\n\nfunction expect (result) {\n    return {\n        toBe: function (lookRes) {\n            if (result !== lookRes) {\n                console.log(`%c验证不通过：预期结果是：${lookRes}, 真实结果是：${result}`, \"color:red\")\n            } else {\n                console.log('%c测试通过', \"color:green\")\n            }\n        }\n    }\n}\n\n\n// 需要测试的代码 \nfunction add (a, b) {\n    return a + b\n}\n\n\n// 测试用例\ntest('测试加法', () => {\n    \n    expect(add(1,2)).toBe(3)\n    expect(add(1,2)).toBe(1)\n    expect(add(1,)).toBe(1)\n    expect(add(1,'')).toBe(1)\n    expect(add()).toBe()\n\n})\n\n```\n\n**效果展示**\n\n<img src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/2.notes/8.4%E5%89%8D%E7%AB%AF%E4%BB%A3%E7%A0%81%E8%B4%A8%E9%87%8F/5.%E5%89%8D%E7%AB%AF%E6%B5%8B%E8%AF%95%E6%A1%86%E6%9E%B6Jest/1.%E6%B2%A1%E6%9C%89%E6%B5%8B%E8%AF%95%E6%A1%86%E6%9E%B6%E7%9A%84%E6%97%B6%E5%80%99%E5%A6%82%E4%BD%95%E5%AE%9E%E7%8E%B0%E6%B5%8B%E8%AF%95.png\" />\n\n---\n\n### 2.Jest的简单配置\n\n**基础安装，运行**\n\n- 安装：npm i jest -D\n- 使用的时候，必须要用 模块化（就是要导出，导入，可以使用 commn.js 规范 或者 es module 格式）\n- Jest主要做 集成测试，和单元测试\n- 我们使用模块化的语法，我们浏览器正常就无法访问了，这时候就需要和 webpack 就行配合了，这就是一整个的工程流\n- 运行测试 npx test\n\n---\n\n**简单配置**\n\n- npx jest --init 初始化项目\n- 配置完成之后 会多一个 jest.config.js\n\n```js\n// For a detailed explanation regarding each configuration property, visit:\n// https://jestjs.io/docs/en/configuration.html\n\nmodule.exports = {\n  // All imported modules in your tests should be mocked automatically\n  // automock: false,\n\n  // Stop running tests after `n` failures\n  // bail: 0,\n\n  // Respect \"browser\" field in package.json when resolving modules\n  // browser: false,\n\n  // The directory where Jest should store its cached dependency information\n  // cacheDirectory: \"/private/var/folders/4h/ykg022694sn1pw91fxq30xwc0000gn/T/jest_dx\",\n\n  // Automatically clear mock calls and instances between every test\n  // clearMocks: false,\n\n  // Indicates whether the coverage information should be collected while executing the test\n  // collectCoverage: false,\n\n  // An array of glob patterns indicating a set of files for which coverage information should be collected\n  // collectCoverageFrom: null,\n\n  // The directory where Jest should output its coverage files\n  // coverageDirectory: null,\n\n  // An array of regexp pattern strings used to skip coverage collection\n  // coveragePathIgnorePatterns: [\n  //   \"/node_modules/\"\n  // ],\n\n  // A list of reporter names that Jest uses when writing coverage reports\n  // coverageReporters: [\n  //   \"json\",\n  //   \"text\",\n  //   \"lcov\",\n  //   \"clover\"\n  // ],\n\n  // An object that configures minimum threshold enforcement for coverage results\n  // coverageThreshold: null,\n\n  // A path to a custom dependency extractor\n  // dependencyExtractor: null,\n\n  // Make calling deprecated APIs throw helpful error messages\n  // errorOnDeprecated: false,\n\n  // Force coverage collection from ignored files using an array of glob patterns\n  // forceCoverageMatch: [],\n\n  // A path to a module which exports an async function that is triggered once before all test suites\n  // globalSetup: null,\n\n  // A path to a module which exports an async function that is triggered once after all test suites\n  // globalTeardown: null,\n\n  // A set of global variables that need to be available in all test environments\n  // globals: {},\n\n  // An array of directory names to be searched recursively up from the requiring module's location\n  // moduleDirectories: [\n  //   \"node_modules\"\n  // ],\n\n  // An array of file extensions your modules use\n  // moduleFileExtensions: [\n  //   \"js\",\n  //   \"json\",\n  //   \"jsx\",\n  //   \"ts\",\n  //   \"tsx\",\n  //   \"node\"\n  // ],\n\n  // A map from regular expressions to module names that allow to stub out resources with a single module\n  // moduleNameMapper: {},\n\n  // An array of regexp pattern strings, matched against all module paths before considered 'visible' to the module loader\n  // modulePathIgnorePatterns: [],\n\n  // Activates notifications for test results\n  // notify: false,\n\n  // An enum that specifies notification mode. Requires { notify: true }\n  // notifyMode: \"failure-change\",\n\n  // A preset that is used as a base for Jest's configuration\n  // preset: null,\n\n  // Run tests from one or more projects\n  // projects: null,\n\n  // Use this configuration option to add custom reporters to Jest\n  // reporters: undefined,\n\n  // Automatically reset mock state between every test\n  // resetMocks: false,\n\n  // Reset the module registry before running each individual test\n  // resetModules: false,\n\n  // A path to a custom resolver\n  // resolver: null,\n\n  // Automatically restore mock state between every test\n  // restoreMocks: false,\n\n  // The root directory that Jest should scan for tests and modules within\n  // rootDir: null,\n\n  // A list of paths to directories that Jest should use to search for files in\n  // roots: [\n  //   \"<rootDir>\"\n  // ],\n\n  // Allows you to use a custom runner instead of Jest's default test runner\n  // runner: \"jest-runner\",\n\n  // The paths to modules that run some code to configure or set up the testing environment before each test\n  // setupFiles: [],\n\n  // A list of paths to modules that run some code to configure or set up the testing framework before each test\n  // setupFilesAfterEnv: [],\n\n  // A list of paths to snapshot serializer modules Jest should use for snapshot testing\n  // snapshotSerializers: [],\n\n  // The test environment that will be used for testing\n  testEnvironment: \"node\",\n\n  // Options that will be passed to the testEnvironment\n  // testEnvironmentOptions: {},\n\n  // Adds a location field to test results\n  // testLocationInResults: false,\n\n  // The glob patterns Jest uses to detect test files\n  // testMatch: [\n  //   \"**/__tests__/**/*.[jt]s?(x)\",\n  //   \"**/?(*.)+(spec|test).[tj]s?(x)\"\n  // ],\n\n  // An array of regexp pattern strings that are matched against all test paths, matched tests are skipped\n  // testPathIgnorePatterns: [\n  //   \"/node_modules/\"\n  // ],\n\n  // The regexp pattern or array of patterns that Jest uses to detect test files\n  // testRegex: [],\n\n  // This option allows the use of a custom results processor\n  // testResultsProcessor: null,\n\n  // This option allows use of a custom test runner\n  // testRunner: \"jasmine2\",\n\n  // This option sets the URL for the jsdom environment. It is reflected in properties such as location.href\n  // testURL: \"http://localhost\",\n\n  // Setting this value to \"fake\" allows the use of fake timers for functions such as \"setTimeout\"\n  // timers: \"real\",\n\n  // A map from regular expressions to paths to transformers\n  // transform: null,\n\n  // An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation\n  // transformIgnorePatterns: [\n  //   \"/node_modules/\"\n  // ],\n\n  // An array of regexp pattern strings that are matched against all modules before the module loader will automatically return a mock for them\n  // unmockedModulePathPatterns: undefined,\n\n  // Indicates whether each individual test should be reported during the run\n  // verbose: null,\n\n  // An array of regexp patterns that are matched against all source file paths before re-running tests in watch mode\n  // watchPathIgnorePatterns: [],\n\n  // Whether to use watchman for file crawling\n  // watchman: true,\n};\n\n```\n\n---\n\n**使用 ES Module 方式进行测试**\n\n- 安装：npm i @babel/core @babel/preset-env -D\n- 新建文件夹：.babelrc || babel.config.js\n\n```js\n// babel.config.js\nmodule.exports = {\n  presets: [\n    [\n      '@babel/preset-env',\n      {\n        targets: {\n          node: 'current',\n        },\n      },\n    ],\n  ],\n};\n```\n\n**❣️ 为什么jest 可以通过上面的设置就能使用 ESM 了？主要是 Jest内置了 babel-jest，运行测试之前，会先读取 .babelrc 或者 babel.config.js ，然后先转换，然后再测试**\n\n---\n\n### 3.Jest中的适配器\n\n- 什么是适配器，就是我们期待什么，去匹配什么，放到语法上就是, toBe 就是一个 匹配器\n- expect(add(1,2)).toBe(3)\n\n```js\n\n// ========== 和真假相关的匹配器 ===========\n\nexpect(1).toBe(1) // 通过：有点类似于 === \n\nexpect({ name: '朱昆鹏' }).toEqual({ name: '朱昆鹏' }) // 通过：匹配内容相等\n\nexpect(null).toBeNull() // 通过：匹配是否是 null\n\nexpect(undefined).toBeUndefined() // 通过：匹配是否是 undefined\n\nexpect(true).toBetruthy() // 通过：匹配 是否为真，填 1 也行\n\nexpect(0).toBeFalsy() // 通过：匹配是否为假，填 false 也行\n\nexpect(0).not.toBeFalsy() // 不通过：可以通过 not 进行取反\n\n// ...\n\n\n// ========== 和数字相关的匹配器 ===========\n\nexpect(10).toBeGreaterThan(9) // 通过，匹配的是 10 是否 比 9 大\n\nexpect(10).toBeLessThan(11) // 通过，匹配的是 10 是否 比 11 小\n\nexpect(10).toBeGreaterThanOrEqual(10) // 通过，匹配的是 10 是否 大于等于 10\n\nexpect(11).toBeLessThanOrEqual(11) // 通过，匹配的是 11 是否小于等于 11\n\nexpect(0.1 + 0.2).toBeCloseTo(0.3) // 通过，判断小数是否相同，直接比较的话会有精度缺失的问题，比较不了\n\n// ...\n\n\n// ========= 和字符串相关的匹配器 ===========\n\nexpect('朱昆鹏').toMatch('昆鹏') // 通过，匹配的是 '朱昆鹏' 中是否有 '昆鹏' 字符 | 还可以写正则表达式\n\n// ...\n\n\n// ========= 和数组相关的匹配器 ===========\n\nexpect([1,2,3]).toContain(2) // 通过，匹配的是 数组中 是否包含 2 这一项，也可以判断 Set, Map 这种类型的\n\n// ...\n\n\n// ========= 和异常相关的匹配器 ===========\n\nexpect(throw new Error('出现错误')).toThrow() // 通过，匹配的是 是否出现异常\n\n// ...\n\n\n```\n\n---\n\n## 💦第二部分：Jest中的日常使用\n\n---\n\n### 1.jewst --watchAll 命令行介绍\n\n- w 按下w键，调出面板\n- f 按下f键，就会跑上次没有通过的测试，再次点击f退出这种模式\n- o 按下o键，会跑和当前被改变相关文件的测试，也就是只测试一个文件（这个需要依赖Git）(jest --watch 默认就是进入o模式) 🔥\n- t 根据一个正则表达式来确定哪些测试用例被执行\n- p ...\n- ...\n\n---\n\n### 2.Jest中对DOM节点操作进行测试\n\n- 依据：jest 在 node 环境下自己模拟了一套 DOM 的API（jsdom）\n- 其余的和浏览器操作DOM基本一致\n\n```js\n// 具有 document：document.body \n```\n\n---\n\n### 3.异步代码的测试（done）\n\n**第一种方式：回调 done**\n\n```js\n// asyncFn.js\nexport const asyncFn = (fn) => {\n\n    setTimeout(() => {\n        fn(100)\n    }, 1000);\n\n}\n\n// \n// asyncFn.test.js\nimport { asyncFn } from './asyncFn.js'\n\n// test suite\ntest('测试异步代码 asyncFn', (done) => {\n    asyncFn( (data) => {\n        expect(data).toBe(100)\n        done() // 这个才表示测试完成\n    })\n})\n\n```\n\n**❣️ async/await语法也可以在 Jest异步中使用**\n\n---\n\n### 4.Jest中的钩子函数\n\n```js\n\n// 在所有测试用例，执行之前调用\nbeforeAll( () => {\n\n})\n\n// 每个测试用例执行之前，都会执行一遍这个函数 \nbeforeEach( () => {\n\n})\n\n// 每个测试用例执行之后，都会执行一遍这个函数\nafterEach( () => {\n\n})\n\n// 所有测试用例执行完成之后，执行 \nafterAll( () => {\n\n})\n\n\n// 🔥 这个相当于分组了，test测试用例\ndescribe('测试某某功能块', () => {\n\n  test('功能点一', () => {\n\n  })\n\n  test('功能点二', () => {\n    \n  })\n\n  test('功能点三', () => {\n    \n  })\n})\n\n```\n\n\n---\n\n**钩子函数的作用域**\n\n- 在每一个 descirbe 中都可以写 钩子函数，对其内部的 test 有效\n- 而这就是一个作用域的概念\n- 拓展：test.only() 就可以只执行这个一个测试用例，而禁止执行其他的测试用例（我感觉测试的时候可能 用到）\n\n---\n\n### 5.Jest中的 Mock（很好，但是还需要再实际应用中体会）\n\n- 痛点：我们有一个函数，传递一个函数作为参数，并且会执行，我们怎么测试，这个函数传递的参数，被执行了？\n\n```js\n// mockFn.js\nexport const mockFn = (fn) => {\n    fn()\n}\n\n// mockFn.test.js\nimport { mockFn } from './math'\n\ntest('测试函数是否被执行', () => {\n\n    let func = jest.fn(); // mock 函数，捕获函数的调用\n    mockFn(func)\n    \n    expect(func).toBeCalled() // 是否被执行\n    \n    console.log(func.mock) // 所有的数据,打印我们可以知道，我们能判断的还有很多\n\n    expect(func.mock.calls.length).toBe(1) // 函数是否被调用了一次\n\n    // 还能设置参数和返回值\n    // 设置参数\n    func.mockReturnVaue('返回值') // 设置返回值\n\n    // \n    func.mock.results // 返回值列表\n})\n\n```\n\n---\n\n\n## 第三部分："
  },
  {
    "path": "docs/blog/12.前端代码质量/4.自动化测试.md",
    "content": "---\ntitle: 4.自动化测试\ndate: 2020-01-30 00:00:00\npermalink: \ntag: \n - blog\n - 12.前端代码质量\n---\n\n> 注意：此篇文章未来可能要和其他文章进行合并，或者重构... 目前结构混乱，无法阅读\n\n---\n\n## 一.概述\n\n- 我之前也学过好几次测试，单公司不用，自己又没找到必须要用的感觉，就不用了，直到最近（2019.8.13），看到一本书（重构xxx），才深刻的意识到，软件代码如果一直不更改，不优化，就会越来越差，后期根本动不了\n- 而要是不断的修改代码，如何保证项目的正常运行，这个时候就需要测试了，我们身处一个好的环境，什么都唾手可得，所以我们可以使用自动化测试来保证我们重构之后的代码没有问题\n- 重构就是在不改变软件外部行为的情况下，不断优化代码的行为，而TDD（测试驱动开发）就保证了 我们重构的时候 不改变软件的外部行为\n\n---\n\n## 二.自动化测试\n\n### 1.测试工具类型\n\n<img src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/2.notes/8.4%E5%89%8D%E7%AB%AF%E4%BB%A3%E7%A0%81%E8%B4%A8%E9%87%8F/3.%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/1.%E6%B5%8B%E8%AF%95%E6%A1%86%E6%9E%B6%E5%88%86%E7%B1%BB.png\" />\n\n---\n\n### 2.单元测试工具对比\n\n**按照npm下载排名来排列 ---> npm trends**\n\n- jest\n- mocha + chai \n- jasmine\n- ava\n\n\n---\n\n### 3.e2e测试工具对比\n\n**按照npm下载排名来排列**\n\n- cypress\n- webdriverio\n- nightwatch\n- nightmare\n- testcafe\n\n\n---\n\n## 三.单元测试Jest\n\n### 1.Jest简介\n\n- 支持 babel, webpack, Typescript\n\n---\n\n### 2.Jest安装和babel支持\n\n- npm install --save-dev jest\n- npm i --dev babel-jest @babel/core @babel/preset-env\n\n```js\n// babel.config.js\nmodule.exports = {\n  presets: [\n    [\n      '@babel/preset-env',\n      {\n        targets: {\n          node: 'current',\n        },\n      },\n    ],\n  ],\n};\n```\n\n---\n\n### 3.第一个Jest测试用例\n\n**文件（根据测试用例修改之后的代码）**\n\n```js\nexport const add = (a = 0, b = 0) => {\n\n    if (typeof a !== 'number') {\n        a = 0\n    }\n\n    if (typeof b !== 'number') {\n        b = 0\n    }\n\n    return a + b\n}\n```\n\n**测试代码**\n\n```js\n// 引入待测试的功能模块\nimport { add } from './math'\n\n// test suite\ndescribe('测试 math.js 功能模块', () => {\n    \n    it ('等于加法函数是否正常', () => {\n        expect(add(1,2)).toEqual(3)\n        expect(add(1,-2)).toEqual(-1)\n        expect(add(1, )).toEqual(1)\n        expect(add(1,'')).toEqual(1)\n        expect(add('你好',)).toEqual(0)\n    })\n\n})\n\n```\n\n\n---\n\n### 4.杀手锏功能 Mock & Spy（没懂，来日再说吧）\n\n- Mock测试就是在测试过程中，对于某些不容易构造或者不容易获取的对象，用一个虚拟的对象来创建，以便测试的一种方法\n\n---\n\n### 5.jest cli 功能\n\n- jest --coverage 生成测试覆盖率\n- jest --verbose 详细打印\n- jest --watchAll 启动监听,执行所有测试用例（我们可以选择）\n- ...\n\n--- \n\n### 6.Vue-Cli快速创建单元\n\n\n---\n\n## TravisCI\n\n### 1.使用简介\n\n> TravisCI 只支持GitHub，不支持其他代码托管服务\n\n**使用步骤**\n\n- [进入到官方网站](http://travis-ci.org/)，并使用GitHub授权\n- 获取GitHub的Tokens\n- 配置项目 .taravis.yml\n  - Node项目\n  - Script脚本\n  - 部署到 github pages\n  - 钩子\n- 其他\n\n---\n\n## CircleCI\n\n"
  },
  {
    "path": "docs/blog/12.前端代码质量/5.项目质量监测.md",
    "content": "---\ntitle: 5.项目质量监测\ndate: 2020-01-30 00:00:00\npermalink: \ntag: \n - blog\n - 12.前端代码质量\n---\n\n> 注意：此篇文章未来可能要和其他文章进行合并，或者重构... 目前结构混乱，无法阅读\n\n### 简介\n\n**🔥通常来说，项目的质量决定了 软件项目的命运，软件项目的可维护性，软件项目的运维成本，软件项目的拓展性**\n\n**为什么要进行代码检查**\n\n- 避免低级BUG\n- 统一代码习惯\n- 保证线上代码质量\n\n**如何让一个团队的人产出的代码都在一个基本水平底线之上呢?**\n\n最初是靠制订规范。要确保规范得以执行只能靠人，所以文字规范成了code review的公共参照标准。单纯靠人的事最终都容易流于形式，\n\n🔥所以需要工具加以保证。虽说工具并不能完全实现规范中的规则，但至少能够在一定程度 上缓解代码不统一一的局面\n\n\n**从哪几个方面可以让项目质量有所提高呢？**\n\n- 代码Lint：告别低级错误，简单的配置让程序来自动检查\n- e2e test：e2e测试，黑盒测试，如何用e2e进行端到端的测试\n- 开源测试平台：codecov介绍（配合CI工具，让测试过程自动化）\n\n---\n\n### 2.日常写代码中遇到的问题\n\n**代码风格**\n\n**代码规范**\n\n这里使用 Typescript 能提高代码质量\n\n**设计思路**\n\n有的人写的程序就是高度耦合的，几十个函数，很难调用，没办法维护，这就和思路有关系了，要设计一些设计模式，设计一些模块化的东西，来规避这点\n\n---\n\n### 3.代码质量检测 Lint\n\n**Lint：是一款分析源码以及标记编程过程中（代码，样式，构建）书写的错误的工具**\n\n常见的3个JS检测工具对比\n\n- JSLint（2012年出现）：\n    - 优点：参数配置完成，可以直接使用\n    - 缺点：有限的配置选项，不能增加个性化的规则等等\n- JSHint\n    - 优点：可配置，可以写配置文件\n    - 缺点：难于知道那个规则产生的错误，不能自定义规则等等\n- 🔥ESLint（比较新的工具，JSCS已经合并到ESLint）\n    - 优点：高度可配置\n    - 缺点：需要一些配置，速度慢\n\n---\n\n### 4.Lint工具介绍（4个核心概念）\n\n**核心是配置文件，规则是写到里面的：.eslintrc.js**\n\n**常见规则**\n\n- off && 0：关闭规则\n- warn && 1：开启规则，使用警告级别错误（不会导致程序退出）\n- error && 2：开启规则，使用错误级别错误（程序会退出）\n\n```js\n// 例如\n{\n    \"rules\": {\n        \"semi\": [\"error\", \"never\"]\n    }\n}\n```\n\n**Extends：使用别人的包（使用别人的规则）**\n\n```js\n{\n    \"extends\": \"google\"\n}\n```\n\n**🔥Plugins：插件系统**\n\n我们有时候可能有一些特殊的应用场景，例如Vue的语法，例如less，sass等这些的语法，可能 使用别人的包里面也没有这些配置，我们就需要自己配置了（针对特定的语法结构进行Lint）\n\n---\n\n### 5.ESLint初始化\n\n- 安排：npm install eslint --save-dev\n- 使用\n\n```js\n// \n\"scripts\": {\n  \"lint\": \"eslint app.js\",\n  \"lint:create\": \"eslint --init\",\n},\n```\n\n**使用 eslint --init创建一个ESLint配置文件**\n\n- 第一个问题：检查代码规范 | 🔥检查代码规范并查找一些问题 | 强制使用某些规范\n- 第二个问题（你使用哪种模块方式）：🔥ESM | COM | 不使用\n- 第三个问题（选择常见的框架）\n- 第四个问题（你的代码会在哪里运行）：🔥浏览器 | 🔥Node\n- 第五个问题（你想把这些配置放到什么文件中）\n\n```js\nmodule.exports = {\n    \"env\": { // 运行环境\n        \"browser\": true,\n        \"es6\": true,\n        \"node\": true\n    },\n    \"extends\": \"eslint:recommended\", // 拓展规则\n    \"globals\": { // 执行代码时脚本需要访问额外全局变量\n        \"Atomics\": \"readonly\",\n        \"SharedArrayBuffer\": \"readonly\"\n    },\n    \"parserOptions\": { // 用于指定想要支持的JS语言\n        \"ecmaVersion\": 2018,\n        \"sourceType\": \"module\"\n    },\n    \"rules\": { // 开启某些规则，设置规则登记\n    }\n};\n```\n\n**❣️注意，有时候也要写另一个文件.eslintignore，用于告诉ESLint忽略某些文件或者目录**\n\n\n---\n\n\n> "
  },
  {
    "path": "docs/blog/12.前端代码质量/6.如何写一个不错的代码.md",
    "content": "---\ntitle: 6.如何写一个不错的代码\ndate: 2020-01-30 00:00:00\npermalink: \ntag: \n - blog\n - 12.前端代码质量\n---\n\n> 注意：此文章位置未来可能会变化，因为未来 8.4前端代码质量 可能会进行合并重组\n\n> 在我的认知了，好的代码不在于用了多么高级的算法，多么深奥的设计模式\n\n> 而是在于 方便清晰的去写代码，并在此过程中逐渐优化“套路”，也是为了更好的拓展和维护（因为自己代码如何瞎写的话，回过头维护是看不懂的）\n\n> 目前总结的是\n\n---\n\n## 第一部分：代码书写技巧\n\n### 1.命名\n\n> 我这块命名不说啥，我想说一下 函数的后缀命名法，规则就是，将函数分为不同性质，加上后缀，以后非常的好找和区分\n\n> 正常流程函数：正常流程的函数，没法解释，除了下面几种之外的函数吧 | Fn\n\n> 事件触发函数：因为事件触发调用的函数 | Event\n\n> 接口类函数：请求数据接口的（可能有时候会调用工具类函数来洗一遍） | Api\n\n> 工具类函数：处理一些非核心逻辑的处理函数 | Tool\n\n```js\n// 初始化代码\nfunction initFn() {\n  initStateFn()\n\n}\n// 初始化状态\nfunction initStateFn() {\n  let name = '朱昆鹏';\n}\n\n// 点击事件\nfunction clickButtonEvent() {\n  console.log('点击按钮获取女朋友')\n}\n\n// 请求女朋友 接口\nfunction getGirlFriendApi() {\n  console.log('请求上帝赐个女朋友')\n}\n\n// 数据处理函数 \nfunction dataHandleTool() {\n  console.log('上帝没有给你女朋友，你在处理函数里面自己加一个吧...')\n}\n```\n\n---\n\n### 2.注释\n\n关键变量要注释是干什么的，函数要解释这个函数是干什么用的，别吝啬注释\n\n---\n\n### 3.函数\n"
  },
  {
    "path": "docs/blog/13. 前端安全/1.前端安全绪论.md",
    "content": "---\ntitle: 1.前端安全绪论\ndate: 2020-01-30 00:00:00\npermalink: \ntag: \n - blog\n - 13. 前端安全\n---\n\n> 等待书写中..."
  },
  {
    "path": "docs/blog/13. 前端安全/2.前端基本防护.md",
    "content": "---\ntitle: 2.前端基本防护\ndate: 2020-01-30 00:00:00\npermalink: \ntag: \n - blog\n - 13. 前端安全\n---\n\n> web安全很重要，因为浏览器能做的事情越来越多了，而传统的攻击手段因为经过了很长的时间，所以黑客们也就越来越难攻克，但是黑客如果可以通过网站，攻克你的浏览器，也就能获取到你的root权限，然后控制你的整个电脑，所以web安全很重要，我这里讲到是比较浅的网站级别防护\n\n## 🍏第一种：SQL注入\n\n### 1.SQL注入基础防护\n\n在服务端进行防范的，很多服务器的框架都已经防范的很好了\n\n例如前端可以向后端提交表单数据，这个非常的常见，但是如果用户恶意的在表单中填写sql代码，例如\n\n```js\n\n';select * from 某某表'\n\n后台一般都是拼接字符串，进行数据库的执行，遇到上面的这个，代码一拼接，遇到 ';' ，就会执行后面的，这就很危险了，也就是说用户可以恶意的删除你的数据库\n\n现在一般的框架都有转义的功能，将敏感的语句进行转义，防止对服务器进行伤害，这个问题一般都不算是大的问题了，服务器都会进行防护的\n\n```\n\n---\n\n## 🍐第二种：XSS\n\n**如果了解前端和后端是如何做的，你就能很清晰的看到XSS的产生原因了**\n\n### 1.XSS简介\n\nXSS（跨站脚本攻击 Cross-Site Script）是一种通过往网页里注入恶意脚本代码，然后用户访问到网页，肯定也就把恶意脚本代码下载下来了，这时候黑客通过恶意脚本，获取和控制用户的信息\n\n根据上面的意思，我们可以感觉到 XSS 是一种注入性攻击手段，而根据注入的不同，我们可以细分为 三种，分别是\n\n- 反射型（非持久性型）XSS\n- 存储型（持久型）XSS\n- DOM-Based型 XSS\n\n---\n\n### 2.反射性（非持久型）XSS\n\n诱导用户点击恶意链接来造成一次性攻击（原理是在链接上执行JS代码）\n\n```js\n// 示例\nhttps://xxx.xxx/<script>alert(1)</script>\n```\n\n**❣️ 产生原因： 服务器直接获取请求参数，并直接使用，这个是导致产生这个的主要原因，和SQL注入很类似**\n\n**🔥 防范：对敏感词汇进行转义**\n\n---\n\n### 3.存储型（持久型）XSS\n\n将恶意代码存储到漏洞服务器中，用户浏览相关页面时候就会被攻击（恶意代码执行）\n\n经常发生在评论这种场景下\n\n```js\n// 例如注入 console.log(document.cookie)\n```\n\n**❣️ 产生原因：还是服务器端没有处理用户提交的信息，就直接使用，导致产生了问题**\n\n**🔥 防范：对用户提交的内容，敏感部分进行转义**\n\n---\n\n### 4.DOM-Based型 XSS\n\n基于浏览器 DOM解析的 攻击方式（不需要后端参与）\n\n常见的触发场景：需要 innerHtml ,outHtml, document.write 改变的时候，可能会受到 DOM-Based型 XSS 攻击\n\n一般可以查看JS代码，看看有没有使用 innerHTML 等等方法，来看是否可以进行攻击\n\n```js\n\n// 一种攻击代码: 借助 img标签，不写 src 报错的机制，执行 onerror 事件中的代码，从而发动XSS攻击\n<img src=\"\" onerror=\"插入代码\"></img>\n\n```\n\n---\n\n### 5.XSS payload 和 危害\n\nXSS的攻击方式有很多种，能发起XSS攻击的，我们称之为 XSS payload\n\nXSS payload 的危害有\n\n- 获取cookie\n- 获取其他信息\n- 伪造请求\n- XSS 钓鱼（XSS + 钓鱼网站）\n\n---\n\n### 6.XSS防御 - httpOnly\n\n给 cookie 设置 httpOnly ，可以防止客户端脚本获取cookie\n\n```js\ndocument.cookie // '' 如果设置了，就会拿不到\n```\n\n缺点就是：自己也不能获取cookie了，不能从根本上解决XSS\n\n**❣️ 服务端如何设置：只需要在返回头中设置 Set-Cookie: 正常的cookie键值对;httponly**\n\n---\n\n### 7.XSS防御 - 输入检查\n\n原则：永远不相信用户的输入\n\n- 前端：某些场景，做输入格式判断（白名单）和 进行转义（黑名单）\n- 后端：转义敏感词汇\n\n**前端和后端都要进行 输入检查**\n\n---\n\n### 8.XSS防御 - 输出检查\n\n根据不同的场景对数据进行处理\n\n根据输出场景不同进行分类\n\n- HTML标签中（HTML执行环境）\n- HTML属性中（HTML执行环境）\n- script标签中（JS解析环境）\n- 事件属性中（JS解析环境）\n- URL中（URL解析环境）\n\n```js\n\n// 转义HTML特殊字符\nfunction HtmlEncode(str) {\n    var hex = new Array('0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f');\n    var preescape = str;\n    var escaped = \"\";\n    for(var i = 0; i < preescape.length; i++){\n        var p = preescape.charAt(i);\n        escaped = escaped + escapeCharx(p);\n    }\n    \n    return escaped;\n                    \n    function escapeCharx(original){\n        var found=true;\n        var thechar=original.charCodeAt(0);\n        switch(thechar) {\n            case 10: return \"<br/>\"; break; //newline\n            case 32: return \"&nbsp;\"; break; //space\n            case 34:return \"&quot;\"; break; //\"\n            case 38:return \"&amp;\"; break; //&\n            case 39:return \"&#x27;\"; break; //'\n            case 47:return \"&#x2F;\"; break; // /\n            case 60:return \"&lt;\"; break; //<\n            case 62:return \"&gt;\"; break; //>\n            case 198:return \"&AElig;\"; break;\n            case 193:return \"&Aacute;\"; break;\n            case 194:return \"&Acirc;\"; break; \n            case 192:return \"&Agrave;\"; break; \n            case 197:return \"&Aring;\"; break; \n            case 195:return \"&Atilde;\"; break; \n            case 196:return \"&Auml;\"; break; \n            case 199:return \"&Ccedil;\"; break; \n            case 208:return \"&ETH;\"; break;\n            case 201:return \"&Eacute;\"; break; \n            case 202:return \"&Ecirc;\"; break; \n            case 200:return \"&Egrave;\"; break; \n            case 203:return \"&Euml;\"; break;\n            case 205:return \"&Iacute;\"; break;\n            case 206:return \"&Icirc;\"; break; \n            case 204:return \"&Igrave;\"; break; \n            case 207:return \"&Iuml;\"; break;\n            case 209:return \"&Ntilde;\"; break; \n            case 211:return \"&Oacute;\"; break;\n            case 212:return \"&Ocirc;\"; break; \n            case 210:return \"&Ograve;\"; break; \n            case 216:return \"&Oslash;\"; break; \n            case 213:return \"&Otilde;\"; break; \n            case 214:return \"&Ouml;\"; break;\n            case 222:return \"&THORN;\"; break; \n            case 218:return \"&Uacute;\"; break; \n            case 219:return \"&Ucirc;\"; break; \n            case 217:return \"&Ugrave;\"; break; \n            case 220:return \"&Uuml;\"; break; \n            case 221:return \"&Yacute;\"; break;\n            case 225:return \"&aacute;\"; break; \n            case 226:return \"&acirc;\"; break; \n            case 230:return \"&aelig;\"; break; \n            case 224:return \"&agrave;\"; break; \n            case 229:return \"&aring;\"; break; \n            case 227:return \"&atilde;\"; break; \n            case 228:return \"&auml;\"; break; \n            case 231:return \"&ccedil;\"; break; \n            case 233:return \"&eacute;\"; break;\n            case 234:return \"&ecirc;\"; break; \n            case 232:return \"&egrave;\"; break; \n            case 240:return \"&eth;\"; break; \n            case 235:return \"&euml;\"; break; \n            case 237:return \"&iacute;\"; break; \n            case 238:return \"&icirc;\"; break; \n            case 236:return \"&igrave;\"; break; \n            case 239:return \"&iuml;\"; break; \n            case 241:return \"&ntilde;\"; break; \n            case 243:return \"&oacute;\"; break;\n            case 244:return \"&ocirc;\"; break; \n            case 242:return \"&ograve;\"; break; \n            case 248:return \"&oslash;\"; break; \n            case 245:return \"&otilde;\"; break;\n            case 246:return \"&ouml;\"; break; \n            case 223:return \"&szlig;\"; break; \n            case 254:return \"&thorn;\"; break; \n            case 250:return \"&uacute;\"; break; \n            case 251:return \"&ucirc;\"; break; \n            case 249:return \"&ugrave;\"; break; \n            case 252:return \"&uuml;\"; break; \n            case 253:return \"&yacute;\"; break; \n            case 255:return \"&yuml;\"; break;\n            case 162:return \"&cent;\"; break; \n            case '\\r': break;\n            default:\n                found=false;\n                break;\n        }\n        if(!found){\n            if(thechar>127) {\n                var c=thechar;\n                var a4=c%16;\n                c=Math.floor(c/16); \n                var a3=c%16;\n                c=Math.floor(c/16);\n                var a2=c%16;\n                c=Math.floor(c/16);\n                var a1=c%16;\n                return \"&#x\"+hex[a1]+hex[a2]+hex[a3]+hex[a4]+\";\";        \n            }\n            else{\n                return original;\n            }\n        }    \n    }\n}\n\n// 转义JS特殊字符\nfunction JavaScriptEncode(str) \n     \n    var hex=new Array('0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f');\n        \n    function changeTo16Hex(charCode){\n        return \"\\\\x\" + charCode.charCodeAt(0).toString(16);\n    }\n    \n    function encodeCharx(original) {\n        \n        var found = true;\n        var thecharchar = original.charAt(0);\n        var thechar = original.charCodeAt(0);\n        switch(thecharchar) {\n            case '\\n': return \"\\\\n\"; break; //newline\n            case '\\r': return \"\\\\r\"; break; //Carriage return\n            case '\\'': return \"\\\\'\"; break;\n            case '\"': return \"\\\\\\\"\"; break;\n            case '\\&': return \"\\\\&\"; break;\n            case '\\\\': return \"\\\\\\\\\"; break;\n            case '\\t': return \"\\\\t\"; break;\n            case '\\b': return \"\\\\b\"; break;\n            case '\\f': return \"\\\\f\"; break;\n            case '/': return \"\\\\x2F\"; break;\n            case '<': return \"\\\\x3C\"; break;\n            case '>': return \"\\\\x3E\"; break;\n            default:\n                found=false;\n                break;\n        }\n        if(!found){\n            if(thechar > 47 && thechar < 58){ //数字\n                return original;\n            }\n            \n            if(thechar > 64 && thechar < 91){ //大写字母\n                return original;\n            }\n\n            if(thechar > 96 && thechar < 123){ //小写字母\n                return original;\n            }        \n            \n            if(thechar>127) { //大于127用unicode\n                var c = thechar;\n                var a4 = c%16;\n                c = Math.floor(c/16); \n                var a3 = c%16;\n                c = Math.floor(c/16);\n                var a2 = c%16;\n                c = Math.floor(c/16);\n                var a1 = c%16;\n                return \"\\\\u\"+hex[a1]+hex[a2]+hex[a3]+hex[a4]+\"\";        \n            }\n            else {\n                return changeTo16Hex(original);\n            }\n            \n        }\n    }     \n  \n    var preescape = str;\n    var escaped = \"\";\n    var i=0;\n    for(i=0; i < preescape.length; i++){\n        escaped = escaped + encodeCharx(preescape.charAt(i));\n    }\n    return escaped;\n}\n\n```\n\n---\n\n### 9.XSS自动化封装层防护\n\n探索中...\n\n---\n\n## 🍊第三种：CSRF\n\n### 1.实现原理\n\n> 跨站请求伪造（Cross Site Request Forgery）\n\n如果你登录了某个网站（网站为了记录你的登录状态，肯定会返回给你唯一标识，这里就当是cookie吧），然后CSRF就是通过诱导你（怎么诱导你懂得，我就不开车了，呜呜呜...）打开某个网站，如果你打开了网站，那么肯定就能发送页面和JS来到你的电脑上，这样就能通过JS执行，获取你的登录状态，伪造成你，进行转账，购物等操作\n\n- 需要两个条件：你点开了诱导网站\n- 你登录了重要的网站（例如购物网站等）\n\n---\n\n### 2.CSRF防御\n\n- **用户不知情**：使用验证码（短信，图片验证码等等，这些黑客肯定不知道了）（影响用户体验，不常用，验证码经常用于防御DDOS攻击）\n- **跨站请求**：从伪造请求源头来分析：伪造请求的域名可能和正常域名不一样（跨域了），例如 正常淘宝支付，需要在 taobao.com 下进行，而跨站伪造请求，可能不是 taobao.com 域名下进行的支付请求 | **防御：使用 referer 验证（后台requust.header.referer 进行验证）**，也不常用，因为不可靠，可能被篡改\n- 参数伪造：**token（主流的防御CSRF攻击的一种手段）**\n\n---\n\n**referer示例（主要是后端验证）**\n\n```js\n\nconst referer = ctx.request.header.referer\n\n// 利用正则判断 发送请求的接口 是否是跨站了\n\n```\n\n---\n\n**Token防御CSRF攻击**\n\n> 前端发送请求的时候带上token，后端通过算法验证token 的正确性\n\n```js\n\n// 前端传递给后端token\n\n// 后端也生成token\n\n// 两者进行比较\n\n```\n\n---\n\n### 3.XSS和CSRF的结合攻击（XSS蠕虫）\n\n> 如果你的网站可以被注入攻击（XSS），那么黑客都不需要诱导你点击网站了，直接就可以注入执行攻击代码了，在这种情况下，验证码是最为可靠的（但是还可以被暴力破解掉）\n\nXSS蠕虫介绍：黑客在博客上发表一个XSS攻击代码，攻击代码的内容是，诱导你发送一个请求（CSRF），也发送一个帖子，内容也就是你发的XSS攻击代码，这也导致了，一传二，二传四的拓展（百度贴吧，微博都曾中过招）\n\n---\n\n## 🍈第四种：DDOS\n\n### 1.DDOS攻击介绍\n\n> DDOS（分布式拒绝服务 Distributed Denial of service）：通过大量不正常的访问，耗尽（占尽）我们服务器的资源，使得我们的服务无法正常运行（当攻击流量超过了服务的网络设备的极限或带宽的最大负荷时，网站服务将瘫痪导致无法正常运作）\n---\n\n### 2.DDOS攻击防御\n\n**防御手段一：验证码**\n\n验证码是我们在互联网十分常见的技术之一。不得不说验证码是能够有效地防止多次重复请求的行为。目前来说，随着验证码方式的丰富化，导致黑客们没有一个比较有效的方式来获取和识别验证码。但由于验证码会影响到用户体验，因此验证码只有在比较重要的入口才会使用，如转账和登陆的场景。\n\n---\n\n**防御手段二：限制请求频率（ratelimit）**\n\n限制请求频率是我们最常见的针对 DDOS 攻击的防御措施。其原理为设置每个客户端的请求频率的限制。简单来说，就是通过一些标识（如 IP 与 Cookie）来定位一个客户端，如果该客户端的请求在一定时间内过于频繁。则对该客户端之后的请求都重定向到一个出错的页面或者封杀相关 IP。\n\n当然许多框架都会有相应地限制请求频率的工具包，如 koa 框架便可以使用下面这些：\n\n- [koa-limit](https://github.com/cnpm/koa-limit)\n- [koa-ratelimit](https://github.com/koajs/ratelimit)\n\n---\n\n**防御手段三：扩容加带宽**\n\n简单来说就是，增加机器增加服务带宽。只要超过了攻击流量便可以避免服务瘫痪。在双十一活动或者12306 抢车票等场景时，网站服务都会对自己的机器进行扩容和提高带宽。然而为了避免由于使用过多机器导致成本太高且浪费的情况。通常来说都是根据网站活动和请求情况来实施相应扩容操作。\n\n---\n\n**防御手段四：其他的方法**\n\n- 设置自己的业务为分布式服务，防止单点失效\n- 使用主流云系统和 CDN（云和 CDN 其自身有 DDOS 的防范作用）\n- 优化资源使用提高 web server 的负载能力\n\n---\n\n**更多阅读**\n\n- [互联网创业公司如何防御 DDOS 攻击？](https://www.zhihu.com/question/19581905)\n- [漫画告诉你什么是DDoS攻击？](https://www.leiphone.com/news/201509/9zGlIDvLhwguqOtg.html)\n\n---\n\n## 🌶第五种：HTTP劫持\n\n### 1.HTTP劫持以及解决方法\n\n> 用户 - 服务器，其实不是这样简单的关系，中间还有夹杂着运营商（联通，电信等），他们转发我们的请求，我们其中使用的大多数是HTTP协议，这个协议是明文的，这也导致了会被劫持，然后加入一些广告，或者攻击代码\n\n- [谈谈 HTTPS](https://juejin.im/post/59e4c02151882578d02f4aca)\n- [给网站整上HTTPS](https://zhukunpenglinyutong.github.io/1.quickcheck/3.%E8%BF%90%E7%BB%B4/5.%E5%85%B6%E4%BB%96.html#_1-http%E5%8D%8F%E8%AE%AE-%E5%8F%98-https%EF%BC%88%E7%94%B3%E8%AF%B7%E9%85%8D%E7%BD%AEssl%E8%AF%81%E4%B9%A6%EF%BC%89)\n\n"
  },
  {
    "path": "docs/blog/13. 前端安全/3.渗透攻防.md",
    "content": "---\ntitle: 3.渗透攻防\ndate: 2020-01-30 00:00:00\npermalink: \ntag: \n - blog\n - 13. 前端安全\n---\n\n> 等待书写中...\n\n## 第一部分：信息收集\n\n### 1.子域名爆破\n\n- [安装Python](https://www.python.org/downloads/release/python-2710/)\n\n\n"
  },
  {
    "path": "docs/blog/14.前端架构/1.前端架构.md",
    "content": "---\ntitle: 1.前端架构\ndate: 2020-01-30 00:00:00\npermalink: \ntag: \n - blog\n - 14.前端架构\n---\n\n> 这里目录内容我不会，但我会在三四个月内实践好的，先定个目录结构\n\n## 🌽第一部分：Cli全栈化\n\n> 如果要把这块写成文章，我估计我还要几个月，我先写一下，我基于这个原则做的一些产品\n\n- npm包：[vuepress-es](https://www.npmjs.com/package/vuepress-es)\n\n---\n\n## 🥐第二部分：智能容灾\n\n---\n\n## 🍯第三部分：多端统一框架\n\n---\n\n## 🌮第四部分：大中台\n\n---\n\n## 🍳第五部分：智能部署，智能发布\n\n---\n\n## 🍔第六部分：无痕埋点\n\n---\n\n## 🥑第七部分：可视化搭建\n\n"
  },
  {
    "path": "docs/blog/14.前端架构/2.前端国际化方案（Vue项目）.md",
    "content": "---\ntitle: 2.前端国际化方案（Vue项目）\ndate: 2020-01-30 00:00:00\npermalink: \ntag: \n - blog\n - 14.前端架构\n---\n\n> 此篇文章放到这里可能不是很合理，但是没别的地方放了，以后我再抽离一个目录吧...\n\n## 第一部分：\n\n编译期间转换：i18n-webpack-plugin\n\n---\n\n## 第二部分：实际操作\n\n### 1.提取方案"
  },
  {
    "path": "docs/blog/15.运维/1.Linux知识.md",
    "content": "---\ntitle: 1.Linux知识\ndate: 2020-01-30 00:00:00\npermalink: \ntag: \n - blog\n - 15.运维\n---\n\n> 等待书写中..."
  },
  {
    "path": "docs/blog/15.运维/2.容器化.md",
    "content": "---\ntitle: 2.容器化\ndate: 2020-01-30 00:00:00\npermalink: \ntag: \n - blog\n - 15.运维\n---\n\n> 等待书写中..."
  },
  {
    "path": "docs/blog/15.运维/3.持续集成.md",
    "content": "---\ntitle: 3.持续集成\ndate: 2020-01-30 00:00:00\npermalink: \ntag: \n - blog\n - 15.运维\n---\n\n> 等待书写中..."
  },
  {
    "path": "docs/blog/16.网络/1.前端网络基础.md",
    "content": "---\ntitle: 1.前端网络基础\ndate: 2020-01-30 00:00:00\npermalink: \ntag: \n - blog\n - 16.网络\n---\n\n::: warning\n注意此处：内容不全，结构完整...\n:::\n\n::: tip\n在我看来这里的重要性简直是太高了，相当一人体的脊柱一样，这块搞不明白，你就高不起来。\n\n因为有一些名词是需要有一定的网络基础的，例如 CDN， 缓存，cookie，session，token，TCP/IP，HTTP，请求响应报文... 这些都是至关重要，所以我也在思考，如何将这个重要的一块好好的写一下\n\n我之前的书写时基于 HTTP，缓存，等等一块块零散的知识点进行，最后感觉起来，并不是很好，于是最后准备换一条路，从源头来一步一步进行分析，看看是否对理解前端中需要用到的网络知识有所帮助。\n:::\n\n---\n\n## 🥚第一部分：计算机网络概述\n\n### 1.互联网结构发展的三个历史\n\n::: tip\n第一阶段：从单网络 ARPANET 向互联网发展的过程\n:::\n\n1969年美国国防部建立的 第一个分组交换网 ARPANET 最初只是一个单个的分组交换网，后来发现单个网络并不能满足使用\n\n于是 ARPA 开始研究多种网络（分组无线电网络）互联的技术，这就导致了互联网络的出现，也是现在互联网的雏形\n\n1983年 TCP/IP 协议成为 ARPANET 上的标准协议，使得使用 **TCP/IP协议** 的计算机都能利用互联网相互通信，因此人们就把 1983年定义为互联网的诞生时间\n\n---\n\n::: tip\n第二阶段：构建三级结构的互联网\n:::\n\n1985年起，美国国家科学基金会 NSF 就围绕留个大型计算机中心 建设计算机网络（NSFNET）\n\n这是一个三级计算机网络，分为 主干网，地域网，校园网（或企业网）\n\n1991年，NSF 和 美国其他部门认识到，互联网必将扩大使用范围，不再仅限于大学和研究机构，于是美国政府决定将互联网的主干网交给私人公司来经营，并且开始对接入互联网的单位进行收费\n\n---\n\n::: tip\n第三阶段：形成 多层次ISP结构的互联网\n:::\n\nISP 就是一个进行商业活动的公司（互联网服务提供者），中国电信，中国联通，中国移动等公司都是我国有名的 ISP\n\nISP 可以从互联网管理机构申请到很多IP地址，同时拥有通信线路，以及路由器等联网设备\n\n根据提供服务的覆盖面积，ISP也被分为：主干IPS，地区IPS，本地IPS\n\n从原理上讲，只要每个本地IPS都按照了路由器，连接到了某个地区的IPS，而每个地区的IPS也有路由器连接到主干IPS，那么就能完成互联网中的所有的分组转发任务\n\n随着互联网上数据流量的急剧增长，人们开始研究如何更快的转发分组，于是 **互联网交换点 IXP 就应用而生了（了解）**\n\n<img src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/2.notes/8.0%E7%BD%91%E7%BB%9C/1.%E5%89%8D%E7%AB%AF%E7%BD%91%E7%BB%9C%E5%9F%BA%E7%A1%80/2.jpg\" />\n\n---\n\n### 2.路由器（实现分组交换的关键构件）\n\n::: tip\n分组交换则采用了 **存储转发技术**，通常我们把要发送的整块数据成为一个报文，而分组交换技术 就是把一个报文划分为几个分组后再进行发送。\n:::\n\n把较长的报文划分为一个个更小的等长数据段，并且在每一个数据段的前面，加上一些由必要的控制信息组成的首部（Header）之后，就构成了一个分组（分组又称之为包，不知道大家听没听过抓包）\n\n分组是互联网中传送的数据单元，分组的首部是非常重要的，正是由于分组的首部包含了诸如目的地址和源地址等重要控制信息，每一个分组才能在互联网中独立的进行传输路径，并正确的交付到分组传输的终点。\n\n<img src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/2.notes/8.0%E7%BD%91%E7%BB%9C/1.%E5%89%8D%E7%AB%AF%E7%BD%91%E7%BB%9C%E5%9F%BA%E7%A1%80/3.jpg\" />\n\n---\n\n::: tip\n路由器是一种专用计算器（不叫主机），是实现分组交换的关键构件，其任务是 转发收到的分组。\n:::\n\n主机是为用户进行信息处理的，路由器是用来转发分组的\n\n路由器收到一个分组，会暂时存储一下，检查其首部，查找转发表，按照首部中的目的地址，找到合适的接口转发出去，把分组交给下一个路由器\n\n这样一步一步的（可能会经过十几个路由器）以存储转发的方式，把分组交付给最终的目的主机\n\n各路由器之间必须经常交换彼此掌握的路由信息，以便创建和动态维护路由器中的转发表，使得转发表能够在整个网络拓扑发生改变的时候，及时更新\n\n<img src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/2.notes/8.0%E7%BD%91%E7%BB%9C/1.%E5%89%8D%E7%AB%AF%E7%BD%91%E7%BB%9C%E5%9F%BA%E7%A1%80/4.jpg\" />\n\n---\n\n### 3.计算机网络体系结构\n\n::: tip\n主要有三种划分方式，分别是 OSI的七层协议（国际标准），TCP/IP四层协议，五层协议（广泛使用）\n\n而我也主要是以五层协议为根本，接下里的内容也是以五层协议模型为核心书写的\n:::\n\n<img src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/2.notes/8.0%E7%BD%91%E7%BB%9C/1.%E5%89%8D%E7%AB%AF%E7%BD%91%E7%BB%9C%E5%9F%BA%E7%A1%80/5.jpg\" />\n\n---\n\n::: tip\n应用层 的任务是 通过应用进程间的交互来完成特定网络应用（没太懂）\n:::\n\n应用层协议定义的是 应用进程间通信和交互的规则（这里进程就是指正在运行的程序）\n\n对于不同的应用程序需要有不同的应用层协议，例如域名系统DNS，万维网应用 HTTP协议，电子邮件 SMTP协议等等\n\n我们把应用层交互的数据单元称为报文\n\n---\n\n::: tip\n传输层 的任务是 负责向两台主机中进程之间的通信 提供通用的数据传输服务\n:::\n\n传输层主要使用两种协议\n\n- **传输控制协议 TCP**，提供面向连接的，可靠的数据传输服务，数据传输单位是报文段\n- **用户数据报协议 UDP**，提供无连接的，尽最大努力的数据传输服务（不保证数据传输的可靠性），数据传输单位是用户数据报\n\n<img src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/2.notes/8.0%E7%BD%91%E7%BB%9C/1.%E5%89%8D%E7%AB%AF%E7%BD%91%E7%BB%9C%E5%9F%BA%E7%A1%80/7.jpg\" />\n\n---\n\n::: tip\n网络层 的任务是 为分组交换网上的不同主机提供通信服务\n:::\n\n在发送数据的时候，网络层把传输层产生的报文段（或用户数据报）封装成分组或包的形式传送\n\n<img src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/2.notes/8.0%E7%BD%91%E7%BB%9C/1.%E5%89%8D%E7%AB%AF%E7%BD%91%E7%BB%9C%E5%9F%BA%E7%A1%80/6.jpg\" />\n\n---\n\n> 数据链路层，物理层，省略...\n\n---\n\n\n## 🍖第二部分：应用层\n\n> 书写中...\n\n## 🥞第三部分：运输层\n\n> 书写中...\n\n## 🧀第四部分：网络层\n\n> 书写中...\n\n## 📚参考列表（致敬）\n\n- 《计算机网络》（第七版）谢希仁 编著"
  },
  {
    "path": "docs/blog/16.网络/2.前端网络应用.md",
    "content": "---\ntitle: 2.前端网络应用\ndate: 2020-01-30 00:00:00\npermalink: \ntag: \n - blog\n - 16.网络\n---\n\n> 此处结构混乱，内容不全，完善中...\n\n## 🥔第一部分：HTTP协议\n\n> 之前总是听一些名词，http，tcp/ip，*层网络模型，报头，报文，三次握手，五次挥手，HTTPS...等等名词，这些到底是什么，有什么关系，我要搞懂\n\n### 1.网络模型\n\n<img src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/2.notes/8.0%E7%BD%91%E7%BB%9C/1.%E5%89%8D%E7%AB%AF%E7%BD%91%E7%BB%9C%E5%9F%BA%E7%A1%80/1.%E4%BA%94%E5%B1%82%E6%A8%A1%E5%9E%8B.png\" />\n\n- 应用层（HTTP,FTP）：为应用软件提供了很多服务，\n- 传输层（TCP/IP，UDP）：向用户提供可靠的端到端服务（如何分包数据，如何拼装等等）\n- 网络层：数据在节点之间传输创建逻辑链路（听不懂啥意思，举个例子，我要是访问百度，这一层就规定了，我应该怎么去找，这个逻辑关系就是网络层帮我们去创建的）\n- 数据链路层：在通信实体之间建立数据链路连接\n- 物理层：定义物理设备如何传输设备（电脑硬件，网卡端口，网线...）\n\n### 2.HTTP发展历史\n\n- HTTP/0.9：只有一个命令GET，没有header等描述数据的信息，服务器发送完毕，就关闭TCP连接\n- HTTP/1.0：增加了很多命令（POST...等等），增加了 status code（状态码） 和 header（请求头，或者返回头，返回体的数据），还增加了多字符集支持，多部分内容发送，权限，缓存等\n- HTTP/1.1：支持持久连接（TCP不立刻关闭 keep-live），pipeline（在一个链接里面发送多个请求），增加host和其他一些命令\n- HTTP/2.0：所有数据以二进制进行传输，并行效率更高，增加头信息压缩以及主动推送\n\n---\n\n### 3.HTTP的三次握手\n\n> HTTP只有请求和响应，不存在连接这个概念 TPC的连接进行的（请求和响应都是数据包，他们之间传输需要一个通道 TCP）\n\n**HTTP创建之前TCP链接会有三次握手（为什么要有三次握手呢？为了防止无用的链接）**\n\n- 客户端会发送一个数据包（SYN=1,Seq=X）给服务器端\n- 服务器端收到这个数据包，就会开启一个TCP的端口，并返回给客户端一个数据包（SYN=1,ACK=X+1,Seq=Y），表示服务器端允许你创建链接了\n- 客户端收到服务器端的数据包，然后返回数据包 (ACK=Y+1,Seq=Z)，表示我也收到了，可以发给我数据了（这时候才发送数据）\n\n**HTTP关闭之前 TCP链接会有一个四次挥手的过程**\n\n由于Tcp连接是进行全双工工作的，因此每个方向都必须单独进行关闭，这个原则是当一方完成他的数据发送的时候就发送一个FIN来终止这个方向的连接，收到这个FIN意味着这个方向上没有数据的流动，一个TCP连接在收到这个FIN之后还能发送消息，首先执行关闭的一方进行主动的关闭，而另一方进行被动的关闭\n\n- TCP发送一个FIN，用来关闭客户到服务端的连接\n- 服务端收到这个FIN，他发回一个ACK，确认收到序号为收到序号+1，和SYN一样，一个FIN将占用一个序号\n- 服务端发送一个FIN到客户端，服务端关闭客户端的连接\n- 客户端发送ACK报文确认，并将确认的序号+1，这样关闭完成\n\n---\n\n\n### 🔥4.HTT协议详解\n\n**请求报文（请求行，请求头，请求体）**\n\n- 起始行（General）：GET 资源 HTTP/1.1\n    - Request URL：请求地址\n    - Request Method：请求类型（GET,POST...）\n    - Status Code：请求状态（状态码）\n    - Referrer Policy：\n    - ...\n- 请求头（请求报文）\n    - Accept：我这个浏览器能够接收什么资源\n    - Accept-Encoding: 浏览器接受数据的格式是什么？可以设置支不支持gzip格式（压缩格式）等\n    - Accept-Language：接收的语言\n    - Coche-Control：缓存相关\n    - 🔥Connetion：keep-alive（http的一种 连接模式，最常用的是长连接 keep-alive）\n        - 短连接：每一次http的请求和响应，都会反复建立和断开TCP连接，占用服务器IO操作\n        - 长连接：建立一个TCP链接，然后进行多次HTTP通信\n    - Cookie：\n    - Host：访问的网站\n    - User-Agent：包含浏览器的一些信息，电脑系统等，就是浏览器向服务器介绍自己的一个（做爬虫的时候能用到，因为反爬虫的一个就是判断你是不是浏览器）\n    - ...\n\n---\n\n**响应报文（响应行，响应头，响应体）**\n\n- 响应行\n- 响应头（响应报文）\n    - Coche-Control：缓存相关\n    - Connetion：keep-alive（返回形式是长连接）\n    - Content-Encoding: gzip（返回的格式）\n    - Content-Type: text/html（返回的类型）\n    - Date: 缓存相关（时间戳）\n    - Expires：缓存相关\n    - Sever：服务器（例如 NGINX）\n    - ...\n\n\n---\n\n**响应状态码**\n\n- 1xx：指示信息 - 表示请求已接收，继续处理（用到异步处理上，后端常用，前端很少见）\n- 2xx：成功 - 表示请求被成功接收，理解，接受\n- 3xx：重定向 - 要完成请求必须进行更近一步的操作（服务器让你读本地缓存的时候可以用到，服务器端也能能用）\n- 4xx：客户端错误 - 请求有语法错误或请求无法实现\n- 5xx：服务器端发生错误 - 服务器未能实现合法的请求（后端程序出错，网络出错，服务器服务错误）\n\n---\n\n**请求方法**\n\n- GET\n- POST\n- PUT\n- DELETE\n- HEAD\n- TRACE\n- CONNECT\n- OPTIONS: 请求查询服务器性能或者查询与资源相关的选项和需求\n\n---\n\n### 5.CORS跨域请求和限制与解决\n\n一句话点醒了我，让我知道什么是跨域，\n\n当你发送一个 跨域请求的时候，其实服务器已经返回给了你想要的内容，但是，但是，这时候，浏览器会审视返回的数据是否满足同源策略（同端口，同协议，同IP）规则，不满足而且返回的数据有没有设置 \"Access-Control-Allow-Origin\": \"*\"，允许跨域，这时候就会浏览器忽略掉，注意是被浏览器忽略掉。也就是跨步跨域，是浏览器的规则\n\n这也就解释了为什么，img 标签没有跨域，因为这是浏览器的规则，浏览器规定了 img 跨域不准守跨域\n\n---\n\n> 什么是跨域（我个人的观点）\n\n上网访问资源走的是HTTP协议，HTTP协议只有请求和响应，而数据传输是TCP协议，在网页上报的那些跨域，其实并不是后端没发给你，而是浏览器的同源策略规则导致的，其实只要是你请求的数据，服务器端都会给你，浏览器有跨域，是浏览器的规则而已\n\n这也就解释了服务器端为什么没有跨域...因为跨域是浏览器的限制规则\n还有为什么 img script link等标签能跨域...因为还是浏览器的规则，反正数据都拿到了，能不能显示，报不报跨域，还是浏览器说的算\n\n---\n\n**JSONP实现跨域（浏览器允许，link，img，srcipt标签 允许跨域）**\n\n---\n\n### 6.CORS跨域限制以及预请求验证\n\n---\n\n### 7.HTTP长连接\n\n所谓的长连接就是，HTTP请求和响应，是建立在TCP连接之上的（TCP是桥梁），在一个HTTP完成之后，如果不想断开 TCP 连接，还想接着用 HTTP ，那么就需要使用长连接，返回头中具有 Connection: keep-alive\n\n为了提高性能，我们需要并发HTTP连接\n\n---\n\n### 8.数据协商\n\n> 规定客户端发送什么格式的数据，服务器端返回什么格式的数据\n\n**客户端请求的时候**\n\n- Accept：我想要是数据格式\n- Accept-Encoding：我想要的编码方式（使用哪种数据压缩）\n- Accept-Language：展示的语言\n- User-Agent：表示浏览器的一些信息（根据这个我们就能返回移动端的网页，或者PC端的网页）\n\n**服务器端返回的时候**\n\n- Content-Type：\n- Content-Encoding：\n- Content-Language：\n\n\n---\n\n### 9.URI-URL和URN\n\n**URI：统一资源标识符（找资源的一种规则）**\n\n用来唯一标识互联网上的信息资源，包括URL和URN\n\n**URL：统一资源定位器**\n\n格式：http[s]://user:pass@host.com:80/path?query=string#hash\n\n**URN：永久统一资源定位符**\n\n在资源移动之后还能被找到，目前还没有非常成熟的使用方案\n\n\n---\n\n### 10.从输入网址到展示页面，这里面经历了什么？\n\n- 用户输入网址 按下回车\n- 浏览器第一件事：先看网络通不通（再深一层就是路由器，网关）（浏览器如何判断网络通不通）\n- 网络通的话，浏览器操作 计算机底层发送网络请求的API，向DNS发送解析（因为浏览器不认识域名）\n- DNS服务器给浏览器返回了 IP地址，浏览器继续 通过这个IP地址继续发送（因为浏览器和目标地址之间，不可能一条线通着的，中间还有很多透明设备（对于用户是不可见的），网关，路由器等等），经过一些列的转发之后，到达目的地（唯一的服务器）\n- 服务器接收到请求之后，经过一些处理，把响应结果返回（字符串）\n- 返回过程也经过一些路由，最终返回到 用户浏览器中\n\n**猫 和 路由器**，猫：是和 各个通信商之间的一条链路，路由器：路铺好了，路由器就是告诉怎么走的，就是告诉 DNS服务器\n\n---\n\n### 11.Redirect\n\n你要请求的资源换地方了，如果资源搬到别的地方了，如果之前的链接还在用的话，直接访问会报 404，为了防止这个，可以设置Redirect（状态码报302 临时跳转）\n\n---\n\n### 12.CSP（内容安全策略）\n\n> 内容安全策略（CSP）用于检测和减轻用于 Web 站点的特定类型的攻击，例如 XSS 和数据注入等。该安全策略的实现基于一个称作 Content-Security-Policy 的 HTTP 首部。\n\n- 限制资源获取\n- 报告资源获取越权\n- default-src 限制全局\n- 制定资源类型\n- 例如设置返回头：\"Content-Security-Policy\": \"default-src http: https:\" 就可以使网站不能加载内嵌式脚本，只能加载外部脚本链接，防止了XSS攻击\n- \"Content-Security-Policy\": \"default-src \\'self'\\\" 限制只能加载自己网址下的 外部脚本连接，当然还有其他的设置\n- 如果发现了非法请求的话，怎么提醒我们呢：\"Content-Security-Policy\": \"default-src \\'self'\\; report-url /接口\" 如果触发了这个策略，就会调用 /接口，这时候监听这个接口就行\n- 更多去MDN上看吧\n\n---\n\n## 🥝第二部分：缓存\n\n> 缓存机制：浏览器 ---》 无缓存 ---》请求服务器 ---》请求响应，协商缓存\n\n### 缓存头Cache-Control的含义和使用\n\n- 其他\n    - no-store\n    - no-transform\n\n---\n\n\n\n\n---\n\n### 缓存验证Last-Modified && Etag\n\n**Last-Modified 上次修改时间**\n\n配合 If-Modified-Since 或者 If-Unmodified-Since 使用（对比上次修改时间以验证资源是否需要更新）\n\n**Etag**\n\n数据签名（对hash计算）\n\n配合 If-Match 或者 If-Non-Match 使用\n\n对比资源的签名判断是否使用缓存\n\n\n---\n\n## 🍈第三部分：cookie & session & token\n\ncookie 是 服务器返回内容的时候，通过Set-Cookie 这个属性，设置到浏览器中一个字符串的内容，设置了cookie，下次请求就会自动带上，是键值对的属性，可以设置多个\n\ncookie的属性\n\n- max-age和expires设置过期时间\n- Secure只在https的时候发送\n- HttpOnly 无法通过 document.cookie 访问 cookie\n\n---\n\n**cookies和session**\n\n- cookies 是保存在客户端的小段文本 一般都是服务器端生成返回给客户端浏览器\n- session 保存在服务器端，通过唯一的值sessionID来区分每一个用户，sessionID随每个连接请求发送到服务器，服务器更具sessionID来识别客户端，再通过session 的key值 获取 session 值\n- 因为http是无状态的（这里的状态不是状态码那些东西，而是指的是服务器端不知道某个请求是哪个浏览器发的这类信息）\n\n---\n\n**token**\n\n- 要下发到你的客户端，也要和\n- 验证流程上和session不一样，是一个安全性更高的机制\n\n---\n\n## 🍓第四部分：HTTP2\n\n优势：\n- 信道复用：只建立一个TCP就行（可以并发很多HTTP）\n- 使用二进制格式进行传输（不是传纯文本了，更加高效，紧凑）\n- 对报头压缩，降低开销\n- 多路复用，一个网络连接实现并行请求\n- 服务器主动推送，减少请求的延迟（跟ajax，websocket）\n\n---\n\n## 🍎第五部分：Nginx\n\n### 1.NGINX基础配置\n\n> 纯粹的HTTP服务\n\n- [Centos7.* 下安装NGINX](https://zhukunpenglinyutong.github.io/1.quickcheck/3.%E8%BF%90%E7%BB%B4/1.%E5%90%84%E7%A7%8D%E8%BD%AF%E4%BB%B6%E5%AE%89%E8%A3%85%E9%80%9F%E6%9F%A5.html#%F0%9F%94%A5centos7-%E4%B8%8B%E5%AE%89%E8%A3%85%E8%BD%AF%E4%BB%B6)\n\n\n### 2.NGINX代理配置和代理缓存\n\n---\n\n## 🍇第六部分：Notes网站优化\n\n> 先上来三板斧：gzip + CDN + HTTP2\n\n我的网站访问速度，一度的飙升到1分半，这对于一个速查网站来说是致命的\n\n经过我的分析，我发现是我的文件数量太多（130个左右），导致触及到了并发的最大数（谷歌浏览器只能并发6个TCP连接），于是我调整NGINX配置，使其变成 HTTP2 协议\n\n呦，速度变成了1分钟，不错，咦不对，一分钟还是很慢，我接着分析返回的面板发现，并发数解决了，但是返回的网速依旧很慢，于是我查看服务器，发现我的服务器是 1MB/s ，哦，原来是网速限制了网站的速度呀，于是我准备替换成 CDN 静态加速\n\n配置完成CDN + HTTP2，可以了，3s之内访问正常，先这样凑活用吧\n\n\n---\n\n## 📚参考列表（致敬）\n\n- 《图解HTTP协议》\n- [慕课网课程...HTTP协议原理+实践Web开发工程师必学](https://coding.imooc.com/learn/list/225.html)\n- [腾讯课堂...前端全栈工程师精英班，个人强烈推荐...](https://ke.qq.com/course/220822)\n- [腾讯课堂...前端next学位课程](https://ke.qq.com/course/233919)\n- [HTTP报文分析](https://blog.csdn.net/qq_26565861/article/details/80969960)"
  },
  {
    "path": "docs/blog/17.项目/1.Node项目仿知乎API.md",
    "content": "---\ntitle: 1.前端代码质量绪论\ndate: 2020-01-30 00:00:00\npermalink: \ntag: \n - blog\n - 17.项目\n---\n\n# 1.Node项目仿知乎API.md\n\n> 注意此处：此处内容需要重新梳理\n\n---\n\n## 🔥序章\n\n**本项目采用 Koa2 + mongoose 作为基础，采用JWT做鉴权（Token），是我熟悉Koa2 + MongoDB开发的入门项目**\n\n- 收获一：抽离出一个 Koa + mongoose 的MVC简单项目 [项目地址](https://github.com/zhukunpenglinyutong/Koa-api-template)\n- 收获二：加深了 RESTful API 的规范认知，见下面的笔记\n\n---\n\n## 🌴第一章：认识RESTful API\n\n---\n\n### 1.REST是什么以及它的6个限制\n\n- **什么是REST**：REST是一种架构风格，用来创建网络服务\n- **为何叫REST**：英语全称是 Representational State Transfer\n  - Representational：数据表示形式，可以用很多种，一般用JSON\n  - State：当前状态或者数据\n  - Transfer：数据传输\n\n**通过字面意思来看是不好理解的，或者说不全面的，但是我们可以通过REST的六个限制来更深刻的认识REST**\n\n- 客户-服务器（Clent-Server）（这个解释非常的好🔥）\n  - 关注点分离（服务端关注数据存储，提升了简单性；前端专注用户界面，提高了可移植性）\n  - 简单性解释：过去服务端端还需要渲染页面，现在只需要写好数据存储就好了\n  - 可移植性解释：调用接口，渲染平台的能力，很多平台都支持这种操作\n- 无状态（Stateless）\n  - 所有用户会话信息都保存在客户端\n  - 每次去请求必须包括所有信息，不能依赖上下文信息（例如小说翻页，你想请求下一页，服务器不知道下一页是啥，需要你确定的请求第几页才行）\n  - 🔥无状态的好处：服务端不用保存会话信息，提升了简单性，可靠性，可见性\n- 缓存（Cache）\n  - 所有服务端响应都要标记可缓存或者不可缓存\n  - 缓存的好处：减少前后端交互，提升了性能\n- 统一接口（Uniform Interface）🔥\n  - 接口设计尽可能统一通用，提升了简单性，可见性\n  - 接口与实现解耦，使前后端可以独立开发迭代（接口定好之后，前端可以自己mock数据，不用等后端开发完成）\n- 分层系统（Layered System）\n  - 每层只知道相邻的一层，后面隐藏的就不知道了\n  - 客户端不知道是在和代理还是真正的服务器通信\n  - 其他层：安全层，负载均衡层，缓存层等（阿里巴巴有个机构专门做这种层的，不用关系业务逻辑）\n- 按需代码（Code-On-Demand可选）（不是很重要）\n  - 客户端可以下载运行服务端传过来代码（例如JS）\n  - 减少一些功能，简化客户端\n\n---\n\n### 2.统一接口限制（接口需要统一成什么样子？）\n\n- 资源的标识\n  - 资源是任何可以命名的的事物，比如用户，评论等\n  - 每个资源通过URL被统一的标识（例如：https://api.github.com/users）\n- 通过表述来操作资源（这个我懂，我就是这样用的）\n  - 客户端不能直接操作（比如SQL）服务端资源\n  - 客户端应该通过表述（比如JSON）来操作资源\n- 自描述信息\n  - 每个消息（请求或者响应）必须踢狗足够的信息让接受者理解\n  - 例如：你可以需要传媒体类型（application/json,application/xml）\n  - 例如：你需要规定请求类型：GET,POST,DELETE\n  - 例如：响应是否被缓存：Cache-Control\n- 超媒体作为应用状态引擎（没懂）\n  - ...\n\n后记：GitHub api 有 v3，也就是 REST API,还有 v4 GraphQL api 学完v3可以看下v4\n\n---\n\n### 3.RESTful API简介\n\n- 字面解释是：符合REST架构风格的API\n- RESTful API 具体长什么样子呢？\n  - 基本的URL，例如:https//api.github.com/users\n  - 标准HTTP方法，例如 GET,POST,PUT,PATCH,DELETE\n  - 传输的数据媒体类型，如JSON，XML\n- 现实举例\n  - GET /users | 获取user列表\n  - GET /users/12 | 查看某个具体的user\n  - POST /users | 创建一个user\n  - PUT /users/12 | 更新user为12的用户\n  - DELETE /users/12 | 删除user为12的用户\n\n---\n\n### 4.RESTful API设计最佳实践（规范化，对我很重要）🔥\n\n- 请求设计规范 ✅\n  - URL要使用名词，尽量用复数，如 /users\n  - URL使用嵌套表示关联关系，如 /users/12/repos/5\n  - 使用正确的HTTP方法，如 GET/POST/PUT/DELETE\n  - 不符合增删改查的情况下：POST/...\n- 响应设计规范 ✅\n  - 查询（每一个返回值都是可以被查询的，也就是我们加上返回条件，就能筛选我们想要的结果）\n  - 分页\n  - 字段过滤（完整的字段假如有十个，这个可以规定我想要的字段）\n  - 状态码\n  - 错误处理（如果错了，要规范化的返回错误信息）\n- 安全（这个也是有收获的）✅\n  - 使用HTTPS（使用HTTP容易被篡改，加上一些广告什么的，很烦）\n  - 鉴权（需要登录才能请求某些接口）\n  - 限流（防止某些坏人刻意占用接口）\n- 开发者优化\n  - 文档\n  - 超媒体\n\n---\n\n## 🌳第二章：用Koa 说 Hello World\n\n### 1.Koa简介\n\n- 一句话简介：基于Node.js的下一代web框架\n  - 基于Node.js：说明koa是一个Node.js模块\n  - 下一代：蚕食第一代Express市场\n  - web框架：不是命令行工具，不是算法\n- 官网详细介绍\n  - 由Experss幕后人原班人马打造\n  - Web应用和API开发领域\n  - 更小，更富有表现力，更健壮\n  - 利用async函数，丢弃回调函数\n  - 增强错误处理：try catch\n  - 没有捆绑任何中间件\n  - 快速而愉快的编写程序（画的一个大饼）\n\n<img src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/2.note/5.%E5%85%B6%E4%BB%96%E9%9B%B6%E6%95%A3%E7%AC%94%E8%AE%B0/%E6%85%95%E8%AF%BE%E7%BD%91%E8%AF%BE%E7%A8%8BRESTful%20API/1.png\" />\n\n---\n\n### 2.安装搭建第一个Koa程序\n\n- 初始化目录：npm i koa --save\n- 使用：建立 app.js，让koa返回一个 hello world\n\n```js\nconst Koa = require('koa');\nconst app = new Koa();\n\n//use() 方法里面可以传递函数，这个函数就是我们说的中间件\napp.use( ctx => {\n  ctx.body = \"Hello World\";\n});\n\napp.listen(3000)\n```\n\n---\n\n### 3.Koa中间件与洋葱模型\n\n- async/await 示例（当一个请求依赖上个请求完成的情况下，需要用嵌套，这个非常的不优雅）\n\n```js\n// 这个可是解决了我不能在任何地方用 async 的方法\n(async () => {\n  const res1 = await fetch('...') // 嵌套一\n  const res2 = await fetch('...') // 嵌套二\n})\n```\n\n- **学习编写Koa中间件**\n\n```js\nconst Koa = require('koa');\nconst app = new Koa();\n\n//use() 方法里面可以传递函数，这个函数就是我们说的中间件,这是一个中间件，执行多个中间件，必须要写 next 参数 🔥🔥🔥\napp.use( async (ctx, next) => {\n  await next();\n  ctx.body = \"Hello World\";\n});\n\napp.use( ctx => {\n  console.log('我也是中间件，我要先执行')\n});\n\napp.listen(3000)\n\n```\n\n**洋葱模型**\n\n<img src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/2.note/5.%E5%85%B6%E4%BB%96%E9%9B%B6%E6%95%A3%E7%AC%94%E8%AE%B0/%E6%85%95%E8%AF%BE%E7%BD%91%E8%AF%BE%E7%A8%8BRESTful%20API/2.png\" />\n\n---\n\n## 🎄第三章：Koa 和 RESTful API 的最佳实践\n\n### 1.路由简介\n\n- 路由决定了不同的URL是如何被 不同执行的\n- 在Koa中，路由的本质是一个中间件\n- 思考，如果没有路由会怎么样？请求和响应都没法 差异化，请求和返回的结果都一样，就跟上面我们返回的 Hello World一样，这.....是不行的\n- 路由存在的意义：处理不同的URL，处理不同的http请求，解析URL上的参数\n\n---\n\n### 2.自己编写Koa路由中间件\n\n- 目标实现功能：处理不同的URL，处理不同的http方法，解析URL上的参数\n\n```js\nconst Koa = require('koa');\nconst app = new Koa();\n\n//use() 方法里面可以传递函数，这个函数就是我们说的中间件,这是一个中间件，执行多个中间件，必须要写 next 参数\napp.use( ctx => {\n  // ① 处理不同的URL：ctx.url 表示上下文的URL，ctx表示上下文\n  // ② 处理不同的http方法：ctx.method\n  // ③ 解析URL上的参数 \n  ctx.body = `路径：${ctx.url}，请求类型：${ctx.method}, 参数：${getURLParameters(ctx.url)}`\n  \n});\n\n// 获取url中的参数\nfunction getURLParameters(url) {\n  const params = url.match(/([^?=&]+)(=([^&]*))/g)\n  return params?params.reduce(\n    (a, v) => (a[v.slice(0, v.indexOf('='))] = v.slice(v.indexOf('=') + 1), a), {}\n  ):[]\n}\n\napp.listen(3000)\n```\n\n---\n\n### 3.使用Koa-router实现路由\n\n- 安装：npm i koa-router --save\n\n**基本使用**\n\n```js\nconst Koa = require('koa');\nconst app = new Koa();\nconst Router = require('koa-router');\nconst router = new Router;\n\n// 注册路由\nrouter.get('/', ctx => {\n  ctx.body = '这是首页'\n})\n\n// 解析URL参数\nrouter.get('/user/:id', ctx => {\n  ctx.body = `这是用户${ctx.params.id}`\n})\n\n// 注册router中间件（要用router中的routes()方法）\napp.use(router.routes())\n\napp.listen(3000)\n```\n\n**路由前缀和多中间件使用（这里使用不规范，整理以后比较规范的结构）**\n\n---\n\n### 4.HTTP options 方法的用（额，对我目前没太大用，就是增加些知识广度）\n\n- 🔥options 是HTTP请求类型中的一种（GET,POST......）\n- 这是一道常考面试题，还可以帮助理解 koa-router 的 allowedMethods 的作用\n- **🔥options 作用**\n  - 检测服务器所支持的请求方法\n  - CORS中的预见请求\n- **allowedMethods 作用**\n  - 响应 options 方法，告诉所支持的请求方法\n  - 相应的返回 405（不允许）和 501（没实现）\n\n---\n\n### 🔥5.增删改查应该返回什么响应？\n\n**这里听说是最佳实践，但是我观点是，我再看看，选择适合自己的**\n\n```js\nconst Koa = require('koa');\nconst app = new Koa();\nconst Router = require('koa-router');\nconst router = new Router;\n\n// 增\nrouter.post('/', ctx => {\n  ctx.body = [{}] // 返回新建的数据\n})\n\n// 删\nrouter.delete('/user', ctx => {\n  ctx.status = 204 // 返回状态码 204，表示没有内容，但是成功了\n})\n\n// 改\nrouter.put('/user', ctx => {\n  ctx.body = [{}] // 返回修改后的数据\n})\n\n// 查\nrouter.get('/user', ctx => {\n  ctx.body = [{},{},{}] // 返回数据列表\n})\n\n\n// 注册router中间件（要用router中的routes()方法）\napp.use(router.routes())\napp.listen(3000)\n```\n\n---\n\n## 🌵第四章：koa框架的控制器以及设计更合理的目录结构\n\n### 1.控制器简介\n\n- 什么是控制器？拿到路由分配的任务，并执行\n- 在Koa中，控制器是一个中间节\n- 为什么要用控制器\n  - 获取http请求参数\n  - 处理业务逻辑（获取数据，处理数据，存储数据...）\n  - 根据情况发送http响应\n- 获取http请求参数\n  - （查询字符串）Query String，例如 ?q=keyword\n  - （路由参数）Router Params，如 /users/:id （这个一般是必选的，而且可能有多个路由参数，我们公司也差不多是这样的）\n  - 🔥（请求体）Body，如 { name: '朱昆鹏' }（一般用json）（From也是很常用的请求体）\n  - （请求头）Header，如 Accept,Cookie\n\n---\n\n**🔥编写控制器最佳实践**\n\n- 每个资源的控制器放到不同的文件夹下\n- 尽量使用类+类方法的形式编写控制器（我是一个接口就是一个函数，他这个的思想是，写成一个类，然后我的这些接口都是类方法，这样这些接口可以使用类的公共内容）\n- 严谨的错误处理\n\n---\n\n### 2.获取http请求参数\n\n- 请求参数有：获取 query,获取 router params，获取 body, 获取 header\n- 通过断点调试，我发现 ctx 这个上下文上挂载的是我需要好好看看的各种东西，http参数都在这里面写着呢，名字也是通俗易懂\n- 🔥body这是个请求体，但是 koa是没有解析请求体的功能的（ctx上没有解析body的内容，ctx.body 是设置返回的，和这个没关系），需要加一个中间件\n- 安装解析请求体中间件：npm i koa-bodyparser --save\n\n```js\nconst bodyparser = require('koa-bodyparser')\n// ......\napp.use(bodyparser())\n\n// 🔥使用：ctx.request.boay\n```\n\n---\n\n### 3.发送HTTP响应\n\n- 如何发送status，body，header\n\n```js\n// ......\nrouter.get('/user', ctx => {\n  ctx.status = 200 // 设置 status\n  ctx.body = '...' // 设置 body\n  ctx.set('Allow', 'GET,POST') // 设置响应头\n})\n```\n\n---\n\n### 🔥4.更合理的目录结构\n\n- 路由，控制器都放在一个目录里\n\n```js\n// 🇨🇳 routes 文件夹 /users.js文件\nconst Router = require('koa-router');\nconst router = new Router; // new Router({prefix:'user'}) 这样可以设置路由前缀，也是实用的\n\n// 查\nrouter.get('/user', ctx => {\n  ctx.body = [{},{},{}] // 一般返回数据列表\n})\n\nmodule.exports = router // 导出\n\n\n// 🇨🇳 写一个 routes/index.j 用来批量注册路由\nconst fs = require('fs')\nmodule.exports = app => {\n  fs.readdirSync(__dirname).forEach(file => {\n    if (file === 'index.js') {return;}\n    const route = require(`./${file}`)\n    app.use(route.routes()).use(route.allowedMethods())\n  })\n}\n\n// 🇨🇳 app.js 中使用批量注册\nconst routing = require('./app/routes')\nrouting(app)\n\n// 🇨🇳 建立 controllers 文件夹，在里面建立 users.js 🔥🔥🔥（这个定义类和使用类的方式，我喜欢，GET到了，确实比我写的Express正规）\nclass Users {\n  // 获取用户列表\n  getUsers (ctx) {\n    ctx.body = '获取了用户列表'\n  }\n}\nmodule.exports = new Users()\n\n// 🇨🇳在路由中使用\nconst { getUsers } = require('../controller/users') // 这是ES6语法，更简单\n// 获取所有列表\nrouter.get('/users', getUsers)\nmodule.exports = router // 导出\n```\n\n---\n\n## 🌱第五章：多种方案实现错误处理机制\n\n### 1.错误处理简介\n\n- 什么是错误处理？错误处理是编程语言或计算机硬件中的一种机制，用于处理软件或信息系统中出现的异常状况\n- 异常状况有哪些？\n  - 运行时错误：都返回500（代表服务器内部错误）\n  - 逻辑错误：找不多（404），先决条件失败（412），无法处理的\n- 为什么要用错误处理？\n  - 防止程序挂掉\n  - 告诉用户错误信息\n\n---\n\n### 2.koa自带的错误处理\n\n- 如果请求的接口不存在的话，就会返回 404\n- 如果服务器内部语法错误，或者其他错误，就会返回 500\n\n```js\n// 手动抛出\nctx.throw(404, '返回报错文本信息')\n```\n\n**❣️但是这里返回的都是文字，我们想返回JSON，这样才格式统一**\n\n---\n\n### 3.自己编写错误处理中间件\n\n- 写到所有中间件的最前面\n\n```js\n// 原理就是捕捉下一个中间件的报错，然后返回状态码和内容（JSON格式）\napp.use(async (ctx, next) => {\n  try {\n    await next()\n  } catch (err) {\n    ctx.status = err.status || err.statusCode\n    ctx.body = {\n      message: err.message\n    }\n  }\n})\n```\n\n---\n\n### 4.使用 koa-json-error进行错误处理\n\n- 安装：npm i koa-json-error --save\n\n```js\n// app.js\nconst error = require('koa-json-error')\napp.use(error())\n\n// 堆栈信息都返回了，这里可以配置\n// {\n//     \"message\": \"Not Found\",\n//     \"name\": \"NotFoundError\",\n//     \"stack\": \"NotFoundError: Not Found\\n    at Object.throw (/Users/zhukunpeng/Desktop/RESU ful API/node_modules/koa/lib/context.js:97:11)\\n    at /Users/zhukunpeng/Desktop/RESU ful API/node_modules/koa-json-error/lib/middleware.js:52:58\\n    at processTicksAndRejections (internal/process/task_queues.js:89:5)\",\n//     \"status\": 404\n// }\n```\n\n**🔥设置环境变量，让我们在开发时候错误处理返回堆栈信息，生产环境不返回（未完成）**\n\n- 安装：npm i cross-env --save-dev\n\n---\n\n### 5.使用koa-parameter进行参数校验\n\n- 安装：npm i koa-parameter --save\n\n```js\n// app.js\n// 这个通常是校验请求体\nconst parameter = require('koa-parameter')\napp.use(parameter(app)) // 参数校验，加入app的话，就能在全局使用了\n\n// controller/users.js\n\n// 新建用户\nasync createUser(ctx) {\n  \n  ctx.verifyParams({\n    name: {type: 'string'}\n  })\n  const { name } = ctx.request.body\n  const user = await new User(ctx.request.body).save()\n  ctx.body = user\n}\n\n```\n\n**如果错了的话**\n\n<img src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/2.note/5.%E5%85%B6%E4%BB%96%E9%9B%B6%E6%95%A3%E7%AC%94%E8%AE%B0/%E6%85%95%E8%AF%BE%E7%BD%91%E8%AF%BE%E7%A8%8BRESTful%20API/10.png\" />\n\n**还有更多的限制条件，例如必选，例如什么类型，这个都可以查阅**\n\n---\n\n## 🌿第六章：koa + MongoDB 实现增删改查\n\n### 1.NoSQL简介\n\n- 不属于关系型数据库的哪一类 被称为 NoSQL\n- NoSQL数据库的分类\n  - 列存储（HBase）\n  - 🔥文档存储（MongoDB）（所谓文档存储就是按照JSON存储）\n  - key-value 存储（Redis）(通常用于缓存和消息通信)\n  - ......\n- 为什么要用 NoSQL\n  - 简单（没有原子性，一致性，隔离性等复杂规范）（关系型数据库要多个机器协同工作，必须要符合这些规范，这样就增加了很多通信）\n  - 便于横向拓展（因为简单，没有规范，所以便于拓展）\n  - 适合超大规模的数据存储（还是因为拓展）\n  - 很灵活的存储复杂结构的数据\n\n---\n\n### 🔥2.mongoose 连接 MongoDB\n\n- 安装：npm install mongoose --save\n\n```js\n// 引入\nconst mongoose = require('mongoose')\n\n// 使用\nmongoose.connect('mongodb://47.95.0.108:27017/test', {useNewUrlParser: true}, () => {\n    console.log('连接成功')\n})\nmongoose.connection.on('error', console.error);\n\n```\n\n---\n\n### 3.设计用户模块的Schema\n\n- 这里的Schema是JSON的，写完之后，我们生成一个 Model\n\n```js\n// 我们在 /app/model/users.js 建立一个model文件夹，在里面建立users.js\nconst mongoose = require('mongoose')\nconst { Schema, model } = mongoose;\n\nconst userSchema = new Schema({\n    name: { type: String, required: true }, // 第一个表示是字符串这没啥，第二个意思是必写项,当然还有很多设置，例如 default: ** 这是设置默认值的，当用户没传的时候，这个就生效，更多请看百度\n})\n\nmodule.exports = model('User', userSchema); // 前面User会在MongoDB里面建立一个集合\n```\n\n---\n\n### 🔥4.MongoDB实现用户的增删改查\n\n```js\n// 引入\nconst User = require('../model/users')\n\nclass UsersCtl {\n\n  // 查询所有用户（find里面也能传正则哦）\n  async findUser(ctx) {\n    ctx.body = await User.find()\n\n  }\n\n  // 根据ID查询特定用户（findById）\n  async findById(ctx) {\n    const user = await User.findById(ctx.params.id)\n    if (!user) { ctx.throw(404, '用户不存在')}\n    ctx.body = user\n  }\n\n  // 新建用户（new + save()）\n  async createUser(ctx) {\n    const user = await new User(ctx.request.body).save() // 这里有两个细节，一个是需要 new，另一个是需要 .save()\n    ctx.body = user\n  }\n\n  // 修改（findByIdAndUpdate）\n  async updateUser(ctx) {\n    const user = await User.findByIdAndUpdate(ctx.params.id, ctx.request.body)\n    if (!user) { ctx.throw(404, '用户不存在')}\n    ctx.body = user // 注意：这里修改的是返回之前的信息\n  }\n\n  // 删除（findByIdAndRemove）\n  async deleteUser(ctx) {\n    const user = await User.findByIdAndRemove(ctx.params.id)\n    if (!user) { ctx.throw(404, '用户不存在')}\n    ctx.status = 204 // RESUful API 规范\n  }\n\n}\n\nmodule.exports = new UsersCtl()\n```\n\n\n---\n\n## 🎋第七章：JWT在Koa框架中实现用户的认证与授权\n\n### 1.session简介\n\n- session是一种非常重要，常见的，用户认证与授权\n\n**session工作原理**\n\n- 先登录，然后后端返回一个session id，然后前端再请求非登录的一些信息的时候都需要带上这个，否者报错\n\n<img src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/2.note/5.%E5%85%B6%E4%BB%96%E9%9B%B6%E6%95%A3%E7%AC%94%E8%AE%B0/%E6%85%95%E8%AF%BE%E7%BD%91%E8%AF%BE%E7%A8%8BRESTful%20API/3.png\" />\n\n- session的优势\n  - 相比 JWT，最大的优势就在于可以主动清除session\n  - session保存在服务器端，相对较为安全\n  - 结合 cookie 使用，较为灵活，兼容性较好\n- session的劣势\n  - cookie + session 在跨域场景下表现并不好\n  - 如果是分布式部署，需要做多机共享session机制 🔥\n  - 基于cookie的机制很容易被CSRF\n  - 查询 session 信息可能会有数据库查询操作\n- session相关概念介绍\n  - 主要放到服务器端，相对于安全\n  - cookie 主要放到客户端，并不是很安全\n  - sessionStronge：仅在当前会话下有效，关闭页面或者浏览器后被清除\n  - localstorage：除非被清除，否者永久保存\n\n\n---\n\n### 2.JWT简介\n\n- 什么是JWT？（JSON Web Token 是一个开放标准（RFC 7519））\n- 定义了一种紧凑且独立的方式，可以将各方之间的信息作为JSON对象进行安全传输\n- 该信息可以验证和信任，因为是经过数字签名的\n- JWT的构成：头部（Header）, 有效载荷（Payload）,签名（Signature）\n\n<img src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/2.note/5.%E5%85%B6%E4%BB%96%E9%9B%B6%E6%95%A3%E7%AC%94%E8%AE%B0/%E6%85%95%E8%AF%BE%E7%BD%91%E8%AF%BE%E7%A8%8BRESTful%20API/4.png\" />\n\n**有效载荷介绍（这个挺重要的）**\n\n<img src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/2.note/5.%E5%85%B6%E4%BB%96%E9%9B%B6%E6%95%A3%E7%AC%94%E8%AE%B0/%E6%85%95%E8%AF%BE%E7%BD%91%E8%AF%BE%E7%A8%8BRESTful%20API/5.png\" />\n\n\n**JWT原理**\n\n<img src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/2.note/5.%E5%85%B6%E4%BB%96%E9%9B%B6%E6%95%A3%E7%AC%94%E8%AE%B0/%E6%85%95%E8%AF%BE%E7%BD%91%E8%AF%BE%E7%A8%8BRESTful%20API/6.png\" />\n\n---\n\n### 3. JWT vs session\n\n- 可拓展性\n  - session 一般都是存到 redis 这种数据库中，你可以需要做一个中心式的session存储系统才行，否则没办法共享\n  - 基于 token 基于 令牌的这种方式是无状态的，我们可以轻松的拓展（听着怎么感觉这个很溜 🔥）\n- 安全性（...讲了四个，有空看下吧）\n- RESTful API（要求是无状态的，这就用JWT）\n- 性能（各有利弊）\n  - JWT可能性能不好，因为 session 更小\n  - session 毕竟放到客户端的是一段 id，传到服务器端，服务器端还要根据这个id拿真正的 session 数据，也是有性能消耗的\n- 时效性\n  - JWT 必须等到过期才更新，不能主动销毁\n  - session 可以主动销毁\n\n---\n\n### 4.在 Node.js 中使用 JWT\n\n- 安装：npm i jsonwebtoken\n- 签名：\n- 逆向验证：\n\n```js\nconst jwt = require('jsonwebtoken');\n\n// 签名（参数一，就是传过来的参数，参数二 是秘钥）\ntoken = jwt.sign({name: 'zhu'}, 'test')\n// 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoiemh1IiwiaWF0IjoxNTYxNzI0NTUzfQ.-JVehTSs3neUbRzF__9lTsXEul_rvA5WYNbpx702Eo4'\n\n// 验证（参数一，前端传过来的token，参数二 秘钥）\njwt.verify(token, 'test')\n```\n\n---\n\n### 5.实现用户注册\n\n- 设计用户 Schema\n- 编写保证唯一性的逻辑\n\n```js\n// 设计用户 Schema\nconst userSchema = new Schema({\n    // 这个是自动生成的，但是每次都返回不好，所以我们这里给他设置下，让它不返回\n    __v: {type: Number, select: false},\n    name: { type: String, required: true }, // 第一个表示是字符串这没啥，第二个意思是必写项\n    // select 的意思是不返回，这是密码，如果能被请求到，那是不是很恐怖🙀\n    password: {type: String, required: true, select: false}\n})\n\n// 新建用户（有个查询用户名是否重复）\nasync createUser(ctx) {\n  const { name } = ctx.request.body\n  const repeatedUser = await User.findOne({ name }); // 查询是否有这个用户了\n\n  if (repeatedUser) ctx.throw(409, '用户已经存在');\n  const user = await new User(ctx.request.body).save()\n  ctx.body = user\n}\n```\n\n---\n\n### 6.实现登录并获取 Token\n\n- 登录接口的设计（因为它不属于用户增删改查中的一种）\n- 使用 jsonwebtoken 生成 token\n\n```js\n// 登录\nasync login(ctx) {\n  // 校验用户名和密码\n  const user = await User.findOne(ctx.request.body)\n  if (!user) { ctx.throw(401, '用户名或者密码不正确')}\n  // 登录正确，生成token\n  const { _id, name } = user;\n  const token = josnwebtoken.sign({ _id, name }, key, {expiresIn: '1d'}) // 参数一 账号密码，参数二 秘钥，参数三 配置，这里配置的是过期时间 1d 1天\n  ctx.body = { token }\n}\n```\n\n---\n\n### 7.自己编写中间件实现用户的认证和授权\n\n---\n\n### 8.用koa-jwt中间件实现用户的认证和授权\n\n- 安装：npm i koa-jwt --save\n\n```js\n// 在路由 /routes/users.js\nconst jwt = require('koa-jwt');\nconst auth = jwt({ secret: 'zhukunpeng'}) // 传入秘钥\n\nrouter.post('/user/:id', auth, checkOwner, findUserId) // 根据ID 查询特定用户 数据\n\n// /controller/users.js\n// 权限校验\nasync checkOwner(ctx, next) {\n  if (ctx.params.id !== ctx.state.user._id) {ctx.throw(403, '没有权限查看')}\n  await next();\n}\n```\n\n<img src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/2.note/5.%E5%85%B6%E4%BB%96%E9%9B%B6%E6%95%A3%E7%AC%94%E8%AE%B0/%E6%85%95%E8%AF%BE%E7%BD%91%E8%AF%BE%E7%A8%8BRESTful%20API/7.png\" />\n\n\n---\n\n## 🐲第八章：上传图片模块\n\n### 1.上传图片需求分析\n\n- 用户头像\n- 封面图片\n- 问题和回答中的图片\n- 话题图片\n\n---\n\n- 基础功能：上传图片，生成图片链接\n- 附加功能：限制上传图片的大小和类型，生成高中低三种分辨率的图片链接，生成CDN\n- 上传图片的技术方案\n  - 阿里云OSS等云服务，推荐生成环境下使用\n  - 直接上传到服务器，不推荐在生产环境下使用，因为不稳定\n\n---\n\n### 2.使用 koa-body 中间件获取上传的文件\n\n- 之前我们用的是 koa-bodyparser ，但是这个不支持文件，只支持 JSON 和... ，所以我们用 koa-body 这个中间件\n- 安装：npm i koa-body  --save\n\n```js\n// app.js && 建立 public/uploads 用来盛放上传文件\nconst bodyBody = require('koa-body')\napp.use(bodyBody({\n    multipart: true, // 启用文件传输\n    formidable: {\n        uploadDir: path.join(__dirname, 'app/public/uploads'), // 文件上传路径\n        keepExtensions: true, // 保留拓展名\n    }\n})) // 解析 请求body中的 JSON\n\n// 建立 controller/home.js\nclass HomeCtl {\n\n    // 上传文件\n    upload(ctx) {\n        const file = ctx.request.files;\n        ctx.body = {\n          message: '上传成功'\n        } \n    }\n}\n\nmodule.exports = new HomeCtl()\n\n// 建立 router/home.js\nconst Router = require('koa-router');\nconst router = new Router; // new Router({prefix:'user'}) 这样可以设置路由前缀，也是实用的\nconst { upload } = require('../controller/home');\n\nrouter.post('/upload', upload)\n\nmodule.exports = router\n\n```\n\n---\n\n### 3.使用 koa-static 中间件生成图片链接\n\n- 安装：npm i koa-static --save\n\n```js\n// app.js\nconst koaStatic = require('koa-static')\napp.use(koaStatic(path.join(__dirname, 'app/public/'))) // 生成上传图片链接，这里还启动了静态服务，直接代理我们设置的文件路径\n\n\n// controller/home.js\nconst path = require('path')\nclass HomeCtl {\n    // 上传文件\n    upload(ctx) {\n        const file = ctx.request.files.file;\n        const basename = path.basename(file.path)\n        ctx.body = { url: `${ctx.origin}/uploads/${basename}`}\n    }\n}\nmodule.exports = new HomeCtl()\n\n```\n\n---\n\n### 4.编写前端页面上传文件\n\n```html\n<form action=\"http://localhost:3000/upload\" enctype=\"multipart/form-data\" method=\"POST\">\n  <input type=\"file\" name=\"file\">\n  <button type=\"submit\">上传</button>\n</form>\n```\n\n**返回结果**\n\n```js\n{\n    \"url\": \"http://localhost:3000/uploads/upload_34ca030139713427223a1c8b604b603a.jpg\"\n}\n```\n\n---\n\n## 🍀第九章：个人资料模块\n\n---\n\n### 1.个人资料的 schema 设计\n\n```js\n// module/users.js\nconst mongoose = require('mongoose');\nconst { Schema, model } = mongoose;\n\nconst userSchema = new Schema({\n    __v: {type: Number, select: false},\n    name: { type: String, required: true }, // 第一个表示是字符串这没啥，第二个意思是必写项\n    password: {type: String, required: true, select: false},\n    avatar_url: { type: String }, // 头像的URL\n    gender: { type: String, enum: ['male', 'famale'], default: 'male' }, // 性别，这里后面 enum 是mongoose的可枚举类型，枚举的值是那两个, 后面的是默认值 male\n    handline: { type: String }, // 一句话介绍\n    loacations: { type: [{type: String}]}, // 居住地，类型是字符串数组\n    employments: { // 职业经历\n        type: {\n            company: { type: String }, // 公司\n            job: { type: String } // 职位\n        }\n    }\n})\n\nmodule.exports = model('User', userSchema); // 前面User会在MongoDB里面建立一个集合\n\n```\n\n---\n\n### 2.个人资料的参数校验\n\n```js\n// 还是有一些和 mongoose 不一样的地方，这里要注意\nctx.verifyParams({\n  name: { type: 'string' },\n  avatar_url: { type: 'string', required: false }, // required: false表示非必选\n  gender: { type: 'string', required: false },\n  handline: { type: 'string', required: false },\n  loacations: { type: 'array', itemType: 'string', required: false }, // itemType这是表示数组里面的项是字符串类型，这和mongoose不一样\n  employments: { type:'array', itemType: 'object', required: false }\n})\n```\n\n---\n\n### 🔥3.RESTful API 最佳实践 - 字段过滤\n\n- 有哪些字段显示，哪些字段不显示，有种GrhpQL的感觉\n\n```js\n// 通过 select: false 我们可以隐藏一些返回字段\nconst userSchema = new Schema({\n    __v: {type: Number, select: false},\n    name: { type: String, required: true }, // 第一个表示是字符串这没啥，第二个意思是必写项\n    password: {type: String, required: true, select: false},\n    avatar_url: { type: String }, // 头像的URL\n    gender: { type: String, enum: ['male', 'famale'], default: 'male' }, // 性别，这里后面 enum 是mongoose的可枚举类型，枚举的值是那两个, 后面的是默认值 male\n    handline: { type: String, select: false}, // 一句话介绍\n    loacations: { type: [{type: String}], select: false}, // 居住地，类型是字符串数组\n    employments: { // 职业经历\n        type: {\n            company: { type: String }, // 公司\n            job: { type: String } // 职位\n        },\n        select: false\n    }\n})\n\n// /controller/users.js（主要就是借助mongoose 的 select方法，拼接成 +...+...这种形式）\n\n// 问题就是 现在一个可以，但是两个就不行了\n\n// 查询用户\nasync findUser(ctx) {\n  const { fields } = ctx.query; // 这是以分号隔开的\n  let selectFidlds = null;\n  // 将分号隔开的转为 +...+ 这种形式\n  if (fields) selectFidlds = fields.split(';').filter(f => f).map(f => '+' + f).join('');\n  ctx.body = await User.find().select(`${selectFidlds}`)\n}\n```\n\n---\n\n## 🌳第十章：关注与粉丝模块\n\n### 1.关注与粉丝的 schema 设计\n\n**功能点**\n\n- 关注，取消关注\n- 获取关注人，粉丝列表（用户-用户 多对多关系）\n\n---\n\n```js\nconst userSchema = new Schema({\n  // ......\n  following: { // 关注\n      type: [ { type: Schema.Types.ObjectId, ref: 'User' } ], // 非常好的一个技巧，但是我不太懂\n      select: false\n  }\n})\n\n```\n\n\n---\n\n### 2.RESTful API 风格的关注与粉丝接口\n\n```js\n// controller/users.js\n// 获取用户的关注者\nasync listFollowing(ctx) {\n  const user = await User.findById(ctx.params.id).select('+following').populate('+following')\n  // 获取的关注者是用户的ID，我们正常来说需要遍历这个ID，才能拿到每个关注者的头像和其他信息\n  // 但是 model/users.js 里面的结构那么写，让我们可以使用 populate() 这个快捷方法了\n  if (!user) {ctx.throw(404, '用户不存在')}\n  ctx.body = user.following\n}\n// 用户-关注用户\nasync follow(ctx) {\n  const me = await User.findById(ctx.state.user._id).select('+following')\n  if (!me.following.map(id => id.toString()).includes(ctx.params.id)) {\n    me.following.push(ctx.params.id) // 把数组放到的ID放到里面\n    me.save()\n  }\n  ctx.status = 204\n}\n// 用户-取消关注\nasync unfollow(ctx) {\n  const me = await User.findById(ctx.state.user._id).select('+following')\n  const index = me.following.map(id => id.toString()).indexOf(ctx.params.id)\n  if (index > -1) {\n    me.following.splice(index, 1)\n    me.save()\n  }\n  ctx.status = 204\n}\n// 用户-获取粉丝\nasync listFollowers(ctx) {\n  const users = await User.find({following: ctx.params.id})\n  ctx.body = users\n}\n\n\n// routes/users.js\nrouter.get('/user/:id/following', listFollowing) // 获取某个用户 关注了谁\nrouter.get('/user/:id/followers', listFollowers) // 获取某个用户 关注了谁\nrouter.put('/user/following/:id', auth, follow) // 用户-关注用户\nrouter.delete('/user/following/:id', auth, unfollow) // 用户-取消关注\n```\n\n---\n\n### 3.编写校验用户存在与否的中间件\n\n**在关注，和取消关注之前，校验一下用户存在与否**\n\n```js\n// controller/users.js\n// 检测用户是否存在（中间件）\nasync checkUserExist(ctx, next) {\n  const user = await User.findById(ctx.params.id)\n  if (!user) { ctx.throw(404, '用户不存在')}\n  await next()\n}\n\n// routes/users.js（添加）\nrouter.put('/user/following/:id', auth, checkUserExist, follow) // 用户-关注用户\nrouter.delete('/user/following/:id', auth, checkUserExist, unfollow) // 用户-取消关注\n```\n\n---\n\n## 🌴第十一章：话题模块\n\n### 1.话题增改查接口\n\n**功能模块功能点**\n\n- 话题的增改查（没有删，因为话题关联太多）\n- 分页，模糊查询\n- 用户属性中的话题引用\n- 关注/取消关注话题，用户关注的话题列表\n\n**设计Schema**\n\n```js\n// 建立新文件 modle/topics.js\nconst mongoose = require('mongoose');\nconst { Schema, model } = mongoose;\n\nconst topicSchema = new Schema({\n    __v: {type: Number, select: false},\n    name: { type: String, required: true }, // 话题名称\n    avatar_url: { type: String }, // 话题图片\n    introduction: { type: String, select: false}, // 话题简介\n})\n\nmodule.exports = model('Topic', topicSchema);\n```\n\n**写Controller**\n\n```js\n// 建立新文件 controller/topics.js\nconst Topic = require('../model/topics')\n\nclass TopicsCtl {\n   \n    // 获取话题列表\n    async find(ctx) {\n        ctx.body = await Topic.find();\n    }\n\n    // 查询特定话题\n    async findById(ctx) {\n        // const { fields } = ctx.query\n        // const selectFields = fields.split(';').filter(f => f).map(f => ' +' + f).join('')\n        // const topic = await Topic.findById(ctx.params.id).select(selectFields)\n        const topic = await Topic.findById(ctx.params.id)\n        ctx.body = topic\n    }\n\n    // 创建话题\n    async create(ctx) {\n        ctx.verifyParams({\n            name: { type: 'string', required: true },\n            avatar_url: { type: 'string', required: false },\n            introduction: { type: 'string', required: false }\n        })\n\n        const topic = await new Topic(ctx.request.body).save()\n        ctx.body = topic\n    }\n\n    // 修改话题\n    async update(ctx) {\n        ctx.verifyParams({\n            name: { type: 'string', required: false },\n            avatar_url: { type: 'string', required: false },\n            introduction: { type: 'string', required: false }\n        })\n\n        const topic = await Topic.findByIdAndUpdate(ctx.params.id, ctx.request.body)\n        ctx.body = topic\n    }\n}\n\nmodule.exports = new TopicsCtl()\n```\n\n**写Routes**\n\n```js\n// 建立文件 routes/topics.js\nconst Router = require('koa-router');\nconst router = new Router; // new Router({prefix:'user'}) 这样可以设置路由前缀，也是实用的\nconst { find, findById, create, update } = require('../controller/topics');\nconst jwt = require('koa-jwt');\nconst auth = jwt({ secret: 'zhukunpeng'}) // 传入秘钥\n\nrouter.get('/topics', find) // 查询所有话题\nrouter.post('/topics', auth, create) // 创建话题\nrouter.get('/topics/:id', findById) // 获取特定话题\nrouter.patch('/topics/:id', auth, update) // 修改特定话题\n\nmodule.exports = router\n```\n\n---\n\n### 🔥2.分页实现\n\n**根据查询字符串来限制列表的返回值**\n\n```js\n// 获取话题列表 的分页逻辑（主要是算法）\nasync find(ctx) {\n    const { per_page = 10 } = ctx.query\n    const page = Math.max(ctx.query.page * 1, 1) - 1 // 当前是第几页\n    const perPage = Math.max(per_page * 1, 1) // 每页显示几条\n    // mongoose limit() 可以获取几个，skip() 可以从第几个开始，虽然没有 limit(x, y) 这种好，但是也行\n    ctx.body = await Topic.find().limit(perPage).skip(page * perPage);\n}\n\n// 示例：http://localhost:3000/topics?page=1&per_page=2\n```\n\n---\n\n### 🔥3.模糊搜索（关键词搜索）\n\n**借助mongoose语法糖，一行代码就能实现：在find() 里面写正则**\n\n```js\n// ......\nctx.body = await Topic\n    .find({ name: new RegExp(ctx.query.q) })\n    .limit(perPage).skip(page * perPage);\n\n// mongoose使用多个字段的模糊\n// .find({ $or: [{name: ...}, {...}] })\n```\n\n---\n\n### ❣️4.用户属性中的话题引用\n\n**没太懂，但是这里 type: Schema.Types.ObjectId, ref: 'Topic' 方法是一种引用，类似于MySQL的外链，多表查询用的那种**\n\n---\n\n### 5.关注话题接口（略...）\n\n---\n\n## 🌱第十二章：问题模块\n\n### 1.问题的增删改查，用户的问题列表（用户-问题 一对多关系）\n\n一个用户可以提多个问题，但是一个问题只属于一个用户\n\n**建立 Schema**\n\n```js\nconst mongoose = require('mongoose');\nconst { Schema, model } = mongoose;\n\nconst questionSchema = new Schema({\n    __v: {type: Number, select: false},\n    title: { type: String, required: true }, // 问题标题\n    description: { type: String }, // 描述\n    questioner: { type: Schema.Types.ObjectId, ref: 'User', required: true, select: false}, // 提问者，这个设计是实现 一对多的核心\n})\n\nmodule.exports = model('Question', questionSchema);\n```\n\n**实现 Controller**\n\n```js\n\n```\n\n**❣️这里我突然有一个想法，就是 可以抽象出一个基本类，上面挂载分页方法，模糊查询方法等，甚至增删改查接口也能抽离成公共的，下面的类谁想用了，就直接用继承，然后使用了**\n\n---\n\n### 2.话题-问题 多对多关系\n\n- 思路：两个列表，就是这两个列表都能成为对方的列表\n\n---\n\n## 🌿第十三章：答案模块\n\n### 1.答案模块二级嵌套的增删改查接口\n\n\n---\n\n## 🌾第十四章：评论模块\n\n---\n\n## 🌿第十五章：项目上线，部署\n\n\n### 1.用NGINX实现端口转发\n\n**一般服务器很多端口都没开，一般80端口开了，NGINX 就可以代理80端口，然后访问到内网的具体端口上**\n\n- 语法检查：nginx -t（主要修改nginx.conf）\n- 重启：service nginx restart\n\n<img src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/2.note/5.%E5%85%B6%E4%BB%96%E9%9B%B6%E6%95%A3%E7%AC%94%E8%AE%B0/%E6%85%95%E8%AF%BE%E7%BD%91%E8%AF%BE%E7%A8%8BRESTful%20API/8.png\" />\n\n**Postman生成文档**\n\n- 还是很漂亮的\n\n<img src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/2.note/5.%E5%85%B6%E4%BB%96%E9%9B%B6%E6%95%A3%E7%AC%94%E8%AE%B0/%E6%85%95%E8%AF%BE%E7%BD%91%E8%AF%BE%E7%A8%8BRESTful%20API/9.png\" />\n\n---\n\n## 📚参考列表（最后更新2019.6.23 23:23）\n\n- [慕课网课程-Node.js开发仿知乎服务端 深入理解RESTful API](https://coding.imooc.com/learn/list/354.html)"
  },
  {
    "path": "docs/blog/18.其他/1.爬虫.md",
    "content": "---\ntitle: 1.爬虫\ndate: 2020-05-06 00:00:00\npermalink: \ntag: \n - blog\n - 18.其他\n---\n\n## 🐛 1.爬取内容\n\n爬虫的几种方式\n\n- 1.通过API获取信息\n- 2.通过获取网页源码（通过 require 获取网页返回体 body，然后用正则提取 (.+?) ），但是现在网站越来越复杂，有的还需要登录，甚至还有防护\n- 3.目前主流的是：puppeteer控制chromium来进行抓取数据（这个工具可以通过api来操作浏览器行为，通过这个工具，可以用来写爬虫，自动签到，网页截图，生成paf，自动化测试等）\n\n```js\n// 示例一：博客截图\n\nlet puppeteer = require('puppeteer'); // 记住这里一定要加 ; \n\n(async function() {\n    const browser = await puppeteer.launch({\n        headless: false // 是否打开一个无页面浏览器\n    });\n    const page = await browser.newPage(); // 打开一个空白页面\n    await page.goto('https://notes.itzkp.com'); // 在地址栏中输入博客地址\n    await page.screenshot({path: 'zkp.png'}); // 把当前页面截图，保存到zkp.png中\n    await browser.close(); // 关闭浏览器\n})();\n```\n\n```js\n// 示例二：掘金文章内容获取\n\nlet puppeteer = require('puppeteer');\nlet url = 'https://juejin.cn/user/2788017219055175/posts';\n\n(async function() {\n    const browser = await puppeteer.launch({\n        headless: false // 是否打开一个无页面浏览器\n    });\n\n    const page = await browser.newPage(); // 打开一个空白页面\n\n    // 在地址栏中输入博客地址\n    await page.goto(url, {\n        waitUntil: 'networkidle2'\n    });\n\n    // 获取指定节点属性\n    const titles = await page.$$eval('a.title', element => {\n        return element.map(item => item.innerHTML)\n    })\n    \n    await browser.close(); // 关闭浏览器\n})();\n```\n\n---\n\n## 🐒 2.数据持久化\n\n> 抓的数据不进行持久化就没有意思\n\n- 根据爬取的规则和策略，把爬取到的数据存到数据库中\n- 如果要兼容不同的来源，需要对数据进行格式化\n- 为不同的数据建立索引方便检索\n\n---\n\n## 🐣 3.数据订阅\n\n> 用户可以按照自己的兴趣和需要进行定制内容\n\n---\n\n## 🦑 4.分发\n\n有新数据的时候\n\n- 可以使用邮件推送到订阅者\n- 可以使用极光推送等推送服务\n- 可以使用即时通信服务向客户端推送\n\n---\n\n## 5.小项目一：掘金爬虫\n\n核心步骤\n\n1. 发起HTTP请求获取网页内容\n1. 使用类似jQuery的语法来操作页面提取需要的数据\n1. 把数据保存在数据库中以供查询\n1. 建立一个服务器来显示这些数据\n1. 可以定时爬取数据\n1. 可让程序稳定运行\n1. 对编码进行转换\n\n\n\n\n\n\n"
  },
  {
    "path": "docs/blog/2.HTML/1.HTML基础.md",
    "content": "---\ntitle: 1.HTML基础\ndate: 2020-01-30 00:00:00\npermalink: \ntag: \n - blog\n - 2.HTML\n---\n\n> HTML真的是入门前端的第一个课程，说实话，这里的东西2天就能熟练的掌握，但是不要骄傲呦，因为这只是前端的1%\n\n> 也是基础中的基础，也是根基，要打扎实。\n\n---\n\n## 🍚第一部分：HTML基本结构\n\n### 1.HTML初识\n\n- HTML（超文本标记语言 Hyper Text Markup Language）, 是一种用来描述网页的语言\n- HTML 不是编程语言，而是一种标记语言（相似的还有MD语言，JSX语言，WXML语言，等等都是一种规则而已）\n- 标记语言是一套标记标签\n\n---\n\n### 2.HTML骨架标签\n\n```html\n<!-- 根标签 -->\n<!doctype html>\n<html>\n    <!-- 文档的头部 -->\n    <head>\n        <!-- 文档的标题 -->\n        <title></title>\n    </head>\n    <!-- 文档主体 -->\n    <body>\n\n    </body>\n</html>\n```\n\n**❣️ 注意： doctype html 这个是文档声明，表示这个HTML文件的内容需要按照什么标准（规则）进行解析**\n\n---\n\n### 3.HTML标签基础\n\n**标签分类**\n\n- 双标签：p, a, div, span...\n- 单标签：br, hr...\n\n**标签关系：可以是 嵌套关系 & 并列关系**\n\n---\n\n### 4.DOCTYPE & lang & 字符集\n\n> DOCTYPE 是文档类型的意思，必须写到文档最前面，主要告诉浏览器使用哪种解析规范\n\n> lang 指定我们HTML的语言种类 en 表示是英语，zh-CN 表示中文，还有其他语种\n\n> utf-8 字符集（最常用），更多字符集可自行百度\n\n```html\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <title>Document</title>\n</head>\n<body>\n</body>\n</html>\n```\n\n---\n\n## 🍦第二部分：HTML常用标签\n\n### 1.HTML标签语义化\n\n> 根据标签的语义，在合适的地方使用合适的标签，可以让结构更清晰\n\n- 方便代码维护和阅读\n- 同时让浏览器或网络爬虫可以很好的解析，从而更好的分析其中的内容\n- 使用语义化标签会具有更好的搜索引擎优化\n\n---\n\n### 2.标题标签\n\n> 作为标题使用，有6个等级，重要性依次递减（块级元素）\n\n```html\n<h1>一级标题</h1>\n<h2>二级标题</h2>\n<h3>三级标题</h3>\n<h4>四级标题</h4>\n<h5>五级标题</h5>\n<h6>六级标题</h6>\n```\n\n---\n\n### 3.段落标签 & 水平线标签 & 换行标签\n\n> 锻炼标签 p：可以把HTML文档分割成若干段落（块级元素）\n\n```html\n<p>第一段</p>\n<p>第二段</p>\n<p>第三段</p>\n```\n\n> 水平线标签 hr：一条分割线（单标签，块级元素）\n\n```html\n<hr />\n```\n\n> 换行标签 br: 强制换行（单标签，）\n\n```html\n床前明月光，<br />疑是地上霜。<br />举头望明月，<br />低头思故乡。\n\n<!-- 效果：\n床前明月光，\n低头思故乡。\n举头望明月，\n低头思故乡。\n-->\n```\n\n---\n\n### 4.无语义化标签（div & span）\n\n> div标签：无语义标签，表示盒子，或者区域 常用于布局（div+css）（块级元素）\n\n> span标签：无语义标签，表示跨度，或者区域 （行内元素）\n\n```html\n<div></div>\n<span></span>\n```\n\n---\n\n### 5.文本格式化标签\n\n- b & strong：文字粗体展示（XHTML推荐使用 strong）\n- i & em：文字斜体展示（XHTML推荐使用 em）\n- s & del：文字删除线展示（XHTML推荐使用 del）\n- u & ins：文字下划线展示（XHTML推荐使用 ins）\n\n```html\n<b>粗体展示</b>\n<strong>粗体展示</strong>\n<i>斜体展示</i>\n<em>斜体展示</em>\n<s>删除线展示</s>\n<del>删除线展示</del>\n<u>下划线展示</u>\n<ins>下划线展示</ins>\n```\n\n---\n\n### 6.图像标签 & 标签属性\n\n> img标签：展示图片，需要设置路径属性 src\n\n> 标签属性：<标签名 属性1=“属性值” 属性2=“属性值” ...>...\n\n```html\n<!-- img标签可以设置很多属性 -->\n<img src=\"图片地址\" title=\"文字悬停时候显示的文字\" alt=\"图像加载失败，显示的替换文字\" width=\"宽度\" height=\"高度\" ...>\n\n<!-- ❣️ 拓展：<img onerror=\"xss攻击代码\"> img标签 可以发动XSS攻击 -->\n```\n\n---\n\n### 7.链接标签\n\n> 链接标签a：创建超链接\n\n```html\n<a href=\"跳转地址\" target=\"目标窗口弹出方式\">文字或者图像</a>\n<!-- target: self为默认值，blank为在新窗口打开 -->\n\n<!-- 拓展：阻止a标签跳转 <a href=\"javascript:;\"></a> -->\n```\n\n---\n\n### 8.注释标签\n\n> 注释 没啥好说的\n\n```html\n<!-- 我用注释标签来展示一下注释 -->\n<!--  -->\n```\n\n---\n\n## 🍩第三部分：路径 & 锚点定位\n\n### 1.路径\n\n> 相对路径：相对于某个文件进行的路径导航\n\n- ./ 下一级目录\n- ../ 上一级目录\n\n> 绝对路径：从操作系统的根目录 进行的路径导航\n\n- Winodw: c:\\Users\\...\n- Mac：/Users/zhukunpeng/...\n\n---\n\n### 2.锚点定位\n\n> 通过创建锚点链接，用户能够快速定位到目标内容\n\n```html\n<!-- 1️⃣ 给a设置锚点 #idName -->\n<a href=\"#test\">跳转到目标锚点</a>\n\n<!-- 2️⃣ 设置目标锚点 -->\n<h3 id=\"test\">目标锚点</h3>\n```\n\n---\n\n### 3.拓展标签\n\n> base标签：设置整体网站 链接的打开状态\n\n```html\n<head>\n    <base target=\"_blank\">\n</head>\n```\n\n> 预格式化标签pre：被包裹在pre标签中的文本，通常会保留空格，换行符，文字呈等宽字体\n\n```html\n<pre>\n    床前明月光，\n    疑是地上霜。\n    举头望明月，\n    低头思故乡。\n</pre>\n```\n\n> 有一些特殊符号，在HTML中很难，或者很不方便直接使用，HTML为特殊字符 制定了对应的代替代码\n\n[HTML特殊字符编码对照表](https://www.jb51.net/onlineread/htmlchar.htm)\n\n---\n\n## 🍪第四部分：表格 & 列表\n\n### 1.表格基础\n\n**表格基础标签**\n\n```html\n<!-- 表格 -->\n<table>\n    <!-- tr表示一行 -->\n    <tr>\n        <!-- td 表示一项 -->\n        <td>第一行1</td>\n        <td>第一行2</td>\n        <td>第一行3</td>\n    </tr>\n    <tr>\n        <td>第二行1</td>\n        <td>第二行2</td>\n        <td>第二行3</td>\n    </tr>\n</table>\n\n<!-- 其实上面写完，表格样式还是没有的，因为没有设置一些属性 -->\n```\n\n**🔥表格属性**\n\n- border：设置表格的边框（默认 border=\"0\" 无边框），单位像素\n- cellspacing：设置单元格与单元格边框之间的空白间距，单位像素，默认2像素\n- cellpadding：设置单元格内容与单元格边框之间的空白间距，单位像素，默认1像素\n- width：设置表格的宽度，单位像素\n- height：设置表格的高度，单位像素\n- align：设置表格在网页中的水平对齐方式（left, center, right）\n\n\n---\n\n### 2.表格拓展\n\n> **表头单元格：th**，会让文字加粗，并居中显示\n\n```html\n<table>\n    <tr>\n        <!-- th 表头：文字加粗，并居中 -->\n        <th>表头1</th>\n        <th>表头2</th>\n        <th>表头3</th>\n    </tr>\n    <tr>\n        <td>第二行1</td>\n        <td>第二行2</td>\n        <td>第二行3</td>\n    </tr>\n</table>\n```\n\n> **表格标题：caption**\n\n```html\n<table>\n    <caption>我是表格标题</caption> \n    <tr>\n        <th>表头1</th>\n        <th>表头2</th>\n        <th>表头3</th>\n    </tr>\n    <tr>\n        <td>第一行1</td>\n        <td>第一行2</td>\n        <td>第一行3</td>\n    </tr>\n</table>\n```\n\n> 🔥 合并单元格\n\n- 跨行合并：rowspan=\"合并单元格的个数\"\n- 跨列合并：colspan=\"合并单元格的个数\"\n\n```html\n<table>\n    <caption>简历</caption>\n    <tr>\n        <th>对比</th>\n        <td>1</td>\n        <td>2</td>\n    </tr>\n    <tr>\n        <th>个人介绍</th>\n        <td colspan=\"2\">个人介绍...</td>\n    </tr>\n    <tr>\n        <th>个人作品</th>\n        <td colspan=\"2\">个人作品...</td>\n    </tr>\n</table>\n```\n\n---\n\n**对于复杂表格，可以将表格分为三个部分：表头（thead），正文（tbody），脚注（tfoot）**\n\n```html\n<table>\n    <caption>我是表格标题</caption> \n    <thead>\n        <tr>\n            <th>表头1</th>\n            <th>表头2</th>\n            <th>表头3</th>\n        </tr>\n    </thead>\n    <tbody>\n        <tr>\n            <td>第一行1</td>\n            <td>第一行2</td>\n            <td>第一行3</td>\n        </tr>\n        <tr>\n            <td>第二行1</td>\n            <td>第二行2</td>\n            <td>第二行3</td>\n        </tr>\n    </tbody>\n    <tfoot>\n        <tr>\n            <td colspan=\"3\">备注：</td>\n        </tr>\n    </tfoot>\n</table>\n```\n\n---\n\n### 3.列表\n\n> 无序列表：展示效果就是 左边是 小黑点\n\n```html\n<ul>\n    <li>1</li>\n    <li>2</li>\n    <li>3</li>\n    <li>\n        <div>4</div>\n    </li>\n</ul>\n```\n\n> 有序列表：展示效果是 左边是 有序数字（或者其他有序形式）\n\n```html\n<ol>\n    <li>1</li>\n    <li>2</li>\n    <li>3</li>\n    <li>\n        <div>4</div>\n    </li>\n</ol>\n```\n\n> 自定义列表：通常用于对术语或名词进行解释和描述的\n\n> 例如网站最下面有一连串的跳转链接，大部分都是用 自定义列表来做的\n\n```html\n<dl>\n    <!-- dt是一个总的，dd是对 dt的修饰 -->\n    <dt>配送方式</dt>\n    <dd>上门送货</dd>\n    <dd>海外配送</dd>\n    <dd>自提</dd>\n</dl>\n```\n\n---\n\n## 🍺第五部分：表单\n\n### 1.input控件\n\n> input 就是输入的意思，type属性可以设置不同的 控件类型\n\n**type属性**\n\n- text 单行文本输入框\n- password 密码输入框\n- radio 单选框\n- checkbox 复选框\n- submit 提交按钮\n- reset 重置按钮\n- file 文件域\n- button 普通按钮\n- image 图像形式的提交按钮\n\n**value属性表示的是 值**\n\n**name属性 用于区分表单，主要是发送给后台的时候，好区分**\n\n```html\n账号：<input type=\"text\" value=\"请输入账号\" name=\"username\" />\n密码：<input type=\"password\" name=\"password\" />\n\n<!-- 通过相同 name 来实现 单选效果 -->\n<!-- ❣️ 备注：checked 表示默认选中，常用于单选，多选场景 -->\n性别：男 <input type=\"radio\" name=\"sex\" checked /> | 女 <input type=\"radio\" name=\"sex\" />\n\n<!-- 多选也是通过 name 来实现 -->\n爱好：🎧听歌 <input type=\"checkbox\" name=\"like\" /> | 🏀篮球 <input type=\"checkbox\" name=\"like\" /> | 🏊游泳 <input type=\"checkbox\" name=\"like\" />\n\n<!-- 按钮组：提交 & 重置 都需要在表单域下才能生效，默认value值是 提交 和 重置 -->\n<input type=\"submit\" />\n<input type=\"reset\" />\n<input type=\"button\" value=\"一个纯的按钮\" />\n\n<!-- 其他：图片提交必须包含src属性 -->\n<input type=\"image\" src=\"\" />\n<input type=\"file\" />\n```\n\n**label：不属于表单的标签，但是一般会搭配input一起使用，效果是当点击 label范围的时候，光标自动对焦到input里面**\n\n```html\n<label>\n    账号：<input type=\"text\" value=\"请输入账号\" name=\"username\" />\n</label>\n\n<!-- 还有一种方式：通过for 和 id（如果想了解，自行谷歌） -->\n```\n\n---\n\n### 2.其他表单控件\n\n**1️⃣ textarea文本域：创建多行文本输入框（应用，例如留言板，评论等等）**\n\n```html\n<textarea cols=\"每行中的字符数\" rows=\"显示的行数\">\n    文本内容\n</textarea>\n```\n\n---\n\n**2️⃣ select下拉列表：**\n\n```html\n籍贯\n<select>\n    <!-- selected 表示默认选定项 -->\n    <option selected>--请选择省份--</option>\n    <option>北京</option>\n    <option>上海</option>\n    <option>深圳</option>\n</select>\n```\n\n- ❣️ 拓展：有些网站，下拉是用 ul 来做的，因为 select 在不同浏览器下展示效果不一样，不好控制\n\n---\n\n### 3.表单域form\n\n> 通过form表单域，可以收集表单信息，发送给服务器\n\n```html\n<form action=\"提交到的url地址\" method=\"提交方式（取值是get & post）\" name=\"表单名称\">\n    <!-- ... 各种表单控件 -->\n</form>\n```\n\n---\n\n## 🍹第六部分：自己对HTML的一些胡思乱想\n\n问题一：HTML产生的背景是什么？\n\n---\n\n问题二：HTML为什么会出现，以及它的发展历程\n\n---\n\n问题三：HTML到底是什么（解释给没学过HTML的人听）？\n\n---\n\n问题四：如果你是工作1年的前端那么，HTML到底是什么？\n\n**这里是我自己的回答，如果有更好的，那更好了**\n\n本质上是字符串，最终是 规则的解析，视图的展现\n\n---\n\n问题五：如果你是工作1-3年的前端那么，HTML到底是什么？\n\n**这是来自掘金 小洋粉的分享，感谢，因为感觉内容比我这个一年的理解深刻多了，所有归为了这里[小洋粉掘金地址](https://juejin.im/user/5b0527ab51882542845267d3/)**\n\n语句，函数，对象，名称空间之间的组织关系是颗树。一颗XML树，被解析以后就是颗对象树。所有的标签语言，都是XML的子集，是树的子集。XML标签语言是最适合写UI的格式。最新的swiftUI，HTML ，XAML都是XML格式的UI语言，，\n\n只有在树上的东西才能被查找，不在树上的东西是不存在的无法被查找。所有能被查找到的都能被修改状态。MVVM 的本质就是把XML树转化成的对象树上的属性状态和model对象的属性状态建立映射关系。改变model 对象的状态即是改变了xml属性的状态。从而达到页面状态切换的效果\n\nHTML 是XML的儿子，而XML是树。树，是一种无处不在的存在。。家族族谱是颗树，社会组织结构是颗树，神经系统是颗树，植物结构是颗树，编程语言是颗语法树，目录结构是颗树，进程是颗树，树也是一颗树，世间万物皆可抽象为一颗树。\n\n---\n\n问题六：如果你是工作3-5年的前端那么，HTML到底是什么？\n\n---\n\n问题七：如果你是工作5年以上的前端那么，HTML到底是什么？\n\n---\n\n## 📚参考列表（致敬）\n\n- [博学谷](https://www.boxuegu.com/)"
  },
  {
    "path": "docs/blog/2.HTML/2.HTML5.md",
    "content": "---\ntitle: 2.HTML5\ndate: 2020-01-30 00:00:00\npermalink: \ntag: \n - blog\n - 2.HTML\n---\n\n> HTML5.0 可不只是 将 HTML4 的标签之类进行了改变，而是一个生态，让一些事情成为可能，让前端真正的站了起来\n\n> 注意：这里有部分内容，需要有前端基础\n\n\n---\n\n## 🥗第一部分：标签\n\n### 1.语义化标签\n\n> 本质就是名字不同的 div\n\n```html\n<header></header>\n<footer></footer>\n\n<!-- 语义：导航条 -->\n<nav></nav>\n\n<!-- 语义：文章，可以被直接引用 -->\n<article></article>\n<!-- 语义：一般放到 article里面使用，表示里面的一段-->\n<section></section>\n\n<!-- 语义：侧边栏 -->\n<aside></aside>\n```\n\n---\n\n### 2.视频，音频\n\n> 这俩的属性都一样，就是视频多了一个视频的展示，我觉得这块怎么能说做的好呢？就是仿照腾讯课堂的样式，做一个播放器\n\n```html\n<!-- 视频和音频播放器，在每个浏览器中展示的效果都不一样，如果要展示效果一致的话，要自己封装 -->\n<audio src=\"音频地址\"></audio>\n<video src=\"视频地址\"></video>\n\n\n```\n\n---\n\n## 🍥第二部分：属性\n\n---\n\n## 🍱第三部分：API\n\n---\n\n## 🍛第四部分：canvas（画布）\n\n### 1.基础知识\n\n```html\n<canvas id=\"canvas\"></canvas>\n\n<script>\n\n    let canvas = document.getElementById('canvas')\n    let ctx = canvas.getContext('2d') // 这个可以理解为画笔\n\n    // 线（直线，三角形...）\n    ctx.moveTo(x, y)\n    ctx.lineTo(x, y)\n    ctx.arcTo(B点x， By, C点x, C点y, 弧的数值) // 直线 + 圆弧（可以做圆角矩形）\n\n    // 矩形\n    ctx.rect(x, y, 宽度, 高度) // 画矩形\n    ctx.strokeRect(x, y, 宽度, 高度) // 直接画出来了，都不用写构建路径\n    ctx.fillRect(x, y, 宽度, 高度) // 直接画出来了，都不用写填充路径\n\n    // 圆形（半圆，扇形，弧线，圆形）\n    ctx.arc(圆心x, 圆心y, 半径, 弧度, 方向)\n\n    // 贝塞尔曲线\n    ctx.quadraticCurveTo(x1, y1, x2, y2); // 二次贝塞尔曲线（除了起点，还需要另外两个点）\n    ctx.bezierCurveTo(x1, y1, x2, y2, x3, y3); // 三次贝塞尔曲线（除了起点，还需要三个点）\n\n    // 设置样式\n    ctx.fillStyle = 'red' // 设置填充颜色\n    ctx.strokeStyle = 'blue' // 设置填充颜色\n    ctx.lineWidth = 3 // 设置线条宽度\n    ctx.font = '24px 黑体'\n\n    ctx.fillText('实体文字', 文字显示的x, 文字显示的y); // 设置文字\n    ctx.strokeText('空心文字', 文字显示的x, 文字显示的y); // 设置文字\n\n    // 坐标平移 && 旋转 && 缩放\n    ctx.translate(100, 100) // 修改坐标原点（坐标平移）\n    ctx.rotate(Math.PI) // 旋转（单位是弧度，并且是根据坐标原点进行的旋转）\n    ctx.scale(x点倍数, y点倍数) // 缩放\n\n    // 保存和使用之前坐标系\n    ctx.save() // 保存之前坐标系（可以保存坐标系的平移数据，缩放数据，旋转数据）\n    ctx.restore() // 恢复之前的坐标系\n\n    // 清除画布\n    ctx.clearRect(x, y, 宽度, 高度) \n\n    // 重新开启一个路径\n    ctx.beginPath()\n\n    ctx.closePath() // 闭合路径，针对一个路径才能闭合\n    ctx.stroke() // 构建路径\n    ctx.fill() // 构建填充路径\n \n</script>\n```\n\n**canvas 坐标系统**\n\n<img src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/2.notes/1.HTML/HTML5/1.canvas%E5%9D%90%E6%A0%87%E7%B3%BB.png\" />\n\n---\n\n### 2.画线\n\n> 画线 要有一个起点和终点\n\n```js\nlet canvas = document.getElementById('canvas')\nlet ctx = canvas.getContext('2d')\n\nctx.moveTo(100, 100) // 起点\nctx.lineTo(100, 200) // 终点\nctx.stroke()\n\n// 线端样式（线的两端）\nctx.lineCap = 'butt' // square 给线的两端 添加两个小方块 | round 给线的两端 添加圆角\nctx.lineJoin = 'mitter' // round bevel miter(miterLimit)\n```\n\n---\n\n### 3.画矩形\n\n> 用线也能画矩形，但是麻烦，用 ctx.rect() 更快\n\n```js\nctx.rect(x, y, 宽度, 高度) // 画矩形\nctx.strokeRect(x, y, 宽度, 高度) // 直接画出来了，都不用写构建路径\nctx.fillRect(x, y, 宽度, 高度) // 直接画出来了，都不用写填充路径\n\n\n// 例如：一个一直往下落的矩形\nlet canvas = document.getElementById('canvas')\nlet ctx = canvas.getContext('2d') \nlet height = 0\n\nlet timer = setInterval(() => {\n    ctx.clearRect(0, 0, 500, 500)\n    ctx.strokeRect(100, height, 50, 50)\n    if (height === 450) clearInterval(timer);\n    height += 10;\n}, 50);\n```\n\n---\n\n### 4.画圆\n\n> 需要知道 圆心（x, y），半径（r），弧度（需要用Math.PI表示：起始弧度，结束弧度），方向（顺时针0，逆时针-1）\n\n```js\nlet canvas = document.getElementById('canvas')\nlet ctx = canvas.getContext('2d') \n\n// 基础圆形（扇形，半圆，圆形）\nctx.arc(100, 100, 50, 0, Math.PI, 0)\nctx.fill()\n\n// 圆角矩形\nctx.moveTo(100, 110) // y轴多了10，是一个小技巧\nctx.arcTo(100, 200, 200, 200, 10)\nctx.arcTo(200, 200, 200, 100, 10)\nctx.arcTo(200, 100, 100, 100, 10)\nctx.arcTo(100, 100, 100, 200, 10)\nctx.stroke()\n```\n\n---\n\n### 5.贝塞尔曲线\n\n[贝塞尔曲线，百度百科](https://baike.baidu.com/item/%E8%B4%9D%E5%A1%9E%E5%B0%94%E6%9B%B2%E7%BA%BF/1091769)\n\n```js\n// 二次贝塞尔曲线\nctx.moveTo(100, 100) // 起点\nctx.quadraticCurveTo(200, 200, 300, 100); // 除了起点，还需要另外两个点\n\n// 三次贝塞尔曲线\nctx.moveTo(100, 100) // 起点\nctx.bezierCurveTo(200, 200, 300, 100, 400, 200); // 除了起点，还需要三个点\nctx.stroke()\n\n// 案例：模拟一个波浪\n```\n\n---\n\n### 6.坐标平移 && 旋转 && 缩放\n\n```js\nctx.translate(100, 100) // 修改坐标原点（坐标平移）\nctx.rotate(Math.PI / 6) // 是根据坐标原点进行的旋转\nctx.moveTo(0, 0) // 原来是 100, 100\nctx.lineTo(100, 0)\nctx.stroke()\n\n// 缩放（所有点，都放大scale里面的倍数）\nctx.scale(2, 2)\nctx.strokeRect(100, 100, 100, 100)\n```\n\n---\n\n### 7.save && restore\n\n> canvas的平移和旋转是对于全局来说的，如果想旋转之后的，还按照之前的用，需要先保存之前的，再回复\n\n```js\nctx.save() // 保存之前坐标系（可以保存坐标系的平移数据，缩放数据，旋转数据）\n\nctx.translate(100, 100) // 修改坐标原点（坐标平移）\nctx.rotate(Math.PI / 6) // 是根据坐标原点进行的旋转\nctx.moveTo(0, 0) // 原来是 100, 100\nctx.lineTo(100, 0)\nctx.stroke()\n\nctx.restore() // 恢复之前的坐标系\n```\n\n---\n\n### 8.背景填充\n\n```js\n// 填充颜色\nctx.fillStyle = 'red'\nctx.fillRect(100, 100, 100, 100)\n\n// 填充图片（纹理的填充是以坐标系原点进行填充的）\nlet img = new Image()\nimg.src = 'https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/github%E5%9B%BE%E7%89%87/notes/3.png'\nimg.onload = function () {\n    ctx.translate(100, 100)\n    ctx.fillStyle = ctx.createPattern(img, 'no-repeat')\n    ctx.fillRect(0, 0, 100, 100)\n}\n\n// 线性渐变填充\nlet bg = ctx.createLinearGradient(100, 100, 200, 200);\nbg.addColorStop(0, 'white'); // 渐变起点\nbg.addColorStop(1, 'black'); // 渐变终点（当然中间也能写多个阶段的值）\nctx.fillStyle = bg\nctx.fillRect(100, 100, 100, 100)\n\n// 辐射渐变\nlet bg = ctx.createRadialGradient(150, 150, 0, 180, 180, 180)\nbg.addColorStop(0, 'white'); // 渐变起点\nbg.addColorStop(1, 'black'); // 渐变终点（当然中间也能写多个阶段的值）\nctx.fillStyle = bg\nctx.fillRect(100, 100, 100, 100)\n```\n\n---\n\n### 9.阴影\n\n```js\nctx.shadowColor = 'red'\nctx.shadowBlur = 10;\nctx.fillRect(100, 100, 100, 100)\n```\n\n---\n\n### 10.文字\n\n```js\nctx.fillText('实体文字', 100, 100);\nctx.font = '24px 黑体'\nctx.strokeStyle = 'red'\nctx.strokeText('空心文字', 100, 200);\n```\n\n---\n\n### 11.requestAnimationFrame动画\n\n**动画原理简介**\n\n> 动画的基本原理是依靠人类具有视觉暂留的特性人的眼睛看到一幅画或一个物体后，在 1/24 秒内不会消失（即每秒钟至少更换24张画面）。利用这一原理，在一幅画（一帧）还没消失前播放下一幅画（下一帧），就会给人造成流畅的视觉变化效果。\n\n我们在实现动画的时候，经常用定时器，但是定时器有时候并不精确\n\n**requestAnimationFrame**\n\n> 由于 setTimeout 和 setInterval 的不精准问题，促使了 requestAnimationFrame 的诞生。 requestAnimationFrame 是专门为实现高性能的帧动画而设计的一个API，目前已在多个浏览器得到了支持，你可以把它用在 DOM 上的效果切换或者 Canvas 画布动画中。 requestAnimationFrame 并不是定时器，但和 setTimeout 很相似，在没有 requestAnimationFrame 的浏览器一般都是用setTimeout模拟。 requestAnimationFrame 跟屏幕刷新同步（大多数是 60Hz ）。如果浏览器支持 requestAnimationFrame , 则不建议使用 setTimeout 来做动画。\n\n**requestAnimationFrame 的兼容使用**\n\n```js\n// 下面是我们常规使用 requestAnimationFrame 的兼容写法，当浏览器不兼容的 requestAnimationFrame 时则通过使用 setTimeout 来模拟实现,且设定渲染间隔为 1000ms/60。\n\n// 判断是否有 requestAnimationFrame 方法，如果有则模拟实现\nwindow.requestAnimFrame =\nwindow.requestAnimationFrame ||\nwindow.webkitRequestAnimationFrame ||\nwindow.mozRequestAnimationFrame ||\nwindow.oRequestAnimationFrame ||\nwindow.msRequestAnimationFrame ||\nfunction(callback) {\n    window.setTimeout(callback, 1000 / 30);\n};\n```\n\n**使用 requestAnimationFrame 实现动画**\n\n<img src=\"https://coding.imweb.io/img/p5/requestAnimationFrame.gif\" />\n\n```html\n<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"UTF-8\">\n    <title>认识Canvas</title>\n</head>\n<body>\n    <canvas id=\"canvas\" width=\"500\" height=\"500\" style=\"border: 1px solid #33\"></canvas>\n    <script>\n        var canvas = document.getElementById('canvas');\n        var context = canvas.getContext('2d');\n        // 兼容定义 requestAnimFrame\n        window.requestAnimFrame =\n        window.requestAnimationFrame ||\n        window.webkitRequestAnimationFrame ||\n        window.mozRequestAnimationFrame ||\n        window.oRequestAnimationFrame ||\n        window.msRequestAnimationFrame ||\n        function(callback) {\n            window.setTimeout(callback, 1000 / 30);\n        };\n\n        // 绘制的圆的对象\n        var circle = {\n            x: 250,\n            y: 250,\n            radius: 50,\n            direction: 'right',\n            // 移动圆形\n            move: function() {\n                if (this.direction === 'right') {\n                    if (this.x <= 430) {\n                         this.x += 5;\n                    } else {\n                        this.direction = 'left';\n                    }\n                } else {\n                    if (this.x >= 60) {\n                         this.x -= 5;\n                    } else {\n                        this.direction = 'right';\n                    }\n                }\n            },\n            draw: function() {\n                // 绘制圆形\n                context.beginPath();\n                // 设置开始角度为0，结束角度为 2π 弧度\n                context.arc(this.x, this.y, this.radius, 0, 2 * Math.PI, false);\n                context.fillStyle = '#00c09b';\n                context.fill();\n            }\n        }\n        // 动画执行函数\n        function animate() {\n            // 随机更新圆形位置\n            circle.move();\n            // 清除画布\n            context.clearRect(0, 0, canvas.width, canvas.height);\n            // 绘画圆\n            circle.draw();\n            // 使用requestAnimationFrame实现动画循环\n            requestAnimationFrame(animate);\n        }\n\n        // 先画第一帧的圆，即初始化的圆\n        circle.draw();\n        // 执行animate\n        animate();        \n    </script>\n</body>\n</html>\n```\n\n---\n\n### 12.键盘事件处理\n\n> 在制作 PC 端的游戏的时候，我们经常需要监听键盘的事件，以便响应用户的键盘操作。目前，对键盘事件的支持主要遵循的是 DOM0级。\n\n**按键相关事件**\n\n- keydown：当用户按下键盘上的任意键时触发，而且如果按住按住不放的话，会重复触发此事件。\n- keypress：当用户按下键盘上的字符键时触发，而且如果按住不放的，会重复触发此事件（按下Esc键也会触发这个事件）。\n- keyup：当用户释放键盘上的键时触发。\n\n**按键过程**\n\n- 首先会触发 keydown 事件\n- 然后紧接着触发 keypress 事件\n- 最后触发 keyup事件\n- 如果用户按下了一个字符键不放，就会重复触发 keydown 和 keypress 事件，直到用户松开该键为止。\n\n**键码（keyCode）对照表**\n\n<img src=\"https://coding.imweb.io/img/p5/keycode.png\" />\n\n**简单实现键盘控制物体移动**\n\n<img src=\"https://coding.imweb.io/img/p5/keyboard.gif\" />\n\n```html\n<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"UTF-8\">\n    <title>物体移动</title>\n</head>\n<body>\n    <canvas id=\"canvas\" width=\"500\" height=\"500\"></canvas>\n    <script>\n      var canvas = document.getElementById('canvas');\n      var context = canvas.getContext('2d');\n      var rect = {\n        x: 100, // 矩形的 x 坐标\n        y: 400, // 矩形的 y 坐标\n        width: 100, // 矩形的宽度\n        height: 100, // 矩形的高度\n        step: 30 // 矩形移动的步伐\n      }\n      // 全局监听键盘操作的 keydown 事件 \n      document.onkeydown = function(e) {  \n        // 获取被按下的键值 (兼容写法)\n        var key = e.keyCode || e.which || e.charCode;\n        switch(key) {\n          // 点击左方向键\n          case 37: \n            rect.x -= 20;\n            drawRect();\n            break;\n          // 点击上方向键\n          case 38: \n            rect.y -= 20;\n            drawRect();\n            break;\n          // 点击右方向键\n          case 39: \n            rect.x += 20;\n            drawRect();\n            break;\n          // 点击下方向键\n          case 40: \n            rect.y += 20;\n            drawRect();\n            break;\n        } \n      };\n      function drawRect() {\n        // 清除画布\n        context.clearRect(0, 0, canvas.width, canvas.height);\n        // 绘制矩形\n        context.fillRect(rect.x, rect.y, rect.width, rect.height);\n      }\n      // 第一次绘制\n      drawRect();\n    </script>\n</body>\n</html>\n```\n\n---\n\n### 13.碰撞检测\n\n**矩形物体碰撞检测**\n\n<img src=\"https://coding.imweb.io/img/p5/crash-rect.png\" />\n\n```js\n// 判断四边是否都没有空隙\nif (!(rect2.x + rect2.width < rect1.x) &&\n    !(rect1.x + rect1.width < rect2.x) &&\n    !(rect2.y + rect2.height < rect1.y) &&\n    !(rect1.y + rect1.height < rect2.y)) {\n    // 物体碰撞了\n}\n```\n\n**圆形物体碰撞检测**\n\n<img src=\"https://coding.imweb.io/img/p5/crash-distance.png\" />\n\n```js\nvar dx = circle2.x - circle1.x;\nvar dy = circle2.y - circle1.y;\nvar distance = Math.sqrt((dx * dx) + (dy * dy));\nif (distance < circle1.radius + circle2.radius) {\n  // 两个圆形碰撞了\n}\n```\n\n---\n\n## 🍚第五部分：存储\n\n---\n\n## 🍢第六部分：交流\n\n---\n\n## 🍧第七部分：工作线程\n\n---\n\n## 🍩第八部分：位置感知\n\n---\n\n## 📚参考列表（致敬）\n\n- 《Head First HTML5 Programming》\n- [腾讯课堂](https://ke.qq.com)"
  },
  {
    "path": "docs/blog/3.CSS/1.CSS基础.md",
    "content": "---\ntitle: 1.CSS基础\ndate: 2020-01-30 00:00:00\npermalink: \ntag: \n - blog\n - 3.CSS\n---\n\n> 注意此处：内容不全，结构完整...\n\n> 前端几乎所有的展示都是用 CSS来写的，你甚至可以 只精通CSS，就能有一个好工作\n\n> 但是注意，CSS的水很深，这里只是最基础的整理，里面的内容 几乎5天就能学会，总之就是无论何时，对CSS这个技术要保持敬畏\n\n## 🌎第一部分：CSS入门\n\n### 0.CSS的发展历史\n\n[CSS的发展历史](https://www.jianshu.com/p/4257a6f40c28)\n\n### 1.CSS样式表的使用\n\n**行内式（内联样式）**\n\n```html\n<div style=\"内容\"></div>\n```\n\n**内部样式表**\n\n```html\n<head>\n    <style type=\"text/css\">\n        /* 内容 */\n    </style>\n</head>\n```\n\n**外部样式**\n\n```html\n<head>\n    <link ref=\"stylesheet\" type=\"text/css\" href=\"css文件路径\" />\n</head>\n```\n\n**❣️ 备注：因为CSS发展了很多年，人们越来越想省事，所以出了预处理器，前处理器，后处理器都有 | 还有CSS命名也是个玄学**\n\n---\n\n### 2.CSS基础选择器\n\n> CSS选择器就是 把我们想要的标签选择出来的\n\n- 标签选择器 标签名\n- id选择器 #id名称\n- 类选择器 .类名\n- 通配符选择器 *\n\n**拓展：突然想到一个道题（一个BUG），就是多少个类选择器权重 可以覆盖掉 id选择器的权重**\n\n---\n\n### 3.CSS复合选择器\n\n- 后代选择器：父级 子级（#father .chilren）\n- 子元素选择器：父级>子级（只选离父级最近的一级，孙级之后都不选中）\n- 交集选择器：div#app 既是div标签，id又是app的标签（既是 又是 的关系）\n- 并集选择器：a, p, div, span, #app（一下选择多个，一起设置的选择器）\n- 伪类选择器：用于对某些选择器添加特殊的效果\n    - 链接伪类\n        - a:link：未访问的链接\n        - a:visited：已访问的链接\n        - a:hover：鼠标移动到链接上\n        - a:active：选定的链接\n    - 结构伪类\n\n---\n\n### 4.font字体\n\n```css\n/* 字体大小 | px单位，像素 | em单位，相当于当前对象内文本的字体尺寸 | ... */\nfont-size: 16px;\n\n/* 字体 | 多个字体会一个个找，前面的没有，就应用下一个，都没有就走系统默认的 */\nfont-family: '宋体', Arial, '微软雅黑';\n\n/* 字体粗细 | normal 默认不加粗 | bold 加粗 | 400以下等同于normal | 700以上等同于 bold */\nfont-weight: 500;\n\n/* 字体风格 | normal 默认值 | italic 倾斜 */\nfont-style: italic\n\n/* 字体综合写法（不能更改顺序）：font: font-style font-weight font-size/line-height font-family */\nfont: normal 500 20px '微软雅黑'\n/* 有一些可以省略，但是 字体 和 字体大小 不能省略 */\n```\n\n---\n\n## 🌝第二部分：CSS外观样式\n\n### 1.color（文本颜色）\n\n> 主要用于定义文本的颜色\n\n```html\n<style>\n.test {\n    color: #666;\n    /* color: blue; */\n    /* color: rgb(255, 0, 0); */\n    /* color: rgb(100%, 0%, 0%); */\n    /* color: rgba(255, 0, 0, 1); */\n}\n</style>\n```\n\n---\n\n### 2.line-height（行间距）\n\n```html\n<style>\n.text {\n    line-height: 20px\n    /* 行高 = 标签高度，就可以实现 文字垂直居中对齐 */\n}\n</style>\n```\n\n---\n\n### 3.text-align（文本水平对齐方式）\n\n```html\n<style>\n.text {\n    text-align: center;\n    /* 文字 水平居中对齐 */\n    /* text-align: left; */\n    /* text-align: right; */\n}\n</style>\n```\n\n---\n\n### 4.text-indent（首行缩进）\n\n```html\n<style>\n.text {\n    /* 1em 就是1个字的宽度 | em就是字符宽度的倍数 */\n    text-indent: 2em;\n}\n</style>\n```\n\n---\n\n### 5.text-decoration（文本装饰，通常给a链接修改装饰效果）\n\n```html\n<style>\n.text {\n    /* none，定义标准的文本，取消下划线（常用） */\n    text-decoration: none;\n    /* underline：定义文本下的一条线，就跟a标签下的那个一样 */\n    /* overline： 定义文本上的一条线 */\n    /* line-through：定义穿过文本的一条线（贯穿） */\n    /* blink：闪烁（我也没看见闪呀） */\n}\n</style>\n```\n\n---\n\n## 🌛第三部分：CSS背景及应用\n\n### 1.背景颜色\n\n---\n\n### 2.背景图片\n\n---\n\n### 3.背景平铺\n\n---\n\n### 4.背景位置\n\n---\n\n## 🌙第四部分：标签显示模式 & CSS盒模型\n\n> 标签的显示模式（display）主要有，行内，块级，行内块\n\n- 块级：独占一行，高度，宽度，内外边距都可以控制（常见的有h1~h6, div, ul, ol, li, p）\n- 行内：一行显示多个，高宽直接设置无效，默认宽度是它自身内容的宽度，行内元素只能容纳文本或者行内元素（常见的有 a, span, em, s, ...）\n- 行内块：一行可以显示多个，可以设置宽高（常见的有 img, input, td）\n- 相互转换：display: block, inline, inline-block\n\n---\n\n## ⭐️第五部分：CSS三大特性\n\n---\n\n## 🌟第六部分：浮动 & 清除浮动\n\n---\n\n## 💫第七部分：定位\n\n---\n\n## ✨第八部分：其他\n\n## 📚参考列表（致敬）\n\n- [博学谷](https://www.boxuegu.com/)\n"
  },
  {
    "path": "docs/blog/3.CSS/2.CSS3.md",
    "content": "---\ntitle: 2.CSS3\ndate: 2020-01-30 00:00:00\npermalink: \ntag: \n - blog\n - 3.CSS\n---\n\n> CSS3不和HTML5一样是一个生态，而是 拓展了CSS的基础，使其更加的好用，但是还不具有现代化的特性\n\n> 但是不要担心，一些预处理器和后处理器 弥补了 CSS不现代化的一些问题\n\n## 🥟第一部分：新增选择器\n\n> 前言：新增的选择器真是好用，不用多谢一些类名了，起名字我可真是难受\n\n**备注：类选择器，属性选择器，伪类选择器，权重都是10**\n\n### 1.属性选择器\n\n```html\n<button class=\"btn1\">按钮</button>\n<button class=\"btn2\" disabled='disabled'>按钮</button>\n```\n\n```css\n/* 属性选择器 */\nbutton[disabled] { }\n\n/* 两个按钮都能选中 */\nbutton[class^=\"btn\"] { }\n\n/* att$='' 具有att属性，并且以...结尾的 */\n/* att*='' 具有att属性，并且含有...的 */\n```\n\n### 2.结构伪类选择器\n\n> 所谓结构，就是指，是第几个\n\n```html\n<div>\n  <p>1</p>\n  <p>2</p>\n  <p>3</p>\n  <p>4</p>\n  <p>5</p>\n<div>\n```\n\n```css\n/* 匹配父元素div 中子元素 p 的第一个 */\ndiv p:first-child { }\n\n/* 匹配父元素div 中子元素p 的最后一个 */\ndiv p:last-child { }\n\n/* 匹配父元素div 中子元素p 的第n个子元素（🔥 n可以是公式，是公式的时候从0开始） */\ndiv p:nth-child(n) { }\n\n/*  \n* 🔥 这个和上面唯一不同的是，上面是按照顺序的，建议使用下面这个，否则稍微复杂一点的选择就做不了\n*/\ndiv p:first-of-type { }\ndiv p:last-of-type { }\ndiv p:nth-of-type(n) {}\n\n```\n\n\n### 3.伪元素选择器\n\n```html\n<div class=\"app\"></div>\n```\n\n```css\n/* 在元素内部的前面插入内容 */\n.app::before {\n  /* 必有 */\n  content: '内容'\n}\n\n/* 在元素内部的后面插入内容 */\n.app::after { }\n\n/* 🔥 备注：这个属于行内元素，并且权重和标签选择器一样，都是1 */\n```\n\n## 🥡第二部分：媒体查询（media）\n\n```css\n@media mediatype and|not|only (media feature) { }\n/* mediatype 媒体类型 | all 所有设备 | print 用于打印机和打印机预览 | scree 用于电脑屏幕，平板，手机等 */\n/* 关键字 and 且 | not 非 | only 指定 */\n/* media feature 媒体特性 | width 宽度 | min-width | max-width */\n\n/* 例如：在屏幕上并且屏幕大于 1024px 的时候 触发 */\n@media scree and (max-width: 1024px) { }\n\n```\n---\n\n**引入资源**\n\n> 这个需求是，当页面是小屏幕的时候，就引入小屏幕的css，这个怎么做？\n\n```html\n<link rel=\"stylesheet\" media=\"mediatype and|not|only (media feature)\" href=\"xxx.css\"></link>\n```\n\n## 🥬第三部分：动画\n\n> 动画（animation）可以通过设置多个节点来精确的控制一个或者一组动画，常用来实现复杂的动画效果\n\n**先定义动画，再使用动画**\n\n```css\n/* 定义动画（经常和transform一起使用） */\n@keyframes 动画名称 {\n  /* form 也代表了开始 */\n  0% {\n\n  }\n  50% {\n    \n  }\n  ...\n  /* to 也代表了结束 */\n  100% {\n    \n  }\n}\n\n/* 使用动画 */\n.test {\n  animation-name: 动画名称;\n  animation-duration: 持续时间(2s);\n  /* 运动曲线，默认是ease */\n  animation-timing-function: ease;\n  /* 何时开始（可以实现延迟执行） */\n  animation-delay: 1s;\n  /* 重复多少次，默认一次，infinite 无限 */\n  animation-iteration-count: 1;\n  /* 是否进行逆向播放 | 默认是 normal | 如果想的话，就写 alternate */\n  animation-direction: normal;\n  /* 规定浏览器是否正在运行或者暂停 默认是running | pause 是暂停 */\n  animation-play-state: running;\n  /* 规定动画结束后状态，保持 forwards | 回到原始状态 backwards */\n  animation-fill-mode: backwards;\n}\n\n/* 🔥 简写（只有前两个必须写） */\nanimation: 动画名称 持续运行时间 运动曲线 何时开始 播放次数 是否反方向 动画开始或者结束时候的状态\n```\n\n## 🥤第四部分：2D,3D转换\n\n### 1.2D转换\n\n> 转换（transform）CSS3中具有颠覆性的特征之一，可以实现元素的位移，旋转，缩放等效果\n\n```css\n/* 🔥 移动，可以改变元素在页面中的位置，类似于定位（要有单位，px...） */\ntransform: translate(x, y);\ntransform: translateX(n);\ntransform: translateY(n);\n\n/* 🔥 transform的优点：不会影响到其他元素的位置，对行内元素没有效果，百分比单位是相对于自身元素来说的 */\n\n/* 使用 transform 实现水平垂直居中 */\n.test {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  transform: translate(-50%, -50%);\n}\n```\n\n---\n\n> 旋转（rotate）是指让元素在二维平面内顺时针或者逆时针旋转\n\n```css\ntransform: rotate(度数)\n\n/* 旋转45度，如果写正值就是顺时针，如果 -45deg 就是逆时针 */x\ntransform: rotate(45deg);\n\n/* 🔥 设置旋转中心点（缩放中心点也是这么设置） 默认中心点事元素中心（50%, 50%），单位可以是像素，也可以是方向名词（top,left...） */\ntransform-origin: x y;\n```\n\n---\n\n> 缩放（scale）控制元素的放大和缩小\n\n```css\ntransform: scale(x, y);\n\n/* x, y 都放大两倍，简写是 transform: scale(2) */\ntransform: scale(2, 2)\n\n/* scale的优势：不会影响其他盒子，而且可以设置缩放的中心点 */\n```\n\n---\n\n## 🥥第五部分：移动端rem适配布局\n\n### 1.简介\n\n> 问题引入\n\n- 页面布局文字是否随着屏幕大小变化而变化？\n- 流式布局和flex布局主要针对宽度布局，那高度如何设置呢？\n- 怎么让屏幕发生变化的时候，元素宽度和高度等比缩放呢？\n\n### 2.rem适配以及原理\n\n> rem是一个单位（root em），类似于em，em是父元素字体大小，不同的是rem的基准是相对于html元素的字体大小，因为html是唯一的，所以就实现了 在各个屏幕下的适配\n\n**js版本适配**\n\n```js\n!(function(win, doc) {\n    var htmlDom = doc.getElementsByTagName('html')[0];\n    var resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize';\n    var recalc = function() {\n        var htmlWidth = doc.documentElement.clientWidth || doc.body.clientWidth;\n        htmlDom.style.fontSize = htmlWidth / 10 + 'px';\n    };\n\n    if (!doc.addEventListener) return;\n    win.addEventListener(resizeEvt, recalc, false);\n    doc.addEventListener('DOMContentLoaded', recalc, false);\n}(window, document));\n```\n\n## 📚参考列表（致敬）\n\n- 日常工作\n- [博学谷](https://www.boxuegu.com/)"
  },
  {
    "path": "docs/blog/3.CSS/3.预处理器和后处理器.md",
    "content": "---\ntitle: 3.预处理器和后处理器\ndate: 2020-01-30 00:00:00\npermalink: \ntag: \n - blog\n - 3.CSS\n---\n\n> 注意此处：内容不全，结构完整...\n\n> 什么都不说了，神器，都不知道那时候的人咋想的，能想出来这些东西，大大提高了 CSS的书写体验\n\n> 并且后来集成到前端工程化之中，使其成为其中重要的一环\n\n> 预处理器：代表是 less, sass, 等，为什么叫前处理器呢，因为它们都是将 .less 或者 .sass 的语法转为 .css，不会添加一些厂商前缀等操作\n\n> 后处理器：代表是 Postcss等，它会在 .css的基础上（注意，这里是.css的基础上，所以是后处理）添加一些厂商前缀等操作\n\n## 🥭第一部分：Less（预处理器）\n\n### 1.CSS的弊端\n\n- CSS是一种非程序式的语言，没有变量，函数，作用域等概念\n- CSS需要书写大量没有逻辑的代码，冗余度很高\n- CSS没有很好的计算能力（例如px转rem...）\n\n---\n\n### 2.Less基本使用\n\n> Less（Leaner Style Sheets）是一门CSS拓展语言（CSS预处理器），引入了变量，Mixin（混入），运算以及函数等功能\n\n- 安装less：npm install less -g\n- 编译less：easyless（vs code 插件），或者集成到webpack中进行编译\n\n```css\n/* index.less */\n\n/* 变量名不能包含特殊字符，不能以数字开头，并且大小写敏感 */\n@color: pink;\n\n/* 嵌套 */\n.test {\n  .test1 {\n    /* & 表示自己，写伪类的时候有用 */\n    &:hover {\n\n    }\n  }\n}\n\n/* Less运算 支持 加减乘除 */\n@borderpx: 10px;\ndiv {\n  width: 200px + @borderpx;\n  height: (20px + @borderpx) / 2;\n}\n\n```\n\n## 🧁第二部分：Sass（预处理器）\n\n## 🧂第三部分：Postcss（后处理器）\n\n## 📚参考列表（致敬）\n\n- [博学谷](https://www.boxuegu.com/)\n"
  },
  {
    "path": "docs/blog/3.CSS/4.现代化CSS.md",
    "content": "---\ntitle: 4.现代化CSS\ndate: 2020-01-30 00:00:00\npermalink: \ntag: \n - blog\n - 3.CSS\n---\n\n> 如果你CSS掌握的不错，那么可以来更深的探索一下CSS了，下面的内容就是为你准备的\n\n> 内容我没有写全，但是一个结构是有的\n\n---\n\n## 🍀第一部分：CSS分层 & 面向对象\n\n**前言：CSS就是一个类，有继承，封装**\n\n\n---\n\n### 1.简介\n\n为什么要有CSS分层，因为如果不分层的话，项目大的话，你的CSS会乱成一团的\n\n<img src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/2.notes/2.CSS/CSS%E6%B7%B1%E5%85%A5%E5%BA%94%E7%94%A8/4.CSS%E4%B8%BA%E4%BB%80%E4%B9%88%E8%A6%81%E5%88%86%E5%B1%82.png\" />\n\n---\n\n### 2.BEM\n\n---\n\n### 3.ACSS（原子CSS）\n\n---\n\n### 4.其他分层思想\n\n---\n\n\n## 🎋第二部分：CSS Houdini\n\n---\n\n### 1.CSS Houdini介绍（现在还是没有应用上，了解的还是少）\n\n**CSS Houdini 提供了API, 能让程序员控制浏览器的重绘重排过程**\n\n<img src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/2.notes/2.CSS/CSS%E6%B7%B1%E5%85%A5%E5%BA%94%E7%94%A8/5.CSS%20H%E4%BB%8B%E7%BB%8D.png\" />\n\n\n<img src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/2.notes/2.CSS/CSS%E6%B7%B1%E5%85%A5%E5%BA%94%E7%94%A8/6.CSS%20H%20API.png\" />\n\n---\n\n## 🌱第三部分：CSS与数学\n\n---\n\n### 1.CSS矩阵\n\n**概念（了解概念就行了，我现在也是不懂）**\n\n<img src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/2.notes/2.CSS/CSS%E6%B7%B1%E5%85%A5%E5%BA%94%E7%94%A8/1.css%E7%9F%A9%E9%98%B5%E6%A6%82%E5%BF%B5.png\" />\n\n\n**学习矩阵有什么用么？**\n\n- 粗浅的举一个例子：transform 实现的原理，在浏览器中就是矩阵的应用\n\n<img src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/2.notes/2.CSS/CSS%E6%B7%B1%E5%85%A5%E5%BA%94%E7%94%A8/2.%E7%9F%A9%E9%98%B5%E5%BA%94%E7%94%A8.png\" />\n\n\n---\n\n### 2.一些工具网站\n\n**2D矩阵 转 3D矩阵，可以开启硬件加速，调用GPU，提高性能，让GPU直接合成层，节省了重绘和重排（还是不太懂）**\n\n<img src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/2.notes/2.CSS/CSS%E6%B7%B1%E5%85%A5%E5%BA%94%E7%94%A8/3.css%E5%B7%A5%E5%85%B7.png\" />\n\n## 📚参考列表（致敬）\n\n- [腾讯课堂](https://ke.qq.com)\n"
  },
  {
    "path": "docs/blog/4.JavaScript/1.JavaScript根基.md",
    "content": "---\ntitle: 1.JavaScript根基\ndate: 2020-01-30 00:00:00\npermalink: \ntag: \n - blog\n - 4.JavaScript\n---\n\n> 注意此处：内容不全，结构完整，等待完善...\n\n> JavaScript的基础 决定了你的高度，建议熟读 红宝石 和 绿犀牛🦏\n\n## 🐲第零章：JavaScript简介\n\n### 1.什么是JavaScript\n\n- JavaScript是世界上最流行的脚本语言（不需要编译，边运行边解析）\n- JavaScript可以增强浏览器交互\n- JavaScript可以运行在服务端（Node.js）\n- 移动端JavaScript（HTML5让JavaScript赋予了神一般的能力，穿透了所有的端 iOS，android,window, mac, linux）\n\n---\n\n### 2.JavaScript的历史\n\n<img src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/2.note/4.%E6%8A%80%E6%9C%AF%E6%A0%B9%E5%9F%BA%E7%AC%94%E8%AE%B0/JS%E6%A0%B9%E5%9F%BA/8.png\" />\n\n---\n\n### 3.JavaScript的组成\n\n- ECMAScript: JavaScript用法\n- DOM：JavaScript操作网页上的元素的API\n- BOM：JavaScript操作浏览器的部分功能的API\n\n---\n\n### 4.引入JavaScript\n\n```html\n<!-- 行内式 -->\n<div onclick=\"alert(123)\"></div>\n\n<!-- 嵌入式 -->\n<srcipt>\n    alert(123)\n</srcipt>\n\n<!-- 外部引用 -->\n<script type=\"text/javascript\" src=\"./index.js\"></script>\n\n<!-- 🔥 script标签的属性 -->\nsrc：规定外部脚本文件的URL\nasync: 立即异步下载脚本，但是不影响下载HTML（仅适用于外部引用脚本）| 值 async\ndefer ...\ncharset ...\n```\n\n\n### 5.浏览器的组成（拓展）\n\n- shell部分（能看到的，浏览上边，设置，历史记录，下载记录这些用户能够操作的）\n- 内核部分（看不到的，但是能让浏览器运行起来的部分）\n  - 渲染引擎（语法规则和渲染）\n  - JS引擎\n  - 其他模块（负责异步等）\n\n---\n\n## 🌵第一章：JavaScript基础语法\n\n### 1.标识符命名规则\n\n- 标识符也就是 变量，函数，属性，参数等的名字（Js是区分大小写的）\n- 标识符第一个字符只能是 字母，下划线（_），或者美元符号（$）\n\n---\n\n### 2.变量\n\n```js\n// Number 数值类型\nvar a = 123 // ES3\nlet b = 123 // ES6 推荐\n\n// String 字符类型\nlet c = 'Hello World'\n\n// Boolean 布尔类型\nlet d = true\n\n// Array 数组类型\nlet e = [1, 2, 3]\n\n// Function 函数类型\nlet f = function fn() {}\n\n// Object 对象类型（引用类型）\nlet g = {}\n\n// 变量可以先声明，后赋值\nlet h;\nh = 1;\nh = [1, 2, 3] // 变量类型可以变化类型（❌ 不推荐）\n```\n\n---\n\n### 3.关键字和保留字\n\n> 不能把关键字、保留字、true、false和null用作标识符。\n\n> js中的关键字可用于表示控制语句的开始或结束，或者用于执行特定操作等。按照规则，关键字也是语言保留的，不能用作标识符。以下就是ECMAScription的全部关键字：\n\n> **break、else、new、var、 case、  finally 、 return、 void 、 catch  、for  、switch 、 while 、 continue、  function  、this 、 with 、default 、 if 、 throw 、 delete 、 in 、  try 、do 、 instranceof、  typeof**\n\n> ECMA还描述了另外一组不能用作标识符的保留字。尽管保留字在这门语言中还没有任何特定的用途，但它们有可能将来被用作关键字。下面是ECMA第3版定义的全部保留字：\n\n> **abstract 、 enum   、int 、 short 、 boolean  、export  、interface、  static、  byte  、extends 、 long 、 super 、 char 、 final  、native  、synchronized 、 class  、float 、 package  、throws 、 const  、goto  、private 、transient 、 debugger 、 implements  、protected 、 volatile 、 double  、import  、public**\n\n> 在代码中使用关键字作为标识符在大多数浏览器中都会倒是“Identifier Expected”（缺少标识符）错误。而使用保留字可能不会导致同样的错误，这要视具体的浏览器而定。一般来说，最好不要使用关键字和保留字作为标识符，一遍与ECMAScript未来的版本保持兼容。\n\n> 本文摘自 《JavaScripti 高级程序员设计（第2版）》 \n\n---\n\n### 4.JavaScript数据类型\n\n```js\n// ===== ES3基础类型 =====\n\n// 数值类型（Number）\n123\n\n// 布尔类型（Boolean）\ntrue false\n\n// 字符串类型（String）\n'hello world'\n\n// 未定义类型（undefined）\nundefined\n\n// null类型（本质上是一个特殊的object）\nnull\n\n// Object类型（引用类型）\n{}\n\n// Function类型（函数类型）\nfunction fn() {}\n\n// ===== ES6新增类型 =====\n```\n\n---\n\n\n\n## 🌴第二章：数值（Number）\n\n### 1.数值类型\n\n- Number类型包括了所有的数字类型（小数，整数，正负数，实数等）\n- 整数，合理的取值范围是 2的-53次方 - 2的53次方\n- 小数（浮点数），如果以0开头，可以省略，例如 .3 === 0.3\n- 表示十六进制：以0x开头的数据\n\n---\n\n### 2.浮点数\n\n- 浮点数的最高精度只有17位数，一般情况够用\n- 浮点数的原理：一个浮点数由：符号位，指数，尾数表示\n- 浮点数不能精确的表示小数，只能取近似值\n\n**这里还有更高级的一些解释**\n\n---\n\n### 3.数据的范围\n\n看浏览器的具体支持，有的不一样\n\n```js\n// 以谷歌浏览器举例\n\nNumber.MAX_VALUE // 最大值 1.7976931348623157e+308\nNumber.MIN_VALUE // 最小值 5e-324\n\n// 超过这个范围之后 -Infinity，Infinity\n```\n\n---\n\n### 4.NaN\n\n- NaN：not a number，是数字类型，是非常特殊的数字类型值\n- paresInt('s')，把字符串s转为 数值类型，会出错，就会返回 NaN\n- 涉及NaN的所有操作都会返回 NaN\n- 可以使用 isNaN 判断一个值是不是 NaN\n\n---\n\n### 5.算数运算符\n\n```js\n// 加号\n1 + 1 // 2\n\n// 减号\n1 - 1 // 0\n\n// 乘号\n2 * 2 // 4\n\n// 除号\n2 / 2 // 1\n\n// 取余\n5 % 3 // 2\n```\n\n---\n\n## 🌱第三章：字符（String）\n\n### 1.字符串类型\n\n- 字符串：由字符组成的串\n- toString() 可以将其他类型的转为字符串（其实直接 '' + 也可以实现）\n\n```js\nlet name = '朱昆鹏'\n\n// ES6\nlet test = `my name is ${name}` // my name is 朱昆鹏\n```\n\n---\n\n### 2.字面量转义\n\n```js\nlet a = 'hello '1' // 语法错误\nlet b = 'hello \\'1' // 语法正确\n\n// \\n 换行 | \\t 制表符 | \\b 空格\n// \\r 回车 | \\f\n// \\\\ \\ | \\' ' | \\\" \"\n```\n\n---\n\n## 🍃第四章：布尔（Boolean）\n\n### 1.布尔类型\n\n- 布尔类型只有两个值：真 true，假 false（区分大小写，两个都是小写）\n\n```js\n10 < 9 // false\n1 === 1 // true\nNaN === NaN // false\n```\n\n---\n\n## 🎄第五章：逻辑运算\n\n### 1.乘法运算符\n\n- 除了正常的规则，乘法运算符还遵循下面规则\n    - 数值如果超过 ECMAScript 范围，会展示 Infinity 或 -Infinity\n    - 如果有一个操作数是 NaN，则结果是 NaN\n    - Infinity * 0 为 NaN（其余为 Infinity）\n    - 如果一个操作数不是数值，相乘的话会先转换为 数值类型，再相乘\n\n```js\n'1' * 2 // 2\n'zhu' * 2 // NaN | 因为 'zhu' 转为 数值类型为 NaN\n```\n\n---\n\n### 2.除法运算符\n\n- 除了正常的规则，乘法运算符还遵循下面规则\n    - 数值如果超过 ECMAScript 范围，会展示 Infinity 或 -Infinity\n    - 如果有一个操作数是 NaN，则结果是 NaN\n    - Infinity / Infinity 为 NaN（其余为 Infinity）\n\n```js\n// 备注\n0 / 0 // NaN\n\n0 / 1 // 0\n0 / 2 // 0\n\n1 / 0 // Infinity\n2 / 0 // Infinity\n```\n\n---\n\n### 3.求余运算符\n\n---\n\n### 类型转换\n\n**很多语言中都有类型转换，例如 '123' 这是字符串类型，我们可以通过类型转换变为 123，这种类型转换是最常用的，JavaScript中的类型转换坑还是比较多的，所以我要整理一下这里，做到了解，并尽量避免发生隐式类型转换**\n\n---\n\n**显示类型转换**\n\n```js\n\n// 显示类型转换的方法\n\nNumber() // 转为数值类型\nparseInt() // 转为整数\nparseFloat() // 转为浮点数\nBoolean() // 转为布尔类型 \nString() // 转为字符串\nxxx.toString() // 转为字符串（undefind 和 null 不能转，会报错，因为这两个上面没有toString()）\n\n```\n\n---\n\n**隐式类型转换**\n\n```js\n\n// ❣️ 数字优先原则，如果有数字能触发隐式的话，先触发数字转换\n\n// isNaN() 传入其中的参数先调用Number()进行转换，再和NaN进行比较\nisNaN(1) // false\nisNaN(true) // fasle\nisNaN(NaN) // ture\nisNaN('zhu') // ture| Number('zhu') // NaN\n\n// 加加 减减 正号 负号 隐式调用Number()\n++ -- + -\n\n// 加号 会隐式调用 toString，例如 'zhu' + 1 ==> 'zhu1'\n+\n\n// 隐式调用 Number()\n- * / %\n\n// 会触发类型转换，具体调用哪个转换方法，根据情况来\n&& || !\n\n// 会触发类型转换，具体调用哪个转换方法，根据情况来\n// < > <= >=\n\n// 会触发类型转换，具体调用哪个转换方法，根据情况来\n== !=\n\n// 特殊的\nundefined == null // true\nNaN === NaN // false 谁都不等\n=== !== // 不发生类型转换\n\n```\n\n---\n\n## 🌿第六章：数组（Array）\n\n---\n\n\n## 🌲第七章：函数（Function）\n\n### 1.函数基础\n\n```js\n\n// ****** 🔥定义函数（有两种，函数声明 和 函数表达式）******\n\n// 函数声明\nfunction fn1 () {\n\n}\n\n// 函数表达式\nlet fn2 = function () {\n\n}\n// 1. function () {} 这种叫做匿名表达式\n// 2. (function () {})()  这个是IIEF立即执行函数（立即执行函数还有好几种）\n// 3. 函数调用我就不写了...\n\n\n\n// ****** 🔥函数的参数 ******\n\n// 函数的参数，可以传递任何类型，包括一个函数，并且实参或者形参都不限制位数\n// 什么形参，实参，我就不想解释了\n// arguments 是js函数的 实参列表（类数组），我也不解释了\n\n\n// ****** 🔥函数的返回值 ******\n\n// 1.如何函数里面没写 return 那么会默认返回 undefined\n\n```\n\n---\n\n### 2.函数的属性和方法\n\n**属性**\n\n- name: 函数名\n- arguments: 实参列表\n- length: \n- caller: \n\n**方法**\n\n- apply(): 改变this指向\n- bind(): 改变this指向\n- call(): 改变this指向\n- toString(): 将函数转为字符串（是真的转为字符串了）\n\n---\n\n### 3.递归\n\n---\n\n### 4.call/apply（改变this指向）\n\n- call 需要把实参按照形参的个数穿进去\n- apply 只能传一个值，那个值必须是数组（有就是实参列表，arguments）\n- 他们两个都只有一个功能，就是 改变 this 的指向，然后根据这个现象 可以导出一个功能，那就是  借助别人的方法来实现自己的功能\n\n<img src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/2.note/4.%E6%8A%80%E6%9C%AF%E6%A0%B9%E5%9F%BA%E7%AC%94%E8%AE%B0/JS%E6%A0%B9%E5%9F%BA/3.png\" />\n\n\n\n---\n\n## 🍀第八章：对象（Object）\n\n**对象是引用类型**\n\n### 1.对象的基本使用\n\n```js\n\n// 对象定义（对象字面量 推荐）\nlet me = {\n\n    name: '朱昆鹏',\n    age: 20,\n\n    // 方法\n    say: function () {\n        console.log(me.age) // 20\n        console.log(this.age) // 20，this 其实就是 AO 里面的一个属性，具体可以看3.JavaScript深入\n    },\n\n    // 方法的另一种写法（ES6）\n    look () {}\n\n}\n\n\n// 对象属性的增删改查\nme.test = '测试属性' // 增\ndelete me.test // 删 | 后期可以知道 一个对象的对象，能不能被删除其实都可以控制的（Object.defineProperties)\nme.age = 21 // 改\nme.age // 21 查\n\n\n// 其他定义对象的方式\n\n// 1.构造函数创建对象（需要new）\nlet obj1 = new Object() // 系统自带的构造函数 Object()\nlet obj2 = new Zhu() // 自己写的一个构造函数\n\n// 2.\nlet obj = Object.create(null)\n\n```\n\n---\n\n### 2.构造函数示例\n\n**这里面就涉及到this，具体请看3.JavaScript深入 this解释**\n\n```js\n\nfunction Car (carName) {\n\n    // 属性\n    this.name = carName || 'BMW'\n    \n    // 方法\n    this.run = function () {\n        console.log(this.name + '跑了起来')\n    }\n}\n\nlet byd = new Car('byd')\nlet dz = new Car('dz')\n\nbyd.run() // byd跑了起来\ndz.run() // dz跑了起来\n\n```\n\n---\n\n### 3.new 操作符做了什么（构造函数内部原理）\n\n- 第一步：在函数体最前面隐式的加上 this = {}\n- 第二步：执行 this.xxx = xxx\n- 第三步：隐式的返回this\n\n**我们根据这三步，来写一个显示的函数，不用new，看看是否能达到上面的效果**\n\n```js\n\nfunction Car (carName) {\n\n    let that = {} // this 是关键字，不行，所以，我们用 that 代替，效果是一样的\n\n    // 属性\n    that.name = carName || 'BMW'\n    \n    // 方法\n    that.run = function () {\n        console.log(that.name + '跑了起来')\n    }\n\n    return that\n}\n\nlet byd = Car('byd')\nlet dz = Car('dz')\n\nbyd.run() // byd跑了起来\ndz.run() // dz跑了起来\n\n```\n\n---\n\n**❣️❣️❣️ 因为new 最后隐式的返回了对象，这个对象中如果有 函数的话，就会形成闭包，也就是这个函数具有 构造函数的作用域**\n\n```js\n\nfunction Zhu () {\n    \n    this.age = 20,\n\n    this.addAge =  function () {\n        this.age += 1\n    }\n\n}\n\nlet zhu1 = new Zhu() // 产生 Zhu 的 AO 和 addAge的 AO \nlet zhu2 = new Zhu() // 产生 Zhu 的 AO 和 addAge 的 AO ，注意 这里面的\n\nzhu1.addAge() // 这里的 addAge 里面有三个作用域：0 addAge的AO，1 Zhu的AO，和GO\nzhu1.age // 21\n\nzhu2.addAge() // 这里的 addAge 里面有三个作用域：0 addAge的AO，1 Zhu的AO，和GO，但是其中的 Zhu的AO 和 上面的不一样，虽然内容一样，但是相互独立的\nzhu2.age // 21\n\n// ❓ 在运用我发现，Zhu 和 zhu1.addAge 都只有两个作用域 Script 和 Global 这是为什么\n\n```\n\n**❣️如果使用了new关键字的话，因为有隐式返回，所以就算在函数中写返回，还是会被忽略**\n\n---\n\n### 4.原型，原型链\n\n**首先要明确：函数也是对象，是对象都有 __proto__ 和 constructor，函数有特定的属性 prototype**\n\n- 原型（prototype）：是function对象的一个属性，它定义了构造函数制造出来的对象的公共祖先\n    - 通过该构造函数产生的对象，可以继承该原型的属性和方法，原型也是一个对象，利用原型的特点和概念，可以提取公共属性\n    - 对象查看原型 __ proto __\n    - 拓展：对象如何查看 对象的构造函数 --> constructor\n- 原型链：\n\n```js\n\nfunction Zhu () { }\nZhu.prototype.say = function () {\n    console.log('我会说话')\n}\n\nlet zhu1 = new Zhu()\nlet zhu2 = new Zhu()\n\n```\n\n**啥都不说，补一张图，什么都明白了（有空话一张）**\n \n\n---\n\n### 5.继承实现\n\n- 继承需要满足两个，一个是继承属性，一个是继承方法\n    - 继承属性：父.call(this, ...)\n    - 继承方法：将父的prototype给 子类，并且让 子类的 constructor 保持正常（一般是写一个方法做这个事情）\n\n```js\n// 最佳实践\nfunction Father (name) {\n    this.name = name\n}\nFather.prototype.say = funciton () { }\n\n// 如何让 Son 继承 Father\nfunction Son (name) {\n    Father.call(this, name) // 继承属性\n}\n\ninheritPropertype(Father, Son)\n\n// 继承方法的函数（可能还有其他的版本，但是大致意思是 将父的prototype给 子类，并且让 子类的 constructor保持正常）\nfunciton inheritPropertype(father, son) {\n    let protoType = Object.create(father.prototype)\n    prototype.constructor = son\n    son.prototype = protoType\n}\n\n```\n\n**❣️ ES6 有了 Class之后，继承方便了很多，所以上面那种方式，一般感觉只有面试可以用到**\n\n---\n\n### 6.包装类\n\n我们知道在JavaScript中有原始值和引用值，原始值是没有属性和方法的，但是包装类产生的原始值是有的\n\n- new String()\n- new Boolean()\n- new Number()\n\n```js\n\nlet num1 = 100;\nnum1 // 100 是没有属性和方法的\n\nlet num2 = new Number(100)\nnum2 // Number {100} 是有属性和方法的\nnum2 + 1 // 101 可以参与运算，运算之后就变为了原始值\n\n// 解释一个匪夷所思的问题\nnum1.length = 1\nconsole.log(num1.length) // undefined，为什么不报错？，因为先隐式的调用了 包装类\n\n\n\n// ******* 试题一 *******\nlet str = 'zhu'\nstr = str + 1\nlet test = typeof str // 'string'\nif (test.length == 6) { // test.length // undefined\n    test.sign = '返回'\n}\nconsole.log(test.sign) // undefined\n```\n\n---\n\n### 7.命名空间,对象枚举\n\n**对象枚举（又叫对象属性遍历）**\n\n- 我们的数组很好遍历，for 循环就可以搞定，但是 你的对象怎么遍历呢 ？\n- for in 循环 ：实现对象的遍历\n\n<img src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/2.note/4.%E6%8A%80%E6%9C%AF%E6%A0%B9%E5%9F%BA%E7%AC%94%E8%AE%B0/JS%E6%A0%B9%E5%9F%BA/5.png\" />\n\n**但是这个有个问题，就是通过 for in 遍历对象，也可以把对象的原型链上的属性遍历出来，怎么办呢？  ----->  hasOwnProperty() 参数传入字符串类型的属性名，返回布尔值，表示是否是自己的属性**\n\n<img src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/2.note/4.%E6%8A%80%E6%9C%AF%E6%A0%B9%E5%9F%BA%E7%AC%94%E8%AE%B0/JS%E6%A0%B9%E5%9F%BA/6.png\" />\n\n**拓展 ：in 操作符 ：判断你是否可以访问到某个属性（和 hasOwnProperty() 的功能不同哦）（基本用不到，了解就可以）**\n\n- 重点拓展 ：instanceof \n  - a instanceof A   // 判断 a对象 是否是 A构造函数构造出来的 （当然这个用法没有想象的那么简单）（ a instanceof Object 也会返回 true）\n  - 其实根本的理解应该是 ：判断a对象的原型链上 有没有 A的原型\n- 这个instanceof解决了一个很重要的问题，就是之前，typeof [ ]   typeof { }  返回的都是 object 没办法区分\n  - 第一种方法 ：constraint\n  - 第二种方法 ：instanceof\n  - 第三种方法 ：Object.prototype.toString.call(里面写需要判断的)\n\n---\n\n### undefined类型及null区别\n\n---\n\n## 🎋第九章：日期（Data）\n\n### 1.日期对象基础\n\n---\n\n### 2.Date 常用API\n\n```js\nnew Date() // 创建一个时间对象 Fri Jul 12 2019 19:59:59 GMT+0800 (中国标准时间)\n\n// 返回自1970年1月1日 00:00:00 UTC到当前时间的毫秒数。\nDate.now(); // 1562932828164\n\n// 解析一个表示某个日期的字符串，并返回从1970-1-1 00:00:00 UTC 到该日期对象（该日期对象的UTC时间）的毫秒数\nDate.parse('2019.7.12') // 1562860800000\n\n// 年月日时分秒 获取\nlet dateMe = new Date()\n\ndateMe.getFullYear() // 2019 | 根据本地时间返回指定日期的年份\ndateMe.getMonth() // 6 | 根据本地时间，返回一个指定的日期对象的月份，为基于0的值（0表示一年中的第一月）。\ndateMe.getDate() // 12 | 根据本地时间，返回一个指定的日期对象为一个月中的哪一日（从1--31）\ndateMe.getHours() // 20 |根据本地时间，返回一个指定的日期对象的小时。\ndateMe.getMinutes() // 11 | 根据本地时间，返回一个指定的日期对象的分钟数。\ndateMe.getSeconds() // 29 | 方法根据本地时间，返回一个指定的日期对象的秒数\ndateMe.getMilliseconds() // 363 | 根据本地时间，返回一个指定的日期对象的毫秒数。\n\ndateMe.toJSON() // 🔥 \"2019-07-12T12:05:15.363Z\" | 返回 Date 对象的字符串形式\ndateMe.getDay() // 5 | 根据本地时间，返回一个具体日期中一周的第几天，0 表示星期天（0 - 6）\ndateMe.getTime() // 1562933115363 | 方法返回一个时间的格林威治时间数值。\ndateMe.toString() // \"Fri Jul 12 2019 20:05:15 GMT+0800 (中国标准时间)\" | 返回一个字符串，表示该Date对象\ndateMe.getTimezoneOffset() // -480（说明比正常时区慢480分钟，所以要加480分钟才对） | 返回协调世界时（UTC）相对于当前时区的时间差值，单位为分钟。\ndateMe.toDateString() // \"Fri Jul 12 2019\" | 以美式英语和人类易读的形式返回一个日期对象日期部分的字符串。\n\n```\n\n[MDN 更多详细](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Date)\n\n---\n\n### 3.定时器\n\n```js\n\n// 定时循环器（一直循环执行），会返回一个数字，作为唯一标识，可以用于清除定时器\nlet timer = setInterval( () => {\n}, 1000)\n\n// 清空定时器\nclearInterval(timer)\n\n// 定时器（推迟一段时间执行）\nlet timer = setTimeout( () => {\n}, 1000)\n\n// 清除定时器\nclearTimeout(timer)\n\n// ❣️是全局window上的方法，内部的this指向window\n\n```\n\n---\n\n## 🍄第十章：正则（Regex）\n\n### 1.正则基础\n\n```js\n\n// 🔥 创建一个正则表达式\nconst regex1 = /ab+c/gi;\nconst regex2 = new RegExp(\"ab+c\", \"gi\");\n\n// 🔥 JS正则表达式的方法 \n\n//【判断】test：一个在字符串中测试是否匹配的RegExp方法，它返回true或false\nlet str = 'hello world';\n/world/.test(str); // true\n/ /.test(str); // true\n/good/.test(str); // false\n\n//【替换】replace：一个在字符串中执行查找匹配的String方法，并且使用替换字符串替换掉匹配到的子字符串\nlet str = 'hello world'\nlet repStr = str.replace('world', 'replace') // 注意不会改变原内容\nconsole.log(repStr) // \"hello replace\"\n\n//【分隔】split 使用正则表达式 或 一个固定字符串分隔 一个字符串，返回 分隔后的子字符串数组\nlet str = 'hello RegExp';\nstr.split(' '); // [\"hello\", \"RegExp\"]\nstr.split('hello'); // [\"\", \"RegExp\"]\nstr.split('l'); // [\"he\", \"\", \"o RegExp\"]\nstr.split('good') // [\"hello RegExp\"]\n\n// exec：一个在字符串中执行查找匹配的RegExp方法，它返回一个数组（未匹配到则返回null）\n\n// search：一个在字符串中测试匹配的String方法，它返回匹配到的位置索引，或者在失败时返回-1（略）\n\n// match：一个在字符串中执行查找匹配的String方法，它返回一个数组或者在未匹配到时返回null（略）\n\n\n```\n\n**正则匹配规则速查**\n\n<img src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/1.quickcheck/4.%E5%85%B6%E4%BB%96/1.png\" />\n\n---\n\n## 🌾第十一章：其他内置对象\n\n---\n\n## 🌻第十二章：DOM\n\n### 1.DOM基本解释\n\n**什么是DOM**\n\nDOM（document object model） 文档对象模型，定义了表示和修改文档的方法，DOM对象既为宿主对象，由浏览器厂商定义，用来操作HTML和XML功能的一类对象的集合（web标准编程接口）\n\nDOM结构树（先用网上的图，后期自己画一下）\n\n<img src=\"https://upload-images.jianshu.io/upload_images/10312944-e129b1a7aaf0a987.png\" />\n\n---\n\n### 2.常用DOM接口\n\n```js\n\n// 获取DOM节点\ndocument.getElementById() // 通过ID获取\ndocument.getElementsByTagName() // 标签名\ndocument.getElementsByClassName() // 类名\ndocument.querySelector() // 通过选择器获取一个元素\ndocument.querySelectorAll() // 通过选择器获取一组元素\ndocument.body // 获取body的方法\ndocument.getElementsByName(name) // 通过name属性查找元素节点\ndocument.documentElement // 获取html的方法\n\n// 节点类型\n元素节点（标签） // 属性nodeType返回值1\n属性节点（标签里的属性）// 返回值2\n文本节点 // 返回值3\n注释节点（comment） // 返回值8\ndocument // 返回值9\nDocumentFragment // 返回值11\n\n// 节点接口\ndom元素.parentNode // 返回当前元素的父节点\ndom元素.childNodes // 子节点们\ndom元素.firstChild // 第一个子节点\ndom元素.lastChild // 最后一个子节点\ndom元素.nextSibling // 后一个兄弟节点 previousSibling -> 前一个兄弟节点\n\n// 元素节点接口\ndom元素.parentElement // 返回当前元素的父元素节点\ndom元素.children // 返回当前元素的元素子节点\ndom元素.firstElementChild // 第一个元素子节点（IE不兼容）\ndom元素.lastElementChild // 最后一个元素子节点（IE不兼容）\ndom元素.nextElementSibling // 返回后一个兄弟元素节点\ndom元素.previousElementSibling // 返回前一个兄弟元素节点\n\n// 节点的四个属性和一个方法\n节点.nodeName // 元素的标签名，以大写形式表示（只读）\n节点.nodeValue // Text节点或者Comment节点的文本内容，（读写）\n节点.nodeType // 该节点的类型（只读）\n节点.attributes // Element节点的属性集合\n节点.hasChildNodes() // 判断节点 是否有子节点\n\n// Element节点的 属性和方法\ndom元素.innerHtml\ndom元素.innerText\ndom元素.attributes // 获取元素身上所有属性构成的集合\ndom元素.setAttribute(\"属性名\",\"属性值\")// 给元素设置属性和属性值\ndom元素.getAttribute(\"属性名\")// 获取属性值的方法\ndom元素.removerAttribute(\"属性\") // 删除属性\n\n\n// ============== 操作接口 ==================\n\n// 增\ndocument.createElement() // 创建元素节点\ndocument.createTextNode() // 创建文本节点\ndocument.creaetComment() //创建注释节点\ndocument.createDocumentFragment() // 创建文档碎片节点\n\n// 插\n父元素节点.appendChild(子元素对象) // 在元素节点的子元素最后插入子元素\n父元素节点.insertBefore(父元素中的子元素a, 需要插入的子元素b) // 最后的结果是，父元素节点中 b元素插入到了 a的前面\n\n\n// 删\n元素节点.remove() // 删除DOM元素（自己）\n父元素节点.removeChild(子元素节点) // 删除子元素\n\n// 替换\n父元素节点.replaceChild(新的节点, 需要被替换的子节点)\n\n// 复制\n元素节点.cloneChild() // 返回值是 复制出来的节点\n\n// 查看滚动条的滚动距离\nwindow.pageXOffset // x轴滚动距离\nwindow.pageYOffset // y轴滚动距离\ndocument.body.scrollLeft // x轴滚动距离（兼容低版本IE）\ndocument.body.scrollTop // y轴滚动距离（兼容低版本IE）\n// 如何兼容，因为如果有 pageXOffset，那么另一个兼容性的结果就是0，所以相加就能解决兼容性问题了\n\n// 让滚动条滚动\nwindow.scroll(x, y) // 滚动到某个位置\nwindow.scrollTo(x, y) // 滚动到某个位置\nwindow.scrollBy(x, y) // 累加滚动，就是每执行一次，就滚动多少位置\n\n// 查看视口的尺寸\nwindow.innerWidth // 视口的宽度\nwindow.innerHeight // 视口的高度\ndocument.documentElement.clientWidth // 兼容低版本IE\ndocument.documentElement.clientHeight // 兼容低版本IE\ndocument.body.clientWidth // 兼容怪异模式\ndocument.body.clientHeight //兼容怪异模式\ndocument.compatMode // 查看渲染模式 | 'CSS1Compat' 标准模式 | 'BackCompat' 怪异模式\n\n// 查看元素的几何尺寸\ndom元素.offsetWidth // 元素的宽度\ndom元素.offsetHeight // 元素的高度\ndom元素.offsetLeft // 元素相当于父级的位置（如果父级有定位的话，如果没有就是相对于文档的距离）\ndom元素.offsetTop // 元素相对于父级的位置（如果父级有定位的话，如果没有就是相对于文档的距离）\ndom元素.offsetParent // 返回最近有定位的父级DOM节点\n\n// 脚本化css\ndom元素.style // 查看所有样式表接口（内容可读可写）\ndom元素.style. = ... // 碰到float这样的保留字，前面加css，例如 cssFloat\ndom元素.style.width = ...\ndom元素.style.backgroundColor = ...\ndom元素.className = ...\n\nwindow.getComputedStyle(ele, null) // 返回某个元素，最后展示效果的 样式表对象（CSSStyleDeclaration）| 只读 | IE8以下不兼容\n\n```\n\n---\n\n### 3.DOM继承树\n\n<img src=\"https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1567450094844&di=b6a47996f4baad433acfd0ec74d4d2eb&imgtype=0&src=http%3A%2F%2Faliyunzixunbucket.oss-cn-beijing.aliyuncs.com%2Fjpg%2Fdcef2cf7735f46627c7d9dfec51d1caa.jpg%3Fx-oss-process%3Dimage%2Fresize%2Cp_100%2Fauto-orient%2C1%2Fquality%2Cq_90%2Fformat%2Cjpg%2Fwatermark%2Cimage_eXVuY2VzaGk%3D%2Ct_100\" />\n\n**有那么几点需要注意❣️**\n\n- getElementById 方法定义在 Document.prototype 上（Element节点不能使用）（感觉这点面试的时候可以问，可以问出来面试者的DOM节点基础）\n- getElementsByName 方法定义在HTMLDocument.prototype上（非document节点不能使用）\n- getElementsByTagName 方法定义在 Document.prototype 和 Element.prototype\n- HTMLDocument.prototype定义了一些常用属性，body, head分别指代HTML文档中的 body 和 head 标签\n- Document.prototype 上定义了documentElement属性，指代元素的根元素，在HTML文档中，他总是指代 html 元素\n- getElementsByClassName,querySelectAll,querySelector在 Document.prototype, Element.prototype类中均有定义\n\n---\n\n### 4.试题\n\n**遍历某元素节点树（在原型链上编程）**\n\n```js\n\n```\n\n**封装函数，返回某元素的第n层祖先元素节点**\n\n```html\n<body>\n    <div>\n        <strong>\n            <span>\n                <i></i>\n            </span>\n        </strong>\n    </div>\n</body>\n\n<script type=\"text/javascript\">\n\nfunction retParent(ele, n) {\n    \n    while(elem && n) {\n        ele = ele.parentElement\n        n--\n    }\n\n    return ele\n}\n\n</srcipt>\n```\n\n\n**编辑函数，封装myChildren功能，解决以前部分浏览器兼容性问题**\n\n```js\nElement.prototype.myChildren = function () {\n    \n    let child = this.childNodes,\n        len = child.length,\n        arr = []\n    \n    for (let i = 0; i < len; i++) {\n        child[i].nodeType === 1 ? arr.push(child[i]) : ''\n    }\n\n    return arr\n}\n```\n\n**自己封装hasChildren()方法，不可用children属性**\n\n```js\nElement.prototype.myHasChildren = function () {\n    \n    let child = this.childNodes,\n        len = child.length,\n        arr = []\n    \n    for (let i = 0; i < len; i++) {\n        if (child[i].nodeType === 1) {\n            return true\n        } else {\n            return false\n        }\n    }\n}\n```\n\n**封装函数，返回元素e的第n个兄弟元素节点，n为正，返回后面的兄弟元素节点，n为负，返回前面的，n为0，返回自己**\n\n```js\n\nfunction retSibling(e, n) {\n    \n    whild(e && n) {\n\n        if (n > 0) {\n            if (e.nextElementSibling) {\n                e = e.nextElementSibling\n            } else {\n                for (e = e.nextSibling; e.nodeType != 1; e = e.nextSibling)\n            }\n\n            n--\n        } else {\n            e = e.previousElementSibling\n            n++\n        }\n\n        return e\n    }\n}\n\n```\n\n**封装函数insertAfter()，功能类似 insertBefore()，当然我可以封装一个更强大的**\n\n```js\nfunction insertAfter(newElement, targetElement){\n\t\n    let parent = targetElement.parentNode // 父节点\n\t\n    // 如果最后的节点是目标元素，则直接添加\n\tif (parent.lastChild == targetElement) {\n\t\tparent.appendChild(newElement)\n\t} else {\n\t\t//如果不是，则插入在目标元素的下一个兄弟节点 的前面\n\t\tparent.insertBefore(newElement,targetElement.nextSibling)\n\t}\n\n}\n```\n\n---\n\n### 5.JS和DOM的关系\n\n- google chrome 使用 webkit 中的 webCore库来渲染页面，但JavaScript引擎是他们自己研发的，名字叫做 V8\n- safari中的DOM和渲染使用 webkit中的 webcore实现，JavaScript部分是由独立的 SquirelFish引擎实现\n- firefox的JavaScript引擎名为 TraceMonkey，与名为Gecko的渲染引擎相互独立\n- 在IE中，JavaScript的实现名为JSscript，位于jscript.dll文件中，DOM的实现则存在另一个库中，名为mshtml.dll（内部称之为trident）\n\n---\n\n## 🌾第十三章：BOM\n\n### 1.BOM基础介绍\n\nBOM（browser object model），简称浏览器对象模型。主要处理浏览器窗口（window）和框架（iframe），描述了与浏览器进行交互的方法和接口，可以对浏览器窗口进行访问和操作，不过通常浏览器特定的JavaScript拓展都被看作BOM的一部分。拓展如下\n\n- 弹出新的浏览器\n- 移动，关闭浏览器窗口以及调整窗口大小\n- 提供 web刘浏览器详细信息的定位对象\n- 对cookie的支持\n\n---\n\n**❣️ DOM的组成**\n\n- window JavaScript层级中的顶层对象（表示浏览器窗口）\n- Navigator 包含客户端浏览器信息\n- History 包含了浏览器窗口访问的URL\n- Location 包含了当前URL的信息\n- Screen 包含客户端显示屏的信息（基本不用，兼容性太差了）\n\n---\n\n### 2.Window对象（BOM核心）\n\nwindow对象是 BOM的顶层对象，window对象它是一个双重角色，既是通过JS访问浏览器窗口的一个接口，有是一个全局对象。\n\n这意味着在网页定你要的任何对象，变量和函数，都是window的属性（GO）\n\n**❣️ JavaScript语法的标准化组织是ECMA，DOM的标准化组织是 W3C，BOM的标准化组织是...没有**\n\n**🔥 DOM和BOM的关系**\n\n<img src=\"http://up.2cto.com/2012/1219/20121219082838139.jpg\" />\n\n---\n\n**Window常见的API**\n\n```js\n\n// ============= window对象 属性 ============\n\nwindow.history // 对 History 对象的只读引用\nwindow.location // 用于窗口或框架的 Location 对象\nwindow.navigator // 对 Navigator 对象的只读引用\nwindow.screen // 对 Screen 对象的只读引用\n\n\nwindow.innerheight // 返回窗口的文档显示区的高度\nwindow.innerwidth // 返回窗口的文档显示区的宽度\nwindow.pageXOffset // 设置或返回当前页面相对于窗口显示区左上角的 X 位置\nwindow.pageYOffset // 设置或返回当前页面相对于窗口显示区左上角的 Y 位置\n\n// 只读整数。声明了窗口的左上角在屏幕上的的 x 坐标和 y 坐标。IE、Safari、Chrome 和 Opera 支持 screenLeft 和 screenTop，而 Chrome、Firefox 和 Safari 支持 screenX 和 screenY\nwindow.screenLeft\nwindow.screenTop\nwindow.screenX\nwindow.screenY\n\nwindow.document // 对 Document 对象的只读引用\nwindow.closed // 返回窗口是否已被关闭\nwindow.length // 设置或返回窗口中的框架数量\nwindow.name // 设置或返回窗口的名称\nwindow.opener // 返回对创建此窗口的窗口的引用。\nwindow.outerheight // 返回窗口的外部高度\nwindow.outerwidth // 返回窗口的外部宽度\nwindow.parent // 返回父窗口\nwindow.status // 设置窗口状态栏的文本。(默认只支持 Opera)\nwindow.defaultStatus // 设置或返回窗口状态栏中的默认文本。（仅 Opera 支持）\nwindow.top // 返回最顶层的先辈窗口。\nwindow.self // 返回对当前窗口的引用。等价于 Window 属性。\nwindow.window // window 属性等价于 self 属性，它包含了对窗口自身的引用\n\n\n// ============= window对象 方法 ============\n\nwindow.alert() // 显示带有一段消息和一个确认按钮的警告框\nwindow.confirm() // 显示带有一段消息以及确认按钮和取消按钮的对话框\nwindow.prompt() // 显示可提示用户输入的对话框\nwindow.setInterval() // 按照指定的周期（以毫秒计）来调用函数或计算表达式\nwindow.setTimeout() // 在指定的毫秒数后调用函数或计算表达式\nwindow.clearInterval() // 取消由 setInterval() 设置的 timeout\nwindow.clearTimeout() // 取消由 setTimeout() 方法设置的 timeout\nwindow.open() // 打开一个新的浏览器窗口或查找一个已命名的窗口。window.open(URL,name,features,replace)\nwindow.scrollBy() // 按照指定的像素值来滚动内容\nwindow.scrollTo() // 把内容滚动到指定的坐标\nwindow.close() // 关闭浏览器窗口\n\nwindow.print() // 打印当前窗口的内容\nwindow.blur() // 把键盘焦点从顶层窗口移开\nwindow.createPopup() // 创建一个弹出窗口。只有 ie 支持（不包括 ie11）\nwindow.focus() // 把键盘焦点给予一个窗口\nwindow.moveBy() // 可相对窗口的当前坐标把它移动指定的像素\nwindow.moveTo() // 把窗口的左上角移动到一个指定的坐标\nwindow.resizeBy() // 按照指定的像素调整窗口的大小\nwindow.resizeTo() // 把窗口的大小调整到指定的宽度和高度\n\n```\n\n---\n\n### 3.Navigator对象（浏览器信息）\n\nNavigator 对象包含的属性描述了正在使用的浏览器。可以使用这些属性进行平台专用的配置。虽然这个对象的\n名称显而易见的是 Netscape 的 Navigator 浏览器，但其他实现了 JavaScript 的浏览器也支持这个对象\n\n**Navigator对象常用API**\n\n```js\n\n// ============= Navigator对象 属性 ============\n\nwindow.navigator.cookieEnabled // 返回指明浏览器中是否启用 cookie 的布尔值\nwindow.navigator.onLine // 返回指明系统是否处于脱机模式的布尔值（用于判断是否有网）\nwindow.navigator.userAgent // 返回由客户机发送服务器的 user-agent 头部的值\n\nwindow.navigator.appCodeName // 返回浏览器的代码名。以 Netscape 代码为基础的浏览器中，它的值是 \"Mozilla\"。为兼容Microsoft 也是\nwindow.navigator.appMinorVersion // 返回浏览器的次级版本。（IE4、Opera 支持）\nwindow.navigator.appName // 返回浏览器的名称\nwindow.navigator.appVersion // 返回浏览器的平台和版本信息\nwindow.navigator.browserLanguage // 返回当前浏览器的语言。（IE 和 Opera 支持）\nwindow.navigator.cpuClass // 返回浏览器系统的 CPU 等级。（IE 支持）\nwindow.navigator.platform // 返回运行浏览器的操作系统平台\nwindow.navigator.systemLanguage // 返回当前操作系统的默认语言。（IE 支持）\nwindow.navigator.userLanguage // 返回操作系统设定的自然语言。（IE 和 Opera 支持）\nwindow.navigator.plugins // 返回包含客户端安装的所有插件的数组\n\n// ============= Navigator对象 方法 ============\nwindow.navigator.javaEnabled() // 规定浏览器是否支持并启用了 Java\nwindow.navigator.taintEnabled() // 规定浏览器是否启用数据污点 (data tainting) \n\n```\n\n---\n\n### 4.History对象（访问过的URL）\n\nHistory 对象包含用户（在浏览器窗口中）访问过的 URL\n\n**History对象常用API**\n\n```js\n\n// ============= History对象 属性 ============\nwindow.history.length // 返回浏览器历史列表中的 URL 数量。\n\n\n// ============= History对象 方法 ============\nwindow.history.back() // 加载 history 列表中的前一个 URL\nwindow.history.forward() // 加载 history 列表中的下一个 URL\nwindow.history.go() // 加载 history 列表中的某个具体页面\n\n\n```\n\n---\n\n### 5.Location对象（当前URL的信息）\n\n**Location对象常用API**\n\n```js\n\n// ============= Location对象 属性 ============\nwindow.location.href // 设置或返回完整的 URL\nwindow.location.hash //设置或返回从井号 (#) 开始的 URL（锚）\nwindow.location.host // 设置或返回主机名和当前 URL 的端口号\nwindow.location.pathname // 设置或返回当前 URL 的路径部分\nwindow.location.protocol // 设置或返回当前 URL 的协议\nwindow.location.search // 设置或返回从问号 (?) 开始的 URL（查询部分）\nwindow.location.hostname // 设置或返回当前 URL 的主机名\nwindow.location.port // 设置或返回当前 URL 的端口号\n\n// ============= Location对象 方法 ============\nwindow.location.assign() // 加载新的文档\nwindow.location.reload('force') // 重新加载当前文档。参数可选，不填或填 false 则取浏览器缓存的文档\nwindow.location.replace() // 用新的文档替换当前文档 \n\n\n```\n\n---\n\n### 6.Screen 对象（暂时不做解释）\n\n---\n\n## 🎃第十四章：事件\n\n### 1.绑定事件和解除事件绑定\n\n```js\n// 绑定事件的方法主要有三种\n\n// ① 兼容性好，但是在一个元素上只能绑定一个事件函数，基本等同于写在HTML行间\nele.onxxx = function (e) {}\nele.onxxx = false\n\n// ② IE9以下不兼容，可以在一个元素上，绑定多个处理函数\nele.addEventListener(type, fn, false)\nele.removeEventListener(type, fn, false) // 若绑定匿名函数，则无法解除绑定\n\n// ③ IE独有，一个元素也可以绑定多个处理函数\nele.attachEvent('onxxx', fn)\nele.detachEvent('onxxx', fn) // 若绑定匿名函数，则无法解除绑定\n\n```\n\n---\n\n### 2.事件类型\n\n```js\n\n// 鼠标事件 （继承MouseEvent接口）\nclick // 按下鼠标时触发\ndblclick // 双击鼠标时触发\nmousedown // 按下鼠标键时触发\nmouseup // 释放按下鼠标键触发\nmousemove // 鼠标在节点内部移动触发，持续移动，事件会持续触发（会有性能问题）\nmouseenter // 鼠标进入节点触发，进入子节点不会触发。（在节点内只会触发一次）\nmouseover // 鼠标进入节点触发，进入子节点会再一次触发\nmouseout // 鼠标离开节点触发，离开父节点也会触发\nmouseleave // 鼠标离开节点触发，离开父节点不会触发\ncontextmenu // 鼠标右键(右键菜单)前触发，或按下右键菜单时触发\nwheel // 滚动鼠标的滚轮时触发，继承WheelEvent接口\n// 触发顺序： mouseDown > mouseup > click > dblclick\n\n// 键盘事件 （继承KeyboardEvent接口）\nkeydown\t// 按下键盘时触发\nkeypress // 按下有值的键触发，(无值键Ctrl、Alt、Shift、Meta ) ，会先出发keydown\nkeyup // 松开键盘时触发\n\n// 进度事件 （继承ProgressEvent接口）\nload // 外部资源加载成功时触发\nloadstart // 外部资源开始加载时触发\nloadend\t// 外部资源停止加载时触发，发生顺序在error、abort、load等事件的后面。\nprogress // 外部资源加载过程中不断触发\ntimeout // 加载超时时触发\nabort // 外部资源中止加载时（比如用户取消）触发，发生错误导致中止不会触发。\nerror // 由于错误导致外部资源无法加载时触发（error特性，不会冒泡，不会触发父元素的error时间监听函数）\n// 按照习惯js脚本一般都放置在页面底部，有时候图片加载会在脚本运行之前就完成，因此有可能load和error事件的监听函数不会执行\n// 解决办法：使用complete属性先判断一下是否加载完成\n\n// 拖拉事件 （继承DragEvent接口）\ndrag // 在拖拽节点上持续触发（间隔几百毫秒）\ndragstart // 开始拖拉时，在被拖拉的节点上触发\ndragend\t// 拖拉结束时，在被拖拉的节点上触发\ndragenter // 拖拉进入当前节点时，在当前节点上触发一次\ndragover // 拖拉进入当前节点时，在当前节点上持续触发（间隔几百毫秒）\ndragleave // 拖拉离开当前节点范围内，在当前节点上触发\ndrop // 释放目标节点时，在目标节点上触发\n\n\n```\n\n[更详细...参考](https://www.jianshu.com/p/0eae14401bf2)\n\n---\n\n### 3.事件处理模型（事件冒泡，捕获）\n\n- 事件冒泡：同一个事件，自子元素冒泡向父元素（自底向上）\n- 事件捕获：同一个事件，自父元素捕获至子元素（自顶向下）\n- 触发顺序：先捕获，后冒泡（注意：IE没有捕获事件）\n- ❣️备注：focus，blur，change，submit，reset，select等事件不冒泡\n\n<img src=\"https://img-my.csdn.net/uploads/201012/30/0_1293708442iQ1z.gif\" />\n\n**取消冒泡和阻止默认事件**\n\n```js\n// 取消冒泡\ne.stopPropagation() // W3C标准（IE9以下不支持）\ne.cancelBubble = false // IE独有的取消冒泡的方法\n\n// 阻止默认事件（表单提交，a标签跳转，右键菜单等）\nreturn false // 以句柄的方式 才生效，例如 div.onclick = function (e) {} 才可以，addEventListener 不行\ne.preventDefault() // W3C标准（IE9以下不支持）\ne.returnValue = false // IE的阻止默认事件\n\n```\n\n---\n\n### 4.事件对象\n\n事件对象是浏览器给我们自动添加的一个对象，记录了事件触发时候的一系列状态和信息，例如鼠标点击的位置等等\n\n```js\n\ndiv.onclick = function (e) {\n    // e 事件对象，但是IE下没有这个，需要在 window.event 上拿到，所以通常第一句总是\n    let e = e || window.event\n\n    // e.target 事件源对象（真正触发了事件的DOM对象）\n    // e.srcElement IE上的事件源对象\n    // ❣️ 这个可以应用到 事件委托中\n    let target = e.target || e.srcElement\n\n    // 还有一系列其他的属性\n}\n\n```\n\n---\n\n## 🐚第十五章：前后端交互\n\n### 1.交互方法ajax && fetch\n\n---\n\n### 2.交互数据JSON\n\n```js\n\nJSON.parse(str) // string --> json\nJSON.stringify(json) // json --> string\n\n```\n\n---\n\n## 🌎第十六章：浏览器\n\n### 1.浏览器的渲染过程\n\n浏览器下载完页面的所有文件后，会\n\n- 1.解析HTML，构建DOM树\n- 2.解析CSS，构建CSS规则树\n- 3.合并DOM树和CSS规则树，生成render树（两个树怎么遍历合并，也是需要探索的）\n- 4.布局render树，负责各元素尺寸，位置的计算\n- 5.绘制render树，绘制页面像素信息\n- 6.浏览器会将各层的信息发送给GPU，GPU将各层合成（GUP就是显卡，重绘重排消耗的是GPU的资源）\n\n### 2.重绘重排\n\n**发生重排的场景（触发重排一定会触发重绘,不知道是对应上面第1步还是第3步）**\n\n- 添加或者删除可见的DOM元素\n- 元素位置变化\n- 元素尺寸改变（外边距，内边距，边框厚度，宽度，高度等）\n- 内容改变，例如 文本改变，图片被另一个不同尺寸的图片代替\n- 页面渲染器初始化\n- 浏览器窗口尺寸变化（为什么这个也触发重排？根据视口来计算元素的位置和大小的）\n- CSS属性（例如display变化等）[各css属性对重排重绘的影响](https://csstriggers.com)\n\n**发生重绘的场景（对应上面第4步）**\n\n- offsetTop, offsetLeft，offsetWidth, offsetHeight, scrollTop, scrollLetf, scrollWidth, scrollHeight, clientTop...\n\n\n\n---\n\n### 3.异步加载JS\n\n> 可以归为性能优化部分\n\nJavaScript异步加载有三种方案\n\n- defer 异步加载，但要等到DOM文档全部解析完才会被执行，只有IE能用，也可以将代码写到内部\n- async 异步加载，加载完就执行，async只能加载外部脚本，不能把JS写到script标签内部（执行时候也不会阻塞页面）\n- 🔥创建script，插入到DOM中，加载完毕之后回调（最常用）\n\n**异步加载有什么好处？**\n\n- 1.传统的方式，我们使用script标签直接嵌入到html文档中，这里分两种情况\n    - 嵌入到head标签中——要注意，这样做并不会影响文档内容中其他静态资源文件的并行加载，它影响的是，文档内容的渲染，即此时的DOM渲染就会被阻塞，呈现白屏\n    - 嵌入到body标签底部——为了免去白屏现象，我们优先进行DOM的渲染，再去执行脚本，但问题又来了\n        - 先说第一个问题——如果DOM文档内容比较大，交互事件绑定便有了延迟，体验便差了些。当然，我们需要根据需求而定，让重要的脚本优先执行\n        - 第二个问题——由于脚本文件至于body底部，导致对于这些脚本的加载相对于至于head中的脚本而言，它们的加载便有了延迟。所以，至于body底部，也并非是优化的终点\n- 2.添加defer属性——我们希望脚本尽早的进行并行加载，我们把这批脚本依旧放入head中。脚本的加载应该与文档的加载同时进行，并且不影响DOM的渲染。这样，一旦文档就绪就可以运行脚本。所以便有了defer这样属性。但是要注意它的兼容性，对于不支持defer属性的浏览器，我们需要将代码封装在诸如jQuery之$(document).ready中。需要注意一点，所有的defer属性的脚本，是按照其出场顺序依次执行，因此，它同样严格同步\n- 3.上一点，讲的都是同步执行脚本（要注意，这些脚本的加载过程是并行的，只不过是谁先触发请求谁后触发请求的区别而已），接下来的优化点便是“并行执行脚本”，当然，我们知道，一个时间点，只有执行一个js文件，这里的“并行”是指，谁先加载完了，只要此时js引擎空闲，立马执行之。这里的优化分成两种\n    - 添加async这个属性——确实能够完成上面我们所说的优化点，但是它有很高的局限性，即仅仅是针对非依赖性脚本加载，最恰当的例子便是引入多个第三方脚本了。还有就是与deffer属性的合用，实在是让人大费脑筋。当然，它也存在兼容性问题。以上三个问题便导致其应用并不广泛。当使用async的时候，一定要严格注意依赖性问题。\n    -  脚本加载脚本——很显然，我们使用之来达到“并行执行脚本”的目的。同时，我们也方便去控制脚本依赖的问题，我们便使用了如requirejs中对于js异步加载的智能化加载管理。\n\n\n[更详细...参考](https://www.cnblogs.com/jinguangguo/p/4187641.html)\n\n\n---\n\n### 4.JS加载时间线\n\n**可以合并到深入里面**\n\n- 1.创建Document对象，开始解析web页面，解析HTML元素和他们的文本内容后添加Element对象和Text节点到文档中。这个阶段Document。readyState = \"loading\"。\n- 2.遇到link外部css，创建线程加载，并继续解析文档。\n- 3.遇到script外部js，并且没有设置async ， defer ，浏览器加载，并阻塞，等待js加载完成并执行该脚本，然后继续解析文档\n- 4.遇到script外部js，并且设置有async，defer 浏览器创建线程加载，并继续解析文档，对于async属性的脚本，脚本加载完成后立即执行（异步禁止使用docuemnt.write（））。\n- 5.遇到img标签等，先正常解析dom结构，然后浏览器异步加载src，并继续解析文档\n- 6.当文档解析完成，document.readyState = \"interactive\"；\n- 7.文档解析完成后，所有设置有defer的脚本会按照顺序执行。\n- 8.当文档解析完成之后，document对象触发DOMContentLoaded事件，这也标志着程序执行从同步脚本执行阶段，转化为事件驱动阶段\n- 9.当所有saync的脚本加载完成并执行后，img等加载完成后，document.readyState = \"complete\" window对象触发load事件\n- 10.从此，页面以异步响应方式处理用户输入，网络事件等。\n\n[更详细...参考](https://blog.csdn.net/c__dreamer/article/details/79452456)\n\n\n---\n\n## ❤️参考列表（致敬）\n\n- 《JavaScript高级程序编程》 && 《JavaScript权威指南》\n- [腾讯课堂 渡一教育公开课](https://ke.qq.com/course/231577?taid=2841395744442521)\n- 《你不知道的JavaScript》上中下\n- 《老马IT学习课堂》YouTube频道"
  },
  {
    "path": "docs/blog/4.JavaScript/2.JavaScript深入.md",
    "content": "---\ntitle: 2.JavaScript深入\ndate: 2020-01-30 00:00:00\npermalink: \ntag: \n - blog\n - 4.JavaScript\n---\n\n> JavaScript基础用的差不多了之后，就不要吃老本了，要多去探索\n\n> 本篇就是对JavaScript这们语言的探索，说实话，有用么\n\n> 我明确的告诉你，探索一两个没有用，但是探索十几个之后，就有大用了，自己试一下吧\n\n---\n\n## 🐶预编译\n\n### 1.JavaScript运行三部曲：语法分析，预编译，解释执行\n\n**JavaScript是 单线程，解释性语言，所谓解释性语言就是读一句，执行一句，但是JavaScript还没那么解释性，而是在这之前还有几个步骤**\n\n- 第一步：语法分析 ，此过程会通篇扫描一遍，看看是否有语法错误\n- 第二步：预编译，此过程 会把变量和函数提升，并给变量赋初始值\n    - 函数提升：直接把函数提升到最前面执行\n    - 变量提升：声明提升，例如 let a = 10, 只提升 let a 这一步，赋值的那一步不进行提升\n- 第三步：解释执行，这才到了读一行，解释一行的地步\n\n**备注：暗示全局变量，任何变量如果未经声明就赋值，此变量就为全局对象所有（一切声明的变量都是window的属性）**\n\n---\n\n### 2.函数预编译详解（AO Activation Object）\n\n- 第一步：创建AO对象（Activation Object），这就是我们理解的作用域，也叫执行期上下文\n- 第二步：找形参和变量声明，将变量和形参名作为AO属性名，值为undefined\n- 第三步：将实参值和形参统一\n- 第四步：在函数体里面找函数声明，名称作为AO属性名，值赋予函数体\n\n```js\n\n// ********** 示例一 **********\n\nfunction fn (a) {\n    console.log(a) // function a() {}\n    var a = 123\n    console.log(a) // 123\n    function a() {}\n    console.log(a) // 123\n    var b = function () {}\n    console.log(b) // function () {}\n    function d () {}\n}\n\nfn(1)\n\n/**\n * 函数执行前的AO情况\n * \n * AO {\n *  a: function a() {}\n *  b: undefined\n *  d: function d () {}\n * }\n * \n */\n\n\n\n// ********** 示例二 **********\n\nfunction test (a, b) {\n    console.log(a) // function a () {}\n    console.log(b) // undefined\n    var b = 234\n    console.log(b) // 234\n    a = 123\n    console.log(a) // 123\n    function a () {}\n    var a\n    b = 234\n    var b = function () {}\n    console.log(a) // 123\n    console.log(b) // function () {}\n}\n\ntest(1)\n\n/**\n * 函数执行前的AO情况\n * \n * AO {\n *  a: function a () {}\n *  b: undefined\n * }\n * \n */\n\n```\n\n---\n\n### 3.全局预编译（GO Global Object）\n\n- 第一步：创建GO对象（Global Object），这就是我们用的window\n- 第二步：变量声明，将变量名作为GO属性名，值为undefined\n- 第三步：找函数声明，名称作为GO属性名，值赋予函数体\n\n```js\n\n// ********** 示例一 **********\n\nconsole.log(test) // function test () {...}\n\nfunction test (test) {\n    console.log(test) // function test () {}\n    var test = 234\n    console.log(test) // 234\n    function test () {}\n}\n\ntest(1)\nvar test = 123\n\n/**\n * 全局代码执行前的GO情况\n * \n * GO {\n *  test: function test () {...}\n * }\n * \n */\n\n/**\n * 函数执行前的AO情况\n * \n * AO {\n *  test: function test () {}\n * }\n * \n */\n\n\n// ********** 示例二 **********\n\nglobal = 100\n\nfunction fn () {\n    console.log(global) // undefined\n    global = 200\n    console.log(global) // 200\n    var global = 300\n}\n\nfn()\n\n\n// ********** 示例三 **********\n\nfunction test () {\n    console.log(b) // undefined\n    if (a) {\n        var b = 100\n    }\n    console.log(b) // undefined\n    c = 234\n    console.log(c) // 234\n}\n\nvar a\ntest()\na= 10\nconsole.log(c) // 234\n\n\n// ********** 示例四 **********\n\nfunction bar () {\n    return foo\n    foo = 10\n    function foo () {}\n    var foo = 11\n}\n\nconsole.log(bar()) // function foo () {}\n\n\n// ********** 示例五 **********\n\nconsole.log(bar()) // 11\n\nfunction bar () {\n    foo = 10\n    function foo () {}\n    var foo = 11\n    return foo\n}\n\n```\n\n**❣️ 如果AO用一个属性，没有的话，会上GO上继续找，没有才返回undefined**\n\n---\n\n## 🐹作用域，作用域链（主要对于函数而言）\n\n**JavaScript原来只有全局作用域，和函数作用域**\n\n### 1.执行期上下文\n\n- 当函数执行时候，会创建一个 执行期上下文（AO）的内部对象，这里面定义了函数执行的环境\n- 多次调用一个函数，会导致创建多个执行上下文（AO），并且每个AO都是独一无二的\n- 当函数执行完毕，执行期上下文被销毁\n\n---\n\n### 2.作用域基础解释\n\n- [ [ scope ] ]：每个JavaScript函数都是一个对象，有一些属性只能JavaScript引擎存取， [ [ scope ] ] 就是其中的一个\n- [ [ scope ] ] 里面就是作用域集合（其中存储了执行期上下文集合）\n\n<img src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/2.notes/3.JavaScript/3.JavaScript%E6%B7%B1%E5%85%A5/1.%E4%BD%9C%E7%94%A8%E5%9F%9F.png\" />\n\n---\n\n### 3.作用域链基础解释（VO）\n\n- 作用域链：[ [ scope ] ] 中所存储的执行期上下文对象的集合，这个集合呈链式结构，我们把这个链式结构叫做作用域链\n\n**查找变量：从作用域链的顶端依次向下查找，创建作用域是从头部创建，消除的时候，也是从头部消除，先进先出**\n\n```js\n\n// ******* 示例一 *******\n\nfunction a () {\n\n    function b () {\n        var b = 234\n    }\n\n    var a = 123\n    b()\n}\n\nvar glob = 100\na()\n\n/**\n * a 定义 [[scope]] 0 --> GO\n * \n * a 执行 [[scope]] 0 --> a的AO\n *                 1 --> GO\n * \n * b 定义 [[scope]] 0 --> a的AO\n *                 1 --> GO\n * \n * b 执行 [[scope]] 0 --> b的AO\n *                 1 --> a的AO\n *                 2 --> GO\n * \n * b 执行完毕 断开与 b的AO 这个对象的引用（会被标记清除删除掉，涉及到新生代，老生带的一些规则...）\n * \n * a 执行完毕 断开与 a的AO 这个对象的引用\n * \n */\n\n\n// ******* 示例二 *******\n\nfunction a () {\n\n    function b () {\n\n        function c () {\n\n        }\n        c()\n\n    }\n    b()\n}\na()\n\n/**\n * a 定义 [[scope]] 0 --> GO\n * \n * a 执行 [[scope]] 0 --> a 的 AO\n *                 1 --> GO\n * \n * b 定义 [[scope]] 0 --> a 的 AO（引用）\n *                 1 --> GO\n * \n * b 执行 [[scope]] 0 --> b 的 AO\n *                 1 --> a 的 AO（引用）\n *                 2 --> GO\n * \n * c 定义 [[scope]] 0 --> b 的 AO（引用）\n *                 1 --> a 的 AO（引用）\n *                 2 --> GO\n * \n * c 执行 [[scope]] 0 --> c 的 AO \n *                 0 --> b 的 AO（引用）\n *                 1 --> a 的 AO（引用）\n *                 2 --> GO\n * \n * c 执行完毕 断开于 c的AO 这个对象的引用\n * \n * b 执行完毕 断开于 b的AO 这个对象的引用\n * \n * a 执行完毕 断开于 a的AO 这个对象的引用\n * \n */\n\n```\n\n**❣️：这个就解释了函数，为什么最里面的可以访问外面的，而外面的访问不了里面的!!!**\n\n\n**🔥 拓展：在作用域上找不到报错，在原型链上找不到undefined**\n\n---\n\n## 🐼闭包（对于函数而言）\n\n**我感觉知道 AO GO 和 内存回收之后，才能更近一步的理解闭包**\n\n### 1.闭包解释（从 AO GO 角度解释）\n\n- 在函数里面，返回函数（或者返回的类型里面包括函数），一定会产生闭包\n- 我们来看一下下面的例子\n    - 首先 a 执行 作用域链 有两个，a的AO 和 GO\n    - 然后 b 定义 作用域链 有三个，b的AO，a的AO，GO\n    - 当 a 执行完成之后，就断开与 a的AO 这个对象的引用，但是此时，a的AO还被 b 引用着，所以标记清除不会回收 a 的AO\n    - 最终的效果就是 a的AO的内容，还能通过 b 来访问，这个一个函数访问另一个函数内，内容的现象，人们称之为 **闭包**\n\n```js\n\n// 示例\n\nfunction a () {\n\n    let name = '朱昆鹏'\n\n    function b () {\n        console.log(name)\n    }\n\n    return b\n}\n\nlet test = a()\ntest() // 朱昆鹏\n\n```\n\n---\n\n### 2.闭包的缺点\n\n**当内部函数被保存到外部时，会生成闭包，闭包会导致原有作用域链不释放，造成内存泄漏**\n\n**❓如何解决闭包可能会导致内存泄漏的问题呢**\n\n---\n\n### 3.闭包的应用\n\n**实现公有变量**\n\n```js\n\n// 示例：函数累加器\nfunction add () {\n    \n    let count = 0\n\n    return function () {\n        count ++\n        console.log(count)\n    }\n}\n\nlet countFn = add()\ncountFn() // 1\ncountFn() // 2\ncountFn() // 3\n\n```\n\n**可以做缓存（存储结构）**\n\n```js\nfunction test () {\n    let num = 100\n\n    function a () {\n        num ++\n        console.log(num)\n    }\n\n    function b () {\n        num --\n        console.log(num)\n    }\n\n    return [a, b]\n}\n\nlet myFn = test()\nmyFn[0]() // 101\nmyFn[1]() // 100\n\n// ES6 写法\n// let [a, b] = test()\n// a()\n// b()\n\n\n// ****** 🔥示例二 *******\n\nfunction eater () {\n    \n    let name = '朱昆鹏' // 这个就是缓存\n\n    let zhu = {\n        say: function () {\n            console.log('我的姓名是：' + name)\n            name = ''\n        },\n        setName: function (myName) {\n            name = myName\n        }\n    }\n\n    return zhu\n}\n\nlet eater1 = eater()\n\neater1.setName('无')\neater1.say() // 我的姓名是：无\n\n```\n\n**可以实现封装，属性私有化**\n\n**模块化开发，防止污染全局变量**\n\n主要利用函数是 函数作用域，是独立的作用域\n\n---\n\n### 4.解释一些经典的闭包的问题\n\n```js\nfunction test () {\n\n    let arrFn = []\n    for (var i = 0; i < 10; i++) {\n        (function (i) {\n            arrFn[i] = function () { console.log(i) }\n        })(i)\n    }\n\n    return arrFn\n}\n\nvar testArr = test()\ntestArr.forEach( fn => fn())\n\n// 然后执行 testArr 中的每一个函数，会打印 10 个 10\n// ❣️ 我的理解是：这个 i ，放到了 test 的 AO 中，每次 i++ 都会改变 test 的 AO\n// 而这十个函数，内部都没有i，所有都引用了 test 的 AO，也就是最后变换的\n\n// 🔥 然后通过 IIEF 的方法，本质上就是 立即执行函数的 AO 中保存了 i\n// 然后 具体的函数 作用域链中 具有 立即执行函数的 AO，那里面是正确的值\n// 其实这时候 test的 AO 还是 10，具体的函数本身还是没有 i, 但是立即执行函数有 AO，并且值正是我们想要的\n\n// ❓ 通过 let 的方法来解决，这个原理是什么\n\n```\n\n---\n\n## 🐮立即执行函数（IIEF）\n\n**❣️ 立即执行函数不是官方的，像CSS的浮动，也是人们试出来的**\n\n**基础使用**\n\n```js\n(function () {})()\n\n(function () {} ())\n```\n\n**原理：只有表达式才能被执行符号执行（只要你能把函数转为表达式，都能执行）**\n\n```js\n\nfunction test () {\n  console.log('执行了')\n}() // ❌这个不行，因为不是表达式\n\nlet test = function () {\n  console.log('执行了')\n}() // '执行了'\n\n+function test () {\n  console.log('执行了')\n}() // '执行了'\n\n-function test () {\n  console.log('执行了')\n}() // '执行了'\n\n!function test () {\n  console.log('执行了')\n}() // '执行了'\n\nconsole.log(test) //undefined, 立即执行函数会忽略函数名称\n\n```\n\n**拓展**\n\n```js\nfunction test (a, b) {\n  console.log(a, b)\n}(1, 2)\n\n// 不会报错，因为会被计算机理解为下面的样子（真的是能不报错就不报错呀, 制作者666）\nfunction test (a, b) {\n  console.log(a, b)\n}\n\n\n(1, 2)\n\n```\n\n---\n\n## 🙉原型，原型链\n\n---\n\n## 🐯this指向详解\n\n### 1.this基础解释\n\n- 函数预编译过程，this指向window（AO阶段 arguments也会创建完成）\n- 全局作用域，this指向window\n- call/apply 可以改变函数运行时this指向\n- obj.fun(), fun() 里面的this指向 obj（谁调用函数，函数的this就是指向谁）\n\n```js\n\n// ***** 示例一 ******\nvar name = '222'\nvar a = {\n    name: '111',\n    say: function () {\n        console.log(this.name)\n    }\n}\n\nvar fun = a.say\nfun() // 222 | this指的 window\na.say() // 111 | this指的是a对象\n\nvar b = {\n    name: '333',\n    say: function (fun) {\n        console.log(this)\n        fun()\n    }\n}\nb.say(a.say) // 222 | b.say() 这时候 this 是 b对象，但是 fun() 不是 this.fun() 所以，走的是window\nb.say = a.say\nb.say() // 333 | this指的是b对象\n\n\n// ***** 示例二 ******\nlet name = '222'\nlet a = {\n    name: '111',\n    say: () => {\n        console.log(this)\n        console.log(this.name)\n    }\n}\n\nlet fun = a.say\nfun() // 222 | this指的 window\na.say() // 222 | this指的 window（() => {} 这种写法会把this锁定到window，除非外面还套一层function）\n\nlet b = {\n    name: '333',\n    say: fun => {\n        console.log(this)\n        fun()\n    }\n}\nb.say(a.say) // 222 | b.say() 这时候 this 是 window\nb.say = a.say\nb.say() // 222 | this指的 window\n\n\n// ***** 示例三 ******\nlet foo = 123\nfunction print () {\n    this.foo = 235\n    console.log(foo)\n}\nprint() // 235\nnew print() // 123，首先 print() 不管是new 还是 直接执行，其内部的 AO 都没有 foo，而new导致 this变为其他的了，所以改不了window，所以结果是123\n\n\n// ***** 示例四 ******\nvar a = 5\nfunction test () {\n    a = 0\n    console.log(a)\n    console.log(this.a)\n    var a\n    console.log(a)\n}\ntest() // 0 5 0 | 第一个等于0 是 test AO 的，不指向window，因为下面有个 var a ，于是预编译阶段，test AO 上有 a 这个属性，所以直接赋值了\nnew test() // 0 undefined 0\n\n\n// ***** 示例五 ******\nfunction test () {\n    console.log('函数this', this)\n\n    setTimeout( () => {\n        console.log('定时器：', this)\n    }, 1000)\n}\n\ntest() // 都指的window，就算不用 () => {} ，定时器的也指的window\nnew test() // 如果用 () => {} 的话，定时器 this 指向 test 创建的那个对象this，如果用 function () {} 的话，定时器this指向 window，函数this 都是执行 test创建出来的那个 对象this\n\n```\n\n---\n\n## 🐸var let const function 到底区别在哪里？\n\n### 1.基础解释\n\n**首先先摘自方应杭知乎的图，[原文链接](https://zhuanlan.zhihu.com/p/28140450)**\n\n<img src=\"https://pic1.zhimg.com/80/v2-9c8c4a0a3ce5402b1a74f488d79c74d0_hd.jpg\" />\n\n**我来谈谈对这个的理解，还是得说预编译阶段**\n\n- 首先全局预编译会产生 GO（Global Object），对于这一步，var function let const 有不同的过程\n    - var 一个变量的话，会在预编译阶段就 创建，初始化赋值 undefined\n    - functino 一个函数的话，会在预编译阶段就 创建，初始化赋值 undefined，和将函数体赋值给 这个函数变量（也就是我们说的函数提升，就是我们不管在哪用函数，都能用，而不用在乎函数体写的位置）\n    - let 一个变量的话 会在编译阶段，创建，不初始化（可能这么理解不对，但是效果可以），如果我们在初始化赋值之前用它，就会报错\n    - const 一个变量的话，会在预编译阶段，创建，不初始化\n\n**❣️ 当然，上面解释可能并不是很好，如果有更好的，我会修改的，也欢迎大家提出自己的想法**\n\n---\n\n### 2.暂时性死区\n\n---\n\n## 🐙内存回收机制\n\n**这个我就理解下，知道是干啥的，具体的应用我目前水平还是没有用到**\n\n### 1.基础解释\n\n- 内存回收主要是由V8引擎来做的，主要策略是分代式垃圾回收机制，也就是新生代（存活时间较短的对象）和 老生代（存活时间较长的对象）\n- 为什么有两种呢，因为没有一种垃圾回收算法能够 胜任所有的场景\n\n---\n\n### 2.Scavenge算法（新生代算法）\n\n- 在分代基础上，新生代的对象主要通过Scavenge算法进行垃圾回收，再具体实现的时候主要采用 Cheney算法\n- Cheney算法 是一种采用赋值的方式实现的垃圾回收算法\n    - 它将内存一分为二，每一个空间称之为 semispace，这两个空间中一个处于使用，一个处于闲置\n    - 处于使用的称之为 From，闲置的称之为 To\n    - 分配对象时先分配到From，当开始进行垃圾回收时，检查From存活对象 ，并赋值到 To，非存活对象被释放（就是没有被用到的）\n    - 然后 From ，To 互换位置，再次进行回收，发现被回收过，直接晋升到老生代（To空间使用超过25%也直接晋升）\n- 缺点:只能使用堆内存的一般，这是空间换时间的方法，但是正适合新生代声明周期较短的情况\n\n---\n\n### 3.Mark-Sweep & Mark-compact（老生代算法）\n\n- V8老生代主要采用 Mark-Sweep & Mark-compact\n    - Mark-Sweep：标记清除，标记那些死亡的对象，然后清除，但是清除之后会出现内存不连续的情况，所以要使用下面的方法\n    - Mark-compact：先将活着的对象移到一起（连续了），移动之后再进行清理\n    - ❓当CPU内存不足的时候会非常的高效\n- V8还引入了延迟处理，增量处理，并行标记处理\n\n\n---\n\n## 🐔Event Loop（事件环）\n\n### 1.前言介绍\n\n要整理这里的内容，引子是一道面试题，主要考察的是定时器，Promise，async/await的执行顺序次序的问题\n\n```js\n// 问下面的执行顺序是什么？\nasync function async1() {\n    console.log('async1 start');\n    await async2();\n    console.log('async1 end');\n}\nasync function async2() {\n    console.log('async2');\n}\nconsole.log('script start');\nsetTimeout(function() {\n    console.log('setTimeout');\n}, 0)\nasync1();\nnew Promise(function(resolve) {\n    console.log('promise1');\n    resolve();\n}).then(function() {\n    console.log('promise2');\n});\nconsole.log('script end');\n```\n\n然后我查阅很多资料，最终由下面两篇文章整理出基本的规则，可以应对基础的这三类问题（但是其实还有 this指向 和 原型链问题，这三者学会在面对执行问题的时候才游刃有余），正式由于我此处缺少系统性的知识，所以在此建立一个基础的知识分支，用来记录整理这块的知识点\n\n```js\n\n口诀：同步先执行，异步先执行微队列，再执行宏队列\n\n细节点：Promise.then 才会放到微队列中 !!!（此题和上一道题简直承上启下）\n\n细节点：async/await await前面的代码是同步，await后面的代码是异步（这里其实是语法糖）\n\n细节点：还有就是小心 return （return 了promise ，那么整个promise都是微队列了）\n\n```\n\n---\n\n- 宏任务：MessageChannel，setTimeout i/o ui渲染，ajax requestFrameAnimation\n- 微任务：Promise.then MutationObserver nextTick 微任务\n\n- 推荐拓展阅读文章一：[最后一次搞懂 Event Loop](https://www.yanceyleo.com/p/5cbc0ad8ec9b0f4eac13467e)\n- 推荐拓展阅读文章二：[微任务、宏任务与Event-Loop](https://juejin.im/post/5b73d7a6518825610072b42b#heading-5)\n\n\n---\n\n### 2.一些基础的介绍（看完其实并没有太大作用，参考与 JavaScript忍者秘籍，倒是好找新的吧）\n\n- 浏览器执行的是 JS单线程执行模型，也就是说同一时刻只能执行一段代码，要保证这点，需要一套规则，那就是事件循环和事件队列（即事件的调度方法）\n- 事件循环不仅包含事件队列，除了事件，还要保持浏览器执行的其他操作，这些操作被认为任务（宏任务，微任务）\n    - 宏任务：主要创建主文档对象，解析HTML，执行主线（全局）JavaScript代码，更改当前URL以及各种事件（如页面加载，输入，网络事件，定时器等）\n    - 微任务：是更小的任务，更新应用程序的状态，如 Promise回调函数，DOM发生变化\n\n\n<img src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/2.notes/3.JavaScript/%E6%B7%B1%E5%85%A5%E4%BA%86%E8%A7%A3JavaScript/1%E5%AE%8F%E4%BB%BB%E5%8A%A1%E5%BE%AE%E4%BB%BB%E5%8A%A1%E6%89%A7%E8%A1%8C%E9%A1%BA%E5%BA%8F.png\" />\n\n--- \n\n\n## 🐣位操作符\n\n[mdn地址](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators)\n\n\n### 1.arguments\n\n**实参列表执行的时候有多少就是多少，不会随着后期变换**\n\n```js\nfunction zhu (a, b) {\n\n    b = 2\n    console.log(arguments[0]) // 1\n    console.log(arguments[1]) // undefined 实参列表执行的时候有多少就是多少，不会随着后期变换\n\n}\n\nzhu(1)\n```\n\n---\n\n- arguments.callee：指向函数自身，适用于IIEF中，拿不到函数自身的问题\n\n---\n\n## 🦄Web中的编码和转义\n\nweb中常用的编码有 URL编码，HTML编码，JS编码\n\n### 1.URL编码\n\n一般来说，URL只能使用英文字母（a-zA-Z）、数字（0-9）、-_.~4个特殊字符以及所有（;,/?:@&=+$#）保留字符。\n\n意味着如果使用了一些其他文字和特殊字符，则需要通过编码的方式来进行表示，如：\n\n```js\nlet url1 = 'http://www.朱.com' // 链接使用了汉字\nlet url2 = 'http://www.a.com?我=1' // 传参使用了汉字\nlet url3 = 'http://a.com?key=?&' // 值的内容为特殊符号\n\n// 解决方法：encodeURI()\nencodeURI('http://www.朱.com'); // \"http://www.%E6%9C%B1.com\"\nencodeURI('http://www.a.com?我=1');// \"http://www.a.com?%E6%88%91=1\"\n\n// 内容为特殊符号,这个encodeURI()没法转义，就需要 encodeURIComponent()\nencodeURI('http://a.com?key=?&'); // \"http://a.com?key=?&\"\nencodeURI('http://a.com') + '?a=' + encodeURIComponent('?&') // \"http://a.com?a=%3F%26\"\n\n// ❣️ URL解码\ndecodeURI()\ndecodeURIComponent()\n```\n\n---\n\n### 2.HTML 编码\n\n在 HTML 中，某些字符是预留的，比如不能使用小于号（<）和大于号（>），这是因为浏览器会误认为它们是标签。如果希望正确地显示预留字符，我们必须在 HTML 源代码中使用字符实体（character entities）。当然还另一个重要原因，有些字符在 ASCII 字符集中没有定义，因此需要使用字符实体来表示，比如中文。\n\nHTML 编码分为：\n\n- HTML 十六进制编码 &#xH;\n- HTML 十进制编码 &#D;\n- HTML 实体编码 &lt; 等\n\n在 HTML 进制编码中其中的数字则是对应字符的 unicode 字符编码。\n\n比如单引号的 unicode 字符编码是27，则单引号可以被编码为&#x27;\n\n**HTML 实体编码**\n\n```js\n// 通常来说，在业务中我们用到更多的是 HTML 的实体编码。常用的 HTML 实体编码函数如下所示：\n\n/**\n * 转义 HTML 特殊字符\n * @param {String} str\n */\nfunction htmlEncode(str) {\n  return String(str)\n    .replace(/&/g, '&amp;')\n    .replace(/\"/g, '&quot;')\n    .replace(/'/g, '&#39;')\n    .replace(/</g, '&lt;')\n    .replace(/>/g, '&gt;');\n}\n```\n\n---\n\n### 3.JavaScript转义\n\nJavaScript 中有些字符有特殊用途，如果字符串中想使用这些字符原来的含义，需要使用反斜杠对这些特殊符号进行转义。我们称之为 Javascript编码。一般有以下几类：\n\n- 三个八进制数字，如果不够个数，前面补0，例如 “e” 编码为“\\145”\n- 两个十六进制数字，如果不够个数，前面补0，例如 “e” 编码为“\\x65”\n- 四个十六进制数字，如果不够个数，前面补0，例如 “e” 编码为“\\u0065”\n- 对于一些控制字符，使用特殊的C类型的转义风格（例如\\n和\\r）\n\n[从零开始学web安全（3）](https://imweb.io/topic/57024e4606f2400432c1396d)\n[前端的各种转义](https://github.com/FrankFang/githublog/blob/master/%E6%8A%80%E6%9C%AF/%E5%89%8D%E7%AB%AF%E7%9A%84%E5%90%84%E7%A7%8D%E8%BD%AC%E4%B9%89.md)\n\n---\n\n## 📚参考列表\n\n- 《你不知道的JavaScript》系列\n- 《JavaScript忍者秘籍》（第2版）\n- [for、forEach、for in 、 for of 的区别 参考](https://blog.csdn.net/one_girl/article/details/80192899)\n- [腾讯课堂](https://ke.qq.com/)"
  },
  {
    "path": "docs/blog/4.JavaScript/3.JavaScript应用.md",
    "content": "---\ntitle: 3.JavaScript应用\ndate: 2020-01-30 00:00:00\npermalink: \ntag: \n - blog\n - 4.JavaScript\n---\n\n> 注意此处：内容不全，结构混乱，等待重构...\n\n---\n\n## 🐲第零章：综合应用\n\n### 1.进制之间的转换\n\n```js\n\n// 核心是 parseInt() 和 toString\n\n// parseInt() 可以传两个参数，参数一：需要转换的参数，参数二：规定当前传入的参数是几进制的，并以此为依据，将参数一转为十进制\n\n// 有了这个特性，我们可以将任意进制的数值，转为十进制\nlet num1 = \"1111011\"\nlet num2 = parseInt(num1, 2) // 123（十进制）\n\n// xxx.toString() 也能传参数，表示将一个十进制的数值，转为任意进制\nnum2.toString(16) // 7b（十六进制）\n\n\n// ❣️ 可以封装一个进制转化的方法\n\n```\n\n---\n\n### 2.typeof 判断类型\n\n```js\n\n// typeof 能打印出来的内容： number, string, boolean, function, object, undefined\n\ntypeof(a) // 未定义的变量 'undefined'（为什么？是语法提升么），也可以去掉括号，加一个空格\ntypeof 'zhu' // 'string'\ntypeof true // 'boolean '\ntypeof NaN // \"number\"\ntypeof fn // 函数 \"function\"\n\ntypeof {} // \"object\"\ntypeof null // \"object\"\ntypeof [] // 'object'\n\n// ❣️ 精准判断 Object.prototype.toString.call() \nObject.prototype.toString.call(1) // \"[object Number]\" , 注意传入NaN还是 数字类型\nObject.prototype.toString.call('zhu') // \"[object String]\"\nObject.prototype.toString.call(true) // \"[object Boolean]\"\nObject.prototype.toString.call(fn) // \"[object Function]\"\nObject.prototype.toString.call({}) // \"[object Object]\"\nObject.prototype.toString.call([]) // \"[object Array]\"\nObject.prototype.toString.call(null) // \"[object Null]\"\nObject.prototype.toString.call() // \"[object Undefined]\"\nObject.prototype.toString.call(Math) // \"[object Math]\"\n// ...\n\n```\n\n---\n\n### 3.for、forEach、for in 、 for of 的区别\n\n---\n\n**for循环**\n\n```js\n// for循环，它用来遍历数组\nlet arr = [1,2,3,4]\nfor(var i = 0; i < arr.length; i++) {\n    console.log(arr[i]) // 1,2,3,4\n}\n```\n\n---\n\n**forEach：从ES5开始 Javascript增加了forEach方法 用来遍历数组**\n\n```js\nlet arr = [1,2,3]\narr.forEach((item, index, arr) => {\n    console.log(item, index, arr)\n})\n\n// ❣️ 写法简单了很多，但是也存在一个局限 就是你不能中断循环(使用break语句或使用return语句），我写过里面的原理，所以也明白为什么\n```\n\n---\n\n**for…in：为循环”enumerable“对象而设计的**\n\n```js\nlet obj = {\n    name: '朱昆鹏',\n    age: '20',\n    __proto__: {\n      sex: '男'\n    }\n}\n\nfor (let prop in obj) {\n    console.log(prop)    //遍历的实际上是对象的属性名称 name, age, sex\n    console.log(obj[prop])  //这个才是属性对应的值 朱昆鹏, 20, 男\n}\n\n// for - in 也可用来循环数组，但一般并不推荐\n```\n\n---\n\n**for…of：ES6中新增加的语法 可以循环一个拥有enumerable属性的对象**\n\n```js\n\n// ❣️数组，字符串，Map,Set，类数组...有迭代器接口，普通对象没有\n\n// 普通对象不能遍历 ❌\nfor (let prop in obj) {\n    console.log(prop) // Uncaught TypeError: obj[Symbol.iterator] is not a function\n}\n\nfor (let prop of 'zhu') {\n    console.log(prop) // z | h | u\n}\n\nfor (let prop of new Set([1,2,3])) {\n    console.log(prop) // 1 | 2 | 3\n}\n```\n\n---\n\n### 4.节流，防抖\n\n**在前端开发中有一部分的用户行为会频繁的触发事件执行，而对于DOM操作，资源加载等耗费性能的处理，很可能造成页面的卡顿，甚至浏览器的崩溃，函数节流和函数防抖就是为了解决类似需求应运而生的**\n\n```js\n\n// 防抖：函数防抖就是在函数需要频繁触发情况时，只有足够空闲的时间，才执行一次。经常用于 搜索和拖拽\nfunction debounce(fn) {\n  let timeout = null; // 创建一个标记用来存放定时器的返回值\n  return function () {\n    clearTimeout(timeout); // 每当用户输入的时候把前一个 setTimeout clear 掉\n    timeout = setTimeout(() => { // 然后又创建一个新的 setTimeout, 这样就能保证输入字符后的 interval 间隔内如果还有字符输入的话，就不会执行 fn 函数\n      fn.apply(this, arguments);\n    }, 500);\n  };\n}\n\ndebounce(fn) // 使用\n\n\n// 节流：指定时间间隔内只会执行一次任务（例如一个一秒内连续触发的事件，如果用了节流，让其300ms触发一次，那么1s就只能触发3次）\nfunction throttle(fn) {\n  let canRun = true; // 通过闭包保存一个标记\n  return function () {\n    if (!canRun) return; // 在函数开头判断标记是否为true，不为true则return\n    canRun = false; // 立即设置为false\n    setTimeout(() => { // 将外部传入的函数的执行放在setTimeout中\n      fn.apply(this, arguments);\n      // 最后在setTimeout执行完毕后再把标记设置为true(关键)表示可以执行下一次循环了。当定时器没有执行的时候标记永远是false，在开头被return掉\n      canRun = true;\n    }, 500);\n  };\n}\n\nthrottle(fn) // 使用\n```\n\n---\n\n\n## 🌵第一章：数值（Number）\n\n---\n\n## 🎄第二章：字符（String）\n\n---\n\n## 🌲第三章：布尔（Boolean）\n\n---\n\n## 🌳第四章：数组（Array）\n\n### 1.数组去重\n\n---\n\n## 🌴第五章：函数（Function）\n\n---\n\n### 1.立即执行函数（IIFE）\n\n**❣️ 立即执行函数不是官方的，像CSS的浮动，也是人们试出来的，作用是立即执行函数内容**\n\n**基础使用，更详细的请看3.JavaScript深入**\n\n```js\n(function () {})() // 我一般用这个\n\n(function () {} ()) // 官方推荐\n\nlet test = function () {\n  console.log('执行了')\n}() // '执行了'\n\n+function test () {\n  console.log('执行了')\n}() // '执行了'\n\n-function test () {\n  console.log('执行了')\n}() // '执行了'\n\n!function test () {\n  console.log('执行了')\n}() // '执行了'\n\nconsole.log(test) //undefined, 立即执行函数会忽略函数名称\n\n```\n\n---\n\n### 2.闭包的应用（感觉可以合并到函数部分）\n\n**实现公有变量**\n\n```js\n\n// 示例：函数累加器\nfunction add () {\n    \n    let count = 0\n\n    return function () {\n        count ++\n        console.log(count)\n    }\n}\n\nlet countFn = add()\ncountFn() // 1\ncountFn() // 2\ncountFn() // 3\n\n```\n\n**可以做缓存（存储结构）**\n\n```js\nfunction test () {\n    let num = 100\n\n    function a () {\n        num ++\n        console.log(num)\n    }\n\n    function b () {\n        num --\n        console.log(num)\n    }\n\n    return [a, b]\n}\n\nlet myFn = test()\nmyFn[0]() // 101\nmyFn[1]() // 100\n\n// ES6 写法\n// let [a, b] = test()\n// a()\n// b()\n\n\n// ****** 🔥示例二 *******\n\nfunction eater () {\n    \n    let name = '朱昆鹏' // 这个就是缓存\n\n    let zhu = {\n        say: function () {\n            console.log('我的姓名是：' + name)\n            name = ''\n        },\n        setName: function (myName) {\n            name = myName\n        }\n    }\n\n    return zhu\n}\n\nlet eater1 = eater()\n\neater1.setName('无')\neater1.say() // 我的姓名是：无\n\n```\n\n**可以实现封装，属性私有化**\n\n<img src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/2.note/4.%E6%8A%80%E6%9C%AF%E6%A0%B9%E5%9F%BA%E7%AC%94%E8%AE%B0/JS%E6%A0%B9%E5%9F%BA/4.png\" />\n\n\n**模块化开发，防止污染全局变量**\n\n主要利用函数是 函数作用域，是独立的作用域\n\n\n---\n\n### 3.函数尾递归优化\n\n**在一个函数中，再次调用自身执行，会造成函数作用域等大量信息被暂存，只有等到函数执行完成之后，才逐层释放，特别占用资源，稍有不慎就会导致浏览器崩溃**\n\n```js\n// 尾递归函数 摘自阮一峰ES6\nfunction tco(f) {\n  let value;\n  let active = false;\n  let accumulated = [];\n\n  return function accumulator() {\n    accumulated.push(arguments);\n    if (!active) {\n      active = true;\n      while (accumulated.length) {\n        value = f.apply(this, accumulated.shift());\n      }\n      active = false;\n      return value;\n    }\n  };\n}\n\n// 使用\n新的函数 = tco(递归函数)\n```\n\n---\n\n## 🌱第六章：对象（Object）\n\n### 1.深度克隆（深度拷贝）\n\n**基础过程**\n\n- 1.判断是否是对象或者数组，如果是的话，需要建立对应的递归逻辑，如果不是的话，直接等于就可以了\n- 2.建立相应的数组或者对象\n- 3.递归\n\n```js\n\nlet zhu = {\n  name: '朱昆鹏',\n  test: [1,2,3],\n  wife: {\n    name: '林雨桐',\n    son: {\n      name: '没有呢',\n      test: [1,2,3,4,5]\n    }\n  }\n}\n\nfunction deepClone(origin, target = {}) {\n\n    // 循环遍历对象的属性\n    for (key in origin) {\n        \n        let isType = Object.prototype.toString.call(origin[key])\n\n        // 克隆对象类型\n        if (isType === '[object Object]') {\n            target[key] = {}\n            deepClone(origin[key], target[key])\n            continue\n        }\n\n        // 克隆数组类型\n         if (isType === '[object Array]') {\n            target[key] = []\n            deepClone(origin[key], target[key])\n            continue\n        }\n\n        // 克隆 Set 类型\n      \n        // 克隆 Map 类型\n\n        // 克隆基础类型\n        target[key] = origin[key]\n    \n    }\n\n    return target\n}\n\nlet zhu1 = {}\ndeepClone(zhu, zhu1)\n\n```\n\n---\n\n**优化深拷贝**\n\n- 1.for in 效率慢（for in > for > while）\n- 2.递归占用大量资源，可以进行尾递归优化\n- 3.其他类型的拷贝（Set，Map，Function...）\n- 可以参考[掘金文章...](https://juejin.im/post/5d6aa4f96fb9a06b112ad5b1#heading-8)\n\n---\n\n### 2.浅克隆\n\n```js\n// 浅拷贝\nfunction clone(origin, target = {}) {\n    let target = {};\n    for (const key in origin) {\n        target[key] = origin[key];\n    }\n    return target;\n};\n```\n\n---\n\n## JavaScript运动\n\n\n\n---\n\n## 之前的内容，等待重构\n\n\n### 🌲数组（Array）\n\n---\n\n### 🔥基本使用\n\n- forEach(): 遍历数组\n- pop()：删除数组中最后一个元素，并返回该元素的值。此方法更改数组的长度\n- shift()：删除数组中第一个元素，并返回该元素的值。此方法更改数组的长度\n- push(): 将一个或多个元素添加到数组的末尾，并返回该数组的新长度\n- unshift()：将一个或多个元素添加到数组的开头，并返回该数组的新长度(该方法修改原有数组)\n\n---\n\n### 🔥处理：Array.prototype.map()\n\n**map() 方法创建一个新数组，其结果是该数组中的每个元素都调用一个提供的函数后返回的结果**\n\n- 此方法可以批量处理 数组中的每一个元素，并且返回值（不会改变原数组）\n\n```js\n[1, 2, 3].map( x => x * 2) // [2, 4, 6]\n```\n\n---\n\n### 🔥处理：Array.prototype.join()\n\n**join() 方法将一个数组（或一个类数组对象）的所有元素连接成一个字符串并返回这个字符串。如果数组只有一个项目，那么将返回该项目而不使用分隔符。**\n\n```js\n['Fire', 'Air', 'Water'].join() // \"Fire,Air,Water\"\n['Fire', 'Air', 'Water'].join('') // \"FireAirWater\"\n['Fire', 'Air', 'Water'].join('-') // \"Fire-Air-Water\"\n```\n\n---\n\n### 🔥处理：Array.prototype.slice() 取出任意元素\n\n**slice() 方法返回一个新的数组对象，这一对象是一个由 begin和 end（不包括end）决定的原数组的浅拷贝。原始数组不会被改变。**\n\n- 拿到数组中任意区间的数据\n\n```JS\n// 参数一：从哪开始，参数二（可选）结束位置，不选的话 就节选到最后了\n[1, 2, 3].slice(0, 1) // [1]\n[1, 2, 3].slice(0, 0) // []\n```\n\n---\n\n### 🔥处理：Array.prototype.splice() 删除任意元素，操作任意元素\n\n**splice() 方法通过删除或替换现有元素或者原地添加新的元素来修改数组,并以数组形式返回被修改的内容。此方法会改变原数组。**\n\n```js\n// 参数一：从哪开始 | 参数二：操作元素的个数 | 参数三：插入元素的值...（可以写多个参数三）\n[1, 2, 3].splice(0, 1) // 删除 [2, 3]\n[1, 2, 3].splice(0) // 删除 [0]\n[1, 2, 3].splice(0, 0, -1) // 插入 [-1, 1, 2, 3]\n```\n\n---\n\n### 排序：Array.prototype.sort()\n\n**sort() 方法用原地算法对数组的元素进行排序，并返回数组。排序算法现在是稳定的。默认排序顺序是根据字符串Unicode码点**\n\n```js\n[1, 1000, 1002, 200, 40].sort() // [1, 1000, 1002, 200, 40] 因为是根据 字符串Unicode码点进行排序的\n[1, 1000, 1002, 200, 40].sort( (a, b) => a - b) // 升序 [1, 40, 200, 1000, 1002]\n[1, 1000, 1002, 200, 40].sort( (a, b) => b - a) // 降序 [1002, 1000, 200, 40, 1]\n```\n\n---\n\n### 🔥处理：Array.prototype.flatMap()\n\n**flatMap() 方法首先使用映射函数映射每个元素，然后将结果压缩成一个新数组。它与 map 和 深度值1的 flat 几乎相同，但 flatMap 通常在合并成一种方法的效率稍微高一些。不会改变原数组**\n\n- 感觉这个像是操作每一个对象，让其可以返回一个值，我觉得可以应用到 将每一项的 字符串转为特定的，我之前使用 forEach 做的\n- 首先经历了两步：\n    - flat() 将多维数组转为一个新数组\n    - map() \n\n```js\n\n[1, 2, 3].flatMap( x => x * 2) // [2, 4, 6]\n[1, 2, 3].map( x => x * 2) // [2, 4, 6]\n\n// 虽然上面用 map 和 flatMap都可以，但是下面\n[\"今天天气不错\", \"\", \"早上好\"].map(s => s.split('')) // [[\"今\", \"天\", \"天\", \"气\", \"不\", \"错\"],[\"\"],[\"早\", \"上\", \"好\"]]\n[\"今天天气不错\", \"\", \"早上好\"].flatMap(s => s.split('')) // [\"今\", \"天\", \"天\", \"气\", \"不\", \"错\", \"\", \"早\", \"上\", \"好\"]\n\n```\n\n---\n\n### 🔥查询：Array.prototype.includes()\n\n**includes() 方法用来判断一个数组是否包含一个指定的值，根据情况，如果包含则返回 true，否则返回false。**\n\n```js\n[1, 2, 3].includes(1) // true\n[1, 2, 3].includes(4) // false\n[1, 2, 3].includes(1, 1) // false // 参数二：fromIndex 从fromIndex 索引处开始查找 valueToFind。如果为负值，则按升序从 array.length + fromIndex 的索引开始搜 （即使从末尾开始往前跳 fromIndex 的绝对值个索引，然后往后搜寻）。默认为 0。\n```\n\n---\n\n### 🔥Array.prototype.reduce()\n\n**reduce() 方法对数组中的每个元素执行一个由您提供的reducer函数(升序执行)，将其结果汇总为单个返回值。**\n\n感觉很有用，但是我用的不熟练 [各种应用](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce)\n\n```js\n[1, 2, 3, 4].reduce( (x, y) => x + y ) // 10 做累加\n[1, 2, 3, 4, 1, 1].reduce( (allNames, name) => { \n  (name in allNames) ? allNames[name]++ : allNames[name] = 1;\n  return allNames;\n}, {}) // 计算数组中每个元素出现的次数 { 1: 3, 2: 1, 3: 1, 4: 1 }\n```\n\n---\n\n### 排序：Array.prototype.reverse()\n\n**reverse() 方法将数组中元素的位置颠倒,并返回该数组。该方法会改变原数组。**\n\n---\n\n### 查找：Array.prototype.indexOf()\n\n**indexOf()方法返回在数组中可以找到一个给定元素的第一个索引，如果不存在，则返回-1。**\n\n```js\n[1, 2, 3].indexOf(1) // 0\n// 参数二：fromIndex 开始查找的位置。如果该索引值大于或等于数组长度，意味着不会在数组里查找，返回-1。如果参数中提供的索引值是一个负值，则将其作为数组末尾的一个抵消，即-1表示从最后一个元素开始查找，-2表示从倒数第二个元素开始查找 ，以此类推。 注意：如果参数中提供的索引值是一个负值，并不改变其查找顺序，查找顺序仍然是从前向后查询数组。如果抵消后的索引值仍小于0，则整个数组都将会被查询。其默认值为0.\n[2, 5, 9].indexOf(2, -3) // 0\n```\n\n---\n\n### 查询：Array.prototype.find() && Array.prototype.findIndex()\n\n**find() 方法返回数组中满足提供的测试函数的第一个元素的值。否则返回 undefined。**\n\n```js\nlet arr = [1, 2, 3]\narr.find(x => x > 1) // 2\narr.find(x => x >= 1) // 1\n```\n\n**findIndex()方法返回数组中满足提供的测试函数的第一个元素的索引。否则返回-1**\n\n```js\nlet arr = [1, 2, 3]\narr.findIndex(x => x > 1) // 1\narr.findIndex(x => x >= 10) // -1\n```\n\n---\n\n### 查询增加：Array.prototype.filter()\n\n**filter() 方法创建一个新数组, 其包含通过所提供函数实现的测试的所有元素，不会改变原有值，如果没符合的返回[]**\n\n```js\nlet arr = [1, 2, 3]\narr.filter( x => x > 1) // [2, 3]\n```\n\n---\n\n### 查询测试：Array.prototype.every()\n\n**every() 方法测试一个数组内的所有元素是否都能通过某个指定函数的测试。它返回一个布尔值。**\n\n```js\n\nlet arr = [1, 2, 3]\narr.every( x => x > 2) // false\n\n```\n\n---\n\n### 查询测试：Array.prototype.some()\n\n**some() 方法测试是否至少有一个元素可以通过被提供的函数方法。该方法返回一个Boolean类型的值。**\n\n```js\n\nlet arr = [1, 2, 3]\narr.some( x => x > 2) // true\n\n\n```\n\n---\n\n### 增加：Array.prototype.concat()\n\n**此方法用于合并两个或多个数组。此方法不会更改现有数组，而是返回一个新数组。**\n\n```js\nlet arr1 = [1, 2, 3],\n    arr2 = [4, 5, 6],\n    arr3 = [7, 8, 9]\n\nlet arr = arr1.concat(arr1, arr2) // [1, 2, 3, 4, 5, 6, 7, 8, 9]\n```\n\n---\n\n### Array.prototype.flat() 适合多维数组转一纬数组\n\n**flat() 方法会按照一个可指定的深度递归遍历数组，并将所有元素与遍历到的子数组中的元素合并为一个新数组返回**\n\n```js\n[1, 2, [3, 4]].flat() // [1, 2, 3, 4]\n[1, 2, [3, 4, [5, 6]]].flat(1) // [1, 2, 3, 4, [5, 6]]\n[1, 2, [3, 4, [5, 6]]].flat(Infinity) // [1, 2, 3, 4, 5, 6]\n```\n\n---\n\n### 增加：Array.prototype.fill()\n\n**fill() 方法用一个固定值填充一个数组中从起始索引到终止索引内的全部元素。不包括终止索引。**\n\n```js\n// 有三个参数，| 用来填充数组元素的值 | 起始索引，默认值为0 | 终止索引，默认值为 this.length\n[1, 2, 3].fill(4) // [4, 4, 4]\n[1, 2, 3].fill(4, 1) // [1, 4, 4]\n[1, 2, 3].fill(4, 1, 1) // [1, 2, 3]\n```\n\n---\n\n### Array.prototype.toSting()\n\n**toString() 返回一个字符串，表示指定的数组及其元素**\n\n```js\n[1, 2, 'a', '1a'].toString() // \"1,2,a,1a\"\n```\n\n---\n\n### Array.prototype.lastIndexOf()\n\n**lastIndexOf() 方法返回指定元素（也即有效的 JavaScript 值或变量）在数组中的最后一个的索引，如果不存在则返回 -1。从数组的后面向前查找，从 fromIndex 处开始。**\n\n```js\n\n['Dodo', 'Tiger', 'Penguin', 'Dodo'].lastIndexOf('Dodo') // 3\n\n```\n\n---\n\n### Array.of()\n\n**Array.of() 方法创建一个具有可变数量参数的新数组实例，而不考虑参数的数量或类型**\n\n我觉的这个我不常用，是用来创建数组的，与Array() 创建数组不同的是，这个是可变数量参数\n\n```js\nArray.of(7);       // [7] \nArray.of(1, 2, 3); // [1, 2, 3]\n\nArray(7);          // [ , , , , , , ]\nArray(1, 2, 3);    // [1, 2, 3]\n```\n\n---\n\n### Array.prototype.copyWithin()\n\n**copyWithin() 方法浅复制数组的一部分到同一数组中的另一个位置，并返回它，不会改变原数组的长度。**\n\n---\n\n### Array.prototype.entries()\n\n**entries() 方法返回一个新的Array Iterator对象，该对象包含数组中每个索引的键/值对**\n\n---\n\n### Array.prototype.keys()\n\n**keys() 方法返回一个包含数组中每个索引键的Array Iterator对象。**\n\n```js\nvar array1 = ['a', 'b', 'c'];\nvar iterator = array1.keys(); \n  \nfor (let key of iterator) {\n  console.log(key); // expected output: 0 1 2\n}\n```\n\n---\n\n### Array.prototype.values()\n\n**values() 方法返回一个新的 Array Iterator 对象，该对象包含数组每个索引的值**\n\n```js\nconst array1 = ['a', 'b', 'c'];\nconst iterator = array1.values();\n\nfor (const value of iterator) {\n  console.log(value); // expected output: \"a\" \"b\" \"c\"\n}\n```\n\n---\n\n### Array.prototype.reduceRight()\n\n**reduceRight() 方法接受一个函数作为累加器（accumulator）和数组的每个值（从右到左）将其减少为单个值。**\n\n---\n\n### Array.prototype.toLocaleString()\n\n**toLocaleString() 返回一个字符串表示数组中的元素。数组中的元素将使用各自的 toLocaleString 方法转成字符串，这些字符串将使用一个特定语言环境的字符串（例如一个逗号 \",\"）隔开。**\n\n感觉有使用的场景\n\n```js\n['￥7', 500, 8123, 12].toLocaleString('ja-JP', { style: 'currency', currency: 'JPY' });\n\n// \"￥7,￥500,￥8,123,￥12\"\n```\n\n\n---\n\n### 🐘对象（Object）\n\n---\n\n### ⏰时间（Date）\n\n### 1.基本使用\n\n```js\nnew Date() // 创建一个时间对象 Fri Jul 12 2019 19:59:59 GMT+0800 (中国标准时间)\n\n// 返回自1970年1月1日 00:00:00 UTC到当前时间的毫秒数。\nDate.now(); // 1562932828164\n\n// 解析一个表示某个日期的字符串，并返回从1970-1-1 00:00:00 UTC 到该日期对象（该日期对象的UTC时间）的毫秒数\nDate.parse('2019.7.12') // 1562860800000\n\n// 年月日时分秒 获取\nlet dateMe = new Date()\n\ndateMe.getFullYear() // 2019 | 根据本地时间返回指定日期的年份\ndateMe.getMonth() // 6 | 根据本地时间，返回一个指定的日期对象的月份，为基于0的值（0表示一年中的第一月）。\ndateMe.getDate() // 12 | 根据本地时间，返回一个指定的日期对象为一个月中的哪一日（从1--31）\ndateMe.getHours() // 20 |根据本地时间，返回一个指定的日期对象的小时。\ndateMe.getMinutes() // 11 | 根据本地时间，返回一个指定的日期对象的分钟数。\ndateMe.getSeconds() // 29 | 方法根据本地时间，返回一个指定的日期对象的秒数\ndateMe.getMilliseconds() // 363 | 根据本地时间，返回一个指定的日期对象的毫秒数。\n\ndateMe.toJSON() // 🔥 \"2019-07-12T12:05:15.363Z\" | 返回 Date 对象的字符串形式\ndateMe.getDay() // 5 | 根据本地时间，返回一个具体日期中一周的第几天，0 表示星期天（0 - 6）\ndateMe.getTime() // 1562933115363 | 方法返回一个时间的格林威治时间数值。\ndateMe.toString() // \"Fri Jul 12 2019 20:05:15 GMT+0800 (中国标准时间)\" | 返回一个字符串，表示该Date对象\ndateMe.getTimezoneOffset() // -480（说明比正常时区慢480分钟，所以要加480分钟才对） | 返回协调世界时（UTC）相对于当前时区的时间差值，单位为分钟。\ndateMe.toDateString() // \"Fri Jul 12 2019\" | 以美式英语和人类易读的形式返回一个日期对象日期部分的字符串。\n\n```\n\n[MDN 更多详细](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Date)\n\n---\n\n"
  },
  {
    "path": "docs/blog/4.JavaScript/4.ES6.md",
    "content": "---\ntitle: 4.ES6\ndate: 2020-01-30 00:00:00\npermalink: \ntag: \n - blog\n - 4.JavaScript\n---\n\n> 注意此处：内容不全，结构混乱，等待重构...\n\n---\n\n## ES6\n\n### 0.ES6模块化\n\n\n```html\n<!-- 在浏览器中使用ES6模块：模块作用域，自动严格模式 -->\n<script type=\"module\"></script>\n```\n\n**模块的导入和导出**\n\n```js\n// 导出 a.js\nlet a = 10;\nlet b = 20;\n// export c = 30; 定义时导出\n\nexport default {\n  a,\n  b\n}\n\n\n// 导入 a.js\nimport { a, b } from './a.js'\nconsole.log(a) // 10\nconsole.log(b) // 20\n\nimport * as m from './a.js' // 全部引入\n// Module {\n//   default: Object,\n//   Symbol(Symbol.toStringTag): \"Module\"\n// }\n\nimport('./a.js').then( m => {console.log('m', m)}) // 异步引入\n// Module {\n//   default: Object,\n//   Symbol(Symbol.toStringTag): \"Module\"\n// }\n\n```\n\n---\n\n### 1.基础（定义变量，模板字符串）\n\n**定义变量的新方式**\n\n- let关键字\n  - 块级作用域\n  - 变量提升，暂时性死区\n  - 不允许重复声明\n- const关键字（定义常量）\n  - 类似于let\n  - 不允许重复赋值\n\n---\n\n**let 和 const 到底有没有变量提升？有的话，为什么不能在定义前使用？**\n\n- var 的「创建」和「初始化」都被提升了\n- function 的「创建」「初始化」和「赋值」都被提升了\n- let 的「创建」过程被提升了，但是初始化没有提升\n- const 只有「创建」和「初始化」，没有「赋值」过程\n\n<img src=\"https://pic1.zhimg.com/80/v2-9c8c4a0a3ce5402b1a74f488d79c74d0_hd.jpg\" />\n\n[原文链接](https://zhuanlan.zhihu.com/p/28140450)\n\n---\n\n**模板字符串**\n\n```js\n\n// 实现这个效果\n// 你好世界!\n// 早上好\n\n// ES5\nlet str = '世界'\nlet str = '你好' + str + '!\\n' + '早上好'\n\n// ES6\nlet strEs6 = `\n你好${str}!\n早上好\n`\n\n```\n\n---\n\n### 2.数组拓展\n\n**拓展运算符**\n\n```js\n// 求数组这里面最大的值\nlet arr = [1,2,34,5,6,9]\n\n// 原生API Math.max(1,2,34,5,6,9) 接收的是一组数，所以还需要转一下\nMath.max.apply(null, arr) //ES5 34\nMath.max(...arr) // ES6 34\n\n```\n\n**❣️注意：数组的拓展运算符是浅拷贝**\n\n---\n\n**解构赋值：本质是模式匹配**\n\n```js\n\nlet arr = [1,2,3]\nlet { x, y, z } = arr\nx // 1\ny // 2\nz // 3\n\n```\n\n---\n\n**ES6新增的静态方法：Array.from() && Array.of()**\n\n```js\n// Array.from() 将类数组或者具有迭代器接口的 转为 真正数组\nArray.from(arguments)\n\n// Array.of() 传入参数，创建一个数组（对标 new Array() 创建一个时候有问题的，用of更规范）\nArray.of(13) // [13]\nArray.of(13, 14) // [13, 14]\n\nnew Array(13) // 会创建一个长度 13的数组\nnew Array(13, 14) // [13, 14]\n```\n\n---\n\n**ES6新增原型上的方法：**\n\n- Array.prototype.find() 找数组中是否有满足条件的内容，返回 true/false\n- Array.prototype.findIndex() 找数组中是否有满足条件的内容，返回 坐标/-1\n- Array.prototype.includes() 找数组中是否有满足条件的内容（❣️和find不一样的是，这个内部判断依据是 ==，而 find判断依据是 ===）\n  - 也就是这个可以判断是否存在 NaN\n- Array.prototype.fill() 传入一个数，这个数组每一项 都会变成这个数\n- Array.prototype.flat() 降纬数组，参数如果是Infinity可以把任意纬度，降到一维\n- Array.prototype.\n\n```js\n\n// 做个题吧 [1,2,3] 变成 [1,0,2,0,0,3,0,0,0] （1后面加上1个0，2后面加上2个0，3后面加上3个0）\nlet arr = [1,2,3]\narr.map( item => [item, ...new Array(item).fill(0)]).flat() //  [1, 0, 2, 0, 0, 3, 0, 0, 0]\n\n```\n\n---\n\n### 3.解构赋值详解\n\n我看着这个功能，看不到底层，只能看这个的规则\n\n```js\n\n// 结构对象\nlet obj = {\n  name: '朱昆鹏',\n  age: 21\n}\n\n{ name, age } = obj // name = '朱昆鹏', age = 20\n{ name: onName, age: onAge } = obj // onName = '朱昆鹏', onAge = 20\n{ name: onName, age: onAge, sex = 'man' } = obj // onName = '朱昆鹏', onAge = 20, sex = 'man'\n\n\n// 解构数组\nlet arr = [1, 2, 3]\n{x , y, z} = arr // undefined\n{0: x , 1: y, 2: z} = arr // x = 1, y = 2, z = 3\n[x, y, z] = arr // x = 1, y = 2, z = 3\n{ length } = arr // length = 3\n\n```\n\n---\n\n**❣️本质上是模式匹配，主要是为了让你更方便的拿到数据，简化代码**\n\n```js\n// 示例\nlet obj = {\n  data: {\n    name: '朱昆鹏',\n    age: 21\n  }\n}\n\n// 不用解构赋值的时候\nlet name = obj.data.name\nlet age = obj.data.age\n\n// 使用解构赋值\nlet { name, age } = obj.data\n\n```\n\n---\n\n### 4.箭头函数\n\n**特点**\n\n- 不用写function关键字\n- 可以不写return（如果不是一样的话，不写的话，就会在最后一样返回 return undefined）\n- 参数不能重复\n- 只能作为函数，不能 new ，没有原型\n- ❣️内部的 this 由定义时外围最接近一层的非箭头函数的 this 组成（箭头函数外层没有包着function，那么恒为this）\n- ❣️箭头函数没有 arguments，但是有拓展参数，是ES6用来取代 arguments的\n\n\n```js\n\nconst sum =  (num1, num2) => num1 + num2;\nconst sum =  (num1, num2) => ({num1 + num2}); // ❣️返回的如果是一行，并且是对象的时候，语法可能会报错，这时候，就要加一个 () 在外面了\n\nconst fn1 = () => {\n  console.log(arguments, this) // arguments 没定义 | this 是 window\n}\n\nlet obj = {\n  fn2 () {\n    const fn1 = () => {\n      console.log(arguments, this) // fn2 的 arguments | this 是 obj（因为箭头函数外层有 function 函数 🔥）\n    }\n  }\n}\n\n```\n\n---\n\n**拓展参数**\n\n```js\n// 注意事项，...args 必须放到尾部才行，后面不能跟任何参数（前面可以加，这样拓展参数就是剩下的参数）\nconst sum = (...args) => {\n\n  // args是一个真正的数组，而arguments是类数组\n  args.forEach( item => { \n    console.log(item)\n  })\n\n}\n\nsum(1,2,3,4,5)\n```\n\n---\n\n**babel编译之后的箭头函数（箭头函数就就是一个语法糖）**\n\n---\n\n### 5.对象的拓展\n\n**Object新增的静态方法**\n\n```js\nlet obj1 = { a: 1, b: 2 }\nlet obj2 = { c: 3, d: 4 }\n\n// Object.assign() 浅拷贝\nObject.assign(obj1, obj2) // 和拓展运算符写法基本一样，不一样的在于，这个会改变参数一的值\nobj1 // { a: 1, b: 2, c: 3, d: 4 } | Object.assign({}, obj1, obj2) 这样写\n\nObject.keys(obj1) // [a, b]\nObject.values(obj1) // [1, 2]\nObject.entries(obj1) // [ ['a', 1], ['b', 2] ]\n\nObject.is(NaN, NaN) // true | Number.isNaN()也能判断\nObject.is(0, -1) // false | \n```\n\n---\n\n### 🔥6.Object.defineProperty\n\n- 简介：ES5规范开始，后续版本迭代，致力于做一件事情，就是把JS底层的功能提供给开发者使用。\n- Object.defineProperty 就是其中的一个（之前是浏览器内部使用的，开发者没办法使用），此方法会直接在一个对象上定义一个新的具有详细描述的属性，或者修改一个对象的现有属性，并返回这个对象\n- 使用\n  - 数据描述符\n    - value: 'xxx' 属性值 | 默认 ''\n    - writable: true 是否可写 | 默认 false\n    - configurable: true 是否可配置 | 默认 false\n    - enumerable: true 是否可枚举 | 默认 false\n  - 存取描述符\n    - set: function () {} 属性访问器 进行写操作时调用该方法\n    - get: function () {} 属性访问器 进行读操作时调用该方法\n\n---\n\n**之前浏览器 内部使用 Object.defineProperty 的示例**\n\n```js\n// 不可写的案例\nFunction.prototype = '不可写'\nconsole.log(Function.prototype) // ƒ () { [native code] } | 没变\n\n// 不可配置案例\nwindow.a = 10\ndelete window.a // false\n\n// 可枚举案例\nlet obj = {\n  name: '朱昆鹏',\n  __proto__: {\n    age: 20\n  }\n}\nfor (let prop in obj) {\n  console.log(prop) // name age\n}\n\n// 不可枚举的案例\nfor (let prop in Object.prototype) {\n  console.log(prop) // 虽然 Object.prototype 上有很多对象 ，但是结果是 无\n}\n\n```\n\n---\n\n**Object.defineProperty 数据描述符**\n\n```js\nlet obj = {\n  // name: '朱昆鹏' // 如果写上的话，默认配置都是 true\n}\n\n// 参数一：对象 | 参数二：属性名 | 参数三：对这个属性的 配置\nObject.defineProperty(obj, 'name', {\n    value: '朱昆鹏',\n    writable: false, // 是否可写 | 默认 false\n    configurable: true, //是否可配置 | 默认 false\n    enumerable: true // 是否可枚举 | 默认 false\n})\n\nobj.name = 1\nobj.name // 朱昆鹏\n\ndelete obj.name // true\nobj.name // {}\n```\n\n---\n\n**Object.defineProperty 存取描述符**\n\n```js\nlet obj = {\n  // name: '朱昆鹏' // 如果写上的话，默认配置都是 true\n}\n\nlet tempValue = '朱昆鹏 get'\n// 参数一：对象 | 参数二：属性名 | 参数三：对这个属性的 配置\nObject.defineProperty(obj, 'name', {\n    // value: '朱昆鹏',\n    // writable: false, // 是否可写 | 默认 false\n    configurable: true, //是否可配置 | 默认 false\n    enumerable: true // 是否可枚举 | 默认 false\n\n    // set , get 和 value writable 不能共存（会报错）\n    set(newValue) {\n      tempValue = newValue\n    },\n    get() {\n      return tempValue\n    }\n})\n\n\n// 另一种写法\nlet obj1 = {\n  tempValue: '朱昆鹏',\n  get name () {\n    return this.tempValue\n  },\n  set name (newValue) {\n    this.tempValue = newValue\n  }\n}\n\nobj1.name = '测试'\nobj1 // {tempValue: '测试', name: '测试'}\n```\n\n**❣️我觉得这个写法定义了一个多余的变量，不是很好，肯定有更好的方法，我还是多学习一下吧**\n\n---\n\n### 🔥7.数据劫持\n\n- Vue双向数据绑定核心功能是由 Observer, Compile, Watcher 三部分实现\n- 其中 Observer（监听数据变化进行相应的回调 - 数据劫持） 部分功能就是用 Object.defineProperty 来实现的（Vue2.x之后用 Proxy&Reflect 重构了）\n\n**我们来做一个案例：当我们的数据改变的时候，让视图（页面）也随之改变**\n\n```html\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\">\n    <title>Document</title>\n</head>\n<body>\n    \n    <input type=\"text\" id=\"inputDemo\">\n    <div id=\"divDemo\"></div>\n\n    <script>\n        \n        let oInput = document.getElementById('inputDemo');\n        let oDiv = document.getElementById('divDemo');\n\n        let obj = {\n            name: '朱昆鹏',\n            me: {\n                age: 20\n            }\n        }\n\n        function upData () {\n            oDiv.innerText = obj.me.age\n        }\n        \n        // 检测对象的某个属性是否发生改变\n        function Observer (data) {\n\n            if (!data || typeof data != 'object') return data;\n\n            Object.keys(data).forEach( key => {\n                definedRective(data, key, data[key])\n            })\n\n        }\n\n        function definedRective(data, key, val) {\n            Observer(val) // 递归，这样让深层次对象具有监控作用\n\n            Object.defineProperty(data, key, {\n                get() {\n                    return val\n                },\n                set(newValue) {\n                    if (newValue == val) return;\n                    val = newValue;\n                    upData() // 执行改变视图\n                }\n            })\n        }\n\n        //（事件）输入框改变事件\n        oInput.addEventListener('input', function (event) {\n            obj.me.age = event.target.value\n        })\n\n        Observer(obj)\n        upData()\n\n    </script>\n\n</body>\n</html>\n```\n\n<img src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/2.notes/3.JavaScript/ES6%E4%BB%A5%E5%8F%8AJS%E5%86%85%E7%BD%AE%E6%96%B9%E6%B3%95%E6%A2%B3%E7%90%86/1Object.defineProperty%E5%AE%9E%E7%8E%B0%E5%8F%8C%E5%90%91%E6%95%B0%E6%8D%AE%E7%BB%91%E5%AE%9A.gif\" />\n\n---\n\n**思考：Vue是怎么监听到 数组中改变的呢？**\n\n```js\n// 在Vue中 数组中改变想要监听，需要用特定的方法，例如 push pop unshift shift...等等\n// 原理是 Vue 重写了这些方法\nObject.defineProperty(Array.property, 'push', {\n\n})\n```\n\n---\n\n### 🔥8.Proxy & Reflect\n\n- 这个东西有兼容性问题，你可能会想了，可以通过 babel 进行编译，编译成ES5不就可以了么，但是 babel 编译本质上是将 ES6语法糖编成 ES5代码，但是 Proxy 和 Reflect 不是语法糖，这是浏览器内部实现的东西，编译之后其实还是他们本身\n\n**Proxy（代理）**\n\n- 植入代理模式的思想，以简洁易懂的方式控制对外部对象的访问\n- 利用内置的 set, get 方法控制属性的读写功能用处比较大，其余 has, delePropery...等方法不太在工作开发中使用，有兴趣可以了解下\n\n```html\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\">\n    <title>Document</title>\n</head>\n<body>\n    \n    <input type=\"text\" id=\"inputDemo\">\n    <div id=\"divDemo\"></div>\n\n    <script>\n        \n        let oInput = document.getElementById('inputDemo');\n        let oDiv = document.getElementById('divDemo');\n\n        let obj = {\n            name: '朱昆鹏',\n            me: {\n                age: 20\n            }\n        }\n\n        function upData () {\n            oDiv.innerText = objProxy.name\n        }\n\n        let objProxy = new Proxy(obj, {\n            // 参数一：对象本身 | 参数二：对象的 属性名 | 参数三：赋的值 | 参数四：一个Proxy格式的对象\n            set (target, key, value, receiver) {\n                Reflect.set(target, key, value);\n                upData() // 执行改变视图\n            },\n            // 参数一：对象本身 | 参数二：对象的 属性名 | 参数三：一个Proxy格式的对象\n            get (target, key, receiver) {\n                return Reflect.get(target, key);\n            }\n        })\n\n        //（事件）输入框改变事件\n        oInput.addEventListener('input', function (event) {\n            objProxy.name = event.target.value\n        })\n\n        upData()\n\n    </script>\n\n</body>\n</html>\n```\n\n**❣️ obj.me.age Proxy监听不到变化，这怎么办？**\n\n---\n\n### 9.Class（面向对象）\n\n**ES5时代的 面向对象**\n\n```js\n// 工厂模式 创建对象\nfunction Preson () {\n  this.name = '人'\n}\n\n// 方法写到原型链上\nPreson.prototype.say = function () {\n  console.log('说话')\n}\n\n\n// =======+ ES5 继承 +=========\n// 圣杯模式继承方法\n```\n\n---\n\n**ES6时代 面向对象**\n\n```js\nclass Preson {\n  constructor (name, age) {\n    this.name = name || '人'\n    this.age = age || 20\n  }\n  say () {\n    console.log('说')\n  }\n\n  // ES7 才能这么写 static name = '人'， ES6 只能写函数\n  // 静态写法\n  static name () {\n    return '人'\n  }\n\n  // ES7 私有属性\n  // name = 10\n}\n\nclass Zhu extends Preson{\n  constructor (sex) {\n    super()\n    this.sex = sex || '男'\n  }\n}\n\nlet zhukunpeng = new Zhu('朱昆鹏', 21, '男') // {name: \"人\", age: 20, sex: \"朱昆鹏\"}\n```\n\n---\n\n**ES5 模拟Class**\n\n略...\n\n---\n\n**ES7 Class（提案，最新的浏览器有的也没支持，需要babel降级，先了解吧）**\n\n- static property = xxx 静态属性\n- property = xxx 私有属性\n- @decorator 装饰器\n\n\n---\n\n### 10.Set\n\n- 简介：Set是ES6提供给我们的一个构造函数（需要new），能构造出一种新的存储数据的结构\n- 特点：只有属性值（和数组差不多 0:... 这样的），成员值唯一（不重复）\n- 用途：可以转成数组，其本身具备去重，取交集，并集，差集的错用\n- 备注：\n  - babel无法降级（编译之后还是它本身），因为和 proxy 一样，属于浏览器内置的实现\n  - new Set() 参数必须要是 具有迭代接口的（数组是，字符串是，Set也是，......）(原型上具备 Symbol的就是具备迭代接口)\n\n```js\n\nlet setArr = new Set('abc') // Set(3) {\"a\", \"b\", \"c\"}\n\n// 添加 add()\nsetArr.add('z') // {\"a\", \"b\", \"c\", \"z\"}\nsetArr.add('a') // {\"a\", \"b\", \"c\", \"z\"}\n\n// 删除 delete()\nsetArr.delete('z') // true {\"a\", \"b\", \"c\"}\n\n// 清空 clear()\nsetArr.clear() // Set(0) {}\n\n// 判断有没有某值 has() | 数组中可以用 some() every()\nsetArr.has('z') // fasle\n\n// 遍历 forEach()\nsetArr.forEach(value => {\n  console.log(value) // a | b  c\n})\n\n// 拓展：迭代接口遍历 for of\nfor (let prop of setArr) {\n  console.log(prop) // a | b  c\n}\n\n// 🔥Set 和 数组的转换\nlet arr = [1, 2, 3]\nlet setArr2 = new Set(arr) // 数组 ---》 Set\n...setArr2 // Set ---》数组\nArray.from(setArr2) // 🔥能把类数组，和具备迭代接口的类型，转为 数组\n\n```\n\n---\n\n**🔥Set应用场景**\n\n```js\n\n// 数组去重\n[...new Set([2,3,4,5,6,6,2,1,4])] // [2, 3, 4, 5, 6, 1]\n\n\nlet arr1 = [1, 2, 3]\nlet arr2 = [3, 4, 5]\n\n// 并集\n[...new Set([...arr1, ...arr2])] // [1, 2, 3, 3, 4, 5]\n\n// 交集\nlet setArr1 = new Set(arr1)\nlet setArr2 = new Set(arr2)\n[...setArr1].filter(item => setArr2.has(item)) // [3]\n\n// 差集\nlet setArr1 = new Set(arr1)\nlet setArr2 = new Set(arr2)\n[...setArr1].filter(item => !setArr2.has(item)) // [1, 2]\n[...setArr2].filter(item => !setArr1.has(item)) // [4, 5]\n// 把上面 合并就好了\n\n```\n\n---\n\n### 11.Map（键值对）\n\n```js\nconst pres = new Map()\npres.set(name, '朱昆鹏')\npres.set(age, 20)\n\n\n```\n\n---\n\n### 12.Symbol\n\n这是一种新的数据类型（ES9或者其他版本中，有bigint这个类型）\n\n```js\n// 用处：当做对象的唯一键值\nconst s1 = Symbol()\n\nconst obj = {\n  [s1]: '朱昆鹏'\n}\n\nobj[s1] // 朱昆鹏\n```\n\n---\n\n### 🔥13.异步编程\n\n##### 1.promise初探\n\n- 异步编程概念：\n  - 无论是浏览器还是Node环境中，都会使用JavaScript进行异步操作，例如定时器，事件，ajax，或者node环境中的文件读取等\n  - 随着异步编程的就是回调机制，也就是说异步避免不了要使用回调\n- 异步编程的问题\n  - 产生回调地狱，难于维护和拓展\n  - try catch只能捕获同步代码中出现的异常\n  - 同步并发的异步存在一定的问题\n\n**Promise介绍**\n\n- ES6 的 promise 可以解决回调地狱，以及同步并发的异步问题（异步操作的异常捕获有其他方法解决）\n- 但依旧会有明显的回调痕迹，之后学习 async/await 就能让异步代码看起来和同步一样\n\n---\n\n##### 2.异步的使用场景（我们使用Node来试试）\n\n```js\n// Node文件读取，演示异步使用中 回调的问题 ❌\n\n// 文件读取\nlet fs = require('fs')\n\nfs.readFile('./a.js', 'utf-8', (err, data1) => {\n    console.log(data1)  \n    fs.readFile(data1.url, 'utf-8', (err, data2) => {\n        console.log(data2)\n        fs.readFile(data2.url, 'utf-8', (err, data3) => {\n            console.log(data3)\n        })\n    })\n})\n\n\n// 定时器，演示异步使用场景中 捕获不到 异常的问题 ❌\n\ntry {\n  setTimeout( () => {\n      console.log(a)\n  }, 1000)\n} catch (e) {\n    console.log(e)\n}\n\n\n// 并发异步操作（我们想等所有的异步都结束之后，再干一件事情）\n// 我想想读几个文件，然后需要等都完成之后，再做操作，这个应该怎么做❓\n\n// 这里有个发布订阅者模式很好用，而且那个 --时间的非常的妙\n\n```\n\n---\n\n##### 3.Promise使用1\n\n```js\n// 传递一个参数，注意，这个参数是 同步执行的\nlet promise = new Promise( () => {\n  console.log(0)\n})\nconsole.log(1)\n\n// 0 1\n```\n\n**基本使用**\n\n```js\nlet promise = new Promise((res, rej) => {\n\n  setTimeout( () => {\n    Math.random() * 100 > 60 ? res('ok') : rej('no')\n  }, 1000)\n\n})\n\n// Promise 有三种状态 pending 进行时 | onFulfilled 成功 | onRejected 失败\n// ❣️：.then 里面的函数，是异步执行的（放到了微队列里面）\npromise.then( (res) => {\n  console.log('res', res)\n}, (rej) => {\n  console.log('rej', rej)\n})\n\n```\n\n**链式操作**\n\n```js\nlet promise = new Promise((res, rej) => {\n\n  setTimeout( () => {\n    Math.random() * 100 > 60 ? res('ok') : rej('no')\n  }, 1000)\n\n})\n\n// Promise 有三种状态 pending 进行时 | onFulfilled 成功 | onRejected 失败\n// ❣️：.then 里面的函数，是异步执行的（放到了微队列里面）\npromise.then( (res) => {\n  console.log('res', res)\n  return 20\n}, (rej) => {\n  console.log('rej', rej)\n  return 30\n}).then( (res) => {\n  console.log('ok:', res) // ok:20 | ok:30\n}, (rej) => {\n  console.log('no:', rej) // 只有上面抛出错误才会执行到这里（这里有点绕，但是没事）\n})\n\n```\n\n---\n\n##### 4.Promise使用2\n\n- then() 注册函数返回值\n- catch() 异常捕获\n- finally() 最后处理函数\n- Promise.all() 同步并发异步的结果\n- Promise.race() 谁先成功就处理谁\n\n```js\nlet promise = new Promise( (res, rej) => {\n  res()\n})\n\npromise.then( res => {\n  throw new Error('出错')\n}).catch( err => {\n  console.log(err) // Error: 出错 at /Users/zhukunpeng/Desktop/Git-notes/b.js:6:11\n}).then( res => {\n\n}).finally( () => {\n  console.log('最后处理的函数')\n}) \n\n// .catch() 不是结束，后面还可以进行 .then() 操作，.finally() 是最后处理的函数，后面不能 .then() 了\n\n```\n\n**Promise.all() && Promise.rece()**\n\n```js\nfunction readFile (path) {\n  return new Promise( (res, rej) => {\n    fs.readFile(path, 'utf-8', (err, data) => {\n      if (data) res(data);\n    })\n  })\n}\n\n// Promise.all() 可以将多个promise实例包装成一个新的 promise实例\n// ❣️：如果都成功，那么会返回一个包含各个数据的数组\n// ❣️：如果有失败的话，会返回第一个触发失败的值的内容\nPromise.all([readFile('./a.js'), readFile('./b.js'), readFile('./c.js')]).then( res => {\n  console.log(res) // ['a.js', 'b.js', 'c.js']\n})\n\nPromise.rece([readFile('./a.js'), readFile('./b.js'), readFile('./c.js')]).then( res => {\n  console.log(res) // 'a.js' || 'b.js' || 'c.js'\n})\n\n```\n\n\n\n\n\n---\n\n##### 5.async/await\n\n\n- 返回一个Promise对象\n- 类似于同步的代码，来写异步代码\n- try catch 可以捕获到异常\n- 同步并发 需要写额外的 函数\n\n\n\n\n\n\n\n\n\n---\n\n## JS 各个内置API功能实现\n\n### 1.forEach实现\n\n```js\nArray.prototype.myForEach = function(func) {\n  let _arr = this,\n      len = _arr.length,\n      parmas = arguments[1] || window;\n  \n  for (let i = 0; i < len; i++) {\n    func.apply(parmas, [_arr[i], i, _arr])\n  }\n}\n\nlet arr = [1, 2, 3]\n\narr.myForEach( (item, index, self) => {\n    console.log(item, index, self, this)\n}, {name: '123'})\n\n// 体会：forEach 的主要作用还是遍历，并不能修改里面各个的值；map 才是那种可以操作数组每一项的值\n```\n\n---\n\n### 2.filter（过滤）\n\n```js\n// 执行完成之后，会返回一个新数组 | 参数和 forEach 一样， ele index self this\n// 每一项执行中会返回 true false 如果是 true 就将这一项返回给最后返回的新数组中\nArray.prototype.myFilter = function (func) {\n\n  let _arr = this,\n      len = _arr.length,\n      parmas = arguments[1] || window,\n      newArr = [];\n\n  for (let i = 0; i < len; i++) {\n    func.apply(parmas, [_arr[i], i, _arr]) ? newArr.push(_arr[i]) : '';\n  }\n\n  return newArr\n}\n\nlet arr = [1, 2, 3]\n\narr.myFilter( item => item > 1); // [2, 3]\n```\n\n---\n\n### 3.map（映射）\n\n```js\nArray.prototype.myMap = function (func) {\n\n  let _arr = this,\n      len = _arr.length,\n      params = arguments[1] || window,\n      newArr = [];\n  \n  for (let i = 0; i < len; i++) {\n    newArr.push(func.apply(params, [_arr[i], i, _arr]))\n  }\n\n  return newArr\n\n}\n\nlet arr = [1, 2, 3]\n\narr.myMap(item => item += 2) // [3, 4, 5]\n\n// 到这里我才知道为什么 Map 可以控制循环每一个的值，而forEach不行，因为 forEach 就是遍历用的，不做返回的操作\n```\n\n---\n\n### 4.every（是否都符合要求）\n\n```js\nArray.prototype.myEvery = function (func) {\n  let _arr = this,\n      len = _arr.length,\n      params = arguments[1] || window;\n\n  for (let i = 0; i < len; i++) {\n    if (!func.apply(params, [_arr[i], i, _arr])) {\n       return false;\n    }\n  }\n\n  return true;\n\n}\n\nlet arr = [1, 2, 3]\n\narr.myEvery( item => item > 1) // false\narr.myEvery( item => item > 0) // true\n```\n\n---\n\n### 5.some（是否有至少一个符合要求）\n\n```js\nArray.prototype.mySome = function (func) {\n  let _arr = this,\n      len = _arr.length,\n      params = arguments[1] || window;\n  \n  for (let i = 0; i < len; i++) {\n    if (func.apply(params, [_arr[i], i, _arr])) {\n      return true;\n    }\n  }\n\n  return false;\n\n}\n\nlet arr = [1, 2, 3]\n\narr.mySome( item => item > 2) // true\narr.mySome( item => item > 3) // false\n\n\n```\n\n---\n\n## Promise+\n\n### AOP\n\n```js\n\n/**\n * AOP 编程\n */\nfunction fn(name) {\n  console.log('hello world ' + name)\n}\n\nFunction.prototype.before = function(callback) {\n  return (...args) => {\n    callback();\n    this(...args);\n  }\n}\n\nlet newFn = fn.before(() => {\n  console.log('在函数执行前 执行')\n})\n\nnewFn('朱昆鹏') \n\n// 在函数执行前 执行\n// hello world\n```\n\n---\n\n### 函数柯里化\n\n```js\n\n/**\n * 函数柯里化\n */\n\nconst curring = (fn, arr = []) => {\n  let len = fn.length // 函数的length就是参数的个数\n  return (...args) => {\n    let newArgs = [...arr, ...args]\n    return newArgs.length == len\n      ? fn(...newArgs)\n      : curring(fn, newArgs)\n  }\n}\n\nlet newSum = curring((a, b, c, d, f) => {\n  return a + b + c + d + f\n})\n\nconsole.log(newSum(1)(2)(3)(4)(5)) // 15\n```\n\n---\n\n### 延迟执行原理\n\n```js\n\n/**\n * 拓展：loash after 函数原理（函数在第几次执行之后执行，运用了闭包，Promise.all 差不多也是这个原理）\n */\nfunction after(times, callback) {\n  return (...args) => {\n    if (--times === 0) {\n      callback(...args)\n    }\n  }\n}\n\nlet newFn = after(3, (name) => {\n  console.log('hello world  ' + name)\n})\n\nnewFn()\nnewFn()\nnewFn('朱昆鹏') // hello world 朱昆鹏\n```\n\n---\n\n> 发布订阅模式 和 订阅观察者模式 之间的关系\n\n> 发布订阅，发布 和 订阅 之间没有联系，就和中介模式一样，由中介来进行处理\n\n> 订阅和观察者 之间有关系，观察者里面存着 订阅者的方法，到时候 观察者变化了，会通知订阅者执行方法\n\n<img style=\"width: 500px\" src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/2.notes/3.JavaScript/ES6%E4%BB%A5%E5%8F%8AJS%E5%86%85%E7%BD%AE%E6%96%B9%E6%B3%95%E6%A2%B3%E7%90%86/clipboard_20200906100429.png\" />\n\n---\n\n或者举个生活中的例子：租房\n\n- 发布订阅模式，就相当于，租户的，和房东 不认识，租户租房要找中介，房东先把房子租出去，也要找房东，租户通知中介要租房了，中介找到合适的了，就通知房东签合同\n- 观察订阅模式，相当于，租户和房东 认识，租户想租房直接找房东租就行了，租户这里存放这 房东租房的方法，少了一个中介的\n\n---\n\n### 发布订阅\n\n> 其实对这里我还是不太理解，感觉还有更好的示例\n\n```js\nconst eventObj = {\n  _arr: [], // 中介存放，订阅事件\n  \n  on(fn) {\n    this._arr.push(fn)\n  },\n\n  emit() {\n    this._arr.forEach(fn => fn())\n  }\n}\n\nfunction fn1() {\n  console.log('租房1')\n}\n\nfunction fn2() {\n  console.log('租房1')\n}\n\neventObj.on(fn1) // 订阅\neventObj.on(fn2) // 订阅\n\neventObj.emit() // 执行所有的订阅事件\n```\n\n---\n\n### 观察者模式\n\n```js\n/**\n * 观察者模式\n */\n\nclass Subject {\n  constructor(name) {\n    this.name = name\n    this.Observers = []\n    this.state = '玩'\n  }\n\n  // 被观察者中要存放所有的观察者\n  attach(o) {\n    this.Observers.push(o)\n  }\n\n  setState(newState) {\n    this.state = newState\n    this.Observers.forEach(o => o.update(this))\n  }\n}\n\nclass Observer {\n  constructor(name) {\n    this.name = name\n  }\n\n  update(body) {\n    console.log(`${body.name}跟${this.name}说${body.state}`)\n  }\n}\n\n// 小宝宝\n\nlet body = new Subject('小宝宝')\nlet o1 = new Observer('爸爸')\nlet o2 = new Observer('妈妈')\n\nbody.attach(o1)\nbody.attach(o2)\n\nbody.setState('有人打我')\n\n// 小宝宝跟爸爸说有人打我\n// 小宝宝跟妈妈说有人打我\n```\n\n---\n\n### 简单版本\n\n```js\nclass MyPromise{\n\n  constructor(executor) {\n    this.status = 'pending' // pending Fulfilled Rejected\n    this.value = undefined; // 正确返回信息\n    this.reason = undefined; // 错误返回信息\n    \n    this.resovleArr = [] // resovle\n    this.rejectArr = [] // reject \n\n\n    // 成功\n    const resolve = (val) => {\n      if (this.status === 'pending') {\n        this.status = 'Fulfilled';\n        this.value = val;\n        this.resovleArr.forEach(fn => fn(this.val));\n      }\n    }\n\n    // 失败\n    const reject = (reason) => {\n      if (this.status === 'pending') {\n        this.status = 'Rejected';\n        this.reason = reason;\n        this.resovleArr.forEach(fn => fn(this.reason));\n      }\n    }\n\n    try {\n      executor(resolve, reject)\n    } catch (error) {\n      reject(e)\n    }\n  }\n\n  then(onFulfilled, onRejected) {\n    \n    if (this.status == 'Fulfilled') {\n      onFulfilled(this.value)\n    }\n\n    if (this.status == 'Rejected') {\n      onRejected(this.reason)\n    }\n\n    if (this.status == 'pending') {\n      \n      this.resovleArr.push(() => {\n        onFulfilled(this.value)\n      })\n\n      this.rejectArr.push(() => {\n        onRejected(this.reason)\n      })\n    }\n  }\n}\n\n\nconst promise = new MyPromise((resovle, reject) => {\n  setTimeout(() => {\n    resovle('成功')\n  }, 1000);\n})\n\npromise.then(res => {\n  console.log('res', res);\n})\n\n// 问题1：.then 是怎么链式调用的\n```\n\n---\n\n### 传统实现\n\n```js\n// 实现的原理\n\n// promise是一个状态机，能根据不同的状态 触发不同的回调\n// Pending 等待 | Fulfilled 成功 | Rejected 失败\n\n// 参数传一个函数，\nfunction MyPromise (fn) {\n\n    // promise是一个状态机，能根据不同的状态 触发不同的回调\n    // pending 等待 | Fulfilled 成功 | Rejected 失败\n\n    let that = this\n    that.status = 'pending';\n    that.resolveValue = null;\n    that.rejectValue = null;\n    \n    // 如何解决异步呢？我们执行的时候先不执行，等到res() 触发的时候才触发，我们先记录下\n    that.ResoveCallBackLisst = []\n    that.RejctCallBackList = []\n\n    // 成功\n    function resolve (val) {\n        if (that.status === 'pending') {\n            that.status = 'Fulfilled'\n            that.resolveValue = val\n            that.ResoveCallBackLisst.forEach(ele => ele())\n        }   \n    }\n\n    // 失败\n    function reject (val) {\n        if (that.status === 'pending') {\n            that.status = 'Rejected'\n            that.rejectValue = val\n            that.RejctCallBackList.forEach(ele => ele())\n        }\n    }\n\n    try {\n        fn(resolve, reject)\n    } catch(e) {\n        reject(e)\n    }\n    \n}\n\nMyPromise.prototype.then = function (onFulfilled, onRejected) {\n    var that = this\n\n    if (that.status === 'pending') {\n        \n        that.ResoveCallBackLisst.push(() => {\n            onFulfilled(that.resolveValue)\n        })\n\n        that.RejctCallBackList.push(() => {\n            onRejected(that.rejectValue)\n        })\n\n    }\n\n    if (that.status === 'Fulfilled') {\n        onFulfilled(that.resolveValue);\n    }\n\n    if (that.status === 'Rejected') {\n        onRejected(that.rejectValue);\n    }\n\n}\n\n\nlet promise = new MyPromise( ( res, rej) => {\n    // setTimeout( () => {\n    //     res('你好世界')\n    // }, 3000)\n    res('你好世界')\n})\n\npromise.then( res => {\n    console.log(res)\n})\n```\n\n"
  },
  {
    "path": "docs/blog/4.JavaScript/5.Underscore库源码分析.md",
    "content": "---\ntitle: 5.Underscore库源码分析\ndate: 2020-01-30 00:00:00\npermalink: \ntag: \n - blog\n - 4.JavaScript\n---\n\n> 等待书写中...\n\n**[网址](https://www.html.cn/doc/underscore/)**"
  },
  {
    "path": "docs/blog/4.JavaScript/6.Lodashjs库源码分析.md",
    "content": "---\ntitle: 6.Lodashjs库源码分析\ndate: 2020-01-30 00:00:00\npermalink: \ntag: \n - blog\n - 4.JavaScript\n---\n\n> 等待书写中...\n\n**[网址](https://www.lodashjs.com/)**"
  },
  {
    "path": "docs/blog/4.JavaScript/7.函数式编程.md",
    "content": "---\ntitle: 7.函数式编程\ndate: 2020-01-30 00:00:00\npermalink: \ntag: \n - blog\n - 4.JavaScript\n---\n\n> 等待书写中...\n\n---\n\n## 第一部分：函数式编程基础\n\n> **函数式编程不是用函数来编程，也不是传统的面向过程编程。** 主要是将复杂的函数 符合成简单的函数（计算理论，递归论，或者拉姆达演算）。运算过程尽量写成一系列嵌套的函数调用\n\n> 举例：React高阶组件\n\n---\n\n### 函数编程的基本概念\n\n- 函数是第一等公民\n- 只用表达式，不用语句\n- 没有副作用\n- 不修改状态\n- 引用透明（函数运行只靠参数）\n\n---\n\n### 核心概念\n\n- 纯函数\n- 函数的柯里化\n- 函数组合\n- Point Free\n- 声明式与命令式代码\n- 惰性求值\n\n---\n\n### 纯函数\n\n对于相同的输入，永远会得到相同的输出，而且没有任何可观察的副作用，也不依赖外部环境的状态\n\n鉴于这个特性能做什么？\n\n- 可以做缓存，因为第一次，我知道输入什么了，第二次就不用计算了，提高性能\n- 纯函数不仅可以有效降低系统的复杂度，还有很多很棒的特性，例如可缓存性\n\n---\n\n### 函数的柯里化\n\n- 传递给函数一部分参数来调用它，让它返回一个函数去处理剩下的参数\n- 作用就是解决了函数不纯的问题，将函数依赖的变量以参数的形式组合成 新的函数\n- 好处：事实上柯里化是一种预加载函数的方法，通过传递较少的参数，得到一个已经记住了这些参数的新函数。某种意义上讲，这是一种对参数的缓存，是一种非常高效的编写函数的方式\n\n---\n\n### 函数组合\n\n- 将需要层层嵌套的函数 通过一个组合函数包一层，使其使用起来更舒适\n\n---\n\n### Point Free\n\n- 把一些对象自带的方法转化成纯函数，不要命名转瞬即逝的中间变量\n- 例如：const f = str => str.toString().split('')\n\n```js\n// 解决\nlet toString = str => str.toString();\nlet split = str => str.split();\n\nlet fn = compost(split(' '), toString)\n\nfn(123) // [1, 2, 3]\n\n// 这种风格能帮助我们减少不必要的命名，让代码保持简洁和通用\n```\n\n---\n\n### 声明式与命令式代码\n\n- 命令式代码：我们通过编写一条又一条指令去让计算机执行一些动作，这其中会涉及到很多繁杂的细节\n- 声明式代码：通过写表达式的方式来声明我们想干什么，而不是通过一步一步的指示\n- 优缺点：\n  - 函数式编程这种声明式的代码，对于无副作用的纯函数，我们完全可以不考虑函数内部是如何实现的，专注于编写业务代码，优化代码时，目光只需要集中在这些稳定坚固的函数内部即可\n  - 不纯的函数式代码会产生副作用，或者依赖外部系统环境，使用他们的时候总要考虑这些不干净的副作用。在复杂的系统中，这对于程序员的心智来说是极大的负担\n\n---\n\n### 惰性求值，惰性函数\n\n- 在指令式语言中以下代码会按顺序执行，由于每个函数都有可能改动或者依赖于其内部的状态。因此必须顺序执行\n\n\n```js\n// 求累加的函数（未使用惰性函数）\nfunction add(num) {\n    let addVale = 0;\n    for (let i = 0; i <= num; i++) {\n        addVale += i\n    }\n    return addVale\n}\n\nadd(2000000000) // 1s\nadd(2000000000) // 1s\nadd(2000000000) // 1s\nadd(2000000000) // 1s\n\n// 总共4s\n```\n\n```js\n// 求累加的函数（使用 惰性函数）\nfunction add(num) {\n    let addVale = 0;\n    for (let i = 0; i <= num; i++) {\n        addVale += i\n    }\n    // 函数函数\n  \tadd = function () {\n      addVale\n    }\n    return addVale\n}\n\nadd(2000000000) // 1s\nadd(2000000000) // 0s\nadd(2000000000) // 0s\nadd(2000000000) // 0s\n\n// 总共1s\n```\n\n---\n\n## 第二部分：更加专业的术语\n\n- 高阶函数\n- 尾递归优化\n- 闭包\n- 容器，Functor\n- 错误处理，Either，AP\n- IO\n- Monad\n\n---\n\n### 高阶函数\n\n- 本来我函数不能做很复杂的事情，你给我传过来一个复杂的函数，我一组合就能干很复杂的事情了\n- 将函数当参数，把传入的函数做一个封装，然后返回这个封装函数，达到更高程度的抽象。\n\n---\n\n### 尾递归优化\n\n---\n\n### 闭包\n\n- 在函数里面返回一个函数就会造成闭包，更深层次的我好像也知道，给忘了\n\n---\n\n## 第三部分：流行的函数式编程库\n\n- RxJS\n- cycleJs\n- **lodash.js**, lazy（惰性求值）\n- underscoreJS\n- ramadjs\n\n---\n\n### 1.RxJS（必学）\n\n- 诞生以来一直不温不火，单它的函数响应式编程（FRP）理念非常先进（函数式编程 FP）\n- 在RxJS中，所有的外部输入（用户输入，网络请求等等）都被试做一种事件流（这种机制特别适合处理游戏，上上下下）\n\n---\n\n### 2.lodash\n\n---\n\n### 3.underscoreJS（以后学）\n"
  },
  {
    "path": "docs/blog/4.JavaScript/8.TypeScript.md",
    "content": "---\ntitle: 8.TypeScript\ndate: 2020-01-30 00:00:00\npermalink: \ntag: \n - blog\n - 4.JavaScript\n---\n\n> 注意此处：内容不全，待完善...\n\n> TypeScript 是 JavaScript 的超集 [中文网站...](https://www.tslang.cn/)\n\n---\n\n## 🐬第一部分：TypeScript介绍\n\n### 1.安装\n\n- 前置：需要Node环境\n- 安装：npm i -g typescript\n- 验证：tsc -v（tsc是ts的编译器）\n\n```sh\n# 生成package.json\nnpm init\n\n# 生成配置信息（生成 tsconfig.json）\ntsc --init\n\n# 工程化（自动化的帮你buid ts 项目，方便学习）\nnpm install webpack webpack-cli webpack-dev-server ts-loader typescript html-webpack-plugin\n```\n\n---\n\n## 🐌第二部分：TypeScript数据类型\n\n### 1.基本数据类型\n\n```js\n// JavaScript中也有的\nlet age: Number = 10;\nlet myName: String = '朱昆鹏';\nlet married: Boolean = true;\nlet arr1: number[] = [1, 2, 3]\nlet arr2: Array<number> = [1, 2, 3]\n\n// 元组\nlet yuanzu: [string, number] = ['朱昆鹏', 20];\n\n// 枚举（性别，月份...）\nenum Gender {\n  boy,\n  girl\n}\n\n// 常量枚举\nconst enum Colors {\n  red, green, blue\n}\nlet myColor = [Colors.red, Colors.blue]\n\n// 任意类型（就不会进行类型检查了）\nlet root:any = document.getElementById('#app')\nroot.style.color = 'red'\n\n// HTMLElement\nlet element: (HTMLElement | null) = document.getElementById('#app');\nelement!.style.color = 'red'; // !非空断言\n\n// null undefined 是其他类型的子类型\nlet x: number;\nx = 1;\nx = undefined;\nx = null;\n\n// never 代表不会出现的值\n// void 表示没有任何返回值（void 可以被复制给 null | undefined，never不能返回任何值）\nfunction voidFn(): void {\n  console.log('void')\n}\n\n// Symbol\nconst s1 = Symbol('key')\nconst s2 = Symbol('key')\n\n// BigInt\nconst max = BigInt(Number.MAX_SAFE_INTEGER); // 2 的 53次幂 - 1\n\n// 类型推导\nlet mName = '朱昆鹏' // string 类型\n// 为什么一个 数字类型 可以用 .toString() 不是对象才有属性么，原因是因为 包装类，内部 new 了\n\n// 联合类型\nlet zName: string | number;\nzName = '朱昆鹏'\nzName = 22;\n\n// 类型断言\nlet kName: string | number | any\n// kName.toFixed(2) 会报错，因为不知道你是不是number类型，这时候可以用类型断言\n(kName as number).toFixed(2)\n// (kName as number as any) // 双重断言\n\n// 字面量类型\nconst up:'Up' = 'up';\ntype Direction = 'Up';\nfunction move(direction: Direction) {}\nmove(\"Up\"); // 可以实现枚举的效果\n\n// 类型字面量\ntype My = {\n  name: string,\n  age: number\n}\nlet myN: My = {\n  name: \"zkp\",\n  age: 22\n}\n```\n\n---\n\n### 2.函数和类\n\n```js\n// 函数\n// ? 是可选参数\nfunction hello(name: string, age?: number, say: string = 'hello'): void {\n  console.log(say + name + age)\n}\n\n// 函数的重载（函数参数不一样）\n\n// 类\nclass Person {\n  name: string;\n  getName(): void {\n    console.log('my name is zkp')\n  }\n}\n\nlet p1 = new Person()\np1.getName();\n```\n\n---\n\n## 📚参考列表\n\n- [慕课网课程...基于TypeScript从零重构axios](https://coding.imooc.com/class/330.html)\n- [珠峰教育](http://www.javascriptpeixun.cn/)"
  },
  {
    "path": "docs/blog/4.JavaScript/9.Cocos2d.md",
    "content": "---\ntitle: 9.Cocos2d\ndate: 2020-01-30 00:00:00\npermalink: \ntag: \n - blog\n - 4.JavaScript\n---\n\n## 第一章：三小时开发FlappyBird\n\n---\n\n### 1.Cocos的安装和IDE\n\n- [cocos2d 下载](https://www.cocos.com/products#CocosCreator)\n- [编辑器：vscode](https://code.visualstudio.com/)\n\n---\n\n### 2.场景，精灵，节点树 等名词\n\n- 场景（Scene）：类似于 拍电影中的一个场景\n- 精灵（Sprite）：相当于 电影中的一个个演员\n- 节点树（NodeTree）：和网页的节点树有类似的感觉（就是在 cocos creator 里面可以操作节点的树形结构）\n- 节点（Node）:\n- 画布（Canvas）:\n- 资源（Assets）: \n\n---\n\n### 3.节点和组件\n\n> 我给一个节点设置，让它当Lable组件，这样可以，设置让它当精灵（Sprite）组件，这也可以，这就是他们之间的关系。这个对于有编程经验的我来讲，还是比较好理解的。（例如Button 是由 按钮精灵图 + 按钮组件 组合而成的）\n\n- Button节点简单使用\n  - 节点右键：创建一个UI节点 --> 创建一个Button组件\n  - Transition 可以选择 COLOR 可以设置各个情况下按钮的点击状态\n\n---\n\n### 4.第一个脚本\n\n- 创建脚本：在 Assets面板，Script文件夹下 右键创建 Ts脚本文件\n\n---\n\n### 5.帧和函数（基础知识普及）\n\n- 帧：FPS 影像动画中最小单位的单幅影像画面\n- 函数：实现某一种功能的代码块\n\n```javascript\n// 每刷新一帧页面 都会调用这个函数\nupdate (dt: number) {\n    console.log('dt', dt)\n}\n```\n\n---\n\n### 6.制作小鸟翅膀\n\n```javascript\nconst {ccclass, property} = cc._decorator;\n\n@ccclass\nexport default class NewClass extends cc.Component {\n\n    @property(cc.Label)\n    label: cc.Label = null;\n\n    // 小鸟图片1\n    @property(cc.Sprite)\n    bird1: cc.Sprite = null;\n\n    // 小鸟图片2\n    @property(cc.Sprite)\n    bird2: cc.Sprite = null;\n    \n    // 小鸟图片3\n    @property(cc.Sprite)\n    bird3: cc.Sprite = null;\n\n    // LIFE-CYCLE CALLBACKS:\n\n    // onLoad () {}\n\n    time: number = 10; // 距离上次切换显示小鸟，流逝的时间\n    playSeq: number = 0; // 播放顺序\n\n    start () {\n\n    }\n\n    /**\n     * 小鸟动画播放函数\n     * @param { Node } startNode 会默认全部取消，然后需要传入需要播放的节点\n     */\n    seditionReset(startNode: any) {\n        this.bird1.node.active = false\n        this.bird2.node.active = false\n        this.bird3.node.active = false\n        startNode.node.active = true;\n    }\n\n    // 每刷新一帧页面 都会调用这个函数\n    update (dt: number) {\n\n        this.time += dt\n\n        if (this.time > 0.5) {\n            if (this.bird1.node.active) {\n                this.seditionReset(this.bird2)\n                this.playSeq = 0;\n            } else if (this.bird2.node.active && this.playSeq == 0) { // 正向播放\n                this.seditionReset(this.bird3)\n            } else if (this.bird2.node.active && this.playSeq == -1) { // 逆向播放\n                this.seditionReset(this.bird1)\n            } else if (this.bird3.node.active) {\n                this.seditionReset(this.bird2)\n                this.playSeq = -1;\n            }\n            this.time = 0;\n        }\n    }\n}\n```\n\n---\n\n## 第三章：物理弹球\n\n> 这一章主要是讲 cocos的物理引擎\n\n### 1.物理简介\n\n\n\n\n"
  },
  {
    "path": "docs/blog/5.jQuery/1.jQuery基础.md",
    "content": "---\ntitle: 1.jQuery基础\ndate: 2020-01-30 00:00:00\npermalink: \ntag: \n - blog\n - 5.jQuery\n---\n\n> 注意此处：内容不全，结构混乱，待重构...\n\n---\n\n## jQuery介绍\n\n### 1.什么是jQuery\n\n- jQuery其实就是一堆的JS函数（JS库），也是普通的JS而已，不要畏惧!\n- 特点：写得少，做得多\n\n---\n\n### 2.为什么要用jQuery\n\n- jQuery面向用户良好的设计，使得在使用过程中彻底解放了你记忆中的原生操作DOM的接口\n- jQuery中大量可复用的函数和发展过程中常年积累下来的插件库，可以极大的简化JavaScript开发\n- jQuery在搬书以上并没有复杂交互的网站中大部分使用，因为它们仅仅是需要兼容一些低版本浏览器，又要呈现出炫酷的效果，这时候使用jQuery更好\n- jQuery改变了数百万人编写JavaScript的方式，虽然现在组件化，工程化流行，但不要忘掉jQuery，面试中还是会问到的\n\n\n---\n\n### 3.jQuery学习注意点\n\n- jQuery知识辅助工具，不能完全替代JS，原生，jQuery二者经常并存\n- jQuery很庞杂，要会使用，但应重学思想\n- jQuery方法很多，按需学习，把常用的有价值的学会\n- jQuery API可以先用现查\n\n---\n\n## 基本使用\n\n### 1.$() 使用\n\n- jQuery CDN引入：https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js\n\n```js\n// $ === jQuery // true\n\n$('div ul li:last') // 选择元素（传CSS选择器，规则也可以）\n\n$(null) // 不会报错，这是因为jQuery内部有容错机制\n\n$(dom) // 传原生DOM，就会变成 jQuery DOM\n\n$(fn) // 传递一个函数，当DOM加载完毕之后执行（相当于一个事件函数）相当于 $(document).rendy(function () { })\n\n```\n\n**jQuery精髓**\n\n- 精髓一：封闭作用域（IIEF）\n\n```js\n(function () {\n    fucntion jQuery (selector) {\n        return new jQuery.prototype.init(selector)\n    }\n    jQuery.prototype.init = funciton (selector) {\n        // 选出 DOM 并且包装成jQuery对象，并返回\n    }\n\n    jQuery.prototype.css = function () {\n\n        // 精髓二：链式调用\n        return this\n    }\n\n\n    window.$ = window.jQuery = jQuery\n\n})()\n```\n\n---\n\n### 2.选择元素 get,eq,find,filter...\n\n```html\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\">\n    <title>选择元素</title>\n</head>\n<body>\n    <div class=\"wrapper\">\n        <div class=\"demo\">1</div>\n        <div class=\"demo filt\">2</div>\n        <div class=\"demo\">3</div>\n    </div>\n</body>\n</html>\n```\n\n```js\n\n// get() | 返回原生DOM对象\n$('.demo').get() // 返回所有选中的 原生DOM对象\n$('.demo').get(0) // 选中第一个 原生DOM对象\n$('.demo').get(-1) // 选择倒数第一个 原生DOM对象\n\n// get() 源码实现\njQuery.prototype.get = function (num = 0) {\n    num >= 0 ? return this[num] : return this[num + this[num]]\n}\n\n\n// eq() | 返回jQuery对象（和 get() 对比看）\n$('.demo').eq() // 返回所有选中的 jQuery对象\n$('.demo').eq(0) // 选中第一个 jQuery对象\n$('.demo').eq(-1) // 选择倒数第一个 jQuery对象\n\n// eq() 源码实现\njQuery.prototype.eq = function (num = 0) {\n    let dom = num >= 0 ? this[num] : this[num + this[num]]\n    return $(dom) // 返回jQuery对象\n}\n\n\n// find() | 查找 经常使用在链式调用中 🔥\n$('.wrapper')\n    .css({color: 'red'})\n    .find('.demo')\n    .eq(0)\n    .css({color: 'greed'}) // 查找 第一个 wrapper下面 第一个 demo 并设置css\n// ❣️注意：find() 会调用前一个的 prevObject（这个保存的是上一次链式调用的jQuery对象） 节省了jQuery的性能\n\n\n// filter() | 过滤\n$('.wrapper')\n    .find('.demo')\n    .filter('.filt') // 就能筛选到特定的一项了，也能传函数，参数是 index, ele ，其他的都一样，true 也是，false 不返回\n\n\n// has() | \n$('demo').has('wrapper')\n\n\n// is() | \n\n```\n"
  },
  {
    "path": "docs/blog/5.jQuery/2.jQuery第三方库.md",
    "content": "---\ntitle: 2.jQuery第三方库\ndate: 2020-01-30 00:00:00\npermalink: \ntag: \n - blog\n - 5.jQuery\n---\n\n# 2.jQuery第三方库\n\n> 等待书写中..."
  },
  {
    "path": "docs/blog/5.jQuery/3.jQuery源码解析以及实现.md",
    "content": "---\ntitle: 3.jQuery源码解析以及实现\ndate: 2020-01-30 00:00:00\npermalink: \ntag: \n - blog\n - 5.jQuery\n---\n\n# 3.jQuery源码解析以及实现\n\n> 等待书写中..."
  },
  {
    "path": "docs/blog/6.Vue/1.MVVM框架绪论.md",
    "content": "---\ntitle: 1.MVVM框架绪论\ndate: 2020-01-30 00:00:00\npermalink: \ntag: \n - blog\n - 6.Vue\n---\n\n> 了解MVVM框架产生的背景，有助于掌握未来的发展，也能渐进的感受技术的演进，这样对技术的探索是很有帮助的\n\n## 🐣第一部分：MVVM的前世今生\n\n### 1.MVC,MVP,MVVM介绍\n\n- MVC：传统的前后端不分离项目\n- MVP：单向的 View - Presenter - Model\n- MVVM：View - ViewModel - Model\n\n---\n\n### 2.MVVM的起源\n\nMVVM是 Model - ViewModel - View 的简写。微软的WPF带来了新的技术体验，例如Silverlight，音频，视频，3D，动画，这导致了软件UI层更加细节化，可定制化。同时，在技术层面，WPF也带来了诸如 Binding, Routed, Events, Command, DataTemplate, ControlTemplate等新特性\n\nMVVM框架的由来便是MVP（View - Presenter - Model）模式 与 WPF结合起来的应用方式，演变过来的一种新型架构框架。他立足于原有的MVP框架，并把WPF的新特性融合进去，以应对客户日益复杂的需求变化\n\n拓展：WPF做了什么：将 View 和 Presenter 做了双向\n\n---\n\n### 3.MV*框架的演变\n\n- [dojo](https://dojotoolkit.org/)\n- jQuery：无可替代，操作DOM服务（链式调用，等思想我们可以学习，都很经典）\n- backbone：函数式编程，让代码MVC，解决代码又丑又烂\n- splie && canjs：也是MVC，但是加了绑定的思想\n- 第一个MVVM框架：O8年出现，[Knockout官网](https://knockoutjs.com/)\n- batman.js && emben\n- angler && vue && react\n- meteor：前后端统一框架\n\n---\n\n### 4.对MVMM的思考\n\n- MVC,MVP,MVVM\n- DI,IOC,AOP,OOP\n- ORM,RESTful\n\n> 框架是过眼云烟，思想才是永恒\n\n---\n\n\n\n\n"
  },
  {
    "path": "docs/blog/6.Vue/10.Vue3.md",
    "content": "---\ntitle: 10.Vue3\ndate: 2020-01-30 00:00:00\npermalink: \ntag: \n - blog\n - 6.Vue\n---\n\n# 9.Vue3\n\n### Vue3新增了什么\n\n- 性能（比vue2快了2倍）\n- tree shaking（按需编译代码）\n- composition apu （类似 hooks 未来）\n- ts support（typescript 面向未来）\n- custom renderer api（自定义渲染）\n\n---\n\n### 起步\n\n- 体验\n  - vue-cli：\n  - webpack：vue-next-webpack-preview\n  - vite：\n\n\n```sh\n# \nvue create vue3-demo\n\n# \nvue add vue-next\n```"
  },
  {
    "path": "docs/blog/6.Vue/2.Vue基础.md",
    "content": "---\ntitle: 2.Vue基础\ndate: 2020-01-30 00:00:00\npermalink: \ntag: \n - blog\n - 6.Vue\n---\n\n> 说实话，Vue的官网更好一些，我有一些忘记的，不会来这，而是直接去官网\n\n> 这个只是我当初不会的时候整理的内容，现在会了，就直接去官网了\n\n> 如果你还不会，那么建议自己也整理一遍吧，然后再去官网\n\n---\n\n## 🥜第一部分：前言\n\n> 我感觉Vue的官网已经很详细了，但我还是想再简化一点，作为我自己查阅使用\n\n### 1.为什么要用Vue\n\n> 我们有jQuery，为什么要用Vue，Vue好在哪里\n\n- 性能更好\n    - jQuery主要是操作DOM的一个库，但是操作DOM是十分消耗性能的，修改DOM会导致重绘重排\n    - 而Vue使用 虚拟DOM（不是一个真实的DOM，而是由JS来模拟出来的具有真实DOM结构的一个树形结构），性能更好\n    - 见 使用虚拟DOM库\n- 视图，数据分离\n    - 主要是模板引擎的作用，见实现一个模板引擎\n- 维护成本低\n\n---\n\n### 2.Vue介绍\n\n> 是一套用于构建用户界面的渐进式框架\n\n\n\n---\n\n### 2.虚拟DOM\n\n> DOM的操作是昂贵的，JS的运行效率更高，将DOM对比放到JS层，减少DOM操作，效率更高\n\n[snabbdom](https://github.com/snabbdom/snabbdom) 是一个比较火的 虚拟DOM库，Vue2.0虚拟DOM就借鉴了这个库，我可以先使用一下这个库\n\n```html\n<body>\n\n<div id=\"app\">\n    <!-- 展示的DOM节点 -->\n    <!-- <div id=\"my\">\n        <h1 class=\"name\">朱昆鹏</h1>\n        <h2>21</h2>\n    </div> -->\n</div>\n<button id=\"ageAdd\">年龄+1</button>\n\n<script src=\"https://cdn.bootcss.com/snabbdom/0.7.3/snabbdom.min.js\"></script>\n<script>\n    \n    let app = document.getElementById('app')\n    let ageAdd = document.getElementById('ageAdd')\n    let data = { name: '朱昆鹏', age: 21 }\n    let vNode = null;\n\n    render() // 初次渲染\n\n    function render () {\n        const patch = snabbdom.init([])\n        const h = snabbdom.h\n\n        let newVNode = h('div#my', {}, [\n            h('h1.name', {}, [data.name]),\n            h('h2', {}, [data.age])\n        ])\n        \n        // 这个其实就是会自动对比更新，不知道是否是Diff算法\n        if (vNode) {\n            patch(vNode, newVNode)\n        } else {\n            patch(app, newVNode)\n        }\n\n        vNode = newVNode\n    }\n\n    // 年龄加一点击事件\n    ageAdd.onclick = function () {\n        data.age += 1\n        render()\n    }\n\n</script>\n</body>\n```\n\n---\n\n### 3.模板引擎解析\n\n---\n\n### 4.双向数据绑定实现原理\n\n---\n\n## 🍯第二部分：Vue基础\n\n### 1.安装\n\n---\n\n### 2.创建实例\n\n```html\n<body>\n    <div id=\"app\">\n        <p>姓名：{{my.name}}</p>\n        <p>年龄：{{my.age}}</p>\n        <p>数组：{{my.arrTest}}</p>\n    </div>\n\n    <script src=\"https://cdn.jsdelivr.net/npm/vue\"></script>\n    <script>\n        \n        let vm = new Vue({\n            el: '#app', // 规定渲染的路径\n            data: { // 插值表达式渲染的数据\n                my: {\n                    name: '朱昆鹏',\n                    age: 21,\n                    arrTest: [1,2,3]\n                }\n            }\n        })\n\n        // data中的数据，最后会放到 vm 上，也就是 vm.my.name 是 朱昆鹏（其实methods也会放到 vm上）\n\n    </script>\n</body>\n```\n\n---\n\n### 3.数组，对象问题\n\n> 2.创建实例中，有个数组的示例，但是有一些问题，其实对象也有这些问题\n\n- vm.my.arrTest = [1,2,3,4] 没问题，可以变\n- vm.my.arrTest.push(4)  没问题，可以变\n- ❎ vm.my.arrTest[0] = 5 变不了\n- ❎ vm.my.arrTest.length = 1 变不了\n\n**❣️ 更新的原理是 Object.defineProperty，其实是监听不到 引用对象里面数据改变的**\n\n**🔥 数组解决方法：也就是数组 push 也不能触发，但是Vue改写了 数组原型上的方法，这个称之为 数组变异方法，除了 push 还有 pop, shift, unfhift, sort, reverse, splice**\n\n**🔥 对象解决方法：通过 $set(要改的是谁，要改成什么，改成什么样的的值)，一般常用于对象**\n\n**拓展：vm.$el 表示我们那个 app 的DOM**\n\n**拓展：vm.$nextTick() 再次渲染DOM之后的，例如vm.my.age = 23，vm.$el.innerText 其实获取的是上一个状态的，怎么才能拿到渲染之后的DOM呢，就需要 vm.$nextTick(() => {})**\n\n**拓展：vm.$mount() 挂载元素**\n\n---\n\n### v-pre（会跳过模板解析过程）\n\n```js\n<div>{{name}}</div> // 输出朱昆鹏\n<div v-pre>{{name}}</div> // 输出 {{name}}\n```\n\n---\n\n### v-cloak（在模板解析之前存在，编译之后消除）\n\n```js\n// 这个有什么用呢，因为页面是先加载DOM之后，才加载JS，然后Vue才动用模板解析，进行渲染的，也就是页面有段时间，是 {{}} 这种的展示形式，这种体验不好，可以用 cloak 进行占位\n\n// 使用方式是主要配合css进行\n[v-clock] {\n    display: none\n}\n\n<div id=\"app\">\n    <div v-cloak></div>\n</div>\n```\n\n---\n\n### v-once（让某个元素不再更改）\n\n内部原理是使用了缓存\n\n```js\n<div v-once>{{name}}</div> // 朱昆鹏\n\n// vm.name = 111 视图不变（原理是调用了缓存）\n```\n\n---\n\n### v-html（渲染网页内容）\n\n底层原理是innerHtml\n\n```js\n<div v-html=\"domData\"></div> // 容易造成XSS攻击 \n```\n\n---\n\n### v-text（渲染文本）\n\n使用v-text的标签，内部内容都会被替换层 v-text绑定的内容，底层原理是 innerText\n\n```js\n<div v-text=\"age\">{{name}}</div> // 21\n```\n\n---\n\n### v-if v-else v-else-if\n\n```js\n<div v-if=\"isShow\">示例1</div>\n<template v-else-if=\"isShow2\">示例2</template>\n<template v-else>示例3</template>\n<div></div>\n```\n\n---\n\n### v-show\n\n```js\n<div v-show=\"isShow\">示例</div>\n```\n\n---\n\n### v-if 和 v-show的区别\n\n- v-if 是真正让元素消失，或者插入\n- v-show 是控制css，让其显示或者隐藏，并且不支持template标签\n\n---\n\n### v-bind（当属性想使用数据的时候）\n\n```js\n<img v-bind:src=\"url\"></src>\n\n// 绑定多个class :class=\"[class1, class2]\" 或者 :class=\"{ class1: isClassShow1, class2: isClassShow2 }\" 或者 [class1, isShow ? '' : '']\n// 绑定多个style :style=\"[style1, style2]\"，{} 和 [] 都和 绑定多个 class 一致\n// :style 样式是会覆盖 style样式的\n```\n\n---\n\n### v-on（事件，读取 methods里面的函数）\n\n```js\n<button v-on=\"click\">点击</button>\n\nnew Vue({\n    el: '#app',\n    data: {},\n    methods: {\n        click () {\n            alert('打印')\n        }\n    }\n})\n```\n\n---\n\n### v-for\n\n```js\n// 注意 :key 不能写到 template 上\n<template v-for=\"(item, index) in arrData\">\n    <p :key=\"item.id\">{{ index }} : {{ item }}</p>\n</template>\n\n// 拓展：还能遍历数字，字符串\n<template v-for=\"item in 5\">{{item}}</template> // 1 2 3 4 5\n<template v-for=\"item in 'zhu'\">{{ item }}</template> // z h u\n```\n\n---\n\n### v-model（双向数据绑定）\n\n**主要用于输入框，做了一层简单的优化，使之有双向绑定的效果，效果就是，输入框内数据改变，data中的数据也一起改变**\n\n原理解析：监听 input 值改变事件，将改变的值，赋予 v-model 绑定的 属性，本质上是 input + value 语法糖\n\n```js\n<input v-model=\"name\" /> // 普通输入框\n<textarea v-model=\"text\"></textarea>\n\n<input type=\"checkbox\" v-model=\"checked\" /> // 单选框\n// 多选框也可以，多选框 v-model 应该绑定数组格式\n// 单选框也可以\n\n// select也可以（多选将数据格式调成数组就行）\n<select v-model=\"selected\">\n    <option value=\"\" disabled>请选择</option>\n    <option value=\"A\">A</option>\n    <option value=\"B\">B</option>\n    <option value=\"C\">C</option>\n</select>\n```\n\n---\n\n### 单向数据流 和 双向数据绑定原理探索以及实现\n\n---\n\n### 修饰符\n\n---\n\n### 写一个todoList\n\n```html\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\">\n    <title>Document</title>\n</head>\n<body>\n    <div id=\"app\">\n\n        <input type=\"text\" v-model=\"task\">\n        <button @click=\"addTask($event, 'click')\">提交</button>\n\n        <p>正在添加的任务：{{task}}</p>\n        <h4>所有任务</h4>\n        \n        <ul>\n            <li v-for=\"(task, index) in taskList\" :key=\"index\">\n                {{task}}\n                <button @click=\"deleteTask(index)\">删除</button>\n            </li>\n        </ul>\n\n    </div>\n\n    <script src=\"https://cn.vuejs.org/js/vue.js\"></script>\n    <script>\n\n        // 自定义按键修饰符别名（键盘事件，鼠标事件, v-model等都能用修饰符）\n        // Vue.config.keyCodes = {\n        //     'f1-key': 112\n        // }\n\n        // 例如 v-model.lazy 在默认情况下，v-model 在每次 input 事件触发后将输入框的值与数据进行同步 (除了上述输入法组合文字时)。你可以添加 lazy 修饰符，从而转变为使用 change 事件进行同步\n        // 例如 v-model.number 将输入的绑定变为数字类型\n        // 例如 v-model.trim 如果要自动过滤用户输入的首尾空白字符\n        \n        let vm = new Vue({\n            el: '#app',\n            data: {\n                task: '',\n                taskList: []\n            },\n            methods: {\n                addTask (e, type) {\n\n                    // 🔥🔥🔥 这个就能传递第二个方法，很好，解决了传参同时还想要 事件对象e 的需求\n                    console.log(e, type)\n\n                    this.taskList.push(this.task)\n                    this.task = ''\n                },\n                deleteTask (index) {\n                    this.taskList.splice(index, 1)\n                }\n            }\n        })\n\n    </script>\n</body>\n</html>\n```\n\n---\n\n## 🍖第三部分：Vue进阶\n\n### 1.自定义指令（directive）\n\n> 全局指令，挂载Vue构造函数中，所有实例都能使用，局部指令，挂到具体实例中\n\n**例如我们需求是，让 input 标签 最多只能输入5个字符**\n\n```html\n<body>\n    <div id=\"app\">\n        <input type=\"text\" v-model=\"content\" v-slice=\"content\">\n    </div>\n\n    <script src=\"https://cn.vuejs.org/js/vue.js\"></script>\n    <script>\n\n        Vue.directive('slice', (el, bindings, vnode) => {\n            \n            // console.log('el', el) // 指令所在的DOM元素\n            // console.log('bindings', bindings) // 自定义指令对象数据，可以设置，传参，等等\n            // console.log('vnode', vnode) // 虚拟节点\n\n            // 获取v-slice获取的值，并截取\n            const val = bindings.value.slice(0, 5)\n            vnode.context.content = val\n\n\n        })\n\n        let vm = new Vue({\n            el: '#app',\n            data: {\n                content: ''\n            }\n        })\n\n    </script>\n</body>\n```\n\n---\n\n**自定义指令，参数二还能传递对象**\n\n[官方教程...](https://cn.vuejs.org/v2/guide/custom-directive.html)\n\n\n---\n\n**局部自定义指令是需要在实例上写 directives属性**\n\n```js\nnew Vue({\n    el: '#app',\n    directives: {}\n})\n```\n\n---\n\n### 2.自定义指令进阶\n\n---\n\n### 3.过滤器（filter）\n\n> 在不改变原有数据的情况下，改变了展示的数据\n\n```js\n// 例如我们将 1000000 变为 1,000,000 这种展示形式\n\n<div id=\"app\">\n    {{ num | toNum(2) | 过滤器二 | ...}} \n</div>\n\n// 全局过滤器\nVue.filter('toNum', (value, times) => {\n    console.log('原来的数据', value)\n    console.log('参数', times)\n\n    return 处理之后的数据\n})\n\n// ❣️ 有种函数式编程的感觉\n```\n\n[过滤器官方文档...](https://cn.vuejs.org/v2/guide/filters.html)\n\n---\n\n### 4.el template render\n\n**问题一：为什么我们写到 div#app 里面的东西，就能使用 Vue的语法了？**\n\n过程是：通过el来确定读取那个标签里面的内容（HTML字符串） ---> 生成抽象语法树（AST），其实这一步就已经将插值表达式转换了 ---> 通过render 生成 Vnode ---> 变成真是的DOM元素\n\n**❣️ 备注：el其实还能传真实的DOM节点，如果不写el的话，会看有没有 $mount,不会解析了**\n\n---\n\n**如果有了 template ，那么会怎么解析呢？**\n\n首先判断是否有 el（没有就看是否有 $mount）---> 然后判断是否有 template（没有的话 template = $el.outerHTML，也就是 el#app里面的内容）---> 生成AST ---> render ---> vnode ---> 真实DOM\n\n---\n\n**render ?**\n\n```js\n<body>\n    <div id=\"app\">\n        <p>{{ name }}</p>\n    </div>\n            \n    <script src=\"https://cn.vuejs.org/js/vue.js\"></script>\n    <script>\n\n        new Vue({\n            el: '#app',\n            data: { name: '朱昆鹏' },\n            template: '<h1>我是template，有了我，div#app里面的内容就会被我替代</h1>',\n            // h 其实是 createElement\n            render (h) {\n                return h('h1', '我是render函数，有了我 template div#app里面的内容都被我替代，我是最后步骤')\n            }\n        })\n\n    </script>\n</body>\n```\n\n---\n\n### 5.渲染函数 & JSX\n\n[官方文档...](https://cn.vuejs.org/v2/guide/render-function.html)\n\n---\n\n### 6.生命周期\n\n> 执行到某个阶段，自己去执行的函数,只要将渲染流程搞懂，就很清晰了（要想理解，还是要看官网的这张图，很是经典）\n\n<img src=\"https://cn.vuejs.org/images/lifecycle.png\" />\n\n---\n\n### 7.计算属性和侦听器\n\n\n```html\n<body>\n    <div id=\"app\">\n        <p>{{ helloName }}</p>\n    </div>\n            \n    <script src=\"https://cn.vuejs.org/js/vue.js\"></script>\n    <script>\n\n        let vm = new Vue({\n            el: '#app',\n            data: { name: '朱昆鹏' },\n            computed: {\n                helloName () {\n                    return this.name + '，你好'\n                }\n            },\n            watch: {\n                name () {\n                    console.log('初始化的时候不触发，只有改变的时候触发')\n                },\n                // 也可以写成对象\n                // name: {\n                //     handler () {\n\n                //     },\n                //     immediate: true // 这个就可以在初始化的时候也执行\n                // }\n            }\n        })\n\n        // 另一种写监听器的方法\n        vm.$watch('name', () => {\n\n        }, {\n            immediate: true\n        })\n\n    </script>\n</body>\n```\n\n---\n\n### 8.计算属性和侦听器的区别\n\n---\n\n## 🍔第四部分：Vue组件\n\n> 前言：为什么Vue这种 MVVM框架，很快就把jQuery替代了下去，我想，组件化就是很重要的因素\n\n### 1.组件的定义与使用\n\n```html\n<body>\n    <div id=\"app\">\n        <!-- <p>{{ name }}</p> -->\n        <my-name></my-name>\n    </div>\n            \n    <script src=\"https://cn.vuejs.org/js/vue.js\"></script>\n    <script>\n\n        // 全局组件\n        // 注意：名称可以写成 my-name 或者 myName\n        Vue.component('my-name', {\n            template: `<div>{{name}}</div>`,\n            data () {\n                return {\n                    name: '朱昆鹏（全局组件）'\n                }\n            }\n        })\n\n        new Vue({\n            el: '#app',\n            data: { name: '朱昆鹏' },\n            // 局部组件\n            components: {\n                myName: {\n                    template: `<div>{{name}}</div>`,\n                    data () {\n                        return {\n                            name: '朱昆鹏（局部组件）'\n                        }\n                    }\n                }\n            }\n        })\n\n    </script>\n</body>\n```\n\n---\n\n### 2.组件数据传递（props）\n\n```html\n<body>\n    <div id=\"app\">\n        <!-- <p>{{ name }}</p> -->\n        <my-name name=\"朱昆鹏（数据传递）\"></my-name>\n    </div>\n            \n    <script src=\"https://cn.vuejs.org/js/vue.js\"></script>\n    <script>\n\n        // 名称可以写成 my-name 或者 myName\n        Vue.component('my-name', {\n            template: `<div>{{name}}</div>`,\n            props: {\n                name: {\n                    type: String, // 需要传的是字符类型\n                    required: true, // 必传\n                    default: '默认值', // 默认值，如果默认值是引用类型，需要这么写 () => {xxx} , 数组也是一样 () => [xxx]\n                    validator (value) { // 属性校验\n                        // 写条件，如果为false会报警告\n                        return true\n                    }\n                }\n            }\n        })\n\n        new Vue({\n            el: '#app',\n            data: {}\n        })\n\n    </script>\n</body>\n```\n\n[官方文档...](https://cn.vuejs.org/v2/guide/components-props.html)\n\n---\n\n### 3.组件通信\n\n- props\n- $emit/$on\n- event bus\n- $parent\n- $root\n- $children\n- $refs\n- $attrs\n- $listeners\n- provide/inject\n- vuex\n\n> 问题一：为什么有那么多种组件通信的手段，用Vuex不能解决所有问题么？\n\n如果你要写一个组件库，里面的组件通信难道要依赖Vuex么，可以回想一下，目前的组件库，似乎都没有让你安装Vuex\n\n所以，越往深处学，就越能了解到，上面每种的试用场景\n\n---\n\n> 问题二：$refs 和  $chilren 的区别\n\n$refs 不管是原生的标签还是自定义的组件，都可以获取\n\n$chilren 只能获取自定义组件\n\n---\n\n### 4.组件通信 代码示例\n\n<img src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/2.notes/5.MVVM%E6%A1%86%E6%9E%B6%EF%BC%88Vue%EF%BC%89/Vue%E5%9F%BA%E6%9C%AC%E4%BD%BF%E7%94%A8/%E7%BB%84%E4%BB%B6%E9%80%9A%E4%BF%A1.png\" />\n\n**App.vue**\n\n```html\n<template>\n  <div>\n    <h3>根节点</h3>\n    <hr />\n\n    <Children1 name=\"根节点 通过 props 传给 儿子节点的数据\"></Children1>\n  </div>\n</template>\n\n<script>\nimport Children1 from './components/Children1.vue'\n\nexport default {\n  components: {\n    Children1\n  }\n}\n</script>\n\n<style>\nbutton {\n  display: block;\n}\n</style>\n\n```\n\n**Children1.vue**\n\n```html\n<template>\n  <div>\n    <h3>节点1</h3>\n\n    <div>{{ name }}</div>\n    <div>{{ $attrs.attrsTest }}</div>\n\n    <button @click=\"sendTo\">节点1 通过 $emit/$on 发送数据（可以跨层级）</button>\n    <button @click=\"childrenEvent\">通过 $chilren 改变 子节点数据</button>\n    <button @click=\"refsEvent\">通过 $refs 改变 子节点值数据</button>\n    <button @click=\"provideNum += 1\">测试 provide/inject 不是响应式 {{ provideNum }}</button>\n\n    <hr />\n\n    <Children2 attrsTest=\"未在 props 声明的，可以使用 $attrs 使用（非属性特性），中间节点 可以通过 v-bind='$attrs' 进行转发\" ref=\"father\"></Children2>\n  </div>\n</template>\n\n<script>\nimport Children2 from './Children2.vue'\n\nexport default {\n  provide() {\n    return {\n      provideText: `通过 provide/inject 跨层级传值（注意：这个不是响应式的）${this.provideNum}`\n    }\n  },\n  components: {\n    Children2\n  },\n  props: {\n    name: {\n      type: String\n    }\n  },\n  data() {\n    return {\n      provideNum: 0\n    }\n  },\n  mounted() {\n  },\n  methods: {\n    // 通过$emit/$on跨层级发送数据\n    sendTo() {\n      this.$bus.$emit('sendRootText', '通过 $emit/$on 跨层级发送数据')\n    },\n    // 通过$children传值\n    childrenEvent() {\n      this.$children[0].text = '父组件 通过 $children 改变 子组件的值'\n    },\n    // 通过$refs传值\n    refsEvent() {\n      this.$refs.father.text = '父组件 通过 $refs 改变 子组件的值'\n    }\n  }\n}\n</script>\n```\n\n---\n\n**Children2.vue**\n\n```html\n<template>\n  <div>\n    \n    <h3>节点2</h3>\n\n    <button @click=\"getText\">通过 $parent 获取直接父组件 信息</button>\n\n    {{ text }}\n\n    <hr />\n\n    <Children3 v-bind=\"$attrs\"></Children3>\n  </div>\n</template>\n\n<script>\nimport Children3 from './Children3.vue'\n\nexport default {\n  components: {\n    Children3\n  },\n  data() {\n    return {\n      text: ''\n    }\n  },\n  mounted() {\n    this.$bus.$on('sendRootText', text => {\n      console.log('text', text)\n      this.text = text\n    })\n  },\n  methods: {\n    getText() {\n      // 子组件调用父组件方法\n      console.log('this.$parent', this.$parent);\n    }\n  }\n}\n</script>\n```\n\n---\n\n**Children3.vue**\n\n```html\n<template>\n  <div>\n    <h3>节点3</h3>\n\n    <div>{{ text }}</div>\n\n    <div>{{ provideText }}</div>\n    <div>{{ $attrs.attrsTest }}</div>\n  </div>\n</template>\n\n<script>\nexport default {\n  inject: ['provideText'],\n  data() {\n    return {\n      text: ''\n    }\n  },\n  mounted() {\n    this.$bus.$on('sendRootText', text => {\n      console.log('text', text)\n      this.text = text\n    })\n  }\n}\n</script>\n```\n\n---\n\n### 5.插槽\n\n```html\n<!-- 匿名插槽 -->\n<slot></slot>\n<template></template>\n\n<!-- 具名插槽 定义 -->\n<slot name=\"header\"></slot>\n<!-- 具名插槽 使用 -->\n<template v-slot:header></template>\n\n<!-- ...... -->\n```\n\n---\n\n> 后话：组件化是一个公司很重要的一步，如果一个我公司没有自己的组件库，那么效率就有很大的问题，如果想进一步学习Vue组件化的思想，那么可以去看 [Element.ui 源码](https://github.com/ElemeFE/element)\n"
  },
  {
    "path": "docs/blog/6.Vue/3.Vue全家桶.md",
    "content": "---\ntitle: 3.Vue全家桶\ndate: 2020-01-30 00:00:00\npermalink: \ntag: \n - blog\n - 6.Vue\n---\n\n> 注意此处：内容不全，结构完整...\n\n> 这里是Vue真正具有生产力的技术，内容写的不全，也希望大家去探索一下\n\n## ⚽️第一部分：Vue-Cli\n\n> [Vue-Cli...](https://cli.vuejs.org/zh/guide/cli-service.html)\n\n### 1.安装脚手架和使用\n\n- npm i -g @vue/cli 安装脚手架，用于生成项目\n- npm i -g @vue/cli-service-global 快速原型开发，编译.vue文件\n- 直接使用编译.vue文件: vue serve app.vue\n\n**使用Cli生成：vue create 名称**\n\n```sh\n# Cli选择配置\n\ndefault（babel, eslint） # 默认配置\nManually select features # 自定义配置\n\n# 自定义配置\nBabel # 启动Babel\nTypescript # 支持Typescript\nProgressive Web App（PWA）Support # PWA\nRouter # 路由\nVuex # 状态管理\nCSS Pre-processors # CSS预处理器\nLintor / Formattor # \nLint Testing # \nE2E Testing # E2E 测试\n\nWhere do you prefer placing config for ... # 文件放到哪里\nIn deficated config files # 单独成一个文件\nIn package.json # 放到 package.json 里面\n\nSave this as a preset for futrue projects？ # 是否保留预设给未来使用\n\n```\n\n---\n\n### 2.目录介绍\n\n**基础目录**\n\n- publice（静态文件）\n- src（源文件）\n    - assets（静态资源）\n    - components（组件）\n    - App.vue\n    - main.js 入口文件\n\n**拓展目录**\n\n- src\n    - assets（静态资源）\n    - components（组件）\n    - views（页面级组件）\n    - router（路由文件）\n    - vuex（Vuex文件）\n    - App.vue\n    - main.js 入口文件\n- vue.config.js Vue-Cli配置文件\n\n---\n\n### 3.Vue-Cli配置\n\n> Vue-Cli 是基于 webpack 的，但是我们看不到配置，那怎么配置呢？需要建立一个 vue.config.js\n\n```js\nmodule.exports = {\n    productionSourceMap: false, // 是否打包 sourcemap（这个可以让我们在代码压缩之后，还能正确的找到发生错误的行，一般开发环境使用，上线环境取消）\n\n    outputDir: 'build', // 设置输入目录（默认是dist）\n\n    publicPath: 'https://cdnxxx.xxx', // 设置静态文件目录（一般静态文件都放到CDN上，这时候 build 生成的 html 中的连接，就要变一下，这个设置可以给所有的 连接加上前缀）\n\n    assetsDir: 'assets', // 设置静态文件夹名称（还是在链接中拼接的）\n\n    // 配置别名，例如 @ 就默认表示 /src\n    resolve: {\n        alias: {\n            'router': '/src/router'\n        }\n    },\n\n    chainWebpack: config => {\n\n    },\n\n    configureWebpack: {\n\n    },\n\n    devServer: {\n        // 设置代理（下面演示的是，请求 /a，会自动代理成 /b）（🔥 可以解决跨域）\n        proxy: {\n             '/a': {\n                 target: '/b'\n             }\n        }\n    },\n\n    // 使用别的插件\n    pluginOptions: {\n\n    }\n\n}\n```\n\n---\n\n## 🏀第二部分：Vue-Router\n\n> [Vue-Router官网...](https://router.vuejs.org/zh/)\n\n### 1.安装和使用\n\n- 要不就是 vue create 项目名称的时候，选上vue-router（推荐）\n- 要不就是 vue add router\n- 要不就是 npm 下载，然后自己建立文件夹，调整 main.js \n\n**基本使用**\n\n```js\n// router.js\nimport Vue from 'vue'\nimport Router from 'vue-router'\n\nVue.use(Router) // 会往Vue上添加 $router $route\n\n// 路由的作用：在不同的路径，展示不同的内容，下面的配置就是做这个事情\nexport default new Router({\n    routes: [\n        {\n            path: '/',\n            name: 'home',\n            // 组件懒加载写法（提高首屏加载）\n            component: () => import(/* webpackChunkName: \"about\" */ './views/Home.vue')\n        }\n    ]\n})\n\n```\n\n---\n\n### 2.router-link && router-view\n\n```html\n<router-link to=\"/\">首页</router-link>\n<router-link to=\"{ path: '/' }\">首页</router-link>\n<!-- 默认渲染成a标签，如果你不想渲染成a标签，可以通过 tag进行设置 -->\n<router-link tag=\"li\" to=\"{ name: 'home' }\">首页</router-link>\n\n<!-- 展示跳转的 -->\n<router-view></router-view>\n```\n\n\n\n---\n\n### 3.嵌套路由 && $router\n\n```js\nimport Router from 'vue-router'\nimport Vue from 'vue'\n\nVue.use(Router)\n\nexport default new Router({\n    routes: [\n        {\n            path: '/',\n            name: ...,\n            component: ...,\n            redirect: '/login', // 重定向\n            children: [\n                {\n                    path: 'login',\n                    name: ...,\n                    component: ...\n                },\n                {\n                    path: 'register',\n                    name: ...,\n                    component: ...\n                }\n            ]\n        },\n        {\n            path: '*',\n            redirect: '/404',\n            component: ...\n        }\n    ]\n})\n\n// 在组件中跳转\nthis.$router.push('/home')\nthis.$router.replace('/home')\n\n// 跳转效果一样，不一样的地方在于 回退的效果上\n// 解释这两个不同，我们先网站路由想象成一个数组，\n// [a, b, c] --> this.$router.push('/d') --> [a, b, c, d]\n// [a, b, c] --> this.$router.replace('/d') --> [a, b, d]\n\n// this.$router.go()\nthis.$router.go(0) // 不动\nthis.$router.go(-1) // 页面往后退\nthis.$router.go(1) // 页面前进\n\n\n```\n\n---\n\n### 4.导航守卫 & 动态路由\n\n**全局导航守卫**\n\n```js\nconst router = new VueRouter({ ... })\n\nrouter.beforeEach((to, from, next) => {\n  // to: 即将要进入的目标 路由对象\n  // from: 当前导航正要离开的路由\n  // next: 一定要调用该方法来 resolve 这个钩子。执行效果依赖 next 方法的调用参数 | next('/home') 可以改变要进入的路由\n})\n\nrouter.afterEach((to, from) => {\n  // ...\n})\n```\n\n---\n\n**路由导航守卫**\n\n```js\nconst router = new VueRouter({\n  routes: [\n    {\n      path: '/foo',\n      component: Foo,\n      beforeEnter: (to, from, next) => {\n        // ...\n      }\n    }\n  ]\n})\n```\n\n---\n\n**组件导航守卫**\n\n```html\n<script>\nexport default {\n    // 路由离开之前\n    beforeRouteLeave (to, from, next) {\n        // this: 是 组件实例\n        // to: 即将要进入的目标 路由对象\n        // from: 当前路由所在的一些信息\n        // next: 一定要调用该方法来 resolve 这个钩子。执行效果依赖 next 方法的调用参数 | next('/home') 可以改变要进入的路由\n\n        // 常用于填写表单的时候，误触路由跳转\n    },\n    // 路由进来之前\n    beforRouteEnter (to, from, next) {\n        // this: 是 undefined（因为路由还未进来）\n    }\n}\n</script>\n```\n\n---\n\n### 5.$router & $route\n\n---\n\n### 6.路由元信息\n\n\n---\n\n## 🏈第三部分：Axios\n\n> [直接看中文官网吧](http://www.axios-js.com/zh-cn/)\n\n---\n\n## ⚾️第四部分：Vuex\n\n> [官方网址](https://vuex.vuejs.org/zh/)\n\n\n### 1.基本使用\n\n处理多组件共享同一数据的情况（跨多组件通信）\n\n- 在Vue-Cli中安装：vue add vue\n\n> 看下面的结构你要明白一点，Vuex 数据不能随便定义（需要定义到state），数据不能直接更改（actions）\n\n```js\nimport Vue from 'vue'\nimport Vuex from 'vuex'\n\nVue.use(Vuex) // 给Vue注入了一个 $state\n\nexport default new Vuex.Store({\n    \n    // 定义数据的地方\n    // 使用：$store.state.name & mapState(['name', 'age'])\n    state: {\n        name: '朱昆鹏',\n        age: 21\n    },\n\n    // Vuex的计算属性（我先这么理解吧）\n    // 使用：$store.getters.nameAndAge & mapGetters['nameAndAge']\n    getters: {\n        nameAndAge (state) {\n            return `姓名：${state.name} 年龄：${state.age}`\n        }\n    },\n\n    // 更改数据的地方,立即改变，内部写异步无效\n    // $store.commit('ageAdd', 5 参数二也可以写成对象形式\n    mutations: {\n        ageAdd (state, num) {\n            state.age += num\n        }\n    },\n\n    // 处理异步，异步完成之后调用 mutations，进行改变\n    // $store.dispath('ageAdd', 5)\n    actions: {\n        ageAdd ( {commit}, num ) {\n            setTimeout(() => {\n                commit('ageAdd', num)\n            }, 1000)\n        }\n    }\n})\n```\n\n---\n\n### 2.state（单一状态树）\n\n> 就是定义数据的地方\n\n```js\nimport Vue from 'vue'\nimport Vuex from 'vuex'\n\nVue.use(Vuex) // 给Vue注入了一个 $state\n\nexport default new Vuex.Store({\n    // 定义数据的地方\n    state: {\n        name: '朱昆鹏',\n        age: 21\n    }\n    // ...\n})\n```\n\n> 那么我们如何在 Vue 组件中展示状态呢？由于 Vuex 的状态存储是响应式的，从 store 实例中读取状态最简单的方法就是在计算属性中返回某个状态（这句话划重点，虽然可以在其他地方也能获取的到，但是 在计算属性中设置 才有响应式的效果）\n\n```html\n<template>\n    <div>\n        {{ name }}\n        {{ age }}\n    </div>\n</template>\n\n<script>\nimport { mapState } from 'vuex'\n\nexport default {\n    data () {\n        return {\n            age: 1998\n        }\n    },\n    computed: {\n        name () {\n            return this.$store.state.name\n        },\n        age () {\n            return this.$store.state.age\n        }\n    }\n    // 当一个组件需要获取多个状态时候，我们可以使用 mapState 辅助函数帮助我们生成计算属性\n    computed: {\n        ...mapState(['name', 'age']) // 这么写你会发现最后显示的 age 是 1998，因为最后是走 data 中的\n        // 🔥 使用传对象的方式，就能写别的名字了，这里访问 $store.state.newAge 就行\n        // ...mapState({\n        //     newAge: state => state.name\n        // })\n    }\n}\n</script>\n```\n\n---\n\n### 3.getter（Vuex中的计算属性，先这么理解吧）\n\n```js\nimport Vue from 'vue'\nimport Vuex from 'vuex'\n\nVue.use(Vuex) // 给Vue注入了一个 $state\n\nexport default new Vuex.Store({\n    // 定义数据的地方\n    state: {\n        name: '朱昆鹏',\n        age: 21\n    },\n    getters: {\n         nameAndAge (state) {\n             return `姓名：${state.name} 年龄：${state.age}`\n         }\n    }\n})\n```\n\n```html\n<template>\n    <div>\n        {{ nameAndAge }}\n        {{ nameAndAge1 }}\n    </div>\n</template>\n\n<script>\nimport { mapGetters } from 'vuex'\nexport default {\n    data () {\n        return {\n            nameAndAge: '名字冲突了，使用mapGetters 定义别名 解决'\n        }\n    },\n    computed: {\n        nameAndAge () {\n            return this.$store.getters.nameAndAge\n        }\n    }\n    // 当一个组件需要获取多个状态时候，我们可以使用 mapState 辅助函数帮助我们生成计算属性\n    computed: {\n        ...mapGetters(['nameAndAge'])\n        // ...mapGetters({\n        //     nameAndAge1 => getters => getters.nameAndAge\n        // })\n    }\n}\n</script>\n```\n\n\n---\n\n### 4.mutations（store 中的状态的唯一方法）\n\n```js\nimport Vue from 'vue'\nimport Vuex from 'vuex'\n\nVue.use(Vuex) // 给Vue注入了一个 $state\n\nexport default new Vuex.Store({\n    // 定义数据的地方\n    state: {\n        name: '朱昆鹏',\n        age: 21\n    },\n    \n    mutations: {\n        changeName (state, name) {\n            state.name = name\n        }\n        ageAdd (state, { num }) {\n            ageAdd += num\n        },\n    }\n})\n```\n\n```html\n<template>\n    <div><div>\n</template>\n\n<script>\nimport { mapMutations } from 'vuex'\n\nexport default {\n    data () {\n        return {\n        }\n    },\n    methods: {\n        ...mapMutations(['changeName', 'ageAdd']),\n        changClick () {\n            this.$store.commit('changeName', '其他名字')\n            this.ageAdd({ num: 10 })\n        }\n    }\n}\n</script>\n```\n\n> 注意 mutations 里面的 内容 不会有延迟，按着顺序就执行完成了，里面写上异步代码也是没有用，怎么解决呢，用 active 来做异步的提交改变\n\n---\n\n### 5.action（内部可以写异步，然后异步触发mutations）\n\n> 我们可以在action内部执行异步\n\n```js\nimport Vue from 'vue'\nimport Vuex from 'vuex'\n\nVue.use(Vuex) // 给Vue注入了一个 $state\n\nexport default new Vuex.Store({\n    // 定义数据的地方\n    state: {\n        name: '朱昆鹏',\n        age: 21\n    },\n    \n    mutations: {\n        changeName (state, name) {\n            state.name = name\n        }\n    },\n\n    actions: {\n        // commit 是 全局上下文\n        changeName ( { commit }, name ) {\n            setTimeout( () => {\n                commit('changeName', name)\n            }, 1000)\n        }\n    }\n\n})\n```\n\n```html\n<template>\n    <div>\n        <button @click=\"changClick\">1s后改变名字</button>\n    </div>\n</template>\n\n<script>\nimport { mapActions } from 'vuex'\n\nexport default {\n    data () {\n        return {\n        }\n    },\n    methods: {\n        ...mapActions(['changeName']),\n\n        changClick () {\n            this.$store.commit('changeName', '其他名字') // 1s后 名称还是不变\n            this.$store.dispath('changeName', '其他名字') // 1s后 名字变了\n\n            // this.changeName('其他名字')\n        }\n    }\n}\n</script>\n```\n\n---\n\n### 6.module（分模块）\n\n> 一般都是建立一个文件夹（store），里面有 index.js 和 modules文件夹，我下面举例 zhukunpeng & girlfriend 两个模块\n\n```js\nimport Vue from 'vue'\nimport Vuex from 'vuex'\nimport zhu from './modules/zhukunpeng.js'\nimport lin from './modules/girlfriend.js'\n\nVue.use(Vuex)\n\nexport default new Vuex.Store({\n    modules: {\n        zhu,\n        lin\n    }\n})\n```\n\n```js\n// store/modules/zhukunpeng.js\nexport default {\n    state: {\n        name: '朱昆鹏',\n        age: 21\n    },\n\n    getters: {},\n\n    mutations: {},\n\n    actions: {}\n}\n```\n\n```js\n// store/modules/girlfriend.js\nexport default {\n    state: {\n        name: '朱昆鹏的女朋友',\n        age: 21\n    },\n\n    getters: {},\n    \n    mutations: {},\n\n    actions: {}\n}\n```\n\n```html\n<template>\n    <div>\n        姓名：{{ $store.state.zhu.name }}\n        女朋友：{{ $store.state.lin.name }}\n        <!-- 除了 state ，其他方式不变，也不用加别动东西，就跟写到 index.js 里面一样 -->\n    </div>\n</template>\n```\n\n> 注意：这种分层之后，可以通过 mapXXX 方式 拿到 getters mutations action，但是不能拿到 state，如果想通过 mapXXX 的方式获取 state，需要给每个模块 加上命名空间 namespaced: true\n\n- 但是这样的话，获取方式就会发生改变 例如 ： $store.getters.xxx ===>  $store['命名空间名称/getters'].xxx || ...mapGetters(['xxx']) ===> ...mapGetters('命名空间名称',['xxx'])\n- ❣️ 推荐是使用命名空间\n\n---\n\n## 🎾第五部分：Vue测试（Jest）\n\n[我写的更详细的 Jest 内容（还没整理完成）...](https://zhukunpenglinyutong.github.io/2.note/8.4%E5%89%8D%E7%AB%AF%E4%BB%A3%E7%A0%81%E8%B4%A8%E9%87%8F/2.%E5%89%8D%E7%AB%AF%E6%B5%8B%E8%AF%95%E6%A1%86%E6%9E%B6Jest.html#%E2%9B%84%EF%B8%8F%E7%AC%AC%E4%B8%80%E9%83%A8%E5%88%86%EF%BC%9Ajest%E5%9F%BA%E7%A1%80)\n\n### 1.Jest基础使用\n\n> 内置断言库，\n\n如果你生成了选择了需要测试的话，会生成一个 tests 文件夹，我们的内容就是写到这里面的\n\n```js\n// ① 测试函数\nimport { testFn } from '函数的地址'\ndescribe('', () => {\n    it('', () => {\n        // 函数测试\n    })\n})\n\n// ② 测试组件\nimport { hello } from '引入hello组件'\nimport { mount } from '@vue/test-utils'\ndescribe('hello.vue', () => {\n    it('', () => {\n        const wrapper = mount(hello) // 注入灵魂（拿到被挂载的元素）\n        helloData.text // 'hello world'\n        // 组件内容测试\n    })\n})\n\n```\n\n---\n\n### 2.Jest异步\n\n```js\nimport asyncHello from '异步函数的地址'\nimport { mount } from '@vue/test-utils'\n\ndescribe('测试异步组件', done => {\n    \n    // 方法一\n    it('获取内容', () => {\n        const wrapper = mount(asyncHello)\n        wrapper.findAll('button').at(0).trigger('click') // 让 button 第一个标签，触发点击事件，这个事件会触发发送请求\n\n        Vue.nextTick(() => {\n            expect(wrapper.findAll('h1').at(0).text()).toBe('测试异步组件')\n            done()\n        })\n    })\n\n    // 方法二\n    it('获取内容', () => {\n        const wrapper = mount(asyncHello)\n        wrapper.findAll('button').at(0).trigger('click') // 让 button 第一个标签，触发点击事件，这个事件会触发发送请求\n\n        return Promise.resolve().then(() => {\n            expect(wrapper.findAll('h1').at(0).text()).toBe('测试异步组件')\n        })\n    })\n\n    // 方法三：使用 async/await，但是不方便\n})\n\n```\n\n```js\n// tests/__mocks__/axios.js\nexport default {\n    get: url => {\n        return Promise.resolve({\n            status: 200,\n            data: {\n                url: url\n            }\n        })\n    }\n}\n\n```\n\n\n---\n\n### 3.Jest测试Vuex\n\n> 这块等我有空写吧\n\n---\n\n## 🎱第六部分：Vue测试（mocha + chai）\n\n> Mocha 是一个测试框架， chai（Jest是一个断言库） \n\n因为我现在也不常用了，我先占个位，有空写\n\n---\n\n## ⛳️第七部分：UI组件库（Element）\n\n### 1.Layout布局\n\n---\n\n### 2.Container容器\n\n---\n\n### 3.Color色彩\n\n---\n\n### 4.Typography字体 & \n\n---\n\n### 5.Icon图标\n\n---\n\n## 📚参考列表（致敬）\n\n- [Vue官网](https://cn.vuejs.org/)\n- [Vuex官网](https://vuex.vuejs.org/zh/)\n- [Vue-Router官网](https://router.vuejs.org/zh/)\n- [Axios中文网](http://www.axios-js.com/zh-cn/)\n- [Element官网](https://element.eleme.cn/#/zh-CN)\n- [Vue-Cli官网](https://cli.vuejs.org/zh/)\n- [Jest官网]()\n- [腾讯课堂](https://ke.qq.com/)\n- [慕课网](https://www.imooc.com/)\n"
  },
  {
    "path": "docs/blog/6.Vue/4.Vue源码解析以及实现.md",
    "content": "---\ntitle: 4.Vue源码解析以及实现\ndate: 2020-01-30 00:00:00\npermalink: \ntag: \n - blog\n - 6.Vue\n---\n\n> 根据vue源码，实现一个简单的vue\n\n## 搭建基础环境\n\n### 安装 rollup\n\n> 这个库打包js，打包出的代码更加简洁\n\n- rollup：打包工具\n- rollup-plugin-babel：rollup 和 babel做一个关联（已废弃，现在用 @rollup/plugin-babel）\n- @babel/core：这个会调用 @babel/preset-env 转义我们的代码\n- @babel/preset-env：将es6转为es5\n- rollup-plugin-serve：启动一个本地环境\n\n```sh\nnpm install rollup @rollup/plugin-babel @babel/core @babel/preset-env rollup-plugin-serve -D\n```\n\n---\n\n### 配置 rollup.config.js 和 .babelrc\n\n```js\nimport babel from '@rollup/plugin-babel'\nimport serve from 'rollup-plugin-serve'\n\nexport default {\n\n  input: './src/index.js',\n\n  output: {\n    format: 'umd', // 模块化的类型 esm，commonjs | umd amd\n    name: 'Vue', // 全局变量的名字\n    file: 'dist/umd/vue.js',\n    sourcemap: true // 可以调整转换转换后的代码\n  },\n\n  plugin: [\n    babel({\n      exclude: 'node_modules/**'\n    }),\n    serve({\n      port: 3000,\n      contentBase: '',\n      openPage: './index.html'\n    })\n  ]\n\n}\n```\n\n> .babelrc\n\n```js\n{\n  \"presets\": [\n    \"@babel/preset-env\"\n  ]\n}\n```\n\n---\n\n### 启动\n\n```json\n\"scripts\": {\n  \"dev\": \"rollup -c -w\"\n},\n```\n\n> 访问：http://localhost:3000/\n\n\n---\n\n\n## vue初始化流程\n\n---\n\n> html模板\n> index.html\n\n```html\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Document</title>\n</head>\n<body>\n    \n    <script src=\"./dist/umd/vue.js\"></script>\n    <script>\n        let vue = new Vue({\n            data() {\n                return {\n                    name: '朱昆鹏',\n                    my: {\n                        age: 20\n                    }\n                }\n            }\n        })\n        console.log('vue', vue);\n    </script>\n</body>\n</html>\n```\n\n---\n\n> 入口函数\n> src/index.js\n\n```js\nimport { initMixin } from './init'\n\n// 暂时不用ES6的Class,因为 class有整体性，函数需要写到class里面，不利于拆分\nfunction Vue(options) {\n  this._init(options) // 入口方法，做初始化操作\n}\n\n// 🔥 写成一个个插件，进行对原型的拓展\n\ninitMixin(Vue) // 专门做初始化的文件\n\nexport default Vue\n```\n\n---\n\n> 初始化文件\n> src/init.js\n\n```js\nimport { initState } from \"./state\"\n\n/**\n * 初始化操作函数\n * @param {*} Vue 构造函数\n */\nexport function initMixin(Vue) {\n\n  Vue.prototype._init = function(options) {\n    const vm = this // 这里的this指向，当前new出来的实例\n    vm.$options = options\n    \n    // 初始化状态（将数据做一个初始化的劫持，当我改变数据的时候更新视图）\n    // 有很多类型的状态：data props watch computed\n    initState(vm) \n  }\n\n}\n```\n\n---\n\n> 初始化状态\n> src/state.js\n\n```js\nimport { observe } from \"./observer/index\";\n\nexport function initState(vm) {\n  const opts = vm.$options;\n  \n  // 先初始化属性\n  if (opts.props) initProps(vm)\n  if (opts.methods) initMethods(vm)\n  if (opts.data) initData(vm)\n  if (opts.computed) initComputed(vm)\n  if (opts.watch) initWatch(vm)\n}\n\n// 初始化 Data\nfunction initData(vm) {\n  let data = vm.$options.data\n\n  // 传过来可能是对象或者函数，但是我们就想要对象（下面的写法就可以）\n  // data.call() 会执行函数，作用域是 vm\n  data = vm._data = typeof data == 'function' ? data.call(vm) : data; \n\n  // 数据劫持方案：对象：Object.defineProperty | 数组：单独处理\n  observe(data)\n}\n\n// 初始化 Computed\nfunction initComputed(vm) {}\n\n// 初始化 Watch\nfunction initWatch(vm) {}\n\n// 初始化 Props\nfunction initProps(vm) {}\n\n// 初始化 Methods\nfunction initMethods(vm) {}\n```\n\n---\n\n> 工具函数\n> src/utils.js\n\n```js\n// 判断是否是数组\nexport function isFunction(val) {\n    return typeof val === 'function';\n}\n\n// 判断是否是对象\nexport function isObject(val) {\n    return typeof val === 'object' || val === null\n}\n```\n\n---\n\n> 数据响应式功能实现\n> src/observer/index.js\n\n```js\nimport { isObject } from '../utils'\n\n// 检测数据变化\nclass Observer {\n\n    // 对对象中的所有属性 进行劫持\n    constructor(data) {\n        this.walk(data)\n    }\n\n    walk(data) {\n        Object.keys(data).forEach(key => {\n            defineReactive(data, key, data[key])\n        })\n    }\n}\n\n/**\n * \n * vue2 会对对象进行遍历，将每个属性 用 defineProperty 重新定义，所以性能差\n * \n * @param {*} data \n * @param {*} key \n * @param {*} value \n */\nfunction defineReactive(data, key, value) {\n    \n    // 对象套对象\n    observe(value)\n\n    Object.defineProperty(data, key, {\n        get() {\n            return value\n        },\n        set(newValue) {\n            observe(value) // 用户自己赋值了一个新对象，也需要递归劫持\n            value = newValue\n        }\n    })\n}\n\n// \nexport function observe(data) {\n    \n    // 如果是对象才观测\n    if (!isObject(data)) return;\n\n    new Observer(data)\n}\n```\n\n---\n\n## 模板编译\n\n> 模板编译原理：AST语法树\n\n- 1.需要将模板变成 render函数\n- 2.去当前实例上取值\n- 3.生成虚拟DOM（就是个对象，好处就是可以描述dom结构，还能用diff算法来增加性能）\n- 4.生成一个真实的dom结构扔到页面里\n\n---\n\n## HTML编译成ast语法树\n\n\n"
  },
  {
    "path": "docs/blog/6.Vue/5.VueRouter源码解析以及实现.md",
    "content": "---\ntitle: 5.VueRouter源码解析以及实现\ndate: 2020-01-30 00:00:00\npermalink: \ntag: \n - blog\n - 6.Vue\n---\n\n> 注意此处：等待重构\n\n---\n\n## 之前的部分，等待重构之后删除\n\n### 1.路由注册（还是听不懂，以后再来）\n\n**Vue插件注册原理**\n\n```js\nVue.use(VueRouter) // Vue.use是核心，我们来看下源码\n```\n\n```js\n/* @flow */\nimport { toArray } from '../util/index'\n\nexport function initUse (Vue: GlobalAPI) {\n  Vue.use = function (plugin: Function | Object) {\n    const installedPlugins = (this._installedPlugins || (this._installedPlugins = []))\n    if (installedPlugins.indexOf(plugin) > -1) {\n      return this\n    }\n\n    // additional parameters\n    const args = toArray(arguments, 1)\n    args.unshift(this)\n    if (typeof plugin.install === 'function') {\n      plugin.install.apply(plugin, args)\n    } else if (typeof plugin === 'function') {\n      plugin.apply(null, args)\n    }\n    installedPlugins.push(plugin)\n    return this\n  }\n}\n\n```\n\n\n**路由注册实现流程**\n\n\n\n"
  },
  {
    "path": "docs/blog/6.Vue/6.Vuex源码解析以及实现.md",
    "content": "---\ntitle: 6.Vuex源码解析以及实现\ndate: 2020-01-30 00:00:00\npermalink: \ntag: \n - blog\n - 6.Vue\n---\n\n# 6.Vuex源码解析以及实现\n\n> 等待书写中..."
  },
  {
    "path": "docs/blog/6.Vue/7.Axios源码解析以及实现.md",
    "content": "---\ntitle: 7.Axios源码解析以及实现\ndate: 2020-01-30 00:00:00\npermalink: \ntag: \n - blog\n - 6.Vue\n---\n\n# 7.Axios源码解析以及实现\n\n> 注意此处：等待重构\n\n**🔥备注：[XMLHttpRequest...MDN教程](https://developer.mozilla.org/zh-CN/docs/Web/API/XMLHttpRequest)**\n\n## 第一部分：项目构建\n\n### 1.需要做的\n\n- 在浏览器端使用XMLHttpRequest对象通讯\n- 支持 Promise API\n- 支持 请求和响应拦截器\n- 支持 请求数据和响应数据的转换\n- 支持 请求的取消\n- JSON数据自动转换\n- 客户端防止 XSRF\n\n---\n\n### 2.初始化项目\n\n- 脚手架：git clone https://github.com/alexjoverm/typescript-library-starter.git\n- 这个脚手架集成的优秀工具\n    - 使用 RollupJS 帮助我们打包\n    - 使用 Prettier 和 TSLint 帮助我们格式化代码以及保证代码风格一致性\n    - 使用 TypeDoc 帮助我们自动生成文档并部署到GitHub pages\n    - 使用 Jest 帮助我们做单元测试\n    - 使用 Commitizen 帮助我们生成规范化的提交注释\n    - 使用 Semantic release 帮助我们管理版本和发布\n    - 使用 husky 帮助我们更简单的使用 Git Hooks\n    - 使用 Conventional changelog 帮助我们通过代码提交信息 自动生成 change log\n\n---\n\n### 3.创建入口文件\n\n**我们在src文件夹下，建立 index.ts 文件作为入口文件**\n\n```js\nimport { AxiosRequestConfig } from './types/index'\n\nfunction axios(config: AxiosRequestConfig) {\n    // TODE\n}\n\nexport default axios\n```\n\n**再定义一个 types文件夹 管理我们的类型**\n\n```js\n// 这个文件放着公共接口类型（src/types/index.ts）\n\nexport type Method = 'get' | 'GET' | 'post' | 'POST' | 'delete' | 'DELETE' | 'head' | 'HEAD' | 'OPTIONS' | 'options' | 'put' | 'PUT' | 'PATCH' | 'patch'\n\nexport interface AxiosRequestConfig {\n    url: string\n    method?: Method\n    data?: any\n    param?: any\n}\n```\n\n---\n\n> 本着模块化的思想，我们抽离出来 xhr.ts 文件\n\n```js\nimport { AxiosRequestConfig } from './types/index'\n\nexport default function xhr(config: AxiosRequestConfig): void {\n    const { data = null, url, method = 'get'} = config\n    \n    const request = new XMLHttpRequest()\n    request.open(method.toUpperCase(), url, async: true)\n    request.send(data)\n}\n```\n\n---\n\n## 第二部分：axios基础功能实现\n\n\n---\n\n## 📚参考列表\n\n- [慕课网课程...基于TypeScript从零重构axios](https://coding.imooc.com/class/330.html)"
  },
  {
    "path": "docs/blog/6.Vue/8.Vue SSR.md",
    "content": "---\ntitle: 8.Vue SSR\ndate: 2020-01-30 00:00:00\npermalink: \ntag: \n - blog\n - 6.Vue\n---\n\n# 8.0 Vue SSR\n\n## 🍡第一部分：服务器端渲染技术演进历史\n\n### 1.最开始的阶段\n\n> 客户端请求网站，服务器端给一个html文件，这个时候页面文字有一点不同都是一个新的页面（其实这时候淘宝是很难做的，因为商店都是一个模板的，但是因为商品不一样，都是不一样的页面，所以当前淘宝服务器存储了很多页面）\n\n<img width=\"300px;\" src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/2.notes/5.MVVM%E6%A1%86%E6%9E%B6%EF%BC%88Vue%EF%BC%89/VueSSR/1.png\" />\n\n---\n\n### 2.后端模板阶段\n\n> ajax出现，页面可以局部刷新\n\n> 那个时代微软IE一家独大，Node虽然也能做后端模板渲染，但是当时Node还未出现，当时有的就是 Java，PHP，C#，Python...\n\n<img width=\"300px;\" src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/2.notes/5.MVVM%E6%A1%86%E6%9E%B6%EF%BC%88Vue%EF%BC%89/VueSSR/2.png\" />\n\n---\n\n### 3.前后端分离阶段\n\n> 这时候客户端的能力越来越强，前端能做到事情越来越多（谷歌浏览器开发 v8引擎，使js的执行效率提升很多，并且浏览器市场微软节节败退）\n\n> 前后端分离的好处：后端可以专注的处理数据以及业务逻辑，前端专注制作样式和逻辑交互\n\n> 前后端分离的坏处：首屏加载慢（需要等JS解析好，页面才能出来），不好的SEO\n\n<img width=\"300px;\" src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/2.notes/5.MVVM%E6%A1%86%E6%9E%B6%EF%BC%88Vue%EF%BC%89/VueSSR/3.png\" />\n\n---\n\n### 4.Node中间层\n\n> Node作为中间层 拼接数据和HTML，返回新的HTML（Vue SSR就是在此基础上演进的）\n\n> 这里实现的原理主要是使用模板引擎，例如Node自带的 Ejs\n\n<img width=\"300px;\" src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/2.notes/5.MVVM%E6%A1%86%E6%9E%B6%EF%BC%88Vue%EF%BC%89/VueSSR/4.png\" />\n\n\n---\n\n### 5.Vue SSR\n\n> 在Node中间层这个思想的基础上，为了能使用Vue全家桶，所以就演进了Vue SSR 的模式\n\n> 将Node代替PHP，JSP，ASP 作为服务端渲染语言，就能使用Node的生态链，如webpack等工具，通过一系列的套路，就能实现Vue SSR\n\n<img width=\"300px;\" src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/2.notes/5.MVVM%E6%A1%86%E6%9E%B6%EF%BC%88Vue%EF%BC%89/VueSSR/5.png\" />\n\n---\n\n### 6.总结\n\n> 前端发展速度越来越快，现在 VR,人工智能，都可以在前端运行，以后5G普及之后，我们的技术会演变成什么样，我们也不清楚\n\n> 了解 Vue SSR 产生的历史背景，可以让我们应对未来 新的架构体系的时候，有一份 快速过渡到新体系的把握\n\n> 题外话：我觉得下一个阶段的架构，Serverless（无服务架构）会火起来\n\n- Faas 函数即服务\n- Baas 后端即服务\n\n[掘金文章：写给前端工程师的 Serverless 入门](https://juejin.im/post/5d9c47dce51d4578045a3569)\n\n---\n\n## 🍧第二部分：实现一个 Vue SSR\n\n[GitHub代码地址](https://github.com/zhukunpenglinyutong/vue-ssr-study)\n\n### 1.node-serve\n\n> 将Vue实例，通过Bundle Renderer 输出 HTML字符串\n\n> HTML字符串通过模板拼接成一个真实的HTML页面，返回给客户端\n\n<img width=\"300px;\" src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/2.notes/5.MVVM%E6%A1%86%E6%9E%B6%EF%BC%88Vue%EF%BC%89/VueSSR/6.node-serve.png\" />\n\n---\n\n### 2.服务端渲染\n\n> 这里主要是对 Vue-SSR 中 服务端渲染部分的实践\n\n> 作用就是通过 webpack，使我们写的Vue代码，能够输出一个 Vue实例\n\n> 然后交给 Bundle Renderer 函数 输出 HTML字符串，通过Node将拼接好的HTML页面发送给客户端\n\n\n<img src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/2.notes/5.MVVM%E6%A1%86%E6%9E%B6%EF%BC%88Vue%EF%BC%89/VueSSR/7.%E6%9C%8D%E5%8A%A1%E7%AB%AF%E6%B8%B2%E6%9F%93.png\" />\n\n\n---\n\n### 3.客户端渲染\n\n> 上述通过服务端渲染，可以输出一个完整页面，但是不具有Vue的特性，于是还需要客户端渲染\n\n> 原理是：服务端渲染的页面会携带上特定的字段，例如 #app，并且页面解析到最后 会请求用于客户端渲染的 bunndle.client.js\n\n> 这个会文件 会将Vue实例 挂载到 #app 上，使客户端具有Vue的特性\n\n<img src=\"https://cloud.githubusercontent.com/assets/499550/17607895/786a415a-5fee-11e6-9c11-45a2cfdf085c.png\" />\n\n[Vue SSR 指南-源码结构](https://ssr.vuejs.org/zh/guide/structure.html#%E9%81%BF%E5%85%8D%E7%8A%B6%E6%80%81%E5%8D%95%E4%BE%8B)\n\n---\n\n## 🍭第三部分：Nuxt基础使用\n\n### 1.初始化项目和项目目录介绍\n\n- 安装：npx create-nuxt-app <项目名>\n    - 备注：npx在NPM版本5.2.0默认安装了\n- 然后就让你选择一些配置\n\n---\n\n- assets：资源目录（用于组织未编译的静态资源如 LESS、SASS 或 JavaScript）\n- components：组件目录（用于组织应用的 Vue.js 组件。Nuxt.js 不会扩展增强该目录下 Vue.js 组件，即这些组件不会像页面组件那样有 asyncData 方法的特性）\n- layouts：布局目录（用于组织应用的布局组件）\n- middleware：中间件目录（用于存放应用的中间件）\n- pages：页面目录（用于组织应用的路由及视图。Nuxt.js 框架读取该目录下所有的 .vue 文件并自动生成对应的路由配置。\n若无额外配置，该目录不能被重命名）\n- plugins：插件目录（用于组织那些需要在 根vue.js应用 实例化之前需要运行的 Javascript 插件）\n- static：静态文件目录（用于存放应用的静态文件，此类文件不会被 Nuxt.js 调用 Webpack 进行构建编译处理。 服务器启动的时候，该目录下的文件会映射至应用的根路径 / 下）\n- store：Store 目录（用于组织应用的 Vuex 状态树 文件。 Nuxt.js 框架集成了 Vuex 状态树 的相关功能配置，在 store 目录下创建一个 index.js 文件可激活这些配置）\n\n---\n\n### 2.基础路由\n\n> 路由规则是根据pages下的文件自动生成的\n\n**示例**\n\n```sh\n# 在 pages/test.vue \n访问 localhost:3000/test 可以\n\n# 建立 pages/test1/test1.vue\n访问 localhost:3000/test1 不行\n访问 localhost:3000/test1/test1 可以\n\n# 建立 pages/test1/index.vue\n访问 localhost:3000/test1 可以\n```\n\n---\n\n### 3.路由跳转\n\n```js\n<nuxt-link to=\"/test\">跳转到test页面</nuxt-link>\n\nthis.$router.push({path: '/test'})\n\n// 文件夹类型的name跳转名称是 test1-index 这种用 - 分隔的\nthis.$router.push({name: 'test'})\n```\n\n注意：别用a标签进行跳转，因为会刷新页面\n\n---\n\n### 4.动态路由\n\n> 在Nuxt中定义带参数的动态路由，需要创建对应的以下划线作为前缀的Vue文件或者目录\n\n**例如在根目录下参数设置动态路由，而跳转的依据是 name 字段**\n\n- 首先就是先在pages下建立 _name/index.vue\n- 然后在 _name/index.vue 中有通过\n$route.params.name 来获取到这个参数，进而进行一些操作\n\n---\n\n### 5.路由参数校验\n\n> 假设我们希望传入的名字是字符类型，而不是数字，这个怎么校验呢？\n\n```js\n// pages/_name/index.vue\nexport default {\n    validate (obj) {\n        obj.params.name // 传的参数，通过正则来规定参数的规则，返回 false || true\n        // 注意这里面不能用 $route.params 可以用 obj.params\n        return true\n    }\n}\n</script>\n```\n\n---\n\n### 6.嵌套路由\n\n- 添加一个Vue文件，作为父组件\n- 添加一个与父组件同名的文件夹来存放子视图组件\n- 在父组件中，添加组件，用于展示匹配到的子视图（nuxt-chilid标签）\n\n```html\n<!-- /pages/zhu.vue -->\n<template>\n    <div>\n        我是朱昆鹏：\n        <nuxt-child></nuxt-child>\n    </div>\n</template>\n\n<!-- /pages/zhu/_data/index.vue -->\n<template>\n    <div>\n        我的信息是：{{ $route.params.data }}\n    </div>\n</template>\n\n<!-- 访问：http://localhost:3000/zhu/年龄21 -->\n我是朱昆鹏：\n我的信息是：年龄21\n```\n\n---\n\n### 7.布局组件\n\n```html\n<!-- /layouts/handNav.vue -->\n<!-- 切记：nuxt这个占位元素一定要写上 -->\n<template>\n    <div>\n        我是布局组件（头部导航组件）\n        <nuxt></nuxt> \n    </div>\n</template>\n\n<!-- /pages/zhu.vue -->\n<!-- 通过 layout 属性来写上 -->\n<template>\n    <div>\n        我是朱昆鹏：\n        <nuxt-child></nuxt-child>\n    </div>\n</template>\n<script>\nexport default {\n    layout: 'handNav'\n}\n</script>>\n\n<!-- 访问：http://localhost:3000/zhu/年龄21 -->\n我是布局组件（头部导航组件）\n我是朱昆鹏：\n我的信息是：年龄21\n```\n\n---\n\n**error布局组件**\n\n> 凡是匹配到出错的路由，都会匹配 /layouts/error.vue\n\n---\n\n### 8.全局样式引入\n\n- 写一个 assets/styles/index.css\n- 然后再nuxt.config.js 进行全局样式文件的引入\n\n```js\nexport default {\n    // ...\n    /*\n    ** Global CSS\n    */\n    css: [\n        '~/assets/style/index.css'\n    ],\n}\n``` \n\n---\n\n### 9.element.ui使用\n\n- 第一步：安装：npm i element-ui -S\n- 第二步：在 plugins 文件夹下，创建 ElementUI.js 文件\n\n```js\n// plugins/ElementUI.js 就是启用了一下 element.ui\nimport Vue from 'vue'\nimport ElementUI from 'element-ui'\nVue.use(ElementUI)\n```\n\n第三步：在nuxt.config.js中添加配置\n\n```js\nexport default {\n  css: [\n    'element-ui/lib/theme-chalk/index.css'\n  ],\n  /*\n  ** Plugins to load before mounting the App\n  */\n  plugins: [\n    // ssr: true 表示是服务端渲染\n    {src: '~/plugins/ElementUI', ssr: true}\n  ],\n  build: {\n    vendor: ['element-ui']\n  }\n}\n```\n\n---\n\n### 10.异步数据的获取\n\n> 在Nuxt中，生命周期函数只有 created 以及 beforeCreate 这两个生命周期函数能够在服务端正常使用，而Nuxt中的异步请求，不能再 created里面去发，因为它会在前端执行，那怎么办呢？\n\n**我们可以使用 asyncData方法，这个方法会在组件（限于页面组件）每次加载之后被调用。它可以在服务器端或者路由更新之前被调用，所以注意，这个函数不能使用this**\n\n```js\nexport default {\n    // 使用方法\n    asyncData(context, callback) {\n\n        callback(null, data)\n    },\n    // context.route.params.xxx 获取参数\n    // callback(new Error(), data)渲染出错的页面\n}\n```\n\n---\n\n## 🍶第四部分：使用Nuxt遇到的问题以及解决方案\n\n### 1.适合放到static目录下的内容\n\n> 例如 放不支持服务端渲染的情况的JS库 ，用于在某个页面加载完成后 进行请求并加载，例如gt.js\n\n> 例如 doc文件，视频音频文件等\n\n> 引用方式： / 就代表static目录\n\n---\n\n### 2.页面如何引入JS\n\n```js\nhead: {\n    script: [\n        {\n            type: 'text/javascript',\n            src: '/js/gt.js'\n        }\n    ]\n}\n```\n\n---\n\n### 3.动态设置 head\n\n```js\nhead() {\n  return {\n     title: '标题'\n  }\n}\n\n```\n\n---\n\n### 4.有些库需要用到 window & document ，但是服务端没有window & document怎么办\n\n```js\nif (process.client) {\n  // 使用\n}\n```\n\n---\n\n### 5.非页面组件无法使用 asyncData怎么办？\n\n> 方法一：在组件的 mounted 方法里面实现异步获取数据的逻辑，之后设置组件的数据，限制是：不支持服务端渲染。\n\n> 方法二：在页面中使用asyncData，然后通过 props 传递给子组件，此方法可以支持服务端渲染\n\n---\n\n### 6.操作DOM节点有时候不起效果（例如利用轮播插件 swiper 的时候，需要操作DOM但是就不起效果）\n\n```js\n// Nuxt更新DOM是异步的，需要在Vue.$nextTick 进行更新DOM\nthis.$nextTick(() => {\n    // 操作DOM\n})\n```\n\n---\n\n[Nuxt常见问题](https://zh.nuxtjs.org/faq)"
  },
  {
    "path": "docs/blog/6.Vue/9.项目 开发Ant Design Pro Vue.md",
    "content": "---\ntitle: 9.项目 开发Ant Design Pro Vue\ndate: 2020-01-30 00:00:00\npermalink: \ntag: \n - blog\n - 6.Vue\n---\n\n# 8.1项目 开发Ant Design Pro Vue\n\n> 注意：此篇内容可能要被删除...\n\n> 原因是结构混乱，不适合放到这个版块下\n\n---\n\n### 1.使用Vue-cli3.0快速搭建环境\n\n<img src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/2.notes/5.MVVM%E6%A1%86%E6%9E%B6%EF%BC%88Vue%EF%BC%89/%E9%A1%B9%E7%9B%AE%E3%80%8Aant-design-vue-pro%E3%80%8B/1.Vuecli%E9%85%8D%E7%BD%AE.png\" />\n\n安装其他内容：npm i ant-design-vue moment\n\n```js\nimport Antd from \"ant-design-vue\";\nimport \"ant-design-vue/dist/antd.less\";\nVue.use(Antd);\n\n// 这里会报一个错，说的是引入 .less 的文件还需要一些配置啥的吧，这样就引出了下面要整的 自定义webpack配置\n```\n\n---\n\n### 2.如何自定义Webpack和Babel配置\n\n**自定义webpack配置（vue.config.js）**\n\n```js\n// 新建 vue.config.js\nmodule.exports = {\n  css: {\n    loaderOptions: {\n      less: {\n        javascriptEnabled: true,\n      },\n      css: {\n        // 这里的选项会传递给 css-loader\n      },\n      postcss: {\n        // 这里的选项会传递给 postcss-loader\n      }\n    }\n  }\n}\n```\n\n- [本问题 vue-cli 自定义配置网址](https://cli.vuejs.org/zh/config/#css-loaderoptions)\n- [问题解决方案地址](https://github.com/ant-design/ant-motion/issues/44)\n\n---\n\n**Babel配置**\n\n- 我们可以通过 .babel 来转义ES6中识别不了的语法，也可以 通过一个插件来实现 UI组件的按需加载\n\n- 安装：npm i babel-plugin-import --dev\n\n```js\nmodule.exports = {\n  presets: [\"@vue/app\"],\n  plugins: [\n    [\n      \"import\",\n      { libraryName: \"ant-design-vue\", libraryDirectory: \"es\", style: true }\n    ]\n  ]\n};\n\n```\n\n- [babel按需加载 配置](https://vue.ant.design/docs/vue/use-with-vue-cli-cn/)\n\n```js\n// 按需加载 代码效果 示例（不用引入CSS了，因为这个插件帮忙引入了）\nimport { Button, Switch } from \"ant-design-vue\";\nVue.use(Button);\nVue.use(Switch);\n\n```\n\n---\n\n**拓展：使用 Prettier格式化代码，例如 给我们自动双引号变单引号，等操作**\n\n\n- [学习笔记](https://www.jianshu.com/p/5f7dbffc257e)\n- [官网](https://prettier.io/docs/en/options.html?spm=a2c4e.11153940.blogcont422690.11.5d0b5721zZ3CkZ)\n\n---\n\n### 3.如何设计一个高拓展性的路由？\n\n**示例路由**\n\n```js\n\nimport Vue from \"vue\";\nimport Router from \"vue-router\";\n\nVue.use(Router);\n\nexport default new Router({\n  mode: \"history\",\n  base: process.env.BASE_URL,\n  routes: [\n    {\n      path: \"/user\", // 用户相关的路由\n      children: [\n        {\n          path: '/user/login', // 登录\n          name: 'login',\n          component: () => {\n            import(/* webpackChunkName: \"user\" */ \"./views/User/Login.vue\")\n          }\n        },\n        {\n          path: '/user/register', // 注册\n          name: 'register',\n          component: () => {\n            import(/* webpackChunkName: \"user\" */ \"./views/User/Register.vue\")\n          }\n        }\n      ]\n    }\n  ]\n});\n\n```\n\n---\n\n**🔥加载提示库（防止路由切换白屏时间太长的问题，增加友好提示）**\n\n- 安装：npm i nprogress\n\n```js\nimport NProgress from 'nprogress'\nimport 'nprogress/nprogress.css'\n\n// Vue路由守卫\nrouter.beforeEach( (to, form, next) => {\n  NProgress.start()\n  next()\n})\n\nrouter.afterEach( () => {\n  NProgress.done()\n})\n\n```\n\n"
  },
  {
    "path": "docs/blog/7.React/1.React基础.md",
    "content": "---\ntitle: 1.React基础\ndate: 2020-01-30 00:00:00\npermalink: \ntag: \n - blog\n - 7.React\n---\n\n> 等待书写中...\n## 🍡第一部分：React初探\n\n### 1.React简介\n\n- react是由Facebook在2013年5月推出的一个前端框架，带来一种函数式编程风格\n- react比vue更灵活一些，Vue比react多一些api，使用起来更简单\n\n---\n\n### 2.React开发环境搭建\n\n**使用脚手架工具来生成**\n\n- 前置条件：有Node环境\n- 安装React脚手架：npm i create-react-app -g\n- 生成工程：create-react-app my-app\n\n---\n\n### 3.工程目录文件简介\n\n- public\n  - manifest.json 给PWA使用\n- src 工程文件夹\n - index.js 程序入口文件\n - App.js 组件\n - App.test.js: 测试文件\n\n---\n\n### 4.React中的组件\n\n```js\n// 这就是一个组件，为什么要引入 React呢，因为下面的 div 是JSX的标签，需要引入react进行编译\nimport React from 'react';\n\nfunction App() {\n  return (\n    <div>\n      Hello 朱昆鹏\n    </div>\n  );\n}\n\nexport default App;\n```\n\n---\n\n\n### 5.最基础的JSX语法\n\n```js\n// 自定义标签 JSX 要求以大写字母开头\n```\n\n\n---\n\n## 🥗第二部分：React基础精讲\n\n### 1.使用React编写ToolList功能\n\n```js\nimport React, { Component, Fragment } from 'react'\n\nclass TooLlist extends Component {\n\n  constructor(props) {\n    super(props)\n    // 组件的状态\n    this.state = {\n      inputValue: '',\n      list: ['学习英文', '学习React']\n    }\n  }\n\n  render() {\n    return (\n      <Fragment>\n        <div>\n          <input \n            value={this.state.inputValue} \n            onChange={this.handleInputChang.bind(this)} \n          />\n          <button onClick={this.handleButtonClick.bind(this)}>提交</button>\n        </div>\n        <ul>\n          {\n            // 我去，这种写法就是比 v-for 要灵活一些\n            this.state.list.map( (item, index) => {\n              return (\n                <li \n                  key={index} \n                  onClick={this.tooLlistDelete.bind(this, index)}>{item}\n                </li>\n              )\n            })\n          }\n        </ul>\n      </Fragment>\n    )\n  }\n\n  // 输入框绑定事件（感觉Vue的双向数据绑定很香）\n  handleInputChang(e) {\n    this.setState({\n      inputValue: e.target.value\n    })\n  }\n\n  // 按钮提交方法\n  handleButtonClick() {\n    this.setState({\n      list: [...this.state.list, this.state.inputValue],\n      inputValue: ''\n    })\n  }\n\n  // ToolList Item 删除事件\n  tooLlistDelete(index) {\n    // immutable | state 不允许我们直接做任何的改变\n    const list = [...this.state.list]\n    list.splice(index, 1)\n\n    this.setState({\n      list: list\n    })\n  }\n}\n\nexport default TooLlist\n```\n\n---\n\n### 2.JSX语法细节补充\n\n> jsx（语法糖，浏览器不识别，会被转换） 最后会通过 babel 转换为 createElement\n\n- 用 className 代替 class 书写类名\n- 用 {//} {/***/} 书写注释（虽然我用之前的写法也没问题吧）\n- label 标签中用的 for 代替 htmlFor\n\n---\n\n### 3.拆分组件与组件之间的传值\n\n\n\n\n---\n\n## 🍝第三部分：React高级内容\n\n---\n\n## 📚参考列表（致敬）\n\n- [慕课网课程-React16.4开发简书项目从零基础入门到实战](https://coding.imooc.com/class/229.html)\n"
  },
  {
    "path": "docs/blog/7.React/2.React全家桶.md",
    "content": "---\ntitle: 2.React全家桶\ndate: 2020-01-30 00:00:00\npermalink: \ntag: \n - blog\n - 7.React\n---\n\n> 等待书写中..."
  },
  {
    "path": "docs/blog/8.移动端/0.移动端开发绪论.md",
    "content": "---\ntitle: 0.移动端开发绪论\ndate: 2020-01-30 00:00:00\npermalink: \ntag: \n - blog\n - 8.移动端\n---\n\n> 移动端开发系统有：Android 和 IOS，未来可以还有其他的操作系统，为了真正了解移动端，我决定写一下这个绪论，去探索一下，移动端开发的前因后果，技术演进（搞技术也好，还是工作也好，我就喜欢搞个前因后果，偏执。）\n\n---\n\n## ⏱第一部分：移动端发展历史\n\n### 1.手机发展历史\n\n- 第一个时代：诺基亚，摩托罗拉之类的时代...（采用的系统是塞班）\n- 2007年：IPhome问世，触屏+ 应用引爆智能手机时代（2008年 App Store问世）\n- 2008年：首部Android手机问世，是由HTC制造的 HTC G1\n- 之后就是我们知道的 小米 华为 等等\n\n---\n\n### 2.手机操作系统发展历史\n\n- Symbian(塞班)(倒闭)\n- BlackBerry OS(黑莓)(关闭)\n- Windows Mobile(微软)\n- iOS(苹果)\n- 谷歌Android(安卓)\n\n\n---\n\n### 3.手机网络发展历史\n\n- **1G时代**（模拟手机大哥大）\n    - 第一代移动通信技术使用了多重蜂窝基站，允许用户在通话期间自由移动并在相邻基站之间无缝传输通话\n- **2G时代**（数字网络，从1991年开始）\n    - 第二代移动通信技术区别于前代，使用了数字传输取代模拟，并提高了电话寻找网络的效率。这一时期手机用户数量急速增长，预付费电话流行\n    - 基站的大量设立缩短了基站的间距，并使单个基站需要承担的覆盖面积缩小，有助于提供更高质量的信号覆盖。因此接收机不用像以前那样设计成大功率的，体积小巧的手机成为主流。\n    - 这一时期短信功能首先在GSM平台应用，后来扩展到所有手机制式。铃声等付费内容成为新的利润增长点。\n    - GSM（全球移动通信系统）成为全世界最流行的移动通信标准制式。由于内部兼容，国际漫游变得更容易。全球2G网络中80%为GSM制式，覆盖212个国家/地区的30亿人口。\"\n- **3G时代**（高速IP数据网络，从2001年开始）\n    - 第三代移动通信技术的最大特点是在数据传输中使用分组交换（Packet Switching）取代了电路交换（Circult Switching）。几年前，用于在计算机上访问移动互联网的USB加密狗问世。电路交换使手机与手机之间进行语音等数据传输；分组交换则将语音等转换为数字格式，通过互联网进行包括语音、视频和其他多媒体内容在内的数据包传输\n- **4G时代**（全IP数据网络，从2009年开始）\n    - 到4G时代，电路交换将完全消失。所有语音通话将通过数字转换，以VoIP形式进行。因此在4G网络进行通话，将可以依靠有线或无线网络而不一定需要移动信号覆盖\n\n\n---\n\n## 📡第二部分：移动端技术发展历史\n\n### 1.第一个阶段：跨平台技术产生之前\n\n那时候只有原生的 Android 和 IOS 开发，会的人少，大都是摸着石头过河，为了解决开发效率（一个业务需要写两套代码的问题），各大公司退出了自己的跨平台解决方案，于是就进入到了移动端技术发展的下个阶段\n\n--- \n\n### 2.第二个阶段：Web App & PWA\n\n**Web App是指基于Web的应用，运行于网络和标准浏览器上，相当于一个网页然后加一个App的壳。2014年HTML5的标准规范制定完成，在网络舆论上Web App大有取代Native App的气势，但Web App有以下缺点，使得它始终是“主角的心，配角的命”**，缺点如下：\n\n- 性能低，操作体验不好\n- 无法调用原生API，很多功能无法实现\n- 依赖于网络，网速慢时体验很差，并且没有离线功能，优化不好的话会消耗流量\n- 只能做为一个临时的入口，用户留存率低\n\n**PWA（Progressive Web App）意为渐进式增强Web应用，它不是一门技术，而是一个概念，使用多种技术来增强 Web App的功能**\n\n- 用Service Worker + HTTPS +Cache Api + indexedDB 等一系列Web技术实现离线加载和缓存\n- 实现了推送和通知\n- 可以直接添加到手机的桌面上\n- 使用Service Worker可以进行后台同步\n\n**总结起来，PWA的主要的能力就是离线、推送、桌面访问，可以说PWA赋予Web App原生的体验，但是PWA一直不温不火的原因主要有以下几点：**\n\n- 游览器对PWA技术支持还不够全面， 不是每一款游览器都能100%的支持PWA\n- 国内一些手机厂商对Android系统各种魔改，对PWA的兼容性不好，甚至不支持PWA\n- 平台的竞争，iOS对PWA的支持力度远远低于Android，所以PWA在iOS上的体验打了折扣。PWA面对类似的微信小程序和快应用的竞争中，并没有优势。\n\n---\n\n### 3.第三个阶段：Hybrid App（HTML5+原生来进行混合开发）\n\n**原生App的架构图如下所示：**\n\n<img src=\"https://ss.csdn.net/p?https://mmbiz.qpic.cn/mmbiz_png/nk8ic4xzfuQ9icKH4xaVevGjA0VI3G5bfpaWSwnZKxjyBog29bf2JkRwuGsUVj20sRIfjDXic5hpLmOourdmg8RzA/640?wx_fmt=png\" />\n\n\n通过原生SDK提供的API，App可以与系统底层通信，以创建 UI 组件或访问系统服务。这些组件被渲染到手机屏幕，屏幕产生的相应的事件会被传回给组件。\n\n因为每个平台的系统组件是不同的，你需要为每个平台开发单独的 App，而Hybrid App不必这样，Hybrid App的原生UI组件用来展示交互复杂和渲染要求高的界面，其他的可以交给HTML5来展示。\n\nHybrid App虽然开发效率高，可以跨平台，但是Hybrid体验比不上原生，Hybrid相关的技术有很多，比如PhoneGap、Cordova、Ionic、VasSonic等等\n\n---\n\n**Cordova**\n\nCordova的体系结构图如下：\n\n<img src=\"https://ss.csdn.net/p?https://mmbiz.qpic.cn/mmbiz_png/nk8ic4xzfuQ9icKH4xaVevGjA0VI3G5bfpHT0NoxE4eVibswNSYr8KKmgrdGM0axoxU73QJQg2JvfTYYth3IDfVsQ/640?wx_fmt=png\" />\n\nCordova同样使用WebView来展示界面，插件是Cordova中不可或缺的一部分，Apache Cordova维护了名为Core Plugins的插件，这些核心插件为App提供访问设备功能，如电池、相机、联系人等。除了核心插件之外，还有一些第三方插件可以使用，你也可以开发一个自己的插件。\n\n---\n\n**Ionic**\n\nIonic Framework是一个开源UI工具包，最早的目标是使用HTML、CSS和JavaScript等Web技术开发移动应用程序。由于Web技术的这一基础，Ionic可以在网络运行的任何地方运行，比如  iOS、Android、浏览器、Electron、PWA等等,目前，Ionic Framework已与Angular正式集成，但对Vue和React的支持正在开发中。\n\n---\n\n### 4.第四个阶段：原生渲染\n\n> 原生渲染在本篇文章中指的是由JavaScript开发并且由原生控件渲染，代表有React Native、Weex、快应用\n\n**React Native**\n\nReact Native是Facebook早先开源的 Web UI框架React在原生移动应用平台的衍生产物，底层对Android和iOS平台的原生代码进行封装，通过使用JavaScript就可以编写出原生代码。\n\nVirtual DOM是DOM在内存中的一种轻量级表达方式，可以通过不同的渲染引擎生成不同平台下的UI。\n\nReact Native与原生框架通过Bridge进行通信，如果使用Chrome浏览器进行调试，那么所有的JavaScript代码将运行在Chrome V8引擎中，通过WebSocket和原生代码进行通信。\n\n<img src=\"https://ss.csdn.net/p?https://mmbiz.qpic.cn/mmbiz_png/nk8ic4xzfuQ9icKH4xaVevGjA0VI3G5bfpBD4tPg7ZgnicB4WsHVCGXANXE2lLXMpOu67JSg06BLj0uqXveUibZXqw/640?wx_fmt=png\" />\n\n\n---\n\n### 5.第五个阶段：Flutter\n\nFlutter是谷歌的移动UI框架，可以快速在Android和iOS上构建高质量的原生用户界面， 它的前身是谷歌试验项目Sky。\n\nFutter提出了一切皆为控件（Widget）的概念，除了基本的文本、图片、卡片、输入框等Widget，布局方式和动画等也都是Widget。通过使用不同类型的Widget，就可以实现复杂度的界面。\n\nFlutter框架采用了分层设计，此设计的目标是帮助开发者使用更少的代码完成更多工作。例如，Material层是由Widgets层的普通Widget组成的，而Widgets层本身是通过来自Rendering层的低级对象构建的。\n\n<img src=\"https://ss.csdn.net/p?https://mmbiz.qpic.cn/mmbiz_png/nk8ic4xzfuQ9icKH4xaVevGjA0VI3G5bfpsa9kB9ZoGpBnnp1dTKyibiaUYWcv8Zh9msHqDZliaQdhCvJ5HmRaALrVA/640?wx_fmt=png\" />\n\n\n---\n\n## 📱第三部分：手机硬件组成\n\n> 为什么要整理这个呢？因为我感觉如果不知道我的数据存到哪里，我拿数据发数据是经过了那个硬件，我连接WiFi，蓝牙，啥的用的是什么，我就有点不是很稳的感觉\n\n---\n\n### 1.硬件结构\n\n**基础结构**\n\n智能手机的主电路板上安装的都是贴片元器件，排列十分紧密，并且电路板上的主要芯片都采用BGA形式焊接在电路板上。\n\n<img src=\"http://www.elecfans.com/uploads/allimg/180103/2755814-1P1031J241617.png\" />\n\n**电路结构**\n\n> 智能手机的电路是智能手机的核心，负责手机的供电、控制以及手机各种功能的实现。智能手机的电路主要包括：射频电路、语音电路、处理器及存储器电路、电源及充电电路、操作及屏显电路、接口电路，以及其他功能电路（如蓝牙、天线、收音、传感器、振动器、摄像头电路等）\n\n<img src=\"http://www.elecfans.com/uploads/allimg/180103/2755814-1P1031J3002U.png\" />\n\n---\n\n### 2.智能手机中的重要芯片\n\n**双处理器结构**\n\n<img src=\"http://www.elecfans.com/uploads/allimg/180103/2755814-1P1031J504304.png\" />\n\n双处理器结构智能手机主要包括：主处理器和从处理器\n\n- **主处理器（ApplicaTIonProcessor，应用处理器）**，运行开放式操作系统以及操作系统之上的各种应用，负责整个系统的控制\n- **从处理器（BasebandProcessor，基带处理器）**，负责基本无线通信，主要包括DBB（DigitalBaseband，数字基带芯片）和ABB（AnalogBaseband，模拟基带），完成语音信号和数字语音信号调制解调、信道编码解码和无线Modem控制\n\n备注：智能手机只是在传统手机的基本硬件结构中BP的部分增加一定的外围电路，如音频芯片、LCD控制、摄像机控制器、扬声器、天线等，就构成了一个完整的智能手机的硬件结构。\n\n---\n\n**单处理器结构**\n\n<img src=\"http://www.elecfans.com/uploads/allimg/180103/2755814-1P1031J51M12.png\" />\n\n单处理器智能手机只包括一个处理器，所谓的单处理器就是说智能手机的基本通信功能（通话、信息、GPRS等）和多媒体、应用软件的处理只用一个处理器来解决。这枚单处理器集成了数字基带、模拟基带、射频、电源管理、SRAM等功能\n\n---\n\n**中央处理器芯片**\n\n中央处理器（CenterProcessingUnit，CPU）芯片是智能手机的核心部件，手机中的微处理器类似计算机中的中央处理器，它是整台智能手机的控制中枢系统，也是逻辑部分的控制核心。微处理器通过运行存储器内的软件及调用存储器内的数据库，达到对手机整体监控的目的。凡是要处理的数据都要经过CPU来完成，手机各个部分的管理等都离不开微处理器这个司令部的统一、协调指挥。随着集成电路生产技术及工艺水平的不断提高，手机中微处理器的功能越来越强大，如在微处理器中集成先进的数字信号处理器（DSP）等。处理器的性能决定了整部手机的性能。目前智能手机处理器厂商主要有：德州仪器、Intel、高通、三星、Marvell、英伟达、华为等\n\n<img src=\"https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1568299815042&di=0df368955ea65f24a785f5a5aabdc3c9&imgtype=0&src=http%3A%2F%2Fimg.leikeji.com%2Fresource%2Fimg%2F1445a5fe0e964780b592b730e2500e5a.jpg\" />\n\n---\n\n**存储芯片（储存信息）**\n\n<img src=\"http://www.elecfans.com/uploads/allimg/180103/2755814-1P1031J625513.png\" />\n\n智能手机的存储器有多种：Flash存储器、RAM随机存储器、ROM只读存储器等，其中，手机存储器主要用来存储手机的主程序、字库、用户程序、用户数据等\n\n- RAM随机存储器主要用于存储智能手机运行时的程序和数据，需要执行的程序或者需要处理的数据都必须先装入RAM内。\n- ROM只读存储器是指只能从该设备中读取数据而不能往里面写数据的存储器。ROM中的数据是由手机制造商事先编好固化在里面的一些程序，使用者不能随意更改。ROM主要用于检查手机系统的配置情况，并提供最基本的输入输出（I/O）程序。\n- Flash存储器是一种长寿命的非易失性（在断电情况下仍能保持所存储的数据信息）存储器，数据删除不是以单个的字节为单位，而是以固定的区块为单位。由于Flash存储器断电时仍能保存数据，它通常被用来保存设置信息，如用户对手机的设置信息等\n\n\n---\n\n**射频芯片（负责调制和解调信号）**\n\n<img src=\"http://www.elecfans.com/uploads/allimg/180103/2755814-1P1031J530R4.png\" />\n\n在手机终端中，射频芯片负责射频收发、频率合成、功率放大；而基带芯片负责信号处理和协议处理。简单地说，射频芯片起到一个发射机和接收机的作用。有的射频芯片还为处理器芯片提供26MHz的系统时钟信号。\n\n---\n\n**放大器芯片（放大信号的射频功率）**\n\n<img src=\"http://www.elecfans.com/uploads/allimg/180103/2755814-1P1031J544237.png\" />\n\n智能手机中的射频功率放大器芯片的作用主要是对射频信号进行放大，使得有足够的功率发射给基站。射频功率放大器是智能手机中耗电量较大的元件之一，它内部主要集成了滤波器、放大器、匹配电路、功率检测、偏压控制等电路\n\n---\n\n**电源管理芯片（管理手机供电）**\n\n<img src=\"http://www.elecfans.com/uploads/allimg/180103/2755814-1P1031J610459.png\" />\n\n电源管理芯片（PowerManagemenTIntegratedCircuits）是在智能手机系统中承担对电能的变换、分配、检测及其他电能管理职责的芯片。同时，还可以对电池充电进行管理和控制\n\n---\n\n**音频处理器芯片（管理声音）**\n\n智能手机的音频处理器主要处理手机的声音信号，它主要负责接收和发射音频信号，是实现手机听见对方声音的关键元件。音频处理器对基带信号进行解码、D/A转换等处理后输出音频信号\n\n---\n\n## 📚参考列表（致敬）\n\n- [史上最全最详细手机发展史（绝对经典，收藏）](https://www.sohu.com/a/213599424_202311)\n- [移动开发的跨平台技术发展史 | 技术头条（CSDN）](https://blog.csdn.net/csdnnews/article/details/89629327)\n- [智能手机的硬件组成部分及结构图](http://www.elecfans.com/xinkeji/610458.html)\n\n"
  },
  {
    "path": "docs/blog/8.移动端/1.移动端H5页面适配.md",
    "content": "---\ntitle: 0.移动端开发绪论\ndate: 2020-01-30 00:00:00\npermalink: \ntag: \n - blog\n - 8.移动端\n---\n\n> 适配采用 rem 的方案\n\n## 🍇第一部分：rem代码 和 基础示例\n\n### rem.js\n\n```js\n!function(win, doc) {\n\tvar htmlDom = doc.getElementsByTagName(\"html\")[0];\n\tvar resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize';\n\tvar recalc = function() {\n\t\tvar htmlWidth = doc.documentElement.clientWidth || doc.body.clientWidth;\n\t\thtmlDom.style.fontSize = htmlWidth / 10 + 'px';\n\t}\n\n\tif (!doc.addEventListener) return;\n    win.addEventListener(resizeEvt, recalc, false);\n    doc.addEventListener('DOMContentLoaded', recalc, false);\n}(window, document);\n```\n\n---\n\n### html示例\n\n```html\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  <meta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\">\n  <title>Document</title>\n  <style>\n    * {\n      margin: 0;\n    }\n    /* 如果是以 320px 为标准的话，1rem = 32px */\n    /* 下面这个块，就会占一半宽度，然后放到到其他分辨率下，也都是占一半 */\n    .main {\n      width: 5rem;\n      height: 5rem;\n      background-color: pink;\n    }\n  </style>\n</head>\n<body>\n\n  <!-- 这个就能根据屏幕来进行rem配置 -->\n  <div class=\"main\"></div>\n  \n  <!-- 这个就是上面那个 js 代码 -->\n  <script src=\"./index.js\"></script>\n</body>\n</html>\n```\n\n---\n\n## 🍓第二部分：rem用的不舒服的地方，和解决方法\n\n> 感觉用的最不舒服的，就是需要计算rem的值，这点非常的不舒服，但是经过我不断的采坑，发现有两个好好用的东西，分享给大家\n\n### vscode 插件\n\n- 插件名称叫：cssrem，是一个在书写代码的时候，将px转为rem的工具，我用了一段时间，感觉还好（虽然后期有更好的方案了）\n\n<img src=\"https://raw.githubusercontent.com/cipchk/vscode-cssrem/master/screenshots/cssrem.gif\" />\n\n---\n\n### webpack postcss 插件 high-pxtorem【🔥 推荐】\n\n这个可以在webpack编译的时候，将 px 转为 rem，我可以像写普通代码一样，不用太关心适配问题了。\n\n我现在在用这个，但是需要你有一定的 webpack 基础才行，但是用起来就没事了，要是没有一定的基础，可能都配置不起来\n\n[high-pxtorem npm地址](https://www.npmjs.com/package/high-pxtorem)\n"
  },
  {
    "path": "docs/blog/8.移动端/2.移动端H5手机内调试.md",
    "content": "---\ntitle: 2.移动端H5手机内调试\ndate: 2020-01-30 00:00:00\npermalink: \ntag: \n - blog\n - 8.移动端\n---\n\n> 移动端H5手机内调试 神器：vconsole\n\n## 🥞第一部分：vconsole使用\n\n### 基本使用\n\n```html\n<!-- CDN引入 -->\n<script src=\"https://wechatfe.github.io/vconsole/lib/vconsole.min.js?v=3.2.0\"></script>\n<script>\n    new VConsole();\n</script>\n```\n\n- [vcondole npm 地址](https://www.npmjs.com/package/vconsole)\n\n**功能：**\n\n- 查看 console 日志\n- 查看网络请求\n- 查看页面 element 结构\n- 查看 Cookies、localStorage 和 SessionStorage\n- 手动执行 JS 命令行\n- 自定义插件\n\n---\n\n### 效果展示（点击 右下角 绿色按钮 👀）\n\n<iframe width=\"500px\" height=\"500px\" src=\"http://wechatfe.github.io/vconsole/demo.html\">\n\n</iframe>\n\n---"
  },
  {
    "path": "docs/blog/8.移动端/3.Flutter.md",
    "content": "---\ntitle: 3.Flutter\ndate: 2020-01-30 00:00:00\npermalink: \ntag: \n - blog\n - 8.移动端\n---\n\n> 等待书写中..."
  },
  {
    "path": "docs/blog/8.移动端/4.React-Native.md",
    "content": "---\ntitle: 4.React-Native\ndate: 2020-01-30 00:00:00\npermalink: \ntag: \n - blog\n - 8.移动端\n---\n\n> 等待书写中..."
  },
  {
    "path": "docs/blog/8.移动端/5.移动端原生开发/5.移动端原生开发.md",
    "content": "---\ntitle: 5.移动端原生开发\ndate: 2020-01-30 00:00:00\npermalink: \ntag: \n - blog\n - 8.移动端\n---\n\n## 第一章：Android系统简介和环境搭建\n\n环境搭建是真的难...，我这里用的是 android Studio Mac 版本\n\n---\n\n## 第二章：Android基础UI使用\n\n> 布局管理器之间的继承关系：布局管理器都是以ViewGroup（视图组，这个是通过View继承来的）为基类派生出来的，使用布局管理器可以适配不同手机屏幕的分辨率，尺寸大小\n\n---\n\n### 🔥 第一节：Android布局（线性布局）\n\n> 线性布局（LinearLayout）：按照垂直或者水平方向布局的组件\n\n通过 android:orientation 属性设置线性布局方向\n\n通用属性（每个控件都要设置的）\n\n- android:layout_width=\"wrap_content\"  当前组件的宽度\n    - 值：wrap_content：包裹内容\n    - 值：match_parent：匹配父控件\n- android:layout_height=\"wrap_content\" 当前组件的高度\n    - 值：wrap_content：包裹内容\n    - 值：match_parent：匹配父控件\n- android:orientation 设置布局方向\n    - horizontal：按照水平方向摆放\n    - vertical：垂直摆放\n- android:gravity 用来控制组件的对齐方式\n- android:layout_gravity 设置的是本身的对齐方式\n- layout_weight 控制各个组件在布局中的相对大小\n- android:padding：内边距\n    - android:paddingTop=\"50dp\" ：内边距（顶部）\n    - ...\n    - android：padding=\"\" ：内边距（四个方向，和css类似）\n- android:layout_margin：外边距\n    - android:layout_marginTop=\"50dp\"：外边距（顶部）\n    - ...\n    - android:layout_margin（四个方向）\n\n---\n\n非通用布局\n\n- android:gravity：控制容器内子控件的方向\n    - 值：left,right,top,bottom\n    - top|right（两个属性一起加，右上）\n    - center(垂直水平居中)，center_horizontal（水平居中），center_vertical（垂直居中）\n- android:layout_gravity：设置本身的方向（常用在子组件中，取值方向和android:gravity一样）\n- 权重布局：等分，类似于css栅格布局（值越大，占用的空间越大）\n    - android:layout_weight=\"1\"\n    - android:layout_height=\"1\"\n\n---\n\n常用单位\n\n- 设置长宽的时候，dp（dip）\n- 使用字体的时候，使用sp\n- in：表示英寸（屏幕物理尺寸）\n- mm：表示毫米（屏幕物理尺寸）\n- pt：表示一个点（屏幕物理尺寸）\n\n---\n\n```xml\n<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:orientation=\"vertical\"\n    android:gravity=\"center_vertical\"\n    >\n\n    <TextView\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_gravity=\"center\"\n        android:layout_weight=\"1\"\n        android:text=\"这是我的第一个text\" />\n\n    <TextView\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_weight=\"1\"\n        android:text=\"这是我的第二个text\" />\n\n</LinearLayout>\n```\n\n<img src=\"./img/1.png\" />\n\n---\n\n### 🔥 第二节：Android布局（相对布局）\n\n> 相对布局（RelativeLayout）：相对其他\n\n---\n\n### 🔥 第三节：Android布局（帧布局）\n\n> 帧布局（FrameLayout）：组件从屏幕左上方布局组件\n\n---\n\n### 第四节：Android布局（绝对布局）\n\n> 绝对布局（AbsoluteLayout）：按照绝对坐标来布局组件\n\n---\n\n\n### 第五节：Android布局（表格布局）\n\n> 表格布局（TableLayout）：按照行列方式布局组件\n\n---\n\n### 第六节：TextView（）\n\n---\n\n### 第七节：EditText（可编辑的文本框）\n\n```xml\n<!--\n    android:hint：提示性文本\n    android:inputType：类型（text 文本, textPassword 密码，number 数字 ......）\n -->\n<EditText\n    android:id=\"@+id/editText\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:hint=\"请输入内容\"\n    android:inputType=\"number\"\n    android:textSize=\"20sp\"\n    android:textColor=\"#f00\"\n    android:textStyle=\"bold\" />\n```\n\n---\n\n### 第八节：Button（按钮）\n\n\n\n---\n\n### 第九节：ImageView（图片组件）\n\n---\n\n### 第十节：spinner组件（下拉列表）\n\n---\n### 第十一节：RadioButton（单选按钮）\n\n\n\n---\n\n### 第十二节：checkBox（多选按钮）\n\n<img src=\"./img/3.png\" />\n\n```xml\n<!-- android:checked=\"true\" -->\n<CheckBox\n    android:id=\"@+id/checkBox_Apple\"\n    android:layout_width=\"wrap_content\"\n    android:layout_height=\"wrap_content\"\n    android:onClick=\"choose\"\n    android:text=\"苹果\" />\n\n<CheckBox\n    android:id=\"@+id/checkBox_Apple\"\n    android:layout_width=\"wrap_content\"\n    android:layout_height=\"wrap_content\"\n    android:onClick=\"choose\"\n    android:text=\"葡萄\" />\n\n<CheckBox\n    android:id=\"@+id/checkBox_Apple\"\n    android:layout_width=\"wrap_content\"\n    android:layout_height=\"wrap_content\"\n    android:onClick=\"choose\"\n    android:text=\"梨\" />\n\n<TextView\n    android:id=\"@+id/textViewResult\"\n    android:layout_width=\"wrap_content\"\n    android:layout_height=\"wrap_content\" />\n```\n\n---\n\n### 第十三节：ListView和适配器使用（列表）\n\n\n\n---\n\n```java\npublic class MainActivity extends AppCompatActivity {\n\n    private TextView textViewResult;\n    // 主要存放结果的集合\n    private List<String> lists = new ArrayList<String>();\n\n    @Override\n    protected void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        setContentView(R.layout.activity_main);\n        textViewResult = (TextView)findViewById(R.id.textViewResult);\n    }\n\n    // 通过点击事件进行监听\n    public void choose(View view) {\n        // 得到View对象 ---> Checkbox\n        CheckBox checkBox = (CheckBox) view;\n        // 获取checkBox状态\n        boolean isChecked = checkBox.isChecked();\n        // 将这个结果添加到集合中\n        if (isChecked) {\n            lists.add(checkBox.getText().toString()); // 选中\n        } else {\n            lists.remove(checkBox.getText().toString()); // 没有选中\n        }\n\n        // 展示结果\n        textViewResult.setText(\"选中的内容是：\" + lists.toString());\n    }\n\n}\n\n```\n\n---\n\n### 第十四节：GridView（网格视图）\n\n---\n\n## 第三章：Activity的生命周期和传值\n\n---\n\n### 第一节：Activity介绍\n\n- 方式一 自动创建 ：在src/main/java/com.example.xxx/ 下面右键 activity 创建\n- 方式二 手动创建：\n\n```java\n// 跳转页面（OtherActivity是我们新创建的 activity）\npublic void openNewActivity(View view) {\n    // 两个页面之间的跳转（参数一：上下文环境，参数二：目标）\n    Intent intent = new Intent(this, OtherActivity.class);\n    startActivity(intent);\n}\n```\n\n\n---\n\n## 第四章：异步任务AsyncTask的应用\n\n---\n\n## 第五章：Android数据存储\n\n> 如果你不想手机关机之后数据就没有了，那么你将需要数据存储（）\n\n---\n\n### 第一节：SharedPreferences存储数据\n\n---\n\n### 第二节：内部存储\n\n---\n\n### 第三节：外部存储\n\n---\n\n### 第四节：数据库存储\n\n> SQLite数据库存储（轻量级嵌入式关系数据库，Android已经继承了这个库）\n\n<img style=\"width: 200px;\" src=\"./img/2.png\" />\n\n```xml\n<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:orientation=\"vertical\"\n    tools:context=\".MainActivity\">\n\n    <Button\n        android:layout_width=\"100dp\"\n        android:layout_height=\"100dp\"\n        android:onClick=\"createDb\"\n        android:text=\"创建数据库\" />\n\n    <Button\n        android:id=\"@+id/buttonInsert\"\n        android:layout_width=\"100dp\"\n        android:layout_height=\"100dp\"\n        android:onClick=\"insertData\"\n        android:text=\"添加数据\" />\n\n    <Button\n        android:id=\"@+id/buttonUpadte\"\n        android:layout_width=\"100dp\"\n        android:layout_height=\"100dp\"\n        android:onClick=\"updateData\"\n        android:text=\"更新数据\" />\n\n    <Button\n        android:id=\"@+id/buttonDelete\"\n        android:layout_width=\"100dp\"\n        android:layout_height=\"100dp\"\n        android:onClick=\"deleteData\"\n        android:text=\"删除方法\" />\n\n    <Button\n        android:id=\"@+id/buttonQuery\"\n        android:layout_width=\"100dp\"\n        android:layout_height=\"100dp\"\n        android:onClick=\"queryData\"\n        android:text=\"查询数据\" />\n</LinearLayout>\n```\n\n---\n\nMainActivity\n\n```java\npackage com.example.myapplication;\n\nimport androidx.appcompat.app.AppCompatActivity;\n\nimport android.content.ContentValues;\nimport android.database.Cursor;\nimport android.database.sqlite.SQLiteDatabase;\nimport android.os.Bundle;\nimport android.util.Log;\nimport android.view.View;\nimport android.widget.Toast;\n\nimport java.security.Key;\n\npublic class MainActivity extends AppCompatActivity {\n\n    private MyOpenHelper helper;\n\n    @Override\n    protected void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        setContentView(R.layout.activity_main);\n        helper = new MyOpenHelper(this);\n    }\n\n    // 创建数据库\n    public void createDb(View view) {\n        SQLiteDatabase db = helper.getReadableDatabase();\n        Log.i(\"aaa\", \"点击按键创建数据库\");\n    }\n\n    // 向表中添加数据\n    public void insertData(View view) {\n        Log.i(\"aaa\", \"点击按键创建数据库\");\n\n        SQLiteDatabase db = helper.getWritableDatabase();\n\n        // 第一种方法：sql语句\n         String sql = \"insert into employee values(123, '朱昆鹏', 23, '男')\";\n         db.execSQL(sql);\n\n        // 第二种方法：\n        // ContentValues values = new ContentValues();\n        // values.put(\"'_id'\", 21);\n        // values.put(\"name\", \"朱昆鹏\");\n        // values.put(\"age\", 23);\n        // values.put(\"gender\", \"男\");\n        // db.insert(\"employee\", null, values);\n\n        Toast.makeText(this, \"添加数据完成\", Toast.LENGTH_LONG).show();\n    }\n\n    // 更新数据\n    public void updateData(View view) {\n        SQLiteDatabase db = helper.getWritableDatabase();\n\n        // 第一种方法：sql语句\n        // String sql = \"update employee set age=30 where _id=1\";\n        // db.execSQL(sql);\n\n        // 第二种方法：\n        ContentValues values = new ContentValues();\n        values.put(\"age\", 30);\n        int row = db.update(\"employee\", values, \"name=?\", new String[]{\"朱昆鹏\"});\n        Toast.makeText(this, \"更新数据完成--->\" + row, Toast.LENGTH_LONG).show();\n    }\n\n    // 删除数据\n    public void deleteData(View view) {\n        SQLiteDatabase db = helper.getWritableDatabase();\n\n        // 第一种方法：sql语句\n        // String sql = \"delete from employee where name='朱昆鹏'\";\n        // db.execSQL(sql);\n\n        // 第二种方法\n        int row = db.delete(\"employee\", \"name=?\", new String[]{\"朱昆鹏\"});\n\n        Toast.makeText(this, \"删除数据完成--->\" + row, Toast.LENGTH_LONG).show();\n    }\n\n    // 查询方法\n    public void queryData(View view) {\n        SQLiteDatabase db = helper.getReadableDatabase();\n\n        // 参数：表明，列名，...\n        Cursor c = db.query(\"employee\", null, null, null, null, null, null);\n\n        // 遍历Cursor\n        while (c.moveToNext()) {\n            int index = c.getColumnIndex(\"name\");\n            String name = c.getString(index);\n\n            int age = c.getInt(c.getColumnIndex(\"age\")); // 获取年龄\n            String gender = c.getString(c.getColumnIndex(\"gender\")); // 获取性别\n\n            Log.i(\"aaa\", \"===>\" + name + \"--\" + age + \"--\" + gender);\n        }\n\n    }\n}\n```\n\n---\n\nMyOpenHelper\n\n```java\npackage com.example.myapplication;\n\nimport android.content.Context;\nimport android.database.sqlite.SQLiteDatabase;\nimport android.database.sqlite.SQLiteOpenHelper;\nimport android.util.Log;\n\nimport androidx.annotation.Nullable;\n\npublic class MyOpenHelper extends SQLiteOpenHelper {\n    private final static String TEST = \"company\";\n    private final static int VERSION = 1;\n\n    /**\n     * 添加构造方法\n     *\n     * @param context 上下文环境\n     * @param name    数据库名称\n     * @param factory 游标工厂\n     * @param version 数据库版本\n     *\n     */\n    public MyOpenHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {\n        super(context, name, factory, version);\n    }\n\n    public MyOpenHelper(Context context) {\n        super(context, TEST, null, VERSION);\n    }\n\n    @Override\n    public void onCreate(SQLiteDatabase db) {\n        // 创建表（id，名字，年龄，性别）\n        String sql = \"create table employee(_id primary key, name varchar(20), age init, gender char(2))\";\n        db.execSQL(sql);\n        Log.i(\"aaa\", \"=============> 创建表成功\");\n    }\n\n    @Override\n    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {\n        if (newVersion > oldVersion) {\n            Log.i(\"aaa\",\"数据库版本发生更新\");\n        }\n    }\n}\n```\n\n\n---\n\n## 第六章：Android 对话框Dialog，菜单Menu，通知Notification\n\n---\n\n## 第七章：Fragment碎片在开发中使用\n\n---\n\n## 第八章：ViewPager介绍和使用\n\n---\n\n## 第九章：Android广播接收器\n\n### 第一节：什么是广播\n\n> 广播是一种在不同应用程序之间传输信息的机制\n\n---\n\n### 第二节：接收广播\n\n---\n\n### 第三节：发送广播\n\n---\n\n## 第十章：Android中Service（服务）\n\n\n\n\n"
  },
  {
    "path": "docs/blog/8.移动端/6.Weex.md",
    "content": "---\ntitle: 6.Weex\ndate: 2020-01-30 00:00:00\npermalink: \ntag: \n - blog\n - 8.移动端\n---\n\n## 第一部分：\n\n### 1.weex环境搭建\n\n1.安装Node\n2.npm install -g weex-toolkit\n3.weex init 项目名称\n\n---\n\n### 2.\n\n---\n\n## 第二部分：weex内建组件\n\n### 1.a组件\n\n> weex中a组件定义了指向weex页面打包后的一个JS地址\n\n> a组件中无法添加文本，需要在其中加上test组件才能添加文本\n\n> a组件支持除了自己外的所有weex组件作为子组件\n\n> a组件支持所有通用样式\n\n> 请不要为a组件添加click事件\n\n---\n\n### 2.web组件\n\n> web组件用于在页面中嵌入一张页面，src用以指定资源地址\n\n> 不支持任何子组件\n\n> pagestart web组件开始加载时执行\n> pagefinsh web组件完成加载时执行\n> error web组件加载错误时执行\n\n---\n\n### 3.webview组件\n\n> 一系列web组件的操作接口，可以通过调用this.$refs.el 来获取元素的引用\n\n> goBack(webElement) 加载历史记录里的前一个资源地址\n> goForward(webElement) 加载历史记录里的下一个资源地址\n> reload(webElement) 刷新当前页面\n\n---\n\n### 4.list组件\n\n> list组件是垂直列表功能的核心组件\n\n> cell组件 列表中的子项，类似于HTML中的ul和li的关系\n\n> refresh组件 给列表添加下拉刷新的功能\n\n> loadmore事件 loadmoreoffset{number} 触发事件所需距离\n\n\n---\n\n## 第三部分：\n\n---\n\n## 第四部分：自己写的一些组件\n\n### 1.iOS滑动删除组件（方案）\n\n> 这里原来打算抽离成组件的，但是发现不好拓展，因为每个人要求滑动的情况可能不同，所以这里抽离成方案更为合适\n\n```html\n<div class=\"row\" v-for=\"(item, index) in data\" :key=\"index\">\n  <div style=\"flex-direction: row;\" ref=\"itemDev\" @swipe=\"handleSwipe($event, index)\" @click=\"itemClickEvent(item)\">\n      \n    <!-- 书写内容 -->\n\n    <!-- 删除 -->\n    <div class=\"delete-sideslip\" @click=\"removeItem(index, item)\">\n      <text class=\"delete-sideslip_text\">删除</text>\n    </div>\n  </div>\n</div>\n```\n\n```js\nconst animation = weex.requireModule('animation');\n\nexport default {\n  data() {\n    return {\n      currentIndex: -1, //记录当前左滑出来的条目下标\n    }\n  },\n  methods: {\n    handleSwipe (e, index) {\n      e.direction == \"left\" \n        ? this.goLeft(index)\n        : this.goRight(index);\n    },\n    goLeft(index) {\n        let itemEl = this.$refs.itemDev[index];\n        //第二左滑条目与前一次左滑条目相同时，不处理\n        if (index == this.currentIndex){\n            return;\n        }\n\n        //当前有划出的条目的时候，左滑其他条目，当前的条目归位，\n        if (this.currentIndex != -1){\n            this.goRight(this.currentIndex);\n        }\n\n        //左滑当前条目\n        if (this.currentIndex != index){\n            animation.transition(itemEl,{\n                styles: {\n                    transform: 'translate(-160px, 0px)',\n                    transformOrigin: 'center center'\n                },\n                duration: 200, //ms\n                timingFunction: 'linear',\n                delay: 0 //ms\n            },function () {});\n            this.currentIndex = index;\n        }\n    },\n    //time是动画时间，给个默认值 200毫秒，不传就表明这个值为200毫秒\n    goRight(index,time = 200) {\n        let itemEl = this.$refs.itemDev[index];\n        animation.transition(itemEl,{\n            styles: {\n                transform: 'translate(0px, 0px)',\n                transformOrigin: 'center center'\n            },\n            duration: time, //动画时间\n            timingFunction: 'linear',//线性运动\n            delay: 0 //ms\n        },function () {});\n        this.currentIndex = -1;\n    },\n    //点击删除\n    removeItem(index, item) {\n        this.goRight(index, 0);\n    }\n  }\n}\n```\n\n```css\n/* 删除样式 */\n.delete-sideslip {\n  margin-left: 30px;\n  background-color: #ff0000;\n  width: 160px;\n  justify-content: center;\n  align-items: center\n}\n.delete-sideslip_text{\n  font-size: 30px;\n  color:#ffffff\n}\n```"
  },
  {
    "path": "docs/blog/8.移动端/7.微信小程序.md",
    "content": "---\ntitle: 7.微信小程序\ndate: 2020-01-30 00:00:00\npermalink: \ntag: \n - blog\n - 8.移动端\n---\n\n> 微信小程序这个东西怎么说呢，编译器贼难用，也就比记事本好用点\n\n> 技术含量很低，你说学这个有什么用？一个是公司可能有这方面的业务\n\n> 还有就是可以接一点私活，一般小程序工作的情况下 一个星期也可以搞定，赚点外快\n\n> 但是切记不要以这个为主，以为这个技术必将被淘汰（或者被新的事物替代）...\n\n## 🐇第一部分：微信小程序核心理念，以及基础开发介绍\n\n**这块不好写了，因为小程序我会用一点了，所以再来写这里有些麻烦，所以干脆先不写了吧**\n\n---\n\n## 🐳第二部分：WXML\n\n**WXML用法上和HTML一样，就是标签（小程序里面是叫组件）名称不一样**\n\n### 1.WXML基础\n\n- WXML 全称 WeiXin Markup Language，是小程序设计的一套标签语言（虽然用法和HTML相似，但是不是HTML）\n- 首先要明确一点，在小程序中书写 标签（或者叫组件），为什么能展示出来，是因为微信的渲染引擎和脚本引擎，经过一系列复杂的过程，最后呈现出来\n\n```html\n\n<!-- 小程序中没有div标签 -->\n<view></view>\n\n<!-- 小程序中没有p标签 -->\n<text></text>\n\n<!-- 小程序中没有 img标签 -->\n<image></image>\n\n<!-- ...... -->\n\n```\n\n---\n\n### 2.组件共同属性\n\n- id 组件标识，页面唯一\n- class 类名\n- style 内联样式\n- hidden 是否隐藏\n- data-* 自定义属性\n- bind*/catch* 绑定事件\n\n[更多...微信组件官方文档](https://developers.weixin.qq.com/miniprogram/dev/component/)\n\n---\n\n### 3.WXML数据绑定\n\n**类似于Vue的 {{}}**\n\n```html\n<!-- index.wxml 页面（不是组件哦） -->\n<block>\n\n  <!-- 基础绑定 -->\n  <text>{{name}}</text>\n  <text class=\"{{className}}\"></text>\n\n  <!-- 基础运算 -->\n  <text>{{ name === '朱昆鹏' ?  '三目运算测试成功' : '三目运算测试失败'}}</text>\n  <text>{{ name + '，你好'}}</text>\n\n  <!-- wx:if -->\n  <view wx:if=\"{{ name === '朱昆鹏' }}\">\n    <text>名称是 朱昆鹏</text>\n  </view>\n  <view wx:elif=\" name === '路人甲' \">\n    <text>名称是 路人甲</text>\n  </view>\n  <view wx:else>\n    <text>名称是 其他人</text>\n  </view>\n\n  <!-- wx:for, 下面那个block组件 就是为了for循环防止创建没用的组件 -->\n  <block wx:for=\"{{ [1,2,3] }}\"\n        wx:for-index=\"index\"\n        wx:for-item=\"item\"\n        wx:key=\"index\">\n    {{index}} {{item}}\n  </block>\n\n</view>\n```\n\n```js\n// index.js 页面的JS（不是组件的哦）\n\nPage({\n\n  // {{}} 里面解析的就是data里面的，但是这里没有像Vue一样返回一个新的对象，估计有自己的处理方式\n  data: {\n    name: '朱昆鹏',\n    className: 'test'\n  }\n\n})\n```\n\n---\n\n### 4.wx:if 和 hidden属性的差异\n\n- wx:if 的渲染是惰性的，只有值是 true 的时候，微信引擎才会对里面的内容进行渲染\n  - 渲染过程：切换 false 和 true 的时候，都会重新渲染\n  - 适合比较稳定，不频繁切换的场景\n- hidden属性，不管是 false还是 true，第一次的时候都会被引擎加载，存在我们的页面中\n  - 渲染过程：由始至终只对组件渲染一次，即使切换隐藏和显示，组件其实不会销毁和创建\n  - hidden初始化消耗资源多，适合频繁切换的场景\n\n---\n\n### 5.微信小程序 事件系统\n\n- **注意：小程序的事件系统，可以设置是冒泡，还是捕获**\n  - 冒泡：bind，例如 bind:tap（或者 bindtap）\n  - 捕获：capture，例如 capture:tap（或者capturetap）\n\n\n```html\n<!-- index.wxml 页面 -->\n<button data-name=\"朱昆鹏\" 222=\"clickFun\">按钮<button>\n\n```\n\n```js\n\n// index.js 页面的JS\n\nPage({\n\n  data: {\n\n  },\n\n  onLoad: function () {\n\n  },\n\n  clickFun: function (e) {\n    // 事件对象，常用的属性\n    \n    // e.target 用户触发的组件\n    // e.target.dataset 组件上绑定的自定义数据 | 例如 e.target.dataset { name: 朱昆鹏 }\n\n    // e.currentTarget 经过冒泡 响应的组件\n    // e.currentTarget.dataset 和上面的一样\n\n  }\n\n})\n\n```\n\n- **常用事件分类**\n  - tap 手指触摸后马上离开（就是点击）\n  - touchstart 手指触摸动作开始（就是点击开始）\n  - touchend 手指触摸动作结束（就是点击结束）\n  - touchmove 手指触摸后移动（就是拖拽）\n  - [更多请看...官方文档](https://developers.weixin.qq.com/miniprogram/dev/framework/view/wxml/event.html)\n---\n\n\n---\n\n### 6.WXS\n\n**为什么要有WXS**\n\n- 小程序刚开始内测的时候是没有WXS，后来人们在使用过程中，发现了一个问题，就是优势互，数据和展示效果之间，可能要经过一些比较复杂的逻辑处理\n  - 例如：数据是 1566739136513 一个时间戳，展示层要的效果是 2019-8-25 21点19分，这种的，小程序原有的 {{}} 写很多逻辑也不好，所以就有了WXS的出现\n  - 备注：这个解决的问题，就相当于 Vue 中的计算属性\n\n---\n\n**WXS的使用（主要有三种,此处的使用，还需要举例）**\n\n```js\n\n// 1.写到WXML页面中\n\n\n// 2.写成独立的WXML文件\n\n\n// 3.写成WXS文件\n\n// src属性引用\n<wxs src=\"WXS文件相对路径\" module=\"名称\"></wxs>\n\n// require函数引用\n<wxs module=\"名称\">\n  let 名称 = reuquire('WXS文件相对路径')\n  module.export.data = 名称.data\n</wxs>\n\n```\n\n---\n\n\n### 4.WXML实现原理解析\n\n\n\n---\n\n## 🐠第三部分：WXSS\n\n### 1.WXSS基础\n\n- **小程序的视图层是由 WXML 和 WXSS 进行编写，由微信框架组件进行展示**\n- WXSS 不是 CSS哦，WXSS是微信定义的一套，修饰微信框架组件样式的规则\n\n---\n\n**小程序尺寸单位**\n\n- rpx（responsive pixel）: 可以根据屏幕宽度进行自适应。规定屏幕宽为750rpx。如在 iPhone6 上，屏幕宽度为375px，共有750个物理像素，则750rpx = 375px = 750物理像素，1rpx = 0.5px = 1物理像素。\n- 微信以iPhone6为依据，指定了rpx规则，其他和iPhone6手机大小不一致的，通够rpx进行转化，就能呈现出一样的效果了 \n\n**拓展知识**\n\n- 物理像素：Pixel\n- 逻辑像素：PT/DP\n- 像素密度：PPI\n- 逻辑像素比：DPR\n\n---\n\n**微信小程序内联样式**\n\n- 微信小程序中不能通过link来引入外部样式，只有 style内部样式 和 class类名，优先级和CSS一样\n- important > style > #id > class\n\n---\n\n### 2.WXSS样式导入 和 选择器\n\n**样式导入：使用@import语句可以导入外联样式表，@import后跟需要导入的外联样式表的相对路径，用;表示语句结束**\n\n```css\n@import \"./css/common.wxss\";\n```\n\n**微信小程序支持从CSS1 - CSS3的部分选择器**\n\n---\n\n### 3.全局样式和局部样式\n\n- 小程序有全局样式和局部样式概念\n\n```css\n\n/* app.wxss 里面的代码作用全局，就是名称一样的话，会覆盖页面级wxss */\n\n/* test.wxss 页面中的wxss，只作用于对应的页面 */\n\n```\n\n**❣️：WXSS无法加载本地文件（也就是如果要设置背景图的话，别用WXSS来设置本地的，要用网络上的，或者用内联样式）**\n\n---\n\n### 4.微信小程序布局（Flex）\n\n**就是对于布局来说，WXSS完美支持Flex方案，建议好好学下，也不难，最核心的是下面这张图，要明白它的轴线，和交叉轴线的概念，其他的就是用了**\n\n<img src=\"http://www.ruanyifeng.com/blogimg/asset/2015/bg2015071004.png\" />\n\n- 备注：[阮一峰Flex详细 链接](http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html?utm_source=tuicool)\n\n---\n\n### 5.WXSS原理分析\n\n---\n\n## 🔥第四部分：微信小程序基础组件\n\n### 0.微信小程序组件绪论\n\n- 微信的组件才是最重要的，因为我们所看到的视图，都是微信组件搭建的\n- [更多...微信组件官方文档](https://developers.weixin.qq.com/miniprogram/dev/component/)\n\n---\n\n**使用组件**\n\n```html\n```\n\n\n---\n\n### 1.视图容器\n\n```html\n\n<!-- view：和div用法相似，没啥可说的 -->\n<view></view>\n\n\n<!-- swiper && swiper-item：滑块视图容器（就跟轮播图一样），有一些属性可以进行配置，例如下面的小点点啥的 -->\n<swiper>\n  <swiper-item>滑动项一</swiper-item>\n  <swiper-item>滑动项二</swiper-item>\n  <swiper-item>滑动项三</swiper-item>\n</swiper>\n\n\n<!-- scroll-view 可滚动视图区域。使用竖向滚动时，需要给scroll-view一个固定高度，通过 WXSS 设置 height。组件属性的长度单位默认为px，2.4.0起支持传入单位(rpx/px)。 -->\n<scroll-view scroll-y style=\"height:200px;\">\n  <view style=\"height:100px;\">1</view>\n  <view style=\"height:100px;\">2</view>\n  <view style=\"height:100px;\">3</view>\n</scroll-view>\n\n\n<!-- cover-view && cover-image 覆盖在原生组件之上的 原生组件，解决原生组件层级最高的问题 -->\n<video>\n  <!-- 覆盖在原生组件之上的文本视图 -->\n  <cover-view>\n    <!-- 覆盖在原生组件之上的图片视图。可覆盖的原生组件同cover-view，支持嵌套在cover-view里 -->\n    <cover-image></cover-image>\n  </cover-view>\n</video>\n\n\n<!-- movable-area && movable-view -->\n<!-- movable-view的可移动区域 -->\n<movable-area style=\"height: 200px; width: 200px; background: red;\">\n  <!-- 可移动的视图容器，在页面中可以拖拽滑动。movable-view必须在 movable-area 组件中，并且必须是直接子节点，否则不能移动 -->\n  <movable-view direction=\"all\" style=\"height: 50px; width: 50px; background: blue;\"></movable-view>\n</movable-area>\n\n```\n\n---\n\n### 2.基础内容\n\n```html\n\n<!-- text：和p标签相似，没啥可说的 -->\n<text></text>\n\n<!-- icon：图标。组件属性的长度单位默认为px，2.4.0起支持传入单位(rpx/px) -->\n<icon type=\"success\"></icon>\n\n<!-- progress：进度条 -->\n<progress percent=\"80\" active />\n\n<!-- rich-text：富文本？ -->\n\n```\n\n---\n\n### 3.表单组件\n\n```html\n\n<!-- button：按钮，不用多说 -->\n<button></button>\n\n<!-- input：输入框 该组件是原生组件，使用时请注意相关限制 -->\n<input placeholder=\"这是一个可以自动聚焦的input\" auto-focus/>\n\n<!-- textarea：多行输入框 该组件是原生组件，使用时请注意相关限制 -->\n\n<!-- radio：单选项目（单选框） -->\n\n<!-- checkbox：多选项目（就是复选框） -->\n\n<!-- switch：开关选择器（手机上常用的开关的形状） -->\n\n<!-- 更多请看文档... -->\n\n```\n\n---\n\n### 4.导航\n\n```html\n\n<!-- navigator：页面链接 -->\n<navigator url=\"/pages/classic/classic\">跳转到新页面</navigator>\n\n<!-- functional-page-navigator：仅在插件中有效，用于跳转到插件功能页 -->\n\n```\n\n---\n\n### 5.媒体组件\n\n```html\n\n<!-- image：图片组件，微信的这个组件封装了一些属性，让我们很方便的进行设置 -->\n<image></image>\n\n<!-- video：相关api：wx.createVideoContext -->\n<video src=\"地址\"></video>\n\n\n<!-- camera：系统相机。扫码二维码功能，需升级微信客户端至6.7.3。需要用户授权 scope.camera。 -->\n\n<!-- live-pusher：实时音视频录制 -->\n\n<!-- live-player：实时音视频播放 -->\n\n<!-- audio: 音频 1.6.0版本开始，该组件不再维护。建议使用能力更强的 wx.createInnerAudioContext 接口 -->\n\n```\n\n---\n\n### 6.地图\n\n**地图。相关api [wx.createMapContext](https://developers.weixin.qq.com/miniprogram/dev/api/media/map/wx.createMapContext.html)**\n\n---\n\n### 7.画布\n\n**画布。相关api：[wx.createCanvasContext](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/wx.createCanvasContext.html)**\n\n---\n\n### 8.原生组件 和 非原生组件\n\n- 微信小程序，根据渲染类型不同可以分为两种\n  - 基于WebView渲染的（基于浏览器渲染引擎渲染），我们称之为 **非原生组件**\n  - 基于微信客户端渲染的，我们称之为 **原生组件**\n\n- 非原生组件有\n  - view\n  - image\n  - text\n  - button\n  - scroll-view\n  - ...\n- 原生组件有\n  - camera\n  - canvas\n  - input（仅在focus时表现为原生组件）\n  - live-player\n  - live-pusher\n  - map\n  - textarea\n  - video\n\n---\n\n**🔥 cover-view && cover-image 解决原生组件层级问题**\n\n- 原生组件遇到最常见的问题，就是，无法在原生组件上添加东西，例如无法在地图map上添加东西，因为层级map一直是最高的\n- 所以有了 cover-view 和 cover-image 来解决这个问题，这两个是原生组件，用来解决 原生组件层级最高的限制\n\n---\n\n**原生组件渲染流程**\n\n- 先由WebView渲染一个占位元素（一个黑色的区域）\n- 再调用微信客户端，跨线程通信，在刚刚的占位元素上，生成对应的原生组件（注意这里黑色的占位元素还未消失哦）\n\n---\n\n**原生组件和非原生组件的差异**\n\n原生组件脱离在 WebView 渲染流程，会有一些问题，**原因是，跨线程的渲染机制，使我们组件之间数据，无法及时进行同步**\n\n- 原生组件的层级是最高的，所以页面中的其他组件无论设置 z-index 为多少，都无法盖在原生组件上\n  - 后插入的原生组件可以覆盖之前的原生组件\n- 原生组件还无法在 picker-view 中使用\n  - 基础库 2.4.4 以下版本，原生组件不支持在 scroll-view、swiper、movable-view 中使用\n  - 可以以后也可以在 picker-view 中使用了\n- 部分CSS样式无法应用于原生组件\n  - 无法对原生组件设置 CSS 动画\n  - 无法定义原生组件为 position: fixed\n  - 不能在父级节点使用 overflow: hidden 来裁剪原生组件的显示区域\n- 原生组件的事件监听不能使用 bind:eventname 的写法，只支持 bindeventname。原生组件也不支持 catch 和 capture 的事件绑定方式\n- 原生组件会遮挡 vConsole 弹出的调试面板。 在工具上，原生组件是用web组件模拟的，因此很多情况并不能很好的还原真机的表现，建议开发者在使用到原生组件时尽量在真机上进行调试\n\n**❓ 为什么原生组件有这么多问题，微信还开发这么原生组件呢**\n\n- 因为在视频解码，绘制地图，调用摄像头，调用键盘等等，有的是WebView有很差的性能问题，或者根本WebView就没办法实现，所以用微信客户端来渲染，就能很好的解决了\n\n---\n\n### 9.组件通信原理（了解即可）\n\n**IOS的通信机制**\n\n对于 IOS 系统来说，小程序的页面是呈现在 WKWebView 中的，WKWebView 初始化时，开发者会为其定义一系列的参数，而这些参数中，包含了一个方法 -addScriptMessageHandler，我们把它简称为 MessageHandler。MessageHandler 的主要功能，就是用于为 JavaScript 设置通讯的桥梁，多数情况下，我们可以认为它定义了 JavaScript 调用客户端的方法名称和接收传递的数据，并可监听客户端的事件消息。原生组件在 IOS 里，就是利用了这个特性实现与客户端通讯的。\n\n**Andriod的通信机制**\n\n不同于 IOS 的 MessageHandler 特性，在安卓系统里，小程序采用了 JavaScript 注入的方式，为 WebView 的 window 对象注入原生方法，并以类似于 JSBridge 的形式提供给开发者使用，包括调用（invoke）和监听（on）两种类型的方法，通过方法调用，可以通知客户端执行需要的方法并可传递不同的参数数据，而通过事件监听，可以获知组件的事件触发，从而实现了原生组件的通信。\n\n**通信层级**\n\n上面所讲到的机制，只是小程序页面与微信客户端之间的通信过程，但实际上，开发者大部份情况下并不会直接使用这些通信机制进行功能调用，更多的时候我们是间接地设置好组件，通过组件内部的实现，去使用客户端的原生功能。一般来说，原生组件在页面里定义好之后，在页面渲染阶段就会与客户端发生数据交互，通知客户端同步渲染组件内容。而在后续用户使用过程中，组件也会在必要时调用客户端接口对内容进行更新。\n\n对于一些交互比较复杂的原生组件，小程序也会提供跟组件相关联的上下文对象，以便开发者可以在逻辑层中对组件进行操作。以 video 为例，小程序提供了 wx.createVideoContext 这个 API 来创建 video 的 context，以便在必要时可以控制视频的暂停、跳转、设置播放倍速等等。当然这些 API 也是经过一定的封装再提供给开发者的，我们并不能直接调用客户端的方法。\n\n---\n\n## 🐌第五部分：微信小程序API\n\n### 1.微信小程序API简介\n\n**所谓微信小程序的API，就是微信封装的一层，微信 与 手持设备之间的一个桥梁（例如网络通信API，缓存API，等等）**\n\n小程序API有很多，[官方详细文档](https://developers.weixin.qq.com/miniprogram/dev/api/)\n\n\n---\n\n## 🦀第六部分：微信小程序开放能力\n\n**我们将微信生态赋予小程序的能力（例如登录，支付，获取运动步数等等），我们称之为，开放能力，这里也对应着 开放接口API**\n\n[官方详细文档](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/login/wx.login.html)\n\n---\n\n## 🔎第七部分：微信小程序其他探索\n\n### 1.页面的生命周期\n\n**以下内容你不需要立马完全弄明白，不过以后它会有帮助，下图说明了页面 Page 实例的生命周期**\n\n<img src=\"https://res.wx.qq.com/wxdoc/dist/assets/img/page-lifecycle.2e646c86.png\" />\n\n---\n\n### 2.setData原理分析\n\n\n---\n\n## 🦋第八部分：组件化开发小程序（基础）\n\n### 1.定义一个自定义组件\n\n- 首先一般是建立一个文件夹，一般在根目录（与app.js同级）建立一个 component 文件夹\n- 示例：建立一个 test 组件\n\n```sh\n\n# 目录结构示例（test下面的名字可以随便起，但是要四个要一致，一般要不取index，要不取文件夹名称test）\n--- component 文件夹\n  --- test 文件夹\n    --- index.wxml\n    --- index.wxss\n    --- index.js\n    --- index.json\n\n# 小程序的编辑器也能通过右键，一下生成这四个自定义组件的模板了\n\n```\n\n**❣️：wxml和wxss部分和写页面一样，js部分是 Component({}) 不再是 Page({}) 里面的内容也不一样了，json部分，也有自己的配置**\n\n---\n\n### 2.自定义组件使用\n\n- 在需要使用自定义组件的页面的 .json 文件中配置\n\n```json\n{\n  \"usingComponents\": {\n    \"z-test\": \"/component/test/index\"\n  }\n}\n```\n\n```html\n<!-- 使用 -->\n<z-test></z-test>\n```\n\n---\n\n### 3.自定义组件构造器（Componet）\n\n**主要分为三部分：数据，生命周期，方法（函数，事件）**\n\n**1️⃣ 数据**\n\n```js\nComponent({\n\n  /**\n   * 组件的属性列表\n  */\n  properties: {\n    name: {\n      type: String // 类型，如果传入的不正确会报错的\n      // value: '默认名称'\n      // observer: function (newVal, oldValue) { // （旧版本的写法）\n      //    console.log(传递到这里的值改变了，就会触发) // 注意千万不要在这里面改变值，例如改变name的值，因为会无限递归，卡死了（一种套路是，写个中间变量 _name 类似于这样的，让这个渲染组件视图层，改这个，监听的是 name）\n      // }\n    },\n    age: Number // 简写形式，没什么可说的，很多框架配置都是这种的\n  },\n\n  // observers新版写法\n  // observers: {\n  //   type () {\n\n  //   }\n  // }\n\n  // 继承（具体使用 自定义组件进阶中有）\n  // behaviors: [名称],\n\n  // 启动插槽（具体使用 自定义组件进阶中有）\n  // options: {\n  //   multipleSlots: true\n  // },\n\n  // 定义外部样式（具体使用 自定义组件进阶中有）\n  // externalClasses: ['mycolor'],\n\n  /**\n   * 组件的初始数据（和页面的使用功能一致，不过多解释）\n  */\n  data: {\n\n  },\n\n  // ...\n\n})\n\n```\n\n```html\n\n<!-- 页面使用 自定义组件示例 -->\n<test name=\"朱昆鹏\" age=\"20\"></test>\n\n```\n\n---\n\n**2️⃣ 生命周期**\n\n```js\n\nComponent({\n\n  lifetimes: {\n    attached: function() {\n      // 在组件实例进入页面节点树时执行\n    },\n    detached: function() {\n      // 在组件实例被从页面节点树移除时执行\n    },\n  },\n\n  // 以下是旧式的定义方式，可以保持对 2.2.3版本以下基础库的兼容\n  attached: function() {\n    // 在组件实例进入页面节点树时执行\n  },\n\n  detached: function() {\n    // 在组件实例被从页面节点树移除时执行\n  },\n\n  // ...\n\n})\n\n```\n\n**[组件声明周期，官方详细文档...](https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/lifetimes.html)**\n\n---\n\n**3️⃣ 方法（函数，事件）**\n\n```js\nComponent({\n\n})\n```\n\n---\n\n## 🙉第九部分：组件化开发小程序（进阶）\n\n### 1.自定义事件的激活和监听\n\n- **用途**\n  - 页面 监听 自定义组件触发的事件\n  - 自定义组件 向页面 传值（相当于Vue中的子组件向父组件传值）\n\n```html\n<!-- 我们给自定义组件绑定一个事件，这没啥吧，都会 -->\n<button bindtap=\"clickTest\">点击</button>\n```\n\n```js\nComponent({\n  // ... \n  \n  /**\n   * 组件的方法列表\n  */\n  methods: {\n    clickTest: function (e) {\n      // 下面这个方法是自定义事件的核心\n      // 参数一是规定的 页面触发事件的名称，参数二是传递的参数，放到 e.detail里面，参数三是...\n      this.triggerEvent('test', { name: '朱昆鹏' }, {})\n    }\n  }\n})\n```\n\n```html\n<!-- 页面使用，注意这里绑定的事件是 test，页面是自定义组件中规定的 -->\n<test bindtest=\"yTest\"></test>\n```\n\n```js\n// 页面的js\nPage({\n  \n  yTest: function (e) {\n    console.log(e.detail) // {name: \"朱昆鹏\"}\n  }\n\n  // ...\n\n})\n```\n\n\n\n---\n\n### 2.自定义组件间的通信\n\n**页面 ---> 自定义组件：直接通过自定义组件的properties属性的方式来传**\n\n```js\n// 自定义组件\nComponent({\n  /**\n   * 组件的属性列表\n   */\n  properties: {\n    age: Number\n  }\n\n  // ...\n})\n\n```\n\n```html\n<!-- （页面 --- 自定义组件数据的传递） -->\n<test age=\"21\"></test>\n```\n\n---\n\n**自定义组件 ---> 页面**\n\n- 🔥一般通过组件的自定义事件来传递数据\n\n**或者如果组件触发了跳转的话，也可以通过 wx.navigateTo()来传**\n\n```js\n// 页面跳转情况下的传参\n\n// 自定义组件\nwx.navigateTo({\n  url: `/pages/test/index?name=\"朱昆鹏\"`,\n})\n\n// 页面\nonLoad: function (options) {\n  console.log('options', options) // {name: \"朱昆鹏\"}\n},\n\n\n```\n\n---\n\n**自定义组件 ---> 自定义组件**\n\n**目前可行的是，通过自定义事件传到页面，再由页面发到自定义组件，让页面当一个过渡者，传递者进行传递**\n\n---\n\n### 3.behavio（自定义组件的继承）\n\n**这个解决了什么问题？主要解决的是部分自定义组件的一些属性，和一些生命周期非常的一致，于是就可以通过集成来抽离出来，维护相同的部分**\n\n```js\n// zhu-beh.js\nconst zhuBeh = Behavior({\n    properties: {\n      name: String,\n      age: {\n        type: Number\n      }\n    },\n    attached:function(){\n\n    },\n    data:{\n\n    },\n    methods:{\n\n    }\n})\n\nexport {zhuBeh}\n\n```\n\n```js\n// 使用🔥\n\nimport { zhuBeh } from '../zhu-beh.js'\n\nComponent({\n\n  // 继承\n  behaviors: [zhuBeh],\n\n  /**\n   * 组件的属性列表\n   */\n  properties: {\n    sex: String\n    // 因为继承了，所以页面传的时候，可以传 name,age,sex三个属性进来\n  },\n\n  // ......\n})\n```\n\n---\n\n```js\n// ❣️ 多继承规则\n\nbehaviors: [zhuBeh, zhu1, ...]\n\n// 既然支持多继承，就有一个覆盖规则：\n// 子组件中会覆盖继承的（自定义组件中的权级高）\n// 继承的生命周期函数，不会覆盖\n\n```\n\n---\n\n### 4.slot插槽的使用\n\n```html\n<!-- test.wxml -->\n<view>\n  <text>下面是插槽的内容</text>\n  <!-- Slot插槽 -->\n  <slot name=\"myname\"></slot>\n</view>\n```\n\n```js\n// test.js\nComponent({\n  // ❣️❣️❣️ 启动插槽，别忘了这一步\n  options: {\n    multipleSlots: true\n  },\n\n  // ...\n})\n```\n\n```html\n\n<!-- 页面中使用 -->\n<test>\n  <button slot=\"myname\">我的名字是朱昆鹏</button>\n</test>\n\n<!-- 最后的展示效果就是 下面是插槽的内容，然后一个按钮，按钮的文字是 我的名字是朱昆鹏 -->\n\n```\n\n\n---\n\n### 5.自定义组件外部样式\n\n**痛点，一个自定义组件，是由很多官方组件堆积成的，但是我们却没办法通过设置样式改变自定义组件，除非你自己在组件的wxss中改组件的样式，否则是不太能在页面中改的，为了应对这个问题，微信出了 外部样式的概念**\n\n```html\n<!-- test.wxml -->\n<view>\n  <text class=\"mycolor\">字体颜色</text>\n</view>\n```\n\n```js\n// test.js\nComponent({\n\n  // 定义外部样式\n  externalClasses: ['mycolor'],\n\n  // ...\n})\n```\n\n```html\n<!-- 页面 -->\n<test class=\"mycolor\"></test>\n\n<!-- 我们给页面的 wxss 设置 .mycolor 颜色为红色，最后展示出来的字体颜色也就是红色 -->\n```\n\n---\n\n\n### 6.自定义组件的一些小坑\n\n**hidden属性，无法隐藏自定义组件**\n\n- wx:if 的方式可以隐藏组件，但是 hidden 却隐藏不了我们自定义的组件，这个是为什么？\n- 原因是小程序会认为这个可能是我们自己写的属性\n- 解决方法：在组件中设置 hidden 属性，然后直接设置\n- 为什么我们这里要用 hidden，因为如果要频繁的切换，用 hidden 比较好（具体可以看 wx:if vs hidden）\n\n---\n\n## ☁️第十部分：小程序云开发\n\n### 1.云开发简介\n\n**所谓小程序云开发就是通过小程序的接口，调用小程序的云数据库，云函数，云存储（还能使用云调用，和HTTP API）**\n\n- 云函数：在云端运行的代码，微信私有协议天然鉴权\n- 云数据库：一个既可以在小程序端操作，又可以在云函数中操作的JSON数据库（非关系型，类似MongoDB）\n- 云存储：在云端存储文件，可以在云端控制台可视化管理\n- 云调用：基于云函数免鉴权使用微信开放接口的鞥哪里（例如我们可以给用户推送信息）\n- 🔥HTTP API：使用HTTP API开发者可以在已有服务器上访问云资源，实现与云开发的互通\n\n**拓展：Serverless介绍，这个又叫云服务，或者无服务，函数及服务**\n\n---\n\n### 2.建立一个具有云开发的小程序\n\n- 首先是创建，这里选择使用云开发\n- 然后初始化会报错，因为没有开通，所以开通一下，会让你创建环境\n  - 环境配置取名字随便取，我这里取的是 test\n  - 然后需要在 app.js 中设置 env ，不设置的话，还会报错的\n\n```js\n//app.js\nApp({\n  onLaunch: function () {\n    \n    if (!wx.cloud) {\n      console.error('请使用 2.2.3 或以上的基础库以使用云能力')\n    } else {\n      wx.cloud.init({\n        // env 参数说明：\n        //   env 参数决定接下来小程序发起的云开发调用（wx.cloud.xxx）会默认请求到哪个云环境的资源\n        //   此处请填入环境 ID, 环境 ID 可打开云控制台查看\n        //   如不填则使用默认环境（第一个创建的环境）\n        env: 'test-t8jsc',\n        traceUser: true,\n      })\n    }\n\n    this.globalData = {}\n  }\n})\n\n```\n\n[代码规范网站](https://github.com/airbnb/javascript)\n\n---\n\n### 3.云函数的基本使用\n\n- 在cloudfuncitons文件夹下，右键，新建Node云函数，输入名称，就能初始化一个云函数\n- 上传：云函数文件夹右键上传，如果有npm包的话，就选那个 上传并部署：云端安装依赖\n- 然后就可以在云开发的面板中对云函数进行测试等操作\n\n```js\n// 云函数中使用 云数据库示例\n\nconst cloud = require('wx-server-sdk')\ncloud.init()\n\nconst db = cloud.database() // 数据库\nconst playlistCollection = db.collection('playlist') // 数据库集合\n\nconst rp = require('request-promise')\nconst URL = 'http://musicapi.xiecheng.live/personalized'\n\n// 云函数入口函数\nexports.main = async (event, context) => {\n  \n  let list = await playlistCollection.get() // 获取集合数据（其中data就是）\n\n  let dataRes = await rp(URL)\n  let playlist = JSON.parse(dataRes).result\n\n  for (let i = 0, len = playlist.length; i < len; i++) {\n    await playlistCollection.add({\n      data: {\n        ...playlist[i],\n        createTime: db.serverDate()\n      }\n    })\n  }\n\n}\n```\n\n---\n\n### 4.云数据库\n\n**云数据库只能一条条的插入**\n\n\n---\n\n## 🐯十一部分：现代化开发小程序探索\n\n### 0.使用npm\n\n**安装依赖和传统的一样**\n\n---\n\n### 1.封装API层探索\n\n---\n\n### 2.封装状态管理探索（类Vuex）\n\n---\n\n### 3.小程序测试探索（单元测试，集成测试，E2E测试）\n\n---\n\n### 4.小程序工程化开发探索\n\n\n---\n\n### 5.多端打包技术探索\n\n\n---\n\n## 🕊第十二部分：微信小程序项目实践"
  },
  {
    "path": "docs/blog/9.Node/1.Node绪论.md",
    "content": "---\ntitle: 1.Node绪论\ndate: 2020-01-30 00:00:00\npermalink: \ntag: \n - blog\n - 9.Node\n---\n\n\n## 🍬第一部分：Node发展史\n\n### 1.Node发展历史\n\n> 前言：能用 JavaScript 编写的程序，都终将会以 JavaScript 编写\n\n> 我以前以为这句话是个玩笑话，但是随著 Node.js 的发展，我们渐渐地明白到这句话的远见性──JavaScript 真的越来越强大了。\n\nNode.js诞生自 2009 年，但是它确实有史以来发展最快的开发工具，没有之一。\n\n- 2009年3月：node.js 诞生\n- 2009年10月：Isaac Schlueter（Node的核心用户）首次提出npm\n- 20010年3月：express.js 问世\n- 2010年3月：Socket.io 第一版发布\n- 2011年5月：npm 1.0 发布\n- ...\n\n诞生之初给业界带来两个先进的思想：模块化（CommonJS），包管理工具（npm），不可否认，这些思想已经成为前端不可缺少的部分。\n\n并且因为Node.js ，前端挣脱了浏览器的束缚，直接可以操作文件系统。于是大量的工具诞生:gulp，webpack，babel... 奠定了现代前端的基础\n\n\n### 2.Node是什么\n\n> 借用Node官网中的描述：Node.js 不是 JavaScript应用，不是编程语言，也不是像Nginx一样的web服务器，也不是框架。Node.js 是 JavaScript 的运行时环境\n\n> 你可以把Node.js 理解成一个库（当然称之为平台更合理），例如jQuery，里面有很多方法（API），只要想达成某些效果，就调用对应的方法即可\n\n> 备注：Node现在也被应用于 人工智能（TensorFlow.js） & 航空航天（CubeSat卫星）& 物联网（Ruff，树莓派）\n\n---\n\n\n## 🍡第二部分：Node（io读写模块分享）\n\n### 1.fs文件系统\n\n> 首先 API总共有70多个，但是不要慌，这个数量除以二就行，因为所有的方法都有同步和异步两种\n\n1.文件读取\n\n```js\nfs.readFile('', (err, data) => {\n  console.log(\"同步读取: \" + data);\n})\n\nlet data = fs.readFileSync('');\n```\n\n---\n\n2.文件写入\n\n```js\nfs.writeFileSync('文件地址', '覆盖写入文案') // 覆盖写入\nfs.appendFileSync('文件地址', '追加写入文案') // 追加写入\n```\n\n---\n\n3.删除文件\n\n```js\nfs.unlinkSync('文件地址')\n```\n\n---\n\n4.创建目录\n\n```js\nfs.mkdirSync('目录地址');\n```\n\n---\n\n5.读取目录\n\n```js\nfs.readdirSync('目录地址');\n```\n\n---\n\n6.删除目录\n\n```js\nfs.rmdirSync('目录地址');\n```\n\n---\n\n7.获取文件或者文件夹信息\n\n```js\nlet stats = fs.statSync('文件或文件夹路径')\nstats.isFile() // 是否是文件\nstats.isDirectory() // 是否是文件夹\n```\n\n### 2.steam（流）\n\n##### Node的流操作 主要是用来干什么的？\n\n- 主要是读写操作的，例如文件读取，文件写入等等\n- 这里大家是不是感觉和上面的文件系统功能重复了，答案是，是的\n\n---\n\n##### 为什么有了文件系统模块（fs），Node还要有个流模块呢？\n\n例如上面我们的文件操作系统中的读取文件\n\n```js\nfs.readFileSync('').toString();\n// 如果文件过大，流入500MB，就会报如下的错误\n// buffer.js:382\n//     throw new Error('toString failed');\n// 报错原因是 Buffer 对象的长度过大，导致toString方法失败。 可见，这种一次获取全部内容的做法，不适合操作大文件。\n```\n\n对于大文件读取 可以考虑使用流来读取文件内容。\n\n其实不要认为流模块只能用来读一下大文件，流文件的意义还在于流处理这种思路，因为Node.js 很是脆弱。Node虽然发展很快，但是有两个大问题一直困扰着像我这样的初级开发者，那就是 容错和性能\n\n容错指的是：因为JS是单线程解释性语言的，所以有一个地方报错，整个系统就挂掉了（现在又pm2可以挂掉重启）\n性能指的是：一个Node程序只要涉及了IO操作，你啥都没干你的内存都有可能飚的很高。如果用传统的fs进行大量文件读取，系统直接就会卡死，所有流处理对IO操作高的系统的优化，起到了至关重要的作用。\n\n而 Node.js 自己的大量模块 也使用了 流处理模块，例如http模块，返回数据就使用了流处理模块，但是一想也是，如果没有流处理模块，你从Node服务器上下载一个 4k视频（几个G的那种），直接你的内存就占满了，而用流处理就不会有这种情况。\n\n\n---\n\n##### 流处理为啥这么吊，原理是什么，它和fs模块不同的是什么\n\n<img src=\"https://user-gold-cdn.xitu.io/2018/4/2/16284fe7a88515ca?imageView2/0/w/1280/h/960/format/webp/ignore-error/1\" />\n\n\n---\n\n##### Node流处理的使用\n\nNode.js 中有四种基本的流类型（我来讲前两种）\n\n- Readable - 可读的流 (例如 fs.createReadStream())。\n- Writable - 可写的流 (例如 fs.createWriteStream())。\n- Duplex - 可读写的流（双工流） (例如 net.Socket)。\n- Transform - 在读写过程中可以修改和变换数据的 Duplex 流 (例如 zlib.createDeflate())。\n\n---\n\n##### 读取流\n\n```js\n// 创建可读流\nvar readerStream = fs.createReadStream(PATH);\n\n// 设置编码为 utf8。\n// readerStream.setEncoding('UTF8');\n\nreaderStream.on('data', function (chunk) {\n  console.log('chunk：', chunk)\n});\n\nreaderStream.on('end', function () {\n  console.log('end', data);\n});\n```\n\n---\n\n##### 写入流\n\n```js\nvar fs = require(\"fs\");\nvar data = '朱昆鹏';\n\n// 创建一个可以写入的流，写入到文件 output.txt 中\nvar writerStream = fs.createWriteStream('output.txt');\n\n// 使用 utf8 编码写入数据\nwriterStream.write(data,'UTF8');\n\n// 标记文件末尾\nwriterStream.end();\n\n// 处理流事件 --> data, end, and error\nwriterStream.on('finish', function() {\n    console.log(\"写入完成。\");\n});\n\nwriterStream.on('error', function(err){\n   console.log(err.stack);\n});\n\nconsole.log(\"写入程序执行完毕\");\n```\n\n---\n\n##### 快速文件复制\n\n```js\nlet readable = fs.createReadStream('读取文件地址'); // 创建读取流\nlet writable = fs.createWriteStream('输出文件地址'); // 创建写入流\nreadable.pipe(writable); // 通过管道来传输流\n```\n\n---\n\n## 🍧第三部分：Node（io读写模块实际应用-H5本地化平台）\n\n公司隐私，不放这，哈哈哈，想看来应聘吧\n\n## 🍭第四部分：一些封装好的io读写模块函数分享\n\n\n### 1.传入一个文件夹路径，返回这个文件夹下所有的文件路径数组\n\n```js\nconst fs = require('fs');\n\n/**\n * 传入一个文件夹路径，返回这个文件夹下所有的文件路径数组\n * @param { String } 文件夹路径\n * @return { Array } 此文件夹下所有的文件相对路径数组\n */\nfunction readDirToPathArr(foldPath) {\n  let pathArr = []\n\n  function recursion(foldPath, children) {\n    let files = fs.readdirSync(foldPath)\n    files.forEach(item => {\n      if (item === '.DS_Store') return;\n      let isDir = fs.statSync(`${foldPath}/${item}`).isDirectory(); // 是否是文件夹\n      isDir\n        ? recursion(`${foldPath}/${item}`)\n        : pathArr.push(`${foldPath}/${item}`)\n    })\n  }\n\n  recursion(foldPath)\n  return pathArr\n}\n```\n\n---\n\n### 2.复制某文件夹下所有的文件到另一个文件夹\n\n```js\n/**\n * 复制某文件夹下所有的文件到另一个文件夹\n * @param { String } 被复制的文件夹\n * @param { String } 目标文件夹\n */\n// 复制文件夹\nfunction exists (src, dst) {\n  //测试某个路径下文件是否存在\n  fs.exists(dst, function(exists){\n      if (exists) {//不存在\n          copy(src,dst);\n      } else {//存在\n          fs.mkdir(dst,function(){//创建目录\n              copy(src,dst)\n          })\n      }\n  })\n}\n\n// 复制文件夹的辅助函数\nfunction copy (src, dst) {\n  //读取目录\n  let paths = fs.readdirSync(src);\n  paths.forEach(function(path){\n      var _src=src+'/'+path;\n      var _dst=dst+'/'+path;\n      var readable;\n      var writable;\n      fs.stat(_src,function(err,st){\n          if(err){\n              throw err;\n          }\n          \n          if(st.isFile()){\n              readable=fs.createReadStream(_src);//创建读取流\n              writable=fs.createWriteStream(_dst);//创建写入流\n              readable.pipe(writable);\n          }else if(st.isDirectory()){\n              exists(_src,_dst,copy);\n          }\n      });\n  });\n}\n\nexists('./a', './b')\n```\n\n---\n\n### 3.HTML文案抽离函数\n\n```js\nconst cheerio = require('cheerio');\nconst fs = require('fs');\n \nfunction extractFromText(data, options, cb) {\n  var $, text;\n \n  text = data.toString()\n    .replace(/< *(br|p|div|section|aside|button|header|footer|li|article|blockquote|cite|code|h1|h2|h3|h4|h5|h6|legend|nav)((.*?)>)/g, '<$1$2|||||')\n    .replace(/< *\\/(td|a|option) *>/g, ' </$1>') // spacing some things out so text doesn't get smashed together\n    .replace(/< *(a|td|option)/g, ' <$1') // spacing out links\n    .replace(/< *(br|hr) +\\/>/g, '|||||<$1\\\\>')\n    .replace(/<\\/ +?(p|div|section|aside|button|header|footer|li|article|blockquote|cite|code|h1|h2|h3|h4|h5|h6|legend|nav)>/g, '|||||</$1>');\n \n  text = '<textractwrapper>' + text + '<textractwrapper>';\n \n  try {\n    $ = cheerio.load(text);\n    $('script').remove();\n    $('style').remove();\n    $('noscript').remove();\n \n    const $docElement = $('textractwrapper');\n \n    if (options.includeAltText) {\n      text = getTextWithAlt($, $docElement);\n    } else {\n      text = $docElement.text();\n    }\n \n    text = text.replace(/\\|\\|\\|\\|\\|/g, '\\n')\n      .replace(/(\\n\\u00A0|\\u00A0\\n|\\n | \\n)+/g, '\\n')\n      .replace(/(\\r\\u00A0|\\u00A0\\r|\\r | \\r)+/g, '\\n')\n      .replace(/(\\v\\u00A0|\\u00A0\\v|\\v | \\v)+/g, '\\n')\n      .replace(/(\\t\\u00A0|\\u00A0\\t|\\t | \\t)+/g, '\\n')\n      .replace(/[\\n\\r\\t\\v]+/g, '\\n')\n      ;\n  } catch (err) {\n    cb(err, null);\n    return;\n  }\n \n  cb(null, text);\n}\n\n// 使用方法\nextractFromText(html文件的Buffer对象数据, {}, (err, resText) => {}) \n```"
  },
  {
    "path": "docs/blog/9.Node/2.原生Node.md",
    "content": "---\ntitle: 2.原生Node\ndate: 2020-01-30 00:00:00\npermalink: \ntag: \n - blog\n - 9.Node\n---\n\n> 等待书写中...\n\n## EventLoop（事件触发线程）\n\n\n### 进程线程介绍\n\n浏览器是个多进程模型（我们最关系的是 浏览器的渲染进程【浏览器内核】）\n\n- 页面渲染线程\n- Js执行线程\n- js和页面渲染不能同时进行\n\n既然 js是单线程，那么为什么可以用异步呢？因为浏览器中有单独的线程去管理代码的执行逻辑，调度整个执行流程\n\n- 进程是计算机分配任务的最小单位（进程里面有线程）\n\n---\n\n### 宏任务，微任务\n\n- 宏任务（宿主环境提供）\n- 微任务（语言本身提供的）\n\n---\n\n### 全局变量\n\n> 这五个不是全局的，但是可以直接访问\n\n- require \n- exports\n- module\n- __dirname\n- __filename\n\n---\n\n### process\n\n---\n\n### env/argv\n\n---\n\n### cwd()\n\n---\n\n### nextTick()\n\n\n---\n\n### Node事件环\n\n> Node是基于v8引擎的，但是一些写法不是Node提供的，例如 fs.rendFile() , 这些是由 libuv库提供，这个库还提供 非阻塞i/0操作\n\nNode中也有自己的事件环，从 node10.x之后都和浏览器的执行顺序一致\n \n- 10.x 后，执行完成一个宏任务，就执行微任务（和浏览器一致）\n- 10.x 前，是宏任务都执行完成，才会清空队列，执行微任务\n\n\n```\n               宏任务\n   ┌───────────────────────────┐\n┌─>│           timers          │ 🔥定时器\n│  └─────────────┬─────────────┘\n│  ┌─────────────┴─────────────┐\n│  │     pending callbacks     │ 上一轮没执行完成的，回调函数\n│  └─────────────┬─────────────┘\n│  ┌─────────────┴─────────────┐\n│  │       idle, prepare       │ 内部系统使用的队列\n│  └─────────────┬─────────────┘      ┌───────────────┐\n│  ┌─────────────┴─────────────┐      │   incoming:   │\n│  │           poll            │<─────┤  connections, │ 🔥轮询（执行i/0回调）\n│  └─────────────┬─────────────┘      │   data, etc.  │\n│  ┌─────────────┴─────────────┐      └───────────────┘\n│  │           check           │  🔥setImmediate（当前一轮轮询结束后，执行）\n│  └─────────────┬─────────────┘\n│  ┌─────────────┴─────────────┐\n└──┤      close callbacks      │ 关闭的回调（例如 websocket关闭）\n   └───────────────────────────┘\n\n   ┌───────────────────────────┐\n   │          nextTick         │ 🔥上面队列都执行完成，会立即执行这里，然后再进行新一轮的循环（微任务）\n   └───────────────────────────┘\n\n   ┌───────────────────────────┐\n   │         微任务队列          │ 🔥清空微任务队列，之后再执行上面的Node事件环（都是宏任务）\n   └───────────────────────────┘\n```\n\n```js\nsetTimeout(() => {\n  console.log('timeout')\n}, 0)\n\nPromise.resolve().then(() => {\n  console.log('promise')\n})\n\n// 🔥 当前执行栈中执行完毕，立即调用，之后再调用微任务队列（nextTick也是微任务）\nprocess.nextTick(() => {\n  console.log('nextTick')\n})\n\n// nextTick\n// promise\n// timeout\n\n// =================================================================\n\nsetTimeout(() => {\n  console.log('timeout')\n}, 0)\n\nsetImmediate(() => {\n  console.log('setImmediate')\n})\n\n// 这个执行顺序不确定，根据电脑性能有关\n// 🔥 原因是 poll队列 ，会等一会，如果这时候定时器到了，就会回去执行定时器\n\n// =================================================================\n\n// 🔥 这个情况就是唯一的了，因为 poll 执行完成了，所以肯定会走 check 队列\n\n// setImmediate\n// timeout\n\nfs.readFile('xxx.txt', () => {\n\n  setTimeout(() => {\n    console.log('timeout')\n  }, 0)\n\n  setImmediate(() => {\n    console.log('setImmediate')\n  })\n\n})\n```\n\n拓展补充\n\n- poll 有最大执行个数，超过这个数量就会被延迟到下一轮循环执行\n- node中的微任务：Promise.then / nextTick，没有 mutationObserver\n\n---\n\n## 模块概念\n\n### commonjs规范\n\n> Node中使用的规范，不支持 esm 规范（但是可以通过babel编译执行）\n\n核心思想：\n\n- 每一个文件都是一个模块\n- 需要通过 module.exports 导出\n- 导入需要的模块\n\nNode中划分了几类模块的使用\n\n- 内置模块（例如fs）：\n- 自定义模块：require()\n- 第三方模块：\n\n---\n\n### esm规范\n\n---\n\n### umd模块\n\n---\n\n### amd模块\n\n---\n\n## 核心模块\n\n- fs\n- path\n- vm\n\n\n### 实现一个CommonJs\n\n> 前置知识\n\n```js\nconst fs = require('fs')\nconst path = require('path')\nconst vm = require('vm') // 虚拟机模块\n\n// ================================================\n\n// \n\n// ================================================\n\n// 给我一个相对路径，返回一个绝对路径（__dirname 当前文件所在目录）\npath.resolve(__dirname, 'index.js', '/')\npath.join(__dirname, 'index.js', '/')\n\n// 区别：path.resolve 将 / 识别成根路径，path.join 就是简单的拼接，一般使用 path.join 进行拼接\n\n// ================================================\n\nconst a = 100;\nconst log = `console.log(a)`\n\n// 直接执行字符串，并且在沙箱环境中 a is defind\n// 前端没有这个方法，所以一般都用 new Function +  with\nvm.runInContext(log)\n```\n\n```js\nconst fs = require('fs');\nconst path = require('path');\nconst vm = require('vm');\n\nfunction Module(id) {\n    this.id = id;\n    this.exports = {}; \n}\nModule.wrapper = [\n    `(function(exports,require,module,__filename,__dirname){`,\n    `})`\n];\nModule._extensions = {\n    '.js'(module) {\n        let content = fs.readFileSync(module.id, 'utf8');\n        content = Module.wrapper[0] + content + Module.wrapper[1];\n        let fn = vm.runInThisContext(content);\n        let exports = module.exports;\n        let dirname = path.dirname(module.id);\n        fn.call(exports, exports, req, module, module.id, dirname);\n    },\n    '.json'(module) {\n        let content = fs.readFileSync(module.id, 'utf8');\n        module.exports = JSON.parse(content);\n    }\n}\nModule._resolveFilename = function (filename) {\n    let absPath = path.resolve(__dirname, filename);\n    let isExists = fs.existsSync(absPath);\n    if (isExists) {\n        return absPath;\n    } else {\n        let keys = Object.keys(Module._extensions);\n        for (let i = 0; i < keys.length; i++) {\n            let newPath = absPath + keys[i];\n            let flag = fs.existsSync(newPath);\n            if (flag) {\n                return newPath;\n            }\n        }\n        throw new Error('module not exists');\n    }\n}\nModule.prototype.load = function () {\n    let extName = path.extname(this.id);\n    Module._extensions[extName](this);\n}\nModule._cache = {};\n\nfunction req(filename) {\n    filename = Module._resolveFilename(filename);\n    let cacheModule = Module._cache[filename];\n    if (cacheModule) {\n        return cacheModule.exports; \n    }\n    let module = new Module(filename);\n    Module._cache[filename] = module\n    module.load();\n    return module.exports;\n}\n```\n\n---\n\n## 文件读写流\n\n"
  },
  {
    "path": "docs/blog/9.Node/3.Express框架.md",
    "content": "---\ntitle: 3.Express框架\ndate: 2020-01-30 00:00:00\npermalink: \ntag: \n - blog\n - 9.Node\n---\n\n> 等待书写中...\n\n---\n\n## 第一部分：Koa使用\n\n```js\nconst Koa = require('./koa');\n\nconst app = new Koa();\n\n// 比较核心的有三个方法（listen, use, on('error')）\n\n// \napp.use((ctx) => {\n  ctx.body = 'B站的小伙伴们，大家好'\n})\n\napp.listen(3000)\n\n// use 注册函数\n// ctx 上下文（这个上下文的写法很好）\n```\n\n> 效果就是打开 http://localhost:3000/，浏览器中会有 B站的小伙伴们，大家好 这句话\n\n---\n\n## 第二部分：源码简单实现\n\n```js\n// lib/application.js\n\nconst http = require('http')\n\nclass Application {\n  \n  use(fn) {\n    this.fn = fn; // 将use方法中的函数，保存到实例上\n  }\n\n  handleRequest(req, res) {\n    this.fn(req, res)\n  }\n\n  listen(...args) {\n    let server = http.createServer(this.handleRequest.bind(this))\n\n    server.listen(...args)\n  }\n\n}\n\nmodule.exports = Application\n```\n\n\n"
  },
  {
    "path": "docs/blog/9.Node/4.Koa2框架.md",
    "content": "---\ntitle: 4.Koa2框架\ndate: 2020-01-30 00:00:00\npermalink: \ntag: \n - blog\n - 9.Node\n---\n\n> 博主绪论：用了一圈Node框架下来，还是Koa2香\n\n> 等待书写中...\n\n---\n\n## 源码解析\n\n### 1.为什么会有koa框架？\n\n- 令人困惑的API（Node HTTP模块的 API不符合正常预期）\n\n```js\nconst server = http.createServer((request, response) => {\n  // 为什么要这么写呢？\n  response.end('hello world')\n\n  // 这么写不香么\n  response = 'hello'\n  response.body = 'hello'\n\n  // 这种的API还有很多（原因是Node HTTP模块是一个理论性的API，是一个浅层封装，需要照顾各种情况）\n})\n```\n\n- 顺序描述需要\n- 切面描述需要（处理前做什么，处理后做什么）\n\n---\n\n\n### 2.简单实现和使用\n\n```js\n// Zoa\n\nconst http = requier('http')\n\n\nclass Zoa {\n  \n  use(callback) {\n    this.callback = callback\n  }\n\n  listen(...args) {\n    const server = http.createServer((req, res) => {\n      this.callback(req, res)\n    })\n    server.listen(...args)\n  }\n}\n\nmodule.exports = Zoa\n```\n\n```js\n// 使用\n\nconst Zoa = require('./Zoa')\nconst app = new Zoa\n\napp.use(ctx => {\n  ctx.body = 'hello world'\n})\n\napp.listen(3000, () => {\n  console.log('监听端口 3000')\n})\n```"
  },
  {
    "path": "docs/blog/9.Node/5.Egg框架.md",
    "content": "---\ntitle: 5.Egg框架\ndate: 2020-01-30 00:00:00\npermalink: \ntag: \n - blog\n - 9.Node\n---\n\n> 博主绪论：架构很好，做大型项目很适合（但是做大型项目为什么不考虑Java，岂不是更香），可以拿来研究下结构\n\n> 等待书写中..."
  },
  {
    "path": "docs/blog/9.Node/6.Node技术应用.md",
    "content": "---\ntitle: 6.Node技术应用\ndate: 2020-01-30 00:00:00\npermalink: \ntag: \n - blog\n - 9.Node\n---\n"
  },
  {
    "path": "docs/blog/说明.md",
    "content": "---\ntitle: 【🔝置顶】网站文章更新计划\ndate: 2021-01-28 19:10:32\npermalink: \ncover: https://xerrors.oss-cn-shanghai.aliyuncs.com/imgs/20200527130157.png\ntag: \n - blog\n - 0.说明\n---\n\n网站升级中，逐渐开发中（预计 2021.2.1 日迁移完成）\n"
  },
  {
    "path": "docs/pages/blog.md",
    "content": "---\ntitle: \"博客\"\npermalink: \"blog\"\nhideLastUpdated: True\ncategories: noRight\n---\n<!--参考大佬的界面 https://xin-tan.com/guide/  暂时 404 了，作者更新网站地址为 https://xxoo521.com/ 不知道是不是放弃vuepress了  -->  \n<!-- > 最近更新 👇 -->\n\n<template>\n    <div>\n    <!--标签列表-->\n      <div class=\"my-blog-head\">\n        <h3>标签 </h3>\n        <div class=\"my-tag-box\">\n          <div\n            class='my-tags' \n            :class=\"{ 'select-tag': tag == selectedTag, 'normal-tag': tag != selectedTag }\"\n            @click=\"myFlitter( tag )\"\n            v-for=\"tag in tags\"\n            style=\"margin: 5px;\">{{ tag == 'blog' ? '全部' : tag }}</div>\n        </div>\n      </div>\n      <el-divider></el-divider>\n      <div class=\"my-card\" :body-style=\"{ padding: '5px' }\" v-for=\"(post, index) in topPublishPosts\">\n        <div>\n          <span class=\"page-title\"><el-link :underline=\"false\" :href=\"post.path\" type=\"primary\"><strong>{{ post.title }}</strong></el-link></span>\n          <div v-if=\"post.frontmatter.tag\" style=\"display: inline-block; float: right;\">\n            <span class=\"this-tag\"\n              v-for=\"item in post.frontmatter.tag\"\n              @click=\"myFlitter( item )\"\n              ><span v-if=\"item !== 'blog'\">{{ item }}</span></span>\n          </div>\n          <div class=\"bottom clearfix\">\n            <br>\n            <span><small><i class=\"el-icon-time\"></i>  {{ post.formatDay }}</small></span>\n            <el-link\n              class=\"read-more\"\n              :href=\"post.path\" \n              type=\"primary\" \n              :underline=\"false\"\n            >阅读全文</el-link>\n          </div>\n        </div>\n      </div>\n      <div @click=\"loadMore\" class=\"page-guide-btn\" v-show=\"showBtn\">\n        <div ref=\"btn\">加载更多</div>\n      </div>\n    </div>\n</template>\n\n<script>\nexport default {\n  data() {\n    return {\n      step: 12,\n      posts: [],\n      tags: [],\n      page: 1,\n      num: 0,\n      showBtn: true,\n      selectedTag: \"blog\"\n    }\n  },\n\n  mounted() {\n    this.posts = []\n    var temp = this.$site.pages\n    // 筛选标签中带有 blog 标志的文章\n\n    for (var i = 0; i < temp.length; i++) {\n      if (temp[i].frontmatter.tag) {\n        var tempTag = temp[i].frontmatter.tag\n        for (var j = 0; j < tempTag.length; j++){\n          var isInTags = false\n          for (var k = 0; k < this.tags.length; k++){\n            if (tempTag[j] === this.tags[k]){\n              isInTags = true\n            }\n          }\n          if (!isInTags) {\n            this.tags.push(tempTag[j])\n          }\n        }\n        if (tempTag == 'blog' || 'blog' == tempTag[0]){\n          this.posts.push(temp[i])\n        }\n      }\n    }\n\n    // 前端体系标签顺序化（之前标签顺序不对）\n    let newTags = []\n    let tagObj = {}\n    this.tags.forEach(tagItem => {\n        let tagArr = tagItem.split('.');\n        tagArr[1]\n          ? tagObj[+tagArr[0]] = tagItem\n          : tagObj[-1] = tagItem\n    })\n    this.tags = Object.values(tagObj)\n    let tem = this.tags.splice(this.tags.length - 1, 1)[0]\n    this.tags.unshift(tem)\n\n    this.num = this.posts.length\n  },\n\n  computed: {\n    topPublishPosts() {\n      this.showBtn =  this.page * this.step < this.num\n      console.log('this.getTopKPosts(this.page * this.step)', this.getTopKPosts(this.page * this.step))\n\n      let topPublisData = this.getTopKPosts(this.page * this.step)\n\n      // 排列顺序（有bug，相同数字前缀的会相互覆盖）\n      let newTags = []\n      let tagObj = {}\n      topPublisData.forEach(tagItem => {\n          let tagArr = tagItem.filename.split('.');\n          tagArr[1]\n            ? tagObj[+tagArr[0]] = tagItem\n            : tagObj[0] = tagItem\n      })\n      topPublisData = Object.values(tagObj)\n\n      return topPublisData\n    }\n  },\n\n  methods: {\n    getTopKPosts(num) {\n      const re = /.*\\/(.*?)\\.(html|md)/\n\n      return this.posts\n        .map(post => {\n          const execs = re.exec(post.relativePath)\n          return {\n            ...post,\n            updateTimestamp: (new Date(post.frontmatter.date)).getTime(),\n            filename: execs ? execs['1'] : '',\n            formatDay: this.formatDate(new Date(post.frontmatter.date))\n          }\n        })\n        .sort((a, b) => b.updateTimestamp - a.updateTimestamp)\n        .slice(0, num)\n    },\n    \n    formatDate(date) {\n      if (!(date instanceof Date)) {\n        return \n      }\n\n      return `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}`\n    },\n\n    loadMore() {\n      this.page += 1\n    },\n\n    myFlitter(tag) {\n      this.selectedTag = tag\n      this.page = 1\n      this.posts = []\n      var temp = this.$site.pages\n\n      for (var i = 0; i < temp.length; i++) {\n        if (temp[i].frontmatter.tag) {\n          var tempTag = temp[i].frontmatter.tag\n\n          for (var j = 0; j < tempTag.length; j++) {\n            if (tempTag[j] === tag) {\n              this.posts.push(temp[i])\n              break\n            }\n          }\n        }\n      }\n      // console.log(this.posts)\n      this.num = this.posts.length\n    }\n  }\n}\n</script>\n\n<style lang=\"stylus\" scoped>\n.my-tag-box {\n  /* height: 100px; */\n  display: flex;\n  flex-flow: row wrap;\n  align-content: flex-start\n}\n\n.my-tags {\n  padding: 0.3rem .5rem;\n  display: inline-block;\n  cursor: pointer;\n  transition: all 0.5s ease;\n  border-radius: 3px;\n  font-size: 14px;\n  color: var(--secondary-text);\n}\n\n.my-tags:hover, .select-tag {\n  color: var(--regular-text);\n  font-weight: 600;\n}\n\n.my-card {\n  animation: showup .6s forwards;\n  border-bottom: 1px solid var(--border-color);\n  padding: 1rem 0;\n  .page-title .el-link {\n    transition all .2s\n    color: var(--primary-text)\n    /* color: darken(var(--primary-text), 10%) */\n    &:hover {\n      color: var(--main-color);\n      border-left: 2px solid var(--main-color);\n      padding-left: 9px;\n      transition: all .3s;\n    }\n  }\n}\n\n.this-tag {\n  font-size: small;\n  color: var(--secondary-text);\n  margin-left: 10px;\n  /* background: linear-gradient(120deg,#fff 50%,#f1f6f5 0); */\n}\n\n.this-tag:hover {\n  cursor: pointer;\n  color: var(--main-color);\n  border-bottom: 1px dotted var(--main-color);\n}\n\n.read-more {\n  float: right;\n  background: var(--bg-color);\n  padding: 3px 10px;\n  border-radius: 3px;\n  color: var(--regular-text);\n}\n\n@keyframes showup {\n  0% {\n    transform: translateY(3rem);\n    opacity: 0;\n  }\n  100% {\n    transform: translateY(0);\n    opacity: 1;\n  }\n}\n</style>\n\n<style lang=\"stylus\">\n.page-guide-btn {\n  text-align: center;\n  margin: 30px 0;\n  animation: showup 1s forwards;\n}\n\n.page-guide-btn div {\n  display: inline-block;\n  padding: 0.6rem 1.2rem;\n  transition: all 0.3s ease;\n  box-sizing: border-box;\n  border: 1px solid var(--border-color);\n  border-radius: 3px;\n}\n\n.page-guide-btn div:hover {\n  background-color: var(--bg-color)\n  /* background-color: darken(var(--bg-color), 50%); */\n  cursor: pointer;\n}\n\n.el-divider {\n  background-color: var(--border-color)\n}\n</style>\n"
  },
  {
    "path": "docs/pages/book/book.md",
    "content": "---\ntitle: \"读书\"\npermalink: \"book\"\ncategories: noRight\n---\n\n<template>\n  <div class=\"zhuanlan-ctn\" style=\"width: 100%;\">\n    <img\n      style=\"height: 10rem; margin: 1rem auto; display:block;\"\n      :src=\"$withBase('/ills/zhuanlan.svg')\"\n      type=\"image/svg+xml\" draggable=\"false\"/>\n        <!-- 问题 -->\n        <div style=\"display: flex; flex-wrap: wrap;\">\n            <div class=\"zl-item\" v-for=\"(item, ind) in bookList\" :key=\"ind\">\n              <!-- 所有封面大小或者比例为 900 * 330 约 2.35 ：1 -->\n              <div @click=lookup(item.link) >\n                  <img :src=\"item.cover\" style=\"width: 100%; border-radius: 4px 4px 0 0;\"/>\n                  <h4 class=\"zl-item__title\">{{ item.title }}</h4>\n                  <p class=\"zl-item__info\">🕓 {{ item.date }}</p>\n              </div>\n              <div class=\"zl-item__pages\">\n                  <div style=\"letter-spacing: 1px; line-height: 1.7;\">{{ item.decription }}</div>\n                  <el-divider></el-divider>\n                  <div v-for=\"(page, ind) in item.pages\" class=\"animated faster slideInDown\">\n                  <el-link :underline=\"false\" :href=\"page.path\" type=\"primary\"\n                      style=\"font-size: 1rem; font-weight: 500; line-height: 2rem; text-decorate: none;\">\n                      📄 {{ page.title }}\n                  </el-link>\n                </div>\n            </div>\n        </div>\n    </div>\n  </div>\n</template>\n\n<script>\nexport default {\n  data () {\n    return {\n      bookList: [{\n        cover: require('./img/zgcsdxp.jpg'),\n        link: \"/book-zgcsdxp/\",\n        decription: \"我一直生活在北方，现在到了快买房的时候了，目前面临着以后要待在哪个城市的问题，而这本书能帮助我认识到各个城市的未来前景，并且为我建立起一个关于城市发展的思考体系，因为只有大家都追捧的地方，房价才有保值的可能。\",\n        title: \"中国城市大洗牌（10%）\",\n        date: '2021年2月14日'\n      },\n      {\n        cover: require('./img/fryst.jpg'),\n        link: \"/book-fryst/\",\n        decription: \"在读中\",\n        title: \"繁荣与衰退\",\n        date: '2021年2月14日'\n      }\n      // {\n      //   cover: \"https://xerrors.oss-cn-shanghai.aliyuncs.com/blog/20200203/t7wXD6CoQdbk.png\",\n      //   link: \"compile\",\n      //   decription: \"这个专栏涉及到词法分析器以及语法分析器的构建，从 flex 开始讲起，直到后面的 bison 来构造语法分析器，一步一个脚印来将自己学习的知识应用到实践中去；\",\n      //   title: \"编译原理：语法分析与词法分析\"\n      // }, {\n      //   cover: \"https://xerrors.oss-cn-shanghai.aliyuncs.com/blog/20200203/pa71gYHVDFVO.png\",\n      //   link: \"python-base\",\n      //   decription: \"这个专栏主要从Python的几个基础的地方来阐述，理解难度很低，并且可帮助有C语言基础的同学快速掌握Python的基础语法知识以及用法，平时写一些字符串处理脚本还是没有问题的；与此同时，该内容也可以帮助学习更深层次的Python的时候，打下一个基础。\",\n      //   title: \"Python 快速扫盲\"\n      // }\n      ]\n    }\n  },\n  methods: {\n    lookup(link) {\n      console.log(link)\n      window.location.pathname = link\n    }\n  }\n}\n</script>\n\n<style lang=\"stylus\" scoped>\n.zl-head\n  text-align center\n  padding 3rem\n.zl-item\n  width 45%\n  margin 2rem auto\n  transition .3s\n  box-shadow: 0 1px 2px 0 rgba(34,36,38,.15);\n  &:hover\n    cursor pointer\n    box-shadow 0px 1px 16px 2px rgba(0,0,0,.1)\n    & ^[0]__info\n      opacity 1\n  border-radius 4px\n  &__title\n    display inline-block\n    padding-left 1rem\n  &__info\n    transition opacity 0.3s ease\n    opacity 0\n    display inline-block\n    padding-right 1rem\n    float right\n    font-size 15px\n    color var(--secondary-text)\n  &__pages\n    padding-bottom 2rem\n    padding-left 1.5rem\n    padding-right 1.5rem\n    animation slow-in .5s\n\n@media (max-width: $MQMobile)\n  .zl-item\n    width 100%\n    &__info\n      display none\n    .el-link\n      font-size .8rem\n\n@keyframes slow-in\n  0%\n    max-height 0\n  100%\n    max-height 600px\n</style>\n"
  },
  {
    "path": "docs/pages/book/中国城市大洗牌/中国城市大洗牌.md",
    "content": "---\ntitle: 中国城市大洗牌\ndate: 2020-01-30 00:00:00\npermalink: 'book-zgcsdxp'\n---\n\n# 中国城市大洗牌\n\n## 1.超级城市，谁更有前途\n\n> 选择一个未来成长的城市，可能比选择一个行业还要重要\n\n我们先来看几个正在改变格局的地方\n\n- 首先是深圳，这里有最完善的电子制造业产业聚集地，拥有强大的竞争力，科技创新带来了人口流动，让深圳成为了中国改革开放的前沿阵地，未来随着人口的不断流入，超越北上也并非不可能。\n- 第二个就是雄安，它承担着疏解非首都功能的重任，也就是说北京的经济重心将会转移到雄安（科技，金融等产业），北京作为首都只专注于文化和政治职能。\n- 第三个就是南方城市的大量崛起，中国经济的20强，大多数都在南方。\n- 第四，都市圈兴起，城市的概念逐渐被打破，例如\n    - 深圳带动，东莞 惠州\n    - 上海带动 苏州 无锡 南通 嘉兴 宁波 甚至舟山\n    - 完全形成一个巨大都市圈，大家发展的都挺好。\n- 第五，强省会崛起，一个省的资源开始向省会倾斜，例如 武汉，成都，合肥和西安。\n\n再说北京，北京目前在主动收缩，疏解非首都功能，未来人口将严格控制在一个量级。\n\n再看广州和深圳，在三大都市圈中（京津冀，长三角，粤港澳），属粤港澳大湾区的经济增长潜力最大。\n\n<img src=\"./img/1.jpg\" />\n\n---\n\n## 2.南北差距超过东西差距\n"
  },
  {
    "path": "docs/pages/github-open/github-open.md",
    "content": "---\ntitle: \"开源项目\"\npermalink: \"github-open\"\nhideLastUpdated: True\ncategories: noRight\n---\n\n---\n\n## 图片压缩客户端（Electron）\n\n---\n\n\n\n"
  },
  {
    "path": "docs/pages/guide.md",
    "content": "---\ntitle: \"导航\"\npermalink: \"guide\"\nhideLastUpdated: True\ncategories: noRight\n---\n\n<template>\n  <div class=\"my-guide-container\">\n    <el-tabs v-model=\"activeName\" type=\"card\">\n      <!-- 不同的面板 -->\n      <el-tab-pane v-for=\"(tab, ind1) in tabs\" :key=\"ind1\" :label=\"tab.label\" :name=\"tab.name\">\n        <div v-for=\"(myClass, ind2) in tab.classes\" :key=\"ind2\">\n          <!-- 标题 -->\n          <div class=\"my-class-title\" @click=\"addLink(ind1, ind2)\">\n            {{ myClass.title }}\n          </div>\n          <!-- 链接小卡片 -->\n          <div class=\"my-classes-box\">\n            <a :href=\"link.link\" v-for=\"(link, ind3) in myClass.links\" :key=\"ind3\" target=\"_blank\">\n              <div class=\"my-link-box\">\n                <div class=\"my-link-box__name\">{{ link.name }}</div>\n                <div class=\"my-link-box__description\">{{ link.description }}</div>\n              </div>\n            </a>\n          </div>\n        </div>\n      </el-tab-pane>\n    </el-tabs>\n  </div>\n</template>\n\n<script>\nexport default {\n  data() {\n    return {\n      loading: false,\n      activeName: 'one',\n      tabs: [{\n          \"label\": \"计算机\",\n          \"name\": \"one\",\n          \"classes\": [{\n            \"title\": \"建本站\",\n            \"links\": [{\n              \"name\": \"Vuepress\",\n              \"description\": \"静态网站生成器\",\n              \"link\": \"https://www.google.com\"\n            }, {\n              \"name\": \"GitHub\",\n              \"description\": \"全球最大XX网站\",\n              \"link\": \"https://www.github.com\"\n            }, {\n              \"name\": \"Valine\",\n              \"description\": \"无后端评论系统\",\n              \"link\": \"https://valine.js.org/\"\n            }, {\n              \"name\": \"serverleess\",\n              \"description\": \"serverleess 云服务\",\n              \"link\": \"https://leancloud.cn/dashboard/applist.html#/apps\"\n            }]\n          }, {\n            \"title\": \"资讯网站\",\n            \"links\": [{\n              \"name\": \"Google\",\n              \"description\": \"最常用的网站\",\n              \"link\": \"https://www.google.com\"\n            }, {\n              \"name\": \"InfoQ\",\n              \"description\": \"技术论坛\",\n              \"link\": \"https://www.infoq.cn/\"\n            },  {\n              \"name\": \"Creative\",\n              \"description\": \"灵感与创意\",\n              \"link\": \"https://creativemass.cn/#/\"\n            }, {\n              \"link\": \"https://juejin.im/\",\n              \"name\": \"掘金\",\n              \"description\": \"开发者社区\"\n            }, {\n              \"link\": \"https://search.chongbuluo.com/\",\n              \"name\": \"快搜\",\n              \"description\": \"搜索快人一步\"\n            }]\n          }, {\n            \"title\": \"在线工具\",\n            \"links\": [{\n              \"name\": \"ProcessOn\",\n              \"description\": \"在线作图\",\n              \"link\": \"https://www.processon.com/\"\n            }, {\n              \"name\": \"GitMind\",\n              \"description\": \"在线脑图\",\n              \"link\": \"https://app.gitmind.cn/\"\n            }, {\n              \"name\": \"CN-Office\",\n              \"description\": \"在线格式转换\",\n              \"link\": \"https://cn.office-converter.com\"\n            }, {\n              \"name\": \"语雀\",\n              \"description\": \"文档协作平台\",\n              \"link\": \"https://www.yuque.com/\"\n            }, {\n              \"name\": \"Carbon\",\n              \"description\": \"代码截图工具\",\n              \"link\": \"https://carbon.now.sh/\"\n            }, {\n              \"name\": \"NICRTOOL+\",\n              \"description\": \"常用工具合集\",\n              \"link\": \"http://www.nicetool.net/\"\n            }, {\n              \"link\": \"https://repl.it/\",\n              \"name\": \"Repl.it\",\n              \"description\": \"在线IDE\"\n            }, {\n              \"link\": \"https://www.notion.so/\",\n              \"name\": \"Notion\",\n              \"description\": \"理想的笔记软件\"\n            }, {\n              \"link\": \"https://www.overleaf.com/\",\n              \"name\": \"Overleaf\",\n              \"description\": \"Online LaTeX Editor\"\n            }, {\n              \"link\": \"https://www.urlgot.top/\",\n              \"name\": \"Urlgot\",\n              \"description\": \"在线视频下载\"\n            }, {\n              \"link\": \"https://tool.lu/\",\n              \"name\": \"在线工具\",\n              \"description\": \"就是叫在线工具\"\n            }]\n          }, {\n            \"title\": \"电子读物\",\n            \"links\": [{\n              \"name\": \"自我修养\",\n              \"description\": \"基础读物\",\n              \"link\": \"https://legacy.gitbook.com/book/leohxj/a-programmer-prepares/details\"\n            }, {\n              \"name\": \"Markdown\",\n              \"description\": \"Markdown 教程\",\n              \"link\": \"https://shd101wyy.github.io/markdown-preview-enhanced/#/zh-cn/\"\n            }, {\n              \"name\": \"Docker\",\n              \"description\": \"从入门到实践\",\n              \"link\": \"https://legacy.gitbook.com/book/yeasy/docker_practice/details\"\n            }, {\n              \"link\": \"https://github.com/alivebao/clean-code-js\",\n              \"name\": \"JS 风格指南\",\n              \"description\": \"基于代码整洁之道\"\n            }, {\n              \"link\": \"http://turnoff.us/\",\n              \"name\": \"{ turnoff }\",\n              \"description\": \"有趣的漫画\"\n            }]\n          }]\n        }, {\n          \"label\": \"前端\",\n          \"name\": \"three\",\n          \"classes\": [{\n            \"title\": \"速查平台\",\n            \"links\": [{\n              \"name\": \"W3CSchool\",\n              \"description\": \"词典网站\",\n              \"link\": \"https://www.w3cschool.cn/dict/\"\n            }, {\n              \"name\": \"印记中文\",\n              \"description\": \"前端文档资源\",\n              \"link\": \"https://docschina.org/\"\n            }, {\n              \"link\": \"https://www.kaolamedia.com/\",\n              \"name\": \"新媒体导航\",\n              \"description\": \"新媒体工具\"\n            }]\n          }, {\n            \"title\": \"资源平台\",\n            \"links\": [{\n              \"name\": \"IconFont\",\n              \"description\": \"阿里图标库\",\n              \"link\": \"https://iconfont.cn/\"\n            }, {\n              \"name\": \"EasyIcon\",\n              \"description\": \"比较全的图标库\",\n              \"link\": \"https://www.easyicon.net\"\n            }, {\n              \"name\": \"ColorHunt\",\n              \"description\": \"配色参考网站\",\n              \"link\": \"https://colorhunt.co\"\n            }, {\n              \"name\": \"Khroma\",\n              \"description\": \"利用AI训练颜色*\",\n              \"link\": \"http://khroma.co/\"\n            }, {\n              \"name\": \"Grabient\",\n              \"description\": \"渐变色调色\",\n              \"link\": \"https://www.grabient.com/\"\n            }, {\n              \"name\": \"Grabient\",\n              \"description\": \"渐变色调色\",\n              \"link\": \"https://www.grabient.com/\"\n            }, {\n              \"name\": \"unDraw\",\n              \"description\": \"插画搜索、多\",\n              \"link\": \"https://undraw.co/\"\n            }, {\n              \"name\": \"IRA\",\n              \"description\": \"插画推荐\",\n              \"link\": \"https://iradesign.io/\"\n            }, {\n              \"name\": \"Whoosh\",\n              \"description\": \"有趣的插画\",\n              \"link\": \"https://www.ls.graphics/whoosh\"\n            }, {\n              \"name\": \"Cssfx\",\n              \"description\": \"即拿即用的CSS\",\n              \"link\": \"https://cssfx.dev/\"\n            }, {\n              \"link\": \"https://dribbble.com/\",\n              \"name\": \"Dribbble\",\n              \"description\": \"短平快作品\"\n            }, {\n              \"link\": \"https://daneden.github.io/animate.css/\",\n              \"name\": \"Animate.css\",\n              \"description\": \"前端动效库\"\n            }, {\n              \"link\": \"https://www.minimamente.com/project/magic/\",\n              \"name\": \"Magic CSS3\",\n              \"description\": \"CSS3 特殊动效\"\n            }]\n          }, {\n            \"title\": \"前端工具\",\n            \"links\": [{\n              \"name\": \"Tools\",\n              \"description\": \"前端工具推荐\",\n              \"link\": \"https://illustration.tools/\"\n            }, {\n              \"link\": \"https://animista.net/\",\n              \"name\": \"Animista*\",\n              \"description\": \"生成CSS动画\"\n            }, {\n              \"link\": \"https://mdnice.com/\",\n              \"name\": \"MarkdownNice\",\n              \"description\": \"微信排版优化\"\n            }, {\n              \"link\": \"https://www.canva.cn/\",\n              \"name\": \"Canva\",\n              \"description\": \"封面制作\"\n            }]\n          }]\n        }, {\n          \"label\": \"深度学习\",\n          \"name\": \"four\",\n          \"classes\": [{\n            \"title\": \"课程文档\",\n            \"links\": [{\n              \"name\": \"吴恩达\",\n              \"description\": \"全面、基础\",\n              \"link\": \"https://study.163.com/course/courseMain.htm?courseId=1004570029\"\n            }, {\n              \"link\": \"https://www.bilibili.com/video/av71325898\",\n              \"name\": \"MIT\",\n              \"description\": \"迈向人工智能\"\n            }, {\n              \"link\": \"https://tf.wiki/zh_hans/\",\n              \"name\": \"TensorFlow\",\n              \"description\": \"简单粗暴TF2\"\n            }, {\n              \"link\": \"https://zh.d2l.ai/chapter_how-to-use/how-to-use.html\",\n              \"name\": \"深度学习\",\n              \"description\": \"动手学深度学习\"\n            }]\n          }, {\n            \"title\": \"课程资料\",\n            \"links\": [{\n              \"name\": \"课程笔记\",\n              \"description\": \"吴恩达课程的笔记\",\n              \"link\": \"https://github.com/fengdu78/Coursera-ML-AndrewNg-Notes\"\n            }, {\n              \"link\": \"https://www.cnblogs.com/kplayer/p/9439708.html\",\n              \"name\": \"MIT人工智能\",\n              \"description\": \"课程笔记\"\n            }, {\n              \"link\": \"https://www.cnblogs.com/findumars/p/5009003.html\",\n              \"name\": \"牛人博客\",\n              \"description\": \"优秀博客以及代码汇总\"\n            }]\n          }, {\n            \"title\": \"在线工具\",\n            \"links\": [{\n              \"link\": \"https://colab.research.google.com/\",\n              \"name\": \"Colab\",\n              \"description\": \"在线 TensorFlow\"\n            }, {\n              \"link\": \"https://sci-hub.se/\",\n              \"name\": \"Sci-Hub\",\n              \"description\": \"论文下载网站\"\n            }]\n          }, {\n            \"title\": \"在线文档\",\n            \"links\": [{\n              \"link\": \"https://requests.readthedocs.io/zh_CN/latest/\",\n              \"name\": \"Requests库\",\n              \"description\": \"Python HTTP 库爬虫\"\n            }, {\n              \"link\": \"https://beautifulsoup.readthedocs.io/zh_CN/v4.4.0/\",\n              \"name\": \"BeautifulSoup\",\n              \"description\": \"Python 爬虫解析库\"\n            }, {\n              \"link\": \"https://docs.python.org/zh-cn/3/\",\n              \"name\": \"Python\",\n              \"description\": \"官方中文文档\"\n            }, {\n              \"link\": \"https://scipy.org/\",\n              \"name\": \"Scipy\",\n              \"description\": \"科学计算库\"\n            }, {\n              \"link\": \"https://www.numpy.org.cn/\",\n              \"name\": \"Numpy\",\n              \"description\": \"Numpy 中文网\"\n            }, {\n              \"link\": \"https://www.matplotlib.org.cn/\",\n              \"name\": \"Matplotlib\",\n              \"description\": \"Matplotlib 中文网\"\n            }, {\n              \"link\": \"https://www.pypandas.cn/\",\n              \"name\": \"Pandas\",\n              \"description\": \"Pandas 中文网\"\n            }]\n          }]\n        }, {\n          \"label\": \"图像处理\",\n          \"name\": \"five\",\n          \"classes\": [{\n            \"title\": \"常用期刊\",\n            \"links\": [{\n              \"name\": \"CCF\",\n              \"description\": \"图形学与多媒体\",\n              \"link\": \"https://www.ccf.org.cn/xspj/jsjtxxydmt/\"\n            }, {\n              \"link\": \"https://ieeexplore.ieee.org/xpl/topAccessedArticles.jsp?punumber=34\",\n              \"name\": \"IEEE\",\n              \"description\": \"图像相关的论文\"\n            }, {\n              \"link\": \"http://www.guide2research.com/journals/computer-vision\",\n              \"name\": \"Guide2Research\",\n              \"description\": \"计算机视觉导航\"\n            }]\n          }]\n      }],\n      count: 0\n    };\n  },\n\n  methods: {\n    addLink(ind1, ind2) {\n      if (this.count++ < 10) {\n        return\n      }\n      this.count = 0\n      var tmplink = {\n        ind1: ind1,\n        ind2: ind2,\n        link: {},\n        token: ''\n      };\n      this.$prompt('输入链接地址', '提示', {\n        confirmButtonText: '确定',\n        cancelButtonText: '取消',\n      }).then(({ value }) => {\n        tmplink.link.link = value;\n        this.$prompt('请输入站点名称', '名称', {\n          confirmButtonText: '确定',\n          cancelButtonText: '取消',\n        }).then(({ value }) => {\n          tmplink.link.name = value;\n          this.$prompt('请输入站点描述', '描述', {\n            confirmButtonText: '确定',\n            cancelButtonText: '取消',\n          }).then(({ value }) => {\n            tmplink.link.description = value;\n            this.$prompt('先告诉我 Token 是啥😇', '提示', {\n              confirmButtonText: 'Yaeh',\n              cancelButtonText: 'Nope',\n              inputPattern: /^[A-Za-z0-9]{5,13}$/,\n              inputErrorMessage: 'Token 格式不正确😕'\n            }).then(({ value }) => {\n              tmplink.token = value;\n              this.upload(tmplink);\n              console.log(tmplink);\n            }).catch(() => {\n              this.$message({\n                type: 'info',\n                message: '🥱不告诉算了。。。'\n              });       \n            });\n          })\n        })\n      });\n    },\n  },\n  mounted() {\n  }\n};\n</script>\n\n<style lang=\"stylus\" scoped>\n.my-classes-box {\n  display: flex;\n  flex-wrap: wrap;\n}\n\n.my-classes-box a:hover {\n  text-decoration: none;\n}\n\n.my-class-title {\n  letter-spacing: 2px;\n  width: 5rem;\n  text-align: center;\n  padding: .4rem 1rem;\n  margin: 1rem 0;\n  font-weight: 600;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n}\n\n.my-link-box {\n  width: 8.7rem;\n  height: 4rem;\n  /* margin: 0.4rem; */\n  margin: 0 0.4rem 0.6rem 0\n  background-color: var(--bg-color);\n  border: 1px solid Border;\n  border-radius: 3px;\n  text-align: center;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n  display: flex;\n  justify-content: center;\n  flex-direction: column;\n  transition:all 0.2s;\n\n  &__name {\n    margin-bottom: 5px;\n  }\n\n  &__description {\n    font-size: smaller; \n    text-overflow: ellipsis;\n  }\n}\n\n.my-link-box:hover {\n  transform: scale(1.05);\n}\n\n@media (max-width: $MQMobile) {\n  .my-class-title {\n    margin: 1rem auto;\n  }\n  .my-classes-box {    \n    padding: 0;\n    flex-direction: column\n    .my-link-box {\n      width: auto;\n      margin-top: 8px;\n    }\n  }\n}\n</style>\n\n<style lang=\"stylus\">\n.el-tabs--card>.el-tabs__header .el-tabs__item.is-active {\n  border-bottom: none\n  color: var(--main-color);\n  font-weight: 600;\n}\n\n.el-tabs--card>.el-tabs__header {\n  border-bottom: 1px solid var(--bg-color);\n  .el-tabs__item {\n    border-left-color: var(--bg-color)\n    color: var(--secondary-text);\n    &:hover {\n      color: var(--main-color);\n    }\n  }\n}\n\n.el-tabs--card>.el-tabs__header .el-tabs__nav {\n  border: 1px solid var(--bg-color);\n  border-bottom: none;\n}\n</style>\n"
  },
  {
    "path": "docs/pages/links.md",
    "content": "---\ntitle: 友链\npermalink: links\nhideLastUpdated: True\ncategories: noRight\n---\n\n<template>\n  <div>\n    <h3>友链</h3>\n    <div class=\"cardListContainer\">\n      <div class=\"card-list\">\n          <a\n            v-for=\"(item, index) in links\"\n            :key=\"index\" \n            :href=\"item.link\"\n            target=\"_blank\"\n            class=\"links card-item row-3\"\n            :style=\"setStyle(item)\">\n            <img :src=\"item.avatar || 'https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/zw.png'\" class=\"no-zoom\">\n            <div>\n              <p class=\"name\">{{ item.name }}</p>\n              <p class=\"desc\">{{ item.desc }}</p>\n            </div>\n          </a>\n      </div>\n    </div>\n  </div>\n</template>\n\n<br />\n\n```yaml\n请按照格式申请友链，并确保你的网站已经添加本站为友链\n\n友链申请方式：发送邮件到 270750933@qq.com。格式如下：\n\nname: id\nlink: 链接\ndesc: 介绍 (可选)\nbgColor: 背景色 如'#f2e7e5' (可选)\ntextColor: 文字颜色 如'#481e1c' (可选)\navatar: 头像 (可选)\n```\n\n<script>\nimport Valine from '@theme/components/Valine.vue'\n\nexport default {\n  components: { Valine },\n  methods: {\n    setStyle(data) {\n      return {\n        backgroundColor: data.bgColor || '#f4f4f4',\n        '--random-color': '#CBEAFA',\n        color: data.textColor || '#000',\n      }\n    }\n  },\n  data() {\n    return {\n      links: [\n        {\n          \"name\": \"朱昆鹏\",\n          \"desc\": \"凡是过往，皆是经历\",\n          \"avatar\": \"http://notes.itzkp.com/avatar.jpg\",\n          \"link\": \"http://notes.itzkp.com\"\n        },\n        {\n          name: '记忆空间',\n          avatar: 'https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/xd.png',\n          desc: '不积跬步无以至千里',\n          link: \"https://l-sui.github.io/\",\n          bgColor: \"#f1f0ed\",\n          textColor: \"#2b73af\",\n        },\n        {\n          name: \"Lingze's blog\",\n          desc: '少侠, 别来无恙?',\n          link: \"https://lingze.xyz/\",\n          avatar: 'https://lingze.xyz//img/avatar2.jpg'\n        }\n        // {\n        //   name: '虚位以待',\n        //   desc: '等你前来',\n        //   link: \"http://notes.itzkp.com\",\n        //   bgColor: '#f25272',\n        //   textColor: '#fbc7d2'\n        // },\n        // {\n        //   name: '虚位以待',\n        //   desc: '等你前来',\n        //   link: \"http://notes.itzkp.com\",\n        //   bgColor: \"#718971\",\n        //   textColor: \"#fff\"\n        // }\n      ]\n    }\n  }\n}\n</script>\n\n<style lang=\"stylus\" scoped>\n\n// 普通卡片列表\n.cardListContainer\n  margin .7rem 0\n  &>:not(.card-list)\n    display none\n  .card-list\n    margin -0.35rem\n    display: flex;\n    flex-wrap: wrap;\n    align-items: flex-start;\n    .card-item\n      width calc(100%/3 - .7rem)\n      margin .35rem\n      background var(--bodyBg)\n      border-radius 3px\n      color var(--textColor)\n      display flex \n      box-shadow 1px 1px 2px 0 rgba(0,0,0,.06)\n      &:hover\n        text-decoration none\n        img \n          transform rotate(8deg) scale(1.1, 1.1)\n          box-shadow 3px 2px 7px rgba(0, 0, 0, 0.15)\n        div p\n          text-shadow 3px 2px 5px rgba(0, 0, 0, 0.15)\n      img\n        width 60px\n        height 60px\n        border-radius 50%\n        border 2px solid #fff\n        margin 1rem\n        margin-right 0\n        box-shadow 3px 2px 5px rgba(0, 0, 0, 0.08)\n        transition all .4s\n      div\n        flex 1\n        display inline-block\n        float right \n        padding 1rem 0\n        p\n          margin 0\n          padding 0 1rem\n          transition text-shadow .4s\n          text-align center\n        .name\n          margin .2rem 0 .3rem 0\n        .desc\n          font-size .8rem\n          line-height 1.1rem\n          opacity .8\n          margin-bottom .2rem\n    .card-item.row-1\n      width calc(100% - .7rem)\n      img\n        margin-left 2rem\n    .card-item.row-2\n      width calc(100%/2 - .7rem)\n      img\n        margin-left 1.5rem\n    .card-item.row-3\n      width calc(100%/3 - .7rem)\n    .card-item.row-4\n      width calc(100%/4 - .7rem)\n\n// 图文卡片列表\n.cardImgListContainer\n  margin 1rem 0\n  &>:not(.card-list)\n    display none\n  .card-list\n    margin -0.5rem\n    display: flex;\n    flex-wrap: wrap;\n    align-items: flex-start;\n    .card-item\n      width calc(100%/3 - 1rem)\n      margin .5rem\n      background var(--mainBg)\n      border 1px solid rgba(0,0,0,0.08)\n      box-sizing: border-box\n      border-radius 3px\n      overflow hidden\n      color var(--textColor)\n      box-shadow 2px 2px 10px rgba(0,0,0,.04)\n      display flex \n      flex-direction: column;\n      justify-content: flex-start;\n      align-items: stretch;\n      align-content: stretch;\n      transition: box-shadow .3s\n      &:hover\n        box-shadow 1px 1px 20px rgba(0,0,0,.07)\n      .box-img\n        overflow hidden\n        position relative\n        background #000\n        img\n          display block\n          width 100%\n          height auto\n          transition: all .3s\n        &:hover\n          img\n            transform: scale(1.1, 1.1)\n            opacity .75\n      a\n        color var(--textColor)\n        transition: color .3s\n        &:hover\n          color $accentColor\n          text-decoration none\n      .box-info\n        padding: .8rem 1rem\n        p\n          margin 0\n        .desc\n          margin-top: .3rem\n          opacity .8\n          font-size: .9rem\n          line-height: 1.1rem\n      .box-footer\n        overflow hidden\n        padding: .8rem 1rem\n        border-top:  1px solid rgba(0,0,0,0.05)\n        img\n          width 1.8rem\n          height 1.8rem\n          border-radius 50%\n          float left\n        span \n          line-height 1.8rem\n          float left\n          margin-left: .6rem\n          font-size: .8rem\n    .card-item.row-1\n      width calc(100% - 1rem)\n    .card-item.row-2\n      width calc(100%/2 - 1rem)\n    .card-item.row-3\n      width calc(100%/3 - 1rem)\n    .card-item.row-4\n      width calc(100%/4 - 1rem)\n\n@media (max-width: 500px)\n  .cardListContainer\n    .card-list\n      .card-item.row-1, .card-item.row-2, .card-item.row-3, .card-item.row-4\n        width calc(100% - .7rem)\n        img\n          margin-left 1.5rem\n  .cardImgListContainer\n    .card-list\n      .card-item.row-1, .card-item.row-2, .card-item.row-3, .card-item.row-4\n        width calc(100% - 1rem)\n\n.theme-mode-dark\n  .cardImgListContainer\n    .card-list\n      .card-item\n        border-color: var(--borderColor)\n        .box-footer\n           border-color: var(--borderColor)\n           \n// 卡片列表的响应\n@media (max-width: 900px) \n  .cardListContainer\n    .card-list\n      .card-item.row-4\n        width calc(100%/3 - .7rem)\n  .cardImgListContainer\n    .card-list\n      .card-item.row-4\n        width calc(100%/3 - 1rem)\n\n@media (max-width: 720px) \n  .cardListContainer\n    .card-list\n      .card-item.row-3, .card-item.row-4\n        width calc(100%/2 - .7rem)\n        img\n          margin-left 1.5rem\n  .cardImgListContainer\n    .card-list\n      .card-item.row-3, .card-item.row-4\n        width calc(100%/2 - 1rem)\n        \n@media (max-width: 500px) \n  .cardListContainer\n    .card-list\n      .card-item.row-1, .card-item.row-2, .card-item.row-3, .card-item.row-4\n        width calc(100% - .7rem)\n        img\n          margin-left 1.5rem\n  .cardImgListContainer\n    .card-list\n      .card-item.row-1, .card-item.row-2, .card-item.row-3, .card-item.row-4\n        width calc(100% - 1rem)\n</style>"
  },
  {
    "path": "docs/pages/my/my.md",
    "content": "---\ntitle: \"个人说明\"\npermalink: \"my\"\nhideLastUpdated: True\ncategories: noRight\n---\n\n<template>\n  <div>\n    <main class=\"resume\">\n      <section id=\"introduction\">\n        <article class=\"resume-self\" id=\"self\">\n          <viewer images=\"./img/ming.jpg\">\n            <img style=\"cursor:pointer;\" class=\"logo\" src=\"./img/ming.jpg\">\n          </viewer>\n          <div class=\"title\">朱昆鹏 Kunpeng Zhu（1998年）</div>\n          <div class=\"description\">\n            <blockquote>🌈终身学习，学习终身</blockquote>\n            <ul class=\"contact-list\">\n              <li class=\"contact-list-item\"><a href=\"https://github.com/zhukunpenglinyutong\">GitHub</a></li>\n              <li class=\"contact-list-item\"><a href=\"https://juejin.cn/user/2788017219055175\">掘金</a></li>\n            </ul>\n          </div>\n        </article>\n      </section>\n      <section id=\"work\">\n        <h1 class=\"title\">工作</h1>\n        <div class=\"sub\">Work</div>\n        <article class=\"resume-work\" id=\"xitu\"><img class=\"logo\" src=\"./img/wb.png\">\n          <div class=\"title\">H5开发工程师</div>\n          <div class=\"sub\"><a href=\"https://www.moqipobing.com/\">玩吧</a></div>\n          <div class=\"time\">2019 - 至今</div>\n          <div class=\"description\">\n            <p>负责日常业务开发，人员需求分配，团队协调，前端体系优化，产出效能工具等工作</p>\n            <p>2020年度玩吧大明星（名额是总人数的5%）</p>\n          </div>\n        </article>\n        <article class=\"resume-work\" id=\"xitu\"><img class=\"logo\" src=\"./img/zywl.png\">\n            <div class=\"title\">web前端开发工程师（实习）</div>\n            <div class=\"sub\"><a href=\"https://baike.baidu.com/item/%E5%8C%97%E4%BA%AC%E6%99%BA%E9%9B%A8%E7%89%A9%E8%81%94%E7%A7%91%E6%8A%80%E6%9C%89%E9%99%90%E5%85%AC%E5%8F%B8/19882474?fr=aladdin\">智雨物联</a></div>\n            <div class=\"time\">2018.10 - 2019.7</div>\n            <div class=\"description\">\n            <p>主要负责物联网可视化平台搭建工作，前端技术选型，前端体系搭建工作</p>\n            </div>\n        </article>\n      </section>\n      <section id=\"education\">\n          <h1 class=\"title\">教育经历</h1>\n          <div class=\"sub\">Education</div>\n          <!-- <article class=\"resume-education\" id=\"master\"><img class=\"logo\" src=\"./img/iit.png\">\n            <div class=\"title\">\n                <a target=\"_blank\" href=\"https://baike.baidu.com/item/%E4%BC%8A%E5%88%A9%E8%AF%BA%E4%BC%8A%E7%90%86%E5%B7%A5%E5%A4%A7%E5%AD%A6/50725025?fr=aladdin\">伊利诺伊理工大学 Illinois Institute of Technology</a>（申请中）\n            </div>\n            <div class=\"sub\">计算机系计算机科学硕士 Computer Science (M.A.S.)</div>\n            <div class=\"time\">2023 - 2024</div>\n            <div class=\"description\">\n                <p>美国伊利诺伊理工大学 2020 QS全美综合排第71名，预计2022年拿到本科毕业证之后，申请此学校 M.A.S. 硕士</p>\n            </div>\n          </article> -->\n          <article class=\"resume-education\" id=\"bachelor\"><img class=\"logo\" src=\"./img/rm.png\">\n              <div class=\"title\">\n                <a target=\"_blank\" href=\"https://baike.baidu.com/item/%E4%B8%AD%E5%9B%BD%E4%BA%BA%E6%B0%91%E5%A4%A7%E5%AD%A6\">中国人民大学</a>（非统本科在读）\n              </div>\n              <div class=\"sub\">计算机科学与技术 | 工学学士学位</div>\n              <div class=\"time\">2019 - 2022</div>\n              <div class=\"description\">\n                  <p>平均成绩：94/100，论文已过，英语已过，2022年3月拿到双证（学位证和学历证）</p>\n              </div>\n          </article>\n          <article class=\"resume-education\" id=\"bachelor\"><img class=\"logo\" src=\"./img/hbgy.png\">\n              <div class=\"title\">河北工业职业技术学院（统招专科）</div>\n              <div class=\"sub\">计算机系 | 移动应用开发</div>\n              <div class=\"time\">2016 - 2019</div>\n              <div class=\"description\">\n                  <p>分数只过了二本线，报不了本科计算机专业，最终选择报了专科学校学校里面计算机第一的（之前认为实力更重要，当然后来才发现学历是敲门砖 😢，但是我不会放弃努力的）</p>\n                  <p>学校在2020年10月升为本科（<a target=\"_blank\" href=\"https://baike.baidu.com/item/%E6%B2%B3%E5%8C%97%E5%B7%A5%E4%B8%9A%E8%81%8C%E4%B8%9A%E6%8A%80%E6%9C%AF%E5%A4%A7%E5%AD%A6/53968503?fromtitle=%E6%B2%B3%E5%8C%97%E5%B7%A5%E4%B8%9A%E8%81%8C%E4%B8%9A%E6%8A%80%E6%9C%AF%E5%AD%A6%E9%99%A2&fromid=465960&fr=aladdin\">河北工业职业技术大学</a>），可见学校综合确实不错，符合当时的决定：放弃二本，选择学习技术，当然我后期也会为这个选择买单：1.报名非统本科，2.本科结束后，报名国外全日硕士（国家留服认证）补全学历短板</p>\n                  <p>在校期间的表现：担任班长，软件社团社长，校级学生会干部，获得河北省大数据比赛三等奖，省级优秀毕业生，河北省优秀志愿者，互联网+创新创业大赛河北省二等奖，三级（高级）职业资格证书</p>\n              </div>\n          </article>\n      </section>\n    </main>\n  </div>\n</template>\n\n<style lang=\"css\" scoped>\n/* BASIC */\n\n:root {\n    font-family: -apple-system, BlinkMacSystemFont, Helvetica, Arial, sans-serif;\n    text-rendering: optimizeLegibility;\n    -webkit-font-smoothing: antialiased;\n}\n\n*,\n*:before,\n*:after {\n    -webkit-box-sizing: border-box;\n    -moz-box-sizing: border-box;\n    box-sizing: border-box;\n    outline: none;\n}\n\nnav {\n    position: fixed;\n    top: 0;\n    right: 0;\n    padding: .2em .5em;\n    z-index: 9;\n    opacity: .5;\n    transition: opacity .3s;\n}\n\nnav:hover {\n    opacity: 1;\n}\n\nnav .meta {\n    display: inline-block;\n    padding: 0 .2em;\n    font-size: .8em;\n    cursor: pointer;\n}\n\nnav .meta.active {\n    color: var(--primary-text);\n}\n\n.cover {\n    position: fixed;\n    width: 100vw;\n    height: 100vh;\n    background-color: var(--primary-text);\n    z-index: 10;\n    top: 0;\n    left: 0;\n    text-align: center;\n    padding-top: 30vh;\n    transition: all .3s;\n}\n\n.cover.done {\n    opacity: 0;\n    z-index: -1;\n}\n\n.cover blockquote {\n    color: var(--primary-text);\n    font-style: italic;\n}\n\n\n/* \n * EN\n */\n\n\n/* LAYOUT */\n\n.en body {\n    margin: 0;\n    padding: 0;\n}\n\n.en main {\n    width: 825px;\n    max-width: 100%;\n    margin: 2em auto;\n    padding: 40px;\n}\n\n\n/* Typography */\n\n.en a {\n    color: #0070e0;\n    text-decoration: none;\n}\n\n\n/* TIMELINE */\n\n.en .social-link+.social-link {\n    margin-left: 1em;\n}\n\n.en .timeline {}\n\n.en .stories {\n    list-style: none;\n    padding-left: 0;\n}\n\n.en .stories .story {\n    position: relative;\n    margin: 3em 0;\n}\n\n.en .story.highlight:after {\n    content: \"⊙\";\n    position: absolute;\n    left: -1.5em;\n    top: -.25em;\n    transition: all .3s;\n}\n\n.en .story.highlight:hover:after {\n    color: #0070e0;\n    transform: scale(1.5);\n}\n\n.en .story .date {\n    font-size: .8em;\n    color: var(--primary-text);\n}\n\n.en .story .content {\n    color: var(--primary-text);\n}\n\n\n/* CONTENT */\n\n.en .content {\n    font-size: 16px;\n    line-height: 1.5em;\n}\n\n.en .content strong {\n    font-weight: bold;\n}\n\n.en .content img {\n    max-width: 50%;\n}\n\n.en .content ul {\n    list-style-type: disc;\n    padding-left: 2em;\n}\n\n.en .content blockquote {\n    position: relative;\n    margin: 1em 0;\n    padding-left: 1em;\n    border-left: 2px solid #637282;\n}\n\n\n/* \n * CN\n */\n\n\n/* LAYOUT */\n\nhtml.cn {\n    height: 100%;\n}\n\n.cn body {\n    margin: 0;\n    padding: 0;\n    height: 100%;\n}\n\n.cn main {\n    position: relative;\n    margin: 0;\n    min-width: 100vw;\n    padding-top: 5vh;\n    padding-right: 1em;\n    height: 80vh;\n    writing-mode: vertical-rl;\n    -webkit-writing-mode: vertical-rl;\n}\n\n.cn main a {\n    border: 4px double var(--primary-text);\n    border-radius: 2px;\n    padding: .2rem 0;\n    margin: .2rem 0;\n}\n\n\n/* Typography */\n\n.cn a {\n    text-decoration: none;\n    color: var(--primary-text);\n    transition: color .3s, border .3s;\n}\n\n.cn a:visited {\n    color: var(--primary-text);\n}\n\n.cn a:hover,\n.cn a:active {\n    color: #007FFF;\n    border-color: #007FFF;\n}\n\n\n/* TIMELINE */\n\n.cn .timeline {}\n\n.cn .stories {\n    margin: 0;\n    padding: 0;\n    list-style: none;\n}\n\n.cn .stories .story {\n    position: relative;\n    margin: 1rem 1rem 0 3rem;\n    padding-left: 1rem;\n}\n\n.cn .story.highlight:after {\n    content: \" \";\n    position: absolute;\n    top: -2rem;\n    right: -1rem;\n    width: 1rem;\n    height: 1rem;\n    border-radius: 50%;\n    background-color: var(--primary-text);\n    transition: background-color .3s, transform .3s;\n    transform-origin: center center;\n}\n\n.cn .story.highlight:hover:after {\n    background-color: #007FFF;\n    transform: scale(1.3);\n}\n\n.cn .story .date {\n    position: absolute;\n    top: 0;\n    right: -1.5rem;\n    font-size: .6rem;\n    font-weight: bold;\n}\n\n.cn .story .content {\n    color: var(--primary-text);\n}\n\n\n/* CONTENT */\n\n.cn .content::first-letter {\n    color: #007FFF;\n}\n\n.cn .content p {\n    line-height: 1.5rem;\n}\n\n.cn .content strong {\n    font-weight: bold;\n}\n\n.cn .content img {\n    max-height: 50%;\n}\n\n.cn .content ul {\n    list-style: none;\n    padding-left: 0;\n    padding-top: 0;\n}\n\n.cn .content ul li {\n    position: relative;\n    margin: 0 .5rem;\n    padding-top: 1rem;\n}\n\n.cn .content ul li:after {\n    content: \" \";\n    position: absolute;\n    top: 0;\n    left: 0;\n    right: 0;\n    border-top: 2px solid #EAEAEA;\n    transition: border .3s;\n}\n\n.cn .content ul li:hover:after {\n    border-top-color: var(--primary-text);\n}\n\n.cn .content blockquote {\n    position: relative;\n    margin: 0;\n    padding: 1.5rem .5rem;\n    font-style: italic;\n    background-image: linear-gradient(to bottom, #EAEAEA, rgba(255, 255, 255, 0) 20%);\n}\n\n\n/* COMMENTS */\n\n.comments {\n    display: block;\n    position: fixed;\n    cursor: pointer;\n    bottom: 5vh;\n    right: 10vw;\n    animation: boat 10s infinite alternate;\n}\n\n@keyframes boat {\n    0% {\n        transform: translate3d(0, 0, 0);\n    }\n    30% {\n        transform: translate3d(.3rem, -.5rem, 0);\n    }\n    70% {\n        transform: translate3d(-.4rem, .2rem, 0);\n    }\n    100% {\n        transform: translate3d(.2rem, -.7rem, 0);\n    }\n}\n\n\n/* RESUME */\n\n.resume {\n    width: 825px;\n    max-width: 100%;\n    margin: 1em auto;\n    padding: 40px;\n    color: var(--primary-text);\n}\n\n.resume a {\n    color: #0070e0;\n    text-decoration: none;\n}\n\n.resume blockquote {\n    font-family: serif;\n    margin: 1em 0;\n    padding-left: 1em;\n    border-left: 2px solid #637282;\n    font-style: italic;\n}\n\n.resume>section {\n    margin: 4em 0;\n}\n\n.resume>section>article {\n    margin: 2em 0;\n}\n\n.resume .title {\n    font-weight: bold;\n    color: var(--primary-text);\n    margin-bottom: 0;\n}\n\n.resume .sub {\n    font-size: 1em;\n    color: var(--primary-text);\n}\n\n.resume .time {\n    font-size: 1em;\n    color: var(--primary-text);\n}\n\n.resume .title+.sub,\n.resume .sub+.time {\n    margin-top: .5em;\n}\n\n.resume .logo {\n    max-width: 70px;\n    float: left;\n}\n\n.resume .title,\n.resume .sub,\n.resume .time,\n.resume .description {\n    margin-left: 100px;\n}\n\n.resume .description {\n    padding: .5em 0;\n    font-size: .9em;\n    line-height: 1.5em;\n}\n\n@media screen and (max-width: 600px) {\n    .resume {\n        padding: 20px;\n    }\n    .resume .logo {\n        max-width: 50px;\n    }\n    .resume .title,\n    .resume .sub,\n    .resume .time,\n    .resume .description {\n        margin-left: 70px;\n    }\n}\n\n\n/* RESUME SECTIONS */\n\n.resume-self {}\n\n.resume-self .contact-list {\n    list-style: none;\n    margin: 0;\n    padding: 0;\n}\n\n.resume-self .contact-list-item {\n    display: inline-block;\n    margin-right: .5em;\n}\n\n\n/* COMMENTS BOX */\n\n.comments-box {\n    height: 100%;\n    overflow-y: scroll;\n    padding-top: 2em;\n}\n\n.comments-box .close {\n    position: absolute;\n    top: 2em;\n    right: 2em;\n    cursor: pointer;\n}\n</style>"
  },
  {
    "path": "docs/pages/plan/2021/2021-list.md",
    "content": "---\ntitle: \"2021年度计划\"\npermalink: \"2021-plan\"\nhideLastUpdated: True\ncategories: noRight\n---\n\n2021年度计划"
  },
  {
    "path": "docs/pages/plan/plan-list.md",
    "content": "---\ntitle: \"年度计划\"\npermalink: \"plan-list\"\nhideLastUpdated: True\ncategories: noRight\n---\n\n年度列表"
  },
  {
    "path": "docs/pages/update/README.md",
    "content": "---\ntitle: \"网站更新\"\npermalink: \"update\"\ncategories: noRight\n---\n\n<template>\n  <div class=\"edition-doc\">\n    <el-timeline>\n      <el-timeline-item icon=\"el-icon-more\" timestamp=\"2021/5/25\" placement=\"top\">\n        <el-card>\n          <h4>日常修复</h4>\n          <p>bug: 修复友链移动端适配问题</p>\n          <p>doc: 新增两个友链（开心）</p>\n        </el-card>\n      </el-timeline-item>\n      <el-timeline-item icon=\"el-icon-more\" timestamp=\"2021/5/24\" placement=\"top\">\n        <el-card>\n          <h4>日常修复</h4>\n          <p>bug: 修复icon window 展示的问题（直接取消了icon）</p>\n          <p>bug: 解决暗黑模式插件点击第一次失效问题</p>\n          <p>doc: 增加网站更新栏目，调整友链位置</p>\n          <p>style: 优化友链展示效果</p>\n          <p>delete: 暂时取消网站介绍，个人计划两个栏目（因为没啥内容，所以需要先想一下）</p>\n        </el-card>\n      </el-timeline-item>\n    </el-timeline>\n  </div>\n</template>\n\n<script>\nexport default {\n  data() {\n    return {\n    }\n  },\n  mounted() {\n  },\n  methods: {\n  }\n}\n</script>\n\n<style scoped>\n.edition-doc {\n  margin: 50px;\n}\np {\n    line-height: none;\n}\n</style>\n\n"
  },
  {
    "path": "docs/pages/website.md",
    "content": "---\ntitle: \"网站介绍\"\npermalink: \"website\"\nhideLastUpdated: True\n---\n\n## 导航栏说明\n\n- 前端体系：放置前端体系内容\n- 开源项目：放置开源项目说明，开源项目总结，开源项目文档\n- 年度计划：年度计划说明，年度计划执行，个人季报\n- 其他：\n    - 友链\n    - 导航\n    - 网站介绍\n    - 个人介绍\n\n### 前端体系\n\n通过标签分类的方式，同一种技术分类到一起，然后不断优化文章质量\n\n---\n\n### 开源项目\n\n展示形式：文章列表\n\n---\n\n### 年度计划\n\n最小粒度为季度，每季度输出季报，每年输出年报，要量化数据增长形式\n\n\n\n\n\n"
  },
  {
    "path": "docs/quickcheck/1.前端/1.HTML和HTML5.md",
    "content": "---\ntitle: 1.HTML和HTML5\ndate: 2020-01-30 00:00:00\npermalink: quickcheck/1-1\n---\n\n# 1.HTML和HTML5\n\n## 🍲第一部分：常用的HTML标签，和常见的概念和用法\n\n---\n\n### 1.基础概念\n\n**基础概念**\n\n- 行内元素：与其他行内元素并排，不能设置宽高，默认的宽度就是文字的宽度\n- 块级元素：独占一行，不能与其他任何元素并列。能接受宽高，如果不设置宽度，那么宽度将默认变为父级的100%\n- 行内块元素：能设置宽高，与其他元素并排\n- 相互转换：display：inline（block 块级 | inline-block 行内块）\n\n**常见标签类型**\n\n- 行内元素：a，span，textarea，select，input，b，br...\n- 块级元素：div，h1~h6，ol，ul，p，hr，form，table ...\n- 行内块元素：img...\n\n---\n\n### 2.HTML4.1 常用标签\n\n::: tip\n[更详细请看...1.HTML基础](https://notes.itzkp.com/2.note/1.HTML/1.HTML基础.html)\n:::\n\n```html\n\n<!-- div, span, h1~h6，p，hr,等标签不作展示 -->\n\n<!-- img标签可以设置很多属性 -->\n<img src=\"图片地址\" title=\"文字悬停时候显示的文字\" alt=\"图像加载失败，显示的替换文字\" width=\"宽度\" height=\"高度\" ...>\n\n<a href=\"跳转地址\" target=\"目标窗口弹出方式\">文字或者图像</a>\n<!-- target: self为默认值，blank为在新窗口打开 -->\n\n<!-- 锚点定位 -->\n<!-- 1️⃣ 给a设置锚点 #idName -->\n<a href=\"#test\">跳转到目标锚点</a>\n<!-- 2️⃣ 设置目标锚点 -->\n<h3 id=\"test\">目标锚点</h3>\n\n<!-- 表格 -->\n<table>\n    <caption>我是表格标题</caption> \n    <thead>\n        <tr>\n            <th>表头1</th>\n            <th>表头2</th>\n            <th>表头3</th>\n        </tr>\n    </thead>\n    <tbody>\n        <tr>\n            <td>第一行1</td>\n            <td>第一行2</td>\n            <td>第一行3</td>\n        </tr>\n        <tr>\n            <td>第二行1</td>\n            <td>第二行2</td>\n            <td>第二行3</td>\n        </tr>\n    </tbody>\n    <tfoot>\n        <tr>\n            <td colspan=\"3\">备注：</td>\n        </tr>\n    </tfoot>\n</table>\n\n<!-- 列表（还有有序列表 和 自定义列表） -->\n<ul>\n    <li>1</li>\n    <li>2</li>\n    <li>3</li>\n    <li>\n        <div>4</div>\n    </li>\n</ul>\n\n<!-- 表单 -->\n<form action=\"提交到的url地址\" method=\"提交方式（取值是get & post）\" name=\"表单名称\">\n    <!-- input -->\n    账号：<input type=\"text\" value=\"请输入账号\" name=\"username\" />\n    密码：<input type=\"password\" name=\"password\" />\n\n    <!-- 通过相同 name 来实现 单选效果 -->\n    <!-- ❣️ 备注：checked 表示默认选中，常用于单选，多选场景 -->\n    性别：男 <input type=\"radio\" name=\"sex\" checked /> | 女 <input type=\"radio\" name=\"sex\" />\n\n    <!-- 多选也是通过 name 来实现 -->\n    爱好：🎧听歌 <input type=\"checkbox\" name=\"like\" /> | 🏀篮球 <input type=\"checkbox\" name=\"like\" /> | 🏊游泳 <input type=\"checkbox\" name=\"like\" />\n\n    <!-- 按钮组：提交 & 重置 都需要在表单域下才能生效，默认value值是 提交 和 重置 -->\n    <input type=\"submit\" />\n    <input type=\"reset\" />\n    <input type=\"button\" value=\"一个纯的按钮\" />\n\n    <!-- 其他：图片提交必须包含src属性 -->\n    <input type=\"image\" src=\"\" />\n    <input type=\"file\" />\n\n    <label>\n        账号：<input type=\"text\" value=\"请输入账号\" name=\"username\" />\n    </label>\n\n    <textarea cols=\"每行中的字符数\" rows=\"显示的行数\">\n        文本内容\n    </textarea> \n\n    <select>\n        <!-- selected 表示默认选定项 -->\n        <option selected>--请选择省份--</option>\n        <option>北京</option>\n        <option>上海</option>\n        <option>深圳</option>\n    </select>\n</form>\n\n<b>粗体展示</b>\n<strong>粗体展示</strong>\n<i>斜体展示</i>\n<em>斜体展示</em>\n<s>删除线展示</s>\n<del>删除线展示</del>\n<u>下划线展示</u>\n<ins>下划线展示</ins>\n\n\n```\n\n---\n\n### 3.HTML5语义化标签的用法\n\n---\n\n## 🥓第二部分：Canvas\n\n### 1.canvas基础操作\n\n```js\nlet canvas = document.getElementById('can')\nlet ctx = canvas.getContext('2d') // 这个可以理解为画笔\n\n// 线（直线，三角形...）\nctx.moveTo(x, y)\nctx.lineTo(x, y)\nctx.arcTo(B点x， By, C点x, C点y, 弧的数值) // 直线 + 圆弧（可以做圆角矩形）\n\n// 矩形\nctx.rect(x, y, 宽度, 高度) // 画矩形\nctx.strokeRect(x, y, 宽度, 高度) // 直接画出来了，都不用写构建路径\nctx.fillRect(x, y, 宽度, 高度) // 直接画出来了，都不用写填充路径\n\n// 圆形（半圆，扇形，弧线，圆形）\nctx.arc(圆心x, 圆心y, 半径, 弧度, 方向)\n\n// 贝塞尔曲线\nctx.quadraticCurveTo(x1, y1, x2, y2); // 二次贝塞尔曲线（除了起点，还需要另外两个点）\nctx.bezierCurveTo(x1, y1, x2, y2, x3, y3); // 三次贝塞尔曲线（除了起点，还需要三个点）\n\n// 设置样式\nctx.fillStyle = 'red' // 设置填充颜色\nctx.strokeStyle = 'blue' // 设置填充颜色\nctx.lineWidth = 3 // 设置线条宽度\nctx.font = '24px 黑体'\n\nctx.fillText('实体文字', 文字显示的x, 文字显示的y); // 设置文字\nctx.strokeText('空心文字', 文字显示的x, 文字显示的y); // 设置文字\n\n// 坐标平移 && 旋转 && 缩放\nctx.translate(100, 100) // 修改坐标原点（坐标平移）\nctx.rotate(Math.PI) // 旋转（单位是弧度，并且是根据坐标原点进行的旋转）\nctx.scale(x点倍数, y点倍数) // 缩放\n\n// 保存和使用之前坐标系\nctx.save() // 保存之前坐标系（可以保存坐标系的平移数据，缩放数据，旋转数据）\nctx.restore() // 恢复之前的坐标系\n\n// 清除画布\nctx.clearRect(x, y, 宽度, 高度) \n\n// 重新开启一个路径\nctx.beginPath()\n\nctx.closePath() // 闭合路径，针对一个路径才能闭合\nctx.stroke() // 构建路径\nctx.fill() // 构建填充路径\n```\n\n---\n\n### 2.其他操作\n\n```js\n// 填充图片（纹理的填充是以坐标系原点进行填充的）\nlet img = new Image()\nimg.src = 'https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/github%E5%9B%BE%E7%89%87/notes/3.png'\nimg.onload = function () {\n    ctx.translate(100, 100)\n    ctx.fillStyle = ctx.createPattern(img, 'no-repeat')\n    ctx.fillRect(0, 0, 100, 100)\n}\n\n// 线性渐变填充\nlet bg = ctx.createLinearGradient(100, 100, 200, 200);\nbg.addColorStop(0, 'white'); // 渐变起点\nbg.addColorStop(1, 'black'); // 渐变终点（当然中间也能写多个阶段的值）\nctx.fillStyle = bg\nctx.fillRect(100, 100, 100, 100)\n\n// 辐射渐变\nlet bg = ctx.createRadialGradient(150, 150, 0, 180, 180, 180)\nbg.addColorStop(0, 'white'); // 渐变起点\nbg.addColorStop(1, 'black'); // 渐变终点（当然中间也能写多个阶段的值）\nctx.fillStyle = bg\nctx.fillRect(100, 100, 100, 100)\n\n// 阴影\nctx.shadowColor = 'red'\nctx.shadowBlur = 10;\nctx.fillRect(100, 100, 100, 100)\n\n// 圆角矩形\nctx.moveTo(100, 110) // y轴多了10，是一个小技巧\nctx.arcTo(100, 200, 200, 200, 10)\nctx.arcTo(200, 200, 200, 100, 10)\nctx.arcTo(200, 100, 100, 100, 10)\nctx.arcTo(100, 100, 100, 200, 10)\nctx.stroke()\n```\n\n> [更详细内容...前端体系/canvas（画布）](https://notes.itzkp.com/2.note/1.HTML/2.HTML5.html#%F0%9F%8D%9B%E7%AC%AC%E5%9B%9B%E9%83%A8%E5%88%86%EF%BC%9Acanvas%EF%BC%88%E7%94%BB%E5%B8%83%EF%BC%89)\n\n\n---\n\n## 🥒第三部分：websocket\n\n**基础使用**\n\n```js\n\nlet socket = new WebSocket('ws://...') // 使用的是ws协议\n\n// socket 完全打开并准备通信时候就会调用这个处理函数\nsocket.onpen = function () {\n\n}\n\n// socket 接收服务器消息\nsocket.onmessage = function (e) {\n\n}\n\n// 使用 postMessage() 向web服务发送一个消息\nsocket.postMessage('Hello Server')\n\n```\n\n---\n\n\n## 🌶第四部分：本地存储\n\n**localStorage：每个浏览器都为本地存储提供了5MB~10MB的空间，除非主动删除，否则是不会消失的**\n\n```js\n\n// 存\nlocalStorage.setItem('key', 'value')\n\n// 取\nlocalStorage.getItem('key')\n\n// 属性\nlocalStorage.length // 告诉我们localStorage有多少数据项\nlocalStorage.key(i) // 传入index，可以拿到对象的数据（可以和length一起，做循环遍历）\n\n// 方法\nlocalStorage.removeItem(key) // 根据key值，清除对应的数据项\nlocalStorage.clear() // 会删除当前页面关联的所有数据项\n```\n\n**sessionStorage：支持的API和上面完全相同，不同的地方在于，这个浏览器关闭之后，本地存储的数据项就会被删除**\n\n---\n\n## 🍞第五部分：地理定位\n\n```js\n\n// navigator.geolocation.getCurrentPosition(成功回调，失败回调，配置参数)\n\nnavigator.geolocation.getCurrentPosition( res => {\n    console.log('成功回调：', res)\n    // res.coords.latitude 纬度\n    // res.coords.longitude 经度\n}, err => {\n    console.log('失败回调：', err)\n})\n\n```\n\n---\n\n## 🍯第六部分：HTML5视频标签（video）&& 音频标签（audio）\n\n### 1.视频标签（video）\n\n不再依赖第三方插件（Flash）\n\n```html\n<!-- \n    controls 浏览器会提供控件，允许用户控制视频和音频的播放\n    autoplay自动播放\n    poster=\"不播放视频时候显示的海报图片\"\n    loop 是否循环播放\n    preload 更加细粒化的控制如何加载视频\n    ...\n-->\n<video src=\"播放地址\" controls autoplay poster=\"不播放视频时候显示的海报图片\"></video>\n```\n\n```js\n\n// 视频加载完成触发的回调\nlet video = document.getElementById('video')\nvideo.addEventListener('ended', () => {\n    // 回调触发\n})\n\n// ...\n```\n\n---\n\n### 2.音频（audio元素）\n\n---\n\n## 🍖第七部分：Web工作线程\n\n\n---\n\n## 🍳第八部分：其他内容补充\n\n### 1.Modernizer.js（检测浏览器对一个API的支持 | HTML5/CSS3检测库）\n\n[Modernizer官方网址](https://modernizr.com/)\n[Modernizer官方文档](https://modernizr.com/docs)\n\n```js\n// 示例\nif (Modernizr.webgl){\n    console.log('浏览器支持webgl')\n} else {\n    console.log('浏览器不支持webgl')\n}\n```\n\n### 2.SVG\n\n\n### 3.离线Web应用\n\n**创建缓存清单文件（cache, manifest, file）**\n\n```html\n<!-- 将缓存清单文件的文件名加入到HTML标记中 -->\n<html manifest=\"main.manifest\">\n```\n\n**CACHE MANIFEST 必须以这个开头 | CACHE表示要缓存的文件**\n\n```js\nCACHE MANIFEST\nCACHE:\nmain.html\nmain.css\nmain.js\n```\n\n**备注：如果在服务器上，还需要设置 AddType text/cache-manifest .manifest 这一行，用来提供正确的MIME类型**\n\n---\n\n## 📚参考列表（致敬）\n"
  },
  {
    "path": "docs/quickcheck/1.前端/2.CSS和CSS3速查.md",
    "content": "---\ntitle: 2.CSS和CSS3速查\ndate: 2020-01-30 00:00:00\npermalink: quickcheck/1-2\n---\n\n# 2.CSS和CSS3速查\n\n## 🕊第一部分：常用布局\n\n---\n\n### 🔥1.flex布局\n\n基本概念：\n\n<img src=\"https://www.runoob.com/wp-content/uploads/2015/07/3791e575c48b3698be6a94ae1dbff79d.png\" />\n\n- 🔥flex-direction（决定主轴方向）：row | row-reverse | column | column-reverse;\n  - row（默认值）：主轴为水平方向，起点在左端。\n  - row-reverse：主轴为水平方向，起点在右端。\n  - column：主轴为垂直方向，起点在上沿。\n  - column-reverse：主轴为垂直方向，起点在下沿\n- 🔥justify-content（项目在主轴上的对齐方式）：flex-start | flex-end | center | space-between | space-around;\n  - flex-start（默认值）：左对齐\n  - flex-end：右对齐\n  - center： 居中\n  - space-between：两端对齐，项目之间的间隔都相等。\n  - space-around：每个项目两侧的间隔相等。所以，项目之间的间隔比项目与边框的间隔大一倍\n- 🔥align-items（项目在交叉轴上如何对齐）：flex-start | flex-end | center | baseline | stretch;\n  - flex-start：交叉轴的起点对齐。\n  - flex-end：交叉轴的终点对齐。\n  - center：交叉轴的中点对齐。\n  - baseline: 项目的第一行文字的基线对齐。\n  - stretch（默认值）：如果项目未设置高度或设为auto，将占满整个容器的高度\n- [更多访问](https://www.runoob.com/w3cnote/flex-grammar.html)\n\n\n---\n\n### 2.网格布局\n\n---\n\n### 3.圣杯布局\n\n---\n\n### 4.双飞翼布局\n\n---\n\n### 5.清除浮动（float）\n\n```html\n<div class=\"clearfix\">\n  <div class=\"floated\">float a</div>\n  <div class=\"floated\">float b</div>\n  <div class=\"floated\">float c</div>\n</div>\n```\n\n```css\n.clearfix::after {\n  content: '';\n  display: block;\n  clear: both;\n}\n.floated {\n  float: left;\n}\n```\n\n**效果展示**\n\n<img src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/1.quickcheck/1.%E5%89%8D%E7%AB%AF/1.%E5%B8%83%E5%B1%80%E4%B8%8E%E6%A0%B7%E5%BC%8F%E9%80%9F%E6%9F%A5/4.png\" />\n\n---\n\n### 6.子盒子撑开父盒子，让父盒子的高随内容自适应\n\n```css\nheight: auto\n```\n\n---\n\n### 7.将元素垂直居中于另一个元素\n\n```html\n<div class=\"ghost-trick\">\n  <div class=\"ghosting\"><p>Vertically centered without changing the position property.</p></div>\n</div>\n```\n\n```css\n.ghosting {\n  height: 300px;\n  background: #0ff;\n}\n.ghosting:before {\n  content: '';\n  display: inline-block;\n  height: 100%;\n  vertical-align: middle;\n}\np {\n  display: inline-block;\n  vertical-align: middle;\n}\n```\n\n<img src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/1.quickcheck/1.%E5%89%8D%E7%AB%AF/1.%E5%B8%83%E5%B1%80%E4%B8%8E%E6%A0%B7%E5%BC%8F%E9%80%9F%E6%9F%A5/12.png\" />\n\n---\n\n### 8.恒定宽高比\n\n```html\n<div class=\"constant-width-to-height-ratio\"></div>\n```\n\n```css\n.constant-width-to-height-ratio {\n  background: #333;\n  width: 50%;\n}\n.constant-width-to-height-ratio::before {\n  content: '';\n  padding-top: 100%;\n  float: left;\n}\n.constant-width-to-height-ratio::after {\n  content: '';\n  display: block;\n  clear: both;\n}\n```\n\n---\n\n## 🐑第二部分：常用样式\n\n### 1.重置样式\n\n**reset.css**\n\n```css\n/* http://meyerweb.com/eric/tools/css/reset/ \n   v2.0 | 20110126\n   License: none (public domain)\n*/\n\nhtml, body, div, span, applet, object, iframe,\nh1, h2, h3, h4, h5, h6, p, blockquote, pre,\na, abbr, acronym, address, big, cite, code,\ndel, dfn, em, img, ins, kbd, q, s, samp,\nsmall, strike, strong, sub, sup, tt, var,\nb, u, i, center,\ndl, dt, dd, ol, ul, li,\nfieldset, form, label, legend,\ntable, caption, tbody, tfoot, thead, tr, th, td,\narticle, aside, canvas, details, embed, \nfigure, figcaption, footer, header, hgroup, \nmenu, nav, output, ruby, section, summary,\ntime, mark, audio, video {\n\tmargin: 0;\n\tpadding: 0;\n\tborder: 0;\n\tfont-size: 100%;\n\tfont: inherit;\n\tvertical-align: baseline;\n}\n/* HTML5 display-role reset for older browsers */\narticle, aside, details, figcaption, figure, \nfooter, header, hgroup, menu, nav, section {\n\tdisplay: block;\n}\nbody {\n\tline-height: 1;\n}\nol, ul {\n\tlist-style: none;\n}\nblockquote, q {\n\tquotes: none;\n}\nblockquote:before, blockquote:after,\nq:before, q:after {\n\tcontent: '';\n\tcontent: none;\n}\ntable {\n\tborder-collapse: collapse;\n\tborder-spacing: 0;\n}\n```\n\n---\n\n**normalize.css**\n\n[内容太多不复制了，查看这个粘贴吧](https://necolas.github.io/normalize.css/latest/normalize.css)\n\n### 2.创建加载动画\n\n**加载动画一**\n\n```html\n<div class=\"bouncing-loader\">\n  <div></div>\n  <div></div>\n  <div></div>\n</div>\n```\n\n```css\n@keyframes bouncing-loader {\n  to {\n    opacity: 0.1;\n    transform: translate3d(0, -1rem, 0);\n  }\n}\n.bouncing-loader {\n  display: flex;\n  justify-content: center;\n}\n.bouncing-loader > div {\n  width: 1rem;\n  height: 1rem;\n  margin: 3rem 0.2rem;\n  background: #8385aa;\n  border-radius: 50%;\n  animation: bouncing-loader 0.6s infinite alternate;\n}\n.bouncing-loader > div:nth-child(2) {\n  animation-delay: 0.2s;\n}\n.bouncing-loader > div:nth-child(3) {\n  animation-delay: 0.4s;\n}\n```\n\n**效果演示**\n\n<img src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/1.quickcheck/1.%E5%89%8D%E7%AB%AF/1.%E5%B8%83%E5%B1%80%E4%B8%8E%E6%A0%B7%E5%BC%8F%E9%80%9F%E6%9F%A5/1.gif\" />\n\n---\n\n**加载动画二**\n\n```html\n<div class=\"donut\"></div>\n```\n\n```css\n@keyframes donut-spin {\n  0% {\n    transform: rotate(0deg);\n  }\n  100% {\n    transform: rotate(360deg);\n  }\n}\n.donut {\n  display: inline-block;\n  border: 4px solid rgba(0, 0, 0, 0.1);\n  border-left-color: #7983ff;\n  border-radius: 50%;\n  width: 30px;\n  height: 30px;\n  animation: donut-spin 1.2s linear infinite;\n}\n```\n\n**效果展示**\n\n<img src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/1.quickcheck/1.%E5%89%8D%E7%AB%AF/1.%E5%B8%83%E5%B1%80%E4%B8%8E%E6%A0%B7%E5%BC%8F%E9%80%9F%E6%9F%A5/10.gif\" />\n\n---\n\n### 3.按钮边框动画\n\n```html\n<div class=\"button-border\"><button class=\"button\">Submit</button></div>\n```\n\n```css\n.button {\n  background-color: #c47135;\n  border: none;\n  color: #ffffff;\n  outline: none;\n  padding: 12px 40px 10px;\n  position: relative;\n}\n.button:before,\n.button:after {\n  border: 0 solid transparent;\n  transition: all 0.25s;\n  content: '';\n  height: 24px;\n  position: absolute;\n  width: 24px;\n}\n.button:before {\n  border-top: 2px solid #c47135;\n  left: 0px;\n  top: -5px;\n}\n.button:after {\n  border-bottom: 2px solid #c47135;\n  bottom: -5px;\n  right: 0px;\n}\n.button:hover {\n  background-color: #c47135;\n}\n.button:hover:before,\n.button:hover:after {\n  height: 100%;\n  width: 100%;\n}\n```\n\n**效果演示**\n\n<img src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/1.quickcheck/1.%E5%89%8D%E7%AB%AF/1.%E5%B8%83%E5%B1%80%E4%B8%8E%E6%A0%B7%E5%BC%8F%E9%80%9F%E6%9F%A5/2.gif\" />\n\n---\n\n### 4.使用CSS创建图形\n\n**圆形**\n\n```html\n<div class=\"circle\"></div>\n```\n\n```css\n.circle {\n  border-radius: 50%;\n  width: 2rem;\n  height: 2rem;\n  background: #333;\n}\n```\n\n**效果演示**\n\n<img src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/1.quickcheck/1.%E5%89%8D%E7%AB%AF/1.%E5%B8%83%E5%B1%80%E4%B8%8E%E6%A0%B7%E5%BC%8F%E9%80%9F%E6%9F%A5/3.png\" />\n\n---\n\n**三角形**\n\n```html\n<div class=\"triangle\"></div>\n```\n\n```css\n.triangle {\n  width: 0;\n  height: 0;\n  border-top: 20px solid #333;\n  border-left: 20px solid transparent;\n  border-right: 20px solid transparent;\n}\n```\n\n<img src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/1.quickcheck/1.%E5%89%8D%E7%AB%AF/1.%E5%B8%83%E5%B1%80%E4%B8%8E%E6%A0%B7%E5%BC%8F%E9%80%9F%E6%9F%A5/25.png\" />\n\n\n\n---\n\n### 5.li标签计数器\n\n```html\n<ul>\n  <li>List item</li>\n  <li>List item</li>\n  <li>\n    List item\n    <ul>\n      <li>List item</li>\n      <li>List item</li>\n      <li>List item</li>\n    </ul>\n  </li>\n</ul>\n```\n```css\nul {\n  counter-reset: counter;\n}\nli::before {\n  counter-increment: counter;\n  content: counters(counter, '.') ' ';\n}\n```\n\n**效果展示**\n\n<img src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/1.quickcheck/1.%E5%89%8D%E7%AB%AF/1.%E5%B8%83%E5%B1%80%E4%B8%8E%E6%A0%B7%E5%BC%8F%E9%80%9F%E6%9F%A5/5.png\" />\n\n---\n\n### 6.自定义滚动条\n\n```html\n<div class=\"custom-scrollbar\">\n  <p>\n    Lorem ipsum dolor sit amet consectetur adipisicing elit.<br />\n    Iure id exercitationem nulla qui repellat laborum vitae, <br />\n    molestias tempora velit natus. Quas, assumenda nisi. <br />\n    Quisquam enim qui iure, consequatur velit sit?\n  </p>\n</div>\n```\n```css\n.custom-scrollbar {\n  height: 70px;\n  overflow-y: scroll;\n}\n/* To style the document scrollbar, remove `.custom-scrollbar` */\n.custom-scrollbar::-webkit-scrollbar {\n  width: 8px;\n}\n.custom-scrollbar::-webkit-scrollbar-track {\n  box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3);\n  border-radius: 10px;\n}\n.custom-scrollbar::-webkit-scrollbar-thumb {\n  border-radius: 10px;\n  box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.5);\n}\n```\n\n**效果展示**\n\n<img src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/1.quickcheck/1.%E5%89%8D%E7%AB%AF/1.%E5%B8%83%E5%B1%80%E4%B8%8E%E6%A0%B7%E5%BC%8F%E9%80%9F%E6%9F%A5/6.gif\" />\n\n---\n\n### 7.自定义文本选择效果\n\n```html\n<p class=\"custom-text-selection\">Select some of this text.</p>\n```\n\n```css\n::selection {\n  background: aquamarine;\n  color: black;\n}\n.custom-text-selection::selection {\n  background: deeppink;\n  color: white;\n}\n```\n\n**效果展示**\n\n<img src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/1.quickcheck/1.%E5%89%8D%E7%AB%AF/1.%E5%B8%83%E5%B1%80%E4%B8%8E%E6%A0%B7%E5%BC%8F%E9%80%9F%E6%9F%A5/7.gif\" />\n\n---\n\n### 8.使文本内容无法被选择\n\n```html\n<p>You can select me.</p>\n<p class=\"unselectable\">You can't select me!</p>\n```\n\n```css\n.unselectable {\n  user-select: none;\n}\n```\n\n<img src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/1.quickcheck/1.%E5%89%8D%E7%AB%AF/1.%E5%B8%83%E5%B1%80%E4%B8%8E%E6%A0%B7%E5%BC%8F%E9%80%9F%E6%9F%A5/9.gif\" />\n\n\n---\n\n### 9.自定义变量\n\n```html\n<p class=\"custom-variables\">CSS is awesome!</p>\n```\n\n```css\n:root {\n  /* 在此处放置变量以全局使用变量. */\n}\n.custom-variables {\n  --some-color: #da7800;\n  --some-keyword: italic;\n  --some-size: 1.25em;\n  --some-complex-value: 1px 1px 2px whitesmoke, 0 0 1em slategray, 0 0 0.2em slategray;\n  color: var(--some-color);\n  font-size: var(--some-size);\n  font-style: var(--some-keyword);\n  text-shadow: var(--some-complex-value);\n}\n```\n\n**效果展示**\n\n<img src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/1.quickcheck/1.%E5%89%8D%E7%AB%AF/1.%E5%B8%83%E5%B1%80%E4%B8%8E%E6%A0%B7%E5%BC%8F%E9%80%9F%E6%9F%A5/8.png\" />\n\n---\n\n### 10.动态阴影（基于元素本身颜色的阴影）\n\n```html\n<div class=\"dynamic-shadow\"></div>\n```\n\n```css\n.dynamic-shadow {\n  position: relative;\n  width: 10rem;\n  height: 10rem;\n  background: linear-gradient(75deg, #6d78ff, #00ffb8);\n  z-index: 1;\n}\n.dynamic-shadow::after {\n  content: '';\n  width: 100%;\n  height: 100%;\n  position: absolute;\n  background: inherit;\n  top: 0.5rem;\n  filter: blur(0.4rem);\n  opacity: 0.7;\n  z-index: -1;\n}\n```\n\n**效果展示**\n\n<img src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/1.quickcheck/1.%E5%89%8D%E7%AB%AF/1.%E5%B8%83%E5%B1%80%E4%B8%8E%E6%A0%B7%E5%BC%8F%E9%80%9F%E6%9F%A5/11.png\" />\n\n---\n\n### 11.在容器中合适的展示图像\n\n更改图像在其容器内的适合度和位置，同时保留其纵横比。以前只能使用背景图像和background-size属性。\n\n```html\n<img class=\"image image-contain\" src=\"https://picsum.photos/600/200\" />\n<img class=\"image image-cover\" src=\"https://picsum.photos/600/200\" />\n```\n\n```css\n.image {\n  background: #34495e;\n  border: 1px solid #34495e;\n  width: 200px;\n  height: 200px;\n}\n.image-contain {\n  object-fit: contain;\n  object-position: center;\n}\n.image-cover {\n  object-fit: cover;\n  object-position: right top;\n}\n```\n\n**效果展示**\n\n<img src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/1.quickcheck/1.%E5%89%8D%E7%AB%AF/1.%E5%B8%83%E5%B1%80%E4%B8%8E%E6%A0%B7%E5%BC%8F%E9%80%9F%E6%9F%A5/13.png\" />\n\n---\n\n### 12.渐变文字\n\n```html\n<p class=\"gradient-text\">Gradient text</p>\n```\n\n```css\n.gradient-text {\n  background: -webkit-linear-gradient(pink, red);\n  -webkit-text-fill-color: transparent;\n  -webkit-background-clip: text;\n}\n```\n\n**效果展示**\n\n<img src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/1.quickcheck/1.%E5%89%8D%E7%AB%AF/1.%E5%B8%83%E5%B1%80%E4%B8%8E%E6%A0%B7%E5%BC%8F%E9%80%9F%E6%9F%A5/14.png\" />\n\n---\n\n### 13.悬停效果动画\n\n**悬停阴影框动画**\n\n```html\n<p class=\"hover-shadow-box-animation\">Box it!</p>\n```\n\n```css\n.hover-shadow-box-animation {\n  display: inline-block;\n  vertical-align: middle;\n  transform: perspective(1px) translateZ(0);\n  box-shadow: 0 0 1px transparent;\n  margin: 10px;\n  transition-duration: 0.3s;\n  transition-property: box-shadow, transform;\n}\n.hover-shadow-box-animation:hover,\n.hover-shadow-box-animation:focus,\n.hover-shadow-box-animation:active {\n  box-shadow: 1px 10px 10px -10px rgba(0, 0, 24, 0.5);\n  transform: scale(1.2);\n}\n```\n\n**效果展示**\n\n<img src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/1.quickcheck/1.%E5%89%8D%E7%AB%AF/1.%E5%B8%83%E5%B1%80%E4%B8%8E%E6%A0%B7%E5%BC%8F%E9%80%9F%E6%9F%A5/15.gif\" />\n\n---\n\n**悬停下划线动画**\n\n```html\n<p class=\"hover-underline-animation\">Hover this text to see the effect!</p>\n```\n\n```css\n.hover-underline-animation {\n  display: inline-block;\n  position: relative;\n  color: #0087ca;\n}\n.hover-underline-animation::after {\n  content: '';\n  position: absolute;\n  width: 100%;\n  transform: scaleX(0);\n  height: 2px;\n  bottom: 0;\n  left: 0;\n  background-color: #0087ca;\n  transform-origin: bottom right;\n  transition: transform 0.25s ease-out;\n}\n.hover-underline-animation:hover::after {\n  transform: scaleX(1);\n  transform-origin: bottom left;\n}\n```\n\n**效果展示**\n\n<img src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/1.quickcheck/1.%E5%89%8D%E7%AB%AF/1.%E5%B8%83%E5%B1%80%E4%B8%8E%E6%A0%B7%E5%BC%8F%E9%80%9F%E6%9F%A5/16.gif\" />\n\n---\n\n**鼠标光标渐变跟踪**\n\n```html\n<button class=\"mouse-cursor-gradient-tracking\"><span>Hover me</span></button>\n```\n\n```css\n.mouse-cursor-gradient-tracking {\n  position: relative;\n  background: #7983ff;\n  padding: 0.5rem 1rem;\n  font-size: 1.2rem;\n  border: none;\n  color: white;\n  cursor: pointer;\n  outline: none;\n  overflow: hidden;\n}\n.mouse-cursor-gradient-tracking span {\n  position: relative;\n}\n.mouse-cursor-gradient-tracking::before {\n  --size: 0;\n  content: '';\n  position: absolute;\n  left: var(--x);\n  top: var(--y);\n  width: var(--size);\n  height: var(--size);\n  background: radial-gradient(circle closest-side, pink, transparent);\n  transform: translate(-50%, -50%);\n  transition: width 0.2s ease, height 0.2s ease;\n}\n.mouse-cursor-gradient-tracking:hover::before {\n  --size: 200px;\n}\n```\n\n```js\nvar btn = document.querySelector('.mouse-cursor-gradient-tracking')\nbtn.onmousemove = function(e) {\n  var x = e.pageX - btn.offsetLeft - btn.offsetParent.offsetLeft\n  var y = e.pageY - btn.offsetTop - btn.offsetParent.offsetTop\n  btn.style.setProperty('--x', x + 'px')\n  btn.style.setProperty('--y', y + 'px')\n}\n```\n\n**效果展示**\n\n<img src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/1.quickcheck/1.%E5%89%8D%E7%AB%AF/1.%E5%B8%83%E5%B1%80%E4%B8%8E%E6%A0%B7%E5%BC%8F%E9%80%9F%E6%9F%A5/17.gif\" />\n\n---\n\n### 14.:not 创造元素\n\n```html\n<ul class=\"css-not-selector-shortcut\">\n  <li>One</li>\n  <li>Two</li>\n  <li>Three</li>\n  <li>Four</li>\n</ul>\n```\n\n```css\n.css-not-selector-shortcut {\n  display: flex;\n}\nul {\n  padding-left: 0;\n}\nli {\n  list-style-type: none;\n  margin: 0;\n  padding: 0 0.75rem;\n}\nli:not(:last-child) {\n  border-right: 2px solid #d2d5e4;\n}\n```\n\n**效果展示**\n\n<img src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/1.quickcheck/1.%E5%89%8D%E7%AB%AF/1.%E5%B8%83%E5%B1%80%E4%B8%8E%E6%A0%B7%E5%BC%8F%E9%80%9F%E6%9F%A5/18.png\" />\n\n---\n\n### 15.溢出滚动渐变\n\n```html\n<div class=\"overflow-scroll-gradient\">\n  <div class=\"overflow-scroll-gradient__scroller\">\n    Lorem ipsum dolor sit amet consectetur adipisicing elit. <br />\n    Iure id exercitationem nulla qui repellat laborum vitae, <br />\n    molestias tempora velit natus. Quas, assumenda nisi. <br />\n    Quisquam enim qui iure, consequatur velit sit? <br />\n    Lorem ipsum dolor sit amet consectetur adipisicing elit.<br />\n    Iure id exercitationem nulla qui repellat laborum vitae, <br />\n    molestias tempora velit natus. Quas, assumenda nisi. <br />\n    Quisquam enim qui iure, consequatur velit sit?\n  </div>\n</div>\n```\n\n```css\n.overflow-scroll-gradient {\n  position: relative;\n}\n.overflow-scroll-gradient::after {\n  content: '';\n  position: absolute;\n  bottom: 0;\n  width: 240px;\n  height: 25px;\n  background: linear-gradient(\n    rgba(255, 255, 255, 0.001),\n    white\n  ); /* transparent keyword is broken in Safari */\n  pointer-events: none;\n}\n.overflow-scroll-gradient__scroller {\n  overflow-y: scroll;\n  background: white;\n  width: 240px;\n  height: 200px;\n  padding: 15px;\n  line-height: 1.2;\n}\n```\n\n**效果展示**\n\n<img src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/1.quickcheck/1.%E5%89%8D%E7%AB%AF/1.%E5%B8%83%E5%B1%80%E4%B8%8E%E6%A0%B7%E5%BC%8F%E9%80%9F%E6%9F%A5/19.gif\" />\n\n---\n\n### 16.漂亮的文字强调\n\n一个更好的替代方案text-decoration: underline或<u></u>下降器不会削减下划线。本机实现，text-decoration-skip-ink: auto但它对下划线的控制较少。\n\n```html\n<p class=\"pretty-text-underline\">Pretty text underline without clipping descending letters.</p>\n```\n\n```css\n.pretty-text-underline {\n  display: inline;\n  text-shadow: 1px 1px #f5f6f9, -1px 1px #f5f6f9, -1px -1px #f5f6f9, 1px -1px #f5f6f9;\n  background-image: linear-gradient(90deg, currentColor 100%, transparent 100%);\n  background-position: bottom;\n  background-repeat: no-repeat;\n  background-size: 100% 1px;\n}\n.pretty-text-underline::-moz-selection {\n  background-color: rgba(0, 150, 255, 0.3);\n  text-shadow: none;\n}\n.pretty-text-underline::selection {\n  background-color: rgba(0, 150, 255, 0.3);\n  text-shadow: none;\n}\n```\n\n**效果展示**\n\n<img src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/1.quickcheck/1.%E5%89%8D%E7%AB%AF/1.%E5%B8%83%E5%B1%80%E4%B8%8E%E6%A0%B7%E5%BC%8F%E9%80%9F%E6%9F%A5/20.png\" />\n\n---\n\n### 17.分割线\n\n**图形分割线**\n\n```html\n<div class=\"shape-separator\"></div>\n```\n\n```css\n.shape-separator {\n  position: relative;\n  height: 48px;\n  background: #333;\n}\n.shape-separator::after {\n  content: '';\n  background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 12'%3E%3Cpath d='m12 0l12 12h-24z' fill='%23fff'/%3E%3C/svg%3E\");\n  position: absolute;\n  width: 100%;\n  height: 12px;\n  bottom: 0;\n}\n```\n\n**效果展示**\n\n<img src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/1.quickcheck/1.%E5%89%8D%E7%AB%AF/1.%E5%B8%83%E5%B1%80%E4%B8%8E%E6%A0%B7%E5%BC%8F%E9%80%9F%E6%9F%A5/21.png\" />\n\n---\n\n**信封分割线**\n\n```js\n<hr style=\"content: '';\n    left: 0;\n    right: 0;\n    bottom: 0;\n    background: repeating-linear-gradient(-45deg, #ff6c6c 0, #ff6c6c 20%, transparent 0, transparent 25%, #1989fa 0, #1989fa 45%, transparent 0, transparent 50%);\n    height: 2px;\n    background-size: 80px;\" />\n```\n\n**效果展示**\n\n<hr style=\"content: '';\n    left: 0;\n    right: 0;\n    bottom: 0;\n    background: repeating-linear-gradient(-45deg, #ff6c6c 0, #ff6c6c 20%, transparent 0, transparent 25%, #1989fa 0, #1989fa 45%, transparent 0, transparent 50%);\n    height: 2px;\n    background-size: 80px;\" />\n\n---\n\n### 18.淡化非选中项\n\n```html\n<div class=\"sibling-fade\">\n  <span>Item 1</span> <span>Item 2</span> <span>Item 3</span> <span>Item 4</span>\n  <span>Item 5</span> <span>Item 6</span>\n</div>\n```\n\n```css\nspan {\n  padding: 0 1rem;\n  transition: opacity 0.2s;\n}\n.sibling-fade:hover span:not(:hover) {\n  opacity: 0.5;\n}\n```\n\n**效果展示**\n\n<img src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/1.quickcheck/1.%E5%89%8D%E7%AB%AF/1.%E5%B8%83%E5%B1%80%E4%B8%8E%E6%A0%B7%E5%BC%8F%E9%80%9F%E6%9F%A5/22.gif\" />\n\n---\n\n### 19.使用操作系统的本机字体\n\n```html\n<p class=\"system-font-stack\">This text uses the system font.</p>\n```\n\n```css\n.system-font-stack {\n  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu,\n    Cantarell, 'Helvetica Neue', Helvetica, Arial, sans-serif;\n}\n```\n\n**效果展示**\n\n<img src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/1.quickcheck/1.%E5%89%8D%E7%AB%AF/1.%E5%B8%83%E5%B1%80%E4%B8%8E%E6%A0%B7%E5%BC%8F%E9%80%9F%E6%9F%A5/23.png\" />\n\n---\n\n### 20.CSS创建切换开关\n\n```html\n<input type=\"checkbox\" id=\"toggle\" class=\"offscreen\" /> <label for=\"toggle\" class=\"switch\"></label>\n```\n\n```css\n.switch {\n  position: relative;\n  display: inline-block;\n  width: 40px;\n  height: 20px;\n  background-color: rgba(0, 0, 0, 0.25);\n  border-radius: 20px;\n  transition: all 0.3s;\n}\n.switch::after {\n  content: '';\n  position: absolute;\n  width: 18px;\n  height: 18px;\n  border-radius: 18px;\n  background-color: white;\n  top: 1px;\n  left: 1px;\n  transition: all 0.3s;\n}\ninput[type='checkbox']:checked + .switch::after {\n  transform: translateX(20px);\n}\ninput[type='checkbox']:checked + .switch {\n  background-color: #7983ff;\n}\n.offscreen {\n  position: absolute;\n  left: -9999px;\n}\n```\n\n**效果展示**\n\n<img src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/1.quickcheck/1.%E5%89%8D%E7%AB%AF/1.%E5%B8%83%E5%B1%80%E4%B8%8E%E6%A0%B7%E5%BC%8F%E9%80%9F%E6%9F%A5/24.gif\" />\n\n---\n\n### 21.截断文本\n\n**以省略号结尾**\n\n```html\n<p class=\"truncate-text\">If I exceed one line's width, I will be truncated.</p>\n```\n\n```css\n.truncate-text {\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n  width: 200px;\n}\n```\n\n**效果展示**\n\n<img src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/1.quickcheck/1.%E5%89%8D%E7%AB%AF/1.%E5%B8%83%E5%B1%80%E4%B8%8E%E6%A0%B7%E5%BC%8F%E9%80%9F%E6%9F%A5/26.png\" />\n\n---\n\n**淡化结束**\n\n```html\n<p class=\"truncate-text-multiline\">\n  Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut\n  labore et.\n</p>\n```\n\n```css\n.truncate-text-multiline {\n  overflow: hidden;\n  display: block;\n  height: 109.2px;\n  margin: 0 auto;\n  font-size: 26px;\n  line-height: 1.4;\n  width: 400px;\n  position: relative;\n}\n.truncate-text-multiline:after {\n  content: '';\n  position: absolute;\n  bottom: 0;\n  right: 0;\n  width: 150px;\n  height: 36.4px;\n  background: linear-gradient(to right, rgba(0, 0, 0, 0), #f5f6f9 50%);\n}\n```\n\n**效果展示**\n\n<img src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/1.quickcheck/1.%E5%89%8D%E7%AB%AF/1.%E5%B8%83%E5%B1%80%E4%B8%8E%E6%A0%B7%E5%BC%8F%E9%80%9F%E6%9F%A5/27.png\" />\n\n---\n\n### 22.斑马条纹列表\n\n```html\n<ul>\n  <li>Item 01</li>\n  <li>Item 02</li>\n  <li>Item 03</li>\n  <li>Item 04</li>\n  <li>Item 05</li>\n</ul>\n```\n\n```css\nli:nth-child(odd) {\n  background-color: #eee;\n}\n```\n\n**效果展示**\n\n<img src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/1.quickcheck/1.%E5%89%8D%E7%AB%AF/1.%E5%B8%83%E5%B1%80%E4%B8%8E%E6%A0%B7%E5%BC%8F%E9%80%9F%E6%9F%A5/28.png\" />\n\n---\n\n### 23.CSS抖动动画\n\n```css\n// 动画\nshake {\n    transform-origin: center center;\n    animation: shake 1.5s .2s ease-in-out both infinite;\n}\n\n@keyframes shake {\n    0%, 100% {\n        transform: rotate(0deg);\n        /* 这里可以设置中心点 */\n        transform-origin: 50% 0;\n    }\n\n    5% {\n        transform: rotate(2deg);\n    }\n\n    10%, 20%, 30% {\n        transform: rotate(-4deg);\n    }\n\n    15%, 25%, 35% {\n        transform: rotate(4deg);\n    }\n\n    40% {\n        transform: rotate(-2deg);\n    }\n\n    45% {\n        transform: rotate(2deg);\n    }\n\n    50% {\n        transform: rotate(0deg);\n    }\n}\n```\n\n---\n\n### 24.图片放大缩小动画\n\n```css\n.immediate-invitationd {\n    position: relative;\n    animation: mymove 2.5s infinite;\n    animation-timing-function: ease-in-out; /* 动画的速度曲线 */\n    animation-direction: alternate;/* 轮流反向播放动画。 */\n}\n\n@keyframes mymove {\n    0% {\n        transform: scale(1);  /* 开始为原始大小 */\n    }\n\n    25% {\n        transform: scale(.9); /* 0.9倍 */\n    }\n\n    50% {\n        transform: scale(1);\n    }\n\n    75% {\n        transform: scale(.9);\n    }\n}\n```\n\n---\n\n## 📚参考列表（致敬）\n\n- [30sCSS](https://30-seconds.github.io/30-seconds-of-css/#box-sizing-reset)\n- [reset.css](https://meyerweb.com/eric/tools/css/reset/)\n- [normalize.css](http://necolas.github.io/normalize.css/)\n"
  },
  {
    "path": "docs/quickcheck/1.前端/3.JS方法速查.md",
    "content": "---\ntitle: 3.JS方法速查\ndate: 2020-01-30 00:00:00\npermalink: quickcheck/1-3\n---\n\n# 3.JS方法速查\n\n> 此文章是我用过最多的文章，需要进行重构（重构未完成...）\n\n## 🍥第一部分：数组\n\n### 1.数组去重\n\n```js\nlet arrs = [1,2,2,3,3,6,5,5];\n\n// ES6\n[...new Set(arr)] // [1,2,3,6,5]\n// 此方法也能去除字符串中重复的项：[...new Set('ababbc')].join('') // abc\n\n// 其他去重方法\nfunction uniq(array){\n    let temp = [];\n    let l = array.length;\n    for(let i = 0; i < l; i++) {\n        for(let j = i + 1; j < l; j++){\n            if (array[i] === array[j]){\n                i++;\n                j = i;\n            }\n        }\n        temp.push(array[i]);\n    }\n    return temp;\n}\nconsole.log(uniq(arrs)); // [1,2,3,6,5]\n```\n\n**数组去重拓展（传参数 指定去除哪个重复的，未完成）**\n\n---\n\n### 2.数组合并\n\n```js\nlet arr1 = [1,2,3]\nlet arr2 = [4,5,6]\n\n// ES6\n[...arr1, ...arr2] // [1, 2, 3, 4, 5, 6]\n\n\n// 方法2：concat方法（挂载Array原型链上）\nlet c = a.concat(b);\nconsole.log(c); // [1, 2, 3, 4, 5, 6]\nconsole.log(a); // [1, 2, 3]  不改变本身\n// 备注：看似concat似乎是 数组对象的深拷贝，其实，concat 只是对数组的第一层进行深拷贝\n\n// 方法3：apply方法\nArray.prototype.push.apply(a, b);\nconsole.log(a); // [1, 2, 3, 4, 5, 6] 改变原目标数组\nconsole.log(b); // [4, 5, 6]\n```\n\n---\n\n### 3.数组排序（sort）\n    \n```js\nlet objArr = [\n  {name: 'test1', age: 20},\n  {name: 'test1', age: 22},\n  {name: 'test1', age: 21}\n]\n\n// 第一参数a， 第二参数b ---> a-b升序（从小到大）;b-a降序（从大到小），原理就是 两数计算，如果返回的是负数，就保留前者（我可能说的不对，欢迎纠正）\nobjArr.sort((a, b) => {\n  return a.age - b.age\n}) \n// 结果会按照年龄从小到大的顺序排列\n\n\n```\n\n---\n\n### 4.多维数组转一维数组（flat）\n\n```js\nlet arr = [1, [2], [[3], 4], 5];\n\n// ES6 数组的flat()\narr.flat() // [1, 2, Array(1), 4, 5] 如果这样写的话只能展开二维数组，但是可以加参数Infinity，就是能展开多维数组\narr.flat(Infinity) // [1, 2, 3, 4, 5] 注意如果原数组有空位，flat()方法会跳过空位\n\n// 其他方法\nconst deepFlatten = arr => [].concat(...arr.map(v => (Array.isArray(v) ? deepFlatten(v) : v)));\ndeepFlatten(arr); // [1,2,3,4,5]\n\n\n// 执行效率验证（拓展）\n// let start = new Date().getTime();\n// console.log('reduceDimension: ', deepFlatten([1, [2], [[3], 4], 5]);\n// console.log('耗时: ', new Date().getTime() - start); // *ms\n\n// ES6 数组的flatMap() 方法大家可以自行查阅一下，拓展下自己的知识面\n```\n\n---\n\n### 5.过滤数组（filter）\n\n```js\nlet json = [\n  { id: 1, name: 'john', age: 24 },\n  { id: 2, name: 'zkp', age: 21 },\n  { id: 3, name: 'mike', age: 50 }\n];\n\n// ES6\njson.filter( item => item.age > 22) // [{id: 1, name: 'john', age: 24}, { id: 3, name: 'mike', age: 50 }]\n\n// ES5\n\n```\n\n---\n\n### 6.判断数组中的项是否满足于某个条件（some，every）\n\n```javascript\nlet arr = [4, 2, 3]\n\n// ES6 some方法（有符合）\narr.some( item => item > 1) // true\narr.some( item => item > 3) // true\n\n// ES5 every（全符合）\n\narr.every(item => item > 1) // true\narr.every(item => item > 3) // false\n\n// 注意：上面两个有不同哦，一个是有符合的判定，一个是全符合的判定\n```\n\n---\n\n### 7.操作数组中的每一项，并使其按照一定的逻辑返回（map）\n\n```js\nvar potatos = [\n  { id: '1001', weight: 50 },\n  { id: '1002', weight: 80 },\n  { id: '1003', weight: 120 },\n  { id: '1004', weight: 40 }\n]\n\n// ES6写法\nconst fn = (arr, key) => arr.map(arr =>  arr[key])\n\nfn(potatos, 'id') // [\"1001\", \"1002\", \"1003\", \"1004\"]\nfn(potatos, 'weight') // [50, 80, 120, 40]\n```\n\n\n---\n\n### 8.其他常用的ES6 Array方法\n\n```js\n// forEach() 遍历数组\n\n// pop() 删除数组中最后一个元素，并返回该元素的值。此方法更改数组的长度\n\n// shift() 删除数组中第一个元素，并返回该元素的值。此方法更改数组的长度\n\n// push() 将一个或多个元素添加到数组的末尾，并返回该数组的新长度\n\n// unshift() 将一个或多个元素添加到数组的开头，并返回该数组的新长度(该方法修改原有数组)\n\n// 🔥Array.prototype.filter() 创建一个新数组, 其包含通过所提供函数实现的测试的所有元素，不会改变原有值，如果没符合的返回[]\nlet arr = [1, 2, 3]\narr.filter( x => x > 1) // [2, 3]\n\n// Array.prototype.join() 将一个数组（或一个类数组对象）的所有元素连接成一个字符串并返回这个字符串\n['Fire', 'Air', 'Water'].join() // \"Fire,Air,Water\"\n\n// Array.prototype.slice() 取出任意元素, | 参数一：从哪开始，参数二（可选）结束位置，不选的话 就节选到最后了\n[1, 2, 3].slice(0, 1) // [1]\n\n// Array.prototype.splice() 删除任意元素，操作任意元素 | 参数一：从哪开始 | 参数二：操作元素的个数 | 参数三：插入元素的值...（可以写多个参数三）\n[1, 2, 3].splice(0, 1) // 删除 [2, 3]\n\n// Array.prototype.includes() 用来判断一个数组是否包含一个指定的值，根据情况，如果包含则返回 true，否则返回false。\n[1, 2, 3].includes(1) // true\n\n// Array.prototype.reverse() 颠倒数组\n[1, 2, 3].reverse() // [3, 2, 1]\n\n```\n\n[点击此处，查看更详细链接](https://zhukunpenglinyutong.github.io/2.note/3.JavaScript/4.ES6%E4%BB%A5%E5%8F%8AJS%E5%86%85%E7%BD%AE%E6%96%B9%E6%B3%95%E6%A2%B3%E7%90%86.html#%F0%9F%8C%B2%E6%95%B0%E7%BB%84%E6%96%B9%E6%B3%95%E6%A2%B3%E7%90%86)\n\n---\n\n### 9.获得数组最大最小值\n\n```js\n\n// 使用 Math 中的 max/min 方法\nlet arr = [22,13,6,55,30];\n\n// ES6\nMath.max(...arr); // 55\nMath.min(...arr); // 6\n\n// ES5\nMath.max.apply(null, arr); // 55\nMath.min.apply(null, arr); // 6\n\n```\n\n---\n\n### 10.获取数组交集\n\n```js\n// ES6 写法\nconst similarity = (arr1, arr2) => arr1.filter(v => arr2.includes(v));\nsimilarity([1, 2, 3], [1, 2, 4]); // [1,2]\n\n// ES5 写法\n// function similarity(arr1, arr2) {\n//   return arr2.filter(function(v) {\n//     return arr1.includes(v)\n//   })\n// }\n```\n\n---\n\n### 11.数组对象去重\n    \n```js\nlet arr = [\n  {id: 1, name: 'Jhon1'},\n  {id: 2, name: 'sss'},\n  {id: 3, name: 'Jhon2'},\n  {id: 4, name: 'Jhon3'}\n]\n\n// ES6\nconst uniqueElementsBy = (arr, fn) =>arr.reduce((acc, v) => {if (!acc.some(x => fn(v, x))) acc.push(v);return acc;}, []);\n\n// 下面的示例表示，去重依据是 id ，就是 id一样的，只留下一个\nuniqueElementsBy(arr, (a, b) => a.id === b.id) // [{id: 1, name: 'Jhon1'}, {id: 2, name: 'sss'}]\n\n```\n\n---\n\n### 12.数组乱序\n    \n```js\nfunction shuffle(arr) {\n  let array = arr\n  let index = array.length\n\n  while (index) {\n    index -= 1\n    let randomInedx = Math.floor(Math.random() * index)\n    let middleware = array[index]\n    array[index] = array[randomInedx]\n    array[randomInedx] = middleware\n  }\n\n  return array\n}\n\nlet arr = [1,2,3,4,5]\nshuffle(arr) // [3, 4, 2, 5, 1] 结果不定\n```\n\n**还有更简单的方式，欢迎来撩**\n\n---\n\n### 13.检查数组中某元素出现的次数\n    \n```js\nfunction countOccurrences(arr, value) {\n  return arr.reduce((a, v) => v === value ? a + 1 : a + 0, 0);\n}\n\nlet arr = [1,2,3,4,1,2,4]\ncountOccurrences(arr, 1) // 2\n```\n\n---\n\n### 14.检查数组中的所有元素是否相等\n    \n```javascript\nconst allEqual = arr => arr.every(val => val === arr[0]);\n\n// 示例\nallEqual([1, 2, 3, 4, 5, 6]); // false\nallEqual([1, 1, 1, 1]); // true\n```\n\n---\n\n### 15.数组对象，求某一列属性的总和\n\n```js\nvar potatos = [\n  { id: '1001', weight: 50 },\n  { id: '1002', weight: 80 },\n  { id: '1003', weight: 120 },\n  { id: '1004', weight: 40 }\n]\n\n// ES6写法\nconst fn = (arr, key) => arr.reduce((sum, p) => { return p[key] + sum },0)\n\nfn(potatos, 'weight') // 290\nfn(potatos, 'id') // \"10041003100210010\" 字符串相加就是这个结果，如果有各自的需求，可以自己加上\n```\n\n---\n\n### 16.分割数组，并操作数组每一项（函数）\n\n```js\n/**\n * 数组分隔方法，并且可以传入一个处理函数，用来分隔之前处理数组的每一项\n * \n * @category Array\n * @param {Array} array 需要处理的数组\n * @param {number} [size = 1] 每个数组区块的长度\n * @param {Function} [fn = item => item] 函数\n * @returns {Array} 返回一个包含拆分区块的新数组（相当于一个二维数组）。\n * @example\n *\n * chunk(['a', 'b', 'c', 'd'], 2)\n * // => [['a', 'b'], ['c', 'd']]\n *\n * chunk(['a', 'b', 'c', 'd'], 3)\n * // => [['a', 'b', 'c'], ['d']]\n *\n * chunk([1, 2, 3, 4], 3, item => item * 2)\n * // => [[2, 4, 6], [8]]\n */\n\nfunction chunk(array, size = 1, fn = item => item) {\n    \n    array = array.map(fn)\n\n    size = Math.max(size, 0) // 这一句就很妙，当传入值小于0的时候，置为0，大于0的时候，不写，但不知道性能怎么样\n    const length = array == null ? 0 : array.length\n    if (!length || size < 1) {\n      return []\n    }\n    let index = 0\n    let resIndex = 0\n    const result = new Array(Math.ceil(length / size))\n  \n    while (index < length) {\n      result[resIndex++] = array.slice(index, (index += size))\n    }\n    return result\n}\n```\n\n---\n\n### 17.数组分页算法\n\n```js\ndata.slice([每页数据量 *（当前页码 - 1）, 每页数据量 *（当前页码 - 1） + 每页数据量])\n```\n\n---\n\n\n\n---\n\n## 🍡第二部分：对象\n\n### 1.对象合并\n\n\n```js\n\n// 1️⃣ ES6方法\n\nlet obj1 = {\n    a:1,\n    b:{ \n        b1:2 \n    }\n}\n\nlet obj2 = { c:3, d:4 }\n\nconsole.log({...obj1, ...obj2}) // {a: 1, b: {…}, c: 3, d: 4}\n// 支持无限制合并，但如果对象之间存在相同属性，则后面属性会覆盖前面属性。*请注意，这仅适用于浅层合并。\n\n\n// 2️⃣ Obj.assign()：可以把任意多个的源对象自身的可枚举属性拷贝给目标对象，然后返回目标对象\nlet o1 = { a: 1 };\nlet o2 = { b: 2 };\n\nlet obj = Object.assign(o1, o2);\nconsole.log(obj); // { a: 1, b: 2 }\nconsole.log(o1);  // { a: 1, b: 2 }, 且 **目标对象** 自身也会改变（也就是assign第一个对象）\nconsole.log(o2); // { b: 2 } 不改变\n\n// 备注：Object.assign() 拷贝的是属性值。假如源对象的属性值是一个指向对象的引用，它也只拷贝那个引用值\n// 备注：数组合并用 concat() 方法\n\n\n// 3️⃣ $.extend()\n\n```\n\n---\n\n### 2.浅拷贝，深拷贝\n\n**深拷贝（基础版）**\n\n```javascript\n\n/**\n * 此函数，可以完全生成一个新的拷贝对象，也可以将一个对象中的属性拷贝到另一个对象中去\n * @parmas {Object} 需要被拷贝的对象\n * @parmas {Object} 可选，目标对象，如果不填直接返回一个对象\n */\n\nfunction deepClone(origin, target = {}) {\n\n    // 循环遍历对象的属性\n    for (key in origin) {\n        \n        let isType = Object.prototype.toString.call(origin[key])\n\n        // 克隆对象类型\n        if (isType === '[object Object]') {\n            target[key] = {}\n            deepClone(origin[key], target[key])\n            continue\n        }\n\n        // 克隆数组类型\n         if (isType === '[object Array]') {\n            target[key] = []\n            deepClone(origin[key], target[key])\n            continue\n        }\n\n        // 克隆 Set 类型\n      \n        // 克隆 Map 类型\n\n        // 克隆其他类型\n\n        // 克隆基础类型\n        target[key] = origin[key]\n    \n    }\n\n    return target\n}\n\nlet zhu = {\n  name: '朱昆鹏',\n  technology: ['css', 'html', 'js'],\n  girlfriend: {\n    name: 'lyt'\n  }\n}\n\nlet zhuClone = deepClone(zhu) // zhuClone 内容完全和 zhu 一样\n\nlet zhuTest = { test: '测试' }\nlet zhuTestClone = deepClone(zhuTest, zhu) // zhuTestClone 不仅有 zhu所有内容，还有 zhuTest 的内容\n\n\n\n// JSON.parse(JSON.stringify(obj) 方法进行拷贝，了解就行\nconst obj = {\n  name:'axuebin',\n  sayHello:function(){\n    console.log('Hello World');\n  }\n}\nconsole.log(JSON.parse(JSON.stringify(obj)); // {name: \"axuebin\"} ???\n// undefined、function、symbol 会在转换过程中被忽略，所以就不能用这个方法进行深拷贝\n\n\n// 浅拷贝\nfunction clone(origin, target = {}) {\n    let target = {};\n    for (const key in origin) {\n        target[key] = origin[key];\n    }\n    return target;\n};\n\n```\n\n---\n\n### 3.拓展：首层浅拷贝\n\n```javascript\n\nfunction shallowClone(source) {\n  const targetObj = source.constructor === Array ? [] : {}; // 判断复制的目标是数组还是对象\n  for (let keys in source) { // 遍历目标\n    if (source.hasOwnProperty(keys)) {\n      targetObj[keys] = source[keys];\n    }\n  }\n  return targetObj;\n}\n\nconst originObj = {\n  a:'a',\n  b:'b',\n  c:[1, 2, 3],\n  d:{ dd: 'dd' }\n};\n\nconst cloneObj = shallowClone(originObj);\nconsole.log(cloneObj === originObj); // false\ncloneObj.a = 'aa';\ncloneObj.c = [1, 1, 1];\ncloneObj.d.dd = 'surprise';\n\nconsole.log(cloneObj); // {a:'aa',b:'b',c:[1,1,1],d:{dd:'surprise'}}\nconsole.log(originObj); // {a:'a',b:'b',c:[1,2,3],d:{dd:'surprise'}}\n\n```\n\n---\n\n### 4.判断对象是否为空对象\n\n```javascript\n\n// 参考：https://www.cnblogs.com/HKCC/p/6083575.html\n\nif (JSON.stringify(对象) === '{}') {\n  console.log('空');\n}\n\n```\n\n---\n\n### 5.判断对象中属性的个数\n\n```js\nlet obj = {name: '朱昆鹏', age: 21}\n\n// ES6\nObject.keys(obj).length // 2\n\n// ES5\nlet attributeCount = obj => {\n    let count = 0;\n    for(let i in obj) {\n        if(obj.hasOwnProperty(i)) {  // 建议加上判断,如果没有扩展对象属性可以不加\n            count++;\n        }\n    }\n    return count;\n}\n\nattributeCount(obj) // 2\n```\n\n---\n\n### 6.JS 对象转 url 查询字符串\n\n```js\nconst objectToQueryString = (obj) => Object.keys(obj).map((key) => `${encodeURIComponent(key)}=${encodeURIComponent(obj[key])}`).join('&');\nobjectToQueryString({name: 'Jhon', age: 18, address: 'beijing'})\n// name=Jhon&age=18&address=beijing\n```\n\n---\n\n### 7.对象遍历\n\n```js\nlet objs = {\n    1: {\n        name: '朱昆鹏'\n    },\n    2: {\n        name: '林雨桐'\n    }\n}\n\nObject.keys(objs).forEach( ket => {\n  console.log(key,objs[key])\n})\n\n// 1 {name: '朱昆鹏'} 2 {nama:'林雨桐'}\n\n```\n\n---\n\n### 8.字符串与对象相互转换\n\n[链接](https://mmww1024.iteye.com/blog/2427471)\n\n---\n\n## 🍧第三部分：DOM\n\n---\n\n### 1.常用DOM接口\n\n```js\n\n// 获取DOM节点\ndocument.getElementById() // 通过ID获取\ndocument.getElementsByTagName() // 标签名\ndocument.getElementsByClassName() // 类名\ndocument.querySelector() // 通过选择器获取一个元素\ndocument.querySelectorAll() // 通过选择器获取一组元素\ndocument.body // 获取body的方法\ndocument.getElementsByName(name) // 通过name属性查找元素节点\ndocument.documentElement // 获取html的方法\n\n// 节点类型\n元素节点（标签） // 属性nodeType返回值1\n属性节点（标签里的属性）// 返回值2\n文本节点 // 返回值3\n注释节点（comment） // 返回值8\ndocument // 返回值9\nDocumentFragment // 返回值11\n\n// 节点接口\ndom元素.parentNode // 返回当前元素的父节点\ndom元素.childNodes // 子节点们\ndom元素.firstChild // 第一个子节点\ndom元素.lastChild // 最后一个子节点\ndom元素.nextSibling // 后一个兄弟节点 previousSibling -> 前一个兄弟节点\n\n// 元素节点接口\ndom元素.parentElement // 返回当前元素的父元素节点\ndom元素.children // 返回当前元素的元素子节点\ndom元素.firstElementChild // 第一个元素子节点（IE不兼容）\ndom元素.lastElementChild // 最后一个元素子节点（IE不兼容）\ndom元素.nextElementSibling // 返回后一个兄弟元素节点\ndom元素.previousElementSibling // 返回前一个兄弟元素节点\n\n// 节点的四个属性和一个方法\n节点.nodeName // 元素的标签名，以大写形式表示（只读）\n节点.nodeValue // Text节点或者Comment节点的文本内容，（读写）\n节点.nodeType // 该节点的类型（只读）\n节点.attributes // Element节点的属性集合\n节点.hasChildNodes() // 判断节点 是否有子节点\n\n// Element节点的 属性和方法\ndom元素.innerHtml\ndom元素.innerText\ndom元素.attributes // 获取元素身上所有属性构成的集合\ndom元素.setAttribute(\"属性名\",\"属性值\")// 给元素设置属性和属性值\ndom元素.getAttribute(\"属性名\")// 获取属性值的方法\ndom元素.removerAttribute(\"属性\") // 删除属性\n\n\n// ============== 操作接口 ==================\n\n// 增\ndocument.createElement() // 创建元素节点\ndocument.createTextNode() // 创建文本节点\ndocument.creaetComment() //创建注释节点\ndocument.createDocumentFragment() // 创建文档碎片节点\n\n// 插\n父元素节点.appendChild(子元素对象) // 在元素节点的子元素最后插入子元素\n父元素节点.insertBefore(父元素中的子元素a, 需要插入的子元素b) // 最后的结果是，父元素节点中 b元素插入到了 a的前面\n\n\n// 删\n元素节点.remove() // 删除DOM元素（自己）\n父元素节点.removeChild(子元素节点) // 删除子元素\n\n// 替换\n父元素节点.replaceChild(新的节点, 需要被替换的子节点)\n\n// 复制\n元素节点.cloneChild() // 返回值是 复制出来的节点\n\n// 查看滚动条的滚动距离\nwindow.pageXOffset // x轴滚动距离\nwindow.pageYOffset // y轴滚动距离\ndocument.body.scrollLeft // x轴滚动距离（兼容低版本IE）\ndocument.body.scrollTop // y轴滚动距离（兼容低版本IE）\n// 如何兼容，因为如果有 pageXOffset，那么另一个兼容性的结果就是0，所以相加就能解决兼容性问题了\n\n// 让滚动条滚动\nwindow.scroll(x, y) // 滚动到某个位置\nwindow.scrollTo(x, y) // 滚动到某个位置\nwindow.scrollBy(x, y) // 累加滚动，就是每执行一次，就滚动多少位置\n\n// 查看视口的尺寸\nwindow.innerWidth // 视口的宽度\nwindow.innerHeight // 视口的高度\ndocument.documentElement.clientWidth // 兼容低版本IE\ndocument.documentElement.clientHeight // 兼容低版本IE\ndocument.body.clientWidth // 兼容怪异模式\ndocument.body.clientHeight //兼容怪异模式\ndocument.compatMode // 查看渲染模式 | 'CSS1Compat' 标准模式 | 'BackCompat' 怪异模式\n\n// 查看元素的几何尺寸\ndom元素.offsetWidth // 元素的宽度\ndom元素.offsetHeight // 元素的高度\ndom元素.offsetLeft // 元素相当于父级的位置（如果父级有定位的话，如果没有就是相对于文档的距离）\ndom元素.offsetTop // 元素相对于父级的位置（如果父级有定位的话，如果没有就是相对于文档的距离）\ndom元素.offsetParent // 返回最近有定位的父级DOM节点\n\n// 脚本化css\ndom元素.style // 查看所有样式表接口（内容可读可写）\ndom元素.style. = ... // 碰到float这样的保留字，前面加css，例如 cssFloat\ndom元素.style.width = ...\ndom元素.style.backgroundColor = ...\ndom元素.className = ...\n\nwindow.getComputedStyle(ele, null) // 返回某个元素，最后展示效果的 样式表对象（CSSStyleDeclaration）| 只读 | IE8以下不兼容\n\n```\n\n---\n\n### 2.判断当前位置是否为页面底部\n\n```js\nfunction bottomVisible() {\n  return document.documentElement.clientHeight + window.scrollY >= (document.documentElement.scrollHeight || document.documentElement.clientHeight)\n}\n\nbottomVisible() // 返回值为true/false\n```\n\n---\n\n### 3.全屏\n\n##### 1.进入全屏\n\n```js\nfunction launchFullscreen(element) {\n  if (element.requestFullscreen) {\n    element.requestFullscreen()\n  } else if (element.mozRequestFullScreen) {\n    element.mozRequestFullScreen()\n  } else if (element.msRequestFullscreen) {\n    element.msRequestFullscreen()\n  } else if (element.webkitRequestFullscreen) {\n    element.webkitRequestFullScreen()\n  }\n}\n\nlaunchFullscreen(document.documentElement) // 整个页面进入全屏\nlaunchFullscreen(document.getElementById(\"id\")) //某个元素进入全屏\n```\n\n##### 退出全屏\n\n```js\nfunction exitFullscreen() {\n  if (document.exitFullscreen) {\n    document.exitFullscreen()\n  } else if (document.msExitFullscreen) {\n    document.msExitFullscreen()\n  } else if (document.mozCancelFullScreen) {\n    document.mozCancelFullScreen()\n  } else if (document.webkitExitFullscreen) {\n    document.webkitExitFullscreen()\n  }\n}\n\nexitFullscreen()\n```\n\n##### 全屏事件\n\n```js\ndocument.addEventListener(\"fullscreenchange\", function (e) {\n  if (document.fullscreenElement) {\n    console.log('进入全屏')\n  } else {\n    console.log('退出全屏')\n  }\n})\n```\n\n---\n\n### 4.判断dom元素是否具有某个className\n\n方法一：使用HTML5新增classList 来操作类名\n\n```html\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  <meta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\">\n  <title>Document</title>\n</head>\n<body>\n  <div id=\"test\" class=\"te\"></div>\n\n  <script>\n    \n    let div = document.getElementById('test')\n    console.log(div.classList.contains(\"te\")) // true\n\n  </script>\n</body>\n</html>\n```\n拓展：\n- classList.add(newClassName)；添加新的类名，如已经存在，取消添加\n- classList.contains(oldClassName)：确定元素中是否包含指定的类名，返回值为true，false\n- classList.remove(oldClassName)：移除已经存在的类名;\n- classList.toggle(className)：如果classList中存在给定的值，删除它，否则，添加它；\n\n🦀**感谢掘金用户tjNane分享此方法**\n\n---\n\n方法二：\n\n```js\nconst  hasClass = (el, className) => new RegExp(`(^|\\\\s)${className}(\\\\s|$)`).test(el.className);\n```\n\n---\n\n### 5.返回某元素的第n层祖先元素节点\n\n```js\nfunction retParent(ele, n) {\n    \n    while(elem && n) {\n        ele = ele.parentElement\n        n--\n    }\n\n    return ele\n}\n```\n\n---\n\n### 6.滚动到底部监听函数\n\n```js\nfunction bottomMonitorEvent(dom) {\n    const prizeRecordRoll = dom;\n    prizeRecordRoll.onscroll = () => {\n        const scrollTop = prizeRecordRoll.scrollTop;\n        const windowHeight = prizeRecordRoll.clientHeight;\n        const scrollHeight = prizeRecordRoll.scrollHeight;\n\n        if (Math.floor(scrollTop + windowHeight - scrollHeight) >= -1) {\n            // 到底事件触发，书写业务逻辑\n        }\n\n    };\n},\n```\n\n---\n\n## 🍣第四部分：BOM\n\n### 1.返回当前网页地址\n\n```js\nfunction currentURL() {\n  return window.location.href\n}\n\ncurrentURL() // \"https://juejin.im/timeline\"\n```\n\n---\n\n### 2.获取滚动条位置\n\n```js\nfunction getScrollPosition(el = window) {\n  return {\n    x: (el.pageXOffset !== undefined) ? el.pageXOffset : el.scrollLeft,\n    y: (el.pageYOffset !== undefined) ? el.pageYOffset : el.scrollTop\n  }\n}\n\ngetScrollPosition() // {x: 0, y: 692}\n```\n\n---\n\n### 3.获取url中的参数\n\n```js\nfunction getURLParameters(url) {\n  const params = url.match(/([^?=&]+)(=([^&]*))/g)\n  return params?params.reduce(\n    (a, v) => (a[v.slice(0, v.indexOf('='))] = v.slice(v.indexOf('=') + 1), a), {}\n  ):[]\n}\n\ngetURLParameters('http://www.baidu.com/index?name=tyler') // {name: \"tyler\"}\n```\n\n---\n\n### 4.检测设备类型\n\n```js\nconst detectDeviceType = () =>/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|OperaMini/i.test(navigator.userAgent) ? 'Mobile' : 'Desktop';\n\ndetectDeviceType() // \"Desktop\"\n```\n\n---\n\n## 🍬第五部分：时间\n\n### 1.Date 常用API\n\n```js\nnew Date() // 创建一个时间对象 Fri Jul 12 2019 19:59:59 GMT+0800 (中国标准时间)\n\n// 返回自1970年1月1日 00:00:00 UTC到当前时间的毫秒数。\nDate.now(); // 1562932828164\n\n// 解析一个表示某个日期的字符串，并返回从1970-1-1 00:00:00 UTC 到该日期对象（该日期对象的UTC时间）的毫秒数\nDate.parse('2019.7.12') // 1562860800000\n\n// 年月日时分秒 获取\nlet dateMe = new Date()\n\ndateMe.getFullYear() // 2019 | 根据本地时间返回指定日期的年份\ndateMe.getMonth() // 6 | 根据本地时间，返回一个指定的日期对象的月份，为基于0的值（0表示一年中的第一月）。\ndateMe.getDate() // 12 | 根据本地时间，返回一个指定的日期对象为一个月中的哪一日（从1--31）\ndateMe.getHours() // 20 |根据本地时间，返回一个指定的日期对象的小时。\ndateMe.getMinutes() // 11 | 根据本地时间，返回一个指定的日期对象的分钟数。\ndateMe.getSeconds() // 29 | 方法根据本地时间，返回一个指定的日期对象的秒数\ndateMe.getMilliseconds() // 363 | 根据本地时间，返回一个指定的日期对象的毫秒数。\n\ndateMe.toJSON() // 🔥 \"2019-07-12T12:05:15.363Z\" | 返回 Date 对象的字符串形式\ndateMe.getDay() // 5 | 根据本地时间，返回一个具体日期中一周的第几天，0 表示星期天（0 - 6）\ndateMe.getTime() // 1562933115363 | 方法返回一个时间的格林威治时间数值。\ndateMe.toString() // \"Fri Jul 12 2019 20:05:15 GMT+0800 (中国标准时间)\" | 返回一个字符串，表示该Date对象\ndateMe.getTimezoneOffset() // -480（说明比正常时区慢480分钟，所以要加480分钟才对） | 返回协调世界时（UTC）相对于当前时区的时间差值，单位为分钟。\ndateMe.toDateString() // \"Fri Jul 12 2019\" | 以美式英语和人类易读的形式返回一个日期对象日期部分的字符串。\n\n// 时间戳转当前北京时间（非常的好用）\nconst startMe = new Date(Date.now());\nconst toLocale = startMe.toLocaleDateString().replace(/\\//g, '-') // 2019-11-20\nconst toTime = startMe.toTimeString().split(' ')[0] // 00:16:26\nconst theTime =  `${toLocale} ${toTime}` // 2019-11-20 00:16:26\n\n```\n\n[MDN 更多详细](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Date)\n\n---\n\n### 2.一个时间戳格式的数字，是多少 天小时分钟秒毫秒\n\n```javascript\nconst formatDuration = ms => {\n  if (ms < 0) ms = -ms;\n  const time = {\n    day: Math.floor(ms / 86400000),\n    hour: Math.floor(ms / 3600000) % 24,\n    minute: Math.floor(ms / 60000) % 60,\n    second: Math.floor(ms / 1000) % 60,\n    millisecond: Math.floor(ms) % 1000\n  };\n  return Object.entries(time)\n    .filter(val => val[1] !== 0)\n    .map(([key, val]) => `${val} ${key}${val !== 1 ? 's' : ''}`)\n    .join(', ');\n};\n\nformatDuration(3161012); // 52 minutes, 41 seconds, 12 milliseconds\n```\n\n---\n\n### 3.格林尼治时间 转 北京时间（可传格林尼治时间 或者 时间戳）\n\n```javascript\nfunction myTimeToLocal(inputTime){\n\tif(!inputTime && typeof inputTime !== 'number'){\n\t\treturn '';\n\t}\n\tlet localTime = '';\n\tinputTime = new Date(inputTime).getTime();\n\tconst offset = (new Date()).getTimezoneOffset();\n\tlocalTime = (new Date(inputTime - offset * 60000)).toISOString();\n\tlocalTime = localTime.substr(0, localTime.lastIndexOf('.'));\n\tlocalTime = localTime.replace('T', ' ');\n\treturn localTime;\n}\n\nconsole.log(myTimeToLocal(1530540726443)); // 2018-07-02 22:12:06\nconsole.log(myTimeToLocal('2017-11-16T05:23:20.000Z')); // 2017-11-16 13:23:20\n```\n\n---\n\n### 4.获取两个日期相差天数\n\n```js\nfunction getDaysDiffBetweenDates (dateInitial, dateFinal) {\n    return (dateFinal - dateInitial) / (1000 * 3600 * 24);\n}\n\ngetDaysDiffBetweenDates(new Date('2017-12-13'), new Date('2017-12-22')); // 9\n```\n\n---\n\n### 5.一个数组中，有时间，需要将这个数组按照时间进行排序\n\n\n```javascript\nlet data = [\n{\n  id: 1,\n  publishTime: \"2019-05-14 18:10:29\"\n},\n{\n  id: 2,\n  publishTime: \"2019-05-14 18:17:29\"\n},\n{\n  id: 3,\n  publishTime: \"2019-05-14 15:09:25\"\n}]\n\ndata.sort((a, b) => b.publishTime - a.publishTime);\n\n// 0: {id: 2, publishTime: \"2019-05-14 18:17:29\"}\n// 1: {id: 1, publishTime: \"2019-05-14 18:10:29\"}\n// 2: {id: 3, publishTime: \"2019-05-14 15:09:25\"}\n\n```\n\n---\n\n### 6.iOS 手机时间格式出现NaN的问题\n\n```js\nlet time = '2019-05-14 18:17:29'\nvar timeArr = time.split(/[- :]/); // [\"2019\", \"05\", \"14\", \"18\", \"17\", \"29\"]\nvar resTime = new Date(timeArr[0], timeArr[1] - 1, timeArr[2], timeArr[3], timeArr[4], timeArr[5]);\n```\n\n---\n\n### 7.判断时间是否到了（兼容性IOS NaN问题）\n\n```js\n/*\n * @param { String|Number } 开始时间\n * @param { String|Number } 结束时间\n * @return { Boolean } 时间是否到了\n * @start-time 2019-12-24 18:00\n * @last-time 2019-12-24 18:00\n*/\nfunction isJudgeTimeTool(startTime, endTime) {\n    \n    let nowTime = null;\n    let endTimeData = null;\n\n    // 开始时间\n    if (typeof startTime === 'number') {\n        nowTime = new Date(startTime);\n    } else {\n        const arr = startTime.split(/[- :]/);\n        nowTime = new Date(arr[0], arr[1] - 1, arr[2], arr[3], arr[4], arr[5]);\n    }\n\n    // 结束时间\n    if (typeof endTime === 'number') {\n        endTimeData = new Date(endTime);\n    } else {\n        const arr = endTime.split(/[- :]/);\n        endTimeData = new Date(arr[0], arr[1] - 1, arr[2], arr[3], arr[4], arr[5]);\n    }\n\n    // 相差时间\n    const leftTime = parseInt((endTimeData.getTime() -nowTime.getTime()) / 1000);\n\n    return leftTime > 0;\n}\n```\n\n---\n\n## 🍭第六部分：处理JS原生具有的一些问题\n\n### 1.加减法精度缺失问题\n\n```javascript\n// 加法函数（因为JS小数计算 丢失精度）\nfunction add(arg1, arg2) { \n    let r1, r2, m; \n    try { r1 = arg1.toString().split(\".\")[1].length } catch (e) { r1 = 0 } \n    try { r2 = arg2.toString().split(\".\")[1].length } catch (e) { r2 = 0 } \n    m = Math.pow(10, Math.max(r1, r2)) \n    return (arg1 * m + arg2 * m) / m \n}\n```\n\n```javascript\n// 减法函数（因为JS小数计算 丢失精度）\nfunction sub(arg1, arg2) { \n    let r1, r2, m, n; \n    try { r1 = arg1.toString().split(\".\")[1].length } catch (e) { r1 = 0 } \n    try { r2 = arg2.toString().split(\".\")[1].length } catch (e) { r2 = 0 } \n    m = Math.pow(10, Math.max(r1, r2)); \n    n = (r1 >= r2) ? r1 : r2; \n    return Number(((arg1 * m - arg2 * m) / m).toFixed(n)); \n}\n```\n\n---\n\n### 2.递归优化（尾递归）\n\n```javascript\n// 尾递归函数 摘自阮一峰ES6 | 自己懒得写了\nfunction tco(f) {\n  let value;\n  let active = false;\n  let accumulated = [];\n\n  return function accumulator() {\n    accumulated.push(arguments);\n    if (!active) {\n      active = true;\n      while (accumulated.length) {\n        value = f.apply(this, accumulated.shift());\n      }\n      active = false;\n      return value;\n    }\n  };\n}\n\n// 使用\n新的函数 = tco(递归函数)\n\n```\n\n---\n\n### 3.防抖 && 节流\n\n**防抖：任务频繁触发的情况下，只有任务触发的间隔超过指定间隔的时候，任务才会执行（例如搜索框，只有当用户搜索输入完成之后，停个零点几秒才会服务器发送请求，如果停顿的时间小于设定的，那就还不执行，这个就是防抖）**\n\n**函数防抖就是在函数需要频繁触发情况时，只有足够空闲的时间，才执行一次。经常用于 搜索和拖拽**\n\n```js\nfunction debounce(fn) {\n  let timeout = null; // 创建一个标记用来存放定时器的返回值\n  return function () {\n    clearTimeout(timeout); // 每当用户输入的时候把前一个 setTimeout clear 掉\n    timeout = setTimeout(() => { // 然后又创建一个新的 setTimeout, 这样就能保证输入字符后的 interval 间隔内如果还有字符输入的话，就不会执行 fn 函数\n      fn.apply(this, arguments);\n    }, 500);\n  };\n}\n\ndebounce(fn) // 使用\n\n```\n\n---\n\n**节流：指定时间间隔内只会执行一次任务（例如一个一秒内连续触发的事件，如果用了节流，让其300ms触发一次，那么1s就只能触发3次）**\n\n```js\nfunction throttle(fn) {\n  let canRun = true; // 通过闭包保存一个标记\n  return function () {\n    if (!canRun) return; // 在函数开头判断标记是否为true，不为true则return\n    canRun = false; // 立即设置为false\n    setTimeout(() => { // 将外部传入的函数的执行放在setTimeout中\n      fn.apply(this, arguments);\n      // 最后在setTimeout执行完毕后再把标记设置为true(关键)表示可以执行下一次循环了。当定时器没有执行的时候标记永远是false，在开头被return掉\n      canRun = true;\n    }, 500);\n  };\n}\n\nthrottle(fn) // 使用\n```\n\n[节流和防抖其他好的文章](https://juejin.im/entry/58c0379e44d9040068dc952f)\n\n---\n\n**防抖节流其他实现**\n\n```js\n/**\n * Difference between debounce and throttle\n * In summary, \n * throttle says, “Hey, we heard you the first time, but if you want to keep going, no problem. \n * We’ll just ignore you for a while.” \n * Debounce says, “Looks like you’re still busy. No problem, \n * we’ll wait for you to finish!”\n */\n/**\n * 快速书写一个防抖函数\n * @description 只要一直调用, callback 将不会被触发\n * 在一次调用结束后, 只有等待 timeout ms 时间, 才能继续调用 callback\n * immediate 决定触发时机\n * @example \n * 1. 点击按钮发送请求（保存数据之类的）\n * 2. 搜索时自动联想\n * 3. 自动保存\n * 4. Debouncing a resize/scroll event handler\n */\nfunction debounce(callback, timeout, immediate) {\n  let timer;\n  return function () {\n    const context = this; // 持有执行上下文\n    const args = arguments; // 记录传参\n    const later = function () {\n      timer = null; // 贤者时间过了，重振旗鼓，重置为初始状态\n      if (!immediate) callback.apply(context, args); // 设置为尾部调用才延时触发\n    }\n    const callNow = immediate && !timer; // 如果确认允许首部调用，且首次调用，那么本次立即触发\n    clearTimeout(timer); // 杀掉上次的计时器，重新计时\n    timer = setTimeout(later, timeout); // 重启一个计时器，过了贤者时间之后才触发\n    callNow && callback.apply(context, args); // 设置为首部调用立即触发\n  }\n}\n\n/**\n *  快速书写一个节流函数\n * @description 一直调用 callback, 每隔 timeout ms 时间 callback 触发一次\n * 在 timeout ms 时间内的调用将不触发\n * @example\n * 1. Throttling a button click so we can’t spam click 控制疯狂按钮的响应频率\n * 2. Throttling an API call 控制 API 的调用频率\n * 3. Throttling a mousemove/touchmove event handler 控制频繁触发事件的相应频率\n */\n// solution1 记录时间比较\nfunction throttle(callback, timeout) {\n  let triggerTime; // 记录每次真正触发时间\n  return function () {\n    const context = this; // 持有执行上下文\n    const args = arguments; // 记录传参\n    if (triggerTime === undefined // 首次调用\n      || Date.now() - triggerTime > timeout) { // 贤者时间已经过去\n      triggerTime = Date.now(); // 记录真正触发时间\n      callback.apply(context, args); // 可以触发回调\n    }\n  }\n}\n// solution2 间隔时间反转标志位\nfunction throttle(callback, timeout) {\n  let disable; // 触发回调是否禁用\n  return function () {\n    const context = this; // 持有执行上下文\n    const args = arguments; // 记录传参\n    if (!disable) { // 首次调用或者贤者时间过了，禁用解除\n      callback.apply(context, args); // 可以触发回调\n      disable = true; // 马上禁用\n      setTimeout(_ => disable = false, timeout); // 贤者时间过了，禁用解除\n    }\n  }\n}\n```\n\n---\n\n## 🍹第七部分：其他\n\n### 1.Math函数的一些应用\n\n```js\nparseInt(5.12) // 5 | 只保留整数部分（丢弃小数部分）\nMath.floor(5.12) // 5 | 向下取整（效果和parseInt一样）\nMath.ceil(5.12) // 6 | 向上取整（有小数，整数就+1）\n\nMath.round(5.499) // 5 | 四舍五入\nMath.round(5.501) // 6 | 四舍五入\n\nMath.abs(-5) // 5 | 绝对值\n\nMath.max(5, 6) // 6 | 返回两者中较大的数\nMath.min(5, 6) // 5 | 返回两者中较小的数\n\nMath.random() // 随机数 (0-1)\n```\n\n---\n\n### 2.常用正则速查\n\n**消除字符串首尾两端的空格（替换）**\n\n```js\nlet reg = /^\\s+|\\s+$/g;\n\nlet str = ' #id div.class '; \nstr.replace(reg, '') // \"#id div.class\"\n```\n\n**把手机号码替换成 *（替换）**\n\n```js\nvar reg = /1[24578]\\d{9}/;\n\nvar str = '姓名：朱昆鹏 手机：15932638907'; // 手记号瞎写的\nstr.replace(reg, '***') //\"姓名：朱昆鹏 手机：***\"\n```\n\n**替换敏感字（替换）**\n\n```js\nlet str = '中国共产党中国人民解放军中华人民共和国';\n    \nlet r = str.replace(/中国|军/g, input => {\n    let t = '';\n    for (let i = 0; i<input.length; i++) {\n        t += '*';\n    }\n    return t;\n})\n     \nconsole.log(r); //**共产党**人民解放*中华人民共和国   \n```\n\n**千位分隔符（替换）**\n\n```js\nlet reg = /(\\d)(?=(?:\\d{3})+$)/g\n\nlet str = '100002003232322';    \nlet r = str.replace(, '$1,'); //100,002,003,232,322\n```\n\n**匹配网页标签（匹配）**\n\n```js\nvar reg = /<(.+)>.+<\\/\\1>/;\n\nvar str = '朱昆鹏<div>2707509@.qq.com</div>朱昆鹏';    \nstr.match(reg); // [\"<div>2707509@.qq.com</div>\"]\n```\n\n**验证手记号（验证）**\n\n```js\nlet reg = /^1((3[\\d])|(4[5,6,9])|(5[0-3,5-9])|(6[5-7])|(7[0-8])|(8[1-3,5-8])|(9[1,8,9]))\\d{8}$/;\n\nreg.test('15932539095'); //true\nreg.test('234554568997'); //false\n```\n\n**验证邮箱地址（验证）**\n\n```js\nlet reg = /^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$/\n\nreg.test('2775033@hotmail.com'); //true\nreg.test('abc@'); //false\n```\n\n**验证身份证（验证）**\n\n```js\nlet reg = /(^\\d{15}$)|(^\\d{18}$)|(^\\d{17}(\\d|X|x)$)/\n\nreg.test('31210119651230518X'); //true 自己瞎写的\nreg.test('2101196523s230518X'); //false 自己瞎写的\n```\n\n**验证中国邮箱编码（验证）**\n\n```js\nlet reg = /^(0[1-7]|1[0-356]|2[0-7]|3[0-6]|4[0-7]|5[1-7]|6[1-7]|7[0-5]|8[013-6])\\d{4}$/\n\nreg.test('065900'); //true\nreg.test('999999'); //false\n```\n\n**验证ipv4地址正则（验证）**\n\n```js\nlet reg = /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/\n\nreg.test('192.168.1.192'); //true\nreg.test('127.0.0.1s'); //false\n```\n\n**验证银行卡号（16或19位）**\n\n```js\nlet reg = /^([1-9]{1})(\\d{15}|\\d{18})$/\n\nreg.test('6222026006705354218') // true\n```\n\n**验证中文姓名（验证）**\n\n```js\nlet reg = /^([\\u4e00-\\u9fa5\\·]{2,10})$/\n\nreg.test('朱昆鹏'); //true\nreg.test('Zhu Kunpeng'); //false\n```\n\n---\n\n### 3.变换变量\n\n```js\n\n// [letA，letB] = [letB，letA];\n\nlet a = 1;\nlet b = 2;\n[a, b] = [b, a] // a = 2 b = 1\n\n```\n\n---\n\n### 4.格式化对象为JSON代码\n\n```js\nconst formatted = JSON.stringify({name: 'Jhon', age: 18, address: 'sz'}, null, 4);\n/*\n{\n    \"name\": \"Jhon\",\n    \"age\": 18,\n    \"address\": \"sz\"\n}\n*/\n\n// 该字符串化命令有三个参数。第一个是Javascript对象。第二个是可选函数，可用于在JSON进行字符串化时对其执行操作。最后一个参数指示要添加多少空格作为缩进以格式化JSON。省略最后一个参数，JSON将返回一个长行。如果myObj中存在循环引用，则会格式失败。\n```\n---\n\n### 5.随机生成六位数字验证码\n\n```js\nconst code = Math.floor(Math.random() * 1000000).toString().padStart(6, \"0\") // 942377\n```\n\n---\n\n### 6.RGB 颜色转 16进制颜色\n\n```js\nconst RGBToHex = (r, g, b) => ((r << 16) + (g << 8) + b).toString(16).padStart(6, '0');\nRGBToHex(255, 165, 1); // 'ffa501'\n```\n\n---\n\n### 7.生成随机整数\n\n```js\nfunction randomNum(min, max) {\n  switch (arguments.length) {\n    case 1:\n      return parseInt(Math.random() * min + 1, 10)\n    case 2:\n      return parseInt(Math.random() * (max - min + 1) + min, 10)\n    default:\n      return 0\n  }\n}\n\nrandomNum(1,10) // 随机 [1,10]的整数\n```\n\n\n---\n\n### 8.去除空格（1-所有空格  2-前后空格  3-前空格 4-后空格 默认为1）\n\n```js\n\n/**\n * trim 去除空格\n * param1  string str 待处理字符串\n * param2  number type 去除空格类型 1-所有空格  2-前后空格  3-前空格 4-后空格 默认为1\n * return  string str 处理后的字符串\n */\nfunction trim(str, type = 1) {\n    if (type && type !== 1 && type !== 2 && type !== 3 && type !== 4) return;\n    switch (type) {\n        case 1:\n            return str.replace(/\\s/g, \"\");\n        case 2:\n            return str.replace(/(^\\s)|(\\s*$)/g, \"\");\n        case 3:\n            return str.replace(/(^\\s)/g, \"\");\n        case 4:\n            return str.replace(/(\\s$)/g, \"\");\n        default:\n            return str;\n    }\n}\n\n```\n\n---\n\n### 9.大小写转换\n\n```js\n\n/**\n * 大小写转换\n * param1 string str 待转换的字符串\n * param2 number type 1-全大写 2-全小写 3-首字母大写 \n * return  string str 处理后的字符串\n */\n\nfunction turnCase(str, type) {\n    switch (type) {\n        case 1:\n            return str.toUpperCase()\n        case 2:\n            return str.toLowerCase();\n        case 3:\n            return str[0].toUpperCase() + str.substr(1).toLowerCase()\n        default:\n            return str;\n    }\n}\n\n```\n\n---\n\n### 10.随机16进制颜色 hexColor\n\n```js\n/**\n * 随机16进制颜色 hexColor\n * return  string str 带#号的随机16进制颜色\n */\n\nfunction hexColor() {\n\n    let str = '#';\n    let arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'A', 'B', 'C', 'D', 'E', 'F'];\n    for (let i = 0; i < 6; i++) {\n        let index = Number.parseInt(Math.random() * 16);\n        str += arr[index]\n    }\n    return str;\n}\n```\n\n---\n\n### 11.统计一段文字中指定文字出现次数 keywordsCount（骚操作）\n\n```js\n/**\n * 关键词统计：统计一段文字中指定文字出现次数 keywordsCount\n * param1 string text 进行统计的文本\n * param2 string keywords 进行统计的关键词\n * return number count 关键词出现次数\n * tip:param1 document.body.innerText--全文统计\n */\n\nfunction keywordsCount(text, keywords) {\n    return text.split(keywords).length - 1\n}\n\n```\n\n\n---\n\n### 12.好的笔记文章\n\n- [JS原生事件](https://developer.mozilla.org/zh-CN/docs/Web/Events)\n- [JS选择器 new](https://blog.csdn.net/major_zhang/article/details/78118823)\n\n---\n\n### 13. 轮询等待函数\n\n```js\n/**\n * 轮询等待函数\n * \n * @param {Function} 轮询结束的条件\n * @param {Function} 成功之后的回调函数\n * @param {Number} 轮询时间（默认100ms）\n * @param {Number} 轮询最长的时间（默认1000ms）\n */\nfunction pollingWaiting (callBack, resCallBack, time = 100, lastTime = 1000) {\n  \n  let startTime = Date.now()\n  let t = null;\n  let fn =  function () {\n      t = setTimeout(() => {\n          if (!callBack()) {\n              // 此处可以采用尾递归优化，来防止占用过多内存\n              console.log('startTime', Date.now() - startTime > lastTime)\n              (Date.now() - startTime > lastTime) ? window.clearInterval(t) : fn()\n          } else {\n              resCallBack()\n          }\n      }, time);\n  }\n  fn()\n}\n\n// 示例\nlet a = 1;\nsetTimeout( () => {\n  a = 2\n}, 500)\n\npollingWaiting( () => {\n  return a === 2\n}, () => {\n  console.log('触发了', a)\n}, 100, 800)\n\n// 4 startTime false\n// 触发了 2\n```\n\n---\n\n### 14.大数值转换为万，亿\n\n\n```js\n/**\n * 大数值转换为万，亿函数\n * \n * @param {Number} 大数\n * @param {Number} 保留几位小数\n */\nfunction numConversion (num, point = 2) {\n\n  let numStr = num.toString().split('.')[0] // 去掉小数点后的数值字符串\n  let numLen = numStr.length\n\n  if (numLen < 6) {\n    return numStr\n  } else if (numLen >= 6 && numLen <= 8) {\n    let decimal = numStr.substring(numLen - 4, numLen - 4 + point)\n    let res = parseInt(num / 10000) + '.' + decimal + '万'\n    return res\n  } else if (numLen > 8) {\n    let decimal = numStr.substring(numLen - 8, numLen - 8 + point)\n    let res = parseInt(num / 100000000) + '.' + decimal + '亿'\n    return res\n  }\n}\n\nnumConversion(12345) // 12345\nnumConversion(1234567) // 123.45万\nnumConversion(123456789) // 1.23亿\n```\n\n---\n\n### 15.常见的XSS转义场景\n\n```js\n// 转义HTML特殊字符\nfunction HtmlEncode(str) {\n    var hex = new Array('0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f');\n    var preescape = str;\n    var escaped = \"\";\n    for(var i = 0; i < preescape.length; i++){\n        var p = preescape.charAt(i);\n        escaped = escaped + escapeCharx(p);\n    }\n    \n    return escaped;\n                    \n    function escapeCharx(original){\n        var found=true;\n        var thechar=original.charCodeAt(0);\n        switch(thechar) {\n            case 10: return \"<br/>\"; break; //newline\n            case 32: return \"&nbsp;\"; break; //space\n            case 34:return \"&quot;\"; break; //\"\n            case 38:return \"&amp;\"; break; //&\n            case 39:return \"&#x27;\"; break; //'\n            case 47:return \"&#x2F;\"; break; // /\n            case 60:return \"&lt;\"; break; //<\n            case 62:return \"&gt;\"; break; //>\n            case 198:return \"&AElig;\"; break;\n            case 193:return \"&Aacute;\"; break;\n            case 194:return \"&Acirc;\"; break; \n            case 192:return \"&Agrave;\"; break; \n            case 197:return \"&Aring;\"; break; \n            case 195:return \"&Atilde;\"; break; \n            case 196:return \"&Auml;\"; break; \n            case 199:return \"&Ccedil;\"; break; \n            case 208:return \"&ETH;\"; break;\n            case 201:return \"&Eacute;\"; break; \n            case 202:return \"&Ecirc;\"; break; \n            case 200:return \"&Egrave;\"; break; \n            case 203:return \"&Euml;\"; break;\n            case 205:return \"&Iacute;\"; break;\n            case 206:return \"&Icirc;\"; break; \n            case 204:return \"&Igrave;\"; break; \n            case 207:return \"&Iuml;\"; break;\n            case 209:return \"&Ntilde;\"; break; \n            case 211:return \"&Oacute;\"; break;\n            case 212:return \"&Ocirc;\"; break; \n            case 210:return \"&Ograve;\"; break; \n            case 216:return \"&Oslash;\"; break; \n            case 213:return \"&Otilde;\"; break; \n            case 214:return \"&Ouml;\"; break;\n            case 222:return \"&THORN;\"; break; \n            case 218:return \"&Uacute;\"; break; \n            case 219:return \"&Ucirc;\"; break; \n            case 217:return \"&Ugrave;\"; break; \n            case 220:return \"&Uuml;\"; break; \n            case 221:return \"&Yacute;\"; break;\n            case 225:return \"&aacute;\"; break; \n            case 226:return \"&acirc;\"; break; \n            case 230:return \"&aelig;\"; break; \n            case 224:return \"&agrave;\"; break; \n            case 229:return \"&aring;\"; break; \n            case 227:return \"&atilde;\"; break; \n            case 228:return \"&auml;\"; break; \n            case 231:return \"&ccedil;\"; break; \n            case 233:return \"&eacute;\"; break;\n            case 234:return \"&ecirc;\"; break; \n            case 232:return \"&egrave;\"; break; \n            case 240:return \"&eth;\"; break; \n            case 235:return \"&euml;\"; break; \n            case 237:return \"&iacute;\"; break; \n            case 238:return \"&icirc;\"; break; \n            case 236:return \"&igrave;\"; break; \n            case 239:return \"&iuml;\"; break; \n            case 241:return \"&ntilde;\"; break; \n            case 243:return \"&oacute;\"; break;\n            case 244:return \"&ocirc;\"; break; \n            case 242:return \"&ograve;\"; break; \n            case 248:return \"&oslash;\"; break; \n            case 245:return \"&otilde;\"; break;\n            case 246:return \"&ouml;\"; break; \n            case 223:return \"&szlig;\"; break; \n            case 254:return \"&thorn;\"; break; \n            case 250:return \"&uacute;\"; break; \n            case 251:return \"&ucirc;\"; break; \n            case 249:return \"&ugrave;\"; break; \n            case 252:return \"&uuml;\"; break; \n            case 253:return \"&yacute;\"; break; \n            case 255:return \"&yuml;\"; break;\n            case 162:return \"&cent;\"; break; \n            case '\\r': break;\n            default:\n                found=false;\n                break;\n        }\n        if(!found){\n            if(thechar>127) {\n                var c=thechar;\n                var a4=c%16;\n                c=Math.floor(c/16); \n                var a3=c%16;\n                c=Math.floor(c/16);\n                var a2=c%16;\n                c=Math.floor(c/16);\n                var a1=c%16;\n                return \"&#x\"+hex[a1]+hex[a2]+hex[a3]+hex[a4]+\";\";        \n            }\n            else{\n                return original;\n            }\n        }    \n    }\n}\n\n// 转义JS特殊字符\nfunction JavaScriptEncode(str) \n     \n    var hex=new Array('0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f');\n        \n    function changeTo16Hex(charCode){\n        return \"\\\\x\" + charCode.charCodeAt(0).toString(16);\n    }\n    \n    function encodeCharx(original) {\n        \n        var found = true;\n        var thecharchar = original.charAt(0);\n        var thechar = original.charCodeAt(0);\n        switch(thecharchar) {\n            case '\\n': return \"\\\\n\"; break; //newline\n            case '\\r': return \"\\\\r\"; break; //Carriage return\n            case '\\'': return \"\\\\'\"; break;\n            case '\"': return \"\\\\\\\"\"; break;\n            case '\\&': return \"\\\\&\"; break;\n            case '\\\\': return \"\\\\\\\\\"; break;\n            case '\\t': return \"\\\\t\"; break;\n            case '\\b': return \"\\\\b\"; break;\n            case '\\f': return \"\\\\f\"; break;\n            case '/': return \"\\\\x2F\"; break;\n            case '<': return \"\\\\x3C\"; break;\n            case '>': return \"\\\\x3E\"; break;\n            default:\n                found=false;\n                break;\n        }\n        if(!found){\n            if(thechar > 47 && thechar < 58){ //数字\n                return original;\n            }\n            \n            if(thechar > 64 && thechar < 91){ //大写字母\n                return original;\n            }\n\n            if(thechar > 96 && thechar < 123){ //小写字母\n                return original;\n            }        \n            \n            if(thechar>127) { //大于127用unicode\n                var c = thechar;\n                var a4 = c%16;\n                c = Math.floor(c/16); \n                var a3 = c%16;\n                c = Math.floor(c/16);\n                var a2 = c%16;\n                c = Math.floor(c/16);\n                var a1 = c%16;\n                return \"\\\\u\"+hex[a1]+hex[a2]+hex[a3]+hex[a4]+\"\";        \n            }\n            else {\n                return changeTo16Hex(original);\n            }\n            \n        }\n    }     \n  \n    var preescape = str;\n    var escaped = \"\";\n    var i=0;\n    for(i=0; i < preescape.length; i++){\n        escaped = escaped + encodeCharx(preescape.charAt(i));\n    }\n    return escaped;\n}\n```\n\n---\n\n## 📚参考列表（致敬）\n\n- [30s-code](https://30secondsofcode.org/)\n- [掘金文章-2019.6.17日整理](https://juejin.im/post/5d01bd04f265da1b7a4b6e03#heading-2)\n- [js tricks](https://qishaoxuan.github.io/js_tricks/)\n- [正则参考，感谢](https://github.com/any86/any-rule)\n- [掘金作者-前端小智 感谢](https://juejin.im/user/59df61ec51882578ce26ee6e)\n- [GitHub lengyuexin 感谢](https://github.com/lengyuexin/blink/blob/master/blink.js)\n- 日常工作总结\n"
  },
  {
    "path": "docs/quickcheck/1.前端/4.jQuery及其周边库速查.md",
    "content": "---\ntitle: 4.jQuery及其周边库速查\ndate: 2020-01-30 00:00:00\npermalink: quickcheck/1-4\n---\n\n# 4.jQuery及其周边库速查\n\n---\n\n## 🐣第一部分：jQuery\n\n---\n\n## 🦁第二部分：jQuery系列库（Bootstrap）\n\n---\n\n## 📚参考列表（致敬）\n"
  },
  {
    "path": "docs/quickcheck/1.前端/5.MVVM框架速查（Vue）.md",
    "content": "---\ntitle: 5.MVVM框架速查（Vue）\ndate: 2020-01-30 00:00:00\npermalink: quickcheck/1-5\n---\n\n# 5.MVVM框架速查（Vue）\n\n## 🐢第一部分：Vue\n\n---\n\n## 🦀第二部分：Vue-Cli\n\n---\n\n## 🐟第三部分：Axios\n\n---\n\n## 🐡第四部分：Vue-Router\n\n---\n\n## 🐬第五部分：Vuex\n\n---\n\n## 🦐第六部分：Element.ui\n\n---\n\n## 📚参考列表（致敬）\n"
  },
  {
    "path": "docs/quickcheck/1.前端/6.移动端速查.md",
    "content": "---\ntitle: 6.移动端速查\ndate: 2020-01-30 00:00:00\npermalink: quickcheck/1-6\n---\n\n# 6.移动端速查\n\n---\n\n## 🐂第一部分：HTML5混生开发\n\n### 1.移动端适配方案（rem）\n\n```html\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\">\n    <title>Document</title>\n</head>\n<style>\n    * {\n        padding: 0;\n        margin: 0;\n    }\n    html,body {\n        width: 100%;\n        height: 100%;\n    }\n    .rem-test {\n        background: blue;\n        width: 100%;\n        height: 100%;\n    }\n</style>\n<body>\n    \n    <div class=\"rem-test\"></div>\n    <script>\n        !(function(win, doc) {\n            var htmlDom = doc.getElementsByTagName('html')[0];\n            var resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize';\n            var recalc = function() {\n                var htmlWidth = doc.documentElement.clientWidth || doc.body.clientWidth;\n                htmlDom.style.fontSize = htmlWidth / 10 + 'px';\n            };\n\n            if (!doc.addEventListener) return;\n            win.addEventListener(resizeEvt, recalc, false);\n            doc.addEventListener('DOMContentLoaded', recalc, false);\n        }(window, document));\n    </script>\n</body>\n</html>\n```\n\n---\n\n## 🐪第二部分：微信小程序\n\n---\n\n## 🦏第三部分：Flutter\n\n---\n\n## 🐘第四部分：React-Native\n\n---\n\n## 🐑第五部分：移动端原生开发\n\n---\n\n## 📚参考列表（致敬）\n"
  },
  {
    "path": "docs/quickcheck/1.前端/7.其他.md",
    "content": "---\ntitle: 7.其他\ndate: 2020-01-30 00:00:00\npermalink: quickcheck/1-7\n---\n\n# 7.其他\n\n::: tip\n备注：这个栏目，存放一些过小的问题（不适合单独成一章的），如果后期拓展的很多，就可以考虑单独抽离出去一部分知识\n:::\n\n---\n\n## 🌟第一部分：Git && GitHub\n\n### 1.Git常用命令\n\n```sh\n# 创建新仓库\ngit init\n\n# 检出仓库\ngit clone username@host:/path/to/repository\n\n# 来一次添加所有改变的文件\ngit add -A . \n\n# 表示添加所有内容\ngit add -A \n\n# 表示添加新文件和编辑过的文件不包括删除的文件\ngit add . \n\n# 表示添加编辑或者删除的文件，不包括新添加的文件\ngit add -u\n\n# 你的改动已经提交到了 HEAD，但是还没到你的远端仓库\ngit commit -m '代码提交信息'\n\n# 推送改动\ngit push origin master\n\n\n\n# 查看状态\ngit status \n\n\n# 查看每个分支的最新提交记录\ngit branch -av\n\n# 查看每个分支属于哪个远程仓库\ngit branch -vv\n\n# 下载Git项目\ngit clone 地址\n\n\n# 查看用户名\ngit config user.name\n\n# 查看用户邮箱\ngit config user.email\n\n# 修改用户名\ngit config --global user.name \"Your_username\"\n\n# 修改用户邮箱\ngit config --global user.email \"Your_email\"\n```\n\n- [更多](https://www.bootcss.com/p/git-guide/)\n\n---\n\n### 2.shields.io使用（给项目添加徽章）\n\n- MIT使用举例：https://shields.io/category/license/  （要选GitHub哦）\n- 使用说明：https://www.sohu.com/a/134390224_655394\n\n\n---\n\n## 💫第二部分：包管理工具（npm）\n\n### 1.npm基本使用\n\n```sh\n# 初始化项目（也可以写 npm init -y）\nnpm init\n\n# 安装（简写 npm i）\nnpm install\n\n# 帮助（简写 npm -h）\nnpm --help\n\n# 全局标志（简写 -g）\n--global\n\n# 保存为开发依赖（简写 -D）\n--save-dev\n\n# 保存为生产依赖（简写 -d）\n--save\n\n# 卸载npm安装的包\nnpm uninstall 包的名称 -g\n```\n\n\n\n**设置 npm init属性，这样在初始化的时候，就不用每次都写了**\n\nnpm config set init.author.name \"Zhu Kunpeng\"\nnpm config set init.author.email \"270750933@qq.com\"\nnpm config set init.author.url \"itzkp.com\"\nnpm config set init.license \"MIT\"\n\n**让脚本跨平台兼容：cross-env**\n\n- 安装：npm i -D cross-env\n\n```js\n// 然后在任何环境变量之前包括关键字cross-env，如下\n{\n  \"scripts\": {\n    \"dev\": \"cross-env node app.js\"\n  }\n}\n```\n\n**[参考掘金文章，作者小智，感谢](https://juejin.im/post/5d1d40ea6fb9a07eb94fa7df#comment)**\n\n---\n\n### 2.发布包到NPM上\n\n```sh\n\n# 登录（会让你输入账号密码，邮箱）\nnpm adduser\n\n# 上传（注意package.json里面的name不要和npm仓库重复）\nnpm publish\n```\n\n\n---\n\n## ✨第三部分：前端工程化工具（Webpack）\n\n- 首先肯定要 npm init\n- 安装webpack：npm i webpack webpack-cli -D\n- 新建 webpack.config.js 文件\n- 常用loader\n  - npm i file-loader -D （用于移动字体文件等）\n  - npm i url-loader -D（用于打包图片等）\n  - npm i css-loader style-loader -D（打包基础CSS样式文件）\n  - npm i node-sass sass-loader -D（打包scss样式文件）\n  - npm i postcss-loader autoprefixer -D（自动添加厂商前缀，需要建立一个新的文件 postcss.config.js ）\n- 常用plugin\n  - npm i html-webpack-plugin -D （会在打包完成之后，自动生成一个HTML文件，并把打包之后的JS自动引入到这个HTML文件中）\n- 其他\n  - SourceMap\n  - WebpackDevServer\n  - Hot Module Replacement\n\n```js\n// webpack.config.js 配置示例\n\nconst path = require('path')\nconst HtmlWebpackPlugin = require('html-webpack-plugin');\n\nexport default {\n      \n    // 环境（默认是production，开启压缩等默认配置 || development是开发环境，不压缩...）\n    mode: 'production',\n    \n    // 有了这个在就能在出错的时候，准确定位到是哪里的问题，这个devtool 还有很多配置，具体查阅文档\n    devtool: 'cheap-module-eval-source-map',\n\n    // 启动一个serve：npx webpack-dev-server\n    devServer: {\n      contentBase: './dist', // 启动的目录\n      open: true, // 自动打开浏览器\n      hot: true, // 启动热更新\n      hotOnly: true // 不刷新页面\n    }, \n\n    // 入口：简写 entry: '入口文件地址'\n    entry: {\n        main: '入口文件地址',\n        // main2: '入口文件2地址' 多文件入口\n    },\n\n    // 模块规则\n    module: {\n      rules: [\n        \n        // file-loader\n        {\n          test: /\\.(字体文件后缀)$/,\n          use: {\n            loader: 'file-loader',\n            options: {\n              name: '[name].[ext]', // \n              outputPath: 'font/' // 打包输出文件夹\n            }\n          }\n        },\n\n        // url-loader\n        {\n          test: /\\.(jpg|png|gif)$/,\n          use: {\n            loader: 'url-loader',\n            options: {\n              name: '[name].[ext]', // \n              outputPath: 'images/', // 打包输出文件夹\n              limit: 2048 // 如果小于 2kb，就会打包进JS，如果大于就打包到文件夹中\n            }\n          }\n        },\n\n        // 打包静态样式\n        {\n          test: '/\\.css$/',\n          use: ['style-loader', 'css-loader', 'sass-loader', 'postcss-loader']\n        }\n      ]\n    }\n\n    // 插件\n    plugins: [\n      new HtmlWebpackPlugin({\n        // 配置，index.html 模板，以此为模板进行注入\n        template: './test/index.html'\n      })\n    ]\n\n    // 输入\n    output: {\n        filename: '输入文件名', // 输出文件夹名称, 可以使用占位符, 例如'[name]_[hash].[ext]'\n        publicPath: 'https://cdn.com.cn', // 配置引入前缀,如果静态资源在CDN上这个很有用\n        path: path.resolve(__dirname, '输入文件夹') // 输入目录\n    },\n\n}\n```\n\n---\n\n**postcss.config.js 配置示例**\n\n```js\n// 默认是这样写的\nmodule.exports = {\n  parser: 'sugarss',\n  plugins: {\n    'postcss-import': {},\n    'postcss-cssnext': {},\n    'cssnano': {}\n  }\n}\n\n// 我们也可以这么写\n// 这么写的作用是，当我们使用 postcss-loader 的时候，会使用 autoprefixer 这个插件\nmodule.exports = {\n  plugins: [\n    require('autoprefixer')\n  ]\n}\n```\n\n---\n\n**.babelrc 配置示例**\n\n```js\n\n```\n\n---\n\n## ☀️第四部分：测试（Jest）\n\n### 1.Jest 常用匹配器速查\n\n```js\n\n// ========== 和真假相关的匹配器 ===========\n\nexpect(1).toBe(1) // 通过：有点类似于 === \n\nexpect({ name: '朱昆鹏' }).toEqual({ name: '朱昆鹏' }) // 通过：匹配内容相等\n\nexpect(null).toBeNull() // 通过：匹配是否是 null\n\nexpect(undefined).toBeUndefined() // 通过：匹配是否是 undefined\n\nexpect(true).toBetruthy() // 通过：匹配 是否为真，填 1 也行\n\nexpect(0).toBeFalsy() // 通过：匹配是否为假，填 false 也行\n\nexpect(0).not.toBeFalsy() // 不通过：可以通过 not 进行取反\n\n// ...\n\n\n// ========== 和数字相关的匹配器 ===========\n\nexpect(10).toBeGreaterThan(9) // 通过，匹配的是 10 是否 比 9 大\n\nexpect(10).toBeLessThan(11) // 通过，匹配的是 10 是否 比 11 小\n\nexpect(10).toBeGreaterThanOrEqual(10) // 通过，匹配的是 10 是否 大于等于 10\n\nexpect(11).toBeLessThanOrEqual(11) // 通过，匹配的是 11 是否小于等于 11\n\nexpect(0.1 + 0.2).toBeCloseTo(0.3) // 通过，判断小数是否相同，直接比较的话会有精度缺失的问题，比较不了\n\n// ...\n\n\n// ========= 和字符串相关的匹配器 ===========\n\nexpect('朱昆鹏').toMatch('昆鹏') // 通过，匹配的是 '朱昆鹏' 中是否有 '昆鹏' 字符 | 还可以写正则表达式\n\n// ...\n\n\n// ========= 和数组相关的匹配器 ===========\n\nexpect([1,2,3]).toContain(2) // 通过，匹配的是 数组中 是否包含 2 这一项，也可以判断 Set, Map 这种类型的\n\n// ...\n\n\n// ========= 和异常相关的匹配器 ===========\n\nexpect(throw new Error('出现错误')).toThrow() // 通过，匹配的是 是否出现异常\n\n// ...\n\n\n```\n\n\n---\n\n## ❄️第五部分：CSS预处理器\n\n---\n\n## 💥第六部分：跨平台开发（Electron）\n\n\n---\n\n## 🔥第七部分：日常开发中总结出来的组件（移动端）\n\n### 1.弹框组件（DialogGray.vue）\n\n**使用方法**\n\n```html\n<dialog-gray v-model=\"dialogVisible\" :opacity=\"opacity\" :is-click=\"isClick\">\n    //opacity 蒙层透明度 不传默认为.5\n    //isClick 蒙层是否可点击 默认可点击,传false即不可点击\n    //阻止点击冒泡在蒙层内部加@click.stop\n    //阻止滑动冒泡在蒙层内部加@touchmove.stop\n    //弹窗过大，内部div加class=\"part-scroll\" 去掉滚动条：.part-scroll::-webkit-scrollbar {display: none;}\n</dialog-gray>\n```\n\n---\n\n```html\n<template>\n  <div\n    v-if=\"dialogVisible\"\n    ref=\"dialogGray\"\n    class=\"dialogSt\"\n    :style=\"background\"\n    @click=\"closeDia\"\n    @touchmove.stop.prevent\n  >\n    <slot />\n\n  </div>\n</template>\n<script>\nexport default {\n    name: 'DialogGray',\n    model: {\n        prop: 'dialogVisible',\n        event: 'change'\n    },\n    props: {\n        dialogVisible: {\n            type: Boolean,\n            default: false\n        },\n        opacity: {\n            type: Number,\n            default: 0.5\n        },\n        isClick: {\n            type: Boolean,\n            default: true\n        }\n    },\n    data() {\n        return {\n            top: '',\n            background: {\n                'background': `rgba(0,0,0,${this.opacity})`\n            }\n        };\n    },\n    watch: {\n        dialogVisible: {\n            immediate: true,\n            handler(newval) {\n                const bodyEl = document.body;\n                if (newval) {\n                    this.$nextTick(() => {\n                        bodyEl.appendChild(this.$refs['dialogGray']);\n                    });\n                    this.top = window.scrollY;\n                    bodyEl.style.position = 'fixed';\n                    bodyEl.style.top = -this.top + 'px';\n                } else {\n                    bodyEl.style.position = '';\n                    bodyEl.style.top = '';\n                    window.scrollTo(0, this.top); // 回到原先的top\n                }\n            }\n        }\n    },\n    methods: {\n        closeDia() {\n            if (!this.isClick) {\n                return;\n            }\n            this.$emit('change', false);\n        }\n    }\n};\n</script>\n<style scoped>\n.dialogSt {\n  position: fixed;\n  width: 100%;\n  height: 100%;\n  z-index: 99;\n  left: 0;\n  top: 0;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n}\n</style>\n```\n\n---\n\n### 2.奖励轮播组件（RewardWheel.vue）\n\n**使用方法**\n\n```html\n<reward-wheel\n  :wheel-row-height=\"23\"\n  :wheel-rem-size=\"37.5\"\n  :wheel-time=\"4000\"\n  :wheel-number=\"playMsg.length - 2\">\n  <!-- 书写业务代码区域 -->\n  <div></div>\n</reward-wheel>\n```\n\n- wheel-row-height：滚动的距离\n- wheel-rem-size：rem相对单位（适配用）\n- wheel-time：滚动一个的时间\n- wheel-number：滚动的数量\n\n---\n\n```html\n<template>\n  <div :style=\"loopStyle\">\n    <slot />\n  </div>\n</template>\n\n<script>\nexport default {\n    props: {\n        // 默认轮播数量\n        wheelNumber: {\n            type: Number,\n            default: 0\n        },\n        // 轮播一个需要的时间\n        wheelTime: {\n            type: Number,\n            default: 3000\n        },\n        // 每次滚动的距离\n        wheelRowHeight: {\n            type: Number,\n            default: 10\n        },\n        // 当前环境rem对px的值\n        wheelRemSize: {\n            type: Number,\n            default: 32\n        }\n    },\n    data() {\n        return {\n            // 中奖信息（轮播）\n            loopStyle: {\n                transform: '',\n                transition: 'none'\n            },\n            activeIndex: 0\n        };\n    },\n    watch: {\n        activeIndex(val) {\n            const transition = this.activeIndex === 0\n                ? 'none'\n                : 'all .5s';\n            const top = ((-val * this.wheelRowHeight) / this.wheelRemSize) + 'rem';\n            this.loopStyle = {\n                transform: `translateY(${top})`,\n                transition: transition\n            };\n        }\n    },\n    mounted() {\n        this.loopListTool(); // 自动轮播函数\n        this.distanceAdaptationTool(); // 自动适配各个屏幕滚动距离\n    },\n    methods: {\n        // 自动轮播函数\n        loopListTool() {\n            this.$nextTick(() => {\n                window.clearInterval(this.interval);\n                this.interval = setInterval(() => {\n                    if (this.activeIndex < this.wheelNumber - 1) {\n                        this.activeIndex += 1;\n                    } else {\n                        this.activeIndex = 0;\n                    }\n                }, this.wheelTime);\n            });\n        },\n        // 自动适配各个屏幕滚动距离\n        distanceAdaptationTool() {\n            const rem = this.wheelRowHeight / this.wheelRemSize;\n            this.wheelRemSize = document.documentElement.clientWidth / 10;\n            this.wheelRowHeight = rem * this.wheelRemSize;\n        }\n    }\n};\n</script>\n```\n\n- end-time-data： 结束时间 | String（xxxx-xx-xx xx:xx:xx）或者 Number（时间戳）\n- @time-end: 倒计时结束的时候触发\n\n---\n\n### 3.倒计时组件（CountDown.vue）\n\n**使用方法**\n\n```html\n<!-- end-time-data：2020-01-30 00:00:00 -->\n<div style=\"padding: 5px; border: 1px solid red;\" >\n  <count-down \n    :end-time=\"1580313600000\"\n    @time-end=\"timeEndEvent\">\n  </count-down>\n</div>\n```\n\n---\n\n```html\n<template>\n  <div>\n    {{ time }}\n  </div>\n</template>\n\n<script>\nexport default {\n    props: {\n        // 结束时间\n        endTime: {\n            type: [Number, String],\n            default: null\n        }\n    },\n    data() {\n        return {\n            time: '', // 时间展示\n            flag: false // 是否启动时间\n        };\n    },\n    mounted() {\n        this.visibilitychangeEvent();\n        this.init();\n    },\n    methods: {\n        init() {\n            if (this.endTime === null) return;\n            const time = setInterval(() => {\n                if (this.flag == true) {\n                    clearInterval(time);\n                    return;\n                }\n                this.timeDown();\n            }, 500);\n        },\n        // 倒计时组件 核心逻辑\n        timeDown() {\n            // 结束时间\n            let endTimeData = null;\n            typeof this.endTime === 'number'\n                ? endTimeData = new Date(this.endTime)\n                : endTimeData = this.timeStrToCorrectTool(this.endTime);\n\n            // 当前时间（默认是系统当前时间）\n            const nowTime = new Date();\n\n            // 相差时间\n            const leftTime = parseInt((endTimeData.getTime() - nowTime.getTime()) / 1000);\n\n            if (leftTime <= 0) {\n                this.time = `0小时 0分 0秒`;\n                this.flag = true;\n                this.$nextTick(() => {\n                    this.$emit('time-end');\n                });\n                return;\n            }\n\n            const d = parseInt(leftTime / (24 * 60 * 60));\n            const h = this.formateTool(parseInt(leftTime / (60 * 60) % 24 + d * 24));\n            const m = this.formateTool(parseInt(leftTime / 60 % 60));\n            const s = this.formateTool(parseInt(leftTime % 60));\n            this.time = `${h}小时 ${m}分 ${s}秒`;\n        },\n        // 将小于10的数 转为 0开头的\n        formateTool(time) {\n            return time >= 10\n                ? time\n                : `0${time}`;\n        },\n        // 兼容IOS 日期字符串 格式NaN的问题\n        timeStrToCorrectTool(endTime) {\n            const arr = endTime.split(/[- :]/);\n            const endTimeData = new Date(arr[0], arr[1] - 1, arr[2], arr[3], arr[4], arr[5]);\n            return endTimeData;\n        },\n        // 息屏检测事件，防止定时器关闭\n        visibilitychangeEvent() {\n            document.addEventListener('visibilitychange', () => {\n                this.init();\n            }, false);\n        }\n    }\n};\n</script>\n```\n\n---\n\n## 📚参考列表（致敬）\n\n- [Git部分参考，写的很好](https://www.nodejs.red/#/tools/git)\n\n"
  },
  {
    "path": "docs/quickcheck/2.后端/1.Node速查.md",
    "content": "---\ntitle: 1.Node速查\ndate: 2020-01-30 00:00:00\npermalink: quickcheck/2-1\n---\n\n# 1.Node速查\n\n## 🍡第一部分：Node基础操作\n\n### 1.文件系统\n\n```js\n// ============++ 同步 ++============\n\n// 1.同步读取文件\nfs.readFileSync('input.txt').toString()\n\n// 2.同步写入文件\nfs.writeFileSync(file, data)\n\n// 3.同步追加内容\nfs.appendFileSync(file, data)\n\n// 4.同步读取目录\nfs.readdirSync(path)\n\n// 5.同步创建目录\nfs.mkdirSync(path, [option]) //  options 参数一 是否以递归的方式创建目录，默认false |参数二： mode 设置目录权限，默认0777\n\n// 6.同步删除目录\nfs.rmdirSync(path)\n\n// 7.获取文件信息\nfs.statSync('路径')\n\n// 8.删除文件\nfs.unlinkSync(path)\n\n\n\n// ============++ 异步 ++============\n\n// 1.异步读取文件\nfs.readFile('input.txt', (err, data) => {\n   if (err) console.error(err);\n   console.log(\"异步读取: \" + data.toString());\n})\n\n// 其余的都是一个道理，去除掉Sync，加个回调函数\n```\n\n::: tip\n[更多请看...](https://www.runoob.com/nodejs/nodejs-fs.html)\n:::\n\n---\n\n### 2.启动http服务\n\n```javascript\n//导入HTTP模块\nlet http = require('http')\n \n//定义一个要监听的端口\nconst PORT = 8989;\n \n// 一个处理请求和发送响应的函数\nconst handleRequest = (request, response) => {\n    response.end('Hello World!!!')\n}\n\n// 创建服务器\nlet server = http.createServer(handleRequest);\n \n// 启动服务\nserver.listen(PORT, () => {\n    console.log(\"Server listening on: http://localhost:%s\", PORT);\n})\n```\n\n---\n\n### 3.快速启动一个代理静态资源的HTTP服务\n\n::: tip\n中文目录会有代理不上的地方（一般也不用纯Node代理，直接用第三方框架代理）\n:::\n\n```javascript\nlet http = require('http')\nlet fs = require('fs')\nlet url = require('url')\nlet path = require('path')\n\nlet server = http.createServer(function(request, response){\n    //获取输入的url解析后的对象\n    let pathObj = url.parse(request.url, true);\n    //static文件夹的绝对路径\n    let staticPath = path.resolve(__dirname, 'dist')\n    //获取资源文件绝对路径\n    let filePath = path.join(staticPath, pathObj.pathname)\n    // 如果是根目录的情况下的访问，需要拼接上 /index.html\n    if (filePath.charAt(filePath.length-1)==\"/\"){\n      filePath+=\"index.html\";\n    }\n    //异步读取file\n    fs.readFile(filePath, 'binary', function(err, fileContent){\n        if (err) {\n            console.log('404')\n            response.writeHead(404, 'not found')\n            response.end('<h1>404 Not Found</h1>')\n        } else {\n            console.log('ok')\n            response.write(fileContent, 'binary')\n            response.end()\n        }\n    })\n})\n\nserver.listen(9999)\nconsole.log('visit http://localhost:9999')\n```\n\n---\n\n### 4.Express代理静态资源（我一般用这个）\n\n- 安装：npm install express --save\n\n```javascript\nvar express = require('express')\nvar app = express()\n\napp.use(express.static('docs')) // 代理的文件夹（自动找文件夹下的index.html为 /级目录内容）\n\napp.listen(3000, () => console.log('Example app listening on port 3000!'))\n```\n\n---\n\n## 🍭第二部分：Node常用的组合操作\n\n### 1.复制某文件夹下所有的文件到另一个文件夹\n\n```js\nconst fs = require('fs')\n\n// 复制文件夹\nfunction exists (src, dst) {\n  //测试某个路径下文件是否存在\n  fs.exists(dst, function(exists){\n      if (exists) {//不存在\n          copy(src,dst);\n      } else {//存在\n          fs.mkdir(dst,function(){//创建目录\n              copy(src,dst)\n          })\n      }\n  })\n}\n\n// 复制文件夹的辅助函数\nfunction copy (src, dst) {\n  //读取目录\n  let paths = fs.readdirSync(src);\n  paths.forEach(function(path){\n      var _src=src+'/'+path;\n      var _dst=dst+'/'+path;\n      var readable;\n      var writable;\n      fs.stat(_src,function(err,st){\n          if(err){\n              throw err;\n          }\n          \n          if(st.isFile()){\n              readable=fs.createReadStream(_src);//创建读取流\n              writable=fs.createWriteStream(_dst);//创建写入流\n              readable.pipe(writable);\n          }else if(st.isDirectory()){\n              exists(_src,_dst,copy);\n          }\n      });\n  });\n}\n\n// 使用演示 将 a 文件夹下 所有的文件，复制到 b文件夹下\nexists('./a', './b')\n```\n\n---\n\n## 📚参考列表（致敬）\n\n- [Node教程|菜鸟教程](https://www.runoob.com/nodejs/nodejs-tutorial.html)\n"
  },
  {
    "path": "docs/quickcheck/2.后端/2.Node第三方库速查.md",
    "content": "---\ntitle: 2.Node第三方库速查\ndate: 2020-01-30 00:00:00\npermalink: quickcheck/2-2\n---\n\n# 2.Node第三方库速查\n\n> 内容尚未梳理\n\n## 第一部分：Express\n\n---\n\n## 第二部分：Koa2\n\n---\n\n## 第三部分：Egg\n\n---\n\n## 第四部分：Hapi\n\n---\n\n## 📚参考列表（致敬）"
  },
  {
    "path": "docs/quickcheck/2.后端/3.MySQL速查.md",
    "content": "---\ntitle: 3.MySQL速查\ndate: 2020-01-30 00:00:00\npermalink: quickcheck/2-3\n---\n\n# 3.MySQL速查\n\n> 内容尚未梳理\n\n---\n\n## 之前的内容，重构后删除\n\n---\n\n### 基础增删改查 🔥\n\n##### 表数据的查看（select）\n\n- 这个我稍微熟悉一点，先不写了\n\n---\n\n##### 表数据的增加（insert）\n\n**insert into 表名(字段名 ...) values(数据...)**\n\n```javascript\n// 举例 : (掌握下面三个基本学完)\n\n// ① 在表 blog_user 中插入一条完整数据\ninsert into blog_user(id,username,password,ctime) values(1,'zhukunpeng','123456','2018-11-23');\n\n// ② 在表 blog_user 中插入一天只有部分字段的数据\ninsert into blog_user(id,username,password) values(1,'zhukunpeng','123456');\n\n// ③ 插入 blog_demo表的 查询结果\ninsert into blog_user (id,username,password) select id,username,password from blog_demo\n```\n\n---\n\n##### 表数据的删除（delete）\n\n**delete from 表名 where 字段名=''**\n\n```javascript\n\n// 注意 ：delete 删除数据，如果不加 where 会删除表中所有的数据，所以要加上限制条件 where\n\n// 案例 ：删除 blog_user 表中 username 为 zhukunpeng 的字段\ndelete from blog_user where username='zhukunpeng'\n\n```\n\n---\n\n##### 表数据的修改（update）\n\n**update 表名 set 需要更改的字段='' where 限制条件**\n\n```javascript\n\n// 注意 ：update 修改数据，如果不加 where 会跟新表中所有的行\n\n// 案例 ：修改 blog_user 表中 username='zhukunpeng' 的字段 密码改为 654321\nupdate blog_user set password='654321' where username='zhukunpeng'\n\n```\n\n---\n\n### 其他\n\n创建数据库通常情况下 字符集和排列规则\n  - 字符集：utf8 \n  - 排列规则：utf8_general_ci\n\n[更多解释......书写中]()\n\n---\n\n## 📚参考列表（致敬）"
  },
  {
    "path": "docs/quickcheck/2.后端/4.MongoDB速查.md",
    "content": "---\ntitle: 4.MongoDB速查\ndate: 2020-01-30 00:00:00\npermalink: quickcheck/2-4\n---\n\n# 4.MongoDB速查\n\n> 内容尚未梳理\n\n## 之前的内容，重构完成之后删除\n\n**(mongoose官方文档)[http://mongoosejs.net/]，安装之类的照着上面来**\n\n### 1.快速上手\n\n```js\n\n// ① 连接数据库\nvar mongoose = require('mongoose');\nmongoose.connect('mongodb://ip或者网址:端口号/数据库名称?配置...'); // 连接数据库，配置可以不写\n\n// 错误 和 成功\ndb.on('error', console.error.bind(console, 'connection error:'));\ndb.once('open', function() { console.log('连接成功') });\n\n\n// ② 创建 Schema (Mongoose 里，一切都始于Schema)\nvar personSchema = mongoose.Schema({\n  name: String,\n  age: { type: Number }\n});\n\n\n// ③ 把 schema 编译成一个 Model\nvar Person = mongoose.model('Person', personSchema); // 注：'Person' 这个是 MongoDB 连接的数据库的 集合名称\n\n\n// ④ 使用 Model\n// 注：model 是我们构造 document 的 Class，我们知道，一个集合里面有很多文档\n\nPerson.find() // 查找所有的文档\nPerson.find({ name: /朱/ }) // 查找特定的文档\n\nvar zhu = new Person({ name: '朱昆鹏', age: 21 }) // 添加文档，.save()是mongoose规定的添加文档的方法\nzhu.save()\n\n```\n\n---\n\n### 2.连接（省略...）\n\n\n---\n\n### 3.模式类型（SchemaTypes）\n\n合法的模式类型有：String，Number，Array，Boolean，ObjectId，Date，Buffer，Mixed，Decimal128\n\n```js\n\n// 详细示例\n\n\n```\n\n### 4.模型（Models）\n\n```js\n\n// ① 增\nvar zhu = new Person({ name: '朱昆鹏', age: 21 }) // Documents 是 model 的实例。 创建它们并保存到数据库非常简单\nzhu.save()\n\n\n// ② 删\nPerson.remove({ name: '朱昆鹏' }) // model 的 remove 方法可以删除所有匹配查询条件的文档。\n\n\n// ③ 改\nPerson.findOneAndUpdate(...) // model 的 update 方法可以修改数据库中的文档，不过不会把文档返回给应用层，可以使用 findOneAndUpdate 方法\n\n// ④ 查\nPerson.find() // 查找所有的文档\nPerson.find({ name: /朱/ }) // 查找特定的文档\n\n```\n\n---\n\n### 5.其他\n\n\n\n\n\n## 📚参考列表（致敬）"
  },
  {
    "path": "docs/quickcheck/2.后端/5.Redis速查.md",
    "content": "---\ntitle: 5.Redis速查\ndate: 2020-01-30 00:00:00\npermalink: quickcheck/2-5\n---\n\n# 5.Redis速查\n\n> 内容尚未梳理\n\n---\n\n## 📚参考列表（致敬）"
  },
  {
    "path": "docs/quickcheck/2.后端/6.其他.md",
    "content": "---\ntitle: 6.其他\ndate: 2020-01-30 00:00:00\npermalink: quickcheck/2-6\n---\n\n# 6.其他\n\n> 声明：这个栏目，存放一些过小的问题（不适合单独成一章的），如果后期拓展的很多，就可以考虑单独抽离出去一部分知识\n"
  },
  {
    "path": "docs/quickcheck/3.运维/1.各种软件安装速查.md",
    "content": "---\ntitle: 1.各种软件安装速查\ndate: 2020-01-30 00:00:00\npermalink: quickcheck/3-1\n---\n\n# 1.各种软件安装速查\n\n---\n\n## 🍀第一部分：Centos7.*下安装软件\n\n### 1. 安装Node\n\n- 设置安装源：curl --silent --location https://rpm.nodesource.com/setup_11.x | bash -\n- 安装node：yum install -y nodejs\n- [更多详细介绍](https://github.com/nodesource/distributions)\n\n---\n\n### 2. 安装MongoDB\n\n::: warning\n注意：下面安装的是MongoDB4.0\n:::\n\n- 创建个人仓库：vi /etc/yum.repos.d/mongodb-org-4.0.repo\n- 插入文本段\n\n[mongodb-org-4.0]\nname=MongoDB Repository\nbaseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.0/x86_64/\ngpgcheck=0\nenabled=1\ngpgkey=https://www.mongodb.org/static/pgp/server-4.0.asc\n\n注意：第一次复制粘贴文本段会造成缺失，可以全部删除重新粘贴，或者直接光标移至最前面进行输入补全\n\n- 运行命令：yum install -y mongodb-org\n- 启动mongDB：service mongod start\n\n---\n\n### 3. 安装Nginx\n\n- 安装：yum install nginx\n- 启动nginx：service nginx start\n- 开机自启：systemctl enable nginx.service \n- 重启服务：nginx -s reload\n\n---\n\n### 4. 安装pm2\n\n- 安装：npm install -g pm2\n- 运行程序：pm2 start 程序路径\n- 生成自启脚本，保持当前进程活跃：pm2 startup\n- 保存当前进程状态：pm2 save\n\n---\n\n### 5. 安装GitLab\n\n版本：11.9.9\n- 下载rpm：wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-11.9.9-ce.0.el7.x86_64.rpm\n- 安装：rpm -i gitlab-ce-11.9.9-ce.0.el7.x86_64.rpm\n- 修改gitlab配置文件指定服务器ip和自定义端口 vim  /etc/gitlab/gitlab.rb\n- gitlab-ctl reconfigure\n- gitlab-ctl restart\n- 登录：初始账户: root 密码: 5iveL!fe\n\n> 问题：想安装中文版的，不知道怎么安装\n\n---\n\n### 6. 安装Docker\n\n```sh\nyum install -y yum-utils \\\n  device-mapper-persistent-data \\\n  lvm2\n\nyum-config-manager \\\n    --add-repo \\\n    https://download.docker.com/linux/centos/docker-ce.repo\n\n# 正式下载\nyum install docker-ce docker-ce-cli containerd.io -y\n\n# 启动\nsystemctl start docker\n```\n\n---\n\n### 7.安装Jenkins\n\n```sh\nyum install java -y\n\nyum install git -y\n\nwget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo\n\nrpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key\n\n# 完成之后直接使用 yum 命令安装 Jenkins\nyum install jenkins -y\n\n\n# Jenkins 修改权限 找到$JENKINS_USER 改为 “root”:\nvim /etc/sysconfig/jenkins\n\n# 然后更改执行以下命令 Jenkins home，webroot 和日志的所有权：\nchown -R root:root /var/lib/jenkins\nchown -R root:root /var/cache/jenkins\nchown -R root:root /var/log/jenkins\n\n# 启动 jenkins 有一个OK表示启动成功\nservice jenkins restart\n\n# 在本地浏览器输入你的 ip 地址加 默认端口 8080 就可以看到 jenkins 解锁页面\n# 密码：vim /var/lib/jenkins/secrets/initialAdminPassword\n# 选择安装推荐的插件即可 等待安装\n```\n\n\n[更多文档参考](https://juejin.im/post/5b371678f265da599f68dfa2)\n\n---\n\n### 8.安装MySQL\n\n```sh\nwget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm //下载mysql的repo源\n\n# 安装mysql-community-release-el7-5.noarch.rpm包\nrpm -ivh mysql-community-release-el7-5.noarch.rpm\n\n# 安装mysql服务\nyum install mysql-server\n\n# 登录mysql并修改mysql的密码\nmysql -u root\n```\n\n---\n\n**🔥注意：登录时有可能报这样的错：ERROR 2002 (HY000): Can‘t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock‘ (2)**\n\n```sh\n# 原因是/var/lib/mysql的访问权限问题。下面的命令把/var/lib/mysql的拥有者改为当前用户：\n\n# 这里的mysql是用户名（需要设置用户组合用户）（一般照着复制不改也没事）\nsudo chown -R mysql:mysql /var/lib/mysql\n\n# 重启mysql\nservice mysqld restart\n```\n\n---\n\n**设置（修改）密码**\n\n```sh\n# 登录\nmysql -u root\n\nuse mysql;\n\n# 修改密码\nupdate user set password=password('ZHUkun94899.1') where user='root';\n\nservice mysqld restart // 重启MySQL\n\n# 测试\nmysql -u root # 会报错 意思就是你没有使用密码，你要使用密码登录\nmysql -uroot -p密码 # 这样就能进去了，root是用户名\n```\n\n---\n\n\n## 🌾第二部分：docker安装各种软件\n\n### 1.安装MongoDB\n\n- 拉取：docker pull mongo\n- 建立MongoDB存储的目录：mkdir ~/mgdb\n- 运行：docker run -p 27017:27017 -v /Users/zhukunpeng/mgdb:/data/db -d mongo\n  - -p 27017:27017 :将容器的 27017 端口映射到主机的 27017 端口（端口可以自己定义）（前面一个27017是主机端口，后面一个是容器端口）\n  - -v /Users/zhukunpeng/mgdb:/data/db 将主机中下的 mgdb 挂载到容器的/data/db，作为 mongo 数 据存储目录（我这是Mac的目录，你们环境不同目录是不一样的，要改成自己的）\n- 查看容器启动情况：docker ps\n- 重命名容器对象：docker rename 原来名字 修改的名字（这步是为了以后方便，因为你docker ps 查看会发现启动容器的名字是随机的，不好打）\n- 进入mongo容器：docker exec -it 启动容器名字 bash\n\n---\n\n\n## 📚参考列表（致敬）\n\n"
  },
  {
    "path": "docs/quickcheck/3.运维/2.Nginx速查.md",
    "content": "---\ntitle: 2.Nginx速查\ndate: 2020-01-30 00:00:00\npermalink: quickcheck/3-2\n---\n\n# 2.Nginx速查\n\n## 配置\n\n配置：在conf.d/下建立新的conf文件，即可\n\n```js\nserver {\n  set $dir_path /home/ubuntu/fatdoge_web/build;\n        listen 80;\n        server_name qiu;\n        charset utf-8;\n        index index.html;\n        access_log /opt/log/nginx/qiu-http.log access;\n        location /{\n                index index.html index.htm;\n                root $dir_path;\n        }\n\n}\n```\n\n## 判断Nginx是否启动\n[链接](https://blog.51cto.com/lxw1844912514/2940927)\n\n## 查看外网（公网）IP\n[链接](https://blog.csdn.net/weixin_33857230/article/details/86135986)\n\n## 查看端口开没开\n[链接](https://www.jianshu.com/p/78c7f4ab19bd)\n\n```js\n// 一直没反应就是没开，一般用来确定某个端口是否开启了\ntelnet IP地址\n```\n\n## Nginx在线配置\n\n[NGINX 配置](https://www.digitalocean.com/community/tools/nginx?global.app.lang=zhCN)"
  },
  {
    "path": "docs/quickcheck/3.运维/3.Docker速查.md",
    "content": "---\ntitle: 3.Docker速查\ndate: 2020-01-30 00:00:00\npermalink: quickcheck/3-3\n---\n\n# 3.Docker速查\n\n> 内容尚未梳理"
  },
  {
    "path": "docs/quickcheck/3.运维/4.Linux速查.md",
    "content": "---\ntitle: 4.Linux速查\ndate: 2020-01-30 00:00:00\npermalink: quickcheck/3-4\n---\n\n# 4.Linux速查\n\n> 内容尚未梳理\n\n## 文件和目录（查看删除复制）\n\n- cd /home 进入 '/ home' 目录' \n- cd .. 返回上一级目录 \n- cd ../.. 返回上两级目录 \n- cd 进入个人的主目录\n- pwd 显示工作路径 \n- ls 查看目录中的文件 \n- ls -F 查看目录中的文件 \n- ls -l 显示文件和目录的详细资料 \n- ls -a 显示隐藏文件（ls -la 经常这样用）🔥\n- rm -rf dir1 删除一个叫做 'dir1' 的目录并同时删除其内容  🔥\n- rm -rf dir1 dir2 同时删除两个目录及它们的内容 \n- 复制文件：cp 文件地址 目标文件地址 🔥\n- 复制文件夹：cp -r 文件夹地址 目标文件夹地址 🔥\n- ln -s file1 lnk1 创建一个指向文件或目录的软链接 \n- ln file1 lnk1 创建一个指向文件或目录的物理链接 \n\n---\n\n## 打包和压缩文件 \n\n- tar -cvf archive.tar file1 创建一个非压缩的 tarball \n- tar -cvf archive.tar file1 file2 dir1 创建一个包含了 'file1', 'file2' 以及 'dir1'的档案文件 \n- tar -tf archive.tar 显示一个包中的内容 \n- tar -xvf archive.tar 释放一个包 \n- tar -xvf archive.tar -C /tmp 将压缩包释放到 /tmp目录下 \n- tar -cvfj archive.tar.bz2 dir1 创建一个bzip2格式的压缩包 \n- tar -jxvf archive.tar.bz2 解压一个bzip2格式的压缩包 \n- tar -cvfz archive.tar.gz dir1 创建一个gzip格式的压缩包 \n- tar -zxvf archive.tar.gz 解压一个gzip格式的压缩包 \n- ......\n\n---\n\n## 文件搜索\n\n- find / -name file1 从 '/' 开始进入根文件系统搜索文件和目录 \n- find / -user user1 搜索属于用户 'user1' 的文件和目录 \n- find /home/user1 -name \\*.bin 在目录 '/ home/user1' 中搜索带有'.bin' 结尾的文件 \n- find /usr/bin -type f -atime +100 搜索在过去100天内未被使用过的执行文件 \n- find /usr/bin -type f -mtime -10 搜索在10天内被创建或者修改过的文件 \n- find / -name \\*.rpm -exec chmod 755 '{}' \\; 搜索以 '.rpm' 结尾的文件并定义其权限 \n- find / -xdev -name \\*.rpm 搜索以 '.rpm' 结尾的文件，忽略光驱、捷盘等可移动设备 \n- locate \\*.ps 寻找以 '.ps' 结尾的文件 - 先运行 'updatedb' 命令 \n- whereis halt 显示一个二进制文件、源码或man的位置 \n- which halt 显示一个二进制文件或可执行文件的完整路径 \n\n---\n\n## 用户和群组 \n\ngroupadd group_name 创建一个新用户组 \ngroupdel group_name 删除一个用户组 \ngroupmod -n new_group_name old_group_name 重命名一个用户组 \nuseradd -c \"Name Surname \" -g admin -d /home/user1 -s /bin/bash user1 创建一个属于 \"admin\" 用户组的用户 \nuseradd user1 创建一个新用户 \nuserdel -r user1 删除一个用户 ( '-r' 排除主目录) \nusermod -c \"User FTP\" -g system -d /ftp/user1 -s /bin/nologin user1 修改用户属性 \npasswd 修改口令 \npasswd user1 修改一个用户的口令 (只允许root执行) \nchage -E 2005-12-31 user1 设置用户口令的失效期限 \npwck 检查 '/etc/passwd' 的文件格式和语法修正以及存在的用户 \ngrpck 检查 '/etc/passwd' 的文件格式和语法修正以及存在的群组 \nnewgrp group_name 登陆进一个新的群组以改变新创建文件的预设群组\n\n---\n\n## 文件的权限 - 使用 \"+\" 设置权限，使用 \"-\" 用于取消 \n\nls -lh 显示权限 \nls /tmp | pr -T5 -W$COLUMNS 将终端划分成5栏显示 \nchmod ugo+rwx directory1 设置目录的所有人(u)、群组(g)以及其他人(o)以读（r ）、写(w)和执行(x)的权限 \nchmod go-rwx directory1 删除群组(g)与其他人(o)对目录的读写执行权限 \nchown user1 file1 改变一个文件的所有人属性 \nchown -R user1 directory1 改变一个目录的所有人属性并同时改变改目录下所有文件的属性 \nchgrp group1 file1 改变文件的群组 \nchown user1:group1 file1 改变一个文件的所有人和群组属性 \nfind / -perm -u+s 罗列一个系统中所有使用了SUID控制的文件 \nchmod u+s /bin/file1 设置一个二进制文件的 SUID 位 - 运行该文件的用户也被赋予和所有者同样的权限 \nchmod u-s /bin/file1 禁用一个二进制文件的 SUID位 \nchmod g+s /home/public 设置一个目录的SGID 位 - 类似SUID ，不过这是针对目录的 \nchmod g-s /home/public 禁用一个目录的 SGID 位 \nchmod o+t /home/public 设置一个文件的 STIKY 位 - 只允许合法所有人删除文件 \nchmod o-t /home/public 禁用一个目录的 STIKY 位 \n\n---\n\n## 其他\n\n### 系统信息\n\n- arch 显示机器的处理器架构(1) \n- uname -m 显示机器的处理器架构(2) \n- uname -r 显示正在使用的内核版本 \n- dmidecode -q 显示硬件系统部件 - (SMBIOS / DMI) \n- hdparm -i /dev/hda 罗列一个磁盘的架构特性 \n- hdparm -tT /dev/sda 在磁盘上执行测试性读取操作 \n- cat /proc/cpuinfo 显示CPU info的信息 \n- cat /proc/interrupts 显示中断 \n- cat /proc/meminfo 校验内存使用 \n- cat /proc/swaps 显示哪些swap被使用 \n- cat /proc/version 显示内核的版本 \n- cat /proc/net/dev 显示网络适配器及统计 \n- cat /proc/mounts 显示已加载的文件系统 \n- lspci -tv 罗列 PCI 设备 \n- lsusb -tv 显示 USB 设备 \n- date 显示系统日期 \n- cal 2007 显示2007年的日历表 \n- date 041217002007.00 设置日期和时间 - 月日时分年.秒 \n- clock -w 将时间修改保存到 BIOS \n\n### 关机 (系统的关机、重启以及登出 ) \n\nshutdown -h now 关闭系统(1) \ninit 0 关闭系统(2) \ntelinit 0 关闭系统(3) \nshutdown -h hours:minutes & 按预定时间关闭系统 \nshutdown -c 取消按预定时间关闭系统 \nshutdown -r now 重启(1) \nreboot 重启(2) \nlogout 注销 \n\n### YUM 软件包升级器 - （Fedora, RedHat及类似系统） \n\n- yum install package_name 下载并安装一个rpm包 \n- yum localinstall package_name.rpm 将安装一个rpm包，使用你自己的软件仓库为你解决所有依赖关系 \n- yum update package_name.rpm 更新当前系统中所有安装的rpm包 \n- yum update package_name 更新一个rpm包 \n- yum remove package_name 删除一个rpm包 \n- yum list 列出当前系统中安装的所有包 \n- yum search package_name 在rpm仓库中搜寻软件包 \n- yum clean packages 清理rpm缓存删除下载的包 \n- yum clean headers 删除所有头文件 \n- yum clean all 删除所有缓存的包和头文件\n\n### 查看文件内容\n\n- cat file1 从第一个字节开始正向查看文件的内容 \n- tac file1 从最后一行开始反向查看一个文件的内容 \n- more file1 查看一个长文件的内容 \n- less file1 类似于 'more' 命令，但是它允许在文件中和正向操作一样的反向操作 \n- head -2 file1 查看一个文件的前两行 \n- tail -2 file1 查看一个文件的最后两行 \n- tail -f /var/log/messages 实时查看被添加到一个文件中的内容 \n\n\n\n### 文本处理 \n\n- cat file1 file2 ... | command <> file1_in.txt_or_file1_out.txt general syntax for text manipulation using PIPE,STDIN and STDOUT \n- cat file1 | command( sed, grep, awk, grep, etc...) > result.txt 合并一个文件的详细说明文本，并将简介写入一个新文件中 \n- cat file1 | command( sed, grep, awk, grep, etc...) >> result.txt 合并一个文件的详细说明文本，并将简介写入一个已有的文件中 \n- grep Aug /var/log/messages 在文件 '/var/log/messages'中查找关键词\"Aug\" \n- grep ^Aug /var/log/messages 在文件 '/var/log/messages'中查找以\"Aug\"开始的词汇 \n- grep [0-9] /var/log/messages 选择 '/var/log/messages' 文件中所有包含数字的行 \n- grep Aug -R /var/log/* 在目录 '/var/log' 及随后的目录中搜索字符串\"Aug\" \n- sed 's/stringa1/stringa2/g' example.txt 将example.txt文件中的 \"string1\" 替换成 \"string2\" \n- sed '/^$/d' example.txt 从example.txt文件中删除所有空白行 \n- sed '/ *#/d; /^$/d' example.txt 从example.txt文件中删除所有注释和空白行 \n- echo 'esempio' | tr '[:lower:]' '[:upper:]' 合并上下单元格内容 \n- sed -e '1d' result.txt 从文件example.txt 中排除第一行 \n- sed -n '/stringa1/p' 查看只包含词汇 \"string1\"的行 \n- sed -e 's/ *$//' example.txt 删除每一行最后的空白字符 \n- sed -e 's/stringa1//g' example.txt 从文档中只删除词汇 \"string1\" 并保留剩余全部 \n- sed -n '1,5p;5q' example.txt 查看从第一行到第5行内容 \n- sed -n '5p;5q' example.txt 查看第5行 \n- sed -e 's/00*/0/g' example.txt 用单个零替换多个零 \n- cat -n file1 标示文件的行数 \n- cat example.txt | awk 'NR%2==1' 删除example.txt文件中的所有偶数行 \n- echo a b c | awk '{print $1}' 查看一行第一栏 \n- echo a b c | awk '{print $1,$3}' 查看一行的第一和第三栏 \n- paste file1 file2 合并两个文件或两栏的内容 \n- paste -d '+' file1 file2 合并两个文件或两栏的内容，中间用\"+\"区分 \n- sort file1 file2 排序两个文件的内容 \n- sort file1 file2 | uniq 取出两个文件的并集(重复的行只保留一份) \n- sort file1 file2 | uniq -u 删除交集，留下其他的行 \n- sort file1 file2 | uniq -d 取出两个文件的交集(只留下同时存在于两个文件中的文件) \n- comm -1 file1 file2 比较两个文件的内容只删除 'file1' 所包含的内容 \n- comm -2 file1 file2 比较两个文件的内容只删除 'file2' 所包含的内容 \n- comm -3 file1 file2 比较两个文件的内容只删除两个文件共有的部分 \n\n### 通过pem连接到服务器\n\n[Mac ssh使用pem文件登录远程服务器](https://blog.csdn.net/fdipzone/article/details/79763632)\n\n```js\n// 示意（pem文件要在同一路径下，要不就加上路径）\nssh -i test.pem ubuntu@1.1.1.1\n```"
  },
  {
    "path": "docs/quickcheck/3.运维/5.其他.md",
    "content": "---\ntitle: 5.其他\ndate: 2020-01-30 00:00:00\npermalink: quickcheck/3-5\n---\n\n# 5.其他\n\n> 声明：这个栏目，存放一些过小的问题（不适合单独成一章的），如果后期拓展的很多，就可以考虑单独抽离出去一部分知识\n\n---\n\n## 1.HTTPS证书配置（申请配置ssl证书）\n\n- 申请了ssl证书，就能让网站变为 https开头的，更安全，额，似乎比我想的简单\n\n<img src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/1.quickcheck/3.%E8%BF%90%E7%BB%B4/1.png\" />\n<img src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/1.quickcheck/3.%E8%BF%90%E7%BB%B4/2.png\" />\n<img src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/1.quickcheck/3.%E8%BF%90%E7%BB%B4/3.png\" />\n\n\n- 之后还需要进行配置：https://cloud.tencent.com/document/product/400/35244\n\n<img src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/1.quickcheck/3.%E8%BF%90%E7%BB%B4/3.png\" />\n\n- 🔥注意：主域名申请的单域名证书，二级域名不在https加密保护内，所以 notes.itzkp.com 还是 http协议，而通配符证书可以保护主域名下所有的二级子域名\n\n于是乎我又申请了：notes.itzkp.com 和 jl.itzkp.com 的ssl证书，难点就是 二级域名的解析我是放到了，conf.d 文件夹下，我这怎么设置 ssl呢？\n\n```sh\n# 示例：在conf.d 下面的 notes.conf下\n\nserver {\n\tlisten 443;\n    server_name notes.itzkp.com; #填写绑定证书的域名\n    ssl on;\n    ssl_certificate 1_notes.itzkp.com_bundle.crt;#证书文件名称\n    ssl_certificate_key 2_notes.itzkp.com.key;#私钥文件名称\n    ssl_session_timeout 5m;\n    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #请按照这个协议配置\n    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#请按照这个套件配置\n    ssl_prefer_server_ciphers on;\n\n    location / {\n\n      proxy_pass http://140.143.3.244:9998;\n    \tproxy_set_header X-Real-IP $remote_addr;\n   \t \tproxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n   \t  proxy_set_header Host $http_host;\n  \t\tproxy_set_header X-Nginx-Proxy true;\n  \t\tproxy_redirect off;        \n    }\n}\n\nserver {\n  listen 80;\n  server_name notes.itzkp.com; #填写绑定证书的域名\n  rewrite ^(.*)$ https://$host$1 permanent; #把http的域名请求转成https\n}\n\n```\n\n---\n\n## 2.ssh免密登录\n\n```js\n①：生成秘钥：ssh-keygen -t rsa（这会在 ~/.ssh下生成两个文件）(后面还可以加参数例如：-f 'zhu_key' 这是生成秘钥名称，就会生成 zhu_key 和 zhu_key.pub)\n  id_rea：私钥（不规定名称，名称默认就是id_rea，这个留在主服务器上，这样主服务器就能访问具有公钥的服务器就不用密码了）\n  id_rea.pub：公钥（不规定名称，名称默认就是id_rea.pub，这个传到目标服务器上，这样会使具有私钥的服务器不用密码就能连接）\n\n②：把公钥传到目标服务器上：scp ~/.ssh/id_rsa.pub root@目标服务器ip地址:/root/.ssh\n\n③：登录目标服务器：cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys （注意：> 是覆盖，>> 是追加）\n\n④：在主服务器验证是否可以登录目标服务器：ssh root@目标服务器\n```\n\n**❗️有些情况下这种方法不管用，一个就是名称改为自定义的就不行，还有就是如果一台计算机是另一个的免密登录，这台想成为别的计算机的免密登录就不行，具体是什么问题，还需要继续研究**\n\n---\n\n## 3.Jenkins配置\n\n### 1.Jenkins Github hook 触发实现\n\n[材料](https://www.cnblogs.com/weschen/p/6867885.html)\n\n- Jenkins钩子函数hook只有一个，然后可以绑定很多个项目，只要一个项目触发了push，或者其他操作就会被这个钩子监听到，然后执行一些命令\n\n---\n\n## 4.CDN缓存配置（腾讯云）\n\n- 主要是进入 腾讯云安装指引进行配置\n\n## 📚参考列表（致敬）"
  },
  {
    "path": "docs/quickcheck/4.其他/1.正则表达式速查.md",
    "content": "---\ntitle: 1.正则表达式·速查\ndate: 2020-01-30 00:00:00\npermalink: quickcheck/4-1\n---\n\n# 1.正则表达式·速查\n\n---\n\n## 🛴第一部分：创建正则表达式\n\n```javascript\n// 你可以使用以下两种方法之一构建一个正则表达式\n\nconst regex1 = /ab+c/gi;\nconst regex2 = new RegExp(\"ab+c\", \"gi\");\n\n```\n\n---\n\n## 🛵第二部分：JS正则表达式的方法\n\n### 1. test：一个在字符串中测试是否匹配的RegExp方法，它返回true或false\n\n```javascript\nlet str = 'hello world';\n/world/.test(str); // true\n/ /.test(str); // true\n/good/.test(str); // false\n```\n\n---\n\n\n### 2. replace：一个在字符串中执行查找匹配的String方法，并且使用替换字符串替换掉匹配到的子字符串\n\n```javascript\nlet str = 'hello world'\nlet repStr = str.replace('world', 'replace') // 注意不会改变原内容\nconsole.log(repStr) // \"hello replace\"\n```\n\n---\n\n### 3. split：使用正则表达式 或 一个固定字符串分隔 一个字符串，返回 分隔后的子字符串数组\n\n```javascript\n// 这个大部分我都是 字符串.split(' ') 以空格分开来用的 😁\n\nlet str = 'hello RegExp';\nstr.split(' '); // [\"hello\", \"RegExp\"]\nstr.split('hello'); // [\"\", \"RegExp\"]\nstr.split('l'); // [\"he\", \"\", \"o RegExp\"]\nstr.split('good') // [\"hello RegExp\"]\n```\n\n---\n\n### 4. exec：一个在字符串中执行查找匹配的RegExp方法，它返回一个数组（未匹配到则返回null）\n\n::: tip\n直接挂一个解释吧，返回的内容是一个对象有点多：[链接](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec)\n:::\n\n---\n\n### 5. search：一个在字符串中测试匹配的String方法，它返回匹配到的位置索引，或者在失败时返回-1（略）\n\n---\n\n### 6. match：一个在字符串中执行查找匹配的String方法，它返回一个数组或者在未匹配到时返回null（略）\n\n\n---\n\n## 🚃第三部分：正则表达式的简单规则\n\n<img src=\"https://itzkp-1253302184.cos.ap-beijing.myqcloud.com/notes/1.quickcheck/4.%E5%85%B6%E4%BB%96/1.png\" />\n\n---\n\n## 🚅第四部分：常用正则表达式·速查\n\n---\n\n## 📚参考列表（致敬）\n\n- MDN：[正则表达式](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Regular_Expressions)"
  },
  {
    "path": "docs/quickcheck/4.其他/2.好的网站推荐.md",
    "content": "---\ntitle: 2.好的网站推荐\ndate: 2020-01-30 00:00:00\npermalink: quickcheck/4-2\n---\n\n# 2.好的网站推荐\n\n## 🐳资料类\n\n- [MDN](https://developer.mozilla.org/zh-CN/)\n- [Vue官网](https://cn.vuejs.org/)\n- [Vue-Cli](https://cli.vuejs.org/zh/)\n- [Vue-Router](https://router.vuejs.org/zh/)\n- [Vuex](https://vuex.vuejs.org/zh/)\n- [Vue.js 服务器端渲染指南](https://ssr.vuejs.org/zh/)\n- [lodash.js官网](https://www.lodashjs.com/)\n- ...\n\n---\n\n## 🐬工具类\n\n- [在线格式化json](http://www.bejson.com/)\n- [代码生成好看的图片，可以给别人演示代码片段用](https://codeimg.io/)\n- [自动生成NGINX配置](https://nginxconfig.io/)\n- [alcss艺术字](https://www.bootschool.net/ascii-art)\n- [具有炫酷动画的网站](https://cssfx.dev/)\n- [各种文件相互转换的网站](https://smallpdf.com/cn)\n- [给变量命名的网站](https://unbug.github.io/codelf/)\n- [babel官网](https://www.babeljs.cn/)\n- [在线录屏软件](https://www.apowersoft.cn/free-online-screen-recorder)\n- ...\n\n---\n\n## 🦋社区类\n\n- [掘金](https://juejin.im/timeline)\n- [思否](https://segmentfault.com/)\n- ...\n\n"
  },
  {
    "path": "docs/quickcheck/README.md",
    "content": "## 前端\n\n[1.HTML和HTML5](./1-1/) <br />\n[2.CSS和CSS3速查](./1-2/) <br />\n[3.JS方法速查](./1-3/) <br />\n[4.jQuery及其周边库速查](./1-4/) <br />\n[5.MVVM框架速查（Vue）](./1-5/) <br />\n[6.移动端速查](./1-6/) <br />\n[7.其他](./1-7/) <br />\n\n---\n\n## 后端\n\n[1.Node速查](./2-1/) <br />\n[2.Node第三方库速查](./2-2/) <br />\n[3.MySQL速查](./2-3/) <br />\n[4.MongoDB速查](./2-4/) <br />\n[5.Redis速查](./2-5/) <br />\n[6.其他](./2-6/) <br />\n\n---\n\n## 运维\n\n[1.各种软件安装速查](./3-1/) <br />\n[2.Nginx速查](./3-2/) <br />\n[3.Docker速查](./3-3/) <br />\n[4.Linux速查](./3-4/) <br />\n[5.其他](./3-5/) <br />\n\n---\n\n## 其他\n\n[1.正则表达式速查](./4-1/) <br />\n[2.好的网站推荐](./4-2/) <br />\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"git-notes\",\n  \"version\": \"1.0.1\",\n  \"description\": \"[![License](https://img.shields.io/github/license/zhukunpenglinyutong/notes.svg)](LICENSE) [![repo-size](https://img.shields.io/github/repo-size/zhukunpenglinyutong/notes.svg)](repo-size) [![CodeTriage](https://www.codetriage.com/zhukunpenglinyutong/notes/badges/users.svg)](CodeTriage) [![提交活动](https://img.shields.io/github/commit-activity/m/zhukunpenglinyutong/notes.svg)](提交活动) [![最后一次提交](https://img.shields.io/github/last-commit/zhukunpenglinyutong/notes.svg)](最后一次提交)\",\n  \"main\": \"index.js\",\n  \"directories\": {\n    \"doc\": \"docs\"\n  },\n  \"scripts\": {\n    \"commit\": \"git add . && git-cz\",\n    \"start\": \"vuepress dev docs --temp .temp\",\n    \"build\": \"vuepress build docs\"\n  },\n  \"dependencies\": {\n    \"animate.css\": \"^3.7.2\",\n    \"clipboard\": \"^2.0.4\",\n    \"echarts\": \"^5.0.1\",\n    \"element-ui\": \"^2.13.0\",\n    \"express\": \"^4.17.1\",\n    \"git-cz\": \"^4.7.6\",\n    \"js-md5\": \"^0.7.3\",\n    \"kind-of\": \"6.0.3\",\n    \"leancloud-storage\": \"^4.2.0\",\n    \"minimist\": \"1.2.3\",\n    \"serialize-javascript\": \"^3.1.0\",\n    \"v-viewer\": \"^1.5.1\",\n    \"valine\": \"^1.3.10\",\n    \"vue\": \"2.6.11\",\n    \"vuepress-plugin-medium-zoom\": \"^1.1.8\",\n    \"vuepress-plugin-smooth-scroll\": \"0.0.9\"\n  },\n  \"devDependencies\": {\n    \"@vuepress/plugin-google-analytics\": \"^1.2.0\",\n    \"@vuepress/plugin-medium-zoom\": \"^1.2.0\",\n    \"axios\": \"^0.21.1\",\n    \"express\": \"^4.17.1\",\n    \"gulp\": \"^4.0.2\",\n    \"gulp-clean-css\": \"^4.3.0\",\n    \"gulp-css-wrap\": \"^0.1.2\",\n    \"vue-click-outside\": \"^1.1.0\",\n    \"vue-particles\": \"^1.0.9\",\n    \"vuepress\": \"^1.5.0\",\n    \"vuepress-plugin-mathjax\": \"^1.2.8\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/zhukunpenglinyutong/notes.git\"\n  },\n  \"author\": \"\",\n  \"license\": \"ISC\",\n  \"bugs\": {\n    \"url\": \"https://github.com/zhukunpenglinyutong/notes/issues\"\n  },\n  \"homepage\": \"https://github.com/zhukunpenglinyutong/notes#readme\"\n}\n"
  }
]