Full Code of lmxdawn/vue-admin-html-java for AI

master a6f411d113ee cached
89 files
487.8 KB
157.1k tokens
83 symbols
1 requests
Download .txt
Showing preview only (529K chars total). Download the full file or copy to clipboard to get everything.
Repository: lmxdawn/vue-admin-html-java
Branch: master
Commit: a6f411d113ee
Files: 89
Total size: 487.8 KB

Directory structure:
gitextract_k7zx32wr/

├── .editorconfig
├── .eslintrc.js
├── .gitignore
├── .postcssrc.js
├── LICENSE
├── README.md
├── babel.config.js
├── jest.config.js
├── package.json
├── public/
│   ├── index-dev.html
│   ├── index.html
│   └── tinymce4.7.5/
│       ├── langs/
│       │   └── zh_CN.js
│       └── plugins/
│           ├── codesample/
│           │   └── css/
│           │       └── prism.css
│           └── visualblocks/
│               └── css/
│                   └── visualblocks.css
├── src/
│   ├── App.vue
│   ├── api/
│   │   ├── ad/
│   │   │   ├── ad.js
│   │   │   └── adSite.js
│   │   ├── auth/
│   │   │   ├── authAdmin.js
│   │   │   ├── authPermissionRule.js
│   │   │   ├── authRole.js
│   │   │   └── login.js
│   │   └── file/
│   │       ├── fileResource.js
│   │       ├── fileResourceTag.js
│   │       └── upload.js
│   ├── assets/
│   │   └── icons/
│   │       ├── demo.css
│   │       ├── demo_fontclass.html
│   │       ├── demo_symbol.html
│   │       ├── demo_unicode.html
│   │       ├── iconfont.css
│   │       └── iconfont.js
│   ├── components/
│   │   ├── File/
│   │   │   ├── Upload.vue
│   │   │   └── Upload1.vue
│   │   ├── HelloWorld.vue
│   │   ├── Tinymce/
│   │   │   ├── index.vue
│   │   │   ├── plugins.js
│   │   │   └── toolbar.js
│   │   └── common/
│   │       ├── FileResource.vue
│   │       └── IconSvg.vue
│   ├── config/
│   │   └── app.js
│   ├── constants/
│   │   └── .gitignore
│   ├── element.js
│   ├── filtres/
│   │   └── index.js
│   ├── main.js
│   ├── mock/
│   │   ├── ad.js
│   │   ├── adSite.js
│   │   ├── authAdmin.js
│   │   ├── authPermissionRule.js
│   │   ├── authRole.js
│   │   ├── fileResource.js
│   │   ├── fileResourceTag.js
│   │   ├── index.js
│   │   ├── login.js
│   │   └── upload.js
│   ├── role.js
│   ├── router/
│   │   └── index.js
│   ├── store/
│   │   ├── actions.js
│   │   ├── getters.js
│   │   ├── index.js
│   │   ├── modules/
│   │   │   ├── admin.js
│   │   │   └── app.js
│   │   └── mutation-types.js
│   ├── styles/
│   │   ├── base.scss
│   │   └── mixin.scss
│   ├── utils/
│   │   ├── auth.js
│   │   ├── axios.js
│   │   ├── haiZiToPinYin.js
│   │   └── store.js
│   └── views/
│       ├── adManage/
│       │   ├── ad.vue
│       │   └── adSite.vue
│       ├── components/
│       │   ├── tinymce-demo.vue
│       │   ├── upload-demo.vue
│       │   └── uploadList.vue
│       ├── error/
│       │   ├── err401.vue
│       │   ├── err404.vue
│       │   └── err500.vue
│       ├── home/
│       │   ├── SidebarItem.vue
│       │   ├── TabsView.vue
│       │   ├── index-3.0.1.vue
│       │   ├── index.vue
│       │   └── main.vue
│       ├── login/
│       │   └── index.vue
│       ├── profile/
│       │   └── index.vue
│       └── userManage/
│           └── admin/
│               ├── authAdmin.vue
│               ├── authPermissionRule.vue
│               ├── authRole.vue
│               └── router.vue
├── tests/
│   └── unit/
│       ├── .eslintrc.js
│       └── HelloWorld.spec.js
└── vue.config.js

================================================
FILE CONTENTS
================================================

================================================
FILE: .editorconfig
================================================
root = true

[*]
charset = utf-8
indent_style = space
indent_size = 4
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true


================================================
FILE: .eslintrc.js
================================================
module.exports = {
  root: true,
  env: {
    node: true
  },
  'extends': [
    'plugin:vue/essential',
    '@vue/prettier'
  ],
  plugins: [
    'vue'
  ],
  rules: {
    'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off',
    'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off'
  },
  parserOptions: {
    parser: 'babel-eslint'
  }
}

================================================
FILE: .gitignore
================================================
.DS_Store
node_modules
/dist
/stage

# local env files
.env.local
.env.*.local

# Log files
npm-debug.log*
yarn-debug.log*
yarn-error.log*

# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw*


================================================
FILE: .postcssrc.js
================================================
module.exports = {
  plugins: {
    autoprefixer: {}
  }
}

================================================
FILE: LICENSE
================================================
MIT License

Copyright (c) 2018 lmxdawn

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


================================================
FILE: README.md
================================================
<p align="center">
  <img width="320" src="https://lmxdawn.github.io/images/lmxdawn.png">
</p>

<p align="center">
  <a href="https://github.com/vuejs/vue">
    <img src="https://img.shields.io/badge/vue-2.5.16-brightgreen.svg" alt="vue">
  </a>
  <a href="https://cli.vuejs.org">
    <img src="https://img.shields.io/badge/vue-cli3.0.0-brightgreen.svg" alt="vue">
  </a>
  <a href="https://github.com/ElemeFE/element">
    <img src="https://img.shields.io/badge/element--ui-2.4.3-brightgreen.svg" alt="element-ui">
  </a>
</p>

# 前言


**项目JAVA前端地址:** <a href="https://github.com/lmxdawn/vue-admin-html-java" target="_blank">https://github.com/lmxdawn/vue-admin-html-java</a>

**项目JAVA后端地址:** <a href="https://github.com/lmxdawn/vue-admin-java" target="_blank">https://github.com/lmxdawn/vue-admin-java</a>


# 欢迎 star

# 整体效果

