├── AwesomePOS ├── README.md ├── build │ ├── build.js │ ├── check-versions.js │ ├── logo.png │ ├── 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 ├── index.html ├── package-lock.json ├── package.json └── src │ ├── App.vue │ ├── assets │ └── logo.png │ ├── components │ ├── common │ │ └── leftNav.vue │ └── page │ │ ├── HelloWorld.vue │ │ └── Pos.vue │ ├── main.js │ └── router │ └── index.js ├── README.md └── Travel ├── LICENSE ├── README.md ├── build ├── build.js ├── check-versions.js ├── logo.png ├── 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 ├── index.html ├── package-lock.json ├── package.json ├── src ├── App.vue ├── assets │ └── styles │ │ ├── border.css │ │ ├── iconfont.css │ │ ├── iconfont │ │ ├── iconfont.eot │ │ ├── iconfont.svg │ │ ├── iconfont.ttf │ │ └── iconfont.woff │ │ ├── mixins.styl │ │ ├── reset.css │ │ └── varibles.styl ├── common │ ├── fade │ │ └── FadeAnimation.vue │ └── gallary │ │ └── Gallary.vue ├── main.js ├── pages │ ├── city │ │ ├── City.vue │ │ └── components │ │ │ ├── Alphabet.vue │ │ │ ├── Header.vue │ │ │ ├── List.vue │ │ │ └── Search.vue │ ├── detail │ │ ├── Detail.vue │ │ └── components │ │ │ ├── Banner.vue │ │ │ ├── Header.vue │ │ │ └── List.vue │ └── home │ │ ├── Home.vue │ │ └── components │ │ ├── Header.vue │ │ ├── Icons.vue │ │ ├── Recommend.vue │ │ ├── Swiper.vue │ │ └── Weekend.vue ├── router │ └── index.js └── store │ ├── index.js │ ├── mutations.js │ └── state.js └── static └── mock ├── city.json ├── detail.json └── index.json /AwesomePOS/README.md: -------------------------------------------------------------------------------- 1 | #awesomepos 2 | vue-cli 收银员项目 3 | 4 | > A Vue.js project 5 | 6 | ## Build Setup 7 | 8 | ``` bash 9 | # install dependencies 10 | npm install 11 | 12 | # serve with hot reload at localhost:8080 13 | npm run dev 14 | 15 | # build for production with minification 16 | npm run build 17 | 18 | # build for production and view the bundle analyzer report 19 | npm run build --report 20 | ``` 21 | 22 | For a detailed explanation on how things work, check out the [guide](http://vuejs-templates.github.io/webpack/) and [docs for vue-loader](http://vuejs.github.io/vue-loader). 23 | -------------------------------------------------------------------------------- /AwesomePOS/build/build.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | require('./check-versions')() 3 | 4 | process.env.NODE_ENV = 'production' 5 | 6 | const ora = require('ora') 7 | const rm = require('rimraf') 8 | const path = require('path') 9 | const chalk = require('chalk') 10 | const webpack = require('webpack') 11 | const config = require('../config') 12 | const webpackConfig = require('./webpack.prod.conf') 13 | 14 | const spinner = ora('building for production...') 15 | spinner.start() 16 | 17 | rm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err => { 18 | if (err) throw err 19 | webpack(webpackConfig, (err, stats) => { 20 | spinner.stop() 21 | if (err) throw err 22 | process.stdout.write(stats.toString({ 23 | colors: true, 24 | modules: false, 25 | children: false, // If you are using ts-loader, setting this to true will make TypeScript errors show up during build. 26 | chunks: false, 27 | chunkModules: false 28 | }) + '\n\n') 29 | 30 | if (stats.hasErrors()) { 31 | console.log(chalk.red(' Build failed with errors.\n')) 32 | process.exit(1) 33 | } 34 | 35 | console.log(chalk.cyan(' Build complete.\n')) 36 | console.log(chalk.yellow( 37 | ' Tip: built files are meant to be served over an HTTP server.\n' + 38 | ' Opening index.html over file:// won\'t work.\n' 39 | )) 40 | }) 41 | }) 42 | -------------------------------------------------------------------------------- /AwesomePOS/build/check-versions.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const chalk = require('chalk') 3 | const semver = require('semver') 4 | const packageConfig = require('../package.json') 5 | const shell = require('shelljs') 6 | 7 | function exec (cmd) { 8 | return require('child_process').execSync(cmd).toString().trim() 9 | } 10 | 11 | const versionRequirements = [ 12 | { 13 | name: 'node', 14 | currentVersion: semver.clean(process.version), 15 | versionRequirement: packageConfig.engines.node 16 | } 17 | ] 18 | 19 | if (shell.which('npm')) { 20 | versionRequirements.push({ 21 | name: 'npm', 22 | currentVersion: exec('npm --version'), 23 | versionRequirement: packageConfig.engines.npm 24 | }) 25 | } 26 | 27 | module.exports = function () { 28 | const warnings = [] 29 | 30 | for (let i = 0; i < versionRequirements.length; i++) { 31 | const mod = versionRequirements[i] 32 | 33 | if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) { 34 | warnings.push(mod.name + ': ' + 35 | chalk.red(mod.currentVersion) + ' should be ' + 36 | chalk.green(mod.versionRequirement) 37 | ) 38 | } 39 | } 40 | 41 | if (warnings.length) { 42 | console.log('') 43 | console.log(chalk.yellow('To use this template, you must update following to modules:')) 44 | console.log() 45 | 46 | for (let i = 0; i < warnings.length; i++) { 47 | const warning = warnings[i] 48 | console.log(' ' + warning) 49 | } 50 | 51 | console.log() 52 | process.exit(1) 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /AwesomePOS/build/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DWL716/vue/50e1bd1ef36c6e8a49872dc9a6a357f7202c1998/AwesomePOS/build/logo.png -------------------------------------------------------------------------------- /AwesomePOS/build/utils.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const path = require('path') 3 | const config = require('../config') 4 | const ExtractTextPlugin = require('extract-text-webpack-plugin') 5 | const packageConfig = require('../package.json') 6 | 7 | exports.assetsPath = function (_path) { 8 | const assetsSubDirectory = process.env.NODE_ENV === 'production' 9 | ? config.build.assetsSubDirectory 10 | : config.dev.assetsSubDirectory 11 | 12 | return path.posix.join(assetsSubDirectory, _path) 13 | } 14 | 15 | exports.cssLoaders = function (options) { 16 | options = options || {} 17 | 18 | const cssLoader = { 19 | loader: 'css-loader', 20 | options: { 21 | sourceMap: options.sourceMap 22 | } 23 | } 24 | 25 | const postcssLoader = { 26 | loader: 'postcss-loader', 27 | options: { 28 | sourceMap: options.sourceMap 29 | } 30 | } 31 | 32 | // generate loader string to be used with extract text plugin 33 | function generateLoaders (loader, loaderOptions) { 34 | const loaders = options.usePostCSS ? [cssLoader, postcssLoader] : [cssLoader] 35 | 36 | if (loader) { 37 | loaders.push({ 38 | loader: loader + '-loader', 39 | options: Object.assign({}, loaderOptions, { 40 | sourceMap: options.sourceMap 41 | }) 42 | }) 43 | } 44 | 45 | // Extract CSS when that option is specified 46 | // (which is the case during production build) 47 | if (options.extract) { 48 | return ExtractTextPlugin.extract({ 49 | use: loaders, 50 | fallback: 'vue-style-loader' 51 | }) 52 | } else { 53 | return ['vue-style-loader'].concat(loaders) 54 | } 55 | } 56 | 57 | // https://vue-loader.vuejs.org/en/configurations/extract-css.html 58 | return { 59 | css: generateLoaders(), 60 | postcss: generateLoaders(), 61 | less: generateLoaders('less'), 62 | sass: generateLoaders('sass', { indentedSyntax: true }), 63 | scss: generateLoaders('sass'), 64 | stylus: generateLoaders('stylus'), 65 | styl: generateLoaders('stylus') 66 | } 67 | } 68 | 69 | // Generate loaders for standalone style files (outside of .vue) 70 | exports.styleLoaders = function (options) { 71 | const output = [] 72 | const loaders = exports.cssLoaders(options) 73 | 74 | for (const extension in loaders) { 75 | const loader = loaders[extension] 76 | output.push({ 77 | test: new RegExp('\\.' + extension + '$'), 78 | use: loader 79 | }) 80 | } 81 | 82 | return output 83 | } 84 | 85 | exports.createNotifierCallback = () => { 86 | const notifier = require('node-notifier') 87 | 88 | return (severity, errors) => { 89 | if (severity !== 'error') return 90 | 91 | const error = errors[0] 92 | const filename = error.file && error.file.split('!').pop() 93 | 94 | notifier.notify({ 95 | title: packageConfig.name, 96 | message: severity + ': ' + error.name, 97 | subtitle: filename || '', 98 | icon: path.join(__dirname, 'logo.png') 99 | }) 100 | } 101 | } 102 | -------------------------------------------------------------------------------- /AwesomePOS/build/vue-loader.conf.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const utils = require('./utils') 3 | const config = require('../config') 4 | const isProduction = process.env.NODE_ENV === 'production' 5 | const sourceMapEnabled = isProduction 6 | ? config.build.productionSourceMap 7 | : config.dev.cssSourceMap 8 | 9 | module.exports = { 10 | loaders: utils.cssLoaders({ 11 | sourceMap: sourceMapEnabled, 12 | extract: isProduction 13 | }), 14 | cssSourceMap: sourceMapEnabled, 15 | cacheBusting: config.dev.cacheBusting, 16 | transformToRequire: { 17 | video: ['src', 'poster'], 18 | source: 'src', 19 | img: 'src', 20 | image: 'xlink:href' 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /AwesomePOS/build/webpack.base.conf.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const path = require('path') 3 | const utils = require('./utils') 4 | const config = require('../config') 5 | const vueLoaderConfig = require('./vue-loader.conf') 6 | 7 | function resolve (dir) { 8 | return path.join(__dirname, '..', dir) 9 | } 10 | 11 | const createLintingRule = () => ({ 12 | test: /\.(js|vue)$/, 13 | loader: 'eslint-loader', 14 | enforce: 'pre', 15 | include: [resolve('src'), resolve('test')], 16 | options: { 17 | formatter: require('eslint-friendly-formatter'), 18 | emitWarning: !config.dev.showEslintErrorsInOverlay 19 | } 20 | }) 21 | 22 | module.exports = { 23 | context: path.resolve(__dirname, '../'), 24 | entry: { 25 | app: './src/main.js' 26 | }, 27 | output: { 28 | path: config.build.assetsRoot, 29 | filename: '[name].js', 30 | publicPath: process.env.NODE_ENV === 'production' 31 | ? config.build.assetsPublicPath 32 | : config.dev.assetsPublicPath 33 | }, 34 | resolve: { 35 | extensions: ['.js', '.vue', '.json'], 36 | alias: { 37 | 'vue$': 'vue/dist/vue.esm.js', 38 | '@': resolve('src'), 39 | } 40 | }, 41 | module: { 42 | rules: [ 43 | ...(config.dev.useEslint ? [createLintingRule()] : []), 44 | { 45 | test: /\.vue$/, 46 | loader: 'vue-loader', 47 | options: vueLoaderConfig 48 | }, 49 | { 50 | test: /\.js$/, 51 | loader: 'babel-loader', 52 | include: [resolve('src'), resolve('test'), resolve('node_modules/webpack-dev-server/client')] 53 | }, 54 | { 55 | test: /\.(png|jpe?g|gif|svg)(\?.*)?$/, 56 | loader: 'url-loader', 57 | options: { 58 | limit: 10000, 59 | name: utils.assetsPath('img/[name].[hash:7].[ext]') 60 | } 61 | }, 62 | { 63 | test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/, 64 | loader: 'url-loader', 65 | options: { 66 | limit: 10000, 67 | name: utils.assetsPath('media/[name].[hash:7].[ext]') 68 | } 69 | }, 70 | { 71 | test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/, 72 | loader: 'url-loader', 73 | options: { 74 | limit: 10000, 75 | name: utils.assetsPath('fonts/[name].[hash:7].[ext]') 76 | } 77 | } 78 | ] 79 | }, 80 | node: { 81 | // prevent webpack from injecting useless setImmediate polyfill because Vue 82 | // source contains it (although only uses it if it's native). 83 | setImmediate: false, 84 | // prevent webpack from injecting mocks to Node native modules 85 | // that does not make sense for the client 86 | dgram: 'empty', 87 | fs: 'empty', 88 | net: 'empty', 89 | tls: 'empty', 90 | child_process: 'empty' 91 | } 92 | } 93 | -------------------------------------------------------------------------------- /AwesomePOS/build/webpack.dev.conf.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const utils = require('./utils') 3 | const webpack = require('webpack') 4 | const config = require('../config') 5 | const merge = require('webpack-merge') 6 | const path = require('path') 7 | const baseWebpackConfig = require('./webpack.base.conf') 8 | const CopyWebpackPlugin = require('copy-webpack-plugin') 9 | const HtmlWebpackPlugin = require('html-webpack-plugin') 10 | const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin') 11 | const portfinder = require('portfinder') 12 | 13 | const HOST = process.env.HOST 14 | const PORT = process.env.PORT && Number(process.env.PORT) 15 | 16 | const devWebpackConfig = merge(baseWebpackConfig, { 17 | module: { 18 | rules: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap, usePostCSS: true }) 19 | }, 20 | // cheap-module-eval-source-map is faster for development 21 | devtool: config.dev.devtool, 22 | 23 | // these devServer options should be customized in /config/index.js 24 | devServer: { 25 | clientLogLevel: 'warning', 26 | historyApiFallback: { 27 | rewrites: [ 28 | { from: /.*/, to: path.posix.join(config.dev.assetsPublicPath, 'index.html') }, 29 | ], 30 | }, 31 | hot: true, 32 | contentBase: false, // since we use CopyWebpackPlugin. 33 | compress: true, 34 | host: HOST || config.dev.host, 35 | port: PORT || config.dev.port, 36 | open: config.dev.autoOpenBrowser, 37 | overlay: config.dev.errorOverlay 38 | ? { warnings: false, errors: true } 39 | : false, 40 | publicPath: config.dev.assetsPublicPath, 41 | proxy: config.dev.proxyTable, 42 | quiet: true, // necessary for FriendlyErrorsPlugin 43 | watchOptions: { 44 | poll: config.dev.poll, 45 | } 46 | }, 47 | plugins: [ 48 | new webpack.DefinePlugin({ 49 | 'process.env': require('../config/dev.env') 50 | }), 51 | new webpack.HotModuleReplacementPlugin(), 52 | new webpack.NamedModulesPlugin(), // HMR shows correct file names in console on update. 53 | new webpack.NoEmitOnErrorsPlugin(), 54 | // https://github.com/ampedandwired/html-webpack-plugin 55 | new HtmlWebpackPlugin({ 56 | filename: 'index.html', 57 | template: 'index.html', 58 | inject: true 59 | }), 60 | // copy custom static assets 61 | new CopyWebpackPlugin([ 62 | { 63 | from: path.resolve(__dirname, '../static'), 64 | to: config.dev.assetsSubDirectory, 65 | ignore: ['.*'] 66 | } 67 | ]) 68 | ] 69 | }) 70 | 71 | module.exports = new Promise((resolve, reject) => { 72 | portfinder.basePort = process.env.PORT || config.dev.port 73 | portfinder.getPort((err, port) => { 74 | if (err) { 75 | reject(err) 76 | } else { 77 | // publish the new Port, necessary for e2e tests 78 | process.env.PORT = port 79 | // add port to devServer config 80 | devWebpackConfig.devServer.port = port 81 | 82 | // Add FriendlyErrorsPlugin 83 | devWebpackConfig.plugins.push(new FriendlyErrorsPlugin({ 84 | compilationSuccessInfo: { 85 | messages: [`Your application is running here: http://${devWebpackConfig.devServer.host}:${port}`], 86 | }, 87 | onErrors: config.dev.notifyOnErrors 88 | ? utils.createNotifierCallback() 89 | : undefined 90 | })) 91 | 92 | resolve(devWebpackConfig) 93 | } 94 | }) 95 | }) 96 | -------------------------------------------------------------------------------- /AwesomePOS/build/webpack.prod.conf.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const path = require('path') 3 | const utils = require('./utils') 4 | const webpack = require('webpack') 5 | const config = require('../config') 6 | const merge = require('webpack-merge') 7 | const baseWebpackConfig = require('./webpack.base.conf') 8 | const CopyWebpackPlugin = require('copy-webpack-plugin') 9 | const HtmlWebpackPlugin = require('html-webpack-plugin') 10 | const ExtractTextPlugin = require('extract-text-webpack-plugin') 11 | const OptimizeCSSPlugin = require('optimize-css-assets-webpack-plugin') 12 | const UglifyJsPlugin = require('uglifyjs-webpack-plugin') 13 | 14 | const env = require('../config/prod.env') 15 | 16 | const webpackConfig = merge(baseWebpackConfig, { 17 | module: { 18 | rules: utils.styleLoaders({ 19 | sourceMap: config.build.productionSourceMap, 20 | extract: true, 21 | usePostCSS: true 22 | }) 23 | }, 24 | devtool: config.build.productionSourceMap ? config.build.devtool : false, 25 | output: { 26 | path: config.build.assetsRoot, 27 | filename: utils.assetsPath('js/[name].[chunkhash].js'), 28 | chunkFilename: utils.assetsPath('js/[id].[chunkhash].js') 29 | }, 30 | plugins: [ 31 | // http://vuejs.github.io/vue-loader/en/workflow/production.html 32 | new webpack.DefinePlugin({ 33 | 'process.env': env 34 | }), 35 | new UglifyJsPlugin({ 36 | uglifyOptions: { 37 | compress: { 38 | warnings: false 39 | } 40 | }, 41 | sourceMap: config.build.productionSourceMap, 42 | parallel: true 43 | }), 44 | // extract css into its own file 45 | new ExtractTextPlugin({ 46 | filename: utils.assetsPath('css/[name].[contenthash].css'), 47 | // Setting the following option to `false` will not extract CSS from codesplit chunks. 48 | // Their CSS will instead be inserted dynamically with style-loader when the codesplit chunk has been loaded by webpack. 49 | // It's currently set to `true` because we are seeing that sourcemaps are included in the codesplit bundle as well when it's `false`, 50 | // increasing file size: https://github.com/vuejs-templates/webpack/issues/1110 51 | allChunks: true, 52 | }), 53 | // Compress extracted CSS. We are using this plugin so that possible 54 | // duplicated CSS from different components can be deduped. 55 | new OptimizeCSSPlugin({ 56 | cssProcessorOptions: config.build.productionSourceMap 57 | ? { safe: true, map: { inline: false } } 58 | : { safe: true } 59 | }), 60 | // generate dist index.html with correct asset hash for caching. 61 | // you can customize output by editing /index.html 62 | // see https://github.com/ampedandwired/html-webpack-plugin 63 | new HtmlWebpackPlugin({ 64 | filename: config.build.index, 65 | template: 'index.html', 66 | inject: true, 67 | minify: { 68 | removeComments: true, 69 | collapseWhitespace: true, 70 | removeAttributeQuotes: true 71 | // more options: 72 | // https://github.com/kangax/html-minifier#options-quick-reference 73 | }, 74 | // necessary to consistently work with multiple chunks via CommonsChunkPlugin 75 | chunksSortMode: 'dependency' 76 | }), 77 | // keep module.id stable when vendor modules does not change 78 | new webpack.HashedModuleIdsPlugin(), 79 | // enable scope hoisting 80 | new webpack.optimize.ModuleConcatenationPlugin(), 81 | // split vendor js into its own file 82 | new webpack.optimize.CommonsChunkPlugin({ 83 | name: 'vendor', 84 | minChunks (module) { 85 | // any required modules inside node_modules are extracted to vendor 86 | return ( 87 | module.resource && 88 | /\.js$/.test(module.resource) && 89 | module.resource.indexOf( 90 | path.join(__dirname, '../node_modules') 91 | ) === 0 92 | ) 93 | } 94 | }), 95 | // extract webpack runtime and module manifest to its own file in order to 96 | // prevent vendor hash from being updated whenever app bundle is updated 97 | new webpack.optimize.CommonsChunkPlugin({ 98 | name: 'manifest', 99 | minChunks: Infinity 100 | }), 101 | // This instance extracts shared chunks from code splitted chunks and bundles them 102 | // in a separate chunk, similar to the vendor chunk 103 | // see: https://webpack.js.org/plugins/commons-chunk-plugin/#extra-async-commons-chunk 104 | new webpack.optimize.CommonsChunkPlugin({ 105 | name: 'app', 106 | async: 'vendor-async', 107 | children: true, 108 | minChunks: 3 109 | }), 110 | 111 | // copy custom static assets 112 | new CopyWebpackPlugin([ 113 | { 114 | from: path.resolve(__dirname, '../static'), 115 | to: config.build.assetsSubDirectory, 116 | ignore: ['.*'] 117 | } 118 | ]) 119 | ] 120 | }) 121 | 122 | if (config.build.productionGzip) { 123 | const CompressionWebpackPlugin = require('compression-webpack-plugin') 124 | 125 | webpackConfig.plugins.push( 126 | new CompressionWebpackPlugin({ 127 | asset: '[path].gz[query]', 128 | algorithm: 'gzip', 129 | test: new RegExp( 130 | '\\.(' + 131 | config.build.productionGzipExtensions.join('|') + 132 | ')$' 133 | ), 134 | threshold: 10240, 135 | minRatio: 0.8 136 | }) 137 | ) 138 | } 139 | 140 | if (config.build.bundleAnalyzerReport) { 141 | const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin 142 | webpackConfig.plugins.push(new BundleAnalyzerPlugin()) 143 | } 144 | 145 | module.exports = webpackConfig 146 | -------------------------------------------------------------------------------- /AwesomePOS/config/dev.env.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const merge = require('webpack-merge') 3 | const prodEnv = require('./prod.env') 4 | 5 | module.exports = merge(prodEnv, { 6 | NODE_ENV: '"development"' 7 | }) 8 | -------------------------------------------------------------------------------- /AwesomePOS/config/index.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | // Template version: 1.3.1 3 | // see http://vuejs-templates.github.io/webpack for documentation. 4 | 5 | const path = require('path') 6 | 7 | module.exports = { 8 | dev: { 9 | 10 | // Paths 11 | assetsSubDirectory: 'static', 12 | assetsPublicPath: '/', 13 | proxyTable: {}, 14 | 15 | // Various Dev Server settings 16 | host: 'localhost', // can be overwritten by process.env.HOST 17 | port: 8080, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined 18 | autoOpenBrowser: false, 19 | errorOverlay: true, 20 | notifyOnErrors: true, 21 | poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions- 22 | 23 | // Use Eslint Loader? 24 | // If true, your code will be linted during bundling and 25 | // linting errors and warnings will be shown in the console. 26 | useEslint: true, 27 | // If true, eslint errors and warnings will also be shown in the error overlay 28 | // in the browser. 29 | showEslintErrorsInOverlay: false, 30 | 31 | /** 32 | * Source Maps 33 | */ 34 | 35 | // https://webpack.js.org/configuration/devtool/#development 36 | devtool: 'cheap-module-eval-source-map', 37 | 38 | // If you have problems debugging vue-files in devtools, 39 | // set this to false - it *may* help 40 | // https://vue-loader.vuejs.org/en/options.html#cachebusting 41 | cacheBusting: true, 42 | 43 | cssSourceMap: true 44 | }, 45 | 46 | build: { 47 | // Template for index.html 48 | index: path.resolve(__dirname, '../dist/index.html'), 49 | 50 | // Paths 51 | assetsRoot: path.resolve(__dirname, '../dist'), 52 | assetsSubDirectory: 'static', 53 | assetsPublicPath: './', 54 | 55 | /** 56 | * Source Maps 57 | */ 58 | 59 | productionSourceMap: true, 60 | // https://webpack.js.org/configuration/devtool/#production 61 | devtool: '#source-map', 62 | 63 | // Gzip off by default as many popular static hosts such as 64 | // Surge or Netlify already gzip all static assets for you. 65 | // Before setting to `true`, make sure to: 66 | // npm install --save-dev compression-webpack-plugin 67 | productionGzip: false, 68 | productionGzipExtensions: ['js', 'css'], 69 | 70 | // Run the build command with an extra argument to 71 | // View the bundle analyzer report after build finishes: 72 | // `npm run build --report` 73 | // Set to `true` or `false` to always turn it on or off 74 | bundleAnalyzerReport: process.env.npm_config_report 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /AwesomePOS/config/prod.env.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | module.exports = { 3 | NODE_ENV: '"production"' 4 | } 5 | -------------------------------------------------------------------------------- /AwesomePOS/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | AwesomePOS-快餐收银系统 7 | 8 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /AwesomePOS/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "awesomepos", 3 | "version": "1.0.0", 4 | "description": "A Vue.js project", 5 | "author": "DWL716 <1239787435@qq.com>", 6 | "private": true, 7 | "scripts": { 8 | "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js", 9 | "start": "npm run dev", 10 | "lint": "eslint --ext .js,.vue src", 11 | "build": "node build/build.js" 12 | }, 13 | "dependencies": { 14 | "axios": "^0.18.0", 15 | "element-ui": "^2.6.1", 16 | "vue": "^2.5.2", 17 | "vue-router": "^3.0.1" 18 | }, 19 | "devDependencies": { 20 | "autoprefixer": "^7.1.2", 21 | "babel-core": "^6.22.1", 22 | "babel-eslint": "^8.2.1", 23 | "babel-helper-vue-jsx-merge-props": "^2.0.3", 24 | "babel-loader": "^7.1.1", 25 | "babel-plugin-syntax-jsx": "^6.18.0", 26 | "babel-plugin-transform-runtime": "^6.22.0", 27 | "babel-plugin-transform-vue-jsx": "^3.5.0", 28 | "babel-preset-env": "^1.3.2", 29 | "babel-preset-stage-2": "^6.22.0", 30 | "chalk": "^2.0.1", 31 | "copy-webpack-plugin": "^4.0.1", 32 | "css-loader": "^0.28.0", 33 | "eslint": "^4.15.0", 34 | "eslint-config-standard": "^10.2.1", 35 | "eslint-friendly-formatter": "^3.0.0", 36 | "eslint-loader": "^1.7.1", 37 | "eslint-plugin-import": "^2.7.0", 38 | "eslint-plugin-node": "^5.2.0", 39 | "eslint-plugin-promise": "^3.4.0", 40 | "eslint-plugin-standard": "^3.0.1", 41 | "eslint-plugin-vue": "^4.0.0", 42 | "extract-text-webpack-plugin": "^3.0.0", 43 | "file-loader": "^1.1.4", 44 | "friendly-errors-webpack-plugin": "^1.6.1", 45 | "html-webpack-plugin": "^2.30.1", 46 | "node-notifier": "^5.1.2", 47 | "optimize-css-assets-webpack-plugin": "^3.2.0", 48 | "ora": "^1.2.0", 49 | "portfinder": "^1.0.13", 50 | "postcss-import": "^11.0.0", 51 | "postcss-loader": "^2.0.8", 52 | "postcss-url": "^7.2.1", 53 | "rimraf": "^2.6.0", 54 | "semver": "^5.3.0", 55 | "shelljs": "^0.7.6", 56 | "uglifyjs-webpack-plugin": "^1.1.1", 57 | "url-loader": "^0.5.8", 58 | "vue-loader": "^13.3.0", 59 | "vue-style-loader": "^3.0.1", 60 | "vue-template-compiler": "^2.5.2", 61 | "webpack": "^3.6.0", 62 | "webpack-bundle-analyzer": "^2.9.0", 63 | "webpack-dev-server": "^2.9.1", 64 | "webpack-merge": "^4.1.0" 65 | }, 66 | "engines": { 67 | "node": ">= 6.0.0", 68 | "npm": ">= 3.0.0" 69 | }, 70 | "browserslist": [ 71 | "> 1%", 72 | "last 2 versions", 73 | "not ie <= 8" 74 | ] 75 | } 76 | -------------------------------------------------------------------------------- /AwesomePOS/src/App.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 19 | 20 | 38 | -------------------------------------------------------------------------------- /AwesomePOS/src/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DWL716/vue/50e1bd1ef36c6e8a49872dc9a6a357f7202c1998/AwesomePOS/src/assets/logo.png -------------------------------------------------------------------------------- /AwesomePOS/src/components/common/leftNav.vue: -------------------------------------------------------------------------------- 1 | 31 | 32 | 37 | 38 | 63 | 64 | -------------------------------------------------------------------------------- /AwesomePOS/src/components/page/HelloWorld.vue: -------------------------------------------------------------------------------- 1 | 85 | 86 | 96 | 97 | 98 | 114 | -------------------------------------------------------------------------------- /AwesomePOS/src/components/page/Pos.vue: -------------------------------------------------------------------------------- 1 | 102 | 103 | 236 | 237 | 314 | -------------------------------------------------------------------------------- /AwesomePOS/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 | import Vue from 'vue' 4 | import App from './App' 5 | import router from './router' 6 | import ElementUI from 'element-ui' 7 | import 'element-ui/lib/theme-chalk/index.css' 8 | 9 | Vue.config.productionTip = false 10 | Vue.use(ElementUI) 11 | /* eslint-disable no-new */ 12 | new Vue({ 13 | el: '#app', 14 | router, 15 | components: { App }, 16 | template: '' 17 | 18 | }) 19 | -------------------------------------------------------------------------------- /AwesomePOS/src/router/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Router from 'vue-router' 3 | import HelloWorld from '@/components/page/HelloWorld' 4 | import Pos from '@/components/page/Pos' 5 | 6 | Vue.use(Router) 7 | 8 | export default new Router({ 9 | routes: [ 10 | { 11 | path: '/pos', 12 | name: 'HelloWorld', 13 | component: HelloWorld 14 | }, 15 | { 16 | path:'/', 17 | name:'pos', 18 | component:Pos 19 | } 20 | ] 21 | }) 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # vue 2 | vue项目 3 | -------------------------------------------------------------------------------- /Travel/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2018 Dell-Lee 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of 6 | this software and associated documentation files (the "Software"), to deal in 7 | the Software without restriction, including without limitation the rights to 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 9 | the Software, and to permit persons to whom the Software is furnished to do so, 10 | subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /Travel/README.md: -------------------------------------------------------------------------------- 1 | # travel 2 | 3 | > A Vue.js project 4 | 5 | ## Build Setup 6 | 7 | ``` bash 8 | # install dependencies 9 | npm install 10 | 11 | # serve with hot reload at localhost:8080 12 | npm run dev 13 | 14 | # build for production with minification 15 | npm run build 16 | 17 | # build for production and view the bundle analyzer report 18 | npm run build --report 19 | ``` 20 | 21 | For a detailed explanation on how things work, check out the [guide](http://vuejs-templates.github.io/webpack/) and [docs for vue-loader](http://vuejs.github.io/vue-loader). 22 | -------------------------------------------------------------------------------- /Travel/build/build.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | require('./check-versions')() 3 | 4 | process.env.NODE_ENV = 'production' 5 | 6 | const ora = require('ora') 7 | const rm = require('rimraf') 8 | const path = require('path') 9 | const chalk = require('chalk') 10 | const webpack = require('webpack') 11 | const config = require('../config') 12 | const webpackConfig = require('./webpack.prod.conf') 13 | 14 | const spinner = ora('building for production...') 15 | spinner.start() 16 | 17 | rm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err => { 18 | if (err) throw err 19 | webpack(webpackConfig, (err, stats) => { 20 | spinner.stop() 21 | if (err) throw err 22 | process.stdout.write(stats.toString({ 23 | colors: true, 24 | modules: false, 25 | children: false, // If you are using ts-loader, setting this to true will make TypeScript errors show up during build. 26 | chunks: false, 27 | chunkModules: false 28 | }) + '\n\n') 29 | 30 | if (stats.hasErrors()) { 31 | console.log(chalk.red(' Build failed with errors.\n')) 32 | process.exit(1) 33 | } 34 | 35 | console.log(chalk.cyan(' Build complete.\n')) 36 | console.log(chalk.yellow( 37 | ' Tip: built files are meant to be served over an HTTP server.\n' + 38 | ' Opening index.html over file:// won\'t work.\n' 39 | )) 40 | }) 41 | }) 42 | -------------------------------------------------------------------------------- /Travel/build/check-versions.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const chalk = require('chalk') 3 | const semver = require('semver') 4 | const packageConfig = require('../package.json') 5 | const shell = require('shelljs') 6 | 7 | function exec (cmd) { 8 | return require('child_process').execSync(cmd).toString().trim() 9 | } 10 | 11 | const versionRequirements = [ 12 | { 13 | name: 'node', 14 | currentVersion: semver.clean(process.version), 15 | versionRequirement: packageConfig.engines.node 16 | } 17 | ] 18 | 19 | if (shell.which('npm')) { 20 | versionRequirements.push({ 21 | name: 'npm', 22 | currentVersion: exec('npm --version'), 23 | versionRequirement: packageConfig.engines.npm 24 | }) 25 | } 26 | 27 | module.exports = function () { 28 | const warnings = [] 29 | 30 | for (let i = 0; i < versionRequirements.length; i++) { 31 | const mod = versionRequirements[i] 32 | 33 | if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) { 34 | warnings.push(mod.name + ': ' + 35 | chalk.red(mod.currentVersion) + ' should be ' + 36 | chalk.green(mod.versionRequirement) 37 | ) 38 | } 39 | } 40 | 41 | if (warnings.length) { 42 | console.log('') 43 | console.log(chalk.yellow('To use this template, you must update following to modules:')) 44 | console.log() 45 | 46 | for (let i = 0; i < warnings.length; i++) { 47 | const warning = warnings[i] 48 | console.log(' ' + warning) 49 | } 50 | 51 | console.log() 52 | process.exit(1) 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /Travel/build/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DWL716/vue/50e1bd1ef36c6e8a49872dc9a6a357f7202c1998/Travel/build/logo.png -------------------------------------------------------------------------------- /Travel/build/utils.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const path = require('path') 3 | const config = require('../config') 4 | const ExtractTextPlugin = require('extract-text-webpack-plugin') 5 | const packageConfig = require('../package.json') 6 | 7 | exports.assetsPath = function (_path) { 8 | const assetsSubDirectory = process.env.NODE_ENV === 'production' 9 | ? config.build.assetsSubDirectory 10 | : config.dev.assetsSubDirectory 11 | 12 | return path.posix.join(assetsSubDirectory, _path) 13 | } 14 | 15 | exports.cssLoaders = function (options) { 16 | options = options || {} 17 | 18 | const cssLoader = { 19 | loader: 'css-loader', 20 | options: { 21 | sourceMap: options.sourceMap 22 | } 23 | } 24 | 25 | const postcssLoader = { 26 | loader: 'postcss-loader', 27 | options: { 28 | sourceMap: options.sourceMap 29 | } 30 | } 31 | 32 | // generate loader string to be used with extract text plugin 33 | function generateLoaders (loader, loaderOptions) { 34 | const loaders = options.usePostCSS ? [cssLoader, postcssLoader] : [cssLoader] 35 | 36 | if (loader) { 37 | loaders.push({ 38 | loader: loader + '-loader', 39 | options: Object.assign({}, loaderOptions, { 40 | sourceMap: options.sourceMap 41 | }) 42 | }) 43 | } 44 | 45 | // Extract CSS when that option is specified 46 | // (which is the case during production build) 47 | if (options.extract) { 48 | return ExtractTextPlugin.extract({ 49 | use: loaders, 50 | fallback: 'vue-style-loader' 51 | }) 52 | } else { 53 | return ['vue-style-loader'].concat(loaders) 54 | } 55 | } 56 | 57 | // https://vue-loader.vuejs.org/en/configurations/extract-css.html 58 | return { 59 | css: generateLoaders(), 60 | postcss: generateLoaders(), 61 | less: generateLoaders('less'), 62 | sass: generateLoaders('sass', { indentedSyntax: true }), 63 | scss: generateLoaders('sass'), 64 | stylus: generateLoaders('stylus'), 65 | styl: generateLoaders('stylus') 66 | } 67 | } 68 | 69 | // Generate loaders for standalone style files (outside of .vue) 70 | exports.styleLoaders = function (options) { 71 | const output = [] 72 | const loaders = exports.cssLoaders(options) 73 | 74 | for (const extension in loaders) { 75 | const loader = loaders[extension] 76 | output.push({ 77 | test: new RegExp('\\.' + extension + '$'), 78 | use: loader 79 | }) 80 | } 81 | 82 | return output 83 | } 84 | 85 | exports.createNotifierCallback = () => { 86 | const notifier = require('node-notifier') 87 | 88 | return (severity, errors) => { 89 | if (severity !== 'error') return 90 | 91 | const error = errors[0] 92 | const filename = error.file && error.file.split('!').pop() 93 | 94 | notifier.notify({ 95 | title: packageConfig.name, 96 | message: severity + ': ' + error.name, 97 | subtitle: filename || '', 98 | icon: path.join(__dirname, 'logo.png') 99 | }) 100 | } 101 | } 102 | -------------------------------------------------------------------------------- /Travel/build/vue-loader.conf.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const utils = require('./utils') 3 | const config = require('../config') 4 | const isProduction = process.env.NODE_ENV === 'production' 5 | const sourceMapEnabled = isProduction 6 | ? config.build.productionSourceMap 7 | : config.dev.cssSourceMap 8 | 9 | module.exports = { 10 | loaders: utils.cssLoaders({ 11 | sourceMap: sourceMapEnabled, 12 | extract: isProduction 13 | }), 14 | cssSourceMap: sourceMapEnabled, 15 | cacheBusting: config.dev.cacheBusting, 16 | transformToRequire: { 17 | video: ['src', 'poster'], 18 | source: 'src', 19 | img: 'src', 20 | image: 'xlink:href' 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Travel/build/webpack.base.conf.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const path = require('path') 3 | const utils = require('./utils') 4 | const config = require('../config') 5 | const vueLoaderConfig = require('./vue-loader.conf') 6 | 7 | function resolve (dir) { 8 | return path.join(__dirname, '..', dir) 9 | } 10 | 11 | const createLintingRule = () => ({ 12 | test: /\.(js|vue)$/, 13 | loader: 'eslint-loader', 14 | enforce: 'pre', 15 | include: [resolve('src'), resolve('test')], 16 | options: { 17 | formatter: require('eslint-friendly-formatter'), 18 | emitWarning: !config.dev.showEslintErrorsInOverlay 19 | } 20 | }) 21 | 22 | module.exports = { 23 | context: path.resolve(__dirname, '../'), 24 | entry: { 25 | app: './src/main.js' 26 | }, 27 | output: { 28 | path: config.build.assetsRoot, 29 | filename: '[name].js', 30 | publicPath: process.env.NODE_ENV === 'production' 31 | ? config.build.assetsPublicPath 32 | : config.dev.assetsPublicPath 33 | }, 34 | resolve: { 35 | extensions: ['.js', '.vue', '.json'], 36 | alias: { 37 | 'vue$': 'vue/dist/vue.esm.js', 38 | '@': resolve('src'), 39 | 'styles': resolve('src/assets/styles'), 40 | 'common': resolve('src/common'), 41 | } 42 | }, 43 | module: { 44 | rules: [ 45 | ...(config.dev.useEslint ? [createLintingRule()] : []), 46 | { 47 | test: /\.vue$/, 48 | loader: 'vue-loader', 49 | options: vueLoaderConfig 50 | }, 51 | { 52 | test: /\.js$/, 53 | loader: 'babel-loader', 54 | include: [resolve('src'), resolve('test'), resolve('node_modules/webpack-dev-server/client')] 55 | }, 56 | { 57 | test: /\.(png|jpe?g|gif|svg)(\?.*)?$/, 58 | loader: 'url-loader', 59 | options: { 60 | limit: 10000, 61 | name: utils.assetsPath('img/[name].[hash:7].[ext]') 62 | } 63 | }, 64 | { 65 | test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/, 66 | loader: 'url-loader', 67 | options: { 68 | limit: 10000, 69 | name: utils.assetsPath('media/[name].[hash:7].[ext]') 70 | } 71 | }, 72 | { 73 | test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/, 74 | loader: 'url-loader', 75 | options: { 76 | limit: 10000, 77 | name: utils.assetsPath('fonts/[name].[hash:7].[ext]') 78 | } 79 | } 80 | ] 81 | }, 82 | node: { 83 | // prevent webpack from injecting useless setImmediate polyfill because Vue 84 | // source contains it (although only uses it if it's native). 85 | setImmediate: false, 86 | // prevent webpack from injecting mocks to Node native modules 87 | // that does not make sense for the client 88 | dgram: 'empty', 89 | fs: 'empty', 90 | net: 'empty', 91 | tls: 'empty', 92 | child_process: 'empty' 93 | } 94 | } 95 | -------------------------------------------------------------------------------- /Travel/build/webpack.dev.conf.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const utils = require('./utils') 3 | const webpack = require('webpack') 4 | const config = require('../config') 5 | const merge = require('webpack-merge') 6 | const path = require('path') 7 | const baseWebpackConfig = require('./webpack.base.conf') 8 | const CopyWebpackPlugin = require('copy-webpack-plugin') 9 | const HtmlWebpackPlugin = require('html-webpack-plugin') 10 | const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin') 11 | const portfinder = require('portfinder') 12 | 13 | const HOST = process.env.HOST 14 | const PORT = process.env.PORT && Number(process.env.PORT) 15 | 16 | const devWebpackConfig = merge(baseWebpackConfig, { 17 | module: { 18 | rules: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap, usePostCSS: true }) 19 | }, 20 | // cheap-module-eval-source-map is faster for development 21 | devtool: config.dev.devtool, 22 | 23 | // these devServer options should be customized in /config/index.js 24 | devServer: { 25 | clientLogLevel: 'warning', 26 | historyApiFallback: { 27 | rewrites: [ 28 | { from: /.*/, to: path.posix.join(config.dev.assetsPublicPath, 'index.html') }, 29 | ], 30 | }, 31 | hot: true, 32 | contentBase: false, // since we use CopyWebpackPlugin. 33 | compress: true, 34 | host: HOST || config.dev.host, 35 | port: PORT || config.dev.port, 36 | open: config.dev.autoOpenBrowser, 37 | overlay: config.dev.errorOverlay 38 | ? { warnings: false, errors: true } 39 | : false, 40 | publicPath: config.dev.assetsPublicPath, 41 | proxy: config.dev.proxyTable, 42 | quiet: true, // necessary for FriendlyErrorsPlugin 43 | watchOptions: { 44 | poll: config.dev.poll, 45 | } 46 | }, 47 | plugins: [ 48 | new webpack.DefinePlugin({ 49 | 'process.env': require('../config/dev.env') 50 | }), 51 | new webpack.HotModuleReplacementPlugin(), 52 | new webpack.NamedModulesPlugin(), // HMR shows correct file names in console on update. 53 | new webpack.NoEmitOnErrorsPlugin(), 54 | // https://github.com/ampedandwired/html-webpack-plugin 55 | new HtmlWebpackPlugin({ 56 | filename: 'index.html', 57 | template: 'index.html', 58 | inject: true 59 | }), 60 | // copy custom static assets 61 | new CopyWebpackPlugin([ 62 | { 63 | from: path.resolve(__dirname, '../static'), 64 | to: config.dev.assetsSubDirectory, 65 | ignore: ['.*'] 66 | } 67 | ]) 68 | ] 69 | }) 70 | 71 | module.exports = new Promise((resolve, reject) => { 72 | portfinder.basePort = process.env.PORT || config.dev.port 73 | portfinder.getPort((err, port) => { 74 | if (err) { 75 | reject(err) 76 | } else { 77 | // publish the new Port, necessary for e2e tests 78 | process.env.PORT = port 79 | // add port to devServer config 80 | devWebpackConfig.devServer.port = port 81 | 82 | // Add FriendlyErrorsPlugin 83 | devWebpackConfig.plugins.push(new FriendlyErrorsPlugin({ 84 | compilationSuccessInfo: { 85 | messages: [`Your application is running here: http://${devWebpackConfig.devServer.host}:${port}`], 86 | }, 87 | onErrors: config.dev.notifyOnErrors 88 | ? utils.createNotifierCallback() 89 | : undefined 90 | })) 91 | 92 | resolve(devWebpackConfig) 93 | } 94 | }) 95 | }) 96 | -------------------------------------------------------------------------------- /Travel/build/webpack.prod.conf.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const path = require('path') 3 | const utils = require('./utils') 4 | const webpack = require('webpack') 5 | const config = require('../config') 6 | const merge = require('webpack-merge') 7 | const baseWebpackConfig = require('./webpack.base.conf') 8 | const CopyWebpackPlugin = require('copy-webpack-plugin') 9 | const HtmlWebpackPlugin = require('html-webpack-plugin') 10 | const ExtractTextPlugin = require('extract-text-webpack-plugin') 11 | const OptimizeCSSPlugin = require('optimize-css-assets-webpack-plugin') 12 | const UglifyJsPlugin = require('uglifyjs-webpack-plugin') 13 | 14 | const env = require('../config/prod.env') 15 | 16 | const webpackConfig = merge(baseWebpackConfig, { 17 | module: { 18 | rules: utils.styleLoaders({ 19 | sourceMap: config.build.productionSourceMap, 20 | extract: true, 21 | usePostCSS: true 22 | }) 23 | }, 24 | devtool: config.build.productionSourceMap ? config.build.devtool : false, 25 | output: { 26 | path: config.build.assetsRoot, 27 | filename: utils.assetsPath('js/[name].[chunkhash].js'), 28 | chunkFilename: utils.assetsPath('js/[id].[chunkhash].js') 29 | }, 30 | plugins: [ 31 | // http://vuejs.github.io/vue-loader/en/workflow/production.html 32 | new webpack.DefinePlugin({ 33 | 'process.env': env 34 | }), 35 | new UglifyJsPlugin({ 36 | uglifyOptions: { 37 | compress: { 38 | warnings: false 39 | } 40 | }, 41 | sourceMap: config.build.productionSourceMap, 42 | parallel: true 43 | }), 44 | // extract css into its own file 45 | new ExtractTextPlugin({ 46 | filename: utils.assetsPath('css/[name].[contenthash].css'), 47 | // Setting the following option to `false` will not extract CSS from codesplit chunks. 48 | // Their CSS will instead be inserted dynamically with style-loader when the codesplit chunk has been loaded by webpack. 49 | // It's currently set to `true` because we are seeing that sourcemaps are included in the codesplit bundle as well when it's `false`, 50 | // increasing file size: https://github.com/vuejs-templates/webpack/issues/1110 51 | allChunks: true, 52 | }), 53 | // Compress extracted CSS. We are using this plugin so that possible 54 | // duplicated CSS from different components can be deduped. 55 | new OptimizeCSSPlugin({ 56 | cssProcessorOptions: config.build.productionSourceMap 57 | ? { safe: true, map: { inline: false } } 58 | : { safe: true } 59 | }), 60 | // generate dist index.html with correct asset hash for caching. 61 | // you can customize output by editing /index.html 62 | // see https://github.com/ampedandwired/html-webpack-plugin 63 | new HtmlWebpackPlugin({ 64 | filename: config.build.index, 65 | template: 'index.html', 66 | inject: true, 67 | minify: { 68 | removeComments: true, 69 | collapseWhitespace: true, 70 | removeAttributeQuotes: true 71 | // more options: 72 | // https://github.com/kangax/html-minifier#options-quick-reference 73 | }, 74 | // necessary to consistently work with multiple chunks via CommonsChunkPlugin 75 | chunksSortMode: 'dependency' 76 | }), 77 | // keep module.id stable when vendor modules does not change 78 | new webpack.HashedModuleIdsPlugin(), 79 | // enable scope hoisting 80 | new webpack.optimize.ModuleConcatenationPlugin(), 81 | // split vendor js into its own file 82 | new webpack.optimize.CommonsChunkPlugin({ 83 | name: 'vendor', 84 | minChunks (module) { 85 | // any required modules inside node_modules are extracted to vendor 86 | return ( 87 | module.resource && 88 | /\.js$/.test(module.resource) && 89 | module.resource.indexOf( 90 | path.join(__dirname, '../node_modules') 91 | ) === 0 92 | ) 93 | } 94 | }), 95 | // extract webpack runtime and module manifest to its own file in order to 96 | // prevent vendor hash from being updated whenever app bundle is updated 97 | new webpack.optimize.CommonsChunkPlugin({ 98 | name: 'manifest', 99 | minChunks: Infinity 100 | }), 101 | // This instance extracts shared chunks from code splitted chunks and bundles them 102 | // in a separate chunk, similar to the vendor chunk 103 | // see: https://webpack.js.org/plugins/commons-chunk-plugin/#extra-async-commons-chunk 104 | new webpack.optimize.CommonsChunkPlugin({ 105 | name: 'app', 106 | async: 'vendor-async', 107 | children: true, 108 | minChunks: 3 109 | }), 110 | 111 | // copy custom static assets 112 | new CopyWebpackPlugin([ 113 | { 114 | from: path.resolve(__dirname, '../static'), 115 | to: config.build.assetsSubDirectory, 116 | ignore: ['.*'] 117 | } 118 | ]) 119 | ] 120 | }) 121 | 122 | if (config.build.productionGzip) { 123 | const CompressionWebpackPlugin = require('compression-webpack-plugin') 124 | 125 | webpackConfig.plugins.push( 126 | new CompressionWebpackPlugin({ 127 | asset: '[path].gz[query]', 128 | algorithm: 'gzip', 129 | test: new RegExp( 130 | '\\.(' + 131 | config.build.productionGzipExtensions.join('|') + 132 | ')$' 133 | ), 134 | threshold: 10240, 135 | minRatio: 0.8 136 | }) 137 | ) 138 | } 139 | 140 | if (config.build.bundleAnalyzerReport) { 141 | const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin 142 | webpackConfig.plugins.push(new BundleAnalyzerPlugin()) 143 | } 144 | 145 | module.exports = webpackConfig 146 | -------------------------------------------------------------------------------- /Travel/config/dev.env.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const merge = require('webpack-merge') 3 | const prodEnv = require('./prod.env') 4 | 5 | module.exports = merge(prodEnv, { 6 | NODE_ENV: '"development"' 7 | }) 8 | -------------------------------------------------------------------------------- /Travel/config/index.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | // Template version: 1.3.1 3 | // see http://vuejs-templates.github.io/webpack for documentation. 4 | 5 | const path = require('path') 6 | 7 | module.exports = { 8 | dev: { 9 | 10 | // Paths fiddler charles 11 | assetsSubDirectory: 'static', 12 | assetsPublicPath: '/project', 13 | proxyTable: { 14 | '/api': { 15 | target: 'http://localhost:80' 16 | } 17 | }, 18 | 19 | // Various Dev Server settings 20 | host: 'localhost', // can be overwritten by process.env.HOST 21 | port: 8080, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined 22 | autoOpenBrowser: false, 23 | errorOverlay: true, 24 | notifyOnErrors: true, 25 | poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions- 26 | 27 | // Use Eslint Loader? 28 | // If true, your code will be linted during bundling and 29 | // linting errors and warnings will be shown in the console. 30 | useEslint: true, 31 | // If true, eslint errors and warnings will also be shown in the error overlay 32 | // in the browser. 33 | showEslintErrorsInOverlay: false, 34 | 35 | /** 36 | * Source Maps 37 | */ 38 | 39 | // https://webpack.js.org/configuration/devtool/#development 40 | devtool: 'cheap-module-eval-source-map', 41 | 42 | // If you have problems debugging vue-files in devtools, 43 | // set this to false - it *may* help 44 | // https://vue-loader.vuejs.org/en/options.html#cachebusting 45 | cacheBusting: true, 46 | 47 | cssSourceMap: true 48 | }, 49 | 50 | build: { 51 | // Template for index.html 52 | index: path.resolve(__dirname, '../dist/index.html'), 53 | 54 | // Paths 55 | assetsRoot: path.resolve(__dirname, '../dist'), 56 | assetsSubDirectory: 'static', 57 | assetsPublicPath: '/', 58 | 59 | /** 60 | * Source Maps 61 | */ 62 | 63 | productionSourceMap: true, 64 | // https://webpack.js.org/configuration/devtool/#production 65 | devtool: '#source-map', 66 | 67 | // Gzip off by default as many popular static hosts such as 68 | // Surge or Netlify already gzip all static assets for you. 69 | // Before setting to `true`, make sure to: 70 | // npm install --save-dev compression-webpack-plugin 71 | productionGzip: false, 72 | productionGzipExtensions: ['js', 'css'], 73 | 74 | // Run the build command with an extra argument to 75 | // View the bundle analyzer report after build finishes: 76 | // `npm run build --report` 77 | // Set to `true` or `false` to always turn it on or off 78 | bundleAnalyzerReport: process.env.npm_config_report 79 | } 80 | } 81 | -------------------------------------------------------------------------------- /Travel/config/prod.env.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | module.exports = { 3 | NODE_ENV: '"production"' 4 | } 5 | -------------------------------------------------------------------------------- /Travel/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | travel 7 | 8 | 9 |
10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /Travel/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "travel", 3 | "version": "1.0.0", 4 | "description": "A Vue.js project", 5 | "author": "dell.lee", 6 | "private": true, 7 | "scripts": { 8 | "dev": "webpack-dev-server --host 0.0.0.0 --inline --progress --config build/webpack.dev.conf.js", 9 | "start": "npm run dev", 10 | "lint": "eslint --ext .js,.vue src", 11 | "build": "node build/build.js" 12 | }, 13 | "dependencies": { 14 | "axios": "^0.17.1", 15 | "babel-polyfill": "^6.26.0", 16 | "better-scroll": "^1.8.1", 17 | "fastclick": "^1.0.6", 18 | "stylus": "^0.54.5", 19 | "stylus-loader": "^3.0.1", 20 | "vue": "^2.5.2", 21 | "vue-awesome-swiper": "^2.6.7", 22 | "vue-router": "^3.0.1", 23 | "vuex": "^3.0.1" 24 | }, 25 | "devDependencies": { 26 | "autoprefixer": "^7.1.2", 27 | "babel-core": "^6.22.1", 28 | "babel-eslint": "^8.2.1", 29 | "babel-helper-vue-jsx-merge-props": "^2.0.3", 30 | "babel-loader": "^7.1.1", 31 | "babel-plugin-syntax-jsx": "^6.18.0", 32 | "babel-plugin-transform-runtime": "^6.22.0", 33 | "babel-plugin-transform-vue-jsx": "^3.5.0", 34 | "babel-preset-env": "^1.3.2", 35 | "babel-preset-stage-2": "^6.22.0", 36 | "chalk": "^2.0.1", 37 | "copy-webpack-plugin": "^4.0.1", 38 | "css-loader": "^0.28.0", 39 | "eslint": "^4.15.0", 40 | "eslint-config-standard": "^10.2.1", 41 | "eslint-friendly-formatter": "^3.0.0", 42 | "eslint-loader": "^1.7.1", 43 | "eslint-plugin-import": "^2.7.0", 44 | "eslint-plugin-node": "^5.2.0", 45 | "eslint-plugin-promise": "^3.4.0", 46 | "eslint-plugin-standard": "^3.0.1", 47 | "eslint-plugin-vue": "^4.0.0", 48 | "extract-text-webpack-plugin": "^3.0.0", 49 | "file-loader": "^1.1.4", 50 | "friendly-errors-webpack-plugin": "^1.6.1", 51 | "html-webpack-plugin": "^2.30.1", 52 | "node-notifier": "^5.1.2", 53 | "optimize-css-assets-webpack-plugin": "^3.2.0", 54 | "ora": "^1.2.0", 55 | "portfinder": "^1.0.13", 56 | "postcss-import": "^11.0.0", 57 | "postcss-loader": "^2.0.8", 58 | "postcss-url": "^7.2.1", 59 | "rimraf": "^2.6.0", 60 | "semver": "^5.3.0", 61 | "shelljs": "^0.7.6", 62 | "uglifyjs-webpack-plugin": "^1.1.1", 63 | "url-loader": "^0.5.8", 64 | "vue-loader": "^13.3.0", 65 | "vue-style-loader": "^3.0.1", 66 | "vue-template-compiler": "^2.5.2", 67 | "webpack": "^3.6.0", 68 | "webpack-bundle-analyzer": "^2.9.0", 69 | "webpack-dev-server": "^2.9.1", 70 | "webpack-merge": "^4.1.0" 71 | }, 72 | "engines": { 73 | "node": ">= 6.0.0", 74 | "npm": ">= 3.0.0" 75 | }, 76 | "browserslist": [ 77 | "> 1%", 78 | "last 2 versions", 79 | "not ie <= 8" 80 | ] 81 | } 82 | -------------------------------------------------------------------------------- /Travel/src/App.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /Travel/src/assets/styles/border.css: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | .border, 3 | .border-top, 4 | .border-right, 5 | .border-bottom, 6 | .border-left, 7 | .border-topbottom, 8 | .border-rightleft, 9 | .border-topleft, 10 | .border-rightbottom, 11 | .border-topright, 12 | .border-bottomleft { 13 | position: relative; 14 | } 15 | .border::before, 16 | .border-top::before, 17 | .border-right::before, 18 | .border-bottom::before, 19 | .border-left::before, 20 | .border-topbottom::before, 21 | .border-topbottom::after, 22 | .border-rightleft::before, 23 | .border-rightleft::after, 24 | .border-topleft::before, 25 | .border-topleft::after, 26 | .border-rightbottom::before, 27 | .border-rightbottom::after, 28 | .border-topright::before, 29 | .border-topright::after, 30 | .border-bottomleft::before, 31 | .border-bottomleft::after { 32 | content: "\0020"; 33 | overflow: hidden; 34 | position: absolute; 35 | } 36 | /* border 37 | * 因,边框是由伪元素区域遮盖在父级 38 | * 故,子级若有交互,需要对子级设置 39 | * 定位 及 z轴 40 | */ 41 | .border::before { 42 | box-sizing: border-box; 43 | top: 0; 44 | left: 0; 45 | height: 100%; 46 | width: 100%; 47 | border: 1px solid #eaeaea; 48 | transform-origin: 0 0; 49 | } 50 | .border-top::before, 51 | .border-bottom::before, 52 | .border-topbottom::before, 53 | .border-topbottom::after, 54 | .border-topleft::before, 55 | .border-rightbottom::after, 56 | .border-topright::before, 57 | .border-bottomleft::before { 58 | left: 0; 59 | width: 100%; 60 | height: 1px; 61 | } 62 | .border-right::before, 63 | .border-left::before, 64 | .border-rightleft::before, 65 | .border-rightleft::after, 66 | .border-topleft::after, 67 | .border-rightbottom::before, 68 | .border-topright::after, 69 | .border-bottomleft::after { 70 | top: 0; 71 | width: 1px; 72 | height: 100%; 73 | } 74 | .border-top::before, 75 | .border-topbottom::before, 76 | .border-topleft::before, 77 | .border-topright::before { 78 | border-top: 1px solid #eaeaea; 79 | transform-origin: 0 0; 80 | } 81 | .border-right::before, 82 | .border-rightbottom::before, 83 | .border-rightleft::before, 84 | .border-topright::after { 85 | border-right: 1px solid #eaeaea; 86 | transform-origin: 100% 0; 87 | } 88 | .border-bottom::before, 89 | .border-topbottom::after, 90 | .border-rightbottom::after, 91 | .border-bottomleft::before { 92 | border-bottom: 1px solid #eaeaea; 93 | transform-origin: 0 100%; 94 | } 95 | .border-left::before, 96 | .border-topleft::after, 97 | .border-rightleft::after, 98 | .border-bottomleft::after { 99 | border-left: 1px solid #eaeaea; 100 | transform-origin: 0 0; 101 | } 102 | .border-top::before, 103 | .border-topbottom::before, 104 | .border-topleft::before, 105 | .border-topright::before { 106 | top: 0; 107 | } 108 | .border-right::before, 109 | .border-rightleft::after, 110 | .border-rightbottom::before, 111 | .border-topright::after { 112 | right: 0; 113 | } 114 | .border-bottom::before, 115 | .border-topbottom::after, 116 | .border-rightbottom::after, 117 | .border-bottomleft::after { 118 | bottom: 0; 119 | } 120 | .border-left::before, 121 | .border-rightleft::before, 122 | .border-topleft::after, 123 | .border-bottomleft::before { 124 | left: 0; 125 | } 126 | @media (max--moz-device-pixel-ratio: 1.49), (-webkit-max-device-pixel-ratio: 1.49), (max-device-pixel-ratio: 1.49), (max-resolution: 143dpi), (max-resolution: 1.49dppx) { 127 | /* 默认值,无需重置 */ 128 | } 129 | @media (min--moz-device-pixel-ratio: 1.5) and (max--moz-device-pixel-ratio: 2.49), (-webkit-min-device-pixel-ratio: 1.5) and (-webkit-max-device-pixel-ratio: 2.49), (min-device-pixel-ratio: 1.5) and (max-device-pixel-ratio: 2.49), (min-resolution: 144dpi) and (max-resolution: 239dpi), (min-resolution: 1.5dppx) and (max-resolution: 2.49dppx) { 130 | .border::before { 131 | width: 200%; 132 | height: 200%; 133 | transform: scale(.5); 134 | } 135 | .border-top::before, 136 | .border-bottom::before, 137 | .border-topbottom::before, 138 | .border-topbottom::after, 139 | .border-topleft::before, 140 | .border-rightbottom::after, 141 | .border-topright::before, 142 | .border-bottomleft::before { 143 | transform: scaleY(.5); 144 | } 145 | .border-right::before, 146 | .border-left::before, 147 | .border-rightleft::before, 148 | .border-rightleft::after, 149 | .border-topleft::after, 150 | .border-rightbottom::before, 151 | .border-topright::after, 152 | .border-bottomleft::after { 153 | transform: scaleX(.5); 154 | } 155 | } 156 | @media (min--moz-device-pixel-ratio: 2.5), (-webkit-min-device-pixel-ratio: 2.5), (min-device-pixel-ratio: 2.5), (min-resolution: 240dpi), (min-resolution: 2.5dppx) { 157 | .border::before { 158 | width: 300%; 159 | height: 300%; 160 | transform: scale(.33333); 161 | } 162 | .border-top::before, 163 | .border-bottom::before, 164 | .border-topbottom::before, 165 | .border-topbottom::after, 166 | .border-topleft::before, 167 | .border-rightbottom::after, 168 | .border-topright::before, 169 | .border-bottomleft::before { 170 | transform: scaleY(.33333); 171 | } 172 | .border-right::before, 173 | .border-left::before, 174 | .border-rightleft::before, 175 | .border-rightleft::after, 176 | .border-topleft::after, 177 | .border-rightbottom::before, 178 | .border-topright::after, 179 | .border-bottomleft::after { 180 | transform: scaleX(.33333); 181 | } 182 | } 183 | -------------------------------------------------------------------------------- /Travel/src/assets/styles/iconfont.css: -------------------------------------------------------------------------------- 1 | @font-face {font-family: "iconfont"; 2 | src: url('./iconfont/iconfont.eot?t=1518407379870'); /* IE9*/ 3 | src: url('./iconfont/iconfont.eot?t=1518407379870#iefix') format('embedded-opentype'), /* IE6-IE8 */ 4 | url('data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAAAZkAAsAAAAACSwAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAADMAAABCsP6z7U9TLzIAAAE8AAAARAAAAFZW7kiDY21hcAAAAYAAAAB5AAAByJwL0bBnbHlmAAAB/AAAAk0AAAKoGB5WbGhlYWQAAARMAAAALwAAADYQerPqaGhlYQAABHwAAAAcAAAAJAfeA4dobXR4AAAEmAAAABMAAAAYF+kAAGxvY2EAAASsAAAADgAAAA4CkAGkbWF4cAAABLwAAAAfAAAAIAEVAF1uYW1lAAAE3AAAAUUAAAJtPlT+fXBvc3QAAAYkAAAAPgAAAFAP0gyTeJxjYGRgYOBikGPQYWB0cfMJYeBgYGGAAJAMY05meiJQDMoDyrGAaQ4gZoOIAgCKIwNPAHicY2Bk/sM4gYGVgYOpk+kMAwNDP4RmfM1gxMjBwMDEwMrMgBUEpLmmMDgwVDybxNzwv4EhhrmZoQEozAiSAwAvnw0FeJzFkcENhDAMBMcETghRBk9elBFdPYgHVVCk24B1Ag8qYKOJsitHjmKgA5KYRQu2Y4RWpVbyxFDyliw/0tPovPnki2c/zlPp2z0yVT8rXNK9Jjraj89k37V+ayz7/3Yxh+1GT/SpErPxpRLz8VzRP+JHhe4CQWscEwAAAHicNZHPaxNBFMfnzWR3J8lmttnd7I8kk+1m252G1pWucVP8kVYpFkVQ8CT04sWbogepBw8FESootCdF8CKiB2mvWqlKETx48e5FpB76H9iD3TqJdnjzeTPM4zvfN4MUhA5+ki3iIQtNoGk0jy4jBOoktBnmEIpugiehFio112ZERCLUonZCToPbVm0nzbqxq2qqAQxacCxMM5FgAce7fXwSUocD+I36FXO8aZJVKHmi9SC/gF9ALYiaRv9Ifn5q1k5HLbqkm6Zvmo+oqigU44LB4IbrFJViSc1fKka9thV0cAC6L+oXr1ZGG+a1le5NPu4WAZaXwWqMstez1XpVxr26Y5m+NlKhXr0Sjdmw9KvsWTqPd5AceACygTeRKbtFVpg60r30LmIBcdbL3Okn+FswAWDmz60Zv6jkT6vUsx38rtPiVh571FQp/PBnLAOklJwHy3iP3Jd6qAiq7cLgSaRWtwdZAvhLPu968JE6IzQ/SzX4UKYBWcpP+XN+vkCrNQqb1CnC53KgDa1JvU/kDplDZeSiCKHxBEQfei1w2XAhtwy0FihxH5wAHAbS+Pf13UJhd31jwI217UJhe211QHhcIjVOzwypy7PDurnDitW17RPl5giULg05uB+hAsJ7yEANdFQ2GLZVrfrvZ3vVBLS0BTaDqB13MytMYBayVNpI/2eVbP1Z4TFAzMndYX7LXCbD4fzc/qJvGe/1sfIrfUxf1CP9NrPwb8H3n3EhOL7OxRvmNbwKn2rmC9Cxdxj7WqncYuyh3UHoLws4e6EAAAB4nGNgZGBgAOKHvzwz4vltvjJwszCAwLW1278i6P8NLAzMzUAuBwMTSBQAby0MrgB4nGNgZGBgbvjfwBDDwgACQJKRARWwAQBHDAJveJxjYWBgYH7JwMDCgIoBEp8BAQAAAAAAAHYAngDGAQYBVAAAeJxjYGRgYGBjCGRgZQABJiDmAkIGhv9gPgMAEUgBcwB4nGWPTU7DMBCFX/oHpBKqqGCH5AViASj9EatuWFRq911036ZOmyqJI8et1ANwHo7ACTgC3IA78EgnmzaWx9+8eWNPANzgBx6O3y33kT1cMjtyDRe4F65TfxBukF+Em2jjVbhF/U3YxzOmwm10YXmD17hi9oR3YQ8dfAjXcI1P4Tr1L+EG+Vu4iTv8CrfQ8erCPuZeV7iNRy/2x1YvnF6p5UHFockikzm/gple75KFrdLqnGtbxCZTg6BfSVOdaVvdU+zXQ+ciFVmTqgmrOkmMyq3Z6tAFG+fyUa8XiR6EJuVYY/62xgKOcQWFJQ6MMUIYZIjK6Og7VWb0r7FDwl57Vj3N53RbFNT/c4UBAvTPXFO6stJ5Ok+BPV8bUnV0K27LnpQ0kV7NSRKyQl7WtlRC6gE2ZVeOEXpc0Yk/KGdI/wAJWm7IAAAAeJxjYGKAAC4G7ICNkYmRmZGFkZWRjZGdgbGCPSszMa8kv5QtLTEvozSTrTi/tLg0n62ktAAozsAAAMscC3oAAA==') format('woff'), 5 | url('./iconfont/iconfont.ttf?t=1518407379870') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/ 6 | url('./iconfont/iconfont.svg?t=1518407379870#iconfont') format('svg'); /* iOS 4.1- */ 7 | } 8 | 9 | .iconfont { 10 | font-family:"iconfont" !important; 11 | font-size:16px; 12 | font-style:normal; 13 | -webkit-font-smoothing: antialiased; 14 | -moz-osx-font-smoothing: grayscale; 15 | } 16 | -------------------------------------------------------------------------------- /Travel/src/assets/styles/iconfont/iconfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DWL716/vue/50e1bd1ef36c6e8a49872dc9a6a357f7202c1998/Travel/src/assets/styles/iconfont/iconfont.eot -------------------------------------------------------------------------------- /Travel/src/assets/styles/iconfont/iconfont.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 8 | Created by iconfont 9 | 10 | 11 | 12 | 13 | 21 | 22 | 23 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /Travel/src/assets/styles/iconfont/iconfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DWL716/vue/50e1bd1ef36c6e8a49872dc9a6a357f7202c1998/Travel/src/assets/styles/iconfont/iconfont.ttf -------------------------------------------------------------------------------- /Travel/src/assets/styles/iconfont/iconfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DWL716/vue/50e1bd1ef36c6e8a49872dc9a6a357f7202c1998/Travel/src/assets/styles/iconfont/iconfont.woff -------------------------------------------------------------------------------- /Travel/src/assets/styles/mixins.styl: -------------------------------------------------------------------------------- 1 | ellipsis() 2 | overflow: hidden 3 | white-space: nowrap 4 | text-overflow: ellipsis 5 | -------------------------------------------------------------------------------- /Travel/src/assets/styles/reset.css: -------------------------------------------------------------------------------- 1 | @charset "utf-8";html{background-color:#fff;color:#000;font-size:12px} 2 | body,ul,ol,dl,dd,h1,h2,h3,h4,h5,h6,figure,form,fieldset,legend,input,textarea,button,p,blockquote,th,td,pre,xmp{margin:0;padding:0} 3 | body,input,textarea,button,select,pre,xmp,tt,code,kbd,samp{line-height:1.5;font-family:tahoma,arial,"Hiragino Sans GB",simsun,sans-serif} 4 | h1,h2,h3,h4,h5,h6,small,big,input,textarea,button,select{font-size:100%} 5 | h1,h2,h3,h4,h5,h6{font-family:tahoma,arial,"Hiragino Sans GB","微软雅黑",simsun,sans-serif} 6 | h1,h2,h3,h4,h5,h6,b,strong{font-weight:normal} 7 | address,cite,dfn,em,i,optgroup,var{font-style:normal} 8 | table{border-collapse:collapse;border-spacing:0;text-align:left} 9 | caption,th{text-align:inherit} 10 | ul,ol,menu{list-style:none} 11 | fieldset,img{border:0} 12 | img,object,input,textarea,button,select{vertical-align:middle} 13 | article,aside,footer,header,section,nav,figure,figcaption,hgroup,details,menu{display:block} 14 | audio,canvas,video{display:inline-block;*display:inline;*zoom:1} 15 | blockquote:before,blockquote:after,q:before,q:after{content:"\0020"} 16 | textarea{overflow:auto;resize:vertical} 17 | input,textarea,button,select,a{outline:0 none;border: none;} 18 | button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0} 19 | mark{background-color:transparent} 20 | a,ins,s,u,del{text-decoration:none} 21 | sup,sub{vertical-align:baseline} 22 | html {overflow-x: hidden;height: 100%;font-size: 50px;-webkit-tap-highlight-color: transparent;} 23 | body {font-family: Arial, "Microsoft Yahei", "Helvetica Neue", Helvetica, sans-serif;color: #333;font-size: .28em;line-height: 1;-webkit-text-size-adjust: none;} 24 | hr {height: .02rem;margin: .1rem 0;border: medium none;border-top: .02rem solid #cacaca;} 25 | a {color: #25a4bb;text-decoration: none;} 26 | -------------------------------------------------------------------------------- /Travel/src/assets/styles/varibles.styl: -------------------------------------------------------------------------------- 1 | $bgColor = #00bcd4 2 | $darkTextColor = #333 3 | $headerHeight = .86rem 4 | -------------------------------------------------------------------------------- /Travel/src/common/fade/FadeAnimation.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 12 | 13 | 19 | -------------------------------------------------------------------------------- /Travel/src/common/gallary/Gallary.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | 45 | 46 | 70 | -------------------------------------------------------------------------------- /Travel/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 | import Vue from 'vue' 4 | import App from './App' 5 | import router from './router' 6 | import fastClick from 'fastclick' 7 | import VueAwesomeSwiper from 'vue-awesome-swiper' 8 | import 'babel-polyfill' 9 | import store from './store' 10 | import 'styles/reset.css' 11 | import 'styles/border.css' 12 | import 'styles/iconfont.css' 13 | import 'swiper/dist/css/swiper.css' 14 | 15 | Vue.config.productionTip = false 16 | fastClick.attach(document.body) 17 | Vue.use(VueAwesomeSwiper) 18 | 19 | /* eslint-disable no-new */ 20 | new Vue({ 21 | el: '#app', 22 | router, 23 | store, 24 | components: { App }, 25 | template: '' 26 | }) 27 | -------------------------------------------------------------------------------- /Travel/src/pages/city/City.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | 60 | 61 | 64 | -------------------------------------------------------------------------------- /Travel/src/pages/city/components/Alphabet.vue: -------------------------------------------------------------------------------- 1 | 17 | 18 | 70 | 71 | 87 | -------------------------------------------------------------------------------- /Travel/src/pages/city/components/Header.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 15 | 16 | 36 | -------------------------------------------------------------------------------- /Travel/src/pages/city/components/List.vue: -------------------------------------------------------------------------------- 1 | 46 | 47 | 82 | 83 | 123 | -------------------------------------------------------------------------------- /Travel/src/pages/city/components/Search.vue: -------------------------------------------------------------------------------- 1 | 27 | 28 | 82 | 83 | 113 | -------------------------------------------------------------------------------- /Travel/src/pages/detail/Detail.vue: -------------------------------------------------------------------------------- 1 | 14 | 15 | 59 | 60 | 64 | -------------------------------------------------------------------------------- /Travel/src/pages/detail/components/Banner.vue: -------------------------------------------------------------------------------- 1 | 24 | 25 | 54 | 55 | 87 | -------------------------------------------------------------------------------- /Travel/src/pages/detail/components/Header.vue: -------------------------------------------------------------------------------- 1 | 22 | 23 | 55 | 56 | 92 | -------------------------------------------------------------------------------- /Travel/src/pages/detail/components/List.vue: -------------------------------------------------------------------------------- 1 | 18 | 19 | 27 | 28 | 46 | -------------------------------------------------------------------------------- /Travel/src/pages/home/Home.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 68 | 69 | 72 | -------------------------------------------------------------------------------- /Travel/src/pages/home/components/Header.vue: -------------------------------------------------------------------------------- 1 | 18 | 19 | 28 | 29 | 62 | -------------------------------------------------------------------------------- /Travel/src/pages/home/components/Icons.vue: -------------------------------------------------------------------------------- 1 | 19 | 20 | 48 | 49 | 87 | -------------------------------------------------------------------------------- /Travel/src/pages/home/components/Recommend.vue: -------------------------------------------------------------------------------- 1 | 22 | 23 | 31 | 32 | 67 | -------------------------------------------------------------------------------- /Travel/src/pages/home/components/Swiper.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 33 | 34 | 46 | -------------------------------------------------------------------------------- /Travel/src/pages/home/components/Weekend.vue: -------------------------------------------------------------------------------- 1 | 21 | 22 | 30 | 31 | 54 | -------------------------------------------------------------------------------- /Travel/src/router/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Router from 'vue-router' 3 | import Home from '@/pages/home/Home' 4 | import City from '@/pages/city/City' 5 | import Detail from '@/pages/detail/Detail' 6 | 7 | Vue.use(Router) 8 | 9 | export default new Router({ 10 | routes: [{ 11 | path: '/', 12 | name: 'Home', 13 | component: Home 14 | }, { 15 | path: '/city', 16 | name: 'City', 17 | component: City 18 | }, { 19 | path: '/detail/:id', 20 | name: 'Detail', 21 | component: Detail 22 | }], 23 | scrollBehavior (to, from, savedPosition) { 24 | return { x: 0, y: 0 } 25 | } 26 | }) 27 | -------------------------------------------------------------------------------- /Travel/src/store/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Vuex from 'vuex' 3 | import state from './state' 4 | import mutations from './mutations' 5 | 6 | Vue.use(Vuex) 7 | 8 | export default new Vuex.Store({ 9 | state, 10 | mutations 11 | }) 12 | -------------------------------------------------------------------------------- /Travel/src/store/mutations.js: -------------------------------------------------------------------------------- 1 | export default { 2 | changeCity (state, city) { 3 | state.city = city 4 | try { 5 | localStorage.city = city 6 | } catch (e) {} 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /Travel/src/store/state.js: -------------------------------------------------------------------------------- 1 | let defaultCity = '上海' 2 | try { 3 | if (localStorage.city) { 4 | defaultCity = localStorage.city 5 | } 6 | } catch (e) {} 7 | 8 | export default { 9 | city: defaultCity 10 | } 11 | -------------------------------------------------------------------------------- /Travel/static/mock/city.json: -------------------------------------------------------------------------------- 1 | { 2 | "ret": true, 3 | "data":{ 4 | "hotCities": [{ 5 | "id": 1, 6 | "spell": "beijing", 7 | "name": "北京" 8 | }, { 9 | "id": 3, 10 | "spell": "shanghai", 11 | "name": "上海" 12 | }, { 13 | "id": 47, 14 | "spell": "xian", 15 | "name": "西安" 16 | }, { 17 | "id": 239, 18 | "spell": "sanya", 19 | "name": "三亚" 20 | }, { 21 | "id": 188, 22 | "spell": "lijiang", 23 | "name": "丽江" 24 | }, { 25 | "id": 125, 26 | "spell": "guilin", 27 | "name": "桂林" 28 | }], 29 | "cities": { 30 | "A": [{ 31 | "id": 56, 32 | "spell": "aba", 33 | "name": "阿坝" 34 | }, { 35 | "id": 57, 36 | "spell": "akesu", 37 | "name": "阿克苏" 38 | }, { 39 | "id": 58, 40 | "spell": "alashanmeng", 41 | "name": "阿拉善盟" 42 | }, { 43 | "id": 59, 44 | "spell": "aletai", 45 | "name": "阿勒泰" 46 | }, { 47 | "id": 60, 48 | "spell": "ali", 49 | "name": "阿里" 50 | }, { 51 | "id": 61, 52 | "spell": "ankang", 53 | "name": "安康" 54 | }, { 55 | "id": 62, 56 | "spell": "anqing", 57 | "name": "安庆" 58 | }, { 59 | "id": 63, 60 | "spell": "anshan", 61 | "name": "鞍山" 62 | }, { 63 | "id": 64, 64 | "spell": "anshun", 65 | "name": "安顺" 66 | }, { 67 | "id": 65, 68 | "spell": "anyang", 69 | "name": "安阳" 70 | }, { 71 | "id": 338, 72 | "spell": "acheng", 73 | "name": "阿城" 74 | }, { 75 | "id": 339, 76 | "spell": "anfu", 77 | "name": "安福" 78 | }, { 79 | "id": 340, 80 | "spell": "anji", 81 | "name": "安吉" 82 | }, { 83 | "id": 341, 84 | "spell": "anning", 85 | "name": "安宁" 86 | }, { 87 | "id": 342, 88 | "spell": "anqiu", 89 | "name": "安丘" 90 | }, { 91 | "id": 343, 92 | "spell": "anxi", 93 | "name": "安溪" 94 | }, { 95 | "id": 344, 96 | "spell": "anyi", 97 | "name": "安义" 98 | }, { 99 | "id": 345, 100 | "spell": "anyuan", 101 | "name": "安远" 102 | }], 103 | "B": [{ 104 | "id": 1, 105 | "spell": "beijing", 106 | "name": "北京" 107 | }, { 108 | "id": 66, 109 | "spell": "baicheng", 110 | "name": "白城" 111 | }, { 112 | "id": 67, 113 | "spell": "baise", 114 | "name": "百色" 115 | }, { 116 | "id": 68, 117 | "spell": "baishan", 118 | "name": "白山" 119 | }, { 120 | "id": 69, 121 | "spell": "baiyin", 122 | "name": "白银" 123 | }, { 124 | "id": 70, 125 | "spell": "bangbu", 126 | "name": "蚌埠" 127 | }, { 128 | "id": 71, 129 | "spell": "baoding", 130 | "name": "保定" 131 | }, { 132 | "id": 72, 133 | "spell": "baoji", 134 | "name": "宝鸡" 135 | }, { 136 | "id": 73, 137 | "spell": "baoshan", 138 | "name": "保山" 139 | }, { 140 | "id": 74, 141 | "spell": "baotou", 142 | "name": "包头" 143 | }, { 144 | "id": 75, 145 | "spell": "bayannaoer", 146 | "name": "巴彦淖尔" 147 | }, { 148 | "id": 76, 149 | "spell": "bayinguoleng", 150 | "name": "巴音郭楞" 151 | }, { 152 | "id": 77, 153 | "spell": "bazhong", 154 | "name": "巴中" 155 | }, { 156 | "id": 78, 157 | "spell": "beihai", 158 | "name": "北海" 159 | }, { 160 | "id": 79, 161 | "spell": "benxi", 162 | "name": "本溪" 163 | }, { 164 | "id": 80, 165 | "spell": "bijie", 166 | "name": "毕节" 167 | }, { 168 | "id": 81, 169 | "spell": "binzhou", 170 | "name": "滨州" 171 | }, { 172 | "id": 82, 173 | "spell": "boertala", 174 | "name": "博尔塔拉" 175 | }, { 176 | "id": 83, 177 | "spell": "bozhou", 178 | "name": "亳州" 179 | }, { 180 | "id": 346, 181 | "spell": "baoying", 182 | "name": "宝应" 183 | }, { 184 | "id": 347, 185 | "spell": "bayan", 186 | "name": "巴彦" 187 | }, { 188 | "id": 348, 189 | "spell": "binhai", 190 | "name": "滨海" 191 | }, { 192 | "id": 349, 193 | "spell": "binxian", 194 | "name": "宾县" 195 | }, { 196 | "id": 350, 197 | "spell": "binyang", 198 | "name": "宾阳" 199 | }, { 200 | "id": 351, 201 | "spell": "bishan", 202 | "name": "璧山" 203 | }, { 204 | "id": 352, 205 | "spell": "boai", 206 | "name": "博爱" 207 | }, { 208 | "id": 353, 209 | "spell": "boluo", 210 | "name": "博罗" 211 | }, { 212 | "id": 354, 213 | "spell": "boxing", 214 | "name": "博兴" 215 | }], 216 | "C": [{ 217 | "id": 2, 218 | "spell": "chongqing", 219 | "name": "重庆" 220 | }, { 221 | "id": 5, 222 | "spell": "changchun", 223 | "name": "长春" 224 | }, { 225 | "id": 6, 226 | "spell": "changsha", 227 | "name": "长沙" 228 | }, { 229 | "id": 7, 230 | "spell": "changzhou", 231 | "name": "常州" 232 | }, { 233 | "id": 8, 234 | "spell": "chengdu", 235 | "name": "成都" 236 | }, { 237 | "id": 84, 238 | "spell": "cangzhou", 239 | "name": "沧州" 240 | }, { 241 | "id": 85, 242 | "spell": "changde", 243 | "name": "常德" 244 | }, { 245 | "id": 86, 246 | "spell": "changdu", 247 | "name": "昌都" 248 | }, { 249 | "id": 87, 250 | "spell": "changji", 251 | "name": "昌吉" 252 | }, { 253 | "id": 88, 254 | "spell": "changzhi", 255 | "name": "长治" 256 | }, { 257 | "id": 89, 258 | "spell": "chaohu", 259 | "name": "巢湖" 260 | }, { 261 | "id": 90, 262 | "spell": "chaoyang", 263 | "name": "朝阳" 264 | }, { 265 | "id": 91, 266 | "spell": "chaozhou", 267 | "name": "潮州" 268 | }, { 269 | "id": 92, 270 | "spell": "chengde", 271 | "name": "承德" 272 | }, { 273 | "id": 93, 274 | "spell": "chenzhou", 275 | "name": "郴州" 276 | }, { 277 | "id": 94, 278 | "spell": "chifeng", 279 | "name": "赤峰" 280 | }, { 281 | "id": 95, 282 | "spell": "chizhou", 283 | "name": "池州" 284 | }, { 285 | "id": 96, 286 | "spell": "chongzuo", 287 | "name": "崇左" 288 | }, { 289 | "id": 97, 290 | "spell": "chuxiong", 291 | "name": "楚雄" 292 | }, { 293 | "id": 98, 294 | "spell": "chuzhou", 295 | "name": "滁州" 296 | }, { 297 | "id": 355, 298 | "spell": "cangnan", 299 | "name": "苍南" 300 | }, { 301 | "id": 356, 302 | "spell": "cangshan", 303 | "name": "苍山" 304 | }, { 305 | "id": 357, 306 | "spell": "caoxian", 307 | "name": "曹县" 308 | }, { 309 | "id": 358, 310 | "spell": "changdao", 311 | "name": "长岛" 312 | }, { 313 | "id": 359, 314 | "spell": "changfeng", 315 | "name": "长丰" 316 | }, { 317 | "id": 360, 318 | "spell": "changhai", 319 | "name": "长海" 320 | }, { 321 | "id": 361, 322 | "spell": "changle", 323 | "name": "长乐" 324 | }, { 325 | "id": 362, 326 | "spell": "changle", 327 | "name": "昌乐" 328 | }, { 329 | "id": 363, 330 | "spell": "changshan", 331 | "name": "常山" 332 | }, { 333 | "id": 364, 334 | "spell": "changshu", 335 | "name": "常熟" 336 | }, { 337 | "id": 365, 338 | "spell": "changtai", 339 | "name": "长泰" 340 | }, { 341 | "id": 366, 342 | "spell": "changting", 343 | "name": "长汀" 344 | }, { 345 | "id": 367, 346 | "spell": "changxing", 347 | "name": "长兴" 348 | }, { 349 | "id": 368, 350 | "spell": "changyi", 351 | "name": "昌邑" 352 | }, { 353 | "id": 369, 354 | "spell": "chaoan", 355 | "name": "潮安" 356 | }, { 357 | "id": 370, 358 | "spell": "chenggong", 359 | "name": "呈贡" 360 | }, { 361 | "id": 371, 362 | "spell": "chengkou", 363 | "name": "城口" 364 | }, { 365 | "id": 372, 366 | "spell": "chengwu", 367 | "name": "成武" 368 | }, { 369 | "id": 373, 370 | "spell": "chiping", 371 | "name": "茌平" 372 | }, { 373 | "id": 374, 374 | "spell": "chongren", 375 | "name": "崇仁" 376 | }, { 377 | "id": 375, 378 | "spell": "chongyi", 379 | "name": "崇义" 380 | }, { 381 | "id": 376, 382 | "spell": "chongzhou", 383 | "name": "崇州" 384 | }, { 385 | "id": 377, 386 | "spell": "chunan", 387 | "name": "淳安" 388 | }, { 389 | "id": 378, 390 | "spell": "cixi", 391 | "name": "慈溪" 392 | }, { 393 | "id": 379, 394 | "spell": "conghua", 395 | "name": "从化" 396 | }, { 397 | "id": 380, 398 | "spell": "congyang", 399 | "name": "枞阳" 400 | }], 401 | "D": [{ 402 | "id": 9, 403 | "spell": "dalian", 404 | "name": "大连" 405 | }, { 406 | "id": 10, 407 | "spell": "dongguan", 408 | "name": "东莞" 409 | }, { 410 | "id": 99, 411 | "spell": "dali", 412 | "name": "大理" 413 | }, { 414 | "id": 100, 415 | "spell": "dandong", 416 | "name": "丹东" 417 | }, { 418 | "id": 101, 419 | "spell": "daqing", 420 | "name": "大庆" 421 | }, { 422 | "id": 102, 423 | "spell": "datong", 424 | "name": "大同" 425 | }, { 426 | "id": 103, 427 | "spell": "daxinganling", 428 | "name": "大兴安岭" 429 | }, { 430 | "id": 104, 431 | "spell": "dazhou", 432 | "name": "达州" 433 | }, { 434 | "id": 105, 435 | "spell": "dehong", 436 | "name": "德宏" 437 | }, { 438 | "id": 106, 439 | "spell": "deyang", 440 | "name": "德阳" 441 | }, { 442 | "id": 107, 443 | "spell": "dezhou", 444 | "name": "德州" 445 | }, { 446 | "id": 108, 447 | "spell": "dingxi", 448 | "name": "定西" 449 | }, { 450 | "id": 109, 451 | "spell": "diqing", 452 | "name": "迪庆" 453 | }, { 454 | "id": 110, 455 | "spell": "dongying", 456 | "name": "东营" 457 | }, { 458 | "id": 381, 459 | "spell": "dafeng", 460 | "name": "大丰" 461 | }, { 462 | "id": 382, 463 | "spell": "daishan", 464 | "name": "岱山" 465 | }, { 466 | "id": 383, 467 | "spell": "dangshan", 468 | "name": "砀山" 469 | }, { 470 | "id": 384, 471 | "spell": "dangtu", 472 | "name": "当涂" 473 | }, { 474 | "id": 385, 475 | "spell": "danxian", 476 | "name": "单县" 477 | }, { 478 | "id": 386, 479 | "spell": "danyang", 480 | "name": "丹阳" 481 | }, { 482 | "id": 387, 483 | "spell": "dapu", 484 | "name": "大埔" 485 | }, { 486 | "id": 388, 487 | "spell": "datian", 488 | "name": "大田" 489 | }, { 490 | "id": 389, 491 | "spell": "dayi", 492 | "name": "大邑" 493 | }, { 494 | "id": 390, 495 | "spell": "dayu", 496 | "name": "大余" 497 | }, { 498 | "id": 391, 499 | "spell": "dazu", 500 | "name": "大足" 501 | }, { 502 | "id": 392, 503 | "spell": "dean", 504 | "name": "德安" 505 | }, { 506 | "id": 393, 507 | "spell": "dehua", 508 | "name": "德化" 509 | }, { 510 | "id": 394, 511 | "spell": "dehui", 512 | "name": "德惠" 513 | }, { 514 | "id": 395, 515 | "spell": "dengfeng", 516 | "name": "登封" 517 | }, { 518 | "id": 396, 519 | "spell": "deqing", 520 | "name": "德清" 521 | }, { 522 | "id": 397, 523 | "spell": "deqing", 524 | "name": "德庆" 525 | }, { 526 | "id": 398, 527 | "spell": "dexing", 528 | "name": "德兴" 529 | }, { 530 | "id": 399, 531 | "spell": "dianbai", 532 | "name": "电白" 533 | }, { 534 | "id": 400, 535 | "spell": "dianjiang", 536 | "name": "垫江" 537 | }, { 538 | "id": 401, 539 | "spell": "dingnan", 540 | "name": "定南" 541 | }, { 542 | "id": 402, 543 | "spell": "dingtao", 544 | "name": "定陶" 545 | }, { 546 | "id": 403, 547 | "spell": "dingyuan", 548 | "name": "定远" 549 | }, { 550 | "id": 404, 551 | "spell": "donga", 552 | "name": "东阿" 553 | }, { 554 | "id": 405, 555 | "spell": "donghai", 556 | "name": "东海" 557 | }, { 558 | "id": 406, 559 | "spell": "dongming", 560 | "name": "东明" 561 | }, { 562 | "id": 407, 563 | "spell": "dongping", 564 | "name": "东平" 565 | }, { 566 | "id": 408, 567 | "spell": "dongshan", 568 | "name": "东山" 569 | }, { 570 | "id": 409, 571 | "spell": "dongtai", 572 | "name": "东台" 573 | }, { 574 | "id": 410, 575 | "spell": "dongtou", 576 | "name": "洞头" 577 | }, { 578 | "id": 411, 579 | "spell": "dongxiang", 580 | "name": "东乡" 581 | }, { 582 | "id": 412, 583 | "spell": "dongyang", 584 | "name": "东阳" 585 | }, { 586 | "id": 413, 587 | "spell": "dongyuan", 588 | "name": "东源" 589 | }, { 590 | "id": 414, 591 | "spell": "dongzhi", 592 | "name": "东至" 593 | }, { 594 | "id": 415, 595 | "spell": "duchang", 596 | "name": "都昌" 597 | }, { 598 | "id": 416, 599 | "spell": "dujiangyan", 600 | "name": "都江堰" 601 | }], 602 | "E": [{ 603 | "id": 111, 604 | "spell": "eerduosi", 605 | "name": "鄂尔多斯" 606 | }, { 607 | "id": 112, 608 | "spell": "enshi", 609 | "name": "恩施" 610 | }, { 611 | "id": 113, 612 | "spell": "ezhou", 613 | "name": "鄂州" 614 | }, { 615 | "id": 417, 616 | "spell": "enping", 617 | "name": "恩平" 618 | }], 619 | "F": [{ 620 | "id": 11, 621 | "spell": "foshan", 622 | "name": "佛山" 623 | }, { 624 | "id": 12, 625 | "spell": "fuzhou", 626 | "name": "福州" 627 | }, { 628 | "id": 114, 629 | "spell": "fangchenggang", 630 | "name": "防城港" 631 | }, { 632 | "id": 115, 633 | "spell": "fushun", 634 | "name": "抚顺" 635 | }, { 636 | "id": 116, 637 | "spell": "fuxin", 638 | "name": "阜新" 639 | }, { 640 | "id": 117, 641 | "spell": "fuyang", 642 | "name": "阜阳" 643 | }, { 644 | "id": 118, 645 | "spell": "fuzhou", 646 | "name": "抚州" 647 | }, { 648 | "id": 418, 649 | "spell": "faku", 650 | "name": "法库" 651 | }, { 652 | "id": 419, 653 | "spell": "fanchang", 654 | "name": "繁昌" 655 | }, { 656 | "id": 420, 657 | "spell": "fangzheng", 658 | "name": "方正" 659 | }, { 660 | "id": 421, 661 | "spell": "feicheng", 662 | "name": "肥城" 663 | }, { 664 | "id": 422, 665 | "spell": "feidong", 666 | "name": "肥东" 667 | }, { 668 | "id": 423, 669 | "spell": "feixi", 670 | "name": "肥西" 671 | }, { 672 | "id": 424, 673 | "spell": "feixian", 674 | "name": "费县" 675 | }, { 676 | "id": 425, 677 | "spell": "fengcheng", 678 | "name": "丰城" 679 | }, { 680 | "id": 426, 681 | "spell": "fengdu", 682 | "name": "丰都" 683 | }, { 684 | "id": 427, 685 | "spell": "fenghua", 686 | "name": "奉化" 687 | }, { 688 | "id": 428, 689 | "spell": "fengjie", 690 | "name": "奉节" 691 | }, { 692 | "id": 429, 693 | "spell": "fengkai", 694 | "name": "封开" 695 | }, { 696 | "id": 430, 697 | "spell": "fengshun", 698 | "name": "丰顺" 699 | }, { 700 | "id": 431, 701 | "spell": "fengtai", 702 | "name": "凤台" 703 | }, { 704 | "id": 432, 705 | "spell": "fengxian", 706 | "name": "丰县" 707 | }, { 708 | "id": 433, 709 | "spell": "fengxin", 710 | "name": "奉新" 711 | }, { 712 | "id": 434, 713 | "spell": "fengyang", 714 | "name": "凤阳" 715 | }, { 716 | "id": 435, 717 | "spell": "fenyi", 718 | "name": "分宜" 719 | }, { 720 | "id": 436, 721 | "spell": "fogang", 722 | "name": "佛冈" 723 | }, { 724 | "id": 437, 725 | "spell": "fuan", 726 | "name": "福安" 727 | }, { 728 | "id": 438, 729 | "spell": "fuding", 730 | "name": "福鼎" 731 | }, { 732 | "id": 439, 733 | "spell": "fuliang", 734 | "name": "浮梁" 735 | }, { 736 | "id": 440, 737 | "spell": "fumin", 738 | "name": "富民" 739 | }, { 740 | "id": 441, 741 | "spell": "funan", 742 | "name": "阜南" 743 | }, { 744 | "id": 442, 745 | "spell": "funing", 746 | "name": "阜宁" 747 | }, { 748 | "id": 443, 749 | "spell": "fuqing", 750 | "name": "福清" 751 | }, { 752 | "id": 444, 753 | "spell": "fuyang", 754 | "name": "富阳" 755 | }], 756 | "G": [{ 757 | "id": 13, 758 | "spell": "guangzhou", 759 | "name": "广州" 760 | }, { 761 | "id": 14, 762 | "spell": "guiyang", 763 | "name": "贵阳" 764 | }, { 765 | "id": 119, 766 | "spell": "gannan", 767 | "name": "甘南" 768 | }, { 769 | "id": 120, 770 | "spell": "ganzhou", 771 | "name": "赣州" 772 | }, { 773 | "id": 121, 774 | "spell": "ganzi", 775 | "name": "甘孜" 776 | }, { 777 | "id": 122, 778 | "spell": "guangan", 779 | "name": "广安" 780 | }, { 781 | "id": 123, 782 | "spell": "guangyuan", 783 | "name": "广元" 784 | }, { 785 | "id": 124, 786 | "spell": "guigang", 787 | "name": "贵港" 788 | }, { 789 | "id": 125, 790 | "spell": "guilin", 791 | "name": "桂林" 792 | }, { 793 | "id": 126, 794 | "spell": "guoluo", 795 | "name": "果洛" 796 | }, { 797 | "id": 127, 798 | "spell": "guyuan", 799 | "name": "固原" 800 | }, { 801 | "id": 445, 802 | "spell": "ganxian", 803 | "name": "赣县" 804 | }, { 805 | "id": 446, 806 | "spell": "ganyu", 807 | "name": "赣榆" 808 | }, { 809 | "id": 447, 810 | "spell": "gaoan", 811 | "name": "高安" 812 | }, { 813 | "id": 448, 814 | "spell": "gaocheng", 815 | "name": "藁城" 816 | }, { 817 | "id": 449, 818 | "spell": "gaochun", 819 | "name": "高淳" 820 | }, { 821 | "id": 450, 822 | "spell": "gaolan", 823 | "name": "皋兰" 824 | }, { 825 | "id": 451, 826 | "spell": "gaoling", 827 | "name": "高陵" 828 | }, { 829 | "id": 452, 830 | "spell": "gaomi", 831 | "name": "高密" 832 | }, { 833 | "id": 453, 834 | "spell": "gaoqing", 835 | "name": "高青" 836 | }, { 837 | "id": 454, 838 | "spell": "gaotang", 839 | "name": "高唐" 840 | }, { 841 | "id": 455, 842 | "spell": "gaoyao", 843 | "name": "高要" 844 | }, { 845 | "id": 456, 846 | "spell": "gaoyi", 847 | "name": "高邑" 848 | }, { 849 | "id": 457, 850 | "spell": "gaoyou", 851 | "name": "高邮" 852 | }, { 853 | "id": 458, 854 | "spell": "gaozhou", 855 | "name": "高州" 856 | }, { 857 | "id": 459, 858 | "spell": "gongyi", 859 | "name": "巩义" 860 | }, { 861 | "id": 460, 862 | "spell": "guangchang", 863 | "name": "广昌" 864 | }, { 865 | "id": 461, 866 | "spell": "guangde", 867 | "name": "广德" 868 | }, { 869 | "id": 462, 870 | "spell": "guangfeng", 871 | "name": "广丰" 872 | }, { 873 | "id": 463, 874 | "spell": "guangning", 875 | "name": "广宁" 876 | }, { 877 | "id": 464, 878 | "spell": "guangrao", 879 | "name": "广饶" 880 | }, { 881 | "id": 465, 882 | "spell": "guangze", 883 | "name": "光泽" 884 | }, { 885 | "id": 466, 886 | "spell": "guannan", 887 | "name": "灌南" 888 | }, { 889 | "id": 467, 890 | "spell": "guanxian", 891 | "name": "冠县" 892 | }, { 893 | "id": 468, 894 | "spell": "guanyun", 895 | "name": "灌云" 896 | }, { 897 | "id": 469, 898 | "spell": "guixi", 899 | "name": "贵溪" 900 | }, { 901 | "id": 470, 902 | "spell": "gutian", 903 | "name": "古田" 904 | }, { 905 | "id": 471, 906 | "spell": "guzhen", 907 | "name": "固镇" 908 | }], 909 | "H": [{ 910 | "id": 15, 911 | "spell": "haerbin", 912 | "name": "哈尔滨" 913 | }, { 914 | "id": 16, 915 | "spell": "haikou", 916 | "name": "海口" 917 | }, { 918 | "id": 17, 919 | "spell": "handan", 920 | "name": "邯郸" 921 | }, { 922 | "id": 18, 923 | "spell": "hangzhou", 924 | "name": "杭州" 925 | }, { 926 | "id": 19, 927 | "spell": "hefei", 928 | "name": "合肥" 929 | }, { 930 | "id": 20, 931 | "spell": "huizhou", 932 | "name": "惠州" 933 | }, { 934 | "id": 128, 935 | "spell": "haibei", 936 | "name": "海北" 937 | }, { 938 | "id": 129, 939 | "spell": "haidong", 940 | "name": "海东" 941 | }, { 942 | "id": 130, 943 | "spell": "hainan", 944 | "name": "海南" 945 | }, { 946 | "id": 131, 947 | "spell": "haixi", 948 | "name": "海西" 949 | }, { 950 | "id": 132, 951 | "spell": "hami", 952 | "name": "哈密" 953 | }, { 954 | "id": 133, 955 | "spell": "hanzhong", 956 | "name": "汉中" 957 | }, { 958 | "id": 134, 959 | "spell": "hebi", 960 | "name": "鹤壁" 961 | }, { 962 | "id": 135, 963 | "spell": "hechi", 964 | "name": "河池" 965 | }, { 966 | "id": 136, 967 | "spell": "hegang", 968 | "name": "鹤岗" 969 | }, { 970 | "id": 137, 971 | "spell": "heihe", 972 | "name": "黑河" 973 | }, { 974 | "id": 138, 975 | "spell": "hengshui", 976 | "name": "衡水" 977 | }, { 978 | "id": 139, 979 | "spell": "hengyang", 980 | "name": "衡阳" 981 | }, { 982 | "id": 140, 983 | "spell": "hetiandi", 984 | "name": "和田地" 985 | }, { 986 | "id": 141, 987 | "spell": "heyuan", 988 | "name": "河源" 989 | }, { 990 | "id": 142, 991 | "spell": "heze", 992 | "name": "菏泽" 993 | }, { 994 | "id": 143, 995 | "spell": "hezhou", 996 | "name": "贺州" 997 | }, { 998 | "id": 144, 999 | "spell": "honghe", 1000 | "name": "红河" 1001 | }, { 1002 | "id": 145, 1003 | "spell": "huaian", 1004 | "name": "淮安" 1005 | }, { 1006 | "id": 146, 1007 | "spell": "huaibei", 1008 | "name": "淮北" 1009 | }, { 1010 | "id": 147, 1011 | "spell": "huaihua", 1012 | "name": "怀化" 1013 | }, { 1014 | "id": 148, 1015 | "spell": "huainan", 1016 | "name": "淮南" 1017 | }, { 1018 | "id": 149, 1019 | "spell": "huanggang", 1020 | "name": "黄冈" 1021 | }, { 1022 | "id": 150, 1023 | "spell": "huangnan", 1024 | "name": "黄南" 1025 | }, { 1026 | "id": 151, 1027 | "spell": "huangshan", 1028 | "name": "黄山" 1029 | }, { 1030 | "id": 152, 1031 | "spell": "huangshi", 1032 | "name": "黄石" 1033 | }, { 1034 | "id": 153, 1035 | "spell": "huhehaote", 1036 | "name": "呼和浩特" 1037 | }, { 1038 | "id": 154, 1039 | "spell": "huludao", 1040 | "name": "葫芦岛" 1041 | }, { 1042 | "id": 155, 1043 | "spell": "hulunbeier", 1044 | "name": "呼伦贝尔" 1045 | }, { 1046 | "id": 156, 1047 | "spell": "huzhou", 1048 | "name": "湖州" 1049 | }, { 1050 | "id": 472, 1051 | "spell": "haian", 1052 | "name": "海安" 1053 | }, { 1054 | "id": 473, 1055 | "spell": "haifeng", 1056 | "name": "海丰" 1057 | }, { 1058 | "id": 474, 1059 | "spell": "haimen", 1060 | "name": "海门" 1061 | }, { 1062 | "id": 475, 1063 | "spell": "haining", 1064 | "name": "海宁" 1065 | }, { 1066 | "id": 476, 1067 | "spell": "haiyan", 1068 | "name": "海盐" 1069 | }, { 1070 | "id": 477, 1071 | "spell": "haiyang", 1072 | "name": "海阳" 1073 | }, { 1074 | "id": 478, 1075 | "spell": "hanshan", 1076 | "name": "含山" 1077 | }, { 1078 | "id": 479, 1079 | "spell": "hechuan", 1080 | "name": "合川" 1081 | }, { 1082 | "id": 480, 1083 | "spell": "hengfeng", 1084 | "name": "横峰" 1085 | }, { 1086 | "id": 481, 1087 | "spell": "hengxian", 1088 | "name": "横县" 1089 | }, { 1090 | "id": 482, 1091 | "spell": "heping", 1092 | "name": "和平" 1093 | }, { 1094 | "id": 483, 1095 | "spell": "heshan", 1096 | "name": "鹤山" 1097 | }, { 1098 | "id": 484, 1099 | "spell": "hexian", 1100 | "name": "和县" 1101 | }, { 1102 | "id": 485, 1103 | "spell": "hongze", 1104 | "name": "洪泽" 1105 | }, { 1106 | "id": 486, 1107 | "spell": "huaan", 1108 | "name": "华安" 1109 | }, { 1110 | "id": 487, 1111 | "spell": "huadian", 1112 | "name": "桦甸" 1113 | }, { 1114 | "id": 488, 1115 | "spell": "huaiji", 1116 | "name": "怀集" 1117 | }, { 1118 | "id": 489, 1119 | "spell": "huaining", 1120 | "name": "怀宁" 1121 | }, { 1122 | "id": 490, 1123 | "spell": "huaiyuan", 1124 | "name": "怀远" 1125 | }, { 1126 | "id": 491, 1127 | "spell": "huantai", 1128 | "name": "桓台" 1129 | }, { 1130 | "id": 492, 1131 | "spell": "huazhou", 1132 | "name": "化州" 1133 | }, { 1134 | "id": 493, 1135 | "spell": "huian", 1136 | "name": "惠安" 1137 | }, { 1138 | "id": 494, 1139 | "spell": "huichang", 1140 | "name": "会昌" 1141 | }, { 1142 | "id": 495, 1143 | "spell": "huidong", 1144 | "name": "惠东" 1145 | }, { 1146 | "id": 496, 1147 | "spell": "huilai", 1148 | "name": "惠来" 1149 | }, { 1150 | "id": 497, 1151 | "spell": "huimin", 1152 | "name": "惠民" 1153 | }, { 1154 | "id": 498, 1155 | "spell": "hukou", 1156 | "name": "湖口" 1157 | }, { 1158 | "id": 499, 1159 | "spell": "hulan", 1160 | "name": "呼兰" 1161 | }, { 1162 | "id": 500, 1163 | "spell": "huoqiu", 1164 | "name": "霍邱" 1165 | }, { 1166 | "id": 501, 1167 | "spell": "huoshan", 1168 | "name": "霍山" 1169 | }, { 1170 | "id": 502, 1171 | "spell": "huxian", 1172 | "name": "户县" 1173 | }], 1174 | "J": [{ 1175 | "id": 21, 1176 | "spell": "jiaozuo", 1177 | "name": "焦作" 1178 | }, { 1179 | "id": 22, 1180 | "spell": "jiaxing", 1181 | "name": "嘉兴" 1182 | }, { 1183 | "id": 23, 1184 | "spell": "jilin", 1185 | "name": "吉林" 1186 | }, { 1187 | "id": 24, 1188 | "spell": "jinan", 1189 | "name": "济南" 1190 | }, { 1191 | "id": 157, 1192 | "spell": "jiamusi", 1193 | "name": "佳木斯" 1194 | }, { 1195 | "id": 158, 1196 | "spell": "jiangmen", 1197 | "name": "江门" 1198 | }, { 1199 | "id": 159, 1200 | "spell": "jian", 1201 | "name": "吉安" 1202 | }, { 1203 | "id": 160, 1204 | "spell": "jiayuguan", 1205 | "name": "嘉峪关" 1206 | }, { 1207 | "id": 161, 1208 | "spell": "jieyang", 1209 | "name": "揭阳" 1210 | }, { 1211 | "id": 162, 1212 | "spell": "jinchang", 1213 | "name": "金昌" 1214 | }, { 1215 | "id": 163, 1216 | "spell": "jincheng", 1217 | "name": "晋城" 1218 | }, { 1219 | "id": 164, 1220 | "spell": "jingdezhen", 1221 | "name": "景德镇" 1222 | }, { 1223 | "id": 165, 1224 | "spell": "jingmen", 1225 | "name": "荆门" 1226 | }, { 1227 | "id": 166, 1228 | "spell": "jingzhou", 1229 | "name": "荆州" 1230 | }, { 1231 | "id": 167, 1232 | "spell": "jinhua", 1233 | "name": "金华" 1234 | }, { 1235 | "id": 168, 1236 | "spell": "jining", 1237 | "name": "济宁" 1238 | }, { 1239 | "id": 169, 1240 | "spell": "jinzhong", 1241 | "name": "晋中" 1242 | }, { 1243 | "id": 170, 1244 | "spell": "jinzhou", 1245 | "name": "锦州" 1246 | }, { 1247 | "id": 171, 1248 | "spell": "jiujiang", 1249 | "name": "九江" 1250 | }, { 1251 | "id": 172, 1252 | "spell": "jiuquan", 1253 | "name": "酒泉" 1254 | }, { 1255 | "id": 173, 1256 | "spell": "jixi", 1257 | "name": "鸡西" 1258 | }, { 1259 | "id": 503, 1260 | "spell": "jiande", 1261 | "name": "建德" 1262 | }, { 1263 | "id": 504, 1264 | "spell": "jiangdu", 1265 | "name": "江都" 1266 | }, { 1267 | "id": 505, 1268 | "spell": "jiangjin", 1269 | "name": "江津" 1270 | }, { 1271 | "id": 506, 1272 | "spell": "jiangle", 1273 | "name": "将乐" 1274 | }, { 1275 | "id": 507, 1276 | "spell": "jiangshan", 1277 | "name": "江山" 1278 | }, { 1279 | "id": 508, 1280 | "spell": "jiangyan", 1281 | "name": "姜堰" 1282 | }, { 1283 | "id": 509, 1284 | "spell": "jiangyin", 1285 | "name": "江阴" 1286 | }, { 1287 | "id": 510, 1288 | "spell": "jianhu", 1289 | "name": "建湖" 1290 | }, { 1291 | "id": 511, 1292 | "spell": "jianning", 1293 | "name": "建宁" 1294 | }, { 1295 | "id": 512, 1296 | "spell": "jianou", 1297 | "name": "建瓯" 1298 | }, { 1299 | "id": 513, 1300 | "spell": "jianyang", 1301 | "name": "建阳" 1302 | }, { 1303 | "id": 514, 1304 | "spell": "jian", 1305 | "name": "吉安" 1306 | }, { 1307 | "id": 515, 1308 | "spell": "jiaohe", 1309 | "name": "蛟河" 1310 | }, { 1311 | "id": 516, 1312 | "spell": "jiaoling", 1313 | "name": "蕉岭" 1314 | }, { 1315 | "id": 517, 1316 | "spell": "jiaonan", 1317 | "name": "胶南" 1318 | }, { 1319 | "id": 518, 1320 | "spell": "jiaozhou", 1321 | "name": "胶州" 1322 | }, { 1323 | "id": 519, 1324 | "spell": "jiashan", 1325 | "name": "嘉善" 1326 | }, { 1327 | "id": 520, 1328 | "spell": "jiaxiang", 1329 | "name": "嘉祥" 1330 | }, { 1331 | "id": 521, 1332 | "spell": "jiedong", 1333 | "name": "揭东" 1334 | }, { 1335 | "id": 522, 1336 | "spell": "jieshou", 1337 | "name": "界首" 1338 | }, { 1339 | "id": 523, 1340 | "spell": "jiexi", 1341 | "name": "揭西" 1342 | }, { 1343 | "id": 524, 1344 | "spell": "jimo", 1345 | "name": "即墨" 1346 | }, { 1347 | "id": 525, 1348 | "spell": "jingan", 1349 | "name": "靖安" 1350 | }, { 1351 | "id": 526, 1352 | "spell": "jingde", 1353 | "name": "旌德" 1354 | }, { 1355 | "id": 527, 1356 | "spell": "jinggangshan", 1357 | "name": "井冈山" 1358 | }, { 1359 | "id": 528, 1360 | "spell": "jingjiang", 1361 | "name": "靖江" 1362 | }, { 1363 | "id": 529, 1364 | "spell": "jingning", 1365 | "name": "景宁" 1366 | }, { 1367 | "id": 530, 1368 | "spell": "jingxian", 1369 | "name": "泾县" 1370 | }, { 1371 | "id": 531, 1372 | "spell": "jingxing", 1373 | "name": "井陉" 1374 | }, { 1375 | "id": 532, 1376 | "spell": "jinhu", 1377 | "name": "金湖" 1378 | }, { 1379 | "id": 533, 1380 | "spell": "jinjiang", 1381 | "name": "晋江" 1382 | }, { 1383 | "id": 534, 1384 | "spell": "jinmen", 1385 | "name": "金门" 1386 | }, { 1387 | "id": 535, 1388 | "spell": "jinning", 1389 | "name": "晋宁" 1390 | }, { 1391 | "id": 536, 1392 | "spell": "jintan", 1393 | "name": "金坛" 1394 | }, { 1395 | "id": 537, 1396 | "spell": "jintang", 1397 | "name": "金堂" 1398 | }, { 1399 | "id": 538, 1400 | "spell": "jinxian", 1401 | "name": "进贤" 1402 | }, { 1403 | "id": 539, 1404 | "spell": "jinxi", 1405 | "name": "金溪" 1406 | }, { 1407 | "id": 540, 1408 | "spell": "jinxiang", 1409 | "name": "金乡" 1410 | }, { 1411 | "id": 541, 1412 | "spell": "jinyun", 1413 | "name": "缙云" 1414 | }, { 1415 | "id": 542, 1416 | "spell": "jinzhai", 1417 | "name": "金寨" 1418 | }, { 1419 | "id": 543, 1420 | "spell": "jinzhou", 1421 | "name": "晋州" 1422 | }, { 1423 | "id": 544, 1424 | "spell": "jishui", 1425 | "name": "吉水" 1426 | }, { 1427 | "id": 545, 1428 | "spell": "jiujiang", 1429 | "name": "九江" 1430 | }, { 1431 | "id": 546, 1432 | "spell": "jiutai", 1433 | "name": "九台" 1434 | }, { 1435 | "id": 547, 1436 | "spell": "jixi", 1437 | "name": "绩溪" 1438 | }, { 1439 | "id": 548, 1440 | "spell": "jiyang", 1441 | "name": "济阳" 1442 | }, { 1443 | "id": 549, 1444 | "spell": "jiyuan", 1445 | "name": "济源" 1446 | }, { 1447 | "id": 550, 1448 | "spell": "juancheng", 1449 | "name": "鄄城" 1450 | }, { 1451 | "id": 551, 1452 | "spell": "junan", 1453 | "name": "莒南" 1454 | }, { 1455 | "id": 552, 1456 | "spell": "jurong", 1457 | "name": "句容" 1458 | }, { 1459 | "id": 553, 1460 | "spell": "juxian", 1461 | "name": "莒县" 1462 | }, { 1463 | "id": 554, 1464 | "spell": "juye", 1465 | "name": "巨野" 1466 | }], 1467 | "K": [{ 1468 | "id": 25, 1469 | "spell": "kunming", 1470 | "name": "昆明" 1471 | }, { 1472 | "id": 174, 1473 | "spell": "kaifeng", 1474 | "name": "开封" 1475 | }, { 1476 | "id": 175, 1477 | "spell": "kashidi", 1478 | "name": "喀什地" 1479 | }, { 1480 | "id": 176, 1481 | "spell": "kelamayi", 1482 | "name": "克拉玛依" 1483 | }, { 1484 | "id": 177, 1485 | "spell": "kezile", 1486 | "name": "克孜勒" 1487 | }, { 1488 | "id": 555, 1489 | "spell": "kaihua", 1490 | "name": "开化" 1491 | }, { 1492 | "id": 556, 1493 | "spell": "kaiping", 1494 | "name": "开平" 1495 | }, { 1496 | "id": 557, 1497 | "spell": "kaixian", 1498 | "name": "开县" 1499 | }, { 1500 | "id": 558, 1501 | "spell": "kaiyang", 1502 | "name": "开阳" 1503 | }, { 1504 | "id": 559, 1505 | "spell": "kangping", 1506 | "name": "康平" 1507 | }, { 1508 | "id": 560, 1509 | "spell": "kenli", 1510 | "name": "垦利" 1511 | }, { 1512 | "id": 561, 1513 | "spell": "kunshan", 1514 | "name": "昆山" 1515 | }], 1516 | "L": [{ 1517 | "id": 26, 1518 | "spell": "lanzhou", 1519 | "name": "兰州" 1520 | }, { 1521 | "id": 27, 1522 | "spell": "liuzhou", 1523 | "name": "柳州" 1524 | }, { 1525 | "id": 28, 1526 | "spell": "luoyang", 1527 | "name": "洛阳" 1528 | }, { 1529 | "id": 178, 1530 | "spell": "laibin", 1531 | "name": "来宾" 1532 | }, { 1533 | "id": 179, 1534 | "spell": "laiwu", 1535 | "name": "莱芜" 1536 | }, { 1537 | "id": 180, 1538 | "spell": "langfang", 1539 | "name": "廊坊" 1540 | }, { 1541 | "id": 181, 1542 | "spell": "lasa", 1543 | "name": "拉萨" 1544 | }, { 1545 | "id": 182, 1546 | "spell": "leshan", 1547 | "name": "乐山" 1548 | }, { 1549 | "id": 183, 1550 | "spell": "liangshan", 1551 | "name": "凉山" 1552 | }, { 1553 | "id": 184, 1554 | "spell": "lianyungang", 1555 | "name": "连云港" 1556 | }, { 1557 | "id": 185, 1558 | "spell": "liaocheng", 1559 | "name": "聊城" 1560 | }, { 1561 | "id": 186, 1562 | "spell": "liaoyang", 1563 | "name": "辽阳" 1564 | }, { 1565 | "id": 187, 1566 | "spell": "liaoyuan", 1567 | "name": "辽源" 1568 | }, { 1569 | "id": 188, 1570 | "spell": "lijiang", 1571 | "name": "丽江" 1572 | }, { 1573 | "id": 189, 1574 | "spell": "lincang", 1575 | "name": "临沧" 1576 | }, { 1577 | "id": 190, 1578 | "spell": "linfen", 1579 | "name": "临汾" 1580 | }, { 1581 | "id": 191, 1582 | "spell": "linxia", 1583 | "name": "临夏" 1584 | }, { 1585 | "id": 192, 1586 | "spell": "linyi", 1587 | "name": "临沂" 1588 | }, { 1589 | "id": 193, 1590 | "spell": "linzhi", 1591 | "name": "林芝" 1592 | }, { 1593 | "id": 194, 1594 | "spell": "lishui", 1595 | "name": "丽水" 1596 | }, { 1597 | "id": 195, 1598 | "spell": "liuan", 1599 | "name": "六安" 1600 | }, { 1601 | "id": 196, 1602 | "spell": "liupanshui", 1603 | "name": "六盘水" 1604 | }, { 1605 | "id": 197, 1606 | "spell": "longnan", 1607 | "name": "陇南" 1608 | }, { 1609 | "id": 198, 1610 | "spell": "longyan", 1611 | "name": "龙岩" 1612 | }, { 1613 | "id": 199, 1614 | "spell": "loudi", 1615 | "name": "娄底" 1616 | }, { 1617 | "id": 200, 1618 | "spell": "luohe", 1619 | "name": "漯河" 1620 | }, { 1621 | "id": 201, 1622 | "spell": "luzhou", 1623 | "name": "泸州" 1624 | }, { 1625 | "id": 202, 1626 | "spell": "lvliang", 1627 | "name": "吕梁" 1628 | }, { 1629 | "id": 562, 1630 | "spell": "laian", 1631 | "name": "来安" 1632 | }, { 1633 | "id": 563, 1634 | "spell": "laixi", 1635 | "name": "莱西" 1636 | }, { 1637 | "id": 564, 1638 | "spell": "laiyang", 1639 | "name": "莱阳" 1640 | }, { 1641 | "id": 565, 1642 | "spell": "laizhou", 1643 | "name": "莱州" 1644 | }, { 1645 | "id": 566, 1646 | "spell": "langxi", 1647 | "name": "郎溪" 1648 | }, { 1649 | "id": 567, 1650 | "spell": "lantian", 1651 | "name": "蓝田" 1652 | }, { 1653 | "id": 568, 1654 | "spell": "lanxi", 1655 | "name": "兰溪" 1656 | }, { 1657 | "id": 569, 1658 | "spell": "lean", 1659 | "name": "乐安" 1660 | }, { 1661 | "id": 570, 1662 | "spell": "lechang", 1663 | "name": "乐昌" 1664 | }, { 1665 | "id": 571, 1666 | "spell": "leizhou", 1667 | "name": "雷州" 1668 | }, { 1669 | "id": 572, 1670 | "spell": "leling", 1671 | "name": "乐陵" 1672 | }, { 1673 | "id": 573, 1674 | "spell": "leping", 1675 | "name": "乐平" 1676 | }, { 1677 | "id": 574, 1678 | "spell": "leqing", 1679 | "name": "乐清" 1680 | }, { 1681 | "id": 575, 1682 | "spell": "leting", 1683 | "name": "乐亭" 1684 | }, { 1685 | "id": 576, 1686 | "spell": "liancheng", 1687 | "name": "连城" 1688 | }, { 1689 | "id": 577, 1690 | "spell": "liangping", 1691 | "name": "梁平" 1692 | }, { 1693 | "id": 578, 1694 | "spell": "liangshan", 1695 | "name": "梁山" 1696 | }, { 1697 | "id": 579, 1698 | "spell": "lianhua", 1699 | "name": "莲花" 1700 | }, { 1701 | "id": 580, 1702 | "spell": "lianjiang", 1703 | "name": "连江" 1704 | }, { 1705 | "id": 581, 1706 | "spell": "lianjiang", 1707 | "name": "廉江" 1708 | }, { 1709 | "id": 582, 1710 | "spell": "liannan", 1711 | "name": "连南" 1712 | }, { 1713 | "id": 583, 1714 | "spell": "lianping", 1715 | "name": "连平" 1716 | }, { 1717 | "id": 584, 1718 | "spell": "lianshan", 1719 | "name": "连山" 1720 | }, { 1721 | "id": 585, 1722 | "spell": "lianshui", 1723 | "name": "涟水" 1724 | }, { 1725 | "id": 586, 1726 | "spell": "lianzhou", 1727 | "name": "连州" 1728 | }, { 1729 | "id": 587, 1730 | "spell": "liaozhong", 1731 | "name": "辽中" 1732 | }, { 1733 | "id": 588, 1734 | "spell": "lichuan", 1735 | "name": "黎川" 1736 | }, { 1737 | "id": 589, 1738 | "spell": "lijin", 1739 | "name": "利津" 1740 | }, { 1741 | "id": 590, 1742 | "spell": "linan", 1743 | "name": "临安" 1744 | }, { 1745 | "id": 591, 1746 | "spell": "lingbi", 1747 | "name": "灵璧" 1748 | }, { 1749 | "id": 592, 1750 | "spell": "lingshou", 1751 | "name": "灵寿" 1752 | }, { 1753 | "id": 593, 1754 | "spell": "lingxian", 1755 | "name": "陵县" 1756 | }, { 1757 | "id": 594, 1758 | "spell": "linhai", 1759 | "name": "临海" 1760 | }, { 1761 | "id": 595, 1762 | "spell": "linqing", 1763 | "name": "临清" 1764 | }, { 1765 | "id": 596, 1766 | "spell": "linquan", 1767 | "name": "临泉" 1768 | }, { 1769 | "id": 597, 1770 | "spell": "linqu", 1771 | "name": "临朐" 1772 | }, { 1773 | "id": 598, 1774 | "spell": "linshu", 1775 | "name": "临沭" 1776 | }, { 1777 | "id": 599, 1778 | "spell": "linyi", 1779 | "name": "临邑" 1780 | }, { 1781 | "id": 600, 1782 | "spell": "lishui", 1783 | "name": "溧水" 1784 | }, { 1785 | "id": 601, 1786 | "spell": "liucheng", 1787 | "name": "柳城" 1788 | }, { 1789 | "id": 602, 1790 | "spell": "liujiang", 1791 | "name": "柳江" 1792 | }, { 1793 | "id": 603, 1794 | "spell": "liuyang", 1795 | "name": "浏阳" 1796 | }, { 1797 | "id": 604, 1798 | "spell": "lixin", 1799 | "name": "利辛" 1800 | }, { 1801 | "id": 605, 1802 | "spell": "liyang", 1803 | "name": "溧阳" 1804 | }, { 1805 | "id": 606, 1806 | "spell": "longan", 1807 | "name": "隆安" 1808 | }, { 1809 | "id": 607, 1810 | "spell": "longchuan", 1811 | "name": "龙川" 1812 | }, { 1813 | "id": 608, 1814 | "spell": "longhai", 1815 | "name": "龙海" 1816 | }, { 1817 | "id": 609, 1818 | "spell": "longkou", 1819 | "name": "龙口" 1820 | }, { 1821 | "id": 610, 1822 | "spell": "longmen", 1823 | "name": "龙门" 1824 | }, { 1825 | "id": 611, 1826 | "spell": "longnan", 1827 | "name": "龙南" 1828 | }, { 1829 | "id": 612, 1830 | "spell": "longquan", 1831 | "name": "龙泉" 1832 | }, { 1833 | "id": 613, 1834 | "spell": "longyou", 1835 | "name": "龙游" 1836 | }, { 1837 | "id": 614, 1838 | "spell": "luancheng", 1839 | "name": "栾城" 1840 | }, { 1841 | "id": 615, 1842 | "spell": "luanchuan", 1843 | "name": "栾川" 1844 | }, { 1845 | "id": 616, 1846 | "spell": "luannan", 1847 | "name": "滦南" 1848 | }, { 1849 | "id": 617, 1850 | "spell": "luanxian", 1851 | "name": "滦县" 1852 | }, { 1853 | "id": 618, 1854 | "spell": "lufeng", 1855 | "name": "陆丰" 1856 | }, { 1857 | "id": 619, 1858 | "spell": "luhe", 1859 | "name": "陆河" 1860 | }, { 1861 | "id": 620, 1862 | "spell": "lujiang", 1863 | "name": "庐江" 1864 | }, { 1865 | "id": 621, 1866 | "spell": "luoding", 1867 | "name": "罗定" 1868 | }, { 1869 | "id": 622, 1870 | "spell": "luoning", 1871 | "name": "洛宁" 1872 | }, { 1873 | "id": 623, 1874 | "spell": "luoyuan", 1875 | "name": "罗源" 1876 | }, { 1877 | "id": 624, 1878 | "spell": "luquan", 1879 | "name": "鹿泉" 1880 | }, { 1881 | "id": 625, 1882 | "spell": "luquan", 1883 | "name": "禄劝" 1884 | }, { 1885 | "id": 626, 1886 | "spell": "luxi", 1887 | "name": "芦溪" 1888 | }, { 1889 | "id": 627, 1890 | "spell": "luzhai", 1891 | "name": "鹿寨" 1892 | }], 1893 | "M": [{ 1894 | "id": 203, 1895 | "spell": "maanshan", 1896 | "name": "马鞍山" 1897 | }, { 1898 | "id": 204, 1899 | "spell": "maoming", 1900 | "name": "茂名" 1901 | }, { 1902 | "id": 205, 1903 | "spell": "meishan", 1904 | "name": "眉山" 1905 | }, { 1906 | "id": 206, 1907 | "spell": "meizhou", 1908 | "name": "梅州" 1909 | }, { 1910 | "id": 207, 1911 | "spell": "mianyang", 1912 | "name": "绵阳" 1913 | }, { 1914 | "id": 208, 1915 | "spell": "mudanjiang", 1916 | "name": "牡丹江" 1917 | }, { 1918 | "id": 628, 1919 | "spell": "mashan", 1920 | "name": "马山" 1921 | }, { 1922 | "id": 629, 1923 | "spell": "meixian", 1924 | "name": "梅县" 1925 | }, { 1926 | "id": 630, 1927 | "spell": "mengcheng", 1928 | "name": "蒙城" 1929 | }, { 1930 | "id": 631, 1931 | "spell": "mengjin", 1932 | "name": "孟津" 1933 | }, { 1934 | "id": 632, 1935 | "spell": "mengyin", 1936 | "name": "蒙阴" 1937 | }, { 1938 | "id": 633, 1939 | "spell": "mengzhou", 1940 | "name": "孟州" 1941 | }, { 1942 | "id": 634, 1943 | "spell": "mingguang", 1944 | "name": "明光" 1945 | }, { 1946 | "id": 635, 1947 | "spell": "mingxi", 1948 | "name": "明溪" 1949 | }, { 1950 | "id": 636, 1951 | "spell": "minhou", 1952 | "name": "闽侯" 1953 | }, { 1954 | "id": 637, 1955 | "spell": "minqing", 1956 | "name": "闽清" 1957 | }, { 1958 | "id": 638, 1959 | "spell": "mulan", 1960 | "name": "木兰" 1961 | }], 1962 | "N": [{ 1963 | "id": 29, 1964 | "spell": "nanchang", 1965 | "name": "南昌" 1966 | }, { 1967 | "id": 30, 1968 | "spell": "nanjing", 1969 | "name": "南京" 1970 | }, { 1971 | "id": 31, 1972 | "spell": "nanning", 1973 | "name": "南宁" 1974 | }, { 1975 | "id": 32, 1976 | "spell": "nantong", 1977 | "name": "南通" 1978 | }, { 1979 | "id": 33, 1980 | "spell": "ningbo", 1981 | "name": "宁波" 1982 | }, { 1983 | "id": 209, 1984 | "spell": "nanchong", 1985 | "name": "南充" 1986 | }, { 1987 | "id": 210, 1988 | "spell": "nanping", 1989 | "name": "南平" 1990 | }, { 1991 | "id": 211, 1992 | "spell": "nanyang", 1993 | "name": "南阳" 1994 | }, { 1995 | "id": 212, 1996 | "spell": "naqu", 1997 | "name": "那曲" 1998 | }, { 1999 | "id": 213, 2000 | "spell": "neijiang", 2001 | "name": "内江" 2002 | }, { 2003 | "id": 214, 2004 | "spell": "ningde", 2005 | "name": "宁德" 2006 | }, { 2007 | "id": 215, 2008 | "spell": "nujiang", 2009 | "name": "怒江" 2010 | }, { 2011 | "id": 639, 2012 | "spell": "nanan", 2013 | "name": "南安" 2014 | }, { 2015 | "id": 640, 2016 | "spell": "nanao", 2017 | "name": "南澳" 2018 | }, { 2019 | "id": 641, 2020 | "spell": "nancheng", 2021 | "name": "南城" 2022 | }, { 2023 | "id": 642, 2024 | "spell": "nanchuan", 2025 | "name": "南川" 2026 | }, { 2027 | "id": 643, 2028 | "spell": "nanfeng", 2029 | "name": "南丰" 2030 | }, { 2031 | "id": 644, 2032 | "spell": "nanjing", 2033 | "name": "南靖" 2034 | }, { 2035 | "id": 645, 2036 | "spell": "nankang", 2037 | "name": "南康" 2038 | }, { 2039 | "id": 646, 2040 | "spell": "nanling", 2041 | "name": "南陵" 2042 | }, { 2043 | "id": 647, 2044 | "spell": "nanxiong", 2045 | "name": "南雄" 2046 | }, { 2047 | "id": 648, 2048 | "spell": "ningdu", 2049 | "name": "宁都" 2050 | }, { 2051 | "id": 649, 2052 | "spell": "ningguo", 2053 | "name": "宁国" 2054 | }, { 2055 | "id": 650, 2056 | "spell": "ninghai", 2057 | "name": "宁海" 2058 | }, { 2059 | "id": 651, 2060 | "spell": "ninghua", 2061 | "name": "宁化" 2062 | }, { 2063 | "id": 652, 2064 | "spell": "ningjin", 2065 | "name": "宁津" 2066 | }, { 2067 | "id": 653, 2068 | "spell": "ningxiang", 2069 | "name": "宁乡" 2070 | }, { 2071 | "id": 654, 2072 | "spell": "ningyang", 2073 | "name": "宁阳" 2074 | }, { 2075 | "id": 655, 2076 | "spell": "nongan", 2077 | "name": "农安" 2078 | }], 2079 | "P": [{ 2080 | "id": 216, 2081 | "spell": "panjin", 2082 | "name": "盘锦" 2083 | }, { 2084 | "id": 217, 2085 | "spell": "panzhihua", 2086 | "name": "攀枝花" 2087 | }, { 2088 | "id": 218, 2089 | "spell": "pingdingshan", 2090 | "name": "平顶山" 2091 | }, { 2092 | "id": 219, 2093 | "spell": "pingliang", 2094 | "name": "平凉" 2095 | }, { 2096 | "id": 220, 2097 | "spell": "pingxiang", 2098 | "name": "萍乡" 2099 | }, { 2100 | "id": 221, 2101 | "spell": "puer", 2102 | "name": "普洱" 2103 | }, { 2104 | "id": 222, 2105 | "spell": "putian", 2106 | "name": "莆田" 2107 | }, { 2108 | "id": 223, 2109 | "spell": "puyang", 2110 | "name": "濮阳" 2111 | }, { 2112 | "id": 656, 2113 | "spell": "panan", 2114 | "name": "磐安" 2115 | }, { 2116 | "id": 657, 2117 | "spell": "panshi", 2118 | "name": "磐石" 2119 | }, { 2120 | "id": 658, 2121 | "spell": "peixian", 2122 | "name": "沛县" 2123 | }, { 2124 | "id": 659, 2125 | "spell": "penglai", 2126 | "name": "蓬莱" 2127 | }, { 2128 | "id": 660, 2129 | "spell": "pengshui", 2130 | "name": "彭水" 2131 | }, { 2132 | "id": 661, 2133 | "spell": "pengze", 2134 | "name": "彭泽" 2135 | }, { 2136 | "id": 662, 2137 | "spell": "pengzhou", 2138 | "name": "彭州" 2139 | }, { 2140 | "id": 663, 2141 | "spell": "pingdu", 2142 | "name": "平度" 2143 | }, { 2144 | "id": 664, 2145 | "spell": "pinghe", 2146 | "name": "平和" 2147 | }, { 2148 | "id": 665, 2149 | "spell": "pinghu", 2150 | "name": "平湖" 2151 | }, { 2152 | "id": 666, 2153 | "spell": "pingnan", 2154 | "name": "屏南" 2155 | }, { 2156 | "id": 667, 2157 | "spell": "pingshan", 2158 | "name": "平山" 2159 | }, { 2160 | "id": 668, 2161 | "spell": "pingtan", 2162 | "name": "平潭" 2163 | }, { 2164 | "id": 669, 2165 | "spell": "pingyang", 2166 | "name": "平阳" 2167 | }, { 2168 | "id": 670, 2169 | "spell": "pingyin", 2170 | "name": "平阴" 2171 | }, { 2172 | "id": 671, 2173 | "spell": "pingyi", 2174 | "name": "平邑" 2175 | }, { 2176 | "id": 672, 2177 | "spell": "pingyuan", 2178 | "name": "平原" 2179 | }, { 2180 | "id": 673, 2181 | "spell": "pingyuan", 2182 | "name": "平远" 2183 | }, { 2184 | "id": 674, 2185 | "spell": "pixian", 2186 | "name": "郫县" 2187 | }, { 2188 | "id": 675, 2189 | "spell": "pizhou", 2190 | "name": "邳州" 2191 | }, { 2192 | "id": 676, 2193 | "spell": "poyang", 2194 | "name": "鄱阳" 2195 | }, { 2196 | "id": 677, 2197 | "spell": "pucheng", 2198 | "name": "浦城" 2199 | }, { 2200 | "id": 678, 2201 | "spell": "pujiang", 2202 | "name": "浦江" 2203 | }, { 2204 | "id": 679, 2205 | "spell": "pujiang", 2206 | "name": "蒲江" 2207 | }, { 2208 | "id": 680, 2209 | "spell": "pulandian", 2210 | "name": "普兰店" 2211 | }, { 2212 | "id": 681, 2213 | "spell": "puning", 2214 | "name": "普宁" 2215 | }], 2216 | "Q": [{ 2217 | "id": 34, 2218 | "spell": "qingdao", 2219 | "name": "青岛" 2220 | }, { 2221 | "id": 35, 2222 | "spell": "quanzhou", 2223 | "name": "泉州" 2224 | }, { 2225 | "id": 224, 2226 | "spell": "qiandong", 2227 | "name": "黔东" 2228 | }, { 2229 | "id": 225, 2230 | "spell": "qiannan", 2231 | "name": "黔南" 2232 | }, { 2233 | "id": 226, 2234 | "spell": "qianxinan", 2235 | "name": "黔西南" 2236 | }, { 2237 | "id": 227, 2238 | "spell": "qingyang", 2239 | "name": "庆阳" 2240 | }, { 2241 | "id": 228, 2242 | "spell": "qingyuan", 2243 | "name": "清远" 2244 | }, { 2245 | "id": 229, 2246 | "spell": "qinhuangdao", 2247 | "name": "秦皇岛" 2248 | }, { 2249 | "id": 230, 2250 | "spell": "qinzhou", 2251 | "name": "钦州" 2252 | }, { 2253 | "id": 231, 2254 | "spell": "qiqihaer", 2255 | "name": "齐齐哈尔" 2256 | }, { 2257 | "id": 232, 2258 | "spell": "qitaihe", 2259 | "name": "七台河" 2260 | }, { 2261 | "id": 233, 2262 | "spell": "qujing", 2263 | "name": "曲靖" 2264 | }, { 2265 | "id": 234, 2266 | "spell": "quzhou", 2267 | "name": "衢州" 2268 | }, { 2269 | "id": 682, 2270 | "spell": "qianan", 2271 | "name": "迁安" 2272 | }, { 2273 | "id": 683, 2274 | "spell": "qianshan", 2275 | "name": "潜山" 2276 | }, { 2277 | "id": 684, 2278 | "spell": "qianshan", 2279 | "name": "铅山" 2280 | }, { 2281 | "id": 685, 2282 | "spell": "qianxi", 2283 | "name": "迁西" 2284 | }, { 2285 | "id": 686, 2286 | "spell": "qidong", 2287 | "name": "启东" 2288 | }, { 2289 | "id": 687, 2290 | "spell": "qihe", 2291 | "name": "齐河" 2292 | }, { 2293 | "id": 688, 2294 | "spell": "qijiang", 2295 | "name": "綦江" 2296 | }, { 2297 | "id": 689, 2298 | "spell": "qimen", 2299 | "name": "祁门" 2300 | }, { 2301 | "id": 690, 2302 | "spell": "qingliu", 2303 | "name": "清流" 2304 | }, { 2305 | "id": 691, 2306 | "spell": "qingtian", 2307 | "name": "青田" 2308 | }, { 2309 | "id": 692, 2310 | "spell": "qingxin", 2311 | "name": "清新" 2312 | }, { 2313 | "id": 693, 2314 | "spell": "qingyang", 2315 | "name": "青阳" 2316 | }, { 2317 | "id": 694, 2318 | "spell": "qingyuan", 2319 | "name": "庆元" 2320 | }, { 2321 | "id": 695, 2322 | "spell": "qingyun", 2323 | "name": "庆云" 2324 | }, { 2325 | "id": 696, 2326 | "spell": "qingzhen", 2327 | "name": "清镇" 2328 | }, { 2329 | "id": 697, 2330 | "spell": "qingzhou", 2331 | "name": "青州" 2332 | }, { 2333 | "id": 698, 2334 | "spell": "qinyang", 2335 | "name": "沁阳" 2336 | }, { 2337 | "id": 699, 2338 | "spell": "qionglai", 2339 | "name": "邛崃" 2340 | }, { 2341 | "id": 700, 2342 | "spell": "qixia", 2343 | "name": "栖霞" 2344 | }, { 2345 | "id": 701, 2346 | "spell": "quanjiao", 2347 | "name": "全椒" 2348 | }, { 2349 | "id": 702, 2350 | "spell": "quannan", 2351 | "name": "全南" 2352 | }, { 2353 | "id": 703, 2354 | "spell": "qufu", 2355 | "name": "曲阜" 2356 | }, { 2357 | "id": 704, 2358 | "spell": "qujiang", 2359 | "name": "曲江" 2360 | }], 2361 | "R": [{ 2362 | "id": 235, 2363 | "spell": "rikaze", 2364 | "name": "日喀则" 2365 | }, { 2366 | "id": 236, 2367 | "spell": "rizhao", 2368 | "name": "日照" 2369 | }, { 2370 | "id": 705, 2371 | "spell": "raoping", 2372 | "name": "饶平" 2373 | }, { 2374 | "id": 706, 2375 | "spell": "renhua", 2376 | "name": "仁化" 2377 | }, { 2378 | "id": 707, 2379 | "spell": "rongan", 2380 | "name": "融安" 2381 | }, { 2382 | "id": 708, 2383 | "spell": "rongchang", 2384 | "name": "荣昌" 2385 | }, { 2386 | "id": 709, 2387 | "spell": "rongcheng", 2388 | "name": "荣成" 2389 | }, { 2390 | "id": 710, 2391 | "spell": "rongshui", 2392 | "name": "融水" 2393 | }, { 2394 | "id": 711, 2395 | "spell": "rudong", 2396 | "name": "如东" 2397 | }, { 2398 | "id": 712, 2399 | "spell": "rugao", 2400 | "name": "如皋" 2401 | }, { 2402 | "id": 713, 2403 | "spell": "ruian", 2404 | "name": "瑞安" 2405 | }, { 2406 | "id": 714, 2407 | "spell": "ruichang", 2408 | "name": "瑞昌" 2409 | }, { 2410 | "id": 715, 2411 | "spell": "ruijin", 2412 | "name": "瑞金" 2413 | }, { 2414 | "id": 716, 2415 | "spell": "rushan", 2416 | "name": "乳山" 2417 | }, { 2418 | "id": 717, 2419 | "spell": "ruyang", 2420 | "name": "汝阳" 2421 | }, { 2422 | "id": 718, 2423 | "spell": "ruyuan", 2424 | "name": "乳源" 2425 | }], 2426 | "S": [{ 2427 | "id": 3, 2428 | "spell": "shanghai", 2429 | "name": "上海" 2430 | }, { 2431 | "id": 36, 2432 | "spell": "shenyang", 2433 | "name": "沈阳" 2434 | }, { 2435 | "id": 37, 2436 | "spell": "shenzhen", 2437 | "name": "深圳" 2438 | }, { 2439 | "id": 38, 2440 | "spell": "shijiazhuang", 2441 | "name": "石家庄" 2442 | }, { 2443 | "id": 39, 2444 | "spell": "suzhou", 2445 | "name": "苏州" 2446 | }, { 2447 | "id": 237, 2448 | "spell": "sanmenxia", 2449 | "name": "三门峡" 2450 | }, { 2451 | "id": 238, 2452 | "spell": "sanming", 2453 | "name": "三明" 2454 | }, { 2455 | "id": 239, 2456 | "spell": "sanya", 2457 | "name": "三亚" 2458 | }, { 2459 | "id": 240, 2460 | "spell": "shangluo", 2461 | "name": "商洛" 2462 | }, { 2463 | "id": 241, 2464 | "spell": "shangqiu", 2465 | "name": "商丘" 2466 | }, { 2467 | "id": 242, 2468 | "spell": "shangrao", 2469 | "name": "上饶" 2470 | }, { 2471 | "id": 243, 2472 | "spell": "shannan", 2473 | "name": "山南" 2474 | }, { 2475 | "id": 244, 2476 | "spell": "shantou", 2477 | "name": "汕头" 2478 | }, { 2479 | "id": 245, 2480 | "spell": "shanwei", 2481 | "name": "汕尾" 2482 | }, { 2483 | "id": 246, 2484 | "spell": "shaoguan", 2485 | "name": "韶关" 2486 | }, { 2487 | "id": 247, 2488 | "spell": "shaoxing", 2489 | "name": "绍兴" 2490 | }, { 2491 | "id": 248, 2492 | "spell": "shaoyang", 2493 | "name": "邵阳" 2494 | }, { 2495 | "id": 249, 2496 | "spell": "shiyan", 2497 | "name": "十堰" 2498 | }, { 2499 | "id": 250, 2500 | "spell": "shizuishan", 2501 | "name": "石嘴山" 2502 | }, { 2503 | "id": 251, 2504 | "spell": "shuangyashan", 2505 | "name": "双鸭山" 2506 | }, { 2507 | "id": 252, 2508 | "spell": "shuozhou", 2509 | "name": "朔州" 2510 | }, { 2511 | "id": 253, 2512 | "spell": "siping", 2513 | "name": "四平" 2514 | }, { 2515 | "id": 254, 2516 | "spell": "songyuan", 2517 | "name": "松原" 2518 | }, { 2519 | "id": 255, 2520 | "spell": "suihua", 2521 | "name": "绥化" 2522 | }, { 2523 | "id": 256, 2524 | "spell": "suining", 2525 | "name": "遂宁" 2526 | }, { 2527 | "id": 257, 2528 | "spell": "suizhou", 2529 | "name": "随州" 2530 | }, { 2531 | "id": 258, 2532 | "spell": "suqian", 2533 | "name": "宿迁" 2534 | }, { 2535 | "id": 259, 2536 | "spell": "suzhou", 2537 | "name": "宿州" 2538 | }, { 2539 | "id": 719, 2540 | "spell": "sanjiang", 2541 | "name": "三江" 2542 | }, { 2543 | "id": 720, 2544 | "spell": "sanmen", 2545 | "name": "三门" 2546 | }, { 2547 | "id": 721, 2548 | "spell": "saoan", 2549 | "name": "诏安" 2550 | }, { 2551 | "id": 722, 2552 | "spell": "shanggao", 2553 | "name": "上高" 2554 | }, { 2555 | "id": 723, 2556 | "spell": "shanghang", 2557 | "name": "上杭" 2558 | }, { 2559 | "id": 724, 2560 | "spell": "shanghe", 2561 | "name": "商河" 2562 | }, { 2563 | "id": 725, 2564 | "spell": "shangli", 2565 | "name": "上栗" 2566 | }, { 2567 | "id": 726, 2568 | "spell": "shanglin", 2569 | "name": "上林" 2570 | }, { 2571 | "id": 727, 2572 | "spell": "shangrao", 2573 | "name": "上饶" 2574 | }, { 2575 | "id": 728, 2576 | "spell": "shangyou", 2577 | "name": "上犹" 2578 | }, { 2579 | "id": 729, 2580 | "spell": "shangyu", 2581 | "name": "上虞" 2582 | }, { 2583 | "id": 730, 2584 | "spell": "shangzhi", 2585 | "name": "尚志" 2586 | }, { 2587 | "id": 731, 2588 | "spell": "shaowu", 2589 | "name": "邵武" 2590 | }, { 2591 | "id": 732, 2592 | "spell": "shaoxing", 2593 | "name": "绍兴" 2594 | }, { 2595 | "id": 733, 2596 | "spell": "shaxian", 2597 | "name": "沙县" 2598 | }, { 2599 | "id": 734, 2600 | "spell": "shengsi", 2601 | "name": "嵊泗" 2602 | }, { 2603 | "id": 735, 2604 | "spell": "shengzhou", 2605 | "name": "嵊州" 2606 | }, { 2607 | "id": 736, 2608 | "spell": "shenxian", 2609 | "name": "莘县" 2610 | }, { 2611 | "id": 737, 2612 | "spell": "shenze", 2613 | "name": "深泽" 2614 | }, { 2615 | "id": 738, 2616 | "spell": "shexian", 2617 | "name": "歙县" 2618 | }, { 2619 | "id": 739, 2620 | "spell": "sheyang", 2621 | "name": "射阳" 2622 | }, { 2623 | "id": 740, 2624 | "spell": "shicheng", 2625 | "name": "石城" 2626 | }, { 2627 | "id": 741, 2628 | "spell": "shilin", 2629 | "name": "石林" 2630 | }, { 2631 | "id": 742, 2632 | "spell": "shishi", 2633 | "name": "石狮" 2634 | }, { 2635 | "id": 743, 2636 | "spell": "shitai", 2637 | "name": "石台" 2638 | }, { 2639 | "id": 744, 2640 | "spell": "shixing", 2641 | "name": "始兴" 2642 | }, { 2643 | "id": 745, 2644 | "spell": "shizhu", 2645 | "name": "石柱" 2646 | }, { 2647 | "id": 746, 2648 | "spell": "shouguang", 2649 | "name": "寿光" 2650 | }, { 2651 | "id": 747, 2652 | "spell": "shouning", 2653 | "name": "寿宁" 2654 | }, { 2655 | "id": 748, 2656 | "spell": "shouxian", 2657 | "name": "寿县" 2658 | }, { 2659 | "id": 749, 2660 | "spell": "shuangcheng", 2661 | "name": "双城" 2662 | }, { 2663 | "id": 750, 2664 | "spell": "shuangliu", 2665 | "name": "双流" 2666 | }, { 2667 | "id": 751, 2668 | "spell": "shucheng", 2669 | "name": "舒城" 2670 | }, { 2671 | "id": 752, 2672 | "spell": "shulan", 2673 | "name": "舒兰" 2674 | }, { 2675 | "id": 753, 2676 | "spell": "shunchang", 2677 | "name": "顺昌" 2678 | }, { 2679 | "id": 754, 2680 | "spell": "shuyang", 2681 | "name": "沭阳" 2682 | }, { 2683 | "id": 755, 2684 | "spell": "sihong", 2685 | "name": "泗洪" 2686 | }, { 2687 | "id": 756, 2688 | "spell": "sihui", 2689 | "name": "四会" 2690 | }, { 2691 | "id": 757, 2692 | "spell": "sishui", 2693 | "name": "泗水" 2694 | }, { 2695 | "id": 758, 2696 | "spell": "sixian", 2697 | "name": "泗县" 2698 | }, { 2699 | "id": 759, 2700 | "spell": "siyang", 2701 | "name": "泗阳" 2702 | }, { 2703 | "id": 760, 2704 | "spell": "songming", 2705 | "name": "嵩明" 2706 | }, { 2707 | "id": 761, 2708 | "spell": "songxi", 2709 | "name": "松溪" 2710 | }, { 2711 | "id": 762, 2712 | "spell": "songxian", 2713 | "name": "嵩县" 2714 | }, { 2715 | "id": 763, 2716 | "spell": "songyang", 2717 | "name": "松阳" 2718 | }, { 2719 | "id": 764, 2720 | "spell": "suichang", 2721 | "name": "遂昌" 2722 | }, { 2723 | "id": 765, 2724 | "spell": "suichuan", 2725 | "name": "遂川" 2726 | }, { 2727 | "id": 766, 2728 | "spell": "suining", 2729 | "name": "睢宁" 2730 | }, { 2731 | "id": 767, 2732 | "spell": "suixi", 2733 | "name": "濉溪" 2734 | }, { 2735 | "id": 768, 2736 | "spell": "suixi", 2737 | "name": "遂溪" 2738 | }, { 2739 | "id": 769, 2740 | "spell": "susong", 2741 | "name": "宿松" 2742 | }, { 2743 | "id": 770, 2744 | "spell": "suyu", 2745 | "name": "宿豫" 2746 | }], 2747 | "T": [{ 2748 | "id": 4, 2749 | "spell": "tianjin", 2750 | "name": "天津" 2751 | }, { 2752 | "id": 40, 2753 | "spell": "taizhou", 2754 | "name": "台州" 2755 | }, { 2756 | "id": 41, 2757 | "spell": "tangshan", 2758 | "name": "唐山" 2759 | }, { 2760 | "id": 260, 2761 | "spell": "tachengdi", 2762 | "name": "塔城地" 2763 | }, { 2764 | "id": 261, 2765 | "spell": "taian", 2766 | "name": "泰安" 2767 | }, { 2768 | "id": 262, 2769 | "spell": "taiyuan", 2770 | "name": "太原" 2771 | }, { 2772 | "id": 263, 2773 | "spell": "taizhou", 2774 | "name": "泰州" 2775 | }, { 2776 | "id": 264, 2777 | "spell": "tianshui", 2778 | "name": "天水" 2779 | }, { 2780 | "id": 265, 2781 | "spell": "tieling", 2782 | "name": "铁岭" 2783 | }, { 2784 | "id": 266, 2785 | "spell": "tongchuan", 2786 | "name": "铜川" 2787 | }, { 2788 | "id": 267, 2789 | "spell": "tonghua", 2790 | "name": "通化" 2791 | }, { 2792 | "id": 268, 2793 | "spell": "tongliao", 2794 | "name": "通辽" 2795 | }, { 2796 | "id": 269, 2797 | "spell": "tongling", 2798 | "name": "铜陵" 2799 | }, { 2800 | "id": 270, 2801 | "spell": "tongren", 2802 | "name": "铜仁" 2803 | }, { 2804 | "id": 271, 2805 | "spell": "tulufan", 2806 | "name": "吐鲁番" 2807 | }, { 2808 | "id": 771, 2809 | "spell": "taicang", 2810 | "name": "太仓" 2811 | }, { 2812 | "id": 772, 2813 | "spell": "taihe", 2814 | "name": "太和" 2815 | }, { 2816 | "id": 773, 2817 | "spell": "taihe", 2818 | "name": "泰和" 2819 | }, { 2820 | "id": 774, 2821 | "spell": "taihu", 2822 | "name": "太湖" 2823 | }, { 2824 | "id": 775, 2825 | "spell": "taining", 2826 | "name": "泰宁" 2827 | }, { 2828 | "id": 776, 2829 | "spell": "taishan", 2830 | "name": "台山" 2831 | }, { 2832 | "id": 777, 2833 | "spell": "taishun", 2834 | "name": "泰顺" 2835 | }, { 2836 | "id": 778, 2837 | "spell": "taixing", 2838 | "name": "泰兴" 2839 | }, { 2840 | "id": 779, 2841 | "spell": "tancheng", 2842 | "name": "郯城" 2843 | }, { 2844 | "id": 780, 2845 | "spell": "tanghai", 2846 | "name": "唐海" 2847 | }, { 2848 | "id": 781, 2849 | "spell": "tengzhou", 2850 | "name": "滕州" 2851 | }, { 2852 | "id": 782, 2853 | "spell": "tianchang", 2854 | "name": "天长" 2855 | }, { 2856 | "id": 783, 2857 | "spell": "tiantai", 2858 | "name": "天台" 2859 | }, { 2860 | "id": 784, 2861 | "spell": "tongcheng", 2862 | "name": "桐城" 2863 | }, { 2864 | "id": 785, 2865 | "spell": "tonggu", 2866 | "name": "铜鼓" 2867 | }, { 2868 | "id": 786, 2869 | "spell": "tonghe", 2870 | "name": "通河" 2871 | }, { 2872 | "id": 787, 2873 | "spell": "tongliang", 2874 | "name": "铜梁" 2875 | }, { 2876 | "id": 788, 2877 | "spell": "tongling", 2878 | "name": "铜陵" 2879 | }, { 2880 | "id": 789, 2881 | "spell": "tonglu", 2882 | "name": "桐庐" 2883 | }, { 2884 | "id": 790, 2885 | "spell": "tongnan", 2886 | "name": "潼南" 2887 | }, { 2888 | "id": 791, 2889 | "spell": "tongshan", 2890 | "name": "铜山" 2891 | }, { 2892 | "id": 792, 2893 | "spell": "tongxiang", 2894 | "name": "桐乡" 2895 | }, { 2896 | "id": 793, 2897 | "spell": "tongzhou", 2898 | "name": "通州" 2899 | }], 2900 | "W": [{ 2901 | "id": 42, 2902 | "spell": "weifang", 2903 | "name": "潍坊" 2904 | }, { 2905 | "id": 43, 2906 | "spell": "weihai", 2907 | "name": "威海" 2908 | }, { 2909 | "id": 44, 2910 | "spell": "wuhan", 2911 | "name": "武汉" 2912 | }, { 2913 | "id": 45, 2914 | "spell": "wuxi", 2915 | "name": "无锡" 2916 | }, { 2917 | "id": 272, 2918 | "spell": "weinan", 2919 | "name": "渭南" 2920 | }, { 2921 | "id": 273, 2922 | "spell": "wenshan", 2923 | "name": "文山" 2924 | }, { 2925 | "id": 274, 2926 | "spell": "wenzhou", 2927 | "name": "温州" 2928 | }, { 2929 | "id": 275, 2930 | "spell": "wuhai", 2931 | "name": "乌海" 2932 | }, { 2933 | "id": 276, 2934 | "spell": "wuhu", 2935 | "name": "芜湖" 2936 | }, { 2937 | "id": 277, 2938 | "spell": "wulanchabu", 2939 | "name": "乌兰察布" 2940 | }, { 2941 | "id": 278, 2942 | "spell": "wulumuqi", 2943 | "name": "乌鲁木齐" 2944 | }, { 2945 | "id": 279, 2946 | "spell": "wuwei", 2947 | "name": "武威" 2948 | }, { 2949 | "id": 280, 2950 | "spell": "wuzhong", 2951 | "name": "吴忠" 2952 | }, { 2953 | "id": 281, 2954 | "spell": "wuzhou", 2955 | "name": "梧州" 2956 | }, { 2957 | "id": 794, 2958 | "spell": "wafangdian", 2959 | "name": "瓦房店" 2960 | }, { 2961 | "id": 795, 2962 | "spell": "wanan", 2963 | "name": "万安" 2964 | }, { 2965 | "id": 796, 2966 | "spell": "wangcheng", 2967 | "name": "望城" 2968 | }, { 2969 | "id": 797, 2970 | "spell": "wangjiang", 2971 | "name": "望江" 2972 | }, { 2973 | "id": 798, 2974 | "spell": "wannian", 2975 | "name": "万年" 2976 | }, { 2977 | "id": 799, 2978 | "spell": "wanzai", 2979 | "name": "万载" 2980 | }, { 2981 | "id": 800, 2982 | "spell": "weishan", 2983 | "name": "微山" 2984 | }, { 2985 | "id": 801, 2986 | "spell": "wencheng", 2987 | "name": "文成" 2988 | }, { 2989 | "id": 802, 2990 | "spell": "wendeng", 2991 | "name": "文登" 2992 | }, { 2993 | "id": 803, 2994 | "spell": "wengyuan", 2995 | "name": "翁源" 2996 | }, { 2997 | "id": 804, 2998 | "spell": "wenling", 2999 | "name": "温岭" 3000 | }, { 3001 | "id": 805, 3002 | "spell": "wenshang", 3003 | "name": "汶上" 3004 | }, { 3005 | "id": 806, 3006 | "spell": "wenxian", 3007 | "name": "温县" 3008 | }, { 3009 | "id": 807, 3010 | "spell": "woyang", 3011 | "name": "涡阳" 3012 | }, { 3013 | "id": 808, 3014 | "spell": "wuchang", 3015 | "name": "五常" 3016 | }, { 3017 | "id": 809, 3018 | "spell": "wucheng", 3019 | "name": "武城" 3020 | }, { 3021 | "id": 810, 3022 | "spell": "wuchuan", 3023 | "name": "吴川" 3024 | }, { 3025 | "id": 811, 3026 | "spell": "wudi", 3027 | "name": "无棣" 3028 | }, { 3029 | "id": 812, 3030 | "spell": "wuhe", 3031 | "name": "五河" 3032 | }, { 3033 | "id": 813, 3034 | "spell": "wuhu", 3035 | "name": "芜湖" 3036 | }, { 3037 | "id": 814, 3038 | "spell": "wuhua", 3039 | "name": "五华" 3040 | }, { 3041 | "id": 815, 3042 | "spell": "wuji", 3043 | "name": "无极" 3044 | }, { 3045 | "id": 816, 3046 | "spell": "wujiang", 3047 | "name": "吴江" 3048 | }, { 3049 | "id": 817, 3050 | "spell": "wulian", 3051 | "name": "五莲" 3052 | }, { 3053 | "id": 818, 3054 | "spell": "wulong", 3055 | "name": "武隆" 3056 | }, { 3057 | "id": 819, 3058 | "spell": "wuming", 3059 | "name": "武鸣" 3060 | }, { 3061 | "id": 820, 3062 | "spell": "wuning", 3063 | "name": "武宁" 3064 | }, { 3065 | "id": 821, 3066 | "spell": "wuping", 3067 | "name": "武平" 3068 | }, { 3069 | "id": 822, 3070 | "spell": "wushan", 3071 | "name": "巫山" 3072 | }, { 3073 | "id": 823, 3074 | "spell": "wuwei", 3075 | "name": "无为" 3076 | }, { 3077 | "id": 824, 3078 | "spell": "wuxi", 3079 | "name": "巫溪" 3080 | }, { 3081 | "id": 825, 3082 | "spell": "wuyi", 3083 | "name": "武义" 3084 | }, { 3085 | "id": 826, 3086 | "spell": "wuyishan", 3087 | "name": "武夷山" 3088 | }, { 3089 | "id": 827, 3090 | "spell": "wuyuan", 3091 | "name": "婺源" 3092 | }, { 3093 | "id": 828, 3094 | "spell": "wuzhi", 3095 | "name": "武陟" 3096 | }], 3097 | "X": [{ 3098 | "id": 46, 3099 | "spell": "xiamen", 3100 | "name": "厦门" 3101 | }, { 3102 | "id": 47, 3103 | "spell": "xian", 3104 | "name": "西安" 3105 | }, { 3106 | "id": 48, 3107 | "spell": "xuchang", 3108 | "name": "许昌" 3109 | }, { 3110 | "id": 49, 3111 | "spell": "xuzhou", 3112 | "name": "徐州" 3113 | }, { 3114 | "id": 282, 3115 | "spell": "xiangfan", 3116 | "name": "襄樊" 3117 | }, { 3118 | "id": 283, 3119 | "spell": "xiangtan", 3120 | "name": "湘潭" 3121 | }, { 3122 | "id": 284, 3123 | "spell": "xiangxi", 3124 | "name": "湘西" 3125 | }, { 3126 | "id": 285, 3127 | "spell": "xianning", 3128 | "name": "咸宁" 3129 | }, { 3130 | "id": 286, 3131 | "spell": "xianyang", 3132 | "name": "咸阳" 3133 | }, { 3134 | "id": 287, 3135 | "spell": "xiaogan", 3136 | "name": "孝感" 3137 | }, { 3138 | "id": 288, 3139 | "spell": "xilinguolemeng", 3140 | "name": "锡林郭勒盟" 3141 | }, { 3142 | "id": 289, 3143 | "spell": "xinganmeng", 3144 | "name": "兴安盟" 3145 | }, { 3146 | "id": 290, 3147 | "spell": "xingtai", 3148 | "name": "邢台" 3149 | }, { 3150 | "id": 291, 3151 | "spell": "xining", 3152 | "name": "西宁" 3153 | }, { 3154 | "id": 292, 3155 | "spell": "xinxiang", 3156 | "name": "新乡" 3157 | }, { 3158 | "id": 293, 3159 | "spell": "xinyang", 3160 | "name": "信阳" 3161 | }, { 3162 | "id": 294, 3163 | "spell": "xinyu", 3164 | "name": "新余" 3165 | }, { 3166 | "id": 295, 3167 | "spell": "xinzhou", 3168 | "name": "忻州" 3169 | }, { 3170 | "id": 296, 3171 | "spell": "xishuangbanna", 3172 | "name": "西双版纳" 3173 | }, { 3174 | "id": 297, 3175 | "spell": "xuancheng", 3176 | "name": "宣城" 3177 | }, { 3178 | "id": 829, 3179 | "spell": "xiajiang", 3180 | "name": "峡江" 3181 | }, { 3182 | "id": 830, 3183 | "spell": "xiajin", 3184 | "name": "夏津" 3185 | }, { 3186 | "id": 831, 3187 | "spell": "xiangshan", 3188 | "name": "象山" 3189 | }, { 3190 | "id": 832, 3191 | "spell": "xiangshui", 3192 | "name": "响水" 3193 | }, { 3194 | "id": 833, 3195 | "spell": "xianju", 3196 | "name": "仙居" 3197 | }, { 3198 | "id": 834, 3199 | "spell": "xianyou", 3200 | "name": "仙游" 3201 | }, { 3202 | "id": 835, 3203 | "spell": "xiaoxian", 3204 | "name": "萧县" 3205 | }, { 3206 | "id": 836, 3207 | "spell": "xiapu", 3208 | "name": "霞浦" 3209 | }, { 3210 | "id": 837, 3211 | "spell": "xifeng", 3212 | "name": "息烽" 3213 | }, { 3214 | "id": 838, 3215 | "spell": "xinan", 3216 | "name": "新安" 3217 | }, { 3218 | "id": 839, 3219 | "spell": "xinchang", 3220 | "name": "新昌" 3221 | }, { 3222 | "id": 840, 3223 | "spell": "xinfeng", 3224 | "name": "信丰" 3225 | }, { 3226 | "id": 841, 3227 | "spell": "xinfeng", 3228 | "name": "新丰" 3229 | }, { 3230 | "id": 842, 3231 | "spell": "xingan", 3232 | "name": "新干" 3233 | }, { 3234 | "id": 843, 3235 | "spell": "xingguo", 3236 | "name": "兴国" 3237 | }, { 3238 | "id": 844, 3239 | "spell": "xinghua", 3240 | "name": "兴化" 3241 | }, { 3242 | "id": 845, 3243 | "spell": "xingning", 3244 | "name": "兴宁" 3245 | }, { 3246 | "id": 846, 3247 | "spell": "xingtang", 3248 | "name": "行唐" 3249 | }, { 3250 | "id": 847, 3251 | "spell": "xingyang", 3252 | "name": "荥阳" 3253 | }, { 3254 | "id": 848, 3255 | "spell": "xingzi", 3256 | "name": "星子" 3257 | }, { 3258 | "id": 849, 3259 | "spell": "xinji", 3260 | "name": "辛集" 3261 | }, { 3262 | "id": 850, 3263 | "spell": "xinjian", 3264 | "name": "新建" 3265 | }, { 3266 | "id": 851, 3267 | "spell": "xinjin", 3268 | "name": "新津" 3269 | }, { 3270 | "id": 852, 3271 | "spell": "xinle", 3272 | "name": "新乐" 3273 | }, { 3274 | "id": 853, 3275 | "spell": "xinmin", 3276 | "name": "新民" 3277 | }, { 3278 | "id": 854, 3279 | "spell": "xinmi", 3280 | "name": "新密" 3281 | }, { 3282 | "id": 855, 3283 | "spell": "xintai", 3284 | "name": "新泰" 3285 | }, { 3286 | "id": 856, 3287 | "spell": "xinxing", 3288 | "name": "新兴" 3289 | }, { 3290 | "id": 857, 3291 | "spell": "xinyi", 3292 | "name": "新沂" 3293 | }, { 3294 | "id": 858, 3295 | "spell": "xinyi", 3296 | "name": "信宜" 3297 | }, { 3298 | "id": 859, 3299 | "spell": "xinzheng", 3300 | "name": "新郑" 3301 | }, { 3302 | "id": 860, 3303 | "spell": "xiuning", 3304 | "name": "休宁" 3305 | }, { 3306 | "id": 861, 3307 | "spell": "xiushan", 3308 | "name": "秀山" 3309 | }, { 3310 | "id": 862, 3311 | "spell": "xiushui", 3312 | "name": "修水" 3313 | }, { 3314 | "id": 863, 3315 | "spell": "xiuwen", 3316 | "name": "修文" 3317 | }, { 3318 | "id": 864, 3319 | "spell": "xiuwu", 3320 | "name": "修武" 3321 | }, { 3322 | "id": 865, 3323 | "spell": "xundian", 3324 | "name": "寻甸" 3325 | }, { 3326 | "id": 866, 3327 | "spell": "xunwu", 3328 | "name": "寻乌" 3329 | }, { 3330 | "id": 867, 3331 | "spell": "xuwen", 3332 | "name": "徐闻" 3333 | }, { 3334 | "id": 868, 3335 | "spell": "xuyi", 3336 | "name": "盱眙" 3337 | }], 3338 | "Y": [{ 3339 | "id": 50, 3340 | "spell": "yangzhou", 3341 | "name": "扬州" 3342 | }, { 3343 | "id": 51, 3344 | "spell": "yantai", 3345 | "name": "烟台" 3346 | }, { 3347 | "id": 298, 3348 | "spell": "yaan", 3349 | "name": "雅安" 3350 | }, { 3351 | "id": 299, 3352 | "spell": "yanan", 3353 | "name": "延安" 3354 | }, { 3355 | "id": 300, 3356 | "spell": "yanbian", 3357 | "name": "延边" 3358 | }, { 3359 | "id": 301, 3360 | "spell": "yancheng", 3361 | "name": "盐城" 3362 | }, { 3363 | "id": 302, 3364 | "spell": "yangjiang", 3365 | "name": "阳江" 3366 | }, { 3367 | "id": 303, 3368 | "spell": "yangquan", 3369 | "name": "阳泉" 3370 | }, { 3371 | "id": 304, 3372 | "spell": "yibin", 3373 | "name": "宜宾" 3374 | }, { 3375 | "id": 305, 3376 | "spell": "yichang", 3377 | "name": "宜昌" 3378 | }, { 3379 | "id": 306, 3380 | "spell": "yichun", 3381 | "name": "伊春" 3382 | }, { 3383 | "id": 307, 3384 | "spell": "yichun", 3385 | "name": "宜春" 3386 | }, { 3387 | "id": 308, 3388 | "spell": "yilihasake", 3389 | "name": "伊犁哈萨克" 3390 | }, { 3391 | "id": 309, 3392 | "spell": "yinchuan", 3393 | "name": "银川" 3394 | }, { 3395 | "id": 310, 3396 | "spell": "yingkou", 3397 | "name": "营口" 3398 | }, { 3399 | "id": 311, 3400 | "spell": "yingtan", 3401 | "name": "鹰潭" 3402 | }, { 3403 | "id": 312, 3404 | "spell": "yiyang", 3405 | "name": "益阳" 3406 | }, { 3407 | "id": 313, 3408 | "spell": "yongzhou", 3409 | "name": "永州" 3410 | }, { 3411 | "id": 314, 3412 | "spell": "yueyang", 3413 | "name": "岳阳" 3414 | }, { 3415 | "id": 315, 3416 | "spell": "yulin", 3417 | "name": "玉林" 3418 | }, { 3419 | "id": 316, 3420 | "spell": "yulin", 3421 | "name": "榆林" 3422 | }, { 3423 | "id": 317, 3424 | "spell": "yuncheng", 3425 | "name": "运城" 3426 | }, { 3427 | "id": 318, 3428 | "spell": "yunfu", 3429 | "name": "云浮" 3430 | }, { 3431 | "id": 319, 3432 | "spell": "yushu", 3433 | "name": "玉树" 3434 | }, { 3435 | "id": 320, 3436 | "spell": "yuxi", 3437 | "name": "玉溪" 3438 | }, { 3439 | "id": 869, 3440 | "spell": "yangchun", 3441 | "name": "阳春" 3442 | }, { 3443 | "id": 870, 3444 | "spell": "yangdong", 3445 | "name": "阳东" 3446 | }, { 3447 | "id": 871, 3448 | "spell": "yanggu", 3449 | "name": "阳谷" 3450 | }, { 3451 | "id": 872, 3452 | "spell": "yangshan", 3453 | "name": "阳山" 3454 | }, { 3455 | "id": 873, 3456 | "spell": "yangxin", 3457 | "name": "阳信" 3458 | }, { 3459 | "id": 874, 3460 | "spell": "yangxi", 3461 | "name": "阳西" 3462 | }, { 3463 | "id": 875, 3464 | "spell": "yangzhong", 3465 | "name": "扬中" 3466 | }, { 3467 | "id": 876, 3468 | "spell": "yanshi", 3469 | "name": "偃师" 3470 | }, { 3471 | "id": 877, 3472 | "spell": "yanshou", 3473 | "name": "延寿" 3474 | }, { 3475 | "id": 878, 3476 | "spell": "yanzhou", 3477 | "name": "兖州" 3478 | }, { 3479 | "id": 879, 3480 | "spell": "yichuan", 3481 | "name": "伊川" 3482 | }, { 3483 | "id": 880, 3484 | "spell": "yifeng", 3485 | "name": "宜丰" 3486 | }, { 3487 | "id": 881, 3488 | "spell": "yihuang", 3489 | "name": "宜黄" 3490 | }, { 3491 | "id": 882, 3492 | "spell": "yilan", 3493 | "name": "依兰" 3494 | }, { 3495 | "id": 883, 3496 | "spell": "yiliang", 3497 | "name": "宜良" 3498 | }, { 3499 | "id": 884, 3500 | "spell": "yinan", 3501 | "name": "沂南" 3502 | }, { 3503 | "id": 885, 3504 | "spell": "yingde", 3505 | "name": "英德" 3506 | }, { 3507 | "id": 886, 3508 | "spell": "yingshang", 3509 | "name": "颍上" 3510 | }, { 3511 | "id": 887, 3512 | "spell": "yishui", 3513 | "name": "沂水" 3514 | }, { 3515 | "id": 888, 3516 | "spell": "yiwu", 3517 | "name": "义乌" 3518 | }, { 3519 | "id": 889, 3520 | "spell": "yixian", 3521 | "name": "黟县" 3522 | }, { 3523 | "id": 890, 3524 | "spell": "yixing", 3525 | "name": "宜兴" 3526 | }, { 3527 | "id": 891, 3528 | "spell": "yiyang", 3529 | "name": "弋阳" 3530 | }, { 3531 | "id": 892, 3532 | "spell": "yiyang", 3533 | "name": "宜阳" 3534 | }, { 3535 | "id": 893, 3536 | "spell": "yiyuan", 3537 | "name": "沂源" 3538 | }, { 3539 | "id": 894, 3540 | "spell": "yizheng", 3541 | "name": "仪征" 3542 | }, { 3543 | "id": 895, 3544 | "spell": "yongan", 3545 | "name": "永安" 3546 | }, { 3547 | "id": 896, 3548 | "spell": "yongchuan", 3549 | "name": "永川" 3550 | }, { 3551 | "id": 897, 3552 | "spell": "yongchun", 3553 | "name": "永春" 3554 | }, { 3555 | "id": 898, 3556 | "spell": "yongdeng", 3557 | "name": "永登" 3558 | }, { 3559 | "id": 899, 3560 | "spell": "yongding", 3561 | "name": "永定" 3562 | }, { 3563 | "id": 900, 3564 | "spell": "yongfeng", 3565 | "name": "永丰" 3566 | }, { 3567 | "id": 901, 3568 | "spell": "yongji", 3569 | "name": "永吉" 3570 | }, { 3571 | "id": 902, 3572 | "spell": "yongjia", 3573 | "name": "永嘉" 3574 | }, { 3575 | "id": 903, 3576 | "spell": "yongkang", 3577 | "name": "永康" 3578 | }, { 3579 | "id": 904, 3580 | "spell": "yongning", 3581 | "name": "邕宁" 3582 | }, { 3583 | "id": 905, 3584 | "spell": "yongtai", 3585 | "name": "永泰" 3586 | }, { 3587 | "id": 906, 3588 | "spell": "yongxin", 3589 | "name": "永新" 3590 | }, { 3591 | "id": 907, 3592 | "spell": "yongxiu", 3593 | "name": "永修" 3594 | }, { 3595 | "id": 908, 3596 | "spell": "youxi", 3597 | "name": "尤溪" 3598 | }, { 3599 | "id": 909, 3600 | "spell": "youyang", 3601 | "name": "酉阳" 3602 | }, { 3603 | "id": 910, 3604 | "spell": "yuanshi", 3605 | "name": "元氏" 3606 | }, { 3607 | "id": 911, 3608 | "spell": "yucheng", 3609 | "name": "禹城" 3610 | }, { 3611 | "id": 912, 3612 | "spell": "yudu", 3613 | "name": "于都" 3614 | }, { 3615 | "id": 913, 3616 | "spell": "yuexi", 3617 | "name": "岳西" 3618 | }, { 3619 | "id": 914, 3620 | "spell": "yugan", 3621 | "name": "余干" 3622 | }, { 3623 | "id": 915, 3624 | "spell": "yuhuan", 3625 | "name": "玉环" 3626 | }, { 3627 | "id": 916, 3628 | "spell": "yujiang", 3629 | "name": "余江" 3630 | }, { 3631 | "id": 917, 3632 | "spell": "yunan", 3633 | "name": "郁南" 3634 | }, { 3635 | "id": 918, 3636 | "spell": "yunan", 3637 | "name": "云安" 3638 | }, { 3639 | "id": 919, 3640 | "spell": "yuncheng", 3641 | "name": "郓城" 3642 | }, { 3643 | "id": 920, 3644 | "spell": "yunhe", 3645 | "name": "云和" 3646 | }, { 3647 | "id": 921, 3648 | "spell": "yunxiao", 3649 | "name": "云霄" 3650 | }, { 3651 | "id": 922, 3652 | "spell": "yunyang", 3653 | "name": "云阳" 3654 | }, { 3655 | "id": 923, 3656 | "spell": "yushan", 3657 | "name": "玉山" 3658 | }, { 3659 | "id": 924, 3660 | "spell": "yushu", 3661 | "name": "榆树" 3662 | }, { 3663 | "id": 925, 3664 | "spell": "yutai", 3665 | "name": "鱼台" 3666 | }, { 3667 | "id": 926, 3668 | "spell": "yutian", 3669 | "name": "玉田" 3670 | }, { 3671 | "id": 927, 3672 | "spell": "yuyao", 3673 | "name": "余姚" 3674 | }, { 3675 | "id": 928, 3676 | "spell": "yuzhong", 3677 | "name": "榆中" 3678 | }], 3679 | "Z": [{ 3680 | "id": 52, 3681 | "spell": "zhangzhou", 3682 | "name": "漳州" 3683 | }, { 3684 | "id": 53, 3685 | "spell": "zhengzhou", 3686 | "name": "郑州" 3687 | }, { 3688 | "id": 54, 3689 | "spell": "zhongshan", 3690 | "name": "中山" 3691 | }, { 3692 | "id": 55, 3693 | "spell": "zhuhai", 3694 | "name": "珠海" 3695 | }, { 3696 | "id": 321, 3697 | "spell": "zaozhuang", 3698 | "name": "枣庄" 3699 | }, { 3700 | "id": 322, 3701 | "spell": "zhangjiajie", 3702 | "name": "张家界" 3703 | }, { 3704 | "id": 323, 3705 | "spell": "zhangjiakou", 3706 | "name": "张家口" 3707 | }, { 3708 | "id": 324, 3709 | "spell": "zhangye", 3710 | "name": "张掖" 3711 | }, { 3712 | "id": 325, 3713 | "spell": "zhanjiang", 3714 | "name": "湛江" 3715 | }, { 3716 | "id": 326, 3717 | "spell": "zhaoqing", 3718 | "name": "肇庆" 3719 | }, { 3720 | "id": 327, 3721 | "spell": "zhaotong", 3722 | "name": "昭通" 3723 | }, { 3724 | "id": 328, 3725 | "spell": "zhenjiang", 3726 | "name": "镇江" 3727 | }, { 3728 | "id": 329, 3729 | "spell": "zhongwei", 3730 | "name": "中卫" 3731 | }, { 3732 | "id": 330, 3733 | "spell": "zhoukou", 3734 | "name": "周口" 3735 | }, { 3736 | "id": 331, 3737 | "spell": "zhoushan", 3738 | "name": "舟山" 3739 | }, { 3740 | "id": 332, 3741 | "spell": "zhumadian", 3742 | "name": "驻马店" 3743 | }, { 3744 | "id": 333, 3745 | "spell": "zhuzhou", 3746 | "name": "株洲" 3747 | }, { 3748 | "id": 334, 3749 | "spell": "zibo", 3750 | "name": "淄博" 3751 | }, { 3752 | "id": 335, 3753 | "spell": "zigong", 3754 | "name": "自贡" 3755 | }, { 3756 | "id": 336, 3757 | "spell": "ziyang", 3758 | "name": "资阳" 3759 | }, { 3760 | "id": 337, 3761 | "spell": "zunyi", 3762 | "name": "遵义" 3763 | }, { 3764 | "id": 929, 3765 | "spell": "zanhuang", 3766 | "name": "赞皇" 3767 | }, { 3768 | "id": 930, 3769 | "spell": "zengcheng", 3770 | "name": "增城" 3771 | }, { 3772 | "id": 931, 3773 | "spell": "zhangjiagang", 3774 | "name": "张家港" 3775 | }, { 3776 | "id": 932, 3777 | "spell": "zhangping", 3778 | "name": "漳平" 3779 | }, { 3780 | "id": 933, 3781 | "spell": "zhangpu", 3782 | "name": "漳浦" 3783 | }, { 3784 | "id": 934, 3785 | "spell": "zhangqiu", 3786 | "name": "章丘" 3787 | }, { 3788 | "id": 935, 3789 | "spell": "zhangshu", 3790 | "name": "樟树" 3791 | }, { 3792 | "id": 936, 3793 | "spell": "zhanhua", 3794 | "name": "沾化" 3795 | }, { 3796 | "id": 937, 3797 | "spell": "zhaoxian", 3798 | "name": "赵县" 3799 | }, { 3800 | "id": 938, 3801 | "spell": "zhaoyuan", 3802 | "name": "招远" 3803 | }, { 3804 | "id": 939, 3805 | "spell": "zhengding", 3806 | "name": "正定" 3807 | }, { 3808 | "id": 940, 3809 | "spell": "zhenghe", 3810 | "name": "政和" 3811 | }, { 3812 | "id": 941, 3813 | "spell": "zherong", 3814 | "name": "柘荣" 3815 | }, { 3816 | "id": 942, 3817 | "spell": "zhongmou", 3818 | "name": "中牟" 3819 | }, { 3820 | "id": 943, 3821 | "spell": "zhongxian", 3822 | "name": "忠县" 3823 | }, { 3824 | "id": 944, 3825 | "spell": "zhouning", 3826 | "name": "周宁" 3827 | }, { 3828 | "id": 945, 3829 | "spell": "zhouzhi", 3830 | "name": "周至" 3831 | }, { 3832 | "id": 946, 3833 | "spell": "zhuanghe", 3834 | "name": "庄河" 3835 | }, { 3836 | "id": 947, 3837 | "spell": "zhucheng", 3838 | "name": "诸城" 3839 | }, { 3840 | "id": 948, 3841 | "spell": "zhuji", 3842 | "name": "诸暨" 3843 | }, { 3844 | "id": 949, 3845 | "spell": "zijin", 3846 | "name": "紫金" 3847 | }, { 3848 | "id": 950, 3849 | "spell": "zixi", 3850 | "name": "资溪" 3851 | }, { 3852 | "id": 951, 3853 | "spell": "zoucheng", 3854 | "name": "邹城" 3855 | }, { 3856 | "id": 952, 3857 | "spell": "zouping", 3858 | "name": "邹平" 3859 | }, { 3860 | "id": 953, 3861 | "spell": "zunhua", 3862 | "name": "遵化" 3863 | }] 3864 | } 3865 | } 3866 | } 3867 | -------------------------------------------------------------------------------- /Travel/static/mock/detail.json: -------------------------------------------------------------------------------- 1 | { 2 | "ret": true, 3 | "data": { 4 | "sightName": "大连圣亚海洋世界(AAAA景区)", 5 | "bannerImg": "http://img1.qunarzz.com/sight/p0/201404/23/04b92c99462687fa1ba45c1b5ba4ad77.jpg_600x330_bf9c4904.jpg", 6 | "gallaryImgs": ["http://img1.qunarzz.com/sight/p0/201404/23/04b92c99462687fa1ba45c1b5ba4ad77.jpg_800x800_70debc93.jpg", "http://img1.qunarzz.com/sight/p0/1709/76/7691528bc7d7ad3ca3.img.png_800x800_9ef05ee7.png"], 7 | "categoryList": [{ 8 | "title": "成人票", 9 | "children": [{ 10 | "title": "成人三馆联票", 11 | "children": [{ 12 | "title": "成人三馆联票 - 某一连锁店销售" 13 | }] 14 | },{ 15 | "title": "成人五馆联票" 16 | }] 17 | }, { 18 | "title": "学生票" 19 | }, { 20 | "title": "儿童票" 21 | }, { 22 | "title": "特惠票" 23 | }] 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /Travel/static/mock/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "ret": true, 3 | "data": { 4 | "swiperList": [{ 5 | "id": "0001", 6 | "imgUrl": "http://img1.qunarzz.com/piao/fusion/1801/1a/94428c6dea109402.jpg_640x200_2cf590d8.jpg" 7 | },{ 8 | "id": "0002", 9 | "imgUrl": "http://img1.qunarzz.com/piao/fusion/1802/42/7c92b9a381e46402.jpg_640x200_1cdce2a4.jpg" 10 | },{ 11 | "id": "0003", 12 | "imgUrl": "http://img1.qunarzz.com/piao/fusion/1802/51/e78f936a5b404102.jpg_640x200_c14f0b3a.jpg" 13 | },{ 14 | "id": "0004", 15 | "imgUrl": "http://img1.qunarzz.com/piao/fusion/1712/91/a275569091681d02.jpg_640x200_0519ccb9.jpg" 16 | }], 17 | "iconList": [{ 18 | "id": "0001", 19 | "imgUrl": "http://img1.qunarzz.com/piao/fusion/1611/54/ace00878a52d9702.png", 20 | "desc": "景点门票" 21 | }, { 22 | "id": "0002", 23 | "imgUrl": "http://img1.qunarzz.com/piao/fusion/1711/df/86cbcfc533330d02.png", 24 | "desc": "滑雪季" 25 | }, { 26 | "id": "0003", 27 | "imgUrl": "http://img1.qunarzz.com/piao/fusion/1710/a6/83f636bd75ae6302.png", 28 | "desc": "泡温泉" 29 | }, { 30 | "id": "0004", 31 | "imgUrl": "http://img1.qunarzz.com/piao/fusion/1611/35/2640cab202c41b02.png", 32 | "desc": "动植园" 33 | }, { 34 | "id": "0005", 35 | "imgUrl": "http://img1.qunarzz.com/piao/fusion/1611/d0/e09575e66f4aa402.png", 36 | "desc": "游乐园" 37 | }, { 38 | "id": "0006", 39 | "imgUrl": "http://img1.qunarzz.com/piao/fusion/1611/59/569d3c096e542502.png", 40 | "desc": "必游榜单" 41 | }, { 42 | "id": "0007", 43 | "imgUrl": "http://img1.qunarzz.com/piao/fusion/1611/17/4bd370f3eb1acd02.png", 44 | "desc": "演出" 45 | }, { 46 | "id": "0008", 47 | "imgUrl": "http://img1.qunarzz.com/piao/fusion/1611/7f/b1ea3c8c7fb6db02.png", 48 | "desc": "城市观光" 49 | }, { 50 | "id": "0009", 51 | "imgUrl": "http://img1.qunarzz.com/piao/fusion/1611/a9/ffc620dbda9b9c02.png", 52 | "desc": "一日游" 53 | }], 54 | "recommendList": [{ 55 | "id": "0001", 56 | "imgUrl": "http://img1.qunarzz.com/sight/p0/1409/19/adca619faaab0898245dc4ec482b5722.jpg_140x140_80f63803.jpg", 57 | "title": "故宫", 58 | "desc": "东方宫殿建筑代表,世界宫殿建筑典范" 59 | }, { 60 | "id": "0002", 61 | "imgUrl": "http://img1.qunarzz.com/sight/p0/1511/d2/d2aec2dfc5aa771290.water.jpg_140x140_abb362a7.jpg", 62 | "title": "南山滑雪场", 63 | "desc": "北京专业级滑雪圣地" 64 | }, { 65 | "id": "0003", 66 | "imgUrl": "http://img1.qunarzz.com/sight/p0/1501/f4/f467729126949c3a.water.jpg_140x140_ef235b1c.jpg", 67 | "title": "天安门广场", 68 | "desc": "我爱北京天安门,天安门上太阳升" 69 | }, { 70 | "id": "0004", 71 | "imgUrl": "http://img1.qunarzz.com/sight/p0/1501/40/40b2b6c951b28fdd.water.jpg_140x140_1c863e5c.jpg", 72 | "title": "水立方", 73 | "desc": "中国的荣耀,阳光下的晶莹水滴" 74 | }, { 75 | "id": "0005", 76 | "imgUrl": "http://img1.qunarzz.com/sight/p0/201308/23/b283071686e64dfec8d65eac.jpg_140x140_8c5a7c49.jpg", 77 | "title": "温都水城养生馆", 78 | "desc": "各种亚热带植物掩映其间仿佛置身热带雨林" 79 | }], 80 | "weekendList": [{ 81 | "id": "0001", 82 | "imgUrl": "http://img1.qunarzz.com/sight/source/1510/6e/1ea71e2f04e.jpg_r_640x214_aa6f091d.jpg", 83 | "title": "北京温泉排行榜", 84 | "desc": "细数北京温泉,温暖你的冬天" 85 | }, { 86 | "id": "0002", 87 | "imgUrl": "http://img1.qunarzz.com/sight/source/1505/aa/7baaf8a851d221.jpg_r_640x214_1431200f.jpg", 88 | "title": "北京必游TOP10", 89 | "desc": "来北京必去的景点非这些地方莫属" 90 | }, { 91 | "id": "0003", 92 | "imgUrl": "http://img1.qunarzz.com/sight/source/1505/9e/21df651e19af5d.jpg_r_640x214_3ea5bb38.jpg", 93 | "title": "寻找北京的皇城范儿", 94 | "desc": "数百年的宫廷庙宇,至今依旧威严霸气" 95 | }, { 96 | "id": "0004", 97 | "imgUrl": "http://img1.qunarzz.com/sight/source/1505/ce/bc89bc2f0e33ea.jpg_r_640x214_3e408453.jpg", 98 | "title": "学生最爱的博物馆", 99 | "desc": "周末干嘛?北京很多博物馆已经免费开放啦" 100 | }, { 101 | "id": "0005", 102 | "imgUrl": "http://img1.qunarzz.com/sight/source/1505/b2/fde1bfcd057a52.jpg_r_640x214_bbf3fa44.jpg", 103 | "title": "儿童剧场,孩子的乐园", 104 | "desc": "带宝贝观看演出,近距离体验艺术的无穷魅力" 105 | }] 106 | } 107 | } --------------------------------------------------------------------------------