├── .babelrc ├── .editorconfig ├── .eslintignore ├── .eslintrc.js ├── .gitattributes ├── .gitignore ├── .postcssrc.js ├── 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 ├── .gitkeep └── mock ├── city.json ├── detail.json └── index.json /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["env", { 4 | "modules": false, 5 | "targets": { 6 | "browsers": ["> 1%", "last 2 versions", "not ie <= 8"] 7 | } 8 | }], 9 | "stage-2" 10 | ], 11 | "plugins": ["transform-vue-jsx", "transform-runtime"] 12 | } 13 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | /build/ 2 | /config/ 3 | /dist/ 4 | /*.js 5 | -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | // https://eslint.org/docs/user-guide/configuring 2 | 3 | module.exports = { 4 | root: true, 5 | parserOptions: { 6 | parser: 'babel-eslint' 7 | }, 8 | env: { 9 | browser: true, 10 | }, 11 | extends: [ 12 | // https://github.com/vuejs/eslint-plugin-vue#priority-a-essential-error-prevention 13 | // consider switching to `plugin:vue/strongly-recommended` or `plugin:vue/recommended` for stricter rules. 14 | 'plugin:vue/essential', 15 | // https://github.com/standard/standard/blob/master/docs/RULES-en.md 16 | 'standard' 17 | ], 18 | // required to lint *.vue files 19 | plugins: [ 20 | 'vue' 21 | ], 22 | // add your custom rules here 23 | rules: { 24 | // allow async-await 25 | 'generator-star-spacing': 'off', 26 | // allow debugger during development 27 | 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off' 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules/ 3 | /dist/ 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | static/mock 8 | 9 | # Editor directories and files 10 | .idea 11 | .vscode 12 | *.suo 13 | *.ntvs* 14 | *.njsproj 15 | *.sln 16 | -------------------------------------------------------------------------------- /.postcssrc.js: -------------------------------------------------------------------------------- 1 | // https://github.com/michael-ciniawsky/postcss-load-config 2 | 3 | module.exports = { 4 | "plugins": { 5 | "postcss-import": {}, 6 | "postcss-url": {}, 7 | // to edit target browsers: use "browserslist" field in package.json 8 | "autoprefixer": {} 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | > [掘金专栏](https://juejin.im/post/5be54e04f265da611c267b19) 2 | 3 | > [segmentfault](https://segmentfault.com/a/1190000017003057#articleHeader0) 4 | 5 | ## [成果预览](http://www.ptuyxr.cn/travel/#/) 6 | 7 | - [用Vue开发仿旅游站webapp项目总结 (上)](https://juejin.im/post/5be54e04f265da611c267b19) 8 | - [用Vue开发仿旅游站webapp项目总结 (下)](https://juejin.im/post/5bec0eeef265da61193b65cd) 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /build/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FE-Sadhu/vue-travel/1dd2dc604b506774ee49908b0176bdd67ce1747e/build/logo.png -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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 | '/api': { 15 | target: 'http://localhost:8080', 16 | pathRewrite: { 17 | '^/api': '/static/mock' 18 | } 19 | } 20 | }, 21 | 22 | // Various Dev Server settings 23 | host: 'localhost', // can be overwritten by process.env.HOST 24 | port: 8080, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined 25 | autoOpenBrowser: false, 26 | errorOverlay: true, 27 | notifyOnErrors: true, 28 | poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions- 29 | 30 | // Use Eslint Loader? 31 | // If true, your code will be linted during bundling and 32 | // linting errors and warnings will be shown in the console. 33 | useEslint: true, 34 | // If true, eslint errors and warnings will also be shown in the error overlay 35 | // in the browser. 36 | showEslintErrorsInOverlay: false, 37 | 38 | /** 39 | * Source Maps 40 | */ 41 | 42 | // https://webpack.js.org/configuration/devtool/#development 43 | devtool: 'cheap-module-eval-source-map', 44 | 45 | // If you have problems debugging vue-files in devtools, 46 | // set this to false - it *may* help 47 | // https://vue-loader.vuejs.org/en/options.html#cachebusting 48 | cacheBusting: true, 49 | 50 | cssSourceMap: true 51 | }, 52 | 53 | build: { 54 | // Template for index.html 55 | index: path.resolve(__dirname, '../dist/index.html'), 56 | 57 | // Paths 58 | assetsRoot: path.resolve(__dirname, '../dist'), 59 | assetsSubDirectory: 'static', 60 | assetsPublicPath: '/', 61 | 62 | /** 63 | * Source Maps 64 | */ 65 | 66 | productionSourceMap: true, 67 | // https://webpack.js.org/configuration/devtool/#production 68 | devtool: '#source-map', 69 | 70 | // Gzip off by default as many popular static hosts such as 71 | // Surge or Netlify already gzip all static assets for you. 72 | // Before setting to `true`, make sure to: 73 | // npm install --save-dev compression-webpack-plugin 74 | productionGzip: false, 75 | productionGzipExtensions: ['js', 'css'], 76 | 77 | // Run the build command with an extra argument to 78 | // View the bundle analyzer report after build finishes: 79 | // `npm run build --report` 80 | // Set to `true` or `false` to always turn it on or off 81 | bundleAnalyzerReport: process.env.npm_config_report 82 | } 83 | } 84 | -------------------------------------------------------------------------------- /config/prod.env.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | module.exports = { 3 | NODE_ENV: '"production"' 4 | } 5 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 8 | travel 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "travel", 3 | "version": "1.0.0", 4 | "description": "A Vue.js project", 5 | "author": "'Sadhu' <'1714222385@qq.com'>", 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.21.1", 15 | "babel-polyfill": "^6.26.0", 16 | "better-scroll": "^1.13.2", 17 | "fastclick": "^1.0.6", 18 | "stylus": "^0.54.5", 19 | "stylus-loader": "^3.0.2", 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": "^8.0.1", 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": "^1.1.2", 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 | -------------------------------------------------------------------------------- /src/App.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 16 | 17 | 19 | -------------------------------------------------------------------------------- /src/assets/styles/border.css: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | 3 | .border, 4 | .border-top, 5 | .border-right, 6 | .border-bottom, 7 | .border-left, 8 | .border-topbottom, 9 | .border-rightleft, 10 | .border-topleft, 11 | .border-rightbottom, 12 | .border-topright, 13 | .border-bottomleft { 14 | position: relative; 15 | } 16 | 17 | .border::before, 18 | .border-top::before, 19 | .border-right::before, 20 | .border-bottom::before, 21 | .border-left::before, 22 | .border-topbottom::before, 23 | .border-topbottom::after, 24 | .border-rightleft::before, 25 | .border-rightleft::after, 26 | .border-topleft::before, 27 | .border-topleft::after, 28 | .border-rightbottom::before, 29 | .border-rightbottom::after, 30 | .border-topright::before, 31 | .border-topright::after, 32 | .border-bottomleft::before, 33 | .border-bottomleft::after { 34 | content: "\0020"; 35 | overflow: hidden; 36 | position: absolute; 37 | } 38 | 39 | /* border 40 | * 因,边框是由伪元素区域遮盖在父级 41 | * 故,子级若有交互,需要对子级设置 42 | * 定位 及 z轴 43 | */ 44 | .border::before { 45 | box-sizing: border-box; 46 | top: 0; 47 | left: 0; 48 | height: 100%; 49 | width: 100%; 50 | border: 1px solid #eaeaea; 51 | transform-origin: 0 0; 52 | } 53 | 54 | .border-top::before, 55 | .border-bottom::before, 56 | .border-topbottom::before, 57 | .border-topbottom::after, 58 | .border-topleft::before, 59 | .border-rightbottom::after, 60 | .border-topright::before, 61 | .border-bottomleft::before { 62 | left: 0; 63 | width: 100%; 64 | height: 1px; 65 | } 66 | 67 | .border-right::before, 68 | .border-left::before, 69 | .border-rightleft::before, 70 | .border-rightleft::after, 71 | .border-topleft::after, 72 | .border-rightbottom::before, 73 | .border-topright::after, 74 | .border-bottomleft::after { 75 | top: 0; 76 | width: 1px; 77 | height: 100%; 78 | } 79 | 80 | .border-top::before, 81 | .border-topbottom::before, 82 | .border-topleft::before, 83 | .border-topright::before { 84 | border-top: 1px solid #eaeaea; 85 | transform-origin: 0 0; 86 | } 87 | 88 | .border-right::before, 89 | .border-rightbottom::before, 90 | .border-rightleft::before, 91 | .border-topright::after { 92 | border-right: 1px solid #eaeaea; 93 | transform-origin: 100% 0; 94 | } 95 | 96 | .border-bottom::before, 97 | .border-topbottom::after, 98 | .border-rightbottom::after, 99 | .border-bottomleft::before { 100 | border-bottom: 1px solid #eaeaea; 101 | transform-origin: 0 100%; 102 | } 103 | 104 | .border-left::before, 105 | .border-topleft::after, 106 | .border-rightleft::after, 107 | .border-bottomleft::after { 108 | border-left: 1px solid #eaeaea; 109 | transform-origin: 0 0; 110 | } 111 | 112 | .border-top::before, 113 | .border-topbottom::before, 114 | .border-topleft::before, 115 | .border-topright::before { 116 | top: 0; 117 | } 118 | 119 | .border-right::before, 120 | .border-rightleft::after, 121 | .border-rightbottom::before, 122 | .border-topright::after { 123 | right: 0; 124 | } 125 | 126 | .border-bottom::before, 127 | .border-topbottom::after, 128 | .border-rightbottom::after, 129 | .border-bottomleft::after { 130 | bottom: 0; 131 | } 132 | 133 | .border-left::before, 134 | .border-rightleft::before, 135 | .border-topleft::after, 136 | .border-bottomleft::before { 137 | left: 0; 138 | } 139 | 140 | @media (max--moz-device-pixel-ratio: 1.49), 141 | (-webkit-max-device-pixel-ratio: 1.49), 142 | (max-device-pixel-ratio: 1.49), 143 | (max-resolution: 143dpi), 144 | (max-resolution: 1.49dppx) { 145 | /* 默认值,无需重置 */ 146 | } 147 | 148 | @media (min--moz-device-pixel-ratio: 1.5) and (max--moz-device-pixel-ratio: 2.49), 149 | (-webkit-min-device-pixel-ratio: 1.5) and (-webkit-max-device-pixel-ratio: 2.49), 150 | (min-device-pixel-ratio: 1.5) and (max-device-pixel-ratio: 2.49), 151 | (min-resolution: 144dpi) and (max-resolution: 239dpi), 152 | (min-resolution: 1.5dppx) and (max-resolution: 2.49dppx) { 153 | .border::before { 154 | width: 200%; 155 | height: 200%; 156 | transform: scale(.5); 157 | } 158 | 159 | .border-top::before, 160 | .border-bottom::before, 161 | .border-topbottom::before, 162 | .border-topbottom::after, 163 | .border-topleft::before, 164 | .border-rightbottom::after, 165 | .border-topright::before, 166 | .border-bottomleft::before { 167 | transform: scaleY(.5); 168 | } 169 | 170 | .border-right::before, 171 | .border-left::before, 172 | .border-rightleft::before, 173 | .border-rightleft::after, 174 | .border-topleft::after, 175 | .border-rightbottom::before, 176 | .border-topright::after, 177 | .border-bottomleft::after { 178 | transform: scaleX(.5); 179 | } 180 | } 181 | 182 | @media (min--moz-device-pixel-ratio: 2.5), 183 | (-webkit-min-device-pixel-ratio: 2.5), 184 | (min-device-pixel-ratio: 2.5), 185 | (min-resolution: 240dpi), 186 | (min-resolution: 2.5dppx) { 187 | .border::before { 188 | width: 300%; 189 | height: 300%; 190 | transform: scale(.33333); 191 | } 192 | 193 | .border-top::before, 194 | .border-bottom::before, 195 | .border-topbottom::before, 196 | .border-topbottom::after, 197 | .border-topleft::before, 198 | .border-rightbottom::after, 199 | .border-topright::before, 200 | .border-bottomleft::before { 201 | transform: scaleY(.33333); 202 | } 203 | 204 | .border-right::before, 205 | .border-left::before, 206 | .border-rightleft::before, 207 | .border-rightleft::after, 208 | .border-topleft::after, 209 | .border-rightbottom::before, 210 | .border-topright::after, 211 | .border-bottomleft::after { 212 | transform: scaleX(.33333); 213 | } 214 | } 215 | -------------------------------------------------------------------------------- /src/assets/styles/iconfont.css: -------------------------------------------------------------------------------- 1 | 2 | @font-face {font-family: "iconfont"; 3 | src: url('./iconfont/iconfont.eot?t=1540387083019'); /* IE9*/ 4 | src: url('./iconfont/iconfont.eot?t=1540387083019#iefix') format('embedded-opentype'), /* IE6-IE8 */ 5 | url('data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAAAVgAAsAAAAAB/QAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAADMAAABCsP6z7U9TLzIAAAE8AAAARAAAAFY8mkmLY21hcAAAAYAAAABrAAABstB8nhJnbHlmAAAB7AAAAWcAAAGQYyJtomhlYWQAAANUAAAALwAAADYTJYv4aGhlYQAAA4QAAAAcAAAAJAfeA4ZobXR4AAADoAAAAA4AAAAUFAAAAGxvY2EAAAOwAAAADAAAAAwAuAEYbWF4cAAAA7wAAAAfAAAAIAESADBuYW1lAAAD3AAAAUUAAAJtPlT+fXBvc3QAAAUkAAAAOgAAAEyWygySeJxjYGRgYOBikGPQYWB0cfMJYeBgYGGAAJAMY05meiJQDMoDyrGAaQ4gZoOIAgCKIwNPAHicY2BkYWCcwMDKwMHUyXSGgYGhH0IzvmYwYuRgYGBiYGVmwAoC0lxTGByeqTyfxtzwv4EhhrmZoQEozAiSAwDrcAyheJztkb0NgEAIRt/9aMzFMSytnOBqZ7FymBsRx1A4LBzCjzwCXwgFAAOQlFXJEE4CpkPd0P1E6X6mal+YiERZZJP9avcN3/pV0DkPdNo22e6RX3PP9e2yXc/ROyGbYx+R3bEvXM0hPwdvGe8AeJw1Tz1Lw1AUffelSV9biU3TvpfQj5gWE11SrG1SREptBMFFdzcH/4G4OAjaUWgnBXFybke1g0oRXJ26uLj2JwjSp6+BXriHezmXc85FGImShniEMkhHSLdrlClxUMF1XHD8wGcbN/jTWgPI8Hu9aSZkfqsRI0vx83qpqHPHIBmFwLfZ1JdBSIn+u8A/0qXQQwlQsgxoza8LrXoAvgf4g+8yA14JTRPeIXF4SRFLOuPbZtvke0TLERgRmoD3lBWPogm9N+lUaqMUYqiC0KoHbguCEjA1GsSqQrwEstMCagFVQQT/GkxjselgOMdhfxyLjfu9OcJ1UsoVyU6ES4Jb3LUXF73+eCtVSEPyIMK5vwjRx08ojUy0Ih50KnZZyWlZumnX/IZWl/0azSplpw52I2ABk871wuyk4LoFfJd3Z8csrFZDD+/PHrvhZIAfdDfP5TkNv/kjQ1BeyK8Ou53JQDj9A6LAV1cAeJxjYGRgYABi/l+35eL5bb4ycLMwgMANZuU/CPp/AwsDczOQy8HABBIFABrRCboAeJxjYGRgYG7438AQw8IAAkCSkQEVsAIARwsCbnicY2FgYGBBwwABBAAVAAAAAAAAACgAUACQAMh4nGNgZGBgYGVQYWBmAAEmIOYCQgaG/2A+AwAMmgFDAHicZY9NTsMwEIVf+gekEqqoYIfkBWIBKP0Rq25YVGr3XXTfpk6bKokjx63UA3AejsAJOALcgDvwSCebNpbH37x5Y08A3OAHHo7fLfeRPVwyO3INF7gXrlN/EG6QX4SbaONVuEX9TdjHM6bCbXRheYPXuGL2hHdhDx18CNdwjU/hOvUv4Qb5W7iJO/wKt9Dx6sI+5l5XuI1HL/bHVi+cXqnlQcWhySKTOb+CmV7vkoWt0uqca1vEJlODoF9JU51pW91T7NdD5yIVWZOqCas6SYzKrdnq0AUb5/JRrxeJHoQm5Vhj/rbGAo5xBYUlDowxQhhkiMro6DtVZvSvsUPCXntWPc3ndFsU1P9zhQEC9M9cU7qy0nk6T4E9XxtSdXQrbsuelDSRXs1JErJCXta2VELqATZlV44RelzRiT8oZ0j/AAlabsgAAAB4nGNgYoAALgbsgJWRiZGZkYWRlZGNgT0rMzGvJL+ULS0xL6M0k604v7S4NJ+tpLQAKM7AAAC6Bwr4AAA=') format('woff'), 6 | url('./iconfont/iconfont.ttf?t=1540387083019') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/ 7 | url('./iconfont/iconfont.svg?t=1540387083019#iconfont') format('svg'); /* iOS 4.1- */ 8 | } 9 | 10 | .iconfont { 11 | font-family:"iconfont" !important; 12 | font-size:16px; 13 | font-style:normal; 14 | -webkit-font-smoothing: antialiased; 15 | -moz-osx-font-smoothing: grayscale; 16 | } 17 | 18 | /* .icon-jiantou:before { content: "\e64a"; } 19 | 20 | .icon-fanhui:before { content: "\e624"; } 21 | 22 | .icon-sousuo:before { content: "\e632"; } */ 23 | 24 | -------------------------------------------------------------------------------- /src/assets/styles/iconfont/iconfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FE-Sadhu/vue-travel/1dd2dc604b506774ee49908b0176bdd67ce1747e/src/assets/styles/iconfont/iconfont.eot -------------------------------------------------------------------------------- /src/assets/styles/iconfont/iconfont.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 8 | Created by iconfont 9 | 10 | 11 | 12 | 13 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /src/assets/styles/iconfont/iconfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FE-Sadhu/vue-travel/1dd2dc604b506774ee49908b0176bdd67ce1747e/src/assets/styles/iconfont/iconfont.ttf -------------------------------------------------------------------------------- /src/assets/styles/iconfont/iconfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FE-Sadhu/vue-travel/1dd2dc604b506774ee49908b0176bdd67ce1747e/src/assets/styles/iconfont/iconfont.woff -------------------------------------------------------------------------------- /src/assets/styles/mixins.styl: -------------------------------------------------------------------------------- 1 | ellipsis() 2 | overflow hidden 3 | white-space nowrap 4 | text-overflow ellipsis -------------------------------------------------------------------------------- /src/assets/styles/reset.css: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | 3 | html { 4 | background-color: #fff; 5 | color: #000; 6 | font-size: 12px 7 | } 8 | 9 | body, 10 | ul, 11 | ol, 12 | dl, 13 | dd, 14 | h1, 15 | h2, 16 | h3, 17 | h4, 18 | h5, 19 | h6, 20 | figure, 21 | form, 22 | fieldset, 23 | legend, 24 | input, 25 | textarea, 26 | button, 27 | p, 28 | blockquote, 29 | th, 30 | td, 31 | pre, 32 | xmp { 33 | margin: 0; 34 | padding: 0 35 | } 36 | 37 | body, 38 | input, 39 | textarea, 40 | button, 41 | select, 42 | pre, 43 | xmp, 44 | tt, 45 | code, 46 | kbd, 47 | samp { 48 | line-height: 1.5; 49 | font-family: tahoma, arial, "Hiragino Sans GB", simsun, sans-serif 50 | } 51 | 52 | h1, 53 | h2, 54 | h3, 55 | h4, 56 | h5, 57 | h6, 58 | small, 59 | big, 60 | input, 61 | textarea, 62 | button, 63 | select { 64 | font-size: 100% 65 | } 66 | 67 | h1, 68 | h2, 69 | h3, 70 | h4, 71 | h5, 72 | h6 { 73 | font-family: tahoma, arial, "Hiragino Sans GB", "微软雅黑", simsun, sans-serif 74 | } 75 | 76 | h1, 77 | h2, 78 | h3, 79 | h4, 80 | h5, 81 | h6, 82 | b, 83 | strong { 84 | font-weight: normal 85 | } 86 | 87 | address, 88 | cite, 89 | dfn, 90 | em, 91 | i, 92 | optgroup, 93 | var { 94 | font-style: normal 95 | } 96 | 97 | table { 98 | border-collapse: collapse; 99 | border-spacing: 0; 100 | text-align: left 101 | } 102 | 103 | caption, 104 | th { 105 | text-align: inherit 106 | } 107 | 108 | ul, 109 | ol, 110 | menu { 111 | list-style: none 112 | } 113 | 114 | fieldset, 115 | img { 116 | border: 0 117 | } 118 | 119 | img, 120 | object, 121 | input, 122 | textarea, 123 | button, 124 | select { 125 | vertical-align: middle 126 | } 127 | 128 | article, 129 | aside, 130 | footer, 131 | header, 132 | section, 133 | nav, 134 | figure, 135 | figcaption, 136 | hgroup, 137 | details, 138 | menu { 139 | display: block 140 | } 141 | 142 | audio, 143 | canvas, 144 | video { 145 | display: inline-block; 146 | *display: inline; 147 | *zoom: 1 148 | } 149 | 150 | blockquote:before, 151 | blockquote:after, 152 | q:before, 153 | q:after { 154 | content: "\0020" 155 | } 156 | 157 | textarea { 158 | overflow: auto; 159 | resize: vertical 160 | } 161 | 162 | input, 163 | textarea, 164 | button, 165 | select, 166 | a { 167 | outline: 0 none; 168 | border: none; 169 | } 170 | 171 | button::-moz-focus-inner, 172 | input::-moz-focus-inner { 173 | padding: 0; 174 | border: 0 175 | } 176 | 177 | mark { 178 | background-color: transparent 179 | } 180 | 181 | a, 182 | ins, 183 | s, 184 | u, 185 | del { 186 | text-decoration: none 187 | } 188 | 189 | sup, 190 | sub { 191 | vertical-align: baseline 192 | } 193 | 194 | html { 195 | overflow-x: hidden; 196 | height: 100%; 197 | font-size: 50px; 198 | -webkit-tap-highlight-color: transparent; 199 | } 200 | 201 | body { 202 | font-family: Arial, "Microsoft Yahei", "Helvetica Neue", Helvetica, sans-serif; 203 | color: #333; 204 | font-size: .28em; 205 | line-height: 1; 206 | -webkit-text-size-adjust: none; 207 | } 208 | 209 | hr { 210 | height: .02rem; 211 | margin: .1rem 0; 212 | border: medium none; 213 | border-top: .02rem solid #cacaca; 214 | } 215 | 216 | a { 217 | color: #25a4bb; 218 | text-decoration: none; 219 | } 220 | -------------------------------------------------------------------------------- /src/assets/styles/varibles.styl: -------------------------------------------------------------------------------- 1 | $bgColor = #00bcd4 2 | $darkTextColor = #333 3 | $headerHeight = .86rem 4 | -------------------------------------------------------------------------------- /src/common/fade/FadeAnimation.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 12 | 13 | 19 | -------------------------------------------------------------------------------- /src/common/gallary/Gallary.vue: -------------------------------------------------------------------------------- 1 | 26 | 27 | 55 | 56 | 81 | -------------------------------------------------------------------------------- /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 store from './store' 9 | import 'babel-polyfill' 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: { 25 | App 26 | }, 27 | template: '' 28 | }) 29 | -------------------------------------------------------------------------------- /src/pages/city/City.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | 62 | 63 | 66 | -------------------------------------------------------------------------------- /src/pages/city/components/alphabet.vue: -------------------------------------------------------------------------------- 1 | 14 | 15 | 85 | 86 | 102 | -------------------------------------------------------------------------------- /src/pages/city/components/header.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 15 | 16 | 36 | -------------------------------------------------------------------------------- /src/pages/city/components/list.vue: -------------------------------------------------------------------------------- 1 | 42 | 43 | 80 | 81 | 124 | -------------------------------------------------------------------------------- /src/pages/city/components/search.vue: -------------------------------------------------------------------------------- 1 | 34 | 35 | 92 | 93 | 123 | -------------------------------------------------------------------------------- /src/pages/detail/Detail.vue: -------------------------------------------------------------------------------- 1 | 14 | 15 | 70 | 71 | 77 | -------------------------------------------------------------------------------- /src/pages/detail/components/Banner.vue: -------------------------------------------------------------------------------- 1 | 22 | 23 | 53 | 54 | 86 | -------------------------------------------------------------------------------- /src/pages/detail/components/Header.vue: -------------------------------------------------------------------------------- 1 | 23 | 24 | 59 | 60 | 96 | -------------------------------------------------------------------------------- /src/pages/detail/components/List.vue: -------------------------------------------------------------------------------- 1 | 18 | 19 | 27 | 28 | 48 | -------------------------------------------------------------------------------- /src/pages/home/Home.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 90 | 91 | 94 | -------------------------------------------------------------------------------- /src/pages/home/components/Header.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | 27 | 28 | 64 | -------------------------------------------------------------------------------- /src/pages/home/components/Icons.vue: -------------------------------------------------------------------------------- 1 | 23 | 24 | 52 | 53 | 92 | -------------------------------------------------------------------------------- /src/pages/home/components/Recommend.vue: -------------------------------------------------------------------------------- 1 | 22 | 23 | 31 | 32 | 68 | -------------------------------------------------------------------------------- /src/pages/home/components/Swiper.vue: -------------------------------------------------------------------------------- 1 | 21 | 22 | 44 | 45 | 55 | -------------------------------------------------------------------------------- /src/pages/home/components/Weekend.vue: -------------------------------------------------------------------------------- 1 | 17 | 18 | 26 | 27 | 55 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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 | // actions: { 11 | // changeCity (ctx, city) { 12 | // ctx.commit('changeC2', city) 13 | // } 14 | // }, 可省略 15 | mutations 16 | }) 17 | -------------------------------------------------------------------------------- /src/store/mutations.js: -------------------------------------------------------------------------------- 1 | export default { 2 | changeC2 (state, city) { 3 | state.city = city 4 | try { 5 | localStorage.city = city 6 | } catch (e) {} 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /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 // localStorage.city || '上海' 10 | } 11 | -------------------------------------------------------------------------------- /static/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FE-Sadhu/vue-travel/1dd2dc604b506774ee49908b0176bdd67ce1747e/static/.gitkeep -------------------------------------------------------------------------------- /static/mock/city.json: -------------------------------------------------------------------------------- 1 | { 2 | "ret": true, 3 | "data": { 4 | "hotCities": [ 5 | { 6 | "id": 1, 7 | "spell": "beijing", 8 | "name": "北京" 9 | }, 10 | { 11 | "id": 3, 12 | "spell": "shanghai", 13 | "name": "上海" 14 | }, 15 | { 16 | "id": 47, 17 | "spell": "xian", 18 | "name": "西安" 19 | }, 20 | { 21 | "id": 239, 22 | "spell": "sanya", 23 | "name": "三亚" 24 | }, 25 | { 26 | "id": 188, 27 | "spell": "lijiang", 28 | "name": "丽江" 29 | }, 30 | { 31 | "id": 125, 32 | "spell": "guilin", 33 | "name": "桂林" 34 | } 35 | ], 36 | "cities": { 37 | "A": [ 38 | { 39 | "id": 56, 40 | "spell": "aba", 41 | "name": "阿坝" 42 | }, 43 | { 44 | "id": 57, 45 | "spell": "akesu", 46 | "name": "阿克苏" 47 | }, 48 | { 49 | "id": 58, 50 | "spell": "alashanmeng", 51 | "name": "阿拉善盟" 52 | }, 53 | { 54 | "id": 59, 55 | "spell": "aletai", 56 | "name": "阿勒泰" 57 | }, 58 | { 59 | "id": 60, 60 | "spell": "ali", 61 | "name": "阿里" 62 | }, 63 | { 64 | "id": 61, 65 | "spell": "ankang", 66 | "name": "安康" 67 | }, 68 | { 69 | "id": 62, 70 | "spell": "anqing", 71 | "name": "安庆" 72 | }, 73 | { 74 | "id": 63, 75 | "spell": "anshan", 76 | "name": "鞍山" 77 | }, 78 | { 79 | "id": 64, 80 | "spell": "anshun", 81 | "name": "安顺" 82 | }, 83 | { 84 | "id": 65, 85 | "spell": "anyang", 86 | "name": "安阳" 87 | }, 88 | { 89 | "id": 338, 90 | "spell": "acheng", 91 | "name": "阿城" 92 | }, 93 | { 94 | "id": 339, 95 | "spell": "anfu", 96 | "name": "安福" 97 | }, 98 | { 99 | "id": 340, 100 | "spell": "anji", 101 | "name": "安吉" 102 | }, 103 | { 104 | "id": 341, 105 | "spell": "anning", 106 | "name": "安宁" 107 | }, 108 | { 109 | "id": 342, 110 | "spell": "anqiu", 111 | "name": "安丘" 112 | }, 113 | { 114 | "id": 343, 115 | "spell": "anxi", 116 | "name": "安溪" 117 | }, 118 | { 119 | "id": 344, 120 | "spell": "anyi", 121 | "name": "安义" 122 | }, 123 | { 124 | "id": 345, 125 | "spell": "anyuan", 126 | "name": "安远" 127 | } 128 | ], 129 | "B": [ 130 | { 131 | "id": 1, 132 | "spell": "beijing", 133 | "name": "北京" 134 | }, 135 | { 136 | "id": 66, 137 | "spell": "baicheng", 138 | "name": "白城" 139 | }, 140 | { 141 | "id": 67, 142 | "spell": "baise", 143 | "name": "百色" 144 | }, 145 | { 146 | "id": 68, 147 | "spell": "baishan", 148 | "name": "白山" 149 | }, 150 | { 151 | "id": 69, 152 | "spell": "baiyin", 153 | "name": "白银" 154 | }, 155 | { 156 | "id": 70, 157 | "spell": "bangbu", 158 | "name": "蚌埠" 159 | }, 160 | { 161 | "id": 71, 162 | "spell": "baoding", 163 | "name": "保定" 164 | }, 165 | { 166 | "id": 72, 167 | "spell": "baoji", 168 | "name": "宝鸡" 169 | }, 170 | { 171 | "id": 73, 172 | "spell": "baoshan", 173 | "name": "保山" 174 | }, 175 | { 176 | "id": 74, 177 | "spell": "baotou", 178 | "name": "包头" 179 | }, 180 | { 181 | "id": 75, 182 | "spell": "bayannaoer", 183 | "name": "巴彦淖尔" 184 | }, 185 | { 186 | "id": 76, 187 | "spell": "bayinguoleng", 188 | "name": "巴音郭楞" 189 | }, 190 | { 191 | "id": 77, 192 | "spell": "bazhong", 193 | "name": "巴中" 194 | }, 195 | { 196 | "id": 78, 197 | "spell": "beihai", 198 | "name": "北海" 199 | }, 200 | { 201 | "id": 79, 202 | "spell": "benxi", 203 | "name": "本溪" 204 | }, 205 | { 206 | "id": 80, 207 | "spell": "bijie", 208 | "name": "毕节" 209 | }, 210 | { 211 | "id": 81, 212 | "spell": "binzhou", 213 | "name": "滨州" 214 | }, 215 | { 216 | "id": 82, 217 | "spell": "boertala", 218 | "name": "博尔塔拉" 219 | }, 220 | { 221 | "id": 83, 222 | "spell": "bozhou", 223 | "name": "亳州" 224 | }, 225 | { 226 | "id": 346, 227 | "spell": "baoying", 228 | "name": "宝应" 229 | }, 230 | { 231 | "id": 347, 232 | "spell": "bayan", 233 | "name": "巴彦" 234 | }, 235 | { 236 | "id": 348, 237 | "spell": "binhai", 238 | "name": "滨海" 239 | }, 240 | { 241 | "id": 349, 242 | "spell": "binxian", 243 | "name": "宾县" 244 | }, 245 | { 246 | "id": 350, 247 | "spell": "binyang", 248 | "name": "宾阳" 249 | }, 250 | { 251 | "id": 351, 252 | "spell": "bishan", 253 | "name": "璧山" 254 | }, 255 | { 256 | "id": 352, 257 | "spell": "boai", 258 | "name": "博爱" 259 | }, 260 | { 261 | "id": 353, 262 | "spell": "boluo", 263 | "name": "博罗" 264 | }, 265 | { 266 | "id": 354, 267 | "spell": "boxing", 268 | "name": "博兴" 269 | } 270 | ], 271 | "C": [ 272 | { 273 | "id": 2, 274 | "spell": "chongqing", 275 | "name": "重庆" 276 | }, 277 | { 278 | "id": 5, 279 | "spell": "changchun", 280 | "name": "长春" 281 | }, 282 | { 283 | "id": 6, 284 | "spell": "changsha", 285 | "name": "长沙" 286 | }, 287 | { 288 | "id": 7, 289 | "spell": "changzhou", 290 | "name": "常州" 291 | }, 292 | { 293 | "id": 8, 294 | "spell": "chengdu", 295 | "name": "成都" 296 | }, 297 | { 298 | "id": 84, 299 | "spell": "cangzhou", 300 | "name": "沧州" 301 | }, 302 | { 303 | "id": 85, 304 | "spell": "changde", 305 | "name": "常德" 306 | }, 307 | { 308 | "id": 86, 309 | "spell": "changdu", 310 | "name": "昌都" 311 | }, 312 | { 313 | "id": 87, 314 | "spell": "changji", 315 | "name": "昌吉" 316 | }, 317 | { 318 | "id": 88, 319 | "spell": "changzhi", 320 | "name": "长治" 321 | }, 322 | { 323 | "id": 89, 324 | "spell": "chaohu", 325 | "name": "巢湖" 326 | }, 327 | { 328 | "id": 90, 329 | "spell": "chaoyang", 330 | "name": "朝阳" 331 | }, 332 | { 333 | "id": 91, 334 | "spell": "chaozhou", 335 | "name": "潮州" 336 | }, 337 | { 338 | "id": 92, 339 | "spell": "chengde", 340 | "name": "承德" 341 | }, 342 | { 343 | "id": 93, 344 | "spell": "chenzhou", 345 | "name": "郴州" 346 | }, 347 | { 348 | "id": 94, 349 | "spell": "chifeng", 350 | "name": "赤峰" 351 | }, 352 | { 353 | "id": 95, 354 | "spell": "chizhou", 355 | "name": "池州" 356 | }, 357 | { 358 | "id": 96, 359 | "spell": "chongzuo", 360 | "name": "崇左" 361 | }, 362 | { 363 | "id": 97, 364 | "spell": "chuxiong", 365 | "name": "楚雄" 366 | }, 367 | { 368 | "id": 98, 369 | "spell": "chuzhou", 370 | "name": "滁州" 371 | }, 372 | { 373 | "id": 355, 374 | "spell": "cangnan", 375 | "name": "苍南" 376 | }, 377 | { 378 | "id": 356, 379 | "spell": "cangshan", 380 | "name": "苍山" 381 | }, 382 | { 383 | "id": 357, 384 | "spell": "caoxian", 385 | "name": "曹县" 386 | }, 387 | { 388 | "id": 358, 389 | "spell": "changdao", 390 | "name": "长岛" 391 | }, 392 | { 393 | "id": 359, 394 | "spell": "changfeng", 395 | "name": "长丰" 396 | }, 397 | { 398 | "id": 360, 399 | "spell": "changhai", 400 | "name": "长海" 401 | }, 402 | { 403 | "id": 361, 404 | "spell": "changle", 405 | "name": "长乐" 406 | }, 407 | { 408 | "id": 362, 409 | "spell": "changle", 410 | "name": "昌乐" 411 | }, 412 | { 413 | "id": 363, 414 | "spell": "changshan", 415 | "name": "常山" 416 | }, 417 | { 418 | "id": 364, 419 | "spell": "changshu", 420 | "name": "常熟" 421 | }, 422 | { 423 | "id": 365, 424 | "spell": "changtai", 425 | "name": "长泰" 426 | }, 427 | { 428 | "id": 366, 429 | "spell": "changting", 430 | "name": "长汀" 431 | }, 432 | { 433 | "id": 367, 434 | "spell": "changxing", 435 | "name": "长兴" 436 | }, 437 | { 438 | "id": 368, 439 | "spell": "changyi", 440 | "name": "昌邑" 441 | }, 442 | { 443 | "id": 369, 444 | "spell": "chaoan", 445 | "name": "潮安" 446 | }, 447 | { 448 | "id": 370, 449 | "spell": "chenggong", 450 | "name": "呈贡" 451 | }, 452 | { 453 | "id": 371, 454 | "spell": "chengkou", 455 | "name": "城口" 456 | }, 457 | { 458 | "id": 372, 459 | "spell": "chengwu", 460 | "name": "成武" 461 | }, 462 | { 463 | "id": 373, 464 | "spell": "chiping", 465 | "name": "茌平" 466 | }, 467 | { 468 | "id": 374, 469 | "spell": "chongren", 470 | "name": "崇仁" 471 | }, 472 | { 473 | "id": 375, 474 | "spell": "chongyi", 475 | "name": "崇义" 476 | }, 477 | { 478 | "id": 376, 479 | "spell": "chongzhou", 480 | "name": "崇州" 481 | }, 482 | { 483 | "id": 377, 484 | "spell": "chunan", 485 | "name": "淳安" 486 | }, 487 | { 488 | "id": 378, 489 | "spell": "cixi", 490 | "name": "慈溪" 491 | }, 492 | { 493 | "id": 379, 494 | "spell": "conghua", 495 | "name": "从化" 496 | }, 497 | { 498 | "id": 380, 499 | "spell": "congyang", 500 | "name": "枞阳" 501 | } 502 | ], 503 | "D": [ 504 | { 505 | "id": 9, 506 | "spell": "dalian", 507 | "name": "大连" 508 | }, 509 | { 510 | "id": 10, 511 | "spell": "dongguan", 512 | "name": "东莞" 513 | }, 514 | { 515 | "id": 99, 516 | "spell": "dali", 517 | "name": "大理" 518 | }, 519 | { 520 | "id": 100, 521 | "spell": "dandong", 522 | "name": "丹东" 523 | }, 524 | { 525 | "id": 101, 526 | "spell": "daqing", 527 | "name": "大庆" 528 | }, 529 | { 530 | "id": 102, 531 | "spell": "datong", 532 | "name": "大同" 533 | }, 534 | { 535 | "id": 103, 536 | "spell": "daxinganling", 537 | "name": "大兴安岭" 538 | }, 539 | { 540 | "id": 104, 541 | "spell": "dazhou", 542 | "name": "达州" 543 | }, 544 | { 545 | "id": 105, 546 | "spell": "dehong", 547 | "name": "德宏" 548 | }, 549 | { 550 | "id": 106, 551 | "spell": "deyang", 552 | "name": "德阳" 553 | }, 554 | { 555 | "id": 107, 556 | "spell": "dezhou", 557 | "name": "德州" 558 | }, 559 | { 560 | "id": 108, 561 | "spell": "dingxi", 562 | "name": "定西" 563 | }, 564 | { 565 | "id": 109, 566 | "spell": "diqing", 567 | "name": "迪庆" 568 | }, 569 | { 570 | "id": 110, 571 | "spell": "dongying", 572 | "name": "东营" 573 | }, 574 | { 575 | "id": 381, 576 | "spell": "dafeng", 577 | "name": "大丰" 578 | }, 579 | { 580 | "id": 382, 581 | "spell": "daishan", 582 | "name": "岱山" 583 | }, 584 | { 585 | "id": 383, 586 | "spell": "dangshan", 587 | "name": "砀山" 588 | }, 589 | { 590 | "id": 384, 591 | "spell": "dangtu", 592 | "name": "当涂" 593 | }, 594 | { 595 | "id": 385, 596 | "spell": "danxian", 597 | "name": "单县" 598 | }, 599 | { 600 | "id": 386, 601 | "spell": "danyang", 602 | "name": "丹阳" 603 | }, 604 | { 605 | "id": 387, 606 | "spell": "dapu", 607 | "name": "大埔" 608 | }, 609 | { 610 | "id": 388, 611 | "spell": "datian", 612 | "name": "大田" 613 | }, 614 | { 615 | "id": 389, 616 | "spell": "dayi", 617 | "name": "大邑" 618 | }, 619 | { 620 | "id": 390, 621 | "spell": "dayu", 622 | "name": "大余" 623 | }, 624 | { 625 | "id": 391, 626 | "spell": "dazu", 627 | "name": "大足" 628 | }, 629 | { 630 | "id": 392, 631 | "spell": "dean", 632 | "name": "德安" 633 | }, 634 | { 635 | "id": 393, 636 | "spell": "dehua", 637 | "name": "德化" 638 | }, 639 | { 640 | "id": 394, 641 | "spell": "dehui", 642 | "name": "德惠" 643 | }, 644 | { 645 | "id": 395, 646 | "spell": "dengfeng", 647 | "name": "登封" 648 | }, 649 | { 650 | "id": 396, 651 | "spell": "deqing", 652 | "name": "德清" 653 | }, 654 | { 655 | "id": 397, 656 | "spell": "deqing", 657 | "name": "德庆" 658 | }, 659 | { 660 | "id": 398, 661 | "spell": "dexing", 662 | "name": "德兴" 663 | }, 664 | { 665 | "id": 399, 666 | "spell": "dianbai", 667 | "name": "电白" 668 | }, 669 | { 670 | "id": 400, 671 | "spell": "dianjiang", 672 | "name": "垫江" 673 | }, 674 | { 675 | "id": 401, 676 | "spell": "dingnan", 677 | "name": "定南" 678 | }, 679 | { 680 | "id": 402, 681 | "spell": "dingtao", 682 | "name": "定陶" 683 | }, 684 | { 685 | "id": 403, 686 | "spell": "dingyuan", 687 | "name": "定远" 688 | }, 689 | { 690 | "id": 404, 691 | "spell": "donga", 692 | "name": "东阿" 693 | }, 694 | { 695 | "id": 405, 696 | "spell": "donghai", 697 | "name": "东海" 698 | }, 699 | { 700 | "id": 406, 701 | "spell": "dongming", 702 | "name": "东明" 703 | }, 704 | { 705 | "id": 407, 706 | "spell": "dongping", 707 | "name": "东平" 708 | }, 709 | { 710 | "id": 408, 711 | "spell": "dongshan", 712 | "name": "东山" 713 | }, 714 | { 715 | "id": 409, 716 | "spell": "dongtai", 717 | "name": "东台" 718 | }, 719 | { 720 | "id": 410, 721 | "spell": "dongtou", 722 | "name": "洞头" 723 | }, 724 | { 725 | "id": 411, 726 | "spell": "dongxiang", 727 | "name": "东乡" 728 | }, 729 | { 730 | "id": 412, 731 | "spell": "dongyang", 732 | "name": "东阳" 733 | }, 734 | { 735 | "id": 413, 736 | "spell": "dongyuan", 737 | "name": "东源" 738 | }, 739 | { 740 | "id": 414, 741 | "spell": "dongzhi", 742 | "name": "东至" 743 | }, 744 | { 745 | "id": 415, 746 | "spell": "duchang", 747 | "name": "都昌" 748 | }, 749 | { 750 | "id": 416, 751 | "spell": "dujiangyan", 752 | "name": "都江堰" 753 | } 754 | ], 755 | "E": [ 756 | { 757 | "id": 111, 758 | "spell": "eerduosi", 759 | "name": "鄂尔多斯" 760 | }, 761 | { 762 | "id": 112, 763 | "spell": "enshi", 764 | "name": "恩施" 765 | }, 766 | { 767 | "id": 113, 768 | "spell": "ezhou", 769 | "name": "鄂州" 770 | }, 771 | { 772 | "id": 417, 773 | "spell": "enping", 774 | "name": "恩平" 775 | } 776 | ], 777 | "F": [ 778 | { 779 | "id": 11, 780 | "spell": "foshan", 781 | "name": "佛山" 782 | }, 783 | { 784 | "id": 12, 785 | "spell": "fuzhou", 786 | "name": "福州" 787 | }, 788 | { 789 | "id": 114, 790 | "spell": "fangchenggang", 791 | "name": "防城港" 792 | }, 793 | { 794 | "id": 115, 795 | "spell": "fushun", 796 | "name": "抚顺" 797 | }, 798 | { 799 | "id": 116, 800 | "spell": "fuxin", 801 | "name": "阜新" 802 | }, 803 | { 804 | "id": 117, 805 | "spell": "fuyang", 806 | "name": "阜阳" 807 | }, 808 | { 809 | "id": 118, 810 | "spell": "fuzhou", 811 | "name": "抚州" 812 | }, 813 | { 814 | "id": 418, 815 | "spell": "faku", 816 | "name": "法库" 817 | }, 818 | { 819 | "id": 419, 820 | "spell": "fanchang", 821 | "name": "繁昌" 822 | }, 823 | { 824 | "id": 420, 825 | "spell": "fangzheng", 826 | "name": "方正" 827 | }, 828 | { 829 | "id": 421, 830 | "spell": "feicheng", 831 | "name": "肥城" 832 | }, 833 | { 834 | "id": 422, 835 | "spell": "feidong", 836 | "name": "肥东" 837 | }, 838 | { 839 | "id": 423, 840 | "spell": "feixi", 841 | "name": "肥西" 842 | }, 843 | { 844 | "id": 424, 845 | "spell": "feixian", 846 | "name": "费县" 847 | }, 848 | { 849 | "id": 425, 850 | "spell": "fengcheng", 851 | "name": "丰城" 852 | }, 853 | { 854 | "id": 426, 855 | "spell": "fengdu", 856 | "name": "丰都" 857 | }, 858 | { 859 | "id": 427, 860 | "spell": "fenghua", 861 | "name": "奉化" 862 | }, 863 | { 864 | "id": 428, 865 | "spell": "fengjie", 866 | "name": "奉节" 867 | }, 868 | { 869 | "id": 429, 870 | "spell": "fengkai", 871 | "name": "封开" 872 | }, 873 | { 874 | "id": 430, 875 | "spell": "fengshun", 876 | "name": "丰顺" 877 | }, 878 | { 879 | "id": 431, 880 | "spell": "fengtai", 881 | "name": "凤台" 882 | }, 883 | { 884 | "id": 432, 885 | "spell": "fengxian", 886 | "name": "丰县" 887 | }, 888 | { 889 | "id": 433, 890 | "spell": "fengxin", 891 | "name": "奉新" 892 | }, 893 | { 894 | "id": 434, 895 | "spell": "fengyang", 896 | "name": "凤阳" 897 | }, 898 | { 899 | "id": 435, 900 | "spell": "fenyi", 901 | "name": "分宜" 902 | }, 903 | { 904 | "id": 436, 905 | "spell": "fogang", 906 | "name": "佛冈" 907 | }, 908 | { 909 | "id": 437, 910 | "spell": "fuan", 911 | "name": "福安" 912 | }, 913 | { 914 | "id": 438, 915 | "spell": "fuding", 916 | "name": "福鼎" 917 | }, 918 | { 919 | "id": 439, 920 | "spell": "fuliang", 921 | "name": "浮梁" 922 | }, 923 | { 924 | "id": 440, 925 | "spell": "fumin", 926 | "name": "富民" 927 | }, 928 | { 929 | "id": 441, 930 | "spell": "funan", 931 | "name": "阜南" 932 | }, 933 | { 934 | "id": 442, 935 | "spell": "funing", 936 | "name": "阜宁" 937 | }, 938 | { 939 | "id": 443, 940 | "spell": "fuqing", 941 | "name": "福清" 942 | }, 943 | { 944 | "id": 444, 945 | "spell": "fuyang", 946 | "name": "富阳" 947 | } 948 | ], 949 | "G": [ 950 | { 951 | "id": 13, 952 | "spell": "guangzhou", 953 | "name": "广州" 954 | }, 955 | { 956 | "id": 14, 957 | "spell": "guiyang", 958 | "name": "贵阳" 959 | }, 960 | { 961 | "id": 119, 962 | "spell": "gannan", 963 | "name": "甘南" 964 | }, 965 | { 966 | "id": 120, 967 | "spell": "ganzhou", 968 | "name": "赣州" 969 | }, 970 | { 971 | "id": 121, 972 | "spell": "ganzi", 973 | "name": "甘孜" 974 | }, 975 | { 976 | "id": 122, 977 | "spell": "guangan", 978 | "name": "广安" 979 | }, 980 | { 981 | "id": 123, 982 | "spell": "guangyuan", 983 | "name": "广元" 984 | }, 985 | { 986 | "id": 124, 987 | "spell": "guigang", 988 | "name": "贵港" 989 | }, 990 | { 991 | "id": 125, 992 | "spell": "guilin", 993 | "name": "桂林" 994 | }, 995 | { 996 | "id": 126, 997 | "spell": "guoluo", 998 | "name": "果洛" 999 | }, 1000 | { 1001 | "id": 127, 1002 | "spell": "guyuan", 1003 | "name": "固原" 1004 | }, 1005 | { 1006 | "id": 445, 1007 | "spell": "ganxian", 1008 | "name": "赣县" 1009 | }, 1010 | { 1011 | "id": 446, 1012 | "spell": "ganyu", 1013 | "name": "赣榆" 1014 | }, 1015 | { 1016 | "id": 447, 1017 | "spell": "gaoan", 1018 | "name": "高安" 1019 | }, 1020 | { 1021 | "id": 448, 1022 | "spell": "gaocheng", 1023 | "name": "藁城" 1024 | }, 1025 | { 1026 | "id": 449, 1027 | "spell": "gaochun", 1028 | "name": "高淳" 1029 | }, 1030 | { 1031 | "id": 450, 1032 | "spell": "gaolan", 1033 | "name": "皋兰" 1034 | }, 1035 | { 1036 | "id": 451, 1037 | "spell": "gaoling", 1038 | "name": "高陵" 1039 | }, 1040 | { 1041 | "id": 452, 1042 | "spell": "gaomi", 1043 | "name": "高密" 1044 | }, 1045 | { 1046 | "id": 453, 1047 | "spell": "gaoqing", 1048 | "name": "高青" 1049 | }, 1050 | { 1051 | "id": 454, 1052 | "spell": "gaotang", 1053 | "name": "高唐" 1054 | }, 1055 | { 1056 | "id": 455, 1057 | "spell": "gaoyao", 1058 | "name": "高要" 1059 | }, 1060 | { 1061 | "id": 456, 1062 | "spell": "gaoyi", 1063 | "name": "高邑" 1064 | }, 1065 | { 1066 | "id": 457, 1067 | "spell": "gaoyou", 1068 | "name": "高邮" 1069 | }, 1070 | { 1071 | "id": 458, 1072 | "spell": "gaozhou", 1073 | "name": "高州" 1074 | }, 1075 | { 1076 | "id": 459, 1077 | "spell": "gongyi", 1078 | "name": "巩义" 1079 | }, 1080 | { 1081 | "id": 460, 1082 | "spell": "guangchang", 1083 | "name": "广昌" 1084 | }, 1085 | { 1086 | "id": 461, 1087 | "spell": "guangde", 1088 | "name": "广德" 1089 | }, 1090 | { 1091 | "id": 462, 1092 | "spell": "guangfeng", 1093 | "name": "广丰" 1094 | }, 1095 | { 1096 | "id": 463, 1097 | "spell": "guangning", 1098 | "name": "广宁" 1099 | }, 1100 | { 1101 | "id": 464, 1102 | "spell": "guangrao", 1103 | "name": "广饶" 1104 | }, 1105 | { 1106 | "id": 465, 1107 | "spell": "guangze", 1108 | "name": "光泽" 1109 | }, 1110 | { 1111 | "id": 466, 1112 | "spell": "guannan", 1113 | "name": "灌南" 1114 | }, 1115 | { 1116 | "id": 467, 1117 | "spell": "guanxian", 1118 | "name": "冠县" 1119 | }, 1120 | { 1121 | "id": 468, 1122 | "spell": "guanyun", 1123 | "name": "灌云" 1124 | }, 1125 | { 1126 | "id": 469, 1127 | "spell": "guixi", 1128 | "name": "贵溪" 1129 | }, 1130 | { 1131 | "id": 470, 1132 | "spell": "gutian", 1133 | "name": "古田" 1134 | }, 1135 | { 1136 | "id": 471, 1137 | "spell": "guzhen", 1138 | "name": "固镇" 1139 | } 1140 | ], 1141 | "H": [ 1142 | { 1143 | "id": 15, 1144 | "spell": "haerbin", 1145 | "name": "哈尔滨" 1146 | }, 1147 | { 1148 | "id": 16, 1149 | "spell": "haikou", 1150 | "name": "海口" 1151 | }, 1152 | { 1153 | "id": 17, 1154 | "spell": "handan", 1155 | "name": "邯郸" 1156 | }, 1157 | { 1158 | "id": 18, 1159 | "spell": "hangzhou", 1160 | "name": "杭州" 1161 | }, 1162 | { 1163 | "id": 19, 1164 | "spell": "hefei", 1165 | "name": "合肥" 1166 | }, 1167 | { 1168 | "id": 20, 1169 | "spell": "huizhou", 1170 | "name": "惠州" 1171 | }, 1172 | { 1173 | "id": 128, 1174 | "spell": "haibei", 1175 | "name": "海北" 1176 | }, 1177 | { 1178 | "id": 129, 1179 | "spell": "haidong", 1180 | "name": "海东" 1181 | }, 1182 | { 1183 | "id": 130, 1184 | "spell": "hainan", 1185 | "name": "海南" 1186 | }, 1187 | { 1188 | "id": 131, 1189 | "spell": "haixi", 1190 | "name": "海西" 1191 | }, 1192 | { 1193 | "id": 132, 1194 | "spell": "hami", 1195 | "name": "哈密" 1196 | }, 1197 | { 1198 | "id": 133, 1199 | "spell": "hanzhong", 1200 | "name": "汉中" 1201 | }, 1202 | { 1203 | "id": 134, 1204 | "spell": "hebi", 1205 | "name": "鹤壁" 1206 | }, 1207 | { 1208 | "id": 135, 1209 | "spell": "hechi", 1210 | "name": "河池" 1211 | }, 1212 | { 1213 | "id": 136, 1214 | "spell": "hegang", 1215 | "name": "鹤岗" 1216 | }, 1217 | { 1218 | "id": 137, 1219 | "spell": "heihe", 1220 | "name": "黑河" 1221 | }, 1222 | { 1223 | "id": 138, 1224 | "spell": "hengshui", 1225 | "name": "衡水" 1226 | }, 1227 | { 1228 | "id": 139, 1229 | "spell": "hengyang", 1230 | "name": "衡阳" 1231 | }, 1232 | { 1233 | "id": 140, 1234 | "spell": "hetiandi", 1235 | "name": "和田地" 1236 | }, 1237 | { 1238 | "id": 141, 1239 | "spell": "heyuan", 1240 | "name": "河源" 1241 | }, 1242 | { 1243 | "id": 142, 1244 | "spell": "heze", 1245 | "name": "菏泽" 1246 | }, 1247 | { 1248 | "id": 143, 1249 | "spell": "hezhou", 1250 | "name": "贺州" 1251 | }, 1252 | { 1253 | "id": 144, 1254 | "spell": "honghe", 1255 | "name": "红河" 1256 | }, 1257 | { 1258 | "id": 145, 1259 | "spell": "huaian", 1260 | "name": "淮安" 1261 | }, 1262 | { 1263 | "id": 146, 1264 | "spell": "huaibei", 1265 | "name": "淮北" 1266 | }, 1267 | { 1268 | "id": 147, 1269 | "spell": "huaihua", 1270 | "name": "怀化" 1271 | }, 1272 | { 1273 | "id": 148, 1274 | "spell": "huainan", 1275 | "name": "淮南" 1276 | }, 1277 | { 1278 | "id": 149, 1279 | "spell": "huanggang", 1280 | "name": "黄冈" 1281 | }, 1282 | { 1283 | "id": 150, 1284 | "spell": "huangnan", 1285 | "name": "黄南" 1286 | }, 1287 | { 1288 | "id": 151, 1289 | "spell": "huangshan", 1290 | "name": "黄山" 1291 | }, 1292 | { 1293 | "id": 152, 1294 | "spell": "huangshi", 1295 | "name": "黄石" 1296 | }, 1297 | { 1298 | "id": 153, 1299 | "spell": "huhehaote", 1300 | "name": "呼和浩特" 1301 | }, 1302 | { 1303 | "id": 154, 1304 | "spell": "huludao", 1305 | "name": "葫芦岛" 1306 | }, 1307 | { 1308 | "id": 155, 1309 | "spell": "hulunbeier", 1310 | "name": "呼伦贝尔" 1311 | }, 1312 | { 1313 | "id": 156, 1314 | "spell": "huzhou", 1315 | "name": "湖州" 1316 | }, 1317 | { 1318 | "id": 472, 1319 | "spell": "haian", 1320 | "name": "海安" 1321 | }, 1322 | { 1323 | "id": 473, 1324 | "spell": "haifeng", 1325 | "name": "海丰" 1326 | }, 1327 | { 1328 | "id": 474, 1329 | "spell": "haimen", 1330 | "name": "海门" 1331 | }, 1332 | { 1333 | "id": 475, 1334 | "spell": "haining", 1335 | "name": "海宁" 1336 | }, 1337 | { 1338 | "id": 476, 1339 | "spell": "haiyan", 1340 | "name": "海盐" 1341 | }, 1342 | { 1343 | "id": 477, 1344 | "spell": "haiyang", 1345 | "name": "海阳" 1346 | }, 1347 | { 1348 | "id": 478, 1349 | "spell": "hanshan", 1350 | "name": "含山" 1351 | }, 1352 | { 1353 | "id": 479, 1354 | "spell": "hechuan", 1355 | "name": "合川" 1356 | }, 1357 | { 1358 | "id": 480, 1359 | "spell": "hengfeng", 1360 | "name": "横峰" 1361 | }, 1362 | { 1363 | "id": 481, 1364 | "spell": "hengxian", 1365 | "name": "横县" 1366 | }, 1367 | { 1368 | "id": 482, 1369 | "spell": "heping", 1370 | "name": "和平" 1371 | }, 1372 | { 1373 | "id": 483, 1374 | "spell": "heshan", 1375 | "name": "鹤山" 1376 | }, 1377 | { 1378 | "id": 484, 1379 | "spell": "hexian", 1380 | "name": "和县" 1381 | }, 1382 | { 1383 | "id": 485, 1384 | "spell": "hongze", 1385 | "name": "洪泽" 1386 | }, 1387 | { 1388 | "id": 486, 1389 | "spell": "huaan", 1390 | "name": "华安" 1391 | }, 1392 | { 1393 | "id": 487, 1394 | "spell": "huadian", 1395 | "name": "桦甸" 1396 | }, 1397 | { 1398 | "id": 488, 1399 | "spell": "huaiji", 1400 | "name": "怀集" 1401 | }, 1402 | { 1403 | "id": 489, 1404 | "spell": "huaining", 1405 | "name": "怀宁" 1406 | }, 1407 | { 1408 | "id": 490, 1409 | "spell": "huaiyuan", 1410 | "name": "怀远" 1411 | }, 1412 | { 1413 | "id": 491, 1414 | "spell": "huantai", 1415 | "name": "桓台" 1416 | }, 1417 | { 1418 | "id": 492, 1419 | "spell": "huazhou", 1420 | "name": "化州" 1421 | }, 1422 | { 1423 | "id": 493, 1424 | "spell": "huian", 1425 | "name": "惠安" 1426 | }, 1427 | { 1428 | "id": 494, 1429 | "spell": "huichang", 1430 | "name": "会昌" 1431 | }, 1432 | { 1433 | "id": 495, 1434 | "spell": "huidong", 1435 | "name": "惠东" 1436 | }, 1437 | { 1438 | "id": 496, 1439 | "spell": "huilai", 1440 | "name": "惠来" 1441 | }, 1442 | { 1443 | "id": 497, 1444 | "spell": "huimin", 1445 | "name": "惠民" 1446 | }, 1447 | { 1448 | "id": 498, 1449 | "spell": "hukou", 1450 | "name": "湖口" 1451 | }, 1452 | { 1453 | "id": 499, 1454 | "spell": "hulan", 1455 | "name": "呼兰" 1456 | }, 1457 | { 1458 | "id": 500, 1459 | "spell": "huoqiu", 1460 | "name": "霍邱" 1461 | }, 1462 | { 1463 | "id": 501, 1464 | "spell": "huoshan", 1465 | "name": "霍山" 1466 | }, 1467 | { 1468 | "id": 502, 1469 | "spell": "huxian", 1470 | "name": "户县" 1471 | } 1472 | ], 1473 | "J": [ 1474 | { 1475 | "id": 21, 1476 | "spell": "jiaozuo", 1477 | "name": "焦作" 1478 | }, 1479 | { 1480 | "id": 22, 1481 | "spell": "jiaxing", 1482 | "name": "嘉兴" 1483 | }, 1484 | { 1485 | "id": 23, 1486 | "spell": "jilin", 1487 | "name": "吉林" 1488 | }, 1489 | { 1490 | "id": 24, 1491 | "spell": "jinan", 1492 | "name": "济南" 1493 | }, 1494 | { 1495 | "id": 157, 1496 | "spell": "jiamusi", 1497 | "name": "佳木斯" 1498 | }, 1499 | { 1500 | "id": 158, 1501 | "spell": "jiangmen", 1502 | "name": "江门" 1503 | }, 1504 | { 1505 | "id": 159, 1506 | "spell": "jian", 1507 | "name": "吉安" 1508 | }, 1509 | { 1510 | "id": 160, 1511 | "spell": "jiayuguan", 1512 | "name": "嘉峪关" 1513 | }, 1514 | { 1515 | "id": 161, 1516 | "spell": "jieyang", 1517 | "name": "揭阳" 1518 | }, 1519 | { 1520 | "id": 162, 1521 | "spell": "jinchang", 1522 | "name": "金昌" 1523 | }, 1524 | { 1525 | "id": 163, 1526 | "spell": "jincheng", 1527 | "name": "晋城" 1528 | }, 1529 | { 1530 | "id": 164, 1531 | "spell": "jingdezhen", 1532 | "name": "景德镇" 1533 | }, 1534 | { 1535 | "id": 165, 1536 | "spell": "jingmen", 1537 | "name": "荆门" 1538 | }, 1539 | { 1540 | "id": 166, 1541 | "spell": "jingzhou", 1542 | "name": "荆州" 1543 | }, 1544 | { 1545 | "id": 167, 1546 | "spell": "jinhua", 1547 | "name": "金华" 1548 | }, 1549 | { 1550 | "id": 168, 1551 | "spell": "jining", 1552 | "name": "济宁" 1553 | }, 1554 | { 1555 | "id": 169, 1556 | "spell": "jinzhong", 1557 | "name": "晋中" 1558 | }, 1559 | { 1560 | "id": 170, 1561 | "spell": "jinzhou", 1562 | "name": "锦州" 1563 | }, 1564 | { 1565 | "id": 171, 1566 | "spell": "jiujiang", 1567 | "name": "九江" 1568 | }, 1569 | { 1570 | "id": 172, 1571 | "spell": "jiuquan", 1572 | "name": "酒泉" 1573 | }, 1574 | { 1575 | "id": 173, 1576 | "spell": "jixi", 1577 | "name": "鸡西" 1578 | }, 1579 | { 1580 | "id": 503, 1581 | "spell": "jiande", 1582 | "name": "建德" 1583 | }, 1584 | { 1585 | "id": 504, 1586 | "spell": "jiangdu", 1587 | "name": "江都" 1588 | }, 1589 | { 1590 | "id": 505, 1591 | "spell": "jiangjin", 1592 | "name": "江津" 1593 | }, 1594 | { 1595 | "id": 506, 1596 | "spell": "jiangle", 1597 | "name": "将乐" 1598 | }, 1599 | { 1600 | "id": 507, 1601 | "spell": "jiangshan", 1602 | "name": "江山" 1603 | }, 1604 | { 1605 | "id": 508, 1606 | "spell": "jiangyan", 1607 | "name": "姜堰" 1608 | }, 1609 | { 1610 | "id": 509, 1611 | "spell": "jiangyin", 1612 | "name": "江阴" 1613 | }, 1614 | { 1615 | "id": 510, 1616 | "spell": "jianhu", 1617 | "name": "建湖" 1618 | }, 1619 | { 1620 | "id": 511, 1621 | "spell": "jianning", 1622 | "name": "建宁" 1623 | }, 1624 | { 1625 | "id": 512, 1626 | "spell": "jianou", 1627 | "name": "建瓯" 1628 | }, 1629 | { 1630 | "id": 513, 1631 | "spell": "jianyang", 1632 | "name": "建阳" 1633 | }, 1634 | { 1635 | "id": 514, 1636 | "spell": "jian", 1637 | "name": "吉安" 1638 | }, 1639 | { 1640 | "id": 515, 1641 | "spell": "jiaohe", 1642 | "name": "蛟河" 1643 | }, 1644 | { 1645 | "id": 516, 1646 | "spell": "jiaoling", 1647 | "name": "蕉岭" 1648 | }, 1649 | { 1650 | "id": 517, 1651 | "spell": "jiaonan", 1652 | "name": "胶南" 1653 | }, 1654 | { 1655 | "id": 518, 1656 | "spell": "jiaozhou", 1657 | "name": "胶州" 1658 | }, 1659 | { 1660 | "id": 519, 1661 | "spell": "jiashan", 1662 | "name": "嘉善" 1663 | }, 1664 | { 1665 | "id": 520, 1666 | "spell": "jiaxiang", 1667 | "name": "嘉祥" 1668 | }, 1669 | { 1670 | "id": 521, 1671 | "spell": "jiedong", 1672 | "name": "揭东" 1673 | }, 1674 | { 1675 | "id": 522, 1676 | "spell": "jieshou", 1677 | "name": "界首" 1678 | }, 1679 | { 1680 | "id": 523, 1681 | "spell": "jiexi", 1682 | "name": "揭西" 1683 | }, 1684 | { 1685 | "id": 524, 1686 | "spell": "jimo", 1687 | "name": "即墨" 1688 | }, 1689 | { 1690 | "id": 525, 1691 | "spell": "jingan", 1692 | "name": "靖安" 1693 | }, 1694 | { 1695 | "id": 526, 1696 | "spell": "jingde", 1697 | "name": "旌德" 1698 | }, 1699 | { 1700 | "id": 527, 1701 | "spell": "jinggangshan", 1702 | "name": "井冈山" 1703 | }, 1704 | { 1705 | "id": 528, 1706 | "spell": "jingjiang", 1707 | "name": "靖江" 1708 | }, 1709 | { 1710 | "id": 529, 1711 | "spell": "jingning", 1712 | "name": "景宁" 1713 | }, 1714 | { 1715 | "id": 530, 1716 | "spell": "jingxian", 1717 | "name": "泾县" 1718 | }, 1719 | { 1720 | "id": 531, 1721 | "spell": "jingxing", 1722 | "name": "井陉" 1723 | }, 1724 | { 1725 | "id": 532, 1726 | "spell": "jinhu", 1727 | "name": "金湖" 1728 | }, 1729 | { 1730 | "id": 533, 1731 | "spell": "jinjiang", 1732 | "name": "晋江" 1733 | }, 1734 | { 1735 | "id": 534, 1736 | "spell": "jinmen", 1737 | "name": "金门" 1738 | }, 1739 | { 1740 | "id": 535, 1741 | "spell": "jinning", 1742 | "name": "晋宁" 1743 | }, 1744 | { 1745 | "id": 536, 1746 | "spell": "jintan", 1747 | "name": "金坛" 1748 | }, 1749 | { 1750 | "id": 537, 1751 | "spell": "jintang", 1752 | "name": "金堂" 1753 | }, 1754 | { 1755 | "id": 538, 1756 | "spell": "jinxian", 1757 | "name": "进贤" 1758 | }, 1759 | { 1760 | "id": 539, 1761 | "spell": "jinxi", 1762 | "name": "金溪" 1763 | }, 1764 | { 1765 | "id": 540, 1766 | "spell": "jinxiang", 1767 | "name": "金乡" 1768 | }, 1769 | { 1770 | "id": 541, 1771 | "spell": "jinyun", 1772 | "name": "缙云" 1773 | }, 1774 | { 1775 | "id": 542, 1776 | "spell": "jinzhai", 1777 | "name": "金寨" 1778 | }, 1779 | { 1780 | "id": 543, 1781 | "spell": "jinzhou", 1782 | "name": "晋州" 1783 | }, 1784 | { 1785 | "id": 544, 1786 | "spell": "jishui", 1787 | "name": "吉水" 1788 | }, 1789 | { 1790 | "id": 545, 1791 | "spell": "jiujiang", 1792 | "name": "九江" 1793 | }, 1794 | { 1795 | "id": 546, 1796 | "spell": "jiutai", 1797 | "name": "九台" 1798 | }, 1799 | { 1800 | "id": 547, 1801 | "spell": "jixi", 1802 | "name": "绩溪" 1803 | }, 1804 | { 1805 | "id": 548, 1806 | "spell": "jiyang", 1807 | "name": "济阳" 1808 | }, 1809 | { 1810 | "id": 549, 1811 | "spell": "jiyuan", 1812 | "name": "济源" 1813 | }, 1814 | { 1815 | "id": 550, 1816 | "spell": "juancheng", 1817 | "name": "鄄城" 1818 | }, 1819 | { 1820 | "id": 551, 1821 | "spell": "junan", 1822 | "name": "莒南" 1823 | }, 1824 | { 1825 | "id": 552, 1826 | "spell": "jurong", 1827 | "name": "句容" 1828 | }, 1829 | { 1830 | "id": 553, 1831 | "spell": "juxian", 1832 | "name": "莒县" 1833 | }, 1834 | { 1835 | "id": 554, 1836 | "spell": "juye", 1837 | "name": "巨野" 1838 | } 1839 | ], 1840 | "K": [ 1841 | { 1842 | "id": 25, 1843 | "spell": "kunming", 1844 | "name": "昆明" 1845 | }, 1846 | { 1847 | "id": 174, 1848 | "spell": "kaifeng", 1849 | "name": "开封" 1850 | }, 1851 | { 1852 | "id": 175, 1853 | "spell": "kashidi", 1854 | "name": "喀什地" 1855 | }, 1856 | { 1857 | "id": 176, 1858 | "spell": "kelamayi", 1859 | "name": "克拉玛依" 1860 | }, 1861 | { 1862 | "id": 177, 1863 | "spell": "kezile", 1864 | "name": "克孜勒" 1865 | }, 1866 | { 1867 | "id": 555, 1868 | "spell": "kaihua", 1869 | "name": "开化" 1870 | }, 1871 | { 1872 | "id": 556, 1873 | "spell": "kaiping", 1874 | "name": "开平" 1875 | }, 1876 | { 1877 | "id": 557, 1878 | "spell": "kaixian", 1879 | "name": "开县" 1880 | }, 1881 | { 1882 | "id": 558, 1883 | "spell": "kaiyang", 1884 | "name": "开阳" 1885 | }, 1886 | { 1887 | "id": 559, 1888 | "spell": "kangping", 1889 | "name": "康平" 1890 | }, 1891 | { 1892 | "id": 560, 1893 | "spell": "kenli", 1894 | "name": "垦利" 1895 | }, 1896 | { 1897 | "id": 561, 1898 | "spell": "kunshan", 1899 | "name": "昆山" 1900 | } 1901 | ], 1902 | "L": [ 1903 | { 1904 | "id": 26, 1905 | "spell": "lanzhou", 1906 | "name": "兰州" 1907 | }, 1908 | { 1909 | "id": 27, 1910 | "spell": "liuzhou", 1911 | "name": "柳州" 1912 | }, 1913 | { 1914 | "id": 28, 1915 | "spell": "luoyang", 1916 | "name": "洛阳" 1917 | }, 1918 | { 1919 | "id": 178, 1920 | "spell": "laibin", 1921 | "name": "来宾" 1922 | }, 1923 | { 1924 | "id": 179, 1925 | "spell": "laiwu", 1926 | "name": "莱芜" 1927 | }, 1928 | { 1929 | "id": 180, 1930 | "spell": "langfang", 1931 | "name": "廊坊" 1932 | }, 1933 | { 1934 | "id": 181, 1935 | "spell": "lasa", 1936 | "name": "拉萨" 1937 | }, 1938 | { 1939 | "id": 182, 1940 | "spell": "leshan", 1941 | "name": "乐山" 1942 | }, 1943 | { 1944 | "id": 183, 1945 | "spell": "liangshan", 1946 | "name": "凉山" 1947 | }, 1948 | { 1949 | "id": 184, 1950 | "spell": "lianyungang", 1951 | "name": "连云港" 1952 | }, 1953 | { 1954 | "id": 185, 1955 | "spell": "liaocheng", 1956 | "name": "聊城" 1957 | }, 1958 | { 1959 | "id": 186, 1960 | "spell": "liaoyang", 1961 | "name": "辽阳" 1962 | }, 1963 | { 1964 | "id": 187, 1965 | "spell": "liaoyuan", 1966 | "name": "辽源" 1967 | }, 1968 | { 1969 | "id": 188, 1970 | "spell": "lijiang", 1971 | "name": "丽江" 1972 | }, 1973 | { 1974 | "id": 189, 1975 | "spell": "lincang", 1976 | "name": "临沧" 1977 | }, 1978 | { 1979 | "id": 190, 1980 | "spell": "linfen", 1981 | "name": "临汾" 1982 | }, 1983 | { 1984 | "id": 191, 1985 | "spell": "linxia", 1986 | "name": "临夏" 1987 | }, 1988 | { 1989 | "id": 192, 1990 | "spell": "linyi", 1991 | "name": "临沂" 1992 | }, 1993 | { 1994 | "id": 193, 1995 | "spell": "linzhi", 1996 | "name": "林芝" 1997 | }, 1998 | { 1999 | "id": 194, 2000 | "spell": "lishui", 2001 | "name": "丽水" 2002 | }, 2003 | { 2004 | "id": 195, 2005 | "spell": "liuan", 2006 | "name": "六安" 2007 | }, 2008 | { 2009 | "id": 196, 2010 | "spell": "liupanshui", 2011 | "name": "六盘水" 2012 | }, 2013 | { 2014 | "id": 197, 2015 | "spell": "longnan", 2016 | "name": "陇南" 2017 | }, 2018 | { 2019 | "id": 198, 2020 | "spell": "longyan", 2021 | "name": "龙岩" 2022 | }, 2023 | { 2024 | "id": 199, 2025 | "spell": "loudi", 2026 | "name": "娄底" 2027 | }, 2028 | { 2029 | "id": 200, 2030 | "spell": "luohe", 2031 | "name": "漯河" 2032 | }, 2033 | { 2034 | "id": 201, 2035 | "spell": "luzhou", 2036 | "name": "泸州" 2037 | }, 2038 | { 2039 | "id": 202, 2040 | "spell": "lvliang", 2041 | "name": "吕梁" 2042 | }, 2043 | { 2044 | "id": 562, 2045 | "spell": "laian", 2046 | "name": "来安" 2047 | }, 2048 | { 2049 | "id": 563, 2050 | "spell": "laixi", 2051 | "name": "莱西" 2052 | }, 2053 | { 2054 | "id": 564, 2055 | "spell": "laiyang", 2056 | "name": "莱阳" 2057 | }, 2058 | { 2059 | "id": 565, 2060 | "spell": "laizhou", 2061 | "name": "莱州" 2062 | }, 2063 | { 2064 | "id": 566, 2065 | "spell": "langxi", 2066 | "name": "郎溪" 2067 | }, 2068 | { 2069 | "id": 567, 2070 | "spell": "lantian", 2071 | "name": "蓝田" 2072 | }, 2073 | { 2074 | "id": 568, 2075 | "spell": "lanxi", 2076 | "name": "兰溪" 2077 | }, 2078 | { 2079 | "id": 569, 2080 | "spell": "lean", 2081 | "name": "乐安" 2082 | }, 2083 | { 2084 | "id": 570, 2085 | "spell": "lechang", 2086 | "name": "乐昌" 2087 | }, 2088 | { 2089 | "id": 571, 2090 | "spell": "leizhou", 2091 | "name": "雷州" 2092 | }, 2093 | { 2094 | "id": 572, 2095 | "spell": "leling", 2096 | "name": "乐陵" 2097 | }, 2098 | { 2099 | "id": 573, 2100 | "spell": "leping", 2101 | "name": "乐平" 2102 | }, 2103 | { 2104 | "id": 574, 2105 | "spell": "leqing", 2106 | "name": "乐清" 2107 | }, 2108 | { 2109 | "id": 575, 2110 | "spell": "leting", 2111 | "name": "乐亭" 2112 | }, 2113 | { 2114 | "id": 576, 2115 | "spell": "liancheng", 2116 | "name": "连城" 2117 | }, 2118 | { 2119 | "id": 577, 2120 | "spell": "liangping", 2121 | "name": "梁平" 2122 | }, 2123 | { 2124 | "id": 578, 2125 | "spell": "liangshan", 2126 | "name": "梁山" 2127 | }, 2128 | { 2129 | "id": 579, 2130 | "spell": "lianhua", 2131 | "name": "莲花" 2132 | }, 2133 | { 2134 | "id": 580, 2135 | "spell": "lianjiang", 2136 | "name": "连江" 2137 | }, 2138 | { 2139 | "id": 581, 2140 | "spell": "lianjiang", 2141 | "name": "廉江" 2142 | }, 2143 | { 2144 | "id": 582, 2145 | "spell": "liannan", 2146 | "name": "连南" 2147 | }, 2148 | { 2149 | "id": 583, 2150 | "spell": "lianping", 2151 | "name": "连平" 2152 | }, 2153 | { 2154 | "id": 584, 2155 | "spell": "lianshan", 2156 | "name": "连山" 2157 | }, 2158 | { 2159 | "id": 585, 2160 | "spell": "lianshui", 2161 | "name": "涟水" 2162 | }, 2163 | { 2164 | "id": 586, 2165 | "spell": "lianzhou", 2166 | "name": "连州" 2167 | }, 2168 | { 2169 | "id": 587, 2170 | "spell": "liaozhong", 2171 | "name": "辽中" 2172 | }, 2173 | { 2174 | "id": 588, 2175 | "spell": "lichuan", 2176 | "name": "黎川" 2177 | }, 2178 | { 2179 | "id": 589, 2180 | "spell": "lijin", 2181 | "name": "利津" 2182 | }, 2183 | { 2184 | "id": 590, 2185 | "spell": "linan", 2186 | "name": "临安" 2187 | }, 2188 | { 2189 | "id": 591, 2190 | "spell": "lingbi", 2191 | "name": "灵璧" 2192 | }, 2193 | { 2194 | "id": 592, 2195 | "spell": "lingshou", 2196 | "name": "灵寿" 2197 | }, 2198 | { 2199 | "id": 593, 2200 | "spell": "lingxian", 2201 | "name": "陵县" 2202 | }, 2203 | { 2204 | "id": 594, 2205 | "spell": "linhai", 2206 | "name": "临海" 2207 | }, 2208 | { 2209 | "id": 595, 2210 | "spell": "linqing", 2211 | "name": "临清" 2212 | }, 2213 | { 2214 | "id": 596, 2215 | "spell": "linquan", 2216 | "name": "临泉" 2217 | }, 2218 | { 2219 | "id": 597, 2220 | "spell": "linqu", 2221 | "name": "临朐" 2222 | }, 2223 | { 2224 | "id": 598, 2225 | "spell": "linshu", 2226 | "name": "临沭" 2227 | }, 2228 | { 2229 | "id": 599, 2230 | "spell": "linyi", 2231 | "name": "临邑" 2232 | }, 2233 | { 2234 | "id": 600, 2235 | "spell": "lishui", 2236 | "name": "溧水" 2237 | }, 2238 | { 2239 | "id": 601, 2240 | "spell": "liucheng", 2241 | "name": "柳城" 2242 | }, 2243 | { 2244 | "id": 602, 2245 | "spell": "liujiang", 2246 | "name": "柳江" 2247 | }, 2248 | { 2249 | "id": 603, 2250 | "spell": "liuyang", 2251 | "name": "浏阳" 2252 | }, 2253 | { 2254 | "id": 604, 2255 | "spell": "lixin", 2256 | "name": "利辛" 2257 | }, 2258 | { 2259 | "id": 605, 2260 | "spell": "liyang", 2261 | "name": "溧阳" 2262 | }, 2263 | { 2264 | "id": 606, 2265 | "spell": "longan", 2266 | "name": "隆安" 2267 | }, 2268 | { 2269 | "id": 607, 2270 | "spell": "longchuan", 2271 | "name": "龙川" 2272 | }, 2273 | { 2274 | "id": 608, 2275 | "spell": "longhai", 2276 | "name": "龙海" 2277 | }, 2278 | { 2279 | "id": 609, 2280 | "spell": "longkou", 2281 | "name": "龙口" 2282 | }, 2283 | { 2284 | "id": 610, 2285 | "spell": "longmen", 2286 | "name": "龙门" 2287 | }, 2288 | { 2289 | "id": 611, 2290 | "spell": "longnan", 2291 | "name": "龙南" 2292 | }, 2293 | { 2294 | "id": 612, 2295 | "spell": "longquan", 2296 | "name": "龙泉" 2297 | }, 2298 | { 2299 | "id": 613, 2300 | "spell": "longyou", 2301 | "name": "龙游" 2302 | }, 2303 | { 2304 | "id": 614, 2305 | "spell": "luancheng", 2306 | "name": "栾城" 2307 | }, 2308 | { 2309 | "id": 615, 2310 | "spell": "luanchuan", 2311 | "name": "栾川" 2312 | }, 2313 | { 2314 | "id": 616, 2315 | "spell": "luannan", 2316 | "name": "滦南" 2317 | }, 2318 | { 2319 | "id": 617, 2320 | "spell": "luanxian", 2321 | "name": "滦县" 2322 | }, 2323 | { 2324 | "id": 618, 2325 | "spell": "lufeng", 2326 | "name": "陆丰" 2327 | }, 2328 | { 2329 | "id": 619, 2330 | "spell": "luhe", 2331 | "name": "陆河" 2332 | }, 2333 | { 2334 | "id": 620, 2335 | "spell": "lujiang", 2336 | "name": "庐江" 2337 | }, 2338 | { 2339 | "id": 621, 2340 | "spell": "luoding", 2341 | "name": "罗定" 2342 | }, 2343 | { 2344 | "id": 622, 2345 | "spell": "luoning", 2346 | "name": "洛宁" 2347 | }, 2348 | { 2349 | "id": 623, 2350 | "spell": "luoyuan", 2351 | "name": "罗源" 2352 | }, 2353 | { 2354 | "id": 624, 2355 | "spell": "luquan", 2356 | "name": "鹿泉" 2357 | }, 2358 | { 2359 | "id": 625, 2360 | "spell": "luquan", 2361 | "name": "禄劝" 2362 | }, 2363 | { 2364 | "id": 626, 2365 | "spell": "luxi", 2366 | "name": "芦溪" 2367 | }, 2368 | { 2369 | "id": 627, 2370 | "spell": "luzhai", 2371 | "name": "鹿寨" 2372 | } 2373 | ], 2374 | "M": [ 2375 | { 2376 | "id": 203, 2377 | "spell": "maanshan", 2378 | "name": "马鞍山" 2379 | }, 2380 | { 2381 | "id": 204, 2382 | "spell": "maoming", 2383 | "name": "茂名" 2384 | }, 2385 | { 2386 | "id": 205, 2387 | "spell": "meishan", 2388 | "name": "眉山" 2389 | }, 2390 | { 2391 | "id": 206, 2392 | "spell": "meizhou", 2393 | "name": "梅州" 2394 | }, 2395 | { 2396 | "id": 207, 2397 | "spell": "mianyang", 2398 | "name": "绵阳" 2399 | }, 2400 | { 2401 | "id": 208, 2402 | "spell": "mudanjiang", 2403 | "name": "牡丹江" 2404 | }, 2405 | { 2406 | "id": 628, 2407 | "spell": "mashan", 2408 | "name": "马山" 2409 | }, 2410 | { 2411 | "id": 629, 2412 | "spell": "meixian", 2413 | "name": "梅县" 2414 | }, 2415 | { 2416 | "id": 630, 2417 | "spell": "mengcheng", 2418 | "name": "蒙城" 2419 | }, 2420 | { 2421 | "id": 631, 2422 | "spell": "mengjin", 2423 | "name": "孟津" 2424 | }, 2425 | { 2426 | "id": 632, 2427 | "spell": "mengyin", 2428 | "name": "蒙阴" 2429 | }, 2430 | { 2431 | "id": 633, 2432 | "spell": "mengzhou", 2433 | "name": "孟州" 2434 | }, 2435 | { 2436 | "id": 634, 2437 | "spell": "mingguang", 2438 | "name": "明光" 2439 | }, 2440 | { 2441 | "id": 635, 2442 | "spell": "mingxi", 2443 | "name": "明溪" 2444 | }, 2445 | { 2446 | "id": 636, 2447 | "spell": "minhou", 2448 | "name": "闽侯" 2449 | }, 2450 | { 2451 | "id": 637, 2452 | "spell": "minqing", 2453 | "name": "闽清" 2454 | }, 2455 | { 2456 | "id": 638, 2457 | "spell": "mulan", 2458 | "name": "木兰" 2459 | } 2460 | ], 2461 | "N": [ 2462 | { 2463 | "id": 29, 2464 | "spell": "nanchang", 2465 | "name": "南昌" 2466 | }, 2467 | { 2468 | "id": 30, 2469 | "spell": "nanjing", 2470 | "name": "南京" 2471 | }, 2472 | { 2473 | "id": 31, 2474 | "spell": "nanning", 2475 | "name": "南宁" 2476 | }, 2477 | { 2478 | "id": 32, 2479 | "spell": "nantong", 2480 | "name": "南通" 2481 | }, 2482 | { 2483 | "id": 33, 2484 | "spell": "ningbo", 2485 | "name": "宁波" 2486 | }, 2487 | { 2488 | "id": 209, 2489 | "spell": "nanchong", 2490 | "name": "南充" 2491 | }, 2492 | { 2493 | "id": 210, 2494 | "spell": "nanping", 2495 | "name": "南平" 2496 | }, 2497 | { 2498 | "id": 211, 2499 | "spell": "nanyang", 2500 | "name": "南阳" 2501 | }, 2502 | { 2503 | "id": 212, 2504 | "spell": "naqu", 2505 | "name": "那曲" 2506 | }, 2507 | { 2508 | "id": 213, 2509 | "spell": "neijiang", 2510 | "name": "内江" 2511 | }, 2512 | { 2513 | "id": 214, 2514 | "spell": "ningde", 2515 | "name": "宁德" 2516 | }, 2517 | { 2518 | "id": 215, 2519 | "spell": "nujiang", 2520 | "name": "怒江" 2521 | }, 2522 | { 2523 | "id": 639, 2524 | "spell": "nanan", 2525 | "name": "南安" 2526 | }, 2527 | { 2528 | "id": 640, 2529 | "spell": "nanao", 2530 | "name": "南澳" 2531 | }, 2532 | { 2533 | "id": 641, 2534 | "spell": "nancheng", 2535 | "name": "南城" 2536 | }, 2537 | { 2538 | "id": 642, 2539 | "spell": "nanchuan", 2540 | "name": "南川" 2541 | }, 2542 | { 2543 | "id": 643, 2544 | "spell": "nanfeng", 2545 | "name": "南丰" 2546 | }, 2547 | { 2548 | "id": 644, 2549 | "spell": "nanjing", 2550 | "name": "南靖" 2551 | }, 2552 | { 2553 | "id": 645, 2554 | "spell": "nankang", 2555 | "name": "南康" 2556 | }, 2557 | { 2558 | "id": 646, 2559 | "spell": "nanling", 2560 | "name": "南陵" 2561 | }, 2562 | { 2563 | "id": 647, 2564 | "spell": "nanxiong", 2565 | "name": "南雄" 2566 | }, 2567 | { 2568 | "id": 648, 2569 | "spell": "ningdu", 2570 | "name": "宁都" 2571 | }, 2572 | { 2573 | "id": 649, 2574 | "spell": "ningguo", 2575 | "name": "宁国" 2576 | }, 2577 | { 2578 | "id": 650, 2579 | "spell": "ninghai", 2580 | "name": "宁海" 2581 | }, 2582 | { 2583 | "id": 651, 2584 | "spell": "ninghua", 2585 | "name": "宁化" 2586 | }, 2587 | { 2588 | "id": 652, 2589 | "spell": "ningjin", 2590 | "name": "宁津" 2591 | }, 2592 | { 2593 | "id": 653, 2594 | "spell": "ningxiang", 2595 | "name": "宁乡" 2596 | }, 2597 | { 2598 | "id": 654, 2599 | "spell": "ningyang", 2600 | "name": "宁阳" 2601 | }, 2602 | { 2603 | "id": 655, 2604 | "spell": "nongan", 2605 | "name": "农安" 2606 | } 2607 | ], 2608 | "P": [ 2609 | { 2610 | "id": 216, 2611 | "spell": "panjin", 2612 | "name": "盘锦" 2613 | }, 2614 | { 2615 | "id": 217, 2616 | "spell": "panzhihua", 2617 | "name": "攀枝花" 2618 | }, 2619 | { 2620 | "id": 218, 2621 | "spell": "pingdingshan", 2622 | "name": "平顶山" 2623 | }, 2624 | { 2625 | "id": 219, 2626 | "spell": "pingliang", 2627 | "name": "平凉" 2628 | }, 2629 | { 2630 | "id": 220, 2631 | "spell": "pingxiang", 2632 | "name": "萍乡" 2633 | }, 2634 | { 2635 | "id": 221, 2636 | "spell": "puer", 2637 | "name": "普洱" 2638 | }, 2639 | { 2640 | "id": 222, 2641 | "spell": "putian", 2642 | "name": "莆田" 2643 | }, 2644 | { 2645 | "id": 223, 2646 | "spell": "puyang", 2647 | "name": "濮阳" 2648 | }, 2649 | { 2650 | "id": 656, 2651 | "spell": "panan", 2652 | "name": "磐安" 2653 | }, 2654 | { 2655 | "id": 657, 2656 | "spell": "panshi", 2657 | "name": "磐石" 2658 | }, 2659 | { 2660 | "id": 658, 2661 | "spell": "peixian", 2662 | "name": "沛县" 2663 | }, 2664 | { 2665 | "id": 659, 2666 | "spell": "penglai", 2667 | "name": "蓬莱" 2668 | }, 2669 | { 2670 | "id": 660, 2671 | "spell": "pengshui", 2672 | "name": "彭水" 2673 | }, 2674 | { 2675 | "id": 661, 2676 | "spell": "pengze", 2677 | "name": "彭泽" 2678 | }, 2679 | { 2680 | "id": 662, 2681 | "spell": "pengzhou", 2682 | "name": "彭州" 2683 | }, 2684 | { 2685 | "id": 663, 2686 | "spell": "pingdu", 2687 | "name": "平度" 2688 | }, 2689 | { 2690 | "id": 664, 2691 | "spell": "pinghe", 2692 | "name": "平和" 2693 | }, 2694 | { 2695 | "id": 665, 2696 | "spell": "pinghu", 2697 | "name": "平湖" 2698 | }, 2699 | { 2700 | "id": 666, 2701 | "spell": "pingnan", 2702 | "name": "屏南" 2703 | }, 2704 | { 2705 | "id": 667, 2706 | "spell": "pingshan", 2707 | "name": "平山" 2708 | }, 2709 | { 2710 | "id": 668, 2711 | "spell": "pingtan", 2712 | "name": "平潭" 2713 | }, 2714 | { 2715 | "id": 669, 2716 | "spell": "pingyang", 2717 | "name": "平阳" 2718 | }, 2719 | { 2720 | "id": 670, 2721 | "spell": "pingyin", 2722 | "name": "平阴" 2723 | }, 2724 | { 2725 | "id": 671, 2726 | "spell": "pingyi", 2727 | "name": "平邑" 2728 | }, 2729 | { 2730 | "id": 672, 2731 | "spell": "pingyuan", 2732 | "name": "平原" 2733 | }, 2734 | { 2735 | "id": 673, 2736 | "spell": "pingyuan", 2737 | "name": "平远" 2738 | }, 2739 | { 2740 | "id": 674, 2741 | "spell": "pixian", 2742 | "name": "郫县" 2743 | }, 2744 | { 2745 | "id": 675, 2746 | "spell": "pizhou", 2747 | "name": "邳州" 2748 | }, 2749 | { 2750 | "id": 676, 2751 | "spell": "poyang", 2752 | "name": "鄱阳" 2753 | }, 2754 | { 2755 | "id": 677, 2756 | "spell": "pucheng", 2757 | "name": "浦城" 2758 | }, 2759 | { 2760 | "id": 678, 2761 | "spell": "pujiang", 2762 | "name": "浦江" 2763 | }, 2764 | { 2765 | "id": 679, 2766 | "spell": "pujiang", 2767 | "name": "蒲江" 2768 | }, 2769 | { 2770 | "id": 680, 2771 | "spell": "pulandian", 2772 | "name": "普兰店" 2773 | }, 2774 | { 2775 | "id": 681, 2776 | "spell": "puning", 2777 | "name": "普宁" 2778 | } 2779 | ], 2780 | "Q": [ 2781 | { 2782 | "id": 34, 2783 | "spell": "qingdao", 2784 | "name": "青岛" 2785 | }, 2786 | { 2787 | "id": 35, 2788 | "spell": "quanzhou", 2789 | "name": "泉州" 2790 | }, 2791 | { 2792 | "id": 224, 2793 | "spell": "qiandong", 2794 | "name": "黔东" 2795 | }, 2796 | { 2797 | "id": 225, 2798 | "spell": "qiannan", 2799 | "name": "黔南" 2800 | }, 2801 | { 2802 | "id": 226, 2803 | "spell": "qianxinan", 2804 | "name": "黔西南" 2805 | }, 2806 | { 2807 | "id": 227, 2808 | "spell": "qingyang", 2809 | "name": "庆阳" 2810 | }, 2811 | { 2812 | "id": 228, 2813 | "spell": "qingyuan", 2814 | "name": "清远" 2815 | }, 2816 | { 2817 | "id": 229, 2818 | "spell": "qinhuangdao", 2819 | "name": "秦皇岛" 2820 | }, 2821 | { 2822 | "id": 230, 2823 | "spell": "qinzhou", 2824 | "name": "钦州" 2825 | }, 2826 | { 2827 | "id": 231, 2828 | "spell": "qiqihaer", 2829 | "name": "齐齐哈尔" 2830 | }, 2831 | { 2832 | "id": 232, 2833 | "spell": "qitaihe", 2834 | "name": "七台河" 2835 | }, 2836 | { 2837 | "id": 233, 2838 | "spell": "qujing", 2839 | "name": "曲靖" 2840 | }, 2841 | { 2842 | "id": 234, 2843 | "spell": "quzhou", 2844 | "name": "衢州" 2845 | }, 2846 | { 2847 | "id": 682, 2848 | "spell": "qianan", 2849 | "name": "迁安" 2850 | }, 2851 | { 2852 | "id": 683, 2853 | "spell": "qianshan", 2854 | "name": "潜山" 2855 | }, 2856 | { 2857 | "id": 684, 2858 | "spell": "qianshan", 2859 | "name": "铅山" 2860 | }, 2861 | { 2862 | "id": 685, 2863 | "spell": "qianxi", 2864 | "name": "迁西" 2865 | }, 2866 | { 2867 | "id": 686, 2868 | "spell": "qidong", 2869 | "name": "启东" 2870 | }, 2871 | { 2872 | "id": 687, 2873 | "spell": "qihe", 2874 | "name": "齐河" 2875 | }, 2876 | { 2877 | "id": 688, 2878 | "spell": "qijiang", 2879 | "name": "綦江" 2880 | }, 2881 | { 2882 | "id": 689, 2883 | "spell": "qimen", 2884 | "name": "祁门" 2885 | }, 2886 | { 2887 | "id": 690, 2888 | "spell": "qingliu", 2889 | "name": "清流" 2890 | }, 2891 | { 2892 | "id": 691, 2893 | "spell": "qingtian", 2894 | "name": "青田" 2895 | }, 2896 | { 2897 | "id": 692, 2898 | "spell": "qingxin", 2899 | "name": "清新" 2900 | }, 2901 | { 2902 | "id": 693, 2903 | "spell": "qingyang", 2904 | "name": "青阳" 2905 | }, 2906 | { 2907 | "id": 694, 2908 | "spell": "qingyuan", 2909 | "name": "庆元" 2910 | }, 2911 | { 2912 | "id": 695, 2913 | "spell": "qingyun", 2914 | "name": "庆云" 2915 | }, 2916 | { 2917 | "id": 696, 2918 | "spell": "qingzhen", 2919 | "name": "清镇" 2920 | }, 2921 | { 2922 | "id": 697, 2923 | "spell": "qingzhou", 2924 | "name": "青州" 2925 | }, 2926 | { 2927 | "id": 698, 2928 | "spell": "qinyang", 2929 | "name": "沁阳" 2930 | }, 2931 | { 2932 | "id": 699, 2933 | "spell": "qionglai", 2934 | "name": "邛崃" 2935 | }, 2936 | { 2937 | "id": 700, 2938 | "spell": "qixia", 2939 | "name": "栖霞" 2940 | }, 2941 | { 2942 | "id": 701, 2943 | "spell": "quanjiao", 2944 | "name": "全椒" 2945 | }, 2946 | { 2947 | "id": 702, 2948 | "spell": "quannan", 2949 | "name": "全南" 2950 | }, 2951 | { 2952 | "id": 703, 2953 | "spell": "qufu", 2954 | "name": "曲阜" 2955 | }, 2956 | { 2957 | "id": 704, 2958 | "spell": "qujiang", 2959 | "name": "曲江" 2960 | } 2961 | ], 2962 | "R": [ 2963 | { 2964 | "id": 235, 2965 | "spell": "rikaze", 2966 | "name": "日喀则" 2967 | }, 2968 | { 2969 | "id": 236, 2970 | "spell": "rizhao", 2971 | "name": "日照" 2972 | }, 2973 | { 2974 | "id": 705, 2975 | "spell": "raoping", 2976 | "name": "饶平" 2977 | }, 2978 | { 2979 | "id": 706, 2980 | "spell": "renhua", 2981 | "name": "仁化" 2982 | }, 2983 | { 2984 | "id": 707, 2985 | "spell": "rongan", 2986 | "name": "融安" 2987 | }, 2988 | { 2989 | "id": 708, 2990 | "spell": "rongchang", 2991 | "name": "荣昌" 2992 | }, 2993 | { 2994 | "id": 709, 2995 | "spell": "rongcheng", 2996 | "name": "荣成" 2997 | }, 2998 | { 2999 | "id": 710, 3000 | "spell": "rongshui", 3001 | "name": "融水" 3002 | }, 3003 | { 3004 | "id": 711, 3005 | "spell": "rudong", 3006 | "name": "如东" 3007 | }, 3008 | { 3009 | "id": 712, 3010 | "spell": "rugao", 3011 | "name": "如皋" 3012 | }, 3013 | { 3014 | "id": 713, 3015 | "spell": "ruian", 3016 | "name": "瑞安" 3017 | }, 3018 | { 3019 | "id": 714, 3020 | "spell": "ruichang", 3021 | "name": "瑞昌" 3022 | }, 3023 | { 3024 | "id": 715, 3025 | "spell": "ruijin", 3026 | "name": "瑞金" 3027 | }, 3028 | { 3029 | "id": 716, 3030 | "spell": "rushan", 3031 | "name": "乳山" 3032 | }, 3033 | { 3034 | "id": 717, 3035 | "spell": "ruyang", 3036 | "name": "汝阳" 3037 | }, 3038 | { 3039 | "id": 718, 3040 | "spell": "ruyuan", 3041 | "name": "乳源" 3042 | } 3043 | ], 3044 | "S": [ 3045 | { 3046 | "id": 3, 3047 | "spell": "shanghai", 3048 | "name": "上海" 3049 | }, 3050 | { 3051 | "id": 36, 3052 | "spell": "shenyang", 3053 | "name": "沈阳" 3054 | }, 3055 | { 3056 | "id": 37, 3057 | "spell": "shenzhen", 3058 | "name": "深圳" 3059 | }, 3060 | { 3061 | "id": 38, 3062 | "spell": "shijiazhuang", 3063 | "name": "石家庄" 3064 | }, 3065 | { 3066 | "id": 39, 3067 | "spell": "suzhou", 3068 | "name": "苏州" 3069 | }, 3070 | { 3071 | "id": 237, 3072 | "spell": "sanmenxia", 3073 | "name": "三门峡" 3074 | }, 3075 | { 3076 | "id": 238, 3077 | "spell": "sanming", 3078 | "name": "三明" 3079 | }, 3080 | { 3081 | "id": 239, 3082 | "spell": "sanya", 3083 | "name": "三亚" 3084 | }, 3085 | { 3086 | "id": 240, 3087 | "spell": "shangluo", 3088 | "name": "商洛" 3089 | }, 3090 | { 3091 | "id": 241, 3092 | "spell": "shangqiu", 3093 | "name": "商丘" 3094 | }, 3095 | { 3096 | "id": 242, 3097 | "spell": "shangrao", 3098 | "name": "上饶" 3099 | }, 3100 | { 3101 | "id": 243, 3102 | "spell": "shannan", 3103 | "name": "山南" 3104 | }, 3105 | { 3106 | "id": 244, 3107 | "spell": "shantou", 3108 | "name": "汕头" 3109 | }, 3110 | { 3111 | "id": 245, 3112 | "spell": "shanwei", 3113 | "name": "汕尾" 3114 | }, 3115 | { 3116 | "id": 246, 3117 | "spell": "shaoguan", 3118 | "name": "韶关" 3119 | }, 3120 | { 3121 | "id": 247, 3122 | "spell": "shaoxing", 3123 | "name": "绍兴" 3124 | }, 3125 | { 3126 | "id": 248, 3127 | "spell": "shaoyang", 3128 | "name": "邵阳" 3129 | }, 3130 | { 3131 | "id": 249, 3132 | "spell": "shiyan", 3133 | "name": "十堰" 3134 | }, 3135 | { 3136 | "id": 250, 3137 | "spell": "shizuishan", 3138 | "name": "石嘴山" 3139 | }, 3140 | { 3141 | "id": 251, 3142 | "spell": "shuangyashan", 3143 | "name": "双鸭山" 3144 | }, 3145 | { 3146 | "id": 252, 3147 | "spell": "shuozhou", 3148 | "name": "朔州" 3149 | }, 3150 | { 3151 | "id": 253, 3152 | "spell": "siping", 3153 | "name": "四平" 3154 | }, 3155 | { 3156 | "id": 254, 3157 | "spell": "songyuan", 3158 | "name": "松原" 3159 | }, 3160 | { 3161 | "id": 255, 3162 | "spell": "suihua", 3163 | "name": "绥化" 3164 | }, 3165 | { 3166 | "id": 256, 3167 | "spell": "suining", 3168 | "name": "遂宁" 3169 | }, 3170 | { 3171 | "id": 257, 3172 | "spell": "suizhou", 3173 | "name": "随州" 3174 | }, 3175 | { 3176 | "id": 258, 3177 | "spell": "suqian", 3178 | "name": "宿迁" 3179 | }, 3180 | { 3181 | "id": 259, 3182 | "spell": "suzhou", 3183 | "name": "宿州" 3184 | }, 3185 | { 3186 | "id": 719, 3187 | "spell": "sanjiang", 3188 | "name": "三江" 3189 | }, 3190 | { 3191 | "id": 720, 3192 | "spell": "sanmen", 3193 | "name": "三门" 3194 | }, 3195 | { 3196 | "id": 721, 3197 | "spell": "saoan", 3198 | "name": "诏安" 3199 | }, 3200 | { 3201 | "id": 722, 3202 | "spell": "shanggao", 3203 | "name": "上高" 3204 | }, 3205 | { 3206 | "id": 723, 3207 | "spell": "shanghang", 3208 | "name": "上杭" 3209 | }, 3210 | { 3211 | "id": 724, 3212 | "spell": "shanghe", 3213 | "name": "商河" 3214 | }, 3215 | { 3216 | "id": 725, 3217 | "spell": "shangli", 3218 | "name": "上栗" 3219 | }, 3220 | { 3221 | "id": 726, 3222 | "spell": "shanglin", 3223 | "name": "上林" 3224 | }, 3225 | { 3226 | "id": 727, 3227 | "spell": "shangrao", 3228 | "name": "上饶" 3229 | }, 3230 | { 3231 | "id": 728, 3232 | "spell": "shangyou", 3233 | "name": "上犹" 3234 | }, 3235 | { 3236 | "id": 729, 3237 | "spell": "shangyu", 3238 | "name": "上虞" 3239 | }, 3240 | { 3241 | "id": 730, 3242 | "spell": "shangzhi", 3243 | "name": "尚志" 3244 | }, 3245 | { 3246 | "id": 731, 3247 | "spell": "shaowu", 3248 | "name": "邵武" 3249 | }, 3250 | { 3251 | "id": 732, 3252 | "spell": "shaoxing", 3253 | "name": "绍兴" 3254 | }, 3255 | { 3256 | "id": 733, 3257 | "spell": "shaxian", 3258 | "name": "沙县" 3259 | }, 3260 | { 3261 | "id": 734, 3262 | "spell": "shengsi", 3263 | "name": "嵊泗" 3264 | }, 3265 | { 3266 | "id": 735, 3267 | "spell": "shengzhou", 3268 | "name": "嵊州" 3269 | }, 3270 | { 3271 | "id": 736, 3272 | "spell": "shenxian", 3273 | "name": "莘县" 3274 | }, 3275 | { 3276 | "id": 737, 3277 | "spell": "shenze", 3278 | "name": "深泽" 3279 | }, 3280 | { 3281 | "id": 738, 3282 | "spell": "shexian", 3283 | "name": "歙县" 3284 | }, 3285 | { 3286 | "id": 739, 3287 | "spell": "sheyang", 3288 | "name": "射阳" 3289 | }, 3290 | { 3291 | "id": 740, 3292 | "spell": "shicheng", 3293 | "name": "石城" 3294 | }, 3295 | { 3296 | "id": 741, 3297 | "spell": "shilin", 3298 | "name": "石林" 3299 | }, 3300 | { 3301 | "id": 742, 3302 | "spell": "shishi", 3303 | "name": "石狮" 3304 | }, 3305 | { 3306 | "id": 743, 3307 | "spell": "shitai", 3308 | "name": "石台" 3309 | }, 3310 | { 3311 | "id": 744, 3312 | "spell": "shixing", 3313 | "name": "始兴" 3314 | }, 3315 | { 3316 | "id": 745, 3317 | "spell": "shizhu", 3318 | "name": "石柱" 3319 | }, 3320 | { 3321 | "id": 746, 3322 | "spell": "shouguang", 3323 | "name": "寿光" 3324 | }, 3325 | { 3326 | "id": 747, 3327 | "spell": "shouning", 3328 | "name": "寿宁" 3329 | }, 3330 | { 3331 | "id": 748, 3332 | "spell": "shouxian", 3333 | "name": "寿县" 3334 | }, 3335 | { 3336 | "id": 749, 3337 | "spell": "shuangcheng", 3338 | "name": "双城" 3339 | }, 3340 | { 3341 | "id": 750, 3342 | "spell": "shuangliu", 3343 | "name": "双流" 3344 | }, 3345 | { 3346 | "id": 751, 3347 | "spell": "shucheng", 3348 | "name": "舒城" 3349 | }, 3350 | { 3351 | "id": 752, 3352 | "spell": "shulan", 3353 | "name": "舒兰" 3354 | }, 3355 | { 3356 | "id": 753, 3357 | "spell": "shunchang", 3358 | "name": "顺昌" 3359 | }, 3360 | { 3361 | "id": 754, 3362 | "spell": "shuyang", 3363 | "name": "沭阳" 3364 | }, 3365 | { 3366 | "id": 755, 3367 | "spell": "sihong", 3368 | "name": "泗洪" 3369 | }, 3370 | { 3371 | "id": 756, 3372 | "spell": "sihui", 3373 | "name": "四会" 3374 | }, 3375 | { 3376 | "id": 757, 3377 | "spell": "sishui", 3378 | "name": "泗水" 3379 | }, 3380 | { 3381 | "id": 758, 3382 | "spell": "sixian", 3383 | "name": "泗县" 3384 | }, 3385 | { 3386 | "id": 759, 3387 | "spell": "siyang", 3388 | "name": "泗阳" 3389 | }, 3390 | { 3391 | "id": 760, 3392 | "spell": "songming", 3393 | "name": "嵩明" 3394 | }, 3395 | { 3396 | "id": 761, 3397 | "spell": "songxi", 3398 | "name": "松溪" 3399 | }, 3400 | { 3401 | "id": 762, 3402 | "spell": "songxian", 3403 | "name": "嵩县" 3404 | }, 3405 | { 3406 | "id": 763, 3407 | "spell": "songyang", 3408 | "name": "松阳" 3409 | }, 3410 | { 3411 | "id": 764, 3412 | "spell": "suichang", 3413 | "name": "遂昌" 3414 | }, 3415 | { 3416 | "id": 765, 3417 | "spell": "suichuan", 3418 | "name": "遂川" 3419 | }, 3420 | { 3421 | "id": 766, 3422 | "spell": "suining", 3423 | "name": "睢宁" 3424 | }, 3425 | { 3426 | "id": 767, 3427 | "spell": "suixi", 3428 | "name": "濉溪" 3429 | }, 3430 | { 3431 | "id": 768, 3432 | "spell": "suixi", 3433 | "name": "遂溪" 3434 | }, 3435 | { 3436 | "id": 769, 3437 | "spell": "susong", 3438 | "name": "宿松" 3439 | }, 3440 | { 3441 | "id": 770, 3442 | "spell": "suyu", 3443 | "name": "宿豫" 3444 | } 3445 | ], 3446 | "T": [ 3447 | { 3448 | "id": 4, 3449 | "spell": "tianjin", 3450 | "name": "天津" 3451 | }, 3452 | { 3453 | "id": 40, 3454 | "spell": "taizhou", 3455 | "name": "台州" 3456 | }, 3457 | { 3458 | "id": 41, 3459 | "spell": "tangshan", 3460 | "name": "唐山" 3461 | }, 3462 | { 3463 | "id": 260, 3464 | "spell": "tachengdi", 3465 | "name": "塔城地" 3466 | }, 3467 | { 3468 | "id": 261, 3469 | "spell": "taian", 3470 | "name": "泰安" 3471 | }, 3472 | { 3473 | "id": 262, 3474 | "spell": "taiyuan", 3475 | "name": "太原" 3476 | }, 3477 | { 3478 | "id": 263, 3479 | "spell": "taizhou", 3480 | "name": "泰州" 3481 | }, 3482 | { 3483 | "id": 264, 3484 | "spell": "tianshui", 3485 | "name": "天水" 3486 | }, 3487 | { 3488 | "id": 265, 3489 | "spell": "tieling", 3490 | "name": "铁岭" 3491 | }, 3492 | { 3493 | "id": 266, 3494 | "spell": "tongchuan", 3495 | "name": "铜川" 3496 | }, 3497 | { 3498 | "id": 267, 3499 | "spell": "tonghua", 3500 | "name": "通化" 3501 | }, 3502 | { 3503 | "id": 268, 3504 | "spell": "tongliao", 3505 | "name": "通辽" 3506 | }, 3507 | { 3508 | "id": 269, 3509 | "spell": "tongling", 3510 | "name": "铜陵" 3511 | }, 3512 | { 3513 | "id": 270, 3514 | "spell": "tongren", 3515 | "name": "铜仁" 3516 | }, 3517 | { 3518 | "id": 271, 3519 | "spell": "tulufan", 3520 | "name": "吐鲁番" 3521 | }, 3522 | { 3523 | "id": 771, 3524 | "spell": "taicang", 3525 | "name": "太仓" 3526 | }, 3527 | { 3528 | "id": 772, 3529 | "spell": "taihe", 3530 | "name": "太和" 3531 | }, 3532 | { 3533 | "id": 773, 3534 | "spell": "taihe", 3535 | "name": "泰和" 3536 | }, 3537 | { 3538 | "id": 774, 3539 | "spell": "taihu", 3540 | "name": "太湖" 3541 | }, 3542 | { 3543 | "id": 775, 3544 | "spell": "taining", 3545 | "name": "泰宁" 3546 | }, 3547 | { 3548 | "id": 776, 3549 | "spell": "taishan", 3550 | "name": "台山" 3551 | }, 3552 | { 3553 | "id": 777, 3554 | "spell": "taishun", 3555 | "name": "泰顺" 3556 | }, 3557 | { 3558 | "id": 778, 3559 | "spell": "taixing", 3560 | "name": "泰兴" 3561 | }, 3562 | { 3563 | "id": 779, 3564 | "spell": "tancheng", 3565 | "name": "郯城" 3566 | }, 3567 | { 3568 | "id": 780, 3569 | "spell": "tanghai", 3570 | "name": "唐海" 3571 | }, 3572 | { 3573 | "id": 781, 3574 | "spell": "tengzhou", 3575 | "name": "滕州" 3576 | }, 3577 | { 3578 | "id": 782, 3579 | "spell": "tianchang", 3580 | "name": "天长" 3581 | }, 3582 | { 3583 | "id": 783, 3584 | "spell": "tiantai", 3585 | "name": "天台" 3586 | }, 3587 | { 3588 | "id": 784, 3589 | "spell": "tongcheng", 3590 | "name": "桐城" 3591 | }, 3592 | { 3593 | "id": 785, 3594 | "spell": "tonggu", 3595 | "name": "铜鼓" 3596 | }, 3597 | { 3598 | "id": 786, 3599 | "spell": "tonghe", 3600 | "name": "通河" 3601 | }, 3602 | { 3603 | "id": 787, 3604 | "spell": "tongliang", 3605 | "name": "铜梁" 3606 | }, 3607 | { 3608 | "id": 788, 3609 | "spell": "tongling", 3610 | "name": "铜陵" 3611 | }, 3612 | { 3613 | "id": 789, 3614 | "spell": "tonglu", 3615 | "name": "桐庐" 3616 | }, 3617 | { 3618 | "id": 790, 3619 | "spell": "tongnan", 3620 | "name": "潼南" 3621 | }, 3622 | { 3623 | "id": 791, 3624 | "spell": "tongshan", 3625 | "name": "铜山" 3626 | }, 3627 | { 3628 | "id": 792, 3629 | "spell": "tongxiang", 3630 | "name": "桐乡" 3631 | }, 3632 | { 3633 | "id": 793, 3634 | "spell": "tongzhou", 3635 | "name": "通州" 3636 | } 3637 | ], 3638 | "W": [ 3639 | { 3640 | "id": 42, 3641 | "spell": "weifang", 3642 | "name": "潍坊" 3643 | }, 3644 | { 3645 | "id": 43, 3646 | "spell": "weihai", 3647 | "name": "威海" 3648 | }, 3649 | { 3650 | "id": 44, 3651 | "spell": "wuhan", 3652 | "name": "武汉" 3653 | }, 3654 | { 3655 | "id": 45, 3656 | "spell": "wuxi", 3657 | "name": "无锡" 3658 | }, 3659 | { 3660 | "id": 272, 3661 | "spell": "weinan", 3662 | "name": "渭南" 3663 | }, 3664 | { 3665 | "id": 273, 3666 | "spell": "wenshan", 3667 | "name": "文山" 3668 | }, 3669 | { 3670 | "id": 274, 3671 | "spell": "wenzhou", 3672 | "name": "温州" 3673 | }, 3674 | { 3675 | "id": 275, 3676 | "spell": "wuhai", 3677 | "name": "乌海" 3678 | }, 3679 | { 3680 | "id": 276, 3681 | "spell": "wuhu", 3682 | "name": "芜湖" 3683 | }, 3684 | { 3685 | "id": 277, 3686 | "spell": "wulanchabu", 3687 | "name": "乌兰察布" 3688 | }, 3689 | { 3690 | "id": 278, 3691 | "spell": "wulumuqi", 3692 | "name": "乌鲁木齐" 3693 | }, 3694 | { 3695 | "id": 279, 3696 | "spell": "wuwei", 3697 | "name": "武威" 3698 | }, 3699 | { 3700 | "id": 280, 3701 | "spell": "wuzhong", 3702 | "name": "吴忠" 3703 | }, 3704 | { 3705 | "id": 281, 3706 | "spell": "wuzhou", 3707 | "name": "梧州" 3708 | }, 3709 | { 3710 | "id": 794, 3711 | "spell": "wafangdian", 3712 | "name": "瓦房店" 3713 | }, 3714 | { 3715 | "id": 795, 3716 | "spell": "wanan", 3717 | "name": "万安" 3718 | }, 3719 | { 3720 | "id": 796, 3721 | "spell": "wangcheng", 3722 | "name": "望城" 3723 | }, 3724 | { 3725 | "id": 797, 3726 | "spell": "wangjiang", 3727 | "name": "望江" 3728 | }, 3729 | { 3730 | "id": 798, 3731 | "spell": "wannian", 3732 | "name": "万年" 3733 | }, 3734 | { 3735 | "id": 799, 3736 | "spell": "wanzai", 3737 | "name": "万载" 3738 | }, 3739 | { 3740 | "id": 800, 3741 | "spell": "weishan", 3742 | "name": "微山" 3743 | }, 3744 | { 3745 | "id": 801, 3746 | "spell": "wencheng", 3747 | "name": "文成" 3748 | }, 3749 | { 3750 | "id": 802, 3751 | "spell": "wendeng", 3752 | "name": "文登" 3753 | }, 3754 | { 3755 | "id": 803, 3756 | "spell": "wengyuan", 3757 | "name": "翁源" 3758 | }, 3759 | { 3760 | "id": 804, 3761 | "spell": "wenling", 3762 | "name": "温岭" 3763 | }, 3764 | { 3765 | "id": 805, 3766 | "spell": "wenshang", 3767 | "name": "汶上" 3768 | }, 3769 | { 3770 | "id": 806, 3771 | "spell": "wenxian", 3772 | "name": "温县" 3773 | }, 3774 | { 3775 | "id": 807, 3776 | "spell": "woyang", 3777 | "name": "涡阳" 3778 | }, 3779 | { 3780 | "id": 808, 3781 | "spell": "wuchang", 3782 | "name": "五常" 3783 | }, 3784 | { 3785 | "id": 809, 3786 | "spell": "wucheng", 3787 | "name": "武城" 3788 | }, 3789 | { 3790 | "id": 810, 3791 | "spell": "wuchuan", 3792 | "name": "吴川" 3793 | }, 3794 | { 3795 | "id": 811, 3796 | "spell": "wudi", 3797 | "name": "无棣" 3798 | }, 3799 | { 3800 | "id": 812, 3801 | "spell": "wuhe", 3802 | "name": "五河" 3803 | }, 3804 | { 3805 | "id": 813, 3806 | "spell": "wuhu", 3807 | "name": "芜湖" 3808 | }, 3809 | { 3810 | "id": 814, 3811 | "spell": "wuhua", 3812 | "name": "五华" 3813 | }, 3814 | { 3815 | "id": 815, 3816 | "spell": "wuji", 3817 | "name": "无极" 3818 | }, 3819 | { 3820 | "id": 816, 3821 | "spell": "wujiang", 3822 | "name": "吴江" 3823 | }, 3824 | { 3825 | "id": 817, 3826 | "spell": "wulian", 3827 | "name": "五莲" 3828 | }, 3829 | { 3830 | "id": 818, 3831 | "spell": "wulong", 3832 | "name": "武隆" 3833 | }, 3834 | { 3835 | "id": 819, 3836 | "spell": "wuming", 3837 | "name": "武鸣" 3838 | }, 3839 | { 3840 | "id": 820, 3841 | "spell": "wuning", 3842 | "name": "武宁" 3843 | }, 3844 | { 3845 | "id": 821, 3846 | "spell": "wuping", 3847 | "name": "武平" 3848 | }, 3849 | { 3850 | "id": 822, 3851 | "spell": "wushan", 3852 | "name": "巫山" 3853 | }, 3854 | { 3855 | "id": 823, 3856 | "spell": "wuwei", 3857 | "name": "无为" 3858 | }, 3859 | { 3860 | "id": 824, 3861 | "spell": "wuxi", 3862 | "name": "巫溪" 3863 | }, 3864 | { 3865 | "id": 825, 3866 | "spell": "wuyi", 3867 | "name": "武义" 3868 | }, 3869 | { 3870 | "id": 826, 3871 | "spell": "wuyishan", 3872 | "name": "武夷山" 3873 | }, 3874 | { 3875 | "id": 827, 3876 | "spell": "wuyuan", 3877 | "name": "婺源" 3878 | }, 3879 | { 3880 | "id": 828, 3881 | "spell": "wuzhi", 3882 | "name": "武陟" 3883 | } 3884 | ], 3885 | "X": [ 3886 | { 3887 | "id": 46, 3888 | "spell": "xiamen", 3889 | "name": "厦门" 3890 | }, 3891 | { 3892 | "id": 47, 3893 | "spell": "xian", 3894 | "name": "西安" 3895 | }, 3896 | { 3897 | "id": 48, 3898 | "spell": "xuchang", 3899 | "name": "许昌" 3900 | }, 3901 | { 3902 | "id": 49, 3903 | "spell": "xuzhou", 3904 | "name": "徐州" 3905 | }, 3906 | { 3907 | "id": 282, 3908 | "spell": "xiangfan", 3909 | "name": "襄樊" 3910 | }, 3911 | { 3912 | "id": 283, 3913 | "spell": "xiangtan", 3914 | "name": "湘潭" 3915 | }, 3916 | { 3917 | "id": 284, 3918 | "spell": "xiangxi", 3919 | "name": "湘西" 3920 | }, 3921 | { 3922 | "id": 285, 3923 | "spell": "xianning", 3924 | "name": "咸宁" 3925 | }, 3926 | { 3927 | "id": 286, 3928 | "spell": "xianyang", 3929 | "name": "咸阳" 3930 | }, 3931 | { 3932 | "id": 287, 3933 | "spell": "xiaogan", 3934 | "name": "孝感" 3935 | }, 3936 | { 3937 | "id": 288, 3938 | "spell": "xilinguolemeng", 3939 | "name": "锡林郭勒盟" 3940 | }, 3941 | { 3942 | "id": 289, 3943 | "spell": "xinganmeng", 3944 | "name": "兴安盟" 3945 | }, 3946 | { 3947 | "id": 290, 3948 | "spell": "xingtai", 3949 | "name": "邢台" 3950 | }, 3951 | { 3952 | "id": 291, 3953 | "spell": "xining", 3954 | "name": "西宁" 3955 | }, 3956 | { 3957 | "id": 292, 3958 | "spell": "xinxiang", 3959 | "name": "新乡" 3960 | }, 3961 | { 3962 | "id": 293, 3963 | "spell": "xinyang", 3964 | "name": "信阳" 3965 | }, 3966 | { 3967 | "id": 294, 3968 | "spell": "xinyu", 3969 | "name": "新余" 3970 | }, 3971 | { 3972 | "id": 295, 3973 | "spell": "xinzhou", 3974 | "name": "忻州" 3975 | }, 3976 | { 3977 | "id": 296, 3978 | "spell": "xishuangbanna", 3979 | "name": "西双版纳" 3980 | }, 3981 | { 3982 | "id": 297, 3983 | "spell": "xuancheng", 3984 | "name": "宣城" 3985 | }, 3986 | { 3987 | "id": 829, 3988 | "spell": "xiajiang", 3989 | "name": "峡江" 3990 | }, 3991 | { 3992 | "id": 830, 3993 | "spell": "xiajin", 3994 | "name": "夏津" 3995 | }, 3996 | { 3997 | "id": 831, 3998 | "spell": "xiangshan", 3999 | "name": "象山" 4000 | }, 4001 | { 4002 | "id": 832, 4003 | "spell": "xiangshui", 4004 | "name": "响水" 4005 | }, 4006 | { 4007 | "id": 833, 4008 | "spell": "xianju", 4009 | "name": "仙居" 4010 | }, 4011 | { 4012 | "id": 834, 4013 | "spell": "xianyou", 4014 | "name": "仙游" 4015 | }, 4016 | { 4017 | "id": 835, 4018 | "spell": "xiaoxian", 4019 | "name": "萧县" 4020 | }, 4021 | { 4022 | "id": 836, 4023 | "spell": "xiapu", 4024 | "name": "霞浦" 4025 | }, 4026 | { 4027 | "id": 837, 4028 | "spell": "xifeng", 4029 | "name": "息烽" 4030 | }, 4031 | { 4032 | "id": 838, 4033 | "spell": "xinan", 4034 | "name": "新安" 4035 | }, 4036 | { 4037 | "id": 839, 4038 | "spell": "xinchang", 4039 | "name": "新昌" 4040 | }, 4041 | { 4042 | "id": 840, 4043 | "spell": "xinfeng", 4044 | "name": "信丰" 4045 | }, 4046 | { 4047 | "id": 841, 4048 | "spell": "xinfeng", 4049 | "name": "新丰" 4050 | }, 4051 | { 4052 | "id": 842, 4053 | "spell": "xingan", 4054 | "name": "新干" 4055 | }, 4056 | { 4057 | "id": 843, 4058 | "spell": "xingguo", 4059 | "name": "兴国" 4060 | }, 4061 | { 4062 | "id": 844, 4063 | "spell": "xinghua", 4064 | "name": "兴化" 4065 | }, 4066 | { 4067 | "id": 845, 4068 | "spell": "xingning", 4069 | "name": "兴宁" 4070 | }, 4071 | { 4072 | "id": 846, 4073 | "spell": "xingtang", 4074 | "name": "行唐" 4075 | }, 4076 | { 4077 | "id": 847, 4078 | "spell": "xingyang", 4079 | "name": "荥阳" 4080 | }, 4081 | { 4082 | "id": 848, 4083 | "spell": "xingzi", 4084 | "name": "星子" 4085 | }, 4086 | { 4087 | "id": 849, 4088 | "spell": "xinji", 4089 | "name": "辛集" 4090 | }, 4091 | { 4092 | "id": 850, 4093 | "spell": "xinjian", 4094 | "name": "新建" 4095 | }, 4096 | { 4097 | "id": 851, 4098 | "spell": "xinjin", 4099 | "name": "新津" 4100 | }, 4101 | { 4102 | "id": 852, 4103 | "spell": "xinle", 4104 | "name": "新乐" 4105 | }, 4106 | { 4107 | "id": 853, 4108 | "spell": "xinmin", 4109 | "name": "新民" 4110 | }, 4111 | { 4112 | "id": 854, 4113 | "spell": "xinmi", 4114 | "name": "新密" 4115 | }, 4116 | { 4117 | "id": 855, 4118 | "spell": "xintai", 4119 | "name": "新泰" 4120 | }, 4121 | { 4122 | "id": 856, 4123 | "spell": "xinxing", 4124 | "name": "新兴" 4125 | }, 4126 | { 4127 | "id": 857, 4128 | "spell": "xinyi", 4129 | "name": "新沂" 4130 | }, 4131 | { 4132 | "id": 858, 4133 | "spell": "xinyi", 4134 | "name": "信宜" 4135 | }, 4136 | { 4137 | "id": 859, 4138 | "spell": "xinzheng", 4139 | "name": "新郑" 4140 | }, 4141 | { 4142 | "id": 860, 4143 | "spell": "xiuning", 4144 | "name": "休宁" 4145 | }, 4146 | { 4147 | "id": 861, 4148 | "spell": "xiushan", 4149 | "name": "秀山" 4150 | }, 4151 | { 4152 | "id": 862, 4153 | "spell": "xiushui", 4154 | "name": "修水" 4155 | }, 4156 | { 4157 | "id": 863, 4158 | "spell": "xiuwen", 4159 | "name": "修文" 4160 | }, 4161 | { 4162 | "id": 864, 4163 | "spell": "xiuwu", 4164 | "name": "修武" 4165 | }, 4166 | { 4167 | "id": 865, 4168 | "spell": "xundian", 4169 | "name": "寻甸" 4170 | }, 4171 | { 4172 | "id": 866, 4173 | "spell": "xunwu", 4174 | "name": "寻乌" 4175 | }, 4176 | { 4177 | "id": 867, 4178 | "spell": "xuwen", 4179 | "name": "徐闻" 4180 | }, 4181 | { 4182 | "id": 868, 4183 | "spell": "xuyi", 4184 | "name": "盱眙" 4185 | } 4186 | ], 4187 | "Y": [ 4188 | { 4189 | "id": 50, 4190 | "spell": "yangzhou", 4191 | "name": "扬州" 4192 | }, 4193 | { 4194 | "id": 51, 4195 | "spell": "yantai", 4196 | "name": "烟台" 4197 | }, 4198 | { 4199 | "id": 298, 4200 | "spell": "yaan", 4201 | "name": "雅安" 4202 | }, 4203 | { 4204 | "id": 299, 4205 | "spell": "yanan", 4206 | "name": "延安" 4207 | }, 4208 | { 4209 | "id": 300, 4210 | "spell": "yanbian", 4211 | "name": "延边" 4212 | }, 4213 | { 4214 | "id": 301, 4215 | "spell": "yancheng", 4216 | "name": "盐城" 4217 | }, 4218 | { 4219 | "id": 302, 4220 | "spell": "yangjiang", 4221 | "name": "阳江" 4222 | }, 4223 | { 4224 | "id": 303, 4225 | "spell": "yangquan", 4226 | "name": "阳泉" 4227 | }, 4228 | { 4229 | "id": 304, 4230 | "spell": "yibin", 4231 | "name": "宜宾" 4232 | }, 4233 | { 4234 | "id": 305, 4235 | "spell": "yichang", 4236 | "name": "宜昌" 4237 | }, 4238 | { 4239 | "id": 306, 4240 | "spell": "yichun", 4241 | "name": "伊春" 4242 | }, 4243 | { 4244 | "id": 307, 4245 | "spell": "yichun", 4246 | "name": "宜春" 4247 | }, 4248 | { 4249 | "id": 308, 4250 | "spell": "yilihasake", 4251 | "name": "伊犁哈萨克" 4252 | }, 4253 | { 4254 | "id": 309, 4255 | "spell": "yinchuan", 4256 | "name": "银川" 4257 | }, 4258 | { 4259 | "id": 310, 4260 | "spell": "yingkou", 4261 | "name": "营口" 4262 | }, 4263 | { 4264 | "id": 311, 4265 | "spell": "yingtan", 4266 | "name": "鹰潭" 4267 | }, 4268 | { 4269 | "id": 312, 4270 | "spell": "yiyang", 4271 | "name": "益阳" 4272 | }, 4273 | { 4274 | "id": 313, 4275 | "spell": "yongzhou", 4276 | "name": "永州" 4277 | }, 4278 | { 4279 | "id": 314, 4280 | "spell": "yueyang", 4281 | "name": "岳阳" 4282 | }, 4283 | { 4284 | "id": 315, 4285 | "spell": "yulin", 4286 | "name": "玉林" 4287 | }, 4288 | { 4289 | "id": 316, 4290 | "spell": "yulin", 4291 | "name": "榆林" 4292 | }, 4293 | { 4294 | "id": 317, 4295 | "spell": "yuncheng", 4296 | "name": "运城" 4297 | }, 4298 | { 4299 | "id": 318, 4300 | "spell": "yunfu", 4301 | "name": "云浮" 4302 | }, 4303 | { 4304 | "id": 319, 4305 | "spell": "yushu", 4306 | "name": "玉树" 4307 | }, 4308 | { 4309 | "id": 320, 4310 | "spell": "yuxi", 4311 | "name": "玉溪" 4312 | }, 4313 | { 4314 | "id": 869, 4315 | "spell": "yangchun", 4316 | "name": "阳春" 4317 | }, 4318 | { 4319 | "id": 870, 4320 | "spell": "yangdong", 4321 | "name": "阳东" 4322 | }, 4323 | { 4324 | "id": 871, 4325 | "spell": "yanggu", 4326 | "name": "阳谷" 4327 | }, 4328 | { 4329 | "id": 872, 4330 | "spell": "yangshan", 4331 | "name": "阳山" 4332 | }, 4333 | { 4334 | "id": 873, 4335 | "spell": "yangxin", 4336 | "name": "阳信" 4337 | }, 4338 | { 4339 | "id": 874, 4340 | "spell": "yangxi", 4341 | "name": "阳西" 4342 | }, 4343 | { 4344 | "id": 875, 4345 | "spell": "yangzhong", 4346 | "name": "扬中" 4347 | }, 4348 | { 4349 | "id": 876, 4350 | "spell": "yanshi", 4351 | "name": "偃师" 4352 | }, 4353 | { 4354 | "id": 877, 4355 | "spell": "yanshou", 4356 | "name": "延寿" 4357 | }, 4358 | { 4359 | "id": 878, 4360 | "spell": "yanzhou", 4361 | "name": "兖州" 4362 | }, 4363 | { 4364 | "id": 879, 4365 | "spell": "yichuan", 4366 | "name": "伊川" 4367 | }, 4368 | { 4369 | "id": 880, 4370 | "spell": "yifeng", 4371 | "name": "宜丰" 4372 | }, 4373 | { 4374 | "id": 881, 4375 | "spell": "yihuang", 4376 | "name": "宜黄" 4377 | }, 4378 | { 4379 | "id": 882, 4380 | "spell": "yilan", 4381 | "name": "依兰" 4382 | }, 4383 | { 4384 | "id": 883, 4385 | "spell": "yiliang", 4386 | "name": "宜良" 4387 | }, 4388 | { 4389 | "id": 884, 4390 | "spell": "yinan", 4391 | "name": "沂南" 4392 | }, 4393 | { 4394 | "id": 885, 4395 | "spell": "yingde", 4396 | "name": "英德" 4397 | }, 4398 | { 4399 | "id": 886, 4400 | "spell": "yingshang", 4401 | "name": "颍上" 4402 | }, 4403 | { 4404 | "id": 887, 4405 | "spell": "yishui", 4406 | "name": "沂水" 4407 | }, 4408 | { 4409 | "id": 888, 4410 | "spell": "yiwu", 4411 | "name": "义乌" 4412 | }, 4413 | { 4414 | "id": 889, 4415 | "spell": "yixian", 4416 | "name": "黟县" 4417 | }, 4418 | { 4419 | "id": 890, 4420 | "spell": "yixing", 4421 | "name": "宜兴" 4422 | }, 4423 | { 4424 | "id": 891, 4425 | "spell": "yiyang", 4426 | "name": "弋阳" 4427 | }, 4428 | { 4429 | "id": 892, 4430 | "spell": "yiyang", 4431 | "name": "宜阳" 4432 | }, 4433 | { 4434 | "id": 893, 4435 | "spell": "yiyuan", 4436 | "name": "沂源" 4437 | }, 4438 | { 4439 | "id": 894, 4440 | "spell": "yizheng", 4441 | "name": "仪征" 4442 | }, 4443 | { 4444 | "id": 895, 4445 | "spell": "yongan", 4446 | "name": "永安" 4447 | }, 4448 | { 4449 | "id": 896, 4450 | "spell": "yongchuan", 4451 | "name": "永川" 4452 | }, 4453 | { 4454 | "id": 897, 4455 | "spell": "yongchun", 4456 | "name": "永春" 4457 | }, 4458 | { 4459 | "id": 898, 4460 | "spell": "yongdeng", 4461 | "name": "永登" 4462 | }, 4463 | { 4464 | "id": 899, 4465 | "spell": "yongding", 4466 | "name": "永定" 4467 | }, 4468 | { 4469 | "id": 900, 4470 | "spell": "yongfeng", 4471 | "name": "永丰" 4472 | }, 4473 | { 4474 | "id": 901, 4475 | "spell": "yongji", 4476 | "name": "永吉" 4477 | }, 4478 | { 4479 | "id": 902, 4480 | "spell": "yongjia", 4481 | "name": "永嘉" 4482 | }, 4483 | { 4484 | "id": 903, 4485 | "spell": "yongkang", 4486 | "name": "永康" 4487 | }, 4488 | { 4489 | "id": 904, 4490 | "spell": "yongning", 4491 | "name": "邕宁" 4492 | }, 4493 | { 4494 | "id": 905, 4495 | "spell": "yongtai", 4496 | "name": "永泰" 4497 | }, 4498 | { 4499 | "id": 906, 4500 | "spell": "yongxin", 4501 | "name": "永新" 4502 | }, 4503 | { 4504 | "id": 907, 4505 | "spell": "yongxiu", 4506 | "name": "永修" 4507 | }, 4508 | { 4509 | "id": 908, 4510 | "spell": "youxi", 4511 | "name": "尤溪" 4512 | }, 4513 | { 4514 | "id": 909, 4515 | "spell": "youyang", 4516 | "name": "酉阳" 4517 | }, 4518 | { 4519 | "id": 910, 4520 | "spell": "yuanshi", 4521 | "name": "元氏" 4522 | }, 4523 | { 4524 | "id": 911, 4525 | "spell": "yucheng", 4526 | "name": "禹城" 4527 | }, 4528 | { 4529 | "id": 912, 4530 | "spell": "yudu", 4531 | "name": "于都" 4532 | }, 4533 | { 4534 | "id": 913, 4535 | "spell": "yuexi", 4536 | "name": "岳西" 4537 | }, 4538 | { 4539 | "id": 914, 4540 | "spell": "yugan", 4541 | "name": "余干" 4542 | }, 4543 | { 4544 | "id": 915, 4545 | "spell": "yuhuan", 4546 | "name": "玉环" 4547 | }, 4548 | { 4549 | "id": 916, 4550 | "spell": "yujiang", 4551 | "name": "余江" 4552 | }, 4553 | { 4554 | "id": 917, 4555 | "spell": "yunan", 4556 | "name": "郁南" 4557 | }, 4558 | { 4559 | "id": 918, 4560 | "spell": "yunan", 4561 | "name": "云安" 4562 | }, 4563 | { 4564 | "id": 919, 4565 | "spell": "yuncheng", 4566 | "name": "郓城" 4567 | }, 4568 | { 4569 | "id": 920, 4570 | "spell": "yunhe", 4571 | "name": "云和" 4572 | }, 4573 | { 4574 | "id": 921, 4575 | "spell": "yunxiao", 4576 | "name": "云霄" 4577 | }, 4578 | { 4579 | "id": 922, 4580 | "spell": "yunyang", 4581 | "name": "云阳" 4582 | }, 4583 | { 4584 | "id": 923, 4585 | "spell": "yushan", 4586 | "name": "玉山" 4587 | }, 4588 | { 4589 | "id": 924, 4590 | "spell": "yushu", 4591 | "name": "榆树" 4592 | }, 4593 | { 4594 | "id": 925, 4595 | "spell": "yutai", 4596 | "name": "鱼台" 4597 | }, 4598 | { 4599 | "id": 926, 4600 | "spell": "yutian", 4601 | "name": "玉田" 4602 | }, 4603 | { 4604 | "id": 927, 4605 | "spell": "yuyao", 4606 | "name": "余姚" 4607 | }, 4608 | { 4609 | "id": 928, 4610 | "spell": "yuzhong", 4611 | "name": "榆中" 4612 | } 4613 | ], 4614 | "Z": [ 4615 | { 4616 | "id": 52, 4617 | "spell": "zhangzhou", 4618 | "name": "漳州" 4619 | }, 4620 | { 4621 | "id": 53, 4622 | "spell": "zhengzhou", 4623 | "name": "郑州" 4624 | }, 4625 | { 4626 | "id": 54, 4627 | "spell": "zhongshan", 4628 | "name": "中山" 4629 | }, 4630 | { 4631 | "id": 55, 4632 | "spell": "zhuhai", 4633 | "name": "珠海" 4634 | }, 4635 | { 4636 | "id": 321, 4637 | "spell": "zaozhuang", 4638 | "name": "枣庄" 4639 | }, 4640 | { 4641 | "id": 322, 4642 | "spell": "zhangjiajie", 4643 | "name": "张家界" 4644 | }, 4645 | { 4646 | "id": 323, 4647 | "spell": "zhangjiakou", 4648 | "name": "张家口" 4649 | }, 4650 | { 4651 | "id": 324, 4652 | "spell": "zhangye", 4653 | "name": "张掖" 4654 | }, 4655 | { 4656 | "id": 325, 4657 | "spell": "zhanjiang", 4658 | "name": "湛江" 4659 | }, 4660 | { 4661 | "id": 326, 4662 | "spell": "zhaoqing", 4663 | "name": "肇庆" 4664 | }, 4665 | { 4666 | "id": 327, 4667 | "spell": "zhaotong", 4668 | "name": "昭通" 4669 | }, 4670 | { 4671 | "id": 328, 4672 | "spell": "zhenjiang", 4673 | "name": "镇江" 4674 | }, 4675 | { 4676 | "id": 329, 4677 | "spell": "zhongwei", 4678 | "name": "中卫" 4679 | }, 4680 | { 4681 | "id": 330, 4682 | "spell": "zhoukou", 4683 | "name": "周口" 4684 | }, 4685 | { 4686 | "id": 331, 4687 | "spell": "zhoushan", 4688 | "name": "舟山" 4689 | }, 4690 | { 4691 | "id": 332, 4692 | "spell": "zhumadian", 4693 | "name": "驻马店" 4694 | }, 4695 | { 4696 | "id": 333, 4697 | "spell": "zhuzhou", 4698 | "name": "株洲" 4699 | }, 4700 | { 4701 | "id": 334, 4702 | "spell": "zibo", 4703 | "name": "淄博" 4704 | }, 4705 | { 4706 | "id": 335, 4707 | "spell": "zigong", 4708 | "name": "自贡" 4709 | }, 4710 | { 4711 | "id": 336, 4712 | "spell": "ziyang", 4713 | "name": "资阳" 4714 | }, 4715 | { 4716 | "id": 337, 4717 | "spell": "zunyi", 4718 | "name": "遵义" 4719 | }, 4720 | { 4721 | "id": 929, 4722 | "spell": "zanhuang", 4723 | "name": "赞皇" 4724 | }, 4725 | { 4726 | "id": 930, 4727 | "spell": "zengcheng", 4728 | "name": "增城" 4729 | }, 4730 | { 4731 | "id": 931, 4732 | "spell": "zhangjiagang", 4733 | "name": "张家港" 4734 | }, 4735 | { 4736 | "id": 932, 4737 | "spell": "zhangping", 4738 | "name": "漳平" 4739 | }, 4740 | { 4741 | "id": 933, 4742 | "spell": "zhangpu", 4743 | "name": "漳浦" 4744 | }, 4745 | { 4746 | "id": 934, 4747 | "spell": "zhangqiu", 4748 | "name": "章丘" 4749 | }, 4750 | { 4751 | "id": 935, 4752 | "spell": "zhangshu", 4753 | "name": "樟树" 4754 | }, 4755 | { 4756 | "id": 936, 4757 | "spell": "zhanhua", 4758 | "name": "沾化" 4759 | }, 4760 | { 4761 | "id": 937, 4762 | "spell": "zhaoxian", 4763 | "name": "赵县" 4764 | }, 4765 | { 4766 | "id": 938, 4767 | "spell": "zhaoyuan", 4768 | "name": "招远" 4769 | }, 4770 | { 4771 | "id": 939, 4772 | "spell": "zhengding", 4773 | "name": "正定" 4774 | }, 4775 | { 4776 | "id": 940, 4777 | "spell": "zhenghe", 4778 | "name": "政和" 4779 | }, 4780 | { 4781 | "id": 941, 4782 | "spell": "zherong", 4783 | "name": "柘荣" 4784 | }, 4785 | { 4786 | "id": 942, 4787 | "spell": "zhongmou", 4788 | "name": "中牟" 4789 | }, 4790 | { 4791 | "id": 943, 4792 | "spell": "zhongxian", 4793 | "name": "忠县" 4794 | }, 4795 | { 4796 | "id": 944, 4797 | "spell": "zhouning", 4798 | "name": "周宁" 4799 | }, 4800 | { 4801 | "id": 945, 4802 | "spell": "zhouzhi", 4803 | "name": "周至" 4804 | }, 4805 | { 4806 | "id": 946, 4807 | "spell": "zhuanghe", 4808 | "name": "庄河" 4809 | }, 4810 | { 4811 | "id": 947, 4812 | "spell": "zhucheng", 4813 | "name": "诸城" 4814 | }, 4815 | { 4816 | "id": 948, 4817 | "spell": "zhuji", 4818 | "name": "诸暨" 4819 | }, 4820 | { 4821 | "id": 949, 4822 | "spell": "zijin", 4823 | "name": "紫金" 4824 | }, 4825 | { 4826 | "id": 950, 4827 | "spell": "zixi", 4828 | "name": "资溪" 4829 | }, 4830 | { 4831 | "id": 951, 4832 | "spell": "zoucheng", 4833 | "name": "邹城" 4834 | }, 4835 | { 4836 | "id": 952, 4837 | "spell": "zouping", 4838 | "name": "邹平" 4839 | }, 4840 | { 4841 | "id": 953, 4842 | "spell": "zunhua", 4843 | "name": "遵化" 4844 | } 4845 | ] 4846 | } 4847 | } 4848 | } 4849 | -------------------------------------------------------------------------------- /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 | "commentsNum": 27, 7 | "gallaryImgs": [ 8 | "http://img1.qunarzz.com/sight/p0/201404/23/04b92c99462687fa1ba45c1b5ba4ad77.jpg_800x800_70debc93.jpg", 9 | "http://img1.qunarzz.com/sight/p0/1709/76/7691528bc7d7ad3ca3.img.png_800x800_9ef05ee7.png" 10 | ], 11 | "categoryList": [ 12 | { 13 | "title": "成人票", 14 | "children": [ 15 | { 16 | "title": "成人三馆联票", 17 | "children": [ 18 | { 19 | "title": "成人三馆联票 - 某一连锁店销售" 20 | } 21 | ] 22 | }, 23 | { 24 | "title": "成人五馆联票" 25 | } 26 | ] 27 | }, 28 | { 29 | "title": "学生票" 30 | }, 31 | { 32 | "title": "儿童票" 33 | }, 34 | { 35 | "title": "特惠票" 36 | } 37 | ] 38 | } 39 | } -------------------------------------------------------------------------------- /static/mock/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "ret": true, 3 | "data": { 4 | "city": "北京", 5 | "swiperList": [{ 6 | "id": "0001", 7 | "src": "http://img1.qunarzz.com/piao/fusion/1810/5d/b63d846958a4702.jpg_750x200_8129cfc3.jpg" 8 | }, { 9 | "id": "0002", 10 | "src": "http://img1.qunarzz.com/piao/fusion/1810/eb/5cacf42b59e91e02.jpg_750x200_9c0a77b0.jpg" 11 | }, { 12 | "id": "0003", 13 | "src": "http://img1.qunarzz.com/piao/fusion/1810/29/45722c73b5b66902.jpg_750x200_231ae61f.jpg" 14 | }, { 15 | "id": "0004", 16 | "src": "http://img1.qunarzz.com/piao/fusion/1809/c6/2467595fffc3b302.jpg_750x200_cca13d51.jpg" 17 | }], 18 | "iconList": [{ 19 | "id": "0001", 20 | "iconSrc": "http://img1.qunarzz.com/piao/fusion/1803/95/f3dd6c383aeb3b02.png", 21 | "desc":" 热门景点有很多" 22 | }, { 23 | "id": "0002", 24 | "iconSrc": "http://img1.qunarzz.com/piao/fusion/1803/50/26ffa31b56646402.png", 25 | "desc": "海洋馆" 26 | }, { 27 | "id": "0003", 28 | "iconSrc": "http://img1.qunarzz.com/piao/fusion/1803/95/8246f27355943202.png", 29 | "desc": "游乐场" 30 | }, { 31 | "id": "0004", 32 | "iconSrc": "http://img1.qunarzz.com/piao/fusion/1803/ab/6f7d6e44963c9302.png", 33 | "desc": "泡温泉" 34 | }, { 35 | "id": "0005", 36 | "iconSrc": "http://img1.qunarzz.com/piao/fusion/1804/5a/13ceb38dcf262f02.png", 37 | "desc": "一日游" 38 | }, { 39 | "id": "0006", 40 | "iconSrc": "http://img1.qunarzz.com/piao/fusion/1804/ff/fdf170ee89594b02.png", 41 | "desc": "福州必游" 42 | }, { 43 | "id": "0007", 44 | "iconSrc": "http://img1.qunarzz.com/piao/fusion/1803/96/c70f1e85ae4a4f02.png", 45 | "desc": "武夷山" 46 | }, { 47 | "id": "0008", 48 | "iconSrc": "https://img1.qunarzz.com/piao/fusion/1803/20/831d62d2e1c7be02.png", 49 | "desc": "打卡圣地" 50 | }, { 51 | "id": "0009", 52 | "iconSrc": "https://img1.qunarzz.com/piao/fusion/1803/20/831d62d2e1c7be02.png", 53 | "desc": "打卡圣地" 54 | }], 55 | "recommendList": [{ 56 | "id": "0001", 57 | "imgSrc": "http://img1.qunarzz.com/sight/p0/1809/cc/cc238b335afb8479a3.water.jpg_250x250_12bc1f4a.jpg", 58 | "title": "福州动物园世界", 59 | "desc": "浪漫福州首站,浪漫主题的动物园世界" 60 | }, { 61 | "id": "0002", 62 | "imgSrc": "http://img1.qunarzz.com/sight/p0/1506/f6/f6b727f036fe5d6d.water.jpg_250x250_d22ecf6b.jpg", 63 | "title": "鼓浪屿", 64 | "desc": "浪漫福州首站,浪漫主题的动物园世界" 65 | }, { 66 | "id": "0003", 67 | "imgSrc": "http://img1.qunarzz.com/sight/p0/1711/4f/4fba5e793fe8ef5ca3.img.jpg_250x250_856d43db.jpg", 68 | "title": "厦门园林植物园", 69 | "desc": "浪漫福州首站,浪漫主题的动物园世界" 70 | }, { 71 | "id": "0004", 72 | "imgSrc": "http://img1.qunarzz.com/sight/p0/1505/63/63ce24958e5e92e2.water.jpg_250x250_0a659250.jpg", 73 | "title": "三坊七巷", 74 | "desc": "浪漫福州首站,浪漫主题的动物园世界" 75 | }], 76 | "weekendList": [{ 77 | "id": "0001", 78 | "imgSrc": "http://img1.qunarzz.com/sight/source/1509/b5/07bc81fc254ed6.jpg_r_640x214_8879c815.jpg", 79 | "title": "土楼不能说的秘密", 80 | "desc": "一座座神秘的建筑,一段段传奇的历史" 81 | }, { 82 | "id": "0002", 83 | "imgSrc": "http://img1.qunarzz.com/sight/source/1509/69/3f535648c26681.jpg_r_640x214_146b5b8e.jpg", 84 | "title": "秋意浓,来厦门", 85 | "desc": "这里的秋,多了一点柔情" 86 | }, { 87 | "id": "0003", 88 | "imgSrc": "http://img1.qunarzz.com/sight/source/1711/15/1cdd5ee885686b.jpg_r_640x214_46768064.jpg", 89 | "title": "厦门必游TOP10", 90 | "desc": "来厦门感受一把小资情调" 91 | }, { 92 | "id": "0004", 93 | "imgSrc": "http://img1.qunarzz.com/sight/source/1509/b3/197875fd646330.jpg_r_640x214_d089dccc.jpg", 94 | "title": "秋高气爽登高去", 95 | "desc": "来厦门感受一把小资情调" 96 | }, { 97 | "id": "0005", 98 | "imgSrc": "http://img1.qunarzz.com/sight/source/1505/fc/c9ac09bb08e382.jpg_r_640x214_6b9eb488.jpg", 99 | "title": "不一样的福州", 100 | "desc": "来厦门感受一把小资情调" 101 | }] 102 | } 103 | } --------------------------------------------------------------------------------