![donate](https://lmxdawn.github.io/images/show-how1.jpg)

# 目前 v3.0.0 版本 <a href="https://github.com/lmxdawn/vue-admin-html/tree/v1.0.0" target="_blank">点击前往 v1.0.0 版本</a>
## 更新日志
- [x] 更新vue-cli为3.0版本 <a href="https://segmentfault.com/a/1190000015133974">这里有篇文章</a>
- [x] 增加广告管理
- [x] 优化路由控制
- [x] 优化一些配置文件
- [x] 登录用户信息存储改为 cookie

# 一键操作包 <a href="https://pan.baidu.com/s/1gBPdt5IdDKhATNka1l1xOg" target="_blank">点击下载</a>

1. 集成环境搭建: windows 上面建议用 phpstudy ,其它环境自行百度
2. 把两个文件放到网站根目录
3. 把MySQL的root密码改为 root, 再新建数据库 vue-admin ,再把vue-admin.sql 文件导入到MySQL
4. 打开浏览器 输入 http://localhost/vue-admin-html/dist/index.html


# v3.0.0 踩过的坑
1. 这次更新后 vuex 开启严格模式后,出现浅拷贝的问题,就是变量引用的问题 <a href="https://segmentfault.com/q/1010000010025289/a-1020000015605407" target="_blank">这里有篇文章</a>
2. 还有就是路由导入某个文件时要在文件头部引入具体的某个文件,不用 resolve => require(['xx.vue'], resolve) 或者  () => import('xx.vue') 这种方式


# vue-admin-html

> Vue-cli3.0 + Element UI + ThinkPHP5.1 + RBAC权限 + 响应式的后台管理系统


## 权限演示

![donate](https://lmxdawn.github.io/images/rule.gif)

## 路由规则图示

>   路径: vue-admin-html/src/router/index.js

![donate](https://lmxdawn.github.io/images/router.png)

## env 配置说明

>   路径: vue-admin-html/.env.development

![donate](https://lmxdawn.github.io/images/env.png)

## 手机版演示

![donate](https://lmxdawn.github.io/images/phone.gif)

## 上传插件演示

![donate](https://lmxdawn.github.io/images/upload.gif)

## 添加 阿里巴巴矢量图演示

>   路径: vue-admin-html/src/assets/icons 注意 vue-admin-html/src/assets/icons/iconfont.js 头部需要加 ```/* eslint-disable */``` 去掉 eslint 检查 

1.第一步 选好一个图标加入到购物车 -> 把购物车的添加都项目 -> 下载项目到本地

![donate](https://lmxdawn.github.io/images/icon1.gif)

2.第二步 解压下载好的文件 -> 复制到 src/assets/icons , 覆盖掉 -> 增加 iconfont.js 的 eslint 注释

![donate](https://lmxdawn.github.io/images/icon2.gif)




## 功能 ##
- [x] 管理员登录
- [x] 登录
- [x] 修改密码
- [x] 角色管理
- [x] 权限管理
- [x] 401/404错误页面
- [x] 动态面包屑
- [x] 动态侧边栏
- [x] 广告管理


## 安装步骤 ##

	git clone https://github.com/lmxdawn/vue-admin-html.git      // 把模板下载到本地
	cd vue-admin-html    // 进入模板目录
	npm install         // 安装项目依赖,等待安装完成之后
	
    构建时三种环境可选,解决不同环境来回切换配置的痛楚(serve:本地测试,stage:预上线,build:生产环境)
    
## 本地开发 ##

	// 开启服务器,浏览器访问 http://localhost:8080
	npm run serve

## 构建预上线 ##

	// 执行构建命令,生成的stage文件夹放在服务器下即可访问
	npm run stage
	
## 构建生产 ##

	// 执行构建命令,生成的dist文件夹放在服务器下即可访问
	npm run build
	
# 项目目录介绍
```markdown
├── LICENSE                                 // 版权许可文件
├── README.md                               // 文档
├── babel.config.js                         // babel 插件配置                
├── jest.config.js                          // jest 测试配置   
├── package-lock.json                       // 锁定当前安装的扩展包的版本
├── package.json                            // 声明引用了哪些扩展包
├── public                                  // 公共文件
│   ├── favicon.ico                         // 图标
│   └── index.html                          // 入口文件
├── src                                     // src 主要代码文件
│   ├── App.vue                             // Vue 入口文件
│   ├── api                                 // API 接口逻辑文件
│   │   ├── ad                              // 广告相关
│   │   │   ├── ad.js                       // 广告
│   │   │   └── adSite.js                   // 广告位
│   │   ├── auth                            // 权限相关
│   │   │   ├── authAdmin.js                // 权限用户
│   │   │   ├── authPermissionRule.js       // 权限
│   │   │   └── authRole.js                 // 角色
│   │   ├── fileResource.js                 // 文件资源
│   │   ├── fileResourceTag.js              // 文件资源的标签
│   │   ├── login.js                        // 登录相关
│   │   └── upload.js                       // 旧版本上传插件的接口
│   ├── assets                              // 资源文件
│   │   ├── icons                           // 图标(使用的是 阿里巴巴矢量图标库)
│   │   │   ├── demo.css                    // demo 样式
│   │   │   ├── demo_fontclass.html         // demo HTML
│   │   │   ├── demo_symbol.html            // demo
│   │   │   ├── demo_unicode.html           // demo
│   │   │   ├── iconfont.css                // css
│   │   │   ├── iconfont.eot                // 
│   │   │   ├── iconfont.js                 // js 文件
│   │   │   ├── iconfont.svg                // svg 文件
│   │   │   ├── iconfont.ttf                // 字体文件
│   │   │   └── iconfont.woff               // 字体文件
│   │   ├── image                           // 资源图片文件
│   │   │   └── file_type_icon.png          // 文件图标文件
│   │   └── logo.png                        // logo
│   ├── components                          // 组件目录
│   │   ├── HelloWorld.vue                  // 测试文件
│   │   └── common                          // 公共组件
│   │       ├── FileResource.vue            // 上传资源的组件
│   │       ├── IconSvg.vue                 // 图标组件
│   │       └── UploadFile.vue              // 旧版上传文件的组件
│   ├── config                              // 自定义的配置
│   │   └── app.js                          // 项目的配置
│   ├── constants                           // 项目的常量目录
│   ├── element.js                          // 引入 element-ui 的js文件 (这个也可直接写在 main.js 里面)
│   ├── filtres                             // 过滤器目录
│   │   └── index.js                        // 全局过滤器
│   ├── main.js                             // 主入口
│   ├── mock                                // 模拟数据
│   │   ├── authAdmin.js                    // 权限用户的数据
│   │   ├── authPermissionRule.js           // 权限的数据
│   │   ├── authRole.js                     // 角色数据
│   │   ├── fileResource.js                 // 上传资源的数据
│   │   ├── fileResourceTag.js              // 上传资源的分组数据
│   │   ├── index.js                        // 引入 mockjs 的文件
│   │   ├── login.js                        // 登录的数据
│   │   └── upload.js                       // 旧版上传文件的数据
│   ├── role.js                             // 动态上传 router 路由的主要文件, 并且初始化权限, 检测权限
│   ├── router                              // 路由相关目录
│   │   └── index.js                        // 路由主文件
│   ├── store                               // vuex 状态 目录
│   │   ├── actions.js                      // Action
│   │   ├── getters.js                      // Getter
│   │   ├── index.js                        // 入口
│   │   ├── modules                         // 模块
│   │   │   ├── admin.js                    // Admin 用户相关
│   │   │   └── app.js                      // APP 项目相关
│   │   └── mutation-types.js               // Mutation
│   ├── styles                              // 样式目录
│   │   ├── base.scss                       // 基础样式
│   │   └── mixin.scss                      // 基础方法的样式
│   ├── utils                               // 工具目录
│   │   ├── auth.js                         // 权限工具
│   │   ├── axios.js                        // request 请求工具
│   │   ├── haiZiToPinYin.js                // 汉字转拼音的工具
│   │   └── store.js                        // 存放信息的工具
│   └── views                               // 页面目录
│       ├── adManage                        // 广告管理
│       │   ├── ad.vue                      // 广告
│       │   └── adSite.vue                  // 广告位
│       ├── components                      // 应用演示
│       │   └── uploadList.vue              // 上传插件
│       ├── error                           // 错误页面目录
│       │   ├── err401.vue                  // 401
│       │   ├── err404.vue                  // 404页面
│       │   └── err500.vue                  // 500页面
│       ├── home                            // 首页目录
│       │   ├── SidebarItem.vue             // 左边栏
│       │   ├── TabsView.vue                // 顶部tabs
│       │   ├── index.vue                   // 入口
│       │   └── main.vue                    // 前言
│       ├── login                           // 登录相关
│       │   └── index.vue                   // 登录首页
│       ├── profile                         // 测试
│       │   └── index.vue                   
│       └── userManage                      // 用户相关
│           └── admin                       // 管理员相关
│               ├── authAdmin.vue           // 权限用户
│               ├── authPermissionRule.vue  // 权限
│               ├── authRole.vue            // 角色
│               └── router.vue              // 路由文件
├── tests                                   // 测试
│   └── unit                                
│       └── HelloWorld.spec.js              
└── vue.config.js                           // 构建项目的配置文件
```

# Online Demo
 (建议使用最新版Chrome浏览器)
[在线 Demo](https://lmxdawn.github.io/vue-admin)

# Donate
鼓励鼓励鼓励,重要的事情说三遍 
![donate](https://lmxdawn.github.io/images/pay.png)


# License

[MIT](https://github.com/lmxdawn/vue-admin-html/blob/master/LICENSE)

Copyright (c) 2018 lmxdawn



================================================
FILE: babel.config.js
================================================
module.exports = {
    presets: ["@vue/app"]
};


================================================
FILE: jest.config.js
================================================
module.exports = {
    moduleFileExtensions: ["js", "jsx", "json", "vue"],
    transform: {
        "^.+\\.vue$": "vue-jest",
        ".+\\.(css|styl|less|sass|scss|png|jpg|ttf|woff|woff2)$":
            "jest-transform-stub",
        "^.+\\.jsx?$": "babel-jest"
    },
    moduleNameMapper: {
        "^@/(.*)$": "<rootDir>/src/$1"
    },
    snapshotSerializers: ["jest-serializer-vue"],
    testMatch: [
        "<rootDir>/(tests/unit/**/*.spec.(js|jsx|ts|tsx)|**/__tests__/*.(js|jsx|ts|tsx))"
    ]
};


================================================
FILE: package.json
================================================
{
  "name": "my-project",
  "version": "0.1.0",
  "private": true,
  "scripts": {
    "serve": "vue-cli-service serve",
    "stage": "vue-cli-service build --mode stage",
    "build": "vue-cli-service build",
    "lint": "vue-cli-service lint",
    "test:unit": "vue-cli-service test:unit"
  },
  "dependencies": {
    "axios": "^0.18.0",
    "babel-polyfill": "^6.26.0",
    "element-ui": "^2.8.2",
    "js-cookie": "^2.2.0",
    "mockjs": "^1.0.1-beta3",
    "nprogress": "^0.2.0",
    "vue": "^2.5.16",
    "vue-router": "^3.0.1",
    "vuedraggable": "^2.17.0",
    "vuex": "^3.0.1"
  },
  "devDependencies": {
    "@vue/cli-plugin-babel": "^3.0.0-beta.15",
    "@vue/cli-plugin-eslint": "^3.0.0-beta.15",
    "@vue/cli-plugin-unit-jest": "^3.0.0-beta.15",
    "@vue/cli-service": "^3.0.0-beta.15",
    "@vue/eslint-config-prettier": "^3.0.0-rc.3",
    "@vue/test-utils": "^1.0.0-beta.16",
    "babel-core": "7.0.0-bridge.0",
    "babel-jest": "^23.0.1",
    "node-sass": "^4.9.0",
    "sass-loader": "^7.0.1",
    "vue-template-compiler": "^2.5.16"
  },
  "browserslist": [
    "> 1%",
    "last 2 versions",
    "not ie <= 8"
  ]
}


================================================
FILE: public/index-dev.html
================================================
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <link rel="icon" href="<%= BASE_URL %>favicon.ico">
    <title>VUE后台管理系统</title>
</head>
<body>
<div id="app"></div>
<!-- built files will be auto injected -->
</body>

<script src="tinymce4.7.5/tinymce.min.js"></script>

</html>


================================================
FILE: public/index.html
================================================
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <link rel="icon" href="<%= BASE_URL %>favicon.ico">
    <title>VUE后台管理系统</title>
    <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
</head>
<body>
<div id="app"></div>
<!-- built files will be auto injected -->
<script src="tinymce4.7.5/tinymce.min.js"></script>
<script src="https://unpkg.com/vue@2.5.16/dist/vue.runtime.min.js"></script>
<script src="https://unpkg.com/vuex@3.0.1/dist/vuex.min.js"></script>
<script src="https://unpkg.com/vue-router@3.0.1/dist/vue-router.min.js"></script>
<script src="https://unpkg.com/element-ui/lib/index.js"></script>

<script>
    (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
            (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
        m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
    })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');

    ga('create', 'UA-110990780-1', 'auto');
    ga('send', 'pageview');

    window.addEventListener('hashchange', function () {
        ga('set', 'page', window.location.href);
        ga('send', 'pageview');
    });
</script>

</body>

</html>


================================================
FILE: public/tinymce4.7.5/langs/zh_CN.js
================================================
tinymce.addI18n('zh_CN',{
"Cut": "\u526a\u5207",
"Heading 5": "\u6807\u98985",
"Header 2": "\u6807\u98982",
"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",
"Heading 4": "\u6807\u98984",
"Div": "Div\u533a\u5757",
"Heading 2": "\u6807\u98982",
"Paste": "\u7c98\u8d34",
"Close": "\u5173\u95ed",
"Font Family": "\u5b57\u4f53",
"Pre": "\u9884\u683c\u5f0f\u6587\u672c",
"Align right": "\u53f3\u5bf9\u9f50",
"New document": "\u65b0\u6587\u6863",
"Blockquote": "\u5f15\u7528",
"Numbered list": "\u7f16\u53f7\u5217\u8868",
"Heading 1": "\u6807\u98981",
"Headings": "\u6807\u9898",
"Increase indent": "\u589e\u52a0\u7f29\u8fdb",
"Formats": "\u683c\u5f0f",
"Headers": "\u6807\u9898",
"Select all": "\u5168\u9009",
"Header 3": "\u6807\u98983",
"Blocks": "\u533a\u5757",
"Undo": "\u64a4\u6d88",
"Strikethrough": "\u5220\u9664\u7ebf",
"Bullet list": "\u9879\u76ee\u7b26\u53f7",
"Header 1": "\u6807\u98981",
"Superscript": "\u4e0a\u6807",
"Clear formatting": "\u6e05\u9664\u683c\u5f0f",
"Font Sizes": "\u5b57\u53f7",
"Subscript": "\u4e0b\u6807",
"Header 6": "\u6807\u98986",
"Redo": "\u91cd\u590d",
"Paragraph": "\u6bb5\u843d",
"Ok": "\u786e\u5b9a",
"Bold": "\u7c97\u4f53",
"Code": "\u4ee3\u7801",
"Italic": "\u659c\u4f53",
"Align center": "\u5c45\u4e2d",
"Header 5": "\u6807\u98985",
"Heading 6": "\u6807\u98986",
"Heading 3": "\u6807\u98983",
"Decrease indent": "\u51cf\u5c11\u7f29\u8fdb",
"Header 4": "\u6807\u98984",
"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",
"Underline": "\u4e0b\u5212\u7ebf",
"Cancel": "\u53d6\u6d88",
"Justify": "\u4e24\u7aef\u5bf9\u9f50",
"Inline": "\u6587\u672c",
"Copy": "\u590d\u5236",
"Align left": "\u5de6\u5bf9\u9f50",
"Visual aids": "\u7f51\u683c\u7ebf",
"Lower Greek": "\u5c0f\u5199\u5e0c\u814a\u5b57\u6bcd",
"Square": "\u65b9\u5757",
"Default": "\u9ed8\u8ba4",
"Lower Alpha": "\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd",
"Circle": "\u7a7a\u5fc3\u5706",
"Disc": "\u5b9e\u5fc3\u5706",
"Upper Alpha": "\u5927\u5199\u82f1\u6587\u5b57\u6bcd",
"Upper Roman": "\u5927\u5199\u7f57\u9a6c\u5b57\u6bcd",
"Lower Roman": "\u5c0f\u5199\u7f57\u9a6c\u5b57\u6bcd",
"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",
"Name": "\u540d\u79f0",
"Anchor": "\u951a\u70b9",
"Id": "\u6807\u8bc6\u7b26",
"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",
"Restore last draft": "\u6062\u590d\u4e0a\u6b21\u7684\u8349\u7a3f",
"Special character": "\u7279\u6b8a\u7b26\u53f7",
"Source code": "\u6e90\u4ee3\u7801",
"Language": "\u8bed\u8a00",
"Insert\/Edit code sample": "\u63d2\u5165\/\u7f16\u8f91\u4ee3\u7801\u793a\u4f8b",
"B": "B",
"R": "R",
"G": "G",
"Color": "\u989c\u8272",
"Right to left": "\u4ece\u53f3\u5230\u5de6",
"Left to right": "\u4ece\u5de6\u5230\u53f3",
"Emoticons": "\u8868\u60c5",
"Robots": "\u673a\u5668\u4eba",
"Document properties": "\u6587\u6863\u5c5e\u6027",
"Title": "\u6807\u9898",
"Keywords": "\u5173\u952e\u8bcd",
"Encoding": "\u7f16\u7801",
"Description": "\u63cf\u8ff0",
"Author": "\u4f5c\u8005",
"Fullscreen": "\u5168\u5c4f",
"Horizontal line": "\u6c34\u5e73\u5206\u5272\u7ebf",
"Horizontal space": "\u6c34\u5e73\u8fb9\u8ddd",
"Insert\/edit image": "\u63d2\u5165\/\u7f16\u8f91\u56fe\u7247",
"General": "\u666e\u901a",
"Advanced": "\u9ad8\u7ea7",
"Source": "\u5730\u5740",
"Border": "\u8fb9\u6846",
"Constrain proportions": "\u4fdd\u6301\u7eb5\u6a2a\u6bd4",
"Vertical space": "\u5782\u76f4\u8fb9\u8ddd",
"Image description": "\u56fe\u7247\u63cf\u8ff0",
"Style": "\u6837\u5f0f",
"Dimensions": "\u5927\u5c0f",
"Insert image": "\u63d2\u5165\u56fe\u7247",
"Image": "\u56fe\u7247",
"Zoom in": "\u653e\u5927",
"Contrast": "\u5bf9\u6bd4\u5ea6",
"Back": "\u540e\u9000",
"Gamma": "\u4f3d\u9a6c\u503c",
"Flip horizontally": "\u6c34\u5e73\u7ffb\u8f6c",
"Resize": "\u8c03\u6574\u5927\u5c0f",
"Sharpen": "\u9510\u5316",
"Zoom out": "\u7f29\u5c0f",
"Image options": "\u56fe\u7247\u9009\u9879",
"Apply": "\u5e94\u7528",
"Brightness": "\u4eae\u5ea6",
"Rotate clockwise": "\u987a\u65f6\u9488\u65cb\u8f6c",
"Rotate counterclockwise": "\u9006\u65f6\u9488\u65cb\u8f6c",
"Edit image": "\u7f16\u8f91\u56fe\u7247",
"Color levels": "\u989c\u8272\u5c42\u6b21",
"Crop": "\u88c1\u526a",
"Orientation": "\u65b9\u5411",
"Flip vertically": "\u5782\u76f4\u7ffb\u8f6c",
"Invert": "\u53cd\u8f6c",
"Date\/time": "\u65e5\u671f\/\u65f6\u95f4",
"Insert date\/time": "\u63d2\u5165\u65e5\u671f\/\u65f6\u95f4",
"Remove link": "\u5220\u9664\u94fe\u63a5",
"Url": "\u5730\u5740",
"Text to display": "\u663e\u793a\u6587\u5b57",
"Anchors": "\u951a\u70b9",
"Insert link": "\u63d2\u5165\u94fe\u63a5",
"Link": "\u94fe\u63a5",
"New window": "\u5728\u65b0\u7a97\u53e3\u6253\u5f00",
"None": "\u65e0",
"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",
"Paste or type a link": "\u7c98\u8d34\u6216\u8f93\u5165\u94fe\u63a5",
"Target": "\u6253\u5f00\u65b9\u5f0f",
"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",
"Insert\/edit link": "\u63d2\u5165\/\u7f16\u8f91\u94fe\u63a5",
"Insert\/edit video": "\u63d2\u5165\/\u7f16\u8f91\u89c6\u9891",
"Media": "\u5a92\u4f53",
"Alternative source": "\u955c\u50cf",
"Paste your embed code below:": "\u5c06\u5185\u5d4c\u4ee3\u7801\u7c98\u8d34\u5728\u4e0b\u9762:",
"Insert video": "\u63d2\u5165\u89c6\u9891",
"Poster": "\u5c01\u9762",
"Insert\/edit media": "\u63d2\u5165\/\u7f16\u8f91\u5a92\u4f53",
"Embed": "\u5185\u5d4c",
"Nonbreaking space": "\u4e0d\u95f4\u65ad\u7a7a\u683c",
"Page break": "\u5206\u9875\u7b26",
"Paste as text": "\u7c98\u8d34\u4e3a\u6587\u672c",
"Preview": "\u9884\u89c8",
"Print": "\u6253\u5370",
"Save": "\u4fdd\u5b58",
"Could not find the specified string.": "\u672a\u627e\u5230\u641c\u7d22\u5185\u5bb9.",
"Replace": "\u66ff\u6362",
"Next": "\u4e0b\u4e00\u4e2a",
"Whole words": "\u5168\u5b57\u5339\u914d",
"Find and replace": "\u67e5\u627e\u548c\u66ff\u6362",
"Replace with": "\u66ff\u6362\u4e3a",
"Find": "\u67e5\u627e",
"Replace all": "\u5168\u90e8\u66ff\u6362",
"Match case": "\u533a\u5206\u5927\u5c0f\u5199",
"Prev": "\u4e0a\u4e00\u4e2a",
"Spellcheck": "\u62fc\u5199\u68c0\u67e5",
"Finish": "\u5b8c\u6210",
"Ignore all": "\u5168\u90e8\u5ffd\u7565",
"Ignore": "\u5ffd\u7565",
"Add to Dictionary": "\u6dfb\u52a0\u5230\u5b57\u5178",
"Insert row before": "\u5728\u4e0a\u65b9\u63d2\u5165",
"Rows": "\u884c",
"Height": "\u9ad8",
"Paste row after": "\u7c98\u8d34\u5230\u4e0b\u65b9",
"Alignment": "\u5bf9\u9f50\u65b9\u5f0f",
"Border color": "\u8fb9\u6846\u989c\u8272",
"Column group": "\u5217\u7ec4",
"Row": "\u884c",
"Insert column before": "\u5728\u5de6\u4fa7\u63d2\u5165",
"Split cell": "\u62c6\u5206\u5355\u5143\u683c",
"Cell padding": "\u5355\u5143\u683c\u5185\u8fb9\u8ddd",
"Cell spacing": "\u5355\u5143\u683c\u5916\u95f4\u8ddd",
"Row type": "\u884c\u7c7b\u578b",
"Insert table": "\u63d2\u5165\u8868\u683c",
"Body": "\u8868\u4f53",
"Caption": "\u6807\u9898",
"Footer": "\u8868\u5c3e",
"Delete row": "\u5220\u9664\u884c",
"Paste row before": "\u7c98\u8d34\u5230\u4e0a\u65b9",
"Scope": "\u8303\u56f4",
"Delete table": "\u5220\u9664\u8868\u683c",
"H Align": "\u6c34\u5e73\u5bf9\u9f50",
"Top": "\u9876\u90e8\u5bf9\u9f50",
"Header cell": "\u8868\u5934\u5355\u5143\u683c",
"Column": "\u5217",
"Row group": "\u884c\u7ec4",
"Cell": "\u5355\u5143\u683c",
"Middle": "\u5782\u76f4\u5c45\u4e2d",
"Cell type": "\u5355\u5143\u683c\u7c7b\u578b",
"Copy row": "\u590d\u5236\u884c",
"Row properties": "\u884c\u5c5e\u6027",
"Table properties": "\u8868\u683c\u5c5e\u6027",
"Bottom": "\u5e95\u90e8\u5bf9\u9f50",
"V Align": "\u5782\u76f4\u5bf9\u9f50",
"Header": "\u8868\u5934",
"Right": "\u53f3\u5bf9\u9f50",
"Insert column after": "\u5728\u53f3\u4fa7\u63d2\u5165",
"Cols": "\u5217",
"Insert row after": "\u5728\u4e0b\u65b9\u63d2\u5165",
"Width": "\u5bbd",
"Cell properties": "\u5355\u5143\u683c\u5c5e\u6027",
"Left": "\u5de6\u5bf9\u9f50",
"Cut row": "\u526a\u5207\u884c",
"Delete column": "\u5220\u9664\u5217",
"Center": "\u5c45\u4e2d",
"Merge cells": "\u5408\u5e76\u5355\u5143\u683c",
"Insert template": "\u63d2\u5165\u6a21\u677f",
"Templates": "\u6a21\u677f",
"Background color": "\u80cc\u666f\u8272",
"Custom...": "\u81ea\u5b9a\u4e49...",
"Custom color": "\u81ea\u5b9a\u4e49\u989c\u8272",
"No color": "\u65e0",
"Text color": "\u6587\u5b57\u989c\u8272",
"Table of Contents": "\u5185\u5bb9\u5217\u8868",
"Show blocks": "\u663e\u793a\u533a\u5757\u8fb9\u6846",
"Show invisible characters": "\u663e\u793a\u4e0d\u53ef\u89c1\u5b57\u7b26",
"Words: {0}": "\u5b57\u6570\uff1a{0}",
"Insert": "\u63d2\u5165",
"File": "\u6587\u4ef6",
"Edit": "\u7f16\u8f91",
"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",
"Tools": "\u5de5\u5177",
"View": "\u89c6\u56fe",
"Table": "\u8868\u683c",
"Format": "\u683c\u5f0f"
});

================================================
FILE: public/tinymce4.7.5/plugins/codesample/css/prism.css
================================================
/* http://prismjs.com/download.html?themes=prism&languages=markup+css+clike+javascript */
/**
 * prism.js default theme for JavaScript, CSS and HTML
 * Based on dabblet (http://dabblet.com)
 * @author Lea Verou
 */

code[class*="language-"],
pre[class*="language-"] {
  color: black;
  text-shadow: 0 1px white;
  font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
  direction: ltr;
  text-align: left;
  white-space: pre;
  word-spacing: normal;
  word-break: normal;
  word-wrap: normal;
  line-height: 1.5;

  -moz-tab-size: 4;
  -o-tab-size: 4;
  tab-size: 4;

  -webkit-hyphens: none;
  -moz-hyphens: none;
  -ms-hyphens: none;
  hyphens: none;
}

pre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection,
code[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection {
  text-shadow: none;
  background: #b3d4fc;
}

pre[class*="language-"]::selection, pre[class*="language-"] ::selection,
code[class*="language-"]::selection, code[class*="language-"] ::selection {
  text-shadow: none;
  background: #b3d4fc;
}

@media print {
  code[class*="language-"],
  pre[class*="language-"] {
    text-shadow: none;
  }
}

/* Code blocks */
pre[class*="language-"] {
  padding: 1em;
  margin: .5em 0;
  overflow: auto;
}

:not(pre) > code[class*="language-"],
pre[class*="language-"] {
  background: #f5f2f0;
}

/* Inline code */
:not(pre) > code[class*="language-"] {
  padding: .1em;
  border-radius: .3em;
}

.token.comment,
.token.prolog,
.token.doctype,
.token.cdata {
  color: slategray;
}

.token.punctuation {
  color: #999;
}

.namespace {
  opacity: .7;
}

.token.property,
.token.tag,
.token.boolean,
.token.number,
.token.constant,
.token.symbol,
.token.deleted {
  color: #905;
}

.token.selector,
.token.attr-name,
.token.string,
.token.char,
.token.builtin,
.token.inserted {
  color: #690;
}

.token.operator,
.token.entity,
.token.url,
.language-css .token.string,
.style .token.string {
  color: #a67f59;
  background: hsla(0, 0%, 100%, .5);
}

.token.atrule,
.token.attr-value,
.token.keyword {
  color: #07a;
}

.token.function {
  color: #DD4A68;
}

.token.regex,
.token.important,
.token.variable {
  color: #e90;
}

.token.important,
.token.bold {
  font-weight: bold;
}
.token.italic {
  font-style: italic;
}

.token.entity {
  cursor: help;
}



================================================
FILE: public/tinymce4.7.5/plugins/visualblocks/css/visualblocks.css
================================================
.mce-visualblocks p {
  padding-top: 10px;
  border: 1px dashed #BBB;
  margin-left: 3px;
  background-image: url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7);
  background-repeat: no-repeat;
}

.mce-visualblocks h1 {
  padding-top: 10px;
  border: 1px dashed #BBB;
  margin-left: 3px;
  background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==);
  background-repeat: no-repeat;
}

.mce-visualblocks h2 {
  padding-top: 10px;
  border: 1px dashed #BBB;
  margin-left: 3px;
  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==);
  background-repeat: no-repeat;
}

.mce-visualblocks h3 {
  padding-top: 10px;
  border: 1px dashed #BBB;
  margin-left: 3px;
  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7);
  background-repeat: no-repeat;
}

.mce-visualblocks h4 {
  padding-top: 10px;
  border: 1px dashed #BBB;
  margin-left: 3px;
  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==);
  background-repeat: no-repeat;
}

.mce-visualblocks h5 {
  padding-top: 10px;
  border: 1px dashed #BBB;
  margin-left: 3px;
  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==);
  background-repeat: no-repeat;
}

.mce-visualblocks h6 {
  padding-top: 10px;
  border: 1px dashed #BBB;
  margin-left: 3px;
  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==);
  background-repeat: no-repeat;
}

.mce-visualblocks div:not([data-mce-bogus]) {
  padding-top: 10px;
  border: 1px dashed #BBB;
  margin-left: 3px;
  background-image: url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7);
  background-repeat: no-repeat;
}

.mce-visualblocks section {
  padding-top: 10px;
  border: 1px dashed #BBB;
  margin: 0 0 1em 3px;
  background-image: url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=);
  background-repeat: no-repeat;
}

.mce-visualblocks article {
  padding-top: 10px;
  border: 1px dashed #BBB;
  margin: 0 0 1em 3px;
  background-image: url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7);
  background-repeat: no-repeat;
}

.mce-visualblocks blockquote {
  padding-top: 10px;
  border: 1px dashed #BBB;
  background-image: url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7);
  background-repeat: no-repeat;
}

.mce-visualblocks address {
  padding-top: 10px;
  border: 1px dashed #BBB;
  margin: 0 0 1em 3px;
  background-image: url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=);
  background-repeat: no-repeat;
}

.mce-visualblocks pre {
  padding-top: 10px;
  border: 1px dashed #BBB;
  margin-left: 3px;
  background-image: url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==);
  background-repeat: no-repeat;
}

.mce-visualblocks figure {
  padding-top: 10px;
  border: 1px dashed #BBB;
  margin: 0 0 1em 3px;
  background-image: url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7);
  background-repeat: no-repeat;
}

.mce-visualblocks hgroup {
  padding-top: 10px;
  border: 1px dashed #BBB;
  margin: 0 0 1em 3px;
  background-image: url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7);
  background-repeat: no-repeat;
}

.mce-visualblocks aside {
  padding-top: 10px;
  border: 1px dashed #BBB;
  margin: 0 0 1em 3px;
  background-image: url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=);
  background-repeat: no-repeat;
}

.mce-visualblocks figcaption {
  border: 1px dashed #BBB;
}

.mce-visualblocks ul {
  padding-top: 10px;
  border: 1px dashed #BBB;
  margin: 0 0 1em 3px;
  background-image: url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==);
  background-repeat: no-repeat;
}

.mce-visualblocks ol {
  padding-top: 10px;
  border: 1px dashed #BBB;
  margin: 0 0 1em 3px;
  background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==);
  background-repeat: no-repeat;
}

.mce-visualblocks dl {
  padding-top: 10px;
  border: 1px dashed #BBB;
  margin: 0 0 1em 3px;
  background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==);
  background-repeat: no-repeat;
}


================================================
FILE: src/App.vue
================================================
<template>
    <div id="app">
        <router-view/>
    </div>
</template>

<script>
export default {
    name: "app"
};
</script>

<style type="text/scss" lang="scss">
@import "./styles/base";
html {
    height: 100%;
}
body {
    height: 100%;
    overflow: hidden;
}
#app {
    height: 100%;
}
</style>


================================================
FILE: src/api/ad/ad.js
================================================
/**
 * Created by lk on 17/6/4.
 */
import axios from "../../utils/axios";

// 谁最懂我相关

// 列表
export function adList(query) {
    return axios({
        url: "/admin/ad/ad/index",
        method: "get",
        params: query
    });
}

// 保存
export function adSave(data, formName, method = "post") {
    var url = formName === "add" ? "/admin/ad/ad/save" : "/admin/ad/ad/edit";
    return axios({
        url: url,
        method: method,
        data: data
    });
}

// 删除
export function adDelete(data) {
    return axios({
        url: "/admin/ad/ad/delete",
        method: "post",
        data: data
    });
}


================================================
FILE: src/api/ad/adSite.js
================================================
/**
 * Created by lk on 17/6/4.
 */
import axios from "../../utils/axios";

// 谁最懂我相关

// 列表
export function adSiteList(query) {
    return axios({
        url: "/admin/ad/site/index",
        method: "get",
        params: query
    });
}

// 广告列表
export function adSiteAdList(data) {
    return axios({
        url: "/admin/ad/site/adList",
        method: "post",
        data: data
    });
}

// 保存
export function adSiteSave(data, formName, method = "post") {
    var url =
        formName === "add" ? "/admin/ad/site/save" : "/admin/ad/site/edit";
    return axios({
        url: url,
        method: method,
        data: data
    });
}

// 删除
export function adSiteDelete(data) {
    return axios({
        url: "/admin/ad/site/delete",
        method: "post",
        data: data
    });
}


================================================
FILE: src/api/auth/authAdmin.js
================================================
/**
 * Created by lk on 17/6/4.
 */
import axios from "../../utils/axios";

// 获取列表
export function authAdminList(query) {
    return axios({
        url: "/admin/auth/admin/index",
        method: "get",
        params: query
    });
}

// 获取角色列表
export function authAdminRoleList(query) {
    return axios({
        url: "/admin/auth/admin/roleList",
        method: "get",
        params: query
    });
}

// 保存
export function authAdminSave(data, formName, method = "post") {
    let url =
        formName === "add"
            ? "/admin/auth/admin/save"
            : "/admin/auth/admin/edit";
    return axios({
        url: url,
        method: method,
        data: data
    });
}

// 删除管理员
export function authAdminDelete(data) {
    return axios({
        url: "/admin/auth/admin/delete",
        method: "post",
        data: data
    });
}


================================================
FILE: src/api/auth/authPermissionRule.js
================================================
/**
 * Created by lk on 17/6/4.
 */
import axios from "../../utils/axios";

// 权限管理

// 获取列表
export function authPermissionRuleList(query) {
    return axios({
        url: "/admin/auth/permission_rule/index",
        method: "get",
        params: query
    });
}

// 保存
export function authPermissionRuleSave(data, formName, method = "post") {
    let url =
        formName !== "edit"
            ? "/admin/auth/permission_rule/save"
            : "/admin/auth/permission_rule/edit";
    return axios({
        url: url,
        method: method,
        data: data
    });
}

// 删除
export function authPermissionRuleDelete(data) {
    return axios({
        url: "/admin/auth/permission_rule/delete",
        method: "post",
        data: data
    });
}


================================================
FILE: src/api/auth/authRole.js
================================================
/**
 * Created by lk on 17/6/4.
 */
import axios from "../../utils/axios";

// 获取列表
export function authRoleList(query) {
    return axios({
        url: "/admin/auth/role/index",
        method: "get",
        params: query
    });
}

// 编辑
export function authRoleAuthList(query) {
    return axios({
        url: "/admin/auth/role/authList",
        method: "get",
        params: query
    });
}

// 添加
export function authRoleAuth(data) {
    return axios({
        url: "/admin/auth/role/auth",
        method: "post",
        data: data
    });
}

