├── .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,VAwAAKwLAAABAAIAAAAAAAIABQMAAAAAAAABAJABAAAAAExQAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAQ2JztwAAAAAAAAAAAAAAAAAAAAAAABAAaQBjAG8AbgBmAG8AbgB0AAAADgBSAGUAZwB1AGwAYQByAAAAFgBWAGUAcgBzAGkAbwBuACAAMQAuADAAAAAQAGkAYwBvAG4AZgBvAG4AdAAAAAAAAAEAAAALAIAAAwAwR1NVQrD+s+0AAAE4AAAAQk9TLzJW7khyAAABfAAAAFZjbWFwnDJrcwAAAfQAAAHkZ2x5Zu/hX6QAAAPsAAAE5GhlYWQRS3edAAAA4AAAADZoaGVhB94DiQAAALwAAAAkaG10eB/pAAAAAAHUAAAAIGxvY2EGEgSUAAAD2AAAABJtYXhwARcAXQAAARgAAAAgbmFtZT5U/n0AAAjQAAACbXBvc3RA1xzOAAALQAAAAGkAAQAAA4D/gABcBAAAAAAABAAAAQAAAAAAAAAAAAAAAAAAAAgAAQAAAAEAALdzYkNfDzz1AAsEAAAAAADXFhm+AAAAANcWGb4AAP/RBAADUwAAAAgAAgAAAAAAAAABAAAACABRAAUAAAAAAAIAAAAKAAoAAAD/AAAAAAAAAAEAAAAKAB4ALAABREZMVAAIAAQAAAAAAAAAAQAAAAFsaWdhAAgAAAABAAAAAQAEAAQAAAABAAgAAQAGAAAAAQAAAAAAAQP9AZAABQAIAokCzAAAAI8CiQLMAAAB6wAyAQgAAAIABQMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUGZFZABAAHjmgwOA/4AAXAOAAIAAAAABAAAAAAAABAAAAAPpAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAAAAAFAAAAAwAAACwAAAAEAAABgAABAAAAAAB6AAMAAQAAACwAAwAKAAABgAAEAE4AAAAMAAgAAgAEAHjmLOYx5mzmg///AAAAeOYs5jDma+aD//8AAAAAAAAAAAAAAAEADAAMAAwADgAQAAAAAQACAAMABAAFAAYABwAAAQYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAZAAAAAAAAAAHAAAAeAAAAHgAAAABAADmLAAA5iwAAAACAADmMAAA5jAAAAADAADmMQAA5jEAAAAEAADmawAA5msAAAAFAADmbAAA5mwAAAAGAADmgwAA5oMAAAAHAAAAAAB2AOgBSgF6AeACMgJyAAAABQAA/+EDvAMYABMAKAAxAEQAUAAAAQYrASIOAh0BISc0LgIrARUhBRUXFA4DJyMnIQcjIi4DPQEXIgYUFjI2NCYXBgcGDwEOAR4BMyEyNicuAicBNTQ+AjsBMhYdAQEZGxpTEiUcEgOQAQoYJx6F/koCogEVHyMcDz4t/kksPxQyIBMIdwwSEhkSEowIBgUFCAICBA8OAW0XFgkFCQoG/qQFDxoVvB8pAh8BDBknGkxZDSAbEmGING4dJRcJAQGAgAETGyAOpz8RGhERGhF8GhYTEhkHEA0IGBoNIyQUAXfkCxgTDB0m4wAAAAACAAAAAAP9A1MALABJAAAlLgInLgEnLgEnIgYHFRQHBiYnASY0NwE+ARcWHQE2Mzc2FhcWFx4BFQ4BBwEXNTQ2Nz4BMzIWFxYXHgEXLgMHDgEHBiY9AQPlDg0tJx1EJS5mOSZLKw4HFQb+swYGAU0FFAcODQ4kSbxaYzcgIAEKCPxv6wwHMWwsOWovTDwPIQsUXJqkQSc+AgsQYwEcPCIYNQ4SGAEHCLMPBwICBQFNBxMHAUwFAwMGD6wBAQEjMjpfOaFQCAwCAYrtgQgLAgkHFBIcMQwXDFt4VyIBAQgBAQwKgAABAAD/6AO+AxgAOwAAAQ4BBy4BJw4BBwYeATY3PgE3MhYXFjI3PgEzHgEXFAcOAQcuAScmJyYnLgEOARYXFhcWBBc2JDc2NS4BArVBXhwdXkBThh8ECxkXBRdmPypUIgkjCiJUKlVzAl1NtCYmtk4zGAQDBBcZCwcFHTsTAQ03NgELE28DlgMYAkQnJ0QCAWVVDRYJCwxCTgE+OA4OOD4CgWFkXU2iGxuiTTQ4CQoMCwgWGQtEPBT6EhL6FG9+e6UAAAAAAQAA/+oDwAMWABkAAAEOAQcuAScOAQ8BBhYXFhcWBBc2JDc2Ny4BArhAXR0cXUBThB8BDwMSHDsTAQs2NgEKEm4BA5UDFQJEJiZEAgFkVQI1YzlEOxT5ERH5E299e6MAAgAA/9EDwQMzACYAPwAAAS4BLwIuASIGDwIOAhYfAQcGHgEzMj8BFxYzMj4BLwE3PgEnBw4BHwEnJiIPATc2Ji8BNz4BPwEXHgEfAQO7BhsT6GUIICYfCGXpEhsMCA2qJwMOIBQRD8rLDxAUIQ4DKKsNCAboCgoDJ8oPIQ/LKAIJCqvpEBkHZWYHGRDpAfARFgMj0hAUFBDSIwMWIiINquwSIBcIbW0IFyAS7KoNIhG+CxwP7G0ICG3sDxwLqiMCEw7S0g4TAiMAAAAAAgAA/+0DtQLfAB0ANQAABSInJic1NCYnIyImJxE+ATchHgEVERQGIyEGDwEGAyIGBxEeARczMhYdATc2MyE+ATURNCYjAVEFBQ4BDgp7HyoBASofAsUgKiog/rAJB6gIpgoNAQENCnceKXsUGwFFCg0NChMDBw9rCw0BKiABwCAqAQEqIP5AICoBBZEGArQNCf5aCgwBKB0yZxABDAoBpgkNAAABAAD/0QPBAzMAJgAAAS4BLwIuASIGDwIOAhYfAQcGHgEzMj8BFxYzMj4BLwE3PgEnA7sGGxPoZQggJh8IZekSGwwIDaonAw4gFBEPyssPEBQhDgMoqw0IBgHwERYDI9IQFBQQ0iMDFiIiDarsEiAXCG1tCBcgEuyqDSIRAAAAAAAAEgDeAAEAAAAAAAAAFQAAAAEAAAAAAAEACAAVAAEAAAAAAAIABwAdAAEAAAAAAAMACAAkAAEAAAAAAAQACAAsAAEAAAAAAAUACwA0AAEAAAAAAAYACAA/AAEAAAAAAAoAKwBHAAEAAAAAAAsAEwByAAMAAQQJAAAAKgCFAAMAAQQJAAEAEACvAAMAAQQJAAIADgC/AAMAAQQJAAMAEADNAAMAAQQJAAQAEADdAAMAAQQJAAUAFgDtAAMAAQQJAAYAEAEDAAMAAQQJAAoAVgETAAMAAQQJAAsAJgFpCkNyZWF0ZWQgYnkgaWNvbmZvbnQKaWNvbmZvbnRSZWd1bGFyaWNvbmZvbnRpY29uZm9udFZlcnNpb24gMS4waWNvbmZvbnRHZW5lcmF0ZWQgYnkgc3ZnMnR0ZiBmcm9tIEZvbnRlbGxvIHByb2plY3QuaHR0cDovL2ZvbnRlbGxvLmNvbQAKAEMAcgBlAGEAdABlAGQAIABiAHkAIABpAGMAbwBuAGYAbwBuAHQACgBpAGMAbwBuAGYAbwBuAHQAUgBlAGcAdQBsAGEAcgBpAGMAbwBuAGYAbwBuAHQAaQBjAG8AbgBmAG8AbgB0AFYAZQByAHMAaQBvAG4AIAAxAC4AMABpAGMAbwBuAGYAbwBuAHQARwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABzAHYAZwAyAHQAdABmACAAZgByAG8AbQAgAEYAbwBuAHQAZQBsAGwAbwAgAHAAcgBvAGoAZQBjAHQALgBoAHQAdABwADoALwAvAGYAbwBuAHQAZQBsAGwAbwAuAGMAbwBtAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAECAQMBBAEFAQYBBwEIAQkAAXgFcmVwbHkCdXAJdXAtYWN0aXZlB2NvbGxlY3QHY29tbWVudA5jb2xsZWN0LWFjdGl2ZQAAAAAA#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 |
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 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
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 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
17 |
18 |
--------------------------------------------------------------------------------
/src/components/MainHeader.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 | 返回
4 |
5 |
6 |
7 |
8 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/src/components/MsgCenter.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
7 |
8 | 未读消息 {{ msgs.hasnot_read_messages.length }}
9 | 已读消息 {{ msgs.has_read_messages.length }}
10 |
11 |
12 |
13 |
14 | -
15 |
16 |
17 |
18 |
![]()
19 |
20 | {{ msg.author.loginname + ':' }}
21 |
22 |
{{ msg.reply.create_at | dateFormat }}
23 |
24 |
25 | 话题:{{ msg.topic.title }}
26 |
27 |
28 | 暂无消息
29 |
30 |
31 |
32 | -
33 |
34 |
35 |
36 |
![]()
37 |
38 | {{ msg.author.loginname + ':' }}
39 |
40 |
{{ msg.reply.create_at | dateFormat }}
41 |
42 |
43 | 话题:{{ msg.topic.title }}
44 |
45 |
46 | 暂无消息
47 |
48 |
49 |
50 |
51 |
52 |
53 |
139 |
140 |
209 |
--------------------------------------------------------------------------------
/src/components/NewTopic.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
18 |
19 | 发布
20 |
21 |
22 |
23 |
24 |
25 |
26 | 取消
27 | 确定
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
136 |
137 |
216 |
--------------------------------------------------------------------------------
/src/components/SideBar.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
29 |
30 |
31 |
32 |
133 |
134 |
167 |
--------------------------------------------------------------------------------
/src/components/TopicContent.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
{{ topicContent.title }}
5 |
6 |
7 |
8 |
9 |
![]()
10 |
11 | {{ topicContent.author && topicContent.author.loginname }}
12 |
13 |
{{ topicContent.create_at | dateFormat }}
14 |
{{ types[topicContent.tab]}}
15 |
{{ topicContent.reply_count + '/' + topicContent.visit_count }}
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
{{ topicContent.reply_count }}条回复
26 |
27 | -
28 |
29 |
30 |
31 |
32 |
![]()
33 |
34 | {{ reply.author.loginname }}
35 |
36 |
{{ reply.create_at | dateFormat }}
37 |
{{ index + 1 }}楼
38 |
39 |
40 |
41 |
42 | {{ reply.ups.length }}
43 |
44 |
45 |
46 |
53 |
54 |
55 |
56 |
62 |
返回顶部
63 |
64 |
65 |
66 |
273 |
274 |
398 |
--------------------------------------------------------------------------------
/src/components/TopicList.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | -
6 |
7 |
![]()
8 |
9 |
10 |
11 | {{ (topic.top ? '置顶' : '') || (topic.good ? '精华' : '') || types[topic.tab] }}
12 | {{ topic.title }}
13 |
14 |
15 | {{ topic.reply_count + '/' + topic.visit_count }}
16 | {{ topic.last_reply_at | dateFormat }}
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
返回顶部
26 |
27 |
28 |
29 |
118 |
119 |
203 |
--------------------------------------------------------------------------------
/src/components/TopicTab.vue:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
9 |
47 |
48 |
85 |
--------------------------------------------------------------------------------
/src/components/UserCollection.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
22 |
23 |
24 |
25 |
84 |
85 |
142 |
--------------------------------------------------------------------------------
/src/components/UserInfo.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
![]()
6 |
7 |
8 |
用户名:{{ userInfo.loginname }}
9 |
GitHub:{{ userInfo.githubUsername }}
10 |
积分:{{ userInfo.score }}
11 |
注册于{{ userInfo.create_at && userInfo.create_at.substr(0, 10) }}
12 |
13 |
14 |
15 |
最近创建的话题:
16 |
17 | - {{ topic.title }}
18 |
19 |
20 |
21 |
最近参与的话题:
22 |
23 | - {{ reply.title }}
24 |
25 |
26 |
27 |
28 |
29 |
74 |
75 |
133 |
--------------------------------------------------------------------------------
/src/components/UserLogin.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
13 |
14 |
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 |
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
--------------------------------------------------------------------------------