├── .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 | 
6 | 
7 | [](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 |
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 |
2 |
3 |
4 |
5 |
6 |
7 |
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 |
2 |
6 |
7 |
78 |
84 |
--------------------------------------------------------------------------------
/src/components/Cube.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
47 |
104 |
--------------------------------------------------------------------------------
/src/components/GoTop.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
44 |
70 |
--------------------------------------------------------------------------------
/src/components/QRCard.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |

4 |
5 |
6 |
42 |
58 |
--------------------------------------------------------------------------------
/src/components/SideBar.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
43 |
44 |
93 |
155 |
--------------------------------------------------------------------------------
/src/components/TopBar.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
31 |
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 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
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 |
2 |
3 |
4 |
5 |
404
6 | We're sorry, but the page you were looking for doesn't exist.
7 | Come Back
8 |
9 |
10 |
11 |
12 |
32 |
--------------------------------------------------------------------------------
/src/views/about.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 | 关于作者
4 |
5 |
6 |
7 |
16 |
--------------------------------------------------------------------------------
/src/views/blank.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 | Now,
4 |
5 |
6 |
7 |
28 |
30 |
31 |
--------------------------------------------------------------------------------
/src/views/cube.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
15 |
--------------------------------------------------------------------------------
/src/views/notes.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Vue开发备忘录
7 |
8 |
9 |
10 | - {{str}}
11 |
12 |
13 |
14 |
15 |
16 |
41 |
49 |
--------------------------------------------------------------------------------
/src/views/signin.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
Auto Vue
5 |
{{$t('m.login.introduction')}}
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 | {{$t('m.login.remember')}}
16 | {{$t('m.login.forget')}}
17 |
18 |
19 |
20 | {{$t('m.login.button')}}
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
140 |
204 |
--------------------------------------------------------------------------------
/src/views/weather.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 选择城市:
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 | {{'实时温度:' + (cityData.wendu || 'XX') + '℃'}}
14 |
15 |
16 | {{'空气质量:' + ( cityData.aqi || '暂无' )}}
17 |
18 |
19 | {{cityData.ganmao || '暂无提示'}}
20 |
21 |
22 |
23 |
24 |
25 |
26 |
30 |
31 |
32 |
33 |
34 |
35 |
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 |
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
--------------------------------------------------------------------------------