├── .babelrc ├── .editorconfig ├── .gitignore ├── .postcssrc.js ├── README.md ├── build ├── build.js ├── check-versions.js ├── dev-client.js ├── dev-server.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.7e001b00ab65151cf454299a730289c8.css │ └── app.7e001b00ab65151cf454299a730289c8.css.map │ ├── img │ ├── 1.4e27f60.png │ ├── 2.c93e94e.png │ ├── 3.ae00594.png │ ├── 4.58ab064.png │ ├── 5.eeb4f97.png │ ├── a1.png │ ├── a2.png │ ├── a3.png │ ├── a4.png │ ├── b1.becf4cd.jpg │ ├── b2.271133f.jpg │ ├── b3.991e283.jpg │ ├── b4.41b1212.jpg │ ├── br1.bcef8f3.png │ ├── c1.a877098.png │ ├── noattent.c3949aa.png │ ├── noitem.6339d49.png │ └── search.8825b03.png │ └── js │ ├── app.b7e08c6b51789f60c06a.js │ ├── app.b7e08c6b51789f60c06a.js.map │ ├── flexible.js │ ├── manifest.569965675b0ea94f23c3.js │ ├── manifest.569965675b0ea94f23c3.js.map │ ├── vendor.5662a4d57e4cba76a71c.js │ └── vendor.5662a4d57e4cba76a71c.js.map ├── img ├── gif1.gif ├── gif3.gif └── gif4.gif ├── index.html ├── mintty.exe.stackdump ├── package-lock.json ├── package.json ├── src ├── App.vue ├── assets │ ├── 1.png │ ├── 2.png │ ├── 3.png │ ├── 4.png │ ├── 5.png │ ├── b1.jpg │ ├── b2.jpg │ ├── b3.jpg │ ├── b4.jpg │ ├── br1.png │ ├── br2.png │ ├── br3.png │ ├── c1.png │ ├── camera.png │ ├── close.png │ ├── delete.png │ ├── g1.png │ ├── g2.png │ ├── icon1.png │ ├── icon2.png │ ├── icon3.png │ ├── icon4.png │ ├── icon5.png │ ├── icon6.png │ ├── icon7.png │ ├── icon8.png │ ├── icon9.png │ ├── l-arrow.png │ ├── left-arrow.png │ ├── like.png │ ├── look.png │ ├── news.png │ ├── noattent.png │ ├── noitem.png │ ├── option.png │ ├── s1.png │ ├── s2.png │ ├── s3.png │ ├── search.png │ ├── tick.png │ ├── transmit.png │ └── wm.png ├── common │ └── disgoods.json ├── components │ ├── Panel.vue │ ├── e.vue │ ├── goodsList.vue │ └── navBar.vue ├── main.js ├── pages │ ├── Cart.vue │ ├── Goods.vue │ ├── Note.vue │ ├── Search.vue │ ├── children │ │ ├── page1.vue │ │ ├── page2.vue │ │ ├── page3.vue │ │ └── page4.vue │ ├── main1.vue │ ├── main2.vue │ └── main3.vue ├── router │ └── index.js └── store │ ├── actions.js │ ├── getters.js │ ├── index.js │ ├── modules │ ├── cart.js │ ├── discovery.js │ └── goods.js │ ├── mutation-types.js │ └── mutations.js ├── static ├── .gitkeep ├── img │ ├── a1.png │ ├── a2.png │ ├── a3.png │ └── a4.png └── js │ └── flexible.js └── yarn.lock /.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-runtime"], 12 | "env": { 13 | "test": { 14 | "presets": ["env", "stage-2"], 15 | "plugins": ["istanbul"] 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /.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 | -------------------------------------------------------------------------------- /.postcssrc.js: -------------------------------------------------------------------------------- 1 | // https://github.com/michael-ciniawsky/postcss-load-config 2 | 3 | module.exports = { 4 | "plugins": { 5 | // to edit target browsers: use "browserslist" field in package.json 6 | "autoprefixer": {} 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # [vue-redbk](https://wenqiii.github.io/vue-redbk/dist/index.html#/main3) 2 | 3 | > 小红书,发现全世界的好东西! 种草种的好,美得比人早!
4 | > ![](https://github.com/wenqiii/vue-redbk/blob/master/img/gif1.gif) 5 | > ![](https://github.com/wenqiii/vue-redbk/blob/master/img/gif3.gif) 6 | > ![](https://github.com/wenqiii/vue-redbk/blob/master/img/gif4.gif) 7 | 8 | ## 在线预览 9 | 10 | >[点我有惊喜哦](https://wenqiii.github.io/vue-redbk/dist/index.html#/main3)
11 | > (PC端建议在Chrome下开启调试模式,移动端直接在浏览器中打开就好) 12 | 13 | ## 项目描述 14 | ### 技术栈 15 | Vue2.0全家桶 + axios + Vuex + Mint-Ui + Mock.js + Stylus 16 | ### 主要依赖 17 | * 使用vue-cli2.0搭建项目框架 18 | * 使用vue-router2.7进行页面路由切换 19 | * 使用json server进行http请求获取数据 20 | * mock假数据存储在本地 21 | * 使用stylus编写样式 22 | * vuex进行状态管理 23 | * better-scroll优化滚动效果 24 | * vue-awesome-swiper轮播图 25 | * flexible.js 10rem解决移动端设备兼容 26 | ### 主要实现的功能 27 | #### 首页 28 | > 1、tabbar滑动切换和点击切换
29 | > 2、搜索框
30 | > 3、笔记列表的自适应布局
31 | > 4、良好的滚动手感
32 | > 5、侧边栏的进入退出
33 | #### 笔记页 34 | > 1、滑动查看笔记图片
35 | > 2、笔记详情展示
36 | #### 商品页 37 | > 1、滑动查看商品图片
38 | > 2、商品详情展示
39 | > 3、加入购物车的上拉弹出框,选择商品颜色、尺寸、重量及数量
40 | #### 购物车 41 | > 1、已加入购物车的商品展示
42 | > 2、增加、减少商品数量,删除商品
43 | > 3、结算功能
44 | ### 待实现功能 45 | > 1、搜索功能
46 | > 2、评论页面的展示
47 | > 3、笔记页面的完善
48 | ## 项目总结(所踩过的坑!!) 49 | >     历时半个多月的敲代码过程,终于完成了这款仿小红书的项目(有点小开森~)。项目使用到vue-router进行路由切换,组件化开发让我更加具有组件化思维,vuex的状态管理模式,采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。项目所用到的假数据为小红书官网上的一些数据,以及小红书app上的截图(小红书没有PC端商品图片,只好默默抠图...)。作为一名vue的初学者,开发过程中难免踩过一些坑,一开始并没有用到mint-ui这个移动端布局框架,打算自己手写一个侧边栏,尝试许久,效果总不如人意,然后果断放弃,投入mintui的怀抱,嗯,效果蛮不错的。还有不想在路由中看到#,路由文件中我选择了history模式,结果打包上线时...你懂的,总之开发过程就是填坑过程,期间遇到的一些问题通过查看官网文档,浏览社区大牛的技术分享,最后总能解决的。 50 | ## 最后!!! 51 |    走过路过的各位大佬们,如果觉得我的项目还不错的,就请动动你们的小手,留下一颗宝贵的星吧~
52 | ## Build Setup 53 | 54 | ``` bash 55 | # install dependencies 56 | npm install 57 | 58 | # serve with hot reload at localhost:8080 59 | npm run dev 60 | 61 | # build for production with minification 62 | npm run build 63 | 64 | # build for production and view the bundle analyzer report 65 | npm run build --report 66 | ``` 67 | 68 | For detailed explanation on how things work, checkout the [guide](http://vuejs-templates.github.io/webpack/) and [docs for vue-loader](http://vuejs.github.io/vue-loader). 69 | -------------------------------------------------------------------------------- /build/build.js: -------------------------------------------------------------------------------- 1 | require('./check-versions')() 2 | 3 | process.env.NODE_ENV = 'production' 4 | 5 | var ora = require('ora') 6 | var rm = require('rimraf') 7 | var path = require('path') 8 | var chalk = require('chalk') 9 | var webpack = require('webpack') 10 | var config = require('../config') 11 | var webpackConfig = require('./webpack.prod.conf') 12 | 13 | var spinner = ora('building for production...') 14 | spinner.start() 15 | 16 | rm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err => { 17 | if (err) throw err 18 | webpack(webpackConfig, function (err, stats) { 19 | spinner.stop() 20 | if (err) throw err 21 | process.stdout.write(stats.toString({ 22 | colors: true, 23 | modules: false, 24 | children: false, 25 | chunks: false, 26 | chunkModules: false 27 | }) + '\n\n') 28 | 29 | if (stats.hasErrors()) { 30 | console.log(chalk.red(' Build failed with errors.\n')) 31 | process.exit(1) 32 | } 33 | 34 | console.log(chalk.cyan(' Build complete.\n')) 35 | console.log(chalk.yellow( 36 | ' Tip: built files are meant to be served over an HTTP server.\n' + 37 | ' Opening index.html over file:// won\'t work.\n' 38 | )) 39 | }) 40 | }) 41 | -------------------------------------------------------------------------------- /build/check-versions.js: -------------------------------------------------------------------------------- 1 | var chalk = require('chalk') 2 | var semver = require('semver') 3 | var packageConfig = require('../package.json') 4 | var shell = require('shelljs') 5 | function exec (cmd) { 6 | return require('child_process').execSync(cmd).toString().trim() 7 | } 8 | 9 | var versionRequirements = [ 10 | { 11 | name: 'node', 12 | currentVersion: semver.clean(process.version), 13 | versionRequirement: packageConfig.engines.node 14 | } 15 | ] 16 | 17 | if (shell.which('npm')) { 18 | versionRequirements.push({ 19 | name: 'npm', 20 | currentVersion: exec('npm --version'), 21 | versionRequirement: packageConfig.engines.npm 22 | }) 23 | } 24 | 25 | module.exports = function () { 26 | var warnings = [] 27 | for (var i = 0; i < versionRequirements.length; i++) { 28 | var mod = versionRequirements[i] 29 | if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) { 30 | warnings.push(mod.name + ': ' + 31 | chalk.red(mod.currentVersion) + ' should be ' + 32 | chalk.green(mod.versionRequirement) 33 | ) 34 | } 35 | } 36 | 37 | if (warnings.length) { 38 | console.log('') 39 | console.log(chalk.yellow('To use this template, you must update following to modules:')) 40 | console.log() 41 | for (var i = 0; i < warnings.length; i++) { 42 | var warning = warnings[i] 43 | console.log(' ' + warning) 44 | } 45 | console.log() 46 | process.exit(1) 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /build/dev-client.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | require('eventsource-polyfill') 3 | var hotClient = require('webpack-hot-middleware/client?noInfo=true&reload=true') 4 | 5 | hotClient.subscribe(function (event) { 6 | if (event.action === 'reload') { 7 | window.location.reload() 8 | } 9 | }) 10 | -------------------------------------------------------------------------------- /build/dev-server.js: -------------------------------------------------------------------------------- 1 | require('./check-versions')() 2 | 3 | var config = require('../config') 4 | if (!process.env.NODE_ENV) { 5 | process.env.NODE_ENV = JSON.parse(config.dev.env.NODE_ENV) 6 | } 7 | 8 | var opn = require('opn') 9 | var path = require('path') 10 | var express = require('express') 11 | var webpack = require('webpack') 12 | var proxyMiddleware = require('http-proxy-middleware') 13 | var webpackConfig = require('./webpack.dev.conf') 14 | 15 | // default port where dev server listens for incoming traffic 16 | var port = process.env.PORT || config.dev.port 17 | // automatically open browser, if not set will be false 18 | var autoOpenBrowser = !!config.dev.autoOpenBrowser 19 | // Define HTTP proxies to your custom API backend 20 | // https://github.com/chimurai/http-proxy-middleware 21 | var proxyTable = config.dev.proxyTable 22 | 23 | var app = express() 24 | var compiler = webpack(webpackConfig) 25 | 26 | var devMiddleware = require('webpack-dev-middleware')(compiler, { 27 | publicPath: webpackConfig.output.publicPath, 28 | quiet: true 29 | }) 30 | 31 | var hotMiddleware = require('webpack-hot-middleware')(compiler, { 32 | log: false, 33 | heartbeat: 2000 34 | }) 35 | // force page reload when html-webpack-plugin template changes 36 | compiler.plugin('compilation', function (compilation) { 37 | compilation.plugin('html-webpack-plugin-after-emit', function (data, cb) { 38 | hotMiddleware.publish({ action: 'reload' }) 39 | cb() 40 | }) 41 | }) 42 | 43 | // proxy api requests 44 | Object.keys(proxyTable).forEach(function (context) { 45 | var options = proxyTable[context] 46 | if (typeof options === 'string') { 47 | options = { target: options } 48 | } 49 | app.use(proxyMiddleware(options.filter || context, options)) 50 | }) 51 | 52 | // handle fallback for HTML5 history API 53 | app.use(require('connect-history-api-fallback')()) 54 | 55 | // serve webpack bundle output 56 | app.use(devMiddleware) 57 | 58 | // enable hot-reload and state-preserving 59 | // compilation error display 60 | app.use(hotMiddleware) 61 | 62 | // serve pure static assets 63 | var staticPath = path.posix.join(config.dev.assetsPublicPath, config.dev.assetsSubDirectory) 64 | app.use(staticPath, express.static('./static')) 65 | 66 | var uri = 'http://localhost:' + port 67 | 68 | var _resolve 69 | var readyPromise = new Promise(resolve => { 70 | _resolve = resolve 71 | }) 72 | 73 | console.log('> Starting dev server...') 74 | devMiddleware.waitUntilValid(() => { 75 | console.log('> Listening at ' + uri + '\n') 76 | // when env is testing, don't need open it 77 | if (autoOpenBrowser && process.env.NODE_ENV !== 'testing') { 78 | opn(uri) 79 | } 80 | _resolve() 81 | }) 82 | 83 | var server = app.listen(port) 84 | 85 | module.exports = { 86 | ready: readyPromise, 87 | close: () => { 88 | server.close() 89 | } 90 | } 91 | -------------------------------------------------------------------------------- /build/utils.js: -------------------------------------------------------------------------------- 1 | var path = require('path') 2 | var config = require('../config') 3 | var ExtractTextPlugin = require('extract-text-webpack-plugin') 4 | 5 | exports.assetsPath = function (_path) { 6 | var assetsSubDirectory = process.env.NODE_ENV === 'production' 7 | ? config.build.assetsSubDirectory 8 | : config.dev.assetsSubDirectory 9 | return path.posix.join(assetsSubDirectory, _path) 10 | } 11 | 12 | exports.cssLoaders = function (options) { 13 | options = options || {} 14 | 15 | var cssLoader = { 16 | loader: 'css-loader', 17 | options: { 18 | minimize: process.env.NODE_ENV === 'production', 19 | sourceMap: options.sourceMap 20 | } 21 | } 22 | 23 | // generate loader string to be used with extract text plugin 24 | function generateLoaders (loader, loaderOptions) { 25 | var loaders = [cssLoader] 26 | if (loader) { 27 | loaders.push({ 28 | loader: loader + '-loader', 29 | options: Object.assign({}, loaderOptions, { 30 | sourceMap: options.sourceMap 31 | }) 32 | }) 33 | } 34 | 35 | // Extract CSS when that option is specified 36 | // (which is the case during production build) 37 | if (options.extract) { 38 | return ExtractTextPlugin.extract({ 39 | use: loaders, 40 | fallback: 'vue-style-loader' 41 | }) 42 | } else { 43 | return ['vue-style-loader'].concat(loaders) 44 | } 45 | } 46 | 47 | // https://vue-loader.vuejs.org/en/configurations/extract-css.html 48 | return { 49 | css: generateLoaders(), 50 | postcss: generateLoaders(), 51 | less: generateLoaders('less'), 52 | sass: generateLoaders('sass', { indentedSyntax: true }), 53 | scss: generateLoaders('sass'), 54 | stylus: generateLoaders('stylus'), 55 | styl: generateLoaders('stylus') 56 | } 57 | } 58 | 59 | // Generate loaders for standalone style files (outside of .vue) 60 | exports.styleLoaders = function (options) { 61 | var output = [] 62 | var loaders = exports.cssLoaders(options) 63 | for (var extension in loaders) { 64 | var loader = loaders[extension] 65 | output.push({ 66 | test: new RegExp('\\.' + extension + '$'), 67 | use: loader 68 | }) 69 | } 70 | return output 71 | } 72 | -------------------------------------------------------------------------------- /build/vue-loader.conf.js: -------------------------------------------------------------------------------- 1 | var utils = require('./utils') 2 | var config = require('../config') 3 | var isProduction = process.env.NODE_ENV === 'production' 4 | 5 | module.exports = { 6 | loaders: utils.cssLoaders({ 7 | sourceMap: isProduction 8 | ? config.build.productionSourceMap 9 | : config.dev.cssSourceMap, 10 | extract: isProduction 11 | }), 12 | transformToRequire: { 13 | video: 'src', 14 | source: 'src', 15 | img: 'src', 16 | image: 'xlink:href' 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /build/webpack.base.conf.js: -------------------------------------------------------------------------------- 1 | var path = require('path') 2 | var utils = require('./utils') 3 | var config = require('../config') 4 | var vueLoaderConfig = require('./vue-loader.conf') 5 | 6 | function resolve (dir) { 7 | return path.join(__dirname, '..', dir) 8 | } 9 | 10 | module.exports = { 11 | entry: { 12 | app: './src/main.js' 13 | }, 14 | output: { 15 | path: config.build.assetsRoot, 16 | filename: '[name].js', 17 | publicPath: process.env.NODE_ENV === 'production' 18 | ? config.build.assetsPublicPath 19 | : config.dev.assetsPublicPath 20 | }, 21 | resolve: { 22 | extensions: ['.js', '.vue', '.json'], 23 | alias: { 24 | 'vue$': 'vue/dist/vue.esm.js', 25 | '@': resolve('src'), 26 | } 27 | }, 28 | module: { 29 | rules: [ 30 | { 31 | test: /\.vue$/, 32 | loader: 'vue-loader', 33 | options: vueLoaderConfig 34 | }, 35 | { 36 | test: /\.js$/, 37 | loader: 'babel-loader', 38 | include: [resolve('src'), resolve('test')] 39 | }, 40 | { 41 | test: /\.(png|jpe?g|gif|svg)(\?.*)?$/, 42 | loader: 'url-loader', 43 | options: { 44 | limit: 10000, 45 | name: utils.assetsPath('img/[name].[hash:7].[ext]') 46 | } 47 | }, 48 | { 49 | test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/, 50 | loader: 'url-loader', 51 | options: { 52 | limit: 10000, 53 | name: utils.assetsPath('media/[name].[hash:7].[ext]') 54 | } 55 | }, 56 | { 57 | test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/, 58 | loader: 'url-loader', 59 | options: { 60 | limit: 10000, 61 | name: utils.assetsPath('fonts/[name].[hash:7].[ext]') 62 | } 63 | } 64 | ] 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /build/webpack.dev.conf.js: -------------------------------------------------------------------------------- 1 | var utils = require('./utils') 2 | var webpack = require('webpack') 3 | var config = require('../config') 4 | var merge = require('webpack-merge') 5 | var baseWebpackConfig = require('./webpack.base.conf') 6 | var HtmlWebpackPlugin = require('html-webpack-plugin') 7 | var FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin') 8 | 9 | // add hot-reload related code to entry chunks 10 | Object.keys(baseWebpackConfig.entry).forEach(function (name) { 11 | baseWebpackConfig.entry[name] = ['./build/dev-client'].concat(baseWebpackConfig.entry[name]) 12 | }) 13 | 14 | module.exports = merge(baseWebpackConfig, { 15 | module: { 16 | rules: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap }) 17 | }, 18 | // cheap-module-eval-source-map is faster for development 19 | devtool: '#cheap-module-eval-source-map', 20 | plugins: [ 21 | new webpack.DefinePlugin({ 22 | 'process.env': config.dev.env 23 | }), 24 | // https://github.com/glenjamin/webpack-hot-middleware#installation--usage 25 | new webpack.HotModuleReplacementPlugin(), 26 | new webpack.NoEmitOnErrorsPlugin(), 27 | // https://github.com/ampedandwired/html-webpack-plugin 28 | new HtmlWebpackPlugin({ 29 | filename: 'index.html', 30 | template: 'index.html', 31 | inject: true 32 | }), 33 | new FriendlyErrorsPlugin() 34 | ] 35 | }) 36 | -------------------------------------------------------------------------------- /build/webpack.prod.conf.js: -------------------------------------------------------------------------------- 1 | var path = require('path') 2 | var utils = require('./utils') 3 | var webpack = require('webpack') 4 | var config = require('../config') 5 | var merge = require('webpack-merge') 6 | var baseWebpackConfig = require('./webpack.base.conf') 7 | var CopyWebpackPlugin = require('copy-webpack-plugin') 8 | var HtmlWebpackPlugin = require('html-webpack-plugin') 9 | var ExtractTextPlugin = require('extract-text-webpack-plugin') 10 | var OptimizeCSSPlugin = require('optimize-css-assets-webpack-plugin') 11 | 12 | var env = config.build.env 13 | 14 | var webpackConfig = merge(baseWebpackConfig, { 15 | module: { 16 | rules: utils.styleLoaders({ 17 | sourceMap: config.build.productionSourceMap, 18 | extract: true 19 | }) 20 | }, 21 | devtool: config.build.productionSourceMap ? '#source-map' : false, 22 | output: { 23 | path: config.build.assetsRoot, 24 | filename: utils.assetsPath('js/[name].[chunkhash].js'), 25 | chunkFilename: utils.assetsPath('js/[id].[chunkhash].js') 26 | }, 27 | plugins: [ 28 | // http://vuejs.github.io/vue-loader/en/workflow/production.html 29 | new webpack.DefinePlugin({ 30 | 'process.env': env 31 | }), 32 | new webpack.optimize.UglifyJsPlugin({ 33 | compress: { 34 | warnings: false 35 | }, 36 | sourceMap: true 37 | }), 38 | // extract css into its own file 39 | new ExtractTextPlugin({ 40 | filename: utils.assetsPath('css/[name].[contenthash].css') 41 | }), 42 | // Compress extracted CSS. We are using this plugin so that possible 43 | // duplicated CSS from different components can be deduped. 44 | new OptimizeCSSPlugin({ 45 | cssProcessorOptions: { 46 | safe: true 47 | } 48 | }), 49 | // generate dist index.html with correct asset hash for caching. 50 | // you can customize output by editing /index.html 51 | // see https://github.com/ampedandwired/html-webpack-plugin 52 | new HtmlWebpackPlugin({ 53 | filename: config.build.index, 54 | template: 'index.html', 55 | inject: true, 56 | minify: { 57 | removeComments: true, 58 | collapseWhitespace: true, 59 | removeAttributeQuotes: true 60 | // more options: 61 | // https://github.com/kangax/html-minifier#options-quick-reference 62 | }, 63 | // necessary to consistently work with multiple chunks via CommonsChunkPlugin 64 | chunksSortMode: 'dependency' 65 | }), 66 | // keep module.id stable when vender modules does not change 67 | new webpack.HashedModuleIdsPlugin(), 68 | // split vendor js into its own file 69 | new webpack.optimize.CommonsChunkPlugin({ 70 | name: 'vendor', 71 | minChunks: function (module, count) { 72 | // any required modules inside node_modules are extracted to vendor 73 | return ( 74 | module.resource && 75 | /\.js$/.test(module.resource) && 76 | module.resource.indexOf( 77 | path.join(__dirname, '../node_modules') 78 | ) === 0 79 | ) 80 | } 81 | }), 82 | // extract webpack runtime and module manifest to its own file in order to 83 | // prevent vendor hash from being updated whenever app bundle is updated 84 | new webpack.optimize.CommonsChunkPlugin({ 85 | name: 'manifest', 86 | chunks: ['vendor'] 87 | }), 88 | // copy custom static assets 89 | new CopyWebpackPlugin([ 90 | { 91 | from: path.resolve(__dirname, '../static'), 92 | to: config.build.assetsSubDirectory, 93 | ignore: ['.*'] 94 | } 95 | ]) 96 | ] 97 | }) 98 | 99 | if (config.build.productionGzip) { 100 | var CompressionWebpackPlugin = require('compression-webpack-plugin') 101 | 102 | webpackConfig.plugins.push( 103 | new CompressionWebpackPlugin({ 104 | asset: '[path].gz[query]', 105 | algorithm: 'gzip', 106 | test: new RegExp( 107 | '\\.(' + 108 | config.build.productionGzipExtensions.join('|') + 109 | ')$' 110 | ), 111 | threshold: 10240, 112 | minRatio: 0.8 113 | }) 114 | ) 115 | } 116 | 117 | if (config.build.bundleAnalyzerReport) { 118 | var BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin 119 | webpackConfig.plugins.push(new BundleAnalyzerPlugin()) 120 | } 121 | 122 | module.exports = webpackConfig 123 | -------------------------------------------------------------------------------- /config/dev.env.js: -------------------------------------------------------------------------------- 1 | var merge = require('webpack-merge') 2 | var prodEnv = require('./prod.env') 3 | 4 | module.exports = merge(prodEnv, { 5 | NODE_ENV: '"development"' 6 | }) 7 | -------------------------------------------------------------------------------- /config/index.js: -------------------------------------------------------------------------------- 1 | // see http://vuejs-templates.github.io/webpack for documentation. 2 | var path = require('path') 3 | 4 | module.exports = { 5 | build: { 6 | env: require('./prod.env'), 7 | index: path.resolve(__dirname, '../dist/index.html'), 8 | assetsRoot: path.resolve(__dirname, '../dist'), 9 | assetsSubDirectory: 'static', 10 | assetsPublicPath: './', 11 | productionSourceMap: true, 12 | // Gzip off by default as many popular static hosts such as 13 | // Surge or Netlify already gzip all static assets for you. 14 | // Before setting to `true`, make sure to: 15 | // npm install --save-dev compression-webpack-plugin 16 | productionGzip: false, 17 | productionGzipExtensions: ['js', 'css'], 18 | // Run the build command with an extra argument to 19 | // View the bundle analyzer report after build finishes: 20 | // `npm run build --report` 21 | // Set to `true` or `false` to always turn it on or off 22 | bundleAnalyzerReport: process.env.npm_config_report 23 | }, 24 | dev: { 25 | env: require('./dev.env'), 26 | port: 8000, 27 | autoOpenBrowser: true, 28 | assetsSubDirectory: 'static', 29 | assetsPublicPath: '/', 30 | proxyTable: {}, 31 | // CSS Sourcemaps off by default because relative paths are "buggy" 32 | // with this option, according to the CSS-Loader README 33 | // (https://github.com/webpack/css-loader#sourcemaps) 34 | // In our experience, they generally work as expected, 35 | // just be aware of this issue when enabling this option. 36 | cssSourceMap: false 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /config/prod.env.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | NODE_ENV: '"production"' 3 | } 4 | -------------------------------------------------------------------------------- /dist/index.html: -------------------------------------------------------------------------------- 1 | vue-redbk
-------------------------------------------------------------------------------- /dist/static/img/1.4e27f60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wenqiii/vue-redbk/cb4e206cf26d4548e19da34a82bf97f005f00cbd/dist/static/img/1.4e27f60.png -------------------------------------------------------------------------------- /dist/static/img/2.c93e94e.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wenqiii/vue-redbk/cb4e206cf26d4548e19da34a82bf97f005f00cbd/dist/static/img/2.c93e94e.png -------------------------------------------------------------------------------- /dist/static/img/3.ae00594.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wenqiii/vue-redbk/cb4e206cf26d4548e19da34a82bf97f005f00cbd/dist/static/img/3.ae00594.png -------------------------------------------------------------------------------- /dist/static/img/4.58ab064.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wenqiii/vue-redbk/cb4e206cf26d4548e19da34a82bf97f005f00cbd/dist/static/img/4.58ab064.png -------------------------------------------------------------------------------- /dist/static/img/5.eeb4f97.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wenqiii/vue-redbk/cb4e206cf26d4548e19da34a82bf97f005f00cbd/dist/static/img/5.eeb4f97.png -------------------------------------------------------------------------------- /dist/static/img/a1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wenqiii/vue-redbk/cb4e206cf26d4548e19da34a82bf97f005f00cbd/dist/static/img/a1.png -------------------------------------------------------------------------------- /dist/static/img/a2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wenqiii/vue-redbk/cb4e206cf26d4548e19da34a82bf97f005f00cbd/dist/static/img/a2.png -------------------------------------------------------------------------------- /dist/static/img/a3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wenqiii/vue-redbk/cb4e206cf26d4548e19da34a82bf97f005f00cbd/dist/static/img/a3.png -------------------------------------------------------------------------------- /dist/static/img/a4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wenqiii/vue-redbk/cb4e206cf26d4548e19da34a82bf97f005f00cbd/dist/static/img/a4.png -------------------------------------------------------------------------------- /dist/static/img/b1.becf4cd.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wenqiii/vue-redbk/cb4e206cf26d4548e19da34a82bf97f005f00cbd/dist/static/img/b1.becf4cd.jpg -------------------------------------------------------------------------------- /dist/static/img/b2.271133f.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wenqiii/vue-redbk/cb4e206cf26d4548e19da34a82bf97f005f00cbd/dist/static/img/b2.271133f.jpg -------------------------------------------------------------------------------- /dist/static/img/b3.991e283.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wenqiii/vue-redbk/cb4e206cf26d4548e19da34a82bf97f005f00cbd/dist/static/img/b3.991e283.jpg -------------------------------------------------------------------------------- /dist/static/img/b4.41b1212.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wenqiii/vue-redbk/cb4e206cf26d4548e19da34a82bf97f005f00cbd/dist/static/img/b4.41b1212.jpg -------------------------------------------------------------------------------- /dist/static/img/br1.bcef8f3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wenqiii/vue-redbk/cb4e206cf26d4548e19da34a82bf97f005f00cbd/dist/static/img/br1.bcef8f3.png -------------------------------------------------------------------------------- /dist/static/img/c1.a877098.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wenqiii/vue-redbk/cb4e206cf26d4548e19da34a82bf97f005f00cbd/dist/static/img/c1.a877098.png -------------------------------------------------------------------------------- /dist/static/img/noattent.c3949aa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wenqiii/vue-redbk/cb4e206cf26d4548e19da34a82bf97f005f00cbd/dist/static/img/noattent.c3949aa.png -------------------------------------------------------------------------------- /dist/static/img/noitem.6339d49.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wenqiii/vue-redbk/cb4e206cf26d4548e19da34a82bf97f005f00cbd/dist/static/img/noitem.6339d49.png -------------------------------------------------------------------------------- /dist/static/img/search.8825b03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wenqiii/vue-redbk/cb4e206cf26d4548e19da34a82bf97f005f00cbd/dist/static/img/search.8825b03.png -------------------------------------------------------------------------------- /dist/static/js/flexible.js: -------------------------------------------------------------------------------- 1 | !function () { var a = "@charset \"utf-8\";html{color:#000;background:#fff;overflow-y:scroll;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}html *{outline:0;-webkit-text-size-adjust:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}html,body{font-family:sans-serif}body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td,hr,button,article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{margin:0;padding:0}input,select,textarea{font-size:100%}table{border-collapse:collapse;border-spacing:0}fieldset,img{border:0}abbr,acronym{border:0;font-variant:normal}del{text-decoration:line-through}address,caption,cite,code,dfn,em,th,var{font-style:normal;font-weight:500}ol,ul{list-style:none}caption,th{text-align:left}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:500}q:before,q:after{content:''}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}a:hover{text-decoration:underline}ins,a{text-decoration:none}", b = document.createElement("style"); if (document.getElementsByTagName("head")[0].appendChild(b), b.styleSheet) b.styleSheet.disabled || (b.styleSheet.cssText = a); else try { b.innerHTML = a } catch (c) { b.innerText = a } }(); !function (a, b) { function c() { var b = f.getBoundingClientRect().width; b / i > 540 && (b = 540 * i); var c = b / 10; f.style.fontSize = c + "px", k.rem = a.rem = c } var d, e = a.document, f = e.documentElement, g = e.querySelector('meta[name="viewport"]'), h = e.querySelector('meta[name="flexible"]'), i = 0, j = 0, k = b.flexible || (b.flexible = {}); if (g) { console.warn("灏嗘牴鎹凡鏈夌殑meta鏍囩鏉ヨ缃缉鏀炬瘮渚�"); var l = g.getAttribute("content").match(/initial\-scale=([\d\.]+)/); l && (j = parseFloat(l[1]), i = parseInt(1 / j)) } else if (h) { var m = h.getAttribute("content"); if (m) { var n = m.match(/initial\-dpr=([\d\.]+)/), o = m.match(/maximum\-dpr=([\d\.]+)/); n && (i = parseFloat(n[1]), j = parseFloat((1 / i).toFixed(2))), o && (i = parseFloat(o[1]), j = parseFloat((1 / i).toFixed(2))) } } if (!i && !j) { var p = (a.navigator.appVersion.match(/android/gi), a.navigator.appVersion.match(/iphone/gi)), q = a.devicePixelRatio; i = p ? q >= 3 && (!i || i >= 3) ? 3 : q >= 2 && (!i || i >= 2) ? 2 : 1 : 1, j = 1 / i } if (f.setAttribute("data-dpr", i), !g) if (g = e.createElement("meta"), g.setAttribute("name", "viewport"), g.setAttribute("content", "initial-scale=" + j + ", maximum-scale=" + j + ", minimum-scale=" + j + ", user-scalable=no"), f.firstElementChild) f.firstElementChild.appendChild(g); else { var r = e.createElement("div"); r.appendChild(g), e.write(r.innerHTML) } a.addEventListener("resize", function () { clearTimeout(d), d = setTimeout(c, 300) }, !1), a.addEventListener("pageshow", function (a) { a.persisted && (clearTimeout(d), d = setTimeout(c, 300)) }, !1), "complete" === e.readyState ? e.body.style.fontSize = 12 * i + "px" : e.addEventListener("DOMContentLoaded", function () { e.body.style.fontSize = 12 * i + "px" }, !1), c(), k.dpr = a.dpr = i, k.refreshRem = c, k.rem2px = function (a) { var b = parseFloat(a) * this.rem; return "string" == typeof a && a.match(/rem$/) && (b += "px"), b }, k.px2rem = function (a) { var b = parseFloat(a) / this.rem; return "string" == typeof a && a.match(/px$/) && (b += "rem"), b } }(window, window.lib || (window.lib = {})); -------------------------------------------------------------------------------- /dist/static/js/manifest.569965675b0ea94f23c3.js: -------------------------------------------------------------------------------- 1 | !function(e){function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}var r=window.webpackJsonp;window.webpackJsonp=function(t,c,a){for(var i,u,f,s=0,l=[];s 2 | 3 | 4 | 5 | 6 | vue-redbk 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /mintty.exe.stackdump: -------------------------------------------------------------------------------- 1 | Exception: STATUS_ACCESS_VIOLATION at rip=00000000000 2 | rax=0000000008681C50 rbx=000000000AF60BD0 rcx=00000000086401B8 3 | rdx=000007FEF953AD64 rsi=000000000ADDCE00 rdi=000000000ADDCBF8 4 | r8 =0000000000000000 r9 =FEEEFEEEFEEEFEEE r10=0000000003030158 5 | r11=00000000005E0AF0 r12=0000000000000000 r13=0000000000000000 6 | r14=0000000000000000 r15=0000000000000000 7 | rbp=000000000AF60BD0 rsp=000000000ADDCA58 8 | program=C:\Program Files\Git\usr\bin\mintty.exe, pid 6340, thread unknown (0x11EC) 9 | cs=0033 ds=002B es=002B fs=0053 gs=002B ss=002B 10 | Stack trace: 11 | Frame Function Args 12 | End of stack trace 13 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vue-redbk", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "dependencies": { 6 | "amfe-flexible": { 7 | "version": "2.2.1", 8 | "resolved": "https://registry.npmjs.org/amfe-flexible/-/amfe-flexible-2.2.1.tgz", 9 | "integrity": "sha1-NT8AKJ5NOMqIoh6zhUQgMIrwtVk=" 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vue-redbk", 3 | "version": "1.0.0", 4 | "description": "A Vue.js project", 5 | "author": "", 6 | "private": true, 7 | "scripts": { 8 | "dev": "node build/dev-server.js", 9 | "start": "node build/dev-server.js", 10 | "build": "node build/build.js", 11 | "server": "json-server src/common/disgoods.json", 12 | "serverdev": "npm run server & npm run dev " 13 | }, 14 | "dependencies": { 15 | "amfe-flexible": "^2.2.1", 16 | "axios": "^0.16.2", 17 | "better-scroll": "^1.3.1", 18 | "mint-ui": "^2.2.9", 19 | "stylus": "^0.54.5", 20 | "stylus-loader": "^3.0.1", 21 | "vue": "^2.4.2", 22 | "vue-awesome-swiper": "^2.6.4", 23 | "vue-axios": "^2.0.2", 24 | "vue-router": "^2.7.0", 25 | "vue-touch": "next", 26 | "vuex": "^2.4.0" 27 | }, 28 | "devDependencies": { 29 | "autoprefixer": "^7.1.2", 30 | "babel-core": "^6.22.1", 31 | "babel-loader": "^7.1.1", 32 | "babel-plugin-transform-runtime": "^6.22.0", 33 | "babel-preset-env": "^1.3.2", 34 | "babel-preset-stage-2": "^6.22.0", 35 | "babel-register": "^6.22.0", 36 | "chalk": "^2.0.1", 37 | "connect-history-api-fallback": "^1.3.0", 38 | "copy-webpack-plugin": "^4.0.1", 39 | "css-loader": "^0.28.0", 40 | "cssnano": "^3.10.0", 41 | "eventsource-polyfill": "^0.9.6", 42 | "express": "^4.14.1", 43 | "extract-text-webpack-plugin": "^2.0.0", 44 | "file-loader": "^0.11.1", 45 | "friendly-errors-webpack-plugin": "^1.1.3", 46 | "html-webpack-plugin": "^2.28.0", 47 | "http-proxy-middleware": "^0.17.3", 48 | "opn": "^5.1.0", 49 | "optimize-css-assets-webpack-plugin": "^2.0.0", 50 | "ora": "^1.2.0", 51 | "rimraf": "^2.6.0", 52 | "semver": "^5.3.0", 53 | "shelljs": "^0.7.6", 54 | "url-loader": "^0.5.8", 55 | "vue-loader": "^13.0.4", 56 | "vue-style-loader": "^3.0.1", 57 | "vue-template-compiler": "^2.4.2", 58 | "webpack": "^2.6.1", 59 | "webpack-bundle-analyzer": "^2.2.1", 60 | "webpack-dev-middleware": "^1.10.0", 61 | "webpack-hot-middleware": "^2.18.0", 62 | "webpack-merge": "^4.1.0" 63 | }, 64 | "engines": { 65 | "node": ">= 4.0.0", 66 | "npm": ">= 3.0.0" 67 | }, 68 | "browserslist": [ 69 | "> 1%", 70 | "last 2 versions", 71 | "not ie <= 8" 72 | ] 73 | } 74 | -------------------------------------------------------------------------------- /src/App.vue: -------------------------------------------------------------------------------- 1 | 12 | 54 | 59 | -------------------------------------------------------------------------------- /src/assets/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wenqiii/vue-redbk/cb4e206cf26d4548e19da34a82bf97f005f00cbd/src/assets/1.png -------------------------------------------------------------------------------- /src/assets/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wenqiii/vue-redbk/cb4e206cf26d4548e19da34a82bf97f005f00cbd/src/assets/2.png -------------------------------------------------------------------------------- /src/assets/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wenqiii/vue-redbk/cb4e206cf26d4548e19da34a82bf97f005f00cbd/src/assets/3.png -------------------------------------------------------------------------------- /src/assets/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wenqiii/vue-redbk/cb4e206cf26d4548e19da34a82bf97f005f00cbd/src/assets/4.png -------------------------------------------------------------------------------- /src/assets/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wenqiii/vue-redbk/cb4e206cf26d4548e19da34a82bf97f005f00cbd/src/assets/5.png -------------------------------------------------------------------------------- /src/assets/b1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wenqiii/vue-redbk/cb4e206cf26d4548e19da34a82bf97f005f00cbd/src/assets/b1.jpg -------------------------------------------------------------------------------- /src/assets/b2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wenqiii/vue-redbk/cb4e206cf26d4548e19da34a82bf97f005f00cbd/src/assets/b2.jpg -------------------------------------------------------------------------------- /src/assets/b3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wenqiii/vue-redbk/cb4e206cf26d4548e19da34a82bf97f005f00cbd/src/assets/b3.jpg -------------------------------------------------------------------------------- /src/assets/b4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wenqiii/vue-redbk/cb4e206cf26d4548e19da34a82bf97f005f00cbd/src/assets/b4.jpg -------------------------------------------------------------------------------- /src/assets/br1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wenqiii/vue-redbk/cb4e206cf26d4548e19da34a82bf97f005f00cbd/src/assets/br1.png -------------------------------------------------------------------------------- /src/assets/br2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wenqiii/vue-redbk/cb4e206cf26d4548e19da34a82bf97f005f00cbd/src/assets/br2.png -------------------------------------------------------------------------------- /src/assets/br3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wenqiii/vue-redbk/cb4e206cf26d4548e19da34a82bf97f005f00cbd/src/assets/br3.png -------------------------------------------------------------------------------- /src/assets/c1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wenqiii/vue-redbk/cb4e206cf26d4548e19da34a82bf97f005f00cbd/src/assets/c1.png -------------------------------------------------------------------------------- /src/assets/camera.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wenqiii/vue-redbk/cb4e206cf26d4548e19da34a82bf97f005f00cbd/src/assets/camera.png -------------------------------------------------------------------------------- /src/assets/close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wenqiii/vue-redbk/cb4e206cf26d4548e19da34a82bf97f005f00cbd/src/assets/close.png -------------------------------------------------------------------------------- /src/assets/delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wenqiii/vue-redbk/cb4e206cf26d4548e19da34a82bf97f005f00cbd/src/assets/delete.png -------------------------------------------------------------------------------- /src/assets/g1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wenqiii/vue-redbk/cb4e206cf26d4548e19da34a82bf97f005f00cbd/src/assets/g1.png -------------------------------------------------------------------------------- /src/assets/g2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wenqiii/vue-redbk/cb4e206cf26d4548e19da34a82bf97f005f00cbd/src/assets/g2.png -------------------------------------------------------------------------------- /src/assets/icon1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wenqiii/vue-redbk/cb4e206cf26d4548e19da34a82bf97f005f00cbd/src/assets/icon1.png -------------------------------------------------------------------------------- /src/assets/icon2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wenqiii/vue-redbk/cb4e206cf26d4548e19da34a82bf97f005f00cbd/src/assets/icon2.png -------------------------------------------------------------------------------- /src/assets/icon3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wenqiii/vue-redbk/cb4e206cf26d4548e19da34a82bf97f005f00cbd/src/assets/icon3.png -------------------------------------------------------------------------------- /src/assets/icon4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wenqiii/vue-redbk/cb4e206cf26d4548e19da34a82bf97f005f00cbd/src/assets/icon4.png -------------------------------------------------------------------------------- /src/assets/icon5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wenqiii/vue-redbk/cb4e206cf26d4548e19da34a82bf97f005f00cbd/src/assets/icon5.png -------------------------------------------------------------------------------- /src/assets/icon6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wenqiii/vue-redbk/cb4e206cf26d4548e19da34a82bf97f005f00cbd/src/assets/icon6.png -------------------------------------------------------------------------------- /src/assets/icon7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wenqiii/vue-redbk/cb4e206cf26d4548e19da34a82bf97f005f00cbd/src/assets/icon7.png -------------------------------------------------------------------------------- /src/assets/icon8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wenqiii/vue-redbk/cb4e206cf26d4548e19da34a82bf97f005f00cbd/src/assets/icon8.png -------------------------------------------------------------------------------- /src/assets/icon9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wenqiii/vue-redbk/cb4e206cf26d4548e19da34a82bf97f005f00cbd/src/assets/icon9.png -------------------------------------------------------------------------------- /src/assets/l-arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wenqiii/vue-redbk/cb4e206cf26d4548e19da34a82bf97f005f00cbd/src/assets/l-arrow.png -------------------------------------------------------------------------------- /src/assets/left-arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wenqiii/vue-redbk/cb4e206cf26d4548e19da34a82bf97f005f00cbd/src/assets/left-arrow.png -------------------------------------------------------------------------------- /src/assets/like.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wenqiii/vue-redbk/cb4e206cf26d4548e19da34a82bf97f005f00cbd/src/assets/like.png -------------------------------------------------------------------------------- /src/assets/look.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wenqiii/vue-redbk/cb4e206cf26d4548e19da34a82bf97f005f00cbd/src/assets/look.png -------------------------------------------------------------------------------- /src/assets/news.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wenqiii/vue-redbk/cb4e206cf26d4548e19da34a82bf97f005f00cbd/src/assets/news.png -------------------------------------------------------------------------------- /src/assets/noattent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wenqiii/vue-redbk/cb4e206cf26d4548e19da34a82bf97f005f00cbd/src/assets/noattent.png -------------------------------------------------------------------------------- /src/assets/noitem.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wenqiii/vue-redbk/cb4e206cf26d4548e19da34a82bf97f005f00cbd/src/assets/noitem.png -------------------------------------------------------------------------------- /src/assets/option.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wenqiii/vue-redbk/cb4e206cf26d4548e19da34a82bf97f005f00cbd/src/assets/option.png -------------------------------------------------------------------------------- /src/assets/s1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wenqiii/vue-redbk/cb4e206cf26d4548e19da34a82bf97f005f00cbd/src/assets/s1.png -------------------------------------------------------------------------------- /src/assets/s2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wenqiii/vue-redbk/cb4e206cf26d4548e19da34a82bf97f005f00cbd/src/assets/s2.png -------------------------------------------------------------------------------- /src/assets/s3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wenqiii/vue-redbk/cb4e206cf26d4548e19da34a82bf97f005f00cbd/src/assets/s3.png -------------------------------------------------------------------------------- /src/assets/search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wenqiii/vue-redbk/cb4e206cf26d4548e19da34a82bf97f005f00cbd/src/assets/search.png -------------------------------------------------------------------------------- /src/assets/tick.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wenqiii/vue-redbk/cb4e206cf26d4548e19da34a82bf97f005f00cbd/src/assets/tick.png -------------------------------------------------------------------------------- /src/assets/transmit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wenqiii/vue-redbk/cb4e206cf26d4548e19da34a82bf97f005f00cbd/src/assets/transmit.png -------------------------------------------------------------------------------- /src/assets/wm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wenqiii/vue-redbk/cb4e206cf26d4548e19da34a82bf97f005f00cbd/src/assets/wm.png -------------------------------------------------------------------------------- /src/common/disgoods.json: -------------------------------------------------------------------------------- 1 | { 2 | "discoveryList": [ 3 | { 4 | "id": 1, 5 | "img": "http://ci.xiaohongshu.com/24a0d600-e2c1-4421-a912-907fb433e56c@r_240w_240h.jpg", 6 | "desc": "从英国到南非转机迪拜 坐了十几个小时终于到达了南非首都开普敦👀 虽然说是南半球 此刻应该是秋季 但这里的太阳真的很晒 防晒是千万要准备好的 不过有的时候晚上早上会有点凉 春秋来的也得带外套~ 开普角上也有灯塔 因为这里的山比好望角的更高 所以个人觉得这里看景比好望角更加美 到了开普角公园这里坐车上去只要三五分钟 步行的话20分钟 怕晒的话建议坐车 也很实惠65兰特 好望角也是看海啦 总的来说一天都是看海看山 个人觉得这里的海浪相比罗卡角来说汹涌得多 怪不得之前又名风暴角 现在寓意是美好希望的海角 英文是Cape of Good Hope 在非洲大陆的最南端 还是很有意义的💙 开普敦很多餐厅味道还是不错的 基本都没踩雷随便找着吃 市中心高楼大厦也不少逛街的地方也很多 不过感觉并没有什么可逛可买的…感觉还是自然景观更值得一去啦 有人说南非这个地方不是特别安全 大部分人确实都很友善 但今天有朋友碰到劫匪还支枪…所以真的还是要奉劝各位安全问题 一定要人多出行注意自己的财产和人身安全 关于穿搭🌹墨镜配的是prada 感觉这个不挑脸型 带着感觉酷酷的 鞋子也是prada的松糕鞋 裙子是英国lipsy家的 它家的衣服小裙子都很平价 一般一百磅都不到就可以买到 买来随便旅游穿穿还是挺舒服的 另外配了条choker 感觉国内好看的choker更多哈哈 然后还有定草帽也是英国买的 感觉tb上有很多差不多的~出来旅游舒适第一 这样简单穿就感觉很舒服 我知道会很累所以特地没有穿精致一点的裙子 毕竟南非风也还是挺大的~ #南非[地区]##开普敦[地区]##最爱旅行地[话题]##每日穿搭[话题]##豪华精选[品牌]##带着小红书去旅行[话题]##假装在旅行[话题]##非洲[地区]##170cm女生穿搭[话题]##我的小众旅行攻略[话题]#", 7 | "comment": 23, 8 | "like": 23, 9 | "collect": 20, 10 | "uname": "Y***i", 11 | "avator": "http://img.xiaohongshu.com/avatar/58f34bab02f37d35212dd9d7.jpg@120w_120h_92q_1e_1c_1x.jpg?wm=160&hm=160&q=92", 12 | "price": "", 13 | "adress": "Boulders Beach", 14 | "time": "04-04", 15 | "imgs": [ 16 | "http://ci.xiaohongshu.com/24a0d600-e2c1-4421-a912-907fb433e56c@r_1280w_1280h.jpg", 17 | "http://ci.xiaohongshu.com/e9fa96f3-4d9d-465b-812e-e6a1e9a9a13e@r_1280w_1280h.jpg", 18 | "http://ci.xiaohongshu.com/0e3d1791-aa0d-40c7-87ef-c944bf2093dc@r_1280w_1280h.jpg", 19 | "http://ci.xiaohongshu.com/df3b49fe-2a65-4ddd-b328-15a6d1053a2d@r_1280w_1280h.jpg", 20 | "http://ci.xiaohongshu.com/f3090b88-5991-49ec-bed3-343a0b9e7d15@r_1280w_1280h.jpg", 21 | "http://ci.xiaohongshu.com/f3090b88-5991-49ec-bed3-343a0b9e7d15@r_1280w_1280h.jpg", 22 | "http://ci.xiaohongshu.com/0a404216-7932-458d-a31e-063073257241@r_1280w_1280h.jpg", 23 | "http://ci.xiaohongshu.com/8fa93957-cfe4-4d71-9c62-17fa0dcb73f3@r_1280w_1280h.jpg" 24 | ], 25 | "comments": [ 26 | { 27 | "id": 1, 28 | "cname": "C***衣", 29 | "cavator": "http://img.xiaohongshu.com/avatar/530b3c2eb4c4d6117bf5b3f5.jpg@120w_120h_92q_1e_1c_1x.jpg?wm=80&hm=80&q=92", 30 | "ctext": "你一定是hrd的妹子", 31 | "ctime": "2017-04-05 11:04" 32 | }, 33 | { 34 | "id": 2, 35 | "cname": "W**n", 36 | "cavator": "http://img.xiaohongshu.com/avatar/58ee77475e87e71031e8a547.jpg@120w_120h_92q_1e_1c_1x.jpg?wm=80&hm=80&q=92", 37 | "ctext": "我就在南非,我也去过了,但没有你拍的好看,风景", 38 | "ctime": "2017-04-14 06:16" 39 | }, 40 | { 41 | "id": 3, 42 | "cname": "小***巴", 43 | "cavator": "http://img.xiaohongshu.com/avatar/58169ec1e9521a0b6bccbaf4.jpg@120w_120h_92q_1e_1c_1x.jpg?wm=80&hm=80&q=92", 44 | "ctext": "中国8月的话南非是冬天了吗", 45 | "ctime": "2017-04-15 16:23" 46 | }, 47 | { 48 | "id": 4, 49 | "cname": "0**0", 50 | "cavator": "http://img.xiaohongshu.com/avatar/55a4a8ccb4c4d63783567192.jpg@120w_120h_92q_1e_1c_1x.jpg?wm=80&hm=80&q=92", 51 | "ctext": "是的哈哈 我去的时候是秋天啦", 52 | "ctime": "2017-04-19 12:54" 53 | } 54 | ] 55 | }, 56 | { 57 | "id": 2, 58 | "img": "https://o4.xiaohongshu.com/discovery/w240/f53999a6c917c852a2d1b8c824486a33_240_240_92.jpg", 59 | "desc": "👀炒鸡好用的睫毛膏推荐👀 🍃 这个也是丝芙兰的赠品……很精致,一个睫毛打底(精华),一个睫毛膏 ,不过打底精华不知道被我丢哪去了…… 🍃 因为我平时也不怎么样,不…是不用睫毛膏,所以这个赠品是去年圣诞送的😂😂😂拖到现在 🍃 什么乱七八糟的介绍也不说了,涂完效果我就震惊了…很浓密…很长! 我给室友看,室友说,你睫毛能涂这么长,那是效果蛮好的[好冷][好冷] 🍃 所以现在每天都在涂睫毛膏😂😂 用完就去买新的[嘿嘿][嘿嘿]而且一天下来也不会花妆,也灰常好卸 🍃 一个睫毛膏这样算是好用了的,对吧 对吧??? 🍃 💐Weibo:_寒静酱_ 🍃ins :liuhanjing 🌻🌻🌻🌻🌻🌻🌻感谢关注🌻🌻🌻🌻🌻🌻🌻", 60 | "comment": 14, 61 | "like": 202, 62 | "collect": 180, 63 | "uname": "_***_", 64 | "avator": "http://img.xiaohongshu.com/avatar/59a19d38b46c5d74002f31cf.jpg@120w_120h_92q_1e_1c_1x.jpg?wm=160&hm=160&q=92", 65 | "price": "", 66 | "adress": "", 67 | "time": "01-04", 68 | "imgs": [ 69 | "http://o4.xiaohongshu.com/discovery/w640/f53999a6c917c852a2d1b8c824486a33_640_640_92.jpg", 70 | "http://o4.xiaohongshu.com/discovery/w640/df6b2f7dcf731dd80a8b8bc62d59d19e_640_640_92.jpg", 71 | "http://o4.xiaohongshu.com/discovery/w640/c0f9dfa192a28e27ba16e7a116a59d21_640_640_92.jpg", 72 | "http://o4.xiaohongshu.com/discovery/w640/80ef601f74c5b78021d46620646803a8_640_640_92.jpg", 73 | "http://o4.xiaohongshu.com/discovery/w640/0e8ca48d1171ddc38a4ee91c725abfbd_640_640_92.jpg" 74 | ], 75 | "comments": [ 76 | { 77 | "id": 1, 78 | "cname": "天*牙", 79 | "cavator": "http://img.xiaohongshu.com/avatar/57441c9902f37d7f161640d6.jpg@120w_120h_92q_1e_1c_1x.jpg?wm=80&hm=80&q=92", 80 | "ctext": "沙发!赠品狂魔啊简直", 81 | "ctime": "2016-01-04 01:56" 82 | }, 83 | { 84 | "id": 2, 85 | "cname": "_***_", 86 | "cavator": "http://img.xiaohongshu.com/avatar/59a19d38b46c5d74002f31cf.jpg@120w_120h_92q_1e_1c_1x.jpg?wm=80&hm=80&q=92", 87 | "ctext": "@天才牙", 88 | "ctime": "2016-01-04 02:05" 89 | }, 90 | { 91 | "id": 3, 92 | "cname": "大*周", 93 | "cavator": "http://img.xiaohongshu.com/avatar/56dea6b3d8601e21a025fb89.jpg@120w_120h_92q_1e_1c_1x.jpg?wm=80&hm=80&q=92", 94 | "ctext": "这个赠品好有爱 哈哈哈", 95 | "ctime": "2016-01-04 02:12" 96 | }, 97 | { 98 | "id": 4, 99 | "cname": "I**N", 100 | "cavator": "http://img.xiaohongshu.com/avatar/5742858fd8601e6bb0b54c28.jpg@120w_120h_92q_1e_1c_1x.jpg?wm=80&hm=80&q=92", 101 | "ctext": "這個防水抗暈嗎", 102 | "ctime": "2016-01-04 02:48" 103 | } 104 | ] 105 | }, 106 | { 107 | "id": 3, 108 | "img": "http://ci.xiaohongshu.com/ba998166-c869-4030-a010-d0101ac3fd61@r_240w_240h.jpg", 109 | "desc": "不知道员工们有没有玩过一款叫做《我的世界》的像素风格游戏。。据说在中小学生中特别火爆。每年还会有很多", 110 | "comment": 3, 111 | "like": 22, 112 | "collect": 9, 113 | "uname": "黑**评", 114 | "avator": "http://img.xiaohongshu.com/avatar/58ef44be02f37d3a86a247bc.jpg@120w_120h_92q_1e_1c_1x.jpg?wm=160&hm=160&q=92", 115 | "price": "", 116 | "adress": "", 117 | "time": "04-19", 118 | "imgs": [ 119 | "http://ci.xiaohongshu.com/ba998166-c869-4030-a010-d0101ac3fd61@r_1280w_1280h.jpg" 120 | ], 121 | "comments": [ 122 | { 123 | "id": 1, 124 | "cname": "杰*", 125 | "cavator": "http://img.xiaohongshu.com/avatar/5962e5c2805d89286a86c1f2.jpg@120w_120h_92q_1e_1c_1x.jpg?wm=80&hm=80&q=92", 126 | "ctext": "封面图100分[活力]", 127 | "ctime": "2017-04-20 11:10" 128 | }, 129 | { 130 | "id": 2, 131 | "cname": "A***斗", 132 | "cavator": "http://img.xiaohongshu.com/avatar/591568b0d1d3b9692e415ef3.jpg@120w_120h_92q_1e_1c_1x.jpg?wm=80&hm=80&q=92", 133 | "ctext": "打破次元壁哎", 134 | "ctime": "2017-04-20 11:53" 135 | }, 136 | { 137 | "id": 3, 138 | "cname": "黑**评", 139 | "cavator": "http://img.xiaohongshu.com/avatar/58ef44be02f37d3a86a247bc.jpg@120w_120h_92q_1e_1c_1x.jpg?wm=80&hm=80&q=92", 140 | "ctext": "[吧唧R]哈哈哈,你喜欢就好。 @杰米", 141 | "ctime": "2017-04-21 17:38" 142 | } 143 | ] 144 | }, 145 | { 146 | "id": 4, 147 | "img": "http://ci.xiaohongshu.com/32516b09-e1e8-4343-a093-9c6e7c6fd570@r_240w_240h.jpg", 148 | "desc": "#最美旅行照大赛[话题]# 大家好我是一个胜似金牛座的狮子座 下定决心要码一篇澳洲游的总(sheng)结(qian)笔记 8日澳洲 三个城市 悉尼-黄金海岸-布里斯班 推荐几个去Woolworth必买的! 1、乳制品! 羊背上的国家(牛也不少)所以牛奶啥的比纯净水还便宜(貌似澳洲的淡水资源比较少)最夸张的是1L的桶装牛奶只要2澳元-4澳元,一个又爱省钱又爱喝奶的人看到这样的物价简直要哭出来了!简直想随手拎一桶吨吨吨地吹! 还有一款Ski酸奶我觉得要甩优诺32条街的!八罐装的,我大概一天可以喝掉一板 2、烤鸡吧! 一整只Woolworth自制烤鸡只要7刀!!我一看到烤(jia)鸡(ge)双目就再也无法离开了,总以为标签漏了十位数还是咋的。。。而且关键是口感不输国内的很多人均100以上西餐厅里的烤鸡! 3、水果 水果都超新鲜的!特别需要一提的是西瓜!!只要一点几刀每KG 4、Tim Tam 这个大家都说好吃,我觉得他的包装设计如果换成每一根独立包装就完美了,因为我其实吃一根就觉得腻了。。。 5、Smith's薯片 👗part 7 购物 强烈推荐一家化妆品购物的好去处 Princeline sister club我来给个翻译就是'尼玛!贼便宜的姐妹们的俱乐部' 在悉尼天空之眼底下的那个购物商场的三楼有个分店,逛了好多药妆店之后发现这里几乎是最低价了,而且常见的产品都可以覆盖到 就举两个例子: Lucas木瓜膏(正常size)4刀20RMB Black Mores面霜7刀35RMB 有关退税:单张收银条满300澳元可以在机场退10%的税 👻part 8景点门票: 🏃🏂在悉尼的时候走了一条徒步线路: 环形港☞悉尼歌剧院☞皇家植物园☞NSW Art Museum☞天空之眼☞QVB购物中心☞情人港 (因为市中心的景点密集,走走就到了) 🗽🗿景点千万别现场买,在蚂蜂窝上有很多套票大概会便宜50%左右", 149 | "comment": 54, 150 | "like": 365, 151 | "collect": 240, 152 | "uname": "陈**", 153 | "avator": "http://img.xiaohongshu.com/avatar/5969a5c9b46c5d38c9deb605.jpg@120w_120h_92q_1e_1c_1x.jpg?wm=160&hm=160&q=92", 154 | "price": "", 155 | "adress": "", 156 | "time": "03-24", 157 | "imgs": [ 158 | "http://ci.xiaohongshu.com/32516b09-e1e8-4343-a093-9c6e7c6fd570@r_1280w_1280h.jpg", 159 | "http://ci.xiaohongshu.com/723cc974-dc6e-4d67-9789-31b5504d73fd@r_1280w_1280h.jpg", 160 | "http://ci.xiaohongshu.com/bef8399a-fc46-470a-9229-a2c830df8a55@r_1280w_1280h.jpg", 161 | "http://ci.xiaohongshu.com/1775e05d-1699-48d3-b7a1-3dcb1a8a3c75@r_1280w_1280h.jpg", 162 | "http://ci.xiaohongshu.com/07047a80-2a18-4b30-9d69-4dbc46af7de6@r_1280w_1280h.jpg", 163 | "http://ci.xiaohongshu.com/2a731840-b7ff-4982-874c-03b363b6de3e@r_1280w_1280h.jpg", 164 | "http://ci.xiaohongshu.com/5d949515-3ab1-45b1-b98e-2a68bab72746@r_1280w_1280h.jpg", 165 | "http://ci.xiaohongshu.com/afbbb076-7366-4559-86e8-0e2f35b58e0a@r_1280w_1280h.jpg", 166 | "http://ci.xiaohongshu.com/af0e1255-5931-4745-a946-8a577a01929f@r_1280w_1280h.jpg" 167 | ], 168 | "comments": [ 169 | { 170 | "id": 1, 171 | "cname": "k**i", 172 | "cavator": "http://img.xiaohongshu.com/avatar/59428e4db46c5d7c4548a13b.jpg@120w_120h_92q_1e_1c_1x.jpg?wm=80&hm=80&q=92", 173 | "ctext": "美哭[喜欢][喜欢][喜欢]", 174 | "ctime": "2017-03-24 23:05" 175 | }, 176 | { 177 | "id": 2, 178 | "cname": "陈**", 179 | "cavator": "http://img.xiaohongshu.com/avatar/5969a5c9b46c5d38c9deb605.jpg@120w_120h_92q_1e_1c_1x.jpg?wm=80&hm=80&q=92", 180 | "ctext": "[飞吻R][飞吻R]谢谢kiwi小仙女 @Kiwi", 181 | "ctime": "2017-03-24 23:07" 182 | }, 183 | { 184 | "id": 3, 185 | "cname": "E**_", 186 | "cavator": "http://img.xiaohongshu.com/avatar/5815d9a102f37d54d85a03fd.jpg@120w_120h_92q_1e_1c_1x.jpg?wm=80&hm=80&q=92", 187 | "ctext": "哈哈哈哈快帮自己", 188 | "ctime": "2017-03-24 23:25" 189 | }, 190 | { 191 | "id": 4, 192 | "cname": "陈**", 193 | "cavator": "http://img.xiaohongshu.com/avatar/5969a5c9b46c5d38c9deb605.jpg@120w_120h_92q_1e_1c_1x.jpg?wm=80&hm=80&q=92", 194 | "ctext": "必须的[得意R][得意R]", 195 | "ctime": "2017-03-24 23:28" 196 | } 197 | ] 198 | }, 199 | { 200 | "id": 5, 201 | "img": "http://ci.xiaohongshu.com/24a0d600-e2c1-4421-a912-907fb433e56c@r_240w_240h.jpg", 202 | "desc": "从英国到南非转机迪拜 坐了十几个小时终于到达了南非首都开普敦👀 虽然说是南半球 此刻应该是秋季 但这里的太阳真的很晒 防晒是千万要准备好的 不过有的时候晚上早上会有点凉 春秋来的也得带外套~ 开普角上也有灯塔 因为这里的山比好望角的更高 所以个人觉得这里看景比好望角更加美 到了开普角公园这里坐车上去只要三五分钟 步行的话20分钟 怕晒的话建议坐车 也很实惠65兰特 好望角也是看海啦 总的来说一天都是看海看山 个人觉得这里的海浪相比罗卡角来说汹涌得多 怪不得之前又名风暴角 现在寓意是美好希望的海角 英文是Cape of Good Hope 在非洲大陆的最南端 还是很有意义的💙 开普敦很多餐厅味道还是不错的 基本都没踩雷随便找着吃 市中心高楼大厦也不少逛街的地方也很多 不过感觉并没有什么可逛可买的…感觉还是自然景观更值得一去啦 有人说南非这个地方不是特别安全 大部分人确实都很友善 但今天有朋友碰到劫匪还支枪…所以真的还是要奉劝各位安全问题 一定要人多出行注意自己的财产和人身安全 关于穿搭🌹墨镜配的是prada 感觉这个不挑脸型 带着感觉酷酷的 鞋子也是prada的松糕鞋 裙子是英国lipsy家的 它家的衣服小裙子都很平价 一般一百磅都不到就可以买到 买来随便旅游穿穿还是挺舒服的 另外配了条choker 感觉国内好看的choker更多哈哈 然后还有定草帽也是英国买的 感觉tb上有很多差不多的~出来旅游舒适第一 这样简单穿就感觉很舒服 我知道会很累所以特地没有穿精致一点的裙子 毕竟南非风也还是挺大的~ #南非[地区]##开普敦[地区]##最爱旅行地[话题]##每日穿搭[话题]##豪华精选[品牌]##带着小红书去旅行[话题]##假装在旅行[话题]##非洲[地区]##170cm女生穿搭[话题]##我的小众旅行攻略[话题]#", 203 | "comment": 23, 204 | "like": 23, 205 | "collect": 20, 206 | "uname": "Y***i", 207 | "avator": "http://img.xiaohongshu.com/avatar/58f34bab02f37d35212dd9d7.jpg@120w_120h_92q_1e_1c_1x.jpg?wm=160&hm=160&q=92", 208 | "price": "", 209 | "adress": "Boulders Beach", 210 | "time": "04-04", 211 | "imgs": [ 212 | "http://ci.xiaohongshu.com/24a0d600-e2c1-4421-a912-907fb433e56c@r_1280w_1280h.jpg", 213 | "http://ci.xiaohongshu.com/e9fa96f3-4d9d-465b-812e-e6a1e9a9a13e@r_1280w_1280h.jpg", 214 | "http://ci.xiaohongshu.com/0e3d1791-aa0d-40c7-87ef-c944bf2093dc@r_1280w_1280h.jpg", 215 | "http://ci.xiaohongshu.com/df3b49fe-2a65-4ddd-b328-15a6d1053a2d@r_1280w_1280h.jpg", 216 | "http://ci.xiaohongshu.com/f3090b88-5991-49ec-bed3-343a0b9e7d15@r_1280w_1280h.jpg", 217 | "http://ci.xiaohongshu.com/f3090b88-5991-49ec-bed3-343a0b9e7d15@r_1280w_1280h.jpg", 218 | "http://ci.xiaohongshu.com/0a404216-7932-458d-a31e-063073257241@r_1280w_1280h.jpg", 219 | "http://ci.xiaohongshu.com/8fa93957-cfe4-4d71-9c62-17fa0dcb73f3@r_1280w_1280h.jpg" 220 | ], 221 | "comments": [ 222 | { 223 | "id": 1, 224 | "cname": "C***衣", 225 | "cavator": "http://img.xiaohongshu.com/avatar/530b3c2eb4c4d6117bf5b3f5.jpg@120w_120h_92q_1e_1c_1x.jpg?wm=80&hm=80&q=92", 226 | "ctext": "你一定是hrd的妹子", 227 | "ctime": "2017-04-05 11:04" 228 | }, 229 | { 230 | "id": 2, 231 | "cname": "W**n", 232 | "cavator": "http://img.xiaohongshu.com/avatar/58ee77475e87e71031e8a547.jpg@120w_120h_92q_1e_1c_1x.jpg?wm=80&hm=80&q=92", 233 | "ctext": "我就在南非,我也去过了,但没有你拍的好看,风景", 234 | "ctime": "2017-04-14 06:16" 235 | }, 236 | { 237 | "id": 3, 238 | "cname": "小***巴", 239 | "cavator": "http://img.xiaohongshu.com/avatar/58169ec1e9521a0b6bccbaf4.jpg@120w_120h_92q_1e_1c_1x.jpg?wm=80&hm=80&q=92", 240 | "ctext": "中国8月的话南非是冬天了吗", 241 | "ctime": "2017-04-15 16:23" 242 | }, 243 | { 244 | "id": 4, 245 | "cname": "0**0", 246 | "cavator": "http://img.xiaohongshu.com/avatar/55a4a8ccb4c4d63783567192.jpg@120w_120h_92q_1e_1c_1x.jpg?wm=80&hm=80&q=92", 247 | "ctext": "是的哈哈 我去的时候是秋天啦", 248 | "ctime": "2017-04-19 12:54" 249 | } 250 | ] 251 | }, 252 | { 253 | "id": 6, 254 | "img": "https://o4.xiaohongshu.com/discovery/w240/f53999a6c917c852a2d1b8c824486a33_240_240_92.jpg", 255 | "desc": "👀炒鸡好用的睫毛膏推荐👀 🍃 这个也是丝芙兰的赠品……很精致,一个睫毛打底(精华),一个睫毛膏 ,不过打底精华不知道被我丢哪去了…… 🍃 因为我平时也不怎么样,不…是不用睫毛膏,所以这个赠品是去年圣诞送的😂😂😂拖到现在 🍃 什么乱七八糟的介绍也不说了,涂完效果我就震惊了…很浓密…很长! 我给室友看,室友说,你睫毛能涂这么长,那是效果蛮好的[好冷][好冷] 🍃 所以现在每天都在涂睫毛膏😂😂 用完就去买新的[嘿嘿][嘿嘿]而且一天下来也不会花妆,也灰常好卸 🍃 一个睫毛膏这样算是好用了的,对吧 对吧??? 🍃 💐Weibo:_寒静酱_ 🍃ins :liuhanjing 🌻🌻🌻🌻🌻🌻🌻感谢关注🌻🌻🌻🌻🌻🌻🌻", 256 | "comment": 14, 257 | "like": 202, 258 | "collect": 180, 259 | "uname": "_***_", 260 | "avator": "http://img.xiaohongshu.com/avatar/59a19d38b46c5d74002f31cf.jpg@120w_120h_92q_1e_1c_1x.jpg?wm=160&hm=160&q=92", 261 | "price": "", 262 | "adress": "", 263 | "time": "01-04", 264 | "imgs": [ 265 | "http://o4.xiaohongshu.com/discovery/w640/f53999a6c917c852a2d1b8c824486a33_640_640_92.jpg", 266 | "http://o4.xiaohongshu.com/discovery/w640/df6b2f7dcf731dd80a8b8bc62d59d19e_640_640_92.jpg", 267 | "http://o4.xiaohongshu.com/discovery/w640/c0f9dfa192a28e27ba16e7a116a59d21_640_640_92.jpg", 268 | "http://o4.xiaohongshu.com/discovery/w640/80ef601f74c5b78021d46620646803a8_640_640_92.jpg", 269 | "http://o4.xiaohongshu.com/discovery/w640/0e8ca48d1171ddc38a4ee91c725abfbd_640_640_92.jpg" 270 | ], 271 | "comments": [ 272 | { 273 | "id": 1, 274 | "cname": "天*牙", 275 | "cavator": "http://img.xiaohongshu.com/avatar/57441c9902f37d7f161640d6.jpg@120w_120h_92q_1e_1c_1x.jpg?wm=80&hm=80&q=92", 276 | "ctext": "沙发!赠品狂魔啊简直", 277 | "ctime": "2016-01-04 01:56" 278 | }, 279 | { 280 | "id": 2, 281 | "cname": "_***_", 282 | "cavator": "http://img.xiaohongshu.com/avatar/59a19d38b46c5d74002f31cf.jpg@120w_120h_92q_1e_1c_1x.jpg?wm=80&hm=80&q=92", 283 | "ctext": "@天才牙", 284 | "ctime": "2016-01-04 02:05" 285 | }, 286 | { 287 | "id": 3, 288 | "cname": "大*周", 289 | "cavator": "http://img.xiaohongshu.com/avatar/56dea6b3d8601e21a025fb89.jpg@120w_120h_92q_1e_1c_1x.jpg?wm=80&hm=80&q=92", 290 | "ctext": "这个赠品好有爱 哈哈哈", 291 | "ctime": "2016-01-04 02:12" 292 | }, 293 | { 294 | "id": 4, 295 | "cname": "I**N", 296 | "cavator": "http://img.xiaohongshu.com/avatar/5742858fd8601e6bb0b54c28.jpg@120w_120h_92q_1e_1c_1x.jpg?wm=80&hm=80&q=92", 297 | "ctext": "這個防水抗暈嗎", 298 | "ctime": "2016-01-04 02:48" 299 | } 300 | ] 301 | }, 302 | { 303 | "id": 7, 304 | "img": "http://ci.xiaohongshu.com/ba998166-c869-4030-a010-d0101ac3fd61@r_240w_240h.jpg", 305 | "desc": "不知道员工们有没有玩过一款叫做《我的世界》的像素风格游戏。。据说在中小学生中特别火爆。每年还会有很多", 306 | "comment": 3, 307 | "like": 22, 308 | "collect": 9, 309 | "uname": "黑**评", 310 | "avator": "http://img.xiaohongshu.com/avatar/58ef44be02f37d3a86a247bc.jpg@120w_120h_92q_1e_1c_1x.jpg?wm=160&hm=160&q=92", 311 | "price": "", 312 | "adress": "", 313 | "time": "04-19", 314 | "imgs": [ 315 | "http://ci.xiaohongshu.com/ba998166-c869-4030-a010-d0101ac3fd61@r_1280w_1280h.jpg" 316 | ], 317 | "comments": [ 318 | { 319 | "id": 1, 320 | "cname": "杰*", 321 | "cavator": "http://img.xiaohongshu.com/avatar/5962e5c2805d89286a86c1f2.jpg@120w_120h_92q_1e_1c_1x.jpg?wm=80&hm=80&q=92", 322 | "ctext": "封面图100分[活力]", 323 | "ctime": "2017-04-20 11:10" 324 | }, 325 | { 326 | "id": 2, 327 | "cname": "A***斗", 328 | "cavator": "http://img.xiaohongshu.com/avatar/591568b0d1d3b9692e415ef3.jpg@120w_120h_92q_1e_1c_1x.jpg?wm=80&hm=80&q=92", 329 | "ctext": "打破次元壁哎", 330 | "ctime": "2017-04-20 11:53" 331 | }, 332 | { 333 | "id": 3, 334 | "cname": "黑**评", 335 | "cavator": "http://img.xiaohongshu.com/avatar/58ef44be02f37d3a86a247bc.jpg@120w_120h_92q_1e_1c_1x.jpg?wm=80&hm=80&q=92", 336 | "ctext": "[吧唧R]哈哈哈,你喜欢就好。 @杰米", 337 | "ctime": "2017-04-21 17:38" 338 | } 339 | ] 340 | }, 341 | { 342 | "id": 8, 343 | "img": "http://ci.xiaohongshu.com/32516b09-e1e8-4343-a093-9c6e7c6fd570@r_240w_240h.jpg", 344 | "desc": "#最美旅行照大赛[话题]# 大家好我是一个胜似金牛座的狮子座 下定决心要码一篇澳洲游的总(sheng)结(qian)笔记 8日澳洲 三个城市 悉尼-黄金海岸-布里斯班 推荐几个去Woolworth必买的! 1、乳制品! 羊背上的国家(牛也不少)所以牛奶啥的比纯净水还便宜(貌似澳洲的淡水资源比较少)最夸张的是1L的桶装牛奶只要2澳元-4澳元,一个又爱省钱又爱喝奶的人看到这样的物价简直要哭出来了!简直想随手拎一桶吨吨吨地吹! 还有一款Ski酸奶我觉得要甩优诺32条街的!八罐装的,我大概一天可以喝掉一板 2、烤鸡吧! 一整只Woolworth自制烤鸡只要7刀!!我一看到烤(jia)鸡(ge)双目就再也无法离开了,总以为标签漏了十位数还是咋的。。。而且关键是口感不输国内的很多人均100以上西餐厅里的烤鸡! 3、水果 水果都超新鲜的!特别需要一提的是西瓜!!只要一点几刀每KG 4、Tim Tam 这个大家都说好吃,我觉得他的包装设计如果换成每一根独立包装就完美了,因为我其实吃一根就觉得腻了。。。 5、Smith's薯片 👗part 7 购物 强烈推荐一家化妆品购物的好去处 Princeline sister club我来给个翻译就是'尼玛!贼便宜的姐妹们的俱乐部' 在悉尼天空之眼底下的那个购物商场的三楼有个分店,逛了好多药妆店之后发现这里几乎是最低价了,而且常见的产品都可以覆盖到 就举两个例子: Lucas木瓜膏(正常size)4刀20RMB Black Mores面霜7刀35RMB 有关退税:单张收银条满300澳元可以在机场退10%的税 👻part 8景点门票: 🏃🏂在悉尼的时候走了一条徒步线路: 环形港☞悉尼歌剧院☞皇家植物园☞NSW Art Museum☞天空之眼☞QVB购物中心☞情人港 (因为市中心的景点密集,走走就到了) 🗽🗿景点千万别现场买,在蚂蜂窝上有很多套票大概会便宜50%左右", 345 | "comment": 54, 346 | "like": 365, 347 | "collect": 240, 348 | "uname": "陈**", 349 | "avator": "http://img.xiaohongshu.com/avatar/5969a5c9b46c5d38c9deb605.jpg@120w_120h_92q_1e_1c_1x.jpg?wm=160&hm=160&q=92", 350 | "price": "", 351 | "adress": "", 352 | "time": "03-24", 353 | "imgs": [ 354 | "http://ci.xiaohongshu.com/32516b09-e1e8-4343-a093-9c6e7c6fd570@r_1280w_1280h.jpg", 355 | "http://ci.xiaohongshu.com/723cc974-dc6e-4d67-9789-31b5504d73fd@r_1280w_1280h.jpg", 356 | "http://ci.xiaohongshu.com/bef8399a-fc46-470a-9229-a2c830df8a55@r_1280w_1280h.jpg", 357 | "http://ci.xiaohongshu.com/1775e05d-1699-48d3-b7a1-3dcb1a8a3c75@r_1280w_1280h.jpg", 358 | "http://ci.xiaohongshu.com/07047a80-2a18-4b30-9d69-4dbc46af7de6@r_1280w_1280h.jpg", 359 | "http://ci.xiaohongshu.com/2a731840-b7ff-4982-874c-03b363b6de3e@r_1280w_1280h.jpg", 360 | "http://ci.xiaohongshu.com/5d949515-3ab1-45b1-b98e-2a68bab72746@r_1280w_1280h.jpg", 361 | "http://ci.xiaohongshu.com/afbbb076-7366-4559-86e8-0e2f35b58e0a@r_1280w_1280h.jpg", 362 | "http://ci.xiaohongshu.com/af0e1255-5931-4745-a946-8a577a01929f@r_1280w_1280h.jpg" 363 | ], 364 | "comments": [ 365 | { 366 | "id": 1, 367 | "cname": "k**i", 368 | "cavator": "http://img.xiaohongshu.com/avatar/59428e4db46c5d7c4548a13b.jpg@120w_120h_92q_1e_1c_1x.jpg?wm=80&hm=80&q=92", 369 | "ctext": "美哭[喜欢][喜欢][喜欢]", 370 | "ctime": "2017-03-24 23:05" 371 | }, 372 | { 373 | "id": 2, 374 | "cname": "陈**", 375 | "cavator": "http://img.xiaohongshu.com/avatar/5969a5c9b46c5d38c9deb605.jpg@120w_120h_92q_1e_1c_1x.jpg?wm=80&hm=80&q=92", 376 | "ctext": "[飞吻R][飞吻R]谢谢kiwi小仙女 @Kiwi", 377 | "ctime": "2017-03-24 23:07" 378 | }, 379 | { 380 | "id": 3, 381 | "cname": "E**_", 382 | "cavator": "http://img.xiaohongshu.com/avatar/5815d9a102f37d54d85a03fd.jpg@120w_120h_92q_1e_1c_1x.jpg?wm=80&hm=80&q=92", 383 | "ctext": "哈哈哈哈快帮自己", 384 | "ctime": "2017-03-24 23:25" 385 | }, 386 | { 387 | "id": 4, 388 | "cname": "陈**", 389 | "cavator": "http://img.xiaohongshu.com/avatar/5969a5c9b46c5d38c9deb605.jpg@120w_120h_92q_1e_1c_1x.jpg?wm=80&hm=80&q=92", 390 | "ctext": "必须的[得意R][得意R]", 391 | "ctime": "2017-03-24 23:28" 392 | } 393 | ] 394 | } 395 | ], 396 | "goodsList": [ 397 | { 398 | "id": 1, 399 | "img": "http://ci.xiaohongshu.com/25f3b22b-fb4b-492e-8270-9515668b21c4@r_240w_240h.jpg", 400 | "title": "柔软经典女神必选 LadyDiorOriginals手提包", 401 | "desc": "DIOR由创始人Christian Dior于1946年在法国巴黎创立,迪奥公司涉及的时尚领域包括手袋、服装、鞋履、彩妆、护肤品、香水、珠宝配件等高档消费品。'Dior'在法国中是上帝和金子的组合,金色后来也成了DIOR品牌常见的代表色。DIOR继承着法国高级女装的传统,做工精细,迎合上流社会成熟女性的审美品位,象征着法国时装文化的精神。", 402 | "newPrice": 25699, 403 | "oldPrice": 28000, 404 | "inventory": 999, 405 | "brandName": "迪奥 Dior", 406 | "brandImg": "", 407 | "color": ["粉","白"], 408 | "size": [], 409 | "weight": [], 410 | "imgs": [ 411 | "http://ci.xiaohongshu.com/25f3b22b-fb4b-492e-8270-9515668b21c4@r_1280w_1280h.jpg", 412 | "http://ci.xiaohongshu.com/e7ee3061-3d61-493b-a541-b574d3e99120@r_1280w_1280h.jpg", 413 | "http://ci.xiaohongshu.com/dcf9224f-6bd5-4935-b2c7-a6ffc5220212@r_1280w_1280h.jpg" 414 | ] 415 | }, 416 | { 417 | "id": 2, 418 | "img": "http://ci.xiaohongshu.com/a972a3e2-0826-45a0-b36b-207be6327535@r_240w_240h.jpg", 419 | "title": "忠贞不渝的爱情 镂空爱心吊坠成品手链", 420 | "desc": "Pandora这个名字来源于希腊神话,代表着幸运和希望,所以好多妹子都把Pandora手链当作幸运手链,而且它可以是一条独一无二的幸运手链~600多种不同材质、风格的串饰可以随意组合,各种搭配法会带来很大的乐趣哦~基础的纯银材质,造型精致时尚,简约中带点俏皮女人味,小红薯们搭配什么衣服都可以轻松驾驭哟~", 421 | "newPrice": 2129, 422 | "oldPrice": 2241, 423 | "inventory": 999, 424 | "brandName": "潘多拉PANDORA", 425 | "brandImg": "", 426 | "color": [], 427 | "size": ["17CM","18CM","19CM","20CM"], 428 | "weight": [], 429 | "imgs": [ 430 | "http://ci.xiaohongshu.com/a972a3e2-0826-45a0-b36b-207be6327535@r_1280w_1280h.jpg", 431 | "http://ci.xiaohongshu.com/4849f06d-2b87-430e-94dd-9610bf17be63@r_1280w_1280h.jpg", 432 | "http://ci.xiaohongshu.com/1246b990-2c8d-4c02-8bfa-4e35d4a1166e@r_1280w_1280h.jpg" 433 | ] 434 | }, 435 | { 436 | "id": 3, 437 | "img": "http://ci.xiaohongshu.com/f36609f9-6a23-4365-9b93-55c76c971d17@r_240w_240h.jpg", 438 | "title": "唇膏手机癖一生推 LUSTRE LIPSTICK水漾润泽口红/唇膏", 439 | "desc": "MAC的'弹子头'的特点就是颜色全,各型各色都想要,让很多小红薯们开始了漫漫的收集之旅。'MAC的口红总的来说性价比很高,味道也很好闻',小红薯们用了觉得'妆感和持久度都一级棒','颜色饱和度超级棒','显色度好,颜色多,价格实在易于满足收集癖'。", 440 | "newPrice": 132, 441 | "oldPrice": 148, 442 | "inventory": 999, 443 | "brandName": "魅可 M.A.C", 444 | "brandImg": "", 445 | "color": ["Flamingo","SeeSheer","LadyBug","Lustering"], 446 | "size": [], 447 | "weight": ["3g"], 448 | "imgs": [ 449 | "http://ci.xiaohongshu.com/f36609f9-6a23-4365-9b93-55c76c971d17@r_1280w_1280h.jpg", 450 | "http://ci.xiaohongshu.com/e816ebe2-ea7f-437c-b2fc-9f3d50c21fd2@r_1280w_1280h.jpg", 451 | "http://ci.xiaohongshu.com/9f3be019-3d3f-4954-b1c5-1a244d1384f0@r_1280w_1280h.jpg", 452 | "http://ci.xiaohongshu.com/e02d33e2-e753-4a8c-8a6f-dedebd1c98c9@r_1280w_1280h.jpg" 453 | ] 454 | }, 455 | { 456 | "id": 4, 457 | "img": "http://ci.xiaohongshu.com/25f3b22b-fb4b-492e-8270-9515668b21c4@r_240w_240h.jpg", 458 | "title": "柔软经典女神必选 LadyDiorOriginals手提包", 459 | "desc": "DIOR由创始人Christian Dior于1946年在法国巴黎创立,迪奥公司涉及的时尚领域包括手袋、服装、鞋履、彩妆、护肤品、香水、珠宝配件等高档消费品。'Dior'在法国中是上帝和金子的组合,金色后来也成了DIOR品牌常见的代表色。DIOR继承着法国高级女装的传统,做工精细,迎合上流社会成熟女性的审美品位,象征着法国时装文化的精神。", 460 | "newPrice": 25699, 461 | "oldPrice": 28000, 462 | "inventory": 999, 463 | "brandName": "迪奥 Dior", 464 | "brandImg": "", 465 | "color": ["粉","白"], 466 | "size": [], 467 | "weight": [], 468 | "imgs": [ 469 | "http://ci.xiaohongshu.com/25f3b22b-fb4b-492e-8270-9515668b21c4@r_1280w_1280h.jpg", 470 | "http://ci.xiaohongshu.com/e7ee3061-3d61-493b-a541-b574d3e99120@r_1280w_1280h.jpg", 471 | "http://ci.xiaohongshu.com/dcf9224f-6bd5-4935-b2c7-a6ffc5220212@r_1280w_1280h.jpg" 472 | ] 473 | }, 474 | { 475 | "id": 5, 476 | "img": "http://ci.xiaohongshu.com/a972a3e2-0826-45a0-b36b-207be6327535@r_240w_240h.jpg", 477 | "title": "忠贞不渝的爱情 镂空爱心吊坠成品手链", 478 | "desc": "Pandora这个名字来源于希腊神话,代表着幸运和希望,所以好多妹子都把Pandora手链当作幸运手链,而且它可以是一条独一无二的幸运手链~600多种不同材质、风格的串饰可以随意组合,各种搭配法会带来很大的乐趣哦~基础的纯银材质,造型精致时尚,简约中带点俏皮女人味,小红薯们搭配什么衣服都可以轻松驾驭哟~", 479 | "newPrice": 2129, 480 | "oldPrice": 2241, 481 | "inventory": 999, 482 | "brandName": "潘多拉PANDORA", 483 | "brandImg": "", 484 | "color": [], 485 | "size": ["17CM","18CM","19CM","20CM"], 486 | "weight": [], 487 | "imgs": [ 488 | "http://ci.xiaohongshu.com/a972a3e2-0826-45a0-b36b-207be6327535@r_1280w_1280h.jpg", 489 | "http://ci.xiaohongshu.com/4849f06d-2b87-430e-94dd-9610bf17be63@r_1280w_1280h.jpg", 490 | "http://ci.xiaohongshu.com/1246b990-2c8d-4c02-8bfa-4e35d4a1166e@r_1280w_1280h.jpg" 491 | ] 492 | }, 493 | { 494 | "id": 6, 495 | "img": "http://ci.xiaohongshu.com/f36609f9-6a23-4365-9b93-55c76c971d17@r_240w_240h.jpg", 496 | "title": "唇膏手机癖一生推 LUSTRE LIPSTICK水漾润泽口红/唇膏", 497 | "desc": "MAC的'弹子头'的特点就是颜色全,各型各色都想要,让很多小红薯们开始了漫漫的收集之旅。'MAC的口红总的来说性价比很高,味道也很好闻',小红薯们用了觉得'妆感和持久度都一级棒','颜色饱和度超级棒','显色度好,颜色多,价格实在易于满足收集癖'。", 498 | "newPrice": 132, 499 | "oldPrice": 148, 500 | "inventory": 999, 501 | "brandName": "魅可 M.A.C", 502 | "brandImg": "", 503 | "color": ["Flamingo","SeeSheer","LadyBug","Lustering"], 504 | "size": [], 505 | "weight": ["3g"], 506 | "imgs": [ 507 | "http://ci.xiaohongshu.com/f36609f9-6a23-4365-9b93-55c76c971d17@r_1280w_1280h.jpg", 508 | "http://ci.xiaohongshu.com/e816ebe2-ea7f-437c-b2fc-9f3d50c21fd2@r_1280w_1280h.jpg", 509 | "http://ci.xiaohongshu.com/9f3be019-3d3f-4954-b1c5-1a244d1384f0@r_1280w_1280h.jpg", 510 | "http://ci.xiaohongshu.com/e02d33e2-e753-4a8c-8a6f-dedebd1c98c9@r_1280w_1280h.jpg" 511 | ] 512 | } 513 | ] 514 | } -------------------------------------------------------------------------------- /src/components/Panel.vue: -------------------------------------------------------------------------------- 1 | 83 | 92 | 125 | 126 | -------------------------------------------------------------------------------- /src/components/e.vue: -------------------------------------------------------------------------------- 1 | 45 | 104 | 184 | 185 | 186 | .goods_page 187 | width 100% 188 | .g_header 189 | .g_nav 190 | width 100% 191 | display flex 192 | flex-direction row 193 | .left 194 | margin-left 20px 195 | .text 196 | flex 1 197 | .right 198 | margin-right 20px 199 | .g_pic 200 | width 100% 201 | .swiper-item img 202 | width 100% 203 | height 400px 204 | // .swiper-pagination-fraction 205 | // width 20% 206 | // left 80% 207 | .g_content 208 | width 100% 209 | .g_footer 210 | width 100% -------------------------------------------------------------------------------- /src/components/goodsList.vue: -------------------------------------------------------------------------------- 1 | 53 | 80 | 165 | 166 | -------------------------------------------------------------------------------- /src/components/navBar.vue: -------------------------------------------------------------------------------- 1 | 39 | 60 | 145 | -------------------------------------------------------------------------------- /src/main.js: -------------------------------------------------------------------------------- 1 | // The Vue build version to load with the `import` command 2 | // (runtime-only or standalone) has been set in webpack.base.conf with an alias. 3 | import Vue from 'vue' 4 | import App from './App' 5 | import router from './router' 6 | import store from './store' 7 | import axios from 'axios' 8 | import Mint from 'mint-ui' 9 | import 'mint-ui/lib/style.css' 10 | import VueTouch from 'vue-touch' 11 | Vue.use(VueTouch,{name: 'v-touch'}) 12 | 13 | axios.defaults.baseURL = 'http://localhost:3000/' //加前缀 14 | axios.defaults.withCredentials = true //允许跨域 15 | global.axios = axios //全局化 16 | 17 | Vue.config.productionTip = false 18 | 19 | Vue.use(Mint); 20 | 21 | /* eslint-disable no-new */ 22 | new Vue({ 23 | el: '#app', 24 | router, 25 | store, 26 | template: '', 27 | components: { App } 28 | }) 29 | -------------------------------------------------------------------------------- /src/pages/Cart.vue: -------------------------------------------------------------------------------- 1 | 68 | 192 | 388 | 389 | -------------------------------------------------------------------------------- /src/pages/Goods.vue: -------------------------------------------------------------------------------- 1 | 142 | 258 | 259 | -------------------------------------------------------------------------------- /src/pages/Note.vue: -------------------------------------------------------------------------------- 1 | 48 | 99 | -------------------------------------------------------------------------------- /src/pages/Search.vue: -------------------------------------------------------------------------------- 1 | 32 | 74 | -------------------------------------------------------------------------------- /src/pages/children/page1.vue: -------------------------------------------------------------------------------- 1 | 57 | 100 | 180 | 181 | -------------------------------------------------------------------------------- /src/pages/children/page2.vue: -------------------------------------------------------------------------------- 1 | 6 | 11 | -------------------------------------------------------------------------------- /src/pages/children/page3.vue: -------------------------------------------------------------------------------- 1 | 6 | 11 | -------------------------------------------------------------------------------- /src/pages/children/page4.vue: -------------------------------------------------------------------------------- 1 | 6 | 11 | -------------------------------------------------------------------------------- /src/pages/main1.vue: -------------------------------------------------------------------------------- 1 | 29 | 113 | 170 | 171 | -------------------------------------------------------------------------------- /src/pages/main2.vue: -------------------------------------------------------------------------------- 1 | 18 | 54 | 88 | 89 | -------------------------------------------------------------------------------- /src/pages/main3.vue: -------------------------------------------------------------------------------- 1 | 86 | 122 | -------------------------------------------------------------------------------- /src/router/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Router from 'vue-router' 3 | import main1 from '../pages/main1' 4 | import main2 from '../pages/main2' 5 | import main3 from '../pages/main3' 6 | import page1 from '../pages/children/page1' 7 | import page2 from '../pages/children/page2' 8 | import page3 from '../pages/children/page3' 9 | import page4 from '../pages/children/page4' 10 | import goods from '../pages/Goods' 11 | import search from '../pages/Search' 12 | import note from '../pages/Note' 13 | import cart from '../pages/Cart' 14 | 15 | Vue.use(Router) 16 | 17 | export default new Router({ 18 | linkActiveClass: 'active', 19 | // mode: 'history', //该模式下没有 # 前缀 20 | routes: [ 21 | { 22 | path: '/', 23 | component: main2 24 | }, 25 | { 26 | path: '/main1', 27 | name: 'main1', 28 | component: main1 29 | }, 30 | { 31 | path: '/main2', 32 | name: 'main2', 33 | component: main2, 34 | children: [ 35 | { 36 | path: '/', 37 | component: page1 38 | }, 39 | { 40 | path: 'page1', 41 | name: 'page1', 42 | component: page1 43 | }, 44 | { 45 | path:'page2', 46 | name: 'page2', 47 | component: page2 48 | }, 49 | { 50 | path:'page3', 51 | name: 'page3', 52 | component: page3 53 | }, 54 | { 55 | path:'page4', 56 | name: 'page4', 57 | component: page4 58 | } 59 | ] 60 | }, 61 | { 62 | path: '/main3', 63 | name: 'main3', 64 | component: main3 65 | }, 66 | { 67 | path: '/goods', 68 | name: 'goods', 69 | component: goods 70 | }, 71 | { 72 | path: '/search', 73 | name: 'search', 74 | component: search 75 | }, 76 | { 77 | path: '/note', 78 | name: 'note', 79 | component: note 80 | }, 81 | { 82 | path: '/cart', 83 | name: 'cart', 84 | component: cart 85 | } 86 | ] 87 | }) 88 | -------------------------------------------------------------------------------- /src/store/actions.js: -------------------------------------------------------------------------------- 1 | import * as types from './mutation-types' 2 | export const isNav = ({ commit }) => { 3 | commit(types.ISNAV) 4 | } 5 | export const showPopup = ({ commit }) => { 6 | commit(types.SHOWPOPUP) 7 | } 8 | export const hidePopup = ({ commit }) => { 9 | commit(types.HIDEPOPUP) 10 | } 11 | export const addToCart = ({ commit }, { Goods,quantity }) => { 12 | // console.log(quantity) 13 | if (Goods.inventory>0) { 14 | commit(types.ADD_TO_CART, { 15 | id: Goods.id, 16 | quantity: quantity 17 | }) 18 | } 19 | } -------------------------------------------------------------------------------- /src/store/getters.js: -------------------------------------------------------------------------------- 1 | export const cartProducts = state => { 2 | return state.cart.added.map(({ id, quantity }) => { 3 | const product = state.goods.goodslist.find(p => p.id === id) 4 | return { 5 | id, 6 | title: product.title, 7 | price: product.newPrice, 8 | bName: product.brandName, 9 | img: product.img, 10 | quantity 11 | } 12 | }) 13 | } -------------------------------------------------------------------------------- /src/store/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Vuex from 'vuex' 3 | import discovery from './modules/discovery' 4 | import goods from './modules/goods' 5 | import cart from './modules/cart' 6 | import * as getters from './getters' 7 | import * as actions from './actions' 8 | import mutations from './mutations' 9 | 10 | Vue.use(Vuex) 11 | 12 | const state = { 13 | isNav: true, 14 | popupVisible: false 15 | } 16 | 17 | export default new Vuex.Store({ 18 | state, 19 | modules: { 20 | discovery, 21 | goods, 22 | cart 23 | }, 24 | getters, 25 | actions, 26 | mutations 27 | }) -------------------------------------------------------------------------------- /src/store/modules/cart.js: -------------------------------------------------------------------------------- 1 | import * as types from '../mutation-types' 2 | const state = { 3 | added: [] 4 | } 5 | 6 | const getters = {} 7 | 8 | const actions = { 9 | checkout ({ commit }) { 10 | commit(types.CHECKOUT) 11 | }, 12 | updateCart ({ commit }, product) { 13 | commit(types.UPDATECART,product) 14 | } 15 | } 16 | ; 17 | const mutations = { 18 | [types.ADD_TO_CART] (state, { id, quantity }) { 19 | const record = state.added.find( p => p.id === id) 20 | if (!record) { //购物车中没有该商品则新增一条记录 21 | state.added.push({ 22 | id: id, 23 | quantity: quantity 24 | }) 25 | } else { //有的话则更新商品数量 26 | record.quantity += quantity 27 | } 28 | // console.log(record.quantity) 29 | }, 30 | [types.UPDATECART] (state, product) { 31 | let { id,quantity } = product 32 | const record = state.added.find( p => p.id === id) 33 | if (quantity>0) { 34 | record?record.quantity = quantity : '' 35 | } else { 36 | let index = state.added.indexOf(record) 37 | state.added.splice(index,1) 38 | } 39 | }, 40 | [types.CHECKOUT] (state) { 41 | state.added = [] 42 | } 43 | } 44 | 45 | export default { 46 | state, 47 | getters, 48 | actions, 49 | mutations 50 | } -------------------------------------------------------------------------------- /src/store/modules/discovery.js: -------------------------------------------------------------------------------- 1 | import * as types from '../mutation-types' 2 | const state = { 3 | all: [], 4 | choosedNote: [] 5 | } 6 | const getters = { 7 | leftDisList: function () { 8 | const ll = [] 9 | state.all.map((item,index) => { 10 | if ((index+1)%2) 11 | ll.push(item) 12 | }) 13 | return ll 14 | }, 15 | rightDisList: function () { 16 | const rl = [] 17 | state.all.map((item,index) => { 18 | if (!((index+1)%2)) 19 | rl.push(item) 20 | }) 21 | return rl 22 | }, 23 | note: state => state.choosedNote 24 | } 25 | const actions = { 26 | getDiscoverys({ commit }, data) { 27 | commit(types.INITDISDATA, { data }) 28 | }, 29 | getNote ({ commit }, value) { 30 | commit(types.GETNOTE,{ value }) 31 | } 32 | } 33 | const mutations = { 34 | [types.INITDISDATA] (state, { data }) { 35 | // console.log(data) 36 | state.all = data 37 | }, 38 | [types.GETNOTE] (state, { value }) { 39 | state.choosedNote = value 40 | } 41 | } 42 | export default { 43 | state, 44 | getters, 45 | actions, 46 | mutations, 47 | } -------------------------------------------------------------------------------- /src/store/modules/goods.js: -------------------------------------------------------------------------------- 1 | import * as types from '../mutation-types' 2 | 3 | const state = { 4 | goodslist: [], 5 | choosedgoods: [], 6 | Title: '' 7 | } 8 | 9 | const getters = { 10 | leftGoodsList: function () { 11 | const ll = [] 12 | state.goodslist.map((item,index) => { 13 | if ((index+1)%2) 14 | ll.push(item) 15 | }) 16 | return ll 17 | }, 18 | rightGoodsList: function () { 19 | const rl = [] 20 | state.goodslist.map((item,index) => { 21 | if (!((index+1)%2)) 22 | rl.push(item) 23 | }) 24 | return rl 25 | }, 26 | Goods: state => state.choosedgoods, 27 | title: state => (state.choosedgoods.title || "").split(" ").shift() 28 | } 29 | 30 | const actions = { 31 | getGoodsList({ commit }, data) { 32 | commit(types.INITGOODSDATA, { data }) 33 | }, 34 | getGoods({ commit },value ) { 35 | commit(types.GETGOODS, { value }) 36 | } 37 | } 38 | 39 | const mutations = { 40 | [types.INITGOODSDATA] (state, { data }) { 41 | // console.log(data) 42 | state.goodslist = data 43 | }, 44 | [types.GETGOODS] (state, { value }) { 45 | // console.log(value) 46 | state.choosedgoods = value 47 | } 48 | } 49 | 50 | export default { 51 | state, 52 | getters, 53 | actions, 54 | mutations 55 | } -------------------------------------------------------------------------------- /src/store/mutation-types.js: -------------------------------------------------------------------------------- 1 | export const UPDATECART = 'UPDATECART' 2 | export const ADD_TO_CART = 'ADD_TO_CART' 3 | export const ISNAV = 'ISNAV' 4 | export const INITDISDATA = 'INITDISDATA' 5 | export const INITGOODSDATA = 'INITGOODSDATA' 6 | export const GETGOODS = 'GETGOODS' 7 | export const GETNOTE = 'GETNOTE' 8 | export const SHOWPOPUP = 'SHOWPOPUP' 9 | export const HIDEPOPUP = 'HIDEPOPUP' 10 | export const CHECKOUT = 'CHECKOUT' 11 | -------------------------------------------------------------------------------- /src/store/mutations.js: -------------------------------------------------------------------------------- 1 | import * as types from './mutation-types' 2 | 3 | export default { 4 | [types.ISNAV] (state) { 5 | state.isNav = !state.isNav 6 | }, 7 | [types.SHOWPOPUP] (state) { 8 | state.popupVisible = true 9 | }, 10 | [types.HIDEPOPUP] (state) { 11 | state.popupVisible = false 12 | } 13 | } -------------------------------------------------------------------------------- /static/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wenqiii/vue-redbk/cb4e206cf26d4548e19da34a82bf97f005f00cbd/static/.gitkeep -------------------------------------------------------------------------------- /static/img/a1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wenqiii/vue-redbk/cb4e206cf26d4548e19da34a82bf97f005f00cbd/static/img/a1.png -------------------------------------------------------------------------------- /static/img/a2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wenqiii/vue-redbk/cb4e206cf26d4548e19da34a82bf97f005f00cbd/static/img/a2.png -------------------------------------------------------------------------------- /static/img/a3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wenqiii/vue-redbk/cb4e206cf26d4548e19da34a82bf97f005f00cbd/static/img/a3.png -------------------------------------------------------------------------------- /static/img/a4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wenqiii/vue-redbk/cb4e206cf26d4548e19da34a82bf97f005f00cbd/static/img/a4.png -------------------------------------------------------------------------------- /static/js/flexible.js: -------------------------------------------------------------------------------- 1 | !function () { var a = "@charset \"utf-8\";html{color:#000;background:#fff;overflow-y:scroll;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}html *{outline:0;-webkit-text-size-adjust:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}html,body{font-family:sans-serif}body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td,hr,button,article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{margin:0;padding:0}input,select,textarea{font-size:100%}table{border-collapse:collapse;border-spacing:0}fieldset,img{border:0}abbr,acronym{border:0;font-variant:normal}del{text-decoration:line-through}address,caption,cite,code,dfn,em,th,var{font-style:normal;font-weight:500}ol,ul{list-style:none}caption,th{text-align:left}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:500}q:before,q:after{content:''}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}a:hover{text-decoration:underline}ins,a{text-decoration:none}", b = document.createElement("style"); if (document.getElementsByTagName("head")[0].appendChild(b), b.styleSheet) b.styleSheet.disabled || (b.styleSheet.cssText = a); else try { b.innerHTML = a } catch (c) { b.innerText = a } }(); !function (a, b) { function c() { var b = f.getBoundingClientRect().width; b / i > 540 && (b = 540 * i); var c = b / 10; f.style.fontSize = c + "px", k.rem = a.rem = c } var d, e = a.document, f = e.documentElement, g = e.querySelector('meta[name="viewport"]'), h = e.querySelector('meta[name="flexible"]'), i = 0, j = 0, k = b.flexible || (b.flexible = {}); if (g) { console.warn("灏嗘牴鎹凡鏈夌殑meta鏍囩鏉ヨ缃缉鏀炬瘮渚�"); var l = g.getAttribute("content").match(/initial\-scale=([\d\.]+)/); l && (j = parseFloat(l[1]), i = parseInt(1 / j)) } else if (h) { var m = h.getAttribute("content"); if (m) { var n = m.match(/initial\-dpr=([\d\.]+)/), o = m.match(/maximum\-dpr=([\d\.]+)/); n && (i = parseFloat(n[1]), j = parseFloat((1 / i).toFixed(2))), o && (i = parseFloat(o[1]), j = parseFloat((1 / i).toFixed(2))) } } if (!i && !j) { var p = (a.navigator.appVersion.match(/android/gi), a.navigator.appVersion.match(/iphone/gi)), q = a.devicePixelRatio; i = p ? q >= 3 && (!i || i >= 3) ? 3 : q >= 2 && (!i || i >= 2) ? 2 : 1 : 1, j = 1 / i } if (f.setAttribute("data-dpr", i), !g) if (g = e.createElement("meta"), g.setAttribute("name", "viewport"), g.setAttribute("content", "initial-scale=" + j + ", maximum-scale=" + j + ", minimum-scale=" + j + ", user-scalable=no"), f.firstElementChild) f.firstElementChild.appendChild(g); else { var r = e.createElement("div"); r.appendChild(g), e.write(r.innerHTML) } a.addEventListener("resize", function () { clearTimeout(d), d = setTimeout(c, 300) }, !1), a.addEventListener("pageshow", function (a) { a.persisted && (clearTimeout(d), d = setTimeout(c, 300)) }, !1), "complete" === e.readyState ? e.body.style.fontSize = 12 * i + "px" : e.addEventListener("DOMContentLoaded", function () { e.body.style.fontSize = 12 * i + "px" }, !1), c(), k.dpr = a.dpr = i, k.refreshRem = c, k.rem2px = function (a) { var b = parseFloat(a) * this.rem; return "string" == typeof a && a.match(/rem$/) && (b += "px"), b }, k.px2rem = function (a) { var b = parseFloat(a) / this.rem; return "string" == typeof a && a.match(/px$/) && (b += "rem"), b } }(window, window.lib || (window.lib = {})); --------------------------------------------------------------------------------