From c9bc8ec61cff4076132f6396d99d383a2cdf5a03 Mon Sep 17 00:00:00 2001 From: ann0707 <674986077@qq.com> Date: Thu, 16 Aug 2018 18:21:29 +0800 Subject: [PATCH] 主题色的配置完成 --- src/assets/iconfont/iconfont.eot | 0 static/modConfig.json | 9 src/assets/img/error3.png | 0 src/views/bnd/credit/companyModification.vue | 356 src/config/config.js | 97 src/views/home/position.vue | 451 src/views/bnd/credit/listgeren.vue | 425 .babelrc | 18 src/views/mine/auth.vue | 340 src/views/mine/messageDetail.vue | 82 build/vue-loader.conf.js | 31 src/views/bnd/repayMent/activeRepayment.vue | 330 src/views/bnd/loan/resetPwd.vue | 339 src/router/project.js | 287 static/iosagreementv2.js | 32 src/views/incomeLoan/houseAndJobInfo.vue | 541 src/style/variable.less | 58 src/components/common/FSpace.vue | 41 src/views/bnd/loan/loanMessage.vue | 192 src/views/loan/speedLoan.vue | 404 src/assets/img/weQECode.png | 0 src/views/loan/bankLoan.vue | 579 src/views/loan/loanDetail.vue | 1032 + package-lock.json | 10015 +++++++++++++ src/tool/IDValidator.js | 3844 +++++ src/views/home/assessmentResult.vue | 303 static/Idcardf.jpg | 0 src/assets/img/iPhone8P.png | 0 static/chanBaseInfo.json | 32 src/assets/imgs/lanok.png | 0 build/build.js | 41 src/api/statusCodeManage.js | 41 src/assets/img/assessment.png | 0 src/components/payKeyboard/PayKeyboard.vue | 376 src/views/mine/setting.vue | 165 src/views/bnd/credit/infoOk.vue | 580 static/agreement.html | 78 src/views/bnd/repayMent/billDetails.vue | 256 src/assets/imgs/redno.png | 0 src/views/bnd/repayMent/loanDetails.vue | 217 src/views/bnd/loan/modifyPasswrodSuccess.vue | 127 src/assets/img/default_bg.png | 0 src/views/bnd/credit/subSuss.vue | 392 src/assets/imgs/bianji.png | 0 src/views/bnd/loan/subSuccess.vue | 207 src/assets/img/pass.png | 0 src/components/Notice.vue | 60 src/assets/img/iPhone8.png | 0 src/views/bnd/credit/waitForHandle.vue | 392 src/views/bnd/credit/sesame.vue | 324 src/api/service.js | 102 src/tool/loginSign.js | 62 src/views/bnd/repayMent/advanceSettle.vue | 224 src/views/bnd/credit/authorization.vue | 437 src/tool/deviceInfo.js | 80 src/views/bnd/credit/contactInfo.vue | 442 src/components/common/FilterTab.vue | 94 src/views/mine/register.vue | 527 src/assets/imgs/yinghangbiaozhi.jpg | 0 src/views/bnd/credit/juxinli.vue | 323 src/views/bnd/credit/passwordInfo.vue | 317 static/newImg/rectangle.png | 0 config/dev.env.js | 10 src/assets/img/iosindex.png | 0 src/assets/img/shareIOS.png | 0 static/newImg/IDcardf.png | 0 index.html | 50 src/components/upload/uploadImg.vue | 243 src/components/common/IFooterV2.vue | 61 src/assets/img/iPhoneX.png | 0 src/views/bnd/credit/messageCode.vue | 365 src/assets/img/nothing.png | 0 src/assets/img/tag-bg.png | 0 config/index.js | 73 src/tool/jsBridge.js | 212 src/assets/img/pope.png | 0 src/views/bnd/repayMent/subSuccess.vue | 190 src/router/index.js | 75 src/style/app.less | 151 src/views/home/calculator.vue | 637 src/views/loan/creditDetail.vue | 442 src/tool/bankCardData.js | 355 src/views/bnd/loan/loanInfo.vue | 314 src/views/bnd/loan/quota.vue | 223 src/assets/img/collect_result_bg.png | 0 src/assets/img/qqchat.png | 0 src/views/common/goBackControl.js | 60 src/components/HomeBanner.vue | 67 src/views/mine/login.vue | 418 .gitignore | 14 src/views/mine/helpCenter/helpCenter.vue | 187 build/webpack.dev.conf.js | 41 src/components/common/FDialog.vue | 137 src/views/loan/jobTypeLoan.vue | 482 src/views/mine/applyRecord.vue | 179 src/assets/imgs/shenfenzheng01.jpg | 0 src/store/mutations.js | 53 src/assets/iconfont/iconfont.js | 1 src/views/loan/creditLoan.vue | 104 src/assets/iconfont/iconfont.woff | 0 src/views/home/home.vue | 725 src/views/bnd/loan/modifyPasswrod.vue | 163 src/assets/img/wave-mid.png | 0 src/assets/imgs/yuqi.png | 0 src/assets/img/IDcardbg.png | 0 src/components/common/FSheet.vue | 182 src/views/bnd/credit/idPicture.vue | 419 static/auditRouterControl.json | 41 src/views/bnd/loan/quotaInfo.vue | 240 src/components/common/FProdList.vue | 240 src/views/bnd/repayMent/repayPlan.vue | 218 src/assets/img/calculator.png | 0 src/components/common/FFooter.vue | 74 src/assets/imgs/dengdai.png | 0 build/webpack.prod.conf.js | 140 build/webpack.base.conf.js | 128 package.json | 94 src/views/incomeLoan/bindCard.vue | 527 src/assets/img/loginLogo.png | 0 src/assets/img/v2/v2IDcardz.png | 0 src/style/swiper.min.css | 12 src/tool/fToast.js | 48 src/App.vue | 102 static/newImg/ellipse.png | 0 src/assets/iconfont/iconfont.css | 171 src/assets/img/bule.png | 0 build/check-versions.js | 49 src/api/bndApi.js | 149 src/assets/img/handID.jpg | 0 build/dev-client.js | 10 src/views/bnd/credit/personalChanges.vue | 433 src/views/mine/forgetPassword.vue | 261 src/components/common/IFooter.vue | 71 static/newImg/newhome.jpg | 0 src/assets/img/iosassessment.png | 0 src/views/incomeLoan/personalInfo.vue | 419 src/views/mine/messageCenter.vue | 158 src/store/index.js | 36 static/iosagreement.js | 4 src/store/mutation-types.js | 21 src/tool/pageBackByAndroid.js | 20 src/views/bnd/credit/pictureUp.vue | 412 src/assets/img/photo.jpg | 0 src/views/bnd/credit/bankInfo.vue | 397 src/views/incomeLoan/auditResults.vue | 170 static/newImg/card.png | 0 .postcssrc.js | 9 src/store/action.js | 21 src/views/incomeLoan/agreement/personInfo.vue | 80 src/views/incomeLoan/photoInfo.vue | 911 + src/assets/img/wave-top.png | 0 src/views/bnd/credit/bindingCode.vue | 374 build/dev-server.js | 105 src/assets/imgs/jieqing.png | 0 src/views/incomeLoan/agreement/collectData.vue | 92 static/newImg/add.png | 0 src/tool/validator.js | 178 src/assets/iconfont/iconfont.svg | 264 src/assets/img/error1.png | 0 src/assets/img/ios_home_bg.jpg | 0 static/Idcardz.jpg | 0 src/assets/imgs/shenfenzheng02.jpg | 0 static/iPhone8P.png | 0 src/assets/imgs/collect_result_bg.png | 0 src/components/CardList.vue | 120 src/views/home/assessment.vue | 371 src/tool/productRequestJump.js | 48 src/router/prodBND.js | 247 src/tool/date.js | 66 src/assets/img/ok.png | 0 src/tool/initData.js | 31 src/views/bnd/credit/juxinliAuthorization.vue | 436 .editorconfig | 11 src/assets/imgs/shenfenzheng04.jpg | 0 src/views/mine/updatePassword.vue | 206 src/assets/img/error2.png | 0 src/views/mine/feedback.vue | 449 static/newhome.jpg | 0 static/newImg/IDcardz.png | 0 src/assets/img/v2/v2IDcardf.png | 0 src/components/NewsList.vue | 105 src/main.js | 116 src/views/loan/index.vue | 118 src/views/mine/questionDetail.vue | 251 src/views/bnd/credit/companyInfo.vue | 355 src/components/common/FBlockTitle.vue | 71 src/components/common/FButton.vue | 118 src/views/loan/raindrops.vue | 125 src/assets/img/person.png | 0 src/style/mixin.less | 156 src/views/news/index.vue | 158 src/assets/img/calcBg.jpg | 0 static/newImg/reversecard.png | 0 src/components/MessageList.vue | 109 favicon.ico | 0 config/prod.env.js | 5 src/assets/imgs/collect_result_bg.jpg | 0 src/assets/img/wechat.png | 0 src/api/api.js | 241 src/style/theme.less | 48 src/views/mine/index.vue | 568 build/utils.js | 73 static/iPhoneX.png | 0 src/assets/img/shareAndroid.png | 0 src/views/news/newsDetail.vue | 110 src/assets/img/deom.jpg | 0 src/assets/img/wave-bot.png | 0 src/router/router.js | 13 src/assets/imgs/shenfenzheng03.jpg | 0 src/views/mine/helpCenter/registrationProblem.vue | 199 src/assets/iconfont/iconfont.ttf | 0 src/assets/img/share.png | 0 src/views/bnd/loan/resetSuccess.vue | 133 src/tool/channel.js | 40 src/assets/img/appwechat.png | 0 static/iPhone8.png | 0 src/views/home/blankPage.vue | 98 src/assets/img/assessment_bg.png | 0 src/tool/judgmentUrl.js | 23 219 files changed, 44,232 insertions(+), 0 deletions(-) diff --git a/.babelrc b/.babelrc new file mode 100644 index 0000000..c06df4d --- /dev/null +++ b/.babelrc @@ -0,0 +1,18 @@ +{ + "presets": [ + ["env", { + "modules": false, + "targets": { + "browsers": ["> 1%", "last 2 versions", "not ie <= 8"] + } + }], + "stage-2" + ], + "plugins": ["transform-runtime"], + "env": { + "test": { + "presets": ["env", "stage-2"], + "plugins": ["istanbul"] + } + } +} diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..8ea3abc --- /dev/null +++ b/.editorconfig @@ -0,0 +1,11 @@ +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 4 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true +space-before-function-paren = ["error", "never"] // 函数与括号间不能有空格 + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..de748e1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,14 @@ +.DS_Store +node_modules/ +dist/ +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln diff --git a/.postcssrc.js b/.postcssrc.js new file mode 100644 index 0000000..70bb5c2 --- /dev/null +++ b/.postcssrc.js @@ -0,0 +1,9 @@ +// https://github.com/michael-ciniawsky/postcss-load-config + +module.exports = { + "plugins": { + // to edit target browsers: use "browserslist" field in package.json + "autoprefixer": {}, + "postcss-plugin-px2rem": {} + } +}; diff --git a/build/build.js b/build/build.js new file mode 100644 index 0000000..30f036a --- /dev/null +++ b/build/build.js @@ -0,0 +1,41 @@ +'use strict' +require('./check-versions')() + +process.env.NODE_ENV = 'production' + +const ora = require('ora') +const rm = require('rimraf') +const path = require('path') +const chalk = require('chalk') +const webpack = require('webpack') +const config = require('../config') +const webpackConfig = require('./webpack.prod.conf') + +const spinner = ora('building for production...') +spinner.start() + +rm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err => { + if (err) throw err + webpack(webpackConfig, function (err, stats) { + spinner.stop() + if (err) throw err + process.stdout.write(stats.toString({ + colors: true, + modules: false, + children: false, + chunks: false, + chunkModules: false + }) + '\n\n') + + if (stats.hasErrors()) { + console.log(chalk.red(' Build failed with errors.\n')) + process.exit(1) + } + + console.log(chalk.cyan(' Build complete.\n')) + console.log(chalk.yellow( + ' Tip: built files are meant to be served over an HTTP server.\n' + + ' Opening index.html over file:// won\'t work.\n' + )) + }) +}) diff --git a/build/check-versions.js b/build/check-versions.js new file mode 100644 index 0000000..ca407bb --- /dev/null +++ b/build/check-versions.js @@ -0,0 +1,49 @@ +'use strict' +const chalk = require('chalk') +const semver = require('semver') +const packageConfig = require('../package.json') +const shell = require('shelljs') +function exec (cmd) { + return require('child_process').execSync(cmd).toString().trim() +} + +const versionRequirements = [ + { + name: 'node', + currentVersion: semver.clean(process.version), + versionRequirement: packageConfig.engines.node + } +] + +if (shell.which('npm')) { + versionRequirements.push({ + name: 'npm', + currentVersion: exec('npm --version'), + versionRequirement: packageConfig.engines.npm + }) +} + +module.exports = function () { + const warnings = [] + for (let i = 0; i < versionRequirements.length; i++) { + const mod = versionRequirements[i] + if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) { + warnings.push(mod.name + ': ' + + chalk.red(mod.currentVersion) + ' should be ' + + chalk.green(mod.versionRequirement) + ) + } + } + + if (warnings.length) { + console.log('') + console.log(chalk.yellow('To use this template, you must update following to modules:')) + console.log() + for (let i = 0; i < warnings.length; i++) { + const warning = warnings[i] + console.log(' ' + warning) + } + console.log() + process.exit(1) + } +} diff --git a/build/dev-client.js b/build/dev-client.js new file mode 100644 index 0000000..2f75dd5 --- /dev/null +++ b/build/dev-client.js @@ -0,0 +1,10 @@ +/* eslint-disable */ +'use strict' +require('eventsource-polyfill') +var hotClient = require('webpack-hot-middleware/client?noInfo=true&reload=true') + +hotClient.subscribe(function (event) { + if (event.action === 'reload') { + window.location.reload() + } +}) diff --git a/build/dev-server.js b/build/dev-server.js new file mode 100644 index 0000000..3d9e1f1 --- /dev/null +++ b/build/dev-server.js @@ -0,0 +1,105 @@ +'use strict' +require('./check-versions')() + +const config = require('../config') +if (!process.env.NODE_ENV) { + process.env.NODE_ENV = JSON.parse(config.dev.env.NODE_ENV) +} + +const opn = require('opn') +const path = require('path') +const express = require('express') +const webpack = require('webpack') +const proxyMiddleware = require('http-proxy-middleware') +const webpackConfig = require('./webpack.dev.conf') + +// default port where dev server listens for incoming traffic +const port = process.env.PORT || config.dev.port +// automatically open browser, if not set will be false +const autoOpenBrowser = !!config.dev.autoOpenBrowser +// Define HTTP proxies to your custom API backend +// https://github.com/chimurai/http-proxy-middleware +const proxyTable = config.dev.proxyTable + +const app = express() +const compiler = webpack(webpackConfig) + +const devMiddleware = require('webpack-dev-middleware')(compiler, { + publicPath: webpackConfig.output.publicPath, + quiet: true +}) + +const hotMiddleware = require('webpack-hot-middleware')(compiler, { + log: false, + heartbeat: 2000 +}) +// force page reload when html-webpack-plugin template changes +// currently disabled until this is resolved: +// https://github.com/jantimon/html-webpack-plugin/issues/680 +// compiler.plugin('compilation', function (compilation) { +// compilation.plugin('html-webpack-plugin-after-emit', function (data, cb) { +// hotMiddleware.publish({ action: 'reload' }) +// cb() +// }) +// }) + +// enable hot-reload and state-preserving +// compilation error display +app.use(hotMiddleware) + +// proxy api requests +Object.keys(proxyTable).forEach(function (context) { + let options = proxyTable[context] + if (typeof options === 'string') { + options = { target: options } + } + app.use(proxyMiddleware(options.filter || context, options)) +}) + +// handle fallback for HTML5 history API +app.use(require('connect-history-api-fallback')()) + +// serve webpack bundle output +app.use(devMiddleware) + +// serve pure static assets +const staticPath = path.posix.join(config.dev.assetsPublicPath, config.dev.assetsSubDirectory) +app.use(staticPath, express.static('./static')) + +const uri = 'http://localhost:' + port + +var _resolve +var _reject +var readyPromise = new Promise((resolve, reject) => { + _resolve = resolve + _reject = reject +}) + +var server +var portfinder = require('portfinder') +portfinder.basePort = port + +console.log('> Starting dev server...') +devMiddleware.waitUntilValid(() => { + portfinder.getPort((err, port) => { + if (err) { + _reject(err) + } + process.env.PORT = port + var uri = 'http://localhost:' + port + console.log('> Listening at ' + uri + '\n') + // when env is testing, don't need open it + if (autoOpenBrowser && process.env.NODE_ENV !== 'testing') { + opn(uri) + } + server = app.listen(port) + _resolve() + }) +}) + +module.exports = { + ready: readyPromise, + close: () => { + server.close() + } +} diff --git a/build/utils.js b/build/utils.js new file mode 100644 index 0000000..34c0319 --- /dev/null +++ b/build/utils.js @@ -0,0 +1,73 @@ +'use strict' +const path = require('path') +const config = require('../config') +const ExtractTextPlugin = require('extract-text-webpack-plugin') + +exports.assetsPath = function (_path) { + const assetsSubDirectory = process.env.NODE_ENV === 'production' + ? config.build.assetsSubDirectory + : config.dev.assetsSubDirectory + return path.posix.join(assetsSubDirectory, _path) +} + + +exports.cssLoaders = function (options) { + options = options || {} + + const cssLoader = { + loader: 'css-loader', + options: { + minimize: process.env.NODE_ENV === 'production', + sourceMap: options.sourceMap + } + } + + // generate loader string to be used with extract text plugin + function generateLoaders (loader, loaderOptions) { + const loaders = [cssLoader] + if (loader) { + loaders.push({ + loader: loader + '-loader', + options: Object.assign({}, loaderOptions, { + sourceMap: options.sourceMap + }) + }) + } + + // Extract CSS when that option is specified + // (which is the case during production build) + if (options.extract) { + return ExtractTextPlugin.extract({ + use: loaders, + fallback: 'vue-style-loader' + }) + } else { + return ['vue-style-loader'].concat(loaders) + } + } + + // https://vue-loader.vuejs.org/en/configurations/extract-css.html + return { + css: generateLoaders(), + postcss: generateLoaders(), + less: generateLoaders('less'), + sass: generateLoaders('sass', { indentedSyntax: true }), + scss: generateLoaders('sass'), + stylus: generateLoaders('stylus'), + styl: generateLoaders('stylus') + } +} + +// Generate loaders for standalone style files (outside of .vue) +exports.styleLoaders = function (options) { + const output = [] + const loaders = exports.cssLoaders(options) + for (const extension in loaders) { + const loader = loaders[extension] + output.push({ + test: new RegExp('\\.' + extension + '$'), + use: loader + }) + } + return output +} diff --git a/build/vue-loader.conf.js b/build/vue-loader.conf.js new file mode 100644 index 0000000..9a904da --- /dev/null +++ b/build/vue-loader.conf.js @@ -0,0 +1,31 @@ +'use strict' +const utils = require('./utils') +const config = require('../config') +const isProduction = process.env.NODE_ENV === 'production' + +module.exports = { + loaders: utils.cssLoaders({ + sourceMap: isProduction + ? config.build.productionSourceMap + : config.dev.cssSourceMap, + extract: isProduction + }), + transformToRequire: { + video: 'src', + source: 'src', + img: 'src', + image: 'xlink:href' + }, + postcss: [ + require('autoprefixer')({ + browsers: ['iOS >= 7', 'Android >= 4.1'] + }), + // 转换成rem + require('postcss-plugin-px2rem')({ + rootValue: 12, // + selectorBlackList: ['html'], + mediaQuery: true, + propBlackList: ['fontSize'] // 如果要保持font-size不转换 + }) + ], +}; diff --git a/build/webpack.base.conf.js b/build/webpack.base.conf.js new file mode 100644 index 0000000..5b039e0 --- /dev/null +++ b/build/webpack.base.conf.js @@ -0,0 +1,128 @@ +'use strict'; + +const path = require('path'); +const utils = require('./utils'); +const config = require('../config'); +const vuxLoader = require('vux-loader'); +const vueLoaderConfig = require('./vue-loader.conf'); +const ExtractTextPlugin = require('extract-text-webpack-plugin'); + +function resolve(dir) { + return path.join(__dirname, '..', dir); +} + +const webpackConfig = { + entry: { + app: './src/main.js' + }, + output: { + path: config.build.assetsRoot, + libraryTarget: 'umd', + filename: '[name].js', + publicPath: process.env.NODE_ENV === 'production' + ? config.build.assetsPublicPath + : config.dev.assetsPublicPath + }, + resolve: { + extensions: ['.js', '.vue', '.json', '. ' + + ''], + alias: { + 'vue$': 'vue/dist/vue.esm.js', + '@': resolve('src'), + } + }, + devServer: {}, + module: { + rules: [ + // { + // test: /\.(js|vue)$/, + // loader: 'eslint-loader', + // enforce: 'pre', + // include: [resolve('src'), resolve('test')], + // options: { + // formatter: require('eslint-friendly-formatter') + // } + // }, + { + test: /\.vue$/, + loader: 'vue-loader', + options: vueLoaderConfig + }, + { + test: /\.js$/, + loader: 'babel-loader', + include: [resolve('src'), resolve('test')] + }, + { + test: /\.(png|jpe?g|gif|svg)(\?.*)?$/, + loader: 'url-loader', + options: { + limit: 10000, + name: utils.assetsPath('img/[name].[hash:5].[ext]') + } + }, + { + test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/, + loader: 'url-loader', + options: { + limit: 10000, + name: utils.assetsPath('media/[name].[hash:5].[ext]') + } + }, + { + test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/, + loader: 'url-loader', + options: { + limit: 10000, + name: utils.assetsPath('fonts/[name].[hash:5].[ext]') + } + }, + { + test: /\.(eot|svg|ttf|woff|woff2)$/, + loader: 'file-loader' + }, + { + test: /\.css$/, + loader: 'style-loader!css-loader!postcss-loader' + }, + { + test: /vux.src.*?js$/, + loader: 'babel' + } + ] + }, + externals: { + 'vue': 'Vue', // key 代表包名, val 代表 引用的全局对象 + 'vuex': 'Vuex', + 'vue-router': 'VueRouter', + 'fastclick': 'FastClick', + 'echarts': "echarts" + } +}; + + +// vux-loader的相关配置,详情可见其官网 +module.exports = vuxLoader.merge(webpackConfig, { + plugins: [ + 'vux-ui', + { + name: 'duplicate-style', + envs: ['production'] + }, + { + name: 'less-theme', + path: 'src/style/theme.less' // 主题的切换 + }, + { + name: 'style-parser', + fn: function (source) { + if (this.resourcePath.replace(/\\/g, '/').indexOf('/vux/src/components') > -1) { + return source; + } + // 对于自己项目的转换 + return "@import '" + resolve('src/style/variable.less') + "';" + source; + } + } + ] + } +); diff --git a/build/webpack.dev.conf.js b/build/webpack.dev.conf.js new file mode 100644 index 0000000..8d5977d --- /dev/null +++ b/build/webpack.dev.conf.js @@ -0,0 +1,41 @@ +'use strict' +const utils = require('./utils') +const webpack = require('webpack') +const config = require('../config') +const merge = require('webpack-merge') +const baseWebpackConfig = require('./webpack.base.conf') +const HtmlWebpackPlugin = require('html-webpack-plugin') +const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin') +const CopyWebpackPlugin = require('copy-webpack-plugin') + +// add hot-reload related code to entry chunks +Object.keys(baseWebpackConfig.entry).forEach(function (name) { + baseWebpackConfig.entry[name] = ['./build/dev-client'].concat(baseWebpackConfig.entry[name]) +}) + +module.exports = merge(baseWebpackConfig, { + module: { + rules: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap }) + }, + // cheap-module-eval-source-map is faster for development + devtool: '#cheap-module-eval-source-map', + plugins: [ + // 文件复制插件 + new CopyWebpackPlugin([ + { from: './favicon.ico', to: './favicon.ico' } + ]), + new webpack.DefinePlugin({ + 'process.env': config.dev.env + }), + // https://github.com/glenjamin/webpack-hot-middleware#installation--usage + new webpack.HotModuleReplacementPlugin(), + new webpack.NoEmitOnErrorsPlugin(), + // https://github.com/ampedandwired/html-webpack-plugin + new HtmlWebpackPlugin({ + filename: 'index.html', + template: 'index.html', + inject: true + }), + new FriendlyErrorsPlugin() + ] +}) diff --git a/build/webpack.prod.conf.js b/build/webpack.prod.conf.js new file mode 100644 index 0000000..74c70a7 --- /dev/null +++ b/build/webpack.prod.conf.js @@ -0,0 +1,140 @@ +'use strict' +const path = require('path') +const utils = require('./utils') +const webpack = require('webpack') +const config = require('../config') +const merge = require('webpack-merge') +const baseWebpackConfig = require('./webpack.base.conf') +const CopyWebpackPlugin = require('copy-webpack-plugin') +const HtmlWebpackPlugin = require('html-webpack-plugin') +const ExtractTextPlugin = require('extract-text-webpack-plugin') +const OptimizeCSSPlugin = require('optimize-css-assets-webpack-plugin') +const CleanWebpackPlugin = require('clean-webpack-plugin'); +const WebpackCleanPlugin = require('webpack-clean'); + +const env = config.build.env + +const webpackConfig = merge(baseWebpackConfig, { + module: { + rules: utils.styleLoaders({ + sourceMap: config.build.productionSourceMap, + extract: true + }) + }, + devtool: config.build.productionSourceMap ? '#source-map' : false, + output: { + path: config.build.assetsRoot, + filename: utils.assetsPath('js/[name].[chunkhash].js'), + chunkFilename: utils.assetsPath('js/[id].[chunkhash].js') + }, + plugins: [ + // new CleanWebpackPlugin( + // ['dist/*'], //匹配删除的文件 + // { root: __dirname, //根目录 + // verbose: true, //开启在控制台输出信息 + // dry: false //启用删除文件 + // } + // ), + new WebpackCleanPlugin([ + 'dist/static/.svn' + ], path.join(__dirname, '../')), + // 文件复制插件 编译前的文件复制 + new CopyWebpackPlugin([ + {from: './favicon.ico', to: './favicon.ico'} + ]), + // http://vuejs.github.io/vue-loader/en/workflow/production.html + new webpack.DefinePlugin({ + 'process.env': env + }), + // UglifyJs do not support ES6+, you can also use babel-minify for better treeshaking: https://github.com/babel/minify + new webpack.optimize.UglifyJsPlugin({ + compress: { + warnings: false + }, + sourceMap: true + }), + // extract css into its own file + new ExtractTextPlugin({ + filename: utils.assetsPath('css/[name].[contenthash].css') + }), + // Compress extracted CSS. We are using this plugin so that possible + // duplicated CSS from different components can be deduped. + new OptimizeCSSPlugin({ + cssProcessorOptions: { + safe: true + } + }), + // generate dist index.html with correct asset hash for caching. + // you can customize output by editing /index.html + // see https://github.com/ampedandwired/html-webpack-plugin + new HtmlWebpackPlugin({ + filename: config.build.index, + template: 'index.html', + inject: true, + minify: { + removeComments: true, + collapseWhitespace: true, + removeAttributeQuotes: true + // more options: + // https://github.com/kangax/html-minifier#options-quick-reference + }, + // necessary to consistently work with multiple chunks via CommonsChunkPlugin + chunksSortMode: 'dependency' + }), + // keep module.id stable when vender modules does not change + new webpack.HashedModuleIdsPlugin(), + // split vendor js into its own file + new webpack.optimize.CommonsChunkPlugin({ + name: 'vendor', + minChunks: function (module) { + // any required modules inside node_modules are extracted to vendor + return ( + module.resource && + /\.js$/.test(module.resource) && + module.resource.indexOf( + path.join(__dirname, '../node_modules') + ) === 0 + ) + } + }), + // extract webpack runtime and module manifest to its own file in order to + // prevent vendor hash from being updated whenever app bundle is updated + new webpack.optimize.CommonsChunkPlugin({ + name: 'manifest', + chunks: ['vendor'] + }), + // copy custom static assets + new CopyWebpackPlugin([ + { + from: path.resolve(__dirname, '../static'), + to: config.build.assetsSubDirectory, + ignore: ['.*'] + } + ]) + ] +}) + +if (config.build.productionGzip) { + const CompressionWebpackPlugin = require('compression-webpack-plugin') + + webpackConfig.plugins.push( + new CompressionWebpackPlugin({ + asset: '[path].gz[query]', + algorithm: 'gzip', + test: new RegExp( + '\\.(' + + config.build.productionGzipExtensions.join('|') + + ')$' + ), + threshold: 10240, + minRatio: 0.8 + }) + ) +} + +if (config.build.bundleAnalyzerReport) { + const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin + webpackConfig.plugins.push(new BundleAnalyzerPlugin()) +} + +module.exports = webpackConfig diff --git a/config/dev.env.js b/config/dev.env.js new file mode 100644 index 0000000..2fc894c --- /dev/null +++ b/config/dev.env.js @@ -0,0 +1,10 @@ +'use strict' +const merge = require('webpack-merge') +const prodEnv = require('./prod.env') + +module.exports = merge(prodEnv, { + NODE_ENV: '"development"', + // BASE_URL: '"http://192.168.0.87:8084/rainbow_wallet/"', + // BASE_URL_HOST: '"https://t.139xy.cn:8381"', + // BASE_URL: '"https://t.139xy.cn:8381/rainbow_wallet/"', +}) diff --git a/config/index.js b/config/index.js new file mode 100644 index 0000000..008c5ca --- /dev/null +++ b/config/index.js @@ -0,0 +1,73 @@ +'use strict'; +// Template version: 1.1.3 +// see http://vuejs-templates.github.io/webpack for documentation. +const path = require('path'); +module.exports = { + build: { + env: require('./prod.env'), + index: path.resolve(__dirname, '../dist/index.html'), + assetsRoot: path.resolve(__dirname, '../dist'), + assetsSubDirectory: 'static', + assetsPublicPath: '/finlean_wallets/', + productionSourceMap: false, +// Gzip off by default as many popular static hosts such as +// Surge or Netlify already gzip all static assets for you. +// Before setting to `true`, make sure to: +// npm install --save-dev compression-webpack-plugin + productionGzip: true, + productionGzipExtensions: ['js', 'css'], + // Run the build command with an extra argument to + // View the bundle analyzer report after build finishes: + // `npm run build --report` + // Set to `true` or `false` to always turn it on or off + bundleAnalyzerReport: process.env.npm_config_report + }, + dev: { + env: require('./dev.env'), + host: '192.168.10.93', // 我自己的ip ,这里写 0.0.0.0 也可以,但是最好指明ip + port: process.env.PORT || 8099, + autoOpenBrowser: true, + assetsSubDirectory: 'static', + assetsPublicPath: '/', + proxyTable: { + // 代理配置 + '/commerce': { + target: 'https://t.finlean.com', // https://t.finlean.com +// target: 'http://rap2api.taobao.org/app/mock/8339/POST', // rap2 + secure: false, + changeOrigin: true + }, + '/finlean': { + target: 'https://t.finlean.com', // https://t.finlean.com + secure: false, + changeOrigin: true + }, + '/json': { + target: 'https://t.finlean.com', + secure: false, + changeOrigin: true + }, + '/html': { + target: 'https://t.finlean.com', + secure: false, + changeOrigin: true + }, + '/image': { + target: 'https://t.finlean.com', + secure: false, + changeOrigin: true + }, + '/jttech': { + target: 'https://t.finlean.com', + secure: false, + changeOrigin: true + } + }, + // CSS Sourcemaps off by default because relative paths are "buggy" + // with this option, according to the CSS-Loader README + // (https://github.com/webpack/css-loader#sourcemaps) + // In our experience, they generally work as expected, + // just be aware of this issue when enabling this option. + cssSourceMap: false + } +}; diff --git a/config/prod.env.js b/config/prod.env.js new file mode 100644 index 0000000..ec89e0a --- /dev/null +++ b/config/prod.env.js @@ -0,0 +1,5 @@ +'use strict' +module.exports = { + NODE_ENV: '"production"', + BASE_URL: '"https://t.finlean.com/finlean_wallets"', +} diff --git a/favicon.ico b/favicon.ico new file mode 100644 index 0000000..62e24a0 --- /dev/null +++ b/favicon.ico Binary files differ diff --git a/index.html b/index.html new file mode 100644 index 0000000..4c96ddf --- /dev/null +++ b/index.html @@ -0,0 +1,50 @@ +<!DOCTYPE html> +<html style="font-size: 12px;"> +<head> + <meta charset="utf-8"> + <link rel="shortcut icon" href=" ./favicon.ico"/> + <title id="productTitle"></title> + <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, + maximum-scale=1.0, minimum-scale=1.0, viewport-fit=cover"> + <script src="https://cdnjs.finlean.top/js/cdn/echarts.simple.min.js"></script> + <script src="https://cdnjs.finlean.top/js/cdn/polyfill.min.js"></script> + <script src="https://cdnjs.finlean.top/js/cdn/vue.min.js"></script> + <script src="https://cdnjs.finlean.top/js/cdn/vue-router.min.js"></script> + <script src="https://cdnjs.finlean.top/js/cdn/vuex.min.js"></script> + <script src="https://cdnjs.finlean.top/js/cdn/fastclick.min.js"></script> + <script src="https://cdnjs.finlean.top/js/cdn/clipboard.min.js"></script> + <script src="https://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script> + <script type="text/javascript" + src="https://webapi.amap.com/maps?v=1.4.4&key=6c909fa89c5a08581da5a110076b739e"></script> + <style> + p { + margin: 0; + } + + </style> + <script> + + + document.getElementById('productTitle').innerHTML = ""; +</script> +</head> +<body> + +<div id="app-box"></div> +<!-- built files will be auto injected --> +<!--H5 减少http 请求--> +<!--<%=htmlWebpackPlugin.files.webpackManifest%>--> +<!--<script>--> +<!--window.backPageByAndroid =function (obj) {--> +<!--let _show = window.location.hash;--> +<!--if(_show == '#/f-loan/f-credit' || _show == '#/f-loan/f-bank' || _show == '#/f-loan/f-speed' || _show == '#/f-news' || _show == '#/f-mine'){--> +<!--// mian--> +<!--window.location.href = window.location.origin + window.location.pathname + '#/f-main';--> +<!--}else{--> +<!--window.history.go(-1);--> +<!--}--> +<!--}--> +<!--</script>--> + +</body> +</html> diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..761df94 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,10015 @@ +{ + "name": "commerce", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@types/node": { + "version": "9.6.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-9.6.4.tgz", + "integrity": "sha512-Awg4BcUYiZtNKoveGOu654JVPt11V/KIC77iBz8NweyoOAZpz5rUJfPDwwD+ajfTs2HndbTCEB8IuLfX9m/mmw==", + "dev": true + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "accepts": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", + "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", + "dev": true, + "requires": { + "mime-types": "2.1.18", + "negotiator": "0.6.1" + } + }, + "acorn": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.3.tgz", + "integrity": "sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ==", + "dev": true + }, + "acorn-dynamic-import": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz", + "integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=", + "dev": true, + "requires": { + "acorn": "4.0.13" + }, + "dependencies": { + "acorn": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", + "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", + "dev": true + } + } + }, + "acorn-jsx": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", + "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", + "dev": true, + "requires": { + "acorn": "3.3.0" + }, + "dependencies": { + "acorn": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", + "dev": true + } + } + }, + "ajv": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", + "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", + "dev": true, + "requires": { + "co": "4.6.0", + "json-stable-stringify": "1.0.1" + } + }, + "ajv-keywords": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz", + "integrity": "sha1-MU3QpLM2j609/NxU7eYXG4htrzw=", + "dev": true + }, + "align-text": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "dev": true, + "requires": { + "kind-of": "3.2.2", + "longest": "1.0.1", + "repeat-string": "1.6.1" + } + }, + "alloylever": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/alloylever/-/alloylever-1.0.2.tgz", + "integrity": "sha512-a1Hh8K1wdg/5sI5VLr1Rz4rL5dwuTrrkrTsf3uVIHJta2OBAW8SQucmZXyMfKhCb43lvXOll67OtKw66xRhj5Q==" + }, + "alphanum-sort": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", + "dev": true + }, + "ansi-escapes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", + "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", + "dev": true + }, + "ansi-html": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", + "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "3.1.9", + "normalize-path": "2.1.1" + }, + "dependencies": { + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "braces": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.1.tgz", + "integrity": "sha512-SO5lYHA3vO6gz66erVvedSCkp7AKWdv6VcQ2N4ysXfPxdAlxAMMAdwegGGcv1Bqwm7naF1hNdk5d6AAIEHV2nQ==", + "dev": true, + "requires": { + "arr-flatten": "1.1.0", + "array-unique": "0.3.2", + "define-property": "1.0.0", + "extend-shallow": "2.0.1", + "fill-range": "4.0.0", + "isobject": "3.0.1", + "kind-of": "6.0.2", + "repeat-element": "1.1.2", + "snapdragon": "0.8.2", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "1.0.2", + "isobject": "3.0.1" + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "posix-character-classes": "0.1.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "1.0.0", + "is-extendable": "1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "2.0.4" + } + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "0.3.2", + "define-property": "1.0.0", + "expand-brackets": "2.1.4", + "extend-shallow": "2.0.1", + "fragment-cache": "0.2.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "2.0.1", + "is-number": "3.0.0", + "repeat-string": "1.6.1", + "to-regex-range": "2.1.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + }, + "micromatch": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.9.tgz", + "integrity": "sha512-SlIz6sv5UPaAVVFRKodKjCg48EbNoIhgetzfK/Cy0v5U52Z6zB136M8tp0UC9jM53LYbmIRihJszvvqpKkfm9g==", + "dev": true, + "requires": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "braces": "2.3.1", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "extglob": "2.0.4", + "fragment-cache": "0.2.1", + "kind-of": "6.0.2", + "nanomatch": "1.2.9", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + } + } + } + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "1.0.3" + } + }, + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "1.1.0" + } + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true + }, + "array-filter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-1.0.0.tgz", + "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=" + }, + "array-find": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-find/-/array-find-1.0.0.tgz", + "integrity": "sha1-bI4obRHtdoMn+OYuzuhzU8o+eLg=" + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "array-map": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", + "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=" + }, + "array-shuffle": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-shuffle/-/array-shuffle-1.0.1.tgz", + "integrity": "sha1-fqSIKjVrS8pfVF4LblLq9tlxVXo=" + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "1.0.3" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", + "dev": true, + "optional": true + }, + "asn1": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", + "dev": true, + "optional": true + }, + "asn1.js": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.0" + } + }, + "assert": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", + "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", + "dev": true, + "requires": { + "util": "0.10.3" + } + }, + "assert-plus": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", + "dev": true, + "optional": true + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "async": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", + "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", + "dev": true, + "requires": { + "lodash": "4.17.5" + } + }, + "async-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", + "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", + "dev": true + }, + "async-limiter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", + "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true, + "optional": true + }, + "atob": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.0.3.tgz", + "integrity": "sha1-GcenYEc3dEaPILLS0DNyrX1Mv10=", + "dev": true + }, + "autoprefixer": { + "version": "7.2.6", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-7.2.6.tgz", + "integrity": "sha512-Iq8TRIB+/9eQ8rbGhcP7ct5cYb/3qjNYAR2SnzLCEcwF6rvVOax8+9+fccgXk4bEhQGjOZd5TLhsksmAdsbGqQ==", + "dev": true, + "requires": { + "browserslist": "2.11.3", + "caniuse-lite": "1.0.30000819", + "normalize-range": "0.1.2", + "num2fraction": "1.2.2", + "postcss": "6.0.20", + "postcss-value-parser": "3.3.0" + }, + "dependencies": { + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "6.0.20", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.20.tgz", + "integrity": "sha512-Opr6usW30Iy0xEDrJywDckRxtylfO7gTGs3Kfb2LdLQlGsUg89fTy0R3Vm1Dub2YHO7MK58avr0p70+uFFHb7A==", + "dev": true, + "requires": { + "chalk": "2.3.2", + "source-map": "0.6.1", + "supports-color": "5.3.0" + } + }, + "supports-color": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", + "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "autosize": { + "version": "3.0.21", + "resolved": "https://registry.npmjs.org/autosize/-/autosize-3.0.21.tgz", + "integrity": "sha1-8YL0DRd1fZeKE5pMnKQMTA5EhgM=" + }, + "aws-sign2": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", + "dev": true, + "optional": true + }, + "aws4": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", + "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=", + "dev": true, + "optional": true + }, + "axios": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.17.1.tgz", + "integrity": "sha1-LY4+XQvb1zJ/kbyBT1xXZg+Bgk0=", + "requires": { + "follow-redirects": "1.4.1", + "is-buffer": "1.1.6" + } + }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "esutils": "2.0.2", + "js-tokens": "3.0.2" + }, + "dependencies": { + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "babel-core": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.0.tgz", + "integrity": "sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=", + "dev": true, + "requires": { + "babel-code-frame": "6.26.0", + "babel-generator": "6.26.1", + "babel-helpers": "6.24.1", + "babel-messages": "6.23.0", + "babel-register": "6.26.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "convert-source-map": "1.5.1", + "debug": "2.6.9", + "json5": "0.5.1", + "lodash": "4.17.5", + "minimatch": "3.0.4", + "path-is-absolute": "1.0.1", + "private": "0.1.8", + "slash": "1.0.0", + "source-map": "0.5.7" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "babel-eslint": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-7.2.3.tgz", + "integrity": "sha1-sv4tgBJkcPXBlELcdXJTqJdxCCc=", + "dev": true, + "requires": { + "babel-code-frame": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0" + } + }, + "babel-generator": { + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", + "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", + "dev": true, + "requires": { + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "detect-indent": "4.0.0", + "jsesc": "1.3.0", + "lodash": "4.17.5", + "source-map": "0.5.7", + "trim-right": "1.0.1" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "babel-helper-bindify-decorators": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz", + "integrity": "sha1-FMGeXxQte0fxmlJDHlKxzLxAozA=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-builder-binary-assignment-operator-visitor": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz", + "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", + "dev": true, + "requires": { + "babel-helper-explode-assignable-expression": "6.24.1", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-call-delegate": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", + "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", + "dev": true, + "requires": { + "babel-helper-hoist-variables": "6.24.1", + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-define-map": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", + "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", + "dev": true, + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.5" + } + }, + "babel-helper-explode-assignable-expression": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz", + "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-explode-class": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz", + "integrity": "sha1-fcKjkQ3uAHBW4eMdZAztPVTqqes=", + "dev": true, + "requires": { + "babel-helper-bindify-decorators": "6.24.1", + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", + "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", + "dev": true, + "requires": { + "babel-helper-get-function-arity": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-get-function-arity": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", + "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-hoist-variables": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", + "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-optimise-call-expression": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", + "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-regex": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", + "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.5" + } + }, + "babel-helper-remap-async-to-generator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", + "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", + "dev": true, + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-replace-supers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", + "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", + "dev": true, + "requires": { + "babel-helper-optimise-call-expression": "6.24.1", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helpers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", + "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-loader": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-7.1.4.tgz", + "integrity": "sha512-/hbyEvPzBJuGpk9o80R0ZyTej6heEOr59GoEUtn8qFKbnx4cJm9FWES6J/iv644sYgrtVw9JJQkjaLW/bqb5gw==", + "dev": true, + "requires": { + "find-cache-dir": "1.0.0", + "loader-utils": "1.1.0", + "mkdirp": "0.5.1" + } + }, + "babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-check-es2015-constants": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", + "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-syntax-async-functions": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", + "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=", + "dev": true + }, + "babel-plugin-syntax-async-generators": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz", + "integrity": "sha1-a8lj67FuzLrmuStZbrfzXDQqi5o=", + "dev": true + }, + "babel-plugin-syntax-class-properties": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz", + "integrity": "sha1-1+sjt5oxf4VDlixQW4J8fWysJ94=", + "dev": true + }, + "babel-plugin-syntax-decorators": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz", + "integrity": "sha1-MSVjtNvePMgGzuPkFszurd0RrAs=", + "dev": true + }, + "babel-plugin-syntax-dynamic-import": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz", + "integrity": "sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo=", + "dev": true + }, + "babel-plugin-syntax-exponentiation-operator": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", + "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=", + "dev": true + }, + "babel-plugin-syntax-object-rest-spread": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", + "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=", + "dev": true + }, + "babel-plugin-syntax-trailing-function-commas": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", + "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=", + "dev": true + }, + "babel-plugin-transform-async-generator-functions": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz", + "integrity": "sha1-8FiQAUX9PpkHpt3yjaWfIVJYpds=", + "dev": true, + "requires": { + "babel-helper-remap-async-to-generator": "6.24.1", + "babel-plugin-syntax-async-generators": "6.13.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-async-to-generator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", + "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", + "dev": true, + "requires": { + "babel-helper-remap-async-to-generator": "6.24.1", + "babel-plugin-syntax-async-functions": "6.13.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-class-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz", + "integrity": "sha1-anl2PqYdM9NvN7YRqp3vgagbRqw=", + "dev": true, + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-plugin-syntax-class-properties": "6.13.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-decorators": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz", + "integrity": "sha1-eIAT2PjGtSIr33s0Q5Df13Vp4k0=", + "dev": true, + "requires": { + "babel-helper-explode-class": "6.24.1", + "babel-plugin-syntax-decorators": "6.13.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-arrow-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", + "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-block-scoped-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", + "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-block-scoping": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", + "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.5" + } + }, + "babel-plugin-transform-es2015-classes": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", + "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", + "dev": true, + "requires": { + "babel-helper-define-map": "6.26.0", + "babel-helper-function-name": "6.24.1", + "babel-helper-optimise-call-expression": "6.24.1", + "babel-helper-replace-supers": "6.24.1", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-computed-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", + "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-destructuring": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", + "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-duplicate-keys": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", + "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-for-of": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", + "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", + "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", + "dev": true, + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", + "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-amd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", + "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", + "dev": true, + "requires": { + "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-commonjs": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz", + "integrity": "sha1-DYOUApt9xqvhqX7xgeAHWN0uXYo=", + "dev": true, + "requires": { + "babel-plugin-transform-strict-mode": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-systemjs": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", + "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", + "dev": true, + "requires": { + "babel-helper-hoist-variables": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-umd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", + "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", + "dev": true, + "requires": { + "babel-plugin-transform-es2015-modules-amd": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-object-super": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", + "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", + "dev": true, + "requires": { + "babel-helper-replace-supers": "6.24.1", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-parameters": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", + "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", + "dev": true, + "requires": { + "babel-helper-call-delegate": "6.24.1", + "babel-helper-get-function-arity": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-shorthand-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", + "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-spread": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", + "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-sticky-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", + "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", + "dev": true, + "requires": { + "babel-helper-regex": "6.26.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-template-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", + "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-typeof-symbol": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", + "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-unicode-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", + "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", + "dev": true, + "requires": { + "babel-helper-regex": "6.26.0", + "babel-runtime": "6.26.0", + "regexpu-core": "2.0.0" + } + }, + "babel-plugin-transform-exponentiation-operator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz", + "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", + "dev": true, + "requires": { + "babel-helper-builder-binary-assignment-operator-visitor": "6.24.1", + "babel-plugin-syntax-exponentiation-operator": "6.13.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-object-rest-spread": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz", + "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=", + "dev": true, + "requires": { + "babel-plugin-syntax-object-rest-spread": "6.13.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-regenerator": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", + "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", + "dev": true, + "requires": { + "regenerator-transform": "0.10.1" + } + }, + "babel-plugin-transform-runtime": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.23.0.tgz", + "integrity": "sha1-iEkNRGUC6puOfvsP4J7E2ZR5se4=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-strict-mode": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", + "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-preset-env": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.6.1.tgz", + "integrity": "sha512-W6VIyA6Ch9ePMI7VptNn2wBM6dbG0eSz25HEiL40nQXCsXGTGZSTZu1Iap+cj3Q0S5a7T9+529l/5Bkvd+afNA==", + "dev": true, + "requires": { + "babel-plugin-check-es2015-constants": "6.22.0", + "babel-plugin-syntax-trailing-function-commas": "6.22.0", + "babel-plugin-transform-async-to-generator": "6.24.1", + "babel-plugin-transform-es2015-arrow-functions": "6.22.0", + "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0", + "babel-plugin-transform-es2015-block-scoping": "6.26.0", + "babel-plugin-transform-es2015-classes": "6.24.1", + "babel-plugin-transform-es2015-computed-properties": "6.24.1", + "babel-plugin-transform-es2015-destructuring": "6.23.0", + "babel-plugin-transform-es2015-duplicate-keys": "6.24.1", + "babel-plugin-transform-es2015-for-of": "6.23.0", + "babel-plugin-transform-es2015-function-name": "6.24.1", + "babel-plugin-transform-es2015-literals": "6.22.0", + "babel-plugin-transform-es2015-modules-amd": "6.24.1", + "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", + "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", + "babel-plugin-transform-es2015-modules-umd": "6.24.1", + "babel-plugin-transform-es2015-object-super": "6.24.1", + "babel-plugin-transform-es2015-parameters": "6.24.1", + "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", + "babel-plugin-transform-es2015-spread": "6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "6.24.1", + "babel-plugin-transform-es2015-template-literals": "6.22.0", + "babel-plugin-transform-es2015-typeof-symbol": "6.23.0", + "babel-plugin-transform-es2015-unicode-regex": "6.24.1", + "babel-plugin-transform-exponentiation-operator": "6.24.1", + "babel-plugin-transform-regenerator": "6.26.0", + "browserslist": "2.11.3", + "invariant": "2.2.4", + "semver": "5.5.0" + } + }, + "babel-preset-stage-2": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz", + "integrity": "sha1-2eKWD7PXEYfw5k7sYrwHdnIZvcE=", + "dev": true, + "requires": { + "babel-plugin-syntax-dynamic-import": "6.18.0", + "babel-plugin-transform-class-properties": "6.24.1", + "babel-plugin-transform-decorators": "6.24.1", + "babel-preset-stage-3": "6.24.1" + } + }, + "babel-preset-stage-3": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz", + "integrity": "sha1-g2raCp56f6N8sTj7kyb4eTSkg5U=", + "dev": true, + "requires": { + "babel-plugin-syntax-trailing-function-commas": "6.22.0", + "babel-plugin-transform-async-generator-functions": "6.24.1", + "babel-plugin-transform-async-to-generator": "6.24.1", + "babel-plugin-transform-exponentiation-operator": "6.24.1", + "babel-plugin-transform-object-rest-spread": "6.26.0" + } + }, + "babel-register": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", + "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", + "dev": true, + "requires": { + "babel-core": "6.26.0", + "babel-runtime": "6.26.0", + "core-js": "2.5.3", + "home-or-tmp": "2.0.0", + "lodash": "4.17.5", + "mkdirp": "0.5.1", + "source-map-support": "0.4.18" + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "dev": true, + "requires": { + "core-js": "2.5.3", + "regenerator-runtime": "0.11.1" + } + }, + "babel-template": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", + "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "lodash": "4.17.5" + } + }, + "babel-traverse": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "dev": true, + "requires": { + "babel-code-frame": "6.26.0", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "debug": "2.6.9", + "globals": "9.18.0", + "invariant": "2.2.4", + "lodash": "4.17.5" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "esutils": "2.0.2", + "lodash": "4.17.5", + "to-fast-properties": "1.0.3" + } + }, + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "requires": { + "cache-base": "1.0.1", + "class-utils": "0.3.6", + "component-emitter": "1.2.1", + "define-property": "1.0.0", + "isobject": "3.0.1", + "mixin-deep": "1.3.1", + "pascalcase": "0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "base64-js": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.3.tgz", + "integrity": "sha512-MsAhsUW1GxCdgYSO6tAfZrNapmUKk7mWx/k5mFY/A1gBtkaCaNapTg+FExCw1r9yeaZhqx/xPg43xgTFH6KL5w==", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", + "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", + "dev": true, + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "bfj-node4": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/bfj-node4/-/bfj-node4-5.3.1.tgz", + "integrity": "sha512-SOmOsowQWfXc7ybFARsK3C4MCOWzERaOMV/Fl3Tgjs+5dJWyzo3oa127jL44eMbQiAN17J7SvAs2TRxEScTUmg==", + "dev": true, + "requires": { + "bluebird": "3.5.1", + "check-types": "7.3.0", + "tryer": "1.0.0" + } + }, + "big.js": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", + "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==" + }, + "binary-extensions": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz", + "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=", + "dev": true + }, + "bluebird": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", + "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" + }, + "blueimp-md5": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/blueimp-md5/-/blueimp-md5-2.10.0.tgz", + "integrity": "sha512-EkNUOi7tpV68TqjpiUz9D9NcT8um2+qtgntmMbi5UKssVX2m/2PLqotcric0RE63pB3HPN/fjf3cKHN2ufGSUQ==" + }, + "bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", + "dev": true + }, + "body-parser": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", + "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", + "dev": true, + "requires": { + "bytes": "3.0.0", + "content-type": "1.0.4", + "debug": "2.6.9", + "depd": "1.1.2", + "http-errors": "1.6.2", + "iconv-lite": "0.4.19", + "on-finished": "2.3.0", + "qs": "6.5.1", + "raw-body": "2.3.2", + "type-is": "1.6.16" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "boom": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "1.8.2", + "preserve": "0.2.0", + "repeat-element": "1.1.2" + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true + }, + "browserify-aes": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.1.1.tgz", + "integrity": "sha512-UGnTYAnB2a3YuYKIRy1/4FB2HdM866E0qC46JXvVTYKlBlZlnvfpSfY6OKfXZAkv70eJ2a1SqzpAo5CRhZGDFg==", + "dev": true, + "requires": { + "buffer-xor": "1.0.3", + "cipher-base": "1.0.4", + "create-hash": "1.1.3", + "evp_bytestokey": "1.0.3", + "inherits": "2.0.3", + "safe-buffer": "5.1.1" + } + }, + "browserify-cipher": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.0.tgz", + "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=", + "dev": true, + "requires": { + "browserify-aes": "1.1.1", + "browserify-des": "1.0.0", + "evp_bytestokey": "1.0.3" + } + }, + "browserify-des": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.0.tgz", + "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=", + "dev": true, + "requires": { + "cipher-base": "1.0.4", + "des.js": "1.0.0", + "inherits": "2.0.3" + } + }, + "browserify-rsa": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "randombytes": "2.0.6" + } + }, + "browserify-sign": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", + "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "browserify-rsa": "4.0.1", + "create-hash": "1.1.3", + "create-hmac": "1.1.6", + "elliptic": "6.4.0", + "inherits": "2.0.3", + "parse-asn1": "5.1.0" + } + }, + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dev": true, + "requires": { + "pako": "1.0.6" + } + }, + "browserslist": { + "version": "2.11.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.11.3.tgz", + "integrity": "sha512-yWu5cXT7Av6mVwzWc8lMsJMHWn4xyjSuGYi4IozbVTLUOEYPSagUB8kiMDUHA1fS3zjr8nkxkn9jdvug4BBRmA==", + "dev": true, + "requires": { + "caniuse-lite": "1.0.30000819", + "electron-to-chromium": "1.3.40" + } + }, + "buffer": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "dev": true, + "requires": { + "base64-js": "1.2.3", + "ieee754": "1.1.10", + "isarray": "1.0.0" + } + }, + "buffer-from": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.0.0.tgz", + "integrity": "sha512-83apNb8KK0Se60UE1+4Ukbe3HbfELJ6UlI4ldtOGs7So4KD26orJM8hIY9lxdzP+UpItH1Yh/Y8GUvNFWFFRxA==" + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true + }, + "cacache": { + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz", + "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==", + "requires": { + "bluebird": "3.5.1", + "chownr": "1.0.1", + "glob": "7.1.2", + "graceful-fs": "4.1.11", + "lru-cache": "4.1.2", + "mississippi": "2.0.0", + "mkdirp": "0.5.1", + "move-concurrently": "1.0.1", + "promise-inflight": "1.0.1", + "rimraf": "2.6.2", + "ssri": "5.3.0", + "unique-filename": "1.1.0", + "y18n": "4.0.0" + } + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "requires": { + "collection-visit": "1.0.0", + "component-emitter": "1.2.1", + "get-value": "2.0.6", + "has-value": "1.0.0", + "isobject": "3.0.1", + "set-value": "2.0.0", + "to-object-path": "0.3.0", + "union-value": "1.0.0", + "unset-value": "1.0.0" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "caller-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", + "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", + "dev": true, + "requires": { + "callsites": "0.2.0" + } + }, + "callsites": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", + "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", + "dev": true + }, + "camel-case": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", + "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", + "dev": true, + "requires": { + "no-case": "2.3.2", + "upper-case": "1.1.3" + } + }, + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "dev": true + }, + "caniuse-api": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-1.6.1.tgz", + "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=", + "dev": true, + "requires": { + "browserslist": "1.7.7", + "caniuse-db": "1.0.30000819", + "lodash.memoize": "4.1.2", + "lodash.uniq": "4.5.0" + }, + "dependencies": { + "browserslist": { + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", + "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", + "dev": true, + "requires": { + "caniuse-db": "1.0.30000819", + "electron-to-chromium": "1.3.40" + } + } + } + }, + "caniuse-db": { + "version": "1.0.30000819", + "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000819.tgz", + "integrity": "sha1-w7fdVZ5ebWPV3Kpiusa9BMdhlwk=", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30000819", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000819.tgz", + "integrity": "sha512-9i1d8eiKA6dLvsMrVrXOTP9/1sd9iIv4iC/UbPbIa9iQd9Gcnozi2sQ0d69TiQY9l7Alt7YIWISOBwyGSM6H0Q==", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true, + "optional": true + }, + "center-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "dev": true, + "requires": { + "align-text": "0.1.4", + "lazy-cache": "1.0.4" + } + }, + "chalk": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", + "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", + "dev": true, + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "1.9.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", + "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "check-types": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/check-types/-/check-types-7.3.0.tgz", + "integrity": "sha1-Ro9XGkQ1wkJI9f0MsOjYfDw0Hn0=", + "dev": true + }, + "chokidar": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.2.tgz", + "integrity": "sha512-l32Hw3wqB0L2kGVmSbK/a+xXLDrUEsc84pSgMkmwygHvD7ubRsP/vxxHa5BtB6oix1XLLVCHyYMsckRXxThmZw==", + "dev": true, + "requires": { + "anymatch": "2.0.0", + "async-each": "1.0.1", + "braces": "2.3.1", + "glob-parent": "3.1.0", + "inherits": "2.0.3", + "is-binary-path": "1.0.1", + "is-glob": "4.0.0", + "normalize-path": "2.1.1", + "path-is-absolute": "1.0.1", + "readdirp": "2.1.0", + "upath": "1.0.4" + }, + "dependencies": { + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "braces": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.1.tgz", + "integrity": "sha512-SO5lYHA3vO6gz66erVvedSCkp7AKWdv6VcQ2N4ysXfPxdAlxAMMAdwegGGcv1Bqwm7naF1hNdk5d6AAIEHV2nQ==", + "dev": true, + "requires": { + "arr-flatten": "1.1.0", + "array-unique": "0.3.2", + "define-property": "1.0.0", + "extend-shallow": "2.0.1", + "fill-range": "4.0.0", + "isobject": "3.0.1", + "kind-of": "6.0.2", + "repeat-element": "1.1.2", + "snapdragon": "0.8.2", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" + } + }, + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "2.0.1", + "is-number": "3.0.0", + "repeat-string": "1.6.1", + "to-regex-range": "2.1.1" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "3.1.0", + "path-dirname": "1.0.2" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "2.1.1" + } + } + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "chownr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz", + "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=" + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.1" + } + }, + "circular-json": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", + "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", + "dev": true + }, + "clap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz", + "integrity": "sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==", + "dev": true, + "requires": { + "chalk": "1.1.3" + }, + "dependencies": { + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "requires": { + "arr-union": "3.1.0", + "define-property": "0.2.5", + "isobject": "3.0.1", + "static-extend": "0.1.2" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "clean-css": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.11.tgz", + "integrity": "sha1-Ls3xRaujj1R0DybO/Q/z4D4SXWo=", + "dev": true, + "requires": { + "source-map": "0.5.7" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "clean-webpack-plugin": { + "version": "0.1.19", + "resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-0.1.19.tgz", + "integrity": "sha512-M1Li5yLHECcN2MahoreuODul5LkjohJGFxLPTjl3j1ttKrF5rgjZET1SJduuqxLAuT1gAPOdkhg03qcaaU1KeA==", + "dev": true, + "requires": { + "rimraf": "2.6.2" + } + }, + "cli-cursor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", + "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", + "dev": true, + "requires": { + "restore-cursor": "1.0.1" + } + }, + "cli-spinners": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-1.1.0.tgz", + "integrity": "sha1-8YR7FohE2RemceudFH499JfJDQY=", + "dev": true + }, + "cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", + "dev": true + }, + "cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "dev": true, + "requires": { + "center-align": "0.1.3", + "right-align": "0.1.3", + "wordwrap": "0.0.2" + }, + "dependencies": { + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "dev": true + } + } + }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, + "coa": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/coa/-/coa-1.0.4.tgz", + "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=", + "dev": true, + "requires": { + "q": "1.5.1" + } + }, + "coalescy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/coalescy/-/coalescy-1.0.0.tgz", + "integrity": "sha1-SwZYRrg2NhrabEtKSr9LwcrDG/E=", + "dev": true + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "1.0.0", + "object-visit": "1.0.1" + } + }, + "color": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/color/-/color-0.11.4.tgz", + "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=", + "dev": true, + "requires": { + "clone": "1.0.4", + "color-convert": "1.9.1", + "color-string": "0.3.0" + } + }, + "color-convert": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", + "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "color-string": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz", + "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "colormin": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colormin/-/colormin-1.1.2.tgz", + "integrity": "sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=", + "dev": true, + "requires": { + "color": "0.11.4", + "css-color-names": "0.0.4", + "has": "1.0.1" + } + }, + "colors": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", + "dev": true + }, + "combined-stream": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", + "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", + "dev": true, + "requires": { + "delayed-stream": "1.0.0" + } + }, + "commander": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", + "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" + }, + "compare-versions": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.1.0.tgz", + "integrity": "sha512-4hAxDSBypT/yp2ySFD346So6Ragw5xmBn/e/agIGl3bZr6DLUqnoRZPusxKrXdYRZpgexO9daejmIenlq/wrIQ==", + "dev": true + }, + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "compression-webpack-plugin": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/compression-webpack-plugin/-/compression-webpack-plugin-1.1.11.tgz", + "integrity": "sha512-ZVWKrTQhtOP7rDx3M/koXTnRm/iwcYbuCdV+i4lZfAIe32Mov7vUVM0+8Vpz4q0xH+TBUZxq+rM8nhtkDH50YQ==", + "requires": { + "cacache": "10.0.4", + "find-cache-dir": "1.0.0", + "neo-async": "2.5.0", + "serialize-javascript": "1.4.0", + "webpack-sources": "1.1.0" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "requires": { + "buffer-from": "1.0.0", + "inherits": "2.0.3", + "readable-stream": "2.3.5", + "typedarray": "0.0.6" + } + }, + "config-chain": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.11.tgz", + "integrity": "sha1-q6CXR9++TD5w52am5BWG4YWfxvI=", + "dev": true, + "requires": { + "ini": "1.3.5", + "proto-list": "1.2.4" + } + }, + "connect-history-api-fallback": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", + "integrity": "sha1-sGhzk0vF40T+9hGhlqb6rgruAVo=", + "dev": true + }, + "console-browserify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", + "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", + "dev": true, + "requires": { + "date-now": "0.1.4" + } + }, + "consolidate": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.14.5.tgz", + "integrity": "sha1-WiUEe8dvcwcmZ8jLUsmJiI9JTGM=", + "dev": true, + "requires": { + "bluebird": "3.5.1" + } + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true + }, + "contains-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", + "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", + "dev": true + }, + "content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", + "dev": true + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true + }, + "convert-source-map": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", + "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=", + "dev": true + }, + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true + }, + "copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "requires": { + "aproba": "1.2.0", + "fs-write-stream-atomic": "1.0.10", + "iferr": "0.1.5", + "mkdirp": "0.5.1", + "rimraf": "2.6.2", + "run-queue": "1.0.3" + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "copy-webpack-plugin": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-4.5.1.tgz", + "integrity": "sha512-OlTo6DYg0XfTKOF8eLf79wcHm4Ut10xU2cRBRPMW/NA5F9VMjZGTfRHWDIYC3s+1kObGYrBLshXWU1K0hILkNQ==", + "dev": true, + "requires": { + "cacache": "10.0.4", + "find-cache-dir": "1.0.0", + "globby": "7.1.1", + "is-glob": "4.0.0", + "loader-utils": "1.1.0", + "minimatch": "3.0.4", + "p-limit": "1.2.0", + "serialize-javascript": "1.4.0" + } + }, + "core-js": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz", + "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "cosmiconfig": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.2.2.tgz", + "integrity": "sha512-GiNXLwAFPYHy25XmTPpafYvn3CLAkJ8FLsscq78MQd1Kh0OU6Yzhn4eV2MVF4G9WEQZoWEGltatdR+ntGPMl5A==", + "dev": true, + "requires": { + "is-directory": "0.3.1", + "js-yaml": "3.7.0", + "minimist": "1.2.0", + "object-assign": "4.1.1", + "os-homedir": "1.0.2", + "parse-json": "2.2.0", + "require-from-string": "1.2.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "countup.js": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/countup.js/-/countup.js-1.9.3.tgz", + "integrity": "sha1-zj5QzXFgRB5HjwfaMYle3MDxyd0=" + }, + "create-ecdh": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.0.tgz", + "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "elliptic": "6.4.0" + } + }, + "create-hash": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", + "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=", + "dev": true, + "requires": { + "cipher-base": "1.0.4", + "inherits": "2.0.3", + "ripemd160": "2.0.1", + "sha.js": "2.4.11" + } + }, + "create-hmac": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz", + "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=", + "dev": true, + "requires": { + "cipher-base": "1.0.4", + "create-hash": "1.1.3", + "inherits": "2.0.3", + "ripemd160": "2.0.1", + "safe-buffer": "5.1.1", + "sha.js": "2.4.11" + } + }, + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "4.1.2", + "shebang-command": "1.2.0", + "which": "1.3.0" + } + }, + "cryptiles": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "dev": true, + "optional": true, + "requires": { + "boom": "2.10.1" + } + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dev": true, + "requires": { + "browserify-cipher": "1.0.0", + "browserify-sign": "4.0.4", + "create-ecdh": "4.0.0", + "create-hash": "1.1.3", + "create-hmac": "1.1.6", + "diffie-hellman": "5.0.2", + "inherits": "2.0.3", + "pbkdf2": "3.0.14", + "public-encrypt": "4.0.0", + "randombytes": "2.0.6", + "randomfill": "1.0.4" + } + }, + "crypto-js": { + "version": "3.1.9-1", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-3.1.9-1.tgz", + "integrity": "sha1-/aGedh/Ad+Af+/3G6f38WeiAbNg=" + }, + "css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", + "dev": true + }, + "css-loader": { + "version": "0.28.11", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.28.11.tgz", + "integrity": "sha512-wovHgjAx8ZIMGSL8pTys7edA1ClmzxHeY6n/d97gg5odgsxEgKjULPR0viqyC+FWMCL9sfqoC/QCUBo62tLvPg==", + "dev": true, + "requires": { + "babel-code-frame": "6.26.0", + "css-selector-tokenizer": "0.7.0", + "cssnano": "3.10.0", + "icss-utils": "2.1.0", + "loader-utils": "1.1.0", + "lodash.camelcase": "4.3.0", + "object-assign": "4.1.1", + "postcss": "5.2.18", + "postcss-modules-extract-imports": "1.2.0", + "postcss-modules-local-by-default": "1.2.0", + "postcss-modules-scope": "1.1.0", + "postcss-modules-values": "1.3.0", + "postcss-value-parser": "3.3.0", + "source-list-map": "2.0.0" + } + }, + "css-select": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "dev": true, + "requires": { + "boolbase": "1.0.0", + "css-what": "2.1.0", + "domutils": "1.5.1", + "nth-check": "1.0.1" + }, + "dependencies": { + "domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "dev": true, + "requires": { + "dom-serializer": "0.1.0", + "domelementtype": "1.3.0" + } + } + } + }, + "css-selector-tokenizer": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz", + "integrity": "sha1-5piEdK6MlTR3v15+/s/OzNnPTIY=", + "dev": true, + "requires": { + "cssesc": "0.1.0", + "fastparse": "1.1.1", + "regexpu-core": "1.0.0" + }, + "dependencies": { + "regexpu-core": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz", + "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", + "dev": true, + "requires": { + "regenerate": "1.3.3", + "regjsgen": "0.2.0", + "regjsparser": "0.1.5" + } + } + } + }, + "css-what": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz", + "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=", + "dev": true + }, + "cssesc": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz", + "integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=", + "dev": true + }, + "cssnano": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-3.10.0.tgz", + "integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=", + "dev": true, + "requires": { + "autoprefixer": "6.7.7", + "decamelize": "1.2.0", + "defined": "1.0.0", + "has": "1.0.1", + "object-assign": "4.1.1", + "postcss": "5.2.18", + "postcss-calc": "5.3.1", + "postcss-colormin": "2.2.2", + "postcss-convert-values": "2.6.1", + "postcss-discard-comments": "2.0.4", + "postcss-discard-duplicates": "2.1.0", + "postcss-discard-empty": "2.1.0", + "postcss-discard-overridden": "0.1.1", + "postcss-discard-unused": "2.2.3", + "postcss-filter-plugins": "2.0.2", + "postcss-merge-idents": "2.1.7", + "postcss-merge-longhand": "2.0.2", + "postcss-merge-rules": "2.1.2", + "postcss-minify-font-values": "1.0.5", + "postcss-minify-gradients": "1.0.5", + "postcss-minify-params": "1.2.2", + "postcss-minify-selectors": "2.1.1", + "postcss-normalize-charset": "1.1.1", + "postcss-normalize-url": "3.0.8", + "postcss-ordered-values": "2.2.3", + "postcss-reduce-idents": "2.4.0", + "postcss-reduce-initial": "1.0.1", + "postcss-reduce-transforms": "1.0.4", + "postcss-svgo": "2.1.6", + "postcss-unique-selectors": "2.0.2", + "postcss-value-parser": "3.3.0", + "postcss-zindex": "2.2.0" + }, + "dependencies": { + "autoprefixer": { + "version": "6.7.7", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz", + "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=", + "dev": true, + "requires": { + "browserslist": "1.7.7", + "caniuse-db": "1.0.30000819", + "normalize-range": "0.1.2", + "num2fraction": "1.2.2", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0" + } + }, + "browserslist": { + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", + "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", + "dev": true, + "requires": { + "caniuse-db": "1.0.30000819", + "electron-to-chromium": "1.3.40" + } + } + } + }, + "csso": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/csso/-/csso-2.3.2.tgz", + "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=", + "dev": true, + "requires": { + "clap": "1.2.3", + "source-map": "0.5.7" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "cyclist": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", + "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=" + }, + "d": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", + "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", + "dev": true, + "requires": { + "es5-ext": "0.10.41" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true, + "optional": true + } + } + }, + "date-now": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", + "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", + "dev": true + }, + "de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=", + "dev": true + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "define-properties": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", + "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", + "dev": true, + "requires": { + "foreach": "2.0.5", + "object-keys": "1.0.11" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", + "dev": true + }, + "del": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", + "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", + "dev": true, + "requires": { + "globby": "5.0.0", + "is-path-cwd": "1.0.0", + "is-path-in-cwd": "1.0.0", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "rimraf": "2.6.2" + }, + "dependencies": { + "globby": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", + "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", + "dev": true, + "requires": { + "array-union": "1.0.2", + "arrify": "1.0.1", + "glob": "7.1.2", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "des.js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", + "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "minimalistic-assert": "1.0.0" + } + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "detect-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", + "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", + "dev": true, + "requires": { + "repeating": "2.0.1" + } + }, + "diffie-hellman": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.2.tgz", + "integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "miller-rabin": "4.0.1", + "randombytes": "2.0.6" + } + }, + "dir-glob": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", + "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", + "dev": true, + "requires": { + "arrify": "1.0.1", + "path-type": "3.0.0" + } + }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "2.0.2" + } + }, + "dom-converter": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.1.4.tgz", + "integrity": "sha1-pF71cnuJDJv/5tfIduexnLDhfzs=", + "dev": true, + "requires": { + "utila": "0.3.3" + }, + "dependencies": { + "utila": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.3.3.tgz", + "integrity": "sha1-1+jn1+MJEHCSsF+NloiCTWM6QiY=", + "dev": true + } + } + }, + "dom-serializer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", + "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", + "dev": true, + "requires": { + "domelementtype": "1.1.3", + "entities": "1.1.1" + }, + "dependencies": { + "domelementtype": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", + "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", + "dev": true + } + } + }, + "domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "dev": true + }, + "domelementtype": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", + "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=", + "dev": true + }, + "domhandler": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.1.tgz", + "integrity": "sha1-iS5HAAqZvlW783dP/qBWHYh5wlk=", + "dev": true, + "requires": { + "domelementtype": "1.3.0" + } + }, + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dev": true, + "requires": { + "dom-serializer": "0.1.0", + "domelementtype": "1.3.0" + } + }, + "draftlog": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/draftlog/-/draftlog-1.0.12.tgz", + "integrity": "sha1-fbajxbYhBrsy3Uo11nvMy2x9naA=", + "dev": true + }, + "duplexer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", + "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", + "dev": true + }, + "duplexify": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.4.tgz", + "integrity": "sha512-JzYSLYMhoVVBe8+mbHQ4KgpvHpm0DZpJuL8PY93Vyv1fW7jYJ90LoXa1di/CVbJM+TgMs91rbDapE/RNIfnJsA==", + "requires": { + "end-of-stream": "1.4.1", + "inherits": "2.0.3", + "readable-stream": "2.3.5", + "stream-shift": "1.0.0" + } + }, + "ecc-jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "dev": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "echarts": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/echarts/-/echarts-4.0.4.tgz", + "integrity": "sha512-PDWGchRwBvMcNJbg94/thIIDgD8Jw2APtbK6K9rq1X8h6rQIdQ3IFTEvRwGS9U0zsUgJQQwXFLXIw+RJ/EH3fw==", + "requires": { + "zrender": "4.0.3" + } + }, + "editorconfig": { + "version": "0.13.3", + "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.13.3.tgz", + "integrity": "sha512-WkjsUNVCu+ITKDj73QDvi0trvpdDWdkDyHybDGSXPfekLCqwmpD7CP7iPbvBgosNuLcI96XTDwNa75JyFl7tEQ==", + "dev": true, + "requires": { + "bluebird": "3.5.1", + "commander": "2.15.1", + "lru-cache": "3.2.0", + "semver": "5.5.0", + "sigmund": "1.0.1" + }, + "dependencies": { + "lru-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-3.2.0.tgz", + "integrity": "sha1-cXibO39Tmb7IVl3aOKow0qCX7+4=", + "dev": true, + "requires": { + "pseudomap": "1.0.2" + } + } + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "ejs": { + "version": "2.5.7", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.5.7.tgz", + "integrity": "sha1-zIcsFoiArjxxiXYv1f/ACJbJUYo=", + "dev": true + }, + "electron-to-chromium": { + "version": "1.3.40", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.40.tgz", + "integrity": "sha1-H71tl779crim+SHcONIkE9L2/d8=", + "dev": true + }, + "elliptic": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", + "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "brorand": "1.1.0", + "hash.js": "1.1.3", + "hmac-drbg": "1.0.1", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.0", + "minimalistic-crypto-utils": "1.0.1" + } + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, + "end-of-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "requires": { + "once": "1.4.0" + } + }, + "enhanced-resolve": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz", + "integrity": "sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "memory-fs": "0.4.1", + "object-assign": "4.1.1", + "tapable": "0.2.8" + } + }, + "entities": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", + "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=", + "dev": true + }, + "errno": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", + "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "dev": true, + "requires": { + "prr": "1.0.1" + } + }, + "error-ex": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", + "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", + "dev": true, + "requires": { + "is-arrayish": "0.2.1" + } + }, + "error-stack-parser": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.1.tgz", + "integrity": "sha1-oyArj7AxFKqbQKDjZp5IsrZaAQo=", + "dev": true, + "requires": { + "stackframe": "1.0.4" + } + }, + "es5-ext": { + "version": "0.10.41", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.41.tgz", + "integrity": "sha512-MYK02wXfwTMie5TEJWPolgOsXEmz7wKCQaGzgmRjZOoV6VLG8I5dSv2bn6AOClXhK64gnSQTQ9W9MKvx87J4gw==", + "dev": true, + "requires": { + "es6-iterator": "2.0.3", + "es6-symbol": "3.1.1", + "next-tick": "1.0.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.41", + "es6-symbol": "3.1.1" + } + }, + "es6-map": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", + "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.41", + "es6-iterator": "2.0.3", + "es6-set": "0.1.5", + "es6-symbol": "3.1.1", + "event-emitter": "0.3.5" + } + }, + "es6-set": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", + "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.41", + "es6-iterator": "2.0.3", + "es6-symbol": "3.1.1", + "event-emitter": "0.3.5" + } + }, + "es6-symbol": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", + "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.41" + } + }, + "es6-weak-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", + "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.41", + "es6-iterator": "2.0.3", + "es6-symbol": "3.1.1" + } + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "escodegen": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz", + "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==", + "dev": true, + "requires": { + "esprima": "3.1.3", + "estraverse": "4.2.0", + "esutils": "2.0.2", + "optionator": "0.8.2", + "source-map": "0.6.1" + }, + "dependencies": { + "esprima": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", + "dev": true + } + } + }, + "escope": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", + "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", + "dev": true, + "requires": { + "es6-map": "0.1.5", + "es6-weak-map": "2.0.2", + "esrecurse": "4.2.1", + "estraverse": "4.2.0" + } + }, + "eslint": { + "version": "3.19.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-3.19.0.tgz", + "integrity": "sha1-yPxiAcf0DdCJQbh8CFdnOGpnmsw=", + "dev": true, + "requires": { + "babel-code-frame": "6.26.0", + "chalk": "1.1.3", + "concat-stream": "1.6.2", + "debug": "2.6.9", + "doctrine": "2.1.0", + "escope": "3.6.0", + "espree": "3.5.4", + "esquery": "1.0.0", + "estraverse": "4.2.0", + "esutils": "2.0.2", + "file-entry-cache": "2.0.0", + "glob": "7.1.2", + "globals": "9.18.0", + "ignore": "3.3.7", + "imurmurhash": "0.1.4", + "inquirer": "0.12.0", + "is-my-json-valid": "2.17.2", + "is-resolvable": "1.1.0", + "js-yaml": "3.7.0", + "json-stable-stringify": "1.0.1", + "levn": "0.3.0", + "lodash": "4.17.5", + "mkdirp": "0.5.1", + "natural-compare": "1.4.0", + "optionator": "0.8.2", + "path-is-inside": "1.0.2", + "pluralize": "1.2.1", + "progress": "1.1.8", + "require-uncached": "1.0.3", + "shelljs": "0.7.8", + "strip-bom": "3.0.0", + "strip-json-comments": "2.0.1", + "table": "3.8.3", + "text-table": "0.2.0", + "user-home": "2.0.0" + }, + "dependencies": { + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "eslint-config-standard": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-10.2.1.tgz", + "integrity": "sha1-wGHk0GbzedwXzVYsZOgZtN1FRZE=", + "dev": true + }, + "eslint-friendly-formatter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-friendly-formatter/-/eslint-friendly-formatter-3.0.0.tgz", + "integrity": "sha1-J4h0Q1psRuwdlPoLH/SU4w7wQpA=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "coalescy": "1.0.0", + "extend": "3.0.1", + "minimist": "1.2.0", + "text-table": "0.2.0" + }, + "dependencies": { + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "eslint-import-resolver-node": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz", + "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==", + "dev": true, + "requires": { + "debug": "2.6.9", + "resolve": "1.6.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "eslint-loader": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-1.9.0.tgz", + "integrity": "sha512-40aN976qSNPyb9ejTqjEthZITpls1SVKtwguahmH1dzGCwQU/vySE+xX33VZmD8csU0ahVNCtFlsPgKqRBiqgg==", + "dev": true, + "requires": { + "loader-fs-cache": "1.0.1", + "loader-utils": "1.1.0", + "object-assign": "4.1.1", + "object-hash": "1.3.0", + "rimraf": "2.6.2" + } + }, + "eslint-module-utils": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.1.1.tgz", + "integrity": "sha512-jDI/X5l/6D1rRD/3T43q8Qgbls2nq5km5KSqiwlyUbGo5+04fXhMKdCPhjwbqAa6HXWaMxj8Q4hQDIh7IadJQw==", + "dev": true, + "requires": { + "debug": "2.6.9", + "pkg-dir": "1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "2.0.1" + } + }, + "pkg-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", + "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", + "dev": true, + "requires": { + "find-up": "1.1.2" + } + } + } + }, + "eslint-plugin-html": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-html/-/eslint-plugin-html-3.2.2.tgz", + "integrity": "sha512-sSuafathF6ImPrzF2vUKEJY6Llq06d/riMTMzlsruDRDhNsQMYp2viUKo+jx+JRr1QevskeUpQcuptp2gN1XVQ==", + "dev": true, + "requires": { + "htmlparser2": "3.9.2", + "semver": "5.5.0" + } + }, + "eslint-plugin-import": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.9.0.tgz", + "integrity": "sha1-JgAu+/ylmJtyiKwEdQi9JPIXsWk=", + "dev": true, + "requires": { + "builtin-modules": "1.1.1", + "contains-path": "0.1.0", + "debug": "2.6.9", + "doctrine": "1.5.0", + "eslint-import-resolver-node": "0.3.2", + "eslint-module-utils": "2.1.1", + "has": "1.0.1", + "lodash": "4.17.5", + "minimatch": "3.0.4", + "read-pkg-up": "2.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "doctrine": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "dev": true, + "requires": { + "esutils": "2.0.2", + "isarray": "1.0.0" + } + } + } + }, + "eslint-plugin-node": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-5.2.1.tgz", + "integrity": "sha512-xhPXrh0Vl/b7870uEbaumb2Q+LxaEcOQ3kS1jtIXanBAwpMre1l5q/l2l/hESYJGEFKuI78bp6Uw50hlpr7B+g==", + "dev": true, + "requires": { + "ignore": "3.3.7", + "minimatch": "3.0.4", + "resolve": "1.6.0", + "semver": "5.3.0" + }, + "dependencies": { + "semver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", + "dev": true + } + } + }, + "eslint-plugin-promise": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-3.7.0.tgz", + "integrity": "sha512-2WO+ZFh7vxUKRfR0cOIMrWgYKdR6S1AlOezw6pC52B6oYpd5WFghN+QHxvrRdZMtbo8h3dfUZ2o1rWb0UPbKtg==", + "dev": true + }, + "eslint-plugin-standard": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-3.0.1.tgz", + "integrity": "sha1-NNDJFbRe3G8BA5PH7vOCOwhWXPI=", + "dev": true + }, + "espree": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", + "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", + "dev": true, + "requires": { + "acorn": "5.5.3", + "acorn-jsx": "3.0.1" + } + }, + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true + }, + "esprima-extract-comments": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/esprima-extract-comments/-/esprima-extract-comments-0.2.1.tgz", + "integrity": "sha1-kBjY3zf/2V3WFQFajF8Ede10NCM=", + "dev": true, + "requires": { + "esprima": "2.7.3" + } + }, + "esquery": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz", + "integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=", + "dev": true, + "requires": { + "estraverse": "4.2.0" + } + }, + "esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "dev": true, + "requires": { + "estraverse": "4.2.0" + } + }, + "estraverse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "dev": true + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true + }, + "event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.41" + } + }, + "eventemitter3": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz", + "integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=", + "dev": true + }, + "events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", + "dev": true + }, + "eventsource-polyfill": { + "version": "0.9.6", + "resolved": "https://registry.npmjs.org/eventsource-polyfill/-/eventsource-polyfill-0.9.6.tgz", + "integrity": "sha1-EODRh/ERsWfyj9q5GIQ859gY8Tw=", + "dev": true + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "requires": { + "md5.js": "1.3.4", + "safe-buffer": "5.1.1" + } + }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "dev": true, + "requires": { + "cross-spawn": "5.1.0", + "get-stream": "3.0.0", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.0.0" + } + }, + "exif-js": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/exif-js/-/exif-js-2.3.0.tgz", + "integrity": "sha1-nRCBm/Vx+HOBPnZAJBJVq5zhqBQ=" + }, + "exit-hook": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", + "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=", + "dev": true + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "0.1.1" + } + }, + "expand-range": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "dev": true, + "requires": { + "fill-range": "2.2.3" + } + }, + "express": { + "version": "4.16.3", + "resolved": "https://registry.npmjs.org/express/-/express-4.16.3.tgz", + "integrity": "sha1-avilAjUNsyRuzEvs9rWjTSL37VM=", + "dev": true, + "requires": { + "accepts": "1.3.5", + "array-flatten": "1.1.1", + "body-parser": "1.18.2", + "content-disposition": "0.5.2", + "content-type": "1.0.4", + "cookie": "0.3.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "1.1.2", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", + "finalhandler": "1.1.1", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "1.1.2", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "path-to-regexp": "0.1.7", + "proxy-addr": "2.0.3", + "qs": "6.5.1", + "range-parser": "1.2.0", + "safe-buffer": "5.1.1", + "send": "0.16.2", + "serve-static": "1.13.2", + "setprototypeof": "1.1.0", + "statuses": "1.4.0", + "type-is": "1.6.16", + "utils-merge": "1.0.1", + "vary": "1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "extend": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", + "dev": true + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + } + } + }, + "extract-comments": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/extract-comments/-/extract-comments-0.10.1.tgz", + "integrity": "sha1-i2AxgIovX94c1nv4MXuRggQwRAg=", + "dev": true, + "requires": { + "define-property": "0.2.5", + "esprima-extract-comments": "0.2.1", + "extend-shallow": "2.0.1", + "parse-code-context": "0.2.2" + } + }, + "extract-text-webpack-plugin": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extract-text-webpack-plugin/-/extract-text-webpack-plugin-3.0.2.tgz", + "integrity": "sha512-bt/LZ4m5Rqt/Crl2HiKuAl/oqg0psx1tsTLkvWbJen1CtD+fftkZhMaQ9HOtY2gWsl2Wq+sABmMVi9z3DhKWQQ==", + "dev": true, + "requires": { + "async": "2.6.0", + "loader-utils": "1.1.0", + "schema-utils": "0.3.0", + "webpack-sources": "1.1.0" + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fastclick": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/fastclick/-/fastclick-1.0.6.tgz", + "integrity": "sha1-FhYlsnsaWAZAWTa9qaLBkm0Gvmo=" + }, + "fastparse": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.1.tgz", + "integrity": "sha1-0eJkOzipTXWDtHkGDmxK/8lAcfg=", + "dev": true + }, + "figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "dev": true, + "requires": { + "escape-string-regexp": "1.0.5", + "object-assign": "4.1.1" + } + }, + "file-entry-cache": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", + "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", + "dev": true, + "requires": { + "flat-cache": "1.3.0", + "object-assign": "4.1.1" + } + }, + "file-exists": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/file-exists/-/file-exists-0.1.1.tgz", + "integrity": "sha1-mT0//7W0nRH+/Mj0XCNVAnRAgDw=", + "dev": true + }, + "file-loader": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-1.1.11.tgz", + "integrity": "sha512-TGR4HU7HUsGg6GCOPJnFk06RhWgEWFLAGWiT6rcD+GRC2keU3s9RGJ+b3Z6/U73jwwNb2gKLJ7YCrp+jvU4ALg==", + "dev": true, + "requires": { + "loader-utils": "1.1.0", + "schema-utils": "0.4.5" + }, + "dependencies": { + "ajv": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.3.0.tgz", + "integrity": "sha1-FlCkERTvAFdMrBC4Ay2PTBSBLac=", + "dev": true, + "requires": { + "fast-deep-equal": "1.1.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" + } + }, + "ajv-keywords": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.1.0.tgz", + "integrity": "sha1-rCsnk5xUPpXSwG5/f1wnvkqlQ74=", + "dev": true + }, + "schema-utils": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.5.tgz", + "integrity": "sha512-yYrjb9TX2k/J1Y5UNy3KYdZq10xhYcF8nMpAW6o3hy6Q8WSIEf9lJHG/ePnOBfziPM3fvQwfOwa13U/Fh8qTfA==", + "dev": true, + "requires": { + "ajv": "6.3.0", + "ajv-keywords": "3.1.0" + } + } + } + }, + "filename-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", + "dev": true + }, + "filesize": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.0.tgz", + "integrity": "sha512-g5OWtoZWcPI56js1DFhIEqyG9tnu/7sG3foHwgS9KGYFMfsYguI3E+PRVCmtmE96VajQIEMRU2OhN+ME589Gdw==", + "dev": true + }, + "fill-range": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", + "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", + "dev": true, + "requires": { + "is-number": "2.1.0", + "isobject": "2.1.0", + "randomatic": "1.1.7", + "repeat-element": "1.1.2", + "repeat-string": "1.6.1" + } + }, + "finalhandler": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", + "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "statuses": "1.4.0", + "unpipe": "1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "find-cache-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz", + "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", + "requires": { + "commondir": "1.0.1", + "make-dir": "1.2.0", + "pkg-dir": "2.0.0" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "requires": { + "locate-path": "2.0.0" + } + }, + "flat-cache": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz", + "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=", + "dev": true, + "requires": { + "circular-json": "0.3.3", + "del": "2.2.2", + "graceful-fs": "4.1.11", + "write": "0.2.1" + } + }, + "flatten": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.2.tgz", + "integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I=", + "dev": true + }, + "flush-write-stream": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz", + "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.5" + } + }, + "follow-redirects": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.4.1.tgz", + "integrity": "sha512-uxYePVPogtya1ktGnAAXOacnbIuRMB4dkvqeNz2qTtTQsuzSfbDolV+wMMKxAmCx0bLgAKLbBOkjItMbbkR1vg==", + "requires": { + "debug": "3.1.0" + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "dev": true, + "requires": { + "for-in": "1.0.2" + } + }, + "foreach": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", + "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true, + "optional": true + }, + "form-data": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", + "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", + "dev": true, + "optional": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.6", + "mime-types": "2.1.18" + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "dev": true + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true + }, + "friendly-errors-webpack-plugin": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.6.1.tgz", + "integrity": "sha1-4yeBxHIvVGoGqbXXp8+ihSA3XXA=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "error-stack-parser": "2.0.1", + "string-length": "1.0.1" + }, + "dependencies": { + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.5" + } + }, + "fs-extra": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.24.0.tgz", + "integrity": "sha1-1OQ0KpZnXLeEZjOmCZJJMytTmVI=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "jsonfile": "2.4.0", + "path-is-absolute": "1.0.1", + "rimraf": "2.6.2" + } + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "requires": { + "graceful-fs": "4.1.11", + "iferr": "0.1.5", + "imurmurhash": "0.1.4", + "readable-stream": "2.3.5" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "generate-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", + "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=", + "dev": true + }, + "generate-object-property": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", + "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", + "dev": true, + "requires": { + "is-property": "1.0.2" + } + }, + "get-caller-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", + "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=", + "dev": true + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true, + "optional": true + } + } + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "glob-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "dev": true, + "requires": { + "glob-parent": "2.0.0", + "is-glob": "2.0.1" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + } + } + }, + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "2.0.1" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + } + } + }, + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "dev": true + }, + "globby": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz", + "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=", + "dev": true, + "requires": { + "array-union": "1.0.2", + "dir-glob": "2.0.0", + "glob": "7.1.2", + "ignore": "3.3.7", + "pify": "3.0.0", + "slash": "1.0.0" + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" + }, + "gzip-size": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-4.1.0.tgz", + "integrity": "sha1-iuCWJX6r59acRb4rZ8RIEk/7UXw=", + "dev": true, + "requires": { + "duplexer": "0.1.1", + "pify": "3.0.0" + } + }, + "har-schema": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", + "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=", + "dev": true, + "optional": true + }, + "har-validator": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", + "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", + "dev": true, + "optional": true, + "requires": { + "ajv": "4.11.8", + "har-schema": "1.0.5" + } + }, + "has": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", + "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", + "dev": true, + "requires": { + "function-bind": "1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "requires": { + "ansi-regex": "2.1.1" + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" + }, + "has-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "dev": true + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "2.0.6", + "has-values": "1.0.0", + "isobject": "3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "3.0.0", + "kind-of": "4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "hash-base": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", + "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=", + "dev": true, + "requires": { + "inherits": "2.0.3" + } + }, + "hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=", + "dev": true + }, + "hash.js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", + "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", + "dev": true, + "requires": { + "inherits": "2.0.3", + "minimalistic-assert": "1.0.0" + } + }, + "hawk": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "dev": true, + "optional": true, + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } + }, + "he": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "dev": true + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true, + "requires": { + "hash.js": "1.1.3", + "minimalistic-assert": "1.0.0", + "minimalistic-crypto-utils": "1.0.1" + } + }, + "hoek": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", + "dev": true + }, + "home-or-tmp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", + "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", + "dev": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "hosted-git-info": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.0.tgz", + "integrity": "sha512-lIbgIIQA3lz5XaB6vxakj6sDHADJiZadYEJB+FgA+C4nubM1NwcuvUr9EJPmnH1skZqpqUzWborWo8EIUi0Sdw==", + "dev": true + }, + "html-comment-regex": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.1.tgz", + "integrity": "sha1-ZouTd26q5V696POtRkswekljYl4=", + "dev": true + }, + "html-entities": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz", + "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=", + "dev": true + }, + "html-minifier": { + "version": "3.5.12", + "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.12.tgz", + "integrity": "sha512-+N778qLf0RWBscD0TPGoYdeGNDZ0s76/0pQhY1/409EOudcENkm9IbSkk37RDyPdg/09GVHTKotU4ya93RF1Gg==", + "dev": true, + "requires": { + "camel-case": "3.0.0", + "clean-css": "4.1.11", + "commander": "2.15.1", + "he": "1.1.1", + "ncname": "1.0.0", + "param-case": "2.1.1", + "relateurl": "0.2.7", + "uglify-js": "3.3.16" + } + }, + "html-webpack-plugin": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-2.30.1.tgz", + "integrity": "sha1-f5xCG36pHsRg9WUn1430hO51N9U=", + "dev": true, + "requires": { + "bluebird": "3.5.1", + "html-minifier": "3.5.12", + "loader-utils": "0.2.17", + "lodash": "4.17.5", + "pretty-error": "2.1.1", + "toposort": "1.0.6" + }, + "dependencies": { + "loader-utils": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", + "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "dev": true, + "requires": { + "big.js": "3.2.0", + "emojis-list": "2.1.0", + "json5": "0.5.1", + "object-assign": "4.1.1" + } + } + } + }, + "htmlparser2": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz", + "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=", + "dev": true, + "requires": { + "domelementtype": "1.3.0", + "domhandler": "2.4.1", + "domutils": "1.7.0", + "entities": "1.1.1", + "inherits": "2.0.3", + "readable-stream": "2.3.5" + } + }, + "http-errors": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", + "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", + "dev": true, + "requires": { + "depd": "1.1.1", + "inherits": "2.0.3", + "setprototypeof": "1.0.3", + "statuses": "1.4.0" + }, + "dependencies": { + "depd": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", + "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=", + "dev": true + }, + "setprototypeof": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", + "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=", + "dev": true + } + } + }, + "http-proxy": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.16.2.tgz", + "integrity": "sha1-Bt/ykpUr9k2+hHH6nfcwZtTzd0I=", + "dev": true, + "requires": { + "eventemitter3": "1.2.0", + "requires-port": "1.0.0" + } + }, + "http-proxy-middleware": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz", + "integrity": "sha1-ZC6ISIUdZvCdTxJJEoRtuutBuDM=", + "dev": true, + "requires": { + "http-proxy": "1.16.2", + "is-glob": "3.1.0", + "lodash": "4.17.5", + "micromatch": "2.3.11" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "2.1.1" + } + } + } + }, + "http-signature": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "dev": true, + "optional": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.1", + "sshpk": "1.14.1" + } + }, + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "dev": true + }, + "iconv-lite": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", + "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==", + "dev": true + }, + "icss-replace-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", + "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=", + "dev": true + }, + "icss-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-2.1.0.tgz", + "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=", + "dev": true, + "requires": { + "postcss": "6.0.20" + }, + "dependencies": { + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "6.0.20", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.20.tgz", + "integrity": "sha512-Opr6usW30Iy0xEDrJywDckRxtylfO7gTGs3Kfb2LdLQlGsUg89fTy0R3Vm1Dub2YHO7MK58avr0p70+uFFHb7A==", + "dev": true, + "requires": { + "chalk": "2.3.2", + "source-map": "0.6.1", + "supports-color": "5.3.0" + } + }, + "supports-color": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", + "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "ieee754": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.10.tgz", + "integrity": "sha512-byWFX8OyW/qeVxcY21r6Ncxl0ZYHgnf0cPup2h34eHXrCJbOp7IuqnJ4Q0omfyWl6Z++BTI6bByf31pZt7iRLg==", + "dev": true + }, + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=" + }, + "ignore": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz", + "integrity": "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA==", + "dev": true + }, + "image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=", + "dev": true, + "optional": true + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + }, + "indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", + "dev": true + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true + }, + "inline-manifest-webpack-plugin": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/inline-manifest-webpack-plugin/-/inline-manifest-webpack-plugin-3.0.1.tgz", + "integrity": "sha1-yiFRBjEVKY4v2UtmmrdsfdY+RK0=", + "dev": true, + "requires": { + "source-map-url": "0.4.0" + } + }, + "inquirer": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz", + "integrity": "sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=", + "dev": true, + "requires": { + "ansi-escapes": "1.4.0", + "ansi-regex": "2.1.1", + "chalk": "1.1.3", + "cli-cursor": "1.0.2", + "cli-width": "2.2.0", + "figures": "1.7.0", + "lodash": "4.17.5", + "readline2": "1.0.1", + "run-async": "0.1.0", + "rx-lite": "3.1.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "through": "2.3.8" + }, + "dependencies": { + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "interpret": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", + "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=", + "dev": true + }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dev": true, + "requires": { + "loose-envify": "1.3.1" + } + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "dev": true + }, + "ipaddr.js": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.6.0.tgz", + "integrity": "sha1-4/o1e3c9phnybpXwSdBVxyeW+Gs=", + "dev": true + }, + "is-absolute-url": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", + "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", + "dev": true + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "1.11.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-builtin-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "dev": true, + "requires": { + "builtin-modules": "1.1.1" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", + "dev": true + }, + "is-dotfile": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", + "dev": true + }, + "is-equal-shallow": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "dev": true, + "requires": { + "is-primitive": "2.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-glob": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", + "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "dev": true, + "requires": { + "is-extglob": "2.1.1" + } + }, + "is-my-ip-valid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz", + "integrity": "sha512-gmh/eWXROncUzRnIa1Ubrt5b8ep/MGSnfAUI3aRp+sqTCs1tv1Isl8d8F6JmkN3dXKc3ehZMrtiPN9eL03NuaQ==", + "dev": true + }, + "is-my-json-valid": { + "version": "2.17.2", + "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.17.2.tgz", + "integrity": "sha512-IBhBslgngMQN8DDSppmgDv7RNrlFotuuDsKcrCP3+HbFaVivIBU7u9oiiErw8sH4ynx3+gOGQ3q2otkgiSi6kg==", + "dev": true, + "requires": { + "generate-function": "2.0.0", + "generate-object-property": "1.2.0", + "is-my-ip-valid": "1.0.0", + "jsonpointer": "4.0.1", + "xtend": "4.0.1" + } + }, + "is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "is-odd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz", + "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==", + "dev": true, + "requires": { + "is-number": "4.0.0" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true + } + } + }, + "is-path-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "dev": true + }, + "is-path-in-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", + "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", + "dev": true, + "requires": { + "is-path-inside": "1.0.1" + } + }, + "is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "dev": true, + "requires": { + "path-is-inside": "1.0.2" + } + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "is-posix-bracket": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", + "dev": true + }, + "is-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "dev": true + }, + "is-property": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", + "dev": true + }, + "is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", + "dev": true + }, + "is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "is-svg": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz", + "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=", + "dev": true, + "requires": { + "html-comment-regex": "1.1.1" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true, + "optional": true + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true, + "optional": true + }, + "js-base64": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.3.tgz", + "integrity": "sha512-H7ErYLM34CvDMto3GbD6xD0JLUGYXR3QTcH6B/tr4Hi/QpSThnCsIp+Sy5FRTw3B0d6py4HcNkW7nO/wdtGWEw==" + }, + "js-beautify": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.7.5.tgz", + "integrity": "sha512-9OhfAqGOrD7hoQBLJMTA+BKuKmoEtTJXzZ7WDF/9gvjtey1koVLuZqIY6c51aPDjbNdNtIXAkiWKVhziawE9Og==", + "dev": true, + "requires": { + "config-chain": "1.1.11", + "editorconfig": "0.13.3", + "mkdirp": "0.5.1", + "nopt": "3.0.6" + } + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + }, + "js-yaml": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz", + "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=", + "dev": true, + "requires": { + "argparse": "1.0.10", + "esprima": "2.7.3" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true, + "optional": true + }, + "jsesc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", + "dev": true + }, + "json-loader": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz", + "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==", + "dev": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true, + "optional": true + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "dev": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "dev": true, + "requires": { + "jsonify": "0.0.0" + } + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true, + "optional": true + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + }, + "jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11" + } + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "dev": true + }, + "jsonpointer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", + "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", + "dev": true + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true, + "optional": true + } + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + }, + "last-call-webpack-plugin": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-2.1.2.tgz", + "integrity": "sha512-CZc+m2xZm51J8qSwdODeiiNeqh8CYkKEq6Rw8IkE4i/4yqf2cJhjQPsA6BtAV970ePRNhwEOXhy2U5xc5Jwh9Q==", + "dev": true, + "requires": { + "lodash": "4.17.5", + "webpack-sources": "1.1.0" + } + }, + "lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "dev": true + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true, + "requires": { + "invert-kv": "1.0.0" + } + }, + "less": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/less/-/less-2.7.3.tgz", + "integrity": "sha512-KPdIJKWcEAb02TuJtaLrhue0krtRLoRoo7x6BNJIBelO00t/CCdJQUnHW5V34OnHMWzIktSalJxRO+FvytQlCQ==", + "dev": true, + "requires": { + "errno": "0.1.7", + "graceful-fs": "4.1.11", + "image-size": "0.5.5", + "mime": "1.4.1", + "mkdirp": "0.5.1", + "promise": "7.3.1", + "request": "2.81.0", + "source-map": "0.5.7" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "optional": true + } + } + }, + "less-loader": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-4.1.0.tgz", + "integrity": "sha512-KNTsgCE9tMOM70+ddxp9yyt9iHqgmSs0yTZc5XH5Wo+g80RWRIYNqE58QJKm/yMud5wZEvz50ugRDuzVIkyahg==", + "dev": true, + "requires": { + "clone": "2.1.2", + "loader-utils": "1.1.0", + "pify": "3.0.0" + }, + "dependencies": { + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", + "dev": true + } + } + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "1.1.2", + "type-check": "0.3.2" + } + }, + "lib-flexible": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/lib-flexible/-/lib-flexible-0.3.2.tgz", + "integrity": "sha1-BvWnSDIxSi01wSA5vJw8otrqpCY=" + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "strip-bom": "3.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "loader-fs-cache": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.1.tgz", + "integrity": "sha1-VuC/CL2XCLJqdltoUJhAyN7J/bw=", + "dev": true, + "requires": { + "find-cache-dir": "0.1.1", + "mkdirp": "0.5.1" + }, + "dependencies": { + "find-cache-dir": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz", + "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=", + "dev": true, + "requires": { + "commondir": "1.0.1", + "mkdirp": "0.5.1", + "pkg-dir": "1.0.0" + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "2.0.1" + } + }, + "pkg-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", + "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", + "dev": true, + "requires": { + "find-up": "1.1.2" + } + } + } + }, + "loader-runner": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.0.tgz", + "integrity": "sha1-9IKuqC1UPgeSFwDVpG7yb9rGuKI=", + "dev": true + }, + "loader-utils": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", + "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", + "dev": true, + "requires": { + "big.js": "3.2.0", + "emojis-list": "2.1.0", + "json5": "0.5.1" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "requires": { + "p-locate": "2.0.0", + "path-exists": "3.0.0" + } + }, + "lodash": { + "version": "4.17.5", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz", + "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==", + "dev": true + }, + "lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=", + "dev": true + }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" + }, + "lodash.differencewith": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.differencewith/-/lodash.differencewith-4.5.0.tgz", + "integrity": "sha1-uvr7yRi1UVTheRdqALsK76rIVLc=", + "dev": true + }, + "lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=", + "dev": true + }, + "lodash.isfunction": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz", + "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==", + "dev": true + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", + "dev": true + }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + }, + "lodash.mergewith": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz", + "integrity": "sha512-eWw5r+PYICtEBgrBE5hhlT6aAa75f411bgDz/ZL2KZqYV03USvucsxcHUIlGTDTECs1eunpI7HOV7U+WLDvNdQ==", + "dev": true + }, + "lodash.throttle": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", + "integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ=" + }, + "lodash.unionwith": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.unionwith/-/lodash.unionwith-4.6.0.tgz", + "integrity": "sha1-dNFAtcqBRubGQ8NyT1FSU42awfA=", + "dev": true + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "dev": true + }, + "log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dev": true, + "requires": { + "chalk": "2.3.2" + } + }, + "longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", + "dev": true + }, + "loose-envify": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", + "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", + "dev": true, + "requires": { + "js-tokens": "3.0.2" + } + }, + "lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", + "dev": true + }, + "lru-cache": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.2.tgz", + "integrity": "sha512-wgeVXhrDwAWnIF/yZARsFnMBtdFXOg1b8RIrhilp+0iDYN4mdQcNZElDZ0e4B64BhaxeQ5zN7PMyvu7we1kPeQ==", + "requires": { + "pseudomap": "1.0.2", + "yallist": "2.1.2" + } + }, + "macaddress": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/macaddress/-/macaddress-0.2.8.tgz", + "integrity": "sha1-WQTcU3w57G2+/q6QIycTX6hRHxI=", + "dev": true + }, + "make-dir": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.2.0.tgz", + "integrity": "sha512-aNUAa4UMg/UougV25bbrU4ZaaKNjJ/3/xnvg/twpmKROPdKZPZ9wGgI0opdZzO8q/zUFawoUuixuOv33eZ61Iw==", + "requires": { + "pify": "3.0.0" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "1.0.1" + } + }, + "math-expression-evaluator": { + "version": "1.2.17", + "resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz", + "integrity": "sha1-3oGf282E3M2PrlnGrreWFbnSZqw=", + "dev": true + }, + "md5.js": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", + "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", + "dev": true, + "requires": { + "hash-base": "3.0.4", + "inherits": "2.0.3" + }, + "dependencies": { + "hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.1" + } + } + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true + }, + "mem": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", + "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "dev": true, + "requires": { + "mimic-fn": "1.2.0" + } + }, + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dev": true, + "requires": { + "errno": "0.1.7", + "readable-stream": "2.3.5" + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "2.0.0", + "array-unique": "0.2.1", + "braces": "1.8.5", + "expand-brackets": "0.1.5", + "extglob": "0.3.2", + "filename-regex": "2.0.1", + "is-extglob": "1.0.0", + "is-glob": "2.0.1", + "kind-of": "3.2.2", + "normalize-path": "2.1.1", + "object.omit": "2.0.1", + "parse-glob": "3.0.4", + "regex-cache": "0.4.4" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + } + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "brorand": "1.1.0" + } + }, + "mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", + "dev": true + }, + "mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", + "dev": true + }, + "mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "dev": true, + "requires": { + "mime-db": "1.33.0" + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, + "minimalistic-assert": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz", + "integrity": "sha1-cCvi3aazf0g2vLP121ZkG2Sh09M=", + "dev": true + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "1.1.11" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + }, + "mississippi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz", + "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==", + "requires": { + "concat-stream": "1.6.2", + "duplexify": "3.5.4", + "end-of-stream": "1.4.1", + "flush-write-stream": "1.0.3", + "from2": "2.3.0", + "parallel-transform": "1.1.0", + "pump": "2.0.1", + "pumpify": "1.4.0", + "stream-each": "1.2.2", + "through2": "2.0.3" + } + }, + "mixin-deep": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", + "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", + "dev": true, + "requires": { + "for-in": "1.0.2", + "is-extendable": "1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + } + }, + "move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "requires": { + "aproba": "1.2.0", + "copy-concurrently": "1.0.5", + "fs-write-stream-atomic": "1.0.10", + "mkdirp": "0.5.1", + "rimraf": "2.6.2", + "run-queue": "1.0.3" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "mute-stream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz", + "integrity": "sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA=", + "dev": true + }, + "nanomatch": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz", + "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==", + "dev": true, + "requires": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "fragment-cache": "0.2.1", + "is-odd": "2.0.0", + "is-windows": "1.0.2", + "kind-of": "6.0.2", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "1.0.2", + "isobject": "3.0.1" + } + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "1.0.0", + "is-extendable": "1.0.1" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "2.0.4" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "ncname": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ncname/-/ncname-1.0.0.tgz", + "integrity": "sha1-W1etGLHKCShk72Kwse2BlPODtxw=", + "dev": true, + "requires": { + "xml-char-classes": "1.0.0" + } + }, + "negotiator": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", + "dev": true + }, + "neo-async": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.5.0.tgz", + "integrity": "sha512-nJmSswG4As/MkRq7QZFuH/sf/yuv8ODdMZrY4Bedjp77a5MK4A6s7YbBB64c9u79EBUOfXUXBvArmvzTD0X+6g==" + }, + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", + "dev": true + }, + "no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "dev": true, + "requires": { + "lower-case": "1.1.4" + } + }, + "node-cli-config": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/node-cli-config/-/node-cli-config-0.0.1.tgz", + "integrity": "sha1-r3d02FQCprfLlsH5G7JP3VjXwLA=", + "dev": true + }, + "node-libs-browser": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.1.0.tgz", + "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==", + "dev": true, + "requires": { + "assert": "1.4.1", + "browserify-zlib": "0.2.0", + "buffer": "4.9.1", + "console-browserify": "1.1.0", + "constants-browserify": "1.0.0", + "crypto-browserify": "3.12.0", + "domain-browser": "1.2.0", + "events": "1.1.1", + "https-browserify": "1.0.0", + "os-browserify": "0.3.0", + "path-browserify": "0.0.0", + "process": "0.11.10", + "punycode": "1.4.1", + "querystring-es3": "0.2.1", + "readable-stream": "2.3.5", + "stream-browserify": "2.0.1", + "stream-http": "2.8.1", + "string_decoder": "1.0.3", + "timers-browserify": "2.0.6", + "tty-browserify": "0.0.0", + "url": "0.11.0", + "util": "0.10.3", + "vm-browserify": "0.0.4" + } + }, + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true, + "requires": { + "abbrev": "1.1.1" + } + }, + "normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "dev": true, + "requires": { + "hosted-git-info": "2.6.0", + "is-builtin-module": "1.0.0", + "semver": "5.5.0", + "validate-npm-package-license": "3.0.3" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "1.1.0" + } + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true + }, + "normalize-url": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", + "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", + "dev": true, + "requires": { + "object-assign": "4.1.1", + "prepend-http": "1.0.4", + "query-string": "4.3.4", + "sort-keys": "1.1.2" + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "2.0.1" + } + }, + "nth-check": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz", + "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=", + "dev": true, + "requires": { + "boolbase": "1.0.0" + } + }, + "num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", + "dev": true + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", + "dev": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "0.1.1", + "define-property": "0.2.5", + "kind-of": "3.2.2" + } + }, + "object-hash": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.0.tgz", + "integrity": "sha512-05KzQ70lSeGSrZJQXE5wNDiTkBJDlUT/myi6RX9dVIvz7a7Qh4oH93BQdiPMn27nldYvVQCKMUaM83AfizZlsQ==", + "dev": true + }, + "object-keys": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz", + "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=", + "dev": true + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "dev": true, + "requires": { + "define-properties": "1.1.2", + "function-bind": "1.1.1", + "has-symbols": "1.0.0", + "object-keys": "1.0.11" + } + }, + "object.omit": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "dev": true, + "requires": { + "for-own": "0.1.5", + "is-extendable": "0.1.1" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1.0.2" + } + }, + "onetime": { + "version": "1.1.0", + "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", + "dev": true + }, + "opener": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.4.3.tgz", + "integrity": "sha1-XG2ixdflgx6P+jlklQ+NZnSskLg=", + "dev": true + }, + "opn": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.3.0.tgz", + "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==", + "dev": true, + "requires": { + "is-wsl": "1.1.0" + } + }, + "optimize-css-assets-webpack-plugin": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-3.2.0.tgz", + "integrity": "sha512-Fjn7wyyadPAriuH2DHamDQw5B8GohEWbroBkKoPeP+vSF2PIAPI7WDihi8WieMRb/At4q7Ea7zTKaMDuSoIAAg==", + "dev": true, + "requires": { + "cssnano": "3.10.0", + "last-call-webpack-plugin": "2.1.2" + } + }, + "optionator": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "dev": true, + "requires": { + "deep-is": "0.1.3", + "fast-levenshtein": "2.0.6", + "levn": "0.3.0", + "prelude-ls": "1.1.2", + "type-check": "0.3.2", + "wordwrap": "1.0.0" + } + }, + "ora": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-1.4.0.tgz", + "integrity": "sha512-iMK1DOQxzzh2MBlVsU42G80mnrvUhqsMh74phHtDlrcTZPK0pH6o7l7DRshK+0YsxDyEuaOkziVdvM3T0QTzpw==", + "dev": true, + "requires": { + "chalk": "2.3.2", + "cli-cursor": "2.1.0", + "cli-spinners": "1.1.0", + "log-symbols": "2.2.0" + }, + "dependencies": { + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, + "requires": { + "restore-cursor": "2.0.0" + } + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "1.2.0" + } + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "requires": { + "onetime": "2.0.1", + "signal-exit": "3.0.2" + } + } + } + }, + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", + "dev": true + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "os-locale": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", + "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", + "dev": true, + "requires": { + "execa": "0.7.0", + "lcid": "1.0.0", + "mem": "1.1.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-limit": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.2.0.tgz", + "integrity": "sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==", + "requires": { + "p-try": "1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "requires": { + "p-limit": "1.2.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" + }, + "pako": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz", + "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==", + "dev": true + }, + "parallel-transform": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz", + "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", + "requires": { + "cyclist": "0.2.2", + "inherits": "2.0.3", + "readable-stream": "2.3.5" + } + }, + "param-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", + "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", + "dev": true, + "requires": { + "no-case": "2.3.2" + } + }, + "parse-asn1": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz", + "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=", + "dev": true, + "requires": { + "asn1.js": "4.10.1", + "browserify-aes": "1.1.1", + "create-hash": "1.1.3", + "evp_bytestokey": "1.0.3", + "pbkdf2": "3.0.14" + } + }, + "parse-code-context": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/parse-code-context/-/parse-code-context-0.2.2.tgz", + "integrity": "sha1-FEuK+3IZSC1+iMHranZVlvOmrA0=", + "dev": true + }, + "parse-glob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "dev": true, + "requires": { + "glob-base": "0.3.0", + "is-dotfile": "1.0.3", + "is-extglob": "1.0.0", + "is-glob": "2.0.1" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + } + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "1.3.1" + } + }, + "parse5": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", + "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", + "dev": true, + "requires": { + "@types/node": "9.6.4" + } + }, + "parseurl": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", + "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", + "dev": true + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "path-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", + "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", + "dev": true + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-parse": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", + "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "3.0.0" + } + }, + "pbkdf2": { + "version": "3.0.14", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.14.tgz", + "integrity": "sha512-gjsZW9O34fm0R7PaLHRJmLLVfSoesxztjPjE9o6R+qtVJij90ltg1joIovN9GKrRW3t1PzhDDG3UMEMFfZ+1wA==", + "dev": true, + "requires": { + "create-hash": "1.1.3", + "create-hmac": "1.1.6", + "ripemd160": "2.0.1", + "safe-buffer": "5.1.1", + "sha.js": "2.4.11" + } + }, + "performance-now": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", + "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=", + "dev": true, + "optional": true + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "2.0.4" + } + }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "requires": { + "find-up": "2.1.0" + } + }, + "pluralize": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-1.2.1.tgz", + "integrity": "sha1-0aIUg/0iu0HlihL6NCGCMUCJfEU=", + "dev": true + }, + "portfinder": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.13.tgz", + "integrity": "sha1-uzLs2HwnEErm7kS1o8y/Drsa7ek=", + "dev": true, + "requires": { + "async": "1.5.2", + "debug": "2.6.9", + "mkdirp": "0.5.1" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.3", + "source-map": "0.5.7", + "supports-color": "3.2.3" + }, + "dependencies": { + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + } + } + }, + "postcss-calc": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-5.3.1.tgz", + "integrity": "sha1-d7rnypKK2FcW4v2kLyYb98HWW14=", + "dev": true, + "requires": { + "postcss": "5.2.18", + "postcss-message-helpers": "2.0.0", + "reduce-css-calc": "1.3.0" + } + }, + "postcss-colormin": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-2.2.2.tgz", + "integrity": "sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=", + "dev": true, + "requires": { + "colormin": "1.1.2", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0" + } + }, + "postcss-convert-values": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz", + "integrity": "sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=", + "dev": true, + "requires": { + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0" + } + }, + "postcss-discard-comments": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz", + "integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=", + "dev": true, + "requires": { + "postcss": "5.2.18" + } + }, + "postcss-discard-duplicates": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz", + "integrity": "sha1-uavye4isGIFYpesSq8riAmO5GTI=", + "dev": true, + "requires": { + "postcss": "5.2.18" + } + }, + "postcss-discard-empty": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz", + "integrity": "sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=", + "dev": true, + "requires": { + "postcss": "5.2.18" + } + }, + "postcss-discard-overridden": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz", + "integrity": "sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=", + "dev": true, + "requires": { + "postcss": "5.2.18" + } + }, + "postcss-discard-unused": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz", + "integrity": "sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=", + "dev": true, + "requires": { + "postcss": "5.2.18", + "uniqs": "2.0.0" + } + }, + "postcss-filter-plugins": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/postcss-filter-plugins/-/postcss-filter-plugins-2.0.2.tgz", + "integrity": "sha1-bYWGJTTXNaxCDkqFgG4fXUKG2Ew=", + "dev": true, + "requires": { + "postcss": "5.2.18", + "uniqid": "4.1.1" + } + }, + "postcss-load-config": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-1.2.0.tgz", + "integrity": "sha1-U56a/J3chiASHr+djDZz4M5Q0oo=", + "dev": true, + "requires": { + "cosmiconfig": "2.2.2", + "object-assign": "4.1.1", + "postcss-load-options": "1.2.0", + "postcss-load-plugins": "2.3.0" + } + }, + "postcss-load-options": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postcss-load-options/-/postcss-load-options-1.2.0.tgz", + "integrity": "sha1-sJixVZ3awt8EvAuzdfmaXP4rbYw=", + "dev": true, + "requires": { + "cosmiconfig": "2.2.2", + "object-assign": "4.1.1" + } + }, + "postcss-load-plugins": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/postcss-load-plugins/-/postcss-load-plugins-2.3.0.tgz", + "integrity": "sha1-dFdoEWWZrKLwCfrUJrABdQSdjZI=", + "dev": true, + "requires": { + "cosmiconfig": "2.2.2", + "object-assign": "4.1.1" + } + }, + "postcss-merge-idents": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz", + "integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=", + "dev": true, + "requires": { + "has": "1.0.1", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0" + } + }, + "postcss-merge-longhand": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz", + "integrity": "sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=", + "dev": true, + "requires": { + "postcss": "5.2.18" + } + }, + "postcss-merge-rules": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz", + "integrity": "sha1-0d9d+qexrMO+VT8OnhDofGG19yE=", + "dev": true, + "requires": { + "browserslist": "1.7.7", + "caniuse-api": "1.6.1", + "postcss": "5.2.18", + "postcss-selector-parser": "2.2.3", + "vendors": "1.0.1" + }, + "dependencies": { + "browserslist": { + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", + "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", + "dev": true, + "requires": { + "caniuse-db": "1.0.30000819", + "electron-to-chromium": "1.3.40" + } + } + } + }, + "postcss-message-helpers": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz", + "integrity": "sha1-pPL0+rbk/gAvCu0ABHjN9S+bpg4=", + "dev": true + }, + "postcss-minify-font-values": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz", + "integrity": "sha1-S1jttWZB66fIR0qzUmyv17vey2k=", + "dev": true, + "requires": { + "object-assign": "4.1.1", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0" + } + }, + "postcss-minify-gradients": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz", + "integrity": "sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=", + "dev": true, + "requires": { + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0" + } + }, + "postcss-minify-params": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz", + "integrity": "sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=", + "dev": true, + "requires": { + "alphanum-sort": "1.0.2", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0", + "uniqs": "2.0.0" + } + }, + "postcss-minify-selectors": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz", + "integrity": "sha1-ssapjAByz5G5MtGkllCBFDEXNb8=", + "dev": true, + "requires": { + "alphanum-sort": "1.0.2", + "has": "1.0.1", + "postcss": "5.2.18", + "postcss-selector-parser": "2.2.3" + } + }, + "postcss-modules-extract-imports": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.0.tgz", + "integrity": "sha1-ZhQOzs447wa/DT41XWm/WdFB6oU=", + "dev": true, + "requires": { + "postcss": "6.0.20" + }, + "dependencies": { + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "6.0.20", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.20.tgz", + "integrity": "sha512-Opr6usW30Iy0xEDrJywDckRxtylfO7gTGs3Kfb2LdLQlGsUg89fTy0R3Vm1Dub2YHO7MK58avr0p70+uFFHb7A==", + "dev": true, + "requires": { + "chalk": "2.3.2", + "source-map": "0.6.1", + "supports-color": "5.3.0" + } + }, + "supports-color": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", + "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "postcss-modules-local-by-default": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz", + "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", + "dev": true, + "requires": { + "css-selector-tokenizer": "0.7.0", + "postcss": "6.0.20" + }, + "dependencies": { + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "6.0.20", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.20.tgz", + "integrity": "sha512-Opr6usW30Iy0xEDrJywDckRxtylfO7gTGs3Kfb2LdLQlGsUg89fTy0R3Vm1Dub2YHO7MK58avr0p70+uFFHb7A==", + "dev": true, + "requires": { + "chalk": "2.3.2", + "source-map": "0.6.1", + "supports-color": "5.3.0" + } + }, + "supports-color": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", + "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "postcss-modules-scope": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz", + "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", + "dev": true, + "requires": { + "css-selector-tokenizer": "0.7.0", + "postcss": "6.0.20" + }, + "dependencies": { + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "6.0.20", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.20.tgz", + "integrity": "sha512-Opr6usW30Iy0xEDrJywDckRxtylfO7gTGs3Kfb2LdLQlGsUg89fTy0R3Vm1Dub2YHO7MK58avr0p70+uFFHb7A==", + "dev": true, + "requires": { + "chalk": "2.3.2", + "source-map": "0.6.1", + "supports-color": "5.3.0" + } + }, + "supports-color": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", + "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "postcss-modules-values": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz", + "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", + "dev": true, + "requires": { + "icss-replace-symbols": "1.1.0", + "postcss": "6.0.20" + }, + "dependencies": { + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "6.0.20", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.20.tgz", + "integrity": "sha512-Opr6usW30Iy0xEDrJywDckRxtylfO7gTGs3Kfb2LdLQlGsUg89fTy0R3Vm1Dub2YHO7MK58avr0p70+uFFHb7A==", + "dev": true, + "requires": { + "chalk": "2.3.2", + "source-map": "0.6.1", + "supports-color": "5.3.0" + } + }, + "supports-color": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", + "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "postcss-normalize-charset": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz", + "integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=", + "dev": true, + "requires": { + "postcss": "5.2.18" + } + }, + "postcss-normalize-url": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz", + "integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=", + "dev": true, + "requires": { + "is-absolute-url": "2.1.0", + "normalize-url": "1.9.1", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0" + } + }, + "postcss-ordered-values": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz", + "integrity": "sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=", + "dev": true, + "requires": { + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0" + } + }, + "postcss-plugin-px2rem": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/postcss-plugin-px2rem/-/postcss-plugin-px2rem-0.7.0.tgz", + "integrity": "sha1-UXjPZNLcYumNSNHM/QU+5KAOJUU=", + "requires": { + "postcss": "5.2.18" + } + }, + "postcss-reduce-idents": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz", + "integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=", + "dev": true, + "requires": { + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0" + } + }, + "postcss-reduce-initial": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz", + "integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=", + "dev": true, + "requires": { + "postcss": "5.2.18" + } + }, + "postcss-reduce-transforms": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz", + "integrity": "sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=", + "dev": true, + "requires": { + "has": "1.0.1", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0" + } + }, + "postcss-selector-parser": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz", + "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=", + "dev": true, + "requires": { + "flatten": "1.0.2", + "indexes-of": "1.0.1", + "uniq": "1.0.1" + } + }, + "postcss-svgo": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-2.1.6.tgz", + "integrity": "sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=", + "dev": true, + "requires": { + "is-svg": "2.1.0", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0", + "svgo": "0.7.2" + } + }, + "postcss-unique-selectors": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz", + "integrity": "sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=", + "dev": true, + "requires": { + "alphanum-sort": "1.0.2", + "postcss": "5.2.18", + "uniqs": "2.0.0" + } + }, + "postcss-value-parser": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz", + "integrity": "sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU=", + "dev": true + }, + "postcss-zindex": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-2.2.0.tgz", + "integrity": "sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=", + "dev": true, + "requires": { + "has": "1.0.1", + "postcss": "5.2.18", + "uniqs": "2.0.0" + } + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "dev": true + }, + "preserve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", + "dev": true + }, + "pretty-error": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz", + "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=", + "dev": true, + "requires": { + "renderkid": "2.0.1", + "utila": "0.4.0" + } + }, + "private": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", + "dev": true + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" + }, + "progress": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", + "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=", + "dev": true + }, + "progress-bar-webpack-plugin": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/progress-bar-webpack-plugin/-/progress-bar-webpack-plugin-1.11.0.tgz", + "integrity": "sha512-XT6r8strD6toU0ZVip25baJINo7uE4BD4H8d4vhOV4GIK5PvNNky8GYJ2wMmVoYP8eo/sSmtNWn0Vw7zWDDE3A==", + "dev": true, + "requires": { + "chalk": "1.1.3", + "object.assign": "4.1.0", + "progress": "1.1.8" + }, + "dependencies": { + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "dev": true, + "optional": true, + "requires": { + "asap": "2.0.6" + } + }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=" + }, + "proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", + "dev": true + }, + "proxy-addr": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.3.tgz", + "integrity": "sha512-jQTChiCJteusULxjBp8+jftSQE5Obdl3k4cnmLA6WXtK6XFuWRnvVL7aCiBqaLPM8c4ph0S4tKna8XvmIwEnXQ==", + "dev": true, + "requires": { + "forwarded": "0.1.2", + "ipaddr.js": "1.6.0" + } + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + }, + "public-encrypt": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz", + "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "browserify-rsa": "4.0.1", + "create-hash": "1.1.3", + "parse-asn1": "5.1.0", + "randombytes": "2.0.6" + } + }, + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "requires": { + "end-of-stream": "1.4.1", + "once": "1.4.0" + } + }, + "pumpify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.4.0.tgz", + "integrity": "sha512-2kmNR9ry+Pf45opRVirpNuIFotsxUGLaYqxIwuR77AYrYRMuFCz9eryHBS52L360O+NcR383CL4QYlMKPq4zYA==", + "requires": { + "duplexify": "3.5.4", + "inherits": "2.0.3", + "pump": "2.0.1" + } + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "dev": true + }, + "qr.js": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/qr.js/-/qr.js-0.0.0.tgz", + "integrity": "sha1-ys6GOG9ZoNuAUPqQ2baw6IoeNk8=" + }, + "qs": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", + "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==", + "dev": true + }, + "query-string": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", + "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", + "dev": true, + "requires": { + "object-assign": "4.1.1", + "strict-uri-encode": "1.1.0" + } + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true + }, + "randomatic": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", + "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", + "dev": true, + "requires": { + "is-number": "3.0.0", + "kind-of": "4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "randombytes": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", + "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, + "requires": { + "randombytes": "2.0.6", + "safe-buffer": "5.1.1" + } + }, + "range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", + "dev": true + }, + "raw-body": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", + "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", + "dev": true, + "requires": { + "bytes": "3.0.0", + "http-errors": "1.6.2", + "iconv-lite": "0.4.19", + "unpipe": "1.0.0" + } + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, + "requires": { + "load-json-file": "2.0.0", + "normalize-package-data": "2.4.0", + "path-type": "2.0.0" + }, + "dependencies": { + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "requires": { + "pify": "2.3.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true, + "requires": { + "find-up": "2.1.0", + "read-pkg": "2.0.0" + } + }, + "readable-stream": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz", + "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.1", + "string_decoder": "1.0.3", + "util-deprecate": "1.0.2" + } + }, + "readdirp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", + "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "minimatch": "3.0.4", + "readable-stream": "2.3.5", + "set-immediate-shim": "1.0.1" + } + }, + "readline2": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz", + "integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=", + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "mute-stream": "0.0.5" + } + }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "dev": true, + "requires": { + "resolve": "1.6.0" + } + }, + "reduce-css-calc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz", + "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=", + "dev": true, + "requires": { + "balanced-match": "0.4.2", + "math-expression-evaluator": "1.2.17", + "reduce-function-call": "1.0.2" + }, + "dependencies": { + "balanced-match": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", + "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", + "dev": true + } + } + }, + "reduce-function-call": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.2.tgz", + "integrity": "sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk=", + "dev": true, + "requires": { + "balanced-match": "0.4.2" + }, + "dependencies": { + "balanced-match": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", + "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", + "dev": true + } + } + }, + "regenerate": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz", + "integrity": "sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg==", + "dev": true + }, + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "dev": true + }, + "regenerator-transform": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", + "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "private": "0.1.8" + } + }, + "regex-cache": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", + "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", + "dev": true, + "requires": { + "is-equal-shallow": "0.1.3" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "requires": { + "extend-shallow": "3.0.2", + "safe-regex": "1.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "1.0.0", + "is-extendable": "1.0.1" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "2.0.4" + } + } + } + }, + "regexpu-core": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", + "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", + "dev": true, + "requires": { + "regenerate": "1.3.3", + "regjsgen": "0.2.0", + "regjsparser": "0.1.5" + } + }, + "regjsgen": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", + "dev": true + }, + "regjsparser": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", + "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "dev": true, + "requires": { + "jsesc": "0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + } + } + }, + "relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", + "dev": true + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "renderkid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.1.tgz", + "integrity": "sha1-iYyr/Ivt5Le5ETWj/9Mj5YwNsxk=", + "dev": true, + "requires": { + "css-select": "1.2.0", + "dom-converter": "0.1.4", + "htmlparser2": "3.3.0", + "strip-ansi": "3.0.1", + "utila": "0.3.3" + }, + "dependencies": { + "domhandler": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.1.0.tgz", + "integrity": "sha1-0mRvXlf2w7qxHPbLBdPArPdBJZQ=", + "dev": true, + "requires": { + "domelementtype": "1.3.0" + } + }, + "domutils": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.1.6.tgz", + "integrity": "sha1-vdw94Jm5ou+sxRxiPyj0FuzFdIU=", + "dev": true, + "requires": { + "domelementtype": "1.3.0" + } + }, + "htmlparser2": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.3.0.tgz", + "integrity": "sha1-zHDQWln2VC5D8OaFyYLhTJJKnv4=", + "dev": true, + "requires": { + "domelementtype": "1.3.0", + "domhandler": "2.1.0", + "domutils": "1.1.6", + "readable-stream": "1.0.34" + } + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "utila": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.3.3.tgz", + "integrity": "sha1-1+jn1+MJEHCSsF+NloiCTWM6QiY=", + "dev": true + } + } + }, + "repeat-element": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", + "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, + "requires": { + "is-finite": "1.0.2" + } + }, + "request": { + "version": "2.81.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", + "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", + "dev": true, + "optional": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.6.0", + "caseless": "0.12.0", + "combined-stream": "1.0.6", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.1.4", + "har-validator": "4.2.1", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.18", + "oauth-sign": "0.8.2", + "performance-now": "0.2.0", + "qs": "6.4.0", + "safe-buffer": "5.1.1", + "stringstream": "0.0.5", + "tough-cookie": "2.3.4", + "tunnel-agent": "0.6.0", + "uuid": "3.2.1" + }, + "dependencies": { + "qs": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", + "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", + "dev": true, + "optional": true + } + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-from-string": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", + "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=", + "dev": true + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "require-uncached": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", + "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", + "dev": true, + "requires": { + "caller-path": "0.1.0", + "resolve-from": "1.0.1" + } + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "resolve": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.6.0.tgz", + "integrity": "sha512-mw7JQNu5ExIkcw4LPih0owX/TZXjD/ZUF/ZQ/pDnkw3ZKhDcZZw5klmBlj6gVMwjQ3Pz5Jgu7F3d0jcDVuEWdw==", + "dev": true, + "requires": { + "path-parse": "1.0.5" + } + }, + "resolve-from": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", + "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", + "dev": true + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "restore-cursor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", + "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", + "dev": true, + "requires": { + "exit-hook": "1.1.1", + "onetime": "1.1.0" + } + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true + }, + "right-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "dev": true, + "requires": { + "align-text": "0.1.4" + } + }, + "rimraf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "requires": { + "glob": "7.1.2" + } + }, + "ripemd160": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", + "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=", + "dev": true, + "requires": { + "hash-base": "2.0.2", + "inherits": "2.0.3" + } + }, + "run-async": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz", + "integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=", + "dev": true, + "requires": { + "once": "1.4.0" + } + }, + "run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "requires": { + "aproba": "1.2.0" + } + }, + "rx-lite": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz", + "integrity": "sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI=", + "dev": true + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "0.1.15" + } + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "schema-utils": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.3.0.tgz", + "integrity": "sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=", + "dev": true, + "requires": { + "ajv": "5.5.2" + }, + "dependencies": { + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "dev": true, + "requires": { + "co": "4.6.0", + "fast-deep-equal": "1.1.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" + } + } + } + }, + "semver": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", + "dev": true + }, + "send": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", + "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "1.1.2", + "destroy": "1.0.4", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", + "fresh": "0.5.2", + "http-errors": "1.6.2", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "2.3.0", + "range-parser": "1.2.0", + "statuses": "1.4.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "serialize-javascript": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.4.0.tgz", + "integrity": "sha1-fJWFFNtqwkQ6irwGLcn3iGp/YAU=" + }, + "serve-static": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", + "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "dev": true, + "requires": { + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "parseurl": "1.3.2", + "send": "0.16.2" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "set-immediate-shim": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", + "dev": true + }, + "set-value": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", + "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", + "dev": true, + "requires": { + "extend-shallow": "2.0.1", + "is-extendable": "0.1.1", + "is-plain-object": "2.0.4", + "split-string": "3.1.0" + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.1" + } + }, + "shake.js": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/shake.js/-/shake.js-1.2.2.tgz", + "integrity": "sha1-sqxWCoKr5o14oCliOnCI4bMLrP8=" + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "shelljs": { + "version": "0.7.8", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz", + "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=", + "dev": true, + "requires": { + "glob": "7.1.2", + "interpret": "1.1.0", + "rechoir": "0.6.2" + } + }, + "sigmund": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", + "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true + }, + "slice-ansi": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", + "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", + "dev": true + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "requires": { + "base": "0.11.2", + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "map-cache": "0.2.2", + "source-map": "0.5.7", + "source-map-resolve": "0.5.1", + "use": "3.1.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "requires": { + "define-property": "1.0.0", + "isobject": "3.0.1", + "snapdragon-util": "3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "sntp": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "dev": true, + "optional": true, + "requires": { + "hoek": "2.16.3" + } + }, + "sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "dev": true, + "requires": { + "is-plain-obj": "1.1.0" + } + }, + "source-list-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz", + "integrity": "sha512-I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "source-map-resolve": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.1.tgz", + "integrity": "sha512-0KW2wvzfxm8NCTb30z0LMNyPqWCdDGE2viwzUaucqJdkTRXtZiSY3I+2A6nVAjmdOy0I4gU8DwnVVGsk9jvP2A==", + "dev": true, + "requires": { + "atob": "2.0.3", + "decode-uri-component": "0.2.0", + "resolve-url": "0.2.1", + "source-map-url": "0.4.0", + "urix": "0.1.0" + } + }, + "source-map-support": { + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", + "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", + "dev": true, + "requires": { + "source-map": "0.5.7" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true + }, + "spdx-correct": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", + "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", + "dev": true, + "requires": { + "spdx-expression-parse": "3.0.0", + "spdx-license-ids": "3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", + "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "dev": true, + "requires": { + "spdx-exceptions": "2.1.0", + "spdx-license-ids": "3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz", + "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==", + "dev": true + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "requires": { + "extend-shallow": "3.0.2" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "1.0.0", + "is-extendable": "1.0.1" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "2.0.4" + } + } + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "sshpk": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz", + "integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=", + "dev": true, + "optional": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true, + "optional": true + } + } + }, + "ssr-window": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ssr-window/-/ssr-window-1.0.0.tgz", + "integrity": "sha512-WHFyFLegz/NOgwdlFTw93Wd4c/gQ5hkv6amtdK/K0atfZvr28vwfEV7MR3NtWek+gnpiSd/tKXHQVfQRtA6OJg==" + }, + "ssri": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz", + "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", + "requires": { + "safe-buffer": "5.1.1" + } + }, + "stackframe": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.0.4.tgz", + "integrity": "sha512-to7oADIniaYwS3MhtCa/sQhrxidCCQiF/qp4/m5iN3ipf0Y7Xlri0f6eG29r08aL7JYl8n32AF3Q5GYBZ7K8vw==", + "dev": true + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "requires": { + "define-property": "0.2.5", + "object-copy": "0.1.0" + } + }, + "statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", + "dev": true + }, + "stream-browserify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", + "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.5" + } + }, + "stream-each": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.2.tgz", + "integrity": "sha512-mc1dbFhGBxvTM3bIWmAAINbqiuAk9TATcfIQC8P+/+HJefgaiTlMn2dHvkX8qlI12KeYKSQ1Ua9RrIqrn1VPoA==", + "requires": { + "end-of-stream": "1.4.1", + "stream-shift": "1.0.0" + } + }, + "stream-http": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.1.tgz", + "integrity": "sha512-cQ0jo17BLca2r0GfRdZKYAGLU6JRoIWxqSOakUMuKOT6MOK7AAlE856L33QuDmAy/eeOrhLee3dZKX0Uadu93A==", + "dev": true, + "requires": { + "builtin-status-codes": "3.0.0", + "inherits": "2.0.3", + "readable-stream": "2.3.5", + "to-arraybuffer": "1.0.1", + "xtend": "4.0.1" + } + }, + "stream-shift": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", + "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=" + }, + "strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", + "dev": true + }, + "string-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-1.0.1.tgz", + "integrity": "sha1-VpcPscOFWOnnC3KL894mmsRa36w=", + "dev": true, + "requires": { + "strip-ansi": "3.0.1" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "requires": { + "safe-buffer": "5.1.1" + } + }, + "stringstream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", + "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", + "dev": true, + "optional": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "strip-comments": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-0.4.4.tgz", + "integrity": "sha1-ucqvxP6QX5bAkd+J+achXyqmKcY=", + "dev": true, + "requires": { + "extend-shallow": "2.0.1", + "extract-comments": "0.10.1" + } + }, + "strip-css-comments": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-css-comments/-/strip-css-comments-3.0.0.tgz", + "integrity": "sha1-elYl7/iisibPiUehElTaluE9rok=", + "dev": true, + "requires": { + "is-regexp": "1.0.0" + } + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "style-loader": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.19.1.tgz", + "integrity": "sha512-IRE+ijgojrygQi3rsqT0U4dd+UcPCqcVvauZpCnQrGAlEe+FUIyrK93bUDScamesjP08JlQNsFJU+KmPedP5Og==", + "dev": true, + "requires": { + "loader-utils": "1.1.0", + "schema-utils": "0.3.0" + } + }, + "stylus-loader": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/stylus-loader/-/stylus-loader-3.0.2.tgz", + "integrity": "sha512-+VomPdZ6a0razP+zinir61yZgpw2NfljeSsdUF5kJuEzlo3khXhY19Fn6l8QQz1GRJGtMCo8nG5C04ePyV7SUA==", + "dev": true, + "requires": { + "loader-utils": "1.1.0", + "lodash.clonedeep": "4.5.0", + "when": "3.6.4" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "requires": { + "has-flag": "1.0.0" + } + }, + "svgo": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-0.7.2.tgz", + "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=", + "dev": true, + "requires": { + "coa": "1.0.4", + "colors": "1.1.2", + "csso": "2.3.2", + "js-yaml": "3.7.0", + "mkdirp": "0.5.1", + "sax": "1.2.4", + "whet.extend": "0.9.9" + } + }, + "swiper": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/swiper/-/swiper-4.2.6.tgz", + "integrity": "sha512-H+PZClFocrR9yqQItQdJrZGqAju/ikukJKN0g2++GIzRDdGzyIa7e8dutcwcpXReimT3nEp+yZUmM0f3ixSgMw==", + "requires": { + "dom7": "2.0.5", + "ssr-window": "1.0.0" + }, + "dependencies": { + "dom7": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/dom7/-/dom7-2.0.5.tgz", + "integrity": "sha512-RP7TaZlOpr4hLRtZJzulVsiAiZbAn3Jxh7tSXlKchhByyRK11lRpJH5iID0G/WElUWTZfUI7JANLAeXM/e+t9g==", + "requires": { + "ssr-window": "1.0.0" + } + } + } + }, + "table": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/table/-/table-3.8.3.tgz", + "integrity": "sha1-K7xULw/amGGnVdOUf+/Ys/UThV8=", + "dev": true, + "requires": { + "ajv": "4.11.8", + "ajv-keywords": "1.5.1", + "chalk": "1.1.3", + "lodash": "4.17.5", + "slice-ansi": "0.0.4", + "string-width": "2.1.1" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + }, + "dependencies": { + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + } + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "tapable": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.8.tgz", + "integrity": "sha1-mTcqXJmb8t8WCvwNdL7U9HlIzSI=", + "dev": true + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "through2": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "requires": { + "readable-stream": "2.3.5", + "xtend": "4.0.1" + } + }, + "time-stamp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-2.0.0.tgz", + "integrity": "sha1-lcakRTDhW6jW9KPsuMOj+sRto1c=", + "dev": true + }, + "timers-browserify": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.6.tgz", + "integrity": "sha512-HQ3nbYRAowdVd0ckGFvmJPPCOH/CHleFN/Y0YQCX1DVaB7t+KFvisuyN09fuP8Jtp1CpfSh8O8bMkHbdbPe6Pw==", + "dev": true, + "requires": { + "setimmediate": "1.0.5" + } + }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", + "dev": true + }, + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", + "dev": true + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "requires": { + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "regex-not": "1.0.2", + "safe-regex": "1.1.0" + }, + "dependencies": { + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "1.0.2", + "isobject": "3.0.1" + } + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "1.0.0", + "is-extendable": "1.0.1" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "2.0.4" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "3.0.0", + "repeat-string": "1.6.1" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + } + } + }, + "toposort": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/toposort/-/toposort-1.0.6.tgz", + "integrity": "sha1-wxdI5V0hDv/AD9zcfW5o19e7nOw=", + "dev": true + }, + "touch": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-1.0.0.tgz", + "integrity": "sha1-RJy+LbrlqMgDjjDXH6D/RklHxN4=", + "dev": true, + "requires": { + "nopt": "1.0.10" + }, + "dependencies": { + "nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "dev": true, + "requires": { + "abbrev": "1.1.1" + } + } + } + }, + "tough-cookie": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", + "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", + "dev": true, + "optional": true, + "requires": { + "punycode": "1.4.1" + } + }, + "trim-right": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", + "dev": true + }, + "tryer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.0.tgz", + "integrity": "sha1-Antp+oIyJeVRys4+8DsR9qs3wdc=", + "dev": true + }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "dev": true + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true, + "optional": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "1.1.2" + } + }, + "type-is": { + "version": "1.6.16", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", + "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "2.1.18" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, + "uglify-js": { + "version": "3.3.16", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.3.16.tgz", + "integrity": "sha512-FMh5SRqJRGhv9BbaTffENIpDDQIoPDR8DBraunGORGhySArsXlw9++CN+BWzPBLpoI4RcSnpfGPnilTxWL3Vvg==", + "dev": true, + "requires": { + "commander": "2.15.1", + "source-map": "0.6.1" + } + }, + "uglify-to-browserify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "dev": true, + "optional": true + }, + "uglifyjs-webpack-plugin": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz", + "integrity": "sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=", + "dev": true, + "requires": { + "source-map": "0.5.7", + "uglify-js": "2.8.29", + "webpack-sources": "1.1.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "uglify-js": { + "version": "2.8.29", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "dev": true, + "requires": { + "source-map": "0.5.7", + "uglify-to-browserify": "1.0.2", + "yargs": "3.10.0" + } + }, + "yargs": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "dev": true, + "requires": { + "camelcase": "1.2.1", + "cliui": "2.1.0", + "decamelize": "1.2.0", + "window-size": "0.1.0" + } + } + } + }, + "underscore": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", + "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=", + "dev": true + }, + "union-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", + "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", + "dev": true, + "requires": { + "arr-union": "3.1.0", + "get-value": "2.0.6", + "is-extendable": "0.1.1", + "set-value": "0.4.3" + }, + "dependencies": { + "set-value": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", + "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", + "dev": true, + "requires": { + "extend-shallow": "2.0.1", + "is-extendable": "0.1.1", + "is-plain-object": "2.0.4", + "to-object-path": "0.3.0" + } + } + } + }, + "uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", + "dev": true + }, + "uniqid": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/uniqid/-/uniqid-4.1.1.tgz", + "integrity": "sha1-iSIN32t1GuUrX3JISGNShZa7hME=", + "dev": true, + "requires": { + "macaddress": "0.2.8" + } + }, + "uniqs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", + "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", + "dev": true + }, + "unique-filename": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.0.tgz", + "integrity": "sha1-0F8v5AMlYIcfMOk8vnNe6iAVFPM=", + "requires": { + "unique-slug": "2.0.0" + } + }, + "unique-slug": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.0.tgz", + "integrity": "sha1-22Z258fMBimHj/GWCXx4hVrp9Ks=", + "requires": { + "imurmurhash": "0.1.4" + } + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "requires": { + "has-value": "0.3.1", + "isobject": "3.0.1" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "requires": { + "get-value": "2.0.6", + "has-values": "0.1.4", + "isobject": "2.1.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "upath": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.0.4.tgz", + "integrity": "sha512-d4SJySNBXDaQp+DPrziv3xGS6w3d2Xt69FijJr86zMPBy23JEloMCEOUBBzuN7xCtjLCnmB9tI/z7SBCahHBOw==", + "dev": true + }, + "upper-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", + "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=", + "dev": true + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + } + } + }, + "url-loader": { + "version": "0.5.9", + "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-0.5.9.tgz", + "integrity": "sha512-B7QYFyvv+fOBqBVeefsxv6koWWtjmHaMFT6KZWti4KRw8YUD/hOU+3AECvXuzyVawIBx3z7zQRejXCDSO5kk1Q==", + "dev": true, + "requires": { + "loader-utils": "1.1.0", + "mime": "1.3.6" + }, + "dependencies": { + "mime": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.6.tgz", + "integrity": "sha1-WR2E02U6awtKO5343lqoEI5y5eA=", + "dev": true + } + } + }, + "use": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz", + "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "user-home": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz", + "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=", + "dev": true, + "requires": { + "os-homedir": "1.0.2" + } + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "requires": { + "inherits": "2.0.1" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=", + "dev": true + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true + }, + "uuid": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", + "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz", + "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==", + "dev": true, + "requires": { + "spdx-correct": "3.0.0", + "spdx-expression-parse": "3.0.0" + } + }, + "validator": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/validator/-/validator-9.4.1.tgz", + "integrity": "sha512-YV5KjzvRmSyJ1ee/Dm5UED0G+1L4GZnLN3w6/T+zZm8scVua4sOhYKWTUrKa0H/tMiJyO9QLHMPN+9mB/aMunA==" + }, + "vanilla-masker": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/vanilla-masker/-/vanilla-masker-1.2.0.tgz", + "integrity": "sha1-woMOnZlKX+zSJhUGR3wnB/5Yl1Y=" + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true + }, + "vendors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.1.tgz", + "integrity": "sha1-N61zyO5Bf7PVgOeFMSMH0nSEfyI=", + "dev": true + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "1.3.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true, + "optional": true + } + } + }, + "vm-browserify": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", + "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", + "dev": true, + "requires": { + "indexof": "0.0.1" + } + }, + "vow": { + "version": "0.4.17", + "resolved": "https://registry.npmjs.org/vow/-/vow-0.4.17.tgz", + "integrity": "sha512-A3/9bWFqf6gT0jLR4/+bT+IPTe1mQf+tdsW6+WI5geP9smAp8Kbbu4R6QQCDKZN/8TSCqTlXVQm12QliB4rHfg==", + "dev": true + }, + "vue": { + "version": "2.5.16", + "resolved": "https://registry.npmjs.org/vue/-/vue-2.5.16.tgz", + "integrity": "sha512-/ffmsiVuPC8PsWcFkZngdpas19ABm5mh2wA7iDqcltyCTwlgZjHGeJYOXkBMo422iPwIcviOtrTCUpSfXmToLQ==" + }, + "vue-awesome-swiper": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/vue-awesome-swiper/-/vue-awesome-swiper-3.1.3.tgz", + "integrity": "sha512-E7suzkyApO8vNZbgdEnjSmnpsmQZyRvSVXJ7sey3XYwKPOkLhH3+GnHroBw+5PZIQXvWBwdCeQsPG1xQ1r1Rhg==", + "requires": { + "object-assign": "4.1.1", + "swiper": "4.2.6" + } + }, + "vue-hot-reload-api": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.0.tgz", + "integrity": "sha512-2j/t+wIbyVMP5NvctQoSUvLkYKoWAAk2QlQiilrM2a6/ulzFgdcLUJfTvs4XQ/3eZhHiBmmEojbjmM4AzZj8JA==", + "dev": true + }, + "vue-loader": { + "version": "12.2.2", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-12.2.2.tgz", + "integrity": "sha512-DD+sYaWQ1esYL/tEwJpoEGE/PFUu32fp7iOuMf4Sra3dgxqr4haTOkVam2VY0/5D4LG8eAcB94ruXKeQW2/ikw==", + "dev": true, + "requires": { + "consolidate": "0.14.5", + "hash-sum": "1.0.2", + "js-beautify": "1.7.5", + "loader-utils": "1.1.0", + "lru-cache": "4.1.2", + "postcss": "5.2.18", + "postcss-load-config": "1.2.0", + "postcss-selector-parser": "2.2.3", + "resolve": "1.6.0", + "source-map": "0.5.7", + "vue-hot-reload-api": "2.3.0", + "vue-style-loader": "3.1.2", + "vue-template-es2015-compiler": "1.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "vue-pay-keyboard": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/vue-pay-keyboard/-/vue-pay-keyboard-1.1.5.tgz", + "integrity": "sha512-mjEDD41X+EdJ32MKyXYA4OCqqobtijjaYvzwpYBm857WrfIDCMVsSEiQxzYu1ZAcBqQOj6glhcrGigwgbsIy1Q==", + "requires": { + "vue": "2.5.16", + "vue-pay-keyboard": "1.1.5" + } + }, + "vue-router": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.0.1.tgz", + "integrity": "sha512-vLLoY452L+JBpALMP5UHum9+7nzR9PeIBCghU9ZtJ1eWm6ieUI8Zb/DI3MYxH32bxkjzYV1LRjNv4qr8d+uX/w==" + }, + "vue-style-loader": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-3.1.2.tgz", + "integrity": "sha512-ICtVdK/p+qXWpdSs2alWtsXt9YnDoYjQe0w5616j9+/EhjoxZkbun34uWgsMFnC1MhrMMwaWiImz3K2jK1Yp2Q==", + "dev": true, + "requires": { + "hash-sum": "1.0.2", + "loader-utils": "1.1.0" + } + }, + "vue-template-compiler": { + "version": "2.5.16", + "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.5.16.tgz", + "integrity": "sha512-ZbuhCcF/hTYmldoUOVcu2fcbeSAZnfzwDskGduOrnjBiIWHgELAd+R8nAtX80aZkceWDKGQ6N9/0/EUpt+l22A==", + "dev": true, + "requires": { + "de-indent": "1.0.2", + "he": "1.1.1" + } + }, + "vue-template-es2015-compiler": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.6.0.tgz", + "integrity": "sha512-x3LV3wdmmERhVCYy3quqA57NJW7F3i6faas++pJQWtknWT+n7k30F4TVdHvCLn48peTJFRvCpxs3UuFPqgeELg==", + "dev": true + }, + "vuex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/vuex/-/vuex-3.0.1.tgz", + "integrity": "sha512-wLoqz0B7DSZtgbWL1ShIBBCjv22GV5U+vcBFox658g6V0s4wZV9P4YjCNyoHSyIBpj1f29JBoNQIqD82cR4O3w==" + }, + "vux": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/vux/-/vux-2.8.0.tgz", + "integrity": "sha1-txFzpaqTyzSrvSGfQCXn9ilHbIE=", + "requires": { + "array-filter": "1.0.0", + "array-find": "1.0.0", + "array-map": "0.0.0", + "array-shuffle": "1.0.1", + "autosize": "3.0.21", + "axios": "0.15.3", + "big.js": "3.2.0", + "blueimp-md5": "2.10.0", + "countup.js": "1.9.3", + "fastclick": "1.0.6", + "lodash.debounce": "4.0.8", + "lodash.throttle": "4.1.1", + "object-assign": "4.1.1", + "qr.js": "0.0.0", + "shake.js": "1.2.2", + "validator": "9.4.1", + "vanilla-masker": "1.2.0", + "vux-blazy": "1.6.4", + "vux-xscroll": "3.1.12", + "x-photoswipe": "4.1.3-rc.1" + }, + "dependencies": { + "axios": { + "version": "0.15.3", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.15.3.tgz", + "integrity": "sha1-LJ1jiy4ZGgjqHWzJiOrda6W9wFM=", + "requires": { + "follow-redirects": "1.0.0" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "follow-redirects": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.0.0.tgz", + "integrity": "sha1-jjQpjL0uF28lTv/sdaHHjMhJ/Tc=", + "requires": { + "debug": "2.6.9" + } + } + } + }, + "vux-blazy": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/vux-blazy/-/vux-blazy-1.6.4.tgz", + "integrity": "sha1-4zBz2QLgo4RO8aRjzOPKLgqrR78=" + }, + "vux-loader": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/vux-loader/-/vux-loader-1.2.7.tgz", + "integrity": "sha1-2DKxM4Yc/BtCeOuEGhS4hQHw2y4=", + "dev": true, + "requires": { + "acorn": "5.5.3", + "compare-versions": "3.1.0", + "cssnano": "3.10.0", + "draftlog": "1.0.12", + "escodegen": "1.9.1", + "inline-manifest-webpack-plugin": "3.0.1", + "js-yaml": "3.7.0", + "less": "2.7.3", + "loader-utils": "0.2.17", + "node-cli-config": "0.0.1", + "parse5": "3.0.3", + "progress-bar-webpack-plugin": "1.11.0", + "strip-comments": "0.4.4", + "strip-css-comments": "3.0.0", + "touch": "1.0.0", + "underscore": "1.8.3", + "uuid": "3.2.1", + "webpack-merge": "1.1.2", + "webpack-sources": "0.1.5" + }, + "dependencies": { + "loader-utils": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", + "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "dev": true, + "requires": { + "big.js": "3.2.0", + "emojis-list": "2.1.0", + "json5": "0.5.1", + "object-assign": "4.1.1" + } + }, + "source-list-map": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-0.1.8.tgz", + "integrity": "sha1-xVCyq1Qn9rPyH1r+rYjE9Vh7IQY=", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "webpack-merge": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-1.1.2.tgz", + "integrity": "sha1-SfKmi6X9NLsTwzjBhMcCjZOENDI=", + "dev": true, + "requires": { + "lodash.clonedeep": "4.5.0", + "lodash.differencewith": "4.5.0", + "lodash.isequal": "4.5.0", + "lodash.isfunction": "3.0.9", + "lodash.isplainobject": "4.0.6", + "lodash.mergewith": "4.6.1", + "lodash.unionwith": "4.6.0" + } + }, + "webpack-sources": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-0.1.5.tgz", + "integrity": "sha1-qh86vw8NdNtxEcQOUAuE+WZkB1A=", + "dev": true, + "requires": { + "source-list-map": "0.1.8", + "source-map": "0.5.7" + } + } + } + }, + "vux-xscroll": { + "version": "3.1.12", + "resolved": "https://registry.npmjs.org/vux-xscroll/-/vux-xscroll-3.1.12.tgz", + "integrity": "sha1-41Ln+dxfn+6SU9szHJZ91Ws7yVA=" + }, + "watchpack": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.5.0.tgz", + "integrity": "sha512-RSlipNQB1u48cq0wH/BNfCu1tD/cJ8ydFIkNYhp9o+3d+8unClkIovpW5qpFPgmL9OE48wfAnlZydXByWP82AA==", + "dev": true, + "requires": { + "chokidar": "2.0.2", + "graceful-fs": "4.1.11", + "neo-async": "2.5.0" + } + }, + "webpack": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.11.0.tgz", + "integrity": "sha512-3kOFejWqj5ISpJk4Qj/V7w98h9Vl52wak3CLiw/cDOfbVTq7FeoZ0SdoHHY9PYlHr50ZS42OfvzE2vB4nncKQg==", + "dev": true, + "requires": { + "acorn": "5.5.3", + "acorn-dynamic-import": "2.0.2", + "ajv": "6.3.0", + "ajv-keywords": "3.1.0", + "async": "2.6.0", + "enhanced-resolve": "3.4.1", + "escope": "3.6.0", + "interpret": "1.1.0", + "json-loader": "0.5.7", + "json5": "0.5.1", + "loader-runner": "2.3.0", + "loader-utils": "1.1.0", + "memory-fs": "0.4.1", + "mkdirp": "0.5.1", + "node-libs-browser": "2.1.0", + "source-map": "0.5.7", + "supports-color": "4.5.0", + "tapable": "0.2.8", + "uglifyjs-webpack-plugin": "0.4.6", + "watchpack": "1.5.0", + "webpack-sources": "1.1.0", + "yargs": "8.0.2" + }, + "dependencies": { + "ajv": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.3.0.tgz", + "integrity": "sha1-FlCkERTvAFdMrBC4Ay2PTBSBLac=", + "dev": true, + "requires": { + "fast-deep-equal": "1.1.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" + } + }, + "ajv-keywords": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.1.0.tgz", + "integrity": "sha1-rCsnk5xUPpXSwG5/f1wnvkqlQ74=", + "dev": true + }, + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "supports-color": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", + "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "dev": true, + "requires": { + "has-flag": "2.0.0" + } + } + } + }, + "webpack-bundle-analyzer": { + "version": "2.11.1", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-2.11.1.tgz", + "integrity": "sha512-VKUVkVMc6TWVXmF1OxsBXoiRjYiDRA4XT0KqtbLMDK+891VX7FCuklYwzldND8J2upUcHHnuXYNTP+4mSFi4Kg==", + "dev": true, + "requires": { + "acorn": "5.5.3", + "bfj-node4": "5.3.1", + "chalk": "2.3.2", + "commander": "2.15.1", + "ejs": "2.5.7", + "express": "4.16.3", + "filesize": "3.6.0", + "gzip-size": "4.1.0", + "lodash": "4.17.5", + "mkdirp": "0.5.1", + "opener": "1.4.3", + "ws": "4.1.0" + } + }, + "webpack-clean": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/webpack-clean/-/webpack-clean-1.0.0.tgz", + "integrity": "sha1-8k3bupRYHlxhF+QdTNQeOyGa7Z8=", + "dev": true, + "requires": { + "file-exists": "0.1.1", + "fs-extra": "0.24.0", + "vow": "0.4.17" + } + }, + "webpack-dev-middleware": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-1.12.2.tgz", + "integrity": "sha512-FCrqPy1yy/sN6U/SaEZcHKRXGlqU0DUaEBL45jkUYoB8foVb6wCnbIJ1HKIx+qUFTW+3JpVcCJCxZ8VATL4e+A==", + "dev": true, + "requires": { + "memory-fs": "0.4.1", + "mime": "1.6.0", + "path-is-absolute": "1.0.1", + "range-parser": "1.2.0", + "time-stamp": "2.0.0" + }, + "dependencies": { + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + } + } + }, + "webpack-hot-middleware": { + "version": "2.21.2", + "resolved": "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.21.2.tgz", + "integrity": "sha512-N5c80o31E0COFJV8HRjiX3hJetDOwQ2Ajt5TTORKA9diOimhFtmaZKSfO3pQKMeQngb7I4TUnNDroJiUzPFhKQ==", + "dev": true, + "requires": { + "ansi-html": "0.0.7", + "html-entities": "1.2.1", + "querystring": "0.2.0", + "strip-ansi": "3.0.1" + } + }, + "webpack-merge": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.1.2.tgz", + "integrity": "sha512-/0QYwW/H1N/CdXYA2PNPVbsxO3u2Fpz34vs72xm03SRfg6bMNGfMJIQEpQjKRvkG2JvT6oRJFpDtSrwbX8Jzvw==", + "dev": true, + "requires": { + "lodash": "4.17.5" + } + }, + "webpack-sources": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.1.0.tgz", + "integrity": "sha512-aqYp18kPphgoO5c/+NaUvEeACtZjMESmDChuD3NBciVpah3XpMEU9VAAtIaB1BsfJWWTSdv8Vv1m3T0aRk2dUw==", + "requires": { + "source-list-map": "2.0.0", + "source-map": "0.6.1" + } + }, + "when": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/when/-/when-3.6.4.tgz", + "integrity": "sha1-RztRfsFZ4rhQBUl6E5g/CVQS404=", + "dev": true + }, + "whet.extend": { + "version": "0.9.9", + "resolved": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz", + "integrity": "sha1-+HfVv2SMl+WqVC+twW1qJZucEaE=", + "dev": true + }, + "which": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", + "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", + "dev": true, + "requires": { + "isexe": "2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "window-size": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", + "dev": true + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "write": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", + "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", + "dev": true, + "requires": { + "mkdirp": "0.5.1" + } + }, + "ws": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-4.1.0.tgz", + "integrity": "sha512-ZGh/8kF9rrRNffkLFV4AzhvooEclrOH0xaugmqGsIfFgOE/pIz4fMc4Ef+5HSQqTEug2S9JZIWDR47duDSLfaA==", + "dev": true, + "requires": { + "async-limiter": "1.0.0", + "safe-buffer": "5.1.1" + } + }, + "x-photoswipe": { + "version": "4.1.3-rc.1", + "resolved": "https://registry.npmjs.org/x-photoswipe/-/x-photoswipe-4.1.3-rc.1.tgz", + "integrity": "sha512-ok+x+1ufLuBT9dfM5P2FcRefwNniQoVwwfBhGa5gLn8NrSTzNah2p4IElMLwzXuKLtyH4yb+z3IsdDef3FOL5A==" + }, + "xml-char-classes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/xml-char-classes/-/xml-char-classes-1.0.0.tgz", + "integrity": "sha1-ZGV4SKIP/F31g6Qq2KJ3tFErvE0=", + "dev": true + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + }, + "yaml-loader": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/yaml-loader/-/yaml-loader-0.5.0.tgz", + "integrity": "sha512-p9QIzcFSNm4mCw/m5NdyMfN4RE4aFZJWRRb01ERVNGCym8VNbKtw3OYZXnvUIkim6U/EjqE/2yIh9F/msShH9A==", + "dev": true, + "requires": { + "js-yaml": "3.7.0" + } + }, + "yargs": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", + "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", + "dev": true, + "requires": { + "camelcase": "4.1.0", + "cliui": "3.2.0", + "decamelize": "1.2.0", + "get-caller-file": "1.0.2", + "os-locale": "2.1.0", + "read-pkg-up": "2.0.0", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "2.1.1", + "which-module": "2.0.0", + "y18n": "3.2.1", + "yargs-parser": "7.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wrap-ansi": "2.1.0" + }, + "dependencies": { + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + } + } + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + } + } + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true + } + } + }, + "yargs-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", + "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", + "dev": true, + "requires": { + "camelcase": "4.1.0" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + } + } + }, + "zrender": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/zrender/-/zrender-4.0.3.tgz", + "integrity": "sha512-LdkntRaNogzKAwlICuS0wdZcYaeA94llQ0SWqsgbcd6SPasgkjstaoe6vr5P9Pd2ID/rlhf3UrmIuFzqOLdDuA==" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..0ec2e10 --- /dev/null +++ b/package.json @@ -0,0 +1,94 @@ +{ + "name": "commerce", + "version": "1.0.0", + "description": "A Vue.js project", + "author": "c.k", + "private": true, + "scripts": { + "dev": "node build/dev-server.js", + "start": "npm run dev", + "build": "node build/build.js", + "lint": "eslint --ext .js,.vue src" + }, + "dependencies": { + "alloylever": "^1.0.2", + "axios": "^0.17.0", + "compression-webpack-plugin": "^1.0.1", + "crypto-js": "^3.1.9-1", + "echarts": "^4.0.4", + "exif-js": "^2.3.0", + "lib-flexible": "^0.3.2", + "postcss-plugin-px2rem": "^0.7.0", + "swiper": "^4.2.6", + "vue": "^2.5.2", + "vue-awesome-swiper": "^3.1.3", + "vue-pay-keyboard": "^1.1.5", + "vue-router": "^3.0.1", + "vuex": "^3.0.1", + "vux": "^2.7.3" + }, + "devDependencies": { + "autoprefixer": "^7.1.2", + "babel-core": "^6.22.1", + "babel-eslint": "^7.1.1", + "babel-loader": "^7.1.1", + "babel-plugin-transform-runtime": "^6.22.0", + "babel-preset-env": "^1.3.2", + "babel-preset-stage-2": "^6.22.0", + "babel-register": "^6.22.0", + "chalk": "^2.0.1", + "clean-webpack-plugin": "^0.1.17", + "connect-history-api-fallback": "^1.3.0", + "copy-webpack-plugin": "^4.2.3", + "css-loader": "^0.28.7", + "eslint": "^3.19.0", + "eslint-config-standard": "^10.2.1", + "eslint-friendly-formatter": "^3.0.0", + "eslint-loader": "^1.7.1", + "eslint-plugin-html": "^3.0.0", + "eslint-plugin-import": "^2.7.0", + "eslint-plugin-node": "^5.2.0", + "eslint-plugin-promise": "^3.4.0", + "eslint-plugin-standard": "^3.0.1", + "eventsource-polyfill": "^0.9.6", + "express": "^4.14.1", + "extract-text-webpack-plugin": "^3.0.0", + "fastclick": "^1.0.6", + "file-loader": "^1.1.4", + "friendly-errors-webpack-plugin": "^1.6.1", + "html-webpack-plugin": "^2.30.1", + "http-proxy-middleware": "^0.17.3", + "less": "^2.7.3", + "less-loader": "^4.0.5", + "opn": "^5.1.0", + "optimize-css-assets-webpack-plugin": "^3.2.0", + "ora": "^1.2.0", + "portfinder": "^1.0.13", + "rimraf": "^2.6.0", + "semver": "^5.3.0", + "shelljs": "^0.7.6", + "style-loader": "^0.19.0", + "stylus-loader": "^3.0.1", + "url-loader": "^0.5.8", + "vue-loader": "^12.2.2", + "vue-style-loader": "^3.0.1", + "vue-template-compiler": "^2.5.2", + "vux-loader": "^1.2.7", + "webpack": "^3.6.0", + "webpack-bundle-analyzer": "^2.9.0", + "webpack-clean": "^1.0.0", + "webpack-dev-middleware": "^1.12.0", + "webpack-hot-middleware": "^2.18.2", + "webpack-merge": "^4.1.0", + "yaml-loader": "^0.5.0" + }, + "engines": { + "node": ">= 4.0.0", + "npm": ">= 3.0.0" + }, + "browserslist": [ + "> 1%", + "last 2 versions", + "not ie <= 8" + ] +} diff --git a/src/App.vue b/src/App.vue new file mode 100644 index 0000000..f254355 --- /dev/null +++ b/src/App.vue @@ -0,0 +1,102 @@ +<template> + <div id="app" :style="appScrollStyle"> + <!--<transition @after-enter="$vux.bus && $vux.bus.$emit('vux:after-view-enter')" + :name="'vux-pop-' + (direction === 'in' ? 'in' : 'none')">--> + <transition> + <keep-alive> + <router-view class="router-view"></router-view> + </keep-alive> + </transition> + <loading v-model="isLoading" text=" " loading=false></loading> + </div> +</template> +<script> + import {Loading} from 'vux'; + import {mapState} from 'vuex'; + + export default { + name: 'app', + data() { + return {} + }, + components: { + Loading + }, + computed: { + ...mapState({ + isLoading: state => state.isLoading, // loading 状态 + direction: state => state.direction, + appScrollStyle: state => state.appScrollStyle + }) + } + }; +</script> + +<style lang="less"> + @import '~vux/src/styles/1px.less'; + @import '~vux/src/styles/reset.less'; + @import '~vux/src/styles/close.less'; + /* 关闭样式 */ + @import './assets/iconfont/iconfont.css'; + /* 图标字体 */ + @import './style/app.less'; /* 全局样式 */ + #app { + height: 100%; + background: @color-white; + .vux-header .vux-header-left .left-arrow:before { + border-color: @color-white; + } + } + + .weui-dialog__btn_primary { + color: @color-primary !important; + } + + .vux-pop-in-enter-active, + .vux-pop-in-leave-active { + will-change: transform; + transition: all 500ms; + backface-visibility: hidden; + perspective: 1000; + } + + .vux-pop-in-enter { + opacity: 0; + transform: translate3d(-100%, 0, 0); + } + + .vux-pop-out-in-active { + opacity: 0; + transform: translate3d(100%, 0, 0); + } + + .iconfont { + font-size: 16px; + } + + .icon { + width: 30px; + height: 30px; + fill: currentColor; + overflow: hidden; + } + + .v-transfer-dom { + .vux-popup-show { + .vux-popup-header-right { + color: @color-primary; + } + } + } + + /*iphoneX的input样式修改*/ + + @media (device-width: 375px) and (device-height: 812px) and (-webkit-min-device-pixel-ratio: 3) { + //如果以后出现375*812,非ios机型,可以加上下面语句 + .weui-tabbar { + padding-bottom: 34px !important; + } + } +</style> + + diff --git a/src/api/api.js b/src/api/api.js new file mode 100644 index 0000000..81e8e98 --- /dev/null +++ b/src/api/api.js @@ -0,0 +1,241 @@ +/** + * Created by c.y on 2018/3/16. + * 接口的统一处理 + */ +import Service from './service'; +import bndApi from './bndApi'; + +export default { + // 获取项目的配置信息 + getProductConfig() { + return Service.get('/json/finlean/chanBaseInfo.json?=' + new Date()); + }, + // 获取项目的路由配置信息 + getRouterControlConfig() { + return Service.get('/json/finlean/auditRouterControl.json?=' + new Date()); + }, + // 获取额度评估的问题列表 + fetchAssessmentQuestionList() { + return Service.get('/json/finlean/question.json?=' + new Date()); + }, + // 协议内容 + getAgreementContent() { + let prodConfig = JSON.parse(window.localStorage.getItem('newProdConfig')); + // https://t.finlean.com/html/commerce/finlean/agreement.html + return Service.get(prodConfig.agreementPath); + }, + // 额度评估的问题列表与bank的三个分类 + fetchQuestionAndTypeList() { + return Service.get('/json/finlean/finlean_wallet_config.json?=' + new Date()); + }, + // 保存额度评估的问题列表 + saveAssessmentList(data) { + return Service.post('/commerce/v2/feedback/assess', data); + }, + // 获取城市列表 + getAreaInfo() { + return Service.get('/json/finlean/finlean_wallet_area.json?=' + new Date()); + }, + // 获取资讯列表/banner + fetchNewsList(data) { + return Service.post('/commerce/v2/notice/initInfo', data); + }, + // 获取资讯的详情页面 + fetchNewsDetail(data) { + return Service.post('/commerce/v2/notice/info', data); + }, + // ios--咨询的图片上传 + advisoryImgUpLoad(data) { + return Service.post('/ques/imgUpLoad', data); + }, + //ios-咨询的提交 + advisorySubmit(data) { + return Service.post('/commerce/v2/feedback/consult', data); + }, + // 反馈图片的上传与咨询的图片的上传 + uploadIMG(data) { + return Service.post('/commerce/v2/file/upload', data); + }, +// /v2/account/uploadHead + // IOS 审核功能 用户头像上传功能 + userHearderUploadIMG(data) { + return Service.post('/commerce/v2/account/uploadHead', data); + }, + // 反馈图片的删除 + deleteIMG(data) { + return Service.post('/commerce/v2/file/del', data); + }, + // 问题反馈的提交 + submitFeedBack(data) { + return Service.post('/commerce/v2/feedback/idea', data); + }, + // 进入产品详情的都要调一次这个接口,记录产品的点击次数 + fetchProdRec(data) { + return Service.post('/commerce/v2/prod/prodRec', data); + }, + // 产品申请接口,这个接口还是调用旧C端的 + getVisitUrl(data) { + return Service.post('/commerce/v2/prod/visitUrl', data); + }, + // 额度评估的为你优先的接口 + fetchPushProd(data) { + return Service.post('/commerce/v2/prod/pushProd', data); + }, + // 产品详情 + fetchProdDetail(data) { + return Service.post('/commerce/v2/prod/prodDetail', data); + }, + // 我的申请记录 + fetchApplyRecord(data) { + return Service.post('/commerce/v2/prod/aplyhis', data); + }, + // loan的tab 产品分类的产品列表 + fetchProdTypeList(data) { + return Service.post('/commerce/v2/prod/prodType', data); + }, + // 公告的初始化列表 + fetchNoticeList(data) { + return Service.post('/commerce/v2/notice/initNotice', data); + }, + // 公告的详情 + fetchNoticeDetail(data) { + return Service.post('/commerce/v2/notice/notice', data); + }, + //登陆=========================================================================================== + // 通过验证码登录 + loginByCode(data) { + return Service.post('/commerce/v2/loginByCode', data); + }, + // 密码登陆 + userLogin(data) { + return Service.post('/commerce/v2/login', data); + }, + // 退出登陆 + userLogout(data) { + return Service.post('/commerce/v2/logout', data); + }, + // 发送验证码 0代表注册, 1代表忘记密码 + getVerCode(data) { + return Service.post('/commerce/v2/account/getVerCode', data); + }, + // 验证图形验证码 + checkImageCode(data) { + return Service.post('/commerce/v2/user/checkImageCode', data); + }, + //实名认证 + threeData(data) { + return Service.post('/commerce/v2/account/threeData', data); + }, + //修改密码 + editPwd(data) { + return Service.post('/commerce/v2/user/editPwd', data); + }, + //忘记密码 + forgetPwd(data) { + return Service.post('/commerce/v2/user/forgetPwd', data); + }, + //登出 + logout(data) { + return Service.post('/commerce/v2/logout', data); + }, + //注册 + register(data) { + return Service.post('/commerce/v2/user/register', data); + }, + //实名认证 + fetchAuth(data) { + return Service.post('/commerce/v2/account/threeData', data); + }, + //实名反显 + fetchAuthInit(data) { + return Service.post('/commerce/v2/account/threeDataCheck', data); + }, + //首页初始化 + homeInit(data) { + return Service.post('/commerce/v2/index/init', data); + }, + //首页消息接口 + homeNotice(data) { + return Service.post('/commerce/v2/notice/noticeStatus', data); + }, + // /commerce/v2/notice/noticeStatus + // 获取banner + fetchProdBanner(data) { + return Service.post('/commerce/v2/prod/banner', data); + }, + //===================收入贷 接口 begin ======================= + // 收入贷图片上传 + upLoadImg(data) { + return Service.post('/commerce/v2/income/uploadFile', data); + }, + // 收入贷图片删除 + deleteImageFile(data) { + return Service.post('/commerce/v2/income/deleteFile', data); + }, + // 收入贷初始化个人信息 + initPersonalInfo(data) { + return Service.post('/commerce/v2/income/initPersonalInfo', data); + }, + // 收入贷保存个人信息 + savePersonalInfo(data) { + return Service.post('/commerce/v2/income/savePersonalInfo', data); + }, + // 收入贷初始化居住及工作信息 + initHomeWorkInfo(data) { + return Service.post('/commerce/v2/income/initHomeWorkInfo', data); + }, + // 收入贷保存居住及工作信息 + saveHomeWorkInfo(data) { + return Service.post('/commerce/v2/income/saveHomeWorkInfo', data); + }, + // 收入贷初始化绑定银行卡页面 + initBankCardInfo(data) { + return Service.post('/commerce/v2/income/initBankCardInfo', data); + }, + // 收入贷绑定银行卡 + saveBankCardInfo(data) { + return Service.post('/commerce/v2/income/saveBankCardInfo', data); + }, + // 收入贷初始化证明材料页面 + initMaterialInfo(data) { + return Service.post('/commerce/v2/income/initMaterialInfo', data); + }, + // 收入贷提交 + incomeSubmit(data) { + return Service.post('/commerce/v2/income/submit', data); + }, + // 收入贷初始化审核结果页面 + initApplyResult(data) { + return Service.post('/commerce/v2/income/initApplyResult', data); + }, + //===================收入贷 接口 end ======================= + // 从客户端获取微信token + getWXToken(data) { + let config = { + headers: { + 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' + }, + transformRequest: [function (data) { + if (data === undefined) { + return data; + } + // 参数转换处理 + let ret = ''; + for (let it in data) { + ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&'; + } + return ret; + }] + }; + return Service.post('/commerce/wechat/getsine', data, config); + }, + //获取第三方url + prodUrl(data) { + return Service.post('/commerce/v2/xyd/prodUrl', data); + }, +// ======================= v2 end ============================= + //包你贷接口api start========= + ...bndApi + //包你贷接口api end========= +} + diff --git a/src/api/bndApi.js b/src/api/bndApi.js new file mode 100644 index 0000000..c37a09e --- /dev/null +++ b/src/api/bndApi.js @@ -0,0 +1,149 @@ +import Service from "./service"; + +/** + * 作者:hzq + * 文件说明: 包你贷接口api + * Creeated by hzq on 2018/6/26 + * + */ +export default { + //---------------------包你贷--【授信】接口start---------------------------- + //初始化个人基本信息 + textListGeren(data) { + return Service.post('/commerce/v2/bnd/apply/initPersonalInfo', data); + }, + //个人基本信息的保存/修改 + savePersonal(data) { + return Service.post('/commerce/v2/bnd/apply/savePersonalInfo', data); + }, + //初始化公司信息 + initComy(data) { + return Service.post('/commerce/v2/bnd/apply/initComyInfo', data); + }, + //公司信息保存/修改 + saveComyInfo(data) { + return Service.post('/commerce/v2/bnd/apply/saveComyInfo', data); + }, + //初始化联系人信息 + initContact(data) { + return Service.post('/commerce/v2/bnd/apply/initContactInfo', data); + }, + //联系人信息保存/修改 + saveContactInfo(data) { + return Service.post('/commerce/v2/bnd/apply/saveContactInfo', data); + }, + //设置交易密码的保存 + savePwd(data) { + return Service.post('/commerce/v2/bnd/apply/savePwd', data); + }, + //初始化银行卡绑定 + initBankCard(data) { + return Service.post('/commerce/v2/bnd/apply/initBankCard', data) + }, + //银行卡绑定保存/修改 + saveBankCard(data) { + return Service.post('/commerce/v2/bnd/apply/saveBankCard', data) + }, + //校验验证码 + checkCode(data) { + return Service.post('/commerce/v2/bnd/apply/checkCode', data) + }, + // 绑卡/申请提交/贷款提交验证码重发 + resendCode(data) { + return Service.post('/commerce/v2/bnd/apply/resendCode', data) + }, + //查询银行卡绑定结果/照片提交结果/芝麻授权结果/申请结果/贷款结果 + result(data) { + return Service.post('/commerce/v2/bnd/apply/result', data) + }, + //照片信息初始化 + initPhoto(data) { + return Service.post('/commerce/v2/bnd/apply/initPhoto', data) + }, + //照片信息保存修改 + savePhoto(data) { + return Service.post('/commerce/v2/bnd/apply/savePhoto', data) + }, + //照片信息提交 + submitPhoto(data) { + return Service.post('/commerce/v2/bnd/apply/submitPhoto', data) + }, + // 获取芝麻页面url/聚立信页面url + getUrl(data) { + return Service.post('/commerce/v2/bnd/apply/getUrl', data) + }, + //芝麻授权回调 + submitSesame(data) { + return Service.post('/commerce/v2/bnd/apply/submitSesame', data) + }, + //聚信立授权回调 + submitJuxinli(data) { + return Service.post('/commerce/v2/bnd/apply/submitJuxinli', data) + }, + //初始化确认信息页面 + initConfirmInfo(data) { + return Service.post('/commerce/v2/bnd/apply/initConfirmInfo', data) + }, + //初始化确认信息页面 + submitApply(data) { + return Service.post('/commerce/v2/bnd/apply/submitApply', data) + }, + //---------------------包你贷--【授信】接口 end---------------------------- + //---------------------包你贷--【贷款】接口 start---------------------------- + //初始化我的贷款页面 + initMyLoan(data) { +// /commerce/v2/ioso/detail + return Service.post('/commerce/v2/bnd/loan/initMyLoan', data) + }, + //修改交易密码 + changePwd(data) { + return Service.post('/commerce/v2/bnd/loan/changePwd', data) + }, + //借款试算 + trial(data) { + return Service.post('/commerce/v2/bnd/loan/trial', data) + }, + //重置密码验证码发送 + loanSendCode(data) { + return Service.post('/commerce/v2/bnd/loan/sendCode', data) + }, + //重置密码验证码校验 + loanCheckCode(data) { + return Service.post('/commerce/v2/bnd/loan/checkCode', data) + }, + //重置交易密码 + resetPwd(data) { + return Service.post('/commerce/v2/bnd/loan/resetPwd', data) + }, + //贷款提交 + submitLoan(data) { + return Service.post('/commerce/v2/bnd/loan/submitLoan', data) + }, + //---------------------包你贷--【贷款】接口 end---------------------------- + //---------------------包你贷--【还款】接口 start---------------------------- + //查看贷款列表 + repayList(data) { + return Service.post('/commerce/v2/bnd/repay/list', data) + }, + //查看借款账单/还款计划/主动还款页面初始化 + repayDetail(data) { + return Service.post('/commerce/v2/bnd/repay/detail', data) + }, + //主动还款/提前结清还款信息查询 + repayTrial(data) { + return Service.post('/commerce/v2/bnd/repay/trial', data) + }, + //主动还款/提前结清提交 + repaySubmitRepay(data) { + return Service.post('/commerce/v2/bnd/repay/submitRepay', data) + }, + //主动还款/提前结清结果查询 + repayResult(data) { + return Service.post('/commerce/v2/bnd/repay/result', data) + }, + //主动还款/提前结清结果查询 + repayNotice(data) { + return Service.post('/commerce/v2/bnd/repay/notice', data) + }, + //---------------------包你贷--【还款】接口 end---------------------------- +} diff --git a/src/api/service.js b/src/api/service.js new file mode 100644 index 0000000..b00e7eb --- /dev/null +++ b/src/api/service.js @@ -0,0 +1,102 @@ +/** + * Created by c.y on 2018/3/16. + * Updated by 汤彦祖 on 2018/4/11 + * 采用axios发送请求,这是对请求的全局处理 + * 在获取数据时应当防止用户操作,打开loding + */ +import Vue from 'vue'; +import {AjaxPlugin, md5} from 'vux'; +import sign from '../tool/loginSign'; +import store from '../store/index'; + +Vue.use(AjaxPlugin); + +// 创建实例 +const Service = Vue.http.create({ + timeout: 1000 * 6, // 6秒超时 + headers: {'Content-Type': 'application/json; charset=UTF-8'} +}); + +// 全局拦截器设置 +Service.interceptors.request.use(config => { + // Do something before request is sent + // ================begin =================== + let clientInfo = window.localStorage.getItem('newClientInfo'); + let clicentPara = JSON.parse(clientInfo); + //sysType为2是EC,C端为1 + clicentPara.sysType = 1; + store.commit('UPDATE_LOADING',{isLoading:true}); + if (config.method === 'post') { // post 封装数据 + if (typeof (config.data) !== 'object') { + config.data = {}; + } + for (let attr in clicentPara) { + config.data[attr] = clicentPara[attr]; + } + } else if (config.method === 'get') { // get 封装数据 + if (config.params === undefined) { + config.params = {}; + } + for (let attr in clicentPara) { + config.params[attr] = clicentPara[attr]; + } + config.params['mblNo'] = config.mblNo; + } + let _newSid = window.sessionStorage.getItem('newSid'); + // 验签 用于所有没有登录并传递有电话号码的接口验签 + if (_newSid === null) { + if (config.method === 'post') { + let _configstr = JSON.stringify(config.data); + const _indexNum = _configstr.indexOf('mblNo'); + if (_indexNum !== -1) { + let _strmd = 'jttech_ver_code_sign_75a7_'; + _strmd += config.data.mblNo; + let _url = config.url.split('/'); + _strmd += '_' + _url[_url.length - 1]; + config.data['anonySign'] = md5(_strmd); + } + } else { + let _configstr = JSON.stringify(config.params); + const _indexNum = _configstr.indexOf('mblNo'); + if (_indexNum !== -1) { + let _strmd = 'jttech_ver_code_sign_75a7_'; + _strmd += config.params.mblNo; + let _url = config.url.split('/'); + _strmd += '_' + _url[_url.length - 1]; + config.params['anonySign'] = md5(_strmd); + } + } + } else { + // 参数签名 + // 必须由http或https开头的请求,才会进行自动签名组装 + if (config.params) { + config.params = sign.signForFormDataOrUrl (config.params, true, _newSid); + } else if (config.data) { + config.data = sign.signForFormDataOrUrl (config.data, false, _newSid); + } else { + if (config.method === 'GET') { + config.params = sign.signForFormDataOrUrl (config.data, false, _newSid); + } else { + config.data = sign.signForFormDataOrUrl (config.data, false, _newSid); + } + } + + + } + // ================end =================== + return config; +}, (error) => { + store.commit('UPDATE_LOADING',{isLoading:false}); + return Promise.reject(error); +}); + +// response统一处理操作 +Service.interceptors.response.use(res => { + store.commit('UPDATE_LOADING',{isLoading:false}); + return res.data; +}, (error) => { + store.commit('UPDATE_LOADING',{isLoading:false}); + return Promise.reject(error); +}); + +export default Service; diff --git a/src/api/statusCodeManage.js b/src/api/statusCodeManage.js new file mode 100644 index 0000000..0c22357 --- /dev/null +++ b/src/api/statusCodeManage.js @@ -0,0 +1,41 @@ +/** + * Created by c.y on 2018/3/16. + * 请求的后台,对返回的错误码进行了统一的管理 + */ +import fToast from '../tool/fToast'; + +export default { + showTipOfStatusCode(error, _this, callback) { + if (error) { + // 超时的处理 + if (error.code === 'ECONNABORTED' && error.message.indexOf('timeout') !== -1) { + fToast.toast('网络超时,请刷新页面'); + return false; + } + const _errorCode = error.response.data.errorCode; + // 单点登录控制 + if (_errorCode === 99 || error.response.data.status === 90040006) { + window.sessionStorage.removeItem('newSid'); + window.sessionStorage.removeItem('newPhoneNum'); + window.sessionStorage.removeItem('newClientState'); + fToast.alert('登录超时,请退出后重试', _this, callback); + } else if (_errorCode === 11004) { + fToast.toast(error.response.data.errMsg); + } else if (_errorCode === -999) { + // 服务器内部错误 + fToast.toast('网络异常,请稍后重试'); + } else { + let _msg = '网络异常,请稍后重试'; + if (error.response.data.errMsg) { + _msg = error.response.data.errMsg; + } else if (error.response.data.message) { + _msg = error.response.data.message; + } + fToast.toast(_msg); + } + + } else { + // console.log(error); + } + } +}; diff --git a/src/assets/iconfont/iconfont.css b/src/assets/iconfont/iconfont.css new file mode 100644 index 0000000..a20e67e --- /dev/null +++ b/src/assets/iconfont/iconfont.css @@ -0,0 +1,171 @@ + +@font-face {font-family: "iconfont"; + src: url('iconfont.eot?t=1529551862142'); /* IE9*/ + src: url('iconfont.eot?t=1529551862142#iefix') format('embedded-opentype'), /* IE6-IE8 */ + url('data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAAD2sAAsAAAAAZLAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAADMAAABCsP6z7U9TLzIAAAE8AAAARAAAAFZW70noY21hcAAAAYAAAAKYAAAGppYj8A1nbHlmAAAEGAAANKIAAFQoVBLMYmhlYWQAADi8AAAAMQAAADYT373oaGhlYQAAOPAAAAAgAAAAJAn8Be9obXR4AAA5EAAAADgAAAE8UIv//2xvY2EAADlIAAAAoAAAAKDunwK4bWF4cAAAOegAAAAfAAAAIAGHAgVuYW1lAAA6CAAAAUUAAAJtPlT+fXBvc3QAADtQAAACWQAAA768/ycjeJxjYGRgYOBikGPQYWB0cfMJYeBgYGGAAJAMY05meiJQDMoDyrGAaQ4gZoOIAgCKIwNPAHicY2BkcWacwMDKwMHUyXSGgYGhH0IzvmYwYuRgYGBiYGVmwAoC0lxTGBwYKp5vZm7438AQw9zA0AgUZgTJAQD2WAxteJzN1MtujVEYxvH/1jr1oFS16lhnRdWhzkpbx6JNJIImJhKJcAXtLVQnFRFxuAkmTbgWw2cZmbgAnrUfAwMjDHwrv529v2S/+9trPe8LLAda7JC1wrKvNPyOxhffbTTvt9DWvN/a+OTPlxnzd1qZFWpRp7rVpxFNaFLTuq0ZPdBDPdJjPdWc5rWo11rSR33Wt9JWRst4eVIWymJ5Vz58/+5qqdKuLvWov1llylXu/lJl9jdVxlzlmau8Ke+bVf72avhfZV1nmjvMN9eC1/Nf1ovfrJder7zeNqvc4jDDHOEoxzhOHyc4yQinOM1ZznGeC4xy0fs3zgSX/GtXGOQAB73Hu9nDXq6ynWt+hklucJMphtjPMraxw2fQ6l1fwUpWsdrn0U4Hnayhi7Wso5v19LCBXjbSzyY2s4WtDLCTXZxhn/8TjRX/YJ/+eHv/k6ujvrQs/fzkXWH2Jz+iCJ+iMxk+T9QePlnUET5j1Bk+bdQVPne0NpwAtC6cBdQdTgXqCecDbQgnBfWGM4P6wulB/eEcoU3hRKHN4WyhLeGUoa3hvKFt4eSh7eEMooFwGtGOcC7RznBC0a5wVtHucGrRnnB+0d5wktG+cKbR/qiTRYNBrXEgqDUOBrXGoXAXoKGgPu/hcGeg4XCPoCPhbkFHw32DjoU7CB0P9xIaCWrtiaA+42S409BUUPdsOqh7czvqpNTdqNNS96JOUd0PdymaCfcrehDuXPQw3MPoUdTpqsdBzdrTqGnVbFCzNhfuejQf1NwtBjV3r4Oau6Wg5u5jeE6gz0HN4Lfw7KC0hacIZTQ8Tyhj4clCGQ/PGMqT8LShPAvPHcpCeAJRFsOziPImPJUob8PzifIuPKko78Mzi/IhmP4Bs0U9MnicxXwJmBxVuWj959Re1Ut1VXX1Mr1Pd8/aM9M93Z1kMjPZd0IWwhKSkATZJUG5gEIIISwCDxFEcEE0EsErIIgoKkKIcIML4HqfXFAvuS6IigvXi88lXXn/qeqeTIDofb73fW+m65z/nDr7+c+/nXOKEzju8H/Qx2iMM7keboRbwK3iOBD7IR8kKciVRyukH+ycYDtWkJYL5ZxUyFfoODh50YpWG6MlR5TEEAQhDbVctVGukDLURyfIGFSjKYB4MrE2UuyK0JtBjZXT17jLyF1gZwpdoYlBd+nApFXNmvIleiQSj0RulEVBkAnhQ0E434kqgqKK7ieFUMJ+LNNLMqDHy4kVpwSyyciW60a3pYqOArBrF5jJbPBTk0bCwN+ORNSMxKVwQI4lAoVuCy75mRYz9VTppxz+8djX/fQpOskVuGFuNreE44RcBcrGBDRz1aglFnJ50TasKOtJ3RhtVKO2EQSaL402AQOW5A1MabTBemeJTo7BNS8rzbb29zYAGr2wPxiJBN05zCXM7YpA4+cBU4EJNWEq7pPqLV4K5nzO3cVAYO4czEt2YRmYIRJseS8I55XFYexhM6HChIKu+6TCknRF9vseR71+baZzOI1zuJk4f9gp7FMaHGx9ECQEMFjxe9KIIFTGWCvqRINQKpN2WpGTRMKtPp+Q81f7bmMpwNKG7+qWsuKgRvdeeulees7pCrXjyovAf+22277Gm+4raRWyU9lWnw8TU/kaS1tbIgl1JVS2YU7MP/Pxd2sJg6qg34h5sYQ73I/FVTY/BPvxVfoEzo+GM8TBtJabYCOWifkhKOFvtBHNQLNRTQPhHj8kCIce99zEYY6nvKiLlKdXKFZcPetXatwEOtFJgK57i9sCCpQQ/O3GCQHl3FdxVFn9/jjub4/jEGLHMcbRLOVDUK6AaGUAWxKtTkIDMaREuH0tQWjt8929L/D8C3s9d1SNq786S41byhXYNmwhthM4FeZMJd7XomOd1Oi6f1WUV89VAKd7t9dUbDLwSsIbo04by0ePEUU0xAGSRJzlSSjjKFW9UYpaITiqZRLDoutvwM6rN9wwDabTm9P6CjZXveF69v66G6bBbxyn2rHHiTaRQLChKuXZUElBb6gcRjfKxxyri29QsRqsDBfLddcrgPN4A2ufcuzBuuo69v56bF9cvf461tbrbmRtxTkFbOvjuObncgPYTmxl3Ud+bGK1OYELRRILU623kJZZGRqtTgB99MOVqvDrzz70a57/9UPr1+iKFgssXHH70zz/9O2It7UhRaXkHqwL9L0z3rPMT/fZXwtFMRZXhCzitZ924eVVnHzCP6RGEn57cACvJpNcBAOlvKQAGxyHjQqi0Ci9FFO7X3I/z2YEthA1ocAmldQVxf0CLFVxMNy7iKLAVjXO5gHL2k+zOAsF1j9g1KyAvWOPgR3KYb+MCkynB2YFGGFDirXZ3YMkZw7Sls0+5SI+BXMvmUYDXrKSyZ5kknSIW6PXo0YsNfqt/zh60bOkPckOrT1I92AT69wEt5hxFSHvLV0PKZGAMgpb6lBcn6D2Q4caY1MN1g9JpJ32Om8CCBdQN7N5XrpUDRwMTlHNzZ7TbuUu3//+ierjflfuP8rLKpsZ7ixbphyhtm2a7fUQOj0+SYE97f7BG/wO7fgpzkWKs5G3LPZ7yzCrjt2pNRu1apT1qJlHsjGJIzXK6NgEox7erCBtc/IVaHrLpsxeOF48UuRgpvTIWr8hax8pZiMZgPT7VEXjZT1RyMYMmY/GlXCyD2c5qWsbNQvk6hJCllRlsONq/QRCTqhrXcUvYn42iV8sJnOtObnkk6Ic1yLZhafPTTtaPMxrdu6E+XNPyRuB842E2rjmpJOuaaiJCFFn3XHWWXfM0tp9fNxb9zoX5zb4fAb7h12zg+BMD9C8KFUA0ZB1A3+1CUYvy2lg/c1AdQxxgA1Dze8lvkLGhARVEu0O8SBhyx9hdO47Av50/J9q6dXDkYhCsjIxAjQYBj4gm8UQT0QqUCqKlMLwtrEpkpITlHhMKHeoB1wASWsOzj5zYDr8TCaTzUM2DEsnA0gyrWC2YYnxqEB4IAQAcnn+39pEZ/WyQExTAiee1iFIXJvW/I58h4Y5g81/GabkBgUYuu4xQ+6eYBA2h0qpoPskTARTYS8Ugs3BVCnkPuk+ia+8tbOPPknncTKW9E/c095I+zhf7shdJuKXWEaSWi55KFUqS2IJ4RKOK9aLcc0GolMGORPGIcx4ZsPBKIfhVggxDKMQjiJjxSZinCRicViqhHEIi0WWxIk2G34hrIwONFou+VWyGjuQJPqZWd4OZDlRvypWk8RWVGNNo9HrLbHIOWF1qWUtFU11tCIjpQ8FdqiGkAgRUT4D4AxZJKGEYKg7AiELFLkyqpriVHpF/vvpBfcHtrNIMzMZU1vk2CYJxk09cokqbwmyGQ1ukdVLIroZDxLzv5kOssDav6ZxhS97udnAGYS8dUtVS33rpv7dDNPHAk7ymsHzb25uKBt6c3vfnFCPYMKIfiQhw1VhiodznII0K8ct5LhiYcKjw/mScyyOXoFxXLY+ncI1ztLWOwkReySbkeXhNmEcOgaL3xuMQKXLRkqGI8nkXbJ+wYL1BPqT0TxELsD12JtM3nEsdt/6CUQCjfJkwiqFe5v13kAkElhwCiGnLuiembD7rEYg4tOqx7z+JbgSV/UlpSmK5LV1itJgB/Mln3Zl4AjsEG78wtE2rUkroiNHrE6bdkKH/sMTR0DUizokZMGYXXMqJ06NgHt2m8pMd9oy70vYzm4uyriGKbLFikTDQTqJa5tJCOhDIV8ahwoR2fj6XNLXTiyn1qa5teg0lWVzSFNQwn5317w4vFulVkx1r5ejsnutoJBnvhMyoL/SA5HgN7srYKQN8zNk5ebV5LOyHEkZdAD5XFBNytAwTfc5OWlhQYM87z7LE3eOEbo9koC4dTuWMZiH4ZBhhNzvhODikbGxkYtBDMKgH9Xd79PDg/RplE9QUlXaXUnDGDDRpFZtMExiTffYP7Yeo5oN+rB7Q2J+wn2PKshhNQuDxeewrp5KP7b3O8X+rBqmIrwINWzcNwTLVN1bWSdCt0YSicitIWOgDOcHFKstZ11JdjFarDAJFJU3pJxNJMVIPukl7seZbOXexUQqWAIrmCrgwCaiqO7HUWtQYLn7SFsv8PXGKxGXKlyTm8MtxZWCuF9s1EfLRdR7faaNOBV1BA/F2HJpNIUjvIymga2U0QZ0FtgUQaeQHDLcb4ZEGDH6422daQkByf1epJLww+UMzBVgSbPB+PqMZLHY6O5u/RC60Wt0k7l+xH4rcn8iaxqPhyJTylfUfMyw2iHr4XDEK6DRXELmtjO7VyaZ1+3eAd3Nbvx1ZJk99Crs71zuOO5E7G3F4951b8nb3hJiIly6s5Z8YjHFwZnYEvUZf5XxIPxBXqqz/qagVEAttIwTgYTlUvlsiWya71EBWaJCNJBMR0/aDHRFZvCeTRvvqWSX04IoxmJyv3S2LIsBcfcWY/GGxcbmqxB2L1Q1pB2aqhlpLTUrpaXfLz+y9fIbYiFkMr0GUtKARhXY8Y4T9g5FRwmpRyt7T9g0W48FJW359q2PSHqXJMx0qrNnV52ZvNRF1hPiaePQ4swwpWGzvT4ZnZyLuk7mDfoW07YqUKdsTm2DKYIW4Z5gC/4Jb9mn9LR2jUQEsLO23JjU6NzOm31PtFqbNO0aGZmjYti24f4vuTmhpT1cwwk4SA5yRW4GtwDHnwNktigsdpdFnplaxJpk2c4Iq45nDUF+3yiNNMrWiO1NxZBHnZmUVZzWWGkK3w6iJEMXHuZuu+0wtxBh4gk3ZCGwmIXEi5g78dLu3S/htLV9dzOSZ59Io+vzcNilEFEQP/AAIQ/cihqqrFEaopT3It6P+q0MvARw5YcJ+dBunmf+h68UPjFVyoL1bpuXdnT/g/SriHoxRgeLvuJSzrUVmRoSCacWnUREEtPecDM6mBdTuK5SuLqlApOLxphsU2Mo5zEpLIDs72kC1PtaP/b9QkBRQ9pV8FOkKWbcNAPZkEGXCdpeRrU+cqGiomYu6X11gOZepu7c6WdzTy/PgD3IjyH4MBw0UhEkcXuDWiRIqUDGZ/GMiq4XcOiEoHo+jJRhY0/TX0edPs3izvkbvUIpihmWGAFn5iTWOykn9YFYCEHexqVT+n/T71spL84JmEaIFJjr7qXAExSXyaoAOf8fH5JxgsQZ7vSKPF03gWKR9MKNegj++f9krB6ne3GdRblu1KA4kNpWg2kGltGSSPMFXAYRzmlwZqmbljjqSx+EI1//pWdh2TllAwJAAv6cIJzifjcchpENG6BhBN0fvWO2+7sw/8xNN39LMNxfk+Sr56pmXN3NjCz4EOCZUg9d+uZT3OfdC1EWuwW6T9hy6DkNtmLbj0skj0u5v3M/5rf5CXoF8rc4yhgzfH3IX3M+Caz55A8ZRHFKRkKdUCgFoU0fx8BTjGiW3nXZZXdRWLlgwxU2CYREPUJi918svvsTLiU7N2/eScjlm5RNl8JDejwk6DOWBEhEFwMhEjqJcJgRs6+5qli87UzdoYHAO2/mMYJl2rl5405B2Pm0JMTicunsCT1I7eDynT5vfgJ5WpZD9RWmOFi76Q6z5qLgj00jN8xbBUdat8viVarLZH9I1Xh7N4ilq1dNrz+kSiKKD6Ezb+M40ZPB/oUuQNoZQhkzyfUhBz2KhkLBqJWbUUcqmXahXrMdq5DHxRCtVetGrp6DWr1AuP2HBeHwfs91z58xI5rL1Uu1y+qHrzuuWqHSyGC/+++wyv3sHXfQBZ106Lb64bmT0plmbpb7odzr/7pkHUTSfAXel3E/f7tPb75P76OrufO4u3FljuBCkkRWOfKpJtPPGccrFUbySHHRLY22Odk4IJ8rs0QNp+rN4qjoIF/DlZymKA9LTMPHJSp5MqbjKfi2hSCKcOVqqeCZnVBwiHo6GatkBOtqlKQSE0lxUbfHHwuviYw+RBkWoZ5cI+VBPsgXjhvuzUVsXQVe0WQ1IovBkCSIooCSmiAaEhSK899WPbGIIgaRDCrbybDEy4oU4kOKYCpCSBYEHgTNjuSNSqLYsKgi7Fpbi6fDfEAYkeS4krFRYXlk5+Ub+oaMeJccl4W0jRUbydToiv7Fia7Ugr5x4PNGKKabMq8aIV6xFYOXDKd/OB4fsLAKLZ5Adl1dV1qKzSmtq0JIjic0OSRYA9Vh27Z4lpzlDimyoMimHgvJimEI5+bDA6lsDAhvzJ+1PF2L20Vr5yMA6yvnT+YHhGg9vmJWvlcRYtlExciblsVYtIdnB+kuxOUIYlmZq3GT3HLEMxzcQm66JWy07BTMXIfOenIn0lOoMX2aUVUrKuSYy+z/oyVpGkwv2S/oojunbVRi/v4LL9zc8iz5sCcS3BNp/eeUWR9Wuv4LbxNgGkxO2s8LWEBrV8eGFjjzwtbBSJDsCkYwGds1IJyvWu462sjflst+RD+BuoLO9eJaOmollc2CzQTLcYZobIeiLW/VvI2NEXA/9xue/83nPveqILz6uVe/F4qGvqeFQpoPBIMaLbC3fprf8O78aW/bQFumPkCY/YdDnR/H1gHPbEkfV6xD+y0jAHuUtAJ7AmQwAtAddpOaBj8PT9k9D5C7uQCutrYugFwL54V+yd2sdqnuZqTZikXnWMYX4Oea5iYlU2aleP3exQPdhfM7EzkpSt8dS2JnW6bglLhyg2t6KzLozfzU2Iz69rSoLXLSCDxnhp4OpsrBT8JdnhlmdsisveC+JIqQe2HF+yYDgtEVaFw299E/CcKfHkWXEDMTJVR0X3phW+gAy/JJ2MsKwJy/ZZlegJzY3yenEqLcXfTzoOs4IYdGwokkKxu7HvBk6h+S1xEuI3aejfLAhdw/cTu5K7jruRu4D3BIMIWib58+sj8jSihcMhJQ81QK7C1q5k2v/4W81GBEqj7KhMCqZ9VxRkqs35YzPCIwXpOXCoymVUg7TZogjuAgdLSQcr12BHTeMpZwcGuuBOedpHz/zj3/k68OBKJ2fuF4bGxeQC/ccHJ1MDI0Gg+HVVebWSepkm2TkN7dUzll1vh7JmYNIskKR959F0qDz0hBEknHSLl3ZKBvMpud7BvYOtg3ketKtP4HxMtx/MGvIV5KJEpxOBvMlGWlTPgUWAywYPNX0isHVl4U23k3pfdfOeusnuDMtKIJxvgyAF1QJKdfuyAEEonltNzageGTl1hIZrqzx/UBuWqrZS2WHENERK5OzB+vBcPhYG08n57lwGXxXK6ay8ah4/+HyVoSN6Hjt9fdPnoDnccNcWPcCmZnZ5aOGlPqpILtrTDms3A/TMUfsb8L09Qks+BZGEaY1cRhMgGd0boZhYJBVMSSg292oVIgFxSYDd/93PAcgDnDI8z9BfBnfvBMHuY1xmc35gOdh+mGmFIHA57DQM+BIS9zgRwsVO6GOSOdMlq/Ddt2ePv4Rmv1amvjeMcmdJgepODt6xRQ+9uCfXUaDCXznoGwzNQLT62ttrctvL2coqd1NJoMazsaiqeeIOcqi0f0F8lp1JhiIiHU1lzKIw2ycUJAfcCxx1O9/fiIftD9qJqIqOSgkkAl/3xPG6msqPQtiPs6CwhMY6mfOVxdhgJaW6U5d0t12fFHksZ8bQZuGzNNVDqkMaH8DD4pP0gctkfYmsPcXk9H2bJgsLSx0dFlgrd+hsSdkQxkO4oOVIYzTImhXsK6r+NwXOjw4cNXiBmkTzY3yG3iruE+yD3M7eee5V7gXub+wB3GZAYkOK5ZQ2JVsFFGYGS6NNqs1XFRFlG8L6BejRKIjTKjjRS1XsNRhZxPyJFdTaCgiAjDdAPHsKSav1mCBbUhZq/Nl5tMUjAY0+tsYzMrcJmZhZnwwibQaUQdJo+yvRdPDbFZkcVOgW9mIDbt7HYzBaXIDL95z6pbxRfNNsrnS3ZnHxyZJgsceVPMo+Y54bMhRP+Sp7AUp8zZ1YYfc6etKDaovGirqg0mCFtFXgWbF0FhQYw99F+tPyi6rmzSYLgwASN5eL0wDNqFLO4voGqKpsvbJKrp+UBiXsQBiBouyiSxCIxrskit4W09Rb6nf3ulX89bmi3/aCISi0VcjSV9b34EWpmMpChSRgkoU8DrunI5Kx8dcms6nVubzWSya7+iyy+z2JdlXVPgeEXTFPchWdflWxl4q6y7FxopA3+J7u6EEYkYQRRtUslCoY7hiGFEMPwvrFMKiHy7d5N+V0VBgfYIuJ/SI7rpkE35ETs/MpJv3eWYuqHb6EZ0vUvT9Y2xCDnNcByj9YlITJNtzcrr/ZXtfb18sWf7sEkEOQ9OhGxiPXQi9kj+4PS+ecCht2FHsLibsydk02l0MgQHEkDDuM3slQaBzZ2Ia41ULh3urhdwDWciSWMjFBoF/GUwlEAJBYWxw1+jJTqG0rXAKcjzYkhF+rlRbpxbxK3k1nNbuW3cu7jruA9xn+DuRT5etstNu1wzUAuwJafKtKF6PkScfIERy0aG1jy7UwgKTPiuOzZlBkS2bSswNl9h2hOjrUQy0575me3nNhhgMcqa9wRplLRL3cgOy7hCMDW1oog+daRIZZ/VWiKKT3WmYU54tjyf8402ah2AvG3kw1XzFvxbQmNlweQT6TSliR5pkIr9w8mR35fo5nr1nNfK9LTGyMcUQbdMXrdQFOJRykbo2TVnEBg5pfLJQtDgdV6YV6rOW7v6DFI9ufK8uCaYPTHxnRv4iHsD3Eiv/7Zd2C+edNV3Ac46hxdEGsgR8bw4gTPP4UWB11kopQYCViCgyZoW1rTn4+Pd8fHt7mEQB09+0bwvKKuZO8C8PwCKkrnjajrbnGn9te2RhXxXtyniQ/kkAwrmvWTnaROnN0X41fp3psWIMHyJKn1iYydyJGrZYYBxXQZFrxHkMkDB+OBtxCErMslwby+QAr39NkQvsiLdhWFaIHJAxp+oivjjmPX18FN0BHGCchKGkshBF3hWxdO4M7lzER92cjdxH+Me4D7H9h9QBZTqNTrclt5qRrW9Q1igHg1relozM3RZSNWQ6pV9NavCkjO8CILpa15Srt7ee8yZUf9NlJabjuQUqCPVm5JTp1gLU9yY9RnVuhLT3gpsg8OnX3bzrd/7W7r4XqrZBbLoRvxbBKu2U3H3LORDq7YTYfcs8m88H3auHhx4p61HiSbFl+uJUL0nMSdgInvJC6JjCwHHEg9eI6xxzF6A4Wv5tVGrh7jfflCLBgQbn0dmLlkxpo3WV+7+7vG777xARI3qAgEdWVzLYHQeODpSAsR+jL5nePimvbPXvg92kStOO20nhf1tP1M5t6dnDiHNuHHJvP4BnexeJuq8QshQuo5T27BtR8z2OVLW/WaMDKRzpwm/bPvwCo31ZiV83Mt28vzOsyA+fNZZw/jABhDFSVGS0BHnoRiNwUGBNUWIHvONGWTyBsONp2mSzkHMCKHEkUFqUeaqSC3mcgu5pdwa7lTubdz53MXcbsQNx2DzTQTJYNuWESnXYBjgSDm2uxkt+FTEKPhUpOlREW+npJohzQzKJ4hZ5RA030xBnClS4pnwGeFgZ0EYDpkW28ZuYg1pgMBrs66NJgn8zPdfA1tYfH01QcD9jbDoOgQWMhIxn4RTylxe7BtOERLuUufyUt9IcsXxxbs333ILrCze/SWVbxOIDyCpsCP4KB3ga2vOJBBPvd2BtWcyP7bwynfFeUJOvTDeMJbRS8jJ7/q2uzM4BZ2sfTbHA/y79lCOwlVIA8A9vMW8n9GAj3pe9uz4aUOfGTw5HT+tAh944+q3poB/pjtPm6zi0METU9ABcVdtaIGZeK/Cn+LpL0/T1XQu0nUD5Zw4ztWgd67jFO4M7gJuB/cedpqOzQnyK6vpzUoVabtn1pFMwzOeMEnS8KguriHJW87eJrTYZEcHQWIzjCJKsTMjQmeyTGZegSYWhvnspk+4JVHAiCijC/U0+JRAqtVLZfgLrBJPvGeon7gPiSfeXRnwZmbB0MYuXSJnrals7AqI5Kz1UJkVnBwtLZZ5GpKChVXnEOnaWsJQInClgvMTQfLtXoBE3JutvOEkTxF+ZWRSn3bqVsSiQQW++Cvh5GQsHM/kqGXYdedeRZ2pf6FAPtsE/ZE8hbOvuX7wZNLtLqAzR+IzM5t2kiPggfKKOMo92sbumCC+/Tbk/3Rw2bXLLEWlSJYZaSa0PV3u9fHlmVQE8g+pweBjICRizto+gTceykMklVkeV4PhvrVOLCF8ReKP7Fexvc8yN4Lcd8bR5xyZ7fgNdhFPxGMbh2bZOzOAzBQcSYEy0CWt7dUFAAuq8JCoKKJ7fqkKUC2RdaUayFJKkmE+ubzkjDvhKERbN+74IjnPPXcH3D4J82vkFsyqiGlRwRyt+zAH1Epwq1fO8bX55MBFpSjYoeiY41560QS87p51MXyIa+v7S1GeZjQhyyw5YslTPXzSXpaMKDMANwWDIVezBvySAf6SVas2kGSCbFi16hJ+IADDV+2G4WDryvLHv/4xN09+DRBMZRskEiGNbCqIK2XNve7rsgzavV+FT5T27XNnsrGTsO57hAg9BVthcikcwX7U+pg9GhU886hRYyfuxHJOLDWZqbJeaji5RlSCnJ2T8KnzjRde2H5IrYwj/6zQP3q+SnMrD92xMk/5ib8+iTA9A2FXcAX46wvuv0Medi0leZiotHqGxgkZHyL/VploCcfnKc0fD59fPXclg1a6P16KfxyzpR6+kv86jpPCqVwCeWs/N4CzPROp5yKknmuRx27m3o4U9N3cpbg+r+Nu427n9nKf5B5CbvsEaijPcd/ifsj9iHuF+yX3OvdHVJUohFFXYUraAAzCHJiLWkuO2SFy7JCJOe1sFkbUzekhtifdNNmeX320AnmmXBwzYLJDLM0Kyfsc9q1g20QZrjoBfg58c8yQDR3tAzWfUtn5b+fzWlGfenWMwP9JQ/xTBQw9sC04JM3R5oP02gsz6Rl//fOMdO7SJJ0cIh+psJ21SmvF4Li5FEMehrTOxNjxYaazF410Po1i11tAv+tudgOEM7m08VbQ71kq45hO68/dXUToKhS6Wn9NdoP5t1O/huUaab/8o/zf/u18bp8ehEIXoVZGCoRav49nUQu/eU9lknXzLnLVIOv9YGu8wlC8Qp56O+v9uD8K5Cn03Xcxy0eEqVCRrx8BD3R1d3f5ihW89++n8PyCn2QafCAyBRtka7KIQ9udxASRyJHEU/DT02C46S3rfPoICDf9N4oh18vJcKIIYEUkyMYjPOU0XMdX8DfjOg7hGmb2a3/n/QO4Nn+Ba5Mzp9EcprWbBgqobC9QKpSKCOc8OFcSCsy0ja8cQ4RcqVxnrxwbFy+tVZlfYHGC5J2j7gcxA1GJWR7YTpX3Oo/wGLAjGU4NRV6spdqsY0qWbQyDyFvzJbbfjJq9cIxszfroVDaUmt+YrX2KG2u3HVY7eC3EhYtVlG+G4W66rjiM8nDx0P3F4SUgfkWSviIiSRJhTJLcAyI5wY8B97et+5lMSTcz1/2vd89mPnPcm1WiEJUIURkXpExYvDPdkXokEAUWOOLwPCQJz5cFcuobU/fiw3tppLbPk4SXFlSsRgXBYYyJiq1rybfY+1ZVZBapPtYF1hV6gucfupL0eq+fZ+40eHqIXAHiQQajc5iTvM5tlpy0IKQFkGdIfntZO6TotF54Ad6PEPk6lVb9t1IJ08olmAbHeExkNk8LcfJ9wgC9wOMtKS6N3GaIm8+dwK3jtiBH2ebxlGu4a7n3ov52K+IqZx7hE9TnE4hfR5jD0awCE6AAbtf98BAKeYgfYyBMZRT9+Elom5WYxcjJeaZVD24yKb9Q9/XEwjS46OmCzRzT1Izcz+i6Byv9q/566PihwY/1wdggOTw4T8bJRvDQrwYRO8khdDHU4n0fHk91Q0/K/V5qAOXCsdT6E5bb7s2hoSi8ahd4ymeSrcPJikz1IqrHqVTU/badStngejBhMLn09KvoL/EhV58+dPrV5Jdbr6b06q3wXuEbN9MhHnqG6H1XYt8ir85ZR8jJ834Br2PVZFZ/JhVzd7Vb8b1z0HUHMERZCP2P8wMpNVUCKKWCdhch5CVm2EnZwSTGdSf04Eup/hRG9Ke+AB0IWg+QnRt/jM9GthvcgVq7H7e/fIl45b3U/V5H3voI0h8B53k1s8uYqASByEm1qX3rUhlHtYZCV4mjbQN321rozUat7lkNm7Wj7x10bOJkyYMXu1d9/0b43dPuX4Tj+B/e/ckfCsKLd29eV61dNHkAVULB/fNgwDAC5xoJ41wP8NwTj1fMmLJpkxqLKMcv8uJ/1w2c+z+6XJfnMNMBv6C7XxRgYHY6K4B0AItzk2DEDdiuRyL6dg+sRtA5XsFiNm1SIjHleIyNVL29w138+7Hvea7E9XGzuCXcSibtRb2dWIarSM+mztN7uqZjjFYIoMzXxKfMhqjubfmKKRScjuzJYSKTyac1+semArmEqyXyoDTriwAWj8InZ3atWvPsGrNQcS9yfwC9N7lL4Yuv/SlZYHP5J2QQBXh4w2WEXLZhw2U0N3H8qkcndtDuUHgigSkKiQlcSYvqrfePLoJTv7lkIVkIO+ODBbN185YLthxk75ntcSKZd99OL92w0Stn4PiJnPvKZ872ZNxd/OexzzoX45bjCv409y/c19lJo/Y2KDuvLXSA0VLB6RzGaB83sTs+E5PGOxuo9bbv3fpods65sEK8Wx+oY0zzMCmyAf9ySNuZOv3iFVs3URlHFGxv7DnNUhlDvuBfKhdG2SY9a5WEILPV2ZbknVp2UCckLVV6TVZV+TVJdVuSqkofZs69M5piQBMGYyzQ1+e5akjtOxKMDQpq8GxIWu5GKwmqTCShMiRI+F+pME/EUFAVZwkBcXhEDAgjzMnKAuwVZCzp+VoFBLf11FNuSxCAPnXySmPd1s7u4ouQE+ChkiAUFTkWJj1OpCtfkuWISgXaS0pYfUgBUIuep4TUyRkzBC0oDGK5QXzSrD/pdmBQCGq3+MfX3UlZAWFgQOg8elBoCMLgoP+k4A5BlkT3rG7WP/haeMP2TuueAipkqjls8Usvvui+hHG5Fy/5VlTVExlJDJr5SCibCgfUgCTKuZ4err1WPu+tlX7U/U/ndjLLDIr1KB+UylOHSHDGPRfn0Ccf0fLU3Y1CfZTN2RQCpaGNQKjj/+PzTcfUECipQjQBZOXY2EqScJacAsFokL7jxPxEXNpVrFaXj4wcKGlhFYqypslFUMNaSdZAfekfnjMYD8ZEcAJmI4tVYsXZhtl1+Rq2m77unRT1BmkrVJdjzdUvlVidWLuGlatKEQG48P9iJqbPRRH1vQluPXcRcmR2AqmQ9w6RMPWDbRyxTSEc8/L0K0FF2z+chCy3vQiD0HSkISj+X0zBA1TUJB1SpntvNIPePlmTpKdKIwAjJViPvvt1ULSVvMTv4/mVfFjYJ9HvTz46S4D/+sdn4DZJ16VHsb68A4udNMgaTinUet3Pl+oE/e+tlBTKw1N8GKvkvyzLD835sjDr4X986OWpcU+ilL4Mx/1c7gruI9zH2Im1Yw9ecfpRFNRw694uHXLPnM0OgbGY0ZJQ9wmgY0veJE6zPL/BEi2w00reRmGU3RvD6a2xneW/OUH87r87zIc5Maq4K60eICUbxhQdQFfcb2lheAY0mSgaMlYDUfc2LQQ//zyjJ8zZvoJBzIEtJ/MCoLA+E4gBsdiIDEuPRe9O/XtzsBKRqdtyv2DnQFdB1cPaN06SNV15WomeUdfCIb2+GumZR9QkdR4oEmEwkZQ+nl+nKAvTsxQ5PRKCMNz/NxYSeHveHAVmjS4y1lX2d7YV77g4fPDNR8KVqWt51tRVPZSSucN7+XPp6VzYO5tT45re+d1VTJ5ix6bFsH8cuhFmhk7PzBz1bMxi3jtpxuau2WianU0nkxZojfrIhEgkctOvYZTJDRsfWHzjjYsfeNT3Nq47btWOXCaT27HquHuPW3V51gfXiXY63Z9OjyuTyurBZ93/xKENPvsMhFDceu2ZB14RhFceeOAVnn/lAbpl0aIPuLtvXYR/t8LODyxaNAyZ7I7Vx316ZafglZ/2CobWu1GwxB8x3AXw2KFfChB65lkIYpH/+ewz7mv0oqlCsYKOTW0Pfw7d7MkbFe8UxWJ2+xqC/sUGb6NZYOcifNhhJyS8EUGYjQfb6sG05rGGAw5BQo/YdrcNZ4HVjYAF7vWiJup6evN5Wwt6LK3P+PAMURc/+oz7exyEMLbYG4Rn/UF4kLX3QbgHy4gsOtpxv0QFPaMX+voKeiamzxLqAnUPYaef7RTxLHb6Yv6XDzzwS953sc+MTuzm76M7vT4Xuap3Ju0k7m3+aUvvKD1b0VJHEEKUM30y7UtdDiPLDAUZkXb8xP7ib7bPxbKTF+ZU+tFS0U/r5yP3Bk0AM2WaP1W7LPViNWmrJ5mhe0Km56zVkhhndaHz5aBldVnWz7Skl8xS3uEnwmj3eS+ZzRxyK5jBTwVNz1mrWkntIua4Xwv59aDzsIrp/MoWWJ201pqptHBqO2HK3HMkqW+vZve+53rnTpjF9ehz9tNvr4J/kaN97mxUKDcdOLyPXe7et6/F8619d/+QR+3i7h/x/I92uH/FiXP/omkgIgCC5v7rq6++SuewxH6WQ4e+yv/IT40u3IlptKNyHcIMnfPpzKbO7qbH3ng3XUSaga3BRkmEm9aYre4vUPL6BeJbXJQgLgh0clrV7hz3ZXyVQPobFzGZiOsEJSvu8HP8ATqCOvcgt4g7kTsTde33cDdze7gvcV/lnuNe4F7l/gQqRCEPvUhpF8ISWA7HwWo4AbbCO+Ae+Cy8AL+C38Kf/HayOxmlMtsKY7ZJdhKOnaWehGGr7J2dm7qo6DSHRwplSQgR00KWWqob9UkoNmuO1IjabCtMEEt1duyDnSKx2aXVoL9ZKiE64tItY/4hCIlOfVKuOeVG1AqyY3pvSI0Vj2CZmFBg2eqTQidhseFY7PhQmSWaDg+PlEPEa9I4TNKa1HnHjAb+u7d4ha2clmwIJKdZk4b9tPVJWs43G/7FW6yiWSw7I+yHMpDTLDvl4TqWWnAmSc2h9dIQO4Retr0WmA1ceqx5tsMUXO8kPnqsd7iMWXF17xMFmKTudwR/7FqZhKg6AUMkJKcgRDNkCOpY0ySOyaSEQzw6MkmwzjI2k92WZO1wOpn4fyFhxZ0dCNq9EbcX+SJoEjyrB+yKCS9gyDRNt8+uW27JNOEHCJwEiFCnUkkESiyB1+FuxL0gikaa7G6S0JNO9g+FJNkZmCKOQuh0XgkUaEiVIUh5WRS1Ai9L0kL/ombdiAHEDJbaMEVRMJSApAoiVYIK4WWNp7jWk1h3L0oIwpeZ80UVROFR5nxdeELgCXaZUH6fiDIExmvMHPUwe0HfHL+W5T/bA68N8W8PnSPuAp4lBMIjbr7Le3M2SwQ3WpZlW9dYxNplVUYlmhN4W85SkX4BBAtZXZAnlrhJEi1B6orgSpMsUZO7JAGnTDRFFgfoi6YEmpKU8O0gtdNirxqTstSUBTEpSGkUIEF0KNAoJWIwGOWJoOR0R5YEp2hFQyHdTMe0kBqjwIf6QpupnRH6tJiUgREtILh/wVJ4FXE9qAzJAd79I0oevAamHBokaUZnfod0xmDUydC07wD5L6oa7kFeJOzqUpYGgn8gQARRcQ8qEeE1XlQgo0b4t6kBi8qGGtJUido92gkEFKBUWU+At2goFAsoQkgLKpJiEULXSWomE8bn+Ha2sOpnO40w46WgycFISFCEsKaHdEpkNYups5lvC8g/6XmCLmrUngZ/CbaJAUpBISIRRX4bCLrQeZdl70R8JdA3vtKwCI3O9twhGcaV8QYIAYFgMaIg8PKol2q2l6Ogs7+f60R/WU+uAsRw0CFCwP1xVqY6lWU5KwqgU+jmsVwhrNg9SLS0nKrg6ODcKjlNZi9Cqp1BgDe0gipn1YgQFtS8OiYWFtuJsBxqnKbh4PaLckQIhLJUUPs0iQ+wIwaSVA5meVlRrGBZ5vVPQKHbVIyuuhxWwqjt98gJ+Vyhe7GVwHCd8Qfd42HHIX+QkPfbXBQpeQGlwDFuPvL9tdwJSItrdq2ew+eo/SQ754mF/pYXO1jKTu5NfbgBibOBhNkU8/W2X57uG3Dfp4bdPw//VHfi0UAgGnd0972Q6E2i4M5iCGk9yS6akgnPVuAGkWvg7z342HDdkQD+qL12x461h36gmbpuRk1NM7WI40Q0DyLPI61ofcWnGWRhxGn9HKX9j6uqu+VYvn+elOPok+QVlPgmUd472TtPijyobTnMtX3vBlu51Bjzr6x7hmIktUx/CeI6ntJ6mG3Klvzr73mx2DYw2f6Xh5pS52Y8vTyUgsKcQuvL6EAoJS8UwehagIqLPrcAZxXm6lo4Mr/LEBe5Xbr6sKp7zsHSzBL+yIW0TF0THYib8BszDk4Xiy/BA/n5uYNRJ2YPDtoxJ3owl5+fiUTsWG2oO5cHyOe6h2oxOxJ5TAkEFMdz/Jy/j64ThHXRqBWPW5/3a/HkCfbtDvK/UFfY6OntTe+AE7tk6XdL7HwCgt1Z7uwqopZYPLb1dewNX33pHOukezATpIs2ks7hQquvMIwcxDaGCJRjxI8kP8DIkPu8Hg7r54Vj4fM84ELmnnCKHI7K27bJ0bB8ymoW807oMUvprrIVSJrvZ4UNF95vpHWpr9TbLQXz2i3dLK77Fis2B8JOGPzCPHAelr1ejoakbdukUFRej8F5nbPHz6J8NZvLcgPeLdvFOCp2rs6OvrLPQzQcX95qRL1THkxLziGfZXoBOxmCqm2D3aCRouy2qbfFkDOG2Q3InJGDH7unQ9x6rFyFRWNjJ2eymyYai3ixVvyyFQd89Y2uoi5JavqyRmwCdkaaAz3jsf7+rmXuH9wHDcT5S+FRcAz3QbiUvOsbd5kJuZDuWaGEVvb2r9Ho0lKmICfMu565SYvYepfWJYnZsYn03LA5M4N8T22VcM3Ah93xPrZ8nmrbbv4n/Srt8c7EsbtRZQ51UUDiIEx/DN+qbBsFb9/Pg3BECij8Bdw/HHngcggo1yqBQURZ14wkBukVA2TJ4OC1g4Pv8dyHCWX42GqRPyNCJyMtaXCwLdMeoJ+is7xvlnDsiDa7XCdGHG8HxlNII0LBrtkFu1Av1GvsKdecqIMrtibV6EcvcA8GhID78na1d0Hjm1VkkLMfG1/W7brXXnvt5NVXX33eokVJFHvjXQsXn0/u0q9SlKv0We6HLlp8noFszd6ycjdseG5i9JJLRidGLx8dDAQqtcs7dONx8hoXmHabhx0H9O2LzDid6xhITNGjlmWz5ptVwF8XnkrpHAOGw6sv76pmPnTGGR/KVLsuh/88tE83DD0+B0JxsiARhDmOHgYIt56PJCL4u+MojzwF6xat30bItvWL1n06rG/Vw+4+JBiMZszzg1vZRsUfj+W09Qnv2z0U+7eA48zmBEkzKdKJNk1GC727HzgPk945KKSG7PtXNOhZjcqU3ZHD1Z1mon0hVyHsfPVcIibzXWFeE+4NSjdlkTcOGYaWulHU1E8ZJN5fkIg+RDcRVWu9oql0c7eB2PnEX4wYjYRRjdVwNUrx0A7SIxsWNdK5gHiOHECZphDPUzNasVyNimeFB3KSbUvmIKjufhXXDCxLy7I7aWcTPEAokQgfdf5I8DS6JvuiXNSpi47daDZKR31PAhGLHZPAcN3//E29ZkcddvrXZgsdPgrF/uXbT5TI4NyOYiUIrQe7xxZpQ9JQ3/xxSibGu8+LDkk9hVsEcTG8EisF3i8+ebe4ItkHL0+phfsOtdYvWEwXTASHG+Jnw7Mr9TGxUtXOC/YMyh8pnjY2OcWv9pOXcYVGvNuKI74GhXgHU+dLRhvgnZvH9rI7NmK5UGrWPcLUrDr1gt0gev8M+BrMcLvoBpQg5EOfZKaxr973E57m+J+4j+fqEUEGmbdmFRT5lmBoMkxehlkDA7NaJyshVQ2qpMj/5L4rrrjvJ9uCQxmJCgrkamFqnI1CCOmc7/op0o8UN4764TbuUmaDR1yxmBISIszil3NyURRn2emksv/PNlNLZe92Jf43GbetpmkGcpAmuNjtaJD6afz7RLmp2GmRHYbCBoFeEQ+GNKrLUdUISLLR5RY1eKYfjLjbbUYVWRAICFSTQ0Z0YVBWUP9FBIlbp5pRXaSgkm2t3xipqIypQk4qbwQRpMFY0ICbjLTtR2dyXQ5CGBt0L/w3Zk5gDvmgLESjcj4+nqr0OXIQ+UO3idKNoQeD4YBo2RM9KzdcIAuaoquqGdXCRjAw3nod1HgoLCtG1g6BLMZCYUlFWBanxwenRR9gtpOU2bFf7aeP0Hko1THuNIoy3RrPkuPdq2eGXcaCGH/2DiMKiMk1ka3gosi+jlJmX78RIeeLNqaXWvLu/WLioh/0zj8y/s+OQHqLn9kKGSWgDxnnS6RAWgeSYQh/RIP+wlyizovG1rW+fHZOXJWcH5Z1+F6quwu1OK2QK7d6yV2JHBx6GXK/V1dXmnxeWEgD86WAApK6eqjB58UFGJZ1ZQe/MCQPpxKhDL/Q0Lq7khQa8/PUidFB+q+foV2nCITnhRM+dcrPtLc9Gg0LV4VEMng+KjT50hL351BIJgt0NlnXGJ7ohxlDlfFM1i6SdfWRib4Zw4MslCRdo6Oz4l3rSgO1WjOVW+vxnNvp7+kapO1J9mWO9kc5PAMYPTr0T+7bA8nuAHzXHQp0JwN97vmBJApDGAwWkgG4GF9jNHwXvhPEZO52fD8t7K+TL9Bv0uXIRercXG4e29ed/h2Lzu35tCdgMf7h75eMss9zlEeY0YmwD+BMPwxG/3ld8NM72EdrYMengyeyq50nTotYhxjqLr34TkrvvHjFzuVA73y8d3avmSvlTNhzOWYImGYAM1we6TK9/IjVLL/ZFXG/iXkwJyzdufLiO8HM9PRkzJyJv///30b839KoUpUAAHicY2BkYGAA4mMm7CHx/DZfGbhZGEDgeqDNNxj9////ejZ55gYgl4OBCSQKADSHC+gAAAB4nGNgZGBgbvjfwBDDJv//PwMDmzwDUAQF+AMAe9YE+HicY2FgYGB+ycDAwjBIMCMqn03+/39s6lh5gTgUiA2Q2NpA7AdlI2G4ehAOQjIjlDK3AgCKngfWAAAAAAB2AOIBRgGGAdgCGgJwArgC3gMsA6QEFgSmBMoF/AZsBsAHLgdsB5IICgiQCMgJRAmuCkQKngr8Cy4LfAxiDNYNFg00DVINtA6SDwYPohEmEjATPhQUFOoVShWIFd4XwhkMGgIagBr6HBYc3B2YHoAepB8yH6wgQiCUIMgjpCQuJLwlRCW6Jf4mSia8JyonhifaKJIpOCluKdQqFHicY2BkYGDwZ/zJoMcAAkxAzAWEDAz/wXwGAC0sAo4AeJxlj01OwzAQhV/6B6QSqqhgh+QFYgEo/RGrblhUavdddN+mTpsqiSPHrdQDcB6OwAk4AtyAO/BIJ5s2lsffvHljTwDc4Acejt8t95E9XDI7cg0XuBeuU38QbpBfhJto41W4Rf1N2MczpsJtdGF5g9e4YvaEd2EPHXwI13CNT+E69S/hBvlbuIk7/Aq30PHqwj7mXle4jUcv9sdWL5xeqeVBxaHJIpM5v4KZXu+Sha3S6pxrW8QmU4OgX0lTnWlb3VPs10PnIhVZk6oJqzpJjMqt2erQBRvn8lGvF4kehCblWGP+tsYCjnEFhSUOjDFCGGSIyujoO1Vm9K+xQ8Jee1Y9zed0WxTU/3OFAQL0z1xTurLSeTpPgT1fG1J1dCtuy56UNJFezUkSskJe1rZUQuoBNmVXjhF6XNGJPyhnSP8ACVpuyAAAAHicbVJnc9swDPWzZct2pps03XsPt026994j/Qs0BUmMKVIhqdjOry8l25fkrvygA94D8AABtXpt+rq1/79t1NFAgCZaCNFGB10sYBFLWMYKVtHDMaxhHcexgRM4iVM4jTM4i3M4jwu4iEu4jCu4imu4jhu4iVu4jTu4iz7u4T4eYBNbeIhHeIwneIpneI4XeIlXeI03eIt3eI8P+IhP+Iwv+Ipv+I4f+Ilf+I0/2MbfGsbtmCgaMD5sS82ZE1otG12oiKfEh7GQsnvgzhipLR1iSrdliRmetgoVaxl1OcvIsDIm5DrLSLlVpZ2IxVShJIIRU0lQCVtyTqjEtncLsiXfLrkqKNUZdcpPv3LL4k2bMkOtsh6nFcF9Oa1cRCqJmGjQhDqKRnYaX1qBZTHVs0mYTSqwweywvrsbOBq70AmmdgTrOeONRFKkR6qKWpkjRV75G/upV8iFGjC9n3omKkSii9aIeMpcj0WRIWsHWg+3+lznkyAVEYW+ydRPtmRJxn3KcqknFAUDbW3TOhbHi7nRsc/zMzMZUCTchu/SZ6qDn1XJd4WKaNznzESrc1PyQjKnzYwbMDXsTU3aY7KokjeXZsjYGcpo3VdneS7npQ1xbRalZqrvOxlIytYNJcI6M+Vn4NrhnBnWM5SzSbnaOdJkxuhRyFlRxjUp0zvCb1JUyw1KkU6lVM6zfHTGwOnCNPx0La6L3PuJiF0z1Y5ki5QtDC3YIieTMTMk19gTeWhz4oKsPwkdtW2qc7+bxKfH/p7DTBvqF3k711aU9deOnnS1oVrtH4wKKTMAAAA=') format('woff'), + url('iconfont.ttf?t=1529551862142') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/ + url('iconfont.svg?t=1529551862142#iconfont') format('svg'); /* iOS 4.1- */ +} + +.iconfont { + font-family:"iconfont" !important; + font-size:16px; + font-style:normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.icon-feedback:before { content: "\e649"; } + +.icon-location:before { content: "\e651"; } + +.icon-roundcheckfill:before { content: "\e656"; } + +.icon-roundcheck:before { content: "\e657"; } + +.icon-roundclosefill:before { content: "\e658"; } + +.icon-roundclose:before { content: "\e659"; } + +.icon-search:before { content: "\e65c"; } + +.icon-unfold:before { content: "\e661"; } + +.icon-camerafill:before { content: "\e664"; } + +.icon-comment:before { content: "\e667"; } + +.icon-notificationfill:before { content: "\e66a"; } + +.icon-wang:before { content: "\e678"; } + +.icon-back:before { content: "\e679"; } + +.icon-settings:before { content: "\e68a"; } + +.icon-question:before { content: "\e691"; } + +.icon-wangfill:before { content: "\e69a"; } + +.icon-home:before { content: "\e6b8"; } + +.icon-home-fill:before { content: "\e6bb"; } + +.icon-fold:before { content: "\e6de"; } + +.icon-share:before { content: "\e6f3"; } + +.icon-notice:before { content: "\e70a"; } + +.icon-iconfontdengdai:before { content: "\e611"; } + +.icon-eye:before { content: "\e73d"; } + +.icon-news-fill:before { content: "\e740"; } + +.icon-news:before { content: "\e741"; } + +.icon-safe:before { content: "\e769"; } + +.icon-my:before { content: "\e78b"; } + +.icon-my-fill:before { content: "\e78c"; } + +.icon-ask:before { content: "\e64d"; } + +.icon-qq:before { content: "\e62d"; } + +.icon-text:before { content: "\e791"; } + +.icon-tianjia:before { content: "\e64e"; } + +.icon-triangledown-fill:before { content: "\e79b"; } + +.icon-triangleup-fill:before { content: "\e79c"; } + +.icon-zhengpinbaozhangduigou:before { content: "\e629"; } + +.icon-wechat:before { content: "\e62a"; } + +.icon-addressbook2-copy:before { content: "\e62b"; } + +.icon-hide:before { content: "\e7b2"; } + +.icon-nothing:before { content: "\e642"; } + +.icon-self-employed:before { content: "\e625"; } + +.icon-boss:before { content: "\e626"; } + +.icon-staff:before { content: "\e627"; } + +.icon-professional:before { content: "\e628"; } + +.icon-edit:before { content: "\e634"; } + +.icon-my-identification-fill:before { content: "\e603"; } + +.icon-index-card:before { content: "\e60b"; } + +.icon-index-calculator:before { content: "\e60c"; } + +.icon-index-bank:before { content: "\e60d"; } + +.icon-index-evaluation1:before { content: "\e60f"; } + +.icon-index-extreme:before { content: "\e610"; } + +.icon-my-application-recor:before { content: "\e615"; } + +.icon-loan-problem:before { content: "\e612"; } + +.icon-registration-problem:before { content: "\e614"; } + +.icon-application-problem:before { content: "\e616"; } + +.icon-repayment-problem:before { content: "\e617"; } + +.icon-arrow:before { content: "\e79d"; } + +.icon-caution:before { content: "\e619"; } + +.icon-emoji:before { content: "\e61a"; } + +.icon-waitting:before { content: "\e61b"; } + +.icon-loan:before { content: "\e61d"; } + +.icon-loan-fill:before { content: "\e61c"; } + +.icon-identification:before { content: "\e61e"; } + +.icon-tour:before { content: "\e61f"; } + +.icon-car:before { content: "\e620"; } + +.icon-coupon:before { content: "\e621"; } + +.icon-gift:before { content: "\e622"; } + +.icon-hotel:before { content: "\e623"; } + +.icon-ensure:before { content: "\e624"; } + +.icon-supermarket:before { content: "\e62c"; } + +.icon-vip:before { content: "\e62e"; } + +.icon-species:before { content: "\e62f"; } + +.icon-food:before { content: "\e630"; } + +.icon-shopping:before { content: "\e631"; } + +.icon-coffee:before { content: "\e632"; } + +.icon-more-up:before { content: "\e600"; } + +.icon-position:before { content: "\e633"; } + +.icon-roundcheckfill-copy:before { content: "\e7b3"; } + diff --git a/src/assets/iconfont/iconfont.eot b/src/assets/iconfont/iconfont.eot new file mode 100644 index 0000000..b9eb228 --- /dev/null +++ b/src/assets/iconfont/iconfont.eot Binary files differ diff --git a/src/assets/iconfont/iconfont.js b/src/assets/iconfont/iconfont.js new file mode 100644 index 0000000..92cc6e2 --- /dev/null +++ b/src/assets/iconfont/iconfont.js @@ -0,0 +1 @@ +(function(window){var svgSprite='<svg><symbol id="icon-feedback" viewBox="0 0 1024 1024"><path d="M800 960 224 960c-52.928 0-96-43.072-96-96L128 224c0-52.928 43.072-96 96-96l448 0c17.696 0 32 14.336 32 32s-14.304 32-32 32L224 192C206.368 192 192 206.368 192 224l0 640c0 17.664 14.368 32 32 32l576 0c17.664 0 32-14.336 32-32L832 352c0-17.664 14.304-32 32-32s32 14.336 32 32l0 512C896 916.928 852.928 960 800 960z" ></path><path d="M612 448c-8.192 0-16.384-3.136-22.624-9.376-12.512-12.512-12.512-32.736 0-45.248l318.016-318.016c12.512-12.512 32.736-12.512 45.248 0s12.512 32.736 0 45.248l-318.016 318.016C628.384 444.896 620.192 448 612 448z" ></path><path d="M480 448 288 448c-17.664 0-32-14.336-32-32s14.336-32 32-32l192 0c17.664 0 32 14.336 32 32S497.664 448 480 448z" ></path><path d="M672 640 288 640c-17.664 0-32-14.304-32-32s14.336-32 32-32l384 0c17.696 0 32 14.304 32 32S689.696 640 672 640z" ></path></symbol><symbol id="icon-location" viewBox="0 0 1024 1024"><path d="M512 608c-105.888 0-192-86.112-192-192s86.112-192 192-192 192 86.112 192 192S617.888 608 512 608zM512 288c-70.592 0-128 57.408-128 128s57.408 128 128 128c70.592 0 128-57.408 128-128S582.592 288 512 288z" ></path><path d="M512 960c-7.936 0-15.904-2.944-22.08-8.832-12.768-12.224-13.248-32.48-1.056-45.248C575.392 815.2 800 550.336 800 416c0-158.784-129.184-288-288-288-158.784 0-288 129.216-288 288 0 75.616 72.544 206.08 204.256 367.424 11.2 13.728 9.152 33.888-4.544 45.024-13.696 11.168-33.888 9.152-45.024-4.544C233.568 646.176 160 508.928 160 416 160 221.92 317.92 64 512 64s352 157.92 352 352c0 187.36-315.424 520.032-328.832 534.08C528.864 956.672 520.448 960 512 960z" ></path></symbol><symbol id="icon-roundcheckfill" viewBox="0 0 1024 1024"><path d="M512 65.984C266.08 65.984 65.984 266.08 65.984 512c0 245.952 200.064 446.016 446.016 446.016 245.952 0 446.016-200.064 446.016-446.016C958.016 266.08 757.952 65.984 512 65.984zM727.232 438.432l-256.224 259.008c-0.064 0.064-0.192 0.096-0.256 0.192-0.096 0.064-0.096 0.192-0.192 0.256-2.048 1.984-4.576 3.2-6.944 4.544-1.184 0.672-2.144 1.696-3.392 2.176-3.84 1.536-7.904 2.336-11.968 2.336-4.096 0-8.224-0.8-12.096-2.4-1.28-0.544-2.304-1.632-3.52-2.304-2.368-1.344-4.832-2.528-6.88-4.544-0.064-0.064-0.096-0.192-0.16-0.256-0.064-0.096-0.192-0.096-0.256-0.192l-126.016-129.504c-12.32-12.672-12.032-32.928 0.64-45.248 12.672-12.288 32.896-12.064 45.248 0.64l103.264 106.112 233.28-235.84c12.416-12.576 32.704-12.704 45.248-0.256C739.52 405.6 739.648 425.856 727.232 438.432z" ></path></symbol><symbol id="icon-roundcheck" viewBox="0 0 1024 1024"><path d="M512 960C264.96 960 64 759.04 64 512S264.96 64 512 64s448 200.96 448 448S759.04 960 512 960zM512 128.288C300.416 128.288 128.288 300.416 128.288 512c0 211.552 172.128 383.712 383.712 383.712 211.552 0 383.712-172.16 383.712-383.712C895.712 300.416 723.552 128.288 512 128.288z" ></path><path d="M726.976 393.184c-12.544-12.448-32.832-12.32-45.248 0.256l-233.28 235.84-103.264-106.112c-12.352-12.704-32.608-12.928-45.248-0.64-12.672 12.32-12.96 32.608-0.64 45.248l126.016 129.504c0.064 0.096 0.192 0.096 0.256 0.192 0.064 0.064 0.096 0.192 0.16 0.256 2.016 1.984 4.512 3.2 6.88 4.544 1.248 0.672 2.24 1.792 3.52 2.304 3.872 1.6 8 2.4 12.096 2.4 4.064 0 8.128-0.8 11.968-2.336 1.248-0.512 2.208-1.536 3.392-2.176 2.4-1.344 4.896-2.528 6.944-4.544 0.064-0.064 0.096-0.192 0.192-0.256 0.064-0.096 0.16-0.128 0.256-0.192l256.224-259.008C739.648 425.856 739.52 405.6 726.976 393.184z" ></path></symbol><symbol id="icon-roundclosefill" viewBox="0 0 1024 1024"><path d="M512 64C264.992 64 64 264.96 64 512s200.96 448 448 448c247.008 0 448-200.96 448-448S759.04 64 512 64zM694.752 649.984c12.48 12.544 12.448 32.768-0.064 45.248-6.24 6.208-14.4 9.344-22.592 9.344-8.224 0-16.416-3.136-22.656-9.408l-137.6-138.016-138.048 136.576c-6.24 6.144-14.368 9.248-22.496 9.248-8.256 0-16.48-3.168-22.752-9.504-12.416-12.576-12.32-32.8 0.256-45.248l137.888-136.384-137.376-137.824c-12.48-12.512-12.448-32.768 0.064-45.248 12.512-12.512 32.736-12.448 45.248 0.064l137.568 137.984 138.048-136.576c12.544-12.448 32.832-12.32 45.248 0.256 12.448 12.576 12.32 32.832-0.256 45.248l-137.888 136.384L694.752 649.984z" ></path></symbol><symbol id="icon-roundclose" viewBox="0 0 1024 1024"><path d="M512 960C264.96 960 64 759.04 64 512S264.96 64 512 64s448 200.96 448 448S759.04 960 512 960zM512 128.288C300.416 128.288 128.288 300.416 128.288 512c0 211.552 172.128 383.712 383.712 383.712 211.552 0 383.712-172.16 383.712-383.712C895.712 300.416 723.552 128.288 512 128.288z" ></path><path d="M557.056 513.376l138.368-136.864c12.576-12.416 12.672-32.672 0.256-45.248-12.416-12.576-32.704-12.672-45.248-0.256l-138.56 137.024-136.448-136.864c-12.512-12.512-32.736-12.576-45.248-0.064-12.512 12.48-12.544 32.736-0.064 45.248l136.256 136.672-137.376 135.904c-12.576 12.448-12.672 32.672-0.256 45.248 6.272 6.336 14.496 9.504 22.752 9.504 8.128 0 16.256-3.104 22.496-9.248l137.568-136.064 138.688 139.136c6.24 6.272 14.432 9.408 22.656 9.408 8.192 0 16.352-3.136 22.592-9.344 12.512-12.48 12.544-32.704 0.064-45.248L557.056 513.376z" ></path></symbol><symbol id="icon-search" viewBox="0 0 1024 1024"><path d="M953.504 908.256l-152.608-163.296c61.856-74.496 95.872-167.36 95.872-265.12 0-229.344-186.624-415.968-416.032-415.968-229.344 0-415.968 186.592-415.968 415.968s186.624 415.968 416 415.968c60.096-0.032 118.048-12.576 172.224-37.248 16.096-7.328 23.2-26.304 15.872-42.368-7.328-16.128-26.4-23.264-42.368-15.872-45.856 20.864-94.88 31.456-145.76 31.488-194.08 0-351.968-157.888-351.968-351.968 0-194.048 157.888-351.968 351.968-351.968 194.112 0 352.032 157.888 352.032 351.968 0 91.36-34.848 177.92-98.08 243.744-12.256 12.736-11.84 32.992 0.864 45.248 0.96 0.928 2.208 1.28 3.296 2.08 0.864 1.28 1.312 2.752 2.4 3.904l165.504 177.088c6.272 6.752 14.816 10.144 23.36 10.144 7.84 0 15.68-2.848 21.856-8.64C964.864 941.408 965.568 921.152 953.504 908.256z" ></path></symbol><symbol id="icon-unfold" viewBox="0 0 1024 1024"><path d="M890.336 330.912c-12.576-12.416-32.8-12.352-45.248 0.192L517.248 661.952 184.832 332.512c-12.576-12.448-32.8-12.352-45.28 0.192-12.448 12.576-12.352 32.832 0.192 45.28l353.312 350.112c0.544 0.544 1.248 0.672 1.792 1.184 0.128 0.128 0.16 0.288 0.288 0.416 6.24 6.176 14.4 9.28 22.528 9.28 8.224 0 16.48-3.168 22.72-9.472l350.112-353.312C902.976 363.616 902.88 343.36 890.336 330.912z" ></path></symbol><symbol id="icon-camerafill" viewBox="0 0 1024 1024"><path d="M864 192 512 192c0-52.928-43.072-96-96-96l-64 0C299.072 96 256 139.072 256 192L160 192C107.072 192 64 235.072 64 288l0 512c0 52.928 43.072 96 96 96l704 0c52.928 0 96-43.072 96-96L960 288C960 235.072 916.928 192 864 192zM512 736c-105.888 0-192-86.112-192-192s86.112-192 192-192 192 86.112 192 192S617.888 736 512 736zM816 416c-26.496 0-48-21.504-48-48 0-26.496 21.504-48 48-48 26.496 0 48 21.504 48 48C864 394.496 842.496 416 816 416z" ></path></symbol><symbol id="icon-comment" viewBox="0 0 1024 1024"><path d="M512 928c-8.192 0-16.384-3.136-22.624-9.376l-96-96c-12.512-12.512-12.512-32.736 0-45.248s32.736-12.512 45.248 0L512 850.752l73.376-73.376C591.36 771.36 599.488 768 608 768l224 0c17.664 0 32-14.336 32-32L864 224c0-17.632-14.336-32-32-32L192 192C174.368 192 160 206.368 160 224l0 512c0 17.664 14.368 32 32 32l96 0c17.664 0 32 14.304 32 32s-14.336 32-32 32L192 832c-52.928 0-96-43.072-96-96L96 224c0-52.928 43.072-96 96-96l640 0c52.928 0 96 43.072 96 96l0 512c0 52.928-43.072 96-96 96l-210.752 0-86.624 86.624C528.384 924.864 520.192 928 512 928z" ></path><path d="M336 512C309.536 512 288 490.464 288 464S309.536 416 336 416s48 21.536 48 48S362.464 512 336 512z" ></path><path d="M528 512c-26.464 0-48-21.536-48-48s21.536-48 48-48 48 21.536 48 48S554.464 512 528 512z" ></path><path d="M720 512c-26.464 0-48-21.536-48-48s21.536-48 48-48 48 21.536 48 48S746.464 512 720 512z" ></path></symbol><symbol id="icon-notificationfill" viewBox="0 0 1024 1024"><path d="M526.432 924.064c-20.96 0-44.16-12.576-68.96-37.344L274.752 704 192 704c-52.928 0-96-43.072-96-96l0-192c0-52.928 43.072-96 96-96l82.752 0 182.624-182.624c24.576-24.576 47.744-37.024 68.864-37.024C549.184 100.352 576 116 576 160l0 704C576 908.352 549.28 924.064 526.432 924.064z" ></path><path d="M687.584 730.368c-6.464 0-12.992-1.952-18.656-6.016-14.336-10.304-17.632-30.304-7.328-44.672l12.672-17.344C707.392 617.44 736 578.624 736 512c0-69.024-25.344-102.528-57.44-144.928-5.664-7.456-11.328-15.008-16.928-22.784-10.304-14.336-7.04-34.336 7.328-44.672 14.368-10.368 34.336-7.04 44.672 7.328 5.248 7.328 10.656 14.464 15.968 21.504C764.224 374.208 800 421.504 800 512c0 87.648-39.392 141.12-74.144 188.32l-12.224 16.736C707.36 725.76 697.568 730.368 687.584 730.368z" ></path><path d="M796.448 839.008c-7.488 0-15.04-2.624-21.088-7.936-13.28-11.648-14.624-31.872-2.976-45.152C836.608 712.672 896 628.864 896 512c0-116.864-59.392-200.704-123.616-273.888-11.648-13.312-10.304-33.504 2.976-45.184 13.216-11.648 33.44-10.336 45.152 2.944C889.472 274.56 960 373.6 960 512s-70.528 237.472-139.488 316.096C814.144 835.328 805.312 839.008 796.448 839.008z" ></path></symbol><symbol id="icon-wang" viewBox="0 0 1024 1024"><path d="M528 528c-26.528 0-48-21.472-48-48l0-64c0-26.528 21.472-48 48-48 26.496 0 48 21.472 48 48l0 64C576 506.528 554.496 528 528 528z" ></path><path d="M719.008 528c-26.496 0-48-21.472-48-48l0-64c0-26.528 21.504-48 48-48s48 21.472 48 48l0 64C767.008 506.528 745.504 528 719.008 528z" ></path><path d="M512 67.52c-81.152 0-159.488 21.696-228.48 62.72C244.96 87.968 189.056 64 125.344 64 113.696 64 103.008 70.368 97.376 80.544S92.096 103.232 98.272 113.088C98.624 113.6 131.808 167.392 140.16 249.92c1.664 16.48 15.584 28.768 31.808 28.768 1.088 0 2.144-0.032 3.264-0.16 17.568-1.792 30.4-17.472 28.608-35.072C199.488 200.48 189.44 164.16 179.36 136.672 203.84 144.864 230.336 160.512 249.504 190.08 249.6 190.24 249.76 190.304 249.856 190.464 249.952 190.592 249.952 190.72 250.016 190.848 251.168 192.512 252.8 193.504 254.176 194.88c1.536 1.536 2.848 3.328 4.64 4.48C260.64 200.544 262.72 201.056 264.704 201.856c1.824 0.704 3.488 1.728 5.376 2.112C272.16 204.384 274.24 204.096 276.32 204.096c2.016 0 4 0.32 6.016-0.064C284.32 203.648 286.08 202.592 287.968 201.824 289.92 201.056 291.936 200.704 293.76 199.552c0.128-0.096 0.192-0.256 0.352-0.352C294.24 199.136 294.4 199.104 294.528 199.04 358.624 154.88 433.824 131.52 512 131.52c211.584 0 383.712 172.128 383.712 383.744S723.584 899.008 512 899.008 128.256 726.848 128.256 515.264c0-54.176 11.04-106.528 32.864-155.616 7.168-16.128-0.096-35.04-16.256-42.24-16.128-7.168-35.04 0.096-42.24 16.256-25.44 57.312-38.368 118.4-38.368 181.568 0 246.88 200.864 447.744 447.744 447.744s447.712-200.864 447.712-447.744S758.88 67.52 512 67.52z" ></path></symbol><symbol id="icon-back" viewBox="0 0 1024 1024"><path d="M671.968 912c-12.288 0-24.576-4.672-33.952-14.048L286.048 545.984c-18.752-18.72-18.752-49.12 0-67.872l351.968-352c18.752-18.752 49.12-18.752 67.872 0 18.752 18.72 18.752 49.12 0 67.872l-318.016 318.048 318.016 318.016c18.752 18.752 18.752 49.12 0 67.872C696.544 907.328 684.256 912 671.968 912z" ></path></symbol><symbol id="icon-settings" viewBox="0 0 1024 1024"><path d="M512 608c-52.928 0-96-43.072-96-96s43.072-96 96-96 96 43.072 96 96S564.928 608 512 608zM512 480c-17.632 0-32 14.368-32 32s14.368 32 32 32 32-14.368 32-32S529.632 480 512 480z" ></path><path d="M631.04 960c-10.016 0-19.712-4.736-25.856-13.12l-73.408-100.48c-13.664 0.832-25.92 0.864-39.584 0l-73.376 100.48c-7.904 10.816-21.728 15.616-34.656 11.872-34.592-9.888-67.488-23.456-97.76-40.32-11.712-6.528-18.112-19.648-16.032-32.896l19.2-123.264c-9.824-8.704-19.136-18.016-27.84-27.808l-123.264 19.2c-13.056 1.984-26.336-4.352-32.896-16.064-16.896-30.368-30.464-63.296-40.32-97.824-3.68-12.864 1.056-26.72 11.904-34.624l100.448-73.376C177.152 524.96 176.928 518.4 176.928 512s0.224-12.96 0.672-19.776L77.12 418.816c-10.816-7.936-15.584-21.728-11.904-34.656 9.856-34.496 23.424-67.392 40.32-97.792 6.56-11.712 19.712-18.048 32.896-16.064l123.264 19.2c8.736-9.824 18.016-19.104 27.84-27.84l-19.2-123.264C268.288 125.184 274.72 112.064 286.432 105.536c30.4-16.896 63.296-30.464 97.76-40.32 12.928-3.648 26.72 1.056 34.656 11.904l73.376 100.448c13.568-0.896 25.824-0.896 39.584 0l73.408-100.48c7.904-10.848 21.664-15.52 34.656-11.904 34.464 9.856 67.328 23.424 97.76 40.32 11.712 6.528 18.112 19.648 16.064 32.896L734.432 261.76c9.824 8.736 19.104 18.016 27.808 27.776l123.328-19.2c13.152-2.016 26.336 4.384 32.864 16.032 16.896 30.4 30.496 63.296 40.352 97.824 3.648 12.896-1.088 26.688-11.904 34.624l-100.48 73.408c0.448 6.816 0.672 13.376 0.672 19.776s-0.224 12.96-0.672 19.776l100.48 73.376c10.816 7.904 15.552 21.728 11.904 34.624-9.856 34.496-23.424 67.424-40.352 97.824-6.528 11.712-19.488 18.048-32.896 16.064l-123.296-19.2c-8.672 9.76-17.984 19.072-27.808 27.776l19.232 123.296c2.048 13.248-4.352 26.368-16.064 32.896-30.24 16.832-63.136 30.4-97.76 40.32C636.928 959.584 633.984 960 631.04 960zM337.152 872.672c13.984 6.752 28.544 12.704 43.552 17.92l70.528-96.576c6.784-9.28 17.984-14.272 29.472-12.896 20.576 2.336 42.08 2.336 62.624 0 11.84-1.376 22.72 3.616 29.472 12.896l70.528 96.576c15.04-5.184 29.6-11.168 43.552-17.92l-18.432-118.368c-1.76-11.36 2.72-22.848 11.712-30.016 16.384-12.992 31.264-27.872 44.16-44.128 7.168-8.992 18.4-13.504 30.016-11.744l118.368 18.432c6.752-14.016 12.736-28.576 17.92-43.552l-96.576-70.528c-9.28-6.784-14.208-18.016-12.896-29.472 1.152-10.272 1.952-20.704 1.952-31.296s-0.768-21.024-1.952-31.296c-1.312-11.424 3.616-22.688 12.896-29.472l96.576-70.56c-5.152-15.008-11.168-29.568-17.92-43.552l-118.4 18.432c-11.328 1.696-22.816-2.688-29.984-11.744-12.896-16.256-27.776-31.104-44.16-44.128-8.992-7.168-13.472-18.592-11.712-29.984l18.432-118.4c-14.016-6.752-28.576-12.736-43.52-17.92l-70.56 96.576c-6.784 9.28-17.696 14.368-29.472 12.928-20.544-2.368-42.016-2.4-62.56 0-11.52 1.344-22.752-3.616-29.536-12.896l-70.528-96.576c-14.976 5.152-29.536 11.136-43.552 17.92l18.432 118.368c1.76 11.392-2.72 22.848-11.744 30.016-16.32 12.928-31.2 27.808-44.128 44.128-7.168 9.024-18.56 13.472-30.016 11.744l-118.368-18.432c-6.752 14.016-12.736 28.576-17.92 43.552l96.576 70.56c9.312 6.784 14.24 18.08 12.896 29.536C241.696 491.008 240.928 501.408 240.928 512s0.768 20.992 1.952 31.264c1.344 11.456-3.616 22.688-12.896 29.504l-96.576 70.528c5.184 15.008 11.168 29.568 17.92 43.552l118.368-18.432c11.392-1.76 22.848 2.752 30.016 11.744 12.896 16.32 27.744 31.168 44.128 44.128 9.024 7.168 13.504 18.624 11.744 30.016L337.152 872.672z" ></path></symbol><symbol id="icon-question" viewBox="0 0 1024 1024"><path d="M512 784.352m-48 0a1.5 1.5 0 1 0 96 0 1.5 1.5 0 1 0-96 0Z" ></path><path d="M512 960C264.96 960 64 759.04 64 512S264.96 64 512 64s448 200.96 448 448S759.04 960 512 960zM512 128.288C300.416 128.288 128.288 300.416 128.288 512c0 211.552 172.128 383.712 383.712 383.712 211.552 0 383.712-172.16 383.712-383.712C895.712 300.416 723.552 128.288 512 128.288z" ></path><path d="M512 673.696c-17.664 0-32-14.336-32-32l0-54.112c0-52.352 40-92.352 75.328-127.648C581.216 434.016 608 407.264 608 385.92c0-53.344-43.072-96.736-96-96.736-53.824 0-96 41.536-96 94.56 0 17.664-14.336 32-32 32s-32-14.336-32-32c0-87.424 71.776-158.56 160-158.56s160 72.096 160 160.736c0 47.904-36.32 84.192-71.424 119.296C572.736 532.992 544 561.728 544 587.552l0 54.112C544 659.328 529.664 673.696 512 673.696z" ></path></symbol><symbol id="icon-wangfill" viewBox="0 0 1024 1024"><path d="M512 67.488c-81.056 0-159.36 21.536-228.288 62.496C245.152 87.68 189.024 64 125.344 64 113.664 64 102.912 70.336 97.28 80.608c-5.632 10.24-5.216 22.72 1.056 32.576 0.32 0.512 31.136 49.664 40.864 128.192-8.128 27.296-26.72 65.12-37.44 94.336-22.912 62.464-37.536 116.416-37.536 179.52 0 246.88 200.864 447.776 447.744 447.776s447.712-200.864 447.712-447.776C959.712 268.352 758.88 67.488 512 67.488zM576 480c0 26.496-21.504 48-48 48S480 506.496 480 480l0-64c0-26.528 21.504-48 48-48S576 389.472 576 416L576 480zM767.008 480c0 26.496-21.504 48-48 48s-48-21.504-48-48l0-64c0-26.528 21.504-48 48-48s48 21.472 48 48L767.008 480z" ></path></symbol><symbol id="icon-home" viewBox="0 0 1024 1024"><path d="M96 480c-9.6 0-19.2-3.2-25.6-12.8-12.8-12.8-9.6-35.2 3.2-44.8l377.6-310.4c35.2-25.6 86.4-25.6 118.4 0l377.6 307.2c12.8 9.6 16 32 3.2 44.8-12.8 12.8-32 16-44.8 3.2L531.2 166.4c-9.6-6.4-28.8-6.4-38.4 0L115.2 473.6c-6.4 6.4-12.8 6.4-19.2 6.4zM816 928H608c-19.2 0-32-12.8-32-32v-150.4c0-22.4-38.4-44.8-67.2-44.8-28.8 0-64 19.2-64 44.8V896c0 19.2-12.8 32-32 32H211.2C163.2 928 128 892.8 128 848V544c0-19.2 12.8-32 32-32s32 12.8 32 32v304c0 9.6 6.4 16 19.2 16H384v-118.4c0-64 67.2-108.8 128-108.8s131.2 44.8 131.2 108.8V864h176c9.6 0 16 0 16-19.2V544c0-19.2 12.8-32 32-32s32 12.8 32 32v304C896 896 864 928 816 928z" fill="#666666" ></path></symbol><symbol id="icon-home-fill" viewBox="0 0 1024 1024"><path d="M947.2 422.4L572.8 115.2c-32-25.6-86.4-25.6-118.4 0L76.8 425.6c-12.8 6.4-16 22.4-9.6 35.2 3.2 12.8 16 19.2 28.8 19.2h32v364.8C128 892.8 163.2 928 211.2 928H416c19.2 0 32-12.8 32-32v-147.2c0-22.4 35.2-44.8 64-44.8 28.8 0 67.2 22.4 67.2 44.8V896c0 19.2 12.8 32 32 32h208c48 0 80-32 80-83.2V480h32c12.8 0 25.6-9.6 28.8-22.4 3.2-12.8 0-25.6-12.8-35.2z" fill="#666666" ></path></symbol><symbol id="icon-fold" viewBox="0 0 1024 1024"><path d="M887.328 617.152 533.952 267.008c-0.512-0.512-1.216-0.672-1.76-1.152-0.128-0.128-0.16-0.32-0.288-0.448-12.576-12.416-32.832-12.352-45.28 0.192L136.512 618.944c-12.448 12.576-12.352 32.8 0.192 45.248 6.24 6.176 14.4 9.28 22.528 9.28 8.224 0 16.48-3.168 22.72-9.472l327.84-330.816 332.48 329.408c6.24 6.176 14.368 9.28 22.528 9.28 8.256 0 16.48-3.168 22.72-9.472C899.968 649.856 899.872 629.6 887.328 617.152z" ></path></symbol><symbol id="icon-share" viewBox="0 0 1024 1024"><path d="M768.704 703.616c-35.648 0-67.904 14.72-91.136 38.304l-309.152-171.712c9.056-17.568 14.688-37.184 14.688-58.272 0-12.576-2.368-24.48-5.76-35.936l304.608-189.152c22.688 20.416 52.384 33.184 85.216 33.184 70.592 0 128-57.408 128-128s-57.408-128-128-128-128 57.408-128 128c0 14.56 2.976 28.352 7.456 41.408l-301.824 187.392c-23.136-22.784-54.784-36.928-89.728-36.928-70.592 0-128 57.408-128 128 0 70.592 57.408 128 128 128 25.664 0 49.504-7.744 69.568-20.8l321.216 178.4c-3.04 10.944-5.184 22.208-5.184 34.08 0 70.592 57.408 128 128 128s128-57.408 128-128S839.328 703.616 768.704 703.616zM767.2 128.032c35.296 0 64 28.704 64 64s-28.704 64-64 64-64-28.704-64-64S731.904 128.032 767.2 128.032zM191.136 511.936c0-35.296 28.704-64 64-64s64 28.704 64 64c0 35.296-28.704 64-64 64S191.136 547.232 191.136 511.936zM768.704 895.616c-35.296 0-64-28.704-64-64s28.704-64 64-64 64 28.704 64 64S804 895.616 768.704 895.616z" ></path></symbol><symbol id="icon-notice" viewBox="0 0 1024 1024"><path d="M889.92 749.728c-1.184-1.632-119.232-166.144-119.232-287.392 0-168.448-76.16-254.784-162.688-287.008L608 160c0-52.928-43.072-96-96-96s-96 43.072-96 96l0 16.576c-10.784 7.904-16.096 21.792-11.808 35.232 5.376 16.832 23.424 26.048 40.224 20.736C462.176 226.88 481.344 224 501.312 224l21.376 0c115.232 0 184 89.088 184 238.304 0 108.032 72.896 235.392 110.176 293.504C759.488 781.984 633.824 832 512 832c-121.504 0-247.424-50.368-304.832-76.64 37.312-57.984 110.144-185.024 110.144-293.056 0-62.432 11.616-114.208 34.528-153.92 8.832-15.328 3.584-34.88-11.712-43.712-15.392-8.864-34.88-3.584-43.712 11.712-28.608 49.536-43.104 112.096-43.104 185.92 0 121.216-118.016 285.248-119.2 286.88-5.408 7.456-7.36 16.928-5.312 25.952 2.048 8.96 7.872 16.672 16 21.024 5.664 3.072 107.392 57.28 233.536 84.512C399.744 947.072 452.16 992 512 992s112.256-44.928 133.632-111.296c126.112-27.104 227.84-80.992 233.504-84.032 8.128-4.352 14.016-12.032 16.064-21.024S895.328 757.216 889.92 749.728zM501.312 160C494.048 160 487.104 160.992 480 161.568L480 160c0-17.632 14.368-32 32-32s32 14.368 32 32l0 0.928C536.832 160.32 529.728 160 522.688 160L501.312 160zM512 928c-22.336 0-43.136-13.408-57.984-35.296C473.216 894.72 492.608 896 512 896s38.784-1.28 57.984-3.296C555.136 914.624 534.304 928 512 928z" ></path></symbol><symbol id="icon-iconfontdengdai" viewBox="0 0 1024 1024"><path d="M511.674077 63.444984c-247.539816 0-448.208115 200.650903-448.208115 448.208115 0 247.521396 200.668299 448.208115 448.208115 448.208115s448.208115-200.686718 448.208115-448.208115C959.882192 264.095887 759.213893 63.444984 511.674077 63.444984zM672.568511 741.846852c-14.570857 14.700817-38.498826 14.700817-53.06252 0L487.018537 608.641037c-9.893324-9.956769-8.998955-23.817452-8.998955-44.900629 0-21.120017-4.779863-265.212314-4.779863-265.212314 0-20.935822 16.752546-37.897122 37.414121-37.897122 20.662599 0 37.414121 16.9613 37.414121 37.897122l0 265.212314c0 1.093914 124.792191 124.818797 124.792191 124.818797C687.422823 703.257975 687.131181 727.112266 672.568511 741.846852z" fill="#707070" ></path></symbol><symbol id="icon-eye" viewBox="0 0 1024 1024"><path d="M992 512.096c0-5.76-0.992-10.592-1.28-11.136-0.192-2.88-1.152-8.064-2.08-10.816-0.256-0.672-0.544-1.376-0.832-2.08-0.48-1.568-1.024-3.104-1.6-4.32C897.664 290.112 707.104 160 512 160 316.928 160 126.368 290.016 38.24 482.592c-1.056 2.112-1.792 4.096-2.272 5.856-0.224 0.544-0.448 1.088-0.64 1.6-1.76 5.088-1.792 8.64-1.632 7.744-0.832 3.744-1.568 11.168-1.568 11.168-0.224 2.272-0.224 4.032 0.032 6.304 0 0 0.736 6.464 1.088 7.808 0.128 1.824 0.576 4.512 1.12 6.976l-0.032 0c0.448 2.08 1.12 4.096 1.984 6.08 0.48 1.536 0.992 2.976 1.472 4.032C126.432 733.856 316.992 864 512 864c195.136 0 385.696-130.048 473.216-321.696 1.376-2.496 2.24-4.832 2.848-6.912 0.256-0.608 0.48-1.184 0.672-1.728 1.536-4.48 1.856-8.32 1.728-8.32 0 0 0 0-0.032 0.032C991.04 522.272 992 517.632 992 512.096zM927.328 514.464c-0.032 0.16-0.096 0.32-0.128 0.48-0.128 0.416-0.288 0.864-0.416 1.376C848.032 686.08 681.696 800 512 800c-169.28 0-335.328-113.568-414.88-283.968-0.16-0.576-0.32-1.152-0.512-1.696-0.064-0.544-0.16-1.024-0.192-1.344-0.064-0.352-0.128-0.8-0.192-1.248l0.032-0.416c0.16-0.704 0.288-1.44 0.384-2.208 0.128-0.416 0.256-0.832 0.384-1.28C175.84 337.984 342.304 224 512 224c169.76 0 336.192 114.08 414.752 283.68 0.096 0.32 0.16 0.608 0.256 0.832 0.064 0.288 0.16 0.576 0.256 0.864 0.16 1.28 0.32 2.528 0.48 3.168C927.552 513.184 927.456 513.824 927.328 514.464z" ></path><path d="M512 352c-88.224 0-160 71.776-160 160s71.776 160 160 160 160-71.776 160-160S600.224 352 512 352zM512 608c-52.928 0-96-43.072-96-96s43.072-96 96-96 96 43.072 96 96S564.928 608 512 608z" ></path></symbol><symbol id="icon-news-fill" viewBox="0 0 1024 1024"><path d="M704 732.8c51.2 0 96-41.6 96-96V224c0-51.2-41.6-96-96-96H156.8c-51.2 0-96 41.6-96 96v412.8c0 51.2 41.6 96 96 96H192v160c0 12.8 9.6 25.6 22.4 32H224c9.6 0 19.2-3.2 25.6-12.8l131.2-179.2H704z" fill="#666666" ></path><path d="M864 252.8c-19.2 0-32 12.8-32 32s16 32 32 32 32 12.8 32 32v348.8c0 19.2-16 25.6-32 25.6h-32c-19.2 0-32 12.8-32 32v3.2c0 3.2-3.2 6.4-3.2 9.6v60.8l-73.6-57.6c-3.2-3.2-9.6-3.2-16-3.2H544c-19.2 0-32 12.8-32 32s12.8 32 32 32h153.6l115.2 89.6c6.4 3.2 12.8 6.4 19.2 6.4 3.2 0 9.6 0 12.8-3.2 9.6-6.4 19.2-16 19.2-28.8v-108.8c54.4 0 96-38.4 96-89.6V348.8c0-51.2-44.8-96-96-96z" fill="#666666" ></path></symbol><symbol id="icon-news" viewBox="0 0 1024 1024"><path d="M704 732.8c51.2 0 96-41.6 96-96V224c0-51.2-41.6-96-96-96H156.8c-51.2 0-96 41.6-96 96v412.8c0 51.2 41.6 96 96 96H192v160c0 12.8 9.6 25.6 22.4 32H224c9.6 0 19.2-3.2 25.6-12.8l131.2-179.2H704zM233.6 672c-3.2-3.2-9.6-3.2-12.8-3.2h-64c-16 0-32-12.8-32-32V224c0-16 12.8-32 32-32H704c16 0 32 12.8 32 32v412.8c0 16-12.8 32-32 32H364.8 355.2c-3.2 3.2-3.2 3.2-6.4 3.2s-3.2 3.2-6.4 3.2l-3.2 3.2s-3.2 0-3.2 3.2L256 796.8V704c0-16-9.6-25.6-22.4-32z" fill="#666666" ></path><path d="M864 252.8c-19.2 0-32 12.8-32 32s16 32 32 32 32 12.8 32 32v348.8c0 19.2-16 25.6-32 25.6h-32c-19.2 0-32 12.8-32 32v3.2c0 3.2-3.2 6.4-3.2 9.6v60.8l-73.6-57.6c-3.2-3.2-9.6-3.2-16-3.2H544c-19.2 0-32 12.8-32 32s12.8 32 32 32h153.6l115.2 89.6c6.4 3.2 12.8 6.4 19.2 6.4 3.2 0 9.6 0 12.8-3.2 9.6-6.4 19.2-16 19.2-28.8v-108.8c54.4 0 96-38.4 96-89.6V348.8c0-51.2-44.8-96-96-96z" fill="#666666" ></path></symbol><symbol id="icon-safe" viewBox="0 0 1024 1024"><path d="M712.416 357.056l-233.344 235.808-103.264-106.112c-12.384-12.704-32.608-12.928-45.248-0.64-12.672 12.32-12.96 32.608-0.64 45.248l126.016 129.504c0.064 0.096 0.192 0.096 0.256 0.192 0.064 0.064 0.096 0.192 0.16 0.256 2.08 2.048 4.608 3.264 7.008 4.64 1.184 0.672 2.176 1.728 3.392 2.208 3.872 1.6 7.968 2.4 12.096 2.4 4.064 0 8.128-0.8 11.968-2.336 1.248-0.512 2.208-1.536 3.392-2.176 2.4-1.344 4.896-2.528 6.944-4.544 0.064-0.064 0.096-0.192 0.192-0.256 0.064-0.096 0.16-0.128 0.256-0.192l256.288-259.008c12.448-12.576 12.32-32.8-0.256-45.248C745.12 344.384 724.8 344.48 712.416 357.056z" ></path><path d="M517.44 64.48c-3.552-0.608-7.168-0.64-10.72-0.032-95.712 16.064-408 77.728-408 196.864 0 385.792 312.032 701.344 413.312 701.344 99.52 0 418.688-323.488 418.688-701.344C930.688 147.936 641.696 85.888 517.44 64.48zM512 898.624C453.216 892.992 162.688 617.44 162.688 261.312c0-38.464 165.792-101.344 349.248-132.832 186.336 32.768 354.752 95.68 354.752 132.832C866.688 616.736 571.68 892.8 512 898.624z" ></path></symbol><symbol id="icon-my" viewBox="0 0 1024 1024"><path d="M800 384c0-160-128-288-288-288s-288 128-288 288c0 108.8 57.6 201.6 147.2 249.6-121.6 48-214.4 153.6-240 288-3.2 16 6.4 35.2 25.6 38.4h6.4c16 0 28.8-9.6 32-25.6 28.8-150.4 160-259.2 313.6-262.4h6.4c156.8 0 284.8-128 284.8-288zM288 384c0-124.8 99.2-224 224-224s224 99.2 224 224c0 121.6-99.2 220.8-220.8 224H505.6C384 604.8 288 505.6 288 384zM723.2 675.2c-16-9.6-35.2-6.4-44.8 9.6-9.6 16-6.4 35.2 9.6 44.8 73.6 51.2 124.8 121.6 140.8 204.8 3.2 16 16 25.6 32 25.6h6.4c16-3.2 28.8-19.2 25.6-38.4-19.2-99.2-80-185.6-169.6-246.4z" fill="#666666" ></path></symbol><symbol id="icon-my-fill" viewBox="0 0 1024 1024"><path d="M649.6 633.6c86.4-48 147.2-144 147.2-249.6 0-160-128-288-288-288s-288 128-288 288c0 108.8 57.6 201.6 147.2 249.6-121.6 48-214.4 153.6-240 288-3.2 9.6 0 19.2 6.4 25.6 3.2 9.6 12.8 12.8 22.4 12.8h704c9.6 0 19.2-3.2 25.6-12.8 6.4-6.4 9.6-16 6.4-25.6-25.6-134.4-121.6-240-243.2-288z" fill="#666666" ></path></symbol><symbol id="icon-ask" viewBox="0 0 1024 1024"><path d="M512 60.08845803c-249.57568133 0-451.91154197 202.33586063-451.91154197 451.91154197s202.33586063 451.91154197 451.91154197 451.91154197c249.57568133 0 451.91154197-202.33586063 451.91154197-451.91154197S761.57568133 60.08845803 512 60.08845803zM301.04769262 789.89547047L244.82989691 789.89547047 244.82989691 328.52391403l56.21779571 0L301.04769262 789.89547047zM278.93415425 242.05817266l33.56196364-30.00692592c21.57124464 20.42640159 50.01154363 49.04746604 85.32089961 85.92344763L359.55517314 331.4764024C325.81244406 292.25048045 298.93877198 262.42431867 278.93415425 242.05817266zM432.28280444 632.75076416l0 33.56196363L378.59571324 666.31272779 378.59571324 420.95488775l255.11912983-2e-8 0 211.85613071L432.28280444 632.81101844zM770.25238237 704.57457216c0 56.88059932-25.72883034 85.32089962-77.06598119 85.32089962-33.38119949 0-65.49704605-0.42178388-96.52830516-1.20509734-1.56662693-11.74970057-4.69987945-27.65698684-9.39976018-47.66160455 32.53763043 2.34994037 63.93041914 3.55503771 94.17836479 3.55503769 28.62106446 0 42.96172381-15.30473697 42.9617238-45.91421221L724.39842443 300.44514332 433.72892149 300.44514332 433.72892149 269.47413849l336.58371644 0L770.31263793 704.57457216zM434.15070537 600.51440773l155.33706097 0L589.48776634 451.26308899 434.15070537 451.26308899 434.15070537 600.51440773z" ></path></symbol><symbol id="icon-qq" viewBox="0 0 1024 1024"><path d="M550.744931 834.806034 550.744931 834.806034c-11.183713 0-16.754592 0-22.327518 0-5.53404 0-11.144828 0-16.718777 0l-5.572926 0c-5.571902 0-16.717753 0-22.289656 5.53404-22.290679 22.326495-61.298088 33.475416-111.453395 33.475416-33.434483 0-61.298088-5.610788-89.163739-16.7198-22.289656-11.143805-33.435507-22.326495-33.435507-39.009456 0-16.717753 11.143805-27.862581 39.009456-39.045271 16.717753-5.535063 22.289656-11.106965 22.289656-22.326495 0-11.106965 0-22.25384-5.572926-27.863604-11.144828-11.034311-16.718777-27.788903-27.863604-38.896892-5.572926-11.144828-16.71673-16.755616-27.861558-16.755616l0 0c-11.144828 0-16.717753 5.608741-27.863604 11.220552-11.143805 11.106965-16.717753 16.644075-22.290679 16.644075l0 0c-5.572926 0-11.106965-16.644075-11.106965-44.505633 0-27.863604 5.535063-61.336974 11.070126-94.810343 11.145851-33.398668 27.862581-61.261249 55.725162-89.124853 5.574972-5.535063 11.146874-16.717753 11.146874-27.863604 0-5.53404 0-5.53404 0-11.106965 0-16.755616 5.571902-33.435507 16.71673-50.154283 5.573949-5.572926 5.573949-11.143805 5.573949-16.717753l0-5.573949c0.035816-66.908876 22.288632-122.635061 72.480778-172.789345 44.582381-50.191122 100.30652-72.444962 167.180604-72.444962 66.872037 0 122.600269 22.290679 172.751482 72.444962 44.618197 50.154283 72.480778 105.880469 72.480778 172.715667 0 0 0 0 0 5.572926 0 5.573949 0 11.144828 5.536087 16.717753 11.141758 16.718777 16.717753 33.398668 16.717753 50.154283 0 5.572926 0 5.572926 0 11.106965 0 11.144828 0 22.326495 11.143805 27.862581 27.863604 27.862581 44.581358 55.726186 55.726186 89.124853 11.144828 33.474392 16.717753 66.944691 11.144828 94.810343 0 27.862581-5.573949 38.97057-16.681938 44.50768-5.573949 0-11.183713-5.535063-22.328541-16.645099-5.533017-5.572926-16.718777-11.219529-27.861558-11.219529l-5.536087 0c-11.184737 0-22.325471 5.606695-27.861558 16.753569-5.573949 16.71673-16.754592 27.863604-27.863604 38.969547-5.572926 5.608741-11.18269 16.754592-5.572926 27.863604 0 11.220552 11.145851 16.753569 16.682961 22.326495 27.826765 11.219529 39.010479 22.364357 39.010479 39.08211 0 16.680914-11.183713 27.863604-33.43653 39.008432-22.289656 11.106965-55.724139 16.7198-89.164762 16.7198-50.15326 0-83.58979-11.184737-111.452371-33.474392 5.571902 0-5.572926-5.572926-11.106965-5.572926l0 0L550.744931 834.806034zM678.880263 940.724365c55.726186 0 100.30652-11.143805 133.74305-33.398668 33.435507-22.326495 55.724139-50.191122 55.724139-89.163739 0-22.291702-5.53404-39.046295-16.678868-55.726186 5.571902 0 16.678868 0 22.287609-5.608741 33.435507-11.106965 50.15633-38.97057 55.727209-83.591837 5.571902-38.9675 0-83.58979-16.681938-133.706211-11.18269-39.046295-33.435507-72.444962-61.297065-105.880469l0 0c0-27.862581-5.573949-50.154283-16.7198-78.015841 0-83.590813-27.861558-156.034752-89.124853-217.370703C684.450119 76.963882 612.004133 49.098231 528.418436 49.098231c-83.590813 0-156.034752 27.862581-217.334887 89.124853-55.764048 61.33595-89.163739 133.781936-89.163739 217.370703-11.143805 22.290679-16.717753 50.154283-16.717753 78.016865l0 5.571902c-33.434483 27.863604-50.154283 66.87306-61.298088 100.305497-16.718777 50.118468-22.290679 94.737688-16.718777 133.708258 5.573949 44.61922 27.863604 72.482825 55.726186 83.590813 5.572926 0 16.718777 5.608741 22.290679 5.608741-11.144828 16.681938-16.718777 33.43653-16.718777 55.726186 0 33.435507 16.718777 66.872037 55.727209 89.163739 33.435507 22.291702 78.015841 33.435507 128.169101 33.435507 55.725162 0 105.880469-11.142781 139.316999-39.007409l27.863604 0c39.045271 27.862581 83.590813 39.007409 139.316999 39.007409l0 0L678.880263 940.724365z" ></path></symbol><symbol id="icon-text" viewBox="0 0 1024 1024"><path d="M886.624 297.376l-191.968-191.968c-2.944-2.944-6.432-5.312-10.336-6.912C680.48 96.864 676.288 96 672 96L224 96C171.072 96 128 139.072 128 192l0 640c0 52.928 43.072 96 96 96l576 0c52.928 0 96-43.072 96-96L896 320C896 311.52 892.64 303.36 886.624 297.376zM704 205.248 818.752 320 704 320 704 205.248zM800 864 224 864c-17.632 0-32-14.336-32-32L192 192c0-17.632 14.368-32 32-32l416 0 0 192c0 17.664 14.304 32 32 32l160 0 0 448C832 849.664 817.664 864 800 864z" ></path><path d="M288 352l192 0c17.664 0 32-14.336 32-32s-14.336-32-32-32L288 288c-17.664 0-32 14.336-32 32S270.336 352 288 352z" ></path><path d="M608 480 288 480c-17.664 0-32 14.336-32 32s14.336 32 32 32l320 0c17.696 0 32-14.336 32-32S625.696 480 608 480z" ></path><path d="M608 672 288 672c-17.664 0-32 14.304-32 32s14.336 32 32 32l320 0c17.696 0 32-14.304 32-32S625.696 672 608 672z" ></path></symbol><symbol id="icon-tianjia" viewBox="0 0 1024 1024"><path d="M509.72826 92.853781c-231.475955 0-419.148265 187.67231-419.148265 419.148265 0 231.470839 187.67231 419.143149 419.148265 419.143149 231.498468 0 419.143149-187.67231 419.143149-419.143149C928.871409 280.526091 741.226728 92.853781 509.72826 92.853781L509.72826 92.853781zM745.847979 538.195615 535.921829 538.195615 535.921829 748.121765c0 14.278191-11.736299 25.846668-26.193569 25.846668-14.474666 0-26.198685-11.568477-26.198685-25.846668L483.529575 538.195615 273.603425 538.195615c-14.278191 0-25.841551-11.736299-25.841551-26.193569 0-14.474666 11.592013-26.198685 25.841551-26.198685l209.92615 0L483.529575 275.849582c0-14.250562 11.724019-25.813922 26.198685-25.813922 14.45727 0 26.193569 11.56336 26.193569 25.813922l0 209.953779 209.92615 0c14.305821 0 25.846668 11.724019 25.846668 26.198685C771.694647 526.459317 760.1538 538.195615 745.847979 538.195615L745.847979 538.195615zM745.847979 538.195615" ></path></symbol><symbol id="icon-triangledown-fill" viewBox="0 0 1024 1024"><path d="M957.056 338.624C951.84 327.296 940.512 320 928 320L96 320c-12.512 0-23.84 7.296-29.088 18.624-5.216 11.36-3.328 24.704 4.768 34.208l416 485.344c6.08 7.104 14.944 11.2 24.288 11.2s18.208-4.096 24.288-11.2l416-485.344C960.448 363.328 962.272 349.984 957.056 338.624z" ></path></symbol><symbol id="icon-triangleup-fill" viewBox="0 0 1024 1024"><path d="M952.32 715.2l-416-485.376c-12.16-14.176-36.448-14.176-48.608 0l-416 485.376c-8.128 9.472-9.984 22.848-4.768 34.176C72.16 760.704 83.488 768 96 768l832 0c12.512 0 23.84-7.296 29.056-18.624S960.448 724.672 952.32 715.2z" ></path></symbol><symbol id="icon-zhengpinbaozhangduigou" viewBox="0 0 1025 1024"><path d="M461.015563 785.533459c-12.298765 0-24.59878-4.697506-33.978791-14.091267L229.42903 573.863201c-18.750023-18.765023-18.750023-49.17006 0-67.935083 18.745023-18.763773 49.17006-18.763773 67.925083 0l163.66145 163.6727 418.05801-418.10676c18.765023-18.763773 49.18006-18.763773 67.943833 0 18.730023 18.741273 18.730023 49.15631 0 67.925083L494.956854 771.455942C485.586843 780.835953 473.276828 785.533459 461.015563 785.533459L461.015563 785.533459zM512.003125 1024C229.68778 1024 0 794.31722 0 512.004375 0 229.68778 229.68778 0 512.003125 0c100.707623 0 198.193992 29.223786 281.875344 84.511353 16.855021 11.133764 21.485026 33.818791 10.366263 50.673812-11.132514 16.846271-33.818791 21.500026-50.673812 10.366263-71.698838-47.372558-155.23894-72.411338-241.567795-72.411338-241.997795 0-438.861786 196.86524-438.861786 438.863036 0 241.991545 196.86524 438.858036 438.861786 438.858036 241.992795 0 438.858036-196.86649 438.858036-438.858036 0-15.273769-0.776251-30.651287-2.338753-45.713806-2.080003-20.097525 12.528765-38.061296 32.61754-40.131299 20.068774-2.085003 38.061296 12.528765 40.131299 32.61254 1.816252 17.548771 2.730003 35.448793 2.730003 53.232565C1024 794.31722 794.31722 1024 512.003125 1024L512.003125 1024zM512.003125 1024" ></path></symbol><symbol id="icon-wechat" viewBox="0 0 1024 1024"><path d="M511.5830368 991.59387093" ></path><path d="M914.79296747 805.42200107c44.52992-40.6932032 71.5561184-94.15836053 71.5561184-152.70784747 0-101.90274133-81.8426656-188.37784533-195.38981227-219.00499093-6.77183147-163.28692373-172.98295467-293.98413653-377.0602272-293.98413654-208.37570453 0-377.2959968 136.25963307-377.2959968 304.34054187 0 77.18730453 35.6219712 147.66281173 94.32754667 201.311344 18.36930133 16.78658773-3.13595627 62.7311264-29.56181547 100.68896427 44.65762773-12.33534187 92.28748373-20.3613376 133.98598293-20.3613376 19.52086187 0 37.74826453 1.762816 53.74567894 5.65956586 39.0646464 11.03860907 81.0633152 17.0474624 124.80078613 17.0474624 8.49426027 0 16.9197536-0.2554176 25.2797568-0.70185173 44.89994667 80.1224192 144.84994773 135.8808736 260.94908373 135.8808736 33.17804267 0 65.03970453-4.55275733 94.67465174-12.93458987 12.14105067-2.961312 25.96086933-4.2973408 40.77070186-4.2973408 31.63134933 0 67.76633813 6.08962667 101.64186667 15.44946774-20.0404288-28.79338027-36.3609344-63.6425504-22.42213973-76.38175787L914.79514987 805.42200107zM413.90450347 692.8179328c-37.686048 0-74.58401387-5.03084587-109.6798688-14.94845653l-0.96818454-0.27178987-0.97800746-0.24013547c-19.71624533-4.81035733-42.2300736-7.24882773-66.92149654-7.24882773-14.18875413 0-28.3622272 0.7793504-42.22461546 2.11101227 2.94493867-32.5744288-9.53776-54.02292693-24.69578987-67.87985707-24.48621653-22.374112-43.5060672-47.53161813-56.52688853-74.772848-13.078672-27.3547488-19.7107872-56.123024-19.7107872-85.5014624 0-64.15011093 31.89768213-125.2101088 89.81845013-171.9329056 29.57273067-23.85531413 64.2210592-42.65467733 102.97352853-55.8763392 40.7248576-13.89840853 84.09666773-20.9409376 128.91475094-20.9409376s88.18989227 7.0490784 128.91475093 20.9409376c38.75137813 13.22166187 73.39970667 32.02102507 102.97352853 55.8763392 51.6968832 41.697408 82.63729707 94.81873387 88.6974528 151.36090347l0.00545814 0c-11.27001173-1.08606933-22.7343168-1.66566933-34.36671574-1.66566934-158.07706667 0-286.2233824 103.36866133-286.2233824 230.88407467 0 13.66154667 1.485568 27.05239573 4.30279787 40.06339307 0 0 0 0 0-0.00545814C416.7675776 692.7862784 415.33986133 692.8179328 413.90450347 692.8179328L413.90450347 692.8179328zM877.2848384 764.3958816c-8.9843552 8.2115552-20.8328768 23.3019104-22.98427627 46.92254613-6.20860373-0.3525632-12.4685088-0.54794667-18.72841386-0.54794666-19.8046592 0-37.953472 1.9778464-53.94542827 5.8811456l-0.97800747 0.24013546-0.9725504 0.27178987c-25.43366187 7.19316053-52.1989856 10.8344928-79.54827626 10.8344928-32.51766933 0-63.96564267-5.1028864-93.46196587-15.163488-27.9125184-9.52138667-52.8178816-23.0246624-74.03060907-40.1343424-40.71940053-32.84621867-63.14481493-75.45505173-63.14481493-119.98497173 0-44.52992 22.4254144-87.14421013 63.14481493-119.9904288 21.21272853-17.10968 46.11809067-30.61295573 74.03060907-40.1354336 29.495232-10.06060053 60.94320533-15.16239573 93.46196587-15.16239574 32.51657813 0 63.96455147 5.1017952 93.45978346 15.16239574 27.9125184 9.527936 52.8178816 23.02684587 74.0262432 40.1354336 40.71940053 32.84621867 63.14699733 75.4605088 63.14699734 119.9904288 0 20.26964907-4.58986987 40.1452576-13.64189974 59.07341973C907.98402453 730.88819733 894.58444373 748.58730133 877.2848384 764.3958816L877.2848384 764.3958816zM877.2848384 764.3958816" ></path><path d="M248.33410667 384.57300053c0.30344427-32.08760747 20.37770987-57.940416 45.10515413-57.940416 24.9053632 0 45.10297067 26.25230613 45.10297067 58.63135147 0 32.38559467-20.1921504 58.6379008-45.10297067 58.6379008-24.72744427 0-44.80170987-25.8571744-45.09969707-57.90548693L248.33410667 384.57300053zM248.33410667 384.57300053" ></path><path d="M482.94574507 384.57300053c0.30344427-32.08760747 20.37770987-57.940416 45.09969706-57.940416 24.91082027 0 45.10297067 26.25230613 45.10297067 58.63135147 0 32.38559467-20.1921504 58.6379008-45.10297067 58.6379008-24.72198613 0-44.79625173-25.8571744-45.09969706-57.90548693L482.94574507 384.57300053zM482.94574507 384.57300053" ></path><path d="M586.9343936 609.80733333c0.30344427-24.6608608 15.74745493-44.500448 34.7563904-44.500448 19.19995307 0 34.76184853 20.23472 34.76184853 45.19138454 0 24.96321387-15.5618944 45.19138453-34.76184853 45.19138453-19.01002773 0-34.45403733-19.8395872-34.7563904-44.4578784L586.9343936 609.80733333zM586.9343936 609.80733333" ></path><path d="M754.40077227 609.80733333c0.30344427-24.6608608 15.7518208-44.500448 34.76184853-44.500448 19.19995307 0 34.7673056 20.23472 34.7673056 45.19138454 0 24.96321387-15.56735253 45.19138453-34.7673056 45.19138453-19.01002773 0-34.4584032-19.8395872-34.76184853-44.4578784L754.40077227 609.80733333zM754.40077227 609.80733333" ></path></symbol><symbol id="icon-addressbook2-copy" viewBox="0 0 1024 1024"><path d="M824.24375 62L199.8125 62C154.925 62 118.25 98.7875 118.25 143.7875L118.25 191.375l44.49375 0c35.1 0 63.50625 28.51875 63.50625 63.73125S197.84375 318.8375 162.74375 318.8375L118.25 318.8375l0 43.81875 44.49375 0c35.1 0 63.50625 28.51875 63.50625 63.73125S197.84375 490.0625 162.74375 490.11875L118.25 490.11875l0 43.7625 44.49375 0c35.1 0 63.50625 28.51875 63.50625 63.675 0 35.26875-28.40625 63.73125-63.50625 63.73125L118.25 661.2875l0 43.81875 44.49375 0c35.1 0 63.50625 28.575 63.50625 63.73125S197.84375 832.625 162.74375 832.625L118.25 832.625l0 47.5875C118.25 925.2125 154.925 962 199.8125 962l624.43125 0C869.075 962 905.75 925.2125 905.75 880.15625L905.75 143.7875C905.75 98.7875 869.075 62 824.24375 62zM524.6 227.825c62.60625 0 113.4 50.90625 113.4 113.7375 0 62.83125-50.79375 113.79375-113.4 113.79375-62.60625 0-113.4-50.90625-113.4-113.7375C411.2 278.7875 461.9375 227.825 524.6 227.825zM706.56875 758.99375l-0.3375 0c-3.43125 20.64375-83.25 37.125-181.63125 37.125-98.38125 0-178.3125-16.48125-181.63125-37.125L342.575 758.99375l0-110.53125c0-80.83125 50.68125-149.2875 121.33125-174.76875l60.69375 81.1125 60.6375-81.1125c70.70625 25.48125 121.33125 93.99375 121.33125 174.76875L706.56875 758.99375z" ></path></symbol><symbol id="icon-hide" viewBox="0 0 1024 1024"><path d="M605.376 490.528l61.696 59.04C670.016 537.44 672 524.992 672 512c0-88.224-71.776-160-160-160-15.424 0-30.016 2.88-44.16 6.976l61.44 58.784C566.944 424.64 596.832 453.472 605.376 490.528z" ></path><path d="M556.256 664.992l-61.376-58.752c-37.792-6.848-67.84-35.744-76.32-72.96l-61.632-58.944C353.984 486.496 352 498.976 352 512c0 88.224 71.776 160 160 160C527.456 672 542.08 669.088 556.256 664.992z" ></path><path d="M178.944 136.864C166.144 124.672 145.888 125.12 133.696 137.888 121.472 150.656 121.92 170.912 134.688 183.136l736 704C876.896 893.056 884.832 896 892.8 896c8.448 0 16.832-3.328 23.136-9.888 12.224-12.768 11.744-33.024-0.992-45.248L178.944 136.864z" ></path><path d="M512 800c-169.28 0-335.328-113.568-414.88-283.936-0.16-0.608-0.352-1.152-0.544-1.728-0.064-0.544-0.224-0.992-0.288-1.312C96.256 512.672 96 512.224 96 511.776L96 511.36c0-0.736 0.448-1.472 0.544-2.208 0.128-0.448 0.352-0.832 0.48-1.28 29.728-64.128 72-120.256 122.144-165.312L172.864 298.304c-55.488 50.656-102.08 113.152-134.624 184.256-1.056 2.112-1.792 4.096-2.272 5.888-0.256 0.544-0.448 1.056-0.64 1.6-1.76 5.056-1.76 8.48-1.632 7.712-0.8 3.744-1.6 11.2-1.6 11.2-0.224 2.24-0.192 4.032 0.064 6.272 0 0 0.704 13.472 1.056 14.816l4.544 13.632C126.4 737.344 316.992 865.76 512 865.76c69.824 0 138.976-17.792 203.104-47.936l-49.856-48.576C616.128 789.12 564.224 800 512 800z" ></path><path d="M992 512.096c0-5.792-0.992-10.592-1.28-11.136-0.192-2.912-1.152-8.096-2.08-10.816-0.256-0.672-0.544-1.376-0.832-2.08-0.48-1.568-1.024-3.104-1.6-4.32C897.664 290.08 707.104 160 512 160c-69.76 0-138.88 16.864-203.008 47.072l49.856 47.648C407.968 234.88 459.808 224 512 224c169.76 0 336.192 114.048 414.752 283.68 0.096 0.32 0.16 0.608 0.256 0.8 0.064 0.288 0.16 0.608 0.256 0.864 0.16 1.28 0.32 2.496 0.48 3.168-0.16 0.672-0.256 1.28-0.384 1.952-0.032 0.16-0.096 0.32-0.128 0.48-0.128 0.416-0.288 0.864-0.416 1.376-29.696 64-71.872 120.032-121.952 165.056l46.336 44.32c55.328-50.496 101.728-112.672 134.016-183.36 1.376-2.496 2.24-4.832 2.848-6.912 0.256-0.608 0.48-1.184 0.672-1.76 1.536-4.48 1.856-8.352 1.728-8.352 0 0 0 0.032-0.032 0.032C991.04 522.272 992 517.664 992 512.096z" ></path></symbol><symbol id="icon-nothing" viewBox="0 0 1567 1024"><path d="M156.662278 699.758173h21.097186A10.444152 10.444152 0 0 1 187.994733 710.202325c0 5.765172-4.490985 10.444152-10.235269 10.444152H156.662278v21.097186A10.444152 10.444152 0 0 1 146.218126 751.978932a10.277045 10.277045 0 0 1-10.444152-10.235269V720.646477H114.676787A10.444152 10.444152 0 0 1 104.441518 710.202325c0-5.765172 4.490985-10.444152 10.235269-10.444152H135.773974v-21.097187A10.444152 10.444152 0 0 1 146.218126 668.425717c5.765172 0 10.444152 4.490985 10.444152 10.235269v21.097187z m1378.628042-83.553215v-21.097186A10.277045 10.277045 0 0 0 1524.846168 584.872503a10.444152 10.444152 0 0 0-10.444152 10.235269v21.097186h-21.097186a10.277045 10.277045 0 0 0-10.235269 10.444152c0 5.598065 4.595427 10.444152 10.235269 10.444152h21.097186v21.097187c0 5.744284 4.67898 10.235269 10.444152 10.235268a10.444152 10.444152 0 0 0 10.444152-10.235268V637.093262h21.097187c5.744284 0 10.235269-4.67898 10.235268-10.444152a10.444152 10.444152 0 0 0-10.235268-10.444152H1535.29032zM776.460024 960.861969H250.596979A20.80475 20.80475 0 0 1 229.77134 939.973665c0-11.530344 9.462402-20.888304 20.825639-20.888303h94.728457A83.010119 83.010119 0 0 1 334.212859 877.413196v-605.96969A83.49055 83.49055 0 0 1 417.849627 187.994733H480.430984V167.001988A83.49055 83.49055 0 0 1 564.067752 83.553215h501.152182A83.448773 83.448773 0 0 1 1148.856702 167.001988v605.969689c0 15.185797-4.052331 29.410732-11.133466 41.672166h115.554096c11.551232 0 20.909192 9.274407 20.909192 20.888304 0 11.530344-9.295295 20.888304-20.888304 20.888304H1002.638576v20.992745c0 15.185797-4.052331 29.410732-11.133466 41.672166h11.196131c11.488567 0 20.825639 9.274407 20.825639 20.888303 0 11.530344-9.462402 20.888304-20.825639 20.888304h-109.893365c9.545955 16.000441 7.478013 36.972297-6.41271 50.863019a41.672166 41.672166 0 0 1-59.072122 0L776.460024 960.861969z m76.367638-41.776607h66.424806c22.977134 0 41.609501-18.59059 41.609501-41.881049V270.461756c0-22.559368-18.047494-40.690416-40.314426-40.690416H416.303892c-22.266932 0-40.314426 18.214601-40.314426 40.690416v606.742557c0 23.123352 18.799473 41.881049 41.588613 41.881049h317.084449l-10.736588-10.757477a41.693054 41.693054 0 0 1-10.861918-40.377091l-19.718558-19.739447A146.259902 146.259902 0 0 1 502.363703 627.693525a146.218126 146.218126 0 0 1 220.517822 190.981761l19.739447 19.739447a41.630389 41.630389 0 0 1 40.377091 10.841029L852.827662 919.085362zM1002.638576 814.643843h62.852906A41.797496 41.797496 0 0 0 1107.080095 772.867236V167.106429c0-23.14424-18.632367-41.776607-41.588613-41.776607H563.775316A41.797496 41.797496 0 0 0 522.207592 167.106429v20.888304h396.794216A83.448773 83.448773 0 0 1 1002.638576 271.443506V814.643843zM266.325872 46.998683h31.123572c8.773088 0 15.875111 6.955805 15.875111 15.666228 0 8.647758-7.102023 15.666228-15.875111 15.666228h-31.123572v31.123572c0 8.773088-6.955805 15.875111-15.666228 15.875111a15.770669 15.770669 0 0 1-15.666228-15.875111V78.331139H203.869844A15.728893 15.728893 0 0 1 187.994733 62.664911c0-8.647758 7.102023-15.666228 15.875111-15.666228h31.123572V15.875111c0-8.773088 6.955805-15.875111 15.666228-15.875111 8.647758 0 15.666228 7.102023 15.666228 15.875111v31.123572zM20.888304 939.973665c0-11.530344 9.462402-20.888304 20.825638-20.888303h125.455152c11.488567 0 20.825639 9.274407 20.825639 20.888303 0 11.530344-9.462402 20.888304-20.825639 20.888304H41.713942A20.80475 20.80475 0 0 1 20.888304 939.973665z m658.733544-135.021995a104.441518 104.441518 0 1 0-147.722083-147.722083 104.441518 104.441518 0 0 0 147.722083 147.722083zM459.542681 313.324555a20.888304 20.888304 0 0 1 20.867415-20.888304H710.202325a20.888304 20.888304 0 1 1 0 41.776608H480.430984A20.825639 20.825639 0 0 1 459.542681 313.324555z m0 104.441518c0-11.530344 9.295295-20.888304 20.742085-20.888303h334.505295c11.44679 0 20.742086 9.274407 20.742086 20.888303 0 11.530344-9.295295 20.888304-20.742086 20.888304H480.284766A20.762974 20.762974 0 0 1 459.542681 417.766073z m0 104.441519c0-11.530344 9.316183-20.888304 20.846527-20.888304h146.301679c11.509455 0 20.846527 9.274407 20.846527 20.888304 0 11.530344-9.316183 20.888304-20.846527 20.888303h-146.301679A20.80475 20.80475 0 0 1 459.542681 522.207592zM62.664911 396.87777a62.664911 62.664911 0 1 1 0-125.329822 62.664911 62.664911 0 0 1 0 125.329822z m0-31.332456a31.332456 31.332456 0 1 0 0-62.664911 31.332456 31.332456 0 0 0 0 62.664911zM1357.739739 271.547948a62.664911 62.664911 0 1 1 0-125.329822 62.664911 62.664911 0 0 1 0 125.329822z m0-31.332456a31.332456 31.332456 0 1 0 0-62.664911 31.332456 31.332456 0 0 0 0 62.664911z" fill="#8A96A3" ></path></symbol><symbol id="icon-self-employed" viewBox="0 0 1024 1024"><path d="M612.2 680.7L562.8 656v60.6l49.4-35.9zM410.1 680.7l49.4-24.7v60.6l-49.4-35.9z" fill="#C8A45A" ></path><path d="M440.9 605.7H586v257.2H440.9V605.7z" fill="#FFDDB8" ></path><path d="M440.9 601.2H586v45.1l-145.1 88V601.2z" fill="#E5C6A5" ></path><path d="M513.4 952.2s50.3 0.2 65.1 0.2c6.1-9.8 25.2-201.3 24.7-204.3-0.3-1.9-60.6 18-60.6 18l-29.2 31v155.1z" fill="#FFFFFF" ></path><path d="M515.6 952.4s-53.7 0.2-68.5 0.2c-6.1-9.8-55.5-200.9-55-204 0.3-1.9 96.6 17.4 96.6 17.4l26.9 31.4v155z" fill="#E0ECFF" ></path><path d="M565 952.4h240.2L767 820.1s-84.9-61.3-152.5-81.9v-57.5L565 700.9v251.5z" fill="#F5CD7D" ></path><path d="M459.5 952.4H219.2l38.4-132.3s84.9-61.3 152.5-81.9v-57.5l49.4 20.2v251.5z" fill="#E3B558" ></path><path d="M300.7 371.4c-12 4.1-15.4 26.2-7.7 49.5 7.7 23.2 23.7 38.7 35.7 34.6 12-4.1 15.4-26.2 7.7-49.5-7.7-23.2-23.7-38.7-35.7-34.6z" fill="#F5D4B1" ></path><path d="M726.1 372.4c12 4 15.4 25.9 7.7 48.8s-23.7 38.2-35.7 34.2c-12-4-15.4-25.9-7.7-48.8s23.7-38.3 35.7-34.2z" fill="#FFDDB8" ></path><path d="M513.4 200.1c106.6-1.5 184.1 99.7 184.1 222.7 0 41.3-8.2 79-24.4 112.2-32 65.6-100.1 101.4-159.7 109.7V200.1z" fill="#FFDDB8" ></path><path d="M677.3 155.2C723.9 275.3 731 348.4 709 388.6c-4.4 8-15.6 23.6-20.5 29.4-3.8-54.3-60.2-179.7-108.4-157.1-70.7 33.1-7.2-194.6 97.2-105.7z" fill="#5C3E31" ></path><path d="M513.4 200.1c-106.6-1.5-184.1 99.7-184.1 222.7 0 41.3 8.2 79 24.4 112.2 32.1 65.6 100.1 101.4 159.7 109.7V200.1z" fill="#F5D4B1" ></path><path d="M298.2 340.1c1.6 0.2-102.2 14.8-74.1 42.4 39 27.1 112.1 36.2 144 37.1 285.2 7.8 337.1-60.6 349.4-71.5 13.5-12.3-419.3-8-419.3-8z" fill="#E3B558" ></path><path d="M721.9 348c-12.2 11-62.1 68.7-347.2 60.9-13.1-0.4-33.5-0.8-55.8-3l192-65.7-5.7-0.9c110.5 0.5 223.8 2.4 216.7 8.7z" fill="#F5CD7D" ></path><path d="M513.7 70.3c0 201.4 1.7 299.3 0.6 299.3 136.4 0 207.9-26.3 207.9-26.3l-4.1-76.2s-10-57.5-14.4-74.1c-14.4-54.8-47.3-82.5-47.3-82.5S544.5 70.3 513.7 70.3z" fill="#FFFFFF" ></path><path d="M517.7 69.9c0 200.9-1.7 298.6-0.6 298.6-135.7 0-206.9-26.2-206.9-26.2l4.1-76s10-57.4 14.3-73.9c14.4-54.7 47-82.4 47-82.4S487 69.9 517.7 69.9z" fill="#E0ECFF" ></path><path d="M517.9 69.9c13 0 23.6 6.5 23.6 14.6s-10.6 14.6-23.6 14.6c-13 0-23.6-6.5-23.6-14.6s10.6-14.6 23.6-14.6z" fill="#E3B558" ></path><path d="M519 69.9c10.5 0 19.1 5 19.1 11.2 0 6.2-8.5 11.2-19.1 11.2s-19.1-5-19.1-11.2c0-6.2 8.6-11.2 19.1-11.2z" fill="#F5CD7D" ></path></symbol><symbol id="icon-boss" viewBox="0 0 1024 1024"><path d="M582.1 754.3l-140.3-0.7V590.7h140.3z" fill="#FFDDB8" ></path><path d="M582.1 651l-140.3 82.7v-143h140.3z" fill="#EBCCAA" ></path><path d="M512.4 206.8c-0.6 0-1.1-0.1-1.7-0.1-103 0-193.3 100.3-193.3 224.1s123.2 224.1 193.3 224.1c0.6 0 1.1 0 1.7-0.1v-448z" fill="#F5D4B1" ></path><path d="M512.4 206.8c0.6 0 1.1-0.1 1.7-0.1 103 0 193.3 100.3 193.3 224.1S584.2 654.9 514.1 654.9c-0.6 0-1.1 0-1.7-0.1v-448z" fill="#FFDDB8" ></path><path d="M295.8 367.6c-3.3-58.2-6.6-140.3 16.6-191.6 23.3-51.3 146.3-106.1 199.4-106.1S668 121.2 691.3 152c13.7 18.1 34.7 117.4 33.2 201.9-1 59.4-10.3 82.3-19.9 99.2-4.8 8.5 6.6-109.5-99.7-201.9-16.6-10.3-32.1 6.4-53.2 10.3-35.3 6.5-66.5 6.8-93.1 6.8-31 0-88.1 39.8-103 78.7-26.4 68.7-19.9 119.8-19.9 119.8s-36.6-41-39.9-99.2z" fill="#333333" ></path><path d="M294.587017 433.447615a51.3 25.7 72.645 1 0 49.06001-15.33217 51.3 25.7 72.645 1 0-49.06001 15.33217Z" fill="#F5D4B1" ></path><path d="M512.1 723.5l-133.5 24s-85.5 37.6-109.5 75.3c-24 37.6-61.6 133.5-61.6 133.5H512V723.5z" fill="#E0ECFF" ></path><path d="M512.4 723.5l133.5 24s85.5 37.6 109.5 75.3c24 37.6 61.6 133.5 61.6 133.5H512.4V723.5z" fill="#FFFFFF" ></path><path d="M687.00445 467.897799a25.7 51.3 17.355 1 0 30.604681-97.929125 25.7 51.3 17.355 1 0-30.604681 97.929125Z" fill="#FFDDB8" ></path><path d="M495.3 853.5l-56.9-126.6 71.8-3.4 75.3 3.4-58.2 126.6 10.2 102.7h-51.2z" fill="#7FB2FF" ></path><path d="M432.5 675.4l78.7 47.9L381.1 826V723.3zM589.9 675.4l-78.7 47.9 130 102.7V723.3z" fill="#FFFFFF" ></path><path d="M483.5 375.4h-112c-7.5 0-13.6 5.5-13.6 12.2v63.9c0 6.7 6.1 12.2 13.6 12.2h112c7.5 0 13.6-5.5 13.6-12.2v-63.9c0-6.7-6.1-12.2-13.6-12.2z m-0.8 67c0 6.7-6.1 12.2-13.6 12.2h-83.2c-7.5 0-13.6-5.5-13.6-12.2v-45.7c0-6.7 6.1-12.2 13.6-12.2h83.2c7.5 0 13.6 5.5 13.6 12.2v45.7zM656.7 375.4h-112c-7.5 0-13.6 5.5-13.6 12.2v63.9c0 6.7 6.1 12.2 13.6 12.2h112c7.5 0 13.6-5.5 13.6-12.2v-63.9c-0.1-6.7-6.1-12.2-13.6-12.2z m-0.9 67c0 6.7-6.1 12.2-13.6 12.2H559c-7.5 0-13.6-5.5-13.6-12.2v-45.7c0-6.7 6.1-12.2 13.6-12.2h83.2c7.5 0 13.6 5.5 13.6 12.2v45.7z" fill="#333333" ></path><path d="M490.3 416.2h47.5v13.6h-47.5z" fill="#333333" ></path></symbol><symbol id="icon-staff" viewBox="0 0 1024 1024"><path d="M268.7 878.7L510 953.1V66.5c-71.3 0.3-190.1 42.5-214 205.3-37.9 257.6-27.3 606.9-27.3 606.9z" fill="#462F25" ></path><path d="M751.3 878.7L510 953.1V66.5c71.3 0.3 190.1 42.5 214.1 205.3 37.8 257.6 27.2 606.9 27.2 606.9z" fill="#5C3E31" ></path><path d="M512.3 953.1H789s-13.8-190.7-202.7-220.4c-69.1-5-74-2-74-2v222.4z" fill="#515151" ></path><path d="M511.1 953.1H235.6S249.3 761.8 437.4 732c68.8-5 73.7-2 73.7-2v223.1z" fill="#333333" ></path><path d="M442 598.9h145.1v257.2H442V598.9z" fill="" ></path><path d="M442 598.9h145.1v257.2H442V598.9z" fill="#FFDDB8" ></path><path d="M509 952.9s31.6 0.2 46.5 0.2c6.2-9.8 78.8-202.1 78.2-205.2-0.3-1.9-95.3 18-95.3 18L509 797v155.9z" fill="#FFFFFF" ></path><path d="M511 953.1s-31.6 0.2-46.5 0.2c-6.2-9.8-78.8-201.9-78.2-204.9 0.3-1.9 97.5 17.5 97.5 17.5l27.2 31.6v155.6z" fill="#E0ECFF" ></path><path d="M587.1 693.7l78.4 25 37.3 94.9-165.1-46.2 49.4-73.7z" fill="#FFFFFF" ></path><path d="M442 594.4h145.1v45.1l-145.1 88V594.4z" fill="#E5C6A5" ></path><path d="M441.3 697.2l-78 24.9-37.1 94.7 164.3-46.2-49.2-73.4z" fill="#FFFFFF" ></path><path d="M306.5 367.2c-12.1 4.1-15.6 26.4-7.8 49.7 7.8 23.3 23.9 38.9 36 34.8s15.6-26.4 7.8-49.7c-7.7-23.3-23.9-38.9-36-34.8z" fill="#F5D4B1" ></path><path d="M720.1 368.2c12.1 4.1 15.6 26 7.8 49s-23.9 38.4-36 34.3-15.6-26-7.8-49 23.9-38.4 36-34.3z" fill="" ></path><path d="M720.1 368.2c12.1 4.1 15.6 26 7.8 49s-23.9 38.4-36 34.3-15.6-26-7.8-49 23.9-38.4 36-34.3z" fill="#FFDDB8" ></path><path d="M512.3 197.4c-107.7 0-186 100.2-186 223.7 0 41.5 9.3 79.9 25.6 113.2 32.2 65.7 135.3 108.6 160.3 109.8 0.1-102.4 0.1-174.1 0.1-446.7z" fill="#F5D4B1" ></path><path d="M511.3 197.4c107.7 0 186 100.2 186 223.7 0 41.5-9.3 79.9-25.6 113.2-32.3 65.7-135.4 108.5-160.4 109.8V197.4z" fill="#FFDDB8" ></path><path d="M580.3 190.6s-89.9 124.8-249.5 185c-35.5-61.9-27.2-109.5-27.2-133.1s48.5-176 204.1-176c29.7-1.1 85 87.4 72.6 124.1z" fill="#5C3E31" ></path></symbol><symbol id="icon-professional" viewBox="0 0 1024 1024"><path d="M506.1 952.6H842S825.3 756 596 725.3c-62.5-3.8-89.8-2.4-89.8-2.4v0.2c-0.1 163.3-0.1 229.5-0.1 229.5z" fill="#FFDDB8" ></path><path d="M507.5 952.6H173s16.7-197 245-227.6c62.2-3.8 89.5-2.4 89.5-2.4v230z" fill="#F5D4B1" ></path><path d="M438.5 619.3h145.1v133H438.5v-133z" fill="#FFDDB8" ></path><path d="M438.5 614.8h145.1v45.1l-145.1 88V614.8z" fill="#E5C6A5" ></path><path d="M507.4 199.9v443.9c60.1-3 132.8-43.5 167.1-108.4 17.6-33.3 19-71.6 19-113.2-0.1-122.8-79.7-222.3-186.1-222.3z" fill="#FFDDB8" ></path><path d="M507.3 199.9v443.9c-60.1-3-132.8-43.5-167.1-108.4-17.6-33.3-19-71.6-19-113.2 0.1-122.8 79.7-222.3 186.1-222.3z" fill="#F5D4B1" ></path><path d="M335.8 399.4c3.4-50.5 26.8-108.5 105.6-140.7 19 4.3 58.6 37.5 129 4.5 47.9-22.4 108.1 77.3 116.7 118.3 6.9 32.8-6.5 29.4 15.6 22.3 5-3.9 38-54.2-13.4-256.8-103.8-88.3-187.5-80.4-187.5-80.4S370 80.9 309.7 182.8c-16.6 90-20.3 158.6-8.4 208.3 11.2-27.7 24.9-16.1 34.5 8.3z" fill="#5C3E31" ></path><path d="M712.9 369.6c12 4 15.4 25.9 7.7 48.7-7.7 22.9-23.7 38.2-35.6 34.1-12-4-15.4-25.9-7.7-48.7 7.6-22.8 23.6-38.1 35.6-34.1z" fill="#FFDDB8" ></path><path d="M303.9 368.6c-12 4.1-15.4 26.2-7.7 49.4s23.7 38.7 35.6 34.6c12-4.1 15.4-26.2 7.7-49.4-7.6-23.2-23.6-38.7-35.6-34.6z" fill="#F5D4B1" ></path><path d="M347.2 741.5c1.2 30.2 7.9 90.6 39.9 130.6 29.5 40.2 120.4 45.9 120.4 45.9v34.4H274V775c24.6-14.2 38.5-20.4 73.2-33.5z" fill="#DF4141" ></path><path d="M292.8 764.8v187.8c63.9 0 7.6-0.2 169.6-0.2-30.3-7.6-70.1-23.1-96.5-54.9-23.8-28.9-36.2-94.5-40.8-148.4-5.6 2.3-21 6.3-32.3 15.7z" fill="#E0ECFF" ></path><path d="M740.5 774.9v177.4H507V918s90.9-5.7 120.2-45.9c32.1-39.9 38.8-100.5 39.9-130.6 34.9 13.1 48.8 19.3 73.4 33.4z" fill="#F56868" ></path><path d="M690.3 748.9c-4.5 53.9-16.8 119.5-40.8 148.4-26.3 31.9-66.2 47.5-96.5 54.9 162.1 0 105.7 0.2 169.6 0.2V764.6c-11.3-9.2-26.6-13.2-32.3-15.7z" fill="#FFFFFF" ></path></symbol><symbol id="icon-edit" viewBox="0 0 1024 1024"><path d="M 839.912 959.355 H 183.359 c -65.93 0 -119.381 -53.435 -119.381 -119.38 V 183.42 c 0 -65.927 53.451 -119.38 119.38 -119.38 h 432.724 c 8.24 0 14.933 6.676 14.933 14.915 V 108.8 c 0 8.256 -6.693 14.932 -14.933 14.932 h -402.88 c -49.45 0 -89.535 40.084 -89.535 89.533 V 810.13 c 0 49.45 40.085 89.535 89.535 89.535 h 596.865 c 49.45 0 89.533 -40.085 89.533 -89.535 V 407.25 c 0 -8.24 6.693 -14.932 14.932 -14.932 h 29.847 c 8.237 0 14.913 6.694 14.913 14.932 v 432.725 c -0.001 65.945 -53.452 119.38 -119.38 119.38 Z m 52.608 -710.41 L 768.484 131.853 l 37.664 -37.815 c 29.123 -29.223 77.008 -29.997 106.986 -1.699 l 15.503 14.627 c 29.964 28.3 30.654 74.941 1.533 104.181 l -37.65 37.798 Z m -590.979 351.8 l 124.02 117.094 l -182.516 62.447 l 58.496 -179.542 Z M 862.39 279.21 L 455.676 687.59 l -124.02 -117.095 L 738.37 162.12 L 862.39 279.21 Z" ></path></symbol><symbol id="icon-my-identification-fill" viewBox="0 0 1293 1024"><path d="M1096.33333331 148.875l-44.375-0.75c-1 0-100.375-2-203-41.75-105.25-40.75-173.125-87.5-173.75-88L648.45833331 0 621.83333331 18.5c-0.625 0.375-68.5 47.25-173.75 88C345.45833331 146.25 246.08333331 148.125 245.08333331 148.125l-44.5 0.75v430.5c0 216.125 291.375 444.625 448 444.625 156.75 0 448-228.5 448-444.625l-0.25-430.5zM458.45833331 772.5V355.375h-39.75V317.5h159.125v189.625L777.95833331 317.5h157.75L458.45833331 772.5z m0 0" fill="" ></path></symbol><symbol id="icon-index-card" viewBox="0 0 1365 1024"><path d="M1077.589333 512.341333H860.501333v72.704h217.258667v-72.704h-0.170667zM1188.864 39.253333h-1013.76C115.2 39.253333 66.56 88.064 66.56 148.48v727.893333c0 60.245333 48.64 109.226667 108.544 109.226667h1013.589333c59.904 0 108.544-48.810667 108.544-109.226667V148.48c0.170667-60.416-48.469333-109.226667-108.373333-109.226667z m36.181333 764.245334c0 109.226667 0 109.226667-108.544 109.226666H247.637333c-108.544 0-108.544 0-108.544-109.226666V366.762667h1086.122667v436.736z m0-517.973334H138.922667v-64.170666c0-109.226667 0-109.226667 108.544-109.226667h868.864c108.544 0 108.544 0 108.544 109.226667v64.170666z m-506.88 226.816h-506.88v72.874667h506.88v-72.874667z m-217.258666 145.578667H211.285333v72.704h289.621334v-72.704z m0 0" fill="" ></path></symbol><symbol id="icon-index-calculator" viewBox="0 0 1328 1024"><path d="M174.58974 752.138834h902.410717l114.886284 159.624905c42.556249 59.547572 19.173695 110.677424-55.338712 110.677424H106.468564c-74.512407 0-97.894961-48.947481-53.15634-108.495052L174.58974 752.138834z m0 0" fill="#DAE9FF" ></path><path d="M202.337038 109.430355c2.182372-59.547572 51.129852-108.495053 112.859796-108.495053h666.091033c59.547572 0 108.495053 48.947481 108.495053 108.495053v706.620794c0 59.547572-48.947481 108.495053-108.495053 108.495053H289.476024c-59.547572 0-108.495053-48.947481-106.468565-108.495053L202.337038 109.430355z m0 0" fill="#DAE9FF" ></path><path d="M274.667073 0.779418h666.091033c59.547572 0 108.495053 48.947481 108.495053 108.495053v706.620795c0 59.547572-48.947481 108.495053-108.495053 108.495052H274.667073c-59.547572 0-108.495053-48.947481-108.495053-108.495052V109.430355c-2.182372-59.703456 46.765109-108.650936 108.495053-108.650937z m0 0" fill="#0092F1" ></path><path d="M319.405693 392.515147c0 35.229715 28.526716 63.912315 63.912316 63.912315 35.229715 0 63.912315-28.526716 63.912315-63.912315 0-22.75902-12.158928-43.959202-31.956157-55.338712-19.797229-11.37951-44.115086-11.37951-63.912316 0s-31.956158 32.423809-31.956158 55.338712z m0 0M319.405693 592.513929c0 35.229715 28.526716 63.912315 63.912316 63.912315 35.229715 0 63.912315-28.526716 63.912315-63.912315 0-22.75902-12.158928-43.959202-31.956157-55.338712-19.797229-11.37951-44.115086-11.37951-63.912316 0s-31.956158 32.579692-31.956158 55.338712z m0 0M319.405693 790.486223c0 35.229715 28.526716 63.912315 63.912316 63.912316 35.229715 0 63.912315-28.526716 63.912315-63.912316 0-22.75902-12.158928-43.959202-31.956157-55.338712-19.797229-11.37951-44.115086-11.37951-63.912316 0s-31.956158 32.423809-31.956158 55.338712z m0 0M557.751865 392.515147c0 35.229715 28.526716 63.912315 63.912315 63.912315 35.229715 0 63.912315-28.526716 63.912316-63.912315 0-22.75902-12.158928-43.959202-31.956158-55.338712-19.797229-11.37951-44.115086-11.37951-63.912315 0s-31.956158 32.423809-31.956158 55.338712z m0 0M557.751865 592.513929c0 35.229715 28.526716 63.912315 63.912315 63.912315 35.229715 0 63.912315-28.526716 63.912316-63.912315 0-22.75902-12.158928-43.959202-31.956158-55.338712-19.797229-11.37951-44.115086-11.37951-63.912315 0s-31.956158 32.579692-31.956158 55.338712z m0 0M557.751865 790.486223c0 35.229715 28.526716 63.912315 63.912315 63.912316 35.229715 0 63.912315-28.526716 63.912316-63.912316 0-22.75902-12.158928-43.959202-31.956158-55.338712-19.797229-11.37951-44.115086-11.37951-63.912315 0s-31.956158 32.423809-31.956158 55.338712z m0 0M798.280408 392.515147c0 22.75902 12.158928 43.959202 31.956158 55.338712 19.797229 11.37951 44.115086 11.37951 63.912315 0s31.956158-32.423809 31.956158-55.338712c0-22.75902-12.158928-43.959202-31.956158-55.338712-19.797229-11.37951-44.115086-11.37951-63.912315 0s-31.956158 32.423809-31.956158 55.338712z m0 0M798.280408 592.513929c0 22.75902 12.158928 43.959202 31.956158 55.338712 19.797229 11.37951 44.115086 11.37951 63.912315 0s31.956158-32.423809 31.956158-55.338712c0-22.75902-12.158928-43.959202-31.956158-55.338712-19.797229-11.37951-44.115086-11.37951-63.912315 0s-31.956158 32.579692-31.956158 55.338712z m0 0M798.280408 790.486223c0 22.75902 12.158928 43.959202 31.956158 55.338712 19.797229 11.37951 44.115086 11.37951 63.912315 0s31.956158-32.423809 31.956158-55.338712-12.158928-43.959202-31.956158-55.338712c-19.797229-11.37951-44.115086-11.37951-63.912315 0s-31.956158 32.423809-31.956158 55.338712z m0 0" fill="#DAE9FF" ></path><path d="M278.875932 179.578018c0-33.982646 27.747298-63.912315 63.912316-63.912315h517.222104c36.165018 0 63.912315 27.591414 63.912315 63.912315 0 33.982646-27.591414 63.912315-63.912315 63.912315H342.788248c-34.138529 0-63.912315-27.747298-63.912316-63.912315z m0 0" fill="#FFFFFF" ></path><path d="M298.049627 379.732684c0 22.75902 12.158928 43.959202 31.956158 55.338712 19.797229 11.37951 44.115086 11.37951 63.912315 0s31.956158-32.423809 31.956158-55.338712c0-22.75902-12.158928-43.959202-31.956158-55.338712-19.797229-11.37951-44.115086-11.37951-63.912315 0s-31.956158 32.423809-31.956158 55.338712z m0 0" fill="#FFF000" ></path><path d="M298.049627 579.731466c0 22.75902 12.158928 43.959202 31.956158 55.338712 19.797229 11.37951 44.115086 11.37951 63.912315 0s31.956158-32.423809 31.956158-55.338712c0-22.75902-12.158928-43.959202-31.956158-55.338712-19.797229-11.37951-44.115086-11.37951-63.912315 0-19.797229 11.535394-31.956158 32.579692-31.956158 55.338712z m0 0M298.049627 777.70376c0 22.75902 12.158928 43.959202 31.956158 55.338712 19.797229 11.37951 44.115086 11.37951 63.912315 0s31.956158-32.423809 31.956158-55.338712c0-22.75902-12.158928-43.959202-31.956158-55.338712-19.797229-11.37951-44.115086-11.37951-63.912315 0s-31.956158 32.579692-31.956158 55.338712z m0 0M538.57817 379.732684c0 35.229715 28.526716 63.912315 63.912316 63.912315 35.229715 0 63.912315-28.526716 63.912315-63.912315 0-22.75902-12.158928-43.959202-31.956158-55.338712-19.797229-11.37951-44.115086-11.37951-63.912315 0s-31.956158 32.423809-31.956158 55.338712z m0 0" fill="#FFFFFF" ></path><path d="M538.57817 579.731466c0 35.229715 28.526716 63.912315 63.912316 63.912315 35.229715 0 63.912315-28.526716 63.912315-63.912315 0-22.75902-12.158928-43.959202-31.956158-55.338712-19.797229-11.37951-44.115086-11.37951-63.912315 0-19.797229 11.535394-31.956158 32.579692-31.956158 55.338712z m0 0" fill="#FFF000" ></path><path d="M538.57817 777.70376c0 35.229715 28.526716 63.912315 63.912316 63.912316 35.229715 0 63.912315-28.526716 63.912315-63.912316 0-22.75902-12.158928-43.959202-31.956158-55.338712-19.797229-11.37951-44.115086-11.37951-63.912315 0s-31.956158 32.579692-31.956158 55.338712z m0 0M776.924342 379.732684c0 22.75902 12.158928 43.959202 31.956157 55.338712 19.797229 11.37951 44.115086 11.37951 63.912316 0s31.956158-32.423809 31.956157-55.338712c0-22.75902-12.158928-43.959202-31.956157-55.338712-19.797229-11.37951-44.115086-11.37951-63.912316 0s-31.956158 32.423809-31.956157 55.338712z m0 0M776.924342 579.731466c0 22.75902 12.158928 43.959202 31.956157 55.338712 19.797229 11.37951 44.115086 11.37951 63.912316 0s31.956158-32.423809 31.956157-55.338712c0-22.75902-12.158928-43.959202-31.956157-55.338712-19.797229-11.37951-44.115086-11.37951-63.912316 0-19.797229 11.535394-31.956158 32.579692-31.956157 55.338712z m0 0" fill="#FFFFFF" ></path><path d="M776.924342 777.70376c0 22.75902 12.158928 43.959202 31.956157 55.338712 19.797229 11.37951 44.115086 11.37951 63.912316 0s31.956158-32.423809 31.956157-55.338712c0-22.75902-12.158928-43.959202-31.956157-55.338712-19.797229-11.37951-44.115086-11.37951-63.912316 0s-31.956158 32.579692-31.956157 55.338712z m0 0" fill="#FFF000" ></path><path d="M306.62323 128.604049c-14.964835 10.600091-25.564926 29.773786-25.564926 51.129853 0 33.982646 27.591414 63.912315 63.912316 63.912315h515.039732c25.564926 0 48.947481-14.964835 57.521084-38.347389-8.573603 4.20886-16.991323 6.391232-27.591415 6.391231H361.961942c-31.956158 0-57.521084-25.564926-57.521083-57.521084v-12.782463c0-2.182372 0-8.573603 2.182371-12.782463z m0 0" fill="#DAE9FF" ></path></symbol><symbol id="icon-index-bank" viewBox="0 0 1293 1024"><path d="M143.90476232 85.714286v852.714285c0 47.285714 38.285714 85.571429 85.571428 85.571429h852.857143c47.285714 0 85.571429-38.285714 85.571429-85.571429V85.571429c0-47.285714-38.285714-85.571429-85.571429-85.571429H229.61904732C182.33333332 0 143.90476232 38.428571 143.90476232 85.714286z m73.142857 858.142857v-552.857143c0-3.857143 3.142857-7 7-7h187.142857c3.857143 0 7 3.142857 7 7v552.857143c0 3.857143-3.142857 7-7 7h-187.142857c-3.857143 0-7-3.142857-7-7z m274.285714 0v-552.857143c0-3.857143 3.142857-7 7-7h315.142857c3.857143 0 7 3.142857 7 7v552.857143c0 3.857143-3.142857 7-7 7H498.33333332c-3.857143 0-7-3.142857-7-7z m596.428571 7h-187.142857c-3.857143 0-7-3.142857-7-7v-552.857143c0-3.857143 3.142857-7 7-7h187.142857c3.857143 0 7 3.142857 7 7v552.857143c0 3.857143-3.142857 7-7 7z m-267.285714-640H224.04761932c-3.857143 0-7-3.142857-7-7V80.142857c0-3.857143 3.142857-7 7-7h863.714285c3.857143 0 7 3.142857 7 7v223.714286c0 3.857143-3.142857 7-7 7H820.47619032z m0 0" fill="" ></path><path d="M699.47619032 566.857143h59.142857c3.857143 0 7 3.142857 7 7v95.714286c0 3.857143-3.142857 7-7 7h-59.142857c-3.857143 0-7-3.142857-7-7v-95.714286c0-3.857143 3.142857-7 7-7z m-374.285714 23l-10 30.142857c-2.142857 6.428571-11.142857 6.428571-13.285714 0l-10-30.142857c-1-2.857143-3.571429-4.714286-6.571429-4.714286h-22.571429c-4.571429 0-7.857143 4.285714-6.714285 8.714286l14 55.714286c1.142857 4.428571-2.285714 8.714286-6.714286 8.714285H261.04761932c-3.857143 0-7 3.142857-7 7v4.285715c0 3.857143 3.142857 7 7 7h22.571428c3.857143 0 7 3.142857 7 7v4.285714c0 3.857143-3.142857 7-7 7H261.04761932c-3.857143 0-7 3.142857-7 7v22.571428c0 3.857143 3.142857 7 7 7h22.571428c3.857143 0 7 3.142857 7 7v4.285715c0 3.857143 3.142857 7 7 7h40.857143c3.857143 0 7-3.142857 7-7v-4.285715c0-3.857143 3.142857-7 7-7h4.285714c3.857143 0 7-3.142857 7-7v-22.571428c0-3.857143-3.142857-7-7-7h-4.285714c-3.857143 0-7-3.142857-7-7v-4.285714c0-3.857143 3.142857-7 7-7h4.285714c3.857143 0 7-3.142857 7-7v-4.285715c0-3.857143-3.142857-7-7-7-5.142857 0-8.571429-5.428571-6.285714-10.142857l26.428572-52.857143c2.285714-4.714286-1-10.142857-6.285715-10.142857h-38.571428c-3.285714 0-5.857143 1.857143-6.857143 4.714286z m605 75.428571v4.285715c0 3.857143 3.142857 7 7 7h22.571428c3.857143 0 7 3.142857 7 7v4.285714c0 3.857143-3.142857 7-7 7h-22.571428c-3.857143 0-7 3.142857-7 7v22.571428c0 3.857143 3.142857 7 7 7h22.571428c3.857143 0 7 3.142857 7 7v4.285715c0 3.857143 3.142857 7 7 7h40.857143c3.857143 0 7-3.142857 7-7v-4.285715c0-3.857143 3.142857-7 7-7h4.285715c3.857143 0 7-3.142857 7-7v-22.571428c0-3.857143-3.142857-7-7-7h-4.285715c-3.857143 0-7-3.142857-7-7v-4.285714c0-3.857143 3.142857-7 7-7h4.285715c3.857143 0 7-3.142857 7-7v-4.285715c0-3.857143-3.142857-7-7-7-5.142857 0-8.571429-5.428571-6.285715-10.142857l26.428572-52.857143c2.285714-4.714286-1-10.142857-6.285715-10.142857h-38.571428c-3 0-5.714286 1.857143-6.571429 4.714286l-10 30.142857c-2.142857 6.428571-11.142857 6.428571-13.285714 0l-10-30.142857c-1-2.857143-3.571429-4.714286-6.571429-4.714286h-22.571428c-4.571429 0-7.857143 4.285714-6.714286 8.714286l14 55.714286c1.142857 4.428571-2.285714 8.714286-6.714286 8.714285h-2.285714c-4.142857 0-7.285714 3.142857-7.285714 7zM297.19047632 146.285714h717.428571c3.857143 0 7 3.142857 7 7v59.142857c0 3.857143-3.142857 7-7 7H297.19047632c-3.857143 0-7-3.142857-7-7V153.285714c0-3.857143 3.142857-7 7-7z m-7 0" fill="" ></path></symbol><symbol id="icon-index-evaluation1" viewBox="0 0 1365 1024"><path d="M228.352 622.250667h852.821333l174.762667 235.349333c62.976 83.968 27.989333 151.381333-76.970667 151.381333H151.381333c-104.789333 0-142.165333-69.973333-81.578666-156.16l158.549333-230.570666z m0 0" fill="#DAE9FF" ></path><path d="M186.368 121.173333c0-58.197333 46.592-104.789333 104.789333-104.789333h766.634667c58.197333 0 109.568 46.592 118.784 102.570667 0 0 9.386667 55.978667 9.386667 83.968v384.512c0 58.197333-46.592 104.789333-104.789334 104.789333H291.157333c-58.197333 0-104.789333-46.592-104.789333-104.789333V121.173333z m0 0" fill="#DAE9FF" ></path><path d="M239.957333 16.384h764.245334c58.197333 0 104.789333 46.592 104.789333 104.789333v468.309334c0 58.197333-46.592 104.789333-104.789333 104.789333H239.957333c-58.197333-2.389333-104.789333-48.981333-104.789333-107.178667V121.173333c0-58.197333 46.592-104.789333 104.789333-104.789333z m0 0" fill="#0092F1" ></path><path d="M685.056 174.762667c37.205333 4.608 65.194667 39.594667 65.194667 76.970666V242.346667c0 37.205333-32.597333 67.584-69.973334 67.584H377.514667c-37.205333 0-72.192-30.378667-76.970667-67.584l-2.389333-13.994667c18.602667-27.989333 65.194667-48.981333 102.570666-51.2 0 0 158.378667-4.608 249.344-4.608h20.992m-368.128 223.573333c18.602667-23.381333 55.978667-41.984 83.968-41.984h491.690667c27.989333 0 55.978667 23.381333 60.586667 51.2l2.389333 13.994667c6.997333 34.986667-18.602667 65.194667-53.589333 65.194667H375.125333c-34.986667 0-72.192-27.989333-81.578666-62.976l-2.389334-11.605334 11.776-13.824z m0 0" fill="#DAE9FF" ></path><path d="M340.138667 172.544h305.322666c27.989333 0 51.2 23.381333 51.2 51.2 0 27.989333-23.381333 51.2-51.2 51.2H340.138667c-27.989333 0-51.2-23.381333-51.2-51.2 0-27.989333 23.210667-51.2 51.2-51.2z m0 181.76h510.293333c27.989333 0 51.2 23.381333 51.2 51.2 0 27.989333-23.381333 51.2-51.2 51.2h-510.293333c-27.989333 0-51.2-23.381333-51.2-51.2 0-27.989333 23.210667-51.2 51.2-51.2z m0 0" fill="#FFFFFF" ></path><path d="M973.994667 948.394667c128.170667 0 232.96-100.181333 232.96-221.354667H973.994667V505.685333c-128.170667 0-232.96 100.181333-232.96 221.354667-0.170667 121.173333 104.789333 221.354667 232.96 221.354667z m0 0" fill="#DAE9FF" ></path><path d="M927.402667 948.394667c128.170667 0 232.96-100.181333 232.96-221.354667H927.402667V505.685333c-128.170667 0-232.96 100.181333-232.96 221.354667-0.170667 121.173333 104.789333 221.354667 232.96 221.354667z m0 0" fill="#0EACF9" ></path><path d="M1323.52 695.466667c0-165.376-163.157333-335.530667-349.525333-298.325334 0 253.952 53.589333 298.325333 53.589333 298.325334h295.936z m0 0" fill="#FFF88E" ></path><path d="M1276.928 695.466667c0-167.765333-135.168-302.933333-302.933333-302.933334v302.933334h302.933333z m0 0" fill="#FFF000" ></path></symbol><symbol id="icon-index-extreme" viewBox="0 0 1323 1024"><path d="M583.92137855 657.030661L408.79001454 621.16905801l118.386497-256.21603401L145.94894555 737.82728599l210.5609 28.51645501-139.70182901 257.656259 367.11336201-366.969339z m127.891983-657.030661c-256.648101 0-465.19268599 208.544585-465.192686 465.19268601h77.48410601C324.24880454 251.17524601 497.93994355 77.484107 711.81336156 77.484107 925.83080155 77.484107 1099.52194054 251.17524601 1099.52194054 465.048664c0 214.01744-173.691139 387.564557-387.564557 387.564557-63.081857 0.144023-125.29957799-15.410408-181.036287-44.935021l-50.26385299 60.777496c68.122644 39.174121 147.190999 61.641632 231.30013999 61.641632 256.648101 0 465.19268599-208.400563 465.19268701-465.192687-0.144023-256.360056-208.544585-464.904641-465.336709-464.904641z" fill="" ></path><path d="M863.90112555 490.25260199c16.562588 0 30.24472599 13.538115 30.24472499 30.24472601s-13.68213799 30.24472599-30.24472499 30.244725h-105.85653999v110.897328c0 16.562588-13.538115 30.24472599-30.24472602 30.244726s-30.24472599-13.538115-30.24472599-30.244726v-110.897328H591.69859356c-16.562588 0-30.24472599-13.538115-30.24472602-30.244725s13.538115-30.24472599 30.24472602-30.24472599h105.85653999v-50.40787602H591.69859356c-16.562588 0-30.24472599-13.538115-30.24472602-30.24472599 0-16.562588 13.538115-30.24472599 30.24472602-30.24472601h86.41350199l-78.924332-78.924332c-11.809845-11.809845-11.809845-30.96483801 0-42.77468299s30.96483801-11.809845 42.77468399 0l94.190717 94.190717 94.19071702-94.190717c11.809845-11.809845 30.96483801-11.809845 42.77468399 0s11.809845 30.96483801 0 42.77468299l-78.924332 78.924332H863.90112555c16.562588 0 30.24472599 13.538115 30.24472499 30.24472601 0 16.562588-13.538115 30.24472599-30.24472499 30.24472599h-105.85653999v50.407876H863.90112555z" fill="" ></path></symbol><symbol id="icon-my-application-recor" viewBox="0 0 1358 1024"><path d="M1014.18808664 92.122705h-54.720331c5.39673 9.412901 8.157847 20.080855 8.032343 30.874315v62.376156c0.251011 33.509927-26.230617 60.995597-59.740544 61.99964H406.86772464c-33.635432-0.753032-60.493576-28.238702-60.493576-61.99964v-62.376156c-0.125505-10.918965 2.886623-21.586919 8.534364-30.874315h-54.720331C231.53675864 92.122705 175.93789064 147.596067 175.68688064 216.247491v621.62797c0.627527 68.274907 56.226394 123.371754 124.501301 123.371754h419.689872c-76.934776-117.347497-55.222352-273.35064 50.829665-364.969542 105.926511-91.744407 263.435718-90.865869 368.483691 1.882581V216.247491c-0.125505-33.007906-13.303567-64.635252-36.773066-87.853742-23.469499-23.343994-55.222352-36.39655-88.230257-36.271044zM643.57080464 715.633256H346.37414864v-96.388105h297.07115l0.125506 96.388105zM784.51330564 507.168879H346.37414864v-96.764621h438.139157V507.168879z" fill="" ></path><path d="M543.66855064 186.126208h248.500581c34.388464 0 62.250651-27.736681 62.376157-61.99964v-61.99964c0-16.566705-6.651783-32.380379-18.323781-44.052376s-27.611176-18.198275-44.177881-18.07277h-248.500582c-16.566705-0.125505-32.380379 6.400773-44.177881 18.07277-11.671997 11.671997-18.32378 27.48567-18.32378 44.052376v61.99964c0.502021 34.388464 28.364208 61.99964 62.627167 61.99964z m408.519896 403.123166c-119.983109 0-217.249751 97.266642-217.375257 217.249751s97.141137 217.375256 217.124246 217.500762 217.375256-97.015631 217.626267-216.99874c0.251011-57.732458-22.590962-113.205821-63.380199-153.995058-40.914742-40.914742-96.262599-63.88222-153.995057-63.756715zM1076.31323164 868.624271H890.18880564V695.677906h61.999641v104.043931h124.124785V868.624271z" fill="" ></path></symbol><symbol id="icon-loan-problem" viewBox="0 0 1365 1024"><path d="M765.269333 346.112c0-9.898667-7.850667-17.408-17.408-17.408H506.709333c-9.898667 0-17.408 7.850667-17.408 17.408 0 9.898667 7.850667 17.408 17.408 17.408h241.152c9.386667 0 17.408-7.850667 17.408-17.408z m-258.901333 43.690667c-9.898667 0-17.408 7.850667-17.408 17.408 0 9.898667 7.850667 17.408 17.408 17.408H658.773333c9.898667 0 17.408-7.850667 17.408-17.408 0-9.898667-7.850667-17.408-17.408-17.408h-152.405333z m322.730667 63.658666l-55.637334 55.466667-55.466666-55.466667c-6.997333-6.997333-18.090667-6.997333-24.746667 0-6.997333 6.997333-6.997333 18.090667 0 24.746667l45.056 45.056h-23.893333c-9.898667 0-17.408 7.850667-17.408 17.408 0 9.898667 7.850667 17.408 17.408 17.408H756.053333v13.994667h-41.642666c-9.898667 0-17.408 7.850667-17.408 17.408 0 9.898667 7.850667 17.408 17.408 17.408H756.053333v30.549333c0 9.898667 7.850667 17.408 17.408 17.408 9.898667 0 17.408-7.850667 17.408-17.408v-30.549333h41.642667c9.898667 0 17.408-7.850667 17.408-17.408 0-9.898667-7.850667-17.408-17.408-17.408h-41.642667V558.08h41.642667c9.898667 0 17.408-7.850667 17.408-17.408 0-9.898667-7.850667-17.408-17.408-17.408h-23.893333l45.056-45.056c6.997333-6.997333 6.997333-18.090667 0-24.746667-6.485333-6.997333-17.749333-6.997333-24.576 0z m109.909333-150.698666c0-26.282667-21.674667-47.616-47.957333-47.616H472.064c-26.282667 0-47.957333 21.674667-47.957333 47.616v449.365333c0 9.898667 7.850667 17.408 17.408 17.408h2.56c4.608 0 8.533333-1.536 12.117333-4.778667l46.250667-43.52 46.250666 43.52c3.242667 3.242667 7.509333 4.778667 12.117334 4.778667h4.949333c4.608 0 8.533333-1.536 12.117333-4.778667l46.250667-43.52 46.250667 43.52c3.242667 3.242667 7.509333 4.778667 12.117333 4.778667h4.949333c4.608 0 8.533333-1.536 12.117334-4.778667l46.762666-43.52 46.250667 43.52c3.584 3.242667 7.509333 4.778667 12.117333 4.778667 4.778667 0 9.557333-1.877333 12.8-5.632 6.656-6.997333 6.314667-18.090667-1.024-24.746667l-58.368-54.442666c-6.656-6.314667-17.066667-6.314667-23.893333 0L685.568 730.453333 636.586667 684.714667c-6.656-6.314667-17.066667-6.314667-23.893334 0L563.712 730.453333l-49.152-45.397333c-6.656-6.314667-17.066667-6.314667-23.893333 0l-31.402667 29.184v-411.306667c0-6.997333 5.632-12.8 12.8-12.8h418.986667c6.997333 0 12.8 5.632 12.8 12.8v408.576l0.341333 36.522667c0 9.557333 7.850667 17.408 17.408 17.408 9.898667 0 17.408-7.850667 17.408-17.749333V302.762667z" ></path><path d="M1153.877333 292.693333l-51.029333 16.213334C1133.226667 370.005333 1150.293333 438.954667 1150.293333 512c0 253.610667-205.482667 459.093333-459.093333 459.093333S232.106667 765.610667 232.106667 512 437.589333 52.906667 691.2 52.906667c58.368 0 114.176 10.922667 165.376 30.72l17.92-49.834667C817.664 11.946667 755.882667 0 691.2 0 408.405333 0 179.2 229.205333 179.2 512s229.205333 512 512 512 512-229.205333 512-512c0-78.506667-17.749333-152.917333-49.322667-219.306667z" ></path><path d="M1024.512 186.88h-37.546667c0-14.848 1.536-25.6 4.608-32.085333 3.754667-8.192 11.946667-16.725333 24.405334-25.6 11.776-8.192 17.578667-17.578667 17.578666-28.16 0-10.24-3.072-17.749333-9.045333-22.528-4.778667-3.754667-10.922667-5.632-18.432-5.632-8.704 0-15.701333 2.389333-20.992 7.338666-5.290667 4.778667-8.533333 13.312-9.898667 25.429334l-40.106666 0.170666c0-22.528 7.509333-39.936 22.528-51.882666 12.288-9.898667 27.648-14.848 45.909333-14.848 22.698667 0 40.789333 5.632 54.101333 16.725333 12.458667 10.410667 18.773333 25.088 18.773334 43.861333 0 11.093333-2.901333 20.650667-8.874667 29.013334-4.949333 6.826667-13.482667 14.677333-25.6 23.381333-6.656 4.778667-11.093333 9.045333-13.141333 12.8-2.901333 5.290667-4.266667 12.458667-4.266667 22.016z m2.901333 19.114667v40.106666h-41.642666v-40.106666H1027.413333z" ></path></symbol><symbol id="icon-registration-problem" viewBox="0 0 1365 1024"><path d="M826.538667 579.413333c13.994667 0 25.258667-11.264 25.258666-25.258666 0-8.192-3.754667-15.36-9.728-19.626667v-0.341333c-19.285333-15.018667-40.789333-27.477333-64.170666-36.181334 29.696-25.6 48.64-62.976 48.64-105.130666 0-76.629333-62.122667-138.752-138.752-138.752s-138.752 62.122667-138.752 138.752c0 42.154667 18.773333 79.872 48.64 105.130666-94.549333 36.181333-161.792 127.829333-161.792 235.178667 0 13.994667 11.264 25.258667 25.258666 25.258667s25.258667-11.264 25.258667-25.258667c0-111.274667 90.453333-201.728 201.728-201.728 45.568 0 87.552 15.36 121.344 40.789333 4.266667 4.608 10.581333 7.168 17.066667 7.168z m-138.410667-98.645333c-48.64 0-88.234667-39.594667-88.234667-88.234667 0-48.64 39.594667-88.234667 88.234667-88.234666s88.234667 39.594667 88.234667 88.234666c0 48.64-39.594667 88.234667-88.234667 88.234667zM922.965333 663.893333h-37.717333v-37.717333c0-10.24-8.362667-18.944-18.944-18.944-10.581333 0-18.944 8.362667-18.944 18.944V663.893333h-37.717333c-10.581333 0-18.944 8.362667-18.944 18.944 0 10.24 8.362667 18.944 18.944 18.944h37.717333v37.717334c0 10.24 8.362667 18.944 18.944 18.944 10.24 0 18.944-8.362667 18.944-18.944v-37.717334h37.717333c10.24 0 18.944-8.362667 18.944-18.944-0.341333-10.581333-8.704-18.944-18.944-18.944z" ></path><path d="M1153.877333 292.693333l-51.029333 16.213334C1133.226667 370.005333 1150.293333 438.954667 1150.293333 512c0 253.610667-205.482667 459.093333-459.093333 459.093333S232.106667 765.610667 232.106667 512 437.589333 52.906667 691.2 52.906667c58.368 0 114.176 10.922667 165.376 30.72l17.92-49.834667C817.664 11.946667 755.882667 0 691.2 0 408.405333 0 179.2 229.205333 179.2 512s229.205333 512 512 512 512-229.205333 512-512c0-78.506667-17.749333-152.917333-49.322667-219.306667z" ></path><path d="M1024.512 186.88h-37.546667c0-14.848 1.536-25.6 4.608-32.085333 3.754667-8.192 11.946667-16.725333 24.405334-25.6 11.776-8.192 17.578667-17.578667 17.578666-28.16 0-10.24-3.072-17.749333-9.045333-22.528-4.778667-3.754667-10.922667-5.632-18.432-5.632-8.704 0-15.701333 2.389333-20.992 7.338666-5.290667 4.778667-8.533333 13.312-9.898667 25.429334l-40.106666 0.170666c0-22.528 7.509333-39.936 22.528-51.882666 12.288-9.898667 27.648-14.848 45.909333-14.848 22.698667 0 40.789333 5.632 54.101333 16.725333 12.458667 10.410667 18.773333 25.088 18.773334 43.861333 0 11.093333-2.901333 20.650667-8.874667 29.013334-4.949333 6.826667-13.482667 14.677333-25.6 23.381333-6.656 4.778667-11.093333 9.045333-13.141333 12.8-2.901333 5.290667-4.266667 12.458667-4.266667 22.016z m2.901333 19.114667v40.106666h-41.642666v-40.106666H1027.413333z" ></path></symbol><symbol id="icon-application-problem" viewBox="0 0 1365 1024"><path d="M941.909333 491.349333c-4.949333-9.898667-4.949333-19.456-19.456-19.456-9.898667 0-19.456 9.898667-19.456 19.456v185.344c0 29.354667-24.405333 53.589333-48.981333 53.589334H512.341333c-29.354667 0-53.589333-29.354667-53.589333-58.538667V344.917333c0-29.354667 24.405333-53.589333 48.981333-53.589333H698.026667c9.898667 0 19.456-4.949333 19.456-19.456 0-9.898667-4.949333-19.456-14.506667-19.456H507.733333c-48.981333 0-87.893333 39.082667-87.893333 92.842667v331.605333c0 48.981333 39.082667 92.842667 87.893333 92.842667h346.453334c48.981333 0 87.893333-39.082667 87.893333-92.842667V491.349333z" ></path><path d="M629.589333 466.944v77.994667c0 9.898667 4.949333 14.506667 19.456 19.456H727.04c4.949333 0 9.898667-4.949333 14.506667-4.949334L931.84 364.032c4.949333-4.949333 4.949333-19.456 0-24.405333l-77.994667-77.653334c-4.949333-4.949333-19.456-4.949333-24.405333 0L639.317333 447.488c-9.728 9.557333-9.728 14.506667-9.728 19.456z m209.92-180.736l63.488 63.488-185.514666 185.344-58.538667-4.949333-4.949333-58.538667 185.514666-185.344z" ></path><path d="M1153.877333 292.693333l-51.029333 16.213334C1133.226667 370.005333 1150.293333 438.954667 1150.293333 512c0 253.610667-205.482667 459.093333-459.093333 459.093333S232.106667 765.610667 232.106667 512 437.589333 52.906667 691.2 52.906667c58.368 0 114.176 10.922667 165.376 30.72l17.92-49.834667C817.664 11.946667 755.882667 0 691.2 0 408.405333 0 179.2 229.205333 179.2 512s229.205333 512 512 512 512-229.205333 512-512c0-78.506667-17.749333-152.917333-49.322667-219.306667z" ></path><path d="M1024.512 186.88h-37.546667c0-14.848 1.536-25.6 4.608-32.085333 3.754667-8.192 11.946667-16.725333 24.405334-25.6 11.776-8.192 17.578667-17.578667 17.578666-28.16 0-10.24-3.072-17.749333-9.045333-22.528-4.778667-3.754667-10.922667-5.632-18.432-5.632-8.704 0-15.701333 2.389333-20.992 7.338666-5.290667 4.778667-8.533333 13.312-9.898667 25.429334l-40.106666 0.170666c0-22.528 7.509333-39.936 22.528-51.882666 12.288-9.898667 27.648-14.848 45.909333-14.848 22.698667 0 40.789333 5.632 54.101333 16.725333 12.458667 10.410667 18.773333 25.088 18.773334 43.861333 0 11.093333-2.901333 20.650667-8.874667 29.013334-4.949333 6.826667-13.482667 14.677333-25.6 23.381333-6.656 4.778667-11.093333 9.045333-13.141333 12.8-2.901333 5.290667-4.266667 12.458667-4.266667 22.016z m2.901333 19.114667v40.106666h-41.642666v-40.106666H1027.413333z" ></path></symbol><symbol id="icon-repayment-problem" viewBox="0 0 1365 1024"><path d="M1153.877333 292.693333l-51.029333 16.213334C1133.226667 370.005333 1150.293333 438.954667 1150.293333 512c0 253.610667-205.482667 459.093333-459.093333 459.093333S232.106667 765.610667 232.106667 512 437.589333 52.906667 691.2 52.906667c58.368 0 114.176 10.922667 165.376 30.72l17.92-49.834667C817.664 11.946667 755.882667 0 691.2 0 408.405333 0 179.2 229.205333 179.2 512s229.205333 512 512 512 512-229.205333 512-512c0-78.506667-17.749333-152.917333-49.322667-219.306667z" ></path><path d="M946.005333 315.050667c-7.850667-8.362667-25.258667-19.456-37.034666-19.456H475.306667c-25.258667 0-61.44 31.744-61.44 57.173333v331.093333c1.877333 26.282667 34.816 54.954667 61.44 55.125334h314.709333c11.946667 0 21.674667-9.728 21.674667-21.674667v-1.706667c0-11.946667-9.728-21.674667-21.674667-21.674666H484.181333c-14.848 0-27.136-12.117333-27.136-27.136V465.578667h458.752V552.96c0.853333 10.752 9.728 19.114667 20.650667 19.114667h1.536c11.434667 0 20.650667-9.386667 20.650667-20.650667V352.597333c1.024-11.264-4.437333-29.013333-12.629334-37.546666z m-488.96 107.690666v-52.736c0-14.848 12.117333-27.136 27.136-27.136h404.48c14.848 0 27.136 12.117333 27.136 27.136v52.736H457.045333z" ></path><path d="M686.933333 503.808H507.221333c-9.386667 0-17.066667 7.68-17.066666 17.066667v1.365333c0 9.386667 7.68 17.066667 17.066666 17.066667h179.712c9.386667 0 17.066667-7.68 17.066667-17.066667v-1.365333c0-9.386667-7.68-17.066667-17.066667-17.066667z m-103.765333 66.56h-75.946667c-9.386667 0-17.066667 7.68-17.066666 17.066667v1.365333c0 9.386667 7.68 17.066667 17.066666 17.066667h75.946667c9.386667 0 17.066667-7.68 17.066667-17.066667v-1.365333c0-9.386667-7.68-17.066667-17.066667-17.066667z" ></path><path d="M943.445333 613.205333h-88.746666c-2.218667-0.341333-4.608 0.341333-6.144 1.706667-1.877333 1.365333-2.901333 3.584-3.242667 5.802667v85.504c0 5.12 4.266667 9.386667 9.386667 9.386666s9.386667-4.266667 9.386666-9.386666V636.586667c37.717333 20.821333 58.197333 48.981333 58.197334 88.405333 0.341333 5.12 4.949333 9.386667 10.410666 9.386667 4.949333 0 9.045333-3.925333 9.386667-8.704 0-39.594667-15.530667-74.752-48.469333-93.525334h49.664c4.949333-0.341333 8.362667-4.608 8.362666-9.386666 0.341333-4.949333-3.242667-9.216-8.192-9.557334z" ></path><path d="M1024.512 186.88h-37.546667c0-14.848 1.536-25.6 4.608-32.085333 3.754667-8.192 11.946667-16.725333 24.405334-25.6 11.776-8.192 17.578667-17.578667 17.578666-28.16 0-10.24-3.072-17.749333-9.045333-22.528-4.778667-3.754667-10.922667-5.632-18.432-5.632-8.704 0-15.701333 2.389333-20.992 7.338666-5.290667 4.778667-8.533333 13.312-9.898667 25.429334l-40.106666 0.170666c0-22.528 7.509333-39.936 22.528-51.882666 12.288-9.898667 27.648-14.848 45.909333-14.848 22.698667 0 40.789333 5.632 54.101333 16.725333 12.458667 10.410667 18.773333 25.088 18.773334 43.861333 0 11.093333-2.901333 20.650667-8.874667 29.013334-4.949333 6.826667-13.482667 14.677333-25.6 23.381333-6.656 4.778667-11.093333 9.045333-13.141333 12.8-2.901333 5.290667-4.266667 12.458667-4.266667 22.016z m2.901333 19.114667v40.106666h-41.642666v-40.106666H1027.413333z" ></path></symbol><symbol id="icon-arrow" viewBox="0 0 1024 1024"><path d="M406.848 887.32799999L756.99200001 533.952c0.512-0.512 0.672-1.216 1.15199999-1.76 0.128-0.128 0.31999999-0.16 0.448-0.288 12.41600001-12.576 12.352-32.832-0.19200001-45.28L405.056 136.512c-12.576-12.448-32.8-12.352-45.248 0.192-6.17600001 6.24-9.28 14.4-9.28 22.528 0 8.224 3.168 16.48 9.472 22.72l330.816 327.84-329.408 332.48c-6.17600001 6.24-9.28 14.368-9.28 22.528 0 8.25600001 3.168 16.48 9.472 22.72C374.144 899.968 394.4 899.872 406.848 887.32799999z" ></path></symbol><symbol id="icon-caution" viewBox="0 0 1293 1024"><path d="M649.98003113 31.31652843c-122.35687406 0-244.71374813 46.53572906-338.32010063 140.14208156C125.11584394 358.13641969 125.11584394 661.55472375 311.65993051 848.09881031c93.60635156 93.60635156 215.96322563 140.14208062 338.32010062 140.14208063s244.71374813-46.53572906 338.32009969-140.14208063c186.54408656-186.54408656 186.54408656-490.09611375 0-676.64020032-93.60635156-93.60635156-215.96322563-140.14208062-338.32009969-140.14208156z m0 47.87296314c56.03008781 0 110.72294156 10.96531594 161.93898844 31.42498967 53.35562063 21.93063094 101.09485969 53.35562063 142.14793126 94.94358563 41.72168813 41.05307156 73.14667781 88.79231062 95.07730874 142.14793126 20.45967375 51.21604688 31.42498969 105.90890063 31.42498969 161.93898844 0 56.03008781-10.96531594 110.72294156-31.42498969 161.93898843-21.93063094 53.35562063-53.35562063 101.09485969-95.07730874 142.14793219-41.05307156 41.72168813-88.79231062 73.14667781-142.14793126 94.94358469-51.21604688 20.45967375-105.90890063 31.42498969-161.93898844 31.42498968-56.03008781 0-110.72294156-10.96531594-161.93898938-31.42498968-53.35562063-21.93063094-101.09485969-53.35562063-142.14793124-94.94358469-41.72168813-41.05307156-73.14667781-88.79231062-94.94358563-142.14793219-20.59339781-51.08232375-31.55871281-105.7751775-31.55871281-161.80526532 0-56.03008781 10.96531594-110.72294156 31.42498968-161.93898844 21.93063094-53.35562063 53.35562063-101.09485969 94.94358563-142.14793124 41.05307156-41.72168813 88.79231062-73.14667781 142.14793126-94.94358562 51.34977-20.59339781 106.04262469-31.55871281 162.07271249-31.55871281z m0 0" ></path><path d="M655.73013488 725.60821312c14.17467656 0 26.34350156 4.94776406 36.50647781 14.84329219 10.16297531 9.89552906 15.24446344 21.93063094 15.2444625 36.10530751 0 14.44212281-5.08148812 26.47722563-15.2444625 36.23903062-10.16297531 9.761805-22.33180125 14.57584594-36.50647781 14.57584594-14.17467656 0-26.34350156-4.81404094-36.37275375-14.57584594-10.16297531-9.761805-15.24446344-21.79690781-15.2444625-36.23903062 0-14.17467656 5.08148812-26.20977844 15.2444625-36.10530751 10.02925219-9.89552906 22.19807812-14.84329313 36.37275375-14.84329219z m39.18094501-528.20727187l-8.8257422 443.69410781h-63.25114875l-8.82574219-443.69410781h80.90263314z m0 0" ></path><path d="M649.84630708 988.10716782C385.60894801 988.10716782 170.58178614 773.08000594 170.58178614 508.84264688 170.58178614 244.60528781 385.60894801 29.57812499 649.84630708 29.57812499 914.08366613 29.57812499 1129.11082895 244.60528781 1129.11082895 508.84264688c0 264.23735906-215.02716281 479.26452188-479.26452187 479.26452094z m0-889.79523564c-226.39364812 0-410.53071469 184.13706656-410.5307147 410.5307147 0 226.259925 184.13706656 410.53071469 410.5307147 410.53071469 226.259925 0 410.53071469-184.13706656 410.53071468-410.53071469s-184.27078969-410.53071469-410.53071468-410.5307147z m0 0" ></path></symbol><symbol id="icon-emoji" viewBox="0 0 1293 1024"><path d="M507.75297645 474.23214313c0 23.4375-23.4375 38.97321469-38.97321469 38.97321375-23.4375 0-38.97321469-15.66964313-38.97321375-38.97321375v-70.17857157c0-23.4375 15.53571469-38.97321469 38.97321375-38.97321469s38.97321469 15.53571469 38.97321469 38.97321469v70.17857156z m358.92857156 0c0 23.4375-15.53571469 38.97321469-38.97321469 38.97321375s-38.97321469-15.66964313-38.97321469-38.97321375v-70.17857157c0-23.4375 15.66964313-38.97321469 38.97321469-38.97321469 23.4375 0 38.97321469 15.53571469 38.97321469 38.97321469v70.17857156zM492.21726176 731.64285688c-7.76785688 0-15.66964313 0-23.4375-7.76785688-15.66964313-15.66964313-15.66964313-38.97321469 0-54.64285688 38.97321469-46.875 109.28571469-78.08035687 179.46428625-78.08035781 70.17857156 0 140.49107156 31.20535687 187.23214219 78.08035781 15.66964313 15.53571469 15.66964313 38.97321469 0 54.64285688-15.53571469 15.53571469-38.97321469 15.53571469-54.64285688 0-70.17857156-78.08035687-195-70.17857156-265.3125 0-7.76785688 7.76785688-15.53571469 7.76785688-23.30357156 7.76785687z m0-1e-8" ></path><path d="M648.24404801 992C383.6011902 992 168.24404801 776.64285688 168.24404801 512 168.24404801 247.35714312 383.6011902 32 648.24404801 32 912.88690488 32 1128.24404801 247.35714312 1128.24404801 512c0 264.64285688-215.35714312 480-480 480z m0-891.16071469c-226.74107156 0-411.16071469 184.41964312-411.16071469 411.16071469 0 226.60714312 184.41964312 411.16071469 411.16071469 411.16071469 226.60714312 0 411.16071469-184.41964312 411.16071375-411.16071469s-184.55357156-411.16071469-411.16071375-411.16071469z m0 0" ></path></symbol><symbol id="icon-waitting" viewBox="0 0 1362 1024"><path d="M681.83226764 236.840918c18.741883 0 34.017801-15.275918 34.017801-34.017802V36.328444c0-18.741883-15.275918-34.017801-34.017801-34.017801s-34.017801 15.275918-34.017801 34.017801V202.823116c0 18.741883 15.275918 34.017801 34.017801 34.017802z m-241.847311 82.412937c13.222013 13.222013 34.788016 13.222013 48.010029 0s13.222013-34.788016 0-48.010029l-117.714429-117.714429c-13.222013-13.222013-34.788016-13.222013-48.010029 0s-13.222013 34.788016 0 48.010029l117.714429 117.714429z m-30.680206 195.249342c0-18.741883-15.275918-34.017801-34.017801-34.017801H208.79227764c-18.741883 0-34.017801 15.275918-34.017801 34.017801s15.275918 34.017801 34.017801 34.017801h166.494672c18.741883 0 34.017801-15.275918 34.017801-34.017801z m82.412938 193.837282c-13.222013-13.222013-34.788016-13.222013-48.010029 0L325.99323064 826.054908c-13.222013 13.222013-13.222013 34.788016 0 48.010029 13.222013 13.222013 34.788016 13.222013 48.010029 0l117.714429-117.714429c13.222013-13.222013 13.222013-34.788016 0-48.010029z m195.249342 78.690234c-18.741883 0-34.017801 15.275918-34.017802 34.017801v166.494673c0 18.741883 15.275918 34.017801 34.017802 34.017801s34.017801-15.275918 34.017801-34.017801V821.048514c0-18.741883-15.275918-34.017801-34.017801-34.017801zM928.81434164 704.617776c-13.222013-13.222013-34.788016-13.222013-48.010029 0s-13.222013 34.788016 0 48.010029l117.714429 117.714429c13.222013 13.222013 34.788016 13.222013 48.010029 0s13.222013-34.788016 0-48.010029L928.81434164 704.617776z m231.192679-229.138774H993.51234764c-18.741883 0-34.017801 15.275918-34.017801 34.017801s15.275918 34.017801 34.017801 34.017801h166.494673c18.741883 0 34.017801-15.275918 34.017801-34.017801s-15.275918-34.017801-34.017801-34.017801zM877.08160964 315.659521c13.222013 13.222013 34.788016 13.222013 48.010029 0l117.714429-117.714429c13.222013-13.222013 13.222013-34.788016 0-48.010029-13.222013-13.222013-34.788016-13.222013-48.010029 0l-117.714429 117.714429c-13.222013 13.093644-13.222013 34.788016 0 48.010029z" ></path></symbol><symbol id="icon-loan" viewBox="0 0 1024 1024"><path d="M511.2 63.9C264.3 63.9 64.1 264.1 64.1 511s200.2 447.1 447.1 447.1S958.3 757.9 958.3 511 758.1 63.9 511.2 63.9z m0 835.8c-214.7 0-388.7-174.1-388.7-388.7s174.1-388.7 388.7-388.7S900 296.3 900 511 725.9 899.7 511.2 899.7z" fill="" ></path><path d="M800.2 483.5L538.7 222c-15.1-15.1-39.8-15.1-54.9 0L222.3 483.5c-15.1 15.1-15.1 39.8 0 54.9l261.5 261.5c15.1 15.1 39.8 15.1 54.9 0l261.5-261.5c15-15.1 15-39.8 0-54.9z m-289 263.3L275.4 511l235.8-235.8L747 511 511.2 746.8z" fill="" ></path></symbol><symbol id="icon-loan-fill" viewBox="0 0 1024 1024"><path d="M512.3 65C265.4 65 65.2 265.2 65.2 512.1s200.1 447.1 447.1 447.1 447.1-200.1 447.1-447.1S759.2 65 512.3 65z m287.5 453.5L518.7 799.6c-3.5 3.5-9.2 3.5-12.7 0L224.8 518.5c-3.5-3.5-3.5-9.2 0-12.7l281.1-281.1c3.5-3.5 9.2-3.5 12.7 0l281.1 281.1c3.6 3.5 3.6 9.2 0.1 12.7z" ></path></symbol><symbol id="icon-identification" viewBox="0 0 1365 1024"><path d="M1219.925333 590.506667c-1.536 15.018667-15.36 22.528-26.965333 29.354666-10.922667 6.314667-21.845333 12.629333-32.597333 18.944-17.408 10.069333-34.816 20.138667-52.224 30.378667-21.845333 12.629333-43.52 25.429333-65.365334 37.888l-72.192 41.984c-24.234667 13.994667-48.298667 28.16-72.704 42.154667-22.186667 12.970667-44.373333 25.770667-66.56 38.741333-18.090667 10.581333-36.181333 20.992-54.272 31.573333-11.946667 6.826667-23.722667 13.824-35.669333 20.650667-9.045333 5.12-17.408 10.410667-27.648 13.312-26.624 7.68-56.149333 5.12-80.213333-8.874667-8.533333-5.12-17.408-9.898667-25.941334-15.018666-15.872-9.216-31.573333-18.090667-47.445333-27.306667-20.821333-11.946667-41.472-24.064-62.293333-35.84-23.552-13.653333-47.445333-27.306667-70.997334-40.96-24.405333-13.994667-48.810667-28.330667-73.386666-42.325333-23.04-13.312-46.08-26.624-69.290667-39.936l-59.050667-33.962667c-13.994667-8.192-28.330667-16.213333-42.325333-24.405333-6.485333-3.754667-12.8-7.338667-19.285333-11.264-10.069333-5.802667-20.138667-15.189333-20.138667-27.648 0 11.434667 0 22.869333-0.170667 34.474666 0 4.096-0.341333 8.362667 0 12.629334 0.853333 11.093333 9.557333 19.626667 18.773334 25.088 5.632 3.413333 11.264 6.485333 17.066666 9.898666 14.677333 8.533333 29.525333 17.066667 44.202667 25.6 21.333333 12.288 42.496 24.576 63.829333 36.864 25.258667 14.677333 50.688 29.184 75.946667 43.861334 26.282667 15.36 52.736 30.378667 79.189333 45.738666 25.088 14.506667 50.176 29.013333 75.264 43.349334 20.821333 11.946667 41.642667 24.064 62.464 36.010666 13.994667 8.192 28.330667 16.213333 42.325334 24.405334 8.192 4.608 16.213333 9.898667 25.088 13.312 27.648 10.069333 60.245333 7.850667 85.674666-6.997334 9.728-5.632 19.456-11.264 29.013334-16.896 17.92-10.410667 35.84-20.821333 53.589333-31.061333 23.381333-13.482667 46.592-26.965333 69.973333-40.618667 26.112-15.189333 52.224-30.378667 78.165334-45.397333l78.165333-45.397333c23.381333-13.653333 46.762667-27.136 70.144-40.789334 18.090667-10.581333 36.352-20.992 54.442667-31.744 9.898667-5.802667 20.138667-11.605333 30.037333-17.408 3.072-1.706667 6.144-3.584 9.045333-5.632 7.68-5.802667 13.653333-13.653333 13.824-23.552 0.170667-5.12 0-9.898667 0-15.018666 0-9.898667 0-20.138667 0.170667-30.037334 0.512 0.512 0.341333 1.194667 0.341333 1.877334 0 0.512 0-0.170667 0 0z" fill="#17BEFF" ></path><path d="M1200.64 561.152c25.941333 15.018667 26.112 39.424 0.341333 54.442667L730.624 888.832c-25.770667 15.018667-67.925333 15.018667-93.866667 0l-473.429333-273.066667c-25.941333-15.018667-26.112-39.424-0.341333-54.442666L633.173333 288.085333c25.770667-15.018667 67.925333-15.018667 93.866667 0l473.6 273.066667z" fill="#CCE9FC" ></path><path d="M814.421333 80.384c-0.170667 0-0.170667 0 0 0-0.341333-0.341333-0.682667-0.341333-1.024-0.512h-0.170666c-0.170667 0-0.341333-0.170667-0.341334-0.170667-0.170667 0-0.341333-0.170667-0.512-0.170666-0.170667 0-0.341333-0.170667-0.512-0.170667-0.170667 0-0.341333 0-0.341333-0.170667h-0.170667c-0.341333 0-0.682667-0.170667-1.024-0.170666h-2.56c-0.170667 0-0.341333 0-0.341333 0.170666-0.341333 0-0.512 0.170667-0.853333 0.170667-0.170667 0-0.341333 0-0.341334 0.170667-0.170667 0-0.341333 0.170667-0.341333 0.170666-0.341333 0.170667-0.853333 0.341333-1.365333 0.341334-0.170667 0-0.341333 0.170667-0.341334 0.170666-0.170667 0-0.170667 0.170667-0.341333 0.170667-0.853333 0.341333-1.536 0.682667-2.389333 1.024l-418.133334 241.493333c-1.024 0.512-1.877333 1.194667-2.901333 1.877334-0.170667 0.170667-0.341333 0.341333-0.512 0.341333-0.853333 0.682667-1.706667 1.536-2.56 2.389333-0.170667 0-0.170667 0.170667-0.341333 0.170667l-0.341334 0.341333c-0.341333 0.341333-0.853333 0.853333-1.194666 1.365334l-0.341334 0.341333-0.341333 0.341333c-0.341333 0.341333-0.512 0.512-0.682667 0.853334-0.170667 0.170667-0.341333 0.341333-0.341333 0.512-0.170667 0.170667-0.341333 0.341333-0.341333 0.512-0.170667 0.341333-0.341333 0.341333-0.512 0.682666l-0.341334 0.341334c-0.170667 0.341333-0.341333 0.512-0.512 0.853333-0.170667 0.170667-0.341333 0.341333-0.341333 0.512s-0.170667 0.170667-0.170667 0.341333c-0.341333 0.512-0.682667 1.024-1.024 1.706667v0.170667c0 0.170667-0.170667 0.341333-0.170666 0.341333-0.341333 0.341333-0.341333 0.853333-0.682667 1.024-0.170667 0.170667-0.170667 0.341333-0.341333 0.512-0.170667 0.170667-0.170667 0.341333-0.341334 0.512-0.170667 0.170667-0.170667 0.341333-0.341333 0.512-0.170667 0.341333-0.341333 0.853333-0.512 1.194667 0 0.170667-0.170667 0.170667-0.170667 0.341333v0.170667c-0.341333 0.512-0.341333 1.024-0.682666 1.706666 0 0.170667 0 0.170667-0.170667 0.341334s-0.170667 0.341333-0.341333 0.512c-0.170667 0.341333-0.341333 0.512-0.341334 0.853333-0.170667 0.341333-0.170667 0.341333-0.170666 0.682667-0.170667 0.341333-0.170667 0.512-0.341334 0.853333 0 0.170667-0.170667 0.341333-0.170666 0.512-0.170667 0.341333-0.170667 0.512-0.170667 0.853333-0.170667 0.341333-0.170667 0.682667-0.341333 1.024 0 0.170667 0 0.341333-0.170667 0.341334 0 0.341333-0.170667 0.341333-0.170667 0.682666-0.170667 0.512-0.170667 1.024-0.341333 1.536 0 0.170667 0 0.341333-0.170667 0.341334v0.341333c-0.170667 1.024-0.341333 2.218667-0.341333 3.242667l0.853333 287.744c0 2.901333 0.512 5.290667 1.536 7.338666 1.024 2.048 2.389333 3.584 3.925334 4.437334l20.138666 11.776c-3.242667-1.877333-5.461333-5.973333-5.461333-11.946667l-0.512-288.085333c0-1.024 0.170667-2.218667 0.341333-3.242667 0-0.341333 0-0.512 0.170667-0.853333 0.170667-0.512 0.170667-1.024 0.341333-1.536 0-0.341333 0.170667-0.682667 0.170667-1.024 0.170667-0.341333 0.170667-0.682667 0.341333-1.024 0.170667-0.341333 0.341333-0.853333 0.341334-1.365334 0.170667-0.341333 0.170667-0.512 0.341333-0.853333l0.512-1.536c0.170667-0.170667 0.170667-0.341333 0.341333-0.512l0.853334-2.048c0-0.170667 0.170667-0.170667 0.170666-0.341333 0.341333-0.512 0.512-1.194667 0.853334-1.706667 0.170667-0.170667 0.170667-0.341333 0.341333-0.512 0.341333-0.512 0.512-1.024 1.024-1.706667 0-0.170667 0.170667-0.341333 0.170667-0.341333 0.341333-0.682667 0.853333-1.194667 1.194666-1.877333 0.170667-0.170667 0.341333-0.341333 0.341334-0.512 0.341333-0.341333 0.512-0.853333 1.024-1.365334 0.170667-0.341333 0.341333-0.341333 0.512-0.682666 0.341333-0.341333 0.512-0.682667 0.853333-1.024 0.341333-0.341333 0.512-0.512 0.682667-0.853334 0.341333-0.341333 0.341333-0.512 0.682666-0.853333s0.853333-0.853333 1.194667-1.365333c0.170667-0.341333 0.341333-0.341333 0.682667-0.682667 0.853333-0.853333 1.706667-1.706667 2.56-2.389333 0.170667-0.170667 0.341333-0.341333 0.512-0.341334 1.024-0.682667 1.877333-1.365333 2.901333-1.877333l417.962667-240.64c0.853333-0.341333 1.536-0.853333 2.389333-1.024 0.341333-0.170667 0.512-0.170667 0.682667-0.341333l1.194666-0.341334c0.341333-0.170667 0.512-0.170667 0.853334-0.341333 0.341333 0 0.512-0.170667 0.853333-0.170667s0.682667-0.170667 1.024-0.170666h2.048c0.341333 0 1.024 0.170667 1.365333 0.170666 0.170667 0 0.341333 0 0.341334 0.170667 0.341333 0.170667 0.682667 0.170667 1.024 0.341333 0.170667 0 0.341333 0.170667 0.341333 0.170667 0.341333 0.170667 0.853333 0.341333 1.194667 0.512l-20.821334-11.776z" fill="#0092F1" ></path><path d="M821.418667 93.525333c10.24-5.802667 18.602667-1.024 18.602666 10.581334l0.853334 287.744c0 11.776-8.362667 26.112-18.432 31.914666L404.48 664.917333c-10.24 5.802667-18.602667 1.024-18.602667-10.581333l-0.853333-287.744c0-11.776 8.362667-26.112 18.432-31.914667L821.418667 93.525333z" fill="#17BEFF" ></path><path d="M490.837333 434.517333c23.210667-13.312 41.984-3.072 41.984 23.210667v3.072c0 10.410667-18.773333 21.504-41.984 34.986667l-26.965333 15.530666c-23.210667 13.312-41.984 24.234667-41.984 13.482667v-3.072c-0.170667-26.282667 18.773333-58.368 41.813333-71.68l27.136-15.530667z" fill="#007CCD" ></path><path d="M427.008 533.504c0 1.365333 0.341333 2.389333 1.024 3.072 0.341333 0.341333 0.341333 0.341333 0.682667 0.512l14.677333 8.533333c-1.024-0.682667-1.706667-1.877333-1.706667-3.754666v-3.072l-14.677333-8.533334v3.242667z" fill="#ACC5EA" ></path><path d="M525.994667 440.32c-0.170667 0-0.170667-0.170667-0.341334-0.170667l-2.048-1.024c-0.170667 0-0.341333-0.170667-0.341333-0.170666l-0.682667-0.341334c-0.341333-0.170667-0.682667-0.341333-1.024-0.341333-0.341333-0.170667-0.853333-0.170667-1.194666-0.341333-0.341333 0-0.341333-0.170667-0.682667-0.170667-0.170667 0-0.341333 0-0.341333-0.170667-0.853333-0.170667-1.706667-0.341333-2.56-0.341333h-2.730667c-0.341333 0-0.512 0-0.682667 0.170667-0.341333 0-0.853333 0.170667-1.194666 0.170666s-0.682667 0-1.024 0.170667c-0.341333 0-0.682667 0.170667-1.024 0.341333-0.512 0.170667-1.024 0.341333-1.706667 0.341334-0.341333 0.170667-0.512 0.170667-1.024 0.170666-0.682667 0.170667-1.536 0.341333-2.389333 0.682667h-0.170667l-2.56 1.024-1.024 0.512c-0.341333 0.170667-0.682667 0.341333-1.024 0.341333-1.194667 0.512-2.56 1.194667-3.925333 2.048l-26.965334 15.530667c-1.365333 0.853333-2.730667 1.706667-3.925333 2.56-0.341333 0.341333-0.853333 0.682667-1.194667 1.024-1.024 0.682667-1.706667 1.194667-2.56 2.048-0.512 0.341333-1.024 0.853333-1.536 1.194667-0.853333 0.682667-1.706667 1.365333-2.389333 2.048-0.512 0.341333-1.024 1.024-1.536 1.365333-0.341333 0.341333-0.682667 0.512-1.024 1.024l-1.194667 1.024c-1.024 1.024-1.877333 2.048-2.901333 3.072l-1.024 1.024c-0.170667 0.341333-0.341333 0.341333-0.512 0.682667l-1.706667 2.048c-0.341333 0.512-0.853333 1.024-1.194666 1.536-0.341333 0.341333-0.341333 0.512-0.682667 1.024s-0.853333 1.024-1.024 1.706666c-0.341333 0.341333-0.682667 0.853333-1.024 1.365334l-1.024 1.536c-0.341333 0.341333-0.512 1.024-1.024 1.365333-0.170667 0.341333-0.341333 0.512-0.512 0.682667-0.682667 1.024-1.365333 2.389333-2.048 3.413333v0.170667c-0.682667 1.024-1.365333 2.389333-1.877333 3.584-0.170667 0.341333-0.341333 0.512-0.341334 1.024-0.341333 0.341333-0.341333 0.853333-0.512 1.194666-0.341333 0.341333-0.512 1.024-0.682666 1.365334-0.341333 0.682667-0.682667 1.536-1.024 2.389333-0.170667 0.341333-0.341333 0.682667-0.341334 1.024 0 0.170667-0.170667 0.341333-0.170666 0.341333-0.512 1.194667-1.024 2.389333-1.536 3.754667 0 0.170667-0.170667 0.341333-0.170667 0.341333l-0.341333 1.194667c-0.341333 0.682667-0.512 1.536-0.853334 2.218667l-0.341333 1.194666c-0.170667 0.512-0.341333 1.024-0.512 1.706667l-0.341333 1.194667c-0.170667 0.512-0.341333 1.024-0.341334 1.706666l-0.512 2.048c0 0.341333-0.170667 0.512-0.341333 0.853334-0.170667 0.512-0.170667 1.024-0.341333 1.536l-0.512 3.072c0 0.341333-0.170667 0.682667-0.170667 1.024-0.170667 0.682667-0.170667 1.365333-0.170667 1.877333s-0.170667 1.024-0.170666 1.536c-0.170667 1.536-0.170667 3.072-0.170667 4.437333l14.677333 8.533334c0-1.536 0.170667-3.072 0.170667-4.437334 0-0.512 0.170667-1.024 0.170667-1.536 0.170667-1.024 0.341333-1.877333 0.341333-3.072l0.512-3.072c0.170667-0.853333 0.341333-1.706667 0.341333-2.389333l0.512-2.048c0.341333-1.024 0.512-2.048 0.853334-3.072 0.170667-0.512 0.341333-1.024 0.512-1.706667 0.341333-1.024 0.853333-2.389333 1.194666-3.413333l0.341334-1.194667c0.512-1.536 1.194667-3.072 1.877333-4.437333 0.170667-0.341333 0.341333-0.682667 0.341333-1.024 0.512-1.194667 1.024-2.389333 1.706667-3.754667 0.170667-0.341333 0.341333-0.853333 0.512-1.194666 0.853333-1.536 1.536-3.072 2.389333-4.437334v-0.170666c0.853333-1.365333 1.706667-2.901333 2.56-4.266667 0.341333-0.341333 0.512-1.024 1.024-1.365333l2.048-2.901334 1.194667-1.706666c0.512-0.853333 1.194667-1.706667 1.877333-2.389334l1.706667-2.048c0.512-0.512 1.024-1.024 1.536-1.706666 1.024-1.024 1.877333-2.048 2.901333-3.072l1.706667-1.706667c0.512-0.341333 1.024-1.024 1.536-1.365333 0.853333-0.682667 1.536-1.365333 2.389333-2.048 0.512-0.341333 1.024-0.853333 1.536-1.194667l2.56-2.048c0.341333-0.341333 0.853333-0.682667 1.194667-1.024 1.365333-1.024 2.730667-1.706667 3.925333-2.56l26.965334-15.530667c1.365333-0.853333 2.56-1.365333 3.925333-2.048 0.341333-0.170667 0.682667-0.341333 1.024-0.341333 1.194667-0.512 2.389333-1.024 3.754667-1.536h0.170666c1.024-0.341333 2.218667-0.682667 3.072-1.024 0.512-0.170667 1.194667-0.341333 1.706667-0.341333 0.682667-0.170667 1.536-0.341333 2.218667-0.341334 0.341333 0 0.853333-0.170667 1.194666-0.170666 1.024 0 1.706667-0.170667 2.56 0h0.682667c1.024 0 2.048 0.170667 3.072 0.341333 0.341333 0 0.512 0.170667 0.682667 0.170667 0.853333 0.170667 1.706667 0.341333 2.389333 0.682666 0.341333 0.170667 0.512 0.170667 0.682667 0.341334 1.024 0.341333 1.877333 0.853333 2.730666 1.365333l-14.506666-8.704z" fill="#ACC5EA" ></path><path d="M472.064 364.202667c17.92-10.410667 32.426667-2.389333 32.597333 18.090666 0.170667 20.309333-14.506667 45.056-32.426666 55.466667s-32.426667 2.389333-32.597334-18.090667c0-20.309333 14.336-45.056 32.426667-55.466666z" fill="#007CCD" ></path><path d="M510.634667 451.754667c23.210667-13.312 41.984-3.072 41.984 23.210666v3.072c0 10.410667-18.773333 21.504-41.984 34.986667l-26.965334 15.530667c-23.210667 13.312-41.984 24.234667-41.984 13.482666v-3.072c-0.170667-26.282667 18.773333-58.368 41.813334-71.68l27.136-15.530666z" fill="#FFFFFF" ></path><path d="M502.101333 371.541333s0.170667 0 0 0c1.024-0.341333 1.706667-0.512 2.56-0.682666 0.341333-0.170667 1.024-0.170667 1.365334-0.341334 0.512-0.170667 1.024-0.170667 1.706666-0.341333 0.341333 0 0.682667-0.170667 1.024-0.170667h2.56c0.853333 0 1.706667 0.170667 2.389334 0.341334 0.170667 0 0.341333 0.170667 0.512 0.170666 0.682667 0.170667 1.194667 0.341333 1.706666 0.512 0.170667 0 0.341333 0.170667 0.512 0.170667 0.682667 0.341333 1.536 0.682667 2.218667 1.024l-14.677333-8.533333s-0.170667 0-0.170667-0.170667l-1.706667-0.853333c-0.170667 0-0.341333-0.170667-0.341333-0.170667-0.170667-0.170667-0.341333-0.170667-0.512-0.170667-0.341333-0.170667-0.512-0.341333-0.853333-0.341333-0.341333-0.170667-0.682667-0.170667-1.024-0.341333-0.170667 0-0.341333-0.170667-0.512-0.170667h-0.341334c-0.682667-0.170667-1.365333-0.170667-1.877333-0.341333h-2.730667c-0.341333 0-0.682667 0-1.024 0.170666-0.341333 0-0.512 0-0.853333 0.170667-0.341333 0-0.512 0.170667-0.853333 0.170667-0.341333 0.170667-1.024 0.170667-1.365334 0.341333-0.341333 0-0.341333 0.170667-0.682666 0.170667-0.512 0.170667-1.024 0.341333-1.706667 0.512h-0.170667c-0.682667 0.341333-1.365333 0.341333-2.048 0.853333l-0.853333 0.341333-0.853333 0.341334c-1.024 0.341333-2.048 1.024-3.072 1.536-1.024 0.512-2.048 1.194667-3.072 1.877333-0.341333 0.341333-0.682667 0.512-1.024 0.682667l-2.048 1.536c-0.341333 0.341333-0.853333 0.682667-1.024 1.024-0.512 0.512-1.194667 1.024-1.706667 1.706666-0.341333 0.341333-0.853333 0.682667-1.024 1.024-0.341333 0.341333-0.512 0.341333-0.853333 0.682667l-0.682667 0.682667c-0.853333 0.853333-1.536 1.706667-2.218667 2.389333-0.341333 0.341333-0.512 0.512-0.682666 0.853333-0.170667 0.170667-0.341333 0.341333-0.341334 0.512-0.341333 0.512-0.853333 1.024-1.194666 1.536l-1.024 1.024c-0.170667 0.341333-0.341333 0.341333-0.512 0.682667-0.341333 0.341333-0.512 0.853333-1.024 1.194667-0.341333 0.341333-0.512 0.682667-0.853334 1.024l-0.341333 1.536c-0.341333 0.341333-0.341333 0.682667-0.682667 1.024-0.170667 0.170667-0.341333 0.341333-0.341333 0.512-0.512 0.853333-1.024 1.706667-1.706667 2.730666-0.512 1.024-1.024 1.706667-1.536 2.730667-0.170667 0.341333-0.341333 0.341333-0.341333 0.682667-0.170667 0.341333-0.341333 0.682667-0.341333 1.024l-0.512 1.024c-0.341333 0.512-0.512 1.194667-0.853334 1.706666-0.170667 0.341333-0.341333 0.512-0.341333 0.682667 0 0.170667-0.170667 0.170667-0.170667 0.341333l-1.194666 2.901334c0 0.170667-0.170667 0.341333-0.170667 0.341333-0.170667 0.341333-0.341333 0.512-0.341333 1.024-0.341333 0.512-0.341333 1.024-0.682667 1.706667-0.170667 0.341333-0.170667 0.682667-0.341333 1.024-0.170667 0.341333-0.341333 0.853333-0.341334 1.365333-0.170667 0.341333-0.341333 0.682667-0.341333 1.024-0.170667 0.341333-0.341333 1.024-0.341333 1.365333l-0.341334 1.706667c0 0.341333-0.170667 0.341333-0.170666 0.682667-0.170667 0.341333-0.170667 0.853333-0.170667 1.194666l-0.341333 2.389334c0 0.341333-0.170667 0.512-0.170667 0.853333 0 0.512-0.170667 1.024-0.170667 1.536 0 0.341333-0.170667 0.682667-0.170666 1.024-0.170667 1.194667-0.170667 2.389333-0.170667 3.584 0 9.898667 3.584 16.896 9.216 20.309333l14.677333 8.533334c-5.802667-3.242667-9.216-10.410667-9.216-20.309334 0-1.024 0-2.389333 0.170667-3.584 0-0.341333 0.170667-0.682667 0.170667-1.024 0.170667-0.853333 0.170667-1.536 0.341333-2.389333l0.341333-2.389333c0.170667-0.512 0.341333-1.194667 0.341334-1.706667l0.341333-1.706667c0.170667-0.853333 0.341333-1.536 0.682667-2.389333 0.170667-0.341333 0.341333-0.853333 0.341333-1.365333 0.341333-1.024 0.512-1.706667 1.024-2.730667 0.170667-0.341333 0.341333-0.512 0.341333-1.024 0.341333-1.194667 1.024-2.389333 1.365334-3.584 0.170667-0.341333 0.341333-0.512 0.341333-0.682667 0.341333-1.024 0.853333-1.877333 1.365333-2.901333 0.170667-0.341333 0.341333-0.682667 0.341334-1.024 0.512-1.024 1.194667-2.389333 1.877333-3.413333l2.048-3.242667c0.341333-0.341333 0.341333-0.682667 0.682667-1.024 0.512-0.682667 1.024-1.536 1.536-2.218667 0.341333-0.341333 0.512-0.853333 1.024-1.194666 0.341333-0.682667 1.024-1.194667 1.536-1.706667 0.341333-0.512 0.853333-1.024 1.194666-1.536 0.341333-0.341333 0.853333-0.853333 1.024-1.194667 0.682667-0.853333 1.536-1.706667 2.218667-2.389333l1.365333-1.365333 1.024-1.024c0.512-0.512 1.194667-1.024 1.706667-1.706667 0.341333-0.341333 0.853333-0.682667 1.024-1.024l2.048-1.536c0.341333-0.341333 0.682667-0.512 1.024-0.682667 1.024-0.682667 2.048-1.365333 3.072-1.877333l3.072-1.536 0.853333-0.341333c1.194667-0.512 2.048-0.853333 3.072-1.365334z" fill="#ACC5EA" ></path><path d="M495.445333 374.784c17.92-10.410667 32.426667-2.389333 32.597334 18.090667 0 20.309333-14.506667 45.056-32.426667 55.466666s-32.426667 2.389333-32.597333-18.090666c-0.170667-20.48 14.506667-45.226667 32.426666-55.466667z" fill="#FFFFFF" ></path><path d="M779.264 175.786667c6.485333-3.754667 11.776-0.682667 11.776 6.656s-5.12 16.554667-11.605333 20.138666L593.92 309.76c-6.485333 3.754667-11.776 0.682667-11.776-6.656s5.12-16.554667 11.605333-20.138667L779.264 175.786667z m-2.56 86.016c6.485333-3.754667 11.776-0.682667 11.776 6.656s-5.12 16.554667-11.605333 20.138666l-185.514667 107.008c-6.485333 3.754667-11.776 0.682667-11.776-6.656s5.12-16.554667 11.605333-20.138666l185.514667-107.008z" fill="#007CCD" ></path><path d="M791.210667 184.661333c-0.170667 0-0.170667 0 0 0-0.341333-0.170667-0.341333-0.341333-0.682667-0.341333h-0.170667s-0.170667 0-0.170666-0.170667c-0.170667 0-0.170667-0.170667-0.341334-0.170666s-0.341333 0-0.341333-0.170667h-0.341333c-0.341333 0-0.341333 0-0.682667-0.170667h-1.706667c-0.170667 0-0.341333 0-0.341333 0.170667h-0.341333c-0.170667 0-0.170667 0-0.341334 0.170667-0.341333 0.170667-0.512 0.170667-0.853333 0.341333-0.170667 0-0.170667 0-0.341333 0.170667 0 0-0.170667 0-0.170667 0.170666-0.512 0.341333-1.024 0.341333-1.536 0.682667l-185.344 107.008c-0.682667 0.341333-1.536 1.024-2.218667 1.536-0.341333 0.170667-0.341333 0.341333-0.682666 0.512-0.341333 0.341333-0.682667 0.512-1.024 1.024-0.170667 0.170667-0.341333 0.341333-0.341334 0.512l-0.853333 0.853333c-0.341333 0.341333-0.682667 0.853333-1.024 1.194667l-0.341333 0.341333c0 0.170667-0.170667 0.170667-0.170667 0.341334-0.170667 0.170667-0.170667 0.341333-0.341333 0.341333-0.341333 0.341333-0.341333 0.682667-0.682667 1.024-0.341333 0.341333-0.341333 0.682667-0.512 1.024v0.341333l-0.341333 0.853334-0.512 1.024c-0.170667 0.341333-0.341333 0.512-0.341334 1.024-0.170667 0.341333-0.341333 0.682667-0.341333 1.024-0.170667 0.341333-0.341333 0.682667-0.341333 1.024 0 0.170667-0.170667 0.341333-0.170667 0.512s0 0.170667-0.170667 0.341333c0 0.170667-0.170667 0.341333-0.170666 0.341333-0.170667 0.341333-0.341333 1.024-0.341334 1.365334s-0.170667 0.512-0.170666 0.853333c0 0.170667 0 0.341333-0.170667 0.341333 0 0.170667 0 0.341333-0.170667 0.341334-0.170667 0.853333-0.170667 1.536-0.170666 2.389333 0 1.706667 0.341333 3.413333 1.024 4.608 0.512 1.194667 1.536 2.218667 2.389333 2.901333l14.677333 8.533334c-2.048-1.194667-3.413333-3.754667-3.413333-7.509334 0-0.853333 0.170667-1.706667 0.341333-2.730666 0-0.170667 0-0.341333 0.170667-0.341334l0.512-2.56c0-0.170667 0-0.170667 0.170667-0.341333 0.341333-1.024 0.682667-1.877333 1.024-2.730667 0.341333-1.024 0.853333-1.877333 1.365333-2.730666v-0.170667l1.706667-2.389333c0-0.170667 0.170667-0.170667 0.170666-0.341334 0.512-0.682667 1.024-1.365333 1.706667-2.048l0.341333-0.341333c0.341333-0.512 1.024-1.024 1.536-1.365333 0.341333-0.170667 0.341333-0.341333 0.682667-0.512 0.682667-0.512 1.536-1.024 2.218667-1.536l184.661333-107.008c0.512-0.341333 1.024-0.512 1.536-0.682667 0.170667 0 0.341333-0.170667 0.341333-0.170667 0.341333-0.170667 0.512-0.170667 0.853334-0.341333 0.170667 0 0.341333-0.170667 0.512-0.170667 0.170667 0 0.341333-0.170667 0.341333-0.170666 0.341333 0 0.341333-0.170667 0.682667-0.170667h1.365333c0.341333 0 0.512 0 0.853333 0.170667h0.341334c0.341333 0 0.341333 0.170667 0.682666 0.170666 0 0 0.170667 0 0.170667 0.170667l0.853333 0.341333-14.506666-8.704z" fill="#ACC5EA" ></path><path d="M797.354667 194.048c6.485333-3.754667 11.776-0.682667 11.776 6.656s-5.12 16.554667-11.605334 20.138667l-185.344 107.008c-6.485333 3.754667-11.776 0.682667-11.776-6.656s5.12-16.554667 11.605334-20.138667l185.344-107.008z" fill="#FFFFFF" ></path><path d="M791.210667 268.629333c-0.170667 0-0.170667-0.170667 0 0-0.341333-0.170667-0.341333-0.341333-0.682667-0.341333h-0.170667s-0.170667 0-0.170666-0.170667c-0.170667 0-0.170667-0.170667-0.341334-0.170666s-0.341333 0-0.341333-0.170667h-0.341333c-0.341333 0-0.341333 0-0.682667-0.170667h-1.706667c-0.170667 0-0.341333 0-0.341333 0.170667h-0.341333c-0.170667 0-0.170667 0-0.341334 0.170667-0.341333 0.170667-0.512 0.170667-0.853333 0.341333-0.170667 0-0.170667 0-0.341333 0.170667 0 0-0.170667 0-0.170667 0.170666-0.512 0.341333-1.024 0.341333-1.536 0.682667l-185.344 107.008c-0.682667 0.341333-1.536 1.024-2.218667 1.536-0.341333 0.170667-0.341333 0.341333-0.682666 0.512-0.341333 0.341333-0.682667 0.512-1.024 1.024-0.170667 0.170667-0.341333 0.341333-0.341334 0.512l-0.853333 0.853333c-0.341333 0.341333-0.682667 0.853333-1.024 1.194667l-0.341333 0.341333c0 0.170667-0.170667 0.170667-0.170667 0.341334-0.170667 0.170667-0.170667 0.341333-0.341333 0.341333-0.341333 0.341333-0.341333 0.682667-0.682667 1.024-0.341333 0.341333-0.341333 0.682667-0.512 1.024v0.341333l-0.341333 0.853334-0.512 1.024c-0.170667 0.341333-0.341333 0.512-0.341334 1.024v0.170666c-0.170667 0.341333-0.341333 0.682667-0.341333 1.024-0.170667 0.341333-0.341333 0.682667-0.341333 1.024 0 0.170667-0.170667 0.341333-0.170667 0.512s0 0.170667-0.170667 0.341334c0 0.170667-0.170667 0.341333-0.170666 0.341333-0.170667 0.341333-0.341333 1.024-0.341334 1.365333s-0.170667 0.512-0.170666 0.853334c0 0.170667 0 0.341333-0.170667 0.341333 0 0.170667 0 0.341333-0.170667 0.341333-0.170667 0.853333-0.170667 1.536-0.170666 2.389334 0 3.754667 1.365333 6.314667 3.413333 7.509333l14.677333 8.533333c-2.048-1.194667-3.413333-3.754667-3.413333-7.509333 0-0.853333 0.170667-1.706667 0.341333-2.730667 0-0.170667 0-0.341333 0.170667-0.341333l0.512-2.56c0-0.170667 0-0.170667 0.170667-0.341333 0.341333-1.024 0.682667-1.877333 1.024-2.730667 0.341333-1.024 0.853333-1.706667 1.365333-2.730667v-0.170666l1.706667-2.389334c0-0.170667 0.170667-0.170667 0.170666-0.341333 0.512-0.682667 1.024-1.365333 1.706667-2.048l0.341333-0.341333c0.341333-0.512 1.024-1.024 1.536-1.365334 0.341333-0.170667 0.341333-0.341333 0.682667-0.512 0.682667-0.512 1.536-1.024 2.218667-1.536l184.661333-107.349333c0.512-0.341333 1.024-0.512 1.536-0.682667 0.170667 0 0.341333-0.170667 0.341333-0.170666 0.341333-0.170667 0.512-0.170667 0.853334-0.341334 0.170667 0 0.341333-0.170667 0.512-0.170666 0.170667 0 0.341333-0.170667 0.512-0.170667s0.341333-0.170667 0.682666-0.170667h1.365334c0.341333 0 0.512 0 0.853333 0.170667h0.341333c0.341333 0 0.341333 0.170667 0.682667 0.170667 0 0 0.170667 0 0.170667 0.170666l0.853333 0.341334-14.677333-8.533334z" fill="#ACC5EA" ></path><path d="M797.354667 277.845333c6.485333-3.754667 11.776-0.682667 11.776 6.656s-5.12 16.554667-11.605334 20.138667l-185.344 107.008c-6.485333 3.754667-11.776 0.682667-11.776-6.656s5.12-16.554667 11.605334-20.138667l185.344-107.008z" fill="#FFFFFF" ></path><path d="M695.125333 395.605333c6.485333-3.754667 11.776-0.682667 11.776 6.656s-5.12 16.554667-11.605333 20.138667l-104.106667 60.074667c-6.485333 3.754667-11.776 0.682667-11.776-6.656s5.12-16.554667 11.605334-20.138667l104.106666-60.074667z" fill="#007CCD" ></path><path d="M724.992 409.258667l-14.677333-8.533334c-0.170667-0.170667-0.341333-0.170667-0.512-0.341333h-0.170667s-0.170667 0-0.170667-0.170667c-0.170667 0-0.170667-0.170667-0.341333-0.170666s-0.341333 0-0.341333-0.170667h-0.341334c-0.341333 0-0.341333 0-0.682666-0.170667h-1.706667c-0.170667 0-0.341333 0-0.512 0.170667h-0.341333c-0.170667 0-0.170667 0-0.341334 0.170667-0.341333 0.170667-0.512 0.170667-0.853333 0.341333-0.170667 0-0.170667 0-0.341333 0.170667 0 0-0.170667 0-0.170667 0.170666-0.512 0.341333-1.024 0.341333-1.536 0.682667l-104.106667 60.074667 14.677334 8.533333 104.106666-60.074667c0.512-0.341333 1.024-0.512 1.536-0.682666 0.170667 0 0.341333-0.170667 0.341334-0.170667 0.341333-0.170667 0.512-0.170667 0.853333-0.341333 0.170667 0 0.341333-0.170667 0.512-0.170667 0.170667 0 0.341333-0.170667 0.512-0.170667 0.341333 0 0.341333-0.170667 0.682667-0.170666h1.365333c0.341333 0 0.512 0 0.853333 0.170666h0.341334c0.341333 0 0.341333 0.170667 0.682666 0.170667 0 0 0.170667 0 0.170667 0.170667 0.170667 0.170667 0.512 0.341333 0.512 0.512z m-129.024 53.930666c-0.341333 0.170667-0.341333 0.341333-0.682667 0.512-0.341333 0.341333-0.682667 0.512-1.024 1.024-0.170667 0.170667-0.341333 0.341333-0.341333 0.512l-0.341333 0.341334-0.341334 0.341333c-0.341333 0.341333-0.682667 0.853333-1.024 1.024l-0.341333 0.341333c0 0.170667-0.170667 0.170667-0.170667 0.341334-0.170667 0.170667-0.170667 0.341333-0.341333 0.341333-0.341333 0.341333-0.341333 0.682667-0.682667 1.024-0.341333 0.341333-0.341333 0.682667-0.512 1.024v0.341333l-0.341333 0.853334-0.512 1.024c-0.170667 0.341333-0.341333 0.512-0.341333 1.024-0.170667 0.341333-0.341333 0.682667-0.341334 1.024-0.170667 0.341333-0.341333 0.682667-0.341333 1.024 0 0.170667-0.170667 0.341333-0.170667 0.512 0 0.170667 0 0.170667-0.170666 0.341333 0 0.170667-0.170667 0.341333-0.170667 0.341333-0.170667 0.341333-0.341333 1.024-0.341333 1.365334 0 0.341333-0.170667 0.512-0.170667 0.853333 0 0.170667 0 0.341333-0.170667 0.341333v0.341334c-0.170667 0.853333-0.170667 1.536-0.170666 2.389333 0 3.754667 1.365333 6.314667 3.413333 7.509333l14.677333 8.533334c-2.048-1.194667-3.413333-3.754667-3.413333-7.509334 0-0.853333 0.170667-1.706667 0.341333-2.730666 0-0.170667 0-0.341333 0.170667-0.341334l0.512-2.56c0-0.170667 0-0.170667 0.170667-0.341333 0.341333-1.024 0.682667-1.877333 1.024-2.730667 0.341333-1.024 0.853333-1.877333 1.365333-2.730666v-0.170667l1.706667-2.389333c0-0.170667 0.170667-0.170667 0.170666-0.341334 0.512-0.682667 1.024-1.365333 1.706667-2.048l0.341333-0.341333c0.341333-0.512 1.024-1.024 1.536-1.365333 0.341333-0.170667 0.341333-0.341333 0.682667-0.512 0.682667-0.512 1.536-1.024 2.218667-1.536l-14.677334-8.533334c-1.536 0.512-2.218667 0.853333-2.901333 1.536z" fill="#ACC5EA" ></path><path d="M716.8 410.112c6.485333-3.754667 11.776-0.682667 11.776 6.656s-5.12 16.554667-11.605333 20.138667l-104.106667 60.074666c-6.485333 3.754667-11.776 0.682667-11.776-6.656s5.12-16.554667 11.605333-20.138666l104.106667-60.074667z" fill="#FFFFFF" ></path><path d="M1008.810667 434.688l-20.138667-11.776c0.170667 0 0.341333 0.170667 0.512 0.170667l20.138667 11.776c-0.170667 0-0.341333-0.170667-0.512-0.170667" fill="#A8871E" ></path><path d="M1009.322667 434.858667l-20.138667-11.776 0.682667 0.341333 20.309333 11.776-0.853333-0.341333" fill="#A3831D" ></path><path d="M1010.176 435.2l-20.309333-11.776h0.170666l20.138667 11.776" fill="#9E7F1D" ></path><path d="M856.746667 651.776l-20.138667-11.776c-0.512-0.682667-1.024-1.024-1.706667-1.536L855.04 650.24c0.512 0.341333 1.024 1.024 1.706667 1.536" fill="#856B18" ></path><path d="M983.04 419.84l-20.138667-11.776 25.770667 14.677333 20.138667 11.776L983.04 419.84z" fill="#9E7F1D" ></path><path d="M957.269333 354.816c-0.341333-0.170667-0.512-0.341333-0.682666-0.341333-0.170667-0.170667-0.341333-0.170667-0.512-0.341334-0.170667 0-0.170667-0.170667-0.341334-0.170666s-0.170667 0-0.341333-0.170667c-0.341333-0.170667-0.512-0.170667-1.024-0.341333h-0.170667c-0.341333 0-0.682667-0.170667-1.024-0.170667H950.613333c-0.341333 0-0.512 0.170667-0.682666 0.170667-0.341333 0-0.512 0.170667-0.853334 0.170666h-0.170666c-0.170667 0-0.341333 0.170667-0.512 0.170667l-1.536 0.512c-0.170667 0-0.341333 0.170667-0.341334 0.170667-0.341333 0.170667-0.512 0.170667-0.682666 0.341333-0.170667 0.170667-0.341333 0.170667-0.512 0.341333-0.682667 0.341333-1.194667 0.682667-1.877334 1.024l-27.306666 15.701334c-0.853333 0.512-1.706667 1.024-2.56 1.365333-0.170667 0-0.170667 0.170667-0.341334 0.170667-0.512 0.341333-1.194667 0.341333-1.706666 0.512-0.341333 0.170667-0.512 0.170667-0.853334 0.170666-0.170667 0-0.341333 0.170667-0.512 0.170667-0.341333 0.170667-0.853333 0.170667-1.194666 0.170667h-1.536c-0.341333 0-0.682667-0.170667-1.024-0.341334h-0.170667l-1.024-0.512 20.138667 11.776h0.170666c0.341333 0.170667 0.341333 0.341333 0.682667 0.341334 0.170667 0 0.341333 0.170667 0.341333 0.170666h0.341334c0.341333 0.170667 0.512 0.170667 0.682666 0.170667h1.706667c0.341333 0 0.682667 0 1.024-0.170667h0.170667c0.170667 0 0.341333-0.170667 0.512-0.170666 0.341333 0 0.341333-0.170667 0.682666-0.170667h0.170667c0.512-0.170667 1.024-0.341333 1.706667-0.512h0.170666s0.170667 0 0.170667-0.170667c0.853333-0.341333 1.706667-0.853333 2.56-1.365333l27.306667-15.701333c0.682667-0.341333 1.194667-0.682667 1.877333-1.024 0.170667-0.170667 0.341333-0.170667 0.512-0.341334 0.341333-0.170667 0.682667-0.341333 1.024-0.341333l1.536-0.512c0.341333-0.170667 0.512-0.170667 0.682667-0.341333 0.341333-0.170667 0.512-0.170667 0.853333-0.170667 0.341333-0.170667 0.682667-0.170667 1.024-0.170667h2.048c0.512 0 1.024 0 1.365333 0.170667h0.170667c0.341333 0.170667 0.853333 0.170667 1.194667 0.341333 0.170667 0 0.170667 0 0.341333 0.170667 0.341333 0.170667 0.853333 0.341333 1.194667 0.512l-20.309334-11.264z m-159.914666 301.738667l-0.170667-31.402667c0-5.461333-3.072-9.216-6.314667-10.922667l-20.138666-11.776c3.072 1.877333 6.314667 5.461333 6.314666 10.922667l13.482667 7.850667-13.482667-7.850667 0.170667 31.402667c0 3.925333 0.853333 7.168 2.218667 9.557333 0.853333 1.365333 1.877333 2.389333 3.072 3.072l20.138666 11.776c-3.413333-1.877333-5.290667-6.314667-5.290666-12.629333z" fill="#FFA523" ></path><path d="M890.538667 374.101333c4.778667-2.730667 9.728-3.242667 13.653333-1.024l19.456 11.093334c3.242667 3.754667 8.021333 2.730667 12.8 0l27.306667-15.701334c11.264-6.485333 19.285333-1.877333 19.456 11.093334l0.170666 40.618666 25.770667 14.677334c8.021333 2.730667 8.021333 17.408-1.536 32.256l-19.285333 33.28c-4.778667 6.485333-6.485333 12.970667-6.485334 18.432l0.170667 31.402666c0 12.970667-7.850667 26.794667-19.285333 33.28l-27.306667 15.701334c-4.778667 2.730667-9.728 9.216-12.8 14.677333l-19.285333 33.109333c-3.925333 6.997333-8.704 11.946667-13.653334 14.677334-4.778667 2.730667-9.728 3.242667-13.653333 1.024l-19.285333-11.093334c-3.242667-3.754667-8.021333-2.730667-12.8 0l-27.477334 15.872c-11.264 6.485333-19.285333 1.877333-19.456-11.093333l-0.170666-31.402667c0-5.632-3.242667-9.216-6.485334-11.093333l-19.456-11.093333c-8.021333-4.608-8.021333-17.408-0.170666-31.402667l19.285333-35.157333c4.778667-6.485333 6.485333-12.970667 6.485333-18.432l-0.170666-31.402667c0-12.970667 7.850667-26.794667 19.285333-33.28l27.306667-15.701333c4.778667-2.730667 9.728-9.216 14.506666-15.701334l19.285334-33.28c4.096-6.485333 9.045333-11.605333 13.824-14.336z" fill="#FFF000" ></path><path d="M928.426667 437.248l2.56 5.461333c-27.477333 45.909333-50.005333 101.205333-57.002667 126.805334l-41.472-25.941334 10.581333-16.042666 23.893334 8.362666c9.728-19.626667 31.402667-59.562667 61.44-98.645333z m-25.258667-64.853333l-19.456-11.093334c-0.341333-0.341333-0.853333-0.341333-1.194667-0.512 0 0-0.170667 0-0.170666-0.170666-0.170667 0-0.341333-0.170667-0.341334-0.170667-0.170667-0.170667-0.341333-0.170667-0.512-0.341333-0.170667 0-0.341333-0.170667-0.512-0.170667s-0.341333 0-0.341333-0.170667h-0.341333c-0.341333-0.170667-0.853333-0.170667-1.194667-0.170666h-2.730667c-0.170667 0-0.341333 0-0.341333 0.170666-0.341333 0-0.512 0.170667-0.682667 0.170667-0.170667 0-0.341333 0-0.341333 0.170667-0.170667 0-0.341333 0.170667-0.341333 0.170666l-1.194667 0.341334c-0.170667 0-0.341333 0.170667-0.341333 0.170666-0.170667 0-0.170667 0.170667-0.341334 0.170667-0.682667 0.341333-1.536 0.682667-2.218666 1.024-0.512 0.341333-1.024 0.682667-1.706667 1.024-0.170667 0.170667-0.341333 0.341333-0.512 0.341333-0.341333 0.341333-0.853333 0.512-1.024 0.853334l-0.512 0.512-1.024 1.024-0.512 0.512c-0.170667 0.170667-0.341333 0.170667-0.341333 0.341333-0.170667 0.170667-0.341333 0.341333-0.341334 0.512-0.341333 0.341333-0.853333 0.853333-1.194666 1.365333l-0.341334 0.341334c-0.170667 0.170667-0.341333 0.341333-0.341333 0.512-0.341333 0.341333-0.512 0.512-0.853333 1.024-0.170667 0.170667-0.341333 0.341333-0.341334 0.512-0.170667 0.341333-0.341333 0.341333-0.512 0.682666-0.170667 0.341333-0.341333 0.512-0.512 0.853334-0.170667 0.170667-0.170667 0.341333-0.341333 0.341333-0.341333 0.341333-0.512 0.853333-0.853333 1.024-0.170667 0.170667-0.341333 0.341333-0.341334 0.512l-0.170666 0.170667c-0.341333 0.682667-0.853333 1.365333-1.194667 1.877333 0 0.170667-0.170667 0.170667-0.170667 0.341333l-19.285333 33.28-3.754667 4.949334c-0.341333 0.341333-0.682667 0.853333-1.024 1.365333-0.341333 0.341333-0.341333 0.512-0.682666 0.853333-0.341333 0.512-1.024 1.024-1.365334 1.706667l-0.341333 0.341333-0.170667 0.170667c-0.682667 0.853333-1.536 1.706667-2.218666 2.389333l-0.682667 0.682667c-0.512 0.341333-1.024 1.024-1.536 1.365333-0.341333 0.170667-0.341333 0.341333-0.682667 0.512l-2.048 1.536-27.306666 15.701334c-1.194667 0.682667-2.389333 1.536-3.413334 2.389333-0.170667 0.170667-0.341333 0.170667-0.341333 0.341333l-3.072 2.56-0.341333 0.341334c-0.170667 0.170667-0.170667 0.341333-0.341334 0.341333-0.341333 0.341333-1.024 1.024-1.365333 1.536l-0.341333 0.341333-0.170667 0.170667c-0.170667 0.341333-0.341333 0.512-0.512 0.682667-0.341333 0.341333-0.512 0.512-0.682667 0.853333-0.170667 0.170667-0.170667 0.341333-0.341333 0.341333-0.170667 0.170667-0.341333 0.341333-0.341333 0.512-0.170667 0.341333-0.341333 0.341333-0.512 0.682667-0.170667 0.341333-0.341333 0.341333-0.341334 0.682667-0.170667 0.170667-0.341333 0.341333-0.341333 0.512-0.170667 0.170667-0.170667 0.341333-0.341333 0.341333-0.341333 0.512-0.512 1.024-1.024 1.536v0.170667c0 0.170667-0.170667 0.170667-0.170667 0.341333-0.341333 0.341333-0.341333 0.682667-0.512 1.024-0.170667 0.341333-0.341333 0.341333-0.341333 0.682667-0.170667 0.170667-0.170667 0.341333-0.341334 0.512 0 0.170667-0.170667 0.341333-0.170666 0.341333-0.341333 0.512-0.512 1.024-0.682667 1.536v0.170667c0 0.170667-0.170667 0.341333-0.170667 0.341333-0.170667 0.341333-0.341333 0.853333-0.341333 1.024-0.170667 0.170667-0.170667 0.341333-0.341333 0.682667l-0.341334 0.682666c0 0.170667-0.170667 0.341333-0.170666 0.512l-0.341334 1.194667c0 0.170667-0.170667 0.341333-0.170666 0.512v0.170667c-0.170667 0.512-0.341333 1.024-0.341334 1.536 0 0.341333-0.170667 0.341333-0.170666 0.682666v0.170667c0 0.170667 0 0.341333-0.170667 0.341333-0.170667 0.682667-0.341333 1.536-0.341333 2.218667v0.682667c-0.170667 1.365333-0.341333 2.56-0.341334 3.925333l0.170667 31.402667c0 1.024-0.170667 2.218667-0.341333 3.413333v0.512c0 0.341333-0.170667 0.853333-0.341334 1.194667 0 0.341333-0.170667 0.682667-0.341333 1.024 0 0.170667-0.170667 0.341333-0.170667 0.512l-0.341333 1.706666c0 0.170667-0.170667 0.341333-0.170667 0.341334-0.341333 0.682667-0.341333 1.365333-0.853333 2.048 0 0.170667-0.170667 0.170667-0.170667 0.341333l-1.024 2.048c0 0.170667-0.170667 0.170667-0.170666 0.341333-0.341333 0.682667-0.853333 1.536-1.194667 2.218667 0 0.170667-0.170667 0.170667-0.170667 0.341333-0.512 0.853333-1.024 1.536-1.706666 2.389334L750.933333 559.957333c-0.341333 0.512-0.682667 1.194667-1.024 1.706667-0.170667 0.170667-0.170667 0.341333-0.341333 0.512-0.170667 0.341333-0.341333 0.341333-0.341333 0.682667-0.170667 0.341333-0.341333 0.341333-0.341334 0.682666l-0.512 1.024c-0.170667 0.170667-0.170667 0.341333-0.341333 0.512 0 0.170667-0.170667 0.170667-0.170667 0.341334-0.341333 0.682667-0.512 1.194667-0.853333 1.706666v0.170667c0 0.170667-0.170667 0.341333-0.170667 0.512l-0.341333 1.194667c0 0.170667-0.170667 0.341333-0.170667 0.512-0.170667 0.341333-0.170667 0.512-0.341333 0.853333 0 0.341333-0.170667 0.341333-0.170667 0.682667-0.170667 0.341333-0.170667 0.512-0.170666 0.682666-0.170667 0.341333-0.170667 0.682667-0.341334 1.024 0 0.170667-0.170667 0.341333-0.170666 0.341334 0 0.341333-0.170667 0.341333-0.170667 0.682666-0.170667 0.341333-0.170667 1.024-0.341333 1.365334 0 0.170667 0 0.341333-0.170667 0.341333v0.512c0 0.512-0.170667 1.024-0.170667 1.536v3.072c0 0.682667 0.170667 1.536 0.341334 2.048v0.170667c0.170667 0.682667 0.341333 1.194667 0.512 1.706666 0.170667 0.170667 0.170667 0.341333 0.341333 0.512 0.170667 0.341333 0.341333 0.853333 0.512 1.194667 0.170667 0.341333 0.341333 0.341333 0.341333 0.512 0.341333 0.341333 0.341333 0.682667 0.682667 1.024 0.170667 0.170667 0.341333 0.341333 0.341333 0.512 0.341333 0.341333 0.512 0.682667 1.024 1.024l0.341334 0.341333c0.512 0.341333 1.024 0.853333 1.536 1.024l20.138666 11.776-1.536-1.024-0.341333-0.341333-1.024-1.024c-0.170667-0.170667-0.341333-0.341333-0.341333-0.512-0.341333-0.341333-0.341333-0.682667-0.682667-1.024-0.170667-0.170667-0.341333-0.341333-0.341333-0.512-0.170667-0.341333-0.341333-0.853333-0.512-1.194667-0.170667-0.170667-0.170667-0.341333-0.341334-0.512-0.170667-0.512-0.341333-1.024-0.512-1.706666v-0.170667c-0.170667-0.682667-0.341333-1.365333-0.341333-2.048v-3.072c0-0.512 0-1.024 0.170667-1.536 0-0.341333 0.170667-0.682667 0.170666-1.024s0.170667-1.024 0.341334-1.365333c0.170667-0.341333 0.170667-0.682667 0.341333-1.024s0.170667-0.682667 0.341333-1.024 0.341333-1.024 0.341334-1.365334c0.170667-0.341333 0.170667-0.512 0.341333-0.853333 0.170667-0.512 0.341333-1.024 0.512-1.706667 0-0.170667 0.170667-0.341333 0.170667-0.512 0.341333-0.682667 0.512-1.536 1.024-2.218666 0.170667-0.170667 0.170667-0.341333 0.341333-0.512 0.341333-0.512 0.512-1.194667 0.853333-1.706667 0.170667-0.341333 0.341333-0.341333 0.341334-0.682667 0.341333-0.853333 0.853333-1.536 1.194666-2.389333l-13.482666-7.850667 13.482666 7.850667 19.285334-35.157333c0.341333-0.341333 0.341333-0.512 0.512-0.853334l0.853333-1.194666c0-0.170667 0.170667-0.170667 0.170667-0.341334s0.170667-0.170667 0.170666-0.341333c0.170667-0.341333 0.341333-0.512 0.341334-0.682667 0.341333-0.341333 0.341333-0.853333 0.682666-1.024 0-0.170667 0.170667-0.170667 0.170667-0.341333s0.170667-0.170667 0.170667-0.341333c0.170667-0.170667 0.341333-0.341333 0.341333-0.512 0.170667-0.341333 0.341333-0.853333 0.512-1.024 0-0.170667 0.170667-0.341333 0.170667-0.341334 0-0.170667 0.170667-0.170667 0.170666-0.341333 0.170667-0.170667 0.170667-0.341333 0.341334-0.512l0.341333-1.194667c0-0.170667 0-0.170667 0.170667-0.341333 0-0.170667 0.170667-0.341333 0.170666-0.341333 0.170667-0.341333 0.170667-0.512 0.341334-0.853334s0.170667-0.512 0.341333-0.853333c0-0.170667 0.170667-0.341333 0.170667-0.512v-0.341333c0-0.341333 0.170667-0.512 0.170666-0.853334 0.170667-0.341333 0.170667-0.853333 0.341334-1.194666v-0.682667c0.170667-1.194667 0.341333-2.389333 0.341333-3.413333L797.013333 486.4c0-1.365333 0.170667-2.56 0.341334-3.925333v-0.682667c0.170667-0.682667 0.341333-1.536 0.341333-2.218667 0-0.170667 0-0.341333 0.170667-0.512 0-0.341333 0.170667-0.341333 0.170666-0.682666l0.341334-1.706667c0-0.170667 0.170667-0.341333 0.170666-0.512 0.170667-0.512 0.341333-1.024 0.512-1.706667l0.341334-0.682666c0.341333-0.512 0.341333-1.194667 0.682666-1.706667 0-0.170667 0.170667-0.341333 0.170667-0.341333 0.341333-0.682667 0.512-1.365333 1.024-2.048 0.170667-0.170667 0.170667-0.341333 0.341333-0.341334 0.341333-0.512 0.682667-1.194667 1.024-1.706666 0-0.170667 0.170667-0.170667 0.170667-0.341334 0.341333-0.682667 0.853333-1.194667 1.194667-1.877333 0.170667-0.170667 0.341333-0.341333 0.341333-0.512 0.341333-0.341333 0.682667-1.024 1.024-1.365333 0.170667-0.170667 0.341333-0.341333 0.341333-0.512 0.341333-0.341333 0.682667-0.853333 1.024-1.194667 0.170667-0.341333 0.341333-0.512 0.512-0.682667 0.170667-0.341333 0.341333-0.341333 0.512-0.682666 0.341333-0.512 1.024-1.024 1.365334-1.536l0.512-0.512c1.024-1.024 1.877333-1.706667 3.072-2.56 0.170667-0.170667 0.341333-0.170667 0.341333-0.341334 1.024-0.853333 2.218667-1.706667 3.413333-2.389333l27.306667-15.701333c0.682667-0.341333 1.365333-1.024 2.048-1.536 0.341333-0.170667 0.341333-0.341333 0.682667-0.512 0.512-0.341333 1.024-0.853333 1.536-1.365334 0.170667-0.170667 0.341333-0.170667 0.341333-0.341333l0.341333-0.341333c0.682667-0.682667 1.536-1.536 2.218667-2.389334l0.170667-0.170666c0.170667-0.170667 0.341333-0.341333 0.341333-0.512 0.341333-0.512 0.853333-1.024 1.365333-1.536 0.341333-0.341333 0.341333-0.512 0.682667-0.853334s0.682667-0.853333 1.024-1.194666c0 0 0-0.170667 0.170667-0.170667l3.754666-4.949333 19.285334-33.28c0.341333-0.853333 1.024-1.706667 1.536-2.389334 0.170667-0.170667 0.341333-0.341333 0.341333-0.512l1.024-1.536c0.170667-0.341333 0.341333-0.512 0.512-0.853333 0.341333-0.341333 0.682667-0.853333 1.024-1.194667 0.341333-0.341333 0.512-0.682667 0.853333-1.024 0.341333-0.341333 0.512-0.682667 0.853334-1.024 0.341333-0.341333 0.853333-1.024 1.194666-1.365333l0.853334-0.853333 0.512-0.512 1.024-1.024 0.512-0.512c0.341333-0.341333 0.853333-0.512 1.024-0.853334 0.170667-0.170667 0.341333-0.341333 0.512-0.341333 0.512-0.341333 1.024-0.682667 1.706666-1.024 0.682667-0.341333 1.536-0.853333 2.218667-1.024 0.341333-0.170667 0.512-0.170667 0.682667-0.341333l1.194666-0.341334c0.341333-0.170667 0.512-0.170667 0.853334-0.341333 0.341333 0 0.512-0.170667 0.682666-0.170667 0.341333 0 0.682667-0.170667 1.024-0.170666h2.048c0.512 0 1.024 0.170667 1.536 0.170666 0.170667 0 0.341333 0 0.341334 0.170667 0.341333 0.170667 0.682667 0.170667 1.024 0.341333 0.170667 0 0.341333 0.170667 0.341333 0.170667 0.512 0.170667 1.024 0.341333 1.365333 0.682667l19.456 11.093333-20.821333-11.093333z" fill="#FFA523" ></path><path d="M886.613333 543.744c0.170667-0.341333 0.341333-0.341333 0.341334-0.682667 0.682667-1.365333 1.365333-2.56 2.218666-4.096 0.341333-0.853333 1.024-1.706667 1.365334-2.56s1.024-1.706667 1.365333-2.56c0.512-1.024 1.024-1.877333 1.536-2.901333 0.512-1.024 1.024-1.706667 1.536-2.730667 0.512-1.024 1.024-1.877333 1.706667-3.072l1.706666-2.901333c0.512-1.024 1.194667-2.048 1.706667-3.072 0.512-1.024 1.024-2.048 1.706667-3.072 0.341333-0.682667 0.682667-1.194667 1.024-1.877333l2.389333-4.096c0.341333-0.853333 1.024-1.536 1.365333-2.389334 0.853333-1.194667 1.536-2.56 2.389334-3.754666 0.512-0.853333 1.024-1.706667 1.706666-2.56 0.853333-1.194667 1.706667-2.56 2.389334-3.754667 0.512-0.853333 1.024-1.706667 1.706666-2.56 0.512-1.024 1.024-1.706667 1.706667-2.730667 1.877333-3.072 3.754667-5.973333 5.802667-9.045333 0.341333-0.341333 0.341333-0.512 0.512-1.024 2.218667-3.242667 4.437333-6.485333 6.656-9.898667 0.682667-0.853333 1.194667-1.706667 1.877333-2.56 1.365333-1.877333 2.730667-3.925333 4.266667-5.802666 0.682667-1.024 1.194667-1.706667 1.877333-2.730667 2.048-2.901333 4.096-5.632 6.314667-8.533333l-14.677334-8.533334c-2.218667 2.901333-4.266667 5.632-6.314666 8.533334-0.682667 1.024-1.194667 1.706667-1.877334 2.56-1.536 1.877333-2.901333 3.925333-4.266666 5.802666l-1.024 1.536-0.853334 1.194667c-2.389333 3.242667-4.437333 6.485333-6.656 9.898667-0.341333 0.341333-0.341333 0.512-0.512 1.024-2.048 3.072-3.925333 5.973333-5.802666 9.045333l-0.853334 1.194667-1.024 1.536c-0.512 1.024-1.024 1.706667-1.706666 2.56-0.853333 1.365333-1.706667 2.56-2.389334 3.754666-0.512 0.853333-1.024 1.706667-1.706666 2.56-0.853333 1.365333-1.706667 2.56-2.389334 3.754667-0.341333 0.853333-1.024 1.536-1.365333 2.389333l-2.389333 4.096c-0.341333 0.682667-0.853333 1.194667-1.024 1.877334-0.170667 0.170667-0.170667 0.341333-0.341334 0.341333l-1.536 2.56c-0.682667 1.024-1.194667 2.218667-1.706666 3.072l-1.706667 2.901333c-0.512 1.024-1.024 2.048-1.706667 3.072-0.512 1.024-1.024 1.706667-1.536 2.730667-0.512 1.024-1.024 1.877333-1.536 2.901333-0.341333 0.853333-1.024 1.706667-1.365333 2.389334-0.512 1.024-1.024 1.706667-1.365333 2.56-0.170667 0.170667-0.170667 0.341333-0.341334 0.341333-0.682667 1.194667-1.194667 2.389333-1.877333 3.584-0.170667 0.341333-0.341333 0.512-0.341333 0.682667l-1.706667 3.242666-0.512 1.024c-0.512 1.194667-1.194667 2.389333-1.706667 3.413334l-24.064-8.362667-10.581333 16.042667 14.677333 8.533333 10.581334-16.042667 24.064 8.362667c0.512-1.024 1.024-2.218667 1.706666-3.413333l0.512-1.024c0.853333-0.512 1.536-1.706667 2.048-2.730667z" fill="#E8CFAC" ></path><path d="M889.514667 585.216l-14.677334-8.533333-41.472-25.941334 14.677334 8.533334 41.472 25.941333z" fill="#808080" ></path><path d="M944.128 452.949333l2.56 5.461334c-27.477333 45.909333-50.005333 101.205333-57.002667 126.805333L848.213333 559.274667l10.581334-16.042667 24.064 8.362667c9.557333-19.626667 31.232-59.562667 61.269333-98.645334z" fill="#FFFFFF" ></path></symbol><symbol id="icon-tour" viewBox="0 0 1024 1024"><path d="M426.5 107.1h167.2v83.1h47.9V65.6h-263v124.6h47.9v-83.1z m0 0M653.5 917.1c0 14.8 9.1 28.5 23.9 35.9 14.8 7.4 33 7.4 47.8 0 14.8-7.4 23.9-21.1 23.9-35.9 0-14.8-9.1-28.5-23.9-35.9-14.8-7.4-33-7.4-47.8 0-14.8 7.4-23.9 21.1-23.9 35.9z m0 0" fill="#4ADFFF" ></path><path d="M283 917.1c0 22.9 21.4 41.5 47.8 41.5s47.8-18.6 47.8-41.5c0-14.8-9.1-28.5-23.9-35.9-14.8-7.4-33-7.4-47.8 0-14.8 7.4-23.9 21.1-23.9 35.9z m0 0M797 190.3H223.3c-26.5 0-47.8 18.6-47.8 41.5v581.5c0 23 21.4 41.5 47.8 41.5H797c26.5 0 47.8-18.6 47.8-41.5V231.8c-0.1-22.9-21.5-41.5-47.8-41.5zM318.9 730.1c0 5.8-5.3 10.4-11.9 10.4-6.6 0-11.9-4.6-11.9-10.4V314.9c0-5.7 5.3-10.4 11.9-10.4 6.6 0 11.9 4.6 11.9 10.4v415.2z m135.4 0c0 5.8-5.3 10.4-11.9 10.4-6.6 0-11.9-4.6-11.9-10.4V314.9c0-5.7 5.3-10.4 11.9-10.4 6.6 0 11.9 4.6 11.9 10.4v415.2z m135.5 0c0 5.8-5.3 10.4-11.9 10.4-6.6 0-11.9-4.6-11.9-10.4V314.9c0-5.7 5.3-10.4 11.9-10.4 6.6 0 11.9 4.6 11.9 10.4v415.2z m135.4 0c0 5.8-5.3 10.4-11.9 10.4s-11.9-4.6-11.9-10.4V314.9c0-5.7 5.3-10.4 11.9-10.4s11.9 4.6 11.9 10.4v415.2z m0 0" fill="#4ADFFF" ></path></symbol><symbol id="icon-car" viewBox="0 0 1024 1024"><path d="M893.2 466c18.1 44.8 44.8 89.6 44.8 134.4v223.9c0 29.3-25.1 44.8-67.2 44.8s-67.2-18.1-67.2-44.8v-44.8H221.4v44.8c0 26.6-25.1 44.8-67.2 44.8S87 853.6 87 824.3V600.4c0-44.8 26.6-89.6 44.8-134.4s-67.2-39.2-67.2-67.2 5.6-44.8 44.8-44.8h67.2s31.8-91.4 44.8-134.4c13-43 67.2-67.2 112-67.2h358.3c44.8 0 99 24.2 112 67.2S848.5 354 848.5 354h67.2c39.2 0 44.8 16.8 44.8 44.8S875 421.3 893.2 466zM400.5 622.8c0 12.4 10 22.4 22.4 22.4H602c12.4 0 22.4-10 22.4-22.4v-22.4c0-12.4-10-22.4-22.4-22.4H422.9c-12.4 0-22.4 10-22.4 22.4v22.4z m-223.9 0c0 37.1 30.1 67.2 67.2 67.2s67.2-30.1 67.2-67.2-30.1-67.2-67.2-67.2-67.2 30.1-67.2 67.2z m627-268.7c0-22.4-44.8-112-44.8-112H266.2s-44.8 89.6-44.8 112v22.4c0 24.7 20.1 44.8 44.8 44.8h492.6c24.7 0 44.8-20.1 44.8-44.8v-22.4z m-22.4 201.5c-37.1 0-67.2 30.1-67.2 67.2s30.1 67.2 67.2 67.2 67.2-30.1 67.2-67.2-30.1-67.2-67.2-67.2z" fill="#18BFFF" ></path></symbol><symbol id="icon-coupon" viewBox="0 0 1024 1024"><path d="M928.4 599.6c-51.1-25.5-66.4-46-66.4-86.8 0-38.3 15.3-58.7 66.4-86.8 28.1-17.9 30.7-33.2 30.7-58.7V221.5c0-46-38.3-84.3-84.3-84.3H149.3c-46 0-84.3 38.3-84.3 84.3v145.6c0 23 2.6 43.4 30.7 58.7 20.4 10.2 66.4 35.8 66.4 86.8 0 56.2-33.2 74.1-63.9 84.3h-2.6C67.5 614.9 65 643 65 655.8v145.6c0 46 38.3 84.3 84.3 84.3h725.4c46 0 84.3-38.3 84.3-84.3V655.8c0-28.1-10.2-38.4-30.6-56.2z m-281-51.1c15.3 0 28.1 12.8 28.1 28.1s-12.8 28.1-28.1 28.1H540.1V712c0 15.3-12.8 28.1-28.1 28.1s-28.1-12.8-28.1-28.1V604.7H376.6c-15.3 0-28.1-12.8-28.1-28.1s12.8-28.1 28.1-28.1h107.3v-66.4H369c-15.3 0-28.1-12.8-28.1-28.1s12.8-28.1 28.1-28.1h84.3l-89.4-89.4c-10.2-10.2-10.2-28.1 0-38.3 10.2-10.2 28.1-10.2 38.3 0L512 408l109.8-109.8c10.2-10.2 28.1-10.2 38.3 0 10.2 10.2 10.2 28.1 0 38.3l-89.4 89.4h81.7c15.3 0 28.1 12.8 28.1 28.1s-12.8 28.1-28.1 28.1H537.5v66.4h109.9z" fill="#4ADFFF" ></path></symbol><symbol id="icon-gift" viewBox="0 0 1024 1024"><path d="M476.8 263.7v201.1H64.2V303.4c0-25.4 20.1-45.7 45.3-45.7h188c-50.5-10.7-88.4-32.5-89.8-72.8-1.4-47.5 51.6-124.3 129-106.8 79.9 18.2 135.8 80.7 178.5 134.3 43.2-54.7 104.3-125 187.8-136.1 69.7-8.9 127.3 61.5 119.9 107.9-6.4 40.7-44.9 62.9-94.1 73.5h185.6c25.2 0 45.3 20.4 45.3 45.7v161.4H547.1l-0.9-203.2M345.3 120.2c-38.6-15.4-61.2 1.1-77.4 28.2-8.8 15.3-18.4 35.7-4.3 50.7 37.1 38.6 138.9 35.7 207.2 28.6-32.2-40.7-71.8-86.1-125.5-107.5z m421.8 78.6c26.5-34.3-25.4-105.8-81.3-79.3-53.4 25.4-91.9 66.8-125.1 107.5 28.6 2.5 57.6 3.2 86.3 1.8 34.9-1.5 99.6-3.9 120.1-30zM479.6 947.7H143.3c-22.6 0-41-18.5-41-41.7V497.4h377.3v450.3c0.1 0 0 0 0 0z m442-41.8c0 23.2-18.4 41.7-41 41.7H544.3V497.3h377.2v408.6z" fill="#FF8657" ></path></symbol><symbol id="icon-hotel" viewBox="0 0 1024 1024"><path d="M266.4 312v-44.8H535V312H266.4z m0 134.3v-44.8H535v44.8H266.4z m0 134.3v-44.8H535v44.8H266.4z m0 134.3v-44.8H535v44.8H266.4zM915.6 894V379.1c0-5.9-2.4-11.6-6.6-15.8-4.2-4.2-9.9-6.6-15.8-6.6H758.9c-5.9 0-11.6 2.4-15.8 6.6-4.2 4.2-6.6 9.9-6.6 15.8V894h-44.8V132.9c0-24.7-20-44.8-44.7-44.8H154.4c-11.9 0-23.3 4.7-31.6 13.2-8.4 8.4-13.1 19.8-13.1 31.7v761H64.9v44.8h895.5V894h-44.8z m0 0" fill="#0092F1" ></path></symbol><symbol id="icon-ensure" viewBox="0 0 1024 1024"><path d="M924.4 222.5C792.7 217.7 510.5 70 510.5 70h-4.7S231.3 217.7 99.6 222.4c-11 55.6 7.1 398.5 99.6 535.1 61.2 92.1 249.5 174.1 305.8 194.9 0 0 3.5 3.2 11 0.4 72.7-27.3 235.2-92.1 308.8-195.3 101.9-155.6 110.4-478.1 99.6-535zM676.7 483.7H543.4v62.4h133.3v51.7H543.4v118.9h-63.2V597.8H348v-51.7h132.1v-62.4H348v-52.2h107.4l-70-124.6h69.3s54.7 101.1 57.2 110.2c2.8-9.9 58-110.2 58-110.2h69.3l-70.9 124.6h108.3v52.2h0.1z" fill="#00DF9D" ></path></symbol><symbol id="icon-supermarket" viewBox="0 0 1024 1024"><path d="M511 188.8c106.5 0 197.7 64.7 234.3 155.8H795C756.3 228 643.7 143.3 511 143.3S265.6 228 227 344.6h49.7c36.6-91 127.8-155.8 234.3-155.8z m416.6 169.9H94.4c-16.2 0-29.3 12.7-29.3 28.4v98c0 15.7 13.1 28.4 29.3 28.4h24.5l64.4 321.3s3.6 45.1 39.1 45.1h579.5c35.5 0 39.1-45.1 39.1-45.1l64.4-321.3h22.1c16.2 0 29.3-12.7 29.3-28.4v-98c0-15.7-13.1-28.4-29.2-28.4zM387.1 773.3c0 16.8-14 30.4-31.2 30.4s-31.2-13.6-31.2-30.4V526.7c0-16.8 14-30.4 31.2-30.4s31.2 13.6 31.2 30.4v246.6z m155.1 0c0 16.8-14 30.4-31.2 30.4-17.3 0-31.2-13.6-31.2-30.4V526.7c0-16.8 14-30.4 31.2-30.4s31.2 13.6 31.2 30.4v246.6z m155.1 0c0 16.8-14 30.4-31.2 30.4s-31.2-13.6-31.2-30.4V526.7c0-16.8 14-30.4 31.2-30.4 17.3 0 31.2 13.6 31.2 30.4v246.6z" fill="#0092F1" ></path></symbol><symbol id="icon-vip" viewBox="0 0 1024 1024"><path d="M64.5 343.8l2.9-8.1c7.4-22 26.6-36.8 50.1-38.4 21.4-1.5 42.8 11 52.9 30.6 10.2 20.1 7.4 43.8-7.5 61.4-1.7 1.9-3.5 3.9-5.4 6.1 41.5 25.4 82.8 50.5 123.9 75.8 15.6 9.6 31.3 19.3 46.8 28.6 8.9 5.2 15.8 3.7 20.6-5 47.2-86.1 94.5-172.3 142.1-259.3-20.6-10.5-33.9-26.4-35.2-50.1-0.8-16.6 5-30.8 16.8-42.4 23.4-22.8 61.7-20.6 82.2 4.6 23.6 28.9 15.1 62.7-22.3 88.1 12.2 22.3 24.5 44.8 36.9 67.1 34.3 62.5 68.5 124.8 102.8 187.3 7.9 14.5 12.9 15.8 27.1 7.4 53.1-32.4 106.1-65 159.2-97.5 2.5-1.5 4.8-3.1 7.7-4.8-11-11-17.9-23.4-18.8-38.6-1.5-28.6 18.1-53.6 45.7-58.3 28.7-5 55.3 11.4 63.8 39.1 0.6 2.2 1.5 4.4 2.4 6.6v19.3c-9 28.9-27.6 45.7-59.4 45.9-1.1 3.3-2.4 6.6-3.3 9.8-31.1 106.5-62.1 213.2-93.2 319.6-4 13.9-8.9 17.5-23 17.5H244c-15.1 0-19.7-3.5-23.8-17.5-25.3-86.4-50.3-173.1-75.6-259.5-6.8-23.4-13.7-46.7-20.6-70.2-23.8 0-41.7-9.4-52.9-29.9-2.7-5-4.4-10.7-6.6-16v-19.2zM511.6 812h250.6c22.3 0 40.2 15.8 42.6 37 2.5 21.4-11.6 40.9-33.2 45.7-3.1 0.8-6.4 0.9-9.4 0.9H260.8c-19.1 0-35.2-11.4-40.7-28.6-5.7-17.2-0.4-36.7 14.9-46.5 7.9-5 18.3-8.5 27.6-8.5 83.1-0.4 166.1 0 249 0z" fill="#FFA21F" ></path></symbol><symbol id="icon-species" viewBox="0 0 1024 1024"><path d="M411.9 408.3c0 32.2 21.5 57.3 78.7 75.2V336.7c-50 3.6-75.1 28.7-78.7 71.6z m114.6 128.9v164.7c57.3-3.6 89.5-32.2 93.1-82.3 3.5-35.9-25.1-64.5-93.1-82.4zM512.1 64.7c-247 0-447.4 200.4-447.4 447.4s200.4 447.4 447.4 447.4 447.4-200.4 447.4-447.4S759.1 64.7 512.1 64.7z m14.4 683.7v68h-35.8v-71.6c-78.7-3.6-125.3-50.1-139.6-132.4l46.5-14.3c10.7 64.4 39.4 100.2 96.6 107.4V530c-89.5-21.5-128.9-60.8-125.3-121.7 3.6-71.6 43-111 125.3-118.1v-46.5H530v50.1c71.6 7.2 114.5 46.5 128.9 118.1l-46.5 14.3c-10.7-53.7-35.8-82.3-82.3-93.1V487c96.6 25.1 143.2 68 139.6 132.4-7.2 78.9-53.8 118.2-143.2 129z" fill="#FFA21F" ></path></symbol><symbol id="icon-food" viewBox="0 0 1024 1024"><path d="M523.5 154.1c-54.9 0-99.3 46-99.3 102.5H623c-0.2-56.5-44.6-102.5-99.5-102.5z" fill="#FFA21F" ></path><path d="M81.9 834.6h860.3c9.5 0 17.2 7.7 17.2 17.2s-7.7 17.2-17.2 17.2H81.9c-9.5 0-17.2-7.7-17.2-17.2 0.1-9.4 7.8-17.2 17.2-17.2z m441.6-548.7c-221.3 0-400.7 179.4-400.7 400.7V814h801.4V686.7c0-221.4-179.4-400.8-400.7-400.8zM370.6 399.7c-43.2 19.4-79.5 51.7-103.8 92.3-2.7 4.5-8.5 6.2-13.3 3.9l-0.1-0.1c-5.1-2.5-7.1-8.6-4.6-13.7 0.1-0.3 0.3-0.5 0.4-0.7 26.6-44.2 66.1-79.3 113.2-100.3 5.1-2.3 11.2 0 13.5 5.1 2.2 5.2-0.1 11.2-5.3 13.5z" fill="#FFA21F" ></path><path d="M523.5 290.8c9.7 0 19.4 0.5 29 1.5v-35.7h-63v36.2c11.2-1.2 22.6-2 34-2z" fill="#FFA21F" ></path></symbol><symbol id="icon-shopping" viewBox="0 0 1024 1024"><path d="M895.2 233.4c16.7 0 29.7 1.9 39 7.4 9.3 3.7 16.7 9.3 20.4 16.7 3.7 7.4 5.6 13 5.6 20.4s-1.9 14.9-3.7 20.4l-11.1 33.4c-5.6 16.7-13 35.3-20.4 55.7-7.4 20.4-13 40.9-20.4 59.5-7.4 20.4-13 35.3-16.7 46.5-7.4 24.2-16.7 63.2-27.9 72.5-11.1 9.3-26 14.9-44.6 14.9H339.6l11.1 59.5h459c29.7 0 42.7 13 42.7 37.2 0 13-3.7 22.3-9.3 31.6s-16.7 13-33.4 13H334c-13 0-22.3-1.9-29.7-7.4-7.4-5.6-14.9-13-20.4-20.4-5.6-9.3-9.3-18.6-13-27.9-3.7-11.1-5.6-20.4-7.4-29.7 0-3.7-1.9-13-5.6-26-1.9-13-5.6-31.6-9.3-52s-7.4-44.6-13-70.6c-5.6-26-9.3-52-14.9-78-11.1-61.3-24.2-130.1-39-204.4H113c-9.3 0-16.7-1.9-22.3-7.4-5.6-3.7-11.1-9.3-14.9-16.7-3.7-5.6-7.4-13-7.4-20.4-3.7-7.4-3.7-13-3.7-20.4 0-13 3.7-22.3 13-29.7 7.4-7.4 18.6-11.1 31.6-11.1h91c13 0 22.3 1.9 29.7 5.6s13 7.4 16.7 13 7.4 11.1 9.3 16.7c1.9 5.6 3.7 11.1 3.7 14.9 1.9 5.6 1.9 11.1 3.7 20.4 1.9 9.3 1.9 18.6 3.7 26 1.9 11.1 3.7 22.3 5.6 35.3h622.5v1.5zM363.7 755.5c11.1 0 22.3 1.9 31.6 5.6 9.3 3.7 18.6 9.3 26 18.6 7.4 7.4 13 16.7 18.6 26 3.7 11.1 7.4 20.4 7.4 33.4 0 11.1-1.9 22.3-7.4 33.4-3.7 11.1-11.1 18.6-18.6 26-7.4 7.4-16.7 13-26 18.6-9.3 3.7-20.4 7.4-31.6 7.4s-22.3-1.9-33.4-7.4c-9.3-3.7-18.6-11.1-26-18.6-7.4-7.4-13-16.7-18.6-26-3.7-11.2-7.4-20.4-7.4-33.4 0-11.1 1.9-22.3 7.4-33.4 3.7-11.2 11.1-18.6 18.6-26 7.4-7.4 16.7-13 26-18.6 11.1-3.8 22.3-5.6 33.4-5.6z m380.9 0c11.1 0 22.3 1.9 31.6 5.6 11.1 3.7 18.6 9.3 26 18.6 7.4 7.4 13 16.7 18.6 26 3.7 11.1 7.4 20.4 7.4 33.4 0 11.1-1.9 22.3-7.4 33.4-3.7 11.1-11.1 18.6-18.6 26-7.4 7.4-16.7 13-26 18.6-11.1 3.7-20.4 7.4-31.6 7.4-11.1 0-22.3-1.9-31.6-7.4-9.3-3.7-18.6-11.1-26-18.6-7.4-7.4-13-16.7-18.6-26-3.7-11.2-7.4-20.4-7.4-33.4 0-11.1 1.9-22.3 7.4-33.4 3.7-11.2 11.1-18.6 18.6-26 7.4-7.4 16.7-13 26-18.6 9.3-3.8 20.5-5.6 31.6-5.6z" fill="#18BFFF" ></path><path d="M330.3 302.1h215.5c18.6 0 33.4 14.9 33.4 33.4 0 18.6-14.9 33.4-33.4 33.4H330.3c-18.6 0-33.4-14.9-33.4-33.4-0.1-18.5 14.8-33.4 33.4-33.4z" fill="#FFFFFF" ></path></symbol><symbol id="icon-coffee" viewBox="0 0 1024 1024"><path d="M944.7 585.9c-13-93.3-132.3-97.9-132.3-97.9 0-29.8-39.8-47.4-39.8-47.4H202c-36.7 0-42.1 51.2-42.1 51.2 7.7 287.6 181.2 382.5 181.2 382.5h299.1C683.1 842.9 742 751.8 742 751.8c9.2 3.1 72.7-0.8 97.9-6.1 25.2-5.4 117.8-66.6 104.8-159.8z m-579 238.6C220.4 719 234.9 496.4 234.9 496.4h80.3c-44.4 126.2 43.6 285.3 55.8 307.5 12.3 22.2-5.3 20.6-5.3 20.6zM833 693.7c-37.5 22.2-65.1 7.7-65.1 7.7 39-54.3 42.1-159.1 42.1-159.1 6.8 2.3 12.3-26 61.2 23.7 49 49.6-0.7 105.5-38.2 127.7z" fill="#FF8657" ></path><path d="M137.8 959.1h674.3c33.1 0 60-28.3 60-63.4H78c0 35.1 26.7 63.4 59.8 63.4zM351.8 130s-119.3 72.7-44.4 140.7c74.9 68.1 68.1 93.3 24.5 153 0 0 81.8-41.3 71.1-104.1s-89.5-94.1-72.7-137.6c17-43.6 21.5-52 21.5-52zM615 91.8s-119.3 72.7-44.3 140.7c74.8 68.1 67.9 93.3 24.4 153 0 0 81.9-41.3 71.1-104.1-10.7-62.7-89.5-94.1-72.7-137.6 16.9-43.6 21.5-52 21.5-52zM491.1 64.2s-74.2 6.1-88 78c-13.7 71.9 32.9 98.7 68.8 134.7 35.9 35.9 20.6 103.2-19.9 150.7 0 0 72.7-25.3 89.5-94.9 16.8-69.7-17.3-94.1-52.7-134.6-35.5-40.5-32.1-113.9 2.3-133.9z" fill="#FF8657" ></path></symbol><symbol id="icon-more-up" viewBox="0 0 1024 1024"><path d="M883.673 522.32L480.258 925.736c-17.387 17.387-17.387 45.57599999 0 62.963 17.387 17.387 45.57599999 17.387 62.963 0l464.586-464.586-464.586-464.586c-17.387-17.387-45.57599999-17.387-62.963 0s-17.387 45.577 0 62.964L883.673 522.32zM437.733 523.043L35.04 925.73600001c-17.387 17.387-17.387 45.57599999 0 62.96299999 17.387 17.387 45.57599999 17.387 62.96299999 0l464.58500001-464.586L98.003 59.52700001c-17.387-17.387-45.57599999-17.387-62.963-1e-8-17.387 17.387-17.387 45.577 0 62.964L437.733 523.043z" ></path></symbol><symbol id="icon-position" viewBox="0 0 1024 1024"><path d="M936.448 479.616h-85.504c-15.488-162.56-144.768-291.968-307.328-307.328V86.4c0-18.048-14.592-32.64-32.64-32.64s-32.64 14.592-32.64 32.64v85.888c-162.56 15.488-291.968 144.768-307.328 307.328H85.12c-18.048 0-32.64 14.592-32.64 32.64s14.592 32.64 32.64 32.64h85.888c15.488 162.56 144.768 291.968 307.328 307.328V938.24c0 18.048 14.592 32.64 32.64 32.64s32.64-14.592 32.64-32.64v-86.016c162.56-15.488 291.968-144.768 307.328-307.328h85.504c18.048 0 32.64-14.592 32.64-32.64 0.128-17.92-14.592-32.64-32.64-32.64zM510.976 790.272c-153.472 0-277.888-124.416-277.888-277.888v-0.128-0.128c0-153.344 124.416-277.76 277.76-277.76 50.432 0 97.664 13.44 138.368 36.864 83.456 48 139.776 137.984 139.776 241.152 0 153.472-124.416 277.888-278.016 277.888z" ></path><path d="M439.68 512.384c0 39.424 31.872 71.296 71.296 71.296 39.424 0 71.296-31.872 71.296-71.296 0-25.472-13.568-49.024-35.584-61.696-22.016-12.672-49.28-12.672-71.296 0-22.016 12.672-35.712 36.224-35.712 61.696z m0 0" ></path></symbol><symbol id="icon-roundcheckfill-copy" viewBox="0 0 1024 1024"><path d="M512 65.984C266.08 65.984 65.984 266.08 65.984 512c0 245.952 200.064 446.016 446.016 446.016 245.952 0 446.016-200.064 446.016-446.016C958.016 266.08 757.952 65.984 512 65.984zM727.232 438.432l-256.224 259.008c-0.064 0.064-0.192 0.096-0.256 0.192-0.096 0.064-0.096 0.192-0.192 0.256-2.048 1.984-4.576 3.2-6.944 4.544-1.184 0.672-2.144 1.696-3.392 2.176-3.84 1.536-7.904 2.336-11.968 2.336-4.096 0-8.224-0.8-12.096-2.4-1.28-0.544-2.304-1.632-3.52-2.304-2.368-1.344-4.832-2.528-6.88-4.544-0.064-0.064-0.096-0.192-0.16-0.256-0.064-0.096-0.192-0.096-0.256-0.192l-126.016-129.504c-12.32-12.672-12.032-32.928 0.64-45.248 12.672-12.288 32.896-12.064 45.248 0.64l103.264 106.112 233.28-235.84c12.416-12.576 32.704-12.704 45.248-0.256C739.52 405.6 739.648 425.856 727.232 438.432z" fill="#0092f1" ></path></symbol></svg>';var script=function(){var scripts=document.getElementsByTagName("script");return scripts[scripts.length-1]}();var shouldInjectCss=script.getAttribute("data-injectcss");var ready=function(fn){if(document.addEventListener){if(~["complete","loaded","interactive"].indexOf(document.readyState)){setTimeout(fn,0)}else{var loadFn=function(){document.removeEventListener("DOMContentLoaded",loadFn,false);fn()};document.addEventListener("DOMContentLoaded",loadFn,false)}}else if(document.attachEvent){IEContentLoaded(window,fn)}function IEContentLoaded(w,fn){var d=w.document,done=false,init=function(){if(!done){done=true;fn()}};var polling=function(){try{d.documentElement.doScroll("left")}catch(e){setTimeout(polling,50);return}init()};polling();d.onreadystatechange=function(){if(d.readyState=="complete"){d.onreadystatechange=null;init()}}}};var before=function(el,target){target.parentNode.insertBefore(el,target)};var prepend=function(el,target){if(target.firstChild){before(el,target.firstChild)}else{target.appendChild(el)}};function appendSvg(){var div,svg;div=document.createElement("div");div.innerHTML=svgSprite;svgSprite=null;svg=div.getElementsByTagName("svg")[0];if(svg){svg.setAttribute("aria-hidden","true");svg.style.position="absolute";svg.style.width=0;svg.style.height=0;svg.style.overflow="hidden";prepend(svg,document.body)}}if(shouldInjectCss&&!window.__iconfont__svg__cssinject__){window.__iconfont__svg__cssinject__=true;try{document.write("<style>.svgfont {display: inline-block;width: 1em;height: 1em;fill: currentColor;vertical-align: -0.1em;font-size:16px;}</style>")}catch(e){console&&console.log(e)}}ready(appendSvg)})(window) \ No newline at end of file diff --git a/src/assets/iconfont/iconfont.svg b/src/assets/iconfont/iconfont.svg new file mode 100644 index 0000000..4874dd2 --- /dev/null +++ b/src/assets/iconfont/iconfont.svg @@ -0,0 +1,264 @@ +<?xml version="1.0" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" > +<!-- +2013-9-30: Created. +--> +<svg> +<metadata> +Created by iconfont +</metadata> +<defs> + +<font id="iconfont" horiz-adv-x="1024" > + <font-face + font-family="iconfont" + font-weight="500" + font-stretch="normal" + units-per-em="1024" + ascent="896" + descent="-128" + /> + <missing-glyph /> + + <glyph glyph-name="x" unicode="x" horiz-adv-x="1001" +d="M281 543q-27 -1 -53 -1h-83q-18 0 -36.5 -6t-32.5 -18.5t-23 -32t-9 -45.5v-76h912v41q0 16 -0.5 30t-0.5 18q0 13 -5 29t-17 29.5t-31.5 22.5t-49.5 9h-133v-97h-438v97zM955 310v-52q0 -23 0.5 -52t0.5 -58t-10.5 -47.5t-26 -30t-33 -16t-31.5 -4.5q-14 -1 -29.5 -0.5 +t-29.5 0.5h-32l-45 128h-439l-44 -128h-29h-34q-20 0 -45 1q-25 0 -41 9.5t-25.5 23t-13.5 29.5t-4 30v167h911zM163 247q-12 0 -21 -8.5t-9 -21.5t9 -21.5t21 -8.5q13 0 22 8.5t9 21.5t-9 21.5t-22 8.5zM316 123q-8 -26 -14 -48q-5 -19 -10.5 -37t-7.5 -25t-3 -15t1 -14.5 +t9.5 -10.5t21.5 -4h37h67h81h80h64h36q23 0 34 12t2 38q-5 13 -9.5 30.5t-9.5 34.5q-5 19 -11 39h-368zM336 498v228q0 11 2.5 23t10 21.5t20.5 15.5t34 6h188q31 0 51.5 -14.5t20.5 -52.5v-227h-327z" /> + + + + <glyph glyph-name="feedback" unicode="" d="M800-64L224-64c-52.928 0-96 43.072-96 96L128 672c0 52.928 43.072 96 96 96l448 0c17.696 0 32-14.336 32-32s-14.304-32-32-32L224 704C206.368 704 192 689.6320000000001 192 672l0-640c0-17.664 14.368-32 32-32l576 0c17.664 0 32 14.336 32 32L832 544c0 17.664 14.304 32 32 32s32-14.336 32-32l0-512C896-20.927999999999997 852.928-64 800-64zM612 448c-8.192 0-16.384 3.136-22.624 9.376-12.512 12.512-12.512 32.736 0 45.248l318.016 318.016c12.512 12.512 32.736 12.512 45.248 0s12.512-32.736 0-45.248l-318.016-318.016C628.384 451.104 620.192 448 612 448zM480 448L288 448c-17.664 0-32 14.336-32 32s14.336 32 32 32l192 0c17.664 0 32-14.336 32-32S497.664 448 480 448zM672 256L288 256c-17.664 0-32 14.304-32 32s14.336 32 32 32l384 0c17.696 0 32-14.304 32-32S689.696 256 672 256z" horiz-adv-x="1024" /> + + + <glyph glyph-name="location" unicode="" d="M512 288c-105.888 0-192 86.112-192 192s86.112 192 192 192 192-86.112 192-192S617.888 288 512 288zM512 608c-70.592 0-128-57.408-128-128s57.408-128 128-128c70.592 0 128 57.408 128 128S582.592 608 512 608zM512-64c-7.936 0-15.904 2.944-22.08 8.832-12.768 12.224-13.248 32.48-1.056 45.248C575.392 80.8 800 345.664 800 480c0 158.784-129.184 288-288 288-158.784 0-288-129.216-288-288 0-75.616 72.544-206.08 204.256-367.424 11.2-13.728 9.152-33.888-4.544-45.024-13.696-11.168-33.888-9.152-45.024 4.544C233.568 249.824 160 387.072 160 480 160 674.08 317.92 832 512 832s352-157.92 352-352c0-187.36-315.424-520.032-328.832-534.08C528.864-60.672 520.448-64 512-64z" horiz-adv-x="1024" /> + + + <glyph glyph-name="roundcheckfill" unicode="" d="M512 830.016C266.08 830.016 65.984 629.92 65.984 384c0-245.952 200.064-446.016 446.016-446.016 245.952 0 446.016 200.064 446.016 446.016C958.016 629.92 757.952 830.016 512 830.016zM727.232 457.568l-256.224-259.008c-0.064-0.064-0.192-0.096-0.256-0.192-0.096-0.064-0.096-0.192-0.192-0.256-2.048-1.984-4.576-3.2-6.944-4.544-1.184-0.672-2.144-1.696-3.392-2.176-3.84-1.536-7.904-2.336-11.968-2.336-4.096 0-8.224 0.8-12.096 2.4-1.28 0.544-2.304 1.632-3.52 2.304-2.368 1.344-4.832 2.528-6.88 4.544-0.064 0.064-0.096 0.192-0.16 0.256-0.064 0.096-0.192 0.096-0.256 0.192l-126.016 129.504c-12.32 12.672-12.032 32.928 0.64 45.248 12.672 12.288 32.896 12.064 45.248-0.64l103.264-106.112 233.28 235.84c12.416 12.576 32.704 12.704 45.248 0.256C739.52 490.4 739.648 470.144 727.232 457.568z" horiz-adv-x="1024" /> + + + <glyph glyph-name="roundcheck" unicode="" d="M512-64C264.96-64 64 136.96 64 384S264.96 832 512 832s448-200.96 448-448S759.04-64 512-64zM512 767.712C300.416 767.712 128.288 595.584 128.288 384c0-211.552 172.128-383.712 383.712-383.712 211.552 0 383.712 172.16 383.712 383.712C895.712 595.584 723.552 767.712 512 767.712zM726.976 502.816c-12.544 12.448-32.832 12.32-45.248-0.256l-233.28-235.84-103.264 106.112c-12.352 12.704-32.608 12.928-45.248 0.64-12.672-12.32-12.96-32.608-0.64-45.248l126.016-129.504c0.064-0.096 0.192-0.096 0.256-0.192 0.064-0.064 0.096-0.192 0.16-0.256 2.016-1.984 4.512-3.2 6.88-4.544 1.248-0.672 2.24-1.792 3.52-2.304 3.872-1.6 8-2.4 12.096-2.4 4.064 0 8.128 0.8 11.968 2.336 1.248 0.512 2.208 1.536 3.392 2.176 2.4 1.344 4.896 2.528 6.944 4.544 0.064 0.064 0.096 0.192 0.192 0.256 0.064 0.096 0.16 0.128 0.256 0.192l256.224 259.008C739.648 470.144 739.52 490.4 726.976 502.816z" horiz-adv-x="1024" /> + + + <glyph glyph-name="roundclosefill" unicode="" d="M512 832C264.992 832 64 631.04 64 384s200.96-448 448-448c247.008 0 448 200.96 448 448S759.04 832 512 832zM694.752 246.016c12.48-12.544 12.448-32.768-0.064-45.248-6.24-6.208-14.4-9.344-22.592-9.344-8.224 0-16.416 3.136-22.656 9.408l-137.6 138.016-138.048-136.576c-6.24-6.144-14.368-9.248-22.496-9.248-8.256 0-16.48 3.168-22.752 9.504-12.416 12.576-12.32 32.8 0.256 45.248l137.888 136.384-137.376 137.824c-12.48 12.512-12.448 32.768 0.064 45.248 12.512 12.512 32.736 12.448 45.248-0.064l137.568-137.984 138.048 136.576c12.544 12.448 32.832 12.32 45.248-0.256 12.448-12.576 12.32-32.832-0.256-45.248l-137.888-136.384L694.752 246.016z" horiz-adv-x="1024" /> + + + <glyph glyph-name="roundclose" unicode="" d="M512-64C264.96-64 64 136.96 64 384S264.96 832 512 832s448-200.96 448-448S759.04-64 512-64zM512 767.712C300.416 767.712 128.288 595.584 128.288 384c0-211.552 172.128-383.712 383.712-383.712 211.552 0 383.712 172.16 383.712 383.712C895.712 595.584 723.552 767.712 512 767.712zM557.056 382.624l138.368 136.864c12.576 12.416 12.672 32.672 0.256 45.248-12.416 12.576-32.704 12.672-45.248 0.256l-138.56-137.024-136.448 136.864c-12.512 12.512-32.736 12.576-45.248 0.064-12.512-12.48-12.544-32.736-0.064-45.248l136.256-136.672-137.376-135.904c-12.576-12.448-12.672-32.672-0.256-45.248 6.272-6.336 14.496-9.504 22.752-9.504 8.128 0 16.256 3.104 22.496 9.248l137.568 136.064 138.688-139.136c6.24-6.272 14.432-9.408 22.656-9.408 8.192 0 16.352 3.136 22.592 9.344 12.512 12.48 12.544 32.704 0.064 45.248L557.056 382.624z" horiz-adv-x="1024" /> + + + <glyph glyph-name="search" unicode="" d="M953.504-12.256l-152.608 163.296c61.856 74.496 95.872 167.36 95.872 265.12 0 229.344-186.624 415.968-416.032 415.968-229.344 0-415.968-186.592-415.968-415.968s186.624-415.968 416-415.968c60.096 0.032 118.048 12.576 172.224 37.248 16.096 7.328 23.2 26.304 15.872 42.368-7.328 16.128-26.4 23.264-42.368 15.872-45.856-20.864-94.88-31.456-145.76-31.488-194.08 0-351.968 157.888-351.968 351.968 0 194.048 157.888 351.968 351.968 351.968 194.112 0 352.032-157.888 352.032-351.968 0-91.36-34.848-177.92-98.08-243.744-12.256-12.736-11.84-32.992 0.864-45.248 0.96-0.928 2.208-1.28 3.296-2.08 0.864-1.28 1.312-2.752 2.4-3.904l165.504-177.088c6.272-6.752 14.816-10.144 23.36-10.144 7.84 0 15.68 2.848 21.856 8.64C964.864-45.408 965.568-25.152 953.504-12.256z" horiz-adv-x="1024" /> + + + <glyph glyph-name="unfold" unicode="" d="M890.336 565.088c-12.576 12.416-32.8 12.352-45.248-0.192L517.248 234.048 184.832 563.488c-12.576 12.448-32.8 12.352-45.28-0.192-12.448-12.576-12.352-32.832 0.192-45.28l353.312-350.112c0.544-0.544 1.248-0.672 1.792-1.184 0.128-0.128 0.16-0.288 0.288-0.416 6.24-6.176 14.4-9.28 22.528-9.28 8.224 0 16.48 3.168 22.72 9.472l350.112 353.312C902.976 532.384 902.88 552.64 890.336 565.088z" horiz-adv-x="1024" /> + + + <glyph glyph-name="camerafill" unicode="" d="M864 704 512 704c0 52.928-43.072 96-96 96l-64 0C299.072 800 256 756.928 256 704L160 704C107.072 704 64 660.928 64 608l0-512c0-52.928 43.072-96 96-96l704 0c52.928 0 96 43.072 96 96L960 608C960 660.928 916.928 704 864 704zM512 160c-105.888 0-192 86.112-192 192s86.112 192 192 192 192-86.112 192-192S617.888 160 512 160zM816 480c-26.496 0-48 21.504-48 48 0 26.496 21.504 48 48 48 26.496 0 48-21.504 48-48C864 501.504 842.496 480 816 480z" horiz-adv-x="1024" /> + + + <glyph glyph-name="comment" unicode="" d="M512-32c-8.192 0-16.384 3.136-22.624 9.376l-96 96c-12.512 12.512-12.512 32.736 0 45.248s32.736 12.512 45.248 0L512 45.248l73.376 73.376C591.36 124.64 599.488 128 608 128l224 0c17.664 0 32 14.336 32 32L864 672c0 17.632-14.336 32-32 32L192 704C174.368 704 160 689.632 160 672l0-512c0-17.664 14.368-32 32-32l96 0c17.664 0 32-14.304 32-32s-14.336-32-32-32L192 64c-52.928 0-96 43.072-96 96L96 672c0 52.928 43.072 96 96 96l640 0c52.928 0 96-43.072 96-96l0-512c0-52.928-43.072-96-96-96l-210.752 0-86.624-86.624C528.384-28.864 520.192-32 512-32zM336 384C309.536 384 288 405.536 288 432S309.536 480 336 480s48-21.536 48-48S362.464 384 336 384zM528 384c-26.464 0-48 21.536-48 48s21.536 48 48 48 48-21.536 48-48S554.464 384 528 384zM720 384c-26.464 0-48 21.536-48 48s21.536 48 48 48 48-21.536 48-48S746.464 384 720 384z" horiz-adv-x="1024" /> + + + <glyph glyph-name="notificationfill" unicode="" d="M526.432-28.064c-20.96 0-44.16 12.576-68.96 37.344L274.752 192 192 192c-52.928 0-96 43.072-96 96l0 192c0 52.928 43.072 96 96 96l82.752 0 182.624 182.624c24.576 24.576 47.744 37.024 68.864 37.024C549.184 795.648 576 780 576 736l0-704C576-12.352 549.28-28.064 526.432-28.064zM687.584 165.632c-6.464 0-12.992 1.952-18.656 6.016-14.336 10.304-17.632 30.304-7.328 44.672l12.672 17.344C707.392 278.56 736 317.376 736 384c0 69.024-25.344 102.528-57.44 144.928-5.664 7.456-11.328 15.008-16.928 22.784-10.304 14.336-7.04 34.336 7.328 44.672 14.368 10.368 34.336 7.04 44.672-7.328 5.248-7.328 10.656-14.464 15.968-21.504C764.224 521.792 800 474.496 800 384c0-87.648-39.392-141.12-74.144-188.32l-12.224-16.736C707.36 170.24 697.568 165.632 687.584 165.632zM796.448 56.992c-7.488 0-15.04 2.624-21.088 7.936-13.28 11.648-14.624 31.872-2.976 45.152C836.608 183.328 896 267.136 896 384c0 116.864-59.392 200.704-123.616 273.888-11.648 13.312-10.304 33.504 2.976 45.184 13.216 11.648 33.44 10.336 45.152-2.944C889.472 621.44 960 522.4 960 384s-70.528-237.472-139.488-316.096C814.144 60.672 805.312 56.992 796.448 56.992z" horiz-adv-x="1024" /> + + + <glyph glyph-name="wang" unicode="" d="M528 368c-26.528 0-48 21.472-48 48l0 64c0 26.528 21.472 48 48 48 26.496 0 48-21.472 48-48l0-64C576 389.472 554.496 368 528 368zM719.008 368c-26.496 0-48 21.472-48 48l0 64c0 26.528 21.504 48 48 48s48-21.472 48-48l0-64C767.008 389.472 745.504 368 719.008 368zM512 828.48c-81.152 0-159.488-21.696-228.48-62.72C244.96 808.032 189.056 832 125.344 832 113.696 832 103.008 825.632 97.376 815.456S92.096 792.768 98.272 782.912C98.624 782.4 131.808 728.608 140.16 646.08c1.664-16.48 15.584-28.768 31.808-28.768 1.088 0 2.144 0.032 3.264 0.16 17.568 1.792 30.4 17.472 28.608 35.072C199.488 695.52 189.44 731.84 179.36 759.328 203.84 751.136 230.336 735.488 249.504 705.92 249.6 705.76 249.76 705.696 249.856 705.536 249.952 705.408 249.952 705.28 250.016 705.152 251.168 703.488 252.8 702.496 254.176 701.12c1.536-1.536 2.848-3.328 4.64-4.48C260.64 695.456 262.72 694.944 264.704 694.144c1.824-0.704 3.488-1.728 5.376-2.112C272.16 691.616 274.24 691.904 276.32 691.904c2.016 0 4-0.32 6.016 0.064C284.32 692.352 286.08 693.408 287.968 694.176 289.92 694.944 291.936 695.296 293.76 696.448c0.128 0.096 0.192 0.256 0.352 0.352C294.24 696.864 294.4 696.896 294.528 696.96 358.624 741.12 433.824 764.48 512 764.48c211.584 0 383.712-172.128 383.712-383.744S723.584-3.008 512-3.008 128.256 169.152 128.256 380.736c0 54.176 11.04 106.528 32.864 155.616 7.168 16.128-0.096 35.04-16.256 42.24-16.128 7.168-35.04-0.096-42.24-16.256-25.44-57.312-38.368-118.4-38.368-181.568 0-246.88 200.864-447.744 447.744-447.744s447.712 200.864 447.712 447.744S758.88 828.48 512 828.48z" horiz-adv-x="1024" /> + + + <glyph glyph-name="back" unicode="" d="M671.968-16c-12.288 0-24.576 4.672-33.952 14.048L286.048 350.016c-18.752 18.72-18.752 49.12 0 67.872l351.968 352c18.752 18.752 49.12 18.752 67.872 0 18.752-18.72 18.752-49.12 0-67.872l-318.016-318.048 318.016-318.016c18.752-18.752 18.752-49.12 0-67.872C696.544-11.328 684.256-16 671.968-16z" horiz-adv-x="1024" /> + + + <glyph glyph-name="settings" unicode="" d="M512 288c-52.928 0-96 43.072-96 96s43.072 96 96 96 96-43.072 96-96S564.928 288 512 288zM512 416c-17.632 0-32-14.368-32-32s14.368-32 32-32 32 14.368 32 32S529.632 416 512 416zM631.04-64c-10.016 0-19.712 4.736-25.856 13.12l-73.408 100.48c-13.664-0.832-25.92-0.864-39.584 0l-73.376-100.48c-7.904-10.816-21.728-15.616-34.656-11.872-34.592 9.888-67.488 23.456-97.76 40.32-11.712 6.528-18.112 19.648-16.032 32.896l19.2 123.264c-9.824 8.704-19.136 18.016-27.84 27.808l-123.264-19.2c-13.056-1.984-26.336 4.352-32.896 16.064-16.896 30.368-30.464 63.296-40.32 97.824-3.68 12.864 1.056 26.72 11.904 34.624l100.448 73.376C177.152 371.04 176.928 377.6 176.928 384s0.224 12.96 0.672 19.776L77.12 477.184c-10.816 7.936-15.584 21.728-11.904 34.656 9.856 34.496 23.424 67.392 40.32 97.792 6.56 11.712 19.712 18.048 32.896 16.064l123.264-19.2c8.736 9.824 18.016 19.104 27.84 27.84l-19.2 123.264C268.288 770.816 274.72 783.936 286.432 790.464c30.4 16.896 63.296 30.464 97.76 40.32 12.928 3.648 26.72-1.056 34.656-11.904l73.376-100.448c13.568 0.896 25.824 0.896 39.584 0l73.408 100.48c7.904 10.848 21.664 15.52 34.656 11.904 34.464-9.856 67.328-23.424 97.76-40.32 11.712-6.528 18.112-19.648 16.064-32.896L734.432 634.24c9.824-8.736 19.104-18.016 27.808-27.776l123.328 19.2c13.152 2.016 26.336-4.384 32.864-16.032 16.896-30.4 30.496-63.296 40.352-97.824 3.648-12.896-1.088-26.688-11.904-34.624l-100.48-73.408c0.448-6.816 0.672-13.376 0.672-19.776s-0.224-12.96-0.672-19.776l100.48-73.376c10.816-7.904 15.552-21.728 11.904-34.624-9.856-34.496-23.424-67.424-40.352-97.824-6.528-11.712-19.488-18.048-32.896-16.064l-123.296 19.2c-8.672-9.76-17.984-19.072-27.808-27.776l19.232-123.296c2.048-13.248-4.352-26.368-16.064-32.896-30.24-16.832-63.136-30.4-97.76-40.32C636.928-63.584 633.984-64 631.04-64zM337.152 23.328c13.984-6.752 28.544-12.704 43.552-17.92l70.528 96.576c6.784 9.28 17.984 14.272 29.472 12.896 20.576-2.336 42.08-2.336 62.624 0 11.84 1.376 22.72-3.616 29.472-12.896l70.528-96.576c15.04 5.184 29.6 11.168 43.552 17.92l-18.432 118.368c-1.76 11.36 2.72 22.848 11.712 30.016 16.384 12.992 31.264 27.872 44.16 44.128 7.168 8.992 18.4 13.504 30.016 11.744l118.368-18.432c6.752 14.016 12.736 28.576 17.92 43.552l-96.576 70.528c-9.28 6.784-14.208 18.016-12.896 29.472 1.152 10.272 1.952 20.704 1.952 31.296s-0.768 21.024-1.952 31.296c-1.312 11.424 3.616 22.688 12.896 29.472l96.576 70.56c-5.152 15.008-11.168 29.568-17.92 43.552l-118.4-18.432c-11.328-1.696-22.816 2.688-29.984 11.744-12.896 16.256-27.776 31.104-44.16 44.128-8.992 7.168-13.472 18.592-11.712 29.984l18.432 118.4c-14.016 6.752-28.576 12.736-43.52 17.92l-70.56-96.576c-6.784-9.28-17.696-14.368-29.472-12.928-20.544 2.368-42.016 2.4-62.56 0-11.52-1.344-22.752 3.616-29.536 12.896l-70.528 96.576c-14.976-5.152-29.536-11.136-43.552-17.92l18.432-118.368c1.76-11.392-2.72-22.848-11.744-30.016-16.32-12.928-31.2-27.808-44.128-44.128-7.168-9.024-18.56-13.472-30.016-11.744l-118.368 18.432c-6.752-14.016-12.736-28.576-17.92-43.552l96.576-70.56c9.312-6.784 14.24-18.08 12.896-29.536C241.696 404.992 240.928 394.592 240.928 384s0.768-20.992 1.952-31.264c1.344-11.456-3.616-22.688-12.896-29.504l-96.576-70.528c5.184-15.008 11.168-29.568 17.92-43.552l118.368 18.432c11.392 1.76 22.848-2.752 30.016-11.744 12.896-16.32 27.744-31.168 44.128-44.128 9.024-7.168 13.504-18.624 11.744-30.016L337.152 23.328z" horiz-adv-x="1024" /> + + + <glyph glyph-name="question" unicode="" d="M512 111.648m-48 0a1.5 1.5 0 1 0 96 0 1.5 1.5 0 1 0-96 0ZM512-64C264.96-64 64 136.96 64 384S264.96 832 512 832s448-200.96 448-448S759.04-64 512-64zM512 767.712C300.416 767.712 128.288 595.584 128.288 384c0-211.552 172.128-383.712 383.712-383.712 211.552 0 383.712 172.16 383.712 383.712C895.712 595.584 723.552 767.712 512 767.712zM512 222.304c-17.664 0-32 14.336-32 32l0 54.112c0 52.352 40 92.352 75.328 127.648C581.216 461.984 608 488.736 608 510.08c0 53.344-43.072 96.736-96 96.736-53.824 0-96-41.536-96-94.56 0-17.664-14.336-32-32-32s-32 14.336-32 32c0 87.424 71.776 158.56 160 158.56s160-72.096 160-160.736c0-47.904-36.32-84.192-71.424-119.296C572.736 363.008 544 334.272 544 308.448l0-54.112C544 236.672 529.664 222.304 512 222.304z" horiz-adv-x="1024" /> + + + <glyph glyph-name="wangfill" unicode="" d="M512 828.512c-81.056 0-159.36-21.536-228.288-62.496C245.152 808.32 189.024 832 125.344 832 113.664 832 102.912 825.664 97.28 815.392c-5.632-10.24-5.216-22.72 1.056-32.576 0.32-0.512 31.136-49.664 40.864-128.192-8.128-27.296-26.72-65.12-37.44-94.336-22.912-62.464-37.536-116.416-37.536-179.52 0-246.88 200.864-447.776 447.744-447.776s447.712 200.864 447.712 447.776C959.712 627.648 758.88 828.512 512 828.512zM576 416c0-26.496-21.504-48-48-48S480 389.504 480 416l0 64c0 26.528 21.504 48 48 48S576 506.528 576 480L576 416zM767.008 416c0-26.496-21.504-48-48-48s-48 21.504-48 48l0 64c0 26.528 21.504 48 48 48s48-21.472 48-48L767.008 416z" horiz-adv-x="1024" /> + + + <glyph glyph-name="home" unicode="" d="M96 416c-9.6 0-19.2 3.2-25.6 12.8-12.8 12.8-9.6 35.2 3.2 44.8l377.6 310.4c35.2 25.6 86.4 25.6 118.4 0l377.6-307.2c12.8-9.6 16-32 3.2-44.8s-32-16-44.8-3.2l-374.4 300.8c-9.6 6.4-28.8 6.4-38.4 0l-377.6-307.2c-6.4-6.4-12.8-6.4-19.2-6.4zM816-32h-208c-19.2 0-32 12.8-32 32v150.4c0 22.4-38.4 44.8-67.2 44.8s-64-19.2-64-44.8v-150.4c0-19.2-12.8-32-32-32h-201.6c-48 0-83.2 35.2-83.2 80v304c0 19.2 12.8 32 32 32s32-12.8 32-32v-304c0-9.6 6.4-16 19.2-16h172.8v118.4c0 64 67.2 108.8 128 108.8s131.2-44.8 131.2-108.8v-118.4h176c9.6 0 16 0 16 19.2v300.8c0 19.2 12.8 32 32 32s32-12.8 32-32v-304c-3.2-48-35.2-80-83.2-80z" horiz-adv-x="1024" /> + + + <glyph glyph-name="home-fill" unicode="" d="M947.2 473.6L572.8 780.8c-32 25.6-86.4 25.6-118.4 0L76.8 470.4c-12.8-6.4-16-22.4-9.6-35.2 3.2-12.8 16-19.2 28.8-19.2h32v-364.8C128 3.2000000000000455 163.2-32 211.2-32H416c19.2 0 32 12.8 32 32v147.2c0 22.4 35.2 44.8 64 44.8 28.8 0 67.2-22.4 67.2-44.8V0c0-19.2 12.8-32 32-32h208c48 0 80 32 80 83.2V416h32c12.8 0 25.6 9.6 28.8 22.4 3.2 12.8 0 25.6-12.8 35.2z" horiz-adv-x="1024" /> + + + <glyph glyph-name="fold" unicode="" d="M887.328 278.848 533.952 628.992c-0.512 0.512-1.216 0.672-1.76 1.152-0.128 0.128-0.16 0.32-0.288 0.448-12.576 12.416-32.832 12.352-45.28-0.192L136.512 277.056c-12.448-12.576-12.352-32.8 0.192-45.248 6.24-6.176 14.4-9.28 22.528-9.28 8.224 0 16.48 3.168 22.72 9.472l327.84 330.816 332.48-329.408c6.24-6.176 14.368-9.28 22.528-9.28 8.256 0 16.48 3.168 22.72 9.472C899.968 246.144 899.872 266.4 887.328 278.848z" horiz-adv-x="1024" /> + + + <glyph glyph-name="share" unicode="" d="M768.704 192.384c-35.648 0-67.904-14.72-91.136-38.304l-309.152 171.712c9.056 17.568 14.688 37.184 14.688 58.272 0 12.576-2.368 24.48-5.76 35.936l304.608 189.152c22.688-20.416 52.384-33.184 85.216-33.184 70.592 0 128 57.408 128 128s-57.408 128-128 128-128-57.408-128-128c0-14.56 2.976-28.352 7.456-41.408l-301.824-187.392c-23.136 22.784-54.784 36.928-89.728 36.928-70.592 0-128-57.408-128-128 0-70.592 57.408-128 128-128 25.664 0 49.504 7.744 69.568 20.8l321.216-178.4c-3.04-10.944-5.184-22.208-5.184-34.08 0-70.592 57.408-128 128-128s128 57.408 128 128S839.328 192.384 768.704 192.384zM767.2 767.968c35.296 0 64-28.704 64-64s-28.704-64-64-64-64 28.704-64 64S731.904 767.968 767.2 767.968zM191.136 384.064c0 35.296 28.704 64 64 64s64-28.704 64-64c0-35.296-28.704-64-64-64S191.136 348.768 191.136 384.064zM768.704 0.384c-35.296 0-64 28.704-64 64s28.704 64 64 64 64-28.704 64-64S804 0.384 768.704 0.384z" horiz-adv-x="1024" /> + + + <glyph glyph-name="notice" unicode="" d="M889.92 146.272c-1.184 1.632-119.232 166.144-119.232 287.392 0 168.448-76.16 254.784-162.688 287.008L608 736c0 52.928-43.072 96-96 96s-96-43.072-96-96l0-16.576c-10.784-7.904-16.096-21.792-11.808-35.232 5.376-16.832 23.424-26.048 40.224-20.736C462.176 669.12 481.344 672 501.312 672l21.376 0c115.232 0 184-89.088 184-238.304 0-108.032 72.896-235.392 110.176-293.504C759.488 114.016 633.824 64 512 64c-121.504 0-247.424 50.368-304.832 76.64 37.312 57.984 110.144 185.024 110.144 293.056 0 62.432 11.616 114.208 34.528 153.92 8.832 15.328 3.584 34.88-11.712 43.712-15.392 8.864-34.88 3.584-43.712-11.712-28.608-49.536-43.104-112.096-43.104-185.92 0-121.216-118.016-285.248-119.2-286.88-5.408-7.456-7.36-16.928-5.312-25.952 2.048-8.96 7.872-16.672 16-21.024 5.664-3.072 107.392-57.28 233.536-84.512C399.744-51.072 452.16-96 512-96s112.256 44.928 133.632 111.296c126.112 27.104 227.84 80.992 233.504 84.032 8.128 4.352 14.016 12.032 16.064 21.024S895.328 138.784 889.92 146.272zM501.312 736C494.048 736 487.104 735.008 480 734.432L480 736c0 17.632 14.368 32 32 32s32-14.368 32-32l0-0.928C536.832 735.68 529.728 736 522.688 736L501.312 736zM512-32c-22.336 0-43.136 13.408-57.984 35.296C473.216 1.28 492.608 0 512 0s38.784 1.28 57.984 3.296C555.136-18.624 534.304-32 512-32z" horiz-adv-x="1024" /> + + + <glyph glyph-name="iconfontdengdai" unicode="" d="M511.674077 832.555016c-247.539816 0-448.208115-200.650903-448.208115-448.208115 0-247.521396 200.668299-448.208115 448.208115-448.208115s448.208115 200.686718 448.208115 448.208115C959.882192 631.904113 759.213893 832.555016 511.674077 832.555016zM672.568511 154.153148c-14.570857-14.700817-38.498826-14.700817-53.06252 0L487.018537 287.358963c-9.893324 9.956769-8.998955 23.817452-8.998955 44.900629 0 21.120017-4.779863 265.212314-4.779863 265.212314 0 20.935822 16.752546 37.897122 37.414121 37.897122 20.662599 0 37.414121-16.9613 37.414121-37.897122l0-265.212314c0-1.093914 124.792191-124.818797 124.792191-124.818797C687.422823 192.742025 687.131181 168.88773400000002 672.568511 154.153148z" horiz-adv-x="1024" /> + + + <glyph glyph-name="eye" unicode="" d="M992 383.904c0 5.76-0.992 10.592-1.28 11.136-0.192 2.88-1.152 8.064-2.08 10.816-0.256 0.672-0.544 1.376-0.832 2.08-0.48 1.568-1.024 3.104-1.6 4.32C897.664 605.8879999999999 707.104 736 512 736 316.928 736 126.368 605.9839999999999 38.24 413.408c-1.056-2.112-1.792-4.096-2.272-5.856-0.224-0.544-0.448-1.088-0.64-1.6-1.76-5.088-1.792-8.64-1.632-7.744-0.832-3.744-1.568-11.168-1.568-11.168-0.224-2.272-0.224-4.032 0.032-6.304 0 0 0.736-6.464 1.088-7.808 0.128-1.824 0.576-4.512 1.12-6.976l-0.032 0c0.448-2.08 1.12-4.096 1.984-6.08 0.48-1.536 0.992-2.976 1.472-4.032C126.432 162.144 316.992 32 512 32c195.136 0 385.696 130.048 473.216 321.696 1.376 2.496 2.24 4.832 2.848 6.912 0.256 0.608 0.48 1.184 0.672 1.728 1.536 4.48 1.856 8.32 1.728 8.32 0 0 0 0-0.032-0.032C991.04 373.72799999999995 992 378.36800000000005 992 383.904zM927.328 381.53599999999994c-0.032-0.16-0.096-0.32-0.128-0.48-0.128-0.416-0.288-0.864-0.416-1.376C848.032 209.91999999999996 681.696 96 512 96c-169.28 0-335.328 113.568-414.88 283.968-0.16 0.576-0.32 1.152-0.512 1.696-0.064 0.544-0.16 1.024-0.192 1.344-0.064 0.352-0.128 0.8-0.192 1.248l0.032 0.416c0.16 0.704 0.288 1.44 0.384 2.208 0.128 0.416 0.256 0.832 0.384 1.28C175.84 558.0160000000001 342.304 672 512 672c169.76 0 336.192-114.08 414.752-283.68 0.096-0.32 0.16-0.608 0.256-0.832 0.064-0.288 0.16-0.576 0.256-0.864 0.16-1.28 0.32-2.528 0.48-3.168C927.552 382.81600000000003 927.456 382.17600000000004 927.328 381.53599999999994zM512 544c-88.224 0-160-71.776-160-160s71.776-160 160-160 160 71.776 160 160S600.224 544 512 544zM512 288c-52.928 0-96 43.072-96 96s43.072 96 96 96 96-43.072 96-96S564.928 288 512 288z" horiz-adv-x="1024" /> + + + <glyph glyph-name="news-fill" unicode="" d="M704 163.20000000000005c51.2 0 96 41.6 96 96V672c0 51.2-41.6 96-96 96H156.8c-51.2 0-96-41.6-96-96v-412.8c0-51.2 41.6-96 96-96H192v-160c0-12.8 9.6-25.6 22.4-32H224c9.6 0 19.2 3.2 25.6 12.8l131.2 179.2H704zM864 643.2c-19.2 0-32-12.8-32-32s16-32 32-32 32-12.8 32-32v-348.8c0-19.2-16-25.6-32-25.6h-32c-19.2 0-32-12.8-32-32v-3.2c0-3.2-3.2-6.4-3.2-9.6v-60.8l-73.6 57.6c-3.2 3.2-9.6 3.2-16 3.2H544c-19.2 0-32-12.8-32-32s12.8-32 32-32h153.6l115.2-89.6c6.4-3.2 12.8-6.4 19.2-6.4 3.2 0 9.6 0 12.8 3.2 9.6 6.4 19.2 16 19.2 28.8v108.8c54.4 0 96 38.4 96 89.6V547.2c0 51.2-44.8 96-96 96z" horiz-adv-x="1024" /> + + + <glyph glyph-name="news" unicode="" d="M704 163.20000000000005c51.2 0 96 41.6 96 96V672c0 51.2-41.6 96-96 96H156.8c-51.2 0-96-41.6-96-96v-412.8c0-51.2 41.6-96 96-96H192v-160c0-12.8 9.6-25.6 22.4-32H224c9.6 0 19.2 3.2 25.6 12.8l131.2 179.2H704zM233.6 224c-3.2 3.2-9.6 3.2-12.8 3.2h-64c-16 0-32 12.8-32 32V672c0 16 12.8 32 32 32H704c16 0 32-12.8 32-32v-412.8c0-16-12.8-32-32-32H364.8 355.2c-3.2-3.2-3.2-3.2-6.4-3.2s-3.2-3.2-6.4-3.2l-3.2-3.2s-3.2 0-3.2-3.2L256 99.20000000000005V192c0 16-9.6 25.6-22.4 32zM864 643.2c-19.2 0-32-12.8-32-32s16-32 32-32 32-12.8 32-32v-348.8c0-19.2-16-25.6-32-25.6h-32c-19.2 0-32-12.8-32-32v-3.2c0-3.2-3.2-6.4-3.2-9.6v-60.8l-73.6 57.6c-3.2 3.2-9.6 3.2-16 3.2H544c-19.2 0-32-12.8-32-32s12.8-32 32-32h153.6l115.2-89.6c6.4-3.2 12.8-6.4 19.2-6.4 3.2 0 9.6 0 12.8 3.2 9.6 6.4 19.2 16 19.2 28.8v108.8c54.4 0 96 38.4 96 89.6V547.2c0 51.2-44.8 96-96 96z" horiz-adv-x="1024" /> + + + <glyph glyph-name="safe" unicode="" d="M712.416 538.944l-233.344-235.808-103.264 106.112c-12.384 12.704-32.608 12.928-45.248 0.64-12.672-12.32-12.96-32.608-0.64-45.248l126.016-129.504c0.064-0.096 0.192-0.096 0.256-0.192 0.064-0.064 0.096-0.192 0.16-0.256 2.08-2.048 4.608-3.264 7.008-4.64 1.184-0.672 2.176-1.728 3.392-2.208 3.872-1.6 7.968-2.4 12.096-2.4 4.064 0 8.128 0.8 11.968 2.336 1.248 0.512 2.208 1.536 3.392 2.176 2.4 1.344 4.896 2.528 6.944 4.544 0.064 0.064 0.096 0.192 0.192 0.256 0.064 0.096 0.16 0.128 0.256 0.192l256.288 259.008c12.448 12.576 12.32 32.8-0.256 45.248C745.12 551.616 724.8 551.52 712.416 538.944zM517.44 831.52c-3.552 0.608-7.168 0.64-10.72 0.032-95.712-16.064-408-77.728-408-196.864 0-385.792 312.032-701.344 413.312-701.344 99.52 0 418.688 323.488 418.688 701.344C930.688 748.064 641.696 810.112 517.44 831.52zM512-2.624C453.216 3.008 162.688 278.56 162.688 634.688c0 38.464 165.792 101.344 349.248 132.832 186.336-32.768 354.752-95.68 354.752-132.832C866.688 279.264 571.68 3.2 512-2.624z" horiz-adv-x="1024" /> + + + <glyph glyph-name="my" unicode="" d="M800 512c0 160-128 288-288 288s-288-128-288-288c0-108.8 57.6-201.6 147.2-249.6-121.6-48-214.4-153.6-240-288-3.2-16 6.4-35.2 25.6-38.4h6.4c16 0 28.8 9.6 32 25.6 28.8 150.4 160 259.2 313.6 262.4h6.4c156.8 0 284.8 128 284.8 288zM288 512c0 124.8 99.2 224 224 224s224-99.2 224-224c0-121.6-99.2-220.8-220.8-224h-9.6c-121.6 3.2-217.6 102.4-217.6 224zM723.2 220.8c-16 9.6-35.2 6.4-44.8-9.6-9.6-16-6.4-35.2 9.6-44.8 73.6-51.2 124.8-121.6 140.8-204.8 3.2-16 16-25.6 32-25.6h6.4c16 3.2 28.8 19.2 25.6 38.4-19.2 99.2-80 185.6-169.6 246.4z" horiz-adv-x="1024" /> + + + <glyph glyph-name="my-fill" unicode="" d="M649.6 262.4c86.4 48 147.2 144 147.2 249.6 0 160-128 288-288 288s-288-128-288-288c0-108.8 57.6-201.6 147.2-249.6-121.6-48-214.4-153.6-240-288-3.2-9.6 0-19.2 6.4-25.6 3.2-9.6 12.8-12.8 22.4-12.8h704c9.6 0 19.2 3.2 25.6 12.8 6.4 6.4 9.6 16 6.4 25.6-25.6 134.4-121.6 240-243.2 288z" horiz-adv-x="1024" /> + + + <glyph glyph-name="ask" unicode="" d="M512 835.91154197c-249.57568133 0-451.91154197-202.33586063-451.91154197-451.91154197s202.33586063-451.91154197 451.91154197-451.91154197c249.57568133 0 451.91154197 202.33586063 451.91154197 451.91154197S761.57568133 835.91154197 512 835.91154197zM301.04769262 106.10452953000004L244.82989691 106.10452953000004 244.82989691 567.47608597l56.21779571 0L301.04769262 106.10452953000004zM278.93415425 653.94182734l33.56196364 30.00692592c21.57124464-20.42640159 50.01154363-49.04746604 85.32089961-85.92344763L359.55517314 564.5235976C325.81244406 603.7495195500001 298.93877198 633.57568133 278.93415425 653.94182734zM432.28280444 263.24923584l0-33.56196363L378.59571324 229.68727220999995 378.59571324 475.04511225l255.11912983 2e-8 0-211.85613071L432.28280444 263.18898156zM770.25238237 191.42542784c0-56.88059932-25.72883034-85.32089962-77.06598119-85.32089962-33.38119949 0-65.49704605 0.42178388-96.52830516 1.20509734-1.56662693 11.74970057-4.69987945 27.65698684-9.39976018 47.66160455 32.53763043-2.34994037 63.93041914-3.55503771 94.17836479-3.55503769 28.62106446 0 42.96172381 15.30473697 42.9617238 45.91421221L724.39842443 595.5548566800001 433.72892149 595.5548566800001 433.72892149 626.52586151l336.58371644 0L770.31263793 191.42542784zM434.15070537 295.48559227l155.33706097 0L589.48776634 444.73691101 434.15070537 444.73691101 434.15070537 295.48559227z" horiz-adv-x="1024" /> + + + <glyph glyph-name="qq" unicode="" d="M550.744931 61.193966 550.744931 61.193966c-11.183713 0-16.754592 0-22.327518 0-5.53404 0-11.144828 0-16.718777 0l-5.572926 0c-5.571902 0-16.717753 0-22.289656-5.53404-22.290679-22.326495-61.298088-33.475416-111.453395-33.475416-33.434483 0-61.298088 5.610788-89.163739 16.7198-22.289656 11.143805-33.435507 22.326495-33.435507 39.009456 0 16.717753 11.143805 27.862581 39.009456 39.045271 16.717753 5.535063 22.289656 11.106965 22.289656 22.326495 0 11.106965 0 22.25384-5.572926 27.863604-11.144828 11.034311-16.718777 27.788903-27.863604 38.896892-5.572926 11.144828-16.71673 16.755616-27.861558 16.755616l0 0c-11.144828 0-16.717753-5.608741-27.863604-11.220552-11.143805-11.106965-16.717753-16.644075-22.290679-16.644075l0 0c-5.572926 0-11.106965 16.644075-11.106965 44.505633 0 27.863604 5.535063 61.336974 11.070126 94.810343 11.145851 33.398668 27.862581 61.261249 55.725162 89.124853 5.574972 5.535063 11.146874 16.717753 11.146874 27.863604 0 5.53404 0 5.53404 0 11.106965 0 16.755616 5.571902 33.435507 16.71673 50.154283 5.573949 5.572926 5.573949 11.143805 5.573949 16.717753l0 5.573949c0.035816 66.908876 22.288632 122.635061 72.480778 172.789345 44.582381 50.191122 100.30652 72.444962 167.180604 72.444962 66.872037 0 122.600269-22.290679 172.751482-72.444962 44.618197-50.154283 72.480778-105.880469 72.480778-172.715667 0 0 0 0 0-5.572926 0-5.573949 0-11.144828 5.536087-16.717753 11.141758-16.718777 16.717753-33.398668 16.717753-50.154283 0-5.572926 0-5.572926 0-11.106965 0-11.144828 0-22.326495 11.143805-27.862581 27.863604-27.862581 44.581358-55.726186 55.726186-89.124853 11.144828-33.474392 16.717753-66.944691 11.144828-94.810343 0-27.862581-5.573949-38.97057-16.681938-44.50768-5.573949 0-11.183713 5.535063-22.328541 16.645099-5.533017 5.572926-16.718777 11.219529-27.861558 11.219529l-5.536087 0c-11.184737 0-22.325471-5.606695-27.861558-16.753569-5.573949-16.71673-16.754592-27.863604-27.863604-38.969547-5.572926-5.608741-11.18269-16.754592-5.572926-27.863604 0-11.220552 11.145851-16.753569 16.682961-22.326495 27.826765-11.219529 39.010479-22.364357 39.010479-39.08211 0-16.680914-11.183713-27.863604-33.43653-39.008432-22.289656-11.106965-55.724139-16.7198-89.164762-16.7198-50.15326 0-83.58979 11.184737-111.452371 33.474392 5.571902 0-5.572926 5.572926-11.106965 5.572926l0 0L550.744931 61.193966zM678.880263-44.724365c55.726186 0 100.30652 11.143805 133.74305 33.398668 33.435507 22.326495 55.724139 50.191122 55.724139 89.163739 0 22.291702-5.53404 39.046295-16.678868 55.726186 5.571902 0 16.678868 0 22.287609 5.608741 33.435507 11.106965 50.15633 38.97057 55.727209 83.591837 5.571902 38.9675 0 83.58979-16.681938 133.706211-11.18269 39.046295-33.435507 72.444962-61.297065 105.880469l0 0c0 27.862581-5.573949 50.154283-16.7198 78.015841 0 83.590813-27.861558 156.034752-89.124853 217.370703C684.450119 819.036118 612.004133 846.901769 528.418436 846.901769c-83.590813 0-156.034752-27.862581-217.334887-89.124853-55.764048-61.33595-89.163739-133.781936-89.163739-217.370703-11.143805-22.290679-16.717753-50.154283-16.717753-78.016865l0-5.571902c-33.434483-27.863604-50.154283-66.87306-61.298088-100.305497-16.718777-50.118468-22.290679-94.737688-16.718777-133.708258 5.573949-44.61922 27.863604-72.482825 55.726186-83.590813 5.572926 0 16.718777-5.608741 22.290679-5.608741-11.144828-16.681938-16.718777-33.43653-16.718777-55.726186 0-33.435507 16.718777-66.872037 55.727209-89.163739 33.435507-22.291702 78.015841-33.435507 128.169101-33.435507 55.725162 0 105.880469 11.142781 139.316999 39.007409l27.863604 0c39.045271-27.862581 83.590813-39.007409 139.316999-39.007409l0 0L678.880263-44.724365z" horiz-adv-x="1024" /> + + + <glyph glyph-name="text" unicode="" d="M886.624 598.624l-191.968 191.968c-2.944 2.944-6.432 5.312-10.336 6.912C680.48 799.136 676.288 800 672 800L224 800C171.072 800 128 756.928 128 704l0-640c0-52.928 43.072-96 96-96l576 0c52.928 0 96 43.072 96 96L896 576C896 584.48 892.64 592.64 886.624 598.624zM704 690.752 818.752 576 704 576 704 690.752zM800 32 224 32c-17.632 0-32 14.336-32 32L192 704c0 17.632 14.368 32 32 32l416 0 0-192c0-17.664 14.304-32 32-32l160 0 0-448C832 46.336 817.664 32 800 32zM288 544l192 0c17.664 0 32 14.336 32 32s-14.336 32-32 32L288 608c-17.664 0-32-14.336-32-32S270.336 544 288 544zM608 416 288 416c-17.664 0-32-14.336-32-32s14.336-32 32-32l320 0c17.696 0 32 14.336 32 32S625.696 416 608 416zM608 224 288 224c-17.664 0-32-14.304-32-32s14.336-32 32-32l320 0c17.696 0 32 14.304 32 32S625.696 224 608 224z" horiz-adv-x="1024" /> + + + <glyph glyph-name="tianjia" unicode="" d="M509.72826 803.146219c-231.475955 0-419.148265-187.67231-419.148265-419.148265 0-231.470839 187.67231-419.143149 419.148265-419.143149 231.498468 0 419.143149 187.67231 419.143149 419.143149C928.871409 615.473909 741.226728 803.146219 509.72826 803.146219L509.72826 803.146219zM745.847979 357.804385 535.921829 357.804385 535.921829 147.878235c0-14.278191-11.736299-25.846668-26.193569-25.846668-14.474666 0-26.198685 11.568477-26.198685 25.846668L483.529575 357.804385 273.603425 357.804385c-14.278191 0-25.841551 11.736299-25.841551 26.193569 0 14.474666 11.592013 26.198685 25.841551 26.198685l209.92615 0L483.529575 620.150418c0 14.250562 11.724019 25.813922 26.198685 25.813922 14.45727 0 26.193569-11.56336 26.193569-25.813922l0-209.953779 209.92615 0c14.305821 0 25.846668-11.724019 25.846668-26.198685C771.694647 369.540683 760.1538 357.804385 745.847979 357.804385L745.847979 357.804385zM745.847979 357.804385" horiz-adv-x="1024" /> + + + <glyph glyph-name="triangledown-fill" unicode="" d="M957.056 557.376C951.84 568.704 940.512 576 928 576L96 576c-12.512 0-23.84-7.296-29.088-18.624-5.216-11.36-3.328-24.704 4.768-34.208l416-485.344c6.08-7.104 14.944-11.2 24.288-11.2s18.208 4.096 24.288 11.2l416 485.344C960.448 532.672 962.272 546.0160000000001 957.056 557.376z" horiz-adv-x="1024" /> + + + <glyph glyph-name="triangleup-fill" unicode="" d="M952.32 180.79999999999995l-416 485.376c-12.16 14.176-36.448 14.176-48.608 0l-416-485.376c-8.128-9.472-9.984-22.848-4.768-34.176C72.16 135.29600000000005 83.488 128 96 128l832 0c12.512 0 23.84 7.296 29.056 18.624S960.448 171.32799999999997 952.32 180.79999999999995z" horiz-adv-x="1024" /> + + + <glyph glyph-name="zhengpinbaozhangduigou" unicode="" d="M461.015563 110.466541c-12.298765 0-24.59878 4.697506-33.978791 14.091267L229.42903 322.136799c-18.750023 18.765023-18.750023 49.17006 0 67.935083 18.745023 18.763773 49.17006 18.763773 67.925083 0l163.66145-163.6727 418.05801 418.10676c18.765023 18.763773 49.18006 18.763773 67.943833 0 18.730023-18.741273 18.730023-49.15631 0-67.925083L494.956854 124.544058C485.586843 115.164047 473.276828 110.466541 461.015563 110.466541L461.015563 110.466541zM512.003125-128C229.68778-128 0 101.68278 0 383.995625 0 666.31222 229.68778 896 512.003125 896c100.707623 0 198.193992-29.223786 281.875344-84.511353 16.855021-11.133764 21.485026-33.818791 10.366263-50.673812-11.132514-16.846271-33.818791-21.500026-50.673812-10.366263-71.698838 47.372558-155.23894 72.411338-241.567795 72.411338-241.997795 0-438.861786-196.86524-438.861786-438.863036 0-241.991545 196.86524-438.858036 438.861786-438.858036 241.992795 0 438.858036 196.86649 438.858036 438.858036 0 15.273769-0.776251 30.651287-2.338753 45.713806-2.080003 20.097525 12.528765 38.061296 32.61754 40.131299 20.068774 2.085003 38.061296-12.528765 40.131299-32.61254 1.816252-17.548771 2.730003-35.448793 2.730003-53.232565C1024 101.68278 794.31722-128 512.003125-128L512.003125-128zM512.003125-128" horiz-adv-x="1025" /> + + + <glyph glyph-name="wechat" unicode="" d="M511.5830368-95.59387092999998M914.79296747 90.57799893000004c44.52992 40.6932032 71.5561184 94.15836053 71.5561184 152.70784747 0 101.90274133-81.8426656 188.37784533-195.38981227 219.00499093-6.77183147 163.28692373-172.98295467 293.98413653-377.0602272 293.98413654-208.37570453 0-377.2959968-136.25963307-377.2959968-304.34054187 0-77.18730453 35.6219712-147.66281173 94.32754667-201.311344 18.36930133-16.78658773-3.13595627-62.7311264-29.56181547-100.68896427 44.65762773 12.33534187 92.28748373 20.3613376 133.98598293 20.3613376 19.52086187 0 37.74826453-1.762816 53.74567894-5.65956586 39.0646464-11.03860907 81.0633152-17.0474624 124.80078613-17.0474624 8.49426027 0 16.9197536 0.2554176 25.2797568 0.70185173 44.89994667-80.1224192 144.84994773-135.8808736 260.94908373-135.8808736 33.17804267 0 65.03970453 4.55275733 94.67465174 12.93458987 12.14105067 2.961312 25.96086933 4.2973408 40.77070186 4.2973408 31.63134933 0 67.76633813-6.08962667 101.64186667-15.44946774-20.0404288 28.79338027-36.3609344 63.6425504-22.42213973 76.38175787L914.79514987 90.57799893000004zM413.90450347 203.1820672c-37.686048 0-74.58401387 5.03084587-109.6798688 14.94845653l-0.96818454 0.27178987-0.97800746 0.24013547c-19.71624533 4.81035733-42.2300736 7.24882773-66.92149654 7.24882773-14.18875413 0-28.3622272-0.7793504-42.22461546-2.11101227 2.94493867 32.5744288-9.53776 54.02292693-24.69578987 67.87985707-24.48621653 22.374112-43.5060672 47.53161813-56.52688853 74.772848-13.078672 27.3547488-19.7107872 56.123024-19.7107872 85.5014624 0 64.15011093 31.89768213 125.2101088 89.81845013 171.9329056 29.57273067 23.85531413 64.2210592 42.65467733 102.97352853 55.8763392 40.7248576 13.89840853 84.09666773 20.9409376 128.91475094 20.9409376s88.18989227-7.0490784 128.91475093-20.9409376c38.75137813-13.22166187 73.39970667-32.02102507 102.97352853-55.8763392 51.6968832-41.697408 82.63729707-94.81873387 88.6974528-151.36090347l0.00545814 0c-11.27001173 1.08606933-22.7343168 1.66566933-34.36671574 1.66566934-158.07706667 0-286.2233824-103.36866133-286.2233824-230.88407467 0-13.66154667 1.485568-27.05239573 4.30279787-40.06339307 0 0 0 0 0 0.00545814C416.7675776 203.21372159999999 415.33986133 203.1820672 413.90450347 203.1820672L413.90450347 203.1820672zM877.2848384 131.60411839999995c-8.9843552-8.2115552-20.8328768-23.3019104-22.98427627-46.92254613-6.20860373 0.3525632-12.4685088 0.54794667-18.72841386 0.54794666-19.8046592 0-37.953472-1.9778464-53.94542827-5.8811456l-0.97800747-0.24013546-0.9725504-0.27178987c-25.43366187-7.19316053-52.1989856-10.8344928-79.54827626-10.8344928-32.51766933 0-63.96564267 5.1028864-93.46196587 15.163488-27.9125184 9.52138667-52.8178816 23.0246624-74.03060907 40.1343424-40.71940053 32.84621867-63.14481493 75.45505173-63.14481493 119.98497173 0 44.52992 22.4254144 87.14421013 63.14481493 119.9904288 21.21272853 17.10968 46.11809067 30.61295573 74.03060907 40.1354336 29.495232 10.06060053 60.94320533 15.16239573 93.46196587 15.16239574 32.51657813 0 63.96455147-5.1017952 93.45978346-15.16239574 27.9125184-9.527936 52.8178816-23.02684587 74.0262432-40.1354336 40.71940053-32.84621867 63.14699733-75.4605088 63.14699734-119.9904288 0-20.26964907-4.58986987-40.1452576-13.64189974-59.07341973C907.98402453 165.11180266999997 894.58444373 147.41269867000005 877.2848384 131.60411839999995L877.2848384 131.60411839999995zM877.2848384 131.60411839999995M248.33410667 511.42699947c0.30344427 32.08760747 20.37770987 57.940416 45.10515413 57.940416 24.9053632 0 45.10297067-26.25230613 45.10297067-58.63135147 0-32.38559467-20.1921504-58.6379008-45.10297067-58.6379008-24.72744427 0-44.80170987 25.8571744-45.09969707 57.90548693L248.33410667 511.42699947zM248.33410667 511.42699947M482.94574507 511.42699947c0.30344427 32.08760747 20.37770987 57.940416 45.09969706 57.940416 24.91082027 0 45.10297067-26.25230613 45.10297067-58.63135147 0-32.38559467-20.1921504-58.6379008-45.10297067-58.6379008-24.72198613 0-44.79625173 25.8571744-45.09969706 57.90548693L482.94574507 511.42699947zM482.94574507 511.42699947M586.9343936 286.19266667c0.30344427 24.6608608 15.74745493 44.500448 34.7563904 44.500448 19.19995307 0 34.76184853-20.23472 34.76184853-45.19138454 0-24.96321387-15.5618944-45.19138453-34.76184853-45.19138453-19.01002773 0-34.45403733 19.8395872-34.7563904 44.4578784L586.9343936 286.19266667zM586.9343936 286.19266667M754.40077227 286.19266667c0.30344427 24.6608608 15.7518208 44.500448 34.76184853 44.500448 19.19995307 0 34.7673056-20.23472 34.7673056-45.19138454 0-24.96321387-15.56735253-45.19138453-34.7673056-45.19138453-19.01002773 0-34.4584032 19.8395872-34.76184853 44.4578784L754.40077227 286.19266667zM754.40077227 286.19266667" horiz-adv-x="1024" /> + + + <glyph glyph-name="addressbook2-copy" unicode="" d="M824.24375 834L199.8125 834C154.925 834 118.25 797.2125 118.25 752.2125L118.25 704.625l44.49375 0c35.1 0 63.50625-28.51875 63.50625-63.73125S197.84375 577.1625 162.74375 577.1625L118.25 577.1625l0-43.81875 44.49375 0c35.1 0 63.50625-28.51875 63.50625-63.73125S197.84375 405.9375 162.74375 405.88125L118.25 405.88125l0-43.7625 44.49375 0c35.1 0 63.50625-28.51875 63.50625-63.675 0-35.26875-28.40625-63.73125-63.50625-63.73125L118.25 234.71249999999998l0-43.81875 44.49375 0c35.1 0 63.50625-28.575 63.50625-63.73125S197.84375 63.375 162.74375 63.375L118.25 63.375l0-47.5875C118.25-29.212499999999977 154.925-66 199.8125-66l624.43125 0C869.075-66 905.75-29.212499999999977 905.75 15.84375L905.75 752.2125C905.75 797.2125 869.075 834 824.24375 834zM524.6 668.175c62.60625 0 113.4-50.90625 113.4-113.7375 0-62.83125-50.79375-113.79375-113.4-113.79375-62.60625 0-113.4 50.90625-113.4 113.7375C411.2 617.2125 461.9375 668.175 524.6 668.175zM706.56875 137.00625000000002l-0.3375 0c-3.43125-20.64375-83.25-37.125-181.63125-37.125-98.38125 0-178.3125 16.48125-181.63125 37.125L342.575 137.00625000000002l0 110.53125c0 80.83125 50.68125 149.2875 121.33125 174.76875l60.69375-81.1125 60.6375 81.1125c70.70625-25.48125 121.33125-93.99375 121.33125-174.76875L706.56875 137.00625000000002z" horiz-adv-x="1024" /> + + + <glyph glyph-name="hide" unicode="" d="M605.376 405.472l61.696-59.04C670.016 358.55999999999995 672 371.00800000000004 672 384c0 88.224-71.776 160-160 160-15.424 0-30.016-2.88-44.16-6.976l61.44-58.784C566.944 471.36 596.832 442.528 605.376 405.472zM556.256 231.00800000000004l-61.376 58.752c-37.792 6.848-67.84 35.744-76.32 72.96l-61.632 58.944C353.984 409.504 352 397.024 352 384c0-88.224 71.776-160 160-160C527.456 224 542.08 226.91200000000003 556.256 231.00800000000004zM178.944 759.136C166.144 771.328 145.888 770.88 133.696 758.112 121.472 745.344 121.92 725.088 134.688 712.864l736-704C876.896 2.94399999999996 884.832 0 892.8 0c8.448 0 16.832 3.328 23.136 9.888 12.224 12.768 11.744 33.024-0.992 45.248L178.944 759.136zM512 96c-169.28 0-335.328 113.568-414.88 283.936-0.16 0.608-0.352 1.152-0.544 1.728-0.064 0.544-0.224 0.992-0.288 1.312C96.256 383.328 96 383.77599999999995 96 384.224L96 384.64c0 0.736 0.448 1.472 0.544 2.208 0.128 0.448 0.352 0.832 0.48 1.28 29.728 64.128 72 120.256 122.144 165.312L172.864 597.696c-55.488-50.656-102.08-113.152-134.624-184.256-1.056-2.112-1.792-4.096-2.272-5.888-0.256-0.544-0.448-1.056-0.64-1.6-1.76-5.056-1.76-8.48-1.632-7.712-0.8-3.744-1.6-11.2-1.6-11.2-0.224-2.24-0.192-4.032 0.064-6.272 0 0 0.704-13.472 1.056-14.816l4.544-13.632C126.4 158.65599999999995 316.992 30.24000000000001 512 30.24000000000001c69.824 0 138.976 17.792 203.104 47.936l-49.856 48.576C616.128 106.88 564.224 96 512 96zM992 383.904c0 5.792-0.992 10.592-1.28 11.136-0.192 2.912-1.152 8.096-2.08 10.816-0.256 0.672-0.544 1.376-0.832 2.08-0.48 1.568-1.024 3.104-1.6 4.32C897.664 605.9200000000001 707.104 736 512 736c-69.76 0-138.88-16.864-203.008-47.072l49.856-47.648C407.968 661.12 459.808 672 512 672c169.76 0 336.192-114.048 414.752-283.68 0.096-0.32 0.16-0.608 0.256-0.8 0.064-0.288 0.16-0.608 0.256-0.864 0.16-1.28 0.32-2.496 0.48-3.168-0.16-0.672-0.256-1.28-0.384-1.952-0.032-0.16-0.096-0.32-0.128-0.48-0.128-0.416-0.288-0.864-0.416-1.376-29.696-64-71.872-120.032-121.952-165.056l46.336-44.32c55.328 50.496 101.728 112.672 134.016 183.36 1.376 2.496 2.24 4.832 2.848 6.912 0.256 0.608 0.48 1.184 0.672 1.76 1.536 4.48 1.856 8.352 1.728 8.352 0 0 0-0.032-0.032-0.032C991.04 373.72799999999995 992 378.336 992 383.904z" horiz-adv-x="1024" /> + + + <glyph glyph-name="nothing" unicode="" d="M156.662278 196.24182699999994h21.097186A10.444152 10.444152 0 0 0 187.994733 185.79767500000003c0-5.765172-4.490985-10.444152-10.235269-10.444152H156.662278v-21.097186A10.444152 10.444152 0 0 0 146.218126 144.021068a10.277045 10.277045 0 0 0-10.444152 10.235269V175.353523H114.676787A10.444152 10.444152 0 0 0 104.441518 185.79767500000003c0 5.765172 4.490985 10.444152 10.235269 10.444152H135.773974v21.097187A10.444152 10.444152 0 0 0 146.218126 227.57428300000004c5.765172 0 10.444152-4.490985 10.444152-10.235269v-21.097187z m1378.628042 83.553215v21.097186A10.277045 10.277045 0 0 1 1524.846168 311.12749699999995a10.444152 10.444152 0 0 1-10.444152-10.235269v-21.097186h-21.097186a10.277045 10.277045 0 0 1-10.235269-10.444152c0-5.598065 4.595427-10.444152 10.235269-10.444152h21.097186v-21.097187c0-5.744284 4.67898-10.235269 10.444152-10.235268a10.444152 10.444152 0 0 1 10.444152 10.235268V258.906738h21.097187c5.744284 0 10.235269 4.67898 10.235268 10.444152a10.444152 10.444152 0 0 1-10.235268 10.444152H1535.29032zM776.460024-64.86196900000004H250.596979A20.80475 20.80475 0 0 0 229.77134-43.97366499999998c0 11.530344 9.462402 20.888304 20.825639 20.888303h94.728457A83.010119 83.010119 0 0 0 334.212859 18.58680400000003v605.96969A83.49055 83.49055 0 0 0 417.849627 708.005267H480.430984V728.998012A83.49055 83.49055 0 0 0 564.067752 812.446785h501.152182A83.448773 83.448773 0 0 0 1148.856702 728.998012v-605.969689c0-15.185797-4.052331-29.410732-11.133466-41.672166h115.554096c11.551232 0 20.909192-9.274407 20.909192-20.888304 0-11.530344-9.295295-20.888304-20.888304-20.888304H1002.638576v-20.992745c0-15.185797-4.052331-29.410732-11.133466-41.672166h11.196131c11.488567 0 20.825639-9.274407 20.825639-20.888303 0-11.530344-9.462402-20.888304-20.825639-20.888304h-109.893365c9.545955-16.000441 7.478013-36.972297-6.41271-50.863019a41.672166 41.672166 0 0 0-59.072122 0L776.460024-64.86196900000004z m76.367638 41.776607h66.424806c22.977134 0 41.609501 18.59059 41.609501 41.881049V625.5382440000001c0 22.559368-18.047494 40.690416-40.314426 40.690416H416.303892c-22.266932 0-40.314426-18.214601-40.314426-40.690416v-606.742557c0-23.123352 18.799473-41.881049 41.588613-41.881049h317.084449l-10.736588 10.757477a41.693054 41.693054 0 0 0-10.861918 40.377091l-19.718558 19.739447A146.259902 146.259902 0 0 0 502.363703 268.306475a146.218126 146.218126 0 0 0 220.517822-190.981761l19.739447-19.739447a41.630389 41.630389 0 0 0 40.377091-10.841029L852.827662-23.085362000000032zM1002.638576 81.35615700000005h62.852906A41.797496 41.797496 0 0 1 1107.080095 123.13276399999995V728.8935710000001c0 23.14424-18.632367 41.776607-41.588613 41.776607H563.775316A41.797496 41.797496 0 0 1 522.207592 728.8935710000001v-20.888304h396.794216A83.448773 83.448773 0 0 0 1002.638576 624.5564939999999V81.35615700000005zM266.325872 849.001317h31.123572c8.773088 0 15.875111-6.955805 15.875111-15.666228 0-8.647758-7.102023-15.666228-15.875111-15.666228h-31.123572v-31.123572c0-8.773088-6.955805-15.875111-15.666228-15.875111a15.770669 15.770669 0 0 0-15.666228 15.875111V817.668861H203.869844A15.728893 15.728893 0 0 0 187.994733 833.335089c0 8.647758 7.102023 15.666228 15.875111 15.666228h31.123572V880.124889c0 8.773088 6.955805 15.875111 15.666228 15.875111 8.647758 0 15.666228-7.102023 15.666228-15.875111v-31.123572zM20.888304-43.97366499999998c0 11.530344 9.462402 20.888304 20.825638 20.888303h125.455152c11.488567 0 20.825639-9.274407 20.825639-20.888303 0-11.530344-9.462402-20.888304-20.825639-20.888304H41.713942A20.80475 20.80475 0 0 0 20.888304-43.97366499999998z m658.733544 135.021995a104.441518 104.441518 0 1 1-147.722083 147.722083 104.441518 104.441518 0 0 1 147.722083-147.722083zM459.542681 582.6754450000001a20.888304 20.888304 0 0 0 20.867415 20.888304H710.202325a20.888304 20.888304 0 1 0 0-41.776608H480.430984A20.825639 20.825639 0 0 0 459.542681 582.6754450000001z m0-104.441518c0 11.530344 9.295295 20.888304 20.742085 20.888303h334.505295c11.44679 0 20.742086-9.274407 20.742086-20.888303 0-11.530344-9.295295-20.888304-20.742086-20.888304H480.284766A20.762974 20.762974 0 0 0 459.542681 478.233927z m0-104.441519c0 11.530344 9.316183 20.888304 20.846527 20.888304h146.301679c11.509455 0 20.846527-9.274407 20.846527-20.888304 0-11.530344-9.316183-20.888304-20.846527-20.888303h-146.301679A20.80475 20.80475 0 0 0 459.542681 373.792408zM62.664911 499.12223a62.664911 62.664911 0 1 0 0 125.329822 62.664911 62.664911 0 0 0 0-125.329822z m0 31.332456a31.332456 31.332456 0 1 1 0 62.664911 31.332456 31.332456 0 0 1 0-62.664911zM1357.739739 624.452052a62.664911 62.664911 0 1 0 0 125.329822 62.664911 62.664911 0 0 0 0-125.329822z m0 31.332456a31.332456 31.332456 0 1 1 0 62.664911 31.332456 31.332456 0 0 1 0-62.664911z" horiz-adv-x="1567" /> + + + <glyph glyph-name="self-employed" unicode="" d="M612.2 215.29999999999995L562.8 240v-60.6l49.4 35.9zM410.1 215.29999999999995l49.4 24.7v-60.6l-49.4 35.9zM440.9 290.29999999999995H586v-257.2H440.9V290.29999999999995zM440.9 294.79999999999995H586v-45.1l-145.1-88V294.79999999999995zM513.4-56.200000000000045s50.3-0.2 65.1-0.2c6.1 9.8 25.2 201.3 24.7 204.3-0.3 1.9-60.6-18-60.6-18l-29.2-31v-155.1zM515.6-56.39999999999998s-53.7-0.2-68.5-0.2c-6.1 9.8-55.5 200.9-55 204 0.3 1.9 96.6-17.4 96.6-17.4l26.9-31.4v-155zM565-56.39999999999998h240.2L767 75.89999999999998s-84.9 61.3-152.5 81.9v57.5L565 195.10000000000002v-251.5zM459.5-56.39999999999998H219.2l38.4 132.3s84.9 61.3 152.5 81.9v57.5l49.4-20.2v-251.5zM300.7 524.6c-12-4.1-15.4-26.2-7.7-49.5 7.7-23.2 23.7-38.7 35.7-34.6 12 4.1 15.4 26.2 7.7 49.5-7.7 23.2-23.7 38.7-35.7 34.6zM726.1 523.6c12-4 15.4-25.9 7.7-48.8s-23.7-38.2-35.7-34.2c-12 4-15.4 25.9-7.7 48.8s23.7 38.3 35.7 34.2zM513.4 695.9c106.6 1.5 184.1-99.7 184.1-222.7 0-41.3-8.2-79-24.4-112.2-32-65.6-100.1-101.4-159.7-109.7V695.9zM677.3 740.8C723.9 620.7 731 547.6 709 507.4c-4.4-8-15.6-23.6-20.5-29.4-3.8 54.3-60.2 179.7-108.4 157.1-70.7-33.1-7.2 194.6 97.2 105.7zM513.4 695.9c-106.6 1.5-184.1-99.7-184.1-222.7 0-41.3 8.2-79 24.4-112.2 32.1-65.6 100.1-101.4 159.7-109.7V695.9zM298.2 555.9c1.6-0.2-102.2-14.8-74.1-42.4 39-27.1 112.1-36.2 144-37.1 285.2-7.8 337.1 60.6 349.4 71.5 13.5 12.3-419.3 8-419.3 8zM721.9 548c-12.2-11-62.1-68.7-347.2-60.9-13.1 0.4-33.5 0.8-55.8 3l192 65.7-5.7 0.9c110.5-0.5 223.8-2.4 216.7-8.7zM513.7 825.7c0-201.4 1.7-299.3 0.6-299.3 136.4 0 207.9 26.3 207.9 26.3l-4.1 76.2s-10 57.5-14.4 74.1c-14.4 54.8-47.3 82.5-47.3 82.5S544.5 825.7 513.7 825.7zM517.7 826.1c0-200.9-1.7-298.6-0.6-298.6-135.7 0-206.9 26.2-206.9 26.2l4.1 76s10 57.4 14.3 73.9c14.4 54.7 47 82.4 47 82.4S487 826.1 517.7 826.1zM517.9 826.1c13 0 23.6-6.5 23.6-14.6s-10.6-14.6-23.6-14.6c-13 0-23.6 6.5-23.6 14.6s10.6 14.6 23.6 14.6zM519 826.1c10.5 0 19.1-5 19.1-11.2 0-6.2-8.5-11.2-19.1-11.2s-19.1 5-19.1 11.2c0 6.2 8.6 11.2 19.1 11.2z" horiz-adv-x="1024" /> + + + <glyph glyph-name="boss" unicode="" d="M582.1 141.70000000000005l-140.3 0.7V305.29999999999995h140.3zM582.1 245l-140.3-82.7v143h140.3zM512.4 689.2c-0.6 0-1.1 0.1-1.7 0.1-103 0-193.3-100.3-193.3-224.1s123.2-224.1 193.3-224.1c0.6 0 1.1 0 1.7 0.1v448zM512.4 689.2c0.6 0 1.1 0.1 1.7 0.1 103 0 193.3-100.3 193.3-224.1S584.2 241.10000000000002 514.1 241.10000000000002c-0.6 0-1.1 0-1.7 0.1v448zM295.8 528.4c-3.3 58.2-6.6 140.3 16.6 191.6 23.3 51.3 146.3 106.1 199.4 106.1S668 774.8 691.3 744c13.7-18.1 34.7-117.4 33.2-201.9-1-59.4-10.3-82.3-19.9-99.2-4.8-8.5 6.6 109.5-99.7 201.9-16.6 10.3-32.1-6.4-53.2-10.3-35.3-6.5-66.5-6.8-93.1-6.8-31 0-88.1-39.8-103-78.7-26.4-68.7-19.9-119.8-19.9-119.8s-36.6 41-39.9 99.2zM294.587017 462.552385a25.7 51.3 17.355000000000004 1 1 49.06001 15.33217 25.7 51.3 17.355000000000004 1 1-49.06001-15.33217ZM512.1 172.5l-133.5-24s-85.5-37.6-109.5-75.3c-24-37.6-61.6-133.5-61.6-133.5H512V172.5zM512.4 172.5l133.5-24s85.5-37.6 109.5-75.3c24-37.6 61.6-133.5 61.6-133.5H512.4V172.5zM687.00445 428.102201a51.3 25.700000000000003 72.645 1 1 30.604681 97.929125 51.3 25.700000000000003 72.645 1 1-30.604681-97.929125ZM495.3 42.5l-56.9 126.6 71.8 3.4 75.3-3.4-58.2-126.6 10.2-102.7h-51.2zM432.5 220.60000000000002l78.7-47.9L381.1 70V172.70000000000005zM589.9 220.60000000000002l-78.7-47.9 130-102.7V172.70000000000005zM483.5 520.6h-112c-7.5 0-13.6-5.5-13.6-12.2v-63.9c0-6.7 6.1-12.2 13.6-12.2h112c7.5 0 13.6 5.5 13.6 12.2v63.9c0 6.7-6.1 12.2-13.6 12.2z m-0.8-67c0-6.7-6.1-12.2-13.6-12.2h-83.2c-7.5 0-13.6 5.5-13.6 12.2v45.7c0 6.7 6.1 12.2 13.6 12.2h83.2c7.5 0 13.6-5.5 13.6-12.2v-45.7zM656.7 520.6h-112c-7.5 0-13.6-5.5-13.6-12.2v-63.9c0-6.7 6.1-12.2 13.6-12.2h112c7.5 0 13.6 5.5 13.6 12.2v63.9c-0.1 6.7-6.1 12.2-13.6 12.2z m-0.9-67c0-6.7-6.1-12.2-13.6-12.2H559c-7.5 0-13.6 5.5-13.6 12.2v45.7c0 6.7 6.1 12.2 13.6 12.2h83.2c7.5 0 13.6-5.5 13.6-12.2v-45.7zM490.3 479.8h47.5v-13.6h-47.5z" horiz-adv-x="1024" /> + + + <glyph glyph-name="staff" unicode="" d="M268.7 17.299999999999955L510-57.10000000000002V829.5c-71.3-0.3-190.1-42.5-214-205.3-37.9-257.6-27.3-606.9-27.3-606.9zM751.3 17.299999999999955L510-57.10000000000002V829.5c71.3-0.3 190.1-42.5 214.1-205.3 37.8-257.6 27.2-606.9 27.2-606.9zM512.3-57.10000000000002H789s-13.8 190.7-202.7 220.4c-69.1 5-74 2-74 2v-222.4zM511.1-57.10000000000002H235.6S249.3 134.20000000000005 437.4 164c68.8 5 73.7 2 73.7 2v-223.1zM442 297.1h145.1v-257.2H442V297.1zM442 297.1h145.1v-257.2H442V297.1zM509-56.89999999999998s31.6-0.2 46.5-0.2c6.2 9.8 78.8 202.1 78.2 205.2-0.3 1.9-95.3-18-95.3-18L509 99v-155.9zM511-57.10000000000002s-31.6-0.2-46.5-0.2c-6.2 9.8-78.8 201.9-78.2 204.9 0.3 1.9 97.5-17.5 97.5-17.5l27.2-31.6v-155.6zM587.1 202.29999999999995l78.4-25 37.3-94.9-165.1 46.2 49.4 73.7zM442 301.6h145.1v-45.1l-145.1-88V301.6zM441.3 198.79999999999995l-78-24.9-37.1-94.7 164.3 46.2-49.2 73.4zM306.5 528.8c-12.1-4.1-15.6-26.4-7.8-49.7 7.8-23.3 23.9-38.9 36-34.8s15.6 26.4 7.8 49.7c-7.7 23.3-23.9 38.9-36 34.8zM720.1 527.8c12.1-4.1 15.6-26 7.8-49s-23.9-38.4-36-34.3-15.6 26-7.8 49 23.9 38.4 36 34.3zM720.1 527.8c12.1-4.1 15.6-26 7.8-49s-23.9-38.4-36-34.3-15.6 26-7.8 49 23.9 38.4 36 34.3zM512.3 698.6c-107.7 0-186-100.2-186-223.7 0-41.5 9.3-79.9 25.6-113.2 32.2-65.7 135.3-108.6 160.3-109.8 0.1 102.4 0.1 174.1 0.1 446.7zM511.3 698.6c107.7 0 186-100.2 186-223.7 0-41.5-9.3-79.9-25.6-113.2-32.3-65.7-135.4-108.5-160.4-109.8V698.6zM580.3 705.4s-89.9-124.8-249.5-185c-35.5 61.9-27.2 109.5-27.2 133.1s48.5 176 204.1 176c29.7 1.1 85-87.4 72.6-124.1z" horiz-adv-x="1024" /> + + + <glyph glyph-name="professional" unicode="" d="M506.1-56.60000000000002H842S825.3 140 596 170.70000000000005c-62.5 3.8-89.8 2.4-89.8 2.4v-0.2c-0.1-163.3-0.1-229.5-0.1-229.5zM507.5-56.60000000000002H173s16.7 197 245 227.6c62.2 3.8 89.5 2.4 89.5 2.4v-230zM438.5 276.70000000000005h145.1v-133H438.5v133zM438.5 281.20000000000005h145.1v-45.1l-145.1-88V281.20000000000005zM507.4 696.1v-443.9c60.1 3 132.8 43.5 167.1 108.4 17.6 33.3 19 71.6 19 113.2-0.1 122.8-79.7 222.3-186.1 222.3zM507.3 696.1v-443.9c-60.1 3-132.8 43.5-167.1 108.4-17.6 33.3-19 71.6-19 113.2 0.1 122.8 79.7 222.3 186.1 222.3zM335.8 496.6c3.4 50.5 26.8 108.5 105.6 140.7 19-4.3 58.6-37.5 129-4.5 47.9 22.4 108.1-77.3 116.7-118.3 6.9-32.8-6.5-29.4 15.6-22.3 5 3.9 38 54.2-13.4 256.8-103.8 88.3-187.5 80.4-187.5 80.4S370 815.1 309.7 713.2c-16.6-90-20.3-158.6-8.4-208.3 11.2 27.7 24.9 16.1 34.5-8.3zM712.9 526.4c12-4 15.4-25.9 7.7-48.7-7.7-22.9-23.7-38.2-35.6-34.1-12 4-15.4 25.9-7.7 48.7 7.6 22.8 23.6 38.1 35.6 34.1zM303.9 527.4c-12-4.1-15.4-26.2-7.7-49.4s23.7-38.7 35.6-34.6c12 4.1 15.4 26.2 7.7 49.4-7.6 23.2-23.6 38.7-35.6 34.6zM347.2 154.5c1.2-30.2 7.9-90.6 39.9-130.6 29.5-40.2 120.4-45.9 120.4-45.9v-34.4H274V121c24.6 14.2 38.5 20.4 73.2 33.5zM292.8 131.20000000000005v-187.8c63.9 0 7.6 0.2 169.6 0.2-30.3 7.6-70.1 23.1-96.5 54.9-23.8 28.9-36.2 94.5-40.8 148.4-5.6-2.3-21-6.3-32.3-15.7zM740.5 121.10000000000002v-177.4H507V-22s90.9 5.7 120.2 45.9c32.1 39.9 38.8 100.5 39.9 130.6 34.9-13.1 48.8-19.3 73.4-33.4zM690.3 147.10000000000002c-4.5-53.9-16.8-119.5-40.8-148.4-26.3-31.9-66.2-47.5-96.5-54.9 162.1 0 105.7-0.2 169.6-0.2V131.39999999999998c-11.3 9.2-26.6 13.2-32.3 15.7z" horiz-adv-x="1024" /> + + + <glyph glyph-name="edit" unicode="" d="M839.912-63.35500000000002H183.359c-65.93 0-119.381 53.435-119.381 119.38V712.58c0 65.927 53.451 119.38 119.38 119.38h432.724c8.24 0 14.933-6.676 14.933-14.915V787.2c0-8.256-6.693-14.932-14.933-14.932h-402.88c-49.45 0-89.535-40.084-89.535-89.533V85.87c0-49.45 40.085-89.535 89.535-89.535h596.865c49.45 0 89.533 40.085 89.533 89.535V488.75c0 8.24 6.693 14.932 14.932 14.932h29.847c8.237 0 14.913-6.694 14.913-14.932v-432.725c-0.001-65.945-53.452-119.38-119.38-119.38Zm52.608 710.41L768.484 764.1469999999999l37.664 37.815c29.123 29.223 77.008 29.997 106.986 1.699l15.503-14.627c29.964-28.3 30.654-74.941 1.533-104.181l-37.65-37.798Zm-590.979-351.8l124.02-117.094-182.516-62.447 58.496 179.542ZM862.39 616.79L455.676 208.40999999999997l-124.02 117.095L738.37 733.88 862.39 616.79Z" horiz-adv-x="1024" /> + + + <glyph glyph-name="my-identification-fill" unicode="" d="M1096.33333331 747.125l-44.375 0.75c-1 0-100.375 2-203 41.75-105.25 40.75-173.125 87.5-173.75 88L648.45833331 896 621.83333331 877.5c-0.625-0.375-68.5-47.25-173.75-88C345.45833331 749.75 246.08333331 747.875 245.08333331 747.875l-44.5-0.75v-430.5c0-216.125 291.375-444.625 448-444.625 156.75 0 448 228.5 448 444.625l-0.25 430.5zM458.45833331 123.5V540.625h-39.75V578.5h159.125v-189.625L777.95833331 578.5h157.75L458.45833331 123.5z m0 0" horiz-adv-x="1293" /> + + + <glyph glyph-name="index-card" unicode="" d="M1077.589333 383.658667H860.501333v-72.704h217.258667v72.704h-0.170667zM1188.864 856.746667h-1013.76C115.2 856.746667 66.56 807.936 66.56 747.52v-727.893333c0-60.245333 48.64-109.226667 108.544-109.226667h1013.589333c59.904 0 108.544 48.810667 108.544 109.226667V747.52c0.170667 60.416-48.469333 109.226667-108.373333 109.226667z m36.181333-764.245334c0-109.226667 0-109.226667-108.544-109.226666H247.637333c-108.544 0-108.544 0-108.544 109.226666V529.237333h1086.122667v-436.736z m0 517.973334H138.922667v64.170666c0 109.226667 0 109.226667 108.544 109.226667h868.864c108.544 0 108.544 0 108.544-109.226667v-64.170666z m-506.88-226.816h-506.88v-72.874667h506.88v72.874667z m-217.258666-145.578667H211.285333v-72.704h289.621334v72.704z m0 0" horiz-adv-x="1365" /> + + + <glyph glyph-name="index-calculator" unicode="" d="M174.58974 143.861166h902.410717l114.886284-159.624905c42.556249-59.547572 19.173695-110.677424-55.338712-110.677424H106.468564c-74.512407 0-97.894961 48.947481-53.15634 108.495052L174.58974 143.861166z m0 0M202.337038 786.569645c2.182372 59.547572 51.129852 108.495053 112.859796 108.495053h666.091033c59.547572 0 108.495053-48.947481 108.495053-108.495053v-706.620794c0-59.547572-48.947481-108.495053-108.495053-108.495053H289.476024c-59.547572 0-108.495053 48.947481-106.468565 108.495053L202.337038 786.569645z m0 0M274.667073 895.220582h666.091033c59.547572 0 108.495053-48.947481 108.495053-108.495053v-706.620795c0-59.547572-48.947481-108.495053-108.495053-108.495052H274.667073c-59.547572 0-108.495053 48.947481-108.495053 108.495052V786.569645c-2.182372 59.703456 46.765109 108.650936 108.495053 108.650937z m0 0M319.405693 503.484853c0-35.229715 28.526716-63.912315 63.912316-63.912315 35.229715 0 63.912315 28.526716 63.912315 63.912315 0 22.75902-12.158928 43.959202-31.956157 55.338712-19.797229 11.37951-44.115086 11.37951-63.912316 0s-31.956158-32.423809-31.956158-55.338712z m0 0M319.405693 303.486071c0-35.229715 28.526716-63.912315 63.912316-63.912315 35.229715 0 63.912315 28.526716 63.912315 63.912315 0 22.75902-12.158928 43.959202-31.956157 55.338712-19.797229 11.37951-44.115086 11.37951-63.912316 0s-31.956158-32.579692-31.956158-55.338712z m0 0M319.405693 105.513777c0-35.229715 28.526716-63.912315 63.912316-63.912316 35.229715 0 63.912315 28.526716 63.912315 63.912316 0 22.75902-12.158928 43.959202-31.956157 55.338712-19.797229 11.37951-44.115086 11.37951-63.912316 0s-31.956158-32.423809-31.956158-55.338712z m0 0M557.751865 503.484853c0-35.229715 28.526716-63.912315 63.912315-63.912315 35.229715 0 63.912315 28.526716 63.912316 63.912315 0 22.75902-12.158928 43.959202-31.956158 55.338712-19.797229 11.37951-44.115086 11.37951-63.912315 0s-31.956158-32.423809-31.956158-55.338712z m0 0M557.751865 303.486071c0-35.229715 28.526716-63.912315 63.912315-63.912315 35.229715 0 63.912315 28.526716 63.912316 63.912315 0 22.75902-12.158928 43.959202-31.956158 55.338712-19.797229 11.37951-44.115086 11.37951-63.912315 0s-31.956158-32.579692-31.956158-55.338712z m0 0M557.751865 105.513777c0-35.229715 28.526716-63.912315 63.912315-63.912316 35.229715 0 63.912315 28.526716 63.912316 63.912316 0 22.75902-12.158928 43.959202-31.956158 55.338712-19.797229 11.37951-44.115086 11.37951-63.912315 0s-31.956158-32.423809-31.956158-55.338712z m0 0M798.280408 503.484853c0-22.75902 12.158928-43.959202 31.956158-55.338712 19.797229-11.37951 44.115086-11.37951 63.912315 0s31.956158 32.423809 31.956158 55.338712c0 22.75902-12.158928 43.959202-31.956158 55.338712-19.797229 11.37951-44.115086 11.37951-63.912315 0s-31.956158-32.423809-31.956158-55.338712z m0 0M798.280408 303.486071c0-22.75902 12.158928-43.959202 31.956158-55.338712 19.797229-11.37951 44.115086-11.37951 63.912315 0s31.956158 32.423809 31.956158 55.338712c0 22.75902-12.158928 43.959202-31.956158 55.338712-19.797229 11.37951-44.115086 11.37951-63.912315 0s-31.956158-32.579692-31.956158-55.338712z m0 0M798.280408 105.513777c0-22.75902 12.158928-43.959202 31.956158-55.338712 19.797229-11.37951 44.115086-11.37951 63.912315 0s31.956158 32.423809 31.956158 55.338712-12.158928 43.959202-31.956158 55.338712c-19.797229 11.37951-44.115086 11.37951-63.912315 0s-31.956158-32.423809-31.956158-55.338712z m0 0M278.875932 716.421982c0 33.982646 27.747298 63.912315 63.912316 63.912315h517.222104c36.165018 0 63.912315-27.591414 63.912315-63.912315 0-33.982646-27.591414-63.912315-63.912315-63.912315H342.788248c-34.138529 0-63.912315 27.747298-63.912316 63.912315z m0 0M298.049627 516.267316c0-22.75902 12.158928-43.959202 31.956158-55.338712 19.797229-11.37951 44.115086-11.37951 63.912315 0s31.956158 32.423809 31.956158 55.338712c0 22.75902-12.158928 43.959202-31.956158 55.338712-19.797229 11.37951-44.115086 11.37951-63.912315 0s-31.956158-32.423809-31.956158-55.338712z m0 0M298.049627 316.268534c0-22.75902 12.158928-43.959202 31.956158-55.338712 19.797229-11.37951 44.115086-11.37951 63.912315 0s31.956158 32.423809 31.956158 55.338712c0 22.75902-12.158928 43.959202-31.956158 55.338712-19.797229 11.37951-44.115086 11.37951-63.912315 0-19.797229-11.535394-31.956158-32.579692-31.956158-55.338712z m0 0M298.049627 118.29624c0-22.75902 12.158928-43.959202 31.956158-55.338712 19.797229-11.37951 44.115086-11.37951 63.912315 0s31.956158 32.423809 31.956158 55.338712c0 22.75902-12.158928 43.959202-31.956158 55.338712-19.797229 11.37951-44.115086 11.37951-63.912315 0s-31.956158-32.579692-31.956158-55.338712z m0 0M538.57817 516.267316c0-35.229715 28.526716-63.912315 63.912316-63.912315 35.229715 0 63.912315 28.526716 63.912315 63.912315 0 22.75902-12.158928 43.959202-31.956158 55.338712-19.797229 11.37951-44.115086 11.37951-63.912315 0s-31.956158-32.423809-31.956158-55.338712z m0 0M538.57817 316.268534c0-35.229715 28.526716-63.912315 63.912316-63.912315 35.229715 0 63.912315 28.526716 63.912315 63.912315 0 22.75902-12.158928 43.959202-31.956158 55.338712-19.797229 11.37951-44.115086 11.37951-63.912315 0-19.797229-11.535394-31.956158-32.579692-31.956158-55.338712z m0 0M538.57817 118.29624c0-35.229715 28.526716-63.912315 63.912316-63.912316 35.229715 0 63.912315 28.526716 63.912315 63.912316 0 22.75902-12.158928 43.959202-31.956158 55.338712-19.797229 11.37951-44.115086 11.37951-63.912315 0s-31.956158-32.579692-31.956158-55.338712z m0 0M776.924342 516.267316c0-22.75902 12.158928-43.959202 31.956157-55.338712 19.797229-11.37951 44.115086-11.37951 63.912316 0s31.956158 32.423809 31.956157 55.338712c0 22.75902-12.158928 43.959202-31.956157 55.338712-19.797229 11.37951-44.115086 11.37951-63.912316 0s-31.956158-32.423809-31.956157-55.338712z m0 0M776.924342 316.268534c0-22.75902 12.158928-43.959202 31.956157-55.338712 19.797229-11.37951 44.115086-11.37951 63.912316 0s31.956158 32.423809 31.956157 55.338712c0 22.75902-12.158928 43.959202-31.956157 55.338712-19.797229 11.37951-44.115086 11.37951-63.912316 0-19.797229-11.535394-31.956158-32.579692-31.956157-55.338712z m0 0M776.924342 118.29624c0-22.75902 12.158928-43.959202 31.956157-55.338712 19.797229-11.37951 44.115086-11.37951 63.912316 0s31.956158 32.423809 31.956157 55.338712c0 22.75902-12.158928 43.959202-31.956157 55.338712-19.797229 11.37951-44.115086 11.37951-63.912316 0s-31.956158-32.579692-31.956157-55.338712z m0 0M306.62323 767.395951c-14.964835-10.600091-25.564926-29.773786-25.564926-51.129853 0-33.982646 27.591414-63.912315 63.912316-63.912315h515.039732c25.564926 0 48.947481 14.964835 57.521084 38.347389-8.573603-4.20886-16.991323-6.391232-27.591415-6.391231H361.961942c-31.956158 0-57.521084 25.564926-57.521083 57.521084v12.782463c0 2.182372 0 8.573603 2.182371 12.782463z m0 0" horiz-adv-x="1328" /> + + + <glyph glyph-name="index-bank" unicode="" d="M143.90476232 810.285714v-852.714285c0-47.285714 38.285714-85.571429 85.571428-85.571429h852.857143c47.285714 0 85.571429 38.285714 85.571429 85.571429V810.428571c0 47.285714-38.285714 85.571429-85.571429 85.571429H229.61904732C182.33333332 896 143.90476232 857.571429 143.90476232 810.285714z m73.142857-858.142857v552.857143c0 3.857143 3.142857 7 7 7h187.142857c3.857143 0 7-3.142857 7-7v-552.857143c0-3.857143-3.142857-7-7-7h-187.142857c-3.857143 0-7 3.142857-7 7z m274.285714 0v552.857143c0 3.857143 3.142857 7 7 7h315.142857c3.857143 0 7-3.142857 7-7v-552.857143c0-3.857143-3.142857-7-7-7H498.33333332c-3.857143 0-7 3.142857-7 7z m596.428571-7h-187.142857c-3.857143 0-7 3.142857-7 7v552.857143c0 3.857143 3.142857 7 7 7h187.142857c3.857143 0 7-3.142857 7-7v-552.857143c0-3.857143-3.142857-7-7-7z m-267.285714 640H224.04761932c-3.857143 0-7 3.142857-7 7V815.857143c0 3.857143 3.142857 7 7 7h863.714285c3.857143 0 7-3.142857 7-7v-223.714286c0-3.857143-3.142857-7-7-7H820.47619032z m0 0M699.47619032 329.14285700000005h59.142857c3.857143 0 7-3.142857 7-7v-95.714286c0-3.857143-3.142857-7-7-7h-59.142857c-3.857143 0-7 3.142857-7 7v95.714286c0 3.857143 3.142857 7 7 7z m-374.285714-23l-10-30.142857c-2.142857-6.428571-11.142857-6.428571-13.285714 0l-10 30.142857c-1 2.857143-3.571429 4.714286-6.571429 4.714286h-22.571429c-4.571429 0-7.857143-4.285714-6.714285-8.714286l14-55.714286c1.142857-4.428571-2.285714-8.714286-6.714286-8.714285H261.04761932c-3.857143 0-7-3.142857-7-7v-4.285715c0-3.857143 3.142857-7 7-7h22.571428c3.857143 0 7-3.142857 7-7v-4.285714c0-3.857143-3.142857-7-7-7H261.04761932c-3.857143 0-7-3.142857-7-7v-22.571428c0-3.857143 3.142857-7 7-7h22.571428c3.857143 0 7-3.142857 7-7v-4.285715c0-3.857143 3.142857-7 7-7h40.857143c3.857143 0 7 3.142857 7 7v4.285715c0 3.857143 3.142857 7 7 7h4.285714c3.857143 0 7 3.142857 7 7v22.571428c0 3.857143-3.142857 7-7 7h-4.285714c-3.857143 0-7 3.142857-7 7v4.285714c0 3.857143 3.142857 7 7 7h4.285714c3.857143 0 7 3.142857 7 7v4.285715c0 3.857143-3.142857 7-7 7-5.142857 0-8.571429 5.428571-6.285714 10.142857l26.428572 52.857143c2.285714 4.714286-1 10.142857-6.285715 10.142857h-38.571428c-3.285714 0-5.857143-1.857143-6.857143-4.714286z m605-75.428571v-4.285715c0-3.857143 3.142857-7 7-7h22.571428c3.857143 0 7-3.142857 7-7v-4.285714c0-3.857143-3.142857-7-7-7h-22.571428c-3.857143 0-7-3.142857-7-7v-22.571428c0-3.857143 3.142857-7 7-7h22.571428c3.857143 0 7-3.142857 7-7v-4.285715c0-3.857143 3.142857-7 7-7h40.857143c3.857143 0 7 3.142857 7 7v4.285715c0 3.857143 3.142857 7 7 7h4.285715c3.857143 0 7 3.142857 7 7v22.571428c0 3.857143-3.142857 7-7 7h-4.285715c-3.857143 0-7 3.142857-7 7v4.285714c0 3.857143 3.142857 7 7 7h4.285715c3.857143 0 7 3.142857 7 7v4.285715c0 3.857143-3.142857 7-7 7-5.142857 0-8.571429 5.428571-6.285715 10.142857l26.428572 52.857143c2.285714 4.714286-1 10.142857-6.285715 10.142857h-38.571428c-3 0-5.714286-1.857143-6.571429-4.714286l-10-30.142857c-2.142857-6.428571-11.142857-6.428571-13.285714 0l-10 30.142857c-1 2.857143-3.571429 4.714286-6.571429 4.714286h-22.571428c-4.571429 0-7.857143-4.285714-6.714286-8.714286l14-55.714286c1.142857-4.428571-2.285714-8.714286-6.714286-8.714285h-2.285714c-4.142857 0-7.285714-3.142857-7.285714-7zM297.19047632 749.714286h717.428571c3.857143 0 7-3.142857 7-7v-59.142857c0-3.857143-3.142857-7-7-7H297.19047632c-3.857143 0-7 3.142857-7 7V742.714286c0 3.857143 3.142857 7 7 7z m-7 0" horiz-adv-x="1293" /> + + + <glyph glyph-name="index-evaluation1" unicode="" d="M228.352 273.749333h852.821333l174.762667-235.349333c62.976-83.968 27.989333-151.381333-76.970667-151.381333H151.381333c-104.789333 0-142.165333 69.973333-81.578666 156.16l158.549333 230.570666z m0 0M186.368 774.826667c0 58.197333 46.592 104.789333 104.789333 104.789333h766.634667c58.197333 0 109.568-46.592 118.784-102.570667 0 0 9.386667-55.978667 9.386667-83.968v-384.512c0-58.197333-46.592-104.789333-104.789334-104.789333H291.157333c-58.197333 0-104.789333 46.592-104.789333 104.789333V774.826667z m0 0M239.957333 879.616h764.245334c58.197333 0 104.789333-46.592 104.789333-104.789333v-468.309334c0-58.197333-46.592-104.789333-104.789333-104.789333H239.957333c-58.197333 2.389333-104.789333 48.981333-104.789333 107.178667V774.826667c0 58.197333 46.592 104.789333 104.789333 104.789333z m0 0M685.056 721.237333c37.205333-4.608 65.194667-39.594667 65.194667-76.970666V653.653333c0-37.205333-32.597333-67.584-69.973334-67.584H377.514667c-37.205333 0-72.192 30.378667-76.970667 67.584l-2.389333 13.994667c18.602667 27.989333 65.194667 48.981333 102.570666 51.2 0 0 158.378667 4.608 249.344 4.608h20.992m-368.128-223.573333c18.602667 23.381333 55.978667 41.984 83.968 41.984h491.690667c27.989333 0 55.978667-23.381333 60.586667-51.2l2.389333-13.994667c6.997333-34.986667-18.602667-65.194667-53.589333-65.194667H375.125333c-34.986667 0-72.192 27.989333-81.578666 62.976l-2.389334 11.605334 11.776 13.824z m0 0M340.138667 723.456h305.322666c27.989333 0 51.2-23.381333 51.2-51.2 0-27.989333-23.381333-51.2-51.2-51.2H340.138667c-27.989333 0-51.2 23.381333-51.2 51.2 0 27.989333 23.210667 51.2 51.2 51.2z m0-181.76h510.293333c27.989333 0 51.2-23.381333 51.2-51.2 0-27.989333-23.381333-51.2-51.2-51.2h-510.293333c-27.989333 0-51.2 23.381333-51.2 51.2 0 27.989333 23.210667 51.2 51.2 51.2z m0 0M973.994667-52.394667c128.170667 0 232.96 100.181333 232.96 221.354667H973.994667V390.314667c-128.170667 0-232.96-100.181333-232.96-221.354667-0.170667-121.173333 104.789333-221.354667 232.96-221.354667z m0 0M927.402667-52.394667c128.170667 0 232.96 100.181333 232.96 221.354667H927.402667V390.314667c-128.170667 0-232.96-100.181333-232.96-221.354667-0.170667-121.173333 104.789333-221.354667 232.96-221.354667z m0 0M1323.52 200.533333c0 165.376-163.157333 335.530667-349.525333 298.325334 0-253.952 53.589333-298.325333 53.589333-298.325334h295.936z m0 0M1276.928 200.533333c0 167.765333-135.168 302.933333-302.933333 302.933334v-302.933334h302.933333z m0 0" horiz-adv-x="1365" /> + + + <glyph glyph-name="index-extreme" unicode="" d="M583.92137855 238.969339L408.79001454 274.83094199000004l118.386497 256.21603401L145.94894555 158.17271401000005l210.5609-28.51645501-139.70182901-257.656259 367.11336201 366.969339z m127.891983 657.030661c-256.648101 0-465.19268599-208.544585-465.192686-465.19268601h77.48410601C324.24880454 644.82475399 497.93994355 818.515893 711.81336156 818.515893 925.83080155 818.515893 1099.52194054 644.82475399 1099.52194054 430.951336c0-214.01744-173.691139-387.564557-387.564557-387.564557-63.081857-0.144023-125.29957799 15.410408-181.036287 44.935021l-50.26385299-60.777496c68.122644-39.174121 147.190999-61.641632 231.30013999-61.641632 256.648101 0 465.19268599 208.400563 465.19268701 465.192687-0.144023 256.360056-208.544585 464.904641-465.336709 464.904641zM863.90112555 405.74739801c16.562588 0 30.24472599-13.538115 30.24472499-30.24472601s-13.68213799-30.24472599-30.24472499-30.244725h-105.85653999v-110.897328c0-16.562588-13.538115-30.24472599-30.24472602-30.244726s-30.24472599 13.538115-30.24472599 30.244726v110.897328H591.69859356c-16.562588 0-30.24472599 13.538115-30.24472602 30.244725s13.538115 30.24472599 30.24472602 30.24472599h105.85653999v50.40787602H591.69859356c-16.562588 0-30.24472599 13.538115-30.24472602 30.24472599 0 16.562588 13.538115 30.24472599 30.24472602 30.24472601h86.41350199l-78.924332 78.924332c-11.809845 11.809845-11.809845 30.96483801 0 42.77468299s30.96483801 11.809845 42.77468399 0l94.190717-94.190717 94.19071702 94.190717c11.809845 11.809845 30.96483801 11.809845 42.77468399 0s11.809845-30.96483801 0-42.77468299l-78.924332-78.924332H863.90112555c16.562588 0 30.24472599-13.538115 30.24472499-30.24472601 0-16.562588-13.538115-30.24472599-30.24472499-30.24472599h-105.85653999v-50.407876H863.90112555z" horiz-adv-x="1323" /> + + + <glyph glyph-name="my-application-recor" unicode="" d="M1014.18808664 803.877295h-54.720331c5.39673-9.412901 8.157847-20.080855 8.032343-30.874315v-62.376156c0.251011-33.509927-26.230617-60.995597-59.740544-61.99964H406.86772464c-33.635432 0.753032-60.493576 28.238702-60.493576 61.99964v62.376156c-0.125505 10.918965 2.886623 21.586919 8.534364 30.874315h-54.720331C231.53675864 803.877295 175.93789064 748.403933 175.68688064 679.752509v-621.62797c0.627527-68.274907 56.226394-123.371754 124.501301-123.371754h419.689872c-76.934776 117.347497-55.222352 273.35064 50.829665 364.969542 105.926511 91.744407 263.435718 90.865869 368.483691-1.882581V679.752509c-0.125505 33.007906-13.303567 64.635252-36.773066 87.853742-23.469499 23.343994-55.222352 36.39655-88.230257 36.271044zM643.57080464 180.36674400000004H346.37414864v96.388105h297.07115l0.125506-96.388105zM784.51330564 388.831121H346.37414864v96.764621h438.139157V388.831121zM543.66855064 709.873792h248.500581c34.388464 0 62.250651 27.736681 62.376157 61.99964v61.99964c0 16.566705-6.651783 32.380379-18.323781 44.052376s-27.611176 18.198275-44.177881 18.07277h-248.500582c-16.566705 0.125505-32.380379-6.400773-44.177881-18.07277-11.671997-11.671997-18.32378-27.48567-18.32378-44.052376v-61.99964c0.502021-34.388464 28.364208-61.99964 62.627167-61.99964z m408.519896-403.123166c-119.983109 0-217.249751-97.266642-217.375257-217.249751s97.141137-217.375256 217.124246-217.500762 217.375256 97.015631 217.626267 216.99874c0.251011 57.732458-22.590962 113.205821-63.380199 153.995058-40.914742 40.914742-96.262599 63.88222-153.995057 63.756715zM1076.31323164 27.37572899999998H890.18880564V200.322094h61.999641v-104.043931h124.124785V27.37572899999998z" horiz-adv-x="1358" /> + + + <glyph glyph-name="loan-problem" unicode="" d="M765.269333 549.888c0 9.898667-7.850667 17.408-17.408 17.408H506.709333c-9.898667 0-17.408-7.850667-17.408-17.408 0-9.898667 7.850667-17.408 17.408-17.408h241.152c9.386667 0 17.408 7.850667 17.408 17.408z m-258.901333-43.690667c-9.898667 0-17.408-7.850667-17.408-17.408 0-9.898667 7.850667-17.408 17.408-17.408H658.773333c9.898667 0 17.408 7.850667 17.408 17.408 0 9.898667-7.850667 17.408-17.408 17.408h-152.405333z m322.730667-63.658666l-55.637334-55.466667-55.466666 55.466667c-6.997333 6.997333-18.090667 6.997333-24.746667 0-6.997333-6.997333-6.997333-18.090667 0-24.746667l45.056-45.056h-23.893333c-9.898667 0-17.408-7.850667-17.408-17.408 0-9.898667 7.850667-17.408 17.408-17.408H756.053333v-13.994667h-41.642666c-9.898667 0-17.408-7.850667-17.408-17.408 0-9.898667 7.850667-17.408 17.408-17.408H756.053333v-30.549333c0-9.898667 7.850667-17.408 17.408-17.408 9.898667 0 17.408 7.850667 17.408 17.408v30.549333h41.642667c9.898667 0 17.408 7.850667 17.408 17.408 0 9.898667-7.850667 17.408-17.408 17.408h-41.642667V337.92h41.642667c9.898667 0 17.408 7.850667 17.408 17.408 0 9.898667-7.850667 17.408-17.408 17.408h-23.893333l45.056 45.056c6.997333 6.997333 6.997333 18.090667 0 24.746667-6.485333 6.997333-17.749333 6.997333-24.576 0z m109.909333 150.698666c0 26.282667-21.674667 47.616-47.957333 47.616H472.064c-26.282667 0-47.957333-21.674667-47.957333-47.616v-449.365333c0-9.898667 7.850667-17.408 17.408-17.408h2.56c4.608 0 8.533333 1.536 12.117333 4.778667l46.250667 43.52 46.250666-43.52c3.242667-3.242667 7.509333-4.778667 12.117334-4.778667h4.949333c4.608 0 8.533333 1.536 12.117333 4.778667l46.250667 43.52 46.250667-43.52c3.242667-3.242667 7.509333-4.778667 12.117333-4.778667h4.949333c4.608 0 8.533333 1.536 12.117334 4.778667l46.762666 43.52 46.250667-43.52c3.584-3.242667 7.509333-4.778667 12.117333-4.778667 4.778667 0 9.557333 1.877333 12.8 5.632 6.656 6.997333 6.314667 18.090667-1.024 24.746667l-58.368 54.442666c-6.656 6.314667-17.066667 6.314667-23.893333 0L685.568 165.546667 636.586667 211.285333c-6.656 6.314667-17.066667 6.314667-23.893334 0L563.712 165.546667l-49.152 45.397333c-6.656 6.314667-17.066667 6.314667-23.893333 0l-31.402667-29.184v411.306667c0 6.997333 5.632 12.8 12.8 12.8h418.986667c6.997333 0 12.8-5.632 12.8-12.8v-408.576l0.341333-36.522667c0-9.557333 7.850667-17.408 17.408-17.408 9.898667 0 17.408 7.850667 17.408 17.749333V593.237333zM1153.877333 603.306667l-51.029333-16.213334C1133.226667 525.994667 1150.293333 457.045333 1150.293333 384c0-253.610667-205.482667-459.093333-459.093333-459.093333S232.106667 130.389333 232.106667 384 437.589333 843.093333 691.2 843.093333c58.368 0 114.176-10.922667 165.376-30.72l17.92 49.834667C817.664 884.053333 755.882667 896 691.2 896 408.405333 896 179.2 666.794667 179.2 384s229.205333-512 512-512 512 229.205333 512 512c0 78.506667-17.749333 152.917333-49.322667 219.306667zM1024.512 709.12h-37.546667c0 14.848 1.536 25.6 4.608 32.085333 3.754667 8.192 11.946667 16.725333 24.405334 25.6 11.776 8.192 17.578667 17.578667 17.578666 28.16 0 10.24-3.072 17.749333-9.045333 22.528-4.778667 3.754667-10.922667 5.632-18.432 5.632-8.704 0-15.701333-2.389333-20.992-7.338666-5.290667-4.778667-8.533333-13.312-9.898667-25.429334l-40.106666-0.170666c0 22.528 7.509333 39.936 22.528 51.882666 12.288 9.898667 27.648 14.848 45.909333 14.848 22.698667 0 40.789333-5.632 54.101333-16.725333 12.458667-10.410667 18.773333-25.088 18.773334-43.861333 0-11.093333-2.901333-20.650667-8.874667-29.013334-4.949333-6.826667-13.482667-14.677333-25.6-23.381333-6.656-4.778667-11.093333-9.045333-13.141333-12.8-2.901333-5.290667-4.266667-12.458667-4.266667-22.016z m2.901333-19.114667v-40.106666h-41.642666v40.106666H1027.413333z" horiz-adv-x="1365" /> + + + <glyph glyph-name="registration-problem" unicode="" d="M826.538667 316.586667c13.994667 0 25.258667 11.264 25.258666 25.258666 0 8.192-3.754667 15.36-9.728 19.626667v0.341333c-19.285333 15.018667-40.789333 27.477333-64.170666 36.181334 29.696 25.6 48.64 62.976 48.64 105.130666 0 76.629333-62.122667 138.752-138.752 138.752s-138.752-62.122667-138.752-138.752c0-42.154667 18.773333-79.872 48.64-105.130666-94.549333-36.181333-161.792-127.829333-161.792-235.178667 0-13.994667 11.264-25.258667 25.258666-25.258667s25.258667 11.264 25.258667 25.258667c0 111.274667 90.453333 201.728 201.728 201.728 45.568 0 87.552-15.36 121.344-40.789333 4.266667-4.608 10.581333-7.168 17.066667-7.168z m-138.410667 98.645333c-48.64 0-88.234667 39.594667-88.234667 88.234667 0 48.64 39.594667 88.234667 88.234667 88.234666s88.234667-39.594667 88.234667-88.234666c0-48.64-39.594667-88.234667-88.234667-88.234667zM922.965333 232.106667h-37.717333v37.717333c0 10.24-8.362667 18.944-18.944 18.944-10.581333 0-18.944-8.362667-18.944-18.944V232.106667h-37.717333c-10.581333 0-18.944-8.362667-18.944-18.944 0-10.24 8.362667-18.944 18.944-18.944h37.717333v-37.717334c0-10.24 8.362667-18.944 18.944-18.944 10.24 0 18.944 8.362667 18.944 18.944v37.717334h37.717333c10.24 0 18.944 8.362667 18.944 18.944-0.341333 10.581333-8.704 18.944-18.944 18.944zM1153.877333 603.306667l-51.029333-16.213334C1133.226667 525.994667 1150.293333 457.045333 1150.293333 384c0-253.610667-205.482667-459.093333-459.093333-459.093333S232.106667 130.389333 232.106667 384 437.589333 843.093333 691.2 843.093333c58.368 0 114.176-10.922667 165.376-30.72l17.92 49.834667C817.664 884.053333 755.882667 896 691.2 896 408.405333 896 179.2 666.794667 179.2 384s229.205333-512 512-512 512 229.205333 512 512c0 78.506667-17.749333 152.917333-49.322667 219.306667zM1024.512 709.12h-37.546667c0 14.848 1.536 25.6 4.608 32.085333 3.754667 8.192 11.946667 16.725333 24.405334 25.6 11.776 8.192 17.578667 17.578667 17.578666 28.16 0 10.24-3.072 17.749333-9.045333 22.528-4.778667 3.754667-10.922667 5.632-18.432 5.632-8.704 0-15.701333-2.389333-20.992-7.338666-5.290667-4.778667-8.533333-13.312-9.898667-25.429334l-40.106666-0.170666c0 22.528 7.509333 39.936 22.528 51.882666 12.288 9.898667 27.648 14.848 45.909333 14.848 22.698667 0 40.789333-5.632 54.101333-16.725333 12.458667-10.410667 18.773333-25.088 18.773334-43.861333 0-11.093333-2.901333-20.650667-8.874667-29.013334-4.949333-6.826667-13.482667-14.677333-25.6-23.381333-6.656-4.778667-11.093333-9.045333-13.141333-12.8-2.901333-5.290667-4.266667-12.458667-4.266667-22.016z m2.901333-19.114667v-40.106666h-41.642666v40.106666H1027.413333z" horiz-adv-x="1365" /> + + + <glyph glyph-name="application-problem" unicode="" d="M941.909333 404.650667c-4.949333 9.898667-4.949333 19.456-19.456 19.456-9.898667 0-19.456-9.898667-19.456-19.456v-185.344c0-29.354667-24.405333-53.589333-48.981333-53.589334H512.341333c-29.354667 0-53.589333 29.354667-53.589333 58.538667V551.082667c0 29.354667 24.405333 53.589333 48.981333 53.589333H698.026667c9.898667 0 19.456 4.949333 19.456 19.456 0 9.898667-4.949333 19.456-14.506667 19.456H507.733333c-48.981333 0-87.893333-39.082667-87.893333-92.842667v-331.605333c0-48.981333 39.082667-92.842667 87.893333-92.842667h346.453334c48.981333 0 87.893333 39.082667 87.893333 92.842667V404.650667zM629.589333 429.056v-77.994667c0-9.898667 4.949333-14.506667 19.456-19.456H727.04c4.949333 0 9.898667 4.949333 14.506667 4.949334L931.84 531.968c4.949333 4.949333 4.949333 19.456 0 24.405333l-77.994667 77.653334c-4.949333 4.949333-19.456 4.949333-24.405333 0L639.317333 448.512c-9.728-9.557333-9.728-14.506667-9.728-19.456z m209.92 180.736l63.488-63.488-185.514666-185.344-58.538667 4.949333-4.949333 58.538667 185.514666 185.344zM1153.877333 603.306667l-51.029333-16.213334C1133.226667 525.994667 1150.293333 457.045333 1150.293333 384c0-253.610667-205.482667-459.093333-459.093333-459.093333S232.106667 130.389333 232.106667 384 437.589333 843.093333 691.2 843.093333c58.368 0 114.176-10.922667 165.376-30.72l17.92 49.834667C817.664 884.053333 755.882667 896 691.2 896 408.405333 896 179.2 666.794667 179.2 384s229.205333-512 512-512 512 229.205333 512 512c0 78.506667-17.749333 152.917333-49.322667 219.306667zM1024.512 709.12h-37.546667c0 14.848 1.536 25.6 4.608 32.085333 3.754667 8.192 11.946667 16.725333 24.405334 25.6 11.776 8.192 17.578667 17.578667 17.578666 28.16 0 10.24-3.072 17.749333-9.045333 22.528-4.778667 3.754667-10.922667 5.632-18.432 5.632-8.704 0-15.701333-2.389333-20.992-7.338666-5.290667-4.778667-8.533333-13.312-9.898667-25.429334l-40.106666-0.170666c0 22.528 7.509333 39.936 22.528 51.882666 12.288 9.898667 27.648 14.848 45.909333 14.848 22.698667 0 40.789333-5.632 54.101333-16.725333 12.458667-10.410667 18.773333-25.088 18.773334-43.861333 0-11.093333-2.901333-20.650667-8.874667-29.013334-4.949333-6.826667-13.482667-14.677333-25.6-23.381333-6.656-4.778667-11.093333-9.045333-13.141333-12.8-2.901333-5.290667-4.266667-12.458667-4.266667-22.016z m2.901333-19.114667v-40.106666h-41.642666v40.106666H1027.413333z" horiz-adv-x="1365" /> + + + <glyph glyph-name="repayment-problem" unicode="" d="M1153.877333 603.306667l-51.029333-16.213334C1133.226667 525.994667 1150.293333 457.045333 1150.293333 384c0-253.610667-205.482667-459.093333-459.093333-459.093333S232.106667 130.389333 232.106667 384 437.589333 843.093333 691.2 843.093333c58.368 0 114.176-10.922667 165.376-30.72l17.92 49.834667C817.664 884.053333 755.882667 896 691.2 896 408.405333 896 179.2 666.794667 179.2 384s229.205333-512 512-512 512 229.205333 512 512c0 78.506667-17.749333 152.917333-49.322667 219.306667zM946.005333 580.949333c-7.850667 8.362667-25.258667 19.456-37.034666 19.456H475.306667c-25.258667 0-61.44-31.744-61.44-57.173333v-331.093333c1.877333-26.282667 34.816-54.954667 61.44-55.125334h314.709333c11.946667 0 21.674667 9.728 21.674667 21.674667v1.706667c0 11.946667-9.728 21.674667-21.674667 21.674666H484.181333c-14.848 0-27.136 12.117333-27.136 27.136V430.421333h458.752V343.04c0.853333-10.752 9.728-19.114667 20.650667-19.114667h1.536c11.434667 0 20.650667 9.386667 20.650667 20.650667V543.402667c1.024 11.264-4.437333 29.013333-12.629334 37.546666z m-488.96-107.690666v52.736c0 14.848 12.117333 27.136 27.136 27.136h404.48c14.848 0 27.136-12.117333 27.136-27.136v-52.736H457.045333zM686.933333 392.192H507.221333c-9.386667 0-17.066667-7.68-17.066666-17.066667v-1.365333c0-9.386667 7.68-17.066667 17.066666-17.066667h179.712c9.386667 0 17.066667 7.68 17.066667 17.066667v1.365333c0 9.386667-7.68 17.066667-17.066667 17.066667z m-103.765333-66.56h-75.946667c-9.386667 0-17.066667-7.68-17.066666-17.066667v-1.365333c0-9.386667 7.68-17.066667 17.066666-17.066667h75.946667c9.386667 0 17.066667 7.68 17.066667 17.066667v1.365333c0 9.386667-7.68 17.066667-17.066667 17.066667zM943.445333 282.794667h-88.746666c-2.218667 0.341333-4.608-0.341333-6.144-1.706667-1.877333-1.365333-2.901333-3.584-3.242667-5.802667v-85.504c0-5.12 4.266667-9.386667 9.386667-9.386666s9.386667 4.266667 9.386666 9.386666V259.413333c37.717333-20.821333 58.197333-48.981333 58.197334-88.405333 0.341333-5.12 4.949333-9.386667 10.410666-9.386667 4.949333 0 9.045333 3.925333 9.386667 8.704 0 39.594667-15.530667 74.752-48.469333 93.525334h49.664c4.949333 0.341333 8.362667 4.608 8.362666 9.386666 0.341333 4.949333-3.242667 9.216-8.192 9.557334zM1024.512 709.12h-37.546667c0 14.848 1.536 25.6 4.608 32.085333 3.754667 8.192 11.946667 16.725333 24.405334 25.6 11.776 8.192 17.578667 17.578667 17.578666 28.16 0 10.24-3.072 17.749333-9.045333 22.528-4.778667 3.754667-10.922667 5.632-18.432 5.632-8.704 0-15.701333-2.389333-20.992-7.338666-5.290667-4.778667-8.533333-13.312-9.898667-25.429334l-40.106666-0.170666c0 22.528 7.509333 39.936 22.528 51.882666 12.288 9.898667 27.648 14.848 45.909333 14.848 22.698667 0 40.789333-5.632 54.101333-16.725333 12.458667-10.410667 18.773333-25.088 18.773334-43.861333 0-11.093333-2.901333-20.650667-8.874667-29.013334-4.949333-6.826667-13.482667-14.677333-25.6-23.381333-6.656-4.778667-11.093333-9.045333-13.141333-12.8-2.901333-5.290667-4.266667-12.458667-4.266667-22.016z m2.901333-19.114667v-40.106666h-41.642666v40.106666H1027.413333z" horiz-adv-x="1365" /> + + + <glyph glyph-name="arrow" unicode="" d="M406.848 8.672000010000033L756.99200001 362.048c0.512 0.512 0.672 1.216 1.15199999 1.76 0.128 0.128 0.31999999 0.16 0.448 0.288 12.41600001 12.576 12.352 32.832-0.19200001 45.28L405.056 759.488c-12.576 12.448-32.8 12.352-45.248-0.192-6.17600001-6.24-9.28-14.4-9.28-22.528 0-8.224 3.168-16.48 9.472-22.72l330.816-327.84-329.408-332.48c-6.17600001-6.24-9.28-14.368-9.28-22.528 0-8.25600001 3.168-16.48 9.472-22.72C374.144-3.967999999999961 394.4-3.8719999999999573 406.848 8.672000010000033z" horiz-adv-x="1024" /> + + + <glyph glyph-name="caution" unicode="" d="M649.98003113 864.68347157c-122.35687406 0-244.71374813-46.53572906-338.32010063-140.14208156C125.11584394 537.86358031 125.11584394 234.44527625 311.65993051 47.901189690000024c93.60635156-93.60635156 215.96322563-140.14208062 338.32010062-140.14208063s244.71374813 46.53572906 338.32009969 140.14208063c186.54408656 186.54408656 186.54408656 490.09611375 0 676.64020032-93.60635156 93.60635156-215.96322563 140.14208062-338.32009969 140.14208156z m0-47.87296314c56.03008781 0 110.72294156-10.96531594 161.93898844-31.42498967 53.35562063-21.93063094 101.09485969-53.35562063 142.14793126-94.94358563 41.72168813-41.05307156 73.14667781-88.79231062 95.07730874-142.14793126 20.45967375-51.21604688 31.42498969-105.90890063 31.42498969-161.93898844 0-56.03008781-10.96531594-110.72294156-31.42498969-161.93898843-21.93063094-53.35562063-53.35562063-101.09485969-95.07730874-142.14793219-41.05307156-41.72168813-88.79231062-73.14667781-142.14793126-94.94358469-51.21604688-20.45967375-105.90890063-31.42498969-161.93898844-31.42498968-56.03008781 0-110.72294156 10.96531594-161.93898938 31.42498968-53.35562063 21.93063094-101.09485969 53.35562063-142.14793124 94.94358469-41.72168813 41.05307156-73.14667781 88.79231062-94.94358563 142.14793219-20.59339781 51.08232375-31.55871281 105.7751775-31.55871281 161.80526532 0 56.03008781 10.96531594 110.72294156 31.42498968 161.93898844 21.93063094 53.35562063 53.35562063 101.09485969 94.94358563 142.14793124 41.05307156 41.72168813 88.79231062 73.14667781 142.14793126 94.94358562 51.34977 20.59339781 106.04262469 31.55871281 162.07271249 31.55871281z m0 0M655.73013488 170.39178688000004c14.17467656 0 26.34350156-4.94776406 36.50647781-14.84329219 10.16297531-9.89552906 15.24446344-21.93063094 15.2444625-36.10530751 0-14.44212281-5.08148812-26.47722563-15.2444625-36.23903062-10.16297531-9.761805-22.33180125-14.57584594-36.50647781-14.57584594-14.17467656 0-26.34350156 4.81404094-36.37275375 14.57584594-10.16297531 9.761805-15.24446344 21.79690781-15.2444625 36.23903062 0 14.17467656 5.08148812 26.20977844 15.2444625 36.10530751 10.02925219 9.89552906 22.19807812 14.84329313 36.37275375 14.84329219z m39.18094501 528.20727187l-8.8257422-443.69410781h-63.25114875l-8.82574219 443.69410781h80.90263314z m0 0M649.84630708-92.10716781999997C385.60894801-92.10716781999997 170.58178614 122.91999406000002 170.58178614 387.15735312 170.58178614 651.3947121900001 385.60894801 866.42187501 649.84630708 866.42187501 914.08366613 866.42187501 1129.11082895 651.3947121900001 1129.11082895 387.15735312c0-264.23735906-215.02716281-479.26452188-479.26452187-479.26452094z m0 889.79523564c-226.39364812 0-410.53071469-184.13706656-410.5307147-410.5307147 0-226.259925 184.13706656-410.53071469 410.5307147-410.53071469 226.259925 0 410.53071469 184.13706656 410.53071468 410.53071469s-184.27078969 410.53071469-410.53071468 410.5307147z m0 0" horiz-adv-x="1293" /> + + + <glyph glyph-name="emoji" unicode="" d="M507.75297645 421.76785687c0-23.4375-23.4375-38.97321469-38.97321469-38.97321375-23.4375 0-38.97321469 15.66964313-38.97321375 38.97321375v70.17857157c0 23.4375 15.53571469 38.97321469 38.97321375 38.97321469s38.97321469-15.53571469 38.97321469-38.97321469v-70.17857156z m358.92857156 0c0-23.4375-15.53571469-38.97321469-38.97321469-38.97321375s-38.97321469 15.66964313-38.97321469 38.97321375v70.17857157c0 23.4375 15.66964313 38.97321469 38.97321469 38.97321469 23.4375 0 38.97321469-15.53571469 38.97321469-38.97321469v-70.17857156zM492.21726176 164.35714312000005c-7.76785688 0-15.66964313 0-23.4375 7.76785688-15.66964313 15.66964313-15.66964313 38.97321469 0 54.64285688 38.97321469 46.875 109.28571469 78.08035687 179.46428625 78.08035781 70.17857156 0 140.49107156-31.20535687 187.23214219-78.08035781 15.66964313-15.53571469 15.66964313-38.97321469 0-54.64285688-15.53571469-15.53571469-38.97321469-15.53571469-54.64285688 0-70.17857156 78.08035687-195 70.17857156-265.3125 0-7.76785688-7.76785688-15.53571469-7.76785688-23.30357156-7.76785687z m0 1e-8M648.24404801-96C383.6011902-96 168.24404801 119.35714312000005 168.24404801 384 168.24404801 648.64285688 383.6011902 864 648.24404801 864 912.88690488 864 1128.24404801 648.64285688 1128.24404801 384c0-264.64285688-215.35714312-480-480-480z m0 891.16071469c-226.74107156 0-411.16071469-184.41964312-411.16071469-411.16071469 0-226.60714312 184.41964312-411.16071469 411.16071469-411.16071469 226.60714312 0 411.16071469 184.41964312 411.16071375 411.16071469s-184.55357156 411.16071469-411.16071375 411.16071469z m0 0" horiz-adv-x="1293" /> + + + <glyph glyph-name="waitting" unicode="" d="M681.83226764 659.159082c18.741883 0 34.017801 15.275918 34.017801 34.017802V859.671556c0 18.741883-15.275918 34.017801-34.017801 34.017801s-34.017801-15.275918-34.017801-34.017801V693.176884c0-18.741883 15.275918-34.017801 34.017801-34.017802z m-241.847311-82.412937c13.222013-13.222013 34.788016-13.222013 48.010029 0s13.222013 34.788016 0 48.010029l-117.714429 117.714429c-13.222013 13.222013-34.788016 13.222013-48.010029 0s-13.222013-34.788016 0-48.010029l117.714429-117.714429z m-30.680206-195.249342c0 18.741883-15.275918 34.017801-34.017801 34.017801H208.79227764c-18.741883 0-34.017801-15.275918-34.017801-34.017801s15.275918-34.017801 34.017801-34.017801h166.494672c18.741883 0 34.017801 15.275918 34.017801 34.017801z m82.412938-193.837282c-13.222013 13.222013-34.788016 13.222013-48.010029 0L325.99323064 69.94509200000005c-13.222013-13.222013-13.222013-34.788016 0-48.010029 13.222013-13.222013 34.788016-13.222013 48.010029 0l117.714429 117.714429c13.222013 13.222013 13.222013 34.788016 0 48.010029z m195.249342-78.690234c-18.741883 0-34.017801-15.275918-34.017802-34.017801v-166.494673c0-18.741883 15.275918-34.017801 34.017802-34.017801s34.017801 15.275918 34.017801 34.017801V74.95148600000005c0 18.741883-15.275918 34.017801-34.017801 34.017801zM928.81434164 191.38222399999995c-13.222013 13.222013-34.788016 13.222013-48.010029 0s-13.222013-34.788016 0-48.010029l117.714429-117.714429c13.222013-13.222013 34.788016-13.222013 48.010029 0s13.222013 34.788016 0 48.010029L928.81434164 191.38222399999995z m231.192679 229.138774H993.51234764c-18.741883 0-34.017801-15.275918-34.017801-34.017801s15.275918-34.017801 34.017801-34.017801h166.494673c18.741883 0 34.017801 15.275918 34.017801 34.017801s-15.275918 34.017801-34.017801 34.017801zM877.08160964 580.340479c13.222013-13.222013 34.788016-13.222013 48.010029 0l117.714429 117.714429c13.222013 13.222013 13.222013 34.788016 0 48.010029-13.222013 13.222013-34.788016 13.222013-48.010029 0l-117.714429-117.714429c-13.222013-13.093644-13.222013-34.788016 0-48.010029z" horiz-adv-x="1362" /> + + + <glyph glyph-name="loan" unicode="" d="M511.2 832.1C264.3 832.1 64.1 631.9 64.1 385s200.2-447.1 447.1-447.1S958.3 138.10000000000002 958.3 385 758.1 832.1 511.2 832.1z m0-835.8c-214.7 0-388.7 174.1-388.7 388.7s174.1 388.7 388.7 388.7S900 599.7 900 385 725.9-3.7000000000000455 511.2-3.7000000000000455zM800.2 412.5L538.7 674c-15.1 15.1-39.8 15.1-54.9 0L222.3 412.5c-15.1-15.1-15.1-39.8 0-54.9l261.5-261.5c15.1-15.1 39.8-15.1 54.9 0l261.5 261.5c15 15.1 15 39.8 0 54.9z m-289-263.3L275.4 385l235.8 235.8L747 385 511.2 149.20000000000005z" horiz-adv-x="1024" /> + + + <glyph glyph-name="loan-fill" unicode="" d="M512.3 831C265.4 831 65.2 630.8 65.2 383.9s200.1-447.1 447.1-447.1 447.1 200.1 447.1 447.1S759.2 831 512.3 831z m287.5-453.5L518.7 96.4c-3.5-3.5-9.2-3.5-12.7 0L224.8 377.5c-3.5 3.5-3.5 9.2 0 12.7l281.1 281.1c3.5 3.5 9.2 3.5 12.7 0l281.1-281.1c3.6-3.5 3.6-9.2 0.1-12.7z" horiz-adv-x="1024" /> + + + <glyph glyph-name="identification" unicode="" d="M1219.925333 305.493333c-1.536-15.018667-15.36-22.528-26.965333-29.354666-10.922667-6.314667-21.845333-12.629333-32.597333-18.944-17.408-10.069333-34.816-20.138667-52.224-30.378667-21.845333-12.629333-43.52-25.429333-65.365334-37.888l-72.192-41.984c-24.234667-13.994667-48.298667-28.16-72.704-42.154667-22.186667-12.970667-44.373333-25.770667-66.56-38.741333-18.090667-10.581333-36.181333-20.992-54.272-31.573333-11.946667-6.826667-23.722667-13.824-35.669333-20.650667-9.045333-5.12-17.408-10.410667-27.648-13.312-26.624-7.68-56.149333-5.12-80.213333 8.874667-8.533333 5.12-17.408 9.898667-25.941334 15.018666-15.872 9.216-31.573333 18.090667-47.445333 27.306667-20.821333 11.946667-41.472 24.064-62.293333 35.84-23.552 13.653333-47.445333 27.306667-70.997334 40.96-24.405333 13.994667-48.810667 28.330667-73.386666 42.325333-23.04 13.312-46.08 26.624-69.290667 39.936l-59.050667 33.962667c-13.994667 8.192-28.330667 16.213333-42.325333 24.405333-6.485333 3.754667-12.8 7.338667-19.285333 11.264-10.069333 5.802667-20.138667 15.189333-20.138667 27.648 0-11.434667 0-22.869333-0.170667-34.474666 0-4.096-0.341333-8.362667 0-12.629334 0.853333-11.093333 9.557333-19.626667 18.773334-25.088 5.632-3.413333 11.264-6.485333 17.066666-9.898666 14.677333-8.533333 29.525333-17.066667 44.202667-25.6 21.333333-12.288 42.496-24.576 63.829333-36.864 25.258667-14.677333 50.688-29.184 75.946667-43.861334 26.282667-15.36 52.736-30.378667 79.189333-45.738666 25.088-14.506667 50.176-29.013333 75.264-43.349334 20.821333-11.946667 41.642667-24.064 62.464-36.010666 13.994667-8.192 28.330667-16.213333 42.325334-24.405334 8.192-4.608 16.213333-9.898667 25.088-13.312 27.648-10.069333 60.245333-7.850667 85.674666 6.997334 9.728 5.632 19.456 11.264 29.013334 16.896 17.92 10.410667 35.84 20.821333 53.589333 31.061333 23.381333 13.482667 46.592 26.965333 69.973333 40.618667 26.112 15.189333 52.224 30.378667 78.165334 45.397333l78.165333 45.397333c23.381333 13.653333 46.762667 27.136 70.144 40.789334 18.090667 10.581333 36.352 20.992 54.442667 31.744 9.898667 5.802667 20.138667 11.605333 30.037333 17.408 3.072 1.706667 6.144 3.584 9.045333 5.632 7.68 5.802667 13.653333 13.653333 13.824 23.552 0.170667 5.12 0 9.898667 0 15.018666 0 9.898667 0 20.138667 0.170667 30.037334 0.512-0.512 0.341333-1.194667 0.341333-1.877334 0-0.512 0 0.170667 0 0zM1200.64 334.848c25.941333-15.018667 26.112-39.424 0.341333-54.442667L730.624 7.168c-25.770667-15.018667-67.925333-15.018667-93.866667 0l-473.429333 273.066667c-25.941333 15.018667-26.112 39.424-0.341333 54.442666L633.173333 607.914667c25.770667 15.018667 67.925333 15.018667 93.866667 0l473.6-273.066667zM814.421333 815.616c-0.170667 0-0.170667 0 0 0-0.341333 0.341333-0.682667 0.341333-1.024 0.512h-0.170666c-0.170667 0-0.341333 0.170667-0.341334 0.170667-0.170667 0-0.341333 0.170667-0.512 0.170666-0.170667 0-0.341333 0.170667-0.512 0.170667-0.170667 0-0.341333 0-0.341333 0.170667h-0.170667c-0.341333 0-0.682667 0.170667-1.024 0.170666h-2.56c-0.170667 0-0.341333 0-0.341333-0.170666-0.341333 0-0.512-0.170667-0.853333-0.170667-0.170667 0-0.341333 0-0.341334-0.170667-0.170667 0-0.341333-0.170667-0.341333-0.170666-0.341333-0.170667-0.853333-0.341333-1.365333-0.341334-0.170667 0-0.341333-0.170667-0.341334-0.170666-0.170667 0-0.170667-0.170667-0.341333-0.170667-0.853333-0.341333-1.536-0.682667-2.389333-1.024l-418.133334-241.493333c-1.024-0.512-1.877333-1.194667-2.901333-1.877334-0.170667-0.170667-0.341333-0.341333-0.512-0.341333-0.853333-0.682667-1.706667-1.536-2.56-2.389333-0.170667 0-0.170667-0.170667-0.341333-0.170667l-0.341334-0.341333c-0.341333-0.341333-0.853333-0.853333-1.194666-1.365334l-0.341334-0.341333-0.341333-0.341333c-0.341333-0.341333-0.512-0.512-0.682667-0.853334-0.170667-0.170667-0.341333-0.341333-0.341333-0.512-0.170667-0.170667-0.341333-0.341333-0.341333-0.512-0.170667-0.341333-0.341333-0.341333-0.512-0.682666l-0.341334-0.341334c-0.170667-0.341333-0.341333-0.512-0.512-0.853333-0.170667-0.170667-0.341333-0.341333-0.341333-0.512s-0.170667-0.170667-0.170667-0.341333c-0.341333-0.512-0.682667-1.024-1.024-1.706667v-0.170667c0-0.170667-0.170667-0.341333-0.170666-0.341333-0.341333-0.341333-0.341333-0.853333-0.682667-1.024-0.170667-0.170667-0.170667-0.341333-0.341333-0.512-0.170667-0.170667-0.170667-0.341333-0.341334-0.512-0.170667-0.170667-0.170667-0.341333-0.341333-0.512-0.170667-0.341333-0.341333-0.853333-0.512-1.194667 0-0.170667-0.170667-0.170667-0.170667-0.341333v-0.170667c-0.341333-0.512-0.341333-1.024-0.682666-1.706666 0-0.170667 0-0.170667-0.170667-0.341334s-0.170667-0.341333-0.341333-0.512c-0.170667-0.341333-0.341333-0.512-0.341334-0.853333-0.170667-0.341333-0.170667-0.341333-0.170666-0.682667-0.170667-0.341333-0.170667-0.512-0.341334-0.853333 0-0.170667-0.170667-0.341333-0.170666-0.512-0.170667-0.341333-0.170667-0.512-0.170667-0.853333-0.170667-0.341333-0.170667-0.682667-0.341333-1.024 0-0.170667 0-0.341333-0.170667-0.341334 0-0.341333-0.170667-0.341333-0.170667-0.682666-0.170667-0.512-0.170667-1.024-0.341333-1.536 0-0.170667 0-0.341333-0.170667-0.341334v-0.341333c-0.170667-1.024-0.341333-2.218667-0.341333-3.242667l0.853333-287.744c0-2.901333 0.512-5.290667 1.536-7.338666 1.024-2.048 2.389333-3.584 3.925334-4.437334l20.138666-11.776c-3.242667 1.877333-5.461333 5.973333-5.461333 11.946667l-0.512 288.085333c0 1.024 0.170667 2.218667 0.341333 3.242667 0 0.341333 0 0.512 0.170667 0.853333 0.170667 0.512 0.170667 1.024 0.341333 1.536 0 0.341333 0.170667 0.682667 0.170667 1.024 0.170667 0.341333 0.170667 0.682667 0.341333 1.024 0.170667 0.341333 0.341333 0.853333 0.341334 1.365334 0.170667 0.341333 0.170667 0.512 0.341333 0.853333l0.512 1.536c0.170667 0.170667 0.170667 0.341333 0.341333 0.512l0.853334 2.048c0 0.170667 0.170667 0.170667 0.170666 0.341333 0.341333 0.512 0.512 1.194667 0.853334 1.706667 0.170667 0.170667 0.170667 0.341333 0.341333 0.512 0.341333 0.512 0.512 1.024 1.024 1.706667 0 0.170667 0.170667 0.341333 0.170667 0.341333 0.341333 0.682667 0.853333 1.194667 1.194666 1.877333 0.170667 0.170667 0.341333 0.341333 0.341334 0.512 0.341333 0.341333 0.512 0.853333 1.024 1.365334 0.170667 0.341333 0.341333 0.341333 0.512 0.682666 0.341333 0.341333 0.512 0.682667 0.853333 1.024 0.341333 0.341333 0.512 0.512 0.682667 0.853334 0.341333 0.341333 0.341333 0.512 0.682666 0.853333s0.853333 0.853333 1.194667 1.365333c0.170667 0.341333 0.341333 0.341333 0.682667 0.682667 0.853333 0.853333 1.706667 1.706667 2.56 2.389333 0.170667 0.170667 0.341333 0.341333 0.512 0.341334 1.024 0.682667 1.877333 1.365333 2.901333 1.877333l417.962667 240.64c0.853333 0.341333 1.536 0.853333 2.389333 1.024 0.341333 0.170667 0.512 0.170667 0.682667 0.341333l1.194666 0.341334c0.341333 0.170667 0.512 0.170667 0.853334 0.341333 0.341333 0 0.512 0.170667 0.853333 0.170667s0.682667 0.170667 1.024 0.170666h2.048c0.341333 0 1.024-0.170667 1.365333-0.170666 0.170667 0 0.341333 0 0.341334-0.170667 0.341333-0.170667 0.682667-0.170667 1.024-0.341333 0.170667 0 0.341333-0.170667 0.341333-0.170667 0.341333-0.170667 0.853333-0.341333 1.194667-0.512l-20.821334 11.776zM821.418667 802.474667c10.24 5.802667 18.602667 1.024 18.602666-10.581334l0.853334-287.744c0-11.776-8.362667-26.112-18.432-31.914666L404.48 231.082667c-10.24-5.802667-18.602667-1.024-18.602667 10.581333l-0.853333 287.744c0 11.776 8.362667 26.112 18.432 31.914667L821.418667 802.474667zM490.837333 461.482667c23.210667 13.312 41.984 3.072 41.984-23.210667v-3.072c0-10.410667-18.773333-21.504-41.984-34.986667l-26.965333-15.530666c-23.210667-13.312-41.984-24.234667-41.984-13.482667v3.072c-0.170667 26.282667 18.773333 58.368 41.813333 71.68l27.136 15.530667zM427.008 362.496c0-1.365333 0.341333-2.389333 1.024-3.072 0.341333-0.341333 0.341333-0.341333 0.682667-0.512l14.677333-8.533333c-1.024 0.682667-1.706667 1.877333-1.706667 3.754666v3.072l-14.677333 8.533334v-3.242667zM525.994667 455.68c-0.170667 0-0.170667 0.170667-0.341334 0.170667l-2.048 1.024c-0.170667 0-0.341333 0.170667-0.341333 0.170666l-0.682667 0.341334c-0.341333 0.170667-0.682667 0.341333-1.024 0.341333-0.341333 0.170667-0.853333 0.170667-1.194666 0.341333-0.341333 0-0.341333 0.170667-0.682667 0.170667-0.170667 0-0.341333 0-0.341333 0.170667-0.853333 0.170667-1.706667 0.341333-2.56 0.341333h-2.730667c-0.341333 0-0.512 0-0.682667-0.170667-0.341333 0-0.853333-0.170667-1.194666-0.170666s-0.682667 0-1.024-0.170667c-0.341333 0-0.682667-0.170667-1.024-0.341333-0.512-0.170667-1.024-0.341333-1.706667-0.341334-0.341333-0.170667-0.512-0.170667-1.024-0.170666-0.682667-0.170667-1.536-0.341333-2.389333-0.682667h-0.170667l-2.56-1.024-1.024-0.512c-0.341333-0.170667-0.682667-0.341333-1.024-0.341333-1.194667-0.512-2.56-1.194667-3.925333-2.048l-26.965334-15.530667c-1.365333-0.853333-2.730667-1.706667-3.925333-2.56-0.341333-0.341333-0.853333-0.682667-1.194667-1.024-1.024-0.682667-1.706667-1.194667-2.56-2.048-0.512-0.341333-1.024-0.853333-1.536-1.194667-0.853333-0.682667-1.706667-1.365333-2.389333-2.048-0.512-0.341333-1.024-1.024-1.536-1.365333-0.341333-0.341333-0.682667-0.512-1.024-1.024l-1.194667-1.024c-1.024-1.024-1.877333-2.048-2.901333-3.072l-1.024-1.024c-0.170667-0.341333-0.341333-0.341333-0.512-0.682667l-1.706667-2.048c-0.341333-0.512-0.853333-1.024-1.194666-1.536-0.341333-0.341333-0.341333-0.512-0.682667-1.024s-0.853333-1.024-1.024-1.706666c-0.341333-0.341333-0.682667-0.853333-1.024-1.365334l-1.024-1.536c-0.341333-0.341333-0.512-1.024-1.024-1.365333-0.170667-0.341333-0.341333-0.512-0.512-0.682667-0.682667-1.024-1.365333-2.389333-2.048-3.413333v-0.170667c-0.682667-1.024-1.365333-2.389333-1.877333-3.584-0.170667-0.341333-0.341333-0.512-0.341334-1.024-0.341333-0.341333-0.341333-0.853333-0.512-1.194666-0.341333-0.341333-0.512-1.024-0.682666-1.365334-0.341333-0.682667-0.682667-1.536-1.024-2.389333-0.170667-0.341333-0.341333-0.682667-0.341334-1.024 0-0.170667-0.170667-0.341333-0.170666-0.341333-0.512-1.194667-1.024-2.389333-1.536-3.754667 0-0.170667-0.170667-0.341333-0.170667-0.341333l-0.341333-1.194667c-0.341333-0.682667-0.512-1.536-0.853334-2.218667l-0.341333-1.194666c-0.170667-0.512-0.341333-1.024-0.512-1.706667l-0.341333-1.194667c-0.170667-0.512-0.341333-1.024-0.341334-1.706666l-0.512-2.048c0-0.341333-0.170667-0.512-0.341333-0.853334-0.170667-0.512-0.170667-1.024-0.341333-1.536l-0.512-3.072c0-0.341333-0.170667-0.682667-0.170667-1.024-0.170667-0.682667-0.170667-1.365333-0.170667-1.877333s-0.170667-1.024-0.170666-1.536c-0.170667-1.536-0.170667-3.072-0.170667-4.437333l14.677333-8.533334c0 1.536 0.170667 3.072 0.170667 4.437334 0 0.512 0.170667 1.024 0.170667 1.536 0.170667 1.024 0.341333 1.877333 0.341333 3.072l0.512 3.072c0.170667 0.853333 0.341333 1.706667 0.341333 2.389333l0.512 2.048c0.341333 1.024 0.512 2.048 0.853334 3.072 0.170667 0.512 0.341333 1.024 0.512 1.706667 0.341333 1.024 0.853333 2.389333 1.194666 3.413333l0.341334 1.194667c0.512 1.536 1.194667 3.072 1.877333 4.437333 0.170667 0.341333 0.341333 0.682667 0.341333 1.024 0.512 1.194667 1.024 2.389333 1.706667 3.754667 0.170667 0.341333 0.341333 0.853333 0.512 1.194666 0.853333 1.536 1.536 3.072 2.389333 4.437334v0.170666c0.853333 1.365333 1.706667 2.901333 2.56 4.266667 0.341333 0.341333 0.512 1.024 1.024 1.365333l2.048 2.901334 1.194667 1.706666c0.512 0.853333 1.194667 1.706667 1.877333 2.389334l1.706667 2.048c0.512 0.512 1.024 1.024 1.536 1.706666 1.024 1.024 1.877333 2.048 2.901333 3.072l1.706667 1.706667c0.512 0.341333 1.024 1.024 1.536 1.365333 0.853333 0.682667 1.536 1.365333 2.389333 2.048 0.512 0.341333 1.024 0.853333 1.536 1.194667l2.56 2.048c0.341333 0.341333 0.853333 0.682667 1.194667 1.024 1.365333 1.024 2.730667 1.706667 3.925333 2.56l26.965334 15.530667c1.365333 0.853333 2.56 1.365333 3.925333 2.048 0.341333 0.170667 0.682667 0.341333 1.024 0.341333 1.194667 0.512 2.389333 1.024 3.754667 1.536h0.170666c1.024 0.341333 2.218667 0.682667 3.072 1.024 0.512 0.170667 1.194667 0.341333 1.706667 0.341333 0.682667 0.170667 1.536 0.341333 2.218667 0.341334 0.341333 0 0.853333 0.170667 1.194666 0.170666 1.024 0 1.706667 0.170667 2.56 0h0.682667c1.024 0 2.048-0.170667 3.072-0.341333 0.341333 0 0.512-0.170667 0.682667-0.170667 0.853333-0.170667 1.706667-0.341333 2.389333-0.682666 0.341333-0.170667 0.512-0.170667 0.682667-0.341334 1.024-0.341333 1.877333-0.853333 2.730666-1.365333l-14.506666 8.704zM472.064 531.797333c17.92 10.410667 32.426667 2.389333 32.597333-18.090666 0.170667-20.309333-14.506667-45.056-32.426666-55.466667s-32.426667-2.389333-32.597334 18.090667c0 20.309333 14.336 45.056 32.426667 55.466666zM510.634667 444.245333c23.210667 13.312 41.984 3.072 41.984-23.210666v-3.072c0-10.410667-18.773333-21.504-41.984-34.986667l-26.965334-15.530667c-23.210667-13.312-41.984-24.234667-41.984-13.482666v3.072c-0.170667 26.282667 18.773333 58.368 41.813334 71.68l27.136 15.530666zM502.101333 524.458667s0.170667 0 0 0c1.024 0.341333 1.706667 0.512 2.56 0.682666 0.341333 0.170667 1.024 0.170667 1.365334 0.341334 0.512 0.170667 1.024 0.170667 1.706666 0.341333 0.341333 0 0.682667 0.170667 1.024 0.170667h2.56c0.853333 0 1.706667-0.170667 2.389334-0.341334 0.170667 0 0.341333-0.170667 0.512-0.170666 0.682667-0.170667 1.194667-0.341333 1.706666-0.512 0.170667 0 0.341333-0.170667 0.512-0.170667 0.682667-0.341333 1.536-0.682667 2.218667-1.024l-14.677333 8.533333s-0.170667 0-0.170667 0.170667l-1.706667 0.853333c-0.170667 0-0.341333 0.170667-0.341333 0.170667-0.170667 0.170667-0.341333 0.170667-0.512 0.170667-0.341333 0.170667-0.512 0.341333-0.853333 0.341333-0.341333 0.170667-0.682667 0.170667-1.024 0.341333-0.170667 0-0.341333 0.170667-0.512 0.170667h-0.341334c-0.682667 0.170667-1.365333 0.170667-1.877333 0.341333h-2.730667c-0.341333 0-0.682667 0-1.024-0.170666-0.341333 0-0.512 0-0.853333-0.170667-0.341333 0-0.512-0.170667-0.853333-0.170667-0.341333-0.170667-1.024-0.170667-1.365334-0.341333-0.341333 0-0.341333-0.170667-0.682666-0.170667-0.512-0.170667-1.024-0.341333-1.706667-0.512h-0.170667c-0.682667-0.341333-1.365333-0.341333-2.048-0.853333l-0.853333-0.341333-0.853333-0.341334c-1.024-0.341333-2.048-1.024-3.072-1.536-1.024-0.512-2.048-1.194667-3.072-1.877333-0.341333-0.341333-0.682667-0.512-1.024-0.682667l-2.048-1.536c-0.341333-0.341333-0.853333-0.682667-1.024-1.024-0.512-0.512-1.194667-1.024-1.706667-1.706666-0.341333-0.341333-0.853333-0.682667-1.024-1.024-0.341333-0.341333-0.512-0.341333-0.853333-0.682667l-0.682667-0.682667c-0.853333-0.853333-1.536-1.706667-2.218667-2.389333-0.341333-0.341333-0.512-0.512-0.682666-0.853333-0.170667-0.170667-0.341333-0.341333-0.341334-0.512-0.341333-0.512-0.853333-1.024-1.194666-1.536l-1.024-1.024c-0.170667-0.341333-0.341333-0.341333-0.512-0.682667-0.341333-0.341333-0.512-0.853333-1.024-1.194667-0.341333-0.341333-0.512-0.682667-0.853334-1.024l-0.341333-1.536c-0.341333-0.341333-0.341333-0.682667-0.682667-1.024-0.170667-0.170667-0.341333-0.341333-0.341333-0.512-0.512-0.853333-1.024-1.706667-1.706667-2.730666-0.512-1.024-1.024-1.706667-1.536-2.730667-0.170667-0.341333-0.341333-0.341333-0.341333-0.682667-0.170667-0.341333-0.341333-0.682667-0.341333-1.024l-0.512-1.024c-0.341333-0.512-0.512-1.194667-0.853334-1.706666-0.170667-0.341333-0.341333-0.512-0.341333-0.682667 0-0.170667-0.170667-0.170667-0.170667-0.341333l-1.194666-2.901334c0-0.170667-0.170667-0.341333-0.170667-0.341333-0.170667-0.341333-0.341333-0.512-0.341333-1.024-0.341333-0.512-0.341333-1.024-0.682667-1.706667-0.170667-0.341333-0.170667-0.682667-0.341333-1.024-0.170667-0.341333-0.341333-0.853333-0.341334-1.365333-0.170667-0.341333-0.341333-0.682667-0.341333-1.024-0.170667-0.341333-0.341333-1.024-0.341333-1.365333l-0.341334-1.706667c0-0.341333-0.170667-0.341333-0.170666-0.682667-0.170667-0.341333-0.170667-0.853333-0.170667-1.194666l-0.341333-2.389334c0-0.341333-0.170667-0.512-0.170667-0.853333 0-0.512-0.170667-1.024-0.170667-1.536 0-0.341333-0.170667-0.682667-0.170666-1.024-0.170667-1.194667-0.170667-2.389333-0.170667-3.584 0-9.898667 3.584-16.896 9.216-20.309333l14.677333-8.533334c-5.802667 3.242667-9.216 10.410667-9.216 20.309334 0 1.024 0 2.389333 0.170667 3.584 0 0.341333 0.170667 0.682667 0.170667 1.024 0.170667 0.853333 0.170667 1.536 0.341333 2.389333l0.341333 2.389333c0.170667 0.512 0.341333 1.194667 0.341334 1.706667l0.341333 1.706667c0.170667 0.853333 0.341333 1.536 0.682667 2.389333 0.170667 0.341333 0.341333 0.853333 0.341333 1.365333 0.341333 1.024 0.512 1.706667 1.024 2.730667 0.170667 0.341333 0.341333 0.512 0.341333 1.024 0.341333 1.194667 1.024 2.389333 1.365334 3.584 0.170667 0.341333 0.341333 0.512 0.341333 0.682667 0.341333 1.024 0.853333 1.877333 1.365333 2.901333 0.170667 0.341333 0.341333 0.682667 0.341334 1.024 0.512 1.024 1.194667 2.389333 1.877333 3.413333l2.048 3.242667c0.341333 0.341333 0.341333 0.682667 0.682667 1.024 0.512 0.682667 1.024 1.536 1.536 2.218667 0.341333 0.341333 0.512 0.853333 1.024 1.194666 0.341333 0.682667 1.024 1.194667 1.536 1.706667 0.341333 0.512 0.853333 1.024 1.194666 1.536 0.341333 0.341333 0.853333 0.853333 1.024 1.194667 0.682667 0.853333 1.536 1.706667 2.218667 2.389333l1.365333 1.365333 1.024 1.024c0.512 0.512 1.194667 1.024 1.706667 1.706667 0.341333 0.341333 0.853333 0.682667 1.024 1.024l2.048 1.536c0.341333 0.341333 0.682667 0.512 1.024 0.682667 1.024 0.682667 2.048 1.365333 3.072 1.877333l3.072 1.536 0.853333 0.341333c1.194667 0.512 2.048 0.853333 3.072 1.365334zM495.445333 521.216c17.92 10.410667 32.426667 2.389333 32.597334-18.090667 0-20.309333-14.506667-45.056-32.426667-55.466666s-32.426667-2.389333-32.597333 18.090666c-0.170667 20.48 14.506667 45.226667 32.426666 55.466667zM779.264 720.213333c6.485333 3.754667 11.776 0.682667 11.776-6.656s-5.12-16.554667-11.605333-20.138666L593.92 586.24c-6.485333-3.754667-11.776-0.682667-11.776 6.656s5.12 16.554667 11.605333 20.138667L779.264 720.213333z m-2.56-86.016c6.485333 3.754667 11.776 0.682667 11.776-6.656s-5.12-16.554667-11.605333-20.138666l-185.514667-107.008c-6.485333-3.754667-11.776-0.682667-11.776 6.656s5.12 16.554667 11.605333 20.138666l185.514667 107.008zM791.210667 711.338667c-0.170667 0-0.170667 0 0 0-0.341333 0.170667-0.341333 0.341333-0.682667 0.341333h-0.170667s-0.170667 0-0.170666 0.170667c-0.170667 0-0.170667 0.170667-0.341334 0.170666s-0.341333 0-0.341333 0.170667h-0.341333c-0.341333 0-0.341333 0-0.682667 0.170667h-1.706667c-0.170667 0-0.341333 0-0.341333-0.170667h-0.341333c-0.170667 0-0.170667 0-0.341334-0.170667-0.341333-0.170667-0.512-0.170667-0.853333-0.341333-0.170667 0-0.170667 0-0.341333-0.170667 0 0-0.170667 0-0.170667-0.170666-0.512-0.341333-1.024-0.341333-1.536-0.682667l-185.344-107.008c-0.682667-0.341333-1.536-1.024-2.218667-1.536-0.341333-0.170667-0.341333-0.341333-0.682666-0.512-0.341333-0.341333-0.682667-0.512-1.024-1.024-0.170667-0.170667-0.341333-0.341333-0.341334-0.512l-0.853333-0.853333c-0.341333-0.341333-0.682667-0.853333-1.024-1.194667l-0.341333-0.341333c0-0.170667-0.170667-0.170667-0.170667-0.341334-0.170667-0.170667-0.170667-0.341333-0.341333-0.341333-0.341333-0.341333-0.341333-0.682667-0.682667-1.024-0.341333-0.341333-0.341333-0.682667-0.512-1.024v-0.341333l-0.341333-0.853334-0.512-1.024c-0.170667-0.341333-0.341333-0.512-0.341334-1.024-0.170667-0.341333-0.341333-0.682667-0.341333-1.024-0.170667-0.341333-0.341333-0.682667-0.341333-1.024 0-0.170667-0.170667-0.341333-0.170667-0.512s0-0.170667-0.170667-0.341333c0-0.170667-0.170667-0.341333-0.170666-0.341333-0.170667-0.341333-0.341333-1.024-0.341334-1.365334s-0.170667-0.512-0.170666-0.853333c0-0.170667 0-0.341333-0.170667-0.341333 0-0.170667 0-0.341333-0.170667-0.341334-0.170667-0.853333-0.170667-1.536-0.170666-2.389333 0-1.706667 0.341333-3.413333 1.024-4.608 0.512-1.194667 1.536-2.218667 2.389333-2.901333l14.677333-8.533334c-2.048 1.194667-3.413333 3.754667-3.413333 7.509334 0 0.853333 0.170667 1.706667 0.341333 2.730666 0 0.170667 0 0.341333 0.170667 0.341334l0.512 2.56c0 0.170667 0 0.170667 0.170667 0.341333 0.341333 1.024 0.682667 1.877333 1.024 2.730667 0.341333 1.024 0.853333 1.877333 1.365333 2.730666v0.170667l1.706667 2.389333c0 0.170667 0.170667 0.170667 0.170666 0.341334 0.512 0.682667 1.024 1.365333 1.706667 2.048l0.341333 0.341333c0.341333 0.512 1.024 1.024 1.536 1.365333 0.341333 0.170667 0.341333 0.341333 0.682667 0.512 0.682667 0.512 1.536 1.024 2.218667 1.536l184.661333 107.008c0.512 0.341333 1.024 0.512 1.536 0.682667 0.170667 0 0.341333 0.170667 0.341333 0.170667 0.341333 0.170667 0.512 0.170667 0.853334 0.341333 0.170667 0 0.341333 0.170667 0.512 0.170667 0.170667 0 0.341333 0.170667 0.341333 0.170666 0.341333 0 0.341333 0.170667 0.682667 0.170667h1.365333c0.341333 0 0.512 0 0.853333-0.170667h0.341334c0.341333 0 0.341333-0.170667 0.682666-0.170666 0 0 0.170667 0 0.170667-0.170667l0.853333-0.341333-14.506666 8.704zM797.354667 701.952c6.485333 3.754667 11.776 0.682667 11.776-6.656s-5.12-16.554667-11.605334-20.138667l-185.344-107.008c-6.485333-3.754667-11.776-0.682667-11.776 6.656s5.12 16.554667 11.605334 20.138667l185.344 107.008zM791.210667 627.370667c-0.170667 0-0.170667 0.170667 0 0-0.341333 0.170667-0.341333 0.341333-0.682667 0.341333h-0.170667s-0.170667 0-0.170666 0.170667c-0.170667 0-0.170667 0.170667-0.341334 0.170666s-0.341333 0-0.341333 0.170667h-0.341333c-0.341333 0-0.341333 0-0.682667 0.170667h-1.706667c-0.170667 0-0.341333 0-0.341333-0.170667h-0.341333c-0.170667 0-0.170667 0-0.341334-0.170667-0.341333-0.170667-0.512-0.170667-0.853333-0.341333-0.170667 0-0.170667 0-0.341333-0.170667 0 0-0.170667 0-0.170667-0.170666-0.512-0.341333-1.024-0.341333-1.536-0.682667l-185.344-107.008c-0.682667-0.341333-1.536-1.024-2.218667-1.536-0.341333-0.170667-0.341333-0.341333-0.682666-0.512-0.341333-0.341333-0.682667-0.512-1.024-1.024-0.170667-0.170667-0.341333-0.341333-0.341334-0.512l-0.853333-0.853333c-0.341333-0.341333-0.682667-0.853333-1.024-1.194667l-0.341333-0.341333c0-0.170667-0.170667-0.170667-0.170667-0.341334-0.170667-0.170667-0.170667-0.341333-0.341333-0.341333-0.341333-0.341333-0.341333-0.682667-0.682667-1.024-0.341333-0.341333-0.341333-0.682667-0.512-1.024v-0.341333l-0.341333-0.853334-0.512-1.024c-0.170667-0.341333-0.341333-0.512-0.341334-1.024v-0.170666c-0.170667-0.341333-0.341333-0.682667-0.341333-1.024-0.170667-0.341333-0.341333-0.682667-0.341333-1.024 0-0.170667-0.170667-0.341333-0.170667-0.512s0-0.170667-0.170667-0.341334c0-0.170667-0.170667-0.341333-0.170666-0.341333-0.170667-0.341333-0.341333-1.024-0.341334-1.365333s-0.170667-0.512-0.170666-0.853334c0-0.170667 0-0.341333-0.170667-0.341333 0-0.170667 0-0.341333-0.170667-0.341333-0.170667-0.853333-0.170667-1.536-0.170666-2.389334 0-3.754667 1.365333-6.314667 3.413333-7.509333l14.677333-8.533333c-2.048 1.194667-3.413333 3.754667-3.413333 7.509333 0 0.853333 0.170667 1.706667 0.341333 2.730667 0 0.170667 0 0.341333 0.170667 0.341333l0.512 2.56c0 0.170667 0 0.170667 0.170667 0.341333 0.341333 1.024 0.682667 1.877333 1.024 2.730667 0.341333 1.024 0.853333 1.706667 1.365333 2.730667v0.170666l1.706667 2.389334c0 0.170667 0.170667 0.170667 0.170666 0.341333 0.512 0.682667 1.024 1.365333 1.706667 2.048l0.341333 0.341333c0.341333 0.512 1.024 1.024 1.536 1.365334 0.341333 0.170667 0.341333 0.341333 0.682667 0.512 0.682667 0.512 1.536 1.024 2.218667 1.536l184.661333 107.349333c0.512 0.341333 1.024 0.512 1.536 0.682667 0.170667 0 0.341333 0.170667 0.341333 0.170666 0.341333 0.170667 0.512 0.170667 0.853334 0.341334 0.170667 0 0.341333 0.170667 0.512 0.170666 0.170667 0 0.341333 0.170667 0.512 0.170667s0.341333 0.170667 0.682666 0.170667h1.365334c0.341333 0 0.512 0 0.853333-0.170667h0.341333c0.341333 0 0.341333-0.170667 0.682667-0.170667 0 0 0.170667 0 0.170667-0.170666l0.853333-0.341334-14.677333 8.533334zM797.354667 618.154667c6.485333 3.754667 11.776 0.682667 11.776-6.656s-5.12-16.554667-11.605334-20.138667l-185.344-107.008c-6.485333-3.754667-11.776-0.682667-11.776 6.656s5.12 16.554667 11.605334 20.138667l185.344 107.008zM695.125333 500.394667c6.485333 3.754667 11.776 0.682667 11.776-6.656s-5.12-16.554667-11.605333-20.138667l-104.106667-60.074667c-6.485333-3.754667-11.776-0.682667-11.776 6.656s5.12 16.554667 11.605334 20.138667l104.106666 60.074667zM724.992 486.741333l-14.677333 8.533334c-0.170667 0.170667-0.341333 0.170667-0.512 0.341333h-0.170667s-0.170667 0-0.170667 0.170667c-0.170667 0-0.170667 0.170667-0.341333 0.170666s-0.341333 0-0.341333 0.170667h-0.341334c-0.341333 0-0.341333 0-0.682666 0.170667h-1.706667c-0.170667 0-0.341333 0-0.512-0.170667h-0.341333c-0.170667 0-0.170667 0-0.341334-0.170667-0.341333-0.170667-0.512-0.170667-0.853333-0.341333-0.170667 0-0.170667 0-0.341333-0.170667 0 0-0.170667 0-0.170667-0.170666-0.512-0.341333-1.024-0.341333-1.536-0.682667l-104.106667-60.074667 14.677334-8.533333 104.106666 60.074667c0.512 0.341333 1.024 0.512 1.536 0.682666 0.170667 0 0.341333 0.170667 0.341334 0.170667 0.341333 0.170667 0.512 0.170667 0.853333 0.341333 0.170667 0 0.341333 0.170667 0.512 0.170667 0.170667 0 0.341333 0.170667 0.512 0.170667 0.341333 0 0.341333 0.170667 0.682667 0.170666h1.365333c0.341333 0 0.512 0 0.853333-0.170666h0.341334c0.341333 0 0.341333-0.170667 0.682666-0.170667 0 0 0.170667 0 0.170667-0.170667 0.170667-0.170667 0.512-0.341333 0.512-0.512z m-129.024-53.930666c-0.341333-0.170667-0.341333-0.341333-0.682667-0.512-0.341333-0.341333-0.682667-0.512-1.024-1.024-0.170667-0.170667-0.341333-0.341333-0.341333-0.512l-0.341333-0.341334-0.341334-0.341333c-0.341333-0.341333-0.682667-0.853333-1.024-1.024l-0.341333-0.341333c0-0.170667-0.170667-0.170667-0.170667-0.341334-0.170667-0.170667-0.170667-0.341333-0.341333-0.341333-0.341333-0.341333-0.341333-0.682667-0.682667-1.024-0.341333-0.341333-0.341333-0.682667-0.512-1.024v-0.341333l-0.341333-0.853334-0.512-1.024c-0.170667-0.341333-0.341333-0.512-0.341333-1.024-0.170667-0.341333-0.341333-0.682667-0.341334-1.024-0.170667-0.341333-0.341333-0.682667-0.341333-1.024 0-0.170667-0.170667-0.341333-0.170667-0.512 0-0.170667 0-0.170667-0.170666-0.341333 0-0.170667-0.170667-0.341333-0.170667-0.341333-0.170667-0.341333-0.341333-1.024-0.341333-1.365334 0-0.341333-0.170667-0.512-0.170667-0.853333 0-0.170667 0-0.341333-0.170667-0.341333v-0.341334c-0.170667-0.853333-0.170667-1.536-0.170666-2.389333 0-3.754667 1.365333-6.314667 3.413333-7.509333l14.677333-8.533334c-2.048 1.194667-3.413333 3.754667-3.413333 7.509334 0 0.853333 0.170667 1.706667 0.341333 2.730666 0 0.170667 0 0.341333 0.170667 0.341334l0.512 2.56c0 0.170667 0 0.170667 0.170667 0.341333 0.341333 1.024 0.682667 1.877333 1.024 2.730667 0.341333 1.024 0.853333 1.877333 1.365333 2.730666v0.170667l1.706667 2.389333c0 0.170667 0.170667 0.170667 0.170666 0.341334 0.512 0.682667 1.024 1.365333 1.706667 2.048l0.341333 0.341333c0.341333 0.512 1.024 1.024 1.536 1.365333 0.341333 0.170667 0.341333 0.341333 0.682667 0.512 0.682667 0.512 1.536 1.024 2.218667 1.536l-14.677334 8.533334c-1.536-0.512-2.218667-0.853333-2.901333-1.536zM716.8 485.888c6.485333 3.754667 11.776 0.682667 11.776-6.656s-5.12-16.554667-11.605333-20.138667l-104.106667-60.074666c-6.485333-3.754667-11.776-0.682667-11.776 6.656s5.12 16.554667 11.605333 20.138666l104.106667 60.074667zM1008.810667 461.312l-20.138667 11.776c0.170667 0 0.341333-0.170667 0.512-0.170667l20.138667-11.776c-0.170667 0-0.341333 0.170667-0.512 0.170667M1009.322667 461.141333l-20.138667 11.776 0.682667-0.341333 20.309333-11.776-0.853333 0.341333M1010.176 460.8l-20.309333 11.776h0.170666l20.138667-11.776M856.746667 244.224l-20.138667 11.776c-0.512 0.682667-1.024 1.024-1.706667 1.536L855.04 245.76c0.512-0.341333 1.024-1.024 1.706667-1.536M983.04 476.16l-20.138667 11.776 25.770667-14.677333 20.138667-11.776L983.04 476.16zM957.269333 541.184c-0.341333 0.170667-0.512 0.341333-0.682666 0.341333-0.170667 0.170667-0.341333 0.170667-0.512 0.341334-0.170667 0-0.170667 0.170667-0.341334 0.170666s-0.170667 0-0.341333 0.170667c-0.341333 0.170667-0.512 0.170667-1.024 0.341333h-0.170667c-0.341333 0-0.682667 0.170667-1.024 0.170667H950.613333c-0.341333 0-0.512-0.170667-0.682666-0.170667-0.341333 0-0.512-0.170667-0.853334-0.170666h-0.170666c-0.170667 0-0.341333-0.170667-0.512-0.170667l-1.536-0.512c-0.170667 0-0.341333-0.170667-0.341334-0.170667-0.341333-0.170667-0.512-0.170667-0.682666-0.341333-0.170667-0.170667-0.341333-0.170667-0.512-0.341333-0.682667-0.341333-1.194667-0.682667-1.877334-1.024l-27.306666-15.701334c-0.853333-0.512-1.706667-1.024-2.56-1.365333-0.170667 0-0.170667-0.170667-0.341334-0.170667-0.512-0.341333-1.194667-0.341333-1.706666-0.512-0.341333-0.170667-0.512-0.170667-0.853334-0.170666-0.170667 0-0.341333-0.170667-0.512-0.170667-0.341333-0.170667-0.853333-0.170667-1.194666-0.170667h-1.536c-0.341333 0-0.682667 0.170667-1.024 0.341334h-0.170667l-1.024 0.512 20.138667-11.776h0.170666c0.341333-0.170667 0.341333-0.341333 0.682667-0.341334 0.170667 0 0.341333-0.170667 0.341333-0.170666h0.341334c0.341333-0.170667 0.512-0.170667 0.682666-0.170667h1.706667c0.341333 0 0.682667 0 1.024 0.170667h0.170667c0.170667 0 0.341333 0.170667 0.512 0.170666 0.341333 0 0.341333 0.170667 0.682666 0.170667h0.170667c0.512 0.170667 1.024 0.341333 1.706667 0.512h0.170666s0.170667 0 0.170667 0.170667c0.853333 0.341333 1.706667 0.853333 2.56 1.365333l27.306667 15.701333c0.682667 0.341333 1.194667 0.682667 1.877333 1.024 0.170667 0.170667 0.341333 0.170667 0.512 0.341334 0.341333 0.170667 0.682667 0.341333 1.024 0.341333l1.536 0.512c0.341333 0.170667 0.512 0.170667 0.682667 0.341333 0.341333 0.170667 0.512 0.170667 0.853333 0.170667 0.341333 0.170667 0.682667 0.170667 1.024 0.170667h2.048c0.512 0 1.024 0 1.365333-0.170667h0.170667c0.341333-0.170667 0.853333-0.170667 1.194667-0.341333 0.170667 0 0.170667 0 0.341333-0.170667 0.341333-0.170667 0.853333-0.341333 1.194667-0.512l-20.309334 11.264z m-159.914666-301.738667l-0.170667 31.402667c0 5.461333-3.072 9.216-6.314667 10.922667l-20.138666 11.776c3.072-1.877333 6.314667-5.461333 6.314666-10.922667l13.482667-7.850667-13.482667 7.850667 0.170667-31.402667c0-3.925333 0.853333-7.168 2.218667-9.557333 0.853333-1.365333 1.877333-2.389333 3.072-3.072l20.138666-11.776c-3.413333 1.877333-5.290667 6.314667-5.290666 12.629333zM890.538667 521.898667c4.778667 2.730667 9.728 3.242667 13.653333 1.024l19.456-11.093334c3.242667-3.754667 8.021333-2.730667 12.8 0l27.306667 15.701334c11.264 6.485333 19.285333 1.877333 19.456-11.093334l0.170666-40.618666 25.770667-14.677334c8.021333-2.730667 8.021333-17.408-1.536-32.256l-19.285333-33.28c-4.778667-6.485333-6.485333-12.970667-6.485334-18.432l0.170667-31.402666c0-12.970667-7.850667-26.794667-19.285333-33.28l-27.306667-15.701334c-4.778667-2.730667-9.728-9.216-12.8-14.677333l-19.285333-33.109333c-3.925333-6.997333-8.704-11.946667-13.653334-14.677334-4.778667-2.730667-9.728-3.242667-13.653333-1.024l-19.285333 11.093334c-3.242667 3.754667-8.021333 2.730667-12.8 0l-27.477334-15.872c-11.264-6.485333-19.285333-1.877333-19.456 11.093333l-0.170666 31.402667c0 5.632-3.242667 9.216-6.485334 11.093333l-19.456 11.093333c-8.021333 4.608-8.021333 17.408-0.170666 31.402667l19.285333 35.157333c4.778667 6.485333 6.485333 12.970667 6.485333 18.432l-0.170666 31.402667c0 12.970667 7.850667 26.794667 19.285333 33.28l27.306667 15.701333c4.778667 2.730667 9.728 9.216 14.506666 15.701334l19.285334 33.28c4.096 6.485333 9.045333 11.605333 13.824 14.336zM928.426667 458.752l2.56-5.461333c-27.477333-45.909333-50.005333-101.205333-57.002667-126.805334l-41.472 25.941334 10.581333 16.042666 23.893334-8.362666c9.728 19.626667 31.402667 59.562667 61.44 98.645333z m-25.258667 64.853333l-19.456 11.093334c-0.341333 0.341333-0.853333 0.341333-1.194667 0.512 0 0-0.170667 0-0.170666 0.170666-0.170667 0-0.341333 0.170667-0.341334 0.170667-0.170667 0.170667-0.341333 0.170667-0.512 0.341333-0.170667 0-0.341333 0.170667-0.512 0.170667s-0.341333 0-0.341333 0.170667h-0.341333c-0.341333 0.170667-0.853333 0.170667-1.194667 0.170666h-2.730667c-0.170667 0-0.341333 0-0.341333-0.170666-0.341333 0-0.512-0.170667-0.682667-0.170667-0.170667 0-0.341333 0-0.341333-0.170667-0.170667 0-0.341333-0.170667-0.341333-0.170666l-1.194667-0.341334c-0.170667 0-0.341333-0.170667-0.341333-0.170666-0.170667 0-0.170667-0.170667-0.341334-0.170667-0.682667-0.341333-1.536-0.682667-2.218666-1.024-0.512-0.341333-1.024-0.682667-1.706667-1.024-0.170667-0.170667-0.341333-0.341333-0.512-0.341333-0.341333-0.341333-0.853333-0.512-1.024-0.853334l-0.512-0.512-1.024-1.024-0.512-0.512c-0.170667-0.170667-0.341333-0.170667-0.341333-0.341333-0.170667-0.170667-0.341333-0.341333-0.341334-0.512-0.341333-0.341333-0.853333-0.853333-1.194666-1.365333l-0.341334-0.341334c-0.170667-0.170667-0.341333-0.341333-0.341333-0.512-0.341333-0.341333-0.512-0.512-0.853333-1.024-0.170667-0.170667-0.341333-0.341333-0.341334-0.512-0.170667-0.341333-0.341333-0.341333-0.512-0.682666-0.170667-0.341333-0.341333-0.512-0.512-0.853334-0.170667-0.170667-0.170667-0.341333-0.341333-0.341333-0.341333-0.341333-0.512-0.853333-0.853333-1.024-0.170667-0.170667-0.341333-0.341333-0.341334-0.512l-0.170666-0.170667c-0.341333-0.682667-0.853333-1.365333-1.194667-1.877333 0-0.170667-0.170667-0.170667-0.170667-0.341333l-19.285333-33.28-3.754667-4.949334c-0.341333-0.341333-0.682667-0.853333-1.024-1.365333-0.341333-0.341333-0.341333-0.512-0.682666-0.853333-0.341333-0.512-1.024-1.024-1.365334-1.706667l-0.341333-0.341333-0.170667-0.170667c-0.682667-0.853333-1.536-1.706667-2.218666-2.389333l-0.682667-0.682667c-0.512-0.341333-1.024-1.024-1.536-1.365333-0.341333-0.170667-0.341333-0.341333-0.682667-0.512l-2.048-1.536-27.306666-15.701334c-1.194667-0.682667-2.389333-1.536-3.413334-2.389333-0.170667-0.170667-0.341333-0.170667-0.341333-0.341333l-3.072-2.56-0.341333-0.341334c-0.170667-0.170667-0.170667-0.341333-0.341334-0.341333-0.341333-0.341333-1.024-1.024-1.365333-1.536l-0.341333-0.341333-0.170667-0.170667c-0.170667-0.341333-0.341333-0.512-0.512-0.682667-0.341333-0.341333-0.512-0.512-0.682667-0.853333-0.170667-0.170667-0.170667-0.341333-0.341333-0.341333-0.170667-0.170667-0.341333-0.341333-0.341333-0.512-0.170667-0.341333-0.341333-0.341333-0.512-0.682667-0.170667-0.341333-0.341333-0.341333-0.341334-0.682667-0.170667-0.170667-0.341333-0.341333-0.341333-0.512-0.170667-0.170667-0.170667-0.341333-0.341333-0.341333-0.341333-0.512-0.512-1.024-1.024-1.536v-0.170667c0-0.170667-0.170667-0.170667-0.170667-0.341333-0.341333-0.341333-0.341333-0.682667-0.512-1.024-0.170667-0.341333-0.341333-0.341333-0.341333-0.682667-0.170667-0.170667-0.170667-0.341333-0.341334-0.512 0-0.170667-0.170667-0.341333-0.170666-0.341333-0.341333-0.512-0.512-1.024-0.682667-1.536v-0.170667c0-0.170667-0.170667-0.341333-0.170667-0.341333-0.170667-0.341333-0.341333-0.853333-0.341333-1.024-0.170667-0.170667-0.170667-0.341333-0.341333-0.682667l-0.341334-0.682666c0-0.170667-0.170667-0.341333-0.170666-0.512l-0.341334-1.194667c0-0.170667-0.170667-0.341333-0.170666-0.512v-0.170667c-0.170667-0.512-0.341333-1.024-0.341334-1.536 0-0.341333-0.170667-0.341333-0.170666-0.682666v-0.170667c0-0.170667 0-0.341333-0.170667-0.341333-0.170667-0.682667-0.341333-1.536-0.341333-2.218667v-0.682667c-0.170667-1.365333-0.341333-2.56-0.341334-3.925333l0.170667-31.402667c0-1.024-0.170667-2.218667-0.341333-3.413333v-0.512c0-0.341333-0.170667-0.853333-0.341334-1.194667 0-0.341333-0.170667-0.682667-0.341333-1.024 0-0.170667-0.170667-0.341333-0.170667-0.512l-0.341333-1.706666c0-0.170667-0.170667-0.341333-0.170667-0.341334-0.341333-0.682667-0.341333-1.365333-0.853333-2.048 0-0.170667-0.170667-0.170667-0.170667-0.341333l-1.024-2.048c0-0.170667-0.170667-0.170667-0.170666-0.341333-0.341333-0.682667-0.853333-1.536-1.194667-2.218667 0-0.170667-0.170667-0.170667-0.170667-0.341333-0.512-0.853333-1.024-1.536-1.706666-2.389334L750.933333 336.042667c-0.341333-0.512-0.682667-1.194667-1.024-1.706667-0.170667-0.170667-0.170667-0.341333-0.341333-0.512-0.170667-0.341333-0.341333-0.341333-0.341333-0.682667-0.170667-0.341333-0.341333-0.341333-0.341334-0.682666l-0.512-1.024c-0.170667-0.170667-0.170667-0.341333-0.341333-0.512 0-0.170667-0.170667-0.170667-0.170667-0.341334-0.341333-0.682667-0.512-1.194667-0.853333-1.706666v-0.170667c0-0.170667-0.170667-0.341333-0.170667-0.512l-0.341333-1.194667c0-0.170667-0.170667-0.341333-0.170667-0.512-0.170667-0.341333-0.170667-0.512-0.341333-0.853333 0-0.341333-0.170667-0.341333-0.170667-0.682667-0.170667-0.341333-0.170667-0.512-0.170666-0.682666-0.170667-0.341333-0.170667-0.682667-0.341334-1.024 0-0.170667-0.170667-0.341333-0.170666-0.341334 0-0.341333-0.170667-0.341333-0.170667-0.682666-0.170667-0.341333-0.170667-1.024-0.341333-1.365334 0-0.170667 0-0.341333-0.170667-0.341333v-0.512c0-0.512-0.170667-1.024-0.170667-1.536v-3.072c0-0.682667 0.170667-1.536 0.341334-2.048v-0.170667c0.170667-0.682667 0.341333-1.194667 0.512-1.706666 0.170667-0.170667 0.170667-0.341333 0.341333-0.512 0.170667-0.341333 0.341333-0.853333 0.512-1.194667 0.170667-0.341333 0.341333-0.341333 0.341333-0.512 0.341333-0.341333 0.341333-0.682667 0.682667-1.024 0.170667-0.170667 0.341333-0.341333 0.341333-0.512 0.341333-0.341333 0.512-0.682667 1.024-1.024l0.341334-0.341333c0.512-0.341333 1.024-0.853333 1.536-1.024l20.138666-11.776-1.536 1.024-0.341333 0.341333-1.024 1.024c-0.170667 0.170667-0.341333 0.341333-0.341333 0.512-0.341333 0.341333-0.341333 0.682667-0.682667 1.024-0.170667 0.170667-0.341333 0.341333-0.341333 0.512-0.170667 0.341333-0.341333 0.853333-0.512 1.194667-0.170667 0.170667-0.170667 0.341333-0.341334 0.512-0.170667 0.512-0.341333 1.024-0.512 1.706666v0.170667c-0.170667 0.682667-0.341333 1.365333-0.341333 2.048v3.072c0 0.512 0 1.024 0.170667 1.536 0 0.341333 0.170667 0.682667 0.170666 1.024s0.170667 1.024 0.341334 1.365333c0.170667 0.341333 0.170667 0.682667 0.341333 1.024s0.170667 0.682667 0.341333 1.024 0.341333 1.024 0.341334 1.365334c0.170667 0.341333 0.170667 0.512 0.341333 0.853333 0.170667 0.512 0.341333 1.024 0.512 1.706667 0 0.170667 0.170667 0.341333 0.170667 0.512 0.341333 0.682667 0.512 1.536 1.024 2.218666 0.170667 0.170667 0.170667 0.341333 0.341333 0.512 0.341333 0.512 0.512 1.194667 0.853333 1.706667 0.170667 0.341333 0.341333 0.341333 0.341334 0.682667 0.341333 0.853333 0.853333 1.536 1.194666 2.389333l-13.482666 7.850667 13.482666-7.850667 19.285334 35.157333c0.341333 0.341333 0.341333 0.512 0.512 0.853334l0.853333 1.194666c0 0.170667 0.170667 0.170667 0.170667 0.341334s0.170667 0.170667 0.170666 0.341333c0.170667 0.341333 0.341333 0.512 0.341334 0.682667 0.341333 0.341333 0.341333 0.853333 0.682666 1.024 0 0.170667 0.170667 0.170667 0.170667 0.341333s0.170667 0.170667 0.170667 0.341333c0.170667 0.170667 0.341333 0.341333 0.341333 0.512 0.170667 0.341333 0.341333 0.853333 0.512 1.024 0 0.170667 0.170667 0.341333 0.170667 0.341334 0 0.170667 0.170667 0.170667 0.170666 0.341333 0.170667 0.170667 0.170667 0.341333 0.341334 0.512l0.341333 1.194667c0 0.170667 0 0.170667 0.170667 0.341333 0 0.170667 0.170667 0.341333 0.170666 0.341333 0.170667 0.341333 0.170667 0.512 0.341334 0.853334s0.170667 0.512 0.341333 0.853333c0 0.170667 0.170667 0.341333 0.170667 0.512v0.341333c0 0.341333 0.170667 0.512 0.170666 0.853334 0.170667 0.341333 0.170667 0.853333 0.341334 1.194666v0.682667c0.170667 1.194667 0.341333 2.389333 0.341333 3.413333L797.013333 409.6c0 1.365333 0.170667 2.56 0.341334 3.925333v0.682667c0.170667 0.682667 0.341333 1.536 0.341333 2.218667 0 0.170667 0 0.341333 0.170667 0.512 0 0.341333 0.170667 0.341333 0.170666 0.682666l0.341334 1.706667c0 0.170667 0.170667 0.341333 0.170666 0.512 0.170667 0.512 0.341333 1.024 0.512 1.706667l0.341334 0.682666c0.341333 0.512 0.341333 1.194667 0.682666 1.706667 0 0.170667 0.170667 0.341333 0.170667 0.341333 0.341333 0.682667 0.512 1.365333 1.024 2.048 0.170667 0.170667 0.170667 0.341333 0.341333 0.341334 0.341333 0.512 0.682667 1.194667 1.024 1.706666 0 0.170667 0.170667 0.170667 0.170667 0.341334 0.341333 0.682667 0.853333 1.194667 1.194667 1.877333 0.170667 0.170667 0.341333 0.341333 0.341333 0.512 0.341333 0.341333 0.682667 1.024 1.024 1.365333 0.170667 0.170667 0.341333 0.341333 0.341333 0.512 0.341333 0.341333 0.682667 0.853333 1.024 1.194667 0.170667 0.341333 0.341333 0.512 0.512 0.682667 0.170667 0.341333 0.341333 0.341333 0.512 0.682666 0.341333 0.512 1.024 1.024 1.365334 1.536l0.512 0.512c1.024 1.024 1.877333 1.706667 3.072 2.56 0.170667 0.170667 0.341333 0.170667 0.341333 0.341334 1.024 0.853333 2.218667 1.706667 3.413333 2.389333l27.306667 15.701333c0.682667 0.341333 1.365333 1.024 2.048 1.536 0.341333 0.170667 0.341333 0.341333 0.682667 0.512 0.512 0.341333 1.024 0.853333 1.536 1.365334 0.170667 0.170667 0.341333 0.170667 0.341333 0.341333l0.341333 0.341333c0.682667 0.682667 1.536 1.536 2.218667 2.389334l0.170667 0.170666c0.170667 0.170667 0.341333 0.341333 0.341333 0.512 0.341333 0.512 0.853333 1.024 1.365333 1.536 0.341333 0.341333 0.341333 0.512 0.682667 0.853334s0.682667 0.853333 1.024 1.194666c0 0 0 0.170667 0.170667 0.170667l3.754666 4.949333 19.285334 33.28c0.341333 0.853333 1.024 1.706667 1.536 2.389334 0.170667 0.170667 0.341333 0.341333 0.341333 0.512l1.024 1.536c0.170667 0.341333 0.341333 0.512 0.512 0.853333 0.341333 0.341333 0.682667 0.853333 1.024 1.194667 0.341333 0.341333 0.512 0.682667 0.853333 1.024 0.341333 0.341333 0.512 0.682667 0.853334 1.024 0.341333 0.341333 0.853333 1.024 1.194666 1.365333l0.853334 0.853333 0.512 0.512 1.024 1.024 0.512 0.512c0.341333 0.341333 0.853333 0.512 1.024 0.853334 0.170667 0.170667 0.341333 0.341333 0.512 0.341333 0.512 0.341333 1.024 0.682667 1.706666 1.024 0.682667 0.341333 1.536 0.853333 2.218667 1.024 0.341333 0.170667 0.512 0.170667 0.682667 0.341333l1.194666 0.341334c0.341333 0.170667 0.512 0.170667 0.853334 0.341333 0.341333 0 0.512 0.170667 0.682666 0.170667 0.341333 0 0.682667 0.170667 1.024 0.170666h2.048c0.512 0 1.024-0.170667 1.536-0.170666 0.170667 0 0.341333 0 0.341334-0.170667 0.341333-0.170667 0.682667-0.170667 1.024-0.341333 0.170667 0 0.341333-0.170667 0.341333-0.170667 0.512-0.170667 1.024-0.341333 1.365333-0.682667l19.456-11.093333-20.821333 11.093333zM886.613333 352.256c0.170667 0.341333 0.341333 0.341333 0.341334 0.682667 0.682667 1.365333 1.365333 2.56 2.218666 4.096 0.341333 0.853333 1.024 1.706667 1.365334 2.56s1.024 1.706667 1.365333 2.56c0.512 1.024 1.024 1.877333 1.536 2.901333 0.512 1.024 1.024 1.706667 1.536 2.730667 0.512 1.024 1.024 1.877333 1.706667 3.072l1.706666 2.901333c0.512 1.024 1.194667 2.048 1.706667 3.072 0.512 1.024 1.024 2.048 1.706667 3.072 0.341333 0.682667 0.682667 1.194667 1.024 1.877333l2.389333 4.096c0.341333 0.853333 1.024 1.536 1.365333 2.389334 0.853333 1.194667 1.536 2.56 2.389334 3.754666 0.512 0.853333 1.024 1.706667 1.706666 2.56 0.853333 1.194667 1.706667 2.56 2.389334 3.754667 0.512 0.853333 1.024 1.706667 1.706666 2.56 0.512 1.024 1.024 1.706667 1.706667 2.730667 1.877333 3.072 3.754667 5.973333 5.802667 9.045333 0.341333 0.341333 0.341333 0.512 0.512 1.024 2.218667 3.242667 4.437333 6.485333 6.656 9.898667 0.682667 0.853333 1.194667 1.706667 1.877333 2.56 1.365333 1.877333 2.730667 3.925333 4.266667 5.802666 0.682667 1.024 1.194667 1.706667 1.877333 2.730667 2.048 2.901333 4.096 5.632 6.314667 8.533333l-14.677334 8.533334c-2.218667-2.901333-4.266667-5.632-6.314666-8.533334-0.682667-1.024-1.194667-1.706667-1.877334-2.56-1.536-1.877333-2.901333-3.925333-4.266666-5.802666l-1.024-1.536-0.853334-1.194667c-2.389333-3.242667-4.437333-6.485333-6.656-9.898667-0.341333-0.341333-0.341333-0.512-0.512-1.024-2.048-3.072-3.925333-5.973333-5.802666-9.045333l-0.853334-1.194667-1.024-1.536c-0.512-1.024-1.024-1.706667-1.706666-2.56-0.853333-1.365333-1.706667-2.56-2.389334-3.754666-0.512-0.853333-1.024-1.706667-1.706666-2.56-0.853333-1.365333-1.706667-2.56-2.389334-3.754667-0.341333-0.853333-1.024-1.536-1.365333-2.389333l-2.389333-4.096c-0.341333-0.682667-0.853333-1.194667-1.024-1.877334-0.170667-0.170667-0.170667-0.341333-0.341334-0.341333l-1.536-2.56c-0.682667-1.024-1.194667-2.218667-1.706666-3.072l-1.706667-2.901333c-0.512-1.024-1.024-2.048-1.706667-3.072-0.512-1.024-1.024-1.706667-1.536-2.730667-0.512-1.024-1.024-1.877333-1.536-2.901333-0.341333-0.853333-1.024-1.706667-1.365333-2.389334-0.512-1.024-1.024-1.706667-1.365333-2.56-0.170667-0.170667-0.170667-0.341333-0.341334-0.341333-0.682667-1.194667-1.194667-2.389333-1.877333-3.584-0.170667-0.341333-0.341333-0.512-0.341333-0.682667l-1.706667-3.242666-0.512-1.024c-0.512-1.194667-1.194667-2.389333-1.706667-3.413334l-24.064 8.362667-10.581333-16.042667 14.677333-8.533333 10.581334 16.042667 24.064-8.362667c0.512 1.024 1.024 2.218667 1.706666 3.413333l0.512 1.024c0.853333 0.512 1.536 1.706667 2.048 2.730667zM889.514667 310.784l-14.677334 8.533333-41.472 25.941334 14.677334-8.533334 41.472-25.941333zM944.128 443.050667l2.56-5.461334c-27.477333-45.909333-50.005333-101.205333-57.002667-126.805333L848.213333 336.725333l10.581334 16.042667 24.064-8.362667c9.557333 19.626667 31.232 59.562667 61.269333 98.645334z" horiz-adv-x="1365" /> + + + <glyph glyph-name="tour" unicode="" d="M426.5 788.9h167.2v-83.1h47.9V830.4h-263v-124.6h47.9v83.1z m0 0M653.5-21.1c0-14.8 9.1-28.5 23.9-35.9 14.8-7.4 33-7.4 47.8 0 14.8 7.4 23.9 21.1 23.9 35.9 0 14.8-9.1 28.5-23.9 35.9-14.8 7.4-33 7.4-47.8 0-14.8-7.4-23.9-21.1-23.9-35.9z m0 0M283-21.1c0-22.9 21.4-41.5 47.8-41.5s47.8 18.6 47.8 41.5c0 14.8-9.1 28.5-23.9 35.9-14.8 7.4-33 7.4-47.8 0-14.8-7.4-23.9-21.1-23.9-35.9z m0 0M797 705.7H223.3c-26.5 0-47.8-18.6-47.8-41.5v-581.5c0-23 21.4-41.5 47.8-41.5H797c26.5 0 47.8 18.6 47.8 41.5V664.2c-0.1 22.9-21.5 41.5-47.8 41.5zM318.9 165.9c0-5.8-5.3-10.4-11.9-10.4-6.6 0-11.9 4.6-11.9 10.4V581.1c0 5.7 5.3 10.4 11.9 10.4 6.6 0 11.9-4.6 11.9-10.4v-415.2z m135.4 0c0-5.8-5.3-10.4-11.9-10.4-6.6 0-11.9 4.6-11.9 10.4V581.1c0 5.7 5.3 10.4 11.9 10.4 6.6 0 11.9-4.6 11.9-10.4v-415.2z m135.5 0c0-5.8-5.3-10.4-11.9-10.4-6.6 0-11.9 4.6-11.9 10.4V581.1c0 5.7 5.3 10.4 11.9 10.4 6.6 0 11.9-4.6 11.9-10.4v-415.2z m135.4 0c0-5.8-5.3-10.4-11.9-10.4s-11.9 4.6-11.9 10.4V581.1c0 5.7 5.3 10.4 11.9 10.4s11.9-4.6 11.9-10.4v-415.2z m0 0" horiz-adv-x="1024" /> + + + <glyph glyph-name="car" unicode="" d="M893.2 430c18.1-44.8 44.8-89.6 44.8-134.4v-223.9c0-29.3-25.1-44.8-67.2-44.8s-67.2 18.1-67.2 44.8v44.8H221.4v-44.8c0-26.6-25.1-44.8-67.2-44.8S87 42.4 87 71.7V295.6c0 44.8 26.6 89.6 44.8 134.4s-67.2 39.2-67.2 67.2 5.6 44.8 44.8 44.8h67.2s31.8 91.4 44.8 134.4c13 43 67.2 67.2 112 67.2h358.3c44.8 0 99-24.2 112-67.2S848.5 542 848.5 542h67.2c39.2 0 44.8-16.8 44.8-44.8S875 474.7 893.2 430zM400.5 273.2c0-12.4 10-22.4 22.4-22.4H602c12.4 0 22.4 10 22.4 22.4v22.4c0 12.4-10 22.4-22.4 22.4H422.9c-12.4 0-22.4-10-22.4-22.4v-22.4z m-223.9 0c0-37.1 30.1-67.2 67.2-67.2s67.2 30.1 67.2 67.2-30.1 67.2-67.2 67.2-67.2-30.1-67.2-67.2z m627 268.7c0 22.4-44.8 112-44.8 112H266.2s-44.8-89.6-44.8-112v-22.4c0-24.7 20.1-44.8 44.8-44.8h492.6c24.7 0 44.8 20.1 44.8 44.8v22.4z m-22.4-201.5c-37.1 0-67.2-30.1-67.2-67.2s30.1-67.2 67.2-67.2 67.2 30.1 67.2 67.2-30.1 67.2-67.2 67.2z" horiz-adv-x="1024" /> + + + <glyph glyph-name="coupon" unicode="" d="M928.4 296.4c-51.1 25.5-66.4 46-66.4 86.8 0 38.3 15.3 58.7 66.4 86.8 28.1 17.9 30.7 33.2 30.7 58.7V674.5c0 46-38.3 84.3-84.3 84.3H149.3c-46 0-84.3-38.3-84.3-84.3v-145.6c0-23 2.6-43.4 30.7-58.7 20.4-10.2 66.4-35.8 66.4-86.8 0-56.2-33.2-74.1-63.9-84.3h-2.6C67.5 281.1 65 253 65 240.2v-145.6c0-46 38.3-84.3 84.3-84.3h725.4c46 0 84.3 38.3 84.3 84.3V240.2c0 28.1-10.2 38.4-30.6 56.2z m-281 51.1c15.3 0 28.1-12.8 28.1-28.1s-12.8-28.1-28.1-28.1H540.1V184c0-15.3-12.8-28.1-28.1-28.1s-28.1 12.8-28.1 28.1V291.3H376.6c-15.3 0-28.1 12.8-28.1 28.1s12.8 28.1 28.1 28.1h107.3v66.4H369c-15.3 0-28.1 12.8-28.1 28.1s12.8 28.1 28.1 28.1h84.3l-89.4 89.4c-10.2 10.2-10.2 28.1 0 38.3 10.2 10.2 28.1 10.2 38.3 0L512 488l109.8 109.8c10.2 10.2 28.1 10.2 38.3 0 10.2-10.2 10.2-28.1 0-38.3l-89.4-89.4h81.7c15.3 0 28.1-12.8 28.1-28.1s-12.8-28.1-28.1-28.1H537.5v-66.4h109.9z" horiz-adv-x="1024" /> + + + <glyph glyph-name="gift" unicode="" d="M476.8 632.3v-201.1H64.2V592.6c0 25.4 20.1 45.7 45.3 45.7h188c-50.5 10.7-88.4 32.5-89.8 72.8-1.4 47.5 51.6 124.3 129 106.8 79.9-18.2 135.8-80.7 178.5-134.3 43.2 54.7 104.3 125 187.8 136.1 69.7 8.9 127.3-61.5 119.9-107.9-6.4-40.7-44.9-62.9-94.1-73.5h185.6c25.2 0 45.3-20.4 45.3-45.7v-161.4H547.1l-0.9 203.2M345.3 775.8c-38.6 15.4-61.2-1.1-77.4-28.2-8.8-15.3-18.4-35.7-4.3-50.7 37.1-38.6 138.9-35.7 207.2-28.6-32.2 40.7-71.8 86.1-125.5 107.5z m421.8-78.6c26.5 34.3-25.4 105.8-81.3 79.3-53.4-25.4-91.9-66.8-125.1-107.5 28.6-2.5 57.6-3.2 86.3-1.8 34.9 1.5 99.6 3.9 120.1 30zM479.6-51.7H143.3c-22.6 0-41 18.5-41 41.7V398.6h377.3v-450.3c0.1 0 0 0 0 0z m442 41.8c0-23.2-18.4-41.7-41-41.7H544.3V398.7h377.2v-408.6z" horiz-adv-x="1024" /> + + + <glyph glyph-name="hotel" unicode="" d="M266.4 584v44.8H535V584H266.4z m0-134.3v44.8H535v-44.8H266.4z m0-134.3v44.8H535v-44.8H266.4z m0-134.3v44.8H535v-44.8H266.4zM915.6 2V516.9c0 5.9-2.4 11.6-6.6 15.8-4.2 4.2-9.9 6.6-15.8 6.6H758.9c-5.9 0-11.6-2.4-15.8-6.6-4.2-4.2-6.6-9.9-6.6-15.8V2h-44.8V763.1c0 24.7-20 44.8-44.7 44.8H154.4c-11.9 0-23.3-4.7-31.6-13.2-8.4-8.4-13.1-19.8-13.1-31.7v-761H64.9v-44.8h895.5V2h-44.8z m0 0" horiz-adv-x="1024" /> + + + <glyph glyph-name="ensure" unicode="" d="M924.4 673.5C792.7 678.3 510.5 826 510.5 826h-4.7S231.3 678.3 99.6 673.6c-11-55.6 7.1-398.5 99.6-535.1 61.2-92.1 249.5-174.1 305.8-194.9 0 0 3.5-3.2 11-0.4 72.7 27.3 235.2 92.1 308.8 195.3 101.9 155.6 110.4 478.1 99.6 535zM676.7 412.3H543.4v-62.4h133.3v-51.7H543.4v-118.9h-63.2V298.2H348v51.7h132.1v62.4H348v52.2h107.4l-70 124.6h69.3s54.7-101.1 57.2-110.2c2.8 9.9 58 110.2 58 110.2h69.3l-70.9-124.6h108.3v-52.2h0.1z" horiz-adv-x="1024" /> + + + <glyph glyph-name="supermarket" unicode="" d="M511 707.2c106.5 0 197.7-64.7 234.3-155.8H795C756.3 668 643.7 752.7 511 752.7S265.6 668 227 551.4h49.7c36.6 91 127.8 155.8 234.3 155.8z m416.6-169.9H94.4c-16.2 0-29.3-12.7-29.3-28.4v-98c0-15.7 13.1-28.4 29.3-28.4h24.5l64.4-321.3s3.6-45.1 39.1-45.1h579.5c35.5 0 39.1 45.1 39.1 45.1l64.4 321.3h22.1c16.2 0 29.3 12.7 29.3 28.4v98c0 15.7-13.1 28.4-29.2 28.4zM387.1 122.7c0-16.8-14-30.4-31.2-30.4s-31.2 13.6-31.2 30.4V369.3c0 16.8 14 30.4 31.2 30.4s31.2-13.6 31.2-30.4v-246.6z m155.1 0c0-16.8-14-30.4-31.2-30.4-17.3 0-31.2 13.6-31.2 30.4V369.3c0 16.8 14 30.4 31.2 30.4s31.2-13.6 31.2-30.4v-246.6z m155.1 0c0-16.8-14-30.4-31.2-30.4s-31.2 13.6-31.2 30.4V369.3c0 16.8 14 30.4 31.2 30.4 17.3 0 31.2-13.6 31.2-30.4v-246.6z" horiz-adv-x="1024" /> + + + <glyph glyph-name="vip" unicode="" d="M64.5 552.2l2.9 8.1c7.4 22 26.6 36.8 50.1 38.4 21.4 1.5 42.8-11 52.9-30.6 10.2-20.1 7.4-43.8-7.5-61.4-1.7-1.9-3.5-3.9-5.4-6.1 41.5-25.4 82.8-50.5 123.9-75.8 15.6-9.6 31.3-19.3 46.8-28.6 8.9-5.2 15.8-3.7 20.6 5 47.2 86.1 94.5 172.3 142.1 259.3-20.6 10.5-33.9 26.4-35.2 50.1-0.8 16.6 5 30.8 16.8 42.4 23.4 22.8 61.7 20.6 82.2-4.6 23.6-28.9 15.1-62.7-22.3-88.1 12.2-22.3 24.5-44.8 36.9-67.1 34.3-62.5 68.5-124.8 102.8-187.3 7.9-14.5 12.9-15.8 27.1-7.4 53.1 32.4 106.1 65 159.2 97.5 2.5 1.5 4.8 3.1 7.7 4.8-11 11-17.9 23.4-18.8 38.6-1.5 28.6 18.1 53.6 45.7 58.3 28.7 5 55.3-11.4 63.8-39.1 0.6-2.2 1.5-4.4 2.4-6.6v-19.3c-9-28.9-27.6-45.7-59.4-45.9-1.1-3.3-2.4-6.6-3.3-9.8-31.1-106.5-62.1-213.2-93.2-319.6-4-13.9-8.9-17.5-23-17.5H244c-15.1 0-19.7 3.5-23.8 17.5-25.3 86.4-50.3 173.1-75.6 259.5-6.8 23.4-13.7 46.7-20.6 70.2-23.8 0-41.7 9.4-52.9 29.9-2.7 5-4.4 10.7-6.6 16v19.2zM511.6 84h250.6c22.3 0 40.2-15.8 42.6-37 2.5-21.4-11.6-40.9-33.2-45.7-3.1-0.8-6.4-0.9-9.4-0.9H260.8c-19.1 0-35.2 11.4-40.7 28.6-5.7 17.2-0.4 36.7 14.9 46.5 7.9 5 18.3 8.5 27.6 8.5 83.1 0.4 166.1 0 249 0z" horiz-adv-x="1024" /> + + + <glyph glyph-name="species" unicode="" d="M411.9 487.7c0-32.2 21.5-57.3 78.7-75.2V559.3c-50-3.6-75.1-28.7-78.7-71.6z m114.6-128.9v-164.7c57.3 3.6 89.5 32.2 93.1 82.3 3.5 35.9-25.1 64.5-93.1 82.4zM512.1 831.3c-247 0-447.4-200.4-447.4-447.4s200.4-447.4 447.4-447.4 447.4 200.4 447.4 447.4S759.1 831.3 512.1 831.3z m14.4-683.7v-68h-35.8v71.6c-78.7 3.6-125.3 50.1-139.6 132.4l46.5 14.3c10.7-64.4 39.4-100.2 96.6-107.4V366c-89.5 21.5-128.9 60.8-125.3 121.7 3.6 71.6 43 111 125.3 118.1v46.5H530v-50.1c71.6-7.2 114.5-46.5 128.9-118.1l-46.5-14.3c-10.7 53.7-35.8 82.3-82.3 93.1V409c96.6-25.1 143.2-68 139.6-132.4-7.2-78.9-53.8-118.2-143.2-129z" horiz-adv-x="1024" /> + + + <glyph glyph-name="food" unicode="" d="M523.5 741.9c-54.9 0-99.3-46-99.3-102.5H623c-0.2 56.5-44.6 102.5-99.5 102.5zM81.9 61.4h860.3c9.5 0 17.2-7.7 17.2-17.2s-7.7-17.2-17.2-17.2H81.9c-9.5 0-17.2 7.7-17.2 17.2 0.1 9.4 7.8 17.2 17.2 17.2z m441.6 548.7c-221.3 0-400.7-179.4-400.7-400.7V82h801.4V209.3c0 221.4-179.4 400.8-400.7 400.8zM370.6 496.3c-43.2-19.4-79.5-51.7-103.8-92.3-2.7-4.5-8.5-6.2-13.3-3.9l-0.1 0.1c-5.1 2.5-7.1 8.6-4.6 13.7 0.1 0.3 0.3 0.5 0.4 0.7 26.6 44.2 66.1 79.3 113.2 100.3 5.1 2.3 11.2 0 13.5-5.1 2.2-5.2-0.1-11.2-5.3-13.5zM523.5 605.2c9.7 0 19.4-0.5 29-1.5v35.7h-63v-36.2c11.2 1.2 22.6 2 34 2z" horiz-adv-x="1024" /> + + + <glyph glyph-name="shopping" unicode="" d="M895.2 662.6c16.7 0 29.7-1.9 39-7.4 9.3-3.7 16.7-9.3 20.4-16.7 3.7-7.4 5.6-13 5.6-20.4s-1.9-14.9-3.7-20.4l-11.1-33.4c-5.6-16.7-13-35.3-20.4-55.7-7.4-20.4-13-40.9-20.4-59.5-7.4-20.4-13-35.3-16.7-46.5-7.4-24.2-16.7-63.2-27.9-72.5-11.1-9.3-26-14.9-44.6-14.9H339.6l11.1-59.5h459c29.7 0 42.7-13 42.7-37.2 0-13-3.7-22.3-9.3-31.6s-16.7-13-33.4-13H334c-13 0-22.3 1.9-29.7 7.4-7.4 5.6-14.9 13-20.4 20.4-5.6 9.3-9.3 18.6-13 27.9-3.7 11.1-5.6 20.4-7.4 29.7 0 3.7-1.9 13-5.6 26-1.9 13-5.6 31.6-9.3 52s-7.4 44.6-13 70.6c-5.6 26-9.3 52-14.9 78-11.1 61.3-24.2 130.1-39 204.4H113c-9.3 0-16.7 1.9-22.3 7.4-5.6 3.7-11.1 9.3-14.9 16.7-3.7 5.6-7.4 13-7.4 20.4-3.7 7.4-3.7 13-3.7 20.4 0 13 3.7 22.3 13 29.7 7.4 7.4 18.6 11.1 31.6 11.1h91c13 0 22.3-1.9 29.7-5.6s13-7.4 16.7-13 7.4-11.1 9.3-16.7c1.9-5.6 3.7-11.1 3.7-14.9 1.9-5.6 1.9-11.1 3.7-20.4 1.9-9.3 1.9-18.6 3.7-26 1.9-11.1 3.7-22.3 5.6-35.3h622.5v-1.5zM363.7 140.5c11.1 0 22.3-1.9 31.6-5.6 9.3-3.7 18.6-9.3 26-18.6 7.4-7.4 13-16.7 18.6-26 3.7-11.1 7.4-20.4 7.4-33.4 0-11.1-1.9-22.3-7.4-33.4-3.7-11.1-11.1-18.6-18.6-26-7.4-7.4-16.7-13-26-18.6-9.3-3.7-20.4-7.4-31.6-7.4s-22.3 1.9-33.4 7.4c-9.3 3.7-18.6 11.1-26 18.6-7.4 7.4-13 16.7-18.6 26-3.7 11.2-7.4 20.4-7.4 33.4 0 11.1 1.9 22.3 7.4 33.4 3.7 11.2 11.1 18.6 18.6 26 7.4 7.4 16.7 13 26 18.6 11.1 3.8 22.3 5.6 33.4 5.6z m380.9 0c11.1 0 22.3-1.9 31.6-5.6 11.1-3.7 18.6-9.3 26-18.6 7.4-7.4 13-16.7 18.6-26 3.7-11.1 7.4-20.4 7.4-33.4 0-11.1-1.9-22.3-7.4-33.4-3.7-11.1-11.1-18.6-18.6-26-7.4-7.4-16.7-13-26-18.6-11.1-3.7-20.4-7.4-31.6-7.4-11.1 0-22.3 1.9-31.6 7.4-9.3 3.7-18.6 11.1-26 18.6-7.4 7.4-13 16.7-18.6 26-3.7 11.2-7.4 20.4-7.4 33.4 0 11.1 1.9 22.3 7.4 33.4 3.7 11.2 11.1 18.6 18.6 26 7.4 7.4 16.7 13 26 18.6 9.3 3.8 20.5 5.6 31.6 5.6zM330.3 593.9h215.5c18.6 0 33.4-14.9 33.4-33.4 0-18.6-14.9-33.4-33.4-33.4H330.3c-18.6 0-33.4 14.9-33.4 33.4-0.1 18.5 14.8 33.4 33.4 33.4z" horiz-adv-x="1024" /> + + + <glyph glyph-name="coffee" unicode="" d="M944.7 310.1c-13 93.3-132.3 97.9-132.3 97.9 0 29.8-39.8 47.4-39.8 47.4H202c-36.7 0-42.1-51.2-42.1-51.2 7.7-287.6 181.2-382.5 181.2-382.5h299.1C683.1 53.1 742 144.2 742 144.2c9.2-3.1 72.7 0.8 97.9 6.1 25.2 5.4 117.8 66.6 104.8 159.8z m-579-238.6C220.4 177 234.9 399.6 234.9 399.6h80.3c-44.4-126.2 43.6-285.3 55.8-307.5 12.3-22.2-5.3-20.6-5.3-20.6zM833 202.3c-37.5-22.2-65.1-7.7-65.1-7.7 39 54.3 42.1 159.1 42.1 159.1 6.8-2.3 12.3 26 61.2-23.7 49-49.6-0.7-105.5-38.2-127.7zM137.8-63.1h674.3c33.1 0 60 28.3 60 63.4H78c0-35.1 26.7-63.4 59.8-63.4zM351.8 766s-119.3-72.7-44.4-140.7c74.9-68.1 68.1-93.3 24.5-153 0 0 81.8 41.3 71.1 104.1s-89.5 94.1-72.7 137.6c17 43.6 21.5 52 21.5 52zM615 804.2s-119.3-72.7-44.3-140.7c74.8-68.1 67.9-93.3 24.4-153 0 0 81.9 41.3 71.1 104.1-10.7 62.7-89.5 94.1-72.7 137.6 16.9 43.6 21.5 52 21.5 52zM491.1 831.8s-74.2-6.1-88-78c-13.7-71.9 32.9-98.7 68.8-134.7 35.9-35.9 20.6-103.2-19.9-150.7 0 0 72.7 25.3 89.5 94.9 16.8 69.7-17.3 94.1-52.7 134.6-35.5 40.5-32.1 113.9 2.3 133.9z" horiz-adv-x="1024" /> + + + <glyph glyph-name="more-up" unicode="" d="M883.673 373.67999999999995L480.258-29.73599999999999c-17.387-17.387-17.387-45.57599999 0-62.963 17.387-17.387 45.57599999-17.387 62.963 0l464.586 464.586-464.586 464.586c-17.387 17.387-45.57599999 17.387-62.963 0s-17.387-45.577 0-62.964L883.673 373.67999999999995zM437.733 372.957L35.04-29.736000009999998c-17.387-17.387-17.387-45.57599999 0-62.96299999 17.387-17.387 45.57599999-17.387 62.96299999 0l464.58500001 464.586L98.003 836.47299999c-17.387 17.387-45.57599999 17.387-62.963 1e-8-17.387-17.387-17.387-45.577 0-62.964L437.733 372.957z" horiz-adv-x="1024" /> + + + <glyph glyph-name="position" unicode="" d="M936.448 416.384h-85.504c-15.488 162.56-144.768 291.968-307.328 307.328V809.6c0 18.048-14.592 32.64-32.64 32.64s-32.64-14.592-32.64-32.64v-85.888c-162.56-15.488-291.968-144.768-307.328-307.328H85.12c-18.048 0-32.64-14.592-32.64-32.64s14.592-32.64 32.64-32.64h85.888c15.488-162.56 144.768-291.968 307.328-307.328V-42.24c0-18.048 14.592-32.64 32.64-32.64s32.64 14.592 32.64 32.64v86.016c162.56 15.488 291.968 144.768 307.328 307.328h85.504c18.048 0 32.64 14.592 32.64 32.64 0.128 17.92-14.592 32.64-32.64 32.64zM510.976 105.728c-153.472 0-277.888 124.416-277.888 277.888v0.128 0.128c0 153.344 124.416 277.76 277.76 277.76 50.432 0 97.664-13.44 138.368-36.864 83.456-48 139.776-137.984 139.776-241.152 0-153.472-124.416-277.888-278.016-277.888zM439.68 383.616c0-39.424 31.872-71.296 71.296-71.296 39.424 0 71.296 31.872 71.296 71.296 0 25.472-13.568 49.024-35.584 61.696-22.016 12.672-49.28 12.672-71.296 0-22.016-12.672-35.712-36.224-35.712-61.696z m0 0" horiz-adv-x="1024" /> + + + <glyph glyph-name="roundcheckfill-copy" unicode="" d="M512 830.016C266.08 830.016 65.984 629.9200000000001 65.984 384c0-245.952 200.064-446.016 446.016-446.016 245.952 0 446.016 200.064 446.016 446.016C958.016 629.9200000000001 757.952 830.016 512 830.016zM727.232 457.568l-256.224-259.008c-0.064-0.064-0.192-0.096-0.256-0.192-0.096-0.064-0.096-0.192-0.192-0.256-2.048-1.984-4.576-3.2-6.944-4.544-1.184-0.672-2.144-1.696-3.392-2.176-3.84-1.536-7.904-2.336-11.968-2.336-4.096 0-8.224 0.8-12.096 2.4-1.28 0.544-2.304 1.632-3.52 2.304-2.368 1.344-4.832 2.528-6.88 4.544-0.064 0.064-0.096 0.192-0.16 0.256-0.064 0.096-0.192 0.096-0.256 0.192l-126.016 129.504c-12.32 12.672-12.032 32.928 0.64 45.248 12.672 12.288 32.896 12.064 45.248-0.64l103.264-106.112 233.28 235.84c12.416 12.576 32.704 12.704 45.248 0.256C739.52 490.4 739.648 470.144 727.232 457.568z" horiz-adv-x="1024" /> + + + + + </font> +</defs></svg> diff --git a/src/assets/iconfont/iconfont.ttf b/src/assets/iconfont/iconfont.ttf new file mode 100644 index 0000000..f1002e4 --- /dev/null +++ b/src/assets/iconfont/iconfont.ttf Binary files differ diff --git a/src/assets/iconfont/iconfont.woff b/src/assets/iconfont/iconfont.woff new file mode 100644 index 0000000..b319a8b --- /dev/null +++ b/src/assets/iconfont/iconfont.woff Binary files differ diff --git a/src/assets/img/IDcardbg.png b/src/assets/img/IDcardbg.png new file mode 100644 index 0000000..5340375 --- /dev/null +++ b/src/assets/img/IDcardbg.png Binary files differ diff --git a/src/assets/img/appwechat.png b/src/assets/img/appwechat.png new file mode 100644 index 0000000..b2e1b45 --- /dev/null +++ b/src/assets/img/appwechat.png Binary files differ diff --git a/src/assets/img/assessment.png b/src/assets/img/assessment.png new file mode 100644 index 0000000..c861c78 --- /dev/null +++ b/src/assets/img/assessment.png Binary files differ diff --git a/src/assets/img/assessment_bg.png b/src/assets/img/assessment_bg.png new file mode 100644 index 0000000..a7d2dc5 --- /dev/null +++ b/src/assets/img/assessment_bg.png Binary files differ diff --git a/src/assets/img/bule.png b/src/assets/img/bule.png new file mode 100644 index 0000000..00931de --- /dev/null +++ b/src/assets/img/bule.png Binary files differ diff --git a/src/assets/img/calcBg.jpg b/src/assets/img/calcBg.jpg new file mode 100644 index 0000000..e7535ec --- /dev/null +++ b/src/assets/img/calcBg.jpg Binary files differ diff --git a/src/assets/img/calculator.png b/src/assets/img/calculator.png new file mode 100644 index 0000000..d88a230 --- /dev/null +++ b/src/assets/img/calculator.png Binary files differ diff --git a/src/assets/img/collect_result_bg.png b/src/assets/img/collect_result_bg.png new file mode 100644 index 0000000..b7b322f --- /dev/null +++ b/src/assets/img/collect_result_bg.png Binary files differ diff --git a/src/assets/img/default_bg.png b/src/assets/img/default_bg.png new file mode 100644 index 0000000..ac108b3 --- /dev/null +++ b/src/assets/img/default_bg.png Binary files differ diff --git a/src/assets/img/deom.jpg b/src/assets/img/deom.jpg new file mode 100644 index 0000000..2515cfc --- /dev/null +++ b/src/assets/img/deom.jpg Binary files differ diff --git a/src/assets/img/error1.png b/src/assets/img/error1.png new file mode 100644 index 0000000..abdb1ca --- /dev/null +++ b/src/assets/img/error1.png Binary files differ diff --git a/src/assets/img/error2.png b/src/assets/img/error2.png new file mode 100644 index 0000000..1095c17 --- /dev/null +++ b/src/assets/img/error2.png Binary files differ diff --git a/src/assets/img/error3.png b/src/assets/img/error3.png new file mode 100644 index 0000000..e3675af --- /dev/null +++ b/src/assets/img/error3.png Binary files differ diff --git a/src/assets/img/handID.jpg b/src/assets/img/handID.jpg new file mode 100644 index 0000000..22b6c3d --- /dev/null +++ b/src/assets/img/handID.jpg Binary files differ diff --git a/src/assets/img/iPhone8.png b/src/assets/img/iPhone8.png new file mode 100644 index 0000000..dbbcfd4 --- /dev/null +++ b/src/assets/img/iPhone8.png Binary files differ diff --git a/src/assets/img/iPhone8P.png b/src/assets/img/iPhone8P.png new file mode 100644 index 0000000..a6dc932 --- /dev/null +++ b/src/assets/img/iPhone8P.png Binary files differ diff --git a/src/assets/img/iPhoneX.png b/src/assets/img/iPhoneX.png new file mode 100644 index 0000000..6b30407 --- /dev/null +++ b/src/assets/img/iPhoneX.png Binary files differ diff --git a/src/assets/img/ios_home_bg.jpg b/src/assets/img/ios_home_bg.jpg new file mode 100644 index 0000000..88efaab --- /dev/null +++ b/src/assets/img/ios_home_bg.jpg Binary files differ diff --git a/src/assets/img/iosassessment.png b/src/assets/img/iosassessment.png new file mode 100644 index 0000000..218d485 --- /dev/null +++ b/src/assets/img/iosassessment.png Binary files differ diff --git a/src/assets/img/iosindex.png b/src/assets/img/iosindex.png new file mode 100644 index 0000000..c3a7dc5 --- /dev/null +++ b/src/assets/img/iosindex.png Binary files differ diff --git a/src/assets/img/loginLogo.png b/src/assets/img/loginLogo.png new file mode 100644 index 0000000..9a1d572 --- /dev/null +++ b/src/assets/img/loginLogo.png Binary files differ diff --git a/src/assets/img/nothing.png b/src/assets/img/nothing.png new file mode 100644 index 0000000..32f9b1c --- /dev/null +++ b/src/assets/img/nothing.png Binary files differ diff --git a/src/assets/img/ok.png b/src/assets/img/ok.png new file mode 100644 index 0000000..815f2f1 --- /dev/null +++ b/src/assets/img/ok.png Binary files differ diff --git a/src/assets/img/pass.png b/src/assets/img/pass.png new file mode 100644 index 0000000..d85561a --- /dev/null +++ b/src/assets/img/pass.png Binary files differ diff --git a/src/assets/img/person.png b/src/assets/img/person.png new file mode 100644 index 0000000..a941d8f --- /dev/null +++ b/src/assets/img/person.png Binary files differ diff --git a/src/assets/img/photo.jpg b/src/assets/img/photo.jpg new file mode 100644 index 0000000..18c65be --- /dev/null +++ b/src/assets/img/photo.jpg Binary files differ diff --git a/src/assets/img/pope.png b/src/assets/img/pope.png new file mode 100644 index 0000000..e882c16 --- /dev/null +++ b/src/assets/img/pope.png Binary files differ diff --git a/src/assets/img/qqchat.png b/src/assets/img/qqchat.png new file mode 100644 index 0000000..31244ce --- /dev/null +++ b/src/assets/img/qqchat.png Binary files differ diff --git a/src/assets/img/share.png b/src/assets/img/share.png new file mode 100644 index 0000000..e9dfe7c --- /dev/null +++ b/src/assets/img/share.png Binary files differ diff --git a/src/assets/img/shareAndroid.png b/src/assets/img/shareAndroid.png new file mode 100644 index 0000000..75705c8 --- /dev/null +++ b/src/assets/img/shareAndroid.png Binary files differ diff --git a/src/assets/img/shareIOS.png b/src/assets/img/shareIOS.png new file mode 100644 index 0000000..e9dfe7c --- /dev/null +++ b/src/assets/img/shareIOS.png Binary files differ diff --git a/src/assets/img/tag-bg.png b/src/assets/img/tag-bg.png new file mode 100644 index 0000000..1ed3f5b --- /dev/null +++ b/src/assets/img/tag-bg.png Binary files differ diff --git a/src/assets/img/v2/v2IDcardf.png b/src/assets/img/v2/v2IDcardf.png new file mode 100644 index 0000000..c251727 --- /dev/null +++ b/src/assets/img/v2/v2IDcardf.png Binary files differ diff --git a/src/assets/img/v2/v2IDcardz.png b/src/assets/img/v2/v2IDcardz.png new file mode 100644 index 0000000..14ef31b --- /dev/null +++ b/src/assets/img/v2/v2IDcardz.png Binary files differ diff --git a/src/assets/img/wave-bot.png b/src/assets/img/wave-bot.png new file mode 100644 index 0000000..8943cda --- /dev/null +++ b/src/assets/img/wave-bot.png Binary files differ diff --git a/src/assets/img/wave-mid.png b/src/assets/img/wave-mid.png new file mode 100644 index 0000000..f39e660 --- /dev/null +++ b/src/assets/img/wave-mid.png Binary files differ diff --git a/src/assets/img/wave-top.png b/src/assets/img/wave-top.png new file mode 100644 index 0000000..5c41afb --- /dev/null +++ b/src/assets/img/wave-top.png Binary files differ diff --git a/src/assets/img/weQECode.png b/src/assets/img/weQECode.png new file mode 100644 index 0000000..6dfeb56 --- /dev/null +++ b/src/assets/img/weQECode.png Binary files differ diff --git a/src/assets/img/wechat.png b/src/assets/img/wechat.png new file mode 100644 index 0000000..ef61d44 --- /dev/null +++ b/src/assets/img/wechat.png Binary files differ diff --git a/src/assets/imgs/bianji.png b/src/assets/imgs/bianji.png new file mode 100644 index 0000000..071eef8 --- /dev/null +++ b/src/assets/imgs/bianji.png Binary files differ diff --git a/src/assets/imgs/collect_result_bg.jpg b/src/assets/imgs/collect_result_bg.jpg new file mode 100644 index 0000000..17bdb65 --- /dev/null +++ b/src/assets/imgs/collect_result_bg.jpg Binary files differ diff --git a/src/assets/imgs/collect_result_bg.png b/src/assets/imgs/collect_result_bg.png new file mode 100644 index 0000000..be9dfa7 --- /dev/null +++ b/src/assets/imgs/collect_result_bg.png Binary files differ diff --git a/src/assets/imgs/dengdai.png b/src/assets/imgs/dengdai.png new file mode 100644 index 0000000..631723a --- /dev/null +++ b/src/assets/imgs/dengdai.png Binary files differ diff --git a/src/assets/imgs/jieqing.png b/src/assets/imgs/jieqing.png new file mode 100644 index 0000000..1fd23d4 --- /dev/null +++ b/src/assets/imgs/jieqing.png Binary files differ diff --git a/src/assets/imgs/lanok.png b/src/assets/imgs/lanok.png new file mode 100644 index 0000000..0f269cb --- /dev/null +++ b/src/assets/imgs/lanok.png Binary files differ diff --git a/src/assets/imgs/redno.png b/src/assets/imgs/redno.png new file mode 100644 index 0000000..f07ac16 --- /dev/null +++ b/src/assets/imgs/redno.png Binary files differ diff --git a/src/assets/imgs/shenfenzheng01.jpg b/src/assets/imgs/shenfenzheng01.jpg new file mode 100644 index 0000000..d0588f0 --- /dev/null +++ b/src/assets/imgs/shenfenzheng01.jpg Binary files differ diff --git a/src/assets/imgs/shenfenzheng02.jpg b/src/assets/imgs/shenfenzheng02.jpg new file mode 100644 index 0000000..e797890 --- /dev/null +++ b/src/assets/imgs/shenfenzheng02.jpg Binary files differ diff --git a/src/assets/imgs/shenfenzheng03.jpg b/src/assets/imgs/shenfenzheng03.jpg new file mode 100644 index 0000000..bfb899e --- /dev/null +++ b/src/assets/imgs/shenfenzheng03.jpg Binary files differ diff --git a/src/assets/imgs/shenfenzheng04.jpg b/src/assets/imgs/shenfenzheng04.jpg new file mode 100644 index 0000000..e158c28 --- /dev/null +++ b/src/assets/imgs/shenfenzheng04.jpg Binary files differ diff --git a/src/assets/imgs/yinghangbiaozhi.jpg b/src/assets/imgs/yinghangbiaozhi.jpg new file mode 100644 index 0000000..ac1c3c4 --- /dev/null +++ b/src/assets/imgs/yinghangbiaozhi.jpg Binary files differ diff --git a/src/assets/imgs/yuqi.png b/src/assets/imgs/yuqi.png new file mode 100644 index 0000000..b7b4af6 --- /dev/null +++ b/src/assets/imgs/yuqi.png Binary files differ diff --git a/src/components/CardList.vue b/src/components/CardList.vue new file mode 100644 index 0000000..7c80fed --- /dev/null +++ b/src/components/CardList.vue @@ -0,0 +1,120 @@ +<template> + <div class="card-list-component"> + <div v-if="prodList.length >= 1"> + <div class="card-list-box" + :class="{'vux-1px-b': (index + 1) !== prodList.length}" + v-for="(item,index) in prodList" + :key="index" + @click="productJump(item)"> + <div class="card-img"> + <img :src="item.content[0]" :alt="item.content[1]"> + </div> + <div class="card-info"> + <div class="card-title">{{ item.content[1] }}</div> + <div class="card-description">{{ item.content[2] }}</div> + <div class="card-lines">申请人数:<span>{{item.applyNumber}}</span></div> + </div> + </div> + </div> + <div class="nothing" v-if="showNone"> + <img src="../assets/img/nothing.png" alt="这里什么都没有哦"> + <p>暂时没有数据~</p> + </div> + </div> +</template> +<script> + /** + * Created by 吴彦祖 on 2018/3/16. + * 信用卡列表,用于信用卡贷款的页面 + * @params + * @lists {Array} 用于展示的数据 + */ + export default { + name: 'card-list', + props:{ + showNone:{ + type:Boolean, + default:false + }, + prodList: { + type:Array, + default:()=>{ + return []; + } + }, + }, + data(){ + return { + } + }, + methods:{ + productJump (productId) { + this.$emit('on-click-prodItem', productId); + } + }, + activated(){ + } + } +</script> + +<style lang="less"> + @import '../style/mixin.less'; + .card-list-component{ + background-color: @color-white; + .nothing { + padding-top: 50px; + text-align: center; + img { + width: 120px; + height: auto; + } + p { + font-size: @font-size-small; + line-height: 30px; + color: @color-text-third; + } + } + .card-list-box{ + .flexLayout(flex-start,center,row); + height:95px; + box-sizing: border-box; + margin:0 12px; + padding:10px 0; + .card-img{ + width:34%; + text-align: center; + margin-right:12Px; + border-radius: @border-radius-normal-size; + img{ + width:100%; + height:100%; + border-radius: @border-radius-normal-size; + } + } + .card-info{ + width:60%; + box-sizing: border-box; + margin-right: 10px; + .card-title{ + font-size:@font-size-medium; + margin-bottom:5px; + } + .card-description{ + width:100%; + font-size:@font-size-small; + color: @color-text-third; + .ellipsis(100%); + + } + .card-lines{ + font-size:@font-size-small; + color: @color-text-third; + .ellipsis(217px); + span{ + color: @color-text-placeholder-red; + } + } + } + } + } +</style> diff --git a/src/components/HomeBanner.vue b/src/components/HomeBanner.vue new file mode 100644 index 0000000..02b2935 --- /dev/null +++ b/src/components/HomeBanner.vue @@ -0,0 +1,67 @@ +<template> + <div> + <swiper :auto="true" + class="home-banner-swiper" + :show-dots="true" + height="190px" + :loop="true" + dots-position="center"> + <swiper-item v-for="(item, index) in lists" + :key="index"> + <img @click="jumpTo(item)" :src="item.context" :alt="item.name"> + </swiper-item> + </swiper> + </div> +</template> + +<script> + /** + * Created by c.y on 2018/4/28. + * 首页banner + */ + import { Swiper, SwiperItem } from 'vux' ; + export default { + name: 'home-banner-swiper', + props:{ + lists:{ + type:Array + } + }, + components: { + Swiper, + SwiperItem + }, + methods:{ + jumpTo(item){ + this.$emit('indexJump', item); + } + } + } +</script> + +<style lang="less"> + @import '../style/mixin.less'; + .home-banner-swiper { + width: 100%; + height: 190px; + background-color: @color-background-default; + .vux-swiper-item { + img { + width: 100%; + height: 100%; + } + } + .vux-indicator{ + a{ + .active{ + background-color: #fff !important; + } + } + } + .vux-icon-dot { + width: 5px !important; + height: 5px !important; + border-radius: 50% !important; + } + } +</style> diff --git a/src/components/MessageList.vue b/src/components/MessageList.vue new file mode 100644 index 0000000..5581a77 --- /dev/null +++ b/src/components/MessageList.vue @@ -0,0 +1,109 @@ +<template> + <div class="message-list-component"> + <div class="scroller-box"> + <div class="message-body" + @click="handleNewsJump(i)" + v-for="(i,index) in list" + :key="index"> + <div class="message-body-header" :class="{'unRead':i.unRead}">{{i.title}}</div> + <div class="message-body-con">{{i.content}}</div> + <div class="message-body-foot" :class="{'unRead':i.unRead}"> + {{ dateFormat(i.noticeTime, 'YYYY-MM-DD HH:mm:ss')}} + </div> + </div> + </div> + <div class="nothing" v-if="showNone"> + <img src="../assets/img/nothing.png" alt="这里什么都没有哦"> + <p>这里什么都没有</p> + </div> + </div> +</template> +<script> + /** + * Created by 吴彦祖 on 2018/3/16. + * Message list , for mine -> message center page + * only one param to use: + * @params + * @lists {Array} the data which to show the list; + */ + import {dateFormat} from 'vux' + import sysApi from '../api/api'; + import statusCodeManage from '../api/statusCodeManage'; + + export default { + name: 'message-list', + data () { + return { + dateFormat: dateFormat, + active: true, + colorActive: false + } + }, + props: { + list: { + type: Array + }, + showNone: { + type: Boolean, + default: false + } + }, + methods: { + // 公告跳转 + handleNewsJump (noticeItem) { + this.$emit('on-click-notice', noticeItem); + } + }, + } +</script> + +<style lang="less"> + @import '../style/mixin.less'; + + .message-list-component { + .nothing { + padding-top: 50px; + text-align: center; + img { + width: 120px; + height: auto; + } + p { + font-size: @font-size-small; + line-height: 30px; + color: @color-text-third; + } + } + .message-body { + background-color: @color-white; + padding: 0 12px; + .message-body-header { + height: 40px; + margin-top: @font-size-tiny; + color: @color-text-third; + line-height: 40px; + font-size: @font-size-medium; + .ellipsis() + } + .message-body-con { + margin: 0 0 10px 0; + color: @color-text-third; + font-size: @font-size-small; + .ellipsisLn(3); + } + .message-body-foot { + height: 33px; + border-top: solid 1px @color-background-default; + line-height: 33px; + text-align: right; + padding-right: @font-size-tiny; + } + .textColor { + color: #999; + } + } + .unRead { + color: @color-text-primary !important; + } + } +</style> diff --git a/src/components/NewsList.vue b/src/components/NewsList.vue new file mode 100644 index 0000000..b081a7e --- /dev/null +++ b/src/components/NewsList.vue @@ -0,0 +1,105 @@ +<template> + <div class="news-list-component"> + <div class="news-uplist" + v-for="(i,index) in newsList" + @click="handleNewsJump(i)" + :key="index"> + <div class="news-uplist-left"> + <p>{{i.title}}</p> + <div class="news-uplist-text"> + <span class="news-uplist-left-date">{{ dateFormat(i.noticeTime, 'YYYY-MM-DD') }}</span> + <i class="iconfont icon-eye"></i> + <span>{{i.pv}}</span> + </div> + </div> + <div class="news-uplist-right"> + <img :src="i.content"> + </div> + </div> + </div> +</template> + +<script> + /** + * Created by 吴彦祖 on 2018/3/27. + * 资讯列表,用于资讯页面 + * @param + * @newList {Array} 用于渲染列表数据 + */ + import { dateFormat } from 'vux' + export default { + name: 'news-list-component', + data () { + return { + dateFormat + } + }, + methods: { + // 资讯的跳转 + handleNewsJump (newItem) { + this.$emit('on-click-news', newItem) + } + }, + props:{ + newsList:{ + type:Array, + default:()=>{ + return [ + { + title:'这是标题这是标题这是标题这是标题这是标题这是标题这是标题这是标题', + noticeTime: { + time: '1520424597000' + }, + pv:'9999' + } + ] + } + } + } + } +</script> + +<style lang="less"> + @import '../style/mixin.less'; + .news-list-component{ + .news-uplist{ + padding:10px 0 10px 0; + border-bottom: solid 1px @color-background-default; + .flexLayout(space-between,center,row); + margin:0px 12px 0px 12px; + box-sizing: border-box; + height:88px; + .news-uplist-left{ + width:65%; + height:100%; + .flexLayout(space-between,flex-start,column); + p{ + width: 100%; + font-size: @font-size-medium; + color: @color-text-primary; + .ellipsisLn(2); + } + .news-uplist-text{ + font-size: @font-size-small; + color:@color-text-third; + i{ + margin-left:44px; + vertical-align: middle; + } + } + } + .news-uplist-right{ + width:99px; + height:64px; + line-height:64px; + text-align: center; + overflow: hidden; + /*margin-left: 27px;*/ + img{ + width:99px; + height:64px; + } + } + } + } +</style> diff --git a/src/components/Notice.vue b/src/components/Notice.vue new file mode 100644 index 0000000..4b968d7 --- /dev/null +++ b/src/components/Notice.vue @@ -0,0 +1,60 @@ +<template> + <div class="home-notice"> + <swiper auto + :loop="true" + height="44px" + direction="vertical" + :interval=2000 + :show-dots="false"> + <i class="iconfont icon-notificationfill"></i> + <swiper-item v-for="(i,index) in lists" :key="index"> + <p @click="jumpTo(i)">{{i.context}}</p> + </swiper-item> + </swiper> + </div> +</template> + +<script> + /** + * Created by 吴彦祖 on 2018/3/16. + * 通知列表,用于我的公共通知 + */ + import { Swiper, SwiperItem } from 'vux' ; + export default { + name: 'home-notice', + props:{ + lists:{ + type:Array, + default:()=>{ + return [{context:'测试测试测试'},{context:'测试测试测试'},] + } + } + }, + components: { + Swiper, + SwiperItem + }, + methods:{ + jumpTo(item){ + this.$emit('indexJump',item); + } + } + } +</script> + +<style lang="less"> + @import '../style/mixin.less'; + .home-notice { + padding: 0 12px; + font-size: @font-size-small; + line-height: 44px; + color: @color-text-third; + background: @color-white; + .iconfont { + color: @color-primary; + } + p { + padding-left: 24px; + } + } +</style> diff --git a/src/components/common/FBlockTitle.vue b/src/components/common/FBlockTitle.vue new file mode 100644 index 0000000..299b469 --- /dev/null +++ b/src/components/common/FBlockTitle.vue @@ -0,0 +1,71 @@ +<template> + <div class="f-title-box"> + <div class="f-block-title"> + <span></span> + {{ title }} + <slot name="more"></slot> + </div> + <div class="title-line"></div> + </div> + +</template> + +<script> + /** + * Created by c.y on 2018/3/16. + * 组件的命名 项目名(F---filean) + 组件的描述(区别与框架的组件) + * 每一个板块的title + */ + export default { + name: 'f-block-title', + props: { + title: { + type: String, + required: true + } + } + } +</script> + +<style lang="less"> + @import "../../style/mixin"; + .f-title-box { + .title-line { + position: relative; + &:after { + .setBottomLine(@color-divider-regular); + } + } + .f-block-title { + position: relative; + padding: 15px 0 11px 12px; + font-size: @font-size-primary; + line-height: 18px; + color: @color-text-primary; + background-color: @color-white; + span { + display: inline-block; + width: 2px; + height: 18px; + margin-right: 10px; + vertical-align: middle; + background-color: @color-primary; + } + .more { + position: absolute; + right: 0; + top: 0; + height: 44px; + padding: 14px 12px 0; + font-size: 14px; + color: @color-text-secondary; + box-sizing: border-box; + .icon-arrow { + font-size: 14px; + font-weight: bold; + } + } + } + } + +</style> diff --git a/src/components/common/FButton.vue b/src/components/common/FButton.vue new file mode 100644 index 0000000..e975936 --- /dev/null +++ b/src/components/common/FButton.vue @@ -0,0 +1,118 @@ +<template> + <div class="f-button-component"> + <button + @click="handleButtonClick" + class="f-button" + :class="buttonClass" + :disabled="disabled"> + <slot>{{ text }}</slot> + </button> + <slot name="sbIphoneX"></slot> + </div> +</template> + +<script> + /** + * Created by c.y on 2018/3/16. + * 组件的命名 项目名(F---filean) + 组件的描述(区别与框架的组件) + * 组件的各个属性详情下面props说明 + */ + export default { + name: 'f-button', + data () { + return {} + }, + computed: { + // button的class + buttonClass () { + return [ + { + 'f-btn-disabled': this.disabled, + 'f-btn-min': this.size === 'mini', + 'f-btn-no-border': !this.isBorderRadius + }, + ] + }, + }, + methods: { + // 处理非城市那妞的button的事件 + handleButtonClick () { + if (this.disabled) { + return false; + } + this.$emit('on-click-button'); + } + }, + props: { + // type的按钮类型,默认按钮 + type: { + type: String, + default: 'default' + }, + // 是否禁用 + disabled: { + type: Boolean, + default: false + }, + // button的大小,mini, normal + size: { + type: String, + default: 'normal' + }, + // 按钮的文字 + text: { + type: String + }, + // 是否有圆角 + isBorderRadius: { + type: Boolean, + default: true + } + } + } +</script> + +<style lang="less"> + @import '../../style/mixin'; + @media (device-width: 375px) and (device-height: 812px) and (-webkit-min-device-pixel-ratio : 3){ + //如果以后出现375*812,非ios机型,可以加上下面语句 + .sbIphoneX{ + height: 34px !important; + background-color: @color-white; + } + } + .f-button-component{ + + } + .f-button { + display: block; + width: 93.6%; + height: 44px; + margin: 32px auto 20px; + line-height: @font-line-height-base; + font-size: @font-size-primary; + color: #fff; + text-align: center; + border: none; + border-radius: @border-radius-normal-size; + .color-linear-gradient(@color-gradient-darkBlue-left, @color-gradient-darkBlue-right); + outline: 0; + -webkit-appearance: none; + } + .f-btn-disabled { + background: @color-disabled; + } + .f-btn-min { + display: inline-block; + width: 64px; + height: 32px; + margin: 0; + } + .f-button:not(.f-btn-disabled):active { + background: @color-primary; + } + .f-btn-no-border{ + width:100%; + border-radius: 0; + } +</style> diff --git a/src/components/common/FDialog.vue b/src/components/common/FDialog.vue new file mode 100644 index 0000000..0e7a148 --- /dev/null +++ b/src/components/common/FDialog.vue @@ -0,0 +1,137 @@ +<template> + <div> + <div class="weui-mask" v-show="show"></div> + <div class="f-dialog" v-show="show"> + <!--<img v-if="dialogImgUrl" :src="dialogImgUrl" alt="弹窗提示">--> + <div class="f-dialog-img"> + <img src="../../assets/img/collect_result_bg.png" alt=""> + </div> + <h3 class="f-dialog-header" v-if="title">{{ title }}</h3> + <!--内容在插槽中写--> + <p class="f-dialog-content"> + <slot></slot> + </p> + <div class="f-dialog-footer dialog-single-footer" + v-if="type === 'confirm'" + @click="handleClickConfirm" + >{{ confirmText }}</div> + <div class="f-dialog-footer" v-if="type === 'dialog'"> + <span @click="handleClickConfirm">{{ confirmText }}</span> + <span @click="handleClickCancel">{{ cancelText }}</span> + </div> + </div> + </div> + +</template> + +<script> + /** + * Created by c.y on 2018/3/16. + * 组件的命名 项目名(F---filean) + 组件的描述(区别与框架的组件) + * 全局的对话框 + */ + export default { + name: 'f-confirm', + methods: { + // 点击确认事件 + handleClickConfirm () { + this.$emit('on-click-confirm'); + }, + // 点击取消事件 + handleClickCancel () { + this.$emit('on-click-cancel'); + } + }, + model: { + prop: 'show', + }, + props: { + show: { + type: Boolean, + default: false + }, + // 弹窗的图标 + dialogImgUrl: String, + // title + title: String, + // 确认文字 + confirmText: String, + // 取消文字 + cancelText: String, + // type为两个,一个为confirm即底部只有一个按钮,dialog是有两个按钮 + type: { + type: String, + default: 'confirm' + } + } + } +</script> + +<style lang="less"> + @import "../../style/mixin"; + .f-dialog { + position: fixed; + top: 50%; + left: 50%; + transform: translate(-50%,-50%); + width: 280px; + min-height: 128px; + text-align: center; + border-radius: @border-radius-normal-size; + background: @color-white; + z-index: 1000; + .f-dialog-img { + position: relative; + height: 40px; + img { + position: absolute; + left: 50%; + top: -32px; + width: 64px; + height: 64px; + transform: translate(-50%,0); + border-radius: 50%; + } + } + .f-dialog-header { + padding-top: 9px; + font-size: @font-size-large; + line-height: 2.14; + font-weight: normal; + color: @color-text-primary; + } + .f-dialog-content { + font-size: @font-size-medium; + line-height: 1.6; + color: @color-text-secondary; + padding-bottom: 14px; + } + .f-dialog-footer { + position: relative; + width: 100%; + height: 44px; + line-height: 44px; + font-size: @font-size-primary; + color: @color-text-third; + text-align: center; + .flexLayout(); + span { + flex: 1; + &:last-child { + position: relative; + color: @color-primary; + &:before { + .setLeftLine(@color-divider-regular); + } + } + } + &:before { + .setTopLine(@color-divider-regular); + } + } + .dialog-single-footer { + display: block; + color: @color-primary; + } + } +</style> diff --git a/src/components/common/FFooter.vue b/src/components/common/FFooter.vue new file mode 100644 index 0000000..98cb72a --- /dev/null +++ b/src/components/common/FFooter.vue @@ -0,0 +1,74 @@ +<template> + <footer class="f-footer"> + <tabbar> + <tabbar-item @on-item-click="handlerItemClick" :selected="selectIndex === 0" link="/f-main"> + <i slot="icon" class="iconfont icon-home"></i> + <i slot="icon-active" class="iconfont icon-home-fill"></i> + <span slot="label">首页</span> + </tabbar-item> + <tabbar-item @on-item-click="handlerItemClick" :selected="selectIndex === 1" link="/f-loan"> + <i slot="icon" class="iconfont icon-loan"></i> + <i slot="icon-active" class="iconfont icon-loan-fill"></i> + <span slot="label">贷款</span> + </tabbar-item> + <tabbar-item @on-item-click="handlerItemClick" :selected="selectIndex === 2" link="/f-news"> + <i slot="icon" class="iconfont icon-news"></i> + <i slot="icon-active" class="iconfont icon-news-fill"></i> + <span slot="label">资讯</span> + </tabbar-item> + <tabbar-item @on-item-click="handlerItemClick" :selected="selectIndex === 3" link="/f-mine"> + <i slot="icon" class="iconfont icon-my"></i> + <i slot="icon-active" class="iconfont icon-my-fill"></i> + <span slot="label">个人</span> + </tabbar-item> + </tabbar> + </footer> +</template> + +<script> + /** + * Created by c.y on 2018/3/16. + * 组件的命名 项目名(F---filean) + 组件的描述(区别与框架的组件) + * 全局的footer + * selectIndex number类型 选中的那个tab + */ + import { Tabbar, TabbarItem } from 'vux' + + export default { + name: 'f-footer', + data () { + return { + selectIndex: 0 + } + }, + methods: { + handlerItemClick (index) { + this.selectIndex = index; + } + }, + components: { + Tabbar, + TabbarItem, + }, + props: { + index: { + type: Number, + default: 0 + } + }, + activated: function () { + this.selectIndex = this.index; + } + } +</script> + +<style lang="less"> +.f-footer { + .weui-tabbar__item { + padding-top: 0; + } + .iconfont { + font-size: 24px; + } +} +</style> diff --git a/src/components/common/FProdList.vue b/src/components/common/FProdList.vue new file mode 100644 index 0000000..b9fadc9 --- /dev/null +++ b/src/components/common/FProdList.vue @@ -0,0 +1,240 @@ +<template> + <div class="prod-list-component"> + <div class="prod-list-box" + v-for="(item, index) in lists" + :key="index" + @click="productJump(item)"> + <div class="prod-list-container"> + <div class="getTime vux-1px-b" v-if="item.applyTime">点击时间:{{item.applyTime}}</div> + <div class="prod-box"> + <div class="prod-logo"> + <img :src="item.content[0]" alt="logo"> + </div> + <div class="prod-info"> + <div class="prod-title-box"> + <span class="prod-title">{{ item.content[1] }}</span> + <span v-if="item.content[2]" class="prod-tag vux-1px">{{ item.content[2] }}</span> + </div> + <div class="prod-content"> + <div class="content-left"> + <div>{{ item.content[3] }}:<span class="high-light">{{ item.content[4] }}</span></div> + <div>{{ item.content[7] }}</div> + </div> + <div class="content-right"> + <div>{{ item.content[5] }}:<span class="high-light">{{ item.content[6] }}</span></div> + <div>{{ item.applyNumber }}</div> + </div> + </div> + </div> + </div> + </div> + <div class="gutter" v-if="gutter"></div> + </div> + <div class="nothing" v-if="showNone"> + <img src="../../assets/img/nothing.png" alt="这里什么都没有哦"> + <p>这里什么都没有</p> + </div> + </div> +</template> + +<script> + /** + * Created by 吴彦祖 on 2018/3/16. + * 组件的命名 项目名(F---filean) + 组件的描述(区别与框架的组件) + * 全局的产品列表----可见设计规范图 + * 这是产品列表 + * @params + * @lists {Array} 渲染的数据 + * @gutter {Boolean} 每个产品之间是否需要间距 + * + */ + export default { + name: 'f-product-list', + props: { + lists: { + type: Array, + }, + gutter: { + type: Boolean, + default: false + }, + showNone: { + type: Boolean, + default: false + } + }, + methods: { + // 产品的点击的跳转 + productJump(item) { + this.$emit('on-click-prodItem', item); + } + } + } +</script> + +<style lang="less"> + @import '../../style/mixin.less'; + + .vux-1px:before { + border-radius: @border-radius-normal-size; + } + + .prod-list-component { + overflow: hidden; + background-color: @color-white; + .nothing { + padding-top: 50px; + text-align: center; + img { + width: 120px; + height: auto; + } + p { + font-size: @font-size-small; + line-height: 30px; + color: @color-text-third; + } + } + .prod-list-box { + min-height: 88px; + .gutter { + height: 10px; + background-color: @color-background-default; + } + .prod-list-container { + box-sizing: border-box; + padding: 0 12px; + } + .getTime { + height: 32px; + line-height: 32px; + font-size: @font-size-small; + color: @color-text-placeholder-red; + } + .prod-box { + .flexLayout(flex-start, center, row); + box-sizing: border-box; + padding: 14px 0; + .prod-logo { + width: 64px; + height: 64px; + border-radius: @border-radius-normal-size; + text-align: center; + img { + width: 64px; + height: 64px; + } + } + .prod-info { + margin-left: 15px; + .prod-title-box { + margin-bottom: 5px; + .flexLayout(); + .prod-title { + font-size: @font-size-medium; + .ellipsis(145px); + } + .prod-tag { + margin-left: 10px; + box-sizing: border-box; + color: @color-primary-light; + padding: 2px 2px 1px; + font-size: @font-size-tiny; + text-align: center; + vertical-align: middle; + } + .vux-1px:before { + border-radius: 0 !important; + border: 1Px solid @color-primary-light !important; + } + } + .prod-content { + .flexLayout(flex-start, center, row); + div { + div { + color: @color-text-third; + .high-light { + color: @color-text-placeholder-red !important; + } + span { + font-size: @font-size-small; + } + } + } + .content-left { + width: 155px; + } + .content-right { + width: 110px; + .high-light { + transform: scale(0.9); + font-size: 12px; + } + } + } + } + } + } + } + + @media only screen + and ( min-device-width: 320Px ) + and ( max-device-width: 320Px ) + and ( -webkit-min-device-pixel-ratio: 1 ) + and ( orientation: portrait ) { + .prod-list-component { + .prod-list-box { + .prod-box { + .prod-info { + margin-left: 5px; + .prod-title-box { + margin-bottom: 5px; + .prod-title { + display: inline-block; + width: 120px !important; + font-size: @font-size-medium; + transform: scale(0.9); + } + .prod-tag { + margin-left: 5px; + } + } + .prod-content { + .flexLayout(flex-start, center, row); + div { + div { + color: @color-text-third; + .high-light { + color: @color-text-placeholder-red; + } + span { + font-size: @font-size-small; + } + } + } + .content-left { + width: 120px !important; + font-size: 12px; + transform: scale(0.9); + .high-light { + transform: scale(0.9); + display: inline-block; + + } + } + .content-right { + /*margin-left: 8px;*/ + width: 119px !important; + transform: scale(0.9); + .high-light { + transform: scale(0.9); + font-size: 12px; + } + } + } + } + } + } + } + } +</style> diff --git a/src/components/common/FSheet.vue b/src/components/common/FSheet.vue new file mode 100644 index 0000000..eab38dd --- /dev/null +++ b/src/components/common/FSheet.vue @@ -0,0 +1,182 @@ +<template> + <div class="f-sheet"> + <!--表单选项--> + <div class="f-cell" + @click="handleSelectMenu"> + <span class="f-cell-bd">{{ title }}</span> + <span class="f-cell-ft f-cell-none" v-if="!value">{{ placeholder }}</span> + <span class="f-cell-ft" v-if="value">{{ value }}</span> + </div> + <!--点击弹出的sheet--> + <transition name="vux-actionsheet-mask"> + <div class="weui-mask weui-mask_transparent" + @click="onClickingMask" + v-show="show"></div> + </transition> + <div class="f-actionsheet" + :class="{'f-actionsheet-toggle': show}"> + <div class="f-actionsheet-menu"> + <div class="f-actionsheet-cell vux-1px-b" + v-for="(menuItem, index) in menus" + :key="index" + @click="onMenuClick(menuItem, index)"> + <p>{{ menuItem.name }}</p> + <p v-if="menuItem.tip">{{ menuItem.tip }}</p> + </div> + </div> + <div class="f-actionsheet-action" + @click="onMenuClick('cancel')"> + <div class="f-actionsheet-cell">取消</div> + </div> + </div> + </div> +</template> + +<script> + /** + * Created by c.y on 2018/3/16. + * 组件的命名 项目名(F---filean) + 组件的描述(区别与框架的组件) + * 全局表单选择,弹窗sheet的组件 + * menus: [ + { + name: '等本等息', + tip: '月供,本金,利息每月相同' // 可选 + } + ], + */ + export default { + name: 'f-sheet', + data () { + return { + show: false + } + }, + methods: { + // 点击表单选择 + handleSelectMenu () { + this.show = true; + }, + // 点击遮罩 + onClickingMask () { + this.show = false; + }, + // 点击item + onMenuClick (menuItem) { + this.show = false; + // 点击取消的话 + if (menuItem === 'cancel') { + return false; + } + // 这里双向数据绑定,监听这个事件,被传递的这个值,赋值给value + this.$emit('on-menu-click', menuItem.name); + this.$emit('on-menu-change', menuItem); + } + }, + model: { + prop: 'value', + event: 'on-menu-click' + // 这个是双向数据绑定,需要监听的事件, + }, + props: { + // 选择的值 + value: String, + // 提示语 + placeholder: String, + // 左边的标题 + title: { + type: String, + required: true + }, + // 下拉菜单 + menus: { + type: Array, + required: true + } + } + + } +</script> + +<style lang="less"> + .f-sheet { + padding-left: 15PX; + .f-actionsheet { + position: fixed; + left: 0; + bottom: 0; + transform: translate(0, 100%); + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + z-index: 10000; + width: 100%; + background: @color-divider-regular; + transition: transform .3s; + } + .f-actionsheet-toggle { + transform: translate(0, 0); + } + .f-actionsheet-menu { + background: @color-white; + } + .f-actionsheet-cell { + position: relative; + padding: 10px 0; + text-align: center; + font-size: @font-size-base; + background: @color-white; + } + .f-actionsheet-action { + margin-top: 6px; + background-color: @color-white; + } + .f-cell { + position: relative; + padding: 10px 15px; + display: flex; + align-items: center; + background: @color-white; + &:after { + content: " "; + position: absolute; + left: 10px; + bottom: 0; + right: 0; + height: 1px; + border-bottom: 1px solid @color-divider-regular; + color: #e5e5e5; + -webkit-transform-origin: 0 100%; + transform-origin: 0 100%; + -webkit-transform: scaleY(0.5); + transform: scaleY(0.5); + z-index: 2; + } + .f-cell-bd { + flex: 1; + } + .f-cell-ft { + position: relative; + padding-right: 15px; + text-align: right; + color: @color-text-primary; + &:after { + content: " "; + position: absolute; + top: 50%; + right: 2px; + margin-top: -4px; + display: inline-block; + height: 6px; + width: 6px; + border-width: 2px 2px 0 0; + border-color: @color-divider-regular; + border-style: solid; + -webkit-transform: matrix(0.71, 0.71, -0.71, 0.71, 0, 0); + transform: matrix(0.71, 0.71, -0.71, 0.71, 0, 0); + } + } + .f-cell-none { + color: @color-text-third; + } + } + } +</style> diff --git a/src/components/common/FSpace.vue b/src/components/common/FSpace.vue new file mode 100644 index 0000000..25f5b24 --- /dev/null +++ b/src/components/common/FSpace.vue @@ -0,0 +1,41 @@ +<template> + <div> + <div class="f-space-small" v-if="type === 'small'"></div> + <div class="f-space-large" v-if="type === 'large'"></div> + </div> +</template> + +<script> + /** + * Created by c.y on 2018/3/16. + * 组件的命名 项目名(F---filean) + 组件的描述(区别与框架的组件) + * 全局板块的区分,以及footer的遮挡空白区域, small代表版块的区分,large代表footer的遮挡空白区域 + */ + export default { + name: 'fspace', + props: { + type: { + type: String, + default: 'small' + } + } + } +</script> + +<style lang="less"> + .f-space-small { + width: 100%; + height: 10px; + background-color: @color-background-default; + } + .f-space-large { + width: 100%; + height: 49px; + background: transparent; + } + @media (device-width: 375px) and (device-height: 812px) and (-webkit-min-device-pixel-ratio : 3){ + .f-space-large { + height: 83px; + } + } +</style> diff --git a/src/components/common/FilterTab.vue b/src/components/common/FilterTab.vue new file mode 100644 index 0000000..160a8e6 --- /dev/null +++ b/src/components/common/FilterTab.vue @@ -0,0 +1,94 @@ +<template> + <div> + <div class="filter-tab"> + <span v-for="(item, index) in filterTab" + :key="index" + :class="{selected: activeIndex === index || (item.isPullDown && item.pullDownActive)}" + @click="handleFilterTab(index)"> + {{ item.content }} + <i class="iconfont icon-triangledown-fill" + :class="{'icon-triangleup-fill': item.activeTriangle }" + v-if="item.isPullDown"></i> + </span> + </div> + <div class="vux-1px-b"></div> + </div> +</template> + +<script> + /** + * Created by c.y on 2018/3/16. + * 组件的命名 项目名(F---filean) + 组件的描述(区别与框架的组件) + * 贷款的筛选tab + * 如果要使用这个组件,需要传递如下数组值 + * * filterTab: [ + { + isPullDown: true, // 是否有下拉选项(即三角形) + content: '筛选条件1', + pullDownActive: false, // 这个筛选条件是可以携带的,及点击一次就选中,后面一直选中, + activeTriangle: false // 下拉筛选三角形显示问题,列表展开三角形向上,收起三角形向下 + }, + { + isPullDown: false, + content: '筛选条件2', + pullDownActive: false + }, + { + isPullDown: false, + content: '筛选条件3', + pullDownActive: false + } + ] + * + */ + export default { + name: 'filter-tab', + data () { + return { + activeIndex: -1, // 初始化时候,都没选中 + } + }, + methods: { + // 点击筛选tab + handleFilterTab (index) { + this.activeIndex = index; + // 把当前点击的元素,传递给父组件 + this.$emit('on-click-tab', this.filterTab[index], index); + } + }, + props: { + filterTab: { + type: Array, + required: true + } + }, + deactivated(){ + this.activeIndex = -1; + } + } +</script> + +<style lang="less"> + @import "../../style/mixin"; + + .filter-tab { + position: relative; + width: 100%; + height: 32px; + font-size: @font-size-small; + line-height: 32px; + color: @color-text-primary; + .flexLayout(); + background: @color-white; + span { + flex: 1; + text-align: center; + } + .selected { + color: @color-primary; + } + .iconfont { + font-size: @font-size-tiny; + } + } +</style> diff --git a/src/components/common/IFooter.vue b/src/components/common/IFooter.vue new file mode 100644 index 0000000..301fcd2 --- /dev/null +++ b/src/components/common/IFooter.vue @@ -0,0 +1,71 @@ +<template> + <footer class="f-footer"> + <tabbar> + <tabbar-item @on-item-click="handlerItemClick" :selected="selectIndex === 0" link="/home"> + <i slot="icon" class="iconfont icon-home"></i> + <i slot="icon-active" class="iconfont icon-home-fill"></i> + <span slot="label">首页</span> + </tabbar-item> + <tabbar-item @on-item-click="handlerItemClick" :selected="selectIndex === 1" link="/assessment"> + <i slot="icon" class="iconfont icon-loan"></i> + <i slot="icon-active" class="iconfont icon-loan-fill"></i> + <span slot="label">信用</span> + </tabbar-item> + <tabbar-item @on-item-click="handlerItemClick" :selected="selectIndex === 2" link="/news"> + <i slot="icon" class="iconfont icon-news"></i> + <i slot="icon-active" class="iconfont icon-news-fill"></i> + <span slot="label">资讯</span> + </tabbar-item> + <tabbar-item @on-item-click="handlerItemClick" :selected="selectIndex === 3" link="/advisory"> + <i slot="icon" class="iconfont icon-wang"></i> + <i slot="icon-active" class="iconfont icon-wangfill"></i> + <span slot="label">咨询</span> + </tabbar-item> + </tabbar> + </footer> +</template> + +<script> + /** + * Created by c.y on 2018/3/20. + * 组件的命名 项目名(F---filean) + 组件的描述(区别与框架的组件) + * IOS上架的全局的footer + * selectIndex number类型 选中的那个tab + */ + import { Tabbar, TabbarItem } from 'vux' + + export default { + name: 'f-footer', + data () { + return { + selectIndex: 0 + } + }, + components: { + Tabbar, + TabbarItem, + }, + methods: { + handlerItemClick (index) { + this.selectIndex = index; + } + }, + props: { + index: { + type: Number, + default: 0 + } + }, + activated: function () { + this.selectIndex = this.index; + } + } +</script> + +<style lang="less"> + .f-footer { + .iconfont { + font-size: 24PX; + } + } +</style> diff --git a/src/components/common/IFooterV2.vue b/src/components/common/IFooterV2.vue new file mode 100644 index 0000000..4b6c7ef --- /dev/null +++ b/src/components/common/IFooterV2.vue @@ -0,0 +1,61 @@ +<template> + <footer class="f-footer"> + <tabbar> + <tabbar-item @on-item-click="handlerItemClick" :selected="selectIndex === 0" link="/iosnewsHome"> + <i slot="icon" class="iconfont icon-home"></i> + <i slot="icon-active" class="iconfont icon-home-fill"></i> + <span slot="label">首页</span> + </tabbar-item> + <tabbar-item @on-item-click="handlerItemClick" :selected="selectIndex === 1" link="/iosmine"> + <i slot="icon" class="iconfont icon-my"></i> + <i slot="icon-active" class="iconfont icon-my-fill"></i> + <span slot="label">我的</span> + </tabbar-item> + </tabbar> + </footer> +</template> + +<script> + /** + * Created by c.y on 2018/3/20. + * 组件的命名 项目名(F---filean) + 组件的描述(区别与框架的组件) + * IOS上架的全局的footer + * selectIndex number类型 选中的那个tab + */ + import {Tabbar, TabbarItem} from 'vux' + + export default { + name: 'f-footer', + data() { + return { + selectIndex: 0 + } + }, + components: { + Tabbar, + TabbarItem, + }, + methods: { + handlerItemClick(index) { + this.selectIndex = index; + } + }, + props: { + index: { + type: Number, + default: 0 + } + }, + activated: function () { + this.selectIndex = this.index; + } + } +</script> + +<style lang="less"> + .f-footer { + .iconfont { + font-size: 24PX; + } + } +</style> diff --git a/src/components/payKeyboard/PayKeyboard.vue b/src/components/payKeyboard/PayKeyboard.vue new file mode 100644 index 0000000..e9737f8 --- /dev/null +++ b/src/components/payKeyboard/PayKeyboard.vue @@ -0,0 +1,376 @@ +<template> + <div class="pay-box" v-if="isPay"> + <!-- <transition v-on:before-enter="beforeEnter"> --> + <div v-if="isPay"> + <!-- 标题 --> + <div class="title v-1px-b pr"> + <span>{{payTitle}}</span> + <span class="pa" @click="close"> + <svg t="1501505446265" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" + xmlns="http://www.w3.org/2000/svg" p-id="1904" xmlns:xlink="http://www.w3.org/1999/xlink" + width="18" height="18"> + <path + d="M550.659 490.565l324.395-324.386c10.945-10.945 10.945-28.699 0-39.644-10.948-10.95-28.704-10.95-39.648-0.004L511.01 450.916 186.625 126.53c-10.946-10.947-28.703-10.947-39.648 0-10.946 10.95-10.946 28.703 0 39.648l324.385 324.386-324.385 324.401c-10.946 10.944-10.946 28.703 0 39.65 10.945 10.943 28.702 10.943 39.648 0L511.01 530.213l324.396 324.401c10.944 10.944 28.7 10.944 39.648 0 10.945-10.946 10.945-28.705 0-39.649L550.66 490.565z" + p-id="1905"></path> + </svg> + </span> + </div> + <!--输入的密码--> + <div class="pas-box v-1px" v-show="keyShow"> + <div v-for="(pas,i) in pasDigits" :key="i" :class="{'v-1px-l':i>0}"> + <input type="password" :value="val[i]" disabled> + </div> + </div> + <!--忘记密码--> + <router-link to="/bnd/loan/resetPwd" tag="p" class="forgetPwd">忘记密码?</router-link> + <!--keyboard--> + <div class="key-box" v-if="keyShow"> + <div class="item v-1px-t" v-for="(item, i) in keyList" :key="i"> + <div class="key" v-for="(val, key) in item" :key="key" @touchstart="inputStart(val, $event)" + @touchend="inputEnd($event)" :class="{'v-1px-l':key!=0}"> + {{val}} + </div> + </div> + <div class="item v-1px-t"> + <div class="key " style="background: #e8e8e8"></div> + <div class="key v-1px-l" @touchstart="inputStart(0, $event)" @touchend="inputEnd($event)">0 + </div> + <div class="key v-1px-l" style="background: #e8e8e8" @touchstart="del($event)" + @touchend="inputEnd($event,'del')">del + </div> + </div> + </div> + <div style="text-align: center;" v-show='paySuc'> + <slot name='pay-status'> + {{payStatusText}} + </slot> + </div> + <!-- 密码输入完毕动画 --> + <div class="loading" v-show="lodingShow" ref="loading"> + <slot name='loading-ani'> + <svg t="1501508156392" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" + xmlns="http://www.w3.org/2000/svg" p-id="1936" xmlns:xlink="http://www.w3.org/1999/xlink" + width="100" height="100"> + <path + d="M914.9 682.1c-22 52.1-53.5 98.8-93.7 139s-86.9 71.7-139 93.7c-53.9 22.8-111.1 34.3-170.2 34.3s-116.3-11.5-170.1-34.3c-52.1-22-98.8-53.5-139-93.7s-71.7-86.9-93.7-139C86.4 628.3 74.8 571.1 74.8 512s11.5-116.3 34.3-170.2c22-52.1 53.5-98.8 93.7-139s86.9-71.7 139-93.7c43.3-18.3 88.8-29.4 135.7-33C497 74.6 512 58.4 512 38.9l0 0c0-21.8-18.6-39-40.3-37.3C207.8 22.1 0 242.8 0 512c0 282.8 229.2 512 512 512 269.2 0 489.9-207.8 510.4-471.7 1.7-21.7-15.5-40.3-37.3-40.3l0 0c-19.5 0-35.8 15-37.3 34.4C944.2 593.3 933.2 638.8 914.9 682.1z" + p-id="1937" fill="#6A8FE5"></path> + </svg> + </slot> + </div> + </div> + <!-- </transition> --> + </div> +</template> +<script> + let timer = null; + export default { + name: 'vue-pay-keyboard', + props: { + payTitle: { + type: String, + default: '请输入支付密码' + }, + highlightColor: {// 高亮颜色 + type: String, + default: '#ccc' + }, + pasDigits: {// 密码位数 + type: Number, + default: 6 + }, + isPay: { + type: Boolean, + default: false + } + }, + data() { + return { + keyShow: true, + lodingShow: false, + paySuc: false, + val: [], + keyList: [ + [1, 2, 3], + [4, 5, 6], + [7, 8, 9] + ], + payStatus: false + } + }, + computed: { + payStatusText() { + return this.payStatus ? '支付成功!' : '支付失败,请重输密码!' + } + }, + methods: { + inputEnd(e, d) { + this.unhighLight(e.currentTarget, d) + }, + // 恢复默认 + unhighLight(ele, d) { + if (d) { + ele.style.backgroundColor = '#e8e8e8' + } else { + ele.style.backgroundColor = '#fff' + } + }, + // 高亮 + highlight(ele) { + ele.style.backgroundColor = this.highlightColor + }, + // 用户输入 + inputStart(val, e) { + if (this.val.length < this.pasDigits) { + this.val.push(val) + if (this.val.length === this.pasDigits) { + // 密码输入完毕 + this.$emit('pas-end', this.val.join('')) + this.keyShow = false; + this.lodingShow = true; + this.$refs.loading.classList.add('loading-ani') + this.val = []; + } + } else { + this.$emit('pas-end', this.val.join('')) + } + // 设置高亮 + this.highlight(e.currentTarget) + }, + // 删除输入 + del() { + if (this.val.length > 0) { + this.val.pop() + } + }, + close() { + this.$emit('close') + }, + $payStatus(flag) { + if (typeof flag != 'boolean') return; + this.payStatus = flag; + this.lodingShow = false; + this.paySuc = true; + if (flag) { + timer = setTimeout(() => { + clearTimeout(timer) + this.$emit('close') + this.keyShow = true; + this.paySuc = false; + this.$refs.loading.classList.remove('loading-ani') + }, 800) + } else { + timer = setTimeout(() => { + clearTimeout(timer) + this.keyShow = true; + this.paySuc = false; + this.$refs.loading.classList.remove('loading-ani') + }, 800) + } + } + } + } +</script> +<style lang="less" scoped> + div, + span, + input { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -o-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box + } + + input { + background: none; + outline: none; + border: none; + background-color: transparent; + border-color: transparent; + -webkit-appearance: none; + } + + @keyframes loadingRotate { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg) + } + } + + .title { + text-align: center; + height: 50px; + line-height: 50px; + margin-bottom: 25px; + position: relative; + } + + .pa { + position: absolute; + right: 15px; + top: 50%; + transform: translateY(-50%); + display: flex; + align-content: center; + justify-content: center; + } + + .loading { + display: flex; + align-items: center; + justify-content: center; + } + + .loading-ani { + animation: loadingRotate .8s infinite; + } + + .pay-box { + z-index: 111; + position: fixed; + left: 0; + top: 0; + width: 100%; + height: 100%; + overflow-x: hidden; + overflow-y: hidden; + background-color: rgba(0, 0, 0, .5); + z-index: 999; + > div { + position: absolute; + width: 100%; + height: 68%; + left: 0; + bottom: 0; + color: #363636; + background-color: #fff; + } + } + + .v-1px-t, + .v-1px-l, + .v-1px-b, + .v-1px { + position: relative; + } + + .v-1px-b:after { + content: " "; + position: absolute; + left: 0; + bottom: 0; + right: 0; + height: 1px; + border-bottom: 1px solid #C7C7C7; + color: #C7C7C7; + transform-origin: 0 100%; + transform: scaleY(0.5); + } + + .v-1px-t:before { + z-index: 112; + position: absolute; + left: 0; + top: 0; + right: 0; + height: 1px; + content: ''; + border-top: 1px solid #c7c7c7; + transform: scaleY(.5); + color: #c7c7c7; + transform-origin: 0 0; + } + + .v-1px-l:before { + position: absolute; + left: 0; + top: 0; + bottom: 0; + width: 1px; + content: ''; + border-left: 1px solid #c7c7c7; + transform: scaleX(.5); + color: #c7c7c7; + transform-origin: 0 0; + } + + .v-1px:before { + position: absolute; + left: 0; + top: 0; + width: 200%; + height: 200%; + content: ''; + border: 1px solid #c7c7c7; + transform: scale(.5); + color: #c7c7c7; + transform-origin: left top; + z-index: 1000; + } + + /*键盘盒子*/ + + .key-box { + position: absolute; + left: 0; + bottom: 0; + width: 100%; + font-size: 16px; + color: #363636; + .item { + display: flex; + text-align: center; + line-height: 50px; + height: 50px; + } + .key { + cursor: pointer; + width: 100%; + height: 100%; + flex: 1; + } + } + + /*输入密码框*/ + + .pas-box { + width: 80%; + height: 45px; + display: flex; + margin: 0 auto; + line-height: 45px; + text-align: center; + > div { + flex: 1; + display: flex; + align-items: center; + justify-content: center; + > input { + width: 100%; + font-size: 18px; + text-align: center; + height: 100%; + display: block; + } + } + } + + //忘记密码 + .forgetPwd { + width: 80%; + margin: 15px auto 0; + text-align: right; + color: @color-primary; + } + + // 进入动画 + .slide-enter-active { + transition: all 10s ease; // transform: translateY(0px) + } + + .slide-enter { + transform: translateY(500px) + } +</style> diff --git a/src/components/upload/uploadImg.vue b/src/components/upload/uploadImg.vue new file mode 100644 index 0000000..b54d238 --- /dev/null +++ b/src/components/upload/uploadImg.vue @@ -0,0 +1,243 @@ +<template> + <div class="upload"> + <div class="IDcardbgDiv"> + <x-img class="imgcontent" :default-src="defaultImg" :src="currentImg" alt=""></x-img> + </div> + <x-button class="IDCardUpLoadBut" v-text="butName"></x-button> + <input class="fileUploadInput" type="file" @change="handle($event)" capture="camera" accept="image/*"> + </div> +</template> +<script> + import EXIF from 'exif-js'; + import {XImg, XButton} from 'vux'; + + export default { + data () { + return { + imgSrc: '' + }; + }, + props: [ + 'butName', + 'defaultImg', + 'currentImg' + ], + components: { + XImg, XButton + }, + methods: { + handle (evt) { // 图片变化后的回调函数 + const files = Array.prototype.slice.call(evt.target.files); + let that = this; + files.forEach(function (file, i) { + var orientation; + if (!/\/(?:jpeg|png|gif)/i.test(file.type)) return; + // 读取图片的元信息 + EXIF.getData(file, function () { + orientation = EXIF.getTag(this, 'Orientation'); + }); + + let reader = new FileReader(); + reader.onload = function () { + let result = this.result; + // 使用exif + that.getImgData(this.result, orientation, function (data) { + // 这里可以使用校正后的图片data了 + var img = new Image(); + img.src = data; + // 图片加载完毕之后进行压缩,然后上传 + if (img.complete) { + callback(); + } else { + img.onload = callback; + } + function callback() { + + var data = that.compress(img); +// that.imgSrc = data; + that.upload(data, file.type, file.name); + // 发送后台请求 + } + }); + }; + reader.readAsDataURL(file); + }); + }, + // 压缩图片 + compress (img) { + // 用于压缩图片的canvas + let canvas = document.createElement('canvas'); + let ctx = canvas.getContext('2d'); + + // 瓦片canvas + var tCanvas = document.createElement('canvas'); + var tctx = tCanvas.getContext('2d'); + + let width = img.width; + let height = img.height; + + // 如果图片大于四百万像素,计算压缩比并将大小压至400万以下 + var ratio; + if ((ratio = width * height / 4000000) > 1) { + ratio = Math.sqrt(ratio); + width /= ratio; + height /= ratio; + } else { + ratio = 1; + } + canvas.width = width * 2; + canvas.height = height * 2; + // 铺底色 + ctx.fillStyle = '#fff'; + ctx.fillRect(0, 0, canvas.width, canvas.height); + // 如果图片像素大于100万则使用瓦片绘制 + var count; + if ((count = width * height / 1000000) > 1) { + count = ~~(Math.sqrt(count) + 1); // 计算要分成多少块瓦片 + // 计算每块瓦片的宽和高 + var nw = ~~(width / count); + var nh = ~~(height / count); + tCanvas.width = nw; + tCanvas.height = nh; + for (var i = 0; i < count; i++) { + for (var j = 0; j < count; j++) { + tctx.drawImage(img, i * nw * ratio, j * nh * ratio, nw * ratio * 2, nh * ratio * 2, 0, 0, nw, nh); + ctx.drawImage(tCanvas, i * nw, j * nh, nw * 2, nh * 2); + } + } + } else { + ctx.drawImage(img, 0, 0, width * 2, height * 2); + } + + + // 进行最小压缩 + let ndata = canvas.toDataURL('image/jpeg', 0.8); + return ndata; + }, + // 上传图片 + upload (basestr, type, name) { + let text = window.atob(basestr.split(',')[1]); + let buffer = new ArrayBuffer(text.length); + let ubuffer = new Uint8Array(buffer); + + for (let i = 0; i < text.length; i++) { + ubuffer[i] = text.charCodeAt(i); + } + + let Builder = window.WebKitBlobBuilder || window.MozBlobBuilder; + let blob; + + if (Builder) { + let builder = new Builder(); + builder.append(buffer); + blob = builder.getBlob(type); + } else { + blob = new window.Blob([buffer], {type: type}); + } + + var post = { + 'file': basestr, + 'extName': 'jpeg' + }; + // 选择完毕触发事件 + this.$emit('select-complete', post); + }, + // 图片旋转处理 + getImgData: function (img, dir, next) { + // @param {string} img 图片的base64 + // @param {int} dir exif获取的方向信息 + // @param {function} next 回调方法,返回校正方向后的base64 + var image = new Image(); + let canvas = document.createElement('canvas'); + let ctx = canvas.getContext('2d'); + image.onload = function () { + let resultWidth = 0; + let resultHeight = 0; + let maxWidthOrHeight = 1024; + let drawWidth = this.naturalWidth; + let drawHeight = this.naturalHeight; + + // 以下改变图片大小,控制最大宽度为1024 + var maxSide = Math.max(drawWidth, drawHeight); + if (maxSide > maxWidthOrHeight) { + let minSide = Math.min(drawWidth, drawHeight); + minSide = minSide / maxSide * maxWidthOrHeight; + maxSide = maxWidthOrHeight; + if (drawWidth > drawHeight) { + resultWidth = maxSide; + resultHeight = minSide; + } else { + resultWidth = minSide; + resultHeight = maxSide; + } + } + + if (dir === 3) { + canvas.width = resultWidth; + canvas.height = resultHeight; + ctx.translate(resultWidth, resultHeight); + ctx.rotate(Math.PI); + } else if (dir === 6) { + canvas.width = resultHeight; + canvas.height = resultWidth; + ctx.translate(resultHeight, 0); + ctx.rotate(Math.PI / 2); + } else if (dir === 8) { + canvas.width = resultHeight; + canvas.height = resultWidth; + ctx.translate(0, resultWidth); + ctx.rotate(-Math.PI / 2); + } else { + canvas.width = resultWidth; + canvas.height = resultHeight; + } + ctx.drawImage(this, 0, 0, resultWidth, resultHeight) + // 返回校正图片 + next(canvas.toDataURL('image/jpeg', 0.8)); + } + image.src = img; + } + } + }; +</script> +<style lang="less"> + @import "../../style/mixin"; + .IDcardbgDiv { + background-image: url('../../assets/img/IDcardbg.png'); + background-size: 130px 80px; + } + + .imgcontent { + width: auto; + height: 70px; + padding-top: 5px; + } + + .fileUploadInput { + opacity: 0; + z-index: 99; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + } + + .IDCardUpLoadBut { + margin-top: 20px; + width: 80%; + height: 30px; + color: @color-white; + border-radius: 15px; + border: none; + font-size: @font-size-small; + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + } + + .upload { + position: relative; + width: 130px; + margin: 0 auto; + text-align: center; + } +</style> diff --git a/src/config/config.js b/src/config/config.js new file mode 100644 index 0000000..989eed5 --- /dev/null +++ b/src/config/config.js @@ -0,0 +1,97 @@ +/** + * c.k 2017/11/15 创建 + * c.y 2018/3/16 修改 (把增加了获取项目的动态配置的方法) + * 获取设备的信息以及渠道号 + * 获取项目的名称,logo,协议等等动态配置 + */ + +import device from '../tool/deviceInfo'; // 设备信息 +import channel from '../tool/channel'; // 获取渠道编号 +import jsBridge from '../tool/jsBridge'; // 安卓/iOS获取设备的信息已经cn值 +import systemApi from '../api/api'; +import codeManage from '../api/statusCodeManage'; + +// 设置客户端的信息 +function setClientInfo () { + // 当前的设备信息 + let currentDeviceInfo = { + 'ostype': device.getDeviceType(), // 系统类型 + 'cn': '', + 'resolution': window.screen.height + '*' + window.screen.width, + 'chanNo': '', // jtjinfu 100 channel.GetUrlParam('chanNo') + 'childChan': '', // '308' 100, appStore + 'isApp': '0', + 'areaCode':'510100' + // 'appVersion':"1.0.0" + }; + let _newClientInfo = window.localStorage.getItem('newClientInfo'); + if(_newClientInfo){ + _newClientInfo = JSON.parse(_newClientInfo); + _newClientInfo.cn = channel.getCnVal(); + if(!_newClientInfo.areaCode){ + _newClientInfo.areaCode = '510100'; // 界面刷新覆盖默认值 + } + window.localStorage.setItem('newClientInfo', JSON.stringify(_newClientInfo)); + }else{ + currentDeviceInfo.cn = channel.getCnVal(); + window.localStorage.setItem('newClientInfo', JSON.stringify(currentDeviceInfo)); + } + + + // 如果设置是安卓/iOS的话,就通过jsBridge来获取设备信息,以及cn值 + jsBridge.fetchDeviceInfo(); + // let _deviceInfo = window.localStorage.getItem('deviceInfo'); + // if (_deviceInfo) { + // _deviceInfo = JSON.parse(_deviceInfo); + // for (let key in _deviceInfo) { + // currentDeviceInfo[key] = _deviceInfo[key]; + // } + // } else { + // currentDeviceInfo.ostype = '03'; + // } + +} + + + +// 获取项目的配置信息,项目的标题,logo,协议 +function fetchProductConfig () { + return systemApi.getProductConfig(); +} + +// 配置产品信息 +function setProductInfo (prodConfig, prodTitle) { + window.localStorage.setItem('newProdConfig', prodConfig.replace(/commerce/g,'finlean_wallet')); + document.getElementById('productTitle').innerHTML = prodTitle; +} + +// 设置项目配置信息 +async function setProductConfig () { + // 获取当前渠道号 + let clientInfo = JSON.parse(window.localStorage.getItem('newClientInfo')); + let localChannelNo = clientInfo.cn; + let localChannelNum = clientInfo.chanNo; + try { + let productConfig = await fetchProductConfig(); + // 如果本地有chanNo + if (localChannelNum) { + let currentProdConfig = productConfig.chanBaseInfo[localChannelNum]; + setProductInfo(JSON.stringify(currentProdConfig), currentProdConfig.title); + } else { + // 根据本地渠道号 LAf4,获取渠道编号 100 + let currentChannelNum = productConfig.chanSign[localChannelNo]; + // 根据当前渠道获取对应的产品信息, 并进行设置 + if (currentChannelNum) { + let currentProdConfig = productConfig.chanBaseInfo[currentChannelNum]; + setProductInfo(JSON.stringify(currentProdConfig), currentProdConfig.title); + } + } + } catch (error) { + codeManage.showTipOfStatusCode(error); + } +} + +export { + setClientInfo, + setProductConfig +} diff --git a/src/main.js b/src/main.js new file mode 100644 index 0000000..670ac95 --- /dev/null +++ b/src/main.js @@ -0,0 +1,116 @@ +/** + * Created by c.y on 2018/3/17. + * 项目的入口文件 + */ +import Vue from 'vue'; +import App from './App'; +import store from './store/index'; +import router from './router/index'; +import FastClick from 'fastclick'; // 引入fastclick 解决移动端点击问题 +import { AjaxPlugin, ConfirmPlugin, ToastPlugin } from 'vux'; +import androidBack from './tool/pageBackByAndroid'; + +require('core-js/library/fn/promise'); // 兼容安卓4.4打包的问题 +require('./assets/iconfont/iconfont'); // 加载iconfontsvg +Vue.config.productionTip = false; // 关闭生产的提示 +Vue.use(AjaxPlugin); // axios 模块 +Vue.use(ConfirmPlugin); +Vue.use(ToastPlugin); +FastClick.attach(document.body); // 配置fastclick +import SystApi from './api/api'; + +/* eslint-disable no-new */ +new Vue({ + store, + router, + render: h => h(App) +}).$mount('#app-box'); + + +// 加载微信 分享功能 如果不是微信环境 就不执行以下代码 TODO +let _WXurl = window.location.origin + window.location.pathname; +// let _WXurl = 'https://loan.finlean.top/'; +// let _WXurl = window.location.origin; +SystApi.getWXToken({url:_WXurl}).then(function (res) { + if (res.errorCode === 0) { + // 第二步骤 只需要首页地址分享 ,需要在每次变化时调用 + wx.config({ + debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 + appId: res.body.appId, + timestamp: res.body.timestamp, // 必填,生成签名的时间戳 + nonceStr: res.body.nonceStr, // 必填,生成签名的随机串 + signature: res.body.signature,// 必填,签名,见附录1 + jsApiList: ['checkJsApi', 'onMenuShareTimeline', 'onMenuShareAppMessage'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 + }); + + wx.hideMenuItems({ + menuList: ['menuItem:copyUrl'], // 要隐藏的菜单项,只能隐藏“传播类”和“保护类”按钮,所有menu项见附录3 + success:function(res){ + + } + }); + + // 必须放在 回调函数里,不然当在注册的时候 ,有可能还没有返回数据回来,例如刷新问题 + // 微信检查接口列表 + wx.checkJsApi({ + jsApiList: ['checkJsApi','hideMenuItems', 'onMenuShareTimeline', 'onMenuShareAppMessage'], // 需要检测的JS接口列表 + success: function (res) { + // console.log(res); + } + }); + + wx.ready(function () { // 页面加载完成后用户就有可能调用微信的分享,所以当页面ready 完后就加载 + // 拼接分享链接 + // 获取cn 值 + + let _cn = ''; + if(_cn == null || _cn == undefined || _cn==''){ + let _tempNewClientInfoUrl = window.localStorage.getItem('newClientInfo'); + if(_tempNewClientInfoUrl){ + _tempNewClientInfoUrl = JSON.parse(_tempNewClientInfoUrl); + _cn = _tempNewClientInfoUrl.cn; + } + } + let _shareLink = window.location.origin + window.location.pathname + '#/f-main?cn=' + _cn; + // let _shareLink ='https://loan.finlean.top/commerce/wechat/S4Xn'; + + wx.onMenuShareTimeline({ //例如分享到朋友圈的API + title: '纷领钱包', // 分享标题 + link: _shareLink, // 分享链接 + imgUrl: 'https://loan.finlean.top/image/share/finlean_wallets.png', // 分享图标 + success: function () { + // 用户确认分享后执行的回调函数 + console.log('分享回调函数'); + }, + cancel: function () { + console.log('取消分享回调函数'); + } + }); + + wx.onMenuShareAppMessage({ // 分享好友 + title: '纷领钱包', // 分享标题 + link: _shareLink, // 分享链接 + desc: '我在用纷领钱包,线上借款,审批神速,额度最高20万,2分钟极速下款,推荐你试试', // 分享描述 + imgUrl: 'https://loan.finlean.top/image/share/finlean_wallets.png', // 分享图标 + success: function () { + console.log('分享回调函数'); + }, + cancel: function () { + console.log('取消分享回调函数'); + // 用户取消分享后执行的回调函数 + } + }); + }); +// 微信预加载失败回调 + wx.error(function (res) { + console.log(res); + }); + + } +}, function (error) { + if (error.response) { + // console.log(error.response); + } +}); + +androidBack.androidBackBtn(); diff --git a/src/router/index.js b/src/router/index.js new file mode 100644 index 0000000..8a3899a --- /dev/null +++ b/src/router/index.js @@ -0,0 +1,75 @@ +/** + * Created by c.y on 2018/3/16. + * 全局的router的配置, 以及其跳转的控制 + */ + +import Vue from 'vue'; +import VueRouter from 'vue-router'; +import store from '../store/index'; +import {setClientInfo, setProductConfig} from '../config/config'; // 配置信息 +import projectRouter from './router'; +import judgmentUrl from '../tool/judgmentUrl'; + + +setClientInfo(); // 将设备信息写入本地存储 +setProductConfig(); // 获取项目配置信息 + +Vue.use(VueRouter); + +// 路由的动态加载,最先开始加载项目路由 +// 如果是app的话,需要动态加载路由配置 +let router = new VueRouter(projectRouter); + +// 路由的跳转的控制 +router.beforeEach((to, from, next) => { + + // 如果微信分享的话,微信会在地址栏添加额外参数 + if (judgmentUrl.getUrlQuestionMark()) { + window.location.href = judgmentUrl.getRightProjectUrl(); + } + // arr里存放需要登录状态下才能访问的页面的name + // 过滤 实名认证,申请记录,修改密码 + // 收入贷界面 + let arr = ['f-auth', 'f-apply-record', 'f-update-password' + , 'incoPersonalInfo', 'incoHouseAndJobInfo', 'incoBindCard', 'incoPhotoInfo', 'incoAuditResults']; + let loginFalse = ['f-login', 'f-register', 'f-forget-password']; // 登录后不能进入 登录、注册、忘记密码界面 + //判断是否登录,如果没有登录则判断是否往arr里的页面进行跳转,如果是,则跳转到登录页 + let sid = window.sessionStorage.getItem('newSid'); + if (sid) { // 已经登录 + if (loginFalse.indexOf(to.name) !== -1) { + window.history.go(-1); + } + } else { // 未登录 + if (arr.indexOf(to.name) !== -1) { + next('f-login'); + } + } + next(); +}); + +router.afterEach((to, from) => { + + if (to.name == '/f-main') { +// 微信预加载 分享功能 + + } + + // 记录访问页面地址 + store.commit('UPDATE_PAGE_ACCESS_RECORD', {pageName: {name: to.name, fullPath: to.fullPath}}); + // 跳转到顶部,解决ios空白问题,不要问为什么这么写,删掉一个就会出错,谨慎操作 + window.scrollTo(0, 2); + setTimeout(function () { + store.commit('UPDATE_APP_STYLE', { + height: document.documentElement.clientHeight + 1 + }); + window.scrollTo(0, 0); + store.commit('UPDATE_APP_STYLE', { + height: '100%', + overflow: 'auto', + '-webkit-overflow-scrolling': 'touch' + }); + }, 5); + +}); + +export default router; diff --git a/src/router/prodBND.js b/src/router/prodBND.js new file mode 100644 index 0000000..bfe3a1b --- /dev/null +++ b/src/router/prodBND.js @@ -0,0 +1,247 @@ +/** + * 作者:hzq + * 文件说明:包你贷路由 + * Created by hzq on 2018/6/15 + * + */ + +export default [ +// ===========包你贷-【授信】页面路由 start=========== + { + path: '/bnd/Credit/listgeren',//个人基本信息 + name: 'bnd/Credit/listgeren', + component: function (resolve) { + require(['../views/bnd/credit/listgeren'], resolve); + } + }, + { + path: '/bnd/Credit/companyInfo',//公司信息 + name: 'bnd/Credit/companyInfo', + component: function (resolve) { + require(['../views/bnd/credit/companyInfo'], resolve); + } + }, + { + path: '/bnd/Credit/contactInfo',//联系人信息 + name: 'bnd/Credit/contactInfo', + component: function (resolve) { + require(['../views/bnd/credit/contactInfo'], resolve); + } + }, + { + path: '/bnd/Credit/passwordInfo',//设置交易密码 + name: 'bnd/Credit/passwordInfo', + component: function (resolve) { + require(['../views/bnd/credit/passwordInfo'], resolve); + } + }, + { + path: '/bnd/Credit/bankInfo',//绑定银行卡 + name: 'bnd/Credit/bankInfo', + component: function (resolve) { + require(['../views/bnd/credit/bankInfo'], resolve); + } + }, + { + path: '/bnd/Credit/bindingCode',//绑定银行卡验证码 + name: 'bnd/Credit/bindingCode', + component: function (resolve) { + require(['../views/bnd/credit/bindingCode'], resolve); + } + }, + { + path: '/bnd/Credit/idPicture',//身份证照片上传 + name: 'bnd/Credit/idPicture', + component: function (resolve) { + require(['../views/bnd/credit/idPicture'], resolve); + } + }, + { + path: '/bnd/Credit/pictureUp',//身份证照片上传成功 + name: 'bnd/Credit/pictureUp', + component: function (resolve) { + require(['../views/bnd/credit/pictureUp'], resolve); + } + }, + { + path: '/bnd/Credit/authorization',//芝麻授权 + name: 'bnd/Credit/authorization', + component: function (resolve) { + require(['../views/bnd/credit/authorization'], resolve); + } + }, + { + path: '/bnd/Credit/juxinliAuthorization',//聚立信授权 + name: 'bnd/Credit/juxinliAuthorization', + component: function (resolve) { + require(['../views/bnd/credit/juxinliAuthorization'], resolve); + } + }, + { + path: '/bnd/Credit/infoOk',//信息确认 + name: 'bnd/Credit/infoOk', + component: function (resolve) { + require(['../views/bnd/credit/infoOk'], resolve); + } + }, + { + path: '/bnd/Credit/waitForHandle',//等待银行卡绑定处理 + name: 'bnd/Credit/waitForHandle', + component: function (resolve) { + require(['../views/bnd/credit/waitForHandle'], resolve); + } + }, + { + path: '/bnd/Credit/messageCode',//短信验证 + name: 'bnd/Credit/messageCode', + component: function (resolve) { + require(['../views/bnd/credit/messageCode'], resolve); + } + }, + { + path: '/bnd/Credit/subSuss',//提交成功等待处理 + name: 'bnd/Credit/subSuss', + component: function (resolve) { + require(['../views/bnd/credit/subSuss'], resolve); + } + }, + { + path: '/bnd/credit/juxinli',//聚信立 + name: 'bnd/credit/juxinli', + component: function (resolve) { + require(['../views/bnd/credit/juxinli'], resolve); + } + }, + { + path: '/bnd/credit/sesame',//芝麻 + name: 'bnd/credit/sesame', + component: function (resolve) { + require(['../views/bnd/credit/sesame'], resolve); + } + }, + { + path: '/bnd/credit/personalChanges',//个人基本信息修改 + name: 'bnd/credit/personalChanges', + component: function (resolve) { + require(['../views/bnd/credit/personalChanges'], resolve); + } + }, + { + path: '/bnd/credit/companyModification',//公司信息修改 + name: 'bnd/credit/companyModification', + component: function (resolve) { + require(['../views/bnd/credit/companyModification'], resolve); + } + } + , +// ===========包你贷-【授信】页面路由 end=========== +// ===========包你贷-【贷款】页面路由 start=========== + { + path: '/bnd/loan/quota',//贷款查询 + name: 'bnd/loan/quota', + component: function (resolve) { + require(['../views/bnd/loan/quota'], resolve); + } + }, + { + path: '/bnd/loan/loanInfo',//借款 + name: 'bnd/loan/loanInfo', + component: function (resolve) { + require(['../views/bnd/loan/loanInfo'], resolve); + } + }, + { + path: '/bnd/loan/quotaInfo',//贷款信息确认 + name: 'bnd/loan/quotaInfo', + component: function (resolve) { + require(['../views/bnd/loan/quotaInfo'], resolve); + } + }, + { + path: '/bnd/loan/subSuccess',//提交成功 + name: 'bnd/loan/subSuccess', + component: function (resolve) { + require(['../views/bnd/loan/subSuccess'], resolve); + } + }, + { + path: '/bnd/loan/modifyPasswrod',//修改交易密码 + name: 'bnd/loan/modifyPasswrod', + component: function (resolve) { + require(['../views/bnd/loan/modifyPasswrod'], resolve); + } + }, + { + path: '/bnd/loan/modifyPasswrodSuccess',//修改交易密码成功页面 + name: 'bnd/loan/modifyPasswrodSuccess', + component: function (resolve) { + require(['../views/bnd/loan/modifyPasswrodSuccess'], resolve); + } + }, + { + path: '/bnd/loan/loanMessage',//短信验证 + name: 'bnd/loan/loanMessage', + component: function (resolve) { + require(['../views/bnd/loan/loanMessage'], resolve); + } + }, + { + path: '/bnd/loan/resetPwd',//重置交易密码 + name: 'bnd/loan/resetPwd', + component: function (resolve) { + require(['../views/bnd/loan/resetPwd'], resolve); + } + }, + { + path: '/bnd/loan/resetSuccess',//重置交易密码成功页面 + name: 'bnd/loan/resetSuccess', + component: function (resolve) { + require(['../views/bnd/loan/resetSuccess'], resolve); + } + }, +// ===========包你贷-【贷款】页面路由 end=========== +// ===========包你贷-【还款】页面路由 start=========== + { + path: '/bnd/repayMent/loanDetails',//贷款查询页面,所有贷款账单显示 + name: 'bnd/repayMent/loanDetails', + component: function (resolve) { + require(['../views/bnd/repayMent/loanDetails'], resolve); + } + }, + { + path: '/bnd/repayMent/billDetails',//账单详情页面 + name: 'bnd/repayMent/billDetails', + component: function (resolve) { + require(['../views/bnd/repayMent/billDetails'], resolve); + } + }, + { + path: '/bnd/repayMent/repayPlan',//还款计划页面 + name: 'bnd/repayMent/repayPlan', + component: function (resolve) { + require(['../views/bnd/repayMent/repayPlan'], resolve); + } + }, + { + path: '/bnd/repayMent/advanceSettle',//提前结清页面 + name: 'bnd/repayMent/advanceSettle', + component: function (resolve) { + require(['../views/bnd/repayMent/advanceSettle'], resolve); + } + }, + { + path: '/bnd/repayMent/activeRepayment',//主动还款页面 + name: 'bnd/repayMent/activeRepayment', + component: function (resolve) { + require(['../views/bnd/repayMent/activeRepayment'], resolve); + } + }, + { + path: '/bnd/repayMent/subSuccess',//提交成功 + name: 'bnd/repayMent/subSuccess', + component: function (resolve) { + require(['../views/bnd/repayMent/subSuccess'], resolve); + } + } +// ===========包你贷-【还款】页面路由 end=========== +]; diff --git a/src/router/project.js b/src/router/project.js new file mode 100644 index 0000000..09e2d6c --- /dev/null +++ b/src/router/project.js @@ -0,0 +1,287 @@ +/* + * @Author: c.y + * @Date: 2018-08-15 + * @Last Modified by: c.y + * @Last Modified time: 2018-08-15 + * 本项目的路由 + */ + +export default [ + //======================== 空白路由界面 ========================== + { + path: '/', // 空白页 + name: '/', + component: function (resolve) { + require(['../views/home/blankPage'], resolve); + } + }, + { + path: '/f-main', // 首页 + name: '/f-main', + component: function (resolve) { + require(['../views/home/home'], resolve); + } + }, + { + path: '/f-news', // 资讯首页 + name: 'f-news', + component: function (resolve) { + require(['../views/news/index'], resolve); + } + }, + { + path: '/f-news/:id', // 资讯内容页 + name: 'f-news-detail', + component: function (resolve) { + require(['../views/news/newsDetail'], resolve); + } + }, + { + path: '/f-position', // 定位 + name: 'f-position', + component: function (resolve) { + require(['../views/home/position'], resolve); + } + }, + { + path: '/f-compute', // 计算器的首页 + name: 'f-calculator', + component: function (resolve) { + require(['../views/home/calculator'], resolve); + }, + }, + { + path: '/f-assessment', // 额度评估的首页 + name: 'f-assessment', + component: function (resolve) { + require(['../views/home/assessment'], resolve); + } + }, + { + path: '/f-assessment-result', // 额度评估的结果页 + name: 'f-assessment-result', + component: function (resolve) { + require(['../views/home/assessmentResult'], resolve); + } + }, + { + path: '/f-loan', // 贷款 + name: 'f-loan', + component: function (resolve) { + require(['../views/loan/index'], resolve); + }, + children: [ + { + path: '', // 极速贷款 + redirect: 'f-speed', + }, + { + path: 'f-speed', // 极速贷款 + name: 'f-speed-loan', + component: function (resolve) { + require(['../views/loan/speedLoan'], resolve); + } + }, + { + path: 'f-bank', // 银行贷款 + name: 'f-bank-loan', + component: function (resolve) { + require(['../views/loan/bankLoan'], resolve); + } + }, + { + path: 'f-credit', // 信用卡 + name: 'f-credit-loan', + component: function (resolve) { + require(['../views/loan/creditLoan'], resolve); + } + } + ] + }, + { + path: '/f-news', // 资讯首页 + name: 'f-news', + component: function (resolve) { + require(['../views/news/index'], resolve); + } + }, + { + path: '/f-news-detail', // 资讯内容页 + name: 'f-news-detail', + component: function (resolve) { + require(['../views/news/newsDetail'], resolve); + } + }, + { + path: '/f-position', // 定位 + name: 'f-position', + component: function (resolve) { + require(['../views/home/position'], resolve); + } + }, + { + path: '/f-compute', // 计算器的首页 + name: 'f-calculator', + component: function (resolve) { + require(['../views/home/calculator'], resolve); + } + }, + { + path: '/f-job-loan', // 职业分类的type + name: 'f-job-loan', + component: function (resolve) { + require(['../views/loan/jobTypeLoan'], resolve); + } + }, + { + path: '/f-credit-detail', // 信用卡贷款详情 + name: 'f-credit-detail', + component: function (resolve) { + require(['../views/loan/creditDetail'], resolve); + } + }, + { + path: '/f-loan-detail', // 贷款详情 + name: 'f-loan-detail', + component: function (resolve) { + require(['../views/loan/loanDetail'], resolve); + } + }, + { + path: '/f-mine', // 我的的首页 + name: 'f-mine', + component: function (resolve) { + require(['../views/mine/index'], resolve); + } + }, + { + path: '/f-login', // 我的--登录 + name: 'f-login', + component: function (resolve) { + require(['../views/mine/login'], resolve); + } + }, + { + path: '/f-register', // 我的--注册 + name: 'f-register', + component: function (resolve) { + require(['../views/mine/register'], resolve); + } + }, + { + path: '/f-forget-password', // 我的--忘记密码 + name: 'f-forget-password', + component: function (resolve) { + require(['../views/mine/forgetPassword'], resolve); + } + }, + { + path: '/f-update-password', // 我的--修改密码 + name: 'f-update-password', + component: function (resolve) { + require(['../views/mine/updatePassword'], resolve); + }, + // 需要权限 + meta: { + requireAuth: true + } + }, + { + path: '/f-auth', // 我的--实名认证 + name: 'f-auth', + component: function (resolve) { + require(['../views/mine/auth'], resolve); + } + }, + { + path: '/f-setting', // 我的--设置 + name: 'f-setting', + component: function (resolve) { + require(['../views/mine/setting'], resolve); + } + }, + { + path: '/f-message-center', // 我的--消息中心 + name: 'f-message-center', + component: function (resolve) { + require(['../views/mine/messageCenter'], resolve); + } + }, + { + path: '/f-message/:id', // 我的--消息详情 + name: 'f-message-detail', + component: function (resolve) { + require(['../views/mine/messageDetail'], resolve); + } + }, + { + path: '/f-apply-record', // 我的--申请记录 + name: 'f-apply-record', + component: function (resolve) { + require(['../views/mine/applyRecord'], resolve); + } + }, + { + path: '/f-feedback', // 我的--意见反馈 + name: 'f-feedback', + component: function (resolve) { + require(['../views/mine/feedback'], resolve); + } + }, + { + path: '/f-help-center', // 我的--帮助中心 + name: 'f-help-center', + component: function (resolve) { + require(['../views/mine/helpCenter/helpCenter'], resolve); + } + }, + { + path: '/f-registration-problem', // 我的--帮助中心--注册问题 + name: 'f-registration-problem', + component: function (resolve) { + require(['../views/mine/helpCenter/registrationProblem'], resolve); + } + }, + { + path: '/f-question/:questionId', // 我的--问题详情 + name: 'f-question-detail', + component: function (resolve) { + require(['../views/mine/questionDetail'], resolve); + } + }, + { + path: '/incomeLoan/personalInfo', // 个人信息 + name: 'incoPersonalInfo', + component: function (resolve) { + require(['../views/incomeLoan/personalInfo'], resolve); + } + }, + { + path: '/incomeLoan/houseAndJobInfo', // 居住与工作信息 + name: 'incoHouseAndJobInfo', + component: function (resolve) { + require(['../views/incomeLoan/houseAndJobInfo'], resolve); + } + }, + { + path: '/incomeLoan/auditResults', // 审核结果 + name: 'incoAuditResults', + component: function (resolve) { + require(['../views/incomeLoan/auditResults'], resolve); + } + }, + { + path: '/incomeLoan/bindcard', // 绑定银行卡 + name: 'incoBindCard', + component: function (resolve) { + require(['../views/incomeLoan/bindCard'], resolve); + } + }, + { + path: '/incomeLoan/phototInfo', // 证件照片信息 + name: 'incoPhotoInfo', + component: function (resolve) { + require(['../views/incomeLoan/photoInfo'], resolve); + } + }, +]; diff --git a/src/router/router.js b/src/router/router.js new file mode 100644 index 0000000..5243173 --- /dev/null +++ b/src/router/router.js @@ -0,0 +1,13 @@ +/** + * Created by c.y on 2018/3/29. + * 这个是项目路由 + */ + +// 包你贷路由 +import BND_Router from './prodBND'; +// 整个项目中,除包你贷产品的路由 +import projectRouter from './project'; + +let routes = projectRouter.concat(BND_Router); + +export default {routes: routes}; diff --git a/src/store/action.js b/src/store/action.js new file mode 100644 index 0000000..28c435e --- /dev/null +++ b/src/store/action.js @@ -0,0 +1,21 @@ +/** + * Created by c.y on 2018/3/20 + * Action 类似于 mutation,不同在于: + * 1. Action 提交的是 mutation,而不是直接变更状态。 + * 2. Action 可以包含任意异步操作 + * 具体的配置可见 https://vuex.vuejs.org/zh-cn/actions.html + */ + +// import { +// UPDATE_COUNTS +// } from './mutation-types'; +// +// const getUser = () => fetch('/v1/user', {user_id: getStore('user_id')}); +// +// export default { +// // 更新counts +// async getUserInfo({commit, state}) { +// let res = await getUser(); +// commit(UPDATE_COUNTS, res) +// }, +// }; diff --git a/src/store/index.js b/src/store/index.js new file mode 100644 index 0000000..4a78ed1 --- /dev/null +++ b/src/store/index.js @@ -0,0 +1,36 @@ +/** + * Created by c.y on 2018/3/16. + * 全局vuex相关 + */ + +import Vue from 'vue'; +import Vuex from 'vuex'; +import mutations from './mutations.js'; +import createLogger from 'vuex/dist/logger'; // Vuex 自带一个日志插件用于一般的调试: + + +Vue.use(Vuex); + +const debug = process.env.NODE_ENV !== 'production'; + +export default new Vuex.Store({ + state: { + isLoading: false, // 全局loading状态 + direction: 'in', // 页面的切换动画 + appScrollStyle: { // 解决ios返回空白的问题 + overflow: 'auto', + '-webkit-overflow-scrolling': 'touch' + }, + sid:'', // 用户的sessionId + loanActiveTab: 0, // 贷款选中的tab的索引 + pageRecode:[] // 页面真实访问记录 + }, + mutations, + strict: debug, + getters: { + pageRecode: state => { + return state.pageRecode; + } + } +// plugins: debug ? [createLogger()] : [] +}) diff --git a/src/store/mutation-types.js b/src/store/mutation-types.js new file mode 100644 index 0000000..3468173 --- /dev/null +++ b/src/store/mutation-types.js @@ -0,0 +1,21 @@ +/** + * Created by c.y on 2018/3/20 + * 使用常量替代 Mutation 事件类型 + */ + +// 更新loading +export const UPDATE_LOADING = 'UPDATE_LOADING'; +// 页面切换动画 +export const UPDATE_DIRECTION = 'UPDATE_DIRECTION'; +// 更新渠道号 +export const UPDATE_CHANNEL_NO = 'UPDATE_CHANNEL_NO'; +//更新sid +export const UPDATE_SESSION_ID = 'UPDATE_SESSION_ID'; +// 更新loanActiveTab +export const UPDATE_ACTIVE_TAB = 'UPDATE_ACTIVE_TAB'; +//更新消息列表的数组 +export const UPDATE_NOTICE_ARR = 'UPDATE_NOTICE_ARR'; +//更新页面访问记录 数组队列 +export const UPDATE_PAGE_ACCESS_RECORD = 'UPDATE_PAGE_ACCESS_RECORD'; +// ios空白问题 +export const UPDATE_APP_STYLE = 'UPDATE_APP_STYLE'; diff --git a/src/store/mutations.js b/src/store/mutations.js new file mode 100644 index 0000000..4a21a08 --- /dev/null +++ b/src/store/mutations.js @@ -0,0 +1,53 @@ +/** + * Created by c.y on 2018/3/20 + * Mutation 事件类型 + * 1. Mutation 需遵守 Vue 的响应规则 + * 2. 使用常量替代 Mutation 事件类型 + * 3. Mutation 必须是同步函数 + * 具体的配置可见 https://vuex.vuejs.org/zh-cn/mutations.html + */ + +import { + UPDATE_LOADING, + UPDATE_DIRECTION, + UPDATE_CHANNEL_NO, + UPDATE_SESSION_ID, + UPDATE_ACTIVE_TAB, + UPDATE_NOTICE_ARR, + UPDATE_PAGE_ACCESS_RECORD, + UPDATE_APP_STYLE +} from './mutation-types'; + +export default { + // 更新loading + [UPDATE_LOADING](state, { isLoading }) { + state.isLoading = isLoading; + }, + // 页面切换动画 + [UPDATE_DIRECTION](state, { direction }) { + state.direction = direction; + }, + // 更新渠道号 + [UPDATE_CHANNEL_NO](state, { cn }) { + state.cn = cn; + }, + // 更新访问记录 + [UPDATE_PAGE_ACCESS_RECORD](state, { pageName }) { + state.pageRecode.unshift( + pageName); + }, + // 更新sessionId + [UPDATE_SESSION_ID](state,{ sid }) { + state.sid = sid; + }, + [UPDATE_ACTIVE_TAB](state, { loanActiveTab }) { + state.loanActiveTab = loanActiveTab; + }, + [UPDATE_NOTICE_ARR](state, { noticeIdArr }) { + state.noticeIdArr = JSON.parse(noticeIdArr); + }, + // 更新app + [UPDATE_APP_STYLE](state, { appScrollStyle }) { + state.appScrollStyle = appScrollStyle; + } +}; diff --git a/src/style/app.less b/src/style/app.less new file mode 100644 index 0000000..25d3fe7 --- /dev/null +++ b/src/style/app.less @@ -0,0 +1,151 @@ +/** + * Created by c.y on 2018-3-26 + * 文件说明: 全局覆盖样式 + */ +@import './mixin.less'; + +// 全局的渐变 背景颜色控制 +#app .vux-header { + .color-linear-gradient(@color-gradient-darkBlue-left, @color-gradient-darkBlue-right) !important; +} + +html { + font-family: @fontDefault; + height: 100%; +} + +body { + height: 100%; + margin: 0; +} + +.router-view { + width: 100%; + min-height: 100%; + box-sizing: border-box; + -webkit-overflow-scrolling: touch; +} + +// 头部样式覆盖 ============== begin===================== +.header-common { + height: 44px; + + line-height: 1; +} + +.router-view .header-common { + padding: 0; +} + +.router-view .header-common .vux-header-left .left-arrow { + top: -6px; +} + +.router-view .gradient-color .vux-header-left .left-arrow:before { + border: 2px solid @color-white; + border-width: 2PX 0 0 2PX; +} + +// 头部样式覆盖 ============== end===================== + +.f-footer { + position: fixed; + left: 0; + bottom: 0; + width: 100%; + z-index: 1000; + .weui-tabbar { + background-color: @color-white; + } + .weui-tabbar__item.weui-bar__item_on .weui-tabbar__icon, + .weui-tabbar__item.weui-bar__item_on .weui-tabbar__icon > i, + .weui-tabbar__item.weui-bar__item_on .weui-tabbar__label { + color: @color-primary; + } + input::-webkit-input-placeholder { + color: @color-text-third !important; /* WebKit browsers */ + } +} + +/** + * iPad 3/4 portrait + */ +@media only screen +and (min-device-width: 768px) +and (max-device-width: 1024px) +and (orientation: portrait) +and (-webkit-min-device-pixel-ratio: 2) { + +} + +/** + * iPad 1/2 landscape & portrait + */ +@media only screen +and (min-device-width: 768Px) +and (max-device-width: 1024Px) +and (-webkit-min-device-pixel-ratio: 1) { + body .router-view { + .vux-header { + .vux-header-title { + height: 60px; + line-height: 60px; + font-size: 28px; + } + .vux-header-left { + .left-arrow:before { + width: 20px; + height: 20px; + margin-top: 3px; + } + } + } + .f-footer { + .weui-tabbar { + .iconfont { + position: relative; + right: 5px; + font-size: 36px; + } + .weui-tabbar__label span { + font-size: 18Px; + } + } + } + } +} + +@media only screen +and (min-width: 1024Px) +and (max-width: 1366Px) +and (-webkit-min-device-pixel-ratio: 1) { + body .router-view { + .vux-header { + .vux-header-title { + height: 60px; + line-height: 60px; + font-size: 28px; + } + .vux-header-left { + .left-arrow:before { + width: 20px; + height: 20px; + margin-top: 3px; + } + } + } + .f-footer { + .weui-tabbar { + .iconfont { + position: relative; + right: 5px; + font-size: 36px; + } + .weui-tabbar__label span { + font-size: 18Px; + } + } + } + } +} + diff --git a/src/style/mixin.less b/src/style/mixin.less new file mode 100644 index 0000000..d453b17 --- /dev/null +++ b/src/style/mixin.less @@ -0,0 +1,156 @@ +/** + * Created by c.y on 2018-3-1 + * 文件说明: 这个是定义项目全局的mixin + */ + +// 渐变 +.color-linear-gradient (@leftColor:#18bfff, @rightColor:#0092f1, @direction:'90deg') { + background: -webkit-linear-gradient(@direction, @leftColor, @rightColor); + background: -o-linear-gradient(@direction, @leftColor, @rightColor); + background: -moz-linear-gradient(@direction, @leftColor, @rightColor); + background: linear-gradient(@direction, @leftColor, @rightColor); +} + +.color-linear-gradient-to (@leftColor:#ff8457, @rightColor:#ff4e53, @direction:'90deg') { + background: -webkit-linear-gradient(@direction, @leftColor, @rightColor); + background: -o-linear-gradient(@direction, @leftColor, @rightColor); + background: -moz-linear-gradient(@direction, @leftColor, @rightColor); + background: linear-gradient(@direction, @leftColor, @rightColor); +} + +// flex布局 +.flexLayout(@justify:flex-start,@align:center,@direction:row){ + display: flex; + justify-content: @justify; + align-items: @align; + flex-direction: @direction; +} +// 清除浮动 +.clearfix() { + zoom: 1; + &:before, + &:after { + content: ""; + display: table; + } + &:after { + clear: both; + visibility: hidden; + font-size: 0; + height: 0; + } +} +// 单行文本超出显示省略号 +.ellipsis(@w:auto) { + width: @w; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + word-wrap: normal; +} +// 多行文本超出显示省略号 +.ellipsisLn(@line) { + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: @line; + word-break: break-all; +} + +// 单词换行 +.text_wrap() { + word-wrap:break-word; + word-break:break-all; +} + +// top----1px +.setTopLine(@c: #C7C7C7, @height: 100%) { + content: " "; + position: absolute; + left: 0; + top: 0; + right: 0; + height: @height; + border-top: 1PX solid @c; + color: @c; + transform-origin: 0 0; + transform: scaleY(0.5); +} +// button----1px +.setBottomLine(@c: #C7C7C7, @height: 100%) { + content: " "; + position: absolute; + left: 0; + bottom: 0; + right: 0; + height: @height; + border-bottom: 1PX solid @c; + color: @c; + transform-origin: 0 100%; + transform: scaleY(0.5); +} +// left----1px +.setLeftLine(@c: #C7C7C7, @height: 100%) { + content: " "; + position: absolute; + left: 0; + top: 0; + width: 1PX; + bottom: 0; + border-left: 1PX solid @c; + color: @c; + height: @height; + transform-origin: 0 0; + transform: scaleX(0.5); +} +// right----1px +.setRightLine(@c: #C7C7C7, @height: 100%) { + content: " "; + position: absolute; + right: 0; + top: 0; + width: 1PX; + height: @height; + bottom: 0; + border-right: 1PX solid @c; + color: @c; + transform-origin: 100% 0; + transform: scaleX(0.5); +} +// 设置箭头 arrowSize--箭头的大小, borderColor---箭头的颜色,@borderWidth箭头的粗细 +._setArrow(@arrowsize, @borderColor, @borderWidth){ + display: inline-block; + height: @arrowsize; + width: @arrowsize; + border-width: @borderWidth @borderWidth 0 0; + border-color: @borderColor; + border-style: solid; +} + +// 示例调用 .setArrow(top, 10px, red, 2px);向上箭头 +.setArrow(@direction, @arrowsize, @borderColor, @borderWidth) when (@direction = top) { + ._setArrow(@arrowsize, @borderColor, @borderWidth); + transform: matrix(0.71,-0.71,0.71,0.71,0,0); // rotate(-45deg) +} + +.setArrow(@direction, @arrowsize, @borderColor,@borderWidth) when (@direction = right) { + ._setArrow(@arrowsize, @borderColor, @borderWidth); + transform: matrix(0.71,0.71,-0.71,0.71,0,0); // rotate(45deg); + position: relative; + top: -1px; +} + +.setArrow(@direction, @arrowsize, @borderColor,@borderWidth) when (@direction = down) { + ._setArrow(@arrowsize, @borderColor, @borderWidth); + transform: matrix(-0.71,0.71,-0.71,-0.71,0,0); // rotate(135deg); + position: relative; + top: -1.5px; +} + +.setArrow(@direction, @arrowsize, @borderColor,@borderWidth) when (@direction = left) { + ._setArrow(@arrowsize, @borderColor, @borderWidth); + transform: matrix(-0.71,-0.71,0.71,-0.71,0,0); // rotate(-135deg); + position: relative; + top: -1px; +} diff --git a/src/style/swiper.min.css b/src/style/swiper.min.css new file mode 100644 index 0000000..4b809e1 --- /dev/null +++ b/src/style/swiper.min.css @@ -0,0 +1,12 @@ +/** + * Swiper 4.2.0 + * Most modern mobile touch slider and framework with hardware accelerated transitions + * http://www.idangero.us/swiper/ + * + * Copyright 2014-2018 Vladimir Kharlampidi + * + * Released under the MIT License + * + * Released on: March 16, 2018 + */ +.swiper-container{margin:0 auto;position:relative;overflow:hidden;list-style:none;padding:0;z-index:1}.swiper-container-no-flexbox .swiper-slide{float:left}.swiper-container-vertical>.swiper-wrapper{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.swiper-wrapper{position:relative;width:100%;height:100%;z-index:1;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;-o-transition-property:transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-box-sizing:content-box;box-sizing:content-box}.swiper-container-android .swiper-slide,.swiper-wrapper{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.swiper-container-multirow>.swiper-wrapper{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.swiper-container-free-mode>.swiper-wrapper{-webkit-transition-timing-function:ease-out;-o-transition-timing-function:ease-out;transition-timing-function:ease-out;margin:0 auto}.swiper-slide{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;width:100%;height:100%;position:relative;-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;-o-transition-property:transform;transition-property:transform;transition-property:transform,-webkit-transform}.swiper-invisible-blank-slide{visibility:hidden}.swiper-container-autoheight,.swiper-container-autoheight .swiper-slide{height:auto}.swiper-container-autoheight .swiper-wrapper{-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;-webkit-transition-property:height,-webkit-transform;transition-property:height,-webkit-transform;-o-transition-property:transform,height;transition-property:transform,height;transition-property:transform,height,-webkit-transform}.swiper-container-3d{-webkit-perspective:1200px;perspective:1200px}.swiper-container-3d .swiper-cube-shadow,.swiper-container-3d .swiper-slide,.swiper-container-3d .swiper-slide-shadow-bottom,.swiper-container-3d .swiper-slide-shadow-left,.swiper-container-3d .swiper-slide-shadow-right,.swiper-container-3d .swiper-slide-shadow-top,.swiper-container-3d .swiper-wrapper{-webkit-transform-style:preserve-3d;transform-style:preserve-3d}.swiper-container-3d .swiper-slide-shadow-bottom,.swiper-container-3d .swiper-slide-shadow-left,.swiper-container-3d .swiper-slide-shadow-right,.swiper-container-3d .swiper-slide-shadow-top{position:absolute;left:0;top:0;width:100%;height:100%;pointer-events:none;z-index:10}.swiper-container-3d .swiper-slide-shadow-left{background-image:-webkit-gradient(linear,right top,left top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,0)));background-image:-webkit-linear-gradient(right,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-o-linear-gradient(right,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:linear-gradient(to left,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-3d .swiper-slide-shadow-right{background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,0)));background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-o-linear-gradient(left,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:linear-gradient(to right,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-3d .swiper-slide-shadow-top{background-image:-webkit-gradient(linear,left bottom,left top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,0)));background-image:-webkit-linear-gradient(bottom,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-o-linear-gradient(bottom,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:linear-gradient(to top,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-3d .swiper-slide-shadow-bottom{background-image:-webkit-gradient(linear,left top,left bottom,from(rgba(0,0,0,.5)),to(rgba(0,0,0,0)));background-image:-webkit-linear-gradient(top,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-o-linear-gradient(top,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:linear-gradient(to bottom,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-wp8-horizontal,.swiper-container-wp8-horizontal>.swiper-wrapper{-ms-touch-action:pan-y;touch-action:pan-y}.swiper-container-wp8-vertical,.swiper-container-wp8-vertical>.swiper-wrapper{-ms-touch-action:pan-x;touch-action:pan-x}.swiper-button-next,.swiper-button-prev{position:absolute;top:50%;width:27px;height:44px;margin-top:-22px;z-index:10;cursor:pointer;background-size:27px 44px;background-position:center;background-repeat:no-repeat}.swiper-button-next.swiper-button-disabled,.swiper-button-prev.swiper-button-disabled{opacity:.35;cursor:auto;pointer-events:none}.swiper-button-prev,.swiper-container-rtl .swiper-button-next{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E");left:10px;right:auto}.swiper-button-next,.swiper-container-rtl .swiper-button-prev{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E");right:10px;left:auto}.swiper-button-prev.swiper-button-white,.swiper-container-rtl .swiper-button-next.swiper-button-white{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E")}.swiper-button-next.swiper-button-white,.swiper-container-rtl .swiper-button-prev.swiper-button-white{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E")}.swiper-button-prev.swiper-button-black,.swiper-container-rtl .swiper-button-next.swiper-button-black{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E")}.swiper-button-next.swiper-button-black,.swiper-container-rtl .swiper-button-prev.swiper-button-black{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E")}.swiper-button-lock{display:none}.swiper-pagination{position:absolute;text-align:center;-webkit-transition:.3s opacity;-o-transition:.3s opacity;transition:.3s opacity;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);z-index:10}.swiper-pagination.swiper-pagination-hidden{opacity:0}.swiper-container-horizontal>.swiper-pagination-bullets,.swiper-pagination-custom,.swiper-pagination-fraction{bottom:10px;left:0;width:100%}.swiper-pagination-bullets-dynamic{overflow:hidden;font-size:0}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{-webkit-transform:scale(.33);-ms-transform:scale(.33);transform:scale(.33);position:relative}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-main{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev{-webkit-transform:scale(.66);-ms-transform:scale(.66);transform:scale(.66)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev-prev{-webkit-transform:scale(.33);-ms-transform:scale(.33);transform:scale(.33)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next{-webkit-transform:scale(.66);-ms-transform:scale(.66);transform:scale(.66)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next-next{-webkit-transform:scale(.33);-ms-transform:scale(.33);transform:scale(.33)}.swiper-pagination-bullet{width:8px;height:8px;display:inline-block;border-radius:100%;background:#000;opacity:.2}button.swiper-pagination-bullet{border:none;margin:0;padding:0;-webkit-box-shadow:none;box-shadow:none;-webkit-appearance:none;-moz-appearance:none;appearance:none}.swiper-pagination-clickable .swiper-pagination-bullet{cursor:pointer}.swiper-pagination-bullet-active{opacity:1;background:#007aff}.swiper-container-vertical>.swiper-pagination-bullets{right:10px;top:50%;-webkit-transform:translate3d(0,-50%,0);transform:translate3d(0,-50%,0)}.swiper-container-vertical>.swiper-pagination-bullets .swiper-pagination-bullet{margin:6px 0;display:block}.swiper-container-vertical>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic{top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);width:8px}.swiper-container-vertical>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{display:inline-block;-webkit-transition:.2s top,.2s -webkit-transform;transition:.2s top,.2s -webkit-transform;-o-transition:.2s transform,.2s top;transition:.2s transform,.2s top;transition:.2s transform,.2s top,.2s -webkit-transform}.swiper-container-horizontal>.swiper-pagination-bullets .swiper-pagination-bullet{margin:0 4px}.swiper-container-horizontal>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic{left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%);white-space:nowrap}.swiper-container-horizontal>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{-webkit-transition:.2s left,.2s -webkit-transform;transition:.2s left,.2s -webkit-transform;-o-transition:.2s transform,.2s left;transition:.2s transform,.2s left;transition:.2s transform,.2s left,.2s -webkit-transform}.swiper-container-horizontal.swiper-container-rtl>.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{-webkit-transition:.2s right,.2s -webkit-transform;transition:.2s right,.2s -webkit-transform;-o-transition:.2s transform,.2s right;transition:.2s transform,.2s right;transition:.2s transform,.2s right,.2s -webkit-transform}.swiper-pagination-progressbar{background:rgba(0,0,0,.25);position:absolute}.swiper-pagination-progressbar .swiper-pagination-progressbar-fill{background:#007aff;position:absolute;left:0;top:0;width:100%;height:100%;-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0);-webkit-transform-origin:left top;-ms-transform-origin:left top;transform-origin:left top}.swiper-container-rtl .swiper-pagination-progressbar .swiper-pagination-progressbar-fill{-webkit-transform-origin:right top;-ms-transform-origin:right top;transform-origin:right top}.swiper-container-horizontal>.swiper-pagination-progressbar{width:100%;height:4px;left:0;top:0}.swiper-container-vertical>.swiper-pagination-progressbar{width:4px;height:100%;left:0;top:0}.swiper-pagination-white .swiper-pagination-bullet-active{background:#fff}.swiper-pagination-progressbar.swiper-pagination-white{background:rgba(255,255,255,.25)}.swiper-pagination-progressbar.swiper-pagination-white .swiper-pagination-progressbar-fill{background:#fff}.swiper-pagination-black .swiper-pagination-bullet-active{background:#000}.swiper-pagination-progressbar.swiper-pagination-black{background:rgba(0,0,0,.25)}.swiper-pagination-progressbar.swiper-pagination-black .swiper-pagination-progressbar-fill{background:#000}.swiper-pagination-lock{display:none}.swiper-scrollbar{border-radius:10px;position:relative;-ms-touch-action:none;background:rgba(0,0,0,.1)}.swiper-container-horizontal>.swiper-scrollbar{position:absolute;left:1%;bottom:3px;z-index:50;height:5px;width:98%}.swiper-container-vertical>.swiper-scrollbar{position:absolute;right:3px;top:1%;z-index:50;width:5px;height:98%}.swiper-scrollbar-drag{height:100%;width:100%;position:relative;background:rgba(0,0,0,.5);border-radius:10px;left:0;top:0}.swiper-scrollbar-cursor-drag{cursor:move}.swiper-scrollbar-lock{display:none}.swiper-zoom-container{width:100%;height:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;text-align:center}.swiper-zoom-container>canvas,.swiper-zoom-container>img,.swiper-zoom-container>svg{max-width:100%;max-height:100%;-o-object-fit:contain;object-fit:contain}.swiper-slide-zoomed{cursor:move}.swiper-lazy-preloader{width:42px;height:42px;position:absolute;left:50%;top:50%;margin-left:-21px;margin-top:-21px;z-index:10;-webkit-transform-origin:50%;-ms-transform-origin:50%;transform-origin:50%;-webkit-animation:swiper-preloader-spin 1s steps(12,end) infinite;animation:swiper-preloader-spin 1s steps(12,end) infinite}.swiper-lazy-preloader:after{display:block;content:'';width:100%;height:100%;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%236c6c6c'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");background-position:50%;background-size:100%;background-repeat:no-repeat}.swiper-lazy-preloader-white:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%23fff'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E")}@-webkit-keyframes swiper-preloader-spin{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes swiper-preloader-spin{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.swiper-container .swiper-notification{position:absolute;left:0;top:0;pointer-events:none;opacity:0;z-index:-1000}.swiper-container-fade.swiper-container-free-mode .swiper-slide{-webkit-transition-timing-function:ease-out;-o-transition-timing-function:ease-out;transition-timing-function:ease-out}.swiper-container-fade .swiper-slide{pointer-events:none;-webkit-transition-property:opacity;-o-transition-property:opacity;transition-property:opacity}.swiper-container-fade .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-fade .swiper-slide-active,.swiper-container-fade .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-container-cube{overflow:visible}.swiper-container-cube .swiper-slide{pointer-events:none;-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:1;visibility:hidden;-webkit-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0;width:100%;height:100%}.swiper-container-cube .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-cube.swiper-container-rtl .swiper-slide{-webkit-transform-origin:100% 0;-ms-transform-origin:100% 0;transform-origin:100% 0}.swiper-container-cube .swiper-slide-active,.swiper-container-cube .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-container-cube .swiper-slide-active,.swiper-container-cube .swiper-slide-next,.swiper-container-cube .swiper-slide-next+.swiper-slide,.swiper-container-cube .swiper-slide-prev{pointer-events:auto;visibility:visible}.swiper-container-cube .swiper-slide-shadow-bottom,.swiper-container-cube .swiper-slide-shadow-left,.swiper-container-cube .swiper-slide-shadow-right,.swiper-container-cube .swiper-slide-shadow-top{z-index:0;-webkit-backface-visibility:hidden;backface-visibility:hidden}.swiper-container-cube .swiper-cube-shadow{position:absolute;left:0;bottom:0;width:100%;height:100%;background:#000;opacity:.6;-webkit-filter:blur(50px);filter:blur(50px);z-index:0}.swiper-container-flip{overflow:visible}.swiper-container-flip .swiper-slide{pointer-events:none;-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:1}.swiper-container-flip .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-flip .swiper-slide-active,.swiper-container-flip .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-container-flip .swiper-slide-shadow-bottom,.swiper-container-flip .swiper-slide-shadow-left,.swiper-container-flip .swiper-slide-shadow-right,.swiper-container-flip .swiper-slide-shadow-top{z-index:0;-webkit-backface-visibility:hidden;backface-visibility:hidden}.swiper-container-coverflow .swiper-wrapper{-ms-perspective:1200px} \ No newline at end of file diff --git a/src/style/theme.less b/src/style/theme.less new file mode 100644 index 0000000..26ae304 --- /dev/null +++ b/src/style/theme.less @@ -0,0 +1,48 @@ +/** + * Created by c.y on 2018-3-17 + * 文件说明: 全局颜色变量 + */ + + + +/* Colors +-------------------------- */ +@color-white: #fff; +@color-black: #000; +@color-white-light: rgba(255, 255, 255, 0.8); +@color-primary: #8166f8; // 主题色 +@color-primary-light: #80c2fa; // 主题色的浅色 +@color-disabled: #ddd; // 禁用颜色 +/* Text Colors +-------------------------- */ +@color-text-primary: #333; // 主要文字颜色 +@color-text-secondary: #666; // 第二主要颜色 +@color-text-third: #999; // 次要颜色 +@color-text-placeholder-red: #ff4d53; // 辅助/图标 Sub Color +@color-text-placeholder-turmeric: #ffa21f; // 辅助/图标 Sub Color +@color-text-placeholder-yellow: #fff000; // 辅助/图标 Sub Color + +/* line Colors +-------------------------- */ +@color-divider-regular: #ddd; // 分割线 Divider +@color-border-pic: #cce9fc; // 图片的边框 + +/* Background Colors +-------------------------- */ +@color-background-default: #f1f1f1; +@color-background-yellow: #fff55a; + +/* Icon gradient Colors +-------------------------- */ +@color-gradient-darkBlue-left: #80c2fa; +@color-gradient-darkBlue-right: #8166f8; + +@color-gradient-red-left: #ff8657; +@color-gradient-red-right: #ff4d53; + +@color-gradient-lightBlue-left: #4adfff; +@color-gradient-lightBlue-right: #21bddf; + +@color-gradient-yellow-left: #ffbb3f; +@color-gradient-yellow-right: #ffa21f; + diff --git a/src/style/variable.less b/src/style/variable.less new file mode 100644 index 0000000..7fd64c8 --- /dev/null +++ b/src/style/variable.less @@ -0,0 +1,58 @@ +/** + * Created by c.y on 2018-3-1 + * 文件说明: 这个是定义项目全局的less的变量 + */ + +/* Font family +-------------------------- */ +@fontEN: -apple-system-font, "Helvetica Neue"; +@fontCN: "PingFang SC", "Microsoft YaHei", "sans-serif", "Helvetica Neue"; +@fontDefault: @fontEN, @fontCN; + +/* Font size +-------------------------- */ +@font-size-tiny: 10Px; +@font-size-small: 12Px; +@font-size-medium: 14Px; +@font-size-base: 15Px; +@font-size-primary: 16Px; +@font-size-large: 18Px; +/* Font lineHeight---我们建议使用数字倍数,不建议是固定单位例如px +-------------------------- */ +@font-line-height-base: 1; +@font-line-height-medium: 1.3; +@font-line-height-large: 1.5; + +/* Font weight +-------------------------- */ +@font-weight-normal: normal; +@font-weight-bold: bold; +@font-weight-base: 400; +@font-weight-thin: 200; + + +/* Icon size +-------------------------- */ +@icon-font-size-small: 40px; // 标签图标 +@icon-font-size-normal: 56px; // 个人中心图标 +@icon-font-size-large: 88px; // 入口图标 + + +/* border-radius size +-------------------------- */ +@border-radius-normal-size: 7.5px; + + +/* button size +-------------------------- */ +@button-size-small-width: 128px; +@button-size-small-height: 64px; +@button-size-medium-width: 220px; +@button-size-medium-width: 88px; +@button-size-large-width: 702px; +@button-size-large-width: 88px; + + +/* 色块的分割的高度 Divided blocks +-------------------------- */ +@divided-block-height: 20px; diff --git a/src/tool/IDValidator.js b/src/tool/IDValidator.js new file mode 100644 index 0000000..8dd1881 --- /dev/null +++ b/src/tool/IDValidator.js @@ -0,0 +1,3844 @@ +/** + * Created by 陈伟 + * 2017/11/21. + * 身份证检查 + */ +let GB2260 = { + '110000': '北京市', + '110100': '北京市市辖区', + '110101': '北京市东城区', + '110102': '北京市西城区', + '110103': '北京市崇文区', + '110104': '北京市宣武区', + '110105': '北京市朝阳区', + '110106': '北京市丰台区', + '110107': '北京市石景山区', + '110108': '北京市海淀区', + '110109': '北京市门头沟区', + '110111': '北京市房山区', + '110112': '北京市通州区', + '110113': '北京市顺义区', + '110200': '北京市县', + '110221': '北京市昌平县', + '110224': '北京市大兴县', + '110226': '北京市平谷县', + '110227': '北京市怀柔县', + '110228': '北京市密云县', + '110229': '北京市延庆县', + '120000': '天津市', + '120100': '天津市市辖区', + '120101': '天津市和平区', + '120102': '天津市河东区', + '120103': '天津市河西区', + '120104': '天津市南开区', + '120105': '天津市河北区', + '120106': '天津市红桥区', + '120107': '天津市塘沽区', + '120108': '天津市汉沽区', + '120109': '天津市大港区', + '120110': '天津市东丽区', + '120111': '天津市西青区', + '120112': '天津市津南区', + '120113': '天津市北辰区', + '120200': '天津市县', + '120221': '天津市宁河县', + '120222': '天津市武清县', + '120223': '天津市静海县', + '120224': '天津市宝坻县', + '120225': '天津市蓟县', + '130000': '河北省', + '130100': '河北省石家庄市', + '130101': '河北省石家庄市市辖区', + '130102': '河北省石家庄市长安区', + '130103': '河北省石家庄市桥东区', + '130104': '河北省石家庄市桥西区', + '130105': '河北省石家庄市新华区', + '130106': '河北省石家庄市郊区', + '130107': '河北省石家庄市井陉矿区', + '130121': '河北省石家庄市井陉县', + '130123': '河北省石家庄市正定县', + '130124': '河北省石家庄市栾城县', + '130125': '河北省石家庄市行唐县', + '130126': '河北省石家庄市灵寿县', + '130127': '河北省石家庄市高邑县', + '130128': '河北省石家庄市深泽县', + '130129': '河北省石家庄市赞皇县', + '130130': '河北省石家庄市无极县', + '130131': '河北省石家庄市平山县', + '130132': '河北省石家庄市元氏县', + '130133': '河北省石家庄市赵县', + '130181': '河北省石家庄市辛集市', + '130182': '河北省石家庄市藁城市', + '130183': '河北省石家庄市晋州市', + '130184': '河北省石家庄市新乐市', + '130185': '河北省石家庄市鹿泉市', + '130200': '河北省唐山市', + '130201': '河北省唐山市市辖区', + '130202': '河北省唐山市路南区', + '130203': '河北省唐山市路北区', + '130204': '河北省唐山市古冶区', + '130205': '河北省唐山市开平区', + '130206': '河北省唐山市新区', + '130221': '河北省唐山市丰润县', + '130223': '河北省唐山市滦县', + '130224': '河北省唐山市滦南县', + '130225': '河北省唐山市乐亭县', + '130227': '河北省唐山市迁西县', + '130229': '河北省唐山市玉田县', + '130230': '河北省唐山市唐海县', + '130281': '河北省唐山市遵化市', + '130282': '河北省唐山市丰南市', + '130283': '河北省唐山市迁安市', + '130300': '河北省秦皇岛市秦皇岛市', + '130301': '河北省秦皇岛市市辖区', + '130302': '河北省秦皇岛市海港区', + '130303': '河北省秦皇岛市山海关区', + '130304': '河北省秦皇岛市北戴河区', + '130321': '河北省秦皇岛市青龙满族自治县', + '130322': '河北省秦皇岛市昌黎县', + '130323': '河北省秦皇岛市抚宁县', + '130324': '河北省秦皇岛市卢龙县', + '130400': '河北省邯郸市邯郸市', + '130401': '河北省邯郸市市辖区', + '130402': '河北省邯郸市邯山区', + '130403': '河北省邯郸市丛台区', + '130404': '河北省邯郸市复兴区', + '130406': '河北省邯郸市峰峰矿区', + '130421': '河北省邯郸市邯郸县', + '130423': '河北省邯郸市临漳县', + '130424': '河北省邯郸市成安县', + '130425': '河北省邯郸市大名县', + '130426': '河北省邯郸市涉县', + '130427': '河北省邯郸市磁县', + '130428': '河北省邯郸市肥乡县', + '130429': '河北省邯郸市永年县', + '130430': '河北省邯郸市邱县', + '130431': '河北省邯郸市鸡泽县', + '130432': '河北省邯郸市广平县', + '130433': '河北省邯郸市馆陶县', + '130434': '河北省邯郸市魏县', + '130435': '河北省邯郸市曲周县', + '130481': '河北省邯郸市武安市', + '130500': '河北省邢台市', + '130501': '河北省邢台市市辖区', + '130502': '河北省邢台市桥东区', + '130503': '河北省邢台市桥西区', + '130521': '河北省邢台市邢台县', + '130522': '河北省邢台市临城县', + '130523': '河北省邢台市内丘县', + '130524': '河北省邢台市柏乡县', + '130525': '河北省邢台市隆尧县', + '130526': '河北省邢台市任县', + '130527': '河北省邢台市南和县', + '130528': '河北省邢台市宁晋县', + '130529': '河北省邢台市巨鹿县', + '130530': '河北省邢台市新河县', + '130531': '河北省邢台市广宗县', + '130532': '河北省邢台市平乡县', + '130533': '河北省邢台市威县', + '130534': '河北省邢台市清河县', + '130535': '河北省邢台市临西县', + '130581': '河北省邢台市南宫市', + '130582': '河北省邢台市沙河市', + '130600': '河北省保定市', + '130601': '河北省保定市市辖区', + '130602': '河北省保定市新市区', + '130603': '河北省保定市北市区', + '130604': '河北省保定市南市区', + '130621': '河北省保定市满城县', + '130622': '河北省保定市清苑县', + '130623': '河北省保定市涞水县', + '130624': '河北省保定市阜平县', + '130625': '河北省保定市徐水县', + '130626': '河北省保定市定兴县', + '130627': '河北省保定市唐县', + '130628': '河北省保定市高阳县', + '130629': '河北省保定市容城县', + '130630': '河北省保定市涞源县', + '130631': '河北省保定市望都县', + '130632': '河北省保定市安新县', + '130633': '河北省保定市易县', + '130634': '河北省保定市曲阳县', + '130635': '河北省保定市蠡县', + '130636': '河北省保定市顺平县', + '130637': '河北省保定市博野县', + '130638': '河北省保定市雄县', + '130681': '河北省保定市涿州市', + '130682': '河北省保定市定州市', + '130683': '河北省保定市安国市', + '130684': '河北省保定市高碑店市', + '130700': '河北省张家口市', + '130701': '河北省张家口市市辖区', + '130702': '河北省张家口市桥东区', + '130703': '河北省张家口市桥西区', + '130705': '河北省张家口市宣化区', + '130706': '河北省张家口市下花园区', + '130721': '河北省张家口市宣化县', + '130722': '河北省张家口市张北县', + '130723': '河北省张家口市康保县', + '130724': '河北省张家口市沽源县', + '130725': '河北省张家口市尚义县', + '130726': '河北省张家口市蔚县', + '130727': '河北省张家口市阳原县', + '130728': '河北省张家口市怀安县', + '130729': '河北省张家口市万全县', + '130730': '河北省张家口市怀来县', + '130731': '河北省张家口市涿鹿县', + '130732': '河北省张家口市赤城县', + '130733': '河北省张家口市崇礼县', + '130800': '河北省承德市', + '130801': '河北省承德市市辖区', + '130802': '河北省承德市双桥区', + '130803': '河北省承德市双滦区', + '130804': '河北省承德市鹰手营子矿区', + '130821': '河北省承德市承德县', + '130822': '河北省承德市兴隆县', + '130823': '河北省承德市平泉县', + '130824': '河北省承德市滦平县', + '130825': '河北省承德市隆化县', + '130826': '河北省承德市丰宁满族自治县', + '130827': '河北省承德市宽城满族自治县', + '130828': '河北省承德市围场满族蒙古族自治县', + '130900': '河北省沧州市', + '130901': '河北省沧州市市辖区', + '130902': '河北省沧州市新华区', + '130903': '河北省沧州市运河区', + '130921': '河北省沧州市沧县', + '130922': '河北省沧州市青县', + '130923': '河北省沧州市东光县', + '130924': '河北省沧州市海兴县', + '130925': '河北省沧州市盐山县', + '130926': '河北省沧州市肃宁县', + '130927': '河北省沧州市南皮县', + '130928': '河北省沧州市吴桥县', + '130929': '河北省沧州市献县', + '130930': '河北省沧州市孟村回族自治县', + '130981': '河北省沧州市泊头市', + '130982': '河北省沧州市任丘市', + '130983': '河北省沧州市黄骅市', + '130984': '河北省沧州市河间市', + '131000': '河北省廊坊市', + '131001': '河北省廊坊市市辖区', + '131002': '河北省廊坊市安次区', + '131022': '河北省廊坊市固安县', + '131023': '河北省廊坊市永清县', + '131024': '河北省廊坊市香河县', + '131025': '河北省廊坊市大城县', + '131026': '河北省廊坊市文安县', + '131028': '河北省廊坊市大厂回族自治县', + '131081': '河北省廊坊市霸州市', + '131082': '河北省廊坊市三河市', + '131100': '河北省衡水市', + '131101': '河北省衡水市市辖区', + '131102': '河北省衡水市桃城区', + '131121': '河北省衡水市枣强县', + '131122': '河北省衡水市武邑县', + '131123': '河北省衡水市武强县', + '131124': '河北省衡水市饶阳县', + '131125': '河北省衡水市安平县', + '131126': '河北省衡水市故城县', + '131127': '河北省衡水市景县', + '131128': '河北省衡水市阜城县', + '131181': '河北省衡水市冀州市', + '131182': '河北省衡水市深州市', + '140000': '山西省', + '140100': '山西省太原市', + '140101': '山西省太原市市辖区', + '140105': '山西省太原市小店区', + '140106': '山西省太原市迎泽区', + '140107': '山西省太原市杏花岭区', + '140108': '山西省太原市尖草坪区', + '140109': '山西省太原市万柏林区', + '140110': '山西省太原市晋源区', + '140121': '山西省太原市清徐县', + '140122': '山西省太原市阳曲县', + '140123': '山西省太原市娄烦县', + '140181': '山西省太原市古交市', + '140200': '山西省大同市', + '140201': '山西省大同市市辖区', + '140202': '山西省大同市城区', + '140203': '山西省大同市矿区', + '140211': '山西省大同市南郊区', + '140212': '山西省大同市新荣区', + '140221': '山西省大同市阳高县', + '140222': '山西省大同市天镇县', + '140223': '山西省大同市广灵县', + '140224': '山西省大同市灵丘县', + '140225': '山西省大同市浑源县', + '140226': '山西省大同市左云县', + '140227': '山西省大同市大同县', + '140300': '山西省阳泉市', + '140301': '山西省阳泉市市辖区', + '140302': '山西省阳泉市城区', + '140303': '山西省阳泉市矿区', + '140311': '山西省阳泉市郊区', + '140321': '山西省阳泉市平定县', + '140322': '山西省阳泉市盂县', + '140400': '山西省长治市', + '140401': '山西省长治市市辖区', + '140402': '山西省长治市城区', + '140411': '山西省长治市郊区', + '140421': '山西省长治市长治县', + '140423': '山西省长治市襄垣县', + '140424': '山西省长治市屯留县', + '140425': '山西省长治市平顺县', + '140426': '山西省长治市黎城县', + '140427': '山西省长治市壶关县', + '140428': '山西省长治市长子县', + '140429': '山西省长治市武乡县', + '140430': '山西省长治市沁县', + '140431': '山西省长治市沁源县', + '140481': '山西省长治市潞城市', + '140500': '山西省晋城市', + '140501': '山西省晋城市市辖区', + '140502': '山西省晋城市城区', + '140521': '山西省晋城市沁水县', + '140522': '山西省晋城市阳城县', + '140524': '山西省晋城市陵川县', + '140525': '山西省晋城市泽州县', + '140581': '山西省晋城市高平市', + '140600': '山西省晋城市朔州市', + '140601': '山西省晋城市市辖区', + '140602': '山西省晋城市朔城区', + '140603': '山西省晋城市平鲁区', + '140621': '山西省晋城市山阴县', + '140622': '山西省晋城市应县', + '140623': '山西省晋城市右玉县', + '140624': '山西省晋城市怀仁县', + '142200': '山西省忻州地区', + '142201': '山西省忻州地区忻州市', + '142202': '山西省忻州地区原平市', + '142222': '山西省忻州地区定襄县', + '142223': '山西省忻州地区五台县', + '142225': '山西省忻州地区代县', + '142226': '山西省忻州地区繁峙县', + '142227': '山西省忻州地区宁武县', + '142228': '山西省忻州地区静乐县', + '142229': '山西省忻州地区神池县', + '142230': '山西省忻州地区五寨县', + '142231': '山西省忻州地区岢岚县', + '142232': '山西省忻州地区河曲县', + '142233': '山西省忻州地区保德县', + '142234': '山西省忻州地区偏关县', + '142300': '山西省忻州地区吕梁地区', + '142301': '山西省忻州地区孝义市', + '142302': '山西省忻州地区离石市', + '142303': '山西省忻州地区汾阳市', + '142322': '山西省忻州地区文水县', + '142323': '山西省忻州地区交城县', + '142325': '山西省忻州地区兴县', + '142326': '山西省忻州地区临县', + '142327': '山西省忻州地区柳林县', + '142328': '山西省忻州地区石楼县', + '142329': '山西省忻州地区岚县', + '142330': '山西省忻州地区方山县', + '142332': '山西省忻州地区中阳县', + '142333': '山西省忻州地区交口县', + '142400': '山西省晋中地区', + '142401': '山西省晋中地区榆次市', + '142402': '山西省晋中地区介休市', + '142421': '山西省晋中地区榆社县', + '142422': '山西省晋中地区左权县', + '142423': '山西省晋中地区和顺县', + '142424': '山西省晋中地区昔阳县', + '142427': '山西省晋中地区寿阳县', + '142429': '山西省晋中地区太谷县', + '142430': '山西省晋中地区祁县', + '142431': '山西省晋中地区平遥县', + '142433': '山西省晋中地区灵石县', + '142600': '山西省临汾地区', + '142601': '山西省临汾地区临汾市', + '142602': '山西省临汾地区侯马市', + '142603': '山西省临汾地区霍州市', + '142621': '山西省临汾地区曲沃县', + '142622': '山西省临汾地区翼城县', + '142623': '山西省临汾地区襄汾县', + '142625': '山西省临汾地区洪洞县', + '142627': '山西省临汾地区古县', + '142628': '山西省临汾地区安泽县', + '142629': '山西省临汾地区浮山县', + '142630': '山西省临汾地区吉县', + '142631': '山西省临汾地区乡宁县', + '142632': '山西省临汾地区蒲县', + '142633': '山西省临汾地区大宁县', + '142634': '山西省临汾地区永和县', + '142635': '山西省临汾地区隰县', + '142636': '山西省临汾地区汾西县', + '142700': '山西省运城地区', + '142701': '山西省运城地区运城市', + '142702': '山西省运城地区永济市', + '142703': '山西省运城地区河津市', + '142723': '山西省运城地区芮城县', + '142724': '山西省运城地区临猗县', + '142725': '山西省运城地区万荣县', + '142726': '山西省运城地区新绛县', + '142727': '山西省运城地区稷山县', + '142729': '山西省运城地区闻喜县', + '142730': '山西省运城地区夏县', + '142731': '山西省运城地区绛县', + '142732': '山西省运城地区平陆县', + '142733': '山西省运城地区垣曲县', + '150000': '内蒙古自治区', + '150100': '内蒙古自治区呼和浩特市', + '150101': '内蒙古自治区呼和浩特市市辖区', + '150102': '内蒙古自治区呼和浩特市新城区', + '150103': '内蒙古自治区呼和浩特市回民区', + '150104': '内蒙古自治区呼和浩特市玉泉区', + '150105': '内蒙古自治区呼和浩特市郊区', + '150121': '内蒙古自治区呼和浩特市土默特左旗', + '150122': '内蒙古自治区呼和浩特市托克托县', + '150123': '内蒙古自治区呼和浩特市和林格尔县', + '150124': '内蒙古自治区呼和浩特市清水河县', + '150125': '内蒙古自治区呼和浩特市武川县', + '150200': '内蒙古自治区包头市', + '150201': '内蒙古自治区包头市市辖区', + '150202': '内蒙古自治区包头市东河区', + '150203': '内蒙古自治区包头市昆都伦区', + '150204': '内蒙古自治区包头市青山区', + '150205': '内蒙古自治区包头市石拐矿区', + '150206': '内蒙古自治区包头市白云矿区', + '150207': '内蒙古自治区包头市郊区', + '150221': '内蒙古自治区包头市土默特右旗', + '150222': '内蒙古自治区包头市固阳县', + '150223': '内蒙古自治区包头市达尔罕茂明安联合旗', + '150300': '内蒙古自治区乌海市', + '150301': '内蒙古自治区乌海市市辖区', + '150302': '内蒙古自治区乌海市海勃湾区', + '150303': '内蒙古自治区乌海市海南区', + '150304': '内蒙古自治区乌海市乌达区', + '150400': '内蒙古自治区赤峰市', + '150401': '内蒙古自治区赤峰市市辖区', + '150402': '内蒙古自治区赤峰市红山区', + '150403': '内蒙古自治区赤峰市元宝山区', + '150404': '内蒙古自治区赤峰市松山区', + '150421': '内蒙古自治区赤峰市阿鲁科尔沁旗', + '150422': '内蒙古自治区赤峰市巴林左旗', + '150423': '内蒙古自治区赤峰市巴林右旗', + '150424': '内蒙古自治区赤峰市林西县', + '150425': '内蒙古自治区赤峰市克什克腾旗', + '150426': '内蒙古自治区赤峰市翁牛特旗', + '150428': '内蒙古自治区赤峰市喀喇沁旗', + '150429': '内蒙古自治区赤峰市宁城县', + '150430': '内蒙古自治区赤峰市敖汉旗', + '152100': '内蒙古自治区呼伦贝尔盟', + '152101': '内蒙古自治区呼伦贝尔盟海拉尔市', + '152102': '内蒙古自治区呼伦贝尔盟满洲里市', + '152103': '内蒙古自治区呼伦贝尔盟扎兰屯市', + '152104': '内蒙古自治区呼伦贝尔盟牙克石市', + '152105': '内蒙古自治区呼伦贝尔盟根河市', + '152106': '内蒙古自治区呼伦贝尔盟额尔古纳市', + '152122': '内蒙古自治区呼伦贝尔盟阿荣旗', + '152123': '内蒙古自治区呼伦贝尔盟莫力达瓦达斡尔族自治旗', + '152127': '内蒙古自治区呼伦贝尔盟鄂伦春自治旗', + '152128': '内蒙古自治区呼伦贝尔盟鄂温克族自治旗', + '152129': '内蒙古自治区呼伦贝尔盟新巴尔虎右旗', + '152130': '内蒙古自治区呼伦贝尔盟新巴尔虎左旗', + '152131': '内蒙古自治区呼伦贝尔盟陈巴尔虎旗', + '152200': '内蒙古自治区兴安盟', + '152201': '内蒙古自治区兴安盟乌兰浩特市', + '152202': '内蒙古自治区兴安盟阿尔山市', + '152221': '内蒙古自治区兴安盟科尔沁右翼前旗', + '152222': '内蒙古自治区兴安盟科尔沁右翼中旗', + '152223': '内蒙古自治区兴安盟扎赉特旗', + '152224': '内蒙古自治区兴安盟突泉县', + '152300': '内蒙古自治区哲里木盟', + '152301': '内蒙古自治区哲里木盟通辽市', + '152302': '内蒙古自治区哲里木盟霍林郭勒市', + '152322': '内蒙古自治区哲里木盟科尔沁左翼中旗', + '152323': '内蒙古自治区哲里木盟科尔沁左翼后旗', + '152324': '内蒙古自治区哲里木盟开鲁县', + '152325': '内蒙古自治区哲里木盟库伦旗', + '152326': '内蒙古自治区哲里木盟奈曼旗', + '152327': '内蒙古自治区哲里木盟扎鲁特旗', + '152500': '内蒙古自治区锡林郭勒盟', + '152501': '内蒙古自治区锡林郭勒盟二连浩特市', + '152502': '内蒙古自治区锡林郭勒盟锡林浩特市', + '152522': '内蒙古自治区锡林郭勒盟阿巴嘎旗', + '152523': '内蒙古自治区锡林郭勒盟苏尼特左旗', + '152524': '内蒙古自治区锡林郭勒盟苏尼特右旗', + '152525': '内蒙古自治区锡林郭勒盟东乌珠穆沁旗', + '152526': '内蒙古自治区锡林郭勒盟西乌珠穆沁旗', + '152527': '内蒙古自治区锡林郭勒盟太仆寺旗', + '152528': '内蒙古自治区锡林郭勒盟镶黄旗', + '152529': '内蒙古自治区锡林郭勒盟正镶白旗', + '152530': '内蒙古自治区锡林郭勒盟正蓝旗', + '152531': '内蒙古自治区锡林郭勒盟多伦县', + '152600': '内蒙古自治区乌兰察布盟', + '152601': '内蒙古自治区乌兰察布盟集宁市', + '152602': '内蒙古自治区乌兰察布盟丰镇市', + '152624': '内蒙古自治区乌兰察布盟卓资县', + '152625': '内蒙古自治区乌兰察布盟化德县', + '152626': '内蒙古自治区乌兰察布盟商都县', + '152627': '内蒙古自治区乌兰察布盟兴和县', + '152629': '内蒙古自治区乌兰察布盟凉城县', + '152630': '内蒙古自治区乌兰察布盟察哈尔右翼前旗', + '152631': '内蒙古自治区乌兰察布盟察哈尔右翼中旗', + '152632': '内蒙古自治区乌兰察布盟察哈尔右翼后旗', + '152634': '内蒙古自治区乌兰察布盟四子王旗', + '152700': '内蒙古自治区伊克昭盟', + '152701': '内蒙古自治区伊克昭盟东胜市', + '152722': '内蒙古自治区伊克昭盟达拉特旗', + '152723': '内蒙古自治区伊克昭盟准格尔旗', + '152724': '内蒙古自治区伊克昭盟鄂托克前旗', + '152725': '内蒙古自治区伊克昭盟鄂托克旗', + '152726': '内蒙古自治区伊克昭盟杭锦旗', + '152727': '内蒙古自治区伊克昭盟乌审旗', + '152728': '内蒙古自治区伊克昭盟伊金霍洛旗', + '152800': '内蒙古自治区巴彦淖尔盟', + '152801': '内蒙古自治区巴彦淖尔盟临河市', + '152822': '内蒙古自治区巴彦淖尔盟五原县', + '152823': '内蒙古自治区巴彦淖尔盟磴口县', + '152824': '内蒙古自治区巴彦淖尔盟乌拉特前旗', + '152825': '内蒙古自治区巴彦淖尔盟乌拉特中旗', + '152826': '内蒙古自治区巴彦淖尔盟乌拉特后旗', + '152827': '内蒙古自治区巴彦淖尔盟杭锦后旗', + '152900': '内蒙古自治区阿拉善盟', + '152921': '内蒙古自治区阿拉善盟阿拉善左旗', + '152922': '内蒙古自治区阿拉善盟阿拉善右旗', + '152923': '内蒙古自治区阿拉善盟额济纳旗', + '210000': '辽宁省', + '210100': '辽宁省沈阳市', + '210101': '辽宁省沈阳市市辖区', + '210102': '辽宁省沈阳市和平区', + '210103': '辽宁省沈阳市沈河区', + '210104': '辽宁省沈阳市大东区', + '210105': '辽宁省沈阳市皇姑区', + '210106': '辽宁省沈阳市铁西区', + '210111': '辽宁省沈阳市苏家屯区', + '210112': '辽宁省沈阳市东陵区', + '210113': '辽宁省沈阳市新城子区', + '210114': '辽宁省沈阳市于洪区', + '210122': '辽宁省沈阳市辽中县', + '210123': '辽宁省沈阳市康平县', + '210124': '辽宁省沈阳市法库县', + '210181': '辽宁省沈阳市新民市', + '210200': '辽宁省大连市', + '210201': '辽宁省大连市市辖区', + '210202': '辽宁省大连市中山区', + '210203': '辽宁省大连市西岗区', + '210204': '辽宁省大连市沙河口区', + '210211': '辽宁省大连市甘井子区', + '210212': '辽宁省大连市旅顺口区', + '210213': '辽宁省大连市金州区', + '210224': '辽宁省大连市长海县', + '210281': '辽宁省大连市瓦房店市', + '210282': '辽宁省大连市普兰店市', + '210283': '辽宁省大连市庄河市', + '210300': '辽宁省鞍山市', + '210301': '辽宁省鞍山市市辖区', + '210302': '辽宁省鞍山市铁东区', + '210303': '辽宁省鞍山市铁西区', + '210304': '辽宁省鞍山市立山区', + '210311': '辽宁省鞍山市千山区', + '210321': '辽宁省鞍山市台安县', + '210323': '辽宁省鞍山市岫岩满族自治县', + '210381': '辽宁省鞍山市海城市', + '210400': '辽宁省抚顺市', + '210401': '辽宁省抚顺市市辖区', + '210402': '辽宁省抚顺市新抚区', + '210403': '辽宁省抚顺市露天区', + '210404': '辽宁省抚顺市望花区', + '210411': '辽宁省抚顺市顺城区', + '210421': '辽宁省抚顺市抚顺县', + '210422': '辽宁省抚顺市新宾满族自治县', + '210423': '辽宁省抚顺市清原满族自治县', + '210500': '辽宁省本溪市', + '210501': '辽宁省本溪市市辖区', + '210502': '辽宁省本溪市平山区', + '210503': '辽宁省本溪市溪湖区', + '210504': '辽宁省本溪市明山区', + '210505': '辽宁省本溪市南芬区', + '210521': '辽宁省本溪市本溪满族自治县', + '210522': '辽宁省本溪市桓仁满族自治县', + '210600': '辽宁省丹东市', + '210601': '辽宁省丹东市市辖区', + '210602': '辽宁省丹东市元宝区', + '210603': '辽宁省丹东市振兴区', + '210604': '辽宁省丹东市振安区', + '210624': '辽宁省丹东市宽甸满族自治县', + '210681': '辽宁省丹东市东港市', + '210682': '辽宁省丹东市凤城市', + '210700': '辽宁省锦州市', + '210701': '辽宁省锦州市市辖区', + '210702': '辽宁省锦州市古塔区', + '210703': '辽宁省锦州市凌河区', + '210711': '辽宁省锦州市太和区', + '210726': '辽宁省锦州市黑山县', + '210727': '辽宁省锦州市义县', + '210781': '辽宁省锦州市凌海市', + '210782': '辽宁省锦州市北宁市', + '210800': '辽宁省营口市', + '210801': '辽宁省营口市市辖区', + '210802': '辽宁省营口市站前区', + '210803': '辽宁省营口市西市区', + '210804': '辽宁省营口市鲅鱼圈区', + '210811': '辽宁省营口市老边区', + '210881': '辽宁省营口市盖州市', + '210882': '辽宁省营口市大石桥市', + '210900': '辽宁省阜新市', + '210901': '辽宁省阜新市市辖区', + '210902': '辽宁省阜新市海州区', + '210903': '辽宁省阜新市新邱区', + '210904': '辽宁省阜新市太平区', + '210905': '辽宁省阜新市清河门区', + '210911': '辽宁省阜新市细河区', + '210921': '辽宁省阜新市阜新蒙古族自治县', + '210922': '辽宁省阜新市彰武县', + '211000': '辽宁省辽阳市', + '211001': '辽宁省辽阳市市辖区', + '211002': '辽宁省辽阳市白塔区', + '211003': '辽宁省辽阳市文圣区', + '211004': '辽宁省辽阳市宏伟区', + '211005': '辽宁省辽阳市弓长岭区', + '211011': '辽宁省辽阳市太子河区', + '211021': '辽宁省辽阳市辽阳县', + '211081': '辽宁省辽阳市灯塔市', + '211100': '辽宁省盘锦市', + '211101': '辽宁省盘锦市市辖区', + '211102': '辽宁省盘锦市双台子区', + '211103': '辽宁省盘锦市兴隆台区', + '211121': '辽宁省盘锦市大洼县', + '211122': '辽宁省盘锦市盘山县', + '211200': '辽宁省铁岭市', + '211201': '辽宁省铁岭市市辖区', + '211202': '辽宁省铁岭市银州区', + '211204': '辽宁省铁岭市清河区', + '211221': '辽宁省铁岭市铁岭县', + '211223': '辽宁省铁岭市西丰县', + '211224': '辽宁省铁岭市昌图县', + '211281': '辽宁省铁岭市铁法市', + '211282': '辽宁省铁岭市开原市', + '211300': '辽宁省朝阳市', + '211301': '辽宁省朝阳市市辖区', + '211302': '辽宁省朝阳市双塔区', + '211303': '辽宁省朝阳市龙城区', + '211321': '辽宁省朝阳市朝阳县', + '211322': '辽宁省朝阳市建平县', + '211324': '辽宁省朝阳市喀喇沁左翼蒙古族自治县', + '211381': '辽宁省朝阳市北票市', + '211382': '辽宁省朝阳市凌源市', + '211400': '辽宁省葫芦岛市', + '211401': '辽宁省葫芦岛市市辖区', + '211402': '辽宁省葫芦岛市连山区', + '211403': '辽宁省葫芦岛市龙港区', + '211404': '辽宁省葫芦岛市南票区', + '211421': '辽宁省葫芦岛市绥中县', + '211422': '辽宁省葫芦岛市建昌县', + '211481': '辽宁省葫芦岛市兴城市', + '220000': '吉林省', + '220100': '吉林省长春市', + '220101': '吉林省长春市市辖区', + '220102': '吉林省长春市南关区', + '220103': '吉林省长春市宽城区', + '220104': '吉林省长春市朝阳区', + '220105': '吉林省长春市二道区', + '220106': '吉林省长春市绿园区', + '220112': '吉林省长春市双阳区', + '220122': '吉林省长春市农安县', + '220181': '吉林省长春市九台市', + '220182': '吉林省长春市榆树市', + '220183': '吉林省长春市德惠市', + '220200': '吉林省吉林市', + '220201': '吉林省吉林市市辖区', + '220202': '吉林省吉林市昌邑区', + '220203': '吉林省吉林市龙潭区', + '220204': '吉林省吉林市船营区', + '220211': '吉林省吉林市丰满区', + '220221': '吉林省吉林市永吉县', + '220281': '吉林省吉林市蛟河市', + '220282': '吉林省吉林市桦甸市', + '220283': '吉林省吉林市舒兰市', + '220284': '吉林省吉林市磐石市', + '220300': '吉林省四平市', + '220301': '吉林省四平市市辖区', + '220302': '吉林省四平市铁西区', + '220303': '吉林省四平市铁东区', + '220322': '吉林省四平市梨树县', + '220323': '吉林省四平市伊通满族自治县', + '220381': '吉林省四平市公主岭市', + '220382': '吉林省四平市双辽市', + '220400': '吉林省辽源市', + '220401': '吉林省辽源市市辖区', + '220402': '吉林省辽源市龙山区', + '220403': '吉林省辽源市西安区', + '220421': '吉林省辽源市东丰县', + '220422': '吉林省辽源市东辽县', + '220500': '吉林省通化市', + '220501': '吉林省通化市市辖区', + '220502': '吉林省通化市东昌区', + '220503': '吉林省通化市二道江区', + '220521': '吉林省通化市通化县', + '220523': '吉林省通化市辉南县', + '220524': '吉林省通化市柳河县', + '220581': '吉林省通化市梅河口市', + '220582': '吉林省通化市集安市', + '220600': '吉林省白山市', + '220601': '吉林省白山市市辖区', + '220602': '吉林省白山市八道江区', + '220621': '吉林省白山市抚松县', + '220622': '吉林省白山市靖宇县', + '220623': '吉林省白山市长白朝鲜族自治县', + '220625': '吉林省白山市江源县', + '220681': '吉林省白山市临江市', + '220700': '吉林省松原市', + '220701': '吉林省松原市市辖区', + '220702': '吉林省松原市宁江区', + '220721': '吉林省松原市前郭尔罗斯蒙古族自治县', + '220722': '吉林省松原市长岭县', + '220723': '吉林省松原市乾安县', + '220724': '吉林省松原市扶余县', + '220800': '吉林省白城市', + '220801': '吉林省白城市市辖区', + '220802': '吉林省白城市洮北区', + '220821': '吉林省白城市镇赉县', + '220822': '吉林省白城市通榆县', + '220881': '吉林省白城市洮南市', + '220882': '吉林省白城市大安市', + '222400': '吉林省延边朝鲜族自治州', + '222401': '吉林省延边朝鲜族自治州延吉市', + '222402': '吉林省延边朝鲜族自治州图们市', + '222403': '吉林省延边朝鲜族自治州敦化市', + '222404': '吉林省延边朝鲜族自治州珲春市', + '222405': '吉林省延边朝鲜族自治州龙井市', + '222406': '吉林省延边朝鲜族自治州和龙市', + '222424': '吉林省延边朝鲜族自治州汪清县', + '222426': '吉林省延边朝鲜族自治州安图县', + '230000': '黑龙江省', + '230100': '黑龙江省哈尔滨市', + '230101': '黑龙江省哈尔滨市市辖区', + '230102': '黑龙江省哈尔滨市道里区', + '230103': '黑龙江省哈尔滨市南岗区', + '230104': '黑龙江省哈尔滨市道外区', + '230105': '黑龙江省哈尔滨市太平区', + '230106': '黑龙江省哈尔滨市香坊区', + '230107': '黑龙江省哈尔滨市动力区', + '230108': '黑龙江省哈尔滨市平房区', + '230121': '黑龙江省哈尔滨市呼兰县', + '230123': '黑龙江省哈尔滨市依兰县', + '230124': '黑龙江省哈尔滨市方正县', + '230125': '黑龙江省哈尔滨市宾县', + '230126': '黑龙江省哈尔滨市巴彦县', + '230127': '黑龙江省哈尔滨市木兰县', + '230128': '黑龙江省哈尔滨市通河县', + '230129': '黑龙江省哈尔滨市延寿县', + '230181': '黑龙江省哈尔滨市阿城市', + '230182': '黑龙江省哈尔滨市双城市', + '230183': '黑龙江省哈尔滨市尚志市', + '230184': '黑龙江省哈尔滨市五常市', + '230200': '黑龙江省齐齐哈尔市', + '230201': '黑龙江省齐齐哈尔市市辖区', + '230202': '黑龙江省齐齐哈尔市龙沙区', + '230203': '黑龙江省齐齐哈尔市建华区', + '230204': '黑龙江省齐齐哈尔市铁锋区', + '230205': '黑龙江省齐齐哈尔市昂昂溪区', + '230206': '黑龙江省齐齐哈尔市富拉尔基区', + '230207': '黑龙江省齐齐哈尔市碾子山区', + '230208': '黑龙江省齐齐哈尔市梅里斯达斡尔族区', + '230221': '黑龙江省齐齐哈尔市龙江县', + '230223': '黑龙江省齐齐哈尔市依安县', + '230224': '黑龙江省齐齐哈尔市泰来县', + '230225': '黑龙江省齐齐哈尔市甘南县', + '230227': '黑龙江省齐齐哈尔市富裕县', + '230229': '黑龙江省齐齐哈尔市克山县', + '230230': '黑龙江省齐齐哈尔市克东县', + '230231': '黑龙江省齐齐哈尔市拜泉县', + '230281': '黑龙江省齐齐哈尔市讷河市', + '230300': '黑龙江省鸡西市', + '230301': '黑龙江省鸡西市市辖区', + '230302': '黑龙江省鸡西市鸡冠区', + '230303': '黑龙江省鸡西市恒山区', + '230304': '黑龙江省鸡西市滴道区', + '230305': '黑龙江省鸡西市梨树区', + '230306': '黑龙江省鸡西市城子河区', + '230307': '黑龙江省鸡西市麻山区', + '230321': '黑龙江省鸡西市鸡东县', + '230381': '黑龙江省鸡西市虎林市', + '230382': '黑龙江省鸡西市密山市', + '230400': '黑龙江省鹤岗市', + '230401': '黑龙江省鹤岗市市辖区', + '230402': '黑龙江省鹤岗市向阳区', + '230403': '黑龙江省鹤岗市工农区', + '230404': '黑龙江省鹤岗市南山区', + '230405': '黑龙江省鹤岗市兴安区', + '230406': '黑龙江省鹤岗市东山区', + '230407': '黑龙江省鹤岗市兴山区', + '230421': '黑龙江省鹤岗市萝北县', + '230422': '黑龙江省鹤岗市绥滨县', + '230500': '黑龙江省双鸭山市', + '230501': '黑龙江省双鸭山市市辖区', + '230502': '黑龙江省双鸭山市尖山区', + '230503': '黑龙江省双鸭山市岭东区', + '230505': '黑龙江省双鸭山市四方台区', + '230506': '黑龙江省双鸭山市宝山区', + '230521': '黑龙江省双鸭山市集贤县', + '230522': '黑龙江省双鸭山市友谊县', + '230523': '黑龙江省双鸭山市宝清县', + '230524': '黑龙江省双鸭山市饶河县', + '230600': '黑龙江省大庆市', + '230601': '黑龙江省大庆市市辖区', + '230602': '黑龙江省大庆市萨尔图区', + '230603': '黑龙江省大庆市龙凤区', + '230604': '黑龙江省大庆市让胡路区', + '230605': '黑龙江省大庆市红岗区', + '230606': '黑龙江省大庆市大同区', + '230621': '黑龙江省大庆市肇州县', + '230622': '黑龙江省大庆市肇源县', + '230623': '黑龙江省大庆市林甸县', + '230624': '黑龙江省大庆市杜尔伯特蒙古族自治县', + '230700': '黑龙江省伊春市', + '230701': '黑龙江省伊春市市辖区', + '230702': '黑龙江省伊春市伊春区', + '230703': '黑龙江省伊春市南岔区', + '230704': '黑龙江省伊春市友好区', + '230705': '黑龙江省伊春市西林区', + '230706': '黑龙江省伊春市翠峦区', + '230707': '黑龙江省伊春市新青区', + '230708': '黑龙江省伊春市美溪区', + '230709': '黑龙江省伊春市金山屯区', + '230710': '黑龙江省伊春市五营区', + '230711': '黑龙江省伊春市乌马河区', + '230712': '黑龙江省伊春市汤旺河区', + '230713': '黑龙江省伊春市带岭区', + '230714': '黑龙江省伊春市乌伊岭区', + '230715': '黑龙江省伊春市红星区', + '230716': '黑龙江省伊春市上甘岭区', + '230722': '黑龙江省伊春市嘉荫县', + '230781': '黑龙江省伊春市铁力市', + '230800': '黑龙江省佳木斯市', + '230801': '黑龙江省佳木斯市市辖区', + '230802': '黑龙江省佳木斯市永红区', + '230803': '黑龙江省佳木斯市向阳区', + '230804': '黑龙江省佳木斯市前进区', + '230805': '黑龙江省佳木斯市东风区', + '230811': '黑龙江省佳木斯市郊区', + '230822': '黑龙江省佳木斯市桦南县', + '230826': '黑龙江省佳木斯市桦川县', + '230828': '黑龙江省佳木斯市汤原县', + '230833': '黑龙江省佳木斯市抚远县', + '230881': '黑龙江省佳木斯市同江市', + '230882': '黑龙江省佳木斯市富锦市', + '230900': '黑龙江省七台河市', + '230901': '黑龙江省七台河市市辖区', + '230902': '黑龙江省七台河市新兴区', + '230903': '黑龙江省七台河市桃山区', + '230904': '黑龙江省七台河市茄子河区', + '230921': '黑龙江省七台河市勃利县', + '231000': '黑龙江省牡丹江市', + '231001': '黑龙江省牡丹江市市辖区', + '231002': '黑龙江省牡丹江市东安区', + '231003': '黑龙江省牡丹江市阳明区', + '231004': '黑龙江省牡丹江市爱民区', + '231005': '黑龙江省牡丹江市西安区', + '231024': '黑龙江省牡丹江市东宁县', + '231025': '黑龙江省牡丹江市林口县', + '231081': '黑龙江省牡丹江市绥芬河市', + '231083': '黑龙江省牡丹江市海林市', + '231084': '黑龙江省牡丹江市宁安市', + '231085': '黑龙江省牡丹江市穆棱市', + '231100': '黑龙江省黑河市', + '231101': '黑龙江省黑河市市辖区', + '231102': '黑龙江省黑河市爱辉区', + '231121': '黑龙江省黑河市嫩江县', + '231123': '黑龙江省黑河市逊克县', + '231124': '黑龙江省黑河市孙吴县', + '231181': '黑龙江省黑河市北安市', + '231182': '黑龙江省黑河市五大连池市', + '232300': '黑龙江省绥化地区', + '232301': '黑龙江省绥化地区绥化市', + '232302': '黑龙江省绥化地区安达市', + '232303': '黑龙江省绥化地区肇东市', + '232304': '黑龙江省绥化地区海伦市', + '232324': '黑龙江省绥化地区望奎县', + '232325': '黑龙江省绥化地区兰西县', + '232326': '黑龙江省绥化地区青冈县', + '232330': '黑龙江省绥化地区庆安县', + '232331': '黑龙江省绥化地区明水县', + '232332': '黑龙江省绥化地区绥棱县', + '232700': '黑龙江省大兴安岭地区', + '232721': '黑龙江省大兴安岭地区呼玛县', + '232722': '黑龙江省大兴安岭地区塔河县', + '232723': '黑龙江省大兴安岭地区漠河县', + '310000': '上海市', + '310100': '上海市市辖区', + '310101': '上海市黄浦区', + '310102': '上海市南市区', + '310103': '上海市卢湾区', + '310104': '上海市徐汇区', + '310105': '上海市长宁区', + '310106': '上海市静安区', + '310107': '上海市普陀区', + '310108': '上海市闸北区', + '310109': '上海市虹口区', + '310110': '上海市杨浦区', + '310112': '上海市闵行区', + '310113': '上海市宝山区', + '310114': '上海市嘉定区', + '310115': '上海市浦东新区', + '310116': '上海市金山区', + '310117': '上海市松江区', + '310200': '上海市县', + '310225': '上海市南汇县', + '310226': '上海市奉贤县', + '310229': '上海市青浦县', + '310230': '上海市崇明县', + '320000': '江苏省', + '320100': '江苏省南京市', + '320101': '江苏省南京市市辖区', + '320102': '江苏省南京市玄武区', + '320103': '江苏省南京市白下区', + '320104': '江苏省南京市秦淮区', + '320105': '江苏省南京市建邺区', + '320106': '江苏省南京市鼓楼区', + '320107': '江苏省南京市下关区', + '320111': '江苏省南京市浦口区', + '320112': '江苏省南京市大厂区', + '320113': '江苏省南京市栖霞区', + '320114': '江苏省南京市雨花台区', + '320121': '江苏省南京市江宁县', + '320122': '江苏省南京市江浦县', + '320123': '江苏省南京市六合县', + '320124': '江苏省南京市溧水县', + '320125': '江苏省南京市高淳县', + '320200': '江苏省无锡市', + '320201': '江苏省无锡市市辖区', + '320202': '江苏省无锡市崇安区', + '320203': '江苏省无锡市南长区', + '320204': '江苏省无锡市北塘区', + '320211': '江苏省无锡市郊区', + '320281': '江苏省无锡市江阴市', + '320282': '江苏省无锡市宜兴市', + '320283': '江苏省无锡市锡山市', + '320300': '江苏省徐州市', + '320301': '江苏省徐州市市辖区', + '320302': '江苏省徐州市鼓楼区', + '320303': '江苏省徐州市云龙区', + '320304': '江苏省徐州市九里区', + '320305': '江苏省徐州市贾汪区', + '320311': '江苏省徐州市泉山区', + '320321': '江苏省徐州市丰县', + '320322': '江苏省徐州市沛县', + '320323': '江苏省徐州市铜山县', + '320324': '江苏省徐州市睢宁县', + '320381': '江苏省徐州市新沂市', + '320382': '江苏省徐州市邳州市', + '320400': '江苏省常州市', + '320401': '江苏省常州市市辖区', + '320402': '江苏省常州市天宁区', + '320404': '江苏省常州市钟楼区', + '320405': '江苏省常州市戚墅堰区', + '320411': '江苏省常州市郊区', + '320481': '江苏省常州市溧阳市', + '320482': '江苏省常州市金坛市', + '320483': '江苏省常州市武进市', + '320500': '江苏省苏州市', + '320501': '江苏省苏州市市辖区', + '320502': '江苏省苏州市沧浪区', + '320503': '江苏省苏州市平江区', + '320504': '江苏省苏州市金阊区', + '320511': '江苏省苏州市郊区', + '320581': '江苏省苏州市常熟市', + '320582': '江苏省苏州市张家港市', + '320583': '江苏省苏州市昆山市', + '320584': '江苏省苏州市吴江市', + '320585': '江苏省苏州市太仓市', + '320586': '江苏省苏州市吴县市', + '320600': '江苏省南通市', + '320601': '江苏省南通市市辖区', + '320602': '江苏省南通市崇川区', + '320611': '江苏省南通市港闸区', + '320621': '江苏省南通市海安县', + '320623': '江苏省南通市如东县', + '320681': '江苏省南通市启东市', + '320682': '江苏省南通市如皋市', + '320683': '江苏省南通市通州市', + '320684': '江苏省南通市海门市', + '320700': '江苏省连云港市', + '320701': '江苏省连云港市市辖区', + '320703': '江苏省连云港市连云区', + '320704': '江苏省连云港市云台区', + '320705': '江苏省连云港市新浦区', + '320706': '江苏省连云港市海州区', + '320721': '江苏省连云港市赣榆县', + '320722': '江苏省连云港市东海县', + '320723': '江苏省连云港市灌云县', + '320724': '江苏省连云港市灌南县', + '320800': '江苏省淮阴市', + '320801': '江苏省淮阴市市辖区', + '320802': '江苏省淮阴市清河区', + '320811': '江苏省淮阴市清浦区', + '320821': '江苏省淮阴市淮阴县', + '320826': '江苏省淮阴市涟水县', + '320829': '江苏省淮阴市洪泽县', + '320830': '江苏省淮阴市盱眙县', + '320831': '江苏省淮阴市金湖县', + '320882': '江苏省淮阴市淮安市', + '320900': '江苏省盐城市', + '320901': '江苏省盐城市市辖区', + '320902': '江苏省盐城市城区', + '320921': '江苏省盐城市响水县', + '320922': '江苏省盐城市滨海县', + '320923': '江苏省盐城市阜宁县', + '320924': '江苏省盐城市射阳县', + '320925': '江苏省盐城市建湖县', + '320928': '江苏省盐城市盐都县', + '320981': '江苏省盐城市东台市', + '320982': '江苏省盐城市大丰市', + '321000': '江苏省扬州市', + '321001': '江苏省扬州市市辖区', + '321002': '江苏省扬州市广陵区', + '321011': '江苏省扬州市郊区', + '321023': '江苏省扬州市宝应县', + '321027': '江苏省扬州市邗江县', + '321081': '江苏省扬州市仪征市', + '321084': '江苏省扬州市高邮市', + '321088': '江苏省扬州市江都市', + '321100': '江苏省镇江市', + '321101': '江苏省镇江市市辖区', + '321102': '江苏省镇江市京口区', + '321111': '江苏省镇江市润州区', + '321121': '江苏省镇江市丹徒县', + '321181': '江苏省镇江市丹阳市', + '321182': '江苏省镇江市扬中市', + '321183': '江苏省镇江市句容市', + '321200': '江苏省泰州市', + '321201': '江苏省泰州市市辖区', + '321202': '江苏省泰州市海陵区', + '321203': '江苏省泰州市高港区', + '321281': '江苏省泰州市兴化市', + '321282': '江苏省泰州市靖江市', + '321283': '江苏省泰州市泰兴市', + '321284': '江苏省泰州市姜堰市', + '321300': '江苏省宿迁市', + '321301': '江苏省宿迁市市辖区', + '321302': '江苏省宿迁市宿城区', + '321321': '江苏省宿迁市宿豫县', + '321322': '江苏省宿迁市沭阳县', + '321323': '江苏省宿迁市泗阳县', + '321324': '江苏省宿迁市泗洪县', + '330000': '浙江省', + '330100': '浙江省杭州市', + '330101': '浙江省杭州市市辖区', + '330102': '浙江省杭州市上城区', + '330103': '浙江省杭州市下城区', + '330104': '浙江省杭州市江干区', + '330105': '浙江省杭州市拱墅区', + '330106': '浙江省杭州市西湖区', + '330108': '浙江省杭州市滨江区', + '330122': '浙江省杭州市桐庐县', + '330127': '浙江省杭州市淳安县', + '330181': '浙江省杭州市萧山市', + '330182': '浙江省杭州市建德市', + '330183': '浙江省杭州市富阳市', + '330184': '浙江省杭州市余杭市', + '330185': '浙江省杭州市临安市', + '330200': '浙江省宁波市', + '330201': '浙江省宁波市市辖区', + '330203': '浙江省宁波市海曙区', + '330204': '浙江省宁波市江东区', + '330205': '浙江省宁波市江北区', + '330206': '浙江省宁波市北仑区', + '330211': '浙江省宁波市镇海区', + '330225': '浙江省宁波市象山县', + '330226': '浙江省宁波市宁海县', + '330227': '浙江省宁波市鄞县', + '330281': '浙江省宁波市余姚市', + '330282': '浙江省宁波市慈溪市', + '330283': '浙江省宁波市奉化市', + '330300': '浙江省温州市', + '330301': '浙江省温州市市辖区', + '330302': '浙江省温州市鹿城区', + '330303': '浙江省温州市龙湾区', + '330304': '浙江省温州市瓯海区', + '330322': '浙江省温州市洞头县', + '330324': '浙江省温州市永嘉县', + '330326': '浙江省温州市平阳县', + '330327': '浙江省温州市苍南县', + '330328': '浙江省温州市文成县', + '330329': '浙江省温州市泰顺县', + '330381': '浙江省温州市瑞安市', + '330382': '浙江省温州市乐清市', + '330400': '浙江省嘉兴市', + '330401': '浙江省嘉兴市市辖区', + '330402': '浙江省嘉兴市秀城区', + '330411': '浙江省嘉兴市郊区', + '330421': '浙江省嘉兴市嘉善县', + '330424': '浙江省嘉兴市海盐县', + '330481': '浙江省嘉兴市海宁市', + '330482': '浙江省嘉兴市平湖市', + '330483': '浙江省嘉兴市桐乡市', + '330500': '浙江省湖州市', + '330501': '浙江省湖州市市辖区', + '330521': '浙江省湖州市德清县', + '330522': '浙江省湖州市长兴县', + '330523': '浙江省湖州市安吉县', + '330600': '浙江省绍兴市', + '330601': '浙江省绍兴市市辖区', + '330602': '浙江省绍兴市越城区', + '330621': '浙江省绍兴市绍兴县', + '330624': '浙江省绍兴市新昌县', + '330681': '浙江省绍兴市诸暨市', + '330682': '浙江省绍兴市上虞市', + '330683': '浙江省绍兴市嵊州市', + '330700': '浙江省金华市', + '330701': '浙江省金华市市辖区', + '330702': '浙江省金华市婺城区', + '330721': '浙江省金华市金华县', + '330723': '浙江省金华市武义县', + '330726': '浙江省金华市浦江县', + '330727': '浙江省金华市磐安县', + '330781': '浙江省金华市兰溪市', + '330782': '浙江省金华市义乌市', + '330783': '浙江省金华市东阳市', + '330784': '浙江省金华市永康市', + '330800': '浙江省衢州市', + '330801': '浙江省衢州市市辖区', + '330802': '浙江省衢州市柯城区', + '330821': '浙江省衢州市衢县', + '330822': '浙江省衢州市常山县', + '330824': '浙江省衢州市开化县', + '330825': '浙江省衢州市龙游县', + '330881': '浙江省衢州市江山市', + '330900': '浙江省舟山市', + '330901': '浙江省舟山市市辖区', + '330902': '浙江省舟山市定海区', + '330903': '浙江省舟山市普陀区', + '330921': '浙江省舟山市岱山县', + '330922': '浙江省舟山市嵊泗县', + '331000': '浙江省台州市', + '331001': '浙江省台州市市辖区', + '331002': '浙江省台州市椒江区', + '331003': '浙江省台州市黄岩区', + '331004': '浙江省台州市路桥区', + '331021': '浙江省台州市玉环县', + '331022': '浙江省台州市三门县', + '331023': '浙江省台州市天台县', + '331024': '浙江省台州市仙居县', + '331081': '浙江省台州市温岭市', + '331082': '浙江省台州市临海市', + '332500': '浙江省丽水地区', + '332501': '浙江省丽水地区丽水市', + '332502': '浙江省丽水地区龙泉市', + '332522': '浙江省丽水地区青田县', + '332523': '浙江省丽水地区云和县', + '332525': '浙江省丽水地区庆元县', + '332526': '浙江省丽水地区缙云县', + '332527': '浙江省丽水地区遂昌县', + '332528': '浙江省丽水地区松阳县', + '332529': '浙江省丽水地区景宁畲族自治县', + '340000': '安徽省', + '340100': '安徽省合肥市', + '340101': '安徽省合肥市市辖区', + '340102': '安徽省合肥市东市区', + '340103': '安徽省合肥市中市区', + '340104': '安徽省合肥市西市区', + '340111': '安徽省合肥市郊区', + '340121': '安徽省合肥市长丰县', + '340122': '安徽省合肥市肥东县', + '340123': '安徽省合肥市肥西县', + '340200': '安徽省芜湖市', + '340201': '安徽省芜湖市市辖区', + '340202': '安徽省芜湖市镜湖区', + '340203': '安徽省芜湖市马塘区', + '340204': '安徽省芜湖市新芜区', + '340207': '安徽省芜湖市鸠江区', + '340221': '安徽省芜湖市芜湖县', + '340222': '安徽省芜湖市繁昌县', + '340223': '安徽省芜湖市南陵县', + '340300': '安徽省蚌埠市', + '340301': '安徽省蚌埠市市辖区', + '340302': '安徽省蚌埠市东市区', + '340303': '安徽省蚌埠市中市区', + '340304': '安徽省蚌埠市西市区', + '340311': '安徽省蚌埠市郊区', + '340321': '安徽省蚌埠市怀远县', + '340322': '安徽省蚌埠市五河县', + '340323': '安徽省蚌埠市固镇县', + '340400': '安徽省淮南市', + '340401': '安徽省淮南市市辖区', + '340402': '安徽省淮南市大通区', + '340403': '安徽省淮南市田家庵区', + '340404': '安徽省淮南市谢家集区', + '340405': '安徽省淮南市八公山区', + '340406': '安徽省淮南市潘集区', + '340421': '安徽省淮南市凤台县', + '340500': '安徽省马鞍山市', + '340501': '安徽省马鞍山市市辖区', + '340502': '安徽省马鞍山市金家庄区', + '340503': '安徽省马鞍山市花山区', + '340504': '安徽省马鞍山市雨山区', + '340505': '安徽省马鞍山市向山区', + '340521': '安徽省马鞍山市当涂县', + '340600': '安徽省淮北市', + '340601': '安徽省淮北市市辖区', + '340602': '安徽省淮北市杜集区', + '340603': '安徽省淮北市相山区', + '340604': '安徽省淮北市烈山区', + '340621': '安徽省淮北市濉溪县', + '340700': '安徽省铜陵市', + '340701': '安徽省铜陵市市辖区', + '340702': '安徽省铜陵市铜官山区', + '340703': '安徽省铜陵市狮子山区', + '340711': '安徽省铜陵市郊区', + '340721': '安徽省铜陵市铜陵县', + '340800': '安徽省安庆市', + '340801': '安徽省安庆市市辖区', + '340802': '安徽省安庆市迎江区', + '340803': '安徽省安庆市大观区', + '340811': '安徽省安庆市郊区', + '340822': '安徽省安庆市怀宁县', + '340823': '安徽省安庆市枞阳县', + '340824': '安徽省安庆市潜山县', + '340825': '安徽省安庆市太湖县', + '340826': '安徽省安庆市宿松县', + '340827': '安徽省安庆市望江县', + '340828': '安徽省安庆市岳西县', + '340881': '安徽省安庆市桐城市', + '341000': '安徽省黄山市', + '341001': '安徽省黄山市市辖区', + '341002': '安徽省黄山市屯溪区', + '341003': '安徽省黄山市黄山区', + '341004': '安徽省黄山市徽州区', + '341021': '安徽省黄山市歙县', + '341022': '安徽省黄山市休宁县', + '341023': '安徽省黄山市黟县', + '341024': '安徽省黄山市祁门县', + '341100': '安徽省滁州市', + '341101': '安徽省滁州市市辖区', + '341102': '安徽省滁州市琅琊区', + '341103': '安徽省滁州市南谯区', + '341122': '安徽省滁州市来安县', + '341124': '安徽省滁州市全椒县', + '341125': '安徽省滁州市定远县', + '341126': '安徽省滁州市凤阳县', + '341181': '安徽省滁州市天长市', + '341182': '安徽省滁州市明光市', + '341200': '安徽省阜阳市', + '341201': '安徽省阜阳市市辖区', + '341202': '安徽省阜阳市颍州区', + '341203': '安徽省阜阳市颍东区', + '341204': '安徽省阜阳市颍泉区', + '341221': '安徽省阜阳市临泉县', + '341222': '安徽省阜阳市太和县', + '341223': '安徽省阜阳市涡阳县', + '341224': '安徽省阜阳市蒙城县', + '341225': '安徽省阜阳市阜南县', + '341226': '安徽省阜阳市颍上县', + '341227': '安徽省阜阳市利辛县', + '341281': '安徽省阜阳市亳州市', + '341282': '安徽省阜阳市界首市', + '341300': '安徽省宿州市', + '341301': '安徽省宿州市市辖区', + '341302': '安徽省宿州市甬桥区', + '341321': '安徽省宿州市砀山县', + '341322': '安徽省宿州市萧县', + '341323': '安徽省宿州市灵璧县', + '341324': '安徽省宿州市泗县', + '342400': '安徽省六安地区', + '342401': '安徽省六安地区六安市', + '342422': '安徽省六安地区寿县', + '342423': '安徽省六安地区霍邱县', + '342425': '安徽省六安地区舒城县', + '342426': '安徽省六安地区金寨县', + '342427': '安徽省六安地区霍山县', + '342500': '安徽省宣城地区', + '342501': '安徽省宣城地区宣州市', + '342502': '安徽省宣城地区宁国市', + '342522': '安徽省宣城地区郎溪县', + '342523': '安徽省宣城地区广德县', + '342529': '安徽省宣城地区泾县', + '342530': '安徽省宣城地区旌德县', + '342531': '安徽省宣城地区绩溪县', + '342600': '安徽省巢湖地区', + '342601': '安徽省巢湖地区巢湖市', + '342622': '安徽省巢湖地区庐江县', + '342623': '安徽省巢湖地区无为县', + '342625': '安徽省巢湖地区含山县', + '342626': '安徽省巢湖地区和县', + '342900': '安徽省池州地区', + '342901': '安徽省池州地区贵池市', + '342921': '安徽省池州地区东至县', + '342922': '安徽省池州地区石台县', + '342923': '安徽省池州地区青阳县', + '350000': '福建省', + '350100': '福建省福州市', + '350101': '福建省福州市市辖区', + '350102': '福建省福州市鼓楼区', + '350103': '福建省福州市台江区', + '350104': '福建省福州市仓山区', + '350105': '福建省福州市马尾区', + '350111': '福建省福州市晋安区', + '350121': '福建省福州市闽侯县', + '350122': '福建省福州市连江县', + '350123': '福建省福州市罗源县', + '350124': '福建省福州市闽清县', + '350125': '福建省福州市永泰县', + '350128': '福建省福州市平潭县', + '350181': '福建省福州市福清市', + '350182': '福建省福州市长乐市', + '350200': '福建省厦门市', + '350201': '福建省厦门市市辖区', + '350202': '福建省厦门市鼓浪屿区', + '350203': '福建省厦门市思明区', + '350204': '福建省厦门市开元区', + '350205': '福建省厦门市杏林区', + '350206': '福建省厦门市湖里区', + '350211': '福建省厦门市集美区', + '350212': '福建省厦门市同安区', + '350300': '福建省莆田市', + '350301': '福建省莆田市市辖区', + '350302': '福建省莆田市城厢区', + '350303': '福建省莆田市涵江区', + '350321': '福建省莆田市莆田县', + '350322': '福建省莆田市仙游县', + '350400': '福建省三明市', + '350401': '福建省三明市市辖区', + '350402': '福建省三明市梅列区', + '350403': '福建省三明市三元区', + '350421': '福建省三明市明溪县', + '350423': '福建省三明市清流县', + '350424': '福建省三明市宁化县', + '350425': '福建省三明市大田县', + '350426': '福建省三明市尤溪县', + '350427': '福建省三明市沙县', + '350428': '福建省三明市将乐县', + '350429': '福建省三明市泰宁县', + '350430': '福建省三明市建宁县', + '350481': '福建省三明市永安市', + '350500': '福建省泉州市', + '350501': '福建省泉州市市辖区', + '350502': '福建省泉州市鲤城区', + '350503': '福建省泉州市丰泽区', + '350504': '福建省泉州市洛江区', + '350521': '福建省泉州市惠安县', + '350524': '福建省泉州市安溪县', + '350525': '福建省泉州市永春县', + '350526': '福建省泉州市德化县', + '350527': '福建省泉州市金门县', + '350581': '福建省泉州市石狮市', + '350582': '福建省泉州市晋江市', + '350583': '福建省泉州市南安市', + '350600': '福建省漳州市', + '350601': '福建省漳州市市辖区', + '350602': '福建省漳州市芗城区', + '350603': '福建省漳州市龙文区', + '350622': '福建省漳州市云霄县', + '350623': '福建省漳州市漳浦县', + '350624': '福建省漳州市诏安县', + '350625': '福建省漳州市长泰县', + '350626': '福建省漳州市东山县', + '350627': '福建省漳州市南靖县', + '350628': '福建省漳州市平和县', + '350629': '福建省漳州市华安县', + '350681': '福建省漳州市龙海市', + '350700': '福建省南平市', + '350701': '福建省南平市市辖区', + '350702': '福建省南平市延平区', + '350721': '福建省南平市顺昌县', + '350722': '福建省南平市浦城县', + '350723': '福建省南平市光泽县', + '350724': '福建省南平市松溪县', + '350725': '福建省南平市政和县', + '350781': '福建省南平市邵武市', + '350782': '福建省南平市武夷山市', + '350783': '福建省南平市建瓯市', + '350784': '福建省南平市建阳市', + '350800': '福建省龙岩市', + '350801': '福建省龙岩市市辖区', + '350802': '福建省龙岩市新罗区', + '350821': '福建省龙岩市长汀县', + '350822': '福建省龙岩市永定县', + '350823': '福建省龙岩市上杭县', + '350824': '福建省龙岩市武平县', + '350825': '福建省龙岩市连城县', + '350881': '福建省龙岩市漳平市', + '352200': '福建省宁德地区', + '352201': '福建省宁德地区宁德市', + '352202': '福建省宁德地区福安市', + '352203': '福建省宁德地区福鼎市', + '352225': '福建省宁德地区霞浦县', + '352227': '福建省宁德地区古田县', + '352228': '福建省宁德地区屏南县', + '352229': '福建省宁德地区寿宁县', + '352230': '福建省宁德地区周宁县', + '352231': '福建省宁德地区柘荣县', + '360000': '江西省', + '360100': '江西省南昌市', + '360101': '江西省南昌市市辖区', + '360102': '江西省南昌市东湖区', + '360103': '江西省南昌市西湖区', + '360104': '江西省南昌市青云谱区', + '360105': '江西省南昌市湾里区', + '360111': '江西省南昌市郊区', + '360121': '江西省南昌市南昌县', + '360122': '江西省南昌市新建县', + '360123': '江西省南昌市安义县', + '360124': '江西省南昌市进贤县', + '360200': '江西省景德镇市', + '360201': '江西省景德镇市市辖区', + '360202': '江西省景德镇市昌江区', + '360203': '江西省景德镇市珠山区', + '360222': '江西省景德镇市浮梁县', + '360281': '江西省景德镇市乐平市', + '360300': '江西省萍乡市', + '360301': '江西省萍乡市市辖区', + '360302': '江西省萍乡市安源区', + '360313': '江西省萍乡市湘东区', + '360321': '江西省萍乡市莲花县', + '360322': '江西省萍乡市上栗县', + '360323': '江西省萍乡市芦溪县', + '360400': '江西省九江市', + '360401': '江西省九江市市辖区', + '360402': '江西省九江市庐山区', + '360403': '江西省九江市浔阳区', + '360421': '江西省九江市九江县', + '360423': '江西省九江市武宁县', + '360424': '江西省九江市修水县', + '360425': '江西省九江市永修县', + '360426': '江西省九江市德安县', + '360427': '江西省九江市星子县', + '360428': '江西省九江市都昌县', + '360429': '江西省九江市湖口县', + '360430': '江西省九江市彭泽县', + '360481': '江西省九江市瑞昌市', + '360500': '江西省新余市', + '360501': '江西省新余市市辖区', + '360502': '江西省新余市渝水区', + '360521': '江西省新余市分宜县', + '360600': '江西省鹰潭市', + '360601': '江西省鹰潭市市辖区', + '360602': '江西省鹰潭市月湖区', + '360622': '江西省鹰潭市余江县', + '360681': '江西省鹰潭市贵溪市', + '360700': '江西省赣州市', + '360701': '江西省赣州市市辖区', + '360702': '江西省赣州市章贡区', + '360721': '江西省赣州市赣县', + '360722': '江西省赣州市信丰县', + '360723': '江西省赣州市大余县', + '360724': '江西省赣州市上犹县', + '360725': '江西省赣州市崇义县', + '360726': '江西省赣州市安远县', + '360727': '江西省赣州市龙南县', + '360728': '江西省赣州市定南县', + '360729': '江西省赣州市全南县', + '360730': '江西省赣州市宁都县', + '360731': '江西省赣州市于都县', + '360732': '江西省赣州市兴国县', + '360733': '江西省赣州市会昌县', + '360734': '江西省赣州市寻乌县', + '360735': '江西省赣州市石城县', + '360781': '江西省赣州市瑞金市', + '360782': '江西省赣州市南康市', + '362200': '江西省宜春地区', + '362201': '江西省宜春地区宜春市', + '362202': '江西省宜春地区丰城市', + '362203': '江西省宜春地区樟树市', + '362204': '江西省宜春地区高安市', + '362226': '江西省宜春地区奉新县', + '362227': '江西省宜春地区万载县', + '362228': '江西省宜春地区上高县', + '362229': '江西省宜春地区宜丰县', + '362232': '江西省宜春地区靖安县', + '362233': '江西省宜春地区铜鼓县', + '362300': '江西省上饶地区', + '362301': '江西省上饶地区上饶市', + '362302': '江西省上饶地区德兴市', + '362321': '江西省上饶地区上饶县', + '362322': '江西省上饶地区广丰县', + '362323': '江西省上饶地区玉山县', + '362324': '江西省上饶地区铅山县', + '362325': '江西省上饶地区横峰县', + '362326': '江西省上饶地区弋阳县', + '362329': '江西省上饶地区余干县', + '362330': '江西省上饶地区波阳县', + '362331': '江西省上饶地区万年县', + '362334': '江西省上饶地区婺源县', + '362400': '江西省吉安地区', + '362401': '江西省吉安地区吉安市', + '362402': '江西省吉安地区井冈山市', + '362421': '江西省吉安地区吉安县', + '362422': '江西省吉安地区吉水县', + '362423': '江西省吉安地区峡江县', + '362424': '江西省吉安地区新干县', + '362425': '江西省吉安地区永丰县', + '362426': '江西省吉安地区泰和县', + '362427': '江西省吉安地区遂川县', + '362428': '江西省吉安地区万安县', + '362429': '江西省吉安地区安福县', + '362430': '江西省吉安地区永新县', + '362432': '江西省吉安地区宁冈县', + '362500': '江西省抚州地区', + '362502': '江西省抚州地区临川市', + '362522': '江西省抚州地区南城县', + '362523': '江西省抚州地区黎川县', + '362524': '江西省抚州地区南丰县', + '362525': '江西省抚州地区崇仁县', + '362526': '江西省抚州地区乐安县', + '362527': '江西省抚州地区宜黄县', + '362528': '江西省抚州地区金溪县', + '362529': '江西省抚州地区资溪县', + '362531': '江西省抚州地区东乡县', + '362532': '江西省抚州地区广昌县', + '370000': '山东省', + '370100': '山东省济南市', + '370101': '山东省济南市市辖区', + '370102': '山东省济南市历下区', + '370103': '山东省济南市市中区', + '370104': '山东省济南市槐荫区', + '370105': '山东省济南市天桥区', + '370112': '山东省济南市历城区', + '370123': '山东省济南市长清县', + '370124': '山东省济南市平阴县', + '370125': '山东省济南市济阳县', + '370126': '山东省济南市商河县', + '370181': '山东省济南市章丘市', + '370200': '山东省青岛市', + '370201': '山东省青岛市市辖区', + '370202': '山东省青岛市市南区', + '370203': '山东省青岛市市北区', + '370205': '山东省青岛市四方区', + '370211': '山东省青岛市黄岛区', + '370212': '山东省青岛市崂山区', + '370213': '山东省青岛市李沧区', + '370214': '山东省青岛市城阳区', + '370281': '山东省青岛市胶州市', + '370282': '山东省青岛市即墨市', + '370283': '山东省青岛市平度市', + '370284': '山东省青岛市胶南市', + '370285': '山东省青岛市莱西市', + '370300': '山东省淄博市', + '370301': '山东省淄博市市辖区', + '370302': '山东省淄博市淄川区', + '370303': '山东省淄博市张店区', + '370304': '山东省淄博市博山区', + '370305': '山东省淄博市临淄区', + '370306': '山东省淄博市周村区', + '370321': '山东省淄博市桓台县', + '370322': '山东省淄博市高青县', + '370323': '山东省淄博市沂源县', + '370400': '山东省枣庄市', + '370401': '山东省枣庄市市辖区', + '370402': '山东省枣庄市市中区', + '370403': '山东省枣庄市薛城区', + '370404': '山东省枣庄市峄城区', + '370405': '山东省枣庄市台儿庄区', + '370406': '山东省枣庄市山亭区', + '370481': '山东省枣庄市滕州市', + '370500': '山东省东营市', + '370501': '山东省东营市市辖区', + '370502': '山东省东营市东营区', + '370503': '山东省东营市河口区', + '370521': '山东省东营市垦利县', + '370522': '山东省东营市利津县', + '370523': '山东省东营市广饶县', + '370600': '山东省烟台市', + '370601': '山东省烟台市市辖区', + '370602': '山东省烟台市芝罘区', + '370611': '山东省烟台市福山区', + '370612': '山东省烟台市牟平区', + '370613': '山东省烟台市莱山区', + '370634': '山东省烟台市长岛县', + '370681': '山东省烟台市龙口市', + '370682': '山东省烟台市莱阳市', + '370683': '山东省烟台市莱州市', + '370684': '山东省烟台市蓬莱市', + '370685': '山东省烟台市招远市', + '370686': '山东省烟台市栖霞市', + '370687': '山东省烟台市海阳市', + '370700': '山东省潍坊市', + '370701': '山东省潍坊市市辖区', + '370702': '山东省潍坊市潍城区', + '370703': '山东省潍坊市寒亭区', + '370704': '山东省潍坊市坊子区', + '370705': '山东省潍坊市奎文区', + '370724': '山东省潍坊市临朐县', + '370725': '山东省潍坊市昌乐县', + '370781': '山东省潍坊市青州市', + '370782': '山东省潍坊市诸城市', + '370783': '山东省潍坊市寿光市', + '370784': '山东省潍坊市安丘市', + '370785': '山东省潍坊市高密市', + '370786': '山东省潍坊市昌邑市', + '370800': '山东省济宁市', + '370801': '山东省济宁市市辖区', + '370802': '山东省济宁市市中区', + '370811': '山东省济宁市任城区', + '370826': '山东省济宁市微山县', + '370827': '山东省济宁市鱼台县', + '370828': '山东省济宁市金乡县', + '370829': '山东省济宁市嘉祥县', + '370830': '山东省济宁市汶上县', + '370831': '山东省济宁市泗水县', + '370832': '山东省济宁市梁山县', + '370881': '山东省济宁市曲阜市', + '370882': '山东省济宁市兖州市', + '370883': '山东省济宁市邹城市', + '370900': '山东省泰安市', + '370901': '山东省泰安市市辖区', + '370902': '山东省泰安市泰山区', + '370911': '山东省泰安市郊区', + '370921': '山东省泰安市宁阳县', + '370923': '山东省泰安市东平县', + '370982': '山东省泰安市新泰市', + '370983': '山东省泰安市肥城市', + '371000': '山东省威海市', + '371001': '山东省威海市市辖区', + '371002': '山东省威海市环翠区', + '371081': '山东省威海市文登市', + '371082': '山东省威海市荣成市', + '371083': '山东省威海市乳山市', + '371100': '山东省日照市', + '371101': '山东省日照市市辖区', + '371102': '山东省日照市东港区', + '371121': '山东省日照市五莲县', + '371122': '山东省日照市莒县', + '371200': '山东省莱芜市', + '371201': '山东省莱芜市市辖区', + '371202': '山东省莱芜市莱城区', + '371203': '山东省莱芜市钢城区', + '371300': '山东省临沂市', + '371301': '山东省临沂市市辖区', + '371302': '山东省临沂市兰山区', + '371311': '山东省临沂市罗庄区', + '371312': '山东省临沂市河东区', + '371321': '山东省临沂市沂南县', + '371322': '山东省临沂市郯城县', + '371323': '山东省临沂市沂水县', + '371324': '山东省临沂市苍山县', + '371325': '山东省临沂市费县', + '371326': '山东省临沂市平邑县', + '371327': '山东省临沂市莒南县', + '371328': '山东省临沂市蒙阴县', + '371329': '山东省临沂市临沭县', + '371400': '山东省德州市', + '371401': '山东省德州市市辖区', + '371402': '山东省德州市德城区', + '371421': '山东省德州市陵县', + '371422': '山东省德州市宁津县', + '371423': '山东省德州市庆云县', + '371424': '山东省德州市临邑县', + '371425': '山东省德州市齐河县', + '371426': '山东省德州市平原县', + '371427': '山东省德州市夏津县', + '371428': '山东省德州市武城县', + '371481': '山东省德州市乐陵市', + '371482': '山东省德州市禹城市', + '371500': '山东省聊城市', + '371501': '山东省聊城市市辖区', + '371502': '山东省聊城市东昌府区', + '371521': '山东省聊城市阳谷县', + '371522': '山东省聊城市莘县', + '371523': '山东省聊城市茌平县', + '371524': '山东省聊城市东阿县', + '371525': '山东省聊城市冠县', + '371526': '山东省聊城市高唐县', + '371581': '山东省聊城市临清市', + '372300': '山东省滨州地区', + '372301': '山东省滨州地区滨州市', + '372321': '山东省滨州地区惠民县', + '372323': '山东省滨州地区阳信县', + '372324': '山东省滨州地区无棣县', + '372325': '山东省滨州地区沾化县', + '372328': '山东省滨州地区博兴县', + '372330': '山东省滨州地区邹平县', + '372900': '山东省菏泽地区', + '372901': '山东省菏泽地区菏泽市', + '372922': '山东省菏泽地区曹县', + '372923': '山东省菏泽地区定陶县', + '372924': '山东省菏泽地区成武县', + '372925': '山东省菏泽地区单县', + '372926': '山东省菏泽地区巨野县', + '372928': '山东省菏泽地区郓城县', + '372929': '山东省菏泽地区鄄城县', + '372930': '山东省菏泽地区东明县', + '410000': '河南省', + '410100': '河南省郑州市', + '410101': '河南省郑州市市辖区', + '410102': '河南省郑州市中原区', + '410103': '河南省郑州市二七区', + '410104': '河南省郑州市管城回族区', + '410105': '河南省郑州市金水区', + '410106': '河南省郑州市上街区', + '410108': '河南省郑州市邙山区', + '410122': '河南省郑州市中牟县', + '410181': '河南省郑州市巩义市', + '410182': '河南省郑州市荥阳市', + '410183': '河南省郑州市新密市', + '410184': '河南省郑州市新郑市', + '410185': '河南省郑州市登封市', + '410200': '河南省开封市', + '410201': '河南省开封市市辖区', + '410202': '河南省开封市龙亭区', + '410203': '河南省开封市顺河回族区', + '410204': '河南省开封市鼓楼区', + '410205': '河南省开封市南关区', + '410211': '河南省开封市郊区', + '410221': '河南省开封市杞县', + '410222': '河南省开封市通许县', + '410223': '河南省开封市尉氏县', + '410224': '河南省开封市开封县', + '410225': '河南省开封市兰考县', + '410300': '河南省洛阳市', + '410301': '河南省洛阳市市辖区', + '410302': '河南省洛阳市老城区', + '410303': '河南省洛阳市西工区', + '410304': '河南省洛阳市廛河回族区', + '410305': '河南省洛阳市涧西区', + '410306': '河南省洛阳市吉利区', + '410311': '河南省洛阳市郊区', + '410322': '河南省洛阳市孟津县', + '410323': '河南省洛阳市新安县', + '410324': '河南省洛阳市栾川县', + '410325': '河南省洛阳市嵩县', + '410326': '河南省洛阳市汝阳县', + '410327': '河南省洛阳市宜阳县', + '410328': '河南省洛阳市洛宁县', + '410329': '河南省洛阳市伊川县', + '410381': '河南省洛阳市偃师市', + '410400': '河南省平顶山市', + '410401': '河南省平顶山市市辖区', + '410402': '河南省平顶山市新华区', + '410403': '河南省平顶山市卫东区', + '410404': '河南省平顶山市石龙区', + '410411': '河南省平顶山市湛河区', + '410421': '河南省平顶山市宝丰县', + '410422': '河南省平顶山市叶县', + '410423': '河南省平顶山市鲁山县', + '410425': '河南省平顶山市郏县', + '410481': '河南省平顶山市舞钢市', + '410482': '河南省平顶山市汝州市', + '410500': '河南省安阳市', + '410501': '河南省安阳市市辖区', + '410502': '河南省安阳市文峰区', + '410503': '河南省安阳市北关区', + '410504': '河南省安阳市铁西区', + '410511': '河南省安阳市郊区', + '410522': '河南省安阳市安阳县', + '410523': '河南省安阳市汤阴县', + '410526': '河南省安阳市滑县', + '410527': '河南省安阳市内黄县', + '410581': '河南省安阳市林州市', + '410600': '河南省鹤壁市', + '410601': '河南省鹤壁市市辖区', + '410602': '河南省鹤壁市鹤山区', + '410603': '河南省鹤壁市山城区', + '410611': '河南省鹤壁市郊区', + '410621': '河南省鹤壁市浚县', + '410622': '河南省鹤壁市淇县', + '410700': '河南省新乡市', + '410701': '河南省新乡市市辖区', + '410702': '河南省新乡市红旗区', + '410703': '河南省新乡市新华区', + '410704': '河南省新乡市北站区', + '410711': '河南省新乡市郊区', + '410721': '河南省新乡市新乡县', + '410724': '河南省新乡市获嘉县', + '410725': '河南省新乡市原阳县', + '410726': '河南省新乡市延津县', + '410727': '河南省新乡市封丘县', + '410728': '河南省新乡市长垣县', + '410781': '河南省新乡市卫辉市', + '410782': '河南省新乡市辉县市', + '410800': '河南省焦作市', + '410801': '河南省焦作市市辖区', + '410802': '河南省焦作市解放区', + '410803': '河南省焦作市中站区', + '410804': '河南省焦作市马村区', + '410811': '河南省焦作市山阳区', + '410821': '河南省焦作市修武县', + '410822': '河南省焦作市博爱县', + '410823': '河南省焦作市武陟县', + '410825': '河南省焦作市温县', + '410881': '河南省焦作市济源市', + '410882': '河南省焦作市沁阳市', + '410883': '河南省焦作市孟州市', + '410900': '河南省濮阳市', + '410901': '河南省濮阳市市辖区', + '410902': '河南省濮阳市市区', + '410922': '河南省濮阳市清丰县', + '410923': '河南省濮阳市南乐县', + '410926': '河南省濮阳市范县', + '410927': '河南省濮阳市台前县', + '410928': '河南省濮阳市濮阳县', + '411000': '河南省许昌市', + '411001': '河南省许昌市市辖区', + '411002': '河南省许昌市魏都区', + '411023': '河南省许昌市许昌县', + '411024': '河南省许昌市鄢陵县', + '411025': '河南省许昌市襄城县', + '411081': '河南省许昌市禹州市', + '411082': '河南省许昌市长葛市', + '411100': '河南省漯河市', + '411101': '河南省漯河市市辖区', + '411102': '河南省漯河市源汇区', + '411121': '河南省漯河市舞阳县', + '411122': '河南省漯河市临颍县', + '411123': '河南省漯河市郾城县', + '411200': '河南省三门峡市', + '411201': '河南省三门峡市市辖区', + '411202': '河南省三门峡市湖滨区', + '411221': '河南省三门峡市渑池县', + '411222': '河南省三门峡市陕县', + '411224': '河南省三门峡市卢氏县', + '411281': '河南省三门峡市义马市', + '411282': '河南省三门峡市灵宝市', + '411300': '河南省南阳市', + '411301': '河南省南阳市市辖区', + '411302': '河南省南阳市宛城区', + '411303': '河南省南阳市卧龙区', + '411321': '河南省南阳市南召县', + '411322': '河南省南阳市方城县', + '411323': '河南省南阳市西峡县', + '411324': '河南省南阳市镇平县', + '411325': '河南省南阳市内乡县', + '411326': '河南省南阳市淅川县', + '411327': '河南省南阳市社旗县', + '411328': '河南省南阳市唐河县', + '411329': '河南省南阳市新野县', + '411330': '河南省南阳市桐柏县', + '411381': '河南省南阳市邓州市', + '411400': '河南省商丘市', + '411401': '河南省商丘市市辖区', + '411402': '河南省商丘市梁园区', + '411403': '河南省商丘市睢阳区', + '411421': '河南省商丘市民权县', + '411422': '河南省商丘市睢县', + '411423': '河南省商丘市宁陵县', + '411424': '河南省商丘市柘城县', + '411425': '河南省商丘市虞城县', + '411426': '河南省商丘市夏邑县', + '411481': '河南省商丘市永城市', + '411500': '河南省信阳市', + '411501': '河南省信阳市市辖区', + '411502': '河南省信阳市师河区', + '411503': '河南省信阳市平桥区', + '411521': '河南省信阳市罗山县', + '411522': '河南省信阳市光山县', + '411523': '河南省信阳市新县', + '411524': '河南省信阳市商城县', + '411525': '河南省信阳市固始县', + '411526': '河南省信阳市潢川县', + '411527': '河南省信阳市淮滨县', + '411528': '河南省信阳市息县', + '412700': '河南省周口地区', + '412701': '河南省周口地区周口市', + '412702': '河南省周口地区项城市', + '412721': '河南省周口地区扶沟县', + '412722': '河南省周口地区西华县', + '412723': '河南省周口地区商水县', + '412724': '河南省周口地区太康县', + '412725': '河南省周口地区鹿邑县', + '412726': '河南省周口地区郸城县', + '412727': '河南省周口地区淮阳县', + '412728': '河南省周口地区沈丘县', + '412800': '河南省驻马店地区', + '412801': '河南省驻马店地区驻马店市', + '412821': '河南省驻马店地区确山县', + '412822': '河南省驻马店地区泌阳县', + '412823': '河南省驻马店地区遂平县', + '412824': '河南省驻马店地区西平县', + '412825': '河南省驻马店地区上蔡县', + '412826': '河南省驻马店地区汝南县', + '412827': '河南省驻马店地区平舆县', + '412828': '河南省驻马店地区新蔡县', + '412829': '河南省驻马店地区正阳县', + '420000': '湖北省', + '420100': '湖北省武汉市', + '420101': '湖北省武汉市市辖区', + '420102': '湖北省武汉市江岸区', + '420103': '湖北省武汉市江汉区', + '420104': '湖北省武汉市乔口区', + '420105': '湖北省武汉市汉阳区', + '420106': '湖北省武汉市武昌区', + '420107': '湖北省武汉市青山区', + '420111': '湖北省武汉市洪山区', + '420112': '湖北省武汉市东西湖区', + '420113': '湖北省武汉市汉南区', + '420114': '湖北省武汉市蔡甸区', + '420115': '湖北省武汉市江夏区', + '420116': '湖北省武汉市黄陂区', + '420117': '湖北省武汉市新洲区', + '420200': '湖北省黄石市', + '420201': '湖北省黄石市市辖区', + '420202': '湖北省黄石市黄石港区', + '420203': '湖北省黄石市石灰窑区', + '420204': '湖北省黄石市下陆区', + '420205': '湖北省黄石市铁山区', + '420222': '湖北省黄石市阳新县', + '420281': '湖北省黄石市大冶市', + '420300': '湖北省十堰市', + '420301': '湖北省十堰市市辖区', + '420302': '湖北省十堰市茅箭区', + '420303': '湖北省十堰市张湾区', + '420321': '湖北省十堰市郧县', + '420322': '湖北省十堰市郧西县', + '420323': '湖北省十堰市竹山县', + '420324': '湖北省十堰市竹溪县', + '420325': '湖北省十堰市房县', + '420381': '湖北省十堰市丹江口市', + '420500': '湖北省宜昌市', + '420501': '湖北省宜昌市市辖区', + '420502': '湖北省宜昌市西陵区', + '420503': '湖北省宜昌市伍家岗区', + '420504': '湖北省宜昌市点军区', + '420505': '湖北省宜昌市虎亭区', + '420521': '湖北省宜昌市宜昌县', + '420525': '湖北省宜昌市远安县', + '420526': '湖北省宜昌市兴山县', + '420527': '湖北省宜昌市秭归县', + '420528': '湖北省宜昌市长阳土家族自治县', + '420529': '湖北省宜昌市五峰土家族自治县', + '420581': '湖北省宜昌市宜都市', + '420582': '湖北省宜昌市当阳市', + '420583': '湖北省宜昌市枝江市', + '420600': '湖北省襄樊市', + '420601': '湖北省襄樊市市辖区', + '420602': '湖北省襄樊市襄城区', + '420606': '湖北省襄樊市樊城区', + '420621': '湖北省襄樊市襄阳县', + '420624': '湖北省襄樊市南漳县', + '420625': '湖北省襄樊市谷城县', + '420626': '湖北省襄樊市保康县', + '420682': '湖北省襄樊市老河口市', + '420683': '湖北省襄樊市枣阳市', + '420684': '湖北省襄樊市宜城市', + '420700': '湖北省鄂州市', + '420701': '湖北省鄂州市市辖区', + '420702': '湖北省鄂州市梁子湖区', + '420703': '湖北省鄂州市华容区', + '420704': '湖北省鄂州市鄂城区', + '420800': '湖北省荆门市', + '420801': '湖北省荆门市市辖区', + '420802': '湖北省荆门市东宝区', + '420821': '湖北省荆门市京山县', + '420822': '湖北省荆门市沙洋县', + '420881': '湖北省荆门市钟祥市', + '420900': '湖北省孝感市', + '420901': '湖北省孝感市市辖区', + '420902': '湖北省孝感市孝南区', + '420921': '湖北省孝感市孝昌县', + '420922': '湖北省孝感市大悟县', + '420923': '湖北省孝感市云梦县', + '420981': '湖北省孝感市应城市', + '420982': '湖北省孝感市安陆市', + '420983': '湖北省孝感市广水市', + '420984': '湖北省孝感市汉川市', + '421000': '湖北省荆州市', + '421001': '湖北省荆州市市辖区', + '421002': '湖北省荆州市沙市区', + '421003': '湖北省荆州市荆州区', + '421022': '湖北省荆州市公安县', + '421023': '湖北省荆州市监利县', + '421024': '湖北省荆州市江陵县', + '421081': '湖北省荆州市石首市', + '421083': '湖北省荆州市洪湖市', + '421087': '湖北省荆州市松滋市', + '421100': '湖北省黄冈市', + '421101': '湖北省黄冈市市辖区', + '421102': '湖北省黄冈市黄州区', + '421121': '湖北省黄冈市团风县', + '421122': '湖北省黄冈市红安县', + '421123': '湖北省黄冈市罗田县', + '421124': '湖北省黄冈市英山县', + '421125': '湖北省黄冈市浠水县', + '421126': '湖北省黄冈市蕲春县', + '421127': '湖北省黄冈市黄梅县', + '421181': '湖北省黄冈市麻城市', + '421182': '湖北省黄冈市武穴市', + '421200': '湖北省咸宁市', + '421201': '湖北省咸宁市市辖区', + '421202': '湖北省咸宁市咸安区', + '421221': '湖北省咸宁市嘉鱼县', + '421222': '湖北省咸宁市通城县', + '421223': '湖北省咸宁市崇阳县', + '421224': '湖北省咸宁市通山县', + '422800': '湖北省施土家族苗族自治州', + '422801': '湖北省恩施土家族苗族自治州恩施县', + '422802': '湖北省恩施土家族苗族自治州利川市', + '422822': '湖北省恩施土家族苗族自治州建始县', + '422823': '湖北省恩施土家族苗族自治州巴东县', + '422825': '湖北省恩施土家族苗族自治州宣恩县', + '422826': '湖北省恩施土家族苗族自治州咸丰县', + '422827': '湖北省恩施土家族苗族自治州来凤县', + '422828': '湖北省恩施土家族苗族自治州鹤峰县', + '429000': '湖北省省直辖县级行政单位', + '429001': '湖北省随州市', + '429004': '湖北省仙桃市', + '429005': '湖北省潜江市', + '429006': '湖北省天门市', + '429021': '湖北省神农架林区', + '430000': '湖南省', + '430100': '湖南省长沙市', + '430101': '湖南省长沙市市辖区', + '430102': '湖南省长沙市芙蓉区', + '430103': '湖南省长沙市天心区', + '430104': '湖南省长沙市岳麓区', + '430105': '湖南省长沙市开福区', + '430111': '湖南省长沙市雨花区', + '430121': '湖南省长沙市长沙县', + '430122': '湖南省长沙市望城县', + '430124': '湖南省长沙市宁乡县', + '430181': '湖南省长沙市浏阳市', + '430200': '湖南省株洲市', + '430201': '湖南省株洲市市辖区', + '430202': '湖南省株洲市荷塘区', + '430203': '湖南省株洲市芦淞区', + '430204': '湖南省株洲市石峰区', + '430211': '湖南省株洲市天元区', + '430221': '湖南省株洲市株洲县', + '430223': '湖南省株洲市攸县', + '430224': '湖南省株洲市茶陵县', + '430225': '湖南省株洲市炎陵县', + '430281': '湖南省株洲市醴陵市', + '430300': '湖南省湘潭市', + '430301': '湖南省湘潭市市辖区', + '430302': '湖南省湘潭市雨湖区', + '430304': '湖南省湘潭市岳塘区', + '430321': '湖南省湘潭市湘潭县', + '430381': '湖南省湘潭市湘乡市', + '430382': '湖南省湘潭市韶山市', + '430400': '湖南省衡阳市', + '430401': '湖南省衡阳市市辖区', + '430402': '湖南省衡阳市江东区', + '430403': '湖南省衡阳市城南区', + '430404': '湖南省衡阳市城北区', + '430411': '湖南省衡阳市郊区', + '430412': '湖南省衡阳市南岳区', + '430421': '湖南省衡阳市衡阳县', + '430422': '湖南省衡阳市衡南县', + '430423': '湖南省衡阳市衡山县', + '430424': '湖南省衡阳市衡东县', + '430426': '湖南省衡阳市祁东县', + '430481': '湖南省衡阳市耒阳市', + '430482': '湖南省衡阳市常宁市', + '430500': '湖南省邵阳市', + '430501': '湖南省邵阳市市辖区', + '430502': '湖南省邵阳市双清区', + '430503': '湖南省邵阳市大祥区', + '430511': '湖南省邵阳市北塔区', + '430521': '湖南省邵阳市邵东县', + '430522': '湖南省邵阳市新邵县', + '430523': '湖南省邵阳市邵阳县', + '430524': '湖南省邵阳市隆回县', + '430525': '湖南省邵阳市洞口县', + '430527': '湖南省邵阳市绥宁县', + '430528': '湖南省邵阳市新宁县', + '430529': '湖南省邵阳市城步苗族自治县', + '430581': '湖南省邵阳市武冈市', + '430600': '湖南省岳阳市', + '430601': '湖南省岳阳市市辖区', + '430602': '湖南省岳阳市岳阳楼区', + '430603': '湖南省岳阳市云溪区', + '430611': '湖南省岳阳市君山区', + '430621': '湖南省岳阳市岳阳县', + '430623': '湖南省岳阳市华容县', + '430624': '湖南省岳阳市湘阴县', + '430626': '湖南省岳阳市平江县', + '430681': '湖南省岳阳市汨罗市', + '430682': '湖南省岳阳市临湘市', + '430700': '湖南省常德市', + '430701': '湖南省常德市市辖区', + '430702': '湖南省常德市武陵区', + '430703': '湖南省常德市鼎城区', + '430721': '湖南省常德市安乡县', + '430722': '湖南省常德市汉寿县', + '430723': '湖南省常德市澧县', + '430724': '湖南省常德市临澧县', + '430725': '湖南省常德市桃源县', + '430726': '湖南省常德市石门县', + '430781': '湖南省常德市津市市', + '430800': '湖南省张家界市', + '430801': '湖南省张家界市市辖区', + '430802': '湖南省张家界市永定区', + '430811': '湖南省张家界市武陵源区', + '430821': '湖南省张家界市慈利县', + '430822': '湖南省张家界市桑植县', + '430900': '湖南省益阳市', + '430901': '湖南省益阳市市辖区', + '430902': '湖南省益阳市资阳区', + '430903': '湖南省益阳市赫山区', + '430921': '湖南省益阳市南县', + '430922': '湖南省益阳市桃江县', + '430923': '湖南省益阳市安化县', + '430981': '湖南省益阳市沅江市', + '431000': '湖南省郴州市', + '431001': '湖南省郴州市市辖区', + '431002': '湖南省郴州市北湖区', + '431003': '湖南省郴州市苏仙区', + '431021': '湖南省郴州市桂阳县', + '431022': '湖南省郴州市宜章县', + '431023': '湖南省郴州市永兴县', + '431024': '湖南省郴州市嘉禾县', + '431025': '湖南省郴州市临武县', + '431026': '湖南省郴州市汝城县', + '431027': '湖南省郴州市桂东县', + '431028': '湖南省郴州市安仁县', + '431081': '湖南省郴州市资兴市', + '431100': '湖南省永州市', + '431101': '湖南省永州市市辖区', + '431102': '湖南省永州市芝山区', + '431103': '湖南省永州市冷水滩区', + '431121': '湖南省永州市祁阳县', + '431122': '湖南省永州市东安县', + '431123': '湖南省永州市双牌县', + '431124': '湖南省永州市道县', + '431125': '湖南省永州市江永县', + '431126': '湖南省永州市宁远县', + '431127': '湖南省永州市蓝山县', + '431128': '湖南省永州市新田县', + '431129': '湖南省永州市江华瑶族自治县', + '431200': '湖南省怀化市', + '431201': '湖南省怀化市市辖区', + '431202': '湖南省怀化市鹤城区', + '431221': '湖南省怀化市中方县', + '431222': '湖南省怀化市沅陵县', + '431223': '湖南省怀化市辰溪县', + '431224': '湖南省怀化市溆浦县', + '431225': '湖南省怀化市会同县', + '431226': '湖南省怀化市麻阳苗族自治县', + '431227': '湖南省怀化市新晃侗族自治县', + '431228': '湖南省怀化市芷江侗族自治县', + '431229': '湖南省怀化市靖州苗族侗族自治县', + '431230': '湖南省怀化市通道侗族自治县', + '431281': '湖南省怀化市洪江市', + '432500': '湖南省娄底地区', + '432501': '湖南省娄底地区娄底市', + '432502': '湖南省娄底地区冷水江市', + '432503': '湖南省娄底地区涟源市', + '432522': '湖南省娄底地区双峰县', + '432524': '湖南省娄底地区新化县', + '433000': '湖南省怀化市', + '433001': '湖南省怀化市', + '433100': '湖南省湘西土家族苗族自治州', + '433101': '湖南省湘西土家族苗族自治州吉首市', + '433122': '湖南省湘西土家族苗族自治州泸溪县', + '433123': '湖南省湘西土家族苗族自治州凤凰县', + '433124': '湖南省湘西土家族苗族自治州花垣县', + '433125': '湖南省湘西土家族苗族自治州保靖县', + '433126': '湖南省湘西土家族苗族自治州古丈县', + '433127': '湖南省湘西土家族苗族自治州永顺县', + '433130': '湖南省湘西土家族苗族自治州龙山县', + '440000': '广东省', + '440100': '广东省广州市', + '440101': '广东省广州市市辖区', + '440102': '广东省广州市东山区', + '440103': '广东省广州市荔湾区', + '440104': '广东省广州市越秀区', + '440105': '广东省广州市海珠区', + '440106': '广东省广州市天河区', + '440107': '广东省广州市芳村区', + '440111': '广东省广州市白云区', + '440112': '广东省广州市黄埔区', + '440181': '广东省广州市番禺市', + '440182': '广东省广州市花都市', + '440183': '广东省广州市增城市', + '440184': '广东省广州市从化市', + '440200': '广东省韶关市', + '440201': '广东省韶关市市辖区', + '440202': '广东省韶关市北江区', + '440203': '广东省韶关市武江区', + '440204': '广东省韶关市浈江区', + '440221': '广东省韶关市曲江县', + '440222': '广东省韶关市始兴县', + '440224': '广东省韶关市仁化县', + '440229': '广东省韶关市翁源县', + '440232': '广东省韶关市乳源瑶族自治县', + '440233': '广东省韶关市新丰县', + '440281': '广东省韶关市乐昌市', + '440282': '广东省韶关市南雄市', + '440300': '广东省深圳市', + '440301': '广东省深圳市市辖区', + '440303': '广东省深圳市罗湖区', + '440304': '广东省深圳市福田区', + '440305': '广东省深圳市南山区', + '440306': '广东省深圳市宝安区', + '440307': '广东省深圳市龙岗区', + '440308': '广东省深圳市盐田区', + '440400': '广东省珠海市', + '440401': '广东省珠海市市辖区', + '440402': '广东省珠海市香洲区', + '440421': '广东省珠海市斗门县', + '440500': '广东省汕头市', + '440501': '广东省汕头市市辖区', + '440506': '广东省汕头市达濠区', + '440507': '广东省汕头市龙湖区', + '440508': '广东省汕头市金园区', + '440509': '广东省汕头市升平区', + '440510': '广东省汕头市河浦区', + '440523': '广东省汕头市南澳县', + '440582': '广东省汕头市潮阳市', + '440583': '广东省汕头市澄海市', + '440600': '广东省佛山市', + '440601': '广东省佛山市市辖区', + '440602': '广东省佛山市城区', + '440603': '广东省佛山市石湾区', + '440681': '广东省佛山市顺德市', + '440682': '广东省佛山市南海市', + '440683': '广东省佛山市三水市', + '440684': '广东省佛山市高明市', + '440700': '广东省江门市', + '440701': '广东省江门市市辖区', + '440703': '广东省江门市蓬江区', + '440704': '广东省江门市江海区', + '440781': '广东省江门市台山市', + '440782': '广东省江门市新会市', + '440783': '广东省江门市开平市', + '440784': '广东省江门市鹤山市', + '440785': '广东省江门市恩平市', + '440800': '广东省湛江市', + '440801': '广东省湛江市市辖区', + '440802': '广东省湛江市赤坎区', + '440803': '广东省湛江市霞山区', + '440804': '广东省湛江市坡头区', + '440811': '广东省湛江市麻章区', + '440823': '广东省湛江市遂溪县', + '440825': '广东省湛江市徐闻县', + '440881': '广东省湛江市廉江市', + '440882': '广东省湛江市雷州市', + '440883': '广东省湛江市吴川市', + '440900': '广东省茂名市', + '440901': '广东省茂名市市辖区', + '440902': '广东省茂名市茂南区', + '440923': '广东省茂名市电白县', + '440981': '广东省茂名市高州市', + '440982': '广东省茂名市化州市', + '440983': '广东省茂名市信宜市', + '441200': '广东省肇庆市', + '441201': '广东省肇庆市市辖区', + '441202': '广东省肇庆市端州区', + '441203': '广东省肇庆市鼎湖区', + '441223': '广东省肇庆市广宁县', + '441224': '广东省肇庆市怀集县', + '441225': '广东省肇庆市封开县', + '441226': '广东省肇庆市德庆县', + '441283': '广东省肇庆市高要市', + '441284': '广东省肇庆市四会市', + '441300': '广东省惠州市', + '441301': '广东省惠州市市辖区', + '441302': '广东省惠州市惠城区', + '441322': '广东省惠州市博罗县', + '441323': '广东省惠州市惠东县', + '441324': '广东省惠州市龙门县', + '441381': '广东省惠州市惠阳市', + '441400': '广东省梅州市', + '441401': '广东省梅州市市辖区', + '441402': '广东省梅州市梅江区', + '441421': '广东省梅州市梅县', + '441422': '广东省梅州市大埔县', + '441423': '广东省梅州市丰顺县', + '441424': '广东省梅州市五华县', + '441426': '广东省梅州市平远县', + '441427': '广东省梅州市蕉岭县', + '441481': '广东省梅州市兴宁市', + '441500': '广东省汕尾市', + '441501': '广东省汕尾市市辖区', + '441502': '广东省汕尾市城区', + '441521': '广东省汕尾市海丰县', + '441523': '广东省汕尾市陆河县', + '441581': '广东省汕尾市陆丰市', + '441600': '广东省河源市', + '441601': '广东省河源市市辖区', + '441602': '广东省河源市源城区', + '441621': '广东省河源市紫金县', + '441622': '广东省河源市龙川县', + '441623': '广东省河源市连平县', + '441624': '广东省河源市和平县', + '441625': '广东省河源市东源县', + '441700': '广东省阳江市', + '441701': '广东省阳江市市辖区', + '441702': '广东省阳江市江城区', + '441721': '广东省阳江市阳西县', + '441723': '广东省阳江市阳东县', + '441781': '广东省阳江市阳春市', + '441800': '广东省清远市', + '441801': '广东省清远市市辖区', + '441802': '广东省清远市清城区', + '441821': '广东省清远市佛冈县', + '441823': '广东省清远市阳山县', + '441825': '广东省清远市连山壮族瑶族自治县', + '441826': '广东省清远市连南瑶族自治县', + '441827': '广东省清远市清新县', + '441881': '广东省清远市英德市', + '441882': '广东省清远市连州市', + '441900': '广东省东莞市', + '441901': '广东省东莞市市辖区', + '442000': '广东省中山市', + '442001': '广东省中山市市辖区', + '445100': '广东省潮州市', + '445101': '广东省潮州市市辖区', + '445102': '广东省潮州市湘桥区', + '445121': '广东省潮州市潮安县', + '445122': '广东省潮州市饶平县', + '445200': '广东省揭阳市', + '445201': '广东省揭阳市市辖区', + '445202': '广东省揭阳市榕城区', + '445221': '广东省揭阳市揭东县', + '445222': '广东省揭阳市揭西县', + '445224': '广东省揭阳市惠来县', + '445281': '广东省揭阳市普宁市', + '445300': '广东省云浮市', + '445301': '广东省云浮市市辖区', + '445302': '广东省云浮市云城区', + '445321': '广东省云浮市新兴县', + '445322': '广东省云浮市郁南县', + '445323': '广东省云浮市云安县', + '445381': '广东省云浮市罗定市', + '450000': '广西壮族自治区', + '450100': '广西壮族自治区南宁市', + '450101': '广西壮族自治区南宁市市辖区', + '450102': '广西壮族自治区南宁市兴宁区', + '450103': '广西壮族自治区南宁市新城区', + '450104': '广西壮族自治区南宁市城北区', + '450105': '广西壮族自治区南宁市江南区', + '450106': '广西壮族自治区南宁市永新区', + '450111': '广西壮族自治区南宁市市郊区', + '450121': '广西壮族自治区南宁市邕宁县', + '450122': '广西壮族自治区南宁市武鸣县', + '450200': '广西壮族自治区柳州市', + '450201': '广西壮族自治区柳州市市辖区', + '450202': '广西壮族自治区柳州市城中区', + '450203': '广西壮族自治区柳州市鱼峰区', + '450204': '广西壮族自治区柳州市柳南区', + '450205': '广西壮族自治区柳州市柳北区', + '450211': '广西壮族自治区柳州市市郊区', + '450221': '广西壮族自治区柳州市柳江县', + '450222': '广西壮族自治区柳州市柳城县', + '450300': '广西壮族自治区桂林市', + '450301': '广西壮族自治区桂林市市辖区', + '450302': '广西壮族自治区桂林市秀峰区', + '450303': '广西壮族自治区桂林市叠彩区', + '450304': '广西壮族自治区桂林市象山区', + '450305': '广西壮族自治区桂林市七星区', + '450311': '广西壮族自治区桂林市雁山区', + '450321': '广西壮族自治区桂林市阳朔县', + '450322': '广西壮族自治区桂林市临桂县', + '450323': '广西壮族自治区桂林市灵川县', + '450324': '广西壮族自治区桂林市全州县', + '450325': '广西壮族自治区桂林市兴安县', + '450326': '广西壮族自治区桂林市永福县', + '450327': '广西壮族自治区桂林市灌阳县', + '450328': '广西壮族自治区桂林市龙胜各族自治县', + '450329': '广西壮族自治区桂林市资源县', + '450330': '广西壮族自治区桂林市平乐县', + '450331': '广西壮族自治区桂林市荔浦县', + '450332': '广西壮族自治区桂林市恭城瑶族自治县', + '450400': '广西壮族自治区梧州市', + '450401': '广西壮族自治区梧州市市辖区', + '450403': '广西壮族自治区梧州市万秀区', + '450404': '广西壮族自治区梧州市蝶山区', + '450411': '广西壮族自治区梧州市市郊区', + '450421': '广西壮族自治区梧州市苍梧县', + '450422': '广西壮族自治区梧州市藤县', + '450423': '广西壮族自治区梧州市蒙山县', + '450481': '广西壮族自治区梧州市岑溪市', + '450500': '广西壮族自治区北海市', + '450501': '广西壮族自治区北海市市辖区', + '450502': '广西壮族自治区北海市海城区', + '450503': '广西壮族自治区北海市银海区', + '450512': '广西壮族自治区北海市铁山港区', + '450521': '广西壮族自治区北海市合浦县', + '450600': '广西壮族自治区防城港市', + '450601': '广西壮族自治区防城港市市辖区', + '450602': '广西壮族自治区防城港市港口区', + '450603': '广西壮族自治区防城港市防城区', + '450621': '广西壮族自治区防城港市上思县', + '450681': '广西壮族自治区防城港市东兴市', + '450700': '广西壮族自治区钦州市', + '450701': '广西壮族自治区钦州市市辖区', + '450702': '广西壮族自治区钦州市钦南区', + '450703': '广西壮族自治区钦州市钦北区', + '450721': '广西壮族自治区钦州市灵山县', + '450722': '广西壮族自治区钦州市浦北县', + '450800': '广西壮族自治区贵港市', + '450801': '广西壮族自治区贵港市市辖区', + '450802': '广西壮族自治区贵港市港北区', + '450803': '广西壮族自治区贵港市港南区', + '450821': '广西壮族自治区贵港市平南县', + '450881': '广西壮族自治区贵港市桂平市', + '450900': '广西壮族自治区玉林市', + '450901': '广西壮族自治区玉林市市辖区', + '450902': '广西壮族自治区玉林市玉州区', + '450921': '广西壮族自治区玉林市容县', + '450922': '广西壮族自治区玉林市陆川县', + '450923': '广西壮族自治区玉林市博白县', + '450924': '广西壮族自治区玉林市兴业县', + '450981': '广西壮族自治区玉林市北流市', + '452100': '广西壮族自治区南宁地区', + '452101': '广西壮族自治区南宁地区凭祥市', + '452122': '广西壮族自治区南宁地区横县', + '452123': '广西壮族自治区南宁地区宾阳县', + '452124': '广西壮族自治区南宁地区上林县', + '452126': '广西壮族自治区南宁地区隆安县', + '452127': '广西壮族自治区南宁地区马山县', + '452128': '广西壮族自治区南宁地区扶绥县', + '452129': '广西壮族自治区南宁地区崇左县', + '452130': '广西壮族自治区南宁地区大新县', + '452131': '广西壮族自治区南宁地区天等县', + '452132': '广西壮族自治区南宁地区宁明县', + '452133': '广西壮族自治区南宁地区龙州县', + '452200': '广西壮族自治区柳州地区', + '452201': '广西壮族自治区柳州地区合山市', + '452223': '广西壮族自治区柳州地区鹿寨县', + '452224': '广西壮族自治区柳州地区象州县', + '452225': '广西壮族自治区柳州地区武宣县', + '452226': '广西壮族自治区柳州地区来宾县', + '452227': '广西壮族自治区柳州地区融安县', + '452228': '广西壮族自治区柳州地区三江侗族自治县', + '452229': '广西壮族自治区柳州地区融水苗族自治县', + '452230': '广西壮族自治区柳州地区金秀瑶族自治县', + '452231': '广西壮族自治区柳州地区忻城县', + '452400': '广西壮族自治区贺州地区', + '452402': '广西壮族自治区贺州地区贺州市', + '452424': '广西壮族自治区贺州地区昭平县', + '452427': '广西壮族自治区贺州地区钟山县', + '452428': '广西壮族自治区贺州地区富川瑶族自治县', + '452600': '广西壮族自治区百色地区', + '452601': '广西壮族自治区百色地区百色市', + '452622': '广西壮族自治区百色地区田阳县', + '452623': '广西壮族自治区百色地区田东县', + '452624': '广西壮族自治区百色地区平果县', + '452625': '广西壮族自治区百色地区德保县', + '452626': '广西壮族自治区百色地区靖西县', + '452627': '广西壮族自治区百色地区那坡县', + '452628': '广西壮族自治区百色地区凌云县', + '452629': '广西壮族自治区百色地区乐业县', + '452630': '广西壮族自治区百色地区田林县', + '452631': '广西壮族自治区百色地区隆林各族自治县', + '452632': '广西壮族自治区百色地区西林县', + '452700': '广西壮族自治区河池地区', + '452701': '广西壮族自治区河池地区河池市', + '452702': '广西壮族自治区河池地区宜州市', + '452723': '广西壮族自治区河池地区罗城仫佬族自治县', + '452724': '广西壮族自治区河池地区环江毛南族自治县', + '452725': '广西壮族自治区河池地区南丹县', + '452726': '广西壮族自治区河池地区天峨县', + '452727': '广西壮族自治区河池地区凤山县', + '452728': '广西壮族自治区河池地区东兰县', + '452729': '广西壮族自治区河池地区巴马瑶族自治县', + '452730': '广西壮族自治区河池地区都安瑶族自治县', + '452731': '广西壮族自治区河池地区大化瑶族自治县', + '460000': '海南省', + '460001': '海南省三亚市通什市', + '460002': '海南省三亚市琼海市', + '460003': '海南省三亚市儋州市', + '460004': '海南省三亚市琼山市', + '460005': '海南省三亚市文昌市', + '460006': '海南省三亚市万宁市', + '460007': '海南省三亚市东方市', + '460025': '海南省三亚市定安县', + '460026': '海南省三亚市屯昌县', + '460027': '海南省三亚市澄迈县', + '460028': '海南省三亚市临高县', + '460030': '海南省三亚市白沙黎族自治县', + '460031': '海南省三亚市昌江黎族自治县', + '460033': '海南省三亚市乐东黎族自治县', + '460034': '海南省三亚市陵水黎族自治县', + '460035': '海南省三亚市保亭黎族苗族自治县', + '460036': '海南省三亚市琼中黎族苗族自治县', + '460037': '海南省西沙群岛', + '460038': '海南省南沙群岛', + '460039': '海南省中沙群岛的岛礁及其海域', + '460100': '海南省海口市', + '460101': '海南省海口市市辖区', + '460102': '海南省海口市振东区', + '460103': '海南省海口市新华区', + '460104': '海南省海口市秀英区', + '460200': '海南省三亚市', + '460201': '海南省三亚市市辖区', + '500000': '重庆市', + '500100': '重庆市市辖区', + '500101': '重庆市万州区', + '500102': '重庆市涪陵区', + '500103': '重庆市渝中区', + '500104': '重庆市大渡口区', + '500105': '重庆市江北区', + '500106': '重庆市沙坪坝区', + '500107': '重庆市九龙坡区', + '500108': '重庆市南岸区', + '500109': '重庆市北碚区', + '500110': '重庆市万盛区', + '500111': '重庆市双桥区', + '500112': '重庆市渝北区', + '500113': '重庆市巴南区', + '500200': '重庆市县', + '500221': '重庆市长寿县', + '500222': '重庆市綦江县', + '500223': '重庆市潼南县', + '500224': '重庆市铜梁县', + '500225': '重庆市大足县', + '500226': '重庆市荣昌县', + '500227': '重庆市璧山县', + '500228': '重庆市梁平县', + '500229': '重庆市城口县', + '500230': '重庆市丰都县', + '500231': '重庆市垫江县', + '500232': '重庆市武隆县', + '500233': '重庆市忠县', + '500234': '重庆市开县', + '500235': '重庆市云阳县', + '500236': '重庆市奉节县', + '500237': '重庆市巫山县', + '500238': '重庆市巫溪县', + '500239': '重庆市黔江土家族苗族自治县', + '500240': '重庆市石柱土家族自治县', + '500241': '重庆市秀山土家族苗族自治县', + '500242': '重庆市酉阳土家族苗族自治县', + '500243': '重庆市彭水苗族土家族自治县', + '500300': '重庆市(市)', + '500381': '重庆市江津市', + '500382': '重庆市合川市', + '500383': '重庆市永川市', + '500384': '重庆市南川市', + '510000': '四川省', + '510100': '四川省成都市', + '510101': '四川省成都市市辖区', + '510104': '四川省成都市锦江区', + '510105': '四川省成都市青羊区', + '510106': '四川省成都市金牛区', + '510107': '四川省成都市武侯区', + '510108': '四川省成都市成华区', + '510112': '四川省成都市龙泉驿区', + '510113': '四川省成都市青白江区', + '510121': '四川省成都市金堂县', + '510122': '四川省成都市双流县', + '510123': '四川省成都市温江县', + '510124': '四川省成都市郫县', + '510125': '四川省成都市新都县', + '510129': '四川省成都市大邑县', + '510131': '四川省成都市蒲江县', + '510132': '四川省成都市新津县', + '510181': '四川省成都市都江堰市', + '510182': '四川省成都市彭州市', + '510183': '四川省成都市邛崃市', + '510184': '四川省成都市崇州市', + '510300': '四川省自贡市', + '510301': '四川省自贡市市辖区', + '510302': '四川省自贡市自流井区', + '510303': '四川省自贡市贡井区', + '510304': '四川省自贡市大安区', + '510311': '四川省自贡市沿滩区', + '510321': '四川省自贡市荣县', + '510322': '四川省自贡市富顺县', + '510400': '四川省攀枝花市', + '510401': '四川省攀枝花市市辖区', + '510402': '四川省攀枝花市东区', + '510403': '四川省攀枝花市西区', + '510411': '四川省攀枝花市仁和区', + '510421': '四川省攀枝花市米易县', + '510422': '四川省攀枝花市盐边县', + '510500': '四川省泸州市', + '510501': '四川省泸州市市辖区', + '510502': '四川省泸州市江阳区', + '510503': '四川省泸州市纳溪区', + '510504': '四川省泸州市龙马潭区', + '510521': '四川省泸州市泸县', + '510522': '四川省泸州市合江县', + '510524': '四川省泸州市叙永县', + '510525': '四川省泸州市古蔺县', + '510600': '四川省德阳市', + '510601': '四川省德阳市市辖区', + '510603': '四川省德阳市旌阳区', + '510623': '四川省德阳市中江县', + '510626': '四川省德阳市罗江县', + '510681': '四川省德阳市广汉市', + '510682': '四川省德阳市什邡市', + '510683': '四川省德阳市绵竹市', + '510700': '四川省绵阳市', + '510701': '四川省绵阳市市辖区', + '510703': '四川省绵阳市涪城区', + '510704': '四川省绵阳市游仙区', + '510722': '四川省绵阳市三台县', + '510723': '四川省绵阳市盐亭县', + '510724': '四川省绵阳市安县', + '510725': '四川省绵阳市梓潼县', + '510726': '四川省绵阳市北川县', + '510727': '四川省绵阳市平武县', + '510781': '四川省绵阳市江油市', + '510800': '四川省广元市', + '510801': '四川省广元市市辖区', + '510802': '四川省广元市市中区', + '510811': '四川省广元市元坝区', + '510812': '四川省广元市朝天区', + '510821': '四川省广元市旺苍县', + '510822': '四川省广元市青川县', + '510823': '四川省广元市剑阁县', + '510824': '四川省广元市苍溪县', + '510900': '四川省遂宁市', + '510901': '四川省遂宁市市辖区', + '510902': '四川省遂宁市市中区', + '510921': '四川省遂宁市蓬溪县', + '510922': '四川省遂宁市射洪县', + '510923': '四川省遂宁市大英县', + '511000': '四川省内江市', + '511001': '四川省内江市市辖区', + '511002': '四川省内江市市中区', + '511011': '四川省内江市东兴区', + '511024': '四川省内江市威远县', + '511025': '四川省内江市资中县', + '511028': '四川省内江市隆昌县', + '511100': '四川省乐山市', + '511101': '四川省乐山市市辖区', + '511102': '四川省乐山市市中区', + '511111': '四川省乐山市沙湾区', + '511112': '四川省乐山市五通桥区', + '511113': '四川省乐山市金口河区', + '511123': '四川省乐山市犍为县', + '511124': '四川省乐山市井研县', + '511126': '四川省乐山市夹江县', + '511129': '四川省乐山市沐川县', + '511132': '四川省乐山市峨边彝族自治县', + '511133': '四川省乐山市马边彝族自治县', + '511181': '四川省乐山市峨眉山市', + '511300': '四川省南充市', + '511301': '四川省南充市市辖区', + '511302': '四川省南充市顺庆区', + '511303': '四川省南充市高坪区', + '511304': '四川省南充市嘉陵区', + '511321': '四川省南充市南部县', + '511322': '四川省南充市营山县', + '511323': '四川省南充市蓬安县', + '511324': '四川省南充市仪陇县', + '511325': '四川省南充市西充县', + '511381': '四川省南充市阆中市', + '511500': '四川省宜宾市', + '511501': '四川省宜宾市市辖区', + '511502': '四川省宜宾市翠屏区', + '511521': '四川省宜宾市宜宾县', + '511522': '四川省宜宾市南溪县', + '511523': '四川省宜宾市江安县', + '511524': '四川省宜宾市长宁县', + '511525': '四川省宜宾市高县', + '511526': '四川省宜宾市珙县', + '511527': '四川省宜宾市筠连县', + '511528': '四川省宜宾市兴文县', + '511529': '四川省宜宾市屏山县', + '511600': '四川省广安市', + '511601': '四川省广安市市辖区', + '511602': '四川省广安市广安区', + '511621': '四川省广安市岳池县', + '511622': '四川省广安市武胜县', + '511623': '四川省广安市邻水县', + '511681': '四川省广安市华蓥市', + '513000': '四川省达川地区', + '513001': '四川省达川地区达川市', + '513002': '四川省达川地区万源市', + '513021': '四川省达川地区达县', + '513022': '四川省达川地区宣汉县', + '513023': '四川省达川地区开江县', + '513029': '四川省达川地区大竹县', + '513030': '四川省达川地区渠县', + '513100': '四川省雅安地区', + '513101': '四川省雅安地区雅安市', + '513122': '四川省雅安地区名山县', + '513123': '四川省雅安地区荥经县', + '513124': '四川省雅安地区汉源县', + '513125': '四川省雅安地区石棉县', + '513126': '四川省雅安地区天全县', + '513127': '四川省雅安地区芦山县', + '513128': '四川省雅安地区宝兴县', + '513200': '四川省阿坝藏族羌族自治州', + '513221': '四川省阿坝藏族羌族自治州汶川县', + '513222': '四川省阿坝藏族羌族自治州理县', + '513223': '四川省阿坝藏族羌族自治州茂县', + '513224': '四川省阿坝藏族羌族自治州松潘县', + '513225': '四川省阿坝藏族羌族自治州九寨沟县', + '513226': '四川省阿坝藏族羌族自治州金川县', + '513227': '四川省阿坝藏族羌族自治州小金县', + '513228': '四川省阿坝藏族羌族自治州黑水县', + '513229': '四川省阿坝藏族羌族自治州马尔康县', + '513230': '四川省阿坝藏族羌族自治州壤塘县', + '513231': '四川省阿坝藏族羌族自治州阿坝县', + '513232': '四川省阿坝藏族羌族自治州若尔盖县', + '513233': '四川省阿坝藏族羌族自治州红原县', + '513300': '四川省甘孜藏族自治州', + '513321': '四川省甘孜藏族自治州康定县', + '513322': '四川省甘孜藏族自治州泸定县', + '513323': '四川省甘孜藏族自治州丹巴县', + '513324': '四川省甘孜藏族自治州九龙县', + '513325': '四川省甘孜藏族自治州雅江县', + '513326': '四川省甘孜藏族自治州道孚县', + '513327': '四川省甘孜藏族自治州炉霍县', + '513328': '四川省甘孜藏族自治州甘孜县', + '513329': '四川省甘孜藏族自治州新龙县', + '513330': '四川省甘孜藏族自治州德格县', + '513331': '四川省甘孜藏族自治州白玉县', + '513332': '四川省甘孜藏族自治州石渠县', + '513333': '四川省甘孜藏族自治州色达县', + '513334': '四川省甘孜藏族自治州理塘县', + '513335': '四川省甘孜藏族自治州巴塘县', + '513336': '四川省甘孜藏族自治州乡城县', + '513337': '四川省甘孜藏族自治州稻城县', + '513338': '四川省甘孜藏族自治州得荣县', + '513400': '四川省凉山彝族自治州', + '513401': '四川省凉山彝族自治州西昌市', + '513422': '四川省凉山彝族自治州木里藏族自治县', + '513423': '四川省凉山彝族自治州盐源县', + '513424': '四川省凉山彝族自治州德昌县', + '513425': '四川省凉山彝族自治州会理县', + '513426': '四川省凉山彝族自治州会东县', + '513427': '四川省凉山彝族自治州宁南县', + '513428': '四川省凉山彝族自治州普格县', + '513429': '四川省凉山彝族自治州布拖县', + '513430': '四川省凉山彝族自治州金阳县', + '513431': '四川省凉山彝族自治州昭觉县', + '513432': '四川省凉山彝族自治州喜德县', + '513433': '四川省凉山彝族自治州冕宁县', + '513434': '四川省凉山彝族自治州越西县', + '513435': '四川省凉山彝族自治州甘洛县', + '513436': '四川省凉山彝族自治州美姑县', + '513437': '四川省凉山彝族自治州雷波县', + '513700': '四川省巴中地区', + '513701': '四川省巴中地区巴中市', + '513721': '四川省巴中地区通江县', + '513722': '四川省巴中地区南江县', + '513723': '四川省巴中地区平昌县', + '513800': '四川省眉山地区', + '513821': '四川省眉山地区眉山县', + '513822': '四川省眉山地区仁寿县', + '513823': '四川省眉山地区彭山县', + '513824': '四川省眉山地区洪雅县', + '513825': '四川省眉山地区丹棱县', + '513826': '四川省眉山地区青神县', + '513900': '四川省眉山地区资阳地区', + '513901': '四川省眉山地区资阳市', + '513902': '四川省眉山地区简阳市', + '513921': '四川省眉山地区安岳县', + '513922': '四川省眉山地区乐至县', + '520000': '贵州省', + '520100': '贵州省贵阳市', + '520101': '贵州省贵阳市市辖区', + '520102': '贵州省贵阳市南明区', + '520103': '贵州省贵阳市云岩区', + '520111': '贵州省贵阳市花溪区', + '520112': '贵州省贵阳市乌当区', + '520113': '贵州省贵阳市白云区', + '520121': '贵州省贵阳市开阳县', + '520122': '贵州省贵阳市息烽县', + '520123': '贵州省贵阳市修文县', + '520181': '贵州省贵阳市清镇市', + '520200': '贵州省六盘水市', + '520201': '贵州省六盘水市钟山区', + '520202': '贵州省六盘水市盘县特区', + '520203': '贵州省六盘水市六枝特区', + '520221': '贵州省六盘水市水城县', + '520300': '贵州省遵义市', + '520301': '贵州省遵义市市辖区', + '520302': '贵州省遵义市红花岗区', + '520321': '贵州省遵义市遵义县', + '520322': '贵州省遵义市桐梓县', + '520323': '贵州省遵义市绥阳县', + '520324': '贵州省遵义市正安县', + '520325': '贵州省遵义市道真仡佬族苗族自治县', + '520326': '贵州省遵义市务川仡佬族苗族自治县', + '520327': '贵州省遵义市凤冈县', + '520328': '贵州省遵义市湄潭县', + '520329': '贵州省遵义市余庆县', + '520330': '贵州省遵义市习水县', + '520381': '贵州省遵义市赤水市', + '520382': '贵州省遵义市仁怀市', + '522200': '贵州省铜仁地区', + '522201': '贵州省铜仁地区铜仁市', + '522222': '贵州省铜仁地区江口县', + '522223': '贵州省铜仁地区玉屏侗族自治县', + '522224': '贵州省铜仁地区石阡县', + '522225': '贵州省铜仁地区思南县', + '522226': '贵州省铜仁地区印江土家族苗族自治县', + '522227': '贵州省铜仁地区德江县', + '522228': '贵州省铜仁地区沿河土家族自治县', + '522229': '贵州省铜仁地区松桃苗族自治县', + '522230': '贵州省铜仁地区万山特区', + '522300': '贵州省黔西南布依族苗族自治州', + '522301': '贵州省黔西南布依族苗族自治州兴义市', + '522322': '贵州省黔西南布依族苗族自治州兴仁县', + '522323': '贵州省黔西南布依族苗族自治州普安县', + '522324': '贵州省黔西南布依族苗族自治州晴隆县', + '522325': '贵州省黔西南布依族苗族自治州贞丰县', + '522326': '贵州省黔西南布依族苗族自治州望谟县', + '522327': '贵州省黔西南布依族苗族自治州册亨县', + '522328': '贵州省黔西南布依族苗族自治州安龙县', + '522400': '贵州省毕节地区', + '522401': '贵州省毕节地区毕节市', + '522422': '贵州省毕节地区大方县', + '522423': '贵州省毕节地区黔西县', + '522424': '贵州省毕节地区金沙县', + '522425': '贵州省毕节地区织金县', + '522426': '贵州省毕节地区纳雍县', + '522427': '贵州省毕节地区威宁彝族回族苗族自治县', + '522428': '贵州省毕节地区赫章县', + '522500': '贵州省安顺地区', + '522501': '贵州省安顺地区安顺市', + '522526': '贵州省安顺地区平坝县', + '522527': '贵州省安顺地区普定县', + '522528': '贵州省安顺地区关岭布依族苗族自治县', + '522529': '贵州省安顺地区镇宁布依族苗族自治县', + '522530': '贵州省安顺地区紫云苗族布依族自治县', + '522600': '贵州省黔东南苗族侗族自治州', + '522601': '贵州省黔东南苗族侗族自治州凯里市', + '522622': '贵州省黔东南苗族侗族自治州黄平县', + '522623': '贵州省黔东南苗族侗族自治州施秉县', + '522624': '贵州省黔东南苗族侗族自治州三穗县', + '522625': '贵州省黔东南苗族侗族自治州镇远县', + '522626': '贵州省黔东南苗族侗族自治州岑巩县', + '522627': '贵州省黔东南苗族侗族自治州天柱县', + '522628': '贵州省黔东南苗族侗族自治州锦屏县', + '522629': '贵州省黔东南苗族侗族自治州剑河县', + '522630': '贵州省黔东南苗族侗族自治州台江县', + '522631': '贵州省黔东南苗族侗族自治州黎平县', + '522632': '贵州省黔东南苗族侗族自治州榕江县', + '522633': '贵州省黔东南苗族侗族自治州从江县', + '522634': '贵州省黔东南苗族侗族自治州雷山县', + '522635': '贵州省黔东南苗族侗族自治州麻江县', + '522636': '贵州省黔东南苗族侗族自治州丹寨县', + '522700': '贵州省黔南布依族苗族自治州', + '522701': '贵州省黔南布依族苗族自治州都匀市', + '522702': '贵州省黔南布依族苗族自治州福泉市', + '522722': '贵州省黔南布依族苗族自治州荔波县', + '522723': '贵州省黔南布依族苗族自治州贵定县', + '522725': '贵州省黔南布依族苗族自治州瓮安县', + '522726': '贵州省黔南布依族苗族自治州独山县', + '522727': '贵州省黔南布依族苗族自治州平塘县', + '522728': '贵州省黔南布依族苗族自治州罗甸县', + '522729': '贵州省黔南布依族苗族自治州长顺县', + '522730': '贵州省黔南布依族苗族自治州龙里县', + '522731': '贵州省黔南布依族苗族自治州惠水县', + '522732': '贵州省黔南布依族苗族自治州三都水族自治县', + '530000': '云南省', + '530100': '云南省昆明市', + '530101': '云南省昆明市市辖区', + '530102': '云南省昆明市五华区', + '530103': '云南省昆明市盘龙区', + '530111': '云南省昆明市官渡区', + '530112': '云南省昆明市西山区', + '530113': '云南省昆明市东川区', + '530121': '云南省昆明市呈贡县', + '530122': '云南省昆明市晋宁县', + '530124': '云南省昆明市富民县', + '530125': '云南省昆明市宜良县', + '530126': '云南省昆明市石林彝族自治县', + '530127': '云南省昆明市嵩明县', + '530128': '云南省昆明市禄劝彝族苗族自治县', + '530129': '云南省昆明市寻甸回族彝族自治县', + '530181': '云南省昆明市安宁市', + '530300': '云南省曲靖市', + '530301': '云南省曲靖市市辖区', + '530302': '云南省曲靖市麒麟区', + '530321': '云南省曲靖市马龙县', + '530322': '云南省曲靖市陆良县', + '530323': '云南省曲靖市师宗县', + '530324': '云南省曲靖市罗平县', + '530325': '云南省曲靖市富源县', + '530326': '云南省曲靖市会泽县', + '530328': '云南省曲靖市沾益县', + '530381': '云南省曲靖市宣威市', + '530400': '云南省玉溪市', + '530401': '云南省玉溪市市辖区', + '530402': '云南省玉溪市红塔区', + '530421': '云南省玉溪市江川县', + '530422': '云南省玉溪市澄江县', + '530423': '云南省玉溪市通海县', + '530424': '云南省玉溪市华宁县', + '530425': '云南省玉溪市易门县', + '530426': '云南省玉溪市峨山彝族自治县', + '530427': '云南省玉溪市新平彝族傣族自治县', + '530428': '云南省玉溪市元江哈尼族彝族傣族自治县', + '532100': '云南省昭通地区', + '532101': '云南省昭通地区昭通市', + '532122': '云南省昭通地区鲁甸县', + '532123': '云南省昭通地区巧家县', + '532124': '云南省昭通地区盐津县', + '532125': '云南省昭通地区大关县', + '532126': '云南省昭通地区永善县', + '532127': '云南省昭通地区绥江县', + '532128': '云南省昭通地区镇雄县', + '532129': '云南省昭通地区彝良县', + '532130': '云南省昭通地区威信县', + '532131': '云南省昭通地区水富县', + '532300': '云南省楚雄彝族自治州', + '532301': '云南省楚雄彝族自治州楚雄市', + '532322': '云南省楚雄彝族自治州双柏县', + '532323': '云南省楚雄彝族自治州牟定县', + '532324': '云南省楚雄彝族自治州南华县', + '532325': '云南省楚雄彝族自治州姚安县', + '532326': '云南省楚雄彝族自治州大姚县', + '532327': '云南省楚雄彝族自治州永仁县', + '532328': '云南省楚雄彝族自治州元谋县', + '532329': '云南省楚雄彝族自治州武定县', + '532331': '云南省楚雄彝族自治州禄丰县', + '532500': '云南省红河哈尼族彝族自治州', + '532501': '云南省红河哈尼族彝族自治州个旧市', + '532502': '云南省红河哈尼族彝族自治州开远市', + '532522': '云南省红河哈尼族彝族自治州蒙自县', + '532523': '云南省红河哈尼族彝族自治州屏边苗族自治县', + '532524': '云南省红河哈尼族彝族自治州建水县', + '532525': '云南省红河哈尼族彝族自治州石屏县', + '532526': '云南省红河哈尼族彝族自治州弥勒县', + '532527': '云南省红河哈尼族彝族自治州泸西县', + '532528': '云南省红河哈尼族彝族自治州元阳县', + '532529': '云南省红河哈尼族彝族自治州红河县', + '532530': '云南省红河哈尼族彝族自治州金平苗族瑶族傣族自治县', + '532531': '云南省红河哈尼族彝族自治州绿春县', + '532532': '云南省红河哈尼族彝族自治州河口瑶族自治县', + '532600': '云南省文山壮族苗族自治州', + '532621': '云南省文山壮族苗族自治州文山县', + '532622': '云南省文山壮族苗族自治州砚山县', + '532623': '云南省文山壮族苗族自治州西畴县', + '532624': '云南省文山壮族苗族自治州麻栗坡县', + '532625': '云南省文山壮族苗族自治州马关县', + '532626': '云南省文山壮族苗族自治州丘北县', + '532627': '云南省文山壮族苗族自治州广南县', + '532628': '云南省文山壮族苗族自治州富宁县', + '532700': '云南省思茅地区', + '532701': '云南省思茅地区思茅市', + '532722': '云南省思茅地区普洱哈尼族彝族自治县', + '532723': '云南省思茅地区墨江哈尼族自治县', + '532724': '云南省思茅地区景东彝族自治县', + '532725': '云南省思茅地区景谷傣族彝族自治县', + '532726': '云南省思茅地区镇沅彝族哈尼族拉祜族自治县', + '532727': '云南省思茅地区江城哈尼族彝族自治县', + '532728': '云南省思茅地区孟连傣族拉祜族佤族自治县', + '532729': '云南省思茅地区澜沧拉祜族自治县', + '532730': '云南省思茅地区西盟佤族自治县', + '532800': '云南省西双版纳傣族自治州', + '532801': '云南省西双版纳傣族自治州景洪市', + '532822': '云南省西双版纳傣族自治州勐海县', + '532823': '云南省西双版纳傣族自治州勐腊县', + '532900': '云南省大理白族自治州', + '532901': '云南省大理白族自治州大理市', + '532922': '云南省大理白族自治州漾濞彝族自治县', + '532923': '云南省大理白族自治州祥云县', + '532924': '云南省大理白族自治州宾川县', + '532925': '云南省大理白族自治州弥渡县', + '532926': '云南省大理白族自治州南涧彝族自治县', + '532927': '云南省大理白族自治州巍山彝族回族自治县', + '532928': '云南省大理白族自治州永平县', + '532929': '云南省大理白族自治州云龙县', + '532930': '云南省大理白族自治州洱源县', + '532931': '云南省大理白族自治州剑川县', + '532932': '云南省大理白族自治州鹤庆县', + '533000': '云南省保山地区', + '533001': '云南省保山地区保山市', + '533022': '云南省保山地区施甸县', + '533023': '云南省保山地区腾冲县', + '533024': '云南省保山地区龙陵县', + '533025': '云南省保山地区昌宁县', + '533100': '云南省德宏傣族景颇族自治州', + '533101': '云南省德宏傣族景颇族自治州畹町市', + '533102': '云南省德宏傣族景颇族自治州瑞丽市', + '533103': '云南省德宏傣族景颇族自治州潞西市', + '533122': '云南省德宏傣族景颇族自治州梁河县', + '533123': '云南省德宏傣族景颇族自治州盈江县', + '533124': '云南省德宏傣族景颇族自治州陇川县', + '533200': '云南省丽江地区', + '533221': '云南省丽江地区丽江纳西族自治县', + '533222': '云南省丽江地区永胜县', + '533223': '云南省丽江地区华坪县', + '533224': '云南省丽江地区宁蒗彝族自治县', + '533300': '云南省怒江傈僳族自治州', + '533321': '云南省怒江傈僳族自治州泸水县', + '533323': '云南省怒江傈僳族自治州福贡县', + '533324': '云南省怒江傈僳族自治州贡山独龙族怒族自治县', + '533325': '云南省怒江傈僳族自治州兰坪白族普米族自治县', + '533400': '云南省迪庆藏族自治州', + '533421': '云南省迪庆藏族自治州中甸县', + '533422': '云南省迪庆藏族自治州德钦县', + '533423': '云南省迪庆藏族自治州维西傈僳族自治县', + '533500': '云南省临沧地区', + '533521': '云南省临沧地区临沧县', + '533522': '云南省临沧地区凤庆县', + '533523': '云南省临沧地区云县', + '533524': '云南省临沧地区永德县', + '533525': '云南省临沧地区镇康县', + '533526': '云南省临沧地区双江拉祜族佤族布朗族傣族自治县', + '533527': '云南省临沧地区耿马傣族佤族自治县', + '533528': '云南省临沧地区沧源佤族自治县', + '540000': '西藏自治区', + '540100': '西藏自治区拉萨市', + '540101': '西藏自治区拉萨市市辖区', + '540102': '西藏自治区拉萨市城关区', + '540121': '西藏自治区拉萨市林周县', + '540122': '西藏自治区拉萨市当雄县', + '540123': '西藏自治区拉萨市尼木县', + '540124': '西藏自治区拉萨市曲水县', + '540125': '西藏自治区拉萨市堆龙德庆县', + '540126': '西藏自治区拉萨市达孜县', + '540127': '西藏自治区拉萨市墨竹工卡县', + '542100': '西藏自治区昌都地区', + '542121': '西藏自治区昌都地区昌都县', + '542122': '西藏自治区昌都地区江达县', + '542123': '西藏自治区昌都地区贡觉县', + '542124': '西藏自治区昌都地区类乌齐县', + '542125': '西藏自治区昌都地区丁青县', + '542126': '西藏自治区昌都地区察雅县', + '542127': '西藏自治区昌都地区八宿县', + '542128': '西藏自治区昌都地区左贡县', + '542129': '西藏自治区昌都地区芒康县', + '542132': '西藏自治区昌都地区洛隆县', + '542133': '西藏自治区昌都地区边坝县', + '542134': '西藏自治区昌都地区盐井县', + '542135': '西藏自治区昌都地区碧土县', + '542136': '西藏自治区昌都地区妥坝县', + '542137': '西藏自治区昌都地区生达县', + '542200': '西藏自治区山南地区', + '542221': '西藏自治区山南地区乃东县', + '542222': '西藏自治区山南地区扎囊县', + '542223': '西藏自治区山南地区贡嘎县', + '542224': '西藏自治区山南地区桑日县', + '542225': '西藏自治区山南地区琼结县', + '542226': '西藏自治区山南地区曲松县', + '542227': '西藏自治区山南地区措美县', + '542228': '西藏自治区山南地区洛扎县', + '542229': '西藏自治区山南地区加查县', + '542231': '西藏自治区山南地区隆子县', + '542232': '西藏自治区山南地区错那县', + '542233': '西藏自治区山南地区浪卡子县', + '542300': '西藏自治区日喀则地区', + '542301': '西藏自治区日喀则地区日喀则市', + '542322': '西藏自治区日喀则地区南木林县', + '542323': '西藏自治区日喀则地区江孜县', + '542324': '西藏自治区日喀则地区定日县', + '542325': '西藏自治区日喀则地区萨迦县', + '542326': '西藏自治区日喀则地区拉孜县', + '542327': '西藏自治区日喀则地区昂仁县', + '542328': '西藏自治区日喀则地区谢通门县', + '542329': '西藏自治区日喀则地区白朗县', + '542330': '西藏自治区日喀则地区仁布县', + '542331': '西藏自治区日喀则地区康马县', + '542332': '西藏自治区日喀则地区定结县', + '542333': '西藏自治区日喀则地区仲巴县', + '542334': '西藏自治区日喀则地区亚东县', + '542335': '西藏自治区日喀则地区吉隆县', + '542336': '西藏自治区日喀则地区聂拉木县', + '542337': '西藏自治区日喀则地区萨嘎县', + '542338': '西藏自治区日喀则地区岗巴县', + '542400': '西藏自治区那曲地区', + '542421': '西藏自治区那曲地区那曲县', + '542422': '西藏自治区那曲地区嘉黎县', + '542423': '西藏自治区那曲地区比如县', + '542424': '西藏自治区那曲地区聂荣县', + '542425': '西藏自治区那曲地区安多县', + '542426': '西藏自治区那曲地区申扎县', + '542427': '西藏自治区那曲地区索县', + '542428': '西藏自治区那曲地区班戈县', + '542429': '西藏自治区那曲地区巴青县', + '542430': '西藏自治区那曲地区尼玛县', + '542500': '西藏自治区阿里地区', + '542521': '西藏自治区阿里地区普兰县', + '542522': '西藏自治区阿里地区札达县', + '542523': '西藏自治区阿里地区噶尔县', + '542524': '西藏自治区阿里地区日土县', + '542525': '西藏自治区阿里地区革吉县', + '542526': '西藏自治区阿里地区改则县', + '542527': '西藏自治区阿里地区措勤县', + '542528': '西藏自治区阿里地区隆格尔县', + '542600': '西藏自治区林芝地区', + '542621': '西藏自治区林芝地区林芝县', + '542622': '西藏自治区林芝地区工布江达县', + '542623': '西藏自治区林芝地区米林县', + '542624': '西藏自治区林芝地区墨脱县', + '542625': '西藏自治区林芝地区波密县', + '542626': '西藏自治区林芝地区察隅县', + '542627': '西藏自治区林芝地区朗县', + '610000': '陕西省', + '610100': '陕西省西安市', + '610101': '陕西省西安市市辖区', + '610102': '陕西省西安市新城区', + '610103': '陕西省西安市碑林区', + '610104': '陕西省西安市莲湖区', + '610111': '陕西省西安市灞桥区', + '610112': '陕西省西安市未央区', + '610113': '陕西省西安市雁塔区', + '610114': '陕西省西安市阎良区', + '610115': '陕西省西安市临潼区', + '610121': '陕西省西安市长安县', + '610122': '陕西省西安市蓝田县', + '610124': '陕西省西安市周至县', + '610125': '陕西省西安市户县', + '610126': '陕西省西安市高陵县', + '610200': '陕西省铜川市', + '610201': '陕西省铜川市市辖区', + '610202': '陕西省铜川市城区', + '610203': '陕西省铜川市郊区', + '610221': '陕西省铜川市耀县', + '610222': '陕西省铜川市宜君县', + '610300': '陕西省宝鸡市', + '610301': '陕西省宝鸡市市辖区', + '610302': '陕西省宝鸡市渭滨区', + '610303': '陕西省宝鸡市金台区', + '610321': '陕西省宝鸡市宝鸡县', + '610322': '陕西省宝鸡市凤翔县', + '610323': '陕西省宝鸡市岐山县', + '610324': '陕西省宝鸡市扶风县', + '610326': '陕西省宝鸡市眉县', + '610327': '陕西省宝鸡市陇县', + '610328': '陕西省宝鸡市千阳县', + '610329': '陕西省宝鸡市麟游县', + '610330': '陕西省宝鸡市凤县', + '610331': '陕西省宝鸡市太白县', + '610400': '陕西省咸阳市', + '610401': '陕西省咸阳市市辖区', + '610402': '陕西省咸阳市秦都区', + '610403': '陕西省咸阳市杨陵区', + '610404': '陕西省咸阳市渭城区', + '610422': '陕西省咸阳市三原县', + '610423': '陕西省咸阳市泾阳县', + '610424': '陕西省咸阳市乾县', + '610425': '陕西省咸阳市礼泉县', + '610426': '陕西省咸阳市永寿县', + '610427': '陕西省咸阳市彬县', + '610428': '陕西省咸阳市长武县', + '610429': '陕西省咸阳市旬邑县', + '610430': '陕西省咸阳市淳化县', + '610431': '陕西省咸阳市武功县', + '610481': '陕西省咸阳市兴平市', + '610500': '陕西省渭南市', + '610501': '陕西省渭南市市辖区', + '610502': '陕西省渭南市临渭区', + '610521': '陕西省渭南市华县', + '610522': '陕西省渭南市潼关县', + '610523': '陕西省渭南市大荔县', + '610524': '陕西省渭南市合阳县', + '610525': '陕西省渭南市澄城县', + '610526': '陕西省渭南市蒲城县', + '610527': '陕西省渭南市白水县', + '610528': '陕西省渭南市富平县', + '610581': '陕西省渭南市韩城市', + '610582': '陕西省渭南市华阴市', + '610600': '陕西省延安市', + '610601': '陕西省延安市市辖区', + '610602': '陕西省延安市宝塔区', + '610621': '陕西省延安市延长县', + '610622': '陕西省延安市延川县', + '610623': '陕西省延安市子长县', + '610624': '陕西省延安市安塞县', + '610625': '陕西省延安市志丹县', + '610626': '陕西省延安市吴旗县', + '610627': '陕西省延安市甘泉县', + '610628': '陕西省延安市富县', + '610629': '陕西省延安市洛川县', + '610630': '陕西省延安市宜川县', + '610631': '陕西省延安市黄龙县', + '610632': '陕西省延安市黄陵县', + '610700': '陕西省汉中市', + '610701': '陕西省汉中市市辖区', + '610702': '陕西省汉中市汉台区', + '610721': '陕西省汉中市南郑县', + '610722': '陕西省汉中市城固县', + '610723': '陕西省汉中市洋县', + '610724': '陕西省汉中市西乡县', + '610725': '陕西省汉中市勉县', + '610726': '陕西省汉中市宁强县', + '610727': '陕西省汉中市略阳县', + '610728': '陕西省汉中市镇巴县', + '610729': '陕西省汉中市留坝县', + '610730': '陕西省汉中市佛坪县', + '612400': '陕西省安康地区', + '612401': '陕西省安康地区安康市', + '612422': '陕西省安康地区汉阴县', + '612423': '陕西省安康地区石泉县', + '612424': '陕西省安康地区宁陕县', + '612425': '陕西省安康地区紫阳县', + '612426': '陕西省安康地区岚皋县', + '612427': '陕西省安康地区平利县', + '612428': '陕西省安康地区镇坪县', + '612429': '陕西省安康地区旬阳县', + '612430': '陕西省安康地区白河县', + '612500': '陕西省商洛地区', + '612501': '陕西省商洛地区商州市', + '612522': '陕西省商洛地区洛南县', + '612523': '陕西省商洛地区丹凤县', + '612524': '陕西省商洛地区商南县', + '612525': '陕西省商洛地区山阳县', + '612526': '陕西省商洛地区镇安县', + '612527': '陕西省商洛地区柞水县', + '612700': '陕西省榆林地区', + '612701': '陕西省榆林地区榆林市', + '612722': '陕西省榆林地区神木县', + '612723': '陕西省榆林地区府谷县', + '612724': '陕西省榆林地区横山县', + '612725': '陕西省榆林地区靖边县', + '612726': '陕西省榆林地区定边县', + '612727': '陕西省榆林地区绥德县', + '612728': '陕西省榆林地区米脂县', + '612729': '陕西省榆林地区佳县', + '612730': '陕西省榆林地区吴堡县', + '612731': '陕西省榆林地区清涧县', + '612732': '陕西省榆林地区子洲县', + '620000': '甘肃省', + '620100': '甘肃省兰州市', + '620101': '甘肃省兰州市市辖区', + '620102': '甘肃省兰州市城关区', + '620103': '甘肃省兰州市七里河区', + '620104': '甘肃省兰州市西固区', + '620105': '甘肃省兰州市安宁区', + '620111': '甘肃省兰州市红古区', + '620121': '甘肃省兰州市永登县', + '620122': '甘肃省兰州市皋兰县', + '620123': '甘肃省兰州市榆中县', + '620200': '甘肃省嘉峪关市', + '620201': '甘肃省嘉峪关市市辖区', + '620300': '甘肃省嘉峪关市金昌市', + '620301': '甘肃省嘉峪关市市辖区', + '620302': '甘肃省嘉峪关市金川区', + '620321': '甘肃省嘉峪关市永昌县', + '620400': '甘肃省白银市', + '620401': '甘肃省白银市市辖区', + '620402': '甘肃省白银市白银区', + '620403': '甘肃省白银市平川区', + '620421': '甘肃省白银市靖远县', + '620422': '甘肃省白银市会宁县', + '620423': '甘肃省白银市景泰县', + '620500': '甘肃省天水市', + '620501': '甘肃省天水市市辖区', + '620502': '甘肃省天水市秦城区', + '620503': '甘肃省天水市北道区', + '620521': '甘肃省天水市清水县', + '620522': '甘肃省天水市秦安县', + '620523': '甘肃省天水市甘谷县', + '620524': '甘肃省天水市武山县', + '620525': '甘肃省天水市张家川回族自治县', + '622100': '甘肃省酒泉地区', + '622101': '甘肃省酒泉地区玉门市', + '622102': '甘肃省酒泉地区酒泉市', + '622103': '甘肃省酒泉地区敦煌市', + '622123': '甘肃省酒泉地区金塔县', + '622124': '甘肃省酒泉地区肃北蒙古族自治县', + '622125': '甘肃省酒泉地区阿克塞哈萨克族自治县', + '622126': '甘肃省酒泉地区安西县', + '622200': '甘肃省张掖地区', + '622201': '甘肃省张掖地区张掖市', + '622222': '甘肃省张掖地区肃南裕固族自治县', + '622223': '甘肃省张掖地区民乐县', + '622224': '甘肃省张掖地区临泽县', + '622225': '甘肃省张掖地区高台县', + '622226': '甘肃省张掖地区山丹县', + '622300': '甘肃省武威地区', + '622301': '甘肃省武威地区武威市', + '622322': '甘肃省武威地区民勤县', + '622323': '甘肃省武威地区古浪县', + '622326': '甘肃省武威地区天祝藏族自治县', + '622400': '甘肃省定西地区', + '622421': '甘肃省定西地区定西县', + '622424': '甘肃省定西地区通渭县', + '622425': '甘肃省定西地区陇西县', + '622426': '甘肃省定西地区渭源县', + '622427': '甘肃省定西地区临洮县', + '622428': '甘肃省定西地区漳县', + '622429': '甘肃省定西地区岷县', + '622600': '甘肃省陇南地区', + '622621': '甘肃省陇南地区武都县', + '622623': '甘肃省陇南地区宕昌县', + '622624': '甘肃省陇南地区成县', + '622625': '甘肃省陇南地区康县', + '622626': '甘肃省陇南地区文县', + '622627': '甘肃省陇南地区西和县', + '622628': '甘肃省陇南地区礼县', + '622629': '甘肃省陇南地区两当县', + '622630': '甘肃省陇南地区徽县', + '622700': '甘肃省平凉地区', + '622701': '甘肃省平凉地区平凉市', + '622722': '甘肃省平凉地区泾川县', + '622723': '甘肃省平凉地区灵台县', + '622724': '甘肃省平凉地区崇信县', + '622725': '甘肃省平凉地区华亭县', + '622726': '甘肃省平凉地区庄浪县', + '622727': '甘肃省平凉地区静宁县', + '622800': '甘肃省庆阳地区', + '622801': '甘肃省庆阳地区西峰市', + '622821': '甘肃省庆阳地区庆阳县', + '622822': '甘肃省庆阳地区环县', + '622823': '甘肃省庆阳地区华池县', + '622824': '甘肃省庆阳地区合水县', + '622825': '甘肃省庆阳地区正宁县', + '622826': '甘肃省庆阳地区宁县', + '622827': '甘肃省庆阳地区镇原县', + '622900': '甘肃省临夏回族自治州', + '622901': '甘肃省临夏回族自治州临夏市', + '622921': '甘肃省临夏回族自治州临夏县', + '622922': '甘肃省临夏回族自治州康乐县', + '622923': '甘肃省临夏回族自治州永靖县', + '622924': '甘肃省临夏回族自治州广河县', + '622925': '甘肃省临夏回族自治州和政县', + '622926': '甘肃省临夏回族自治州东乡族自治县', + '622927': '甘肃省临夏回族自治州积石山保安族东乡族撒拉族自治县', + '623000': '甘肃省甘南藏族自治州', + '623001': '甘肃省甘南藏族自治州合作市', + '623021': '甘肃省甘南藏族自治州临潭县', + '623022': '甘肃省甘南藏族自治州卓尼县', + '623023': '甘肃省甘南藏族自治州舟曲县', + '623024': '甘肃省甘南藏族自治州迭部县', + '623025': '甘肃省甘南藏族自治州玛曲县', + '623026': '甘肃省甘南藏族自治州碌曲县', + '623027': '甘肃省甘南藏族自治州夏河县', + '630000': '青海省', + '630100': '青海省西宁市', + '630101': '青海省西宁市市辖区', + '630102': '青海省西宁市城东区', + '630103': '青海省西宁市城中区', + '630104': '青海省西宁市城西区', + '630105': '青海省西宁市城北区', + '630121': '青海省西宁市大通回族土族自治县', + '632100': '青海省海东地区', + '632121': '青海省海东地区平安县', + '632122': '青海省海东地区民和回族土族自治县', + '632123': '青海省海东地区乐都县', + '632124': '青海省海东地区湟中县', + '632125': '青海省海东地区湟源县', + '632126': '青海省海东地区互助土族自治县', + '632127': '青海省海东地区化隆回族自治县', + '632128': '青海省海东地区循化撒拉族自治县', + '632200': '青海省海北藏族自治州', + '632221': '青海省海北藏族自治州门源回族自治县', + '632222': '青海省海北藏族自治州祁连县', + '632223': '青海省海北藏族自治州海晏县', + '632224': '青海省海北藏族自治州刚察县', + '632300': '青海省黄南藏族自治州', + '632321': '青海省黄南藏族自治州同仁县', + '632322': '青海省黄南藏族自治州尖扎县', + '632323': '青海省黄南藏族自治州泽库县', + '632324': '青海省黄南藏族自治州河南蒙古族自治县', + '632500': '青海省海南藏族自治州', + '632521': '青海省海南藏族自治州共和县', + '632522': '青海省海南藏族自治州同德县', + '632523': '青海省海南藏族自治州贵德县', + '632524': '青海省海南藏族自治州兴海县', + '632525': '青海省海南藏族自治州贵南县', + '632600': '青海省果洛藏族自治州', + '632621': '青海省果洛藏族自治州玛沁县', + '632622': '青海省果洛藏族自治州班玛县', + '632623': '青海省果洛藏族自治州甘德县', + '632624': '青海省果洛藏族自治州达日县', + '632625': '青海省果洛藏族自治州久治县', + '632626': '青海省果洛藏族自治州玛多县', + '632700': '青海省玉树藏族自治州', + '632721': '青海省玉树藏族自治州玉树县', + '632722': '青海省玉树藏族自治州杂多县', + '632723': '青海省玉树藏族自治州称多县', + '632724': '青海省玉树藏族自治州治多县', + '632725': '青海省玉树藏族自治州囊谦县', + '632726': '青海省玉树藏族自治州曲麻莱县', + '632800': '青海省海西蒙古族藏族自治州', + '632801': '青海省海西蒙古族藏族自治州格尔木市', + '632802': '青海省海西蒙古族藏族自治州德令哈市', + '632821': '青海省海西蒙古族藏族自治州乌兰县', + '632822': '青海省海西蒙古族藏族自治州都兰县', + '632823': '青海省海西蒙古族藏族自治州天峻县', + '640000': '宁夏回族自治区', + '640100': '宁夏回族自治区银川市', + '640101': '宁夏回族自治区银川市市辖区', + '640102': '宁夏回族自治区银川市城区', + '640103': '宁夏回族自治区银川市新城区', + '640111': '宁夏回族自治区银川市郊区', + '640121': '宁夏回族自治区银川市永宁县', + '640122': '宁夏回族自治区银川市贺兰县', + '640200': '宁夏回族自治区石嘴山市', + '640201': '宁夏回族自治区石嘴山市市辖区', + '640202': '宁夏回族自治区石嘴山市大武口区', + '640203': '宁夏回族自治区石嘴山市石嘴山区', + '640204': '宁夏回族自治区石嘴山市石炭井区', + '640221': '宁夏回族自治区石嘴山市平罗县', + '640222': '宁夏回族自治区石嘴山市陶乐县', + '640223': '宁夏回族自治区石嘴山市惠农县', + '640300': '宁夏回族自治区吴忠市', + '640301': '宁夏回族自治区吴忠市市辖区', + '640302': '宁夏回族自治区吴忠市利通区', + '640321': '宁夏回族自治区吴忠市中卫县', + '640322': '宁夏回族自治区吴忠市中宁县', + '640323': '宁夏回族自治区吴忠市盐池县', + '640324': '宁夏回族自治区吴忠市同心县', + '640381': '宁夏回族自治区吴忠市青铜峡市', + '640382': '宁夏回族自治区吴忠市灵武市', + '642200': '宁夏回族自治区固原地区', + '642221': '宁夏回族自治区固原地区固原县', + '642222': '宁夏回族自治区固原地区海原县', + '642223': '宁夏回族自治区固原地区西吉县', + '642224': '宁夏回族自治区固原地区隆德县', + '642225': '宁夏回族自治区固原地区泾源县', + '642226': '宁夏回族自治区固原地区彭阳县', + '650000': '新疆维吾尔自治区', + '650100': '新疆维吾尔族自治区乌鲁木齐市', + '650101': '新疆维吾尔族自治区乌鲁木齐市市辖区', + '650102': '新疆维吾尔族自治区乌鲁木齐市天山区', + '650103': '新疆维吾尔族自治区乌鲁木齐市沙依巴克区', + '650104': '新疆维吾尔族自治区乌鲁木齐市新市区', + '650105': '新疆维吾尔族自治区乌鲁木齐市水磨沟区', + '650106': '新疆维吾尔族自治区乌鲁木齐市头屯河区', + '650107': '新疆维吾尔族自治区乌鲁木齐市南山矿区', + '650108': '新疆维吾尔族自治区乌鲁木齐市东山区', + '650121': '新疆维吾尔族自治区乌鲁木齐市乌鲁木齐县', + '650200': '新疆维吾尔族自治区克拉玛依市', + '650201': '新疆维吾尔族自治区克拉玛依市市辖区', + '650202': '新疆维吾尔族自治区克拉玛依市独山子区', + '650203': '新疆维吾尔族自治区克拉玛依市克拉玛依区', + '650204': '新疆维吾尔族自治区克拉玛依市白碱滩区', + '650205': '新疆维吾尔族自治区克拉玛依市乌尔禾区', + '652100': '新疆维吾尔族自治区吐鲁番地区', + '652101': '新疆维吾尔族自治区吐鲁番地区吐鲁番市', + '652122': '新疆维吾尔族自治区吐鲁番地区鄯善县', + '652123': '新疆维吾尔族自治区吐鲁番地区托克逊县', + '652200': '新疆维吾尔族自治区哈密地区', + '652201': '新疆维吾尔族自治区哈密地区哈密市', + '652222': '新疆维吾尔族自治区哈密地区巴里坤哈萨克自治县', + '652223': '新疆维吾尔族自治区哈密地区伊吾县', + '652300': '新疆维吾尔族自治区昌吉回族自治州', + '652301': '新疆维吾尔族自治区昌吉回族自治州昌吉市', + '652302': '新疆维吾尔族自治区昌吉回族自治州阜康市', + '652303': '新疆维吾尔族自治区昌吉回族自治州米泉市', + '652323': '新疆维吾尔族自治区昌吉回族自治州呼图壁县', + '652324': '新疆维吾尔族自治区昌吉回族自治州玛纳斯县', + '652325': '新疆维吾尔族自治区昌吉回族自治州奇台县', + '652327': '新疆维吾尔族自治区昌吉回族自治州吉木萨尔县', + '652328': '新疆维吾尔族自治区昌吉回族自治州木垒哈萨克自治县', + '652700': '新疆维吾尔族自治区博尔塔拉蒙古自治州', + '652701': '新疆维吾尔族自治区博尔塔拉蒙古自治州博乐市', + '652722': '新疆维吾尔族自治区博尔塔拉蒙古自治州精河县', + '652723': '新疆维吾尔族自治区博尔塔拉蒙古自治州温泉县', + '652800': '新疆维吾尔族自治区巴音郭楞蒙古自治州', + '652801': '新疆维吾尔族自治区巴音郭楞蒙古自治州库尔勒市', + '652822': '新疆维吾尔族自治区巴音郭楞蒙古自治州轮台县', + '652823': '新疆维吾尔族自治区巴音郭楞蒙古自治州尉犁县', + '652824': '新疆维吾尔族自治区巴音郭楞蒙古自治州若羌县', + '652825': '新疆维吾尔族自治区巴音郭楞蒙古自治州且末县', + '652826': '新疆维吾尔族自治区巴音郭楞蒙古自治州焉耆回族自治县', + '652827': '新疆维吾尔族自治区巴音郭楞蒙古自治州和静县', + '652828': '新疆维吾尔族自治区巴音郭楞蒙古自治州和硕县', + '652829': '新疆维吾尔族自治区巴音郭楞蒙古自治州博湖县', + '652900': '新疆维吾尔族自治区阿克苏地区', + '652901': '新疆维吾尔族自治区阿克苏地区阿克苏市', + '652922': '新疆维吾尔族自治区阿克苏地区温宿县', + '652923': '新疆维吾尔族自治区阿克苏地区库车县', + '652924': '新疆维吾尔族自治区阿克苏地区沙雅县', + '652925': '新疆维吾尔族自治区阿克苏地区新和县', + '652926': '新疆维吾尔族自治区阿克苏地区拜城县', + '652927': '新疆维吾尔族自治区阿克苏地区乌什县', + '652928': '新疆维吾尔族自治区阿克苏地区阿瓦提县', + '652929': '新疆维吾尔族自治区阿克苏地区柯坪县', + '653000': '新疆维吾尔族自治区克孜勒苏柯尔克孜自治州', + '653001': '新疆维吾尔族自治区克孜勒苏柯尔克孜自治州阿图什市', + '653022': '新疆维吾尔族自治区克孜勒苏柯尔克孜自治州阿克陶县', + '653023': '新疆维吾尔族自治区克孜勒苏柯尔克孜自治州阿合奇县', + '653024': '新疆维吾尔族自治区克孜勒苏柯尔克孜自治州乌恰县', + '653100': '新疆维吾尔族自治区喀什地区', + '653101': '新疆维吾尔族自治区喀什地区喀什市', + '653121': '新疆维吾尔族自治区喀什地区疏附县', + '653122': '新疆维吾尔族自治区喀什地区疏勒县', + '653123': '新疆维吾尔族自治区喀什地区英吉沙县', + '653124': '新疆维吾尔族自治区喀什地区泽普县', + '653125': '新疆维吾尔族自治区喀什地区莎车县', + '653126': '新疆维吾尔族自治区喀什地区叶城县', + '653127': '新疆维吾尔族自治区喀什地区麦盖提县', + '653128': '新疆维吾尔族自治区喀什地区岳普湖县', + '653129': '新疆维吾尔族自治区喀什地区伽师县', + '653130': '新疆维吾尔族自治区喀什地区巴楚县', + '653131': '新疆维吾尔族自治区喀什地区塔什库尔干塔吉克自治县', + '653200': '新疆维吾尔族自治区和田地区', + '653201': '新疆维吾尔族自治区和田地区和田市', + '653221': '新疆维吾尔族自治区和田地区和田县', + '653222': '新疆维吾尔族自治区和田地区墨玉县', + '653223': '新疆维吾尔族自治区和田地区皮山县', + '653224': '新疆维吾尔族自治区和田地区洛浦县', + '653225': '新疆维吾尔族自治区和田地区策勒县', + '653226': '新疆维吾尔族自治区和田地区于田县', + '653227': '新疆维吾尔族自治区和田地区民丰县', + '654000': '新疆维吾尔族自治区伊犁哈萨克自治州', + '654001': '新疆维吾尔族自治区伊犁哈萨克自治州奎屯市', + '654100': '新疆维吾尔族自治区伊犁哈萨克自治州伊犁地区', + '654101': '新疆维吾尔族自治区伊犁哈萨克自治州伊宁市', + '654121': '新疆维吾尔族自治区伊犁哈萨克自治州伊宁县', + '654122': '新疆自治区伊犁哈萨克自治州察布查尔锡伯自治县', + '654123': '新疆维吾尔族自治区伊犁哈萨克自治州霍城县', + '654124': '新疆维吾尔族自治区伊犁哈萨克自治州巩留县', + '654125': '新疆维吾尔族自治区伊犁哈萨克自治州新源县', + '654126': '新疆维吾尔族自治区伊犁哈萨克自治州昭苏县', + '654127': '新疆维吾尔族自治区伊犁哈萨克自治州特克斯县', + '654128': '新疆维吾尔族自治区伊犁哈萨克自治州尼勒克县', + '654200': '新疆维吾尔族自治区塔城地区', + '654201': '新疆维吾尔族自治区塔城地区塔城市', + '654202': '新疆维吾尔族自治区塔城地区乌苏市', + '654221': '新疆维吾尔族自治区塔城地区额敏县', + '654223': '新疆维吾尔族自治区塔城地区沙湾县', + '654224': '新疆维吾尔族自治区塔城地区托里县', + '654225': '新疆维吾尔族自治区塔城地区裕民县', + '654226': '新疆维吾尔族自治区塔城地区和布克赛尔蒙古自治县', + '654300': '新疆维吾尔族自治区阿勒泰地区', + '654301': '新疆维吾尔族自治区阿勒泰地区阿勒泰市', + '654321': '新疆维吾尔族自治区阿勒泰地区布尔津县', + '654322': '新疆维吾尔族自治区阿勒泰地区富蕴县', + '654323': '新疆维吾尔族自治区阿勒泰地区福海县', + '654324': '新疆维吾尔族自治区阿勒泰地区哈巴河县', + '654325': '新疆维吾尔族自治区阿勒泰地区青河县', + '654326': '新疆维吾尔族自治区阿勒泰地区吉木乃县', + '659000': '新疆维吾尔族自治区直辖县级行政单位', + '659001': '新疆维吾尔族自治区石河子市' +} + +function IDValidator() { + let param = { + error: { + longNumber: '长数字存在精度问题,请使用字符串传值! Long number is not allowed, because the precision of the Number In JavaScript.' + } + } + let util = { + checkArg: function (id) { + let argType = (typeof id) + + switch (argType) { + case 'number': + // long number not allowed + id = id.toString() + if (id.length > 15) { + this.error(param.error.longNumber) + return false + } + break + case 'string': + break + default: + return false + } + id = id.toUpperCase() + let code = null + if (id.length === 18) { + // 18位 + code = { + body: id.slice(0, 17), + checkBit: id.slice(-1), + type: 18 + } + } else if (id.length === 15) { + // 15位 + code = { + body: id, + type: 15 + } + } else { + return false + } + return code + }, + // 地址码检查 + checkAddr: function (addr, GB2260) { + let addrInfo = this.getAddrInfo(addr, GB2260) + return addrInfo !== false + }, + // 取得地址码信息 + getAddrInfo: function (addr, GB2260) { + GB2260 = GB2260 || null + // 查询GB/T2260,没有引入GB2260时略过 + if (GB2260 === null) { + return addr + } + if (!GB2260.hasOwnProperty(addr)) { + // 考虑标准不全的情况,搜索不到时向上搜索 + let tmpAddr + tmpAddr = addr.slice(0, 4) + '00' + if (!GB2260.hasOwnProperty(tmpAddr)) { + tmpAddr = addr.slice(0, 2) + '0000' + if (!GB2260.hasOwnProperty(tmpAddr)) { + return false + } else { + return GB2260[tmpAddr] + '未知地区' + } + } else { + return GB2260[tmpAddr] + '未知地区' + } + } else { + return GB2260[addr] + } + }, + // 生日码检查 + checkBirth: function (birth) { + let year, month, day + if (birth.length === 8) { + year = parseInt(birth.slice(0, 4), 10) + month = parseInt(birth.slice(4, 6), 10) + day = parseInt(birth.slice(-2), 10) + } else if (birth.length === 6) { + year = parseInt('19' + birth.slice(0, 2), 10) + month = parseInt(birth.slice(2, 4), 10) + day = parseInt(birth.slice(-2), 10) + } else { + return false + } + // TODO 是否需要判断年份 + /* + * if( year<1800 ){ return false; } + */ + // TODO 按月份检测 + if (month > 12 || month === 0 || day > 31 || day === 0) { + return false + } + + return true + }, + // 顺序码检查 + checkOrder: function (order) { + // 暂无需检测 + + return true + }, + // 加权 + weight: function (t) { + return Math.pow(2, t - 1) % 11 + }, + // 随机整数 + rand: function (max, min) { + min = min || 1 + return Math.round(Math.random() * (max - min)) + min + }, + // 数字补位 + str_pad: function (str, len, chr, right) { + str = str.toString() + len = len || 2 + chr = chr || '0' + right = right || false + if (str.length >= len) { + return str + } else { + for (let i = 0, j = len - str.length; i < j; i++) { + if (right) { + str = str + chr + } else { + str = chr + str + } + } + return str + } + }, + // 抛错 + error: function (msg) { + let e = new Error() + e.message = 'IDValidator: ' + msg + throw e + } + } + let _IDValidator = function (GB2260) { + if (typeof GB2260 !== 'undefined') { + this.GB2260 = GB2260 + } + // 建立cache + this.cache = {} + } + _IDValidator.prototype = { + isValid: function (id) { + let GB2260 = this.GB2260 || null + let code = util.checkArg(id) + if (code === false) { + return false + } + // 查询cache + if (this.cache.hasOwnProperty(id) && typeof (this.cache[id].valid) !== 'undefined') { + return this.cache[id].valid + } else { + if (!this.cache.hasOwnProperty(id)) { + this.cache[id] = {} + } + } + + let addr = code.body.slice(0, 6) + let birth = (code.type === 18 ? code.body.slice(6, 14) : code.body.slice(6, 12)) + let order = code.body.slice(-3) + + if (!(util.checkAddr(addr, GB2260) && util.checkBirth(birth) && util + .checkOrder(order))) { + this.cache[id].valid = false + return false + } + + // 15位不含校验码,到此已结束 + if (code.type === 15) { + this.cache[id].valid = true + return true + } + + /* 校验位部分 */ + + // 位置加权 + let posWeight = [] + for (let i = 18; i > 1; i--) { + let wei = util.weight(i) + posWeight[i] = wei + } + + // 累加body部分与位置加权的积 + let bodySum = 0 + let bodyArr = code.body.split('') + for (let j = 0; j < bodyArr.length; j++) { + bodySum += (parseInt(bodyArr[j], 10) * posWeight[18 - j]) + } + + // 得出校验码 + let checkBit = 12 - (bodySum % 11) + if (checkBit === 10) { + checkBit = 'X' + } else if (checkBit > 10) { + checkBit = checkBit % 11 + } + checkBit = (typeof checkBit === 'number' ? checkBit.toString() + : checkBit) + + // 检查校验码 + if (checkBit !== code.checkBit) { + this.cache[id].valid = false + return false + } else { + this.cache[id].valid = true + return true + } + }, + // 获取年龄 + getAgeForIdCard: function (idStr) { + let len = idStr.length // 身份证编码长度 + if (len < 15) { + return -1 + } else { // 身份证编码大于15位 + if ((len !== 15) && (len !== 18)) { // 判断编码位数等于15或18 + return -1 + } else { + let date1 = new Date() // 取得当前日期 + let year1 = date1.getFullYear() // 取得当前年份 + let month1 = date1.getMonth() // 取得当前月份 + if (len === 15) { // 15位身份证 + if (month1 > parseInt(idStr.substr(8, 2))) { // 判断当前月分与编码中的月份大小 + return year1 - ('19' + idStr.substr(6, 2)) + } else { + return year1 - ('19' + idStr.substr(6, 2)) - 1 + } + } else if (len === 18) { // 18位身份证 + if (month1 > parseInt(idStr.substr(10, 2))) { // 判断当前月分与编码中的月份大小 + return year1 - idStr.substr(6, 4) + } else { + return year1 - idStr.substr(6, 4) - 1 + } + } + } + } + }, + // 获取性别 + getSexForIdCard: function (idStr) { + let len = idStr.length // 身份证编码长度 + if (len < 15) { + return -1 + } else { // 身份证编码大于15位 + if ((len !== 15) && (len !== 18)) { // 判断编码位数等于15或18 + return -1 + } else { + if (len === 15) { // 15位身份证 + return (parseInt(idStr.substring(13, 14)) % 2 === 0) ? 0 : 1 + } else if (len === 18) { // 18位身份证 + return (parseInt(idStr.substring(16, 17)) % 2 === 0) ? 0 : 1 + } + } + } + }, + // 分析详细信息 + getInfo: function (id) { + let GB2260 = this.GB2260 || null + // 号码必须有效 + if (this.isValid(id) === false) { + return false + } + // TODO 复用此部分 + let code = util.checkArg(id) + + // 查询cache + // 到此时通过isValid已经有了cache记录 + if (typeof this.cache[id].info !== 'undefined') { + return this.cache[id].info + } + + let addr = code.body.slice(0, 6) + let birth = (code.type === 18 ? code.body.slice(6, 14) : code.body + .slice(6, 12)) + let order = code.body.slice(-3) + + let info = {} + info.addrCode = addr + if (GB2260 !== null) { + info.addr = util.getAddrInfo(addr, GB2260) + } + info.birth = (code.type === 18 ? (([birth.slice(0, 4), + birth.slice(4, 6), birth.slice(-2)]).join('-')) : (( + '19' + birth.slice(0, 2), birth.slice(2, 4), + birth.slice(-2))).join('-')) + info.sex = (order % 2 === 0 ? 0 : 1) + info.length = code.type + if (code.type === 18) { + info.checkBit = code.checkBit + } + + // 记录cache + this.cache[id].info = info + + return info + }, + // 仿造一个号 + makeID: function (isFifteen) { + let GB2260 = this.GB2260 || null + + // 地址码 + let addr = null + if (GB2260 !== null) { + let loopCnt = 0 + while (addr === null) { + // 防止死循环 + if (loopCnt > 10) { + addr = 110101 + break + } + let prov = util.str_pad(util.rand(50), 2, '0') + let city = util.str_pad(util.rand(20), 2, '0') + let area = util.str_pad(util.rand(20), 2, '0') + let addrTest = [prov, city, area].join('') + if (GB2260[addrTest]) { + addr = addrTest + break + } + } + } else { + addr = 110101 + } + + // 出生年 + let yr = util.str_pad(util.rand(99, 50), 2, '0') + let mo = util.str_pad(util.rand(12, 1), 2, '0') + let da = util.str_pad(util.rand(28, 1), 2, '0') + if (isFifteen) { + return addr + yr + mo + da + util.str_pad(util.rand(999, 1), 3, '1') + } + + yr = '19' + yr + let body = addr + yr + mo + da + util.str_pad(util.rand(999, 1), 3, '1') + + // 位置加权 + let posWeight = [] + for (let i = 18; i > 1; i--) { + let wei = util.weight(i) + posWeight[i] = wei + } + + // 累加body部分与位置加权的积 + let bodySum = 0 + let bodyArr = body.split('') + for (let j = 0; j < bodyArr.length; j++) { + bodySum += (parseInt(bodyArr[j], 10) * posWeight[18 - j]) + } + + // 得出校验码 + let checkBit = 12 - (bodySum % 11) + if (checkBit === 10) { + checkBit = 'X' + } else if (checkBit > 10) { + checkBit = checkBit % 11 + } + checkBit = (typeof checkBit === 'number' ? checkBit.toString() + : checkBit) + + return (body + checkBit) + } + + }// _IDValidator + GB2260 = GB2260 === null ? '' : GB2260 + return new _IDValidator(GB2260) +} + +export default new IDValidator(); diff --git a/src/tool/bankCardData.js b/src/tool/bankCardData.js new file mode 100644 index 0000000..4e00e81 --- /dev/null +++ b/src/tool/bankCardData.js @@ -0,0 +1,355 @@ +const ABC = '农业银行'; +const ICBC = '工商银行'; +const CIB = '兴业银行'; +const CEB = '光大银行'; +const GDB = '广发银行'; +const CBC = '建设银行'; +const CDB = '成都银行'; + +let bankCardInfo = []; +// 农业银行 +bankCardInfo['103'] = ABC; +bankCardInfo['623206'] = ABC; +bankCardInfo['621671'] = ABC; +bankCardInfo['620059'] = ABC; +bankCardInfo['621282'] = ABC; +bankCardInfo['621336'] = ABC; +bankCardInfo['621619'] = ABC; +bankCardInfo['622821'] = ABC; +bankCardInfo['622822'] = ABC; +bankCardInfo['622823'] = ABC; +bankCardInfo['622824'] = ABC; +bankCardInfo['622825'] = ABC; +bankCardInfo['622826'] = ABC; +bankCardInfo['622827'] = ABC; +bankCardInfo['622828'] = ABC; +bankCardInfo['622840'] = ABC; +bankCardInfo['622841'] = ABC; +bankCardInfo['622843'] = ABC; +bankCardInfo['622844'] = ABC; +bankCardInfo['622845'] = ABC; +bankCardInfo['622846'] = ABC; +bankCardInfo['622847'] = ABC; +bankCardInfo['622848'] = ABC; +bankCardInfo['622849'] = ABC; +bankCardInfo['623018'] = ABC; +bankCardInfo['95595'] = ABC; +bankCardInfo['95595'] = ABC; +bankCardInfo['95596'] = ABC; +bankCardInfo['95597'] = ABC; +bankCardInfo['95598'] = ABC; +bankCardInfo['95599'] = ABC; +bankCardInfo['623052'] = ABC; +bankCardInfo['623050'] = ABC; +bankCardInfo['623053'] = ABC; +bankCardInfo['623056'] = ABC; +bankCardInfo['620501'] = ABC; +// 工商银行 +bankCardInfo['620200'] = ICBC; +bankCardInfo['620302'] = ICBC; +bankCardInfo['620402'] = ICBC; +bankCardInfo['620403'] = ICBC; +bankCardInfo['620404'] = ICBC; +bankCardInfo['620406'] = ICBC; +bankCardInfo['620407'] = ICBC; +bankCardInfo['620409'] = ICBC; +bankCardInfo['620410'] = ICBC; +bankCardInfo['620411'] = ICBC; +bankCardInfo['620412'] = ICBC; +bankCardInfo['620502'] = ICBC; +bankCardInfo['620503'] = ICBC; +bankCardInfo['620405'] = ICBC; +bankCardInfo['620408'] = ICBC; +bankCardInfo['620512'] = ICBC; +bankCardInfo['620602'] = ICBC; +bankCardInfo['620604'] = ICBC; +bankCardInfo['620607'] = ICBC; +bankCardInfo['620611'] = ICBC; +bankCardInfo['620612'] = ICBC; +bankCardInfo['620704'] = ICBC; +bankCardInfo['620706'] = ICBC; +bankCardInfo['620707'] = ICBC; +bankCardInfo['620708'] = ICBC; +bankCardInfo['620709'] = ICBC; +bankCardInfo['620710'] = ICBC; +bankCardInfo['620609'] = ICBC; +bankCardInfo['620712'] = ICBC; +bankCardInfo['620713'] = ICBC; +bankCardInfo['620714'] = ICBC; +bankCardInfo['620802'] = ICBC; +bankCardInfo['620711'] = ICBC; +bankCardInfo['620904'] = ICBC; +bankCardInfo['620905'] = ICBC; +bankCardInfo['621001'] = ICBC; +bankCardInfo['620902'] = ICBC; +bankCardInfo['621103'] = ICBC; +bankCardInfo['621105'] = ICBC; +bankCardInfo['621106'] = ICBC; +bankCardInfo['621107'] = ICBC; +bankCardInfo['621102'] = ICBC; +bankCardInfo['621203'] = ICBC; +bankCardInfo['621204'] = ICBC; +bankCardInfo['621205'] = ICBC; +bankCardInfo['621206'] = ICBC; +bankCardInfo['621207'] = ICBC; +bankCardInfo['621208'] = ICBC; +bankCardInfo['621209'] = ICBC; +bankCardInfo['621210'] = ICBC; +bankCardInfo['621302'] = ICBC; +bankCardInfo['621303'] = ICBC; +bankCardInfo['621202'] = ICBC; +bankCardInfo['621305'] = ICBC; +bankCardInfo['621306'] = ICBC; +bankCardInfo['621307'] = ICBC; +bankCardInfo['621309'] = ICBC; +bankCardInfo['621311'] = ICBC; +bankCardInfo['621313'] = ICBC; +bankCardInfo['621211'] = ICBC; +bankCardInfo['621315'] = ICBC; +bankCardInfo['621304'] = ICBC; +bankCardInfo['621402'] = ICBC; +bankCardInfo['621404'] = ICBC; +bankCardInfo['621405'] = ICBC; +bankCardInfo['621406'] = ICBC; +bankCardInfo['621407'] = ICBC; +bankCardInfo['621408'] = ICBC; +bankCardInfo['621409'] = ICBC; +bankCardInfo['621410'] = ICBC; +bankCardInfo['621502'] = ICBC; +bankCardInfo['621317'] = ICBC; +bankCardInfo['621511'] = ICBC; +bankCardInfo['621602'] = ICBC; +bankCardInfo['621603'] = ICBC; +bankCardInfo['621604'] = ICBC; +bankCardInfo['621605'] = ICBC; +bankCardInfo['621608'] = ICBC; +bankCardInfo['621609'] = ICBC; +bankCardInfo['621610'] = ICBC; +bankCardInfo['621611'] = ICBC; +bankCardInfo['621612'] = ICBC; +bankCardInfo['621613'] = ICBC; +bankCardInfo['621614'] = ICBC; +bankCardInfo['621615'] = ICBC; +bankCardInfo['621616'] = ICBC; +bankCardInfo['621617'] = ICBC; +bankCardInfo['621607'] = ICBC; +bankCardInfo['621606'] = ICBC; +bankCardInfo['621804'] = ICBC; +bankCardInfo['621807'] = ICBC; +bankCardInfo['621813'] = ICBC; +bankCardInfo['621814'] = ICBC; +bankCardInfo['621817'] = ICBC; +bankCardInfo['621901'] = ICBC; +bankCardInfo['621904'] = ICBC; +bankCardInfo['621905'] = ICBC; +bankCardInfo['621906'] = ICBC; +bankCardInfo['621907'] = ICBC; +bankCardInfo['621908'] = ICBC; +bankCardInfo['621909'] = ICBC; +bankCardInfo['621910'] = ICBC; +bankCardInfo['621911'] = ICBC; +bankCardInfo['621912'] = ICBC; +bankCardInfo['621913'] = ICBC; +bankCardInfo['621915'] = ICBC; +bankCardInfo['622002'] = ICBC; +bankCardInfo['621903'] = ICBC; +bankCardInfo['622004'] = ICBC; +bankCardInfo['622005'] = ICBC; +bankCardInfo['622006'] = ICBC; +bankCardInfo['622007'] = ICBC; +bankCardInfo['622008'] = ICBC; +bankCardInfo['622010'] = ICBC; +bankCardInfo['622011'] = ICBC; +bankCardInfo['622012'] = ICBC; +bankCardInfo['621914'] = ICBC; +bankCardInfo['622015'] = ICBC; +bankCardInfo['622016'] = ICBC; +bankCardInfo['622003'] = ICBC; +bankCardInfo['622018'] = ICBC; +bankCardInfo['622019'] = ICBC; +bankCardInfo['622020'] = ICBC; +bankCardInfo['622102'] = ICBC; +bankCardInfo['622103'] = ICBC; +bankCardInfo['622104'] = ICBC; +bankCardInfo['622105'] = ICBC; +bankCardInfo['622013'] = ICBC; +bankCardInfo['622111'] = ICBC; +bankCardInfo['622114'] = ICBC; +bankCardInfo['622017'] = ICBC; +bankCardInfo['622110'] = ICBC; +bankCardInfo['622303'] = ICBC; +bankCardInfo['622304'] = ICBC; +bankCardInfo['622305'] = ICBC; +bankCardInfo['622306'] = ICBC; +bankCardInfo['622307'] = ICBC; +bankCardInfo['622308'] = ICBC; +bankCardInfo['622309'] = ICBC; +bankCardInfo['622315'] = ICBC; +bankCardInfo['622317'] = ICBC; +bankCardInfo['622302'] = ICBC; +bankCardInfo['622402'] = ICBC; +bankCardInfo['622403'] = ICBC; +bankCardInfo['622404'] = ICBC; +bankCardInfo['622313'] = ICBC; +bankCardInfo['622504'] = ICBC; +bankCardInfo['622505'] = ICBC; +bankCardInfo['622509'] = ICBC; +bankCardInfo['622513'] = ICBC; +bankCardInfo['622517'] = ICBC; +bankCardInfo['622502'] = ICBC; +bankCardInfo['622604'] = ICBC; +bankCardInfo['622605'] = ICBC; +bankCardInfo['622606'] = ICBC; +bankCardInfo['622510'] = ICBC; +bankCardInfo['622703'] = ICBC; +bankCardInfo['622715'] = ICBC; +bankCardInfo['622806'] = ICBC; +bankCardInfo['622902'] = ICBC; +bankCardInfo['622903'] = ICBC; +bankCardInfo['622706'] = ICBC; +bankCardInfo['623002'] = ICBC; +bankCardInfo['623006'] = ICBC; +bankCardInfo['623008'] = ICBC; +bankCardInfo['623011'] = ICBC; +bankCardInfo['623012'] = ICBC; +bankCardInfo['622904'] = ICBC; +bankCardInfo['623015'] = ICBC; +bankCardInfo['623100'] = ICBC; +bankCardInfo['623202'] = ICBC; +bankCardInfo['623301'] = ICBC; +bankCardInfo['623400'] = ICBC; +bankCardInfo['623500'] = ICBC; +bankCardInfo['623602'] = ICBC; +bankCardInfo['623803'] = ICBC; +bankCardInfo['623901'] = ICBC; +bankCardInfo['623014'] = ICBC; +bankCardInfo['624100'] = ICBC; +bankCardInfo['624200'] = ICBC; +bankCardInfo['624301'] = ICBC; +bankCardInfo['624402'] = ICBC; +bankCardInfo['623700'] = ICBC; +bankCardInfo['624000'] = ICBC; +bankCardInfo['9558'] = ICBC; +bankCardInfo['900000'] = ICBC; +bankCardInfo['621558'] = ICBC; +bankCardInfo['621559'] = ICBC; +bankCardInfo['621722'] = ICBC; +bankCardInfo['621723'] = ICBC; +bankCardInfo['621226'] = ICBC; +bankCardInfo['402791'] = ICBC; +bankCardInfo['427028'] = ICBC; +bankCardInfo['427038'] = ICBC; +bankCardInfo['548259'] = ICBC; +bankCardInfo['620516'] = ICBC; +bankCardInfo['621721'] = ICBC; +bankCardInfo['900010'] = ICBC; +bankCardInfo['621288'] = ICBC; +bankCardInfo['620086'] = ICBC; +bankCardInfo['621670'] = ICBC; +bankCardInfo['623260'] = ICBC; +bankCardInfo['620058'] = ICBC; +bankCardInfo['621225'] = ICBC; +bankCardInfo['621227'] = ICBC; +bankCardInfo['621281'] = ICBC; +bankCardInfo['621618'] = ICBC; +bankCardInfo['622200'] = ICBC; +bankCardInfo['622202'] = ICBC; +bankCardInfo['622203'] = ICBC; +bankCardInfo['622208'] = ICBC; +bankCardInfo['623062'] = ICBC; +bankCardInfo['623271'] = ICBC; +bankCardInfo['623272'] = ICBC; +bankCardInfo['621218'] = ICBC; +bankCardInfo['621475'] = ICBC; +bankCardInfo['621476'] = ICBC; +bankCardInfo['623229'] = ICBC; +// 兴业银行 +bankCardInfo['90592'] = CIB; +bankCardInfo['966666'] = CIB; +bankCardInfo['622909'] = CIB; +bankCardInfo['622908'] = CIB; +bankCardInfo['438588'] = CIB; +bankCardInfo['438589'] = CIB; +// 广大银行 +bankCardInfo['303'] = CEB; +bankCardInfo['622660'] = CEB; +bankCardInfo['622662'] = CEB; +bankCardInfo['622663'] = CEB; +bankCardInfo['622664'] = CEB; +bankCardInfo['622665'] = CEB; +bankCardInfo['622666'] = CEB; +bankCardInfo['622667'] = CEB; +bankCardInfo['622669'] = CEB; +bankCardInfo['622670'] = CEB; +bankCardInfo['622671'] = CEB; +bankCardInfo['622672'] = CEB; +bankCardInfo['622668'] = CEB; +bankCardInfo['622661'] = CEB; +bankCardInfo['622674'] = CEB; +bankCardInfo['90030'] = CEB; +bankCardInfo['622673'] = CEB; +bankCardInfo['620518'] = CEB; +bankCardInfo['621489'] = CEB; +bankCardInfo['621492'] = CEB; +bankCardInfo['620535'] = CEB; +bankCardInfo['623156'] = CEB; +bankCardInfo['621490'] = CEB; +bankCardInfo['621491'] = CEB; +bankCardInfo['620085'] = CEB; +bankCardInfo['623155'] = CEB; +bankCardInfo['623157'] = CEB; +bankCardInfo['623158'] = CEB; +bankCardInfo['623159'] = CEB; +bankCardInfo['623253'] = CEB; +// 广发银行 +bankCardInfo['622568'] = GDB; +bankCardInfo['9111'] = GDB; +bankCardInfo['621462'] = GDB; +bankCardInfo['6858001'] = GDB; +bankCardInfo['6858009'] = GDB; +bankCardInfo['623506'] = GDB; +bankCardInfo['623259'] = GDB; +bankCardInfo['62364873'] = GDB; +// 建设银行 +bankCardInfo['621284'] = CBC; +bankCardInfo['421349'] = CBC; +bankCardInfo['434061'] = CBC; +bankCardInfo['434062'] = CBC; +bankCardInfo['436742'] = CBC; +bankCardInfo['524094'] = CBC; +bankCardInfo['526410'] = CBC; +bankCardInfo['552245'] = CBC; +bankCardInfo['589970'] = CBC; +bankCardInfo['620060'] = CBC; +bankCardInfo['621080'] = CBC; +bankCardInfo['621081'] = CBC; +bankCardInfo['621466'] = CBC; +bankCardInfo['621467'] = CBC; +bankCardInfo['621488'] = CBC; +bankCardInfo['621499'] = CBC; +bankCardInfo['621598'] = CBC; +bankCardInfo['621621'] = CBC; +bankCardInfo['621700'] = CBC; +bankCardInfo['622280'] = CBC; +bankCardInfo['622700'] = CBC; +bankCardInfo['622966'] = CBC; +bankCardInfo['622988'] = CBC; +bankCardInfo['621082'] = CBC; +bankCardInfo['623251'] = CBC; +bankCardInfo['621673'] = CBC; +bankCardInfo['623211'] = CBC; +bankCardInfo['623668'] = CBC; +bankCardInfo['623094'] = CBC; +bankCardInfo['623669'] = CBC; +// 成都银行 +bankCardInfo['621532'] = CDB; +bankCardInfo['621482'] = CDB; +bankCardInfo['622135'] = CDB; +bankCardInfo['622152'] = CDB; +bankCardInfo['622153'] = CDB; +bankCardInfo['622154'] = CDB; +bankCardInfo['622996'] = CDB; +bankCardInfo['622997'] = CDB; +bankCardInfo['940027'] = CDB; + +export default bankCardInfo; diff --git a/src/tool/channel.js b/src/tool/channel.js new file mode 100644 index 0000000..1217f6c --- /dev/null +++ b/src/tool/channel.js @@ -0,0 +1,40 @@ +/** + * Created by c.k on 2017/11/10. + * 从url 地址中获取渠道号 + */ +import { querystring } from 'vux' + +export default { + // parse channel + getCnVal() { // 返回渠道号 + let _cnval = ''; + let _clientInfo = window.localStorage.getItem('newClientInfo'); + _clientInfo = JSON.parse(_clientInfo); + // 如果有client信息 + if (_clientInfo && _clientInfo.cn) { + if (this.GetUrlParam('cn')) { + _clientInfo.cn = this.GetUrlParam('cn'); + window.localStorage.setItem('newClientInfo', JSON.stringify(_clientInfo)); + } + return _clientInfo.cn; + } else { + // 第一次h5没有设备信息的话,就从地址栏中获取cn + _clientInfo = {}; + _cnval = this.GetUrlParam('cn'); + _clientInfo.cn = _cnval; + window.localStorage.setItem('newClientInfo', JSON.stringify(_clientInfo)); + return _cnval; + } + }, + GetUrlParam(paraName) { // 从地址栏中获取渠道号 + let _url = window.location.href; + let index = _url.indexOf('?'); + if (index !== -1) { + let queryParams = _url.substr(index+1); + if (querystring.parse(queryParams)[paraName]) { + return querystring.parse(queryParams)[paraName] + } + } + return ''; + } +}; diff --git a/src/tool/date.js b/src/tool/date.js new file mode 100644 index 0000000..2bb6ed4 --- /dev/null +++ b/src/tool/date.js @@ -0,0 +1,66 @@ +/** + * 时间格式化函数,如果没有传递格式就返回时间戳 + * @param date Date 对象 + * @param fmt 格式规范 + * @returns {*} + */ + +export default function(date, fmt) { + if (!date) { + return null; + } + if (typeof date === 'string') { + date = new Date(date.replace(/-/g, '/')); + } + if (typeof date === 'number') { + date = new Date(date); + } + if (fmt === undefined) { + return Number(date); + } else { + var o = { + 'M+': date.getMonth() + 1, + 'D+': date.getDate(), + 'h+': date.getHours() % 12 === 0 ? 12 : date.getHours() % 12, + 'H+': date.getHours(), + 'm+': date.getMinutes(), + 's+': date.getSeconds(), + 'q+': Math.floor((date.getMonth() + 3) / 3), + S: date.getMilliseconds() + }; + var week = { + '0': '\u65e5', + '1': '\u4e00', + '2': '\u4e8c', + '3': '\u4e09', + '4': '\u56db', + '5': '\u4e94', + '6': '\u516d' + }; + if (/(Y+)/.test(fmt)) { + fmt = fmt.replace( + RegExp.$1, + (date.getFullYear() + '').substr(4 - RegExp.$1.length) + ); + } + if (/(E+)/.test(fmt)) { + fmt = fmt.replace( + RegExp.$1, + (RegExp.$1.length > 1 + ? RegExp.$1.length > 2 ? '\u661f\u671f' : '\u5468' + : '') +week[date.getDay() + ''] + ); + } + for (var k in o) { + if (new RegExp('(' + k + ')').test(fmt)) { + fmt = fmt.replace( + RegExp.$1, + RegExp.$1.length === 1 + ? o[k] + : ('00' + o[k]).substr(('' + o[k]).length) + ); + } + } + return fmt; + } +} diff --git a/src/tool/deviceInfo.js b/src/tool/deviceInfo.js new file mode 100644 index 0000000..0fb9874 --- /dev/null +++ b/src/tool/deviceInfo.js @@ -0,0 +1,80 @@ +/** + * Created by c.k on 2017/11/10. + * 获取客户端本地设备信息和渠道编号 + */ + + +export default { + saveDeviceInfo (deviceInfo) { + // 外链默认解析地址里面的chanNo,app时解析原生回传的chanNo + // alert(deviceInfo); + deviceInfo = JSON.parse(deviceInfo) ; + if (deviceInfo && deviceInfo.childChan) { + deviceInfo.isApp = "1"; + } + let configInfo = window.localStorage.getItem('newClientInfo'); + if(configInfo){ + configInfo = JSON.parse(configInfo); + for (let key in deviceInfo) { + configInfo[key] = deviceInfo[key]; + } + configInfo.ostype = '03'; + + window.localStorage.setItem ('newClientInfo', JSON.stringify (configInfo)); + } + deviceInfo = JSON.stringify(deviceInfo); + window.localStorage.setItem('deviceInfo', deviceInfo); + }, + // 获取本地存储的设备信息 + fetchDeviceInfo() { + return window.localStorage.getItem('deviceInfo'); + }, + // 获取设备类型 + getDeviceType() { + let browser = { + versions() { + let u = navigator.userAgent; + return { + trident: u.indexOf('Trident') > -1, // IE内核 + presto: u.indexOf('Presto') > -1, // opera内核 + webKit: u.indexOf('AppleWebKit') > -1, // 苹果、谷歌内核 + gecko: u.indexOf('Gecko') > -1 && u.indexOf('KHTML') === -1, // 火狐内核 + mobile: !!u.match(/AppleWebKit.*Mobile.*/), // 是否为移动终端 + ios: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), // ios终端 + android: u.indexOf('Android') > -1 || u.indexOf('Linux') > -1, // android终端或者uc浏览器 + iPhone: u.indexOf('iPhone') > -1, // 是否为iPhone或者QQHD浏览器 + iPad: u.indexOf('iPad') > -1, // 是否iPad + webApp: u.indexOf('Safari') === -1, // 是否web应该程序,没有头部与底部 + weixin: u.indexOf('MicroMessenger') > -1, // 是否微信 (2015-01-22新增) + qq: u.match(/\sQQ/i) === 'qq' // 是否QQ + } + }, + language: (navigator.browserLanguage || navigator.language).toLowerCase() + }; + var u = navigator.userAgent; + var device =""; //当前设备信息 + if (u.indexOf('Android') > -1 || u.indexOf('Linux') > -1) {//安卓手机 + device = "Android"; + return 'Android'; + } else if (u.indexOf('iPhone') > -1) {//苹果手机 + device = "IOS"; + return 'IOS'; + } else if (u.indexOf('Windows Phone') > -1) {//winphone手机 + device = "WindowsPhone"; + return 'WindowsPhone'; + }else if(u.indexOf('MicroMessenger') > -1){ + device = "weixin"; + return 'weixin'; + } +// let type = browser.versions(); +// if (type.android) { +// return 'Android' +// } else if (type.ios || type.iPhone || type.iPad) { +// return 'IOS' +// } else if (type.weixin) { +// return 'weixin' +// } else { +// return 'other' +// } + } +} diff --git a/src/tool/fToast.js b/src/tool/fToast.js new file mode 100644 index 0000000..7576a36 --- /dev/null +++ b/src/tool/fToast.js @@ -0,0 +1,48 @@ +/** + * Created by c.y on 2018/3/16. + * 组件的命名 项目名(F---filean) + 组件的描述(区别与框架的组件) + * vux的全局弹窗toast的重新封装,主要用于后台返回错误状态的码的提示 + * 以及input输入框不合要求的,弹出的提示。 + */ + +import Vue from 'vue'; +import VueRouter from 'vue-router'; +import {ToastPlugin,AlertPlugin} from 'vux'; + +Vue.use(ToastPlugin); +Vue.use(VueRouter); +Vue.use(AlertPlugin); + +export default { + // toast提示 + toast(text) { + Vue.$vux.toast.show({ + width: '80%', + type: 'text', + time: 2000, + position: 'middle', + text: text + }); + }, + // 对话框提示 + alert(text,_this,callback) { + Vue.$vux.alert.show({ + title: '', + content: text, + onShow() { + // 弹出逻辑 + console.log('show'); + }, + onHide() { + Vue.$vux.alert.hide(); + if(callback){ + _this.$router.push({path: '/login'}); + callback(); + }else{ + _this.$router.push({path: '/f-login'}); + } + + } + }); + } +} diff --git a/src/tool/initData.js b/src/tool/initData.js new file mode 100644 index 0000000..d31d7f5 --- /dev/null +++ b/src/tool/initData.js @@ -0,0 +1,31 @@ +/** + * TANGiMING 2018-3-21 + * 用于单文件组件在被重新激活或被打开时,遗留数据可能会造成污染的问题; + * 可以将data中指定的数据进行初始化; + * 尽量在单文件组件被冻结或被销毁时使用 + */ +const initData = function(arr, self) { + let arrLength = arr.length; + for (let i = 0; i < arrLength; i++) { + let item = arr[i]; + if (typeof self[item] === 'object' && !isNaN(self[item].length)) { + self[item] = []; + continue; + } + switch (typeof self[item]) { + case 'string': + self[item] = ''; + break; + case 'number': + self[item] = null; + break; + case 'object': + self[item] = {}; + break; + case 'undefined': + console.error(`${item}不是正确的data属性!`); + break; + } + } +}; +export default initData; diff --git a/src/tool/jsBridge.js b/src/tool/jsBridge.js new file mode 100644 index 0000000..5c73103 --- /dev/null +++ b/src/tool/jsBridge.js @@ -0,0 +1,212 @@ +/** + * Created by c.k on 2017/11/20. + * global WebViewJavascriptBridge + * */ +import deviceInfo from './deviceInfo'; +// import store from '../store' +// import statisticHelper from './statisticalHelper' +// import channelHelper from './channel' +const setupWebViewJavascriptBridge = callback => { + // 注册事件监听 + if (window.WebViewJavascriptBridge) { + return callback(WebViewJavascriptBridge); + } else { + document.addEventListener('WebViewJavascriptBridgeReady', () => { + callback(WebViewJavascriptBridge); + }, false); + } + + if (window.WVJBCallbacks) { + return window.WVJBCallbacks.push(callback); + } + window.WVJBCallbacks = [callback]; + let WVJBIframe = document.createElement('iframe'); + WVJBIframe.style.display = 'none'; + WVJBIframe.src = 'wvjbscheme://__BRIDGE_LOADED__'; + document.documentElement.appendChild(WVJBIframe); + setTimeout(function () { + document.documentElement.removeChild(WVJBIframe); + }, 0); +}; + +export default { + showLog(log) { + setupWebViewJavascriptBridge(function (bridge) { + bridge.callHandler('showLog', log, function responseCallback(responseData) { + }); + }); + }, + // 获取原生设备信息 + fetchDeviceInfo() { + if (deviceInfo.getDeviceType() === 'Android') { + if (window.android && window.android.fetchDeviceInfo) { + let responseData = window.android.fetchDeviceInfo(); + deviceInfo.saveDeviceInfo(responseData); + } + } else { + setupWebViewJavascriptBridge(function (bridge) { + bridge.callHandler('kJSFetchDeviceInfo', function (responseData) { + deviceInfo.saveDeviceInfo(responseData); + }); + }); + } + }, + // 回传页面链接至原生 + sendApplyPageUrlToNative() { + setupWebViewJavascriptBridge(function (bridge) { + bridge.callHandler('kJSFetchApplyURL', window.location.href, function responseCallback(responseData) { + }); + }); + }, + // 回传页面信息至原生 + sendApplyPageInfoToNative(info) { + setupWebViewJavascriptBridge(function (bridge) { + bridge.callHandler('kJSFetchProductInfo', info, function responseCallback(responseData) { + }); + }); + }, + // 每次启动app时清除之前的登录状态 + logoutWhenAppLaunch() { + // for android + // window.forceLogoutWhenAppLaunch = function () { + // store.dispatch('logout') + // // 首次进入app,默认统计第一个按钮点击事件 + // statisticHelper.tabbarEventStatistical('loansupermarket'); + // } + // for iOS + // setupWebViewJavascriptBridge(function (bridge) { + // bridge.registerHandler('kJSAppLaunch', function (data) { + // store.dispatch('logout') + // // 首次进入app,默认统计第一个按钮点击事件 + // statisticHelper.tabbarEventStatistical('loansupermarket'); + // }) + // }) + // if (!channelHelper.isApp()) { + // statisticHelper.tabbarEventStatistical('loansupermarket'); + // } + }, + // 隐藏原生启动页 + hideNativeLaunchImage() { + // for android + if (window.appNative && window.appNative.hideLaunchView) { + window.appNative.hideLaunchView(); + } + // for iOS + setupWebViewJavascriptBridge(function (bridge) { + bridge.callHandler('kJSHideLaunchImage', function responseCallback(responseData) { + }); + }); + }, + // 隐藏显示原生header + showAndHideNativeHeader(show) { + // for android + if (window.native && window.native.showHeader) { + window.native.showHeader(show); + } + // for iOS + setupWebViewJavascriptBridge(function (bridge) { + bridge.callHandler('kJSShowAndHideNativeHeader', show, function responseCallback(responseData) { + }); + }); + }, + // 打开微信 + openWX() { + // for android + if (window.android && window.android.openWX) { + window.android.openWX(); + } + // for iOS + // setupWebViewJavascriptBridge(function (bridge) { + // bridge.callHandler('kJSOpenWeixin', function responseCallback(responseData) { + // }) + // }) + }, + // 打开QQ + openQQ() { + // for android + if (window.android && window.android.openQQApplication) { + window.android.openQQApplication(); + } + // for iOS + // setupWebViewJavascriptBridge(function (bridge) { + // bridge.callHandler('kJSOpenWeixin', function responseCallback(responseData) { + // }) + // }) + }, + //打开通讯录 + openConect(callback){ + console.log('js打开通讯录'); + //for iOS + setupWebViewJavascriptBridge(function (bridge) { + + bridge.callHandler('kJSOpenConect', function responseCallback(responseData) { + + + }); + + bridge.registerHandler('sendContectInfo', function (data, responseData) { + + + if (callback) { + callback(data); + } + + + }); + + }); + + }, + //获取高德地图定位位置信息 + getAMMapLoactionMsg(callback){ + + console.log('js获取位置信息'); + setupWebViewJavascriptBridge(function (bridge) { + + bridge.callHandler('kJSGetAMMapLoactionInfo', function responseCallback(responseData) { + + // alert(responseData.detail); + + if (callback) { + callback(responseData); + } + + }); + + // bridge.registerHandler('sendAMMapLoactionInfo',function (data,responseData) { + + // // alert(data.address); + + // if(callback){ + // callback(data); + // } + + + // }) + + }); + + }, + //调用ios相机 + openCamera(callback){ + setupWebViewJavascriptBridge(function (bridge) { + bridge.callHandler('kJSGetCameraInfo', function responseCallback(responseData) { + if (callback) { + callback(responseData); + } + }); + }); + + }, + openAlbum(callback){ + setupWebViewJavascriptBridge(function (bridge) { + bridge.callHandler('kJSGetAlbumInfo', function responseCallback(responseData) { + if (callback) { + callback(responseData); + } + + }); + }); + }, + +}; diff --git a/src/tool/judgmentUrl.js b/src/tool/judgmentUrl.js new file mode 100644 index 0000000..77a2f9c --- /dev/null +++ b/src/tool/judgmentUrl.js @@ -0,0 +1,23 @@ +/** + * 作者:c.y + * 文件说明: 微信分享的额外添加参数的判断 + * created by c.k on 2018/2/27 + * + */ + +export default { + // 判断地址栏出现微信自己加的参数问题 + getUrlQuestionMark () { + let url = window.location.href; + let matchResult = url.match(/\?/g); + // 如果地址栏中,出现了两个问号的话,那么是微信在分享添加了参数 + // 如果地址栏中,出现了form=,那么就是微信分享添加的参数 + // 需要注意,不要在我们的路由地址上添加,from=这个参数,这个是为了区分微信 + return (matchResult ? matchResult.length >= 2 : false) || (/from=/.test(url)); + }, + // 把地址栏的中微信追加的参数去掉,返回我们自己项目的地址 + getRightProjectUrl () { + let location = window.location; + return location.origin + location.pathname + location.hash; + } +}; diff --git a/src/tool/loginSign.js b/src/tool/loginSign.js new file mode 100644 index 0000000..071c8ce --- /dev/null +++ b/src/tool/loginSign.js @@ -0,0 +1,62 @@ +/** + * Created by 陈伟 + * 2017/11/21. + * 登录所有传参数接口验签 + */ +import validator from './validator'; +import {md5} from 'vux'; + +export default { + signForFormDataOrUrl(datas, isUrl, loginSessionID) { + if (validator.checkValEmpty(loginSessionID)) { + return datas; + } + let params = {}; + if (datas === null || datas === '') { + params.jttechSign = md5(loginSessionID); + return params; + } + let keySort = []; + params = datas; + if (params) { + for (let key in params) { + keySort[keySort.length] = key; + } + } + if (isUrl) { + keySort.sort(); + } + // 普通参数的值(非空、非空字符串、非数组) + let ordinaryParamVal = ''; + for (let index in keySort) { + for (let param in params) { + if (param === keySort[index] && params[param] !== null && params[param] !== undefined && !Array.isArray(params[param])) { + if (params[param] instanceof String) { + if (params[param].toString().replace(/(^\s*)|(\s*$)/g, '') !== '') { + ordinaryParamVal += params[param]; + } + } else { + if (params[param] instanceof Object) { + let _tempkeySort = []; + let _ItemsParam = params[param]; + for (let _tempkey in _ItemsParam) { + _tempkeySort[_tempkeySort.length] = _tempkey; + } + _tempkeySort.sort(); + ordinaryParamVal += JSON.stringify(_tempkeySort); + } else { + ordinaryParamVal += params[param]; + } + } + } + } + } + if (!validator.checkValEmpty(loginSessionID)) { +// console.log('============'); +// console.log(ordinaryParamVal); + ordinaryParamVal = md5(ordinaryParamVal + loginSessionID); + } + params.jttechSign = ordinaryParamVal; + return params; + } +} diff --git a/src/tool/pageBackByAndroid.js b/src/tool/pageBackByAndroid.js new file mode 100644 index 0000000..fb4c36a --- /dev/null +++ b/src/tool/pageBackByAndroid.js @@ -0,0 +1,20 @@ +/** + * android 返回按钮统一调度的方法, + * 项目中有两个地方需要修改一个是这个地方,还有有个地方是 index.html 文件 + */ +export default { + androidBackBtn(){ + window.backPageByAndroid =function (obj) { + let _show = window.location.hash; + if(_show == '#/f-loan/f-credit' || _show == '#/f-loan/f-bank' || _show == '#/f-loan/f-speed' || _show == '#/f-news' || _show == '#/f-mine'){ + // mian + window.location.href = window.location.origin + window.location.pathname + '#/f-main'; + }else{ + window.history.go(-1); + } + } + console.log('load success ============='); + } +} + + diff --git a/src/tool/productRequestJump.js b/src/tool/productRequestJump.js new file mode 100644 index 0000000..a698b17 --- /dev/null +++ b/src/tool/productRequestJump.js @@ -0,0 +1,48 @@ +/** + * Created by cy + * 2017/11/27. + * 产品申请时跳转链接 + */ +/** + * 产品详情的跳转与sessionStorage的设置 + * @param response + * @param context + * @param productOrglink + */ +import {querystring} from 'vux'; + +function jumpAndSetSession(response, context, productOrglink) { + window.sessionStorage.setItem('newProductDetailPage', productOrglink); + // 加上这个参数,是为了传递个后台,每一个收入贷接口都要加上这个prodId这个参数 + context.$router.push({ + path: response.body, + query: {prodId: context.$route.query.id} + }); +} + +/** + * 根据产品的类型判断,进行页面的跳转 + * @param { Object } response 后台返回的response + * @param { Object } context 上下文对象(即this对象) + * @param { String } productOrglink 当前页面的全路由 + */ +function productJump(response, context, productOrglink) { + let url = decodeURIComponent(response.body); + // 如果是来自于收入贷,那么此时的非标准产品 + if (response.body.indexOf('/incomeLoan') !== -1) { + jumpAndSetSession(response, context, productOrglink) + } else if (response.body.split('/')[1] == 'bnd') { + jumpAndSetSession(response, context, productOrglink) + } else if (url.indexOf('/f-raindrops') !== -1) { + let params = querystring.parse(url.split('?')[1]); + context.$router.push({ + path: '/f-raindrops', + query: params + }) + } else { + // 这个是跳转第三方链接的产品 + window.location.href = decodeURIComponent(response.body); + } +} + +export default productJump; diff --git a/src/tool/validator.js b/src/tool/validator.js new file mode 100644 index 0000000..b699598 --- /dev/null +++ b/src/tool/validator.js @@ -0,0 +1,178 @@ +/** + * TANGIMING 2018-3-9 + * 这是一个用于存放正则表达式和一些验证方法的插件 + * 除了存放了目前常用的正则之外,还根据这些正则封装了对应的验证方法 + */ +export default { + // 金额格式化 + formatMoney(str = 0) { + str = str + ''; + let newStr = ''; + let count = 0; + if (str.indexOf('.') === -1) { + for (let i = str.length - 1; i >= 0; i--) { + if (count % 3 === 0 && count !== 0) { + newStr = str.charAt(i) + ',' + newStr; + } else { + newStr = str.charAt(i) + newStr; + } + count++; + } + str = newStr + '.00'; // 自动补小数点后两位 + return str; + } else { + for (let i = str.indexOf('.') - 1; i >= 0; i--) { + if (count % 3 === 0 && count !== 0) { + newStr = str.charAt(i) + ',' + newStr; + } else { + newStr = str.charAt(i) + newStr; // 逐个字符相接起来 + } + count++; + } + str = newStr + (str + '00').substr((str + '00').indexOf('.'), 3); + return str; + } + }, + // 身份证 中间用* 显示 + cardIDHide(cardid) { + if (cardid) { + return cardid.replace(/^(.{6})(?:\d+)(.{4})$/, '$1****$2'); + } else { + return ''; + } + }, + //手机号,中间四位*显示 + formatPhone(phone) { + return phone.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2') + }, + // 电话号码格式 + checkPhone(phone) { + let reg = /^1([358][0-9]|4[579]|66|7[0135678]|9[89])[0-9]{8}$/; + return reg.test(phone); + }, + checkEmail(email) { + // 验证邮箱格式 + let reg = /^[a-z\d]+(\.[a-z\d]+)*@([\da-z](-[\da-z])?)+(\.{1,2}[a-z]+)+$/; + return reg.test(email); + }, + checkVerifyCode(code) { + // 验证验证码格式 + let reg = /^\d{6}$/; + return reg.test(code); + }, + checkDynamicCode(code) { + // 验证邀请码格式 + let reg = /^[A-Za-z0-9]{4}$/; + return reg.test(code); + }, + // password check + checkPassword(password) { + // 验证密码格式 + let reg = /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,16}$/; + return reg.test(password); + }, + // name check + checkName(name) { + // 验证用户名格式 + let reg = /^[\u4E00-\u9FA5]{2,10}$/; + return reg.test(name); + }, + // 账户名称的正则表达式 + checkUsername(name) { + let reg = /^[\u4e00-\u9fa50-9a-zA-Z]{4,16}$/; + return reg.test(name); + }, + // 统一验证 + checkCommonField(name) { + let reg = /^[\u4e00-\u9fa50-9a-zA-Z]{4,30}$/; + return reg.test(name); + }, + // idCard check + checkIDCard(idCard) { + // 验证身份证格式 + if (idCard.length === 18) { + let reg = /^\d{17}[\d|X|x]$/; + return reg.test(idCard); + } else if (idCard.length === 15) { + let reg = /^\d{15}$/; + return reg.test(idCard); + } else { + return false; + } + }, + checkValEmpty(str) { + // 验证是否为空 + if ( + str === undefined || + str === null || + str.length <= 0 || + str === 'undefined' + ) { + return true; + } else { + return false; + } + }, + // 验证佣金输入金额 + checkCommission(commission) { + // 小于100且后面可以带4个小数点 + let reg = /^100$|^(\d|[1-9]\d)(\.\d{1,4})*$/; + //一亿以内,保留四位小数 + // /^([1-9]\d{0,7}|0)(\.\d{1,4})?$/ + // 如果通过的话,那么判断小数点的前几位数字 + return reg.test(commission); + }, + // 验证渠道编号是否符合规则--4-8位以内数字+字母,区分大小写 + checkChannelNo(channelNo) { + let reg = /^[\w\d]{4,8}$/; + return reg.test(channelNo); + }, + //验证是否包含空格 + checkSpace(val) { + let reg = /^\s+$/; + if (reg.test(val)) { + return true; + } else { + return false; + } + }, + //将发送请求中的参数格式化,如果为空则转为null + formatReq(obj) { + for (let i in obj) { + let item = obj[i]; + if (item === null) continue; + if ( + item === undefined || + item === '' || + item === 'undefined' || + item.length <= 0 || + JSON.stringify(item) == '{}' + ) { + obj[i] = null; + } + } + return obj; + }, + // 只能输入数字与小数点正则判断 + checkIntegerAndDot(checkVal) { + let dotReg = /\./g; + let IntegerReg = /^[1-9]{1}\d{0,5}$/; + // 如果输入了多个点,直接不符合要求 + if (checkVal.match(dotReg) && checkVal.match(dotReg).length > 1) { + return false; + // 输入了一个点 + } else if (checkVal.match(dotReg) && checkVal.match(dotReg).length === 1) { + // 开头与结尾都不能出现点,点的前面与后面必须是数字 + let strLen = checkVal.length; + if (checkVal.indexOf('.') === 0 || checkVal.indexOf('.') === (strLen - 1)) { + return false; + // 超过个数的限制的话 + } else { + return strLen <= 6; + } + // 没有小数点的话,那么就是全部数字进行匹配 + } else if (!checkVal.match(dotReg)) { + return IntegerReg.test(checkVal); + } + } +}; diff --git a/src/views/bnd/credit/authorization.vue b/src/views/bnd/credit/authorization.vue new file mode 100644 index 0000000..455db17 --- /dev/null +++ b/src/views/bnd/credit/authorization.vue @@ -0,0 +1,437 @@ +<template> + <div class="loan-info-box"> + <x-header slot="header" + style="width:100%;height:46px;background-color: #ec6758" + title="芝麻授权" + :left-options="{backText: '', preventGoBack:true}" + @on-click-back="goBackPage" + ></x-header> + <flow class="progressState"> + <flow-state state="1" title="填写资料" class="currentStep porcolor"></flow-state> + <flow-line is-done></flow-line> + <flow-state state="2" title="绑定银行卡" class="currentStep porcolor"></flow-state> + <flow-line is-done></flow-line> + <flow-state state="3" title="照片上传" class="currentStep porcolor"></flow-state> + <flow-line is-done></flow-line> + <flow-state state="4" title="三方授权" class="currentStep porcolor"></flow-state> + <flow-line></flow-line> + <flow-state state="5" title="提交申请"></flow-state> + </flow> + <div v-if="resultCode===2"> + <div class="success_okandno"> + <div> + <i class="iconfont icon-iconfontdengdai"></i> + </div> + <h2>等待处理</h2> + </div> + <div class="bindingSuccee"> + <p> + 芝麻授权中,预计时间2分钟,您可点击“刷新”查询绑定结果 + </p> + </div> + <div style="height: 20px"></div> + <box gap="0 15px"> + <x-button type="primary" @click.native="Refresh">刷新</x-button> + </box> + <div style="height: 20px"></div> + </div> + <div v-if="resultCode===1"> + <div class="success_okandno"> + <div> + <i class="iconfont icon-roundcheckfill-copy"></i> + </div> + <h2>授权成功</h2> + </div> + <div class="bindingSuccee"> + <p> + 您的芝麻授权已完成,请点击 “下一步” + 进行聚信立授权。 + </p> + </div> + <div style="height: 20px"></div> + <box gap="0 15px"> + <x-button type="primary" @click.native="handleNextStep">下一步</x-button> + </box> + <div style="height: 20px"></div> + </div> + <div v-if="resultCode===0"> + <div class="success_okandno"> + <div> + <i class="iconfont icon-roundclosefill"></i> + </div> + <h2>授权失败</h2> + </div> + <div class="bindingSuccee"> + <p> + 您的芝麻授权失败,请点击 “重新授权” + 重新进行授权。 + </p> + </div> + <div style="height: 20px"></div> + <box gap="0 15px"> + <x-button type="primary" @click.native="failstate">重新进行授权</x-button> + </box> + <div style="height: 20px"></div> + </div> + </div> +</template> + +<script> + import { + Flow, + FlowState, + FlowLine, + XHeader, + Group, + GroupTitle, + Cell, + XInput, + Selector, + XButton, + Box, + Actionsheet + } from 'vux'; + + import FSpace from '../../../components/common/FSpace.vue'; + import SysApi from '../../../api/api' + import statusCodeManage from '../../../api/statusCodeManage' + + export default { + name: 'authorization', + data() { + return { + isLastStep: false, // 是否是最后一步 + activePageItem: 0, // 激活当前页 + pageList: [], // 一共有几页 + resultCode: 2, + }; + }, + + methods: { + //从芝麻授信回来的时候调 + initsubmitSesame() { + let _this = this; + let submit = { + prodId: this.$route.query.prodId, + params: '111', + sign: '111', + }; + // 如果没有参数 就initResult 如果有 submitSesame 成功 -》 initResult ,如果错误 就错误提示 + if (this.$route.query.params && this.$route.query.sign) { + + this.initSubmitSesame(submit, function () { + // 成功 回调 + _this.initResult(); + }, function () { + // 失败回调 错误提示 + + }); + } else { + this.initResult(); + } + + }, + initSubmitSesame(submit, successback, errorback) { + SysApi.submitSesame(submit).then( + res => { + if (successback) { + successback(); + } + }, error => { + if (errorback) { + errorback(); + } + statusCodeManage.showTipOfStatusCode(error) + } + ); + }, + //初始化状态 + initResult() { + let _this = this; + let prodId = { + prodId: this.$route.query.prodId, + resultType: 3, + }; + SysApi.result(prodId).then( + res => { + console.log(res); + _this.resultCode = res.body.resultCode; + }, error => { + statusCodeManage.showTipOfStatusCode(error) + } + ) + }, + + //刷新 + Refresh() { + this.initResult(); + }, + //授权成功 + handleNextStep() { + this.$router.push({path: '/bnd/credit/juxinli', query: {prodId: this.$route.query.prodId,}}); + }, + //授权失败 + failstate() { + this.$router.push({path: '/bnd/credit/sesame', query: {prodId: this.$route.query.prodId,}}); + }, + //返回上一页 + goBackPage() { + // 如果是第一步的话,那么返回到上一个页面 + if (this.activePageItem <= 1) { + this.$router.back(); + // 不是的话,那么显示上一步 + } else { + this.activePageItem--; + this.isLastStep = this.pageList.length === this.activePageItem; + } + }, + // 得到选项列表统一的方法 + getOptionsList(optionList) { + let tmpList = []; + if (optionList instanceof Array) { + optionList.forEach(function (item) { + tmpList.push({ + key: item.code, + value: item.name + }); + }); + } + return tmpList; + }, + + }, + activated: function () { + this.initsubmitSesame() + }, + components: { + Group, + GroupTitle, + Cell, + XInput, + Selector, + XHeader, + XButton, + Box, + Flow, + FlowState, + FlowLine, + Actionsheet, + FSpace + } + }; +</script> +<style lang="less"> + @import "../../../style/mixin.less"; + + .loan-info-box { + background-color: @color-background-default; + .vux-header { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + .vux-header-left { + .left-arrow:before { + border: solid 1px @color-white; + border-width: 2px 0 0 2px; + } + } + } + .progressState div p { + font-size: @font-size-tiny; + } + .weui-wepay-flow__state { + width: 16px; + height: 16px; + top: -1px; + padding-top: 1px; + } + .currentStep .weui-wepay-flow__state { + width: 16px; + height: 16px; + padding-top: 1px; + border: 1px solid @color-primary; + color: @color-primary; + border-radius: 50%; + background-color: @color-white; + } + .weui-input { + height: 28px; + line-height: 28px; + } + .weui-wepay-flow, .weui-wepay-flow-auto { + padding: 10px 40px 30px; + background: @color-white; + } + .weui-wepay-flow__li_done .weui-wepay-flow__state, + .weui-wepay-flow__process { + background-color: @color-primary; + } + } + + .weui-wepay-flow { + background-color: @color-white; + } + + .left-arrow:before { + border-color: @color-white; + } + + .weui-cells__title { + margin: 0 !important; + font-size: 16PX !important; + } + + .weui-input, .weui-cell__bd { + font-size: @font-size-base; + } + + .weui-label { + font-size: @font-size-base; + } + + .personInfo ::-webkit-input-placeholder { /* WebKit browsers */ + color: #bfbfbf; + } + + .personInfo :-moz-placeholder { /* Mozilla Firefox 4 to 18 */ + color: #bfbfbf; + } + + .personInfo ::-moz-placeholder { /* Mozilla Firefox 19+ */ + color: #bfbfbf; + } + + .personInfo :-ms-input-placeholder { /* Internet Explorer 10+ */ + color: #bfbfbf; + } + + .header-space { + height: 46px; + } + + .loan-info-box .weui-cell_select .weui-select { + padding-right: 2.5rem; + direction: rtl; + } + + .loan-info-box .weui-input { + text-align: right; + } + + .loan-info-box .weui-btn_primary { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + } + + .loan-info-box .weui-btn_primary:not(.weui-btn_disabled):active { + color: rgba(255, 255, 255, 0.6); + background-color: rgb(241, 95, 79);; + } + + /*------------------------------*/ + .Code_ls { + padding: 0.25rem 1.25rem; + h4 { + padding-bottom: 2rem; + padding-top: 1rem; + font-size: 1.2rem; + font-weight: normal; + color: @color-text-primary; + } + span { + color: @color-text-third; + display: inline-block; + } + span:last-child { + margin-left: 0.5rem; + } + } + + .vux-no-group-title { + margin-top: 0.77rem !important; + } + + .loan-info-box .currentStep .weui-wepay-flow__state { + background-color: @color-primary; + color: @color-white !important; + line-height: 1rem; + } + + .weui-wepay-flow__li.weui-wepay-flow__li .weui-wepay-flow__state { + width: 1.33333rem; + height: 1.33333rem; + border-radius: 1.58333rem; + color: @color-text-third; + line-height: 1.33333rem; + } + + .loan-info-box .weui-input { + text-align: left; + } + + .porcolor p { + color: @color-primary; + } + + .weui-btn weui-btn_mini weui-btn_primary { + background-color: @color-white !important; + } + + .weui-msg__icon-area i { + color: @color-primary !important; + } + + .bindingSuccee { + text-align: center; + p { + text-align: center; + color: @color-text-third; + font-size: @font-size-medium; + width: 25rem; + margin: 0 auto; + } + + } + + .weui-msg__icon-area { + margin-bottom: -1.2rem !important; + } + + .success_okandno { + width: 6.5rem; + margin: 0 auto; + padding: 3rem 0; + img { + width: 100%; + } + h2 { + font-weight: normal; + font-size: @font-size-primary; + text-align: center; + } + } + + .success_okandno { + div { + text-align: center; + height: 8rem; + } + .icon-roundclosefill { + color: #ff4d53 !important; + } + } + + .iconfont { + font-size: 6rem; + color: #0092f1; + } + + .loan-info-box .weui-wepay-flow, .loan-info-box .weui-wepay-flow-auto { + padding: 0.83333rem 2.33333rem 2.5rem; + } + + .weui-btn:after { + border: none !important; + } + + .weui-btn { + font-size: @font-size-primary !important; + } +</style> diff --git a/src/views/bnd/credit/bankInfo.vue b/src/views/bnd/credit/bankInfo.vue new file mode 100644 index 0000000..49b564b --- /dev/null +++ b/src/views/bnd/credit/bankInfo.vue @@ -0,0 +1,397 @@ +<template> + <div class="loan-info-box"> + <x-header slot="header" + style="width:100%;height:46px;background-color: #ec6758" + title="银行卡绑定" + :left-options="{backText: '', preventGoBack:true}" + @on-click-back="goBackPage" + ></x-header> + <flow class="progressState"> + <flow-state state="1" title="填写资料" class="currentStep porcolor"></flow-state> + <flow-line is-done></flow-line> + <flow-state state="2" title="绑定银行卡" class="currentStep porcolor"></flow-state> + <flow-line></flow-line> + <flow-state state="3" title="照片上传"></flow-state> + <flow-line></flow-line> + <flow-state state="4" title="三方授权"></flow-state> + <flow-line></flow-line> + <flow-state state="5" title="提交申请"></flow-state> + </flow> + <div class="bankInfo_class"> + <group class="personInfo bankstyle" text-align="right"> + <x-input title="银行卡号" + :max="19" + :min="19" + placeholder="请输入银行卡号" + v-model.trim="bankin.bankCardNo" + ></x-input> + <selector + title="开户行" + :options="bankinfo" + placeholder="请选择" + v-model="bankin.bankName" + ></selector> + <!--<cell title="开户行"--> + <!--v-model="bankin.bankName"--> + <!--></cell>--> + <x-input title="预留手机号" + :max="11" + :min="11" + type="tel" + is-type="china-mobile" + placeholder="请输入手机号" + v-model.trim="bankin.mblNo" + ></x-input> + </group> + <group class="personInfo" text-align="right"> + <cell title="姓名" + v-model="bankin.userName" + ></cell> + <cell title="身份证号" + v-model="bankin.idNo" + ></cell> + </group> + <div style="height: 20px"></div> + <box gap="0 15px"> + <x-button type="primary" @click.native="handleUpStep">上一步</x-button> + <x-button type="primary" @click.native="handleNextStep">下一步</x-button> + </box> + <div style="height: 20px"></div> + </div> + </div> +</template> +<script> + import { + Flow, + FlowState, + FlowLine, + XHeader, + Group, + GroupTitle, + Cell, + XInput, + Selector, + XButton, + Box, + Actionsheet, + } from 'vux'; + + import FSpace from '../../../components/common/FSpace.vue'; + import validate from '../../../tool/validator'; + import SysApi from '../../../api/api' + import statusCodeManage from '../../../api/statusCodeManage' + + export default { + name: 'bankInfo', + data() { + return { + bankin: { + bankCardNo: '', + bankName: '', + mblNo: '', + userName: '', + idNo: '' + }, // 初始化的用户信息 + bankinfo: [ + {code: '1', name: "工商银行"}, + {code: '2', name: "农业银行"}, + {code: '3', name: "中国银行"}, + {code: '4', name: "建设银行"}, + {code: '5', name: "交通银行"}, + {code: '6', name: "中信银行"}, + {code: '7', name: "光大银行"}, + {code: '8', name: "广发银行"}, + {code: '9', name: "招商银行"}, + {code: '10', name: "兴业银行"}, + {code: '11', name: "浦发银行"}, + {code: '12', name: "上海银行"}, + {code: '13', name: "宁波银行"}, + {code: '14', name: "平安银行"}, + {code: '15', name: "兰州银行"}, + {code: '16', name: "包商银行"} + ], + isLastStep: false, // 是否是最后一步 + activePageItem: 0, // 激活当前页 + pageList: [], // 一共有几页 + }; + }, + computed: {}, + methods: { + + //初始化银行卡绑定 + BankCard() { + this.bankinfo = this.getOptionsList(this.bankinfo); + + let _this = this; + let prodId = { + prodId: this.$route.query.prodId, + }; + SysApi.initBankCard(prodId).then( + res => { + console.log(res); + _this.bankin.bankCardNo = res.body.bankCardNo; +// _this.bankin.bankName = res.body.bankName; + _this.bankin.mblNo = res.body.mblNo; + _this.bankin.userName = res.body.userName; + _this.bankin.idNo = res.body.idNo; + }, error => { + + }) + }, + //上一步跳转 + handleUpStep() { + this.$router.push({ + path: '/bnd/credit/passwordInfo', query: {prodId: this.$route.query.prodId} + }); + }, + //下一步的表单验证及提交 + handleNextStep() { + if (validate.checkValEmpty(this.bankin.bankCardNo)) { + this.validateTip('请输入银行卡号'); + return false; + } + if (validate.checkValEmpty(this.bankin.mblNo)) { + this.validateTip('请输入预留手机号'); + return false; + } + if (!validate.checkPhone(this.bankin.mblNo)) { + this.validateTip('请输入正确的预留手机号'); + return false; + } + + let _this = this; + let bankin = { + prodId: this.$route.query.prodId, + bankCardNo: this.bankin.bankCardNo, + //这个东西等。。。。。。。。。。。。。。。 +// bankName: this.bankin.bankName, + bankName: '招商银行', + mblNo: this.bankin.mblNo, + userName: this.bankin.userName, + idNo: this.bankin.idNo, + }; + SysApi.saveBankCard(bankin).then( + res => { + this.$router.push({ + path: '/bnd/credit/bindingCode', query: {prodId: this.$route.query.prodId} + }); + }, error => { + statusCodeManage.showTipOfStatusCode(error) + } + ); + sessionStorage.mblNo = this.bankin.mblNo + }, + + // 弹窗 + validateTip(errorMsg) { + return this.$vux.toast.show({ + width: 'auto', + type: 'text', + text: errorMsg, + time: 2000, + position: 'middle' + }); + }, + // 得到选项列表统一的方法 + getOptionsList(optionList) { + let tmpList = []; + if (optionList instanceof Array) { + optionList.forEach(function (item) { + tmpList.push({ + key: item.code, + value: item.name + }); + }); + } + return tmpList; + }, + //返回上一页 + goBackPage() { + // 如果是第一步的话,那么返回到上一个页面 + if (this.activePageItem <= 1) { + this.$router.back(); + // 不是的话,那么显示上一步 + } else { + this.activePageItem--; + this.isLastStep = this.pageList.length === this.activePageItem; + } + }, + }, + activated: function () { + this.BankCard(); + }, + components: { + Group, + GroupTitle, + Cell, + XInput, + Selector, + XHeader, + XButton, + Box, + Flow, + FlowState, + FlowLine, + Actionsheet, + FSpace, + } + }; +</script> + +<style lang="less"> + @import "../../../style/mixin.less"; + + .loan-info-box { + background-color: @color-background-default; + .vux-header { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + .vux-header-left { + .left-arrow:before { + border: solid 1px @color-white; + border-width: 2px 0 0 2px; + } + } + } + .progressState div p { + font-size: @font-size-tiny; + } + .weui-wepay-flow__state { + width: 16px; + height: 16px; + top: -1px; + padding-top: 1px; + } + .currentStep .weui-wepay-flow__state { + width: 16px; + height: 16px; + padding-top: 1px; + border: 1px solid @color-primary; + color: @color-primary; + border-radius: 50%; + background-color: @color-white; + } + .weui-input { + height: 28px; + line-height: 28px; + } + .weui-wepay-flow, .weui-wepay-flow-auto { + padding: 10px 40px 30px; + background: @color-white; + } + .weui-wepay-flow__li_done .weui-wepay-flow__state, + .weui-wepay-flow__process { + background-color: @color-primary; + } + } + + .weui-wepay-flow { + background-color: @color-white; + } + + .left-arrow:before { + border-color: @color-white; + } + + .weui-cells__title { + margin: 0 !important; + font-size: 16PX !important; + } + + .weui-input, .weui-cell__bd { + font-size: @font-size-base; + } + + .weui-label { + font-size: @font-size-base; + } + + .personInfo ::-webkit-input-placeholder { /* WebKit browsers */ + color: #bfbfbf; + } + + .personInfo :-moz-placeholder { /* Mozilla Firefox 4 to 18 */ + color: #bfbfbf; + } + + .personInfo ::-moz-placeholder { /* Mozilla Firefox 19+ */ + color: #bfbfbf; + } + + .personInfo :-ms-input-placeholder { /* Internet Explorer 10+ */ + color: #bfbfbf; + } + + .header-space { + height: 46px; + } + + .loan-info-box .weui-cell_select .weui-select { + padding-right: 2.5rem; + direction: rtl; + } + + .loan-info-box .weui-input { + text-align: right !important; + font-size: @font-size-medium; + } + + .loan-info-box .weui-btn_primary { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + } + + .loan-info-box .weui-btn_primary:not(.weui-btn_disabled):active { + color: rgba(255, 255, 255, 0.6); + background-color: rgb(241, 95, 79);; + } + + /*------------------------------*/ + .vux-no-group-title { + margin-top: 0.77rem !important; + } + + .loan-info-box .currentStep .weui-wepay-flow__state { + background-color: @color-primary; + color: @color-white !important; + line-height: 1rem; + } + + .weui-wepay-flow__li.weui-wepay-flow__li .weui-wepay-flow__state { + width: 1.33333rem; + height: 1.33333rem; + border-radius: 1.58333rem; + color: @color-text-third; + line-height: 1.33333rem; + } + + .porcolor p { + color: @color-primary; + } + + .loan-info-box .weui-wepay-flow, .loan-info-box .weui-wepay-flow-auto { + padding: 0.83333rem 2.33333rem 2.5rem; + } + + select { + font-size: @font-size-medium !important; + } + + .weui-btn:after { + border: none !important; + } + + .personInfo { + .vux-label { + font-size: @font-size-base !important; + color: #000; + } + .weui-cell__ft { + font-size: @font-size-medium !important; + color: #000; + } + } + + .weui-btn { + font-size: @font-size-primary !important; + } + +</style> diff --git a/src/views/bnd/credit/bindingCode.vue b/src/views/bnd/credit/bindingCode.vue new file mode 100644 index 0000000..777038d --- /dev/null +++ b/src/views/bnd/credit/bindingCode.vue @@ -0,0 +1,374 @@ +<template> + <div class="loan-info-box"> + <x-header slot="header" + style="width:100%;height:46px;background-color: #ec6758" + title="银行卡绑定" + :left-options="{backText: '', preventGoBack:true}" + @on-click-back="goBackPage" + ></x-header> + <div class="Code_ls"> + <h4>请注意查收短信验证码,并完成银行卡绑定。</h4> + <span>手机号码</span><span v-text="mblNo">12312</span> + </div> + <div id="code" class="code_input"> + <x-input placeholder="请输入短信验证码" + :max="6" + :min="6" + type="text" + v-model.trim="checkform.code" + > + </x-input> + <span v-if="codeSecond===-1" @click="getCode">获取验证码</span> + <span v-else class="count">{{codeSecond}}秒后重发</span> + </div> + <div style="height: 20px"></div> + <box gap="0 15px"> + <x-button type="primary" @click.native="handleUpStep">上一步</x-button> + <x-button type="primary" @click.native="handleNextStep">绑定</x-button> + </box> + <div style="height: 20px"></div> + </div> +</template> + +<script> + import { + Flow, + FlowState, + FlowLine, + XHeader, + Group, + GroupTitle, + Cell, + XInput, + Selector, + XButton, + Box, + Actionsheet + } from 'vux'; + + import FSpace from '../../../components/common/FSpace.vue'; + import validate from '../../../tool/validator'; + import SysApi from '../../../api/api' + import statusCodeManage from '../../../api/statusCodeManage' + + export default { + name: 'bindingCode', + data() { + return { + checkform: { + code: '' + }, // 初始化的用户信息 + isLastStep: false, // 是否是最后一步 + activePageItem: 0, // 激活当前页 + pageList: [], // 一共有几页 + count: '', + mblNo: '', + codeSecond: -1,//验证码倒计时 + }; + }, + components: { + Group, + GroupTitle, + Cell, + XInput, + Selector, + XHeader, + XButton, + Box, + Flow, + FlowState, + FlowLine, + Actionsheet, + FSpace + }, + methods: { + init() { + this.mblNo = sessionStorage.mblNo; + }, + //上一步跳转 + handleUpStep() { + this.$router.push({ + path: '/bnd/credit/bankInfo', query: {prodId: this.$route.query.prodId} + }); + }, + //下一步跳转 + handleNextStep() { + if (validate.checkValEmpty(this.checkform.code)) { + this.validateTip('请输入验证码'); + return false; + } + if (!validate.checkVerifyCode(this.checkform.code)) { + this.validateTip('请输入正确的验证码'); + return false; + } + + let _this = this; + let checkform = { + prodId: this.$route.query.prodId, + codeType: 1, + code: this.checkform.code + }; + SysApi.checkCode(checkform).then( + res => { + this.$router.push({ + path: '/bnd/credit/waitForHandle', query: {prodId: _this.$route.query.prodId} + }); + }, error => { + statusCodeManage.showTipOfStatusCode(error) + } + ); + }, + + // 弹窗 + validateTip(errorMsg) { + return this.$vux.toast.show({ + width: 'auto', + type: 'text', + text: errorMsg, + time: 2000, + position: 'middle' + }); + }, + // 得到选项列表统一的方法 + getOptionsList(optionList) { + let tmpList = []; + if (optionList instanceof Array) { + optionList.forEach(function (item) { + tmpList.push({ + key: item.code, + value: item.name + }); + }); + } + return tmpList; + }, + //返回上一页 + goBackPage() { + // 如果是第一步的话,那么返回到上一个页面 + if (this.activePageItem <= 1) { + this.$router.back(); + // 不是的话,那么显示上一步 + } else { + this.activePageItem--; + this.isLastStep = this.pageList.length === this.activePageItem; + } + }, + //验证码倒计时 + getCode() { + this.codeSecond = 60; + let timer = setInterval(() => this.codeSecond === -1 ? clearInterval(timer) : this.codeSecond--, 1000); + //调用发送验证码接口 + SysApi.resendCode({codeType: 1, prodId: this.$route.query.prodId}).then(res => { + }, err => { + statusCodeManage.showTipOfStatusCode(err); + this.codeSecond = -1 + }) + }, + }, + activated: function () { + this.init(); + this.getCode(); + } + }; +</script> + +<style lang="less"> + @import "../../../style/mixin.less"; + + .loan-info-box { + background-color: @color-background-default; + .vux-header { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + .vux-header-left { + .left-arrow:before { + border: solid 1px @color-white; + border-width: 2px 0 0 2px; + } + } + } + .progressState div p { + font-size: @font-size-tiny; + } + .weui-wepay-flow__state { + width: 16px; + height: 16px; + top: -1px; + padding-top: 1px; + } + .currentStep .weui-wepay-flow__state { + width: 16px; + height: 16px; + padding-top: 1px; + border: 1px solid @color-primary; + color: @color-primary; + border-radius: 50%; + background-color: @color-white; + } + .weui-input { + height: 28px; + line-height: 28px; + } + .weui-wepay-flow, .weui-wepay-flow-auto { + padding: 10px 40px 30px; + background: @color-white; + } + .weui-wepay-flow__li_done .weui-wepay-flow__state, + .weui-wepay-flow__process { + background-color: @color-primary; + } + } + + .weui-wepay-flow { + background-color: @color-white; + } + + .left-arrow:before { + border-color: @color-white; + } + + .weui-cells__title { + margin: 0 !important; + font-size: 16PX !important; + } + + .weui-input, .weui-cell__bd { + font-size: @font-size-base; + } + + .weui-label { + font-size: @font-size-base; + } + + .personInfo ::-webkit-input-placeholder { /* WebKit browsers */ + color: #bfbfbf; + } + + .personInfo :-moz-placeholder { /* Mozilla Firefox 4 to 18 */ + color: #bfbfbf; + } + + .personInfo ::-moz-placeholder { /* Mozilla Firefox 19+ */ + color: #bfbfbf; + } + + .personInfo :-ms-input-placeholder { /* Internet Explorer 10+ */ + color: #bfbfbf; + } + + .header-space { + height: 46px; + } + + .loan-info-box .weui-cell_select .weui-select { + padding-right: 2.5rem; + direction: rtl; + } + + .loan-info-box .weui-input { + text-align: right; + } + + .loan-info-box .weui-btn_primary { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + } + + .loan-info-box .weui-btn_primary:not(.weui-btn_disabled):active { + color: rgba(255, 255, 255, 0.6); + background-color: rgb(241, 95, 79);; + } + + /*------------------------------*/ + .Code_ls { + padding: 0.25rem 1.25rem; + h4 { + padding-bottom: 1.2rem; + padding-top: 1rem; + font-size: @font-size-medium; + font-weight: normal; + color: @color-text-primary; + } + span { + color: @color-text-third; + display: inline-block; + } + span:last-child { + margin-left: 0.5rem; + } + } + + .vux-no-group-title { + margin-top: 0.77rem !important; + } + + .loan-info-box .currentStep .weui-wepay-flow__state { + background-color: @color-primary; + color: @color-white !important; + line-height: 1rem; + } + + .weui-wepay-flow__li.weui-wepay-flow__li .weui-wepay-flow__state { + width: 1.33333rem; + height: 1.33333rem; + border-radius: 1.58333rem; + color: @color-text-third; + line-height: 1.33333rem; + } + + .loan-info-box .weui-input { + text-align: left; + } + + .porcolor p { + color: @color-primary; + } + + #code.code_input { + padding: 1rem 1.25rem; + background-color: @color-white !important; + font-size: @font-size-medium; + overflow: hidden; + .weui-cell { + margin: 0px; + padding: 0px; + width: 69%; + float: left; + .weui-cell__bd { + width: 70%; + display: inline-block; + } + .weui-cell__ft { + display: inline-block; + } + } + input { + border: none; + width: 100%; + text-align: left !important; + outline: none; + font-size: @font-size-medium; + } + span { + display: inline-block; + font-size: @font-size-medium; + color: @color-text-third; + padding: 0.25rem 0; + border-left: 1px solid @color-text-third; + text-align: center; + width: 30%; + float: left; + } + + } + + .weui-cell__ft button { + background-color: @color-white !important; + } + + .weui-btn:after { + border: none !important; + } + + .weui-btn { + font-size: @font-size-primary !important; + } +</style> diff --git a/src/views/bnd/credit/companyInfo.vue b/src/views/bnd/credit/companyInfo.vue new file mode 100644 index 0000000..9a2b0f0 --- /dev/null +++ b/src/views/bnd/credit/companyInfo.vue @@ -0,0 +1,355 @@ +<template> + <div class="loan-info-box"> + <x-header slot="header" + style="width:100%;height:46px;background-color: #ec6758" + title="公司信息" + :left-options="{backText: '', preventGoBack:true}" + @on-click-back="goBackPage" + ></x-header> + <flow class="progressState"> + <flow-state state="1" title="填写资料" class="currentStep porcolor"></flow-state> + <flow-line is-done></flow-line> + <flow-state state="2" title="绑定银行卡"></flow-state> + <flow-line></flow-line> + <flow-state state="3" title="照片上传"></flow-state> + <flow-line></flow-line> + <flow-state state="4" title="三方授权"></flow-state> + <flow-line></flow-line> + <flow-state state="5" title="提交申请"></flow-state> + </flow> + <group class="personInfo" text-align="right"> + <x-input + title="公司名称" + placeholder="请输入公司名称" + v-model.trim="ComyInfo.comyName" + ></x-input> + <x-input + title="公司详细地址" + placeholder="请输入公司详细地址" + v-model.trim="ComyInfo.comyAddr" + ></x-input> + <selector title="所属行业" + :options="industryList" + placeholder="请选择" + v-model="ComyInfo.industry" + ></selector> + <selector title="职位/职称" + :options="jobRankList" + placeholder="请选择" + v-model="ComyInfo.jobRank" + ></selector> + </group> + <div style="height: 20px"></div> + <box gap="0 15px"> + <x-button type="primary" @click.native="handleUpStep">上一步</x-button> + <x-button type="primary" @click.native="handleNextStep">下一步</x-button> + </box> + <div style="height: 20px"></div> + </div> +</template> + +<script> + import { + Flow, + FlowState, + FlowLine, + XHeader, + Group, + GroupTitle, + Cell, + XInput, + Selector, + XButton, + Box, + Actionsheet + } from 'vux'; + + import FSpace from '../../../components/common/FSpace.vue'; + import validate from '../../../tool/validator'; + import SysApi from '../../../api/api' + import statusCodeManage from '../../../api/statusCodeManage' + + export default { + name: 'companyInfo', + data() { + return { + ComyInfo: { + comyName: '', + comyAddr: '', + industry: [], + jobRank: [], + }, // 初始化的用户信息 + isLastStep: false, // 是否是最后一步 + activePageItem: 0, // 激活当前页 + pageList: [], // 一共有几页 + + jobRankList: [], + industryList: [] + }; + }, + methods: { + //初始化公司信息 + initComyInfo() { + let _this = this; + let prodId = { + prodId: this.$route.query.prodId, + }; + SysApi.initComy(prodId).then( + res => { + _this.ComyInfo.comyName = res.body.comyName; + _this.ComyInfo.comyAddr = res.body.comyAddr; + _this.ComyInfo.industry = res.body.industry; + _this.ComyInfo.jobRank = res.body.jobRank; + console.log(res); + _this.jobRankList = this.getOptionsList(res.body.jobRankList); + _this.industryList = this.getOptionsList(res.body.industryList); + }, error => { + statusCodeManage.showTipOfStatusCode(error) + } + ) + }, + //上一步跳转 + handleUpStep() { + this.$router.push({ + path: '/bnd/credit/listgeren', query: {prodId: this.$route.query.prodId,} + }); + }, + //下一步的表单验证及提交 + handleNextStep() { + if (validate.checkValEmpty(this.ComyInfo.comyName)) { + this.validateTip('请输入公司名称'); + return false; + } + if (validate.checkValEmpty(this.ComyInfo.comyAddr)) { + this.validateTip('请输入公司详细地址'); + return false; + } + if (validate.checkValEmpty(this.ComyInfo.industry)) { + this.validateTip('请选择所属行业'); + return false; + } + if (validate.checkValEmpty(this.ComyInfo.jobRank)) { + this.validateTip('请选择职位/职称'); + return false; + } + let _this = this; + let ComyInfo = { + //pordId通过路由传递 + prodId: this.$route.query.prodId, + comyName: this.ComyInfo.comyName, + comyAddr: this.ComyInfo.comyAddr, + industry: this.ComyInfo.industry, + jobRank: this.ComyInfo.jobRank, + }; + SysApi.saveComyInfo(ComyInfo).then( + res => { + this.$router.push({ + path: '/bnd/credit/contactInfo', query: {prodId: _this.$route.query.prodId,} + }); + }, error => { + statusCodeManage.showTipOfStatusCode(error) + } + ) + }, + + // 弹窗 + validateTip(errorMsg) { + return this.$vux.toast.show({ + width: 'auto', + type: 'text', + text: errorMsg, + time: 2000, + position: 'middle' + }); + }, + // 得到选项列表统一的方法 + getOptionsList(optionList) { + let tmpList = []; + if (optionList instanceof Array) { + optionList.forEach(function (item) { + tmpList.push({ + key: item.code, + value: item.name + }); + }); + } + return tmpList; + }, + //返回上一页 + goBackPage() { + // 如果是第一步的话,那么返回到上一个页面 + if (this.activePageItem <= 1) { + this.$router.back(); + // 不是的话,那么显示上一步 + } else { + this.activePageItem--; + this.isLastStep = this.pageList.length === this.activePageItem; + } + }, + }, + activated: function () { + this.initComyInfo(); + }, + components: { + Group, + GroupTitle, + Cell, + XInput, + Selector, + XHeader, + XButton, + Box, + Flow, + FlowState, + FlowLine, + Actionsheet, + FSpace + } + }; +</script> + +<style lang="less"> + @import "../../../style/mixin.less"; + + .loan-info-box { + background-color: @color-background-default; + .vux-header { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + .vux-header-left { + .left-arrow:before { + border: solid 1px @color-white; + border-width: 2px 0 0 2px; + } + } + } + .progressState div p { + font-size: @font-size-tiny; + } + .weui-wepay-flow__state { + width: 16px; + height: 16px; + top: -1px; + padding-top: 1px; + } + .currentStep .weui-wepay-flow__state { + width: 16px; + height: 16px; + padding-top: 1px; + border: 1px solid @color-primary; + color: @color-primary; + border-radius: 50%; + background-color: @color-white; + } + .weui-input { + height: 28px; + line-height: 28px; + } + .weui-wepay-flow, .weui-wepay-flow-auto { + padding: 10px 40px 30px; + background: @color-white; + } + .weui-wepay-flow__li_done .weui-wepay-flow__state, + .weui-wepay-flow__process { + background-color: @color-primary; + } + } + + .weui-wepay-flow { + background-color: @color-white; + } + + .left-arrow:before { + border-color: @color-white; + } + + .weui-cells__title { + margin: 0 !important; + font-size: 16PX !important; + } + + .weui-input, .weui-cell__bd { + font-size: @font-size-base; + } + + .weui-label { + font-size: @font-size-base; + } + + .personInfo ::-webkit-input-placeholder { /* WebKit browsers */ + color: #bfbfbf; + } + + .personInfo :-moz-placeholder { /* Mozilla Firefox 4 to 18 */ + color: #bfbfbf; + } + + .personInfo ::-moz-placeholder { /* Mozilla Firefox 19+ */ + color: #bfbfbf; + } + + .personInfo :-ms-input-placeholder { /* Internet Explorer 10+ */ + color: #bfbfbf; + } + + .header-space { + height: 46px; + } + + .loan-info-box .weui-cell_select .weui-select { + padding-right: 2.5rem; + direction: rtl; + } + + .loan-info-box .weui-input { + text-align: right; + font-size: @font-size-medium; + } + + .loan-info-box .weui-btn_primary { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + } + + .loan-info-box .weui-btn_primary:not(.weui-btn_disabled):active { + color: rgba(255, 255, 255, 0.6); + background-color: rgb(241, 95, 79);; + } + + /*------------------------------*/ + .vux-no-group-title { + margin-top: 0.77rem !important; + } + + .loan-info-box .currentStep .weui-wepay-flow__state { + background-color: @color-primary; + color: @color-white !important; + line-height: 1rem; + } + + .weui-wepay-flow__li.weui-wepay-flow__li .weui-wepay-flow__state { + width: 1.33333rem; + height: 1.33333rem; + border-radius: 1.58333rem; + color: @color-text-third; + line-height: 1.33333rem; + } + + .porcolor p { + color: @color-primary; + } + + .loan-info-box .weui-wepay-flow, .loan-info-box .weui-wepay-flow-auto { + padding: 0.83333rem 2.33333rem 2.5rem; + } + + select { + font-size: @font-size-medium !important; + } + + .weui-btn:after { + border: none !important; + } + + .weui-btn { + font-size: @font-size-primary !important; + } +</style> diff --git a/src/views/bnd/credit/companyModification.vue b/src/views/bnd/credit/companyModification.vue new file mode 100644 index 0000000..f825c5a --- /dev/null +++ b/src/views/bnd/credit/companyModification.vue @@ -0,0 +1,356 @@ +<template> + <div class="loan-info-box"> + <x-header slot="header" + style="width:100%;height:46px;background-color: #ec6758" + title="公司信息" + :left-options="{backText: '', preventGoBack:true}" + @on-click-back="goBackPage" + ></x-header> + <flow class="progressState"> + <flow-state state="1" title="填写资料" class="currentStep porcolor"></flow-state> + <flow-line is-done></flow-line> + <flow-state state="2" title="绑定银行卡" class="currentStep porcolor"></flow-state> + <flow-line is-done></flow-line> + <flow-state state="3" title="照片上传" class="currentStep porcolor"></flow-state> + <flow-line is-done></flow-line> + <flow-state state="4" title="三方授权" class="currentStep porcolor"></flow-state> + <flow-line is-done></flow-line> + <flow-state state="5" title="提交申请" class="currentStep porcolor"></flow-state> + </flow> + <group class="personInfo" text-align="right"> + <x-input + title="公司名称" + placeholder="请输入公司名称" + v-model.trim="ComyInfo.comyName" + + ></x-input> + <x-input + title="公司详细地址" + placeholder="请输入公司详细地址" + v-model.trim="ComyInfo.comyAddr" + ></x-input> + <selector title="所属行业" + :options="industryList" + placeholder="请选择" + v-model="ComyInfo.industry" + ></selector> + <selector title="职位/职称" + :options="jobRankList" + placeholder="请选择" + v-model="ComyInfo.jobRank" + ></selector> + </group> + <div style="height: 20px"></div> + <box gap="0 15px"> + <x-button type="primary" @click.native="gohome">取消修改</x-button> + <x-button type="primary" @click.native="goback">确认修改</x-button> + </box> + <div style="height: 20px"></div> + </div> +</template> + +<script> + import { + Flow, + FlowState, + FlowLine, + XHeader, + Group, + GroupTitle, + Cell, + XInput, + Selector, + XButton, + Box, + Actionsheet + } from 'vux'; + + import FSpace from '../../../components/common/FSpace.vue'; + import validate from '../../../tool/validator'; + import SysApi from '../../../api/api' + import statusCodeManage from '../../../api/statusCodeManage' + + export default { + name: 'companyModification', + data() { + return { + ComyInfo: { + comyName: '', + comyAddr: '', + industry: [], + jobRank: [], + }, // 初始化的用户信息 + isLastStep: false, // 是否是最后一步 + activePageItem: 0, // 激活当前页 + pageList: [], // 一共有几页 + + jobRankList: [], + industryList: [] + }; + }, + methods: { + //初始化公司信息 + initComyInfo() { + let _this = this; + let prodId = { + prodId: this.$route.query.prodId, + }; + SysApi.initComy(prodId).then( + res => { + _this.ComyInfo.comyName = res.body.comyName; + _this.ComyInfo.comyAddr = res.body.comyAddr; + _this.ComyInfo.industry = res.body.industry; + _this.ComyInfo.jobRank = res.body.jobRank; + console.log(res); + _this.jobRankList = this.getOptionsList(res.body.jobRankList); + _this.industryList = this.getOptionsList(res.body.industryList); + }, error => { + statusCodeManage.showTipOfStatusCode(error) + } + ) + }, + //上一步跳转 + gohome() { + this.$router.push({ + path: '/bnd/credit/infoOk', query: {prodId: this.$route.query.prodId} + }); + }, + //下一步的表单验证及提交 + goback() { + if (validate.checkValEmpty(this.ComyInfo.comyName)) { + this.validateTip('请输入公司名称'); + return false; + } + if (validate.checkValEmpty(this.ComyInfo.comyAddr)) { + this.validateTip('请输入公司详细地址'); + return false; + } + if (validate.checkValEmpty(this.ComyInfo.industry)) { + this.validateTip('请选择所属行业'); + return false; + } + if (validate.checkValEmpty(this.ComyInfo.jobRank)) { + this.validateTip('请选择职位/职称'); + return false; + } + let _this = this; + let ComyInfo = { + //pordId通过路由传递 + prodId: this.$route.query.prodId, + comyName: this.ComyInfo.comyName, + comyAddr: this.ComyInfo.comyAddr, + industry: this.ComyInfo.industry, + jobRank: this.ComyInfo.jobRank, + }; + SysApi.saveComyInfo(ComyInfo).then( + res => { + this.$router.push({ + path: '/bnd/credit/infoOk', query: {prodId: _this.$route.query.prodId} + }); + }, error => { + statusCodeManage.showTipOfStatusCode(error) + } + ) + }, + + // 弹窗 + validateTip(errorMsg) { + return this.$vux.toast.show({ + width: 'auto', + type: 'text', + text: errorMsg, + time: 2000, + position: 'middle' + }); + }, + // 得到选项列表统一的方法 + getOptionsList(optionList) { + let tmpList = []; + if (optionList instanceof Array) { + optionList.forEach(function (item) { + tmpList.push({ + key: item.code, + value: item.name + }); + }); + } + return tmpList; + }, + //返回上一页 + goBackPage() { + // 如果是第一步的话,那么返回到上一个页面 + if (this.activePageItem <= 1) { + this.$router.back(); + // 不是的话,那么显示上一步 + } else { + this.activePageItem--; + this.isLastStep = this.pageList.length === this.activePageItem; + } + }, + }, + activated: function () { + this.initComyInfo(); + }, + components: { + Group, + GroupTitle, + Cell, + XInput, + Selector, + XHeader, + XButton, + Box, + Flow, + FlowState, + FlowLine, + Actionsheet, + FSpace + } + }; +</script> + +<style lang="less"> + @import "../../../style/mixin.less"; + + .loan-info-box { + background-color: @color-background-default; + .vux-header { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + .vux-header-left { + .left-arrow:before { + border: solid 1px @color-white; + border-width: 2px 0 0 2px; + } + } + } + .progressState div p { + font-size: @font-size-tiny; + } + .weui-wepay-flow__state { + width: 16px; + height: 16px; + top: -1px; + padding-top: 1px; + } + .currentStep .weui-wepay-flow__state { + width: 16px; + height: 16px; + padding-top: 1px; + border: 1px solid @color-primary; + color: @color-primary; + border-radius: 50%; + background-color: @color-white; + } + .weui-input { + height: 28px; + line-height: 28px; + } + .weui-wepay-flow, .weui-wepay-flow-auto { + padding: 10px 40px 30px; + background: @color-white; + } + .weui-wepay-flow__li_done .weui-wepay-flow__state, + .weui-wepay-flow__process { + background-color: @color-primary; + } + } + + .weui-wepay-flow { + background-color: @color-white; + } + + .left-arrow:before { + border-color: @color-white; + } + + .weui-cells__title { + margin: 0 !important; + font-size: 16PX !important; + } + + .weui-input, .weui-cell__bd { + font-size: @font-size-base; + } + + .weui-label { + font-size: @font-size-base; + } + + .personInfo ::-webkit-input-placeholder { /* WebKit browsers */ + color: #bfbfbf; + } + + .personInfo :-moz-placeholder { /* Mozilla Firefox 4 to 18 */ + color: #bfbfbf; + } + + .personInfo ::-moz-placeholder { /* Mozilla Firefox 19+ */ + color: #bfbfbf; + } + + .personInfo :-ms-input-placeholder { /* Internet Explorer 10+ */ + color: #bfbfbf; + } + + .header-space { + height: 46px; + } + + .loan-info-box .weui-cell_select .weui-select { + padding-right: 2.5rem; + direction: rtl; + } + + .loan-info-box .weui-input { + text-align: right; + font-size: @font-size-medium; + } + + .loan-info-box .weui-btn_primary { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + } + + .loan-info-box .weui-btn_primary:not(.weui-btn_disabled):active { + color: rgba(255, 255, 255, 0.6); + background-color: rgb(241, 95, 79);; + } + + /*------------------------------*/ + .vux-no-group-title { + margin-top: 0.77rem !important; + } + + .loan-info-box .currentStep .weui-wepay-flow__state { + background-color: @color-primary; + color: @color-white !important; + line-height: 1rem; + } + + .weui-wepay-flow__li.weui-wepay-flow__li .weui-wepay-flow__state { + width: 1.33333rem; + height: 1.33333rem; + border-radius: 1.58333rem; + color: @color-text-third; + line-height: 1.33333rem; + } + + .porcolor p { + color: @color-primary; + } + + .loan-info-box .weui-wepay-flow, .loan-info-box .weui-wepay-flow-auto { + padding: 0.83333rem 2.33333rem 2.5rem; + } + + select { + font-size: @font-size-medium !important; + } + + .weui-btn:after { + border: none !important; + } + + .weui-btn { + font-size: @font-size-primary !important; + } +</style> diff --git a/src/views/bnd/credit/contactInfo.vue b/src/views/bnd/credit/contactInfo.vue new file mode 100644 index 0000000..444fde0 --- /dev/null +++ b/src/views/bnd/credit/contactInfo.vue @@ -0,0 +1,442 @@ +<template> + <div class="loan-info-box"> + <x-header slot="header" + style="width:100%;height:46px;background-color: #ec6758" + title="联系人信息" + :left-options="{backText: '', preventGoBack:true}" + @on-click-back="goBackPage" + ></x-header> + <flow class="progressState"> + <flow-state state="1" title="填写资料" class="currentStep porcolor"></flow-state> + <flow-line is-done></flow-line> + <flow-state state="2" title="绑定银行卡"></flow-state> + <flow-line></flow-line> + <flow-state state="3" title="照片上传"></flow-state> + <flow-line></flow-line> + <flow-state state="4" title="三方授权"></flow-state> + <flow-line></flow-line> + <flow-state state="5" title="提交申请"></flow-state> + </flow> + <group class="personInfo" text-align="right"> + <x-input title="第一联系人" + placeholder="请输入姓名" + v-model.trim="Contact.contactName1" + ></x-input> + <selector title="与联系人关系" + :options="contactRrel1List" + placeholder="请选择" + v-model="Contact.contactRel1" + @on-change="selectorChange(1)" + ></selector> + <x-input title="联系人电话" + :max="11" + :min="11" + type="tel" + is-type="china-mobile" + placeholder="请输入11位手机号" + v-model.trim="Contact.contactMblNo1" + ></x-input> + </group> + <group class="personInfo" text-align="right"> + <x-input title="第二联系人" + placeholder="请输入姓名" + v-model.trim="Contact.contactName2" + ></x-input> + <selector title="与联系人关系" + :options="contactRrel2List" + placeholder="请选择" + v-model="Contact.contactRel2" + @on-change="selectorChange(2)" + ></selector> + <x-input title="联系人电话" + :max="11" + :min="11" + type="tel" + is-type="china-mobile" + placeholder="请输入11位手机号" + v-model.trim="Contact.contactMblNo2" + ></x-input> + </group> + <div style="height: 20px"></div> + <box gap="0 15px"> + <x-button type="primary" @click.native="handleUpStep">上一步</x-button> + <x-button type="primary" @click.native="handleNextStep">下一步</x-button> + </box> + <div style="height: 20px"></div> + </div> +</template> + +<script> + import { + Flow, + FlowState, + FlowLine, + XHeader, + Group, + GroupTitle, + Cell, + XInput, + Selector, + XButton, + Box, + Actionsheet + } from 'vux'; + + import FSpace from '../../../components/common/FSpace.vue'; + import validate from '../../../tool/validator'; + import SysApi from '../../../api/api' + import statusCodeManage from '../../../api/statusCodeManage' + + export default { + name: 'contactInfo', + data() { + return { + Contact: { + contactName1: '', + contactRel1: [], + contactMblNo1: '', + contactName2: '', + contactRel2: [], + contactMblNo2: '', + }, // 初始化的用户信息 + isLastStep: false, // 是否是最后一步 + activePageItem: 0, // 激活当前页 + pageList: [], // 一共有几页 + contactRrel1List: [], + contactRrel2List: [], + oldContactRrel1List: [], + oldContactRrel2List: [] + }; + }, + + methods: { + + //初始化联系人信息 + ContactInfo() { + let _this = this; + let prodId = { + prodId: this.$route.query.prodId, + }; + SysApi.initContact(prodId).then( + res => { + _this.Contact.contactName1 = res.body.contactName1 || ''; + _this.Contact.contactRel1 = res.body.contactRel1 || ''; + _this.Contact.contactMblNo1 = res.body.contactMblNo1 || ''; + _this.Contact.contactName2 = res.body.contactName2 || ''; + _this.Contact.contactRel2 = res.body.contactRel2 || ''; + _this.Contact.contactMblNo2 = res.body.contactMblNo2 || ''; + console.log(res); + if (sessionStorage.userMarrStatus) { + let _index = null; + let arr = []; + res.body.contactRrel1List.map((val, index) => { + if (val.code == 4) { + arr.push(val) + _index = index + } + }); + _this.contactRrel1List = this.getOptionsList(arr); + _this.oldContactRrel1List = this.getOptionsList(arr); + + res.body.contactRre21List.splice(_index, 1) + _this.contactRrel2List = this.getOptionsList(res.body.contactRre21List); + _this.oldContactRrel2List = this.getOptionsList(res.body.contactRre21List); + this.Contact.contactRel1 = 4 + + } else { + _this.contactRrel1List = this.getOptionsList(res.body.contactRrel1List); + _this.oldContactRrel1List = this.getOptionsList(res.body.contactRrel1List); + + _this.contactRrel2List = this.getOptionsList(res.body.contactRre21List); + _this.oldContactRrel2List = this.getOptionsList(res.body.contactRre21List); + } + + }, error => { + statusCodeManage.showTipOfStatusCode(error) + } + ) + }, + selectorChange(flag) { + if (sessionStorage.userMarrStatus) return; + let index = 0 + if (flag === 1 && this.Contact.contactRel1) { + this.contactRrel2List = JSON.parse(JSON.stringify((this.oldContactRrel2List))) + index = this.oldContactRrel2List.findIndex(val => { + return val.key === this.Contact.contactRel1 + }) + this.contactRrel2List.splice(index, 1) + } else if (flag === 2 && this.Contact.contactRel2) { + this.contactRrel1List = JSON.parse(JSON.stringify((this.oldContactRrel1List))) + index = this.oldContactRrel1List.findIndex(val => { + return val.key === this.Contact.contactRel2 + }) + this.contactRrel1List.splice(index, 1) + } + + }, + //上一步跳转 + handleUpStep() { + this.$router.push({ + path: '/bnd/credit/companyInfo', query: {prodId: this.$route.query.prodId} + }); + }, + //下一步的表单验证及提交 + handleNextStep() { + if (validate.checkValEmpty(this.Contact.contactName1)) { + this.validateTip('请输入第一联系人的姓名'); + return false; + } + if (validate.checkValEmpty(this.Contact.contactRel1)) { + this.validateTip('请选择与第一联系人的关系'); + return false; + } + if (validate.checkValEmpty(this.Contact.contactMblNo1)) { + this.validateTip('请输入第一联系人的电话'); + return false; + } + if (validate.checkValEmpty(this.Contact.contactName2)) { + this.validateTip('请输入第一联系人的姓名'); + return false; + } + if (validate.checkValEmpty(this.Contact.contactRel2)) { + this.validateTip('请选择与第二联系人的关系'); + return false; + } + if (validate.checkValEmpty(this.Contact.contactMblNo2)) { + this.validateTip('请输入第二联系人的电话'); + return false; + } + if (!validate.checkPhone(this.Contact.contactMblNo1)) { + this.validateTip('请输入正确的第一联系人手机号码'); + return false; + } + if (!validate.checkPhone(this.Contact.contactMblNo2)) { + this.validateTip('请输入正确的第二联系人手机号码'); + return false; + } + + let _this = this; + let Contact = { + prodId: this.$route.query.prodId, + contactName1: this.Contact.contactName1, + contactRel1: this.Contact.contactRel1, + contactMblNo1: this.Contact.contactMblNo1, + + contactName2: this.Contact.contactName2, + contactRel2: this.Contact.contactRel2, + contactMblNo2: this.Contact.contactMblNo2, + }; + SysApi.saveContactInfo(Contact).then( + res => { + this.$router.push({ + path: '/bnd/credit/passwordInfo', query: {prodId: _this.$route.query.prodId,} + }); + }, error => { + statusCodeManage.showTipOfStatusCode(error) + } + ) + + }, + + // 弹窗 + validateTip(errorMsg) { + return this.$vux.toast.show({ + width: 'auto', + type: 'text', + text: errorMsg, + time: 2000, + position: 'middle' + }); + }, + // 得到选项列表统一的方法 + getOptionsList(optionList) { + let tmpList = []; + if (optionList instanceof Array) { + optionList.forEach(function (item) { + tmpList.push({ + key: item.code, + value: item.name + }); + }); + } + return tmpList; + }, + //返回上一页 + goBackPage() { + // 如果是第一步的话,那么返回到上一个页面 + if (this.activePageItem <= 1) { + this.$router.back(); + // 不是的话,那么显示上一步 + } else { + this.activePageItem--; + this.isLastStep = this.pageList.length === this.activePageItem; + } + }, + }, + activated: function () { + this.ContactInfo(); + }, + + components: { + Group, + GroupTitle, + Cell, + XInput, + Selector, + XHeader, + XButton, + Box, + Flow, + FlowState, + FlowLine, + Actionsheet, + FSpace + } + }; +</script> + +<style lang="less"> + @import "../../../style/mixin.less"; + + .loan-info-box { + background-color: @color-background-default; + .vux-header { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + .vux-header-left { + .left-arrow:before { + border: solid 1px @color-white; + border-width: 2px 0 0 2px; + } + } + } + .progressState div p { + font-size: @font-size-tiny; + } + .weui-wepay-flow__state { + width: 16px; + height: 16px; + top: -1px; + padding-top: 1px; + } + .currentStep .weui-wepay-flow__state { + width: 16px; + height: 16px; + padding-top: 1px; + border: 1px solid @color-primary; + color: @color-primary; + border-radius: 50%; + background-color: @color-white; + } + .weui-input { + height: 28px; + line-height: 28px; + } + .weui-wepay-flow, .weui-wepay-flow-auto { + padding: 10px 40px 30px; + background: @color-white; + } + .weui-wepay-flow__li_done .weui-wepay-flow__state, + .weui-wepay-flow__process { + background-color: @color-primary; + } + } + + .weui-wepay-flow { + background-color: @color-white; + } + + .left-arrow:before { + border-color: @color-white; + } + + .weui-cells__title { + margin: 0 !important; + font-size: 16PX !important; + } + + .weui-input, .weui-cell__bd { + font-size: @font-size-base; + } + + .weui-label { + font-size: @font-size-base; + } + + .personInfo ::-webkit-input-placeholder { /* WebKit browsers */ + color: #bfbfbf; + } + + .personInfo :-moz-placeholder { /* Mozilla Firefox 4 to 18 */ + color: #bfbfbf; + } + + .personInfo ::-moz-placeholder { /* Mozilla Firefox 19+ */ + color: #bfbfbf; + } + + .personInfo :-ms-input-placeholder { /* Internet Explorer 10+ */ + color: #bfbfbf; + } + + .header-space { + height: 46px; + } + + .loan-info-box .weui-cell_select .weui-select { + padding-right: 2.5rem; + direction: rtl; + } + + .loan-info-box .weui-input { + text-align: right; + font-size: @font-size-medium; + } + + .loan-info-box .weui-btn_primary { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + } + + .loan-info-box .weui-btn_primary:not(.weui-btn_disabled):active { + color: rgba(255, 255, 255, 0.6); + background-color: rgb(241, 95, 79);; + } + + /*------------------------------*/ + .vux-no-group-title { + margin-top: 0.77rem !important; + } + + .loan-info-box .currentStep .weui-wepay-flow__state { + background-color: @color-primary; + color: @color-white !important; + line-height: 1rem; + } + + .weui-wepay-flow__li.weui-wepay-flow__li .weui-wepay-flow__state { + width: 1.33333rem; + height: 1.33333rem; + border-radius: 1.58333rem; + color: @color-text-third; + line-height: 1.33333rem; + } + + .porcolor p { + color: @color-primary; + } + + .loan-info-box .weui-wepay-flow, .loan-info-box .weui-wepay-flow-auto { + padding: 0.83333rem 2.33333rem 2.5rem; + } + + select { + font-size: @font-size-medium !important; + } + + .weui-btn:after { + border: none !important; + } + + .weui-btn { + font-size: @font-size-primary !important; + } +</style> diff --git a/src/views/bnd/credit/idPicture.vue b/src/views/bnd/credit/idPicture.vue new file mode 100644 index 0000000..f05b339 --- /dev/null +++ b/src/views/bnd/credit/idPicture.vue @@ -0,0 +1,419 @@ +<template> + <div class="loan-info-box"> + <x-header slot="header" + style="width:100%;height:46px;background-color: #ec6758" + title="照片上传" + :left-options="{backText: '', preventGoBack:true}" + @on-click-back="goBackPage" + ></x-header> + <flow class="progressState"> + <flow-state state="1" title="填写资料" class="currentStep porcolor"></flow-state> + <flow-line is-done></flow-line> + <flow-state state="2" title="绑定银行卡" class="currentStep porcolor"></flow-state> + <flow-line is-done></flow-line> + <flow-state state="3" title="照片上传" class="currentStep porcolor"></flow-state> + <flow-line></flow-line> + <flow-state state="4" title="三方授权"></flow-state> + <flow-line></flow-line> + <flow-state state="5" title="提交申请"></flow-state> + </flow> + <div class="picture_li"> + <ul> + <li> + <!--<i class="iconfont icon-tianjia idPicture"></i>--> + <img :src="picture.idFrontImage" alt=""> + <UploadIMG butName=" " defaultImg="" + :currentImg="picture.idFrontImage" + v-on:select-complete="secelted('01', $event)"></UploadIMG> + </li> + <li> + <img :src="picture.idBackImage" alt=""> + <UploadIMG butName=" " defaultImg="" + :currentImg="picture.idFrontImage" + v-on:select-complete="secelted('02', $event)"></UploadIMG> + </li> + <li> + <img :src="picture.handIdImage" alt=""> + <UploadIMG butName=" " defaultImg="" + :currentImg="picture.idFrontImage" + v-on:select-complete="secelted('03', $event)"></UploadIMG> + </li> + <li> + <img :src="picture.faceImage" alt=""> + <UploadIMG butName=" " defaultImg="" + :currentImg="picture.idFrontImage" + v-on:select-complete="secelted('17', $event)"></UploadIMG> + </li> + </ul> + </div> + <div style="height: 20px"></div> + <box gap="0 15px"> + <x-button type="primary" @click.native="handleNextStep">提交</x-button> + </box> + <div style="height: 20px"></div> + </div> +</template> + +<script> + import { + Flow, + FlowState, + FlowLine, + XHeader, + Group, + GroupTitle, + Cell, + XInput, + Selector, + XButton, + Box, + Actionsheet + } from 'vux'; + + import FSpace from '../../../components/common/FSpace.vue'; + import validate from '../../../tool/validator'; + import SysApi from '../../../api/api'; + import statusCodeManage from '../../../api/statusCodeManage'; + import UploadIMG from '../../../components/upload/uploadImg'; + + export default { + name: 'idPicture', + data() { + return { + isLastStep: false, // 是否是最后一步 + activePageItem: 0, // 激活当前页 + pageList: [], // 一共有几页 + + picture: { + idFrontImage: '', + idBackImage: '', + handIdImage: '', + faceImage: '' + }, + + }; + }, + components: { + Group, + GroupTitle, + Cell, + XInput, + Selector, + XHeader, + XButton, + Box, + Flow, + FlowState, + FlowLine, + Actionsheet, + FSpace, + UploadIMG + }, + methods: { + //初始化证件照 + initPhoto() { + let _this = this; + let prodId = { + prodId: this.$route.query.prodId, + }; + SysApi.initPhoto(prodId).then( + res => { + console.log(res) + _this.picture.idFrontImage = res.body.idFrontImage; + _this.picture.idBackImage = res.body.idBackImage; + _this.picture.handIdImage = res.body.handIdImage; + _this.picture.faceImage = res.body.faceImage; + + }, error => { + statusCodeManage.showTipOfStatusCode(error) + } + ) + }, + // 图片上传 + secelted: function (index, event) { + let _this = this; + console.log(event); + let _par = { + prodId: this.$route.query.prodId, + file: event.file.split(',')[1], + extName: event.extName, + fileType: index, + oldFileUrl: '' + }; + if (index == '01') { + _par.oldFileUrl = _this.picture.idFrontImage; + } else if (index == '02') { + _par.oldFileUrl = _this.picture.idBackImage; + } else if (index == '03') { + _par.oldFileUrl = _this.picture.handIdImage; + } else if (index == '17') { + _par.oldFileUrl = _this.picture.faceImage; + } + + //TODO 发送请求 + SysApi.savePhoto(_par).then( + res => { + if (index == '01') { + _this.picture.idFrontImage = res.body.fileUrl; + } else if (index == '02') { + _this.picture.idBackImage = res.body.fileUrl; + } else if (index == '03') { + _this.picture.handIdImage = res.body.fileUrl; + } else if (index == '17') { + _this.picture.faceImage = res.body.fileUrl; + } + + } + ), error => { + statusCodeManage.showTipOfStatusCode(error) + } + + }, + + //下一步跳转路由 + handleNextStep() { + let _this = this; + let prodId = { + prodId: this.$route.query.prodId, + }; + SysApi.submitPhoto(prodId).then( + res => { + _this.$router.push({ + path: '/bnd/credit/pictureUp', query: {prodId: this.$route.query.prodId,} + }); + }, error => { + statusCodeManage.showTipOfStatusCode(error) + } + ) + + }, + // 得到选项列表统一的方法 + getOptionsList(optionList) { + let tmpList = []; + if (optionList instanceof Array) { + optionList.forEach(function (item) { + tmpList.push({ + key: item.code, + value: item.name + }); + }); + } + return tmpList; + }, + //返回 + goBackPage() { + // 如果是第一步的话,那么返回到上一个页面 + if (this.activePageItem <= 1) { + this.$router.back(); + // 不是的话,那么显示上一步 + } else { + this.activePageItem--; + this.isLastStep = this.pageList.length === this.activePageItem; + } + }, + }, + activated: function () { + this.initPhoto() + } + }; +</script> +<style lang="less"> + @import "../../../style/mixin.less"; + + + .loan-info-box { + background-color: @color-background-default; + .vux-header { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + .vux-header-left { + .left-arrow:before { + border: solid 1px @color-white; + border-width: 2px 0 0 2px; + + } + } + } + .progressState div p { + font-size: @font-size-tiny; + } + .weui-wepay-flow__state { + width: 16px; + height: 16px; + top: -1px; + padding-top: 1px; + } + .currentStep .weui-wepay-flow__state { + width: 16px; + height: 16px; + padding-top: 1px; + border: 1px solid @color-primary; + color: @color-primary; + border-radius: 50%; + background-color: @color-white; + } + .weui-input { + height: 28px; + line-height: 28px; + } + .weui-wepay-flow, .weui-wepay-flow-auto { + padding: 10px 40px 30px; + background: @color-white; + } + .weui-wepay-flow__li_done .weui-wepay-flow__state, + .weui-wepay-flow__process { + background-color: @color-primary; + } + } + + .weui-wepay-flow { + background-color: @color-white; + } + + .left-arrow:before { + border-color: @color-white; + } + + .weui-cells__title { + margin: 0 !important; + font-size: 16PX !important; + } + + .weui-input, .weui-cell__bd { + font-size: @font-size-base; + } + + .weui-label { + font-size: @font-size-base; + } + + .personInfo ::-webkit-input-placeholder { /* WebKit browsers */ + color: #bfbfbf; + } + + .personInfo :-moz-placeholder { /* Mozilla Firefox 4 to 18 */ + color: #bfbfbf; + } + + .personInfo ::-moz-placeholder { /* Mozilla Firefox 19+ */ + color: #bfbfbf; + } + + .personInfo :-ms-input-placeholder { /* Internet Explorer 10+ */ + color: #bfbfbf; + } + + .header-space { + height: 46px; + } + + .loan-info-box .weui-cell_select .weui-select { + padding-right: 2.5rem; + direction: rtl; + } + + .loan-info-box .weui-input { + text-align: right; + } + + .loan-info-box .weui-btn_primary { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + } + + .loan-info-box .weui-btn_primary:not(.weui-btn_disabled):active { + color: rgba(255, 255, 255, 0.6); + background-color: rgb(241, 95, 79);; + } + + /*------------------------------*/ + .vux-no-group-title { + margin-top: 0.77rem !important; + } + + .loan-info-box .currentStep .weui-wepay-flow__state { + background-color: @color-primary; + color: @color-white !important; + line-height: 1rem; + } + + .weui-wepay-flow__li.weui-wepay-flow__li .weui-wepay-flow__state { + width: 1.33333rem; + height: 1.33333rem; + border-radius: 1.58333rem; + color: @color-text-third; + line-height: 1.33333rem; + } + + .porcolor p { + color: @color-primary; + } + + .picture_li { + li { + list-style: none; + text-align: center; + width: 77%; + margin: 0 auto; + height: 14rem; + /*border: 1px dashed #999999;*/ + margin-top: 1rem; + border-radius: 5px; + position: relative; + } + li:nth-child(1) { + background: url("../../../assets/imgs/shenfenzheng01.jpg") no-repeat; + background-size: 100% 100%; + } + li:nth-child(2) { + background: url("../../../assets/imgs/shenfenzheng02.jpg") no-repeat; + background-size: 100% 100%; + } + li:nth-child(3) { + background: url("../../../assets/imgs/shenfenzheng03.jpg") no-repeat; + background-size: 100% 100%; + } + li:nth-child(4) { + background: url("../../../assets/imgs/shenfenzheng04.jpg") no-repeat; + background-size: 100% 100%; + } + .upload { + height: 100%; + > div { + display: none; + } + .IDCardUpLoadBut { + display: none; + } + .fileUploadInput { + height: 100%; + } + } + img { + width: 100%; + height: 100%; + position: absolute; + left: 0; + top: 0; + } + .idPicture { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + font-size: 45Px; + color: @color-gradient-darkBlue-right; + opacity: 0.9; + } + } + + .loan-info-box .weui-wepay-flow, .loan-info-box .weui-wepay-flow-auto { + padding: 0.83333rem 2.33333rem 2.5rem; + } + + .weui-btn:after { + border: none !important; + } + + .weui-btn { + font-size: @font-size-primary !important; + } +</style> diff --git a/src/views/bnd/credit/infoOk.vue b/src/views/bnd/credit/infoOk.vue new file mode 100644 index 0000000..4f7f664 --- /dev/null +++ b/src/views/bnd/credit/infoOk.vue @@ -0,0 +1,580 @@ +<template> + <div class="loan-info-box"> + <x-header slot="header" + style="width:100%;height:46px;background-color: #ec6758" + title="信息确认" + :left-options="{backText: '', preventGoBack:true}" + @on-click-back="goBackPage" + ></x-header> + <flow class="progressState"> + <flow-state state="1" title="填写资料" class="currentStep porcolor"></flow-state> + <flow-line is-done></flow-line> + <flow-state state="2" title="绑定银行卡" class="currentStep porcolor"></flow-state> + <flow-line is-done></flow-line> + <flow-state state="3" title="照片上传" class="currentStep porcolor"></flow-state> + <flow-line is-done></flow-line> + <flow-state state="4" title="三方授权" class="currentStep porcolor"></flow-state> + <flow-line is-done></flow-line> + <flow-state state="5" title="提交申请" class="currentStep porcolor"></flow-state> + </flow> + <group> + <div class="info_queren"> + <h4>个人基本信息</h4> + <p @click="gopersonalChanges"><i class="iconfont icon-edit"></i><span>修改</span></p> + </div> + <ul class="list_shuju"> + <li> + <span>姓名</span> + <span v-text="personalInfo.userName">111111111111</span> + </li> + <li> + <span>身份证号</span> + <span v-text="personalInfo.idNo">111111111111</span> + </li> + <li> + <span>手机号</span> + <span v-text="personalInfo.regMblNo">1111111111111</span> + </li> + <li> + <span>最高学历</span> + <span v-text="personalInfo.degree">1111111111</span> + </li> + <li> + <span>现居住状况</span> + <span v-text="personalInfo.marrStatus">1111111111111111</span> + </li> + <li> + <span>所在地区</span> + <span v-text="personalInfo.homeProv">11111111111111</span> + </li> + <li> + <span>详细地址</span> + <span v-text="personalInfo.homeAddr">111111111111</span> + </li> + <li> + <span>婚姻状况</span> + <span v-text="personalInfo.marrStatus">11111111111111</span> + </li> + </ul> + + </group> + <group> + <div class="info_queren"> + <h4>公司信息</h4> + <p @click="gocompanyModification"><i class="iconfont icon-edit"></i><span>修改</span></p> + </div> + <ul class="list_shuju"> + <li> + <span>公司名称</span> + <span v-text="comyInfo.comyName">111111111111</span> + </li> + <li> + <span>公司详细地址</span> + <span v-text="comyInfo.comyAddr">111111111111</span> + </li> + <li> + <span>所属行业</span> + <span v-text="comyInfo.industry">1111111111111</span> + </li> + <li> + <span>职位/职级</span> + <span v-text="comyInfo.jobRank">1111111111</span> + </li> + + </ul> + + </group> + <group> + <div class="info_queren"> + <h4>联系人信息</h4> + <!--<p><i class="iconfont icon-edit"></i><span>修改</span></p>--> + </div> + <ul class="list_shuju"> + <li> + <span>第一联系人</span> + <span v-text="contactInfo.contactName1">111111111111</span> + </li> + <li> + <span>与联系人关系</span> + <span v-text="contactInfo.contactRel1">111111111111</span> + </li> + <li> + <span>联系人电话</span> + <span v-text="contactInfo.contactMblNo1">1111111111111</span> + </li> + <li> + <span>第二联系人</span> + <span v-text="contactInfo.contactName2">1111111111</span> + </li> + <li> + <span>与联系人关系</span> + <span v-text="contactInfo.contactRel2">1111111111111</span> + </li> + <li> + <span>联系人电话</span> + <span v-text="contactInfo.contactMblNo2">1111111111</span> + </li> + </ul> + </group> + <group> + <div class="info_queren"> + <h4>银行卡信息</h4> + <!--<p><i class="iconfont icon-edit"></i><span>修改</span></p>--> + </div> + <ul class="list_shuju"> + <li> + <span>银行卡号</span> + <span v-text="bankCardInfo.bankCardNo">111111111111</span> + </li> + <li> + <span>开户行</span> + <span v-text="bankCardInfo.bankName">111111111111</span> + </li> + <li> + <span>预留手机号</span> + <span v-text="bankCardInfo.mblNo">1111111111111</span> + </li> + </ul> + </group> + <div style="height: 20px"></div> + <div class="xieyi"> + <input type='checkbox' v-model="isAgree" name='VoteOption1' @change="agreeINfoCheckBox"/> 我已阅读并同意 + <span>《包银协议1》</span>、<span>《包银协议2》</span>、<span>《包银协议3》</span> + </div> + <box class="butonColor" gap="0 15px"> + <x-button :type="nextBtnType" @click.native="nextPage" :disabled="!isAgree">提交申请</x-button> + </box> + <div style="height: 20px"></div> + </div> +</template> + +<script> + import { + Flow, + FlowState, + FlowLine, + XHeader, + Group, + GroupTitle, + Cell, + XInput, + Selector, + XButton, + Box, + Actionsheet, + Msg, + XTable, + } from 'vux'; + import FSpace from '../../../components/common/FSpace.vue'; + import validate from '../../../tool/validator'; + import SysApi from '../../../api/api' + import statusCodeManage from '../../../api/statusCodeManage' + + // ---------mima---- + export default { + name: 'infoOk', + data() { + return { + isPay: false, // 默认进来就设置显示 + isAgree: false, // 是否同意 + nextBtnType: "", + isLastStep: false, // 是否是最后一步 + activePageItem: 0, // 激活当前页 + pageList: [], // 一共有几页 + //初始化个人基本信息 + personalInfo: { + userName: '', + idNo: '', + regMblNo: '', + degree: '', + marrStatus: '', + homeProv: '', + homeCity: '', + homeArea: '', + homeAddr: '', + marrStatus: '', + }, + //公司信息 + comyInfo: { + comyName: '', + comyAddr: '', + industry: '', + jobRank: '', + }, + //联系人信息 + contactInfo: { + contactRel1: '', + contactName1: '', + contactMblNo1: '', + contactRel2: '', + contactName2: '', + contactMblNo2: '', + }, + //银行卡信息 + bankCardInfo: { + bankCardNo: '', + bankName: '', + mblNo: '', + } + }; + }, + components: { + Flow, + FlowState, + FlowLine, + XHeader, + Group, + GroupTitle, + Cell, + XInput, + Selector, + XButton, + Box, + Actionsheet, + Msg, + XTable, + + }, + + methods: { + //初始化确认信息页面 + initConfirmInfo() { + let _this = this; + let prodId = { + prodId: this.$route.query.prodId, + }; + SysApi.initConfirmInfo(prodId).then( + res => { + console.log(res) + _this.personalInfo.userName = res.body.personalInfo.userName; + _this.personalInfo.idNo = res.body.personalInfo.idNo; + _this.personalInfo.regMblNo = res.body.personalInfo.regMblNo; + _this.personalInfo.degree = res.body.personalInfo.degree; + _this.personalInfo.marrStatus = res.body.personalInfo.marrStatus; + _this.personalInfo.homeProv = res.body.personalInfo.homeProv + '-' + res.body.personalInfo.homeCity + '-' + res.body.personalInfo.homeArea; +// _this.personalInfo.homeCity = res.body.personalInfo.homeCity; +// _this.personalInfo.homeArea = res.body.personalInfo.homeArea; + _this.personalInfo.homeAddr = res.body.personalInfo.homeAddr; + _this.personalInfo.marrStatus = res.body.personalInfo.marrStatus; + + _this.comyInfo.comyName = res.body.comyInfo.comyName; + _this.comyInfo.comyAddr = res.body.comyInfo.comyAddr; + _this.comyInfo.industry = res.body.comyInfo.industry; + _this.comyInfo.jobRank = res.body.comyInfo.jobRank; + + _this.contactInfo.contactRel1 = res.body.contactInfo.contactRel1; + _this.contactInfo.contactName1 = res.body.contactInfo.contactName1; + _this.contactInfo.contactMblNo1 = res.body.contactInfo.contactMblNo1; + _this.contactInfo.contactRel2 = res.body.contactInfo.contactRel2; + _this.contactInfo.contactName2 = res.body.contactInfo.contactName2; + _this.contactInfo.contactMblNo2 = res.body.contactInfo.contactMblNo2; + + _this.bankCardInfo.bankCardNo = res.body.bankCardInfo.bankCardNo; + _this.bankCardInfo.bankName = res.body.bankCardInfo.bankName; + _this.bankCardInfo.mblNo = res.body.bankCardInfo.mblNo; + + }, error => { + statusCodeManage.showTipOfStatusCode(error) + } + ) + }, + + //确认协议按钮样式 + agreeINfoCheckBox() { +// console.log(this.isAgree); + if (this.isAgree) { + this.nextBtnType = "primary"; + } else { + this.nextBtnType = ""; + } + }, + //个人信息修改 + gocompanyModification() { + this.$router.push({path: '/bnd/credit/companyModification', query: {prodId: this.$route.query.prodId,}}) + }, + //公司信息修改 + gopersonalChanges() { + this.$router.push({path: '/bnd/credit/personalChanges', query: {prodId: this.$route.query.prodId,}}) + }, + + // 点击下一步执行的方法 + nextPage() { + this.isPay = true; + let Info = { + prodId: this.$route.query.prodId, + }; + SysApi.submitApply(Info).then( + res => { + this.$router.push({path: '/bnd/credit/messageCode', query: {prodId: this.$route.query.prodId,}}) + }, error => { + statusCodeManage.showTipOfStatusCode(error) + }); +// this.$router.push({path: '/bnd/credit/subSuss', query: {id: '',}}); + }, + //返回上一页 + goBackPage() { + // 如果是第一步的话,那么返回到上一个页面 + if (this.activePageItem <= 1) { + this.$router.back(); + // 不是的话,那么显示上一步 + } else { + this.activePageItem--; + this.isLastStep = this.pageList.length === this.activePageItem; + } + }, + + }, + activated: function () { + this.initConfirmInfo() + } + }; +</script> + +<style lang="less"> + @import "../../../style/mixin.less"; + + + .loan-info-box { + background-color: @color-background-default; + .vux-header { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + .vux-header-left { + .left-arrow:before { + border: solid 1px @color-white; + border-width: 2px 0 0 2px; + } + } + } + .progressState div p { + font-size: @font-size-tiny; + } + .weui-wepay-flow__state { + width: 16px; + height: 16px; + top: -1px; + padding-top: 1px; + } + .currentStep .weui-wepay-flow__state { + width: 16px; + height: 16px; + padding-top: 1px; + border: 1px solid @color-primary; + color: @color-primary; + border-radius: 50%; + background-color: @color-white; + } + .weui-input { + height: 28px; + line-height: 28px; + } + .weui-wepay-flow, .weui-wepay-flow-auto { + padding: 10px 40px 30px; + background: @color-white; + } + .weui-wepay-flow__li_done .weui-wepay-flow__state, + .weui-wepay-flow__process { + background-color: @color-primary; + } + } + + .weui-wepay-flow { + background-color: @color-white; + } + + .left-arrow:before { + border-color: @color-white; + } + + .weui-cells__title { + margin: 0 !important; + font-size: 16PX !important; + } + + .weui-input, .weui-cell__bd { + font-size: @font-size-base; + } + + .weui-label { + font-size: @font-size-base; + } + + .personInfo ::-webkit-input-placeholder { /* WebKit browsers */ + color: #bfbfbf; + } + + .personInfo :-moz-placeholder { /* Mozilla Firefox 4 to 18 */ + color: #bfbfbf; + } + + .personInfo ::-moz-placeholder { /* Mozilla Firefox 19+ */ + color: #bfbfbf; + } + + .personInfo :-ms-input-placeholder { /* Internet Explorer 10+ */ + color: #bfbfbf; + } + + .header-space { + height: 46px; + } + + .loan-info-box .weui-cell_select .weui-select { + padding-right: 2.5rem; + direction: rtl; + } + + .loan-info-box .weui-input { + text-align: right; + } + + .loan-info-box .weui-btn_primary { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + } + + .loan-info-box .weui-btn_primary:not(.weui-btn_disabled):active { + color: rgba(255, 255, 255, 0.6); + background-color: rgb(241, 95, 79);; + } + + /*------------------------------*/ + .Code_ls { + padding: 0.25rem 1.25rem; + h4 { + padding-bottom: 2rem; + padding-top: 1rem; + font-size: 1.2rem; + font-weight: normal; + color: @color-text-primary; + } + span { + color: @color-text-third; + display: inline-block; + } + span:last-child { + margin-left: 0.5rem; + } + } + + .vux-no-group-title { + margin-top: 0.77rem !important; + } + + .loan-info-box .currentStep .weui-wepay-flow__state { + background-color: @color-primary; + color: @color-white !important; + line-height: 1rem; + } + + .weui-wepay-flow__li.weui-wepay-flow__li .weui-wepay-flow__state { + width: 1.33333rem; + height: 1.33333rem; + border-radius: 1.58333rem; + color: @color-text-third; + line-height: 1.33333rem; + } + + .loan-info-box .weui-input { + text-align: left; + } + + .porcolor p { + color: @color-primary; + } + + .weui-btn weui-btn_mini weui-btn_primary { + background-color: @color-white !important; + } + + .weui-msg__icon-area i { + color: @color-primary !important; + } + + .weui-msg__icon-area { + margin-bottom: -1.2rem !important; + } + + // 信息列表 + .info_queren { + position: relative; + height: 3.5rem; + padding: 0 1rem; + border-bottom: 1px solid @color-divider-regular; + h4 { + font-size: @font-size-primary; + font-weight: normal; + line-height: 3.5rem; + } + p { + position: absolute; + top: 1rem; + right: 1rem; + vertical-align: middle; + color: @color-primary; + } + span { + display: inline-block; + vertical-align: middle; + font-size: @font-size-medium; + } + i { + vertical-align: middle; + padding-right: 0.5rem; + font-size: @font-size-medium; + } + + } + + .list_shuju { + padding: 1rem; + li { + padding-bottom: 0.4rem; + list-style: none; + } + span { + display: inline-block; + font-size: @font-size-base; + } + span:first-child { + color: @color-text-secondary; + width: 9rem; + } + span:last-child { + color: @color-text-third; + font-size: @font-size-medium; + } + } + + // 信息列表1 + .xieyi { + text-align: left; + padding-bottom: 1.25rem; + font-size: @font-size-small; + width: 90%; + margin: 0 auto; + input { + vertical-align: middle; + } + span { + display: inline-block; + color: @color-primary; + } + } + + .loan-info-box .weui-wepay-flow, .loan-info-box .weui-wepay-flow-auto { + padding: 0.83333rem 2.33333rem 2.5rem; + } + + .butonColor { + button { + background: @color-disabled; + } + } + + .weui-btn:after { + border: none !important; + } + + .weui-btn { + font-size: @font-size-primary !important; + } +</style> diff --git a/src/views/bnd/credit/juxinli.vue b/src/views/bnd/credit/juxinli.vue new file mode 100644 index 0000000..435da82 --- /dev/null +++ b/src/views/bnd/credit/juxinli.vue @@ -0,0 +1,323 @@ +<template> + <div class="loan-info-box"> + <x-header slot="header" + style="width:100%;height:46px;background-color: #ec6758" + title="聚信立授权" + :left-options="{backText: '', preventGoBack:true}" + @on-click-back="goBackPage" + ></x-header> + <!--<box gap="0 15px">--> + <!--<x-button type="primary" @click.native="handleNextStep">下一步</x-button>--> + <!--</box>--> + </div> +</template> + +<script> + import { + Flow, + FlowState, + FlowLine, + XHeader, + Group, + GroupTitle, + Cell, + XInput, + Selector, + XButton, + Box, + Actionsheet + } from 'vux'; + + import FSpace from '../../../components/common/FSpace.vue'; + import SysApi from '../../../api/api' + import statusCodeManage from '../../../api/statusCodeManage' + + export default { + name: 'juxinli', + data() { + return { + isLastStep: false, // 是否是最后一步 + activePageItem: 0, // 激活当前页 + pageList: [], // 一共有几页 + }; + }, + + methods: { + //初始化聚信立页面 + initgetUrl() { + let _this = this; + let _callbackUrl = 'https://' + window.location.host + window.location.pathname + '#' + '/bnd/credit/juxinliAuthorization'; + let prodId = { + prodId: this.$route.query.prodId, + urlType: 2, + callBackUrl: _callbackUrl + }; + SysApi.getUrl(prodId).then( + res => { + sessionStorage.setItem("prodId", _this.$route.query.prodId); + _this.url = res.body.url; + window.location.href = _this.url; + }, error => { + statusCodeManage.showTipOfStatusCode(error) + } + ) + }, + + //下一步跳转路由 +// handleNextStep() { +// this.$router.push({ +// path: '/bnd/credit/juxinliAuthorization', +// query: {prodId: this.$route.query.prodId,} +// }); +// }, + //返回上一页 + goBackPage() { + // 如果是第一步的话,那么返回到上一个页面 + if (this.activePageItem <= 1) { + this.$router.back(); + // 不是的话,那么显示上一步 + } else { + this.activePageItem--; + this.isLastStep = this.pageList.length === this.activePageItem; + } + }, + // 得到选项列表统一的方法 + getOptionsList(optionList) { + let tmpList = []; + if (optionList instanceof Array) { + optionList.forEach(function (item) { + tmpList.push({ + key: item.code, + value: item.name + }); + }); + } + return tmpList; + }, + + }, + activated: function () { + this.initgetUrl(); + + }, + components: { + Group, + GroupTitle, + Cell, + XInput, + Selector, + XHeader, + XButton, + Box, + Flow, + FlowState, + FlowLine, + Actionsheet, + FSpace + } + }; +</script> +<style lang="less"> + @import "../../../style/mixin.less"; + + .loan-info-box { + background-color: @color-background-default; + .vux-header { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + .vux-header-left { + .left-arrow:before { + border: solid 1px @color-white; + border-width: 2px 0 0 2px; + } + } + } + .progressState div p { + font-size: @font-size-tiny; + } + .weui-wepay-flow__state { + width: 16px; + height: 16px; + top: -1px; + padding-top: 1px; + } + .currentStep .weui-wepay-flow__state { + width: 16px; + height: 16px; + padding-top: 1px; + border: 1px solid @color-primary; + color: @color-primary; + border-radius: 50%; + background-color: @color-white; + } + .weui-input { + height: 28px; + line-height: 28px; + } + .weui-wepay-flow, .weui-wepay-flow-auto { + padding: 10px 40px 30px; + background: @color-white; + } + .weui-wepay-flow__li_done .weui-wepay-flow__state, + .weui-wepay-flow__process { + background-color: @color-primary; + } + } + + .weui-wepay-flow { + background-color: @color-white; + } + + .left-arrow:before { + border-color: @color-white; + } + + .weui-cells__title { + margin: 0 !important; + font-size: 16PX !important; + } + + .weui-input, .weui-cell__bd { + font-size: @font-size-base; + } + + .weui-label { + font-size: @font-size-base; + } + + .personInfo ::-webkit-input-placeholder { /* WebKit browsers */ + color: #bfbfbf; + } + + .personInfo :-moz-placeholder { /* Mozilla Firefox 4 to 18 */ + color: #bfbfbf; + } + + .personInfo ::-moz-placeholder { /* Mozilla Firefox 19+ */ + color: #bfbfbf; + } + + .personInfo :-ms-input-placeholder { /* Internet Explorer 10+ */ + color: #bfbfbf; + } + + .header-space { + height: 46px; + } + + .loan-info-box .weui-cell_select .weui-select { + padding-right: 2.5rem; + direction: rtl; + } + + .loan-info-box .weui-input { + text-align: right; + } + + .loan-info-box .weui-btn_primary { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + } + + .loan-info-box .weui-btn_primary:not(.weui-btn_disabled):active { + color: rgba(255, 255, 255, 0.6); + background-color: rgb(241, 95, 79);; + } + + /*------------------------------*/ + .Code_ls { + padding: 0.25rem 1.25rem; + h4 { + padding-bottom: 2rem; + padding-top: 1rem; + font-size: 1.2rem; + font-weight: normal; + color: @color-text-primary; + } + span { + color: @color-text-third; + display: inline-block; + } + span:last-child { + margin-left: 0.5rem; + } + } + + .vux-no-group-title { + margin-top: 0.77rem !important; + } + + .loan-info-box .currentStep .weui-wepay-flow__state { + background-color: @color-primary; + color: @color-white !important; + line-height: 1rem; + } + + .weui-wepay-flow__li.weui-wepay-flow__li .weui-wepay-flow__state { + width: 1.33333rem; + height: 1.33333rem; + border-radius: 1.58333rem; + color: @color-text-third; + line-height: 1.33333rem; + } + + .loan-info-box .weui-input { + text-align: left; + } + + .porcolor p { + color: @color-primary; + } + + .weui-btn weui-btn_mini weui-btn_primary { + background-color: @color-white !important; + } + + .weui-msg__icon-area i { + color: @color-primary !important; + } + + .bindingSuccee { + text-align: center; + p { + text-align: center; + color: @color-text-third; + font-size: @font-size-medium; + width: 25rem; + margin: 0 auto; + } + } + + .weui-msg__icon-area { + margin-bottom: -1.2rem !important; + } + + .success_okandno { + width: 6.5rem; + margin: 0 auto; + padding: 3rem 0; + img { + width: 100%; + } + h2 { + font-weight: normal; + font-size: @font-size-primary; + text-align: center; + } + } + + .iconfont { + font-size: 6rem; + color: #0092f1; + } + + .loan-info-box .weui-wepay-flow, .loan-info-box .weui-wepay-flow-auto { + padding: 0.83333rem 2.33333rem 2.5rem; + } + + .weui-btn:after { + border: none !important; + } + + .weui-btn { + font-size: @font-size-primary !important; + } +</style> diff --git a/src/views/bnd/credit/juxinliAuthorization.vue b/src/views/bnd/credit/juxinliAuthorization.vue new file mode 100644 index 0000000..c3400f8 --- /dev/null +++ b/src/views/bnd/credit/juxinliAuthorization.vue @@ -0,0 +1,436 @@ +<template> + <div class="loan-info-box"> + <x-header slot="header" + style="width:100%;height:46px;background-color: #ec6758" + title="聚信立授权" + :left-options="{backText: '', preventGoBack:true}" + @on-click-back="goBackPage" + ></x-header> + <flow class="progressState"> + <flow-state state="1" title="填写资料" class="currentStep porcolor"></flow-state> + <flow-line is-done></flow-line> + <flow-state state="2" title="绑定银行卡" class="currentStep porcolor"></flow-state> + <flow-line is-done></flow-line> + <flow-state state="3" title="照片上传" class="currentStep porcolor"></flow-state> + <flow-line is-done></flow-line> + <flow-state state="4" title="三方授权" class="currentStep porcolor"></flow-state> + <flow-line></flow-line> + <flow-state state="5" title="提交申请"></flow-state> + </flow> + <div v-if="resultCode===2"> + <div class="success_okandno"> + <div> + <i class="iconfont icon-iconfontdengdai"></i> + </div> + <h2>等待处理</h2> + </div> + <div class="bindingSuccee"> + <p> + 聚信立授权中,预计时间2分钟,您可点击“刷新”查询绑定结果 + </p> + </div> + <div style="height: 20px"></div> + <box gap="0 15px"> + <x-button type="primary" @click.native="Refresh">刷新</x-button> + </box> + <div style="height: 20px"></div> + </div> + <div v-if="resultCode===1"> + <div class="success_okandno"> + <div> + <i class="iconfont icon-roundcheckfill-copy"></i> + </div> + <h2>授权成功</h2> + </div> + <div class="bindingSuccee"> + <p> + 您的聚信立授权已完成,请点击 “下一步” + 进行信息确认。 + </p> + </div> + <div style="height: 20px"></div> + <box gap="0 15px"> + <x-button type="primary" @click.native="handleNextStep">下一步</x-button> + </box> + <div style="height: 20px"></div> + </div> + <div v-if="resultCode===0"> + <div class="success_okandno"> + <div> + <i class="iconfont icon-roundclosefill"></i> + </div> + <h2>授权失败</h2> + </div> + <div class="bindingSuccee"> + <p> + 您的聚信立授权失败,请点击 “重新授权” + 重新进行授权。 + </p> + </div> + <div style="height: 20px"></div> + <box gap="0 15px"> + <x-button type="primary" @click.native="failstate">重新进行授权</x-button> + </box> + <div style="height: 20px"></div> + </div> + </div> +</template> + +<script> + import { + Flow, + FlowState, + FlowLine, + XHeader, + Group, + GroupTitle, + Cell, + XInput, + Selector, + XButton, + Box, + Actionsheet + } from 'vux'; + + import FSpace from '../../../components/common/FSpace.vue'; + import SysApi from '../../../api/api' + import statusCodeManage from '../../../api/statusCodeManage' + + export default { + name: 'authorization', + data() { + return { + + isLastStep: false, // 是否是最后一步 + activePageItem: 0, // 激活当前页 + pageList: [], // 一共有几页 + resultCode: 1, + }; + }, + + methods: { + //从芝麻授信回来的时候调 + initsubmitSesame() { + let _this = this; + let submit = { + prodId:null, + params: '111', + sign: '111', + }; + submit.prodId = sessionStorage.getItem("prodId"); + + if (this.$route.query.params && this.$route.query.sign) { + + this.initSubmitSesame(submit, function () { + _this.initsubmitJuxinli(); + }, function () { + //失败 + + }) + } else { + this.initsubmitJuxinli() + } + + }, + initSubmitSesame(submit, successback, errorback) { + SysApi.submitSesame(submit).then( + res => { + if (successback) { + successback(); + } + }, error => { + if (errorback) { + errorback(); + } + statusCodeManage.showTipOfStatusCode(error) + } + ); + }, + //初始化状态 + initsubmitJuxinli() { + let _this = this; + let prodId = { + prodId: this.$route.query.prodId, + }; + SysApi.submitJuxinli(prodId).then( + res => { + console.log(res); + _this.resultCode = res.body.resultCode; + }, error => { + statusCodeManage.showTipOfStatusCode(error) + } + ) + }, + //刷新 + Refresh() { + this.initsubmitJuxinli(); + }, + //下一步跳转路由 + handleNextStep() { + this.$router.push({path: '/bnd/credit/infoOk', query: {prodId: this.$route.query.prodId,}}); + }, + //重新授权 + failstate() { + this.$router.push({path: '/bnd/credit/juxinli', query: {prodId: this.$route.query.prodId,}}) + }, + //返回上一页 + goBackPage() { + // 如果是第一步的话,那么返回到上一个页面 + if (this.activePageItem <= 1) { + this.$router.back(); + // 不是的话,那么显示上一步 + } else { + this.activePageItem--; + this.isLastStep = this.pageList.length === this.activePageItem; + } + }, + // 得到选项列表统一的方法 + getOptionsList(optionList) { + let tmpList = []; + if (optionList instanceof Array) { + optionList.forEach(function (item) { + tmpList.push({ + key: item.code, + value: item.name + }); + }); + } + return tmpList; + }, + + }, + activated: function () { + this.initsubmitSesame(); + }, + components: { + Group, + GroupTitle, + Cell, + XInput, + Selector, + XHeader, + XButton, + Box, + Flow, + FlowState, + FlowLine, + Actionsheet, + FSpace + } + }; +</script> +<style lang="less"> + @import "../../../style/mixin.less"; + + .loan-info-box { + background-color: @color-background-default; + .vux-header { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + .vux-header-left { + .left-arrow:before { + border: solid 1px @color-white; + border-width: 2px 0 0 2px; + } + } + } + .progressState div p { + font-size: @font-size-tiny; + } + .weui-wepay-flow__state { + width: 16px; + height: 16px; + top: -1px; + padding-top: 1px; + } + .currentStep .weui-wepay-flow__state { + width: 16px; + height: 16px; + padding-top: 1px; + border: 1px solid @color-primary; + color: @color-primary; + border-radius: 50%; + background-color: @color-white; + } + .weui-input { + height: 28px; + line-height: 28px; + } + .weui-wepay-flow, .weui-wepay-flow-auto { + padding: 10px 40px 30px; + background: @color-white; + } + .weui-wepay-flow__li_done .weui-wepay-flow__state, + .weui-wepay-flow__process { + background-color: @color-primary; + } + } + + .weui-wepay-flow { + background-color: @color-white; + } + + .left-arrow:before { + border-color: @color-white; + } + + .weui-cells__title { + margin: 0 !important; + font-size: 16PX !important; + } + + .weui-input, .weui-cell__bd { + font-size: @font-size-base; + } + + .weui-label { + font-size: @font-size-base; + } + + .personInfo ::-webkit-input-placeholder { /* WebKit browsers */ + color: #bfbfbf; + } + + .personInfo :-moz-placeholder { /* Mozilla Firefox 4 to 18 */ + color: #bfbfbf; + } + + .personInfo ::-moz-placeholder { /* Mozilla Firefox 19+ */ + color: #bfbfbf; + } + + .personInfo :-ms-input-placeholder { /* Internet Explorer 10+ */ + color: #bfbfbf; + } + + .header-space { + height: 46px; + } + + .loan-info-box .weui-cell_select .weui-select { + padding-right: 2.5rem; + direction: rtl; + } + + .loan-info-box .weui-input { + text-align: right; + } + + .loan-info-box .weui-btn_primary { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + } + + .loan-info-box .weui-btn_primary:not(.weui-btn_disabled):active { + color: rgba(255, 255, 255, 0.6); + background-color: rgb(241, 95, 79);; + } + + /*------------------------------*/ + .Code_ls { + padding: 0.25rem 1.25rem; + h4 { + padding-bottom: 2rem; + padding-top: 1rem; + font-size: 1.2rem; + font-weight: normal; + color: @color-text-primary; + } + span { + color: @color-text-third; + display: inline-block; + } + span:last-child { + margin-left: 0.5rem; + } + } + + .vux-no-group-title { + margin-top: 0.77rem !important; + } + + .loan-info-box .currentStep .weui-wepay-flow__state { + background-color: @color-primary; + color: @color-white !important; + line-height: 1rem; + } + + .weui-wepay-flow__li.weui-wepay-flow__li .weui-wepay-flow__state { + width: 1.33333rem; + height: 1.33333rem; + border-radius: 1.58333rem; + color: @color-text-third; + line-height: 1.33333rem; + } + + .loan-info-box .weui-input { + text-align: left; + } + + .porcolor p { + color: @color-primary; + } + + .weui-btn weui-btn_mini weui-btn_primary { + background-color: @color-white !important; + } + + .weui-msg__icon-area i { + color: @color-primary !important; + } + + .bindingSuccee { + text-align: center; + p { + text-align: center; + color: @color-text-third; + font-size: @font-size-medium; + width: 25rem; + margin: 0 auto; + } + + } + + .weui-msg__icon-area { + margin-bottom: -1.2rem !important; + } + + .success_okandno { + width: 6.5rem; + margin: 0 auto; + padding: 3rem 0; + img { + width: 100%; + } + h2 { + font-weight: normal; + font-size: @font-size-primary; + text-align: center; + } + } + + .success_okandno { + div { + text-align: center; + height: 8rem; + } + .icon-roundclosefill { + color: #ff4d53 !important; + } + } + + .iconfont { + font-size: 6rem; + color: #0092f1; + } + + .loan-info-box .weui-wepay-flow, .loan-info-box .weui-wepay-flow-auto { + padding: 0.83333rem 2.33333rem 2.5rem; + } + + .weui-btn:after { + border: none !important; + } + + .weui-btn { + font-size: @font-size-primary !important; + } +</style> diff --git a/src/views/bnd/credit/listgeren.vue b/src/views/bnd/credit/listgeren.vue new file mode 100644 index 0000000..867fb39 --- /dev/null +++ b/src/views/bnd/credit/listgeren.vue @@ -0,0 +1,425 @@ +<template> + <div class="loan-info-box"> + <x-header slot="header" + style="width:100%;height:46px;background-color: #ec6758" + title="个人基本信息" + :left-options="{backText: '', preventGoBack:true}" + @on-click-back="goBackPage" + ></x-header> + <flow class="progressState"> + <flow-state state="1" title="填写资料" class="currentStep porcolor"></flow-state> + <flow-line is-done></flow-line> + <flow-state state="2" title="绑定银行卡"></flow-state> + <flow-line></flow-line> + <flow-state state="3" title="照片上传"></flow-state> + <flow-line></flow-line> + <flow-state state="4" title="三方授权"></flow-state> + <flow-line></flow-line> + <flow-state state="5" title="提交申请"></flow-state> + </flow> + <group class="personInfo" text-align="right"> + <x-input title="姓名" + :max="10" + placeholder="请输入姓名" + v-model.trim="form.userName" + ></x-input> + <x-input title="身份证号" + :max="18" + :min="18" + placeholder="请输入身份证号" + v-model.trim="form.cardID" + ></x-input> + </group> + <group> + <selector + title="最高学历" + :options="degreeList" + placeholder="请选择" + v-model='form.userDegree' + ></selector> + </group> + <group> + <selector title="现居住状况" + :options="residenceStatusList" + placeholder="请选择" + v-model="form.userResidenceStatus" + @on-change="selectMaritalStatus" + ></selector> + <x-address title="所在地区" + class="address_list" + raw-value="true" + :list="addressData" + v-model="form.userAddressData" + placeholder="请选择" + ></x-address> + <x-input title="详细地址" + placeholder="请输入您的详细地址" + :max="50" + v-model.trim="form.userHomeAddr" + ></x-input> + </group> + <group> + <selector title="婚否状况" + :options="marrStatusList" + placeholder="请选择" + v-model="form.userMarrStatus" + ></selector> + </group> + <div style="height: 20px"></div> + <box gap="0 15px"> + <x-button type="primary" @click.native="handleNextStep">下一步</x-button> + </box> + <div style="height: 20px"></div> + </div> +</template> + +<script> + import { + Flow, + FlowState, + FlowLine, + XHeader, + Group, + GroupTitle, + XInput, + Selector, + XButton, + Box, + XAddress, + ChinaAddressV4Data + } from 'vux'; + + import FSpace from '../../../components/common/FSpace.vue'; + import SysApi from '../../../api/api' + import statusCodeManage from '../../../api/statusCodeManage' + import validate from '../../../tool/validator'; + + export default { + name: 'listgeren', + data() { + return { + form: { + userName: '', + cardID: '', + userDegree: '', + userResidenceStatus: '', + userAddressData: [], + userHomeAddr: '', + userMarrStatus: '' + }, + personalInfo: { + relMobile2: null, + relMobile: null, + }, // 初始化的用户信息 + isLastStep: false, // 是否是最后一步 + activePageItem: 0, // 激活当前页 + pageList: [], // 一共有几页 + addressData: ChinaAddressV4Data,//地址 + +// userDegreeList: [], //最高学历 +// userResidenceStatusList: [], //现居住状况 +// userAddressData: [], //地区 +// userHomeAddr: '', //详细地址 +// userMarrStatusList: [], //婚否 + + degreeList: [], + residenceStatusList: [], + marrStatusList: [] + }; + }, + components: { + Group, + GroupTitle, + XInput, + Selector, + XHeader, + XButton, + Box, + Flow, + FlowState, + FlowLine, + FSpace, + XAddress, + ChinaAddressV4Data + }, + computed: {}, + methods: { + //地址转值 + getAddressName(val) { + for (let i = 0, j = this.addressData.length; i < j; i++) { + if (val == this.addressData[i].value) { + return this.addressData[i].name + } + } + }, + + //初始化个人基本信息 + init() { + let _this = this; + let init = { + prodId: this.$route.query.prodId, + saveType: 1, + } + SysApi.textListGeren(init).then( + res => { + console.log(res); + _this.form.userName = res.body.userName; + _this.form.cardID = res.body.idNo; + + _this.degreeList = _this.getOptionsList(res.body.degreeList); + _this.form.userDegree = res.body.degree; + + _this.residenceStatusList = _this.getOptionsList(res.body.residenceStatusList); + _this.form.userResidenceStatus = res.body.residenceStatus; + + _this.form.userAddressData = [res.body.homeProv, res.body.homeCity, res.body.homeArea]; + + _this.form.userHomeAddr = res.body.homeAddr; + + _this.marrStatusList = _this.getOptionsList(res.body.marrStatusList); + _this.form.userMarrStatus = res.body.marrStatus; + + }, error => { + statusCodeManage.showTipOfStatusCode(error) + } + ); + }, + //下一步的表单验证及提交 + handleNextStep() { + let _this = this; + if (validate.checkValEmpty(this.form.userName)) { + this.validateTip('请输入姓名'); + return false; + } + if (validate.checkValEmpty(this.form.cardID)) { + this.validateTip('请输入身份证号'); + return false; + } + if (validate.checkValEmpty(this.form.userDegree)) { + this.validateTip('请选择最高学历'); + return false; + } + if (validate.checkValEmpty(this.form.userResidenceStatus)) { + this.validateTip('请选择现居住状况'); + return false; + } + if (validate.checkValEmpty(this.form.userAddressData)) { + this.validateTip('请选择所在地区'); + return false; + } + if (validate.checkValEmpty(this.form.userHomeAddr)) { + this.validateTip('请输入详细地址'); + return false; + } + if (validate.checkValEmpty(this.form.userMarrStatus)) { + this.validateTip('请选择婚否'); + return false; + } + // 检查内容的合理性 + if (!validate.checkName(this.form.userName)) { + this.validateTip('请输入2-10个长度中文'); + return false; + } + if (!validate.checkIDCard(this.form.cardID)) { + this.validateTip('请输入正确的身份证号'); + return false; + } + + let listInfo = { + //pordId通过路由传递 + prodId: this.$route.query.prodId, + saveType: 1, + userName: this.form.userName, + idNo: this.form.cardID, + degree: this.form.userDegree, + residenceStatus: this.form.userResidenceStatus, + + homeProv: this.getAddressName(this.form.userAddressData[0]), + homeCity: this.getAddressName(this.form.userAddressData[1]), + homeArea: this.getAddressName(this.form.userAddressData[2]), + homeAddr: this.form.userHomeAddr, + marrStatus: this.form.userMarrStatus + }; + console.log(this.form.userMarrStatus) + if (this.form.userMarrStatus == '20') { + sessionStorage.userMarrStatus = "HW" + } else { + sessionStorage.userMarrStatus = "" + + } + SysApi.savePersonal(listInfo).then( + res => { + this.$router.push({ + path: '/bnd/credit/companyInfo', query: {prodId: _this.$route.query.prodId} + }); + }, error => { + statusCodeManage.showTipOfStatusCode(error) + } + ); + + }, + // 弹窗 + validateTip(errorMsg) { + return this.$vux.toast.show({ + width: 'auto', + type: 'text', + text: errorMsg, + time: 2000, + position: 'middle' + }); + }, + // 得到选项列表统一的方法 + getOptionsList(optionList) { + let tmpList = []; + if (optionList instanceof Array) { + optionList.forEach(function (item) { + tmpList.push({ + key: item.code, + value: item.name + }); + }); + } + return tmpList; + }, + //返回上一页 + goBackPage() { + // 如果是第一步的话,那么返回到上一个页面 + if (this.activePageItem <= 1) { + this.$router.back(); + // 不是的话,那么显示上一步 + } else { + this.activePageItem--; + this.isLastStep = this.pageList.length === this.activePageItem; + } + }, + }, + activated: function () { + this.init(); + } + + }; +</script> + +<style lang="less"> + @import "../../../style/mixin.less"; + + .loan-info-box { + background-color: @color-background-default; + + .vux-header { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + .vux-header-left { + .left-arrow:before { + border: solid 1px @color-white; + border-width: 2px 0 0 2px; + } + } + } + .progressState div p { + font-size: @font-size-tiny; + } + .weui-wepay-flow__state { + width: 16px; + height: 16px; + top: -1px; + padding-top: 1px; + } + .currentStep .weui-wepay-flow__state { + width: 16px; + height: 16px; + padding-top: 1px; + border: 1px solid @color-primary; + color: @color-primary; + border-radius: 50%; + background-color: @color-white; + } + .weui-input { + height: 28px; + line-height: 28px; + } + .weui-wepay-flow, .weui-wepay-flow-auto { + padding: 10px 40px 30px; + background: @color-white; + } + .weui-wepay-flow__li_done .weui-wepay-flow__state, + .weui-wepay-flow__process { + background-color: @color-primary; + } + } + + .weui-label { + font-size: @font-size-base; + } + + .header-space { + height: 46px; + } + + .loan-info-box .weui-cell_select .weui-select { + padding-right: 2.5rem; + direction: rtl; + } + + .loan-info-box .weui-input { + text-align: right; + font-size: @font-size-medium; + } + + .loan-info-box .weui-btn_primary { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + } + + /*------------------------------*/ + .vux-no-group-title { + margin-top: 0.77rem !important; + } + + .loan-info-box .currentStep .weui-wepay-flow__state { + background-color: @color-primary; + color: @color-white !important; + line-height: 1rem; + } + + .weui-wepay-flow__li.weui-wepay-flow__li .weui-wepay-flow__state { + width: 1.33333rem; + height: 1.33333rem; + border-radius: 1.58333rem; + color: @color-text-third; + line-height: 1.33333rem; + } + + .loan-info-box .weui-wepay-flow, .loan-info-box .weui-wepay-flow-auto { + padding: 0.83333rem 2.33333rem 2.5rem; + } + + .porcolor p { + color: @color-primary; + } + + .weui-btn:after { + border: none !important; + } + + select { + font-size: @font-size-medium !important; + } + + .weui-btn:after { + border: none !important; + } + + .weui-btn { + font-size: @font-size-primary !important; + } + + .address_list { + .vux-popup-picker-select { + span { + font-size: @font-size-medium; + position: relative; + top: -0.1rem; + } + } + } + +</style> diff --git a/src/views/bnd/credit/messageCode.vue b/src/views/bnd/credit/messageCode.vue new file mode 100644 index 0000000..e520dcb --- /dev/null +++ b/src/views/bnd/credit/messageCode.vue @@ -0,0 +1,365 @@ +<template> + <div class="loan-info-box"> + <x-header slot="header" + style="width:100%;height:46px;background-color: #ec6758" + title="短信验证码" + :left-options="{backText: '', preventGoBack:true}" + @on-click-back="goBackPage" + ></x-header> + <div class="Code_ls"> + <h4>请注意查收短信验证码,并完成短信认证。</h4> + <span>手机号码</span><span v-text="newPhoneNum">12312</span> + </div> + <div id="code" class="code_input"> + <x-input placeholder="请输入短信验证码" + :max="6" + :min="6" + type="text" + v-model.trim="checkform.code" + > + </x-input> + <span v-if="codeSecond===-1" @click="getCode">获取验证码</span> + <span v-else class="count">{{codeSecond}}秒后重发</span> + </div> + <div style="height: 20px"></div> + <box gap="0 15px"> + <x-button type="primary" @click.native="handleNextStep">确认贷款</x-button> + </box> + <div style="height: 20px"></div> + </div> +</template> + +<script> + import { + Flow, + FlowState, + FlowLine, + XHeader, + Group, + GroupTitle, + Cell, + XInput, + Selector, + XButton, + Box, + Actionsheet + } from 'vux'; + + import FSpace from '../../../components/common/FSpace.vue'; + import validate from '../../../tool/validator'; + import SysApi from '../../../api/api' + import statusCodeManage from '../../../api/statusCodeManage' + + export default { + name: 'messageCode', + data() { + return { + checkform: { + code: '' + }, // 初始化的用户信息 + isLastStep: false, // 是否是最后一步 + activePageItem: 0, // 激活当前页 + pageList: [], // 一共有几页 + count: '', + newPhoneNum: '', + codeSecond: -1,//验证码倒计时 + + }; + }, + components: { + Group, + GroupTitle, + Cell, + XInput, + Selector, + XHeader, + XButton, + Box, + Flow, + FlowState, + FlowLine, + Actionsheet, + FSpace + }, + activated: function () { + this.init(); + this.getCode(); + }, + methods: { + init() { + this.newPhoneNum = sessionStorage.newPhoneNum + }, + //下一步跳转 + handleNextStep() { + if (validate.checkValEmpty(this.checkform.code)) { + this.validateTip('请输入验证码'); + return false; + } + let _this = this; + let checkform = { + prodId: this.$route.query.prodId, + codeType: 2, + code: this.checkform.code + }; + SysApi.checkCode(checkform).then( + res => { + this.$router.push({ + path: '/bnd/credit/subSuss', query: {prodId: _this.$route.query.prodId,} + }); + }, error => { + statusCodeManage.showTipOfStatusCode(error) + } + ); + }, + + // 弹窗 + validateTip(errorMsg) { + return this.$vux.toast.show({ + width: 'auto', + type: 'text', + text: errorMsg, + time: 2000, + position: 'middle' + }); + }, + // 得到选项列表统一的方法 + getOptionsList(optionList) { + let tmpList = []; + if (optionList instanceof Array) { + optionList.forEach(function (item) { + tmpList.push({ + key: item.code, + value: item.name + }); + }); + } + return tmpList; + }, + //返回上一页 + goBackPage() { + // 如果是第一步的话,那么返回到上一个页面 + if (this.activePageItem <= 1) { + this.$router.back(); + // 不是的话,那么显示上一步 + } else { + this.activePageItem--; + this.isLastStep = this.pageList.length === this.activePageItem; + } + }, + //验证码倒计时 + getCode() { + this.codeSecond = 60; + let timer = setInterval(() => this.codeSecond === -1 ? clearInterval(timer) : this.codeSecond--, 1000); + //调用发送验证码接口 + SysApi.resendCode({codeType: 1, prodId: this.$route.query.prodId}).then(res => { + }, err => { + statusCodeManage.showTipOfStatusCode(err); + this.codeSecond = -1 + }) + }, + + }, + + }; +</script> + +<style lang="less"> + @import "../../../style/mixin.less"; + + .loan-info-box { + background-color: @color-background-default; + .vux-header { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + .vux-header-left { + .left-arrow:before { + border: solid 1px @color-white; + border-width: 2px 0 0 2px; + } + } + } + .progressState div p { + font-size: @font-size-tiny; + } + .weui-wepay-flow__state { + width: 16px; + height: 16px; + top: -1px; + padding-top: 1px; + } + .currentStep .weui-wepay-flow__state { + width: 16px; + height: 16px; + padding-top: 1px; + border: 1px solid @color-primary; + color: @color-primary; + border-radius: 50%; + background-color: @color-white; + } + .weui-input { + height: 28px; + line-height: 28px; + } + .weui-wepay-flow, .weui-wepay-flow-auto { + padding: 10px 40px 30px; + background: @color-white; + } + .weui-wepay-flow__li_done .weui-wepay-flow__state, + .weui-wepay-flow__process { + background-color: @color-primary; + } + } + + .weui-wepay-flow { + background-color: @color-white; + } + + .left-arrow:before { + border-color: @color-white; + } + + .weui-cells__title { + margin: 0 !important; + font-size: 16PX !important; + } + + .weui-input, .weui-cell__bd { + font-size: @font-size-base; + } + + .weui-label { + font-size: @font-size-base; + } + + .personInfo ::-webkit-input-placeholder { /* WebKit browsers */ + color: #bfbfbf; + } + + .personInfo :-moz-placeholder { /* Mozilla Firefox 4 to 18 */ + color: #bfbfbf; + } + + .personInfo ::-moz-placeholder { /* Mozilla Firefox 19+ */ + color: #bfbfbf; + } + + .personInfo :-ms-input-placeholder { /* Internet Explorer 10+ */ + color: #bfbfbf; + } + + .header-space { + height: 46px; + } + + .loan-info-box .weui-cell_select .weui-select { + padding-right: 2.5rem; + direction: rtl; + } + + .loan-info-box .weui-input { + text-align: right; + } + + .loan-info-box .weui-btn_primary { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + } + + .loan-info-box .weui-btn_primary:not(.weui-btn_disabled):active { + color: rgba(255, 255, 255, 0.6); + background-color: rgb(241, 95, 79);; + } + + /*------------------------------*/ + .Code_ls { + padding: 0.25rem 1.25rem; + h4 { + padding-bottom: 1.2rem; + padding-top: 1rem; + font-size: @font-size-medium; + font-weight: normal; + color: @color-text-primary; + } + span { + color: @color-text-third; + display: inline-block; + } + span:last-child { + margin-left: 0.5rem; + } + } + + .vux-no-group-title { + margin-top: 0.77rem !important; + } + + .loan-info-box .currentStep .weui-wepay-flow__state { + background-color: @color-primary; + color: @color-white !important; + line-height: 1rem; + } + + .weui-wepay-flow__li.weui-wepay-flow__li .weui-wepay-flow__state { + width: 1.33333rem; + height: 1.33333rem; + border-radius: 1.58333rem; + color: @color-text-third; + line-height: 1.33333rem; + } + + .loan-info-box .weui-input { + text-align: left; + } + + .porcolor p { + color: @color-primary; + } + + #code.code_input { + padding: 1rem 1.25rem; + background-color: @color-white !important; + font-size: @font-size-medium; + overflow: hidden; + .weui-cell { + margin: 0px; + padding: 0px; + width: 69%; + float: left; + .weui-cell__bd { + width: 70%; + display: inline-block; + } + .weui-cell__ft { + display: inline-block; + } + } + input { + border: none; + width: 100%; + text-align: left !important; + outline: none; + font-size: @font-size-medium; + } + span { + display: inline-block; + font-size: @font-size-medium; + color: @color-text-third; + padding: 0.25rem 0; + border-left: 1px solid @color-text-third; + text-align: center; + width: 30%; + float: left; + } + + } + + .weui-cell__ft button { + background-color: @color-white !important; + } + + .weui-btn:after { + border: none !important; + } + + .weui-btn { + font-size: @font-size-primary !important; + } +</style> diff --git a/src/views/bnd/credit/passwordInfo.vue b/src/views/bnd/credit/passwordInfo.vue new file mode 100644 index 0000000..bb19888 --- /dev/null +++ b/src/views/bnd/credit/passwordInfo.vue @@ -0,0 +1,317 @@ +<template> + <div class="loan-info-box"> + <x-header slot="header" + style="width:100%;height:46px;background-color: #ec6758" + title="设置交易密码" + :left-options="{backText: '', preventGoBack:true}" + @on-click-back="goBackPage" + ></x-header> + <flow class="progressState"> + <flow-state state="1" title="填写资料" class="currentStep porcolor"></flow-state> + <flow-line is-done></flow-line> + <flow-state state="2" title="绑定银行卡"></flow-state> + <flow-line></flow-line> + <flow-state state="3" title="照片上传"></flow-state> + <flow-line></flow-line> + <flow-state state="4" title="三方授权"></flow-state> + <flow-line></flow-line> + <flow-state state="5" title="提交申请"></flow-state> + </flow> + <group class="personInfo" text-align="right"> + <x-input title="交易密码" + :max="6" + :min="6" + placeholder="请输入6位数字" + v-model.trim="pwd" + type="password" + ></x-input> + <x-input title="确认交易密码" + :max="6" + :min="6" + placeholder="请输入6位数字" + v-model.trim="confirmPwd" + type="password" + ></x-input> + + </group> + <div style="height: 20px"></div> + <box gap="0 15px"> + <x-button type="primary" @click.native="handleUpStep">上一步</x-button> + <x-button type="primary" @click.native="handleNextStep">下一步</x-button> + </box> + <div style="height: 20px"></div> + </div> +</template> + +<script> + import { + Flow, + FlowState, + FlowLine, + XHeader, + Group, + GroupTitle, + Cell, + XInput, + Selector, + XButton, + Box, + Actionsheet, + md5 + } from 'vux'; + import FSpace from '../../../components/common/FSpace.vue'; + import validate from '../../../tool/validator'; + import SysApi from '../../../api/api'; + import statusCodeManage from '../../../api/statusCodeManage' + + export default { + name: 'passwordInfo', + data() { + return { + savepwd: { + pwd: '', + confirmPwd: '' + }, // 初始化的用户信息 + isLastStep: false, // 是否是最后一步 + activePageItem: 0, // 激活当前页 + pageList: [], // 一共有几页 + }; + }, + + methods: { + + //上一步跳转 + handleUpStep() { + this.$router.push({ + path: '/bnd/credit/contactInfo', query: {prodId: this.$route.query.prodId} + }); + }, + //下一步的表单验证及提交 + handleNextStep() { + if (validate.checkValEmpty(this.pwd)) { + this.validateTip('请输入交易密码'); + return false; + } + if (validate.checkValEmpty(this.confirmPwd)) { + this.validateTip('请输入确认交易密码'); + return false; + } + if (this.confirmPwd !== this.pwd) { + this.validateTip('两次密码输入不一致'); + return false; + } + if (!validate.checkVerifyCode(this.confirmPwd)) { + this.validateTip('请输入6位数字密码'); + return false; + } + + + let _this = this; + let _phoneNum = window.sessionStorage.getItem("newPhoneNum"); + let savepwd = { + prodId: this.$route.query.prodId, + pwd: md5(_phoneNum + this.pwd) // 用户手机号+用户所填密码 然后进行Md5加密 + }; + SysApi.savePwd(savepwd).then( + res => { + this.$router.push({ + path: '/bnd/credit/bankInfo', query: {prodId: this.$route.query.prodId} + }); + }, error => { + statusCodeManage.showTipOfStatusCode(error) + } + ) + }, + // 弹窗 + validateTip(errorMsg) { + return this.$vux.toast.show({ + width: 'auto', + type: 'text', + text: errorMsg, + time: 2000, + position: 'middle' + }); + }, + // 得到选项列表统一的方法 + getOptionsList(optionList) { + let tmpList = []; + if (optionList instanceof Array) { + optionList.forEach(function (item) { + tmpList.push({ + key: item.code, + value: item.name + }); + }); + } + return tmpList; + }, + //返回上一页 + goBackPage() { + // 如果是第一步的话,那么返回到上一个页面 + if (this.activePageItem <= 1) { + this.$router.back(); + // 不是的话,那么显示上一步 + } else { + this.activePageItem--; + this.isLastStep = this.pageList.length === this.activePageItem; + } + }, + }, + components: { + Group, + GroupTitle, + Cell, + XInput, + XHeader, + XButton, + Box, + Flow, + FlowState, + FlowLine, + FSpace, + md5 + } + }; +</script> + +<style lang="less"> + @import "../../../style/mixin.less"; + + .loan-info-box { + background-color: @color-background-default; + .vux-header { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + .vux-header-left { + .left-arrow:before { + border: solid 1px @color-white; + border-width: 2px 0 0 2px; + } + } + } + .progressState div p { + font-size: @font-size-tiny; + } + .weui-wepay-flow__state { + width: 16px; + height: 16px; + top: -1px; + padding-top: 1px; + } + .currentStep .weui-wepay-flow__state { + width: 16px; + height: 16px; + padding-top: 1px; + border: 1px solid @color-primary; + color: @color-primary; + border-radius: 50%; + background-color: @color-white; + } + .weui-input { + height: 28px; + line-height: 28px; + } + .weui-wepay-flow, .weui-wepay-flow-auto { + padding: 10px 40px 30px; + background: @color-white; + } + .weui-wepay-flow__li_done .weui-wepay-flow__state, + .weui-wepay-flow__process { + background-color: @color-primary; + } + } + + .weui-wepay-flow { + background-color: @color-white; + } + + .left-arrow:before { + border-color: @color-white; + } + + .weui-cells__title { + margin: 0 !important; + font-size: 16PX !important; + } + + .weui-input, .weui-cell__bd { + font-size: @font-size-base; + } + + .weui-label { + font-size: @font-size-base; + } + + .personInfo ::-webkit-input-placeholder { /* WebKit browsers */ + color: #bfbfbf; + } + + .personInfo :-moz-placeholder { /* Mozilla Firefox 4 to 18 */ + color: #bfbfbf; + } + + .personInfo ::-moz-placeholder { /* Mozilla Firefox 19+ */ + color: #bfbfbf; + } + + .personInfo :-ms-input-placeholder { /* Internet Explorer 10+ */ + color: #bfbfbf; + } + + .header-space { + height: 46px; + } + + .loan-info-box .weui-cell_select .weui-select { + padding-right: 2.5rem; + direction: rtl; + } + + .loan-info-box .weui-input { + text-align: right; + font-size: @font-size-medium; + } + + .loan-info-box .weui-btn_primary { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + } + + .loan-info-box .weui-btn_primary:not(.weui-btn_disabled):active { + color: rgba(255, 255, 255, 0.6); + background-color: rgb(241, 95, 79);; + } + + /*------------------------------*/ + .vux-no-group-title { + margin-top: 0.77rem !important; + } + + .loan-info-box .currentStep .weui-wepay-flow__state { + background-color: @color-primary; + color: @color-white !important; + line-height: 1rem; + } + + .weui-wepay-flow__li.weui-wepay-flow__li .weui-wepay-flow__state { + width: 1.33333rem; + height: 1.33333rem; + border-radius: 1.58333rem; + color: @color-text-third; + line-height: 1.33333rem; + } + + .loan-info-box .weui-wepay-flow, .loan-info-box .weui-wepay-flow-auto { + padding: 0.83333rem 2.33333rem 2.5rem; + } + + .porcolor p { + color: @color-primary; + } + + .weui-btn:after { + border: none !important; + } + + .weui-btn { + font-size: @font-size-primary !important; + } +</style> diff --git a/src/views/bnd/credit/personalChanges.vue b/src/views/bnd/credit/personalChanges.vue new file mode 100644 index 0000000..262133d --- /dev/null +++ b/src/views/bnd/credit/personalChanges.vue @@ -0,0 +1,433 @@ +<template> + <div class="loan-info-box"> + <x-header slot="header" + style="width:100%;height:46px;background-color: #ec6758" + title="个人基本信息" + :left-options="{backText: '', preventGoBack:true}" + @on-click-back="goBackPage" + ></x-header> + <flow class="progressState"> + <flow-state state="1" title="填写资料" class="currentStep porcolor"></flow-state> + <flow-line is-done></flow-line> + <flow-state state="2" title="绑定银行卡" class="currentStep porcolor"></flow-state> + <flow-line is-done></flow-line> + <flow-state state="3" title="照片上传" class="currentStep porcolor"></flow-state> + <flow-line is-done></flow-line> + <flow-state state="4" title="三方授权" class="currentStep porcolor"></flow-state> + <flow-line is-done></flow-line> + <flow-state state="5" title="提交申请" class="currentStep porcolor"></flow-state> + </flow> + <group class="personInfo" text-align="right"> + <x-input title="姓名" + :max="10" + placeholder="请输入姓名" + v-model.trim="form.userName" + disabled + ></x-input> + <x-input title="身份证号" + :max="18" + :min="18" + placeholder="请输入身份证号" + v-model.trim="form.cardID" + disabled + ></x-input> + </group> + <group> + <selector + title="最高学历" + :options="degreeList" + placeholder="请选择" + v-model='form.userDegree' + ></selector> + </group> + <group> + <selector title="现居住状况" + :options="residenceStatusList" + placeholder="请选择" + v-model="form.userResidenceStatus" + @on-change="selectMaritalStatus" + ></selector> + <x-address title="所在地区" + class="address_list" + raw-value="true" + :list="addressData" + v-model="form.userAddressData" + placeholder="请选择" + ></x-address> + <x-input title="详细地址" + placeholder="请输入您的详细地址" + :max="50" + v-model.trim="form.userHomeAddr" + ></x-input> + </group> + <group> + <selector title="婚否状况" + :options="marrStatusList" + placeholder="请选择" + v-model="form.userMarrStatus" + ></selector> + </group> + <div style="height: 20px"></div> + <box gap="0 15px"> + <x-button type="primary" @click.native="gohome">取消修改</x-button> + <x-button type="primary" @click.native="goback">确认修改</x-button> + </box> + <div style="height: 20px"></div> + </div> +</template> + +<script> + import { + Flow, + FlowState, + FlowLine, + XHeader, + Group, + GroupTitle, + XInput, + Selector, + XButton, + Box, + XAddress, + ChinaAddressV4Data + } from 'vux'; + + import FSpace from '../../../components/common/FSpace.vue'; + import SysApi from '../../../api/api' + import statusCodeManage from '../../../api/statusCodeManage' + import validate from '../../../tool/validator'; + + export default { + name: 'personalChanges', + data() { + return { + form: { + userName: '', + cardID: '', + userDegree: '', + userResidenceStatus: '', + userAddressData: [], + userHomeAddr: '', + userMarrStatus: '' + }, + personalInfo: { + relMobile2: null, + relMobile: null, + }, // 初始化的用户信息 + isLastStep: false, // 是否是最后一步 + activePageItem: 0, // 激活当前页 + pageList: [], // 一共有几页 + addressData: ChinaAddressV4Data,//地址 + +// userDegreeList: [], //最高学历 +// userResidenceStatusList: [], //现居住状况 +// userAddressData: [], //地区 +// userHomeAddr: '', //详细地址 +// userMarrStatusList: [], //婚否 + + degreeList: [], + residenceStatusList: [], + marrStatusList: [] + }; + }, + components: { + Group, + GroupTitle, + XInput, + Selector, + XHeader, + XButton, + Box, + Flow, + FlowState, + FlowLine, + FSpace, + XAddress, + ChinaAddressV4Data + }, + computed: {}, + methods: { + //地址转值 + getAddressName(val) { + for (let i = 0, j = this.addressData.length; i < j; i++) { + if (val == this.addressData[i].value) { + return this.addressData[i].name + } + } + }, + + //初始化个人基本信息 + init() { + let _this = this; + let init = { + prodId: this.$route.query.prodId, + saveType: 1, + } + SysApi.textListGeren(init).then( + res => { + console.log(res); + _this.form.userName = res.body.userName; + _this.form.cardID = res.body.idNo; + + _this.degreeList = _this.getOptionsList(res.body.degreeList); + _this.form.userDegree = res.body.degree; + + _this.residenceStatusList = _this.getOptionsList(res.body.residenceStatusList); + _this.form.userResidenceStatus = res.body.residenceStatus; + + _this.form.userAddressData = [res.body.homeProv, res.body.homeCity, res.body.homeArea]; + + _this.form.userHomeAddr = res.body.homeAddr; + + _this.marrStatusList = _this.getOptionsList(res.body.marrStatusList); + _this.form.userMarrStatus = res.body.marrStatus; + + }, error => { + statusCodeManage.showTipOfStatusCode(error) + } + ); + }, + gohome() { + this.$router.push({ + path: '/bnd/credit/infoOk', query: {prodId: this.$route.query.prodId} + }); + }, + //下一步的表单验证及提交 + goback() { + let _this = this; + if (validate.checkValEmpty(this.form.userName)) { + this.validateTip('请输入姓名'); + return false; + } + if (validate.checkValEmpty(this.form.cardID)) { + this.validateTip('请输入身份证号'); + return false; + } + if (validate.checkValEmpty(this.form.userDegree)) { + this.validateTip('请选择最高学历'); + return false; + } + if (validate.checkValEmpty(this.form.userResidenceStatus)) { + this.validateTip('请选择现居住状况'); + return false; + } + if (validate.checkValEmpty(this.form.userAddressData)) { + this.validateTip('请选择所在地区'); + return false; + } + if (validate.checkValEmpty(this.form.userHomeAddr)) { + this.validateTip('请输入详细地址'); + return false; + } + if (validate.checkValEmpty(this.form.userMarrStatus)) { + this.validateTip('请选择婚否'); + return false; + } + // 检查内容的合理性 + if (!validate.checkName(this.form.userName)) { + this.validateTip('请输入2-10个长度中文'); + return false; + } + if (!validate.checkIDCard(this.form.cardID)) { + this.validateTip('请输入正确的身份证号'); + return false; + } + + let listInfo = { + //pordId通过路由传递 + prodId: this.$route.query.prodId, + saveType: 2, + userName: this.form.userName, + idNo: this.form.cardID, + degree: this.form.userDegree, + residenceStatus: this.form.userResidenceStatus, + + homeProv: this.getAddressName(this.form.userAddressData[0]), + homeCity: this.getAddressName(this.form.userAddressData[1]), + homeArea: this.getAddressName(this.form.userAddressData[2]), + homeAddr: this.form.userHomeAddr, + marrStatus: this.form.userMarrStatus + }; + console.log(this.form.userMarrStatus) + if (this.form.userMarrStatus == '20') { + sessionStorage.userMarrStatus = "HW" + } else { + sessionStorage.userMarrStatus = "" + + } + SysApi.savePersonal(listInfo).then( + res => { + this.$router.push({ + path: '/bnd/credit/infoOk', query: {prodId: _this.$route.query.prodId} + }); + }, error => { + statusCodeManage.showTipOfStatusCode(error) + } + ); + + }, + // 弹窗 + validateTip(errorMsg) { + return this.$vux.toast.show({ + width: 'auto', + type: 'text', + text: errorMsg, + time: 2000, + position: 'middle' + }); + }, + // 得到选项列表统一的方法 + getOptionsList(optionList) { + let tmpList = []; + if (optionList instanceof Array) { + optionList.forEach(function (item) { + tmpList.push({ + key: item.code, + value: item.name + }); + }); + } + return tmpList; + }, + //返回上一页 + goBackPage() { + // 如果是第一步的话,那么返回到上一个页面 + if (this.activePageItem <= 1) { + this.$router.back(); + // 不是的话,那么显示上一步 + } else { + this.activePageItem--; + this.isLastStep = this.pageList.length === this.activePageItem; + } + }, + }, + activated: function () { + this.init(); + } + + }; +</script> + +<style lang="less"> + @import "../../../style/mixin.less"; + + .loan-info-box { + background-color: @color-background-default; + + .vux-header { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + .vux-header-left { + .left-arrow:before { + border: solid 1px @color-white; + border-width: 2px 0 0 2px; + } + } + } + .progressState div p { + font-size: @font-size-tiny; + } + .weui-wepay-flow__state { + width: 16px; + height: 16px; + top: -1px; + padding-top: 1px; + } + .currentStep .weui-wepay-flow__state { + width: 16px; + height: 16px; + padding-top: 1px; + border: 1px solid @color-primary; + color: @color-primary; + border-radius: 50%; + background-color: @color-white; + } + .weui-input { + height: 28px; + line-height: 28px; + } + .weui-wepay-flow, .weui-wepay-flow-auto { + padding: 10px 40px 30px; + background: @color-white; + } + .weui-wepay-flow__li_done .weui-wepay-flow__state, + .weui-wepay-flow__process { + background-color: @color-primary; + } + } + + .weui-label { + font-size: @font-size-base; + } + + .header-space { + height: 46px; + } + + .loan-info-box .weui-cell_select .weui-select { + padding-right: 2.5rem; + direction: rtl; + } + + .loan-info-box .weui-input { + text-align: right; + font-size: @font-size-medium; + } + + .loan-info-box .weui-btn_primary { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + } + + /*------------------------------*/ + .vux-no-group-title { + margin-top: 0.77rem !important; + } + + .loan-info-box .currentStep .weui-wepay-flow__state { + background-color: @color-primary; + color: @color-white !important; + line-height: 1rem; + } + + .weui-wepay-flow__li.weui-wepay-flow__li .weui-wepay-flow__state { + width: 1.33333rem; + height: 1.33333rem; + border-radius: 1.58333rem; + color: @color-text-third; + line-height: 1.33333rem; + } + + .loan-info-box .weui-wepay-flow, .loan-info-box .weui-wepay-flow-auto { + padding: 0.83333rem 2.33333rem 2.5rem; + } + + .porcolor p { + color: @color-primary; + } + + .weui-btn:after { + border: none !important; + } + + select { + font-size: @font-size-medium !important; + } + + .weui-btn:after { + border: none !important; + } + + .weui-btn { + font-size: @font-size-primary !important; + } + + .address_list { + .vux-popup-picker-select { + span { + font-size: @font-size-medium; + position: relative; + top: -0.1rem; + } + } + } + +</style> diff --git a/src/views/bnd/credit/pictureUp.vue b/src/views/bnd/credit/pictureUp.vue new file mode 100644 index 0000000..27a4112 --- /dev/null +++ b/src/views/bnd/credit/pictureUp.vue @@ -0,0 +1,412 @@ +<template> + <div class="loan-info-box"> + <x-header slot="header" + style="width:100%;height:46px;background-color: #ec6758" + title="照片审核" + :left-options="{backText: '', preventGoBack:true}" + @on-click-back="goBackPage" + ></x-header> + <flow class="progressState"> + <flow-state state="1" title="填写资料" class="currentStep porcolor"></flow-state> + <flow-line is-done></flow-line> + <flow-state state="2" title="绑定银行卡" class="currentStep porcolor"></flow-state> + <flow-line is-done></flow-line> + <flow-state state="3" title="照片上传" class="currentStep porcolor"></flow-state> + <flow-line></flow-line> + <flow-state state="4" title="三方授权"></flow-state> + <flow-line></flow-line> + <flow-state state="5" title="提交申请"></flow-state> + </flow> + <div v-if="resultCode===2"> + <div class="success_okandno"> + <div> + <i class="iconfont icon-iconfontdengdai"></i> + </div> + <h2>等待处理</h2> + </div> + <div class="bindingSuccee"> + <p> + 照片上传中,预计时间2分钟,您可点击“刷新”查询绑定结果 + </p> + </div> + <div style="height: 20px"></div> + <box gap="0 15px"> + <x-button type="primary" @click.native="Refresh">刷新</x-button> + </box> + <div style="height: 20px"></div> + </div> + <div v-if="resultCode===1"> + <div class="success_okandno"> + <div> + <i class="iconfont icon-roundcheckfill-copy"></i> + </div> + <h2>上传成功</h2> + </div> + <div class="bindingSuccee"> + <p> + 您的影像资料已上传成功,请点击 “下一步” + 进行芝麻授权 + </p> + </div> + <div style="height: 20px"></div> + <box gap="0 15px"> + <x-button type="primary" @click.native="handleNextStep">下一步</x-button> + </box> + <div style="height: 20px"></div> + </div> + <div v-if="resultCode===0"> + <div class="success_okandno"> + <div> + <i class="iconfont icon-roundclosefill"></i> + </div> + <h2>上传失败</h2> + </div> + <div class="bindingSuccee"> + <p> + 您的影像资料上传失败,请点击 “重新上传” + 进行重新上传影像资料 + </p> + </div> + <div style="height: 20px"></div> + <box gap="0 15px"> + <x-button type="primary" @click.native="gobackId">重新上传</x-button> + </box> + <div style="height: 20px"></div> + </div> + </div> +</template> + +<script> + import { + Flow, + FlowState, + FlowLine, + XHeader, + Group, + GroupTitle, + Cell, + XInput, + Selector, + XButton, + Box, + Actionsheet, + Msg + } from 'vux'; + import FSpace from '../../../components/common/FSpace.vue'; + import validate from '../../../tool/validator'; + import SysApi from '../../../api/api' + import statusCodeManage from '../../../api/statusCodeManage' + + export default { + name: 'pictureUp', + data() { + return { + personalInfo: { + relMobile2: null, + relMobile: null + }, // 初始化的用户信息 + isLastStep: false, // 是否是最后一步 + activePageItem: 0, // 激活当前页 + pageList: [], // 一共有几页 + + resultCode: 2, + }; + }, + + methods: { + //初始化状态 + initPie() { + let _this = this; + let prodId = { + prodId: this.$route.query.prodId, + resultType: 2, + }; + SysApi.result(prodId).then( + res => { + console.log(res); + _this.resultCode = res.body.resultCode; + }, error => { + statusCodeManage.showTipOfStatusCode(error) + } + ) + }, + + //刷新 + Refresh() { + this.initPie(); + }, + //授权成功下一步路由 + handleNextStep() { + //prodId: this.$route.query.prodId, + this.$router.push({path: '/bnd/credit/sesame', query: {prodId: this.$route.query.prodId}}); + }, + //重新上传 + gobackId() { + this.$router.push({path: '/bnd/credit/idPicture', query: {prodId: this.$route.query.prodId}}) + }, + + //返回上一页 + goBackPage() { + // 如果是第一步的话,那么返回到上一个页面 + if (this.activePageItem <= 1) { + this.$router.back(); + // 不是的话,那么显示上一步 + } else { + this.activePageItem--; + this.isLastStep = this.pageList.length === this.activePageItem; + } + }, + // 得到选项列表统一的方法 + getOptionsList(optionList) { + let tmpList = []; + if (optionList instanceof Array) { + optionList.forEach(function (item) { + tmpList.push({ + key: item.code, + value: item.name + }); + }); + } + return tmpList; + }, + + }, + activated: function () { + this.initPie(); + }, + components: { + Group, + GroupTitle, + Cell, + XInput, + Selector, + XHeader, + XButton, + Box, + Flow, + FlowState, + FlowLine, + Actionsheet, + FSpace, + Msg + } + }; +</script> + +<style lang="less"> + @import "../../../style/mixin.less"; + + .loan-info-box { + background-color: @color-background-default; + .vux-header { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + .vux-header-left { + .left-arrow:before { + border: solid 1px @color-white; + border-width: 2px 0 0 2px; + } + } + } + .progressState div p { + font-size: @font-size-tiny; + } + .weui-wepay-flow__state { + width: 16px; + height: 16px; + top: -1px; + padding-top: 1px; + } + .currentStep .weui-wepay-flow__state { + width: 16px; + height: 16px; + padding-top: 1px; + border: 1px solid @color-primary; + color: @color-primary; + border-radius: 50%; + background-color: @color-white; + } + .weui-input { + height: 28px; + line-height: 28px; + } + .weui-wepay-flow, .weui-wepay-flow-auto { + padding: 10px 40px 30px; + background: @color-white; + } + .weui-wepay-flow__li_done .weui-wepay-flow__state, + .weui-wepay-flow__process { + background-color: @color-primary; + } + } + + .weui-wepay-flow { + background-color: @color-white; + } + + .left-arrow:before { + border-color: @color-white; + } + + .weui-cells__title { + margin: 0 !important; + font-size: 16PX !important; + } + + .weui-input, .weui-cell__bd { + font-size: @font-size-base; + } + + .weui-label { + font-size: @font-size-base; + } + + .personInfo ::-webkit-input-placeholder { /* WebKit browsers */ + color: #bfbfbf; + } + + .personInfo :-moz-placeholder { /* Mozilla Firefox 4 to 18 */ + color: #bfbfbf; + } + + .personInfo ::-moz-placeholder { /* Mozilla Firefox 19+ */ + color: #bfbfbf; + } + + .personInfo :-ms-input-placeholder { /* Internet Explorer 10+ */ + color: #bfbfbf; + } + + .header-space { + height: 46px; + } + + .loan-info-box .weui-cell_select .weui-select { + padding-right: 2.5rem; + direction: rtl; + } + + .loan-info-box .weui-btn_primary { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + } + + .loan-info-box .weui-btn_primary:not(.weui-btn_disabled):active { + color: rgba(255, 255, 255, 0.6); + background-color: rgb(241, 95, 79);; + } + + /*------------------------------*/ + .Code_ls { + padding: 0.25rem 1.25rem; + h4 { + padding-bottom: 2rem; + padding-top: 1rem; + font-size: 1.2rem; + font-weight: normal; + color: @color-text-primary; + } + span { + color: @color-text-third; + display: inline-block; + } + span:last-child { + margin-left: 0.5rem; + } + } + + .vux-no-group-title { + margin-top: 0.77rem !important; + } + + .loan-info-box .currentStep .weui-wepay-flow__state { + background-color: @color-primary; + color: @color-white !important; + line-height: 1rem; + } + + .weui-wepay-flow__li.weui-wepay-flow__li .weui-wepay-flow__state { + width: 1.33333rem; + height: 1.33333rem; + border-radius: 1.58333rem; + color: @color-text-third; + line-height: 1.33333rem; + } + + .loan-info-box .weui-wepay-flow, .loan-info-box .weui-wepay-flow-auto { + padding: 0.83333rem 2.33333rem 2.5rem; + } + + .loan-info-box .weui-input { + text-align: left; + } + + .porcolor p { + color: @color-primary; + } + + .weui-btn weui-btn_mini weui-btn_primary { + background-color: @color-white !important; + } + + .weui-msg__icon-area i { + color: @color-primary !important; + } + + .bindingSuccee { + text-align: center; + p { + text-align: center; + color: @color-text-third; + font-size: @font-size-medium; + width: 25rem; + margin: 0 auto; + + } + + } + + .weui-msg__icon-area { + margin-bottom: -1.2rem !important; + } + + .success_okandno { + width: 6.5rem; + margin: 0 auto; + padding: 3rem 0; + img { + width: 100%; + } + h2 { + font-weight: normal; + font-size: @font-size-primary; + text-align: center; + } + } + + .success_okandno { + div { + text-align: center; + height: 8rem; + } + } + + .iconfont { + font-size: 6rem; + color: #0092f1; + } + + .icon-roundclosefill { + color: #ff4d53 !important; + } + + .loan-info-box .weui-wepay-flow, .loan-info-box .weui-wepay-flow-auto { + padding: 0.83333rem 2.33333rem 2.5rem; + } + + .weui-btn:after { + border: none !important; + } + + .weui-btn { + font-size: @font-size-primary !important; + } +</style> diff --git a/src/views/bnd/credit/sesame.vue b/src/views/bnd/credit/sesame.vue new file mode 100644 index 0000000..27c6778 --- /dev/null +++ b/src/views/bnd/credit/sesame.vue @@ -0,0 +1,324 @@ +<template> + <div class="loan-info-box"> + <x-header slot="header" + style="width:100%;height:46px;background-color: #ec6758" + title="芝麻授权" + :left-options="{backText: '', preventGoBack:true}" + @on-click-back="goBackPage" + ></x-header> + <!--<box gap="0 15px">--> + <!--<x-button type="primary" @click.native="handleNextStep">下一步</x-button>--> + <!--</box>--> + + </div> +</template> + +<script> + import { + Flow, + FlowState, + FlowLine, + XHeader, + Group, + GroupTitle, + Cell, + XInput, + Selector, + XButton, + Box, + Actionsheet + } from 'vux'; + + import FSpace from '../../../components/common/FSpace.vue'; + import SysApi from '../../../api/api' + import statusCodeManage from '../../../api/statusCodeManage' + + export default { + name: 'sesame', + data() { + return { + isLastStep: false, // 是否是最后一步 + activePageItem: 0, // 激活当前页 + pageList: [], // 一共有几页 + url: '' + }; + }, + + methods: { + //初始化芝麻页面 + initgetUrl() { + let _this = this; +// let _callbackUrl = `https://t.finlean.com/finlean_wallets/#/bnd/credit/authorization?prodId=${this.$route.query.prodId}`; + let _callbackUrl = 'https://' + window.location.host + window.location.pathname + '#' + '/bnd/credit/authorization?' + 'prodId=' + this.$route.query.prodId; + let prodId = { + prodId: this.$route.query.prodId, + urlType: 1, + callBackUrl: _callbackUrl + }; + SysApi.getUrl(prodId).then( + res => { + console.log(res) + _this.url = res.body.url; + window.location.href = _this.url; +// window.open('http://www.baidu.com'); + }, error => { + statusCodeManage.showTipOfStatusCode(error) + } + ) + }, + + //下一步跳转路由 +// handleNextStep() { +// this.$router.push({path: '/bnd/credit/authorization', query: {prodId: this.$route.query.prodId}}); +// }, + //返回上一页 + goBackPage() { + // 如果是第一步的话,那么返回到上一个页面 + if (this.activePageItem <= 1) { + this.$router.back(); + // 不是的话,那么显示上一步 + } else { + this.activePageItem--; + this.isLastStep = this.pageList.length === this.activePageItem; + } + }, + // 得到选项列表统一的方法 + getOptionsList(optionList) { + let tmpList = []; + if (optionList instanceof Array) { + optionList.forEach(function (item) { + tmpList.push({ + key: item.code, + value: item.name + }); + }); + } + return tmpList; + }, + + }, + activated: function () { + this.initgetUrl(); + + }, + components: { + Group, + GroupTitle, + Cell, + XInput, + Selector, + XHeader, + XButton, + Box, + Flow, + FlowState, + FlowLine, + Actionsheet, + FSpace + } + }; +</script> +<style lang="less"> + @import "../../../style/mixin.less"; + + .loan-info-box { + background-color: @color-background-default; + .vux-header { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + .vux-header-left { + .left-arrow:before { + border: solid 1px @color-white; + border-width: 2px 0 0 2px; + } + } + } + .progressState div p { + font-size: @font-size-tiny; + } + .weui-wepay-flow__state { + width: 16px; + height: 16px; + top: -1px; + padding-top: 1px; + } + .currentStep .weui-wepay-flow__state { + width: 16px; + height: 16px; + padding-top: 1px; + border: 1px solid @color-primary; + color: @color-primary; + border-radius: 50%; + background-color: @color-white; + } + .weui-input { + height: 28px; + line-height: 28px; + } + .weui-wepay-flow, .weui-wepay-flow-auto { + padding: 10px 40px 30px; + background: @color-white; + } + .weui-wepay-flow__li_done .weui-wepay-flow__state, + .weui-wepay-flow__process { + background-color: @color-primary; + } + } + + .weui-wepay-flow { + background-color: @color-white; + } + + .left-arrow:before { + border-color: @color-white; + } + + .weui-cells__title { + margin: 0 !important; + font-size: 16PX !important; + } + + .weui-input, .weui-cell__bd { + font-size: @font-size-base; + } + + .weui-label { + font-size: @font-size-base; + } + + .personInfo ::-webkit-input-placeholder { /* WebKit browsers */ + color: #bfbfbf; + } + + .personInfo :-moz-placeholder { /* Mozilla Firefox 4 to 18 */ + color: #bfbfbf; + } + + .personInfo ::-moz-placeholder { /* Mozilla Firefox 19+ */ + color: #bfbfbf; + } + + .personInfo :-ms-input-placeholder { /* Internet Explorer 10+ */ + color: #bfbfbf; + } + + .header-space { + height: 46px; + } + + .loan-info-box .weui-cell_select .weui-select { + padding-right: 2.5rem; + direction: rtl; + } + + .loan-info-box .weui-input { + text-align: right; + } + + .loan-info-box .weui-btn_primary { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + } + + .loan-info-box .weui-btn_primary:not(.weui-btn_disabled):active { + color: rgba(255, 255, 255, 0.6); + background-color: rgb(241, 95, 79);; + } + + /*------------------------------*/ + .Code_ls { + padding: 0.25rem 1.25rem; + h4 { + padding-bottom: 2rem; + padding-top: 1rem; + font-size: 1.2rem; + font-weight: normal; + color: @color-text-primary; + } + span { + color: @color-text-third; + display: inline-block; + } + span:last-child { + margin-left: 0.5rem; + } + } + + .vux-no-group-title { + margin-top: 0.77rem !important; + } + + .loan-info-box .currentStep .weui-wepay-flow__state { + background-color: @color-primary; + color: @color-white !important; + line-height: 1rem; + } + + .weui-wepay-flow__li.weui-wepay-flow__li .weui-wepay-flow__state { + width: 1.33333rem; + height: 1.33333rem; + border-radius: 1.58333rem; + color: @color-text-third; + line-height: 1.33333rem; + } + + .loan-info-box .weui-input { + text-align: left; + } + + .porcolor p { + color: @color-primary; + } + + .weui-btn weui-btn_mini weui-btn_primary { + background-color: @color-white !important; + } + + .weui-msg__icon-area i { + color: @color-primary !important; + } + + .bindingSuccee { + text-align: center; + p { + text-align: center; + color: @color-text-third; + font-size: @font-size-medium; + width: 25rem; + margin: 0 auto; + } + } + + .weui-msg__icon-area { + margin-bottom: -1.2rem !important; + } + + .success_okandno { + width: 6.5rem; + margin: 0 auto; + padding: 3rem 0; + img { + width: 100%; + } + h2 { + font-weight: normal; + font-size: @font-size-primary; + text-align: center; + } + } + + .iconfont { + font-size: 6rem; + color: #0092f1; + } + + .loan-info-box .weui-wepay-flow, .loan-info-box .weui-wepay-flow-auto { + padding: 0.83333rem 2.33333rem 2.5rem; + } + + .weui-btn:after { + border: none !important; + } + + .weui-btn { + font-size: @font-size-primary !important; + } +</style> diff --git a/src/views/bnd/credit/subSuss.vue b/src/views/bnd/credit/subSuss.vue new file mode 100644 index 0000000..e0bb2aa --- /dev/null +++ b/src/views/bnd/credit/subSuss.vue @@ -0,0 +1,392 @@ +<template> + <div class="loan-info-box"> + <x-header slot="header" + style="width:100%;height:46px;background-color: #ec6758" + title="提交成功" + :left-options="{backText: '', preventGoBack:true}" + @on-click-back="goBackPage" + ></x-header> + <div v-if="resultCode===2"> + <div class="success_okandno"> + <div> + <i class="iconfont icon-iconfontdengdai"></i> + </div> + <h2>等待处理</h2> + </div> + <div class="bindingSuccee"> + <p> + 您的申请已提交,预计会在1个工作日内完成审批,请耐心等待 + </p> + </div> + <div style="height: 20px"></div> + <box gap="0 15px"> + <x-button type="primary" @click.native="goHome">退出</x-button> + </box> + <div style="height: 20px"></div> + </div> + <div v-if="resultCode===1"> + <div class="success_okandno"> + <div> + <i class="iconfont icon-roundcheckfill-copy"></i> + </div> + <h2>授信成功</h2> + </div> + <div class="bindingSuccee"> + <p> + 恭喜您授信成功,额度为<span>20000</span>元,额度有效期至<span>2011年11月11日</span>。 + </p> + </div> + <div style="height: 20px"></div> + <box gap="0 15px"> + <x-button type="primary" @click.native="bindPassnext">开始贷款</x-button> + </box> + <div style="height: 20px"></div> + </div> + <div v-if="resultCode===0"> + <div class="success_okandno"> + <div> + <i class="iconfont icon-roundclosefill Failred"></i> + </div> + <h2>授信失败</h2> + </div> + <div class="bindingSuccee"> + <p> + 非常抱歉,额度审核失败,请3个月后再试。 + </p> + </div> + <div style="height: 20px"></div> + <p style="text-align: center;padding-bottom: 10px;color: #999">申请日期:<span>2011/11/11</span></p> + <box gap="0 15px"> + <x-button type="primary" @click.native="anewBind">退出</x-button> + </box> + <div style="height: 20px"></div> + </div> + </div> +</template> + +<script> + import { + Flow, + FlowState, + FlowLine, + XHeader, + Group, + GroupTitle, + Cell, + XInput, + Selector, + XButton, + Box, + Actionsheet, + Msg + } from 'vux'; + import FSpace from '../../../components/common/FSpace.vue'; + import SysApi from '../../../api/api' + import statusCodeManage from '../../../api/statusCodeManage' + + export default { + name: 'subSuccess', + data() { + return { + + isLastStep: false, // 是否是最后一步 + activePageItem: 0, // 激活当前页 + pageList: [], // 一共有几页 + resultCode: 2 + }; + }, + + methods: { + //等待审核初始化 + initResult() { + let _this = this; + let prodId = { + prodId: this.$route.query.prodId, + resultType: 4, + }; + SysApi.result(prodId).then( + res => { + console.log(res); + _this.resultCode = res.body.resultCode; + }, error => { + statusCodeManage.showTipOfStatusCode(error) + } + ) + }, + + //授信成功 + bindPassnext() { + this.$router.push({path: '/bnd/loan/quota', query: {prodId: this.$route.query.prodId,}}) + }, + //授信失败 + anewBind() { + + }, + goBackPage() { + // 如果是第一步的话,那么返回到上一个页面 + if (this.activePageItem <= 1) { + this.$router.back(); + // 不是的话,那么显示上一步 + } else { + this.activePageItem--; + this.isLastStep = this.pageList.length === this.activePageItem; + } + }, + // 得到选项列表统一的方法 + getOptionsList(optionList) { + let tmpList = []; + if (optionList instanceof Array) { + optionList.forEach(function (item) { + tmpList.push({ + key: item.code, + value: item.name + }); + }); + } + return tmpList; + }, + validateTip(errorMsg) { + return this.$vux.toast.show({ + width: 'auto', + type: 'text', + text: errorMsg, + time: 2000, + position: 'middle' + }); + }, + }, + activated: function () { + this.initResult(); + }, + components: { + Group, + GroupTitle, + Cell, + XInput, + Selector, + XHeader, + XButton, + Box, + Flow, + FlowState, + FlowLine, + Actionsheet, + FSpace, + Msg + } + }; +</script> + +<style lang="less"> + @import "../../../style/mixin.less"; + + .loan-info-box { + background-color: @color-background-default; + .vux-header { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + .vux-header-left { + .left-arrow:before { + border: solid 1px @color-white; + border-width: 2px 0 0 2px; + } + } + } + .progressState div p { + font-size: @font-size-tiny; + } + .weui-wepay-flow__state { + width: 16px; + height: 16px; + top: -1px; + padding-top: 1px; + } + .currentStep .weui-wepay-flow__state { + width: 16px; + height: 16px; + padding-top: 1px; + border: 1px solid @color-primary; + color: @color-primary; + border-radius: 50%; + background-color: @color-white; + } + .weui-input { + height: 28px; + line-height: 28px; + } + .weui-wepay-flow, .weui-wepay-flow-auto { + padding: 10px 40px 30px; + background: @color-white; + } + .weui-wepay-flow__li_done .weui-wepay-flow__state, + .weui-wepay-flow__process { + background-color: @color-primary; + } + } + + .weui-wepay-flow { + background-color: @color-white; + } + + .left-arrow:before { + border-color: @color-white; + } + + .weui-cells__title { + margin: 0 !important; + font-size: 16PX !important; + } + + .weui-input, .weui-cell__bd { + font-size: @font-size-base; + } + + .weui-label { + font-size: @font-size-base; + } + + .personInfo ::-webkit-input-placeholder { /* WebKit browsers */ + color: #bfbfbf; + } + + .personInfo :-moz-placeholder { /* Mozilla Firefox 4 to 18 */ + color: #bfbfbf; + } + + .personInfo ::-moz-placeholder { /* Mozilla Firefox 19+ */ + color: #bfbfbf; + } + + .personInfo :-ms-input-placeholder { /* Internet Explorer 10+ */ + color: #bfbfbf; + } + + .header-space { + height: 46px; + } + + .loan-info-box .weui-cell_select .weui-select { + padding-right: 2.5rem; + direction: rtl; + } + + .loan-info-box .weui-input { + text-align: right; + } + + .loan-info-box .weui-btn_primary { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + } + + .loan-info-box .weui-btn_primary:not(.weui-btn_disabled):active { + color: rgba(255, 255, 255, 0.6); + background-color: rgb(241, 95, 79);; + } + + /*------------------------------*/ + .Code_ls { + padding: 0.25rem 1.25rem; + h4 { + padding-bottom: 2rem; + padding-top: 1rem; + font-size: 1.2rem; + font-weight: normal; + color: @color-text-primary; + } + span { + color: @color-text-third; + display: inline-block; + } + span:last-child { + margin-left: 0.5rem; + } + } + + .vux-no-group-title { + margin-top: 0.77rem !important; + } + + .loan-info-box .currentStep .weui-wepay-flow__state { + background-color: @color-primary; + color: @color-white !important; + line-height: 1rem; + } + + .weui-wepay-flow__li.weui-wepay-flow__li .weui-wepay-flow__state { + width: 1.33333rem; + height: 1.33333rem; + } + + .weui-wepay-flow__li.weui-wepay-flow__li .weui-wepay-flow__state { + color: @color-text-third; + line-height: 1rem; + } + + .loan-info-box .weui-input { + text-align: left; + } + + .porcolor p { + color: @color-primary; + } + + .weui-btn weui-btn_mini weui-btn_primary { + background-color: @color-white !important; + } + + .weui-msg__icon-area i { + color: @color-primary !important; + } + + .bindingSuccee { + text-align: center; + p { + text-align: center; + color: @color-text-third; + font-size: 1.2rem; + width: 25rem; + margin: 0 auto; + } + + } + + .weui-msg__icon-area { + margin-bottom: -1.2rem !important; + } + + .weui-btn-area h2 { + font-weight: normal; + font-size: 1.6rem; + } + + .success_okandno { + width: 6.5rem; + margin: 0 auto; + padding: 3rem 0; + div { + text-align: center; + height: 8rem; + } + h2 { + font-weight: normal; + font-size: @font-size-primary; + text-align: center; + } + } + + .iconfont { + font-size: 6rem; + color: #0092f1; + } + + .Failred { + color: #ff4d53 !important; + } + + .weui-btn:after { + border: none !important; + } + + .weui-btn { + font-size: @font-size-primary !important; + } +</style> diff --git a/src/views/bnd/credit/waitForHandle.vue b/src/views/bnd/credit/waitForHandle.vue new file mode 100644 index 0000000..41ba178 --- /dev/null +++ b/src/views/bnd/credit/waitForHandle.vue @@ -0,0 +1,392 @@ +<template> + <div class="loan-info-box"> + <x-header slot="header" + style="width:100%;height:46px;background-color: #ec6758" + title="等待处理" + :left-options="{backText: '', preventGoBack:true}" + @on-click-back="goBackPage" + ></x-header> + <flow class="progressState"> + <flow-state state="1" title="填写资料" class="currentStep porcolor"></flow-state> + <flow-line is-done></flow-line> + <flow-state state="2" title="绑定银行卡" class="currentStep porcolor"></flow-state> + <flow-line></flow-line> + <flow-state state="3" title="照片上传"></flow-state> + <flow-line></flow-line> + <flow-state state="4" title="三方授权"></flow-state> + <flow-line></flow-line> + <flow-state state="5" title="提交申请"></flow-state> + </flow> + <div v-if="resultCode===2"> + <div class="success_okandno"> + <div> + <i class="iconfont icon-iconfontdengdai"></i> + </div> + <h2>等待处理</h2> + </div> + <div class="bindingSuccee"> + <p> + 银行卡绑定中,预计时间2分钟,您可点击“刷新”查询绑定结果 + </p> + </div> + <div style="height: 20px"></div> + <box gap="0 15px"> + <x-button type="primary" @click.native="Refresh">刷新</x-button> + </box> + <div style="height: 20px"></div> + </div> + <div v-if="resultCode===1"> + <div class="success_okandno"> + <div> + <i class="iconfont icon-roundcheckfill-copy"></i> + </div> + <h2>绑卡成功</h2> + </div> + <div class="bindingSuccee"> + <p> + 您的银行卡已绑定成功,请点击“下一步” + 上传影像资料 + </p> + </div> + <div style="height: 20px"></div> + <box gap="0 15px"> + <x-button type="primary" @click.native="bindPassnext">下一步</x-button> + </box> + <div style="height: 20px"></div> + </div> + <div v-if="resultCode===0"> + <div class="success_okandno"> + <div> + <i class="iconfont icon-roundclosefill Failred"></i> + </div> + <h2>绑定失败</h2> + </div> + <div class="bindingSuccee"> + <p> + 银行卡绑定失败,请核对银行卡信息并重新绑定。 + </p> + </div> + <div style="height: 20px"></div> + <box gap="0 15px"> + <x-button type="primary" @click.native="anewBind">重新绑定</x-button> + </box> + <div style="height: 20px"></div> + </div> + </div> +</template> + +<script> + import { + Flow, + FlowState, + FlowLine, + XHeader, + Group, + GroupTitle, + Cell, + XInput, + Selector, + XButton, + Box, + Actionsheet + } from 'vux'; + + import FSpace from '../../../components/common/FSpace.vue'; + import validate from '../../../tool/validator'; + import SysApi from '../../../api/api' + import statusCodeManage from '../../../api/statusCodeManage' + + export default { + name: 'waitForHandle', + data() { + return { + isLastStep: false, // 是否是最后一步 + activePageItem: 0, // 激活当前页 + pageList: [], // 一共有几页 + resultCode: 2 + }; + }, + components: { + Group, + GroupTitle, + Cell, + XInput, + Selector, + XHeader, + XButton, + Box, + Flow, + FlowState, + FlowLine, + Actionsheet, + FSpace + }, + methods: { + //等待审核初始化 + initResult() { + let _this = this; + let prodId = { + prodId: this.$route.query.prodId, + resultType: 1, + }; + SysApi.result(prodId).then( + res => { + console.log(res); + _this.resultCode = res.body.resultCode; + }, error => { + statusCodeManage.showTipOfStatusCode(error) + } + ) + }, + + //刷新 + Refresh() { + this.initResult(); + }, + //绑定成功下一步 + bindPassnext() { + this.$router.push({ + path: '/bnd/credit/idPicture', query: {prodId: this.$route.query.prodId,} + }); + }, + //绑定失败返回 + anewBind() { + this.$router.push({ + path: '/bnd/credit/bankInfo', query: {prodId: this.$route.query.prodId,} + }); + }, + + //返回上一页 + goBackPage() { + // 如果是第一步的话,那么返回到上一个页面 + if (this.activePageItem <= 1) { + this.$router.back(); + // 不是的话,那么显示上一步 + } else { + this.activePageItem--; + this.isLastStep = this.pageList.length === this.activePageItem; + } + }, + + }, + activated: function () { + this.initResult() + }, + }; +</script> +<style lang="less"> + @import "../../../style/mixin.less"; + + + .loan-info-box { + background-color: @color-background-default; + .vux-header { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + .vux-header-left { + .left-arrow:before { + border: solid 1px @color-white; + border-width: 2px 0 0 2px; + } + } + } + .progressState div p { + font-size: @font-size-tiny; + } + .weui-wepay-flow__state { + width: 16px; + height: 16px; + top: -1px; + padding-top: 1px; + } + .currentStep .weui-wepay-flow__state { + width: 16px; + height: 16px; + padding-top: 1px; + border: 1px solid @color-primary; + color: @color-primary; + border-radius: 50%; + background-color: @color-white; + } + .weui-input { + height: 28px; + line-height: 28px; + } + .weui-wepay-flow, .weui-wepay-flow-auto { + padding: 10px 40px 30px; + background: @color-white; + } + .weui-wepay-flow__li_done .weui-wepay-flow__state, + .weui-wepay-flow__process { + background-color: @color-primary; + } + } + + .weui-wepay-flow { + background-color: @color-white; + } + + .left-arrow:before { + border-color: @color-white; + } + + .weui-cells__title { + margin: 0 !important; + font-size: 16PX !important; + } + + .weui-input, .weui-cell__bd { + font-size: @font-size-base; + } + + .weui-label { + font-size: @font-size-base; + } + + .personInfo ::-webkit-input-placeholder { /* WebKit browsers */ + color: #bfbfbf; + } + + .personInfo :-moz-placeholder { /* Mozilla Firefox 4 to 18 */ + color: #bfbfbf; + } + + .personInfo ::-moz-placeholder { /* Mozilla Firefox 19+ */ + color: #bfbfbf; + } + + .personInfo :-ms-input-placeholder { /* Internet Explorer 10+ */ + color: #bfbfbf; + } + + .header-space { + height: 46px; + } + + .loan-info-box .weui-cell_select .weui-select { + padding-right: 2.5rem; + direction: rtl; + } + + .loan-info-box .weui-input { + text-align: right; + } + + .loan-info-box .weui-btn_primary { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + } + + .loan-info-box .weui-btn_primary:not(.weui-btn_disabled):active { + color: rgba(255, 255, 255, 0.6); + background-color: rgb(241, 95, 79);; + } + + /*------------------------------*/ + .Code_ls { + padding: 0.25rem 1.25rem; + h4 { + padding-bottom: 2rem; + padding-top: 1rem; + font-size: 1.2rem; + font-weight: normal; + color: @color-text-primary; + } + span { + color: @color-text-third; + display: inline-block; + } + span:last-child { + margin-left: 0.5rem; + } + } + + .vux-no-group-title { + margin-top: 0.77rem !important; + } + + .loan-info-box .currentStep .weui-wepay-flow__state { + background-color: @color-primary; + color: @color-white !important; + line-height: 1rem; + } + + .weui-wepay-flow__li.weui-wepay-flow__li .weui-wepay-flow__state { + width: 1.33333rem; + height: 1.33333rem; + border-radius: 1.58333rem; + color: @color-text-third; + line-height: 1.33333rem; + } + + .loan-info-box .weui-input { + text-align: left; + } + + .porcolor p { + color: @color-primary; + } + + .weui-btn weui-btn_mini weui-btn_primary { + background-color: @color-white !important; + } + + .weui-msg__icon-area i { + color: @color-primary !important; + } + + .bindingSuccee { + text-align: center; + p { + text-align: center; + color: @color-text-third; + font-size: @font-size-medium; + width: 25rem; + margin: 0 auto; + } + } + + .iconfont { + font-size: 6rem; + color: #0092f1; + } + + .weui-msg__icon-area { + margin-bottom: -1.2rem !important; + } + + .success_okandno { + div { + text-align: center; + height: 8rem; + } + } + + .success_okandno { + width: 6.5rem; + margin: 0 auto; + padding: 3rem 0; + img { + width: 100%; + } + h2 { + font-weight: normal; + font-size: @font-size-primary; + text-align: center; + } + } + + .loan-info-box .weui-wepay-flow, .loan-info-box .weui-wepay-flow-auto { + padding: 0.83333rem 2.33333rem 2.5rem; + } + + .Failred { + color: #ff4d53 !important; + } + + .weui-btn:after { + border: none !important; + } + + .weui-btn { + font-size: @font-size-primary !important; + } +</style> diff --git a/src/views/bnd/loan/loanInfo.vue b/src/views/bnd/loan/loanInfo.vue new file mode 100644 index 0000000..9adc9af --- /dev/null +++ b/src/views/bnd/loan/loanInfo.vue @@ -0,0 +1,314 @@ +<template> + <div class="loan-info-box"> + <x-header slot="header" + style="width:100%;height:46px;background-color: #ec6758; " + title="借款" + :left-options="{backText: ''}"> + </x-header> + <div class="loan_jiekuan"> + <h4>按日计息,日利率{{loanInfo.dayRate}}%,单笔最低贷款1,000元</h4> + <div> + <img src="../../../assets/imgs/yinghangbiaozhi.jpg" alt=""> + <span>{{loanInfo.bankName}}</span><span>({{loanInfo.bankCardNo}})</span> + </div> + </div> + <group class="personInfo" text-align="right"> + <div class="loanMoney_l"> + <p>贷款金额</p> + <!--(可贷金额:<b style="color: #0092f1;">{{loanInfo.creditLimitAvailable|formatMoney}}</b>元)--> + <div class="inputBox"> + <x-input v-model.trim="loanAmt" type="tel" title="¥" placeholder="请输入贷款金额" + required @on-blur="trial" @input.native="inputChange"></x-input> + <span @click="loanAmt=loanInfo.creditLimitAvailable">全部借出</span> + </div> + </div> + <selector title="还款期数" :options="loanTermList" placeholder="请选择" + v-model="loanTerm" @on-change="trial"></selector> + <selector title="贷款用途" :options="loanUseList" placeholder="请选择" + v-model="loanUse" @on-change="trial"></selector> + <cell title="还款方式">{{loanInfo.repayType}}</cell> + <cell title="首次还款日">{{showFormDate(repayTrial.firstRepayDay)}}</cell> + <cell title="固定还款日">暂定</cell> + <cell title="每期还款金额">{{repayTrial.repayAmt|formatMoney}}</cell> + </group> + <div style="height: 40px"></div> + <box gap="0 15px"> + <x-button v-if="canClick" type="primary" @click.native="goQoutaInfo">下一步</x-button> + <x-button v-else type="" @click.native="clickTips">下一步</x-button> + </box> + <div class="nuber_l">客户热线:<span>{{loanInfo.customerHotline}}</span></div> + <div style="height: 20px"></div> + </div> +</template> + +<script> + import { + XHeader, + XInput, + Group, + Cell, + Selector, + XButton, + Box + } from 'vux'; + import SysApi from '../../../api/api'; + import validate from '../../../tool/validator'; + import fToast from '../../../tool/fToast'; + import statusCodeManage from '../../../api/statusCodeManage'; + import formDate from '../../../tool/date'; + + export default { + name: 'loanInfo', + components: { + XHeader, + Group, + XInput, + Cell, + Selector, + XButton, + Box + }, + data() { + return { + //贷款信息数据 + loanInfo: {}, + //贷款用途列表 + loanUseList: [], + //当前选择的贷款用途 + loanUse: null, + //还款期数列表 + loanTermList: [], + //当前选择的还款期数 + loanTerm: null, + //当前输入的贷款金额 + loanAmt: null, + //借款试算结果 + repayTrial: {} + }; + }, + filters: { + // 金额格式化 + formatMoney(val) { + return validate.formatMoney(val) + '元' + } + }, + computed: { + canClick() { + return this.loanAmt && Number(this.loanAmt) % 100 === 0 && this.loanUse && this.loanTerm + } + }, + methods: { + //格式化日期 + showFormDate(dateTime) { + return formDate(dateTime, 'MM-DD') || '暂定'; + }, + //贷款金额输入框input事件,过滤非数字、不是整百 + inputChange() { + setTimeout(() => { + if (this.loanAmt) { + if (this.loanAmt.length > 9) { + this.loanAmt = this.loanAmt.substring(0, 9); + } else { + this.loanAmt = this.loanAmt.replace(/[^\d]/g, ''); + if (Number(this.loanAmt) > Number(this.loanInfo.creditLimitAvailable)) { + this.loanAmt = this.loanInfo.creditLimitAvailable + } + } + } + }, 1); + }, + //未填写数据时,文字提示 + clickTips() { + if (validate.checkValEmpty(this.loanAmt)) { + fToast.toast('请输入贷款金额'); + return; + } else if (Number(this.loanAmt) % 100) { + fToast.toast('请输入整百贷款金额'); + return; + } + if (validate.checkValEmpty(this.loanTerm)) { + fToast.toast('请选择还款期数'); + return; + } + if (validate.checkValEmpty(this.loanUse)) { + fToast.toast('请选择贷款用途'); + } + }, + //跳转到【贷款信息确认】页面 + goQoutaInfo() { + sessionStorage.loanInfo = JSON.stringify(Object.assign({}, this.loanInfo, this.repayTrial, { + loanAmt: this.loanAmt, + loanTerm: this.loanTerm, + loanUse: this.loanUse, + repayType: '等额本息' + })); + this.$router.push({path: '/bnd/loan/quotaInfo'}); + }, + //借款试算接口 + trial() { + if (Number(this.loanAmt) % 100) { + fToast.toast('请输入整百贷款金额'); + } else { + if (this.canClick) { + SysApi.trial({ + prodId: sessionStorage.prodId, + loanAmt: this.loanAmt, + loanTerm: this.loanTerm + }).then(res => { + this.repayTrial = res.body + }, err => { + statusCodeManage.showTipOfStatusCode(err) + }) + } + } + }, + // 得到选项列表统一的方法 + getOptionsList(optionList) { + let tmpList = []; + if (optionList instanceof Array) { + optionList.forEach(function (item) { + tmpList.push({ + key: item.code, + value: item.name + }); + }); + } + return tmpList; + }, + // 初始化我的贷款页面接口:获取【我的贷款】信息:如可用额度、总额度等等 + initMyLoan() { + this.loanInfo = JSON.parse(sessionStorage.loanInfo); + this.loanInfo.repayType = '等额本息'; + this.loanUseList = this.getOptionsList(this.loanInfo.loanUseList); + this.loanTermList = this.getOptionsList(this.loanInfo.loanTermList); + } + }, + activated() { + this.initMyLoan() + } + }; +</script> + +<style lang="less"> + @import "../../../style/mixin.less"; + + .loan-info-box { + background-color: @color-background-default; + .vux-header { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + .vux-header-left { + .left-arrow:before { + border: solid 1px @color-white; + border-width: 2px 0 0 2px; + } + } + } + .weui-cells { + margin-top: 0; + } + } + + .weui-input, .weui-cell__bd { + font-size: @font-size-base; + } + + .weui-label { + font-size: @font-size-base; + } + + .loan-info-box .weui-cell_select .weui-select { + padding-right: 2.5rem; + direction: rtl; + font-size: @font-size-medium; + } + + .loan-info-box .weui-btn_primary { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + } + + .loan-info-box .weui-btn_primary:not(.weui-btn_disabled):active { + color: rgba(255, 255, 255, 0.6); + background-color: rgb(241, 95, 79);; + } + + /*------------------------------*/ + + .nuber_l { + text-align: center; + font-size: @font-size-medium; + width: 100%; + height: 2.5rem; + padding-top: 3rem; + span { + display: inline-block; + color: @color-primary; + text-decoration: underline; + } + } + + .loan_jiekuan { + h4 { + color: @color-text-third; + font-size: @font-size-small; + font-weight: normal; + padding: 0.5rem 1rem; + } + div { + padding: 1rem; + background: @color-white; + } + div > img { + width: 1.25rem; + height: 1.25rem; + vertical-align: middle; + padding-right: 0.5rem; + } + div > span { + font-size: @font-size-base; + vertical-align: middle; + } + } + + .vux-label { + font-size: @font-size-base !important; + } + + .weui-cell__ft { + font-size: @font-size-medium !important; + color: @color-black !important; + } + + .loanMoney_l { + padding: 1rem 1.25rem; + padding-bottom: 0; + position: relative; + p { + font-size: @font-size-base; + padding-bottom: 0.5rem; + } + .inputBox { + display: flex; + align-items: center; + justify-content: space-between; + .weui-cell { + padding: 0.83333rem 0; + } + span { + width: 80px; + text-align: right; + font-size: @font-size-medium; + color: @color-primary; + } + } + + } + + .weui-btn:after { + border: none !important; + } + + .weui-btn { + font-size: @font-size-primary !important; + } + +</style> diff --git a/src/views/bnd/loan/loanMessage.vue b/src/views/bnd/loan/loanMessage.vue new file mode 100644 index 0000000..7089efe --- /dev/null +++ b/src/views/bnd/loan/loanMessage.vue @@ -0,0 +1,192 @@ +<template> + <div class="loan-info-box"> + <x-header slot="header" + style="width:100%;height:46px;background-color: #ec6758" + title="短信验证码" + :left-options="{backText: ''}"></x-header> + <div class="Code_ls"> + <h4>为了您的账户安全,需要进行短信验证</h4> + <span>手机号码</span><span>{{userPhone}}</span> + </div> + <div id="code" class="code_input"> + <x-input placeholder="请输入短信验证码" + :max="6" + :min="6" + type="tel" + v-model.trim="code" + @input.native="inputChange"> + </x-input> + <span v-if="codeSecond===-1" @click="getCode">获取验证码</span> + <span v-else class="count">{{codeSecond}}秒后重发</span> + </div> + <div style="height: 20px"></div> + <box class="btn" gap="0 15px"> + <x-button type="primary" link="BACK">上一步</x-button> + <x-button :type="code.length===6?'primary':''" :disabled="code.length!==6" @click.native="checkCode">确认贷款 + </x-button> + </box> + <div style="height: 20px"></div> + </div> +</template> + +<script> + import {XHeader, XInput, XButton, Box} from 'vux'; + import validate from '../../../tool/validator'; + import fToast from '../../../tool/fToast'; + import SysApi from '../../../api/api' + import statusCodeManage from '../../../api/statusCodeManage'; + + export default { + name: 'loanMessage', + components: {XHeader, XInput, XButton, Box}, + data() { + return { + code: '',//输入的验证码 + codeSecond: -1,//验证码倒计时秒数 + }; + }, + computed: { + userPhone() { + return validate.formatPhone(sessionStorage.newPhoneNum) + } + }, + methods: { + //验证码输入框input事件,过滤非数字 + inputChange() { + setTimeout(() => { + if (this.code) this.code = this.code.replace(/[^\d]/g, ''); + }, 1); + }, + //确认贷款按钮事件 + checkCode() { + if (validate.checkValEmpty(this.code)) { + fToast.toast('请输入验证码'); + return; + } + //调用校验验证码接口 + SysApi.checkCode({ + prodId: sessionStorage.prodId, + code: this.code, + codeType: 3 + }).then(res => { + this.$router.push({path: '/bnd/loan/subSuccess'}); + }, err => { + statusCodeManage.showTipOfStatusCode(err) + }) + }, + //发送验证码、验证码倒计时 + getCode() { + this.codeSecond = 60; + let timer = setInterval(() => this.codeSecond === -1 ? clearInterval(timer) : this.codeSecond--, 1000); + //调用发送验证码接口 + SysApi.resendCode({ + prodId: sessionStorage.prodId, + codeType: 3 + }).then(res => { + }, err => { + statusCodeManage.showTipOfStatusCode(err); + this.codeSecond = -1 + }) + }, + }, + activated() { + this.codeSecond = 60; + let timer = setInterval(() => this.codeSecond === -1 ? clearInterval(timer) : this.codeSecond--, 1000); + } + }; +</script> + +<style lang="less"> + @import "../../../style/mixin.less"; + + .loan-info-box { + background-color: @color-background-default; + .vux-header { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + .vux-header-left { + .left-arrow:before { + border: solid 1px @color-white; + border-width: 2px 0 0 2px; + } + } + } + } + + .loan-info-box .weui-btn_primary { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + } + + .loan-info-box .weui-btn_primary:not(.weui-btn_disabled):active { + color: rgba(255, 255, 255, 0.6); + background-color: rgb(241, 95, 79);; + } + + /*------------------------------*/ + .Code_ls { + padding: 0.25rem 1.25rem; + h4 { + padding-bottom: 1.2rem; + padding-top: 1rem; + font-size: @font-size-medium; + font-weight: normal; + color: @color-text-primary; + } + span { + color: @color-text-third; + display: inline-block; + } + span:last-child { + margin-left: 0.5rem; + } + } + + #code.code_input { + padding: 1rem 1.25rem; + background-color: @color-white !important; + font-size: @font-size-medium; + overflow: hidden; + .weui-cell { + margin: 0px; + padding: 0px; + width: 69%; + float: left; + .weui-cell__bd { + width: 70%; + display: inline-block; + } + .weui-cell__ft { + display: inline-block; + } + } + input { + border: none; + width: 100%; + text-align: left !important; + outline: none; + font-size: @font-size-medium; + } + span { + display: inline-block; + font-size: @font-size-medium; + color: @color-text-third; + padding: 0.25rem 0; + border-left: 1px solid @color-text-third; + text-align: center; + width: 30%; + float: left; + } + + } + + .weui-cell__ft button { + background-color: @color-white !important; + } + + .weui-btn:after { + border: none !important; + } + + .weui-btn { + font-size: @font-size-primary !important; + } +</style> diff --git a/src/views/bnd/loan/modifyPasswrod.vue b/src/views/bnd/loan/modifyPasswrod.vue new file mode 100644 index 0000000..9e1aea1 --- /dev/null +++ b/src/views/bnd/loan/modifyPasswrod.vue @@ -0,0 +1,163 @@ +<template> + <div class="loan-info-box"> + <x-header slot="header" + style="width:100%;height:46px;background-color: #ec6758" + title="修改交易密码" + :left-options="{backText: ''}"></x-header> + <group class="personInfo xInput"> + <x-input text-align="right" v-model.trim="oldPwd" type="password" title="原交易密码" :min="6" :max="6" + placeholder="请输入6位数字" + required @on-blur="checkPwd"></x-input> + <x-input text-align="right" v-model.trim="newPwd" type="password" title="新交易密码" :min="6" :max="6" + placeholder="请输入6位数字" + required @on-blur="checkNewPwd"></x-input> + <x-input text-align="right" v-model.trim="confirmPwd" type="password" title="确认交易密码" :min="6" :max="6" + placeholder="请再次输入密码" + required @on-blur="checkConfirmPwd"></x-input> + </group> + <div style="height: 20px"></div> + <box gap="0 15px"> + <x-button :type="canClick? 'primary' : ''" @click.native="changePwd" :disabled="!canClick">确认修改 + </x-button> + </box> + <div style="height: 20px"></div> + </div> +</template> + +<script> + import {XHeader, Group, XInput, XButton, Box, md5} from 'vux'; + import SysApi from '../../../api/api'; + import validate from '../../../tool/validator'; + import fToast from '../../../tool/fToast'; + import statusCodeManage from '../../../api/statusCodeManage'; + + export default { + name: 'modifyPasswrod', + components: {XHeader, Group, XInput, XButton, Box}, + data() { + return { + isLastStep: false, // 是否是最后一步 + activePageItem: 0, // 激活当前页 + pageList: [], // 一共有几页 + oldPwd: '',//原交易密码 + newPwd: '',//新交易密码 + confirmPwd: '' //确认交易密码 + }; + }, + computed: { + canClick() { + return this.oldPwd.length === 6 && this.newPwd.length === 6 && this.confirmPwd.length === 6 + } + }, + methods: { + //验证密码是否为纯6位数字 + checkPwd(pwd = this.oldPwd) { + let res = validate.checkVerifyCode(pwd); + if (!res) fToast.toast('请输入6位数字密码'); + return res + }, + //检查新密码是否与原密码相等 + checkNewPwd() { + if (this.checkPwd(this.newPwd)) { + if (this.newPwd.length === 6 && this.newPwd === this.oldPwd) { + fToast.toast('新密码不能原密码相同'); + return true; + } else return false + } else return true + }, + //检查新密码是否与确认密码相等 + checkConfirmPwd() { + if (this.checkPwd(this.confirmPwd)) { + if (this.confirmPwd.length === 6 && this.newPwd !== this.confirmPwd) { + fToast.toast('确认密码不一致'); + return true; + } else return false + } else return true + }, + // 确认修改按钮 + changePwd() { + if (this.checkNewPwd() || this.checkConfirmPwd()) return; + SysApi.changePwd({ + prodId: sessionStorage.prodId, + oldPwd: md5(sessionStorage.newPhoneNum + this.oldPwd), + newPwd: md5(sessionStorage.newPhoneNum + this.newPwd), + confirmPwd: md5(sessionStorage.newPhoneNum + this.confirmPwd), + }).then(res => { + this.$router.push({path: '/bnd/loan/modifyPasswrodSuccess'}) + }, err => { + statusCodeManage.showTipOfStatusCode(err) + }) + } + } + }; +</script> + +<style lang="less"> + @import "../../../style/mixin.less"; + + .loan-info-box { + background-color: @color-background-default; + .vux-header { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + .vux-header-left { + .left-arrow:before { + border: solid 1px @color-white; + border-width: 2px 0 0 2px; + } + } + } + .xInput .weui-cell { + height: 24px; + } + } + + .weui-input, .weui-cell__bd { + font-size: @font-size-base; + } + + .weui-label { + font-size: @font-size-base; + } + + .personInfo ::-webkit-input-placeholder { /* WebKit browsers */ + color: #bfbfbf; + } + + .personInfo :-moz-placeholder { /* Mozilla Firefox 4 to 18 */ + color: #bfbfbf; + } + + .personInfo ::-moz-placeholder { /* Mozilla Firefox 19+ */ + color: #bfbfbf; + } + + .personInfo :-ms-input-placeholder { /* Internet Explorer 10+ */ + color: #bfbfbf; + } + + .header-space { + height: 46px; + } + + .loan-info-box .weui-cell_select .weui-select { + padding-right: 2.5rem; + direction: rtl; + } + + .loan-info-box .weui-btn_primary { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + } + + /*------------------------------*/ + .vux-no-group-title { + margin-top: 0.77rem !important; + } + + .weui-btn:after { + border: none !important; + } + + .weui-btn { + font-size: @font-size-primary !important; + } +</style> diff --git a/src/views/bnd/loan/modifyPasswrodSuccess.vue b/src/views/bnd/loan/modifyPasswrodSuccess.vue new file mode 100644 index 0000000..a799326 --- /dev/null +++ b/src/views/bnd/loan/modifyPasswrodSuccess.vue @@ -0,0 +1,127 @@ +<template> + <div class="loan-info-box"> + <x-header slot="header" + style="width:100%;height:46px;background-color: #ec6758" + title="修改成功" + :left-options="{backText: ''}"> + </x-header> + <div> + <div class="success_okandno"> + <div> + <i class="iconfont icon-roundcheckfill-copy"></i> + </div> + <h2>修改成功</h2> + </div> + <div class="bindingSuccee"> + <p> + 您的交易密码已修改成功,请妥善保管。 + </p> + </div> + <div style="height: 20px"></div> + <box gap="0 15px"> + <x-button type="primary" link="/bnd/loan/quota">我的贷款</x-button> + </box> + <div style="height: 20px"></div> + </div> + </div> +</template> + +<script> + import {XHeader, XButton, Box} from 'vux'; + + export default { + name: 'modifyPasswrodSuccess', + components: {XHeader, XButton, Box} + }; +</script> +<style lang="less"> + @import "../../../style/mixin.less"; + + + .loan-info-box { + background-color: @color-background-default; + .vux-header { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + .vux-header-left { + .left-arrow:before { + border: solid 1px @color-white; + border-width: 2px 0 0 2px; + } + } + } + .success_okandno .iconfont { + font-size: 6rem; + color: #0092f1; + } + } + + .loan-info-box .weui-btn_primary { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + } + + .loan-info-box .weui-btn_primary:not(.weui-btn_disabled):active { + color: rgba(255, 255, 255, 0.6); + background-color: rgb(241, 95, 79);; + } + + .bindingSuccee { + text-align: center; + p { + text-align: center; + color: @color-text-third; + font-size: @font-size-medium; + width: 25rem; + margin: 0 auto; + span { + color: @color-primary; + display: inline-block; + + } + } + } + + .weui-msg__icon-area { + margin-bottom: -1.2rem !important; + } + + .success_okandno { + width: 6.5rem; + margin: 0 auto; + padding: 3rem 0; + div { + text-align: center; + height: 8rem; + } + img { + width: 100%; + } + h2 { + font-weight: normal; + font-size: @font-size-primary; + text-align: center; + } + } + + .loan-info-box .weui-wepay-flow, .loan-info-box .weui-wepay-flow-auto { + padding: 0.83333rem 2.33333rem 2.5rem; + } + + .slotRight_l { + color: #fff; + font-size: @font-size-medium; + position: relative; + top: -0.1rem; + } + + .Failred { + color: #ff4d53 !important; + } + + .weui-btn:after { + border: none !important; + } + + .weui-btn { + font-size: @font-size-primary !important; + } +</style> diff --git a/src/views/bnd/loan/quota.vue b/src/views/bnd/loan/quota.vue new file mode 100644 index 0000000..5f51970 --- /dev/null +++ b/src/views/bnd/loan/quota.vue @@ -0,0 +1,223 @@ +<template> + <div class="loan-info-box"> + <x-header slot="header" + style="width:100%;height:46px;background-color: #ec6758; " + title="我的贷款" + :left-options="{backText: ''}"> + <router-link to="/bnd/repayMent/loanDetails" tag="span" class="slotRight_l" slot="right">贷款查询</router-link> + </x-header> + <div class="title_quota"> + <ul> + <li><p>可用额度(元)</p></li> + <li><p>{{loanInfo.creditLimitAvailable|formatMoney}}</p></li> + </ul> + <div class="bolang"><img src="../../../assets/imgs/collect_result_bg.png" alt=""></div> + </div> + <div class="quota_L"> + <div> + <p>额度有效期</p> + <span>{{showFormDate(loanInfo.expirationDate)}}</span> + <b></b> + </div> + <div> + <p>总额度(元)</p> + <span>{{loanInfo.creditLimitTotal|formatMoney}}</span> + </div> + </div> + <div style="height: 40px"></div> + <box gap="0 15px"> + <x-button type="primary" link="/bnd/loan/loanInfo">去借钱</x-button> + <router-link to="/bnd/loan/modifyPasswrod" tag="div" class="password_xiugai">修改交易密码</router-link> + </box> + <div class="nuber_l">客户热线:<span>{{loanInfo.customerHotline}}</span></div> + <div style="height: 20px"></div> + <alert v-model="showMsg" title="包你贷" :content="msg" button-text="去看看" + @on-hide="$router.push('/bnd/repayMent/loanDetails')"></alert> + </div> +</template> + +<script> + import {XHeader, XButton, Box, Alert} from 'vux'; + import validate from '../../../tool/validator'; + import SysApi from '../../../api/api'; + import statusCodeManage from '../../../api/statusCodeManage'; + import formDate from '../../../tool/date'; + + export default { + name: 'quota', + components: {XHeader, XButton, Box, Alert}, + data() { + return { + loanInfo: {},//贷款信息数据 + msg: '',//通知提示信息文字 + //是否显示通知信息 + showMsg: false + }; + }, + filters: { + // 金额格式化 + formatMoney(val) { + return validate.formatMoney(val) + } + }, + methods: { + //格式化日期 + showFormDate(dateTime) { + return formDate(dateTime, 'YYYY-MM-DD'); + }, + // 初始化我的贷款页面接口:获取【我的贷款】信息:如可用额度、总额度等等 + initMyLoan() { + SysApi.initMyLoan({prodId: sessionStorage.prodId}).then( + res => { + this.loanInfo = res.body; + sessionStorage.loanInfo = JSON.stringify(res.body) + }, err => { + statusCodeManage.showTipOfStatusCode(err) + }) + }, + //获取通知信息 + getRepayNotice() { + SysApi.repayNotice({prodId: sessionStorage.prodId}).then( + res => { + if (res.body) { + this.msg = res.body.noticeMsg; + this.showMsg = true + } +// else { +// this.msg = '您有一笔借款,将在三天后还款。' +// this.showMsg = true +// } + }, err => { + statusCodeManage.showTipOfStatusCode(err) + } + ) + } + }, + activated() { + if (this.$route.query.prodId) sessionStorage.prodId = this.$route.query.prodId; + this.initMyLoan(); + this.getRepayNotice(); + } + }; +</script> + +<style lang="less"> + + @import "../../../style/mixin.less"; + + .loan-info-box { + background-color: @color-background-default; + .vux-header { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + .vux-header-left { + .left-arrow:before { + border: solid 1px @color-white; + border-width: 2px 0 0 2px; + } + } + .slotRight_l { + color: #fff; + font-size: @font-size-medium; + position: relative; + top: -0.1rem; + } + } + + } + + .loan-info-box .weui-btn_primary { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + } + + .title_quota { + width: 100%; + height: 18rem; + position: relative; + .color-linear-gradient; + .bolang { + position: absolute; + bottom: -6px; + width: 100%; + img { + width: 100%; + } + } + ul { + position: absolute; + left: 50%; + top: 40%; + transform: translate(-50%, -50%); + } + li { + text-align: center; + list-style: none; + color: @color-white; + padding: 0.25rem 0; + } + li:first-child { + font-size: @font-size-medium; + } + li:last-child { + font-size: 45Px; + } + } + + .quota_L { + position: relative; + background: @color-white; + overflow: hidden; + > div { + width: 50%; + float: left; + text-align: center; + padding: 1rem 0; + position: relative; + } + p { + color: @color-text-third; + font-size: @font-size-small; + } + span { + font-size: @font-size-base; + display: inline-block; + } + b { + width: 1px; + height: 4rem; + position: absolute; + top: 1rem; + right: 0; + background: @color-divider-regular; + } + + } + + .password_xiugai { + text-align: center; + font-size: @font-size-medium; + padding: 1rem 0; + color: @color-primary; + } + + .nuber_l { + text-align: center; + font-size: @font-size-medium; + width: 100%; + height: 2.5rem; + padding-top: 3rem; + span { + display: inline-block; + color: @color-primary; + text-decoration: underline; + } + + } + + .weui-btn:after { + border: none !important; + } + + .weui-btn { + font-size: @font-size-primary !important; + } +</style> diff --git a/src/views/bnd/loan/quotaInfo.vue b/src/views/bnd/loan/quotaInfo.vue new file mode 100644 index 0000000..2f8b9bf --- /dev/null +++ b/src/views/bnd/loan/quotaInfo.vue @@ -0,0 +1,240 @@ +<template> + <div class="loan-info-box"> + <x-header slot="header" + style="width:100%;height:46px;background-color: #ec6758" + title="贷款信息确认" + :left-options="{backText: ''}"></x-header> + <group> + <div class="info_queren"> + <h4>贷款人信息</h4> + </div> + <ul class="list_shuju"> + <li> + <span>贷款人</span> + <span>{{loanInfo.userName}}</span> + </li> + <li> + <span>贷款金额</span> + <span>{{loanInfo.loanAmt|formatMoney}}</span> + </li> + <li> + <span>还款期数</span> + <span>{{loanInfo.loanTerm}}期</span> + </li> + <li> + <span>每期还款金额</span> + <span>{{loanInfo.repayAmt|formatMoney}}</span> + </li> + <li> + <span>首次还款日</span> + <span>{{showFormDate(loanInfo.firstRepayDay)}}</span> + </li> + <li> + <span>固定还款日</span> + <span>暂定</span> + </li> + <li> + <span>还款方式</span> + <span>{{loanInfo.repayType}}</span> + </li> + <li> + <span>收还款银行卡</span> + <span>{{loanInfo.bankName}} ****{{loanInfo.bankCardNo}}</span> + </li> + </ul> + </group> + + <div style="height: 20px"></div> + <div class="xieyi"> + <input type='checkbox' v-model="isAgree" name='VoteOption1' id="checkbox"/> + <label for="checkbox">我已阅读并同意<span>《包银协议1》</span>、<span>《包银协议2》</span>、<span>《包银协议3》</span></label> + </div> + <box gap="0 15px"> + <x-button :type="isAgree?'primary':''" @click.native="isPay = true" :disabled="!isAgree">下一步</x-button> + </box> + <div style="height: 20px"></div> + <div class="passwrod_jianpan"> + <pay-keyboard + v-if="isPay" + :is-pay='isPay' + @pas-end='pasEnd' + @close='isPay=false'> + <!-- 自定义支付动画 --> + <div slot="loading-ani"> + <svg></svg> + </div> + </pay-keyboard> + </div> + </div> +</template> + +<script> + import {XHeader, Group, XInput, XButton, Box, md5} from 'vux'; + import validate from '../../../tool/validator'; + import formDate from '../../../tool/date'; + import SysApi from '../../../api/api'; + import statusCodeManage from '../../../api/statusCodeManage'; + // ---------支付密码---- + import payKeyboard from '../../../components/payKeyboard/PayKeyboard' + + export default { + name: 'quotaInfo', + components: {XHeader, Group, XInput, XButton, Box, payKeyboard}, + data() { + return { + isPay: false, // 是否显示支付密码输入框 + isAgree: false, // 是否同意 + loanInfo: {} + }; + }, + filters: { + // 金额格式化 + formatMoney(val) { + return validate.formatMoney(val) + '元' + } + }, + methods: { + //格式化日期 + showFormDate(dateTime) { + return formDate(dateTime, 'YYYY-MM-DD'); + }, + // 输入支付密码回调的方法 + pasEnd(val) { + this.isPay = false; + this.loanInfo.pwd = md5(sessionStorage.newPhoneNum + val); + let parmas = { + prodId: sessionStorage.prodId, + pwd: this.loanInfo.pwd, + loanAmt: this.loanInfo.loanAmt, + loanTerm: this.loanInfo.loanTerm, + loanUse: this.loanInfo.loanUse, + riskInfo: { + deviceId: "yhjguyg", + IMEI: "IMEI", + IDFA: "IDFA", + ip: "192.168.10.93", + longiTude: "104.108676", + latiTude: "30.593814", + mac: "daqasdsxzc", + wifiMac: "43f1", + wifiList: [], + phoneModel: "iphone", + operationSys: "ios", + appNameList: [] + } + }; + SysApi.submitLoan(parmas).then( + res => { + this.$router.push({path: '/bnd/loan/loanMessage'}); + }, + err => { + statusCodeManage.showTipOfStatusCode(err) + } + ) + } + }, + activated() { + this.isPay = false; + this.loanInfo = JSON.parse(sessionStorage.loanInfo) + } + }; +</script> + +<style lang="less"> + @import "../../../style/mixin.less"; + + .loan-info-box { + background-color: @color-background-default; + .vux-header { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + .vux-header-left { + .left-arrow:before { + border: solid 1px @color-white; + border-width: 2px 0 0 2px; + } + } + } + .weui-cells { + margin-top: 0; + } + + } + + .loan-info-box .weui-btn_primary { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + } + + .loan-info-box .weui-btn_primary:not(.weui-btn_disabled):active { + color: rgba(255, 255, 255, 0.6); + background-color: rgb(241, 95, 79);; + } + + .info_queren { + position: relative; + height: 3.5rem; + padding: 0 1rem; + border-bottom: 1px solid @color-divider-regular; + h4 { + font-size: @font-size-primary; + font-weight: normal; + line-height: 3.5rem; + + } + + } + + .list_shuju { + padding: 1rem; + li { + padding-bottom: 0.4rem; + } + span { + display: inline-block; + } + span:first-child { + color: @color-text-secondary; + width: 9rem; + font-size: @font-size-base; + } + span:last-child { + color: @color-text-third; + font-size: @font-size-medium; + } + } + + .xieyi { + padding: 0 1rem 1.25rem; + text-align: left; + input { + vertical-align: middle; + } + span { + display: inline-block; + color: @color-primary; + } + } + + .passwrod_jianpan { + .title v-1px-b pr { + span { + display: inline-block; + font-size: @font-size-base !important; + } + .pa { + left: 15px !important; + .icon { + width: 1.5rem !important; + height: 1.5rem !important; + } + } + } + } + + .weui-btn:after { + border: none !important; + } + + .weui-btn { + font-size: @font-size-primary !important; + } +</style> diff --git a/src/views/bnd/loan/resetPwd.vue b/src/views/bnd/loan/resetPwd.vue new file mode 100644 index 0000000..5d73e89 --- /dev/null +++ b/src/views/bnd/loan/resetPwd.vue @@ -0,0 +1,339 @@ +<template> + <div class="loan-info-box"> + <x-header slot="header" + style="width:100%;height:46px;background-color: #ec6758" + title="重置交易密码" + :left-options="{backText: ''}"></x-header> + <div v-if="step===1"> + <div class="Code_ls"> + <h4>为了您的账户安全,需要进行短信验证</h4> + <span>手机号码</span><span>{{userPhone}}</span> + </div> + <div id="code" class="code_input"> + <x-input placeholder="请输入短信验证码" + :max="6" + :min="6" + type="tel" + v-model.trim="code" + @input.native="inputChange" + > + </x-input> + <span v-if="codeSecond===-1" @click="getCode">获取验证码</span> + <span v-else class="count">{{codeSecond}}秒后重发</span> + </div> + </div> + <div v-else> + <group class="personInfo xInput"> + <x-input text-align="right" v-model.trim="newPwd" type="password" title="交易密码" :min="6" :max="6" + placeholder="请输入6位数字" + required @on-blur="checkNewPwd"></x-input> + <x-input text-align="right" v-model.trim="confirmPwd" type="password" title="确认交易密码" :min="6" :max="6" + placeholder="请再次输入密码" + required @on-blur="checkConfirmPwd"></x-input> + </group> + </div> + <div style="height: 20px"></div> + <box gap="0 15px"> + <x-button type="primary" @click.native="handleUpStep">返回</x-button> + <x-button v-if="step===1" type="primary" @click.native="loanCheckCode">下一步</x-button> + <x-button v-else type="primary" @click.native="resetPwd">重置密码</x-button> + </box> + <div style="height: 20px"></div> + </div> +</template> + +<script> + import {XHeader, Group, XInput, XButton, Box, md5} from 'vux'; + import validate from '../../../tool/validator'; + import fToast from '../../../tool/fToast'; + import SysApi from '../../../api/api' + import statusCodeManage from '../../../api/statusCodeManage'; + + export default { + name: 'loanMessage', + components: {XHeader, Group, XInput, XButton, Box}, + data() { + return { + code: '',//输入的验证码 + codeSecond: -1,//验证码倒计时 + step: 1,//当前步骤 + newPwd: '',//新交易密码 + confirmPwd: '',//确认交易密码 + token: ''//验证码校验成功返回token + }; + }, + computed: { + userPhone() { + return validate.formatPhone(sessionStorage.newPhoneNum) + }, + canClick() { + return this.newPwd.length === 6 && this.confirmPwd.length === 6 + } + }, + methods: { + //返回跳转 + handleUpStep() { + this.codeSecond = -1; + this.$router.back() + }, + //验证码输入框input事件 + inputChange() { + setTimeout(() => { + if (this.code) { + this.code = this.code.replace(/[^\d]/g, ''); + } + }, 1); + }, + //发送验证码,验证码倒计时 + getCode() { + this.codeSecond = 60; + let timer = setInterval(() => this.codeSecond === -1 ? clearInterval(timer) : this.codeSecond--, 1000); + //调用发送验证码接口 + SysApi.loanSendCode({prodId: sessionStorage.prodId}).then(res => { + }, err => { + statusCodeManage.showTipOfStatusCode(err); + this.codeSecond = -1 + }) + }, + //下一步按钮事件 + loanCheckCode() { + if (validate.checkValEmpty(this.code)) { + fToast.toast('请输入验证码'); + return false; + } + //调用发送验证码接口 + SysApi.loanCheckCode({ + prodId: sessionStorage.prodId, + code: this.code, + }).then(res => { + this.token = res.body.token; + this.step = 2; + }, err => { + statusCodeManage.showTipOfStatusCode(err) + }) + }, + //验证密码是否为纯6位数字 + checkPwd(pwd = this.oldPwd) { + if (validate.checkValEmpty(pwd)) { + fToast.toast('请输入密码'); + return false; + } else { + let res = validate.checkVerifyCode(pwd); + if (!res) fToast.toast('请输入6位数字'); + return res + } + }, + //检查新密码是否与确认密码相等 + checkConfirmPwd() { + if (this.checkPwd(this.confirmPwd)) { + if (this.confirmPwd.length === 6 && this.newPwd !== this.confirmPwd) { + fToast.toast('确认密码不一致'); + return true; + } else return false + } else return true + }, + // 确认修改按钮 + resetPwd() { + if (this.checkConfirmPwd()) return; + SysApi.resetPwd({ + prodId: sessionStorage.prodId, + token: this.token, + newPwd: md5(sessionStorage.newPhoneNum + this.newPwd), + confirmPwd: md5(sessionStorage.newPhoneNum + this.confirmPwd), + }).then(res => { + this.$router.push({path: '/bnd/loan/resetSuccess'}); + }, err => { + statusCodeManage.showTipOfStatusCode(err) + }) + } + }, + activated() { + this.step = 1; + this.code = ''; + this.newPwd = ''; + this.confirmPwd = ''; + this.getCode(); + } + }; +</script> + +<style lang="less"> + @import "../../../style/mixin.less"; + + .loan-info-box { + background-color: @color-background-default; + .vux-header { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + .vux-header-left { + .left-arrow:before { + border: solid 1px @color-white; + border-width: 2px 0 0 2px; + } + } + } + } + + .weui-wepay-flow { + background-color: @color-white; + } + + .left-arrow:before { + border-color: @color-white; + } + + .weui-cells__title { + margin: 0 !important; + font-size: 16PX !important; + } + + .weui-input, .weui-cell__bd { + font-size: @font-size-base; + } + + .weui-label { + font-size: @font-size-base; + } + + .personInfo ::-webkit-input-placeholder { /* WebKit browsers */ + color: #bfbfbf; + } + + .personInfo :-moz-placeholder { /* Mozilla Firefox 4 to 18 */ + color: #bfbfbf; + } + + .personInfo ::-moz-placeholder { /* Mozilla Firefox 19+ */ + color: #bfbfbf; + } + + .personInfo :-ms-input-placeholder { /* Internet Explorer 10+ */ + color: #bfbfbf; + } + + .xInput { + .weui-cell { + height: 24px; + .weui-cell__ft { + font-size: 10px; + } + } + } + + .header-space { + height: 46px; + } + + .loan-info-box .weui-cell_select .weui-select { + padding-right: 2.5rem; + direction: rtl; + } + + .loan-info-box .weui-input { + text-align: right; + } + + .loan-info-box .weui-btn_primary { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + } + + .loan-info-box .weui-btn_primary:not(.weui-btn_disabled):active { + color: rgba(255, 255, 255, 0.6); + background-color: rgb(241, 95, 79);; + } + + /*------------------------------*/ + .Code_ls { + padding: 0.25rem 1.25rem; + h4 { + padding-bottom: 1.2rem; + padding-top: 1rem; + font-size: @font-size-medium; + font-weight: normal; + color: @color-text-primary; + } + span { + color: @color-text-third; + display: inline-block; + } + span:last-child { + margin-left: 0.5rem; + } + } + + .vux-no-group-title { + margin-top: 0.77rem !important; + } + + .loan-info-box .currentStep .weui-wepay-flow__state { + background-color: @color-primary; + color: @color-white !important; + line-height: 1rem; + } + + .weui-wepay-flow__li.weui-wepay-flow__li .weui-wepay-flow__state { + width: 1.33333rem; + height: 1.33333rem; + border-radius: 1.58333rem; + color: @color-text-third; + line-height: 1.33333rem; + } + + .loan-info-box .weui-input { + text-align: left; + } + + .porcolor p { + color: @color-primary; + } + + #code.code_input { + padding: 1rem 1.25rem; + background-color: @color-white !important; + font-size: @font-size-medium; + overflow: hidden; + .weui-cell { + margin: 0px; + padding: 0px; + width: 69%; + height: 24px; + float: left; + .weui-cell__bd { + width: 70%; + display: inline-block; + } + .weui-cell__ft { + display: inline-block; + } + } + input { + border: none; + width: 100%; + text-align: left !important; + outline: none; + font-size: @font-size-medium; + } + span { + display: inline-block; + font-size: @font-size-medium; + color: @color-text-third; + padding: 0.25rem 0; + border-left: 1px solid @color-text-third; + text-align: center; + width: 30%; + float: left; + } + + } + + .weui-cell__ft button { + background-color: @color-white !important; + } + + .weui-btn:after { + border: none !important; + } + + .weui-btn { + font-size: @font-size-primary !important; + } +</style> diff --git a/src/views/bnd/loan/resetSuccess.vue b/src/views/bnd/loan/resetSuccess.vue new file mode 100644 index 0000000..eb00824 --- /dev/null +++ b/src/views/bnd/loan/resetSuccess.vue @@ -0,0 +1,133 @@ +<template> + <div class="loan-info-box"> + <x-header slot="header" + style="width:100%;height:46px;background-color: #ec6758" + title="重置成功" + :left-options="{backText: ''}"> + <!--<router-link to="/bnd/repayMent/loanDetails" tag="span" class="slotRight_l" slot="right">贷款查询</router-link>--> + </x-header> + <div> + <div class="success_okandno"> + <div> + <i class="iconfont icon-roundcheckfill-copy"></i> + </div> + <h2>重置成功</h2> + </div> + <div class="bindingSuccee"> + <p> + 您的交易密码已重置成功,请妥善保管。 + </p> + </div> + <div style="height: 20px"></div> + <box gap="0 15px"> + <x-button type="primary" @click.native="goqouta">确定</x-button> + </box> + <div style="height: 20px"></div> + </div> + </div> +</template> + +<script> + import {XHeader, XButton, Box} from 'vux'; + + export default { + name: 'resetSuccess', + components: {XHeader, XButton, Box}, + methods: { + goqouta() { + this.$router.push({path: '/bnd/loan/quotaInfo', query: {prodId: this.$route.query.prodId,}}) + } + } + }; +</script> +<style lang="less"> + @import "../../../style/mixin.less"; + + + .loan-info-box { + background-color: @color-background-default; + .vux-header { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + .vux-header-left { + .left-arrow:before { + border: solid 1px @color-white; + border-width: 2px 0 0 2px; + } + } + } + .success_okandno .iconfont { + font-size: 6rem; + color: #0092f1; + } + } + + .loan-info-box .weui-btn_primary { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + } + + .loan-info-box .weui-btn_primary:not(.weui-btn_disabled):active { + color: rgba(255, 255, 255, 0.6); + background-color: rgb(241, 95, 79);; + } + + .bindingSuccee { + text-align: center; + p { + text-align: center; + color: @color-text-third; + font-size: @font-size-medium; + width: 25rem; + margin: 0 auto; + span { + color: @color-primary; + display: inline-block; + + } + } + } + + .weui-msg__icon-area { + margin-bottom: -1.2rem !important; + } + + .success_okandno { + width: 6.5rem; + margin: 0 auto; + padding: 3rem 0; + div { + text-align: center; + height: 8rem; + } + img { + width: 100%; + } + h2 { + font-weight: normal; + font-size: @font-size-primary; + text-align: center; + } + } + + .loan-info-box .weui-wepay-flow, .loan-info-box .weui-wepay-flow-auto { + padding: 0.83333rem 2.33333rem 2.5rem; + } + + .slotRight_l { + color: #fff; + font-size: @font-size-medium; + position: relative; + top: -0.1rem; + } + + .Failred { + color: #ff4d53 !important; + } + + .weui-btn:after { + border: none !important; + } + + .weui-btn { + font-size: @font-size-primary !important; + } +</style> diff --git a/src/views/bnd/loan/subSuccess.vue b/src/views/bnd/loan/subSuccess.vue new file mode 100644 index 0000000..995296b --- /dev/null +++ b/src/views/bnd/loan/subSuccess.vue @@ -0,0 +1,207 @@ +<template> + <div class="loan-info-box"> + <x-header slot="header" + style="width:100%;height:46px;background-color: #ec6758" + title="提交处理" + :left-options="{backText: ''}"> + <router-link to="/bnd/repayMent/loanDetails" tag="span" class="slotRight_l" slot="right">贷款查询</router-link> + </x-header> + <!--0-失败,1-成功,2-处理中,3-未提交--> + <div v-if="result.resultCode===0"> + <div class="success_okandno"> + <div> + <i class="iconfont icon-roundclosefill Failred"></i> + </div> + <h2>贷款失败</h2> + </div> + <div class="bindingSuccee"> + <p> + 您个人存在信用风险,暂时无法放款;如有疑问请联系客服:<span>{{customerHotline}}</span> + </p> + </div> + <div style="height: 20px"></div> + <box gap="0 15px"> + <x-button type="primary" link="/bnd/loan/quota">退出</x-button> + </box> + <div style="height: 20px"></div> + </div> + <div v-else-if="result.resultCode===1"> + <div class="success_okandno"> + <div> + <i class="iconfont icon-roundcheckfill-copy"></i> + </div> + <h2>贷款成功</h2> + </div> + <div class="bindingSuccee"> + <p> + 您的贷款已成功,您可点击"贷款查询"查询您的贷款账单 + </p> + </div> + <div style="height: 20px"></div> + <box gap="0 15px"> + <x-button type="primary" link="/bnd/repayMent/loanDetails">贷款查询</x-button> + </box> + <div style="height: 20px"></div> + </div> + <div v-else-if="result.resultCode===2"> + <div class="success_okandno"> + <div> + <i class="iconfont icon-iconfontdengdai"></i> + </div> + <h2>等待处理</h2> + </div> + <div class="bindingSuccee"> + <p> + 您的贷款申请已提交,正在处理,预计2个小时内到账,请耐心等待 + </p> + </div> + <div style="height: 20px"></div> + <box gap="0 15px"> + <x-button type="primary" @click.native="getResult">刷新</x-button> + </box> + <div style="height: 20px"></div> + </div> + <div v-else-if="result.resultCode===3"> + <div class="success_okandno"> + <div> + <i class="iconfont icon-roundclosefill Failred"></i> + </div> + <h2>贷款失败</h2> + </div> + <div class="bindingSuccee"> + <p> + 很抱歉,系统处理出错,请重新申请贷款;如有疑问请联系客服:<span>{{customerHotline}}</span> + </p> + </div> + <div style="height: 20px"></div> + <box gap="0 15px"> + <x-button type="primary" link="/bnd/loan/quota">退出</x-button> + </box> + <div style="height: 20px"></div> + </div> + </div> +</template> + +<script> + import {XHeader, XButton, Box} from 'vux'; + import SysApi from '../../../api/api' + import statusCodeManage from '../../../api/statusCodeManage' + + export default { + name: 'subSuccess', + components: {XHeader, XButton, Box}, + data() { + return { + result: {}, + customerHotline: '' + } + }, + methods: { + //查询贷款结果 + getResult() { + SysApi.result({ + prodId: sessionStorage.prodId, + resultType: 5 + }).then(res => { + this.result = res.body + }, err => { + statusCodeManage.showTipOfStatusCode(err) + }) + }, + }, + activated() { + this.getResult(); + this.customerHotline = JSON.parse((sessionStorage.loanInfo)).customerHotline + } + }; +</script> +<style lang="less"> + @import "../../../style/mixin.less"; + + .loan-info-box { + background-color: @color-background-default; + .vux-header { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + .vux-header-left { + .left-arrow:before { + border: solid 1px @color-white; + border-width: 2px 0 0 2px; + } + } + } + .success_okandno .iconfont { + font-size: 6rem; + color: #0092f1; + } + } + + .loan-info-box .weui-btn_primary { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + } + + .loan-info-box .weui-btn_primary:not(.weui-btn_disabled):active { + color: rgba(255, 255, 255, 0.6); + background-color: rgb(241, 95, 79);; + } + + .bindingSuccee { + text-align: center; + p { + text-align: center; + color: @color-text-third; + font-size: @font-size-medium; + width: 25rem; + margin: 0 auto; + span { + color: @color-primary; + display: inline-block; + + } + } + } + + .weui-msg__icon-area { + margin-bottom: -1.2rem !important; + } + + .success_okandno { + width: 6.5rem; + margin: 0 auto; + padding: 3rem 0; + div { + text-align: center; + height: 8rem; + } + img { + width: 100%; + } + h2 { + font-weight: normal; + font-size: @font-size-primary; + text-align: center; + } + } + + .loan-info-box .weui-wepay-flow, .loan-info-box .weui-wepay-flow-auto { + padding: 0.83333rem 2.33333rem 2.5rem; + } + + .slotRight_l { + color: #fff; + font-size: @font-size-medium; + position: relative; + top: -0.1rem; + } + + .Failred { + color: #ff4d53 !important; + } + + .weui-btn:after { + border: none !important; + } + + .weui-btn { + font-size: @font-size-primary !important; + } +</style> diff --git a/src/views/bnd/repayMent/activeRepayment.vue b/src/views/bnd/repayMent/activeRepayment.vue new file mode 100644 index 0000000..59087bd --- /dev/null +++ b/src/views/bnd/repayMent/activeRepayment.vue @@ -0,0 +1,330 @@ +<template> + <div class="loan-info-box"> + <x-header slot="header" + style="width:100%;height:46px;background-color: #ec6758" + title="主动还款" + :left-options="{backText: ''}"></x-header> + <div class="repay_button"> + <div class="repay_div vux-1px-b">请选择还款期数</div> + <ul> + <li v-for="(item,index) in repayPlanList" :key="index"> + <span> + <img v-if="item.tableStatus" src="../../../assets/imgs/yuqi.png" alt=""> + <img v-if="item.payOffFlag" src="../../../assets/imgs/jieqing.png" alt=""> + </span> + <x-button v-if="item.isChoose" :type="item.isClick?'primary':'default'" + @click.native="onprimt(item)"> {{item.currTerm}}期 + </x-button> + <x-button v-else disabled>{{item.currTerm}}期</x-button> + </li> + </ul> + </div> + <group class="mt_20"> + <div class="info_queren"> + <h4>还款信息</h4> + </div> + <ul class="list_shuju"> + <li> + <span>还款总额</span> + <span>{{repayTrialObj.total|formatMoney}}</span> + </li> + <li> + <span>本金金额</span> + <span>{{repayTrialObj.principal|formatMoney}}</span> + </li> + <li> + <span>利息</span> + <span>{{repayTrialObj.interest|formatMoney}}</span> + </li> + <li> + <span>服务费</span> + <span>{{repayTrialObj.servicecharge|formatMoney}}</span> + </li> + <li> + <span>罚息金额</span> + <span>{{repayTrialObj.penalty|formatMoney}}</span> + </li> + <li> + <span>代扣银行卡</span> + <span>{{repayTrialObj.bankName}} ****{{repayTrialObj.bankCardNo}}</span> + </li> + </ul> + </group> + <div class="zhuyi"> + <span>注:1.仅能在当期还款日7天内提前还款;</span> + <span>2.若存在逾期,须按顺序先将逾期项还清。</span> + </div> + <div style="height: 20px"></div> + <box gap="0 15px"> + <x-button :type="termList.length?'primary':''" :disabled="!termList.length" + @click.native="isPay=true">确认还款 + </x-button> + </box> + <div style="height: 20px"></div> + <div class="passwrod_jianpan"> + <pay-keyboard + v-if="isPay" + :is-pay='isPay' + @pas-end='pasEnd' + @close='isPay=false'> + <!-- 自定义支付动画 --> + <div slot="loading-ani"> + <svg></svg> + </div> + </pay-keyboard> + </div> + </div> +</template> + +<script> + import {XHeader, Group, XButton, Box, md5} from 'vux'; + import SysApi from '../../../api/api'; + import validate from '../../../tool/validator'; + import statusCodeManage from '../../../api/statusCodeManage'; + // ---------支付密码---- + import payKeyboard from '../../../components/payKeyboard/PayKeyboard' + + export default { + name: 'activeRepayment', + components: {XHeader, Group, XButton, Box, payKeyboard}, + data() { + return { + repayTrialObj: {},// 主动还款/提前结清还款信息数据 + repayPlanList: [],//还款计划 + termList: [],//主动还款选取的还款期数 + isPay: false, // 是否显示支付密码输入框 + repayType: 1//还款类型 1-主动还款,2-提前结清 + }; + }, + filters: { + // 金额格式化 + formatMoney(val) { + return validate.formatMoney(val) + '元' + } + }, + methods: { + //期数点击事件 + onprimt(item) { + item.isClick = !item.isClick; + if (item.isClick) { + this.termList.push(item.currTerm) + } else { + let i = this.termList.findIndex(val => { + return val === item.currTerm; + }); + this.termList.splice(i, 1); + } + this.repayTrial(); + }, + // 主动还款/提前结清还款信息查询:获取数据 + repayTrial() { + SysApi.repayTrial({ + prodId: sessionStorage.prodId, + loanId: this.$route.query.loanId, + repayType: this.repayType, + termList: this.termList + }).then(res => { + this.repayTrialObj = res.body + }, err => { + statusCodeManage.showTipOfStatusCode(err) + }) + }, + // 输入支付密码回调的方法 + pasEnd(val) { + this.isPay = false; + let pwd = md5(sessionStorage.newPhoneNum + val); + sessionStorage.repayType = this.repayType; + let parmas = { + pwd, + termList: this.termList, + repayType: this.repayType, + prodId: sessionStorage.prodId, + loanId: this.$route.query.loanId, + repayAmt: this.repayTrialObj.total, + }; + SysApi.repaySubmitRepay(parmas).then( + res => { + this.$router.push({ + path: '/bnd/repayMent/subSuccess', + query: {loanId: this.$route.query.loanId} + }); + }, + err => { + statusCodeManage.showTipOfStatusCode(err) + } + ) + } + }, + activated() { + this.isPay = false; + this.repayPlanList = JSON.parse(sessionStorage.repayPlanList).map(val => { + this.$set(val, 'isClick', false); + return val + }) + } + }; +</script> + +<style lang="less"> + @import "../../../style/mixin.less"; + + .loan-info-box { + background-color: @color-background-default; + .vux-header { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + .vux-header-left { + .left-arrow:before { + border: solid 1px @color-white; + border-width: 2px 0 0 2px; + } + } + } + } + + .loan-info-box .weui-btn_primary { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + } + + .loan-info-box .weui-btn_primary:not(.weui-btn_disabled):active { + color: rgba(255, 255, 255, 0.6); + background-color: rgb(241, 95, 79);; + } + + .vux-no-group-title { + margin-top: 0 !important; + } + + .info_queren { + position: relative; + height: 3.5rem; + padding: 0 1rem; + border-bottom: 1px solid @color-divider-regular; + h4 { + font-size: @font-size-primary; + font-weight: normal; + line-height: 3.5rem; + } + p { + position: absolute; + top: 1rem; + right: 1rem; + vertical-align: middle; + font-size: @font-size-medium; + color: @color-primary; + } + img { + width: 1.2rem; + padding-right: 0.5rem; + vertical-align: middle; + position: relative; + top: -0.1rem; + } + } + + .list_shuju { + padding: 1rem; + li { + padding-bottom: 0.5rem; + list-style: none; + } + span { + display: inline-block; + } + span:first-child { + color: @color-text-secondary; + width: 9rem; + font-size: @font-size-base; + } + span:last-child { + font-size: @font-size-medium; + color: @color-text-third; + } + } + + .repay_button { + background-color: @color-white !important; + .repay_div { + padding: 0.8rem 1rem 0.8rem 1rem; + font-size: @font-size-primary; + } + ul { + overflow: hidden; + width: 96%; + padding: 2% 2% 4% 2%; + } + ul > li { + float: left; + width: 25%; + list-style: none; + margin-top: 0.5rem; + position: relative; + } + ul > li span { + display: inline-block; + width: 2rem; + height: 2rem; + position: absolute; + top: 0; + left: 5%; + z-index: 9999; + } + img { + width: 100%; + height: 100%; + border-top-left-radius: 3px; + position: absolute; + left: 0; + top: 0; + } + .weui-btn_primary { + color: @color-white !important; + background-color: @color-primary !important; + width: 91%; + margin: 0 auto; + overflow: hidden; + } + ul > li button { + width: 90%; + height: 3.5rem; + margin: 0 auto; + background-color: @color-white; + color: @color-black; + border-radius: 3px !important; + font-size: @font-size-base !important; + /*<!--border: 1Px solid @color-divider-regular;-->*/ + &:before { + .setTopLine(); + } + overflow: inherit; + } + button:before { + border-radius: 8px; + } + button:after { + border: none !important; + } + + } + + .zhuyi { + padding: 0.5rem 1rem; + color: @color-text-placeholder-red; + font-size: @font-size-small; + span:last-child { + display: block; + padding-left: 2rem; + } + } + + .mt_20 { + margin-top: 0.5rem; + } + + .weui-btn:after { + border: none !important; + } + + .weui-btn { + font-size: @font-size-primary !important; + } +</style> diff --git a/src/views/bnd/repayMent/advanceSettle.vue b/src/views/bnd/repayMent/advanceSettle.vue new file mode 100644 index 0000000..07f642e --- /dev/null +++ b/src/views/bnd/repayMent/advanceSettle.vue @@ -0,0 +1,224 @@ +<template> + <div class="loan-info-box"> + <x-header slot="header" + style="width:100%;height:46px;background-color: #ec6758" + title="提前结清" + :left-options="{backText: ''}"></x-header> + <group> + <div class="info_queren"> + <h4>还款信息</h4> + </div> + <ul class="list_shuju"> + <li> + <span>还款总额</span> + <span>{{repayTrialObj.total|formatMoney}}</span> + </li> + <li> + <span>本金金额</span> + <span>{{repayTrialObj.principal|formatMoney}}</span> + </li> + <li> + <span>利息</span> + <span>{{repayTrialObj.interest|formatMoney}}</span> + </li> + <li> + <span>服务费</span> + <span>{{repayTrialObj.servicecharge|formatMoney}}</span> + </li> + <li> + <span>罚息金额</span> + <span>{{repayTrialObj.penalty|formatMoney}}</span> + </li> + <li> + <span>代扣银行卡</span> + <span>{{repayTrialObj.bankName}} ****{{repayTrialObj.bankCardNo}}</span> + </li> + </ul> + </group> + <div style="height: 20px"></div> + <box gap="0 15px"> + <x-button type="primary" @click.native="isPay = true">确认还款</x-button> + </box> + <div style="height: 20px"></div> + <div class="passwrod_jianpan"> + <pay-keyboard + v-if="isPay" + :is-pay='isPay' + @pas-end='pasEnd' + @close='isPay=false'> + <!-- 自定义支付动画 --> + <div slot="loading-ani"> + <svg></svg> + </div> + </pay-keyboard> + </div> + </div> +</template> + +<script> + import {XHeader, Group, XButton, Box, md5} from 'vux'; + import SysApi from '../../../api/api'; + import statusCodeManage from '../../../api/statusCodeManage'; + import validate from '../../../tool/validator'; + // ---------支付密码输入框组件---- + import payKeyboard from '../../../components/payKeyboard/PayKeyboard' + + export default { + name: 'advanceSettle', + components: {XHeader, Group, XButton, Box, payKeyboard}, + data() { + return { + repayTrialObj: {},// 提前结清还款信息数据 + isPay: false, // 是否显示支付密码输入框 + repayType: 2//还款类型 1-主动还款,2-提前结清 + }; + }, + filters: { + // 金额格式化 + formatMoney(val) { + return validate.formatMoney(val) + '元' + } + }, + methods: { + // 提前结清还款信息查询:获取数据 + repayTrial() { + SysApi.repayTrial({ + prodId: sessionStorage.prodId, + loanId: this.$route.query.loanId, + repayType: this.repayType, + }).then(res => { + this.repayTrialObj = res.body + }, + err => { + statusCodeManage.showTipOfStatusCode(err) + }) + }, + // 输入支付密码回调的方法 + pasEnd(val) { + this.isPay = false; + sessionStorage.repayType = this.repayType; + //提前结清提交 + SysApi.repaySubmitRepay({ + repayType: this.repayType, + prodId: sessionStorage.prodId, + loanId: this.$route.query.loanId, + repayAmt: this.repayTrialObj.total, + pwd: md5(sessionStorage.newPhoneNum + val) + }).then( + res => { + this.$router.push({ + path: '/bnd/repayMent/subSuccess', + query: {loanId: this.$route.query.loanId} + }) + }, + err => { + statusCodeManage.showTipOfStatusCode(err) + }) + } + }, + activated() { + this.isPay = false; + this.repayTrial() + } + }; +</script> + +<style lang="less"> + @import "../../../style/mixin.less"; + + .loan-info-box { + background-color: @color-background-default; + .vux-header { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + .vux-header-left { + .left-arrow:before { + border: solid 1px @color-white; + border-width: 2px 0 0 2px; + } + } + } + .passwrod_jianpan { + .title v-1px-b pr { + span { + display: inline-block; + font-size: @font-size-base !important; + } + .pa { + left: 15px !important; + .icon { + width: 1.5rem !important; + height: 1.5rem !important; + } + } + } + } + } + + .loan-info-box .weui-btn_primary { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + } + + .loan-info-box .weui-btn_primary:not(.weui-btn_disabled):active { + color: rgba(255, 255, 255, 0.6); + background-color: rgb(241, 95, 79);; + } + + .vux-no-group-title { + margin-top: 0rem !important; + } + + .info_queren { + position: relative; + height: 3.5rem; + padding: 0 1rem; + border-bottom: 1px solid @color-divider-regular; + h4 { + font-size: @font-size-primary; + font-weight: normal; + line-height: 3.5rem; + } + p { + position: absolute; + top: 1rem; + right: 1rem; + vertical-align: middle; + font-size: @font-size-medium; + color: @color-primary; + } + img { + width: 1.2rem; + padding-right: 0.5rem; + vertical-align: middle; + position: relative; + top: -0.1rem; + } + } + + .list_shuju { + padding: 1rem; + li { + padding-bottom: 0.4rem; + } + span { + display: inline-block; + } + span:first-child { + color: @color-text-secondary; + width: 9rem; + font-size: @font-size-base; + + } + span:last-child { + color: @color-text-third; + font-size: @font-size-medium; + } + } + + .weui-btn:after { + border: none !important; + } + + .weui-btn { + font-size: @font-size-primary !important; + } +</style> diff --git a/src/views/bnd/repayMent/billDetails.vue b/src/views/bnd/repayMent/billDetails.vue new file mode 100644 index 0000000..ea92379 --- /dev/null +++ b/src/views/bnd/repayMent/billDetails.vue @@ -0,0 +1,256 @@ +<template> + <div class="loan-info-box"> + <x-header slot="header" + style="width:100%;height:46px;background-color: #ec6758" + title="账单详情" + :left-options="{backText: ''}"> + <span class="slotRight_l" slot="right" @click="goAdvanceSettle">提前结清</span> + </x-header> + <div class="header_huankuan"> + <div>应还款总额(元)</div> + <p>{{repayDetailObj.total|formatMoney}}</p> + </div> + <group class="mt_20"> + <div class="info_queren "> + <h4>还款信息</h4> + <p @click="goRepayPlan">查看详情 <i class="iconfont icon-more-up"></i></p> + </div> + <ul class="list_shuju"> + <li> + <span>应还款总额</span> + <span>{{repayDetailObj.total|formatMoney}}</span> + </li> + <li> + <span>应还总本金</span> + <span>{{repayDetailObj.principal|formatMoney}}</span> + </li> + <li> + <span>已还总本金</span> + <span>{{repayDetailObj.repayPrincipal|formatMoney}}</span> + </li> + <li> + <span>应还总利息</span> + <span>{{repayDetailObj.interest|formatMoney}}</span> + </li> + <li> + <span>已还总利息</span> + <span>{{repayDetailObj.repayInterest|formatMoney}}</span> + </li> + <li> + <span>应还总服务费</span> + <span>{{repayDetailObj.servicecharge|formatMoney}}</span> + </li> + <li> + <span>已还总服务费</span> + <span>{{repayDetailObj.repayServicecharge|formatMoney}}</span> + </li> + <li> + <span>应还总罚息</span> + <span>{{repayDetailObj.penalty|formatMoney}}</span> + </li> + <li> + <span>已还总罚息</span> + <span>{{repayDetailObj.repayPenalty|formatMoney}}</span> + </li> + <li> + <span>账单状态</span> + <span>{{repayDetailObj.loanStatusValue}}</span> + </li> + <li> + <span>账单协议</span> + <span>《包银协议1》、《包银协议2》、《包银协议3》</span> + </li> + </ul> + </group> + <div style="height: 20px"></div> + <box gap="0 15px"> + <x-button type="primary" @click.native="goActiveRepayMent">主动还款</x-button> + </box> + <div style="height: 20px"></div> + </div> +</template> + +<script> + import {XHeader, Group, XButton, Box} from 'vux'; + import SysApi from '../../../api/api'; + import validate from '../../../tool/validator'; + import statusCodeManage from '../../../api/statusCodeManage'; + + export default { + name: 'loanDetails', + components: {XHeader, Group, XButton, Box}, + data() { + return { + isLastStep: false, // 是否是最后一步 + activePageItem: 0, // 激活当前页 + pageList: [], // 一共有几页 + repayDetailObj: {}// 账单详情数据 + }; + }, + filters: { + // 金额格式化 + formatMoney(val) { + return validate.formatMoney(val || 0) + '元' + } + }, + methods: { + goBackPage() { + // 如果是第一步的话,那么返回到上一个页面 + if (this.activePageItem <= 1) { + this.$router.back(); + } else { + // 不是的话,那么显示上一步 + this.activePageItem--; + this.isLastStep = this.pageList.length === this.activePageItem; + } + }, + //点击【查看详情】跳转到还款计划 + goRepayPlan() { + this.$router.push({path: '/bnd/repayMent/repayPlan', query: {loanId: this.repayDetailObj.loanId}}) + }, + //跳转到提前结清 + goAdvanceSettle() { + this.$router.push({path: '/bnd/repayMent/advanceSettle', query: {loanId: this.repayDetailObj.loanId}}) + }, + //跳转到主动还款 + goActiveRepayMent() { + sessionStorage.repayPlanList = JSON.stringify(this.repayDetailObj.repayPlanList) + this.$router.push({path: '/bnd/repayMent/activeRepayment', query: {loanId: this.repayDetailObj.loanId}}) + }, + // 借款账单详情 + repayDetail() { + SysApi.repayDetail({prodId: sessionStorage.prodId, loanId: this.$route.query.loanId}).then( + res => { + this.repayDetailObj = res.body + }, err => { + statusCodeManage.showTipOfStatusCode(err) + }) + } + }, + activated() { + this.repayDetail() + } + }; +</script> + +<style lang="less"> + @import "../../../style/mixin.less"; + + .loan-info-box { + background-color: @color-background-default; + .vux-header { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + .vux-header-left { + .left-arrow:before { + border: solid 1px @color-white; + border-width: 2px 0 0 2px; + } + } + } + } + + .loan-info-box .weui-btn_primary { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + } + + .loan-info-box .weui-btn_primary:not(.weui-btn_disabled):active { + color: rgba(255, 255, 255, 0.6); + background-color: rgb(241, 95, 79);; + } + + .info_queren { + position: relative; + height: 3.5rem; + padding: 0 1rem; + border-bottom: 1px solid @color-divider-regular; + h4 { + font-size: @font-size-primary; + font-weight: normal; + line-height: 3.5rem; + } + p { + position: absolute; + top: 1rem; + right: 1rem; + vertical-align: middle; + font-size: @font-size-medium; + color: @color-primary; + } + img { + width: 1.2rem; + padding-right: 0.5rem; + vertical-align: middle; + position: relative; + top: -0.1rem; + } + } + + .list_shuju { + padding: 1rem; + li { + padding-bottom: 0.5rem; + } + span { + display: table-cell !important; + } + span:first-child { + color: @color-text-secondary; + width: 9rem; + font-size: @font-size-base; + } + span:last-child { + color: @color-text-third; + font-size: @font-size-medium; + } + } + + .xieyi { + text-align: center; + padding-bottom: 1.25rem; + input { + vertical-align: middle; + } + span { + display: inline-block; + color: @color-primary; + } + } + + .slotRight_l { + color: @color-white;; + font-size: @font-size-medium; + position: relative; + top: -0.1rem; + } + + .mt_20 { + margin-top: 0.5rem; + } + + .header_huankuan { + text-align: center; + font-size: @font-size-base; + background-color: @color-white; + padding: 1.2rem 0; + p { + font-size: 45Px; + color: @color-primary; + } + } + + .iconfont { + font-size: @font-size-small; + } + + .weui-btn:after { + border: none !important; + } + + .weui-btn { + font-size: @font-size-primary !important; + } + + .weui-btn { + font-size: @font-size-primary !important; + } +</style> diff --git a/src/views/bnd/repayMent/loanDetails.vue b/src/views/bnd/repayMent/loanDetails.vue new file mode 100644 index 0000000..33722b8 --- /dev/null +++ b/src/views/bnd/repayMent/loanDetails.vue @@ -0,0 +1,217 @@ +<template> + <div class="loan-info-box"> + <x-header slot="header" + style="width:100%;height:46px;background-color: #ec6758" + title="贷款查询" + :left-options="{backText: ''}"> + <router-link to="/bnd/loan/quota" tag="span" class="slotRight_l" slot="right">我的贷款</router-link> + </x-header> + <group> + <tab> + <tab-item :selected="currTab===0" @on-item-click="repayList">当前账单</tab-item> + <tab-item :selected="currTab===1" @on-item-click="repayList">历史账单</tab-item> + </tab> + </group> + <div> + <ul class="list_title"> + <li v-for="i in repayListArr" :key="i.loanId" @click="goBillDetails(i)"> + <div class="list_header"> + <h4>【借款账单<span> {{showFormDate(i.creTime)}}</span>】</h4> + <span class="list_ritg">{{i.loanStatusValue}}</span> + </div> + <div class="list_liebiao"> + <p>账单总额(元)</p> + <div class="list_next"> + <p>¥<span>{{i.loanAmt|formatMoney}}</span></p> + <span class="list_porright">详情<i class="iconfont icon-more-up"></i></span> + </div> + </div> + <div class="list_bom"> + <div> + <p>下期应还(元)</p> + <span>{{i.nextRepayAmt|formatMoney}}</span> + </div> + <div> + <p>还款期数</p> + <span>{{i.nextTerm||i.totalTerm}}/{{i.totalTerm}}期</span> + </div> + <div> + <p>下次还款日</p> + <span>{{showFormDate(i.nextRepayDay)||'无'}}</span> + </div> + </div> + </li> + <li v-if="repayListArr.length===0" class="noData">暂无该类型账单</li> + </ul> + </div> + </div> +</template> + +<script> + import {XHeader, Group, Tab, TabItem} from 'vux'; + import SystApi from '../../../api/api'; + import statusCodeManage from '../../../api/statusCodeManage'; + import formDate from '../../../tool/date'; + import validate from '../../../tool/validator'; + + export default { + name: 'loanDetails', + components: {XHeader, Group, Tab, TabItem}, + data() { + return { + repayListArr: [], // 账单数据列表 + currTab: 0//当前tab选中的下标 + }; + }, + filters: { + // 金额格式化 + formatMoney(val) { + return validate.formatMoney(val || 0) + } + }, + methods: { + //格式化日期 + showFormDate(dateTime) { + return formDate(dateTime, 'YYYY-MM-DD'); + }, + //跳转到账单详情页面 + goBillDetails(i) { + this.$router.push({ + path: '/bnd/repayMent/billDetails', query: {loanId: i.loanId,} + }) + }, + // 查看贷款列表:获取账单列表数据;index:列表类型 1-当前账单,2-历史账单 + repayList(index) { + this.currTab = index; + SystApi.repayList({prodId: sessionStorage.prodId, listType: index + 1}).then(res => { + this.repayListArr = res.body + }, err => { + statusCodeManage.showTipOfStatusCode(err) + }) + } + }, + activated() { + this.repayList(this.currTab) + } + }; +</script> + +<style lang="less"> + @import "../../../style/mixin.less"; + + .loan-info-box { + padding-bottom: 1rem; + background-color: @color-background-default; + .vux-header { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + .vux-header-left { + .left-arrow:before { + border: solid 1px @color-white; + border-width: 2px 0 0 2px; + } + } + } + + } + + .slotRight_l { + color: @color-white;; + font-size: @font-size-medium; + position: relative; + top: -0.1rem; + } + + .vux-tab .vux-tab-item.vux-tab-selected { + color: @color-gradient-darkBlue-right !important; + border-bottom: 2px solid @color-gradient-darkBlue-right !important; + } + + .vux-tab .vux-tab-item { + font-size: @font-size-base !important; + } + + .vux-tab-ink-bar { + background-color: @color-gradient-darkBlue-right !important; + height: 1px !important; + } + + .list_title { + margin: 0 1rem; + li { + list-style: none; + margin-top: 1rem; + } + .noData { + text-align: center; + font-size: 16px; + } + .list_header { + .color-linear-gradient; + font-size: @font-size-base; + color: @color-white; + position: relative; + height: 3.5rem; + line-height: 3.5rem; + border-top-left-radius: 3px; + border-top-right-radius: 3px; + h4 { + font-weight: normal; + } + .list_ritg { + position: absolute; + top: 0; + right: 0.5rem; + } + + } + .list_liebiao { + background-color: @color-white; + padding: 0.8rem; + font-size: @font-size-small; + padding-bottom: 0; + p { + color: @color-text-third; + } + .list_next { + position: relative; + border-bottom: 1px dashed @color-divider-regular; + p { + color: @color-gradient-darkBlue-right; + font-size: @font-size-large; + padding-bottom: 0.5rem; + } + .list_porright { + display: inline-block; + color: @color-text-third; + font-size: @font-size-medium; + position: absolute; + bottom: 1rem; + right: 0; + } + } + } + .list_bom { + background-color: @color-white; + overflow: hidden; + width: 100%; + > div { + float: left; + width: 33.3%; + text-align: center; + padding: 0.5rem 0; + } + > div p { + color: @color-text-third; + font-size: @font-size-small; + } + > div span { + font-size: @font-size-medium; + } + } + } + + .iconfont { + font-size: @font-size-small; + padding-left: 0.5rem; + } +</style> diff --git a/src/views/bnd/repayMent/repayPlan.vue b/src/views/bnd/repayMent/repayPlan.vue new file mode 100644 index 0000000..2b9189a --- /dev/null +++ b/src/views/bnd/repayMent/repayPlan.vue @@ -0,0 +1,218 @@ +<template> + <div class="loan-info-box"> + <x-header slot="header" + style="width:100%;height:46px;background-color: #ec6758" + title="还款计划" + :left-options="{backText: ''}"></x-header> + <group class="pd_btom"> + <selector title="还款期数" :options="qualificationList" v-model="chooseTerm"></selector> + </group> + <group> + <div class="info_queren"> + <h4>第{{chooseTerm}}期还款信息</h4> + </div> + <ul class="list_shuju"> + <li> + <span>应还款总额</span> + <span>{{repayPlanObj.currTotal|formatMoney}}</span> + </li> + <li> + <span>应换总本金</span> + <span>{{repayPlanObj.currPrincipal|formatMoney}}</span> + </li> + <li> + <span>已还总本金</span> + <span>{{repayPlanObj.repayPrincipal|formatMoney}}</span> + </li> + <li> + <span>已还总利息</span> + <span>{{repayPlanObj.repayInterest|formatMoney}}</span> + </li> + <li> + <span>应还总服务费</span> + <span>{{repayPlanObj.currServicecharge|formatMoney}}</span> + </li> + <li> + <span>已还总服务费</span> + <span>{{repayPlanObj.repayServicecharge|formatMoney}}</span> + </li> + <li> + <span>应还总罚息</span> + <span>{{repayPlanObj.currPenalty|formatMoney}}</span> + </li> + <li> + <span>已还总罚息</span> + <span>{{repayPlanObj.repayPenalty|formatMoney}}</span> + </li> + <li> + <span>是否已还清</span> + <span>{{repayPlanObj.payOffFlag?'还清':'未还清'}}</span> + </li> + <li> + <span>是否逾期</span> + <span>{{repayPlanObj.tableStatus?'是':'否'}}</span> + </li> + <li> + <span>逾期天数</span> + <span>{{repayPlanObj.overdueDay||0}}天</span> + </li> + </ul> + </group> + </div> +</template> + +<script> + import {XHeader, Group, GroupTitle, Selector} from 'vux'; + import SysApi from '../../../api/api'; + import validate from '../../../tool/validator'; + import statusCodeManage from '../../../api/statusCodeManage'; + + export default { + name: 'repayPlan', + components: {XHeader, Group, GroupTitle, Selector}, + data() { + return { + repayPlanList: [],// 还款计划取数据 + chooseTerm: 1// 当前选择的期数,默认为1 + }; + }, + filters: { + // 金额格式化 + formatMoney(val) { + return validate.formatMoney(val || 0) + '元' + } + }, + computed: { + qualificationList() { + return this.getOptionsList(this.repayPlanList) + }, + repayPlanObj() { + if (this.repayPlanList.length) return this.repayPlanList[this.chooseTerm - 1] + else return {} + } + }, + methods: { + // 还款计划页面初始化 + repayDetail() { + SysApi.repayDetail({prodId: sessionStorage.prodId, loanId: this.$route.query.loanId}).then(res => { + this.repayPlanList = res.body.repayPlanList + }, err => { + statusCodeManage.showTipOfStatusCode(err) + }) + }, + // 得到选项列表统一的方法 + getOptionsList(optionList) { + let tmpList = []; + if (optionList instanceof Array) { + optionList.forEach(function (item) { + tmpList.push({ + key: item.currTerm, + value: item.currTerm + '期' + }); + }); + } + return tmpList; + }, + }, + activated() { + this.chooseTerm = 1; + this.repayDetail() + } + }; +</script> + +<style lang="less"> + @import "../../../style/mixin.less"; + + .loan-info-box { + background-color: @color-background-default; + .vux-header { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + .vux-header-left { + .left-arrow:before { + border: solid 1px @color-white; + border-width: 2px 0 0 2px; + } + } + } + } + + .weui-label { + font-size: @font-size-base; + } + + .loan-info-box .weui-cell_select .weui-select { + padding-right: 2.5rem; + direction: rtl; + } + + .info_queren { + position: relative; + height: 3.5rem; + padding: 0 1rem; + border-bottom: 1px solid @color-divider-regular; + + h4 { + font-size: @font-size-base; + font-weight: normal; + line-height: 3.5rem; + } + p { + position: absolute; + top: 1rem; + right: 1rem; + vertical-align: middle; + font-size: @font-size-medium; + color: @color-primary; + } + img { + width: 1.2rem; + padding-right: 0.5rem; + vertical-align: middle; + position: relative; + top: -0.1rem; + } + } + + .list_shuju { + padding: 1rem; + li { + padding-bottom: 0.4rem; + } + span { + display: inline-block; + } + span:first-child { + color: @color-text-secondary; + width: 9rem; + font-size: @font-size-base; + } + span:last-child { + font-size: @font-size-medium; + color: @color-text-third; + } + } + + .pd_btom { + padding-bottom: 0.5rem; + .vux-selector.weui-cell_select-after { + padding-left: 1rem !important; + } + select { + font-size: @font-size-medium; + color: @color-text-primary !important; + } + } + + .vux-no-group-title { + margin-top: 0rem !important; + } + + .weui-btn:after { + border: none !important; + } + + .weui-btn { + font-size: @font-size-primary !important; + } +</style> diff --git a/src/views/bnd/repayMent/subSuccess.vue b/src/views/bnd/repayMent/subSuccess.vue new file mode 100644 index 0000000..1c4bbc2 --- /dev/null +++ b/src/views/bnd/repayMent/subSuccess.vue @@ -0,0 +1,190 @@ +<template> + <div class="loan-info-box"> + <x-header slot="header" + style="width:100%;height:46px;background-color: #ec6758" + title="提交处理" + :left-options="{backText: ''}"> + <router-link to="/bnd/repayMent/loanDetails" tag="span" class="slotRight_l" slot="right">贷款查询</router-link> + </x-header> + <!--0-失败,1-成功,2-处理中,3-未提交--> + <div v-if="result.resultCode===0"> + <div class="success_okandno"> + <div> + <i class="iconfont icon-roundclosefill Failred"></i> + </div> + <h2>还款失败</h2> + </div> + <div class="bindingSuccee"> + <p> + 您的{{repayType==='1'?'还款':'提前结清'}}申请已受理失败,如有疑问请联系客服:<span>{{customerHotline}}</span> + </p> + </div> + <div style="height: 20px"></div> + <box gap="0 15px"> + <x-button type="primary" link="/bnd/loan/quota">退出</x-button> + </box> + <div style="height: 20px"></div> + </div> + <div v-else-if="result.resultCode===1"> + <div class="success_okandno"> + <div> + <i class="iconfont icon-roundcheckfill-copy"></i> + </div> + <h2>还款成功</h2> + </div> + <div class="bindingSuccee"> + <p> + 您的{{repayType==='1'?'还款':'提前结清'}}申请已受理成功,如有疑问请联系客服:<span>{{customerHotline}}</span> + </p> + </div> + <div style="height: 20px"></div> + <box gap="0 15px"> + <x-button type="primary" link="/bnd/repayMent/loanDetails">贷款查询</x-button> + </box> + <div style="height: 20px"></div> + </div> + <div v-else-if="result.resultCode===2"> + <div class="success_okandno"> + <div> + <i class="iconfont icon-iconfontdengdai"></i> + </div> + <h2>等待处理</h2> + </div> + <div class="bindingSuccee"> + <p> + 您的{{repayType==='1'?'还款':'提前结清'}}申请已提交成功,系统会对您的绑定银行卡进行代扣,请耐心等待。 + </p> + </div> + <div style="height: 20px"></div> + <box gap="0 15px"> + <x-button type="primary" @click.native="getResult">刷新</x-button> + </box> + <div style="height: 20px"></div> + </div> + </div> +</template> + +<script> + import {XHeader, XButton, Box} from 'vux'; + import SysApi from '../../../api/api' + import statusCodeManage from '../../../api/statusCodeManage' + + export default { + name: 'subSuccess', + components: {XHeader, XButton, Box}, + data() { + return { + result: {}, + repayType: sessionStorage.repayType, + customerHotline: '' + }; + }, + methods: { + //查询贷款结果 + getResult() { + SysApi.repayResult({ + prodId: sessionStorage.prodId, + loanId: this.$route.query.loanId + }).then(res => { + this.result = res.body + }, err => { + statusCodeManage.showTipOfStatusCode(err) + }) + }, + }, + activated() { + this.getResult() + this.customerHotline = JSON.parse((sessionStorage.loanInfo)).customerHotline + } + }; +</script> +<style lang="less"> + @import "../../../style/mixin.less"; + + .loan-info-box { + background-color: @color-background-default; + .vux-header { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + .vux-header-left { + .left-arrow:before { + border: solid 1px @color-white; + border-width: 2px 0 0 2px; + } + } + } + .success_okandno .iconfont { + font-size: 6rem; + color: #0092f1; + } + } + + .loan-info-box .weui-btn_primary { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + } + + .loan-info-box .weui-btn_primary:not(.weui-btn_disabled):active { + color: rgba(255, 255, 255, 0.6); + background-color: rgb(241, 95, 79);; + } + + .bindingSuccee { + text-align: center; + p { + text-align: center; + color: @color-text-third; + font-size: @font-size-medium; + width: 25rem; + margin: 0 auto; + span { + color: @color-primary; + display: inline-block; + + } + } + } + + .weui-msg__icon-area { + margin-bottom: -1.2rem !important; + } + + .success_okandno { + width: 6.5rem; + margin: 0 auto; + padding: 3rem 0; + div { + text-align: center; + height: 8rem; + } + img { + width: 100%; + } + h2 { + font-weight: normal; + font-size: @font-size-primary; + text-align: center; + } + } + + .loan-info-box .weui-wepay-flow, .loan-info-box .weui-wepay-flow-auto { + padding: 0.83333rem 2.33333rem 2.5rem; + } + + .slotRight_l { + color: #fff; + font-size: @font-size-medium; + position: relative; + top: -0.1rem; + } + + .Failred { + color: #ff4d53 !important; + } + + .weui-btn:after { + border: none !important; + } + + .weui-btn { + font-size: @font-size-primary !important; + } +</style> diff --git a/src/views/common/goBackControl.js b/src/views/common/goBackControl.js new file mode 100644 index 0000000..f0e770f --- /dev/null +++ b/src/views/common/goBackControl.js @@ -0,0 +1,60 @@ + +/** + * Created by c.k on 2018/5/2. + * 接口的统一处理 + */ + +export default { + goBackFun(instanceObj) { + // 返回产品列表页面 + // console.log(instanceObj.$store.getters.pageRecode); + if (instanceObj.prodType == 40000006) { // 大额贷款 + instanceObj.$router.push({path: '/f-loan/f-bank'}); + } else if (instanceObj.prodType == 40000007) { // 信用卡贷款 + instanceObj.$router.push({path: '/f-loan/f-credit'}); + } else { // 默认进入小额贷款 + instanceObj.$router.push({path: '/f-loan/f-speed'}); + } + console.log(instanceObj.prodType); + // if(instanceObj.isMark){ + // if(instanceObj.$store.getters.pageRecode.length == 1){ + // instanceObj.isMark = false; + // instanceObj.$router.go(-1); + // return; + // } + // + // for (let i = 1, j = instanceObj.$store.getters.pageRecode.length; i < j; i++) { + // if (instanceObj.$store.getters.pageRecode[0].name == instanceObj.$store.getters.pageRecode[i].name) { + // // window.history.go(-i); + // instanceObj.$router.push(instanceObj.$store.getters.pageRecode[i+1].fullPath); + // break; + // } + // } + // instanceObj.isMark = false; + // }else{ + // // 如果之前没有执行返回,这里执行返回 back -1 + // instanceObj.$router.go(-1); + // } + }, + gotoNext(to, from, next) { + next(vm => { + console.log(from.path); + if (from.name != null) { + let pathArr = ['/f-login', '/f-auth', '/f-register', + '/incomeLoan/auditResults', + '/incomeLoan/phototInfo', + '/incomeLoan/bindcard', + '/incomeLoan/houseAndJobInfo', + '/incomeLoan/personalInfo']; + for (let i = 0, j = pathArr.length; i < j; i++) { + if (pathArr[i] == from.path) { + vm.isMark = true; + break; + } + } + } else { + vm.isMark = false; + } + }); + } +}; diff --git a/src/views/home/assessment.vue b/src/views/home/assessment.vue new file mode 100644 index 0000000..367948d --- /dev/null +++ b/src/views/home/assessment.vue @@ -0,0 +1,371 @@ +<template> + <div class="assessment-page" v-if="pageList.length >= 1"> + <x-header :left-options="{backText: '', preventGoBack: true}" + class="gradient-color" + @on-click-back="goBackPage">额度评估 + + </x-header> + <p class="tip">请确保录入本人真实信息,否则将影响最终评估结果</p> + <group> + <div v-for="(pageItem, index) in pageList" + v-if="activePageItem === pageItem" + :key="index"> + <div v-for="(item, itemIndex) in questions[pageItem]" :key="itemIndex"> + <x-input v-if="item.type === 1" + :title="item.name" + type="tel" + :max="7" + text-align="right" + :novalidate="true" + v-model.trim="item.value" + :placeholder="'请输入'" class="formItemBorder"> + <span slot="right" class="unit">元</span> + </x-input> + <FSheet v-if="item.type === 2" + :placeholder="'请选择'" + v-model="item.value" + :title="item.name" + :menus="item.answer" class="formItemBorder"> + </FSheet> + <FSheet v-if="item.type === 3" + :placeholder="'请选择'" + v-model="item.value" + :title="item.name" + :menus="item.answer" + @on-menu-change="handleMenuChange" class="formItemBorder"> + </FSheet> + </div> + </div> + <!--追加内容--> + <div v-if="activePageItem===1"> + <div v-for="(item, itemIndex) in addQuestions" :key="itemIndex"> + <x-input v-if="item.type === 1" + :title="item.name" + type="tel" + :max="7" + class="formItemBorder" + text-align="right" + v-model.trim="item.value" + :novalidate="true" + :placeholder="'请输入'"> + <span slot="right" class="unit">元</span> + </x-input> + <FSheet v-if="item.type === 2" + :placeholder="'请选择'" + v-model="item.value" + :title="item.name" + class="formItemBorder" + :menus="item.answer"></FSheet> + </div> + </div> + </group> + <FButton text="下一步" v-if="!isLastStep" @on-click-button="handleNextStep"></FButton> + <FButton text="开始评估" v-if="isLastStep" @on-click-button="handleSubmit"></FButton> + </div> +</template> + +<script> + /** + * Created by c.y on 2018/3/16. + * 额度评估首页 + */ + import {XHeader, XInput, Confirm, Group, Selector, XButton} from 'vux'; + import FButton from '../../components/common/FButton.vue'; + import FSheet from '../../components/common/FSheet.vue'; + import systemApi from '../../api/api'; + import statusCodeManage from '../../api/statusCodeManage'; + import validate from '../../tool/validator'; + + export default { + name: 'f-assessment', + data () { + return { + value: 1, + pageList: [], // 一共有几页 + questions: [], // 问题的总条数 + activePageItem: 0, // 激活当前页 + isLastStep: false, // 是否是最后一步 + addQuestions: '' // 追加的问题列表 + + } + }, + components: { + XHeader, + XInput, + Group, + FButton, + Selector, + FSheet, + Confirm, + XButton + }, + methods: { + goBackPage () { + // 如果是第一步的话,那么返回到上一个页面 + if (this.activePageItem <= 1) { + this.$router.back(); + // 不是的话,那么显示上一步 + } else { + this.activePageItem--; + this.isLastStep = this.pageList.length === this.activePageItem; + } + }, + // 获取初始化的问题列表 + fetchQuestionList () { + systemApi.fetchQuestionAndTypeList().then(response => { + this.pageList = response.question.pageList; + this.questions = response.question.questions; + this.activePageItem = this.pageList[0]; + // 是否为最后一步 + this.isLastStep = this.pageList.length <= 1; + }, error => { + statusCodeManage.showTipOfStatusCode(error,this); + }) + }, + // 选择职业时,改变额外问题的列表 + handleMenuChange (selectVal) { + let questions = this.getAddQuestions(selectVal.name); + // 清除上一次选择的数据 + if (questions && questions.length) { + questions.forEach(function (item) { + if (item.value) { + item.value = ''; + } + }); + } + if (validate.checkValEmpty(questions)) { + this.addQuestions = ''; + return false; + } + this.addQuestions = questions; + }, + // 获取追加的问题列表/或者计算用的系数, name是选择值, 是否返回为系数 + getAddQuestions (name) { + let questionsList = this.questions[1]; + for (let i = 0; i < questionsList.length; i++) { + if (questionsList[i].type === 3) { + let answerList = questionsList[i].answer; + for (let j = 0; j < answerList.length; j++) { + if (answerList[j].name === name) { + return answerList[j].childQuestion ? answerList[j].childQuestion : ''; + } + } + } + } + }, + // 根据类型的不同,进行提示 + checkRequired (checkList) { + let _this = this; + let reg = /^[1-9]{1}\d{0,6}$/; + for (let i = 0; i < checkList.length; i++) { + if (checkList[i].type === 1) { + if (validate.checkValEmpty(checkList[i].value)) { + _this.$vux.toast.text('请输入' + checkList[i].name, 'middle'); + return false; + } else if (!reg.test(checkList[i].value)) { + _this.$vux.toast.text('请输入正确的' + checkList[i].name, 'middle'); + return false; + } + } else { + if (validate.checkValEmpty(checkList[i].value)) { + _this.$vux.toast.text('请选择' + checkList[i].name, 'middle'); + return false; + } + } + } + return true + }, + // 判断是否必填,并进行提示, checkAdd是否检测额外的内容 + checkNextStepRequired (activeItem, checkAdd = false) { + // 判读主步骤是否必填 + let checkResult = this.checkRequired(this.questions[activeItem]); + if (!checkResult) { + return false; + } + // 判断额外内容是否必填 + if (checkAdd) { + let checkAddResult = this.checkRequired(this.addQuestions); + if (!checkAddResult) { + return false; + } + } + return true; + }, + // 点击下一步 + handleNextStep () { + if (!this.checkNextStepRequired(this.activePageItem, true)) { + return false; + } + this.activePageItem++; + this.isLastStep = this.pageList.length === this.activePageItem; + }, + // 提交 + handleSubmit () { + if (!this.checkNextStepRequired(this.activePageItem)) { + return false; + } + // 计算额度评估,并跳转页面 + this.calculateQuota(); + }, + // 合并数据的方法 + integrateData (dataList) { + let integrateList = []; + dataList.forEach(function (item) { + integrateList.push({ + questionId: item.id, + questionType: item.type, + answer: item.value + }); + }); + return integrateList; + }, + // 整合提交到后台数据 + handleIntegrateData () { + // 问题分为两个列表 + let submitInfo = []; + submitInfo.push(...this.integrateData(this.questions[1])); + submitInfo.push(...this.integrateData(this.questions[2])); + if (this.addQuestions) { + submitInfo.push(...this.integrateData(this.addQuestions)); + } + return submitInfo; + }, + // 根据选择的name, 得到相应当然计算系数 + getComputedVal (item) { + if (!(item.answer instanceof Array)) { + throw new Error('该下拉的选择列表不是一个数组'); + } + for (let i = 0; i < item.answer.length; i++) { + if (item.value === item.answer[i].name) { + return item.answer[i].value; + } + } + return ''; + }, + // 计算额度 + calculateQuota () { + // 额度 = 20000*教育程度*职业身份*是否有本地公积金*是否有本地社保*名下房产类型*名下是否有车*您的信用情况 + let _this = this; + // 计算的结果 + let quotaResult = 20000; + // 计算依据 + let calList = []; + // 获取需要计算的数据 + for (let i = 0; i < this.pageList.length; i++) { + let qList = this.questions[this.pageList[i]]; + for (let j = 0; j < qList.length; j++) { + if (qList[j].name === '教育程度' || + qList[j].name === '是否有本地公积金' || + qList[j].name === '是否有本地社保' || + qList[j].name === '名下是否有车' || + qList[j].name === '名下房产类型' || + qList[j].name === '您的信用情况' || + qList[j].name === '职业身份' + ) { + calList.push({ + name: qList[j].name, + value: _this.getComputedVal(qList[j]) + }); + } + } + } + // 额度评估的结果 + calList.forEach(function (item) { + quotaResult = Math.floor(quotaResult * item.value); + }); + let submitInfo = { + assessRecVos: _this.handleIntegrateData() + }; + systemApi.saveAssessmentList(submitInfo).then(response => { + }, error => { + statusCodeManage.showTipOfStatusCode(error,_this); + }); + this.$router.push({ + path: '/f-assessment-result', + query: { + quota: quotaResult + } + }); + } + }, + activated: function () { + this.value = 1; + this.pageList = []; + this.questions = []; + this.activePageItem = 0; + this.isLastStep = false; + this.addQuestions = ''; + this.fetchQuestionList(); + } + } +</script> + +<style lang="less"> + @import "../../style/mixin"; + + .assessment-page { + background-color: @color-background-default; + .vux-header { + .color-linear-gradient(@color-gradient-darkBlue-left, @color-gradient-darkBlue-right); + .vux-header-title { + font-size: 18px; + } + } + .tip { + padding-left: 12px; + font-size: @font-size-small; + color: @color-text-third; + line-height: 32px; + } + .weui-cells { + margin-top: 0; + font-size: @font-size-base; + .weui-cell { + .weui-cell__bd { + font-size: @font-size-medium; + } + } + } + .weui-cells:before { + display: none; + } + .weui-cells:after { + display: none; + } + input::-webkit-input-placeholder { + color: #999 !important; + } + .f-sheet { + .f-cell { + padding-left: 0; + .f-cell-ft { + font-size: @font-size-medium; + padding-right: 20px; + } + } + .f-cell:after { + display: none; + } + } + .unit { + color: @color-text-primary; + vertical-align: middle; + padding-left: 5px; + } + .f-actionsheet-menu { + .formItemBorder { + border-bottom: 1px solid @color-divider-regular; + } + } + .f-button, .weui-btn { + margin-top: 30px; + font-size: @font-size-primary; + } + .formItemBorder { + border-bottom: 1px solid @color-background-default; + } + .vux-1px-b:after { + border-color: #ddd; + } + } +</style> diff --git a/src/views/home/assessmentResult.vue b/src/views/home/assessmentResult.vue new file mode 100644 index 0000000..4dbdee7 --- /dev/null +++ b/src/views/home/assessmentResult.vue @@ -0,0 +1,303 @@ +<template> + <div class="assessment-result-page"> + <x-header :left-options="{showBack: true, backText: '', preventGoBack:true}" @on-click-back="goBackPage" class="gradient-color">额度评估</x-header> + <div class="result-box"> + <!--表盘开始--> + <div class="dash-board"> + <div class="circle" :style="{ transform: dashRotate }"> + <div class="square"></div> + </div> + <div class="result"> + <p>您的额度评估如下</p> + <p>¥<span>{{ quota }}</span></p> + </div> + </div> + <!--表盘结束--> + <!--波浪开始--> + <div class="waveWrapper gradient-color waveAnimation"> + <div class="waveWrapperInner bgTop"> + <div class="wave waveTop"></div> + </div> + <div class="waveWrapperInner bgMiddle"> + <div class="wave waveMiddle"></div> + </div> + <div class="waveWrapperInner bgBottom"> + <div class="wave waveBottom"></div> + </div> + </div> + <!--波浪结束--> + </div> + <FBlockTitle title="为你推荐" v-if="prodList.length"></FBlockTitle> + <FProdList :lists="prodList" @on-click-prodItem="handleProductJump" v-if="prodList.length"></FProdList> + </div> +</template> + +<script> + /** + * Created by c.y on 2018/3/16. + * 额度评估的结果页 + */ + import FBlockTitle from '../../components/common/FBlockTitle.vue'; + import FProdList from '../../components/common/FProdList.vue'; + import systemApi from '../../api/api'; + import statusCodeManage from '../../api/statusCodeManage'; + import {XHeader} from 'vux'; + + export default { + name: 'f-assessment-result', + data() { + return { + dashRotate: 'rotate(0deg)', + quota: 0, // 额度结果 + prodList: [] // 产品列表 + } + }, + components: { + FBlockTitle, + FProdList, + XHeader + }, + methods: { + goBackPage(){ + this.$router.push({path:'f-main'}); + }, + // 处理产品跳转 + handleProductJump (item) { + // 极速贷款或者银行卡 + if (item.productType === 40000005 || item.productType === 40000006) { + this.$router.push({ + path: '/f-loan-detail', + query: { + id: item.prodId, + } + }); + // 信用卡 + } else if (item.productType === 40000007) { + this.$router.push({ + path: '/credit-detail', + query: { + id: item.prodId, + } + }); + } + }, + // 获取Attr的列表, prodElements产品组件的元素列表 + getAttrList (prodElements) { + // 获取用户修改的数据 + let attrList = []; + if (prodElements instanceof Array) { + prodElements.map(function (listItem) { + listItem.attrs.forEach(function (item) { + attrList.push(item.value); + }); + }); + } + return attrList; + }, + init () { + let _this = this; + systemApi.fetchPushProd().then((res) => { + res.body.forEach(function (item) { + _this.prodList.push({ + prodId: item.unit.prodId, + content: _this.getAttrList(item.showEles), + productType: item.unit.prodType, + applyNumber: item.unit.showNumPrefix + item.unit.showNum + }); + }); + }, (error) => { + statusCodeManage.showTipOfStatusCode(error,_this); + }); + } + }, + activated: function () { + let _this = this; + this.quota = 0; + if (this.$route.query.quota) { + this.quota = this.$route.query.quota; + } + this.prodList=[]; + this.init(); + setTimeout(function () { + _this.dashRotate = 'rotate(200deg)'; + }, 500); + } + } +</script> + +<style lang="less"> + @import "../../style/mixin"; + .assessment-result-page { + .result-box { + padding-top: 38px; + .color-linear-gradient(@color-gradient-darkBlue-left, @color-gradient-darkBlue-right); + } + .vux-header { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + .vux-header-title { + font-size: 18px; + } + .vux-header-left { + .left-arrow:before { + border: solid 1px @color-white; + border-width: 2px 0 0 2px; + } + } + .vux-header-right{ + color: @color-white !important; + } + } + } + @keyframes move_wave { + 0% { + transform: translateX(0) translateZ(0) scaleY(1) + } + 50% { + transform: translateX(-25%) translateZ(0) scaleY(1) + } + 100% { + transform: translateX(0) translateZ(0) scaleY(1) + } + } + + .waveWrapper { + height: 68px; + overflow: hidden; + position: relative; + } + + .waveWrapperInner { + position: absolute; + width: 100%; + overflow: hidden; + height: 100%; + bottom: -1px; + } + + .bgTop { + z-index: 15; + opacity: 0.5; + } + + .bgMiddle { + z-index: 10; + opacity: 0.75; + } + + .bgBottom { + z-index: 5; + } + + .wave { + position: absolute; + left: 0; + width: 200%; + height: 100%; + background-repeat: repeat no-repeat; + background-position: 0 bottom; + transform-origin: center bottom; + } + + .waveTop { + background-size: 60% 60px; + background-image: url(../../assets/img/wave-top.png); + } + + .waveAnimation .waveTop { + animation: move-wave 3s infinite; + -webkit-animation: move-wave 3s; + -webkit-animation-delay: 1s; + animation-delay: 1s; + } + + .waveMiddle { + background-size: 60% 60px; + background-image: url(../../assets/img/wave-mid.png); + } + + .waveAnimation .waveMiddle { + animation: move_wave 10s linear infinite; + } + + .waveBottom { + background-size: 60% 60px; + background-image: url(../../assets/img/wave-bot.png); + } + + .waveAnimation .waveBottom { + animation: move_wave 15s linear infinite; + } + + .dash-board { + position: relative; + width: 100%; + height: 200px; + text-align: center; + color: @color-white; + font-size: @font-size-medium; + &:before { + content: ''; + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%, -50%); + width: 200px; + height: 200px; + border-radius: 50%; + border: 2px solid #68c1f8; + border-bottom-color: transparent; + } + &:after { + content: ''; + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%, -50%); + width: 140px; + height: 140px; + border-radius: 50%; + border: 6px solid #a1e1fe; + border-bottom-color: transparent; + } + .result { + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%, -50%); + width: 100%; + p { + &:first-child { + font-size: @font-size-medium; + } + &:last-child { + font-size: 20PX; + span { + font-size: 30PX; + } + + } + } + } + .circle { + width: 200px; + height: 200px; + margin: 0 auto; + border-radius: 50%; + border: 1px solid transparent; + position: relative; + transform: rotate(0deg); + transition: all 1s; + .square { + position: absolute; + left: 25px; + bottom: 30px; + width: 6px; + height: 6px; + margin-left: -6px; + border-radius: 50%; + border: 2px solid #9ddcfc; + background-color: @color-white; + } + } + } +</style> diff --git a/src/views/home/blankPage.vue b/src/views/home/blankPage.vue new file mode 100644 index 0000000..487515f --- /dev/null +++ b/src/views/home/blankPage.vue @@ -0,0 +1,98 @@ +<template> + <div class="blank-page"> + + </div> +</template> + +<script> + /** + * Created by c.y on 2018/4/3. + * 空白页 + */ + import systemApi from '../../api/api'; + import store from '../../store/index'; + import statusCodeManage from '../../api/statusCodeManage'; + + export default { + name: 'f-blank-page', + data(){ + return { + + } + }, + methods:{ + init:function () { + let _this = this; + + let _newClientInfo =null; + _newClientInfo = window.localStorage.getItem('newClientInfo'); + _newClientInfo = JSON.parse(_newClientInfo); + // 这里区分是 H5 还是 原生环境 + if(_newClientInfo.cn == ''){ // 这里是原生环境 + let _intId = setInterval(function () { + _newClientInfo = window.localStorage.getItem('newClientInfo'); + _newClientInfo = JSON.parse(_newClientInfo); + // console.log(_newClientInfo) + if(_newClientInfo.appVersion && _newClientInfo.appVersion.length){ + _this.getRouterConfig(); + clearInterval(_intId); + } + },40) + }else{ // H5 环境 + _this.$router.push({ path: '/f-main',query:{cn:_newClientInfo.cn} }); + } + + }, + getRouterConfig:function () { + let _this = this; + systemApi.getRouterControlConfig().then( + res => { + if(res){ + store.commit('UPDATE_LOADING', {isLoading: false}); + let router = true; + let routerConfig = res.isPublish; + //根据配置文件去控制使用 审核业务路由 还是 正常路由 + let _clientInfo = window.localStorage.getItem ('newClientInfo'); + _clientInfo = JSON.parse (_clientInfo); + let _chanNo = routerConfig[_clientInfo.chanNo]; + for (let _obj in _chanNo) { + if (_chanNo[_obj][_clientInfo.childChan] != undefined) { + const _len = _chanNo[_obj][_clientInfo.childChan].length; + const _appVerisonArr = _chanNo[_obj][_clientInfo.childChan]; + for (let i = 0; i < _len; i++) { + if (_appVerisonArr[i] == _clientInfo.appVersion) { + // 进入审核业务路由 + router = false; + // window.localStorage.setItem('initRouter','auditRouter'); + // _this.$router.addRoutes(auditRouter); + // _this.$router.push({ path: '/f-main' }); + _this.$router.push({ path: '/iosnewsHome' }); + return false; + } + } + } + } + if(router){ + // 跳转到 旧C 端 + // _this.$router.addRoutes(auditRouter); + // 进入到这个判断一定是原生环境 + _this.$router.push({ path: '/f-main'}); + } + } + }, + error => { + statusCodeManage.showTipOfStatusCode(error,_this); + } + ); + } + }, + activated(){ + store.commit('UPDATE_LOADING', {isLoading: true}); + this.init() + } + }; +</script> + + +<style lang="less"> +</style> diff --git a/src/views/home/calculator.vue b/src/views/home/calculator.vue new file mode 100644 index 0000000..1a8c680 --- /dev/null +++ b/src/views/home/calculator.vue @@ -0,0 +1,637 @@ +<template> + <div class="calculator-pge"> + <x-header :left-options="{backText: ''}">贷款计算器</x-header> + <div class="calculator-blank"> + <img src="../../assets/img/calcBg.jpg"> + </div> + <div class="calculator-error"> + <p v-text="errorText" class="error-text" + :class="{'calculator-entererror-text':isActive,'calculator-gouterror-text':!isActive}"></p> + </div> + <group class="calculator-input" label-width="100px"> + <x-input title="贷款金额" + v-model.trim="loanVal" + :novalidate="true" + :max="7" + type="tel" + placeholder="请输入金额" + @on-focus="hideerr" + @input.native="handleInputLoanVal" + text-align="right" + is-link> + <span slot="right" class="unit">元</span> + </x-input> + <cell title="贷款期数" + :value="monthVal.label" + is-link + :class="{'cell-select': monthVal.label !== '请选择'}" + @click.native="showsheet"></cell> + <x-input title="月利率" + v-model.trim="monthRate" + placeholder="请输入月利率" + @input.native="handleInputMonthRate" + @on-focus="hideerr" + text-align="right" + placeholder-align="right"> + <span slot="right" class="unit">%</span> + </x-input> + <cell title="还款方式" + :value="repaymentVal.selecteLabel" + is-link + :class="{'cell-select': repaymentVal.selecteLabel !== '请选择'}" + @click.native="showRepayments"></cell> + <actionsheet v-model="show" :menus="mouths" @on-click-menu="getSelectedMonth" show-cancel></actionsheet> + <actionsheet v-model="show1" :menus="repayments" @on-click-menu="getSelectedRepayments" + show-cancel></actionsheet> + </group> + <FButton @on-click-button="gotoPage">开始计算</FButton> + <!--模态窗--> + <div v-show="calulatorResult" class="calulator-result-modal"> + <div class="calculateresult-page"> + <div class="returnInfo"> + <x-header @on-click-back="backPage" :left-options="{backText: '',preventGoBack:true}">贷款计算器 + </x-header> + <div class="calculatorresult-blank"> + <p>共需还款</p> + <p>¥{{sumRepayment | formatNum}}</p> + </div> + <flexbox class="calculatorresult-center"> + <flexbox-item> + <p> + <span>贷款金额</span> <br> + <span>¥ {{loanVal | formatNum}}</span> + </p> + </flexbox-item> + <flexbox-item> + <p> + <span>贷款利息</span> <br> + <span>¥ {{sumAccrual | formatNum}} </span> + </p> + </flexbox-item> + <flexbox-item> + <p> + <span>贷款期数</span> <br> + <span>{{ monthVal.val }}个月</span> + </p> + </flexbox-item> + </flexbox> + <div class="calculatorresult-body"> + <span>期数</span> + <span>月供(元)</span> + <span>本金(元)</span> + <span>利息(元)</span> + </div> + </div> + <div class="repPlantLists" :style="{ height: resultHeight }"> + <div class="calculatorresult-detail" v-for="i in lists"> + <span>第{{i.periods}}期</span> + <span>{{i.payment | formatNum}}</span> + <span>{{i.principal | formatNum}}</span> + <span>{{i.accrual | formatNum}}</span> + </div> + </div> + </div> + </div> + <!--模态窗的结束--> + </div> +</template> +<script> + /** + * Created by z.x.q on 2018/3/22. + * 计算器的首页 + */ + import {Actionsheet, Cell, Flexbox, FlexboxItem, XButton, Group, XDialog, XHeader, XInput} from 'vux'; + import FButton from '../../components/common/FButton'; + import validator from '../../tool/validator'; + + export default { + name: 'f-calculator', + components: { + XHeader, + Group, + XInput, + Cell, + Actionsheet, + FButton, + XButton, + XDialog, + Flexbox, + FlexboxItem + }, + data() { + return { + isActive: false, + resultHeight: 0, // 计算结果页的高度 + show: false, + show1: false, + sumAccrual: 0, // 总利息 + sumRepayment: 0, // 总还款数 + errorText: '', + calulatorResult: false, // 展示显示结果 + loanVal: null, + monthRate: null, + repaymentVal: { + selecteLabel: '请选择', + type: null + }, + monthVal: { + label: '请选择', + val: null + }, + mouths: [ + {label: '60个月', val: 60}, + {label: '36个月', val: 36}, + {label: '24个月', val: 24}, + {label: '18个月', val: 18}, + {label: '12个月', val: 12}, + {label: '9个月', val: 9}, + {label: '6个月', val: 6}, + {label: '3个月', val: 3}, + {label: '1个月', val: 1}, + ], + repayments: [{ + label: '等本等息<br/><span style="color:#666;font-size:12px;">月供,本金,利息每月相同</span>', + selecteLabel: '等本等息', + type: 3 + }, { + label: '等额本息<br/><span style="color:#666;font-size:12px;">月供每月相同,本金逐月递增,利息逐月递减</span>', + selecteLabel: '等额本息', + type: 2 + }, { + label: '等额本金<br/><span style="color:#666;font-size:12px;">月供逐月递减,本金每月相同,利息逐月递减</span>', + selecteLabel: '等额本金', + type: 1 + }, { + label: '先息后本<br/><span style="color:#666;font-size:12px;">每月还固定利息,到期还全部本金</span>', + selecteLabel: '先息后本', + type: 4 + } + ], +// 模态窗数据 + lists: [] + }; + }, + methods: { + // 只能输入数字,即正整数,键盘控制的可以只输入数字,但是 + // 用户如果使用的第三方键盘,还是可以输入其他字符 + handleInputLoanVal() { + let _this = this; + setTimeout(function () { + if (_this.loanVal) { + if (_this.loanVal.length > 9) { + _this.loanVal = _this.loanVal.substring(0, 9); + } else { + _this.loanVal = _this.loanVal.replace(/[^\d]/g, ''); + } + } + }, 50); + }, + // 月利率输入判断,只能输入小数点,把用户输入的非数字与点的输入替换成空字符串 + handleInputMonthRate() { + let _this = this; + setTimeout(function () { + if (_this.monthRate) { + if (_this.monthRate.length > 6) { + _this.monthRate = _this.monthRate.substring(0, 6); + } else { + _this.monthRate = _this.monthRate.replace(/[^\d.]/g, ''); + } + } + }, 50); + }, + showsheet: function () { + this.show = true; + }, + showRepayments: function () { + this.show1 = true; + }, + getSelectedMonth: function (menuKey, menuItem) { + if (menuItem) { + this.monthVal = menuItem; + } + }, + getSelectedRepayments: function (menuKey, menuItem) { + if (menuItem) { + this.repaymentVal = menuItem; + } + }, + gotoPage: function () { + let _this = this; + if (this.isActive) { + return; + } + // 跳转计算 + // 判断四个条件是否都输入 + let _loanVal = this.loanVal; // 还款总额 + let _monthRate = this.monthRate / 100; // 还款利率 + let _monthVal = this.monthVal.val; // 还款期数 + let _repayment = this.repaymentVal.type; // 还款类型 + let checkPositiveInteger = /^[1-9]{1}\d{0,8}$/; + if (validator.checkValEmpty(_loanVal)) { + this.errorText = "请输入贷款金额"; + this.isActive = true; + setTimeout(() => { + this.isActive = false; + }, 2000); + return false; + // 贷款金额需大于500,输入的内容为正整数,没有小数 + } else if (validator.checkValEmpty(_monthVal)) { + this.errorText = "请选择贷款期数"; + this.isActive = true; + setTimeout(() => { + this.isActive = false; + }, 2000); + return false; + } else if (validator.checkValEmpty(this.monthRate)) { + this.errorText = "请输入月利率"; + this.isActive = true; + setTimeout(() => { + this.isActive = false; + }, 2000); + return false; + } else if (validator.checkValEmpty(_repayment)) { + this.errorText = "请选择还款方式"; + this.isActive = true; + setTimeout(() => { + this.isActive = false; + }, 2000); + return false; + } else if (!checkPositiveInteger.test(_loanVal)) { + this.errorText = "请输入正确的贷款金额"; + this.isActive = true; + setTimeout(() => { + this.isActive = false; + }, 2000); + return false; + } else if (_loanVal < 500) { + this.errorText = "贷款金额需大于500"; + this.isActive = true; + setTimeout(() => { + this.isActive = false; + }, 2000); + return false; + // 这里的月利率就是这个,不是处于100的,不要修改 + } else if (!validator.checkIntegerAndDot(this.monthRate)) { + this.errorText = "请输入正确的月利率"; + this.isActive = true; + setTimeout(() => { + this.isActive = false; + }, 2000); + return false; + } else if (_monthRate.toFixed(4) > 2) { + this.errorText = "月利率需小于200%"; + this.isActive = true; + setTimeout(() => { + this.isActive = false; + }, 2000); + return false; + } + this.lists = []; +// =================== 等额本金 ================begin============== + if (this.repaymentVal.type == 1) { + this.sumRepayment = 0; + this.sumAccrual = 0; + for (let i = 1; i <= _monthVal; i++) { + let _obj = { + periods: i, // 期数 + principal: _loanVal / _monthVal, // 本金 + accrual: _loanVal * (_monthVal + 1 - i) / _monthVal * _monthRate // 利息 + }; + _obj.payment = Number(_obj.principal) + Number(_obj.accrual); + this.sumAccrual += _obj.accrual; + this.lists.push(_obj); + } + this.sumRepayment = this.sumAccrual + parseInt(this.loanVal); + } +//=================== 等额本金 ================end============== + +//=================== 等额本息 ================begin============== + if (this.repaymentVal.type == 2) { + this.sumRepayment = 0; + this.sumAccrual = 0; + let _remainingMoney = _loanVal; + for (let i = 1; i <= _monthVal; i++) { + let _obj = { + periods: i, // 期数 + principal: 0, // 本金 + accrual: 0, // 利息 + payment: 0 // 月供 + }; + _obj.payment = _loanVal * _monthRate * Math.pow((1 + _monthRate), _monthVal) / (Math.pow((1 + _monthRate), _monthVal) - 1); // 月供 + _obj.accrual = _remainingMoney * _monthRate; // 利息 + _obj.principal = _obj.payment - _obj.accrual; // 本金 + _remainingMoney = _remainingMoney - _obj.principal; + this.sumAccrual += _obj.accrual; + console.log(_obj); + this.lists.push(_obj); + } + this.sumRepayment = this.sumAccrual + parseInt(this.loanVal); + } + // =============== 等本等息 ================begin============== + if (this.repaymentVal.type == 3) { + this.sumRepayment = 0; + this.sumAccrual = 0; + for (let i = 1; i <= _monthVal; i++) { + let _obj = { + periods: i, // 期数 + principal: _loanVal / _monthVal, // 本金 + accrual: _loanVal * _monthRate, // 利息 + payment: 0 // 月供 + }; + _obj.payment = _obj.principal + _obj.accrual; // 月供 + this.sumAccrual += _obj.accrual; + this.lists.push(_obj); + } + this.sumRepayment = this.sumAccrual + parseInt(this.loanVal); + } +//=================== 先息后本 ================begin============== + if (this.repaymentVal.type == 4) { + this.sumRepayment = 0; + this.sumAccrual = 0; + for (let i = 1; i <= _monthVal; i++) { + let _obj = { + periods: i, // 期数 + principal: 0.00, // 本金 + accrual: _loanVal * _monthRate // 利息 + }; + if (i == _monthVal) { + _obj.payment = Number(_loanVal) + Number(_obj.accrual); // 月供 + if (_loanVal) { + _obj.principal = parseInt(_loanVal); + } else { + _obj.principal = 0.00; + } + + } else { + _obj.payment = Number(_obj.accrual); // 月供 + } + this.sumAccrual += _obj.accrual; + this.lists.push(_obj); + } + this.sumRepayment = this.sumAccrual + parseInt(this.loanVal); + } +// =================== 等额本金 ================end============== + + this.calulatorResult = true; + }, + backPage: function () { + // 模态窗数据清理 + this.calulatorResult = false; + this.isActive = false; + this.loanVal = ''; + this.monthRate = ''; + this.repaymentVal = { + selecteLabel: '请选择', + type: null + }; + this.monthVal = { + label: '请选择', + val: null + }; + }, + hideerr() { + this.isActive = false; + } + }, + filters: { + formatNum: function (value) { + if (!value) return '0.00'; + value = value * 1; + return value.toFixed(2); + } + }, + activated: function () { + // 获取视窗的高度 + let clientHeight = document.documentElement.clientHeight; + this.resultHeight = (clientHeight - 272) + 'px'; + this.$store.commit('UPDATE_DIRECTION', {direction: 'in'}); + }, + deactivated: function () { + this.isActive = false; + this.loanVal = ''; + this.monthRate = ''; + this.show = false; + this.show1 = false; + this.repaymentVal = { + selecteLabel: '请选择', + type: null + }; + this.monthVal = { + label: '请选择', + val: null + }; + } + }; + +</script> + +<style lang="less"> + @import "../../style/mixin.less"; + + .calculator-pge { + height: 100%; + .vux-header { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + .vux-header-title { + font-size: 20PX; + } + .vux-header-left { + .left-arrow:before { + border: solid 1px @color-white; + border-width: 2px 0 0 2px; + } + } + } + [class^="weui-icon-"]:before, [class*=" weui-icon-"]:before { + margin-bottom: 5px; + } + .cell-select { + .weui-cell__ft { + color: @color-text-primary; + } + } + .calculator-input { + .weui-cells, .vux-no-group-title { + margin-top: 0; + } + } + .weui-actionsheet__cell { + font-size: @font-size-base; + } + .calulator-result-modal { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + overflow-y: scroll; + background: #fff; + z-index: 10000; + } + background-color: @color-background-default; + .weui-label, .vux-label, .unit { + font-size: @font-size-base; + } + .unit { + color: @color-black; + display: inline-block; + width: 15px; + height: 15px; + line-height: 27PX; + } + .weui-cell { + height: 24PX; + line-height: 24PX; + } + .weui-cell__bd, .weui-cell__ft { + font-size: @font-size-medium; + } + .weui-cells:before, .weui-cells:after { + display: none; + } + .weui-cell__bd { + margin-right: 2%; + } + .weui-cell_access { + .weui-cell__ft { + padding-right: 20px; + } + } + input::-webkit-input-placeholder { + color: #999 !important; /* WebKit browsers */ + } + .calculator-blank { + height: 150px; + img { + width: 100%; + height: 100%; + display: block; + } + } + .calculator-error { + height: 32px; + width: 100%; + position: relative; + overflow: hidden; + background-color: @color-background-default; + transition: all .5s; + .error-text { + width: 100%; + height: 32px; + transition: all .5s; + line-height: 32px; + background-color: #ffa523; + text-align: center; + color: @color-white; + position: absolute; + } + .calculator-entererror-text { + top: 0; + } + .calculator-gouterror-text { + top: -32px; + } + } + .f-button, .weui-btn { + margin-top: 44px; + font-size: @font-size-primary; + } + } + + /*计算结果弹窗样式*/ + .calculateresult-page { + .weui-actionsheet__cell { + font-size: 16PX; + } + .returnInfo { + width: 100%; + height: 272px; + } + .repPlantLists { + overflow-y: auto; + } + + .vux-header { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + .vux-header-title { + font-size: 20PX; + } + + .vux-header-left { + .left-arrow:before { + border: solid 1px @color-white; + border-width: 2px 0 0 2px; + } + } + } + .calculatorresult-blank { + height: 150px; + text-align: center; + .flexLayout(center, center, column); + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + p { + color: @color-white; + + &:first-child { + font-size: @font-size-small; + } + &:last-child { + font-size: 30Px; + font-weight: bold; + } + } + } + .calculatorresult-center { + font-size: @font-size-small; + color: @color-white; + padding: 10px 0; + height: 24px; + .color-linear-gradient(@color-gradient-lightBlue-left, @color-primary, 45deg); + text-align: center; + .vux-flexbox-item { + p { + span { + &:first-child { + display: inline-block; + margin-left: 3px; + font-size: @font-size-medium; + } + &:first-child { + display: inline-block; + margin-left: 3px; + font-size: @font-size-small; + } + + } + } + } + } + .calculatorresult-body { + padding: 0 12px; + height: 32px; + background-color: @color-background-default; + color: @color-text-third; + font-size: @font-size-medium; + .flexLayout(center, center, row); + text-align: center; + + span { + display: block; + flex: 1; + } + + } + .calculatorresult-detail { + margin: 0 12px; + height: 44px; + .flexLayout(center, center, row); + font-size: @font-size-medium; + text-align: center; + span { + display: block; + flex: 1; + } + } + } +</style> + diff --git a/src/views/home/home.vue b/src/views/home/home.vue new file mode 100644 index 0000000..bdc14f8 --- /dev/null +++ b/src/views/home/home.vue @@ -0,0 +1,725 @@ +<template> + <div class="home"> + <x-header :left-options="{showBack: true, backText: '返回', preventGoBack:true}" + v-if="iosBackArrow" + @on-click-back="goBackPage"></x-header> + <!--banner--> + <div class="home-banner"> + <!--定位 和 消息--> + <div class="home-header"> + <span> + <router-link tag="span" to="/f-position"> + <i class="iconfont icon-location"></i> + <span v-text="cityName" class="city-name"></span> + </router-link> + </span> + <span> + <i @click="jumporNo" class="iconfont icon-comment"></i> + <span v-show="showReddot" class="vux-reddot"></span> + </span> + </div> + <!--banner--> + <HomeBanner :lists="indexBanner" @indexJump="indexJump"></HomeBanner> + </div> + <!--产品分类--> + <div class="product-type"> + <div class="type-item" @click="handleProductTypeJump(0)"> + <span class="speed"> + <i class="iconfont icon-index-extreme"></i> + </span> + <p>极速贷款</p> + </div> + <div class="type-item" @click="handleProductTypeJump(1)"> + <span class="bank"> + <i class="iconfont icon-index-bank"></i> + </span> + <p>银行贷款</p> + </div> + <div class="type-item" @click="handleProductTypeJump(2)"> + <span class="credit"> + <i class="iconfont icon-index-card"></i> + </span> + <p>信用卡</p> + </div> + </div> + <FSpace type="small"></FSpace> + <!--通知--> + <Notice :lists="noticeList" v-if="noticeList.length" @indexJump="indexJump"></Notice> + <FSpace type="small" v-if="noticeList.length"></FSpace> + <!--额度评估与贷款计算器--> + <div class="calculator-assessment"> + <div class="calculator-item vux-1px-r" @click="handleAssessmentJump"> + <img onclick="return false" src="../../assets/img/assessment.png" alt=""> + </div> + <div class="calculator-item" @click="handleCalculatorJump"> + <img onclick="return false" src="../../assets/img/calculator.png" alt=""> + </div> + </div> + <FSpace type="small"></FSpace> + <!--活动专区--> + <FBlockTitle title="活动专区" v-if="activityList.length"></FBlockTitle> + <ul class="activity-area" v-if="activityList.length"> + <li v-for="(i,index) in activityList" :key="index"> + <img :src="i.context" alt="i.name" @click="indexJump(i)"> + </li> + </ul> + <!--footer--> + <FSpace type="small" v-if="activityList.length"></FSpace> + <!--为你优选--> + <FBlockTitle title="为你优选" v-if="prodList.length"> + <div slot="more" class="more" @click="handlePushMore">更多<i class="iconfont icon-arrow"></i></div> + </FBlockTitle> + <FProdList :lists="prodList" @on-click-prodItem="handleProductJump" v-if="prodList.length"></FProdList> + <FSpace type="small" v-if="prodList.length"></FSpace> + <!--信用卡专栏--> + <canvas id="defaultIMG" style="display: none;" width="750" height="388"></canvas> + <FBlockTitle title="信用卡专栏" v-if="creditList.length"> + <div slot="more" class="more" @click="handleCreditCardMore">更多<i class="iconfont icon-arrow"></i></div> + </FBlockTitle> + <div class="credit-swipe-box" v-if="creditList.length >= 1"> + <swiper :options="swiperOption" ref="mySwiper" @click="handleSwiper"> + <swiperSlide v-for="(i,index) in creditList" :key="index"> + <img :src="i.context"> + </swiperSlide> + </swiper> + </div> + <FSpace type="large"></FSpace> + <FFooter :index="0"></FFooter> + </div> +</template> + +<script> + /** + * Created by c.y on 2018/3/16. + * 首页 + */ + import {cookie, XHeader} from 'vux'; + import FFooter from '../../components/common/FFooter.vue'; + import FBlockTitle from '../../components/common/FBlockTitle.vue'; + import FProdList from '../../components/common/FProdList.vue'; + import FSpace from '../../components/common/FSpace.vue'; + import HomeBanner from '../../components/HomeBanner.vue'; + import {swiper, swiperSlide} from 'vue-awesome-swiper'; + import Notice from '../../components/Notice.vue'; + import SysApi from '../../api/api'; + import statusCodeManage from '../../api/statusCodeManage'; + import jsBridge from '../../tool/jsBridge'; + + export default { + name: 'f-main', + components: { + FFooter, + FBlockTitle, + FProdList, + FSpace, + swiper, + swiperSlide, + XHeader, + Notice, + HomeBanner, + cookie, + }, + data() { + return { + //模态窗 + showModal: false, + modalContent: '你需要登录哦', + comfirmText: '登陆', + cancelText: '下次吧', + showReddot: false, + cityName: '', // 当前城市名称 + cityCode: null, // 当前城市code + indexBanner: [], //首页最上方的banner + noticeList: [], //通知 + creditList: [], //信用卡专区 + activityList: [], + prodList: [], // 产品列表 + showNone: false, //产品列表空白页 + swiperOption: { + // swiper的配置 + autoplay: { + delay: 3000, + disableOnInteraction: false + }, + spaceBetween: 10, + slidesPerView: 'auto', + centeredSlides: true, + loop: true, + observeParents: true, + notNextTick: true, + observer: true + }, + iosBackArrow: false + }; + }, + computed: { + swiper() { + return this.$refs.mySwiper.swiper; + } + }, + methods: { + // 跳转到IOS原生界面 + goBackPage () { + let isLogin = window.sessionStorage.getItem('newSid') ? 1 : 2; + let loginInfo = { + isLogin: isLogin, + sessionKey: isLogin === 1 ? window.sessionStorage.getItem('newSid') : false + }; + // 获取到 + jsBridge.backToIosToken(loginInfo); + }, + // 处理信用卡的跳转更多----贷款的信用卡 + handleCreditCardMore () { + this.$store.commit('UPDATE_ACTIVE_TAB', {loanActiveTab: 0}); + this.$router.push({ + path: '/f-loan/f-credit' + }); + }, + // 处理为你优选跳转更多----贷款极速贷款 + handlePushMore () { + this.$store.commit('UPDATE_ACTIVE_TAB', {loanActiveTab: 2}); + this.$router.push({ + path: '/f-loan/f-speed' + }); + }, + handleSwiper() { + let activeIndex; + // 没有重复 + if (this.swiper.activeIndex <= this.creditList.length) { + activeIndex = this.creditList.length - this.swiper.activeIndex; + } else { + activeIndex = this.creditList.length * 2 - this.swiper.activeIndex; + } + if (activeIndex !== 0) { + activeIndex = this.creditList.length - activeIndex; + } + this.indexJump(this.creditList[activeIndex]); + }, + // 更新城市code cityCode为发送请求的code + updateCityCode(cityCode) { + // 全局发送城市code + let newClientInfo = JSON.parse( + window.localStorage.getItem('newClientInfo') + ); + newClientInfo.areaCode = cityCode; + window.localStorage.setItem( + 'newClientInfo', + JSON.stringify(newClientInfo) + ); + }, + // 调取高德地图api, 获取cityCode与cityName + fetchCityCodeByGao() { + let _this = this; + // 创建地图对象需要一个div对象id为geolocation + let mapObj = new AMap.Map('homeGeolocation'); + // 使用城市搜索组件 + mapObj.plugin('AMap.Geolocation', function () { + // AMap.Geolocation AMap.CitySearch + let geolocation = new AMap.Geolocation({ + // Geolocation + enableHighAccuracy: false, //是否使用高精度定位,默认:true + GeoLocationFirst: false, // 默认为false,设置为true的时候可以调整PC端为优先使用浏览器定位,失败后使用IP定位 + timeout: 10000, //超过10秒后停止定位,默认:无穷大 + maximumAge: 0, //定位结果缓存0毫秒,默认:0 + showButton: false, // 是否显示定位按钮 + useNative: false // 是否使用安卓定位sdk用来进行定位 + // enableHighAccuracy: true, //是否使用高精度定位,默认:true + // timeout: 10000, //超过10秒后停止定位,默认:无穷大 + // maximumAge: 0, //定位结果缓存0毫秒,默认:0 + // showButton: false, //显示定位按钮,默认:true + }); + // getCurrentPosition getLocalCity + // 定位失败的次数,我们约定为3次,3次失败的话,就展示获取城市失败 + let posiTimes = 3; + _this.getGeolocation(geolocation, posiTimes); + }); + }, + // 高德地图调取api + getGeolocation(geolocation, posiTimes) { + let _this = this; + geolocation.getCurrentPosition(function (status, result) { + posiTimes--; + // 定位成功 + if (status == 'complete') { + _this.cityName = result.addressComponent.city; + _this.cityCode = result.addressComponent.adcode; + _this.cityCode = + _this.cityCode.substring(0, _this.cityCode.length - 2) + + '00'; + let cityCodeObj = { + name: _this.cityName, + code: _this.cityCode + }; + window.localStorage.setItem( + 'cityCode', + JSON.stringify(cityCodeObj) + ); + _this.updateCityCode(_this.cityCode); + // 重新调取api,渲染首页 + _this.init(); + return false; + } else { + // 定位失败,一直重复定位,如果3次之后,那么就不在定位,直接展示定位失败 + // 定位失败后,还是传递成都code,只是上面的城市的显示为定位失败 + if (!posiTimes) { + _this.cityName = '定位失败'; + // _this.init(); + return false; + } else { + // 用户拒绝定位,传递成都code + if ( + result.message === 'Geolocation permission denied.' + ) { + _this.cityName = '定位失败'; + // _this.init(); + return false; + } else { + // 如果是其他原因造成的定位失败的话,我们尝试三次定位,如何失败的话 + // 默认传递成都code,显示定位失败 + _this.getGeolocation(geolocation, posiTimes); + } + } + } + }); + }, + indexJump(item) { + switch (item.type) { + case 1: + //跳转到对应的导航页面 + this.$router.push({path: item.detailContent}); + break; + case 2: + //跳转到对应的贷款分类 + this.$router.push({path: item.detailContent}); + break; + case 3: + //跳转到贷款详情,需要产品ID + if (item.prodTypeId === 40000005) { + this.$router.push({ + path: '/f-loan-detail', + query: {id: item.detailContent} + }); + } else if (item.prodTypeId === 40000006) { + this.$router.push({ + path: '/f-loan-detail', + query: {id: item.detailContent} + }); + } else if (item.prodTypeId === 40000007) { + this.$router.push({ + path: '/f-credit-detail', + query: {id: item.detailContent} + }); + } + break; + case 4: + //第三方页面 + window.location.href = item.detailContent; + break; + case 5: + //什么都不做 + break; + case 6: + //资讯 + this.$router.push({path: '/f-news-detail', query: {id: item.detailContent}}); + break; + default: + break; + } + }, + /** + * 页面初始化 获取定位 + */ + initCityCode: function () { + let _this = this; + // 如果本地有城市数据 ,就不需要去请求 + let _cityCode = window.localStorage.getItem('cityCode'); + // 本地有cityCode的话 + if (_cityCode) { + _cityCode = JSON.parse(_cityCode); + _this.cityName = _cityCode.name; + _this.cityCode = _cityCode.code; + // 页面的初始化 + _this.init(); + return false; + } else { + // cityCode默认是成都的,先使用默认的成都code的话,调取后台后台首页 + // 等调取高德地图的api返回code,再调取后台的重新渲染首页的 + _this.cityName = '定位中'; + _this.init(); + _this.fetchCityCodeByGao(); + } + }, + // 处理产品跳转 + handleProductJump(item) { + // 极速贷款或者银行卡 + if ( + item.productType === 40000005 || + item.productType === 40000006 + ) { + this.$router.push({ + path: '/f-loan-detail', + query: { + id: item.prodId + } + }); + // 信用卡 + } else if (item.productType === 40000007) { + this.$router.push({ + path: '/f-credit-detail', + query: { + id: item.prodId + } + }); + } + }, + // 产品分类的跳转 + handleProductTypeJump(typeId) { + if (typeId === 0) { + this.productTypeJump('/f-loan/f-speed', typeId); + } else if (typeId === 1) { + this.productTypeJump('/f-loan/f-bank', typeId); + } else if (typeId === 2) { + this.productTypeJump('/f-loan/f-credit', typeId); + } + }, + // 分类跳转 + productTypeJump(path, typeId) { + this.$router.push({ + path: path, + query: { + typeId: typeId + } + }); + }, + toConfirm() { + this.$router.push({name: 'f-login'}); + }, + // 额度计算跳转--这个需要用户登录,如果未登录跳转login + handleAssessmentJump() { + // 判断是否登录 + let _newSid = window.sessionStorage.getItem('newSid'); + if (_newSid) { + // 登录跳转 + this.$router.push({path: '/f-assessment'}); + } else { + // 跳转到登录界面 + // 记录当前地址 + window.sessionStorage.setItem( + 'newGoBackPage', + window.location.hash.split('#')[1] + ); + this.$router.push({path: '/f-login'}); + } + }, + // 贷款计算器跳转--这个需要用户登录,如果未登录跳转login + handleCalculatorJump() { + // 判断是否登录 + let _newSid = window.sessionStorage.getItem('newSid'); + if (_newSid) { + // 登录跳转 + this.$router.push({path: '/f-compute'}); + } else { + // 跳转到登录界面 + // 记录当前地址 + window.sessionStorage.setItem( + 'newGoBackPage', + window.location.hash.split('#')[1] + ); + this.$router.push({path: '/f-login'}); + } + }, + // 获取Attr的列表, prodElements产品组件的元素列表 + getAttrList(prodElements) { + // 获取用户修改的数据 + let attrList = []; + if (prodElements instanceof Array) { + prodElements.map(function (listItem) { + listItem.attrs.forEach(function (item) { + attrList.push(item.value); + }); + }); + } + return attrList; + }, + // 页面的初始化 + init() { + let _this = this; + let _newSid = window.sessionStorage.getItem('newSid'); + let _newClientInfo = window.sessionStorage.getItem('newClientInfo'); + if (_newSid == null) { + } + SysApi.homeInit().then( + res => { + _this.prodList = []; + _this.indexBanner = res.body.indexBanner; + _this.noticeList = res.body.announcement; + _this.creditList = res.body.creditCardBanner; + _this.activityList = res.body.activityBanner; + cookie.set('ecImageCodeNum', res.body.imageCodeNum); + res.body.pushProductInfos.forEach(function (item) { + _this.prodList.push({ + prodId: item.unit.prodId, + content: _this.getAttrList(item.showEles), + productType: item.unit.prodType, + applyNumber: item.unit.showNumPrefix + item.unit.showNum + }); + }); + }, + err => { + statusCodeManage.showTipOfStatusCode(err, this); + } + ); + // 获取消息 + SysApi.homeNotice().then( + res => { + // 回调成功后的函数 + let sid = window.sessionStorage.getItem('newSid'); + if (!sid) { + _this.showReddot = false; + window.sessionStorage.setItem('unRead', '[]'); + return false; + } + if (res.body.length) { + _this.showReddot = true; + window.sessionStorage.setItem( + 'unRead', + JSON.stringify(res.body) + ); + } else { + window.sessionStorage.setItem('unRead', '[]'); + _this.showReddot = false; + } + }, + error => { + // 回调失败的函数 + statusCodeManage.showTipOfStatusCode(error, this); + } + ); + }, + // 判断点击是否跳转到消息页面 + jumporNo() { + this.$router.push({path: '/f-message-center'}); + }, + }, + activated: function () { + this.indexBanner = []; + this.noticeList = []; + this.activityList = []; + this.prodList = []; + // 初始化页面方法获取当前城市 + // 把数据清空放在activated,不放在deactivated里面,由于渲染能力弱 + // 的是手机,点击跳转页面时,deactivated数据清空,导致dom不存在, + // 而此时页面还没有跳转,看到的内容是初始化没有什么内容的值,样式结构不一致 + let canvObj = document.getElementById('defaultIMG'); + let cxt = canvObj.getContext('2d'); + var grd = cxt.createLinearGradient(0, 0, 0, 388); + grd.addColorStop(0, '#f1f1f1'); + grd.addColorStop(1, '#999'); + cxt.fillStyle = grd; + cxt.fillRect(0, 0, 750, 388); + // 创建默认图片 + this.indexBanner = [ + { + context: canvObj.toDataURL(), + detailContent: '', + id: 21, + name: '默认图', + place: 1, + prodTypeId: null, + sysType: 1, + type: 2 + } + ]; + this.initCityCode(); + if (this.$refs.mySwiper) { + this.$refs.mySwiper.swiper.slideTo(1, 100, false); + } + } + } +</script> +<style lang="less"> + @import '../../style/mixin'; + @import '../../style/swiper.min.css'; + + .home { + .vux-header-back { + color: #fff !important; + } + } + + .weui-dialog__btn_primary { + color: @color-primary !important; + } + + .product-type .iconfont { + font-size: 18px; + } + + .swipe-box { + box-sizing: border-box; + padding: 10px 0; + .swiper-container { + padding-left: 50px; + } + } + + .home-banner { + position: relative; + .home-header { + position: absolute; + left: 0; + top: 0; + .flexLayout(); + box-sizing: border-box; + width: 100%; + height: 44px; + padding: 0 12px; + font-size: @font-size-primary; + line-height: 44px; + z-index: 1000; + color: #fff; + vertical-align: middle; + .city-name { + display: inline-block; + text-align: left; + .ellipsis(70px); + font-size: 14px; + vertical-align: bottom; + } + .icon-comment { + font-size: 20px; + } + span { + flex: 1; + &:last-child { + text-align: right; + } + .city-name { + text-align: left; + } + } + } + .swiper-slide { + width: 100%; + height: 190px; + img { + width: 100%; + height: 190px; + } + } + } + + .product-type { + .flexLayout(); + box-sizing: border-box; + padding: 20px 0 10px; + .type-item { + flex: 1; + text-align: center; + } + span { + display: inline-block; + width: 44px; + height: 44px; + line-height: 44px; + color: #fff; + border-radius: 50%; + } + .iconfont { + font-size: 20px; + } + .speed { + .color-linear-gradient(@color-gradient-darkBlue-left, @color-gradient-darkBlue-right); + .icon-index-extreme { + display: inline-block; + } + } + .bank { + .color-linear-gradient(@color-gradient-red-left, @color-gradient-red-right); + } + .credit { + .color-linear-gradient(@color-gradient-lightBlue-left, @color-gradient-lightBlue-right); + } + P { + font-size: @font-size-medium; + line-height: 34px; + color: @color-text-primary; + } + } + + .calculator-assessment { + height: 70px; + .flexLayout(); + .calculator-item { + width: 50%; + img { + width: 100%; + border: 0; + display: block; + } + } + } + + .activity-area { + width: 100%; + padding: 10px 0 12px 0; + font-size: 0; + list-style: none; + overflow-x: scroll; + white-space: nowrap; + box-sizing: border-box; + &::-webkit-scrollbar { + display: none; + } + li { + display: inline-block; + width: 160px; + height: 84px; + margin-left: 10px; + border-radius: @border-radius-normal-size; + overflow: hidden; + &:last-child { + margin-right: 10px; + } + } + a { + display: block; + cursor: pointer; + text-decoration: none; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); + } + img { + display: inline-block; + width: 160px; + height: 84px; + } + } + + .credit-swipe-box { + width: 100%; + padding: 10px 0; + height: 170px; + box-sizing: border-box; + background: @color-white; + .swiper-wrapper { + align-items: center; + } + .swiper-slide { + width: 300px; + height: 120px; + text-align: center; + border-radius: @border-radius-normal-size; + transition: height 0.4s; + img { + width: 300px; + height: 100%; + transition: all 0.4s; + border-radius: @border-radius-normal-size; + } + } + .swiper-slide-active { + width: 300px; + height: 150px; + } + } +</style> diff --git a/src/views/home/position.vue b/src/views/home/position.vue new file mode 100644 index 0000000..42991f3 --- /dev/null +++ b/src/views/home/position.vue @@ -0,0 +1,451 @@ +<template> + <div class="position-page"> + <!--不使用定位,由于解决ios的侧滑问题,定位使得页面切换出现错乱--> + <x-header + :left-options="{showBack: true, backText: ''}" + id="searchCityHeader"> + <div slot="overwrite-title"> + <x-input v-model.trim="inputInfor" + @keyup.native="userInput" @on-change="userInput" + title="输入城市名称" placeholder="输入城市名称"> + <i slot="label" class="iconfont icon-search"></i> + </x-input> + </div> + </x-header> + <!--滚动区域--> + <div class="position-content" :style="{height: contentHeight}" ref="posContent"> + <!--用户搜索结果集--> + <ul id="search_ul" + v-show="isSearch" + ref="searchUl" + class="page" :style="{height: contentHeight}"> + <li class="city-name vux-1px-b" + v-for="item in searchResults" + v-text="item.name" + @click="setCityCode(item)"></li> + </ul> + <!--初始化数据展示结果集--> + <div v-show="!isSearch"> + <div class="userCityInfo"> + <!--当前定位城市--> + <h4>当前定位城市</h4> + <span id="letter_当"></span> + <div class="current-city-box"> + <i class="iconfont icon-location"></i> + <span class="current-city" @click="handleCurrentCity" v-text="cityName"></span> + <span class="position-box" @click="handleAgainPosition"> + <i class="iconfont icon-position"></i>重新定位 + </span> + </div> + <!--热门城市--> + <h4 id="letter_热">热门城市</h4> + <div class="hot-city-list"> + <span v-for="item in hotCity" v-text="item.name" @click="setCityCode(item)"></span> + </div> + </div> + <!--城市列表--> + <ul id="cityWrap"> + <li class="city_letter" v-for="(value, key) in cityList" :key="key"> + <h4 class="city_letter_name" v-bind:id="'letter_' + key" v-text="key"></h4> + <ul> + <li class="city-name vux-1px-b" + v-for="item in value" + :key="item.code" + v-text="item.name" @click="setCityCode(item)"></li> + </ul> + </li> + </ul> + <!--首字母列表--> + <ul class="letter_ul"> + <li v-for="item in letterList" :key="item" v-html="item" @click="clickLetter($event)"></li> + </ul> + </div> + <div id="positionGeolocation" style="display: none;"></div> + </div> + </div> +</template> + +<script> + /** + * Created by c.y on 2018/3/16. + * 我是定位页面 + * 开发 by c.k + */ + import {XInput, XHeader, Search} from 'vux'; + import sysApi from '../../api/api'; + import statusCodeManage from '../../api/statusCodeManage'; + + export default { + name: 'f-position', + data () { + return { + cityName: '', // 当前城市名 + adcode: '', // 当前城市code + isSearch: false, // 控制搜索列表 + hotCity: null, // 热门城市 + cityList: null, // 城市列表 + letterList: null, // 字母列表 + inputInfor: '', // 用户输入内容 + searchResults: [], + contentHeight: 0 // 定位的内容 + }; + }, + components: { + XInput, XHeader, Search + }, + methods: { + // 更新城市code cityCode为发送请求的code + updateCityCode (cityCode) { + // 全局发送城市code + let newClientInfo = JSON.parse(window.localStorage.getItem('newClientInfo')); + newClientInfo.areaCode = cityCode; + window.localStorage.setItem('newClientInfo', JSON.stringify(newClientInfo)); + }, + // 调取高德地图api, 获取cityCode与cityName + fetchCityCodeByGao: function () { + let _this = this; + // 创建地图对象 需要一个div 对象 id 为geolocation + let mapObj = new AMap.Map('positionGeolocation'); + // 使用城市搜索组件 + mapObj.plugin('AMap.Geolocation', function () { // AMap.Geolocation AMap.CitySearch + let geolocation = new AMap.Geolocation({ // Geolocation + enableHighAccuracy: false, //是否使用高精度定位,默认:true + GeoLocationFirst: false, // 默认为false,设置为true的时候可以调整PC端为优先使用浏览器定位,失败后使用IP定位 + timeout: 10000, //超过10秒后停止定位,默认:无穷大 + maximumAge: 0, //定位结果缓存0毫秒,默认:0 + showButton: false, // 是否显示定位按钮 + useNative: false // 是否使用安卓定位sdk用来进行定位 + // enableHighAccuracy: true, //是否使用高精度定位,默认:true + // timeout: 10000, //超过10秒后停止定位,默认:无穷大 + // maximumAge: 0, //定位结果缓存0毫秒,默认:0 + // showButton: false, //显示定位按钮,默认:true + }); + // getCurrentPosition getLocalCity + // 定位失败的次数,我们约定为3次,3次失败的话,就展示获取城市失败 + let posiTimes = 3; + _this.getGeolocation(geolocation, posiTimes); + }); + }, + // 高德地图调取api + getGeolocation (geolocation, posiTimes) { + let _this = this; + geolocation.getCurrentPosition(function (status, result) { + posiTimes--; + // 定位成功 + if (status == 'complete') { + _this.cityName = result.addressComponent.city; + _this.adcode = result.addressComponent.adcode; + _this.adcode = _this.adcode.substring(0, _this.adcode.length - 2) + '00'; + let cityCodeObj = { + name: _this.cityName, + code: _this.adcode + }; + window.localStorage.setItem('cityCode', JSON.stringify(cityCodeObj)); + _this.updateCityCode(_this.adcode); + _this.$router.push({path: '/f-main'}); + return false; + } else { + // 定位失败,一直重复定位,如果3次之后,那么就不在定位,直接展示定位失败 + // 定位失败后,还是使用上一次的code + if (!posiTimes) { + _this.cityName = '定位失败'; + let cityCodeObj = { + name: _this.cityName, + code: JSON.parse(window.localStorage.getItem('newClientInfo')).areaCode + }; + window.localStorage.setItem('cityCode', JSON.stringify(cityCodeObj)); + return false; + } else { + // 如果用户拒绝定位,我们可以给出提示,传递成都code + if (result.message === 'Geolocation permission denied.') { + _this.$vux.toast.text('请开启定位权限,以获取正常的使用', 'middle'); + _this.cityName = '定位失败'; + let cityCodeObj = { + name: _this.cityName, + code: JSON.parse(window.localStorage.getItem('newClientInfo')).areaCode + }; + window.localStorage.setItem('cityCode', JSON.stringify(cityCodeObj)); + return false; + } else { + // 如果是其他原因造成的定位失败的话,我们尝试三次定位,如何失败的话 + // 默认传递成都code,显示定位失败 + _this.getGeolocation(geolocation, posiTimes); + } + } + } + }); + }, + userInput: function () { + if (this.inputInfor.length > 0) { + let _py = this.inputInfor; + let result = []; + let letterKey = Object.keys(this.cityList); + let len = letterKey.length; + for (let i = 0; i < len; i++) { + let letterVal = this.cityList[letterKey[i]]; + for (let j = 0, mLen = letterVal.length; j < mLen; j++) { + let m = letterVal[j]; + if (m.name.indexOf(_py) == 0) { + result.push(m); + } + } + } + this.$refs.searchUl.scrollTop = 46; + this.isSearch = true; + this.searchResults = result; + } else { + this.isSearch = false; + } + }, + // 处理选择当前城市 + handleCurrentCity () { + // 如果当前正在定位的话,那么点击当前城市,那么就不做什么反应 + if (this.cityName === '城市定位中...') { + return false; + // 定位失败的话 + } else if (this.cityName === '定位失败') { + return false; + } else { + // 只有定位成功后,才跳转到首页 + this.$router.push({path: '/f-main'}); + } + }, + // 处理选择重新定位按钮 + handleAgainPosition () { + this.cityName = '城市定位中...'; + this.fetchCityCodeByGao(); + }, + // 处理选择城市 + setCityCode: function (item) { + // 返回城市信息 + let _item = item; + this.isSearch = false; + this.searchResults = []; + this.inputInfor = ''; + + window.localStorage.setItem('cityCode', JSON.stringify(_item)); + // 修改 localS 的 areaCode + this.updateCityCode(_item.code); + this.$router.push({path: '/f-main'}); + }, + // click 字母, 修改是为了修复ios返回时,dom不加载,需要点击空白才会加载 + clickLetter: function (e) { + let target = e.target || e.srcElement || event.srcElement || event.target; + let _htmlNode = document.getElementById('letter_' + target.innerHTML); + if (_htmlNode) { +// let newY = _htmlNode.offsetTop; +// newY -= document.getElementById('searchCityHeader').offsetHeight; +// window.scroll(0, newY); + this.$refs.posContent.scrollTop = _htmlNode.offsetTop - 46; + } else { +// window.scroll(0, 0); + this.$refs.posContent.scrollTop = 0; + } + } + }, + deactivated(){ + this.cityName = ''; + this.adcode = ''; + this.isSearch = false; + this.hotCity = null; + this.cityList = null; + this.letterList = null; + this.inputInfor = ''; + this.searchResults = []; + this.contentHeight = 0; + this.$store.commit('UPDATE_DIRECTION', {direction: 'none'}); + }, + activated: function () { + // 如果本地没有城市的code的话 + this.contentHeight = (document.documentElement.clientHeight - 46) + 'px'; + let cityCode = window.localStorage.getItem('cityCode'); + if (!cityCode) { + this.cityName = '城市定位中...'; + // 请求高德地图api + this.fetchCityCodeByGao(); + } else { + this.cityName = JSON.parse(cityCode).name; + this.adcode = JSON.parse(cityCode).code; + } + // 获取城市列表 + sysApi.getAreaInfo().then(response => { + this.hotCity = response.hotCity; + this.cityList = response.cityList; + response.group.unshift('热'); + response.group.unshift('<i class="iconfont icon-location goto-location-icon"></i>'); + this.letterList = response.group; + }, + error => { + statusCodeManage.showTipOfStatusCode(error, this); + }); + } + }; +</script> + + +<style lang="less"> + @import "../../style/mixin"; + + .position-page { + .vux-header { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + .vux-header-title { + font-size: 18px; + + } + .vux-header-left { + .left-arrow:before { + border: solid 1px @color-white; + border-width: 2px 0 0 2px; + } + } + } + .position-content { + overflow-y: auto; + } + .iconfont { + display: inline-block; + color: @color-white; + margin-top: 2px; + } + .userCityInfo { + background-color: @color-background-default; + } + .userCityInfo h4 { + height: 32px; + line-height: 32px; + padding: 0 12px; + font-size: @font-size-medium; + font-weight: normal; + color: @color-text-third; + } + .vux-header-title-area { + .weui-search-bar { + padding: 0; + } + } + .vux-header-title-area, .vux-header .vux-header-title { + position: relative; + right: -14px; + top: 3px; + margin: 0 36px; + } + + .vux-header .weui-cell { + padding: 0 4PX; + border-bottom: 1PX solid @color-white; /*no*/ + } + + .vux-header-title-area .weui-input { + height: 30px; + } + .vux-header-title-area .icon-search { + position: relative; + font-size: 20Px; + } + .vux-header-title-area input { + position: relative; + padding-left: 10px; + line-height: 1; + color: @color-white; + font-size: @font-size-medium; + } + .vux-header-title-area input::-webkit-input-placeholder { + color: @color-white; + } + .vux-header-title-area .weui-icon-clear:before { + color: @color-white; + } + .hot-city-list { + padding: 0 12px; + .flexLayout(); + flex-wrap: wrap; + span { + width: 30%; + height: 44px; + line-height: 44px; + display: inline-block; + margin-right: 10px; + margin-bottom: 10px; + font-size: @font-size-medium; + text-align: center; + box-sizing: border-box; + background-color: @color-white; + color: @color-text-primary; + border-radius: @border-radius-normal-size; + &:nth-child(3n) { + margin-right: 0; + } + } + } + .current-city-box { + width: 100%; + height: 44px; + padding: 0 12px; + font-size: @font-size-medium; + line-height: 44px; + background: @color-white; + box-sizing: border-box; + .current-city { + font-size: @font-size-base; + color: @color-text-primary; + } + .position-box { + color: @color-primary; + float: right; + .icon-position { + color: @color-primary; + } + } + .icon-location { + color: @color-primary; + } + } + .letter_ul { + position: fixed; + top: 60%; + right: -10px; + width: 44px; + text-align: center; + box-sizing: border-box; + font-size: @font-size-small; + color: @color-primary; + border-radius: 6px; + background-color: transparent; + -moz-transform: translate3d(0, -50%, 0); + -ms-transform: translate3d(0, -50%, 0); + -o-transform: translate3d(0, -50%, 0); + -webkit-transform: translate3d(0, -50%, 0); + transform: translate3d(0, -50%, 0); + z-index: 999; + li { + line-height: 1.3; + } + .goto-location-icon { + color: @color-primary; + } + } + .city_letter { + background-color: @color-background-default; + color: @color-text-primary; + text-indent: 6px; + } + .city_letter_name { + padding: 0 12px; + font-weight: normal; + font-size: @font-size-base; + } + .city-name { + padding-left: 12px; + font-size: @font-size-medium; + color: @color-text-primary; + line-height: 44px; + background-color: @color-white; + } + li { + list-style: none; + } + } + + +</style> diff --git a/src/views/incomeLoan/agreement/collectData.vue b/src/views/incomeLoan/agreement/collectData.vue new file mode 100644 index 0000000..e46cb49 --- /dev/null +++ b/src/views/incomeLoan/agreement/collectData.vue @@ -0,0 +1,92 @@ +<template> + <div class="collectData"> + <div> + <p style="margin:0pt; orphans:0; text-align:center; widows:0"> + <span style="font-family:微软雅黑; font-size:15pt; font-weight:bold">数据采集使用授权书</span> + </p> + <p style="margin:0pt; orphans:0; text-align:justify; widows:0"> + <span style="font-family:Calibri; font-size:10.5pt"> </span> + </p> + <p style="margin:0pt; orphans:0; text-indent:21pt; widows:0"> + <span style="font-family:微软雅黑; font-size:12pt">本人不可撤销地同意并授权</span> + <span style="font-family:微软雅黑; font-size:12pt">四川锦程消费金融有限责任公司(以下简称“公司”)</span> + <span style="font-family:微软雅黑; font-size:12pt">通过电话回访的方式(</span> + <span style="font-family:微软雅黑; font-size:12pt">回访电话号码:</span> + <span style="font-family:微软雅黑; font-size:12pt">028-</span> + <span style="font-family:微软雅黑; font-size:12pt">68729345</span> + <span style="font-family:微软雅黑; font-size:12pt">)</span> + <span style="font-family:微软雅黑; font-size:12pt">采集本人提供的本人所在地区</span> + <span style="color:#ff0000; font-family:微软雅黑; font-size:12pt">社保/</span> + <span style="color:#ff0000; font-family:微软雅黑; font-size:12pt">住房公积金</span> + <span style="font-family:微软雅黑; font-size:12pt">网站登录所需账户和密码。</span> + </p> + <p style="margin:0pt; orphans:0; text-indent:21pt; widows:0"> + <span style="font-family:微软雅黑; font-size:12pt">本人不可撤销地同意并授权“公司”使用前述账户和密码,登录相应</span> + <span style="color:#ff0000; font-family:微软雅黑; font-size:12pt">社保/</span> + <span style="color:#ff0000; font-family:微软雅黑; font-size:12pt">公积金</span> + <span style="font-family:微软雅黑; font-size:12pt">网站去采集包括但不限于本人</span> + <span style="color:#ff0000; font-family:微软雅黑; font-size:12pt">社保/</span> + <span style="color:#ff0000; font-family:微软雅黑; font-size:12pt">住房公积金</span> + <span style="font-family:微软雅黑; font-size:12pt">流水等信息。本人亦</span> + <span style="font-family:微软雅黑; font-size:12pt">不可撤销地同意并授权</span> + <span style="font-family:微软雅黑; font-size:12pt">“公司”基于信用评估等风险控制业务需求,使用基于本人提供的账户和密码而采集到的个人相关信息,或将前述信息(除账户及密码信息)提供给与“公司”开展上述合作的公司使用。</span> + </p> + <p style="margin:0pt; orphans:0; text-indent:21pt; widows:0"> + <span style="font-family:微软雅黑; font-size:12pt">授权采集</span> + <span style="font-family:微软雅黑; font-size:12pt">及</span> + <span style="font-family:微软雅黑; font-size:12pt">授权使用期限:自本人签署本授权书之日起,至本人与“公司”信贷关系终结之日止。</span> + <span style="font-family:微软雅黑; font-size:12pt">信贷关系终结是指</span> + <span style="font-family:微软雅黑; font-size:12pt">本人完全</span> + <span style="font-family:微软雅黑; font-size:12pt">向</span> + <span style="font-family:微软雅黑; font-size:12pt">公司</span> + <span style="font-family:微软雅黑; font-size:12pt">履行</span> + <span style="font-family:微软雅黑; font-size:12pt">相关</span> + <span style="font-family:微软雅黑; font-size:12pt">信贷协议</span> + <span style="font-family:微软雅黑; font-size:12pt">中约定的</span> + <span style="font-family:微软雅黑; font-size:12pt">义务</span> + <span style="font-family:微软雅黑; font-size:12pt">。</span> + <span style="font-family:微软雅黑; font-size:12pt">本人同意“公司”在本人放弃贷款申请或贷款申请被“公司”拒绝时,继续保留此授权书及本人提交的身份证件复印件等所有贷款申请材料。</span> + </p> + <p style="margin:0pt; orphans:0; text-indent:21pt; widows:0"> + <span style="color:#ff0000; font-family:微软雅黑; font-size:12pt">本人在此郑重承诺和申明:因本人</span> + <span style="color:#ff0000; font-family:微软雅黑; font-size:12pt">基于本授权书</span> + <span style="color:#ff0000; font-family:微软雅黑; font-size:12pt">告知“公司”个人私密信息及</span> + <span style="color:#ff0000; font-family:微软雅黑; font-size:12pt">授权“公司”查询个人私密信息</span> + <span style="color:#ff0000; font-family:微软雅黑; font-size:12pt">所</span> + <span style="color:#ff0000; font-family:微软雅黑; font-size:12pt">产生</span> + <span style="color:#ff0000; font-family:微软雅黑; font-size:12pt">的</span> + <span style="color:#ff0000; font-family:微软雅黑; font-size:12pt">任何</span> + <span style="color:#ff0000; font-family:微软雅黑; font-size:12pt">风险,由本人和被授权“公司”</span> + <span style="color:#ff0000; font-family:微软雅黑; font-size:12pt">基于自身所应负责任</span> + <span style="color:#ff0000; font-family:微软雅黑; font-size:12pt">承担相应后果。</span> + </p> + <p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; widows:0"> + <span style="font-family:微软雅黑; font-size:12pt; font-style:italic; font-weight:bold">授权人声明已知悉并同意上述条款所载内容。授权人理解并认可上述条款的涵义及其法律后果,并不持任何异议。</span> + </p> + <p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; widows:0"> + <span style="font-family:Calibri; font-size:12pt; font-weight:bold"> </span> + </p> + <p style="font-size:10pt; line-height:150%; margin:0pt; orphans:0; widows:0"> + <span style="font-family:宋体; font-size:10pt; font-weight:bold">授权人</span> + <span style="font-family:宋体; font-size:10pt; font-weight:bold">(签名)</span> + <span style="font-family:宋体; font-size:10pt; font-weight:bold">:</span> + <span style="font-family:Calibri; font-size:10pt; font-weight:bold">____________________</span> + </p> + <p style="font-size:10pt; line-height:150%; margin:0pt; orphans:0; widows:0"> + <span style="font-family:宋体; font-size:10pt; font-weight:bold">证件号码:</span> + <span style="font-family:Calibri; font-size:10pt; font-weight:bold">____________________________</span> + </p> + <p style="font-size:10pt; line-height:150%; margin:0pt; orphans:0; widows:0"> + <span style="font-family:宋体; font-size:10pt; font-weight:bold">证件类型:□身份证</span> + <span style="font-family:宋体; font-size:10pt; font-weight:bold"> □临时身份证 □其他</span> + <span style="font-family:Calibri; font-size:10pt; font-weight:bold">____________________</span> + </p> + <p style="margin:0pt; orphans:0; text-align:justify; widows:0"> + <span style="font-family:宋体; font-size:10pt; font-weight:bold">授权日期: 年 月 日</span> + </p> + </div> + </div> +</template> +<script> +export default {}; +</script> diff --git a/src/views/incomeLoan/agreement/personInfo.vue b/src/views/incomeLoan/agreement/personInfo.vue new file mode 100644 index 0000000..46a7e8c --- /dev/null +++ b/src/views/incomeLoan/agreement/personInfo.vue @@ -0,0 +1,80 @@ +<template> + <div class="person-info"> + <div> + <p style="margin:0pt; orphans:0; text-align:center; widows:0"> + <span style="font-family:黑体; font-size:16pt; font-weight:bold">个人信息查询使用授权书</span> + </p> + <p style="margin:0pt; orphans:0; text-align:center; widows:0"> + <span style="font-family:'Times New Roman'; font-size:10.5pt; font-weight:bold"> </span> + </p> + <p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-indent:21pt; widows:0"> + <span style="font-family:宋体; font-size:12pt">本人不可撤销地同意并授权四川锦程消费金融有限责任公司(以下简称“公司”)向</span> + <span style="font-family:黑体; font-size:12pt; font-weight:bold">“中国人民银行金融信用信息基础数据库”</span> + <span style="font-family:宋体; font-size:12pt">查询并获取本人个人信用报告,同时授权公司向</span> + <span style="font-family:黑体; font-size:12pt; font-weight:bold">公司合作机构(公司合作机构包括但不限于芝麻信用管理有限公司、百融金融信息服务股份有限公司等合法设立的机构)以及其他合法来源查询并获取本人个人相关信息(包括但不限于本人人像照片、</span> + <span style="font-family:黑体; font-size:12pt; font-weight:bold">身份</span> + <span style="font-family:黑体; font-size:12pt; font-weight:bold">证留档照片、</span> + <span style="font-family:黑体; font-size:12pt; font-weight:bold">个人基本信息、信贷交易信息等相关信息)</span> + <span style="font-family:宋体; font-size:12pt">。查询事由包</span> + <span style="font-family:宋体; font-size:12pt">括</span> + <span style="font-family:黑体; font-size:12pt; font-weight:bold">审核本人贷款申请、审核本人作为担保人、进行贷后管理及处理本人异议等</span> + <span style="font-family:宋体; font-size:12pt">。</span> + </p> + <p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-indent:21pt; widows:0"> + <span style="font-family:黑体; font-size:12pt; font-weight:bold">本人不可撤销地同意并授权“公司”及其合作的合法设立的机构基于贷前审查、信用评估、电子合同签署及管理、贷后管理、违约追究等风险控制业务需求以及提供征信服务、风控服务等其他相关服务的目的,依法自行或向有关机构查询、采集、保存、整理、加工、使用、提供、验证本人个人相关信息。本人知晓被采集的信息中包括收入、存款、有价证券、商业保险、不动产的信息和纳税数额信息。</span> + </p> + <p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-indent:21pt; widows:0"> + <span style="font-family:黑体; font-size:12pt; font-weight:bold">本人知晓</span> + <span style="font-family:黑体; font-size:12pt; font-weight:bold">上述授权</span> + <span style="font-family:黑体; font-size:12pt; font-weight:bold">可能会给本人带来信用损失以及其他可能的不利后果,包括但不限于:对本人的信用评级(评分)、信用报告等结果可能产生的不利影响,以及该等信息被信息使用者依法提供给第三方后被他人不当利用的风险,但本人仍然同意授权前述机构</span> + <span style="font-family:黑体; font-size:12pt; font-weight:bold">按本授权书对本人</span> + <span style="font-family:黑体; font-size:12pt; font-weight:bold">信息</span> + <span style="font-family:黑体; font-size:12pt; font-weight:bold">进行采集、使用等</span> + <span style="font-family:黑体; font-size:12pt; font-weight:bold">。</span> + </p> + <p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-indent:21pt; widows:0"> + <span style="font-family:宋体; font-size:12pt">本人亦不可撤销地同意并授权“公司”将包括本人的</span> + <span style="font-family:黑体; font-size:12pt; font-weight:bold">个人基本信息、信贷交易信息等相关信息(包括不良信息),向中国人民银行金融信用信息基础数据库以及公司合作的合法设立的机构报送。</span> + <span style="font-family:宋体; font-size:12pt">本人理解并同意,</span> + <span style="font-family:黑体; font-size:12pt; font-weight:bold">这些信息对本人的信用评级(评分)、信用报告等结果可能产生的正面及负面影响</span> + <span style="font-family:宋体; font-size:12pt">。</span> + </p> + <p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-indent:21pt; widows:0"> + <span style="font-family:黑体; font-size:12pt">授权期限:自本人签署本授权书之日起,至本人与“公司”信贷关系终结之日止。</span> + </p> + <p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-indent:21pt; widows:0"> + <span style="font-family:宋体; font-size:12pt">本人不可撤销地同意“公司”在本人放弃贷款申请或贷款申请被“公司”拒绝时,</span> + <span style="font-family:黑体; font-size:12pt; font-weight:bold">继续保留此授权书及本人提交的身份证件复印件等</span> + <span style="font-family:宋体; font-size:12pt">所有贷款申请材料。</span> + </p> + <p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; text-indent:21pt; widows:0"> + <span style="font-family:仿宋_GB2312; font-size:12pt; font-style:italic; font-weight:bold">授权人声明已知悉并同意上述条款所载内容。授权人理解并认可上述条款的涵义及其法律后果,并不持任何异议。</span> + </p> + <p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; widows:0"> + <span style="font-family:宋体; font-size:12pt; font-weight:bold">授权人(签名):</span> + <span style="font-family:'Times New Roman'; font-size:12pt; font-weight:bold">____________________</span> + </p> + <p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; widows:0"> + <span style="font-family:宋体; font-size:12pt; font-weight:bold">证件号码:</span> + <span style="font-family:'Times New Roman'; font-size:12pt; font-weight:bold">____________________________</span> + </p> + <p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; widows:0"> + <span style="font-family:宋体; font-size:12pt; font-weight:bold">证件类型:□身份证</span> + <span style="font-family:宋体; font-size:12pt; font-weight:bold"> □临时身份证 □其他</span> + <span style="font-family:'Times New Roman'; font-size:12pt; font-weight:bold">____________________</span> + </p> + <p style="font-size:12pt; line-height:150%; margin:0pt; orphans:0; widows:0"> + <span style="font-family:宋体; font-size:12pt; font-weight:bold">授权日期: 年 月 日</span> + </p> + </div> + </div> +</template> + +<script> +export default { + name: 'personInfo', + data() { + return {}; + } +}; +</script> diff --git a/src/views/incomeLoan/auditResults.vue b/src/views/incomeLoan/auditResults.vue new file mode 100644 index 0000000..eac7742 --- /dev/null +++ b/src/views/incomeLoan/auditResults.vue @@ -0,0 +1,170 @@ +<template> + <div class="loan-info-box"> + <x-header slot="header" + style="width:100%;height:46px;background-color: #ec6758" + :title="'审核结果'" + :left-options="{backText: '', preventGoBack:true}" + @on-click-back="goBackPage" + ></x-header> + <div class="approval-status"> + <icon type="warn" v-if="applyResult.orderStatus <= 3"></icon> + <p v-if="applyResult.orderStatus <= 3">审核中</p> + <i class="iconfont icon-cuowu" v-if="applyResult.orderStatus === 4"></i> + <p v-if="applyResult.orderStatus === 4">审核未通过</p> + <icon type="success" v-if="applyResult.orderStatus === 5"></icon> + <p v-if="applyResult.orderStatus === 5">审核通过</p> + </div> + <div v-if="applyResult.orderStatus <= 3" class="approval-result-content"> 尊敬的用户,您的申请材料已提交至锦程消费金融,正在审核中, + 稍后锦程消费金融工作人员会与您取得联系,请保持电话畅通,谢谢。 + + </div> + <div v-if="applyResult.orderStatus === 4" class="approval-result-content"> 尊敬的用户,您的申请材料未通过审核,您可在{{ reapplyTime + }}后继续申请。 + + </div> + <group v-if="applyResult.orderStatus === 5"> + <cell title="贷款额度">{{ applyResult.creditAmt }}元</cell> + <cell title="月还款额">{{ applyResult.dueAmt }}元</cell> + <cell title="还款期数">{{ applyResult.creditTerm }}期</cell> + <cell title="放款状态">{{ applyResult.loanStatus }}</cell> + </group> + <box gap="20px 15px"> + <x-button type="primary" @click.native="backToHome">返回首页</x-button> + </box> + <p class="loan-product-tip">金融产品由锦程消费金融提供</p> + </div> +</template> + +<script> + import {XHeader, Icon, XButton, Box, Group, Cell, dateFormat} from 'vux'; + import store from '../../store/index'; + import SystApi from '../../api/api'; + import statusCodeManage from '../../api/statusCodeManage'; + + export default { + name: 'incoAuditResults', + data () { + return { + applyResult: {}, + reapplyTime: '' + } + }, + methods: { + backToHome: function () { + const incomePage = window.sessionStorage.getItem('newProductDetailPage'); + this.$router.push({ + path: incomePage + }); + }, + goBackPage: function () { + this.$store.commit('UPDATE_DIRECTION', {direction: 'out'}); + const incomePage = window.sessionStorage.getItem('newProductDetailPage'); + this.$router.push({ + path: incomePage + }) + } + }, + activated: function () { + // 初始化信息 + let _this = this; + this.$store.commit('UPDATE_DIRECTION', {direction: 'in'}); + let submitInfo = { + prodId: this.$route.query.prodId + }; + SystApi.initApplyResult(submitInfo).then(response => { + if (response.errorCode === 0) { + _this.applyResult = response.body; + _this.reapplyTime = dateFormat(_this.applyResult.reapplyTime, 'YYYY/MM/DD') + } + }, error => { + statusCodeManage.showTipOfStatusCode(error, _this) + }) + }, + deactivated: function () { + this.$store.commit('UPDATE_DIRECTION', {direction: 'out'}); + }, + components: { + XHeader, + Icon, + XButton, + Box, + Group, + Cell + } + } +</script> + +<style lang="less"> + @import "../../style/mixin.less"; + + .header-space { + height: 46px; + } + + .weui-wepay-flow__title-bottom { + font-size: 12px; + } + + .approval-status { + padding: 20px 15px; + padding-top: 80px; + text-align: center; + } + + .approval-status p { + font-size: 15px; + line-height: 2; + } + + .approval-status .weui-icon { + font-size: 60px; + } + + .approval-result-content { + padding: 15px; + font-size: 15px; + color: #797979; + } + + .loan-info-box { + position: relative; + background-color: #fff; + .vux-header { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + .vux-header-left { + .left-arrow:before { + border: solid 1px @color-white; + border-width: 2px 0 0 2px; + } + } + } + } + + .loan-info-box .weui-btn_primary { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + } + + .loan-product-tip { + position: absolute; + left: 0; + bottom: 0; + width: 100%; + padding: 10px 0; + font-size: 10px; + color: rgb(204, 204, 204); + text-align: center; + } + + .approval-status .icon-cuowu { + font-size: 60px; + color: #F4333B; + } + + .approval-status .weui-icon-warn { + color: #f5d565; + } + + .approval-status .weui-icon-success { + color: #5ab7fa; + } +</style> diff --git a/src/views/incomeLoan/bindCard.vue b/src/views/incomeLoan/bindCard.vue new file mode 100644 index 0000000..b41ea94 --- /dev/null +++ b/src/views/incomeLoan/bindCard.vue @@ -0,0 +1,527 @@ +<template> + <div class="loan-info-box" :style="styleObject"> + <x-header slot="header" + style="width:100%;height:46px;background-color: #ec6758" + :title="headerTitle" + :left-options="{backText: '', preventGoBack:true}" + @on-click-back="goBackPage" + ></x-header> + <flow class="progressState"> + <flow-state state="1" title="个人信息" is-done></flow-state> + <flow-line is-done></flow-line> + <flow-state state="2" title="工作及居住信息" is-done></flow-state> + <flow-line is-done></flow-line> + <flow-state state="3" title="绑定银行卡" class="currentStep"></flow-state> + <flow-line></flow-line> + <flow-state state="4" title="证明材料"></flow-state> + </flow> + <group> + <group-title slot="title"><span style="color: #ec6758">*</span>银行卡信息</group-title> + <x-input title="姓名" v-model="bankInfo.name" :disabled="true"></x-input> + <x-input title="手机号" v-model="bankInfo.mobileNo" keyboard="number" :disabled="true"></x-input> + <x-input title="身份证号" v-model="bankInfo.idNo" keyboard="number" :disabled="true"></x-input> + <x-input type="tel" title="银行卡号" :max="19" v-model="bankInfo.card" + placeholder="请输入银行卡号" keyboard="number" pattern="[0-9]*" @on-change="inputBankCard" + @on-blur="blurBankCard"></x-input> + <x-input title="所属银行" v-model="bankName" v-if="bankName" :disabled="true" class="loan-cell"></x-input> + </group> + <div class="bind-tip">提示: 仅支持绑定储蓄卡</div> + <label for="registerAgree" class="register-agree"> + <input id="registerAgree" type="checkbox" v-model="agreementChecked" class="register-checkbox"> + <span class="register-agree-text"> + 我已阅读并同意 + </span> + <a @click="showActionsheet" class="agreementContent">《个人信息查询使用授权书》及《数据采集使用授权书》</a> + </label> + + <box gap="20px 15px"> + <x-button type="primary" @click.native="bindBankCard">下一步</x-button> + </box> + <box gap="20px 15px"> + <span style="float: left; color:#0092f1;" @click="updatePersonalInfo">修改个人信息</span> + <span style="float: right; color:#0092f1;" @click="querySupportBank">查询支持银行</span> + </box> + <div v-transfer-dom> + <x-dialog v-model="showBankList" class="support-bank"> + <div class="bank-list"> + <group> + <cell :title="item.name" v-for="item in bankInfo.bankNameList" :key="item.code"></cell> + </group> + </div> + <div @click="showBankList = false"> + <span class="vux-close"></span> + </div> + </x-dialog> + </div> + <actionsheet v-model="isShowActionsheet" :menus="actionsheetMenus" @on-click-menu="clickActionsheetMenus" + show-cancel> + </actionsheet> + <!--协议弹窗--> + <div class="agreement-content" v-if="isShowAgreementContent"> + <personInfo v-show="showAgreement"></personInfo> + <collectData v-show="!showAgreement"></collectData> + </div> + </div> +</template> + +<script> + import personInfo from './agreement/personInfo'; + import collectData from './agreement/collectData'; + import { + Flow, + FlowState, + FlowLine, + XDialog, + XHeader, + Group, + GroupTitle, + Cell, + XInput, + Selector, + XButton, + Box, + Actionsheet, + TransferDomDirective as TransferDom + } from 'vux'; + import store from '../../store/index'; + import validate from '../../tool/validator'; + import bankCardData from '../../tool/bankCardData'; + import SystApi from '../../api/api'; + import statusCodeManage from '../../api/statusCodeManage'; + + export default { + name: 'incoBindCard', + data() { + return { + headerTitle: '银行卡信息', + styleObject: { + overflow: 'initial', + minHeight: '100%', + height: 'auto' + }, + agreementChecked: true, + bankInfo: {}, + bankName: '', + showBankList: false, + isShowAgreementContent: false, + showAgreement: false, + isShowActionsheet: false, + actionsheetMenus: { + menu1: '个人信息查询使用授权书', + menu2: '数据采集使用授权书' + } + }; + }, + deactivated: function () { + this.$store.commit('UPDATE_DIRECTION', {direction: 'out'}); + }, + activated: function () { + // 初始化信息 + let _this = this; + this.$store.commit('UPDATE_DIRECTION', {direction: 'in'}); + let submitInfo = { + prodId: this.$route.query.prodId + }; + SystApi.initBankCardInfo(submitInfo).then( + response => { + if (response.errorCode === 0) { + _this.bankInfo = response.body; + _this.bankName = _this.getBankName(_this.bankInfo.bankName); + } + }, + error => { + statusCodeManage.showTipOfStatusCode(error, _this) + } + ); + }, + directives: { + TransferDom + }, + methods: { + showActionsheet() { + this.isShowActionsheet = true; + }, + // 显示协议内容 + clickActionsheetMenus(menu) { + if (menu !== 'cancel') { + this.styleObject = { + overflow: 'hidden', + minHeight: '100%', + height: '100%' + }; + if (menu === 'menu1') { + // 点击个人信息查询使用授权书 + this.headerTitle = '个人信息查询使用授权书'; + this.isShowAgreementContent = true; + this.showAgreement = true; + } + if (menu === 'menu2') { + // 点击数据采集使用授权书 + this.headerTitle = '数据采集使用授权书'; + this.isShowAgreementContent = true; + this.showAgreement = false; + } + } + }, + validateTip(errorMsg) { + return this.$vux.toast.show({ + width: 'auto', + type: 'text', + text: errorMsg, + time: 2000, + position: 'middle' + }); + }, + goBackPage: function () { + store.commit('updateDirection', {direction: 'out'}); + if (this.isShowAgreementContent) { + // 协议弹窗内容点击返回时 + this.isShowAgreementContent = false; + this.headerTitle = '银行卡信息'; + this.styleObject = { + overflow: 'initial', + minHeight: '100%', + height: 'auto' + }; + } else { + this.$router.back(); + } + }, + getBankCode: function (bankName) { + let bankNameList = this.bankInfo.bankNameList; + for (let i = 0; i < bankNameList.length; i++) { + if (bankNameList[i].name === bankName) { + return bankNameList[i].code; + } + } + }, + getBankName: function (bankCode) { + let bankNameList = this.bankInfo.bankNameList; + for (let i = 0; i < bankNameList.length; i++) { + if (bankNameList[i].code === bankCode) { + return bankNameList[i].name; + } + } + }, + inputBankCard: function (val) { + // 验证的银行卡的卡号长度分别为3,4,5,6,7,9 + if (val) { + if (val.length >= 3) { + if (!validate.checkValEmpty(bankCardData[val])) { + this.bankName = bankCardData[val]; + return null; + } + } + } else { + this.bankName = ''; + } + }, + // 失去焦点的时候 + blurBankCard(val) { + if (val) { + if (val.length >= 3) { + // 开始的几个字符串获取银行 + let str3 = val.substring(0, 3); + let str4 = val.substring(0, 4); + let str5 = val.substring(0, 5); + let str6 = val.substring(0, 6); + let str7 = val.substring(0, 7); + let str8 = val.substring(0, 8); + if (!validate.checkValEmpty(bankCardData[str3])) { + this.bankName = bankCardData[str3]; + return null; + } else if (!validate.checkValEmpty(bankCardData[str4])) { + this.bankName = bankCardData[str4]; + return null; + } else if (!validate.checkValEmpty(bankCardData[str5])) { + this.bankName = bankCardData[str5]; + return null; + } else if (!validate.checkValEmpty(bankCardData[str6])) { + this.bankName = bankCardData[str6]; + return null; + } else if (!validate.checkValEmpty(bankCardData[str7])) { + this.bankName = bankCardData[str7]; + return null; + } else if (!validate.checkValEmpty(bankCardData[str8])) { + this.bankName = bankCardData[str8]; + return null; + } else { + this.bankName = ''; + } + } else { + this.bankName = ''; + } + } else { + this.bankName = ''; + } + }, + // 银行卡号最后一位验证, ( + // 1.将未带校验位的 15(或18)位卡号从右依次编号 1 到 15(18),位于奇数位号上的数字乘以 2。 + // 2.将奇位乘积的个十位全部相加,再加上所有偶数位上的数字。 + // 3.将加法和加上校验位能被 10 整除。 ) + luhn: function (iccid) { + var s1 = 0, + s2 = 0; + iccid = iccid.substring(0, iccid.length - 1); + var reverse = ''; + for (var i = iccid.length; i > 0; i--) { + reverse += iccid.charAt(i - 1); + } + for (i = 0; i < reverse.length; i++) { + var digit = parseInt(reverse.charAt(i), 10); + if (i % 2 != 0) { + // this is for odd digits, they are 1-indexed in the + // algorithm + s1 += digit; + } else { + // add 2 * digit for 0-4, add 2 * digit - 9 for 5-9 + s2 += 2 * digit; + if (digit >= 5) { + s2 -= 9; + } + } + } + var sum = 10 - (s1 + s2) % 10; + if (sum === 10) { + sum = 0; + } + return iccid + sum; + }, + bindBankCard: function () { + let _this = this; + + if (this.bankInfo.card) { + if (this.bankInfo.card.length !== 19) { + this.validateTip('请输入正确的银行卡号'); + return false; + } + } else { + this.validateTip('请输入正确的银行卡号'); + return false; + } + if (this.luhn(this.bankInfo.card) !== this.bankInfo.card) { + this.validateTip('请输入正确的银行卡号'); + return false; + } + // 验证储蓄卡所属银行暂不支持---等规则 + if (validate.checkValEmpty(this.bankName)) { + this.validateTip('该银行卡不属于储蓄卡或其所属银行暂不支持'); + return false; + } + if (!this.agreementChecked) { + this.validateTip('请同意协议'); + return false; + } + let submitBankInfo = { + prodId: this.$route.query.prodId, + card: this.bankInfo.card, + bankName: this.getBankCode(this.bankName), + bankNameValue: this.bankName + }; + SystApi.saveBankCardInfo(submitBankInfo).then( + response => { + if (response.errorCode === 0) { + _this.$router.push({ + path: '/incomeLoan/phototInfo', + query: {prodId: _this.$route.query.prodId} + }); + } + }, + error => { + statusCodeManage.showTipOfStatusCode(error, _this) + } + ); + }, + querySupportBank: function () { + // 查询支持的银行卡 + this.showBankList = true; + }, + updatePersonalInfo: function () { + this.$router.push({ + path: '/incomeLoan/personalInfo', + query: {prodId: this.$route.query.prodId} + }); + } + }, + components: { + Group, + GroupTitle, + Cell, + XInput, + Selector, + XHeader, + XButton, + Box, + Flow, + FlowState, + FlowLine, + XDialog, + Actionsheet, + personInfo, + collectData + } + }; +</script> + +<style lang="less"> + @import "../../style/mixin.less"; + + .loan-info-box { + background-color: @color-background-default; + .vux-header { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + .vux-header-left { + .left-arrow:before { + border: solid 1px @color-white; + border-width: 2px 0 0 2px; + } + } + } + .vux-x-input.disabled .weui-input, + .vux-x-input.disabled .weui-label { + -webkit-opacity: 1; + opacity: 1; + color: @color-text-primary; + } + .progressState div p { + font-size: @font-size-tiny; + } + .weui-wepay-flow__state { + width: 16px; + height: 16px; + top: -1px; + padding-top: 1px; + } + .currentStep .weui-wepay-flow__state { + width: 16px; + height: 16px; + padding-top: 1px; + border: 1px solid @color-primary; + color: @color-primary; + border-radius: 50%; + background-color: @color-white; + } + .weui-input { + height: 28px; + line-height: 28px; + } + .weui-wepay-flow, .weui-wepay-flow-auto { + padding: 10px 40px 30px; + background: @color-white; + } + .weui-wepay-flow__li_done .weui-wepay-flow__state, + .weui-wepay-flow__process { + background-color: @color-primary; + } + } + + .header-space { + height: 46px; + } + + .weui-wepay-flow__title-bottom { + font-size: 12px; + } + + .loan-info-box .weui-input { + text-align: right; + } + + .loan-info-box .weui-cell_select .weui-select { + padding-right: 2.5rem; + direction: rtl; + } + + .loan-info-box .weui-btn_primary { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + } + + .bind-tip { + padding-left: 15px; + padding-top: 10px; + line-height: 1.6; + color: @color-primary; + } + + .support-bank .weui-dialog { + border-radius: 8px; + padding-bottom: 8px; + } + + .support-bank .bank-list { + height: 350px; + overflow: auto; + } + + .support-bank .vux-close { + margin-top: 8px; + margin-bottom: 8px; + } + + .register-checkbox { + -webkit-appearance: none; + appearance: none; + outline: 0; + font-size: 0; + border: 1px solid @color-divider-regular; + background-color: @color-white; + border-radius: 3px; + width: 13px; + height: 13px; + position: relative; + vertical-align: 0; + top: 2px; + } + + .register-checkbox:checked:before { + font-family: 'weui'; + font-style: normal; + font-weight: normal; + font-letiant: normal; + text-transform: none; + text-align: center; + speak: none; + display: inline-block; + vertical-align: middle; + text-decoration: inherit; + content: '\EA08'; + color: @color-primary; + font-size: 13px; + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -48%) scale(0.73); + transform: translate(-50%, -48%) scale(0.73); + } + + .register-agree { + display: inline-block; + margin-top: 10px; + padding-left: 15px; + font-size: 13px; + } + + .register-agree-text { + color: @color-text-primary; + } + + .agreementContent { + color: @color-primary; + } + + .agreement-content { + position: fixed; + left: 0; + top: 46px; + bottom: 0; + right: 0; + z-index: 10; + width: 100%; + height: 100%; + overflow-y: scroll; + padding: 20px 20px 66px; + box-sizing: border-box; + background: @color-white; + } + +</style> diff --git a/src/views/incomeLoan/houseAndJobInfo.vue b/src/views/incomeLoan/houseAndJobInfo.vue new file mode 100644 index 0000000..7c32cda --- /dev/null +++ b/src/views/incomeLoan/houseAndJobInfo.vue @@ -0,0 +1,541 @@ +<template> + <div class="loan-info-box"> + <x-header slot="header" + style="width:100%;height:46px;background-color: #ec6758" + :title="'工作及居住信息'" + :left-options="{backText: '', preventGoBack:true}" + @on-click-back="goBackPage" + ></x-header> + <flow class="progressState"> + <flow-state state="1" title="个人信息" is-done></flow-state> + <flow-line is-done></flow-line> + <flow-state state="2" title="工作及居住信息" class="currentStep"></flow-state> + <flow-line></flow-line> + <flow-state state="3" title="绑定银行卡"></flow-state> + <flow-line></flow-line> + <flow-state state="4" title="证明材料"></flow-state> + </flow> + <group> + <group-title slot="title"><span style="color: #ec6758">*</span>居住信息</group-title> + <x-address title="居住地址所在地区" class="addressArea" v-model="locationAddress" raw-value + :list="addressData"></x-address> + <x-input title="详细信息" + class="homeAddressInfo" + v-model="homeWorkInfo.altBillAddr4" + placeholder="请输入详细地址(至门牌号)" + :max="20"></x-input> + <selector title="居住房屋所有权" :options="ownershipList" v-model="homeWorkInfo.ownership"></selector> + <selector title="居住地址是否与户籍地址相同" :options="sameAddressList" v-model="homeWorkInfo.sameAddress" + @on-change="selectIsSame"></selector> + </group> + <group v-if="isShow"> + <group-title slot="title"><span style="color: #ec6758">*</span>户籍信息</group-title> + <x-address title="户籍地址所在地区" class="addressArea" v-model="householdAddress" raw-value + :list="addressData"></x-address> + <x-input title="详细信息" + class="homeAddressInfo" + v-model="homeWorkInfo.billAddr4" + :max="20" + placeholder="请输入详细地址(至门牌号)"></x-input> + </group> + <group> + <group-title slot="title"><span style="color: #ec6758">*</span>工作信息</group-title> + <selector title="工作状态" :options="employStatusList" v-model="homeWorkInfo.employStatus"></selector> + <x-input class="loan-cell" title="单位名称" v-model="homeWorkInfo.compName" :max="20" + placeholder="请输入单位名称"></x-input> + <x-address title="工作单位所在地区" class="addressArea" v-model="companyAddress" raw-value + :list="addressData"></x-address> + <x-input title="详细信息" class="homeAddressInfo" v-model="homeWorkInfo.compAddr4" :max="30" + :show-counter="false" placeholder="请填写详细信息"></x-input> + <x-input title="单位电话" + pattern="[0-9]*" + keyboard="number" + v-model="homeWorkInfo.compTelno" + :max="13" + placeholder="区号号码"></x-input> + <x-input title="月基本工资" + pattern="[0-9]*" + keyboard="number" + v-model="homeWorkInfo.mthBasicSalary" + :max="7" placeholder="请输入月基本工资"></x-input> + </group> + <div style="height: 20px"></div> + <box gap="0 15px"> + <x-button type="primary" @click.native="handleNextStep">下一步</x-button> + </box> + <div style="height: 20px"></div> + </div> +</template> + +<script> + import { + Flow, + FlowState, + FlowLine, + XHeader, + Group, + GroupTitle, + Cell, + XInput, + Selector, + XButton, + XTextarea, + Box, + XAddress, + ChinaAddressV4Data, + Value2nameFilter as value2name + } from 'vux' + import store from '../../store/index'; + import validate from '../../tool/validator'; + import SystApi from '../../api/api'; + import statusCodeManage from '../../api/statusCodeManage'; + + export default { + name: 'incoHouseAndJobInfo', + data () { + return { + addressData: ChinaAddressV4Data, + isShow: false, + homeWorkInfo: {}, + locationAddress: [], + householdAddress: [], + companyAddress: [], + optionNum: 0 // 解决N初始化时,插件会执行N的选择 + }; + }, + deactivated: function () { + this.$store.commit('UPDATE_DIRECTION', {direction: 'out'}); + }, + activated: function () { + this.$store.commit('UPDATE_DIRECTION', {direction: 'in'}); + // 初始化,插件的点击次数 + this.optionNum = 0; + // 初始化重置为空,为了解决初始化时,后台返回为空的,地址显示的是上一次的值 + this.locationAddress = []; + this.householdAddress = []; + this.companyAddress = []; + // 初始化信息 + let _this = this; + let submitInfo = { + prodId: this.$route.query.prodId + }; + SystApi.initHomeWorkInfo(submitInfo).then(response => { + if (response.errorCode === 0) { + _this.homeWorkInfo = response.body; +// 居住地址 + if (!validate.checkValEmpty(_this.homeWorkInfo.altBillState)) { + if (_this.isDirectProvince(_this.homeWorkInfo.altBillState)) { + _this.homeWorkInfo.altBillCity = '市辖区'; + } + _this.locationAddress = _this.getContactAddress(_this.homeWorkInfo.altBillState, _this.homeWorkInfo.altBillCity, _this.homeWorkInfo.altBillAddr5); + } +// 户籍地址 + if (!validate.checkValEmpty(_this.homeWorkInfo.billState)) { + if (_this.isDirectProvince(_this.homeWorkInfo.billState)) { + _this.homeWorkInfo.altBillCity = '市辖区'; + } + _this.householdAddress = _this.getContactAddress(_this.homeWorkInfo.billState, _this.homeWorkInfo.billCity, _this.homeWorkInfo.billAddr5); + } +// 公司地址 + if (!validate.checkValEmpty(_this.homeWorkInfo.compState)) { + if (_this.isDirectProvince(_this.homeWorkInfo.altBillState)) { + _this.homeWorkInfo.altBillCity = '市辖区'; + } + _this.companyAddress = _this.getContactAddress(_this.homeWorkInfo.compState, _this.homeWorkInfo.compCity, _this.homeWorkInfo.compAddr5); + } + // 居住地址与户籍地址一致 + if (_this.homeWorkInfo.sameAddress === 'Y') { + _this.householdAddress = _this.getContactAddress(_this.homeWorkInfo.altBillState, _this.homeWorkInfo.altBillCity, _this.homeWorkInfo.altBillAddr5); + // 居住地址与户籍地址不一致, 赋值为空 + } else if (_this.homeWorkInfo.sameAddress === 'N') { + _this.householdAddress = _this.getContactAddress(_this.homeWorkInfo.billState, _this.homeWorkInfo.billCity, _this.homeWorkInfo.billAddr5); + } + } + }, error => { + statusCodeManage.showTipOfStatusCode(error, _this) + }); + }, + computed: { + ownershipList: function () { + return this.getOptionsList(this.homeWorkInfo.ownershipList); + }, + sameAddressList: function () { + return this.getOptionsList(this.homeWorkInfo.sameAddressList); + }, + employStatusList: function () { + return this.getOptionsList(this.homeWorkInfo.employStatusList); + } + }, + methods: { + validateTip(errorMsg) { + return this.$vux.toast.show({ + width: 'auto', + type: 'text', + text: errorMsg, + time: 2000, + position: 'middle' + }); + }, + checkAddressFormat (val) { // 校验详细地址内容格式 + return {valid: true}; + }, + // 得到选择地址的中文值 + getName (value) { + const tmpList = value2name(value, ChinaAddressV4Data).split(' '); + return tmpList; + }, + // 比较数组元素是否相等 + arrayEqual (array1, array2) { + if (!array1 || !array2) { + return false; + } + if (array1.length !== array2.length) { + return false; + } + for (var i = 0, l = array1.length; i < l; i++) { + if (array1[i] instanceof Array && array2[i] instanceof Array) { + if (!array1[i].equals(array2[i])) { + return false; + } + } else if (array1[i] !== array2[i]) { + return false; + } + } + return true; + }, + // 得到选项列表统一的方法 + getOptionsList (optionList) { + let tmpList = []; + if (optionList instanceof Array) { + optionList.forEach(function (item) { + tmpList.push({ + key: item.code, + value: item.name + }); + }); + } + return tmpList; + }, + // 地址的拼接 + getContactAddress (provinceName, cityName, districtName) { + let tmpAddress = []; + if (!validate.checkValEmpty(provinceName)) { + tmpAddress.push(provinceName); + } + if (!validate.checkValEmpty(cityName)) { + tmpAddress.push(cityName); + } + if (!validate.checkValEmpty(districtName)) { + tmpAddress.push(districtName); + } + return tmpAddress; + }, + goBackPage: function () { + store.commit('updateDirection', {direction: 'out'}) + this.$router.back(); + }, + selectIsSame: function (selectKey) { + // 选择与户籍地址不一致,这个插件刷新的时候,会自动执行一次 + if (validate.checkValEmpty(selectKey)) { + this.isShow = false; + } else if (selectKey === 'Y') { + if (this.optionNum) { + this.householdAddress = []; + this.homeWorkInfo.billAddr4 = ''; + } + this.optionNum++; + this.isShow = false; + } else if (selectKey === 'N') { + if (this.optionNum) { + this.householdAddress = []; + this.homeWorkInfo.billAddr4 = ''; + } + this.optionNum++; + // 选择与户籍地址不一致 + this.isShow = true; + } + }, + // 是否为直辖市(地址插件与后台要求的地址不一致) + isDirectProvince (cityName) { + if (cityName === '北京市' || cityName === '重庆市' || cityName === '天津市' || cityName === '上海市') { + return true; + } + return false; + }, + handleNextStep () { + let _this = this; + if (validate.checkValEmpty(this.locationAddress)) { + this.validateTip('请选择居住地址所在地区'); + return false; + } + if (validate.checkValEmpty(this.homeWorkInfo.altBillAddr4)) { + this.validateTip('请输入居住详细地址'); + return false; + } + if (validate.checkValEmpty(this.homeWorkInfo.ownership)) { + this.validateTip('请选择居住房屋所有权'); + return false; + } + if (validate.checkValEmpty(this.homeWorkInfo.sameAddress)) { + this.validateTip('请选择居住地址是否与户籍地址相同'); + return false; + } + if (this.isShow) { + // 居住地址户籍地址不相同---显示提示内容 + if (validate.checkValEmpty(this.householdAddress)) { + this.validateTip('请选择户籍地址所在地区'); + return false; + } + if (validate.checkValEmpty(this.homeWorkInfo.billAddr4)) { + this.validateTip('请输入户籍详细地址'); + return false; + } + } + if (validate.checkValEmpty(this.homeWorkInfo.employStatus)) { + this.validateTip('请选择工作状态'); + return false; + } + if (validate.checkValEmpty(this.homeWorkInfo.compName)) { + this.validateTip('请输入单位名称'); + return false; + } + if (validate.checkValEmpty(this.companyAddress)) { + this.validateTip('请选择工作单位所在地区'); + return false; + } + if (validate.checkValEmpty(this.homeWorkInfo.compAddr4)) { + this.validateTip('请输入工作详细地址'); + return false; + } + if (validate.checkValEmpty(this.homeWorkInfo.compTelno)) { + this.validateTip('请输入单位电话'); + return false; + } + if (validate.checkValEmpty(this.homeWorkInfo.mthBasicSalary)) { + this.validateTip('请输入月基本工资'); + return false; + } + let _reg = /^([1-9][0-9]*)+(.[0-9]{0,2})?$/; + if (!_reg.test(this.homeWorkInfo.mthBasicSalary)) { + this.validateTip('工资格式错误'); + return false; + } + // 检查通过后,进入下一步----进入保存 + let tmpLocationAddress = this.getName(this.locationAddress); + let tmpCompanyAddress = this.getName(this.companyAddress); + let tmpHouseholdAddress; + // 户籍地址为空 + if (this.homeWorkInfo.sameAddress === 'Y') { + tmpHouseholdAddress = tmpLocationAddress; + this.homeWorkInfo.billAddr4 = this.homeWorkInfo.altBillAddr4; + } else if (this.homeWorkInfo.sameAddress === 'N') { + tmpHouseholdAddress = this.getName(this.householdAddress); + // 选择了不一致的话,而用户填写户籍地址与居住地址一致的话 + let arrayEqual = this.arrayEqual(tmpHouseholdAddress, tmpLocationAddress); + if (arrayEqual && (this.homeWorkInfo.billAddr4 === this.homeWorkInfo.altBillAddr4)) { + this.validateTip('您的居住地址与户籍地址应该不一致'); + return false; + } + } + // 提交处理直辖市的处理(北京市,重庆市,天津市,上海市) + if (this.isDirectProvince(tmpLocationAddress[0])) { + tmpLocationAddress[1] = tmpLocationAddress[0]; + } + if (this.isDirectProvince(tmpHouseholdAddress[0])) { + tmpHouseholdAddress[1] = tmpHouseholdAddress[0]; + } + if (this.isDirectProvince(tmpLocationAddress[0])) { + tmpCompanyAddress[1] = tmpCompanyAddress[0]; + } + const submitHomeWorkInfo = { + prodId: this.$route.query.prodId, + altBillState: tmpLocationAddress[0], + altBillCity: tmpLocationAddress[1], + altBillAddr5: tmpLocationAddress[2], + altBillAddr4: this.homeWorkInfo.altBillAddr4, + ownership: this.homeWorkInfo.ownership, + sameAddress: this.homeWorkInfo.sameAddress, + billState: tmpHouseholdAddress[0], + billCity: tmpHouseholdAddress[1], + billAddr5: tmpHouseholdAddress[2], + billAddr4: this.homeWorkInfo.billAddr4, + employStatus: this.homeWorkInfo.employStatus, + compName: this.homeWorkInfo.compName, + compState: tmpCompanyAddress[0], + compCity: tmpCompanyAddress[1], + compAddr5: tmpCompanyAddress[2], + compAddr4: this.homeWorkInfo.compAddr4, + compTelno: this.homeWorkInfo.compTelno, + mthBasicSalary: this.homeWorkInfo.mthBasicSalary + }; + SystApi.saveHomeWorkInfo(submitHomeWorkInfo).then(response => { + if (response.errorCode === 0) { + _this.$router.push({path: '/incomeLoan/bindcard', query: {prodId: _this.$route.query.prodId}}); + } + }, error => { + statusCodeManage.showTipOfStatusCode(error, _this) + }); + } + }, + components: { + Group, + GroupTitle, + Cell, + XInput, + Selector, + XHeader, + XButton, + Box, + XAddress, + XTextarea, + Flow, + FlowState, + FlowLine + } + }; +</script> + +<style lang="less"> + @import "../../style/mixin.less"; + + .header-space { + height: 46px; + } + + .weui-wepay-flow { + background-color: @color-white; + } + + .left-arrow:before { + border-color: @color-white; + } + + .weui-cells__title { + margin: 0 !important; + font-size: @font-size-base !important; + } + + .loan-info-box { + background-color: @color-background-default; + .vux-header { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + .vux-header-left { + .left-arrow:before { + border: solid 1px @color-white; + border-width: 2px 0 0 2px; + } + } + } + .progressState div p { + font-size: @font-size-tiny; + } + .weui-wepay-flow__state { + width: 16px; + height: 16px; + top: -1px; + padding-top: 1px; + } + .currentStep .weui-wepay-flow__state { + width: 16px; + height: 16px; + padding-top: 1px; + border: 1px solid @color-primary; + color: @color-primary; + border-radius: 50%; + background-color: @color-white; + } + .weui-input { + height: 28px; + line-height: 28px; + } + .weui-wepay-flow, .weui-wepay-flow-auto { + padding: 10px 40px 30px; + background: @color-white; + } + .weui-wepay-flow__li_done .weui-wepay-flow__state, + .weui-wepay-flow__process { + background-color: @color-primary; + } + } + + .weui-input, .weui-cell__bd { + font-size: @font-size-base; + } + + .weui-label { + font-size: @font-size-base; + } + + .weui-wepay-flow { + background-color: @color-white; + } + + .left-arrow:before { + border-color: @color-white; + } + + .weui-cells__title { + margin: 0 !important; + font-size: 16PX !important; + } + + .loan-info-box { + background-color: #f5f5f5; + } + + .weui-input, .weui-cell__bd, .vux-cell-value { + font-size: @color-white; + } + + .weui-label { + font-size: @color-white; + } + + .loan-info-box .weui-cell_select .weui-select { + padding-right: 2.5rem; + direction: rtl; + } + + .loan-info-box .weui-input { + text-align: right; + } + + .loan-info-box .weui-label { + width: auto; + } + + .loan-cell:before { + content: " "; + position: absolute; + left: 15px; + top: 0; + right: 0; + height: 1px; + border-top: 1px solid #d9d9d9; + color: #d9d9d9; + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: scaleY(.5); + transform: scaleY(.5); + } + + .loan-info-box .weui-btn_primary { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + } + + .vux-popup-show .vux-popup-header-right { + color: @color-primary; + } + + .homeAddressInfo .weui-textarea { + text-align: right; + } + + .progressState div p { + font-size: 9px; + } + + .addressArea .vux-cell-value { + color: @color-text-primary; + } +</style> diff --git a/src/views/incomeLoan/personalInfo.vue b/src/views/incomeLoan/personalInfo.vue new file mode 100644 index 0000000..19c647b --- /dev/null +++ b/src/views/incomeLoan/personalInfo.vue @@ -0,0 +1,419 @@ +<template> + <div class="loan-info-box"> + <x-header slot="header" + style="width:100%;height:46px;background-color: #ec6758" + title="个人信息" + :left-options="{backText: '', preventGoBack:true}" + @on-click-back="goBackPage" + ></x-header> + <flow class="progressState"> + <flow-state state="1" title="个人信息" class="currentStep"></flow-state> + <flow-line></flow-line> + <flow-state state="2" title="工作及居住信息"></flow-state> + <flow-line></flow-line> + <flow-state state="3" title="绑定银行卡"></flow-state> + <flow-line></flow-line> + <flow-state state="4" title="证明材料"></flow-state> + </flow> + <group class="personInfo" text-align="right"> + <group-title slot="title"><span style="color: #ec6758">*</span>基本信息</group-title> + <x-input title="手机号" v-model="personalInfo.mobileNo" type="tel" :max=11 disabled="disabled" + placeholder="请输入用户手机号"></x-input> + <x-input title="姓名" v-model="personalInfo.name" :max="6" placeholder="请输入用户姓名"></x-input> + <x-input title="身份证号" v-model="personalInfo.idNo" :max="18" + placeholder="请输入用户身份证号"></x-input> + <selector title="学历" :options="qualificationList" v-model="personalInfo.qualification"></selector> + <selector title="婚姻状态" :options="maritalStatusList" v-model="personalInfo.maritalStatus" + @on-change="selectMaritalStatus"></selector> + <selector title="贷款用途" :options="purposeList" v-model="personalInfo.purpose"></selector> + </group> + <group text-align="right"> + <group-title slot="title"><span style="color: #ec6758">*</span>联系人信息</group-title> + <cell title="联系人1"></cell> + <x-input title="姓名" v-model="personalInfo.relName" :max="6" placeholder="请输入联系人姓名"></x-input> + <x-input title="手机号" v-model="personalInfo.relMobile" keyboard="number" pattern="[0-9]*" mask="99999999999" + :max=11 type="tel" placeholder="请输入联系人手机号"></x-input> + <!--模拟选择框--> + <cell title="关系" :is-link="true" @click.native="clickFirstRelation" v-if="!firstSelectShow"></cell> + <selector title="关系" :options="firstRelationshipList" v-model="personalInfo.relationToCh" + v-if="firstSelectShow" + @on-change="selectFirstRelationship"></selector> + <FSpace></FSpace> + <cell title="联系人2(选填)"></cell> + <x-input title="姓名" v-model="personalInfo.relName2" :max="6" placeholder="请输入联系人姓名"></x-input> + <x-input title="手机号" v-model="personalInfo.relMobile2" keyboard="number" pattern="[0-9]*" mask="99999999999" + :max=11 type="tel" placeholder="请输入联系人手机号"></x-input> + <cell title="关系" :is-link="true" @click.native="clickSecondRelation" v-if="!secondSelectShow"></cell> + <selector title="关系" :options="secondRelationshipList" v-model="personalInfo.relationToCh2" + v-if="secondSelectShow"></selector> + </group> + <div style="height: 20px"></div> + <box gap="0 15px"> + <x-button type="primary" @click.native="handleNextStep">下一步</x-button> + </box> + <div style="height: 20px"></div> + </div> +</template> + +<script> + import { + Flow, + FlowState, + FlowLine, + XHeader, + Group, + GroupTitle, + Cell, + XInput, + Selector, + XButton, + Box, + Actionsheet + } from 'vux'; + import store from '../../store/index'; + import validate from '../../tool/validator'; + import FSpace from '../../components/common/FSpace.vue'; + import IDValidator from '../../tool/IDValidator'; + import SystApi from '../../api/api'; + import statusCodeManage from '../../api/statusCodeManage'; + + export default { + name: 'incoPersonalInfo', + data () { + return { + firstSelectShow: false, // 第一个真实的选择框显示 + secondSelectShow: false, // 第二个真实的选择框显示 + personalInfo: { + relMobile2: null, + relMobile: null + }, // 初始化的用户信息 + firstRelationshipList: [], + secondRelationshipList: [] + }; + }, + activated: function () { + // 初始化信息 + let _this = this; + this.$store.commit('UPDATE_DIRECTION', {direction: 'in'}); + let submitInfo = { + prodId: this.$route.query.prodId + }; + SystApi.initPersonalInfo(submitInfo).then(response => { + if (response.errorCode === 0) { + _this.personalInfo = response.body; + _this.firstRelationshipList = _this.getOptionsList(this.personalInfo.relationList); + _this.secondRelationshipList = _this.getOptionsList(this.personalInfo.relation2List); + } + }, error => { + statusCodeManage.showTipOfStatusCode(error, _this) + }); + // 初始化的婚姻状态,确定第一个选择联系人的框 + if (!validate.checkValEmpty(this.personalInfo.maritalStatus)) { + // D-离异,M-已婚,W-丧偶,S-未婚 + if (this.personalInfo.maritalStatus === 'M') { + this.firstRelationshipList = this.getMarriedRelationList(); + } else { + this.firstRelationshipList = this.getNotMarriedRelationList(); + } + } + }, + deactivated: function () { + this.$store.commit('UPDATE_DIRECTION', {direction: 'out'}); + }, + computed: { + qualificationList: function () { + return this.getOptionsList(this.personalInfo.qualificationList); + }, + maritalStatusList: function () { + return this.getOptionsList(this.personalInfo.maritalStatusList); + }, + purposeList: function () { + return this.getOptionsList(this.personalInfo.purposeList); + }, + relationList: function () { + return this.getOptionsList(this.personalInfo.relationList); + } + }, + methods: { + validateTip (errorMsg) { + return this.$vux.toast.show({ + width: 'auto', + type: 'text', + text: errorMsg, + time: 2000, + position: 'middle' + }); + }, + // 得到选项列表统一的方法 + getOptionsList (optionList) { + let tmpList = []; + if (optionList instanceof Array) { + optionList.forEach(function (item) { + tmpList.push({ + key: item.code, + value: item.name + }); + }); + } + return tmpList; + }, + // 第一个联系人的选择已婚时,可以选择的关系选项列表 + getMarriedRelationList () { + let tmpList = []; + this.relationList.forEach(function (item) { + if (item.value === '父母' || item.value === '丈夫' || item.value === '妻子') { + tmpList.push(item); + } + }); + return tmpList; + }, + // 第一个联系人选择非已婚时,可以选择的关系的选项列表 + getNotMarriedRelationList () { + let tmpList = []; + this.relationList.forEach(function (item) { + if (item.value === '父母' || item.value === '子女') { + tmpList.push(item); + } + }); + return tmpList; + }, + // 选择第一个联系人之后,联系2可以选择的关系的选项列表 + getSecondRelationList (selectKey) { + let tmpList = []; + this.secondRelationshipList.forEach(function (item) { + if (item.key !== selectKey) { + tmpList.push(item); + } + }); + return tmpList; + }, + goBackPage: function () { + store.commit('updateDirection', {direction: 'out'}); + const _id = this.$route.query.prodId; + this.$router.push({path: '/f-loan-detail', query: {id: _id}}); + }, + selectMaritalStatus (value) { + if (validate.checkValEmpty(this.personalInfo.maritalStatus)) { + this.firstSelectShow = false; + } else { + // D-离异,M-已婚,W-丧偶,S-未婚 + if (value === 'M') { + this.firstRelationshipList = this.getMarriedRelationList(); + } else { + this.firstRelationshipList = this.getNotMarriedRelationList(); + } + this.firstSelectShow = true; + } + }, + // 关系选择1的模拟框的判断 + clickFirstRelation () { + if (validate.checkValEmpty(this.personalInfo.maritalStatus)) { + this.validateTip('请先选择婚姻状态'); + } + }, + // 点击第一个关系框 + selectFirstRelationship (selectKey) { + if (validate.checkValEmpty(this.personalInfo.relationToCh)) { + this.secondSelectShow = false; + } else { + this.secondRelationshipList = this.getSecondRelationList(selectKey); + this.secondSelectShow = true; + } + }, + // 关系选择2的模拟框的判断 + clickSecondRelation () { + if (validate.checkValEmpty(this.personalInfo.relationToCh)) { + this.validateTip('请先选择联系人1关系'); + } + }, + handleNextStep () { + let _this = this; + if (!validate.checkName(this.personalInfo.name)) { + this.validateTip('请输入正确的姓名'); + return false; + } + if (!validate.checkPhone(this.personalInfo.mobileNo)) { + this.validateTip('请输入正确的手机号'); + return false; + } + if (!IDValidator.isValid(this.personalInfo.idNo)) { + this.validateTip('请输入正确的身份证'); + return false; + } + if (validate.checkValEmpty(this.personalInfo.qualification)) { + this.validateTip('请选择学历'); + return false; + } + if (validate.checkValEmpty(this.personalInfo.maritalStatus)) { + this.validateTip('请选择婚姻状态'); + return false; + } + if (validate.checkValEmpty(this.personalInfo.purpose)) { + this.validateTip('请选择贷款用途'); + return false; + } + if (!validate.checkName(this.personalInfo.relName)) { + this.validateTip('请输入正确的联系人1的姓名'); + return false; + } + if (!validate.checkPhone(this.personalInfo.relMobile)) { + this.validateTip('请输入正确的联系人1的手机号'); + return false; + } + if (validate.checkValEmpty(this.personalInfo.relationToCh)) { + this.validateTip('请选择联系人1的关系'); + return false; + } + + // 保存的上传参数 + const submitPersonalInfo = { + prodId: this.$route.query.prodId, + name: this.personalInfo.name, + mobileNo: this.personalInfo.mobileNo, + idNo: this.personalInfo.idNo, + qualification: this.personalInfo.qualification, + maritalStatus: this.personalInfo.maritalStatus, + purpose: this.personalInfo.purpose, + relName: this.personalInfo.relName, + relMobile: this.personalInfo.relMobile, + relationToCh: this.personalInfo.relationToCh, + relName2: this.personalInfo.relName2 ? this.personalInfo.relName2 : '', + relMobile2: this.personalInfo.relMobile2 ? this.personalInfo.relMobile2 : '', + relationToCh2: this.personalInfo.relationToCh2 ? this.personalInfo.relationToCh2 : '' + }; + // 检查通过后,进入下一步 + SystApi.savePersonalInfo(submitPersonalInfo).then(response => { + if (response.errorCode === 0) { + _this.$router.push({ + path: '/incomeLoan/houseAndJobInfo', + query: {prodId: _this.$route.query.prodId} + }); + } + }, error => { + statusCodeManage.showTipOfStatusCode(error,_this); + }); + } + }, + components: { + Group, + GroupTitle, + Cell, + XInput, + Selector, + XHeader, + XButton, + Box, + Flow, + FlowState, + FlowLine, + Actionsheet, + FSpace + } + }; +</script> + +<style lang="less"> + @import "../../style/mixin.less"; + + .loan-info-box { + background-color: @color-background-default; + .vux-header { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + .vux-header-left { + .left-arrow:before { + border: solid 1px @color-white; + border-width: 2px 0 0 2px; + } + } + } + .progressState div p { + font-size: @font-size-tiny; + } + .weui-wepay-flow__state { + width: 16px; + height: 16px; + top: -1px; + padding-top: 1px; + } + .currentStep .weui-wepay-flow__state { + width: 16px; + height: 16px; + padding-top: 1px; + border: 1px solid @color-primary; + color: @color-primary; + border-radius: 50%; + background-color: @color-white; + } + .weui-input { + height: 28px; + line-height: 28px; + } + .weui-wepay-flow, .weui-wepay-flow-auto { + padding: 10px 40px 30px; + background: @color-white; + } + .weui-wepay-flow__li_done .weui-wepay-flow__state, + .weui-wepay-flow__process { + background-color: @color-primary; + } + } + + .weui-wepay-flow { + background-color: @color-white; + } + + .left-arrow:before { + border-color: @color-white; + } + + .weui-cells__title { + margin: 0 !important; + font-size: 16PX !important; + } + + .weui-input, .weui-cell__bd { + font-size: @font-size-base; + } + + .weui-label { + font-size: @font-size-base; + } + + .personInfo ::-webkit-input-placeholder { /* WebKit browsers */ + color: #bfbfbf; + } + + .personInfo :-moz-placeholder { /* Mozilla Firefox 4 to 18 */ + color: #bfbfbf; + } + + .personInfo ::-moz-placeholder { /* Mozilla Firefox 19+ */ + color: #bfbfbf; + } + + .personInfo :-ms-input-placeholder { /* Internet Explorer 10+ */ + color: #bfbfbf; + } + + .header-space { + height: 46px; + } + + .loan-info-box .weui-cell_select .weui-select { + padding-right: 2.5rem; + direction: rtl; + } + + .loan-info-box .weui-input { + text-align: right; + } + + .loan-info-box .weui-btn_primary { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + } + + .loan-info-box .weui-btn_primary:not(.weui-btn_disabled):active { + color: rgba(255, 255, 255, 0.6); + background-color: rgb(241, 95, 79);; + } +</style> diff --git a/src/views/incomeLoan/photoInfo.vue b/src/views/incomeLoan/photoInfo.vue new file mode 100644 index 0000000..688adbc --- /dev/null +++ b/src/views/incomeLoan/photoInfo.vue @@ -0,0 +1,911 @@ +<template> + <div class="loan-info-box"> + <x-header slot="header" style="width:100%;height:46px;background-color: #ec6758" :title="'证明材料'" + :left-options="{backText: '', preventGoBack:true}" @on-click-back="goBackPage"></x-header> + <flow class="progressState"> + <flow-state state="1" title="个人信息" is-done></flow-state> + <flow-line is-done></flow-line> + <flow-state state="2" title="工作及居住信息" is-done></flow-state> + <flow-line is-done></flow-line> + <flow-state state="3" title="绑定银行卡" is-done></flow-state> + <flow-line is-done></flow-line> + <flow-state state="4" title="证明材料" class="currentStep"></flow-state> + </flow> + <group> + <group-title slot="title"> + <div class="groupTitle"> + <span>*</span> + <label>身份证照片</label> + </div> + <div style="font-size: 12px;padding-left: 6px;">请拍摄并上传您的身份证原件照片</div> + </group-title> + </group> + <flexbox class="IDcardFlexbox"> + <flexbox-item> + <div class="flex-demo"> + <img-upload butName="上传人像面" defaultImg="./static/Idcardf.jpg" :currentImg="Idcard.positive" + v-on:select-complete="secelted('IDFront', $event)"></img-upload> + </div> + </flexbox-item> + <flexbox-item> + <div class="flex-demo"> + <img-upload butName="上传国徽面" defaultImg="./static/Idcardz.jpg" :currentImg="Idcard.reverse" + v-on:select-complete="secelted('IDBack', $event)"></img-upload> + </div> + </flexbox-item> + </flexbox> + <!--身份证拍摄要求--> + <group class="IDcardsampleGroup"> + <cell is-link :border-intent="false" :arrow-direction="showIDcardSample ? 'up' : 'down'" + @click.native="showIDcardSample = !showIDcardSample"> + <div slot="title" class="IDcardsampleINfo">身份证照片拍摄要求</div> + </cell> + <flexbox class="IDcardSampleList animate" v-if="showIDcardSample"> + <flexbox-item> + <span class="cardsampleItem"> + <img src="../../assets/img/ok.png" alt=""> + <p>正常拍摄</p> + </span> + </flexbox-item> + <flexbox-item> + <span class="cardsampleItem"> + <img src="../../assets/img/error1.png" alt=""> + <p>边框缺失</p> + </span> + </flexbox-item> + <flexbox-item> + <span class="cardsampleItem"> + <img src="../../assets/img/error2.png" alt=""> + <p>照片迷糊</p> + </span> + </flexbox-item> + <flexbox-item> + <span class="cardsampleItem"> + <img src="../../assets/img/error3.png" alt=""> + <p>闪光强烈</p> + </span> + </flexbox-item> + </flexbox> + </group> + + <group> + <group-title slot="title"> + <div class="groupTitle"> + <span>*</span> + <label>手持身份证照片</label> + </div> + <div class="groupSmallTitle">请保持身份证与头像清晰</div> + </group-title> + </group> + <div class="photoItem"> + <div class="handIDItem figureBlock"> + <img src="../../assets/img/handID.jpg" alt=""> + </div> + <div class="handIDItem"> + <img @click="MaximizeImg(handIDImg)" :src=handIDImg v-if="handIDImg" alt=""> + <icon type="clear" class="closePhoto " v-if="handIDImg" + @click.native="deleteAssignImg(handIDImg,'handID')"></icon> + </div> + <div class="handIDItem cameraIcon"> + <div class="cameraIconDiv"> + <i class="iconfont icon-camerafill"></i> + <input class="PhotoChangeInput" type="file" @change="handIDPhotoChange($event)" capture="camera" + accept="image/*"> + </div> + </div> + </div> + <!--工作证明--> + <group> + <group-title slot="title"> + <div class="groupTitle"> + <span>*</span> + <label>工作证明</label> + </div> + <div class="groupSmallTitle">单位盖章文件</div> + </group-title> + </group> + <div class="photoItem"> + <div class="handIDItems"> + <scroller lock-y :scrollbar-x=false> + <div class="handIDItemsbox"> + <div v-for="(workItem, index) in workCertImages" class="workPhtotoItem"> + <img @click="MaximizeImg(workItem)" :src=workItem alt=""> + <icon type="clear" class="closePhoto" v-if="workItem" + @click.native="deleteCurrentImg($event,index)"></icon> + </div> + </div> + </scroller> + </div> + <div class="workPhtotoLoadBut cameraIcon"> + <div class="cameraIconDiv"> + <i class="iconfont icon-camerafill"></i> + <input class="PhotoChangeInput" type="file" @change="workPhotoChange($event)" capture="camera" + accept="image/*"> + </div> + </div> + </div> + <!--居住证明--> + <group> + <group-title slot="title"> + <div class="groupTitle"> + <span>*</span> + <label>居住证明</label> + </div> + <div class="groupSmallTitle">电子发票/红旗小票/居委会证明/租房协议/房产证</div> + </group-title> + </group> + <div class="photoItem"> + <div class="handIDItem"> + <img @click="MaximizeImg(residenceCertImage)" :src=residenceCertImage v-if="residenceCertImage" alt=""> + <icon type="clear" class="closePhoto" v-if="residenceCertImage" + @click.native="deleteAssignImg(residenceCertImage,'residenceCert')"></icon> + </div> + + <div class="handIDItem cameraIcon"> + <div class="cameraIconDiv" @click="lifePhotoChangeClick($event)"> + <i class="iconfont icon-camerafill"></i> + <input class="PhotoChangeInput" type="file" @change="lifePhotoChange($event)" capture="camera" + accept="image/*"> + </div> + </div> + </div> + <div style="height: 20px"></div> + <div style="margin: 0 15px" class="photoDivFooter"> + <x-button class="photoSubBut" @click.native="photoInfoSubmit">提交</x-button> + </div> + <div style="height: 20px"></div> + <div> + <x-dialog v-model="showImageMaximize" class="MaximizeImgdialog" hide-on-blur> + <div class="img-box"> + <img @click="showImageMaximize=false" :src="currentMaximize" style="max-width:100%"> + </div> + </x-dialog> + </div> + <div> + <x-dialog v-model="imageSync" class="MaximizeImgdialog" hide-on-blur> + + </x-dialog> + </div> + </div> +</template> + +<script> + import upload from '../../components/upload/uploadImg.vue'; + import EXIF from 'exif-js'; + import store from '../../store/index'; + import SystApi from '../../api/api'; + import statusCodeManage from '../../api/statusCodeManage'; + import { + Scroller, + XHeader, + Group, + GroupTitle, + Cell, + XInput, + XButton, + Flexbox, + Flow, + FlowState, + FlowLine, + FlexboxItem, + XImg, + XDialog, + Icon + } from 'vux'; + + export default { + name: 'photoinfo', + data() { + return { + imageSync: false, // 图片同步模态窗显示 + showImageMaximize: false, // 做大化图片Dialog 对象 + currentMaximize: '', // 当前最大化图片对象 + showIDcardSample: false, + Idcard: { + reverse: '', // 反面国徽面 + positive: '' // 正面头像面 + }, + handIDImg: '', // 手持身份证照 + residenceCertImage: '', // 居住证明 + workCertImages: [] // 工作证明 + }; + }, + methods: { + goBackPage: function () { + // store.commit('updateDirection', {direction: 'out'}) + this.$router.back(); + }, + validateTip(errorMsg) { + return this.$vux.toast.show({ + width: 'auto', + type: 'text', + text: errorMsg, + time: 2000, + position: 'middle' + }); + }, + // 图片最大化模态 显示 + MaximizeImg: function (imgobj) { + this.currentMaximize = imgobj; + this.showImageMaximize = true; + }, + // 删除固定图片 + deleteAssignImg: function (url, type) { + // 删除指定图片对象 + let _this = this; + let par = { + prodId: this.$route.query.prodId, + fileType: type, + fileUrl: url + }; + SystApi.deleteImageFile(par).then( + function (res) { + if (res.errorCode === 0) { + if (type === 'residenceCert') { + _this.residenceCertImage = null; + } else if (type === 'handID') { + _this.handIDImg = null; + } + } + }, + function (error) { + statusCodeManage.showTipOfStatusCode(error, _this); + } + ); + }, + photoInfoSubmit: function () { + // 提交图片按钮 + let _this = this; + let submitInfo = { + prodId: this.$route.query.prodId + }; + SystApi.incomeSubmit(submitInfo).then( + response => { + if (response.errorCode === 0) { + _this.$router.push({ + path: '/incomeLoan/auditResults', + query: {prodId: this.$route.query.prodId} + }); + } + }, + error => { + statusCodeManage.showTipOfStatusCode(error); + } + ); + }, + // 手持身份证上传 + handIDPhotoChange: function (evt) { + // 手持身份证图片上传 + if (this.handIDImg) { + this.validateTip('最多上传 1 张'); + return false; + } + // loading 显示加载中 + store.commit('updateLoadingStatus', {isLoading: true}); + const files = Array.prototype.slice.call(evt.target.files); + let that = this; + files.forEach(function (file, i) { + var orientation; + if (!/\/(?:jpeg|png|gif)/i.test(file.type)) return; + // 读取图片的元信息 + EXIF.getData(file, function () { + orientation = EXIF.getTag(this, 'Orientation'); + }); + let reader = new FileReader(); + reader.onload = function () { + // 使用exif + that.getImgData(this.result, orientation, function (data) { + // 这里可以使用校正后的图片data了 + var img = new Image(); + img.src = data; + // 图片加载完毕之后进行压缩,然后上传 + if (img.complete) { + callback(); + } else { + img.onload = callback; + } + + function callback() { + let data = that.compress(img); + let post = { + file: data, + extName: 'jpeg', + oldFileUrl: that.handIDImg + }; + // that.handIDImg = data; + that.uploadImgByUnified('handID', post); + // 发送后台请求 + } + }); + }; + reader.readAsDataURL(file); + }); + }, + // 工作照上传 + workPhotoChange: function (evt) { + // 工作证件图片上传 + if (this.workCertImages.length > 4) { + this.validateTip('最多上传 5 张'); + return false; + } + const files = Array.prototype.slice.call(evt.target.files); + let that = this; + files.forEach(function (file, i) { + let orientation; + if (!/\/(?:jpeg|png|gif)/i.test(file.type)) return; + // 读取图片的元信息 + EXIF.getData(file, function () { + orientation = EXIF.getTag(this, 'Orientation'); + }); + let reader = new FileReader(); + reader.onload = function () { + // 使用exif + that.getImgData(this.result, orientation, function (data) { + // 这里可以使用校正后的图片data了 + let img = new Image(); + img.src = data; + // 图片加载完毕之后进行压缩,然后上传 + if (img.complete) { + callback(); + } else { + img.onload = callback; + } + + function callback() { + var data = that.compress(img); + let post = { + file: data, + extName: 'jpeg', + oldFileUrl: '' + }; + // that.workCertImages.push(data); + that.uploadImgByUnified('workCert', post); + // 发送后台请求 + } + }); + }; + reader.readAsDataURL(file); + }); + }, + // 删除当前选择的图片 + deleteCurrentImg: function (evt, index) { + // 删除图片 + let _this = this; + let par = { + prodId: this.$route.query.prodId, + fileType: 'workCert', + fileUrl: _this.workCertImages[index] + }; + SystApi.deleteImageFile(par).then( + function (res) { + if (res.errorCode === 0) { + _this.workCertImages.splice(index, 1); + } + }, + function (error) { + if (error.response) { + } + } + ); + }, + lifePhotoChangeClick: function (evt) { + let htmlNode = evt.target.getElementsByTagName('input')[0]; + if (htmlNode) { + htmlNode.click(); + } + // console.log(evt.target.getElementsByTagName("input")[0].click()); + // this.$refs._testFile.dispatchEvent(new MouseEvent('click')) + }, + // 居住证明 + lifePhotoChange: function (evt) { + // 居住证件图片上传 + if (this.residenceCertImage) { + this.validateTip('最多上传 1 张'); + return false; + } + // loading 显示加载中 + store.commit('updateLoadingStatus', {isLoading: true}); + const files = Array.prototype.slice.call(evt.target.files); + let that = this; + files.forEach(function (file, i) { + let orientation; + if (!/\/(?:jpeg|png|gif)/i.test(file.type)) return; + // 读取图片的元信息 + EXIF.getData(file, function () { + orientation = EXIF.getTag(this, 'Orientation'); + }); + let reader = new FileReader(); + reader.onload = function () { + // 使用exif + that.getImgData(this.result, orientation, function (data) { + // 这里可以使用校正后的图片data了 + var img = new Image(); + img.src = data; + // 图片加载完毕之后进行压缩,然后上传 + if (img.complete) { + callback(); + } else { + img.onload = callback; + } + + function callback() { + var data = that.compress(img); + let post = { + file: data, + extName: 'jpeg', + oldFileUrl: that.residenceCertImage + }; + // that.residenceCertImage = data; + that.uploadImgByUnified('residenceCert', post); + // 发送后台请求 + } + }); + }; + reader.readAsDataURL(file); + }); + }, + secelted: function (type, imgobj) { + // 跳转到下一步 + if (type === 'IDFront') { + imgobj.oldFileUrl = this.Idcard.positive; + } else if (type === 'IDBack') { + imgobj.oldFileUrl = this.Idcard.reverse; + } + this.uploadImgByUnified(type, imgobj); + }, + uploadImgByUnified: function (type, par) { + let _this = this; + _this.imageSync = true; + par.fileType = type; + par.extName = 'jpeg'; + par.file = par.file.split(',')[1]; + par.prodId = this.$route.query.prodId; + SystApi.upLoadImg(par).then( + function (res) { + _this.imageSync = false; + store.commit('updateLoadingStatus', {isLoading: false}); + if (res.errorCode === 0) { + if (type === 'IDFront') { + _this.Idcard.positive = res.body; + } else if (type === 'IDBack') { + _this.Idcard.reverse = res.body; + } else if (type === 'handID') { + _this.handIDImg = res.body; + } else if (type === 'residenceCert') { + _this.residenceCertImage = res.body; + } else if (type === 'workCert') { + _this.workCertImages.push(res.body); + } + } + }, + function (error) { + _this.imageSync = false; + store.commit('updateLoadingStatus', {isLoading: false}); + statusCodeManage.showTipOfStatusCode(error); + } + ); + }, + // 图片旋转处理 + getImgData: function (img, dir, next) { + // @param {string} img 图片的base64 + // @param {int} dir exif获取的方向信息 + // @param {function} next 回调方法,返回校正方向后的base64 + var image = new Image(); + let canvas = document.createElement('canvas'); + let ctx = canvas.getContext('2d'); + image.onload = function () { + let resultWidth = 0; + let resultHeight = 0; + let maxWidthOrHeight = 1024; + let drawWidth = this.naturalWidth; + let drawHeight = this.naturalHeight; + // 以下改变图片大小,控制最大宽度为1024 + var maxSide = Math.max(drawWidth, drawHeight); + if (maxSide > maxWidthOrHeight) { + let minSide = Math.min(drawWidth, drawHeight); + minSide = minSide / maxSide * maxWidthOrHeight; + maxSide = maxWidthOrHeight; + if (drawWidth > drawHeight) { + resultWidth = maxSide; + resultHeight = minSide; + } else { + resultWidth = minSide; + resultHeight = maxSide; + } + } + if (dir === 3) { + canvas.width = resultWidth; + canvas.height = resultHeight; + ctx.translate(resultWidth, resultHeight); + ctx.rotate(Math.PI); + } else if (dir === 6) { + canvas.width = resultHeight; + canvas.height = resultWidth; + ctx.translate(resultHeight, 0); + ctx.rotate(Math.PI / 2); + } else if (dir === 8) { + canvas.width = resultHeight; + canvas.height = resultWidth; + ctx.translate(0, resultWidth); + ctx.rotate(-Math.PI / 2); + } else { + canvas.width = resultWidth; + canvas.height = resultHeight; + } + ctx.drawImage(this, 0, 0, resultWidth, resultHeight); + // 返回校正图片 + next(canvas.toDataURL('image/jpeg', 0.8)); + }; + image.src = img; + }, + // 压缩图片 + compress: function (img) { + // 用于压缩图片的canvas + let canvas = document.createElement('canvas'); + let ctx = canvas.getContext('2d'); + // 瓦片canvas + var tCanvas = document.createElement('canvas'); + var tctx = tCanvas.getContext('2d'); + let width = img.width; + let height = img.height; + // 如果图片大于四百万像素,计算压缩比并将大小压至400万以下 + var ratio; + if ((ratio = width * height / 4000000) > 1) { + ratio = Math.sqrt(ratio); + width /= ratio; + height /= ratio; + } else { + ratio = 1; + } + canvas.width = width * 2; + canvas.height = height * 2; + // 铺底色 + ctx.fillStyle = '#fff'; + ctx.fillRect(0, 0, canvas.width, canvas.height); + // 如果图片像素大于100万则使用瓦片绘制 + var count; + if ((count = width * height / 1000000) > 1) { + count = ~~(Math.sqrt(count) + 1); // 计算要分成多少块瓦片 + // 计算每块瓦片的宽和高 + var nw = ~~(width / count); + var nh = ~~(height / count); + tCanvas.width = nw; + tCanvas.height = nh; + for (var i = 0; i < count; i++) { + for (var j = 0; j < count; j++) { + tctx.drawImage( + img, + i * nw * ratio, + j * nh * ratio, + nw * ratio * 2, + nh * ratio * 2, + 0, + 0, + nw, + nh + ); + ctx.drawImage(tCanvas, i * nw, j * nh, nw * 2, nh * 2); + } + } + } else { + ctx.drawImage(img, 0, 0, width * 2, height * 2); + } + // 进行最小压缩 + let ndata = canvas.toDataURL('image/jpeg', 0.8); + return ndata; + }, + inItPage: function () { + let _this = this; + let submitInfo = { + prodId: this.$route.query.prodId + }; + SystApi.initMaterialInfo(submitInfo).then( + response => { + if (response.errorCode === 0) { + let _body = response.body; + _this.Idcard.positive = _body.idFrontImage; + _this.Idcard.reverse = _body.idBackImage; + _this.handIDImg = _body.handIDImage; + _this.residenceCertImage = _body.residenceCertImage; + _this.workCertImages = _body.workCertImages + ? _body.workCertImages + : []; + } + }, + error => { + statusCodeManage.showTipOfStatusCode(error, _this); + } + ); + } + }, + components: { + Scroller, + XHeader, + Group, + GroupTitle, + Cell, + XInput, + XButton, + Flexbox, + FlexboxItem, + FlowLine, + XImg, + Flow, + FlowState, + XDialog, + Icon, + 'img-upload': upload + }, + activated: function () { + store.commit('updateDirection', {direction: 'in'}); + this.inItPage(); + } + }; +</script> + +<style lang="less"> + @import '../../style/mixin.less'; + + .loan-info-box { + .vux-header { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + .vux-header-left { + .left-arrow:before { + border: solid 1px @color-white; + border-width: 2px 0 0 2px; + } + } + } + background-color: @color-background-default; + .closePhoto { + position: absolute; + top: -10px; + right: -10px; + font-size: 20px; + color: #ff4d53; + background: transparent; + } + + .progressState div p { + font-size: @font-size-tiny; + } + .weui-wepay-flow__state { + width: 16px; + height: 16px; + top: -1px; + padding-top: 1px; + } + .currentStep .weui-wepay-flow__state { + width: 16px; + height: 16px; + padding-top: 1px; + border: 1px solid @color-primary; + color: @color-primary; + border-radius: 50%; + background-color: @color-white; + } + .weui-input { + height: 28px; + line-height: 28px; + } + .weui-wepay-flow, + .weui-wepay-flow-auto { + padding: 10px 40px 30px; + background: @color-white; + } + .weui-wepay-flow__li_done .weui-wepay-flow__state, + .weui-wepay-flow__process { + background-color: @color-primary; + } + .IDCardUpLoadBut { + font-size: @font-size-small; + border-radius: 15px; + } + } + + .header-space { + height: 46px; + } + + .left-arrow:before { + border-color: @color-white !important; + } + + .weui-btn_default { + color: @color-white !important; + } + + .weui-wepay-flow__title-bottom { + font-size: 12px !important; + } + + .IDcardbgDiv { + height: 80px; + } + + .loan-info-box .weui-cell_select .weui-select { + padding-right: 2.5rem; + direction: rtl; + } + + .loan-info-box .weui-input { + text-align: right; + } + + .loan-info-box .weui-btn_primary { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + } + + .IDcardFlexbox { + background-color: @color-white; + padding-top: 15px; + } + + .upload { + width: 66%; + margin-left: 17%; + } + + .IDcardSampleList { + box-sizing: border-box; + padding: 0 12px; + } + + .IDcardSampleList img { + width: 90%; + } + + .figureBlock { + vertical-align: top; + } + + .IDcardsampleGroup .weui-cells { + margin-top: 0; + padding-top: 6px; + } + + .IDcardsampleGroup .weui-cells:before { + display: none; + } + + .IDcardsampleGroup .weui-cell_access .weui-cell__ft { + right: 27%; + } + + .IDcardsampleGroup .weui-cell_access .weui-cell__ft:after { + border-color: @color-primary; + } + + .IDcardsampleGroup .weui-cell_access .weui-cell__ft { + right: 20%; + margin-top: -3px; + } + + .IDcardsampleINfo { + text-align: center; + font-size: 16px; + color: @color-primary; + } + + .groupTitle { + font-size: 14px; + } + + .groupTitle span { + color: @color-text-placeholder-red; + } + + .groupSmallTitle { + font-size: 10px; + padding-left: 6px; + } + + .cardsampleItem { + display: inline-block; + text-align: center; + font-size: 10px; + width: 85%; + } + + .handIDItemsbox { + height: 90px; + width: 450px; + position: relative; + top: 10px; + } + + .handIDItems { + display: inline-block; + width: 70%; + } + + .workPhtotoItem { + position: relative; + float: left; + display: inline-block; + margin-left: 10px; + width: 80px; + height: 80px; + } + + .workPhtotoItem:nth-child(1) { + margin-left: 0; + } + + .workPhtotoItem img { + width: 80px; + height: 80px; + } + + .workPhtotoLoadBut { + display: inline-block; + width: 80px; + padding-top: 10px; + text-align: center; + } + + .handIDItem { + width: 80px; + margin-top: 10px; + /*height: ;*/ + } + + .handIDItem img { + width: 100%; + max-height: 80px; + } + + .handIDItem div { + text-align: center; + } + + .photoItem { + height: 100px; + padding: 10px 15px; + background-color: @color-white; + } + + .photoItem .handIDItem { + position: relative; + display: inline-block; + } + + .cameraIcon { + float: right; + /*padding-top: 10px;*/ + } + + .cameraIcon .cameraIconDiv { + position: relative; + height: 80px; + width: 80px; + line-height: 80px; + vertical-align: middle; + border: 1px dashed @color-primary; + } + + .PhotoChangeInput { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + /*width: 1px;*/ + /*height: 1px;*/ + opacity: 0; + } + + .cameraIcon .icon-camerafill { + font-size: 30px; + color: @color-primary; + } + + .photoDivFooter .photoSubBut { + color: #fff; + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + } + + .MaximizeImgdialog .weui-dialog { + background-color: transparent; + } +</style> diff --git a/src/views/loan/bankLoan.vue b/src/views/loan/bankLoan.vue new file mode 100644 index 0000000..09d75d5 --- /dev/null +++ b/src/views/loan/bankLoan.vue @@ -0,0 +1,579 @@ +<template> + <div class="bank-loan-page"> + <!--职业分类--> + <div class="job-type"> + <div class="type-item" v-for="(item, index) in bankTypeList" @click="jobFilterJump(item)" :key="index"> + <span :style="{background: `linear-gradient(${item.leftColor}, ${item.rightColor})`}"> + <svg class="icon" aria-hidden="true"> + <use :xlink:href="'#'+item.icon"></use> + </svg> + </span> + <p>{{ item.name }}</p> + </div> + </div> + <FSpace type="small"></FSpace> + <!--筛选--> + <div ref="point"></div> + <!--筛选与列表板块--> + <div ref="stickyBox" :class="[{ 'filter-fixed': filterFixed }, 'speed-filter']"> + <FilterTab :filterTab="filterTab" @on-click-tab="handleFilterTab"></FilterTab> + <!--综合排序下拉列表--> + <div v-show="showFilterList" class="filter-list"> + <group gutter="0"> + <cell :title="item.content" :class="{'filter-active': item.active}" @click.native="handleFilterCellClick(item)" v-for="(item,index) in filterList" :key="index"></cell> + </group> + </div> + <div v-show="showFilterMoney" class="money-filter-list"> + <group gutter="0"> + <p v-bind:class="[{ 'active-money': activeMoney }, 'any-money']" @click="unlimitedAmount">不限金额</p> + <div class="money-box"> + <x-input placeholder="请输入贷款金额" @input.native="handleInputMoney" :max="5" :novalidate="true" :min="1" :show-clear="false" v-model.trim="money"> + <FButton slot="right" size="mini" text="确定" @click.native="handleAmount"></FButton> + </x-input> + <span class="unit">万元</span> + </div> + <p class="filter-tip">可输入贷款范围0.1-1000万元</p> + </group> + </div> + </div> + <div class="weui-mask" @click="handleClickMask" v-show="showFilterList || showFilterMoney"></div> + <div class="filter-fixed-space" v-if="filterFixed"></div> + <!--产品列表--> + <FProdList :lists="prodList" :showNone="showNone" @on-click-prodItem="handleProductJump"></FProdList> + </div> +</template> + +<script> +/** + * Created by c.y on 2018/3/22. + * 贷款--银行卡贷款 + */ +import FilterTab from '../../components/common/FilterTab.vue'; +import FSpace from '../../components/common/FSpace.vue'; +import FButton from '../../components/common/FButton.vue'; +import FProdList from '../../components/common/FProdList.vue'; +import validator from '../../tool/validator'; +import systemApi from '../../api/api'; +import statusCodeManage from '../../api/statusCodeManage'; +import { Group, Cell, XInput, throttle } from 'vux'; +import { callbackify } from 'util'; + +export default { + name: 'f-bank-loan', + data() { + return { + showFilterList: false, // 显示筛选下拉 + showFilterMoney: false, // 显示金额输入的下拉 + scrolledTop: 0, + money: '', // 输入的金额 + bankTypeList: [], // 职业的tab对应的code + filterFixed: false, // 是否固定 + activeMoney: false, // 金额的选择 + filterTab: [ + { + isPullDown: true, + content: '不限金额', + pullDownActive: false, + activeTriangle: false + }, + { + isPullDown: true, + content: '不限期限', + pullDownActive: false, + activeTriangle: false + }, + { isPullDown: false, content: '热门', pullDownActive: false }, + { isPullDown: false, content: '利息低', pullDownActive: false } + ], + filterList: [ + { content: '不限期限', value: '', active: true }, + { content: '3个月', value: 3, active: false }, + { content: '6个月', value: 6, active: false }, + { content: '12个月', value: 12, active: false }, + { content: '2年', value: 24, active: false }, + { content: '3年', value: 36, active: false }, + { content: '5年', value: 60, active: false }, + { content: '10年', value: 120, active: false } + ], + prodList: [], // 产品列表 + showNone: false //产品列表空白页 + }; + }, + methods: { + // 用户只能输入点与数字 + handleInputMoney() { + let _this = this; + setTimeout(function() { + if (_this.money) { + // 未超过字符的话,可以其他非要求字符转换为空字符串 + if (_this.money.length > 5) { + _this.money = _this.money.substring(0, 5); + } else { + _this.money = _this.money.replace(/[^\d.]/g, ''); + } + } + }, 50); + }, + // 点击遮罩 + handleClickMask() { + // 如果下拉存在的话 + if (this.showFilterList || this.showFilterMoney) { + this.filterFixed = false; + this.showFilterList = false; + this.showFilterMoney = false; + this.filterTab[0].activeTriangle = false; + this.filterTab[1].activeTriangle = false; + this.money = ''; + } + }, + // 获取bank贷款下,四个tab的code + getBankLoanType() { + let _this = this; + systemApi.fetchQuestionAndTypeList().then( + response => { + _this.bankTypeList = response.bankLoanType; + }, + error => { + statusCodeManage.showTipOfStatusCode(error, _this); + } + ); + }, + // 不限金额的点击 + unlimitedAmount() { + // 如果有期限的话, + for (let i = 0; i < this.filterList.length; i++) { + if (this.filterList[i].active) { + if (this.filterList[i].content === '不限期限') { + this.init(null, this.callBack); + } else { + this.init( + { limit: this.filterList[i].value }, + this.callBack + ); + } + } + } + this.filterTab[0].activeTriangle = false; + this.showFilterMoney = false; + this.filterFixed = false; + this.money = ''; + if (this.filterTab[0].content === '不限金额') { + return false; + } + // 选中tab + this.filterTab[0].content = '不限金额'; + }, + // 输入金额点击确定 + handleAmount() { + let reg = /(^[1-9]\d{0,4}$)|(^\d\.\d{1,3}$)|(^[1-9]\d\.\d{1,2}$)|(^[1-9]\d{2}\.\d{1}$)/; + if ( + !reg.test(this.money) || + this.money > 1000 || + this.money < 0.1 + ) { + this.$vux.toast.text('请输入有效的金额', 'middle'); + return; + } + // 如果通过话的 + this.filterTab[0].content = this.money + '万元'; + for (let i = 0; i < this.filterList.length; i++) { + if (this.filterList[i].active) { + if (this.filterList[i].content === '不限期限') { + this.init({ money: this.money * 10000 }, this.callBack); + } else { + this.init( + { + money: this.money * 10000, + limit: this.filterList[i].value + }, + this.callBack + ); + } + } + } + this.filterTab[0].activeTriangle = false; + this.showFilterMoney = false; + this.filterFixed = false; + }, + // 处理产品跳转 + handleProductJump(item) { + // 极速贷款或者银行卡 + if ( + item.productType === 40000005 || + item.productType === 40000006 + ) { + this.$router.push({ + path: '/f-loan-detail', + query: { + id: item.prodId + } + }); + // 信用卡 + } else if (item.productType === 40000007) { + this.$router.push({ + path: '/f-credit-detail', + query: { + id: item.prodId + } + }); + } + }, + // 职业选择的跳转列表 + jobFilterJump(item) { + this.$router.push({ + path: '/f-job-loan', + query: { + type: item.code + } + }); + }, + // 处理滚动 + handleScroll() { + let _this = this; + if (this.showFilterList || this.showFilterMoney) { + return false; + } else { + window.scrollY > 108 + ? (_this.filterFixed = true) + : (_this.filterFixed = false); + } + }, + // 切换的tab + handleFilterTab(item, index) { + // 点击有下拉的话,那么就是进行定位,如果不是有下列的话,那么直接 + // 调接口,进行数据渲染 + if (item.isPullDown) { + // 当点击selectTab的时候,如果距离顶部的距离是小于152的话,大于44的话,那么 + // 那么就会,定位到tab的切换的下面.其他的情况下,不进行定位。 + if (index === 0) { + // 如果选择的是金额的话 + this.showFilterMoney = true; + this.showFilterList = false; + if (item.content === '不限金额') { + this.activeMoney = true; + } + } else { + // 不限期限的 + this.showFilterMoney = false; + this.showFilterList = true; + } + if (!item.pullDownActive) { + item.pullDownActive = true; + } + this.filterFixed = true; + this.filterTab[index].activeTriangle = true; + } else { + // 热门即综合排序 + if (item.content === '热门') { + // 判断期限与金额是否选择了 + let submitInfo = {}; + if (this.filterTab[0].content !== '不限金额') { + submitInfo.money = this.money * 10000; + } + if (this.filterTab[1].content !== '不限期限') { + for (let i = 0; i < this.filterList.length; i++) { + if (this.filterList[i].active) { + submitInfo.limit = this.filterList[i].value; + } + } + } + this.init(submitInfo, this.callBack); + } else if (item.content === '利息低') { + let submitInfo = {}; + if (this.filterTab[0].content !== '不限金额') { + submitInfo.money = this.money * 10000; + } + if (this.filterTab[1].content !== '不限期限') { + for (let i = 0; i < this.filterList.length; i++) { + if (this.filterList[i].active) { + submitInfo.limit = this.filterList[i].value; + } + } + } + submitInfo.compareField = 'loanRate'; + this.init(submitInfo, this.callBack); + } + this.showFilterList = false; + this.showFilterMoney = false; + if (this.filterFixed) { + // 取消定位,以及下拉弹窗 + this.filterFixed = false; + } + this.filterTab[0].activeTriangle = false; + this.filterTab[1].activeTriangle = false; + // 如果是从点击有下拉的选项的话,并且滑动一定距离的话,再点击没有下拉的tab + // 会出现滑动到底部,此时需要把页面滑动顶部 + window.scrollTo(0, 0); + } + }, + // 点击期限传递的都是以月为单位 + handleFilterCellClick(filterItem) { + // 更新filter的值 + this.filterTab[1].content = filterItem.content; + // 进行筛选 + if (filterItem.content === '不限期限') { + if (this.filterTab[0].content !== '不限金额') { + this.init({ money: this.money * 10000 }, this.callBack); + } else { + this.init(null, this.callBack); + } + } else if (filterItem.content.indexOf('月') !== -1) { + let limitMonth = parseInt(filterItem.content.slice(0, -2)); + if (this.filterTab[0].content !== '不限金额') { + this.init( + { money: this.money * 10000, limit: limitMonth }, + this.callBack + ); + } else { + this.init({ limit: limitMonth }, this.callBack); + } + } else if (filterItem.content.indexOf('年') !== -1) { + let limitYear = parseInt(filterItem.content.slice(0, -1)) * 12; + if (this.filterTab[0].content !== '不限金额') { + this.init( + { money: this.money * 10000, limit: limitYear }, + this.callBack + ); + } else { + this.init({ limit: limitYear }, this.callBack); + } + } + // 并更改其选中状态,并把其他的选择的状态清空 + this.filterList.forEach(function(item) { + item.content === filterItem.content + ? (item.active = true) + : (item.active = false); + }); + // 取消定位,以及下拉弹窗 + this.filterTab[1].activeTriangle = false; + this.filterFixed = false; + this.showFilterList = false; + }, + // 获取Attr的列表, prodElements产品组件的元素列表 + getAttrList(prodElements) { + // 获取用户修改的数据 + let attrList = []; + if (prodElements instanceof Array) { + prodElements.map(function(listItem) { + listItem.attrs.forEach(function(item) { + attrList.push(item.value); + }); + }); + } + return attrList; + }, + callBack() { + let dom = this.$refs.point; + let scrollTop = dom.offsetTop; + this.$nextTick(function () { + window.scrollTo(0, scrollTop - 44); + }); + }, + init(filterCond = null, callBack) { + let _this = this; + let submitInfo = { + prodType: 40000006 // 银行贷款 + }; + if (filterCond) { + submitInfo = Object.assign(submitInfo, filterCond); + } + this.showNone = false; + systemApi.fetchProdTypeList(submitInfo).then( + res => { + _this.prodList = []; + res.body.forEach(function(item) { + _this.prodList.push({ + prodId: item.unit.prodId, + content: _this.getAttrList(item.showEles), + productType: item.unit.prodType, + applyNumber: + item.unit.showNumPrefix + item.unit.showNum + }); + }); + if (_this.prodList.length && _this.prodList.length >= 1) { + _this.showNone = false; + } else { + _this.showNone = true; + } + if (callBack) { + callBack(); + } + }, + error => { + statusCodeManage.showTipOfStatusCode(error, _this); + } + ); + } + }, + components: { + FilterTab, + FSpace, + FProdList, + Group, + Cell, + XInput, + FButton + }, + activated() { + this.showFilterList = false; + this.showFilterMoney = false; + this.scrolledTop = 0; + this.money = ''; + this.bankTypeList = []; // 职业的tab对应的code + this.filterFixed = false; // 是否固定 + this.activeMoney = false; // 金额的选择 + this.filterTab = [ + { + isPullDown: true, + content: '不限金额', + pullDownActive: false, + activeTriangle: false + }, + { + isPullDown: true, + content: '不限期限', + pullDownActive: false, + activeTriangle: false + }, + { isPullDown: false, content: '热门', pullDownActive: false }, + { isPullDown: false, content: '利息低', pullDownActive: false } + ]; + this.filterList = [ + { content: '不限期限', value: '', active: true }, + { content: '3个月', value: 3, active: false }, + { content: '6个月', value: 6, active: false }, + { content: '12个月', value: 12, active: false }, + { content: '2年', value: 24, active: false }, + { content: '3年', value: 36, active: false }, + { content: '5年', value: 60, active: false }, + { content: '10年', value: 120, active: false } + ]; + this.prodList = []; + this.showNone = false; + this.$store.commit('UPDATE_ACTIVE_TAB', { loanActiveTab: 1 }); + this.getBankLoanType(); + this.init(null, null); + window.addEventListener( + 'scroll', + throttle(this.handleScroll, 50), + false + ); + } +}; +</script> + +<style lang="less"> +@import '../../style/mixin'; +.filter-fixed { + position: fixed !important; + left: 0 !important; + top: 44px !important; + z-index: 1002 !important; +} +.bank-loan-page { + .filter-fixed-space { + height: 32px; + } + .weui-cells { + &:before { + height: 0; + border-top: 0; + } + } + .vux-x-input { + &:before { + height: 0; + border-top: 0; + } + } + .vux-label { + font-size: @font-size-base; + } + .money-box { + position: relative; + .unit { + position: absolute; + left: 64%; + top: 0; + height: 30px; + line-height: 30px; + font-size: @font-size-medium; + } + } + .speed-sticky-box { + height: 44px; + } + .speed-filter { + width: 100%; + height: 32px; + } + .weui-mask { + z-index: 1001; + } + .money-filter-list { + width: 100%; + background: @color-white; + .weui-cell__bd { + border: 1px solid @color-divider-regular; + border-radius: @border-radius-normal-size; + } + .weui-input { + padding-left: 14px; + font-size: @font-size-medium; + height: 30px; + line-height: 30px; + } + .vux-x-input { + padding: 0 15px; + } + .f-button { + margin-left: 10px; + } + .any-money { + padding: 10px 15px; + font-size: @font-size-base; + color: @color-text-primary; + } + .active-money { + color: @color-primary; + } + .filter-tip { + padding: 10px 15px; + font-size: @font-size-small; + color: @color-text-third; + } + } + .filter-list { + width: 100%; + background: @color-white; + .filter-active { + color: @color-primary; + } + } + .job-type { + .flexLayout(); + box-sizing: border-box; + padding: 20px 0 10px; + .type-item { + flex: 1; + text-align: center; + span { + display: inline-block; + width: 44px; + height: 44px; + line-height: 44px; + color: #fff; + border-radius: 50%; + overflow: hidden; + .icon { + width: 44px; + height: 50px; + } + } + } + .iconfont { + font-size: 20px; + } + } +} +</style> diff --git a/src/views/loan/creditDetail.vue b/src/views/loan/creditDetail.vue new file mode 100644 index 0000000..04878b5 --- /dev/null +++ b/src/views/loan/creditDetail.vue @@ -0,0 +1,442 @@ +<template> + <div class="credit-detail" v-if="needCreditInfo.length >=1 "> + <x-header :left-options="{backText: '', preventGoBack: true}" + @on-click-back="goBackPage" + class="gradient-color">{{ prodDetailInfo.unit.prodName }}</x-header> + <!--信用卡--> + <div class="credit-card-img"> + <img :src="needCreditInfo[0].attrs[0]" alt="信用卡"> + <h3>{{ needCreditInfo[0].attrs[1] }}</h3> + <p>{{ needCreditInfo[0].attrs[2] }}</p> + <div class="label" v-if="labelList"> + <span v-for="(item,index) in labelList" + :key="item">{{ item }}</span> + </div> + </div> + <FSpace type="small"></FSpace> + <!--优惠信息--> + <div class="discount"> + <h2 class="credit-section-title">{{ needCreditInfo[1].name}}</h2> + <div class="discount-box"> + <div v-for="(item,index) in offerInfoList" + :key="index"> + <i class="iconfont" :class="item.iconName"></i> + <span>{{ item.offerInfo }}</span> + </div> + </div> + </div> + <FSpace type="small"></FSpace> + <!--基本信息--> + <div class="basic"> + <h2 class="credit-section-title">{{ needCreditInfo[2].name }}</h2> + <div class="basic-box"> + <div class="basic-item" + :key="index" + v-for="(item,index) in basicInfoList"> + <div>{{ item.title }}</div> + <div>{{ item.info }}</div> + </div> + </div> + </div> + <FSpace type="small"></FSpace> + <!--费用信息--> + <div class="cost"> + <h2 class="credit-section-title">{{ needCreditInfo[3].name}}</h2> + <div class="cost-box"> + <div class="cost-item" + v-for="(item, index) in costInfoList" + :key="index"> + <div>{{ item.title }}</div> + <div v-html="item.info"></div> + </div> + </div> + </div> + <!--提示--> + <div class="tips">{{ needCreditInfo[4].attrs[0] }}</div> + <FSpace type="large"></FSpace> + <!--申请按钮--> + <FButton class="btn" @on-click-button="handleApplyJump" :text="buttonMsg" :isBorderRadius="false"> + <div slot="sbIphoneX" class="sbIphoneX"></div> + </FButton> + </div> +</template> + +<script> + /** + * Created by c.y on 2018/3/22. + * 信用卡的详情 + */ + import {XHeader} from 'vux' + import FSpace from '../../components/common/FSpace.vue'; + import FButton from '../../components/common/FButton.vue' + import systemApi from '../../api/api'; + import statusCodeManage from '../../api/statusCodeManage'; + import productJump from '../../tool/productRequestJump'; + import goBackCont from '../common/goBackControl'; + import pageBack from '../../tool/pageBackByAndroid'; + + export default { + name: 'f-credit-detail', + components: { + XHeader, + FSpace, + FButton + }, + data(){ + return { + buttonMsg: '', // 立即申请的字由后台返回 + prodType:null, + prodDetailInfo: null, // 产品的初始化详情 + needCreditInfo: [] // 信用卡详情 + } + }, + computed: { + // 优惠信息列表的组装 + offerInfoList () { + return this.getCombList(this.needCreditInfo[1].attrs, 'iconName', 'offerInfo'); + }, + // 信用卡标签的组装 + labelList () { + return this.needCreditInfo[0].attrs.splice(3); + }, + // 基本信息的组装 + basicInfoList () { + return this.getCombList(this.needCreditInfo[2].attrs, 'title', 'info'); + }, + // 费用信息的组装 + costInfoList () { + return this.getCombList(this.needCreditInfo[3].attrs, 'title', 'info'); + } + }, + methods: { + goBackPage() { + goBackCont.goBackFun(this); + }, + /** + * 标题与文字的组合,例如icon与文字,左边标题与文字的组合 + * @param attrList 属性列表 + * @param titleKey { String } 组合后的titleKey + * @param infoKey { String } 组合后的infoKey + * @return {Array} + */ + getCombList (attrList, titleKey, infoKey) { + let combList = []; + let titleList = []; + let infoList = []; + // index是奇数的话,那么就是标题,是偶数的话,那么就是文字的 + attrList.forEach(function (item, index) { + // 如果是偶数的话 + if (index % 2 === 0) { + titleList.push(item); + // 奇数的话 + } else { + infoList.push(item); + } + }); + titleList.forEach(function (item, index) { + combList.push({ + [titleKey]: item, + [infoKey]: infoList[index] + }); + }); + return combList; + }, + // 获取Attr的列表, prodElements产品组件的元素列表 + getAttrList (prodElements) { + // 获取用户修改的数据 + let attrList = []; + prodElements.map(function (listItem) { + listItem.attrs.forEach(function (item) { + attrList.push(item.value); + }); + }); + return attrList; + }, + // 记录产品的点击次数 + productClickNumber (productId) { + let submitInfo = { + prodId: productId + }; + systemApi.fetchProdRec(submitInfo).then((res) => { + }, (error) => { + statusCodeManage.showTipOfStatusCode(error,this); + }) + }, + // 立即申请按钮事件 + handleApplyJump () { + let sessionId = window.sessionStorage.getItem('newSid'); + let isRealName = parseInt(window.sessionStorage.getItem('newClientState')); + + let _this = this; + if (sessionId === null) { + window.sessionStorage.setItem('newGoBackPage',window.location.hash.split('#')[1]); + this.$router.push({name: 'f-login'}); + } else if (isRealName === 0) { + window.sessionStorage.setItem('newGoBackPage',window.location.hash.split('#')[1]); + this.$router.push({name: 'f-auth'}); + } else { + let _prodId = _this.$route.query.id; + let _url = window.location.href; + let infoPage = _this.$route.fullPath; + _url = encodeURI(_url); + systemApi.getVisitUrl({prodId: _prodId, redirectUrl: _url}).then( + response => { + productJump(response, _this, infoPage); + }, + error => { + statusCodeManage.showTipOfStatusCode(error,_this); + } + ); + } + }, + // 初始化产品详情 + init (productId) { + let _this = this; + let submitInfo = { + prodId: productId + }; + systemApi.fetchProdDetail(submitInfo).then((res) => { + _this.prodDetailInfo = res.body.prodDetailInfo; + _this.buttonMsg = res.body.buttonMsg; + _this.prodType = res.body.prodDetailInfo.unit.prodType; + // 组装产品详情需要的数据格式 + _this.prodDetailInfo.components.forEach(function (item) { + _this.needCreditInfo.push({ + name: item.name, + attrs: _this.getAttrList(item.showEles) + }); + }); + }, (error) => { + statusCodeManage.showTipOfStatusCode(error,_this); + }); + } + }, + activated: function () { + let _this = this; + this.$store.commit('UPDATE_DIRECTION', {direction: 'in'}); + let productId = this.$route.query.id; + this.init(productId); + this.productClickNumber(productId); + window.backPageByAndroid =function (obj) { + // 如果是详情界面,就调用详情界面的返回方法 + goBackCont.goBackFun(_this); + } + }, + beforeRouteEnter(to, from, next) { + // 如果是从以下界面过来的,走逻辑返回,否则走正常返回 + goBackCont.gotoNext(to, from, next); + }, + deactivated(){ + this.$store.commit('UPDATE_DIRECTION', {direction: 'none'}); + this.needCreditInfo = []; + this.buttonMsg = ''; + pageBack.androidBackBtn(); + // window.backPageByAndroid =function (obj) { + // console.log('window->history'); + // window.history.go(-1); + // } + } + } +</script> + +<style lang="less"> + @import "../../style/mixin"; + + .vux-header { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + .vux-header-title { + font-size: 18px; + } + .vux-header-left { + .left-arrow:before { + border: solid 1px @color-white; + border-width: 2px 0 0 2px; + } + } + .vux-header-right { + color: @color-white !important; + } + } + + .icon-gift, .icon-coffee { + color: #ff8657; + } + + .icon-food, .icon-species, .icon-vip { + color: #ffb446; + } + + .icon-hotel, .icon-supermarket { + color: #0092f1; + } + + .icon-shopping, .icon-car { + color: #18bfff; + } + + .icon-tour, .icon-coupon { + color: #4adfff; + } + + .icon-ensure { + color: #00df9d; + } + + .credit-detail { + .f-button { + margin: 0; + } + .gradient-color { + .color-linear-gradient(); + } + .credit-card-img { + padding: 12px 15px; + img { + width: 100%; + height: 220px; + border-radius: @border-radius-normal-size; + } + h3 { + font-size: @font-size-primary; + color: @color-text-primary; + line-height: 25px; + font-weight: normal; + } + p { + font-size: @font-size-small; + color: @color-text-third; + line-height: 25px; + } + .label { + span { + display: inline-block; + height: 14px; + line-height: 14px; + font-size: 8px; + color: @color-primary-light; + padding: 1px; + margin-right: 10px; + margin-bottom: 5px; + border: 1px solid @color-primary-light; + } + } + } + .credit-section-title { + position: relative; + padding-left: 12px; + font-size: @font-size-primary; + line-height: 44px; + color: @color-text-primary; + font-weight: normal; + &:after { + .setBottomLine(@color-divider-regular); + } + } + .discount-box { + box-sizing: border-box; + padding: 4px 12px; + div { + width: 345px; + line-height: 24px; + display: flex; + i { + width: 18px; + } + span { + flex: 1; + padding-left: 6px; + padding-top: 1px; + font-size: @font-size-medium; + color: @color-text-primary; + } + } + } + .basic { + .basic-box { + box-sizing: border-box; + padding: 4px 12px; + .basic-item { + .flexLayout(flex-start, flex-start, row); + margin: 2px 0; + div { + &:first-child { + width: 60px; + margin-right: 12px; + font-size: @font-size-medium; + color: @color-text-third; + } + &:last-child { + flex: 1; + font-size: @font-size-medium; + color: @color-text-primary; + } + } + } + } + } + .cost { + .cost-box { + box-sizing: border-box; + padding: 4px 12px; + .cost-item { + .flexLayout(flex-start, flex-start, row); + margin: 2px 0; + div { + &:first-child { + width: 60px; + margin-right: 12px; + font-size: @font-size-medium; + color: @color-text-third; + } + &:last-child { + flex: 1; + font-size: @font-size-medium; + color: @color-text-primary; + } + } + } + } + } + .tips { + font-size: @font-size-small; + color: @color-text-third; + background-color: @color-background-default; + text-align: center; + padding: 5px 0 2px; + } + .f-space-large { + background: @color-background-default; + } + .btn { + position: fixed; + bottom: 0; + z-index: 9; + width: 100%; + } + } + + @media only screen + and ( min-device-width: 320Px ) + and ( max-device-width: 320Px ) + and ( -webkit-min-device-pixel-ratio: 1 ) + and ( orientation: portrait ) { + .credit-detail { + .discount-box { + box-sizing: border-box; + padding: 4px 12px; + div { + width: 304px; + line-height: 24px; + i { + margin-right: 6px; + } + span { + font-size: @font-size-medium; + color: @color-text-primary; + } + } + } + } + + } +</style> diff --git a/src/views/loan/creditLoan.vue b/src/views/loan/creditLoan.vue new file mode 100644 index 0000000..55653df --- /dev/null +++ b/src/views/loan/creditLoan.vue @@ -0,0 +1,104 @@ +<template> + <div> + <CardList :prodList="prodList" :showNone="showNone" @on-click-prodItem="handleProductJump"></CardList> + <!--<divider v-show="prodList.length">我们也是有底线的</divider>--> + </div> +</template> + +<script> +/** + * Created by c.y on 2018/3/22. + * 贷款--信用卡贷款 + */ +import CardList from '../../components/CardList.vue'; +import systemApi from '../../api/api'; +import statusCodeManage from '../../api/statusCodeManage'; +import { Divider } from 'vux'; +export default { + name: 'f-credit-loan', + data() { + return { + prodList: [], // 产品列表 + showNone: false //产品列表空白页 + }; + }, + components: { + CardList, + Divider + }, + methods: { + // 处理产品跳转 + handleProductJump(item) { + // 极速贷款或者银行卡 + if ( + item.productType === 40000005 || + item.productType === 40000006 + ) { + this.$router.push({ + path: '/f-loan-detail', + query: { + id: item.prodId + } + }); + // 信用卡 + } else if (item.productType === 40000007) { + this.$router.push({ + path: '/f-credit-detail', + query: { + id: item.prodId + } + }); + } + }, + // 获取Attr的列表, prodElements产品组件的元素列表 + getAttrList(prodElements) { + // 获取用户修改的数据 + let attrList = []; + if (prodElements instanceof Array) { + prodElements.map(function(listItem) { + listItem.attrs.forEach(function(item) { + attrList.push(item.value); + }); + }); + } + return attrList; + }, + init() { + let _this = this; + let submitInfo = { + prodType: 40000007 // 信用卡 + }; + this.showNone = false; + systemApi.fetchProdTypeList(submitInfo).then( + res => { + _this.prodList = []; + + res.body.forEach(function(item) { + _this.prodList.push({ + prodId: item.unit.prodId, + content: _this.getAttrList(item.showEles), + productType: item.unit.prodType, + applyNumber: item.unit.showNum + }); + }); + if (!_this.prodList.length) _this.showNone = true; + }, + error => { + statusCodeManage.showTipOfStatusCode(error,_this); + } + ); + } + }, + activated() { + this.$store.commit('UPDATE_ACTIVE_TAB', { loanActiveTab: 2 }); + this.init(); + }, + deactivated() { + this.prodList = []; + } +}; +</script> + +<style lang="less"> + +</style> diff --git a/src/views/loan/index.vue b/src/views/loan/index.vue new file mode 100644 index 0000000..525ff95 --- /dev/null +++ b/src/views/loan/index.vue @@ -0,0 +1,118 @@ +<template> + <div> + <!--注意这里颜色,是颜色是字符串,主题替换时,需要注意--> + <div class="loan-home-tab"> + <tab class="f-loan-tab" bar-active-color="#fff000"> + <tab-item :selected="activeItem===0" @on-item-click="onItemClick"> + <span>极速贷款</span> + </tab-item> + <tab-item :selected="activeItem===1" @on-item-click="onItemClick"> + <span>银行贷款</span> + </tab-item> + <tab-item :selected="activeItem===2" @on-item-click="onItemClick"> + <span>信用卡</span> + </tab-item> + </tab> + </div> + <div class="loan-space"></div> + <!--贷款的tab的切换,view--> + <keep-alive> + <router-view></router-view> + </keep-alive> + <FSpace type="large"></FSpace> + <FFooter :index="1"></FFooter> + </div> +</template> + +<script> +/** + * Created by c.y on 2018/3/22. + * 贷款的首页 + */ +import { Tab, TabItem } from 'vux'; +import FFooter from '../../components/common/FFooter.vue'; +import FSpace from '../../components/common/FSpace.vue'; +export default { + name: 'f-loan', + data() { + return {}; + }, + components: { + Tab, + TabItem, + FFooter, + FSpace + }, + computed: { + activeItem() { + return this.$store.state.loanActiveTab; + } + }, + methods: { + // 点击tab的切换 + onItemClick(index) { + this.$store.commit('UPDATE_ACTIVE_TAB', { loanActiveTab: index }); + if (index === 0) { + this.$router.push({ + path: '/f-loan/f-speed' + }); + } else if (index === 1) { + this.$router.push({ + path: '/f-loan/f-bank' + }); + } else if (index === 2) { + this.$router.push({ + path: '/f-loan/f-credit' + }); + } + } + }, + activated: function() { + this.$store.commit('UPDATE_APP_STYLE', { + overflow: 'initial', + '-webkit-overflow-scrolling': 'initial' + }); + this.$store.commit('UPDATE_DIRECTION', {direction: 'none'}); + // 根据首页产品的tab的分类,选中相应的tab + if (this.$route.query.typeId) { + let activeTab = this.$route.query.typeId; + this.$store.commit('UPDATE_ACTIVE_TAB', { + loanActiveTab: activeTab + }); + } + } +}; +</script> + +<style lang="less"> +@import '../../style/mixin'; +.loan-home-tab { + position: fixed; + left: 0; + top: 0; + width: 100%; + height: 44px; + z-index: 1002; + .vux-tab { + .color-linear-gradient(@color-gradient-darkBlue-left, @color-gradient-darkBlue-right); + .vux-tab-item { + background: transparent; + span { + color: @color-white; + font-size: @font-size-large; + } + } + .vux-tab-item.vux-tab-selected { + span { + color: @color-text-placeholder-yellow; + } + } + .vux-tab-ink-bar { + height: 1px !important; + } + } +} +.loan-space { + height: 44px; +} +</style> diff --git a/src/views/loan/jobTypeLoan.vue b/src/views/loan/jobTypeLoan.vue new file mode 100644 index 0000000..caf75bc --- /dev/null +++ b/src/views/loan/jobTypeLoan.vue @@ -0,0 +1,482 @@ +<template> + <div class="jon-type-page" v-if="jobTypeInfo"> + <x-header :left-options.showBack="{backText: ''}" :title="jobTypeInfo.name" class="gradient-color"></x-header> + <!--筛选与列表板块--> + <div ref="stickyBox" class="filter-fixed"> + <FilterTab :filterTab="filterTab" @on-click-tab="handleFilterTab"></FilterTab> + <!--综合排序下拉列表--> + <div v-show="showFilterList" class="filter-list"> + <group gutter="0"> + <cell :title="item.content" :class="{'filter-active': item.active}" + @click.native="handleFilterCellClick(item)" v-for="(item,index) in filterList" + :key="index"></cell> + </group> + </div> + <div v-show="showFilterMoney" class="money-filter-list"> + <group gutter="0"> + <p v-bind:class="[{ 'active-money': activeMoney }, 'any-money']" @click="unlimitedAmount">不限金额</p> + <div class="money-box"> + <x-input + placeholder="请输入贷款金额" + @input.native="handleInputMoney" + :max="5" + :min="1" + :show-clear="false" + v-model.trim="money"> + <FButton slot="right" size="mini" text="确定" @click.native="handleAmount"></FButton> + </x-input> + <span class="unit">万元</span> + </div> + <p class="filter-tip">可输入贷款范围0.1-1000万元</p> + </group> + </div> + </div> + <div class="weui-mask" @click="handleClickMask" v-show="showFilterList || showFilterMoney"></div> + <!--产品列表--> + <FProdList :lists="prodList" :showNone="showNone" @on-click-prodItem="handleProductJump"></FProdList> + </div> +</template> + +<script> + /** + * Created by c.y on 2018/4/9. + * 银行卡贷款的--职业分类的列表 + */ + import FilterTab from '../../components/common/FilterTab.vue'; + import FSpace from '../../components/common/FSpace.vue'; + import FButton from '../../components/common/FButton.vue'; + import FProdList from '../../components/common/FProdList.vue'; + import systemApi from '../../api/api'; + import statusCodeManage from '../../api/statusCodeManage'; + import {XHeader, Group, Cell, XInput} from 'vux'; + + export default { + name: 'f-job-loan', + data() { + return { + pageTitle: '上班族', + showFilterList: false, // 显示筛选下拉 + showFilterMoney: false, // 显示金额输入的下拉 + activeMoney: false, // 金额的选择 + jobTypeInfo: null, // 产品分类信息 + filterFixed: false, // 是否固定 + scrolledTop: 0, + money: '', // 输入的金额 + filterTab: [ + { + isPullDown: true, + content: '不限金额', + pullDownActive: false, + activeTriangle: false + }, + { + isPullDown: true, + content: '不限期限', + pullDownActive: false, + activeTriangle: false + }, + {isPullDown: false, content: '热门', pullDownActive: false}, + {isPullDown: false, content: '利息低', pullDownActive: false} + ], + filterList: [ + {content: '不限期限', value: '', active: true}, + {content: '3个月', value: 3, active: false}, + {content: '6个月', value: 6, active: false}, + {content: '12个月', value: 12, active: false}, + {content: '2年', value: 24, active: false}, + {content: '3年', value: 36, active: false}, + {content: '5年', value: 60, active: false}, + {content: '10年', value: 120, active: false} + ], + prodList: [], // 产品列表 + showNone: false //产品空白页面 + }; + }, + methods: { + // 用户只能输入点与数字 + handleInputMoney () { + let _this = this; + setTimeout(function () { + if (_this.money) { + // 未超过字符的话,可以其他非要求字符转换为空字符串 + if(_this.money.length > 5) { + _this.money = _this.money.substring(0, 5); + } else { + _this.money = _this.money.replace(/[^\d.]/g, ''); + } + } + }, 50); + }, + // 处理产品跳转 + handleProductJump(item) { + // 极速贷款或者银行卡 + if ( + item.productType === 40000005 || + item.productType === 40000006 + ) { + this.$router.push({ + path: '/f-loan-detail', + query: { + id: item.prodId + } + }); + // 信用卡 + } else if (item.productType === 40000007) { + this.$router.push({ + path: '/credit-detail', + query: { + id: item.prodId + } + }); + } + }, + // 点击遮罩 + handleClickMask() { + // 如果下拉存在的话 + if (this.showFilterList || this.showFilterMoney) { + this.filterFixed = false; + this.showFilterList = false; + this.showFilterMoney = false; + this.filterTab[0].activeTriangle = false; + this.filterTab[1].activeTriangle = false; + this.money = ''; + } + }, + // 切换的tab + handleFilterTab(item, index) { + // 点击有下拉的话,那么就是进行定位,如果不是有下列的话,那么直接 + // 调接口,进行数据渲染 + if (item.isPullDown) { + // 当点击selectTab的时候,如果距离顶部的距离是小于152的话,大于44的话,那么 + // 那么就会,定位到tab的切换的下面.其他的情况下,不进行定位。 + if (index === 0) { + // 如果选择的是金额的话 + this.showFilterMoney = true; + this.showFilterList = false; + if (item.content === '不限金额') { + this.activeMoney = true; + } + } else { + // 不限期限的 + this.showFilterMoney = false; + this.showFilterList = true; + } + if (!item.pullDownActive) { + item.pullDownActive = true; + } + this.filterTab[index].activeTriangle = true; + } else { + // 热门即综合排序 + if (item.content === '热门') { + // 判断期限与金额是否选择了 + let submitInfo = {}; + if (this.filterTab[0].content !== '不限金额') { + submitInfo.money = this.money * 10000; + } + if (this.filterTab[1].content !== '不限期限') { + for (let i = 0; i < this.filterList.length; i++) { + if (this.filterList[i].active) { + submitInfo.limit = this.filterList[i].value; + } + } + } + this.init(submitInfo); + } else if (item.content === '利息低') { + let submitInfo = {}; + if (this.filterTab[0].content !== '不限金额') { + submitInfo.money = this.money * 10000; + } + if (this.filterTab[1].content !== '不限期限') { + for (let i = 0; i < this.filterList.length; i++) { + if (this.filterList[i].active) { + submitInfo.limit = this.filterList[i].value; + } + } + } + submitInfo.compareField = 'loanRate'; + this.init(submitInfo); + } + this.filterFixed = false; + this.showFilterList = false; + this.showFilterMoney = false; + this.filterTab[0].activeTriangle = false; + this.filterTab[1].activeTriangle = false; + // 如果是从点击有下拉的选项的话,并且滑动一定距离的话,再点击没有下拉的tab + // 会出现滑动到底部,此时需要把页面滑动顶部 + window.scrollTo(0, 0); + } + }, + // 点击期限传递的都是以月为单位 + handleFilterCellClick(filterItem) { + // 更新filter的值 + this.filterTab[1].content = filterItem.content; + // 进行筛选 + if (filterItem.content === '不限期限') { + if (this.filterTab[0].content !== '不限金额') { + this.init({money: this.money * 10000}); + } else { + this.init(); + } + } else if (filterItem.content.indexOf('月') !== -1) { + let limitMonth = parseInt(filterItem.content.slice(0, -2)); + if (this.filterTab[0].content !== '不限金额') { + this.init({money: this.money * 10000, limit: limitMonth}); + } else { + this.init({limit: limitMonth}); + } + } else if (filterItem.content.indexOf('年') !== -1) { + let limitYear = parseInt(filterItem.content.slice(0, -1)) * 12; + if (this.filterTab[0].content !== '不限金额') { + this.init({money: this.money * 10000, limit: limitYear}); + } else { + this.init({limit: limitYear}); + } + } + // 并更改其选中状态,并把其他的选择的状态清空 + this.filterList.forEach(function (item) { + item.content === filterItem.content + ? (item.active = true) + : (item.active = false); + }); + // 取消定位,以及下拉弹窗 + this.filterTab[1].activeTriangle = false; + this.showFilterList = false; + }, + // 不限金额的点击 + unlimitedAmount() { + this.init(); + this.filterTab[0].activeTriangle = false; + this.showFilterMoney = false; + this.filterFixed = false; + if (this.filterTab[0].content === '不限金额') { + return false; + } + // 选中tab + this.filterTab[0].content = '不限金额'; + // 并更改其选中状态,并把其他的选择的状态清空 + this.filterList.forEach(function (item) { + item.content === '不限金额' + ? (item.active = true) + : (item.active = false); + }); + }, + // 输入金额点击确定 + handleAmount() { + let reg = /(^[1-9]\d{0,4}$)|(^\d\.\d{1,3}$)|(^[1-9]\d\.\d{1,2}$)|(^[1-9]\d{2}\.\d{1}$)/; + if (!reg.test(this.money) || this.money > 1000 || this.money < 0.1) { + this.$vux.toast.text('请输入有效的金额', 'middle'); + return false; + } + // 如果通过话的 + this.filterTab[0].content = this.money + '万元'; + for (let i = 0; i < this.filterList.length; i++) { + if (this.filterList[i].active) { + if (this.filterList[i].content === '不限期限') { + this.init({money: this.money * 10000}); + } else { + this.init({ + money: this.money * 10000, + limit: this.filterList[i].value + }); + } + } + } + this.filterTab[0].activeTriangle = false; + this.showFilterMoney = false; + }, + // 获取Attr的列表, prodElements产品组件的元素列表 + getAttrList(prodElements) { + // 获取用户修改的数据 + let attrList = []; + if (prodElements instanceof Array) { + prodElements.map(function (listItem) { + listItem.attrs.forEach(function (item) { + attrList.push(item.value); + }); + }); + } + return attrList; + }, + init(filterCond = null) { + let _this = this; + let submitInfo = { + prodType: 40000006, // 银行贷款 + suitable: this.$route.query.type // 职业分类 + }; + if (filterCond) { + submitInfo = Object.assign(submitInfo, filterCond); + } + this.showNone = false; + systemApi.fetchProdTypeList(submitInfo).then( + res => { + _this.prodList = []; + res.body.forEach(function (item) { + _this.prodList.push({ + prodId: item.unit.prodId, + content: _this.getAttrList(item.showEles), + productType: item.unit.prodType, + applyNumber: item.unit.showNumPrefix + item.unit.showNum + }); + }); + if (!_this.prodList.length) _this.showNone = true; + }, + error => { + statusCodeManage.showTipOfStatusCode(error,_this); + } + ); + }, + getBankLoanType(code) { + let _this = this; + systemApi.fetchQuestionAndTypeList().then( + response => { + for (let i = 0; i < response.bankLoanType.length; i++) { + if (response.bankLoanType[i].code === code) { + _this.jobTypeInfo = response.bankLoanType[i]; + } + } + }, + error => { + statusCodeManage.showTipOfStatusCode(error,_this); + } + ); + } + }, + components: { + FilterTab, + FSpace, + FProdList, + Group, + Cell, + XInput, + FButton, + XHeader + }, + activated() { + this.$store.commit('UPDATE_APP_STYLE', { + overflow: 'initial', + '-webkit-overflow-scrolling': 'initial' + }); + this.getBankLoanType(this.$route.query.type); + this.init(); + }, + deactivated() { + this.jobTypeInfo = null; + this.prodList = []; + this.showFilterList = false; + this.showFilterMoney = false; + this.filterFixed = false; + this.activeMoney = false; + this.filterTab = [ + {isPullDown: true, content: '不限金额', pullDownActive: false}, + {isPullDown: true, content: '不限期限', pullDownActive: false}, + {isPullDown: false, content: '热门', pullDownActive: false}, + {isPullDown: false, content: '利息低', pullDownActive: false} + ]; + } + }; +</script> + +<style lang="less"> + @import '../../style/mixin'; + + .jon-type-page { + .vux-header { + position: fixed; + left: 0; + top: 0; + width: 100%; + z-index: 1002; + } + .vux-header { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + .vux-header-title { + font-size: 18px; + } + .vux-header-left { + .left-arrow:before { + border: solid 1px @color-white; + border-width: 2px 0 0 2px; + } + } + } + .weui-cells { + &:before { + height: 0; + border-top: 0; + } + } + .vux-x-input { + &:before { + height: 0; + border-top: 0; + } + } + .vux-label { + font-size: @font-size-base; + } + .money-box { + position: relative; + .unit { + position: absolute; + left: 64%; + top: 0; + height: 30px; + line-height: 30px; + font-size: @font-size-medium; + } + } + .speed-sticky-box { + height: 44px; + } + .speed-filter { + width: 100%; + height: 32px; + } + .weui-mask { + z-index: 1001; + } + .filter-fixed { + position: fixed; + left: 0; + top: 44px; + width: 100%; + z-index: 1002; + } + .money-filter-list { + width: 100%; + background: @color-white; + .weui-cell__bd { + border: 1px solid @color-divider-regular; + border-radius: @border-radius-normal-size; + } + .weui-input { + padding-left: 14px; + font-size: @font-size-medium; + height: 30px; + line-height: 30px; + } + .vux-x-input { + padding: 0 15px; + } + .f-button { + margin-left: 10px; + } + .any-money { + padding: 10px 15px; + font-size: @font-size-base; + color: @color-text-primary; + } + .active-money { + color: @color-primary; + } + .filter-tip { + padding: 10px 15px; + font-size: @font-size-small; + color: @color-text-third; + } + } + .prod-list-component { + padding-top: 78px; + } + } +</style> diff --git a/src/views/loan/loanDetail.vue b/src/views/loan/loanDetail.vue new file mode 100644 index 0000000..aa06074 --- /dev/null +++ b/src/views/loan/loanDetail.vue @@ -0,0 +1,1032 @@ +<template> + <div class="loan-detail" v-if="needProdInfo.length>=1"> + <x-header :left-options="{backText: '', preventGoBack: true}" @on-click-back="goBackPage">{{ + needProdInfo[0].name}} + + </x-header> + <!--产品的基本介绍--> + <div class="prod-intro"> + <div class="logo"> + <img :src="needProdInfo[0].attrs[0]"> + </div> + <div class="prod-info"> + <div class="prod-title"> + {{ needProdInfo[0].attrs[1] }} + <span v-if="needProdInfo[0].attrs[2]" class="prod-tag">{{ needProdInfo[0].attrs[2]}}</span> + </div> + <div class="loan-time">{{ needProdInfo[0].attrs[3] }}</div> + <div class="loan-persons">{{ prodDetailInfo.unit.showNumPrefix + prodDetailInfo.unit.showNum }}</div> + </div> + </div> + <!--chart图表的上面的输入框--> + <div class="calc-form"> + <group class="amount"> + <x-input title="金额" novalidate text-align="right" @input.native="handleInputMoney" :max="5" + :show-clear="false" v-model="money" @on-blur="numChange"> + </x-input> + </group> + <group class="deadLine"> + <selector title="期限" :options="termRangeList" v-model="loanTerm" @on-change="monChange"></selector> + </group> + </div> + <!--chart的图表计算--> + <div class="loan-scope"> + <div>额度范围: + <span>{{ loanAmtRange }}</span> + </div> + <div>期限范围: + <span>{{ loanTermRange }}</span> + </div> + </div> + <div class="charts"> + <div class="chart-box"> + <div class="animate" id="main"></div> + <div class="monPayment">{{ timeLimitUnit }}供<br/>{{ monPayment }}元</div> + </div> + <div class="charts-info"> + <div>贷款:{{ showMoney }}万元/{{ showLoanTerm }}{{ timeLimitUnit | chartMonth }}</div> + <div>利息:{{ showInterest }}元({{ accMulti(showInterestRate, 100)}}%/{{ timeLimitUnit }})</div> + <div>服务费:{{ showServerMon }}</div> + </div> + </div> + <!--利率详情的点击按钮,展示详情--> + <div class="show-hide" v-show="!showRateDetail" @click="handleExpandClick"> + {{ needProdInfo[1].name}} + <i class="iconfont icon-unfold"></i> + </div> + <!--利率详情的展示内容--> + <div v-show="showRateDetail"> + <!--利率说明--> + <div class="interest-rate"> + <p class="words-title">{{ needProdInfo[2].name }}</p> + <img class="auditInfo" :src="needProdInfo[2].attrs[0]"> + </div> + <!--提前还款--> + <div class="prepayment" v-if="needProdInfo[3].attrs[0]"> + <p class="words-title">{{ needProdInfo[3].name }}</p> + <div class="words-content">{{ needProdInfo[3].attrs[0] }}</div> + </div> + <!--几种费用的区别,这个是固定的,在最后的--> + <div class="difference"> + <p class="words-title">{{ needProdInfo[4].name }}</p> + <div class="words-content"> + <p v-for="(item,index) in needProdInfo[4].attrs" :key="item">{{ item }}</p> + </div> + </div> + </div> + <!--利率详情的收起按钮--> + <div class="show-hide" @click="handleCollapseClick" v-show="showRateDetail">收起 + <i class="iconfont icon-fold"></i> + </div> + <FSpace type="small"></FSpace> + <!--申请条件,所学材料,其他说明--> + <div class="loan-swiper-box"> + <tab class="loan-detail-tab" active-color="#0092f1" :line-width="2" v-model="swiperIndex" + custom-bar-width="64px" bar-active-color="#0092f1"> + <tab-item v-for="(item,index) in swiperList" + v-if="item.attrs.length && item.attrs[0].info!==''" + :key="index" + :selected="'申请条件' === item">{{ item.name }} + </tab-item> + </tab> + <swiper v-model="swiperIndex" :show-dots="false"> + <swiper-item> + <p class="swiper-item-content" v-for="(i, index) in swiperList[0].attrs"> + <span>{{ i.title }}</span> + <span>{{ i.info }}</span> + </p> + </swiper-item> + <swiper-item> + <p class="swiper-item-content" v-for="(a, index) in swiperList[1].attrs"> + <label>{{ a.info }}</label><br/> + </p> + </swiper-item> + <swiper-item v-if="swiperList[2].attrs.length && swiperList[2].attrs[0].info!==''"> + <p class="swiper-item-content" v-for="(b, index) in swiperList[2].attrs"> + <span>{{ b.info }}</span> + </p> + </swiper-item> + </swiper> + </div> + <FSpace type="small"></FSpace> + <!--申请攻略--> + <div class="apply-intro" v-if="needProdInfo[8].attrs[0]!=null"> + <p class="words-title vux-1px-b">{{ needProdInfo[8].name }}</p> + <img class="apply-intro-img" @click="handleApplyRaiders(needProdInfo[8].attrs[0])" + :src="needProdInfo[8].attrs[1]"> + </div> + <!--为你优选--> + <div class="more-prod" v-if="pushProdList.length"> + <p class="words-title vux-1px-b">为你优选</p> + <FProdList :lists="pushProdList" :showNone="showNone" @on-click-prodItem="handleProductJump"></FProdList> + </div> + <!--立即申请--> + <FButton :isBorderRadius="false" @on-click-button="handleApplyJump" :text="buttonMsg" class="btn"> + <div slot="sbIphoneX" class="sbIphoneX"></div> + </FButton> + <FSpace type="large"></FSpace> + </div> +</template> + +<script> + /** + * Created by 吴彦祖 on 2018/3/22. + * 贷款详情 + */ + import { + XHeader, + Group, + XInput, + Selector, + Tab, + TabItem, + Swiper, + SwiperItem + } from 'vux'; + import FSpace from '../../components/common/FSpace'; + import FProdList from '../../components/common/FProdList.vue'; + import FButton from '../../components/common/FButton.vue'; + import echarts from 'echarts'; + import systemApi from '../../api/api'; + import statusCodeManage from '../../api/statusCodeManage'; + import productJump from '../../tool/productRequestJump'; + import goBackCont from '../common/goBackControl'; + import pageBack from '../../tool/pageBackByAndroid'; + + export default { + name: 'f-loan-detail', + components: { + XHeader, + Group, + XInput, + Selector, + FSpace, + Tab, + TabItem, + Swiper, + SwiperItem, + FProdList, + FButton + }, + data() { + return { + charts: '', + isMark: false, + opinion: ['贷款', '利息'], + opinionData: [ + {value: 234, name: '利息'}, + {value: 1548, name: '贷款'} + ], + prodType: null, + prodDetailInfo: null, // 产品详情信息 + pushProductInfos: null, // 为你优选 + needProdInfo: [], // 组装后的产品详情信息 + swiperList: [], // 申请条件,所需条件,其他说明数据组装 + swiperIndex: 0, // swiper初始化选中的值 + pushProdList: [], // 组装后的为你优选列表 + showNone: false, //产品列表空白页 + loanTerm: '', // 贷款的期数 + showRateDetail: false, // 是否显示利率显示 + money: '', //用户输入的金额 + //用于显示图标旁边的贷款金额和贷款期限,不直接绑定输入框的值是防止用户在输入的时候动态的改变 + showMoney: '', //显示的金额 + showLoanTerm: '', //显示的期限 + showInterestRate: '', //显示的利率 + showInterest: '', //总利息 + showServerMon: '', //服务费 + monPayment: '', //月供 + buttonMsg: '立即申请', // 立即申请四个字由后台返回 + timeLimitUnit: '' //显示的事件单位 + }; + }, + filters: { + // 图表里面的贷款改成个月 + chartMonth(initVal) { + let monthIndex = initVal.indexOf('月'); + if (monthIndex !== -1) { + initVal = initVal.substring(0, monthIndex) + '个月'; + } + return initVal; + } + }, + computed: { + // 图表上面的额度范围 + loanAmtRange() { + let basic = 10000; + let mixLoanAmt = + this.prodDetailInfo.unit.mixLoanAmt / basic + '万-'; + let maxLoanAmt = this.prodDetailInfo.unit.maxLoanAmt / basic + '万'; + return mixLoanAmt + maxLoanAmt; + }, + // 图表上面的期限范围 + loanTermRange() { + let timeLimitList = this.prodDetailInfo.unit.timeLimitList; + let unit = ''; + this.prodDetailInfo.unit.timeLimitUnit === 1 + ? (unit = '天') + : (unit = '个月'); + return ( + timeLimitList[0] + + `${unit}-` + + timeLimitList[timeLimitList.length - 1] + + `${unit}` + ); + }, + // 期限的下拉列表 + termRangeList() { + let termList = []; + let unit = ''; + this.prodDetailInfo.unit.timeLimitUnit === 1 + ? (unit = '天') + : (unit = '个月'); + this.prodDetailInfo.unit.timeLimitList.forEach(function (item) { + termList.push({ + key: item, + value: item + unit + }); + }); + return termList; + } + }, + methods: { + goBackPage() { + goBackCont.goBackFun(this); + }, + accDivision(num1, num2) { + let baseNum1 = 0; + let baseNum2 = 0; + let baseNum3; + let baseNum4; + try { + baseNum1 = num1.toString().split('.')[1].length; + } catch (e) { + baseNum1 = 0; + } + try { + baseNum2 = num2.toString().split('.')[1].length; + } catch (e) { + baseNum2 = 0; + } + baseNum3 = Number(num1.toString().replace('.', '')); + baseNum4 = Number(num2.toString().replace('.', '')); + return baseNum3 / baseNum4 * Math.pow(10, baseNum2 - baseNum1); + }, + // 处理前端乘法的精度丢失的方法 + accMulti(arg1, arg2) { + let m = 0; + let s1 = arg1.toString(); + let s2 = arg2.toString(); + try { + m += s1.split('.')[1].length; + } catch (e) { + } + try { + m += s2.split('.')[1].length; + } catch (e) { + return ( + Number(s1.replace('.', '')) * + Number(s2.replace('.', '')) / + Math.pow(10, m) + ); + } + }, + // 申请攻略的跳转 + // 申请攻略的type为1为链接,type为2的话是图片 + // 申请攻略这四个字一定存在,但是showEles不一定存在可能为null + // 可能是图片+链接,或者只有图片没链接,或者没有图片和链接,不能是文字 + handleApplyRaiders(jumpLink) { + if (jumpLink) { + window.location.href = jumpLink; + } + return false; + }, + // 用户只能输入点与数字 + handleInputMoney() { + let _this = this; + setTimeout(function () { + if (_this.money) { + // 未超过字符的话,可以其他非要求字符转换为空字符串 + if (_this.money.length > 5) { + _this.money = _this.money.substring(0, 5); + } else { + _this.money = _this.money.replace(/[^\d.]/g, ''); + } + } + }, 50); + }, + // 处理产品跳转 + handleProductJump(item) { + // 极速贷款或者银行卡 + let _this = this; + if ( + item.productType === 40000005 || + item.productType === 40000006 + ) { + this.$router.push({ + path: '/f-loan-detail', + query: { + id: item.prodId, + t: new Date().getTime() + } + }); + // 如果是 当前页面 就是路由跳转后 重新去拉去数据 + _this.init(item.prodId); + // 信用卡 + } else if (item.productType === 40000007) { + this.$router.push({ + path: '/f-credit-detail', + query: { + id: item.prodId + } + }); + } + }, + drawCharts(id) { + this.charts = echarts.init(document.getElementById(id)); + this.charts.setOption({ + color: ['#ffa21f', '#ff4d53'], + tooltip: { + trigger: 'item', + formatter: '{a}<br/>{b}:{c} ({d}%)' + }, + legend: { + orient: 'vertical', + x: 'left', + data: this.opinion + }, + series: [ + { + type: 'pie', + radius: ['60%', '99%'], + avoidLabelOverlap: false, + hoverAnimation: false, + label: { + normal: { + show: false, + position: 'center' + }, + emphasis: { + show: false, + textStyle: { + fontSize: '30', + fontWeight: 'blod' + } + } + }, + labelLine: { + normal: { + show: false + } + }, + data: this.opinionData + } + ] + }); + }, + numChange() { + this.calculateFn(); + }, + //用户输入后的计算方法 + calculateFn() { + let reg = /^([1-9]\d{0,7}|0)(\.\d{1,3})?$/; + if (!reg.test(this.money)) { + this.$vux.toast.text('请输入正确的金额', 'middle'); + return; + } + if ( + Number(this.money) > + this.prodDetailInfo.unit.maxLoanAmt / 10000 || + Number(this.money) < this.prodDetailInfo.unit.mixLoanAmt / 10000 + ) { + this.$vux.toast.text('请输入额度范围内的金额!', 'middle'); + return; + } + //金额 + this.showMoney = this.money; + //期限 + this.showLoanTerm = this.loanTerm; + //总利息 + this.showInterest = Number( + ( + Number(this.money) * + 10000 * + Number(this.loanTerm) * + Number(this.showInterestRate) + ).toFixed(2) + ); + //图表中心显示的月供或日供 + this.monPayment = ( + (Number(this.money) * 10000 + Number(this.showInterest)) / + Number(this.loanTerm) + ).toFixed(); + let opinionData = [ + {value: this.showInterest, name: '利息'}, + {value: this.showMoney * 10000, name: '贷款'} + ]; + this.opinionData = JSON.parse(JSON.stringify(opinionData)); + this.$nextTick(() => { + this.drawCharts('main'); + }); + }, + monChange() { + this.calculateFn(); + }, + // 点击展示详情 + handleExpandClick() { + this.showRateDetail = true; + }, + // 点击收起详情 + handleCollapseClick() { + this.showRateDetail = false; + }, + // 立即申请按钮事件, 此时不需要弹窗点击跳转到登录或实名认证页面 + // 直接跳转到登录与实名认证的页面 + handleApplyJump() { + let sessionId = window.sessionStorage.getItem('newSid'); + let isRealName = parseInt( + window.sessionStorage.getItem('newClientState') + ); + let _this = this; + // 未登录,直接跳转到登录页面 + if (sessionId === null) { + window.sessionStorage.setItem( + 'newGoBackPage', + window.location.hash.split('#')[1] + ); + this.$router.push({name: 'f-login'}); + // 未实名,直接跳转到实名页面 + } else if (isRealName === 0) { + window.sessionStorage.setItem( + 'newGoBackPage', + window.location.hash.split('#')[1] + ); + this.$router.push({name: 'f-auth'}); + } else { + // 已登录与已实名 + let _prodId = _this.$route.query.id; + let _url = window.location.href; + let infoPage = _this.$route.fullPath; + _url = encodeURI(_url); + systemApi + .getVisitUrl({prodId: _prodId, redirectUrl: _url}) + .then( + response => { + productJump(response, _this, infoPage); + }, + error => { + statusCodeManage.showTipOfStatusCode(error, _this); + } + ); + } + }, + /** + * 标题与文字的组合,例如icon与文字,左边标题与文字的组合 + * @param attrList 属性列表 + * @param titleKey { String } 组合后的titleKey + * @param infoKey { String } 组合后的infoKey + * @return {Array} + */ + getCombList(attrList, titleKey, infoKey) { + let combList = []; + let titleList = []; + let infoList = []; + // index是奇数的话,那么就是标题,是偶数的话,那么就是文字的 + attrList.forEach(function (item, index) { + // 如果是偶数的话 + if (index % 2 === 0) { + titleList.push(item); + // 奇数的话 + } else { + infoList.push(item); + } + }); + titleList.forEach(function (item, index) { + combList.push({ + [titleKey]: item, + [infoKey]: infoList[index] + }); + }); + return combList; + }, + /** + * + * @param attrList + * @param titleKey + * @param infoKey + * @returns {Array} + */ + getCombListVal(attrList, titleKey, infoKey) { + let combList = []; + attrList.forEach(function (item, index) { + combList.push({ + [infoKey]: attrList[index] + }); + }); + return combList; + }, + // 申请条件,所需条件,其他说明数据组装 + assemblySwiperList(prodInfoList) { + let _this = this; + let swiperList = []; + prodInfoList.forEach(function (item, index) { + // key val 格式 + if (index === 5) { + swiperList.push({ + name: item.name, + attrs: _this.getCombList(item.attrs, 'title', 'info') + }); + } + // 只有 val 格式 + if (index === 6 || index === 7) { + swiperList.push({ + name: item.name, + attrs: _this.getCombListVal(item.attrs, 'title', 'info') + }); + } + }); + return swiperList; + }, + // 获取Attr的列表, prodElements产品组件的元素列表 + getAttrList(prodElements) { + // 获取用户修改的数据 + let attrList = []; + if (prodElements instanceof Array) { + prodElements.map(function (listItem) { + listItem.attrs.forEach(function (item) { + attrList.push(item.value); + }); + }); + } + return attrList; + }, + // 记录产品的点击次数 + productClickNumber(productId) { + let submitInfo = { + prodId: productId + }; + systemApi.fetchProdRec(submitInfo).then( + res => { + }, + error => { + statusCodeManage.showTipOfStatusCode(error, this); + } + ); + }, + // 初始化产品详情 + init(productId) { + let _this = this; + let submitInfo = { + prodId: productId + }; + systemApi.fetchProdDetail(submitInfo).then( + res => { + _this.prodType = res.body.prodDetailInfo.unit.prodType; + _this.$nextTick(function () { + _this.prodDetailInfo = res.body.prodDetailInfo; + _this.pushProductInfos = res.body.pushProductInfos; + // 立即申请的四个字 + _this.buttonMsg = res.body.buttonMsg; + // 一定要清空数据,不然页面缓存会导致数据没任何变化 + _this.needProdInfo = []; + if (_this.prodDetailInfo.unit.completeCost) { + this.showServerMon = '有'; + } else { + this.showServerMon = '无'; + } + // 组装产品详情需要的数据格式 + if (_this.prodDetailInfo.unit.timeLimitUnit === 1) { + _this.showInterestRate = + _this.accDivision( + _this.prodDetailInfo.unit.loanRate, + 30 + ) + ''; + // 由于js浮点数的精度问题,所以除法的时候,保留小数点户五位,百分百三位 + if (_this.showInterestRate.indexOf('.') !== -1) { + let dotIndex = _this.showInterestRate.indexOf( + '.' + ); + let lastIndex = + _this.showInterestRate.length - 1; + if (lastIndex - dotIndex > 5) { + let interLen = dotIndex + 6; + _this.showInterestRate = _this.showInterestRate.substring( + 0, + interLen + ); + } + } + _this.timeLimitUnit = '天'; + } else { + _this.showInterestRate = + _this.prodDetailInfo.unit.loanRate; + _this.timeLimitUnit = '月'; + } + _this.prodDetailInfo.components.forEach(function (item) { + _this.needProdInfo.push({ + name: item.name, + attrs: _this.getAttrList(item.showEles) + }); + }); + // 申请条件,所需条件,其他说明数据组装 + _this.swiperList = _this.assemblySwiperList( + _this.needProdInfo + ); + // 为你优选的数据的组装 + _this.pushProdList = []; + _this.pushProductInfos.forEach(function (item) { + _this.pushProdList.push({ + prodId: item.unit.prodId, + content: _this.getAttrList(item.showEles), + productType: item.unit.prodType, + applyNumber: + item.unit.showNumPrefix + item.unit.showNum + }); + }); + //为EACHERT给上默认值 + _this.money = _this.showMoney = + _this.prodDetailInfo.unit.mixLoanAmt / 10000; + //如果期限可选的有两个及以上,就采用第二个作为默认值,否则采用第一个 + if ( + _this.prodDetailInfo.unit.timeLimitList.length >= 2 + ) { + _this.loanTerm = _this.showLoanTerm = + _this.prodDetailInfo.unit.timeLimitList[1]; + } else { + _this.loanTerm = _this.showLoanTerm = + _this.prodDetailInfo.unit.timeLimitList[0]; + } + }); + }, + error => { + statusCodeManage.showTipOfStatusCode(error, _this); + } + ); + } + }, + activated: function () { + console.log('===========1================') + let _this = this; + this.$store.commit('UPDATE_DIRECTION', {direction: 'in'}); + this.swiperIndex = 0; + this.swiperList = []; + let productId = this.$route.query.id; + this.init(productId); + this.productClickNumber(productId); + this.showRateDetail = false; // 初始化的时候需要不显示 + window.backPageByAndroid = function (obj) { + // 如果是详情界面,就调用详情界面的返回方法 + goBackCont.goBackFun(_this); + }; + }, + deactivated: function () { + this.needProdInfo = []; + this.$store.commit('UPDATE_DIRECTION', {direction: 'none'}); + pageBack.androidBackBtn(); + }, + beforeRouteEnter(to, from, next) { + // 如果是从以下界面过来的,走逻辑返回,否则走正常返回 + goBackCont.gotoNext(to, from, next); + }, + beforeRouteUpdate(to, from, next) { + next(); // 主要就是这一步 这里通过router 参数的变化 强制刷新当前界面,并去获取数据 + } + }; +</script> + +<style lang="less"> + @import '../../style/mixin.less'; + + .weui-dialog__btn_primary { + color: @color-primary !important; + } + + .loan-detail { + position: relative; + background: @color-white; + .loan-detail-tab { + margin-bottom: 4px; + } + .vux-header { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + .vux-header-title { + font-size: 18px; + } + .vux-header-left { + .left-arrow:before { + border: solid 1px @color-white; + border-width: 2px 0 0 2px; + } + } + .vux-header-right { + color: @color-white !important; + } + } + .vux-slider > .vux-swiper > .vux-swiper-item { + overflow: auto; + } + .vux-swiper { + .flexLayout(flex-start, flex-start, row); + min-height: 190px !important; + height: auto !important; + .vux-swiper-item { + min-height: 190px !important; + /*height: auto !important;*/ + } + } + .swiper-item-content { + .flexLayout(flex-start, flex-start, row); + padding: 0 12px; + font-size: @font-size-medium; + color: @color-text-primary; + span { + line-height: 27px; + &:first-child { + margin-right: 10px; + font-size: @font-size-medium; + color: @color-text-third; + } + &:last-child { + flex: 1; + font-size: @font-size-medium; + color: @color-text-primary; + } + } + } + .words-title { + font-size: @font-size-medium; + color: @color-text-primary; + } + .words-content { + font-size: @font-size-small; + color: @color-text-third; + } + .prod-intro { + .flexLayout(flex-start, center, row); + margin: 20px 27px 0; + .logo { + width: 64px; + height: 64px; + border-radius: 7.5px; + overflow: hidden; + text-align: center; + img { + width: 64px; + height: 64px; + } + } + .prod-info { + margin-left: 15px; + .prod-title { + font-size: @font-size-medium; + /*margin-bottom:5px;*/ + .prod-tag { + color: @color-primary-light; + border: 1px solid @color-primary-light; + padding: 2px 2px 1px; + font-size: @font-size-tiny; + margin-left: 10px; + vertical-align: middle; + } + } + .loan-time, + .loan-persons { + margin-top: 3px; + font-size: @font-size-small; + color: @color-text-third; + } + } + } + .calc-form { + .flexLayout(space-between, center, row); + margin: 30px 27px 0; + .amount { + .weui-cell { + position: relative; + padding: 0; + &:after { + content: '万'; + font-size: @font-size-medium; + color: @color-text-primary; + position: absolute; + top: 7.5px; + right: 15px; + } + } + .weui-cells { + margin-top: 0; + &:before, + &:after { + border: none; + } + } + .weui-label { + font-size: @font-size-medium; + color: @color-text-primary; + } + .weui-input { + width: 100px; + height: 33px; + box-sizing: border-box; + padding-left: 15px; + color: @color-primary; + font-size: @font-size-medium; + text-align: right; + padding-right: 37px; + border: 1px solid @color-divider-regular; + border-radius: 7.5px; + } + } + .deadLine { + .weui-label { + font-size: @font-size-medium; + color: @color-text-primary; + } + .weui-cells { + margin-top: 0; + &:before, + &:after { + border: none; + } + } + .weui-label { + width: 40px; + } + .weui-select { + width: 100px; + height: 33px; + box-sizing: border-box; + color: @color-primary; + font-size: @font-size-medium; + border: 1px solid @color-divider-regular; + border-radius: 7.5px; + padding-left: 16px; + line-height: 32px; + } + } + } + .loan-scope { + .flexLayout(space-between, center, row); + margin: 9px 27px 0; + div { + font-size: @font-size-small; + color: @color-text-third; + span { + color: @color-text-placeholder-red; + } + } + } + .charts { + .flexLayout(space-between, center, row); + box-sizing: border-box; + margin-top: 33px; + .chart-box { + margin-left: 27px; + position: relative; + .animate { + width: 128px; + height: 128px; + background-color: transparent; + } + .monPayment { + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%, -50%); + font-size: @font-size-tiny; + color: @color-text-primary; + text-align: center; + } + } + .charts-info { + .flexLayout(space-between, flex-start, column); + box-sizing: border-box; + /*padding-left: 20px;*/ + font-size: @font-size-small; + color: @color-text-third; + div { + width: 190px; + text-align: left; + &:first-child { + &:before { + background-color: #ff4d53; + } + } + &:nth-child(2) { + margin: 20px 0; + &:before { + background-color: #ffa21f; + } + } + &:last-child { + &:before { + background-color: #21bddf; + } + } + &:before { + content: ''; + width: 8px; + height: 8px; + display: inline-block; + border-radius: 50%; + vertical-align: middle; + margin-right: 12px; + } + } + } + } + .interest-rate { + box-sizing: border-box; + margin-top: 19px; + padding: 0 12px; + .auditInfo { + width: 100%; + } + } + .prepayment { + box-sizing: border-box; + margin-top: 15px; + padding: 0 12px; + } + .difference { + box-sizing: border-box; + margin-top: 15px; + padding: 0 12px; + } + .show-hide { + margin: 12px 0; + text-align: center; + font-size: @font-size-medium; + color: @color-primary; + } + .tab-swiper { + height: 151px; + margin: 12px; + .flexLayout(space-between, flex-start, column); + p { + font-size: @font-size-medium; + color: @color-text-third; + } + } + .apply-intro { + p { + padding: 10px 12px; + font-size: @font-size-primary; + color: @color-text-primary; + } + div { + box-sizing: border-box; + padding: 12px; + div { + height: 80px; + background-color: @color-gradient-darkBlue-right; + } + } + .apply-intro-img { + width: 100%; + } + } + .more-prod { + p { + padding: 10px 12px; + font-size: @font-size-primary; + color: @color-text-primary; + } + } + .btn { + position: fixed; + bottom: 0; + height: 44px; + z-index: 10; + width: 100%; + } + .f-button { + margin: 0; + } + } + + @media only screen and (min-device-width: 320px) and (max-device-width: 320px) and (-webkit-min-device-pixel-ratio: 1) and (orientation: portrait) { + .loan-detail { + .prod-intro { + margin: 20px 12px 0 12px; + } + .calc-form { + .deadLine { + .weui-select { + width: 90px; + } + } + } + .charts { + .chart-box { + margin-left: 15px; + } + .charts-info { + padding-left: 5px; + div { + width: 170px; + } + } + } + } + } +</style> diff --git a/src/views/loan/raindrops.vue b/src/views/loan/raindrops.vue new file mode 100644 index 0000000..75d4b28 --- /dev/null +++ b/src/views/loan/raindrops.vue @@ -0,0 +1,125 @@ +<template> + <div class="raindrops"> + <x-header :left-options="{backText: '', preventGoBack: false}">信用等级 + </x-header> + <div class="bgbox"> + <img src="../../assets/img/bule.png" alt=""> + </div> + <div class="textBox"> + <div class="assd"> + <img src="../../assets/img/pope.png" alt=""> + </div> + <p class="level">您当前信用等级为:{{ level }}</p> + <p class='content'>您点击【申请】即视为您同意将您的个人信息及贷款申请信息传递、披露给贷款人,并同意将您引导至贷款人平台并自动注册为该平台用户</p> + <FButton @on-click-button="handelClick" style="width: 100%;">我知道了</FButton> + </div> + </div> +</template> +<script> + import {XHeader} from 'vux'; + import FButton from '../../components/common/FButton' + import api from '../../api/api'; + import statusCodeManage from '../../api/statusCodeManage'; + + export default { + components: { + XHeader, + FButton + }, + data() { + return { + level: '', + } + }, + methods: { + handelClick() { + let token = this.$route.query.token; + api.prodUrl({token}).then( + res => { + let url = decodeURIComponent(res.body); + window.location.href = url; + }, + err => { + statusCodeManage.showTipOfStatusCode(err, this); + } + ) + } + }, + activated() { + let lv = this.$route.query.credit; + let result = ''; + switch (lv) { + case '0': + result = '低级'; + break; + case '1': + result = '中级'; + break; + case '2': + result = '高级'; + break; + default: + break; + } + this.level = result; + } + } +</script> +<style lang="less"> + @import '../../style/mixin'; + + .raindrops { + background: linear-gradient(to left, #0092f1, #18bfff); + .bgbox { + width: 100%; + height: 100%; + position: relative; + } + + .bgbox > img { + width: 100%; + height: 100%; + } + + .textBox { + width: 94%; + height: 48%; + background-color: #ffffff; + border-radius: 7.5px; + position: absolute; + top: 41%; + left: 50%; + margin-left: -47%; + .level { + font-size: 18px; + color: #0092f1; + text-align: center; + padding: 3rem 0 2rem; + } + .content { + font-size: 14px; + color: #666666; + padding: 0 1rem 0rem; + } + } + + .assd { + width: 22%; + height: 27%; + position: absolute; + top: -18%; + left: 5px; + } + + .assd > img { + width: 100%; + height: 100%; + } + } + + @media only screen and (device-width: 375px) and (device-height: 812px) and (-webkit-device-pixel-ratio: 3) { + .textBox { + top: 35%; + } + } +</style> diff --git a/src/views/loan/speedLoan.vue b/src/views/loan/speedLoan.vue new file mode 100644 index 0000000..8ae9ef0 --- /dev/null +++ b/src/views/loan/speedLoan.vue @@ -0,0 +1,404 @@ +<template> + <div class="speed-loan-page"> + <swiper height="150px" dots-position="center" :auto="true" :loop="true" v-if="swiperList.length"> + <swiper-item v-for="(i, index) in swiperList" :key="index"> + <img :src="i.context" @click="bannerJump(i)"> + </swiper-item> + </swiper> + <!--筛选与列表板块--> + <div ref="point"></div> + <div ref="stickyBox" :class="[{ 'filter-fixed': filterFixed }, 'speed-filter']"> + <FilterTab :filterTab="filterTab" @on-click-tab="handleFilterTab"></FilterTab> + <!--综合排序下拉列表--> + <div v-show="showFilterList" class="filter-list"> + <group gutter="0"> + <cell :title="item.content" :class="{'filter-active': item.active}" @click.native="handleFilterCellClick(item)" v-for="(item,index) in filterList" :key="index"></cell> + </group> + </div> + </div> + <div class="weui-mask" v-show="showFilterList" @click="handleClickMask"></div> + <!--当没有banner,filter固定不占据文档流,此时在列表页面需要一个空白--> + <div class="filter-fixed-space" v-if="filterFixed"></div> + <!--产品列表--> + <FProdList :lists="prodList" :showNone="showNone" @on-click-prodItem="handleProductJump"></FProdList> + </div> +</template> + +<script> +/** + * Created by c.y on 2018/3/22. + * 贷款--极速贷款 + */ +import FilterTab from '../../components/common/FilterTab.vue'; +import FSpace from '../../components/common/FSpace.vue'; +import FProdList from '../../components/common/FProdList.vue'; +import { Swiper, SwiperItem, Group, Cell, throttle } from 'vux'; +import systemApi from '../../api/api'; +import statusCodeManage from '../../api/statusCodeManage'; +import pageBack from '../../tool/pageBackByAndroid'; + +export default { + name: 'f-speed-loan', + data() { + return { + showFilterList: false, // 显示筛选下拉 + scrolledTop: 0, + swiperList: [], // banner + filterTab: [ + { + isPullDown: true, + content: '综合排序', + pullDownActive: false, + activeTriangle: false + }, + { isPullDown: false, content: '易通过', pullDownActive: false}, + { isPullDown: false, content: '利息低', pullDownActive: false} + ], + filterFixed: false, + filterList: [ + { content: '综合排序', active: true }, + { content: '放款快', active: false }, + { content: '额度从高到低', active: false }, + { content: '额度从低到高', active: false } + ], + prodList: [], // 产品列表 + showNone: false //产品列表空白页 + }; + }, + methods: { + bannerJump(item){ + switch (item.type) { + case 1: + //跳转到对应的导航页面 + this.$router.push({path: item.detailContent}); + break; + case 2: + //跳转到对应的贷款分类 + this.$router.push({path: item.detailContent}); + break; + case 3: + //跳转到贷款详情,需要产品ID + if (item.prodTypeId === 40000005) { + this.$router.push({path: '/f-loan-detail', query: {id: item.detailContent}}); + } else if (item.prodTypeId === 40000006) { + this.$router.push({path: '/f-loan-detail', query: {id: item.detailContent}}); + } else if (item.prodTypeId === 40000007) { + this.$router.push({path: '/f-credit-detail', query: {id: item.detailContent}}); + } + break; + case 4: + //第三方页面 + window.location.href = item.detailContent; + break; + case 5: + //什么都不做 + break; + case 6: + //资讯 + this.$router.push({path: '/f-news-detail',query:{id:item.detailContent}}); + break; + default: + break; + } + }, + // 点击遮罩 + handleClickMask() { + // 如果下拉存在的话 + if (this.showFilterList) { + // 如果有banner的话,才取消定位 + if (this.swiperList.length) { + this.filterFixed = false; + } + this.showFilterList = false; + this.filterTab[0].activeTriangle = false; + // 点击遮罩时候,拉取数据 + this.handleFilterCellClick({content: this.filterTab[0].content}); + } + }, + // 处理产品跳转 + handleProductJump(item) { + // 极速贷款或者银行卡 + if ( + item.productType === 40000005 || + item.productType === 40000006 + ) { + this.$router.push({ + path: '/f-loan-detail', + query: { + id: item.prodId + } + }); + // 信用卡 + } else if (item.productType === 40000007) { + this.$router.push({ + path: '/f-credit-detail', + query: { + id: item.prodId + } + }); + } + }, + // 切换的tab + handleFilterTab(item) { + // 把显示空状态的取消掉 + this.showNone = false; + // 点击有下拉的话,那么就是进行定位,如果不是有下列的话,那么直接 调接口,进行数据渲染 + if (item.isPullDown) { + // 有banner的话才固定,其他时候不需要固定,因为本来就是固定的 + if (this.swiperList.length) { + this.filterFixed = true; + } + // 列表展开时,才有箭头 + this.filterTab[0].activeTriangle = true; + this.showFilterList = true; + } else { + if (item.content === '易通过') { + this.init({ compareField: 'passCoeff', desc: true }, this.callBack); + } else if (item.content === '利息低') { + this.init({ compareField: 'loanRate' }, this.callBack); + } + // 综合排序恢复原状 + this.filterTab[0].activeTriangle = false; + this.filterTab[0].content = '综合排序'; + // 并更改其选中状态,并把其他的选择的状态清空 + this.filterList.forEach(function(item) { + item.content === '综合排序' + ? (item.active = true) + : (item.active = false); + }); + this.showFilterList = false; + // 如果是从点击有下拉的选项的话,并且滑动一定距离的话,再点击没有下拉的tab + // 会出现滑动到底部,此时需要把页面滑动顶部 + window.scrollTo(0, 0); + } + }, + // 点击filter弹出的下拉列表 + handleFilterCellClick(filterItem) { + // 更新filter的值 + this.filterTab[0].content = filterItem.content; + // 进行筛选 + if (filterItem.content === '综合排序') { + this.init(null, this.callBack); + } else if (filterItem.content === '额度从高到低') { + this.init( + { desc: true, compareField: 'maxLoanAmt' }, + this.callBack + ); + } else if (filterItem.content === '额度从低到高') { + this.init( + { desc: false, compareField: 'maxLoanAmt' }, + this.callBack + ); + } else if (filterItem.content === '放款快') { + this.init({ compareField: 'loanDays' }, this.callBack); + } + // 并更改其选中状态,并把其他的选择的状态清空 + this.filterList.forEach(function(item) { + item.content === filterItem.content + ? (item.active = true) + : (item.active = false); + }); + this.filterTab[0].activeTriangle = false; + if (this.swiperList.length) { + // 取消定位,以及下拉弹窗 + this.filterFixed = false; + } + this.showFilterList = false; + }, + // 获取Attr的列表, prodElements产品组件的元素列表 + getAttrList(prodElements) { + // 获取用户修改的数据 + let attrList = []; + if (prodElements instanceof Array) { + prodElements.map(function(listItem) { + listItem.attrs.forEach(function(item) { + attrList.push(item.value); + }); + }); + } + return attrList; + }, + // 页面的初始化 + init(filterCond = null, callBack) { + let _this = this; + let submitInfo = { + prodType: 40000005 // 极速贷款 + }; + if (filterCond) { + submitInfo = Object.assign(submitInfo, filterCond); + } + this.showNone = false; + systemApi.fetchProdTypeList(submitInfo).then( + res => { + _this.prodList = []; + res.body.forEach(function(item) { + _this.prodList.push({ + prodId: item.unit.prodId, + content: _this.getAttrList(item.showEles), + productType: item.unit.prodType, + applyNumber: + item.unit.showNumPrefix + item.unit.showNum + }); + }); + if (_this.prodList.length && _this.prodList.length >= 1) { + _this.showNone = false; + } else { + _this.showNone = true; + } + if (callBack) { + callBack(); + } + }, + error => { + statusCodeManage.showTipOfStatusCode(error,_this); + } + ); + }, + callBack() { + let dom = this.$refs.point; + let scrollTop = dom.offsetTop; + this.$nextTick(function () { + window.scrollTo(0, scrollTop - 44); + }); + }, + // 处理滚动 + handleScroll() { + let _this = this; + if (!this.showFilterList) { + window.scrollY > 182 + ? (_this.filterFixed = true) + : (_this.filterFixed = false); + } + }, + // 获取banner + fetchBannerList() { + let _this = this; + systemApi.fetchProdBanner({ place: 3 }).then( + res => { + _this.$nextTick(() => { + _this.swiperList = res.body; + // 如果有banner的话,才执行滚动事件,不然filter本来就是固定的 + if (_this.swiperList.length) { + // window的滑动事件的监听 + window.addEventListener( + 'scroll', + throttle(_this.handleScroll, 50), + false + ); + } else { + _this.filterFixed = true; + } + }); + }, + err => { + statusCodeManage.showTipOfStatusCode(err,_this); + } + ); + } + }, + components: { + FilterTab, + FSpace, + FProdList, + Swiper, + SwiperItem, + Group, + Cell + }, + activated() { + this.$store.commit('UPDATE_ACTIVE_TAB', { loanActiveTab: 0 }); + this.showFilterList = false; + this.scrolledTop = 0; + this.swiperList = []; + this.filterTab = [ + { + isPullDown: true, + content: '综合排序', + pullDownActive: false, + activeTriangle: false + }, + { isPullDown: false, content: '易通过', pullDownActive: false}, + { isPullDown: false, content: '利息低', pullDownActive: false} + ]; + this.filterFixed = false; + this.filterList = [ + { content: '综合排序', active: true }, + { content: '放款快', active: false }, + { content: '额度从高到低', active: false }, + { content: '额度从低到高', active: false } + ]; + this.prodList = []; + this.showNone = false; + this.init(null, null); + this.fetchBannerList(); + } +}; +</script> + +<style lang="less"> +.speed-loan-page { + @import '../../style/mixin.less'; + .vux-header { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + .vux-header-title { + font-size: 18px; + } + .vux-header-left { + .left-arrow:before { + border: solid 1px @color-white; + border-width: 2px 0 0 2px; + } + } + .vux-header-right { + color: @color-white !important; + } + } + .filter-fixed-space { + height: 32px; + } + .vux-label { + font-size: @font-size-base; + } + .speed-sticky-box { + height: 44px; + } + .speed-filter { + width: 100%; + height: 32px; + } + .weui-mask { + z-index: 1001; + } + .filter-fixed { + position: fixed; + left: 0; + top: 44px; + z-index: 1002; + } + .filter-list { + width: 100%; + background: @color-white; + .filter-active { + color: @color-primary; + } + } + .vux-indicator{ + a{ + .active{ + background-color: #fff !important; + } + } + } + .vux-swiper-item { + img { + width: 100%; + height: 150px; + } + } + .vux-icon-dot { + width: 5px !important; + height: 5px !important; + border-radius: 50%; + } +} +</style> diff --git a/src/views/mine/applyRecord.vue b/src/views/mine/applyRecord.vue new file mode 100644 index 0000000..8b253ee --- /dev/null +++ b/src/views/mine/applyRecord.vue @@ -0,0 +1,179 @@ +<template> + <!--申请记录--> + <div class="apply-record"> + <x-header :left-options.showBack="{backText: ''}" :title="'申请记录'" class="gradient-color"></x-header> + <div class="tips">平台仅记录您的点击行为,实际申请和审核结果请以产品显示结果为准</div> + <scroller lock-x height="-100px" :scrollbar-y=false ref="scroller" @on-pulldown-loading="refresh" :pulldown-config="pulldownConfig" use-pulldown> + <FProdList :gutter="true" :lists="prodList" :showNone="showNone" @on-click-prodItem="handleProductJump"></FProdList> + </scroller> + <FSpace type="large"></FSpace> + </div> +</template> + +<script> +import { XHeader, Scroller } from 'vux'; +import FProdList from '../../components/common/FProdList.vue'; +import FSpace from '../../components/common/FSpace.vue'; +import systemApi from '../../api/api'; +import statusCodeManage from '../../api/statusCodeManage'; +/** + * Created by 吴彦祖 on 2018/3/30. + * 我的--申请记录 + */ +export default { + name: 'f-apply-record', + data() { + return { + prodList: [], + showNone: false, + pulldownConfig: { + content: '下拉刷新', + height: 40, + autoRefresh: false, + downContent: '释放刷新', + upContent: '释放刷新', + loadingContent: '加载中...' + } + }; + }, + components: { + FProdList, + XHeader, + Scroller, + FSpace + }, + methods: { + //下拉加载 + refresh() { + let _this = this; + systemApi.fetchApplyRecord().then( + res => { + this.prodList = []; + res.body.forEach(item => { + this.prodList.push({ + prodId: item.productListInfo.unit.prodId, + content: this.getAttrList( + item.productListInfo.showEles + ), + applyNumber: + item.productListInfo.unit.showNumPrefix + + item.productListInfo.unit.showNum, + applyTime: item.applyTime, + productType: item.productListInfo.unit.prodType + }); + }); + if (!_this.prodList.length) { + _this.showNone = true; + } + this.$nextTick(() => { + this.$refs.scroller.reset(); + this.$refs.scroller.donePulldown(); + }); + }, + error => { + this.$refs.scroller.reset(); + statusCodeManage.showTipOfStatusCode(error, _this); + } + ); + }, + // 处理产品跳转 + handleProductJump(item) { + // 极速贷款或者银行卡 + if ( + item.productType === 40000005 || + item.productType === 40000006 + ) { + this.$router.push({ + path: '/f-loan-detail', + query: { + id: item.prodId + } + }); + // 信用卡 + } else if (item.productType === 40000007) { + this.$router.push({ + path: '/f-credit-detail', + query: { + id: item.prodId + } + }); + } + }, + // 获取Attr的列表, prodElements产品组件的元素列表 + getAttrList(prodElements) { + // 获取用户修改的数据 + let attrList = []; + if (prodElements instanceof Array) { + prodElements.map(function(listItem) { + listItem.attrs.forEach(function(item) { + attrList.push(item.value); + }); + }); + } + return attrList; + }, + // 初始化 + init() { + let _this = this; + systemApi.fetchApplyRecord().then( + res => { + _this.prodList = []; + res.body.forEach(function(item) { + _this.prodList.push({ + prodId: item.productListInfo.unit.prodId, + content: _this.getAttrList( + item.productListInfo.showEles + ), + applyNumber: + item.productListInfo.unit.showNumPrefix + + item.productListInfo.unit.showNum, + applyTime: item.applyTime, + productType: item.productListInfo.unit.prodType + }); + }); + if (!_this.prodList.length) { + _this.showNone = true; + } + }, + error => { + // _this.$refs.scroller.donePulldown(); + statusCodeManage.showTipOfStatusCode(error, _this); + } + ); + } + }, + activated() { + this.init(); + }, + deactivated() { + this.prodList = []; + this.showNone = false; + } +}; +</script> + +<style lang="less"> +@import '../../style/mixin.less'; + +.apply-record { + .vux-header { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + .vux-header-title { + font-size: 18px; + } + .vux-header-left { + .left-arrow:before { + border: solid 1px @color-white; + border-width: 2px 0 0 2px; + } + } + } + .tips { + padding: 4px 13px; + box-sizing: border-box; + background-color: @color-background-default; + font-size: @font-size-small; + color: @color-text-third; + } +} +</style> diff --git a/src/views/mine/auth.vue b/src/views/mine/auth.vue new file mode 100644 index 0000000..11fdc9d --- /dev/null +++ b/src/views/mine/auth.vue @@ -0,0 +1,340 @@ +<template> + <div class="auth-page"> + <x-header :left-options.showBack="{backText: ''}" :title="'实名认证'"></x-header> + <div class="tips">请确保录入本人真实信息,否则将影响您的贷款申请</div> + <div class="icon-box"> + <svg class="icon" aria-hidden="true"> + <use xlink:href="#icon-identification"></use> + </svg> + <!--<i class="iconfont icon-index-evaluation1"></i>--> + </div> + <Group :label-width="'100px'"> + <x-input title="手机号" v-model="userInfo.phoneNum" placeholder="" :min="11" :max="11" :novalidate="true" readonly></x-input> + <x-input title="姓名" v-model="userInfo.userName" :max="10" required show-clear :novalidate="true" :readonly="!showChangeBtn" placeholder="请填写本人真实姓名"></x-input> + <x-input title="身份证号" + v-model="userInfo.idCard" + :max="18" + required + @input.native="handleInputIdCard" + :readonly="!showChangeBtn" + :novalidate="true" show-clear placeholder="请填写本人身份证号"></x-input> + </Group> + <div v-if="canModify" class="changeInfo"> + <span @click="changeBut">修改信息</span> + </div> + <div class="auth-button"> + <XButton v-show="showChangeBtn" text="认证" class="btn" @click.native="clickBut"></XButton> + </div> + <div class="auth-block" v-show="!showChangeBtn" style="height: 44px;margin-top: 48px;"></div> + <p class="notice"> + <i class="iconfont icon-my-identification-fill"></i> + <span>实名信息仅用于验证身份,我们将严格保密</span> + </p> + <!--Confirm弹窗--> + <confirm v-model="showConfirm" :title="'提示'" @on-confirm="onConfirm"> + <p style="text-align:center;">仅允许修改一次实名信息<br/>是否确认修改?</p> + </confirm> + <!--认证通过--> + <div class="passStatus" :class="{showAnimation:showAnimation}" v-show='showPass'> + <img src="../../assets/img/pass.png"> + </div> + </div> +</template> +<script> + /** + * Created by 吴彦祖 on 2018/3/22. + * 我的--实名认证 + */ + import {Confirm , XHeader , Group , XInput , Toast , XButton, TransferDomDirective as TransferDom } from 'vux'; + import FButton from '../../components/common/FButton'; + import validate from '../../tool/validator'; + import SysApi from '../../api/api'; + import statusCodeManage from '../../api/statusCodeManage'; + import CryptoJS from 'crypto-js'; + import idValidator from '../../tool/IDValidator'; + + export default { + name: 'f-auth', + directives: { + TransferDom + }, + components:{ + XHeader, + Group, + XInput, + XButton, + Toast, + Confirm + }, + data(){ + return { + fromProdDetail: false, // 是从产品详情跳转过来,认证成功后,自动跳转 + userInfoRoot:{//这是源数据,只用于储存 不用于展示或者加密处理 + phoneNum:'', + userName:'', + idCard:'' + }, + userInfo:{ + phoneNum:'', + userName:'', + idCard:'' + }, + canModify:null, + showChangeBtn:true, + showConfirm:false, + showPass:false, + showAnimation:false + } + }, + methods:{ + // 处理身份证的输入只要数字与大小写x + handleInputIdCard () { + let _this = this; + setTimeout(function () { + if (_this.userInfo.idCard) { + _this.userInfo.idCard = _this.userInfo.idCard.replace(/[^\dxX]/g, ''); + } + }, 50); + }, +// 认证按钮 + clickBut(){ + let _this = this; + let obj={...this.userInfo}; + if(validate.checkValEmpty(obj.userName)){ + this.$vux.toast.text('请输入姓名','middle'); + return; + } + if(validate.checkValEmpty(obj.idCard)){ + this.$vux.toast.text('请输入身份证号','middle'); + return; + } + if(!validate.checkName(obj.userName)){ + this.$vux.toast.text('请输入正确的姓名','middle'); + return; + } + if(!idValidator.isValid(obj.idCard)){ + this.$vux.toast.text('请输入正确的身份证号','middle'); + return; + } + this.$store.commit('UPDATE_LOADING',{isLoading:true}); + let params={ + mblNo:window.sessionStorage.getItem('newPhoneNum'), + userName:this.userInfo.userName, + cardNo:this.userInfo.idCard + }; + let key = CryptoJS.enc.Utf8.parse('MdAJYhTz6jrZJ6Qh'); + let parseId = CryptoJS.enc.Utf8.parse(params.cardNo); + let encrypted = CryptoJS.AES.encrypt(parseId, key, {mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7}); + let encryptedIDCards = encrypted.toString(); + params.cardNo=encryptedIDCards; + SysApi.fetchAuth(params).then( + res=>{ + setTimeout(()=>{ + this.$store.commit('UPDATE_LOADING',{isLoading:false}); + this.showAnimation=true; + this.showPass=true; + this.showChangeBtn=false; + this.canModify=false; + window.sessionStorage.setItem('newClientState',1); + // 如果是从产品详情跳转过来的话,那么就自动跳回原来的页面 + // 不然的话,那么就手动点击返回再返回 + setTimeout(function () { + if (_this.fromProdDetail) { + _this.$router.back(); + } + }, 500); + },2000) + }, + err=>{ + this.$store.commit('UPDATE_LOADING',{isLoading:false}); + statusCodeManage.showTipOfStatusCode(err, _this); + } + ) + }, +// 修改按钮 + changeBut(){ + this.showConfirm=true; + }, + //确认修改模态框点击确认 + onConfirm(){ + this.userInfo.userName=this.userInfoRoot.userName; + this.userInfo.idCard=this.userInfoRoot.idCard; + this.showChangeBtn=true; + this.canModify=false; + this.showPass=false; + this.showAnimation=false; + }, + aesFn(){ + this.userInfo.phoneNum=`${this.userInfoRoot.phoneNum.substr(0,3)}****${this.userInfoRoot.phoneNum.substr(7)}`; +// let num=''; +// for(let i=0;i<this.userInfoRoot.userName.length-1;i++){ +// num+='*'; +// } + this.userInfo.userName=`*${this.userInfoRoot.userName.substr(1,this.userInfoRoot.userName.length-1)}`; + this.userInfo.idCard=`${this.userInfoRoot.idCard.substr(0,6)}********${this.userInfoRoot.idCard.substr(14)}`; + } + }, + activated(){ + this.$store.commit('UPDATE_DIRECTION', {direction: 'in'}); + let _this = this; + this.userInfo.phoneNum=''; + this.userInfo.userName=''; + this.userInfo.idCard=''; + //判断是否已经进行过实名认证 + let client = window.sessionStorage.getItem('newClientState'); + //得到该用户的手机号 + let phoneNum = window.sessionStorage.getItem('newPhoneNum'); + if(parseInt(client)){ + //已经通过实名认证了 + SysApi.fetchAuthInit({}).then( + res=>{ + //AES解密身份证 + let key = CryptoJS.enc.Utf8.parse('MdAJYhTz6jrZJ6Qh'); + let parseId = CryptoJS.enc.Utf8.parse(res.body.cardNo); + let decrypted = CryptoJS.AES.decrypt(res.body.cardNo, key, {mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7}); + let encryptedIDCards = decrypted.toString(CryptoJS.enc.Utf8); + this.userInfoRoot.idCard=encryptedIDCards; + this.userInfoRoot.phoneNum=phoneNum; + this.userInfoRoot.userName=res.body.name; + this.canModify=res.body.canModify; + //用于是否显示认证按钮和通过的动画,以及信息加密显示 + this.showChangeBtn=false; + this.showAnimation=false;//不加载动画 + this.showPass=true; + this.aesFn(); + }, + err=>{ + statusCodeManage.showTipOfStatusCode(err, _this); + } + ); + }else{ + this.userInfo.phoneNum=`${phoneNum.substr(0,3)}****${phoneNum.substr(7)}`;; + this.showChangeBtn=true; + this.showPass=false; + this.showAnimation=false; + } + }, + + deactivated(){ + this.$store.commit('UPDATE_DIRECTION', {direction: 'none'}); + this.showPass=false; + this.showAnimation=false; + }, + // 是从产品详情跳转过来,认证成功后,自动跳转 + // 即从哪里来,会哪里去 + beforeRouteEnter (to, from, next) { + next(vm => { + // 通过 `vm` 访问组件实例 + if(from.path === '/f-credit-detail' || from.path === '/f-loan-detail') { + vm.fromProdDetail = true; + } + }) + } + } +</script> + +<style lang="less"> +@import '../../style/mixin'; +.auth-page { + position: relative; + .vux-header { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + .vux-header-title { + font-size: 18px; + } + .vux-header-left { + .left-arrow:before { + border: solid 1px @color-white; + border-width: 2px 0 0 2px; + } + } + } + .tips { + padding:10px 12px 10px 12px; + background-color: @color-background-default; + color: @color-text-third; + } + .icon-box { + height: 150px; + text-align: center; + .flexLayout(center,center,row); + svg { + width: 120px; + height: 120px; + } + } + .weui-cells { + &:before, + &:after { + border: none; + } + font-size: @font-size-base; + .weui-cell { + height: 44px; + box-sizing: border-box; + margin-left: 12px; + padding-left: 0; + border-bottom: 1px solid @color-divider-regular; + &:before, + &:after { + border: none; + } + } + } + .changeInfo { + text-align: right; + margin: 30px 13px 0; + span { + font-size: @font-size-medium; + color: @color-primary; + } + } + .auth-button{ + padding:0 12px; + } + .btn { + margin-top: 48px; + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + color: #ffffff; + height: 44px; + font-size:16px; + } + .notice { + margin-top: 50px; + width: 100%; + text-align: center; + color: @color-text-third; + } + .weui-dialog__btn_primary { + color: @color-primary; + } + .passStatus { + position: absolute; + top: 280px; + right: 45px; + z-index: 99; + width: 78px; + height: 66px; + overflow: hidden; + img { + width: 78px; + height: 66px; + } + } + .showAnimation{ + animation: pass 0.3s; + } + @keyframes pass { + from { + transform: scale(5, 5); + } + to { + transform: scale(1, 1); + } + } + + .weui-btn:after{ + display: none; + } +} +</style> diff --git a/src/views/mine/feedback.vue b/src/views/mine/feedback.vue new file mode 100644 index 0000000..1288668 --- /dev/null +++ b/src/views/mine/feedback.vue @@ -0,0 +1,449 @@ +<template> + <div class="feedback-page"> + <x-header :left-options="{backText: ''}">意见反馈</x-header> + <div class="feedback-head"> + <textarea class="mine-page-division" v-model.trim="questionText" maxlength="200" placeholder="请反馈在使用过程中遇到的问题和建议"></textarea> + <span class="feedback-num">{{ questionText.length }}/200字</span> + </div> + <input class="feedback-input" v-model="mblType" type="text" maxlength='20' placeholder="请输入机型,例:红米note3(选填,方便更快解决问题)"> + <div class="feedback-foot"> + <p>添加图片(选填,提供问题截图)</p> + <div class="upload-box"> + <!--图片列表--> + <div class="upload-list-box"> + <ul class="upload-list"> + <li v-for="(item, index) in uploadImgList" class="upload-list-img"> + <img :src="item"> + <icon type="clear" @click.native="deleteCurrentImg(index)"></icon> + </li> + <!--上传按钮, 当上传的张数4张的时候,消失掉--> + <li class="upload-action-box" v-show="uploadImgList.length < 4"> + <i class="iconfont icon-camerafill"></i> + <input class="upload-input" type="file" @change="handleImgUpload($event)" accept="image/*"> + </li> + </ul> + </div> + <!--上传按钮, 当上传的张数4张的时候,消失掉--> + <!--<div class="upload-action-box" v-show="uploadImgList.length < 4">--> + <!--<i class="iconfont icon-camerafill"></i>--> + <!--<input class="upload-input" type="file" @change="handleImgUpload($event)" accept="image/*">--> + <!--</div>--> + </div> + </div> + <FButton :text="'提交'" @click.native="handleSubmit"></FButton> + <FSpace type="large"></FSpace> + </div> +</template> +<script> + /** + * Created by c.y on 2018/3/22. + * 我的--意见反馈 + */ + import {XHeader, Icon, XButton} from 'vux'; + import FButton from '../../components/common/FButton'; + import FSpace from '../../components/common/FSpace'; + import validator from '../../tool/validator'; + import EXIF from 'exif-js'; + import SystemApi from '../../api/api'; + import statusCodeManage from '../../api/statusCodeManage'; + + export default { + name: 'f-feedback', + data() { + return { + questionText: '', // 咨询的问题 + mblType: '', // 机型 + uploadImgList: [] // 上传的图片的列表 + }; + }, + methods: { + handleSubmit() { + let _this = this; + if (validator.checkValEmpty(this.questionText)) { + this.$vux.toast.text( + '说点什么吧,您的建议是我们前进的动力', + 'middle' + ); + return false; + } + // 验证通过后 + let submitInfo = { + content: this.questionText + }; + if (!validator.checkValEmpty(this.mblType)) { + submitInfo.mblType = this.mblType; + } + if (this.uploadImgList.length > 0) { + submitInfo.fileNames = this.uploadImgList; + } + SystemApi.submitFeedBack(submitInfo).then( + res => { + // 跳转至【个人】页面 + this.$vux.toast.text( + '反馈已收到,我们会马上跟进', + 'middle' + ); + setTimeout(function() { + _this.$router.push('/f-mine'); + }, 2000); + }, + error => { + statusCodeManage.showTipOfStatusCode(error, _this); + } + ); + }, + // 图片的删除 + deleteCurrentImg: function(index) { + // 删除图片 + let _this = this; + let par = { + fileUrl: _this.uploadImgList[index], + fileType: 1 + }; + SystemApi.deleteIMG(par).then( + function(res) { + if (res.errorCode === 0) { + _this.uploadImgList.splice(index, 1); + } + }, + function(error) { + statusCodeManage.showTipOfStatusCode(error, _this); + } + ); + }, + // 图片上传 + handleImgUpload(evt) { + const files = Array.prototype.slice.call(evt.target.files); + console.log(files); + let that = this; + files.forEach(function(file, i) { + let orientation; + if (!/\/(?:jpeg|png|gif)/i.test(file.type)) return; + // 读取图片的元信息 + EXIF.getData(file, function() { + orientation = EXIF.getTag(this, 'Orientation'); + }); + let reader = new FileReader(); + reader.onload = function() { + let result = this.result; + // 使用exif + that.getImgData(this.result, orientation, function(data) { + // 这里可以使用校正后的图片data了 + var img = new Image(); + img.src = data; + // 图片加载完毕之后进行压缩,然后上传 + if (img.complete) { + callback(); + } else { + img.onload = callback; + } + + function callback() { + var data = that.compress(img); + that.upload(data, file.type, file.name); + // 发送后台请求 + } + }); + }; + reader.readAsDataURL(file); + }); + }, + // 压缩图片 + compress(img) { + // 用于压缩图片的canvas + let canvas = document.createElement('canvas'); + let ctx = canvas.getContext('2d'); + // 瓦片canvas + var tCanvas = document.createElement('canvas'); + var tctx = tCanvas.getContext('2d'); + let width = img.width; + let height = img.height; + // 如果图片大于四百万像素,计算压缩比并将大小压至400万以下 + var ratio; + if ((ratio = width * height / 4000000) > 1) { + ratio = Math.sqrt(ratio); + width /= ratio; + height /= ratio; + } else { + ratio = 1; + } + canvas.width = width * 2; + canvas.height = height * 2; + // 铺底色 + ctx.fillStyle = '#fff'; + ctx.fillRect(0, 0, canvas.width, canvas.height); + // 如果图片像素大于100万则使用瓦片绘制 + var count; + if ((count = width * height / 1000000) > 1) { + count = ~~(Math.sqrt(count) + 1); // 计算要分成多少块瓦片 + // 计算每块瓦片的宽和高 + var nw = ~~(width / count); + var nh = ~~(height / count); + tCanvas.width = nw; + tCanvas.height = nh; + for (var i = 0; i < count; i++) { + for (var j = 0; j < count; j++) { + tctx.drawImage( + img, + i * nw * ratio, + j * nh * ratio, + nw * ratio * 2, + nh * ratio * 2, + 0, + 0, + nw, + nh + ); + ctx.drawImage(tCanvas, i * nw, j * nh, nw * 2, nh * 2); + } + } + } else { + ctx.drawImage(img, 0, 0, width * 2, height * 2); + } + // 进行最小压缩 + let ndata = canvas.toDataURL('image/jpeg', 0.8); + return ndata; + }, + // 提交到服务器 + upload(basestr) { + let _this = this; + let post = { + file: basestr.split(',')[1], + extName: 'jpeg', + fileType: 1 + }; + // 选择完毕触发事件 回调 + SystemApi.uploadIMG(post).then( + res => { + _this.uploadImgList.push(res.body); + }, + err => { + statusCodeManage.showTipOfStatusCode(err, _this); + } + ); + }, + // 图片旋转处理 + getImgData: function(img, dir, next) { + // @param {string} img 图片的base64 + // @param {int} dir exif获取的方向信息 + // @param {function} next 回调方法,返回校正方向后的base64 + var image = new Image(); + let canvas = document.createElement('canvas'); + let ctx = canvas.getContext('2d'); + image.onload = function() { + let resultWidth = 0; + let resultHeight = 0; + let maxWidthOrHeight = 1024; + let drawWidth = this.naturalWidth; + let drawHeight = this.naturalHeight; + // 以下改变图片大小,控制最大宽度为1024 + var maxSide = Math.max(drawWidth, drawHeight); + if (maxSide > maxWidthOrHeight) { + let minSide = Math.min(drawWidth, drawHeight); + minSide = minSide / maxSide * maxWidthOrHeight; + maxSide = maxWidthOrHeight; + if (drawWidth > drawHeight) { + resultWidth = maxSide; + resultHeight = minSide; + } else { + resultWidth = minSide; + resultHeight = maxSide; + } + } else { + resultWidth = drawWidth; + resultHeight = drawHeight; + } + if (dir === 3) { + canvas.width = resultWidth; + canvas.height = resultHeight; + ctx.translate(resultWidth, resultHeight); + ctx.rotate(Math.PI); + } else if (dir === 6) { + canvas.width = resultHeight; + canvas.height = resultWidth; + ctx.translate(resultHeight, 0); + ctx.rotate(Math.PI / 2); + } else if (dir === 8) { + canvas.width = resultHeight; + canvas.height = resultWidth; + ctx.translate(0, resultWidth); + ctx.rotate(-Math.PI / 2); + } else { + canvas.width = resultWidth; + canvas.height = resultHeight; + } + ctx.drawImage(this, 0, 0, resultWidth, resultHeight); + // 返回校正图片 + next(canvas.toDataURL('image/jpeg', 0.8)); + }; + image.src = img; + } + }, + components: { + FButton, + XButton, + XHeader, + Icon, + FSpace + }, + activated: function() { + this.$store.commit('UPDATE_DIRECTION', {direction: 'in'}); + this.questionText = ''; + this.mblType = ''; + this.uploadImgList = []; + }, + deactivated() { + this.$store.commit('UPDATE_DIRECTION', {direction: 'none'}); + } + }; +</script> + +<style lang="less"> +@import '../../style/mixin.less'; + +.feedback-page { + .input-btnbox { + padding: 0 12px; + .weui-btn { + height: 44px; + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + color: @color-white; + font-size: 16px; + } + .weui-btn:after { + display: none; + } + } + input::-webkit-input-placeholder { + color: #999 !important; /* WebKit browsers */ + } + .search_input::-webkit-input-placeholder { + color: #999 !important; + } + background-color: @color-background-default; + .vux-header { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + .vux-header-title { + font-size: 18px; + } + .vux-header-left { + .left-arrow:before { + border: solid 1px @color-white; + border-width: 2px 0 0 2px; + } + } + } + .feedback-head { + position: relative; + margin-bottom: 20px; + height: 215px; + .mine-page-division { + width: 100%; + height: 215px; + border-width: 0px; + margin-top: 10px; + resize: none; + outline: none; + padding: 15px 12px 10px 12px; + box-sizing: border-box; + font-size: @font-size-medium; + } + .feedback-num { + position: absolute; + right: 12px; + bottom: 0px; + color: @color-text-third; + } + } + .feedback-input { + width: 100%; + box-sizing: border-box; + border-width: 0px; + outline: none; + padding: 0 12px; + height: 44px; + margin-bottom: 10px; + } + .feedback-foot { + padding: 15px 12px; + background-color: @color-white; + p { + color: @color-text-third; + margin-bottom: 16px; + } + .feedback-add { + width: 100%; + height: 84px; + img { + width: 79px; + height: 79px; + } + } + } + .f-button { + margin-top: 45px; + } + .upload-box { + background-color: @color-white; + padding-bottom: 10px; + .flexLayout(); + } + .upload-list { + flex: 1; + background-color: @color-white; + .upload-list-img { + position: relative; + display: inline-block; + vertical-align: middle; + width: 78px; + height: 80px; + margin-right: 10px; + margin-bottom: 20px; + .weui-icon { + position: absolute; + right: -14px; + top: -10px; + font-size: 20px; + /*background-color: #fff;*/ + color: #ff4d53; + } + &:first-child { + margin-left: 0; + } + &:last-child { + margin-right: 0; + } + img { + width: 80px; + height: 80px; + } + } + } + .upload-action-box { + position: relative; + width: 80px; + height: 80px; + margin-bottom: 20px; + list-style: none; + display: inline-block; + vertical-align: middle; + text-align: center; + background: @color-background-default; + border: 1px solid @color-divider-regular; + box-sizing: border-box; + .iconfont { + font-size: 30px; + line-height: 80px; + color: @color-divider-regular; + } + .upload-input { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + opacity: 0; + } + } +} +</style> diff --git a/src/views/mine/forgetPassword.vue b/src/views/mine/forgetPassword.vue new file mode 100644 index 0000000..c48315c --- /dev/null +++ b/src/views/mine/forgetPassword.vue @@ -0,0 +1,261 @@ +<template> + <div class="forget-page"> + <x-header :left-options="{backText: ''}">忘记密码</x-header> + <div class="pagebody"> + <group class="forget-input" label-width="73px"> + <x-input title="手机号码" + name="mobile" + v-model="userObj.mblNo" + type="tel" + :min="11" :max="11" + :novalidate="true" + placeholder="请输入手机号码" + keyboard="number"></x-input> + <x-input title="新密码" + name="password" + v-model="userObj.password" + :type="pwdType" + :novalidate="true" + onpaste="return false" + oncopy="return false" + :min="8" :max="16" + placeholder="请输入8-16位数字字母组合密码"> + <i slot="right" v-show="pwdType=='text'" class="iconfont icon-eye" @click="showPassword"></i> + <i slot="right" v-show="pwdType=='password'" class="iconfont icon-hide" @click="showPassword"></i> + </x-input> + <x-input title="验证码" + name="verCode" + v-model="userObj.verCode" + type="tel" + :min="4" :max="4" + :novalidate="true" + placeholder="请输入验证码" + keyboard="number"> + <span slot="right" class="getverCode" @click="sendCode">{{codeButText}}</span> + </x-input> + </group> + <div class="input-btnbox"> + <FButton :text="'重置密码'" @click.native="updatePd"></FButton> + </div> + </div> + </div> +</template> + +<script> + import { XButton,XInput,Group,Flexbox,FlexboxItem,XHeader} from 'vux'; + import FButton from '../../components/common/FButton'; + import SystApi from '../../api/api'; + import { md5 } from 'vux'; + import validate from '../../tool/validator'; + import statusCodeManage from '../../api/statusCodeManage' + import { mapState } from 'vuex' + /** + * Created by z.x.q on 2018/3/27. + * 我的--注册 + */ + export default { + name: 'f-forget-password', + components: { + XButton,XInput,Group,Flexbox,FlexboxItem,FButton,XHeader,FButton + }, + data(){ + return { + pwdType:'password', + codeButText:'获取验证码', + abledClick:true, + clearID:null, + userObj:{ + mblNo:'', + password:'', + verCode:'' + } + } + }, + computed: { + ...mapState({ + cn: state => state.vux.cn + }) + }, + methods:{ + showPassword(){ + if(this.pwdType==='password'){ + this.pwdType='text'; + }else{ + this.pwdType='password'; + } + }, + checkUserName() { + if (validate.checkValEmpty(this.userObj.mblNo)) { + this.$vux.toast.text('请输入手机号', 'middle'); + return false; + } else if (!validate.checkPhone(this.userObj.mblNo)) { + this.$vux.toast.text('请输入正确的手机号', 'middle'); + return false; + } else { + return true; + } + }, + sendCode() { // 发送验证码 + if(!this.abledClick){ + return; + } + let _this = this; + const _userNameState = this.checkUserName(); + if (!_userNameState) { + return false; + } + _this.abledClick = false; + // 设置倒计时 + let countDown = 60; + _this.codeButText = countDown + 's后重发'; + _this.clearID = setInterval(function () { + countDown--; + _this.codeButText = countDown + 's后重发'; + if (countDown === 0) { + clearInterval(_this.clearID); + _this.codeButText = '重新获取验证码'; + _this.abledClick = true; + } + }, 1000); + let _par = { + mblNo: this.userObj.mblNo, + verCodeType: 1 + }; + SystApi.getVerCode(_par).then(function (res) { + if (res.errorCode === 0) { } + }, function (error) { + if (error.response) { + clearInterval(_this.clearID); + _this.codeButText = '重新获取验证码'; + _this.abledClick = true; + // The request was made and the server responded with a status code + // that falls out of the range of 2xx + + } + statusCodeManage.showTipOfStatusCode(error, _this); + }) + }, + updatePd() { // 修改密码 + let _this = this; + if (validate.checkValEmpty(this.userObj.mblNo)) { + this.$vux.toast.text('请输入手机号', 'middle'); + return; + } + if (validate.checkValEmpty(this.userObj.password)) { + this.$vux.toast.text('请输入密码', 'middle'); + return; + } + if (validate.checkValEmpty(this.userObj.verCode)) { + this.$vux.toast.text('请输入验证码', 'middle'); + return; + } + if (!validate.checkPhone(this.userObj.mblNo)) { + this.$vux.toast.text('请输入正确的手机号', 'middle'); + return; + } + if (!validate.checkDynamicCode(this.userObj.verCode)) { + this.$vux.toast.text('请输入正确的验证码', 'middle'); + return; + } + if (!validate.checkPassword(this.userObj.password)) { + this.$vux.toast.text('请输入正确的密码', 'middle'); + return; + } + let tmpPassword = md5(this.userObj.mblNo + this.userObj.password); + let _par = { + mblNo: this.userObj.mblNo, + password: tmpPassword, + confirmPwd: tmpPassword, + verCode: this.userObj.verCode + }; + SystApi.forgetPwd(_par).then(response => { + if (response.errorCode === 0) { + _this.$vux.toast.show({ + width: '80%', + type: 'text', + text: '密码修改成功,请重新登录', + time: 2000, + position: 'middle', + onHide: function () { + try { + clearInterval(_this.clearID); + _this.codeButText = '获取验证码'; + } catch (e) { + + } + _this.$router.push({name: 'f-login'}); + } + }) + } + }, err => { + statusCodeManage.showTipOfStatusCode(err, _this); + }) + }, + }, + activated(){ + this.$store.commit('UPDATE_DIRECTION', {direction: 'in'}); + this.codeButText = '获取验证码'; + this.abledClick = true; + this.userObj.mblNo = ''; + this.userObj.password = ''; + this.userObj.verCode = ''; + }, + deactivated () { + this.$store.commit('UPDATE_DIRECTION', {direction: 'none'}); + } + } +</script> +<style lang="less"> + @import "../../style/mixin.less"; + .forget-page{ + .vux-header{ + .color-linear-gradient(@color-primary-light,@color-primary,90deg); + .vux-header-title{ + font-size: 18px; + } + .vux-header-left{ + .left-arrow:before{ + border:solid 1px @color-white; + border-width:2px 0 0 2px; + } + + } + } + .pagebody{ + padding:0 12px 0 12px ; + .forget-input{ + .weui-cells{ + .weui-cell{ + height:23px; + border:1px solid @color-disabled; + border-radius: @border-radius-normal-size; + margin-top: 10px; + font-size:@font-size-base; + .weui-cell__ft{ + .getverCode{ + padding-left: 10px; + display:inline-block; + color: @color-primary; + border-left:1px solid @color-divider-regular; + } + } + } + .weui-cell:before{ + display: none; + } + } + .weui-cells:before{ + display: none; + } + .weui-cells:after{ + display: none; + } + } + .f-button{ + width: 100%; + } + + } + } + +</style> diff --git a/src/views/mine/helpCenter/helpCenter.vue b/src/views/mine/helpCenter/helpCenter.vue new file mode 100644 index 0000000..36afcd2 --- /dev/null +++ b/src/views/mine/helpCenter/helpCenter.vue @@ -0,0 +1,187 @@ +<template> + <div class="mine-page"> + <!--问题类型--> + <x-header :left-options="{backText: ''}">帮助中心</x-header> + <flexbox class="mine-page-header"> + <flexbox-item class="flex-demo" @click.native="registrationjump(1)"> + <i class="iconfont icon-registration-problem"></i> + <p>注册问题</p> + </flexbox-item> + <flexbox-item class="flex-demo" @click.native="registrationjump(2)"> + <i class="iconfont icon-application-problem"></i> + <p>申请问题</p> + </flexbox-item> + <flexbox-item class="flex-demo" @click.native="registrationjump(3)"> + <i class="iconfont icon-loan-problem"></i> + <p>放款问题</p> + </flexbox-item> + <flexbox-item class="flex-demo" @click.native="registrationjump(4)"> + <i class="iconfont icon-repayment-problem"></i> + <p>还款问题</p> + </flexbox-item> + </flexbox> + <!--问题详情--> + <ul> + <!--热门问题--> + <li class="mine-page-hot"> + <span>热门问题</span> + </li> + <router-link tag="li" :to="'/f-question/'+i.questionId" v-for="(i,index) in items" :key="index"> + <p><i></i></p> + <p>{{i.title}}</p> + </router-link> + </ul> + </div> +</template> +<script> + /** + * Created by z.x.q on 2018/3/23. + * 我的--帮助中心 + */ + import {XButton, Flexbox, FlexboxItem, Swiper, SwiperItem, XHeader} from 'vux'; + export default { + name: 'f-help-center', + components: { + Flexbox, + FlexboxItem, + Swiper, + SwiperItem, + XHeader + }, + data(){ + return { + questions: {}, + items: [ + { + title: " 1.我能贷多少?", questionId: 10010 + }, + { + title: "2.为什么我的贷款申请被拒?", questionId: 10019 + }, + { + title: " 3.如何提高贷款成功率/提高额度?", questionId: 10016 + }, + { + title: "4.提前还款利息怎么计算?", questionId: 10023 + } + ] + } + }, + init () { + + }, + methods: { + registrationjump: function (typeId) { + this.$router.push({ + path: '/f-registration-problem', + query: {typeId: typeId} + }); + } + }, + activated: function () { + this.$store.commit('UPDATE_DIRECTION', {direction: 'in'}); + }, + deactivated: function () { + this.$store.commit('UPDATE_DIRECTION', {direction: 'out'}); + } + } +</script> +<style lang="less"> + @import '../../../style/mixin.less'; + + .mine-page { + background-color: @color-background-default; + .vux-header { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + .vux-header-title { + font-size: 18px; + } + .vux-header-left { + .left-arrow:before { + border: solid 1px @color-white; + border-width: 2px 0 0 2px; + } + } + } + .mine-page-header { + background-color: @color-white; + height: 109px; + text-align: center; + .flex-demo { + .iconfont { + font-size: 45PX !important; + } + .icon-registration-problem:before { + color: @color-primary; + } + .icon-application-problem:before { + color: #ff7777; + } + .icon-loan-problem:before { + color: #2ac5e6; + } + .icon-repayment-problem:before { + color: #ffa92c; + } + p { + font-size: @font-size-medium; + line-height: 15px; + } + } + } + .mine-page-division { + width: 100%; + height: 10px; + background-color: @color-background-default; + } + .mine-page-hot { + background-color: @color-white; + margin-top: 10px; + margin-left: 0px; + padding-left: 12px; + font-size: @font-size-medium; + height: 44px; + line-height: 44px; + border-bottom: solid 1px @color-divider-regular; + span { + font-size: @font-size-base; + } + } + ul { + background-color: @color-white; + li { + height: 44px; + line-height: 44px; + margin-left: 12px; + padding-right: 12px; + list-style: square; + font-size: @font-size-small; + border-bottom: solid 1px @color-divider-regular; + display: flex; + .ellipsis(); + p { + &:first-child { + i { + display: inline-block; + width: 6px; + height: 6px; + line-height: 44px; + color: @color-primary; + margin: 0 10px; + background-color: @color-primary; + border-radius: 50%; + vertical-align: middle; + } + } + &:last-child { + span { + line-height: 44px; + font-size: @font-size-medium; + } + } + } + + } + } + } +</style> diff --git a/src/views/mine/helpCenter/registrationProblem.vue b/src/views/mine/helpCenter/registrationProblem.vue new file mode 100644 index 0000000..39c43d1 --- /dev/null +++ b/src/views/mine/helpCenter/registrationProblem.vue @@ -0,0 +1,199 @@ +<template> + <div class="registrationProblem-page"> + <x-header :left-options="{backText: ''}">{{headText}}</x-header> + <!--显示注册问题--> + <ul> + <router-link tag="li" :to="'/f-question/'+i.questionId" v-for="(i,index) in resultArrs" :key="index"> + <span></span> + <span>{{i.title}}</span> + </router-link> + </ul> + <!--<group class="registration-group">--> + <!--<cell title="联系客服" is-link></cell>--> + <!--</group>--> + </div> +</template> +<script> + /** + * Created by z.x.q on 2018/3/22. + * 我的--帮助中心--注册问题 + */ + import {Badge, Group, Calendar, Cell, XHeader} from 'vux' + export default { + name: 'f-registration-problem', + components: { + Badge, + Group, + Cell, + Calendar, + XHeader + }, + data(){ + return { + headText: null, + showQuestion: false, + showSQuestion: false, + showHQuestion: false, + showFQuestion: false, + resultArrs: [], +// 实名认证问题title + regItems: [ + { + title: "1.什么是实名认证?", questionId: 10005 + }, + { + title: "2.为什么要实名认证?", questionId: 10006 + }, + { + title: "3.如何实名认证?", questionId: 10007 + }, + { + title: "4.忘记登录密码如何找回?", questionId: 10008 + } + ], +// 申请问题 + ApyItems: [ + { + title: "1.我能贷多少?", questionId: 10010 + }, + { + title: "2.什么是个人征信?", questionId: 10011 + }, + { + title: "3.哪些行为会影响个人信用记录?", questionId: 10012 + }, + { + title: "4.征信差对贷款有什么影响?", questionId: 10013 + }, + { + title: "5.征信不好如何贷款呢?", questionId: 10014 + }, + { + title: "6.选填资料如果不填写,会不会对申请贷款有影响?", questionId: 10015 + }, + { + title: "7.如何提高贷款成功率/提高额度?", questionId: 10016 + } + ], +// 放款问题 + loanItems: [ + { + title: "1.审核时,会给我填的联系人打电话吗?", questionId: 10017 + }, + { + title: "2.申请之后多久可以知道审核结果?", questionId: 10018 + }, + { + title: "3.为什么我的贷款申请被拒?", questionId: 10019 + }, + { + title: "4.申请通过后,钱多久可以到账?", questionId: 10020 + }, + { + title: "5.审批不通过下一次还能申请借款吗?", questionId: 10021 + }, + { + title: "6.申请金额及期限与审批不符?", questionId: 10022 + } + ], +// 放款问题 + repItems: [ + { + title: "1.提前还款利息怎么计算?", questionId: 10023 + }, + { + title: "2.逾期还款会有什么影响?", questionId: 10024 + }, + { + title: "3.防骗指南", questionId: 10025 + } + ] + } + }, + activated () { + this.$store.commit('UPDATE_DIRECTION', {direction: 'in'}); + this.resultArrs = []; + let _type = this.$route.query.typeId; + if (_type == 1) { + this.headText = '注册问题'; + this.resultArrs = JSON.parse(JSON.stringify(this.regItems)); + } else if (_type == 2) { + this.headText = '申请问题'; + this.resultArrs = JSON.parse(JSON.stringify(this.ApyItems)); + } else if (_type == 3) { + this.headText = '放款问题'; + this.resultArrs = JSON.parse(JSON.stringify(this.loanItems)); + } else if (_type == 4) { + this.headText = '还款问题'; + this.resultArrs = JSON.parse(JSON.stringify(this.repItems)); + } + }, + deactivated () { + this.$store.commit('UPDATE_DIRECTION', {direction: 'out'}); + } + } +</script> + +<style lang="less"> + @import "../../../style/mixin"; + + .registrationProblem-page { + background-color: @color-background-default; + .vux-header { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + .vux-header-title { + font-size: 18px; + } + .vux-header-left { + .left-arrow:before { + border: solid 1px @color-white; + border-width: 2px 0 0 2px; + } + + } + } + ul { + background-color: #ffffff; + margin-top: 10PX; + li { + color: @color-text-primary; + height: 42px; + line-height: 42px; + margin-left: 12px; + list-style: disc; + font-size: @font-size-medium; + border-bottom: solid 1px @color-divider-regular; + &:last-child { + border-bottom: none; + } + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + + span { + &:first-child { + display: inline-block; + width: 6px; + height: 6px; + background-color: @color-primary; + border-radius: 50%; + margin: 0 10px; + vertical-align: middle; + } + &:last-child { + font-size: @font-size-medium; + } + + } + } + + } + .registration-group { + .weui-cells { + margin-top: 10px; + font-size: @font-size-medium; + } + } + + } +</style> diff --git a/src/views/mine/index.vue b/src/views/mine/index.vue new file mode 100644 index 0000000..de06d8f --- /dev/null +++ b/src/views/mine/index.vue @@ -0,0 +1,568 @@ +<template> + <div class="mine-index"> + <div class="mine-header"> + <!--不要动这个东西--> + <img class="corner" src="../../assets/img/tag-bg.png"> + <!--这个是头像--> + <img src="../../assets/img/person.png" alt="" class="head-portrait"> + <!--这个是登录信息--> + <div class="login-info"> + <p @click="handleJumpLogin">{{phoneNum}}</p> + <div class="status" v-if="certification"><p>未实名</p></div> + </div> + </div> + <div class="mine-person-info"> + <div @click="pushToPage('f-auth')"> + <i class="iconfont icon-my-identification-fill"></i> + <p>实名认证</p> + </div> + <div @click="pushToPage('f-apply-record')"> + <i class="iconfont icon-my-application-recor"></i> + <p>申请记录</p> + </div> + </div> + <div class="person-func"> + <div @click="pushToPage('f-message-center')"> + <i class="iconfont icon-notice"></i> + <p>消息中心</p> + </div> + <div @click="pushToPage('f-help-center')"> + <i class="iconfont icon-question"></i> + <p>帮助中心</p> + </div> + <div @click="pushToPage('f-feedback')"> + <i class="iconfont icon-feedback"></i> + <p>意见反馈</p> + </div> + <div @click="openLocalQQ"> + <i class="iconfont icon-qq"></i> + <p>加入QQ群</p> + </div> + <div @click="openLocalWX"> + <i class="iconfont icon-wechat"></i> + <p>微信公众号</p> + </div> + <div @click="showModal=true;" v-show="showShare"> + <i class="iconfont icon-share"></i> + <p>分享给好友</p> + </div> + <div @click="pushToPage('f-setting')" v-show="showSetting"> + <i class="iconfont icon-settings"></i> + <p>设置</p> + </div> + </div> + <!--wechat弹窗--> + <div class="wechath" v-if="isApp==0"> + <alert v-model="showUpdata" hide-on-blur> + <x-button mini type="primary" id='weChat' :data-clipboard-text="wechatName" class="f-button-alert" + @click.native="copyWeChatName">复制名称 + </x-button> + <div class="wechatimg"> + <img :src="wechatqrcode"> + </div> + <div class="close-icon" @click="showUpdata=false"> + <span></span> + <i class="iconfont icon-roundclose"></i> + </div> + </alert> + </div> + <!--APP下的wechat弹窗--> + <div class="wechatapp" v-if="isApp==1"> + <alert v-model="showUpdata" hide-on-blur> + <x-button mini type="primary" id='weChat' :data-clipboard-text="wechatName" class="f-button-alert" + @click.native="copyWeChatName">复制名称 + </x-button> + <div class="close-icon" @click="showUpdata=false"> + <span></span> + <i class="iconfont icon-roundclose"></i> + </div> + </alert> + </div> + <!--QQchat弹窗--> + <div class="QQchat"> + <alert v-model="showAddqq" hide-on-blur> + <div class="qqcode"> + <p>QQ群</p> + <p>{{qqNumber}}</p> + </div> + <x-button mini type="primary" id="qqNumber" :data-clipboard-text="qqNumber" class="f-button-alert" + @click.native="copyQQNum">复制群号 + </x-button> + <div class="close-icon" @click="showAddqq=false"> + <span></span> + <i class="iconfont icon-roundclose"></i> + </div> + </alert> + </div> + <!--footer--> + <FFooter :index="3"></FFooter> + <!--分享弹窗--> + <div class="shareModal" v-show="showModal" @click="showModal=false;"> + <img v-if="shareType=='IOS'" src="../../assets/img/shareIOS.png"> + <img v-if="shareType=='Android'" src="../../assets/img/shareAndroid.png"> + </div> + </div> +</template> + +<script> + /** + * Created by 吴彦祖 on 2018/3/22. + * 我的--首页 + */ + import FFooter from '../../components/common/FFooter.vue'; + import jsBridge from '../../tool/jsBridge'; + import {Alert, XButton} from 'vux'; + import validator from '../../tool/validator'; + import sysApi from '../../api/api'; + import statusCodeManager from '../../api/statusCodeManage'; + + export default { + name: 'f-mine', + data() { + return { + shareType: 'Android', + phoneNum: '点击登录/注册', + certification: false,//true就是没有实名,显示未实名标签 + showUpdata: false, + showAddqq: false, + showModal: false, + showShare: true, + showSetting: true, + qqNumber: '888888888', + wechatName: '纷领钱包', + wechatqrcode: '', + isApp: null + } + }, + components: { + FFooter, + Alert, + XButton + }, + methods: { + copyWeChatName() { + let _this = this; + let clipboard = new ClipboardJS('#weChat'); + clipboard.on('success', function (e) { + jsBridge.openWX(); + _this.$vux.toast.text('已复制', 'middle'); + e.clearSelection(); + // 关闭模态窗 + _this.showUpdata = false; + }); + clipboard.on('error', function (e) { + e.clearSelection(); + _this.showUpdata = false; + }); + }, + copyQQNum() { + let _this = this; + let clipboard = new ClipboardJS('#qqNumber'); +// console.log(clipboard); + clipboard.on('success', function (e) { + jsBridge.openQQ(); + _this.$vux.toast.text('已复制', 'middle'); + e.clearSelection(); + // 关闭模态窗 + _this.showAddqq = false; + }); + clipboard.on('error', function (e) { + e.clearSelection(); + _this.showAddqq = false; + }); + }, + pushToPage(to) { + // 申请记录 意见反馈 实名认证 + if (to === 'f-apply-record' || to === 'f-feedback' || to === 'f-auth') { + let _sessionId = window.sessionStorage.getItem('newSid'); + // 如果处理未登录时 + if (validator.checkValEmpty(_sessionId)) { + this.$router.push({path: '/f-login'}); + return false; + } + } + this.$router.push({name: to, query: {tshare: 'i123'}}); + }, + openLocalQQ() { + this.showAddqq = true; + }, + openLocalWX() { + this.showUpdata = true; + }, + handleJumpLogin() { + //如果没有登陆则跳转到登陆界面 + let sid = window.sessionStorage.getItem('newSid'); + if (!sid) { + this.$router.push({name: 'f-login'}); + } + } + }, + deactivated() { + this.showModal = false; + this.showAddqq = false; + this.showUpdata = false; + }, + activated() { + // window.location.reload(); + //获取QQ号等基础配置信息 + sysApi.fetchQuestionAndTypeList().then( + res => { + let baseInfo = res; + this.qqNumber = baseInfo.qq; + this.wechatqrcode = baseInfo.wechatqrcode; + }, + err => { + statusCodeManager.showTipOfStatusCode(err, this); + } + ); + //判断是否显示分享按钮 + let clientInfo = JSON.parse(window.localStorage.getItem('newClientInfo')); + let sid = window.sessionStorage.getItem('newSid'); + if (clientInfo.cn) { + this.showShare = true; + } else { + this.showShare = false; + } + if (clientInfo.ostype == 'IOS') { + this.shareType = 'IOS'; + } else if (clientInfo.ostype == 'Android') { + this.shareType = 'Android'; + } + //判断是否为H5,如果是则判断是否登录,没有登录就隐藏设置按钮 + if (clientInfo.isApp === '0') { + this.isApp = 0; + if (!sid) { + this.showSetting = false; + } else { + this.showSetting = true; + } + } else { + this.isApp = 1; + } + //判断是否登陆 + if (!sid) { + this.phoneNum = '点击登录/注册'; + this.certification = false; + } else { + let phoneNum = window.sessionStorage.getItem('newPhoneNum'); + if (phoneNum) { + this.phoneNum = `${phoneNum.substr(0, 3)}****${phoneNum.substr(7)}`; + } + let isClient = window.sessionStorage.getItem('newClientState'); + if (parseInt(isClient)) { + this.certification = false; + } else { + this.certification = true; + } + } + }, + beforeRouteEnter(to, from, next) { // 这里通过导航者守卫,来处理页面跳转记录 + window.sessionStorage.setItem('newGoBackPage', to.path); + next(); + } + } +</script> + +<style lang="less"> + @import "../../style/mixin.less"; + + .mine-index { + background-color: @color-background-default; + .vux-header { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + .vux-header-title { + font-size: 20PX; + } + .vux-header-left { + .left-arrow:before { + border: solid 1px @color-white; + border-width: 2px 0 0 2px; + } + } + .vux-header-right { + color: @color-white !important; + } + } + .mine-header { + height: 110px; + position: relative; + box-sizing: border-box; + text-align: center; + .color-linear-gradient(@color-primary-light, @color-primary); + .corner { + position: absolute; + width: 94px; + height: 11px; + left: 50%; + bottom: -1px; + margin-left: -47px; + } + .head-portrait { + position: absolute; + left: 50%; + top: 65px; + margin-left: -32px; + width: 64px; + height: 64px; + } + .login-info { + position: absolute; + top: 48px; + left: 13px; + color: @color-white; + font-size: @font-size-base; + .status { + text-align: left; + p { + &:last-child { + width: 50%; + height: 15px; + line-height: 15px; + text-align: center; + padding: 0 .5px; + color: @color-text-placeholder-yellow; + border: 1px solid @color-text-placeholder-yellow; + font-size: @font-size-tiny; + } + + } + } + } + } + .mine-person-info { + height: 90px; + box-sizing: border-box; + padding-bottom: 11px; + .flexLayout(center, flex-end, row); + background-color: @color-white; + div { + text-align: center; + font-size: @font-size-medium; + flex: 1; + &:first-child { + position: relative; + &:after { + .setRightLine(@color-divider-regular, 44px); + top: 8px; + transform: translateY(6px); + } + i { + font-size: 25Px; + color: @color-primary; + } + } + &:last-child { + i { + font-size: 25Px; + color: @color-primary; + } + } + } + } + .person-func { + margin-top: 10px; + /*height:275px;*/ + background-color: @color-white; + .flexLayout(flex-start, center, row); + flex-wrap: wrap; + padding-bottom: 20px; + div { + text-align: center; + font-size: @font-size-medium; + width: 33%; + margin-top: 20px; + i { + font-size: 25Px; + } + } + .icon-notice { + color: @color-primary; + } + .icon-question { + color: @color-text-placeholder-red; + } + .icon-feedback { + color: @color-gradient-lightBlue-right; + } + .icon-qq { + color: #ffaa29; + } + .icon-wechat { + color: @color-primary; + } + .icon-share { + color: @color-text-placeholder-red; + } + .icon-settings { + color: @color-gradient-lightBlue-right; + } + } + .weui-dialog { + width: 240px; + top: 40%; + background-size: 100% 100%; + border-radius: 7.5PX; + overflow: visible; + } + .weui-dialog__hd { + display: none; + } + .weui-dialog__bd { + width: 100%; + height: 100%; + position: relative; + box-sizing: border-box; + .wechatimg { + width: 83px; + height: 83px; + position: absolute; + left: 50%; + bottom: 10px; + margin-left: -42px; + img { + width: 100%; + height: 100%; + } + } + .close-icon { + width: 30px; + height: 82px; + position: absolute; + left: 50%; + bottom: -82px; + margin-left: -16px; + span:after { + content: ""; + border-right: 1PX solid @color-white;; + font-size: 20PX; + } + i { + display: block; + font-size: 25PX; + color: @color-white; + position: absolute; + top: 20px; + left: 50%; + margin-left: -12.5px; + } + } + } + .weui-dialog__ft { + display: none; + } + .f-button-alert { + width: 110px; + height: 33px; + font-size: 14PX; + background-color: @color-text-placeholder-yellow !important; + color: @color-primary; + position: absolute; + + } + .wechatapp { + .weui-dialog { + height: 315px; + background-image: url("../../assets/img/appwechat.png"); + } + .f-button-alert { + left: 50%; + bottom: 8px; + margin-left: -55px; + } + + } + .wechath { + .weui-dialog { + height: 375px; + background-image: url("../../assets/img/wechat.png"); + } + .f-button-alert { + left: 50%; + top: 205px; + margin-left: -55px; + } + } + .QQchat { + .weui-dialog { + width: 240px; + height: 280px; + background-color: transparent; + background-image: url("../../assets/img/qqchat.png"); + background-size: 240px 280px; + border-radius: 7.5PX; + overflow: visible; + } + .weui-dialog__bd { + width: 100%; + height: 100%; + position: relative; + box-sizing: border-box; + .close-icon { + width: 83px; + height: 83px; + position: absolute; + left: 50%; + bottom: -82px; + margin-left: -42px; + span:after { + content: ""; + border-right: 1PX solid @color-white;; + font-size: 20PX; + } + i { + display: block; + font-size: 25PX; + color: @color-white; + position: absolute; + top: 20px; + left: 50%; + margin-left: -12.5px; + } + } + } + .f-button-alert { + width: 110px; + height: 33px; + font-size: 14PX; + background-color: @color-text-placeholder-yellow !important; + color: @color-primary; + position: absolute; + left: 50%; + top: 230px; + margin-left: -55px; + } + .qqcode { + line-height: 28px; + position: absolute; + left: 50%; + top: 110px; + transform: translate(-50%); + p { + &:first-child { + color: @color-white; + font-size: 14PX; + } + &:last-child { + color: @color-text-placeholder-yellow; + font-size: 20PX; + } + } + } + + } + .shareModal { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: rgba(0, 0, 0, 0.6); + text-align: center; + z-index: 9999; + img { + width: 100%; + height: 100%; + } + } + } +</style> diff --git a/src/views/mine/login.vue b/src/views/mine/login.vue new file mode 100644 index 0000000..a9234c0 --- /dev/null +++ b/src/views/mine/login.vue @@ -0,0 +1,418 @@ +<template> + <div class="login-page"> + <x-header + :left-options.showBack="{backText: ''}" + :title="'登录'" + ><span slot="right" @click="changeLoginMethods">{{loginMethodsWord}}</span></x-header> + <div class="pagebody"> + <div class="login-portrait"> + <div class="login-head-portrait"> + <img :src="loginLogo"> + </div> + </div> + <group class="login-input" label-width="73px"> + <x-input title="手机号" + name="mobile" + v-model="mblNo" + type="tel" + :min="11" :max="11" + :novalidate="true" + placeholder="请输入手机号码" + keyboard="number" + ></x-input> + <x-input title="密码" + name="password" + :type="pwdType" + v-model="password" + v-show="!loginMethods" + :min="8" :max="16" + :novalidate="true" + onpaste="return false" + oncopy="return false" + placeholder="请输入8-16位数字字母组合密码"> + <i slot="right" + class="iconfont" + :class="{ 'icon-eye' : pwdType=='text', 'icon-hide': pwdType=='password'}" + @click="showPassword"></i> + </x-input> + <x-input title="验证码" + name="verCode" + v-show="loginMethods" + v-model="verCode" + type="tel" + :min="4" :max="4" + :novalidate="true" + placeholder="请输入验证码" + keyboard="number"> + <span slot="right" class="getverCode" @click="checkAferThreeTimes">{{codeButText}}</span> + </x-input> + </group> + <FButton :text="'登录'" @on-click-button="loginBut"></FButton> + <div class="input-other"> + <span class="forget-pwd" @click="toForgetPwd" v-show="!loginMethods">忘记密码?</span> + <span class="register" @click="toRegister">注册</span> + </div> + </div> + <!-- 图形验证码 --> + <div v-transfer-dom> + <confirm + v-model="showImageCode" + :title="'输入图形验证码'" + @on-confirm="onConfirm" + @on-hide="onHide"> + <slot> + <input ref="imgcode" v-model="imgCode" maxlength="4" style="height: 28px;width: 90px;border:1px solid #999;"/> + <img style="width: 76px; position: relative;top: 10px;" :src="imgCodeUrl" @click="getImgCodeAgain"/> + </slot> + </confirm> + </div> + </div> +</template> + +<script> + import {XButton, XInput, Group, cookie, Confirm, XHeader, TransferDomDirective as TransferDom,} from 'vux'; + import FButton from'../../components/common/FButton'; + import validate from '../../tool/validator'; + import SystApi from '../../api/api'; + import {md5} from 'vux'; + import statusCodeManage from '../../api/statusCodeManage'; + import initData from '../../tool/initData'; + /** + * Created by c.y on 2018/3/22. + * 我的--登录 + */ + export default { + name: 'f-login', + components: { + XButton, XInput, Group, XHeader, Confirm, FButton + }, + directives: { + TransferDom + }, + data(){ + return { + fromProdDetail: false, // 是从产品详情跳转过来,认证成功后,自动跳转 + loginLogo:'',//登录的logo + //右上角的文字 + loginMethodsWord:'验证码登录', + //获取验证码 + codeButText:'获取验证码', + //是否可以点击按钮获取验证码,false为可以点 + abledClick:false, + //获取三次后显示图形验证码 + showImageCode:false, + imgCode:'', + imgCodeUrl:'', + //登录方式,false为密码登录 + loginMethods:false, + //数据 + mblNo:'', + password:'', + verCode:'', + //点击显示密码为明文,眼睛的样式也是根据这个来判断的 + pwdType:'password', + } + }, + methods:{ + toForgetPwd(){ + this.$router.push({name:'f-forget-password'}); + }, + toRegister(){ + this.$router.push({name:'f-register'}); + }, + //切换登录方式 + changeLoginMethods(){ + this.loginMethods=!this.loginMethods; + if(this.loginMethods){ + //当前为验证码登录 + this.loginMethodsWord='密码登录' + }else{ + //当前为密码登录 + this.loginMethodsWord='验证码登录' + } + }, + //是否显示明文密码 + showPassword(){ + if(this.pwdType==='password'){ + this.pwdType='text'; + }else{ + this.pwdType='password'; + } + }, +// 获取验证码 + checkAferThreeTimes () { + if(this.abledClick){ + return; + } + let _this = this; + const _userNameState = this.checkUserName(); + if (!_userNameState) { + return false; + } + let _times = cookie.get('ecImageCodeNum'); + _times = parseInt(_times); + if (_times <= 0) { + _this.imgCodeUrl = '/commerce/user/imageCode?mblNo=' + _this.userName + '&' + new Date(); + _this.showImageCode = true; + } else { + cookie.set('ecImageCodeNum', _times -= 1); + this.sendCode(); + } + }, + //验证手机号正则 + checkUserName() { + if (validate.checkValEmpty(this.mblNo)) { + this.$vux.toast.text('请输入手机号','middle'); + return false; + } else if (!validate.checkPhone(this.mblNo)) { + this.$vux.toast.text('请输入正确的手机号','middle'); + return false; + } else { + return true; + } + }, + sendCode () { // 发送验证码 + let _this = this; + // 防止快速点击,事件触发多次,倒计时出现错误 + _this.abledClick = true; + let countDown = 60; + _this.codeButText = countDown + 's后重发'; + this.clearID = setInterval(function () { + countDown--; + _this.codeButText = countDown + 's后重发'; + if (countDown === 0) { + clearInterval(_this.clearID); + _this.codeButText = '重新获取'; + _this.abledClick = false; + } + }, 1000); + // 通过验证码登录,verCodeType传递2 + let _par = {mblNo: this.mblNo, verCodeType: 2}; + SystApi.getVerCode(_par).then(function (res) { + if (res.errorCode === 0) { + } + }, function (error) { + if (error.response) { + clearInterval(_this.clearID); + _this.codeButText = '重新发送验证码'; + _this.abledClick = false; + } + statusCodeManage.showTipOfStatusCode(error,_this); + }); + }, + //输入图形验证码点击确定 + onConfirm () { + let _this = this; + if (validate.checkValEmpty(_this.imgCode)) { + this.$vux.toast.text('请输入图片验证码','middle'); + return; + } + if (_this.imgCode.length !== 4) { + this.$vux.toast.text('验证码错误','middle'); + return; + } + SystApi.checkImageCode({imageCode: _this.imgCode, mblNo: _this.mblNo}).then(function (res) { + if (res.errorCode === 0) { + _this.sendCode(); + } + }, function (error) { + if (error.response) { + statusCodeManage.showTipOfStatusCode(error,_this); + } + }); + }, + //取消输入图形验证码 + onHide () { + this.imgCode = ''; + }, + //重新获取图形验证码 + getImgCodeAgain () { + this.imgCodeUrl = '/commerce/user/imageCode?mblNo=' + this.mblNo + '&' + new Date(); + }, + //登录验证 + loginBut() { + let _this = this; + if (validate.checkValEmpty(this.mblNo)) { + this.$vux.toast.text('请输入手机号','middle'); + return; + } + if (this.loginMethods) { + if (validate.checkValEmpty(this.verCode)) { + this.$vux.toast.text('请输入验证码','middle'); + return; + } + } else if (!this.loginMethods) { + if (validate.checkValEmpty(this.password)) { + this.$vux.toast.text('请输入密码','middle'); + return; + } + } + if (!validate.checkPhone(this.mblNo)) { + this.$vux.toast.text('请输入正确的手机号','middle'); + return; + } + if (this.loginMethods) { + if (!validate.checkDynamicCode(this.verCode)) { + this.$vux.toast.text('请输入正确的验证码','middle'); + return; + } + } else if (!this.loginMethods) { + if (!validate.checkPassword(this.password)) { + this.$vux.toast.text('请输入正确的密码','middle'); + return; + } + } + // 验证码登录,false为密码登录 + if (this.loginMethods) { + let verCodeLogin = { + mblNo: this.mblNo, + verCode: this.verCode + }; + this.userLogin('loginByCode', verCodeLogin); + // 密码登录 + } else{ + let tmpPassword = md5(this.mblNo + this.password); + let passwordLogin = { + mblNo: this.mblNo, + password: tmpPassword + }; + this.userLogin('userLogin', passwordLogin); + } + }, + // 验证通过后登录 api接口地址,submitInfo接口需要的参数 + userLogin (api, submitInfo) { + let _this = this; + SystApi[api](submitInfo).then( + response => { + window.sessionStorage.setItem('newSid', response.body.sessionId); + window.sessionStorage.setItem('newPhoneNum', response.body.account); + window.sessionStorage.setItem('newClientState', response.body.isClient); + this.$store.commit('UPDATE_SESSION_ID', {sid: response.body.sessionId}); // 更新sid + // 在产品详情页 ,信用卡详情页 首页的值往回跳转 + let _path = window.sessionStorage.getItem('newGoBackPage'); + if (_path) { + _this.$router.push(_path); + // window.location.href = window.location.pathname +'#'+_path; + }else{ + // 不然的话,那么就手动点击返回再返回 +// if (_this.fromProdDetail) { +// _this.$router.back(); +// return false; +// } else { +// _this.$router.push({name: '/f-main'}); +// } + _this.$router.back(); + } + }, + error => { + statusCodeManage.showTipOfStatusCode(error,_this); + } + ); + }, + }, + activated(){ +// [].slice.call(document.getElementsByTagName('*')).forEach +// ((ele) => {ele.style.setProperty('border', '1px solid #' + Math.random().toString(16).slice(2, 8));}); + this.$store.commit('UPDATE_DIRECTION', {direction: 'in'}); + initData(['mblNo', 'password', 'verCode'], this); + let prodConfig = JSON.parse(window.localStorage.getItem('newProdConfig')); + this.loginLogo = prodConfig.logoPath; + }, + deactivated: function () { + this.$store.commit('UPDATE_DIRECTION', {direction: 'none'}); + }, + // 是从产品详情跳转过来,认证成功后,自动跳转 + // 即从哪里来,会哪里去 + beforeRouteEnter (to, from, next) { + next(vm => { + // 通过 `vm` 访问组件实例 + if (from.path === '/f-credit-detail' || from.path === '/f-loan-detail' || from.path === '/f-mine') { + vm.fromProdDetail = true; + } + }) + } + } +</script> +<style lang="less"> + @import "../../style/mixin.less"; + + .login-page { + .vux-header { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + .vux-header-title { + font-size: 18px; + } + .vux-header-left { + .left-arrow:before { + border: solid 1px @color-white; + border-width: 2px 0 0 2px; + } + } + .vux-header-right { + color: @color-white !important; + } + } + .pagebody{ + padding:0 12px; + .login-portrait{ + height:150px; + .flexLayout(center,center,column); + .login-head-portrait{ + width: 84px; + height:84px; + border-radius: @border-radius-normal-size; + overflow: hidden; + img{ + width: 100%; + height:100%; + } + } + } + .login-input{ + margin-top: 0; + .weui-cells{ + margin: 0; + .weui-cell{ + height:23px; + border:1px solid @color-disabled; + border-radius: @border-radius-normal-size; + margin-bottom: 10px; + font-size:@font-size-base; + .weui-cell__ft{ + .getverCode{ + padding-left: 10px; + display:inline-block; + color: @color-primary; + border-left:1px solid @color-divider-regular; + } + } + } + .weui-cell:before{ + display: none; + } + + } + .weui-cells:before{ + display: none; + } + .weui-cells:after{ + display: none; + } + } + .f-button{ + width: 100%; + } + .input-other{ + font-size:@font-size-medium; + .register{ + color: @color-primary; + float: right; + } + .forget-pwd{ + color: @color-text-secondary; + } + } + } + } + +</style> diff --git a/src/views/mine/messageCenter.vue b/src/views/mine/messageCenter.vue new file mode 100644 index 0000000..b978ad6 --- /dev/null +++ b/src/views/mine/messageCenter.vue @@ -0,0 +1,158 @@ +<template> + <div class="message-center-page"> + <x-header :left-options="{backText: ''}">消息通知</x-header> + <scroller lock-x height="-40px" :scrollbar-y=false ref="scroller" @on-pulldown-loading="refresh" :pulldown-config="pulldownConfig" use-pulldown> + <MessageList :list="noticeList" :unRead="unRead" :showNone="showNone" @on-click-notice="handleNoticeJump"></MessageList> + </scroller> + </div> +</template> +<script> +/** + * Created by c.y on 2018/3/22. + * 我的--消息中心 + */ +import { XHeader, Scroller } from 'vux'; +import MessageList from '../../components/MessageList'; +import system from '../../api/api'; +import statusCodeManage from '../../api/statusCodeManage'; +import FSpace from '../../components/common/FSpace.vue'; +export default { + name: 'f-message-center', + data() { + return { + pulldownConfig: { + content: '下拉刷新', + height: 40, + autoRefresh: false, + downContent: '释放刷新', + upContent: '释放刷新', + loadingContent: '加载中...' + }, + noticeList: [], + showNone: false, + unRead: [] //未读的消息数组的ID + }; + }, + methods: { + // 初始化通知列表 + init() { + let _this = this; + let _noticeIdArr = _this.$store.state.noticeIdArr; + system.fetchNoticeList().then( + res => { + _this.noticeList = res.body.notice; + if (!_this.noticeList.length) { + _this.showNone = true; + } + _this.unRead = JSON.parse( + window.sessionStorage.getItem('unRead') + ); + _this.noticeList.forEach((val, index) => { + _this.unRead.forEach((v, i) => { + if (val.id === v) { + val.unRead = true; + } + }); + }); + }, + error => { + statusCodeManage.showTipOfStatusCode(error, _this); + } + ); + }, + // type 1:跳转第三方(地址) 2:直接展示文案(html) + handleNoticeJump(noticeItem) { + if (noticeItem.type === 1) { + // 获取资讯的详情, detailContent内容,有可能是地址,有可能是 html 代码片段 + system.fetchNoticeDetail({ noticeId: noticeItem.id }).then( + res => { + window.location.href = res.body.detailContent; + }, + error => { + statusCodeManage.showTipOfStatusCode(error, _this); + } + ); + } else if (noticeItem.type === 2) { + // 返回html片段,跳转到我们的页面 + this.$router.push({ + path: '/f-message/' + noticeItem.id + }); + } + }, + //下拉加载 + refresh() { + system.fetchNoticeList().then( + res => { + this.$nextTick(() => { + this.$refs.scroller.reset(); + this.$refs.scroller.donePulldown(); + }); + }, + err => { + this.$refs.scroller.donePulldown(); + statusCodeManage.showTipOfStatusCode(err, this); + } + ); + } + }, + components: { + XHeader, + MessageList, + Scroller, + FSpace + }, + activated: function() { + this.$store.commit('UPDATE_DIRECTION', { direction: 'in' }); + this.init(); + }, + deactivated() { + this.showNone = false; + this.$store.commit('UPDATE_DIRECTION', { direction: 'none' }); + } +}; +</script> +<style lang="less"> +@import '../../style/mixin.less'; +.message-center-page { + background-color: @color-background-default; + .vux-header { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + .vux-header-title { + font-size: 18px; + } + .vux-header-left { + .left-arrow:before { + border: solid 1px @color-white; + border-width: 2px 0 0 2px; + } + } + } + .message-body { + padding: 0 12px; + .message-body-header { + height: 40px; + margin-top: @font-size-tiny; + line-height: 40px; + font-size: @font-size-medium; + .ellipsis(); + } + .message-body-con { + margin: 0 0 10px 0; + color: @color-text-third; + font-size: @font-size-small; + .ellipsisLn(3); + } + .message-body-foot { + height: 33px; + border-top: solid 1px @color-background-default; + line-height: 33px; + text-align: right; + padding-right: @font-size-tiny; + color: @color-text-third; + } + } + .scroller-box { + padding-bottom: 40px; + } +} +</style> diff --git a/src/views/mine/messageDetail.vue b/src/views/mine/messageDetail.vue new file mode 100644 index 0000000..80c4d21 --- /dev/null +++ b/src/views/mine/messageDetail.vue @@ -0,0 +1,82 @@ +<template> + <div class="message-detail-page"> + <x-header :left-options="{backText: ''}">消息详情</x-header> + <div style="margin: auto 12px;" v-html="messageContent"></div> + </div> +</template> + +<script> + /** + * Created by z.x.q on 2018/3/22. + * 我的--消息详情 + */ + import {XHeader} from 'vux'; + import system from '../../api/api'; + import statusCodeManage from '../../api/statusCodeManage'; + + export default { + name: 'f-message-detail', + components: { + XHeader + }, + data(){ + return { + messageContent: '' + } + }, + methods: { + init (noticeId) { + let _this = this; + system.fetchNoticeDetail ({noticeId: noticeId}).then((res) =>{ + _this.messageContent = res.body.detailContent; + system.homeNotice().then( + res=>{ + if(res.body.length){ + window.sessionStorage.setItem('unRead',JSON.stringify(res.body)); + }else{ + window.sessionStorage.setItem('unRead','[]'); + } + }, + err=>{ + statusCodeManage.showTipOfStatusCode(err,_this); + } + ) + }, (error)=>{ + + }); + } + }, + activated: function () { + this.messageContent = ''; + this.$store.commit('UPDATE_DIRECTION', {direction: 'in'}); + // 获取资讯的内容 + let noticeId = this.$route.params.id; + this.init(noticeId); + }, + deactivated () { + this.$store.commit('UPDATE_DIRECTION', {direction: 'none'}); + } + } +</script> + +<style lang="less"> + @import "../../style/mixin.less"; + + .message-detail-page { + .vux-header { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + .vux-header-title { + font-size: 18px; + } + .vux-header-left { + .left-arrow:before { + border: solid 1px @color-white; + border-width: 2px 0 0 2px; + } + + } + } + } + + +</style> diff --git a/src/views/mine/questionDetail.vue b/src/views/mine/questionDetail.vue new file mode 100644 index 0000000..68c9ce7 --- /dev/null +++ b/src/views/mine/questionDetail.vue @@ -0,0 +1,251 @@ +<template> + <div class="questiondetail-page"> + <x-header :left-options="{backText: ''}">问题详情</x-header> + <div> + <div class="question-box"> + <i class="iconfont icon-ask"></i> + <span>{{questions.questionTitle}}</span> + </div> + <p class="question-boxdetail"> + <span v-html="questions.questionDetail"></span> + </p> + </div> + <!--<group class="questioncustomer">--> + <!--<cell title="联系在线客服" is-link style="font-size: 12px"></cell>--> + <!--</group>--> + <div class="pagebody"> + </div> + </div> +</template> + +<script> + /** + * Created by c.y on 2018/3/22. + * 我的--问题详情 + */ + import {Group, Cell, XHeader} from 'vux'; + + export default { + name: 'f-question-detail', + components: { + Group, + Cell, + XHeader + }, + data() { + return { +// 循环问题列表 + questions: {}, + questionDetails: [ + { + questionId: 10005, questionTitle: "什么是实名认证?", questionDetail: "实名认证是将您所填的本人姓名、" + + "身份证号信息与公安部或通讯运营商存储的个人信息进行比对,有助于建立完善可靠的互联网信用基础,可以避免一部分网络诈骗。" + }, + { + questionId: 10006, + questionTitle: "什么是实名认证?", + questionDetail: "1.在本平台上发生的都是真实借贷行为,为确保您的资金安全,在进行借贷之前需要进行实名认证<br/>" + + " 2. 线上的用户名有真实的身份对应,保证了电子合同的合法性,保障您的合法权益。" + }, + { + questionId: 10007, + questionTitle: "如何实名认证?", + questionDetail: "注册登录纷领钱包后,在【个人】页面,点击【实名认证】按要求输入身份信息即可进行实名认证,也可在申请产品时按要求进行实名认证哦。<br/>\n" + + "【温馨提示】实名认证现只支持中华人民共和国境内居民身份证,其他证件暂时无法开户哦" + }, + { + questionId: 10008, + questionTitle: "忘记登录密码如何找回?", + questionDetail: "忘记登录密码,您可在【登录】页面点击登录按钮左下角【忘记密码】按钮进入忘记密码界面,按要求填写信息,输入验证码并设置新密码即可。" + }, + { + questionId: 10010, + questionTitle: "我能贷多少?", + questionDetail: "用户所能贷款的额度跟自身资质(资产和征信)、所选的金融机构及所选的产品有关。不同的金融机构对借贷者的资质判断及风险偏好不同,会影响到借贷者的贷款额度,这些必须根据您的实际情况做现场判断。您可以使用我们的【额度评估】功能初步测算自己的贷款额度,但此额度仅作为参考值,最终额度以每款产品审批结果为准。" + }, + { + questionId: 10011, + questionTitle: "什么是个人征信?", + questionDetail: "征信记录了个人过去的信用行为,这些行为体现在个人信用报告中,就是人们常说的“信用记录”。信用记录将影响个人未来的经济活动。逾期还款、欠账、法院经济纠纷被起诉/被执行记录、信用卡违约等都会影响您的个人信用记录。" + }, + { + questionId: 10012, questionTitle: "哪些行为会影响个人信用记录?", questionDetail: "" + + "<p>一般来说,影响个人信用的主要有以下常见行为</p>\n" + + "<p>1.信用卡连续3次、累计6次逾期还款;</p>\n" + + "<p>2.房贷月供累计2至3个月逾期或不还款;</p>\n" + + "<p>3.车贷月供累计2至3个月逾期或不还款;</p>" + + "<p>4.贷款利率上调,仍按原金额支付月供,产生欠息逾期;</p>\n" + + "<p>5.水、电、燃气费不按时交款;</p>\n" + + "<p>6.个人信用卡出现套现的行为;</p>\n" + + "<p>7.助学贷款拖欠不还款;</p>\n" + + "<p>8.\"睡眠信用卡\"不激活也产生年费,不缴纳就会产生负面信用记录;</p>\n" + + "<p>9.信用卡透支消费、按揭贷款没有及时按期还款;</p>\n" + + "<p>10.为第三方提供担保时,第三方没有按时偿还贷款。</p>\n" + + "<p>11.个人信用报告还会记录法院部分经济类判决。因此,欠账等经济纠纷也会影响信用记录。</p>\n" + + "<p>12.手机扣费与银行卡扣费挂钩,在手机停用后没有办理相关手续,因欠月租费而形成逾期,也会造成不良记录;</p>\n" + + "<p>13.被别人冒用身份证或身份证复印件产生信用卡欠费记录。</p>\n" + + "<p>14.违建行为人信息纳入信用记录,对经多次催促仍不履行处罚决定的违法当事人采取征信手段,将其基本信息及违法事实提供给征信机构,由征信机构录入信用系统。</p>\n" + + "<p>15.交通失信行为分为三类:一般、较重、严重,一般失信以提醒、教育为主,较重、严重失信与评优评先、职业准入、个人信贷、车辆保险等挂钩。</p>\n" + }, + { + questionId: 10013, + questionTitle: "征信差对贷款有什么影响?【征信相关】", + questionDetail: "信用如果有污点会影响贷款额度,贷款成本也会提高。如果情节较重,您可能会无法在银行、小额贷款公司等金融机构申请贷款,具体规定每家金融机构各不相同。详细情况根据个人征信记录及金融机构资质判断决定。" + }, + { + questionId: 10014, questionTitle: "征信不好如何贷款呢?", questionDetail: "有以下建议提供给您:</br>\n" + + "1.可以跟征信中心联系,看是否符合人工消除不良记录的条件,如果符合,可以马上申请让他们帮你消除就可以了。因为每个人每两年有一次人工消除的机会;</br>\n" + + "2.有不良记录的借款人可以找第三方担保机构或个人,让他们协助办理贷款。如果自己的不良记录是不小心造成的,比如,因为一时疏忽而逾期还款1-2次的," + + "可以找银行代开非恶意逾期证明,凭借此证明再次到贷款银行进行贷款申请。" + + "但是,倘若借款人被纳入了征信系统黑名单,不良信用记录就要等到5年后才能被清除,之后才有机会到银行申请贷款。</br>" + }, + { + questionId: 10015, + questionTitle: "选填资料如果不填写,会不会对申请贷款有影响?", + questionDetail: "建议您尽可能按要求将资料提交完整,这有利于您获得较高的额度和成功率。若实在不方便提供资料可以跳过后续按要求补充。" + }, + { + questionId: 10016, + questionTitle: "如何提高贷款成功率/提高额度?", + questionDetail: "有很多方法可以提高您的贷款成功率,如:</br>\n" + + "1.多完成各种认证,包括身份、学历等等,投资者越了解贷款人信息则会越信任</br>\n" + + "2.必要资料务必上传完整。</br>\n" + + "3.贷款成功后准时还款,对于以后的贷款额度、成功率有直接影响。</br>\n" + + "其他包括各种第三方账号关联等,也都对您的信用等级提升会有帮助,有助您贷款审核通过。" + }, + { + questionId: 10017, + questionTitle: "审核时,会给我填的联系人打电话吗?", + questionDetail: "1.如果您申请的贷款产品是系统审核,则不会给您或您的联系人打电话;</br>\n" + + "2.如果您申请的贷款产品需要人工审核,可能会给您本人打电话,或给您的联系人打电话核实资料" + }, + { + questionId: 10018, + questionTitle: "申请之后多久可以知道审核结果?", + questionDetail: "申请通过后会进入放款流程,每款产品的放款时间依据不同金融机构、不同产品审核流程时长各不相同,具体审核时间以申请产品为准。" + }, + { + questionId: 10019, + questionTitle: "为什么我的贷款申请被拒?", + questionDetail: "1. 18岁以下的未成年人,首先没有完全民事行为能力,其次一般也没有稳定收入来源,给未成年人贷款存在法律和还款双重风险,正规金融平台都会拒绝未成年人贷款。</br>\n" + + "2.申请资料不全或不实\n" + + "网上贷款方便、快捷的同时,也导致了很多人粗心大意或者不当回事。贷款条件要求未仔细审查,申请资料填写不完整。申请资料是贷款平台了解借款人情况的重要一环,资料填写不完善,出现错误甚至被发现造假,贷款会被拒绝。所以填贷款资料时一定要仔细。</br>\n" + + "3.申请贷款类型和个人身份不符\n" + + "不同贷款产品对贷款人群都有特定限制,请您按要求申请。有些额度较高的贷款产品,会要求借款人有信用卡、有车、有房等等,如果满足不了条件,也会导致申请被拒。</br>\n" + + "4.个人信用有污点\n" + + "这里的信用包括两个方面:一是个人征信,二是日常借钱偿还钱情况。个人征信以央行征信为依据,个人征信有污点可能会被拒绝。也可能会调查借款人在其他网贷平台借款情况,发现恶意逾期,再申请贷款也会被拒绝。\n" + + "除此之外,收入过低、负债过高、手机号使用时间过短等也会影响贷款。\n" + + "如果多家贷款平台申请贷款都被拒绝,不妨看看是否存在这些问题。解决了存在的问题之后,再去申请贷款就容易通过了。" + }, + { + questionId: 10020, + questionTitle: "申请通过后,钱多久可以到账?", + questionDetail: "申请通过后会进入放款流程,每款产品的放款时间依据不同金融机构、不同产品放款流程时长各不相同,具体到款时间以申请产品为准。" + }, + { + questionId: 10021, + questionTitle: "审批不通过下一次还能申请借款吗?", + questionDetail: "当然可以,纷领钱包诚挚为每位客户服务,若您申请不幸被拒,仍有需要欢迎再次提出申请,具体要求以产品为准。\n" + + "温馨提示:请您按产品要求条件及资料提交申请,才能提高通过率哦~" + }, + { + questionId: 10022, + questionTitle: "申请金额及期限与审批不符?", + questionDetail: "待您提交申请后,我们会根据您的个人资料完善情况、借款周期及第三方征信结果,综合匹配出适用于您本人的贷款额度、期限,每个客户都会略有差异。" + }, + { + questionId: 10023, + questionTitle: "提前还款利息怎么计算?", + questionDetail: "纷领钱包平台产品分为可提前还款与不可提前还款两类,其中可提前还款类产品也有提前还款不减免利息及减息两种情况,具体利息计算方式您可以仔细查看意向产品详情。" + }, + { + questionId: 10024, questionTitle: "逾期还款会有什么影响?", questionDetail: "1.逾期还款会产生罚息并进行催收。</br>\n" + + "2.会造成不良信用记录影响您的征信情况,甚至造成无法继续借款等不良后果。\n" + + "为了维护您的信用,请您按时还款。" + }, + { + questionId: 10025, questionTitle: "防骗指南", questionDetail: "常见的违规交易方式有:</br>\n" + + "1.线下还款:出借方私下要求借款方通过红包、转账(包括借贷宝转账)、支付宝等方式进行还款。</br>\n" + + "2.押金返利(借一压一):出借方要求借款方发2笔借款标的,再让借款方通过红包、转账等方式转回做为押金,到期后借款人则需偿还2笔借款。</br>\n" + + "3.高利贷:出借方要求借款方通过线下返利或线下押金等使得借款实际利率高于国家规定的最高限制(目前规定最高年利率为24%)。" + } + ] + } + }, + methods: {}, + activated() { + this.$store.commit('UPDATE_DIRECTION', {direction: 'in'}); + let _questionId = this.$route.params.questionId; + for (let i = 0; i < this.questionDetails.length; i++) { + if (this.questionDetails[i].questionId == _questionId) { + this.questions = {...this.questionDetails[i]}; + } + } + }, + deactivated() { + this.$store.commit('UPDATE_DIRECTION', {direction: 'none'}); + } + } +</script> +<style lang="less"> + @import "../../style/mixin.less"; + + .questiondetail-page { + background-color: @color-background-default; + .vux-header { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + .vux-header-title { + font-size: 18px; + } + .vux-header-left { + .left-arrow:before { + border: solid 1px @color-white; + border-width: 2px 0 0 2px; + } + } + } + .question-box { + height: 44px; + line-height: 44px; + .ellipsis(); + .flexLayout(flex-start, center, row); + background-color: @color-white; + border-bottom: solid 1px @color-divider-regular; + font-size: @font-size-small; + padding: 0 12px 0 12px; + .iconfont { + color: @color-primary; + font-size: @font-size-large; + } + .icon-ask:before { + font-size: 20PX; + } + span { + font-size: @font-size-medium; + } + } + .question-boxdetail { + font-size: @font-size-small; + background-color: @color-white; + border-bottom: transparent; + padding: 15px 8px 20px 8px; + color: @color-text-third; + } + .questioncustomer { + height: 44px; + font-size: @font-size-base; + .vux-no-group-title { + margin-top: 10px; + font-size: @font-size-medium; + .weui-cell { + padding: 15PX 15PX; + .vux-cell-bd { + .vux-label { + font-size: @font-size-medium; + } + } + } + } + } + } +</style> diff --git a/src/views/mine/register.vue b/src/views/mine/register.vue new file mode 100644 index 0000000..458a082 --- /dev/null +++ b/src/views/mine/register.vue @@ -0,0 +1,527 @@ +<template> + <div class="register-page" :style="styleObject"> + <x-header :left-options="{showBack: true, backText: '', preventGoBack:true}" + :title="headerTitle" + @on-click-back="goBackPage"></x-header> + <div class="pagebody"> + <div class="register-portrait"> + <div class="register-head-portrait"> + <img :src="loginLogo"> + </div> + </div> + <group class="register-input" label-width="73px"> + <x-input title="手机号" + name="mobile" + type="tel" + v-model="userObj.mblNo" + :min="11" + :max="11" + :novalidate="true" + placeholder="请输入手机号码" + keyboard="number"></x-input> + <x-input title="密码" + name="password" + :type="pwdType" + v-model="userObj.password" + :min="8" :max="16" + :novalidate="true" + onpaste="return false" + oncopy="return false" + placeholder="请输入8-16位数字字母组合密码"> + <i slot="right" v-show="pwdType=='text'" class="iconfont icon-eye" @click="showPassword"></i> + <i slot="right" v-show="pwdType=='password'" class="iconfont icon-hide" @click="showPassword"></i> + </x-input> + <x-input title="验证码" + v-model="userObj.verificationCode" + name="verCode" + type="tel" + placeholder="请输入验证码" + keyboard="number" + :min="4" :max="4" + :novalidate="true"> + <span slot="right" class="getverCode" @click="checkAferThreeTimes">{{codeButText}}</span> + </x-input> + </group> + <div class="input-btnbox"> + <FButton :text="'注册'" @on-click-button="handleRegister"></FButton> + </div> + <div class="input-other"> + <span> + 注册即视为同意 + <span @click="handlerClickAgreement">《注册协议》</span> + </span> + <span @click="toLogin">登录</span> + </div> + </div> + <!-- 图形验证码 --> + <div v-transfer-dom> + <confirm + v-model="showImageCode" + :title="'输入图形验证码'" + @on-confirm="onConfirm" + @on-hide="onHide"> + <slot> + <input ref="imgcode" v-model="imgCode" maxlength="4" + style="height: 28px;width: 90px;border:1px solid #999;"/> + <img style="width: 76px; position: relative;top: 10px;" :src="imgCodeUrl" @click="getImgCodeAgain"/> + </slot> + </confirm> + </div> + <!-- 倒计时 --> + <div class="register-mask" v-if="registerTip"></div> + <div class="register-countdown" v-if="registerTip">{{ '注册成功' + registerCountdown + 's后跳转' }}</div> + <!-- 协议弹窗 --> + <div class="agreement-content" v-if="isShowAgreementContent"> + <div v-html="agreementContent"></div> + </div> + </div> +</template> + +<script> + import { + XButton, + XInput, + Group, + cookie, + Flexbox, + FlexboxItem, + XHeader, + TransferDomDirective as TransferDom, + Confirm + } from 'vux'; + import FButton from '../../components/common/FButton'; + import SystApi from '../../api/api'; + import validate from '../../tool/validator'; + import IDValidator from '../../tool/IDValidator'; + import {md5} from 'vux'; + import {mapState} from 'vuex'; + import statusCodeManage from '../../api/statusCodeManage'; + /** + * Created by z.x.q on 2018/3/22. + * 我的--注册 + */ + export default { + name: 'f-register', + components: { + XButton, XInput, Group, FButton, XHeader, Confirm, cookie + }, + directives: { + TransferDom + }, + data(){ + return { + loginLogo: '', + headerTitle: '注册', // 头部title + agreementContent: '', // 协议的内容 + isShowAgreementContent: false, + styleObject: { + overflow: 'initial', + minHeight: '100%', + height: 'auto' + }, + pwdType: "password", + showImageCode: false,//显示图形验证码界面 + imgCode: '',//图形验证码对应的值 + imgCodeUrl: '',//图形验证码路径 + userObj: { + mblNo: '', + password: '', + confirmPwd: '', + verificationCode: '' + }, + clearID: null,//获取验证码倒计时的定时器 + codeButText: '获取验证码',//倒计时显示的文字 + abledClick: true,//是否可以点击发送验证码 + registerTip: false,//自动登录的tip + registerCountdown: 3, + } + }, + methods: { + // 显示协议内容 + handlerClickAgreement() { + let _this = this; + this.styleObject = { + overflow: 'hidden', + minHeight: '100%', + height: '100%' + }; + this.headerTitle = '注册协议'; + SystApi.getAgreementContent().then(function (response) { + _this.agreementContent = response; + _this.isShowAgreementContent = true; + }).catch(function (error) { + statusCodeManage.showTipOfStatusCode(error,_this); + }); + }, + //注册 + handleRegister() { + let _this = this; + if (validate.checkValEmpty(this.userObj.mblNo)) { + this.$vux.toast.text('请输入手机号', 'middle'); + return; + } + if (validate.checkValEmpty(this.userObj.verificationCode)) { + this.$vux.toast.text('请输入验证码', 'middle'); + return; + } + if (validate.checkValEmpty(this.userObj.password)) { + this.$vux.toast.text('请设置密码', 'middle'); + return; + } + if (!validate.checkPhone(this.userObj.mblNo)) { + this.$vux.toast.text('请输入正确的手机号', 'middle'); + return; + } + if (!validate.checkDynamicCode(this.userObj.verificationCode)) { + this.$vux.toast.text('请输入正确的验证码', 'middle'); + return; + } + if (!validate.checkPassword(this.userObj.password)) { + this.$vux.toast.text('请设置8-16位字母数字组合密码', 'middle'); + return; + } + let tmpPassword = md5(this.userObj.mblNo + this.userObj.password); + SystApi.register({ + mblNo: this.userObj.mblNo, + password: tmpPassword, + confirmPwd: tmpPassword, + verificationCode: this.userObj.verificationCode, +// referralCode: this.invitationCode + }).then(response => { + if (response.errorCode === 0) { + this.registerTip = true; + this.autoLogin(tmpPassword); + // 登录倒计时3 秒 + function registerCountdown() { + let timeId = setTimeout(function () { + // 1秒的时候,就倒计时停止,进行跳转 + if (_this.registerCountdown === 1) { + _this.registerTip = false; + // /prodInfo?id=50000095&cn=dRbq8m + let _url = window.sessionStorage.getItem('newBackPage'); + try { + clearInterval(_this.clearID); + _this.codeButText = '获取验证码'; + } catch (e) { + + } + // 在产品详情页 ,信用卡详情页 首页的值往回跳转 + let _path = window.sessionStorage.getItem('newGoBackPage'); + if (_path) { + window.location.href = window.location.pathname +'#'+_path; + } + clearTimeout(timeId); + return false; + } else { + _this.registerCountdown--; + registerCountdown(); + } + }, 1000); + } + registerCountdown(); + } + }, err => { + statusCodeManage.showTipOfStatusCode(err, _this); + }); + }, + //自动登录 + autoLogin: function (tmpPassword) { + let _this = this; + SystApi.userLogin({mblNo: this.userObj.mblNo, password: tmpPassword}).then(response => { + window.sessionStorage.setItem('newSid', response.body.sessionId); + window.sessionStorage.setItem('newPhoneNum', response.body.account); + window.sessionStorage.setItem('newClientState', response.body.isClient); + this.$store.commit('UPDATE_SESSION_ID', {sid: response.body.sessionId}); // 更新sid + }, err => { + statusCodeManage.showTipOfStatusCode(err,_this); + }) + }, + checkUserName() { + if (validate.checkValEmpty(this.userObj.mblNo)) { + this.$vux.toast.text('请输入手机号', 'middle'); + return false; + } else if (!validate.checkPhone(this.userObj.mblNo)) { + this.$vux.toast.text('请输入正确的手机号', 'middle'); + return false; + } else { + return true; + } + }, + //获取验证码 + checkAferThreeTimes () { + let _this = this; + const _userNameState = this.checkUserName(); + if (!_userNameState) { + return false; + } + let _times = cookie.get('ecImageCodeNum'); + _times = parseInt(_times); + if (_times <= 0) { + _this.imgCodeUrl = '/commerce/user/imageCode?mblNo=' + _this.userObj.mblNo + '&' + new Date(); + _this.showImageCode = true; + } else { + cookie.set('ecImageCodeNum', _times -= 1); + this.sendCode(); + } + }, + //点击图形验证码再次获取验证码 + getImgCodeAgain () { // 发送图形验证码 + this.imgCodeUrl = '/commerce/user/imageCode?mblNo=' + this.userObj.mblNo + '&' + new Date(); + }, + //提交图形验证码 + onConfirm(){ + let _this = this; + if (validate.checkValEmpty(_this.imgCode)) { + this.$vux.toast.text('请输入图片验证码', 'middle'); + return; + } + if (_this.imgCode.length !== 4) { + this.$vux.toast.text('验证码错误', 'middle'); + return; + } + SystApi.checkImageCode({imageCode: _this.imgCode, mblNo: _this.userObj.mblNo}).then(function (res) { + if (res.errorCode === 0) { + _this.sendCode(); + } + }, function (error) { + if (error.response) { + statusCodeManage.showTipOfStatusCode(error,_this); + } + }); + }, + //发送验证码 + sendCode () { // 发送验证码 + if (!this.abledClick) { + return; + } + let _this = this; + this.abledClick = false; + // 防止快速点击,事件触发多次,倒计时出现错误 + let countDown = 60; + _this.codeButText = countDown + 's后重发'; + this.clearID = setInterval(function () { + countDown--; + _this.codeButText = countDown + 's后重发'; + if (countDown === 0) { + clearInterval(_this.clearID); + _this.codeButText = '重新获取'; + _this.abledClick = true; + } + }, 1000); + let _par = {mblNo: this.userObj.mblNo, verCodeType: 0}; + SystApi.getVerCode(_par).then(function (res) { + if (res.errorCode === 0) { + } + }, function (error) { + if (error.response) { + clearInterval(_this.clearID); + _this.codeButText = '重新发送验证码'; + _this.abledClick = true; + } + statusCodeManage.showTipOfStatusCode(error,_this); + }); + }, + //隐藏图形验证码弹窗 + onHide(){ + this.imgCode = ''; + }, + //切换为登录 + toLogin(){ + clearInterval(this.clearID); + this.codeButText = '获取验证码'; + this.$router.push({name: 'f-login'}) + }, + //显示-隐藏密码 + showPassword(){ + if (this.pwdType == "password") { + this.pwdType = "text"; + } + else { + this.pwdType = "password"; + } + }, + goBackPage: function () { + try { + clearInterval(this.clearID); + this.codeButText = '获取验证码'; + } catch (e) { + + } + // 点击返回,使注册协议消失 + if (this.isShowAgreementContent) { + // 协议弹窗内容点击返回时 + this.isShowAgreementContent = false; + this.headerTitle = '注册'; + this.styleObject = { + overflow: 'initial', + minHeight: '100%', + height: 'auto' + }; + } else { + this.$router.back(); + } + }, + }, + computed: { + ...mapState({ + cn: state => state.vux.cn + }) + }, + activated(){ + this.$store.commit('UPDATE_DIRECTION', {direction: 'in'}); + this.headerTitle = '注册'; + this.agreementContent = ''; + this.isShowAgreementContent = false; + this.styleObject = { + overflow: 'initial', + minHeight: '100%', + height: 'auto' + }; + this.pwdType = "password"; + this.showImageCode = false; + this.imgCode = ''; + this.imgCodeUrl = ''; + this.userObj.mblNo = ''; + this.userObj.password = ''; + this.userObj.confirmPwd = ''; + this.userObj.verificationCode = ''; + this.clearID = null; + this.codeButText = '获取验证码'; + this.abledClick = true; + this.registerTip = false; + this.registerCountdown = 3; + let prodConfig = JSON.parse(window.localStorage.getItem('newProdConfig')); + this.loginLogo = prodConfig.logoPath; + }, + deactivated () { + this.$store.commit('UPDATE_DIRECTION', {direction: 'none'}); + } + + } +</script> + +<style lang="less"> + @import "../../style/mixin.less"; + .register-page{ + .vux-header{ + .color-linear-gradient(@color-primary-light,@color-primary,90deg); + .vux-header-title{ + font-size: 18px; + } + .vux-header-left { + .left-arrow:before { + border: solid 1px @color-white; + border-width: 2px 0 0 2px; + } + + } + } + .pagebody { + padding: 0 12px 0 12px; + .register-portrait { + height: 150px; + .flexLayout(center, center, column); + .register-head-portrait { + width: 84px; + height: 84px; + border-radius: @border-radius-normal-size; + overflow: hidden; + img { + width: 100%; + height: 100%; + } + } + } + .register-input { + .weui-cells { + margin: 0; + .weui-cell { + height: 23px; + border: 1px solid @color-disabled; + border-radius: @border-radius-normal-size; + margin-bottom: 10px; + font-size: @font-size-base; + .weui-cell__ft { + .getverCode { + padding-left: 10px; + display: inline-block; + color: @color-primary; + border-left: 1px solid @color-divider-regular; + } + } + } + .weui-cell:before { + display: none; + } + + } + .weui-cells:before { + display: none; + } + .weui-cells:after { + display: none; + } + } + .f-button { + width: 100%; + } + .input-other { + font-size: @font-size-medium; + .flexLayout(space-between, center, row); + span { + &:first-child { + color: @color-text-third; + span { + color: @color-primary; + } + } + &:nth-child(2) { + color: @color-primary; + } + } + } + } + .register-mask { + position: fixed; + left: 0; + right: 0; + top: 0; + bottom: 0; + width: 100%; + height: 100%; + background: rgba(17, 17, 17, 0.4); + } + .register-countdown { + position: fixed; + bottom: 50px; + left: 50%; + top: 50%; + padding: 8px 20px; + line-height: 20px; + height: 20px; + color: #fff; + text-align: center; + border-radius: 5px; + transform: translateY(-50%); + transform: translateX(-50%); + background: rgba(17, 17, 17, 0.7); + z-index: 100; + } + /*协议弹窗*/ + .agreement-content { + position: fixed; + left: 0; + top: 46px; + bottom: 0; + right: 0; + z-index: 10; + width: 100%; + height: 100%; + overflow-y: scroll; + padding: 20px 20px 66px; + box-sizing: border-box; + background: #fff; + } + } + +</style> diff --git a/src/views/mine/setting.vue b/src/views/mine/setting.vue new file mode 100644 index 0000000..186466d --- /dev/null +++ b/src/views/mine/setting.vue @@ -0,0 +1,165 @@ +<template> + <div class="setting"> + <x-header + :left-options.showBack="{backText: ''}" + :title="'设置'" + ></x-header> + <Group> + <cell title="修改密码" v-if="showBtn" :is-link="true" link="/f-update-password"></cell> + <!--<cell title="给予评价" :is-link="true"></cell>--> + <!--<cell title="关于我们" :is-link="true"></cell>--> + <cell title="当前版本" v-if="showVer" @click.native="alertUpdata">{{appVer}}</cell> + + </Group> + <FButton v-if="showBtn" text="退出登录" class="btn" @click.native="logoutFn"></FButton> + </div> +</template> +<script> + /** + * Created by 吴彦祖 on 2018/4/2. + * 我的--设置 + */ + import FButton from '../../components/common/FButton.vue' + import { Group , Cell , XHeader, Alert,XButton} from 'vux'; + import sysApi from '../../api/api'; + import statusCodeManage from '../../api/statusCodeManage'; + export default { + name: 'f-setting', + components:{ + XHeader, + Group, + Cell, + FButton, + Alert, + XButton + }, + data(){ + return { + toChangePwd:'', + appVer:'V 1.0.0', + showBtn:false, + showVer:true + } + }, + methods:{ + logoutFn(){ + sysApi.logout().then( + res=>{ + window.sessionStorage.removeItem('newClientState'); + window.sessionStorage.removeItem('newPhoneNum'); + window.sessionStorage.removeItem('newSid'); + this.$router.push({name:'/f-main'}); + }, + err=>{ + statusCodeManage.showTipOfStatusCode(err,this); + } + ) + } + }, + activated(){ + this.$store.commit('UPDATE_DIRECTION', {direction: 'in'}); + let sid=window.sessionStorage.getItem('newSid'); + let clientInfo=JSON.parse(window.localStorage.getItem('newClientInfo')); + if(clientInfo.cn){ + this.showVer=false; + }else{ + this.showVer=true; + } + if(sid){ + this.showBtn=true; + }else{ + this.showBtn=false; + } + }, + deactivated () { + this.$store.commit('UPDATE_DIRECTION', {direction: 'none'}); + } + } +</script> +<style lang="less"> + @import '../../style/mixin.less'; + .setting{ + background-color: @color-background-default; + .vux-header { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + .vux-header-title { + font-size: 18px; + } + .vux-header-left { + .left-arrow:before { + border: solid 1px @color-white; + border-width: 2px 0 0 2px; + } + } + } + .weui-cells{ + margin-top:10px; + } + .vux-label{ + font-size:@font-size-base; + color: @color-text-primary; + } + .weui-btn:after{ + display: none; + } + + + /*.weui-dialog{*/ + /*width:240px;*/ + /*height:346px;*/ + /*background-image: url("../../assets/img/wechat.png");*/ + /*background-size:240px 346px;*/ + /*border-radius:7.5PX;*/ + /*overflow: visible;*/ + /*}*/ + /*.weui-dialog__hd{*/ + /*display: none;*/ + /*}*/ + /*.weui-dialog__bd{*/ + /*width:100%;*/ + /*height:100%;*/ + /*position: relative;*/ + /*box-sizing: border-box;*/ + /*img{*/ + /*width:83px;*/ + /*height:83px;*/ + /*position: absolute;*/ + /*left:50%;*/ + /*bottom:10px;*/ + /*margin-left: -42px;*/ + /*}*/ + /*.close-icon{*/ + /*width:83px;*/ + /*height:83px;*/ + /*position: absolute;*/ + /*left:50%;*/ + /*bottom:-82px;*/ + /*margin-left: -42px;*/ + /*span:after{*/ + /*content:"";*/ + /*border-right: 1PX solid #ffffff;*/ + /*font-size:20PX;*/ + /*}*/ + /*i{*/ + /*display: block;*/ + /*font-size:25PX;*/ + /*color: #ffffff;*/ + /*}*/ + /*}*/ + /*}*/ + /*.weui-dialog__ft{*/ + /*display: none;*/ + /*}*/ + /*.f-button-alert{*/ + /*width:110px;*/ + /*height: 33px;*/ + /*font-size: 14PX;*/ + /*background-color: #fff000 !important;*/ + /*color: #0092f1;*/ + /*position: absolute;*/ + /*left:50%;*/ + /*top:189px;*/ + /*margin-left: -55px;*/ + /*}*/ + } +</style> diff --git a/src/views/mine/updatePassword.vue b/src/views/mine/updatePassword.vue new file mode 100644 index 0000000..6dafe80 --- /dev/null +++ b/src/views/mine/updatePassword.vue @@ -0,0 +1,206 @@ +<template> + <div class="update-page"> + <x-header :left-options="{backText: ''}" class="gradient-color">修改密码</x-header> + <group class="update-input" label-width="73px"> + <x-input title="原密码" + placeholder="请输入原密码" + :min="8" + :max="16" + :type="showPwd1" + :novalidate="true" + v-model="oldPassword"> + <i slot="right" @click="changePwd(1)" class="iconfont" + :class='{"icon-eye":showPwd1=="text","icon-hide":showPwd1=="password"}'></i> + </x-input> + <x-input title="新密码" + :type="showPwd2" + v-model="newPassword" + :min="8" + :max="16" + :novalidate="true" + placeholder="请输入密码" + class="password"> + <i slot="right" @click="changePwd(2)" class="iconfont" + :class='{"icon-eye":showPwd2=="text","icon-hide":showPwd2=="password"}'></i> + </x-input> + <x-input title="确认密码" + :type="showPwd3" + v-model="confirmPassword" + :novalidate="true" + :min="8" + :max="16" + placeholder="请再次确认密码" + class="password"> + <i slot="right" @click="changePwd(3)" class="iconfont" + :class='{"icon-eye":showPwd3=="text","icon-hide":showPwd3=="password"}'></i> + </x-input> + </group> + <FButton :text="'确认修改'" @on-click-button="changeBut"></FButton> + </div> +</template> + +<script> + import {XButton, XInput, Group, Flexbox, FlexboxItem, XHeader, md5} from 'vux'; + import FButton from'../../components/common/FButton'; + import validate from '../../tool/validator'; + import SysApi from '../../api/api'; + import statusCodeManage from '../../api/statusCodeManage'; + import initData from '../../tool/initData'; + /** + * Created by z.x.q on 2018/3/22. + * 我的--登录 + */ + export default { + name: 'f-update-password', + components: { + XButton, XInput, Group, Flexbox, FlexboxItem, FButton, XHeader + }, + data(){ + return { + showPwd1: 'password', + showPwd2: 'password', + showPwd3: 'password', + oldPassword: '', + newPassword: '', + confirmPassword: '' + } + }, + methods: { + changePwd(which){ + if (this[`showPwd${which}`] === 'password') { + this[`showPwd${which}`] = 'text'; + } else { + this[`showPwd${which}`] = 'password'; + } + }, + changeBut(){ + if (validate.checkValEmpty(this.oldPassword)) { + this.$vux.toast.text('请输入原密码', 'middle'); + return; + } + if (validate.checkValEmpty(this.newPassword)) { + this.$vux.toast.text('请输入新密码', 'middle'); + return; + } + if (validate.checkValEmpty(this.confirmPassword)) { + this.$vux.toast.text('请输入确认密码', 'middle'); + return; + } + if (!validate.checkPassword(this.oldPassword)) { + this.$vux.toast.text('请输入正确的密码', 'middle'); + return; + } + if (!validate.checkPassword(this.newPassword)) { + this.$vux.toast.text('请设置8-16位数字+字母组合密码', 'middle'); + return; + } + if (!validate.checkPassword(this.confirmPassword)) { + this.$vux.toast.text('请输入正确的确认密码', 'middle'); + return; + } + if (this.newPassword !== this.confirmPassword) { + this.$vux.toast.text('新密码与确认密码不同', 'middle'); + return; + } + let mblNo = window.sessionStorage.getItem('newPhoneNum'); + let obj = { + mblNo: mblNo, + oldPassword: md5(mblNo + this.oldPassword), + newPassword: md5(mblNo + this.newPassword) + }; + SysApi.editPwd(obj).then( + res => { + this.$vux.toast.show({ + width: '80%', + type: 'text', + text: '修改成功', + time: 1500, + position: 'middle', + onHide: () => { + window.sessionStorage.removeItem('newSid') + window.sessionStorage.removeItem('newPhoneNum') + window.sessionStorage.removeItem('newClientState') + this.$router.push({name: 'f-login'}); + + } + }) + }, + err => { + statusCodeManage.showTipOfStatusCode(err, this); + } + ) + } + }, + activated () { + this.$store.commit('UPDATE_DIRECTION', {direction: 'in'}); + }, + deactivated(){ + this.$store.commit('UPDATE_DIRECTION', {direction: 'none'}); + this.showPwd1 = this.showPwd2 = this.showPwd3 = 'password'; + initData(['oldPassword', 'newPassword', 'confirmPassword'], this); + } + } +</script> + +<style lang="less" rel="stylesheet/less"> + @import "../../style/mixin.less"; + + .update-page { + background-color: @color-background-default; + .vux-header { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + .vux-header-title { + font-size: 18px; + } + .vux-header-left { + .left-arrow:before { + border: solid 1px @color-white; + border-width: 2px 0 0 2px; + } + } + .vux-header-right { + color: @color-white !important; + } + } + .update-input { + .weui-cells { + margin-top: 0; + background-color: @color-background-default; + .weui-cell { + height: 23px; + background-color: @color-white; + border-bottom: 1px solid @color-disabled; + font-size: @font-size-base; + &:last-child { + border-bottom: transparent; + } + &:first-child { + margin-top: 10px; + } + } + .weui-cell:before { + display: none; + } + } + .weui-cells:before { + display: none; + } + .weui-cells:after { + display: none; + } + } + .input-other { + font-size: @font-size-medium; + .flexLayout(space-between, center, row); + span { + &:first-child { + color: @color-text-secondary; + } + &:nth-child(2) { + color: @color-primary; + } + } + } + } + +</style> diff --git a/src/views/news/index.vue b/src/views/news/index.vue new file mode 100644 index 0000000..a2601b8 --- /dev/null +++ b/src/views/news/index.vue @@ -0,0 +1,158 @@ +<template> + <div class="news-page"> + <!--轮播--> + <swiper auto + height="214px" + :show-dots="true" + v-if="swiperList.length"> + <swiper-item v-for="(item, index) in swiperList" + :key="index" + @click.native="handleBannerJump(item)"> + <img :src="item.context" class="swiperImg"> + <p class="swiper-item-title">{{item.name}}</p> + </swiper-item> + </swiper> + <!--下拉列表--> + <newsList :newsList="newsList" @on-click-news="handleNewsJump"></newsList> + <FSpace type="large"></FSpace> + <!--footer--> + <FFooter :index="2"></FFooter> + </div> +</template> +<script> + /** + * Created by z.x.q on 2018/3/22. + * 资讯首页 + */ + import {XButton, Flexbox, FlexboxItem, Swiper, SwiperItem} from 'vux'; + import newsList from '../../components/NewsList'; + import FFooter from '../../components/common/FFooter.vue'; + import FSpace from '../../components/common/FSpace.vue'; + import sysApi from '../../api/api'; + import statusCodeManage from '../../api/statusCodeManage'; + + export default { + name: 'f-news', + components: { + newsList, + Swiper, + SwiperItem, + FSpace, + FFooter + }, + data() { + return { + swiperList: [], + newsList: [], // 资讯列表信息 + detailContent: '', // 资讯条目的内容 + } + }, + methods: { + // 初始化页面信息 + init() { + let _this = this; + sysApi.fetchNewsList({}).then((res) => { + _this.swiperList = res.body.banners; + _this.newsList = res.body.information; + }, (error) => { + statusCodeManage.showTipOfStatusCode(error, _this); + }); + }, + // banner的类型跳转 + // 1:为导航页面, 2:为分类页面, 3:为产品页面, 4:为第三方网页, 5:为空白不反应 + // detailContent, 跳转地址,有type 来决定是否使用跳转 + handleBannerJump(item) { + switch (item.type) { + case 1: + //跳转到对应的导航页面 + this.$router.push({path: item.detailContent}); + break; + case 2: + //跳转到对应的贷款分类 + this.$router.push({path: item.detailContent}); + break; + case 3: + //跳转到贷款详情,需要产品ID + if (item.prodTypeId === 40000005) { + this.$router.push({path: '/f-loan-detail', query: {id: item.detailContent}}); + } else if (item.prodTypeId === 40000006) { + this.$router.push({path: '/f-loan-detail', query: {id: item.detailContent}}); + } else if (item.prodTypeId === 40000007) { + this.$router.push({path: '/f-credit-detail', query: {id: item.detailContent}}); + } + break; + case 4: + //第三方页面 + window.location.href = item.detailContent; + break; + case 5: + //什么都不做 + break; + case 6: + //资讯 + this.$router.push({path: '/f-news-detail',query:{id:item.detailContent}}); + break; + default: + break; + } + }, + // 资讯的跳转 + handleNewsJump(item) { + // 2 我们后台创建的文章 + // 1 类型(1为跳转第三方,2为内容直接展示) + if (item.type === 1) { + // 获取资讯的详情, detailContent内容,有可能是地址,有可能是 html 代码片段 + sysApi.fetchNewsDetail({noticeId: item.id}).then((res) =>{ + window.location.href = res.body.detailContent; + }, (error)=>{ + statusCodeManage.showTipOfStatusCode(error); + }); + } else if (item.type === 2) { + // 返回html片段,跳转到我们的页面 + this.$router.push({ + path: '/f-news-detail',query:{id:item.id} + }); + } + } + }, + activated: function () { + this.init(); + } + } +</script> +<style lang="less"> + @import "../../style/mixin.less"; + + .news-page { + background: @color-white; + .vux-swiper-item { + img { + width: 100%; + height: 100%; + } + .swiper-item-title { + position: relative; + width: 250px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + top: -34px; + left: 12px; + color: @color-white; + font-size: @font-size-medium; + } + } + .vux-indicator { + a { + .active { + background-color: @color-white !important; + } + } + } + .vux-icon-dot { + width: 5px !important; + height: 5px !important; + border-radius: 50% !important; + } + } +</style> diff --git a/src/views/news/newsDetail.vue b/src/views/news/newsDetail.vue new file mode 100644 index 0000000..f9bcd8d --- /dev/null +++ b/src/views/news/newsDetail.vue @@ -0,0 +1,110 @@ +<template> + <div class="news-detail-page"> + <x-header + :left-options.showBack="{backText: ''}" + :title="'资讯'" + ></x-header> + <div style="margin: auto 12px"> + <div v-text="newsTitle" class="article_title"></div> + <div class="newsInformation_List"> + <span class="new-style-test-article-publish-time" v-text="newsAuthor"></span> + <span class="new-style-test-article-publish-time" style="margin-left: 20px" v-text="formatTime(newsCreateTime)">asdasdasd</span> + </div> + <div class="newsContent" style="font-size:130%;width: 100%;word-break: break-all;word-wrap: break-word;" v-html="newsContent"></div> + </div> + </div> +</template> +<script> + /** + * Created by c.y on 2018/3/31. + * 资讯内容 + */ + import {XHeader,dateFormat} from 'vux'; + import sysApi from '../../api/api'; + import statusCodeManage from '../../api/statusCodeManage'; + + export default { + name: 'f-news-detail', + components: { + XHeader + }, + data() { + return { + newsContent: '', // 资讯内容 + newsTitle: '', // 资讯标题 + newsAuthor: '', // 资讯作者 + newsCreateTime: '', // 资讯时间 + } + }, + methods: { + init(newsId) { + let _this = this; + sysApi.fetchNewsDetail({noticeId: newsId}).then((res) => { + _this.newsContent = res.body.detailContent; + _this.newsTitle = res.body.title; + _this.newsAuthor = res.body.writer; + _this.newsCreateTime = res.body.pushTime; + }, (error) => { + statusCodeManage.showTipOfStatusCode(error, _this); + }); + }, + formatTime(dt){ + return dateFormat(dt,'YYYY-MM-DD'); + } + }, + activated: function () { + this.newsContent = ''; + this.newsTitle = ''; + this.newsAuthor = ''; + this.newsCreateTime = ''; + this.$store.commit('UPDATE_DIRECTION', {direction: 'in'}); + // 获取资讯的内容 + let newsId = this.$route.query.id; + this.init(newsId); + }, + deactivated: function () { + this.$store.commit('UPDATE_DIRECTION', {direction: 'none'}); + } + } +</script> +<style lang="less"> + @import '../../style/mixin.less'; + .news-detail-page{ + .vux-header { + .color-linear-gradient(@color-primary-light, @color-primary, 90deg); + .vux-header-title { + font-size: 18px; + } + .vux-header-left { + .left-arrow:before { + border: solid 1px @color-white; + border-width: 2px 0 0 2px; + } + } + } + .newsContent *{ + margin: auto; + } + .article_title { + margin-top: 12px; + color: #000; + font-size: 22px; + line-height: 1.45; + font-weight: 500; + } + .newsInformation_List{ + margin: 8px 0; + } + .new-style-test-article-publish-time { + + font-size: 11px; + color: #999; + vertical-align: top; + display: inline-block; + } + .newsContent ul li,.newsContent ol li{ + list-style-position:inside; + } + + } +</style> diff --git a/static/Idcardf.jpg b/static/Idcardf.jpg new file mode 100644 index 0000000..0a87b74 --- /dev/null +++ b/static/Idcardf.jpg Binary files differ diff --git a/static/Idcardz.jpg b/static/Idcardz.jpg new file mode 100644 index 0000000..440aa80 --- /dev/null +++ b/static/Idcardz.jpg Binary files differ diff --git a/static/agreement.html b/static/agreement.html new file mode 100644 index 0000000..8da5d1e --- /dev/null +++ b/static/agreement.html @@ -0,0 +1,78 @@ +<div id="wmd-preview" class="wmd-preview"> + <div class="md-section-divider"></div> + <p data-anchor-id="9g0s"> + <div style='text-align:center'>纷领钱包用户使用授权协议</div> + 欢迎您使用"纷领钱包"平台! <br><p> + <p>《"纷领钱包"用户使用授权协议》(以下简称本协议)由上海吉帑金融信息服务有限公司(以下简称“本公司”)及本公司合作第三方机构和您签订,本协议约定了本公司向您提供纷领钱包服务(以下简称“本服务”)的前提、双方权利义务及其他事项。您在本公司提供的纷领钱包平台 (以下简称"本平台")上或在本公司授权的第三方提供的网络页面上点击授权,以合理的理解表明您希望与本公司签订本协议的授权按钮(例如,按钮上书写“开通纷领钱包服务”或类似文字,且页面上同时列明了本协议的内容或者可以有效展示本协议内容的链接)、您实际使用纷领钱包服务或您与本公司以其它合理方式表明您与本公司订立了本协议时,即表明本协议在您与本公司之间成立并生效。 <br> + 一、 声明与承诺</p><p data-anchor-id="dbnt">1.1 本公司一贯重视消费者权益保护,本公司已对本协议中与您的权益有或可能有重大关系的条款及对本公司具有或可能具有免责或限制责任的条款用粗体字予以标注,请您务必注意。您理解并承诺,在您注册成为纷领钱包用户已接受本服务,或您以本公司允许的其他方式实际使用本服务前,您已充分阅读、理解并接受本协议的全部内容,您使用本平台服务,即表示您同意遵循本协议之所有约定。请您务必审慎阅读、充分理解各条款内容,特别是免除或限制本公司责任的相应条款,以及开通或使用某项服务的单独协议,并选择接受或不接受。除非您已阅读并接受本协议所有条款,否则您有权拒绝使用"纷领钱包"平台服务。您对本平台的注册登录、查看、实际使用本平台的服务等行为即视为您已阅读并同意受本协议的约束。 <br> + 1.2 权利归属。除非本平台另行声明,本平台内的所有产品、技术、软件、程序、数据及其他信息(包括网页、文字、图标、照片、图片、音频、视频、图表、色彩组合、版面设计等)的所有权利(包括版权、商标权、专利权、商业秘密及其他相关权益)均归纷领钱包服务提供者及/或其关联公司所有。未经纷领钱包服务提供者及/或其关联公司许可,任何人不得以包括通过机器人、蜘蛛等程序或者设备监视、复制、传播、展示、镜像、上载、下载等方式擅自使用纷领钱包内的任何内容。 <br> + 1.3本公司有权在必要时修改本协议条款。变更的原因包括但不限于国家法律、法规及其他规范性文件的规定变化,增加、变更了新的服务类型或服务方式,进一步明确协议双方的权利义务以及本平台服务的升级等。因本协议所涉服务的性质独特及服务用户数量众多,故本公司在对本协议内容进行变更时,不会另行单独通知您。您可以在相关服务页面查阅最新版本的条款。本协议条款变更后,如果您继续使用本平台服务,即视为您已接受修改后的协议。如果您不接受修改后的协议,有权停止使用本平台服务。 <br> + 1.4 您理解并同意,本协议规定的内容既包括《征信业管理条例》中征信业务所涉及的本公司提供的服务,亦包括本公司提供的其他服务,所以您应当对于《征信业管理条例》及相关法律法规有适当的了解,如您不能清楚地知晓或理解国家相关法律法规规定的内容,您应当咨询相关法律专业人士后再决定是否接受本协议。 <br> + 1.5您保证,在您同意接受本协议并注册成为纷领钱包用户时,您已经年满18周岁,具有完全民事行为能力;您是中华人民共和国(“中国”)大陆地区公民(不含香港、台湾、澳门地区);不具备前述条件的,您应立即终止注册或停止使用本服务。 <br> + 1.6 您同意,基于本协议,您的授权为免费授权,纷领金服无需因您的授权向您支付任何费用。 <br> + 二、平台服务介绍 <br> + 纷领钱包是一个提供多元化服务的综合平台,所有服务的开通都基于您本人自愿授权,本平台包括以下服务: <br> + 2.1 信用分服务 信用分是指对各种来源的信用信息去粗取精,在此基础上对受信方的个人状况(包括还款能力与还款意愿)做出综合评价,并以分数的形式将整理好的信用信息提供给信用活动参与者和相关方的一系列活动。本平台提供的信用分服务指基于您的授权,对您的用户信息以及第三方数据源机构进行采集、整理、加工、保存,并向您本人或者您授权的第三方金融机构提供该用户信息或基于该用户信息加工、整理的信用分服务。第三方金融机构结合该服务输出的结果与其他因素,自行判断您的信用水平和/或相关风险,其中,“整理和加工”包括但不限于对用户信息的内容和/或形式进行重新排列、结构化、格式化、标准化、脱敏化等方法。 <br> + 2.2 贷款信息服务 您可以向本平台合作的第三方金融机构(包括但不限于银行,金融消费公司)申请个人贷款产品/业务,用于满足您本人及家庭旅游、婚庆、教育、装修等贷款消费需求。 <br> + 2.3 理财信息服务 您可以向本平台合作的正规金融机构(包括但不限于银行,证券,基金,保险公司等)申请个人理财业务,用于满足您投资收益需求。 但本平台对您的实际收益不承担任何责任及风险。 <br> + 2.4 代扣代付服务 是指您在使用本平台其他具体业务服务或者其他生活缴费服务时,在具体业务场景下(即具体服务项目,下同)约定扣款付款条件,当触发扣款付款条件时,您授权本平台自动从您的纷领钱包账户余额或银行卡账户扣划相应款项或者支付相应款项,而无需您自己发起扣款或者支付指令。本协议所述银行卡账户代扣及相关条款仅适用于您本人名下的自然人用户,如果您是单位用户,则无法使用银行卡账户代扣服务。 <br> + 2.5短信提示服务,本服务的授权生效基于您申请注册纷领钱包用户账户。您注册申请纷领钱包用户账户,视为您同意本平台向您发送短信提示服务,包括但不限于短信验证、新产品介绍等提示服务。该服务为免费服务,不收取任何服务费用。 <br> + 2.6 其他服务 本公司以其他形式向您提供的其他服务。 <br> + 三、用户的主要权利与义务 <br> + 3.1 您确保在本平台登记的信息内容真实、完整、合法、有效,并自愿授权本平台根据您所填资料查询您的个人信息,包括但不限于公积金,社保等其他第三方信息渠道,生成信用分报告。 <br> + 3.2 您应妥善保管在本平台上创设的登录名和密码,并对所有以您的登录名进行的操作行为等行为负责。 <br> + 3.3 您应向本平台提供正确、完整、真实、合法及有效的个人信息注册申请资料,并根据实际变化情况及时更新,因注册资料有误引起的后果,由您自行承担。因为您的信息完全处于您的掌管之下,故本平台没有合理理由担负保证其有效、及时地接收到通知的义务,您应完全独自承担因信息没有及时更新致使您遭受的任何损失或增加任何费用等不利后果。您理解并同意,您有义务保持您提供信息的有效性,如有任何变更应及时在本平台进行更新,同时您应按本平台的要求进行相关操作。 <br> + 3.4 您的登录名、密码发生被盗、遗忘或者怀疑其他人知悉、盗用等可能导致您遭受损失的情形,应及时采取申请密码重置等措施,预防和避免他人冒用您本人账号登录本平台进行操作。 <br> + 3.5 您理解并同意:本服务使用过程中可能产生数据流量的费用,您需自行向运营商了解相关资费信息,并自行承担相关费用。 <br> + 3.6. 您承诺不得利用本平台用户账号进行如下行为: <br> + (1)侵害他人名誉权、肖像权、知识产权、商业秘密等合法权利的; <br> + (2) 填写和提交帐号注册与认证资料违反本协议规定,或申请认证资料与注册信息内容不一致,以及运营行为与注册或认证信息所公示身份无关的; <br> + (3)未能按照本平台业务流程注册和使用本服务,违反本服务功能限制或运营策略,或采取任何措施规避前述流程、限制或策略,干扰本平台正常运营的; <br> + (4)未经本平台书面许可使用插件、外挂或通过其他第三方工具、运营平台或任何服务接入本服务和相关系统的; <br> + (5)仿冒、混淆他人帐号昵称、功能介绍或制作内容等,或冒充、利用他人名义的; <br> + (6)未经本平台书面许可,自行或者授权、允许、协助任何第三人对信息内容进行非法获取、“非法获取”是指采用包括但不限于“蜘蛛”程序、爬虫程序、拟人程序等非真实用户或避开、破坏技术措施等非正常浏览的手段、方式、读取、复制、转存、获得数据和信息内容的行为。 <br> + (7)利用本平台用户账号从事任何违法犯罪活动的。 <br> + 四、本平台的主要权利与义务 <br> + 4.1在您注册登记授权后,允许本平台查询您的个人信息以及第三方信息渠道查询您的信息,生成信用报告。为了您正常使用本服务,使得本公司可以更全面、准确地记录、评估您的信用状况,在您使用本服务的全部期间,您授权本公司向可以合法提供您的用户信息的主体采集该等信息以及允许为您提供金融服务的机构返回您的相关业务信息至本平台。为了免除您重复授权的不便,您做出前述授权,表明前述信息提供者无需再逐一向您另行获取其向本公司提供您的信息的授权,该等信息提供者可以依您在本协议中的授权径行向本公司提供您的用户信息。 <br> + 4.2 您应确认您所输入的个人基本资料准确无误,以便本平台根据您的实际信息生产信用分。如果您输入的个人基本资料有误,所造成的一切不良后果均由您自行承担,本平台对此将不承担任何责任。 <br> + 4.3 您理解并同意,就信用分服务而言,您授权本公司可查询您的不良信息,信息提供者向本公司提供您的不良信息时,信息提供者应当对您进行通知(依照法律、行政法规规定公开的不良信息除外),但信息提供者未履行通知义务,或者已履行通知义务但未通知到您并不妨碍这些不良信息的提供,对此本公司不承担任何责任。 <br> + 4.4 为了保护您的合法权益,本公司不会采集您(作为个人用户)的宗教信仰、基因、指纹、血型、疾病和病史信息以及法律、行政法规规定禁止采集的其他个人信息。 <br> + 4.5 您在使用本平台时涉及的第三方提供产品或服务,本平台将与第三方共享您的用户信息,本平台对您与第三方可能出现的纠纷不承担任何责任。 <br> + 4.6 本平台对您贷款是否成功、贷款金额不提供任何形式的保证、证明,所有结果以第三方金融机构审批为准。您理解并同意,因本公司根据本协议并依法向第三方提供您的用户信息产生的任何后果和风险应由您自行承担,包括但不限于您的贷款申请被拒绝,您无法获得更优惠的交易条件、您的相关信息被他人不法利用。 <br> + 4.7 本平台对您理财收益和风险不提供任何形式的背书,理财收益及风险需要您本人自行承担责任,理财服务请您谨慎选择。 <br> + 4.8 您理解并同意,如您向本平台提交、绑定或授权您的银行卡信息/账户,本平台将可能: <br> + (1)查询并核对您的账户信息。 <br> + (2)查询并读取您银行卡账户中的交易信息。 <br> + (3)通过您所授权或绑定的银行卡账户进行代收与代付服务等。 <br> + 4.9 本平台承诺登记系统客观记录,保存您提交的个人信息,除非法律法规另有规定或本协议另有约定,本平台不对您的信息登记进行修改、补充、删除等任何变更操作。 <br> + 4.10 本平台就如何使用登记系统提供电话咨询服务,包括本平台合作第三方相关的业务咨询服务,但本平台提供的咨询信息不属于如何使用本平台登录操作系统的仅供您参考,本平台对您使用该类信息造成的任何不利后果不承担任何责任。 <br> + 4.11 因下列原因致使登记系统不能正常提供服务而可能导致的损失,本平台不承担责任: <br> + (1) 因台风、地震、海啸、洪水、战争等不可抗力因素,造成本平台不能正常执行业务; <br> + (2) 计算机病毒、黑客攻击、网络通信故障等本平台不能控制的因素; <br> + (3) 为了维护本平台的正常运行,会定期或不定期对平台进行相关设备的维护或检修,因此而造成登记服务在合理时间内中断的; <br> + (4)其他本平台无法控制或合理预见的情形。 <br> + 4.12 为保障您的信息安全,本平台将采取各种合理的物理、电子和管理方面的安全措施来保护您的信息,使您的信息不会被泄漏、 毁损或者丢失,包括但不限于SSL加密、信息加密存储、数据中心的访问控制。本平台对可能接触到您信息的员工或外包人员采取严格管理措施,包括但不限于根据岗位的不同分级控制权限,签署保密协议,监控操作情况等措施。 <br> + 4.13 在法律允许的情况下,本公司对于与本协议有关或由本协议引起的任何间接的、惩罚性的、特殊的、派生的损失(包括业务损失、收益损失、利润损失、商誉损失、使用数据或其他经济利益的损失)均不负有任何责任,即使事先已被告知此等损失的可能性。 <br> + 4.14为了您的账户及其内资金安全,根据本协议的约定、法律法规及法律文书的规定、政府依行政职权的要求及本平台依据自行判断认为的可能对您的账户产生风险的情况,您同意本平台有权对您的账户进行冻结,即进行暂时关闭该账户部分或全部使用权限的操作。冻结的逆过程为解冻,即本平台对您的被冻结账户结束冻结。当冻结发生时,如您申请解冻,本平台有权自行判断根据本项规定前述的冻结原因来决定是否允许解冻,您应充分理解您的解冻申请并不必然被允许,且申请解冻时您应当配合本平台核实您的身份的有关要求,提供包括但不限于身份信息、身份证、护照、其他有效的身份证明文件及本平台要求的其他信息或文件。 <br> + 4.15您同意,本平台有权按照包括但不限于公安机关、检察机关、法院、海关、税务机关等司法机关、行政机关、军事机关的要求或基于本平台对您资金及交易异常的判断及风险策略对您在纷领钱包的资金及账户等进行查询、冻结或扣划。 <br> + 4.16本平台有权了解您的真实交易背景及目的,您应如实提供本平台所需的真实、全面、准确的信息;如果本平台有合理理由怀疑您提供虚假信息的,本平台有权暂时或永久限制您所使用的服务的部分或全部功能。 <br> + 五、本平台使用规范 <br> + 5.1 本条所述平台使用是指用户使用本平台服务所进行的任何行为,包括但不限于注册登录、帐号运营以及其他使用本平台服务所进行的行为。 <br> + 5.2您使用本平台服务,本公司即根据您的授权依照本公司自行设立的模型、模式、格式、规则、流程等对您的用户信息进行整理、保存、加工,并将在法律、行政法规允许的范围内向第三方提供该等信息。 <br> + 5.3您开通本平台信用服务表明您同意本公司根据本公司掌握的您的或与您相关的信息与第三方信息的比对的结果,或本公司对您的或与您相关的信息的分析,对第三方提示相关风险。该服务目前对您并不收取任何费用。您理解并同意,其可能使第三方采取制止他人进行的不利于您的行为的措施,或可能因此降低该等行为对您产生的不利后果,但该服务并不一定会完全杜绝该等不利于您的行为或因此产生的相应不利后果。 <br> + 5.4 本平台使用您的用户信息,用于您的个人信用预测评估、预防贷款违约风险、比较信息的准确性并与第三方进行验证、经您许可的其他用途以及本平台产品推广介绍服务。 <br> + 5.5 您理解并同意,您向任何第三人分享、转发、复制本平台信息内容的行为,均应遵守本平台为此制定的规范和标准,包括但不限于展示方式应为该信息或内容的原链接、确保附属于该信息或内容的功能可正常使用等。 <br> + 六、协议的变更和注销 <br> + 6.1 鉴于网络服务的特殊性,本平台变更本协议及其附件的若干条款时,以本协议1.2条约定。如您不同意上述变更,有权按照本条6.2的约定终止本协议;本协议中的相关条款根据该变更而自动相应修改,双方无须另行签订书面及电子补充协议。 <br> + 6.2 在您不存在与本平台合作任何第三方发生业务的情况下,可以申请办理您本人用户注销手续。您应当依照本公司规定的程序进行信用账户注销,本人用户注销后,本协议终止;您应向本平台使您用服务的第三方承诺在一定期间内不可撤销地授权该第三方可以向本公司查询您的用户信息的,服务期间内信用账户不得被注销,并且该第三方可以继续按照您的授权查询您的用户信息。 <br> + 6.3信用账户注销后,您不可撤销地授权本公司仍将继续持有、保留您的用户信息及您使用本平台信用服务的记录。您理解,如果不保留这样的信息,账户注销后本公司无法按照《征信业管理条例》的规定就账户注销之前采集的您的用户信息处理您提出的事后异议,也无法就第三方关于账户注销前本公司依法或根据本协议向其提供的您的用户信息提起的核实或查询予以处理,这样可能会导致本公司不能遵守法律、法规的要求,也可能损害您的合法权益,故您同意本公司对于前述信息和记录予以保留。 <br> + 七、法律责任 <br> + 7.1 如果本平台发现或收到他人举报或投诉用户违反本协议约定的,本平台经核实有权不经通知随时对相关内容进行删除、屏蔽,并视行为情节对违规帐号处以包括但不限于警告、删除部分或全部关注用户、限制或禁止使用部分或全部功能、帐号封禁直至注销的处罚,并公告处理结果。本平台也有权依照本协议及专项规则的规定,拒绝再向该主体提供服务。本平台认证帐号除上述处罚措施外,有权取消其帐号认证身份,并视情节决定临时或永久封禁相关帐号认证资质。如果您发现任何人违反本协议规定或以其他不当的方式使用本平台服务,请立即向本平台举报或投诉,我们将依法进行处理。 <br> + 7.2 您理解并同意,本平台有权依合理判断对违反有关法律法规或本协议规定的行为进行处罚,对违法违规的任何人士采取适当的法律行动,并依据法律法规保存有关信息向有关部门报告等,用户应独自承担由此而产生的一切法律责任。 <br> + 7.3 您理解并同意,因您违反本协议或相关服务条款的规定,导致或产生第三方主张的任何索赔、要求或损失,您应当独立承担责任;本平台因此遭受损失的,您也应当一并赔偿。 <br> + 7.4 任何未经本平台书面同意及权利人许可的非法获取行为,均属违法侵权行为。您确认并同意,为及时、有效地保障你基于本服务的合法权益,您授权本平台在发现您的相关信息可能受到侵害时,有权代为向涉嫌侵权的第三人采取法律手段进行维权,授权采取的法律手段包括但不限于发函警告、提起诉讼、申请仲裁、移送侦查机关处理等。 <br> + 八、附则 <br> + 8.1 若您和本平台之间发生任何纠纷或争议,首先应友好协商解决;协商不成的,您同意将纠纷或争议提交本协议签订地有管辖权的人民法院管辖。 <br> + 8.2 本协议部分条款约定无效的,不影响其他条款的效力。 <br> + 8.3 本协议签订平台:纷领钱包服务平台。 <br> + 8.4 本协议的最终解释权为本公司。</p></div> diff --git a/static/auditRouterControl.json b/static/auditRouterControl.json new file mode 100644 index 0000000..9fa11c8 --- /dev/null +++ b/static/auditRouterControl.json @@ -0,0 +1,41 @@ +{ + "is_publish": { + "jtjinfu": [ + { + "308": [ + "1.0.0", + "1.0.1", + "1.0.2", + "1.0.3" + ] + }, + { + "301": [ + "1.0.0", + "1.0.1", + "1.0.2", + "1.0.3" + ] + }, + { + "313": [ + "1.0.1", + "1.0.2", + "1.0.3" + ] + }, + { + "316": [ + "1.0.1", + "1.0.2", + "1.0.3" + ] + }, + { + "appStore": [ + "1.0.0" + ] + } + ] + } +} diff --git a/static/chanBaseInfo.json b/static/chanBaseInfo.json new file mode 100644 index 0000000..0933453 --- /dev/null +++ b/static/chanBaseInfo.json @@ -0,0 +1,32 @@ +{ + "chanSign": { + "Ge51": "102", + "wtpB": "100", + "301": "100", + "kErU": "101", + "LAf4": "100", + "NFuc": "jtjintest" + }, + "chanBaseInfo": { + "102": { + "agreementPath": "./static/agreement.html", + "logoPath": "/image/commerce/chanInfo/finlean/finlean-logo.png", + "title": "纷领钱包" + }, + "101": { + "agreementPath": "./static/agreement.html", + "logoPath": "/image/commerce/chanInfo/finlean/finlean-logo.png", + "title": "纷领钱包" + }, + "jtjintest": { + "agreementPath": "./static/agreement.html", + "logoPath": "/image/commerce/chanInfo/finlean/finlean-logo.png", + "title": "纷领钱包" + }, + "100": { + "agreementPath": "./static/agreement.html", + "logoPath": "/image/commerce/chanInfo/finlean/finlean-logo.png", + "title": "纷领钱包" + } + } +} diff --git a/static/iPhone8.png b/static/iPhone8.png new file mode 100644 index 0000000..dbbcfd4 --- /dev/null +++ b/static/iPhone8.png Binary files differ diff --git a/static/iPhone8P.png b/static/iPhone8P.png new file mode 100644 index 0000000..a6dc932 --- /dev/null +++ b/static/iPhone8P.png Binary files differ diff --git a/static/iPhoneX.png b/static/iPhoneX.png new file mode 100644 index 0000000..6b30407 --- /dev/null +++ b/static/iPhoneX.png Binary files differ diff --git a/static/iosagreement.js b/static/iosagreement.js new file mode 100644 index 0000000..875d332 --- /dev/null +++ b/static/iosagreement.js @@ -0,0 +1,4 @@ +const agreement='<div><p style="margin:0pt; orphans:0; text-align:center; widows:0"><span style="font-family:微软雅黑; font-size:14px">纷领</span><span style="font-family:微软雅黑; font-size:14px">资讯</span><span style="font-family:微软雅黑; font-size:14px">用户使用</span><span style="font-family:微软雅黑; font-size:14px">授权协议</span></p><p style="margin:0pt; text-indent:10.5pt"><span style="font-family:微软雅黑; font-size:14px">欢迎您使用</span><span style="font-family:微软雅黑; font-size:14px">"</span><span style="font-family:微软雅黑; font-size:14px">纷领</span><span style="font-family:微软雅黑; font-size:14px">资讯</span><span style="font-family:微软雅黑; font-size:14px">"</span><span style="font-family:微软雅黑; font-size:14px">平台!</span></p><p style="line-height:17.25pt; margin:0pt 0pt 0pt 0pt"><span style="font-family:微软雅黑; font-size:14px"> </span><span style="font-family:微软雅黑; font-size:14px">《</span><span style="font-family:微软雅黑; font-size:14px">"</span><span style="font-family:微软雅黑; font-size:14px">纷领资讯</span><span style="font-family:微软雅黑; font-size:14px">"</span><span style="font-family:微软雅黑; font-size:14px">用户使用授权</span><span style="font-family:微软雅黑; font-size:14px">协议》(以下简称本协议)由</span><span style="font-family:微软雅黑; font-size:14px">上海吉帑金融信息服务有限公司(以下简称“本公司”)及本公司合作第三方机构和您签订,本协议约定了本公司向您提供</span><span style="font-family:微软雅黑; font-size:14px; font-weight:bold">纷领</span><span style="font-family:微软雅黑; font-size:14px; font-weight:bold">资讯</span><span style="font-family:微软雅黑; font-size:14px; font-weight:bold">服务(以下简称“本服务”)</span><span style="font-family:微软雅黑; font-size:14px">的前提、双方权利义务及其他事项。您在本公司提供的</span><span style="font-family:微软雅黑; font-size:14px">纷领</span><span style="font-family:微软雅黑; font-size:14px">资讯</span><span style="font-family:微软雅黑; font-size:14px">平台</span><span style="font-family:微软雅黑; font-size:14px"> (</span><span style="font-family:微软雅黑; font-size:14px">以下简称</span><span style="font-family:微软雅黑; font-size:14px">"</span><span style="font-family:微软雅黑; font-size:14px">本平台</span><span style="font-family:微软雅黑; font-size:14px">")</span><span style="font-family:微软雅黑; font-size:14px">上或在本公司授权的第三方提供的网络页面上点击授权</span><span style="font-family:微软雅黑; font-size:14px">,以合理的理解表明您希望与本公司签订本协议的授权按钮(例如,按钮上书写</span><span style="font-family:微软雅黑; font-size:14px">“</span><span style="font-family:微软雅黑; font-size:14px">开通</span><span style="font-family:微软雅黑; font-size:14px">纷领资讯</span><span style="font-family:微软雅黑; font-size:14px">服务</span><span style="font-family:微软雅黑; font-size:14px">”</span><span style="font-family:微软雅黑; font-size:14px">或类似文字,且页面上同时列明了本协议的内容或者可以有效展示本协议内容的链接)、您实际使用</span><span style="font-family:微软雅黑; font-size:14px">纷领资讯</span><span style="font-family:微软雅黑; font-size:14px">服务或您与本公司以其它合理方式表明您与本公司订立了本协议时,即表明本协议在您与本公司之间成立并生效。</span></p><p style="margin:0pt 0pt 0pt 36pt; text-indent:-36pt"><span style="font-family:微软雅黑; font-size:14px">一、</span><span style="font:7.0pt">        </span><span style="font-family:微软雅黑; font-size:14px">声明与承诺</span></p><p style="margin:0pt; text-indent:21pt"><span style="font-family:微软雅黑; font-size:14px">1.1 </span><span style="font-family:微软雅黑; font-size:14px">本公司一贯重视消费者权益保护,本公司已对本协议中与您的权益有或可能有重大关系的条款及对本公司具有或可能具有免责或限制责任的条款用粗体字予以标注,请您务必注意。您理解并承诺,在您注册成为</span><span style="font-family:微软雅黑; font-size:14px">纷领资讯</span><span style="font-family:微软雅黑; font-size:14px">用户已接受本服务,或您以本公司允许的其他方式实际使用本服务前,您已充分阅读、理解并接受本协议的全部内容,您使用本平台服务,即表示您同意遵循本协议之所有约定。请您务必审慎阅读、充分理解各条款内容,特别是免除或限制</span><span style="font-family:微软雅黑; font-size:14px">本公司责任的相应条款,以及开通或使用某项服务的单独协议,并选择接受或不接受。除非您已阅读并接受本协议所有条款,否则您有权拒绝使用</span><span style="font-family:微软雅黑; font-size:14px">"</span><span style="font-family:微软雅黑; font-size:14px">纷领资</span><span style="font-family:微软雅黑; font-size:14px">讯</span><span style="font-family:微软雅黑; font-size:14px">"</span><span style="font-family:微软雅黑; font-size:14px">平台服务。您对本平台的</span><span style="font-family:微软雅黑; font-size:14px">注册</span><span style="font-family:微软雅黑; font-size:14px">登录、查看</span><span style="font-family:微软雅黑; font-size:14px">、实际使用本平台的服务</span><span style="font-family:微软雅黑; font-size:14px">等行为即视为您已阅读并同意</span><span style="font-family:微软雅黑; font-size:14px">受本协议的约束。</span></p><p style="margin:0pt; text-indent:21pt"><span style="font-family:微软雅黑; font-size:14px">1</span><span style="font-family:微软雅黑; font-size:14px">.2 </span><span style="font-family:微软雅黑; font-size:14px">权利归属。除非本平台另行声明,本平台内的所有产品、技</span><span style="font-family:微软雅黑; font-size:14px">术、软件、程序、数据及其他信息(包括网页、文字、图标、照片、图片、音频、视频、图表、色彩组合、版面设计等)的所有权利(包括版权、商标权、专利权、商业秘密及其他相关权益)均归</span><a name="_Hlk492285143"><span style="font-family:微软雅黑; font-size:14px">纷领资讯</span><span style="font-family:微软雅黑; font-size:14px">服务提供者及</span><span style="font-family:微软雅黑; font-size:14px">/</span><span style="font-family:微软雅黑; font-size:14px">或其关联公司</span></a><span style="font-family:微软雅黑; font-size:14px">所有。未经</span><span style="font-family:微软雅黑; font-size:14px">纷领资讯</span><span style="font-family:微软雅黑; font-size:14px">服务提供者及</span><span style="font-family:微软雅黑; font-size:14px">/</span><span style="font-family:微软雅黑; font-size:14px">或其关联公司许可,任何人不得以包括通过机器人、蜘蛛等程序或者设备监视、复制、传播、展示、镜像、上载、下载等方式擅自使用</span><span style="font-family:微软雅黑; font-size:14px">纷领资讯</span><span style="font-family:微软雅黑; font-size:14px">内的任何内容。</span></p><p style="margin:0pt; text-indent:21pt"><span style="font-family:微软雅黑; font-size:14px">1.3</span><span style="font-family:微软雅黑; font-size:14px">本公司有权在必要时修改本协议条款。变更的原因包括但不限于国家法律、法规及其他规范性文件的规定变化,增加、变更了新的服务类型或服</span><span style="font-family:微软雅黑; font-size:14px">务方式,进一步明确协议双方的权利义务以及本平台服务的升级等。因本协议所涉服务的性质独特及服务用户数量众多,故本公司在对本协议内容进行变更时,不会另行单独通知您。您可以在相关服务页面查阅最新版本的条款。本协议条款变更后,如果您继续使用本平台服务,即视为您已接受修改后的协议。如果您不接受修改后的协议,有权停止使用本平台服务。</span></p><p style="line-height:17.25pt; margin:0pt; text-indent:21pt"><span style="font-family:微软雅黑; font-size:14px">1.4 </span><a name="_Hlk491951179"><span style="font-family:微软雅黑; font-size:14px">您理解并同意,本协议规定的内容既包括《征信业管理条例》中征信业务所涉及的本公司提供的服务,亦包括本公司提供的其他服务,所以您应当对于《征信业管理条例》及相关法律法规有适当的了解,如</span><span style="font-family:微软雅黑; font-size:14px">您不能清楚地知晓或理解国家相关法律法规规定的内容,您应当咨询相关法律专业人士后再决定是否接受本协议。</span></a></p><p style="margin:0pt; text-indent:21pt"><span style="-aw-bookmark-end:_Hlk491951179"></span><span style="font-family:微软雅黑; font-size:14px">1.5</span><span style="font-family:微软雅黑; font-size:14px">您保证,在您同意接受本协议并注册成为</span><span style="font-family:微软雅黑; font-size:14px">纷领资讯</span><span style="font-family:微软雅黑; font-size:14px">用户时,您已经年满</span><span style="font-family:微软雅黑; font-size:14px">18</span><span style="font-family:微软雅黑; font-size:14px">周岁,</span><span style="font-family:微软雅黑; font-size:14px">具有完全民事行为能力</span><span style="font-family:微软雅黑; font-size:14px">;您是中华人民共和国(</span><span style="font-family:微软雅黑; font-size:14px">“</span><span style="font-family:微软雅黑; font-size:14px">中国</span><span style="font-family:微软雅黑; font-size:14px">”</span><span style="font-family:微软雅黑; font-size:14px">)大陆地区公民(不含香港、台湾、澳门地区);不具备前述条件的,您应立即终止注册或停止使用本服务。</span></p><p style="line-height:17.25pt; margin:0pt; text-indent:21pt"><span style="font-family:微软雅黑; font-size:14px">1</span><span style="font-family:微软雅黑; font-size:14px">.6 </span><span style="font-family:微软雅黑; font-size:14px">您同意,基于本协议,您的授权为免费授权,</span><span style="font-family:微软雅黑; font-size:14px">纷领</span><span style="font-family:微软雅黑; font-size:14px">科技</span><span style="font-family:微软雅黑; font-size:14px">无需因您的授权向您支付任何费用。</span></p><p style="margin:0pt"><span style="font-family:微软雅黑; font-size:14px">二、平台服务</span><span style="font-family:微软雅黑; font-size:14px">介绍</span></p><p style="margin:0pt; text-indent:24pt"><span style="font-family:微软雅黑; font-size:14px">纷领资讯</span><span style="font-family:微软雅黑; font-size:14px">是一个提供多元化服务的综合平台</span><span style="font-family:微软雅黑; font-size:14px">,所有服务的开通都基于您本人自愿授权</span><span style="font-family:微软雅黑; font-size:14px">,</span><span style="font-family:微软雅黑; font-size:14px">本平台</span><span style="font-family:微软雅黑; font-size:14px">包括以下服务:</span></p><p style="margin:0pt; text-indent:21pt"><span style="font-family:微软雅黑; font-size:14px; font-weight:bold">2</span><span style="font-family:微软雅黑; font-size:14px; font-weight:bold">.</span><span style="font-family:微软雅黑; font-size:14px; font-weight:bold">1</span><span style="font-family:微软雅黑; font-size:14px; font-weight:bold">短信提示服务,本服务的授权生效基于您申请注册</span><span style="font-family:微软雅黑; font-size:14px; font-weight:bold">纷领资讯</span><span style="font-family:微软雅黑; font-size:14px; font-weight:bold">用户账户。您注册申请</span><span style="font-family:微软雅黑; font-size:14px; font-weight:bold">纷领资讯</span><span style="font-family:微软雅黑; font-size:14px; font-weight:bold">用户账户,视为您同意本平台向您发送短信提示服务,包括但不限于短信验证、新产品介绍等提示服务。该服务为免费服务,不收取任何服务费用。</span></p><p style="margin:0pt; text-indent:21pt"><span style="font-family:微软雅黑; font-size:14px; font-weight:bold">2.</span><span style="font-family:微软雅黑; font-size:14px; font-weight:bold">2</span><span style="font-family:微软雅黑; font-size:14px; font-weight:bold"> </span><span style="font-family:微软雅黑; font-size:14px; font-weight:bold">其他服务</span><span style="font-family:微软雅黑; font-size:14px; font-weight:bold"> </span><span style="font-family:微软雅黑; font-size:14px; font-weight:bold">本公司以其他形式向您提供的其他服务。</span></p><p style="margin:0pt"><span style="font-family:微软雅黑; font-size:14px">三、用户的主要权利与义务</span></p><p style="margin:0pt; text-indent:21pt"><span style="font-family:微软雅黑; font-size:14px; font-weight:bold">3.1 </span><span style="font-family:微软雅黑; font-size:14px; font-weight:bold">您确保在本平台登记的信息内容真实、完整、合法、有效,并自愿授权本平台根据您所填资料查询您的个人信息</span><span style="font-family:微软雅黑; font-size:14px; font-weight:bold">。</span></p><p style="margin:0pt; text-indent:24pt"><span style="font-family:微软雅黑; font-size:14px; font-weight:bold">3.2 </span><span style="font-family:微软雅黑; font-size:14px; font-weight:bold">您应妥善保管</span><span style="font-family:微软雅黑; font-size:14px; font-weight:bold">在本平台上创设的登录名和密码,并对所有以您的登录名进行的操作行为等行为负责。</span></p><p style="margin:0pt; text-indent:21pt"><span style="font-family:微软雅黑; font-size:14px; font-weight:bold">3.3 </span><span style="font-family:微软雅黑; font-size:14px; font-weight:bold">您应向本平台提供正确、完整、真实、合法及有效的个人信息注册申请资料,并根据实际变化情况及时更新,因注册资料有误引起的后果,由您自行承担。因为您的信息完全处于您的掌管之下,故本平台没有合理理由担负保</span><span style="font-family:微软雅黑; font-size:14px; font-weight:bold">证其有效、及时地接收到通知的义务,您应完全独自承担因信息没有及时更新致使您遭受的任何损失或增加任何费用等不利后果。您理解并同意,您有义务保持您提供信息的有效性,如有任何变更应及时在本平台进行更新,同时您应按本平台的要求进行相关操作</span><span style="font-family:微软雅黑; font-size:14px; font-weight:bold">。</span></p><p style="margin:0pt; text-indent:24pt"><span style="font-family:微软雅黑; font-size:14px; font-weight:bold">3.4 </span><span style="font-family:微软雅黑; font-size:14px; font-weight:bold">您的登录名、密码发生被盗、遗忘或者怀疑其他人知悉、盗用等可能导致您遭受损失的情形,应及时采取申请密码重置等措施,预防和避免他人冒用您本人账号登录本平台进行操作。</span></p><p style="margin:0pt; text-indent:21pt"><span style="font-family:微软雅黑; font-size:14px">3</span><span style="font-family:微软雅黑; font-size:14px">.5 </span><span style="font-family:微软雅黑; font-size:14px">您理解并同意:本服务使用过程中可能产生数据流量的费用,您需自行向运营商了解相关资费信息,并自行承担相关费用。</span></p><p style="margin:0pt; text-indent:24pt"><span style="font-family:微软雅黑; font-size:14px">3</span><span style="font-family:微软雅黑; font-size:14px">.6. </span><span style="font-family:微软雅黑; font-size:14px">您承诺不得利用本平台用户账号进行如下行为:</span></p><p style="margin:0pt; text-indent:24pt"><span style="font-family:微软雅黑; font-size:14px">(</span><span style="font-family:微软雅黑; font-size:14px">1</span><span style="font-family:微软雅黑; font-size:14px">)</span><span style="font-family:微软雅黑; font-size:14px">侵害他人名誉权、肖像权、知识产权、商业秘密等合法权利的;</span></p><p style="margin:0pt; text-indent:24pt"><span style="font-family:微软雅黑; font-size:14px">(</span><span style="font-family:微软雅黑; font-size:14px">2</span><span style="font-family:微软雅黑; font-size:14px">)</span><span style="font-family:微软雅黑; font-size:14px"> </span><span style="font-family:微软雅黑; font-size:14px">填写和提交帐号注册与认证资料违反本协议规定,或申请认证资料与注册信息内容不一致,以及运营行为与注册或认证信息所公示身份无关的;</span></p><p style="margin:0pt; text-indent:24pt"><span style="font-family:微软雅黑; font-size:14px">(</span><span style="font-family:微软雅黑; font-size:14px">3</span><span style="font-family:微软雅黑; font-size:14px">)未能按照本平台业务流程注册和使用本服务,违反本服务功能限制或运营策略,或采取任何措施规避前述流程、限制或策略,干扰本平台正常运营的;</span></p><p style="margin:0pt; text-indent:24pt"><span style="font-family:微软雅黑; font-size:14px">(</span><span style="font-family:微软雅黑; font-size:14px">4</span><span style="font-family:微软雅黑; font-size:14px">)未经本平台书面许可使用插件、外挂或通过其他第三方工具、运营平台或任何服务接入本服务和相关系统的;</span></p><p style="margin:0pt; text-indent:24pt"><span style="font-family:微软雅黑; font-size:14px">(</span><span style="font-family:微软雅黑; font-size:14px">5</span><span style="font-family:微软雅黑; font-size:14px">)仿冒、混淆他人帐号昵称、功能介绍或制作内容等,或冒充、利用他人名义的;</span></p><p style="margin:0pt; text-indent:24pt"><span style="font-family:微软雅黑; font-size:14px">(</span><span style="font-family:微软雅黑; font-size:14px">6</span><span style="font-family:微软雅黑; font-size:14px">)未经本平台书面许可,自行或者授权、允许、协助任何第三人对</span><span style="font-family:微软雅黑; font-size:14px">信息内容进行非法获取、“非法获取”是指采用包括但不限于“蜘蛛”程序、爬虫</span><span style="font-family:微软雅黑; font-size:14px">程序、拟人程序等非真实用户或避开、破坏技术措施等非正常浏览的手段、方式、读取、复制、转存、获得数据和信息内容的行为。</span></p><p style="margin:0pt; text-indent:24pt"><span style="font-family:微软雅黑; font-size:14px">(</span><span style="font-family:微软雅黑; font-size:14px">7</span><span style="font-family:微软雅黑; font-size:14px">)利用本平台用户账号从事任何违法犯罪活动的。</span><span style="font-family:微软雅黑; font-size:14px"> </span></p><p style="margin:0pt"><span style="font-family:微软雅黑; font-size:14px; font-weight:bold">四、本平台的主要权利与义务</span></p><p style="margin:0pt; text-indent:24pt"><span style="font-family:微软雅黑; font-size:14px; font-weight:bold">4.</span><span style="font-family:微软雅黑; font-size:14px; font-weight:bold">1</span><span style="font-family:微软雅黑; font-size:14px; font-weight:bold"> </span><span style="font-family:微软雅黑; font-size:14px; font-weight:bold">为了保护您的合法权益,本公司不会采集您(作为个人用户)的宗教信仰、基因、指纹、血型、疾病和病史信息以及法律、行政法规规定禁止采集的其他个人信息。</span></p><p style="margin:0pt; text-indent:24pt"><span style="font-family:微软雅黑; font-size:14px; font-weight:bold">4.</span><span style="font-family:微软雅黑; font-size:14px; font-weight:bold">2</span><span style="font-family:微软雅黑; font-size:14px; font-weight:bold"> </span><span style="font-family:微软雅黑; font-size:14px; font-weight:bold">您在使用本平台时涉及的第三方提供产品或服务,</span><span style="font-family:微软雅黑; font-size:14px; font-weight:bold">本平台将与第三方共享您的用户信息,</span><span style="font-family:微软雅黑; font-size:14px; font-weight:bold">本平台对您与第三方可能出现的纠纷不承担任何责任。</span></p><p style="margin:0pt; text-indent:21pt"><span style="font-family:微软雅黑; font-size:14px">4.</span><span style="font-family:微软雅黑; font-size:14px">3</span><span style="font-family:微软雅黑; font-size:14px"> </span><span style="font-family:微软雅黑; font-size:14px">本平台承诺登记系统客观记录,保存您提交的个人信息,除非法律法规另有规定或本协议另有约定,本平台不对您的信息登记进行修改、补充、删除等任何变更操作。</span></p><p style="margin:0pt; text-indent:24pt"><span style="font-family:微软雅黑; font-size:14px">4.</span><span style="font-family:微软雅黑; font-size:14px">4</span><span style="font-family:微软雅黑; font-size:14px">本平台就如何使用登记系统提供电话咨询服务,包括本平台合作第三方相关的业务咨询服务,但本平台提供的咨询信息不属于如何使用</span><span style="font-family:微软雅黑; font-size:14px">本平台登录操作系统的仅供您参考,本平台对您使用该类信息造成的任何不利后果不承担任何责任。</span></p><p style="margin:0pt; text-indent:24pt"><span style="font-family:微软雅黑; font-size:14px; font-weight:bold">4.</span><span style="font-family:微软雅黑; font-size:14px; font-weight:bold">5</span><span style="font-family:微软雅黑; font-size:14px; font-weight:bold"> </span><span style="font-family:微软雅黑; font-size:14px; font-weight:bold">因下列原因致使登记系统不能正常提供服务而可能导致的损失,本平台不承担责任:</span></p><p style="margin:0pt; text-indent:24pt"><span style="font-family:微软雅黑; font-size:14px; font-weight:bold">(</span><span style="font-family:微软雅黑; font-size:14px; font-weight:bold">1</span><span style="font-family:微软雅黑; font-size:14px; font-weight:bold">)</span><span style="font-family:微软雅黑; font-size:14px; font-weight:bold"> </span><span style="font-family:微软雅黑; font-size:14px; font-weight:bold">因台风、地震、海啸、洪水、战争等不可抗力因素,造成本平台不能正常执行业务;</span></p><p style="margin:0pt; text-indent:24pt"><span style="font-family:微软雅黑; font-size:14px; font-weight:bold">(</span><span style="font-family:微软雅黑; font-size:14px; font-weight:bold">2</span><span style="font-family:微软雅黑; font-size:14px; font-weight:bold">)</span><span style="font-family:微软雅黑; font-size:14px; font-weight:bold"> </span><span style="font-family:微软雅黑; font-size:14px; font-weight:bold">计算机病毒、黑客攻击、网络通信故障等本平台不能控制的因素;</span></p><p style="margin:0pt; text-indent:24pt"><span style="font-family:微软雅黑; font-size:14px; font-weight:bold">(</span><span style="font-family:微软雅黑; font-size:14px; font-weight:bold">3</span><span style="font-family:微软雅黑; font-size:14px; font-weight:bold">)</span><span style="font-family:微软雅黑; font-size:14px; font-weight:bold"> </span><span style="font-family:微软雅黑; font-size:14px; font-weight:bold">为了维护本平台的正常运行,会定期或不定期对平台进行相关设备的维护或检修,因此而造成登记服务在合理时间内中断的;</span><span style="font-family:微软雅黑; font-size:14px; font-weight:bold"> </span></p><p style="margin:0pt; text-indent:24pt"><span style="font-family:微软雅黑; font-size:14px; font-weight:bold">(</span><span style="font-family:微软雅黑; font-size:14px; font-weight:bold">4</span><span style="font-family:微软雅黑; font-size:14px; font-weight:bold">)其他本平台无法控制或合理预见的情形。</span></p><p style="margin:0pt; text-indent:24pt"><span style="font-family:微软雅黑; font-size:14px; font-weight:bold">4.</span><span style="font-family:微软雅黑; font-size:14px; font-weight:bold">6</span><span style="font-family:微软雅黑; font-size:14px; font-weight:normal"> </span><span style="font-family:微软雅黑; font-size:14px; font-weight:bold">为保障您的信息安全,本平台将采取各种合理的物理、电</span><span style="font-family:微软雅黑; font-size:14px; font-weight:bold">子和管理方面的安全措施来保护您的信息,使您的信息不会被泄漏、</span><span style="font-family:微软雅黑; font-size:14px; font-weight:bold"> </span><span style="font-family:微软雅黑; font-size:14px; font-weight:bold">毁损或者丢失,包括但不限于</span><span style="font-family:微软雅黑; font-size:14px; font-weight:bold">SSL</span><span style="font-family:微软雅黑; font-size:14px; font-weight:bold">加密</span><span style="font-family:微软雅黑; font-size:14px; font-weight:bold">、信息加密存储、数据中心的访</span><span style="font-family:微软雅黑; font-size:14px; font-weight:bold">问控制。本平台对可能接触到您信息的员工或外包人员采取严格管理措施,包括但不限于根据岗位的不同分级控制权限,</span><span style="font-family:微软雅黑; font-size:14px; font-weight:bold">签署保密协议,监控操作情况等措施</span><span style="font-family:微软雅黑; font-size:14px; font-weight:bold">。</span></p><p style="margin:0pt; text-indent:24pt"><span style="font-family:微软雅黑; font-size:14px; font-weight:bold">4.</span><span style="font-family:微软雅黑; font-size:14px; font-weight:bold">7</span><span style="font-family:微软雅黑; font-size:14px; font-weight:bold"> </span><span style="font-family:微软雅黑; font-size:14px; font-weight:bold">在法律允许的情况下,本公司对于与本协议有关或由本协议引起的任何间接的、惩罚性的、特殊的、派生的损失(包括业务损失、收益损失、利润损失、商誉损失、使用数据或其他经济利益的损失)均不负有任何责任,即使事先已被告知此等损失的可能性。</span></p><p style="margin:0pt; text-indent:24pt"><span style="font-family:微软雅黑; font-size:14px">4.</span><span style="font-family:微软雅黑; font-size:14px">8</span><span style="font-family:微软雅黑; font-size:14px">为了您的账户</span><span style="font-family:微软雅黑; font-size:14px">安全,根据本协议的约定、法律法规及法律文书的规定、政府依行政职权的要求及本平台依据自行判断认为的可能对您的账户产生风险的情况,您同意本平台有权对您的账户进行冻结,即进行暂时关闭该账户部分或全部使用权限的操作。冻结的逆过程为解冻,即本平台对您的被冻结账户结束冻结。当冻结发生时,如您申请解冻,本平台有权自行判断根据本项规定前述的冻结原因来决定是否允许解冻,您应充分理解您的解冻申请并不必然被允许,且申请解冻时您应当配合本平台核实您的身份的有关要求,提供包括但不限于身份信息、身份证、护照、其他</span><span style="font-family:微软雅黑; font-size:14px">有效的身份证明文件及本平台要求的其他信息或文件。</span></p><p style="margin:0pt; text-indent:24pt"><span style="font-family:微软雅黑; font-size:14px">4.</span><span style="font-family:微软雅黑; font-size:14px">9</span><span style="font-family:微软雅黑; font-size:14px">您同意,本平台有权按照包括但不限于公安机关、检察机关、法院、海关、税务机关等司法机关、行政机关、军事机关的要求或基于本平台对您资金及交易异常的判断及风险策略对您在</span><span style="font-family:微软雅黑; font-size:14px">纷领资讯</span><span style="font-family:微软雅黑; font-size:14px">的资金及账户等进行查询、冻结或扣划。</span></p><p style="margin:0pt; text-indent:24pt"><span style="font-family:微软雅黑; font-size:14px">4.1</span><span style="font-family:微软雅黑; font-size:14px">0</span><span style="font-family:微软雅黑; font-size:14px">本平台有权了解您的真实交易背景及目的,您应如实提供本平台所需的真实、全面、准确的信息;如果本平台有合理理由怀疑您提供虚假信息的,本平台有权暂时或永久限制您所使用的服务的部分或全部功能。</span></p><p style="margin:0pt"><span style="font-family:微软雅黑; font-size:14px">五、本平台使用规范</span></p><p style="margin:0pt; text-indent:24pt"><span style="font-family:微软雅黑; font-size:14px">5.1 </span><span style="font-family:微软雅黑; font-size:14px">本条所述平台使用是指用户使用本平台服务所进行的任何行为,包括但不限于注册登录、帐号运营以及其他使用本平台服务所进行的行为。</span></p><p style="margin:0pt; text-indent:24pt"><span style="font-family:微软雅黑; font-size:14px">5.2</span><span style="font-family:微软雅黑; font-size:14px">您使用本平台服务,本公司即根据您的授权依照本公司自行设立的模型、模式、格式、规则、流程等对您的用户信息进行整理、保存、加工,并将在法律、行政法规允许的范围内向第三方提供该等信息。</span></p><p style="line-height:17.25pt; margin:0pt; text-indent:21pt"><span style="font-family:微软雅黑; font-size:14px">5.3</span><span style="font-family:微软雅黑; font-size:14px">您开通本平台信用服务表明您同意本公司根据本公司掌握的您的或与您相关的信息与第三方信息的比对的结果,或本公司对您的或与您相关的信息的分析,对第三方提示相关风险。该服务目前对您并不收取任何费用。您理解并同意,其可能使第三方采取制止他人进行的不利于您的行为的措施,或可能因此降低该等行为对您产生的不利后果,但该服务并不一定会完全杜绝该等不利于您的行为或因此产生的相应不利后果。</span></p><p style="margin:0pt; text-indent:24pt"><span style="font-family:微软雅黑; font-size:14px">5.</span><span style="font-family:微软雅黑; font-size:14px">4</span><span style="font-family:微软雅黑; font-size:14px"> </span><span style="font-family:微软雅黑; font-size:14px">您理解并同意,您</span><span style="font-family:微软雅黑; font-size:14px">向</span><span style="font-family:微软雅黑; font-size:14px">任何第三人分享、转发、复制本平台信息内容的行为,均应遵守本平台为此制定的规范和标准,包括但不限于展示方式应为该信息</span><span style="font-family:微软雅黑; font-size:14px">或内容的原链接、确保附属于该信息或内容的功能可正常使用等。</span></p><p style="margin:0pt"><span style="font-family:微软雅黑; font-size:14px">六、协议的变更和注销</span></p><p style="margin:0pt; text-indent:24pt"><span style="font-family:微软雅黑; font-size:14px">6.1 </span><span style="font-family:微软雅黑; font-size:14px">鉴于网络服务的特殊性,本平台变更本协议及其附件的若干条款时,以本协议</span><span style="font-family:微软雅黑; font-size:14px">1.2</span><span style="font-family:微软雅黑; font-size:14px">条约定</span><span style="font-family:微软雅黑; font-size:14px">。如您不同意上述变更,有权按照本条</span><span style="font-family:微软雅黑; font-size:14px">6.2</span><span style="font-family:微软雅黑; font-size:14px">的约定终止本协议;本协议中的相关条款根据该变更而自动相应修改,双方无须另行签订书面及电子</span><span style="font-family:微软雅黑; font-size:14px">补充</span><span style="font-family:微软雅黑; font-size:14px">协议。</span></p><p style="margin:0pt; text-indent:24pt"><span style="font-family:微软雅黑; font-size:14px">6.2 </span><span style="font-family:微软雅黑; font-size:14px">在您不存在与本平台合作任何第三方发生业务的情况下,可以申请办理您本人用户注销手续。您应当依照本公司规定的程序进行信用账户注销,本人用户注销后,本协议终止;您应向本平台使您用服务的第三方承诺在一定</span><span style="font-family:微软雅黑; font-size:14px">期间内不可撤销地授权该第三方可以向本公司查询您的用户信息的,服务期间内信用账户不得被注销,并且该第三方可以继续按照您的授权查询您的用户信息。</span></p><p style="margin:0pt; text-indent:24pt"><span style="font-family:微软雅黑; font-size:14px; font-weight:bold">6.3</span><span style="font-family:微软雅黑; font-size:14px; font-weight:bold">信用账户注销后,您不可撤销地授权本公司仍将继续持有、保留您的用户信息及您使用本平台信用服务的记录。您理解,如果不保留这样的信息,账户注销后本公司无法按照《征信业管理条例》的规定就账户注销之前采集的您的用户信息处理您提出的事后异议,也无法就第三方关于账户注销前本公司依法或根</span><span style="font-family:微软雅黑; font-size:14px; font-weight:bold">据本协议向其提供的您的用户信息提起的核实或查询予以处理,这样可能会导致本公司不能遵守法律、法规的要求,也可能损害您的合法权益,故您同意本公司对于前述信息和记录予以保留。</span></p><p style="margin:0pt; text-indent:24pt"><span style="font-family:微软雅黑; font-size:14px">七、法律责任</span></p><p style="margin:0pt; text-indent:24pt"><span style="font-family:微软雅黑; font-size:14px">7.1 </span><span style="font-family:微软雅黑; font-size:14px">如果本平台发现或收到他人举报或投诉用户违反本协议约定的,本平台经核实有权不经通知随时对相关内容进行删除、屏蔽,并视行为情节对违规帐号处以包括但不限于警告、删除部分或全部关注用户、限制或禁止使用部分</span><span style="font-family:微软雅黑; font-size:14px">或全部功能、帐号封禁直至注销的处罚,并公告处理结果。本平台也有权依照本协议及专项规则的规定,拒绝再向该主体提供服务。本平台认证帐号除上述处罚措施外,有权取消其帐号认证身份,并视情节决定临时或永久封禁相关帐号认证资质。如果您发现任何人违反本协议规定或以其他不当的方式使用本平台服务,请立即向本平台举报或投诉,我们将依法</span><span style="font-family:微软雅黑; font-size:14px">进行处理。</span></p><p style="margin:0pt; text-indent:24pt"><span style="font-family:微软雅黑; font-size:14px">7.2 </span><span style="font-family:微软雅黑; font-size:14px">您理解并同意,本平台有权依合理判断对违反有关法律法规或本协议规定的行为进行处罚,对违法违规的任何人士采取适当的法律行动,并依据法律法规保存有关信息向有关部门报告等,用户应独自承担由此而产生的一切法律责任。</span></p><p style="margin:0pt; text-indent:24pt"><span style="font-family:微软雅黑; font-size:14px">7.</span><span style="font-family:微软雅黑; font-size:14px">3</span><span style="font-family:微软雅黑; font-size:14px"> </span><span style="font-family:微软雅黑; font-size:14px">任何未经本平台书面同意及权利人许可的非法获取行为,均属违法侵权行为。您确认并同意,为及时、有效地保障你基于本服务的合法权益,您授权本平台在发</span><span style="font-family:微软雅黑; font-size:14px">现您的相关信息可能受到侵害时,有权代为向涉嫌侵权的第三人采取法律手段进行维权,授权采取的法律手段包括但不限于发函警告、提起诉讼、申请仲裁、</span><span style="font-family:微软雅黑; font-size:14px">移送侦查机关处理等。</span></p><p style="margin:0pt"><span style="font-family:微软雅黑; font-size:14px">八、附则</span></p><p style="margin:0pt; text-indent:24pt"><span style="font-family:微软雅黑; font-size:14px">8.1 </span><span style="font-family:微软雅黑; font-size:14px">若您和本平台之间发生任何纠纷或争议,首先应友好协商解决;协商不成的,您同意将纠纷或争议提交本协议签订地有管辖权的人民法院管辖。</span></p><p style="margin:0pt; text-indent:24pt"><span style="font-family:微软雅黑; font-size:14px">8.2 </span><span style="font-family:微软雅黑; font-size:14px">本协议</span><span style="font-family:微软雅黑; font-size:14px">部分</span><span style="font-family:微软雅黑; font-size:14px">条款</span><span style="font-family:微软雅黑; font-size:14px">约定</span><span style="font-family:微软雅黑; font-size:14px">无效</span><span style="font-family:微软雅黑; font-size:14px">的</span><span style="font-family:微软雅黑; font-size:14px">,</span><span style="font-family:微软雅黑; font-size:14px">不影响其他条款的效力</span><span style="font-family:微软雅黑; font-size:14px">。</span></p><p style="margin:0pt; text-indent:24pt"><span style="font-family:微软雅黑; font-size:14px">8.3 </span><span style="font-family:微软雅黑; font-size:14px">本协议签订平台:</span><span style="font-family:微软雅黑; font-size:14px">纷领资讯</span><span style="font-family:微软雅黑; font-size:14px">服务平台。</span></p><p style="margin:0pt; text-indent:24pt"><span style="font-family:微软雅黑; font-size:14px">8.4 </span><span style="font-family:微软雅黑; font-size:14px">本协议的最终解释权为本公司。</span></p><p style="margin:0pt; text-indent:24pt"><span style="font-family:微软雅黑; font-size:14px"> </span></p><p style="margin:0pt; orphans:0; text-align:justify; widows:0"><span style="font-family:微软雅黑; font-size:14px"> </span></p><p style="margin:0pt; orphans:0; text-align:justify; widows:0"><span style="font-family:等线; font-size:10.5pt"> </span></p></div>'; + + +export default agreement; diff --git a/static/iosagreementv2.js b/static/iosagreementv2.js new file mode 100644 index 0000000..02ff25f --- /dev/null +++ b/static/iosagreementv2.js @@ -0,0 +1,32 @@ +const agreement = '<h3 style="text-align: center;">《服务条款》</h3><div>服务范围</div>\n' + + ' 钱包包专注于手机租赁服务,致力于成为全国领先的手机回租平台。\n' + + ' <div>服务承诺</div>\n' + + ' <div>\n' + + ' 1. 是否可以取消租赁订单?</br>\n' + + ' 可联系客服人员取消订单,若已完成预租定金收款,需配合客服人员退还预租定金。\n' + + ' </div> <div>2. 邮寄快递费用由谁承担?</br>\n' + + ' 钱包包建议您使用顺丰快递寄出手机,运费到付即可,如果使用其他快递需要您先进行垫付,后期付款时会一并补偿。</div> <div>\n' + + ' 3. 多久可以收到租金?</br>\n' + + ' 钱包包承诺在您提交租赁请求24小时内,完成审核并支付定金;手机寄达24小时内,完成检测并支付余款。\n' + + ' </div>\n' + + ' 4. 检测是否会拆机换零件?\n</br>' + + ' 钱包包承诺不拆卸及更换手机零部件,部分机型需要打开后盖进行检查,此操作不影响您的手机的租赁价格与保修。\n' + + ' </div> <div>\n' + + ' 5. 机器里面的资料是否会泄露?</br>\n' + + ' 钱包包通过数据填充覆盖技术反复清除机器数据,承诺保证您的隐私不被泄露。\n' + + ' </div>\n' + + ' <div>免责声明</div> \n' + + ' 1. 租赁应秉承合法、公平、透明、合理的原则进行。<br>\n' + + ' 2. 租赁物品应为正规渠道物品,拒绝交易山寨机、高仿机、非法渠道物品(如失、窃物品等,以下同)。<br>\n' + + ' 3. 您应保证对租赁物品拥有合法、完整的处分权利。如钱包包发现您提交的物品为非法渠道物品,有权依法向公安司法机关报案,将物品转交公安司法机关,由您承担一切法律责任。<br>\n' + + ' 4. 租赁完成后,钱包包将对物品数据格式化,并将物品归还给您。<br>\n' + + ' <div>关于钱包包</div>\n' + + ' 1. 钱包包依法开展手机租赁业务,您和钱包包将就此直接进行相关交易,包括但不限于估价,租金,交付等。<br>\n' + + ' 2. 您应保证填写的个人信息准确、真实、有效。因您填写的个人信息错误导致无法进行租赁流程的,您应自行承担该后果。<br>\n' + + ' 3.\n' + + ' 您在交付租赁物品前,应自行确保已对物品内的重要资料进行了备份和清除(包括但不限于通讯录、信息、聊天软件的账号用户名、密码、聊天记录、照片、视频、音频等)。如因您未执行此操作导致您资料损失和/或个人信息泄露的,一切责任及后果将由您自行承担,钱包包无需承担任何责任。<br>\n' + + ' 4. 若您的物品在快递签收前,遭遇第三方快递公司的损坏、丢失或者其它任何的利益损害,钱包包不承担任何责任和损失。<br>\n' + + ' 5. 请勿将不必要的物品(机器三包凭证等)邮寄过来,若造成遗失,钱包包不承担任何责任。<br>\n' + + ' 6. 一旦您已与钱包包确认租赁交易并且订单完成,将无法退还机器(包含一起邮寄的相关所有配件),直至租赁周期结束。<br>\n' + + ' 9. 若您的物品检测存在明显的问题,不适于进行租赁业务,钱包包有权终止订单,您应在规定时间内(通常为2个工作日内)退还预租定金。若超期未完成退还,钱包包有权向您索取定金和违约赔偿。'; +export default agreement; diff --git a/static/modConfig.json b/static/modConfig.json new file mode 100644 index 0000000..1b1320f --- /dev/null +++ b/static/modConfig.json @@ -0,0 +1,9 @@ +{ + "copyRight":{ + "checkField": [ + "isApp", + "ostype" + ], + "val": true + } +} diff --git a/static/newImg/IDcardf.png b/static/newImg/IDcardf.png new file mode 100644 index 0000000..7d99062 --- /dev/null +++ b/static/newImg/IDcardf.png Binary files differ diff --git a/static/newImg/IDcardz.png b/static/newImg/IDcardz.png new file mode 100644 index 0000000..0fc21cf --- /dev/null +++ b/static/newImg/IDcardz.png Binary files differ diff --git a/static/newImg/add.png b/static/newImg/add.png new file mode 100644 index 0000000..7e9dd80 --- /dev/null +++ b/static/newImg/add.png Binary files differ diff --git a/static/newImg/card.png b/static/newImg/card.png new file mode 100644 index 0000000..0fc21cf --- /dev/null +++ b/static/newImg/card.png Binary files differ diff --git a/static/newImg/ellipse.png b/static/newImg/ellipse.png new file mode 100644 index 0000000..5240f9f --- /dev/null +++ b/static/newImg/ellipse.png Binary files differ diff --git a/static/newImg/newhome.jpg b/static/newImg/newhome.jpg new file mode 100644 index 0000000..1a71b0d --- /dev/null +++ b/static/newImg/newhome.jpg Binary files differ diff --git a/static/newImg/rectangle.png b/static/newImg/rectangle.png new file mode 100644 index 0000000..a726a67 --- /dev/null +++ b/static/newImg/rectangle.png Binary files differ diff --git a/static/newImg/reversecard.png b/static/newImg/reversecard.png new file mode 100644 index 0000000..7d99062 --- /dev/null +++ b/static/newImg/reversecard.png Binary files differ diff --git a/static/newhome.jpg b/static/newhome.jpg new file mode 100644 index 0000000..3033019 --- /dev/null +++ b/static/newhome.jpg Binary files differ -- Gitblit v1.8.0