├── .babelrc ├── .editorconfig ├── .gitignore ├── .postcssrc.js ├── .vscode └── sftp.json ├── LICENSE ├── README.md ├── TIPS.md ├── build ├── build.js ├── check-versions.js ├── dev-client.js ├── dev-server.js ├── utils.js ├── vue-loader.conf.js ├── webpack.base.conf.js ├── webpack.dev.conf.js └── webpack.prod.conf.js ├── config ├── dev.env.js ├── index.js └── prod.env.js ├── favicon.ico ├── index.html ├── package-lock.json ├── package.json ├── src ├── App.vue ├── assets │ ├── json │ │ └── citylist.json │ ├── libs │ │ └── screenfull.js │ └── scss │ │ ├── element-variables.scss │ │ └── global.scss ├── components │ ├── AChart.vue │ ├── Cube.vue │ ├── GoTop.vue │ ├── QRCard.vue │ ├── SideBar.vue │ └── TopBar.vue ├── directives │ └── index.js ├── filters │ └── index.js ├── http.js ├── lang │ ├── en.js │ ├── index.js │ └── zh.js ├── layout │ └── index.vue ├── main.js ├── mock │ ├── index.js │ └── tpl.js ├── router │ ├── index.js │ ├── index_no_dynamic.js │ └── parse.js ├── store │ ├── index.js │ └── modules │ │ ├── common.js │ │ └── module1.js ├── utils │ └── index.js └── views │ ├── 404.vue │ ├── about.vue │ ├── blank.vue │ ├── cube.vue │ ├── notes.vue │ ├── signin.vue │ └── weather.vue ├── static ├── audio │ └── romeostune.mp3 ├── css │ ├── animate.min.css │ ├── iconfont.css │ ├── iconfont.eot │ ├── iconfont.js │ ├── iconfont.svg │ ├── iconfont.ttf │ └── iconfont.woff ├── img │ ├── bg.jpg │ ├── player.gif │ └── wechat.jpg └── libs │ └── echarts.min.js └── yarn.lock /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["env", { "modules": false }], 4 | "stage-2" 5 | ], 6 | "plugins": ["transform-runtime"], 7 | "comments": false, 8 | "env": { 9 | "test": { 10 | "presets": ["env", "stage-2"], 11 | "plugins": [ "istanbul" ] 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules/ 3 | dist/ 4 | npm-debug.log 5 | yarn-error.log 6 | -------------------------------------------------------------------------------- /.postcssrc.js: -------------------------------------------------------------------------------- 1 | // https://github.com/michael-ciniawsky/postcss-load-config 2 | 3 | module.exports = { 4 | "plugins": { 5 | // to edit target browsers: use "browserlist" field in package.json 6 | "autoprefixer": {} 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /.vscode/sftp.json: -------------------------------------------------------------------------------- 1 | { 2 | "host": "1xx.xxx.xxx.xxx", 3 | "port": 22, 4 | "username": "xxx", 5 | "password": "xxx", 6 | "protocol": "sftp", 7 | "agent": null, 8 | "privateKeyPath": null, 9 | "passphrase": null, 10 | "passive": false, 11 | "interactiveAuth": false, 12 | "remotePath": "/home/xxx", 13 | "uploadOnSave": false, 14 | "syncMode": "update", 15 | "watcher": { 16 | "files": false, 17 | "autoUpload": false, 18 | "autoDelete": false 19 | }, 20 | "ignore": [ 21 | "**/.vscode/**", 22 | "**/.git/**", 23 | "**/node_modules/**", 24 | "**/build/**", 25 | "**/config/**", 26 | "**/release/**", 27 | "**/src/**", 28 | "/static/**", 29 | "README.md", 30 | "package.json", 31 | "index.html", 32 | "favicon.ico", 33 | ".postcssrc.js", 34 | ".gitignore", 35 | ".editorconfig", 36 | ".babelrc", 37 | "yarn.lock", 38 | "**/.DS_Store" 39 | ] 40 | } 41 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Anti 996 License Version 1.0 2 | 3 | Copyright (c) 2019 Bai Yanyun 4 | 5 | Permission is hereby granted to any individual or legal entity 6 | obtaining a copy of this licensed work (including the source code, 7 | documentation and/or related items, hereinafter collectively referred 8 | to as the "licensed work"), free of charge, to deal with the licensed 9 | work for any purpose, including without limitation, the rights to use, 10 | reproduce, modify, prepare derivative works of, distribute, publish 11 | and sublicense the licensed work, subject to the following conditions: 12 | 13 | 1. The individual or the legal entity must conspicuously display, 14 | without modification, this License and the notice on each redistributed 15 | or derivative copy of the Licensed Work. 16 | 17 | 2. The individual or the legal entity must strictly comply with all 18 | applicable laws, regulations, rules and standards of the jurisdiction 19 | relating to labor and employment where the individual is physically 20 | located or where the individual was born or naturalized; or where the 21 | legal entity is registered or is operating (whichever is stricter). In 22 | case that the jurisdiction has no such laws, regulations, rules and 23 | standards or its laws, regulations, rules and standards are 24 | unenforceable, the individual or the legal entity are required to 25 | comply with Core International Labor Standards. 26 | 27 | 3. The individual or the legal entity shall not induce or force its 28 | employee(s), whether full-time or part-time, or its independent 29 | contractor(s), in any methods, to agree in oral or written form, to 30 | directly or indirectly restrict, weaken or relinquish his or her 31 | rights or remedies under such laws, regulations, rules and standards 32 | relating to labor and employment as mentioned above, no matter whether 33 | such written or oral agreement are enforceable under the laws of the 34 | said jurisdiction, nor shall such individual or the legal entity 35 | limit, in any methods, the rights of its employee(s) or independent 36 | contractor(s) from reporting or complaining to the copyright holder or 37 | relevant authorities monitoring the compliance of the license about 38 | its violation(s) of the said license. 39 | 40 | THE LICENSED WORK IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 41 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 42 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 43 | IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, 44 | DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 45 | OTHERWISE, ARISING FROM, OUT OF OR IN ANY WAY CONNECTION WITH THE 46 | LICENSED WORK OR THE USE OR OTHER DEALINGS IN THE LICENSED WORK. 47 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Vue-Seed 2 | 3 | An out-of-box UI solution for enterprise applications as a Vue boilerplate. 4 | 5 | ![author](https://img.shields.io/badge/author-jasonbai-orange.svg) 6 | ![Prs](https://img.shields.io/badge/Prs-welcome-brightgreen.svg) 7 | [![LICENSE](https://img.shields.io/badge/license-Anti%20996-blue.svg)](https://github.com/996icu/996.ICU/blob/master/LICENSE) 8 | 9 | ## Themes Preview 10 | 1. [dark-version](http://lubanseven.gitee.io/dark-version/#/signin) ( Branch: master ) 11 | 2. [light-version](http://lubanseven.gitee.io/show/#/signin) ( Branch: light-version ) 12 | 3. [color-version](http://lubanseven.gitee.io/color-version/#/signin) ( branch: color-version ) 13 | 14 | ## Features 15 | 1. 三套主题模板任你选 16 | 2. 第三套主题实现了换肤功能 17 | 3. 实现了动态路由功能 18 | 4. 完整的登录登出逻辑 19 | 5. 炫酷的登录页 20 | 6. 支持配置饿了么组件库主题色 21 | 7. 实现了国际化 22 | 8. 附带天气预报功能 23 | 9. 附带动感音乐 24 | 10. 封装了图表组件 25 | 26 | ## Build Setup 27 | 28 | ``` bash 29 | # install dependencies 30 | npm install 31 | 32 | # serve with hot reload at localhost:1024 33 | yarn run dev 34 | 35 | # build for production with minification 36 | yarn run build 37 | 38 | # visualize output files 39 | yarn run analysis 40 | 41 | # preview output files 42 | yarn add http-server -g 43 | cd dist 44 | http-server 45 | ``` 46 | 47 | ## Tech Stack 48 | * Vue @ 2.5.9 49 | * Vue-Router 50 | * Vue-cli @ 2.x 51 | * Vue-i18n 52 | * Vuex 53 | * ES6 54 | * Element-UI @ 2.8.2 55 | * eCharts @ 4.2.1 56 | * Axios 57 | * Jsonp 58 | * Sass 59 | * Animate.CSS 60 | * Typed.js 61 | * Font-Awesome 62 | * MockJS 63 | * Yarn 64 | * babel-polyfill ( Compatible with IE ) 65 | 66 | ## Other Plugins Maybe Need 67 | * intro.js 引导页 68 | * vue-qr 二维码生成模块 69 | * vuedraggable 拖拽功能 70 | * vue-particles 粒子效果 71 | * js-cookie 读写cookie模块 72 | * dayjs 日期处理模块 73 | * rythm.js 音频节奏可视化模块 74 | * vuescroll.js 一个滚动条插件 75 | * crypto-js 加密算法,登录时使用 76 | * clipboard.js 复制粘贴 77 | * vue-baidu-map 封装的百度地图插件 78 | 79 | ## Notes 80 | 1. 由于第三套主题中使用了flex布局,导致只能兼容到IE10,在删除grid布局的情况下。 81 | 2. dark-version主题中登录页引入了rythm.js,导致其不兼容IE,删除Siderbar.vue里面关于rythm.js的代码就可以了。 82 | 3. node-sass经常安装失败,可能需要多次 install,如果实在不行,最好翻墙后再次 yarn install。 83 | 4. 如果要覆盖饿了么组件的样式变量,就编辑assets/scss/element-variables.scss文件。 84 | 5. 因为谷歌浏览器升级到71版本,导致screenfull.js源码98行有问题,已经将改动后的文件复制到了assets/libs文件夹下。 85 | 6. 彻底重写了图表组件,提高了组件的扩展性,图表配置需要在使用组件的父组件中编写。 86 | 7. 切换到 color-version 分支后,需要重新 yarn install 安装独有插件 87 | 8. 背景音乐的歌名是:Romeo's Tune。 88 | 89 | 90 | ## Login Logic 91 | 1. 请求登录接口,获取到token、用户ID等信息,保存到localStorage或Cookie里 92 | 2. 请求左侧菜单信息。(如果菜单是固定的,这步忽略) 93 | 3. 登录成功后,导航到首页 94 | 4. 在main.js里设置全局请求拦截,在所有请求的header里加上token信息,证明当前已登录 95 | 5. 在main.js里设置全局接收拦截,如果服务器端的token已过期,返回401,就清空localStorage并重定向到登录页面 96 | 6. 在路由配置表里,设置全局路由拦截,如果token存在并且要去往登录页面,就不让去,并且重定向到首页 97 | 98 | ## Logout Logic 99 | 1. 点击退出按钮,清空localStorage,并导航到登录页面 100 | 101 | ## First Visit Logic 102 | 1. 配置路由表,'/'重定向到首页 103 | 2. 如果没有登录(本地没有token),首页的请求就会是401,这时候,就会导航到登录页 104 | 3. 如果已经登录过,本地有token,就待在首页,不用再登录一遍了 105 | 106 | ## Switch Theme Color Logic 107 | 1. 安装 [webpack-theme-color-replacer](https://www.npmjs.com/package/webpack-theme-color-replacer) 插件 108 | 2. 在 /build/webpack.base.conf.js 中引入 [参考](https://github.com/JasonBai007/vue-seed/blob/color-version/build/webpack.base.conf.js#L5-L6) 109 | 3. 在楼上的文件中配置 [plugins](https://github.com/JasonBai007/vue-seed/blob/color-version/build/webpack.base.conf.js#L65-L74) 110 | 4. 在颜色选择器所在的组件中,引入步骤一中的[插件](https://github.com/JasonBai007/vue-seed/blob/color-version/src/components/ColorsPicker.vue#L7) 111 | 5. 在步骤四中的文件中,添加插件的逻辑代码,构建options对象,然后调用changeColor方法 [参考](https://github.com/JasonBai007/vue-seed/blob/color-version/src/components/ColorsPicker.vue#L36-L50) 112 | 113 | ## Dynamic Routers Logic 114 | 1. 登录后,从后端请求一个信息数组 arr 115 | 2. 编写解析函数,将这个 arr 解析成 路由信息数组 routes 和 菜单数组 menuArr 116 | 3. menuArr 注入到 sidebar.vue中,渲染出菜单 117 | 4. routes数组 作为参数,传入到 router.addRoutes() 方法中,生成真正的路由树 118 | 5. 404路由作为最后一项 119 | 6. 由于实现起来过于复杂,我也懵逼了,还是参考网上的[教程](https://juejin.im/post/5c83ccb75188257e342db5c9)吧 120 | 121 | ## License 122 | Anti-996 123 | -------------------------------------------------------------------------------- /TIPS.md: -------------------------------------------------------------------------------- 1 | Some useful pieces of code: 2 | 3 | ```javascript 4 | 1)借助隐藏表单实现文件下载: 5 |
6 | 7 |
8 | 9 | downloadData() { 10 | this.$refs.hiddenForm.submit() 11 | } 12 | 13 | 2)验证码: 14 | 15 | 16 | 17 | 18 | 19 | updateImg() { 20 | this.$refs.codeImg.src = 'api/v1/xxx/get?' + Math.random() 21 | } 22 | 23 | 3)定义公共函数: 24 | function indexOf(arr, val) { 25 | for (var i = 0; i < arr.length; i++) { 26 | if (arr[i] == val) return i; 27 | } 28 | return -1; 29 | } 30 | export { postDataToString, getDateStr, postDataToObj, arrRemove } 31 | 32 | 在main.js文件中引进来 33 | import * as mylib from '@/utils/mylib' 34 | 35 | 4)读取excel文件: 36 | import XLSX from "xlsx/xlsx.js" 37 | 38 | getDataFromFile(file, fileList) { 39 | var Fr = new FileReader(); 40 | // 讲文件读取成二进制码 41 | Fr.readAsBinaryString(file.raw); 42 | // 创建空数组 43 | let data_arr = []; 44 | // 一旦文件阅读者读取文件完毕,就执行回调函数 45 | Fr.onload = e => { 46 | let data = e.target.result; 47 | // 拿到工作簿 48 | let workbook = XLSX.read(data, { type: "binary" }); 49 | // 拿到工作簿第一个工作表的名字 50 | var first_sheet_name = workbook.SheetNames[0]; 51 | /* 拿到第一个工作表 */ 52 | var worksheet = workbook.Sheets[first_sheet_name]; 53 | // 将第一个工作表变成数组 54 | let arr = XLSX.utils.sheet_to_json(worksheet); 55 | // 将arr的每一项中的value值push到空数组中 56 | arr.forEach((v, k) => { 57 | data_arr.push(Object.values(v)[0]); 58 | }); 59 | // 再将第一项的key,unshift到data_arr,这样才能补上第一行的数据 60 | data_arr.unshift(Object.keys(arr[0])[0]); 61 | this.form.adplacement = data_arr.join("\n"); 62 | }; 63 | } 64 | 65 | 66 | ``` 67 | -------------------------------------------------------------------------------- /build/build.js: -------------------------------------------------------------------------------- 1 | require('./check-versions')() 2 | 3 | process.env.NODE_ENV = 'production' 4 | 5 | var ora = require('ora') 6 | var rm = require('rimraf') 7 | var path = require('path') 8 | var chalk = require('chalk') 9 | var webpack = require('webpack') 10 | var config = require('../config') 11 | var webpackConfig = require('./webpack.prod.conf') 12 | 13 | var spinner = ora('building for production...') 14 | spinner.start() 15 | 16 | rm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err => { 17 | if (err) throw err 18 | webpack(webpackConfig, function (err, stats) { 19 | spinner.stop() 20 | if (err) throw err 21 | process.stdout.write(stats.toString({ 22 | colors: true, 23 | modules: false, 24 | children: false, 25 | chunks: false, 26 | chunkModules: false 27 | }) + '\n\n') 28 | 29 | console.log(chalk.cyan(' Build complete.\n')) 30 | console.log(chalk.yellow( 31 | ' Tip: built files are meant to be served over an HTTP server.\n' + 32 | ' Opening index.html over file:// won\'t work.\n' 33 | )) 34 | }) 35 | }) 36 | -------------------------------------------------------------------------------- /build/check-versions.js: -------------------------------------------------------------------------------- 1 | var chalk = require('chalk') 2 | var semver = require('semver') 3 | var packageConfig = require('../package.json') 4 | 5 | function exec (cmd) { 6 | return require('child_process').execSync(cmd).toString().trim() 7 | } 8 | 9 | var versionRequirements = [ 10 | { 11 | name: 'node', 12 | currentVersion: semver.clean(process.version), 13 | versionRequirement: packageConfig.engines.node 14 | }, 15 | { 16 | name: 'npm', 17 | currentVersion: exec('npm --version'), 18 | versionRequirement: packageConfig.engines.npm 19 | } 20 | ] 21 | 22 | module.exports = function () { 23 | var warnings = [] 24 | for (var i = 0; i < versionRequirements.length; i++) { 25 | var mod = versionRequirements[i] 26 | if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) { 27 | warnings.push(mod.name + ': ' + 28 | chalk.red(mod.currentVersion) + ' should be ' + 29 | chalk.green(mod.versionRequirement) 30 | ) 31 | } 32 | } 33 | 34 | if (warnings.length) { 35 | console.log('') 36 | console.log(chalk.yellow('To use this template, you must update following to modules:')) 37 | console.log() 38 | for (var i = 0; i < warnings.length; i++) { 39 | var warning = warnings[i] 40 | console.log(' ' + warning) 41 | } 42 | console.log() 43 | process.exit(1) 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /build/dev-client.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | require('eventsource-polyfill') 3 | var hotClient = require('webpack-hot-middleware/client?noInfo=true&reload=true') 4 | 5 | hotClient.subscribe(function (event) { 6 | if (event.action === 'reload') { 7 | window.location.reload() 8 | } 9 | }) 10 | -------------------------------------------------------------------------------- /build/dev-server.js: -------------------------------------------------------------------------------- 1 | require('./check-versions')() 2 | 3 | var config = require('../config') 4 | if (!process.env.NODE_ENV) { 5 | process.env.NODE_ENV = JSON.parse(config.dev.env.NODE_ENV) 6 | } 7 | 8 | var opn = require('opn') 9 | var address = require('address') 10 | var path = require('path') 11 | var express = require('express') 12 | var webpack = require('webpack') 13 | var proxyMiddleware = require('http-proxy-middleware') 14 | var webpackConfig = require('./webpack.dev.conf') 15 | 16 | // default port where dev server listens for incoming traffic 17 | var port = process.env.PORT || config.dev.port 18 | // automatically open browser, if not set will be false 19 | var autoOpenBrowser = !!config.dev.autoOpenBrowser 20 | // Define HTTP proxies to your custom API backend 21 | // https://github.com/chimurai/http-proxy-middleware 22 | var proxyTable = config.dev.proxyTable 23 | 24 | var app = express() 25 | var compiler = webpack(webpackConfig) 26 | 27 | var devMiddleware = require('webpack-dev-middleware')(compiler, { 28 | publicPath: webpackConfig.output.publicPath, 29 | quiet: true 30 | }) 31 | 32 | var hotMiddleware = require('webpack-hot-middleware')(compiler, { 33 | log: () => {} 34 | }) 35 | // force page reload when html-webpack-plugin template changes 36 | compiler.plugin('compilation', function (compilation) { 37 | compilation.plugin('html-webpack-plugin-after-emit', function (data, cb) { 38 | hotMiddleware.publish({ action: 'reload' }) 39 | cb() 40 | }) 41 | }) 42 | 43 | // proxy api requests 44 | Object.keys(proxyTable).forEach(function (context) { 45 | var options = proxyTable[context] 46 | if (typeof options === 'string') { 47 | options = { target: options } 48 | } 49 | app.use(proxyMiddleware(options.filter || context, options)) 50 | }) 51 | 52 | // handle fallback for HTML5 history API 53 | app.use(require('connect-history-api-fallback')()) 54 | 55 | // serve webpack bundle output 56 | app.use(devMiddleware) 57 | 58 | // enable hot-reload and state-preserving 59 | // compilation error display 60 | app.use(hotMiddleware) 61 | 62 | // serve pure static assets 63 | var staticPath = path.posix.join(config.dev.assetsPublicPath, config.dev.assetsSubDirectory) 64 | app.use(staticPath, express.static('./static')) 65 | 66 | // var uri = 'http://localhost:' + port 67 | // 使用address模块,自动获取本机IP 68 | // 这里,我修改了,加上了/#/signin 69 | var uri = 'http://' + (address.ip() || 'localhost') +':' + port + '/#/signin' 70 | 71 | var _resolve 72 | var readyPromise = new Promise(resolve => { 73 | _resolve = resolve 74 | }) 75 | 76 | console.log('> Starting dev server...') 77 | devMiddleware.waitUntilValid(() => { 78 | console.log('> Listening at ' + uri + '\n') 79 | // when env is testing, don't need open it 80 | if (autoOpenBrowser && process.env.NODE_ENV !== 'testing') { 81 | opn(uri) 82 | } 83 | _resolve() 84 | }) 85 | 86 | var server = app.listen(port) 87 | 88 | module.exports = { 89 | ready: readyPromise, 90 | close: () => { 91 | server.close() 92 | } 93 | } 94 | -------------------------------------------------------------------------------- /build/utils.js: -------------------------------------------------------------------------------- 1 | var path = require('path') 2 | var config = require('../config') 3 | var ExtractTextPlugin = require('extract-text-webpack-plugin') 4 | 5 | exports.assetsPath = function (_path) { 6 | var assetsSubDirectory = process.env.NODE_ENV === 'production' 7 | ? config.build.assetsSubDirectory 8 | : config.dev.assetsSubDirectory 9 | return path.posix.join(assetsSubDirectory, _path) 10 | } 11 | 12 | exports.cssLoaders = function (options) { 13 | options = options || {} 14 | 15 | var cssLoader = { 16 | loader: 'css-loader', 17 | options: { 18 | minimize: process.env.NODE_ENV === 'production', 19 | sourceMap: options.sourceMap 20 | } 21 | } 22 | 23 | // generate loader string to be used with extract text plugin 24 | function generateLoaders (loader, loaderOptions) { 25 | var loaders = [cssLoader] 26 | if (loader) { 27 | loaders.push({ 28 | loader: loader + '-loader', 29 | options: Object.assign({}, loaderOptions, { 30 | sourceMap: options.sourceMap 31 | }) 32 | }) 33 | } 34 | 35 | // Extract CSS when that option is specified 36 | // (which is the case during production build) 37 | if (options.extract) { 38 | return ExtractTextPlugin.extract({ 39 | use: loaders, 40 | fallback: 'vue-style-loader', 41 | //解决iconfont输出路径不对的问题 42 | publicPath: '../../' 43 | }) 44 | } else { 45 | return ['vue-style-loader'].concat(loaders) 46 | } 47 | } 48 | 49 | // http://vuejs.github.io/vue-loader/en/configurations/extract-css.html 50 | return { 51 | css: generateLoaders(), 52 | postcss: generateLoaders(), 53 | less: generateLoaders('less'), 54 | sass: generateLoaders('sass', { indentedSyntax: true }), 55 | scss: generateLoaders('sass'), 56 | stylus: generateLoaders('stylus'), 57 | styl: generateLoaders('stylus') 58 | } 59 | } 60 | 61 | // Generate loaders for standalone style files (outside of .vue) 62 | exports.styleLoaders = function (options) { 63 | var output = [] 64 | var loaders = exports.cssLoaders(options) 65 | for (var extension in loaders) { 66 | var loader = loaders[extension] 67 | output.push({ 68 | test: new RegExp('\\.' + extension + '$'), 69 | use: loader 70 | }) 71 | } 72 | return output 73 | } 74 | -------------------------------------------------------------------------------- /build/vue-loader.conf.js: -------------------------------------------------------------------------------- 1 | var utils = require('./utils') 2 | var config = require('../config') 3 | var isProduction = process.env.NODE_ENV === 'production' 4 | 5 | module.exports = { 6 | loaders: utils.cssLoaders({ 7 | sourceMap: isProduction 8 | ? config.build.productionSourceMap 9 | : config.dev.cssSourceMap, 10 | extract: isProduction 11 | }), 12 | transformToRequire: { 13 | "audio": "src" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /build/webpack.base.conf.js: -------------------------------------------------------------------------------- 1 | var path = require('path') 2 | var utils = require('./utils') 3 | var config = require('../config') 4 | var vueLoaderConfig = require('./vue-loader.conf') 5 | 6 | function resolve(dir) { 7 | return path.join(__dirname, '..', dir) 8 | } 9 | 10 | module.exports = { 11 | entry: { 12 | app: './src/main.js' 13 | }, 14 | output: { 15 | path: config.build.assetsRoot, 16 | filename: '[name].js', 17 | publicPath: process.env.NODE_ENV === 'production' ? 18 | config.build.assetsPublicPath : config.dev.assetsPublicPath 19 | }, 20 | resolve: { 21 | extensions: ['.js', '.vue', '.json'], 22 | alias: { 23 | vue$: 'vue/dist/vue.js', 24 | '@': resolve('src') 25 | } 26 | }, 27 | module: { 28 | rules: [{ 29 | test: /\.vue$/, 30 | loader: 'vue-loader', 31 | options: vueLoaderConfig 32 | }, 33 | { 34 | test: /\.js$/, 35 | loader: 'babel-loader', 36 | include: [ 37 | resolve('src'), 38 | resolve('test'), 39 | resolve('node_modules/vue-particles') 40 | ] 41 | }, 42 | { 43 | test: /\.(png|jpe?g|gif|svg)(\?.*)?$/, 44 | loader: 'url-loader', 45 | query: { 46 | limit: 10000, 47 | name: utils.assetsPath('img/[name].[ext]') 48 | } 49 | }, 50 | { 51 | test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/, 52 | loader: 'url-loader', 53 | query: { 54 | limit: 10000, 55 | name: utils.assetsPath('fonts/[name].[ext]') 56 | } 57 | }, 58 | { 59 | test: /\.mp3(\?.*)?$/, 60 | loader: 'url-loader', 61 | query: { 62 | limit: 10000, 63 | name: utils.assetsPath('audio/[name].[ext]') 64 | } 65 | } 66 | ] 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /build/webpack.dev.conf.js: -------------------------------------------------------------------------------- 1 | var path = require('path') 2 | var utils = require('./utils') 3 | var webpack = require('webpack') 4 | var config = require('../config') 5 | var merge = require('webpack-merge') 6 | var baseWebpackConfig = require('./webpack.base.conf') 7 | var HtmlWebpackPlugin = require('html-webpack-plugin') 8 | var FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin') 9 | 10 | // add hot-reload related code to entry chunks 11 | Object.keys(baseWebpackConfig.entry).forEach(function (name) { 12 | baseWebpackConfig.entry[name] = ['./build/dev-client'].concat(baseWebpackConfig.entry[name]) 13 | }) 14 | 15 | module.exports = merge(baseWebpackConfig, { 16 | module: { 17 | rules: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap }) 18 | }, 19 | // cheap-module-eval-source-map is faster for development 20 | devtool: '#cheap-module-eval-source-map', 21 | plugins: [ 22 | new webpack.DefinePlugin({ 23 | 'process.env': config.dev.env 24 | }), 25 | // https://github.com/glenjamin/webpack-hot-middleware#installation--usage 26 | new webpack.HotModuleReplacementPlugin(), 27 | new webpack.NoEmitOnErrorsPlugin(), 28 | // https://github.com/ampedandwired/html-webpack-plugin 29 | new HtmlWebpackPlugin({ 30 | filename: 'index.html', 31 | template: 'index.html', 32 | inject: true, 33 | favicon: path.resolve('favicon.ico') 34 | }), 35 | new FriendlyErrorsPlugin() 36 | ] 37 | }) 38 | -------------------------------------------------------------------------------- /build/webpack.prod.conf.js: -------------------------------------------------------------------------------- 1 | var path = require('path') 2 | var utils = require('./utils') 3 | var webpack = require('webpack') 4 | var config = require('../config') 5 | var merge = require('webpack-merge') 6 | var baseWebpackConfig = require('./webpack.base.conf') 7 | var CopyWebpackPlugin = require('copy-webpack-plugin') 8 | var HtmlWebpackPlugin = require('html-webpack-plugin') 9 | var ExtractTextPlugin = require('extract-text-webpack-plugin') 10 | var OptimizeCSSPlugin = require('optimize-css-assets-webpack-plugin') 11 | 12 | var env = config.build.env 13 | 14 | var webpackConfig = merge(baseWebpackConfig, { 15 | module: { 16 | rules: utils.styleLoaders({ 17 | sourceMap: config.build.productionSourceMap, 18 | extract: true 19 | }) 20 | }, 21 | devtool: config.build.productionSourceMap ? '#source-map' : false, 22 | output: { 23 | path: config.build.assetsRoot, 24 | filename: utils.assetsPath('js/[name].js'), 25 | chunkFilename: utils.assetsPath('js/[id].js') 26 | }, 27 | plugins: [ 28 | // http://vuejs.github.io/vue-loader/en/workflow/production.html 29 | new webpack.DefinePlugin({ 30 | 'process.env': env 31 | }), 32 | new webpack.optimize.UglifyJsPlugin({ 33 | compress: { 34 | warnings: false 35 | }, 36 | sourceMap: true 37 | }), 38 | // extract css into its own file 39 | new ExtractTextPlugin({ 40 | filename: utils.assetsPath('css/[name].css') 41 | }), 42 | // Compress extracted CSS. We are using this plugin so that possible 43 | // duplicated CSS from different components can be deduped. 44 | new OptimizeCSSPlugin({ 45 | cssProcessorOptions: { 46 | safe: true 47 | } 48 | }), 49 | // generate dist index.html with correct asset hash for caching. 50 | // you can customize output by editing /index.html 51 | // see https://github.com/ampedandwired/html-webpack-plugin 52 | new HtmlWebpackPlugin({ 53 | filename: config.build.index, 54 | template: 'index.html', 55 | inject: true, 56 | favicon: path.resolve('favicon.ico'), 57 | minify: { 58 | removeComments: true, 59 | collapseWhitespace: true, 60 | removeAttributeQuotes: true 61 | // more options: 62 | // https://github.com/kangax/html-minifier#options-quick-reference 63 | }, 64 | // necessary to consistently work with multiple chunks via CommonsChunkPlugin 65 | chunksSortMode: 'dependency' 66 | }), 67 | // split vendor js into its own file 68 | new webpack.optimize.CommonsChunkPlugin({ 69 | name: 'vendor', 70 | minChunks: function (module, count) { 71 | // any required modules inside node_modules are extracted to vendor 72 | return ( 73 | module.resource && 74 | /\.js$/.test(module.resource) && 75 | module.resource.indexOf( 76 | path.join(__dirname, '../node_modules') 77 | ) === 0 78 | ) 79 | } 80 | }), 81 | // extract webpack runtime and module manifest to its own file in order to 82 | // prevent vendor hash from being updated whenever app bundle is updated 83 | new webpack.optimize.CommonsChunkPlugin({ 84 | name: 'manifest', 85 | chunks: ['vendor'] 86 | }), 87 | // copy custom static assets 88 | new CopyWebpackPlugin([ 89 | { 90 | from: path.resolve(__dirname, '../static'), 91 | to: config.build.assetsSubDirectory, 92 | ignore: ['.*'] 93 | } 94 | ]) 95 | ] 96 | }) 97 | 98 | if (config.build.productionGzip) { 99 | var CompressionWebpackPlugin = require('compression-webpack-plugin') 100 | 101 | webpackConfig.plugins.push( 102 | new CompressionWebpackPlugin({ 103 | asset: '[path].gz[query]', 104 | algorithm: 'gzip', 105 | test: new RegExp( 106 | '\\.(' + 107 | config.build.productionGzipExtensions.join('|') + 108 | ')$' 109 | ), 110 | threshold: 10240, 111 | minRatio: 0.8 112 | }) 113 | ) 114 | } 115 | 116 | if (config.build.bundleAnalyzerReport) { 117 | var BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin 118 | webpackConfig.plugins.push(new BundleAnalyzerPlugin()) 119 | } 120 | 121 | module.exports = webpackConfig 122 | -------------------------------------------------------------------------------- /config/dev.env.js: -------------------------------------------------------------------------------- 1 | var merge = require('webpack-merge') 2 | var prodEnv = require('./prod.env') 3 | 4 | module.exports = merge(prodEnv, { 5 | NODE_ENV: '"development"' 6 | }) 7 | -------------------------------------------------------------------------------- /config/index.js: -------------------------------------------------------------------------------- 1 | // see http://vuejs-templates.github.io/webpack for documentation. 2 | var path = require('path') 3 | 4 | module.exports = { 5 | build: { 6 | env: require('./prod.env'), 7 | index: path.resolve(__dirname, '../dist/index.html'), 8 | assetsRoot: path.resolve(__dirname, '../dist'), 9 | assetsSubDirectory: 'static', 10 | // 上线资源路径配置 11 | assetsPublicPath: '/dark-version/', 12 | // 本地开发资源路径 13 | assetsPublicPath: '', 14 | productionSourceMap: false, 15 | // Gzip off by default as many popular static hosts such as 16 | // Surge or Netlify already gzip all static assets for you. 17 | // Before setting to `true`, make sure to: 18 | // npm install --save-dev compression-webpack-plugin 19 | productionGzip: false, 20 | productionGzipExtensions: ['js', 'css'], 21 | // Run the build command with an extra argument to 22 | // View the bundle analyzer report after build finishes: 23 | // `npm run build --report` 24 | // Set to `true` or `false` to always turn it on or off 25 | bundleAnalyzerReport: process.env.npm_config_report 26 | }, 27 | dev: { 28 | env: require('./dev.env'), 29 | port: 1024, 30 | autoOpenBrowser: true, 31 | assetsSubDirectory: 'static', 32 | assetsPublicPath: '/', 33 | proxyTable: { 34 | // '/api': { 35 | // target: 'http://xx.xx.xx.xx/', 36 | // changeOrigin: true 37 | // } 38 | }, 39 | // CSS Sourcemaps off by default because relative paths are "buggy" 40 | // with this option, according to the CSS-Loader README 41 | // (https://github.com/webpack/css-loader#sourcemaps) 42 | // In our experience, they generally work as expected, 43 | // just be aware of this issue when enabling this option. 44 | cssSourceMap: false 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /config/prod.env.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | NODE_ENV: '"production"' 3 | } 4 | -------------------------------------------------------------------------------- /favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JasonBai007/vue-seed/b0e2af5942ea4235fbf16e4769f4ab96cd54c7c9/favicon.ico -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Auto Vue 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "op", 3 | "version": "10.0.0", 4 | "description": "", 5 | "author": "JasonBai", 6 | "private": true, 7 | "scripts": { 8 | "dev": "node build/dev-server.js", 9 | "build": "node build/build.js", 10 | "analysis": "npm run build --report" 11 | }, 12 | "dependencies": { 13 | "axios": "^0.16.2", 14 | "babel-polyfill": "^6.26.0", 15 | "element-ui": "^2.8.2", 16 | "font-awesome": "^4.7.0", 17 | "jsonp": "^0.2.1", 18 | "mockjs": "^1.0.1-beta3", 19 | "rythm.js": "^2.2.1", 20 | "typed.js": "^2.0.10", 21 | "vue": "2.5.9", 22 | "vue-i18n": "^7.4.0", 23 | "vue-particles": "^1.0.9", 24 | "vue-router": "2.5.3", 25 | "vuex": "^3.0.1" 26 | }, 27 | "devDependencies": { 28 | "address": "^1.0.3", 29 | "autoprefixer": "^6.7.2", 30 | "babel-core": "^6.22.1", 31 | "babel-loader": "^6.2.10", 32 | "babel-plugin-transform-runtime": "^6.22.0", 33 | "babel-preset-env": "^1.2.1", 34 | "babel-preset-stage-2": "^6.22.0", 35 | "babel-register": "^6.22.0", 36 | "chalk": "^1.1.3", 37 | "connect-history-api-fallback": "^1.3.0", 38 | "copy-webpack-plugin": "^4.0.1", 39 | "css-loader": "^0.26.1", 40 | "eventsource-polyfill": "^0.9.6", 41 | "express": "^4.14.1", 42 | "extract-text-webpack-plugin": "^2.0.0", 43 | "file-loader": "^0.10.0", 44 | "friendly-errors-webpack-plugin": "^1.1.3", 45 | "function-bind": "^1.1.0", 46 | "html-webpack-plugin": "^2.28.0", 47 | "http-proxy-middleware": "^0.17.3", 48 | "node-sass": "^4.10.0", 49 | "opn": "^4.0.2", 50 | "optimize-css-assets-webpack-plugin": "^1.3.0", 51 | "ora": "^1.1.0", 52 | "rimraf": "^2.6.0", 53 | "sass-loader": "^7.1.0", 54 | "semver": "^5.3.0", 55 | "url-loader": "^0.5.7", 56 | "vue-loader": "^11.1.4", 57 | "vue-style-loader": "^2.0.0", 58 | "vue-template-compiler": "2.5.9", 59 | "webpack": "2.5.1", 60 | "webpack-bundle-analyzer": "3.3.2", 61 | "webpack-dev-middleware": "1.10.2", 62 | "webpack-hot-middleware": "2.18.0", 63 | "webpack-merge": "2.6.1" 64 | }, 65 | "engines": { 66 | "node": ">= 4.0.0", 67 | "npm": ">= 3.0.0" 68 | }, 69 | "browserslist": [ 70 | "> 1%", 71 | "last 2 versions", 72 | "not ie <= 8" 73 | ] 74 | } 75 | -------------------------------------------------------------------------------- /src/App.vue: -------------------------------------------------------------------------------- 1 | 8 | 23 | 28 | -------------------------------------------------------------------------------- /src/assets/json/citylist.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "label": "北京", 4 | "value": "101010100" 5 | }, 6 | { 7 | "label": "海淀", 8 | "value": "101010200" 9 | }, 10 | { 11 | "label": "朝阳", 12 | "value": "101010300" 13 | }, 14 | { 15 | "label": "顺义", 16 | "value": "101010400" 17 | }, 18 | { 19 | "label": "怀柔", 20 | "value": "101010500" 21 | }, 22 | { 23 | "label": "通州", 24 | "value": "101010600" 25 | }, 26 | { 27 | "label": "昌平", 28 | "value": "101010700" 29 | }, 30 | { 31 | "label": "延庆", 32 | "value": "101010800" 33 | }, 34 | { 35 | "label": "丰台", 36 | "value": "101010900" 37 | }, 38 | { 39 | "label": "石景山", 40 | "value": "101011000" 41 | }, 42 | { 43 | "label": "大兴", 44 | "value": "101011100" 45 | }, 46 | { 47 | "label": "房山", 48 | "value": "101011200" 49 | }, 50 | { 51 | "label": "密云", 52 | "value": "101011300" 53 | }, 54 | { 55 | "label": "门头沟", 56 | "value": "101011400" 57 | }, 58 | { 59 | "label": "平谷", 60 | "value": "101011500" 61 | }, 62 | { 63 | "label": "八达岭", 64 | "value": "101011600" 65 | }, 66 | { 67 | "label": "佛爷顶", 68 | "value": "101011700" 69 | }, 70 | { 71 | "label": "汤河口", 72 | "value": "101011800" 73 | }, 74 | { 75 | "label": "密云上甸子", 76 | "value": "101011900" 77 | }, 78 | { 79 | "label": "斋堂", 80 | "value": "101012000" 81 | }, 82 | { 83 | "label": "霞云岭", 84 | "value": "101012100" 85 | }, 86 | { 87 | "label": "上海", 88 | "value": "101020100" 89 | }, 90 | { 91 | "label": "闵行", 92 | "value": "101020200" 93 | }, 94 | { 95 | "label": "宝山", 96 | "value": "101020300" 97 | }, 98 | { 99 | "label": "川沙", 100 | "value": "101020400" 101 | }, 102 | { 103 | "label": "嘉定", 104 | "value": "101020500" 105 | }, 106 | { 107 | "label": "南汇", 108 | "value": "101020600" 109 | }, 110 | { 111 | "label": "金山", 112 | "value": "101020700" 113 | }, 114 | { 115 | "label": "青浦", 116 | "value": "101020800" 117 | }, 118 | { 119 | "label": "松江", 120 | "value": "101020900" 121 | }, 122 | { 123 | "label": "奉贤", 124 | "value": "101021000" 125 | }, 126 | { 127 | "label": "崇明", 128 | "value": "101021100" 129 | }, 130 | { 131 | "label": "陈家镇", 132 | "value": "101021101" 133 | }, 134 | { 135 | "label": "引水船", 136 | "value": "101021102" 137 | }, 138 | { 139 | "label": "徐家汇", 140 | "value": "101021200" 141 | }, 142 | { 143 | "label": "浦东", 144 | "value": "101021300" 145 | }, 146 | { 147 | "label": "天津", 148 | "value": "101030100" 149 | }, 150 | { 151 | "label": "武清", 152 | "value": "101030200" 153 | }, 154 | { 155 | "label": "宝坻", 156 | "value": "101030300" 157 | }, 158 | { 159 | "label": "东丽", 160 | "value": "101030400" 161 | }, 162 | { 163 | "label": "西青", 164 | "value": "101030500" 165 | }, 166 | { 167 | "label": "北辰", 168 | "value": "101030600" 169 | }, 170 | { 171 | "label": "宁河", 172 | "value": "101030700" 173 | }, 174 | { 175 | "label": "汉沽", 176 | "value": "101030800" 177 | }, 178 | { 179 | "label": "静海", 180 | "value": "101030900" 181 | }, 182 | { 183 | "label": "津南", 184 | "value": "101031000" 185 | }, 186 | { 187 | "label": "塘沽", 188 | "value": "101031100" 189 | }, 190 | { 191 | "label": "大港", 192 | "value": "101031200" 193 | }, 194 | { 195 | "label": "平台", 196 | "value": "101031300" 197 | }, 198 | { 199 | "label": "蓟县", 200 | "value": "101031400" 201 | }, 202 | { 203 | "label": "重庆", 204 | "value": "101040100" 205 | }, 206 | { 207 | "label": "永川", 208 | "value": "101040200" 209 | }, 210 | { 211 | "label": "合川", 212 | "value": "101040300" 213 | }, 214 | { 215 | "label": "南川", 216 | "value": "101040400" 217 | }, 218 | { 219 | "label": "江津", 220 | "value": "101040500" 221 | }, 222 | { 223 | "label": "万盛", 224 | "value": "101040600" 225 | }, 226 | { 227 | "label": "渝北", 228 | "value": "101040700" 229 | }, 230 | { 231 | "label": "北碚", 232 | "value": "101040800" 233 | }, 234 | { 235 | "label": "巴南", 236 | "value": "101040900" 237 | }, 238 | { 239 | "label": "长寿", 240 | "value": "101041000" 241 | }, 242 | { 243 | "label": "黔江", 244 | "value": "101041100" 245 | }, 246 | { 247 | "label": "万州天城", 248 | "value": "101041200" 249 | }, 250 | { 251 | "label": "万州龙宝", 252 | "value": "101041300" 253 | }, 254 | { 255 | "label": "涪陵", 256 | "value": "101041400" 257 | }, 258 | { 259 | "label": "开县", 260 | "value": "101041500" 261 | }, 262 | { 263 | "label": "城口", 264 | "value": "101041600" 265 | }, 266 | { 267 | "label": "云阳", 268 | "value": "101041700" 269 | }, 270 | { 271 | "label": "巫溪", 272 | "value": "101041800" 273 | }, 274 | { 275 | "label": "奉节", 276 | "value": "101041900" 277 | }, 278 | { 279 | "label": "巫山", 280 | "value": "101042000" 281 | }, 282 | { 283 | "label": "潼南", 284 | "value": "101042100" 285 | }, 286 | { 287 | "label": "垫江", 288 | "value": "101042200" 289 | }, 290 | { 291 | "label": "梁平", 292 | "value": "101042300" 293 | }, 294 | { 295 | "label": "忠县", 296 | "value": "101042400" 297 | }, 298 | { 299 | "label": "石柱", 300 | "value": "101042500" 301 | }, 302 | { 303 | "label": "大足", 304 | "value": "101042600" 305 | }, 306 | { 307 | "label": "荣昌", 308 | "value": "101042700" 309 | }, 310 | { 311 | "label": "铜梁", 312 | "value": "101042800" 313 | }, 314 | { 315 | "label": "璧山", 316 | "value": "101042900" 317 | }, 318 | { 319 | "label": "丰都", 320 | "value": "101043000" 321 | }, 322 | { 323 | "label": "武隆", 324 | "value": "101043100" 325 | }, 326 | { 327 | "label": "彭水", 328 | "value": "101043200" 329 | }, 330 | { 331 | "label": "綦江", 332 | "value": "101043300" 333 | }, 334 | { 335 | "label": "酉阳", 336 | "value": "101043400" 337 | }, 338 | { 339 | "label": "金佛山", 340 | "value": "101043500" 341 | }, 342 | { 343 | "label": "秀山", 344 | "value": "101043600" 345 | }, 346 | { 347 | "label": "沙坪坝", 348 | "value": "101043700" 349 | }, 350 | { 351 | "label": "哈尔滨", 352 | "value": "101050101" 353 | }, 354 | { 355 | "label": "双城", 356 | "value": "101050102" 357 | }, 358 | { 359 | "label": "呼兰", 360 | "value": "101050103" 361 | }, 362 | { 363 | "label": "阿城", 364 | "value": "101050104" 365 | }, 366 | { 367 | "label": "宾县", 368 | "value": "101050105" 369 | }, 370 | { 371 | "label": "依兰", 372 | "value": "101050106" 373 | }, 374 | { 375 | "label": "巴彦", 376 | "value": "101050107" 377 | }, 378 | { 379 | "label": "通河", 380 | "value": "101050108" 381 | }, 382 | { 383 | "label": "方正", 384 | "value": "101050109" 385 | }, 386 | { 387 | "label": "延寿", 388 | "value": "101050110" 389 | }, 390 | { 391 | "label": "尚志", 392 | "value": "101050111" 393 | }, 394 | { 395 | "label": "五常", 396 | "value": "101050112" 397 | }, 398 | { 399 | "label": "木兰", 400 | "value": "101050113" 401 | }, 402 | { 403 | "label": "齐齐哈尔", 404 | "value": "101050201" 405 | }, 406 | { 407 | "label": "讷河", 408 | "value": "101050202" 409 | }, 410 | { 411 | "label": "龙江", 412 | "value": "101050203" 413 | }, 414 | { 415 | "label": "甘南", 416 | "value": "101050204" 417 | }, 418 | { 419 | "label": "富裕", 420 | "value": "101050205" 421 | }, 422 | { 423 | "label": "依安", 424 | "value": "101050206" 425 | }, 426 | { 427 | "label": "拜泉", 428 | "value": "101050207" 429 | }, 430 | { 431 | "label": "克山", 432 | "value": "101050208" 433 | }, 434 | { 435 | "label": "克东", 436 | "value": "101050209" 437 | }, 438 | { 439 | "label": "泰来", 440 | "value": "101050210" 441 | }, 442 | { 443 | "label": "牡丹江", 444 | "value": "101050301" 445 | }, 446 | { 447 | "label": "海林", 448 | "value": "101050302" 449 | }, 450 | { 451 | "label": "穆棱", 452 | "value": "101050303" 453 | }, 454 | { 455 | "label": "林口", 456 | "value": "101050304" 457 | }, 458 | { 459 | "label": "绥芬河", 460 | "value": "101050305" 461 | }, 462 | { 463 | "label": "宁安", 464 | "value": "101050306" 465 | }, 466 | { 467 | "label": "东宁", 468 | "value": "101050307" 469 | }, 470 | { 471 | "label": "佳木斯", 472 | "value": "101050401" 473 | }, 474 | { 475 | "label": "汤原", 476 | "value": "101050402" 477 | }, 478 | { 479 | "label": "抚远", 480 | "value": "101050403" 481 | }, 482 | { 483 | "label": "桦川", 484 | "value": "101050404" 485 | }, 486 | { 487 | "label": "桦南", 488 | "value": "101050405" 489 | }, 490 | { 491 | "label": "同江", 492 | "value": "101050406" 493 | }, 494 | { 495 | "label": "富锦", 496 | "value": "101050407" 497 | }, 498 | { 499 | "label": "绥化", 500 | "value": "101050501" 501 | }, 502 | { 503 | "label": "肇东", 504 | "value": "101050502" 505 | }, 506 | { 507 | "label": "安达", 508 | "value": "101050503" 509 | }, 510 | { 511 | "label": "海伦", 512 | "value": "101050504" 513 | }, 514 | { 515 | "label": "明水", 516 | "value": "101050505" 517 | }, 518 | { 519 | "label": "望奎", 520 | "value": "101050506" 521 | }, 522 | { 523 | "label": "兰西", 524 | "value": "101050507" 525 | }, 526 | { 527 | "label": "青冈", 528 | "value": "101050508" 529 | }, 530 | { 531 | "label": "庆安", 532 | "value": "101050509" 533 | }, 534 | { 535 | "label": "绥棱", 536 | "value": "101050510" 537 | }, 538 | { 539 | "label": "黑河", 540 | "value": "101050601" 541 | }, 542 | { 543 | "label": "嫩江", 544 | "value": "101050602" 545 | }, 546 | { 547 | "label": "孙吴", 548 | "value": "101050603" 549 | }, 550 | { 551 | "label": "逊克", 552 | "value": "101050604" 553 | }, 554 | { 555 | "label": "五大连池", 556 | "value": "101050605" 557 | }, 558 | { 559 | "label": "北安", 560 | "value": "101050606" 561 | }, 562 | { 563 | "label": "大兴安岭", 564 | "value": "101050701" 565 | }, 566 | { 567 | "label": "塔河", 568 | "value": "101050702" 569 | }, 570 | { 571 | "label": "漠河", 572 | "value": "101050703" 573 | }, 574 | { 575 | "label": "呼玛", 576 | "value": "101050704" 577 | }, 578 | { 579 | "label": "呼中", 580 | "value": "101050705" 581 | }, 582 | { 583 | "label": "新林", 584 | "value": "101050706" 585 | }, 586 | { 587 | "label": "阿木尔", 588 | "value": "101050707" 589 | }, 590 | { 591 | "label": "加格达奇", 592 | "value": "101050708" 593 | }, 594 | { 595 | "label": "伊春", 596 | "value": "101050801" 597 | }, 598 | { 599 | "label": "乌伊岭", 600 | "value": "101050802" 601 | }, 602 | { 603 | "label": "五营", 604 | "value": "101050803" 605 | }, 606 | { 607 | "label": "铁力", 608 | "value": "101050804" 609 | }, 610 | { 611 | "label": "嘉荫", 612 | "value": "101050805" 613 | }, 614 | { 615 | "label": "大庆", 616 | "value": "101050901" 617 | }, 618 | { 619 | "label": "林甸", 620 | "value": "101050902" 621 | }, 622 | { 623 | "label": "肇州", 624 | "value": "101050903" 625 | }, 626 | { 627 | "label": "肇源", 628 | "value": "101050904" 629 | }, 630 | { 631 | "label": "杜蒙", 632 | "value": "101050905" 633 | }, 634 | { 635 | "label": "七台河", 636 | "value": "101051002" 637 | }, 638 | { 639 | "label": "勃利", 640 | "value": "101051003" 641 | }, 642 | { 643 | "label": "鸡西", 644 | "value": "101051101" 645 | }, 646 | { 647 | "label": "虎林", 648 | "value": "101051102" 649 | }, 650 | { 651 | "label": "密山", 652 | "value": "101051103" 653 | }, 654 | { 655 | "label": "鸡东", 656 | "value": "101051104" 657 | }, 658 | { 659 | "label": "鹤岗", 660 | "value": "101051201" 661 | }, 662 | { 663 | "label": "绥滨", 664 | "value": "101051202" 665 | }, 666 | { 667 | "label": "萝北", 668 | "value": "101051203" 669 | }, 670 | { 671 | "label": "双鸭山", 672 | "value": "101051301" 673 | }, 674 | { 675 | "label": "集贤", 676 | "value": "101051302" 677 | }, 678 | { 679 | "label": "宝清", 680 | "value": "101051303" 681 | }, 682 | { 683 | "label": "饶河", 684 | "value": "101051304" 685 | }, 686 | { 687 | "label": "长春", 688 | "value": "101060101" 689 | }, 690 | { 691 | "label": "农安", 692 | "value": "101060102" 693 | }, 694 | { 695 | "label": "德惠", 696 | "value": "101060103" 697 | }, 698 | { 699 | "label": "九台", 700 | "value": "101060104" 701 | }, 702 | { 703 | "label": "榆树", 704 | "value": "101060105" 705 | }, 706 | { 707 | "label": "双阳", 708 | "value": "101060106" 709 | }, 710 | { 711 | "label": "吉林", 712 | "value": "101060201" 713 | }, 714 | { 715 | "label": "舒兰", 716 | "value": "101060202" 717 | }, 718 | { 719 | "label": "永吉", 720 | "value": "101060203" 721 | }, 722 | { 723 | "label": "蛟河", 724 | "value": "101060204" 725 | }, 726 | { 727 | "label": "磐石", 728 | "value": "101060205" 729 | }, 730 | { 731 | "label": "桦甸", 732 | "value": "101060206" 733 | }, 734 | { 735 | "label": "烟筒山", 736 | "value": "101060207" 737 | }, 738 | { 739 | "label": "延吉", 740 | "value": "101060301" 741 | }, 742 | { 743 | "label": "敦化", 744 | "value": "101060302" 745 | }, 746 | { 747 | "label": "安图", 748 | "value": "101060303" 749 | }, 750 | { 751 | "label": "汪清", 752 | "value": "101060304" 753 | }, 754 | { 755 | "label": "和龙", 756 | "value": "101060305" 757 | }, 758 | { 759 | "label": "天池", 760 | "value": "101060306" 761 | }, 762 | { 763 | "label": "龙井", 764 | "value": "101060307" 765 | }, 766 | { 767 | "label": "珲春", 768 | "value": "101060308" 769 | }, 770 | { 771 | "label": "图们", 772 | "value": "101060309" 773 | }, 774 | { 775 | "label": "松江", 776 | "value": "101060310" 777 | }, 778 | { 779 | "label": "罗子沟", 780 | "value": "101060311" 781 | }, 782 | { 783 | "label": "延边", 784 | "value": "101060312" 785 | }, 786 | { 787 | "label": "四平", 788 | "value": "101060401" 789 | }, 790 | { 791 | "label": "双辽", 792 | "value": "101060402" 793 | }, 794 | { 795 | "label": "梨树", 796 | "value": "101060403" 797 | }, 798 | { 799 | "label": "公主岭", 800 | "value": "101060404" 801 | }, 802 | { 803 | "label": "伊通", 804 | "value": "101060405" 805 | }, 806 | { 807 | "label": "孤家子", 808 | "value": "101060406" 809 | }, 810 | { 811 | "label": "通化", 812 | "value": "101060501" 813 | }, 814 | { 815 | "label": "梅河口", 816 | "value": "101060502" 817 | }, 818 | { 819 | "label": "柳河", 820 | "value": "101060503" 821 | }, 822 | { 823 | "label": "辉南", 824 | "value": "101060504" 825 | }, 826 | { 827 | "label": "集安", 828 | "value": "101060505" 829 | }, 830 | { 831 | "label": "通化县", 832 | "value": "101060506" 833 | }, 834 | { 835 | "label": "白城", 836 | "value": "101060601" 837 | }, 838 | { 839 | "label": "洮南", 840 | "value": "101060602" 841 | }, 842 | { 843 | "label": "大安", 844 | "value": "101060603" 845 | }, 846 | { 847 | "label": "镇赉", 848 | "value": "101060604" 849 | }, 850 | { 851 | "label": "通榆", 852 | "value": "101060605" 853 | }, 854 | { 855 | "label": "辽源", 856 | "value": "101060701" 857 | }, 858 | { 859 | "label": "东丰", 860 | "value": "101060702" 861 | }, 862 | { 863 | "label": "松原", 864 | "value": "101060801" 865 | }, 866 | { 867 | "label": "乾安", 868 | "value": "101060802" 869 | }, 870 | { 871 | "label": "前郭", 872 | "value": "101060803" 873 | }, 874 | { 875 | "label": "长岭", 876 | "value": "101060804" 877 | }, 878 | { 879 | "label": "扶余", 880 | "value": "101060805" 881 | }, 882 | { 883 | "label": "白山", 884 | "value": "101060901" 885 | }, 886 | { 887 | "label": "靖宇", 888 | "value": "101060902" 889 | }, 890 | { 891 | "label": "临江", 892 | "value": "101060903" 893 | }, 894 | { 895 | "label": "东岗", 896 | "value": "101060904" 897 | }, 898 | { 899 | "label": "长白", 900 | "value": "101060905" 901 | }, 902 | { 903 | "label": "沈阳", 904 | "value": "101070101" 905 | }, 906 | { 907 | "label": "苏家屯", 908 | "value": "101070102" 909 | }, 910 | { 911 | "label": "辽中", 912 | "value": "101070103" 913 | }, 914 | { 915 | "label": "康平", 916 | "value": "101070104" 917 | }, 918 | { 919 | "label": "法库", 920 | "value": "101070105" 921 | }, 922 | { 923 | "label": "新民", 924 | "value": "101070106" 925 | }, 926 | { 927 | "label": "于洪", 928 | "value": "101070107" 929 | }, 930 | { 931 | "label": "新城子", 932 | "value": "101070108" 933 | }, 934 | { 935 | "label": "大连", 936 | "value": "101070201" 937 | }, 938 | { 939 | "label": "瓦房店", 940 | "value": "101070202" 941 | }, 942 | { 943 | "label": "金州", 944 | "value": "101070203" 945 | }, 946 | { 947 | "label": "普兰店", 948 | "value": "101070204" 949 | }, 950 | { 951 | "label": "旅顺", 952 | "value": "101070205" 953 | }, 954 | { 955 | "label": "长海", 956 | "value": "101070206" 957 | }, 958 | { 959 | "label": "庄河", 960 | "value": "101070207" 961 | }, 962 | { 963 | "label": "皮口", 964 | "value": "101070208" 965 | }, 966 | { 967 | "label": "海洋岛", 968 | "value": "101070209" 969 | }, 970 | { 971 | "label": "鞍山", 972 | "value": "101070301" 973 | }, 974 | { 975 | "label": "台安", 976 | "value": "101070302" 977 | }, 978 | { 979 | "label": "岫岩", 980 | "value": "101070303" 981 | }, 982 | { 983 | "label": "海城", 984 | "value": "101070304" 985 | }, 986 | { 987 | "label": "抚顺", 988 | "value": "101070401" 989 | }, 990 | { 991 | "label": "清原", 992 | "value": "101070403" 993 | }, 994 | { 995 | "label": "章党", 996 | "value": "101070404" 997 | }, 998 | { 999 | "label": "本溪", 1000 | "value": "101070501" 1001 | }, 1002 | { 1003 | "label": "本溪县", 1004 | "value": "101070502" 1005 | }, 1006 | { 1007 | "label": "草河口", 1008 | "value": "101070503" 1009 | }, 1010 | { 1011 | "label": "桓仁", 1012 | "value": "101070504" 1013 | }, 1014 | { 1015 | "label": "丹东", 1016 | "value": "101070601" 1017 | }, 1018 | { 1019 | "label": "凤城", 1020 | "value": "101070602" 1021 | }, 1022 | { 1023 | "label": "宽甸", 1024 | "value": "101070603" 1025 | }, 1026 | { 1027 | "label": "东港", 1028 | "value": "101070604" 1029 | }, 1030 | { 1031 | "label": "东沟", 1032 | "value": "101070605" 1033 | }, 1034 | { 1035 | "label": "锦州", 1036 | "value": "101070701" 1037 | }, 1038 | { 1039 | "label": "凌海", 1040 | "value": "101070702" 1041 | }, 1042 | { 1043 | "label": "北宁", 1044 | "value": "101070703" 1045 | }, 1046 | { 1047 | "label": "义县", 1048 | "value": "101070704" 1049 | }, 1050 | { 1051 | "label": "黑山", 1052 | "value": "101070705" 1053 | }, 1054 | { 1055 | "label": "北镇", 1056 | "value": "101070706" 1057 | }, 1058 | { 1059 | "label": "营口", 1060 | "value": "101070801" 1061 | }, 1062 | { 1063 | "label": "大石桥", 1064 | "value": "101070802" 1065 | }, 1066 | { 1067 | "label": "盖州", 1068 | "value": "101070803" 1069 | }, 1070 | { 1071 | "label": "阜新", 1072 | "value": "101070901" 1073 | }, 1074 | { 1075 | "label": "彰武", 1076 | "value": "101070902" 1077 | }, 1078 | { 1079 | "label": "辽阳", 1080 | "value": "101071001" 1081 | }, 1082 | { 1083 | "label": "辽阳县", 1084 | "value": "101071002" 1085 | }, 1086 | { 1087 | "label": "灯塔", 1088 | "value": "101071003" 1089 | }, 1090 | { 1091 | "label": "铁岭", 1092 | "value": "101071101" 1093 | }, 1094 | { 1095 | "label": "开原", 1096 | "value": "101071102" 1097 | }, 1098 | { 1099 | "label": "昌图", 1100 | "value": "101071103" 1101 | }, 1102 | { 1103 | "label": "西丰", 1104 | "value": "101071104" 1105 | }, 1106 | { 1107 | "label": "朝阳", 1108 | "value": "101071201" 1109 | }, 1110 | { 1111 | "label": "建平", 1112 | "value": "101071202" 1113 | }, 1114 | { 1115 | "label": "凌源", 1116 | "value": "101071203" 1117 | }, 1118 | { 1119 | "label": "喀左", 1120 | "value": "101071204" 1121 | }, 1122 | { 1123 | "label": "北票", 1124 | "value": "101071205" 1125 | }, 1126 | { 1127 | "label": "羊山", 1128 | "value": "101071206" 1129 | }, 1130 | { 1131 | "label": "建平县", 1132 | "value": "101071207" 1133 | }, 1134 | { 1135 | "label": "盘锦", 1136 | "value": "101071301" 1137 | }, 1138 | { 1139 | "label": "大洼", 1140 | "value": "101071302" 1141 | }, 1142 | { 1143 | "label": "盘山", 1144 | "value": "101071303" 1145 | }, 1146 | { 1147 | "label": "葫芦岛", 1148 | "value": "101071401" 1149 | }, 1150 | { 1151 | "label": "建昌", 1152 | "value": "101071402" 1153 | }, 1154 | { 1155 | "label": "绥中", 1156 | "value": "101071403" 1157 | }, 1158 | { 1159 | "label": "兴城", 1160 | "value": "101071404" 1161 | }, 1162 | { 1163 | "label": "呼和浩特", 1164 | "value": "101080101" 1165 | }, 1166 | { 1167 | "label": "土默特左旗", 1168 | "value": "101080102" 1169 | }, 1170 | { 1171 | "label": "托克托", 1172 | "value": "101080103" 1173 | }, 1174 | { 1175 | "label": "和林格尔", 1176 | "value": "101080104" 1177 | }, 1178 | { 1179 | "label": "清水河", 1180 | "value": "101080105" 1181 | }, 1182 | { 1183 | "label": "呼和浩特市郊区", 1184 | "value": "101080106" 1185 | }, 1186 | { 1187 | "label": "武川", 1188 | "value": "101080107" 1189 | }, 1190 | { 1191 | "label": "包头", 1192 | "value": "101080201" 1193 | }, 1194 | { 1195 | "label": "白云鄂博", 1196 | "value": "101080202" 1197 | }, 1198 | { 1199 | "label": "满都拉", 1200 | "value": "101080203" 1201 | }, 1202 | { 1203 | "label": "土默特右旗", 1204 | "value": "101080204" 1205 | }, 1206 | { 1207 | "label": "固阳", 1208 | "value": "101080205" 1209 | }, 1210 | { 1211 | "label": "达尔罕茂明安联合旗", 1212 | "value": "101080206" 1213 | }, 1214 | { 1215 | "label": "石拐", 1216 | "value": "101080207" 1217 | }, 1218 | { 1219 | "label": "乌海", 1220 | "value": "101080301" 1221 | }, 1222 | { 1223 | "label": "集宁", 1224 | "value": "101080401" 1225 | }, 1226 | { 1227 | "label": "卓资", 1228 | "value": "101080402" 1229 | }, 1230 | { 1231 | "label": "化德", 1232 | "value": "101080403" 1233 | }, 1234 | { 1235 | "label": "商都", 1236 | "value": "101080404" 1237 | }, 1238 | { 1239 | "label": "希拉穆仁", 1240 | "value": "101080405" 1241 | }, 1242 | { 1243 | "label": "兴和", 1244 | "value": "101080406" 1245 | }, 1246 | { 1247 | "label": "凉城", 1248 | "value": "101080407" 1249 | }, 1250 | { 1251 | "label": "察哈尔右翼前旗", 1252 | "value": "101080408" 1253 | }, 1254 | { 1255 | "label": "察哈尔右翼中旗", 1256 | "value": "101080409" 1257 | }, 1258 | { 1259 | "label": "察哈尔右翼后旗", 1260 | "value": "101080410" 1261 | }, 1262 | { 1263 | "label": "四子王旗", 1264 | "value": "101080411" 1265 | }, 1266 | { 1267 | "label": "丰镇", 1268 | "value": "101080412" 1269 | }, 1270 | { 1271 | "label": "通辽", 1272 | "value": "101080501" 1273 | }, 1274 | { 1275 | "label": "舍伯吐", 1276 | "value": "101080502" 1277 | }, 1278 | { 1279 | "label": "科尔沁左翼中旗", 1280 | "value": "101080503" 1281 | }, 1282 | { 1283 | "label": "科尔沁左翼后旗", 1284 | "value": "101080504" 1285 | }, 1286 | { 1287 | "label": "青龙山", 1288 | "value": "101080505" 1289 | }, 1290 | { 1291 | "label": "开鲁", 1292 | "value": "101080506" 1293 | }, 1294 | { 1295 | "label": "库伦旗", 1296 | "value": "101080507" 1297 | }, 1298 | { 1299 | "label": "奈曼旗", 1300 | "value": "101080508" 1301 | }, 1302 | { 1303 | "label": "扎鲁特旗", 1304 | "value": "101080509" 1305 | }, 1306 | { 1307 | "label": "高力板", 1308 | "value": "101080510" 1309 | }, 1310 | { 1311 | "label": "巴雅尔吐胡硕", 1312 | "value": "101080511" 1313 | }, 1314 | { 1315 | "label": "通辽钱家店", 1316 | "value": "101080512" 1317 | }, 1318 | { 1319 | "label": "赤峰", 1320 | "value": "101080601" 1321 | }, 1322 | { 1323 | "label": "赤峰郊区站", 1324 | "value": "101080602" 1325 | }, 1326 | { 1327 | "label": "阿鲁科尔沁旗", 1328 | "value": "101080603" 1329 | }, 1330 | { 1331 | "label": "浩尔吐", 1332 | "value": "101080604" 1333 | }, 1334 | { 1335 | "label": "巴林左旗", 1336 | "value": "101080605" 1337 | }, 1338 | { 1339 | "label": "巴林右旗", 1340 | "value": "101080606" 1341 | }, 1342 | { 1343 | "label": "林西", 1344 | "value": "101080607" 1345 | }, 1346 | { 1347 | "label": "克什克腾旗", 1348 | "value": "101080608" 1349 | }, 1350 | { 1351 | "label": "翁牛特旗", 1352 | "value": "101080609" 1353 | }, 1354 | { 1355 | "label": "岗子", 1356 | "value": "101080610" 1357 | }, 1358 | { 1359 | "label": "喀喇沁旗", 1360 | "value": "101080611" 1361 | }, 1362 | { 1363 | "label": "八里罕", 1364 | "value": "101080612" 1365 | }, 1366 | { 1367 | "label": "宁城", 1368 | "value": "101080613" 1369 | }, 1370 | { 1371 | "label": "敖汉旗", 1372 | "value": "101080614" 1373 | }, 1374 | { 1375 | "label": "宝过图", 1376 | "value": "101080615" 1377 | }, 1378 | { 1379 | "label": "鄂尔多斯", 1380 | "value": "101080701" 1381 | }, 1382 | { 1383 | "label": "达拉特旗", 1384 | "value": "101080703" 1385 | }, 1386 | { 1387 | "label": "准格尔旗", 1388 | "value": "101080704" 1389 | }, 1390 | { 1391 | "label": "鄂托克前旗", 1392 | "value": "101080705" 1393 | }, 1394 | { 1395 | "label": "河南", 1396 | "value": "101080706" 1397 | }, 1398 | { 1399 | "label": "伊克乌素", 1400 | "value": "101080707" 1401 | }, 1402 | { 1403 | "label": "鄂托克旗", 1404 | "value": "101080708" 1405 | }, 1406 | { 1407 | "label": "杭锦旗", 1408 | "value": "101080709" 1409 | }, 1410 | { 1411 | "label": "乌审旗", 1412 | "value": "101080710" 1413 | }, 1414 | { 1415 | "label": "伊金霍洛旗", 1416 | "value": "101080711" 1417 | }, 1418 | { 1419 | "label": "乌审召", 1420 | "value": "101080712" 1421 | }, 1422 | { 1423 | "label": "东胜", 1424 | "value": "101080713" 1425 | }, 1426 | { 1427 | "label": "临河", 1428 | "value": "101080801" 1429 | }, 1430 | { 1431 | "label": "五原", 1432 | "value": "101080802" 1433 | }, 1434 | { 1435 | "label": "磴口", 1436 | "value": "101080803" 1437 | }, 1438 | { 1439 | "label": "乌拉特前旗", 1440 | "value": "101080804" 1441 | }, 1442 | { 1443 | "label": "大佘太", 1444 | "value": "101080805" 1445 | }, 1446 | { 1447 | "label": "乌拉特中旗", 1448 | "value": "101080806" 1449 | }, 1450 | { 1451 | "label": "乌拉特后旗", 1452 | "value": "101080807" 1453 | }, 1454 | { 1455 | "label": "海力素", 1456 | "value": "101080808" 1457 | }, 1458 | { 1459 | "label": "那仁宝力格", 1460 | "value": "101080809" 1461 | }, 1462 | { 1463 | "label": "杭锦后旗", 1464 | "value": "101080810" 1465 | }, 1466 | { 1467 | "label": "巴盟农试站", 1468 | "value": "101080811" 1469 | }, 1470 | { 1471 | "label": "锡林浩特", 1472 | "value": "101080901" 1473 | }, 1474 | { 1475 | "label": "朝克乌拉", 1476 | "value": "101080902" 1477 | }, 1478 | { 1479 | "label": "二连浩特", 1480 | "value": "101080903" 1481 | }, 1482 | { 1483 | "label": "阿巴嘎旗", 1484 | "value": "101080904" 1485 | }, 1486 | { 1487 | "label": "伊和郭勒", 1488 | "value": "101080905" 1489 | }, 1490 | { 1491 | "label": "苏尼特左旗", 1492 | "value": "101080906" 1493 | }, 1494 | { 1495 | "label": "苏尼特右旗", 1496 | "value": "101080907" 1497 | }, 1498 | { 1499 | "label": "朱日和", 1500 | "value": "101080908" 1501 | }, 1502 | { 1503 | "label": "东乌珠穆沁旗", 1504 | "value": "101080909" 1505 | }, 1506 | { 1507 | "label": "西乌珠穆沁旗", 1508 | "value": "101080910" 1509 | }, 1510 | { 1511 | "label": "太仆寺旗", 1512 | "value": "101080911" 1513 | }, 1514 | { 1515 | "label": "镶黄旗", 1516 | "value": "101080912" 1517 | }, 1518 | { 1519 | "label": "正镶白旗", 1520 | "value": "101080913" 1521 | }, 1522 | { 1523 | "label": "正兰旗", 1524 | "value": "101080914" 1525 | }, 1526 | { 1527 | "label": "多伦", 1528 | "value": "101080915" 1529 | }, 1530 | { 1531 | "label": "博克图", 1532 | "value": "101080916" 1533 | }, 1534 | { 1535 | "label": "乌拉盖", 1536 | "value": "101080917" 1537 | }, 1538 | { 1539 | "label": "白日乌拉", 1540 | "value": "101080918" 1541 | }, 1542 | { 1543 | "label": "那日图", 1544 | "value": "101080919" 1545 | }, 1546 | { 1547 | "label": "呼伦贝尔", 1548 | "value": "101081000" 1549 | }, 1550 | { 1551 | "label": "海拉尔", 1552 | "value": "101081001" 1553 | }, 1554 | { 1555 | "label": "小二沟", 1556 | "value": "101081002" 1557 | }, 1558 | { 1559 | "label": "阿荣旗", 1560 | "value": "101081003" 1561 | }, 1562 | { 1563 | "label": "莫力达瓦旗", 1564 | "value": "101081004" 1565 | }, 1566 | { 1567 | "label": "鄂伦春旗", 1568 | "value": "101081005" 1569 | }, 1570 | { 1571 | "label": "鄂温克旗", 1572 | "value": "101081006" 1573 | }, 1574 | { 1575 | "label": "陈巴尔虎旗", 1576 | "value": "101081007" 1577 | }, 1578 | { 1579 | "label": "新巴尔虎左旗", 1580 | "value": "101081008" 1581 | }, 1582 | { 1583 | "label": "新巴尔虎右旗", 1584 | "value": "101081009" 1585 | }, 1586 | { 1587 | "label": "满洲里", 1588 | "value": "101081010" 1589 | }, 1590 | { 1591 | "label": "牙克石", 1592 | "value": "101081011" 1593 | }, 1594 | { 1595 | "label": "扎兰屯", 1596 | "value": "101081012" 1597 | }, 1598 | { 1599 | "label": "额尔古纳", 1600 | "value": "101081014" 1601 | }, 1602 | { 1603 | "label": "根河", 1604 | "value": "101081015" 1605 | }, 1606 | { 1607 | "label": "图里河", 1608 | "value": "101081016" 1609 | }, 1610 | { 1611 | "label": "乌兰浩特", 1612 | "value": "101081101" 1613 | }, 1614 | { 1615 | "label": "阿尔山", 1616 | "value": "101081102" 1617 | }, 1618 | { 1619 | "label": "科尔沁右翼中旗", 1620 | "value": "101081103" 1621 | }, 1622 | { 1623 | "label": "胡尔勒", 1624 | "value": "101081104" 1625 | }, 1626 | { 1627 | "label": "扎赉特旗", 1628 | "value": "101081105" 1629 | }, 1630 | { 1631 | "label": "索伦", 1632 | "value": "101081106" 1633 | }, 1634 | { 1635 | "label": "突泉", 1636 | "value": "101081107" 1637 | }, 1638 | { 1639 | "label": "霍林郭勒", 1640 | "value": "101081108" 1641 | }, 1642 | { 1643 | "label": "阿拉善左旗", 1644 | "value": "101081201" 1645 | }, 1646 | { 1647 | "label": "阿拉善右旗", 1648 | "value": "101081202" 1649 | }, 1650 | { 1651 | "label": "额济纳旗", 1652 | "value": "101081203" 1653 | }, 1654 | { 1655 | "label": "拐子湖", 1656 | "value": "101081204" 1657 | }, 1658 | { 1659 | "label": "吉兰太", 1660 | "value": "101081205" 1661 | }, 1662 | { 1663 | "label": "锡林高勒", 1664 | "value": "101081206" 1665 | }, 1666 | { 1667 | "label": "头道湖", 1668 | "value": "101081207" 1669 | }, 1670 | { 1671 | "label": "中泉子", 1672 | "value": "101081208" 1673 | }, 1674 | { 1675 | "label": "巴彦诺尔贡", 1676 | "value": "101081209" 1677 | }, 1678 | { 1679 | "label": "雅布赖", 1680 | "value": "101081210" 1681 | }, 1682 | { 1683 | "label": "乌斯太", 1684 | "value": "101081211" 1685 | }, 1686 | { 1687 | "label": "孪井滩", 1688 | "value": "101081212" 1689 | }, 1690 | { 1691 | "label": "石家庄", 1692 | "value": "101090101" 1693 | }, 1694 | { 1695 | "label": "井陉", 1696 | "value": "101090102" 1697 | }, 1698 | { 1699 | "label": "正定", 1700 | "value": "101090103" 1701 | }, 1702 | { 1703 | "label": "栾城", 1704 | "value": "101090104" 1705 | }, 1706 | { 1707 | "label": "行唐", 1708 | "value": "101090105" 1709 | }, 1710 | { 1711 | "label": "灵寿", 1712 | "value": "101090106" 1713 | }, 1714 | { 1715 | "label": "高邑", 1716 | "value": "101090107" 1717 | }, 1718 | { 1719 | "label": "深泽", 1720 | "value": "101090108" 1721 | }, 1722 | { 1723 | "label": "赞皇", 1724 | "value": "101090109" 1725 | }, 1726 | { 1727 | "label": "无极", 1728 | "value": "101090110" 1729 | }, 1730 | { 1731 | "label": "平山", 1732 | "value": "101090111" 1733 | }, 1734 | { 1735 | "label": "元氏", 1736 | "value": "101090112" 1737 | }, 1738 | { 1739 | "label": "赵县", 1740 | "value": "101090113" 1741 | }, 1742 | { 1743 | "label": "辛集", 1744 | "value": "101090114" 1745 | }, 1746 | { 1747 | "label": "藁城", 1748 | "value": "101090115" 1749 | }, 1750 | { 1751 | "label": "晋洲", 1752 | "value": "101090116" 1753 | }, 1754 | { 1755 | "label": "新乐", 1756 | "value": "101090117" 1757 | }, 1758 | { 1759 | "label": "保定", 1760 | "value": "101090201" 1761 | }, 1762 | { 1763 | "label": "满城", 1764 | "value": "101090202" 1765 | }, 1766 | { 1767 | "label": "阜平", 1768 | "value": "101090203" 1769 | }, 1770 | { 1771 | "label": "徐水", 1772 | "value": "101090204" 1773 | }, 1774 | { 1775 | "label": "唐县", 1776 | "value": "101090205" 1777 | }, 1778 | { 1779 | "label": "高阳", 1780 | "value": "101090206" 1781 | }, 1782 | { 1783 | "label": "容城", 1784 | "value": "101090207" 1785 | }, 1786 | { 1787 | "label": "紫荆关", 1788 | "value": "101090208" 1789 | }, 1790 | { 1791 | "label": "涞源", 1792 | "value": "101090209" 1793 | }, 1794 | { 1795 | "label": "望都", 1796 | "value": "101090210" 1797 | }, 1798 | { 1799 | "label": "安新", 1800 | "value": "101090211" 1801 | }, 1802 | { 1803 | "label": "易县", 1804 | "value": "101090212" 1805 | }, 1806 | { 1807 | "label": "涞水", 1808 | "value": "101090213" 1809 | }, 1810 | { 1811 | "label": "曲阳", 1812 | "value": "101090214" 1813 | }, 1814 | { 1815 | "label": "蠡县", 1816 | "value": "101090215" 1817 | }, 1818 | { 1819 | "label": "顺平", 1820 | "value": "101090216" 1821 | }, 1822 | { 1823 | "label": "雄县", 1824 | "value": "101090217" 1825 | }, 1826 | { 1827 | "label": "涿州", 1828 | "value": "101090218" 1829 | }, 1830 | { 1831 | "label": "定州", 1832 | "value": "101090219" 1833 | }, 1834 | { 1835 | "label": "安国", 1836 | "value": "101090220" 1837 | }, 1838 | { 1839 | "label": "高碑店", 1840 | "value": "101090221" 1841 | }, 1842 | { 1843 | "label": "张家口", 1844 | "value": "101090301" 1845 | }, 1846 | { 1847 | "label": "宣化", 1848 | "value": "101090302" 1849 | }, 1850 | { 1851 | "label": "张北", 1852 | "value": "101090303" 1853 | }, 1854 | { 1855 | "label": "康保", 1856 | "value": "101090304" 1857 | }, 1858 | { 1859 | "label": "沽源", 1860 | "value": "101090305" 1861 | }, 1862 | { 1863 | "label": "尚义", 1864 | "value": "101090306" 1865 | }, 1866 | { 1867 | "label": "蔚县", 1868 | "value": "101090307" 1869 | }, 1870 | { 1871 | "label": "阳原", 1872 | "value": "101090308" 1873 | }, 1874 | { 1875 | "label": "怀安", 1876 | "value": "101090309" 1877 | }, 1878 | { 1879 | "label": "万全", 1880 | "value": "101090310" 1881 | }, 1882 | { 1883 | "label": "怀来", 1884 | "value": "101090311" 1885 | }, 1886 | { 1887 | "label": "涿鹿", 1888 | "value": "101090312" 1889 | }, 1890 | { 1891 | "label": "赤城", 1892 | "value": "101090313" 1893 | }, 1894 | { 1895 | "label": "崇礼", 1896 | "value": "101090314" 1897 | }, 1898 | { 1899 | "label": "承德", 1900 | "value": "101090402" 1901 | }, 1902 | { 1903 | "label": "承德县", 1904 | "value": "101090403" 1905 | }, 1906 | { 1907 | "label": "兴隆", 1908 | "value": "101090404" 1909 | }, 1910 | { 1911 | "label": "平泉", 1912 | "value": "101090405" 1913 | }, 1914 | { 1915 | "label": "滦平", 1916 | "value": "101090406" 1917 | }, 1918 | { 1919 | "label": "隆化", 1920 | "value": "101090407" 1921 | }, 1922 | { 1923 | "label": "丰宁", 1924 | "value": "101090408" 1925 | }, 1926 | { 1927 | "label": "宽城", 1928 | "value": "101090409" 1929 | }, 1930 | { 1931 | "label": "围场", 1932 | "value": "101090410" 1933 | }, 1934 | { 1935 | "label": "塞罕坎", 1936 | "value": "101090411" 1937 | }, 1938 | { 1939 | "label": "唐山", 1940 | "value": "101090501" 1941 | }, 1942 | { 1943 | "label": "丰南", 1944 | "value": "101090502" 1945 | }, 1946 | { 1947 | "label": "丰润", 1948 | "value": "101090503" 1949 | }, 1950 | { 1951 | "label": "滦县", 1952 | "value": "101090504" 1953 | }, 1954 | { 1955 | "label": "滦南", 1956 | "value": "101090505" 1957 | }, 1958 | { 1959 | "label": "乐亭", 1960 | "value": "101090506" 1961 | }, 1962 | { 1963 | "label": "迁西", 1964 | "value": "101090507" 1965 | }, 1966 | { 1967 | "label": "玉田", 1968 | "value": "101090508" 1969 | }, 1970 | { 1971 | "label": "唐海", 1972 | "value": "101090509" 1973 | }, 1974 | { 1975 | "label": "遵化", 1976 | "value": "101090510" 1977 | }, 1978 | { 1979 | "label": "迁安", 1980 | "value": "101090511" 1981 | }, 1982 | { 1983 | "label": "廊坊", 1984 | "value": "101090601" 1985 | }, 1986 | { 1987 | "label": "固安", 1988 | "value": "101090602" 1989 | }, 1990 | { 1991 | "label": "永清", 1992 | "value": "101090603" 1993 | }, 1994 | { 1995 | "label": "香河", 1996 | "value": "101090604" 1997 | }, 1998 | { 1999 | "label": "大城", 2000 | "value": "101090605" 2001 | }, 2002 | { 2003 | "label": "文安", 2004 | "value": "101090606" 2005 | }, 2006 | { 2007 | "label": "大厂", 2008 | "value": "101090607" 2009 | }, 2010 | { 2011 | "label": "霸州", 2012 | "value": "101090608" 2013 | }, 2014 | { 2015 | "label": "三河", 2016 | "value": "101090609" 2017 | }, 2018 | { 2019 | "label": "沧州", 2020 | "value": "101090701" 2021 | }, 2022 | { 2023 | "label": "青县", 2024 | "value": "101090702" 2025 | }, 2026 | { 2027 | "label": "东光", 2028 | "value": "101090703" 2029 | }, 2030 | { 2031 | "label": "海兴", 2032 | "value": "101090704" 2033 | }, 2034 | { 2035 | "label": "盐山", 2036 | "value": "101090705" 2037 | }, 2038 | { 2039 | "label": "肃宁", 2040 | "value": "101090706" 2041 | }, 2042 | { 2043 | "label": "南皮", 2044 | "value": "101090707" 2045 | }, 2046 | { 2047 | "label": "吴桥", 2048 | "value": "101090708" 2049 | }, 2050 | { 2051 | "label": "献县", 2052 | "value": "101090709" 2053 | }, 2054 | { 2055 | "label": "孟村", 2056 | "value": "101090710" 2057 | }, 2058 | { 2059 | "label": "泊头", 2060 | "value": "101090711" 2061 | }, 2062 | { 2063 | "label": "任丘", 2064 | "value": "101090712" 2065 | }, 2066 | { 2067 | "label": "黄骅", 2068 | "value": "101090713" 2069 | }, 2070 | { 2071 | "label": "河间", 2072 | "value": "101090714" 2073 | }, 2074 | { 2075 | "label": "曹妃甸", 2076 | "value": "101090715" 2077 | }, 2078 | { 2079 | "label": "衡水", 2080 | "value": "101090801" 2081 | }, 2082 | { 2083 | "label": "枣强", 2084 | "value": "101090802" 2085 | }, 2086 | { 2087 | "label": "武邑", 2088 | "value": "101090803" 2089 | }, 2090 | { 2091 | "label": "武强", 2092 | "value": "101090804" 2093 | }, 2094 | { 2095 | "label": "饶阳", 2096 | "value": "101090805" 2097 | }, 2098 | { 2099 | "label": "安平", 2100 | "value": "101090806" 2101 | }, 2102 | { 2103 | "label": "故城", 2104 | "value": "101090807" 2105 | }, 2106 | { 2107 | "label": "景县", 2108 | "value": "101090808" 2109 | }, 2110 | { 2111 | "label": "阜城", 2112 | "value": "101090809" 2113 | }, 2114 | { 2115 | "label": "冀州", 2116 | "value": "101090810" 2117 | }, 2118 | { 2119 | "label": "深州", 2120 | "value": "101090811" 2121 | }, 2122 | { 2123 | "label": "邢台", 2124 | "value": "101090901" 2125 | }, 2126 | { 2127 | "label": "临城", 2128 | "value": "101090902" 2129 | }, 2130 | { 2131 | "label": "邢台县浆水", 2132 | "value": "101090903" 2133 | }, 2134 | { 2135 | "label": "内邱", 2136 | "value": "101090904" 2137 | }, 2138 | { 2139 | "label": "柏乡", 2140 | "value": "101090905" 2141 | }, 2142 | { 2143 | "label": "隆尧", 2144 | "value": "101090906" 2145 | }, 2146 | { 2147 | "label": "南和", 2148 | "value": "101090907" 2149 | }, 2150 | { 2151 | "label": "宁晋", 2152 | "value": "101090908" 2153 | }, 2154 | { 2155 | "label": "巨鹿", 2156 | "value": "101090909" 2157 | }, 2158 | { 2159 | "label": "新河", 2160 | "value": "101090910" 2161 | }, 2162 | { 2163 | "label": "广宗", 2164 | "value": "101090911" 2165 | }, 2166 | { 2167 | "label": "平乡", 2168 | "value": "101090912" 2169 | }, 2170 | { 2171 | "label": "威县", 2172 | "value": "101090913" 2173 | }, 2174 | { 2175 | "label": "清河", 2176 | "value": "101090914" 2177 | }, 2178 | { 2179 | "label": "临西", 2180 | "value": "101090915" 2181 | }, 2182 | { 2183 | "label": "南宫", 2184 | "value": "101090916" 2185 | }, 2186 | { 2187 | "label": "沙河", 2188 | "value": "101090917" 2189 | }, 2190 | { 2191 | "label": "任县", 2192 | "value": "101090918" 2193 | }, 2194 | { 2195 | "label": "邯郸", 2196 | "value": "101091001" 2197 | }, 2198 | { 2199 | "label": "峰峰", 2200 | "value": "101091002" 2201 | }, 2202 | { 2203 | "label": "临漳", 2204 | "value": "101091003" 2205 | }, 2206 | { 2207 | "label": "成安", 2208 | "value": "101091004" 2209 | }, 2210 | { 2211 | "label": "大名", 2212 | "value": "101091005" 2213 | }, 2214 | { 2215 | "label": "涉县", 2216 | "value": "101091006" 2217 | }, 2218 | { 2219 | "label": "磁县", 2220 | "value": "101091007" 2221 | }, 2222 | { 2223 | "label": "肥乡", 2224 | "value": "101091008" 2225 | }, 2226 | { 2227 | "label": "永年", 2228 | "value": "101091009" 2229 | }, 2230 | { 2231 | "label": "邱县", 2232 | "value": "101091010" 2233 | }, 2234 | { 2235 | "label": "鸡泽", 2236 | "value": "101091011" 2237 | }, 2238 | { 2239 | "label": "广平", 2240 | "value": "101091012" 2241 | }, 2242 | { 2243 | "label": "馆陶", 2244 | "value": "101091013" 2245 | }, 2246 | { 2247 | "label": "魏县", 2248 | "value": "101091014" 2249 | }, 2250 | { 2251 | "label": "曲周", 2252 | "value": "101091015" 2253 | }, 2254 | { 2255 | "label": "武安", 2256 | "value": "101091016" 2257 | }, 2258 | { 2259 | "label": "秦皇岛", 2260 | "value": "101091101" 2261 | }, 2262 | { 2263 | "label": "青龙", 2264 | "value": "101091102" 2265 | }, 2266 | { 2267 | "label": "昌黎", 2268 | "value": "101091103" 2269 | }, 2270 | { 2271 | "label": "抚宁", 2272 | "value": "101091104" 2273 | }, 2274 | { 2275 | "label": "卢龙", 2276 | "value": "101091105" 2277 | }, 2278 | { 2279 | "label": "北戴河", 2280 | "value": "101091106" 2281 | }, 2282 | { 2283 | "label": "太原", 2284 | "value": "101100101" 2285 | }, 2286 | { 2287 | "label": "清徐", 2288 | "value": "101100102" 2289 | }, 2290 | { 2291 | "label": "阳曲", 2292 | "value": "101100103" 2293 | }, 2294 | { 2295 | "label": "娄烦", 2296 | "value": "101100104" 2297 | }, 2298 | { 2299 | "label": "太原古交区", 2300 | "value": "101100105" 2301 | }, 2302 | { 2303 | "label": "太原北郊", 2304 | "value": "101100106" 2305 | }, 2306 | { 2307 | "label": "太原南郊", 2308 | "value": "101100107" 2309 | }, 2310 | { 2311 | "label": "大同", 2312 | "value": "101100201" 2313 | }, 2314 | { 2315 | "label": "阳高", 2316 | "value": "101100202" 2317 | }, 2318 | { 2319 | "label": "大同县", 2320 | "value": "101100203" 2321 | }, 2322 | { 2323 | "label": "天镇", 2324 | "value": "101100204" 2325 | }, 2326 | { 2327 | "label": "广灵", 2328 | "value": "101100205" 2329 | }, 2330 | { 2331 | "label": "灵邱", 2332 | "value": "101100206" 2333 | }, 2334 | { 2335 | "label": "浑源", 2336 | "value": "101100207" 2337 | }, 2338 | { 2339 | "label": "左云", 2340 | "value": "101100208" 2341 | }, 2342 | { 2343 | "label": "阳泉", 2344 | "value": "101100301" 2345 | }, 2346 | { 2347 | "label": "盂县", 2348 | "value": "101100302" 2349 | }, 2350 | { 2351 | "label": "平定", 2352 | "value": "101100303" 2353 | }, 2354 | { 2355 | "label": "晋中", 2356 | "value": "101100401" 2357 | }, 2358 | { 2359 | "label": "榆次", 2360 | "value": "101100402" 2361 | }, 2362 | { 2363 | "label": "榆社", 2364 | "value": "101100403" 2365 | }, 2366 | { 2367 | "label": "左权", 2368 | "value": "101100404" 2369 | }, 2370 | { 2371 | "label": "和顺", 2372 | "value": "101100405" 2373 | }, 2374 | { 2375 | "label": "昔阳", 2376 | "value": "101100406" 2377 | }, 2378 | { 2379 | "label": "寿阳", 2380 | "value": "101100407" 2381 | }, 2382 | { 2383 | "label": "太谷", 2384 | "value": "101100408" 2385 | }, 2386 | { 2387 | "label": "祁县", 2388 | "value": "101100409" 2389 | }, 2390 | { 2391 | "label": "平遥", 2392 | "value": "101100410" 2393 | }, 2394 | { 2395 | "label": "灵石", 2396 | "value": "101100411" 2397 | }, 2398 | { 2399 | "label": "介休", 2400 | "value": "101100412" 2401 | }, 2402 | { 2403 | "label": "长治", 2404 | "value": "101100501" 2405 | }, 2406 | { 2407 | "label": "黎城", 2408 | "value": "101100502" 2409 | }, 2410 | { 2411 | "label": "屯留", 2412 | "value": "101100503" 2413 | }, 2414 | { 2415 | "label": "潞城", 2416 | "value": "101100504" 2417 | }, 2418 | { 2419 | "label": "襄垣", 2420 | "value": "101100505" 2421 | }, 2422 | { 2423 | "label": "平顺", 2424 | "value": "101100506" 2425 | }, 2426 | { 2427 | "label": "武乡", 2428 | "value": "101100507" 2429 | }, 2430 | { 2431 | "label": "沁县", 2432 | "value": "101100508" 2433 | }, 2434 | { 2435 | "label": "长子", 2436 | "value": "101100509" 2437 | }, 2438 | { 2439 | "label": "沁源", 2440 | "value": "101100510" 2441 | }, 2442 | { 2443 | "label": "壶关", 2444 | "value": "101100511" 2445 | }, 2446 | { 2447 | "label": "晋城", 2448 | "value": "101100601" 2449 | }, 2450 | { 2451 | "label": "沁水", 2452 | "value": "101100602" 2453 | }, 2454 | { 2455 | "label": "阳城", 2456 | "value": "101100603" 2457 | }, 2458 | { 2459 | "label": "陵川", 2460 | "value": "101100604" 2461 | }, 2462 | { 2463 | "label": "高平", 2464 | "value": "101100605" 2465 | }, 2466 | { 2467 | "label": "临汾", 2468 | "value": "101100701" 2469 | }, 2470 | { 2471 | "label": "曲沃", 2472 | "value": "101100702" 2473 | }, 2474 | { 2475 | "label": "永和", 2476 | "value": "101100703" 2477 | }, 2478 | { 2479 | "label": "隰县", 2480 | "value": "101100704" 2481 | }, 2482 | { 2483 | "label": "大宁", 2484 | "value": "101100705" 2485 | }, 2486 | { 2487 | "label": "吉县", 2488 | "value": "101100706" 2489 | }, 2490 | { 2491 | "label": "襄汾", 2492 | "value": "101100707" 2493 | }, 2494 | { 2495 | "label": "蒲县", 2496 | "value": "101100708" 2497 | }, 2498 | { 2499 | "label": "汾西", 2500 | "value": "101100709" 2501 | }, 2502 | { 2503 | "label": "洪洞", 2504 | "value": "101100710" 2505 | }, 2506 | { 2507 | "label": "霍州", 2508 | "value": "101100711" 2509 | }, 2510 | { 2511 | "label": "乡宁", 2512 | "value": "101100712" 2513 | }, 2514 | { 2515 | "label": "翼城", 2516 | "value": "101100713" 2517 | }, 2518 | { 2519 | "label": "侯马", 2520 | "value": "101100714" 2521 | }, 2522 | { 2523 | "label": "浮山", 2524 | "value": "101100715" 2525 | }, 2526 | { 2527 | "label": "安泽", 2528 | "value": "101100716" 2529 | }, 2530 | { 2531 | "label": "古县", 2532 | "value": "101100717" 2533 | }, 2534 | { 2535 | "label": "运城", 2536 | "value": "101100801" 2537 | }, 2538 | { 2539 | "label": "临猗", 2540 | "value": "101100802" 2541 | }, 2542 | { 2543 | "label": "稷山", 2544 | "value": "101100803" 2545 | }, 2546 | { 2547 | "label": "万荣", 2548 | "value": "101100804" 2549 | }, 2550 | { 2551 | "label": "河津", 2552 | "value": "101100805" 2553 | }, 2554 | { 2555 | "label": "新绛", 2556 | "value": "101100806" 2557 | }, 2558 | { 2559 | "label": "绛县", 2560 | "value": "101100807" 2561 | }, 2562 | { 2563 | "label": "闻喜", 2564 | "value": "101100808" 2565 | }, 2566 | { 2567 | "label": "垣曲", 2568 | "value": "101100809" 2569 | }, 2570 | { 2571 | "label": "永济", 2572 | "value": "101100810" 2573 | }, 2574 | { 2575 | "label": "芮城", 2576 | "value": "101100811" 2577 | }, 2578 | { 2579 | "label": "夏县", 2580 | "value": "101100812" 2581 | }, 2582 | { 2583 | "label": "平陆", 2584 | "value": "101100813" 2585 | }, 2586 | { 2587 | "label": "朔州", 2588 | "value": "101100901" 2589 | }, 2590 | { 2591 | "label": "平鲁", 2592 | "value": "101100902" 2593 | }, 2594 | { 2595 | "label": "山阴", 2596 | "value": "101100903" 2597 | }, 2598 | { 2599 | "label": "右玉", 2600 | "value": "101100904" 2601 | }, 2602 | { 2603 | "label": "应县", 2604 | "value": "101100905" 2605 | }, 2606 | { 2607 | "label": "怀仁", 2608 | "value": "101100906" 2609 | }, 2610 | { 2611 | "label": "忻州", 2612 | "value": "101101001" 2613 | }, 2614 | { 2615 | "label": "定襄", 2616 | "value": "101101002" 2617 | }, 2618 | { 2619 | "label": "五台县豆村", 2620 | "value": "101101003" 2621 | }, 2622 | { 2623 | "label": "河曲", 2624 | "value": "101101004" 2625 | }, 2626 | { 2627 | "label": "偏关", 2628 | "value": "101101005" 2629 | }, 2630 | { 2631 | "label": "神池", 2632 | "value": "101101006" 2633 | }, 2634 | { 2635 | "label": "宁武", 2636 | "value": "101101007" 2637 | }, 2638 | { 2639 | "label": "代县", 2640 | "value": "101101008" 2641 | }, 2642 | { 2643 | "label": "繁峙", 2644 | "value": "101101009" 2645 | }, 2646 | { 2647 | "label": "五台山", 2648 | "value": "101101010" 2649 | }, 2650 | { 2651 | "label": "保德", 2652 | "value": "101101011" 2653 | }, 2654 | { 2655 | "label": "静乐", 2656 | "value": "101101012" 2657 | }, 2658 | { 2659 | "label": "岢岚", 2660 | "value": "101101013" 2661 | }, 2662 | { 2663 | "label": "五寨", 2664 | "value": "101101014" 2665 | }, 2666 | { 2667 | "label": "原平", 2668 | "value": "101101015" 2669 | }, 2670 | { 2671 | "label": "吕梁", 2672 | "value": "101101100" 2673 | }, 2674 | { 2675 | "label": "离石", 2676 | "value": "101101101" 2677 | }, 2678 | { 2679 | "label": "临县", 2680 | "value": "101101102" 2681 | }, 2682 | { 2683 | "label": "兴县", 2684 | "value": "101101103" 2685 | }, 2686 | { 2687 | "label": "岚县", 2688 | "value": "101101104" 2689 | }, 2690 | { 2691 | "label": "柳林", 2692 | "value": "101101105" 2693 | }, 2694 | { 2695 | "label": "石楼", 2696 | "value": "101101106" 2697 | }, 2698 | { 2699 | "label": "方山", 2700 | "value": "101101107" 2701 | }, 2702 | { 2703 | "label": "交口", 2704 | "value": "101101108" 2705 | }, 2706 | { 2707 | "label": "中阳", 2708 | "value": "101101109" 2709 | }, 2710 | { 2711 | "label": "孝义", 2712 | "value": "101101110" 2713 | }, 2714 | { 2715 | "label": "汾阳", 2716 | "value": "101101111" 2717 | }, 2718 | { 2719 | "label": "文水", 2720 | "value": "101101112" 2721 | }, 2722 | { 2723 | "label": "交城", 2724 | "value": "101101113" 2725 | }, 2726 | { 2727 | "label": "西安", 2728 | "value": "101110101" 2729 | }, 2730 | { 2731 | "label": "长安", 2732 | "value": "101110102" 2733 | }, 2734 | { 2735 | "label": "临潼", 2736 | "value": "101110103" 2737 | }, 2738 | { 2739 | "label": "蓝田", 2740 | "value": "101110104" 2741 | }, 2742 | { 2743 | "label": "周至", 2744 | "value": "101110105" 2745 | }, 2746 | { 2747 | "label": "户县", 2748 | "value": "101110106" 2749 | }, 2750 | { 2751 | "label": "高陵", 2752 | "value": "101110107" 2753 | }, 2754 | { 2755 | "label": "杨凌", 2756 | "value": "101110108" 2757 | }, 2758 | { 2759 | "label": "咸阳", 2760 | "value": "101110200" 2761 | }, 2762 | { 2763 | "label": "三原", 2764 | "value": "101110201" 2765 | }, 2766 | { 2767 | "label": "礼泉", 2768 | "value": "101110202" 2769 | }, 2770 | { 2771 | "label": "永寿", 2772 | "value": "101110203" 2773 | }, 2774 | { 2775 | "label": "淳化", 2776 | "value": "101110204" 2777 | }, 2778 | { 2779 | "label": "泾阳", 2780 | "value": "101110205" 2781 | }, 2782 | { 2783 | "label": "武功", 2784 | "value": "101110206" 2785 | }, 2786 | { 2787 | "label": "乾县", 2788 | "value": "101110207" 2789 | }, 2790 | { 2791 | "label": "彬县", 2792 | "value": "101110208" 2793 | }, 2794 | { 2795 | "label": "长武", 2796 | "value": "101110209" 2797 | } 2798 | ] 2799 | -------------------------------------------------------------------------------- /src/assets/libs/screenfull.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * screenfull 3 | * v3.3.2 - 2017-10-27 4 | * (c) Sindre Sorhus; MIT License 5 | */ 6 | (function () { 7 | 'use strict'; 8 | 9 | var document = typeof window !== 'undefined' && typeof window.document !== 'undefined' ? window.document : {}; 10 | var isCommonjs = typeof module !== 'undefined' && module.exports; 11 | var keyboardAllowed = typeof Element !== 'undefined' && 'ALLOW_KEYBOARD_INPUT' in Element; 12 | 13 | var fn = (function () { 14 | var val; 15 | 16 | var fnMap = [ 17 | [ 18 | 'requestFullscreen', 19 | 'exitFullscreen', 20 | 'fullscreenElement', 21 | 'fullscreenEnabled', 22 | 'fullscreenchange', 23 | 'fullscreenerror' 24 | ], 25 | // New WebKit 26 | [ 27 | 'webkitRequestFullscreen', 28 | 'webkitExitFullscreen', 29 | 'webkitFullscreenElement', 30 | 'webkitFullscreenEnabled', 31 | 'webkitfullscreenchange', 32 | 'webkitfullscreenerror' 33 | 34 | ], 35 | // Old WebKit (Safari 5.1) 36 | [ 37 | 'webkitRequestFullScreen', 38 | 'webkitCancelFullScreen', 39 | 'webkitCurrentFullScreenElement', 40 | 'webkitCancelFullScreen', 41 | 'webkitfullscreenchange', 42 | 'webkitfullscreenerror' 43 | 44 | ], 45 | [ 46 | 'mozRequestFullScreen', 47 | 'mozCancelFullScreen', 48 | 'mozFullScreenElement', 49 | 'mozFullScreenEnabled', 50 | 'mozfullscreenchange', 51 | 'mozfullscreenerror' 52 | ], 53 | [ 54 | 'msRequestFullscreen', 55 | 'msExitFullscreen', 56 | 'msFullscreenElement', 57 | 'msFullscreenEnabled', 58 | 'MSFullscreenChange', 59 | 'MSFullscreenError' 60 | ] 61 | ]; 62 | 63 | var i = 0; 64 | var l = fnMap.length; 65 | var ret = {}; 66 | 67 | for (; i < l; i++) { 68 | val = fnMap[i]; 69 | if (val && val[1] in document) { 70 | for (i = 0; i < val.length; i++) { 71 | ret[fnMap[0][i]] = val[i]; 72 | } 73 | return ret; 74 | } 75 | } 76 | 77 | return false; 78 | })(); 79 | 80 | var eventNameMap = { 81 | change: fn.fullscreenchange, 82 | error: fn.fullscreenerror 83 | }; 84 | 85 | var screenfull = { 86 | request: function (elem) { 87 | var request = fn.requestFullscreen; 88 | 89 | elem = elem || document.documentElement; 90 | 91 | // Work around Safari 5.1 bug: reports support for 92 | // keyboard in fullscreen even though it doesn't. 93 | // Browser sniffing, since the alternative with 94 | // setTimeout is even worse. 95 | if (/ Version\/5\.1(?:\.\d+)? Safari\//.test(navigator.userAgent)) { 96 | elem[request](); 97 | } else { 98 | // 源文件的参数是 布尔型,浏览器实现的参数是对象,所以手动改成对象 99 | // 参考资料:https://developer.mozilla.org/en-US/docs/Web/API/Element/requestFullscreen 100 | // 已被注释的源代码如下: 101 | // elem[request](keyboardAllowed && Element.ALLOW_KEYBOARD_INPUT); 102 | elem[request]({ navigationUI: 'auto' }); 103 | } 104 | }, 105 | exit: function () { 106 | document[fn.exitFullscreen](); 107 | }, 108 | toggle: function (elem) { 109 | if (this.isFullscreen) { 110 | this.exit(); 111 | } else { 112 | this.request(elem); 113 | } 114 | }, 115 | onchange: function (callback) { 116 | this.on('change', callback); 117 | }, 118 | onerror: function (callback) { 119 | this.on('error', callback); 120 | }, 121 | on: function (event, callback) { 122 | var eventName = eventNameMap[event]; 123 | if (eventName) { 124 | document.addEventListener(eventName, callback, false); 125 | } 126 | }, 127 | off: function (event, callback) { 128 | var eventName = eventNameMap[event]; 129 | if (eventName) { 130 | document.removeEventListener(eventName, callback, false); 131 | } 132 | }, 133 | raw: fn 134 | }; 135 | 136 | if (!fn) { 137 | if (isCommonjs) { 138 | module.exports = false; 139 | } else { 140 | window.screenfull = false; 141 | } 142 | 143 | return; 144 | } 145 | 146 | Object.defineProperties(screenfull, { 147 | isFullscreen: { 148 | get: function () { 149 | return Boolean(document[fn.fullscreenElement]); 150 | } 151 | }, 152 | element: { 153 | enumerable: true, 154 | get: function () { 155 | return document[fn.fullscreenElement]; 156 | } 157 | }, 158 | enabled: { 159 | enumerable: true, 160 | get: function () { 161 | // Coerce to boolean in case of old WebKit 162 | return Boolean(document[fn.fullscreenEnabled]); 163 | } 164 | } 165 | }); 166 | 167 | if (isCommonjs) { 168 | module.exports = screenfull; 169 | } else { 170 | window.screenfull = screenfull; 171 | } 172 | })(); 173 | -------------------------------------------------------------------------------- /src/assets/scss/element-variables.scss: -------------------------------------------------------------------------------- 1 | /* 饿了么白垩纪主题颜色变量文件路径: 2 | node_modules\element-ui\packages\theme-chalk\src\common\var.scss */ 3 | /* 改变主题色变量 */ 4 | $--color-primary: #1dc4e9; 5 | $--card-border-radius: 0px !default; 6 | 7 | $--box-shadow-base: none !default; 8 | $--box-shadow-dark: none !default; 9 | $--box-shadow-light: none !default; 10 | 11 | /* 改变 icon 字体路径变量,必需 */ 12 | $--font-path: "~element-ui/lib/theme-chalk/fonts"; 13 | 14 | @import "~element-ui/packages/theme-chalk/src/index"; 15 | -------------------------------------------------------------------------------- /src/assets/scss/global.scss: -------------------------------------------------------------------------------- 1 | html, 2 | body { 3 | height: 100%; 4 | } 5 | body { 6 | margin: 0; 7 | padding: 0; 8 | background: #f4f7fa; 9 | // background: #f3f3f3; 10 | #app { 11 | height: 100%; 12 | } 13 | } 14 | // 左侧导航图表垂直方向对齐 15 | // 宽度还得自己设定,坑死 16 | .el-menu { 17 | width: 100%; 18 | border-right: none!important; 19 | } 20 | .el-menu-item [class^='el-icon-'] { 21 | vertical-align: middle; 22 | color: #ddd; 23 | } 24 | .el-submenu [class^='el-icon-'] { 25 | color: #ddd; 26 | } 27 | .el-submenu__title i { 28 | vertical-align: middle; 29 | color: #ddd; 30 | } 31 | 32 | // 自定义必填项的左上角红色星号 33 | .required-self label.el-form-item__label:before { 34 | content: '*'; 35 | color: #ff4949; 36 | margin-right: 4px; 37 | } 38 | #sidebar-wrap ul ul li { 39 | background: rgba(40, 52, 70, 1) !important; 40 | &:hover { 41 | background: #48576a !important; 42 | } 43 | } 44 | 45 | .el-menu .el-submenu__title i { 46 | color: #fff; 47 | } 48 | 49 | .bg form .el-input__inner { 50 | background: transparent; 51 | color:#fff; 52 | border: none; 53 | border-bottom: 1px solid #aaa; 54 | border-radius: 0; 55 | } 56 | -------------------------------------------------------------------------------- /src/components/AChart.vue: -------------------------------------------------------------------------------- 1 | 7 | 78 | 84 | -------------------------------------------------------------------------------- /src/components/Cube.vue: -------------------------------------------------------------------------------- 1 | 15 | 47 | 104 | -------------------------------------------------------------------------------- /src/components/GoTop.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 44 | 70 | -------------------------------------------------------------------------------- /src/components/QRCard.vue: -------------------------------------------------------------------------------- 1 | 6 | 42 | 58 | -------------------------------------------------------------------------------- /src/components/SideBar.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 44 | 93 | 155 | -------------------------------------------------------------------------------- /src/components/TopBar.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 32 | 88 | 120 | -------------------------------------------------------------------------------- /src/directives/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue'; 2 | 3 | // 定制每个页面的标题 4 | Vue.directive('title', { 5 | inserted(el, binding) { 6 | document.title = binding.value; 7 | } 8 | }); 9 | 10 | // 统计输入框输入的字符个数,并在输入框后面展示出来 11 | Vue.directive('count', { 12 | 13 | // 被绑定元素插入父节点时调用(仅保证父节点存在,但不一定已被插入文档中 14 | // 只调用一次 15 | inserted(el, binding, vnode, oldVnode) { 16 | 17 | // 如果没有设置最大值,则默认最多可输入50个字符 18 | let max = binding.value || 50 19 | // 首先设置input框的宽度,留出提示数值的宽度 20 | el.style.width = 'calc(100% - 43px)' 21 | // 获得input元素刚开始的value的长度 22 | let initValueLength = el.getElementsByTagName('input')[0].value.length; 23 | // 新建一个span标签 24 | let node = document.createElement('span') 25 | // 设置里面的文本 26 | node.innerHTML = ' ' + initValueLength + '/' + max 27 | // 将刚才新建的span元素挂载到父元素内,使其成为父元素的最后一个子元素 28 | el.parentNode.appendChild(node) 29 | }, 30 | 31 | // 指令所在组件的 VNode 及其子 VNode 全部更新后调用 32 | componentUpdated(el, binding, vnode, oldVnode) { 33 | 34 | let max = binding.value || 50 35 | // 当前输入字符的长度 36 | let curLen = el.getElementsByTagName('input')[0].value.length 37 | // 改变span标签的文本 38 | el.parentNode.lastChild.innerHTML = ' ' + curLen + '/' + max 39 | // 拿到最后一个span标签元素 40 | let span = el.parentNode.lastChild 41 | // 计算长度,如果长度超过最大长度,就添加一个class 42 | if (curLen > max) { 43 | span.setAttribute('class', 'exceedMax'); 44 | } else { 45 | span.setAttribute('class', ''); 46 | } 47 | } 48 | }); 49 | -------------------------------------------------------------------------------- /src/filters/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue'; 2 | 3 | // 数字加千分符 4 | Vue.filter('T', value => Number(value).toLocaleString()); 5 | -------------------------------------------------------------------------------- /src/http.js: -------------------------------------------------------------------------------- 1 | import axios from 'axios' 2 | import router from './router' 3 | 4 | // 构建请求对象 5 | const http = axios.create({ 6 | baseURL: 'api/v1/', 7 | timeout: 1000 * 5, 8 | headers: {}, 9 | }) 10 | 11 | // 简单的封装GET方法 12 | http.get = (url, params) => { 13 | return new Promise((resolve, reject) => { 14 | http({ 15 | method: 'GET', 16 | url, 17 | params: params 18 | }).then(res => { 19 | resolve(res.data); 20 | }).catch(err => { 21 | reject(err.data) 22 | }) 23 | }) 24 | } 25 | 26 | // 简单的封装POST方法 27 | http.post = (url, data) => { 28 | return new Promise((resolve, reject) => { 29 | http({ 30 | method: 'POST', 31 | url, 32 | data: data 33 | }).then(res => { 34 | resolve(res.data); 35 | }).catch(err => { 36 | reject(err.data) 37 | }) 38 | }) 39 | } 40 | 41 | // 请求拦截器 42 | http.interceptors.request.use(config => { 43 | // 如果本地存储中有token字段, 就为所有请求加上Authorization请求头 44 | if (localStorage.token) { 45 | config.headers["Authorization"] = `Bearer ${localStorage.token}` 46 | } 47 | return config; 48 | }, 49 | error => { 50 | console.log(error) // for debug 51 | Promise.reject(error) 52 | }) 53 | 54 | // 响应拦截器 55 | http.interceptors.response.use(response => { 56 | return response 57 | }, 58 | error => { 59 | if (error.response) { 60 | switch (error.response.status) { 61 | // 如果后端返回没有权限 62 | case 401: 63 | // 清除token信息并跳转到登录页面 64 | localStorage.clear() 65 | router.replace("/signin"); 66 | } 67 | } 68 | return Promise.reject(error.response.data) // 返回接口返回的错误信息 69 | }) 70 | 71 | export default http 72 | -------------------------------------------------------------------------------- /src/lang/en.js: -------------------------------------------------------------------------------- 1 | export const m = { 2 | login: { 3 | introduction: 'welcome to my system', 4 | name_holder: 'Username', 5 | password_holder: 'Password', 6 | name_tip: 'Please enter the username', 7 | password_tip: 'Please enter the password', 8 | remember: 'Remember Me', 9 | forget: 'Forgot Password', 10 | info: 'Please call 911', 11 | button: 'Login' 12 | }, 13 | topbar: { 14 | sayHi: 'Hi', 15 | logout: 'Logout' 16 | }, 17 | menu: { 18 | project: 'Projects', 19 | notes: 'Notes', 20 | about: 'About', 21 | weather: 'Weather', 22 | cube: 'Cube', 23 | authority: 'Authority' 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/lang/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import VueI18n from 'vue-i18n' 3 | 4 | Vue.use(VueI18n) 5 | 6 | // 国际化 7 | const i18n = new VueI18n({ 8 | locale: 'zh', // set locale 9 | messages: { 10 | zh: require('./zh.js'), // 中文语言包 11 | en: require('./en.js') // 英文语言包 12 | } 13 | }) 14 | 15 | export default i18n 16 | -------------------------------------------------------------------------------- /src/lang/zh.js: -------------------------------------------------------------------------------- 1 | export const m = { 2 | login: { 3 | introduction: '欢迎使用自动化装逼系统', 4 | name_holder: '用户名', 5 | password_holder: '密码', 6 | name_tip: '请输入用户名', 7 | password_tip: '请输入密码', 8 | remember: '记住密码', 9 | forget: '忘记密码', 10 | info: '你咋忘不了吃呢?', 11 | button: '登 录' 12 | }, 13 | topbar: { 14 | sayHi: '嗨', 15 | logout: '退出' 16 | }, 17 | menu: { 18 | project: '项目管理', 19 | notes: '开发备忘', 20 | about: '关于作者', 21 | weather: '天气预报', 22 | cube: '魔幻立方', 23 | authority: '权限测试' 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/layout/index.vue: -------------------------------------------------------------------------------- 1 | 13 | 29 | 46 | 47 | -------------------------------------------------------------------------------- /src/main.js: -------------------------------------------------------------------------------- 1 | // The Vue build version to load with the `import` command 2 | // (runtime-only or standalone) has been set in webpack.base.conf with an alias. 3 | // 必须在最开始引入垫片 4 | import 'babel-polyfill' 5 | import Vue from 'vue' 6 | import App from './App' 7 | import router from './router' 8 | import store from './store' 9 | import http from './http' 10 | import i18n from './lang' 11 | // 引入全局工具函数 12 | import * as utils from './utils' 13 | // 引入全局过滤器 14 | // import '@/filters' 15 | import 'font-awesome/scss/font-awesome.scss' 16 | // 在入口处引入模拟的假数据 17 | import '@/mock' 18 | // 引入完整的饿了么组件库 19 | import ElementUI from 'element-ui'; 20 | import 'element-ui/lib/theme-chalk/index.css' 21 | import './assets/scss/element-variables.scss' 22 | Vue.use(ElementUI); 23 | // 将http绑定到vue原型上 24 | Vue.prototype.$http = http 25 | // 将公共汽车绑定到vue原型上 26 | Vue.prototype.$bus = new Vue() 27 | // Vue 的全局配置 28 | Vue.config.productionTip = false 29 | 30 | new Vue({ 31 | el: '#app', 32 | i18n, 33 | router, 34 | store, 35 | template: '', 36 | components: { 37 | App 38 | } 39 | }) 40 | -------------------------------------------------------------------------------- /src/mock/index.js: -------------------------------------------------------------------------------- 1 | import Mock from "mockjs"; 2 | let debug = 1; 3 | if (debug) { 4 | Mock.mock(/login/, { 5 | data: { 6 | userId: "@integer(1,10)", 7 | "userName|1": ["鲁班七号", "甄姬", "东皇太一", "娜可露露", "蔡文姬", "王昭君", "妲己"], 8 | token: "@string(30)" 9 | }, 10 | msg: "Success", 11 | status: "YQ-000" 12 | }); 13 | Mock.mock(/getMenu/, { 14 | data: { 15 | menu: [ 16 | { 17 | name: "项目管理", 18 | name_en: "Projects", 19 | router: "/", 20 | icon: "el-icon-time", 21 | children: [ 22 | { 23 | name: "开发备忘", 24 | name_en: "Notes", 25 | router: "/notes", 26 | icon: "el-icon-date" 27 | }, 28 | { 29 | name: "关于作者", 30 | name_en: "About", 31 | router: "/about", 32 | icon: "el-icon-document" 33 | } 34 | ] 35 | }, 36 | { 37 | name: "天气预报", 38 | name_en: "Weather", 39 | router: "/weather", 40 | icon: "el-icon-picture-outline", 41 | children: [] 42 | }, 43 | { 44 | name: "魔幻立方", 45 | name_en: "Cube", 46 | router: "/cube", 47 | icon: "el-icon-menu", 48 | children: [] 49 | }, 50 | { 51 | name: "空白页面", 52 | name_en: "Blank", 53 | router: "/blank", 54 | icon: "el-icon-setting", 55 | children: [] 56 | } 57 | ] 58 | }, 59 | msg: "Success", 60 | status: "YQ-000" 61 | }); 62 | } 63 | -------------------------------------------------------------------------------- /src/mock/tpl.js: -------------------------------------------------------------------------------- 1 | import Mock from 'mockjs' 2 | let debug = 1; 3 | if (debug) { 4 | Mock.mock(/url/, { 5 | code: 0, 6 | status: true, 7 | msg: "", 8 | data: { 9 | 10 | } 11 | }) 12 | 13 | } 14 | -------------------------------------------------------------------------------- /src/router/index.js: -------------------------------------------------------------------------------- 1 | import Vue from "vue"; 2 | import Router from "vue-router"; 3 | Vue.use(Router); 4 | 5 | // 登录 6 | const Signin = () => import ("@/views/signin") 7 | // 非登录页的包裹组件 8 | // const Layout = () => import("@/views/layout") 9 | // 项目信息 10 | // const Notes = () => import("@/views/notes") 11 | // 关于作者 12 | // const About = () => import("@/views/about") 13 | // 天气预报 14 | // const Weather = () => import("@/views/weather") 15 | // 立方体 16 | // const Cube = () => import("@/views/cube") 17 | // 空白页面 18 | // const Blank = () => import("@/views/blank") 19 | // 404 20 | // const Notfound = () => import ("@/views/404") 21 | 22 | const router = new Router({ 23 | routes: [ 24 | // 首先是登录页的路由 25 | { 26 | path: "/signin", 27 | name: "Signin", 28 | meta: { 29 | title: "Auto Vue" 30 | }, 31 | component: Signin 32 | }, 33 | // 最后是404页面 34 | // { 35 | // path: "*", 36 | // meta: { 37 | // title: "404" 38 | // }, 39 | // component: Notfound 40 | // } 41 | ] 42 | }); 43 | 44 | // 当一个导航触发时,全局的 before 钩子按照创建顺序调用。钩子是异步解析执行,此时导航在所有钩子 resolve 完之前一直处于等待中。 45 | router.beforeEach((to, from, next) => { 46 | // 自动化修改页面标签的 title 47 | document.title = to.meta.title; 48 | next() 49 | // 如果已经登录,并且要去登录页,就不让TA去登录页,重定向到首页【目前有点问题】 50 | // if (to.path === "/signin" && localStorage.token) { 51 | // next("/notes"); 52 | // } else { 53 | // next(); 54 | // } 55 | }); 56 | 57 | export default router; 58 | -------------------------------------------------------------------------------- /src/router/index_no_dynamic.js: -------------------------------------------------------------------------------- 1 | import Vue from "vue"; 2 | import Router from "vue-router"; 3 | Vue.use(Router); 4 | 5 | // 登录 6 | const Signin = () => import("@/views/signin") 7 | 8 | // 非登录页的包裹组件 9 | const Layout = () => import("@/views/layout") 10 | 11 | // 项目信息 12 | const Notes = () => import("@/views/notes") 13 | 14 | // 关于作者 15 | const About = () => import("@/views/about") 16 | 17 | // 天气预报 18 | const Weather = () => import("@/views/weather") 19 | // 立方体 20 | const Cube = () => import("@/views/cube") 21 | // 空白页面 22 | const Blank = () => import("@/views/blank") 23 | // 404 24 | const Notfound = () => import("@/views/404") 25 | 26 | const router = new Router({ 27 | routes: [ 28 | // 首先是登录页的路由 29 | { 30 | path: "/signin", 31 | name: "Signin", 32 | meta: { 33 | title: "Auto Vue" 34 | }, 35 | component: Signin 36 | }, 37 | // 然后就是嵌套路由了,也就是登陆后的各个页面 38 | { 39 | path: "/", 40 | component: Layout, 41 | // redirect: '/notes', // 重定向到第一个子路由,否则只渲染Layout组件,这块儿使用时解除注释 42 | redirect: "/signin", // 这里重定向到登录页面,是为了展示使用,实际用这个项目开发时,需要注释这行,解除上一行的注释 43 | children: [ 44 | { 45 | path: "notes", 46 | meta: { 47 | title: "开发备忘" 48 | }, 49 | component: Notes 50 | }, 51 | { 52 | path: "about", 53 | meta: { 54 | title: "关于作者" 55 | }, 56 | component: About 57 | }, 58 | { 59 | path: "weather", 60 | meta: { 61 | title: "天气预报" 62 | }, 63 | component: Weather 64 | }, 65 | { 66 | path: "cube", 67 | meta: { 68 | title: "魔幻立方" 69 | }, 70 | component: Cube 71 | }, 72 | { 73 | path: "blank", 74 | meta: { 75 | title: "空白页面" 76 | }, 77 | component: Blank 78 | } 79 | ] 80 | }, 81 | // 最后是404页面 82 | { 83 | path: "*", 84 | meta: { 85 | title: "404" 86 | }, 87 | component: Notfound 88 | } 89 | ] 90 | }); 91 | 92 | // 当一个导航触发时,全局的 before 钩子按照创建顺序调用。钩子是异步解析执行,此时导航在所有钩子 resolve 完之前一直处于等待中。 93 | router.beforeEach((to, from, next) => { 94 | // 自动化修改页面标签的 title 95 | document.title = to.meta.title; 96 | // 如果已经登录,并且要去登录页,就不让TA去登录页,重定向到首页 97 | if (to.path === "/signin" && localStorage.token) { 98 | next("/notes"); 99 | } else { 100 | next(); 101 | } 102 | }); 103 | 104 | export default router; 105 | -------------------------------------------------------------------------------- /src/router/parse.js: -------------------------------------------------------------------------------- 1 | // 解析后台传过来的数组,输出routes配置表数组 2 | export default function generateRoutes(arr) { 3 | // 准备一个框 4 | let _arr = [] 5 | // 遍历原始数组 6 | arr.forEach(obj => { 7 | // 如果有二级菜单 8 | if (obj.children.length !== 0) { 9 | obj.children.forEach(_obj => { 10 | _arr.push({ 11 | path: _obj.router, 12 | meta: { 13 | title: _obj.name 14 | }, 15 | component: () => 16 | import (`@/views${_obj.router}`) 17 | }) 18 | }) 19 | } else { 20 | // 如果只有一级菜单 21 | _arr.push({ 22 | path: obj.router, 23 | meta: { 24 | title: obj.name 25 | }, 26 | component: () => 27 | import (`@/views${obj.router}`) 28 | }) 29 | } 30 | }) 31 | // 构建多级路由+404路由配置表 32 | return [{ 33 | path: "/", 34 | redirect: "/signin", 35 | component: () => 36 | import ("@/layout"), 37 | children: _arr 38 | }, { 39 | path: "*", 40 | meta: { 41 | title: "404" 42 | }, 43 | component: () => 44 | import ("@/views/404") 45 | }] 46 | } 47 | -------------------------------------------------------------------------------- /src/store/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Vuex from 'vuex' 3 | 4 | Vue.use(Vuex) 5 | 6 | // 如果当前环境是开发环境,就开启debug模式 7 | const debug = process.env.NODE_ENV !== 'production' 8 | 9 | // 使用webpack提供的API,构造一个上下文files,相当于引入modules文件夹下所有js文件 10 | // 具体文档请参照: 11 | // https://webpack.js.org/guides/dependency-management/#requirecontext 12 | // files不是一个数组,是一个context,具体是啥,我也不知道。。。 13 | // 通过下面奇怪的写法,就不用一个一个引入模块了 14 | const files = require.context('./modules', false, /\.js$/) 15 | const modules = {} 16 | 17 | // 使用下面这种具体的写法,构造modules对象 18 | // 为啥这么写?我也不知道,因为大神们都这么写 19 | files.keys().forEach(key => { 20 | modules[key.replace(/(\.\/|\.js)/g, '')] = files(key).default 21 | }) 22 | 23 | export default new Vuex.Store({ 24 | strict: debug, 25 | modules, 26 | }) 27 | -------------------------------------------------------------------------------- /src/store/modules/common.js: -------------------------------------------------------------------------------- 1 | const common = { 2 | state: { 3 | isCollapse: false, 4 | chartTheme: ["#2ec7c9", "#b6a2de", "#5ab1ef", "#ffb980", "#d87a80", "#8d98b3", "#e5cf0d", "#97b552", "#95706d", "#dc69aa", "#07a2a4", "#9a7fd1", "#588dd5", "#f5994e", "#c05050", "#59678c", "#c9ab00", "#7eb00a", "#6f5553", "#c14089"], 5 | }, 6 | mutations: { 7 | toggleSiderBar(state) { 8 | state.isCollapse = !state.isCollapse 9 | } 10 | } 11 | } 12 | 13 | export default common 14 | -------------------------------------------------------------------------------- /src/store/modules/module1.js: -------------------------------------------------------------------------------- 1 | import axios from 'axios' //如果有action 2 | 3 | const module1 = { 4 | state: { 5 | 6 | }, 7 | getters: { 8 | 9 | }, 10 | mutations: { 11 | 12 | }, 13 | actions: { 14 | // search({ commit }) { 15 | // axios({ 16 | 17 | // }).then(res => { 18 | // console.log(res) 19 | // }).catch(error => { 20 | // console.log(error) 21 | // }) 22 | // } 23 | } 24 | } 25 | 26 | export default module1 27 | -------------------------------------------------------------------------------- /src/utils/index.js: -------------------------------------------------------------------------------- 1 | export function getByteLen(val) { 2 | let len = 0 3 | for (let i = 0; i < val.length; i++) { 4 | if (val[i].match(/[^\x00-\xff]/gi) != null) { 5 | len += 1 6 | } else { 7 | len += 0.5 8 | } 9 | } 10 | return Math.floor(len) 11 | } 12 | 13 | export function param(json) { 14 | if (!json) return '' 15 | return cleanArray( 16 | Object.keys(json).map(key => { 17 | if (json[key] === undefined) return '' 18 | return encodeURIComponent(key) + '=' + encodeURIComponent(json[key]) 19 | }) 20 | ).join('&') 21 | } 22 | -------------------------------------------------------------------------------- /src/views/404.vue: -------------------------------------------------------------------------------- 1 | 12 | 32 | -------------------------------------------------------------------------------- /src/views/about.vue: -------------------------------------------------------------------------------- 1 | 7 | 16 | -------------------------------------------------------------------------------- /src/views/blank.vue: -------------------------------------------------------------------------------- 1 | 7 | 28 | 30 | 31 | -------------------------------------------------------------------------------- /src/views/cube.vue: -------------------------------------------------------------------------------- 1 | 6 | 15 | -------------------------------------------------------------------------------- /src/views/notes.vue: -------------------------------------------------------------------------------- 1 | 16 | 41 | 49 | -------------------------------------------------------------------------------- /src/views/signin.vue: -------------------------------------------------------------------------------- 1 | 29 | 140 | 204 | -------------------------------------------------------------------------------- /src/views/weather.vue: -------------------------------------------------------------------------------- 1 | 36 | 163 | 188 | -------------------------------------------------------------------------------- /static/audio/romeostune.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JasonBai007/vue-seed/b0e2af5942ea4235fbf16e4769f4ab96cd54c7c9/static/audio/romeostune.mp3 -------------------------------------------------------------------------------- /static/css/animate.min.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /*! 4 | * animate.css -http://daneden.me/animate 5 | * Version - 3.5.1 6 | * Licensed under the MIT license - http://opensource.org/licenses/MIT 7 | * 8 | * Copyright (c) 2016 Daniel Eden 9 | */ 10 | 11 | .animated{-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-fill-mode:both;animation-fill-mode:both}.animated.infinite{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.animated.hinge{-webkit-animation-duration:2s;animation-duration:2s}.animated.bounceIn,.animated.bounceOut,.animated.flipOutX,.animated.flipOutY{-webkit-animation-duration:.75s;animation-duration:.75s}@-webkit-keyframes bounce{0%,20%,53%,80%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translateZ(0);transform:translateZ(0)}40%,43%{-webkit-transform:translate3d(0,-30px,0);transform:translate3d(0,-30px,0)}40%,43%,70%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06)}70%{-webkit-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0)}90%{-webkit-transform:translate3d(0,-4px,0);transform:translate3d(0,-4px,0)}}@keyframes bounce{0%,20%,53%,80%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translateZ(0);transform:translateZ(0)}40%,43%{-webkit-transform:translate3d(0,-30px,0);transform:translate3d(0,-30px,0)}40%,43%,70%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06)}70%{-webkit-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0)}90%{-webkit-transform:translate3d(0,-4px,0);transform:translate3d(0,-4px,0)}}.bounce{-webkit-animation-name:bounce;animation-name:bounce;-webkit-transform-origin:center bottom;transform-origin:center bottom}@-webkit-keyframes flash{0%,50%,to{opacity:1}25%,75%{opacity:0}}@keyframes flash{0%,50%,to{opacity:1}25%,75%{opacity:0}}.flash{-webkit-animation-name:flash;animation-name:flash}@-webkit-keyframes pulse{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes pulse{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}.pulse{-webkit-animation-name:pulse;animation-name:pulse}@-webkit-keyframes rubberBand{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes rubberBand{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}.rubberBand{-webkit-animation-name:rubberBand;animation-name:rubberBand}@-webkit-keyframes shake{0%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}@keyframes shake{0%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}.shake{-webkit-animation-name:shake;animation-name:shake}@-webkit-keyframes headShake{0%{-webkit-transform:translateX(0);transform:translateX(0)}6.5%{-webkit-transform:translateX(-6px) rotateY(-9deg);transform:translateX(-6px) rotateY(-9deg)}18.5%{-webkit-transform:translateX(5px) rotateY(7deg);transform:translateX(5px) rotateY(7deg)}31.5%{-webkit-transform:translateX(-3px) rotateY(-5deg);transform:translateX(-3px) rotateY(-5deg)}43.5%{-webkit-transform:translateX(2px) rotateY(3deg);transform:translateX(2px) rotateY(3deg)}50%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes headShake{0%{-webkit-transform:translateX(0);transform:translateX(0)}6.5%{-webkit-transform:translateX(-6px) rotateY(-9deg);transform:translateX(-6px) rotateY(-9deg)}18.5%{-webkit-transform:translateX(5px) rotateY(7deg);transform:translateX(5px) rotateY(7deg)}31.5%{-webkit-transform:translateX(-3px) rotateY(-5deg);transform:translateX(-3px) rotateY(-5deg)}43.5%{-webkit-transform:translateX(2px) rotateY(3deg);transform:translateX(2px) rotateY(3deg)}50%{-webkit-transform:translateX(0);transform:translateX(0)}}.headShake{-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-name:headShake;animation-name:headShake}@-webkit-keyframes swing{20%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}40%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}60%{-webkit-transform:rotate(5deg);transform:rotate(5deg)}80%{-webkit-transform:rotate(-5deg);transform:rotate(-5deg)}to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@keyframes swing{20%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}40%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}60%{-webkit-transform:rotate(5deg);transform:rotate(5deg)}80%{-webkit-transform:rotate(-5deg);transform:rotate(-5deg)}to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}.swing{-webkit-transform-origin:top center;transform-origin:top center;-webkit-animation-name:swing;animation-name:swing}@-webkit-keyframes tada{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate(-3deg);transform:scale3d(.9,.9,.9) rotate(-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate(3deg);transform:scale3d(1.1,1.1,1.1) rotate(3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate(-3deg);transform:scale3d(1.1,1.1,1.1) rotate(-3deg)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes tada{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate(-3deg);transform:scale3d(.9,.9,.9) rotate(-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate(3deg);transform:scale3d(1.1,1.1,1.1) rotate(3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate(-3deg);transform:scale3d(1.1,1.1,1.1) rotate(-3deg)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}.tada{-webkit-animation-name:tada;animation-name:tada}@-webkit-keyframes wobble{0%{-webkit-transform:none;transform:none}15%{-webkit-transform:translate3d(-25%,0,0) rotate(-5deg);transform:translate3d(-25%,0,0) rotate(-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate(3deg);transform:translate3d(20%,0,0) rotate(3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate(-3deg);transform:translate3d(-15%,0,0) rotate(-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate(2deg);transform:translate3d(10%,0,0) rotate(2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate(-1deg);transform:translate3d(-5%,0,0) rotate(-1deg)}to{-webkit-transform:none;transform:none}}@keyframes wobble{0%{-webkit-transform:none;transform:none}15%{-webkit-transform:translate3d(-25%,0,0) rotate(-5deg);transform:translate3d(-25%,0,0) rotate(-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate(3deg);transform:translate3d(20%,0,0) rotate(3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate(-3deg);transform:translate3d(-15%,0,0) rotate(-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate(2deg);transform:translate3d(10%,0,0) rotate(2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate(-1deg);transform:translate3d(-5%,0,0) rotate(-1deg)}to{-webkit-transform:none;transform:none}}.wobble{-webkit-animation-name:wobble;animation-name:wobble}@-webkit-keyframes jello{0%,11.1%,to{-webkit-transform:none;transform:none}22.2%{-webkit-transform:skewX(-12.5deg) skewY(-12.5deg);transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{-webkit-transform:skewX(6.25deg) skewY(6.25deg);transform:skewX(6.25deg) skewY(6.25deg)}44.4%{-webkit-transform:skewX(-3.125deg) skewY(-3.125deg);transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{-webkit-transform:skewX(1.5625deg) skewY(1.5625deg);transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{-webkit-transform:skewX(-.78125deg) skewY(-.78125deg);transform:skewX(-.78125deg) skewY(-.78125deg)}77.7%{-webkit-transform:skewX(.390625deg) skewY(.390625deg);transform:skewX(.390625deg) skewY(.390625deg)}88.8%{-webkit-transform:skewX(-.1953125deg) skewY(-.1953125deg);transform:skewX(-.1953125deg) skewY(-.1953125deg)}}@keyframes jello{0%,11.1%,to{-webkit-transform:none;transform:none}22.2%{-webkit-transform:skewX(-12.5deg) skewY(-12.5deg);transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{-webkit-transform:skewX(6.25deg) skewY(6.25deg);transform:skewX(6.25deg) skewY(6.25deg)}44.4%{-webkit-transform:skewX(-3.125deg) skewY(-3.125deg);transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{-webkit-transform:skewX(1.5625deg) skewY(1.5625deg);transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{-webkit-transform:skewX(-.78125deg) skewY(-.78125deg);transform:skewX(-.78125deg) skewY(-.78125deg)}77.7%{-webkit-transform:skewX(.390625deg) skewY(.390625deg);transform:skewX(.390625deg) skewY(.390625deg)}88.8%{-webkit-transform:skewX(-.1953125deg) skewY(-.1953125deg);transform:skewX(-.1953125deg) skewY(-.1953125deg)}}.jello{-webkit-animation-name:jello;animation-name:jello;-webkit-transform-origin:center;transform-origin:center}@-webkit-keyframes bounceIn{0%,20%,40%,60%,80%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}to{opacity:1;-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes bounceIn{0%,20%,40%,60%,80%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}to{opacity:1;-webkit-transform:scaleX(1);transform:scaleX(1)}}.bounceIn{-webkit-animation-name:bounceIn;animation-name:bounceIn}@-webkit-keyframes bounceInDown{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}to{-webkit-transform:none;transform:none}}@keyframes bounceInDown{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}to{-webkit-transform:none;transform:none}}.bounceInDown{-webkit-animation-name:bounceInDown;animation-name:bounceInDown}@-webkit-keyframes bounceInLeft{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}to{-webkit-transform:none;transform:none}}@keyframes bounceInLeft{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}to{-webkit-transform:none;transform:none}}.bounceInLeft{-webkit-animation-name:bounceInLeft;animation-name:bounceInLeft}@-webkit-keyframes bounceInRight{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}to{-webkit-transform:none;transform:none}}@keyframes bounceInRight{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}to{-webkit-transform:none;transform:none}}.bounceInRight{-webkit-animation-name:bounceInRight;animation-name:bounceInRight}@-webkit-keyframes bounceInUp{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes bounceInUp{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.bounceInUp{-webkit-animation-name:bounceInUp;animation-name:bounceInUp}@-webkit-keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}to{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}@keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}to{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}.bounceOut{-webkit-animation-name:bounceOut;animation-name:bounceOut}@-webkit-keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.bounceOutDown{-webkit-animation-name:bounceOutDown;animation-name:bounceOutDown}@-webkit-keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}.bounceOutLeft{-webkit-animation-name:bounceOutLeft;animation-name:bounceOutLeft}@-webkit-keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}.bounceOutRight{-webkit-animation-name:bounceOutRight;animation-name:bounceOutRight}@-webkit-keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}.bounceOutUp{-webkit-animation-name:bounceOutUp;animation-name:bounceOutUp}@-webkit-keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.fadeIn{-webkit-animation-name:fadeIn;animation-name:fadeIn}@-webkit-keyframes fadeInDown{0%{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInDown{0%{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{opacity:1;-webkit-transform:none;transform:none}}.fadeInDown{-webkit-animation-name:fadeInDown;animation-name:fadeInDown}@-webkit-keyframes fadeInDownBig{0%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInDownBig{0%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}to{opacity:1;-webkit-transform:none;transform:none}}.fadeInDownBig{-webkit-animation-name:fadeInDownBig;animation-name:fadeInDownBig}@-webkit-keyframes fadeInLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}.fadeInLeft{-webkit-animation-name:fadeInLeft;animation-name:fadeInLeft}@-webkit-keyframes fadeInLeftBig{0%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInLeftBig{0%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}.fadeInLeftBig{-webkit-animation-name:fadeInLeftBig;animation-name:fadeInLeftBig}@-webkit-keyframes fadeInRight{0%{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInRight{0%{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}.fadeInRight{-webkit-animation-name:fadeInRight;animation-name:fadeInRight}@-webkit-keyframes fadeInRightBig{0%{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInRightBig{0%{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}.fadeInRightBig{-webkit-animation-name:fadeInRightBig;animation-name:fadeInRightBig}@-webkit-keyframes fadeInUp{0%{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInUp{0%{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}to{opacity:1;-webkit-transform:none;transform:none}}.fadeInUp{-webkit-animation-name:fadeInUp;animation-name:fadeInUp}@-webkit-keyframes fadeInUpBig{0%{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInUpBig{0%{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}to{opacity:1;-webkit-transform:none;transform:none}}.fadeInUpBig{-webkit-animation-name:fadeInUpBig;animation-name:fadeInUpBig}@-webkit-keyframes fadeOut{0%{opacity:1}to{opacity:0}}@keyframes fadeOut{0%{opacity:1}to{opacity:0}}.fadeOut{-webkit-animation-name:fadeOut;animation-name:fadeOut}@-webkit-keyframes fadeOutDown{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes fadeOutDown{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.fadeOutDown{-webkit-animation-name:fadeOutDown;animation-name:fadeOutDown}@-webkit-keyframes fadeOutDownBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes fadeOutDownBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.fadeOutDownBig{-webkit-animation-name:fadeOutDownBig;animation-name:fadeOutDownBig}@-webkit-keyframes fadeOutLeft{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@keyframes fadeOutLeft{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.fadeOutLeft{-webkit-animation-name:fadeOutLeft;animation-name:fadeOutLeft}@-webkit-keyframes fadeOutLeftBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes fadeOutLeftBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}.fadeOutLeftBig{-webkit-animation-name:fadeOutLeftBig;animation-name:fadeOutLeftBig}@-webkit-keyframes fadeOutRight{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@keyframes fadeOutRight{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.fadeOutRight{-webkit-animation-name:fadeOutRight;animation-name:fadeOutRight}@-webkit-keyframes fadeOutRightBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes fadeOutRightBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}.fadeOutRightBig{-webkit-animation-name:fadeOutRightBig;animation-name:fadeOutRightBig}@-webkit-keyframes fadeOutUp{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}@keyframes fadeOutUp{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.fadeOutUp{-webkit-animation-name:fadeOutUp;animation-name:fadeOutUp}@-webkit-keyframes fadeOutUpBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes fadeOutUpBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}.fadeOutUpBig{-webkit-animation-name:fadeOutUpBig;animation-name:fadeOutUpBig}@-webkit-keyframes flip{0%{-webkit-transform:perspective(400px) rotateY(-1turn);transform:perspective(400px) rotateY(-1turn)}0%,40%{-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) translateZ(150px) rotateY(-190deg);transform:perspective(400px) translateZ(150px) rotateY(-190deg)}50%{-webkit-transform:perspective(400px) translateZ(150px) rotateY(-170deg);transform:perspective(400px) translateZ(150px) rotateY(-170deg)}50%,80%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95);transform:perspective(400px) scale3d(.95,.95,.95)}to{-webkit-transform:perspective(400px);transform:perspective(400px);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}@keyframes flip{0%{-webkit-transform:perspective(400px) rotateY(-1turn);transform:perspective(400px) rotateY(-1turn)}0%,40%{-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) translateZ(150px) rotateY(-190deg);transform:perspective(400px) translateZ(150px) rotateY(-190deg)}50%{-webkit-transform:perspective(400px) translateZ(150px) rotateY(-170deg);transform:perspective(400px) translateZ(150px) rotateY(-170deg)}50%,80%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95);transform:perspective(400px) scale3d(.95,.95,.95)}to{-webkit-transform:perspective(400px);transform:perspective(400px);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}.animated.flip{-webkit-backface-visibility:visible;backface-visibility:visible;-webkit-animation-name:flip;animation-name:flip}@-webkit-keyframes flipInX{0%{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);opacity:0}0%,40%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}40%{-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg)}60%{-webkit-transform:perspective(400px) rotateX(10deg);transform:perspective(400px) rotateX(10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotateX(-5deg);transform:perspective(400px) rotateX(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInX{0%{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);opacity:0}0%,40%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}40%{-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg)}60%{-webkit-transform:perspective(400px) rotateX(10deg);transform:perspective(400px) rotateX(10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotateX(-5deg);transform:perspective(400px) rotateX(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}.flipInX{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipInX;animation-name:flipInX}@-webkit-keyframes flipInY{0%{-webkit-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);opacity:0}0%,40%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}40%{-webkit-transform:perspective(400px) rotateY(-20deg);transform:perspective(400px) rotateY(-20deg)}60%{-webkit-transform:perspective(400px) rotateY(10deg);transform:perspective(400px) rotateY(10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotateY(-5deg);transform:perspective(400px) rotateY(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInY{0%{-webkit-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);opacity:0}0%,40%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}40%{-webkit-transform:perspective(400px) rotateY(-20deg);transform:perspective(400px) rotateY(-20deg)}60%{-webkit-transform:perspective(400px) rotateY(10deg);transform:perspective(400px) rotateY(10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotateY(-5deg);transform:perspective(400px) rotateY(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}.flipInY{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipInY;animation-name:flipInY}@-webkit-keyframes flipOutX{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg);opacity:1}to{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);opacity:0}}@keyframes flipOutX{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg);opacity:1}to{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);opacity:0}}.flipOutX{-webkit-animation-name:flipOutX;animation-name:flipOutX;-webkit-backface-visibility:visible!important;backface-visibility:visible!important}@-webkit-keyframes flipOutY{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotateY(-15deg);transform:perspective(400px) rotateY(-15deg);opacity:1}to{-webkit-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);opacity:0}}@keyframes flipOutY{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotateY(-15deg);transform:perspective(400px) rotateY(-15deg);opacity:1}to{-webkit-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);opacity:0}}.flipOutY{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipOutY;animation-name:flipOutY}@-webkit-keyframes lightSpeedIn{0%{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);transform:skewX(20deg)}60%,80%{opacity:1}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg)}to{-webkit-transform:none;transform:none;opacity:1}}@keyframes lightSpeedIn{0%{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);transform:skewX(20deg)}60%,80%{opacity:1}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg)}to{-webkit-transform:none;transform:none;opacity:1}}.lightSpeedIn{-webkit-animation-name:lightSpeedIn;animation-name:lightSpeedIn;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}@-webkit-keyframes lightSpeedOut{0%{opacity:1}to{-webkit-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}@keyframes lightSpeedOut{0%{opacity:1}to{-webkit-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}.lightSpeedOut{-webkit-animation-name:lightSpeedOut;animation-name:lightSpeedOut;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}@-webkit-keyframes rotateIn{0%{transform-origin:center;-webkit-transform:rotate(-200deg);transform:rotate(-200deg);opacity:0}0%,to{-webkit-transform-origin:center}to{transform-origin:center;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateIn{0%{transform-origin:center;-webkit-transform:rotate(-200deg);transform:rotate(-200deg);opacity:0}0%,to{-webkit-transform-origin:center}to{transform-origin:center;-webkit-transform:none;transform:none;opacity:1}}.rotateIn{-webkit-animation-name:rotateIn;animation-name:rotateIn}@-webkit-keyframes rotateInDownLeft{0%{transform-origin:left bottom;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}0%,to{-webkit-transform-origin:left bottom}to{transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInDownLeft{0%{transform-origin:left bottom;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}0%,to{-webkit-transform-origin:left bottom}to{transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}.rotateInDownLeft{-webkit-animation-name:rotateInDownLeft;animation-name:rotateInDownLeft}@-webkit-keyframes rotateInDownRight{0%{transform-origin:right bottom;-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}0%,to{-webkit-transform-origin:right bottom}to{transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInDownRight{0%{transform-origin:right bottom;-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}0%,to{-webkit-transform-origin:right bottom}to{transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}.rotateInDownRight{-webkit-animation-name:rotateInDownRight;animation-name:rotateInDownRight}@-webkit-keyframes rotateInUpLeft{0%{transform-origin:left bottom;-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}0%,to{-webkit-transform-origin:left bottom}to{transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInUpLeft{0%{transform-origin:left bottom;-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}0%,to{-webkit-transform-origin:left bottom}to{transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}.rotateInUpLeft{-webkit-animation-name:rotateInUpLeft;animation-name:rotateInUpLeft}@-webkit-keyframes rotateInUpRight{0%{transform-origin:right bottom;-webkit-transform:rotate(-90deg);transform:rotate(-90deg);opacity:0}0%,to{-webkit-transform-origin:right bottom}to{transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInUpRight{0%{transform-origin:right bottom;-webkit-transform:rotate(-90deg);transform:rotate(-90deg);opacity:0}0%,to{-webkit-transform-origin:right bottom}to{transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}.rotateInUpRight{-webkit-animation-name:rotateInUpRight;animation-name:rotateInUpRight}@-webkit-keyframes rotateOut{0%{transform-origin:center;opacity:1}0%,to{-webkit-transform-origin:center}to{transform-origin:center;-webkit-transform:rotate(200deg);transform:rotate(200deg);opacity:0}}@keyframes rotateOut{0%{transform-origin:center;opacity:1}0%,to{-webkit-transform-origin:center}to{transform-origin:center;-webkit-transform:rotate(200deg);transform:rotate(200deg);opacity:0}}.rotateOut{-webkit-animation-name:rotateOut;animation-name:rotateOut}@-webkit-keyframes rotateOutDownLeft{0%{transform-origin:left bottom;opacity:1}0%,to{-webkit-transform-origin:left bottom}to{transform-origin:left bottom;-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}}@keyframes rotateOutDownLeft{0%{transform-origin:left bottom;opacity:1}0%,to{-webkit-transform-origin:left bottom}to{transform-origin:left bottom;-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}}.rotateOutDownLeft{-webkit-animation-name:rotateOutDownLeft;animation-name:rotateOutDownLeft}@-webkit-keyframes rotateOutDownRight{0%{transform-origin:right bottom;opacity:1}0%,to{-webkit-transform-origin:right bottom}to{transform-origin:right bottom;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}}@keyframes rotateOutDownRight{0%{transform-origin:right bottom;opacity:1}0%,to{-webkit-transform-origin:right bottom}to{transform-origin:right bottom;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}}.rotateOutDownRight{-webkit-animation-name:rotateOutDownRight;animation-name:rotateOutDownRight}@-webkit-keyframes rotateOutUpLeft{0%{transform-origin:left bottom;opacity:1}0%,to{-webkit-transform-origin:left bottom}to{transform-origin:left bottom;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}}@keyframes rotateOutUpLeft{0%{transform-origin:left bottom;opacity:1}0%,to{-webkit-transform-origin:left bottom}to{transform-origin:left bottom;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}}.rotateOutUpLeft{-webkit-animation-name:rotateOutUpLeft;animation-name:rotateOutUpLeft}@-webkit-keyframes rotateOutUpRight{0%{transform-origin:right bottom;opacity:1}0%,to{-webkit-transform-origin:right bottom}to{transform-origin:right bottom;-webkit-transform:rotate(90deg);transform:rotate(90deg);opacity:0}}@keyframes rotateOutUpRight{0%{transform-origin:right bottom;opacity:1}0%,to{-webkit-transform-origin:right bottom}to{transform-origin:right bottom;-webkit-transform:rotate(90deg);transform:rotate(90deg);opacity:0}}.rotateOutUpRight{-webkit-animation-name:rotateOutUpRight;animation-name:rotateOutUpRight}@-webkit-keyframes hinge{0%{transform-origin:top left}0%,20%,60%{-webkit-transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate(80deg);transform:rotate(80deg);transform-origin:top left}40%,80%{-webkit-transform:rotate(60deg);transform:rotate(60deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}to{-webkit-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}@keyframes hinge{0%{transform-origin:top left}0%,20%,60%{-webkit-transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate(80deg);transform:rotate(80deg);transform-origin:top left}40%,80%{-webkit-transform:rotate(60deg);transform:rotate(60deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}to{-webkit-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}.hinge{-webkit-animation-name:hinge;animation-name:hinge}@-webkit-keyframes rollIn{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate(-120deg);transform:translate3d(-100%,0,0) rotate(-120deg)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes rollIn{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate(-120deg);transform:translate3d(-100%,0,0) rotate(-120deg)}to{opacity:1;-webkit-transform:none;transform:none}}.rollIn{-webkit-animation-name:rollIn;animation-name:rollIn}@-webkit-keyframes rollOut{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate(120deg);transform:translate3d(100%,0,0) rotate(120deg)}}@keyframes rollOut{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate(120deg);transform:translate3d(100%,0,0) rotate(120deg)}}.rollOut{-webkit-animation-name:rollOut;animation-name:rollOut}@-webkit-keyframes zoomIn{0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}@keyframes zoomIn{0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}.zoomIn{-webkit-animation-name:zoomIn;animation-name:zoomIn}@-webkit-keyframes zoomInDown{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInDown{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomInDown{-webkit-animation-name:zoomInDown;animation-name:zoomInDown}@-webkit-keyframes zoomInLeft{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInLeft{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomInLeft{-webkit-animation-name:zoomInLeft;animation-name:zoomInLeft}@-webkit-keyframes zoomInRight{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInRight{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomInRight{-webkit-animation-name:zoomInRight;animation-name:zoomInRight}@-webkit-keyframes zoomInUp{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInUp{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomInUp{-webkit-animation-name:zoomInUp;animation-name:zoomInUp}@-webkit-keyframes zoomOut{0%{opacity:1}50%{-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%,to{opacity:0}}@keyframes zoomOut{0%{opacity:1}50%{-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%,to{opacity:0}}.zoomOut{-webkit-animation-name:zoomOut;animation-name:zoomOut}@-webkit-keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomOutDown{-webkit-animation-name:zoomOutDown;animation-name:zoomOutDown}@-webkit-keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0);-webkit-transform-origin:left center;transform-origin:left center}}@keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0);-webkit-transform-origin:left center;transform-origin:left center}}.zoomOutLeft{-webkit-animation-name:zoomOutLeft;animation-name:zoomOutLeft}@-webkit-keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0);-webkit-transform-origin:right center;transform-origin:right center}}@keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0);-webkit-transform-origin:right center;transform-origin:right center}}.zoomOutRight{-webkit-animation-name:zoomOutRight;animation-name:zoomOutRight}@-webkit-keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomOutUp{-webkit-animation-name:zoomOutUp;animation-name:zoomOutUp}@-webkit-keyframes slideInDown{0%{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideInDown{0%{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.slideInDown{-webkit-animation-name:slideInDown;animation-name:slideInDown}@-webkit-keyframes slideInLeft{0%{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideInLeft{0%{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.slideInLeft{-webkit-animation-name:slideInLeft;animation-name:slideInLeft}@-webkit-keyframes slideInRight{0%{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideInRight{0%{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.slideInRight{-webkit-animation-name:slideInRight;animation-name:slideInRight}@-webkit-keyframes slideInUp{0%{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideInUp{0%{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.slideInUp{-webkit-animation-name:slideInUp;animation-name:slideInUp}@-webkit-keyframes slideOutDown{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes slideOutDown{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.slideOutDown{-webkit-animation-name:slideOutDown;animation-name:slideOutDown}@-webkit-keyframes slideOutLeft{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@keyframes slideOutLeft{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.slideOutLeft{-webkit-animation-name:slideOutLeft;animation-name:slideOutLeft}@-webkit-keyframes slideOutRight{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@keyframes slideOutRight{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.slideOutRight{-webkit-animation-name:slideOutRight;animation-name:slideOutRight}@-webkit-keyframes slideOutUp{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}@keyframes slideOutUp{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.slideOutUp{-webkit-animation-name:slideOutUp;animation-name:slideOutUp} -------------------------------------------------------------------------------- /static/css/iconfont.css: -------------------------------------------------------------------------------- 1 | 2 | @font-face {font-family: "iconfont"; 3 | src: url('iconfont.eot?t=1543909700525'); /* IE9*/ 4 | src: url('iconfont.eot?t=1543909700525#iefix') format('embedded-opentype'), /* IE6-IE8 */ 5 | url('data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAAATQAAsAAAAAB4AAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAADMAAABCsP6z7U9TLzIAAAE8AAAARAAAAFY8hEgBY21hcAAAAYAAAABSAAABfn6J6rdnbHlmAAAB1AAAAQUAAAFs4MlSJGhlYWQAAALcAAAALwAAADYTd+iFaGhlYQAAAwwAAAAcAAAAJAfeA4RobXR4AAADKAAAAAwAAAAMDAAAAGxvY2EAAAM0AAAACAAAAAgAXgC2bWF4cAAAAzwAAAAfAAAAIAERAERuYW1lAAADXAAAAUUAAAJtPlT+fXBvc3QAAASkAAAAKgAAADtkZqGveJxjYGRgYOBikGPQYWB0cfMJYeBgYGGAAJAMY05meiJQDMoDyrGAaQ4gZoOIAgCKIwNPAHicY2BkYWCcwMDKwMHUyXSGgYGhH0IzvmYwYuRgYGBiYGVmwAoC0lxTGBye8T3jZ27438AQw9zA0AAUZgTJAQDfaAwAeJztkLkNgEAMBMc+Q4AQNEFAQDFE139EG4cfymClGWlXjgxMQHMux0A6QuT2VXJvLLkbR95Y7M8+hnsLe7e0umb+rOnzaxp/KupzBfoC7RwLpQAAeJxNzkFOhDAUBuD3Q2mbYEYJDRAh06DJaGJkEkXYufMCHmJm48atK1Zu3bgZFh7BI3gCzuEt7NhCxGmaJv//mpePGNH+2//wTykmTVfUEkHw1UWFu6hu2kZjabPwywo2lksojvJsVTe35U2yAA56/22QSoItQikHyX3mX//UWZ5n3pDl2rya3gVs0sLufDwY4akLWMgEAwXHgOhYKuHhAfk6h3vMrqgKe81ursieyd5b+wkVdEk1Udw2SZqISHHB16jQxiNNjExYsuLnln9v4f/983CkmPAmdyArh8ozB9R4wcYF0zu1+fwbKa3x3tnPQu5JRiNaheZr9mE7kbGdq18+wjrzAAAAeJxjYGRgYABi3WlzcuP5bb4ycLMwgMANnSAXBP3/GQsDsxSQy8HABBIFAAJLCMEAeJxjYGRgYG7438AQw8IAAkCSkQEVMAMARwkCbAQAAAAEAAAABAAAAAAAAAAAXgC2eJxjYGRgYGBmsGBgYQABJiDmAkIGhv9gPgMADm8BVgB4nGWPTU7DMBCFX/oHpBKqqGCH5AViASj9EatuWFRq911036ZOmyqJI8et1ANwHo7ACTgC3IA78EgnmzaWx9+8eWNPANzgBx6O3y33kT1cMjtyDRe4F65TfxBukF+Em2jjVbhF/U3YxzOmwm10YXmD17hi9oR3YQ8dfAjXcI1P4Tr1L+EG+Vu4iTv8CrfQ8erCPuZeV7iNRy/2x1YvnF6p5UHFockikzm/gple75KFrdLqnGtbxCZTg6BfSVOdaVvdU+zXQ+ciFVmTqgmrOkmMyq3Z6tAFG+fyUa8XiR6EJuVYY/62xgKOcQWFJQ6MMUIYZIjK6Og7VWb0r7FDwl57Vj3N53RbFNT/c4UBAvTPXFO6stJ5Ok+BPV8bUnV0K27LnpQ0kV7NSRKyQl7WtlRC6gE2ZVeOEXpc0Yk/KGdI/wAJWm7IAAAAeJxjYGKAAC4G7ICZkYmRmZGFga24oCg1MYWjKDU5vyy1qJKBAQA/QgYYAAA=') format('woff'), 6 | url('iconfont.ttf?t=1543909700525') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/ 7 | url('iconfont.svg?t=1543909700525#iconfont') format('svg'); /* iOS 4.1- */ 8 | } 9 | 10 | .iconfont { 11 | font-family:"iconfont" !important; 12 | font-size:16px; 13 | font-style:normal; 14 | -webkit-font-smoothing: antialiased; 15 | -moz-osx-font-smoothing: grayscale; 16 | } 17 | 18 | .icon-spread:before { content: "\e60e"; } 19 | 20 | .icon-recovery:before { content: "\e60f"; } 21 | 22 | -------------------------------------------------------------------------------- /static/css/iconfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JasonBai007/vue-seed/b0e2af5942ea4235fbf16e4769f4ab96cd54c7c9/static/css/iconfont.eot -------------------------------------------------------------------------------- /static/css/iconfont.js: -------------------------------------------------------------------------------- 1 | !function(l){var e,s='',t=(e=document.getElementsByTagName("script"))[e.length-1].getAttribute("data-injectcss");if(t&&!l.__iconfont__svg__cssinject__){l.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(e){console&&console.log(e)}}!function(e){if(document.addEventListener)if(~["complete","loaded","interactive"].indexOf(document.readyState))setTimeout(e,0);else{var t=function(){document.removeEventListener("DOMContentLoaded",t,!1),e()};document.addEventListener("DOMContentLoaded",t,!1)}else document.attachEvent&&(n=e,c=l.document,o=!1,i=function(){o||(o=!0,n())},(s=function(){try{c.documentElement.doScroll("left")}catch(e){return void setTimeout(s,50)}i()})(),c.onreadystatechange=function(){"complete"==c.readyState&&(c.onreadystatechange=null,i())});var n,c,o,i,s}(function(){var e,t,n,c,o,i;(e=document.createElement("div")).innerHTML=s,s=null,(t=e.getElementsByTagName("svg")[0])&&(t.setAttribute("aria-hidden","true"),t.style.position="absolute",t.style.width=0,t.style.height=0,t.style.overflow="hidden",n=t,(c=document.body).firstChild?(o=n,(i=c.firstChild).parentNode.insertBefore(o,i)):c.appendChild(n))})}(window); -------------------------------------------------------------------------------- /static/css/iconfont.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 8 | Created by iconfont 9 | 10 | 11 | 12 | 13 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /static/css/iconfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JasonBai007/vue-seed/b0e2af5942ea4235fbf16e4769f4ab96cd54c7c9/static/css/iconfont.ttf -------------------------------------------------------------------------------- /static/css/iconfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JasonBai007/vue-seed/b0e2af5942ea4235fbf16e4769f4ab96cd54c7c9/static/css/iconfont.woff -------------------------------------------------------------------------------- /static/img/bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JasonBai007/vue-seed/b0e2af5942ea4235fbf16e4769f4ab96cd54c7c9/static/img/bg.jpg -------------------------------------------------------------------------------- /static/img/player.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JasonBai007/vue-seed/b0e2af5942ea4235fbf16e4769f4ab96cd54c7c9/static/img/player.gif -------------------------------------------------------------------------------- /static/img/wechat.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JasonBai007/vue-seed/b0e2af5942ea4235fbf16e4769f4ab96cd54c7c9/static/img/wechat.jpg --------------------------------------------------------------------------------