├── .babelrc ├── .editorconfig ├── .gitignore ├── .npmrc ├── .postcssrc.js ├── LICENSE ├── README.md ├── build ├── build.js ├── check-versions.js ├── utils.js ├── vue-loader.conf.js ├── webpack.base.conf.js ├── webpack.dev.conf.js └── webpack.prod.conf.js ├── config ├── dev.env.js ├── index.js └── prod.env.js ├── dist ├── index.html └── static │ ├── css │ └── app.0d5fab0b5d71e0cb8d54241c3f5fc49f.css │ ├── iconfont │ ├── iconfont.css │ ├── iconfont.eot │ ├── iconfont.svg │ ├── iconfont.ttf │ └── iconfont.woff │ └── js │ ├── app.35373aa411fa43a0ddaf.js │ ├── manifest.3ad1d5771e9b13dbdad2.js │ └── vendor.aaa21272786524118f3a.js ├── index.html ├── package-lock.json ├── package.json ├── src ├── App.vue ├── assets │ └── css │ │ ├── base.scss │ │ ├── common.scss │ │ └── variables.scss ├── components │ ├── MainContent.vue │ ├── MainHeader.vue │ ├── MsgCenter.vue │ ├── NewTopic.vue │ ├── SideBar.vue │ ├── TopicContent.vue │ ├── TopicList.vue │ ├── TopicTab.vue │ ├── UserCollection.vue │ ├── UserInfo.vue │ └── UserLogin.vue ├── main.js ├── router │ └── index.js └── vuex │ └── store.js └── static ├── .gitkeep └── iconfont ├── iconfont.css ├── iconfont.eot ├── iconfont.svg ├── iconfont.ttf └── iconfont.woff /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["env", { 4 | "modules": false, 5 | "targets": { 6 | "browsers": ["> 1%", "last 2 versions", "not ie <= 8"] 7 | } 8 | }], 9 | "stage-2" 10 | ], 11 | "plugins": ["transform-vue-jsx", "transform-runtime"] 12 | } 13 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules/ 3 | npm-debug.log* 4 | yarn-debug.log* 5 | yarn-error.log* 6 | 7 | # Editor directories and files 8 | .idea 9 | .vscode 10 | *.suo 11 | *.ntvs* 12 | *.njsproj 13 | *.sln 14 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | phantomjs_cdnurl=http://cnpmjs.org/downloads 2 | sass_binary_site=https://npm.taobao.org/mirrors/node-sass/ 3 | registry=https://registry.npm.taobao.org 4 | -------------------------------------------------------------------------------- /.postcssrc.js: -------------------------------------------------------------------------------- 1 | // https://github.com/michael-ciniawsky/postcss-load-config 2 | 3 | module.exports = { 4 | "plugins": { 5 | "postcss-import": {}, 6 | "postcss-url": {}, 7 | // to edit target browsers: use "browserslist" field in package.json 8 | "autoprefixer": {} 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018-present FishPlusOrange 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # CNode by Vue 2 | 3 | 基于 [Vue](https://github.com/vuejs/vue) 和 [CNode API](http://cnodejs.org/api) 实现的 CNode 社区。 4 | 5 | ## Preview 6 | 7 | 在线预览:https://fishplusorange.github.io/cnode-by-vue/dist 8 | 9 | 源代码:https://github.com/FishPlusOrange/cnode-by-vue 10 | 11 | ## Features 12 | 13 | 已实现的功能: 14 | 15 | - [x] 用户登录和退出:通过验证用户 accessToken 登录 CNode 社区或退出登录 16 | - [x] 查看话题列表和话题内容:查看不同类别的话题列表和话题内容,类别包括全部、精华、分享、问答、招聘和测试 17 | - [x] 评论功能:对话题进行评论 18 | - [x] 回复功能:对评论进行回复 19 | - [x] 点赞功能:点赞评论或取消点赞 20 | - [x] 收藏功能:收藏话题或取消收藏 21 | - [x] 新建话题:新建相应类别的话题 22 | - [x] 消息中心:未读消息数提示,查看所有未读和已读消息 23 | - [x] 我的收藏:查看所有收藏话题 24 | - [x] 用户信息:查看用户基本信息,包括个人信息、最近创建的话题和最近参与的话题 25 | 26 | ## Technology 27 | 28 | 主要用到的技术: 29 | 30 | - Vue:MVVM 框架,用于构建前端界面 31 | - Vue CLI:Vue 脚手架,用于快速搭建 Vue 项目 32 | - Vue Router:Vue 路由管理器,用于实现路由组件切换、参数传递等 33 | - Vuex:Vue 状态管理模式,采用集中式存储管理所有组件的状态,实现不同组件间的状态共享 34 | - Axios:基于 Promise 的 HTTP 库,用于发送异步请求 35 | - ES6:采用 ES6 语法,如箭头函数、Promise、模板字符串等 36 | - Mint UI:基于 Vue 的移动端组件库 37 | - Sass:CSS 预处理器,采用 Sass3 的语法规则 SCSS,提供变量、计算、嵌套、Mixin、函数等 38 | - CSS3:使用 CSS3 新特性,比如过渡动画等 39 | - Flex:弹性布局,简单适配移动端和 PC 端 40 | - Moment.js:JavaScript 日期处理类库,用于对日期进行格式化 41 | - Webpack:Vue CLI 搭建的项目基于 Webpack,在 Vue CLI 所提供的基础配置上,做了相应调整,比如 Sass 相关配置 42 | 43 | ## Start 44 | 45 | ```bash 46 | # clone with Git Bash 47 | git clone https://github.com/FishPlusOrange/cnode-by-vue.git 48 | 49 | # change directory 50 | cd cnode-by-vue 51 | 52 | # install dependencies 53 | npm install 54 | 55 | # serve with hot reload at localhost:8686 56 | npm run dev 57 | 58 | # build for production with minification 59 | npm run build 60 | 61 | # build for production and view the bundle analyzer report 62 | npm run build --report 63 | ``` 64 | 65 | ## License 66 | 67 | [MIT](https://github.com/FishPlusOrange/cnode-by-vue/blob/master/LICENSE) 68 | 69 | Copyright (c) 2018-present FishPlusOrange 70 | -------------------------------------------------------------------------------- /build/build.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | require('./check-versions')() 3 | 4 | process.env.NODE_ENV = 'production' 5 | 6 | const ora = require('ora') 7 | const rm = require('rimraf') 8 | const path = require('path') 9 | const chalk = require('chalk') 10 | const webpack = require('webpack') 11 | const config = require('../config') 12 | const webpackConfig = require('./webpack.prod.conf') 13 | 14 | const spinner = ora('building for production...') 15 | spinner.start() 16 | 17 | rm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err => { 18 | if (err) throw err 19 | webpack(webpackConfig, (err, stats) => { 20 | spinner.stop() 21 | if (err) throw err 22 | process.stdout.write(stats.toString({ 23 | colors: true, 24 | modules: false, 25 | children: false, // If you are using ts-loader, setting this to true will make TypeScript errors show up during build. 26 | chunks: false, 27 | chunkModules: false 28 | }) + '\n\n') 29 | 30 | if (stats.hasErrors()) { 31 | console.log(chalk.red(' Build failed with errors.\n')) 32 | process.exit(1) 33 | } 34 | 35 | console.log(chalk.cyan(' Build complete.\n')) 36 | console.log(chalk.yellow( 37 | ' Tip: built files are meant to be served over an HTTP server.\n' + 38 | ' Opening index.html over file:// won\'t work.\n' 39 | )) 40 | }) 41 | }) 42 | -------------------------------------------------------------------------------- /build/check-versions.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const chalk = require('chalk') 3 | const semver = require('semver') 4 | const packageConfig = require('../package.json') 5 | const shell = require('shelljs') 6 | 7 | function exec (cmd) { 8 | return require('child_process').execSync(cmd).toString().trim() 9 | } 10 | 11 | const versionRequirements = [ 12 | { 13 | name: 'node', 14 | currentVersion: semver.clean(process.version), 15 | versionRequirement: packageConfig.engines.node 16 | } 17 | ] 18 | 19 | if (shell.which('npm')) { 20 | versionRequirements.push({ 21 | name: 'npm', 22 | currentVersion: exec('npm --version'), 23 | versionRequirement: packageConfig.engines.npm 24 | }) 25 | } 26 | 27 | module.exports = function () { 28 | const warnings = [] 29 | 30 | for (let i = 0; i < versionRequirements.length; i++) { 31 | const mod = versionRequirements[i] 32 | 33 | if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) { 34 | warnings.push(mod.name + ': ' + 35 | chalk.red(mod.currentVersion) + ' should be ' + 36 | chalk.green(mod.versionRequirement) 37 | ) 38 | } 39 | } 40 | 41 | if (warnings.length) { 42 | console.log('') 43 | console.log(chalk.yellow('To use this template, you must update following to modules:')) 44 | console.log() 45 | 46 | for (let i = 0; i < warnings.length; i++) { 47 | const warning = warnings[i] 48 | console.log(' ' + warning) 49 | } 50 | 51 | console.log() 52 | process.exit(1) 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /build/utils.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const path = require('path') 3 | const config = require('../config') 4 | const ExtractTextPlugin = require('extract-text-webpack-plugin') 5 | const packageConfig = require('../package.json') 6 | 7 | exports.assetsPath = function (_path) { 8 | const assetsSubDirectory = process.env.NODE_ENV === 'production' 9 | ? config.build.assetsSubDirectory 10 | : config.dev.assetsSubDirectory 11 | 12 | return path.posix.join(assetsSubDirectory, _path) 13 | } 14 | 15 | exports.cssLoaders = function (options) { 16 | options = options || {} 17 | 18 | const cssLoader = { 19 | loader: 'css-loader', 20 | options: { 21 | sourceMap: options.sourceMap 22 | } 23 | } 24 | 25 | const postcssLoader = { 26 | loader: 'postcss-loader', 27 | options: { 28 | sourceMap: options.sourceMap 29 | } 30 | } 31 | 32 | // generate loader string to be used with extract text plugin 33 | function generateLoaders (loader, loaderOptions) { 34 | const loaders = options.usePostCSS ? [cssLoader, postcssLoader] : [cssLoader] 35 | 36 | if (loader) { 37 | loaders.push({ 38 | loader: loader + '-loader', 39 | options: Object.assign({}, loaderOptions, { 40 | sourceMap: options.sourceMap 41 | }) 42 | }) 43 | } 44 | 45 | // Extract CSS when that option is specified 46 | // (which is the case during production build) 47 | if (options.extract) { 48 | return ExtractTextPlugin.extract({ 49 | use: loaders, 50 | fallback: 'vue-style-loader' 51 | }) 52 | } else { 53 | return ['vue-style-loader'].concat(loaders) 54 | } 55 | } 56 | 57 | // https://vue-loader.vuejs.org/en/configurations/extract-css.html 58 | return { 59 | css: generateLoaders(), 60 | postcss: generateLoaders(), 61 | less: generateLoaders('less'), 62 | sass: generateLoaders('sass', { indentedSyntax: true }), 63 | scss: generateLoaders('sass').concat({ 64 | loader: 'sass-resources-loader', 65 | options: { 66 | resources: path.resolve(__dirname, '../src/assets/css/variables.scss') 67 | } 68 | }), 69 | stylus: generateLoaders('stylus'), 70 | styl: generateLoaders('stylus') 71 | } 72 | } 73 | 74 | // Generate loaders for standalone style files (outside of .vue) 75 | exports.styleLoaders = function (options) { 76 | const output = [] 77 | const loaders = exports.cssLoaders(options) 78 | 79 | for (const extension in loaders) { 80 | const loader = loaders[extension] 81 | output.push({ 82 | test: new RegExp('\\.' + extension + '$'), 83 | use: loader 84 | }) 85 | } 86 | 87 | return output 88 | } 89 | 90 | exports.createNotifierCallback = () => { 91 | const notifier = require('node-notifier') 92 | 93 | return (severity, errors) => { 94 | if (severity !== 'error') return 95 | 96 | const error = errors[0] 97 | const filename = error.file && error.file.split('!').pop() 98 | 99 | notifier.notify({ 100 | title: packageConfig.name, 101 | message: severity + ': ' + error.name, 102 | subtitle: filename || '', 103 | icon: path.join(__dirname, 'logo.png') 104 | }) 105 | } 106 | } 107 | -------------------------------------------------------------------------------- /build/vue-loader.conf.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const utils = require('./utils') 3 | const config = require('../config') 4 | const isProduction = process.env.NODE_ENV === 'production' 5 | const sourceMapEnabled = isProduction 6 | ? config.build.productionSourceMap 7 | : config.dev.cssSourceMap 8 | 9 | module.exports = { 10 | loaders: utils.cssLoaders({ 11 | sourceMap: sourceMapEnabled, 12 | extract: isProduction 13 | }), 14 | cssSourceMap: sourceMapEnabled, 15 | cacheBusting: config.dev.cacheBusting, 16 | transformToRequire: { 17 | video: ['src', 'poster'], 18 | source: 'src', 19 | img: 'src', 20 | image: 'xlink:href' 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /build/webpack.base.conf.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const path = require('path') 3 | const utils = require('./utils') 4 | const config = require('../config') 5 | const vueLoaderConfig = require('./vue-loader.conf') 6 | 7 | function resolve (dir) { 8 | return path.join(__dirname, '..', dir) 9 | } 10 | 11 | 12 | 13 | module.exports = { 14 | context: path.resolve(__dirname, '../'), 15 | entry: { 16 | app: './src/main.js' 17 | }, 18 | output: { 19 | path: config.build.assetsRoot, 20 | filename: '[name].js', 21 | publicPath: process.env.NODE_ENV === 'production' 22 | ? config.build.assetsPublicPath 23 | : config.dev.assetsPublicPath 24 | }, 25 | resolve: { 26 | extensions: ['.js', '.vue', '.json'], 27 | alias: { 28 | 'vue$': 'vue/dist/vue.esm.js', 29 | '@': resolve('src'), 30 | } 31 | }, 32 | module: { 33 | rules: [ 34 | { 35 | test: /\.vue$/, 36 | loader: 'vue-loader', 37 | options: vueLoaderConfig 38 | }, 39 | { 40 | test: /\.js$/, 41 | loader: 'babel-loader', 42 | include: [resolve('src'), resolve('test'), resolve('node_modules/webpack-dev-server/client')] 43 | }, 44 | { 45 | test: /\.(png|jpe?g|gif|svg)(\?.*)?$/, 46 | loader: 'url-loader', 47 | options: { 48 | limit: 10000, 49 | name: utils.assetsPath('img/[name].[hash:7].[ext]') 50 | } 51 | }, 52 | { 53 | test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/, 54 | loader: 'url-loader', 55 | options: { 56 | limit: 10000, 57 | name: utils.assetsPath('media/[name].[hash:7].[ext]') 58 | } 59 | }, 60 | { 61 | test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/, 62 | loader: 'url-loader', 63 | options: { 64 | limit: 10000, 65 | name: utils.assetsPath('fonts/[name].[hash:7].[ext]') 66 | } 67 | }, 68 | { 69 | test: /\.scss$/, 70 | loaders: ['style', 'css', 'sass'] 71 | } 72 | ] 73 | }, 74 | node: { 75 | // prevent webpack from injecting useless setImmediate polyfill because Vue 76 | // source contains it (although only uses it if it's native). 77 | setImmediate: false, 78 | // prevent webpack from injecting mocks to Node native modules 79 | // that does not make sense for the client 80 | dgram: 'empty', 81 | fs: 'empty', 82 | net: 'empty', 83 | tls: 'empty', 84 | child_process: 'empty' 85 | } 86 | } 87 | -------------------------------------------------------------------------------- /build/webpack.dev.conf.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const utils = require('./utils') 3 | const webpack = require('webpack') 4 | const config = require('../config') 5 | const merge = require('webpack-merge') 6 | const path = require('path') 7 | const baseWebpackConfig = require('./webpack.base.conf') 8 | const CopyWebpackPlugin = require('copy-webpack-plugin') 9 | const HtmlWebpackPlugin = require('html-webpack-plugin') 10 | const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin') 11 | const portfinder = require('portfinder') 12 | 13 | const HOST = process.env.HOST 14 | const PORT = process.env.PORT && Number(process.env.PORT) 15 | 16 | const devWebpackConfig = merge(baseWebpackConfig, { 17 | module: { 18 | rules: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap, usePostCSS: true }) 19 | }, 20 | // cheap-module-eval-source-map is faster for development 21 | devtool: config.dev.devtool, 22 | 23 | // these devServer options should be customized in /config/index.js 24 | devServer: { 25 | clientLogLevel: 'warning', 26 | historyApiFallback: { 27 | rewrites: [ 28 | { from: /.*/, to: path.posix.join(config.dev.assetsPublicPath, 'index.html') }, 29 | ], 30 | }, 31 | hot: true, 32 | contentBase: false, // since we use CopyWebpackPlugin. 33 | compress: true, 34 | host: HOST || config.dev.host, 35 | port: PORT || config.dev.port, 36 | open: config.dev.autoOpenBrowser, 37 | overlay: config.dev.errorOverlay 38 | ? { warnings: false, errors: true } 39 | : false, 40 | publicPath: config.dev.assetsPublicPath, 41 | proxy: config.dev.proxyTable, 42 | quiet: true, // necessary for FriendlyErrorsPlugin 43 | watchOptions: { 44 | poll: config.dev.poll, 45 | } 46 | }, 47 | plugins: [ 48 | new webpack.DefinePlugin({ 49 | 'process.env': require('../config/dev.env') 50 | }), 51 | new webpack.HotModuleReplacementPlugin(), 52 | new webpack.NamedModulesPlugin(), // HMR shows correct file names in console on update. 53 | new webpack.NoEmitOnErrorsPlugin(), 54 | // https://github.com/ampedandwired/html-webpack-plugin 55 | new HtmlWebpackPlugin({ 56 | filename: 'index.html', 57 | template: 'index.html', 58 | inject: true 59 | }), 60 | // copy custom static assets 61 | new CopyWebpackPlugin([ 62 | { 63 | from: path.resolve(__dirname, '../static'), 64 | to: config.dev.assetsSubDirectory, 65 | ignore: ['.*'] 66 | } 67 | ]) 68 | ] 69 | }) 70 | 71 | module.exports = new Promise((resolve, reject) => { 72 | portfinder.basePort = process.env.PORT || config.dev.port 73 | portfinder.getPort((err, port) => { 74 | if (err) { 75 | reject(err) 76 | } else { 77 | // publish the new Port, necessary for e2e tests 78 | process.env.PORT = port 79 | // add port to devServer config 80 | devWebpackConfig.devServer.port = port 81 | 82 | // Add FriendlyErrorsPlugin 83 | devWebpackConfig.plugins.push(new FriendlyErrorsPlugin({ 84 | compilationSuccessInfo: { 85 | messages: [`Your application is running here: http://${devWebpackConfig.devServer.host}:${port}`], 86 | }, 87 | onErrors: config.dev.notifyOnErrors 88 | ? utils.createNotifierCallback() 89 | : undefined 90 | })) 91 | 92 | resolve(devWebpackConfig) 93 | } 94 | }) 95 | }) 96 | -------------------------------------------------------------------------------- /build/webpack.prod.conf.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const path = require('path') 3 | const utils = require('./utils') 4 | const webpack = require('webpack') 5 | const config = require('../config') 6 | const merge = require('webpack-merge') 7 | const baseWebpackConfig = require('./webpack.base.conf') 8 | const CopyWebpackPlugin = require('copy-webpack-plugin') 9 | const HtmlWebpackPlugin = require('html-webpack-plugin') 10 | const ExtractTextPlugin = require('extract-text-webpack-plugin') 11 | const OptimizeCSSPlugin = require('optimize-css-assets-webpack-plugin') 12 | const UglifyJsPlugin = require('uglifyjs-webpack-plugin') 13 | 14 | const env = require('../config/prod.env') 15 | 16 | const webpackConfig = merge(baseWebpackConfig, { 17 | module: { 18 | rules: utils.styleLoaders({ 19 | sourceMap: config.build.productionSourceMap, 20 | extract: true, 21 | usePostCSS: true 22 | }) 23 | }, 24 | devtool: config.build.productionSourceMap ? config.build.devtool : false, 25 | output: { 26 | path: config.build.assetsRoot, 27 | filename: utils.assetsPath('js/[name].[chunkhash].js'), 28 | chunkFilename: utils.assetsPath('js/[id].[chunkhash].js') 29 | }, 30 | plugins: [ 31 | // http://vuejs.github.io/vue-loader/en/workflow/production.html 32 | new webpack.DefinePlugin({ 33 | 'process.env': env 34 | }), 35 | new UglifyJsPlugin({ 36 | uglifyOptions: { 37 | compress: { 38 | warnings: false 39 | } 40 | }, 41 | sourceMap: config.build.productionSourceMap, 42 | parallel: true 43 | }), 44 | // extract css into its own file 45 | new ExtractTextPlugin({ 46 | filename: utils.assetsPath('css/[name].[contenthash].css'), 47 | // Setting the following option to `false` will not extract CSS from codesplit chunks. 48 | // Their CSS will instead be inserted dynamically with style-loader when the codesplit chunk has been loaded by webpack. 49 | // It's currently set to `true` because we are seeing that sourcemaps are included in the codesplit bundle as well when it's `false`, 50 | // increasing file size: https://github.com/vuejs-templates/webpack/issues/1110 51 | allChunks: true, 52 | }), 53 | // Compress extracted CSS. We are using this plugin so that possible 54 | // duplicated CSS from different components can be deduped. 55 | new OptimizeCSSPlugin({ 56 | cssProcessorOptions: config.build.productionSourceMap 57 | ? { safe: true, map: { inline: false } } 58 | : { safe: true } 59 | }), 60 | // generate dist index.html with correct asset hash for caching. 61 | // you can customize output by editing /index.html 62 | // see https://github.com/ampedandwired/html-webpack-plugin 63 | new HtmlWebpackPlugin({ 64 | filename: config.build.index, 65 | template: 'index.html', 66 | inject: true, 67 | minify: { 68 | removeComments: true, 69 | collapseWhitespace: true, 70 | removeAttributeQuotes: true 71 | // more options: 72 | // https://github.com/kangax/html-minifier#options-quick-reference 73 | }, 74 | // necessary to consistently work with multiple chunks via CommonsChunkPlugin 75 | chunksSortMode: 'dependency' 76 | }), 77 | // keep module.id stable when vendor modules does not change 78 | new webpack.HashedModuleIdsPlugin(), 79 | // enable scope hoisting 80 | new webpack.optimize.ModuleConcatenationPlugin(), 81 | // split vendor js into its own file 82 | new webpack.optimize.CommonsChunkPlugin({ 83 | name: 'vendor', 84 | minChunks (module) { 85 | // any required modules inside node_modules are extracted to vendor 86 | return ( 87 | module.resource && 88 | /\.js$/.test(module.resource) && 89 | module.resource.indexOf( 90 | path.join(__dirname, '../node_modules') 91 | ) === 0 92 | ) 93 | } 94 | }), 95 | // extract webpack runtime and module manifest to its own file in order to 96 | // prevent vendor hash from being updated whenever app bundle is updated 97 | new webpack.optimize.CommonsChunkPlugin({ 98 | name: 'manifest', 99 | minChunks: Infinity 100 | }), 101 | // This instance extracts shared chunks from code splitted chunks and bundles them 102 | // in a separate chunk, similar to the vendor chunk 103 | // see: https://webpack.js.org/plugins/commons-chunk-plugin/#extra-async-commons-chunk 104 | new webpack.optimize.CommonsChunkPlugin({ 105 | name: 'app', 106 | async: 'vendor-async', 107 | children: true, 108 | minChunks: 3 109 | }), 110 | 111 | // copy custom static assets 112 | new CopyWebpackPlugin([ 113 | { 114 | from: path.resolve(__dirname, '../static'), 115 | to: config.build.assetsSubDirectory, 116 | ignore: ['.*'] 117 | } 118 | ]) 119 | ] 120 | }) 121 | 122 | if (config.build.productionGzip) { 123 | const CompressionWebpackPlugin = require('compression-webpack-plugin') 124 | 125 | webpackConfig.plugins.push( 126 | new CompressionWebpackPlugin({ 127 | asset: '[path].gz[query]', 128 | algorithm: 'gzip', 129 | test: new RegExp( 130 | '\\.(' + 131 | config.build.productionGzipExtensions.join('|') + 132 | ')$' 133 | ), 134 | threshold: 10240, 135 | minRatio: 0.8 136 | }) 137 | ) 138 | } 139 | 140 | if (config.build.bundleAnalyzerReport) { 141 | const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin 142 | webpackConfig.plugins.push(new BundleAnalyzerPlugin()) 143 | } 144 | 145 | module.exports = webpackConfig 146 | -------------------------------------------------------------------------------- /config/dev.env.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const merge = require('webpack-merge') 3 | const prodEnv = require('./prod.env') 4 | 5 | module.exports = merge(prodEnv, { 6 | NODE_ENV: '"development"' 7 | }) 8 | -------------------------------------------------------------------------------- /config/index.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | // Template version: 1.3.1 3 | // see http://vuejs-templates.github.io/webpack for documentation. 4 | 5 | const path = require('path') 6 | 7 | module.exports = { 8 | dev: { 9 | 10 | // Paths 11 | assetsSubDirectory: 'static', 12 | assetsPublicPath: '/', 13 | proxyTable: {}, 14 | 15 | // Various Dev Server settings 16 | host: 'localhost', // can be overwritten by process.env.HOST 17 | port: 8686, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined 18 | autoOpenBrowser: false, 19 | errorOverlay: true, 20 | notifyOnErrors: true, 21 | poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions- 22 | 23 | 24 | /** 25 | * Source Maps 26 | */ 27 | 28 | // https://webpack.js.org/configuration/devtool/#development 29 | devtool: 'cheap-module-eval-source-map', 30 | 31 | // If you have problems debugging vue-files in devtools, 32 | // set this to false - it *may* help 33 | // https://vue-loader.vuejs.org/en/options.html#cachebusting 34 | cacheBusting: true, 35 | 36 | cssSourceMap: true 37 | }, 38 | 39 | build: { 40 | // Template for index.html 41 | index: path.resolve(__dirname, '../dist/index.html'), 42 | 43 | // Paths 44 | assetsRoot: path.resolve(__dirname, '../dist'), 45 | assetsSubDirectory: 'static', 46 | assetsPublicPath: './', 47 | 48 | /** 49 | * Source Maps 50 | */ 51 | 52 | productionSourceMap: false, 53 | // https://webpack.js.org/configuration/devtool/#production 54 | devtool: '#source-map', 55 | 56 | // Gzip off by default as many popular static hosts such as 57 | // Surge or Netlify already gzip all static assets for you. 58 | // Before setting to `true`, make sure to: 59 | // npm install --save-dev compression-webpack-plugin 60 | productionGzip: false, 61 | productionGzipExtensions: ['js', 'css'], 62 | 63 | // Run the build command with an extra argument to 64 | // View the bundle analyzer report after build finishes: 65 | // `npm run build --report` 66 | // Set to `true` or `false` to always turn it on or off 67 | bundleAnalyzerReport: process.env.npm_config_report 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /config/prod.env.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | module.exports = { 3 | NODE_ENV: '"production"' 4 | } 5 | -------------------------------------------------------------------------------- /dist/index.html: -------------------------------------------------------------------------------- 1 | CNode by Vue
-------------------------------------------------------------------------------- /dist/static/css/app.0d5fab0b5d71e0cb8d54241c3f5fc49f.css: -------------------------------------------------------------------------------- 1 | @font-face{font-family:iconfont;src:url(data:application/vnd.ms-fontobject;base64,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);src:url(data:application/vnd.ms-fontobject;base64,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#iefix) format("embedded-opentype"),url("data:application/x-font-woff;charset=utf-8;base64,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") format("woff"),url(data:application/x-font-ttf;base64,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) format("truetype"),url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIiA+DQo8IS0tDQoyMDEzLTktMzA6IENyZWF0ZWQuDQotLT4NCjxzdmc+DQo8bWV0YWRhdGE+DQpDcmVhdGVkIGJ5IGljb25mb250DQo8L21ldGFkYXRhPg0KPGRlZnM+DQoNCjxmb250IGlkPSJpY29uZm9udCIgaG9yaXotYWR2LXg9IjEwMjQiID4NCiAgPGZvbnQtZmFjZQ0KICAgIGZvbnQtZmFtaWx5PSJpY29uZm9udCINCiAgICBmb250LXdlaWdodD0iNTAwIg0KICAgIGZvbnQtc3RyZXRjaD0ibm9ybWFsIg0KICAgIHVuaXRzLXBlci1lbT0iMTAyNCINCiAgICBhc2NlbnQ9Ijg5NiINCiAgICBkZXNjZW50PSItMTI4Ig0KICAvPg0KICAgIDxtaXNzaW5nLWdseXBoIC8+DQogICAgDQogICAgPGdseXBoIGdseXBoLW5hbWU9IngiIHVuaWNvZGU9IngiIGhvcml6LWFkdi14PSIxMDAxIg0KZD0iTTI4MSA1NDNxLTI3IC0xIC01MyAtMWgtODNxLTE4IDAgLTM2LjUgLTZ0LTMyLjUgLTE4LjV0LTIzIC0zMnQtOSAtNDUuNXYtNzZoOTEydjQxcTAgMTYgLTAuNSAzMHQtMC41IDE4cTAgMTMgLTUgMjl0LTE3IDI5LjV0LTMxLjUgMjIuNXQtNDkuNSA5aC0xMzN2LTk3aC00Mzh2OTd6TTk1NSAzMTB2LTUycTAgLTIzIDAuNSAtNTJ0MC41IC01OHQtMTAuNSAtNDcuNXQtMjYgLTMwdC0zMyAtMTZ0LTMxLjUgLTQuNXEtMTQgLTEgLTI5LjUgLTAuNQ0KdC0yOS41IDAuNWgtMzJsLTQ1IDEyOGgtNDM5bC00NCAtMTI4aC0yOWgtMzRxLTIwIDAgLTQ1IDFxLTI1IDAgLTQxIDkuNXQtMjUuNSAyM3QtMTMuNSAyOS41dC00IDMwdjE2N2g5MTF6TTE2MyAyNDdxLTEyIDAgLTIxIC04LjV0LTkgLTIxLjV0OSAtMjEuNXQyMSAtOC41cTEzIDAgMjIgOC41dDkgMjEuNXQtOSAyMS41dC0yMiA4LjV6TTMxNiAxMjNxLTggLTI2IC0xNCAtNDhxLTUgLTE5IC0xMC41IC0zN3QtNy41IC0yNXQtMyAtMTV0MSAtMTQuNQ0KdDkuNSAtMTAuNXQyMS41IC00aDM3aDY3aDgxaDgwaDY0aDM2cTIzIDAgMzQgMTJ0MiAzOHEtNSAxMyAtOS41IDMwLjV0LTkuNSAzNC41cS01IDE5IC0xMSAzOWgtMzY4ek0zMzYgNDk4djIyOHEwIDExIDIuNSAyM3QxMCAyMS41dDIwLjUgMTUuNXQzNCA2aDE4OHEzMSAwIDUxLjUgLTE0LjV0MjAuNSAtNTIuNXYtMjI3aC0zMjd6IiAvPg0KICAgIA0KDQogICAgDQogICAgPGdseXBoIGdseXBoLW5hbWU9InJlcGx5IiB1bmljb2RlPSImIzU4OTI0OyIgZD0iTTk5Ny40IDk5LjEwMDAwMDAwMDAwMDAyYy04LjkgMC0xNy4yIDUuMi0yMSAxMy42LTguNiAxOC43LTM4LjUgNjYuMi05MC42IDEwOC44LTM4LjEgMzEuMS04NC40IDc0LTEzMy40IDkxLjhDNjkwLjYgMzM1LjYgNjIyLjkgMzU2IDU0Ny4yIDM1NmMtNTEuOCAwLTk4LjEtNC4zLTE1NS44LTE0LjhsMC0xNzkuNWMwLTkuMy01LjYtMTcuOC0xNC4zLTIxLjQtOC42LTMuNi0yNy42LTEuNi0zNC4yIDVMMTAuMiA0NzcuOWMtNC4zIDQuMy02LjggMTAuMi02LjggMTYuMyAwIDYuMSAyLjQgMTIgNi44IDE2LjNMMzQyLjkgODQzLjNjNi42IDYuNiAyMy42IDguNiAzMi4yIDUgOC42LTMuNiAxNC4zLTEyIDE0LjMtMjEuNGwwLTE3MmMxNi43IDEuMyAzMy42IDEuNyA2Mi41IDEuNyA5NS4zIDAgMjMzLjYtMTUuMyAzNTAuOC04My40IDY2LjItMzguNSAxMTguMi05MC4yIDE1NC41LTE1My41IDQyLjEtNzMuNCA2My40LTE5My40IDYzLjQtMjk3LjUgMC0xMC45LTcuNi0yMC4zLTE4LjMtMjIuNkMxMDAwLjcgOTkuMjAwMDAwMDAwMDAwMDUgOTk5IDk5LjEwMDAwMDAwMDAwMDAyIDk5Ny40IDk5LjEwMDAwMDAwMDAwMDAyek04OC44IDQ5NC4yTDMyNCAyNTcuMSAzMjQgMzg1LjdjMCAxMC4zIDkuMyAxOS4yIDE5LjQgMjEuMiA2My4xIDEyLjYgMTQzLjcgMTYgMjAwLjIgMTYgNzYuNyAwIDE0Ny41LTE0LjcgMjEwLjQtMzcuOCA1MC44LTE4LjYgOTYuNS00NC42IDEzNi03Ny4zIDE5LjYtMTYuMiA0NS43LTMxLjUgNTguOC00Ni40QzkyMiAzODQgODYyLjcgNDU2LjUgNzYxIDUxNS43Yy0xMDEuNCA1OS0yMjIuNyA3Ni4zLTMwNi43IDc2LjMtNDkuOSAwLTEwMy40LTkuNS0xMDMuNy05LjYtNi4yLTAuOS0xNC41IDAtMTkuMiA0LjEtNC43IDQuMS03LjQgMTAuMS03LjQgMTYuM2wwIDEyOC42TDg4LjggNDk0LjJ6IiAgaG9yaXotYWR2LXg9IjEwMjQiIC8+DQoNCiAgICANCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idXAiIHVuaWNvZGU9IiYjNTg5Mjg7IiBkPSJNNjkyLjU3NjcwNSA3OTEuODM5NzA5Yy04NS4yMjA5NCAwLTE0OS4yOTAxNDEtNjAuNTM4Nzk1LTE4Ni44MzUyNDYtMTA4Ljc5NzkxNS0zNy41MTQ0MDUgNDguMjU5MTItMTAxLjU4MzYwNiAxMDguNzk3OTE1LTE4Ni44MDQ1NDcgMTA4Ljc5NzkxNS0xMDkuMDEyODA5IDAtMjA4LjU3MDI2OS03NS4xMjA5MDgtMjQ3Ljc0MjQzMS0xODYuODk2NjQ0LTUuNzQwNzQ4LTE2LjM5MzM2NSAyLjg4NTcyMy0zNC4zMjE2OSAxOS4yNDgzOS00MC4wNjI0MzggMTYuNDU0NzY0LTUuODYzNTQ1IDM0LjM1MjM4OSAyLjkxNjQyMyA0MC4wNjI0MzggMTkuMjQ4MzkgMzAuMzYxNDk1IDg2LjYzMzEwMyAxMDYuMDk2Mzg3IDE0NC44Mzg3NTkgMTg4LjQzMTYwMyAxNDQuODM4NzU5IDU1LjEzNTczOCAwIDExNC45Mzc3NTItNDMuOTMwNTM1IDE2MC4wMDQxNTctMTE3LjQ4NTc4NSA1LjcxMDA0OS05LjMzMjU1MyAxNS44NzE0NzktMTUuMDExOTAyIDI2LjgwMDM4OS0xNS4wMTE5MDIgMTAuOTI4OTEgMCAyMS4wOTAzNDEgNS42NzkzNDkgMjYuODAwMzg5IDE1LjAxMTkwMiA0NS4wOTcxMDQgNzMuNTU1MjUgMTA0Ljg5OTExOCAxMTcuNDg1Nzg1IDE2MC4wMzQ4NTYgMTE3LjQ4NTc4NSAxMTEuNjIyMjQgMCAyMDIuNDMwNDMyLTEwMi40MTI0ODQgMjAyLjQzMDQzMi0yMjguMzA5ODQ2IDAtNjcuMTM5MTItMzAuMzkyMTk0LTEzMC4xNjQ1NDgtOTIuOTI2NDM2LTE5Mi42OTg3OS05NS40MTMwNy05NS40MTMwNy0yNTEuMDI3MjQ0LTIzNi41Njc5MjctMjk1LjMyNzE5Mi0yNjUuNjQwMDU2LTQzLjU5Mjg0NCAyOS4xMDI4MjgtMjAwLjg2NDc3NCAxNjkuMTIxODE1LTI5Ny44MTI4MDMgMjY2LjA2OTg0NS0zMy45ODM5OTkgMzMuOTgzOTk5LTU5LjA2NTIzNCA3MC4xNDc2NC03NC41OTkwMjIgMTA3LjUwODU0OS0yLjU3ODczMiA2LjIzMTkzNS00Ljg4MTE3MSAxMi40MzMxNy02LjkwNzMxNyAxOC42MDM3MDctNS40MzM3NTYgMTYuNTE2MTYyLTIzLjI2OTk4MyAyNS41MTEwMjQtMzkuNjk0MDQ3IDIwLjA0NjU2OC0xNi40ODU0NjMtNS40MzM3NTYtMjUuNDQ5NjI1LTIzLjIwODU4NS0yMC4wNDY1NjgtMzkuNjk0MDQ3IDIuNTE3MzMzLTcuNjQ0MDk3IDUuMzcyMzU4LTE1LjMxODg5NCA4LjU2NTA3My0yMy4wNTUwODkgMTguNzI2NTAzLTQ1LjAzNTcwNiA0OC40MTI2MTYtODguMDQ1MjY1IDg4LjIyOTQ2LTEyNy44NjIxMDkgMi44ODU3MjMtMi44ODU3MjMgMjkxLjgyNjQ2Mi0yODcuNzc0MTY5IDM0Mi4wNTEzNTMtMjg3Ljc3NDE2OSA1MS4yMDYyNDIgMCAzMzcuMTA4Nzg0IDI4NC40NTg2NTcgMzM5Ljk5NDUwOCAyODcuMzQ0MzgxIDczLjg5Mjk0MSA3My44OTI5NDEgMTExLjM0NTk0NyAxNTMuNjgwMTI1IDExMS4zNDU5NDcgMjM3LjE1MTIxMUM5NTcuODc5MDcgNjYxLjIxNDY3MjAwMDAwMDEgODM4Ljg1ODMyNiA3OTEuODM5NzA5IDY5Mi41NzY3MDUgNzkxLjgzOTcwOXoiICBob3Jpei1hZHYteD0iMTAyNCIgLz4NCg0KICAgIA0KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1cC1hY3RpdmUiIHVuaWNvZGU9IiYjNTg5Mjk7IiBkPSJNNjk2LjAxMTk0NCA3ODkuMTM1MTA5OTk5OTk5OWMtODQuNjU2MDc1IDAtMTQ4LjMwMDYwNC02MC4xMzc2NTktMTg1LjU2NjM0Ni0xMDguMDc2NDg0LTM3LjI5NjQ0MSA0Ny45Mzg4MjUtMTAwLjk0MDk3IDEwOC4wNzY0ODQtMTg1LjU5NzA0NSAxMDguMDc2NDg0LTEwOC4zMjEwNTQgMC0yMDcuMTg3NzgzLTc0LjYyMjU1OC0yNDYuMDY5MzI1LTE4NS42ODgxMTktMC4yNDM1NDctMC42NzEyODktMC40NTc0MTgtMS4zNDE1NTQtMC42NDA1OS0yLjA0MzU0Mi0xOS43MzAzNjctNzEuODE3Njc2LTE4LjM4ODgxMi0xMzEuNzQxNDYzIDUuNjQxNDg3LTIwOS42NTgwNDQgMTguNjAyNjgzLTQ0LjczNjkgNDguMDkxMjk4LTg3LjQ2MTk4MSA4Ny42NDQxMjktMTI3LjAxNDgxMiAyLjg2NjI4MS0yLjg2NjI4MSAyODkuODkyNDEzLTI4NS44NjY3MjYgMzM5Ljc4MjY4My0yODUuODY2NzI2IDUwLjg2NjUwNSAwIDMzNC44NzI4NiAyODIuNTcyNzA0IDMzNy43MzkxNDEgMjg1LjQ0MDAwOCA3My40MDI3NzcgNzMuNDAyNzc3IDExMC42MDgxNDQgMTUyLjY2MDkxMiAxMTAuNjA4MTQ0IDIzNS41Nzk0MTNDOTU5LjU1NTI0NiA2NTkuMzc1NzkwOTk5OTk5OSA4NDEuMzIzNDcxIDc4OS4xMzUxMDk5OTk5OTk5IDY5Ni4wMTE5NDQgNzg5LjEzNTEwOTk5OTk5OTl6IiAgaG9yaXotYWR2LXg9IjEwMjQiIC8+DQoNCiAgICANCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iY29sbGVjdCIgdW5pY29kZT0iJiM1ODk4NzsiIGQ9Ik05NTQuOTA4IDQ5Ni4xNzRjLTcuNzEgMjIuMy0yNy41NyAzOC42My01MS40NiA0Mi4xNzVsLTIzMi41MjkgMzQuNTY3LTEwMS4xIDIwOS43MzdjLTEwLjYxIDIyLjAyNy0zMy4zOCAzNi4xMi01OC40MTcgMzYuMTItMjUuMDA3IDAtNDcuNzg1LTE0LjA5Mi01OC40MjItMzYuMTJsLTEwMS4wNy0yMDkuNzM0LTIzMi41NTQtMzQuNTY3Yy0yMy44ODctMy41NDgtNDMuNzQ3LTE5Ljg3NS01MS40MjctNDIuMTc3LTcuNy0yMi4zNDUtMS44OC00Ni45NjIgMTQuOTkyLTYzLjc4bDE3MC40MDUtMTcwLjA4Mi0zOS41MjUtMjM1LjkwOWMtNC4wMS0yMy43NCA2LjMwNS00Ny41OSAyNi40OS02MS41IDExLjA5Ny03LjYgMjQuMTMtMTEuNDcgMzcuMTcyLTExLjQ3IDEwLjcxIDAgMjEuNDU3IDIuNjIgMzEuMjMgNy44MmwyMDIuNzA5IDEwOS4xIDIwMi43NDctMTA5LjFjOS43Ny01LjIgMjAuNTEtNy44MiAzMS4yLTcuODIgMTMuMDY1IDAgMjYuMDcgMy44NyAzNy4yIDExLjQ3IDIwLjE3NSAxMy45MSAzMC40NiAzNy43NiAyNi40OCA2MS41bC0zOS41NDUgMjM1LjkwOSAxNzAuNDM1IDE3MC4wODJDOTU2Ljc4OCA0NDkuMjA5IDk2Mi41NzMgNDczLjgyNiA5NTQuOTA4IDQ5Ni4xNzRMOTU0LjkwOCA0OTYuMTc0ek03MjMuMzE4IDMwNi4xNzJjLTE0LjI5NS0xNC4yNS0yMC43OS0zNC4yOS0xNy40OS01My45N2wzOS41Mi0yMzUuOTM5LTIwMi43MTkgMTA5LjA3Yy05Ljc0IDUuMjQtMjAuNDg1IDcuODQ1LTMxLjIyNyA3Ljg0NS0xMC43MTUgMC0yMS40NjUtMi42MDUtMzEuMTk1LTcuODQ1bC0yMDIuNzQ0LTEwOS4wNyAzOS41NCAyMzUuOTM5YzMuMjk1IDE5LjY4NS0zLjE4OCAzOS43Mi0xNy40ODIgNTMuOTdsLTE3MC4zOTIgMTcwLjA1IDIzMi41MjIgMzQuNjJjMjEuMjQyIDMuMTYzIDM5LjU0NSAxNi40NCA0OC42ODUgMzUuMzg3bDEwMS4wNjcgMjA5LjcxNCAxMDEuMDk3LTIwOS43MTRjOS4xNC0xOC45NDcgMjcuNDEtMzIuMjI1IDQ4LjY3LTM1LjM4N2wyMzIuNTQ5LTM0LjYyTDcyMy4zMTggMzA2LjE3MiA3MjMuMzE4IDMwNi4xNzJ6IiAgaG9yaXotYWR2LXg9IjEwMjQiIC8+DQoNCiAgICANCiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iY29tbWVudCIgdW5pY29kZT0iJiM1ODk4ODsiIGQ9Ik0zMzcuMzYxOTItMTguNjg3OTk5OTk5OTk5OTg4Yy0zLjU1ODQgMC03LjEzNzI4IDAuNzU3NzYtMTAuNDk2IDIuMzA0LTguODk4NTYgNC4wOTYtMTQuNjEyNDggMTIuOTk5NjgtMTQuNjEyNDggMjIuODA5NkwzMTIuMjUzNDQgMTEzLjQ1OTIwMDAwMDAwMDAxYzAgMTMuMjkxNTItMTAuODEzNDQgMjQuMDk5ODQtMjQuMTI1NDQgMjQuMDk5ODRsLTEyMi44OCAwYy00MS4wMDA5NiAwLTc0LjM1MjY0IDMzLjM1NjgtNzQuMzUyNjQgNzQuMzMyMTZMOTAuODk1MzYgNjYwLjMwMDhjMCA0MC45ODU2IDMzLjM1MTY4IDc0LjMzNzI4IDc0LjM1MjY0IDc0LjMzNzI4bDcwOC44MDc2OCAwYzQwLjk3NTM2IDAgNzQuMzI3MDQtMzMuMzUxNjggNzQuMzI3MDQtNzQuMzM3MjhsMC00NDguNDE0NzJjMC00MC45NzUzNi0zMy4zNTE2OC03NC4zMzIxNi03NC4zMjcwNC03NC4zMzIxNmwtMzM2LjE5OTY4IDBjLTUuNzYgMC0xMS4zNTEwNC0yLjA0OC0xNS43Mzg4OC01LjgzNjhsLTE2OC40MTcyOC0xNDQuMzU4NEMzNDkuMDYxMTItMTYuNjI0NjQgMzQzLjI0OTkyLTE4LjY4Nzk5OTk5OTk5OTk4OCAzMzcuMzYxOTItMTguNjg3OTk5OTk5OTk5OTg4ek0xNzkuNzg4OCA2NzMuMjhjLTEyLjg2NjU2IDAtMjMuMzE2NDgtMTAuMTYzMi0yMy4zMTY0OC0yMi42NzEzNmwwLTQyMS41NTUyYzAtMTIuNDg3NjggMTAuNDQ5OTItMjIuNjU2IDIzLjMxNjQ4LTIyLjY1NmwxMTguNzIyNTYgMGMzOS42MTM0NCAwIDcxLjgzODcyLTMxLjM2IDcxLjgzODcyLTY5Ljg3MjY0bDAtNDkuMjk1MzYgMTIyLjcwMDggMTAyLjMzODU2YzEzLjA1MDg4IDEwLjg1NDQgMjkuNjM5NjggMTYuODI5NDQgNDYuNzQ1NiAxNi44Mjk0NGwzMjQuODI4MTYgMGMxMi44NDA5NiAwIDIzLjI4NTc2IDEwLjE2MzIgMjMuMjg1NzYgMjIuNjU2TDg4Ny45MTA0IDY1MC42MDg2NGMwIDEyLjUwMzA0LTEwLjQ0NDggMjIuNjcxMzYtMjMuMjg1NzYgMjIuNjcxMzZMMTc5Ljc4ODggNjczLjI4eiIgIGhvcml6LWFkdi14PSIxMDI0IiAvPg0KDQogICAgDQogICAgPGdseXBoIGdseXBoLW5hbWU9ImNvbGxlY3QtYWN0aXZlIiB1bmljb2RlPSImIzU5MDExOyIgZD0iTTk1NC45MDggNDk2LjE3NGMtNy43MSAyMi4zLTI3LjU3IDM4LjYzLTUxLjQ2IDQyLjE3NWwtMjMyLjUyOSAzNC41NjctMTAxLjEgMjA5LjczN2MtMTAuNjEgMjIuMDI3LTMzLjM4IDM2LjEyLTU4LjQxNyAzNi4xMi0yNS4wMDcgMC00Ny43ODUtMTQuMDkyLTU4LjQyMi0zNi4xMmwtMTAxLjA3LTIwOS43MzQtMjMyLjU1NC0zNC41NjdjLTIzLjg4Ny0zLjU0OC00My43NDctMTkuODc1LTUxLjQyNy00Mi4xNzctNy43LTIyLjM0NS0xLjg4LTQ2Ljk2MiAxNC45OTItNjMuNzhsMTcwLjQwNS0xNzAuMDgyLTM5LjUyNS0yMzUuOTA5Yy00LjAxLTIzLjc0IDYuMzA1LTQ3LjU5IDI2LjQ5LTYxLjUgMTEuMDk3LTcuNiAyNC4xMy0xMS40NyAzNy4xNzItMTEuNDcgMTAuNzEgMCAyMS40NTcgMi42MiAzMS4yMyA3LjgybDIwMi43MDkgMTA5LjEgMjAyLjc0Ny0xMDkuMWM5Ljc3LTUuMiAyMC41MS03LjgyIDMxLjItNy44MiAxMy4wNjUgMCAyNi4wNyAzLjg3IDM3LjIgMTEuNDcgMjAuMTc1IDEzLjkxIDMwLjQ2IDM3Ljc2IDI2LjQ4IDYxLjVsLTM5LjU0NSAyMzUuOTA5IDE3MC40MzUgMTcwLjA4MkM5NTYuNzg4IDQ0OS4yMDkgOTYyLjU3MyA0NzMuODI2IDk1NC45MDggNDk2LjE3NEw5NTQuOTA4IDQ5Ni4xNzR6IiAgaG9yaXotYWR2LXg9IjEwMjQiIC8+DQoNCiAgICANCg0KDQogIDwvZm9udD4NCjwvZGVmcz48L3N2Zz4NCg==#iconfont) format("svg")}.iconfont{font-family:iconfont!important;font-size:16px;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-reply:before{content:"\E62C"}.icon-up:before{content:"\E630"}.icon-up-active:before{content:"\E631"}.icon-collect:before{content:"\E66B"}.icon-comment:before{content:"\E66C"}.icon-collect-active:before{content:"\E683"}*{margin:0;padding:0;outline:none;border:0 none;box-sizing:border-box;-webkit-tap-highlight-color:transparent;-webkit-overflow-scrolling:touch}html{font-size:16px;-webkit-text-size-adjust:100%}body,html{width:100%;height:100%}body{background:#f7f7f7}ol,ul{list-style:none}a{color:#333;text-decoration:none}img{border:0;vertical-align:middle}input,textarea{-webkit-appearance:none}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#999}textarea{resize:none}.markdown-text{font-size:14px}.markdown-text h1,.markdown-text h2,.markdown-text h3,.markdown-text h4,.markdown-text h5,.markdown-text h6{margin:30px 0 15px}.markdown-text p{line-height:1.7em;overflow:auto;white-space:pre-wrap;word-wrap:break-word;margin:15px 0}.markdown-text a{color:#08c;text-decoration:none}.markdown-text ol,.markdown-text ul{padding:0;margin:0 0 10px 25px}.markdown-text li{line-height:2em}.markdown-text blockquote{padding:0 0 0 15px;margin:0 0 20px;border-left:5px solid #eee}.markdown-text img{height:auto;max-width:100%}.markdown-text>:first-child{margin-top:0}.markdown-text>:last-child{margin-bottom:15px}.slide-enter-active,.slide-leave-active{transition:.3s ease}.slide-enter,.slide-leave-to{transform:translateX(-125px);opacity:0}.fade-enter-active,.fade-leave-active{transition:.3s ease}.fade-enter,.fade-leave-to{transform:translateX(15px);opacity:0}.pop-enter-active,.pop-leave-active{transition:.3s ease}.pop-enter,.pop-leave-to{transform:translateY(125px);opacity:0}#app{font-family:Avenir,Helvetica,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-align:center;color:#333;position:relative}#app,.new-topic[data-v-3f542882]{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;width:100%;height:100%}.new-topic[data-v-3f542882]{position:absolute;top:0;right:0;bottom:0;left:0;background:#fff;-ms-flex-pack:justify;justify-content:space-between;z-index:1;font-size:14px}.new-topic .form-block[data-v-3f542882]{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex:1;flex:1;padding:30px}.new-topic .form-block .form-part[data-v-3f542882]{text-align:left}.new-topic .form-block .form-part.type[data-v-3f542882]{margin-bottom:15px}.new-topic .form-block .form-part.type span[data-v-3f542882]{display:block;line-height:30px;height:30px;padding:0 10px;border-bottom:1px solid #e4e7ed}.new-topic .form-block .form-part.title[data-v-3f542882]{margin-bottom:15px}.new-topic .form-block .form-part.content[data-v-3f542882]{-ms-flex:1;flex:1}.new-topic .form-block .form-part input[type=text][data-v-3f542882]{width:100%;height:30px;border-bottom:1px solid #e4e7ed;padding:0 10px;border-radius:0}.new-topic .form-block .form-part textarea[data-v-3f542882]{width:100%;height:100%;border:1px solid #e4e7ed;padding:10px;border-radius:5px}.new-topic .btn-part[data-v-3f542882]{padding:30px}.new-topic .type-picker-wrapper[data-v-3f542882]{position:absolute;width:100%;height:100%;top:0;right:0;bottom:0;left:0;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.new-topic .type-picker-wrapper .mask[data-v-3f542882]{-ms-flex:1;flex:1}.new-topic .type-picker-wrapper .type-picker[data-v-3f542882]{background:#fff;padding:10px 30px;box-shadow:0 0 15px gray}.new-topic .type-picker-wrapper .type-picker .btn-bar[data-v-3f542882]{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}.new-topic .type-picker-wrapper .type-picker .btn-bar span[data-v-3f542882]{font-size:14px}.user-login[data-v-3f39eaf0]{position:absolute;width:100%;height:100%;top:0;right:0;bottom:0;left:0;background:#fff;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;z-index:1}.user-login .form[data-v-3f39eaf0]{width:80%}.user-login .form>input[data-v-3f39eaf0]{width:100%;height:41px;border-radius:4px;padding:0 10px;margin-bottom:105px;background-color:#f7f7f7;border:1px solid #e4e7ed;transition:border-color 1s ease}.user-login .form>input[data-v-3f39eaf0]:focus{border-color:#26a2ff}.user-login .form>button[data-v-3f39eaf0]{margin-bottom:15px}.user-login .form .copyright[data-v-3f39eaf0]{margin-top:125px}.user-login .form .copyright a[data-v-3f39eaf0]{font-size:14px;color:#999}.user-collection[data-v-e6098b7c]{position:absolute;width:100%;height:100%;top:0;right:0;bottom:0;left:0;background:#f7f7f7;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;z-index:1}.user-collection .content[data-v-e6098b7c]{-ms-flex:1;flex:1}.user-collection .content .cell-wrapper[data-v-e6098b7c]{margin:10px 0}.user-collection .content .cell-wrapper .cell[data-v-e6098b7c]{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding:10px;background:#fff;margin-bottom:10px}.user-collection .content .cell-wrapper .cell[data-v-e6098b7c]:last-child{margin-bottom:0}.user-collection .content .cell-wrapper .cell .title[data-v-e6098b7c]{display:-ms-flexbox;display:flex;font-size:14px;margin-bottom:10px}.user-collection .content .cell-wrapper .cell .title .tag[data-v-e6098b7c]{margin-right:10px;background-color:rgba(64,158,255,.1);border:1px solid rgba(64,158,255,.2);color:#409eff;height:20px;padding:0 5px;line-height:18px;font-size:12px;border-radius:4px;white-space:nowrap}.user-collection .content .cell-wrapper .cell .title .link[data-v-e6098b7c]{-ms-flex:1;flex:1;color:#333;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.user-collection .content .cell-wrapper .cell .info[data-v-e6098b7c]{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;-ms-flex-align:center;align-items:center;color:#999;font-size:12px}.msg-center[data-v-336547fe]{position:absolute;width:100%;height:100%;top:0;right:0;bottom:0;left:0;background:#f7f7f7;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;z-index:1}.msg-center .header[data-v-336547fe],.msg-center .tab[data-v-336547fe]{-ms-flex-negative:0;flex-shrink:0}.msg-center .tab a.is-selected[data-v-336547fe]{margin-bottom:0}.msg-center .content[data-v-336547fe]{display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;overflow:auto;-ms-flex-direction:column;flex-direction:column;font-size:14px}.msg-center .content .cell-wrapper[data-v-336547fe]{margin:10px 0}.msg-center .content .cell-wrapper .cell[data-v-336547fe]{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;text-align:left;padding:10px;background:#fff;margin-bottom:10px}.msg-center .content .cell-wrapper .cell[data-v-336547fe]:last-child{margin-bottom:0}.msg-center .content .cell-wrapper .cell .info[data-v-336547fe]{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;color:#999;font-size:12px;margin-bottom:15px}.msg-center .content .cell-wrapper .cell .info .user[data-v-336547fe]{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;color:#333}.msg-center .content .cell-wrapper .cell .info .user .avatar[data-v-336547fe]{width:20px;height:20px;border-radius:10px;overflow:hidden}.msg-center .content .cell-wrapper .cell .info .user .avatar img[data-v-336547fe]{width:100%;height:100%}.msg-center .content .cell-wrapper .cell .info .user .name[data-v-336547fe]{margin-left:10px}.msg-center .content .cell-wrapper .cell .topic[data-v-336547fe]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px}.msg-center .content .no-data[data-v-336547fe]{display:block;color:#999;padding:10px 0}.side-bar[data-v-067bd7eb]{position:absolute;width:100%;height:100%;top:0;right:0;bottom:0;left:0;display:-ms-flexbox;display:flex}.side-bar .menu[data-v-067bd7eb]{width:250px;background:#fff;box-shadow:0 0 15px gray;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:justify;justify-content:space-between;padding-bottom:20%}.side-bar .menu .main-block[data-v-067bd7eb]{text-align:left}.side-bar .menu .main-block>div[data-v-067bd7eb]{margin-bottom:15px}.side-bar .menu .main-block>div .user img[data-v-067bd7eb]{margin-right:5px;border-radius:12px}.side-bar .menu .exit-block[data-v-067bd7eb]{color:#f56c6c}.side-bar .mask[data-v-067bd7eb]{-ms-flex:1;flex:1}.main-content[data-v-51487388]{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex:1;flex:1}.topic-tab[data-v-090d24d0]{background:#26a2ff;height:35px}.topic-tab ul[data-v-090d24d0]{height:100%;display:-ms-flexbox;display:flex}.topic-tab ul li[data-v-090d24d0]{-ms-flex:1;flex:1;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;position:relative}.topic-tab ul li[data-v-090d24d0]:after{content:"";width:100%;height:3px;position:absolute;left:0;bottom:0;background:#f56c6c;transform:scaleX(0)}.topic-tab ul li.active[data-v-090d24d0]{font-weight:600}.topic-tab ul li.active[data-v-090d24d0]:after{transform:scaleX(1);transition:.3s ease-in-out}.topic-tab ul li a[data-v-090d24d0]{color:#fff}.topic-list[data-v-78e986d6]{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-align:center;align-items:center;-ms-flex:1;flex:1;overflow-x:hidden;overflow-y:auto;background:#fff}.topic-list ul[data-v-78e986d6]{width:95%}.topic-list ul li[data-v-78e986d6]{display:-ms-flexbox;display:flex;padding:10px 0;border-bottom:1px solid #e4e7ed}.topic-list ul li .avatar[data-v-78e986d6]{width:45px;height:45px;border-radius:22.5px;overflow:hidden}.topic-list ul li .avatar img[data-v-78e986d6]{width:100%;height:100%}.topic-list ul li .detail[data-v-78e986d6]{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:justify;justify-content:space-between;-ms-flex:1;flex:1;padding-left:3%;overflow:hidden;height:45px}.topic-list ul li .detail .title-block[data-v-78e986d6]{display:-ms-flexbox;display:flex;font-size:14px}.topic-list ul li .detail .title-block .tag[data-v-78e986d6]{margin-right:10px;background-color:rgba(64,158,255,.1);border:1px solid rgba(64,158,255,.2);color:#409eff;height:20px;padding:0 5px;line-height:18px;font-size:12px;border-radius:4px;white-space:nowrap}.topic-list ul li .detail .title-block .tag.top[data-v-78e986d6]{background-color:hsla(0,87%,69%,.1);border-color:hsla(0,87%,69%,.2);color:#f56c6c}.topic-list ul li .detail .title-block .tag.good[data-v-78e986d6]{background-color:rgba(103,194,58,.1);border-color:rgba(103,194,58,.2);color:#67c23a}.topic-list ul li .detail .title-block .title[data-v-78e986d6]{-ms-flex:1;flex:1;color:#333;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.topic-list ul li .detail .info-block[data-v-78e986d6]{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;-ms-flex-align:center;align-items:center;color:#999;font-size:12px}.topic-list .spinner[data-v-78e986d6]{padding:10px 0}.topic-list .go-top[data-v-78e986d6]{position:fixed;right:0;bottom:20%;width:30px;font-size:12px;border-radius:5px 0 0 5px;background:rgba(38,162,255,.7);color:hsla(0,0%,100%,.8);padding:10px}.topic-content[data-v-73dfac83]{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-align:center;align-items:center;-ms-flex:1;flex:1;text-align:left;overflow-x:hidden;overflow-y:auto}.topic-content>div[data-v-73dfac83]{width:100%;-ms-flex-negative:0;flex-shrink:0;padding:0 10px;background:#fff}.topic-content .content-block[data-v-73dfac83]{margin-top:10px}.topic-content .content-block .title[data-v-73dfac83]{-ms-flex:1;flex:1;margin:15px 0;word-break:break-all}.topic-content .reply-block[data-v-73dfac83]{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;margin:10px 0}.topic-content .reply-block .count[data-v-73dfac83]{margin:15px 0;font-size:12px}.topic-content .reply-block .reply-cell[data-v-73dfac83]{border-bottom:1px solid #e4e7ed;margin-bottom:15px}.topic-content .reply-block .reply-cell[data-v-73dfac83]:last-child{border-bottom:0 none}.topic-content .info-wrapper[data-v-73dfac83]{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;font-size:12px;line-height:20px;margin-bottom:15px}.topic-content .info-wrapper.content[data-v-73dfac83]{margin:15px 0}.topic-content .info-wrapper .info[data-v-73dfac83]{color:#999}.topic-content .info-wrapper .info .user[data-v-73dfac83],.topic-content .info-wrapper .info[data-v-73dfac83]{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.topic-content .info-wrapper .info .user .avatar[data-v-73dfac83]{width:20px;height:20px;border-radius:10px;overflow:hidden}.topic-content .info-wrapper .info .user .avatar img[data-v-73dfac83]{width:100%;height:100%}.topic-content .info-wrapper .info span[data-v-73dfac83]{margin-left:10px}.topic-content .info-wrapper .operation[data-v-73dfac83]{display:-ms-flexbox;display:flex;line-height:20px}.topic-content .info-wrapper .operation [data-v-73dfac83]{margin-left:5px}.topic-content .info-wrapper .operation .iconfont[data-v-73dfac83]{width:20px;height:20px;font-size:20px}.topic-content .input-block[data-v-73dfac83]{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding:10px}.topic-content .input-block.comment[data-v-73dfac83]{margin-bottom:10px}.topic-content .input-block textarea[data-v-73dfac83]{height:75px;width:100%;padding:10px;margin-bottom:10px;border:1px solid #e4e7ed;border-radius:5px}.topic-content .input-block input[data-v-73dfac83]{height:30px;width:100%;padding:0 5px;margin-bottom:10px;border:1px solid #e4e7ed;border-radius:5px}.topic-content .input-block .operation[data-v-73dfac83]{text-align:right}.topic-content .input-block .operation button[data-v-73dfac83]{padding:0 10px;margin-left:10px;height:25px}.topic-content .go-top[data-v-73dfac83]{position:fixed;right:0;bottom:20%;width:30px;font-size:12px;border-radius:5px 0 0 5px;background:rgba(38,162,255,.7);color:hsla(0,0%,100%,.8);padding:10px}.user-info[data-v-5ab422e8]{-ms-flex:1;flex:1;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;text-align:left;font-size:14px;-ms-flex-align:center;align-items:center;overflow-x:hidden;overflow-y:auto}.user-info .cell[data-v-5ab422e8]{width:100%;display:-ms-flexbox;display:flex;padding:10px;background:#fff;margin:10px 0;-ms-flex-negative:0;flex-shrink:0;font-size:12px}.user-info .cell[data-v-5ab422e8]:first-child{margin-bottom:0}.user-info .cell[data-v-5ab422e8]:last-child{margin-top:0}.user-info .cell.user .avatar[data-v-5ab422e8]{width:100px;height:100px;border-radius:50px;overflow:hidden}.user-info .cell.user .avatar img[data-v-5ab422e8]{width:100%;height:100%}.user-info .cell.user .info[data-v-5ab422e8]{-ms-flex:1;flex:1;padding-left:25px;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:distribute;justify-content:space-around;font-size:14px}.user-info .cell.reply[data-v-5ab422e8],.user-info .cell.topic[data-v-5ab422e8]{-ms-flex-direction:column;flex-direction:column}.user-info .cell.reply .title[data-v-5ab422e8],.user-info .cell.topic .title[data-v-5ab422e8]{font-weight:600;padding-bottom:10px;border-bottom:1px solid #e4e7ed}.user-info .cell.reply ul li[data-v-5ab422e8],.user-info .cell.topic ul li[data-v-5ab422e8]{margin-top:10px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mint-header{-ms-flex-align:center;align-items:center;background-color:#26a2ff;box-sizing:border-box;color:#fff;display:-ms-flexbox;display:flex;font-size:14px;height:40px;line-height:1;padding:0 10px;position:relative;text-align:center;white-space:nowrap}.mint-header .mint-button{background-color:transparent;border:0;box-shadow:none;color:inherit;display:inline-block;padding:0;font-size:inherit}.mint-header .mint-button:after{content:none}.mint-header.is-fixed{top:0;right:0;left:0;position:fixed;z-index:1}.mint-header-button{-ms-flex:.5;flex:.5}.mint-header-button>a{color:inherit}.mint-header-button.is-right{text-align:right}.mint-header-button.is-left{text-align:left}.mint-header-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:inherit;font-weight:400;-ms-flex:1;flex:1}.mint-button{-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:4px;border:0;box-sizing:border-box;color:inherit;display:block;font-size:18px;height:41px;outline:0;overflow:hidden;position:relative;text-align:center}.mint-button:after{background-color:#000;content:" ";opacity:0;top:0;right:0;bottom:0;left:0;position:absolute}.mint-button:not(.is-disabled):active:after{opacity:.4}.mint-button.is-disabled{opacity:.6}.mint-button-icon{vertical-align:middle;display:inline-block}.mint-button--default{color:#656b79;background-color:#f6f8fa;box-shadow:0 0 1px #b8bbbf}.mint-button--default.is-plain{border:1px solid #5a5a5a;background-color:transparent;box-shadow:none;color:#5a5a5a}.mint-button--primary{color:#fff;background-color:#26a2ff}.mint-button--primary.is-plain{border:1px solid #26a2ff;background-color:transparent;color:#26a2ff}.mint-button--danger{color:#fff;background-color:#ef4f4f}.mint-button--danger.is-plain{border:1px solid #ef4f4f;background-color:transparent;color:#ef4f4f}.mint-button--large{display:block;width:100%}.mint-button--normal,.mint-button--small{display:inline-block;padding:0 12px}.mint-button--small{font-size:14px;height:33px}.mint-cell{background-color:#fff;box-sizing:border-box;color:inherit;min-height:48px;display:block;overflow:hidden;position:relative;text-decoration:none}.mint-cell img{vertical-align:middle}.mint-cell:first-child .mint-cell-wrapper{background-origin:border-box}.mint-cell:last-child{background-image:linear-gradient(0deg,#d9d9d9,#d9d9d9 50%,transparent 0);background-size:100% 1px;background-repeat:no-repeat;background-position:bottom}.mint-cell-wrapper{background-image:linear-gradient(180deg,#d9d9d9,#d9d9d9 50%,transparent 0);background-size:120% 1px;background-repeat:no-repeat;background-position:0 0;background-origin:content-box;-ms-flex-align:center;align-items:center;box-sizing:border-box;display:-ms-flexbox;display:flex;font-size:16px;line-height:1;min-height:inherit;overflow:hidden;padding:0 10px;width:100%}.mint-cell-mask:after{background-color:#000;content:" ";opacity:0;top:0;right:0;bottom:0;left:0;position:absolute}.mint-cell-mask:active:after{opacity:.1}.mint-cell-text{vertical-align:middle}.mint-cell-label{color:#888;display:block;font-size:12px;margin-top:6px}.mint-cell-title{-ms-flex:1;flex:1}.mint-cell-value{color:#888;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.mint-cell-value.is-link{margin-right:24px}.mint-cell-left{position:absolute;height:100%;left:0;transform:translate3d(-100%,0,0)}.mint-cell-right{position:absolute;height:100%;right:0;top:0;transform:translate3d(100%,0,0)}.mint-cell-allow-right:after{border:2px solid #c8c8cd;border-bottom-width:0;border-left-width:0;content:" ";top:50%;right:20px;position:absolute;width:5px;height:5px;transform:translateY(-50%) rotate(45deg)}.mint-cell-swipe .mint-cell-wrapper{position:relative}.mint-cell-swipe .mint-cell-left,.mint-cell-swipe .mint-cell-right,.mint-cell-swipe .mint-cell-wrapper{transition:transform .15s ease-in-out}.mint-cell-swipe-buttongroup{height:100%}.mint-cell-swipe-button{height:100%;display:inline-block;padding:0 10px;line-height:48px}.mint-field{display:-ms-flexbox;display:flex}.mint-field .mint-cell-title{width:105px;-ms-flex:none;flex:none}.mint-field .mint-cell-value{-ms-flex:1;flex:1;color:inherit;display:-ms-flexbox;display:flex}.mint-field.is-nolabel .mint-cell-title{display:none}.mint-field.is-textarea{-ms-flex-align:inherit;align-items:inherit}.mint-field.is-textarea .mint-cell-title{padding:10px 0}.mint-field.is-textarea .mint-cell-value{padding:5px 0}.mint-field-core{-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:0;border:0;-ms-flex:1;flex:1;outline:0;line-height:1.6;font-size:inherit;width:100%}.mint-field-clear{opacity:.2}.mint-field-state{color:inherit;margin-left:20px}.mint-field-state .mintui{font-size:20px}.mint-field-state.is-default{margin-left:0}.mint-field-state.is-success{color:#4caf50}.mint-field-state.is-warning{color:#ffc107}.mint-field-state.is-error{color:#f44336}.mint-field-other{top:0;right:0;position:relative}.mint-badge{color:#fff;text-align:center;display:inline-block}.mint-badge.is-size-large{border-radius:14px;font-size:18px;padding:2px 10px}.mint-badge.is-size-small{border-radius:8px;font-size:12px;padding:2px 6px}.mint-badge.is-size-normal{border-radius:12px;font-size:15px;padding:2px 8px}.mint-badge.is-warning{background-color:#ffc107}.mint-badge.is-error{background-color:#f44336}.mint-badge.is-primary{background-color:#26a2ff}.mint-badge.is-success{background-color:#4caf50}.mint-switch{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;position:relative}.mint-switch *{pointer-events:none}.mint-switch-label{margin-left:10px;display:inline-block}.mint-switch-label:empty{margin-left:0}.mint-switch-core{display:inline-block;position:relative;width:52px;height:32px;border:1px solid #d9d9d9;border-radius:16px;box-sizing:border-box;background:#d9d9d9}.mint-switch-core:after,.mint-switch-core:before{content:" ";top:0;left:0;position:absolute;transition:transform .3s;border-radius:15px}.mint-switch-core:after{width:30px;height:30px;background-color:#fff;box-shadow:0 1px 3px rgba(0,0,0,.4)}.mint-switch-core:before{width:50px;height:30px;background-color:#fdfdfd}.mint-switch-input{display:none}.mint-switch-input:checked+.mint-switch-core{border-color:#26a2ff;background-color:#26a2ff}.mint-switch-input:checked+.mint-switch-core:before{transform:scale(0)}.mint-switch-input:checked+.mint-switch-core:after{transform:translateX(20px)}.mint-spinner-snake{animation:mint-spinner-rotate .8s infinite linear;border:4px solid transparent;border-radius:50%}@keyframes mint-spinner-rotate{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.mint-spinner-double-bounce{position:relative}.mint-spinner-double-bounce-bounce1,.mint-spinner-double-bounce-bounce2{width:100%;height:100%;border-radius:50%;opacity:.6;position:absolute;top:0;left:0;animation:mint-spinner-double-bounce 2s infinite ease-in-out}.mint-spinner-double-bounce-bounce2{animation-delay:-1s}@keyframes mint-spinner-double-bounce{0%,to{transform:scale(0)}50%{transform:scale(1)}}.mint-spinner-triple-bounce-bounce1,.mint-spinner-triple-bounce-bounce2,.mint-spinner-triple-bounce-bounce3{border-radius:100%;display:inline-block;animation:mint-spinner-triple-bounce 1.4s infinite ease-in-out both}.mint-spinner-triple-bounce-bounce1{animation-delay:-.32s}.mint-spinner-triple-bounce-bounce2{animation-delay:-.16s}@keyframes mint-spinner-triple-bounce{0%,80%,to{transform:scale(0)}40%{transform:scale(1)}}.mint-spinner-fading-circle{position:relative}.mint-spinner-fading-circle-circle{width:100%;height:100%;top:0;left:0;position:absolute}.mint-spinner-fading-circle-circle:before{content:" ";display:block;margin:0 auto;width:15%;height:15%;border-radius:100%;animation:mint-fading-circle 1.2s infinite ease-in-out both}.mint-spinner-fading-circle-circle.is-circle2{transform:rotate(30deg)}.mint-spinner-fading-circle-circle.is-circle2:before{animation-delay:-1.1s}.mint-spinner-fading-circle-circle.is-circle3{transform:rotate(60deg)}.mint-spinner-fading-circle-circle.is-circle3:before{animation-delay:-1s}.mint-spinner-fading-circle-circle.is-circle4{transform:rotate(90deg)}.mint-spinner-fading-circle-circle.is-circle4:before{animation-delay:-.9s}.mint-spinner-fading-circle-circle.is-circle5{transform:rotate(120deg)}.mint-spinner-fading-circle-circle.is-circle5:before{animation-delay:-.8s}.mint-spinner-fading-circle-circle.is-circle6{transform:rotate(150deg)}.mint-spinner-fading-circle-circle.is-circle6:before{animation-delay:-.7s}.mint-spinner-fading-circle-circle.is-circle7{transform:rotate(180deg)}.mint-spinner-fading-circle-circle.is-circle7:before{animation-delay:-.6s}.mint-spinner-fading-circle-circle.is-circle8{transform:rotate(210deg)}.mint-spinner-fading-circle-circle.is-circle8:before{animation-delay:-.5s}.mint-spinner-fading-circle-circle.is-circle9{transform:rotate(240deg)}.mint-spinner-fading-circle-circle.is-circle9:before{animation-delay:-.4s}.mint-spinner-fading-circle-circle.is-circle10{transform:rotate(270deg)}.mint-spinner-fading-circle-circle.is-circle10:before{animation-delay:-.3s}.mint-spinner-fading-circle-circle.is-circle11{transform:rotate(300deg)}.mint-spinner-fading-circle-circle.is-circle11:before{animation-delay:-.2s}.mint-spinner-fading-circle-circle.is-circle12{transform:rotate(330deg)}.mint-spinner-fading-circle-circle.is-circle12:before{animation-delay:-.1s}@keyframes mint-fading-circle{0%,39%,to{opacity:0}40%{opacity:1}}.mint-tab-item{display:block;padding:7px 0;-ms-flex:1;flex:1;text-decoration:none}.mint-tab-item-icon{width:24px;height:24px;margin:0 auto 5px}.mint-tab-item-icon:empty{display:none}.mint-tab-item-icon>*{display:block;width:100%;height:100%}.mint-tab-item-label{color:inherit;font-size:12px;line-height:1}.mint-tab-container-item{-ms-flex-negative:0;flex-shrink:0;width:100%}.mint-tab-container{overflow:hidden;position:relative}.mint-tab-container .swipe-transition{transition:transform .15s ease-in-out}.mint-navbar,.mint-tab-container-wrap{display:-ms-flexbox;display:flex}.mint-navbar{background-color:#fff;text-align:center}.mint-navbar .mint-tab-item{padding:17px 0;font-size:15px}.mint-navbar .mint-tab-item:last-child{border-right:0}.mint-navbar .mint-tab-item.is-selected{border-bottom:3px solid #26a2ff;color:#26a2ff;margin-bottom:-3px}.mint-navbar.is-fixed{top:0;right:0;left:0;position:fixed;z-index:1}.mint-tabbar{background-image:linear-gradient(180deg,#d9d9d9,#d9d9d9 50%,transparent 0);background-size:100% 1px;background-repeat:no-repeat;background-position:0 0;position:relative;background-color:#fafafa;display:-ms-flexbox;display:flex;right:0;bottom:0;left:0;position:absolute;text-align:center}.mint-tabbar>.mint-tab-item.is-selected{background-color:#eaeaea;color:#26a2ff}.mint-tabbar.is-fixed{right:0;bottom:0;left:0;position:fixed;z-index:1}.mint-search{height:100%;height:100vh;overflow:hidden}.mint-searchbar{position:relative;background-color:#d9d9d9;box-sizing:border-box;padding:8px 10px;z-index:1}.mint-searchbar,.mint-searchbar-inner{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.mint-searchbar-inner{background-color:#fff;border-radius:2px;-ms-flex:1;flex:1;height:28px;padding:4px 6px}.mint-searchbar-inner .mintui-search{font-size:12px;color:#d9d9d9}.mint-searchbar-core{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:0;box-sizing:border-box;width:100%;height:100%;outline:0}.mint-searchbar-cancel{color:#26a2ff;margin-left:10px;text-decoration:none}.mint-search-list{overflow:auto;padding-top:44px;top:0;right:0;bottom:0;left:0;position:absolute}.mint-checklist .mint-cell{padding:0}.mint-checklist.is-limit .mint-checkbox-core:not(:checked){background-color:#d9d9d9;border-color:#d9d9d9}.mint-checklist-label{display:block;padding:0 10px}.mint-checklist-title{color:#888;display:block;font-size:12px;margin:8px}.mint-checkbox.is-right{float:right}.mint-checkbox-label{vertical-align:middle;margin-left:6px}.mint-checkbox-input{display:none}.mint-checkbox-input:checked+.mint-checkbox-core{background-color:#26a2ff;border-color:#26a2ff}.mint-checkbox-input:checked+.mint-checkbox-core:after{border-color:#fff;transform:rotate(45deg) scale(1)}.mint-checkbox-input[disabled]+.mint-checkbox-core{background-color:#d9d9d9;border-color:#ccc}.mint-checkbox-core{display:inline-block;background-color:#fff;border-radius:100%;border:1px solid #ccc;position:relative;width:20px;height:20px;vertical-align:middle}.mint-checkbox-core:after{border:2px solid transparent;border-left:0;border-top:0;content:" ";top:3px;left:6px;position:absolute;width:4px;height:8px;transform:rotate(45deg) scale(0);transition:transform .2s}.mint-radiolist .mint-cell{padding:0}.mint-radiolist-label{display:block;padding:0 10px}.mint-radiolist-title{font-size:12px;margin:8px;display:block;color:#888}.mint-radio.is-right{float:right}.mint-radio-label{vertical-align:middle;margin-left:6px}.mint-radio-input{display:none}.mint-radio-input:checked+.mint-radio-core{background-color:#26a2ff;border-color:#26a2ff}.mint-radio-input:checked+.mint-radio-core:after{background-color:#fff;transform:scale(1)}.mint-radio-input[disabled]+.mint-radio-core{background-color:#d9d9d9;border-color:#ccc}.mint-radio-core{box-sizing:border-box;display:inline-block;background-color:#fff;border-radius:100%;border:1px solid #ccc;position:relative;width:20px;height:20px;vertical-align:middle}.mint-radio-core:after{content:" ";border-radius:100%;top:5px;left:5px;position:absolute;width:8px;height:8px;transition:transform .2s;transform:scale(0)}.mint-loadmore{overflow:hidden}.mint-loadmore-content.is-dropped{transition:.2s}.mint-loadmore-bottom,.mint-loadmore-top{text-align:center;height:50px;line-height:50px}.mint-loadmore-top{margin-top:-50px}.mint-loadmore-bottom{margin-bottom:-50px}.mint-loadmore-spinner{display:inline-block;margin-right:5px;vertical-align:middle}.mint-loadmore-text{vertical-align:middle}.mint-actionsheet{position:fixed;background:#e0e0e0;width:100%;text-align:center;bottom:0;left:50%;transform:translate3d(-50%,0,0);-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:transform .3s ease-out}.mint-actionsheet-list{list-style:none;padding:0;margin:0}.mint-actionsheet-listitem{border-bottom:1px solid #e0e0e0}.mint-actionsheet-button,.mint-actionsheet-listitem{display:block;width:100%;height:45px;line-height:45px;font-size:18px;color:#333;background-color:#fff}.mint-actionsheet-button:active,.mint-actionsheet-listitem:active{background-color:#f0f0f0}.actionsheet-float-enter,.actionsheet-float-leave-active{transform:translate3d(-50%,100%,0)}.mint-popup{position:fixed;background:#fff;top:50%;left:50%;transform:translate3d(-50%,-50%,0);-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:.2s ease-out}.mint-popup-top{top:0;right:auto;bottom:auto;left:50%;transform:translate3d(-50%,0,0)}.mint-popup-right{top:50%;right:0;bottom:auto;left:auto;transform:translate3d(0,-50%,0)}.mint-popup-bottom{top:auto;right:auto;bottom:0;left:50%;transform:translate3d(-50%,0,0)}.mint-popup-left{top:50%;right:auto;bottom:auto;left:0;transform:translate3d(0,-50%,0)}.popup-slide-top-enter,.popup-slide-top-leave-active{transform:translate3d(-50%,-100%,0)}.popup-slide-right-enter,.popup-slide-right-leave-active{transform:translate3d(100%,-50%,0)}.popup-slide-bottom-enter,.popup-slide-bottom-leave-active{transform:translate3d(-50%,100%,0)}.popup-slide-left-enter,.popup-slide-left-leave-active{transform:translate3d(-100%,-50%,0)}.popup-fade-enter,.popup-fade-leave-active{opacity:0}.mint-swipe,.mint-swipe-items-wrap{overflow:hidden;position:relative;height:100%}.mint-swipe-items-wrap>div{position:absolute;transform:translateX(-100%);width:100%;height:100%;display:none}.mint-swipe-items-wrap>div.is-active{display:block;transform:none}.mint-swipe-indicators{position:absolute;bottom:10px;left:50%;transform:translateX(-50%)}.mint-swipe-indicator{width:8px;height:8px;display:inline-block;border-radius:100%;background:#000;opacity:.2;margin:0 3px}.mint-swipe-indicator.is-active{background:#fff}.mt-range{position:relative;display:-ms-flexbox;display:flex;height:30px;line-height:30px}.mt-range>*{display:-ms-flexbox;display:flex;display:-webkit-box}.mt-range [slot=start]{margin-right:5px}.mt-range [slot=end]{margin-left:5px}.mt-range-content{position:relative;-ms-flex:1;flex:1;margin-right:30px}.mt-range-runway{position:absolute;top:50%;transform:translateY(-50%);left:0;right:-30px;border-top-color:#a9acb1;border-top-style:solid}.mt-range-thumb{background-color:#fff;position:absolute;left:0;top:0;width:30px;height:30px;border-radius:100%;cursor:move;box-shadow:0 1px 3px rgba(0,0,0,.4)}.mt-range-progress{position:absolute;display:block;background-color:#26a2ff;top:50%;transform:translateY(-50%);width:0}.mt-range--disabled{opacity:.5}.picker{overflow:hidden}.picker-toolbar{height:40px}.picker-items{display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding:0;text-align:right;font-size:24px;position:relative}.picker-center-highlight{box-sizing:border-box;position:absolute;left:0;width:100%;top:50%;margin-top:-18px;pointer-events:none}.picker-center-highlight:after,.picker-center-highlight:before{content:"";position:absolute;height:1px;width:100%;background-color:#eaeaea;display:block;z-index:15;transform:scaleY(.5)}.picker-center-highlight:before{left:0;top:0;bottom:auto;right:auto}.picker-center-highlight:after{left:0;bottom:0;right:auto;top:auto}.picker-slot{font-size:18px;overflow:hidden;position:relative;max-height:100%}.picker-slot.picker-slot-left{text-align:left}.picker-slot.picker-slot-center{text-align:center}.picker-slot.picker-slot-right{text-align:right}.picker-slot.picker-slot-divider{color:#000;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.picker-slot-wrapper{transition-duration:.3s;transition-timing-function:ease-out;-webkit-backface-visibility:hidden;backface-visibility:hidden}.picker-slot-wrapper.dragging,.picker-slot-wrapper.dragging .picker-item{transition-duration:0s}.picker-item{height:36px;line-height:36px;padding:0 10px;white-space:nowrap;position:relative;overflow:hidden;text-overflow:ellipsis;color:#707274;left:0;top:0;width:100%;box-sizing:border-box;transition-duration:.3s;-webkit-backface-visibility:hidden;backface-visibility:hidden}.picker-slot-absolute .picker-item{position:absolute}.picker-item.picker-item-far{pointer-events:none}.picker-item.picker-selected{color:#000;transform:translateZ(0) rotateX(0)}.picker-3d .picker-items{overflow:hidden;perspective:700px}.picker-3d .picker-item,.picker-3d .picker-slot,.picker-3d .picker-slot-wrapper{transform-style:preserve-3d}.picker-3d .picker-slot{overflow:visible}.picker-3d .picker-item{transform-origin:center center;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition-timing-function:ease-out}.mt-progress{position:relative;display:-ms-flexbox;display:flex;height:30px;line-height:30px}.mt-progress>*{display:-ms-flexbox;display:flex;display:-webkit-box}.mt-progress [slot=start]{margin-right:5px}.mt-progress [slot=end]{margin-left:5px}.mt-progress-content{position:relative;-ms-flex:1;flex:1}.mt-progress-runway{left:0;right:0;background-color:#ebebeb;height:3px}.mt-progress-progress,.mt-progress-runway{position:absolute;transform:translateY(-50%);top:50%}.mt-progress-progress{display:block;background-color:#26a2ff;width:0}.mint-toast{position:fixed;max-width:80%;border-radius:5px;background:rgba(0,0,0,.7);color:#fff;box-sizing:border-box;text-align:center;z-index:1000;transition:opacity .3s linear}.mint-toast.is-placebottom{bottom:50px;left:50%;transform:translate(-50%)}.mint-toast.is-placemiddle{left:50%;top:50%;transform:translate(-50%,-50%)}.mint-toast.is-placetop{top:50px;left:50%;transform:translate(-50%)}.mint-toast-icon{display:block;text-align:center;font-size:56px}.mint-toast-text{font-size:14px;display:block;text-align:center}.mint-toast-pop-enter,.mint-toast-pop-leave-active{opacity:0}.mint-indicator{transition:opacity .2s linear}.mint-indicator-wrapper{top:50%;left:50%;position:fixed;transform:translate(-50%,-50%);border-radius:5px;background:rgba(0,0,0,.7);color:#fff;box-sizing:border-box;text-align:center}.mint-indicator-text{display:block;color:#fff;text-align:center;margin-top:10px;font-size:16px}.mint-indicator-spin{display:inline-block;text-align:center}.mint-indicator-mask{top:0;left:0;position:fixed;width:100%;height:100%;opacity:0;background:transparent}.mint-indicator-enter,.mint-indicator-leave-active{opacity:0}.mint-msgbox{position:fixed;top:50%;left:50%;transform:translate3d(-50%,-50%,0);background-color:#fff;width:85%;border-radius:3px;font-size:16px;-webkit-user-select:none;overflow:hidden;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:.2s}.mint-msgbox-header{padding:15px 0 0}.mint-msgbox-content{padding:10px 20px 15px;border-bottom:1px solid #ddd;min-height:36px;position:relative}.mint-msgbox-input{padding-top:15px}.mint-msgbox-input input{border:1px solid #dedede;border-radius:5px;padding:4px 5px;width:100%;-webkit-appearance:none;-moz-appearance:none;appearance:none;outline:none}.mint-msgbox-input input.invalid,.mint-msgbox-input input.invalid:focus{border-color:#ff4949}.mint-msgbox-errormsg{color:red;font-size:12px;min-height:18px;margin-top:2px}.mint-msgbox-title{text-align:center;padding-left:0;margin-bottom:0;font-size:16px;font-weight:700;color:#333}.mint-msgbox-message{color:#999;margin:0;text-align:center;line-height:36px}.mint-msgbox-btns{display:-ms-flexbox;display:flex;height:40px;line-height:40px}.mint-msgbox-btn{line-height:35px;display:block;background-color:#fff;-ms-flex:1;flex:1;margin:0;border:0}.mint-msgbox-btn:focus{outline:none}.mint-msgbox-btn:active{background-color:#fff}.mint-msgbox-cancel{width:50%;border-right:1px solid #ddd}.mint-msgbox-cancel:active{color:#000}.mint-msgbox-confirm{color:#26a2ff;width:50%}.mint-msgbox-confirm:active{color:#26a2ff}.msgbox-bounce-enter{opacity:0;transform:translate3d(-50%,-50%,0) scale(.7)}.msgbox-bounce-leave-active{opacity:0;transform:translate3d(-50%,-50%,0) scale(.9)}.v-modal-enter{animation:v-modal-in .2s ease}.v-modal-leave{animation:v-modal-out .2s ease forwards}@keyframes v-modal-in{0%{opacity:0}}@keyframes v-modal-out{to{opacity:0}}.v-modal{position:fixed;left:0;top:0;height:100%;opacity:.5;background:#000}.mint-datetime,.v-modal{width:100%}.mint-datetime .picker-item,.mint-datetime .picker-slot-wrapper{-webkit-backface-visibility:hidden;backface-visibility:hidden}.mint-datetime .picker-toolbar{border-bottom:1px solid #eaeaea}.mint-datetime-action{display:inline-block;width:50%;text-align:center;line-height:40px;font-size:16px;color:#26a2ff}.mint-datetime-cancel{float:left}.mint-datetime-confirm{float:right}.mint-indexlist{width:100%;position:relative;overflow:hidden}.mint-indexlist-content{margin:0;padding:0;overflow:auto}.mint-indexlist-nav{position:absolute;top:0;bottom:0;right:0;background-color:#fff;border-left:1px solid #ddd;text-align:center;-ms-flex-pack:center;justify-content:center}.mint-indexlist-nav,.mint-indexlist-navlist{margin:0;max-height:100%;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.mint-indexlist-navlist{padding:0;list-style:none}.mint-indexlist-navitem{padding:2px 6px;font-size:12px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-touch-callout:none}.mint-indexlist-indicator{position:absolute;width:50px;height:50px;top:50%;left:50%;transform:translate(-50%,-50%);text-align:center;line-height:50px;background-color:rgba(0,0,0,.7);border-radius:5px;color:#fff;font-size:22px}.mint-indexsection{padding:0;margin:0}.mint-indexsection-index{margin:0;padding:10px;background-color:#fafafa}.mint-indexsection-index+ul{padding:0}.mint-palette-button{display:inline-block;position:relative;border-radius:50%;width:56px;height:56px;line-height:56px;text-align:center;transition:transform .1s ease-in-out}.mint-main-button{position:absolute;top:0;left:0;width:100%;height:100%;border-radius:50%;background-color:blue;font-size:2em}.mint-palette-button-active{animation:mint-zoom .5s ease-in-out}.mint-sub-button-container>*{position:absolute;top:15px;left:15px;width:25px;height:25px;transition:transform .3s ease-in-out}@keyframes mint-zoom{0%{transform:scale(1)}10%{transform:scale(1.1)}30%{transform:scale(.9)}50%{transform:scale(1.05)}70%{transform:scale(.95)}90%{transform:scale(1.01)}to{transform:scale(1)}}@font-face{font-family:mintui;src:url(data:application/x-font-ttf;base64,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)}.mintui{font-family:mintui!important;font-size:16px;font-style:normal;-webkit-font-smoothing:antialiased;-webkit-text-stroke-width:.2px;-moz-osx-font-smoothing:grayscale}.mintui-search:before{content:"\E604"}.mintui-more:before{content:"\E601"}.mintui-back:before{content:"\E600"}.mintui-field-error:before{content:"\E605"}.mintui-field-warning:before{content:"\E608"}.mintui-success:before{content:"\E602"}.mintui-field-success:before{content:"\E609"} -------------------------------------------------------------------------------- /dist/static/iconfont/iconfont.css: -------------------------------------------------------------------------------- 1 | 2 | @font-face {font-family: "iconfont"; 3 | src: url('iconfont.eot?t=1525676222543'); /* IE9*/ 4 | src: url('iconfont.eot?t=1525676222543#iefix') format('embedded-opentype'), /* IE6-IE8 */ 5 | url('data:application/x-font-woff;charset=utf-8;base64,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') format('woff'), 6 | url('iconfont.ttf?t=1525676222543') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/ 7 | url('iconfont.svg?t=1525676222543#iconfont') format('svg'); /* iOS 4.1- */ 8 | } 9 | 10 | .iconfont { 11 | font-family:"iconfont" !important; 12 | font-size:16px; 13 | font-style:normal; 14 | -webkit-font-smoothing: antialiased; 15 | -moz-osx-font-smoothing: grayscale; 16 | } 17 | 18 | .icon-reply:before { content: "\e62c"; } 19 | 20 | .icon-up:before { content: "\e630"; } 21 | 22 | .icon-up-active:before { content: "\e631"; } 23 | 24 | .icon-collect:before { content: "\e66b"; } 25 | 26 | .icon-comment:before { content: "\e66c"; } 27 | 28 | .icon-collect-active:before { content: "\e683"; } 29 | 30 | -------------------------------------------------------------------------------- /dist/static/iconfont/iconfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FishPlusOrange/cnode-by-vue/9fd04ba5a709960dbc20df26d9a6aba6813d1fce/dist/static/iconfont/iconfont.eot -------------------------------------------------------------------------------- /dist/static/iconfont/iconfont.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 8 | Created by iconfont 9 | 10 | 11 | 12 | 13 | 21 | 22 | 23 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | -------------------------------------------------------------------------------- /dist/static/iconfont/iconfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FishPlusOrange/cnode-by-vue/9fd04ba5a709960dbc20df26d9a6aba6813d1fce/dist/static/iconfont/iconfont.ttf -------------------------------------------------------------------------------- /dist/static/iconfont/iconfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FishPlusOrange/cnode-by-vue/9fd04ba5a709960dbc20df26d9a6aba6813d1fce/dist/static/iconfont/iconfont.woff -------------------------------------------------------------------------------- /dist/static/js/app.35373aa411fa43a0ddaf.js: -------------------------------------------------------------------------------- 1 | webpackJsonp([1],{"9FBx":function(t,e){},"9G4+":function(t,e){},G47h:function(t,e){},Ichr:function(t,e){},NHnr:function(t,e,s){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var o=s("7+uW"),n=s("Dd8w"),i=s.n(n),a=s("NYxO"),c={name:"MainHeader",computed:i()({},Object(a.c)(["isShowBack"])),methods:i()({},Object(a.b)(["toggleSideBar"]),{showSideBar:function(){this.toggleSideBar({isShowSideBar:!0})}})},r={render:function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("mt-header",{staticClass:"main-header",attrs:{title:"CNode"}},[s("mt-button",{directives:[{name:"show",rawName:"v-show",value:t.isShowBack,expression:"isShowBack"}],attrs:{slot:"left",icon:"back"},on:{click:function(e){t.$router.go(-1)}},slot:"left"},[t._v("返回")]),t._v(" "),s("mt-button",{attrs:{slot:"right",icon:"more"},on:{click:t.showSideBar},slot:"right"})],1)},staticRenderFns:[]};var l=s("VU/8")(c,r,!1,function(t){s("gCNl")},"data-v-5f5f96c5",null).exports,p={name:"NewTopic",data:function(){return{type:{label:"分享",value:"share"},storageType:{},title:"",content:"",types:[{values:[{label:"分享",value:"share"},{label:"问答",value:"ask"},{label:"招聘",value:"job"},{label:"测试",value:"dev"}]}],isShowTypePicker:!1}},computed:i()({},Object(a.c)(["accessToken","isShowNewTopic"])),methods:i()({},Object(a.b)(["toggleNewTopic","toggleSideBar"]),{changeType:function(t,e){this.storageType=e[0]},ensureType:function(){this.type=this.storageType,this.isShowTypePicker=!1},publishNewTopic:function(){var t=this;this.$indicator.open({spinnerType:"double-bounce"}),this.$axios.post("https://cnodejs.org/api/v1/topics",{accesstoken:this.accessToken,title:this.title,tab:this.type.value,content:this.content}).then(function(e){t.$indicator.close(),e.data&&e.data.success?(t.toggleNewTopic({isShowNewTopic:!1}),t.toggleSideBar({isShowSideBar:!1}),t.$router.push({name:"TopicContent",params:{id:e.data.topic_id}})):t.$toast("发布失败,请稍后重试")}).catch(function(e){t.$indicator.close(),e.response?t.$toast(e.response.data.error_msg):t.$toast("请求失败 "+e)})},toggleTypePicker:function(t){this.isShowTypePicker=t},hideNewTopic:function(){this.toggleNewTopic({isShowNewTopic:!1})}})},u={render:function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("transition",{attrs:{name:"pop"}},[s("div",{directives:[{name:"show",rawName:"v-show",value:t.isShowNewTopic,expression:"isShowNewTopic"}],staticClass:"new-topic"},[s("mt-header",{attrs:{title:"新建话题"}},[s("mt-button",{attrs:{slot:"left",icon:"back"},on:{click:t.hideNewTopic},slot:"left"})],1),t._v(" "),s("div",{staticClass:"form-block"},[s("div",{staticClass:"form-part type"},[s("span",{on:{click:function(e){t.toggleTypePicker(!0)}}},[t._v(t._s(t.type.label))])]),t._v(" "),s("div",{staticClass:"form-part title"},[s("input",{directives:[{name:"model",rawName:"v-model",value:t.title,expression:"title"}],attrs:{type:"text",placeholder:"请输入标题..."},domProps:{value:t.title},on:{input:function(e){e.target.composing||(t.title=e.target.value)}}})]),t._v(" "),s("div",{staticClass:"form-part content"},[s("textarea",{directives:[{name:"model",rawName:"v-model",value:t.content,expression:"content"}],attrs:{rows:"10",placeholder:"请输入内容..."},domProps:{value:t.content},on:{input:function(e){e.target.composing||(t.content=e.target.value)}}})])]),t._v(" "),s("div",{staticClass:"btn-part"},[s("mt-button",{attrs:{type:"primary",size:"large"},on:{click:t.publishNewTopic}},[t._v("发布")])],1),t._v(" "),s("transition",{attrs:{name:"pop"}},[t.isShowTypePicker?s("div",{staticClass:"type-picker-wrapper"},[s("div",{staticClass:"mask"}),t._v(" "),s("div",{staticClass:"type-picker"},[s("div",{staticClass:"btn-bar"},[s("span",{staticClass:"cancel",on:{click:function(e){t.toggleTypePicker(!1)}}},[t._v("取消")]),t._v(" "),s("span",{staticClass:"ensure",on:{click:t.ensureType}},[t._v("确定")])]),t._v(" "),s("mt-picker",{attrs:{slots:t.types,valueKey:"label",visibleItemCount:3,itemHeight:50},on:{change:t.changeType}})],1)]):t._e()])],1)])},staticRenderFns:[]};var h=s("VU/8")(p,u,!1,function(t){s("G47h")},"data-v-3f542882",null).exports,d=s("mvHQ"),g=s.n(d),m={name:"userLogin",data:function(){return{loginVal:""}},computed:i()({},Object(a.c)(["accessToken","userInfo","isShowUserLogin"])),created:function(){this.loginVal=this.accessToken},methods:i()({},Object(a.b)(["updateAccessToken","updateUserInfo","toggleUserLogin"]),{doLogin:function(){var t=this;this.loginVal?this.$axios.post("https://cnodejs.org/api/v1/accesstoken",{accesstoken:this.loginVal}).then(function(e){200===e.status&&(t.$toast("登录成功"),t.updateAccessToken({accessToken:t.loginVal}),t.updateUserInfo({userInfo:e.data}),t.toggleUserLogin({isShowUserLogin:!1}),localStorage.accessToken=t.accessToken,localStorage.userInfo=g()(t.userInfo))}).catch(function(e){e.response?t.$toast(e.response.data.error_msg):t.$toast("请求失败 "+e)}):this.$toast("accessToken 不能为空")},hideUserLogin:function(){this.toggleUserLogin({isShowUserLogin:!1})}})},v={render:function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("transition",{attrs:{name:"pop"}},[s("div",{directives:[{name:"show",rawName:"v-show",value:t.isShowUserLogin,expression:"isShowUserLogin"}],staticClass:"user-login"},[s("div",{staticClass:"form"},[s("input",{directives:[{name:"model",rawName:"v-model",value:t.loginVal,expression:"loginVal"}],attrs:{type:"password",placeholder:"请输入 accessToken"},domProps:{value:t.loginVal},on:{input:function(e){e.target.composing||(t.loginVal=e.target.value)}}}),t._v(" "),s("mt-button",{attrs:{type:"primary",size:"large"},on:{click:t.doLogin}},[t._v("登录")]),t._v(" "),s("mt-button",{attrs:{type:"primary",size:"large",plain:""},on:{click:t.hideUserLogin}},[t._v("取消")]),t._v(" "),s("div",{staticClass:"copyright"},[s("a",{attrs:{href:"https://github.com/FishPlusOrange",target:"_blank"}},[t._v("By FishPlusOrange")])])],1)])])},staticRenderFns:[]};var f=s("VU/8")(m,v,!1,function(t){s("WgEM")},"data-v-3f39eaf0",null).exports,_={name:"UserCollection",data:function(){return{collections:[]}},computed:i()({},Object(a.c)(["accessToken","userInfo","types","isShowUserCollection","isShowSideBar"])),created:function(){this.getUserCollection()},watch:{accessToken:function(t,e){this.getUserCollection()}},methods:i()({},Object(a.b)(["toggleUserCollection","toggleSideBar"]),{getUserCollection:function(){var t=this;this.accessToken?this.$axios.get("https://cnodejs.org/api/v1/topic_collect/"+this.userInfo.loginname).then(function(e){return t.collections=e.data.data}).catch(function(e){e.response?t.$toast(e.response.data.error_msg):t.$toast("请求失败 "+e)}):this.collections=[]},hideUserCollection:function(){this.toggleUserCollection({isShowUserCollection:!1})},hideAll:function(){this.toggleUserCollection({isShowUserCollection:!1}),this.toggleSideBar({isShowSideBar:!1})}})},C={render:function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("transition",{attrs:{name:"pop"}},[s("div",{directives:[{name:"show",rawName:"v-show",value:t.isShowUserCollection,expression:"isShowUserCollection"}],staticClass:"user-collection"},[s("mt-header",{staticClass:"header",attrs:{title:"我的收藏"}},[s("mt-button",{attrs:{slot:"left",icon:"back"},on:{click:t.hideUserCollection},slot:"left"})],1),t._v(" "),s("div",{staticClass:"content"},[s("ul",{staticClass:"cell-wrapper"},t._l(t.collections,function(e,o){return s("li",{staticClass:"cell"},[s("div",{staticClass:"title"},[s("span",{staticClass:"tag"},[t._v(t._s(t.types[e.tab]))]),t._v(" "),s("router-link",{staticClass:"link",attrs:{to:{name:"TopicContent",params:{id:e.id}}},nativeOn:{click:function(e){return t.hideAll(e)}}},[t._v(t._s(e.title))])],1),t._v(" "),s("div",{staticClass:"info"},[s("span",[t._v(t._s(t._f("dateFormat")(e.create_at)))]),t._v(" "),s("span",[t._v(t._s(e.reply_count+"/"+e.visit_count))])])])}))])],1)])},staticRenderFns:[]};var w=s("VU/8")(_,C,!1,function(t){s("9FBx")},"data-v-e6098b7c",null).exports,k={name:"MsgCenter",data:function(){return{active:"unread",msgs:{hasnot_read_messages:[],has_read_messages:[]}}},computed:i()({},Object(a.c)(["accessToken","msgNum","isShowMsgCenter"])),created:function(){this.getMsg()},watch:{accessToken:function(t,e){this.getMsg()}},methods:i()({},Object(a.b)(["setMsgNum","toggleMsgCenter","toggleSideBar"]),{getMsg:function(){var t=this;if(!this.accessToken)return this.msgs.hasnot_read_messages=[],void(this.msgs.has_read_messages=[]);this.$axios.get("https://cnodejs.org/api/v1/messages?accesstoken="+this.accessToken).then(function(e){return t.msgs=e.data.data}).catch(function(e){e.response?t.$toast(e.response.data.error_msg):t.$toast("请求失败 "+e)})},markSingleRead:function(t){var e=this;this.$axios.post("https://cnodejs.org/api/v1/message/mark_one/"+t,{accesstoken:this.accessToken}).then(function(t){t.data.success?(e.getMsg(),e.setMsgNum()):e.$toast("单条消息标记已读失败")}).catch(function(t){t.response?e.$toast(t.response.data.error_msg):e.$toast("请求失败 "+t)}),this.hideAll()},hideMegCenter:function(){this.toggleMsgCenter({isShowMsgCenter:!1})},hideAll:function(){this.toggleMsgCenter({isShowMsgCenter:!1}),this.toggleSideBar({isShowSideBar:!1})}})},j={render:function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("transition",{attrs:{name:"pop"}},[s("div",{directives:[{name:"show",rawName:"v-show",value:t.isShowMsgCenter,expression:"isShowMsgCenter"}],staticClass:"msg-center"},[s("mt-header",{staticClass:"header",attrs:{title:"消息中心"}},[s("mt-button",{attrs:{slot:"left",icon:"back"},on:{click:t.hideMegCenter},slot:"left"})],1),t._v(" "),s("mt-navbar",{staticClass:"tab",model:{value:t.active,callback:function(e){t.active=e},expression:"active"}},[s("mt-tab-item",{attrs:{id:"unread"}},[t._v("未读消息 "),s("mt-badge",{directives:[{name:"show",rawName:"v-show",value:t.msgs.hasnot_read_messages.length,expression:"msgs.hasnot_read_messages.length"}],attrs:{type:"error",size:"small"}},[t._v(t._s(t.msgs.hasnot_read_messages.length))])],1),t._v(" "),s("mt-tab-item",{attrs:{id:"read"}},[t._v("已读消息 "),s("mt-badge",{directives:[{name:"show",rawName:"v-show",value:t.msgs.has_read_messages.length,expression:"msgs.has_read_messages.length"}],attrs:{type:"success",size:"small"}},[t._v(t._s(t.msgs.has_read_messages.length))])],1)],1),t._v(" "),s("mt-tab-container",{staticClass:"content",model:{value:t.active,callback:function(e){t.active=e},expression:"active"}},[s("mt-tab-container-item",{attrs:{id:"unread"}},[t.msgs.hasnot_read_messages.length?s("ul",{staticClass:"cell-wrapper"},t._l(t.msgs.hasnot_read_messages,function(e,o){return s("li",{staticClass:"cell"},[s("div",{staticClass:"info"},[e.author.loginname?s("router-link",{staticClass:"user",attrs:{to:{name:"UserInfo",params:{loginname:e.author.loginname}}},nativeOn:{click:function(e){return t.hideAll(e)}}},[s("div",{staticClass:"avatar"},[s("img",{attrs:{src:e.author.avatar_url}})]),t._v(" "),s("span",{staticClass:"name"},[t._v(t._s(e.author.loginname+":"))])]):t._e(),t._v(" "),s("div",{staticClass:"date"},[t._v(t._s(t._f("dateFormat")(e.reply.create_at)))])],1),t._v(" "),s("div",{staticClass:"content",domProps:{innerHTML:t._s(e.reply.content)}}),t._v(" "),s("div",{staticClass:"topic"},[t._v("话题:"),s("router-link",{attrs:{to:{name:"TopicContent",params:{id:e.topic.id}}},nativeOn:{click:function(s){t.markSingleRead(e.id)}}},[t._v(t._s(e.topic.title))])],1)])})):t._e(),t._v(" "),s("span",{directives:[{name:"show",rawName:"v-show",value:!t.msgs.hasnot_read_messages.length,expression:"!msgs.hasnot_read_messages.length"}],staticClass:"no-data"},[t._v("暂无消息")])]),t._v(" "),s("mt-tab-container-item",{attrs:{id:"read"}},[s("ul",{directives:[{name:"show",rawName:"v-show",value:t.msgs.has_read_messages.length,expression:"msgs.has_read_messages.length"}],staticClass:"cell-wrapper"},t._l(t.msgs.has_read_messages,function(e,o){return s("li",{staticClass:"cell"},[s("div",{staticClass:"info"},[e.author.loginname?s("router-link",{staticClass:"user",attrs:{to:{name:"UserInfo",params:{loginname:e.author.loginname}}},nativeOn:{click:function(e){return t.hideAll(e)}}},[s("div",{staticClass:"avatar"},[s("img",{attrs:{src:e.author.avatar_url}})]),t._v(" "),s("span",{staticClass:"name"},[t._v(t._s(e.author.loginname+":"))])]):t._e(),t._v(" "),s("div",{staticClass:"date"},[t._v(t._s(t._f("dateFormat")(e.reply.create_at)))])],1),t._v(" "),s("div",{staticClass:"content",domProps:{innerHTML:t._s(e.reply.content)}}),t._v(" "),s("div",{staticClass:"topic"},[t._v("话题:"),s("router-link",{attrs:{to:{name:"TopicContent",params:{id:e.topic.id}}},nativeOn:{click:function(e){return t.hideAll(e)}}},[t._v(t._s(e.topic.title))])],1)])})),t._v(" "),t.msgs.has_read_messages.length?t._e():s("span",{staticClass:"no-data"},[t._v("暂无消息")])])],1)],1)])},staticRenderFns:[]};var T=s("VU/8")(k,j,!1,function(t){s("fYk1")},"data-v-336547fe",null).exports,b={name:"SideBar",computed:i()({},Object(a.c)(["accessToken","userInfo","msgNum","isShowSideBar"]),{realMsgNum:function(){return this.msgNum<=99?this.msgNum:"99+"}}),created:function(){this.getMsgNum()},watch:{accessToken:function(t,e){this.getMsgNum()}},methods:i()({},Object(a.b)(["setMsgNum","toggleSideBar","toggleUserLogin","toggleNewTopic","toggleUserCollection","toggleMsgCenter","updateAccessToken","updateUserInfo"]),{getMsgNum:function(){var t=this;this.accessToken?this.$axios.get("https://cnodejs.org/api/v1/message/count?accesstoken="+this.accessToken).then(function(e){return t.setMsgNum({msgNum:e.data.data})}).catch(function(e){e.response?t.$toast(e.response.data.error_msg):t.$toast("请求失败 "+e)}):this.setMsgNum({msgNum:0})},showUserLogin:function(){if(this.userInfo.success)return this.$router.push({name:"UserInfo",params:{loginname:this.userInfo.loginname}}),void this.toggleSideBar({isShowSideBar:!1});this.toggleUserLogin({isShowUserLogin:!0})},showNewTopic:function(){this.accessToken?this.toggleNewTopic({isShowNewTopic:!0}):this.toggleUserLogin({isShowUserLogin:!0})},showUserCollection:function(){this.accessToken?this.toggleUserCollection({isShowUserCollection:!0}):this.toggleUserLogin({isShowUserLogin:!0})},showMsgCenter:function(){this.accessToken?this.toggleMsgCenter({isShowMsgCenter:!0}):this.toggleUserLogin({isShowUserLogin:!0})},doLogout:function(){var t=this;this.$messagebox.confirm("确定退出登录吗?","").then(function(e){t.updateAccessToken({accessToken:""}),t.updateUserInfo({userInfo:""}),t.toggleSideBar({isShowSideBar:!1}),localStorage.removeItem("accessToken"),localStorage.removeItem("userInfo")},function(){})},hideSideBar:function(){this.toggleSideBar({isShowSideBar:!1})}})},S={render:function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("transition",{attrs:{name:"slide"}},[s("div",{directives:[{name:"show",rawName:"v-show",value:t.isShowSideBar,expression:"isShowSideBar"}],staticClass:"side-bar"},[s("div",{staticClass:"menu"},[s("div",{staticClass:"main-block"},[s("div",{on:{click:t.showUserLogin}},[s("mt-cell",{staticClass:"user",attrs:{title:t.userInfo.loginname||"登录","is-link":""}},[s("img",{directives:[{name:"show",rawName:"v-show",value:t.accessToken,expression:"accessToken"}],attrs:{slot:"icon",src:t.userInfo.avatar_url||"",width:"24",height:"24"},slot:"icon"})])],1),t._v(" "),s("div",{on:{click:t.showNewTopic}},[s("mt-cell",{attrs:{title:"新建话题","is-link":""}})],1),t._v(" "),s("div",{on:{click:t.showUserCollection}},[s("mt-cell",{attrs:{title:"我的收藏","is-link":""}})],1),t._v(" "),s("div",{on:{click:t.showMsgCenter}},[s("mt-cell",{attrs:{title:"消息中心","is-link":""}},[s("mt-badge",{directives:[{name:"show",rawName:"v-show",value:t.realMsgNum,expression:"realMsgNum"}],attrs:{size:"small",type:"error"}},[t._v(t._s(t.realMsgNum))])],1)],1)]),t._v(" "),t.accessToken?s("div",{staticClass:"exit-block",on:{click:t.doLogout}},[s("mt-cell",{attrs:{title:"退出登录"}})],1):t._e()]),t._v(" "),s("div",{staticClass:"mask",on:{click:t.hideSideBar}})])])},staticRenderFns:[]};var y={name:"App",components:{MainHeader:l,NewTopic:h,UserLogin:f,UserCollection:w,MsgCenter:T,SideBar:s("VU/8")(b,S,!1,function(t){s("Ykk+")},"data-v-067bd7eb",null).exports}},U={render:function(){var t=this.$createElement,e=this._self._c||t;return e("div",{attrs:{id:"app"}},[e("main-header"),this._v(" "),e("router-view"),this._v(" "),e("new-Topic"),this._v(" "),e("user-login"),this._v(" "),e("user-collection"),this._v(" "),e("msg-center"),this._v(" "),e("side-bar")],1)},staticRenderFns:[]};var N=s("VU/8")(y,U,!1,function(t){s("hJlB")},null,null).exports,$=s("/ocq"),x={name:"TopicTab",computed:i()({},Object(a.c)(["types","activeTab"])),methods:i()({},Object(a.b)(["setTab","setTopics"]),{switchTab:function(t){var e=this,s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;this.$indicator.open({spinnerType:"double-bounce"}),this.setTab({activeTab:t,page:1,topics:[]}),this.$axios.get("https://cnodejs.org/api/v1/topics?page="+s+"&tab="+this.activeTab).then(function(t){e.$indicator.close(),e.setTopics({topics:t.data.data})}).catch(function(t){e.$indicator.close(),t.response?e.$toast(t.response.data.error_msg):e.$toast("请求失败 "+t)})}})},I={render:function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"topic-tab"},[s("ul",t._l(t.types,function(e,o){return s("li",{class:{active:t.activeTab===o},on:{click:function(e){t.switchTab(o)}}},[s("router-link",{attrs:{to:"/"}},[t._v(t._s(e))])],1)}))])},staticRenderFns:[]};var B={name:"MainContent",components:{TopicTab:s("VU/8")(x,I,!1,function(t){s("UHfY")},"data-v-090d24d0",null).exports}},M={render:function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"main-content"},[e("topic-tab"),this._v(" "),e("router-view")],1)},staticRenderFns:[]};var L=s("VU/8")(B,M,!1,function(t){s("9G4+")},"data-v-51487388",null).exports,z={name:"TopicList",data:function(){return{isShowSpinner:!1,isShowGoTop:!1}},created:function(){this.getTopics()},computed:i()({},Object(a.c)(["types","activeTab","page","topics"])),methods:i()({},Object(a.b)(["toggleBack","setTopics","setPage"]),{getTopics:function(){var t=this;this.$indicator.open({spinnerType:"double-bounce"}),this.toggleBack({isShowBack:!1}),this.$axios.get("https://cnodejs.org/api/v1/topics?tab="+this.activeTab).then(function(e){t.setTopics({topics:e.data.data}),t.$indicator.close()}).catch(function(e){e.response?t.$toast(e.response.data.error_msg):t.$toast("请求失败 "+e),t.$indicator.close()})},getMoreTopics:function(){var t=this;this.isShowSpinner=!0,this.loading=!0,this.setPage(),this.$axios.get("https://cnodejs.org/api/v1/topics?page="+this.page+"&tab="+this.activeTab).then(function(e){t.loading=!1,t.isShowSpinner=!1,t.setTopics({topics:t.topics.concat(e.data.data)})}).catch(function(e){t.loading=!1,t.isShowSpinner=!1,e.response?t.$toast(e.response.data.error_msg):t.$toast("请求失败 "+e)})},showGoTop:function(t){t.target.scrollTop>=t.target.clientHeight?this.isShowGoTop=!0:this.isShowGoTop=!1},goTop:function(){var t=this;this.$refs.topicList.scrollTop<=0||requestAnimationFrame(function(){t.$refs.topicList.scrollTop-=300,t.goTop()})}})},O={render:function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{directives:[{name:"infinite-scroll",rawName:"v-infinite-scroll",value:t.getMoreTopics,expression:"getMoreTopics"}],ref:"topicList",staticClass:"topic-list",attrs:{"infinite-scroll-disabled":"loading","infinite-scroll-distance":"10","infinite-scroll-immediate-check":"false"},on:{scroll:function(e){t.showGoTop(e)}}},[s("ul",[s("transition-group",{attrs:{name:"fade"}},t._l(t.topics,function(e,o){return s("li",{key:o},[s("div",{staticClass:"avatar"},[s("img",{attrs:{src:e.author.avatar_url}})]),t._v(" "),s("div",{staticClass:"detail"},[s("div",{staticClass:"title-block"},[s("span",{staticClass:"tag",class:e.top?"top":e.good?"good":""},[t._v(t._s((e.top?"置顶":"")||(e.good?"精华":"")||t.types[e.tab]))]),t._v(" "),s("router-link",{staticClass:"title",attrs:{to:{name:"TopicContent",params:{id:e.id}}}},[t._v(t._s(e.title))])],1),t._v(" "),s("div",{staticClass:"info-block"},[s("span",{staticClass:"count"},[t._v(t._s(e.reply_count+"/"+e.visit_count))]),t._v(" "),s("span",{staticClass:"date"},[t._v(t._s(t._f("dateFormat")(e.last_reply_at)))])])])])}))],1),t._v(" "),s("div",{directives:[{name:"show",rawName:"v-show",value:t.isShowSpinner,expression:"isShowSpinner"}],staticClass:"spinner"},[s("mt-spinner",{attrs:{type:"triple-bounce",color:"#409eff",size:40}})],1),t._v(" "),t.isShowGoTop?s("div",{staticClass:"go-top",on:{click:function(e){t.goTop()}}},[t._v("返回顶部")]):t._e()])},staticRenderFns:[]};var F=s("VU/8")(z,O,!1,function(t){s("ZYN6")},"data-v-78e986d6",null).exports,R={name:"TopicContent",data:function(){return{id:this.$route.params.id,topicContent:{reply_count:0,visit_count:0},commentContent:"",replyContent:"",currentReplyIndex:null,isShowGoTop:!1}},created:function(){this.getTopicContent()},beforeRouteUpdate:function(t,e,s){s(),this.id=this.$route.params.id,this.getTopicContent()},computed:i()({},Object(a.c)(["accessToken","userInfo","types"])),methods:i()({},Object(a.b)(["toggleBack","toggleUserLogin"]),{getTopicContent:function(){var t=this;this.toggleBack({isShowBack:!0}),this.$indicator.open({spinnerType:"double-bounce"}),this.$axios.get("https://cnodejs.org/api/v1/topic/"+this.id).then(function(e){t.$indicator.close(),t.topicContent=e.data.data}).catch(function(e){t.$indicator.close(),e.response?t.$toast(e.response.data.error_msg):t.$toast("请求失败 "+e)})},toggleCollect:function(){var t=this;if(this.accessToken){var e=void 0,s=void 0;this.topicContent.is_collect?(e="de_collect",s="取消收藏失败,请稍后重试"):(e="collect",s="收藏失败,请稍后重试"),this.$axios.post("https://cnodejs.org/api/v1/topic_collect/"+e,{accesstoken:this.accessToken,topic_id:this.topicContent.id}).then(function(e){e.data.success?t.topicContent.is_collect=!t.topicContent.is_collect:t.$toast(s)}).catch(function(e){e.response?t.$toast(e.response.data.error_msg):t.$toast("请求失败 "+e)})}else this.toggleUserLogin({isShowUserLogin:!0})},toggleUp:function(t){var e=this;if(this.accessToken)if(t.author.loginname!==this.userInfo.loginname){var s=void 0;s=t.is_uped?"取消点赞失败,请稍后重试":"点赞失败,请稍后重试",this.$axios.post("https://cnodejs.org/api/v1/reply/"+t.id+"/ups",{accesstoken:this.accessToken}).then(function(o){o.data.success?("up"===o.data.action?t.ups.length++:"down"===o.data.action&&t.ups.length--,t.is_uped=!t.is_uped):e.$toast(s)}).catch(function(t){t.response?e.$toast(t.response.data.error_msg):e.$toast("请求失败 "+t)})}else this.$toast("不能帮自己点赞");else this.toggleUserLogin({isShowUserLogin:!0})},toggleReply:function(t){t>-1?(this.currentReplyIndex=t,this.$refs.reply[t].focus()):(this.replyContent="",this.currentReplyIndex=null)},focusComment:function(){this.$refs.comment.focus()},commentOrReply:function(t){var e=this;if(this.accessToken){var s=void 0,o=void 0;t?(s="@"+t.author.loginname+" "+this.replyContent,o=t.id):(s=this.commentContent,o=""),this.$axios.post("https://cnodejs.org/api/v1/topic/"+this.id+"/replies",{accesstoken:this.accessToken,content:s,reply_id:o}).then(function(t){t.data.success&&e.getTopicContent()}).then(function(){t?(e.replyContent="",e.currentReplyIndex=null):e.commentContent=""}).catch(function(t){t.response?e.$toast(t.response.data.error_msg):e.$toast("请求失败 "+t)})}else this.toggleUserLogin({isShowUserLogin:!0})},showGoTop:function(t){t.target.scrollTop>=t.target.clientHeight?this.isShowGoTop=!0:this.isShowGoTop=!1},goTop:function(){var t=this;if(!(this.$refs.topicContent.scrollTop<=0))var e=setInterval(function(){t.$refs.topicContent.scrollTop<=0&&clearInterval(e),t.$refs.topicContent.scrollTop-=300},3)}})},P={render:function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{ref:"topicContent",staticClass:"topic-content",on:{scroll:function(e){t.showGoTop(e)}}},[s("div",{staticClass:"content-block"},[s("h3",{staticClass:"title"},[t._v(t._s(t.topicContent.title))]),t._v(" "),s("div",{staticClass:"info-wrapper content"},[s("div",{staticClass:"info"},[t.topicContent.author&&t.topicContent.author.loginname?s("router-link",{staticClass:"user",attrs:{to:{name:"UserInfo",params:{loginname:t.topicContent.author&&t.topicContent.author.loginname}}}},[s("div",{staticClass:"avatar"},[s("img",{attrs:{src:t.topicContent.author&&t.topicContent.author.avatar_url}})]),t._v(" "),s("span",[t._v(t._s(t.topicContent.author&&t.topicContent.author.loginname))])]):t._e(),t._v(" "),s("span",[t._v(t._s(t._f("dateFormat")(t.topicContent.create_at)))]),t._v(" "),s("span",[t._v(t._s(t.types[t.topicContent.tab]))]),t._v(" "),s("span",[t._v(t._s(t.topicContent.reply_count+"/"+t.topicContent.visit_count))])],1),t._v(" "),s("div",{staticClass:"operation"},[s("i",{staticClass:"iconfont icon-comment",on:{click:t.focusComment}}),t._v(" "),s("i",{staticClass:"iconfont",class:{"icon-collect-active":t.topicContent.is_collect,"icon-collect":!t.topicContent.is_collect},on:{click:t.toggleCollect}})])]),t._v(" "),s("div",{domProps:{innerHTML:t._s(t.topicContent.content)}})]),t._v(" "),s("div",{staticClass:"reply-block"},[s("span",{staticClass:"count"},[t._v(t._s(t.topicContent.reply_count)+"条回复")]),t._v(" "),s("ul",t._l(t.topicContent.replies,function(e,o){return s("li",{staticClass:"reply-cell"},[s("div",{staticClass:"info-wrapper reply"},[s("div",{staticClass:"info"},[e.author.loginname?s("router-link",{staticClass:"user",attrs:{to:{name:"UserInfo",params:{loginname:e.author.loginname}}}},[s("div",{staticClass:"avatar"},[s("img",{attrs:{src:e.author.avatar_url}})]),t._v(" "),s("span",[t._v(t._s(e.author.loginname))])]):t._e(),t._v(" "),s("span",[t._v(t._s(t._f("dateFormat")(e.create_at)))]),t._v(" "),s("span",[t._v(t._s(o+1)+"楼")])],1),t._v(" "),s("div",{staticClass:"operation"},[s("i",{staticClass:"iconfont icon-reply",on:{click:function(e){t.toggleReply(o)}}}),t._v(" "),s("i",{staticClass:"iconfont",class:{"icon-up-active":e.is_uped,"icon-up":!e.is_uped},on:{click:function(s){t.toggleUp(e)}}}),t._v(" "),s("span",[t._v(t._s(e.ups.length))])])]),t._v(" "),s("div",{domProps:{innerHTML:t._s(e.content)}}),t._v(" "),s("div",{directives:[{name:"show",rawName:"v-show",value:t.currentReplyIndex===o,expression:"currentReplyIndex === index"}],staticClass:"input-block reply"},[s("input",{directives:[{name:"model",rawName:"v-model",value:t.replyContent,expression:"replyContent"}],ref:"reply",refInFor:!0,attrs:{type:"text",placeholder:"请输入回复..."},domProps:{value:t.replyContent},on:{input:function(e){e.target.composing||(t.replyContent=e.target.value)}}}),t._v(" "),s("div",{staticClass:"operation"},[s("mt-button",{attrs:{type:"primary",size:"small"},on:{click:function(s){t.commentOrReply(e)}}},[t._v("回复")]),t._v(" "),s("mt-button",{attrs:{size:"small"},on:{click:function(e){t.toggleReply(-1)}}},[t._v("取消")])],1)])])}))]),t._v(" "),s("div",{staticClass:"input-block comment"},[s("textarea",{directives:[{name:"model",rawName:"v-model",value:t.commentContent,expression:"commentContent"}],ref:"comment",attrs:{placeholder:"请输入评论..."},domProps:{value:t.commentContent},on:{input:function(e){e.target.composing||(t.commentContent=e.target.value)}}}),t._v(" "),s("div",{staticClass:"operation"},[s("mt-button",{attrs:{type:"primary",size:"small"},on:{click:function(e){t.commentOrReply("")}}},[t._v("评论")])],1)]),t._v(" "),t.isShowGoTop?s("div",{staticClass:"go-top",on:{click:function(e){t.goTop()}}},[t._v("返回顶部")]):t._e()])},staticRenderFns:[]};var V=s("VU/8")(R,P,!1,function(t){s("Vzpa")},"data-v-73dfac83",null).exports,E={name:"UserInfo",data:function(){return{loginname:this.$route.params.loginname,userInfo:{}}},created:function(){this.getUserInfo()},beforeRouteUpdate:function(t,e,s){s(),this.loginname=this.$route.params.loginname,this.getUserInfo()},methods:i()({},Object(a.b)(["toggleBack"]),{getUserInfo:function(){var t=this;this.toggleBack({isShowBack:!0}),this.$indicator.open({spinnerType:"double-bounce"}),this.$axios.get("https://cnodejs.org/api/v1/user/"+this.loginname).then(function(e){t.$indicator.close(),t.userInfo=e.data.data}).catch(function(e){t.$indicator.close(),e.response?t.$toast(e.response.data.error_msg):t.$toast("请求失败 "+e)})}})},H={render:function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"user-info"},[s("div",{staticClass:"cell user"},[s("div",{staticClass:"avatar"},[s("img",{attrs:{src:t.userInfo.avatar_url}})]),t._v(" "),s("div",{staticClass:"info"},[s("span",[t._v("用户名:"+t._s(t.userInfo.loginname))]),t._v(" "),s("span",[t._v("GitHub:"),s("a",{attrs:{href:"https://github.com/"+t.userInfo.githubUsername,target:"_blank"}},[t._v(t._s(t.userInfo.githubUsername))])]),t._v(" "),s("span",[t._v("积分:"+t._s(t.userInfo.score))]),t._v(" "),s("span",[t._v("注册于"+t._s(t.userInfo.create_at&&t.userInfo.create_at.substr(0,10)))])])]),t._v(" "),s("div",{staticClass:"cell topic"},[s("span",{staticClass:"title"},[t._v("最近创建的话题:")]),t._v(" "),s("ul",t._l(t.userInfo.recent_topics,function(e,o){return s("li",[s("router-link",{attrs:{to:{name:"TopicContent",params:{id:e.id}}}},[t._v(t._s(e.title))])],1)}))]),t._v(" "),s("div",{staticClass:"cell reply"},[s("span",{staticClass:"title"},[t._v("最近参与的话题:")]),t._v(" "),s("ul",t._l(t.userInfo.recent_replies,function(e,o){return s("li",[s("router-link",{attrs:{to:{name:"TopicContent",params:{id:e.id}}}},[t._v(t._s(e.title))])],1)}))])])},staticRenderFns:[]};var G=s("VU/8")(E,H,!1,function(t){s("Ichr")},"data-v-5ab422e8",null).exports;o.default.use($.a);var q=new $.a({routes:[{path:"/",component:L,children:[{path:"",name:"TopicList",component:F},{path:"topicContent/:id",name:"TopicContent",component:V}]},{path:"/userInfo/:loginname",name:"UserInfo",component:G}]});o.default.use(a.a);var A=new a.a.Store({state:{accessToken:localStorage.accessToken||"",userInfo:localStorage.accessToken&&JSON.parse(localStorage.userInfo)||{avatar_url:"",id:"",loginname:"",success:!1},types:{all:"全部",good:"精华",share:"分享",ask:"问答",job:"招聘",dev:"测试"},activeTab:"all",topics:[],page:1,msgNum:0,isShowNewTopic:!1,isShowUserLogin:!1,isShowUserCollection:!1,isShowMsgCenter:!1,isShowSideBar:!1,isShowBack:!1,isShowGoTop:!1},mutations:{updateAccessToken:function(t,e){t.accessToken=e.accessToken},updateUserInfo:function(t,e){t.userInfo=e.userInfo},setTopics:function(t,e){t.topics=e.topics},setTab:function(t,e){t.activeTab=e.activeTab,t.page=e.page,t.topics=e.topics},setPage:function(t,e){t.page++},setMsgNum:function(t,e){e?t.msgNum=e.msgNum:t.msgNum--},toggleNewTopic:function(t,e){t.isShowNewTopic=e.isShowNewTopic},toggleUserLogin:function(t,e){t.isShowUserLogin=e.isShowUserLogin},toggleUserCollection:function(t,e){t.isShowUserCollection=e.isShowUserCollection},toggleMsgCenter:function(t,e){t.isShowMsgCenter=e.isShowMsgCenter},toggleSideBar:function(t,e){t.isShowSideBar=e.isShowSideBar},toggleBack:function(t,e){t.isShowBack=e.isShowBack}}}),W=s("Au9i"),X=s.n(W),Y=(s("d8/S"),s("mtWM")),J=s.n(Y),D=s("PJh5"),K=s.n(D);o.default.use(X.a),o.default.prototype.$axios=J.a,o.default.prototype.$moment=K.a,o.default.filter("dateFormat",function(t){return t?K()(t).fromNow().replace(/\s/g,"").replace(/\ban?/,"1").replace("fewseconds","分钟").replace(/minutes?/,"分钟").replace(/hours?/,"小时").replace(/days?/,"天").replace(/months?/,"个月").replace(/years?/,"年").replace("ago","前"):""}),o.default.config.productionTip=!1,new o.default({el:"#app",router:q,store:A,components:{App:N},template:""})},UHfY:function(t,e){},Vzpa:function(t,e){},WgEM:function(t,e){},"Ykk+":function(t,e){},ZYN6:function(t,e){},"d8/S":function(t,e){},fYk1:function(t,e){},gCNl:function(t,e){},hJlB:function(t,e){},uslO:function(t,e,s){var o={"./af":"3CJN","./af.js":"3CJN","./ar":"3MVc","./ar-dz":"tkWw","./ar-dz.js":"tkWw","./ar-kw":"j8cJ","./ar-kw.js":"j8cJ","./ar-ly":"wPpW","./ar-ly.js":"wPpW","./ar-ma":"dURR","./ar-ma.js":"dURR","./ar-sa":"7OnE","./ar-sa.js":"7OnE","./ar-tn":"BEem","./ar-tn.js":"BEem","./ar.js":"3MVc","./az":"eHwN","./az.js":"eHwN","./be":"3hfc","./be.js":"3hfc","./bg":"lOED","./bg.js":"lOED","./bm":"hng5","./bm.js":"hng5","./bn":"aM0x","./bn.js":"aM0x","./bo":"w2Hs","./bo.js":"w2Hs","./br":"OSsP","./br.js":"OSsP","./bs":"aqvp","./bs.js":"aqvp","./ca":"wIgY","./ca.js":"wIgY","./cs":"ssxj","./cs.js":"ssxj","./cv":"N3vo","./cv.js":"N3vo","./cy":"ZFGz","./cy.js":"ZFGz","./da":"YBA/","./da.js":"YBA/","./de":"DOkx","./de-at":"8v14","./de-at.js":"8v14","./de-ch":"Frex","./de-ch.js":"Frex","./de.js":"DOkx","./dv":"rIuo","./dv.js":"rIuo","./el":"CFqe","./el.js":"CFqe","./en-au":"Sjoy","./en-au.js":"Sjoy","./en-ca":"Tqun","./en-ca.js":"Tqun","./en-gb":"hPuz","./en-gb.js":"hPuz","./en-ie":"ALEw","./en-ie.js":"ALEw","./en-il":"QZk1","./en-il.js":"QZk1","./en-nz":"dyB6","./en-nz.js":"dyB6","./eo":"Nd3h","./eo.js":"Nd3h","./es":"LT9G","./es-do":"7MHZ","./es-do.js":"7MHZ","./es-us":"INcR","./es-us.js":"INcR","./es.js":"LT9G","./et":"XlWM","./et.js":"XlWM","./eu":"sqLM","./eu.js":"sqLM","./fa":"2pmY","./fa.js":"2pmY","./fi":"nS2h","./fi.js":"nS2h","./fo":"OVPi","./fo.js":"OVPi","./fr":"tzHd","./fr-ca":"bXQP","./fr-ca.js":"bXQP","./fr-ch":"VK9h","./fr-ch.js":"VK9h","./fr.js":"tzHd","./fy":"g7KF","./fy.js":"g7KF","./gd":"nLOz","./gd.js":"nLOz","./gl":"FuaP","./gl.js":"FuaP","./gom-latn":"+27R","./gom-latn.js":"+27R","./gu":"rtsW","./gu.js":"rtsW","./he":"Nzt2","./he.js":"Nzt2","./hi":"ETHv","./hi.js":"ETHv","./hr":"V4qH","./hr.js":"V4qH","./hu":"xne+","./hu.js":"xne+","./hy-am":"GrS7","./hy-am.js":"GrS7","./id":"yRTJ","./id.js":"yRTJ","./is":"upln","./is.js":"upln","./it":"FKXc","./it.js":"FKXc","./ja":"ORgI","./ja.js":"ORgI","./jv":"JwiF","./jv.js":"JwiF","./ka":"RnJI","./ka.js":"RnJI","./kk":"j+vx","./kk.js":"j+vx","./km":"5j66","./km.js":"5j66","./kn":"gEQe","./kn.js":"gEQe","./ko":"eBB/","./ko.js":"eBB/","./ky":"6cf8","./ky.js":"6cf8","./lb":"z3hR","./lb.js":"z3hR","./lo":"nE8X","./lo.js":"nE8X","./lt":"/6P1","./lt.js":"/6P1","./lv":"jxEH","./lv.js":"jxEH","./me":"svD2","./me.js":"svD2","./mi":"gEU3","./mi.js":"gEU3","./mk":"Ab7C","./mk.js":"Ab7C","./ml":"oo1B","./ml.js":"oo1B","./mn":"CqHt","./mn.js":"CqHt","./mr":"5vPg","./mr.js":"5vPg","./ms":"ooba","./ms-my":"G++c","./ms-my.js":"G++c","./ms.js":"ooba","./mt":"oCzW","./mt.js":"oCzW","./my":"F+2e","./my.js":"F+2e","./nb":"FlzV","./nb.js":"FlzV","./ne":"/mhn","./ne.js":"/mhn","./nl":"3K28","./nl-be":"Bp2f","./nl-be.js":"Bp2f","./nl.js":"3K28","./nn":"C7av","./nn.js":"C7av","./pa-in":"pfs9","./pa-in.js":"pfs9","./pl":"7LV+","./pl.js":"7LV+","./pt":"ZoSI","./pt-br":"AoDM","./pt-br.js":"AoDM","./pt.js":"ZoSI","./ro":"wT5f","./ro.js":"wT5f","./ru":"ulq9","./ru.js":"ulq9","./sd":"fW1y","./sd.js":"fW1y","./se":"5Omq","./se.js":"5Omq","./si":"Lgqo","./si.js":"Lgqo","./sk":"OUMt","./sk.js":"OUMt","./sl":"2s1U","./sl.js":"2s1U","./sq":"V0td","./sq.js":"V0td","./sr":"f4W3","./sr-cyrl":"c1x4","./sr-cyrl.js":"c1x4","./sr.js":"f4W3","./ss":"7Q8x","./ss.js":"7Q8x","./sv":"Fpqq","./sv.js":"Fpqq","./sw":"DSXN","./sw.js":"DSXN","./ta":"+7/x","./ta.js":"+7/x","./te":"Nlnz","./te.js":"Nlnz","./tet":"gUgh","./tet.js":"gUgh","./tg":"5SNd","./tg.js":"5SNd","./th":"XzD+","./th.js":"XzD+","./tl-ph":"3LKG","./tl-ph.js":"3LKG","./tlh":"m7yE","./tlh.js":"m7yE","./tr":"k+5o","./tr.js":"k+5o","./tzl":"iNtv","./tzl.js":"iNtv","./tzm":"FRPF","./tzm-latn":"krPU","./tzm-latn.js":"krPU","./tzm.js":"FRPF","./ug-cn":"To0v","./ug-cn.js":"To0v","./uk":"ntHu","./uk.js":"ntHu","./ur":"uSe8","./ur.js":"uSe8","./uz":"XU1s","./uz-latn":"/bsm","./uz-latn.js":"/bsm","./uz.js":"XU1s","./vi":"0X8Q","./vi.js":"0X8Q","./x-pseudo":"e/KL","./x-pseudo.js":"e/KL","./yo":"YXlc","./yo.js":"YXlc","./zh-cn":"Vz2w","./zh-cn.js":"Vz2w","./zh-hk":"ZUyn","./zh-hk.js":"ZUyn","./zh-tw":"BbgG","./zh-tw.js":"BbgG"};function n(t){return s(i(t))}function i(t){var e=o[t];if(!(e+1))throw new Error("Cannot find module '"+t+"'.");return e}n.keys=function(){return Object.keys(o)},n.resolve=i,t.exports=n,n.id="uslO"}},["NHnr"]); -------------------------------------------------------------------------------- /dist/static/js/manifest.3ad1d5771e9b13dbdad2.js: -------------------------------------------------------------------------------- 1 | !function(r){var n=window.webpackJsonp;window.webpackJsonp=function(e,u,c){for(var f,i,p,a=0,l=[];a 2 | 3 | 4 | 5 | 6 | CNode by Vue 7 | 8 | 9 |
10 | 11 | 12 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "cnode-by-vue", 3 | "version": "1.0.0", 4 | "description": "A Vue project based on CNode API", 5 | "scripts": { 6 | "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js", 7 | "build": "node build/build.js" 8 | }, 9 | "keywords": [ 10 | "vue", 11 | "cnode", 12 | "mint-ui" 13 | ], 14 | "author": "FishPlusOrange", 15 | "license": "MIT", 16 | "dependencies": { 17 | "axios": "^0.18.0", 18 | "mint-ui": "^2.2.13", 19 | "moment": "^2.22.1", 20 | "vue": "^2.5.2", 21 | "vue-router": "^3.0.1", 22 | "vuex": "^3.0.1" 23 | }, 24 | "devDependencies": { 25 | "autoprefixer": "^7.1.2", 26 | "babel-core": "^6.22.1", 27 | "babel-helper-vue-jsx-merge-props": "^2.0.3", 28 | "babel-loader": "^7.1.1", 29 | "babel-plugin-syntax-jsx": "^6.18.0", 30 | "babel-plugin-transform-runtime": "^6.22.0", 31 | "babel-plugin-transform-vue-jsx": "^3.5.0", 32 | "babel-preset-env": "^1.3.2", 33 | "babel-preset-stage-2": "^6.22.0", 34 | "chalk": "^2.0.1", 35 | "copy-webpack-plugin": "^4.0.1", 36 | "css-loader": "^0.28.0", 37 | "extract-text-webpack-plugin": "^3.0.0", 38 | "file-loader": "^1.1.4", 39 | "friendly-errors-webpack-plugin": "^1.6.1", 40 | "html-webpack-plugin": "^2.30.1", 41 | "node-notifier": "^5.1.2", 42 | "node-sass": "^4.8.3", 43 | "optimize-css-assets-webpack-plugin": "^3.2.0", 44 | "ora": "^1.2.0", 45 | "portfinder": "^1.0.13", 46 | "postcss-import": "^11.0.0", 47 | "postcss-loader": "^2.0.8", 48 | "postcss-url": "^7.2.1", 49 | "rimraf": "^2.6.0", 50 | "sass-loader": "^7.0.1", 51 | "sass-resources-loader": "^1.3.3", 52 | "semver": "^5.3.0", 53 | "shelljs": "^0.7.6", 54 | "uglifyjs-webpack-plugin": "^1.1.1", 55 | "url-loader": "^0.5.8", 56 | "vue-loader": "^13.3.0", 57 | "vue-style-loader": "^3.0.1", 58 | "vue-template-compiler": "^2.5.2", 59 | "webpack": "^3.6.0", 60 | "webpack-bundle-analyzer": "^2.9.0", 61 | "webpack-dev-server": "^2.9.1", 62 | "webpack-merge": "^4.1.0" 63 | }, 64 | "engines": { 65 | "node": ">= 6.0.0", 66 | "npm": ">= 3.0.0" 67 | }, 68 | "browserslist": [ 69 | "> 1%", 70 | "last 2 versions", 71 | "not ie <= 8" 72 | ], 73 | "homepage": "https://github.com/FishPlusOrange/cnode-by-vue#readme", 74 | "repository": { 75 | "type": "git", 76 | "url": "https://github.com/FishPlusOrange/cnode-by-vue.git" 77 | }, 78 | "bugs": { 79 | "url": "https://github.com/FishPlusOrange/cnode-by-vue/issues" 80 | } 81 | } 82 | -------------------------------------------------------------------------------- /src/App.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 32 | 33 | 51 | -------------------------------------------------------------------------------- /src/assets/css/base.scss: -------------------------------------------------------------------------------- 1 | * { 2 | margin: 0; 3 | padding: 0; 4 | outline: none; 5 | border: 0 none; 6 | box-sizing: border-box; 7 | -webkit-tap-highlight-color: rgba(0, 0, 0, 0); 8 | -webkit-overflow-scrolling: touch; 9 | } 10 | html { 11 | width: 100%; 12 | height: 100%; 13 | font-size: $root-size; 14 | -webkit-text-size-adjust: 100%; 15 | } 16 | body { 17 | width: 100%; 18 | height: 100%; 19 | background: $basic-bg; 20 | } 21 | ul, 22 | ol { 23 | list-style: none; 24 | } 25 | a { 26 | color: $text-color; 27 | text-decoration: none; 28 | } 29 | img { 30 | border: 0; 31 | vertical-align: middle; 32 | } 33 | input, 34 | textarea { 35 | -webkit-appearance: none; 36 | } 37 | input::-webkit-input-placeholder, 38 | textarea::-webkit-input-placeholder { 39 | color: $info-color; 40 | } 41 | textarea { 42 | resize: none; 43 | } 44 | -------------------------------------------------------------------------------- /src/assets/css/common.scss: -------------------------------------------------------------------------------- 1 | /* Markdown */ 2 | .markdown-text { 3 | font-size: 14px; 4 | h1, 5 | h2, 6 | h3, 7 | h4, 8 | h5, 9 | h6 { 10 | margin: 30px 0 15px; 11 | } 12 | p { 13 | line-height: 1.7em; 14 | overflow: auto; 15 | white-space: pre-wrap; 16 | word-wrap: break-word; 17 | margin: 15px 0 18 | } 19 | a { 20 | color: #08c; 21 | text-decoration: none; 22 | } 23 | ol, 24 | ul { 25 | padding: 0; 26 | margin: 0 0 10px 25px 27 | } 28 | li { 29 | line-height: 2em; 30 | } 31 | blockquote { 32 | padding: 0 0 0 15px; 33 | margin: 0 0 20px; 34 | border-left: 5px solid #eee 35 | } 36 | img { 37 | height: auto; 38 | max-width: 100%; 39 | } 40 | > :first-child { 41 | margin-top: 0; 42 | } 43 | > :last-child { 44 | margin-bottom: 15px; 45 | } 46 | } 47 | /* Transition */ 48 | .slide-enter-active, 49 | .slide-leave-active { 50 | transition: .3s ease; 51 | } 52 | .slide-enter, 53 | .slide-leave-to { 54 | transform: translateX(-125px); 55 | opacity: 0; 56 | } 57 | .fade-enter-active, 58 | .fade-leave-active { 59 | transition: .3s ease; 60 | } 61 | .fade-enter, 62 | .fade-leave-to { 63 | transform: translateX(15px); 64 | opacity: 0; 65 | } 66 | .pop-enter-active, 67 | .pop-leave-active { 68 | transition: .3s ease; 69 | } 70 | .pop-enter, 71 | .pop-leave-to { 72 | transform: translateY(125px); 73 | opacity: 0; 74 | } 75 | -------------------------------------------------------------------------------- /src/assets/css/variables.scss: -------------------------------------------------------------------------------- 1 | // 公共变量 2 | $root-size: 16px; 3 | $primary-bg: #fff; 4 | $basic-bg: #f7f7f7; 5 | $primary-color: #26a2ff; 6 | $text-color: #333; 7 | $info-color: #999; 8 | $border-color: #e4e7ed; 9 | 10 | // 头像 11 | @mixin rounded-avatar($size: 100px) { 12 | width: $size; 13 | height: $size; 14 | border-radius: $size / 2; 15 | overflow: hidden; 16 | img { 17 | width: 100%; 18 | height: 100%; 19 | } 20 | } 21 | 22 | // 面板 23 | @mixin absolute-panel { 24 | position: absolute; 25 | width: 100%; 26 | height: 100%; 27 | top: 0; 28 | right: 0; 29 | bottom: 0; 30 | left: 0; 31 | } 32 | 33 | // 文字超出省略 34 | @mixin text-overflow { 35 | overflow: hidden; 36 | text-overflow: ellipsis; 37 | white-space: nowrap; 38 | } 39 | 40 | // px 转 rem 41 | @function pxToRem($px) { 42 | @return $px / $root-size * 1rem; 43 | } -------------------------------------------------------------------------------- /src/components/MainContent.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 17 | 18 | -------------------------------------------------------------------------------- /src/components/MainHeader.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /src/components/MsgCenter.vue: -------------------------------------------------------------------------------- 1 | 52 | 53 | 139 | 140 | 209 | -------------------------------------------------------------------------------- /src/components/NewTopic.vue: -------------------------------------------------------------------------------- 1 | 36 | 37 | 136 | 137 | 216 | -------------------------------------------------------------------------------- /src/components/SideBar.vue: -------------------------------------------------------------------------------- 1 | 31 | 32 | 133 | 134 | 167 | -------------------------------------------------------------------------------- /src/components/TopicContent.vue: -------------------------------------------------------------------------------- 1 | 65 | 66 | 273 | 274 | 398 | -------------------------------------------------------------------------------- /src/components/TopicList.vue: -------------------------------------------------------------------------------- 1 | 28 | 29 | 118 | 119 | 203 | -------------------------------------------------------------------------------- /src/components/TopicTab.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 47 | 48 | 85 | -------------------------------------------------------------------------------- /src/components/UserCollection.vue: -------------------------------------------------------------------------------- 1 | 24 | 25 | 84 | 85 | 142 | -------------------------------------------------------------------------------- /src/components/UserInfo.vue: -------------------------------------------------------------------------------- 1 | 28 | 29 | 74 | 75 | 133 | -------------------------------------------------------------------------------- /src/components/UserLogin.vue: -------------------------------------------------------------------------------- 1 | 15 | 16 | 74 | 75 | 112 | -------------------------------------------------------------------------------- /src/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from '@/App' 3 | import router from '@/router' 4 | import store from '@/vuex/store' 5 | import MintUI from 'mint-ui' 6 | import 'mint-ui/lib/style.css' 7 | import axios from 'axios' 8 | import moment from 'moment' 9 | 10 | Vue.use(MintUI) 11 | 12 | Vue.prototype.$axios = axios 13 | Vue.prototype.$moment = moment 14 | 15 | // 日期格式化 16 | Vue.filter('dateFormat', function(value) { 17 | if(!value) return '' 18 | return moment(value).fromNow().replace(/\s/g, '').replace(/\ban?/, '1').replace('fewseconds','分钟').replace(/minutes?/, '分钟').replace(/hours?/, '小时').replace(/days?/, '天').replace(/months?/, '个月').replace(/years?/, '年').replace('ago', '前') 19 | }) 20 | 21 | Vue.config.productionTip = false 22 | 23 | new Vue({ 24 | el: '#app', 25 | router, 26 | store, 27 | components: { App }, 28 | template: '' 29 | }) 30 | -------------------------------------------------------------------------------- /src/router/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Router from 'vue-router' 3 | import MainContent from '@/components/MainContent' 4 | import TopicList from '@/components/TopicList' 5 | import TopicContent from '@/components/TopicContent' 6 | import UserInfo from '@/components/UserInfo' 7 | 8 | Vue.use(Router) 9 | 10 | export default new Router({ 11 | routes: [ 12 | { 13 | path: '/', 14 | component: MainContent, 15 | children: [ 16 | { 17 | path: '', 18 | name: 'TopicList', 19 | component: TopicList 20 | }, 21 | { 22 | path: 'topicContent/:id', 23 | name: 'TopicContent', 24 | component: TopicContent 25 | } 26 | ] 27 | }, 28 | { 29 | path: '/userInfo/:loginname', 30 | name: 'UserInfo', 31 | component: UserInfo 32 | } 33 | ] 34 | }) 35 | -------------------------------------------------------------------------------- /src/vuex/store.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Vuex from 'vuex' 3 | 4 | Vue.use(Vuex) 5 | 6 | export default new Vuex.Store({ 7 | state: { 8 | accessToken: localStorage.accessToken || '', 9 | userInfo: localStorage.accessToken && JSON.parse(localStorage.userInfo) || {avatar_url: '', id: '', loginname: '', success: false}, 10 | types: { 11 | all: '全部', 12 | good: '精华', 13 | share: '分享', 14 | ask: '问答', 15 | job: '招聘', 16 | dev: '测试' 17 | }, 18 | activeTab: 'all', 19 | topics: [], 20 | page: 1, 21 | msgNum: 0, 22 | isShowNewTopic: false, 23 | isShowUserLogin: false, 24 | isShowUserCollection: false, 25 | isShowMsgCenter: false, 26 | isShowSideBar: false, 27 | isShowBack: false, 28 | isShowGoTop: false 29 | }, 30 | mutations: { 31 | updateAccessToken(state, payload) { 32 | state.accessToken = payload.accessToken; 33 | }, 34 | updateUserInfo(state, payload) { 35 | state.userInfo = payload.userInfo; 36 | }, 37 | setTopics(state, payload) { 38 | state.topics = payload.topics; 39 | }, 40 | setTab(state, payload) { 41 | state.activeTab = payload.activeTab; 42 | state.page = payload.page; 43 | state.topics = payload.topics; 44 | }, 45 | setPage(state, payload) { 46 | state.page++; 47 | }, 48 | setMsgNum(state, payload) { 49 | if(payload) { 50 | state.msgNum = payload.msgNum; 51 | }else { 52 | state.msgNum--; 53 | } 54 | }, 55 | toggleNewTopic(state, payload) { 56 | state.isShowNewTopic = payload.isShowNewTopic; 57 | }, 58 | toggleUserLogin(state, payload) { 59 | state.isShowUserLogin = payload.isShowUserLogin; 60 | }, 61 | toggleUserCollection(state, payload) { 62 | state.isShowUserCollection = payload.isShowUserCollection; 63 | }, 64 | toggleMsgCenter(state, payload) { 65 | state.isShowMsgCenter = payload.isShowMsgCenter; 66 | }, 67 | toggleSideBar(state, payload) { 68 | state.isShowSideBar = payload.isShowSideBar; 69 | }, 70 | toggleBack(state, payload) { 71 | state.isShowBack = payload.isShowBack; 72 | } 73 | } 74 | }) 75 | -------------------------------------------------------------------------------- /static/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FishPlusOrange/cnode-by-vue/9fd04ba5a709960dbc20df26d9a6aba6813d1fce/static/.gitkeep -------------------------------------------------------------------------------- /static/iconfont/iconfont.css: -------------------------------------------------------------------------------- 1 | 2 | @font-face {font-family: "iconfont"; 3 | src: url('iconfont.eot?t=1525676222543'); /* IE9*/ 4 | src: url('iconfont.eot?t=1525676222543#iefix') format('embedded-opentype'), /* IE6-IE8 */ 5 | url('data:application/x-font-woff;charset=utf-8;base64,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') format('woff'), 6 | url('iconfont.ttf?t=1525676222543') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/ 7 | url('iconfont.svg?t=1525676222543#iconfont') format('svg'); /* iOS 4.1- */ 8 | } 9 | 10 | .iconfont { 11 | font-family:"iconfont" !important; 12 | font-size:16px; 13 | font-style:normal; 14 | -webkit-font-smoothing: antialiased; 15 | -moz-osx-font-smoothing: grayscale; 16 | } 17 | 18 | .icon-reply:before { content: "\e62c"; } 19 | 20 | .icon-up:before { content: "\e630"; } 21 | 22 | .icon-up-active:before { content: "\e631"; } 23 | 24 | .icon-collect:before { content: "\e66b"; } 25 | 26 | .icon-comment:before { content: "\e66c"; } 27 | 28 | .icon-collect-active:before { content: "\e683"; } 29 | 30 | -------------------------------------------------------------------------------- /static/iconfont/iconfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FishPlusOrange/cnode-by-vue/9fd04ba5a709960dbc20df26d9a6aba6813d1fce/static/iconfont/iconfont.eot -------------------------------------------------------------------------------- /static/iconfont/iconfont.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 8 | Created by iconfont 9 | 10 | 11 | 12 | 13 | 21 | 22 | 23 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | -------------------------------------------------------------------------------- /static/iconfont/iconfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FishPlusOrange/cnode-by-vue/9fd04ba5a709960dbc20df26d9a6aba6813d1fce/static/iconfont/iconfont.ttf -------------------------------------------------------------------------------- /static/iconfont/iconfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FishPlusOrange/cnode-by-vue/9fd04ba5a709960dbc20df26d9a6aba6813d1fce/static/iconfont/iconfont.woff --------------------------------------------------------------------------------