// 保存
export function authRoleSave(data, formName, method = "post") {
    let url =
        formName === "add" ? "/admin/auth/role/save" : "/admin/auth/role/edit";
    return axios({
        url: url,
        method: method,
        data: data
    });
}

// 删除
export function authRoleDelete(data) {
    return axios({
        url: "/admin/auth/role/delete",
        method: "post",
        data: data
    });
}


================================================
FILE: src/api/auth/login.js
================================================
/**
 * Created by lk on 17/6/4.
 */
import axios from "../../utils/axios";
// 获取信息
export function userInfo(id, token) {
    return axios({
        url: "/admin/auth/login/userInfo",
        method: "get",
        params: { id, token }
    });
}

export function loginName(userName, pwd) {
    return axios({
        url: "/admin/auth/login/index",
        method: "post",
        data: { userName, pwd }
    });
}

export function logout(uid, token) {
    return axios({
        url: "/admin/auth/login/out",
        method: "post",
        data: { uid, token }
    });
}

export function password(data) {
    return axios({
        url: "/admin/auth/login/password",
        method: "post",
        data: data
    });
}


================================================
FILE: src/api/file/fileResource.js
================================================
/**
 * 资源管理相关
 */
import axios from "../../utils/axios";

// 列表
export function fileResourceList(query) {
    return axios({
        url: "/admin/file/resource/index",
        method: "get",
        params: query
    });
}
// 添加
export function fileResourceAdd(data) {
    return axios({
        url: "/admin/file/resource/add",
        method: "POST",
        data: data
    });
}


================================================
FILE: src/api/file/fileResourceTag.js
================================================
/**
 * 资源分组相关
 */
import axios from "../../utils/axios";

// 列表
export function fileResourceTagList(query) {
    return axios({
        url: "/admin/file/resource_tag/index",
        method: "get",
        params: query
    });
}

// 创建分组
export function fileResourceTagAdd(data) {
    return axios({
        url: "/admin/file/resource_tag/add",
        method: "post",
        data: data
    });
}


================================================
FILE: src/api/file/upload.js
================================================
/**
 * 上传相关
 */
import axios from "../../utils/axios";

// 获取七牛上传 upToken
export function qiuNiuUpToken(query) {
    return axios({
        url: "/admin/file/upload/qiuNiuUpToken",
        method: "get",
        params: query
    });
}

// 上传文件
export function createFile(url, formdata) {
    return axios({
        url: url,
        method: "post",
        data: formdata
    });
}


================================================
FILE: src/assets/icons/demo.css
================================================
*{margin: 0;padding: 0;list-style: none;}
/*
KISSY CSS Reset
理念:1. reset 的目的不是清除浏览器的默认样式,这仅是部分工作。清除和重置是紧密不可分的。
2. reset 的目的不是让默认样式在所有浏览器下一致,而是减少默认样式有可能带来的问题。
3. reset 期望提供一套普适通用的基础样式。但没有银弹,推荐根据具体需求,裁剪和修改后再使用。
特色:1. 适应中文;2. 基于最新主流浏览器。
维护:玉伯<lifesinger@gmail.com>, 正淳<ragecarrier@gmail.com>
 */

/** 清除内外边距 **/
body, h1, h2, h3, h4, h5, h6, hr, p, blockquote, /* structural elements 结构元素 */
dl, dt, dd, ul, ol, li, /* list elements 列表元素 */
pre, /* text formatting elements 文本格式元素 */
form, fieldset, legend, button, input, textarea, /* form elements 表单元素 */
th, td /* table elements 表格元素 */ {
  margin: 0;
  padding: 0;
}

/** 设置默认字体 **/
body,
button, input, select, textarea /* for ie */ {
  font: 12px/1.5 tahoma, arial, \5b8b\4f53, sans-serif;
}
h1, h2, h3, h4, h5, h6 { font-size: 100%; }
address, cite, dfn, em, var { font-style: normal; } /* 将斜体扶正 */
code, kbd, pre, samp { font-family: courier new, courier, monospace; } /* 统一等宽字体 */
small { font-size: 12px; } /* 小于 12px 的中文很难阅读,让 small 正常化 */

/** 重置列表元素 **/
ul, ol { list-style: none; }

/** 重置文本格式元素 **/
a { text-decoration: none; }
a:hover { text-decoration: underline; }


