[
  {
    "path": ".editorconfig",
    "content": "root = true\n\n[*]\ncharset = utf-8\nindent_style = space\nindent_size = 4\nend_of_line = lf\ninsert_final_newline = true\ntrim_trailing_whitespace = true\n"
  },
  {
    "path": ".eslintrc.js",
    "content": "module.exports = {\n  root: true,\n  env: {\n    node: true\n  },\n  'extends': [\n    'plugin:vue/essential',\n    '@vue/prettier'\n  ],\n  plugins: [\n    'vue'\n  ],\n  rules: {\n    'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off',\n    'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off'\n  },\n  parserOptions: {\n    parser: 'babel-eslint'\n  }\n}"
  },
  {
    "path": ".gitignore",
    "content": ".DS_Store\nnode_modules\n/dist\n/stage\n\n# local env files\n.env.local\n.env.*.local\n\n# Log files\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n\n# Editor directories and files\n.idea\n.vscode\n*.suo\n*.ntvs*\n*.njsproj\n*.sln\n*.sw*\n"
  },
  {
    "path": ".postcssrc.js",
    "content": "module.exports = {\n  plugins: {\n    autoprefixer: {}\n  }\n}"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2018 lmxdawn\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": "<p align=\"center\">\n  <img width=\"320\" src=\"https://lmxdawn.github.io/images/lmxdawn.png\">\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/vuejs/vue\">\n    <img src=\"https://img.shields.io/badge/vue-2.5.16-brightgreen.svg\" alt=\"vue\">\n  </a>\n  <a href=\"https://cli.vuejs.org\">\n    <img src=\"https://img.shields.io/badge/vue-cli3.0.0-brightgreen.svg\" alt=\"vue\">\n  </a>\n  <a href=\"https://github.com/ElemeFE/element\">\n    <img src=\"https://img.shields.io/badge/element--ui-2.4.3-brightgreen.svg\" alt=\"element-ui\">\n  </a>\n</p>\n\n# 前言\n\n\n**项目JAVA前端地址：** <a href=\"https://github.com/lmxdawn/vue-admin-html-java\" target=\"_blank\">https://github.com/lmxdawn/vue-admin-html-java</a>\n\n**项目JAVA后端地址：** <a href=\"https://github.com/lmxdawn/vue-admin-java\" target=\"_blank\">https://github.com/lmxdawn/vue-admin-java</a>\n\n\n# 欢迎 star\n\n# 整体效果\n\n![donate](https://lmxdawn.github.io/images/show-how1.jpg)\n\n# 目前 v3.0.0 版本 <a href=\"https://github.com/lmxdawn/vue-admin-html/tree/v1.0.0\" target=\"_blank\">点击前往 v1.0.0 版本</a>\n## 更新日志\n- [x] 更新vue-cli为3.0版本 <a href=\"https://segmentfault.com/a/1190000015133974\">这里有篇文章</a>\n- [x] 增加广告管理\n- [x] 优化路由控制\n- [x] 优化一些配置文件\n- [x] 登录用户信息存储改为 cookie\n\n# 一键操作包 <a href=\"https://pan.baidu.com/s/1gBPdt5IdDKhATNka1l1xOg\" target=\"_blank\">点击下载</a>\n\n1. 集成环境搭建: windows 上面建议用 phpstudy ,其它环境自行百度\n2. 把两个文件放到网站根目录\n3. 把MySQL的root密码改为 root, 再新建数据库 vue-admin ,再把vue-admin.sql 文件导入到MySQL\n4. 打开浏览器 输入 http://localhost/vue-admin-html/dist/index.html\n\n\n# v3.0.0 踩过的坑\n1. 这次更新后 vuex 开启严格模式后，出现浅拷贝的问题，就是变量引用的问题 <a href=\"https://segmentfault.com/q/1010000010025289/a-1020000015605407\" target=\"_blank\">这里有篇文章</a>\n2. 还有就是路由导入某个文件时要在文件头部引入具体的某个文件，不用 resolve => require(['xx.vue'], resolve) 或者  () => import('xx.vue') 这种方式\n\n\n# vue-admin-html\n\n> Vue-cli3.0 + Element UI + ThinkPHP5.1 + RBAC权限 + 响应式的后台管理系统\n\n\n## 权限演示\n\n![donate](https://lmxdawn.github.io/images/rule.gif)\n\n## 路由规则图示\n\n>   路径: vue-admin-html/src/router/index.js\n\n![donate](https://lmxdawn.github.io/images/router.png)\n\n## env 配置说明\n\n>   路径: vue-admin-html/.env.development\n\n![donate](https://lmxdawn.github.io/images/env.png)\n\n## 手机版演示\n\n![donate](https://lmxdawn.github.io/images/phone.gif)\n\n## 上传插件演示\n\n![donate](https://lmxdawn.github.io/images/upload.gif)\n\n## 添加 阿里巴巴矢量图演示\n\n>   路径: vue-admin-html/src/assets/icons 注意 vue-admin-html/src/assets/icons/iconfont.js 头部需要加 ```/* eslint-disable */``` 去掉 eslint 检查 \n\n1.第一步 选好一个图标加入到购物车 -> 把购物车的添加都项目 -> 下载项目到本地\n\n![donate](https://lmxdawn.github.io/images/icon1.gif)\n\n2.第二步 解压下载好的文件 -> 复制到 src/assets/icons , 覆盖掉 -> 增加 iconfont.js 的 eslint 注释\n\n![donate](https://lmxdawn.github.io/images/icon2.gif)\n\n\n\n\n## 功能 ##\n- [x] 管理员登录\n- [x] 登录\n- [x] 修改密码\n- [x] 角色管理\n- [x] 权限管理\n- [x] 401/404错误页面\n- [x] 动态面包屑\n- [x] 动态侧边栏\n- [x] 广告管理\n\n\n## 安装步骤 ##\n\n\tgit clone https://github.com/lmxdawn/vue-admin-html.git      // 把模板下载到本地\n\tcd vue-admin-html    // 进入模板目录\n\tnpm install         // 安装项目依赖，等待安装完成之后\n\t\n    构建时三种环境可选，解决不同环境来回切换配置的痛楚（serve：本地测试，stage：预上线，build：生产环境）\n    \n## 本地开发 ##\n\n\t// 开启服务器，浏览器访问 http://localhost:8080\n\tnpm run serve\n\n## 构建预上线 ##\n\n\t// 执行构建命令，生成的stage文件夹放在服务器下即可访问\n\tnpm run stage\n\t\n## 构建生产 ##\n\n\t// 执行构建命令，生成的dist文件夹放在服务器下即可访问\n\tnpm run build\n\t\n# 项目目录介绍\n```markdown\n├── LICENSE                                 // 版权许可文件\n├── README.md                               // 文档\n├── babel.config.js                         // babel 插件配置                \n├── jest.config.js                          // jest 测试配置   \n├── package-lock.json                       // 锁定当前安装的扩展包的版本\n├── package.json                            // 声明引用了哪些扩展包\n├── public                                  // 公共文件\n│   ├── favicon.ico                         // 图标\n│   └── index.html                          // 入口文件\n├── src                                     // src 主要代码文件\n│   ├── App.vue                             // Vue 入口文件\n│   ├── api                                 // API 接口逻辑文件\n│   │   ├── ad                              // 广告相关\n│   │   │   ├── ad.js                       // 广告\n│   │   │   └── adSite.js                   // 广告位\n│   │   ├── auth                            // 权限相关\n│   │   │   ├── authAdmin.js                // 权限用户\n│   │   │   ├── authPermissionRule.js       // 权限\n│   │   │   └── authRole.js                 // 角色\n│   │   ├── fileResource.js                 // 文件资源\n│   │   ├── fileResourceTag.js              // 文件资源的标签\n│   │   ├── login.js                        // 登录相关\n│   │   └── upload.js                       // 旧版本上传插件的接口\n│   ├── assets                              // 资源文件\n│   │   ├── icons                           // 图标(使用的是 阿里巴巴矢量图标库)\n│   │   │   ├── demo.css                    // demo 样式\n│   │   │   ├── demo_fontclass.html         // demo HTML\n│   │   │   ├── demo_symbol.html            // demo\n│   │   │   ├── demo_unicode.html           // demo\n│   │   │   ├── iconfont.css                // css\n│   │   │   ├── iconfont.eot                // \n│   │   │   ├── iconfont.js                 // js 文件\n│   │   │   ├── iconfont.svg                // svg 文件\n│   │   │   ├── iconfont.ttf                // 字体文件\n│   │   │   └── iconfont.woff               // 字体文件\n│   │   ├── image                           // 资源图片文件\n│   │   │   └── file_type_icon.png          // 文件图标文件\n│   │   └── logo.png                        // logo\n│   ├── components                          // 组件目录\n│   │   ├── HelloWorld.vue                  // 测试文件\n│   │   └── common                          // 公共组件\n│   │       ├── FileResource.vue            // 上传资源的组件\n│   │       ├── IconSvg.vue                 // 图标组件\n│   │       └── UploadFile.vue              // 旧版上传文件的组件\n│   ├── config                              // 自定义的配置\n│   │   └── app.js                          // 项目的配置\n│   ├── constants                           // 项目的常量目录\n│   ├── element.js                          // 引入 element-ui 的js文件 (这个也可直接写在 main.js 里面)\n│   ├── filtres                             // 过滤器目录\n│   │   └── index.js                        // 全局过滤器\n│   ├── main.js                             // 主入口\n│   ├── mock                                // 模拟数据\n│   │   ├── authAdmin.js                    // 权限用户的数据\n│   │   ├── authPermissionRule.js           // 权限的数据\n│   │   ├── authRole.js                     // 角色数据\n│   │   ├── fileResource.js                 // 上传资源的数据\n│   │   ├── fileResourceTag.js              // 上传资源的分组数据\n│   │   ├── index.js                        // 引入 mockjs 的文件\n│   │   ├── login.js                        // 登录的数据\n│   │   └── upload.js                       // 旧版上传文件的数据\n│   ├── role.js                             // 动态上传 router 路由的主要文件, 并且初始化权限, 检测权限\n│   ├── router                              // 路由相关目录\n│   │   └── index.js                        // 路由主文件\n│   ├── store                               // vuex 状态 目录\n│   │   ├── actions.js                      // Action\n│   │   ├── getters.js                      // Getter\n│   │   ├── index.js                        // 入口\n│   │   ├── modules                         // 模块\n│   │   │   ├── admin.js                    // Admin 用户相关\n│   │   │   └── app.js                      // APP 项目相关\n│   │   └── mutation-types.js               // Mutation\n│   ├── styles                              // 样式目录\n│   │   ├── base.scss                       // 基础样式\n│   │   └── mixin.scss                      // 基础方法的样式\n│   ├── utils                               // 工具目录\n│   │   ├── auth.js                         // 权限工具\n│   │   ├── axios.js                        // request 请求工具\n│   │   ├── haiZiToPinYin.js                // 汉字转拼音的工具\n│   │   └── store.js                        // 存放信息的工具\n│   └── views                               // 页面目录\n│       ├── adManage                        // 广告管理\n│       │   ├── ad.vue                      // 广告\n│       │   └── adSite.vue                  // 广告位\n│       ├── components                      // 应用演示\n│       │   └── uploadList.vue              // 上传插件\n│       ├── error                           // 错误页面目录\n│       │   ├── err401.vue                  // 401\n│       │   ├── err404.vue                  // 404页面\n│       │   └── err500.vue                  // 500页面\n│       ├── home                            // 首页目录\n│       │   ├── SidebarItem.vue             // 左边栏\n│       │   ├── TabsView.vue                // 顶部tabs\n│       │   ├── index.vue                   // 入口\n│       │   └── main.vue                    // 前言\n│       ├── login                           // 登录相关\n│       │   └── index.vue                   // 登录首页\n│       ├── profile                         // 测试\n│       │   └── index.vue                   \n│       └── userManage                      // 用户相关\n│           └── admin                       // 管理员相关\n│               ├── authAdmin.vue           // 权限用户\n│               ├── authPermissionRule.vue  // 权限\n│               ├── authRole.vue            // 角色\n│               └── router.vue              // 路由文件\n├── tests                                   // 测试\n│   └── unit                                \n│       └── HelloWorld.spec.js              \n└── vue.config.js                           // 构建项目的配置文件\n```\n\n# Online Demo\n （建议使用最新版Chrome浏览器）\n[在线 Demo](https://lmxdawn.github.io/vue-admin)\n\n# Donate\n鼓励鼓励鼓励，重要的事情说三遍 \n![donate](https://lmxdawn.github.io/images/pay.png)\n\n\n# License\n\n[MIT](https://github.com/lmxdawn/vue-admin-html/blob/master/LICENSE)\n\nCopyright (c) 2018 lmxdawn\n\n"
  },
  {
    "path": "babel.config.js",
    "content": "module.exports = {\n    presets: [\"@vue/app\"]\n};\n"
  },
  {
    "path": "jest.config.js",
    "content": "module.exports = {\n    moduleFileExtensions: [\"js\", \"jsx\", \"json\", \"vue\"],\n    transform: {\n        \"^.+\\\\.vue$\": \"vue-jest\",\n        \".+\\\\.(css|styl|less|sass|scss|png|jpg|ttf|woff|woff2)$\":\n            \"jest-transform-stub\",\n        \"^.+\\\\.jsx?$\": \"babel-jest\"\n    },\n    moduleNameMapper: {\n        \"^@/(.*)$\": \"<rootDir>/src/$1\"\n    },\n    snapshotSerializers: [\"jest-serializer-vue\"],\n    testMatch: [\n        \"<rootDir>/(tests/unit/**/*.spec.(js|jsx|ts|tsx)|**/__tests__/*.(js|jsx|ts|tsx))\"\n    ]\n};\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"my-project\",\n  \"version\": \"0.1.0\",\n  \"private\": true,\n  \"scripts\": {\n    \"serve\": \"vue-cli-service serve\",\n    \"stage\": \"vue-cli-service build --mode stage\",\n    \"build\": \"vue-cli-service build\",\n    \"lint\": \"vue-cli-service lint\",\n    \"test:unit\": \"vue-cli-service test:unit\"\n  },\n  \"dependencies\": {\n    \"axios\": \"^0.18.0\",\n    \"babel-polyfill\": \"^6.26.0\",\n    \"element-ui\": \"^2.8.2\",\n    \"js-cookie\": \"^2.2.0\",\n    \"mockjs\": \"^1.0.1-beta3\",\n    \"nprogress\": \"^0.2.0\",\n    \"vue\": \"^2.5.16\",\n    \"vue-router\": \"^3.0.1\",\n    \"vuedraggable\": \"^2.17.0\",\n    \"vuex\": \"^3.0.1\"\n  },\n  \"devDependencies\": {\n    \"@vue/cli-plugin-babel\": \"^3.0.0-beta.15\",\n    \"@vue/cli-plugin-eslint\": \"^3.0.0-beta.15\",\n    \"@vue/cli-plugin-unit-jest\": \"^3.0.0-beta.15\",\n    \"@vue/cli-service\": \"^3.0.0-beta.15\",\n    \"@vue/eslint-config-prettier\": \"^3.0.0-rc.3\",\n    \"@vue/test-utils\": \"^1.0.0-beta.16\",\n    \"babel-core\": \"7.0.0-bridge.0\",\n    \"babel-jest\": \"^23.0.1\",\n    \"node-sass\": \"^4.9.0\",\n    \"sass-loader\": \"^7.0.1\",\n    \"vue-template-compiler\": \"^2.5.16\"\n  },\n  \"browserslist\": [\n    \"> 1%\",\n    \"last 2 versions\",\n    \"not ie <= 8\"\n  ]\n}\n"
  },
  {
    "path": "public/index-dev.html",
    "content": "<!DOCTYPE html>\n<html>\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    <link rel=\"icon\" href=\"<%= BASE_URL %>favicon.ico\">\n    <title>VUE后台管理系统</title>\n</head>\n<body>\n<div id=\"app\"></div>\n<!-- built files will be auto injected -->\n</body>\n\n<script src=\"tinymce4.7.5/tinymce.min.js\"></script>\n\n</html>\n"
  },
  {
    "path": "public/index.html",
    "content": "<!DOCTYPE html>\n<html>\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    <link rel=\"icon\" href=\"<%= BASE_URL %>favicon.ico\">\n    <title>VUE后台管理系统</title>\n    <link rel=\"stylesheet\" href=\"https://unpkg.com/element-ui/lib/theme-chalk/index.css\">\n</head>\n<body>\n<div id=\"app\"></div>\n<!-- built files will be auto injected -->\n<script src=\"tinymce4.7.5/tinymce.min.js\"></script>\n<script src=\"https://unpkg.com/vue@2.5.16/dist/vue.runtime.min.js\"></script>\n<script src=\"https://unpkg.com/vuex@3.0.1/dist/vuex.min.js\"></script>\n<script src=\"https://unpkg.com/vue-router@3.0.1/dist/vue-router.min.js\"></script>\n<script src=\"https://unpkg.com/element-ui/lib/index.js\"></script>\n\n<script>\n    (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){\n            (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),\n        m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)\n    })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');\n\n    ga('create', 'UA-110990780-1', 'auto');\n    ga('send', 'pageview');\n\n    window.addEventListener('hashchange', function () {\n        ga('set', 'page', window.location.href);\n        ga('send', 'pageview');\n    });\n</script>\n\n</body>\n\n</html>\n"
  },
  {
    "path": "public/tinymce4.7.5/langs/zh_CN.js",
    "content": "tinymce.addI18n('zh_CN',{\n\"Cut\": \"\\u526a\\u5207\",\n\"Heading 5\": \"\\u6807\\u98985\",\n\"Header 2\": \"\\u6807\\u98982\",\n\"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\\/C\\/V keyboard shortcuts instead.\": \"\\u4f60\\u7684\\u6d4f\\u89c8\\u5668\\u4e0d\\u652f\\u6301\\u5bf9\\u526a\\u8d34\\u677f\\u7684\\u8bbf\\u95ee\\uff0c\\u8bf7\\u4f7f\\u7528Ctrl+X\\/C\\/V\\u952e\\u8fdb\\u884c\\u590d\\u5236\\u7c98\\u8d34\\u3002\",\n\"Heading 4\": \"\\u6807\\u98984\",\n\"Div\": \"Div\\u533a\\u5757\",\n\"Heading 2\": \"\\u6807\\u98982\",\n\"Paste\": \"\\u7c98\\u8d34\",\n\"Close\": \"\\u5173\\u95ed\",\n\"Font Family\": \"\\u5b57\\u4f53\",\n\"Pre\": \"\\u9884\\u683c\\u5f0f\\u6587\\u672c\",\n\"Align right\": \"\\u53f3\\u5bf9\\u9f50\",\n\"New document\": \"\\u65b0\\u6587\\u6863\",\n\"Blockquote\": \"\\u5f15\\u7528\",\n\"Numbered list\": \"\\u7f16\\u53f7\\u5217\\u8868\",\n\"Heading 1\": \"\\u6807\\u98981\",\n\"Headings\": \"\\u6807\\u9898\",\n\"Increase indent\": \"\\u589e\\u52a0\\u7f29\\u8fdb\",\n\"Formats\": \"\\u683c\\u5f0f\",\n\"Headers\": \"\\u6807\\u9898\",\n\"Select all\": \"\\u5168\\u9009\",\n\"Header 3\": \"\\u6807\\u98983\",\n\"Blocks\": \"\\u533a\\u5757\",\n\"Undo\": \"\\u64a4\\u6d88\",\n\"Strikethrough\": \"\\u5220\\u9664\\u7ebf\",\n\"Bullet list\": \"\\u9879\\u76ee\\u7b26\\u53f7\",\n\"Header 1\": \"\\u6807\\u98981\",\n\"Superscript\": \"\\u4e0a\\u6807\",\n\"Clear formatting\": \"\\u6e05\\u9664\\u683c\\u5f0f\",\n\"Font Sizes\": \"\\u5b57\\u53f7\",\n\"Subscript\": \"\\u4e0b\\u6807\",\n\"Header 6\": \"\\u6807\\u98986\",\n\"Redo\": \"\\u91cd\\u590d\",\n\"Paragraph\": \"\\u6bb5\\u843d\",\n\"Ok\": \"\\u786e\\u5b9a\",\n\"Bold\": \"\\u7c97\\u4f53\",\n\"Code\": \"\\u4ee3\\u7801\",\n\"Italic\": \"\\u659c\\u4f53\",\n\"Align center\": \"\\u5c45\\u4e2d\",\n\"Header 5\": \"\\u6807\\u98985\",\n\"Heading 6\": \"\\u6807\\u98986\",\n\"Heading 3\": \"\\u6807\\u98983\",\n\"Decrease indent\": \"\\u51cf\\u5c11\\u7f29\\u8fdb\",\n\"Header 4\": \"\\u6807\\u98984\",\n\"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.\": \"\\u5f53\\u524d\\u4e3a\\u7eaf\\u6587\\u672c\\u7c98\\u8d34\\u6a21\\u5f0f\\uff0c\\u518d\\u6b21\\u70b9\\u51fb\\u53ef\\u4ee5\\u56de\\u5230\\u666e\\u901a\\u7c98\\u8d34\\u6a21\\u5f0f\\u3002\",\n\"Underline\": \"\\u4e0b\\u5212\\u7ebf\",\n\"Cancel\": \"\\u53d6\\u6d88\",\n\"Justify\": \"\\u4e24\\u7aef\\u5bf9\\u9f50\",\n\"Inline\": \"\\u6587\\u672c\",\n\"Copy\": \"\\u590d\\u5236\",\n\"Align left\": \"\\u5de6\\u5bf9\\u9f50\",\n\"Visual aids\": \"\\u7f51\\u683c\\u7ebf\",\n\"Lower Greek\": \"\\u5c0f\\u5199\\u5e0c\\u814a\\u5b57\\u6bcd\",\n\"Square\": \"\\u65b9\\u5757\",\n\"Default\": \"\\u9ed8\\u8ba4\",\n\"Lower Alpha\": \"\\u5c0f\\u5199\\u82f1\\u6587\\u5b57\\u6bcd\",\n\"Circle\": \"\\u7a7a\\u5fc3\\u5706\",\n\"Disc\": \"\\u5b9e\\u5fc3\\u5706\",\n\"Upper Alpha\": \"\\u5927\\u5199\\u82f1\\u6587\\u5b57\\u6bcd\",\n\"Upper Roman\": \"\\u5927\\u5199\\u7f57\\u9a6c\\u5b57\\u6bcd\",\n\"Lower Roman\": \"\\u5c0f\\u5199\\u7f57\\u9a6c\\u5b57\\u6bcd\",\n\"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.\": \"\\u6807\\u8bc6\\u7b26\\u5e94\\u8be5\\u4ee5\\u5b57\\u6bcd\\u5f00\\u5934\\uff0c\\u540e\\u8ddf\\u5b57\\u6bcd\\u3001\\u6570\\u5b57\\u3001\\u7834\\u6298\\u53f7\\u3001\\u70b9\\u3001\\u5192\\u53f7\\u6216\\u4e0b\\u5212\\u7ebf\\u3002\",\n\"Name\": \"\\u540d\\u79f0\",\n\"Anchor\": \"\\u951a\\u70b9\",\n\"Id\": \"\\u6807\\u8bc6\\u7b26\",\n\"You have unsaved changes are you sure you want to navigate away?\": \"\\u4f60\\u8fd8\\u6709\\u6587\\u6863\\u5c1a\\u672a\\u4fdd\\u5b58\\uff0c\\u786e\\u5b9a\\u8981\\u79bb\\u5f00\\uff1f\",\n\"Restore last draft\": \"\\u6062\\u590d\\u4e0a\\u6b21\\u7684\\u8349\\u7a3f\",\n\"Special character\": \"\\u7279\\u6b8a\\u7b26\\u53f7\",\n\"Source code\": \"\\u6e90\\u4ee3\\u7801\",\n\"Language\": \"\\u8bed\\u8a00\",\n\"Insert\\/Edit code sample\": \"\\u63d2\\u5165\\/\\u7f16\\u8f91\\u4ee3\\u7801\\u793a\\u4f8b\",\n\"B\": \"B\",\n\"R\": \"R\",\n\"G\": \"G\",\n\"Color\": \"\\u989c\\u8272\",\n\"Right to left\": \"\\u4ece\\u53f3\\u5230\\u5de6\",\n\"Left to right\": \"\\u4ece\\u5de6\\u5230\\u53f3\",\n\"Emoticons\": \"\\u8868\\u60c5\",\n\"Robots\": \"\\u673a\\u5668\\u4eba\",\n\"Document properties\": \"\\u6587\\u6863\\u5c5e\\u6027\",\n\"Title\": \"\\u6807\\u9898\",\n\"Keywords\": \"\\u5173\\u952e\\u8bcd\",\n\"Encoding\": \"\\u7f16\\u7801\",\n\"Description\": \"\\u63cf\\u8ff0\",\n\"Author\": \"\\u4f5c\\u8005\",\n\"Fullscreen\": \"\\u5168\\u5c4f\",\n\"Horizontal line\": \"\\u6c34\\u5e73\\u5206\\u5272\\u7ebf\",\n\"Horizontal space\": \"\\u6c34\\u5e73\\u8fb9\\u8ddd\",\n\"Insert\\/edit image\": \"\\u63d2\\u5165\\/\\u7f16\\u8f91\\u56fe\\u7247\",\n\"General\": \"\\u666e\\u901a\",\n\"Advanced\": \"\\u9ad8\\u7ea7\",\n\"Source\": \"\\u5730\\u5740\",\n\"Border\": \"\\u8fb9\\u6846\",\n\"Constrain proportions\": \"\\u4fdd\\u6301\\u7eb5\\u6a2a\\u6bd4\",\n\"Vertical space\": \"\\u5782\\u76f4\\u8fb9\\u8ddd\",\n\"Image description\": \"\\u56fe\\u7247\\u63cf\\u8ff0\",\n\"Style\": \"\\u6837\\u5f0f\",\n\"Dimensions\": \"\\u5927\\u5c0f\",\n\"Insert image\": \"\\u63d2\\u5165\\u56fe\\u7247\",\n\"Image\": \"\\u56fe\\u7247\",\n\"Zoom in\": \"\\u653e\\u5927\",\n\"Contrast\": \"\\u5bf9\\u6bd4\\u5ea6\",\n\"Back\": \"\\u540e\\u9000\",\n\"Gamma\": \"\\u4f3d\\u9a6c\\u503c\",\n\"Flip horizontally\": \"\\u6c34\\u5e73\\u7ffb\\u8f6c\",\n\"Resize\": \"\\u8c03\\u6574\\u5927\\u5c0f\",\n\"Sharpen\": \"\\u9510\\u5316\",\n\"Zoom out\": \"\\u7f29\\u5c0f\",\n\"Image options\": \"\\u56fe\\u7247\\u9009\\u9879\",\n\"Apply\": \"\\u5e94\\u7528\",\n\"Brightness\": \"\\u4eae\\u5ea6\",\n\"Rotate clockwise\": \"\\u987a\\u65f6\\u9488\\u65cb\\u8f6c\",\n\"Rotate counterclockwise\": \"\\u9006\\u65f6\\u9488\\u65cb\\u8f6c\",\n\"Edit image\": \"\\u7f16\\u8f91\\u56fe\\u7247\",\n\"Color levels\": \"\\u989c\\u8272\\u5c42\\u6b21\",\n\"Crop\": \"\\u88c1\\u526a\",\n\"Orientation\": \"\\u65b9\\u5411\",\n\"Flip vertically\": \"\\u5782\\u76f4\\u7ffb\\u8f6c\",\n\"Invert\": \"\\u53cd\\u8f6c\",\n\"Date\\/time\": \"\\u65e5\\u671f\\/\\u65f6\\u95f4\",\n\"Insert date\\/time\": \"\\u63d2\\u5165\\u65e5\\u671f\\/\\u65f6\\u95f4\",\n\"Remove link\": \"\\u5220\\u9664\\u94fe\\u63a5\",\n\"Url\": \"\\u5730\\u5740\",\n\"Text to display\": \"\\u663e\\u793a\\u6587\\u5b57\",\n\"Anchors\": \"\\u951a\\u70b9\",\n\"Insert link\": \"\\u63d2\\u5165\\u94fe\\u63a5\",\n\"Link\": \"\\u94fe\\u63a5\",\n\"New window\": \"\\u5728\\u65b0\\u7a97\\u53e3\\u6253\\u5f00\",\n\"None\": \"\\u65e0\",\n\"The URL you entered seems to be an external link. Do you want to add the required http:\\/\\/ prefix?\": \"\\u4f60\\u6240\\u586b\\u5199\\u7684URL\\u5730\\u5740\\u5c5e\\u4e8e\\u5916\\u90e8\\u94fe\\u63a5\\uff0c\\u9700\\u8981\\u52a0\\u4e0ahttp:\\/\\/:\\u524d\\u7f00\\u5417\\uff1f\",\n\"Paste or type a link\": \"\\u7c98\\u8d34\\u6216\\u8f93\\u5165\\u94fe\\u63a5\",\n\"Target\": \"\\u6253\\u5f00\\u65b9\\u5f0f\",\n\"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?\": \"\\u4f60\\u6240\\u586b\\u5199\\u7684URL\\u5730\\u5740\\u4e3a\\u90ae\\u4ef6\\u5730\\u5740\\uff0c\\u9700\\u8981\\u52a0\\u4e0amailto:\\u524d\\u7f00\\u5417\\uff1f\",\n\"Insert\\/edit link\": \"\\u63d2\\u5165\\/\\u7f16\\u8f91\\u94fe\\u63a5\",\n\"Insert\\/edit video\": \"\\u63d2\\u5165\\/\\u7f16\\u8f91\\u89c6\\u9891\",\n\"Media\": \"\\u5a92\\u4f53\",\n\"Alternative source\": \"\\u955c\\u50cf\",\n\"Paste your embed code below:\": \"\\u5c06\\u5185\\u5d4c\\u4ee3\\u7801\\u7c98\\u8d34\\u5728\\u4e0b\\u9762:\",\n\"Insert video\": \"\\u63d2\\u5165\\u89c6\\u9891\",\n\"Poster\": \"\\u5c01\\u9762\",\n\"Insert\\/edit media\": \"\\u63d2\\u5165\\/\\u7f16\\u8f91\\u5a92\\u4f53\",\n\"Embed\": \"\\u5185\\u5d4c\",\n\"Nonbreaking space\": \"\\u4e0d\\u95f4\\u65ad\\u7a7a\\u683c\",\n\"Page break\": \"\\u5206\\u9875\\u7b26\",\n\"Paste as text\": \"\\u7c98\\u8d34\\u4e3a\\u6587\\u672c\",\n\"Preview\": \"\\u9884\\u89c8\",\n\"Print\": \"\\u6253\\u5370\",\n\"Save\": \"\\u4fdd\\u5b58\",\n\"Could not find the specified string.\": \"\\u672a\\u627e\\u5230\\u641c\\u7d22\\u5185\\u5bb9.\",\n\"Replace\": \"\\u66ff\\u6362\",\n\"Next\": \"\\u4e0b\\u4e00\\u4e2a\",\n\"Whole words\": \"\\u5168\\u5b57\\u5339\\u914d\",\n\"Find and replace\": \"\\u67e5\\u627e\\u548c\\u66ff\\u6362\",\n\"Replace with\": \"\\u66ff\\u6362\\u4e3a\",\n\"Find\": \"\\u67e5\\u627e\",\n\"Replace all\": \"\\u5168\\u90e8\\u66ff\\u6362\",\n\"Match case\": \"\\u533a\\u5206\\u5927\\u5c0f\\u5199\",\n\"Prev\": \"\\u4e0a\\u4e00\\u4e2a\",\n\"Spellcheck\": \"\\u62fc\\u5199\\u68c0\\u67e5\",\n\"Finish\": \"\\u5b8c\\u6210\",\n\"Ignore all\": \"\\u5168\\u90e8\\u5ffd\\u7565\",\n\"Ignore\": \"\\u5ffd\\u7565\",\n\"Add to Dictionary\": \"\\u6dfb\\u52a0\\u5230\\u5b57\\u5178\",\n\"Insert row before\": \"\\u5728\\u4e0a\\u65b9\\u63d2\\u5165\",\n\"Rows\": \"\\u884c\",\n\"Height\": \"\\u9ad8\",\n\"Paste row after\": \"\\u7c98\\u8d34\\u5230\\u4e0b\\u65b9\",\n\"Alignment\": \"\\u5bf9\\u9f50\\u65b9\\u5f0f\",\n\"Border color\": \"\\u8fb9\\u6846\\u989c\\u8272\",\n\"Column group\": \"\\u5217\\u7ec4\",\n\"Row\": \"\\u884c\",\n\"Insert column before\": \"\\u5728\\u5de6\\u4fa7\\u63d2\\u5165\",\n\"Split cell\": \"\\u62c6\\u5206\\u5355\\u5143\\u683c\",\n\"Cell padding\": \"\\u5355\\u5143\\u683c\\u5185\\u8fb9\\u8ddd\",\n\"Cell spacing\": \"\\u5355\\u5143\\u683c\\u5916\\u95f4\\u8ddd\",\n\"Row type\": \"\\u884c\\u7c7b\\u578b\",\n\"Insert table\": \"\\u63d2\\u5165\\u8868\\u683c\",\n\"Body\": \"\\u8868\\u4f53\",\n\"Caption\": \"\\u6807\\u9898\",\n\"Footer\": \"\\u8868\\u5c3e\",\n\"Delete row\": \"\\u5220\\u9664\\u884c\",\n\"Paste row before\": \"\\u7c98\\u8d34\\u5230\\u4e0a\\u65b9\",\n\"Scope\": \"\\u8303\\u56f4\",\n\"Delete table\": \"\\u5220\\u9664\\u8868\\u683c\",\n\"H Align\": \"\\u6c34\\u5e73\\u5bf9\\u9f50\",\n\"Top\": \"\\u9876\\u90e8\\u5bf9\\u9f50\",\n\"Header cell\": \"\\u8868\\u5934\\u5355\\u5143\\u683c\",\n\"Column\": \"\\u5217\",\n\"Row group\": \"\\u884c\\u7ec4\",\n\"Cell\": \"\\u5355\\u5143\\u683c\",\n\"Middle\": \"\\u5782\\u76f4\\u5c45\\u4e2d\",\n\"Cell type\": \"\\u5355\\u5143\\u683c\\u7c7b\\u578b\",\n\"Copy row\": \"\\u590d\\u5236\\u884c\",\n\"Row properties\": \"\\u884c\\u5c5e\\u6027\",\n\"Table properties\": \"\\u8868\\u683c\\u5c5e\\u6027\",\n\"Bottom\": \"\\u5e95\\u90e8\\u5bf9\\u9f50\",\n\"V Align\": \"\\u5782\\u76f4\\u5bf9\\u9f50\",\n\"Header\": \"\\u8868\\u5934\",\n\"Right\": \"\\u53f3\\u5bf9\\u9f50\",\n\"Insert column after\": \"\\u5728\\u53f3\\u4fa7\\u63d2\\u5165\",\n\"Cols\": \"\\u5217\",\n\"Insert row after\": \"\\u5728\\u4e0b\\u65b9\\u63d2\\u5165\",\n\"Width\": \"\\u5bbd\",\n\"Cell properties\": \"\\u5355\\u5143\\u683c\\u5c5e\\u6027\",\n\"Left\": \"\\u5de6\\u5bf9\\u9f50\",\n\"Cut row\": \"\\u526a\\u5207\\u884c\",\n\"Delete column\": \"\\u5220\\u9664\\u5217\",\n\"Center\": \"\\u5c45\\u4e2d\",\n\"Merge cells\": \"\\u5408\\u5e76\\u5355\\u5143\\u683c\",\n\"Insert template\": \"\\u63d2\\u5165\\u6a21\\u677f\",\n\"Templates\": \"\\u6a21\\u677f\",\n\"Background color\": \"\\u80cc\\u666f\\u8272\",\n\"Custom...\": \"\\u81ea\\u5b9a\\u4e49...\",\n\"Custom color\": \"\\u81ea\\u5b9a\\u4e49\\u989c\\u8272\",\n\"No color\": \"\\u65e0\",\n\"Text color\": \"\\u6587\\u5b57\\u989c\\u8272\",\n\"Table of Contents\": \"\\u5185\\u5bb9\\u5217\\u8868\",\n\"Show blocks\": \"\\u663e\\u793a\\u533a\\u5757\\u8fb9\\u6846\",\n\"Show invisible characters\": \"\\u663e\\u793a\\u4e0d\\u53ef\\u89c1\\u5b57\\u7b26\",\n\"Words: {0}\": \"\\u5b57\\u6570\\uff1a{0}\",\n\"Insert\": \"\\u63d2\\u5165\",\n\"File\": \"\\u6587\\u4ef6\",\n\"Edit\": \"\\u7f16\\u8f91\",\n\"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help\": \"\\u5728\\u7f16\\u8f91\\u533a\\u6309ALT-F9\\u6253\\u5f00\\u83dc\\u5355\\uff0c\\u6309ALT-F10\\u6253\\u5f00\\u5de5\\u5177\\u680f\\uff0c\\u6309ALT-0\\u67e5\\u770b\\u5e2e\\u52a9\",\n\"Tools\": \"\\u5de5\\u5177\",\n\"View\": \"\\u89c6\\u56fe\",\n\"Table\": \"\\u8868\\u683c\",\n\"Format\": \"\\u683c\\u5f0f\"\n});"
  },
  {
    "path": "public/tinymce4.7.5/plugins/codesample/css/prism.css",
    "content": "/* http://prismjs.com/download.html?themes=prism&languages=markup+css+clike+javascript */\n/**\n * prism.js default theme for JavaScript, CSS and HTML\n * Based on dabblet (http://dabblet.com)\n * @author Lea Verou\n */\n\ncode[class*=\"language-\"],\npre[class*=\"language-\"] {\n  color: black;\n  text-shadow: 0 1px white;\n  font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;\n  direction: ltr;\n  text-align: left;\n  white-space: pre;\n  word-spacing: normal;\n  word-break: normal;\n  word-wrap: normal;\n  line-height: 1.5;\n\n  -moz-tab-size: 4;\n  -o-tab-size: 4;\n  tab-size: 4;\n\n  -webkit-hyphens: none;\n  -moz-hyphens: none;\n  -ms-hyphens: none;\n  hyphens: none;\n}\n\npre[class*=\"language-\"]::-moz-selection, pre[class*=\"language-\"] ::-moz-selection,\ncode[class*=\"language-\"]::-moz-selection, code[class*=\"language-\"] ::-moz-selection {\n  text-shadow: none;\n  background: #b3d4fc;\n}\n\npre[class*=\"language-\"]::selection, pre[class*=\"language-\"] ::selection,\ncode[class*=\"language-\"]::selection, code[class*=\"language-\"] ::selection {\n  text-shadow: none;\n  background: #b3d4fc;\n}\n\n@media print {\n  code[class*=\"language-\"],\n  pre[class*=\"language-\"] {\n    text-shadow: none;\n  }\n}\n\n/* Code blocks */\npre[class*=\"language-\"] {\n  padding: 1em;\n  margin: .5em 0;\n  overflow: auto;\n}\n\n:not(pre) > code[class*=\"language-\"],\npre[class*=\"language-\"] {\n  background: #f5f2f0;\n}\n\n/* Inline code */\n:not(pre) > code[class*=\"language-\"] {\n  padding: .1em;\n  border-radius: .3em;\n}\n\n.token.comment,\n.token.prolog,\n.token.doctype,\n.token.cdata {\n  color: slategray;\n}\n\n.token.punctuation {\n  color: #999;\n}\n\n.namespace {\n  opacity: .7;\n}\n\n.token.property,\n.token.tag,\n.token.boolean,\n.token.number,\n.token.constant,\n.token.symbol,\n.token.deleted {\n  color: #905;\n}\n\n.token.selector,\n.token.attr-name,\n.token.string,\n.token.char,\n.token.builtin,\n.token.inserted {\n  color: #690;\n}\n\n.token.operator,\n.token.entity,\n.token.url,\n.language-css .token.string,\n.style .token.string {\n  color: #a67f59;\n  background: hsla(0, 0%, 100%, .5);\n}\n\n.token.atrule,\n.token.attr-value,\n.token.keyword {\n  color: #07a;\n}\n\n.token.function {\n  color: #DD4A68;\n}\n\n.token.regex,\n.token.important,\n.token.variable {\n  color: #e90;\n}\n\n.token.important,\n.token.bold {\n  font-weight: bold;\n}\n.token.italic {\n  font-style: italic;\n}\n\n.token.entity {\n  cursor: help;\n}\n\n"
  },
  {
    "path": "public/tinymce4.7.5/plugins/visualblocks/css/visualblocks.css",
    "content": ".mce-visualblocks p {\n  padding-top: 10px;\n  border: 1px dashed #BBB;\n  margin-left: 3px;\n  background-image: url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7);\n  background-repeat: no-repeat;\n}\n\n.mce-visualblocks h1 {\n  padding-top: 10px;\n  border: 1px dashed #BBB;\n  margin-left: 3px;\n  background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==);\n  background-repeat: no-repeat;\n}\n\n.mce-visualblocks h2 {\n  padding-top: 10px;\n  border: 1px dashed #BBB;\n  margin-left: 3px;\n  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==);\n  background-repeat: no-repeat;\n}\n\n.mce-visualblocks h3 {\n  padding-top: 10px;\n  border: 1px dashed #BBB;\n  margin-left: 3px;\n  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7);\n  background-repeat: no-repeat;\n}\n\n.mce-visualblocks h4 {\n  padding-top: 10px;\n  border: 1px dashed #BBB;\n  margin-left: 3px;\n  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==);\n  background-repeat: no-repeat;\n}\n\n.mce-visualblocks h5 {\n  padding-top: 10px;\n  border: 1px dashed #BBB;\n  margin-left: 3px;\n  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==);\n  background-repeat: no-repeat;\n}\n\n.mce-visualblocks h6 {\n  padding-top: 10px;\n  border: 1px dashed #BBB;\n  margin-left: 3px;\n  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==);\n  background-repeat: no-repeat;\n}\n\n.mce-visualblocks div:not([data-mce-bogus]) {\n  padding-top: 10px;\n  border: 1px dashed #BBB;\n  margin-left: 3px;\n  background-image: url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7);\n  background-repeat: no-repeat;\n}\n\n.mce-visualblocks section {\n  padding-top: 10px;\n  border: 1px dashed #BBB;\n  margin: 0 0 1em 3px;\n  background-image: url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=);\n  background-repeat: no-repeat;\n}\n\n.mce-visualblocks article {\n  padding-top: 10px;\n  border: 1px dashed #BBB;\n  margin: 0 0 1em 3px;\n  background-image: url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7);\n  background-repeat: no-repeat;\n}\n\n.mce-visualblocks blockquote {\n  padding-top: 10px;\n  border: 1px dashed #BBB;\n  background-image: url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7);\n  background-repeat: no-repeat;\n}\n\n.mce-visualblocks address {\n  padding-top: 10px;\n  border: 1px dashed #BBB;\n  margin: 0 0 1em 3px;\n  background-image: url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=);\n  background-repeat: no-repeat;\n}\n\n.mce-visualblocks pre {\n  padding-top: 10px;\n  border: 1px dashed #BBB;\n  margin-left: 3px;\n  background-image: url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==);\n  background-repeat: no-repeat;\n}\n\n.mce-visualblocks figure {\n  padding-top: 10px;\n  border: 1px dashed #BBB;\n  margin: 0 0 1em 3px;\n  background-image: url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7);\n  background-repeat: no-repeat;\n}\n\n.mce-visualblocks hgroup {\n  padding-top: 10px;\n  border: 1px dashed #BBB;\n  margin: 0 0 1em 3px;\n  background-image: url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7);\n  background-repeat: no-repeat;\n}\n\n.mce-visualblocks aside {\n  padding-top: 10px;\n  border: 1px dashed #BBB;\n  margin: 0 0 1em 3px;\n  background-image: url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=);\n  background-repeat: no-repeat;\n}\n\n.mce-visualblocks figcaption {\n  border: 1px dashed #BBB;\n}\n\n.mce-visualblocks ul {\n  padding-top: 10px;\n  border: 1px dashed #BBB;\n  margin: 0 0 1em 3px;\n  background-image: url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==);\n  background-repeat: no-repeat;\n}\n\n.mce-visualblocks ol {\n  padding-top: 10px;\n  border: 1px dashed #BBB;\n  margin: 0 0 1em 3px;\n  background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==);\n  background-repeat: no-repeat;\n}\n\n.mce-visualblocks dl {\n  padding-top: 10px;\n  border: 1px dashed #BBB;\n  margin: 0 0 1em 3px;\n  background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==);\n  background-repeat: no-repeat;\n}\n"
  },
  {
    "path": "src/App.vue",
    "content": "<template>\n    <div id=\"app\">\n        <router-view/>\n    </div>\n</template>\n\n<script>\nexport default {\n    name: \"app\"\n};\n</script>\n\n<style type=\"text/scss\" lang=\"scss\">\n@import \"./styles/base\";\nhtml {\n    height: 100%;\n}\nbody {\n    height: 100%;\n    overflow: hidden;\n}\n#app {\n    height: 100%;\n}\n</style>\n"
  },
  {
    "path": "src/api/ad/ad.js",
    "content": "/**\n * Created by lk on 17/6/4.\n */\nimport axios from \"../../utils/axios\";\n\n// 谁最懂我相关\n\n// 列表\nexport function adList(query) {\n    return axios({\n        url: \"/admin/ad/ad/index\",\n        method: \"get\",\n        params: query\n    });\n}\n\n// 保存\nexport function adSave(data, formName, method = \"post\") {\n    var url = formName === \"add\" ? \"/admin/ad/ad/save\" : \"/admin/ad/ad/edit\";\n    return axios({\n        url: url,\n        method: method,\n        data: data\n    });\n}\n\n// 删除\nexport function adDelete(data) {\n    return axios({\n        url: \"/admin/ad/ad/delete\",\n        method: \"post\",\n        data: data\n    });\n}\n"
  },
  {
    "path": "src/api/ad/adSite.js",
    "content": "/**\n * Created by lk on 17/6/4.\n */\nimport axios from \"../../utils/axios\";\n\n// 谁最懂我相关\n\n// 列表\nexport function adSiteList(query) {\n    return axios({\n        url: \"/admin/ad/site/index\",\n        method: \"get\",\n        params: query\n    });\n}\n\n// 广告列表\nexport function adSiteAdList(data) {\n    return axios({\n        url: \"/admin/ad/site/adList\",\n        method: \"post\",\n        data: data\n    });\n}\n\n// 保存\nexport function adSiteSave(data, formName, method = \"post\") {\n    var url =\n        formName === \"add\" ? \"/admin/ad/site/save\" : \"/admin/ad/site/edit\";\n    return axios({\n        url: url,\n        method: method,\n        data: data\n    });\n}\n\n// 删除\nexport function adSiteDelete(data) {\n    return axios({\n        url: \"/admin/ad/site/delete\",\n        method: \"post\",\n        data: data\n    });\n}\n"
  },
  {
    "path": "src/api/auth/authAdmin.js",
    "content": "/**\n * Created by lk on 17/6/4.\n */\nimport axios from \"../../utils/axios\";\n\n// 获取列表\nexport function authAdminList(query) {\n    return axios({\n        url: \"/admin/auth/admin/index\",\n        method: \"get\",\n        params: query\n    });\n}\n\n// 获取角色列表\nexport function authAdminRoleList(query) {\n    return axios({\n        url: \"/admin/auth/admin/roleList\",\n        method: \"get\",\n        params: query\n    });\n}\n\n// 保存\nexport function authAdminSave(data, formName, method = \"post\") {\n    let url =\n        formName === \"add\"\n            ? \"/admin/auth/admin/save\"\n            : \"/admin/auth/admin/edit\";\n    return axios({\n        url: url,\n        method: method,\n        data: data\n    });\n}\n\n// 删除管理员\nexport function authAdminDelete(data) {\n    return axios({\n        url: \"/admin/auth/admin/delete\",\n        method: \"post\",\n        data: data\n    });\n}\n"
  },
  {
    "path": "src/api/auth/authPermissionRule.js",
    "content": "/**\n * Created by lk on 17/6/4.\n */\nimport axios from \"../../utils/axios\";\n\n// 权限管理\n\n// 获取列表\nexport function authPermissionRuleList(query) {\n    return axios({\n        url: \"/admin/auth/permission_rule/index\",\n        method: \"get\",\n        params: query\n    });\n}\n\n// 保存\nexport function authPermissionRuleSave(data, formName, method = \"post\") {\n    let url =\n        formName !== \"edit\"\n            ? \"/admin/auth/permission_rule/save\"\n            : \"/admin/auth/permission_rule/edit\";\n    return axios({\n        url: url,\n        method: method,\n        data: data\n    });\n}\n\n// 删除\nexport function authPermissionRuleDelete(data) {\n    return axios({\n        url: \"/admin/auth/permission_rule/delete\",\n        method: \"post\",\n        data: data\n    });\n}\n"
  },
  {
    "path": "src/api/auth/authRole.js",
    "content": "/**\n * Created by lk on 17/6/4.\n */\nimport axios from \"../../utils/axios\";\n\n// 获取列表\nexport function authRoleList(query) {\n    return axios({\n        url: \"/admin/auth/role/index\",\n        method: \"get\",\n        params: query\n    });\n}\n\n// 编辑\nexport function authRoleAuthList(query) {\n    return axios({\n        url: \"/admin/auth/role/authList\",\n        method: \"get\",\n        params: query\n    });\n}\n\n// 添加\nexport function authRoleAuth(data) {\n    return axios({\n        url: \"/admin/auth/role/auth\",\n        method: \"post\",\n        data: data\n    });\n}\n\n// 保存\nexport function authRoleSave(data, formName, method = \"post\") {\n    let url =\n        formName === \"add\" ? \"/admin/auth/role/save\" : \"/admin/auth/role/edit\";\n    return axios({\n        url: url,\n        method: method,\n        data: data\n    });\n}\n\n// 删除\nexport function authRoleDelete(data) {\n    return axios({\n        url: \"/admin/auth/role/delete\",\n        method: \"post\",\n        data: data\n    });\n}\n"
  },
  {
    "path": "src/api/auth/login.js",
    "content": "/**\n * Created by lk on 17/6/4.\n */\nimport axios from \"../../utils/axios\";\n// 获取信息\nexport function userInfo(id, token) {\n    return axios({\n        url: \"/admin/auth/login/userInfo\",\n        method: \"get\",\n        params: { id, token }\n    });\n}\n\nexport function loginName(userName, pwd) {\n    return axios({\n        url: \"/admin/auth/login/index\",\n        method: \"post\",\n        data: { userName, pwd }\n    });\n}\n\nexport function logout(uid, token) {\n    return axios({\n        url: \"/admin/auth/login/out\",\n        method: \"post\",\n        data: { uid, token }\n    });\n}\n\nexport function password(data) {\n    return axios({\n        url: \"/admin/auth/login/password\",\n        method: \"post\",\n        data: data\n    });\n}\n"
  },
  {
    "path": "src/api/file/fileResource.js",
    "content": "/**\n * 资源管理相关\n */\nimport axios from \"../../utils/axios\";\n\n// 列表\nexport function fileResourceList(query) {\n    return axios({\n        url: \"/admin/file/resource/index\",\n        method: \"get\",\n        params: query\n    });\n}\n// 添加\nexport function fileResourceAdd(data) {\n    return axios({\n        url: \"/admin/file/resource/add\",\n        method: \"POST\",\n        data: data\n    });\n}\n"
  },
  {
    "path": "src/api/file/fileResourceTag.js",
    "content": "/**\n * 资源分组相关\n */\nimport axios from \"../../utils/axios\";\n\n// 列表\nexport function fileResourceTagList(query) {\n    return axios({\n        url: \"/admin/file/resource_tag/index\",\n        method: \"get\",\n        params: query\n    });\n}\n\n// 创建分组\nexport function fileResourceTagAdd(data) {\n    return axios({\n        url: \"/admin/file/resource_tag/add\",\n        method: \"post\",\n        data: data\n    });\n}\n"
  },
  {
    "path": "src/api/file/upload.js",
    "content": "/**\n * 上传相关\n */\nimport axios from \"../../utils/axios\";\n\n// 获取七牛上传 upToken\nexport function qiuNiuUpToken(query) {\n    return axios({\n        url: \"/admin/file/upload/qiuNiuUpToken\",\n        method: \"get\",\n        params: query\n    });\n}\n\n// 上传文件\nexport function createFile(url, formdata) {\n    return axios({\n        url: url,\n        method: \"post\",\n        data: formdata\n    });\n}\n"
  },
  {
    "path": "src/assets/icons/demo.css",
    "content": "*{margin: 0;padding: 0;list-style: none;}\n/*\nKISSY CSS Reset\n理念：1. reset 的目的不是清除浏览器的默认样式，这仅是部分工作。清除和重置是紧密不可分的。\n2. reset 的目的不是让默认样式在所有浏览器下一致，而是减少默认样式有可能带来的问题。\n3. reset 期望提供一套普适通用的基础样式。但没有银弹，推荐根据具体需求，裁剪和修改后再使用。\n特色：1. 适应中文；2. 基于最新主流浏览器。\n维护：玉伯<lifesinger@gmail.com>, 正淳<ragecarrier@gmail.com>\n */\n\n/** 清除内外边距 **/\nbody, h1, h2, h3, h4, h5, h6, hr, p, blockquote, /* structural elements 结构元素 */\ndl, dt, dd, ul, ol, li, /* list elements 列表元素 */\npre, /* text formatting elements 文本格式元素 */\nform, fieldset, legend, button, input, textarea, /* form elements 表单元素 */\nth, td /* table elements 表格元素 */ {\n  margin: 0;\n  padding: 0;\n}\n\n/** 设置默认字体 **/\nbody,\nbutton, input, select, textarea /* for ie */ {\n  font: 12px/1.5 tahoma, arial, \\5b8b\\4f53, sans-serif;\n}\nh1, h2, h3, h4, h5, h6 { font-size: 100%; }\naddress, cite, dfn, em, var { font-style: normal; } /* 将斜体扶正 */\ncode, kbd, pre, samp { font-family: courier new, courier, monospace; } /* 统一等宽字体 */\nsmall { font-size: 12px; } /* 小于 12px 的中文很难阅读，让 small 正常化 */\n\n/** 重置列表元素 **/\nul, ol { list-style: none; }\n\n/** 重置文本格式元素 **/\na { text-decoration: none; }\na:hover { text-decoration: underline; }\n\n\n/** 重置表单元素 **/\nlegend { color: #000; } /* for ie6 */\nfieldset, img { border: 0; } /* img 搭车：让链接里的 img 无边框 */\nbutton, input, select, textarea { font-size: 100%; } /* 使得表单元素在 ie 下能继承字体大小 */\n/* 注：optgroup 无法扶正 */\n\n/** 重置表格元素 **/\ntable { border-collapse: collapse; border-spacing: 0; }\n\n/* 清除浮动 */\n.ks-clear:after, .clear:after {\n  content: '\\20';\n  display: block;\n  height: 0;\n  clear: both;\n}\n.ks-clear, .clear {\n  *zoom: 1;\n}\n\n.main {\n  padding: 30px 100px;\nwidth: 960px;\nmargin: 0 auto;\n}\n.main h1{font-size:36px; color:#333; text-align:left;margin-bottom:30px; border-bottom: 1px solid #eee;}\n\n.helps{margin-top:40px;}\n.helps pre{\n  padding:20px;\n  margin:10px 0;\n  border:solid 1px #e7e1cd;\n  background-color: #fffdef;\n  overflow: auto;\n}\n\n.icon_lists{\n  width: 100% !important;\n\n}\n\n.icon_lists li{\n  float:left;\n  width: 100px;\n  height:180px;\n  text-align: center;\n  list-style: none !important;\n}\n.icon_lists .icon{\n  font-size: 42px;\n  line-height: 100px;\n  margin: 10px 0;\n  color:#333;\n  -webkit-transition: font-size 0.25s ease-out 0s;\n  -moz-transition: font-size 0.25s ease-out 0s;\n  transition: font-size 0.25s ease-out 0s;\n\n}\n.icon_lists .icon:hover{\n  font-size: 100px;\n}\n\n\n\n.markdown {\n  color: #666;\n  font-size: 14px;\n  line-height: 1.8;\n}\n\n.highlight {\n  line-height: 1.5;\n}\n\n.markdown img {\n  vertical-align: middle;\n  max-width: 100%;\n}\n\n.markdown h1 {\n  color: #404040;\n  font-weight: 500;\n  line-height: 40px;\n  margin-bottom: 24px;\n}\n\n.markdown h2,\n.markdown h3,\n.markdown h4,\n.markdown h5,\n.markdown h6 {\n  color: #404040;\n  margin: 1.6em 0 0.6em 0;\n  font-weight: 500;\n  clear: both;\n}\n\n.markdown h1 {\n  font-size: 28px;\n}\n\n.markdown h2 {\n  font-size: 22px;\n}\n\n.markdown h3 {\n  font-size: 16px;\n}\n\n.markdown h4 {\n  font-size: 14px;\n}\n\n.markdown h5 {\n  font-size: 12px;\n}\n\n.markdown h6 {\n  font-size: 12px;\n}\n\n.markdown hr {\n  height: 1px;\n  border: 0;\n  background: #e9e9e9;\n  margin: 16px 0;\n  clear: both;\n}\n\n.markdown p,\n.markdown pre {\n  margin: 1em 0;\n}\n\n.markdown > p,\n.markdown > blockquote,\n.markdown > .highlight,\n.markdown > ol,\n.markdown > ul {\n  width: 80%;\n}\n\n.markdown ul > li {\n  list-style: circle;\n}\n\n.markdown > ul li,\n.markdown blockquote ul > li {\n  margin-left: 20px;\n  padding-left: 4px;\n}\n\n.markdown > ul li p,\n.markdown > ol li p {\n  margin: 0.6em 0;\n}\n\n.markdown ol > li {\n  list-style: decimal;\n}\n\n.markdown > ol li,\n.markdown blockquote ol > li {\n  margin-left: 20px;\n  padding-left: 4px;\n}\n\n.markdown code {\n  margin: 0 3px;\n  padding: 0 5px;\n  background: #eee;\n  border-radius: 3px;\n}\n\n.markdown pre {\n  border-radius: 6px;\n  background: #f7f7f7;\n  padding: 20px;\n}\n\n.markdown pre code {\n  border: none;\n  background: #f7f7f7;\n  margin: 0;\n}\n\n.markdown strong,\n.markdown b {\n  font-weight: 600;\n}\n\n.markdown > table {\n  border-collapse: collapse;\n  border-spacing: 0px;\n  empty-cells: show;\n  border: 1px solid #e9e9e9;\n  width: 95%;\n  margin-bottom: 24px;\n}\n\n.markdown > table th {\n  white-space: nowrap;\n  color: #333;\n  font-weight: 600;\n\n}\n\n.markdown > table th,\n.markdown > table td {\n  border: 1px solid #e9e9e9;\n  padding: 8px 16px;\n  text-align: left;\n}\n\n.markdown > table th {\n  background: #F7F7F7;\n}\n\n.markdown blockquote {\n  font-size: 90%;\n  color: #999;\n  border-left: 4px solid #e9e9e9;\n  padding-left: 0.8em;\n  margin: 1em 0;\n  font-style: italic;\n}\n\n.markdown blockquote p {\n  margin: 0;\n}\n\n.markdown .anchor {\n  opacity: 0;\n  transition: opacity 0.3s ease;\n  margin-left: 8px;\n}\n\n.markdown .waiting {\n  color: #ccc;\n}\n\n.markdown h1:hover .anchor,\n.markdown h2:hover .anchor,\n.markdown h3:hover .anchor,\n.markdown h4:hover .anchor,\n.markdown h5:hover .anchor,\n.markdown h6:hover .anchor {\n  opacity: 1;\n  display: inline-block;\n}\n\n.markdown > br,\n.markdown > p > br {\n  clear: both;\n}\n\n\n.hljs {\n  display: block;\n  background: white;\n  padding: 0.5em;\n  color: #333333;\n  overflow-x: auto;\n}\n\n.hljs-comment,\n.hljs-meta {\n  color: #969896;\n}\n\n.hljs-string,\n.hljs-variable,\n.hljs-template-variable,\n.hljs-strong,\n.hljs-emphasis,\n.hljs-quote {\n  color: #df5000;\n}\n\n.hljs-keyword,\n.hljs-selector-tag,\n.hljs-type {\n  color: #a71d5d;\n}\n\n.hljs-literal,\n.hljs-symbol,\n.hljs-bullet,\n.hljs-attribute {\n  color: #0086b3;\n}\n\n.hljs-section,\n.hljs-name {\n  color: #63a35c;\n}\n\n.hljs-tag {\n  color: #333333;\n}\n\n.hljs-title,\n.hljs-attr,\n.hljs-selector-id,\n.hljs-selector-class,\n.hljs-selector-attr,\n.hljs-selector-pseudo {\n  color: #795da3;\n}\n\n.hljs-addition {\n  color: #55a532;\n  background-color: #eaffea;\n}\n\n.hljs-deletion {\n  color: #bd2c00;\n  background-color: #ffecec;\n}\n\n.hljs-link {\n  text-decoration: underline;\n}\n\npre{\n  background: #fff;\n}\n\n\n\n\n\n"
  },
  {
    "path": "src/assets/icons/demo_fontclass.html",
    "content": "\n<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"utf-8\"/>\n    <title>IconFont</title>\n    <link rel=\"stylesheet\" href=\"demo.css\">\n    <link rel=\"stylesheet\" href=\"iconfont.css\">\n</head>\n<body>\n    <div class=\"main markdown\">\n        <h1>IconFont 图标</h1>\n        <ul class=\"icon_lists clear\">\n            \n                <li>\n                <i class=\"icon iconfont icon-tongyong\"></i>\n                    <div class=\"name\">通用</div>\n                    <div class=\"fontclass\">.icon-tongyong</div>\n                </li>\n            \n                <li>\n                <i class=\"icon iconfont icon-wxbzhanghu\"></i>\n                    <div class=\"name\">wxb账户</div>\n                    <div class=\"fontclass\">.icon-wxbzhanghu</div>\n                </li>\n            \n                <li>\n                <i class=\"icon iconfont icon-gongyongquan1\"></i>\n                    <div class=\"name\">公用-圈</div>\n                    <div class=\"fontclass\">.icon-gongyongquan1</div>\n                </li>\n            \n                <li>\n                <i class=\"icon iconfont icon-user\"></i>\n                    <div class=\"name\">user</div>\n                    <div class=\"fontclass\">.icon-user</div>\n                </li>\n            \n                <li>\n                <i class=\"icon iconfont icon-shezhi1\"></i>\n                    <div class=\"name\">设置</div>\n                    <div class=\"fontclass\">.icon-shezhi1</div>\n                </li>\n            \n                <li>\n                <i class=\"icon iconfont icon-user-guanli\"></i>\n                    <div class=\"name\">用户管理</div>\n                    <div class=\"fontclass\">.icon-user-guanli</div>\n                </li>\n            \n                <li>\n                <i class=\"icon iconfont icon-pwd\"></i>\n                    <div class=\"name\">pwd</div>\n                    <div class=\"fontclass\">.icon-pwd</div>\n                </li>\n            \n                <li>\n                <i class=\"icon iconfont icon-eye\"></i>\n                    <div class=\"name\">eye</div>\n                    <div class=\"fontclass\">.icon-eye</div>\n                </li>\n            \n                <li>\n                <i class=\"icon iconfont icon-guanggao\"></i>\n                    <div class=\"name\">广告</div>\n                    <div class=\"fontclass\">.icon-guanggao</div>\n                </li>\n            \n                <li>\n                <i class=\"icon iconfont icon-guanliyuan\"></i>\n                    <div class=\"name\">管理员</div>\n                    <div class=\"fontclass\">.icon-guanliyuan</div>\n                </li>\n            \n                <li>\n                <i class=\"icon iconfont icon-cloud-permissions\"></i>\n                    <div class=\"name\">权限-</div>\n                    <div class=\"fontclass\">.icon-cloud-permissions</div>\n                </li>\n            \n                <li>\n                <i class=\"icon iconfont icon-shouye\"></i>\n                    <div class=\"name\">首页</div>\n                    <div class=\"fontclass\">.icon-shouye</div>\n                </li>\n            \n                <li>\n                <i class=\"icon iconfont icon-shijiebei\"></i>\n                    <div class=\"name\">世界杯</div>\n                    <div class=\"fontclass\">.icon-shijiebei</div>\n                </li>\n            \n                <li>\n                <i class=\"icon iconfont icon-jiaose\"></i>\n                    <div class=\"name\">角色</div>\n                    <div class=\"fontclass\">.icon-jiaose</div>\n                </li>\n            \n                <li>\n                <i class=\"icon iconfont icon-baobiao\"></i>\n                    <div class=\"name\">报表</div>\n                    <div class=\"fontclass\">.icon-baobiao</div>\n                </li>\n            \n                <li>\n                <i class=\"icon iconfont icon-guanliyuan1\"></i>\n                    <div class=\"name\">管理员</div>\n                    <div class=\"fontclass\">.icon-guanliyuan1</div>\n                </li>\n            \n                <li>\n                <i class=\"icon iconfont icon-tiku\"></i>\n                    <div class=\"name\">题库</div>\n                    <div class=\"fontclass\">.icon-tiku</div>\n                </li>\n            \n                <li>\n                <i class=\"icon iconfont icon-xiaochengxu\"></i>\n                    <div class=\"name\">小程序</div>\n                    <div class=\"fontclass\">.icon-xiaochengxu</div>\n                </li>\n            \n        </ul>\n\n        <h2 id=\"font-class-\">font-class引用</h2>\n        <hr>\n\n        <p>font-class是unicode使用方式的一种变种，主要是解决unicode书写不直观，语意不明确的问题。</p>\n        <p>与unicode使用方式相比，具有如下特点：</p>\n        <ul>\n        <li>兼容性良好，支持ie8+，及所有现代浏览器。</li>\n        <li>相比于unicode语意明确，书写更直观。可以很容易分辨这个icon是什么。</li>\n        <li>因为使用class来定义图标，所以当要替换图标时，只需要修改class里面的unicode引用。</li>\n        <li>不过因为本质上还是使用的字体，所以多色图标还是不支持的。</li>\n        </ul>\n        <p>使用步骤如下：</p>\n        <h3 id=\"-fontclass-\">第一步：引入项目下面生成的fontclass代码：</h3>\n\n\n        <pre><code class=\"lang-js hljs javascript\"><span class=\"hljs-comment\">&lt;link rel=\"stylesheet\" type=\"text/css\" href=\"./iconfont.css\"&gt;</span></code></pre>\n        <h3 id=\"-\">第二步：挑选相应图标并获取类名，应用于页面：</h3>\n        <pre><code class=\"lang-css hljs\">&lt;<span class=\"hljs-selector-tag\">i</span> <span class=\"hljs-selector-tag\">class</span>=\"<span class=\"hljs-selector-tag\">iconfont</span> <span class=\"hljs-selector-tag\">icon-xxx</span>\"&gt;&lt;/<span class=\"hljs-selector-tag\">i</span>&gt;</code></pre>\n        <blockquote>\n        <p>\"iconfont\"是你项目下的font-family。可以通过编辑项目查看，默认是\"iconfont\"。</p>\n        </blockquote>\n    </div>\n</body>\n</html>\n"
  },
  {
    "path": "src/assets/icons/demo_symbol.html",
    "content": "\n<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"utf-8\"/>\n    <title>IconFont</title>\n    <link rel=\"stylesheet\" href=\"demo.css\">\n    <script src=\"iconfont.js\"></script>\n\n    <style type=\"text/css\">\n        .icon {\n          /* 通过设置 font-size 来改变图标大小 */\n          width: 1em; height: 1em;\n          /* 图标和文字相邻时，垂直对齐 */\n          vertical-align: -0.15em;\n          /* 通过设置 color 来改变 SVG 的颜色/fill */\n          fill: currentColor;\n          /* path 和 stroke 溢出 viewBox 部分在 IE 下会显示\n             normalize.css 中也包含这行 */\n          overflow: hidden;\n        }\n\n    </style>\n</head>\n<body>\n    <div class=\"main markdown\">\n        <h1>IconFont 图标</h1>\n        <ul class=\"icon_lists clear\">\n            \n                <li>\n                    <svg class=\"icon\" aria-hidden=\"true\">\n                        <use xlink:href=\"#icon-tongyong\"></use>\n                    </svg>\n                    <div class=\"name\">通用</div>\n                    <div class=\"fontclass\">#icon-tongyong</div>\n                </li>\n            \n                <li>\n                    <svg class=\"icon\" aria-hidden=\"true\">\n                        <use xlink:href=\"#icon-wxbzhanghu\"></use>\n                    </svg>\n                    <div class=\"name\">wxb账户</div>\n                    <div class=\"fontclass\">#icon-wxbzhanghu</div>\n                </li>\n            \n                <li>\n                    <svg class=\"icon\" aria-hidden=\"true\">\n                        <use xlink:href=\"#icon-gongyongquan1\"></use>\n                    </svg>\n                    <div class=\"name\">公用-圈</div>\n                    <div class=\"fontclass\">#icon-gongyongquan1</div>\n                </li>\n            \n                <li>\n                    <svg class=\"icon\" aria-hidden=\"true\">\n                        <use xlink:href=\"#icon-user\"></use>\n                    </svg>\n                    <div class=\"name\">user</div>\n                    <div class=\"fontclass\">#icon-user</div>\n                </li>\n            \n                <li>\n                    <svg class=\"icon\" aria-hidden=\"true\">\n                        <use xlink:href=\"#icon-shezhi1\"></use>\n                    </svg>\n                    <div class=\"name\">设置</div>\n                    <div class=\"fontclass\">#icon-shezhi1</div>\n                </li>\n            \n                <li>\n                    <svg class=\"icon\" aria-hidden=\"true\">\n                        <use xlink:href=\"#icon-user-guanli\"></use>\n                    </svg>\n                    <div class=\"name\">用户管理</div>\n                    <div class=\"fontclass\">#icon-user-guanli</div>\n                </li>\n            \n                <li>\n                    <svg class=\"icon\" aria-hidden=\"true\">\n                        <use xlink:href=\"#icon-pwd\"></use>\n                    </svg>\n                    <div class=\"name\">pwd</div>\n                    <div class=\"fontclass\">#icon-pwd</div>\n                </li>\n            \n                <li>\n                    <svg class=\"icon\" aria-hidden=\"true\">\n                        <use xlink:href=\"#icon-eye\"></use>\n                    </svg>\n                    <div class=\"name\">eye</div>\n                    <div class=\"fontclass\">#icon-eye</div>\n                </li>\n            \n                <li>\n                    <svg class=\"icon\" aria-hidden=\"true\">\n                        <use xlink:href=\"#icon-guanggao\"></use>\n                    </svg>\n                    <div class=\"name\">广告</div>\n                    <div class=\"fontclass\">#icon-guanggao</div>\n                </li>\n            \n                <li>\n                    <svg class=\"icon\" aria-hidden=\"true\">\n                        <use xlink:href=\"#icon-guanliyuan\"></use>\n                    </svg>\n                    <div class=\"name\">管理员</div>\n                    <div class=\"fontclass\">#icon-guanliyuan</div>\n                </li>\n            \n                <li>\n                    <svg class=\"icon\" aria-hidden=\"true\">\n                        <use xlink:href=\"#icon-cloud-permissions\"></use>\n                    </svg>\n                    <div class=\"name\">权限-</div>\n                    <div class=\"fontclass\">#icon-cloud-permissions</div>\n                </li>\n            \n                <li>\n                    <svg class=\"icon\" aria-hidden=\"true\">\n                        <use xlink:href=\"#icon-shouye\"></use>\n                    </svg>\n                    <div class=\"name\">首页</div>\n                    <div class=\"fontclass\">#icon-shouye</div>\n                </li>\n            \n                <li>\n                    <svg class=\"icon\" aria-hidden=\"true\">\n                        <use xlink:href=\"#icon-shijiebei\"></use>\n                    </svg>\n                    <div class=\"name\">世界杯</div>\n                    <div class=\"fontclass\">#icon-shijiebei</div>\n                </li>\n            \n                <li>\n                    <svg class=\"icon\" aria-hidden=\"true\">\n                        <use xlink:href=\"#icon-jiaose\"></use>\n                    </svg>\n                    <div class=\"name\">角色</div>\n                    <div class=\"fontclass\">#icon-jiaose</div>\n                </li>\n            \n                <li>\n                    <svg class=\"icon\" aria-hidden=\"true\">\n                        <use xlink:href=\"#icon-baobiao\"></use>\n                    </svg>\n                    <div class=\"name\">报表</div>\n                    <div class=\"fontclass\">#icon-baobiao</div>\n                </li>\n            \n                <li>\n                    <svg class=\"icon\" aria-hidden=\"true\">\n                        <use xlink:href=\"#icon-guanliyuan1\"></use>\n                    </svg>\n                    <div class=\"name\">管理员</div>\n                    <div class=\"fontclass\">#icon-guanliyuan1</div>\n                </li>\n            \n                <li>\n                    <svg class=\"icon\" aria-hidden=\"true\">\n                        <use xlink:href=\"#icon-tiku\"></use>\n                    </svg>\n                    <div class=\"name\">题库</div>\n                    <div class=\"fontclass\">#icon-tiku</div>\n                </li>\n            \n                <li>\n                    <svg class=\"icon\" aria-hidden=\"true\">\n                        <use xlink:href=\"#icon-xiaochengxu\"></use>\n                    </svg>\n                    <div class=\"name\">小程序</div>\n                    <div class=\"fontclass\">#icon-xiaochengxu</div>\n                </li>\n            \n        </ul>\n\n\n        <h2 id=\"symbol-\">symbol引用</h2>\n        <hr>\n\n        <p>这是一种全新的使用方式，应该说这才是未来的主流，也是平台目前推荐的用法。相关介绍可以参考这篇<a href=\"\">文章</a>\n        这种用法其实是做了一个svg的集合，与另外两种相比具有如下特点：</p>\n        <ul>\n          <li>支持多色图标了，不再受单色限制。</li>\n          <li>通过一些技巧，支持像字体那样，通过<code>font-size</code>,<code>color</code>来调整样式。</li>\n          <li>兼容性较差，支持 ie9+,及现代浏览器。</li>\n          <li>浏览器渲染svg的性能一般，还不如png。</li>\n        </ul>\n        <p>使用步骤如下：</p>\n        <h3 id=\"-symbol-\">第一步：引入项目下面生成的symbol代码：</h3>\n        <pre><code class=\"lang-js hljs javascript\"><span class=\"hljs-comment\">&lt;script src=\"./iconfont.js\"&gt;&lt;/script&gt;</span></code></pre>\n        <h3 id=\"-css-\">第二步：加入通用css代码（引入一次就行）：</h3>\n        <pre><code class=\"lang-js hljs javascript\">&lt;style type=<span class=\"hljs-string\">\"text/css\"</span>&gt;\n.icon {\n   width: <span class=\"hljs-number\">1</span>em; height: <span class=\"hljs-number\">1</span>em;\n   vertical-align: <span class=\"hljs-number\">-0.15</span>em;\n   fill: currentColor;\n   overflow: hidden;\n}\n&lt;<span class=\"hljs-regexp\">/style&gt;</span></code></pre>\n        <h3 id=\"-\">第三步：挑选相应图标并获取类名，应用于页面：</h3>\n        <pre><code class=\"lang-js hljs javascript\">&lt;svg <span class=\"hljs-class\"><span class=\"hljs-keyword\">class</span></span>=<span class=\"hljs-string\">\"icon\"</span> aria-hidden=<span class=\"hljs-string\">\"true\"</span>&gt;<span class=\"xml\"><span class=\"hljs-tag\">\n  &lt;<span class=\"hljs-name\">use</span> <span class=\"hljs-attr\">xlink:href</span>=<span class=\"hljs-string\">\"#icon-xxx\"</span>&gt;</span><span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">use</span>&gt;</span>\n</span>&lt;<span class=\"hljs-regexp\">/svg&gt;\n        </span></code></pre>\n    </div>\n</body>\n</html>\n"
  },
  {
    "path": "src/assets/icons/demo_unicode.html",
    "content": "\n<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"utf-8\"/>\n    <title>IconFont</title>\n    <link rel=\"stylesheet\" href=\"demo.css\">\n\n    <style type=\"text/css\">\n\n        @font-face {font-family: \"iconfont\";\n          src: url('iconfont.eot'); /* IE9*/\n          src: url('iconfont.eot#iefix') format('embedded-opentype'), /* IE6-IE8 */\n          url('iconfont.woff') format('woff'), /* chrome, firefox */\n          url('iconfont.ttf') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/\n          url('iconfont.svg#iconfont') format('svg'); /* iOS 4.1- */\n        }\n\n        .iconfont {\n          font-family:\"iconfont\" !important;\n          font-size:16px;\n          font-style:normal;\n          -webkit-font-smoothing: antialiased;\n          -webkit-text-stroke-width: 0.2px;\n          -moz-osx-font-smoothing: grayscale;\n        }\n\n    </style>\n</head>\n<body>\n    <div class=\"main markdown\">\n        <h1>IconFont 图标</h1>\n        <ul class=\"icon_lists clear\">\n            \n                <li>\n                <i class=\"icon iconfont\">&#xe617;</i>\n                    <div class=\"name\">通用</div>\n                    <div class=\"code\">&amp;#xe617;</div>\n                </li>\n            \n                <li>\n                <i class=\"icon iconfont\">&#xe61f;</i>\n                    <div class=\"name\">wxb账户</div>\n                    <div class=\"code\">&amp;#xe61f;</div>\n                </li>\n            \n                <li>\n                <i class=\"icon iconfont\">&#xe7eb;</i>\n                    <div class=\"name\">公用-圈</div>\n                    <div class=\"code\">&amp;#xe7eb;</div>\n                </li>\n            \n                <li>\n                <i class=\"icon iconfont\">&#xe699;</i>\n                    <div class=\"name\">user</div>\n                    <div class=\"code\">&amp;#xe699;</div>\n                </li>\n            \n                <li>\n                <i class=\"icon iconfont\">&#xe6d1;</i>\n                    <div class=\"name\">设置</div>\n                    <div class=\"code\">&amp;#xe6d1;</div>\n                </li>\n            \n                <li>\n                <i class=\"icon iconfont\">&#xe6df;</i>\n                    <div class=\"name\">用户管理</div>\n                    <div class=\"code\">&amp;#xe6df;</div>\n                </li>\n            \n                <li>\n                <i class=\"icon iconfont\">&#xe819;</i>\n                    <div class=\"name\">pwd</div>\n                    <div class=\"code\">&amp;#xe819;</div>\n                </li>\n            \n                <li>\n                <i class=\"icon iconfont\">&#xe63d;</i>\n                    <div class=\"name\">eye</div>\n                    <div class=\"code\">&amp;#xe63d;</div>\n                </li>\n            \n                <li>\n                <i class=\"icon iconfont\">&#xe679;</i>\n                    <div class=\"name\">广告</div>\n                    <div class=\"code\">&amp;#xe679;</div>\n                </li>\n            \n                <li>\n                <i class=\"icon iconfont\">&#xe618;</i>\n                    <div class=\"name\">管理员</div>\n                    <div class=\"code\">&amp;#xe618;</div>\n                </li>\n            \n                <li>\n                <i class=\"icon iconfont\">&#xe668;</i>\n                    <div class=\"name\">权限-</div>\n                    <div class=\"code\">&amp;#xe668;</div>\n                </li>\n            \n                <li>\n                <i class=\"icon iconfont\">&#xe602;</i>\n                    <div class=\"name\">首页</div>\n                    <div class=\"code\">&amp;#xe602;</div>\n                </li>\n            \n                <li>\n                <i class=\"icon iconfont\">&#xe60d;</i>\n                    <div class=\"name\">世界杯</div>\n                    <div class=\"code\">&amp;#xe60d;</div>\n                </li>\n            \n                <li>\n                <i class=\"icon iconfont\">&#xe67e;</i>\n                    <div class=\"name\">角色</div>\n                    <div class=\"code\">&amp;#xe67e;</div>\n                </li>\n            \n                <li>\n                <i class=\"icon iconfont\">&#xe6fc;</i>\n                    <div class=\"name\">报表</div>\n                    <div class=\"code\">&amp;#xe6fc;</div>\n                </li>\n            \n                <li>\n                <i class=\"icon iconfont\">&#xe65d;</i>\n                    <div class=\"name\">管理员</div>\n                    <div class=\"code\">&amp;#xe65d;</div>\n                </li>\n            \n                <li>\n                <i class=\"icon iconfont\">&#xe62f;</i>\n                    <div class=\"name\">题库</div>\n                    <div class=\"code\">&amp;#xe62f;</div>\n                </li>\n            \n                <li>\n                <i class=\"icon iconfont\">&#xe61e;</i>\n                    <div class=\"name\">小程序</div>\n                    <div class=\"code\">&amp;#xe61e;</div>\n                </li>\n            \n        </ul>\n        <h2 id=\"unicode-\">unicode引用</h2>\n        <hr>\n\n        <p>unicode是字体在网页端最原始的应用方式，特点是：</p>\n        <ul>\n        <li>兼容性最好，支持ie6+，及所有现代浏览器。</li>\n        <li>支持按字体的方式去动态调整图标大小，颜色等等。</li>\n        <li>但是因为是字体，所以不支持多色。只能使用平台里单色的图标，就算项目里有多色图标也会自动去色。</li>\n        </ul>\n        <blockquote>\n        <p>注意：新版iconfont支持多色图标，这些多色图标在unicode模式下将不能使用，如果有需求建议使用symbol的引用方式</p>\n        </blockquote>\n        <p>unicode使用步骤如下：</p>\n        <h3 id=\"-font-face\">第一步：拷贝项目下面生成的font-face</h3>\n        <pre><code class=\"lang-js hljs javascript\">@font-face {\n  font-family: <span class=\"hljs-string\">'iconfont'</span>;\n  src: url(<span class=\"hljs-string\">'iconfont.eot'</span>);\n  src: url(<span class=\"hljs-string\">'iconfont.eot?#iefix'</span>) format(<span class=\"hljs-string\">'embedded-opentype'</span>),\n  url(<span class=\"hljs-string\">'iconfont.woff'</span>) format(<span class=\"hljs-string\">'woff'</span>),\n  url(<span class=\"hljs-string\">'iconfont.ttf'</span>) format(<span class=\"hljs-string\">'truetype'</span>),\n  url(<span class=\"hljs-string\">'iconfont.svg#iconfont'</span>) format(<span class=\"hljs-string\">'svg'</span>);\n}\n</code></pre>\n        <h3 id=\"-iconfont-\">第二步：定义使用iconfont的样式</h3>\n        <pre><code class=\"lang-js hljs javascript\">.iconfont{\n  font-family:<span class=\"hljs-string\">\"iconfont\"</span> !important;\n  font-size:<span class=\"hljs-number\">16</span>px;font-style:normal;\n  -webkit-font-smoothing: antialiased;\n  -webkit-text-stroke-width: <span class=\"hljs-number\">0.2</span>px;\n  -moz-osx-font-smoothing: grayscale;\n}\n</code></pre>\n        <h3 id=\"-\">第三步：挑选相应图标并获取字体编码，应用于页面</h3>\n        <pre><code class=\"lang-js hljs javascript\">&lt;i <span class=\"hljs-class\"><span class=\"hljs-keyword\">class</span></span>=<span class=\"hljs-string\">\"iconfont\"</span>&gt;&amp;#x33;<span class=\"xml\"><span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">i</span>&gt;</span></span></code></pre>\n\n        <blockquote>\n        <p>\"iconfont\"是你项目下的font-family。可以通过编辑项目查看，默认是\"iconfont\"。</p>\n        </blockquote>\n    </div>\n\n\n</body>\n</html>\n"
  },
  {
    "path": "src/assets/icons/iconfont.css",
    "content": "\n@font-face {font-family: \"iconfont\";\n  src: url('iconfont.eot?t=1531114397320'); /* IE9*/\n  src: url('iconfont.eot?t=1531114397320#iefix') format('embedded-opentype'), /* IE6-IE8 */\n  url('data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAABToAAsAAAAAHsgAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAADMAAABCsP6z7U9TLzIAAAE8AAAAQwAAAFZW7kpSY21hcAAAAYAAAAD6AAAC7G5a4JFnbHlmAAACfAAAD7kAABYkv4HK6WhlYWQAABI4AAAALwAAADYXR207aGhlYQAAEmgAAAAgAAAAJA01COlobXR4AAASiAAAABkAAABQVT4AAGxvY2EAABKkAAAAKgAAACo5tjQUbWF4cAAAEtAAAAAfAAAAIAEuAN1uYW1lAAAS8AAAAUUAAAJtPlT+fXBvc3QAABQ4AAAArQAAAPWMVYtNeJxjYGRgYOBikGPQYWB0cfMJYeBgYGGAAJAMY05meiJQDMoDyrGAaQ4gZoOIAgCKIwNPAHicY2BkcWacwMDKwMHUyXSGgYGhH0IzvmYwYuRgYGBiYGVmwAoC0lxTGBwYKl5IMjf8b2CIYW5haAAKM4LkAOshC9cAeJzFkjFuAkEMRf8sGwIJhAAF0ECKCKVA4gQchZ4jQMM9uBA9J6D7INFFKVIgke/926QgSYPi0VvNeKy1x98A7gBUxETkQPpEQti7vKnwV/BQ+HNsdX7Fi3Y5lszYZJ8jTjnjnAuuuOaGO+55PpyOg8tF0Y7qcfhj1G+WlNVrjLcrK6KaeEKGR3RVcwd1tNFQ7S29sYp7PKvqmsKqf8h4I0v/l/q7NYrvR3nqimWJSmRm1E+wRJ0FewZx3zfqNjg08R+OTMwUp0ZagDMjVcC5kT7gwkRFXJmYN66N1AM3JmaVOyNFwb2RtuDZSGUcTibm+TgwqH0BQ/Nn4wAAeJylWHuQHMV5n697pmefM/uYx+7dvndv9nW3e7uzu3PS3e3e6cTp/UBIJwlTPB2QFCRerkCA2IdiKAyIh11glZOYAjkxVVC2VeWkKg7COBQhVAi27AopKOwihjIpqmyXcTlJgTTK17N3QlCl/JOrvZ7pr3u6v/76933fr1uQBOHcf9DnaUKICxWhJawXdgoCsDoUFJKGfLnTIHXQ85JuagotF8t5uVho0FkwC0wz2r2OZTKZqaBABux8u1dukDJ0O30yDW0jDZAcHbksNpaK0UchkChn7nU3k6dBzxZTan/C3TQ+0Nq5uO/2UCyWjMUe8jFJ8hEiqgocNg2/5A8w91uSOqI/n62SLISS5ZGt+8O50dg193eOpMdMP8DyMsRHc8q3B9GRKP7uHjHisaQcCfsSI+FiSYPb3wsm4qG09a6Afz5c6xP0CfKcEBRMoSw4wgZhr3CDcDuuWAE5A2YfnAbQBpTxBasKQBErXazZWNUVoAWWBs3A1fVmoWMV/7/t5BfbDxByYPv2Gwi5YfvMDkJ2zEzvBNjp3vFqtgJQyQ4f/xmORMKv8gK+fZEGd//FvmDnJ9h+wH0Bdk6fn+fR8929x8TKF1i4P71o09n6RZsEQeaGpqfJrwVVyAoLiKYrhAPCF9DCeQX0qGaYebRGFK2ssWK+YHWjnR4Cx9ChD120Fe4D9vHKdo8bbhqRZfKK421L22ssyw0Yy3MIctB1LPnC9yJ/5xbuWPSJMx8k8/kkNZI5gFzAz858wPx+Rg3md0OJFGyZmtoMqURvHsKxEFmaE6W5JRKKhQDW/RzaW9oAzZIklprkEvcdfyjkhxwvL3z/w2pBfg35xNl/TuQBn2QqkT/7CJ+KTPHSfT3Wy01tAZww14slrh7wr9btpXTvOv42uHrZaretUosC0NY9qEsoFr43FA/h7158RQGalXi2/RPyXx5+hbELcEovwC8RHjkliqceGZZP/kwUf/akV06KLzw8FD78AvnHVSmWOCygb7xIX6SCoOHI3PA9CzfDHMJWzuOwc71NwGYeeGCGwabe37wh0mXxjVPd3NGtd56g9MSdW4/muuqD1133oCB6ei7jWEEc7QvCTz7tX7h3nV7b0NhY2So7vW6nCVaxoILVBFxRUQEVmFz2REzXsuCFF1nPQBYMU/ZEht0egJHl0LD7MICeY3oib7DeALHkIJhkBYoyk01Dw5EKzZWB0CNxwrLMJVZnwKctWNxH+TBlLunZbRx7OIw9nNbhyMMXHGk4LRHs9QDr7WGZrVT6lQrEJcZoPJlJFrMJSVGI2CzUCk2RKAozs0WUxyljUqEOUC980tVkF3RVw1LiM11FMGNZf1QNh9PhQjidygdQUIuZEMilPUk4rER8ORSgPOeLKLxj1BdmmXQ+eEFXORoNM+ysRv1Z3vl/zqtvr/8h8AX0KydR188qMJ6XJPm8rmH1Al3/r2UlpPNd74olPtFVjX5WVxSnc4HEp9dEGeo5OuzIVy/7/fJqVxStxvN76e/ozegNltAW+hjP7xL+Qvge4s3o4x5bRUshuhdJMCWZbdx+01iplxsAHhzLHjTjnhvJnkvFV1JbATg0OTpbCB38IVo7ZS5gCC1TxgfT0EPafVJ2DBNDVB8kDRHXwiBvYGPB6qAoCw6H5oDgFI4CZU+IQOY45jBmRAvrkhouFT//1386HxuNOQceXkrDDWg+H9Z8VHf3HnqI0ocODcsdBwk5uMMrvxI00gbm2Z8CEEoDQSaJlO6xlvx+UaSzX5ysJ+JOdsqoVjW7165pZCpfrGzNNEz3dqCUiEHFnGkYylhcppRKKOn44sF3x28br9US/dyUqjpqNeJQDbIEszCRyfQdz1ynxGLK0mPXt4l7hujh6jivt5phBT5Hjh08dIyQY4cOHoPvoYrbuYrbdxw881GQa2mAg2qKIpFRWSBL1lIgGaCEjBqNiVsdh2h6/aa6pmk1JzMVhGym+We/w2iIyJLjJcWYmDWVgAg4Av51gprcr0EdVU1odI1aQ01VJzfjxchzy/Q4XUZErOFZpzsMkRg+bNyglRSjY5SRoyheSUaga7hZs3A+omqMTrgOWVo3vxfEnGbmRfr12277Oi3U1wKsrZNr8SnOuG+lGqmMBbDQaV0CFvzq2fFNlG4at81UyrSvv4/S+65/Fru719emAaZr8I36Wve+ppnKas2IU2yvJ7CuW3SElfi77F9CvctYkbmSpldGi1FWKstljlSvdGxBdEqCYzPZv6f3zobvHzq49dChX962eNw9d+jGrTd+/smZl5yXL90CD0GFPJyCX8Jv4aHmBvi7+X+/6htTH1R/07BF97cQpWs6H1Y+nH5w4/PzL9xynLrdk0aM1Kt338xz+Ll/on9P1wp+ZIWjQlGooi03ol6oQ57rlC/no2ioPFoKyaFud/NdkG3HNu2y7PQcRDw6H/JGu92nXUzJ3F/q0LXb6C26Ru8hhy9zly87TKg4efYKsqsPy/1d5Mwf4KlJePrsq/uryaWR8atahigG9I9VTRnZtUfPIY+LjTK/bOr1WjKo6uSOXYcJObzLXZ6EnbO7CNk16y62XnmlBa+/v7Dw/p9Ph0Np56aQRN/3qaPVkczk7VG/LD8pIu1IDHHyHP0WncF17cOM15nFjIcRnzg9XCSPDuUGLRYUUWamQjLEC/r4MzRcv0JlZpgZCb0X9wM/XcGYF0Dgtas7feZXQwREWRYlPeEvTnRGtInxWilOJfDJNBAOsoAYlNUkAb8WT/Snx5Hs+ll1etOmxU6pMDkoTRxcWH9wQrp/29b7v9ts3pCNRGJEMWKKFhZLpez6VDihBVks255P5wv+WDIT8UM6aDAUK6ZuBNWIVsyt3ShLfh/OR4h165ZyZZ+Si0SQLN/8xXj8i4g5zNPnTtNraAX32BGuFG7CHZaQpcVNvjoYhidcWh/KcbQH5xj4Y4Vyi1sHBT1nrNc2JUOnMNlqZ4jGeLq1eW6vc5fiubaLUGgQfiAwJ7uIiiEBtlvojERw/zYQRJfOt8cfm0hSH/Vnn+2080Ah6C+SdKn6SAWF1WOVUhoI+CAhYgRI+MF9e2Q8H49H01WlHcasZkfDEIpBNRlQIV4YT8Jm0Mw19WomUwNaPkjVgHuNKO3qVHZzSi8pVzU7uyQ4EVCpu9E3sMYu1TACXFqyBj64J0D3A+ynAfdLcHk8P94ej6TYJB4t9oSiANHwS8Gsr9rG2e+ATFyvZCBTqabPc7PLya+EMcxCgh+sggxD/mTrvOhaPU4m0mBzcmJ7BEsuekbq9tBXCszU0VyzUMQs4wDalTMNuuB+nNyYdD+OY9zUTAsmxm4CMbovKh4ZmwDL1DCeTlyqx9dDurivlIL1cf1SQjG8SqFCCCT+9gIoyaT7oZ73MQ1+PNaDt2MxgFjsbeiN/Rg05ssnP4qn4WSpXi+dhHT8I8pECpiY3d+LIlvNs8t0N/0ycvqy0BM2C1cLjwlPCT9EvFjM5GnP9pIfKm7KQ5QoXpzlOdPiLabFM2aG9LALrptx+HgNWWKYPFVKFuNm4rizmbXSy3IM7wOvi4I0DC3SzlKVsjLDg6bFc7FHVflnsuGh0+SJGJuhjN1NA9tkjko+Y5NYQy2bQNp3/77pS5lLI8FRSsdLRqIQYCk9khflRt6cD5nSRD3V3Lzxa++OJvQJEI2UHgjPJZXpcjtXkKhdMO0Rxi7xS7HUjHuWfk353Mj82Eg9I+0i4lhfKTWvmPfFI0ZMr4ajWdtkkUhQZUDDVKRhOSLS2uSamaJWmokTjOdTWyQp8mK6FBokJiD/wbMHw/2vrlu8sWA4g06m4GOhWH7nU0cfT2LebFblZtA0p2hn7sQDRi6JATG0ISLb0bE4MooJJaMDGOHR8J137XmgPRm4NhyPbi1bawPUF6gHbnsjFw1t7zSvHY2xEJXWbamuVSu+fMOZnJ28LxKSyOIfTeVnk/lW1RB9Uc0f8Bkpp6VttiNBjCFhFkogwUV39Y3s3mwlKnNMnuirsXgrV/zwcEvtSWKsKXWIUjjwV0d7pbASkqqjaiAayhGaLwVDYzlKy0rq8tcFPCae+xF9mc4JilAQGivn8Osw/twlfFl4XHhGeE74rvCi8CPEV9E0ZIqnOY+eWx666sDKctfGnWxy/ypfwOIwCvNE3unJmODN+PB44MRXPhwyf88NyxehfvKq0Ox/ck6hfJy2Q60B4NlS1s0B4gyh2NK7rLwyaHyypeed4uqxwmN9/GOZNptSJrhRjYxb/UBX3lmuyuVM0S9KALOSHBS1NfVvNvrIRRuNWRQ1is3mYrP57M1XHfEvhvd0Zjt7whsDR2Zn/Wtm7elp/3R42/VXHtj23mA3IbsHc7sBds9NzgHMTU7OETJ3CEdo8nGajdkbi43GhkbjGX/fmlDVxUBGavZ3ULhbEwOyNIsEJ11hNV/9fngP4KbHfbpvs6zqvqmjPl2V4ftSedx9Q4LW2JtjrT8+mZlE4gXwUawWYUSs3ulNAN5kp4ArvNh8CRZs9w17gZAFG2r2wrEzda5X/UxzBjv+JewZDHUe7AFpVV0sX18dB8sScIU3NNyvjLWwU23CkqpZn9wjLFKLfeRpMJk5mam6PwA49bgsb0ZVwefc44vo8jCfYQy+m5zx7h5aPA7jqU2PYozF86t30zCW/zTxo7hbMgYLTP09nuJlBniU5HQd6T8PXvwQiqcB2owYRuTs07wkV559Ol8DqOXJld7zS4y9/DKL+Ak7HQyeRvsw1/yXI0xh77CQyn5yRIqwt6RAlPybEXHXRNBD9Qi8EjEsHMFdk+PHphy8kq+dDYqPPirRYEQ67vMdx498YLx2RJJ+wdQQO32EsbeYwq8BVta5j/y3YKD/OMLCkJkNccu8KKjbXt4eW70f4Lyka3eL/B9pin7+LF7AtXOH0FiRnCa3LO25lUCnrqpz146kGvQ7R/fc7H6T7Jtftw9g37r5ffDItm3b7spZsHacM+G2nUSrmTSZzSbJxNItBEdw9o9KbPTaufmNR79D6a27Vz8lZJ/7QbuxtvGvwc4Kja5MHc81cwRyk7kVDozrWkNew71D5s7dz/GudIqru2bzWp0vNsrvG6Pnr326fC/LbjQ3Pp6DH/gCAZ+7ODlA+DUVXlFy46BWDPi5+w+8CnvlIARIDGqDOgTUIAya7qi9gK8BaJbgcSXidvE9IMNvfAFU6YL7DFPYcfHbQmRJ/PZC4eyI3x30UdM674x8yrANhwexPo9ZPBjxK1N+S4WZjggn3hTFN08My2OnKD11zCvb8Vo14/+qv6qpIX+pSINhUIO0tKgGRjKJkUhEu0gjFc6PduLNs87qcFjCx0FRGY1/qClBf7aA5Es1wmDUCnOxMDCW+nSDUS/MCcL/AtBgfn4AAAB4nGNgZGBgAOIvstuY4/ltvjJwszCAwPVMkbkI+n8DZxhzC5DLwcAEEgUAFr4JzAB4nGNgZGBgbvjfwBDDGcrA8P8/ZxgDUAQFiAAAgYQFMHicY2FgYGB+ycDAwoAbc4bil0fGAGCKAZMAAAAAAAAAAHYBKAHWAgQCKgNeBGgExAUKBXwF/gakBxIIOglmCdoKRgqSCxIAAHicY2BkYGAQYbjIIMAAAkxAzAWEDAz/wXwGACA/AgwAeJxlj01OwzAQhV/6B6QSqqhgh+QFYgEo/RGrblhUavdddN+mTpsqiSPHrdQDcB6OwAk4AtyAO/BIJ5s2lsffvHljTwDc4Acejt8t95E9XDI7cg0XuBeuU38QbpBfhJto41W4Rf1N2MczpsJtdGF5g9e4YvaEd2EPHXwI13CNT+E69S/hBvlbuIk7/Aq30PHqwj7mXle4jUcv9sdWL5xeqeVBxaHJIpM5v4KZXu+Sha3S6pxrW8QmU4OgX0lTnWlb3VPs10PnIhVZk6oJqzpJjMqt2erQBRvn8lGvF4kehCblWGP+tsYCjnEFhSUOjDFCGGSIyujoO1Vm9K+xQ8Jee1Y9zed0WxTU/3OFAQL0z1xTurLSeTpPgT1fG1J1dCtuy56UNJFezUkSskJe1rZUQuoBNmVXjhF6XNGJPyhnSP8ACVpuyAAAAHicbYvbDoIwGINXQY6excfwgkca+mf7PWzKWASe3hFNvLFJm/ZLKmbio0L8V4UZIsSYI0GKDDkKlFhgiRXW2GCLHfaocBDos84aNQQXr74ZtTRK+6X6sqeXpo69ozZ1mkbNdTmNowr8xtHjdY5ooGyaSklbfPgQcnu6WX8+Pqi9s3NsjUuctn6g3Gm+MDXEyYWldZQ20jahlb9zHXd89WUf6EmTUb0X4g3Fez+LAAAA') format('woff'),\n  url('iconfont.ttf?t=1531114397320') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/\n  url('iconfont.svg?t=1531114397320#iconfont') format('svg'); /* iOS 4.1- */\n}\n\n.iconfont {\n  font-family:\"iconfont\" !important;\n  font-size:16px;\n  font-style:normal;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\n.icon-tongyong:before { content: \"\\e617\"; }\n\n.icon-wxbzhanghu:before { content: \"\\e61f\"; }\n\n.icon-gongyongquan1:before { content: \"\\e7eb\"; }\n\n.icon-user:before { content: \"\\e699\"; }\n\n.icon-shezhi1:before { content: \"\\e6d1\"; }\n\n.icon-user-guanli:before { content: \"\\e6df\"; }\n\n.icon-pwd:before { content: \"\\e819\"; }\n\n.icon-eye:before { content: \"\\e63d\"; }\n\n.icon-guanggao:before { content: \"\\e679\"; }\n\n.icon-guanliyuan:before { content: \"\\e618\"; }\n\n.icon-cloud-permissions:before { content: \"\\e668\"; }\n\n.icon-shouye:before { content: \"\\e602\"; }\n\n.icon-shijiebei:before { content: \"\\e60d\"; }\n\n.icon-jiaose:before { content: \"\\e67e\"; }\n\n.icon-baobiao:before { content: \"\\e6fc\"; }\n\n.icon-guanliyuan1:before { content: \"\\e65d\"; }\n\n.icon-tiku:before { content: \"\\e62f\"; }\n\n.icon-xiaochengxu:before { content: \"\\e61e\"; }\n\n"
  },
  {
    "path": "src/assets/icons/iconfont.js",
    "content": "/* eslint-disable */\n(function(window){var svgSprite='<svg><symbol id=\"icon-tongyong\" viewBox=\"0 0 1024 1024\"><path d=\"M733.717333 550.08c-101.418667 0-183.616 82.218667-183.616 183.594667 0 101.418667 82.218667 183.637333 183.616 183.637333C835.093333 917.333333 917.333333 835.114667 917.333333 733.696 917.333333 632.298667 835.114667 550.08 733.717333 550.08zM733.717333 874.133333c-77.589333 0-140.416-62.869333-140.416-140.437333s62.826667-140.416 140.416-140.416c77.546667 0 140.416 62.848 140.416 140.416S811.242667 874.133333 733.717333 874.133333z\"  ></path><path d=\"M401.28 473.024 199.722667 473.024C160.170667 473.024 128 440.853333 128 401.301333L128 199.722667C128 160.170667 160.170667 128 199.722667 128l201.557333 0c39.552 0 71.722667 32.170667 71.722667 71.722667l0 201.557333C473.024 440.853333 440.832 473.024 401.28 473.024zM199.722667 170.666667C183.701333 170.666667 170.666667 183.701333 170.666667 199.722667l0 201.557333c0 16.021333 13.034667 29.056 29.056 29.056l201.557333 0c16.021333 0 29.056-13.034667 29.056-29.056L430.336 199.722667C430.336 183.701333 417.301333 170.666667 401.28 170.666667L199.722667 170.666667z\"  ></path><path d=\"M824.256 473.024l-201.536 0c-39.552 0-71.744-32.170667-71.744-71.722667L550.976 199.722667c0-39.552 32.213333-71.722667 71.744-71.722667l201.536 0C863.786667 128 896 160.170667 896 199.722667l0 201.557333C896 440.853333 863.786667 473.024 824.256 473.024zM622.698667 170.666667c-16.042667 0-29.077333 13.034667-29.077333 29.056l0 201.557333c0 16.021333 13.034667 29.056 29.077333 29.056l201.493333 0c16.085333 0 29.077333-13.034667 29.077333-29.056L853.269333 199.722667C853.290667 183.701333 840.298667 170.666667 824.213333 170.666667L622.698667 170.666667z\"  ></path><path d=\"M401.28 896 199.722667 896C160.170667 896 128 863.808 128 824.277333L128 622.72c0-39.552 32.170667-71.722667 71.722667-71.722667l201.557333 0c39.552 0 71.722667 32.192 71.722667 71.722667l0 201.536C473.024 863.808 440.832 896 401.28 896zM199.722667 593.642667C183.701333 593.642667 170.666667 606.677333 170.666667 622.677333l0 201.578667c0 16 13.034667 29.034667 29.056 29.034667l201.557333 0c16.021333 0 29.056-13.034667 29.056-29.034667l0-201.578667c0-16-13.034667-29.034667-29.056-29.034667L199.722667 593.642667z\"  ></path></symbol><symbol id=\"icon-wxbzhanghu\" viewBox=\"0 0 1024 1024\"><path d=\"M917.901055 147.245575 128.015094 147.245575c-32.090882 0-58.18826 26.075889-58.18826 58.125839l0 567.459103c0 32.04688 26.097378 58.125839 58.18826 58.125839l789.885961 0c32.132838 0 58.168818-26.076912 58.168818-58.125839L976.069873 205.371414C976.068849 173.321464 950.033893 147.245575 917.901055 147.245575M932.999938 772.830517c0 8.243755-6.771217 15.056927-15.099906 15.056927L128.015094 787.887444c-8.3072 0-15.120372-6.813173-15.120372-15.056927L112.894721 205.371414c0-8.243755 6.813173-15.057951 15.120372-15.057951l789.885961 0c8.328689 0 15.099906 6.814196 15.099906 15.057951L933.000961 772.830517z\"  ></path><path d=\"M432.709631 511.054465c31.585369-24.14184 52.405557-61.827137 52.405557-104.474446 0-72.677253-59.092863-131.813095-131.729184-131.813095-72.636321 0-131.729184 59.134819-131.729184 131.813095 0 42.647309 20.797675 80.332606 52.405557 104.474446-70.406536 30.703279-119.846552 100.857059-119.846552 182.535313 0 11.861142 9.610892 21.534456 21.534456 21.534456 11.881608 0 21.534456-9.673313 21.534456-21.534456 0-84.706217 67.818595-153.515373 151.937434-155.701155 1.429559 0 2.734274 0.419556 4.163833 0.419556 1.428535 0 2.734274-0.419556 4.119831-0.419556 84.201727 2.187829 152.000879 70.994937 152.000879 155.701155 0 11.861142 9.631358 21.534456 21.534456 21.534456s21.534456-9.673313 21.534456-21.534456C552.577672 611.911524 503.116167 541.757744 432.709631 511.054465M264.726755 406.581042c0-48.957015 39.745213-88.745207 88.661296-88.745207 48.872081 0 88.660272 39.788192 88.660272 88.745207 0 47.441499-37.600363 85.967954-84.538395 88.23867-1.385557-0.083911-2.691295-0.420579-4.119831-0.420579-1.429559 0-2.735297 0.336668-4.163833 0.420579C302.285163 492.547972 264.726755 454.022541 264.726755 406.581042\"  ></path><path d=\"M846.863139 314.13556 558.886355 314.13556c-11.945053 0-21.534456 9.673313-21.534456 21.533432 0 11.861142 9.589402 21.534456 21.534456 21.534456l287.976784 0c11.904121 0 21.534456-9.673313 21.534456-21.534456C868.397594 323.808874 858.76726 314.13556 846.863139 314.13556\"  ></path><path d=\"M846.863139 446.957635 558.886355 446.957635c-11.945053 0-21.534456 9.589402-21.534456 21.533432 0 11.861142 9.589402 21.534456 21.534456 21.534456l287.976784 0c11.904121 0 21.534456-9.673313 21.534456-21.534456C868.397594 456.547037 858.76726 446.957635 846.863139 446.957635\"  ></path><path d=\"M846.863139 579.778686 601.954243 579.778686c-11.94403 0-21.533432 9.589402-21.533432 21.533432 0 11.861142 9.589402 21.534456 21.533432 21.534456l244.908896 0c11.904121 0 21.534456-9.673313 21.534456-21.534456C868.397594 589.369112 858.76726 579.778686 846.863139 579.778686\"  ></path></symbol><symbol id=\"icon-gongyongquan1\" viewBox=\"0 0 1024 1024\"><path d=\"M512.01842 848.076268c-185.231725 0-335.908446-151.291728-335.908446-336.375074 0-185.045483 150.675698-335.608617 335.908446-335.608617 185.213305 0 335.890027 150.544715 335.890027 335.608617C847.908446 696.78454 697.231725 848.076268 512.01842 848.076268zM512 138.493238c-206.290343 0-373.506762 167.216419-373.506762 373.506762s167.216419 373.507786 373.506762 373.507786c206.291366 0 373.506762-167.216419 373.506762-373.507786S718.291366 138.493238 512 138.493238z\"  ></path></symbol><symbol id=\"icon-user\" viewBox=\"0 0 1024 1024\"><path d=\"M576 706.624l0-52.768c70.496-39.712 128-138.784 128-237.824 0-159.072 0-288-192-288s-192 128.928-192 288c0 99.072 57.504 198.112 128 237.824l0 52.768c-217.088 17.76-384 124.416-384 253.376l896 0c0-128.96-166.912-235.648-384-253.376z\"  ></path></symbol><symbol id=\"icon-shezhi1\" viewBox=\"0 0 1024 1024\"><path d=\"M512.008698 392.128889c-66.216097 0-119.872135 53.674457-119.872135 119.872135s53.657061 119.872135 119.872135 119.872135c66.179258 0 119.871111-53.674457 119.871111-119.872135S578.187957 392.128889 512.008698 392.128889zM512.008698 583.923076c-39.72577 0-71.924099-32.19833-71.924099-71.923076 0-39.72577 32.19833-71.923076 71.924099-71.923076 39.70735 0 71.90568 32.197306 71.90568 71.923076C583.913355 551.724747 551.715025 583.923076 512.008698 583.923076zM818.252521 405.810492l-5.619998-1.837858c-3.441379-9.614985-7.330966-19.033495-11.629875-28.219715l2.64013-5.208629c12.719696-15.269775 19.62292-34.302247 19.62292-54.441936 0-22.778796-8.865925-44.185338-24.974811-60.273758l-30.127158-30.128181c-16.10684-16.107863-37.512359-24.972764-60.274782-24.972764-20.120246 0-39.153742 6.938016-54.440913 19.639293l-5.190209 2.639107c-9.169847-4.316306-18.587334-8.205892-28.220738-11.648294l-1.855254-5.653767c-3.994987-43.275619-40.546461-77.292364-84.874039-77.292364l-42.614563 0c-44.344974 0-80.895425 34.035164-84.891436 77.345576l-1.818415 5.583159c-9.614985 3.426029-18.99768 7.313569-28.149107 11.595083l-5.439896-2.693342c-15.251356-12.629645-34.231639-19.514449-54.299697-19.514449-22.744004 0-44.131103 8.864902-60.238966 24.955368l-30.146601 30.146601c-16.10684 16.089443-24.991184 37.495986-24.991184 60.273758 0 20.068058 6.885827 39.065737 19.550265 54.317093l2.674922 5.423523c-4.281513 9.097192-8.133238 18.444071-11.558244 28.02324l-5.816472 1.944282c-43.23878 4.102435-77.166497 40.61707-77.166497 84.873016l0 42.632983c0 44.255946 33.927717 80.770582 77.166497 84.873016l5.816472 1.943258c3.425006 9.579169 7.312546 18.944468 11.558244 28.024264l-2.693342 5.458315c-12.647041 15.233959-19.532869 34.249035-19.532869 54.299697 0 22.7614 8.884344 44.166919 24.991184 60.257385l30.128181 30.146601c16.090467 16.10684 37.495986 24.972764 60.257385 24.972764 20.067035 0 39.065737-6.885827 54.299697-19.514449l5.439896-2.710738c9.133008 4.281513 18.48091 8.133238 28.04166 11.559267l1.961678 5.867638c4.085038 43.185568 40.581254 77.096912 84.85562 77.096912l42.614563 0c44.274366 0 80.771605-33.911344 84.874039-77.096912l1.962701-5.867638c9.577123-3.443425 18.97926-7.313569 28.077475-11.595083l5.244444 2.64013c15.287171 12.700253 34.320667 19.621896 54.423517 19.621896 22.780843 0 44.167942-8.865925 60.274782-24.972764l30.127158-30.146601c16.108886-16.090467 24.974811-37.495986 24.974811-60.257385 0-20.139689-6.921643-39.172161-19.640316-54.459333l-2.64013-5.191232c4.317329-9.168824 8.188496-18.587334 11.648294-28.238135l5.655813-1.836835c43.293015-4.01443 77.30976-40.546461 77.30976-84.873016l0-42.632983C895.598096 446.373327 861.562932 409.822876 818.252521 405.810492zM847.720669 532.995173c0 23.190165-18.782785 41.955554-41.955554 41.955554l-31.216979 10.239202c-5.976108 21.47715-14.412244 41.865503-25.133424 60.845787l14.806217 29.201066c16.393365 16.374946 16.393365 42.954301 0 59.329247l-29.665647 29.683043c-8.204869 8.205892-18.943444 12.290931-29.68202 12.290931s-21.47715-4.085038-29.665647-12.290931l-29.235858-14.806217c-18.889209 10.70276-39.189557 19.086707-60.540841 25.045419l-10.488889 31.323403c0 23.153326-18.784832 41.919738-41.955554 41.919738l-41.97295 0c-23.172769 0-41.955554-18.766412-41.955554-41.919738l-10.488889-31.323403c-21.280676-5.921873-41.508369-14.270005-60.346413-24.902156l-29.433356 14.662955c-8.187473 8.205892-18.944468 12.290931-29.68202 12.290931-10.738575 0-21.459754-4.085038-29.664623-12.290931l-29.664623-29.683043c-16.393365-16.374946-16.393365-42.954301 0-59.329247l14.645558-29.469172c-10.613732-18.801205-18.944468-39.065737-24.920576-60.327994l-31.270191-10.488889c-23.171746 0-41.955554-18.765389-41.955554-41.955554l0-41.97295c0-23.171746 18.783809-41.97295 41.955554-41.97295l31.270191-10.488889c5.957689-21.263279 14.288424-41.509393 24.920576-60.329017l-14.645558-29.413913c-16.393365-16.394389-16.393365-42.990117 0-59.383482l29.664623-29.6636c8.205892-8.188496 18.926048-12.290931 29.664623-12.290931 10.737552 0 18.801205 0.034792 27.131941 8.348132l29.913287 14.895245c19.194154-10.863419 39.850613-19.354813 61.57745-25.384134l11.326976-27.113521c0-23.172769 18.782785-41.955554 41.955554-41.955554l41.97295 0c23.170722 0 41.955554 18.782785 41.955554 41.955554l10.254551 31.215956c21.441335 5.976108 41.86755 14.394848 60.82839 25.151843l29.182646-14.82259c8.188496-8.188496 21.781072-16.429181 32.680307-16.429181s18.463514 8.240685 26.668383 16.429181l29.665647 29.6636c16.393365 16.394389 16.393365 42.990117 0 59.383482l-14.770402 29.218462c10.721179 18.961864 19.138896 39.368636 25.115004 60.809971l31.198559 10.204409c23.172769 0 41.955554 18.801205 41.955554 41.97295L847.719646 532.995173z\"  ></path></symbol><symbol id=\"icon-user-guanli\" viewBox=\"0 0 1024 1024\"><path d=\"M532.136998 608.915021c16.870605 2.780601 33.617222-8.342819 36.644784-25.645352 3.089557-17.179561-8.403797-33.617222-25.645352-36.644784-24.285541-4.325379-48.139154-6.736046-70.941911-7.106997-132.614136-1.544778-245.640076 38.128584-325.356735 116.547425-81.385425 80.025614-126.188061 196.573039-126.188061 328.19933 0 17.488516 14.150982 31.639499 31.639499 31.639499s31.639499-14.150982 31.639499-31.639499c0-114.508724 38.128584-215.050417 107.277739-283.087738 68.346277-67.234443 165.057529-100.294731 279.936187-98.379003C490.548924 603.106858 511.065003 605.207553 532.136998 608.915021zM858.977533 862.526966c-17.241555 3.151551-28.611937 19.589212-25.521364 36.768773 4.943291 27.31412 7.47693 55.864062 7.47693 84.969921 0 17.488516 14.150982 31.639499 31.639499 31.639499 17.488516 0 31.639499-14.150982 31.639499-31.639499 0-32.875321-2.842595-65.25672-8.465792-96.216313C892.594755 870.745797 875.3532 859.807343 858.977533 862.526966zM446.920116 514.429469c137.249487 0 248.9146-111.666129 248.9146-248.9146S584.169603 16.599253 446.920116 16.599253 198.005516 128.265382 198.005516 265.513853 309.671645 514.429469 446.920116 514.429469zM446.920116 79.87825c102.334449 0 185.635602 83.301154 185.635602 185.635602s-83.301154 185.635602-185.635602 185.635602-185.635602-83.301154-185.635602-185.635602S344.585668 79.87825 446.920116 79.87825zM505.101345 856.108006c-14.225172 14.225172-14.225172 37.28607 0 51.511242 14.225172 14.221107 37.282005 14.221107 51.507177 0 14.225172-14.225172 14.225172-37.28607 0-51.511242C542.384366 841.886899 519.326518 841.886899 505.101345 856.108006zM982.222385 534.358125c-0.300825-0.877068-0.583357-1.703321-0.969552-2.557015-0.06606-0.143299-0.096549-0.297776-0.165657-0.440059-0.289646-0.617911-0.845563-0.980731-1.169763-1.572218-1.417741-2.599699-2.750112-5.252246-4.947356-7.450506-0.347575-0.347575-0.815074-0.452254-1.173828-0.78052-0.587422-0.532542-1.321192-0.806943-1.943168-1.289687-6.098825-4.781699-13.282045-7.253344-20.640067-6.929144-0.073174 0.004065-0.146347 0.038619-0.216472 0.042685-3.932071 0.201228-7.766576 1.08541-11.42018 2.746047-0.208342 0.088418-0.428879 0.061994-0.633156 0.154478-1.263263 0.598602-2.078337 1.672832-3.22066 2.409651-1.849669 1.197203-3.870076 2.023456-5.492093 3.645474l-85.340871 85.401849-38.004595-38.004595 85.649827-85.587832c12.359243-12.359243 12.359243-32.381399 0-44.740642-2.224684-2.224684-4.904671-3.58043-7.534859-5.005285-0.819139-0.482743-1.355746-1.255132-2.228749-1.668767-0.220537-0.104679-0.452254-0.154478-0.671775-0.259157-0.023375-0.011179-0.053864-0.015245-0.077239-0.02744-78.832476-37.185456-173.029398-20.840279-234.694509 40.88581-57.829589 57.829589-73.502991 141.3899-48.521283 213.938583L543.723852 742.310693c-40.233344-3.16273-80.029679 10.07663-109.03899 39.139804-54.1333 54.1333-54.1333 142.254772 0 196.388072 27.067158 27.067158 62.599092 40.600229 98.194036 40.600229 35.53295 0 71.0659-13.533071 98.132042-40.600229 28.584496-28.584496 41.975285-67.608442 39.356276-107.216761l55.883371-55.926056c21.884021 7.531811 44.609539 12.050287 67.531203 12.050287 53.021466 0 106.041916-20.207123 146.395184-60.560391C1001.084942 705.340692 1017.646591 612.604195 982.222385 534.358125zM616.05708 835.459808c-0.308956 0.308956-0.397374 0.725639-0.691085 1.042725-2.54177 2.672873-4.511362 5.631327-5.987032 9.010529-0.127038 0.30489-0.246961 0.590471-0.366885 0.896378-1.398431 3.490996-2.089516 7.118176-2.14338 11.003497-0.004065 0.293711-0.004065 0.568113 0.004065 0.860807 0.02744 2.004147-0.386195 3.94325 0.038619 5.982967 5.129274 25.027441-2.595634 50.796782-20.640067 68.841216-29.476809 29.476809-77.491974 29.35282-106.845811 0-29.476809-29.476809-29.476809-77.430996 0-106.907805 18.353389-18.291395 44.49368-25.769341 69.706088-20.393106 1.111834 0.246961 2.147445-0.06606 3.252165 0.061994 1.177893 0.131103 2.297858 0.679906 3.483882 0.679906 0.969552 0 1.885239-0.467499 2.850726-0.555917 2.224684-0.189032 4.28676-0.598602 6.373227-1.239888 1.637262-0.502053 3.16273-1.100655 4.719704-1.873044 2.248059-1.115899 4.225782-2.460466 6.140494-4.082483 0.718525-0.602667 1.610838-0.841498 2.286678-1.518354l52.024475-51.98179c5.453474 7.102931 10.563438 14.39896 17.063702 20.898208 6.500264 6.500264 13.796293 11.610229 20.898208 17.063702L616.05708 835.459808zM895.43735 721.446022c-56.111023 56.049029-147.260057 56.173017-203.37108 0-56.049029-56.049029-56.049029-147.322051 0-203.37108 31.477907-31.52364 75.178872-45.628889 117.879797-40.847191l-56.392539 56.357984c-9.701614 9.701614-15.016871 22.555796-14.954877 36.27485 0 13.719054 5.376235 26.510225 14.954877 36.026872l55.184156 55.307129c9.949592 9.825603 22.987724 14.768894 36.088867 14.768894s26.201269-4.943291 36.212856-14.892882l55.195335-55.233955C940.2471 647.785505 926.350193 690.533179 895.43735 721.446022z\"  ></path></symbol><symbol id=\"icon-pwd\" viewBox=\"0 0 1024 1024\"><path d=\"M812.8 409.6H356.266667v-170.666667c0-55.466667 68.266667-119.466667 153.6-119.466666s153.6 64 153.6 119.466666v51.2c4.266667 29.866667 29.866667 51.2 55.466666 51.2 29.866667 0 55.466667-21.333333 59.733334-51.2V238.933333C778.666667 106.666667 659.2 0 509.866667 0S241.066667 106.666667 241.066667 238.933333v170.666667h-34.133334C151.466667 409.6 104.533333 456.533333 104.533333 512v409.6C104.533333 977.066667 151.466667 1024 206.933333 1024h610.133334c55.466667 0 102.4-46.933333 102.4-102.4V512c-4.266667-55.466667-51.2-102.4-106.666667-102.4z m-251.733333 379.733333v46.933334c0 29.866667-21.333333 51.2-51.2 51.2s-51.2-25.6-51.2-51.2v-46.933334c-38.4-21.333333-68.266667-59.733333-68.266667-106.666666 0-64 51.2-119.466667 119.466667-119.466667 64 0 119.466667 51.2 119.466666 119.466667 0 46.933333-29.866667 85.333333-68.266666 106.666666z\"  ></path></symbol><symbol id=\"icon-eye\" viewBox=\"0 0 2389 1024\"><path d=\"M2389.333333 457.927683l-54.805799 65.426623-223.506733-215.761159A1062.669188 1062.669188 0 0 1 1754.489714 613.191221l104.037133 233.59945-75.754055 40.810956-105.621454-237.178843a1248.621626 1248.621626 0 0 1-447.541574 100.897828V1023.941321h-69.886195v-272.855423c-202.441121 5.251733-372.902412-37.877027-515.021947-105.621455L536.90906 887.454931l-75.842072-40.810956 107.587187-241.609077c-133.640479-77.309037-238.645808-175.419632-318.507364-270.273566l-195.341012 188.592974L0 457.927683l197.042691-190.235975C89.015415 122.051458 41.89651 0 41.89651 0h139.743052C539.842989 641.004871 1159.752908 614.423471 1159.752908 614.423471 1801.637958 644.261532 2137.836915 0 2137.836915 0h139.743052a1279.193169 1279.193169 0 0 1-117.650565 236.445361l229.433271 221.482322z\" fill=\"#2C2C2C\" ></path></symbol><symbol id=\"icon-guanggao\" viewBox=\"0 0 1024 1024\"><path d=\"M897.432 264.198c0-106.86-86.868-193.459-194.023-193.459H318.916c-107.157 0-194.05 86.598-194.05 193.46v384.275h772.566V264.198zM848.96 600.136H173.365V264.198c0-80.024 65.312-145.121 145.552-145.121h384.492c80.24 0 145.55 65.097 145.55 145.121v335.938zM69.71 706.242v48.337H486.94v199.01h48.445v-199.01h417.23v-48.336H69.71z m315.973-462.198L296.66 475.17h41.656l24.41-67.09h86.114l25.92 67.09h44l-94.843-231.126h-38.233z m-10.885 130.517l21.932-58.469c3.125-8.406 5.82-16.974 8.11-25.543 2.883 8.623 6.44 18.377 10.535 29.208l20.693 54.804H374.8z m311.958-110.309c-9.539-8.137-21.179-13.795-34.597-16.92-9.538-2.21-22.849-3.288-40.632-3.288h-81.37V475.17h84.982c13.795 0 26.161-1.346 36.832-3.933 10.858-2.642 20.288-6.63 28.048-11.802 7.787-5.174 14.981-12.341 21.448-21.286 6.466-8.891 11.801-20.208 15.87-33.68 4.069-13.364 6.117-28.83 6.117-46.074 0-20.209-3.045-38.53-9.026-54.32-6.063-16.113-15.386-29.477-27.672-39.823z m-8.892 134.828c-3.61 10.94-8.703 19.777-15.089 26.136-4.39 4.365-10.454 7.814-17.997 10.293-7.815 2.533-18.915 3.826-32.98 3.826h-42.546V279.879h41.791c16.813 0 28.992 1.401 36.266 4.15 9.862 3.826 18.402 11.586 25.435 23.064 7.114 11.586 10.724 28.722 10.724 50.87 0 16.113-1.885 29.962-5.604 41.117z\"  ></path></symbol><symbol id=\"icon-guanliyuan\" viewBox=\"0 0 1024 1024\"><path d=\"M460.204 720.592c0-62.552-0.1-121.888-0.1-196.796 60.412-19.156 126.072-41.456 210.312-62.692 1.852-5.676 3.704-11.54 5.5-17.62 5.94-1.8 11.636-5.044 17.076-9.688 4.756-4.18 9.148-9.98 13.04-17.22 3.86-7.384 6.452-17.328 7.604-29.648 1.296-9.436 1.044-17.328-0.396-23.848-1.516-6.52-3.46-11.816-5.804-15.996a32.34 32.34 0 0 0-9.94-11.42 576.8 576.8 0 0 0-4.504-71.58c-2.984-20.644-8.14-42.292-15.272-64.916-7.204-22.768-18.584-43.412-34.224-62.324-6.556-8.252-15.74-16.5-27.38-24.712-11.744-8.252-25.072-15.632-40.02-22.156-14.988-6.376-31.16-11.564-48.164-15.384a236.544 236.544 0 0 0-51.696-5.764c-13.796 0-28.024 1.008-42.76 3.06a188.756 188.756 0 0 0-44.02 11.924c-14.736 5.908-29.072 14.048-43.264 24.352-14.084 10.34-26.748 23.74-38.256 40.204-12.516 17.112-21.94 36.528-28.28 58.288-6.324 21.76-10.588 42.076-13.04 61.024a434.212 434.212 0 0 0-3.62 67.112c-5.42 5.908-9.276 12.068-11.62 18.552-2.448 5.908-4.124 12.932-5.044 21.18-0.9 8.216 0.524 17.436 4.144 27.416 2.952 9.94 6.592 17.688 10.716 22.984 4.268 5.296 8.14 9.332 11.744 12.284 4.14 2.956 8.392 5.044 12.536 6.268a1329.172 1329.172 0 0 0 9.044 28.316 291.612 291.612 0 0 0 9.94 22.48c3.496 7.384 7.748 13.04 12.536 17.22 10.196 8.252 19.504 16.356 27.9 24.356 8.392 7.852 13.184 18.656 14.336 32.204 0.648 9.476 0.9 17.936 0.9 25.58 0 7.744-1.424 14.984-4.52 22.116-2.972 7.024-7.744 14.156-14.336 21.184-6.592 7.132-16.156 14.48-28.8 22.12-16.14 9.936-34.764 17.72-55.8 22.98a733.42 733.42 0 0 0-60.7 18.084c-19.504 6.772-36.564 15.852-51.28 27.452-14.588 11.416-23.504 28.132-26.48 49.892-5.944 38.224-7.368 69.492-4.016 93.7 3.244 24.1 7.888 38.472 13.832 43.3 3.62 2.952 12.392 5.908 26.1 8.86 13.816 2.812 30.6 5.764 50.36 8.72 19.884 2.952 41.84 5.764 66.12 8.468 24.428 2.6 48.884 4.944 73.364 7.024a2266.12 2266.12 0 0 0 71.564 4.9c22.984 1.116 43.3 1.728 60.7 1.728 17.324 0 37.864-0.608 61.636-1.728a2679.32 2679.32 0 0 0 34.32-2.004c-63.096-51.34-111.988-127.088-111.988-229.836z\" fill=\"\" ></path><path d=\"M497.296 723.108c0-52.96-0.084-103.204-0.084-166.628 60.164-19.076 126.396-41.844 217.264-62.488 90.876 20.644 157.104 43.416 217.268 62.488 0 63.424-0.084 113.668-0.084 166.628 0 149.216-121.712 231.296-217.18 256.892-95.472-25.592-217.184-107.68-217.184-256.892z\" fill=\"\" ></path></symbol><symbol id=\"icon-cloud-permissions\" viewBox=\"0 0 1024 1024\"><path d=\"M512.063 88.535l-331.544 105.332c-12.185 3.959-20.838 15.212-20.838 28.486 0 0.044 0 0.088 0 0.132l1.697 414.040 0.388 4.724c0.639 2.871 14.206 72.143 82.021 138.879 52.142 51.419 180.041 118.616 234.604 147.291 8.58 4.526 14.982 7.847 18.637 9.9l6.234 3.373c2.019 1.121 4.427 1.781 6.989 1.781 2.42 0 4.702-0.588 6.712-1.63l9.003-4.572c31.89-15.652 194.132-96.689 254.414-156.102 67.899-66.788 81.466-136.039 82.043-138.921l2.095-418.751c0-0.047 0-0.102 0-0.157 0-13.274-8.653-24.528-20.627-28.426l-331.828-105.38zM808.552 633.519c-2.557 10.173-17.161 60.356-66.621 109.062-47.773 47.145-177.285 114.478-224.368 138.187-1.909 0.987-4.166 1.566-6.559 1.566-2.512 0-4.876-0.638-6.937-1.761l0.002 0.038c-47.983-25.207-175.368-92.111-221.854-137.988-49.596-48.768-64.096-98.879-66.653-109.062l-1.519-384.639c0-0.011 0-0.024 0-0.037 0-5.877 3.822-10.861 9.116-12.602l279.946-88.953c2.677-0.88 5.758-1.388 8.957-1.388s6.281 0.508 9.167 1.447l279.643 88.867c5.431 1.743 9.293 6.749 9.293 12.657 0 0.003 0 0.006 0 0.009l-1.593 384.608-0.020-0.011zM517.092 288.241c0.109 0 0.238-0.001 0.367-0.001 33.592 0 64.019 13.55 86.114 35.482 21.966 21.653 35.579 51.745 35.579 85.016 0 33.524-13.82 63.82-36.074 85.501-18.616 18.085-42.994 30.277-70.117 33.561l13.694 48.16 50.592 0.116c0.074-0.001 0.162-0.001 0.249-0.001 16.689 0 30.225 13.502 30.28 30.179-0.035 8.385-3.507 15.947-9.078 21.36-5.499 5.412-13.098 8.775-21.483 8.775-0.048 0-0.096 0-0.143 0l-50.585-0.116-0.23 84.243c-0.035 8.379-3.506 15.941-9.076 21.354-5.501 5.419-13.105 8.787-21.496 8.787-0.044 0-0.087 0-0.131 0-0.068 0.001-0.157 0.001-0.246 0.001-8.3 0-15.82-3.34-21.288-8.75-5.539-5.477-8.974-13.076-8.987-21.477l0.743-195.242c-26.819-6.777-49.464-21.727-65.747-42.004-12.176-10.831-25.812-40.956-25.812-74.266 0-33.531 13.818-63.835 36.070-85.528 22.129-21.753 52.465-35.166 85.935-35.166 0.298 0 0.596 0.001 0.893 0.003l-0.023 0.013zM590.679 407.758c0.001-0.122 0.001-0.267 0.001-0.411 0-19.505-8.020-37.138-20.942-49.779-28.278-27.745-73.515-27.834-101.887-0.211-13.094 12.644-21.225 30.355-21.225 49.965 0 0.014 0 0.028 0 0.042 0 0.067 0 0.149 0 0.231 0 19.588 8.015 37.304 20.945 50.047 12.963 12.856 30.802 20.795 50.496 20.795 0.11 0 0.22 0 0.331-0.001 38.683 0.135 72.178-32.823 72.272-70.728l0.009 0.051z\"  ></path></symbol><symbol id=\"icon-shouye\" viewBox=\"0 0 1024 1024\"><path d=\"M834.8 450L574 180.1c-16.2-16.7-37.9-26-61-26-23.2 0-44.9 9.2-61 26L191.3 450c-26.9 27.9-23.5 51.9-19 62 3.2 7.2 13.9 26.7 44.7 26.7h38.2v207.6c0 47.2 34 91.6 82.4 91.6h111V618.2c0-23.5-3.6-36.7 20.6-36.7h87.7c24.2 0 20.6 13.1 20.6 36.7V838h110.9c48.3 0 82.4-44.4 82.4-91.6V538.8H809c30.8 0 41.5-19.6 44.7-26.7 4.4-10.1 7.9-34.2-18.9-62.1zM809 496H727.8v250.4c0 23.5-15.3 48.7-39.5 48.7h-68V618.2c0-47.2-15.2-79.5-63.5-79.5h-87.7c-48.3 0-63.5 32.3-63.5 79.5v177h-68c-24.2 0-39.5-25.2-39.5-48.7V496.1H216.9c-0.8 0-1.4-2.9-2-3 1.5-2.6 4.1-9.1 8.4-13.5L484 209.8c7.7-8.1 18.7-13 29.4-12.9 10.7-0.1 21 4.9 28.8 12.9l260.6 269.7c4.3 4.4 6.8 11 8.3 13.5-0.6 0.1-1.3 3-2.1 3z\"  ></path></symbol><symbol id=\"icon-shijiebei\" viewBox=\"0 0 1024 1024\"><path d=\"M561.850182 76.148364c-82.850909-42.728727-164.770909-37.003636-245.76 17.221818C235.101091 147.642182 210.245818 220.765091 241.570909 312.785455c5.585455-14.801455 17.501091-32.861091 35.933091-54.225455 27.601455-32.069818 104.727273-51.758545 135.307636-51.758545 13.777455 0 38.632727-3.165091 41.425455-14.801455 2.746182-11.636364 35.188364-82.664727 82.850909-98.629818 14.708364-4.933818 22.993455-10.705455 24.808727-17.221818z m21.364363-41.425455l33.69891 17.408-10.24 36.538182c-7.214545 25.879273-26.763636 39.424-54.923637 48.872727-19.223273 6.423273-48.64 49.710545-52.270545 65.163637-9.867636 41.518545-43.52 50.641455-86.714182 50.641454-27.508364 0-86.481455 19.828364-100.072727 35.607273-15.127273 17.547636-24.296727 31.371636-27.554909 40.122182l-45.614546 122.274909-42.030545-123.578182c-38.074182-111.988364-5.771636-207.127273 92.718545-273.082182C385.117091-8.843636 485.096727-15.825455 583.214545 34.769455zM735.604364 94.999273c-17.687273-8.471273-34.722909-6.330182-50.967273 6.376727-24.389818 19.083636-68.747636 82.618182-64.325818 131.397818 4.468364 48.733091 21.224727 95.325091 39.936 101.701818 18.664727 6.330182 31.045818 4.189091 44.311272-6.376727 8.843636-7.074909 34.769455-24.669091 77.591273-52.968727 16.290909-7.074909 22.202182-29.649455 17.733818-67.816727-4.421818-38.167273-25.832727-75.543273-64.232727-112.314182z m-2.048 269.498182c-26.251636 20.945455-55.249455 25.274182-88.296728 14.056727-42.589091-14.522182-65.070545-73.309091-71.261091-141.591273-5.445818-59.624727 38.260364-138.100364 81.92-172.218182 29.975273-23.458909 65.815273-27.927273 99.74691-11.729454l6.74909 3.258182 5.352728 5.12c45.707636 43.659636 72.564364 90.577455 78.382545 140.567272 6.283636 54.365091-3.584 94.952727-41.099636 113.850182-39.796364 26.251636-64.325818 43.008-71.493818 48.686546z\"  ></path><path d=\"M485.655273 364.450909c-1.536-21.969455-26.903273-25.413818-76.148364-10.286545-49.198545 15.080727-73.821091 41.192727-73.821091 78.242909 9.262545 31.604364 29.230545 57.669818 59.997091 78.242909a215.831273 215.831273 0 0 1 71.493818 78.289454c43.054545 89.227636 76.893091 139.357091 101.469091 150.341819 36.957091 16.477091 58.321455 16.477091 99.234909 16.47709 2.327273 0-96.814545-30.580364-85.364363-168.866909 3.072-37.096727 16.942545-66.606545 41.518545-88.576 41.518545-41.192727 59.997091-65.908364 55.389091-74.146909-4.654545-8.238545-19.223273-1.396364-43.845818 20.619637-30.72 32.954182-61.486545 42.542545-92.253091 28.811636-30.766545-13.730909-49.989818-50.129455-57.716364-109.149091zM562.269091 431.104c10.612364 4.747636 20.992 1.489455 42.356364-21.038545 15.36-13.730909 28.299636-23.272727 40.587636-29.044364 26.577455-12.520727 57.623273-10.286545 74.798545 20.433454 21.876364 39.098182 3.351273 63.906909-64.977454 131.584-15.36 13.730909-24.017455 32.116364-26.112 57.716364-4.096 49.012364 7.633455 81.221818 28.997818 102.865455a88.203636 88.203636 0 0 0 25.693091 18.152727l2.141091 0.930909c0.837818 0.325818 0.837818 0.325818 3.909818 1.861818 2.513455 0.744727 2.513455 0.744727 17.221818 15.778909l3.025455 5.306182 3.909818 12.381091-2.420364 24.389818-13.498182 18.897455-6.795636 4.747636c-17.966545 6.562909-17.966545 6.562909-23.226182 6.237091-57.576727 0-78.661818-2.885818-118.178909-20.526545-38.912-17.361455-76.101818-72.517818-123.531636-170.868364a169.285818 169.285818 0 0 0-56.366546-61.579636c-39.563636-26.484364-66.373818-61.44-78.801454-103.84291l-1.861818-6.423272V432.407273c0-60.090182 39.703273-102.167273 106.728727-122.740364 74.100364-22.760727 130.606545-15.36 136.098909 49.943273 5.864727 43.845818 17.501091 65.768727 30.301091 71.493818z\"  ></path><path d=\"M361.006545 669.323636c19.502545 72.285091 17.035636 124.881455-7.354181 157.789091-12.101818 16.290909-69.445818 71.447273-98.722909 73.914182-30.161455 2.56-44.776727 9.960727-43.892364 22.202182 21.969455 31.185455 110.917818 48.453818 266.984727 51.758545 234.077091 4.933818 274.292364-56.692364 263.307637-54.225454-41.518545 9.309091-86.621091 8.517818-135.307637-2.466909-48.779636-11.496727-84.107636-34.536727-106.077091-69.026909-21.922909-34.536727-68.235636-94.487273-138.938182-179.944728z m35.84-29.696c71.912727 86.900364 119.109818 148.014545 142.429091 184.645819 14.987636 23.645091 39.889455 39.842909 76.986182 48.593454 42.216727 9.541818 80.337455 10.24 114.874182 2.466909 38.493091-8.657455 67.723636 28.066909 55.528727 62.696727-3.630545 10.286545-9.681455 18.059636-17.594182 25.274182-11.822545 10.752-29.044364 20.619636-50.920727 28.997818-53.76 20.48-133.259636 31.511273-241.105454 29.230546-173.474909-3.677091-269.498182-22.295273-304.081455-71.540364l-7.400727-10.519272-0.930909-12.8c-3.630545-49.012364 33.000727-67.490909 86.388363-72.005819 6.749091-0.605091 53.154909-38.958545 65.256728-55.342545 14.149818-19.037091 15.918545-57.949091-0.232728-117.899636l-55.808-206.894546 136.610909 165.096727z\"  ></path></symbol><symbol id=\"icon-jiaose\" viewBox=\"0 0 1024 1024\"><path d=\"M815.3 459.8h-47.1c1.7 1.9 3.4 3.8 5 5.7 19.6 24.8 26.2 53.5 19.1 82.7l-72 298.1c10 3.2 20.2 5 30.5 5h44.4c49.1 0 98.3-39 109.9-87l52.6-217.5c11.6-48.1-52.1-87-142.4-87z m109.1 107.9l-41.9 177.1c-8.9 38.1-36.5 79.1-75.4 79.1h-35.3c-8.1 0-10.6 1.4-18.2-1.1l-0.3 1.2v-1.3c0.1 0 0.2 0.1 0.3 0.1l60.9-249.9c5.4-23.2 17.1-55.8 1.5-75.5-1.2-1.6-2.6-4.4-3.9-6l20.1 1.4c76.8 4.6 101.2 36.7 92.2 74.9zM774.2 416.3c60.1 0 108.8-48.7 108.8-108.8 0-60-48.7-108.7-108.8-108.7-60.1 0-108.7 48.7-108.7 108.7 0 60.1 48.6 108.8 108.7 108.8z m0-190c45.7 0 82.8 37 82.8 82.7s-37.1 82.7-82.8 82.7c-45.7 0-82.7-37.1-82.7-82.7 0-45.7 37-82.7 82.7-82.7z\"  ></path><path d=\"M568.2 421.9h-112c-123.7 0-211.5 53.4-196.1 119.3L330 839.4c15.4 65.9 82.5 119.3 149.7 119.3h61c67.3 0 134.7-53.4 150.6-119.3l72-298.2c16-65.9-71.4-119.3-195.1-119.3zM724 564.5L663.2 816c-13.4 55.5-44.9 108.2-127.1 108.2h-51.4c-79.8 0-113.3-52.6-126.3-108.2l-59-251.5c-16-61.8 27.7-108.2 165.4-108.2h94.5c138.8 0 185.2 48.3 164.7 108.2zM511.8 362.2c82.3 0 149.1-66.7 149.1-149.1 0-82.3-66.7-149.1-149.1-149.1-82.3 0-149.1 66.7-149.1 149.1 0 82.4 66.7 149.1 149.1 149.1z m0-262.4c62.6 0 113.4 50.8 113.4 113.4 0 62.6-50.8 113.4-113.4 113.4-62.6 0-113.4-50.8-113.4-113.4 0-62.7 50.8-113.4 113.4-113.4zM358.2 307.5c0-60-48.7-108.7-108.7-108.7-60.1 0-108.8 48.7-108.8 108.7 0 60.1 48.6 108.8 108.8 108.8 60 0 108.7-48.7 108.7-108.8z m-108.8 82.8c-45.7 0-82.7-37.1-82.7-82.7 0-45.7 37-82.7 82.7-82.7s82.7 37 82.7 82.7c0 45.6-37 82.7-82.7 82.7z\"  ></path><path d=\"M116.8 764.3c11.2 48 60.2 87 109.3 87h44.4c10.3 0 20.5-1.8 30.5-5v-0.1L231.1 548c-6.8-29.2-0.1-57.7 19.6-82.5 1.6-2.1 3.3-3.8 4.9-5.7h-46.8c-80.8 0-140.6 31.2-144.1 72.3v7.7c0.2 2.3 0.6 4.6 1.1 7l51 217.5zM190 492.9l20.1-1.4c-1.3 1.5-2.7 4.3-3.9 6-15.6 19.7-3.9 52.3 1.5 75.5l60.9 249.9c0.1 0 0.2-0.1 0.3-0.1v1.3l-0.3-1.2c-7.7 2.4-10.1 1.1-18.2 1.1H215c-39 0-66.5-40.9-75.4-79.1L97.7 567.7c-9-38.2 15.4-70.3 92.3-74.8z\"  ></path><path d=\"M268.9 822.7c-0.1 0-0.2 0.1-0.3 0.1l0.3 1.2v-1.3zM753.2 824.1l0.3-1.2c-0.1 0-0.2-0.1-0.3-0.1v1.3z\"  ></path><path d=\"M641.5 634.5L492.8 782.9c-10.1 10.1-26.8 10.1-36.9 0l-73.8-73.7c-10.1-10.4-10.1-26.8 0-36.9 10.4-10.4 26.8-10.4 37.2-0.3l55.5 55.5 129.8-129.8c10-10 26.8-10 36.9 0 10 10 10 26.7 0 36.8z m0 0\"  ></path></symbol><symbol id=\"icon-guanliyuan1\" viewBox=\"0 0 1024 1024\"><path d=\"M721.3 338.6c0-110.8-90.2-201-201-201s-201 90.2-201 201c0 72.5 38.6 136.1 96.2 171.5-10.4 3.3-20.6 7.1-30.7 11.3-42.1 17.8-79.9 43.3-112.4 75.8s-58 70.3-75.8 112.4c-18.4 43.6-27.8 89.9-27.8 137.6h46c0-169.6 138-307.6 307.6-307.6 109.9-1.2 198.9-90.9 198.9-201z m-356 0c0-85.5 69.5-155 155-155s155 69.5 155 155-69.5 155-155 155-155-69.5-155-155zM765.5 682v-50.2H843v-46h-77.4v-58H843v-46H719.5v204.8c-40.7 13.8-69.6 52.3-69.6 97.2 0 56.6 46 102.6 102.6 102.6 56.6 0 102.6-46 102.6-102.6 0.1-52.2-39.1-95.4-89.6-101.8z m-13 158.4c-31.2 0-56.6-25.4-56.6-56.6 0-30 23.4-54.8 53.3-56.6 1.1-0.1 2.2-0.1 3.3-0.1 31.2 0 56.6 25.4 56.6 56.6s-25.3 56.7-56.6 56.7z\"  ></path></symbol><symbol id=\"icon-tiku\" viewBox=\"0 0 1024 1024\"><path d=\"M806.912 366.08H312.32c-42.496 0-77.312-33.792-77.312-74.752S269.824 216.064 312.32 216.064h441.856c9.728 0 17.92-8.192 17.92-17.92s-8.192-17.92-17.92-17.92H312.32c-62.464 0-112.64 49.664-112.64 110.592v485.376c0 65.536 50.688 119.296 112.64 119.296h13.824c9.728 0 17.92-8.192 17.92-17.92s-8.192-17.92-17.92-17.92H312.32c-42.496 0-77.312-37.376-77.312-83.456V371.2c19.968 18.432 47.616 30.208 77.312 30.208H788.992v458.24H463.872c-9.728 0-17.92 8.192-17.92 17.92s8.192 17.92 17.92 17.92h343.04c9.728 0 17.92-8.192 17.92-17.92V384c-0.512-10.24-8.192-17.92-17.92-17.92z\" fill=\"#969696\" ></path></symbol><symbol id=\"icon-xiaochengxu\" viewBox=\"0 0 1024 1024\"><path d=\"M512 128c-211.7 0-384 172.3-384 384s172.3 384 384 384 384-172.3 384-384-172.3-384-384-384z m0 717.4c-183.8 0-333.4-149.6-333.4-333.4S328.2 178.6 512 178.6 845.4 328.2 845.4 512 695.8 845.4 512 845.4z\"  ></path><path d=\"M702.9 334.9c-24.9-14.2-54.6-17.1-81.6-8.1-26.4 8.8-48 28.3-59.5 53.6L418 618.9l-1.6 3c-5.6 12.9-16.5 22.9-29.8 27.4-13.5 4.5-27.9 3.1-40.5-4.1-19.8-11.3-29.4-35.4-22.7-57.2 7.1-23 28.3-26.5 75.1-29l3.5-0.2c14-0.8 24.7-12.7 23.9-26.6-0.8-14-12.7-24.6-26.6-23.9l-3.4 0.2c-45.7 2.4-102.6 5.5-120.8 64.7-13.6 44.3 5.7 93.1 46 116 15.4 8.8 32.7 13.3 50 13.3 10.7 0 21.3-1.7 31.6-5.1 26.4-8.8 48-28.3 59.5-53.6L606 405.1l1.6-3c5.6-12.9 16.5-22.9 29.8-27.4 13.5-4.5 27.9-3.1 40.5 4.1 19.8 11.3 29.4 35.4 22.7 57.2-7.1 23.2-28.5 26.6-75.7 29.1l-2.8 0.1c-14 0.7-24.7 12.6-24 26.6 0.7 14 12.6 24.8 26.6 24l2.8-0.1c46-2.4 103.2-5.3 121.5-64.7 13.5-44.4-5.8-93.2-46.1-116.1z\"  ></path></symbol></svg>';var script=function(){var scripts=document.getElementsByTagName(\"script\");return scripts[scripts.length-1]}();var shouldInjectCss=script.getAttribute(\"data-injectcss\");var ready=function(fn){if(document.addEventListener){if(~[\"complete\",\"loaded\",\"interactive\"].indexOf(document.readyState)){setTimeout(fn,0)}else{var loadFn=function(){document.removeEventListener(\"DOMContentLoaded\",loadFn,false);fn()};document.addEventListener(\"DOMContentLoaded\",loadFn,false)}}else if(document.attachEvent){IEContentLoaded(window,fn)}function IEContentLoaded(w,fn){var d=w.document,done=false,init=function(){if(!done){done=true;fn()}};var polling=function(){try{d.documentElement.doScroll(\"left\")}catch(e){setTimeout(polling,50);return}init()};polling();d.onreadystatechange=function(){if(d.readyState==\"complete\"){d.onreadystatechange=null;init()}}}};var before=function(el,target){target.parentNode.insertBefore(el,target)};var prepend=function(el,target){if(target.firstChild){before(el,target.firstChild)}else{target.appendChild(el)}};function appendSvg(){var div,svg;div=document.createElement(\"div\");div.innerHTML=svgSprite;svgSprite=null;svg=div.getElementsByTagName(\"svg\")[0];if(svg){svg.setAttribute(\"aria-hidden\",\"true\");svg.style.position=\"absolute\";svg.style.width=0;svg.style.height=0;svg.style.overflow=\"hidden\";prepend(svg,document.body)}}if(shouldInjectCss&&!window.__iconfont__svg__cssinject__){window.__iconfont__svg__cssinject__=true;try{document.write(\"<style>.svgfont {display: inline-block;width: 1em;height: 1em;fill: currentColor;vertical-align: -0.1em;font-size:16px;}</style>\")}catch(e){console&&console.log(e)}}ready(appendSvg)})(window)\n"
  },
  {
    "path": "src/components/File/Upload.vue",
    "content": "<template>\n    <div class=\"upload-container\">\n        <el-button :style=\"{background:color,borderColor:color}\"\n                   icon=\"el-icon-upload\"\n                   size=\"mini\"\n                   type=\"primary\"\n                   @click=\" dialogVisible=true\">上传文件</el-button>\n\n\n        <el-dialog\n            custom-class=\"upload-dialog__body\"\n            width=\"450px\"\n            title=\"插入图片\"\n            :visible.sync=\"dialogVisible\"\n            append-to-body>\n\n            <el-tabs v-model=\"activeName\">\n                <el-tab-pane label=\"本地上传\" name=\"localhost\">\n                    <div class=\"upload-content\">\n                        <span class=\"text-muted\">只能上传{{ ext }}文件，且大小不超过{{ size | renderSize }}，且宽高 {{ width ? width + 'px' : \"不限\" }} * {{ height ? height + 'px' : \"不限\" }}</span>\n                        <br>\n                        <div class=\"widget-upload\" @dragenter=\"onDrag\" @dragover=\"onDrag\" @drop=\"onDrop\">\n                            <input type=\"file\" ref=\"upload\" name=\"file\" class=\"widget-upload__file\" @change=\"onChange\">\n                            <el-input\n                                class=\"widget-upload__text\"\n                                size=\"medium\"\n                                placeholder=\"文件拖拽到这里\"\n                                v-model=\"fileName\">\n                            </el-input>\n                            <el-button size=\"medium\">选择文件</el-button>\n                        </div>\n                    </div>\n                </el-tab-pane>\n                <el-tab-pane label=\"远程地址获取\" name=\"network\">\n                    <div class=\"upload-content\">\n                        <span class=\"text-muted\">只能上传{{ ext }}文件，且大小不超过{{ size | renderSize }}，且宽高 {{ width ? width + 'px' : \"不限\" }} * {{ height ? height + 'px' : \"不限\" }}</span>\n                        <br>\n                        <div class=\"widget-upload\">\n                            <el-input\n                                size=\"medium\"\n                                placeholder=\"请输入文件所在网址\"\n                                v-model=\"fileUrl\">\n                            </el-input>\n                        </div>\n                    </div>\n                </el-tab-pane>\n            </el-tabs>\n\n            <div style=\"text-align: right;padding-top: 40px;\">\n                <el-button size=\"medium\" @click=\"dialogVisible = false\">取 消</el-button>\n                <el-button size=\"medium\" type=\"primary\" @click=\"handleSubmit\" :loading=\"uploadLoading\">插入</el-button>\n            </div>\n\n        </el-dialog>\n\n    </div>\n</template>\n\n<script>\nimport { qiuNiuUpToken, createFile } from \"../../api/file/upload\";\nimport { renderSize } from \"../../filtres/index\";\n\nexport default {\n    name: \"Upload\",\n    props: {\n        height: {\n            type: Number\n        },\n        width: {\n            type: Number\n        },\n        ext: {\n            type: String\n        },\n        size: {\n            type: Number\n        },\n        color: {\n            type: String,\n            default: \"#1890ff\"\n        }\n    },\n    data() {\n        return {\n            activeName: \"localhost\",\n            file: null,\n            fileName: \"\",\n            filePath: \"\",\n            filePathUrl: \"\",\n            fileUrl: \"\",\n            dialogVisible: false,\n            uploadLoading: false\n        };\n    },\n    methods: {\n        onDrag(e) {\n            e.stopPropagation();\n            e.preventDefault();\n        },\n        onDrop(e) {\n            e.stopPropagation();\n            e.preventDefault();\n            const data = e.dataTransfer.files;\n            // 获取文件对象\n            if (data.length < 1) {\n                return false; // 检测是否有文件拖拽到页面\n            }\n            this.file = data[0];\n            this.fileName = data[0].name;\n        },\n        onChange(e) {\n            const data = e.target.files;\n            // 获取文件对象\n            if (data.length < 1) {\n                return false; // 检测是否有文件拖拽到页面\n            }\n            this.file = data[0];\n            this.fileName = data[0].name;\n            e.target.value = \"\";\n        },\n        onReset() {\n            this.activeName = \"localhost\";\n            this.file = null;\n            this.fileName = \"\";\n            this.filePath = \"\";\n            this.filePathUrl = \"\";\n            this.fileUrl = \"\";\n            this.dialogVisible = false;\n            this.uploadLoading = false;\n        },\n        handleSubmit() {\n            if (this.activeName === \"network\") {\n                if (!this.fileUrl) {\n                    this.$message.error(\"请输入文件网络地址\");\n                    return;\n                }\n                this.$emit(\"on-select\", this.fileUrl, this.fileUrl);\n                this.onReset();\n                return;\n            }\n            if (this.file === null) {\n                this.$message.error(\"请先选择文件\");\n                return;\n            }\n            // 检查文件\n            let isVerify = this.beforeUpload(this.file);\n            if (isVerify === false) {\n                return;\n            }\n            isVerify\n                .then(() => {\n                    this.uploadLoading = true;\n                    qiuNiuUpToken()\n                        .then(response => {\n                            if (response.code > 0) {\n                                this.$message.error(\"出现未知问题，刷新页面\");\n                                return;\n                            }\n                            const url = response.data.uploadUrl;\n                            const formData = new FormData();\n                            formData.append(\"token\", response.data.upToken);\n                            formData.append(\"file\", this.file);\n                            createFile(url, formData)\n                                .then(response => {\n                                    this.uploadLoading = false;\n                                    if (response.key || response.data.key) {\n                                        const filePath =\n                                            response.key || response.data.key;\n                                        let _URL =\n                                            window.URL || window.webkitURL;\n                                        const filePathUrl = _URL.createObjectURL(\n                                            this.file\n                                        );\n                                        this.$emit(\n                                            \"on-select\",\n                                            filePath,\n                                            filePathUrl\n                                        );\n                                        this.onReset();\n                                        return;\n                                    }\n                                    this.$message.error(\"上传出错\");\n                                })\n                                .catch(() => {\n                                    this.uploadLoading = false;\n                                    this.$message.error(\"上传出错\");\n                                });\n                        })\n                        .catch(() => {\n                            this.uploadLoading = false;\n                            this.$message.error(\"出现未知问题，刷新页面\");\n                        });\n                })\n                .catch(() => {});\n        },\n        beforeUpload(file) {\n            const name = file.name ? file.name : \"\";\n            let ext = name\n                ? name.substr(name.lastIndexOf(\".\") + 1, name.length)\n                : true;\n            // 转成小写\n            ext = ext.toLowerCase();\n            let isExt = false;\n            // 如果有坚持文件后缀的配置\n            if (this.ext) {\n                isExt = this.ext.indexOf(ext) >= 0;\n                if (!isExt) {\n                    this.$message.error(\"文件只能为 \" + this.ext + \" 格式!\");\n                    return false;\n                }\n            }\n            let isSize = false;\n            if (this.size) {\n                let sizeStr = this.size;\n                isSize = sizeStr > 0 && file.size > sizeStr;\n                if (isSize) {\n                    this.$message.error(\n                        \"上传文件不能超过 \" + renderSize(sizeStr) + \"!\"\n                    );\n                    return false;\n                }\n            }\n            const _this = this;\n            if (_this.width || _this.height) {\n                return new Promise(function(resolve, reject) {\n                    let width = _this.width;\n                    let height = _this.height;\n                    let _URL = window.URL || window.webkitURL;\n                    let img = new Image();\n                    img.src = _URL.createObjectURL(file);\n                    img.onload = function() {\n                        let valid =\n                            (!width || img.width === width) &&\n                            (!height || img.height === height);\n                        if (valid) {\n                            resolve();\n                        } else {\n                            let messageStr = \"\";\n                            if (width && !height) {\n                                messageStr = width;\n                            }\n                            if (height && !width) {\n                                messageStr = height;\n                            }\n                            if (height && width) {\n                                messageStr = width + \"*\" + height;\n                            }\n                            _this.$message.error(\n                                \"上传尺寸必须是 \" + messageStr + \" px!\"\n                            );\n                            reject();\n                        }\n                    };\n                });\n            }\n            return new Promise(function(resolve) {\n                resolve();\n            });\n        }\n    },\n    computed: {},\n    watch: {}\n};\n</script>\n\n<style type=\"text/scss\" lang=\"scss\">\n.upload-dialog__body {\n    .el-dialog__header {\n        background-color: #f3f3f3;\n        border-top-left-radius: 6px;\n        border-top-right-radius: 6px;\n    }\n    .el-dialog__body {\n        padding: 12px 20px !important;\n    }\n}\n.upload-content {\n    padding-top: 15px;\n    .widget-upload {\n        position: relative;\n    }\n    .widget-upload__text {\n        width: 66.66%;\n        padding-right: 15px;\n        .el-input__inner {\n            border: 1px solid #ccc;\n            background-color: #eee;\n        }\n    }\n    .widget-upload {\n        padding-top: 5px;\n        .widget-upload__file {\n            position: absolute;\n            opacity: 0;\n            width: 85%;\n            height: 100%;\n            z-index: 10;\n            cursor: pointer;\n        }\n    }\n}\n</style>\n"
  },
  {
    "path": "src/components/File/Upload1.vue",
    "content": "<template>\n    <div class=\"upload-container\">\n        <el-button :style=\"{background:color,borderColor:color}\"\n                   icon=\"el-icon-upload\"\n                   size=\"mini\"\n                   type=\"primary\"\n                   @click=\" dialogVisible=true\">上传文件</el-button>\n\n\n        <el-dialog\n            width=\"400px\"\n            title=\"插入图片\"\n            :visible.sync=\"dialogVisible\"\n            append-to-body>\n\n            <el-upload\n                style=\"margin-bottom: 10px;\"\n                ref=\"upload\"\n                drag\n                :show-file-list=\"false\"\n                :on-success=\"handleSuccess\"\n                :on-change=\"handleChange\"\n                :before-remove=\"beforeRemove\"\n                :before-upload=\"beforeUpload\"\n                :action=\"uploadUrl\"\n                :multiple=\"false\"\n                :auto-upload=\"false\"\n                :data=\"uploadData\">\n                <i class=\"el-icon-upload\"></i>\n                <div class=\"el-upload__text\">将文件拖到此处，或<em>点击选取</em></div>\n                <div class=\"el-upload__tip\" slot=\"tip\">\n                    只能上传{{ cheekConfig.ext }}文件，且大小不超过{{ cheekConfig.size | renderSize }}，且宽高 {{ cheekConfig.width ? cheekConfig.width + 'px' : \"不限\" }} * {{ cheekConfig.height ? cheekConfig.height + 'px' : \"不限\" }}\n                </div>\n                <div class=\"el-upload__tip\" slot=\"tip\">\n                    <el-input\n                        placeholder=\"请上传文件\"\n                        v-model=\"fileName\"\n                        :disabled=\"true\">\n                    </el-input>\n                </div>\n            </el-upload>\n\n            <div style=\"text-align: right\">\n                <el-button @click=\"dialogVisible = false\">取 消</el-button>\n                <el-button type=\"primary\" @click=\"handleSubmit\">插入</el-button>\n            </div>\n\n        </el-dialog>\n\n    </div>\n</template>\n\n<script>\nimport { qiuniuUpToken } from \"../../api/file/upload\";\nimport { renderSize } from \"../../filtres/index\";\n\nexport default {\n    name: \"Upload\",\n    props: {\n        cheekConfig: {\n            type: Object,\n            default: function() {\n                return {\n                    size: 6000, // 文件大小\n                    ext: \"jpg,png,gif\", // 文件后缀\n                    width: \"\", // 限制宽度\n                    height: \"\" // 限制高度\n                };\n            }\n        },\n        color: {\n            type: String,\n            default: \"#1890ff\"\n        }\n    },\n    data() {\n        return {\n            uploadUrl: \"\",\n            uploadData: {\n                token: \"\"\n            },\n            fileName: \"\",\n            filePath: \"\",\n            filePathUrl: \"\",\n            isSelect: false, // 是否选择过文件\n            dialogVisible: false\n        };\n    },\n    methods: {\n        handleSubmit() {\n            this.isSelect = true;\n            qiuniuUpToken()\n                .then(response => {\n                    if (response.code > 0) {\n                        this.$message.error(\"出现未知问题，刷新页面\");\n                        return;\n                    }\n                    this.uploadUrl = response.data.upload_url;\n                    this.uploadData.token = response.data.up_token;\n                    this.$refs.upload.submit();\n                })\n                .catch(() => {\n                    this.isSelect = false;\n                    this.$message.error(\"出现未知问题，刷新页面\");\n                });\n        },\n        handleSuccess(response, file) {\n            this.isSelect = false;\n            console.log(\"上传成功\");\n            if (response.key) {\n                const filePath = response.key;\n                let _URL = window.URL || window.webkitURL;\n                const filePathUrl = _URL.createObjectURL(file);\n                this.$emit(\"on-select\", filePath, filePathUrl);\n                this.dialogVisible = false;\n                return;\n            }\n            this.$message.error(\"上传文件报错\");\n        },\n        handleChange(file) {\n            this.fileName = file.name ? file.name : \"\";\n            return false;\n        },\n        beforeRemove() {\n            return !this.isSelect;\n        },\n        beforeUpload(file) {\n            const name = file.name ? file.name : \"\";\n            const ext = name\n                ? name.substr(name.lastIndexOf(\".\") + 1, name.length)\n                : true;\n            let isExt = false;\n            // 如果有坚持文件后缀的配置\n            if (this.cheekConfig.ext) {\n                isExt = this.cheekConfig.ext.indexOf(ext) >= 0;\n                console.log(isExt, 111);\n                if (!isExt) {\n                    this.$message.error(\n                        \"文件只能为 \" + this.cheekConfig.ext + \" 格式!\"\n                    );\n                }\n            }\n            let isSize = false;\n            if (this.cheekConfig.size) {\n                let sizeStr = this.cheekConfig.size;\n                isSize = sizeStr > 0 && file.size > sizeStr;\n                if (!isSize) {\n                    this.$message.error(\n                        \"上传文件不能超过 \" + renderSize(sizeStr) + \"!\"\n                    );\n                }\n            }\n            const _this = this;\n            let isWidthHeight = false;\n            if (_this.cheekConfig.width || _this.cheekConfig.height) {\n                isWidthHeight = new Promise(function(resolve, reject) {\n                    let width = _this.cheekConfig.width;\n                    let height = _this.cheekConfig.height;\n                    let _URL = window.URL || window.webkitURL;\n                    let img = new Image();\n                    img.src = _URL.createObjectURL(file);\n                    img.onload = function() {\n                        let valid =\n                            (!width || img.width === width) &&\n                            (!height || img.height === height);\n                        if (valid) {\n                            resolve();\n                        } else {\n                            let messageStr = \"\";\n                            if (width && !height) {\n                                messageStr = width;\n                            }\n                            if (height && !width) {\n                                messageStr = height;\n                            }\n                            if (height && width) {\n                                messageStr = width + \"*\" + height;\n                            }\n                            _this.$message.error(\n                                \"上传尺寸必须是 \" + messageStr + \" px!\"\n                            );\n                            reject();\n                        }\n                    };\n                });\n            }\n            return isExt && isSize && isWidthHeight;\n        }\n    },\n    computed: {},\n    watch: {}\n};\n</script>\n\n<style type=\"text/scss\" lang=\"scss\">\n</style>\n"
  },
  {
    "path": "src/components/HelloWorld.vue",
    "content": "<template>\n  <div class=\"hello\">\n    <h1>{{ msg }}</h1>\n    <p>\n      For guide and recipes on how to configure / customize this project,<br>\n      check out the\n      <a href=\"https://cli.vuejs.org\" target=\"_blank\">vue-cli documentation</a>.\n    </p>\n    <h3>Installed CLI Plugins</h3>\n    <ul>\n      <li><a href=\"https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-babel\" target=\"_blank\">babel</a></li>\n      <li><a href=\"https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-eslint\" target=\"_blank\">eslint</a></li>\n      <li><a href=\"https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-unit-jest\" target=\"_blank\">unit-jest</a></li>\n    </ul>\n    <h3>Essential Links</h3>\n    <ul>\n      <li><a href=\"https://vuejs.org\" target=\"_blank\">Core Docs</a></li>\n      <li><a href=\"https://forum.vuejs.org\" target=\"_blank\">Forum</a></li>\n      <li><a href=\"https://chat.vuejs.org\" target=\"_blank\">Community Chat</a></li>\n      <li><a href=\"https://twitter.com/vuejs\" target=\"_blank\">Twitter</a></li>\n    </ul>\n    <h3>Ecosystem</h3>\n    <ul>\n      <li><a href=\"https://router.vuejs.org\" target=\"_blank\">vue-router</a></li>\n      <li><a href=\"https://vuex.vuejs.org\" target=\"_blank\">vuex</a></li>\n      <li><a href=\"https://github.com/vuejs/vue-devtools#vue-devtools\" target=\"_blank\">vue-devtools</a></li>\n      <li><a href=\"https://vue-loader.vuejs.org\" target=\"_blank\">vue-loader</a></li>\n      <li><a href=\"https://github.com/vuejs/awesome-vue\" target=\"_blank\">awesome-vue</a></li>\n    </ul>\n  </div>\n</template>\n\n<script>\nexport default {\n  name: \"HelloWorld\",\n  props: {\n    msg: String\n  }\n};\n</script>\n\n<!-- Add \"scoped\" attribute to limit CSS to this component only -->\n<style scoped lang=\"scss\">\nh3 {\n  margin: 40px 0 0;\n}\nul {\n  list-style-type: none;\n  padding: 0;\n}\nli {\n  display: inline-block;\n  margin: 0 10px;\n}\na {\n  color: #42b983;\n}\n</style>\n"
  },
  {
    "path": "src/components/Tinymce/index.vue",
    "content": "<template>\n  <div :class=\"{fullscreen:fullscreen}\" class=\"tinymce-container editor-container\">\n    <textarea :id=\"tinymceId\" class=\"tinymce-textarea\"/>\n  </div>\n</template>\n\n<script>\nimport plugins from \"./plugins\";\nimport toolbar from \"./toolbar\";\nimport { qiuNiuUpToken, createFile } from \"../../api/file/upload\";\n\nexport default {\n    name: \"Tinymce\",\n    props: {\n        id: {\n            type: String,\n            default: function() {\n                return (\n                    \"vue-tinymce-\" +\n                    +new Date() +\n                    ((Math.random() * 1000).toFixed(0) + \"\")\n                );\n            }\n        },\n        value: {\n            type: String,\n            default: \"\"\n        },\n        toolbar: {\n            type: Array,\n            required: false,\n            default() {\n                return [];\n            }\n        },\n        menubar: {\n            type: String,\n            default: \"file edit insert view format table\"\n        },\n        height: {\n            type: Number,\n            required: false,\n            default: 360\n        }\n    },\n    data() {\n        return {\n            hasChange: false,\n            hasInit: false,\n            tinymceId: this.id,\n            fullscreen: false\n        };\n    },\n    computed: {},\n    watch: {\n        value(val) {\n            if (!this.hasChange && this.hasInit) {\n                this.$nextTick(() =>\n                    window.tinymce.get(this.tinymceId).setContent(val || \"\")\n                );\n            }\n        }\n    },\n    mounted() {\n        this.initTinymce();\n    },\n    activated() {\n        this.initTinymce();\n    },\n    deactivated() {\n        this.destroyTinymce();\n    },\n    destroyed() {\n        this.destroyTinymce();\n    },\n    methods: {\n        initTinymce() {\n            const _this = this;\n            window.tinymce.init({\n                language: \"zh_CN\",\n                selector: `#${this.tinymceId}`,\n                height: this.height,\n                body_class: \"panel-body \",\n                object_resizing: false,\n                toolbar: this.toolbar.length > 0 ? this.toolbar : toolbar,\n                menubar: this.menubar,\n                plugins: plugins,\n                end_container_on_empty_block: true,\n                powerpaste_word_import: \"clean\",\n                code_dialog_height: 450,\n                code_dialog_width: 1000,\n                advlist_bullet_styles: \"square\",\n                advlist_number_styles: \"default\",\n                imagetools_cors_hosts: [\"www.tinymce.com\", \"codepen.io\"],\n                default_link_target: \"_blank\",\n                link_title: false,\n                nonbreaking_force_tab: true, // inserting nonbreaking space &nbsp; need Nonbreaking Space Plugin\n                init_instance_callback: editor => {\n                    if (_this.value) {\n                        editor.setContent(_this.value);\n                    }\n                    _this.hasInit = true;\n                    editor.on(\"NodeChange Change KeyUp SetContent\", () => {\n                        this.hasChange = true;\n                        this.$emit(\"input\", editor.getContent());\n                    });\n                },\n                setup(editor) {\n                    editor.on(\"FullscreenStateChanged\", e => {\n                        _this.fullscreen = e.state;\n                    });\n                },\n                // 整合七牛上传\n                // images_dataimg_filter(img) {\n                //   setTimeout(() => {\n                //     const $image = $(img);\n                //     $image.removeAttr('width');\n                //     $image.removeAttr('height');\n                //     if ($image[0].height && $image[0].width) {\n                //       $image.attr('data-wscntype', 'image');\n                //       $image.attr('data-wscnh', $image[0].height);\n                //       $image.attr('data-wscnw', $image[0].width);\n                //       $image.addClass('wscnph');\n                //     }\n                //   }, 0);\n                //   return img\n                // },\n                images_upload_handler(blobInfo, success, failure, progress) {\n                    progress(0);\n                    qiuNiuUpToken()\n                        .then(response => {\n                            if (response.code > 0) {\n                                failure(\"出现未知问题，刷新页面\");\n                                return;\n                            }\n                            const url = response.upload_url;\n                            const formData = new FormData();\n                            formData.append(\"token\", response.up_token);\n                            formData.append(\"file\", blobInfo.blob());\n                            const domain = response.domain;\n                            createFile(url, formData)\n                                .then(response => {\n                                    if (response.key) {\n                                        success(domain + \"/\" + response.key);\n                                        progress(100);\n                                        return;\n                                    }\n                                    failure(\"上传出错\");\n                                })\n                                .catch(() => {\n                                    failure(\"上传出错\");\n                                });\n                        })\n                        .catch(err => {\n                            failure(\"出现未知问题，刷新页面\");\n                            console.log(err);\n                        });\n                }\n            });\n        },\n        destroyTinymce() {\n            if (window.tinymce.get(this.tinymceId)) {\n                window.tinymce.get(this.tinymceId).destroy();\n            }\n        },\n        setContent(value) {\n            window.tinymce.get(this.tinymceId).setContent(value);\n        },\n        getContent() {\n            window.tinymce.get(this.tinymceId).getContent();\n        }\n    }\n};\n</script>\n\n<style scoped>\n.tinymce-container {\n    position: relative;\n}\n.tinymce-container >>> .mce-fullscreen {\n    z-index: 10000;\n}\n.tinymce-textarea {\n    visibility: hidden;\n    z-index: -1;\n}\n.editor-custom-btn-container {\n    position: absolute;\n    right: 4px;\n    top: 4px;\n    /*z-index: 2005;*/\n}\n.fullscreen .editor-custom-btn-container {\n    z-index: 10000;\n    position: fixed;\n}\n.editor-upload-btn {\n    display: inline-block;\n}\n</style>\n"
  },
  {
    "path": "src/components/Tinymce/plugins.js",
    "content": "// Any plugins you want to use has to be imported\n// Detail plugins list see https://www.tinymce.com/docs/plugins/\n// Custom builds see https://www.tinymce.com/download/custom-builds/\n\nconst plugins = [\n    \"advlist anchor autolink autosave code codesample colorpicker colorpicker contextmenu directionality emoticons fullscreen hr image imagetools importcss insertdatetime link lists media nonbreaking noneditable pagebreak paste preview print save searchreplace spellchecker tabfocus table template textcolor textpattern visualblocks visualchars wordcount\"\n];\n\nexport default plugins;\n"
  },
  {
    "path": "src/components/Tinymce/toolbar.js",
    "content": "// Here is a list of the toolbar\n// Detail list see https://www.tinymce.com/docs/advanced/editor-control-identifiers/#toolbarcontrols\n\nconst toolbar = [\n    \"searchreplace bold italic underline strikethrough alignleft aligncenter alignright outdent indent  blockquote undo redo removeformat subscript superscript code codesample\",\n    \"hr bullist numlist link image charmap preview anchor pagebreak insertdatetime media table emoticons forecolor backcolor fullscreen\"\n];\n\nexport default toolbar;\n"
  },
  {
    "path": "src/components/common/FileResource.vue",
    "content": "<template>\n    <div style=\"padding: 10px;\">\n        <el-button-group>\n            <el-button type=\"primary\" size=\"small\" icon=\"el-icon-refresh\" @click=\"refresh\"></el-button>\n            <el-button type=\"primary\" size=\"small\" @click=\"isIcon = !isIcon\">{{ isIcon ? '列表' : '图标' }}</el-button>\n            <span></span>\n            <el-button size=\"small\" type=\"primary\" icon=\"el-icon-plus\" @click=\"addTag\">新建分组</el-button>\n            <el-popover\n                placement=\"top\"\n                title=\"上传\"\n                width=\"100%\"\n                v-model=\"uploadVisible\"\n                trigger=\"click\">\n                <el-upload\n                    style=\"max-width: 300px;overflow-x: hidden;\"\n                    class=\"upload-demo\"\n                    ref=\"upload\"\n                    :action=\"uploadUrl\"\n                    :on-success=\"handleSuccess\"\n                    :on-error=\"handleError\"\n                    :data=\"uploadData\"\n                    :name=\"uploadData.uploadName\"\n                    :accept=\"uploadData.exts\"\n                    :on-change=\"beforeChange\"\n                    :auto-upload=\"false\">\n                    <el-button slot=\"trigger\" size=\"small\" type=\"primary\" icon=\"el-icon-upload2\">选取文件</el-button>\n                    <el-button style=\"margin-left: 10px;\" size=\"small\" type=\"success\" @click=\"submitUpload\">上传到服务器\n                    </el-button>\n                    <div slot=\"tip\" class=\"el-upload__tip\">只能上传{{ uploadData.exts }}文件，且不超过{{ uploadData.size | renderSize }}</div>\n                </el-upload>\n                <el-button slot=\"reference\" size=\"small\" type=\"primary\" icon=\"el-icon-upload\">上传文件</el-button>\n            </el-popover>\n        </el-button-group>\n        <ul class=\"breadcrumb-list\">\n            <li>\n                <a v-if=\"query.tagId === ''\" href=\"javascript:;\" class=\"none-path\" title=\"全部分组\">全部分组</a>\n                <a v-else=\"\" href=\"javascript:;\" title=\"全部分组\" @click=\"tagClick('')\">全部分组</a>\n\n                <template v-for=\"item in tagLists\">\n                    <span :key=\"item.id\">\n                        <span class=\"shufenge\">|</span>\n                        <a v-if=\"query.tagId !== item.id\" href=\"javascript:;\"\n                           @click=\"tagClick(item)\">{{ item.tag }}</a>\n                        <a v-else=\"\" href=\"javascript:;\" class=\"none-path\" :title=\"item.tag\">{{ item.tag }}</a>\n                    </span>\n                </template>\n            </li>\n        </ul>\n\n        <div v-if=\"isIcon\" class=\"icon-lists\">\n            <template v-for=\"(item, index) in lists\">\n                <a href=\"#\" :key=\"item.id\" class=\"item\" :class=\"item.select ? 'select' : ''\" :style=\"item.edit ? 'width: 150px;' : ''\" @click=\"selectFile(item, index)\">\n                    <div class=\"app-icon fileicon-small-pic\">\n                        <img :src=\"item.url\"/>\n                    </div>\n                    <span class=\"title\">\n                        <span>\n                            {{ item.filename }}\n                        </span>\n                    </span>\n                    <span v-if=\"isAll\" class=\"circle-check\">\n                        <span class=\"el-icon-circle-check\"></span>\n                    </span>\n                    <!--大图-->\n                    <span class=\"big-img\">\n                        <img :src=\"item.url\"/>\n                    </span>\n                </a>\n            </template>\n            <template  v-if=\"lists.length <= 0\">\n                <div class=\"icon-list-empty\">\n                    暂无数据\n                </div>\n            </template>\n        </div>\n\n\n        <el-table\n            v-else=\"\"\n            ref=\"uploadTable\"\n            highlight-current-row\n            :data=\"lists\"\n            style=\"width: 100%; height: 100%;\">\n            <el-table-column\n                v-if=\"isAll\"\n                width=\"55\">\n                <template slot-scope=\"scope\">\n                    <el-checkbox v-model=\"scope.row.select\" @click=\"selectFile(scope.row, scope.$index)\"></el-checkbox>\n                </template>\n            </el-table-column>\n            <el-table-column\n                prop=\"filename\"\n                label=\"文件名\">\n                <template slot-scope=\"scope\">\n                    <a class=\"file-type-icon fileicon-small-pic\"\n                       :href=\"scope.row.url\"\n                       title=\"点击查看\"\n                       target=\"_blank\"></a>\n                    <span class=\"filename\"\n                          :title=\"scope.row.filename\"\n                          @click=\"selectFile(scope.row, scope.$index)\">{{ scope.row.filename }}</span>\n                </template>\n            </el-table-column>\n            <el-table-column\n                label=\"大小\"\n                width=\"130\">\n                <template slot-scope=\"scope\">\n                    <span v-if=\"!scope.row.size || scope.row.size == 0\">-</span>\n                    <span v-else=\"\">{{ scope.row.size | renderSize}}</span>\n                </template>\n            </el-table-column>\n            <el-table-column\n                label=\"修改日期\"\n                width=\"180\">\n                <template slot-scope=\"scope\">\n                    <span v-if=\"scope.row.create_time\">{{ scope.row.create_time | parseTime('{y}-{m}-{d} {h}:{i}') }}</span>\n                    <span v-else=\"\">-</span>\n                </template>\n            </el-table-column>\n        </el-table>\n\n        <el-pagination\n            :page-size=\"query.size\"\n            @current-change=\"handleCurrentChange\"\n            layout=\"prev, pager, next\"\n            :total=\"total\">\n        </el-pagination>\n\n        <div style=\"margin-top: 20px\">\n            <el-button @click=\"allOK()\" type=\"primary\">确认选择</el-button>\n        </div>\n\n    </div>\n</template>\n\n<!--上传资源-->\n<script>\nimport { fileResourceList, fileResourceAdd } from \"../../api/file/fileResource\";\nimport {\n    fileResourceTagList,\n    fileResourceTagAdd\n} from \"../../api/file/fileResourceTag\";\nimport { renderSize } from \"../../filtres/index\";\nexport default {\n    name: \"file-resource\",\n    data() {\n        return {\n            uploadVisible: false,\n            isIcon: true, // 是否以图标形式展示（列表 or 图标）\n            total: 0,\n            lists: [],\n            tagLists: [],\n            uploadData: {\n                type: 0, // 0 表示图片类型\n                tagId: \"\",\n                uploadName: \"file\",\n                token: \"\",\n                exts: \"jpg,png,gif\",\n                size: 0\n            },\n            query: {\n                type: 0, // 0 表示图片类型\n                tagId: \"\",\n                size: 15,\n                page: 0\n            },\n            selectList: []\n        };\n    },\n    props: {\n        uploadUrl: String, // 上传的地址\n        uploadName: String, // 上传的文件key名称\n        token: String, // 上传的授权码\n        isAll: false, // 是否可多选\n        size: Number, // 允许上传的文件大小\n        fileExt: String, // 允许上传的文件后缀\n        limit: Number // 每页显示多少\n    },\n    mounted() {},\n    methods: {\n        // 刷新\n        refresh() {\n            this.getList();\n            this.getTagList();\n        },\n        // 新建分组\n        addTag() {\n            this.$prompt(\"请输入分组名称\", \"提示\", {\n                confirmButtonText: \"确定\",\n                cancelButtonText: \"取消\"\n            })\n                .then(({ value }) => {\n                    let data = {\n                        tag: value\n                    };\n                    fileResourceTagAdd(data)\n                        .then(response => {\n                            if (response.code) {\n                                this.$message({\n                                    message: response.message,\n                                    type: \"error\"\n                                });\n                                return;\n                            }\n                            this.tagLists.push(response.data);\n                        })\n                        .catch(() => {});\n                })\n                .catch(() => {\n                    // 取消\n                });\n        },\n        // 点击某个分组\n        tagClick(item) {\n            let tagId = \"\";\n            if (item && item.id) {\n                tagId = item.id;\n            }\n            this.query.tagId = tagId;\n            this.uploadData.tagId = tagId;\n            this.getList();\n        },\n        /**\n         * 选择某个文件\n         * @param row\n         */\n        selectFile(row, index) {\n            if (row.edit) {\n                return false;\n            }\n            // 选择单个文件，并且文件后缀\n            let exts = this.uploadData.exts.split(\",\");\n            if (exts.indexOf(row.ext) < 0) {\n                // 不在允许后缀中\n                this.$message.error(\n                    \"文件只能为 \" + this.uploadData.exts + \"格式!\"\n                );\n                return;\n            }\n            row.select = !row.select;\n            // 如果不为全选模式\n            if (!this.isAll) {\n                this.selectList = [row];\n                this.resourceSelect();\n                return;\n            }\n            this.lists.splice(index, 1, row);\n        },\n        allOK() {\n            this.selectList = [];\n            if (this.lists.length > 0) {\n                let lists = this.lists;\n                let exts = this.uploadData.exts.split(\",\");\n                for (let i in lists) {\n                    let item = lists[i];\n                    if (item.select && item.select === true) {\n                        // 如果在扩展列表中\n                        if (\n                            item.ext &&\n                            exts.length > 0 &&\n                            exts.indexOf(item.ext) !== -1\n                        ) {\n                            this.selectList.push(item);\n                        }\n                    }\n                }\n            }\n            this.resourceSelect();\n        },\n        // 获取文件列表\n        getList() {\n            fileResourceList(this.query)\n                .then(response => {\n                    this.lists = response.data || [];\n                    this.total = response.total || 0;\n                })\n                .catch(() => {});\n        },\n        // 获取分组列表\n        getTagList() {\n            fileResourceTagList(this.query)\n                .then(response => {\n                    this.tagLists = response || [];\n                })\n                .catch(() => {});\n        },\n        // 对外的选择文件后的方法\n        resourceSelect() {\n            this.$emit(\"resourceSelect\", this.selectList);\n        },\n        submitUpload() {\n            this.$refs.upload.submit();\n        },\n        /**\n         * 分页的点击\n         * @param val\n         */\n        handleCurrentChange(val) {\n            this.query.page = val;\n            this.getList();\n        },\n        handleSuccess(response, file, fileList) {\n            if (response.code) {\n                this.$message({\n                    message: response.message,\n                    type: \"error\"\n                });\n                return;\n            }\n            for (let i = 0; i < fileList.length; i++) {\n                let tempFile = fileList[i];\n                if (file.uid === tempFile.uid) {\n                    fileList.splice(i, 1);\n                }\n            }\n            if (fileList.length <= 0) {\n                // 上传完成\n                this.uploadVisible = false;\n            }\n            let data = response;\n            data.tag_id = this.uploadData.tagId;\n            data.type = this.uploadData.type;\n            data.size = this.uploadData.size;\n            let fileName = file.name;\n            data.filename = fileName;\n            data.size = file.size;\n            let extIndex = fileName.lastIndexOf(\".\") + 1;\n            data.ext = fileName.substr(extIndex, fileName.length);\n            fileResourceAdd(data)\n                .then(response => {\n                    if (response.code) {\n                        this.$message({\n                            message: response.message,\n                            type: \"error\"\n                        });\n                        return;\n                    }\n                    this.lists.unshift(response);\n                })\n                .catch(() => {});\n        },\n        handleError(err, file, fileList) {\n            this.$message({\n                message: err.message,\n                type: \"error\"\n            });\n            for (let i = 0; i < fileList.length; i++) {\n                let tempFile = fileList[i];\n                if (file.uid === tempFile.uid) {\n                    fileList.splice(i, 1);\n                }\n            }\n        },\n        // 选择文件时\n        beforeChange(file, fileList) {\n            let name = file.name ? file.name : \"\";\n            let ext = name\n                ? name.substr(name.lastIndexOf(\".\") + 1, name.length)\n                : true;\n            let isExt = this.uploadData.exts.indexOf(ext) < 0;\n            if (isExt) {\n                this.$message.error(\n                    \"文件只能为 \" + this.uploadData.exts + \" 格式!\"\n                );\n            }\n            let isSize =\n                this.uploadData.size > 0 && file.size > this.uploadData.size;\n            let sizeStr = this.uploadData.size;\n            if (isSize) {\n                this.$message.error(\n                    \"上传文件不能超过 \" + renderSize(sizeStr) + \"!\"\n                );\n            }\n            if (isExt || isSize) {\n                for (let i = 0; i < fileList.length; i++) {\n                    let tempFile = fileList[i];\n                    if (file.uid === tempFile.uid) {\n                        fileList.splice(i, 1);\n                    }\n                }\n            }\n            return false;\n        }\n    },\n    created() {\n        // 获取列表\n        this.getList();\n        // 获取分组列表\n        this.getTagList();\n        if (this.size) {\n            this.uploadData.size = this.size;\n        }\n        if (this.limit) {\n            this.query.size = this.limit;\n        }\n        if (\n            this.fileExt &&\n            this.fileExt !== \"\" &&\n            this.fileExt !== \"undefined\"\n        ) {\n            this.uploadData.exts = this.fileExt;\n        }\n        if (\n            this.uploadName &&\n            this.uploadName !== \"\" &&\n            this.uploadName !== \"undefined\"\n        ) {\n            this.uploadData.uploadName = this.uploadName;\n        }\n        if (this.token && this.token !== \"\" && this.token !== \"undefined\") {\n            this.uploadData.token = this.token;\n        }\n    },\n    computed: {}\n};\n</script>\n\n<style type=\"text/scss\" lang=\"scss\">\n.edit-input {\n    margin-left: 10px;\n    width: 200px;\n}\n.new-dir-bth {\n    position: absolute;\n    right: 15px;\n    top: 10px;\n}\n.breadcrumb-list {\n    padding-left: 5px;\n    background: #fff;\n    height: 16px;\n    line-height: 16px;\n    overflow: hidden;\n    white-space: nowrap;\n    margin-top: 10px;\n    li {\n        float: left;\n        list-style: none;\n        margin: 0;\n        padding: 0;\n    }\n    a {\n        color: #4287ed;\n        text-decoration: none;\n        outline: 0;\n        display: inline-block;\n        max-width: 105px;\n        white-space: nowrap;\n        text-overflow: ellipsis;\n        overflow: hidden;\n        float: left;\n        &:hover {\n            text-decoration: underline;\n        }\n    }\n    .none-path {\n        color: #666666;\n        display: inline-block;\n        max-width: 200px;\n        white-space: nowrap;\n        text-overflow: ellipsis;\n        overflow: hidden;\n    }\n    .shufenge {\n        float: left;\n        padding: 0 3px;\n        color: #c5d8f3;\n    }\n}\n.filename {\n    cursor: pointer;\n    float: left;\n    margin-left: 10px;\n    max-width: 80%;\n    white-space: nowrap;\n    text-overflow: ellipsis;\n    overflow: hidden;\n    line-height: 26px;\n    color: #666666;\n    &:hover {\n        text-decoration: none;\n        color: #3b8cff;\n    }\n    &:active {\n        text-decoration: none;\n        color: #3b8cff;\n    }\n}\n.file-type-icon {\n    float: left;\n    height: 26px;\n    width: 26px;\n    background-image: url(\"../../assets/image/file_type_icon.png\");\n    &.fileicon-small-pic {\n        background-position: -596px -306px;\n    }\n}\n\n/*icon图片列表展示*/\n@import \"../../styles/mixin\";\n.icon-lists {\n    @include size(100%, 100%);\n    margin-bottom: 10px;\n    display: flex;\n    flex-direction: row;\n    flex-wrap: wrap;\n    & .icon-list-empty {\n        text-align: center;\n        width: 100%;\n        height: 60px;\n        line-height: 60px;\n        color: #909399;\n        border: 1px solid #cccccc;\n        border-left: none;\n        border-right: none;\n        margin-bottom: 10px;\n        margin-top: 10px;\n        opacity: 0.5;\n    }\n    & .item {\n        @include f_left;\n        background-color: #fff;\n        text-align: center;\n        width: 100px;\n        height: 120px;\n        float: left;\n        margin: 4px 0 0 6px;\n        border: 1px solid #fff;\n        position: relative;\n        border-radius: 4px;\n        &:hover {\n            background-color: #f1f5fa;\n        }\n        & .app-icon {\n            border-radius: 0.154rem;\n            position: relative;\n            margin: auto 0;\n            width: 100%;\n            height: 100%;\n            line-height: 120px;\n            overflow: hidden;\n            background-color: #f5f5f5;\n            &.fileicon-small-pic {\n                img {\n                    /*如果是图片则展示图片*/\n                    max-width: 100%;\n                    max-height: 100%;\n                    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAAAAAByaaZbAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAAAmJLR0QA/4ePzL8AAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfiBR0RGx0qH34fAAAAP0lEQVRIx2P8zwABD6C0AgE+EwOJYFQDMYDlAZShAKUJ8QehH4aDBsbR/DAoNIzmh8GhYTQ/DA4No/lhcGgAANgjFQHywHtPAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE4LTA1LTI5VDE2OjU5OjE4KzA4OjAwfq61WQAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxOC0wNS0yOVQxNzoyNzoyOSswODowMM1v/QcAAAAASUVORK5CYII=);\n                    background-size: 24px;\n                    transition: all 0.2s;\n                    vertical-align: middle;\n                }\n            }\n        }\n        & .title {\n            position: absolute;\n            bottom: 2px;\n            left: 0;\n            display: block;\n            /*截断多出来的字*/\n            @include text-overflow;\n            font-size: 12px;\n            color: #4a4a4a;\n            text-align: center;\n            margin: auto 0;\n            width: 100%;\n            & .edit-input {\n                padding: 0 0 0 5px;\n                height: 24px;\n                vertical-align: middle;\n                border: 1px solid rgba(58, 140, 255, 0.3);\n                background: #fff;\n                border-radius: 2px;\n                width: 78px;\n                margin: 0;\n            }\n            & .edit-btn {\n                width: 20px;\n                height: 20px;\n                display: inline-block;\n                vertical-align: middle;\n                cursor: pointer;\n                position: relative;\n                margin: 0 0 0 4px;\n                border: 1px solid rgba(58, 140, 255, 0.3);\n                border-radius: 2px;\n                line-height: 20px;\n                color: #3b8cff;\n                font-size: 16px;\n                font-weight: 600;\n            }\n        }\n        & .circle-check {\n            display: none;\n            position: absolute;\n            top: 5px;\n            left: 5px;\n            height: 21px;\n            width: 21px;\n            cursor: pointer;\n            font-size: 18px;\n            color: #b5d3ff;\n        }\n        &:hover .circle-check {\n            display: block;\n        }\n        &.select {\n            background-color: #f1f5fa;\n        }\n        &.select .circle-check {\n            color: #3b8cff;\n            display: block;\n        }\n        &:hover .big-img {\n            display: block;\n        }\n        & .big-img {\n            animation: bounce-in 0.5s;\n            position: absolute;\n            right: -40px;\n            top: 100px;\n            width: 200px;\n            height: 200px;\n            display: none;\n            z-index: 99;\n            & img {\n                max-width: 100%;\n                max-height: 100%;\n            }\n        }\n    }\n}\n@keyframes bounce-in {\n    0% {\n        opacity: 0;\n    }\n    20% {\n        opacity: 0;\n    }\n    100% {\n        opacity: 1;\n    }\n}\n</style>\n"
  },
  {
    "path": "src/components/common/IconSvg.vue",
    "content": "<template>\n    <svg v-if=\"iconClass\" class=\"svg-icon\" aria-hidden=\"true\">\n        <use :xlink:href=\"iconName\"></use>\n    </svg>\n</template>\n\n<script>\nexport default {\n    name: \"icon-svg\",\n    props: {\n        iconClass: {\n            type: String,\n            required: true\n        }\n    },\n    computed: {\n        iconName() {\n            return `#icon-${this.iconClass}`;\n        }\n    }\n};\n</script>\n\n<style>\n</style>\n"
  },
  {
    "path": "src/config/app.js",
    "content": "/**\n * 配置编译环境和线上环境之间的切换\n *\n * baseUrl: 域名地址\n * routerMode: 路由模式\n * imgBaseUrl: 图片所在域名地址\n *\n */\nlet BASE_URL = process.env.VUE_APP_API_BASE;\n// let ROUTER_MODE = \"history\";\nlet ROUTER_MODE = \"\";\nlet IMG_BASE_URL = BASE_URL;\nexport { BASE_URL, ROUTER_MODE, IMG_BASE_URL };\n"
  },
  {
    "path": "src/constants/.gitignore",
    "content": ""
  },
  {
    "path": "src/element.js",
    "content": "import Vue from \"vue\";\n// import \"element-ui/lib/theme-chalk/index.css\";\n\nimport ELEMENT from \"element-ui\";\nimport {\n    Pagination,\n    Dialog,\n    Autocomplete,\n    Dropdown,\n    DropdownMenu,\n    DropdownItem,\n    Menu,\n    Submenu,\n    MenuItem,\n    MenuItemGroup,\n    Input,\n    InputNumber,\n    Radio,\n    RadioGroup,\n    RadioButton,\n    Checkbox,\n    CheckboxButton,\n    CheckboxGroup,\n    Switch,\n    Select,\n    Option,\n    OptionGroup,\n    Button,\n    ButtonGroup,\n    Table,\n    TableColumn,\n    DatePicker,\n    TimeSelect,\n    TimePicker,\n    Popover,\n    Tooltip,\n    Breadcrumb,\n    BreadcrumbItem,\n    Form,\n    FormItem,\n    Tabs,\n    TabPane,\n    Tag,\n    Tree,\n    Alert,\n    Slider,\n    Icon,\n    Row,\n    Col,\n    Upload,\n    Progress,\n    Badge,\n    Card,\n    Rate,\n    Steps,\n    Step,\n    Carousel,\n    CarouselItem,\n    Collapse,\n    CollapseItem,\n    Cascader,\n    ColorPicker,\n    Transfer,\n    Container,\n    Header,\n    Aside,\n    Main,\n    Footer,\n    Loading,\n    MessageBox,\n    Message,\n    Notification\n} from \"element-ui\";\n\nif (process.env.NODE_ENV === \"development\") {\n    require(\"element-ui/lib/theme-chalk/index.css\");\n    Vue.use(ELEMENT);\n\n    Vue.use(Pagination);\n    Vue.use(Dialog);\n    Vue.use(Autocomplete);\n    Vue.use(Dropdown);\n    Vue.use(DropdownMenu);\n    Vue.use(DropdownItem);\n    Vue.use(Menu);\n    Vue.use(Submenu);\n    Vue.use(MenuItem);\n    Vue.use(MenuItemGroup);\n    Vue.use(Input);\n    Vue.use(InputNumber);\n    Vue.use(Radio);\n    Vue.use(RadioGroup);\n    Vue.use(RadioButton);\n    Vue.use(Checkbox);\n    Vue.use(CheckboxButton);\n    Vue.use(CheckboxGroup);\n    Vue.use(Switch);\n    Vue.use(Select);\n    Vue.use(Option);\n    Vue.use(OptionGroup);\n    Vue.use(Button);\n    Vue.use(ButtonGroup);\n    Vue.use(Table);\n    Vue.use(TableColumn);\n    Vue.use(DatePicker);\n    Vue.use(TimeSelect);\n    Vue.use(TimePicker);\n    Vue.use(Popover);\n    Vue.use(Tooltip);\n    Vue.use(Breadcrumb);\n    Vue.use(BreadcrumbItem);\n    Vue.use(Form);\n    Vue.use(FormItem);\n    Vue.use(Tabs);\n    Vue.use(TabPane);\n    Vue.use(Tag);\n    Vue.use(Tree);\n    Vue.use(Alert);\n    Vue.use(Slider);\n    Vue.use(Icon);\n    Vue.use(Row);\n    Vue.use(Col);\n    Vue.use(Upload);\n    Vue.use(Progress);\n    Vue.use(Badge);\n    Vue.use(Card);\n    Vue.use(Rate);\n    Vue.use(Steps);\n    Vue.use(Step);\n    Vue.use(Carousel);\n    Vue.use(CarouselItem);\n    Vue.use(Collapse);\n    Vue.use(CollapseItem);\n    Vue.use(Cascader);\n    Vue.use(ColorPicker);\n    Vue.use(Transfer);\n    Vue.use(Container);\n    Vue.use(Header);\n    Vue.use(Aside);\n    Vue.use(Main);\n    Vue.use(Footer);\n\n    Vue.use(Loading.directive);\n\n    Vue.prototype.$loading = Loading.service;\n    Vue.prototype.$msgbox = MessageBox;\n    Vue.prototype.$alert = MessageBox.alert;\n    Vue.prototype.$confirm = MessageBox.confirm;\n    Vue.prototype.$prompt = MessageBox.prompt;\n    Vue.prototype.$notify = Notification;\n    Vue.prototype.$message = Message;\n}\n"
  },
  {
    "path": "src/filtres/index.js",
    "content": "function pluralize(time, label) {\n    if (time === 1) {\n        return time + label;\n    }\n    return time + label + \"s\";\n}\nexport function timeAgo(time) {\n    const between = Date.now() / 1000 - Number(time);\n    if (between < 3600) {\n        return pluralize(~~(between / 60), \" minute\");\n    } else if (between < 86400) {\n        return pluralize(~~(between / 3600), \" hour\");\n    } else {\n        return pluralize(~~(between / 86400), \" day\");\n    }\n}\n\n/**\n * @return {string}\n */\nexport function formatDateStr(date_str, fmt) {\n    let date = new Date(date_str);\n    if (isNaN(date.getDate())) {\n        return \"\";\n    }\n    const o = {\n        \"M+\": date.getMonth() + 1, //月份\n        \"d+\": date.getDate(), //日\n        \"h+\": date.getHours(), //小时\n        \"m+\": date.getMinutes(), //分\n        \"s+\": date.getSeconds(), //秒\n        \"q+\": Math.floor((date.getMonth() + 3) / 3), //季度\n        S: date.getMilliseconds() //毫秒\n    };\n    if (/(y+)/.test(fmt))\n        fmt = fmt.replace(\n            RegExp.$1,\n            (date.getFullYear() + \"\").substr(4 - RegExp.$1.length)\n        );\n    for (let k in o)\n        if (new RegExp(\"(\" + k + \")\").test(fmt))\n            fmt = fmt.replace(\n                RegExp.$1,\n                RegExp.$1.length === 1\n                    ? o[k]\n                    : (\"00\" + o[k]).substr((\"\" + o[k]).length)\n            );\n    return fmt;\n}\n\nexport function parseTime(time, cFormat) {\n    if (arguments.length === 0) {\n        return null;\n    }\n\n    if ((time + \"\").length === 10) {\n        time = +time * 1000;\n    }\n\n    const format = cFormat || \"{y}-{m}-{d} {h}:{i}:{s}\";\n    let date;\n    if (typeof time === \"object\") {\n        date = time;\n    } else {\n        date = new Date(parseInt(time));\n    }\n    const formatObj = {\n        y: date.getFullYear(),\n        m: date.getMonth() + 1,\n        d: date.getDate(),\n        h: date.getHours(),\n        i: date.getMinutes(),\n        s: date.getSeconds(),\n        a: date.getDay()\n    };\n    const timeStr = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {\n        let value = formatObj[key];\n        if (key === \"a\")\n            return [\"一\", \"二\", \"三\", \"四\", \"五\", \"六\", \"日\"][value - 1];\n        if (result.length > 0 && value < 10) {\n            value = \"0\" + value;\n        }\n        return value || 0;\n    });\n    return timeStr;\n}\n\nexport function formatTime(time, option) {\n    time = +time * 1000;\n    const d = new Date(time);\n    const now = Date.now();\n\n    const diff = (now - d) / 1000;\n\n    if (diff < 30) {\n        return \"刚刚\";\n    } else if (diff < 3600) {\n        // less 1 hour\n        return Math.ceil(diff / 60) + \"分钟前\";\n    } else if (diff < 3600 * 24) {\n        return Math.ceil(diff / 3600) + \"小时前\";\n    } else if (diff < 3600 * 24 * 2) {\n        return \"1天前\";\n    }\n    if (option) {\n        return parseTime(time, option);\n    } else {\n        return (\n            d.getMonth() +\n            1 +\n            \"月\" +\n            d.getDate() +\n            \"日\" +\n            d.getHours() +\n            \"时\" +\n            d.getMinutes() +\n            \"分\"\n        );\n    }\n}\n\n/*  数字 格式化 */\nexport function nFormatter(num, digits) {\n    const si = [\n        { value: 1e18, symbol: \"E\" },\n        { value: 1e15, symbol: \"P\" },\n        { value: 1e12, symbol: \"T\" },\n        { value: 1e9, symbol: \"G\" },\n        { value: 1e6, symbol: \"M\" },\n        { value: 1e3, symbol: \"k\" }\n    ];\n    for (let i = 0; i < si.length; i++) {\n        if (num >= si[i].value) {\n            return (\n                (num / si[i].value + 0.1)\n                    .toFixed(digits)\n                    .replace(/\\.0+$|(\\.[0-9]*[1-9])0+$/, \"$1\") + si[i].symbol\n            );\n        }\n    }\n    return num.toString();\n}\n\nexport function html2Text(val) {\n    const div = document.createElement(\"div\");\n    div.innerHTML = val;\n    return div.textContent || div.innerText;\n}\n\nexport function toThousandslsFilter(num) {\n    return (+num || 0)\n        .toString()\n        .replace(/^-?\\d+/g, m => m.replace(/(?=(?!\\b)(\\d{3})+$)/g, \",\"));\n}\n\n/**\n * 格式化文件大小\n * @param value\n * @returns {*}\n */\nexport function renderSize(value) {\n    if (!value || value === null || value === \"\") {\n        return \"\";\n    }\n    let unitArr = [\"B\", \"KB\", \"MB\", \"GB\", \"TB\", \"PB\", \"EB\", \"ZB\", \"YB\"];\n    let srcsize = parseFloat(value);\n    let index = Math.floor(Math.log(srcsize) / Math.log(1024));\n    let size = srcsize / Math.pow(1024, index);\n    size = size.toFixed(0); // 保留的小数位数\n    return size + unitArr[index];\n}\n"
  },
  {
    "path": "src/main.js",
    "content": "import \"babel-polyfill\"; // 解决Ie9\nimport Vue from \"vue\";\nimport App from \"./App.vue\";\nimport router from \"./router/index\";\nimport store from \"./store/index\";\nimport \"./element\";\nimport * as filters from \"./filtres/index\"; // 全局过滤器\nimport \"./role\"; // 权限\n\nimport \"./mock\"; // 模拟数据\n\nimport \"./assets/icons/iconfont\";\nimport IconSvg from \"./components/common/IconSvg.vue\"; // svg组件\n\n// 注册全局组件（register global）\nVue.component(\"icon-svg\", IconSvg);\n\n// 注册全局实用程序过滤器（register global utility filters）.\nObject.keys(filters).forEach(key => {\n    Vue.filter(key, filters[key]);\n});\n\nVue.config.productionTip = false;\nnew Vue({\n    router,\n    store,\n    render: h => h(App)\n}).$mount(\"#app\");\n"
  },
  {
    "path": "src/mock/ad.js",
    "content": "const index = {\n    total: 17,\n    data: {\n        total: 1,\n        list: [\n            {\n                adId: 1,\n                title: \"阿范德萨\",\n                describe: \"撒地方士大夫\",\n                pic: \"ttttt\",\n                jumpType: 0,\n                jumpUrl: \"sss\",\n                iosUrl: \"\",\n                androidUrl: \"\",\n                wxaAppid: \"\",\n                channelType: 1,\n                channelList: [\"yin\", \"33\"],\n                androidVersionType: 0,\n                androidVersionList: [],\n                iosVersionType: 0,\n                iosVersionList: [],\n                newShowStartNum: 0,\n                newShowMaxNum: 0,\n                oldShowStartNum: 0,\n                oldShowMaxNum: 0,\n                startTime: \"2019-01-08 00:00:00\",\n                endTime: \"2019-01-10 00:00:00\",\n                eventName: \"\",\n                status: 1,\n                picUrl: \"https://res.ishiguangji.cn/ttttt\"\n            },\n            {\n                adId: 2,\n                title: \"ffff\",\n                describe: \"fff\",\n                pic: \"ff\",\n                jumpType: 0,\n                jumpUrl: \"\",\n                iosUrl: \"\",\n                androidUrl: \"\",\n                wxaAppid: \"\",\n                channelType: 0,\n                channelList: [],\n                androidVersionType: 0,\n                androidVersionList: [],\n                iosVersionType: 0,\n                iosVersionList: [],\n                newShowStartNum: 0,\n                newShowMaxNum: 0,\n                oldShowStartNum: 0,\n                oldShowMaxNum: 0,\n                startTime: null,\n                endTime: null,\n                eventName: \"\",\n                status: 0,\n                picUrl: \"https://res.ishiguangji.cn/ff\"\n            },\n            {\n                adId: 3,\n                title: \"fvvs\",\n                describe: \"vvv\",\n                pic: \"dd\",\n                jumpType: 0,\n                jumpUrl: \"\",\n                iosUrl: \"\",\n                androidUrl: \"\",\n                wxaAppid: \"\",\n                channelType: 0,\n                channelList: [],\n                androidVersionType: 0,\n                androidVersionList: [],\n                iosVersionType: 0,\n                iosVersionList: [],\n                newShowStartNum: 0,\n                newShowMaxNum: 0,\n                oldShowStartNum: 0,\n                oldShowMaxNum: 0,\n                startTime: null,\n                endTime: null,\n                eventName: \"\",\n                status: 0,\n                picUrl: \"https://res.ishiguangji.cn/dd\"\n            },\n            {\n                adId: 4,\n                title: \"fffxxxx\",\n                describe: \"vvv\",\n                pic: \"bb\",\n                jumpType: 0,\n                jumpUrl: \"\",\n                iosUrl: \"\",\n                androidUrl: \"\",\n                wxaAppid: \"\",\n                channelType: 0,\n                channelList: [],\n                androidVersionType: 0,\n                androidVersionList: [],\n                iosVersionType: 0,\n                iosVersionList: [],\n                newShowStartNum: 0,\n                newShowMaxNum: 0,\n                oldShowStartNum: 0,\n                oldShowMaxNum: 0,\n                startTime: null,\n                endTime: null,\n                eventName: \"\",\n                status: 0,\n                picUrl: \"https://res.ishiguangji.cn/bb\"\n            }\n        ]\n    }\n};\n\nconst save = {\n    data: {\n        adId: 5\n    }\n};\n\nconst edit = {\n    code: 0,\n    message: \"success\"\n};\n\nconst del = {\n    code: 0,\n    message: \"success\"\n};\n\nexport default {\n    index,\n    save,\n    edit,\n    del\n};\n"
  },
  {
    "path": "src/mock/adSite.js",
    "content": "const index = {\n    data: {\n        total: 1,\n        list: [\n            {\n                siteId: 1,\n                siteName: \"测试12222111\",\n                describe: \"支持android和ios\",\n                adIds: [4, 1],\n                ads: [\n                    {\n                        adId: 4,\n                        title: \"fffxxxx\",\n                        describe: \"vvv\",\n                        status: 0\n                    },\n                    {\n                        adId: 1,\n                        title: \"阿范德萨\",\n                        describe: \"撒地方士大夫\",\n                        status: 1\n                    }\n                ]\n            },\n            {\n                siteId: 2,\n                siteName: \"车是是是\",\n                describe: \"车是是是发发发\",\n                adIds: [1, 2, 4],\n                ads: [\n                    {\n                        adId: 1,\n                        title: \"阿范德萨\",\n                        describe: \"撒地方士大夫\",\n                        status: 1\n                    },\n                    {\n                        adId: 2,\n                        title: \"ffff\",\n                        describe: \"fff\",\n                        status: 0\n                    },\n                    {\n                        adId: 4,\n                        title: \"fffxxxx\",\n                        describe: \"vvv\",\n                        status: 0\n                    }\n                ]\n            }\n        ]\n    }\n};\n\nconst adList = {\n    data: {\n        total: 1,\n        list: [\n            {\n                adId: 1,\n                title: \"阿范德萨\",\n                describe: \"撒地方士大夫\",\n                status: 1\n            },\n            {\n                adId: 6,\n                title: \"侧嗯嗯得到的\",\n                describe: \"车次多的的\",\n                status: 1\n            },\n            {\n                adId: 7,\n                title: \"hi额接口数据东方丽景\",\n                describe: \"反倒是打发士大夫撒\",\n                status: 1\n            }\n        ]\n    }\n};\n\nconst save = {\n    data: {\n        siteId: 2\n    }\n};\n\nconst edit = {\n    code: 0,\n    message: \"success\"\n};\n\nconst del = {\n    code: 0,\n    message: \"success\"\n};\n\nexport default {\n    index,\n    adList,\n    save,\n    edit,\n    del\n};\n"
  },
  {
    "path": "src/mock/authAdmin.js",
    "content": "/**\n * Created by lk on 18/4/28.\n */\n\nconst index = {\n    data: {\n        total: 1,\n        list: [\n            {\n                id: 1,\n                username: \"admin\",\n                avatar: null,\n                tel: \"admin\",\n                email: \"lmxdawn@gmail.com\",\n                status: 1,\n                lastLoginIp: \"127.0.0.1\",\n                lastLoginTime: 1493103488,\n                createTime: 1487868050,\n                roles: []\n            }\n        ]\n    }\n};\n\nconst roleList = {\n    data: {\n        total: 1,\n        list: [\n            {\n                id: 1,\n                name: \"超级管理员\"\n            }\n        ]\n    }\n};\n\nconst save = {\n    data: {\n        id: \"2\",\n        username: \"test\",\n        password: \"\",\n        status: \"1\",\n        roles: [1]\n    }\n};\n\nconst edit = {\n    code: 0,\n    message: \"success\"\n};\n\nconst del = {\n    code: 0,\n    message: \"success\"\n};\n\nexport default {\n    index,\n    roleList,\n    save,\n    edit,\n    del\n};\n"
  },
  {
    "path": "src/mock/authPermissionRule.js",
    "content": "/**\n * Created by lk on 18/4/28.\n */\n\nconst index = {\n    data: {\n        list: [\n            {\n                id: 1,\n                pid: 0,\n                name: \"user_manage\",\n                title: \"用户管理\",\n                status: 1,\n                condition: \"\",\n                listorder: 999,\n                children: [\n                    {\n                        id: 2,\n                        pid: 1,\n                        name: \"user_manage/admin\",\n                        title: \"管理组\",\n                        status: 1,\n                        condition: \"\",\n                        listorder: 999,\n                        children: [\n                            {\n                                id: 3,\n                                pid: 2,\n                                name: \"admin/admin/index\",\n                                title: \"管理员管理\",\n                                status: 1,\n                                condition: \"\",\n                                listorder: 999,\n                                children: [\n                                    {\n                                        id: 4,\n                                        pid: 3,\n                                        name: \"admin/admin/save\",\n                                        title: \"添加管理员\",\n                                        status: 1,\n                                        condition: \"\",\n                                        listorder: 999,\n                                        children: [],\n                                        level: 4,\n                                        html:\n                                            \"&nbsp;&nbsp;│&nbsp;│&nbsp;├&nbsp;\"\n                                    },\n                                    {\n                                        id: 5,\n                                        pid: 3,\n                                        name: \"admin/admin/edit\",\n                                        title: \"编辑管理员\",\n                                        status: 1,\n                                        condition: \"\",\n                                        listorder: 999,\n                                        children: [],\n                                        level: 4,\n                                        html:\n                                            \"&nbsp;&nbsp;│&nbsp;│&nbsp;├&nbsp;\"\n                                    },\n                                    {\n                                        id: 6,\n                                        pid: 3,\n                                        name: \"admin/admin/delete\",\n                                        title: \"删除管理员\",\n                                        status: 1,\n                                        condition: \"\",\n                                        listorder: 999,\n                                        children: [],\n                                        level: 4,\n                                        html:\n                                            \"&nbsp;&nbsp;│&nbsp;│&nbsp;├&nbsp;\"\n                                    }\n                                ],\n                                level: 3,\n                                html: \"&nbsp;&nbsp;│&nbsp;├&nbsp;\"\n                            },\n                            {\n                                id: 7,\n                                pid: 2,\n                                name: \"admin/role/index\",\n                                title: \"角色管理\",\n                                status: 1,\n                                condition: \"\",\n                                listorder: 999,\n                                children: [\n                                    {\n                                        id: 8,\n                                        pid: 7,\n                                        name: \"admin/role/save\",\n                                        title: \"添加角色\",\n                                        status: 1,\n                                        condition: \"\",\n                                        listorder: 999,\n                                        children: [],\n                                        level: 4,\n                                        html:\n                                            \"&nbsp;&nbsp;│&nbsp;│&nbsp;├&nbsp;\"\n                                    },\n                                    {\n                                        id: 9,\n                                        pid: 7,\n                                        name: \"admin/role/edit\",\n                                        title: \"编辑角色\",\n                                        status: 1,\n                                        condition: \"\",\n                                        listorder: 999,\n                                        children: [],\n                                        level: 4,\n                                        html:\n                                            \"&nbsp;&nbsp;│&nbsp;│&nbsp;├&nbsp;\"\n                                    },\n                                    {\n                                        id: 10,\n                                        pid: 7,\n                                        name: \"admin/role/delete\",\n                                        title: \"删除角色\",\n                                        status: 1,\n                                        condition: \"\",\n                                        listorder: 999,\n                                        children: [],\n                                        level: 4,\n                                        html:\n                                            \"&nbsp;&nbsp;│&nbsp;│&nbsp;├&nbsp;\"\n                                    },\n                                    {\n                                        id: 11,\n                                        pid: 7,\n                                        name: \"admin/role/auth\",\n                                        title: \"角色授权\",\n                                        status: 1,\n                                        condition: \"\",\n                                        listorder: 999,\n                                        children: [],\n                                        level: 4,\n                                        html:\n                                            \"&nbsp;&nbsp;│&nbsp;│&nbsp;├&nbsp;\"\n                                    }\n                                ],\n                                level: 3,\n                                html: \"&nbsp;&nbsp;│&nbsp;├&nbsp;\"\n                            },\n                            {\n                                id: 12,\n                                pid: 2,\n                                name: \"admin/authrule/index\",\n                                title: \"权限管理\",\n                                status: 1,\n                                condition: \"\",\n                                listorder: 999,\n                                children: [\n                                    {\n                                        id: 13,\n                                        pid: 12,\n                                        name: \"admin/authrule/save\",\n                                        title: \"添加权限\",\n                                        status: 1,\n                                        condition: \"\",\n                                        listorder: 999,\n                                        children: [],\n                                        level: 4,\n                                        html:\n                                            \"&nbsp;&nbsp;│&nbsp;│&nbsp;├&nbsp;\"\n                                    },\n                                    {\n                                        id: 14,\n                                        pid: 12,\n                                        name: \"admin/authrule/edit\",\n                                        title: \"编辑权限\",\n                                        status: 1,\n                                        condition: \"\",\n                                        listorder: 999,\n                                        children: [],\n                                        level: 4,\n                                        html:\n                                            \"&nbsp;&nbsp;│&nbsp;│&nbsp;├&nbsp;\"\n                                    },\n                                    {\n                                        id: 15,\n                                        pid: 12,\n                                        name: \"admin/authrule/delete\",\n                                        title: \"删除权限\",\n                                        status: 1,\n                                        condition: \"\",\n                                        listorder: 999,\n                                        children: [],\n                                        level: 4,\n                                        html:\n                                            \"&nbsp;&nbsp;│&nbsp;│&nbsp;├&nbsp;\"\n                                    }\n                                ],\n                                level: 3,\n                                html: \"&nbsp;&nbsp;│&nbsp;├&nbsp;\"\n                            }\n                        ],\n                        level: 2,\n                        html: \"&nbsp;&nbsp;├&nbsp;\"\n                    }\n                ],\n                level: 1,\n                html: \"&nbsp;\"\n            },\n            {\n                id: 16,\n                pid: 0,\n                name: \"setting\",\n                title: \"设置\",\n                status: 1,\n                condition: \"\",\n                listorder: 999,\n                children: [\n                    {\n                        id: 17,\n                        pid: 16,\n                        name: \"admin/wxconf/index\",\n                        title: \"小程序\",\n                        status: 1,\n                        condition: \"\",\n                        listorder: 999,\n                        children: [\n                            {\n                                id: 18,\n                                pid: 17,\n                                name: \"admin/wxconf/save\",\n                                title: \"保存修改\",\n                                status: 1,\n                                condition: \"\",\n                                listorder: 999,\n                                children: [],\n                                level: 3,\n                                html: \"&nbsp;&nbsp;│&nbsp;└&nbsp;\"\n                            }\n                        ],\n                        level: 2,\n                        html: \"&nbsp;&nbsp;├&nbsp;\"\n                    }\n                ],\n                level: 1,\n                html: \"&nbsp;\"\n            }\n        ]\n    }\n};\n\nconst save = {\n    data: {\n        id: 999\n    }\n};\n\nconst edit = {\n    code: 0,\n    message: \"success\"\n};\n\nconst del = { code: 0, message: \"success\" };\n\nexport default {\n    index,\n    save,\n    edit,\n    del\n};\n"
  },
  {
    "path": "src/mock/authRole.js",
    "content": "/**\n * Created by lk on 18/4/28.\n */\n\nconst index = {\n    data: {\n        total: 1,\n        list: [\n            {\n                id: 1,\n                name: \"超级管理员\",\n                status: 1,\n                remark: \"拥有网站最高管理员权限！\",\n                createTime: 1329633709,\n                listorder: 0\n            }\n        ]\n    }\n};\n\nconst save = {\n    data: {\n        id: 2\n    }\n};\n\nconst edit = { code: 0, message: \"success\" };\n\nconst del = { code: 0, message: \"success\" };\nconst authList = {\n    data: {\n        authList: [\n            {\n                id: 1,\n                pid: 0,\n                name: \"userManage\",\n                title: \"用户管理\",\n                status: 1,\n                condition: \"\",\n                listorder: 999,\n                children: [\n                    {\n                        id: 2,\n                        pid: 1,\n                        name: \"userManage/admin\",\n                        title: \"管理组\",\n                        status: 1,\n                        condition: \"\",\n                        listorder: 999,\n                        children: [\n                            {\n                                id: 3,\n                                pid: 2,\n                                name: \"admin/admin/index\",\n                                title: \"管理员管理\",\n                                status: 1,\n                                condition: \"\",\n                                listorder: 999,\n                                children: [\n                                    {\n                                        id: 4,\n                                        pid: 3,\n                                        name: \"admin/admin/save\",\n                                        title: \"添加管理员\",\n                                        status: 1,\n                                        condition: \"\",\n                                        listorder: 999,\n                                        children: []\n                                    },\n                                    {\n                                        id: 5,\n                                        pid: 3,\n                                        name: \"admin/admin/edit\",\n                                        title: \"编辑管理员\",\n                                        status: 1,\n                                        condition: \"\",\n                                        listorder: 999,\n                                        children: []\n                                    },\n                                    {\n                                        id: 6,\n                                        pid: 3,\n                                        name: \"admin/admin/delete\",\n                                        title: \"删除管理员\",\n                                        status: 1,\n                                        condition: \"\",\n                                        listorder: 999,\n                                        children: []\n                                    }\n                                ]\n                            },\n                            {\n                                id: 7,\n                                pid: 2,\n                                name: \"admin/role/index\",\n                                title: \"角色管理\",\n                                status: 1,\n                                condition: \"\",\n                                listorder: 999,\n                                children: [\n                                    {\n                                        id: 8,\n                                        pid: 7,\n                                        name: \"admin/role/save\",\n                                        title: \"添加角色\",\n                                        status: 1,\n                                        condition: \"\",\n                                        listorder: 999,\n                                        children: []\n                                    },\n                                    {\n                                        id: 9,\n                                        pid: 7,\n                                        name: \"admin/role/edit\",\n                                        title: \"编辑角色\",\n                                        status: 1,\n                                        condition: \"\",\n                                        listorder: 999,\n                                        children: []\n                                    },\n                                    {\n                                        id: 10,\n                                        pid: 7,\n                                        name: \"admin/role/delete\",\n                                        title: \"删除角色\",\n                                        status: 1,\n                                        condition: \"\",\n                                        listorder: 999,\n                                        children: []\n                                    },\n                                    {\n                                        id: 11,\n                                        pid: 7,\n                                        name: \"admin/role/auth\",\n                                        title: \"角色授权\",\n                                        status: 1,\n                                        condition: \"\",\n                                        listorder: 999,\n                                        children: []\n                                    }\n                                ]\n                            },\n                            {\n                                id: 12,\n                                pid: 2,\n                                name: \"admin/authrule/index\",\n                                title: \"权限管理\",\n                                status: 1,\n                                condition: \"\",\n                                listorder: 999,\n                                children: [\n                                    {\n                                        id: 13,\n                                        pid: 12,\n                                        name: \"admin/authrule/save\",\n                                        title: \"添加权限\",\n                                        status: 1,\n                                        condition: \"\",\n                                        listorder: 999,\n                                        children: []\n                                    },\n                                    {\n                                        id: 14,\n                                        pid: 12,\n                                        name: \"admin/authrule/edit\",\n                                        title: \"编辑权限\",\n                                        status: 1,\n                                        condition: \"\",\n                                        listorder: 999,\n                                        children: []\n                                    },\n                                    {\n                                        id: 15,\n                                        pid: 12,\n                                        name: \"admin/authrule/delete\",\n                                        title: \"删除权限\",\n                                        status: 1,\n                                        condition: \"\",\n                                        listorder: 999,\n                                        children: []\n                                    }\n                                ]\n                            }\n                        ]\n                    }\n                ]\n            },\n            {\n                id: 16,\n                pid: 0,\n                name: \"setting\",\n                title: \"设置\",\n                status: 1,\n                condition: \"\",\n                listorder: 999,\n                children: [\n                    {\n                        id: 17,\n                        pid: 16,\n                        name: \"admin/wxconf/index\",\n                        title: \"小程序\",\n                        status: 1,\n                        condition: \"\",\n                        listorder: 999,\n                        children: [\n                            {\n                                id: 18,\n                                pid: 17,\n                                name: \"admin/wxconf/save\",\n                                title: \"保存修改\",\n                                status: 1,\n                                condition: \"\",\n                                listorder: 999,\n                                children: []\n                            }\n                        ]\n                    }\n                ]\n            }\n        ],\n        checkedKeys: []\n    }\n};\n\nconst auth = { code: 0, message: \"success\" };\n\nexport default {\n    index,\n    save,\n    edit,\n    del,\n    authList,\n    auth\n};\n"
  },
  {
    "path": "src/mock/fileResource.js",
    "content": "/**\n * Created by lk on 18/4/28.\n */\n\n// 资源列表\nconst index = {\n    data: {\n        total: 10,\n        list: [\n            {\n                id: 1,\n                type: 0,\n                filename: \"home_many.png\",\n                path:\n                    \"resources/image/20180529/0b429c0d31011ec46f2328ac0ca29c15.png\",\n                size: 9705,\n                ext: \"png\",\n                createTime: false,\n                url:\n                    \"http://www.test.com/uploads/resources/image/20180529/0b429c0d31011ec46f2328ac0ca29c15.png\"\n            },\n            {\n                id: 2,\n                type: 0,\n                filename: \"homeManyPlay.png\",\n                path:\n                    \"resources/image/20180529/2988116bffc258321a48909f48841028.png\",\n                size: 9665,\n                ext: \"png\",\n                createTime: 1527601051,\n                url:\n                    \"http://www.test.com/uploads/resources/image/20180529/2988116bffc258321a48909f48841028.png\"\n            }\n        ]\n    }\n};\n\n// 上传资源\nconst add = {\n    data: {\n        id: 11\n    }\n};\n\nexport default {\n    index,\n    add\n};\n"
  },
  {
    "path": "src/mock/fileResourceTag.js",
    "content": "/**\n * Created by lk on 18/4/28.\n */\n\n// 资源分组列表\nconst index = {\n    data: {\n        total: 1,\n        list: [\n            {\n                id: 1,\n                tag: \"sss\"\n            }\n        ]\n    }\n};\n\n// 新建资源分组\nconst add = {\n    data: {\n        id: 2\n    }\n};\n\nexport default {\n    index,\n    add\n};\n"
  },
  {
    "path": "src/mock/index.js",
    "content": "/**\n * Created by lk on 18/4/28.\n */\n\nimport Mock from \"mockjs\";\n\nimport login from \"./login\";\nimport authAdmin from \"./authAdmin\";\nimport authPermissionRule from \"./authPermissionRule\";\nimport authRole from \"./authRole\";\nimport upload from \"./upload\";\nimport fileResourceTag from \"./fileResourceTag\";\nimport fileResource from \"./fileResource\";\nimport adSite from \"./adSite\";\nimport ad from \"./ad\";\n\n// 登录相关\nMock.mock(/\\/admin\\/auth\\/login\\/out/, \"post\", login.out);\nMock.mock(/\\/admin\\/auth\\/login\\/password/, \"post\", login.password);\nMock.mock(/\\/admin\\/auth\\/login\\/index/, \"post\", login.index);\nMock.mock(/\\/admin\\/auth\\/login\\/userInfo/, \"get\", login.userInfo);\n// 管理员相关\nMock.mock(/\\/admin\\/auth\\/admin\\/index/, \"get\", authAdmin.index);\nMock.mock(/\\/admin\\/auth\\/admin\\/roleList/, \"get\", authAdmin.roleList);\nMock.mock(/\\/admin\\/auth\\/admin\\/save/, \"post\", authAdmin.save);\nMock.mock(/\\/admin\\/auth\\/admin\\/edit/, \"post\", authAdmin.edit);\nMock.mock(/\\/admin\\/auth\\/admin\\/delete/, \"post\", authAdmin.del);\n// 权限相关\nMock.mock(\n    /\\/admin\\/auth\\/permission_rule\\/index/,\n    \"get\",\n    authPermissionRule.index\n);\nMock.mock(\n    /\\/admin\\/auth\\/permission_rule\\/save/,\n    \"post\",\n    authPermissionRule.save\n);\nMock.mock(\n    /\\/admin\\/auth\\/permission_rule\\/edit/,\n    \"post\",\n    authPermissionRule.edit\n);\nMock.mock(\n    /\\/admin\\/auth\\/permission_rule\\/delete/,\n    \"post\",\n    authPermissionRule.del\n);\n// 角色相关\nMock.mock(/\\/admin\\/auth\\/role\\/index/, \"get\", authRole.index);\nMock.mock(/\\/admin\\/auth\\/role\\/save/, \"post\", authRole.save);\nMock.mock(/\\/admin\\/auth\\/role\\/edit/, \"post\", authRole.edit);\nMock.mock(/\\/admin\\/auth\\/role\\/delete/, \"post\", authRole.del);\nMock.mock(/\\/admin\\/auth\\/role\\/authList/, \"get\", authRole.authList);\nMock.mock(/\\/admin\\/auth\\/role\\/auth/, \"post\", authRole.auth);\n\n/**\n * 上传相关\n */\n// 获取文件列表\nMock.mock(/admin\\/file\\/upload\\/qiuNiuUpToken/, \"get\", upload.qiuNiuUpToken);\n// 上传文件\nMock.mock(/admin\\/file\\/upload\\/createFile/, \"post\", upload.createFile);\n\n/**\n * 资源分组相关\n */\n// 获取资源分组列表\nMock.mock(/admin\\/file\\/resource_tag\\/index/, \"get\", fileResourceTag.index);\n// 新建资源分组\nMock.mock(/admin\\/file\\/resource_tag\\/add/, \"post\", fileResourceTag.add);\n/**\n * 资源相关\n */\n// 获取资源列表\nMock.mock(/admin\\/file\\/resource\\/index/, \"get\", fileResource.index);\n// 上传资源\nMock.mock(/admin\\/file\\/resource\\/add/, \"post\", fileResource.add);\n\n// 广告位相关\nMock.mock(/\\/admin\\/ad\\/site\\/index/, \"get\", adSite.index);\nMock.mock(/\\/admin\\/ad\\/site\\/adList/, \"post\", adSite.adList);\nMock.mock(/\\/admin\\/ad\\/site\\/save/, \"post\", adSite.save);\nMock.mock(/\\/admin\\/ad\\/site\\/edit/, \"post\", adSite.edit);\nMock.mock(/\\/admin\\/ad\\/site\\/delete/, \"post\", adSite.del);\n// 广告相关\nMock.mock(/\\/admin\\/ad\\/ad\\/index/, \"get\", ad.index);\nMock.mock(/\\/admin\\/ad\\/ad\\/save/, \"post\", ad.save);\nMock.mock(/\\/admin\\/ad\\/ad\\/edit/, \"post\", ad.edit);\nMock.mock(/\\/admin\\/ad\\/ad\\/delete/, \"post\", ad.del);\n\nexport default Mock;\n"
  },
  {
    "path": "src/mock/login.js",
    "content": "/**\n * Created by lk on 18/4/28.\n */\n\nconst index = {\n    data: {\n        id: 1,\n        token:\n            \"eyJpZHNzIjoiJDJ5JDEwJGNmMVpVb3BxM2lEUUk0bllVZXkxenUzajM0QVJlYmEuS3B4aDZ1MkNkY1J4clF6SE10MTRLIn0=_2018-04-27\"\n    }\n};\n\nconst userInfo = {\n    data: {\n        status: \"1\",\n        id: 1,\n        username: \"admin\",\n        avatar: \"\",\n        authRules: [\"admin\"],\n        token:\n            \"eyJpZHNzIjoiJDJ5JDEwJGNmMVpVb3BxM2lEUUk0bllVZXkxenUzajM0QVJlYmEuS3B4aDZ1MkNkY1J4clF6SE10MTRLIn0=_2018-04-27\"\n    }\n};\n\nconst out = { code: 0, message: \"success\" };\n\nconst password = { code: 0, message: \"success\" };\n\nexport default {\n    index,\n    userInfo,\n    out,\n    password\n};\n"
  },
  {
    "path": "src/mock/upload.js",
    "content": "/**\n * Created by lk on 18/4/28.\n */\n\n// 获取七牛云\nconst qiuNiuUpToken = {\n    data: {\n        domain: \"https://res.xxxxx.cn\",\n        expires_in: 86400,\n        upToken:\n            \"GRUuplbSg1DrFbLlx2UPc0Qe0oIcIdqVRPgQ6i:nPJdU3WUHFcu5MSc4EOY8RSThGE=:eyJzY29wZSI6InNoaWd1YW5namkiLCJkZWFkbGluZSI6MTU0MzQ2NzcyN30=\",\n        uploadUrl: \"/admin/file/upload/createFile\"\n    }\n};\n\n// 上传文件\nconst createFile = {\n    key: \"TIMjieTu_20180516105525-fu_ben_.png\"\n};\n\nexport default {\n    qiuNiuUpToken,\n    createFile\n};\n"
  },
  {
    "path": "src/role.js",
    "content": "import router from \"./router/index\";\nimport store from \"./store/index\";\nimport NProgress from \"nprogress\"; // Progress 进度条\nimport \"nprogress/nprogress.css\"; // Progress 进度条样式\nimport { getAdminId } from \"./utils/auth\"; // 验权\nimport { Message } from \"element-ui\";\nimport { asyncRouterMap } from \"./router/index\";\n// permissiom judge\nfunction hasRole(authRules, permissionAuthRules) {\n    if (!authRules || authRules.length <= 0) {\n        return false;\n    }\n    if (authRules.indexOf(\"admin\") >= 0) return true; // admin权限 直接通过\n    if (!permissionAuthRules) return true;\n    return authRules.some(role => permissionAuthRules.indexOf(role) >= 0);\n}\n\n/**\n * 通过meta.role判断是否与当前用户权限匹配\n * @param authRules\n * @param route\n */\nfunction hasRouterRole(authRules, route) {\n    if (\n        authRules.indexOf(\"admin\") >= 0 ||\n        !route.meta ||\n        !route.meta.authRule\n    ) {\n        return true;\n    }\n    return authRules.some(\n        authRule => route.meta.authRule.indexOf(authRule) >= 0\n    );\n}\n\n/**\n * 递归过滤异步路由表，返回符合用户角色权限的路由表\n * @param asyncRouterMap\n * @param authRules\n */\nfunction filterAsyncRouter(asyncRouterMap, authRules) {\n    const accessedRouters = asyncRouterMap.filter(route => {\n        if (hasRouterRole(authRules, route)) {\n            if (route.children && route.children.length) {\n                route.children = filterAsyncRouter(route.children, authRules);\n            }\n            return true;\n        }\n        return false;\n    });\n    return accessedRouters;\n}\n\n// register global progress.\nconst whiteList = [\"/login\", \"/401\", \"/404\", \"/500\"]; // 不重定向白名单\nrouter.beforeEach((to, from, next) => {\n    NProgress.start(); // 开启Progress\n    if (whiteList.indexOf(to.path) !== -1) {\n        // 在免登录白名单，直接进入\n        next();\n        return;\n    }\n    let adminId = getAdminId();\n    if (adminId !== \"undefined\" && adminId !== \"\" && adminId) {\n        // 判断是否有token\n        if (to.path === \"/login\") {\n            next({ path: \"/\" });\n            NProgress.done(); // router在hash模式下 手动改变hash 重定向回来 不会触发afterEach 暂时hack方案 ps：history模式下无问题，可删除该行！\n            return;\n        }\n        if (\n            !store.getters.userName &&\n            (!store.getters.authRules || store.getters.authRules.length === 0)\n        ) {\n            // 判断当前用户是否已拉取完用户信息\n            store\n                .dispatch(\"userInfo\")\n                .then(data => {\n                    // 拉取user_info\n                    const authRules = data.authRules || [];\n                    if (\n                        !(authRules instanceof Array) ||\n                        authRules.length === 0\n                    ) {\n                        Message.error(\"权限验证失败，请联系管理员~\");\n                        next({\n                            path: \"/401\",\n                            query: { noGoBack: true }\n                        });\n                        NProgress.done();\n                        return;\n                    }\n                    let accessedRouters = filterAsyncRouter(\n                        asyncRouterMap,\n                        authRules\n                    );\n                    // 生成可访问的路由表\n                    router.addRoutes(accessedRouters); // 动态添加可访问路由表\n                    next({ ...to }); // hack方法 确保addRoutes已完成\n                    // 设置左边导航栏\n                    store\n                        .dispatch(\"filterRouter\", { accessedRouters })\n                        .then(() => {});\n                })\n                .catch(() => {\n                    store.dispatch(\"fedLogout\").then(() => {\n                        Message.error(\"验证失败,请重新登录\");\n                        let redirect = to.fullPath;\n                        store.dispatch(\"loginOut\").then(() => {\n                            next({\n                                path: \"/login\",\n                                query: { redirect: redirect }\n                            });\n                        });\n                    });\n                });\n            return;\n        }\n        // 没有动态改变权限的需求可直接next() 删除下方权限判断 ↓\n        if (hasRole(store.getters.authRules, to.meta.authRule)) {\n            next(); //\n            return;\n        }\n        next({\n            path: \"/401\",\n            query: { noGoBack: true }\n        });\n        NProgress.done(); // router在hash模式下 手动改变hash 重定向回来 不会触发afterEach 暂时hack方案 ps：history模式下无问题，可删除该行！\n        return;\n    }\n    let redirect = to.fullPath;\n    store.dispatch(\"loginOut\").then(() => {\n        next({\n            path: \"/login\",\n            query: { redirect: redirect }\n        });\n    }); // 否则全部重定向到登录页\n    NProgress.done(); // router在hash模式下 手动改变hash 重定向回来 不会触发afterEach 暂时hack方案 ps：history模式下无问题，可删除该行！\n});\n\nrouter.afterEach(() => {\n    NProgress.done(); // 结束Progress\n});\n"
  },
  {
    "path": "src/router/index.js",
    "content": "import Vue from \"vue\";\nimport VueRouter from \"vue-router\";\n\nif (process.env.NODE_ENV === \"development\") {\n    Vue.use(VueRouter);\n}\n\nimport { ROUTER_MODE } from \"../config/app\";\n\nimport Home from \"../views/home/index.vue\";\n\n// 管理组相关\nimport adminRouter from \"../views/userManage/admin/router.vue\";\nimport authAdmin from \"../views/userManage/admin/authAdmin.vue\";\nimport authRole from \"../views/userManage/admin/authRole.vue\";\nimport authPermissionRule from \"../views/userManage/admin/authPermissionRule.vue\";\n\n// 上传相关\nimport tinymce from \"../views/components/tinymce-demo.vue\";\nimport upload from \"../views/components/upload-demo.vue\";\n\n// 广告管理\nimport adSite from \"../views/adManage/adSite.vue\";\nimport ad from \"../views/adManage/ad.vue\";\n\n// Vue.use(VueRouter);\n\nconst err401 = r =>\n    require.ensure([], () => r(require(\"../views/error/err401.vue\")), \"home\");\nconst err404 = r =>\n    require.ensure([], () => r(require(\"../views/error/err404.vue\")), \"home\");\nconst login = r =>\n    require.ensure([], () => r(require(\"../views/login/index.vue\")), \"home\");\nconst main = r =>\n    require.ensure([], () => r(require(\"../views/home/main.vue\")), \"home\");\n\n// 注意 权限字段 authRule （严格区分大小写）\nexport const constantRouterMap = [\n    {\n        path: \"*\",\n        component: err404,\n        hidden: true\n    },\n    {\n        path: \"/401\",\n        component: err401,\n        name: \"401\",\n        hidden: true\n    },\n    {\n        path: \"/404\",\n        component: err404,\n        name: \"404\",\n        hidden: true\n    },\n    {\n        path: \"/500\",\n        component: err404,\n        name: \"500\",\n        hidden: true\n    },\n    {\n        path: \"/login\",\n        component: login,\n        name: \"登录\",\n        hidden: true\n    },\n    {\n        path: \"/\",\n        component: Home,\n        redirect: \"/readme\",\n        name: \"首页\",\n        hidden: true\n    },\n    {\n        path: \"/readme\",\n        component: Home,\n        redirect: \"/readme/main\",\n        icon: \"shouye\",\n        name: \"控制台\",\n        noDropdown: true,\n        children: [\n            {\n                path: \"main\",\n                component: main\n            }\n        ]\n    },\n    {\n        path: \"/components\",\n        redirect: \"/components/uploadList\",\n        component: Home,\n        name: \"components\",\n        icon: \"tongyong\",\n        children: [\n            {\n                path: \"uploadList\",\n                name: \"上传图片的展示\",\n                component: r =>\n                    require.ensure(\n                        [],\n                        () => r(require(\"../views/components/uploadList.vue\")),\n                        \"home\"\n                    )\n            },\n            {\n                path: \"tinymce\",\n                name: \"tinymce富文本编辑器\",\n                component: tinymce\n            },\n            {\n                path: \"upload\",\n                name: \"上传的demo\",\n                component: upload\n            }\n        ]\n    }\n];\n\nexport default new VueRouter({\n    // mode: 'history', //后端支持可开\n    mode: ROUTER_MODE,\n    routes: constantRouterMap,\n    strict: process.env.NODE_ENV !== \"production\"\n});\n\nexport const asyncRouterMap = [\n    {\n        path: \"/userManage\",\n        redirect: \"/userManage/adminManage/index\",\n        component: Home,\n        icon: \"guanliyuan1\",\n        name: \"用户管理\",\n        meta: {\n            authRule: [\"user_manage\"]\n        },\n        // noDropdown: true,\n        children: [\n            {\n                path: \"/userManage/adminManage\",\n                component: adminRouter,\n                redirect: \"/userManage/authAdmin/index\",\n                name: \"管理组\",\n                icon: \"\",\n                meta: {\n                    authRule: [\"user_manage/admin_manage\"]\n                },\n                children: [\n                    {\n                        path: \"authAdmin\",\n                        component: authAdmin,\n                        name: \"管理员管理\",\n                        icon: \"\",\n                        meta: {\n                            authRule: [\"admin/auth/admin/index\"]\n                        }\n                    },\n                    {\n                        path: \"authRole\",\n                        component: authRole,\n                        name: \"角色管理\",\n                        icon: \"\",\n                        meta: {\n                            authRule: [\"admin/auth/role/index\"]\n                        }\n                    },\n                    {\n                        path: \"authPermissionRule\",\n                        component: authPermissionRule,\n                        name: \"权限管理\",\n                        icon: \"\",\n                        meta: {\n                            authRule: [\"admin/auth/permission_rule/index\"]\n                        }\n                    }\n                ]\n            }\n        ]\n    },\n    {\n        path: \"/adManage\",\n        redirect: \"/adManage/adSite\",\n        component: Home,\n        icon: \"guanggao\",\n        name: \"广告相关\",\n        meta: {\n            // authRule: [\"ad_manage\"]\n        },\n        // noDropdown: true,\n        children: [\n            {\n                path: \"adSite\",\n                component: adSite,\n                name: \"广告位管理\",\n                icon: \"\",\n                meta: {\n                    // authRule: [\"admin/ad/site/index\"]\n                }\n            },\n            {\n                path: \"ad\",\n                component: ad,\n                name: \"广告管理\",\n                icon: \"\",\n                meta: {\n                    // authRule: [\"admin/ad/ad/index\"]\n                }\n            }\n        ]\n    }\n];\n"
  },
  {
    "path": "src/store/actions.js",
    "content": "// import * as types from './mutation-types'\n//\n// export const addToCart = ({ commit }, product) => {\n//   if (product.inventory > 0) {\n//     commit(types.ADD_TO_CART, {\n//       id: product.id\n//     })\n//   }\n// }\n"
  },
  {
    "path": "src/store/getters.js",
    "content": "// export const cartProducts = state => {\n//   return state.cart.added.map(({ id, quantity }) => {\n//     const product = state.products.all.find(p => p.id === id)\n//     return {\n//       title: product.title,\n//       price: product.price,\n//       quantity\n//     }\n//   })\n// }\n"
  },
  {
    "path": "src/store/index.js",
    "content": "import Vue from \"vue\";\nimport Vuex from \"vuex\";\nimport * as actions from \"./actions\";\nimport * as getters from \"./getters\";\nimport app from \"./modules/app\";\nimport admin from \"./modules/admin\";\n\nif (process.env.NODE_ENV === \"development\") {\n    Vue.use(Vuex);\n}\n\nconst debug = process.env.NODE_ENV !== \"production\";\n\nexport default new Vuex.Store({\n    actions,\n    getters,\n    modules: {\n        app,\n        admin\n    },\n    strict: debug\n    // plugins: debug ? [createLogger()] : []\n});\n"
  },
  {
    "path": "src/store/modules/admin.js",
    "content": "import { userInfo, loginName, logout } from \"../../api/auth/login\";\nimport * as types from \"../mutation-types\";\nimport { constantRouterMap } from \"../../router\";\nimport {\n    getToken,\n    setToken,\n    removeToken,\n    getAdminId,\n    setAdminId,\n    removeAdminId\n} from \"../../utils/auth\";\n// import { $NOT_NETWORK } from '../../utils/errorCode'\nimport { Message } from \"element-ui\";\n\n// initial state\nconst state = {\n    adminId: getAdminId(), // id\n    userName: \"\", // 昵称\n    avatar: \"\", // 头像\n    token: getToken(), // 登录token\n    authRules: [], // 权限列表\n    routers: constantRouterMap // 路由列表\n};\n\n// getters\nconst getters = {\n    adminId: state => state.adminId,\n    userName: state => state.userName,\n    avatar: state => state.avatar,\n    token: state => state.token,\n    authRules: state => state.authRules,\n    routers: state => state.routers\n};\n\n// actions\nconst actions = {\n    // 用户名登录\n    loginName({ commit }, userInfo) {\n        const userName = userInfo.userName ? userInfo.userName.trim() : \"\";\n        const pwd = userInfo.pwd ? userInfo.pwd : \"\";\n        return new Promise((resolve, reject) => {\n            loginName(userName, pwd)\n                .then(response => {\n                    if (response.code) {\n                        Message({\n                            message: response.message,\n                            type: \"error\",\n                            duration: 5 * 1000\n                        });\n                    } else {\n                        let data = response.data;\n                        commit(types.RECEIVE_ADMIN_ID, data.id);\n                        commit(types.RECEIVE_ADMIN_TOKEN, data.token);\n                        commit(types.RECEIVE_ADMIN_AUTH_RULES, []);\n                    }\n                    resolve(response);\n                })\n                .catch(error => {\n                    reject(error);\n                });\n        });\n    },\n    userInfo({ commit }) {\n        return new Promise((resolve, reject) => {\n            userInfo()\n                .then(response => {\n                    if (response.code === 2) {\n                        reject(\"登录失效\");\n                    }\n                    const data = response.data || {};\n                    commit(types.RECEIVE_ADMIN_NAME, data.username);\n                    commit(types.RECEIVE_ADMIN_AVATAR, data.avatar);\n                    commit(types.RECEIVE_ADMIN_AUTH_RULES, data.authRules);\n                    resolve(data);\n                })\n                .catch(error => {\n                    reject(error);\n                });\n        });\n    },\n    // 登出\n    loginOut({ commit }) {\n        return new Promise((resolve, reject) => {\n            logout()\n                .then(() => {\n                    commit(types.RECEIVE_ADMIN_ID, \"\");\n                    commit(types.RECEIVE_ADMIN_TOKEN, \"\");\n                    commit(types.RECEIVE_ADMIN_AUTH_RULES, []);\n                    resolve();\n                })\n                .catch(error => {\n                    reject(error);\n                });\n        });\n    },\n\n    // 前端 登出\n    fedLogout({ commit }) {\n        return new Promise(resolve => {\n            commit(types.RECEIVE_ADMIN_ID, \"\");\n            commit(types.RECEIVE_ADMIN_TOKEN, \"\");\n            commit(types.RECEIVE_ADMIN_AUTH_RULES, []);\n            resolve();\n        });\n    },\n    /**\n     * 过滤路由列表\n     * @param commit\n     * @param data\n     * @returns {Promise}\n     */\n    filterRouter({ commit }, data) {\n        const { accessedRouters } = data;\n        if (accessedRouters && accessedRouters.length > 0) {\n            commit(types.RECEIVE_ROUTERS, accessedRouters);\n        }\n    }\n};\n\n// mutations\nconst mutations = {\n    [types.RECEIVE_ADMIN_ID](state, adminId) {\n        state.adminId = adminId;\n        if (adminId === \"\") {\n            removeAdminId();\n        } else {\n            setAdminId(adminId);\n        }\n    },\n    [types.RECEIVE_ADMIN_TOKEN](state, token) {\n        state.token = token;\n        if (token === \"\") {\n            removeToken();\n        } else {\n            setToken(token);\n        }\n    },\n    [types.RECEIVE_ADMIN_NAME](state, userName) {\n        state.userName = userName;\n    },\n    [types.RECEIVE_ADMIN_AVATAR](state, avatar) {\n        state.avatar = avatar;\n    },\n    [types.RECEIVE_ADMIN_AUTH_RULES](state, authRules) {\n        state.authRules = authRules;\n    },\n    [types.RECEIVE_ROUTERS](state, routers) {\n        const tempRm = constantRouterMap.concat(routers);\n        state.routers = JSON.parse(JSON.stringify(tempRm));\n    }\n};\n\nexport default {\n    state,\n    getters,\n    actions,\n    mutations\n};\n"
  },
  {
    "path": "src/store/modules/app.js",
    "content": "import { getStore, setStore } from \"../../utils/store\";\nimport * as types from \"../mutation-types\";\n\nconst state = {\n    sidebar: {\n        opened: !+getStore(\"sidebarStatus\")\n    },\n    visitedViews: []\n};\n\n// getters\nconst getters = {\n    sidebar: state => state.sidebar,\n    visitedViews: state => state.visitedViews\n};\n\n// actions\nconst actions = {\n    ToggleSideBar({ commit }) {\n        commit(types.TOGGLE_SIDEBAR);\n    },\n    ShowSideBar({ commit }) {\n        commit(types.SHOW_SIDEBAR);\n    },\n    addVisitedViews({ commit }, view) {\n        commit(types.ADD_VISITED_VIEWS, view);\n    },\n    delVisitedViews({ commit, state }, view) {\n        return new Promise(resolve => {\n            commit(types.DEL_VISITED_VIEWS, view);\n            resolve([...state.visitedViews]);\n        });\n    }\n};\n\n// mutations\nconst mutations = {\n    [types.TOGGLE_SIDEBAR](state) {\n        if (state.sidebar.opened) {\n            setStore(\"sidebarStatus\", 1, 365);\n        } else {\n            setStore(\"sidebarStatus\", 0, 365);\n        }\n        state.sidebar.opened = !state.sidebar.opened;\n    },\n    [types.SHOW_SIDEBAR](state) {\n        if (state.sidebar.opened) {\n            setStore(\"sidebarStatus\", 1, 365);\n        }\n        state.sidebar.opened = false;\n    },\n    [types.ADD_VISITED_VIEWS](state, view) {\n        if (state.visitedViews.some(v => v.path === view.path)) return;\n        state.visitedViews.push({ name: view.name, path: view.path });\n    },\n    [types.DEL_VISITED_VIEWS](state, view) {\n        let index;\n        for (const [i, v] of state.visitedViews.entries()) {\n            if (v.path === view.path) {\n                index = i;\n                break;\n            }\n        }\n        state.visitedViews.splice(index, 1);\n    }\n};\n\nexport default {\n    state,\n    getters,\n    actions,\n    mutations\n};\n"
  },
  {
    "path": "src/store/mutation-types.js",
    "content": "// APP 相关\nexport const TOGGLE_SIDEBAR = \"TOGGLE_SIDEBAR\";\nexport const SHOW_SIDEBAR = \"SHOW_SIDEBAR\";\nexport const ADD_VISITED_VIEWS = \"ADD_VISITED_VIEWS\";\nexport const DEL_VISITED_VIEWS = \"DEL_VISITED_VIEWS\";\n\n// user（用户）相关\nexport const RECEIVE_ADMIN_ID = \"RECEIVE_ADMIN_ID\"; // 用户ID\nexport const RECEIVE_ADMIN_TOKEN = \"RECEIVE_ADMIN_TOKEN\"; // token\nexport const RECEIVE_ADMIN_NAME = \"RECEIVE_ADMIN_NAME\"; // 昵称\nexport const RECEIVE_ADMIN_AVATAR = \"RECEIVE_ADMIN_AVATAR\"; // 头像\nexport const RECEIVE_ADMIN_AUTH_RULES = \"RECEIVE_ADMIN_AUTH_RULES\"; // 权限列表\nexport const RECEIVE_ROUTERS = \"RECEIVE_ROUTERS\"; // 初始化路由表\n"
  },
  {
    "path": "src/styles/base.scss",
    "content": "/*          reset css       */\n*, ::before, ::after {\n    /*选择所有标签*/\n    margin: 0;\n    padding: 0;\n\n    /*清除移动端默认的点击高亮效果*/\n    -webkit-tap-highlight-color: rgba(255, 255, 255, 0);\n\n    /*设置所有的元素都是以边框开始计算宽度的 百分比*/\n    box-sizing: border-box;\n}\n\nbody {\n    font-size: 14px;\n    color: #fff;\n    -moz-osx-font-smoothing: grayscale;\n    -webkit-font-smoothing: antialiased;\n    text-rendering: optimizeLegibility;\n    font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, Arial, sans-serif;\n}\n\na {\n    text-decoration: none;\n    &:hover {\n        text-decoration: none;\n    }\n}\n\nul, ol {\n    list-style: none;\n}\n\ninput {\n    border: none;\n    outline: none;\n    /*清除移动端默认的表单样式*/\n    -webkit-appearance: none;\n}\n\n.svg-icon {\n    width: 1em;\n    height: 1em;\n    vertical-align: middle;\n    fill: currentColor;\n    overflow: hidden;\n    -webkit-transition: font-size 0.25s ease-out 0s;\n    -moz-transition: font-size 0.25s ease-out 0s;\n    transition: font-size 0.25s ease-out 0s;\n}\n\n.el-message-box {\n    width: auto;\n    min-width: 40%;\n}\n\n.query-form {\n    margin-top: 20px;\n}\n\n.table-expand {\n    .el-form-item {\n        margin-right: 0;\n        margin-bottom: 0;\n        width: 49%;\n        label {\n            width: 90px;\n            color: #99a9bf;\n        }\n    }\n}\n\n.pagination-container {\n    margin-top: 10px;\n}\n\n@media screen and (max-width: 768px) {\n    .query-form-item.el-form-item {\n        display: block !important;\n        margin-right: 0;\n        margin-bottom: 10px;\n    }\n    .query-form-item .el-form-item__content {\n        width: 100%;\n        .el-select {\n            width: 100%;\n        }\n    }\n    .el-dialog {\n        width: 80%;\n    }\n\n    .el-message {\n        min-width: 70% !important;\n    }\n}\n\n.container-left {\n    .submenu-title-noDropdown,\n    .el-submenu__title {\n        &:hover {\n            background-color: #263445 !important;\n        }\n    }\n\n    .nest-menu .el-submenu>.el-submenu__title,\n    .el-submenu .el-menu-item {\n        background-color: #1f2d3d !important;\n        &:hover {\n            background-color: #001528 !important;\n        }\n    }\n}\n// 左侧导航栏的折叠后的样式\n.el-menu--collapse {\n    .el-submenu {\n        .el-submenu__title {\n            span {\n                height: 0;\n                width: 0;\n                overflow: hidden;\n                visibility: hidden;\n                display: inline-block;\n            }\n            .el-submenu__icon-arrow {\n                display: none;\n            }\n        }\n    }\n    .el-menu-item {\n        .el-tooltip {\n            span {\n                height: 0;\n                width: 0;\n                overflow: hidden;\n                visibility: hidden;\n                display: inline-block;\n            }\n        }\n    }\n}\n.el-menu--vertical {\n\n    .nest-menu.el-submenu>.el-submenu__title,\n    .el-menu-item {\n        &:hover {\n            // you can use $subMenuHover\n            background-color: #263455 !important;\n        }\n    }\n\n    // the scroll bar appears when the subMenu is too long\n\n}\n\n.table-scrollbar {\n    height: 75vh;\n}\n\n@media screen and (min-width: 1919px) {\n    .table-scrollbar {\n        height: 80vh;\n    }\n}\n\n@media screen and (min-width: 2500px) {\n    .table-scrollbar {\n        height: 85vh;\n    }\n}\n\n// 能删除的列表\n.remove-list-box {\n    width: 100%;\n    border: 1px dashed #cccccc;\n    display: inline-block;\n    padding: 10px;\n    background-color: #f6f6f6;\n}\n.remove-list {\n    margin-bottom: 15px;\n    .remove-list-item {\n        position: relative;\n        height: 40px;\n        line-height: 40px;\n        padding-left: 10px;\n        margin-top: 1px;\n        border-radius: 4px;\n        background-color: #ffff;\n        margin-bottom: 2px;\n    }\n    .remove-list-item:hover {\n        background-color: rgba(0, 0, 0, 0.05) !important;\n    }\n}\n.remove-list-close {\n    position: absolute;\n    top: 10px;\n    right: 10px;\n    cursor: pointer;\n}\n"
  },
  {
    "path": "src/styles/mixin.scss",
    "content": "\n// Mixin\n\n$font-color: #4a4a4a;\n//头部高度\n$header-height: 60px;\n//底部高度\n$footer-height: 1.30666666rem;\n\n//清除浮动\n@mixin clearfix() {\n&:before,\n&:after {\n    content: \" \";\n    display: table;\n}\n&:after {\n    clear: both;\n}\n}\n\n\n//水平居中\n@mixin center-block() {\n    display: block;\n    margin-left: auto;\n    margin-right: auto;\n}\n\n//全屏定位\n@mixin fxied-absolute(){\n    position:absolute;\n    top:0;\n    right:0;\n}\n@mixin fxied-fixed(){\n    position:fixed;\n    top:0;\n    right:0;\n}\n@mixin fxied-bottom(){\n    position:fixed;\n    bottom: 0;\n    right: 0;\n}\n//定位上下左右居中\n@mixin fxied-center() {\n    position: absolute;\n    top: 50%;\n    left: 50%;\n    transform: translate(-50%, -50%);\n}\n//定位上下居中\n@mixin fxied-top() {\n    position: absolute;\n    top: 50%;\n    transform: translateY(-50%);\n}\n//左右居中\n@mixin fxied-left() {\n    position: absolute;\n    left: 50%;\n    transform: translateX(-50%);\n}\n\n\n//尺寸助手\n@mixin size($width, $height) {\n    width: $width;\n    height: $height;\n}\n//正方形\n@mixin square($size) {\n    @include size($size, $size);\n}\n\n//调整大小的文本域\n@mixin resizable($direction: both) {\n    // Options: horizontal, vertical, both\n    resize: $direction;\n    // Safari fix\n    overflow: auto;\n}\n\n//截断文本  元素必须是 block 或 inline-block 级。\n@mixin text-overflow() {\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n}\n\n//视网膜屏幕（Retina）下的图片\n@mixin img-retina($file-1x, $file-2x, $width-1x, $height-1x) {\n    background-image: url($file-1x);\n\n    @media\n    only screen and (-webkit-min-device-pixel-ratio: 2),\n    only screen and (   min--moz-device-pixel-ratio: 2),\n    only screen and (     -o-min-device-pixel-ratio: 2/1),\n    only screen and (        min-device-pixel-ratio: 2),\n    only screen and (                min-resolution: 192dpi),\n    only screen and (                min-resolution: 2dppx) {\n        background-image: url($file-2x);\n        background-size: $width-1x $height-1x;\n    }\n}\n\n//左右浮动\n@mixin f_left(){\n    float: left;\n}\n@mixin f_right(){\n    float: right;\n}\n\n\n@mixin scrollBar {\n    &::-webkit-scrollbar-track-piece {\n        background: #d3dce6;\n    }\n    &::-webkit-scrollbar {\n        width: 6px;\n    }\n    &::-webkit-scrollbar-thumb {\n        background: #99a9bf;\n        border-radius: 20px;\n    }\n}\n\n@mixin relative {\n    position: relative;\n    width: 100%;\n    height: 100%;\n}\n\n@mixin pct($pct) {\n    width: #{$pct};\n    position: relative;\n    margin: 0 auto;\n}\n\n@mixin triangle($width, $height, $color, $direction) {\n    $width: $width/2;\n    $color-border-style: $height solid $color;\n    $transparent-border-style: $width solid transparent;\n    height: 0;\n    width: 0;\n    @if $direction==up {\n        border-bottom: $color-border-style;\n        border-left: $transparent-border-style;\n        border-right: $transparent-border-style;\n    }\n    @else if $direction==right {\n        border-left: $color-border-style;\n        border-top: $transparent-border-style;\n        border-bottom: $transparent-border-style;\n    }\n    @else if $direction==down {\n        border-top: $color-border-style;\n        border-left: $transparent-border-style;\n        border-right: $transparent-border-style;\n    }\n    @else if $direction==left {\n        border-right: $color-border-style;\n        border-top: $transparent-border-style;\n        border-bottom: $transparent-border-style;\n    }\n}\n"
  },
  {
    "path": "src/utils/auth.js",
    "content": "import { getStore, setStore, removeStore } from \"./store\";\n\nconst adminId = \"ADMIN-ID\";\nconst adminToken = \"ADMIN-TOKEN\";\n\n// 获取token\nexport function getToken() {\n    return getStore(adminToken);\n}\n\n// 设置token\nexport function setToken(sid) {\n    return setStore(adminToken, sid, 365);\n}\n\n// 删除token\nexport function removeToken() {\n    return removeStore(adminToken);\n}\n\n// 获取admin_id\nexport function getAdminId() {\n    return getStore(adminId);\n}\n\n// 设置admin_id\nexport function setAdminId(id) {\n    return setStore(adminId, id, 365);\n}\n\n// 删除admin_id\nexport function removeAdminId() {\n    return removeStore(adminId);\n}\n"
  },
  {
    "path": "src/utils/axios.js",
    "content": "import axios from \"axios\";\nimport { Message } from \"element-ui\";\nimport store from \"../store/index\";\nimport { BASE_URL } from \"../config/app\";\nimport router from \"../router/index\";\n\n// 创建axios实例\nconst service = axios.create({\n    baseURL: BASE_URL, // api的base_url\n    timeout: 5000 // 请求超时时间\n});\n\n// request拦截器\nservice.interceptors.request.use(\n    config => {\n        // Do something before request is sent\n        if (store.getters.adminId && store.getters.token) {\n            config.headers[\"X-Adminid\"] = store.getters.adminId;\n            config.headers[\"X-Token\"] = store.getters.token;\n        }\n        return config;\n    },\n    error => {\n        // Do something with request error\n        Promise.reject(error);\n    }\n);\n\n// respone拦截器\nservice.interceptors.response.use(\n    response => {\n        const data = response.data;\n        if (data.code) {\n            if (data.code === 2) {\n                store.dispatch(\"fedLogout\").then(() => {\n                    Message.error(\"验证失败,请重新登录\");\n                    router.push({\n                        path: \"/login\",\n                        query: { redirect: router.currentRoute.fullPath } // 从哪个页面跳转过来\n                    });\n                });\n            }\n        }\n        return data;\n    },\n    error => {\n        Message({\n            message: error.message,\n            type: \"error\",\n            duration: 5 * 1000\n        });\n        return Promise.reject(error);\n    }\n);\n\nexport default service;\n"
  },
  {
    "path": "src/utils/haiZiToPinYin.js",
    "content": "/**\n * 汉字转拼音\n * Created by Host-0034 on 2018/5/18.\n */\nlet chinesePointCode = {\n    a: [21834, 38463, 38165],\n    ai: [\n        22467,\n        25384,\n        21710,\n        21769,\n        21696,\n        30353,\n        30284,\n        34108,\n        30702,\n        33406,\n        30861,\n        29233,\n        38552,\n        35830,\n        25457,\n        22003,\n        21964,\n        23250,\n        29815,\n        26279,\n        30777,\n        38207,\n        38701\n    ],\n    an: [\n        38797,\n        27688,\n        23433,\n        20474,\n        25353,\n        26263,\n        23736,\n        33018,\n        26696,\n        35865,\n        22511,\n        25566,\n        29364,\n        24245,\n        26697,\n        38133,\n        40524,\n        39032,\n        40687\n    ],\n    ang: [32942, 26114, 30414],\n    ao: [\n        20985,\n        25942,\n        29100,\n        32753,\n        34948,\n        20658,\n        22885,\n        25034,\n        28595,\n        22387,\n        25303,\n        22007,\n        22114,\n        23705,\n        24274,\n        36968,\n        23210,\n        39580,\n        32881,\n        34735,\n        37834,\n        40140,\n        37846\n    ],\n    ba: [\n        33453,\n        25420,\n        25170,\n        21485,\n        21543,\n        31494,\n        20843,\n        30116,\n        24052,\n        25300,\n        36299,\n        38774,\n        25226,\n        32793,\n        22365,\n        38712,\n        32610,\n        29240,\n        33543,\n        33757,\n        33798,\n        25453,\n        23708,\n        28766,\n        26487,\n        38063,\n        31889,\n        40069,\n        39747\n    ],\n    bai: [\n        30333,\n        26575,\n        30334,\n        25670,\n        20336,\n        36133,\n        25308,\n        31255,\n        34204,\n        25520,\n        38836\n    ],\n    ban: [\n        26001,\n        29677,\n        25644,\n        25203,\n        33324,\n        39041,\n        26495,\n        29256,\n        25198,\n        25292,\n        20276,\n        29923,\n        21322,\n        21150,\n        32458,\n        38442,\n        22338,\n        35955,\n        38051,\n        30242,\n        30285,\n        33320\n    ],\n    bang: [\n        37030,\n        24110,\n        26758,\n        27036,\n        33152,\n        32465,\n        26834,\n        30917,\n        34444,\n        38225,\n        20621,\n        35876,\n        33953,\n        34691\n    ],\n    bao: [\n        33502,\n        32990,\n        21253,\n        35090,\n        38649,\n        20445,\n        22561,\n        39281,\n        23453,\n        25265,\n        25253,\n        26292,\n        35961,\n        40077,\n        29190,\n        21241,\n        33862,\n        23424,\n        23394,\n        29042,\n        40488,\n        35091,\n        36277,\n        40837\n    ],\n    bo: [\n        21093,\n        34180,\n        29627,\n        33760,\n        25773,\n        25320,\n        38069,\n        27874,\n        21338,\n        21187,\n        25615,\n        38082,\n        31636,\n        20271,\n        24091,\n        33334,\n        33046,\n        33162,\n        28196,\n        27850,\n        39539,\n        20147,\n        34115,\n        21877,\n        39293,\n        27287,\n        25816,\n        31028,\n        38073,\n        40513,\n        31800,\n        36315\n    ],\n    bei: [\n        26479,\n        30865,\n        24754,\n        21329,\n        21271,\n        36744,\n        32972,\n        36125,\n        38049,\n        20493,\n        29384,\n        22791,\n        24811,\n        28953,\n        34987,\n        23387,\n        38466,\n        37046,\n        22500,\n        34003,\n        21591,\n        24619,\n        24726,\n        30874,\n        40526,\n        35097,\n        37950\n    ],\n    ben: [22868, 33519, 26412, 31528, 30042, 22348, 38171],\n    beng: [23849, 32503, 29997, 27893, 36454, 36856, 21802, 22051, 29967],\n    bi: [\n        36924,\n        40763,\n        27604,\n        37145,\n        31508,\n        24444,\n        30887,\n        34006,\n        34109,\n        27605,\n        27609,\n        27606,\n        24065,\n        24199,\n        30201,\n        38381,\n        25949,\n        24330,\n        24517,\n        36767,\n        22721,\n        33218,\n        36991,\n        38491,\n        21269,\n        20211,\n        20478,\n        33432,\n        33628,\n        33656,\n        21537,\n        21716,\n        29428,\n        24243,\n        24846,\n        28375,\n        28638,\n        24380,\n        22947,\n        23138,\n        23318,\n        29863,\n        36146,\n        30016,\n        38091,\n        31189,\n        35048,\n        31578,\n        31621,\n        31718,\n        33325,\n        35166,\n        36344,\n        39616\n    ],\n    bian: [\n        38829,\n        36793,\n        32534,\n        36140,\n        25153,\n        20415,\n        21464,\n        21342,\n        36776,\n        36777,\n        36779,\n        36941,\n        21310,\n        24321,\n        33476,\n        24557,\n        27764,\n        32527,\n        29048,\n        30765,\n        30885,\n        31289,\n        31366,\n        34649,\n        31550,\n        40138\n    ],\n    biao: [\n        26631,\n        24426,\n        33176,\n        34920,\n        23114,\n        39584,\n        39121,\n        39129,\n        39130,\n        28780,\n        38230,\n        38259,\n        30253,\n        35057,\n        40148\n    ],\n    bie: [40150, 24971, 21035, 30250, 36457, 40152],\n    bin: [\n        24428,\n        25996,\n        28626,\n        28392,\n        23486,\n        25672,\n        20647,\n        27996,\n        32548,\n        29602,\n        27553,\n        33169,\n        38228,\n        39628,\n        39699\n    ],\n    bing: [\n        20853,\n        20912,\n        26564,\n        19993,\n        31177,\n        39292,\n        28851,\n        30149,\n        24182,\n        31104,\n        37044,\n        25682,\n        32480,\n        26507,\n        27103,\n        29177\n    ],\n    bu: [\n        25429,\n        21340,\n        21754,\n        34917,\n        22496,\n        19981,\n        24067,\n        27493,\n        31807,\n        37096,\n        24598,\n        25290,\n        21343,\n        36875,\n        29951,\n        26209,\n        38042,\n        37293\n    ],\n    ca: [25830, 22163, 31012],\n    cai: [\n        29468,\n        35009,\n        26448,\n        25165,\n        36130,\n        30572,\n        36393,\n        37319,\n        24425,\n        33756,\n        34081\n    ],\n    can: [\n        39184,\n        21442,\n        34453,\n        27531,\n        24813,\n        24808,\n        28799,\n        39574,\n        29864,\n        31922,\n        40682\n    ],\n    cang: [33485, 33329, 20179, 27815, 34255, 20263],\n    cao: [25805, 31961, 27133, 26361, 33609, 33401, 22024, 28437, 34732, 33370],\n    ce: [21397, 31574, 20391, 20876, 27979, 20994, 24123, 24699],\n    ceng: [23618, 36461, 22092],\n    cha: [\n        25554,\n        21449,\n        33580,\n        33590,\n        26597,\n        30900,\n        25661,\n        23519,\n        23700,\n        24046,\n        35815,\n        29497,\n        39303,\n        27722,\n        23033,\n        26440,\n        26946,\n        27086,\n        27307,\n        38039,\n        38200,\n        38258,\n        34921\n    ],\n    chai: [25286, 26612, 35962, 20394, 33544, 30245, 34431, 40839],\n    chan: [\n        25600,\n        25530,\n        34633,\n        39307,\n        35863,\n        32544,\n        38130,\n        20135,\n        38416,\n        39076,\n        20865,\n        35844,\n        35894,\n        33927,\n        24283,\n        24527,\n        28538,\n        28598,\n        23409,\n        32700,\n        23157,\n        23319,\n        39587,\n        35271,\n        31109,\n        38241,\n        35043,\n        34814,\n        36500\n    ],\n    chang: [\n        26124,\n        29462,\n        22330,\n        23581,\n        24120,\n        38271,\n        20607,\n        32928,\n        21378,\n        25950,\n        30021,\n        21809,\n        20513,\n        20261,\n        39727,\n        33484,\n        33750,\n        24476,\n        24581,\n        24797,\n        38410,\n        23100,\n        23270,\n        26166,\n        27653,\n        40115\n    ],\n    chao: [\n        36229,\n        25220,\n        38046,\n        26397,\n        22066,\n        28526,\n        24034,\n        21557,\n        28818,\n        24586,\n        32457,\n        26177,\n        32790\n    ],\n    che: [36710, 25199, 25764, 25507, 24443, 28552, 22396, 23662, 30743],\n    chen: [\n        37108,\n        33251,\n        36784,\n        23576,\n        26216,\n        24561,\n        27785,\n        38472,\n        36225,\n        34924,\n        31216,\n        35852,\n        25275,\n        21972,\n        23480,\n        29723,\n        27015,\n        32924,\n        32962,\n        30876,\n        40832\n    ],\n    cheng: [\n        25745,\n        22478,\n        27225,\n        25104,\n        21576,\n        20056,\n        31243,\n        24809,\n        28548,\n        35802,\n        25215,\n        36894,\n        39563,\n        31204,\n        22485,\n        23882,\n        24501,\n        27976,\n        26536,\n        26621,\n        27160,\n        26207,\n        22605,\n        30624,\n        38102,\n        35022,\n        34511,\n        37234\n    ],\n    chi: [\n        21507,\n        30196,\n        25345,\n        21273,\n        27744,\n        36831,\n        24347,\n        39536,\n        32827,\n        40831,\n        20360,\n        23610,\n        36196,\n        32709,\n        26021,\n        28861,\n        20666,\n        22656,\n        33450,\n        33548,\n        25611,\n        21489,\n        21735,\n        21883,\n        21988,\n        24435,\n        39276,\n        27826,\n        23224,\n        25941,\n        32989,\n        30489,\n        30517,\n        40497,\n        30235,\n        35115,\n        34473,\n        34733,\n        31518,\n        31722,\n        35913,\n        36357,\n        36383,\n        39761\n    ],\n    chong: [\n        20805,\n        20914,\n        34411,\n        23815,\n        23456,\n        33594,\n        24545,\n        24999,\n        38131,\n        33375\n    ],\n    chou: [\n        25277,\n        37228,\n        30068,\n        36364,\n        31264,\n        24833,\n        31609,\n        20167,\n        32504,\n        30597,\n        19985,\n        20454,\n        22323,\n        24113,\n        24774,\n        28340,\n        22959,\n        30259,\n        38624,\n        40075\n    ],\n    chu: [\n        33261,\n        21021,\n        20986,\n        27249,\n        21416,\n        36487,\n        38148,\n        38607,\n        28353,\n        38500,\n        26970,\n        30784,\n        20648,\n        30679,\n        25616,\n        35302,\n        22788,\n        20109,\n        21005,\n        25015,\n        32460,\n        26485,\n        26990,\n        27159,\n        34573,\n        36464,\n        40668\n    ],\n    chuan: [\n        25571,\n        24029,\n        31359,\n        26941,\n        20256,\n        33337,\n        21912,\n        20018,\n        25534,\n        33307,\n        24820,\n        36932,\n        24027,\n        27674,\n        38031,\n        38249,\n        33313\n    ],\n    chuang: [30126, 31383, 24162, 24202, 38383, 21019, 24582],\n    chui: [21561, 28810, 25462, 38180, 22402, 38514, 26864, 27084],\n    chun: [\n        26149,\n        26943,\n        37255,\n        21767,\n        28147,\n        32431,\n        34850,\n        20419,\n        33724,\n        27788,\n        32939,\n        26384,\n        40529,\n        34685\n    ],\n    chuo: [25139, 32496, 34079, 36790, 36749, 38238, 36372, 40842],\n    ci: [\n        30133,\n        33576,\n        30913,\n        38604,\n        36766,\n        24904,\n        29943,\n        35789,\n        27492,\n        21050,\n        36176,\n        27425,\n        33632,\n        21618,\n        23919,\n        40538,\n        34693,\n        31949,\n        36241\n    ],\n    cong: [\n        32874,\n        33905,\n        22257,\n        21254,\n        20174,\n        19995,\n        20588,\n        33473,\n        28121,\n        39586,\n        29742,\n        29825,\n        26526\n    ],\n    cu: [20945, 31895, 37259, 31751, 29469, 27522, 36441],\n    cuan: [36479, 31713, 31388, 27718, 25786, 26133, 29224],\n    cui: [\n        25703,\n        23828,\n        20652,\n        33030,\n        30209,\n        31929,\n        28140,\n        32736,\n        33795,\n        24756,\n        29824,\n        27057,\n        38585\n    ],\n    cun: [26449, 23384, 23544, 30923, 24534, 30388],\n    cuo: [\n        25774,\n        25619,\n        25514,\n        25387,\n        38169,\n        21405,\n        33054,\n        38153,\n        30700,\n        30180,\n        40574,\n        36425,\n        36508\n    ],\n    da: [\n        25645,\n        36798,\n        31572,\n        30249,\n        25171,\n        22823,\n        32823,\n        21714,\n        21970,\n        24603,\n        22962,\n        30136,\n        35105,\n        31530,\n        38780,\n        38801\n    ],\n    dai: [\n        21574,\n        27513,\n        20643,\n        25140,\n        24102,\n        27526,\n        20195,\n        36151,\n        34955,\n        24453,\n        36910,\n        24608,\n        22509,\n        29977,\n        21588,\n        23729,\n        36840,\n        36911,\n        39552,\n        32464,\n        29619,\n        40667\n    ],\n    dan: [\n        32829,\n        25285,\n        20025,\n        21333,\n        37112,\n        25528,\n        32966,\n        26086,\n        27694,\n        20294,\n        24814,\n        28129,\n        35806,\n        24377,\n        34507,\n        20155,\n        20747,\n        21353,\n        33807,\n        21846,\n        28601,\n        27280,\n        27546,\n        36181,\n        30472,\n        30213,\n        32835,\n        31658\n    ],\n    dang: [\n        24403,\n        25377,\n        20826,\n        33633,\n        26723,\n        35872,\n        20988,\n        33770,\n        23445,\n        30720,\n        38107,\n        35014\n    ],\n    dao: [\n        20992,\n        25443,\n        36424,\n        20498,\n        23707,\n        31095,\n        23548,\n        21040,\n        31291,\n        24764,\n        36947,\n        30423,\n        21480,\n        21825,\n        24521,\n        27950,\n        27672,\n        28952,\n        24529,\n        32411\n    ],\n    de: [24503, 24471, 30340, 38173],\n    deng: [\n        36460,\n        28783,\n        30331,\n        31561,\n        30634,\n        20979,\n        37011,\n        22100,\n        23965,\n        25125,\n        30964,\n        38251,\n        31782\n    ],\n    di: [\n        22564,\n        20302,\n        28404,\n        36842,\n        25932,\n        31515,\n        29380,\n        28068,\n        32735,\n        23265,\n        25269,\n        24213,\n        22320,\n        33922,\n        31532,\n        24093,\n        24351,\n        36882,\n        32532,\n        27664,\n        31860,\n        35787,\n        35867,\n        37048,\n        22395,\n        33692,\n        33659,\n        22016,\n        23075,\n        26594,\n        26851,\n        35276,\n        30757,\n        30898,\n        30535,\n        38237,\n        32669,\n        39606\n    ],\n    dian: [\n        39072,\n        25474,\n        28359,\n        30872,\n        28857,\n        20856,\n        38747,\n        22443,\n        30005,\n        20291,\n        30008,\n        24215,\n        24806,\n        22880,\n        28096,\n        27583,\n        20022,\n        38461,\n        22379,\n        22493,\n        24005,\n        29623,\n        30300,\n        30315,\n        31775,\n        36398\n    ],\n    diao: [\n        30857,\n        21500,\n        38613,\n        20939,\n        20993,\n        25481,\n        21514,\n        38035,\n        35843,\n        36730,\n        38110,\n        34601,\n        31900,\n        35970\n    ],\n    die: [\n        36300,\n        29241,\n        30879,\n        34678,\n        36845,\n        35853,\n        21472,\n        20314,\n        22436,\n        22558,\n        25586,\n        21899,\n        28203,\n        36726,\n        29266,\n        29918,\n        35126,\n        32779,\n        36416,\n        40125,\n        40142\n    ],\n    ding: [\n        19969,\n        30447,\n        21486,\n        38025,\n        39030,\n        40718,\n        38189,\n        23450,\n        35746,\n        20002,\n        20163,\n        21878,\n        29582,\n        33114,\n        30855,\n        30010,\n        38116,\n        30100,\n        32821,\n        37194\n    ],\n    dong: [\n        19996,\n        20908,\n        33891,\n        25026,\n        21160,\n        26635,\n        20375,\n        24683,\n        20923,\n        27934,\n        22412,\n        21658,\n        23741,\n        23762,\n        22786,\n        27681,\n        33000,\n        33012,\n        30800,\n        40491\n    ],\n    dou: [\n        20828,\n        25238,\n        26007,\n        38497,\n        35910,\n        36887,\n        30168,\n        34104,\n        38061,\n        31398,\n        31404,\n        34474,\n        31740,\n        37217\n    ],\n    du: [\n        37117,\n        30563,\n        27602,\n        29322,\n        29420,\n        35835,\n        22581,\n        30585,\n        36172,\n        26460,\n        38208,\n        32922,\n        24230,\n        28193,\n        22930,\n        33423,\n        22047,\n        28174,\n        26911,\n        27216,\n        29261,\n        34873,\n        31491,\n        39633,\n        40681\n    ],\n    duan: [\n        31471,\n        30701,\n        38203,\n        27573,\n        26029,\n        32526,\n        24406,\n        26932,\n        28997,\n        31766\n    ],\n    dui: [22534, 20817, 38431, 23545, 24636, 24989, 30867],\n    dun: [\n        22697,\n        21544,\n        36466,\n        25958,\n        39039,\n        22244,\n        38045,\n        30462,\n        36929,\n        28822,\n        30744,\n        30981,\n        30457,\n        38246,\n        36280\n    ],\n    duo: [\n        25479,\n        21702,\n        22810,\n        22842,\n        22427,\n        36530,\n        26421,\n        36346,\n        33333,\n        21057,\n        24816,\n        22549,\n        21636,\n        21722,\n        32525,\n        26561,\n        38094,\n        35056,\n        36401\n    ],\n    e: [\n        34558,\n        23784,\n        40517,\n        20420,\n        39069,\n        35769,\n        23077,\n        24694,\n        21380,\n        25212,\n        36943,\n        37122,\n        39295,\n        22121,\n        35860,\n        22441,\n        22445,\n        33482,\n        33706,\n        33852,\n        21571,\n        24853,\n        23641,\n        23104,\n        36717,\n        26359,\n        33133,\n        30826,\n        38151,\n        38199,\n        40535,\n        39066,\n        40132\n    ],\n    en: [24681, 33981, 25665, 21780, 21999],\n    er: [\n        32780,\n        20799,\n        32819,\n        23572,\n        39285,\n        27953,\n        20108,\n        36144,\n        36841,\n        29669,\n        38098,\n        40504,\n        40085\n    ],\n    fa: [21457, 32602, 31567, 20240, 20047, 38400, 27861, 29648, 22433, 30749],\n    fan: [\n        34281,\n        24070,\n        30058,\n        32763,\n        27146,\n        30718,\n        38034,\n        32321,\n        20961,\n        28902,\n        21453,\n        36820,\n        33539,\n        36137,\n        29359,\n        39277,\n        27867,\n        34345,\n        24161,\n        29357,\n        26805,\n        25909,\n        29140,\n        30024,\n        36463\n    ],\n    fang: [\n        22346,\n        33459,\n        26041,\n        32938,\n        25151,\n        38450,\n        22952,\n        20223,\n        35775,\n        32442,\n        25918,\n        21274,\n        37025,\n        24439,\n        38059,\n        33323,\n        40066\n    ],\n    fei: [\n        33778,\n        38750,\n        21857,\n        39134,\n        32933,\n        21290,\n        35837,\n        21536,\n        32954,\n        24223,\n        27832,\n        36153,\n        33470,\n        29394,\n        24753,\n        28125,\n        22915,\n        32459,\n        32495,\n        27047,\n        33107,\n        26000,\n        25161,\n        31059,\n        30761,\n        38212,\n        30193,\n        34586,\n        31706,\n        32737,\n        38671,\n        40113\n    ],\n    fen: [\n        33452,\n        37210,\n        21545,\n        27675,\n        20998,\n        32439,\n        22367,\n        28954,\n        27774,\n        31881,\n        22859,\n        20221,\n        24575,\n        24868,\n        31914,\n        20606,\n        28725,\n        26876,\n        24845,\n        40124,\n        40738\n    ],\n    feng: [\n        20016,\n        23553,\n        26539,\n        34562,\n        23792,\n        38155,\n        39118,\n        30127,\n        28925,\n        36898,\n        20911,\n        32541,\n        35773,\n        22857,\n        20964,\n        20472,\n        37190,\n        33873,\n        27811,\n        30748\n    ],\n    fu: [\n        20315,\n        21542,\n        22827,\n        25975,\n        32932,\n        23413,\n        25206,\n        25282,\n        36752,\n        24133,\n        27679,\n        31526,\n        20239,\n        20440,\n        26381,\n        28014,\n        28074,\n        31119,\n        34993,\n        24343,\n        29995,\n        25242,\n        36741,\n        20463,\n        37340,\n        26023,\n        33071,\n        33105,\n        24220,\n        33104,\n        36212,\n        21103,\n        35206,\n        36171,\n        22797,\n        20613,\n        20184,\n        38428,\n        29238,\n        33145,\n        36127,\n        23500,\n        35747,\n        38468,\n        22919,\n        32538,\n        21648,\n        21264,\n        20971,\n        37083,\n        33433,\n        33531,\n        33583,\n        33705,\n        33748,\n        21579,\n        24158,\n        28367,\n        33396,\n        23386,\n        39544,\n        32450,\n        26740,\n        36185,\n        40699,\n        40700,\n        32600,\n        31235,\n        39333,\n        34381,\n        34472,\n        34569,\n        34656,\n        34670,\n        40632,\n        36282,\n        36311,\n        40134\n    ],\n    ga: [22134, 22030, 34532, 23596, 21623, 23573, 23580, 26094, 38022],\n    gai: [\n        35813,\n        25913,\n        27010,\n        38041,\n        30422,\n        28297,\n        19984,\n        38484,\n        22419,\n        25124,\n        36165,\n        33010\n    ],\n    gan: [\n        24178,\n        29976,\n        26438,\n        26577,\n        31487,\n        32925,\n        36214,\n        24863,\n        31174,\n        25954,\n        36195,\n        22377,\n        33527,\n        23604,\n        25792,\n        27860,\n        28134,\n        28553,\n        32448,\n        27204,\n        26096,\n        30712,\n        30131,\n        37200\n    ],\n    gang: [\n        20872,\n        21018,\n        38050,\n        32568,\n        32923,\n        32434,\n        23703,\n        28207,\n        25094,\n        32609,\n        39043,\n        31611\n    ],\n    gong: [\n        26464,\n        24037,\n        25915,\n        21151,\n        24685,\n        40858,\n        20379,\n        36524,\n        20844,\n        23467,\n        24339,\n        24041,\n        27742,\n        25329,\n        36129,\n        20849,\n        34171,\n        24318,\n        21667,\n        29657,\n        32945,\n        34467,\n        34537,\n        35301\n    ],\n    gao: [\n        31705,\n        30347,\n        39640,\n        33167,\n        32660,\n        31957,\n        25630,\n        38224,\n        31295,\n        21578,\n        30590,\n        35824,\n        37084,\n        33983,\n        34241,\n        32543,\n        27092,\n        27073,\n        26482,\n        38150\n    ],\n    ge: [\n        21733,\n        27468,\n        25601,\n        25096,\n        40509,\n        33011,\n        30105,\n        21106,\n        38761,\n        33883,\n        26684,\n        38401,\n        38548,\n        38124,\n        20010,\n        21508,\n        39730,\n        20193,\n        21759,\n        22629,\n        21981,\n        32421,\n        25663,\n        33160,\n        30796,\n        38122,\n        38217,\n        35004,\n        39052,\n        34428,\n        33336,\n        39612,\n        39618\n    ],\n    gei: [32473],\n    gen: [26681, 36319, 20120, 33563, 21711, 33390],\n    geng: [\n        32789,\n        26356,\n        24218,\n        32697,\n        22466,\n        32831,\n        26775,\n        21757,\n        36179,\n        40096\n    ],\n    gou: [\n        38057,\n        21246,\n        27807,\n        33503,\n        29399,\n        22434,\n        26500,\n        36141,\n        22815,\n        20317,\n        35807,\n        23715,\n        36952,\n        23230,\n        32529,\n        35279,\n        24384,\n        40498,\n        31537,\n        31709,\n        38834\n    ],\n    gu: [\n        36764,\n        33735,\n        21653,\n        31629,\n        20272,\n        27837,\n        23396,\n        22993,\n        40723,\n        21476,\n        34506,\n        39592,\n        35895,\n        32929,\n        25925,\n        39038,\n        22266,\n        38599,\n        22031,\n        35778,\n        33776,\n        21708,\n        23854,\n        27753,\n        26767,\n        36721,\n        29295,\n        29311,\n        32973,\n        33228,\n        27586,\n        30653,\n        32607,\n        38068,\n        38178,\n        29920,\n        40490,\n        40516,\n        30204,\n        34500,\n        37220,\n        35290,\n        40116,\n        39600,\n        40536\n    ],\n    gua: [\n        21038,\n        29916,\n        21072,\n        23521,\n        25346,\n        35074,\n        21350,\n        35798,\n        21617,\n        26653,\n        40505\n    ],\n    guai: [20054, 25296, 24618, 21721],\n    guan: [\n        26874,\n        20851,\n        23448,\n        20896,\n        35266,\n        31649,\n        39302,\n        32592,\n        24815,\n        28748,\n        36143,\n        20492,\n        33694,\n        25532,\n        28075,\n        30437,\n        40563,\n        40143\n    ],\n    guang: [20809, 24191, 36891, 29367, 26692, 33009, 30098],\n    gui: [\n        29808,\n        35268,\n        22317,\n        30789,\n        24402,\n        40863,\n        38394,\n        36712,\n        39740,\n        35809,\n        30328,\n        26690,\n        26588,\n        36330,\n        36149,\n        21053,\n        21286,\n        21055,\n        24203,\n        23428,\n        22955,\n        26727,\n        28805,\n        26231,\n        30344,\n        31755,\n        40081,\n        40156\n    ],\n    gun: [36746, 28378, 26829, 20008, 34926, 32498, 30937, 40103],\n    guo: [\n        38149,\n        37101,\n        22269,\n        26524,\n        35065,\n        36807,\n        39320,\n        34819,\n        22490,\n        25524,\n        21593,\n        22231,\n        24124,\n        23838,\n        29459,\n        26881,\n        34402,\n        38174,\n        32850,\n        34606,\n        34622,\n        34632\n    ],\n    ha: [21704],\n    hai: [\n        39608,\n        23401,\n        28023,\n        27686,\n        20133,\n        23475,\n        39559,\n        21684,\n        21992,\n        39055,\n        37282\n    ],\n    han: [\n        37219,\n        25000,\n        37039,\n        38889,\n        21547,\n        28085,\n        23506,\n        20989,\n        21898,\n        32597,\n        32752,\n        25788,\n        25421,\n        26097,\n        25022,\n        24717,\n        28938,\n        27735,\n        27721,\n        37015,\n        33761,\n        25750,\n        38426,\n        28698,\n        26199,\n        28947,\n        39060,\n        34486,\n        40766\n    ],\n    hen: [22831, 30165, 24456, 29408, 24680],\n    hang: [26477, 33322, 27782, 32471, 29673, 26689],\n    hao: [\n        22741,\n        22158,\n        35946,\n        27627,\n        37085,\n        22909,\n        32791,\n        21495,\n        28009,\n        34181,\n        21989,\n        22150,\n        28640,\n        28751,\n        26122,\n        30355,\n        39074,\n        34461\n    ],\n    he: [\n        21621,\n        21917,\n        33655,\n        33743,\n        26680,\n        31166,\n        21644,\n        20309,\n        21512,\n        30418,\n        35977,\n        38402,\n        27827,\n        28088,\n        36203,\n        35088,\n        40548,\n        36154,\n        35779,\n        21182,\n        22737,\n        34303,\n        21969,\n        21996,\n        38422,\n        30413,\n        34485,\n        32750\n    ],\n    hei: [22079, 40657],\n    heng: [21756, 20136, 27178, 34913, 24658, 35335, 34309],\n    hong: [\n        36720,\n        21700,\n        28888,\n        34425,\n        40511,\n        27946,\n        23439,\n        24344,\n        32418,\n        40649,\n        35751,\n        33645,\n        34216,\n        38387,\n        27859\n    ],\n    hou: [\n        21897,\n        20399,\n        29492,\n        21564,\n        21402,\n        20505,\n        21518,\n        22560,\n        24460,\n        36869,\n        30218,\n        31692,\n        31943,\n        40078,\n        39610\n    ],\n    hu: [\n        21628,\n        20046,\n        24573,\n        29786,\n        22774,\n        33899,\n        32993,\n        34676,\n        29392,\n        31946,\n        28246,\n        24359,\n        34382,\n        21804,\n        25252,\n        20114,\n        27818,\n        25143,\n        20913,\n        21823,\n        22251,\n        23733,\n        29474,\n        24601,\n        24794,\n        27986,\n        28409,\n        29733,\n        27122,\n        36727,\n        35315,\n        28864,\n        29043,\n        25149,\n        25160,\n        31068,\n        40533,\n        40561,\n        31503,\n        37264,\n        26011\n    ],\n    hua: [\n        33457,\n        21719,\n        21326,\n        29502,\n        28369,\n        30011,\n        21010,\n        21270,\n        35805,\n        21136,\n        27981,\n        39557,\n        26726,\n        38119,\n        31262\n    ],\n    huai: [27088, 24458, 24576, 28142, 22351, 36824, 36381],\n    huan: [\n        27426,\n        29615,\n        26707,\n        32531,\n        25442,\n        24739,\n        21796,\n        30186,\n        35938,\n        28949,\n        28067,\n        23462,\n        24187,\n        37063,\n        22850,\n        22456,\n        25808,\n        22300,\n        27961,\n        28003,\n        28470,\n        23536,\n        36909,\n        32563,\n        38206,\n        40105,\n        39711\n    ],\n    huang: [\n        33618,\n        24908,\n        40644,\n        30970,\n        34647,\n        31783,\n        30343,\n        20976,\n        24822,\n        29004,\n        26179,\n        24140,\n        24653,\n        35854,\n        38541,\n        24488,\n        28255,\n        28514,\n        36945,\n        29852,\n        32915,\n        30272,\n        34789,\n        31681,\n        40135\n    ],\n    hui: [\n        28784,\n        25381,\n        36745,\n        24509,\n        24674,\n        34516,\n        22238,\n        27585,\n        24724,\n        24935,\n        21321,\n        24800,\n        26214,\n        36159,\n        31229,\n        20250,\n        28905,\n        27719,\n        35763,\n        35826,\n        32472,\n        35801,\n        33588,\n        33631,\n        34137,\n        21717,\n        21913,\n        38579,\n        27908,\n        24407,\n        32523,\n        29682,\n        26198,\n        24666,\n        34426,\n        34794,\n        40638\n    ],\n    hun: [\n        33636,\n        26127,\n        23130,\n        39746,\n        27985,\n        28151,\n        35816,\n        39300,\n        38413,\n        28343,\n        32535\n    ],\n    huo: [\n        35905,\n        27963,\n        20249,\n        28779,\n        33719,\n        25110,\n        24785,\n        38669,\n        36135,\n        31096,\n        25865,\n        22191,\n        22821,\n        38060,\n        38186,\n        38252,\n        32800,\n        34838\n    ],\n    ji: [\n        20987,\n        22334,\n        22522,\n        26426,\n        30072,\n        31293,\n        31215,\n        31637,\n        32908,\n        39269,\n        36857,\n        28608,\n        35749,\n        40481,\n        23020,\n        32489,\n        32521,\n        21513,\n        26497,\n        26840,\n        36753,\n        31821,\n        38598,\n        21450,\n        24613,\n        30142,\n        27762,\n        21363,\n        23241,\n        32423,\n        25380,\n        20960,\n        33034,\n        24049,\n        34015,\n        25216,\n        20864,\n        23395,\n        20238,\n        31085,\n        21058,\n        24760,\n        27982,\n        23492,\n        23490,\n        35745,\n        35760,\n        26082,\n        24524,\n        38469,\n        22931,\n        32487,\n        32426,\n        23621,\n        19980,\n        20073,\n        21086,\n        20342,\n        20340,\n        33044,\n        22716,\n        33448,\n        33456,\n        33793,\n        33978,\n        34170,\n        25486,\n        21501,\n        21677,\n        21724,\n        21799,\n        23692,\n        23924,\n        27918,\n        24400,\n        23632,\n        39589,\n        30079,\n        29585,\n        26987,\n        27547,\n        25119,\n        25122,\n        36173,\n        35274,\n        29316,\n        40785,\n        30710,\n        32641,\n        23879,\n        31287,\n        30240,\n        30261,\n        34414,\n        31496,\n        31492,\n        26280,\n        36347,\n        36349,\n        38657,\n        40090,\n        40107,\n        39675,\n        40578\n    ],\n    jia: [\n        22025,\n        26551,\n        22841,\n        20339,\n        23478,\n        21152,\n        33626,\n        39050,\n        36158,\n        30002,\n        38078,\n        20551,\n        31292,\n        20215,\n        26550,\n        39550,\n        23233,\n        20285,\n        37071,\n        25326,\n        23724,\n        27971,\n        36838,\n        29640,\n        25115,\n        32987,\n        24669,\n        38103,\n        38227,\n        30146,\n        34545,\n        31539,\n        34952,\n        36303\n    ],\n    jian: [\n        27516,\n        30417,\n        22362,\n        23574,\n        31546,\n        38388,\n        29006,\n        20860,\n        32937,\n        33392,\n        22904,\n        32516,\n        33575,\n        26816,\n        26604,\n        30897,\n        30839,\n        25315,\n        25441,\n        31616,\n        20461,\n        21098,\n        20943,\n        33616,\n        27099,\n        37492,\n        36341,\n        36145,\n        35265,\n        38190,\n        31661,\n        20214,\n        20581,\n        33328,\n        21073,\n        39279,\n        28176,\n        28293,\n        28071,\n        24314,\n        20717,\n        35855,\n        35883,\n        33733,\n        33977,\n        25627,\n        22237,\n        28244,\n        36423,\n        35591,\n        32547,\n        26535,\n        26585,\n        26967,\n        25099,\n        25132,\n        29294,\n        29325,\n        27645,\n        33137,\n        30545,\n        38159,\n        40547,\n        35045,\n        31509,\n        31668,\n        32742,\n        36284,\n        36410,\n        40099,\n        38831\n    ],\n    jiang: [\n        20725,\n        23004,\n        23558,\n        27974,\n        27743,\n        30086,\n        33931,\n        26728,\n        22870,\n        35762,\n        21280,\n        37233,\n        38477,\n        33587,\n        27930,\n        32475,\n        32560,\n        29343,\n        30995,\n        32809,\n        31976,\n        35911\n    ],\n    jiao: [\n        34121,\n        26898,\n        30977,\n        28966,\n        33014,\n        20132,\n        37066,\n        27975,\n        39556,\n        23047,\n        22204,\n        25605,\n        38128,\n        30699,\n        20389,\n        33050,\n        29409,\n        35282,\n        39290,\n        32564,\n        32478,\n        21119,\n        25945,\n        37237,\n        36735,\n        36739,\n        21483,\n        20348,\n        20716,\n        33581,\n        25378,\n        22093,\n        23780,\n        24508,\n        23011,\n        32415,\n        25963,\n        30350,\n        40554,\n        34527,\n        37294,\n        36324,\n        40091\n    ],\n    jie: [\n        31382,\n        25581,\n        25509,\n        30342,\n        31224,\n        34903,\n        38454,\n        25130,\n        21163,\n        33410,\n        26708,\n        26480,\n        25463,\n        30571,\n        31469,\n        27905,\n        32467,\n        35299,\n        22992,\n        25106,\n        34249,\n        33445,\n        30028,\n        20511,\n        20171,\n        30117,\n        35819,\n        23626,\n        20552,\n        35750,\n        35800,\n        21896,\n        21983,\n        29548,\n        23125,\n        23377,\n        26688,\n        29522,\n        30883,\n        38196,\n        30102,\n        34999,\n        39049,\n        34471,\n        32687,\n        40082,\n        39601,\n        39659\n    ],\n    jin: [\n        24062,\n        31563,\n        26020,\n        37329,\n        20170,\n        27941,\n        35167,\n        32039,\n        38182,\n        20165,\n        35880,\n        36827,\n        38771,\n        26187,\n        31105,\n        36817,\n        28908,\n        28024,\n        23613,\n        21370,\n        33641,\n        22535,\n        22116,\n        39313,\n        24273,\n        22935,\n        32537,\n        29822,\n        27135,\n        36166,\n        35280,\n        38021,\n        38163,\n        34943,\n        30684\n    ],\n    jing: [\n        21170,\n        33606,\n        20834,\n        33550,\n        30555,\n        26230,\n        40120,\n        20140,\n        24778,\n        31934,\n        31923,\n        32463,\n        20117,\n        35686,\n        26223,\n        39048,\n        38745,\n        22659,\n        25964,\n        38236,\n        24452,\n        30153,\n        38742,\n        31455,\n        31454,\n        20928,\n        21037,\n        20742,\n        38449,\n        33729,\n        29517,\n        25004,\n        27902,\n        36851,\n        24362,\n        23143,\n        32956,\n        33003,\n        33096,\n        26060\n    ],\n    jiong: [28847, 31384, 20866, 36837, 25155],\n    jiu: [\n        25578,\n        31350,\n        32416,\n        29590,\n        38893,\n        20037,\n        28792,\n        20061,\n        37202,\n        21417,\n        25937,\n        26087,\n        33276,\n        33285,\n        21646,\n        23601,\n        30106,\n        20710,\n        21886,\n        38404,\n        26601,\n        26709,\n        40555,\n        36211,\n        39695\n    ],\n    ju: [\n        38816,\n        25304,\n        29401,\n        30141,\n        39545,\n        33738,\n        23616,\n        21632,\n        30697,\n        20030,\n        27822,\n        32858,\n        25298,\n        25454,\n        24040,\n        20855,\n        36317,\n        36382,\n        38191,\n        20465,\n        21477,\n        24807,\n        28844,\n        21095,\n        20520,\n        35765,\n        33507,\n        33524,\n        33682,\n        25516,\n        36989,\n        23654,\n        29722,\n        26552,\n        26896,\n        27032,\n        27017,\n        27224,\n        29323,\n        39123,\n        38044,\n        38164,\n        31405,\n        35070,\n        36228,\n        37301,\n        36413,\n        40835,\n        38606,\n        38827\n    ],\n    juan: [\n        25424,\n        40515,\n        23071,\n        20518,\n        30519,\n        21367,\n        32482,\n        37124,\n        29431,\n        28051,\n        26698,\n        34866,\n        38185,\n        38220,\n        38589\n    ],\n    jue: [\n        25733,\n        25899,\n        25225,\n        25496,\n        20500,\n        29237,\n        35273,\n        20915,\n        35776,\n        32477,\n        21413,\n        21122,\n        35890,\n        30669,\n        34152,\n        22104,\n        23835,\n        29527,\n        23379,\n        29647,\n        26743,\n        27227,\n        29213,\n        38242,\n        36470,\n        35286\n    ],\n    jun: [\n        22343,\n        33740,\n        38055,\n        20891,\n        21531,\n        23803,\n        20426,\n        31459,\n        27994,\n        37089,\n        39567,\n        25411,\n        29435,\n        30386,\n        31584,\n        40583\n    ],\n    ka: [21888, 21654, 21345, 20327, 21652, 33001],\n    ke: [\n        21679,\n        22391,\n        33499,\n        26607,\n        26869,\n        30933,\n        39063,\n        31185,\n        22771,\n        21683,\n        21487,\n        28212,\n        20811,\n        21051,\n        23458,\n        35838,\n        23714,\n        24682,\n        28312,\n        39570,\n        32514,\n        29634,\n        36722,\n        27690,\n        30604,\n        38070,\n        30132,\n        31392,\n        34636,\n        39617\n    ],\n    kai: [\n        24320,\n        25577,\n        26999,\n        20975,\n        24936,\n        21056,\n        22450,\n        33928,\n        24574,\n        24698,\n        38112,\n        38158\n    ],\n    kan: [\n        21002,\n        22570,\n        21208,\n        22350,\n        30733,\n        30475,\n        20355,\n        20981,\n        33712,\n        33718,\n        25121,\n        40859,\n        30640\n    ],\n    kang: [\n        24247,\n        24951,\n        31968,\n        25179,\n        25239,\n        20130,\n        28821,\n        22353,\n        20233,\n        38390,\n        38058\n    ],\n    kao: [32771, 25335, 28900, 38752, 23611, 26674, 29330, 38096],\n    ken: [32943, 21827, 22438, 24691, 22432, 35017, 39040],\n    keng: [21549, 24528, 38143],\n    kong: [31354, 24656, 23380, 25511, 20517, 23814, 31644],\n    kou: [25248, 21475, 25187, 23495, 33444, 34107, 21481, 30477, 31576],\n    ku: [\n        26543,\n        21741,\n        31391,\n        33510,\n        37239,\n        24211,\n        35044,\n        21043,\n        22528,\n        21950,\n        32468,\n        39607\n    ],\n    kua: [22840, 22446, 25358, 36328, 33007, 20361],\n    kuai: [22359, 31607, 20393, 24555, 33967, 37072, 33929, 29423, 33037],\n    kuan: [23485, 27454, 39627],\n    kuang: [\n        21281,\n        31568,\n        29378,\n        26694,\n        30719,\n        30518,\n        26103,\n        20917,\n        35795,\n        35827,\n        37021,\n        22329,\n        22844,\n        21712,\n        32425,\n        36150\n    ],\n    kui: [\n        20111,\n        30420,\n        23743,\n        31397,\n        33909,\n        22862,\n        39745,\n        20608,\n        39304,\n        24871,\n        28291,\n        39319,\n        21294,\n        22804,\n        38551,\n        25542,\n        21945,\n        21919,\n        24733,\n        24870,\n        38421,\n        36917,\n        26252,\n        30589,\n        32873,\n        34672,\n        31697,\n        33278,\n        36332\n    ],\n    kun: [\n        22372,\n        26118,\n        25414,\n        22256,\n        24707,\n        38403,\n        29736,\n        38175,\n        37260,\n        40114,\n        39649\n    ],\n    kuo: [25324, 25193, 24275, 38420, 34526],\n    la: [\n        22403,\n        25289,\n        21895,\n        34593,\n        33098,\n        36771,\n        21862,\n        21068,\n        25722,\n        37003,\n        26095,\n        30764,\n        30220\n    ],\n    lai: [\n        33713,\n        26469,\n        36182,\n        23811,\n        24469,\n        28062,\n        28625,\n        36169,\n        30544,\n        38140,\n        30302,\n        31809\n    ],\n    lan: [\n        34013,\n        23146,\n        26639,\n        25318,\n        31726,\n        38417,\n        20848,\n        28572,\n        35888,\n        25597,\n        35272,\n        25042,\n        32518,\n        28866,\n        28389,\n        21833,\n        23706,\n        25044,\n        28452,\n        27012,\n        26003,\n        32625,\n        38247,\n        35124\n    ],\n    lang: [\n        29701,\n        27028,\n        29436,\n        24266,\n        37070,\n        26391,\n        28010,\n        33704,\n        33943,\n        21879,\n        38406,\n        38162,\n        31234,\n        34690\n    ],\n    lao: [\n        25438,\n        21171,\n        29282,\n        32769,\n        20332,\n        23013,\n        37226,\n        28889,\n        28061,\n        21792,\n        23810,\n        26675,\n        38097,\n        38137,\n        30184,\n        37290\n    ],\n    le: [21202, 20048, 32907, 20162, 21499, 22046, 27856, 40147],\n    lei: [\n        38647,\n        38253,\n        34174,\n        30922,\n        32047,\n        20769,\n        22418,\n        25794,\n        31867,\n        27882,\n        32696,\n        35796,\n        33661,\n        21671,\n        28463,\n        23256,\n        32551,\n        27281,\n        32786,\n        37241\n    ],\n    ling: [\n        26865,\n        20919,\n        25294,\n        29618,\n        33777,\n        38646,\n        40836,\n        38083,\n        20278,\n        32666,\n        20940,\n        28789,\n        38517,\n        23725,\n        39046,\n        21478,\n        20196,\n        37187,\n        22596,\n        33491,\n        21604,\n        22265,\n        27872,\n        32491,\n        26563,\n        26818,\n        29940,\n        32838,\n        34505,\n        32718,\n        40110\n    ],\n    leng: [26974, 24867],\n    li: [\n        21400,\n        26792,\n        29313,\n        40654,\n        31729,\n        29432,\n        31163,\n        28435,\n        29702,\n        26446,\n        37324,\n        40100,\n        31036,\n        33673,\n        33620,\n        21519,\n        26647,\n        20029,\n        21385,\n        21169,\n        30782,\n        21382,\n        21033,\n        20616,\n        20363,\n        20432,\n        30178,\n        31435,\n        31890,\n        27813,\n        38582,\n        21147,\n        29827,\n        21737,\n        20458,\n        20442,\n        37094,\n        22364,\n        33480,\n        33669,\n        34016,\n        34268,\n        25449,\n        21590,\n        21811,\n        21937,\n        29441,\n        28327,\n        28583,\n        36902,\n        23052,\n        23264,\n        39562,\n        32545,\n        29662,\n        26533,\n        26638,\n        36729,\n        25150,\n        30778,\n        35400,\n        32633,\n        38146,\n        40514,\n        30112,\n        30124,\n        34510,\n        34570,\n        34849,\n        31520,\n        31717,\n        31901,\n        37300,\n        36318,\n        38643,\n        40097,\n        40162,\n        40679\n    ],\n    lian: [\n        20457,\n        32852,\n        33714,\n        36830,\n        38256,\n        24265,\n        24604,\n        28063,\n        24088,\n        25947,\n        33080,\n        38142,\n        24651,\n        28860,\n        32451,\n        25371,\n        34105,\n        22849,\n        28491,\n        28610,\n        23048,\n        29711,\n        26973,\n        27539,\n        33217,\n        33190,\n        35042,\n        34826,\n        40098\n    ],\n    liang: [\n        31918,\n        20937,\n        26753,\n        31921,\n        33391,\n        20004,\n        36742,\n        37327,\n        26238,\n        20142,\n        35845,\n        22682,\n        26891,\n        36361,\n        38739,\n        39753\n    ],\n    liao: [\n        25769,\n        32842,\n        20698,\n        30103,\n        29134,\n        23525,\n        36797,\n        28518,\n        20102,\n        25730,\n        38243,\n        24278,\n        26009,\n        34044,\n        23589,\n        22073,\n        29536,\n        23534,\n        32557,\n        38028,\n        40553,\n        32802\n    ],\n    lie: [\n        21015,\n        35010,\n        28872,\n        21155,\n        29454,\n        20925,\n        22482,\n        27916,\n        36244,\n        36496,\n        39715\n    ],\n    lin: [\n        29747,\n        26519,\n        30967,\n        38678,\n        20020,\n        37051,\n        40158,\n        28107,\n        20955,\n        36161,\n        21533,\n        34106,\n        23961,\n        24298,\n        36980,\n        27305,\n        36762,\n        30645,\n        31932,\n        36495,\n        40607\n    ],\n    liu: [\n        28316,\n        29705,\n        27060,\n        30827,\n        39311,\n        30041,\n        21016,\n        30244,\n        27969,\n        26611,\n        20845,\n        25249,\n        20603,\n        33932,\n        27862,\n        27983,\n        36955,\n        39581,\n        32506,\n        26066,\n        29080,\n        38157,\n        38223,\n        40552,\n        37775\n    ],\n    long: [\n        40857,\n        32843,\n        21657,\n        31548,\n        31423,\n        38534,\n        22404,\n        25314,\n        38471,\n        24324,\n        22405,\n        33551,\n        27895,\n        29649,\n        26634,\n        32999,\n        30779,\n        30275\n    ],\n    lou: [\n        27004,\n        23044,\n        25602,\n        31699,\n        28431,\n        38475,\n        21949,\n        23901,\n        38210,\n        30232,\n        32807,\n        34684,\n        39621\n    ],\n    lu: [\n        33446,\n        21346,\n        39045,\n        24208,\n        28809,\n        25523,\n        21348,\n        34383,\n        40065,\n        40595,\n        30860,\n        38706,\n        36335,\n        36162,\n        40575,\n        28510,\n        31108,\n        24405,\n        38470,\n        25134,\n        22406,\n        25669,\n        25784,\n        22108,\n        27896,\n        28172,\n        28425,\n        29840,\n        26636,\n        27257,\n        36723,\n        36738,\n        36760,\n        27655,\n        33002,\n        38245,\n        40492,\n        40557,\n        31759,\n        33339,\n        40072\n    ],\n    lv: [\n        39540,\n        21525,\n        38109,\n        20387,\n        26053,\n        23653,\n        23649,\n        32533,\n        34385,\n        27695,\n        24459,\n        29575,\n        28388,\n        32511,\n        25419,\n        38398,\n        27016,\n        33154,\n        31238,\n        35099\n    ],\n    luan: [23782, 23402, 28390, 21365, 20081, 26686, 40510, 37550],\n    lue: [25504, 30053, 38154],\n    lun: [36718, 20262, 20177, 27814, 32438, 35770, 22261],\n    luo: [\n        33821,\n        34746,\n        32599,\n        36923,\n        38179,\n        31657,\n        39585,\n        35064,\n        33853,\n        27931,\n        39558,\n        32476,\n        20526,\n        33638,\n        25694,\n        29473,\n        27898,\n        26916,\n        33078,\n        38233,\n        30256,\n        38610\n    ],\n    ma: [\n        22920,\n        40635,\n        29595,\n        30721,\n        34434,\n        39532,\n        39554,\n        22043,\n        21527,\n        21787,\n        29368,\n        23351,\n        26473,\n        40637\n    ],\n    mai: [22475, 20080, 40614, 21334, 36808, 33033, 21154, 33644, 21674, 38718],\n    man: [\n        30610,\n        39314,\n        34542,\n        28385,\n        34067,\n        26364,\n        24930,\n        28459,\n        35881,\n        22657,\n        24148,\n        32550,\n        29107,\n        38232,\n        39071,\n        34728,\n        40151,\n        38804\n    ],\n    mang: [\n        33426,\n        33579,\n        30450,\n        24537,\n        33725,\n        37017,\n        28461,\n        26406,\n        30829,\n        34770\n    ],\n    meng: [\n        27667,\n        33804,\n        33945,\n        27308,\n        30431,\n        38192,\n        29467,\n        26790,\n        23391,\n        21200,\n        29965,\n        30626,\n        25077,\n        31006,\n        34427,\n        34594,\n        34835,\n        33355,\n        33384,\n        40702\n    ],\n    miao: [\n        29483,\n        33495,\n        25551,\n        30596,\n        34256,\n        31186,\n        28218,\n        24217,\n        22937,\n        21941,\n        37000,\n        32520,\n        32554,\n        26474,\n        28156,\n        30471,\n        40523,\n        34609\n    ],\n    mao: [\n        33541,\n        38170,\n        27611,\n        30683,\n        38086,\n        21359,\n        33538,\n        20882,\n        24125,\n        35980,\n        36152,\n        20372,\n        34980,\n        21206,\n        33542,\n        23745,\n        29761,\n        26164,\n        29286,\n        32772,\n        26052,\n        25035,\n        30592,\n        34513,\n        34661,\n        34762,\n        39654\n    ],\n    me: [20040],\n    mei: [\n        29611,\n        26522,\n        26757,\n        37238,\n        38665,\n        29028,\n        27809,\n        30473,\n        23186,\n        38209,\n        27599,\n        32654,\n        26151,\n        23504,\n        22969,\n        23194,\n        22390,\n        33683,\n        23883,\n        29496,\n        28028,\n        28228,\n        26979,\n        38213,\n        40539,\n        34946,\n        39749\n    ],\n    men: [38376, 38391, 20204, 25194, 29599, 28950, 25041, 38036],\n    mi: [\n        30511,\n        37274,\n        38753,\n        31964,\n        36855,\n        35868,\n        24357,\n        31859,\n        31192,\n        35269,\n        27852,\n        34588,\n        23494,\n        24130,\n        33416,\n        20886,\n        35879,\n        34364,\n        22055,\n        29461,\n        29551,\n        27752,\n        23443,\n        24365,\n        33042,\n        25929,\n        31992,\n        32315,\n        40587\n    ],\n    mian: [\n        26825,\n        30496,\n        32501,\n        20885,\n        20813,\n        21193,\n        23081,\n        32517,\n        38754,\n        27796,\n        28238,\n        33148,\n        30468\n    ],\n    mie: [34065, 28781, 21673, 34843, 31742],\n    min: [\n        27665,\n        25279,\n        30399,\n        25935,\n        24751,\n        38397,\n        33504,\n        23735,\n        38389,\n        27887,\n        29641\n    ],\n    ming: [\n        26126,\n        34719,\n        40483,\n        38125,\n        21517,\n        21629,\n        20901,\n        33559,\n        28319,\n        26269,\n        30609,\n        37225\n    ],\n    miu: [35884],\n    mo: [\n        25720,\n        25721,\n        34321,\n        27169,\n        33180,\n        30952,\n        25705,\n        39764,\n        25273,\n        26411,\n        33707,\n        22696,\n        40664,\n        27819,\n        28448,\n        23518,\n        38476,\n        35871,\n        33545,\n        34022,\n        39309,\n        23275,\n        38214,\n        31203,\n        30268,\n        32817,\n        34758,\n        35978,\n        35992\n    ],\n    mou: [35851, 29279, 26576, 21430, 21726, 23162, 30520, 37738],\n    mu: [\n        25287,\n        29281,\n        20137,\n        22982,\n        27597,\n        22675,\n        26286,\n        24149,\n        21215,\n        24917,\n        26408,\n        30446,\n        30566,\n        29287,\n        31302,\n        20203,\n        33500,\n        21586,\n        27792,\n        27626,\n        38076\n    ],\n    na: [\n        25343,\n        21738,\n        21584,\n        38048,\n        37027,\n        23068,\n        32435,\n        20869,\n        25466,\n        32941,\n        38222,\n        34930,\n        31660\n    ],\n    nai: [27670, 20035, 22902, 32784, 22856, 40720, 33407, 33816, 26608],\n    nan: [21335, 30007, 38590, 22218, 21891, 22241, 26976, 33129, 34683, 36199],\n    nao: [\n        25376,\n        33041,\n        24700,\n        38393,\n        23404,\n        22452,\n        29489,\n        29785,\n        30791,\n        38105,\n        34546\n    ],\n    ne: [28118, 21602, 35767],\n    nei: [39297],\n    nen: [23273, 33021, 26520, 24641],\n    ni: [\n        22958,\n        38675,\n        20522,\n        27877,\n        23612,\n        25311,\n        20320,\n        21311,\n        33147,\n        36870,\n        28346,\n        20274,\n        22381,\n        29450,\n        24617,\n        28384,\n        26165,\n        26062,\n        31074,\n        24925,\n        30568,\n        38092,\n        40117\n    ],\n    nian: [\n        34091,\n        25288,\n        24180,\n        30910,\n        25781,\n        25467,\n        24565,\n        24319,\n        36743,\n        40655,\n        40071,\n        40118\n    ],\n    niang: [23064, 37247],\n    niao: [40479, 23615, 33553, 23346, 33074, 34949],\n    nie: [\n        25423,\n        32834,\n        23421,\n        21870,\n        38218,\n        38221,\n        28037,\n        20060,\n        38503,\n        34326,\n        21995,\n        32896,\n        39070,\n        33260,\n        36433\n    ],\n    nin: [24744, 26592],\n    ning: [\n        29406,\n        20957,\n        23425,\n        25319,\n        27870,\n        20318,\n        34021,\n        21659,\n        29999,\n        32845\n    ],\n    niu: [29275, 25197, 38062, 32445, 29379, 24568, 22942, 34484],\n    nong: [33043, 27987, 20892, 20396],\n    nu: [22900, 21162, 24594, 21622, 24081, 24361, 33004, 23397, 39549],\n    nv: [22899, 24679, 38037, 34884],\n    nuan: [26262],\n    nuenue: [34384],\n    nue: [30111, 35857],\n    nuo: [25386, 25062, 31983, 35834, 20649, 25638, 21903, 38168],\n    ou: [\n        21734,\n        27431,\n        40485,\n        27572,\n        34261,\n        21589,\n        20598,\n        27812,\n        24580,\n        29935,\n        32806\n    ],\n    pa: [21866, 36276, 29228, 24085, 24597, 29750, 33897, 31586],\n    pai: [25293, 25490, 29260, 24472, 28227, 27966, 20467, 33934],\n    pan: [\n        25856,\n        28504,\n        30424,\n        30928,\n        30460,\n        30036,\n        21028,\n        21467,\n        29247,\n        27886,\n        34978,\n        35195,\n        34784,\n        36434\n    ],\n    pang: [20051, 24222, 26049, 32810, 32982, 28354, 36868],\n    pao: [\n        25243,\n        21638,\n        21032,\n        28846,\n        34957,\n        36305,\n        27873,\n        21263,\n        29389,\n        24214,\n        33068,\n        30129\n    ],\n    pei: [\n        21624,\n        32986,\n        22521,\n        35060,\n        36180,\n        38506,\n        37197,\n        20329,\n        27803,\n        25482,\n        36756,\n        24084,\n        28128,\n        26054,\n        38187,\n        37253,\n        38664\n    ],\n    pen: [21943, 30406, 28243],\n    peng: [\n        30768,\n        25256,\n        28921,\n        28558,\n        24429,\n        34028,\n        26842,\n        30844,\n        31735,\n        33192,\n        26379,\n        40527,\n        25447,\n        30896,\n        22383,\n        22539,\n        22061,\n        24614,\n        34779\n    ],\n    pi: [\n        30738,\n        38713,\n        25209,\n        25259,\n        21128,\n        29749,\n        27607,\n        21860,\n        33086,\n        30130,\n        30382,\n        21305,\n        30174,\n        20731,\n        23617,\n        35692,\n        19989,\n        38516,\n        37043,\n        37099,\n        22318,\n        40729,\n        25815,\n        22140,\n        24192,\n        23218,\n        32432,\n        26503,\n        29971,\n        30565,\n        32628,\n        38093,\n        30182,\n        30294,\n        30091,\n        34445,\n        35988\n    ],\n    pian: [\n        31687,\n        20559,\n        29255,\n        39575,\n        35869,\n        39560,\n        29327,\n        33020,\n        35082,\n        32745,\n        36417\n    ],\n    piao: [\n        39128,\n        28418,\n        29922,\n        31080,\n        21117,\n        22028,\n        23254,\n        32549,\n        27533,\n        30623,\n        34741\n    ],\n    pie: [25735, 30629, 20031, 33508, 27669],\n    pin: [\n        25340,\n        39057,\n        36139,\n        21697,\n        32856,\n        25306,\n        23000,\n        23252,\n        27008,\n        29277,\n        39078\n    ],\n    ping: [\n        20050,\n        22378,\n        33529,\n        33805,\n        24179,\n        20973,\n        29942,\n        35780,\n        23631,\n        20444,\n        23049,\n        26544,\n        40070\n    ],\n    po: [\n        22369,\n        27900,\n        39047,\n        23110,\n        30772,\n        39748,\n        36843,\n        31893,\n        21493,\n        37169,\n        28325,\n        29632,\n        38027,\n        38071,\n        30372,\n        31544\n    ],\n    pou: [21078, 35026, 36387],\n    pu: [\n        25169,\n        38138,\n        20166,\n        33670,\n        33889,\n        33769,\n        33970,\n        22484,\n        26420,\n        22275,\n        26222,\n        28006,\n        35889,\n        26333,\n        28689,\n        21261,\n        22103,\n        28654,\n        29854,\n        27654,\n        38244,\n        38248,\n        36476\n    ],\n    qi: [\n        26399,\n        27450,\n        26646,\n        25114,\n        22971,\n        19971,\n        20932,\n        28422,\n        26578,\n        27791,\n        20854,\n        26827,\n        22855,\n        27495,\n        30054,\n        23822,\n        33040,\n        40784,\n        26071,\n        31048,\n        31041,\n        39569,\n        36215,\n        23682,\n        20062,\n        20225,\n        21551,\n        22865,\n        30732,\n        22120,\n        27668,\n        36804,\n        24323,\n        27773,\n        27875,\n        35755,\n        20127,\n        20115,\n        22331,\n        33425,\n        33803,\n        33914,\n        22017,\n        23674,\n        23696,\n        27732,\n        28103,\n        39568,\n        32494,\n        29738,\n        29734,\n        26462,\n        26724,\n        27117,\n        27449,\n        31098,\n        25001,\n        30875,\n        34548,\n        34590,\n        32166,\n        32174,\n        36287,\n        36426,\n        40141,\n        40594\n    ],\n    qia: [25488, 24688, 27965, 33884],\n    qian: [\n        29301,\n        25190,\n        38030,\n        38085,\n        21315,\n        36801,\n        31614,\n        20191,\n        35878,\n        20094,\n        40660,\n        38065,\n        38067,\n        21069,\n        28508,\n        36963,\n        27973,\n        35892,\n        22545,\n        23884,\n        27424,\n        27465,\n        20325,\n        38433,\n        33418,\n        33441,\n        33640,\n        25518,\n        23693,\n        24749,\n        24906,\n        39582,\n        25652,\n        35120,\n        32561,\n        26912,\n        32951,\n        24838,\n        38052,\n        34388,\n        31645\n    ],\n    qiang: [\n        26538,\n        21595,\n        33108,\n        32652,\n        22681,\n        34103,\n        24378,\n        25250,\n        23281,\n        27183,\n        25111,\n        28829,\n        38166,\n        38197,\n        38250,\n        35137,\n        34595,\n        32671,\n        36331,\n        36292\n    ],\n    qiao: [\n        27207,\n        38201,\n        25970,\n        24708,\n        26725,\n        30631,\n        20052,\n        20392,\n        24039,\n        38808,\n        25772,\n        32728,\n        23789,\n        20431,\n        31373,\n        21121,\n        35822,\n        35887,\n        33630,\n        24832,\n        24980,\n        32562,\n        27189,\n        27635,\n        30807,\n        36343,\n        38802\n    ],\n    qie: [\n        20999,\n        33540,\n        19988,\n        24623,\n        31363,\n        37060,\n        21820,\n        24812,\n        22974,\n        25352,\n        38194,\n        31655\n    ],\n    qin: [\n        38054,\n        20405,\n        20146,\n        31206,\n        29748,\n        21220,\n        33465,\n        25810,\n        31165,\n        23517,\n        27777,\n        33449,\n        33985,\n        34162,\n        25599,\n        21539,\n        21994,\n        22105,\n        28337,\n        27278,\n        34707,\n        34942\n    ],\n    qing: [\n        38738,\n        36731,\n        27682,\n        20542,\n        21375,\n        28165,\n        25806,\n        26228,\n        27696,\n        24773,\n        39031,\n        35831,\n        24198,\n        20521,\n        33496,\n        22282,\n        27296,\n        30956,\n        34619,\n        32580,\n        31632,\n        35622,\n        40109,\n        40677\n    ],\n    qiong: [29756, 31351, 37019, 33557, 31353, 31559, 37518],\n    qiu: [\n        31179,\n        19992,\n        37041,\n        29699,\n        27714,\n        22234,\n        37195,\n        27845,\n        20421,\n        27709,\n        24047,\n        33405,\n        29360,\n        28267,\n        36881,\n        36946,\n        27000,\n        36167,\n        40480,\n        34412,\n        34479,\n        34660,\n        35032,\n        31959,\n        40133,\n        40765\n    ],\n    qu: [\n        36235,\n        21306,\n        34502,\n        26354,\n        36527,\n        23624,\n        39537,\n        28192,\n        21462,\n        23094,\n        40843,\n        36259,\n        21435,\n        35790,\n        21164,\n        34134,\n        34343,\n        23702,\n        34914,\n        38418,\n        29865,\n        35281,\n        27661,\n        31067,\n        30962,\n        30319,\n        34512,\n        34876,\n        40628,\n        30655,\n        40674\n    ],\n    quan: [\n        22280,\n        39079,\n        26435,\n        37275,\n        27849,\n        20840,\n        30154,\n        25331,\n        29356,\n        21048,\n        21149,\n        35808,\n        33603,\n        29566,\n        24731,\n        32507,\n        36737,\n        30030,\n        38120,\n        34615,\n        31564,\n        39688\n    ],\n    que: [32570, 28820, 30264, 21364, 40522, 27063, 30830, 38592, 38425, 24747],\n    qun: [35033, 32676, 36897],\n    ran: [28982, 29123, 20873, 26579, 33490, 39663],\n    rang: [29924, 22756, 25880, 22199, 35753, 31155, 31344],\n    rao: [39286, 25200, 32469, 33627, 23046, 26721],\n    ruo: [24825, 33509, 24369],\n    re: [28909, 20556],\n    ren: [\n        22764,\n        20161,\n        20154,\n        24525,\n        38887,\n        20219,\n        35748,\n        20995,\n        22922,\n        32427,\n        20190,\n        33615,\n        33882,\n        39274,\n        36715,\n        31252,\n        34941\n    ],\n    reng: [25172, 20173],\n    ri: [26085],\n    rong: [\n        25102,\n        33592,\n        33993,\n        33635,\n        34701,\n        29076,\n        28342,\n        23481,\n        32466,\n        20887,\n        23896,\n        29416,\n        32539,\n        27029,\n        34686\n    ],\n    rou: [25545, 26580, 32905, 31941, 36418, 38819],\n    ru: [\n        33593,\n        34837,\n        20754,\n        23418,\n        22914,\n        36785,\n        20083,\n        27741,\n        20837,\n        35109,\n        34000,\n        34231,\n        22149,\n        27955,\n        28349,\n        28641,\n        38135,\n        35174,\n        39077\n    ],\n    ruan: [36719, 38446, 26378],\n    rui: [34122, 29790, 38160, 33454, 34148, 30591, 34443],\n    run: [38384, 28070],\n    sa: [25746, 27922, 33832, 21317, 20200, 25394, 39122],\n    sai: [33134, 40131, 22622, 36187, 22139],\n    san: [19977, 21441, 20254, 25955, 24417, 39315, 27701, 27637, 31937, 38704],\n    sang: [26705, 21971, 20007, 25633, 30921, 39073],\n    sao: [25620, 39578, 25195, 23234, 22525, 33226, 30233, 40139],\n    se: [29791, 33394, 28073, 21868, 38121, 38127, 31313],\n    sen: [26862],\n    seng: [20711],\n    sha: [\n        33678,\n        30722,\n        26432,\n        21049,\n        27801,\n        32433,\n        20667,\n        21861,\n        29022,\n        33038,\n        27459,\n        30183,\n        35039,\n        38670,\n        40104\n    ],\n    shai: [31579, 26194, 37246],\n    shan: [\n        29642,\n        33515,\n        26441,\n        23665,\n        21024,\n        29053,\n        34923,\n        38378,\n        38485,\n        25797,\n        36193,\n        33203,\n        21892,\n        27733,\n        25159,\n        32558,\n        21089,\n        35754,\n        37167,\n        22479,\n        33439,\n        28536,\n        22999,\n        39583,\n        33211,\n        38032,\n        30109,\n        34798,\n        33314,\n        36314,\n        40157\n    ],\n    shang: [\n        22674,\n        20260,\n        21830,\n        36175,\n        26188,\n        19978,\n        23578,\n        35059,\n        22439,\n        32497,\n        27527,\n        29109,\n        35294\n    ],\n    shao: [\n        26786,\n        25422,\n        31245,\n        28903,\n        33421,\n        21242,\n        38902,\n        23569,\n        21736,\n        37045,\n        32461,\n        21165,\n        33493,\n        28530,\n        34552,\n        31524,\n        31602,\n        33348\n    ],\n    she: [\n        22882,\n        36170,\n        34503,\n        33292,\n        33293,\n        36198,\n        25668,\n        23556,\n        24913,\n        28041,\n        31038,\n        35774,\n        21389,\n        20312,\n        29470,\n        30066,\n        40605\n    ],\n    shen: [\n        30775,\n        30003,\n        21627,\n        20280,\n        36523,\n        28145,\n        23072,\n        32453,\n        31070,\n        27784,\n        23457,\n        23158,\n        29978,\n        32958,\n        24910,\n        28183,\n        35804,\n        35842,\n        21554,\n        21698,\n        28182,\n        26937,\n        30695,\n        34563\n    ],\n    sheng: [\n        22768,\n        29983,\n        29989,\n        29298,\n        21319,\n        32499,\n        30465,\n        30427,\n        21097,\n        32988,\n        22307,\n        19998,\n        28177,\n        23221,\n        30490,\n        31513\n    ],\n    shi: [\n        24072,\n        22833,\n        29422,\n        26045,\n        28287,\n        35799,\n        23608,\n        34417,\n        21313,\n        30707,\n        25342,\n        26102,\n        20160,\n        39135,\n        34432,\n        23454,\n        35782,\n        21490,\n        30690,\n        20351,\n        23630,\n        39542,\n        22987,\n        24335,\n        31034,\n        22763,\n        19990,\n        26623,\n        20107,\n        25325,\n        35475,\n        36893,\n        21183,\n        26159,\n        21980,\n        22124,\n        36866,\n        20181,\n        20365,\n        37322,\n        39280,\n        27663,\n        24066,\n        24643,\n        23460,\n        35270,\n        35797,\n        35877,\n        22488,\n        33715,\n        33997,\n        24337,\n        21777,\n        39267,\n        36732,\n        32774,\n        36147,\n        28859,\n        31035,\n        38088,\n        38090,\n        34731,\n        33296,\n        31598,\n        35925,\n        40101,\n        40122\n    ],\n    shou: [\n        25910,\n        25163,\n        39318,\n        23432,\n        23551,\n        25480,\n        21806,\n        21463,\n        30246,\n        20861,\n        25164,\n        29417,\n        32502,\n        33359\n    ],\n    shu: [\n        34092,\n        26530,\n        26803,\n        27530,\n        25234,\n        36755,\n        21460,\n        33298,\n        28113,\n        30095,\n        20070,\n        36174,\n        23408,\n        29087,\n        34223,\n        26257,\n        26329,\n        32626,\n        34560,\n        40653,\n        40736,\n        23646,\n        26415,\n        36848,\n        26641,\n        26463,\n        25101,\n        31446,\n        22661,\n        24246,\n        25968,\n        28465,\n        24661,\n        20495,\n        22654,\n        33789,\n        24516,\n        27821,\n        28049,\n        28557,\n        23005,\n        32446,\n        27641,\n        33127,\n        27571,\n        38255,\n        31211,\n        40556\n    ],\n    shua: [21047, 32781, 21808, 28078],\n    shuai: [25684, 34928, 29993, 24069, 34752],\n    shuan: [26643, 25332, 38377],\n    shuang: [38684, 21452, 29245, 23360],\n    shui: [35841, 27700, 30561, 31246],\n    shun: [21550, 30636, 39034, 33308, 24642],\n    shuo: [\n        35828,\n        30805,\n        26388,\n        28865,\n        33972,\n        25632,\n        21965,\n        28655,\n        22913,\n        27082,\n        38084\n    ],\n    si: [\n        26031,\n        25749,\n        22070,\n        24605,\n        31169,\n        21496,\n        19997,\n        27515,\n        32902,\n        23546,\n        21987,\n        22235,\n        20282,\n        20284,\n        39282,\n        24051,\n        21422,\n        20447,\n        20821,\n        33765,\n        21661,\n        27740,\n        27863,\n        28556,\n        22994,\n        39543,\n        32524,\n        31040,\n        31072,\n        38198,\n        40502,\n        32796,\n        34547,\n        31525\n    ],\n    song: [\n        26494,\n        32824,\n        24578,\n        39042,\n        36865,\n        23435,\n        35772,\n        35829,\n        20935,\n        33752,\n        23847,\n        23913,\n        24554,\n        24730,\n        28126,\n        31462\n    ],\n    sou: [\n        25628,\n        33368,\n        25822,\n        22013,\n        21471,\n        21974,\n        22014,\n        39306,\n        28338,\n        39125,\n        30605,\n        38204,\n        34699\n    ],\n    su: [\n        33487,\n        37221,\n        20439,\n        32032,\n        36895,\n        31903,\n        20723,\n        22609,\n        28335,\n        23487,\n        35785,\n        32899,\n        22809,\n        35873,\n        34060,\n        21961,\n        24875,\n        31756,\n        35307,\n        31267\n    ],\n    suan: [37240, 33948, 31639],\n    sui: [\n        34429,\n        38539,\n        38543,\n        32485,\n        39635,\n        30862,\n        23681,\n        31319,\n        36930,\n        38567,\n        31071,\n        34001,\n        20907,\n        35847,\n        28617,\n        36995,\n        29159,\n        30509,\n        30562\n    ],\n    sun: [23385, 25439, 31499, 33642, 29426, 39143, 27051, 36323, 38588],\n    suo: [\n        26797,\n        21766,\n        32553,\n        29712,\n        32034,\n        38145,\n        25152,\n        21794,\n        21990,\n        23057,\n        26731,\n        30531,\n        32679\n    ],\n    ta: [\n        22604,\n        20182,\n        23427,\n        22905,\n        22612,\n        29549,\n        25374,\n        36427,\n        36367,\n        38396,\n        28347,\n        36962,\n        27067,\n        27795\n    ],\n    tai: [\n        32974,\n        33492,\n        25260,\n        21488,\n        27888,\n        37214,\n        22826,\n        24577,\n        27760,\n        37040,\n        34233,\n        32957,\n        28849,\n        38043,\n        36294,\n        40080\n    ],\n    tan: [\n        22349,\n        25674,\n        36138,\n        30251,\n        28393,\n        22363,\n        27264,\n        30192,\n        28525,\n        35885,\n        35848,\n        22374,\n        27631,\n        34962,\n        30899,\n        25506,\n        21497,\n        28845,\n        37103,\n        34120,\n        26137,\n        38077,\n        38188,\n        35203\n    ],\n    tang: [\n        27748,\n        22616,\n        25642,\n        22530,\n        26848,\n        33179,\n        21776,\n        31958,\n        20645,\n        39271,\n        28303,\n        29805,\n        38132,\n        38231,\n        32805,\n        34711,\n        34739,\n        32688,\n        37283\n    ],\n    thang: [20504, 36538, 28108],\n    theng: [36255, 28907],\n    tao: [\n        25487,\n        28059,\n        28372,\n        32486,\n        33796,\n        26691,\n        36867,\n        28120,\n        38518,\n        35752,\n        22871,\n        25361,\n        40727,\n        21845,\n        38892,\n        39253\n    ],\n    te: [29305],\n    teng: [34276, 33150, 30140, 35466, 28373],\n    ti: [\n        26799,\n        21076,\n        36386,\n        38161,\n        25552,\n        39064,\n        36420,\n        21884,\n        20307,\n        26367,\n        22159,\n        24789,\n        28053,\n        21059,\n        23625,\n        33617,\n        24716,\n        36886,\n        32488,\n        32519,\n        40520,\n        35068,\n        37261\n    ],\n    tian: [\n        22825,\n        28155,\n        22635,\n        30000,\n        29980,\n        24684,\n        33300,\n        33094,\n        25517,\n        24541,\n        38423,\n        27524,\n        30027,\n        38079,\n        34490\n    ],\n    tiao: [\n        26465,\n        36834,\n        30522,\n        36339,\n        20347,\n        31079,\n        38123,\n        31381,\n        40838,\n        40102\n    ],\n    tie: [36148, 38081, 24086, 33820, 39214],\n    ting: [\n        21381,\n        21548,\n        28867,\n        27712,\n        24311,\n        20572,\n        20141,\n        24237,\n        25402,\n        33351,\n        33691,\n        33910,\n        23159,\n        26755,\n        34579,\n        38662\n    ],\n    tong: [\n        36890,\n        26704,\n        37230,\n        30643,\n        21516,\n        38108,\n        24420,\n        31461,\n        26742,\n        25413,\n        31570,\n        32479,\n        30171,\n        20319,\n        20718,\n        20189,\n        33596,\n        22005,\n        24696,\n        28540,\n        30780\n    ],\n    tou: [20599, 25237, 22836, 36879, 20128],\n    tu: [\n        20984,\n        31171,\n        31361,\n        22270,\n        24466,\n        36884,\n        28034,\n        23648,\n        22303,\n        21520,\n        20820,\n        22541,\n        33660,\n        33759,\n        38029,\n        37236\n    ],\n    tuan: [28237, 22242, 30083],\n    tui: [25512, 39059, 33151, 34581, 35114, 36864, 24530, 29050],\n    tun: [21534, 23663, 33216, 39272, 26302, 35930, 31360],\n    tuo: [\n        25302,\n        25176,\n        33073,\n        40501,\n        38464,\n        39534,\n        39548,\n        26925,\n        22949,\n        25299,\n        21822,\n        20039,\n        20311,\n        22376,\n        24249,\n        27825,\n        26589,\n        30755,\n        31656,\n        33284,\n        36302,\n        40717\n    ],\n    wa: [25366, 21703, 34521, 27964, 23043, 29926, 34972, 20324, 23090, 33149],\n    wai: [27498, 22806],\n    wan: [\n        35916,\n        24367,\n        28286,\n        29609,\n        39037,\n        20024,\n        28919,\n        23436,\n        30871,\n        25405,\n        26202,\n        30358,\n        24779,\n        23451,\n        23113,\n        19975,\n        33109,\n        21084,\n        33412,\n        33483,\n        33728,\n        32424,\n        32510,\n        29740,\n        33048,\n        30073,\n        34623,\n        31650\n    ],\n    wang: [\n        27754,\n        29579,\n        20129,\n        26505,\n        32593,\n        24448,\n        26106,\n        26395,\n        24536,\n        22916,\n        32596,\n        23586,\n        24792,\n        36747,\n        39757\n    ],\n    wei: [\n        23041,\n        24013,\n        24494,\n        21361,\n        38886,\n        36829,\n        26693,\n        22260,\n        21807,\n        24799,\n        20026,\n        28493,\n        32500,\n        33479,\n        33806,\n        22996,\n        20255,\n        20266,\n        23614,\n        32428,\n        26410,\n        34074,\n        21619,\n        30031,\n        32963,\n        21890,\n        39759,\n        20301,\n        28205,\n        35859,\n        23561,\n        24944,\n        21355,\n        20525,\n        20558,\n        35839,\n        38536,\n        33907,\n        34183,\n        24079,\n        24119,\n        23860,\n        23916,\n        29477,\n        29484,\n        38385,\n        27817,\n        27943,\n        28064,\n        36918,\n        23059,\n        29614,\n        38890,\n        36558,\n        28828,\n        29032,\n        29096,\n        30207,\n        33353,\n        40084\n    ],\n    wen: [\n        30239,\n        28201,\n        34442,\n        25991,\n        38395,\n        32441,\n        21563,\n        31283,\n        32010,\n        38382,\n        21006,\n        24864,\n        38412,\n        27766,\n        29882,\n        38891,\n        27521,\n        38639\n    ],\n    weng: [21985, 32705, 29934, 33994, 34169],\n    wo: [\n        25373,\n        34583,\n        28065,\n        31389,\n        25105,\n        26017,\n        21351,\n        25569,\n        27779,\n        33716,\n        24132,\n        28197,\n        26444,\n        32927,\n        40844\n    ],\n    wu: [\n        24043,\n        21596,\n        38056,\n        20044,\n        27745,\n        35820,\n        23627,\n        26080,\n        33436,\n        26791,\n        21566,\n        21556,\n        27595,\n        27494,\n        20116,\n        25410,\n        21320,\n        33310,\n        20237,\n        20398,\n        22366,\n        25098,\n        38654,\n        26212,\n        29289,\n        21247,\n        21153,\n        24735,\n        35823,\n        20800,\n        20213,\n        38434,\n        37036,\n        22316,\n        33460,\n        24209,\n        24579,\n        24548,\n        28015,\n        23524,\n        36821,\n        22953,\n        39579,\n        29310,\n        28944,\n        40521,\n        40540,\n        34568,\n        37576,\n        40751\n    ],\n    xi: [\n        26132,\n        29081,\n        26512,\n        35199,\n        30802,\n        30717,\n        26224,\n        22075,\n        21560,\n        38177,\n        29306,\n        31232,\n        24687,\n        24076,\n        24713,\n        33181,\n        22805,\n        24796,\n        29060,\n        28911,\n        28330,\n        27728,\n        29312,\n        27268,\n        34989,\n        24109,\n        20064,\n        23219,\n        21916,\n        38115,\n        27927,\n        31995,\n        38553,\n        25103,\n        32454,\n        20694,\n        20846,\n        38576,\n        37079,\n        33564,\n        33912,\n        34032,\n        22874,\n        21775,\n        24473,\n        39273,\n        38411,\n        28000,\n        28101,\n        23651,\n        23305,\n        29626,\n        27176,\n        26342,\n        35275,\n        27447,\n        29113,\n        31114,\n        31143,\n        38072,\n        30361,\n        31352,\n        34597,\n        34763,\n        33342,\n        32690,\n        31902,\n        32725,\n        37295,\n        40759\n    ],\n    xia: [\n        30606,\n        34430,\n        21283,\n        38686,\n        36758,\n        26247,\n        23777,\n        20384,\n        29421,\n        19979,\n        21414,\n        22799,\n        21523,\n        25472,\n        33901,\n        21956,\n        29390,\n        36944,\n        29781,\n        30806,\n        30229,\n        32581,\n        40672\n    ],\n    xian: [\n        38184,\n        20808,\n        20185,\n        40092,\n        32420,\n        21688,\n        36132,\n        34900,\n        33335,\n        38386,\n        28046,\n        24358,\n        23244,\n        26174,\n        38505,\n        29616,\n        29486,\n        21439,\n        33146,\n        39301,\n        32673,\n        23466,\n        38519,\n        38480,\n        32447,\n        20924,\n        34259,\n        23704,\n        29443,\n        26297,\n        23092,\n        27673,\n        31046,\n        40519,\n        30187,\n        34476,\n        31557,\n        31868,\n        37232,\n        36345\n    ],\n    xiang: [\n        30456,\n        21410,\n        38262,\n        39321,\n        31665,\n        35140,\n        28248,\n        20065,\n        32724,\n        31077,\n        35814,\n        24819,\n        21709,\n        20139,\n        39033,\n        24055,\n        27233,\n        20687,\n        21521,\n        35937,\n        33431,\n        33881,\n        39287,\n        24224,\n        39591,\n        32515,\n        34771,\n        40094,\n        39144\n    ],\n    xiao: [\n        33831,\n        30813,\n        38660,\n        21066,\n        21742,\n        22179,\n        38144,\n        28040,\n        23477,\n        28102,\n        26195,\n        23567,\n        23389,\n        26657,\n        32918,\n        21880,\n        31505,\n        25928,\n        21715,\n        21691,\n        23844,\n        28487,\n        36877,\n        39553,\n        32481,\n        26541,\n        26549,\n        31601,\n        31659,\n        39752\n    ],\n    xie: [\n        26964,\n        20123,\n        27463,\n        34638,\n        38795,\n        21327,\n        25375,\n        25658,\n        37034,\n        26012,\n        32961,\n        35856,\n        20889,\n        26800,\n        21368,\n        34809,\n        25032,\n        27844,\n        27899,\n        35874,\n        23633,\n        20565,\n        20149,\n        21232,\n        29166,\n        34212,\n        25783,\n        24296,\n        28707,\n        36994,\n        32449,\n        32556,\n        27053,\n        27021,\n        27481,\n        36510\n    ],\n    xin: [\n        34218,\n        33455,\n        38156,\n        27427,\n        36763,\n        26032,\n        24571,\n        24515,\n        20449,\n        34885,\n        22239,\n        39336,\n        33688,\n        27462,\n        38141,\n        37995\n    ],\n    xing: [\n        26143,\n        33125,\n        29481,\n        24826,\n        20852,\n        21009,\n        22411,\n        24418,\n        37026,\n        34892,\n        37266,\n        24184,\n        26447,\n        24615,\n        22995,\n        38473,\n        33607,\n        33637,\n        25828,\n        24763,\n        30798\n    ],\n    xiong: [20804, 20982, 33016, 21256, 27769, 38596, 29066, 33422],\n    xiu: [\n        20241,\n        20462,\n        32670,\n        26429,\n        21957,\n        38152,\n        31168,\n        34966,\n        32483,\n        33696,\n        23723,\n        39312,\n        24229,\n        40506,\n        35973,\n        39673\n    ],\n    xu: [\n        22687,\n        25100,\n        38656,\n        34394,\n        22040,\n        39035,\n        24464,\n        35768,\n        33988,\n        37207,\n        21465,\n        26093,\n        24207,\n        30044,\n        24676,\n        32110,\n        23167,\n        32490,\n        32493,\n        35764,\n        35817,\n        22313,\n        34047,\n        24629,\n        27947,\n        28294,\n        39036,\n        26665,\n        29030,\n        30729,\n        30449,\n        32997,\n        31944,\n        37265\n    ],\n    xuan: [\n        36713,\n        21927,\n        23459,\n        24748,\n        26059,\n        29572,\n        36873,\n        30307,\n        30505,\n        32474,\n        20743,\n        35862,\n        33841,\n        25550,\n        39316,\n        27883,\n        27957,\n        28210,\n        28457,\n        29831,\n        26982,\n        26244,\n        28843,\n        29002,\n        30905,\n        38089,\n        38239,\n        30147\n    ],\n    xue: [38772, 34203, 23398, 31348, 38634, 34880, 22129, 27894, 40149],\n    xun: [\n        21195,\n        29071,\n        24490,\n        26092,\n        35810,\n        23547,\n        39535,\n        24033,\n        27529,\n        27739,\n        35757,\n        35759,\n        36874,\n        36805,\n        24061,\n        22489,\n        33600,\n        34224,\n        23755,\n        24455,\n        27988,\n        26331,\n        31400,\n        37306,\n        40095\n    ],\n    ya: [\n        21387,\n        25276,\n        40486,\n        40493,\n        21568,\n        20011,\n        33469,\n        29273,\n        34460,\n        23830,\n        34905,\n        28079,\n        38597,\n        21713,\n        20122,\n        35766,\n        20258,\n        25568,\n        21526,\n        23688,\n        36819,\n        23045,\n        29706,\n        26720,\n        27689,\n        30737,\n        30554,\n        30166\n    ],\n    yan: [\n        28937,\n        21693,\n        38409,\n        28895,\n        28153,\n        30416,\n        20005,\n        30740,\n        34578,\n        23721,\n        24310,\n        35328,\n        39068,\n        38414,\n        28814,\n        27839,\n        22852,\n        25513,\n        30524,\n        34893,\n        28436,\n        33395,\n        22576,\n        29141,\n        21388,\n        30746,\n        38593,\n        21761,\n        24422,\n        28976,\n        23476,\n        35866,\n        39564,\n        21411,\n        38757,\n        36189,\n        20456,\n        20547,\n        20822,\n        35744,\n        35891,\n        37118,\n        37154,\n        33451,\n        33784,\n        23846,\n        24697,\n        38379,\n        38415,\n        27911,\n        28270,\n        28383,\n        22925,\n        23267,\n        29744,\n        26191,\n        33005,\n        33100,\n        28977,\n        32616,\n        31605,\n        37245,\n        39751,\n        39181,\n        40761\n    ],\n    yang: [\n        27523,\n        22830,\n        40495,\n        31207,\n        26472,\n        25196,\n        20335,\n        30113,\n        32650,\n        27915,\n        38451,\n        27687,\n        20208,\n        30162,\n        20859,\n        26679,\n        28478,\n        24457,\n        24591,\n        27889,\n        28800,\n        28874,\n        24665,\n        34520,\n        38789\n    ],\n    yao: [\n        36992,\n        33136,\n        22934,\n        29814,\n        25671,\n        23591,\n        36965,\n        31377,\n        35875,\n        23002,\n        21676,\n        33280,\n        33647,\n        35201,\n        32768,\n        22829,\n        29243,\n        21510,\n        23870,\n        24493,\n        28729,\n        24186,\n        29671,\n        26483,\n        26332,\n        32948,\n        40542,\n        31368,\n        32327,\n        40144\n    ],\n    ye: [\n        26928,\n        22094,\n        32822,\n        29239,\n        37326,\n        20918,\n        20063,\n        39029,\n        25494,\n        19994,\n        21494,\n        26355,\n        33099,\n        22812,\n        28082,\n        35858,\n        37050,\n        25590,\n        39296,\n        26196,\n        28904,\n        38104\n    ],\n    yi: [\n        19968,\n        22777,\n        21307,\n        25558,\n        38129,\n        20381,\n        20234,\n        34915,\n        39056,\n        22839,\n        36951,\n        31227,\n        20202,\n        33008,\n        30097,\n        27778,\n        23452,\n        23016,\n        24413,\n        26885,\n        34433,\n        20506,\n        24050,\n        20057,\n        30691,\n        20197,\n        33402,\n        25233,\n        26131,\n        37009,\n        23673,\n        20159,\n        24441,\n        33222,\n        36920,\n        32900,\n        30123,\n        20134,\n        35028,\n        24847,\n        27589,\n        24518,\n        20041,\n        30410,\n        28322,\n        35811,\n        35758,\n        35850,\n        35793,\n        24322,\n        32764,\n        32716,\n        32462,\n        21000,\n        21139,\n        20350,\n        35794,\n        22314,\n        22319,\n        22520,\n        25087,\n        33505,\n        34191,\n        24328,\n        22869,\n        25401,\n        24331,\n        21587,\n        21670,\n        21695,\n        22123,\n        23748,\n        23991,\n        29463,\n        39284,\n        24639,\n        24609,\n        24722,\n        28458,\n        36836,\n        39551,\n        32546,\n        27562,\n        36155,\n        26070,\n        29088,\n        38023,\n        38226,\n        38257,\n        30157,\n        30231,\n        30292,\n        32714,\n        34916,\n        34612,\n        33315,\n        32703,\n        32755,\n        37199,\n        40671\n    ],\n    yin: [\n        33589,\n        33643,\n        22240,\n        27575,\n        38899,\n        38452,\n        23035,\n        21535,\n        38134,\n        28139,\n        23493,\n        39278,\n        23609,\n        24341,\n        38544,\n        21360,\n        32996,\n        37150,\n        22553,\n        33562,\n        21905,\n        29434,\n        22820,\n        27684,\n        38111,\n        30270,\n        34451,\n        38698,\n        40840\n    ],\n    ying: [\n        33521,\n        27185,\n        23156,\n        40560,\n        24212,\n        32552,\n        33721,\n        33828,\n        33829,\n        33639,\n        34631,\n        36814,\n        36194,\n        30408,\n        24433,\n        39062,\n        30828,\n        26144,\n        23348,\n        37090,\n        33556,\n        33722,\n        33830,\n        25732,\n        22052,\n        33210,\n        28386,\n        28486,\n        28699,\n        29787,\n        29838,\n        27001,\n        40550,\n        30271,\n        39053,\n        32578\n    ],\n    yo: [21727, 21815],\n    yong: [\n        25317,\n        20323,\n        33219,\n        30152,\n        24248,\n        38605,\n        36362,\n        34553,\n        21647,\n        27891,\n        28044,\n        27704,\n        24703,\n        21191,\n        29992,\n        20433,\n        22725,\n        22665,\n        24949,\n        37013,\n        38235,\n        29996,\n        40153,\n        39252\n    ],\n    you: [\n        24189,\n        20248,\n        24736,\n        24551,\n        23588,\n        30001,\n        37038,\n        38080,\n        29369,\n        27833,\n        28216,\n        37193,\n        26377,\n        21451,\n        21491,\n        20305,\n        37321,\n        35825,\n        21448,\n        24188,\n        21347,\n        25912,\n        20369,\n        33720,\n        21606,\n        22271,\n        23461,\n        26586,\n        29495,\n        29270,\n        38101,\n        30115,\n        34659,\n        40063,\n        40669,\n        40748\n    ],\n    yu: [\n        36802,\n        28132,\n        20110,\n        30402,\n        27014,\n        34398,\n        24858,\n        33286,\n        20313,\n        20446,\n        36926,\n        40060,\n        24841,\n        28189,\n        28180,\n        38533,\n        20104,\n        23089,\n        38632,\n        19982,\n        23679,\n        31161,\n        23431,\n        35821,\n        32701,\n        29577,\n        22495,\n        33419,\n        37057,\n        21505,\n        36935,\n        21947,\n        23786,\n        24481,\n        24840,\n        27442,\n        29425,\n        32946,\n        35465,\n        28020,\n        23507,\n        35029,\n        39044,\n        35947,\n        39533,\n        31162,\n        27603,\n        20251,\n        20451,\n        35840,\n        35861,\n        33848,\n        34019,\n        25540,\n        21889,\n        22276,\n        22281,\n        23899,\n        29427,\n        39275,\n        24254,\n        38408,\n        22954,\n        22948,\n        32417,\n        29788,\n        26161,\n        35278,\n        33140,\n        27428,\n        26044,\n        29020,\n        29152,\n        32895,\n        38064,\n        40518,\n        30224,\n        30208,\n        31411,\n        34643,\n        31485,\n        33281,\n        38633,\n        40841\n    ],\n    yuan: [\n        40499,\n        28170,\n        20900,\n        20803,\n        22435,\n        34945,\n        21407,\n        25588,\n        36757,\n        22253,\n        21592,\n        22278,\n        29503,\n        28304,\n        32536,\n        36828,\n        33489,\n        24895,\n        24616,\n        38498,\n        22636,\n        27781,\n        23195,\n        29783,\n        27260,\n        29232,\n        30498,\n        40482,\n        34696,\n        40715\n    ],\n    yue: [\n        26352,\n        32422,\n        36234,\n        36291,\n        38053,\n        23731,\n        31908,\n        26376,\n        24742,\n        38405,\n        40864,\n        27198,\n        21014,\n        38074\n    ],\n    yun: [\n        32792,\n        20113,\n        37095,\n        21248,\n        38504,\n        20801,\n        36816,\n        34164,\n        37213,\n        26197,\n        38901,\n        23381,\n        37075,\n        33464,\n        29377,\n        24701,\n        32429,\n        27538,\n        26112,\n        27698\n    ],\n    za: [21277, 30776, 26434, 25334, 21634],\n    zai: [26685, 21705, 28798, 23472, 36733, 20877, 22312, 21681, 23869, 30014],\n    zan: [25874, 26242, 36190, 29906, 26141, 31786, 31948, 36273, 37694],\n    zang: [36163, 33039, 33900, 22872, 25109, 33255],\n    zao: [\n        36973,\n        31967,\n        20991,\n        34299,\n        26531,\n        26089,\n        28577,\n        34468,\n        36481,\n        22122,\n        36896,\n        30338,\n        28790,\n        29157,\n        21795,\n        32555\n    ],\n    ze: [\n        36131,\n        25321,\n        21017,\n        27901,\n        20164,\n        36188,\n        21863,\n        36846,\n        26115,\n        31534,\n        31654,\n        33332\n    ],\n    zei: [36156],\n    zen: [24590, 35886],\n    zeng: [22686, 24974, 26366, 36192, 32559, 29969, 32638, 38147],\n    zha: [\n        25166,\n        21939,\n        28195,\n        26413,\n        36711,\n        38113,\n        38392,\n        30504,\n        26629,\n        27048,\n        21643,\n        20045,\n        28856,\n        35784,\n        25592,\n        21522,\n        21668,\n        21747,\n        24589,\n        30751,\n        30148,\n        34481,\n        40772\n    ],\n    zhai: [25688, 25995, 23429, 31364, 20538, 23528, 30758],\n    zhan: [\n        30651,\n        27617,\n        35449,\n        31896,\n        27838,\n        30415,\n        26025,\n        36759,\n        23853,\n        23637,\n        34360,\n        26632,\n        21344,\n        25112,\n        31449,\n        28251,\n        32509,\n        35893,\n        25612,\n        26051\n    ],\n    zhang: [\n        27167,\n        31456,\n        24432,\n        28467,\n        24352,\n        25484,\n        28072,\n        26454,\n        19976,\n        24080,\n        36134,\n        20183,\n        32960,\n        30260,\n        38556,\n        20169,\n        37155,\n        24155,\n        23938,\n        29520,\n        23260,\n        29835,\n        34769\n    ],\n    zhao: [\n        25307,\n        26157,\n        25214,\n        27836,\n        36213,\n        29031,\n        32617,\n        20806,\n        32903,\n        21484,\n        29226,\n        35791,\n        26873,\n        38026,\n        31498\n    ],\n    zhe: [\n        36974,\n        25240,\n        21746,\n        34544,\n        36761,\n        32773,\n        38167,\n        34071,\n        36825,\n        27993,\n        35882,\n        38508,\n        26584,\n        36740,\n        30932,\n        40551,\n        35098,\n        34567,\n        36205\n    ],\n    zhen: [\n        29645,\n        26015,\n        30495,\n        29956,\n        30759,\n        33275,\n        36126,\n        38024,\n        20390,\n        26517,\n        30137,\n        35786,\n        38663,\n        25391,\n        38215,\n        38453,\n        32540,\n        26722,\n        27035,\n        36728,\n        36168,\n        32983,\n        26389,\n        31087,\n        30043,\n        40489\n    ],\n    zheng: [\n        33976,\n        25379,\n        30529,\n        24449,\n        29424,\n        20105,\n        24596,\n        25972,\n        25327,\n        27491,\n        25919,\n        24103,\n        30151,\n        37073,\n        35777,\n        35812,\n        23781,\n        38066,\n        38126,\n        31581\n    ],\n    zhi: [\n        33437,\n        26525,\n        25903,\n        21553,\n        34584,\n        30693,\n        32930,\n        33026,\n        27713,\n        20043,\n        32455,\n        32844,\n        30452,\n        26893,\n        27542,\n        25191,\n        20540,\n        20356,\n        22336,\n        25351,\n        27490,\n        36286,\n        21482,\n        26088,\n        32440,\n        24535,\n        25370,\n        25527,\n        33267,\n        33268,\n        32622,\n        24092,\n        23769,\n        21046,\n        26234,\n        31209,\n        31258,\n        36136,\n        28825,\n        30164,\n        28382,\n        27835,\n        31378,\n        21358,\n        38495,\n        37061,\n        22516,\n        33463,\n        25709,\n        24089,\n        24558,\n        24408,\n        21675,\n        39576,\n        26633,\n        26547,\n        26624,\n        26702,\n        36725,\n        36734,\n        25908,\n        36157,\n        33187,\n        31049,\n        31063,\n        40697,\n        38601,\n        40503,\n        30179,\n        34541,\n        32119,\n        37231,\n        36310,\n        36396,\n        36399,\n        35960,\n        35311\n    ],\n    zhong: [\n        20013,\n        30405,\n        24544,\n        38047,\n        34935,\n        32456,\n        31181,\n        32959,\n        37325,\n        20210,\n        20247,\n        20898,\n        38202,\n        34749,\n        33282,\n        33327,\n        36405\n    ],\n    zhou: [\n        33311,\n        21608,\n        24030,\n        27954,\n        35788,\n        31909,\n        36724,\n        32920,\n        24090,\n        21650,\n        30385,\n        23449,\n        26172,\n        39588,\n        21828,\n        30528,\n        20508,\n        35833,\n        33646,\n        39739,\n        32419,\n        32964,\n        30881,\n        31808,\n        33331,\n        37198,\n        40119\n    ],\n    zhu: [\n        29664,\n        26666,\n        34523,\n        26417,\n        29482,\n        35832,\n        35803,\n        36880,\n        31481,\n        28891,\n        29038,\n        25284,\n        30633,\n        22065,\n        20027,\n        33879,\n        26609,\n        21161,\n        34496,\n        36142,\n        38136,\n        31569,\n        20303,\n        27880,\n        31069,\n        39547,\n        20267,\n        20367,\n        37054,\n        33486,\n        33585,\n        27929,\n        28186,\n        28532,\n        39546,\n        26492,\n        27104,\n        27237,\n        28855,\n        38114,\n        30128,\n        30211,\n        34480,\n        31482,\n        31672,\n        32741,\n        36485,\n        40584\n    ],\n    zhua: [25235],\n    zhuai: [25341],\n    zhuan: [19987, 30742, 36716, 25776, 36186, 31686, 25247, 21869, 39067],\n    zhuang: [26729, 24196, 35013, 22918, 25758, 22766, 29366, 20012],\n    zhui: [26894, 38181, 36861, 36184, 22368, 32512, 33809, 39571, 32530],\n    zhun: [35846, 20934],\n    zhuo: [\n        25417,\n        25305,\n        21331,\n        26700,\n        29730,\n        33537,\n        37196,\n        28796,\n        27978,\n        20524,\n        35836,\n        24308,\n        34142,\n        25826,\n        21852,\n        27998,\n        28095,\n        26451,\n        28975,\n        31130,\n        26027\n    ],\n    zi: [\n        20857,\n        21672,\n        36164,\n        23039,\n        28363,\n        28100,\n        23388,\n        32043,\n        20180,\n        31869,\n        28371,\n        23376,\n        33258,\n        28173,\n        23383,\n        35864,\n        23915,\n        22986,\n        23411,\n        32513,\n        26771,\n        36750,\n        36160,\n        24675,\n        30502,\n        38193,\n        31213,\n        32788,\n        31531,\n        31906,\n        35292,\n        35390,\n        40123,\n        39661\n    ],\n    zong: [39683, 26837, 36394, 23447, 32508, 24635, 32437, 33113, 31933],\n    zou: [37049, 36208, 22863, 25549, 37177, 40112],\n    zu: [\n        31199,\n        36275,\n        21330,\n        26063,\n        31062,\n        35781,\n        38459,\n        32452,\n        20430,\n        33785,\n        21840,\n        24450,\n        39541,\n        36468\n    ],\n    zuan: [38075, 32386, 25893, 32565],\n    zui: [22068, 37257, 26368, 32618],\n    zun: [23562, 36981, 25753, 27197, 40159],\n    zuo: [\n        26152,\n        24038,\n        20304,\n        26590,\n        20570,\n        20316,\n        22352,\n        24231,\n        38429,\n        38460,\n        32985,\n        31066,\n        37218\n    ],\n    cou: [34222, 26993, 36751, 33120],\n    nang: [25902, 21725, 22228, 39317, 26345],\n    o: [21908],\n    dia: [22002],\n    chuai: [22060, 33194, 36409],\n    cen: [23697, 28052],\n    diu: [38117],\n    nou: [32808],\n    fou: [32566],\n    bia: [39647]\n};\n\nlet breakStr = \"_\";\nfunction handle(char, modifierName) {\n    let charPoint = char.charCodeAt(0);\n    for (let p in chinesePointCode) {\n        if (chinesePointCode[p].indexOf(charPoint) > -1) {\n            char = p + breakStr;\n            // handle modifierName\n            // 处理 modifierName\n            if (modifierName && modifierName === \"capitalize\") {\n                char = char.toUpperCase();\n            } else if (modifierName && modifierName === \"upperfirst\") {\n                char = char.charAt(0).toUpperCase() + char.slice(1);\n            }\n        }\n    }\n    return char;\n}\n\nexport function py(value, modifierName) {\n    let chars = value.split(\"\");\n    let length = chars.length;\n    if (length) {\n        for (let i = 0; i < length; i++) {\n            let char = chars[i];\n            chars[i] = handle(char, modifierName);\n        }\n        value = chars.join(\"\");\n        // 去掉 . 前面的一个 _ 字符串\n        value = value.replace(\"_.\", \".\");\n    }\n    return value;\n}\n"
  },
  {
    "path": "src/utils/store.js",
    "content": "import Cookies from \"js-cookie\";\n/**\n * 存储localStorage\n */\nexport const setStore = (name, content, expireDay) => {\n    if (!name) return;\n    if (typeof content !== \"string\") {\n        content = JSON.stringify(content);\n    }\n    Cookies.set(name, content, { expires: expireDay });\n};\n\n/**\n * 获取localStorage\n */\nexport const getStore = name => {\n    if (!name) return;\n    let content = Cookies.get(name);\n    try {\n        content = JSON.parse(content);\n        return content;\n    } catch (e) {\n        return content;\n    }\n};\n\n/**\n * 删除localStorage\n */\nexport const removeStore = name => {\n    if (!name) return;\n    Cookies.remove(name);\n};\n"
  },
  {
    "path": "src/views/adManage/ad.vue",
    "content": "<template>\n\n    <div>\n        <el-form :inline=\"true\" :model=\"query\" class=\"query-form\" size=\"mini\">\n            <el-form-item class=\"query-form-item\">\n                <el-input v-model=\"query.title\" placeholder=\"广告标题\"></el-input>\n            </el-form-item>\n            <el-form-item>\n                <el-button-group>\n                    <el-button type=\"primary\" icon=\"el-icon-refresh\" @click=\"onReset\"></el-button>\n                    <el-button type=\"primary\" icon=\"search\" @click=\"onSubmit\">查询</el-button>\n                    <el-button type=\"primary\" @click.native=\"handleForm(null,null)\">新增</el-button>\n                </el-button-group>\n            </el-form-item>\n        </el-form>\n        <el-table\n            v-loading=\"loading\"\n            :data=\"list\"\n            style=\"width: 100%;\">\n            <el-table-column\n                label=\"ID\"\n                prop=\"adId\"\n                fixed>\n            </el-table-column>\n            <el-table-column\n                label=\"标题\"\n                prop=\"title\"\n                with=\"300\"\n                :show-overflow-tooltip=\"true\"\n                fixed>\n            </el-table-column>\n            <el-table-column\n                label=\"描述\"\n                prop=\"describe\"\n                with=\"300\"\n                :show-overflow-tooltip=\"true\">\n            </el-table-column>\n            <el-table-column\n                label=\"封面\"\n                prop=\"picUrl\">\n                <template slot-scope=\"scope\">\n                    <img style=\"max-width: 200px;max-height: 150px;\" :src=\"scope.row.picUrl\"/>\n                </template>\n            </el-table-column>\n            <el-table-column\n                label=\"状态\">\n                <template slot-scope=\"scope\">\n                    <el-tag :type=\"scope.row.status | statusFilterType\">{{scope.row.status | statusFilterName}}</el-tag>\n                </template>\n            </el-table-column>\n            <el-table-column\n                label=\"操作\"\n                fixed=\"right\">\n                <template slot-scope=\"scope\">\n                    <el-button type=\"text\" size=\"small\" @click.native=\"handleForm(scope.$index, scope.row)\">编辑</el-button>\n                    <el-button type=\"text\" size=\"small\" @click.native=\"handleDel(scope.$index, scope.row)\">删除</el-button>\n                </template>\n            </el-table-column>\n        </el-table>\n\n        <el-pagination\n            :page-size=\"query.limit\"\n            @current-change=\"handleCurrentChange\"\n            layout=\"prev, pager, next\"\n            :total=\"total\">\n        </el-pagination>\n\n        <!--表单-->\n        <el-dialog\n            :title=\"formMap[formName]\"\n            :visible.sync=\"formVisible\"\n            :before-close=\"hideForm\"\n            width=\"85%\"\n            top=\"5vh\">\n            <el-form :model=\"formData\" :rules=\"formRules\" ref=\"dataForm\">\n                <el-form-item label=\"标题\" prop=\"title\">\n                    <el-input v-model=\"formData.title\" auto-complete=\"off\"></el-input>\n                </el-form-item>\n                <el-form-item label=\"封面图片（上传或填写网络地址）\" prop=\"pic\">\n                    <div>\n                        <el-input size=\"small\" v-model=\"formData.pic\" auto-complete=\"off\" placeholder=\"图片路径\"></el-input>\n\n                        <upload ext=\"jpg,png,jpeg\" :size=\"716800\"  @on-select=\"onSelectPic\"></upload>\n\n                    </div>\n                    <div class=\"upload-img\" v-if=\"formData.picUrl\">\n                        <img :src=\"formData.picUrl\" style=\"max-width: 200px;max-height: 200px;\">\n                    </div>\n\n                </el-form-item>\n                <el-form-item label=\"描述\" prop=\"describe\">\n                    <el-input v-model=\"formData.describe\" auto-complete=\"off\"></el-input>\n                </el-form-item>\n                <el-form-item label=\"跳转方式\" prop=\"jumpType\">\n                    <el-radio-group v-model=\"formData.jumpType\">\n                        <el-radio :label=\"0\">web 网页</el-radio>\n                        <el-radio :label=\"1\">APP内跳转</el-radio>\n                        <el-radio :label=\"2\">小程序跳转</el-radio>\n                    </el-radio-group>\n                </el-form-item>\n\n                <el-form-item label=\"URL链接（web网页和小程序时）\" prop=\"jumpUrl\" v-if=\"formData.jumpType === 0 || formData.jumpType === 2\">\n                    <el-input v-model=\"formData.jumpUrl\" auto-complete=\"off\"></el-input>\n                </el-form-item>\n\n                <el-form-item label=\"IOS 类名（APP内跳转时）\" prop=\"iosUrl\" v-if=\"formData.jumpType === 1\">\n                    <el-input v-model=\"formData.iosUrl\" auto-complete=\"off\"></el-input>\n                </el-form-item>\n\n                <el-form-item label=\"Android 类名（APP内跳转时）\" prop=\"androidUrl\" v-if=\"formData.jumpType === 1\">\n                    <el-input v-model=\"formData.androidUrl\" auto-complete=\"off\"></el-input>\n                </el-form-item>\n\n                <el-form-item label=\"小程序的 appid（小程序跳转时）\" prop=\"wxaAppid\" v-if=\"formData.jumpType === 2\">\n                    <el-input v-model=\"formData.wxaAppid\" auto-complete=\"off\"></el-input>\n                </el-form-item>\n\n                <el-form-item label=\"开始时间\">\n\n                    <el-form-item prop=\"startTime\" style=\"display: inline-block;\">\n                        <el-date-picker\n                            v-model=\"formData.startTime\"\n                            type=\"datetime\"\n                            size=\"mini\"\n                            placeholder=\"开始时间（默认不限制）\">\n                        </el-date-picker>\n                    </el-form-item>\n                    -\n                    <el-form-item prop=\"endTime\" style=\"display: inline-block;\">\n                        <el-date-picker\n                            v-model=\"formData.endTime\"\n                            type=\"datetime\"\n                            size=\"mini\"\n                            placeholder=\"结束时间（默认不限制）\">\n                        </el-date-picker>\n                    </el-form-item>\n\n                </el-form-item>\n\n                <el-form-item label=\"统计事件的名称\" prop=\"eventName\">\n                    <el-input v-model=\"formData.eventName\" auto-complete=\"off\"></el-input>\n                </el-form-item>\n\n                <el-form-item label=\"状态\" prop=\"status\">\n                    <el-radio-group v-model=\"formData.status\">\n                        <el-radio :label=\"0\">禁用</el-radio>\n                        <el-radio :label=\"1\">正常</el-radio>\n                    </el-radio-group>\n                </el-form-item>\n\n                <el-form-item>\n                    <el-button style=\"float: right;\" type=\"primary\" @click.native=\"formSubmit()\" :loading=\"formLoading\">提前提交</el-button>\n                </el-form-item>\n\n                <el-form-item label=\"新用户展示逻辑\">\n                    <div class=\"remove-list-box\">\n                        第几次展示\n                        <el-form-item prop=\"newShowStartNum\" style=\"display: inline-block;\">\n                            <el-input-number\n                                v-model=\"formData.newShowStartNum\"\n                                :min=\"0\"\n                                controls-position=\"right\"\n                                size=\"mini\"\n                                label=\"第几次展示\">\n                            </el-input-number>\n                        </el-form-item>\n                        -\n                        展示最大次数\n                        <el-form-item prop=\"newShowMaxNum\" style=\"display: inline-block;\">\n                            <el-input-number\n                                v-model=\"formData.newShowMaxNum\"\n                                :min=\"0\"\n                                controls-position=\"right\"\n                                size=\"mini\"\n                                label=\"展示最大次数\">\n                            </el-input-number>\n                        </el-form-item>\n                    </div>\n                </el-form-item>\n\n                <el-form-item label=\"老用户展示逻辑\">\n                    <div class=\"remove-list-box\">\n                        第几次展示\n                        <el-form-item prop=\"oldShowStartNum\" style=\"display: inline-block;\">\n                            <el-input-number\n                                v-model=\"formData.oldShowStartNum\"\n                                :min=\"0\"\n                                controls-position=\"right\"\n                                size=\"mini\"\n                                label=\"第几次展示\">\n                            </el-input-number>\n                        </el-form-item>\n                        -\n                        展示最大次数\n                        <el-form-item prop=\"oldShowMaxNum\" style=\"display: inline-block;\">\n                            <el-input-number\n                                v-model=\"formData.oldShowMaxNum\"\n                                :min=\"0\"\n                                controls-position=\"right\"\n                                size=\"mini\"\n                                label=\"展示最大次数\">\n                            </el-input-number>\n                        </el-form-item>\n                    </div>\n                </el-form-item>\n\n                <el-form-item>\n                    <span style='color:red;'>以下内容（注意：不要输入空格和逗号，批量添加以英文逗号隔开）黑白名单用来控制屏蔽或者显示</span>\n                </el-form-item>\n\n                <el-form-item label=\"渠道名单\" required>\n                    <el-form-item prop=\"channelType\">\n                        <el-radio-group v-model=\"formData.channelType\">\n                            <el-radio :label=\"0\">不限制</el-radio>\n                            <el-radio :label=\"1\">白名单</el-radio>\n                            <el-radio :label=\"2\">黑名单</el-radio>\n                        </el-radio-group>\n                    </el-form-item>\n                    <el-form-item prop=\"channelList\" v-if=\"formData.channelType !== 0\">\n                        <div class=\"remove-list-box\">\n                            <div class=\"remove-list\">\n                                <div class=\"remove-list-item\" v-for=\"(item, index) in formData.channelList\" :key=\"index\">\n                                    {{item}}\n                                    <i class=\"el-icon-close remove-list-close\" @click=\"handleChannelListClose(index)\"></i>\n                                </div>\n                            </div>\n                            <div v-show=\"formData.channelList.length >= 15\" style=\"color: red;\">到达最大次数，最大15个</div>\n                            <el-input\n                                size=\"mini\"\n                                v-model=\"channelListInput\"\n                                placeholder=\"输入渠道版本插入\"\n                                style=\"width: 190px;\"\n                                ref=\"channelListRef\"\n                                @keyup.enter.native=\"handleChannelListSubmit\"\n                                maxlength=\"12\">\n                            </el-input>\n                            <el-button type=\"primary\" size=\"mini\" @click.native=\"handleChannelListSubmit()\" style=\"margin-left: 5px;\">插入</el-button>\n                        </div>\n                    </el-form-item>\n                </el-form-item>\n\n                <el-form-item label=\"Android版本名单\" required>\n                    <el-form-item prop=\"androidVersionType\">\n                        <el-radio-group v-model=\"formData.androidVersionType\">\n                            <el-radio :label=\"0\">不限制</el-radio>\n                            <el-radio :label=\"1\">白名单</el-radio>\n                            <el-radio :label=\"2\">黑名单</el-radio>\n                        </el-radio-group>\n                    </el-form-item>\n                    <el-form-item prop=\"androidVersionList\" v-if=\"formData.androidVersionType !== 0\">\n                        <div class=\"remove-list-box\">\n                            <div class=\"remove-list\">\n                                <div class=\"remove-list-item\" v-for=\"(item, index) in formData.androidVersionList\" :key=\"index\">\n                                    {{item}}\n                                    <i class=\"el-icon-close remove-list-close\" @click=\"handleAndroidVersionListClose(index)\"></i>\n                                </div>\n                            </div>\n                            <div v-show=\"formData.androidVersionList.length >= 15\" style=\"color: red;\">到达最大次数，最大15个</div>\n                            <el-input\n                                size=\"mini\"\n                                v-model=\"androidVersionListInput\"\n                                placeholder=\"输入Android版本插入\"\n                                style=\"width: 190px;\"\n                                ref=\"androidVersionListRef\"\n                                @keyup.enter.native=\"handleAndroidVersionListSubmit\"\n                                maxlength=\"12\">\n                            </el-input>\n                            <el-button type=\"primary\" size=\"mini\" @click.native=\"handleAndroidVersionListSubmit()\" style=\"margin-left: 5px;\">插入</el-button>\n                        </div>\n                    </el-form-item>\n                </el-form-item>\n\n                <el-form-item label=\"iOS版本名单\" required>\n                    <el-form-item prop=\"iosVersionType\">\n                        <el-radio-group v-model=\"formData.iosVersionType\">\n                            <el-radio :label=\"0\">不限制</el-radio>\n                            <el-radio :label=\"1\">白名单</el-radio>\n                            <el-radio :label=\"2\">黑名单</el-radio>\n                        </el-radio-group>\n                    </el-form-item>\n                    <el-form-item prop=\"iosVersionList\" v-if=\"formData.iosVersionType !== 0\">\n                        <div class=\"remove-list-box\">\n                            <div class=\"remove-list\">\n                                <div class=\"remove-list-item\" v-for=\"(item, index) in formData.iosVersionList\" :key=\"index\">\n                                    {{item}}\n                                    <i class=\"el-icon-close remove-list-close\" @click=\"handleIosVersionListClose(index)\"></i>\n                                </div>\n                            </div>\n                            <div v-show=\"formData.iosVersionList.length >= 15\" style=\"color: red;\">到达最大次数，最大15个</div>\n                            <el-input\n                                size=\"mini\"\n                                v-model=\"iosVersionListInput\"\n                                placeholder=\"输入iOS版本插入\"\n                                style=\"width: 190px;\"\n                                ref=\"iosVersionListRef\"\n                                @keyup.enter.native=\"handleIosVersionListSubmit\"\n                                maxlength=\"12\">\n                            </el-input>\n                            <el-button type=\"primary\" size=\"mini\" @click.native=\"handleIosVersionListSubmit()\" style=\"margin-left: 5px;\">插入</el-button>\n                        </div>\n                    </el-form-item>\n                </el-form-item>\n\n            </el-form>\n            <div slot=\"footer\" class=\"dialog-footer\">\n                <el-button @click.native=\"hideForm\">取消</el-button>\n                <el-button type=\"primary\" @click.native=\"formSubmit()\" :loading=\"formLoading\">提交</el-button>\n            </div>\n        </el-dialog>\n\n    </div>\n\n</template>\n\n<script>\nimport { adList, adSave, adDelete } from \"../../api/ad/ad\";\nimport Upload from \"../../components/File/Upload.vue\";\nconst formJson = {\n    adId: \"\",\n    title: \"\",\n    describe: \"\",\n    pic: \"\",\n    picUrl: \"\",\n    jumpType: \"\",\n    jumpUrl: \"\",\n    iosUrl: \"\",\n    androidUrl: \"\",\n    wxaAppid: \"\",\n    channelType: 0,\n    channelList: [],\n    androidVersionType: 0,\n    androidVersionList: [],\n    iosVersionType: 0,\n    iosVersionList: [],\n    newShowStartNum: 0,\n    newShowMaxNum: 0,\n    oldShowStartNum: 0,\n    oldShowMaxNum: 0,\n    endTime: \"\",\n    eventName: \"\",\n    status: 1\n};\nexport default {\n    data() {\n        return {\n            query: {\n                title: \"\",\n                page: 1,\n                limit: 20\n            },\n            channelListInput: \"\",\n            androidVersionListInput: \"\",\n            iosVersionListInput: \"\",\n            list: [],\n            total: 0,\n            loading: true,\n            index: null,\n            formName: null,\n            formMap: {\n                add: \"新增\",\n                edit: \"编辑\"\n            },\n            formLoading: false,\n            formVisible: false,\n            formData: formJson,\n            formRules: {\n                title: [\n                    {\n                        required: true,\n                        message: \"请输入广告标题\",\n                        trigger: \"blur\"\n                    }\n                ],\n                pic: [\n                    {\n                        required: true,\n                        message: \"请选择封面图片\",\n                        trigger: \"change\"\n                    }\n                ],\n                jumpType: [\n                    {\n                        required: true,\n                        message: \"请选择跳转方式\",\n                        trigger: \"change\"\n                    }\n                ],\n                jumpUrl: [\n                    {\n                        required: true,\n                        message: \"请输入跳转链接\",\n                        trigger: \"blur\"\n                    }\n                ],\n                androidUrl: [\n                    {\n                        required: true,\n                        message: \"请输入Android类名\",\n                        trigger: \"blur\"\n                    }\n                ],\n                iosUrl: [\n                    {\n                        required: true,\n                        message: \"请输入IOS类名\",\n                        trigger: \"blur\"\n                    }\n                ],\n                wxaAppid: [\n                    {\n                        required: true,\n                        message: \"请输入小程序Appid\",\n                        trigger: \"blur\"\n                    }\n                ],\n                channelList: [\n                    {\n                        required: true,\n                        message: \"请输入至少一个渠道名单\",\n                        trigger: \"change\"\n                    }\n                ],\n                androidVersionList: [\n                    {\n                        required: true,\n                        message: \"请输入至少一个Android版本名单\",\n                        trigger: \"change\"\n                    }\n                ],\n                iosVersionList: [\n                    {\n                        required: true,\n                        message: \"请输入至少一个iOS版本名单\",\n                        trigger: \"change\"\n                    }\n                ],\n                status: [\n                    { required: true, message: \"请选择状态\", trigger: \"change\" }\n                ]\n            },\n            deleteLoading: false\n        };\n    },\n    components: {\n        Upload\n    },\n    methods: {\n        onReset() {\n            this.$router.push({\n                path: \"\"\n            });\n            this.query = {\n                title: \"\",\n                page: 1,\n                limit: 20\n            };\n            this.getList();\n        },\n        onSubmit() {\n            this.$router.push({\n                path: \"\",\n                query: this.query\n            });\n            this.getList();\n        },\n        handleSizeChange(val) {\n            this.query.limit = val;\n            this.getList();\n        },\n        handleCurrentChange(val) {\n            this.query.page = val;\n            this.getList();\n        },\n        getList() {\n            this.loading = true;\n            adList(this.query)\n                .then(response => {\n                    this.loading = false;\n                    this.list = response.data.list || [];\n                    this.total = response.data.total || 0;\n                })\n                .catch(() => {\n                    this.loading = false;\n                    this.list = [];\n                    this.total = 0;\n                });\n        },\n        // 删除渠道\n        handleChannelListClose(index) {\n            console.log(index);\n            // 更改值\n            this.formData.channelList.splice(index, 1);\n        },\n        // 添加渠道白名单\n        handleChannelListSubmit() {\n            // 更改值\n            if (\n                this.channelListInput &&\n                this.formData.channelList.length < 15\n            ) {\n                let arr = this.channelListInput.split(\",\");\n                for (let i in arr) {\n                    if (\n                        arr[i] !== \"\" &&\n                        (this.formData.channelList.length === 0 ||\n                            this.formData.channelList.indexOf(arr[i]) < 0)\n                    ) {\n                        this.formData.channelList.push(arr[i]);\n                    }\n                }\n                this.channelListInput = \"\";\n                this.$refs.channelListRef.focus();\n            }\n        },\n        // 删除Android版本\n        handleAndroidVersionListClose(index) {\n            // 更改值\n            this.formData.androidVersionList.splice(index, 1);\n        },\n        // 添加Android版本\n        handleAndroidVersionListSubmit() {\n            // 更改值\n            if (\n                this.androidVersionListInput &&\n                this.formData.androidVersionList.length < 15\n            ) {\n                let arr = this.androidVersionListInput.split(\",\");\n                for (let i in arr) {\n                    let avList = this.formData.androidVersionList;\n                    if (\n                        arr[i] !== \"\" &&\n                        (avList.length === 0 || avList.indexOf(arr[i]) < 0)\n                    ) {\n                        this.formData.androidVersionList.push(arr[i]);\n                    }\n                }\n                this.androidVersionListInput = \"\";\n                this.$refs.androidVersionListRef.focus();\n            }\n        },\n        // 删除Ios版本\n        handleIosVersionListClose(index) {\n            // 更改值\n            this.formData.iosVersionList.splice(index, 1);\n        },\n        // 添加Ios版本\n        handleIosVersionListSubmit() {\n            // 更改值\n            if (\n                this.iosVersionListInput &&\n                this.formData.iosVersionList.length < 15\n            ) {\n                let arr = this.iosVersionListInput.split(\",\");\n                for (let i in arr) {\n                    if (\n                        arr[i] !== \"\" &&\n                        (this.formData.iosVersionList.length === 0 ||\n                            this.formData.iosVersionList.indexOf(arr[i]) < 0)\n                    ) {\n                        this.formData.iosVersionList.push(arr[i]);\n                    }\n                }\n                this.iosVersionListInput = \"\";\n                this.$refs.iosVersionListRef.focus();\n            }\n        },\n        // 刷新表单\n        resetForm() {\n            if (this.$refs[\"dataForm\"]) {\n                // 清空字段\n                this.$refs[\"dataForm\"].resetFields();\n                // 清空验证信息表单\n                this.$refs[\"dataForm\"].clearValidate();\n            }\n        },\n        // 隐藏表单\n        hideForm() {\n            // 更改值\n            this.formVisible = !this.formVisible;\n            return true;\n        },\n        // 显示表单\n        handleForm(index, row) {\n            this.formVisible = true;\n            // 刷新表单\n            this.resetForm();\n            this.formData = JSON.parse(JSON.stringify(formJson));\n            if (row !== null) {\n                this.formData = Object.assign({}, row);\n            }\n            this.formName = \"add\";\n            if (index !== null) {\n                this.index = index;\n                this.formName = \"edit\";\n            }\n        },\n        formSubmit() {\n            this.$refs[\"dataForm\"].validate(valid => {\n                if (valid) {\n                    this.formLoading = true;\n                    let data = Object.assign({}, this.formData);\n                    adSave(data, this.formName)\n                        .then(response => {\n                            this.formLoading = false;\n                            if (response.code) {\n                                this.$message.error(response.message);\n                                return false;\n                            }\n                            this.$message.success(\"操作成功\");\n                            this.formVisible = false;\n                            if (this.formName === \"add\") {\n                                // 向头部添加数据\n                                data.adId = response.data.adId;\n                                this.list.unshift(data);\n                            } else {\n                                this.list.splice(this.index, 1, data);\n                            }\n                        })\n                        .catch(() => {\n                            this.formLoading = false;\n                        });\n                }\n            });\n        },\n        // 删除\n        handleDel(index, row) {\n            if (row.adId) {\n                this.$confirm(\"确认删除该记录吗?\", \"提示\", {\n                    type: \"warning\"\n                })\n                    .then(() => {\n                        let para = { adId: row.adId };\n                        this.deleteLoading = true;\n                        adDelete(para)\n                            .then(response => {\n                                this.deleteLoading = false;\n                                if (response.code) {\n                                    this.$message.error(response.message);\n                                    return false;\n                                }\n                                this.$message(\"删除成功\");\n                                // 刷新数据\n                                this.list.splice(index, 1);\n                            })\n                            .catch(() => {\n                                this.deleteLoading = false;\n                            });\n                    })\n                    .catch(() => {\n                        this.$message.info(\"取消删除\");\n                    });\n            }\n        },\n        onSelectPic(filePath, filePathUrl) {\n            this.formData.pic = filePath;\n            this.formData.picUrl = filePathUrl;\n        }\n    },\n    filters: {\n        statusFilterType(status) {\n            const statusMap = {\n                0: \"gray\",\n                1: \"success\"\n            };\n            return statusMap[status];\n        },\n        statusFilterName(status) {\n            const statusMap = {\n                0: \"禁用\",\n                1: \"正常\"\n            };\n            return statusMap[status];\n        }\n    },\n    mounted() {},\n    created() {\n        // 将参数拷贝进查询对象\n        let query = this.$route.query;\n        this.query = Object.assign(this.query, query);\n        this.query.limit = parseInt(this.query.limit);\n        // 加载表格数据\n        this.getList();\n    }\n};\n</script>\n\n<style type=\"text/scss\" lang=\"scss\">\n</style>\n"
  },
  {
    "path": "src/views/adManage/adSite.vue",
    "content": "<template>\n\n    <div>\n        <el-form :inline=\"true\" :model=\"query\" class=\"query-form\" size=\"mini\">\n            <el-form-item class=\"query-form-item\">\n                <el-input v-model=\"query.siteId\" placeholder=\"广告位id\"></el-input>\n            </el-form-item>\n            <el-form-item>\n                <el-button-group>\n                    <el-button type=\"primary\" icon=\"el-icon-refresh\" @click=\"onReset();\"></el-button>\n                    <el-button type=\"primary\" icon=\"search\" @click=\"onSubmit\">查询</el-button>\n                    <el-button type=\"primary\" @click.native=\"handleForm(null,null)\">新增</el-button>\n                </el-button-group>\n            </el-form-item>\n        </el-form>\n        <el-table\n            v-loading=\"loading\"\n            :data=\"list\"\n            style=\"width: 100%;\">\n            <el-table-column\n                label=\"ID\"\n                prop=\"siteId\"\n                fixed>\n            </el-table-column>\n            <el-table-column\n                label=\"广告位名称\"\n                prop=\"siteName\"\n                fixed>\n            </el-table-column>\n            <el-table-column\n                label=\"广告位描述\"\n                prop=\"describe\"\n                with=\"300\"\n                :show-overflow-tooltip=\"true\">\n            </el-table-column>\n            <el-table-column\n                label=\"最后更新时间\"\n                prop=\"updateTime\">\n                <template slot-scope=\"scope\">\n                    <i class=\"el-icon-time\"></i>\n                    <span>{{ scope.row.modifiedTime | formatDateStr('yyyy-MM-dd hh:mm:ss') }}</span>\n                </template>\n            </el-table-column>\n            <el-table-column\n                label=\"操作\"\n                fixed=\"right\">\n                <template slot-scope=\"scope\">\n                    <el-button type=\"text\" size=\"small\" @click.native=\"handleForm(scope.$index, scope.row)\">编辑</el-button>\n                    <el-button type=\"text\" size=\"small\" @click.native=\"handleDel(scope.$index, scope.row)\">删除</el-button>\n                </template>\n            </el-table-column>\n        </el-table>\n\n        <el-pagination\n            :page-size=\"query.limit\"\n            @current-change=\"handleCurrentChange\"\n            layout=\"prev, pager, next\"\n            :total=\"total\">\n        </el-pagination>\n\n        <!--表单-->\n        <el-dialog\n            :title=\"formMap[formName]\"\n            :visible.sync=\"formVisible\"\n            :before-close=\"hideForm\"\n            width=\"85%\"\n            top=\"5vh\">\n            <el-form :model=\"formData\" :rules=\"formRules\" ref=\"dataForm\">\n                <el-form-item label=\"广告位名称\" prop=\"siteName\">\n                    <el-input v-model=\"formData.siteName\" auto-complete=\"off\"></el-input>\n                </el-form-item>\n                <el-form-item label=\"包含广告（拖动更改排序）\" prop=\"describe\">\n                    <span style=\"color: red;\">注意：广告列表中红色背景为已禁用</span>\n                    <div class=\"remove-list-box\">\n                        <div class=\"remove-list\">\n\n                            <draggable element=\"ul\" v-model=\"formData.ads\">\n                                <li class=\"remove-list-item\" style=\"cursor: move;\" :style=\"{backgroundColor: item.status === 1 ? '#fff' : '#fef0f0', color: item.status === 1 ? '#606266' : '#f56c6c'}\" v-for=\"(item, index) in formData.ads\" :key=\"index\">\n                                    {{item.title}} - {{item.describe}}（ID：{{item.adId}}）\n                                    <i class=\"el-icon-close remove-list-close\" @click=\"handleAdClose(index)\"></i>\n                                </li>\n                            </draggable>\n\n                        </div>\n                        添加广告（填写广告ID，批量添加以英文逗号隔开，按顺序排列）\n                        <el-select\n                            size=\"mini\"\n                            v-model=\"adId\"\n                            multiple\n                            filterable\n                            remote\n                            reserve-keyword\n                            placeholder=\"输入广告ID查找\"\n                            :no-data-text=\"adListNoDataText\"\n                            :remote-method=\"queryAdIdAsync\"\n                            @change=\"handleAdChange\"\n                            :loading=\"queryAdIdAsyncLoading\">\n                            <el-option\n                                v-for=\"item in adList\"\n                                :key=\"item.adId\"\n                                :label=\"item.title\"\n                                :value=\"item.adId\">\n                            </el-option>\n                        </el-select>\n                        <el-button type=\"primary\" size=\"mini\" @click.native=\"handleAdSubmit()\" style=\"margin-left: 5px;\">插入</el-button>\n                    </div>\n                </el-form-item>\n                <el-form-item label=\"描述\" prop=\"describe\">\n                    <el-input v-model=\"formData.describe\" auto-complete=\"off\"></el-input>\n                </el-form-item>\n            </el-form>\n            <div slot=\"footer\" class=\"dialog-footer\">\n                <el-button @click.native=\"hideForm\">取消</el-button>\n                <el-button type=\"primary\" @click.native=\"formSubmit()\" :loading=\"formLoading\">提交</el-button>\n            </div>\n        </el-dialog>\n\n    </div>\n\n</template>\n\n<script>\nimport {\n    adSiteList,\n    adSiteAdList,\n    adSiteSave,\n    adSiteDelete\n} from \"../../api/ad/adSite\";\nimport draggable from \"vuedraggable\";\nconst formJson = {\n    siteId: \"\",\n    siteName: \"\",\n    describe: \"\",\n    ads: []\n};\nexport default {\n    data() {\n        return {\n            query: {\n                siteId: \"\",\n                page: 1,\n                limit: 20\n            },\n            list: [],\n            adId: [],\n            adSelectList: [],\n            adList: {},\n            adListNoDataText: \"无数据\",\n            queryAdIdAsyncLoading: false,\n            total: 0,\n            loading: true,\n            index: null,\n            formName: null,\n            formMap: {\n                add: \"新增\",\n                edit: \"编辑\"\n            },\n            formLoading: false,\n            formVisible: false,\n            formData: formJson,\n            formRules: {\n                siteName: [\n                    {\n                        required: true,\n                        message: \"请输入广告位名称\",\n                        trigger: \"blur\"\n                    }\n                ]\n            },\n            deleteLoading: false\n        };\n    },\n    components: {\n        draggable\n    },\n    methods: {\n        onReset() {\n            this.$router.push({\n                path: \"\"\n            });\n            this.query = {\n                siteId: \"\",\n                page: 1,\n                limit: 20\n            };\n            this.getList();\n        },\n        onSubmit() {\n            this.$router.push({\n                path: \"\",\n                query: this.query\n            });\n            this.getList();\n        },\n        handleSizeChange(val) {\n            this.query.limit = val;\n            this.getList();\n        },\n        handleCurrentChange(val) {\n            this.query.page = val;\n            this.getList();\n        },\n        getList() {\n            this.loading = true;\n            adSiteList(this.query)\n                .then(response => {\n                    this.loading = false;\n                    this.list = response.data.list || [];\n                    this.total = response.data.total || 0;\n                })\n                .catch(() => {\n                    this.loading = false;\n                    this.list = [];\n                    this.total = 0;\n                });\n        },\n        // 异步查找广告\n        queryAdIdAsync(adIdStr) {\n            this.adListNoDataText = \"请确认广告状态是否正常\";\n            if (!adIdStr || adIdStr.charAt(adIdStr.length - 1) === \",\") {\n                this.adList = {};\n                return false;\n            }\n            let adIds = adIdStr.split(\",\");\n            this.formData.ads.forEach(item => {\n                adIds.forEach((obj, index) => {\n                    if (item.adId === parseInt(obj)) {\n                        adIds.splice(index, 1);\n                    }\n                });\n            });\n            if (adIds.length === 0) {\n                this.adListNoDataText = \"当前所有广告已存在列表中\";\n                return false;\n            }\n            this.queryAdIdAsyncLoading = true;\n            adSiteAdList(adIds)\n                .then(response => {\n                    this.queryAdIdAsyncLoading = false;\n                    let list = response.data.list;\n                    if (list) {\n                        list.forEach(value => {\n                            let has = false;\n                            if (this.adList.length > 0) {\n                                has = this.adList.some(item => {\n                                    return item.adId === value.adId;\n                                });\n                            }\n                            if (!has) {\n                                if (!this.adList.hasOwnProperty(value.adId)) {\n                                    this.adList[value.adId] = value;\n                                }\n                            }\n                        });\n                    } else {\n                        this.adList = {};\n                    }\n                })\n                .catch(() => {\n                    this.adList = {};\n                    this.queryAdIdAsyncLoading = false;\n                });\n        },\n        handleAdSubmit() {\n            if (this.adSelectList.length === 0) {\n                return false;\n            }\n            let ads = [];\n            this.adSelectList.map(item => {\n                if (this.adList.hasOwnProperty(item)) {\n                    ads.push(this.adList[item]);\n                }\n            });\n            this.formData.ads = this.formData.ads.concat(ads);\n            this.adList = {};\n            this.adId = [];\n        },\n        handleAdClose(index) {\n            this.formData.ads.splice(index, 1);\n        },\n        handleAdChange(item) {\n            this.adSelectList = item;\n        },\n        // 刷新表单\n        resetForm() {\n            if (this.$refs[\"dataForm\"]) {\n                // 清空验证信息表单\n                this.$refs[\"dataForm\"].clearValidate();\n                // 刷新表单\n                this.$refs[\"dataForm\"].resetFields();\n            }\n        },\n        // 隐藏表单\n        hideForm() {\n            // 更改值\n            this.formVisible = !this.formVisible;\n            return true;\n        },\n        // 显示表单\n        handleForm(index, row) {\n            this.formVisible = true;\n            this.formData = JSON.parse(JSON.stringify(formJson));\n            if (row !== null) {\n                this.formData = Object.assign({}, row);\n            }\n            this.formName = \"add\";\n            if (index !== null) {\n                this.index = index;\n                this.formName = \"edit\";\n            }\n        },\n        formSubmit() {\n            this.$refs[\"dataForm\"].validate(valid => {\n                if (valid) {\n                    this.formLoading = true;\n                    let data = Object.assign({}, this.formData);\n                    let adIds = [];\n                    let ads = data.ads;\n                    ads.forEach(function(value) {\n                        adIds.push(value.adId);\n                    });\n                    data.ads = [];\n                    data.adIds = adIds;\n                    let addData = Object.assign({}, this.formData);\n                    adSiteSave(data, this.formName)\n                        .then(response => {\n                            this.formLoading = false;\n                            if (response.code) {\n                                this.$message.error(response.message);\n                                return false;\n                            }\n                            this.$message.success(\"操作成功\");\n                            this.formVisible = false;\n                            if (this.formName === \"add\") {\n                                // 向头部添加数据\n                                addData.siteId = response.data.siteId;\n                                this.list.unshift(addData);\n                            } else {\n                                this.list.splice(this.index, 1, addData);\n                            }\n                            // 刷新表单\n                            this.resetForm();\n                        })\n                        .catch(() => {\n                            this.formLoading = false;\n                        });\n                }\n            });\n        },\n        // 删除\n        handleDel(index, row) {\n            if (row.siteId) {\n                this.$confirm(\"确认删除该记录吗?\", \"提示\", {\n                    type: \"warning\"\n                })\n                    .then(() => {\n                        let para = { siteId: row.siteId };\n                        this.deleteLoading = false;\n                        adSiteDelete(para)\n                            .then(res => {\n                                this.deleteLoading = false;\n                                if (res.code) {\n                                    this.$message.error(res.message);\n                                    return false;\n                                }\n                                this.$message.success(\"删除成功\");\n                                // 刷新数据\n                                this.list.splice(index, 1);\n                            })\n                            .catch(() => {\n                                this.deleteLoading = false;\n                            });\n                    })\n                    .catch(() => {\n                        this.$message.info(\"取消删除\");\n                    });\n            }\n        }\n    },\n    filters: {},\n    mounted() {\n        document.body.ondrop = function(event) {\n            event.preventDefault();\n            event.stopPropagation();\n        };\n    },\n    created() {\n        // 将参数拷贝进查询对象\n        let query = this.$route.query;\n        this.query = Object.assign(this.query, query);\n        this.query.limit = parseInt(this.query.limit);\n        // 加载表格数据\n        this.getList();\n    }\n};\n</script>\n\n<style type=\"text/scss\" lang=\"scss\">\n</style>\n"
  },
  {
    "path": "src/views/components/tinymce-demo.vue",
    "content": "<template>\n    <div>\n        <el-button type=\"text\" @click=\"dialogVisible = true\">点击打开 表单</el-button>\n        <el-dialog\n            title=\"表单\"\n            :visible.sync=\"dialogVisible\"\n            width=\"80%\">\n            <el-form :model=\"formData\">\n                <el-form-item label=\"站内内容\" prop=\"content\">\n                    <tinymce style=\"display: inline-block;width: 100%;\" :height=\"300\" v-model=\"formData.content\"/>\n                </el-form-item>\n            </el-form>\n        </el-dialog>\n    </div>\n\n</template>\n\n\n<script>\nimport Tinymce from \"../../components/Tinymce/index.vue\";\nexport default {\n    data() {\n        return {\n            formData: {\n                content: \"\"\n            },\n            dialogVisible: false\n        };\n    },\n    components: {\n        Tinymce\n    },\n    methods: {\n        resourceSelect(item) {\n            alert(JSON.stringify(item));\n        },\n        handleClose(done) {\n            this.$confirm(\"确认关闭？\")\n                .then(() => {\n                    done();\n                })\n                .catch(() => {});\n        }\n    },\n    mounted() {}\n};\n</script>\n\n\n<style type=\"text/scss\" lang=\"scss\">\n</style>\n"
  },
  {
    "path": "src/views/components/upload-demo.vue",
    "content": "<template>\n    <div>\n        <div class=\"page\">\n            <h3>上传图片：</h3>\n            <el-card class=\"box-card\">\n                <el-card class=\"box-card w100\" v-if=\"filePathUrl1\">\n                    <img :src=\"filePathUrl1\" style=\"width: 100%;\" alt=\"\">\n                </el-card>\n                <upload ext=\"jpg\" :width=\"100\" @on-select=\"onSelect1\"></upload>\n            </el-card>\n        </div>\n        <div class=\"page\">\n            <h3>上传视频：</h3>\n            <el-card class=\"box-card\">\n                <el-card class=\"box-card w100\" v-if=\"filePathUrl2\">\n                    <video :src=\"filePathUrl2\" controls=\"controls\" style=\"width: 100%;\"></video>\n                </el-card>\n                <upload ext=\"mp4\" @on-select=\"onSelect2\"></upload>\n            </el-card>\n        </div>\n        <div class=\"page\">\n            <h3>上传音乐：</h3>\n            <el-card class=\"box-card\">\n                <el-card class=\"box-card w100\" v-if=\"filePathUrl3\">\n                    <audio :src=\"filePathUrl3\" controls=\"controls\" style=\"width: 100%;\"></audio>\n                </el-card>\n                <upload ext=\"mp3\" @on-select=\"onSelect3\"></upload>\n            </el-card>\n        </div>\n        <div class=\"page\">\n            <h3>上传限制大小（单位是 B：1024B = 1kb）：</h3>\n            <el-card class=\"box-card\">\n                <el-card class=\"box-card\" v-if=\"filePathUrl4\">\n                    文件地址：{{ filePathUrl4 }}\n                </el-card>\n                <upload :size=\"60000\" @on-select=\"onSelect4\"></upload>\n            </el-card>\n        </div>\n    </div>\n\n</template>\n\n\n<script>\nimport Upload from \"../../components/File/Upload.vue\";\nexport default {\n    data() {\n        return {\n            filePath1: \"\",\n            filePathUrl1: \"\",\n            filePath2: \"\",\n            filePathUrl2: \"\",\n            filePath3: \"\",\n            filePathUrl3: \"\",\n            filePath4: \"\",\n            filePathUrl4: \"\",\n            dialogVisible: false\n        };\n    },\n    components: {\n        Upload\n    },\n    methods: {\n        onSelect1(filePath, filePathUrl) {\n            this.filePath1 = filePath;\n            this.filePathUrl1 = filePathUrl;\n        },\n        onSelect2(filePath, filePathUrl) {\n            console.log(filePathUrl);\n            this.filePath2 = filePath;\n            this.filePathUrl2 = filePathUrl;\n        },\n        onSelect3(filePath, filePathUrl) {\n            this.filePath3 = filePath;\n            this.filePathUrl3 = filePathUrl;\n        },\n        onSelect4(filePath, filePathUrl) {\n            this.filePath4 = filePath;\n            this.filePathUrl4 = filePathUrl;\n        }\n    },\n    mounted() {}\n};\n</script>\n\n\n<style type=\"text/scss\" lang=\"scss\">\n.page > h3 {\n    margin: 20px 0 20px;\n    color: #1f2f3d;\n}\n.w100 {\n    width: 300px;\n    margin-bottom: 15px;\n}\n</style>\n"
  },
  {
    "path": "src/views/components/uploadList.vue",
    "content": "<template>\n    <div>\n        <el-button type=\"text\" @click=\"dialogVisible = true\">点击打开 上传插件</el-button>\n        <el-dialog\n            title=\"上传插件\"\n            :visible.sync=\"dialogVisible\"\n            width=\"80%\">\n            <file-resource\n                :uploadUrl=\"uploadUrl\"\n                :isAll=\"true\"\n                :fileExt=\"fileExt\"\n                :size=\"2000000\"\n                :limit=\"15\"\n                @resourceSelect=\"resourceSelect\">\n            </file-resource>\n        </el-dialog>\n    </div>\n\n</template>\n\n\n<script>\nimport FileResource from \"../../components/common/FileResource.vue\";\nimport { BASE_URL } from \"../../config/app\";\nexport default {\n    data() {\n        return {\n            uploadUrl: BASE_URL + \"/admin/file/resource/upload\",\n            fileExt: \"jpg,png,gif\",\n            dialogVisible: false\n        };\n    },\n    components: {\n        FileResource\n    },\n    methods: {\n        resourceSelect(item) {\n            alert(JSON.stringify(item));\n        },\n        handleClose(done) {\n            this.$confirm(\"确认关闭？\")\n                .then(() => {\n                    done();\n                })\n                .catch(() => {});\n        }\n    },\n    mounted() {}\n};\n</script>\n\n\n<style type=\"text/scss\" lang=\"scss\">\n</style>\n"
  },
  {
    "path": "src/views/error/err401.vue",
    "content": "<template>\n    <div class=\"error401\">\n        <div class=\"error401-body-con\">\n            <div class=\"error401-body-con-title\">4<span class=\"error401-0-span\">0</span><span class=\"error401-key-span\">3</span></div>\n            <p class=\"error401-body-con-message\">You don't have permission</p>\n            <div class=\"error401-btn-con\">\n                <a class=\"error401-home-button\" href=\"/\">返回首页</a>\n                <div class=\"error401-block-button\" @click=\"backPage\">返回上一页</div>\n            </div>\n        </div>\n    </div>\n</template>\n\n<script>\nexport default {\n    name: \"Error401\",\n    methods: {\n        backPage() {\n            this.$router.go(-1);\n        }\n    }\n};\n</script>\n\n<style type=\"text/scss\" lang=\"scss\">\n@keyframes error401animation {\n    0% {\n        transform: rotateZ(0deg);\n    }\n    40% {\n        transform: rotateZ(-20deg);\n    }\n    45% {\n        transform: rotateZ(-15deg);\n    }\n    50% {\n        transform: rotateZ(-20deg);\n    }\n    55% {\n        transform: rotateZ(-15deg);\n    }\n    60% {\n        transform: rotateZ(-20deg);\n    }\n    100% {\n        transform: rotateZ(0deg);\n    }\n}\n.error401 {\n    &-body-con {\n        width: 700px;\n        height: 500px;\n        position: absolute;\n        left: 50%;\n        top: 50%;\n        transform: translate(-50%, -50%);\n        &-title {\n            text-align: center;\n            font-size: 240px;\n            font-weight: 700;\n            color: #2d8cf0;\n            height: 260px;\n            line-height: 260px;\n            margin-top: 40px;\n            .error401-0-span {\n                display: inline-block;\n                position: relative;\n                width: 170px;\n                height: 170px;\n                border-radius: 50%;\n                border: 20px solid #ed3f14;\n                color: #ed3f14;\n                margin-right: 10px;\n                i {\n                    display: inline-block;\n                    font-size: 120px;\n                    position: absolute;\n                    left: 50%;\n                    top: 50%;\n                    transform: translate(-50%, -50%);\n                }\n            }\n            .error401-key-span {\n                display: inline-block;\n                position: relative;\n                width: 100px;\n                height: 190px;\n                border-radius: 50%;\n                margin-right: 10px;\n                i {\n                    display: inline-block;\n                    font-size: 190px;\n                    position: absolute;\n                    left: 20px;\n                    transform: translate(-50%, -60%);\n                    transform-origin: center bottom;\n                    animation: error401animation 2.8s ease 0s infinite;\n                }\n            }\n        }\n        &-message {\n            display: block;\n            text-align: center;\n            font-size: 30px;\n            font-weight: 500;\n            letter-spacing: 4px;\n            color: #dddde2;\n        }\n    }\n    &-btn-con {\n        text-align: center;\n        padding: 20px 0;\n        margin-bottom: 40px;\n    }\n    &-home-button {\n        width: 200px;\n        border-color: transparent;\n        padding: 6px 15px 7px;\n        font-size: 14px;\n        border-radius: 4px;\n        display: inline-block;\n        margin-bottom: 0;\n        font-weight: 400;\n        text-align: center;\n        vertical-align: middle;\n        -ms-touch-action: manipulation;\n        touch-action: manipulation;\n        cursor: pointer;\n        background: transparent none;\n        white-space: nowrap;\n        line-height: 1.5;\n        -webkit-user-select: none;\n        -moz-user-select: none;\n        -ms-user-select: none;\n        user-select: none;\n        transition: color 0.2s linear, background-color 0.2s linear;\n        color: #495060;\n    }\n    &-home-button:hover {\n        text-decoration: none;\n        color: #57a3f3;\n    }\n    &-block-button {\n        width: 200px;\n        margin-left: 40px;\n        color: #fff;\n        border-color: #2d8cf0;\n        padding: 6px 15px 7px;\n        font-size: 14px;\n        border-radius: 4px;\n        display: inline-block;\n        margin-bottom: 0;\n        font-weight: 400;\n        text-align: center;\n        vertical-align: middle;\n        -ms-touch-action: manipulation;\n        touch-action: manipulation;\n        cursor: pointer;\n        background: #2d8cf0 none;\n        border-bottom-color: transparent;\n        white-space: nowrap;\n        line-height: 1.5;\n        -webkit-user-select: none;\n        -moz-user-select: none;\n        -ms-user-select: none;\n        user-select: none;\n        transition: color 0.2s linear, background-color 0.2s linear;\n    }\n    &-block-button:hover {\n        color: #fff;\n        background-color: #57a3f3;\n        border-color: #57a3f3;\n    }\n}\n</style>\n"
  },
  {
    "path": "src/views/error/err404.vue",
    "content": "<template>\n    <div class=\"error404\">\n        <div class=\"error404-body-con\">\n            <div class=\"error404-body-con-title\">4<span>0</span>4</div>\n            <p class=\"error404-body-con-message\">YOU&nbsp;&nbsp;LOOK&nbsp;&nbsp;LOST</p>\n            <div class=\"error404-btn-con\">\n                <a href=\"/\" class=\"error404-home-button\">返回首页</a>\n                <div class=\"error404-block-button\" @click=\"backPage\">返回上一页</div>\n            </div>\n        </div>\n    </div>\n</template>\n\n<script>\nexport default {\n    name: \"Error404\",\n    methods: {\n        backPage() {\n            this.$router.go(-1);\n        }\n    }\n};\n</script>\n\n<style type=\"text/scss\" lang=\"scss\">\n@keyframes error404animation {\n    0% {\n        transform: rotateZ(0deg);\n    }\n    20% {\n        transform: rotateZ(-60deg);\n    }\n    40% {\n        transform: rotateZ(-10deg);\n    }\n    60% {\n        transform: rotateZ(50deg);\n    }\n    80% {\n        transform: rotateZ(-20deg);\n    }\n    100% {\n        transform: rotateZ(0deg);\n    }\n}\n.error404 {\n    &-body-con {\n        width: 700px;\n        height: 500px;\n        position: absolute;\n        left: 50%;\n        top: 50%;\n        transform: translate(-50%, -50%);\n        &-title {\n            text-align: center;\n            font-size: 240px;\n            font-weight: 700;\n            color: #2d8cf0;\n            height: 260px;\n            line-height: 260px;\n            margin-top: 40px;\n            span {\n                display: inline-block;\n                color: #19be6b;\n                font-size: 230px;\n                animation: error404animation 3s ease 0s infinite alternate;\n            }\n        }\n        &-message {\n            display: block;\n            text-align: center;\n            font-size: 30px;\n            font-weight: 500;\n            letter-spacing: 12px;\n            color: #dddde2;\n        }\n    }\n    &-btn-con {\n        text-align: center;\n        padding: 20px 0;\n        margin-bottom: 40px;\n    }\n    &-home-button {\n        width: 200px;\n        border-color: transparent;\n        padding: 6px 15px 7px;\n        font-size: 14px;\n        border-radius: 4px;\n        display: inline-block;\n        margin-bottom: 0;\n        font-weight: 400;\n        text-align: center;\n        vertical-align: middle;\n        -ms-touch-action: manipulation;\n        touch-action: manipulation;\n        cursor: pointer;\n        background: transparent none;\n        white-space: nowrap;\n        line-height: 1.5;\n        -webkit-user-select: none;\n        -moz-user-select: none;\n        -ms-user-select: none;\n        user-select: none;\n        transition: color 0.2s linear, background-color 0.2s linear;\n        color: #495060;\n    }\n    &-home-button:hover {\n        text-decoration: none;\n        color: #57a3f3;\n    }\n    &-block-button {\n        width: 200px;\n        margin-left: 40px;\n        color: #fff;\n        border-color: #2d8cf0;\n        padding: 6px 15px 7px;\n        font-size: 14px;\n        border-radius: 4px;\n        display: inline-block;\n        margin-bottom: 0;\n        font-weight: 400;\n        text-align: center;\n        vertical-align: middle;\n        -ms-touch-action: manipulation;\n        touch-action: manipulation;\n        cursor: pointer;\n        background: #2d8cf0 none;\n        border-bottom-color: transparent;\n        white-space: nowrap;\n        line-height: 1.5;\n        -webkit-user-select: none;\n        -moz-user-select: none;\n        -ms-user-select: none;\n        user-select: none;\n        transition: color 0.2s linear, background-color 0.2s linear;\n    }\n    &-block-button:hover {\n        color: #fff;\n        background-color: #57a3f3;\n        border-color: #57a3f3;\n    }\n}\n</style>\n"
  },
  {
    "path": "src/views/error/err500.vue",
    "content": "<template>\n    <div class=\"error500\">\n        <div class=\"error500-body-con\">\n            <div class=\"error500-body-con-title\">\n                5<span class=\"error500-0-span\">0</span><span class=\"error500-0-span\">0</span>\n            </div>\n            <p class=\"error500-body-con-message\">Oops! the server is wrong</p>\n            <div class=\"error500-btn-con\">\n                <a href=\"/\" class=\"error500-home-button\">返回首页</a>\n                <div class=\"error500-block-button\" @click=\"backPage\">返回上一页</div>\n            </div>\n        </div>\n    </div>\n</template>\n\n<script>\nexport default {\n    name: \"Error500\",\n    methods: {\n        backPage() {\n            this.$router.go(-1);\n        }\n    }\n};\n</script>\n\n<style type=\"text/scss\" lang=\"scss\">\n@keyframes error500animation {\n    0% {\n        transform: rotateZ(0deg);\n    }\n    20% {\n        transform: rotateZ(-10deg);\n    }\n    40% {\n        transform: rotateZ(5deg);\n    }\n    60% {\n        transform: rotateZ(-5deg);\n    }\n    80% {\n        transform: rotateZ(10deg);\n    }\n    100% {\n        transform: rotateZ(0deg);\n    }\n}\n.error500 {\n    &-body-con {\n        width: 700px;\n        height: 500px;\n        position: absolute;\n        left: 50%;\n        top: 50%;\n        transform: translate(-50%, -50%);\n        &-title {\n            text-align: center;\n            font-size: 240px;\n            font-weight: 700;\n            color: #2d8cf0;\n            height: 260px;\n            line-height: 260px;\n            margin-top: 40px;\n            .error500-0-span {\n                display: inline-block;\n                position: relative;\n                width: 170px;\n                height: 170px;\n                border-radius: 50%;\n                border: 20px solid #ed3f14;\n                color: #ed3f14;\n                margin-right: 10px;\n                i {\n                    display: inline-block;\n                    font-size: 120px;\n                    position: absolute;\n                    bottom: -10px;\n                    left: 10px;\n                    transform-origin: center bottom;\n                    animation: error500animation 3s ease 0s infinite alternate;\n                }\n            }\n        }\n        &-message {\n            display: block;\n            text-align: center;\n            font-size: 30px;\n            font-weight: 500;\n            letter-spacing: 4px;\n            color: #dddde2;\n        }\n    }\n    &-btn-con {\n        text-align: center;\n        padding: 20px 0;\n        margin-bottom: 40px;\n    }\n    &-home-button {\n        width: 200px;\n        border-color: transparent;\n        padding: 6px 15px 7px;\n        font-size: 14px;\n        border-radius: 4px;\n        display: inline-block;\n        margin-bottom: 0;\n        font-weight: 400;\n        text-align: center;\n        vertical-align: middle;\n        -ms-touch-action: manipulation;\n        touch-action: manipulation;\n        cursor: pointer;\n        background: transparent none;\n        white-space: nowrap;\n        line-height: 1.5;\n        -webkit-user-select: none;\n        -moz-user-select: none;\n        -ms-user-select: none;\n        user-select: none;\n        transition: color 0.2s linear, background-color 0.2s linear;\n        color: #495060;\n    }\n    &-home-button:hover {\n        text-decoration: none;\n        color: #57a3f3;\n    }\n    &-block-button {\n        width: 200px;\n        margin-left: 40px;\n        color: #fff;\n        border-color: #2d8cf0;\n        padding: 6px 15px 7px;\n        font-size: 14px;\n        border-radius: 4px;\n        display: inline-block;\n        margin-bottom: 0;\n        font-weight: 400;\n        text-align: center;\n        vertical-align: middle;\n        -ms-touch-action: manipulation;\n        touch-action: manipulation;\n        cursor: pointer;\n        background: #2d8cf0 none;\n        border-bottom-color: transparent;\n        white-space: nowrap;\n        line-height: 1.5;\n        -webkit-user-select: none;\n        -moz-user-select: none;\n        -ms-user-select: none;\n        user-select: none;\n        transition: color 0.2s linear, background-color 0.2s linear;\n    }\n    &-block-button:hover {\n        color: #fff;\n        background-color: #57a3f3;\n        border-color: #57a3f3;\n    }\n}\n</style>\n"
  },
  {
    "path": "src/views/home/SidebarItem.vue",
    "content": "<!--<template>-->\n    <!--<div class='menu-wrapper'>-->\n\n        <!--&lt;!&ndash;<template v-for=\"(item,i) in routes\">&ndash;&gt;-->\n        <!--&lt;!&ndash;<template v-if=\"item.children\">&ndash;&gt;-->\n        <!--&lt;!&ndash;<el-submenu :index=\"item.path+'/'+item.children[0].path\">&ndash;&gt;-->\n        <!--&lt;!&ndash;<template slot=\"title\"><i :class=\"item.icon ? item.icon : ''\"></i>{{item.name}}</template>&ndash;&gt;-->\n\n\n        <!--&lt;!&ndash;<template v-for=\"(subItem,i1) in item.children\">&ndash;&gt;-->\n        <!--&lt;!&ndash;<template v-if=\"subItem.children\">&ndash;&gt;-->\n        <!--&lt;!&ndash;<el-submenu :index=\"item.path + '/' + subItem.path + '/' + subItem.children[0].path\">&ndash;&gt;-->\n        <!--&lt;!&ndash;<template slot=\"title\"><i :class=\"subItem.icon ? subItem.icon : ''\"></i>{{subItem.name}}</template>&ndash;&gt;-->\n\n        <!--&lt;!&ndash;<template v-if=\"subItem.children\">&ndash;&gt;-->\n        <!--&lt;!&ndash;<el-menu-item v-for=\"(subItemItem,i2) in subItem.subs\" :key=\"i2\" :index=\"item.path + '/' + subItem.path + '/' + subItemItem.path\">&ndash;&gt;-->\n        <!--&lt;!&ndash;<template slot=\"title\"><i :class=\"subItemItem.icon ? subItemItem.icon : ''\"></i>{{subItemItem.name}}</template>&ndash;&gt;-->\n        <!--&lt;!&ndash;</el-menu-item>&ndash;&gt;-->\n        <!--&lt;!&ndash;</template>&ndash;&gt;-->\n\n        <!--&lt;!&ndash;</el-submenu>&ndash;&gt;-->\n        <!--&lt;!&ndash;</template>&ndash;&gt;-->\n\n        <!--&lt;!&ndash;<template v-else>&ndash;&gt;-->\n        <!--&lt;!&ndash;<el-menu-item :index=\"item.path + '/' + subItem.path\">&ndash;&gt;-->\n        <!--&lt;!&ndash;<i :class=\"subItem.icon ? subItem.icon : ''\"></i>{{ subItem.name }}&ndash;&gt;-->\n        <!--&lt;!&ndash;</el-menu-item>&ndash;&gt;-->\n        <!--&lt;!&ndash;</template>&ndash;&gt;-->\n        <!--&lt;!&ndash;</template>&ndash;&gt;-->\n\n        <!--&lt;!&ndash;</el-submenu>&ndash;&gt;-->\n        <!--&lt;!&ndash;</template>&ndash;&gt;-->\n        <!--&lt;!&ndash;<template v-else>&ndash;&gt;-->\n        <!--&lt;!&ndash;<el-menu-item :index=\"item.path\">&ndash;&gt;-->\n        <!--&lt;!&ndash;<template slot=\"title\"><i :class=\"item.icon ? item.icon : ''\"></i>{{item.name}}</template>&ndash;&gt;-->\n        <!--&lt;!&ndash;</el-menu-item>&ndash;&gt;-->\n        <!--&lt;!&ndash;</template>&ndash;&gt;-->\n        <!--&lt;!&ndash;</template>&ndash;&gt;-->\n\n        <!--<template v-for=\"(item,i) in routes\">-->\n            <!--<template v-if=\"item.children\">-->\n                <!--<el-submenu :index=\"item.path+'/'+item.children[0].path\">-->\n                    <!--<template slot=\"title\"><i :class=\"item.icon ? item.icon : ''\"></i>{{item.path}}-{{item.name}}</template>-->\n\n                    <!--<template v-for=\"subChild in item.children\">-->\n                        <!--<sidebar-item :routes='[subChild]'></sidebar-item>-->\n                    <!--</template>-->\n\n                <!--</el-submenu>-->\n            <!--</template>-->\n            <!--<template v-else>-->\n                <!--<el-menu-item :index=\"item.path\">-->\n                    <!--<template slot=\"title\"><i :class=\"item.icon ? item.icon : ''\"></i>{{item.path}}-{{item.name}}</template>-->\n                <!--</el-menu-item>-->\n            <!--</template>-->\n        <!--</template>-->\n\n\n    <!--</div>-->\n<!--</template>-->\n\n<!--<script>-->\n    <!--export default {-->\n        <!--name: 'SidebarItem',-->\n        <!--props: {-->\n            <!--routes: {-->\n                <!--type: Array-->\n            <!--}-->\n        <!--}-->\n    <!--}-->\n<!--</script>-->\n\n<template>\n    <div v-if=\"!item.hidden&&item.children\">\n        <router-link v-if=\"!item.hidden&&item.noDropdown&&!item.children[0].children\" :to=\"item.path+'/'+item.children[0].path\">\n            <el-menu-item class=\"submenu-title-noDropdown\" :index=\"item.path+'/'+item.children[0].path\">\n                <icon-svg v-if='item.icon' :icon-class=\"item.icon\"></icon-svg>\n                <span slot=\"title\">{{item.name}}</span>\n            </el-menu-item>\n        </router-link>\n\n        <el-submenu class=\"nest-menu\" :index=\"item.path\" v-else-if=\"!item.noDropdown&&!item.hidden\">\n            <template slot=\"title\">\n                <icon-svg v-if='item.icon' :icon-class=\"item.icon\"></icon-svg>\n                <span v-if='item.name' slot=\"title\">{{item.name}}</span>\n            </template>\n            <template v-for=\"child in item.children\" v-if='!child.hidden'>\n\n                <sidebar-item :key=\"child.path\" v-if='child.children&&child.children.length>0' :item='child'> </sidebar-item>\n\n                <router-link :key=\"child.path\" v-else :to=\"item.path+'/'+child.path\">\n                    <el-menu-item :index=\"item.path+'/'+child.path\">\n                        <icon-svg v-if='child.icon' :icon-class=\"child.icon\"></icon-svg>\n                        <span slot=\"title\">{{child.name}}</span>\n                    </el-menu-item>\n                </router-link>\n\n            </template>\n\n        </el-submenu>\n    </div>\n</template>\n\n<script>\nexport default {\n    name: \"SidebarItem\",\n    props: {\n        item: {}\n    },\n    methods: {\n        // 查找子节点是否有可显示的节点\n        hasFilterChildrenHidden(children) {\n            const showingChildren = children.filter(item => {\n                return !item.hidden;\n            });\n            return showingChildren.length === 1;\n        }\n    }\n};\n</script>\n"
  },
  {
    "path": "src/views/home/TabsView.vue",
    "content": "<template>\n    <div class='tabs-view-container'>\n        <span v-for=\"tag in Array.from(visitedViews)\" :key=\"tag.path\" class=\"tag-box\" @contextmenu.prevent=\"closeViewTabs(tag, $event)\">\n            <router-link class=\"tabs-view\"  :to=\"tag.path\" :key=\"tag.path\">\n                <el-tag :closable=\"true\" :type=\"isActive(tag.path) ? '' : 'info'\" @close='closeViewTabs(tag,$event)'>\n                    {{tag.name}}\n                </el-tag>\n            </router-link>\n        </span>\n    </div>\n\n</template>\n\n<script>\nexport default {\n    computed: {\n        visitedViews() {\n            return this.$store.state.app.visitedViews.slice(-6);\n        }\n    },\n    methods: {\n        parentMenuShow() {\n            // 父级的是否显示左边菜单\n            this.$emit(\"listenChildParentMenuHide\");\n        },\n        closeViewTabs(view, $event) {\n            this.$store.dispatch(\"delVisitedViews\", view).then(views => {\n                if (this.isActive(view.path)) {\n                    const latestView = views.slice(-1)[0];\n                    if (latestView) {\n                        this.$router.push(latestView.path);\n                    } else {\n                        this.$router.push(\"/\");\n                    }\n                }\n            });\n            if ($event) {\n                $event.preventDefault();\n            }\n        },\n        generateRoute() {\n            if (this.$route.name) {\n                return this.$route;\n            }\n            return false;\n        },\n        addViewTabs() {\n            const route = this.generateRoute();\n            if (!route) {\n                return false;\n            }\n            this.parentMenuShow();\n            this.$store.dispatch(\"addVisitedViews\", this.generateRoute());\n        },\n        isActive(path) {\n            return path === this.$route.path;\n        }\n    },\n    watch: {\n        $route() {\n            this.addViewTabs();\n        }\n    }\n};\n</script>\n\n<style rel=\"stylesheet/scss\" lang=\"scss\" scoped>\n.tabs-view-container {\n    height: 100%;\n    .tag-box {\n        margin-left: 10px;\n        &:first-child {\n            margin-left: 0;\n        }\n    }\n    .tabs-view {\n        .el-tag {\n            display: inline;\n            padding: 10px;\n        }\n    }\n}\n</style>\n"
  },
  {
    "path": "src/views/home/index-3.0.1.vue",
    "content": "<template>\n\n    <el-container class=\"wrapper\">\n\n        <el-header class=\"header\">\n            <div class=\"header-logo\">\n                <!--<img alt=\"element-logo\"-->\n                <!--src=\"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cjxzdmcgd2lkdGg9IjE0NnB4IiBoZWlnaHQ9IjM4cHgiIHZpZXdCb3g9IjAgMCAxNDYgMzgiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiAgICA8IS0tIEdlbmVyYXRvcjogU2tldGNoIDQwICgzMzc2MikgLSBodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2ggLS0+CiAgICA8dGl0bGU+U2hhcGUgQ29weTwvdGl0bGU+CiAgICA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4KICAgIDxkZWZzPjwvZGVmcz4KICAgIDxnIGlkPSJ2Mi4yLjAiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPgogICAgICAgIDxnIGlkPSLpppbpobUt6buY6K6k5pWI5p6cLWNvcHktMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTcwLjAwMDAwMCwgLTE5LjAwMDAwMCkiIGZpbGw9IiNGRkZGRkYiPgogICAgICAgICAgICA8cGF0aCBkPSJNMjEyLjEzNTQ0MSw0NS4xNTc4MDc3IEMyMTIuMTM1NDQxLDQ1LjE1NzgwNzcgMjEyLjQyMDIzNyw0NS4xNTA1MTA1IDIxMi45NjA5MzcsNDUuMTU3ODA3NyBDMjEzLjUwMTYzNyw0NS4xNjUxMDQ5IDIxMy42NDg4NTEsNDUuNTcwODU1NiAyMTMuNjQ4ODUxLDQ1LjU3MDg1NTYgQzIxMy42NDg4NTEsNDUuNTcwODU1NiAyMTQuNzMzODI4LDQ3LjU2NjU2NTcgMjE1LjAyNDY3Nyw0OC4wNDkxNDM0IEMyMTUuMjgzNjA4LDQ4LjQ3ODcxMzMgMjE0Ljk3MzIyMSw0OC40NzA4NjU0IDIxNC45MDE4MTYsNDguNDYzODQzNiBDMjE0LjkwMjUwNCw0OC40NjI4Nzk4IDIxNC44ODcwOTUsNDguNDYyMTkxNCAyMTQuODg3MDk1LDQ4LjQ2MjE5MTQgQzIxNC44ODcwOTUsNDguNDYyMTkxNCAyMTQuODkzMDExLDQ4LjQ2MzAxNzUgMjE0LjkwMTgxNiw0OC40NjM4NDM2IEMyMTQuODk4NjUyLDQ4LjQ2ODI0OTUgMjE0LjU5NDczMSw0OC40NzgzMDAzIDIxMS40NDc1MjgsNDguNDYyMTkxNCBDMjA3LjA1ODY0MSw0Ny44NjY1NzYyIDIwNi45MDczLDQzLjkxODY2MzggMjA2LjkwNzMsNDMuOTE4NjYzOCBMMjA2LjkwNzMsMzYuODk2ODQ4MyBMMjA0LjQzMDgxMiwzNi44OTY4NDgzIEwyMDQuNDMwODEyLDM0LjI4MDg3NzkgQzIwNC40MzA4MTIsMzMuOTI0Mjc5OCAyMDQuODQzNTYsMzMuODY3ODI5OSAyMDQuODQzNTYsMzMuODY3ODI5OSBMMjA2LjkwNzMsMzMuODY3ODI5OSBMMjA2LjkwNzMsMzEuMjUxODU5NCBDMjA2LjkwNzMsMzAuODI1MTgwOSAyMDcuMzIwMDQ4LDMwLjcwMTEyODggMjA3LjMyMDA0OCwzMC43MDExMjg4IEMyMDcuMzIwMDQ4LDMwLjcwMTEyODggMjA4Ljc3MjY0NiwzMC4yODU4Nzc5IDIwOS42MTc4MTYsMzAuMDQ0MTA3MiBDMjA5Ljk2NDY2MiwyOS45NDQ5NzU2IDIxMC4wNzE3MDEsMzAuMTUwMzk4MiAyMTAuMDcxNzAxLDMwLjE1MDM5ODIgQzIxMC4wNzE3MDEsMzAuMTUwMzk4MiAyMTAuMjA5Mjg0LDMwLjA3NzQyNjQgMjEwLjIwOTI4NCwzMC4zOTI3MTk2IEwyMTAuMjA5Mjg0LDM0LjAwNTUxMjUgTDIxMy43ODY0MzMsMzQuMDA1NTEyNSBDMjE0LjEzNDY1NSwzNC4wMDU1MTI1IDIxNC4xOTkxODEsMzQuNDE4NTYwNSAyMTQuMTk5MTgxLDM0LjQxODU2MDUgTDIxNC4xOTkxODEsMzcuMDM0NTMxIEwyMTAuMjA5Mjg0LDM3LjAzNDUzMSBMMjEwLjIwOTI4NCw0My4wOTI1Njc4IEMyMTAuMjA5Mjg0LDQ0Ljg1MzM5MTMgMjEyLjEzNTQ0MSw0NS4xNTc4MDc3IDIxMi4xMzU0NDEsNDUuMTU3ODA3NyBMMjEyLjEzNTQ0MSw0NS4xNTc4MDc3IFogTTIwMS41NDE1NzYsNDguMTg2ODI2MSBMMTk5LjM0MDI1Myw0OC4xODY4MjYxIEMxOTguOTA4MzgxLDQ4LjE4NjgyNjEgMTk4LjkyNzUwNSw0Ny42MzYwOTU1IDE5OC45Mjc1MDUsNDcuNjM2MDk1NSBMMTk4LjkyNzUwNSwzNy40NDc1Nzg5IEMxOTguOTI3NTA1LDM2LjgyODY5NTQgMTk4LjEwMjAwOSwzNi42MjE0ODMgMTk4LjEwMjAwOSwzNi42MjE0ODMgTDE5My41NjE3ODEsMzYuNjIxNDgzIEMxOTIuODg0NDYyLDM2LjYyMTQ4MyAxOTIuODczODY4LDM3LjQ0NzU3ODkgMTkyLjg3Mzg2OCwzNy40NDc1Nzg5IEwxOTIuODczODY4LDQ3Ljc3Mzc3ODEgQzE5Mi44NzM4NjgsNDguMTc4NzAyOCAxOTIuNDYxMTIsNDguMTg2ODI2MSAxOTIuNDYxMTIsNDguMTg2ODI2MSBMMTkwLjI1OTc5Nyw0OC4xODY4MjYxIEMxODkuNzc1NzgyLDQ4LjE4NjgyNjEgMTg5Ljg0NzA0OSw0Ny42MzYwOTU1IDE4OS44NDcwNDksNDcuNjM2MDk1NSBMMTg5Ljg0NzA0OSwzNC44MzE2MDg1IEMxODkuODQ3MDQ5LDMzLjgwMzExOSAxOTEuMDg1MjkzLDMzLjU5MjQ2NDYgMTkxLjA4NTI5MywzMy41OTI0NjQ2IEwyMDAuNzE2MDgsMzMuNTkyNDY0NiBDMjAxLjY3Nzc4MywzMy41OTI0NjQ2IDIwMS45NTQzMjQsMzQuODMxNjA4NSAyMDEuOTU0MzI0LDM0LjgzMTYwODUgTDIwMS45NTQzMjQsNDcuNDk4NDEyOCBDMjAxLjk1NDMyNCw0OC4yMTg2MzA4IDIwMS41NDE1NzYsNDguMTg2ODI2MSAyMDEuNTQxNTc2LDQ4LjE4NjgyNjEgTDIwMS41NDE1NzYsNDguMTg2ODI2MSBaIE0xODUuODU3MTUyLDQyLjQwNDE1NDYgTDE3Ny4zMjcwMjcsNDIuNDA0MTU0NiBMMTc3LjMyNzAyNyw0NC40NjkzOTQ0IEMxNzcuMzI3MDI3LDQ1LjIxMzU2OTEgMTc4LjI5MDEwNiw0NS40MzMxNzMgMTc4LjI5MDEwNiw0NS40MzMxNzMgTDE4NS4xNjkyMzksNDUuNDMzMTczIEMxODUuNjU4NzU4LDQ1LjQzMzE3MyAxODUuOTk0NzM1LDQ1Ljg0NjIyMSAxODUuOTk0NzM1LDQ1Ljg0NjIyMSBDMTg1Ljk5NDczNSw0NS44NDYyMjEgMTg2LjU5NTAwOCw0Ny4wOTUxNDAzIDE4Ni44MjAyMzEsNDcuNjM2MDk1NSBDMTg3LjA0NTQ1NCw0OC4xNzcwNTA2IDE4Ni40MDc0ODMsNDguMTg2ODI2MSAxODYuNDA3NDgzLDQ4LjE4NjgyNjEgTDE3Ni4wODg3ODMsNDguMTg2ODI2MSBDMTc0Ljg0NjEzNiw0OC4xODY4MjYxIDE3NC41NzUzNzQsNDYuNjcyMzE2OSAxNzQuNTc1Mzc0LDQ2LjY3MjMxNjkgTDE3NC41NzUzNzQsMzQuOTY5MjkxMSBDMTc0LjU3NTM3NCwzNC4yOTYyOTgzIDE3NS41Mzg0NTIsMzQuMDA1NTEyNSAxNzUuNTM4NDUyLDM0LjAwNTUxMjUgTDE4NS44NTcxNTIsMzQuMDA1NTEyNSBDMTg2Ljg5NDExMywzNC4wMDU1MTI1IDE4Ny4wOTUzOTYsMzUuMjQ0NjU2NCAxODcuMDk1Mzk2LDM1LjI0NDY1NjQgTDE4Ny4wOTUzOTYsNDEuMTY1MDEwNyBDMTg3LjA5NTM5Niw0Mi4xNjM4OTgzIDE4NS44NTcxNTIsNDIuNDA0MTU0NiAxODUuODU3MTUyLDQyLjQwNDE1NDYgTDE4NS44NTcxNTIsNDIuNDA0MTU0NiBaIE0xODQuMzQzNzQzLDM3LjQ0NzU3ODkgQzE4NC4zNDM3NDMsMzcuNDQ3NTc4OSAxODQuMjU3MDY2LDM2Ljc1OTE2NTcgMTgzLjY1NTgzLDM2Ljc1OTE2NTcgTDE3OC4wMTQ5NCwzNi43NTkxNjU3IEMxNzguMDE0OTQsMzYuNzU5MTY1NyAxNzcuMzI3MDI3LDM2Ljk0Mzc5ODEgMTc3LjMyNzAyNywzNy40NDc1Nzg5IEwxNzcuMzI3MDI3LDM4Ljk2MjA4ODIgQzE3Ny4zMjcwMjcsMzguOTYyMDg4MiAxNzcuMzQ2ODM5LDM5LjY1MDUwMTQgMTc4LjAxNDk0LDM5LjY1MDUwMTQgTDE4My42NTU4MywzOS42NTA1MDE0IEMxODMuNjU1ODMsMzkuNjUwNTAxNCAxODQuMzQzNzQzLDM5LjQ4MDQ2MzQgMTg0LjM0Mzc0MywzOC44MjQ0MDU1IEwxODQuMzQzNzQzLDM3LjQ0NzU3ODkgTDE4NC4zNDM3NDMsMzcuNDQ3NTc4OSBaIE0xNzEuNDEwOTcyLDQ4LjE4NjgyNjEgTDE2OS4yMDk2NSw0OC4xODY4MjYxIEMxNjguOTE5MjEzLDQ4LjE4NjgyNjEgMTY4Ljc5NjkwMiw0Ny43NzM3NzgxIDE2OC43OTY5MDIsNDcuNzczNzc4MSBMMTY4Ljc5NjkwMiwzNy40NDc1Nzg5IEMxNjguNzk2OTAyLDM2LjgwNzIxNjkgMTY3Ljk3MTQwNiwzNi42MjE0ODMgMTY3Ljk3MTQwNiwzNi42MjE0ODMgTDE2NS45MDc2NjYsMzYuNjIxNDgzIEMxNjUuMzMxODgyLDM2LjYyMTQ4MyAxNjUuMjE5NzUyLDM3LjQ0NzU3ODkgMTY1LjIxOTc1MiwzNy40NDc1Nzg5IEwxNjUuMjE5NzUyLDQ3Ljc3Mzc3ODEgQzE2NS4yMTk3NTIsNDguMTE2MzMyNiAxNjQuODA3MDA0LDQ4LjE4NjgyNjEgMTY0LjgwNzAwNCw0OC4xODY4MjYxIEwxNjIuNjA1NjgyLDQ4LjE4NjgyNjEgQzE2Mi4yOTk1Niw0OC4xODY4MjYxIDE2Mi4xOTI5MzQsNDcuNzczNzc4MSAxNjIuMTkyOTM0LDQ3Ljc3Mzc3ODEgTDE2Mi4xOTI5MzQsMzcuNDQ3NTc4OSBDMTYyLjE5MjkzNCwzNi43OTI4OTc5IDE2MS4zNjc0MzgsMzYuNjIxNDgzIDE2MS4zNjc0MzgsMzYuNjIxNDgzIEwxNTkuMzAzNjk4LDM2LjYyMTQ4MyBDMTU4LjY3Mzk4MiwzNi42MjE0ODMgMTU4LjYxNTc4NCwzNy40NDc1Nzg5IDE1OC42MTU3ODQsMzcuNDQ3NTc4OSBMMTU4LjYxNTc4NCw0Ny43NzM3NzgxIEMxNTguNjE1Nzg0LDQ4LjIxNTczOTUgMTU4LjIwMzAzNiw0OC4xODY4MjYxIDE1OC4yMDMwMzYsNDguMTg2ODI2MSBMMTU2LjAwMTcxNCw0OC4xODY4MjYxIEMxNTUuNTg5Mzc4LDQ4LjE4NjgyNjEgMTU1LjU4ODk2Niw0Ny43NzM3NzgxIDE1NS41ODg5NjYsNDcuNzczNzc4MSBMMTU1LjU4ODk2NiwzNC42OTM5MjU4IEMxNTUuNTg4OTY2LDMzLjkzNjI1ODIgMTU2LjY4OTYyNywzMy41OTI0NjQ2IDE1Ni42ODk2MjcsMzMuNTkyNDY0NiBMMTcwLjQ0Nzg5NCwzMy41OTI0NjQ2IEMxNzEuNTUyMjcsMzMuNTkyNDY0NiAxNzEuODIzNzIsMzQuOTY5MjkxMSAxNzEuODIzNzIsMzQuOTY5MjkxMSBMMTcxLjgyMzcyLDQ3Ljc3Mzc3ODEgQzE3MS44MjM3Miw0OC4yNDkzMzQgMTcxLjQxMDk3Miw0OC4xODY4MjYxIDE3MS40MTA5NzIsNDguMTg2ODI2MSBMMTcxLjQxMDk3Miw0OC4xODY4MjYxIFogTTE1MS40NjE0ODYsNDIuNDA0MTU0NiBMMTQyLjkzMTM2LDQyLjQwNDE1NDYgTDE0Mi45MzEzNiw0NC40NjkzOTQ0IEMxNDIuOTMxMzYsNDUuMjEzNTY5MSAxNDMuODk0NDM5LDQ1LjQzMzE3MyAxNDMuODk0NDM5LDQ1LjQzMzE3MyBMMTUwLjc3MzU3Miw0NS40MzMxNzMgQzE1MS4yNjMwOTIsNDUuNDMzMTczIDE1MS41OTkwNjgsNDUuODQ2MjIxIDE1MS41OTkwNjgsNDUuODQ2MjIxIEMxNTEuNTk5MDY4LDQ1Ljg0NjIyMSAxNTIuMTk5MjA0LDQ3LjA5NTE0MDMgMTUyLjQyNDU2NCw0Ny42MzYwOTU1IEMxNTIuNjQ5Nzg3LDQ4LjE3NzA1MDYgMTUyLjAxMTgxNiw0OC4xODY4MjYxIDE1Mi4wMTE4MTYsNDguMTg2ODI2MSBMMTQxLjY5MzExNyw0OC4xODY4MjYxIEMxNDAuNDUwNDcsNDguMTg2ODI2MSAxNDAuMTc5NzA3LDQ2LjY3MjMxNjkgMTQwLjE3OTcwNyw0Ni42NzIzMTY5IEwxNDAuMTc5NzA3LDM0Ljk2OTI5MTEgQzE0MC4xNzk3MDcsMzQuMjk2Mjk4MyAxNDEuMTQyNzg2LDM0LjAwNTUxMjUgMTQxLjE0Mjc4NiwzNC4wMDU1MTI1IEwxNTEuNDYxNDg2LDM0LjAwNTUxMjUgQzE1Mi40OTg0NDYsMzQuMDA1NTEyNSAxNTIuNjk5NzMsMzUuMjQ0NjU2NCAxNTIuNjk5NzMsMzUuMjQ0NjU2NCBMMTUyLjY5OTczLDQxLjE2NTAxMDcgQzE1Mi42OTk3Myw0Mi4xNjM4OTgzIDE1MS40NjE0ODYsNDIuNDA0MTU0NiAxNTEuNDYxNDg2LDQyLjQwNDE1NDYgTDE1MS40NjE0ODYsNDIuNDA0MTU0NiBaIE0xNDkuOTQ4MDc2LDM3LjQ0NzU3ODkgQzE0OS45NDgwNzYsMzcuNDQ3NTc4OSAxNDkuODYxMzk5LDM2Ljc1OTE2NTcgMTQ5LjI2MDE2MywzNi43NTkxNjU3IEwxNDMuNjE5Mjc0LDM2Ljc1OTE2NTcgQzE0My42MTkyNzQsMzYuNzU5MTY1NyAxNDIuOTMxMzYsMzYuOTQzNzk4MSAxNDIuOTMxMzYsMzcuNDQ3NTc4OSBMMTQyLjkzMTM2LDM4Ljk2MjA4ODIgQzE0Mi45MzEzNiwzOC45NjIwODgyIDE0Mi45NTExNzIsMzkuNjUwNTAxNCAxNDMuNjE5Mjc0LDM5LjY1MDUwMTQgTDE0OS4yNjAxNjMsMzkuNjUwNTAxNCBDMTQ5LjI2MDE2MywzOS42NTA1MDE0IDE0OS45NDgwNzYsMzkuNDgwNDYzNCAxNDkuOTQ4MDc2LDM4LjgyNDQwNTUgTDE0OS45NDgwNzYsMzcuNDQ3NTc4OSBMMTQ5Ljk0ODA3NiwzNy40NDc1Nzg5IFogTTEzOC4xMTU5NjcsNDguMTg2ODI2MSBMMTMyLjg4NzgyNiw0OC4xODY4MjYxIEMxMzIuODg3ODI2LDQ4LjE4NjgyNjEgMTI5LjA2MTkyNyw0OC4wMDYxODY1IDEyOC43NjAzNDYsNDQuMTk0MDI5MSBDMTI4Ljc0ODIzOSw0MC4yNzkwMjI4IDEyOC43NjAzNDYsMjguMDg1MTU4MyAxMjguNzYwMzQ2LDI4LjA4NTE1ODMgTDEzMS4yMzY4MzQsMjguMDg1MTU4MyBDMTMxLjIzNjgzNCwyOC4wODUxNTgzIDEzMi4wNjIzMywyOC4wNzAxNTA5IDEzMi4wNjIzMywyOC45MTEyNTQzIEwxMzIuMDYyMzMsNDMuMzY3OTMzMSBDMTMyLjA2MjMzLDQzLjM2NzkzMzEgMTMyLjM1MDAxNSw0NC41NjM4NDQ3IDEzMy45ODg0ODcsNDUuMDIwMTI1IEMxMzUuODM5OCw0NS4wMTA3NjI2IDEzNi4xODk4MSw0NS4wMjAxMjUgMTM2LjE4OTgxLDQ1LjAyMDEyNSBDMTM2LjE4OTgxLDQ1LjAyMDEyNSAxMzYuOTA3MzAzLDQ0Ljc5MDE5NSAxMzcuNDI4MDU0LDQ1LjcwODUzODMgQzEzNy45NDg4MDQsNDYuNjI2ODgxNiAxMzguNTI4NzE1LDQ3LjYzNjA5NTUgMTM4LjUyODcxNSw0Ny42MzYwOTU1IEMxMzguNTI4NzE1LDQ3LjYzNjA5NTUgMTM4LjYxMTU0LDQ4LjE4NjgyNjEgMTM4LjExNTk2Nyw0OC4xODY4MjYxIEwxMzguMTE1OTY3LDQ4LjE4NjgyNjEgWiBNMTExLjU2MjUxMyw0Ny4zNjA3MzAyIEwxMTEuNTYyNTEzLDI5LjE4NjYxOTYgQzExMS41NjI1MTMsMjguMzgwNzYzIDExMi4yNTA0MjYsMjguMjIyODQxIDExMi4yNTA0MjYsMjguMjIyODQxIEwxMjUuMTgzMTk3LDI4LjIyMjg0MSBDMTI1LjkwNjQ2OSwyOC4yMjI4NDEgMTI1LjU5NTk0NSwyOS4wNDg5MzY5IDEyNS41OTU5NDUsMjkuMDQ4OTM2OSBDMTI1LjU5NTk0NSwyOS4wNDg5MzY5IDEyNS4xOTI4MjcsMzAuMTY2MDk0IDEyNC45MDgwMzEsMzAuNzAxMTI4OCBDMTI0LjYyMzIzNSwzMS4yMzYxNjM2IDEyNC4wODI1MzUsMzEuMjUxODU5NCAxMjQuMDgyNTM1LDMxLjI1MTg1OTQgTDExNS42ODk5OTMsMzEuMjUxODU5NCBDMTE0LjkwODUyMywzMS4yNTE4NTk0IDExNC44NjQ0OTcsMzEuOTQwMjcyNyAxMTQuODY0NDk3LDMxLjk0MDI3MjcgTDExNC44NjQ0OTcsMzYuNDgzODAwMyBMMTI0LjM1NzcwMSwzNi40ODM4MDAzIEMxMjQuOTE0NjM1LDM2LjQ4MzgwMDMgMTI0LjYzMjg2NiwzNy4xNzIyMTM2IDEyNC42MzI4NjYsMzcuMTcyMjEzNiBDMTI0LjYzMjg2NiwzNy4xNzIyMTM2IDEyMy45MjE4MzksMzguNjg4OTI1OCAxMjMuNjY5Nzg3LDM5LjA5OTc3MDggQzEyMy40MTc3MzYsMzkuNTEwNjE1OSAxMjIuODQ0MjkxLDM5LjUxMjgxODggMTIyLjg0NDI5MSwzOS41MTI4MTg4IEwxMTQuODY0NDk3LDM5LjUxMjgxODggTDExNC44NjQ0OTcsNDQuMzMxNzExNyBDMTE0Ljg2NDQ5Nyw0NC45ODg0NTggMTE1LjU1MjQxLDQ1LjE1NzgwNzcgMTE1LjU1MjQxLDQ1LjE1NzgwNzcgTDEyNC4zNTc3MDEsNDUuMTU3ODA3NyBDMTI0Ljk5NjIyMiw0NS4xNTc4MDc3IDEyNS4xODMxOTcsNDUuNTcwODU1NiAxMjUuMTgzMTk3LDQ1LjU3MDg1NTYgQzEyNS4xODMxOTcsNDUuNTcwODU1NiAxMjYuMDU1MTk2LDQ2LjkzMjM5OTQgMTI2LjQyMTQ0MSw0Ny40OTg0MTI4IEMxMjYuNzg3ODIzLDQ4LjA2NDQyNjIgMTI2LjI4Mzg1OCw0OC4xODY4MjYxIDEyNi4yODM4NTgsNDguMTg2ODI2MSBMMTEyLjM4ODAwOSw0OC4xODY4MjYxIEMxMTEuODE0MTUxLDQ4LjE4NjgyNjEgMTExLjU2MjUxMyw0Ny4zNjA3MzAyIDExMS41NjI1MTMsNDcuMzYwNzMwMiBaIE0xMDMuNDE2NTAyLDQ2LjIxNzU1MTEgQzEwMy40MDcwMDgsNDcuNzk0NTY4MiAxMDIuNTg3ODQxLDQ4LjE0NjM0NzQgMTAyLjU4Nzg0MSw0OC4xNDYzNDc0IEMxMDIuNTg3ODQxLDQ4LjE0NjM0NzQgODguNDUyMDQ3OCw1Ni4zMTQ1MDg3IDg3LjUzMjk5NTYsNTYuODI2Mjc1MSBDODYuNjIyMzM2LDU3LjIxNzE1NjEgODYuMDEzNjcwMyw1Ni44MjYyNzUxIDg2LjAxMzY3MDMsNTYuODI2Mjc1MSBDODYuMDEzNjcwMyw1Ni44MjYyNzUxIDcxLjIyMjU3MDYsNDguMjQ3OTU3MiA3MC42ODI2OTYyLDQ3Ljg3MDg0NDQgQzcwLjE0MjY4NDMsNDcuNDkzNzMxNiA3MC4xMzAxNjQzLDQ2LjkwNjM3NzQgNzAuMTMwMTY0Myw0Ni45MDYzNzc0IEM3MC4xMzAxNjQzLDQ2LjkwNjM3NzQgNzAuMTQ1MDIzMiwyOS45MTk5MTc0IDcwLjEzMDE2NDMsMjkuMTMzMzM2NCBDNzAuMTE1MzA1MywyOC4zNDY2MTc3IDcxLjA5Njk1NzYsMjcuNzU1NTQ2MSA3MS4wOTY5NTc2LDI3Ljc1NTU0NjEgTDg1Ljg3NTUzNzMsMTkuMjEzNDM4NyBDODYuNzg1MzcxNCwxOC43MzMyMDE2IDg3LjY3MTEyODYsMTkuMjEzNDM4NyA4Ny42NzExMjg2LDE5LjIxMzQzODcgQzg3LjY3MTEyODYsMTkuMjEzNDM4NyAxMDAuNzI2NjIzLDI2LjgwMjA5MzcgMTAyLjE3MzQ0MiwyNy42MTc3MjU3IEMxMDMuNTkxNTA3LDI4LjI5MTk1NzcgMTAzLjQxNjUwMiwyOS42ODQzNDI0IDEwMy40MTY1MDIsMjkuNjg0MzQyNCBDMTAzLjQxNjUwMiwyOS42ODQzNDI0IDEwMy40MjUzMDcsNDQuNzUxOTE5MiAxMDMuNDE2NTAyLDQ2LjIxNzU1MTEgTDEwMy40MTY1MDIsNDYuMjE3NTUxMSBaIE05Ny41MTYwMTA1LDI5LjE2OTEzMzkgQzk0LjQ5MDAxNzMsMjcuNDI3NDQ4MyA4Ny4zNjE1ODQyLDIzLjI5NzEwNjMgODcuMzYxNTg0MiwyMy4yOTcxMDYzIEM4Ny4zNjE1ODQyLDIzLjI5NzEwNjMgODYuNjY2MTAzOSwyMi45MjEyMzI2IDg1Ljk1MTc3NDcsMjMuMjk3MTA2MyBMNzQuMzQ4NzQwNiwyOS45ODIxNSBDNzQuMzQ4NzQwNiwyOS45ODIxNSA3My41NzgwMDI1LDMwLjQ0NDkwMTQgNzMuNTg5Njk3LDMxLjA2MDQ4MDUgQzczLjYwMTM5MTUsMzEuNjc2MDU5NyA3My41ODk2OTcsNDQuOTY5ODcwOCA3My41ODk2OTcsNDQuOTY5ODcwOCBDNzMuNTg5Njk3LDQ0Ljk2OTg3MDggNzMuNTk5NDY1NCw0NS40Mjk1OTMyIDc0LjAyMzQ5NTEsNDUuNzI0NjQ3MiBDNzQuNDQ3Mzg3Myw0Ni4wMTk3MDExIDg2LjA2MDE4OTgsNTIuNzMzMjQ1MSA4Ni4wNjAxODk4LDUyLjczMzI0NTEgQzg2LjA2MDE4OTgsNTIuNzMzMjQ1MSA4Ni41MzgxNTIsNTMuMDM5MTc1OSA4Ny4yNTMwMzE1LDUyLjczMzI0NTEgQzg3Ljk3NDY1MjYsNTIuMzMyNzI2MiA5OS4wNzMwMzM1LDQ1Ljk0MDI1ODIgOTkuMDczMDMzNSw0NS45NDAyNTgyIEM5OS4wNzMwMzM1LDQ1Ljk0MDI1ODIgOTkuNzE2MjMyNSw0NS42NjQ4OTI5IDk5LjcyMzY2MTksNDQuNDMwNzA1NiBDOTkuNzI1NzI1Nyw0NC4wNzQ3OTU5IDk5LjcyNjU1MTIsNDIuNjkzMjg4MSA5OS43MjY2ODg3LDQwLjk1NzUyMjkgTDg2LjY2MDA1MDIsNDguODc1MjM5NCBMODYuNjYwMDUwMiw0NS44NDYyMjEgQzg2LjY2MDA1MDIsNDQuNjAyMTIwNSA4Ny42MjMxMjg5LDQzLjc4MDk4MTEgODcuNjIzMTI4OSw0My43ODA5ODExIEw5OS4xODA3NjA3LDM2LjgxNjU3OTMgQzk5LjYxNjg5NzgsMzYuMzYxMTI1MSA5OS43MDY4NzY4LDM1LjYzMTU0NDcgOTkuNzI1NDUwNSwzNS4zNTU2Mjg3IEM5OS43MjUwMzc4LDM0LjA5MDQ2MjcgOTkuNzI0NDg3NCwzMi45ODUyODQxIDk5LjcyNDA3NDcsMzIuMjg1MTY3OCBMODYuNjYwMDUwMiw0MC4yMDEyMzIxIEw4Ni42NjAwNTAyLDM3LjAzNDUzMSBDODYuNjYwMDUwMiwzNS43OTA0MzA1IDg3LjQ4NTU0NjIsMzUuMjQ0NjU2NCA4Ny40ODU1NDYyLDM1LjI0NDY1NjQgTDk3LjUxNjAxMDUsMjkuMTY5MTMzOSBaIiBpZD0iU2hhcGUtQ29weSI+PC9wYXRoPgogICAgICAgIDwvZz4KICAgIDwvZz4KPC9zdmc+\">-->\n                <span>后台管理系统</span>\n            </div>\n            <div class=\"header-left\">\n                <div class=\"header-toggle\" @click=\"menuShow = !menuShow\">\n                    <span></span>\n                    <span></span>\n                    <span></span>\n                </div>\n            </div>\n            <div class=\"header-tabs-box\">\n                <div class=\"header-tabs\">\n                    <tabs-view v-on:listenChildParentMenuHide=\"menuShow = false\"></tabs-view>\n                </div>\n            </div>\n\n            <div class=\"header-right\">\n                <el-dropdown trigger=\"click\">\n                    <!--<i class=\"el-icon-setting\" style=\"margin-right: 15px\"></i>-->\n                    <span>{{username}}</span><i class=\"el-icon-arrow-down el-icon--right\"></i>\n                    <el-dropdown-menu slot=\"dropdown\">\n                        <el-dropdown-item><span @click=\"handlePassword\">修改密码</span></el-dropdown-item>\n                        <el-dropdown-item><span @click=\"loginOut\">退出登录</span></el-dropdown-item>\n                        <el-dropdown-item disabled divided>主题切换</el-dropdown-item>\n                    </el-dropdown-menu>\n                </el-dropdown>\n            </div>\n\n\n            <!--新增界面-->\n            <el-dialog title=\"修改密码\" :visible.sync=\"passwordFormVisible\" width=\"85%\" top=\"5vh\">\n                <el-form :model=\"passwordFormData\" :rules=\"passwordFormDataRules\" ref=\"passwordFormData\">\n                    <el-form-item label=\"原始密码\" prop=\"old_password\">\n                        <el-input type=\"password\" v-model=\"passwordFormData.old_password\" auto-complete=\"off\"></el-input>\n                    </el-form-item>\n                    <el-form-item label=\"新密码\" prop=\"new_password\">\n                        <el-input type=\"password\" v-model=\"passwordFormData.new_password\" auto-complete=\"off\"></el-input>\n                    </el-form-item>\n                    <el-form-item label=\"确认密码\" prop=\"check_new_password\">\n                        <el-input type=\"password\" v-model=\"passwordFormData.check_new_password\" auto-complete=\"off\"></el-input>\n                    </el-form-item>\n                </el-form>\n                <div slot=\"footer\" class=\"dialog-footer\">\n                    <el-button @click.native=\"passwordFormVisible = !passwordFormVisible\">取消</el-button>\n                    <el-button type=\"primary\" @click.native=\"addSubmit('passwordFormData')\" :loading=\"passwordLoading\">提交</el-button>\n                </div>\n            </el-dialog>\n\n        </el-header>\n\n        <el-container class=\"container-box\" v-bind:class=\"{ 'slide-in-left': menuShow,'slide-hide': isCollapse}\">\n            <el-aside style=\"background-color: rgb(238, 241, 246)\" class=\"menu\" width=\"\">\n                <div class=\"slide-toggle\" :class=\"{'slide-toggle-open': isCollapse}\" @click=\"toggleSideBar\">\n                    <span></span>\n                    <span></span>\n                    <span></span>\n                </div>\n                <el-menu\n                    :default-active=\"onRoutes\"\n                    :collapse=\"isCollapse\"\n                    class=\"el-menu-vertical-demo\"\n                    theme=\"dark\"\n                    unique-opened\n                    router>\n                    <sidebar-item :routes='routers'></sidebar-item>\n                </el-menu>\n            </el-aside>\n\n            <el-main class=\"main\">\n                <!--遮板-->\n                <div class=\"main-mask\"\n                     v-show=\"menuShow\"\n                     @click=\"menuShow = !menuShow\"></div>\n\n\n                <el-breadcrumb class=\"app-levelbar\" separator=\"/\">\n                    <el-breadcrumb-item v-for=\"(item,index)  in levelList\" :key=\"item.path\">\n                            <span v-if='item.redirect===\"noredirect\"||index==levelList.length-1'\n                                  class=\"no-redirect\">{{item.name}}</span>\n                        <router-link v-else :to=\"item.redirect||item.path\">{{item.name}}</router-link>\n                    </el-breadcrumb-item>\n                </el-breadcrumb>\n\n                <transition name=\"move\" mode=\"out-in\">\n                    <router-view></router-view>\n                </transition>\n            </el-main>\n        </el-container>\n    </el-container>\n\n</template>\n\n\n<script>\nimport { mapGetters } from \"vuex\";\nimport SidebarItem from \"./SidebarItem.vue\";\nimport TabsView from \"./TabsView.vue\";\nimport { password } from \"../../api/auth/login\";\nexport default {\n    data() {\n        let validatePass = (rule, value, callback) => {\n            if (value === \"\") {\n                callback(new Error(\"请输入密码\"));\n            } else {\n                if (this.passwordFormData.check_new_password !== \"\") {\n                    this.$refs.passwordFormData.validateField(\n                        \"check_new_password\"\n                    );\n                }\n                callback();\n            }\n        };\n        let validatePass2 = (rule, value, callback) => {\n            if (value === \"\") {\n                callback(new Error(\"请再次输入密码\"));\n            } else if (value !== this.passwordFormData.new_password) {\n                callback(new Error(\"两次输入密码不一致!\"));\n            } else {\n                callback();\n            }\n        };\n        return {\n            menuShow: false,\n            levelList: null,\n            passwordLoading: false,\n            passwordFormVisible: false,\n            passwordFormData: {\n                old_password: \"\",\n                new_password: \"\",\n                check_new_password: \"\"\n            },\n            passwordFormDataRules: {\n                old_password: [\n                    {\n                        required: true,\n                        message: \"请输入原始密码\",\n                        trigger: \"blur\"\n                    }\n                ],\n                new_password: [\n                    {\n                        required: true,\n                        message: \"请输入新密码\",\n                        trigger: \"blur\"\n                    },\n                    { validator: validatePass, trigger: \"blur\" }\n                ],\n                check_new_password: [\n                    {\n                        required: true,\n                        message: \"请再次输入密码\",\n                        trigger: \"blur\"\n                    },\n                    { validator: validatePass2, trigger: \"blur\" }\n                ]\n            }\n        };\n    },\n    components: {\n        SidebarItem,\n        TabsView\n    },\n    computed: {\n        ...mapGetters({\n            routers: \"routers\"\n        }),\n        onRoutes() {\n            return this.$route.path;\n        },\n        username() {\n            let username = this.$store.state.admin.userName;\n            return !username ? this.name : username;\n        },\n        isCollapse() {\n            return this.$store.state.app.sidebar.opened;\n        }\n    },\n    mounted() {},\n    methods: {\n        toggleSideBar() {\n            this.$store.dispatch(\"ToggleSideBar\");\n        },\n        getBreadcrumb() {\n            let matched = this.$route.matched.filter(item => item.name);\n            const first = matched[0];\n            if (first && (first.name !== \"首页\" || first.path !== \"\")) {\n                matched = [{ name: \"首页\", path: \"/\" }].concat(matched);\n            }\n            this.levelList = matched;\n        },\n        loginOut() {\n            this.$confirm(\"此操作将退出系统, 是否继续?\", \"提示\", {\n                confirmButtonText: \"确定\",\n                cancelButtonText: \"取消\",\n                type: \"warning\"\n            })\n                .then(() => {\n                    this.$store.dispatch(\"loginOut\").then(() => {\n                        location.reload(); // 为了重新实例化vue-router对象 避免bug\n                    });\n                })\n                .catch(() => {\n                    this.$message({\n                        type: \"error\",\n                        message: \"操作失败\"\n                    });\n                });\n        },\n        // 显示修改密码界面\n        handlePassword() {\n            this.passwordFormVisible = true;\n            this.passwordFormData = {\n                old_password: \"\",\n                new_password: \"\",\n                check_new_password: \"\"\n            };\n        },\n        addSubmit(formName) {\n            this.$refs[formName].validate(valid => {\n                if (valid) {\n                    this.passwordLoading = true;\n                    let data = Object.assign({}, this.passwordFormData);\n                    password(data)\n                        .then(res => {\n                            this.passwordLoading = false;\n                            if (res.code) {\n                                this.$message({\n                                    message: res.message,\n                                    type: \"error\"\n                                });\n                            } else {\n                                this.$message({\n                                    message: \"修改成功\",\n                                    type: \"success\"\n                                });\n                                // 刷新表单\n                                this.$refs[\"passwordFormData\"].resetFields();\n                                this.passwordFormVisible = false;\n                                this.$store.dispatch(\"loginOut\").then(() => {\n                                    location.reload(); // 为了重新实例化vue-router对象 避免bug\n                                });\n                            }\n                        })\n                        .catch(() => {\n                            this.$message({\n                                type: \"error\",\n                                message: \"操作失败\"\n                            });\n                        });\n                }\n            });\n        }\n    },\n    created() {\n        this.getBreadcrumb();\n    },\n    watch: {\n        $route() {\n            this.getBreadcrumb();\n        }\n    }\n};\n</script>\n\n\n<style type=\"text/scss\" lang=\"scss\">\n@import \"../../styles/mixin\";\n\n.el-header {\n    background-color: #b3c0d1;\n    /*background-color: #eef1f6;*/\n    color: #333;\n    padding: 0 10px;\n}\n\n.el-aside {\n    color: #333;\n}\n\n.el-main {\n    padding: 25px;\n    position: relative;\n}\n.main-mask {\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 200%;\n    z-index: 100;\n}\n\n.move-enter-active,\n.move-leave-active {\n    transition: opacity 0.5s;\n}\n\n.move-enter,\n.move-leave {\n    opacity: 0;\n}\n\n.wrapper {\n    height: 100%;\n    overflow-y: hidden;\n}\n\n.container-box {\n    height: 100%;\n    transition: -webkit-transform 0.3s ease-in-out;\n    transition: transform 0.3s ease-in-out, -webkit-transform 0.3s ease-in-out;\n    overflow-y: auto;\n}\n\n.menu {\n    width: 200px;\n    padding-left: 0;\n    overflow-x: hidden;\n    overflow-y: auto;\n    height: 100%;\n}\n\n/*.menu::-webkit-scrollbar{*/\n/*display: none;*/\n/*}*/\n\n.header {\n    position: relative;\n    text-align: left;\n    font-size: 12px;\n}\n\n.header .el-dropdown {\n    @include fxied-center;\n}\n\n.header-logo {\n    float: left;\n    height: 100%;\n    width: 190px;\n    line-height: 60px;\n    text-align: center;\n    img {\n        vertical-align: middle;\n    }\n}\n\n.header-left {\n    height: 100%;\n    /*width: 10%;*/\n    float: left;\n    margin-right: 10px;\n}\n\n.header-tabs-box {\n    height: 100%;\n    max-width: 60%;\n    float: left;\n    overflow: hidden;\n}\n\n.header-tabs {\n    overflow-y: hidden;\n    overflow-x: scroll;\n    width: 100%;\n    float: left;\n    height: 130%;\n    line-height: 60px;\n    @include clearfix;\n}\n\n.header-right {\n    position: absolute;\n    right: 5px;\n    display: flex;\n    width: 80px;\n    height: 100%;\n    margin-left: 10px;\n    .el-dropdown {\n        display: flex;\n        cursor: pointer;\n    }\n    span {\n        display: inline-block;\n        @include text-overflow;\n    }\n    i {\n        margin-top: 2px;\n    }\n}\n\n.app-levelbar {\n    height: 25px;\n    box-sizing: border-box;\n    border-bottom: 1px solid #d8dce5;\n}\n\n/*宽屏时出现*/\n.slide-toggle {\n    display: block;\n    border-radius: 4px;\n    height: 30px;\n    line-height: 30px;\n    outline: none;\n    width: 100%;\n    z-index: 10;\n    text-align: center;\n    cursor: pointer;\n    box-sizing: border-box;\n    padding: 0 5px;\n}\n\n.slide-toggle span {\n    display: inline-block;\n    width: 1px;\n    height: 12px;\n    background-color: rgba(135, 141, 153, 0.8);\n    margin-left: 5px;\n}\n.slide-toggle-open span {\n    display: block;\n    margin: 5px auto;\n    width: 12px;\n    height: 1px;\n}\n.slide-toggle-open {\n    padding-top: 5px;\n}\n\n@media screen and (min-width: 768px) {\n    .main-mask {\n        display: none;\n    }\n}\n\n.slide-hide {\n    .menu {\n        width: 64px !important;\n    }\n}\n\n@media screen and (max-width: 768px) {\n    .slide-hide {\n        .menu {\n            left: -64px !important;\n        }\n    }\n    .slide-hide.slide-in-left {\n        -webkit-transform: translate3d(64px, 0, 0) !important;\n        transform: translate3d(64px, 0, 0) !important;\n    }\n\n    .menu {\n        left: -60%;\n        margin-right: 0;\n        opacity: 1;\n        position: absolute;\n        top: 0;\n        transition: opacity 0.3s;\n        width: 60%;\n        z-index: 10;\n        padding: 0;\n    }\n\n    .slide-in-left {\n        min-width: 0;\n        opacity: 1;\n        -webkit-transform: translate3d(60%, 0, 0);\n        transform: translate3d(60%, 0, 0);\n        overflow: initial;\n    }\n\n    .header-toggle {\n        display: block;\n        /*background-color: #26a2ff;*/\n        border-radius: 4px;\n        /*border: 1px solid #fff;*/\n        height: 40px;\n        margin: 10px 0;\n        padding: 2px 6px;\n        outline: none;\n        width: 40px;\n        z-index: 10;\n    }\n\n    .header-toggle span {\n        display: block;\n        width: 100%;\n        height: 4px;\n        margin: 5px auto;\n        background-color: rgba(135, 141, 153, 0.8);\n    }\n\n    .header-logo {\n        display: none;\n    }\n}\n</style>\n"
  },
  {
    "path": "src/views/home/index.vue",
    "content": "<template>\n\n    <el-container class=\"wrapper\">\n        <el-scrollbar class=\"container-left\" wrap-class=\"container-left-wrap\" :class=\"{'slide-hide': isCollapse, 'slide-in-left': menuShow}\">\n            <div class=\"logo\">\n                <!--图片logo-->\n                <img alt=\"element-logo\"\n                src=\"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cjxzdmcgd2lkdGg9IjE0NnB4IiBoZWlnaHQ9IjM4cHgiIHZpZXdCb3g9IjAgMCAxNDYgMzgiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiAgICA8IS0tIEdlbmVyYXRvcjogU2tldGNoIDQwICgzMzc2MikgLSBodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2ggLS0+CiAgICA8dGl0bGU+U2hhcGUgQ29weTwvdGl0bGU+CiAgICA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4KICAgIDxkZWZzPjwvZGVmcz4KICAgIDxnIGlkPSJ2Mi4yLjAiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPgogICAgICAgIDxnIGlkPSLpppbpobUt6buY6K6k5pWI5p6cLWNvcHktMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTcwLjAwMDAwMCwgLTE5LjAwMDAwMCkiIGZpbGw9IiNGRkZGRkYiPgogICAgICAgICAgICA8cGF0aCBkPSJNMjEyLjEzNTQ0MSw0NS4xNTc4MDc3IEMyMTIuMTM1NDQxLDQ1LjE1NzgwNzcgMjEyLjQyMDIzNyw0NS4xNTA1MTA1IDIxMi45NjA5MzcsNDUuMTU3ODA3NyBDMjEzLjUwMTYzNyw0NS4xNjUxMDQ5IDIxMy42NDg4NTEsNDUuNTcwODU1NiAyMTMuNjQ4ODUxLDQ1LjU3MDg1NTYgQzIxMy42NDg4NTEsNDUuNTcwODU1NiAyMTQuNzMzODI4LDQ3LjU2NjU2NTcgMjE1LjAyNDY3Nyw0OC4wNDkxNDM0IEMyMTUuMjgzNjA4LDQ4LjQ3ODcxMzMgMjE0Ljk3MzIyMSw0OC40NzA4NjU0IDIxNC45MDE4MTYsNDguNDYzODQzNiBDMjE0LjkwMjUwNCw0OC40NjI4Nzk4IDIxNC44ODcwOTUsNDguNDYyMTkxNCAyMTQuODg3MDk1LDQ4LjQ2MjE5MTQgQzIxNC44ODcwOTUsNDguNDYyMTkxNCAyMTQuODkzMDExLDQ4LjQ2MzAxNzUgMjE0LjkwMTgxNiw0OC40NjM4NDM2IEMyMTQuODk4NjUyLDQ4LjQ2ODI0OTUgMjE0LjU5NDczMSw0OC40NzgzMDAzIDIxMS40NDc1MjgsNDguNDYyMTkxNCBDMjA3LjA1ODY0MSw0Ny44NjY1NzYyIDIwNi45MDczLDQzLjkxODY2MzggMjA2LjkwNzMsNDMuOTE4NjYzOCBMMjA2LjkwNzMsMzYuODk2ODQ4MyBMMjA0LjQzMDgxMiwzNi44OTY4NDgzIEwyMDQuNDMwODEyLDM0LjI4MDg3NzkgQzIwNC40MzA4MTIsMzMuOTI0Mjc5OCAyMDQuODQzNTYsMzMuODY3ODI5OSAyMDQuODQzNTYsMzMuODY3ODI5OSBMMjA2LjkwNzMsMzMuODY3ODI5OSBMMjA2LjkwNzMsMzEuMjUxODU5NCBDMjA2LjkwNzMsMzAuODI1MTgwOSAyMDcuMzIwMDQ4LDMwLjcwMTEyODggMjA3LjMyMDA0OCwzMC43MDExMjg4IEMyMDcuMzIwMDQ4LDMwLjcwMTEyODggMjA4Ljc3MjY0NiwzMC4yODU4Nzc5IDIwOS42MTc4MTYsMzAuMDQ0MTA3MiBDMjA5Ljk2NDY2MiwyOS45NDQ5NzU2IDIxMC4wNzE3MDEsMzAuMTUwMzk4MiAyMTAuMDcxNzAxLDMwLjE1MDM5ODIgQzIxMC4wNzE3MDEsMzAuMTUwMzk4MiAyMTAuMjA5Mjg0LDMwLjA3NzQyNjQgMjEwLjIwOTI4NCwzMC4zOTI3MTk2IEwyMTAuMjA5Mjg0LDM0LjAwNTUxMjUgTDIxMy43ODY0MzMsMzQuMDA1NTEyNSBDMjE0LjEzNDY1NSwzNC4wMDU1MTI1IDIxNC4xOTkxODEsMzQuNDE4NTYwNSAyMTQuMTk5MTgxLDM0LjQxODU2MDUgTDIxNC4xOTkxODEsMzcuMDM0NTMxIEwyMTAuMjA5Mjg0LDM3LjAzNDUzMSBMMjEwLjIwOTI4NCw0My4wOTI1Njc4IEMyMTAuMjA5Mjg0LDQ0Ljg1MzM5MTMgMjEyLjEzNTQ0MSw0NS4xNTc4MDc3IDIxMi4xMzU0NDEsNDUuMTU3ODA3NyBMMjEyLjEzNTQ0MSw0NS4xNTc4MDc3IFogTTIwMS41NDE1NzYsNDguMTg2ODI2MSBMMTk5LjM0MDI1Myw0OC4xODY4MjYxIEMxOTguOTA4MzgxLDQ4LjE4NjgyNjEgMTk4LjkyNzUwNSw0Ny42MzYwOTU1IDE5OC45Mjc1MDUsNDcuNjM2MDk1NSBMMTk4LjkyNzUwNSwzNy40NDc1Nzg5IEMxOTguOTI3NTA1LDM2LjgyODY5NTQgMTk4LjEwMjAwOSwzNi42MjE0ODMgMTk4LjEwMjAwOSwzNi42MjE0ODMgTDE5My41NjE3ODEsMzYuNjIxNDgzIEMxOTIuODg0NDYyLDM2LjYyMTQ4MyAxOTIuODczODY4LDM3LjQ0NzU3ODkgMTkyLjg3Mzg2OCwzNy40NDc1Nzg5IEwxOTIuODczODY4LDQ3Ljc3Mzc3ODEgQzE5Mi44NzM4NjgsNDguMTc4NzAyOCAxOTIuNDYxMTIsNDguMTg2ODI2MSAxOTIuNDYxMTIsNDguMTg2ODI2MSBMMTkwLjI1OTc5Nyw0OC4xODY4MjYxIEMxODkuNzc1NzgyLDQ4LjE4NjgyNjEgMTg5Ljg0NzA0OSw0Ny42MzYwOTU1IDE4OS44NDcwNDksNDcuNjM2MDk1NSBMMTg5Ljg0NzA0OSwzNC44MzE2MDg1IEMxODkuODQ3MDQ5LDMzLjgwMzExOSAxOTEuMDg1MjkzLDMzLjU5MjQ2NDYgMTkxLjA4NTI5MywzMy41OTI0NjQ2IEwyMDAuNzE2MDgsMzMuNTkyNDY0NiBDMjAxLjY3Nzc4MywzMy41OTI0NjQ2IDIwMS45NTQzMjQsMzQuODMxNjA4NSAyMDEuOTU0MzI0LDM0LjgzMTYwODUgTDIwMS45NTQzMjQsNDcuNDk4NDEyOCBDMjAxLjk1NDMyNCw0OC4yMTg2MzA4IDIwMS41NDE1NzYsNDguMTg2ODI2MSAyMDEuNTQxNTc2LDQ4LjE4NjgyNjEgTDIwMS41NDE1NzYsNDguMTg2ODI2MSBaIE0xODUuODU3MTUyLDQyLjQwNDE1NDYgTDE3Ny4zMjcwMjcsNDIuNDA0MTU0NiBMMTc3LjMyNzAyNyw0NC40NjkzOTQ0IEMxNzcuMzI3MDI3LDQ1LjIxMzU2OTEgMTc4LjI5MDEwNiw0NS40MzMxNzMgMTc4LjI5MDEwNiw0NS40MzMxNzMgTDE4NS4xNjkyMzksNDUuNDMzMTczIEMxODUuNjU4NzU4LDQ1LjQzMzE3MyAxODUuOTk0NzM1LDQ1Ljg0NjIyMSAxODUuOTk0NzM1LDQ1Ljg0NjIyMSBDMTg1Ljk5NDczNSw0NS44NDYyMjEgMTg2LjU5NTAwOCw0Ny4wOTUxNDAzIDE4Ni44MjAyMzEsNDcuNjM2MDk1NSBDMTg3LjA0NTQ1NCw0OC4xNzcwNTA2IDE4Ni40MDc0ODMsNDguMTg2ODI2MSAxODYuNDA3NDgzLDQ4LjE4NjgyNjEgTDE3Ni4wODg3ODMsNDguMTg2ODI2MSBDMTc0Ljg0NjEzNiw0OC4xODY4MjYxIDE3NC41NzUzNzQsNDYuNjcyMzE2OSAxNzQuNTc1Mzc0LDQ2LjY3MjMxNjkgTDE3NC41NzUzNzQsMzQuOTY5MjkxMSBDMTc0LjU3NTM3NCwzNC4yOTYyOTgzIDE3NS41Mzg0NTIsMzQuMDA1NTEyNSAxNzUuNTM4NDUyLDM0LjAwNTUxMjUgTDE4NS44NTcxNTIsMzQuMDA1NTEyNSBDMTg2Ljg5NDExMywzNC4wMDU1MTI1IDE4Ny4wOTUzOTYsMzUuMjQ0NjU2NCAxODcuMDk1Mzk2LDM1LjI0NDY1NjQgTDE4Ny4wOTUzOTYsNDEuMTY1MDEwNyBDMTg3LjA5NTM5Niw0Mi4xNjM4OTgzIDE4NS44NTcxNTIsNDIuNDA0MTU0NiAxODUuODU3MTUyLDQyLjQwNDE1NDYgTDE4NS44NTcxNTIsNDIuNDA0MTU0NiBaIE0xODQuMzQzNzQzLDM3LjQ0NzU3ODkgQzE4NC4zNDM3NDMsMzcuNDQ3NTc4OSAxODQuMjU3MDY2LDM2Ljc1OTE2NTcgMTgzLjY1NTgzLDM2Ljc1OTE2NTcgTDE3OC4wMTQ5NCwzNi43NTkxNjU3IEMxNzguMDE0OTQsMzYuNzU5MTY1NyAxNzcuMzI3MDI3LDM2Ljk0Mzc5ODEgMTc3LjMyNzAyNywzNy40NDc1Nzg5IEwxNzcuMzI3MDI3LDM4Ljk2MjA4ODIgQzE3Ny4zMjcwMjcsMzguOTYyMDg4MiAxNzcuMzQ2ODM5LDM5LjY1MDUwMTQgMTc4LjAxNDk0LDM5LjY1MDUwMTQgTDE4My42NTU4MywzOS42NTA1MDE0IEMxODMuNjU1ODMsMzkuNjUwNTAxNCAxODQuMzQzNzQzLDM5LjQ4MDQ2MzQgMTg0LjM0Mzc0MywzOC44MjQ0MDU1IEwxODQuMzQzNzQzLDM3LjQ0NzU3ODkgTDE4NC4zNDM3NDMsMzcuNDQ3NTc4OSBaIE0xNzEuNDEwOTcyLDQ4LjE4NjgyNjEgTDE2OS4yMDk2NSw0OC4xODY4MjYxIEMxNjguOTE5MjEzLDQ4LjE4NjgyNjEgMTY4Ljc5NjkwMiw0Ny43NzM3NzgxIDE2OC43OTY5MDIsNDcuNzczNzc4MSBMMTY4Ljc5NjkwMiwzNy40NDc1Nzg5IEMxNjguNzk2OTAyLDM2LjgwNzIxNjkgMTY3Ljk3MTQwNiwzNi42MjE0ODMgMTY3Ljk3MTQwNiwzNi42MjE0ODMgTDE2NS45MDc2NjYsMzYuNjIxNDgzIEMxNjUuMzMxODgyLDM2LjYyMTQ4MyAxNjUuMjE5NzUyLDM3LjQ0NzU3ODkgMTY1LjIxOTc1MiwzNy40NDc1Nzg5IEwxNjUuMjE5NzUyLDQ3Ljc3Mzc3ODEgQzE2NS4yMTk3NTIsNDguMTE2MzMyNiAxNjQuODA3MDA0LDQ4LjE4NjgyNjEgMTY0LjgwNzAwNCw0OC4xODY4MjYxIEwxNjIuNjA1NjgyLDQ4LjE4NjgyNjEgQzE2Mi4yOTk1Niw0OC4xODY4MjYxIDE2Mi4xOTI5MzQsNDcuNzczNzc4MSAxNjIuMTkyOTM0LDQ3Ljc3Mzc3ODEgTDE2Mi4xOTI5MzQsMzcuNDQ3NTc4OSBDMTYyLjE5MjkzNCwzNi43OTI4OTc5IDE2MS4zNjc0MzgsMzYuNjIxNDgzIDE2MS4zNjc0MzgsMzYuNjIxNDgzIEwxNTkuMzAzNjk4LDM2LjYyMTQ4MyBDMTU4LjY3Mzk4MiwzNi42MjE0ODMgMTU4LjYxNTc4NCwzNy40NDc1Nzg5IDE1OC42MTU3ODQsMzcuNDQ3NTc4OSBMMTU4LjYxNTc4NCw0Ny43NzM3NzgxIEMxNTguNjE1Nzg0LDQ4LjIxNTczOTUgMTU4LjIwMzAzNiw0OC4xODY4MjYxIDE1OC4yMDMwMzYsNDguMTg2ODI2MSBMMTU2LjAwMTcxNCw0OC4xODY4MjYxIEMxNTUuNTg5Mzc4LDQ4LjE4NjgyNjEgMTU1LjU4ODk2Niw0Ny43NzM3NzgxIDE1NS41ODg5NjYsNDcuNzczNzc4MSBMMTU1LjU4ODk2NiwzNC42OTM5MjU4IEMxNTUuNTg4OTY2LDMzLjkzNjI1ODIgMTU2LjY4OTYyNywzMy41OTI0NjQ2IDE1Ni42ODk2MjcsMzMuNTkyNDY0NiBMMTcwLjQ0Nzg5NCwzMy41OTI0NjQ2IEMxNzEuNTUyMjcsMzMuNTkyNDY0NiAxNzEuODIzNzIsMzQuOTY5MjkxMSAxNzEuODIzNzIsMzQuOTY5MjkxMSBMMTcxLjgyMzcyLDQ3Ljc3Mzc3ODEgQzE3MS44MjM3Miw0OC4yNDkzMzQgMTcxLjQxMDk3Miw0OC4xODY4MjYxIDE3MS40MTA5NzIsNDguMTg2ODI2MSBMMTcxLjQxMDk3Miw0OC4xODY4MjYxIFogTTE1MS40NjE0ODYsNDIuNDA0MTU0NiBMMTQyLjkzMTM2LDQyLjQwNDE1NDYgTDE0Mi45MzEzNiw0NC40NjkzOTQ0IEMxNDIuOTMxMzYsNDUuMjEzNTY5MSAxNDMuODk0NDM5LDQ1LjQzMzE3MyAxNDMuODk0NDM5LDQ1LjQzMzE3MyBMMTUwLjc3MzU3Miw0NS40MzMxNzMgQzE1MS4yNjMwOTIsNDUuNDMzMTczIDE1MS41OTkwNjgsNDUuODQ2MjIxIDE1MS41OTkwNjgsNDUuODQ2MjIxIEMxNTEuNTk5MDY4LDQ1Ljg0NjIyMSAxNTIuMTk5MjA0LDQ3LjA5NTE0MDMgMTUyLjQyNDU2NCw0Ny42MzYwOTU1IEMxNTIuNjQ5Nzg3LDQ4LjE3NzA1MDYgMTUyLjAxMTgxNiw0OC4xODY4MjYxIDE1Mi4wMTE4MTYsNDguMTg2ODI2MSBMMTQxLjY5MzExNyw0OC4xODY4MjYxIEMxNDAuNDUwNDcsNDguMTg2ODI2MSAxNDAuMTc5NzA3LDQ2LjY3MjMxNjkgMTQwLjE3OTcwNyw0Ni42NzIzMTY5IEwxNDAuMTc5NzA3LDM0Ljk2OTI5MTEgQzE0MC4xNzk3MDcsMzQuMjk2Mjk4MyAxNDEuMTQyNzg2LDM0LjAwNTUxMjUgMTQxLjE0Mjc4NiwzNC4wMDU1MTI1IEwxNTEuNDYxNDg2LDM0LjAwNTUxMjUgQzE1Mi40OTg0NDYsMzQuMDA1NTEyNSAxNTIuNjk5NzMsMzUuMjQ0NjU2NCAxNTIuNjk5NzMsMzUuMjQ0NjU2NCBMMTUyLjY5OTczLDQxLjE2NTAxMDcgQzE1Mi42OTk3Myw0Mi4xNjM4OTgzIDE1MS40NjE0ODYsNDIuNDA0MTU0NiAxNTEuNDYxNDg2LDQyLjQwNDE1NDYgTDE1MS40NjE0ODYsNDIuNDA0MTU0NiBaIE0xNDkuOTQ4MDc2LDM3LjQ0NzU3ODkgQzE0OS45NDgwNzYsMzcuNDQ3NTc4OSAxNDkuODYxMzk5LDM2Ljc1OTE2NTcgMTQ5LjI2MDE2MywzNi43NTkxNjU3IEwxNDMuNjE5Mjc0LDM2Ljc1OTE2NTcgQzE0My42MTkyNzQsMzYuNzU5MTY1NyAxNDIuOTMxMzYsMzYuOTQzNzk4MSAxNDIuOTMxMzYsMzcuNDQ3NTc4OSBMMTQyLjkzMTM2LDM4Ljk2MjA4ODIgQzE0Mi45MzEzNiwzOC45NjIwODgyIDE0Mi45NTExNzIsMzkuNjUwNTAxNCAxNDMuNjE5Mjc0LDM5LjY1MDUwMTQgTDE0OS4yNjAxNjMsMzkuNjUwNTAxNCBDMTQ5LjI2MDE2MywzOS42NTA1MDE0IDE0OS45NDgwNzYsMzkuNDgwNDYzNCAxNDkuOTQ4MDc2LDM4LjgyNDQwNTUgTDE0OS45NDgwNzYsMzcuNDQ3NTc4OSBMMTQ5Ljk0ODA3NiwzNy40NDc1Nzg5IFogTTEzOC4xMTU5NjcsNDguMTg2ODI2MSBMMTMyLjg4NzgyNiw0OC4xODY4MjYxIEMxMzIuODg3ODI2LDQ4LjE4NjgyNjEgMTI5LjA2MTkyNyw0OC4wMDYxODY1IDEyOC43NjAzNDYsNDQuMTk0MDI5MSBDMTI4Ljc0ODIzOSw0MC4yNzkwMjI4IDEyOC43NjAzNDYsMjguMDg1MTU4MyAxMjguNzYwMzQ2LDI4LjA4NTE1ODMgTDEzMS4yMzY4MzQsMjguMDg1MTU4MyBDMTMxLjIzNjgzNCwyOC4wODUxNTgzIDEzMi4wNjIzMywyOC4wNzAxNTA5IDEzMi4wNjIzMywyOC45MTEyNTQzIEwxMzIuMDYyMzMsNDMuMzY3OTMzMSBDMTMyLjA2MjMzLDQzLjM2NzkzMzEgMTMyLjM1MDAxNSw0NC41NjM4NDQ3IDEzMy45ODg0ODcsNDUuMDIwMTI1IEMxMzUuODM5OCw0NS4wMTA3NjI2IDEzNi4xODk4MSw0NS4wMjAxMjUgMTM2LjE4OTgxLDQ1LjAyMDEyNSBDMTM2LjE4OTgxLDQ1LjAyMDEyNSAxMzYuOTA3MzAzLDQ0Ljc5MDE5NSAxMzcuNDI4MDU0LDQ1LjcwODUzODMgQzEzNy45NDg4MDQsNDYuNjI2ODgxNiAxMzguNTI4NzE1LDQ3LjYzNjA5NTUgMTM4LjUyODcxNSw0Ny42MzYwOTU1IEMxMzguNTI4NzE1LDQ3LjYzNjA5NTUgMTM4LjYxMTU0LDQ4LjE4NjgyNjEgMTM4LjExNTk2Nyw0OC4xODY4MjYxIEwxMzguMTE1OTY3LDQ4LjE4NjgyNjEgWiBNMTExLjU2MjUxMyw0Ny4zNjA3MzAyIEwxMTEuNTYyNTEzLDI5LjE4NjYxOTYgQzExMS41NjI1MTMsMjguMzgwNzYzIDExMi4yNTA0MjYsMjguMjIyODQxIDExMi4yNTA0MjYsMjguMjIyODQxIEwxMjUuMTgzMTk3LDI4LjIyMjg0MSBDMTI1LjkwNjQ2OSwyOC4yMjI4NDEgMTI1LjU5NTk0NSwyOS4wNDg5MzY5IDEyNS41OTU5NDUsMjkuMDQ4OTM2OSBDMTI1LjU5NTk0NSwyOS4wNDg5MzY5IDEyNS4xOTI4MjcsMzAuMTY2MDk0IDEyNC45MDgwMzEsMzAuNzAxMTI4OCBDMTI0LjYyMzIzNSwzMS4yMzYxNjM2IDEyNC4wODI1MzUsMzEuMjUxODU5NCAxMjQuMDgyNTM1LDMxLjI1MTg1OTQgTDExNS42ODk5OTMsMzEuMjUxODU5NCBDMTE0LjkwODUyMywzMS4yNTE4NTk0IDExNC44NjQ0OTcsMzEuOTQwMjcyNyAxMTQuODY0NDk3LDMxLjk0MDI3MjcgTDExNC44NjQ0OTcsMzYuNDgzODAwMyBMMTI0LjM1NzcwMSwzNi40ODM4MDAzIEMxMjQuOTE0NjM1LDM2LjQ4MzgwMDMgMTI0LjYzMjg2NiwzNy4xNzIyMTM2IDEyNC42MzI4NjYsMzcuMTcyMjEzNiBDMTI0LjYzMjg2NiwzNy4xNzIyMTM2IDEyMy45MjE4MzksMzguNjg4OTI1OCAxMjMuNjY5Nzg3LDM5LjA5OTc3MDggQzEyMy40MTc3MzYsMzkuNTEwNjE1OSAxMjIuODQ0MjkxLDM5LjUxMjgxODggMTIyLjg0NDI5MSwzOS41MTI4MTg4IEwxMTQuODY0NDk3LDM5LjUxMjgxODggTDExNC44NjQ0OTcsNDQuMzMxNzExNyBDMTE0Ljg2NDQ5Nyw0NC45ODg0NTggMTE1LjU1MjQxLDQ1LjE1NzgwNzcgMTE1LjU1MjQxLDQ1LjE1NzgwNzcgTDEyNC4zNTc3MDEsNDUuMTU3ODA3NyBDMTI0Ljk5NjIyMiw0NS4xNTc4MDc3IDEyNS4xODMxOTcsNDUuNTcwODU1NiAxMjUuMTgzMTk3LDQ1LjU3MDg1NTYgQzEyNS4xODMxOTcsNDUuNTcwODU1NiAxMjYuMDU1MTk2LDQ2LjkzMjM5OTQgMTI2LjQyMTQ0MSw0Ny40OTg0MTI4IEMxMjYuNzg3ODIzLDQ4LjA2NDQyNjIgMTI2LjI4Mzg1OCw0OC4xODY4MjYxIDEyNi4yODM4NTgsNDguMTg2ODI2MSBMMTEyLjM4ODAwOSw0OC4xODY4MjYxIEMxMTEuODE0MTUxLDQ4LjE4NjgyNjEgMTExLjU2MjUxMyw0Ny4zNjA3MzAyIDExMS41NjI1MTMsNDcuMzYwNzMwMiBaIE0xMDMuNDE2NTAyLDQ2LjIxNzU1MTEgQzEwMy40MDcwMDgsNDcuNzk0NTY4MiAxMDIuNTg3ODQxLDQ4LjE0NjM0NzQgMTAyLjU4Nzg0MSw0OC4xNDYzNDc0IEMxMDIuNTg3ODQxLDQ4LjE0NjM0NzQgODguNDUyMDQ3OCw1Ni4zMTQ1MDg3IDg3LjUzMjk5NTYsNTYuODI2Mjc1MSBDODYuNjIyMzM2LDU3LjIxNzE1NjEgODYuMDEzNjcwMyw1Ni44MjYyNzUxIDg2LjAxMzY3MDMsNTYuODI2Mjc1MSBDODYuMDEzNjcwMyw1Ni44MjYyNzUxIDcxLjIyMjU3MDYsNDguMjQ3OTU3MiA3MC42ODI2OTYyLDQ3Ljg3MDg0NDQgQzcwLjE0MjY4NDMsNDcuNDkzNzMxNiA3MC4xMzAxNjQzLDQ2LjkwNjM3NzQgNzAuMTMwMTY0Myw0Ni45MDYzNzc0IEM3MC4xMzAxNjQzLDQ2LjkwNjM3NzQgNzAuMTQ1MDIzMiwyOS45MTk5MTc0IDcwLjEzMDE2NDMsMjkuMTMzMzM2NCBDNzAuMTE1MzA1MywyOC4zNDY2MTc3IDcxLjA5Njk1NzYsMjcuNzU1NTQ2MSA3MS4wOTY5NTc2LDI3Ljc1NTU0NjEgTDg1Ljg3NTUzNzMsMTkuMjEzNDM4NyBDODYuNzg1MzcxNCwxOC43MzMyMDE2IDg3LjY3MTEyODYsMTkuMjEzNDM4NyA4Ny42NzExMjg2LDE5LjIxMzQzODcgQzg3LjY3MTEyODYsMTkuMjEzNDM4NyAxMDAuNzI2NjIzLDI2LjgwMjA5MzcgMTAyLjE3MzQ0MiwyNy42MTc3MjU3IEMxMDMuNTkxNTA3LDI4LjI5MTk1NzcgMTAzLjQxNjUwMiwyOS42ODQzNDI0IDEwMy40MTY1MDIsMjkuNjg0MzQyNCBDMTAzLjQxNjUwMiwyOS42ODQzNDI0IDEwMy40MjUzMDcsNDQuNzUxOTE5MiAxMDMuNDE2NTAyLDQ2LjIxNzU1MTEgTDEwMy40MTY1MDIsNDYuMjE3NTUxMSBaIE05Ny41MTYwMTA1LDI5LjE2OTEzMzkgQzk0LjQ5MDAxNzMsMjcuNDI3NDQ4MyA4Ny4zNjE1ODQyLDIzLjI5NzEwNjMgODcuMzYxNTg0MiwyMy4yOTcxMDYzIEM4Ny4zNjE1ODQyLDIzLjI5NzEwNjMgODYuNjY2MTAzOSwyMi45MjEyMzI2IDg1Ljk1MTc3NDcsMjMuMjk3MTA2MyBMNzQuMzQ4NzQwNiwyOS45ODIxNSBDNzQuMzQ4NzQwNiwyOS45ODIxNSA3My41NzgwMDI1LDMwLjQ0NDkwMTQgNzMuNTg5Njk3LDMxLjA2MDQ4MDUgQzczLjYwMTM5MTUsMzEuNjc2MDU5NyA3My41ODk2OTcsNDQuOTY5ODcwOCA3My41ODk2OTcsNDQuOTY5ODcwOCBDNzMuNTg5Njk3LDQ0Ljk2OTg3MDggNzMuNTk5NDY1NCw0NS40Mjk1OTMyIDc0LjAyMzQ5NTEsNDUuNzI0NjQ3MiBDNzQuNDQ3Mzg3Myw0Ni4wMTk3MDExIDg2LjA2MDE4OTgsNTIuNzMzMjQ1MSA4Ni4wNjAxODk4LDUyLjczMzI0NTEgQzg2LjA2MDE4OTgsNTIuNzMzMjQ1MSA4Ni41MzgxNTIsNTMuMDM5MTc1OSA4Ny4yNTMwMzE1LDUyLjczMzI0NTEgQzg3Ljk3NDY1MjYsNTIuMzMyNzI2MiA5OS4wNzMwMzM1LDQ1Ljk0MDI1ODIgOTkuMDczMDMzNSw0NS45NDAyNTgyIEM5OS4wNzMwMzM1LDQ1Ljk0MDI1ODIgOTkuNzE2MjMyNSw0NS42NjQ4OTI5IDk5LjcyMzY2MTksNDQuNDMwNzA1NiBDOTkuNzI1NzI1Nyw0NC4wNzQ3OTU5IDk5LjcyNjU1MTIsNDIuNjkzMjg4MSA5OS43MjY2ODg3LDQwLjk1NzUyMjkgTDg2LjY2MDA1MDIsNDguODc1MjM5NCBMODYuNjYwMDUwMiw0NS44NDYyMjEgQzg2LjY2MDA1MDIsNDQuNjAyMTIwNSA4Ny42MjMxMjg5LDQzLjc4MDk4MTEgODcuNjIzMTI4OSw0My43ODA5ODExIEw5OS4xODA3NjA3LDM2LjgxNjU3OTMgQzk5LjYxNjg5NzgsMzYuMzYxMTI1MSA5OS43MDY4NzY4LDM1LjYzMTU0NDcgOTkuNzI1NDUwNSwzNS4zNTU2Mjg3IEM5OS43MjUwMzc4LDM0LjA5MDQ2MjcgOTkuNzI0NDg3NCwzMi45ODUyODQxIDk5LjcyNDA3NDcsMzIuMjg1MTY3OCBMODYuNjYwMDUwMiw0MC4yMDEyMzIxIEw4Ni42NjAwNTAyLDM3LjAzNDUzMSBDODYuNjYwMDUwMiwzNS43OTA0MzA1IDg3LjQ4NTU0NjIsMzUuMjQ0NjU2NCA4Ny40ODU1NDYyLDM1LjI0NDY1NjQgTDk3LjUxNjAxMDUsMjkuMTY5MTMzOSBaIiBpZD0iU2hhcGUtQ29weSI+PC9wYXRoPgogICAgICAgIDwvZz4KICAgIDwvZz4KPC9zdmc+\">\n                <!--文字logo-->\n                <span>后台</span>\n            </div>\n            <el-menu\n                class=\"menu\"\n                :default-active=\"onRoutes\"\n                :collapse=\"isCollapse\"\n                style=\"border: none;\"\n                text-color=\"rgb(191, 203, 217)\"\n                background-color=\"rgb(48, 65, 86)\"\n                active-text-color=\"rgb(64, 158, 255)\"\n                unique-opened\n                router>\n                <sidebar-item v-for=\"item in routers\" :key=\"item.path\" :item='item' ></sidebar-item>\n            </el-menu>\n        </el-scrollbar>\n\n        <el-container class=\"container-box\" v-bind:class=\"{'slide-hide': isCollapse, 'slide-in-left': menuShow}\">\n            <el-header class=\"header\">\n                <div class=\"header-left\">\n                    <div class=\"header-toggle\" @click=\"menuShow = !menuShow; showSideBar()\">\n                        <span></span>\n                        <span></span>\n                        <span></span>\n                    </div>\n                    <div class=\"slide-toggle\" :class=\"{'slide-toggle-open': isCollapse}\" @click=\"toggleSideBar\">\n                        <span></span>\n                        <span></span>\n                        <span></span>\n                    </div>\n                </div>\n                <div class=\"header-tabs-box\">\n                    <el-breadcrumb class=\"app-levelbar\" separator=\"/\">\n                        <el-breadcrumb-item v-for=\"(item,index)  in levelList\" :key=\"item.path\">\n                        <span v-if='item.redirect===\"noredirect\"||index==levelList.length-1'\n                              class=\"no-redirect\">{{item.name}}</span>\n                            <router-link v-else :to=\"item.redirect||item.path\">{{item.name}}</router-link>\n                        </el-breadcrumb-item>\n                    </el-breadcrumb>\n                </div>\n\n                <div class=\"header-right\">\n                    <el-dropdown trigger=\"click\">\n                        <!--<i class=\"el-icon-setting\" style=\"margin-right: 15px\"></i>-->\n                        <span>{{username}}<i class=\"el-icon-arrow-down el-icon--right\"></i></span>\n                        <el-dropdown-menu slot=\"dropdown\">\n                            <el-dropdown-item><span @click=\"handlePassword\">修改密码</span></el-dropdown-item>\n                            <el-dropdown-item><span @click=\"loginOut\">退出登录</span></el-dropdown-item>\n                            <el-dropdown-item disabled divided>主题切换</el-dropdown-item>\n                        </el-dropdown-menu>\n                    </el-dropdown>\n                </div>\n\n\n                <!--新增界面-->\n                <el-dialog title=\"修改密码\" :visible.sync=\"passwordFormVisible\" width=\"85%\" top=\"5vh\">\n                    <el-form :model=\"passwordFormData\" :rules=\"passwordFormDataRules\" ref=\"passwordFormData\">\n                        <el-form-item label=\"原始密码\" prop=\"old_password\">\n                            <el-input type=\"password\" v-model=\"passwordFormData.old_password\" auto-complete=\"off\"></el-input>\n                        </el-form-item>\n                        <el-form-item label=\"新密码\" prop=\"new_password\">\n                            <el-input type=\"password\" v-model=\"passwordFormData.new_password\" auto-complete=\"off\"></el-input>\n                        </el-form-item>\n                        <el-form-item label=\"确认密码\" prop=\"check_new_password\">\n                            <el-input type=\"password\" v-model=\"passwordFormData.check_new_password\" auto-complete=\"off\"></el-input>\n                        </el-form-item>\n                    </el-form>\n                    <div slot=\"footer\" class=\"dialog-footer\">\n                        <el-button @click.native=\"passwordFormVisible = !passwordFormVisible\">取消</el-button>\n                        <el-button type=\"primary\" @click.native=\"addSubmit('passwordFormData')\" :loading=\"passwordLoading\">提交</el-button>\n                    </div>\n                </el-dialog>\n\n            </el-header>\n\n            <!--遮板-->\n            <div class=\"main-mask\"\n                 v-show=\"menuShow\"\n                 @click=\"menuShow = !menuShow\"></div>\n\n            <el-main class=\"main\">\n\n                <transition name=\"move\" mode=\"out-in\">\n                    <router-view></router-view>\n                </transition>\n            </el-main>\n        </el-container>\n    </el-container>\n\n</template>\n\n\n<script>\nimport { mapGetters } from \"vuex\";\nimport SidebarItem from \"./SidebarItem.vue\";\nimport { password } from \"../../api/auth/login\";\nimport { getAdminId } from \"../../utils/auth\";\nexport default {\n    data() {\n        let validatePass = (rule, value, callback) => {\n            if (value === \"\") {\n                callback(new Error(\"请输入密码\"));\n            } else {\n                if (this.passwordFormData.check_new_password !== \"\") {\n                    this.$refs.passwordFormData.validateField(\n                        \"check_new_password\"\n                    );\n                }\n                callback();\n            }\n        };\n        let validatePass2 = (rule, value, callback) => {\n            if (value === \"\") {\n                callback(new Error(\"请再次输入密码\"));\n            } else if (value !== this.passwordFormData.new_password) {\n                callback(new Error(\"两次输入密码不一致!\"));\n            } else {\n                callback();\n            }\n        };\n        return {\n            menuShow: false,\n            levelList: null,\n            passwordLoading: false,\n            passwordFormVisible: false,\n            passwordFormData: {\n                old_password: \"\",\n                new_password: \"\",\n                check_new_password: \"\"\n            },\n            passwordFormDataRules: {\n                old_password: [\n                    {\n                        required: true,\n                        message: \"请输入原始密码\",\n                        trigger: \"blur\"\n                    }\n                ],\n                new_password: [\n                    {\n                        required: true,\n                        message: \"请输入新密码\",\n                        trigger: \"blur\"\n                    },\n                    { validator: validatePass, trigger: \"blur\" }\n                ],\n                check_new_password: [\n                    {\n                        required: true,\n                        message: \"请再次输入密码\",\n                        trigger: \"blur\"\n                    },\n                    { validator: validatePass2, trigger: \"blur\" }\n                ]\n            }\n        };\n    },\n    components: {\n        SidebarItem\n    },\n    computed: {\n        ...mapGetters({\n            routers: \"routers\"\n        }),\n        onRoutes() {\n            return this.$route.path;\n        },\n        username() {\n            let username = this.$store.state.admin.userName;\n            return !username ? this.name : username;\n        },\n        isCollapse() {\n            return this.$store.state.app.sidebar.opened;\n        }\n    },\n    mounted() {},\n    methods: {\n        toggleSideBar() {\n            this.$store.dispatch(\"ToggleSideBar\");\n        },\n        showSideBar() {\n            this.$store.dispatch(\"ShowSideBar\");\n        },\n        getBreadcrumb() {\n            let matched = this.$route.matched.filter(item => item.name);\n            const first = matched[0];\n            if (first && (first.name !== \"首页\" || first.path !== \"\")) {\n                matched = [{ name: \"首页\", path: \"/\" }].concat(matched);\n            }\n            this.levelList = matched;\n        },\n        loginOut() {\n            this.$confirm(\"此操作将退出系统, 是否继续?\", \"提示\", {\n                confirmButtonText: \"确定\",\n                cancelButtonText: \"取消\",\n                type: \"warning\"\n            })\n                .then(() => {\n                    this.$store.dispatch(\"loginOut\").then(() => {\n                        location.reload(); // 为了重新实例化vue-router对象 避免bug\n                    });\n                })\n                .catch(() => {\n                    this.$message({\n                        type: \"error\",\n                        message: \"操作失败\"\n                    });\n                });\n        },\n        // 显示修改密码界面\n        handlePassword() {\n            this.passwordFormVisible = true;\n            this.passwordFormData = {\n                old_password: \"\",\n                new_password: \"\",\n                check_new_password: \"\"\n            };\n        },\n        addSubmit(formName) {\n            this.$refs[formName].validate(valid => {\n                if (valid) {\n                    this.passwordLoading = true;\n                    let data = Object.assign({}, this.passwordFormData);\n                    data.adminId = getAdminId();\n                    password(data)\n                        .then(res => {\n                            this.passwordLoading = false;\n                            if (res.code) {\n                                this.$message({\n                                    message: res.message,\n                                    type: \"error\"\n                                });\n                            } else {\n                                this.$message({\n                                    message: \"修改成功\",\n                                    type: \"success\"\n                                });\n                                // 刷新表单\n                                this.$refs[\"passwordFormData\"].resetFields();\n                                this.passwordFormVisible = false;\n                                this.$store.dispatch(\"loginOut\").then(() => {\n                                    location.reload(); // 为了重新实例化vue-router对象 避免bug\n                                });\n                            }\n                        })\n                        .catch(() => {\n                            this.$message({\n                                type: \"error\",\n                                message: \"操作失败\"\n                            });\n                        });\n                }\n            });\n        }\n    },\n    created() {\n        this.getBreadcrumb();\n    },\n    watch: {\n        $route() {\n            this.getBreadcrumb();\n        }\n    }\n};\n</script>\n\n\n<style type=\"text/scss\" lang=\"scss\">\n@import \"../../styles/mixin\";\n.el-header {\n    /*background-color: #eef1f6;*/\n    color: #333;\n    padding: 0 10px;\n}\n\n.el-aside {\n    color: #333;\n}\n\n.el-main {\n    position: relative;\n    padding: 0 10px 10px;\n    background-color: #fff;\n    margin-left: 7px;\n    margin-top: 5px;\n}\n.main-mask {\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 200%;\n    z-index: 100;\n    background-color: #000;\n    opacity: 0.3;\n}\n\n.move-enter-active,\n.move-leave-active {\n    transition: opacity 0.5s;\n}\n\n.move-enter,\n.move-leave {\n    opacity: 0;\n}\n\n.wrapper {\n    height: 100%;\n    overflow-y: hidden;\n    background-color: #f5f7f9;\n}\n\n.container-box {\n    height: 100%;\n    transition: -webkit-transform 0.3s ease-in-out;\n    transition: transform 0.3s ease-in-out, -webkit-transform 0.3s ease-in-out;\n    overflow-y: auto;\n}\n\n.container-left {\n    background-color: rgb(48, 65, 86);\n    transition: left 0.23s ease-in-out;\n    height: 100%;\n    flex: 0 0 auto;\n}\n.container-left-wrap {\n    overflow-x: hidden !important;\n}\n\n.container-left .svg-icon {\n    font-size: 20px;\n    margin-right: 5px;\n}\n\n.container-left:not(.slide-hide) {\n    width: 200px;\n}\n\n.container-left.slide-hide {\n    .logo img {\n        display: none;\n    }\n    .logo span {\n        display: inline-block;\n    }\n}\n\n.menu {\n    width: 100% !important;\n}\n\n/*.menu::-webkit-scrollbar{*/\n/*display: none;*/\n/*}*/\n\n.header {\n    position: relative;\n    text-align: left;\n    font-size: 12px;\n    line-height: $header-height;\n    border-bottom: 1px solid #d8dce5;\n    background-color: #fff;\n}\n\n.logo {\n    display: block;\n    width: 100%;\n    line-height: 80px;\n    text-align: center;\n    color: #fff;\n    transition: display 0.7s ease-in-out;\n    img {\n        vertical-align: middle;\n    }\n    span {\n        display: none;\n    }\n}\n\n.header-left {\n    display: inline-block;\n    height: $header-height;\n    overflow: hidden;\n}\n\n.header-tabs-box {\n    display: inline-block;\n    height: $header-height;\n    max-width: 60%;\n    overflow: hidden;\n}\n\n.header-right {\n    display: flex;\n    width: 80px;\n    height: 100%;\n    margin-left: 10px;\n    float: right;\n    .el-dropdown {\n        display: flex;\n        cursor: pointer;\n    }\n    span {\n        display: inline-block;\n        @include text-overflow;\n    }\n    i {\n        line-height: $header-height;\n        margin-top: 2px;\n    }\n}\n\n.app-levelbar {\n    margin-left: 20px;\n    line-height: 57px !important;\n}\n\n/*宽屏时出现*/\n.slide-toggle {\n    display: inline-block;\n    height: $header-height;\n    line-height: $header-height;\n    text-align: center;\n    cursor: pointer;\n}\n\n.slide-toggle span {\n    display: inline-block;\n    width: 2px;\n    height: 12px;\n    background-color: rgba(135, 141, 153, 0.8);\n    margin-left: 5px;\n}\n.slide-toggle-open span {\n    display: block;\n    margin-left: 4px;\n    margin-top: 4px;\n    width: 16px;\n    height: 2px;\n}\n.slide-toggle-open {\n    padding-top: 17px;\n}\n\n@media screen and (min-width: 768px) {\n    .main-mask {\n        display: none;\n    }\n}\n\n/*.slide-hide {*/\n/*width: 64px !important;*/\n/*}*/\n\n@media screen and (max-width: 768px) {\n    .main {\n        overflow-y: scroll !important;\n        -webkit-overflow-scrolling: touch;\n    }\n\n    .slide-hide.slide-in-left {\n        -webkit-transform: translate3d(64px, 0, 0) !important;\n        transform: translate3d(64px, 0, 0) !important;\n    }\n    .container-left.slide-hide.slide-in-left {\n        left: -64px;\n        width: 64px;\n    }\n    .container-left.slide-in-left {\n        left: 0;\n    }\n    .container-left {\n        margin-right: 0;\n        opacity: 1;\n        position: absolute !important;\n        top: 0;\n        left: -225px;\n        z-index: 10;\n        padding: 0;\n    }\n\n    .container-box.slide-in-left {\n        min-width: 0;\n        opacity: 1;\n        -webkit-transform: translate3d(187px, 0, 0);\n        transform: translate3d(187px, 0, 0);\n        overflow: initial;\n    }\n    .header-toggle {\n        display: block;\n        /*background-color: #26a2ff;*/\n        border-radius: 4px;\n        /*border: 1px solid #fff;*/\n        height: 40px;\n        margin: 10px 0;\n        padding: 2px 6px;\n        outline: none;\n        width: 40px;\n        z-index: 10;\n    }\n\n    .header-toggle span {\n        display: block;\n        width: 100%;\n        height: 4px;\n        margin: 5px auto;\n        background-color: rgba(135, 141, 153, 0.8);\n    }\n\n    .logo {\n        display: none;\n    }\n    .slide-toggle {\n        display: none;\n    }\n}\n</style>\n"
  },
  {
    "path": "src/views/home/main.vue",
    "content": "<template>\n    <div>\n        <div class=\"ms-doc\">\n            <h3>README.md</h3>\n            <article>\n                <h1>vue-admin</h1>\n                <p>基于Vue.js 2.x系列 + Element UI + RBAC/AUTH权限 的后台管理系统</p>\n                <h2>前言</h2>\n                <p><strong>项目前端地址：</strong><a href=\"https://github.com/lmxdawn/vue-admin-html\" target=\"_blank\">https://github.com/lmxdawn/vue-admin-html</a></p>\n                <p><strong>项目JAVA后端地址：</strong><a href=\"https://github.com/lmxdawn/vue-admin-java\" target=\"_blank\">https://github.com/lmxdawn/vue-admin-java</a></p>\n                <p><strong>项目PHP后端地址：</strong><a href=\"https://github.com/lmxdawn/vue-admin-php\" target=\"_blank\">https://github.com/lmxdawn/vue-admin-php</a></p>\n                <p>欢迎大家的star</p>\n                <h2>功能</h2>\n                <el-checkbox disabled checked>管理员登录</el-checkbox>\n                <br>\n                <el-checkbox disabled checked>登录</el-checkbox>\n                <br>\n                <el-checkbox disabled checked>修改密码</el-checkbox>\n                <br>\n                <el-checkbox disabled checked>角色管理</el-checkbox>\n                <br>\n                <el-checkbox disabled checked>权限管理</el-checkbox>\n                <br>\n            </article>\n        </div>\n\n    </div>\n</template>\n\n<script>\nexport default {\n    data() {\n        return {};\n    }\n};\n</script>\n\n<style scoped>\n.ms-doc {\n    width: 100%;\n    max-width: 980px;\n    font-family: PingFang SC, Helvetica Neue, Arial, sans-serif;\n    color: #2d2f33;\n}\n.ms-doc h3 {\n    padding: 9px 10px 10px;\n    margin: 0;\n    font-size: 14px;\n    line-height: 17px;\n    background-color: #f5f5f5;\n    border: 1px solid #d8d8d8;\n    border-bottom: 0;\n    border-radius: 3px 3px 0 0;\n}\n.ms-doc article {\n    padding: 45px;\n    word-wrap: break-word;\n    background-color: #fff;\n    border: 1px solid #ddd;\n    border-bottom-right-radius: 3px;\n    border-bottom-left-radius: 3px;\n}\n.ms-doc article h1 {\n    font-size: 32px;\n    padding-bottom: 10px;\n    margin-bottom: 15px;\n    border-bottom: 1px solid #ddd;\n}\n.ms-doc article h2 {\n    margin: 24px 0 16px;\n    font-weight: 600;\n    line-height: 1.25;\n    padding-bottom: 7px;\n    font-size: 24px;\n    border-bottom: 1px solid #eee;\n}\n.ms-doc article p {\n    margin-bottom: 15px;\n    line-height: 1.5;\n}\n.ms-doc article .el-checkbox {\n    margin-bottom: 5px;\n}\n</style>\n"
  },
  {
    "path": "src/views/login/index.vue",
    "content": "<template>\n    <div class=\"login-container\">\n        <el-form class=\"card-box login-form\" autoComplete=\"on\" :model=\"ruleForm\" :rules=\"rules\" ref=\"ruleForm\"\n                 label-position=\"left\">\n            <h3 class=\"title\">系统登录</h3>\n            <el-form-item prop=\"username\" class=\"item\">\n                <el-input\n                    placeholder=\"邮箱\"\n                    name=\"userName\"\n                    autoComplete=\"on\"\n                    v-model=\"ruleForm.userName\">\n                    <i slot=\"prefix\" class=\"el-input__icon\"><icon-svg icon-class=\"user\"/></i>\n                </el-input>\n            </el-form-item>\n            <el-form-item prop=\"password\" class=\"item\">\n                <!--<span class=\"svg-container\">-->\n                <!--<icon-svg icon-class=\"pwd\"/>-->\n                <!--</span>-->\n                <el-input\n                    placeholder=\"密码\"\n                    name=\"pwd\" :type=\"isShowPwd ? 'text' : 'password'\"\n                    @keyup.enter.native=\"handleLogin\"\n                    v-model=\"ruleForm.pwd\"\n                    autoComplete=\"on\">\n                    <i slot=\"prefix\" class=\"el-input__icon\"><icon-svg icon-class=\"pwd\"/></i>\n                    <i slot=\"suffix\" class=\"el-input__icon\" @click='isShowPwd = !isShowPwd'><icon-svg icon-class=\"eye\"/></i>\n                </el-input>\n            </el-form-item>\n            <div>\n                <el-button type=\"primary\" style=\"width:100%;margin-bottom:30px;\" :loading=\"loading\"\n                           @click.native=\"handleLogin()\">登录\n                </el-button>\n            </div>\n            <div>\n                <el-button type=\"primary\" style=\"width:100%;margin-bottom:30px;\"\n                           @click='showDialog = true'>\n                    第三方登录\n                </el-button>\n            </div>\n        </el-form>\n\n        <el-dialog title=\"第三方验证\" :visible.sync=\"showDialog\">\n            邮箱登录成功,请选择第三方验证<br/>\n        </el-dialog>\n\n    </div>\n</template>\n\n<script>\nexport default {\n    data() {\n        let validatePwd = (rule, value, callback) => {\n            if (value === \"\") {\n                callback(new Error(\"请输入密码\"));\n            } else {\n                callback();\n            }\n        };\n        return {\n            ruleForm: {\n                userName: \"admin\",\n                pwd: \"admin\",\n                checked: true\n            },\n            rules: {\n                userName: [\n                    { required: true, message: \"请输入登录名\", trigger: \"blur\" }\n                ],\n                pwd: [{ validator: validatePwd, trigger: \"blur\" }]\n            },\n            isShowPwd: false, // 是否显示密码\n            loading: false, // 登录loading\n            showDialog: false, // 显示dialog\n            redirect: null // 回调地址\n        };\n    },\n    methods: {\n        handleLogin() {\n            this.$refs[\"ruleForm\"].validate(valid => {\n                if (valid) {\n                    this.loading = true;\n                    this.$store\n                        .dispatch(\"loginName\", this.ruleForm)\n                        .then(response => {\n                            this.loading = false;\n                            if (response.code) {\n                                this.$message.error(response.message);\n                                return;\n                            }\n                            let path = \"/\";\n                            if (this.redirect) {\n                                path = this.redirect;\n                            }\n                            this.$router.push({\n                                path: path\n                            });\n                            // window.location.replace(path);\n                            // this.showDialog = true\n                        })\n                        .catch(() => {\n                            this.loading = false;\n                        });\n                } else {\n                    return false;\n                }\n            });\n        }\n    },\n    created() {\n        // 将参数拷贝进查询对象\n        let query = this.$route.query;\n        if (query.redirect) {\n            // URL Encode\n            this.redirect = decodeURIComponent(query.redirect);\n        }\n    }\n};\n</script>\n\n<style type=\"text/scss\" lang=\"scss\">\n@import \"../../styles/mixin\";\n\n$bg: #2d3a4b;\n$dark_gray: #889aa4;\n$light_gray: #eee;\n.login-container {\n    @include relative;\n    height: 100%;\n    background-color: $bg;\n    input:-webkit-autofill {\n        -webkit-box-shadow: 0 0 0 1000px #293444 inset !important;\n        -webkit-text-fill-color: #fff !important;\n    }\n    .item {\n        .el-form-item__content {\n            display: flex;\n            flex-flow: row;\n        }\n    }\n    input {\n        background: transparent;\n        border: 0;\n        -webkit-appearance: none;\n        border-radius: 0;\n        padding: 0.46rem 0.0666rem 0.16rem 0.2rem;\n        color: $light_gray;\n        height: 100%;\n    }\n    .el-input {\n        display: inline-block;\n    }\n    .tips {\n        font-size: 14px;\n        color: #fff;\n        margin-bottom: 0.13333rem;\n    }\n    .svg-container {\n        padding: 0.08rem 0.0666rem 0.08rem 0.2rem;\n        color: $dark_gray;\n        vertical-align: middle;\n        display: inline-block;\n        &_login {\n            font-size: 20px;\n        }\n    }\n    .title {\n        font-size: 26px;\n        color: $light_gray;\n        margin: 0 auto 0.5333rem auto;\n        text-align: center;\n        font-weight: bold;\n    }\n    .login-form {\n        @include fxied-center;\n        top: 40%;\n        width: 22em;\n        padding: 0.4666rem 0.4666rem 0.2rem 0.4666rem;\n    }\n    .el-form-item {\n        border: 1px solid rgba(255, 255, 255, 0.1);\n        background: rgba(0, 0, 0, 0.1);\n        border-radius: 0.0666rem;\n        color: #454545;\n    }\n    .show-pwd {\n        position: absolute;\n        right: 0.1333rem;\n        top: 0.09333rem;\n        font-size: 16px;\n        color: $dark_gray;\n        cursor: pointer;\n    }\n    .thirdparty-button {\n        /*position: absolute;*/\n        /*right: .4666rem;*/\n        /*bottom: .37333rem;*/\n    }\n}\n</style>\n"
  },
  {
    "path": "src/views/profile/index.vue",
    "content": "<template>\n    <div style=\"width: 2rem;height: 3rem;background-color: red;\">\n        {{ msg }}\n    </div>\n</template>\n\n\n<script>\nexport default {\n    data() {\n        return {\n            msg: \"我的\"\n        };\n    },\n    methods: {},\n    mounted() {}\n};\n</script>\n\n\n<style>\n</style>\n"
  },
  {
    "path": "src/views/userManage/admin/authAdmin.vue",
    "content": "<template>\n\n    <div>\n        <el-form :inline=\"true\" :model=\"query\" class=\"query-form\" size=\"mini\">\n            <el-form-item class=\"query-form-item\">\n                <el-input v-model=\"query.username\" placeholder=\"用户名\"></el-input>\n            </el-form-item>\n            <el-form-item class=\"query-form-item\">\n                <el-select v-model=\"query.status\" placeholder=\"状态\">\n                    <el-option label=\"全部\" value=\"\"></el-option>\n                    <el-option label=\"禁用\" value=\"0\"></el-option>\n                    <el-option label=\"正常\" value=\"1\"></el-option>\n                    <el-option label=\"未验证\" value=\"2\"></el-option>\n                </el-select>\n            </el-form-item>\n            <el-form-item class=\"query-form-item\">\n                <el-select v-model=\"query.roleId\" placeholder=\"角色\">\n                    <el-option label=\"全部角色\" value=\"\"></el-option>\n                    <el-option v-for=\"item in roles\" :key=\"item.id\" :label=\"item.name\" :value=\"item.id\"></el-option>\n                </el-select>\n            </el-form-item>\n\n            <el-form-item>\n                <el-button-group>\n                    <el-button type=\"primary\" icon=\"el-icon-refresh\" @click=\"onReset\"></el-button>\n                    <el-button type=\"primary\" icon=\"search\" @click=\"onSubmit\">查询</el-button>\n                    <el-button type=\"primary\" @click.native=\"handleForm(null,null)\">新增</el-button>\n                </el-button-group>\n            </el-form-item>\n        </el-form>\n        <el-scrollbar class=\"table-scrollbar\" wrap-style=\"overflow-x: hidden;\">\n            <el-table\n                v-loading=\"loading\"\n                :data=\"list\"\n                style=\"width: 100%;\">\n                <el-table-column\n                    label=\"用户 ID\"\n                    prop=\"id\"\n                    fixed>\n                </el-table-column>\n                <el-table-column\n                    label=\"用户名\"\n                    prop=\"username\"\n                    fixed>\n                </el-table-column>\n                <el-table-column\n                    label=\"状态\">\n                    <template slot-scope=\"scope\">\n                        <el-tag :type=\"scope.row.status | statusFilterType\">{{scope.row.status | statusFilterName}}</el-tag>\n                    </template>\n                </el-table-column>\n                <el-table-column\n                    label=\"登录时间\"\n                    with=\"300\"\n                    :show-overflow-tooltip=\"true\">\n                    <template slot-scope=\"scope\">\n                        <i class=\"el-icon-time\"></i>\n                        <span>{{ scope.row.lastLoginTime | formatDateStr('yyyy-MM-dd hh:mm:ss') }}</span>\n                    </template>\n                </el-table-column>\n                <el-table-column\n                    label=\"登录IP\">\n                    <template slot-scope=\"scope\">\n                        <span>{{ scope.row.lastLoginIp }}</span>\n                    </template>\n                </el-table-column>\n                <el-table-column\n                    label=\"操作\"\n                    fixed=\"right\">\n                    <template slot-scope=\"scope\">\n                        <el-button type=\"text\" size=\"small\" @click.native=\"handleForm(scope.$index, scope.row)\">编辑\n                        </el-button>\n                        <el-button type=\"text\" size=\"small\" @click.native=\"handleDel(scope.$index, scope.row)\">删除\n                        </el-button>\n                    </template>\n                </el-table-column>\n            </el-table>\n        </el-scrollbar>\n\n        <el-pagination\n            :page-size=\"query.limit\"\n            @current-change=\"handleCurrentChange\"\n            layout=\"prev, pager, next\"\n            :total=\"total\">\n        </el-pagination>\n\n        <!--表单-->\n        <el-dialog\n            :title=\"formMap[formName]\"\n            :visible.sync=\"formVisible\"\n            :before-close=\"hideForm\"\n            width=\"85%\"\n            top=\"5vh\">\n            <el-form :model=\"formData\" :rules=\"formRules\" ref=\"dataForm\">\n                <el-form-item label=\"用户名\" prop=\"username\">\n                    <el-input v-model=\"formData.username\" auto-complete=\"off\"></el-input>\n                </el-form-item>\n                <el-form-item label=\"登录密码\" prop=\"password\">\n                    <el-input type=\"password\" v-model=\"formData.password\" auto-complete=\"off\"></el-input>\n                </el-form-item>\n                <el-form-item label=\"确认密码\" prop=\"checkPassword\">\n                    <el-input type=\"password\" v-model=\"formData.checkPassword\" auto-complete=\"off\"></el-input>\n                </el-form-item>\n                <el-form-item label=\"状态\" prop=\"status\">\n                    <el-radio-group v-model=\"formData.status\">\n                        <el-radio :label=\"0\">禁用</el-radio>\n                        <el-radio :label=\"1\">正常</el-radio>\n                        <el-radio :label=\"2\">未验证</el-radio>\n                    </el-radio-group>\n                </el-form-item>\n                <el-form-item label=\"角色\">\n                    <el-checkbox-group v-model=\"formData.roles\">\n                        <el-checkbox v-for=\"item in roles\" :key=\"item.id\" :label=\"item.id\">{{item.name}}</el-checkbox>\n                    </el-checkbox-group>\n                </el-form-item>\n            </el-form>\n            <div slot=\"footer\" class=\"dialog-footer\">\n                <el-button @click.native=\"hideForm\">取消</el-button>\n                <el-button type=\"primary\" @click.native=\"formSubmit()\" :loading=\"formLoading\">提交</el-button>\n            </div>\n        </el-dialog>\n    </div>\n\n</template>\n\n<script>\nimport {\n    authAdminList,\n    authAdminRoleList,\n    authAdminSave,\n    authAdminDelete\n} from \"../../../api/auth/authAdmin\";\nconst formJson = {\n    id: \"\",\n    password: \"\",\n    username: \"\",\n    checkPassword: \"\",\n    status: 1,\n    roles: []\n};\nexport default {\n    data() {\n        let validatePass = (rule, value, callback) => {\n            if (value === \"\") {\n                callback(new Error(\"请输入密码\"));\n            } else {\n                callback();\n            }\n        };\n        let validatePass2 = (rule, value, callback) => {\n            if (value === \"\") {\n                callback(new Error(\"请再次输入密码\"));\n            } else if (value !== this.formData.password) {\n                callback(new Error(\"两次输入密码不一致!\"));\n            } else {\n                callback();\n            }\n        };\n        return {\n            roles: [],\n            query: {\n                username: \"\",\n                status: \"\",\n                page: 1,\n                limit: 20,\n                roleId: \"\"\n            },\n            list: [],\n            total: 0,\n            loading: true,\n            index: null,\n            formName: null,\n            formMap: {\n                add: \"新增\",\n                edit: \"编辑\"\n            },\n            formLoading: false,\n            formVisible: false,\n            formData: formJson,\n            formRules: {},\n            addRules: {\n                username: [\n                    { required: true, message: \"请输入姓名\", trigger: \"blur\" }\n                ],\n                password: [\n                    { required: true, message: \"请输入密码\", trigger: \"blur\" },\n                    { validator: validatePass, trigger: \"blur\" }\n                ],\n                checkPassword: [\n                    {\n                        required: true,\n                        message: \"请再次输入密码\",\n                        trigger: \"blur\"\n                    },\n                    { validator: validatePass2, trigger: \"blur\" }\n                ],\n                status: [\n                    { required: true, message: \"请选择状态\", trigger: \"change\" }\n                ]\n            },\n            editRules: {\n                username: [\n                    { required: true, message: \"请输入姓名\", trigger: \"blur\" }\n                ],\n                status: [\n                    { required: true, message: \"请选择状态\", trigger: \"change\" }\n                ]\n            },\n            deleteLoading: false\n        };\n    },\n    methods: {\n        onReset() {\n            this.$router.push({\n                path: \"\"\n            });\n            this.query = {\n                username: \"\",\n                status: \"\",\n                page: 1,\n                limit: 20,\n                roleId: \"\"\n            };\n            this.getList();\n        },\n        onSubmit() {\n            this.$router.push({\n                path: \"\",\n                query: this.query\n            });\n            this.getList();\n        },\n        handleCurrentChange(val) {\n            this.query.page = val;\n            this.getList();\n        },\n        getList() {\n            this.loading = true;\n            authAdminList(this.query)\n                .then(response => {\n                    this.loading = false;\n                    if (response.code) {\n                        this.$message.error(response.message);\n                    }\n                    this.list = response.data.list || [];\n                    this.total = response.data.total || 0;\n                })\n                .catch(() => {\n                    this.loading = false;\n                    this.list = [];\n                    this.total = 0;\n                    this.roles = [];\n                });\n        },\n        getRoleList() {\n            authAdminRoleList(this.query)\n                .then(response => {\n                    if (response.code) {\n                        this.$message.error(response.message);\n                        return false;\n                    }\n                    this.roles = response.data.list || [];\n                })\n                .catch(() => {});\n        },\n        // 隐藏表单\n        hideForm() {\n            // 更改值\n            this.formVisible = !this.formVisible;\n            return true;\n        },\n        // 刷新表单\n        resetForm() {\n            if (this.$refs[\"dataForm\"]) {\n                // 清空验证信息表单\n                this.$refs[\"dataForm\"].clearValidate();\n                // 刷新表单\n                this.$refs[\"dataForm\"].resetFields();\n            }\n        },\n        // 显示表单\n        handleForm(index, row) {\n            this.formVisible = true;\n            this.formData = JSON.parse(JSON.stringify(formJson));\n            if (row !== null) {\n                this.formData = Object.assign({}, row);\n            }\n            this.formData.password = \"\";\n            this.formData.checkPassword = \"\";\n            this.formName = \"add\";\n            this.formRules = this.addRules;\n            if (index !== null) {\n                this.index = index;\n                this.formName = \"edit\";\n                this.formRules = this.editRules;\n            }\n        },\n        formSubmit() {\n            this.$refs[\"dataForm\"].validate(valid => {\n                if (valid) {\n                    this.formLoading = true;\n                    let data = Object.assign({}, this.formData);\n                    authAdminSave(data, this.formName).then(response => {\n                        this.formLoading = false;\n                        if (response.code) {\n                            this.$message.error(response.message);\n                            return false;\n                        }\n                        this.$message.success(\"操作成功\");\n                        this.formVisible = false;\n                        if (this.formName === \"add\") {\n                            // 向头部添加数据\n                            if (response.data && response.data.id) {\n                                data.id = response.data.id;\n                                this.list.unshift(data);\n                            }\n                        } else {\n                            this.list.splice(this.index, 1, data);\n                        }\n                        // 刷新表单\n                        this.resetForm();\n                    });\n                }\n            });\n        },\n        // 删除\n        handleDel(index, row) {\n            if (row.id) {\n                this.$confirm(\"确认删除该记录吗?\", \"提示\", {\n                    type: \"warning\"\n                })\n                    .then(() => {\n                        let para = { id: row.id };\n                        this.deleteLoading = true;\n                        authAdminDelete(para)\n                            .then(response => {\n                                this.deleteLoading = false;\n                                if (response.code) {\n                                    this.$message.error(response.message);\n                                    return false;\n                                }\n                                this.$message.success(\"删除成功\");\n                                // 刷新数据\n                                this.list.splice(index, 1);\n                            })\n                            .catch(() => {\n                                this.deleteLoading = false;\n                            });\n                    })\n                    .catch(() => {\n                        this.$message.error(\"取消删除\");\n                    });\n            }\n        }\n    },\n    filters: {\n        statusFilterType(status) {\n            const statusMap = {\n                0: \"gray\",\n                1: \"success\",\n                2: \"danger\"\n            };\n            return statusMap[status];\n        },\n        statusFilterName(status) {\n            const statusMap = {\n                0: \"禁用\",\n                1: \"正常\",\n                2: \"未验证\"\n            };\n            return statusMap[status];\n        }\n    },\n    mounted() {},\n    created() {\n        // 将参数拷贝进查询对象\n        let query = this.$route.query;\n        this.query = Object.assign(this.query, query);\n        this.query.limit = parseInt(this.query.limit);\n        // 加载表格数据\n        this.getList();\n        // 加载角色列表\n        this.getRoleList();\n    }\n};\n</script>\n\n<style type=\"text/scss\" lang=\"scss\">\n</style>\n"
  },
  {
    "path": "src/views/userManage/admin/authPermissionRule.vue",
    "content": "<template>\n    <div>\n        <el-form :inline=\"true\" :model=\"query\" class=\"query-form\" size=\"mini\">\n\n            <el-form-item>\n                <el-button-group>\n                    <el-button type=\"primary\" icon=\"el-icon-refresh\" @click=\"onReset\"></el-button>\n                    <el-button type=\"primary\" icon=\"search\" @click=\"onSubmit\">查询</el-button>\n                    <el-button type=\"primary\" @click.native=\"handleForm(null,null)\">新增</el-button>\n                </el-button-group>\n            </el-form-item>\n        </el-form>\n\n        <el-tree\n            :data=\"mergeList\"\n            :props=\"defaultProps\"\n            node-key=\"id\"\n            default-expand-all\n            :expand-on-click-node=\"false\"\n            :render-content=\"renderContent\">\n        </el-tree>\n\n        <!--表单界面-->\n        <el-dialog\n            :title=\"formMap[formName]\"\n            :visible.sync=\"formVisible\"\n            :before-close=\"hideForm\"\n            width=\"85%\"\n            top=\"5vh\">\n            <el-form :model=\"formData\" :rules=\"formRules\" ref=\"dataForm\">\n                <el-form-item label=\"规则名\" prop=\"name\">\n                    <el-input type=\"\" v-model=\"formData.name\" auto-complete=\"off\"></el-input>\n                </el-form-item>\n                <el-form-item label=\"规则标题\" prop=\"title\">\n                    <el-input type=\"\" v-model=\"formData.title\" auto-complete=\"off\"></el-input>\n                </el-form-item>\n                <el-form-item label=\"状态\" prop=\"status\">\n                    <el-radio-group v-model=\"formData.status\">\n                        <el-radio :label=\"0\">禁用</el-radio>\n                        <el-radio :label=\"1\">正常</el-radio>\n                    </el-radio-group>\n                </el-form-item>\n                <el-form-item label=\"额外的规则表达式\">\n                    <el-input type=\"textarea\" v-model=\"formData.condition\"></el-input>\n                </el-form-item>\n                <el-form-item label=\"排序\" prop=\"listorder\">\n                    <el-input type=\"\" v-model=\"formData.listorder\" auto-complete=\"off\"></el-input>\n                </el-form-item>\n            </el-form>\n            <div slot=\"footer\" class=\"dialog-footer\">\n                <el-button @click.native=\"hideForm\">取消</el-button>\n                <el-button type=\"primary\" @click.native=\"formSubmit()\" :loading=\"formLoading\">提交</el-button>\n            </div>\n        </el-dialog>\n    </div>\n\n</template>\n\n<script>\nimport {\n    authPermissionRuleList,\n    authPermissionRuleSave,\n    authPermissionRuleDelete\n} from \"../../../api/auth/authPermissionRule\";\nconst formJson = {\n    id: \"\",\n    pid: 0,\n    name: \"\",\n    title: \"\",\n    status: 1,\n    condition: \"\",\n    listorder: 999\n};\nexport default {\n    data() {\n        return {\n            query: {\n                // pid: '',\n            },\n            mergeList: [],\n            node: null,\n            defaultProps: {\n                children: \"children\",\n                label: \"title\"\n            },\n            treeList: [],\n            loading: true,\n            index: null,\n            formName: null,\n            formMap: {\n                add: \"新增\",\n                edit: \"编辑\"\n            },\n            formLoading: false,\n            formVisible: false,\n            formData: formJson,\n            formRules: {\n                name: [\n                    { required: true, message: \"请输入规则名\", trigger: \"blur\" }\n                ],\n                title: [\n                    { required: true, message: \"请输入标题\", trigger: \"blur\" }\n                ],\n                status: [\n                    { required: true, message: \"请选择状态\", trigger: \"change\" }\n                ]\n            },\n            pidData: {},\n            deleteLoading: false\n        };\n    },\n    methods: {\n        /*eslint-disable */\n        renderContent (h, { node, data, store }) {\n            return (\n                <span style=\"flex: 1; display: flex; align-items: center; justify-content: space-between; font-size: 14px; padding-right: 8px;\">\n                <span>\n                <span title={ data.name }>{node.label}</span>\n            </span>\n            <span>\n            <el-button style=\"font-size: 12px;\" type=\"text\" on-click={ () => this.handleForm(node, data, 'add') }>添加子菜单</el-button>\n            <el-button style=\"font-size: 12px;\" type=\"text\" on-click={ () => this.handleForm(node, data, 'edit') }>编辑</el-button>\n            <el-button style=\"font-size: 12px;\" type=\"text\" on-click={ () => this.handleDel(node, data) }>删除</el-button>\n            </span>\n            </span>)\n        },\n        onReset() {\n            this.$router.push({\n                path: \"\"\n            });\n            this.query = {\n                name: \"\",\n                status: \"\"\n            };\n            this.getList();\n        },\n        onSubmit() {\n            this.getList();\n        },\n        getList() {\n            this.loading = true;\n            authPermissionRuleList(this.query)\n                .then(response => {\n                    this.loading = false;\n                    if (response.code) {\n                        this.$message.error(response.message);\n                    }\n                    this.mergeList = response.data.list || [];\n                })\n                .catch(() => {\n                    this.loading = false;\n                    this.mergeList = [];\n                });\n        },\n        // 刷新表单\n        resetForm() {\n            if (this.$refs[\"dataForm\"]) {\n                // 清空验证信息表单\n                this.$refs[\"dataForm\"].clearValidate();\n                // 刷新表单\n                this.$refs[\"dataForm\"].resetFields();\n            }\n        },\n        // 隐藏表单\n        hideForm() {\n            // 更改值\n            this.formVisible = !this.formVisible;\n            return true;\n        },\n        // 显示表单\n        handleForm(node, data, formName) {\n            this.formVisible = true;\n            this.pidData = data || null;\n            formJson.pid = (data && parseInt(data.id)) || 0;\n            this.formData = JSON.parse(JSON.stringify(formJson));\n            if (formName === \"edit\") {\n                this.formData = Object.assign({}, data);\n                this.node = node;\n            }\n            this.formName = formName;\n            if (data && data.id) {\n                this.index = this.mergeList.findIndex(d => d.id === data.id);\n            }\n        },\n        formSubmit() {\n            this.$refs[\"dataForm\"].validate(valid => {\n                if (valid) {\n                    this.formLoading = true;\n                    let data = Object.assign({}, this.formData);\n                    authPermissionRuleSave(data, this.formName)\n                        .then(response => {\n                            this.formLoading = false;\n                            if (response.code) {\n                                this.$message.error(response.message);\n                                return false;\n                            }\n                            this.$message.success(\"删除成功\");\n                            this.formVisible = false;\n                            if (this.formName !== \"edit\") {\n                                if (response.data && response.data.id) {\n                                    data.id = response.data.id;\n                                    if (this.pidData) {\n                                        if (!this.pidData.children) {\n                                            this.$set(\n                                                this.pidData,\n                                                \"children\",\n                                                []\n                                            );\n                                        }\n                                        this.pidData.children.push(data);\n                                    } else {\n                                        this.mergeList.push(data);\n                                    }\n                                }\n                            } else {\n                                const parent = this.node.parent;\n                                const children =\n                                    parent.data.children || parent.data;\n                                const index = children.findIndex(\n                                    d => d.id === data.id\n                                );\n                                children.splice(index, 1, data);\n                            }\n                            // 刷新表单\n                            this.resetForm();\n                        })\n                        .catch(() => {\n                            this.formLoading = false;\n                        });\n                }\n            });\n        },\n        // 删除\n        handleDel(node, data) {\n            if (data.children && data.children.length > 0) {\n                this.$alert(\"请先删除子节点\", \"提示\", {\n                    confirmButtonText: \"确定\"\n                });\n                return false;\n            }\n            if (data.id) {\n                this.$confirm(\"确认删除该记录吗?\", \"提示\", {\n                    type: \"warning\"\n                })\n                    .then(() => {\n                        this.deleteLoading = true;\n                        let para = { id: data.id };\n                        authPermissionRuleDelete(para)\n                            .then(response => {\n                                this.deleteLoading = false;\n                                if (response.code) {\n                                    this.$message.error(response.message);\n                                    return false;\n                                }\n                                this.$message.success(\"删除成功\");\n                                const parent = node.parent;\n                                const children =\n                                    parent.data.children || parent.data;\n                                const index = children.findIndex(\n                                    d => d.id === data.id\n                                );\n                                children.splice(index, 1);\n                            })\n                            .catch(() => {\n                                this.deleteLoading = false;\n                            });\n                    })\n                    .catch(() => {\n                        this.$message.error(\"取消删除\");\n                    });\n            }\n        }\n    },\n    filters: {\n        statusFilterType(status) {\n            const statusMap = {\n                0: \"gray\",\n                1: \"success\"\n            };\n            return statusMap[status];\n        },\n        statusFilterName(status) {\n            const statusMap = {\n                0: \"禁用\",\n                1: \"正常\"\n            };\n            return statusMap[status];\n        }\n    },\n    mounted() {},\n    created() {\n        // 加载表格数据\n        this.getList();\n    }\n};\n</script>\n\n<style type=\"text/scss\" lang=\"scss\">\n</style>\n"
  },
  {
    "path": "src/views/userManage/admin/authRole.vue",
    "content": "<template>\n    <div>\n        <el-form :inline=\"true\" :model=\"query\" class=\"query-form\" size=\"mini\">\n            <el-form-item class=\"query-form-item\">\n                <el-input v-model=\"query.name\" placeholder=\"角色名称\"></el-input>\n            </el-form-item>\n            <el-form-item class=\"query-form-item\">\n                <el-select v-model=\"query.status\" placeholder=\"状态\">\n                    <el-option label=\"全部\" value=\"\"></el-option>\n                    <el-option label=\"禁用\" value=\"0\"></el-option>\n                    <el-option label=\"正常\" value=\"1\"></el-option>\n                </el-select>\n            </el-form-item>\n\n            <el-form-item>\n                <el-button-group>\n                    <el-button type=\"primary\" icon=\"el-icon-refresh\" @click=\"onReset\"></el-button>\n                    <el-button type=\"primary\" icon=\"search\" @click=\"onSubmit\">查询</el-button>\n                    <el-button type=\"primary\" @click.native=\"handleForm(null,null)\">新增</el-button>\n                </el-button-group>\n            </el-form-item>\n        </el-form>\n        <el-scrollbar class=\"table-scrollbar\" wrap-style=\"overflow-x: hidden;\">\n            <el-table\n                v-loading=\"loading\"\n                :data=\"list\"\n                style=\"width: 100%;\">\n                <el-table-column\n                    label=\"角色 ID\"\n                    prop=\"id\">\n                </el-table-column>\n                <el-table-column\n                    label=\"角色名称\"\n                    prop=\"name\">\n                </el-table-column>\n                <el-table-column\n                    label=\"状态\">\n                    <template slot-scope=\"scope\">\n                        <el-tag :type=\"scope.row.status | statusFilterType\">{{scope.row.status | statusFilterName}}</el-tag>\n                    </template>\n                </el-table-column>\n                <el-table-column\n                    label=\"描述\"\n                    :show-overflow-tooltip=\"true\">\n                    <template slot-scope=\"scope\">\n                        <span>{{ scope.row.remark }}</span>\n                    </template>\n                </el-table-column>\n                <el-table-column\n                    label=\"操作\"\n                    fixed=\"right\"\n                    width=\"200\">\n                    <template slot-scope=\"scope\">\n                        <el-button type=\"text\" size=\"small\" @click.native=\"handleAuth(scope.row.id)\">授权</el-button>\n                        <el-button type=\"text\" size=\"small\" @click.native=\"handleForm(scope.$index, scope.row)\">编辑</el-button>\n                        <el-button type=\"text\" size=\"small\" @click.native=\"handleDel(scope.$index, scope.row)\" :loading=\"deleteLoading\">删除</el-button>\n                    </template>\n                </el-table-column>\n            </el-table>\n        </el-scrollbar>\n\n        <el-pagination\n            :page-size=\"query.limit\"\n            @current-change=\"handleCurrentChange\"\n            layout=\"prev, pager, next\"\n            :total=\"total\">\n        </el-pagination>\n\n        <!--授权界面-->\n        <el-dialog\n            title=\"授权\"\n            :visible.sync=\"authFormVisible\"\n            :close-on-click-modal=\"false\"\n            class=\"dialog\">\n            <el-tree\n                style=\"max-height: 75vh;overflow-y: auto;\"\n                :data=\"authList\"\n                show-checkbox=\"\"\n                default-expand-all=\"\"\n                node-key=\"id\"\n                ref=\"tree\"\n                :props=\"defaultProps\"\n                :default-checked-keys=\"authDefaultCheckedKeys\">\n            </el-tree>\n            <div slot=\"footer\" class=\"dialog-footer\">\n                <el-button @click.native=\"authFormVisible = !authFormVisible\">取消</el-button>\n                <el-button type=\"primary\" @click.native=\"authSubmit()\" :loading=\"authLoading\">提交\n                </el-button>\n            </div>\n        </el-dialog>\n\n        <!--表单-->\n        <el-dialog\n            :title=\"formMap[formName]\"\n            :visible.sync=\"formVisible\"\n            :before-close=\"hideForm\"\n            width=\"85%\"\n            top=\"5vh\">\n            <el-form :model=\"formData\" :rules=\"formRules\" ref=\"dataForm\">\n                <el-form-item label=\"角色名称\" prop=\"name\">\n                    <el-input v-model=\"formData.name\" auto-complete=\"off\"></el-input>\n                </el-form-item>\n                <el-form-item label=\"排序\" prop=\"listorder\">\n                    <el-input type=\"\" v-model=\"formData.listorder\" auto-complete=\"off\"></el-input>\n                </el-form-item>\n                <el-form-item label=\"状态\" prop=\"status\">\n                    <el-radio-group v-model=\"formData.status\">\n                        <el-radio label=\"0\">禁用</el-radio>\n                        <el-radio label=\"1\">正常</el-radio>\n                    </el-radio-group>\n                </el-form-item>\n                <el-form-item label=\"描述\">\n                    <el-input type=\"textarea\" v-model=\"formData.remark\"></el-input>\n                </el-form-item>\n            </el-form>\n            <div slot=\"footer\" class=\"dialog-footer\">\n                <el-button @click.native=\"hideForm\">取消</el-button>\n                <el-button type=\"primary\" @click.native=\"formSubmit()\" :loading=\"formLoading\">提交</el-button>\n            </div>\n        </el-dialog>\n    </div>\n\n</template>\n\n<script>\nimport {\n    authRoleList,\n    authRoleAuthList,\n    authRoleAuth,\n    authRoleSave,\n    authRoleDelete\n} from \"../../../api/auth/authRole\";\nconst formJson = {\n    id: \"\",\n    name: \"\",\n    status: \"1\",\n    remark: \"\",\n    listorder: 999\n};\nexport default {\n    data() {\n        return {\n            query: {\n                name: \"\",\n                status: \"\",\n                page: 1,\n                limit: 20\n            },\n            list: [],\n            total: 0,\n            loading: true,\n            authList: [],\n            defaultProps: {\n                children: \"children\",\n                label: \"title\"\n            },\n            authLoading: false,\n            authFormVisible: false,\n            authFormData: {\n                roleId: \"\",\n                authRules: []\n            },\n            authDefaultCheckedKeys: [],\n            index: null,\n            formName: null,\n            formMap: {\n                add: \"新增\",\n                edit: \"编辑\"\n            },\n            formLoading: false,\n            formVisible: false,\n            formData: formJson,\n            formRules: {\n                name: [\n                    { required: true, message: \"请输入名称\", trigger: \"blur\" }\n                ],\n                status: [\n                    { required: true, message: \"请选择状态\", trigger: \"change\" }\n                ]\n            },\n            deleteLoading: false\n        };\n    },\n    methods: {\n        onReset() {\n            this.$router.push({\n                path: \"\"\n            });\n            this.query = {\n                name: \"\",\n                status: \"\",\n                page: 1,\n                limit: 20\n            };\n            this.getList();\n        },\n        onSubmit() {\n            this.getList();\n        },\n        handleCurrentChange(val) {\n            this.query.page = val;\n            this.getList();\n        },\n        getList() {\n            this.loading = true;\n            authRoleList(this.query)\n                .then(response => {\n                    this.loading = false;\n                    if (response.code) {\n                        this.$message.error(response.message);\n                    }\n                    this.list = response.data.list || [];\n                    this.total = response.data.total || 0;\n                })\n                .catch(() => {\n                    this.loading = false;\n                    this.list = [];\n                    this.total = 0;\n                });\n        },\n        // 显示授权界面\n        handleAuth(roleId) {\n            this.authFormData.roleId = roleId;\n            this.authFormData.authRules = [];\n            this.authList = [];\n            authRoleAuthList({ id: roleId })\n                .then(response => {\n                    if (response.code) {\n                        this.authFormVisible = false;\n                        this.$message({\n                            message: response.message,\n                            type: \"error\"\n                        });\n                        return;\n                    }\n                    this.authFormVisible = true;\n                    this.authList = response.data.list || [];\n                    const checkedKeys = response.data.checkedKeys || [];\n                    let tempCheckedKeys = [];\n                    let id = null;\n                    let node = null;\n                    let getTreeNode = function(arr, id) {\n                        for (let i in arr) {\n                            let tempNode = arr[i];\n                            if (tempNode.id === id) {\n                                // 找到了，就不找了\n                                node = tempNode;\n                            }\n                            // 如果还有子节点，再继续找\n                            getTreeNode(tempNode.children, id);\n                        }\n                    };\n                    for (let i in checkedKeys) {\n                        id = checkedKeys[i];\n                        getTreeNode(this.authList, id);\n                        if (node && node.children.length <= 0) {\n                            // 如果下面没有子节点，则加入\n                            tempCheckedKeys.push(id);\n                        }\n                    }\n                    this.authDefaultCheckedKeys = [];\n                    this.authDefaultCheckedKeys = tempCheckedKeys;\n                    // this.$refs.tree.setCheckedKeys(tempCheckedKeys);\n                })\n                .catch(() => {});\n        },\n        authSubmit() {\n            this.authLoading = true;\n            let getNodeParents = function(node) {\n                let arr = [];\n                let id = node.data.id || null;\n                if (id) {\n                    arr.push(node.data.id);\n                }\n                if (node.parent) {\n                    arr = arr.concat(getNodeParents(node.parent));\n                }\n                return arr;\n            };\n            let checkedKeys = this.$refs.tree.getCheckedKeys();\n            let arr = [];\n            for (let checkedKey of checkedKeys) {\n                let node = this.$refs.tree.getNode(checkedKey);\n                arr = arr.concat(getNodeParents(node));\n            }\n            let setArr = new Set(arr);\n            this.authFormData.authRules = [...setArr];\n            if (!this.authFormData) {\n                this.$alert(\"请至少选择一个权限\", \"提示\", {\n                    confirmButtonText: \"确定\"\n                });\n                return false;\n            }\n            authRoleAuth(this.authFormData)\n                .then(response => {\n                    this.authLoading = false;\n                    if (response.code) {\n                        this.$message.error(response.message);\n                        return false;\n                    }\n                    this.$message.success(\"授权成功\");\n                    // 刷新表单\n                    this.authFormVisible = false;\n                })\n                .catch(() => {\n                    this.authLoading = false;\n                });\n        },\n        // 刷新表单\n        resetForm() {\n            if (this.$refs[\"dataForm\"]) {\n                // 清空验证信息表单\n                this.$refs[\"dataForm\"].clearValidate();\n                // 刷新表单\n                this.$refs[\"dataForm\"].resetFields();\n            }\n        },\n        // 隐藏表单\n        hideForm() {\n            // 更改值\n            this.formVisible = !this.formVisible;\n            return true;\n        },\n        // 显示表单\n        handleForm(index, row) {\n            this.formVisible = true;\n            this.formData = JSON.parse(JSON.stringify(formJson));\n            if (row !== null) {\n                this.formData = Object.assign({}, row);\n            }\n            this.formName = \"add\";\n            if (index !== null) {\n                this.index = index;\n                this.formName = \"edit\";\n            }\n        },\n        formSubmit() {\n            this.$refs[\"dataForm\"].validate(valid => {\n                if (valid) {\n                    this.formLoading = true;\n                    let data = Object.assign({}, this.formData);\n                    authRoleSave(data, this.formName)\n                        .then(response => {\n                            this.formLoading = false;\n                            if (response.code) {\n                                this.$message.error(response.message);\n                                return false;\n                            }\n                            this.$message.success(\"删除成功\");\n                            this.formVisible = false;\n                            if (this.formName === \"add\") {\n                                // 向头部添加数据\n                                if (response.data && response.data.id) {\n                                    data.id = response.data.id;\n                                    this.list.unshift(data);\n                                }\n                            } else {\n                                this.list.splice(this.index, 1, data);\n                            }\n                            // 刷新表单\n                            this.resetForm();\n                        })\n                        .catch(() => {\n                            this.formLoading = false;\n                        });\n                }\n            });\n        },\n        // 删除\n        handleDel(index, row) {\n            if (row.id) {\n                this.$confirm(\"确认删除该记录吗?\", \"提示\", {\n                    type: \"warning\"\n                })\n                    .then(() => {\n                        this.deleteLoading = true;\n                        let para = { id: row.id };\n                        authRoleDelete(para)\n                            .then(response => {\n                                this.deleteLoading = false;\n                                if (response.code) {\n                                    this.$message.error(response.message);\n                                    return false;\n                                }\n                                this.$message.success(\"删除成功\");\n                                // 刷新数据\n                                this.list.splice(index, 1);\n                            })\n                            .catch(() => {\n                                this.deleteLoading = false;\n                            });\n                    })\n                    .catch(() => {\n                        this.$message.error(\"取消删除\");\n                    });\n            }\n        }\n    },\n    filters: {\n        statusFilterType(status) {\n            const statusMap = {\n                0: \"gray\",\n                1: \"success\"\n            };\n            return statusMap[status];\n        },\n        statusFilterName(status) {\n            const statusMap = {\n                0: \"禁用\",\n                1: \"正常\"\n            };\n            return statusMap[status];\n        }\n    },\n    mounted() {},\n    created() {\n        // 加载表格数据\n        this.getList();\n    }\n};\n</script>\n\n<style type=\"text/scss\" lang=\"scss\">\n</style>\n"
  },
  {
    "path": "src/views/userManage/admin/router.vue",
    "content": "<template>\n    <router-view></router-view>\n</template>\n"
  },
  {
    "path": "tests/unit/.eslintrc.js",
    "content": "module.exports = {\n  env: {\n    jest: true\n  },\n  rules: {\n    'import/no-extraneous-dependencies': 'off'\n  }\n}"
  },
  {
    "path": "tests/unit/HelloWorld.spec.js",
    "content": "import { shallowMount } from \"@vue/test-utils\";\nimport HelloWorld from \"@/components/HelloWorld.vue\";\n\ndescribe(\"HelloWorld.vue\", () => {\n  it(\"renders props.msg when passed\", () => {\n    const msg = \"new message\";\n    const wrapper = shallowMount(HelloWorld, {\n      propsData: { msg }\n    });\n    expect(wrapper.text()).toMatch(msg);\n  });\n});\n"
  },
  {
    "path": "vue.config.js",
    "content": "module.exports = {\n    baseUrl: process.env.NODE_ENV === \"production\" ? \"./\" : \"/\",\n    outputDir: process.env.outputDir,\n    configureWebpack: config => {\n        if (process.env.NODE_ENV === \"production\") {\n            // 为生产环境修改配置...\n            config.externals = {\n                vue: \"Vue\",\n                vuex: \"Vuex\",\n                \"vue-router\": \"VueRouter\",\n                \"element-ui\": \"ELEMENT\"\n            };\n        } else {\n            // 为开发环境修改配置...\n        }\n    },\n    chainWebpack: config => {\n        config.plugin(\"html\").tap(args => {\n            args[0].template = process.env.template;\n            return args;\n        });\n    }\n};\n"
  }
]