/** 重置表单元素 **/
legend { color: #000; } /* for ie6 */
fieldset, img { border: 0; } /* img 搭车:让链接里的 img 无边框 */
button, input, select, textarea { font-size: 100%; } /* 使得表单元素在 ie 下能继承字体大小 */
/* 注:optgroup 无法扶正 */

/** 重置表格元素 **/
table { border-collapse: collapse; border-spacing: 0; }

/* 清除浮动 */
.ks-clear:after, .clear:after {
  content: '\20';
  display: block;
  height: 0;
  clear: both;
}
.ks-clear, .clear {
  *zoom: 1;
}

.main {
  padding: 30px 100px;
width: 960px;
margin: 0 auto;
}
.main h1{font-size:36px; color:#333; text-align:left;margin-bottom:30px; border-bottom: 1px solid #eee;}

.helps{margin-top:40px;}
.helps pre{
  padding:20px;
  margin:10px 0;
  border:solid 1px #e7e1cd;
  background-color: #fffdef;
  overflow: auto;
}

.icon_lists{
  width: 100% !important;

}

.icon_lists li{
  float:left;
  width: 100px;
  height:180px;
  text-align: center;
  list-style: none !important;
}
.icon_lists .icon{
  font-size: 42px;
  line-height: 100px;
  margin: 10px 0;
  color:#333;
  -webkit-transition: font-size 0.25s ease-out 0s;
  -moz-transition: font-size 0.25s ease-out 0s;
  transition: font-size 0.25s ease-out 0s;

}
.icon_lists .icon:hover{
  font-size: 100px;
}



.markdown {
  color: #666;
  font-size: 14px;
  line-height: 1.8;
}

.highlight {
  line-height: 1.5;
}

.markdown img {
  vertical-align: middle;
  max-width: 100%;
}

.markdown h1 {
  color: #404040;
  font-weight: 500;
  line-height: 40px;
  margin-bottom: 24px;
}

.markdown h2,
.markdown h3,
.markdown h4,
.markdown h5,
.markdown h6 {
  color: #404040;
  margin: 1.6em 0 0.6em 0;
  font-weight: 500;
  clear: both;
}

.markdown h1 {
  font-size: 28px;
}

.markdown h2 {
  font-size: 22px;
}

.markdown h3 {
  font-size: 16px;
}

.markdown h4 {
  font-size: 14px;
}

.markdown h5 {
  font-size: 12px;
}

.markdown h6 {
  font-size: 12px;
}

.markdown hr {
  height: 1px;
  border: 0;
  background: #e9e9e9;
  margin: 16px 0;
  clear: both;
}

.markdown p,
.markdown pre {
  margin: 1em 0;
}

.markdown > p,
.markdown > blockquote,
.markdown > .highlight,
.markdown > ol,
.markdown > ul {
  width: 80%;
}

.markdown ul > li {
  list-style: circle;
}

.markdown > ul li,
.markdown blockquote ul > li {
  margin-left: 20px;
  padding-left: 4px;
}

.markdown > ul li p,
.markdown > ol li p {
  margin: 0.6em 0;
}

.markdown ol > li {
  list-style: decimal;
}

.markdown > ol li,
.markdown blockquote ol > li {
  margin-left: 20px;
  padding-left: 4px;
}

.markdown code {
  margin: 0 3px;
  padding: 0 5px;
  background: #eee;
  border-radius: 3px;
}

.markdown pre {
  border-radius: 6px;
  background: #f7f7f7;
  padding: 20px;
}

.markdown pre code {
  border: none;
  background: #f7f7f7;
  margin: 0;
}

.markdown strong,
.markdown b {
  font-weight: 600;
}

.markdown > table {
  border-collapse: collapse;
  border-spacing: 0px;
  empty-cells: show;
  border: 1px solid #e9e9e9;
  width: 95%;
  margin-bottom: 24px;
}

.markdown > table th {
  white-space: nowrap;
  color: #333;
  font-weight: 600;

}

.markdown > table th,
.markdown > table td {
  border: 1px solid #e9e9e9;
  padding: 8px 16px;
  text-align: left;
}

.markdown > table th {
  background: #F7F7F7;
}

.markdown blockquote {
  font-size: 90%;
  color: #999;
  border-left: 4px solid #e9e9e9;
  padding-left: 0.8em;
  margin: 1em 0;
  font-style: italic;
}

.markdown blockquote p {
  margin: 0;
}

.markdown .anchor {
  opacity: 0;
  transition: opacity 0.3s ease;
  margin-left: 8px;
}

.markdown .waiting {
  color: #ccc;
}

.markdown h1:hover .anchor,
.markdown h2:hover .anchor,
.markdown h3:hover .anchor,
.markdown h4:hover .anchor,
.markdown h5:hover .anchor,
.markdown h6:hover .anchor {
  opacity: 1;
  display: inline-block;
}

.markdown > br,
.markdown > p > br {
  clear: both;
}


.hljs {
  display: block;
  background: white;
  padding: 0.5em;
  color: #333333;
  overflow-x: auto;
}

.hljs-comment,
.hljs-meta {
  color: #969896;
}

.hljs-string,
.hljs-variable,
.hljs-template-variable,
.hljs-strong,
.hljs-emphasis,
.hljs-quote {
  color: #df5000;
}

.hljs-keyword,
.hljs-selector-tag,
.hljs-type {
  color: #a71d5d;
}

.hljs-literal,
.hljs-symbol,
.hljs-bullet,
.hljs-attribute {
  color: #0086b3;
}

.hljs-section,
.hljs-name {
  color: #63a35c;
}

.hljs-tag {
  color: #333333;
}

.hljs-title,
.hljs-attr,
.hljs-selector-id,
.hljs-selector-class,
.hljs-selector-attr,
.hljs-selector-pseudo {
  color: #795da3;
}

.hljs-addition {
  color: #55a532;
  background-color: #eaffea;
}

.hljs-deletion {
  color: #bd2c00;
  background-color: #ffecec;
}

.hljs-link {
  text-decoration: underline;
}

pre{
  background: #fff;
}







================================================
FILE: src/assets/icons/demo_fontclass.html
================================================

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8"/>
    <title>IconFont</title>
    <link rel="stylesheet" href="demo.css">
    <link rel="stylesheet" href="iconfont.css">
</head>
<body>
    <div class="main markdown">
        <h1>IconFont 图标</h1>
        <ul class="icon_lists clear">
            
                <li>
                <i class="icon iconfont icon-tongyong"></i>
                    <div class="name">通用</div>
                    <div class="fontclass">.icon-tongyong</div>
                </li>
            
                <li>
                <i class="icon iconfont icon-wxbzhanghu"></i>
                    <div class="name">wxb账户</div>
                    <div class="fontclass">.icon-wxbzhanghu</div>
                </li>
            
                <li>
                <i class="icon iconfont icon-gongyongquan1"></i>
                    <div class="name">公用-圈</div>
                    <div class="fontclass">.icon-gongyongquan1</div>
                </li>
            
                <li>
                <i class="icon iconfont icon-user"></i>
                    <div class="name">user</div>
                    <div class="fontclass">.icon-user</div>
                </li>
            
                <li>
                <i class="icon iconfont icon-shezhi1"></i>
                    <div class="name">设置</div>
                    <div class="fontclass">.icon-shezhi1</div>
                </li>
            
                <li>
                <i class="icon iconfont icon-user-guanli"></i>
                    <div class="name">用户管理</div>
                    <div class="fontclass">.icon-user-guanli</div>
                </li>
            
                <li>
                <i class="icon iconfont icon-pwd"></i>
                    <div class="name">pwd</div>
                    <div class="fontclass">.icon-pwd</div>
                </li>
            
                <li>
                <i class="icon iconfont icon-eye"></i>
                    <div class="name">eye</div>
                    <div class="fontclass">.icon-eye</div>
                </li>
            
                <li>
                <i class="icon iconfont icon-guanggao"></i>
                    <div class="name">广告</div>
                    <div class="fontclass">.icon-guanggao</div>
                </li>
            
                <li>
                <i class="icon iconfont icon-guanliyuan"></i>
                    <div class="name">管理员</div>
                    <div class="fontclass">.icon-guanliyuan</div>
                </li>
            
                <li>
                <i class="icon iconfont icon-cloud-permissions"></i>
                    <div class="name">权限-</div>
                    <div class="fontclass">.icon-cloud-permissions</div>
                </li>
            
                <li>
                <i class="icon iconfont icon-shouye"></i>
                    <div class="name">首页</div>
                    <div class="fontclass">.icon-shouye</div>
                </li>
            
                <li>
                <i class="icon iconfont icon-shijiebei"></i>
                    <div class="name">世界杯</div>
                    <div class="fontclass">.icon-shijiebei</div>
                </li>
            
                <li>
                <i class="icon iconfont icon-jiaose"></i>
                    <div class="name">角色</div>
                    <div class="fontclass">.icon-jiaose</div>
                </li>
            
                <li>
                <i class="icon iconfont icon-baobiao"></i>
                    <div class="name">报表</div>
                    <div class="fontclass">.icon-baobiao</div>
                </li>
            
                <li>
                <i class="icon iconfont icon-guanliyuan1"></i>
                    <div class="name">管理员</div>
                    <div class="fontclass">.icon-guanliyuan1</div>
                </li>
            
                <li>
                <i class="icon iconfont icon-tiku"></i>
                    <div class="name">题库</div>
                    <div class="fontclass">.icon-tiku</div>
                </li>
            
                <li>
                <i class="icon iconfont icon-xiaochengxu"></i>
                    <div class="name">小程序</div>
                    <div class="fontclass">.icon-xiaochengxu</div>
                </li>
            
        </ul>

        <h2 id="font-class-">font-class引用</h2>
        <hr>

        <p>font-class是unicode使用方式的一种变种,主要是解决unicode书写不直观,语意不明确的问题。</p>
        <p>与unicode使用方式相比,具有如下特点:</p>
        <ul>
        <li>兼容性良好,支持ie8+,及所有现代浏览器。</li>
        <li>相比于unicode语意明确,书写更直观。可以很容易分辨这个icon是什么。</li>
        <li>因为使用class来定义图标,所以当要替换图标时,只需要修改class里面的unicode引用。</li>
        <li>不过因为本质上还是使用的字体,所以多色图标还是不支持的。</li>
        </ul>
        <p>使用步骤如下:</p>
        <h3 id="-fontclass-">第一步:引入项目下面生成的fontclass代码:</h3>


        <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>
        <h3 id="-">第二步:挑选相应图标并获取类名,应用于页面:</h3>
        <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>
        <blockquote>
        <p>"iconfont"是你项目下的font-family。可以通过编辑项目查看,默认是"iconfont"。</p>
        </blockquote>
    </div>
</body>
</html>


================================================
FILE: src/assets/icons/demo_symbol.html
================================================

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8"/>
    <title>IconFont</title>
    <link rel="stylesheet" href="demo.css">
    <script src="iconfont.js"></script>

    <style type="text/css">
        .icon {
          /* 通过设置 font-size 来改变图标大小 */
          width: 1em; height: 1em;
          /* 图标和文字相邻时,垂直对齐 */
          vertical-align: -0.15em;
          /* 通过设置 color 来改变 SVG 的颜色/fill */
          fill: currentColor;
          /* path 和 stroke 溢出 viewBox 部分在 IE 下会显示
             normalize.css 中也包含这行 */
          overflow: hidden;
        }

    </style>
</head>
<body>
    <div class="main markdown">
        <h1>IconFont 图标</h1>
        <ul class="icon_lists clear">
            
                <li>
                    <svg class="icon" aria-hidden="true">
                        <use xlink:href="#icon-tongyong"></use>
                    </svg>
                    <div class="name">通用</div>
                    <div class="fontclass">#icon-tongyong</div>
                </li>
            
                <li>
                    <svg class="icon" aria-hidden="true">
                        <use xlink:href="#icon-wxbzhanghu"></use>
                    </svg>
                    <div class="name">wxb账户</div>
                    <div class="fontclass">#icon-wxbzhanghu</div>
                </li>
            
                <li>
                    <svg class="icon" aria-hidden="true">
                        <use xlink:href="#icon-gongyongquan1"></use>
                    </svg>
                    <div class="name">公用-圈</div>
                    <div class="fontclass">#icon-gongyongquan1</div>
                </li>
            
                <li>
                    <svg class="icon" aria-hidden="true">
                        <use xlink:href="#icon-user"></use>
                    </svg>
                    <div class="name">user</div>
                    <div class="fontclass">#icon-user</div>
                </li>
            
                <li>
                    <svg class="icon" aria-hidden="true">
                        <use xlink:href="#icon-shezhi1"></use>
                    </svg>
                    <div class="name">设置</div>
                    <div class="fontclass">#icon-shezhi1</div>
                </li>
            
                <li>
                    <svg class="icon" aria-hidden="true">
                        <use xlink:href="#icon-user-guanli"></use>
                    </svg>
                    <div class="name">用户管理</div>
                    <div class="fontclass">#icon-user-guanli</div>
                </li>
            
                <li>
                    <svg class="icon" aria-hidden="true">
                        <use xlink:href="#icon-pwd"></use>
                    </svg>
                    <div class="name">pwd</div>
                    <div class="fontclass">#icon-pwd</div>
                </li>
            
                <li>
                    <svg class="icon" aria-hidden="true">
                        <use xlink:href="#icon-eye"></use>
                    </svg>
                    <div class="name">eye</div>
                    <div class="fontclass">#icon-eye</div>
                </li>
            
                <li>
                    <svg class="icon" aria-hidden="true">
                        <use xlink:href="#icon-guanggao"></use>
                    </svg>
                    <div class="name">广告</div>
                    <div class="fontclass">#icon-guanggao</div>
                </li>
            
                <li>
                    <svg class="icon" aria-hidden="true">
                        <use xlink:href="#icon-guanliyuan"></use>
                    </svg>
                    <div class="name">管理员</div>
                    <div class="fontclass">#icon-guanliyuan</div>
                </li>
            
                <li>
                    <svg class="icon" aria-hidden="true">
                        <use xlink:href="#icon-cloud-permissions"></use>
                    </svg>
                    <div class="name">权限-</div>
                    <div class="fontclass">#icon-cloud-permissions</div>
                </li>
            
                <li>
                    <svg class="icon" aria-hidden="true">
                        <use xlink:href="#icon-shouye"></use>
                    </svg>
                    <div class="name">首页</div>
                    <div class="fontclass">#icon-shouye</div>
                </li>
            
                <li>
                    <svg class="icon" aria-hidden="true">
                        <use xlink:href="#icon-shijiebei"></use>
                    </svg>
                    <div class="name">世界杯</div>
                    <div class="fontclass">#icon-shijiebei</div>
                </li>
            
                <li>
                    <svg class="icon" aria-hidden="true">
                        <use xlink:href="#icon-jiaose"></use>
                    </svg>
                    <div class="name">角色</div>
                    <div class="fontclass">#icon-jiaose</div>
                </li>
            
                <li>
                    <svg class="icon" aria-hidden="true">
                        <use xlink:href="#icon-baobiao"></use>
                    </svg>
                    <div class="name">报表</div>
                    <div class="fontclass">#icon-baobiao</div>
                </li>
            
                <li>
                    <svg class="icon" aria-hidden="true">
                        <use xlink:href="#icon-guanliyuan1"></use>
                    </svg>
                    <div class="name">管理员</div>
                    <div class="fontclass">#icon-guanliyuan1</div>
                </li>
            
                <li>
                    <svg class="icon" aria-hidden="true">
                        <use xlink:href="#icon-tiku"></use>
                    </svg>
                    <div class="name">题库</div>
                    <div class="fontclass">#icon-tiku</div>
                </li>
            
                <li>
                    <svg class="icon" aria-hidden="true">
                        <use xlink:href="#icon-xiaochengxu"></use>
                    </svg>
                    <div class="name">小程序</div>
                    <div class="fontclass">#icon-xiaochengxu</div>
                </li>
            
        </ul>


        <h2 id="symbol-">symbol引用</h2>
        <hr>

        <p>这是一种全新的使用方式,应该说这才是未来的主流,也是平台目前推荐的用法。相关介绍可以参考这篇<a href="">文章</a>
        这种用法其实是做了一个svg的集合,与另外两种相比具有如下特点:</p>
        <ul>
          <li>支持多色图标了,不再受单色限制。</li>
          <li>通过一些技巧,支持像字体那样,通过<code>font-size</code>,<code>color</code>来调整样式。</li>
          <li>兼容性较差,支持 ie9+,及现代浏览器。</li>
          <li>浏览器渲染svg的性能一般,还不如png。</li>
        </ul>
        <p>使用步骤如下:</p>
        <h3 id="-symbol-">第一步:引入项目下面生成的symbol代码:</h3>
        <pre><code class="lang-js hljs javascript"><span class="hljs-comment">&lt;script src="./iconfont.js"&gt;&lt;/script&gt;</span></code></pre>
        <h3 id="-css-">第二步:加入通用css代码(引入一次就行):</h3>
        <pre><code class="lang-js hljs javascript">&lt;style type=<span class="hljs-string">"text/css"</span>&gt;
.icon {
   width: <span class="hljs-number">1</span>em; height: <span class="hljs-number">1</span>em;
   vertical-align: <span class="hljs-number">-0.15</span>em;
   fill: currentColor;
   overflow: hidden;
}
&lt;<span class="hljs-regexp">/style&gt;</span></code></pre>
        <h3 id="-">第三步:挑选相应图标并获取类名,应用于页面:</h3>
        <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">
  &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>
</span>&lt;<span class="hljs-regexp">/svg&gt;
        </span></code></pre>
    </div>
</body>
</html>


================================================
FILE: src/assets/icons/demo_unicode.html
================================================

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8"/>
    <title>IconFont</title>
    <link rel="stylesheet" href="demo.css">

    <style type="text/css">

        @font-face {font-family: "iconfont";
          src: url('iconfont.eot'); /* IE9*/
          src: url('iconfont.eot#iefix') format('embedded-opentype'), /* IE6-IE8 */
          url('iconfont.woff') format('woff'), /* chrome, firefox */
          url('iconfont.ttf') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/
          url('iconfont.svg#iconfont') format('svg'); /* iOS 4.1- */
        }

        .iconfont {
          font-family:"iconfont" !important;
          font-size:16px;
          font-style:normal;
          -webkit-font-smoothing: antialiased;
          -webkit-text-stroke-width: 0.2px;
          -moz-osx-font-smoothing: grayscale;
        }

    </style>
</head>
<body>
    <div class="main markdown">
        <h1>IconFont 图标</h1>
        <ul class="icon_lists clear">
            
                <li>
                <i class="icon iconfont">&#xe617;</i>
                    <div class="name">通用</div>
                    <div class="code">&amp;#xe617;</div>
                </li>
            
                <li>
                <i class="icon iconfont">&#xe61f;</i>
                    <div class="name">wxb账户</div>
                    <div class="code">&amp;#xe61f;</div>
                </li>
            
                <li>
                <i class="icon iconfont">&#xe7eb;</i>
                    <div class="name">公用-圈</div>
                    <div class="code">&amp;#xe7eb;</div>
                </li>
            
                <li>
                <i class="icon iconfont">&#xe699;</i>
                    <div class="name">user</div>
                    <div class="code">&amp;#xe699;</div>
                </li>
            
                <li>
                <i class="icon iconfont">&#xe6d1;</i>
                    <div class="name">设置</div>
                    <div class="code">&amp;#xe6d1;</div>
                </li>
            
                <li>
                <i class="icon iconfont">&#xe6df;</i>
                    <div class="name">用户管理</div>
                    <div class="code">&amp;#xe6df;</div>
                </li>
            
                <li>
                <i class="icon iconfont">&#xe819;</i>
                    <div class="name">pwd</div>
                    <div class="code">&amp;#xe819;</div>
                </li>
            
                <li>
                <i class="icon iconfont">&#xe63d;</i>
                    <div class="name">eye</div>
                    <div class="code">&amp;#xe63d;</div>
                </li>
            
                <li>
                <i class="icon iconfont">&#xe679;</i>
                    <div class="name">广告</div>
                    <div class="code">&amp;#xe679;</div>
                </li>
            
                <li>
                <i class="icon iconfont">&#xe618;</i>
                    <div class="name">管理员</div>
                    <div class="code">&amp;#xe618;</div>
                </li>
            
                <li>
                <i class="icon iconfont">&#xe668;</i>
                    <div class="name">权限-</div>
                    <div class="code">&amp;#xe668;</div>
                </li>
            
                <li>
                <i class="icon iconfont">&#xe602;</i>
                    <div class="name">首页</div>
                    <div class="code">&amp;#xe602;</div>
                </li>
            
                <li>
                <i class="icon iconfont">&#xe60d;</i>
                    <div class="name">世界杯</div>
                    <div class="code">&amp;#xe60d;</div>
                </li>
            
                <li>
                <i class="icon iconfont">&#xe67e;</i>
                    <div class="name">角色</div>
                    <div class="code">&amp;#xe67e;</div>
                </li>
            
                <li>
                <i class="icon iconfont">&#xe6fc;</i>
                    <div class="name">报表</div>
                    <div class="code">&amp;#xe6fc;</div>
                </li>
            
                <li>
                <i class="icon iconfont">&#xe65d;</i>
                    <div class="name">管理员</div>
                    <div class="code">&amp;#xe65d;</div>
                </li>
            
                <li>
                <i class="icon iconfont">&#xe62f;</i>
                    <div class="name">题库</div>
                    <div class="code">&amp;#xe62f;</div>
                </li>
            
                <li>
                <i class="icon iconfont">&#xe61e;</i>
                    <div class="name">小程序</div>
                    <div class="code">&amp;#xe61e;</div>
                </li>
            
        </ul>
        <h2 id="unicode-">unicode引用</h2>
        <hr>

        <p>unicode是字体在网页端最原始的应用方式,特点是:</p>
        <ul>
        <li>兼容性最好,支持ie6+,及所有现代浏览器。</li>
        <li>支持按字体的方式去动态调整图标大小,颜色等等。</li>
        <li>但是因为是字体,所以不支持多色。只能使用平台里单色的图标,就算项目里有多色图标也会自动去色。</li>
        </ul>
        <blockquote>
        <p>注意:新版iconfont支持多色图标,这些多色图标在unicode模式下将不能使用,如果有需求建议使用symbol的引用方式</p>
        </blockquote>
        <p>unicode使用步骤如下:</p>
        <h3 id="-font-face">第一步:拷贝项目下面生成的font-face</h3>
        <pre><code class="lang-js hljs javascript">@font-face {
  font-family: <span class="hljs-string">'iconfont'</span>;
  src: url(<span class="hljs-string">'iconfont.eot'</span>);
  src: url(<span class="hljs-string">'iconfont.eot?#iefix'</span>) format(<span class="hljs-string">'embedded-opentype'</span>),
  url(<span class="hljs-string">'iconfont.woff'</span>) format(<span class="hljs-string">'woff'</span>),
  url(<span class="hljs-string">'iconfont.ttf'</span>) format(<span class="hljs-string">'truetype'</span>),
  url(<span class="hljs-string">'iconfont.svg#iconfont'</span>) format(<span class="hljs-string">'svg'</span>);
}
</code></pre>
        <h3 id="-iconfont-">第二步:定义使用iconfont的样式</h3>
        <pre><code class="lang-js hljs javascript">.iconfont{
  font-family:<span class="hljs-string">"iconfont"</span> !important;
  font-size:<span class="hljs-number">16</span>px;font-style:normal;
  -webkit-font-smoothing: antialiased;
  -webkit-text-stroke-width: <span class="hljs-number">0.2</span>px;
  -moz-osx-font-smoothing: grayscale;
}
</code></pre>
        <h3 id="-">第三步:挑选相应图标并获取字体编码,应用于页面</h3>
        <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>

        <blockquote>
        <p>"iconfont"是你项目下的font-family。可以通过编辑项目查看,默认是"iconfont"。</p>
        </blockquote>
    </div>


</body>
</html>


================================================
FILE: src/assets/icons/iconfont.css
================================================

@font-face {font-family: "iconfont";
  src: url('iconfont.eot?t=1531114397320'); /* IE9*/
  src: url('iconfont.eot?t=1531114397320#iefix') format('embedded-opentype'), /* IE6-IE8 */
  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'),
  url('iconfont.ttf?t=1531114397320') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/
  url('iconfont.svg?t=1531114397320#iconfont') format('svg'); /* iOS 4.1- */
}

.iconfont {
  font-family:"iconfont" !important;
  font-size:16px;
  font-style:normal;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

.icon-tongyong:before { content: "\e617"; }

.icon-wxbzhanghu:before { content: "\e61f"; }

.icon-gongyongquan1:before { content: "\e7eb"; }

.icon-user:before { content: "\e699"; }

.icon-shezhi1:before { content: "\e6d1"; }

.icon-user-guanli:before { content: "\e6df"; }

.icon-pwd:before { content: "\e819"; }

.icon-eye:before { content: "\e63d"; }

.icon-guanggao:before { content: "\e679"; }

.icon-guanliyuan:before { content: "\e618"; }

.icon-cloud-permissions:before { content: "\e668"; }

.icon-shouye:before { content: "\e602"; }

.icon-shijiebei:before { content: "\e60d"; }

.icon-jiaose:before { content: "\e67e"; }

.icon-baobiao:before { content: "\e6fc"; }

.icon-guanliyuan1:before { content: "\e65d"; }

.icon-tiku:before { content: "\e62f"; }

.icon-xiaochengxu:before { content: "\e61e"; }



================================================
FILE: src/assets/icons/iconfont.js
================================================
/* eslint-disable */
(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)


================================================
FILE: src/components/File/Upload.vue
================================================
<template>
    <div class="upload-container">
        <el-button :style="{background:color,borderColor:color}"
                   icon="el-icon-upload"
                   size="mini"
                   type="primary"
                   @click=" dialogVisible=true">上传文件</el-button>


        <el-dialog
            custom-class="upload-dialog__body"
            width="450px"
            title="插入图片"
            :visible.sync="dialogVisible"
            append-to-body>

            <el-tabs v-model="activeName">
                <el-tab-pane label="本地上传" name="localhost">
                    <div class="upload-content">
                        <span class="text-muted">只能上传{{ ext }}文件,且大小不超过{{ size | renderSize }},且宽高 {{ width ? width + 'px' : "不限" }} * {{ height ? height + 'px' : "不限" }}</span>
                        <br>
                        <div class="widget-upload" @dragenter="onDrag" @dragover="onDrag" @drop="onDrop">
                            <input type="file" ref="upload" name="file" class="widget-upload__file" @change="onChange">
                            <el-input
                                class="widget-upload__text"
                                size="medium"
                                placeholder="文件拖拽到这里"
                                v-model="fileName">
                            </el-input>
                            <el-button size="medium">选择文件</el-button>
                        </div>
                    </div>
                </el-tab-pane>
                <el-tab-pane label="远程地址获取" name="network">
                    <div class="upload-content">
                        <span class="text-muted">只能上传{{ ext }}文件,且大小不超过{{ size | renderSize }},且宽高 {{ width ? width + 'px' : "不限" }} * {{ height ? height + 'px' : "不限" }}</span>
                        <br>
                        <div class="widget-upload">
                            <el-input
                                size="medium"
                                placeholder="请输入文件所在网址"
                                v-model="fileUrl">
                            </el-input>
                        </div>
                    </div>
                </el-tab-pane>
            </el-tabs>

            <div style="text-align: right;padding-top: 40px;">
                <el-button size="medium" @click="dialogVisible = false">取 消</el-button>
                <el-button size="medium" type="primary" @click="handleSubmit" :loading="uploadLoading">插入</el-button>
            </div>

        </el-dialog>

    </div>
</template>

<script>
import { qiuNiuUpToken, createFile } from "../../api/file/upload";
import { renderSize } from "../../filtres/index";

export default {
    name: "Upload",
    props: {
        height: {
            type: Number
        },
        width: {
            type: Number
        },
        ext: {
            type: String
        },
        size: {
            type: Number
        },
        color: {
            type: String,
            default: "#1890ff"
        }
    },
    data() {
        return {
            activeName: "localhost",
            file: null,
            fileName: "",
            filePath: "",
            filePathUrl: "",
            fileUrl: "",
            dialogVisible: false,
            uploadLoading: false
        };
    },
    methods: {
        onDrag(e) {
            e.stopPropagation();
            e.preventDefault();
        },
        onDrop(e) {
            e.stopPropagation();
            e.preventDefault();
            const data = e.dataTransfer.files;
            // 获取文件对象
            if (data.length < 1) {
                return false; // 检测是否有文件拖拽到页面
            }
            this.file = data[0];
            this.fileName = data[0].name;
        },
        onChange(e) {
            const data = e.target.files;
            // 获取文件对象
            if (data.length < 1) {
                return false; // 检测是否有文件拖拽到页面
            }
            this.file = data[0];
            this.fileName = data[0].name;
            e.target.value = "";
        },
        onReset() {
            this.activeName = "localhost";
            this.file = null;
            this.fileName = "";
            this.filePath = "";
            this.filePathUrl = "";
            this.fileUrl = "";
            this.dialogVisible = false;
            this.uploadLoading = false;
        },
        handleSubmit() {
            if (this.activeName === "network") {
                if (!this.fileUrl) {
                    this.$message.error("请输入文件网络地址");
                    return;
                }
                this.$emit("on-select", this.fileUrl, this.fileUrl);
                this.onReset();
                return;
            }
            if (this.file === null) {
                this.$message.error("请先选择文件");
                return;
            }
            // 检查文件
            let isVerify = this.beforeUpload(this.file);
            if (isVerify === false) {
                return;
            }
            isVerify
                .then(() => {
                    this.uploadLoading = true;
                    qiuNiuUpToken()
                        .then(response => {
                            if (response.code > 0) {
                                this.$message.error("出现未知问题,刷新页面");
                                return;
                            }
                            const url = response.data.uploadUrl;
                            const formData = new FormData();
                            formData.append("token", response.data.upToken);
                            formData.append("file", this.file);
                            createFile(url, formData)
                                .then(response => {
                                    this.uploadLoading = false;
                                    if (response.key || response.data.key) {
                                        const filePath =
                                            response.key || response.data.key;
                                        let _URL =
                                            window.URL || window.webkitURL;
                                        const filePathUrl = _URL.createObjectURL(
                                            this.file
                                        );
                                        this.$emit(
                                            "on-select",
                                            filePath,
                                            filePathUrl
                                        );
                                        this.onReset();
                                        return;
                                    }
                                    this.$message.error("上传出错");
                                })
                                .catch(() => {
                                    this.uploadLoading = false;
                                    this.$message.error("上传出错");
                                });
                        })
                        .catch(() => {
                            this.uploadLoading = false;
                            this.$message.error("出现未知问题,刷新页面");
                        });
                })
                .catch(() => {});
        },
        beforeUpload(file) {
            const name = file.name ? file.name : "";
            let ext = name
                ? name.substr(name.lastIndexOf(".") + 1, name.length)
                : true;
            // 转成小写
            ext = ext.toLowerCase();
            let isExt = false;
            // 如果有坚持文件后缀的配置
            if (this.ext) {
                isExt = this.ext.indexOf(ext) >= 0;
                if (!isExt) {
                    this.$message.error("文件只能为 " + this.ext + " 格式!");
                    return false;
                }
            }
            let isSize = false;
            if (this.size) {
                let sizeStr = this.size;
                isSize = sizeStr > 0 && file.size > sizeStr;
                if (isSize) {
                    this.$message.error(
                        "上传文件不能超过 " + renderSize(sizeStr) + "!"
                    );
                    return false;
                }
            }
            const _this = this;
            if (_this.width || _this.height) {
                return new Promise(function(resolve, reject) {
                    let width = _this.width;
                    let height = _this.height;
                    let _URL = window.URL || window.webkitURL;
                    let img = new Image();
                    img.src = _URL.createObjectURL(file);
                    img.onload = function() {
                        let valid =
                            (!width || img.width === width) &&
                            (!height || img.height === height);
                        if (valid) {
                            resolve();
                        } else {
                            let messageStr = "";
                            if (width && !height) {
                                messageStr = width;
                            }
                            if (height && !width) {
                                messageStr = height;
                            }
                            if (height && width) {
                                messageStr = width + "*" + height;
                            }
                            _this.$message.error(
                                "上传尺寸必须是 " + messageStr + " px!"
                            );
                            reject();
                        }
                    };
                });
            }
            return new Promise(function(resolve) {
                resolve();
            });
        }
    },
    computed: {},
    watch: {}
};
</script>

<style type="text/scss" lang="scss">
.upload-dialog__body {
    .el-dialog__header {
        background-color: #f3f3f3;
        border-top-left-radius: 6px;
        border-top-right-radius: 6px;
    }
    .el-dialog__body {
        padding: 12px 20px !important;
    }
}
.upload-content {
    padding-top: 15px;
    .widget-upload {
        position: relative;
    }
    .widget-upload__text {
        width: 66.66%;
        padding-right: 15px;
        .el-input__inner {
            border: 1px solid #ccc;
            background-color: #eee;
        }
    }
    .widget-upload {
        padding-top: 5px;
        .widget-upload__file {
            position: absolute;
            opacity: 0;
            width: 85%;
            height: 100%;
            z-index: 10;
            cursor: pointer;
        }
    }
}
</style>


================================================
FILE: src/components/File/Upload1.vue
================================================
<template>
    <div class="upload-container">
        <el-button :style="{background:color,borderColor:color}"
                   icon="el-icon-upload"
                   size="mini"
                   type="primary"
                   @click=" dialogVisible=true">上传文件</el-button>


        <el-dialog
            width="400px"
            title="插入图片"
            :visible.sync="dialogVisible"
            append-to-body>

            <el-upload
                style="margin-bottom: 10px;"
                ref="upload"
                drag
                :show-file-list="false"
                :on-success="handleSuccess"
                :on-change="handleChange"
                :before-remove="beforeRemove"
                :before-upload="beforeUpload"
                :action="uploadUrl"
                :multiple="false"
                :auto-upload="false"
                :data="uploadData">
                <i class="el-icon-upload"></i>
                <div class="el-upload__text">将文件拖到此处,或<em>点击选取</em></div>
                <div class="el-upload__tip" slot="tip">
                    只能上传{{ cheekConfig.ext }}文件,且大小不超过{{ cheekConfig.size | renderSize }},且宽高 {{ cheekConfig.width ? cheekConfig.width + 'px' : "不限" }} * {{ cheekConfig.height ? cheekConfig.height + 'px' : "不限" }}
                </div>
                <div class="el-upload__tip" slot="tip">
                    <el-input
                        placeholder="请上传文件"
                        v-model="fileName"
                        :disabled="true">
                    </el-input>
                </div>
            </el-upload>

            <div style="text-align: right">
                <el-button @click="dialogVisible = false">取 消</el-button>
                <el-button type="primary" @click="handleSubmit">插入</el-button>
            </div>

        </el-dialog>

    </div>
</template>

<script>
import { qiuniuUpToken } from "../../api/file/upload";
import { renderSize } from "../../filtres/index";

export default {
    name: "Upload",
    props: {
        cheekConfig: {
            type: Object,
            default: function() {
                return {
                    size: 6000, // 文件大小
                    ext: "jpg,png,gif", // 文件后缀
                    width: "", // 限制宽度
                    height: "" // 限制高度
                };
            }
        },
        color: {
            type: String,
            default: "#1890ff"
        }
    },
    data() {
        return {
            uploadUrl: "",
            uploadData: {
                token: ""
            },
            fileName: "",
            filePath: "",
            filePathUrl: "",
            isSelect: false, // 是否选择过文件
            dialogVisible: false
        };
    },
    methods: {
        handleSubmit() {
            this.isSelect = true;
            qiuniuUpToken()
                .then(response => {
                    if (response.code > 0) {
                        this.$message.error("出现未知问题,刷新页面");
                        return;
                    }
                    this.uploadUrl = response.data.upload_url;
                    this.uploadData.token = response.data.up_token;
                    this.$refs.upload.submit();
                })
                .catch(() => {
                    this.isSelect = false;
                    this.$message.error("出现未知问题,刷新页面");
                });
        },
        handleSuccess(response, file) {
            this.isSelect = false;
            console.log("上传成功");
            if (response.key) {
                const filePath = response.key;
                let _URL = window.URL || window.webkitURL;
                const filePathUrl = _URL.createObjectURL(file);
                this.$emit("on-select", filePath, filePathUrl);
                this.dialogVisible = false;
                return;
            }
            this.$message.error("上传文件报错");
        },
        handleChange(file) {
            this.fileName = file.name ? file.name : "";
            return false;
        },
        beforeRemove() {
            return !this.isSelect;
        },
        beforeUpload(file) {
            const name = file.name ? file.name : "";
            const ext = name
                ? name.substr(name.lastIndexOf(".") + 1, name.length)
                : true;
            let isExt = false;
            // 如果有坚持文件后缀的配置
            if (this.cheekConfig.ext) {
                isExt = this.cheekConfig.ext.indexOf(ext) >= 0;
                console.log(isExt, 111);
                if (!isExt) {
                    this.$message.error(
                        "文件只能为 " + this.cheekConfig.ext + " 格式!"
                    );
                }
            }
            let isSize = false;
            if (this.cheekConfig.size) {
                let sizeStr = this.cheekConfig.size;
                isSize = sizeStr > 0 && file.size > sizeStr;
                if (!isSize) {
                    this.$message.error(
                        "上传文件不能超过 " + renderSize(sizeStr) + "!"
                    );
                }
            }
            const _this = this;
            let isWidthHeight = false;
            if (_this.cheekConfig.width || _this.cheekConfig.height) {
                isWidthHeight = new Promise(function(resolve, reject) {
                    let width = _this.cheekConfig.width;
                    let height = _this.cheekConfig.height;
                    let _URL = window.URL || window.webkitURL;
                    let img = new Image();
                    img.src = _URL.createObjectURL(file);
                    img.onload = function() {
                        let valid =
                            (!width || img.width === width) &&
                            (!height || img.height === height);
                        if (valid) {
                            resolve();
                        } else {
                            let messageStr = "";
                            if (width && !height) {
                                messageStr = width;
                            }
                            if (height && !width) {
                                messageStr = height;
                            }
                            if (height && width) {
                                messageStr = width + "*" + height;
                            }
                            _this.$message.error(
                                "上传尺寸必须是 " + messageStr + " px!"
                            );
                            reject();
                        }
                    };
                });
            }
            return isExt && isSize && isWidthHeight;
        }
    },
    computed: {},
    watch: {}
};
</script>

<style type="text/scss" lang="scss">
</style>


================================================
FILE: src/components/HelloWorld.vue
================================================
<template>
  <div class="hello">
    <h1>{{ msg }}</h1>
    <p>
      For guide and recipes on how to configure / customize this project,<br>
      check out the
      <a href="https://cli.vuejs.org" target="_blank">vue-cli documentation</a>.
    </p>
    <h3>Installed CLI Plugins</h3>
    <ul>
      <li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-babel" target="_blank">babel</a></li>
      <li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-eslint" target="_blank">eslint</a></li>
      <li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-unit-jest" target="_blank">unit-jest</a></li>
    </ul>
    <h3>Essential Links</h3>
    <ul>
      <li><a href="https://vuejs.org" target="_blank">Core Docs</a></li>
      <li><a href="https://forum.vuejs.org" target="_blank">Forum</a></li>
      <li><a href="https://chat.vuejs.org" target="_blank">Community Chat</a></li>
      <li><a href="https://twitter.com/vuejs" target="_blank">Twitter</a></li>
    </ul>
    <h3>Ecosystem</h3>
    <ul>
      <li><a href="https://router.vuejs.org" target="_blank">vue-router</a></li>
      <li><a href="https://vuex.vuejs.org" target="_blank">vuex</a></li>
      <li><a href="https://github.com/vuejs/vue-devtools#vue-devtools" target="_blank">vue-devtools</a></li>
      <li><a href="https://vue-loader.vuejs.org" target="_blank">vue-loader</a></li>
      <li><a href="https://github.com/vuejs/awesome-vue" target="_blank">awesome-vue</a></li>
    </ul>
  </div>
</template>

<script>
export default {
  name: "HelloWorld",
  props: {
    msg: String
  }
};
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped lang="scss">
h3 {
  margin: 40px 0 0;
}
ul {
  list-style-type: none;
  padding: 0;
}
li {
  display: inline-block;
  margin: 0 10px;
}
a {
  color: #42b983;
}
</style>


================================================
FILE: src/components/Tinymce/index.vue
================================================
<template>
  <div :class="{fullscreen:fullscreen}" class="tinymce-container editor-container">
    <textarea :id="tinymceId" class="tinymce-textarea"/>
  </div>
</template>

<script>
import plugins from "./plugins";
import toolbar from "./toolbar";
import { qiuNiuUpToken, createFile } from "../../api/file/upload";

export default {
    name: "Tinymce",
    props: {
        id: {
            type: String,
            default: function() {
                return (
                    "vue-tinymce-" +
                    +new Date() +
                    ((Math.random() * 1000).toFixed(0) + "")
                );
            }
        },
        value: {
            type: String,
            default: ""
        },
        toolbar: {
            type: Array,
            required: false,
            default() {
                return [];
            }
        },
        menubar: {
            type: String,
            default: "file edit insert view format table"
        },
        height: {
            type: Number,
            required: false,
            default: 360
        }
    },
    data() {
        return {
            hasChange: false,
            hasInit: false,
            tinymceId: this.id,
            fullscreen: false
        };
    },
    computed: {},
    watch: {
        value(val) {
            if (!this.hasChange && this.hasInit) {
                this.$nextTick(() =>
                    window.tinymce.get(this.tinymceId).setContent(val || "")
                );
            }
        }
    },
    mounted() {
        this.initTinymce();
    },
    activated() {
        this.initTinymce();
    },
    deactivated() {
        this.destroyTinymce();
    },
    destroyed() {
        this.destroyTinymce();
    },
    methods: {
        initTinymce() {
            const _this = this;
            window.tinymce.init({
                language: "zh_CN",
                selector: `#${this.tinymceId}`,
                height: this.height,
                body_class: "panel-body ",
                object_resizing: false,
                toolbar: this.toolbar.length > 0 ? this.toolbar : toolbar,
                menubar: this.menubar,
                plugins: plugins,
                end_container_on_empty_block: true,
                powerpaste_word_import: "clean",
                code_dialog_height: 450,
                code_dialog_width: 1000,
                advlist_bullet_styles: "square",
                advlist_number_styles: "default",
                imagetools_cors_hosts: ["www.tinymce.com", "codepen.io"],
                default_link_target: "_blank",
                link_title: false,
                nonbreaking_force_tab: true, // inserting nonbreaking space &nbsp; need Nonbreaking Space Plugin
                init_instance_callback: editor => {
                    if (_this.value) {
                        editor.setContent(_this.value);
                    }
                    _this.hasInit = true;
                    editor.on("NodeChange Change KeyUp SetContent", () => {
                        this.hasChange = true;
                        this.$emit("input", editor.getContent());
                    });
                },
                setup(editor) {
                    editor.on("FullscreenStateChanged", e => {
                        _this.fullscreen = e.state;
                    });
                },
                // 整合七牛上传
                // images_dataimg_filter(img) {
                //   setTimeout(() => {
                //     const $image = $(img);
                //     $image.removeAttr('width');
                //     $image.removeAttr('height');
                //     if ($image[0].height && $image[0].width) {
                //       $image.attr('data-wscntype', 'image');
                //       $image.attr('data-wscnh', $image[0].height);
                //       $image.attr('data-wscnw', $image[0].width);
                //       $image.addClass('wscnph');
                //     }
                //   }, 0);
                //   return img
                // },
                images_upload_handler(blobInfo, success, failure, progress) {
                    progress(0);
                    qiuNiuUpToken()
                        .then(response => {
                            if (response.code > 0) {
                                failure("出现未知问题,刷新页面");
                                return;
                            }
                            const url = response.upload_url;
                            const formData = new FormData();
                            formData.append("token", response.up_token);
                            formData.append("file", blobInfo.blob());
                            const domain = response.domain;
                            createFile(url, formData)
                                .then(response => {
                                    if (response.key) {
                                        success(domain + "/" + response.key);
                                        progress(100);
                                        return;
                                    }
                                    failure("上传出错");
                                })
                                .catch(() => {
                                    failure("上传出错");
                                });
                        })
                        .catch(err => {
                            failure("出现未知问题,刷新页面");
                            console.log(err);
                        });
                }
            });
        },
        destroyTinymce() {
            if (window.tinymce.get(this.tinymceId)) {
                window.tinymce.get(this.tinymceId).destroy();
            }
        },
        setContent(value) {
            window.tinymce.get(this.tinymceId).setContent(value);
        },
        getContent() {
            window.tinymce.get(this.tinymceId).getContent();
        }
    }
};
</script>

<style scoped>
.tinymce-container {
    position: relative;
}
.tinymce-container >>> .mce-fullscreen {
    z-index: 10000;
}
.tinymce-textarea {
    visibility: hidden;
    z-index: -1;
}
.editor-custom-btn-container {
    position: absolute;
    right: 4px;
    top: 4px;
    /*z-index: 2005;*/
}
.fullscreen .editor-custom-btn-container {
    z-index: 10000;
    position: fixed;
}
.editor-upload-btn {
    display: inline-block;
}
</style>


================================================
FILE: src/components/Tinymce/plugins.js
================================================
// Any plugins you want to use has to be imported
// Detail plugins list see https://www.tinymce.com/docs/plugins/
// Custom builds see https://www.tinymce.com/download/custom-builds/

const plugins = [
    "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"
];

export default plugins;


================================================
FILE: src/components/Tinymce/toolbar.js
================================================
// Here is a list of the toolbar
// Detail list see https://www.tinymce.com/docs/advanced/editor-control-identifiers/#toolbarcontrols

const toolbar = [
    "searchreplace bold italic underline strikethrough alignleft aligncenter alignright outdent indent  blockquote undo redo removeformat subscript superscript code codesample",
    "hr bullist numlist link image charmap preview anchor pagebreak insertdatetime media table emoticons forecolor backcolor fullscreen"
];

export default toolbar;


================================================
FILE: src/components/common/FileResource.vue
================================================
<template>
    <div style="padding: 10px;">
        <el-button-group>
            <el-button type="primary" size="small" icon="el-icon-refresh" @click="refresh"></el-button>
            <el-button type="primary" size="small" @click="isIcon = !isIcon">{{ isIcon ? '列表' : '图标' }}</el-button>
            <span></span>
            <el-button size="small" type="primary" icon="el-icon-plus" @click="addTag">新建分组</el-button>
            <el-popover
                placement="top"
                title="上传"
                width="100%"
                v-model="uploadVisible"
                trigger="click">
                <el-upload
                    style="max-width: 300px;overflow-x: hidden;"
                    class="upload-demo"
                    ref="upload"
                    :action="uploadUrl"
                    :on-success="handleSuccess"
                    :on-error="handleError"
                    :data="uploadData"
                    :name="uploadData.uploadName"
                    :accept="uploadData.exts"
                    :on-change="beforeChange"
                    :auto-upload="false">
                    <el-button slot="trigger" size="small" type="primary" icon="el-icon-upload2">选取文件</el-button>
                    <el-button style="margin-left: 10px;" size="small" type="success" @click="submitUpload">上传到服务器
                    </el-button>
                    <div slot="tip" class="el-upload__tip">只能上传{{ uploadData.exts }}文件,且不超过{{ uploadData.size | renderSize }}</div>
                </el-upload>
                <el-button slot="reference" size="small" type="primary" icon="el-icon-upload">上传文件</el-button>
            </el-popover>
        </el-button-group>
        <ul class="breadcrumb-list">
            <li>
                <a v-if="query.tagId === ''" href="javascript:;" class="none-path" title="全部分组">全部分组</a>
                <a v-else="" href="javascript:;" title="全部分组" @click="tagClick('')">全部分组</a>

                <template v-for="item in tagLists">
                    <span :key="item.id">
                        <span class="shufenge">|</span>
                        <a v-if="query.tagId !== item.id" href="javascript:;"
                           @click="tagClick(item)">{{ item.tag }}</a>
                        <a v-else="" href="javascript:;" class="none-path" :title="item.tag">{{ item.tag }}</a>
                    </span>
                </template>
            </li>
        </ul>

        <div v-if="isIcon" class="icon-lists">
            <template v-for="(item, index) in lists">
                <a href="#" :key="item.id" class="item" :class="item.select ? 'select' : ''" :style="item.edit ? 'width: 150px;' : ''" @click="selectFile(item, index)">
                    <div class="app-icon fileicon-small-pic">
                        <img :src="item.url"/>
                    </div>
                    <span class="title">
                        <span>
                            {{ item.filename }}
                        </span>
                    </span>
                    <span v-if="isAll" class="circle-check">
                        <span class="el-icon-circle-check"></span>
                    </span>
                    <!--大图-->
                    <span class="big-img">
                        <img :src="item.url"/>
                    </span>
                </a>
            </template>
            <template  v-if="lists.length <= 0">
                <div class="icon-list-empty">
                    暂无数据
                </div>
            </template>
        </div>


        <el-table
            v-else=""
            ref="uploadTable"
            highlight-current-row
            :data="lists"
            style="width: 100%; height: 100%;">
            <el-table-column
                v-if="isAll"
                width="55">
                <template slot-scope="scope">
                    <el-checkbox v-model="scope.row.select" @click="selectFile(scope.row, scope.$index)"></el-checkbox>
                </template>
            </el-table-column>
            <el-table-column
                prop="filename"
                label="文件名">
                <template slot-scope="scope">
                    <a class="file-type-icon fileicon-small-pic"
                       :href="scope.row.url"
                       title="点击查看"
                       target="_blank"></a>
                    <span class="filename"
                          :title="scope.row.filename"
                          @click="selectFile(scope.row, scope.$index)">{{ scope.row.filename }}</span>
                </template>
            </el-table-column>
            <el-table-column
                label="大小"
                width="130">
                <template slot-scope="scope">
                    <span v-if="!scope.row.size || scope.row.size == 0">-</span>
                    <span v-else="">{{ scope.row.size | renderSize}}</span>
                </template>
            </el-table-column>
            <el-table-column
                label="修改日期"
                width="180">
                <template slot-scope="scope">
                    <span v-if="scope.row.create_time">{{ scope.row.create_time | parseTime('{y}-{m}-{d} {h}:{i}') }}</span>
                    <span v-else="">-</span>
                </template>
            </el-table-column>
        </el-table>

        <el-pagination
            :page-size="query.size"
            @current-change="handleCurrentChange"
            layout="prev, pager, next"
            :total="total">
        </el-pagination>

        <div style="margin-top: 20px">
            <el-button @click="allOK()" type="primary">确认选择</el-button>
        </div>

    </div>
</template>

<!--上传资源-->
<script>
import { fileResourceList, fileResourceAdd } from "../../api/file/fileResource";
import {
    fileResourceTagList,
    fileResourceTagAdd
} from "../../api/file/fileResourceTag";
import { renderSize } from "../../filtres/index";
export default {
    name: "file-resource",
    data() {
        return {
            uploadVisible: false,
            isIcon: true, // 是否以图标形式展示(列表 or 图标)
            total: 0,
            lists: [],
            tagLists: [],
            uploadData: {
                type: 0, // 0 表示图片类型
                tagId: "",
                uploadName: "file",
                token: "",
                exts: "jpg,png,gif",
                size: 0
            },
            query: {
                type: 0, // 0 表示图片类型
                tagId: "",
                size: 15,
                page: 0
            },
            selectList: []
        };
    },
    props: {
        uploadUrl: String, // 上传的地址
        uploadName: String, // 上传的文件key名称
        token: String, // 上传的授权码
        isAll: false, // 是否可多选
        size: Number, // 允许上传的文件大小
        fileExt: String, // 允许上传的文件后缀
        limit: Number // 每页显示多少
    },
    mounted() {},
    methods: {
        // 刷新
        refresh() {
            this.getList();
            this.getTagList();
        },
        // 新建分组
        addTag() {
            this.$prompt("请输入分组名称", "提示", {
                confirmButtonText: "确定",
                cancelButtonText: "取消"
            })
                .then(({ value }) => {
                    let data = {
                        tag: value
                    };
                    fileResourceTagAdd(data)
                        .then(response => {
                            if (response.code) {
                                this.$message({
                                    message: response.message,
                                    type: "error"
                                });
                                return;
                            }
                            this.tagLists.push(response.data);
                        })
                        .catch(() => {});
                })
                .catch(() => {
                    // 取消
                });
        },
        // 点击某个分组
        tagClick(item) {
            let tagId = "";
            if (item && item.id) {
                tagId = item.id;
            }
            this.query.tagId = tagId;
            this.uploadData.tagId = tagId;
            this.getList();
        },
        /**
         * 选择某个文件
         * @param row
         */
        selectFile(row, index) {
            if (row.edit) {
                return false;
            }
            // 选择单个文件,并且文件后缀
            let exts = this.uploadData.exts.split(",");
            if (exts.indexOf(row.ext) < 0) {
                // 不在允许后缀中
                this.$message.error(
                    "文件只能为 " + this.uploadData.exts + "格式!"
                );
                return;
            }
            row.select = !row.select;
            // 如果不为全选模式
            if (!this.isAll) {
                this.selectList = [row];
                this.resourceSelect();
                return;
            }
            this.lists.splice(index, 1, row);
        },
        allOK() {
            this.selectList = [];
            if (this.lists.length > 0) {
                let lists = this.lists;
                let exts = this.uploadData.exts.split(",");
                for (let i in lists) {
                    let item = lists[i];
                    if (item.select && item.select === true) {
                        // 如果在扩展列表中
                        if (
                            item.ext &&
                            exts.length > 0 &&
                            exts.indexOf(item.ext) !== -1
                        ) {
                            this.selectList.push(item);
                        }
                    }
                }
            }
            this.resourceSelect();
        },
        // 获取文件列表
        getList() {
            fileResourceList(this.query)
                .then(response => {
                    this.lists = response.data || [];
                    this.total = response.total || 0;
                })
                .catch(() => {});
        },
        // 获取分组列表
        getTagList() {
            fileResourceTagList(this.query)
                .then(response => {
                    this.tagLists = response || [];
                })
                .catch(() => {});
        },
        // 对外的选择文件后的方法
        resourceSelect() {
            this.$emit("resourceSelect", this.selectList);
        },
        submitUpload() {
            this.$refs.upload.submit();
        },
        /**
         * 分页的点击
         * @param val
         */
        handleCurrentChange(val) {
            this.query.page = val;
            this.getList();
        },
        handleSuccess(response, file, fileList) {
            if (response.code) {
                this.$message({
                    message: response.message,
                    type: "error"
                });
                return;
            }
            for (let i = 0; i < fileList.length; i++) {
                let tempFile = fileList[i];
                if (file.uid === tempFile.uid) {
                    fileList.splice(i, 1);
                }
            }
            if (fileList.length <= 0) {
                // 上传完成
                this.uploadVisible = false;
            }
            let data = response;
            data.tag_id = this.uploadData.tagId;
            data.type = this.uploadData.type;
            data.size = this.uploadData.size;
            let fileName = file.name;
            data.filename = fileName;
            data.size = file.size;
            let extIndex = fileName.lastIndexOf(".") + 1;
            data.ext = fileName.substr(extIndex, fileName.length);
            fileResourceAdd(data)
                .then(response => {
                    if (response.code) {
                        this.$message({
                            message: response.message,
                            type: "error"
                        });
                        return;
                    }
                    this.lists.unshift(response);
                })
                .catch(() => {});
        },
        handleError(err, file, fileList) {
            this.$message({
                message: err.message,
                type: "error"
            });
            for (let i = 0; i < fileList.length; i++) {
                let tempFile = fileList[i];
                if (file.uid === tempFile.uid) {
                    fileList.splice(i, 1);
                }
            }
        },
        // 选择文件时
        beforeChange(file, fileList) {
            let name = file.name ? file.name : "";
            let ext = name
                ? name.substr(name.lastIndexOf(".") + 1, name.length)
                : true;
            let isExt = this.uploadData.exts.indexOf(ext) < 0;
            if (isExt) {
                this.$message.error(
                    "文件只能为 " + this.uploadData.exts + " 格式!"
                );
            }
            let isSize =
                this.uploadData.size > 0 && file.size > this.uploadData.size;
            let sizeStr = this.uploadData.size;
            if (isSize) {
                this.$message.error(
                    "上传文件不能超过 " + renderSize(sizeStr) + "!"
                );
            }
            if (isExt || isSize) {
                for (let i = 0; i < fileList.length; i++) {
                    let tempFile = fileList[i];
                    if (file.uid === tempFile.uid) {
                        fileList.splice(i, 1);
                    }
                }
            }
            return false;
        }
    },
    created() {
        // 获取列表
        this.getList();
        // 获取分组列表
        this.getTagList();
        if (this.size) {
            this.uploadData.size = this.size;
        }
        if (this.limit) {
            this.query.size = this.limit;
        }
        if (
            this.fileExt &&
            this.fileExt !== "" &&
            this.fileExt !== "undefined"
        ) {
            this.uploadData.exts = this.fileExt;
        }
        if (
            this.uploadName &&
            this.uploadName !== "" &&
            this.uploadName !== "undefined"
        ) {
            this.uploadData.uploadName = this.uploadName;
        }
        if (this.token && this.token !== "" && this.token !== "undefined") {
            this.uploadData.token = this.token;
        }
    },
    computed: {}
};
</script>

<style type="text/scss" lang="scss">
.edit-input {
    margin-left: 10px;
    width: 200px;
}
.new-dir-bth {
    position: absolute;
    right: 15px;
    top: 10px;
}
.breadcrumb-list {
    padding-left: 5px;
    background: #fff;
    height: 16px;
    line-height: 16px;
    overflow: hidden;
    white-space: nowrap;
    margin-top: 10px;
    li {
        float: left;
        list-style: none;
        margin: 0;
        padding: 0;
    }
    a {
        color: #4287ed;
        text-decoration: none;
        outline: 0;
        display: inline-block;
        max-width: 105px;
        white-space: nowrap;
        text-overflow: ellipsis;
        overflow: hidden;
        float: left;
        &:hover {
            text-decoration: underline;
        }
    }
    .none-path {
        color: #666666;
        display: inline-block;
        max-width: 200px;
        white-space: nowrap;
        text-overflow: ellipsis;
        overflow: hidden;
    }
    .shufenge {
        float: left;
        padding: 0 3px;
        color: #c5d8f3;
    }
}
.filename {
    cursor: pointer;
    float: left;
    margin-left: 10px;
    max-width: 80%;
    white-space: nowrap;
    text-overflow: ellipsis;
    overflow: hidden;
    line-height: 26px;
    color: #666666;
    &:hover {
        text-decoration: none;
        color: #3b8cff;
    }
    &:active {
        text-decoration: none;
        color: #3b8cff;
    }
}
.file-type-icon {
    float: left;
    height: 26px;
    width: 26px;
    background-image: url("../../assets/image/file_type_icon.png");
    &.fileicon-small-pic {
        background-position: -596px -306px;
    }
}

/*icon图片列表展示*/
@import "../../styles/mixin";
.icon-lists {
    @include size(100%, 100%);
    margin-bottom: 10px;
    display: flex;
    flex-direction: row;
    flex-wrap: wrap;
    & .icon-list-empty {
        text-align: center;
        width: 100%;
        height: 60px;
        line-height: 60px;
        color: #909399;
        border: 1px solid #cccccc;
        border-left: none;
        border-right: none;
        margin-bottom: 10px;
        margin-top: 10px;
        opacity: 0.5;
    }
    & .item {
        @include f_left;
        background-color: #fff;
        text-align: center;
        width: 100px;
        height: 120px;
        float: left;
        margin: 4px 0 0 6px;
        border: 1px solid #fff;
        position: relative;
        border-radius: 4px;
        &:hover {
            background-color: #f1f5fa;
        }
        & .app-icon {
            border-radius: 0.154rem;
            position: relative;
            margin: auto 0;
            width: 100%;
            height: 100%;
            line-height: 120px;
            overflow: hidden;
            background-color: #f5f5f5;
            &.fileicon-small-pic {
                img {
                    /*如果是图片则展示图片*/
                    max-width: 100%;
                    max-height: 100%;
                    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAAAAAByaaZbAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAAAmJLR0QA/4ePzL8AAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfiBR0RGx0qH34fAAAAP0lEQVRIx2P8zwABD6C0AgE+EwOJYFQDMYDlAZShAKUJ8QehH4aDBsbR/DAoNIzmh8GhYTQ/DA4No/lhcGgAANgjFQHywHtPAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE4LTA1LTI5VDE2OjU5OjE4KzA4OjAwfq61WQAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxOC0wNS0yOVQxNzoyNzoyOSswODowMM1v/QcAAAAASUVORK5CYII=);
                    background-size: 24px;
                    transition: all 0.2s;
                    vertical-align: middle;
                }
            }
        }
        & .title {
            position: absolute;
            bottom: 2px;
            left: 0;
            display: block;
            /*截断多出来的字*/
            @include text-overflow;
            font-size: 12px;
            color: #4a4a4a;
            text-align: center;
            margin: auto 0;
            width: 100%;
            & .edit-input {
                padding: 0 0 0 5px;
                height: 24px;
                vertical-align: middle;
                border: 1px solid rgba(58, 140, 255, 0.3);
                background: #fff;
                border-radius: 2px;
                width: 78px;
                margin: 0;
            }
            & .edit-btn {
                width: 20px;
                height: 20px;
                display: inline-block;
                vertical-align: middle;
                cursor: pointer;
                position: relative;
                margin: 0 0 0 4px;
                border: 1px solid rgba(58, 140, 255, 0.3);
                border-radius: 2px;
                line-height: 20px;
                color: #3b8cff;
                font-size: 16px;
                font-weight: 600;
            }
        }
        & .circle-check {
            display: none;
            position: absolute;
            top: 5px;
            left: 5px;
            height: 21px;
            width: 21px;
            cursor: pointer;
            font-size: 18px;
            color: #b5d3ff;
        }
        &:hover .circle-check {
            display: block;
        }
        &.select {
            background-color: #f1f5fa;
        }
        &.select .circle-check {
            color: #3b8cff;
            display: block;
        }
        &:hover .big-img {
            display: block;
        }
        & .big-img {
            animation: bounce-in 0.5s;
            position: absolute;
            right: -40px;
            top: 100px;
            width: 200px;
            height: 200px;
            display: none;
            z-index: 99;
            & img {
                max-width: 100%;
                max-height: 100%;
            }
        }
    }
}
@keyframes bounce-in {
    0% {
        opacity: 0;
    }
    20% {
        opacity: 0;
    }
    100% {
        opacity: 1;
    }
}
</style>


================================================
FILE: src/components/common/IconSvg.vue
================================================
<template>
    <svg v-if="iconClass" class="svg-icon" aria-hidden="true">
        <use :xlink:href="iconName"></use>
    </svg>
</template>

<script>
export default {
    name: "icon-svg",
    props: {
        iconClass: {
            type: String,
            required: true
        }
    },
    computed: {
        iconName() {
            return `#icon-${this.iconClass}`;
        }
    }
};
</script>

<style>
</style>


================================================
FILE: src/config/app.js
================================================
/**
 * 配置编译环境和线上环境之间的切换
 *
 * baseUrl: 域名地址
 * routerMode: 路由模式
 * imgBaseUrl: 图片所在域名地址
 *
 */
let BASE_URL = process.env.VUE_APP_API_BASE;
// let ROUTER_MODE = "history";
let ROUTER_MODE = "";
let IMG_BASE_URL = BASE_URL;
export { BASE_URL, ROUTER_MODE, IMG_BASE_URL };


================================================
FILE: src/constants/.gitignore
================================================


================================================
FILE: src/element.js
================================================
import Vue from "vue";
// import "element-ui/lib/theme-chalk/index.css";

import ELEMENT from "element-ui";
import {
    Pagination,
    Dialog,
    Autocomplete,
    Dropdown,
    DropdownMenu,
    DropdownItem,
    Menu,
    Submenu,
    MenuItem,
    MenuItemGroup,
    Input,
    InputNumber,
    Radio,
    RadioGroup,
    RadioButton,
    Checkbox,
    CheckboxButton,
    CheckboxGroup,
    Switch,
    Select,
    Option,
    OptionGroup,
    Button,
    ButtonGroup,
    Table,
    TableColumn,
    DatePicker,
    TimeSelect,
    TimePicker,
    Popover,
    Tooltip,
    Breadcrumb,
    BreadcrumbItem,
    Form,
    FormItem,
    Tabs,
    TabPane,
    Tag,
    Tree,
    Alert,
    Slider,
    Icon,
    Row,
    Col,
    Upload,
    Progress,
    Badge,
    Card,
    Rate,
    Steps,
    Step,
    Carousel,
    CarouselItem,
    Collapse,
    CollapseItem,
    Cascader,
    ColorPicker,
    Transfer,
    Container,
    Header,
    Aside,
    Main,
    Footer,
    Loading,
    MessageBox,
    Message,
    Notification
} from "element-ui";

if (process.env.NODE_ENV === "development") {
    require("element-ui/lib/theme-chalk/index.css");
    Vue.use(ELEMENT);

    Vue.use(Pagination);
    Vue.use(Dialog);
    Vue.use(Autocomplete);
    Vue.use(Dropdown);
    Vue.use(DropdownMenu);
    Vue.use(DropdownItem);
    Vue.use(Menu);
    Vue.use(Submenu);
    Vue.use(MenuItem);
    Vue.use(MenuItemGroup);
    Vue.use(Input);
    Vue.use(InputNumber);
    Vue.use(Radio);
    Vue.use(RadioGroup);
    Vue.use(RadioButton);
    Vue.use(Checkbox);
    Vue.use(CheckboxButton);
    Vue.use(CheckboxGroup);
    Vue.use(Switch);
    Vue.use(Select);
    Vue.use(Option);
    Vue.use(OptionGroup);
    Vue.use(Button);
    Vue.use(ButtonGroup);
    Vue.use(Table);
    Vue.use(TableColumn);
    Vue.use(DatePicker);
    Vue.use(TimeSelect);
    Vue.use(TimePicker);
    Vue.use(Popover);
    Vue.use(Tooltip);
    Vue.use(Breadcrumb);
    Vue.use(BreadcrumbItem);
    Vue.use(Form);
    Vue.use(FormItem);
    Vue.use(Tabs);
    Vue.use(TabPane);
    Vue.use(Tag);
    Vue.use(Tree);
    Vue.use(Alert);
    Vue.use(Slider);
    Vue.use(Icon);
    Vue.use(Row);
    Vue.use(Col);
    Vue.use(Upload);
    Vue.use(Progress);
    Vue.use(Badge);
    Vue.use(Card);
    Vue.use(Rate);
    Vue.use(Steps);
    Vue.use(Step);
    Vue.use(Carousel);
    Vue.use(CarouselItem);
    Vue.use(Collapse);
    Vue.use(CollapseItem);
    Vue.use(Cascader);
    Vue.use(ColorPicker);
    Vue.use(Transfer);
    Vue.use(Container);
    Vue.use(Header);
    Vue.use(Aside);
    Vue.use(Main);
    Vue.use(Footer);

    Vue.use(Loading.directive);

    Vue.prototype.$loading = Loading.service;
    Vue.prototype.$msgbox = MessageBox;
    Vue.prototype.$alert = MessageBox.alert;
    Vue.prototype.$confirm = MessageBox.confirm;
    Vue.prototype.$prompt = MessageBox.prompt;
    Vue.prototype.$notify = Notification;
    Vue.prototype.$message = Message;
}


================================================
FILE: src/filtres/index.js
================================================
function pluralize(time, label) {
    if (time === 1) {
        return time + label;
    }
    return time + label + "s";
}
export function timeAgo(time) {
    const between = Date.now() / 1000 - Number(time);
    if (between < 3600) {
        return pluralize(~~(between / 60), " minute");
    } else if (between < 86400) {
        return pluralize(~~(between / 3600), " hour");
    } else {
        return pluralize(~~(between / 86400), " day");
    }
}

/**
 * @return {string}
 */
export function formatDateStr(date_str, fmt) {
    let date = new Date(date_str);
    if (isNaN(date.getDate())) {
        return "";
    }
    const o = {
        "M+": date.getMonth() + 1, //月份
        "d+": date.getDate(), //日
        "h+": date.getHours(), //小时
        "m+": date.getMinutes(), //分
        "s+": date.getSeconds(), //秒
        "q+": Math.floor((date.getMonth() + 3) / 3), //季度
        S: date.getMilliseconds() //毫秒
    };
    if (/(y+)/.test(fmt))
        fmt = fmt.replace(
            RegExp.$1,
            (date.getFullYear() + "").substr(4 - RegExp.$1.length)
        );
    for (let k in o)
        if (new RegExp("(" + k + ")").test(fmt))
            fmt = fmt.replace(
                RegExp.$1,
                RegExp.$1.length === 1
                    ? o[k]
                    : ("00" + o[k]).substr(("" + o[k]).length)
            );
    return fmt;
}

export function parseTime(time, cFormat) {
    if (arguments.length === 0) {
        return null;
    }

    if ((time + "").length === 10) {
        time = +time * 1000;
    }

    const format = cFormat || "{y}-{m}-{d} {h}:{i}:{s}";
    let date;
    if (typeof time === "object") {
        date = time;
    } else {
        date = new Date(parseInt(time));
    }
    const formatObj = {
        y: date.getFullYear(),
        m: date.getMonth() + 1,
        d: date.getDate(),
        h: date.getHours(),
        i: date.getMinutes(),
        s: date.getSeconds(),
        a: date.getDay()
    };
    const timeStr = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {
        let value = formatObj[key];
        if (key === "a")
            return ["一", "二", "三", "四", "五", "六", "日"][value - 1];
        if (result.length > 0 && value < 10) {
            value = "0" + value;
        }
        return value || 0;
    });
    return timeStr;
}

export function formatTime(time, option) {
    time = +time * 1000;
    const d = new Date(time);
    const now = Date.now();

    const diff = (now - d) / 1000;

    if (diff < 30) {
        return "刚刚";
    } else if (diff < 3600) {
        // less 1 hour
        return Math.ceil(diff / 60) + "分钟前";
    } else if (diff < 3600 * 24) {
        return Math.ceil(diff / 3600) + "小时前";
    } else if (diff < 3600 * 24 * 2) {
        return "1天前";
    }
    if (option) {
        return parseTime(time, option);
    } else {
        return (
            d.getMonth() +
            1 +
            "月" +
            d.getDate() +
            "日" +
            d.getHours() +
            "时" +
            d.getMinutes() +
            "分"
        );
    }
}

/*  数字 格式化 */
export function nFormatter(num, digits) {
    const si = [
        { value: 1e18, symbol: "E" },
        { value: 1e15, symbol: "P" },
        { value: 1e12, symbol: "T" },
        { value: 1e9, symbol: "G" },
        { value: 1e6, symbol: "M" },
        { value: 1e3, symbol: "k" }
    ];
    for (let i = 0; i < si.length; i++) {
        if (num >= si[i].value) {
            return (
                (num / si[i].value + 0.1)
                    .toFixed(digits)
                    .replace(/\.0+$|(\.[0-9]*[1-9])0+$/, "$1") + si[i].symbol
            );
        }
    }
    return num.toString();
}

export function html2Text(val) {
    const div = document.createElement("div");
    div.innerHTML = val;
    return div.textContent || div.innerText;
}

export function toThousandslsFilter(num) {
    return (+num || 0)
        .toString()
        .replace(/^-?\d+/g, m => m.replace(/(?=(?!\b)(\d{3})+$)/g, ","));
}

/**
 * 格式化文件大小
 * @param value
 * @returns {*}
 */
export function renderSize(value) {
    if (!value || value === null || value === "") {
        return "";
    }
    let unitArr = ["B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"];
    let srcsize = parseFloat(value);
    let index = Math.floor(Math.log(srcsize) / Math.log(1024));
    let size = srcsize / Math.pow(1024, index);
    size = size.toFixed(0); // 保留的小数位数
    return size + unitArr[index];
}


================================================
FILE: src/main.js
================================================
import "babel-polyfill"; // 解决Ie9
import Vue from "vue";
import App from "./App.vue";
import router from "./router/index";
import store from "./store/index";
import "./element";
import * as filters from "./filtres/index"; // 全局过滤器
import "./role"; // 权限

import "./mock"; // 模拟数据

import "./assets/icons/iconfont";
import IconSvg from "./components/common/IconSvg.vue"; // svg组件

// 注册全局组件(register global)
Vue.component("icon-svg", IconSvg);

// 注册全局实用程序过滤器(register global utility filters).
Object.keys(filters).forEach(key => {
    Vue.filter(key, filters[key]);
});

Vue.config.productionTip = false;
new Vue({
    router,
    store,
    render: h => h(App)
}).$mount("#app");


================================================
FILE: src/mock/ad.js
================================================
const index = {
    total: 17,
    data: {
        total: 1,
        list: [
            {
                adId: 1,
                title: "阿范德萨",
                describe: "撒地方士大夫",
                pic: "ttttt",
                jumpType: 0,
                jumpUrl: "sss",
                iosUrl: "",
                androidUrl: "",
                wxaAppid: "",
                channelType: 1,
                channelList: ["yin", "33"],
                androidVersionType: 0,
                androidVersionList: [],
                iosVersionType: 0,
                iosVersionList: [],
                newShowStartNum: 0,
                newShowMaxNum: 0,
                oldShowStartNum: 0,
                oldShowMaxNum: 0,
                startTime: "2019-01-08 00:00:00",
                endTime: "2019-01-10 00:00:00",
                eventName: "",
                status: 1,
                picUrl: "https://res.ishiguangji.cn/ttttt"
            },
            {
                adId: 2,
                title: "ffff",
                describe: "fff",
                pic: "ff",
                jumpType: 0,
                jumpUrl: "",
                iosUrl: "",
                androidUrl: "",
                wxaAppid: "",
                channelType: 0,
                channelList: [],
                androidVersionType: 0,
                androidVersionList: [],
                iosVersionType: 0,
                iosVersionList: [],
                newShowStartNum: 0,
                newShowMaxNum: 0,
                oldShowStartNum: 0,
                oldShowMaxNum: 0,
                startTime: null,
                endTime: null,
                eventName: "",
                status: 0,
                picUrl: "https://res.ishiguangji.cn/ff"
            },
            {
                adId: 3,
                title: "fvvs",
                describe: "vvv",
                pic: "dd",
                jumpType: 0,
                jumpUrl: "",
                iosUrl: "",
                androidUrl: "",
                wxaAppid: "",
                channelType: 0,
                channelList: [],
                androidVersionType: 0,
                androidVersionList: [],
                iosVersionType: 0,
                iosVersionList: [],
                newShowStartNum: 0,
                newShowMaxNum: 0,
                oldShowStartNum: 0,
                oldShowMaxNum: 0,
                startTime: null,
                endTime: null,
                eventName: "",
                status: 0,
                picUrl: "https://res.ishiguangji.cn/dd"
            },
            {
                adId: 4,
                title: "fffxxxx",
                describe: "vvv",
                pic: "bb",
                jumpType: 0,
                jumpUrl: "",
                iosUrl: "",
                androidUrl: "",
                wxaAppid: "",
                channelType: 0,
                channelList: [],
                androidVersionType: 0,
                androidVersionList: [],
                iosVersionType: 0,
                iosVersionList: [],
                newShowStartNum: 0,
                newShowMaxNum: 0,
                oldShowStartNum: 0,
                oldShowMaxNum: 0,
                startTime: null,
                endTime: null,
                eventName: "",
                status: 0,
                picUrl: "https://res.ishiguangji.cn/bb"
            }
        ]
    }
};

const save = {
    data: {
        adId: 5
    }
};

const edit = {
    code: 0,
    message: "success"
};

const del = {
    code: 0,
    message: "success"
};

export default {
    index,
    save,
    edit,
    del
};


================================================
FILE: src/mock/adSite.js
================================================
const index = {
    data: {
        total: 1,
        list: [
            {
                siteId: 1,
                siteName: "测试12222111",
                describe: "支持android和ios",
                adIds: [4, 1],
                ads: [
                    {
                        adId: 4,
                        title: "fffxxxx",
                        describe: "vvv",
                        status: 0
                    },
                    {
                        adId: 1,
                        title: "阿范德萨",
                        describe: "撒地方士大夫",
                        status: 1
                    }
                ]
            },
            {
                siteId: 2,
                siteName: "车是是是",
                describe: "车是是是发发发",
                adIds: [1, 2, 4],
                ads: [
                    {
                        adId: 1,
                        title: "阿范德萨",
                        describe: "撒地方士大夫",
                        status: 1
                    },
                    {
                        adId: 2,
                        title: "ffff",
                        describe: "fff",
                        status: 0
                    },
                    {
                        adId: 4,
                        title: "fffxxxx",
                        describe: "vvv",
                        status: 0
                    }
                ]
            }
        ]
    }
};

const adList = {
    data: {
        total: 1,
        list: [
            {
                adId: 1,
                title: "阿范德萨",
                describe: "撒地方士大夫",
                status: 1
            },
            {
                adId: 6,
                title: "侧嗯嗯得到的",
                describe: "车次多的的",
                status: 1
            },
            {
                adId: 7,
                title: "hi额接口数据东方丽景",
                describe: "反倒是打发士大夫撒",
                status: 1
            }
        ]
    }
};

const save = {
    data: {
        siteId: 2
    }
};

const edit = {
    code: 0,
    message: "success"
};

const del = {
    code: 0,
    message: "success"
};

export default {
    index,
    adList,
    save,
    edit,
    del
};


================================================
FILE: src/mock/authAdmin.js
================================================
/**
 * Created by lk on 18/4/28.
 */

const index = {
    data: {
        total: 1,
        list: [
            {
                id: 1,
                username: "admin",
                avatar: null,
                tel: "admin",
                email: "lmxdawn@gmail.com",
                status: 1,
                lastLoginIp: "127.0.0.1",
                lastLoginTime: 1493103488,
                createTime: 1487868050,
                roles: []
            }
        ]
    }
};

const roleList = {
    data: {
        total: 1,
        list: [
            {
                id: 1,
                name: "超级管理员"
            }
        ]
    }
};

const save = {
    data: {
        id: "2",
        username: "test",
        password: "",
        status: "1",
        roles: [1]
    }
};

const edit = {
    code: 0,
    message: "success"
};

const del = {
    code: 0,
    message: "success"
};

export default {
    index,
    roleList,
    save,
    edit,
    del
};


================================================
FILE: src/mock/authPermissionRule.js
================================================
/**
 * Created by lk on 18/4/28.
 */

const index = {
    data: {
        list: [
            {
                id: 1,
                pid: 0,
                name: "user_manage",
                title: "用户管理",
                status: 1,
                condition: "",
                listorder: 999,
                children: [
                    {
                        id: 2,
                        pid: 1,
                        name: "user_manage/admin",
                        title: "管理组",
                        status: 1,
                        condition: "",
                        listorder: 999,
                        children: [
                            {
                                id: 3,
                                pid: 2,
                                name: "admin/admin/index",
                                title: "管理员管理",
                                status: 1,
                                condition: "",
                                listorder: 999,
                                children: [
                                    {
                                        id: 4,
                                        pid: 3,
                                        name: "admin/admin/save",
                                        title: "添加管理员",
                                        status: 1,
                                        condition: "",
                                        listorder: 999,
                                        children: [],
                                        level: 4,
                                        html:
                                            "&nbsp;&nbsp;│&nbsp;│&nbsp;├&nbsp;"
                                    },
                                    {
                                        id: 5,
                                        pid: 3,
                                        name: "admin/admin/edit",
                                        title: "编辑管理员",
                                        status: 1,
                                        condition: "",
                                        listorder: 999,
                                        children: [],
                                        level: 4,
                                        html:
                                            "&nbsp;&nbsp;│&nbsp;│&nbsp;├&nbsp;"
                                    },
                                    {
                                        id: 6,
                                        pid: 3,
                                        name: "admin/admin/delete",
                                        title: "删除管理员",
                                        status: 1,
                                        condition: "",
                                        listorder: 999,
                                        children: [],
                                        level: 4,
                                        html:
                                            "&nbsp;&nbsp;│&nbsp;│&nbsp;├&nbsp;"
                                    }
                                ],
                                level: 3,
                                html: "&nbsp;&nbsp;│&nbsp;├&nbsp;"
                            },
                            {
                                id: 7,
                                pid: 2,
                                name: "admin/role/index",
                                title: "角色管理",
                                status: 1,
                                condition: "",
                                listorder: 999,
                                children: [
                                    {
                                        id: 8,
                                        pid: 7,
                                        name: "admin/role/save",
                                        title: "添加角色",
                                        status: 1,
                                        condition: "",
                                        listorder: 999,
                                        children: [],
                                        level: 4,
                                        html:
                                            "&nbsp;&nbsp;│&nbsp;│&nbsp;├&nbsp;"
                                    },
                                    {
                                        id: 9,
                                        pid: 7,
                                        name: "admin/role/edit",
                                        title: "编辑角色",
                                        status: 1,
                                        condition: "",
                                        listorder: 999,
                                        children: [],
                                        level: 4,
                                        html:
                                            "&nbsp;&nbsp;│&nbsp;│&nbsp;├&nbsp;"
                                    },
                                    {
                                        id: 10,
                                        pid: 7,
                                        name: "admin/role/delete",
                                        title: "删除角色",
                                        status: 1,
                                        condition: "",
                                        listorder: 999,
                                        children: [],
                                        level: 4,
                                        html:
                                            "&nbsp;&nbsp;│&nbsp;│&nbsp;├&nbsp;"
                                    },
                                    {
                                        id: 11,
                                        pid: 7,
                                        name: "admin/role/auth",
                                        title: "角色授权",
                                        status: 1,
                                        condition: "",
                                        listorder: 999,
                                        children: [],
                                        level: 4,
                                        html:
                                            "&nbsp;&nbsp;│&nbsp;│&nbsp;├&nbsp;"
                                    }
                                ],
                                level: 3,
                                html: "&nbsp;&nbsp;│&nbsp;├&nbsp;"
                            },
                            {
                                id: 12,
                                pid: 2,
                                name: "admin/authrule/index",
                                title: "权限管理",
                                status: 1,
                                condition: "",
                                listorder: 999,
                                children: [
                                    {
                                        id: 13,
                                        pid: 12,
                                        name: "admin/authrule/save",
                                        title: "添加权限",
                                        status: 1,
                                        condition: "",
                                        listorder: 999,
                                        children: [],
                                        level: 4,
                                        html:
                                            "&nbsp;&nbsp;│&nbsp;│&nbsp;├&nbsp;"
                                    },
                                    {
                                        id: 14,
                                        pid: 12,
                                        name: "admin/authrule/edit",
                                        title: "编辑权限",
                                        status: 1,
                                        condition: "",
                                        listorder: 999,
                                        children: [],
                                        level: 4,
                                        html:
                                            "&nbsp;&nbsp;│&nbsp;│&nbsp;├&nbsp;"
                                    },
                                    {
                                        id: 15,
                                        pid: 12,
                                        name: "admin/authrule/delete",
                                        title: "删除权限",
                                        status: 1,
                                        condition: "",
                                        listorder: 999,
                                        children: [],
                                        level: 4,
                                        html:
                                            "&nbsp;&nbsp;│&nbsp;│&nbsp;├&nbsp;"
                                    }
                                ],
                                level: 3,
                                html: "&nbsp;&nbsp;│&nbsp;├&nbsp;"
                            }
                        ],
                        level: 2,
                        html: "&nbsp;&nbsp;├&nbsp;"
                    }
                ],
                level: 1,
                html: "&nbsp;"
            },
            {
                id: 16,
                pid: 0,
                name: "setting",
                title: "设置",
                status: 1,
                condition: "",
                listorder: 999,
                children: [
                    {
                        id: 17,
                        pid: 16,
                        name: "admin/wxconf/index",
                        title: "小程序",
                        status: 1,
                        condition: "",
                        listorder: 999,
                        children: [
                            {
                                id: 18,
                                pid: 17,
                                name: "admin/wxconf/save",
                                title: "保存修改",
                                status: 1,
                                condition: "",
                                listorder: 999,
                                children: [],
                                level: 3,
                                html: "&nbsp;&nbsp;│&nbsp;└&nbsp;"
                            }
                        ],
                        level: 2,
                        html: "&nbsp;&nbsp;├&nbsp;"
                    }
                ],
                level: 1,
                html: "&nbsp;"
            }
        ]
    }
};

const save = {
    data: {
        id: 999
    }
};

const edit = {
    code: 0,
    message: "success"
};

const del = { code: 0, message: "success" };

export default {
    index,
    save,
    edit,
    del
};


================================================
FILE: src/mock/authRole.js
================================================
/**
 * Created by lk on 18/4/28.
 */

const index = {
    data: {
        total: 1,
        list: [
            {
                id: 1,
                name: "超级管理员",
                status: 1,
                remark: "拥有网站最高管理员权限!",
                createTime: 1329633709,
                listorder: 0
            }
        ]
    }
};

const save = {
    data: {
        id: 2
    }
};

const edit = { code: 0, message: "success" };

const del = { code: 0, message: "success" };
const authList = {
    data: {
        authList: [
            {
                id: 1,
                pid: 0,
                name: "userManage",
                title: "用户管理",
                status: 1,
                condition: "",
                listorder: 999,
                children: [
                    {
                        id: 2,
                        pid: 1,
                        name: "userManage/admin",
                        title: "管理组",
                        status: 1,
                        condition: "",
                        listorder: 999,
                        children: [
                            {
                                id: 3,
                                pid: 2,
                                name: "admin/admin/index",
                                title: "管理员管理",
                                status: 1,
                                condition: "",
                                listorder: 999,
                                children: [
                                    {
                                        id: 4,
                                        pid: 3,
                                        name: "admin/admin/save",
                                        title: "添加管理员",
                                        status: 1,
                                        condition: "",
                                        listorder: 999,
                                        children: []
                                    },
                                    {
                                        id: 5,
                                        pid: 3,
                                        name: "admin/admin/edit",
                                        title: "编辑管理员",
                                        status: 1,
                                        condition: "",
                                        listorder: 999,
                                        children: []
                                    },
                                    {
                                        id: 6,
                                        pid: 3,
                                        name: "admin/admin/delete",
                                        title: "删除管理员",
                                        status: 1,
                                        condition: "",
                                        listorder: 999,
                                        children: []
                                    }
                                ]
                            },
                            {
                                id: 7,
                                pid: 2,
                                name: "admin/role/index",
                                title: "角色管理",
                                status: 1,
                                condition: "",
                                listorder: 999,
                                children: [
                                    {
                                        id: 8,
                                        pid: 7,
                                        name: "admin/role/save",
                                        title: "添加角色",
                                        status: 1,
                                        condition: "",
                                        listorder: 999,
                                        children: []
                                    },
                                    {
                                        id: 9,
                                        pid: 7,
                                        name: "admin/role/edit",
                                        title: "编辑角色",
                                        status: 1,
                                        condition: "",
                                        listorder: 999,
                                        children: []
                                    },
                                    {
                                        id: 10,
                                        pid: 7,
                                        name: "admin/role/delete",
                                        title: "删除角色",
                                        status: 1,
                                        condition: "",
                                        listorder: 999,
                                        children: []
                                    },
                                    {
                                        id: 11,
                                        pid: 7,
                                        name: "admin/role/auth",
                                        title: "角色授权",
                                        status: 1,
                                        condition: "",
                                        listorder: 999,
                                        children: []
                                    }
                                ]
                            },
                            {
                                id: 12,
                                pid: 2,
                                name: "admin/authrule/index",
                                title: "权限管理",
                                status: 1,
                                condition: "",
                                listorder: 999,
                                children: [
                                    {
                                        id: 13,
                                        pid: 12,
                                        name: "admin/authrule/save",
                                        title: "添加权限",
                                        status: 1,
                                        condition: "",
                                        listorder: 999,
                                        children: []
                                    },
                                    {
                                        id: 14,
                                        pid: 12,
                                        name: "admin/authrule/edit",
                                        title: "编辑权限",
                                        status: 1,
                                        condition: "",
                                        listorder: 999,
                                        children: []
                                    },
                                    {
                                        id: 15,
                                        pid: 12,
                                        name: "admin/authrule/delete",
                                        title: "删除权限",
                                        status: 1,
                                        condition: "",
                                        listorder: 999,
                                        children: []
                                    }
                                ]
                            }
                        ]
                    }
                ]
            },
            {
                id: 16,
                pid: 0,
                name: "setting",
                title: "设置",
                status: 1,
                condition: "",
                listorder: 999,
                children: [
                    {
                        id: 17,
                        pid: 16,
                        name: "admin/wxconf/index",
                        title: "小程序",
                        status: 1,
                        condition: "",
                        listorder: 999,
                        children: [
                            {
                                id: 18,
                                pid: 17,
                                name: "admin/wxconf/save",
                                title: "保存修改",
                                status: 1,
                                condition: "",
                                listorder: 999,
                                children: []
                            }
                        ]
                    }
                ]
            }
        ],
        checkedKeys: []
    }
};

const auth = { code: 0, message: "success" };

export default {
    index,
    save,
    edit,
    del,
    authList,
    auth
};


================================================
FILE: src/mock/fileResource.js
================================================
/**
 * Created by lk on 18/4/28.
 */

// 资源列表
const index = {
    data: {
        total: 10,
        list: [
            {
                id: 1,
                type: 0,
                filename: "home_many.png",
                path:
                    "resources/image/20180529/0b429c0d31011ec46f2328ac0ca29c15.png",
                size: 9705,
                ext: "png",
                createTime: false,
                url:
                    "http://www.test.com/uploads/resources/image/20180529/0b429c0d31011ec46f2328ac0ca29c15.png"
            },
            {
                id: 2,
                type: 0,
                filename: "homeManyPlay.png",
                path:
                    "resources/image/20180529/2988116bffc258321a48909f48841028.png",
                size: 9665,
                ext: "png",
                createTime: 1527601051,
                url:
                    "http://www.test.com/uploads/resources/image/20180529/2988116bffc258321a48909f48841028.png"
            }
        ]
    }
};

// 上传资源
const add = {
    data: {
        id: 11
    }
};

export default {
    index,
    add
};


================================================
FILE: src/mock/fileResourceTag.js
================================================
/**
 * Created by lk on 18/4/28.
 */

// 资源分组列表
const index = {
    data: {
        total: 1,
        list: [
            {
                id: 1,
                tag: "sss"
            }
        ]
    }
};

// 新建资源分组
const add = {
    data: {
        id: 2
    }
};

export default {
    index,
    add
};


================================================
FILE: src/mock/index.js
================================================
/**
 * Created by lk on 18/4/28.
 */

import Mock from "mockjs";

import login from "./
Download .txt
gitextract_k7zx32wr/

├── .editorconfig
├── .eslintrc.js
├── .gitignore
├── .postcssrc.js
├── LICENSE
├── README.md
├── babel.config.js
├── jest.config.js
├── package.json
├── public/
│   ├── index-dev.html
│   ├── index.html
│   └── tinymce4.7.5/
│       ├── langs/
│       │   └── zh_CN.js
│       └── plugins/
│           ├── codesample/
│           │   └── css/
│           │       └── prism.css
│           └── visualblocks/
│               └── css/
│                   └── visualblocks.css
├── src/
│   ├── App.vue
│   ├── api/
│   │   ├── ad/
│   │   │   ├── ad.js
│   │   │   └── adSite.js
│   │   ├── auth/
│   │   │   ├── authAdmin.js
│   │   │   ├── authPermissionRule.js
│   │   │   ├── authRole.js
│   │   │   └── login.js
│   │   └── file/
│   │       ├── fileResource.js
│   │       ├── fileResourceTag.js
│   │       └── upload.js
│   ├── assets/
│   │   └── icons/
│   │       ├── demo.css
│   │       ├── demo_fontclass.html
│   │       ├── demo_symbol.html
│   │       ├── demo_unicode.html
│   │       ├── iconfont.css
│   │       └── iconfont.js
│   ├── components/
│   │   ├── File/
│   │   │   ├── Upload.vue
│   │   │   └── Upload1.vue
│   │   ├── HelloWorld.vue
│   │   ├── Tinymce/
│   │   │   ├── index.vue
│   │   │   ├── plugins.js
│   │   │   └── toolbar.js
│   │   └── common/
│   │       ├── FileResource.vue
│   │       └── IconSvg.vue
│   ├── config/
│   │   └── app.js
│   ├── constants/
│   │   └── .gitignore
│   ├── element.js
│   ├── filtres/
│   │   └── index.js
│   ├── main.js
│   ├── mock/
│   │   ├── ad.js
│   │   ├── adSite.js
│   │   ├── authAdmin.js
│   │   ├── authPermissionRule.js
│   │   ├── authRole.js
│   │   ├── fileResource.js
│   │   ├── fileResourceTag.js
│   │   ├── index.js
│   │   ├── login.js
│   │   └── upload.js
│   ├── role.js
│   ├── router/
│   │   └── index.js
│   ├── store/
│   │   ├── actions.js
│   │   ├── getters.js
│   │   ├── index.js
│   │   ├── modules/
│   │   │   ├── admin.js
│   │   │   └── app.js
│   │   └── mutation-types.js
│   ├── styles/
│   │   ├── base.scss
│   │   └── mixin.scss
│   ├── utils/
│   │   ├── auth.js
│   │   ├── axios.js
│   │   ├── haiZiToPinYin.js
│   │   └── store.js
│   └── views/
│       ├── adManage/
│       │   ├── ad.vue
│       │   └── adSite.vue
│       ├── components/
│       │   ├── tinymce-demo.vue
│       │   ├── upload-demo.vue
│       │   └── uploadList.vue
│       ├── error/
│       │   ├── err401.vue
│       │   ├── err404.vue
│       │   └── err500.vue
│       ├── home/
│       │   ├── SidebarItem.vue
│       │   ├── TabsView.vue
│       │   ├── index-3.0.1.vue
│       │   ├── index.vue
│       │   └── main.vue
│       ├── login/
│       │   └── index.vue
│       ├── profile/
│       │   └── index.vue
│       └── userManage/
│           └── admin/
│               ├── authAdmin.vue
│               ├── authPermissionRule.vue
│               ├── authRole.vue
│               └── router.vue
├── tests/
│   └── unit/
│       ├── .eslintrc.js
│       └── HelloWorld.spec.js
└── vue.config.js
Download .txt
SYMBOL INDEX (83 symbols across 18 files)

FILE: src/api/ad/ad.js
  function adList (line 9) | function adList(query) {
  function adSave (line 18) | function adSave(data, formName, method = "post") {
  function adDelete (line 28) | function adDelete(data) {

FILE: src/api/ad/adSite.js
  function adSiteList (line 9) | function adSiteList(query) {
  function adSiteAdList (line 18) | function adSiteAdList(data) {
  function adSiteSave (line 27) | function adSiteSave(data, formName, method = "post") {
  function adSiteDelete (line 38) | function adSiteDelete(data) {

FILE: src/api/auth/authAdmin.js
  function authAdminList (line 7) | function authAdminList(query) {
  function authAdminRoleList (line 16) | function authAdminRoleList(query) {
  function authAdminSave (line 25) | function authAdminSave(data, formName, method = "post") {
  function authAdminDelete (line 38) | function authAdminDelete(data) {

FILE: src/api/auth/authPermissionRule.js
  function authPermissionRuleList (line 9) | function authPermissionRuleList(query) {
  function authPermissionRuleSave (line 18) | function authPermissionRuleSave(data, formName, method = "post") {
  function authPermissionRuleDelete (line 31) | function authPermissionRuleDelete(data) {

FILE: src/api/auth/authRole.js
  function authRoleList (line 7) | function authRoleList(query) {
  function authRoleAuthList (line 16) | function authRoleAuthList(query) {
  function authRoleAuth (line 25) | function authRoleAuth(data) {
  function authRoleSave (line 34) | function authRoleSave(data, formName, method = "post") {
  function authRoleDelete (line 45) | function authRoleDelete(data) {

FILE: src/api/auth/login.js
  function userInfo (line 6) | function userInfo(id, token) {
  function loginName (line 14) | function loginName(userName, pwd) {
  function logout (line 22) | function logout(uid, token) {
  function password (line 30) | function password(data) {

FILE: src/api/file/fileResource.js
  function fileResourceList (line 7) | function fileResourceList(query) {
  function fileResourceAdd (line 15) | function fileResourceAdd(data) {

FILE: src/api/file/fileResourceTag.js
  function fileResourceTagList (line 7) | function fileResourceTagList(query) {
  function fileResourceTagAdd (line 16) | function fileResourceTagAdd(data) {

FILE: src/api/file/upload.js
  function qiuNiuUpToken (line 7) | function qiuNiuUpToken(query) {
  function createFile (line 16) | function createFile(url, formdata) {

FILE: src/assets/icons/iconfont.js
  function IEContentLoaded (line 2) | function IEContentLoaded(w,fn){var d=w.document,done=false,init=function...
  function appendSvg (line 2) | function appendSvg(){var div,svg;div=document.createElement("div");div.i...

FILE: src/config/app.js
  constant BASE_URL (line 9) | let BASE_URL = process.env.VUE_APP_API_BASE;
  constant ROUTER_MODE (line 11) | let ROUTER_MODE = "";
  constant IMG_BASE_URL (line 12) | let IMG_BASE_URL = BASE_URL;

FILE: src/filtres/index.js
  function pluralize (line 1) | function pluralize(time, label) {
  function timeAgo (line 7) | function timeAgo(time) {
  function formatDateStr (line 21) | function formatDateStr(date_str, fmt) {
  function parseTime (line 51) | function parseTime(time, cFormat) {
  function formatTime (line 88) | function formatTime(time, option) {
  function nFormatter (line 123) | function nFormatter(num, digits) {
  function html2Text (line 144) | function html2Text(val) {
  function toThousandslsFilter (line 150) | function toThousandslsFilter(num) {
  function renderSize (line 161) | function renderSize(value) {

FILE: src/role.js
  function hasRole (line 9) | function hasRole(authRules, permissionAuthRules) {
  function hasRouterRole (line 23) | function hasRouterRole(authRules, route) {
  function filterAsyncRouter (line 41) | function filterAsyncRouter(asyncRouterMap, authRules) {

FILE: src/store/modules/admin.js
  method loginName (line 38) | loginName({ commit }, userInfo) {
  method userInfo (line 63) | userInfo({ commit }) {
  method loginOut (line 82) | loginOut({ commit }) {
  method fedLogout (line 98) | fedLogout({ commit }) {
  method filterRouter (line 112) | filterRouter({ commit }, data) {
  method [types.RECEIVE_ADMIN_ID] (line 122) | [types.RECEIVE_ADMIN_ID](state, adminId) {
  method [types.RECEIVE_ADMIN_TOKEN] (line 130) | [types.RECEIVE_ADMIN_TOKEN](state, token) {
  method [types.RECEIVE_ADMIN_NAME] (line 138) | [types.RECEIVE_ADMIN_NAME](state, userName) {
  method [types.RECEIVE_ADMIN_AVATAR] (line 141) | [types.RECEIVE_ADMIN_AVATAR](state, avatar) {
  method [types.RECEIVE_ADMIN_AUTH_RULES] (line 144) | [types.RECEIVE_ADMIN_AUTH_RULES](state, authRules) {
  method [types.RECEIVE_ROUTERS] (line 147) | [types.RECEIVE_ROUTERS](state, routers) {

FILE: src/store/modules/app.js
  method ToggleSideBar (line 19) | ToggleSideBar({ commit }) {
  method ShowSideBar (line 22) | ShowSideBar({ commit }) {
  method addVisitedViews (line 25) | addVisitedViews({ commit }, view) {
  method delVisitedViews (line 28) | delVisitedViews({ commit, state }, view) {
  method [types.TOGGLE_SIDEBAR] (line 38) | [types.TOGGLE_SIDEBAR](state) {
  method [types.SHOW_SIDEBAR] (line 46) | [types.SHOW_SIDEBAR](state) {
  method [types.ADD_VISITED_VIEWS] (line 52) | [types.ADD_VISITED_VIEWS](state, view) {
  method [types.DEL_VISITED_VIEWS] (line 56) | [types.DEL_VISITED_VIEWS](state, view) {

FILE: src/store/mutation-types.js
  constant TOGGLE_SIDEBAR (line 2) | const TOGGLE_SIDEBAR = "TOGGLE_SIDEBAR";
  constant SHOW_SIDEBAR (line 3) | const SHOW_SIDEBAR = "SHOW_SIDEBAR";
  constant ADD_VISITED_VIEWS (line 4) | const ADD_VISITED_VIEWS = "ADD_VISITED_VIEWS";
  constant DEL_VISITED_VIEWS (line 5) | const DEL_VISITED_VIEWS = "DEL_VISITED_VIEWS";
  constant RECEIVE_ADMIN_ID (line 8) | const RECEIVE_ADMIN_ID = "RECEIVE_ADMIN_ID";
  constant RECEIVE_ADMIN_TOKEN (line 9) | const RECEIVE_ADMIN_TOKEN = "RECEIVE_ADMIN_TOKEN";
  constant RECEIVE_ADMIN_NAME (line 10) | const RECEIVE_ADMIN_NAME = "RECEIVE_ADMIN_NAME";
  constant RECEIVE_ADMIN_AVATAR (line 11) | const RECEIVE_ADMIN_AVATAR = "RECEIVE_ADMIN_AVATAR";
  constant RECEIVE_ADMIN_AUTH_RULES (line 12) | const RECEIVE_ADMIN_AUTH_RULES = "RECEIVE_ADMIN_AUTH_RULES";
  constant RECEIVE_ROUTERS (line 13) | const RECEIVE_ROUTERS = "RECEIVE_ROUTERS";

FILE: src/utils/auth.js
  function getToken (line 7) | function getToken() {
  function setToken (line 12) | function setToken(sid) {
  function removeToken (line 17) | function removeToken() {
  function getAdminId (line 22) | function getAdminId() {
  function setAdminId (line 27) | function setAdminId(id) {
  function removeAdminId (line 32) | function removeAdminId() {

FILE: src/utils/haiZiToPinYin.js
  function handle (line 6621) | function handle(char, modifierName) {
  function py (line 6638) | function py(value, modifierName) {
Condensed preview — 89 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (543K chars).
[
  {
    "path": ".editorconfig",
    "chars": 147,
    "preview": "root = true\n\n[*]\ncharset = utf-8\nindent_style = space\nindent_size = 4\nend_of_line = lf\ninsert_final_newline = true\ntrim_"
  },
  {
    "path": ".eslintrc.js",
    "chars": 375,
    "preview": "module.exports = {\n  root: true,\n  env: {\n    node: true\n  },\n  'extends': [\n    'plugin:vue/essential',\n    '@vue/prett"
  },
  {
    "path": ".gitignore",
    "chars": 221,
    "preview": ".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.lo"
  },
  {
    "path": ".postcssrc.js",
    "chars": 58,
    "preview": "module.exports = {\n  plugins: {\n    autoprefixer: {}\n  }\n}"
  },
  {
    "path": "LICENSE",
    "chars": 1064,
    "preview": "MIT License\n\nCopyright (c) 2018 lmxdawn\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof"
  },
  {
    "path": "README.md",
    "chars": 9249,
    "preview": "<p align=\"center\">\n  <img width=\"320\" src=\"https://lmxdawn.github.io/images/lmxdawn.png\">\n</p>\n\n<p align=\"center\">\n  <a "
  },
  {
    "path": "babel.config.js",
    "chars": 48,
    "preview": "module.exports = {\n    presets: [\"@vue/app\"]\n};\n"
  },
  {
    "path": "jest.config.js",
    "chars": 506,
    "preview": "module.exports = {\n    moduleFileExtensions: [\"js\", \"jsx\", \"json\", \"vue\"],\n    transform: {\n        \"^.+\\\\.vue$\": \"vue-j"
  },
  {
    "path": "package.json",
    "chars": 1137,
    "preview": "{\n  \"name\": \"my-project\",\n  \"version\": \"0.1.0\",\n  \"private\": true,\n  \"scripts\": {\n    \"serve\": \"vue-cli-service serve\",\n"
  },
  {
    "path": "public/index-dev.html",
    "chars": 423,
    "preview": "<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <"
  },
  {
    "path": "public/index.html",
    "chars": 1394,
    "preview": "<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <"
  },
  {
    "path": "public/tinymce4.7.5/langs/zh_CN.js",
    "chars": 9928,
    "preview": "tinymce.addI18n('zh_CN',{\n\"Cut\": \"\\u526a\\u5207\",\n\"Heading 5\": \"\\u6807\\u98985\",\n\"Header 2\": \"\\u6807\\u98982\",\n\"Your browse"
  },
  {
    "path": "public/tinymce4.7.5/plugins/codesample/css/prism.css",
    "chars": 2334,
    "preview": "/* http://prismjs.com/download.html?themes=prism&languages=markup+css+clike+javascript */\n/**\n * prism.js default theme "
  },
  {
    "path": "public/tinymce4.7.5/plugins/visualblocks/css/visualblocks.css",
    "chars": 5473,
    "preview": ".mce-visualblocks p {\n  padding-top: 10px;\n  border: 1px dashed #BBB;\n  margin-left: 3px;\n  background-image: url(data:i"
  },
  {
    "path": "src/App.vue",
    "chars": 307,
    "preview": "<template>\n    <div id=\"app\">\n        <router-view/>\n    </div>\n</template>\n\n<script>\nexport default {\n    name: \"app\"\n}"
  },
  {
    "path": "src/api/ad/ad.js",
    "chars": 615,
    "preview": "/**\n * Created by lk on 17/6/4.\n */\nimport axios from \"../../utils/axios\";\n\n// 谁最懂我相关\n\n// 列表\nexport function adList(quer"
  },
  {
    "path": "src/api/ad/adSite.js",
    "chars": 799,
    "preview": "/**\n * Created by lk on 17/6/4.\n */\nimport axios from \"../../utils/axios\";\n\n// 谁最懂我相关\n\n// 列表\nexport function adSiteList("
  },
  {
    "path": "src/api/auth/authAdmin.js",
    "chars": 853,
    "preview": "/**\n * Created by lk on 17/6/4.\n */\nimport axios from \"../../utils/axios\";\n\n// 获取列表\nexport function authAdminList(query)"
  },
  {
    "path": "src/api/auth/authPermissionRule.js",
    "chars": 756,
    "preview": "/**\n * Created by lk on 17/6/4.\n */\nimport axios from \"../../utils/axios\";\n\n// 权限管理\n\n// 获取列表\nexport function authPermiss"
  },
  {
    "path": "src/api/auth/authRole.js",
    "chars": 967,
    "preview": "/**\n * Created by lk on 17/6/4.\n */\nimport axios from \"../../utils/axios\";\n\n// 获取列表\nexport function authRoleList(query) "
  },
  {
    "path": "src/api/auth/login.js",
    "chars": 722,
    "preview": "/**\n * Created by lk on 17/6/4.\n */\nimport axios from \"../../utils/axios\";\n// 获取信息\nexport function userInfo(id, token) {"
  },
  {
    "path": "src/api/file/fileResource.js",
    "chars": 382,
    "preview": "/**\n * 资源管理相关\n */\nimport axios from \"../../utils/axios\";\n\n// 列表\nexport function fileResourceList(query) {\n    return axi"
  },
  {
    "path": "src/api/file/fileResourceTag.js",
    "chars": 399,
    "preview": "/**\n * 资源分组相关\n */\nimport axios from \"../../utils/axios\";\n\n// 列表\nexport function fileResourceTagList(query) {\n    return "
  },
  {
    "path": "src/api/file/upload.js",
    "chars": 383,
    "preview": "/**\n * 上传相关\n */\nimport axios from \"../../utils/axios\";\n\n// 获取七牛上传 upToken\nexport function qiuNiuUpToken(query) {\n    ret"
  },
  {
    "path": "src/assets/icons/demo.css",
    "chars": 5746,
    "preview": "*{margin: 0;padding: 0;list-style: none;}\n/*\nKISSY CSS Reset\n理念:1. reset 的目的不是清除浏览器的默认样式,这仅是部分工作。清除和重置是紧密不可分的。\n2. reset "
  },
  {
    "path": "src/assets/icons/demo_fontclass.html",
    "chars": 5568,
    "preview": "\n<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"utf-8\"/>\n    <title>IconFont</title>\n    <link rel=\"stylesheet\" href=\""
  },
  {
    "path": "src/assets/icons/demo_symbol.html",
    "chars": 8114,
    "preview": "\n<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"utf-8\"/>\n    <title>IconFont</title>\n    <link rel=\"stylesheet\" href=\""
  },
  {
    "path": "src/assets/icons/demo_unicode.html",
    "chars": 6914,
    "preview": "\n<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"utf-8\"/>\n    <title>IconFont</title>\n    <link rel=\"stylesheet\" href=\""
  },
  {
    "path": "src/assets/icons/iconfont.css",
    "chars": 8570,
    "preview": "\n@font-face {font-family: \"iconfont\";\n  src: url('iconfont.eot?t=1531114397320'); /* IE9*/\n  src: url('iconfont.eot?t=15"
  },
  {
    "path": "src/assets/icons/iconfont.js",
    "chars": 35458,
    "preview": "/* eslint-disable */\n(function(window){var svgSprite='<svg><symbol id=\"icon-tongyong\" viewBox=\"0 0 1024 1024\"><path d=\"M"
  },
  {
    "path": "src/components/File/Upload.vue",
    "chars": 10702,
    "preview": "<template>\n    <div class=\"upload-container\">\n        <el-button :style=\"{background:color,borderColor:color}\"\n         "
  },
  {
    "path": "src/components/File/Upload1.vue",
    "chars": 6791,
    "preview": "<template>\n    <div class=\"upload-container\">\n        <el-button :style=\"{background:color,borderColor:color}\"\n         "
  },
  {
    "path": "src/components/HelloWorld.vue",
    "chars": 1902,
    "preview": "<template>\n  <div class=\"hello\">\n    <h1>{{ msg }}</h1>\n    <p>\n      For guide and recipes on how to configure / custom"
  },
  {
    "path": "src/components/Tinymce/index.vue",
    "chars": 6451,
    "preview": "<template>\n  <div :class=\"{fullscreen:fullscreen}\" class=\"tinymce-container editor-container\">\n    <textarea :id=\"tinymc"
  },
  {
    "path": "src/components/Tinymce/plugins.js",
    "chars": 587,
    "preview": "// Any plugins you want to use has to be imported\n// Detail plugins list see https://www.tinymce.com/docs/plugins/\n// Cu"
  },
  {
    "path": "src/components/Tinymce/toolbar.js",
    "chars": 496,
    "preview": "// Here is a list of the toolbar\n// Detail list see https://www.tinymce.com/docs/advanced/editor-control-identifiers/#to"
  },
  {
    "path": "src/components/common/FileResource.vue",
    "chars": 20298,
    "preview": "<template>\n    <div style=\"padding: 10px;\">\n        <el-button-group>\n            <el-button type=\"primary\" size=\"small\""
  },
  {
    "path": "src/components/common/IconSvg.vue",
    "chars": 423,
    "preview": "<template>\n    <svg v-if=\"iconClass\" class=\"svg-icon\" aria-hidden=\"true\">\n        <use :xlink:href=\"iconName\"></use>\n   "
  },
  {
    "path": "src/config/app.js",
    "chars": 271,
    "preview": "/**\n * 配置编译环境和线上环境之间的切换\n *\n * baseUrl: 域名地址\n * routerMode: 路由模式\n * imgBaseUrl: 图片所在域名地址\n *\n */\nlet BASE_URL = process.en"
  },
  {
    "path": "src/constants/.gitignore",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "src/element.js",
    "chars": 2952,
    "preview": "import Vue from \"vue\";\n// import \"element-ui/lib/theme-chalk/index.css\";\n\nimport ELEMENT from \"element-ui\";\nimport {\n   "
  },
  {
    "path": "src/filtres/index.js",
    "chars": 4478,
    "preview": "function pluralize(time, label) {\n    if (time === 1) {\n        return time + label;\n    }\n    return time + label + \"s\""
  },
  {
    "path": "src/main.js",
    "chars": 681,
    "preview": "import \"babel-polyfill\"; // 解决Ie9\nimport Vue from \"vue\";\nimport App from \"./App.vue\";\nimport router from \"./router/index"
  },
  {
    "path": "src/mock/ad.js",
    "chars": 3681,
    "preview": "const index = {\n    total: 17,\n    data: {\n        total: 1,\n        list: [\n            {\n                adId: 1,\n    "
  },
  {
    "path": "src/mock/adSite.js",
    "chars": 2233,
    "preview": "const index = {\n    data: {\n        total: 1,\n        list: [\n            {\n                siteId: 1,\n                s"
  },
  {
    "path": "src/mock/authAdmin.js",
    "chars": 978,
    "preview": "/**\n * Created by lk on 18/4/28.\n */\n\nconst index = {\n    data: {\n        total: 1,\n        list: [\n            {\n      "
  },
  {
    "path": "src/mock/authPermissionRule.js",
    "chars": 11034,
    "preview": "/**\n * Created by lk on 18/4/28.\n */\n\nconst index = {\n    data: {\n        list: [\n            {\n                id: 1,\n "
  },
  {
    "path": "src/mock/authRole.js",
    "chars": 8924,
    "preview": "/**\n * Created by lk on 18/4/28.\n */\n\nconst index = {\n    data: {\n        total: 1,\n        list: [\n            {\n      "
  },
  {
    "path": "src/mock/fileResource.js",
    "chars": 1136,
    "preview": "/**\n * Created by lk on 18/4/28.\n */\n\n// 资源列表\nconst index = {\n    data: {\n        total: 10,\n        list: [\n           "
  },
  {
    "path": "src/mock/fileResourceTag.js",
    "chars": 307,
    "preview": "/**\n * Created by lk on 18/4/28.\n */\n\n// 资源分组列表\nconst index = {\n    data: {\n        total: 1,\n        list: [\n          "
  },
  {
    "path": "src/mock/index.js",
    "chars": 2911,
    "preview": "/**\n * Created by lk on 18/4/28.\n */\n\nimport Mock from \"mockjs\";\n\nimport login from \"./login\";\nimport authAdmin from \"./"
  },
  {
    "path": "src/mock/login.js",
    "chars": 683,
    "preview": "/**\n * Created by lk on 18/4/28.\n */\n\nconst index = {\n    data: {\n        id: 1,\n        token:\n            \"eyJpZHNzIjo"
  },
  {
    "path": "src/mock/upload.js",
    "chars": 506,
    "preview": "/**\n * Created by lk on 18/4/28.\n */\n\n// 获取七牛云\nconst qiuNiuUpToken = {\n    data: {\n        domain: \"https://res.xxxxx.cn"
  },
  {
    "path": "src/role.js",
    "chars": 4718,
    "preview": "import router from \"./router/index\";\nimport store from \"./store/index\";\nimport NProgress from \"nprogress\"; // Progress 进"
  },
  {
    "path": "src/router/index.js",
    "chars": 5574,
    "preview": "import Vue from \"vue\";\nimport VueRouter from \"vue-router\";\n\nif (process.env.NODE_ENV === \"development\") {\n    Vue.use(Vu"
  },
  {
    "path": "src/store/actions.js",
    "chars": 218,
    "preview": "// import * as types from './mutation-types'\n//\n// export const addToCart = ({ commit }, product) => {\n//   if (product."
  },
  {
    "path": "src/store/getters.js",
    "chars": 282,
    "preview": "// export const cartProducts = state => {\n//   return state.cart.added.map(({ id, quantity }) => {\n//     const product "
  },
  {
    "path": "src/store/index.js",
    "chars": 492,
    "preview": "import Vue from \"vue\";\nimport Vuex from \"vuex\";\nimport * as actions from \"./actions\";\nimport * as getters from \"./getter"
  },
  {
    "path": "src/store/modules/admin.js",
    "chars": 4615,
    "preview": "import { userInfo, loginName, logout } from \"../../api/auth/login\";\nimport * as types from \"../mutation-types\";\nimport {"
  },
  {
    "path": "src/store/modules/app.js",
    "chars": 1822,
    "preview": "import { getStore, setStore } from \"../../utils/store\";\nimport * as types from \"../mutation-types\";\n\nconst state = {\n   "
  },
  {
    "path": "src/store/mutation-types.js",
    "chars": 616,
    "preview": "// APP 相关\nexport const TOGGLE_SIDEBAR = \"TOGGLE_SIDEBAR\";\nexport const SHOW_SIDEBAR = \"SHOW_SIDEBAR\";\nexport const ADD_V"
  },
  {
    "path": "src/styles/base.scss",
    "chars": 3909,
    "preview": "/*          reset css       */\n*, ::before, ::after {\n    /*选择所有标签*/\n    margin: 0;\n    padding: 0;\n\n    /*清除移动端默认的点击高亮效"
  },
  {
    "path": "src/styles/mixin.scss",
    "chars": 3318,
    "preview": "\n// Mixin\n\n$font-color: #4a4a4a;\n//头部高度\n$header-height: 60px;\n//底部高度\n$footer-height: 1.30666666rem;\n\n//清除浮动\n@mixin clear"
  },
  {
    "path": "src/utils/auth.js",
    "chars": 620,
    "preview": "import { getStore, setStore, removeStore } from \"./store\";\n\nconst adminId = \"ADMIN-ID\";\nconst adminToken = \"ADMIN-TOKEN\""
  },
  {
    "path": "src/utils/axios.js",
    "chars": 1471,
    "preview": "import axios from \"axios\";\nimport { Message } from \"element-ui\";\nimport store from \"../store/index\";\nimport { BASE_URL }"
  },
  {
    "path": "src/utils/haiZiToPinYin.js",
    "chars": 102113,
    "preview": "/**\n * 汉字转拼音\n * Created by Host-0034 on 2018/5/18.\n */\nlet chinesePointCode = {\n    a: [21834, 38463, 38165],\n    ai: [\n"
  },
  {
    "path": "src/utils/store.js",
    "chars": 646,
    "preview": "import Cookies from \"js-cookie\";\n/**\n * 存储localStorage\n */\nexport const setStore = (name, content, expireDay) => {\n    i"
  },
  {
    "path": "src/views/adManage/ad.vue",
    "chars": 26935,
    "preview": "<template>\n\n    <div>\n        <el-form :inline=\"true\" :model=\"query\" class=\"query-form\" size=\"mini\">\n            <el-for"
  },
  {
    "path": "src/views/adManage/adSite.vue",
    "chars": 14233,
    "preview": "<template>\n\n    <div>\n        <el-form :inline=\"true\" :model=\"query\" class=\"query-form\" size=\"mini\">\n            <el-for"
  },
  {
    "path": "src/views/components/tinymce-demo.vue",
    "chars": 1167,
    "preview": "<template>\n    <div>\n        <el-button type=\"text\" @click=\"dialogVisible = true\">点击打开 表单</el-button>\n        <el-dialog"
  },
  {
    "path": "src/views/components/upload-demo.vue",
    "chars": 2796,
    "preview": "<template>\n    <div>\n        <div class=\"page\">\n            <h3>上传图片:</h3>\n            <el-card class=\"box-card\">\n      "
  },
  {
    "path": "src/views/components/uploadList.vue",
    "chars": 1267,
    "preview": "<template>\n    <div>\n        <el-button type=\"text\" @click=\"dialogVisible = true\">点击打开 上传插件</el-button>\n        <el-dial"
  },
  {
    "path": "src/views/error/err401.vue",
    "chars": 4804,
    "preview": "<template>\n    <div class=\"error401\">\n        <div class=\"error401-body-con\">\n            <div class=\"error401-body-con-"
  },
  {
    "path": "src/views/error/err404.vue",
    "chars": 3685,
    "preview": "<template>\n    <div class=\"error404\">\n        <div class=\"error404-body-con\">\n            <div class=\"error404-body-con-"
  },
  {
    "path": "src/views/error/err500.vue",
    "chars": 4236,
    "preview": "<template>\n    <div class=\"error500\">\n        <div class=\"error500-body-con\">\n            <div class=\"error500-body-con-"
  },
  {
    "path": "src/views/home/SidebarItem.vue",
    "chars": 5364,
    "preview": "<!--<template>-->\n    <!--<div class='menu-wrapper'>-->\n\n        <!--&lt;!&ndash;<template v-for=\"(item,i) in routes\">&n"
  },
  {
    "path": "src/views/home/TabsView.vue",
    "chars": 2243,
    "preview": "<template>\n    <div class='tabs-view-container'>\n        <span v-for=\"tag in Array.from(visitedViews)\" :key=\"tag.path\" c"
  },
  {
    "path": "src/views/home/index-3.0.1.vue",
    "chars": 27038,
    "preview": "<template>\n\n    <el-container class=\"wrapper\">\n\n        <el-header class=\"header\">\n            <div class=\"header-logo\">"
  },
  {
    "path": "src/views/home/index.vue",
    "chars": 28002,
    "preview": "<template>\n\n    <el-container class=\"wrapper\">\n        <el-scrollbar class=\"container-left\" wrap-class=\"container-left-w"
  },
  {
    "path": "src/views/home/main.vue",
    "chars": 2361,
    "preview": "<template>\n    <div>\n        <div class=\"ms-doc\">\n            <h3>README.md</h3>\n            <article>\n                <"
  },
  {
    "path": "src/views/login/index.vue",
    "chars": 6103,
    "preview": "<template>\n    <div class=\"login-container\">\n        <el-form class=\"card-box login-form\" autoComplete=\"on\" :model=\"rule"
  },
  {
    "path": "src/views/profile/index.vue",
    "chars": 282,
    "preview": "<template>\n    <div style=\"width: 2rem;height: 3rem;background-color: red;\">\n        {{ msg }}\n    </div>\n</template>\n\n\n"
  },
  {
    "path": "src/views/userManage/admin/authAdmin.vue",
    "chars": 13901,
    "preview": "<template>\n\n    <div>\n        <el-form :inline=\"true\" :model=\"query\" class=\"query-form\" size=\"mini\">\n            <el-for"
  },
  {
    "path": "src/views/userManage/admin/authPermissionRule.vue",
    "chars": 10923,
    "preview": "<template>\n    <div>\n        <el-form :inline=\"true\" :model=\"query\" class=\"query-form\" size=\"mini\">\n\n            <el-for"
  },
  {
    "path": "src/views/userManage/admin/authRole.vue",
    "chars": 15281,
    "preview": "<template>\n    <div>\n        <el-form :inline=\"true\" :model=\"query\" class=\"query-form\" size=\"mini\">\n            <el-form"
  },
  {
    "path": "src/views/userManage/admin/router.vue",
    "chars": 55,
    "preview": "<template>\n    <router-view></router-view>\n</template>\n"
  },
  {
    "path": "tests/unit/.eslintrc.js",
    "chars": 111,
    "preview": "module.exports = {\n  env: {\n    jest: true\n  },\n  rules: {\n    'import/no-extraneous-dependencies': 'off'\n  }\n}"
  },
  {
    "path": "tests/unit/HelloWorld.spec.js",
    "chars": 346,
    "preview": "import { shallowMount } from \"@vue/test-utils\";\nimport HelloWorld from \"@/components/HelloWorld.vue\";\n\ndescribe(\"HelloWo"
  },
  {
    "path": "vue.config.js",
    "chars": 661,
    "preview": "module.exports = {\n    baseUrl: process.env.NODE_ENV === \"production\" ? \"./\" : \"/\",\n    outputDir: process.env.outputDir"
  }
]

About this extraction

This page contains the full source code of the lmxdawn/vue-admin-html-java GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 89 files (487.8 KB), approximately 157.1k tokens, and a symbol index with 83 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!