[
  {
    "path": ".babelrc",
    "content": "{\n  \"presets\": [\n    [\"es2015\", { \"modules\": false }],\n    \"stage-2\"\n  ],\n  \"plugins\": [\"transform-runtime\"],\n  \"comments\": false,\n  \"env\": {\n    \"test\": {\n      \"plugins\": [ \"istanbul\" ]\n    }\n  }\n}\n"
  },
  {
    "path": ".editorconfig",
    "content": "root = true\n\n[*]\ncharset = utf-8\nindent_style = space\nindent_size = 2\nend_of_line = lf\ninsert_final_newline = true\ntrim_trailing_whitespace = true\n"
  },
  {
    "path": ".gitignore",
    "content": ".DS_Store\nnode_modules/\ndist/\nresource/\nnpm-debug.log"
  },
  {
    "path": "README.md",
    "content": "TimeCat\n=======\n\n> 【此处留白】 - 图片社交分享App\n\n技术栈\n------\n\n前端：Vue2 + Vuex + Vue-Router2 + Axios + Webpack + ES6/7 + Less + ElementUI\n\n传送门\n------\n\n如果你正在学习React，这里有一个关于React的[Demo](https://github.com/hicoldcat/CornerCat)。\n\n项目安装\n--------\n\n```bash\n\n# clone或者download项目\ngit clone https://github.com/hicoldcat/TimeCat.git\n\n# 进入项目文件夹\ncd TimeCat\n\n# 安装依赖\nnpm install\n\n```\n\n项目运行\n--------\n\n```bash\n# serve with hot reload at localhost:8080\nnpm run dev\n```\n\n项目编译打包\n------------\n\n```bash\n# build for production with minification\nnpm run build\n\n```\n\n项目结构\n--------\n\n```\n|-- api                            // 项目接口定义\n|\n|-- build                            // webpack配置文件\n|\n|-- config                           // 项目配置文件\n|\n|-- dist                            // 项目打包文件\n|\n|-- timecat                          // 上线项目文件，放在服务器即可正常访问\n|\n|-- screenshots                      // 项目截图\n|\n|-- src                              // 源码目录\n|   |-- assets                       // 项目公共资源\n|   |-- components                   // 组件库\n|   |-- pages                        // 项目页面模块\n|   |-- router                       // 路由文件\n|   |-- service                      // Mock数据\n|   |-- store                        // vuex的状态管理\n|   |-- style                        // 各种样式文件\n|   |-- App.vue                      // 页面入口文件\n|   |-- main.js                      // 程序入口文件，加载各种公共组件\n|\n|-- static                          //一些静态资源，不会被webpack编译\n|\n|-- .babelrc                         // ES6语法编译配置\n|-- .editorconfig                    // 代码编写规格\n|-- .gitignore                       // 忽略的文件\n|-- favicon.ico                      // 页面左上角小图标\n|-- index.html                       // 入口html文件\n|-- package.json                     // 项目及工具的依赖配置文件\n|-- README.md                        // 说明\n\n```\n\n项目说明\n--------\n\n> 项目是做一个基于vue全家桶的移动端图片分享app的Demo\n\n项目风格\n--------\n\n> 简约 文艺 清新\n\n项目截图\n--------\n\n#### *【片刻留白】---每日分享模块[daily]*\n\n![](https://github.com/hicoldcat/TimeCat/blob/master/screenshots/daily.jpg?raw=true)\n\n#### *【回声留白】---音乐分享模块[vocality]*\n\n![](https://github.com/hicoldcat/TimeCat/blob/master/screenshots/vocality.jpg?raw=true)\n\n#### *【字符留白】---随笔分享模块[essay]*\n\n![](https://github.com/hicoldcat/TimeCat/blob/master/screenshots/essay.jpg?raw=true)\n\n#### *【半步留白】---游记分享模块[travels]*\n\n![](https://github.com/hicoldcat/TimeCat/blob/master/screenshots/travels.jpg?raw=true)\n\n贡献\n----\n\n> 本人前端小菜鸟一枚，如果有任何的问题，欢迎给我提issue\n>\n> 如果此项目对你有帮助，可以给个star哦\n"
  },
  {
    "path": "api/apiroutes.js",
    "content": "// Mock data by hicoldcat\n\nvar express = require('express')\nvar apiRoutes = express.Router();\n\nvar home = require('./mockdata/home.json');\nvar daily = require('./mockdata/daily.json');\nvar vocality = require('./mockdata/vocality.json');\nvar travels = require('./mockdata/travels.json');\nvar essay = require('./mockdata/essay.json');\nvar personal = require('./mockdata/personal.json');\nvar detail = require('./mockdata/detail.json');\n\n\napiRoutes.get('/home', function (req, res) {\n\tres.json(home);\n});\n\n\napiRoutes.get('/daily', function (req, res) {\n\tres.json(daily);\n});\n\napiRoutes.get('/vocality', function (req, res) {\n\tres.json(vocality);\n});\n\napiRoutes.get('/travels', function (req, res) {\n\tres.json(travels);\n});\n\n\napiRoutes.get('/essay', function (req, res) {\n\tres.json(essay);\n});\n\napiRoutes.get('/personal', function (req, res) {\n\tres.json(personal);\n});\n\napiRoutes.get('/detail', function (req, res) {\n\tres.json(detail);\n});\n\nmodule.exports = apiRoutes;\n"
  },
  {
    "path": "api/mockdata/daily.json",
    "content": "{\n  \"errno\": 0,\n  \"data\": [\n    {\n      \"id\":1001,\n      \"userid\":\"u9001\",\n      \"nickname\": \"李留白\",\n      \"avatar\": \"http://p1.wmpic.me/article/2017/03/06/1488780213_usvFXYIl.jpg\",\n      \"pic\": \"http://p3.wmpic.me/article/2015/12/15/1450149335_QCivaWCX.jpg\",\n      \"desc\": \"一花一世界，一鸟一天堂\",\n      \"themeid\": \"info\",\n      \"module\": \"daily\",\n      \"createtime\":\"1475164800000\"\n    },\n    {\n      \"id\":1002,\n      \"userid\":\"u9002\",\n      \"nickname\": \"扫地僧\",\n      \"avatar\": \"http://p1.wmpic.me/article/2017/03/06/1488768546_bdCSPuMc_215x185.jpg\",\n      \"pic\": \"http://p3.wmpic.me/article/2015/12/15/1450149335_WNRvtyWH.jpg\",\n      \"desc\": \"执子之手，与子偕老\",\n      \"themeid\": \"info\",\n      \"module\": \"daily\",\n      \"createtime\":\"1485914400000\"\n    },\n    {\n      \"id\":1003,\n      \"userid\":\"u9003\",\n      \"nickname\": \"李留白\",\n      \"avatar\": \"http://p2.wmpic.me/article/2017/03/03/1488509527_rGNZPsMi.jpg\",\n      \"pic\": \"http://p3.wmpic.me/article/2017/03/07/1488868988_oeWjKIyl.jpg\",\n      \"desc\": \"一花一世界，一鸟一天堂\",\n      \"themeid\": \"info\",\n      \"module\": \"daily\",\n      \"createtime\":\"1490055600000\"\n    },\n    {\n      \"id\":1004,\n      \"userid\":\"u9004\",\n      \"nickname\": \"李留白\",\n      \"avatar\": \"http://p2.wmpic.me/article/2017/03/03/1488509527_gniRuexr.jpg\",\n      \"pic\": \"http://p3.wmpic.me/article/2017/03/07/1488868988_vXAUAxGN.jpg\",\n      \"desc\": \"一花一世界，一鸟一天堂\",\n      \"themeid\": \"info\",\n      \"module\": \"daily\",\n      \"createtime\":\"1493055500000\"\n    },\n    {\n      \"id\":1005,\n      \"userid\":\"u9005\",\n      \"nickname\": \"李留白\",\n      \"avatar\": \"http://p3.wmpic.me/article/2017/03/01/1488338945_iJTjMZEi.jpg\",\n      \"pic\": \"http://p3.wmpic.me/article/2017/02/17/1487312780_KLVpntpo.jpg\",\n      \"desc\": \"一花一世界，一鸟一天堂\",\n      \"themeid\": \"info\",\n      \"module\": \"daily\",\n      \"createtime\":\"1493355700000\"\n    },\n    {\n      \"id\":1006,\n      \"userid\":\"u9006\",\n      \"nickname\": \"李留白\",\n      \"avatar\": \"http://p3.wmpic.me/article/2017/03/01/1488338945_xCOozyoD.jpg\",\n      \"pic\": \"http://p3.wmpic.me/article/2017/02/17/1487312780_NxltIlts.jpg\",\n      \"desc\": \"一花一世界，一鸟一天堂\",\n      \"themeid\": \"info\",\n      \"module\": \"daily\",\n      \"createtime\":\"1493155740000\"\n    },\n    {\n      \"id\":1007,\n      \"userid\":\"u9007\",\n      \"nickname\": \"李留白\",\n      \"avatar\": \"http://p1.wmpic.me/article/2017/02/28/1488270792_LaBnPAaR_215x185.jpg\",\n      \"pic\": \"http://p3.wmpic.me/article/2017/02/17/1487312780_KWdvxsti.jpg\",\n      \"desc\": \"一花一世界，一鸟一天堂\",\n      \"themeid\": \"info\",\n      \"module\": \"daily\",\n      \"createtime\":\"1493355640000\"\n    },\n    {\n      \"id\":1008,\n      \"userid\":\"u9008\",\n      \"nickname\": \"李留白\",\n      \"avatar\": \"http://p2.wmpic.me/article/2017/02/24/1487902738_XdBlzdRu_215x185.jpg\",\n      \"pic\": \"http://p2.wmpic.me/article/2017/02/17/1487295910_vbjpzzCe.jpg\",\n      \"desc\": \"一花一世界，一鸟一天堂\",\n      \"themeid\": \"info\",\n      \"module\": \"daily\",\n      \"createtime\":\"1423455640000\"\n    },\n    {\n      \"id\":1009,\n      \"userid\":\"u9009\",\n      \"nickname\": \"李留白\",\n      \"avatar\": \"http://p3.wmpic.me/article/2017/03/01/1488338945_yYFHhlst.jpg\",\n      \"pic\": \"http://p2.wmpic.me/article/2017/02/17/1487311390_xttfRbPJ_215x185.jpg\",\n      \"desc\": \"一花一世界，一鸟一天堂\",\n      \"themeid\": \"info\",\n      \"module\": \"daily\",\n      \"createtime\":\"1423355450000\"\n    },\n    {\n      \"id\":1010,\n      \"userid\":\"u9010\",\n      \"nickname\": \"李留白\",\n      \"avatar\": \"http://p2.wmpic.me/article/2017/02/22/1487730637_qHiHIzxH_215x185.jpg\",\n      \"pic\": \"http://p3.wmpic.me/article/2017/02/16/1487224457_xxmNBhjW_215x185.jpg\",\n      \"desc\": \"一花一世界，一鸟一天堂\",\n      \"themeid\": \"info\",\n      \"module\": \"daily\",\n      \"createtime\":\"1465354670000\"\n    }\n  ]\n}\n"
  },
  {
    "path": "api/mockdata/detail.json",
    "content": "{\n  \"errno\": 0,\n  \"data\": {\n    \"id\":1001,\n    \"userid\":\"u9001\",\n    \"nickname\": \"李留白\",\n    \"avatar\": \"http://p1.wmpic.me/article/2017/03/06/1488780213_usvFXYIl.jpg\",\n    \"pic\": \"http://p3.wmpic.me/article/2015/12/15/1450149335_QCivaWCX.jpg\",\n    \"desc\": \"一花一世界，一鸟一天堂\",\n    \"themeid\": \"info\",\n    \"module\": \"daily\",\n    \"createtime\":\"1475164800000\",\n    \"followcount\": 920,\n    \"startcount\":56,\n    \"comments\":[\n      {\n        \"reviewerid\":\"u333\",\n        \"revieweravatar\":\"\",\n        \"comment\":\"很喜欢！\"\n      },\n      {\n        \"reviewerid\":\"u343\",\n        \"revieweravatar\":\"\",\n        \"comment\":\"不错哦，很有感触。。。\"\n      }\n    ]\n  }\n}\n"
  },
  {
    "path": "api/mockdata/essay.json",
    "content": "{\n  \"errno\": 0,\n  \"data\": [\n    {\n      \"id\":1007,\n      \"userid\":\"u9007\",\n      \"nickname\": \"李留白\",\n      \"avatar\": \"http://p1.wmpic.me/article/2017/02/28/1488270792_LaBnPAaR_215x185.jpg\",\n      \"pic\": \"http://p3.wmpic.me/article/2017/02/17/1487312780_KWdvxsti.jpg\",\n      \"themeid\": \"article\",\n      \"module\": \"essay\",\n      \"title\":\"将灵魂的虔诚，植入一朵莲荷\",\n      \"content\":\"\",\n      \"createtime\":\"1493355640000\"\n    },\n    {\n      \"id\":1008,\n      \"userid\":\"u9008\",\n      \"nickname\": \"李留白\",\n      \"avatar\": \"http://p2.wmpic.me/article/2017/02/24/1487902738_XdBlzdRu_215x185.jpg\",\n      \"pic\": \"http://p2.wmpic.me/article/2017/02/17/1487295910_vbjpzzCe.jpg\",\n      \"themeid\": \"article\",\n      \"module\": \"essay\",\n      \"title\":\"等一场春暖花香\",\n      \"content\":\"\",\n      \"createtime\":\"1423455640000\"\n    },\n    {\n      \"id\":1001,\n      \"userid\":\"u9001\",\n      \"nickname\": \"李留白\",\n      \"avatar\": \"http://p1.wmpic.me/article/2017/03/06/1488780213_usvFXYIl.jpg\",\n      \"pic\": \"http://p3.wmpic.me/article/2015/12/15/1450149335_QCivaWCX.jpg\",\n      \"themeid\": \"article\",\n      \"module\": \"essay\",\n      \"title\":\"关系再好，也要距离\",\n      \"content\":\"\",\n      \"createtime\":\"1475164800000\"\n    },\n    {\n      \"id\":1002,\n      \"userid\":\"u9002\",\n      \"nickname\": \"扫地僧\",\n      \"avatar\": \"http://p1.wmpic.me/article/2017/03/06/1488768546_bdCSPuMc_215x185.jpg\",\n      \"pic\": \"http://p3.wmpic.me/article/2015/12/15/1450149335_WNRvtyWH.jpg\",\n      \"themeid\": \"article\",\n      \"module\": \"essay\",\n      \"title\":\"读你，在春天里\",\n      \"content\":\"\",\n      \"createtime\":\"1485914400000\"\n    },\n    {\n      \"id\":1003,\n      \"userid\":\"u9003\",\n      \"nickname\": \"李留白\",\n      \"avatar\": \"http://p2.wmpic.me/article/2017/03/03/1488509527_rGNZPsMi.jpg\",\n      \"pic\": \"http://p3.wmpic.me/article/2017/03/07/1488868988_oeWjKIyl.jpg\",\n      \"themeid\": \"article\",\n      \"module\": \"essay\",\n      \"title\":\"原来，你也在这里\",\n      \"content\":\"\",\n      \"createtime\":\"1490055600000\"\n    },\n    {\n      \"id\":1004,\n      \"userid\":\"u9004\",\n      \"nickname\": \"李留白\",\n      \"avatar\": \"http://p2.wmpic.me/article/2017/03/03/1488509527_gniRuexr.jpg\",\n      \"pic\": \"http://p3.wmpic.me/article/2017/03/07/1488868988_vXAUAxGN.jpg\",\n      \"themeid\": \"article\",\n      \"module\": \"essay\",\n      \"title\":\"人活一世，随遇而安\",\n      \"content\":\"\",\n      \"createtime\":\"1493055500000\"\n    },\n    {\n      \"id\":1005,\n      \"userid\":\"u9005\",\n      \"nickname\": \"李留白\",\n      \"avatar\": \"http://p3.wmpic.me/article/2017/03/01/1488338945_iJTjMZEi.jpg\",\n      \"pic\": \"http://p3.wmpic.me/article/2017/02/17/1487312780_KLVpntpo.jpg\",\n      \"themeid\": \"article\",\n      \"module\": \"essay\",\n      \"title\":\"淙淙郎木寺\",\n      \"content\":\"\",\n      \"createtime\":\"1493355700000\"\n    },\n    {\n      \"id\":1006,\n      \"userid\":\"u9006\",\n      \"nickname\": \"李留白\",\n      \"avatar\": \"http://p3.wmpic.me/article/2017/03/01/1488338945_xCOozyoD.jpg\",\n      \"pic\": \"http://p3.wmpic.me/article/2017/02/17/1487312780_NxltIlts.jpg\",\n      \"themeid\": \"article\",\n      \"module\": \"essay\",\n      \"title\":\"香染尘埃，坐禅时光\",\n      \"content\":\"\",\n      \"createtime\":\"1493155740000\"\n    },\n    {\n      \"id\":1009,\n      \"userid\":\"u9009\",\n      \"nickname\": \"李留白\",\n      \"avatar\": \"http://p3.wmpic.me/article/2017/03/01/1488338945_yYFHhlst.jpg\",\n      \"pic\": \"http://p2.wmpic.me/article/2017/02/17/1487311390_xttfRbPJ_215x185.jpg\",\n      \"themeid\": \"article\",\n      \"module\": \"essay\",\n      \"title\":\"纵然桃红十里，也比不上你的美丽\",\n      \"content\":\"\",\n      \"createtime\":\"1423355450000\"\n    },\n    {\n      \"id\":1010,\n      \"userid\":\"u9010\",\n      \"nickname\": \"李留白\",\n      \"avatar\": \"http://p2.wmpic.me/article/2017/02/22/1487730637_qHiHIzxH_215x185.jpg\",\n      \"pic\": \"http://p3.wmpic.me/article/2017/02/16/1487224457_xxmNBhjW_215x185.jpg\",\n      \"themeid\": \"article\",\n      \"module\": \"essay\",\n      \"title\":\"书一笺优美的清韵，沐浴春心\",\n      \"content\":\"\",\n      \"createtime\":\"1465354670000\"\n    }\n  ]\n}\n"
  },
  {
    "path": "api/mockdata/home.json",
    "content": "{\n  \"errno\": 0,\n  \"data\": [\n    {\n      \"id\":1001,\n      \"userid\":\"u9001\",\n      \"nickname\": \"李留白\",\n      \"avatar\": \"http://p1.wmpic.me/article/2017/03/06/1488780213_usvFXYIl.jpg\",\n      \"pic\": \"http://p3.wmpic.me/article/2015/12/15/1450149335_QCivaWCX.jpg\",\n      \"desc\": \"一花一世界，一鸟一天堂\",\n      \"themeid\": \"info\",\n      \"module\": \"daily\",\n      \"createtime\":\"1475164800000\"\n    },\n    {\n      \"id\":1002,\n      \"userid\":\"u9002\",\n      \"nickname\": \"扫地僧\",\n      \"avatar\": \"http://p1.wmpic.me/article/2017/03/06/1488768546_bdCSPuMc_215x185.jpg\",\n      \"pic\": \"http://p3.wmpic.me/article/2015/12/15/1450149335_WNRvtyWH.jpg\",\n      \"desc\": \"执子之手，与子偕老\",\n      \"themeid\": \"info\",\n      \"module\": \"daily\",\n      \"createtime\":\"1485914400000\"\n    },\n    {\n      \"id\":1003,\n      \"userid\":\"u9003\",\n      \"nickname\": \"李留白\",\n      \"avatar\": \"http://p2.wmpic.me/article/2017/03/03/1488509527_rGNZPsMi.jpg\",\n      \"pic\": \"http://p3.wmpic.me/article/2017/03/07/1488868988_oeWjKIyl.jpg\",\n      \"desc\": \"一花一世界，一鸟一天堂\",\n      \"themeid\": \"info\",\n      \"module\": \"daily\",\n      \"createtime\":\"1490055600000\"\n    },\n    {\n      \"id\":1004,\n      \"userid\":\"u9004\",\n      \"nickname\": \"李留白\",\n      \"avatar\": \"http://p2.wmpic.me/article/2017/03/03/1488509527_gniRuexr.jpg\",\n      \"pic\": \"http://p3.wmpic.me/article/2017/03/07/1488868988_vXAUAxGN.jpg\",\n      \"desc\": \"一花一世界，一鸟一天堂\",\n      \"themeid\": \"info\",\n      \"module\": \"daily\",\n      \"createtime\":\"1493055500000\"\n    },\n    {\n      \"id\":1005,\n      \"userid\":\"u9005\",\n      \"nickname\": \"李留白\",\n      \"avatar\": \"http://p3.wmpic.me/article/2017/03/01/1488338945_iJTjMZEi.jpg\",\n      \"pic\": \"http://p3.wmpic.me/article/2017/02/17/1487312780_KLVpntpo.jpg\",\n      \"desc\": \"一花一世界，一鸟一天堂\",\n      \"themeid\": \"info\",\n      \"module\": \"daily\",\n      \"createtime\":\"1493355700000\"\n    },\n    {\n      \"id\":1006,\n      \"userid\":\"u9006\",\n      \"nickname\": \"李留白\",\n      \"avatar\": \"http://p3.wmpic.me/article/2017/03/01/1488338945_xCOozyoD.jpg\",\n      \"pic\": \"http://p3.wmpic.me/article/2017/02/17/1487312780_NxltIlts.jpg\",\n      \"desc\": \"一花一世界，一鸟一天堂\",\n      \"themeid\": \"info\",\n      \"module\": \"daily\",\n      \"createtime\":\"1493155740000\"\n    },\n    {\n      \"id\":1007,\n      \"userid\":\"u9007\",\n      \"nickname\": \"李留白\",\n      \"avatar\": \"http://p1.wmpic.me/article/2017/02/28/1488270792_LaBnPAaR_215x185.jpg\",\n      \"pic\": \"http://p3.wmpic.me/article/2017/02/17/1487312780_KWdvxsti.jpg\",\n      \"desc\": \"一花一世界，一鸟一天堂\",\n      \"themeid\": \"info\",\n      \"module\": \"daily\",\n      \"createtime\":\"1493355640000\"\n    },\n    {\n      \"id\":1008,\n      \"userid\":\"u9008\",\n      \"nickname\": \"李留白\",\n      \"avatar\": \"http://p2.wmpic.me/article/2017/02/24/1487902738_XdBlzdRu_215x185.jpg\",\n      \"pic\": \"http://p2.wmpic.me/article/2017/02/17/1487295910_vbjpzzCe.jpg\",\n      \"desc\": \"一花一世界，一鸟一天堂\",\n      \"themeid\": \"info\",\n      \"module\": \"daily\",\n      \"createtime\":\"1423455640000\"\n    },\n    {\n      \"id\":1009,\n      \"userid\":\"u9009\",\n      \"nickname\": \"李留白\",\n      \"avatar\": \"http://p3.wmpic.me/article/2017/03/01/1488338945_yYFHhlst.jpg\",\n      \"pic\": \"http://p2.wmpic.me/article/2017/02/17/1487311390_xttfRbPJ_215x185.jpg\",\n      \"desc\": \"一花一世界，一鸟一天堂\",\n      \"themeid\": \"info\",\n      \"module\": \"daily\",\n      \"createtime\":\"1423355450000\"\n    },\n    {\n      \"id\":1010,\n      \"userid\":\"u9010\",\n      \"nickname\": \"李留白\",\n      \"avatar\": \"http://p2.wmpic.me/article/2017/02/22/1487730637_qHiHIzxH_215x185.jpg\",\n      \"pic\": \"http://p3.wmpic.me/article/2017/02/16/1487224457_xxmNBhjW_215x185.jpg\",\n      \"desc\": \"一花一世界，一鸟一天堂\",\n      \"themeid\": \"info\",\n      \"module\": \"daily\",\n      \"createtime\":\"1465354670000\"\n    }\n  ]\n}\n"
  },
  {
    "path": "api/mockdata/personal.json",
    "content": "{\n  \"errno\": 0,\n  \"data\": {\n    \"userid\":\"u9001\",\n    \"nickname\": \"李留白\",\n    \"avatar\": \"http://p1.wmpic.me/article/2017/03/06/1488780213_usvFXYIl.jpg\",\n    \"followcount\": 920,\n    \"isfollow\": false,\n    \"contentlist\": [\n      {\n        \"id\":1001,\n        \"userid\":\"u9001\",\n        \"nickname\": \"李留白\",\n        \"avatar\": \"http://p1.wmpic.me/article/2017/03/06/1488780213_usvFXYIl.jpg\",\n        \"pic\": \"http://p3.wmpic.me/article/2015/12/15/1450149335_QCivaWCX.jpg\",\n        \"desc\": \"一花一世界，一鸟一天堂\",\n        \"themeid\": \"info\",\n        \"module\": \"daily\",\n        \"createtime\":\"1475164800000\"\n      },\n      {\n        \"id\":1003,\n        \"userid\":\"u9001\",\n        \"nickname\": \"李留白\",\n        \"avatar\": \"http://p1.wmpic.me/article/2017/03/06/1488780213_usvFXYIl.jpg\",\n        \"pic\": \"http://p3.wmpic.me/article/2017/03/07/1488868988_oeWjKIyl.jpg\",\n        \"musicurl\":\"http://fs.open.kugou.com/886bae70fad3b51b29b69b0886c91c5d/58c10e40/G094/M03/1D/01/PpQEAFi6f4OAPYPSAE5cJ7mN9yk814.mp3\",\n        \"imgurl\":\"http://singerimg.kugou.com/uploadpic/softhead/100/20170106/20170106171217388.jpg\",\n        \"singer\":\"张碧晨\",\n        \"songname\":\"时间有泪\",\n        \"themeid\": \"music\",\n        \"module\": \"vocality\",\n        \"createtime\":\"1490055600000\"\n      },\n      {\n        \"id\":1007,\n        \"userid\":\"u9001\",\n        \"nickname\": \"李留白\",\n        \"avatar\": \"http://p1.wmpic.me/article/2017/03/06/1488780213_usvFXYIl.jpg\",\n        \"pic\": \"http://p3.wmpic.me/article/2017/02/17/1487312780_KWdvxsti.jpg\",\n        \"themeid\": \"article\",\n        \"module\": \"essay\",\n        \"title\":\"将灵魂的虔诚，植入一朵莲荷\",\n        \"content\":\"\",\n        \"createtime\":\"1493355640000\"\n      },\n      {\n        \"id\":1005,\n        \"userid\":\"u9001\",\n        \"nickname\": \"李留白\",\n        \"avatar\": \"http://p1.wmpic.me/article/2017/03/06/1488780213_usvFXYIl.jpg\",\n        \"pic\": \"http://p3.wmpic.me/article/2017/02/17/1487312780_KLVpntpo.jpg\",\n        \"themeid\": \"trip\",\n        \"module\": \"travels\",\n        \"destination\":\"山东\",\n        \"title\":\"雄山灵水圣人——我和齐鲁情未了\",\n        \"content\":\"\",\n        \"createtime\":\"1493355700000\"\n      }\n    ]\n  }\n}\n"
  },
  {
    "path": "api/mockdata/travels.json",
    "content": "{\n  \"errno\": 0,\n  \"data\": [\n    {\n      \"id\":1005,\n      \"userid\":\"u9005\",\n      \"nickname\": \"李留白\",\n      \"avatar\": \"http://p3.wmpic.me/article/2017/03/01/1488338945_iJTjMZEi.jpg\",\n      \"pic\": \"http://p3.wmpic.me/article/2017/02/17/1487312780_KLVpntpo.jpg\",\n      \"themeid\": \"trip\",\n      \"module\": \"travels\",\n      \"destination\":\"山东\",\n      \"title\":\"雄山灵水圣人——我和齐鲁情未了\",\n      \"content\":\"\",\n      \"createtime\":\"1493355700000\"\n    },\n    {\n      \"id\":1006,\n      \"userid\":\"u9006\",\n      \"nickname\": \"李留白\",\n      \"avatar\": \"http://p3.wmpic.me/article/2017/03/01/1488338945_xCOozyoD.jpg\",\n      \"pic\": \"http://p3.wmpic.me/article/2017/02/17/1487312780_NxltIlts.jpg\",\n      \"themeid\": \"trip\",\n      \"module\": \"travels\",\n      \"destination\":\"蔚县\",\n      \"title\":\"暖泉--记忆中年的味道\",\n      \"content\":\"\",\n      \"createtime\":\"1493155740000\"\n    },\n    {\n      \"id\":1001,\n      \"userid\":\"u9001\",\n      \"nickname\": \"李留白\",\n      \"avatar\": \"http://p1.wmpic.me/article/2017/03/06/1488780213_usvFXYIl.jpg\",\n      \"pic\": \"http://p3.wmpic.me/article/2015/12/15/1450149335_QCivaWCX.jpg\",\n      \"themeid\": \"trip\",\n      \"module\": \"travels\",\n      \"destination\":\"牙买加\",\n      \"title\":\"文青在路上之浅尝牙买加\",\n      \"content\":\"\",\n      \"createtime\":\"1475164800000\"\n    },\n    {\n      \"id\":1002,\n      \"userid\":\"u9002\",\n      \"nickname\": \"扫地僧\",\n      \"avatar\": \"http://p1.wmpic.me/article/2017/03/06/1488768546_bdCSPuMc_215x185.jpg\",\n      \"pic\": \"http://p3.wmpic.me/article/2015/12/15/1450149335_WNRvtyWH.jpg\",\n      \"themeid\": \"trip\",\n      \"module\": \"travels\",\n      \"destination\":\"塞尔维亚\",\n      \"title\":\"小小的城，可爱的人——塞尔维亚十日行\",\n      \"content\":\"\",\n      \"createtime\":\"1485914400000\"\n    },\n    {\n      \"id\":1003,\n      \"userid\":\"u9003\",\n      \"nickname\": \"李留白\",\n      \"avatar\": \"http://p2.wmpic.me/article/2017/03/03/1488509527_rGNZPsMi.jpg\",\n      \"pic\": \"http://p3.wmpic.me/article/2017/03/07/1488868988_oeWjKIyl.jpg\",\n      \"themeid\": \"trip\",\n      \"module\": \"travels\",\n      \"destination\":\"黄姚古镇\",\n      \"title\":\"我画中的八月黄姚－美丽桂林\",\n      \"content\":\"\",\n      \"createtime\":\"1490055600000\"\n    },\n    {\n      \"id\":1004,\n      \"userid\":\"u9004\",\n      \"nickname\": \"李留白\",\n      \"avatar\": \"http://p2.wmpic.me/article/2017/03/03/1488509527_gniRuexr.jpg\",\n      \"pic\": \"http://p3.wmpic.me/article/2017/03/07/1488868988_vXAUAxGN.jpg\",\n      \"themeid\": \"trip\",\n      \"module\": \"travels\",\n      \"destination\":\"色达\",\n      \"title\":\"川西色达，感受信仰的力量\",\n      \"content\":\"\",\n      \"createtime\":\"1493055500000\"\n    },\n    {\n      \"id\":1007,\n      \"userid\":\"u9007\",\n      \"nickname\": \"李留白\",\n      \"avatar\": \"http://p1.wmpic.me/article/2017/02/28/1488270792_LaBnPAaR_215x185.jpg\",\n      \"pic\": \"http://p3.wmpic.me/article/2017/02/17/1487312780_KWdvxsti.jpg\",\n      \"themeid\": \"trip\",\n      \"module\": \"travels\",\n      \"destination\":\"北疆\",\n      \"title\":\"醉美秋色，意外的北疆之旅\",\n      \"content\":\"\",\n      \"createtime\":\"1493355640000\"\n    },\n    {\n      \"id\":1008,\n      \"userid\":\"u9008\",\n      \"nickname\": \"李留白\",\n      \"avatar\": \"http://p2.wmpic.me/article/2017/02/24/1487902738_XdBlzdRu_215x185.jpg\",\n      \"pic\": \"http://p2.wmpic.me/article/2017/02/17/1487295910_vbjpzzCe.jpg\",\n      \"themeid\": \"trip\",\n      \"module\": \"travels\",\n      \"destination\":\"诸暨\",\n      \"title\":\"江南风韵，吴越柔情——“小雁荡”之旅\",\n      \"content\":\"\",\n      \"createtime\":\"1423455640000\"\n    },\n    {\n      \"id\":1009,\n      \"userid\":\"u9009\",\n      \"nickname\": \"李留白\",\n      \"avatar\": \"http://p3.wmpic.me/article/2017/03/01/1488338945_yYFHhlst.jpg\",\n      \"pic\": \"http://p2.wmpic.me/article/2017/02/17/1487311390_xttfRbPJ_215x185.jpg\",\n      \"themeid\": \"trip\",\n      \"module\": \"travels\",\n      \"destination\":\"夏威夷\",\n      \"title\":\"夏威夷的两周间\",\n      \"content\":\"\",\n      \"createtime\":\"1423355450000\"\n      },\n    {\n      \"id\":1010,\n      \"userid\":\"u9010\",\n      \"nickname\": \"李留白\",\n      \"avatar\": \"http://p2.wmpic.me/article/2017/02/22/1487730637_qHiHIzxH_215x185.jpg\",\n      \"pic\": \"http://p3.wmpic.me/article/2017/02/16/1487224457_xxmNBhjW_215x185.jpg\",\n      \"themeid\": \"trip\",\n      \"module\": \"travels\",\n      \"destination\":\"比利时\",\n      \"title\":\"中灰度<梦>境\",\n      \"content\":\"\",\n      \"createtime\":\"1465354670000\"\n    }\n  ]\n}\n"
  },
  {
    "path": "api/mockdata/vocality.json",
    "content": "{\n  \"errno\": 0,\n  \"data\": [\n    {\n      \"id\":1003,\n      \"userid\":\"u9003\",\n      \"nickname\": \"李留白\",\n      \"avatar\": \"http://p2.wmpic.me/article/2017/03/03/1488509527_rGNZPsMi.jpg\",\n      \"pic\": \"http://p3.wmpic.me/article/2017/03/07/1488868988_oeWjKIyl.jpg\",\n      \"musicurl\":\"http://fs.web.kugou.com/5861fa7bc75848e1c25dc2dd3992b925/58ec7282/G100/M07/05/0F/pA0DAFjrZL-AIwSDAEw1sU-h2zs456.mp3\",\n      \"imgurl\":\"http://singerimg.kugou.com/uploadpic/softhead/100/20170106/20170106171217388.jpg\",\n      \"singer\":\"张碧晨\",\n      \"songname\":\"时间有泪\",\n      \"themeid\": \"music\",\n      \"module\": \"vocality\",\n      \"createtime\":\"1490055600000\"\n    },\n    {\n      \"id\":1004,\n      \"userid\":\"u9004\",\n      \"nickname\": \"李留白\",\n      \"avatar\": \"http://p2.wmpic.me/article/2017/03/03/1488509527_gniRuexr.jpg\",\n      \"pic\": \"http://p3.wmpic.me/article/2017/03/07/1488868988_vXAUAxGN.jpg\",\n      \"musicurl\":\"http://fs.web.kugou.com/e281277712237ea6bc3499537c58e4db/58ec7b6b/G098/M02/05/18/QpQEAFjpCxaAf0HvADE9Yam3Ii0483.mp3\",\n      \"imgurl\":\"http://singerimg.kugou.com/uploadpic/softhead/100/20160530/20160530190530186681.jpg\",\n      \"singer\":\"林志炫\",\n      \"songname\":\"御龙铭千古\",\n      \"themeid\": \"music\",\n      \"module\": \"vocality\",\n      \"createtime\":\"1493055500000\"\n    },\n    {\n      \"id\":1001,\n      \"userid\":\"u9001\",\n      \"nickname\": \"李留白\",\n      \"avatar\": \"http://p1.wmpic.me/article/2017/03/06/1488780213_usvFXYIl.jpg\",\n      \"pic\": \"http://p3.wmpic.me/article/2015/12/15/1450149335_QCivaWCX.jpg\",\n      \"musicurl\":\"http://fs.web.kugou.com/926581decfc5edfa2f096c051262fbc6/58ec8894/G095/M03/08/05/nw0DAFjrP4CAHLIHAEAp2xcEy1Y549.mp3\",\n      \"singer\":\"汪峰\",\n      \"imgurl\":\"http://singerimg.kugou.com/uploadpic/softhead/100/20160426/20160426113231414.jpg\",\n      \"songname\":\"春天里\",\n      \"themeid\": \"music\",\n      \"module\": \"vocality\",\n      \"createtime\":\"1475164800000\"\n    },\n    {\n      \"id\":1002,\n      \"userid\":\"u9002\",\n      \"nickname\": \"扫地僧\",\n      \"avatar\": \"http://p1.wmpic.me/article/2017/03/06/1488768546_bdCSPuMc_215x185.jpg\",\n      \"pic\": \"http://p3.wmpic.me/article/2015/12/15/1450149335_WNRvtyWH.jpg\",\n      \"musicurl\":\"http://fs.web.kugou.com/749aacc989055b2e8e6c55df111fa1a6/58ec87d7/G009/M03/13/01/qYYBAFUGA1yAad3PAD60rYvYluM565.mp3\",\n      \"imgurl\":\"http://singerimg.kugou.com/uploadpic/softhead/100/20161019/20161019112334107316.jpg\",\n      \"singer\":\"李健\",\n      \"songname\":\"异乡人\",\n      \"themeid\": \"music\",\n      \"module\": \"vocality\",\n      \"createtime\":\"1485914400000\"\n    },\n    {\n      \"id\":1005,\n      \"userid\":\"u9005\",\n      \"nickname\": \"李留白\",\n      \"avatar\": \"http://p3.wmpic.me/article/2017/03/01/1488338945_iJTjMZEi.jpg\",\n      \"pic\": \"http://p3.wmpic.me/article/2017/02/17/1487312780_KLVpntpo.jpg\",\n      \"musicurl\":\"http://fs.web.kugou.com/b66ab1469dff97bbc6d3ce47adfe68e8/58ec8549/G017/M02/0E/13/sYYBAFU-37OAIOb1AExmrKAXGks355.mp3\",\n      \"imgurl\":\"http://singerimg.kugou.com/uploadpic/softhead/100/20160612/20160612182117928150.jpg\",\n      \"singer\":\"狮子合唱团\",\n      \"songname\":\"听不到\",\n      \"themeid\": \"music\",\n      \"module\": \"vocality\",\n      \"createtime\":\"1493355700000\"\n    },\n    {\n      \"id\":1006,\n      \"userid\":\"u9006\",\n      \"nickname\": \"李留白\",\n      \"avatar\": \"http://p3.wmpic.me/article/2017/03/01/1488338945_xCOozyoD.jpg\",\n      \"pic\": \"http://p3.wmpic.me/article/2017/02/17/1487312780_NxltIlts.jpg\",\n      \"musicurl\":\"http://fs.web.kugou.com/bdf1e4d00a0886c5c518630787f02dd8/58ec8312/G004/M05/0E/1F/RA0DAFUIQ76AEBjdAEAbtXxbJ-8509.mp3\",\n      \"imgurl\":\"http://singerimg.kugou.com/uploadpic/softhead/100/20170111/20170111104600449.jpg\",\n      \"singer\":\"张杰\",\n      \"songname\":\"突然想爱你\",\n      \"themeid\": \"music\",\n      \"module\": \"vocality\",\n      \"createtime\":\"1493155740000\"\n    },\n    {\n      \"id\":1007,\n      \"userid\":\"u9007\",\n      \"nickname\": \"李留白\",\n      \"avatar\": \"http://p1.wmpic.me/article/2017/02/28/1488270792_LaBnPAaR_215x185.jpg\",\n      \"pic\": \"http://p3.wmpic.me/article/2017/02/17/1487312780_KWdvxsti.jpg\",\n      \"musicurl\":\"http://fs.web.kugou.com/b006b4f852277232535add4bc991bf43/58ec802d/G010/M06/1D/19/Sg0DAFT-or2ATCrnAD5UFkMtfIc093.mp3\",\n      \"imgurl\":\"http://singerimg.kugou.com/uploadpic/softhead/100/20170109/20170109113028943.jpg\",\n      \"singer\":\"林忆莲\",\n      \"songname\":\"蓝莲花\",\n      \"themeid\": \"music\",\n      \"module\": \"vocality\",\n      \"createtime\":\"1493355640000\"\n    },\n    {\n      \"id\":1008,\n      \"userid\":\"u9008\",\n      \"nickname\": \"李留白\",\n      \"avatar\": \"http://p2.wmpic.me/article/2017/02/24/1487902738_XdBlzdRu_215x185.jpg\",\n      \"pic\": \"http://p2.wmpic.me/article/2017/02/17/1487295910_vbjpzzCe.jpg\",\n      \"musicurl\":\"http://fs.web.kugou.com/48ac9675365729b8698bc20609be8fd5/58ec8bd0/G076/M05/0D/19/LJQEAFgus_KAYhqoAEvriAx1-oU493.mp3\",\n      \"imgurl\":\"http://singerimg.kugou.com/uploadpic/softhead/100/20170110/20170110174433260.jpg\",\n      \"singer\":\"迪玛希\",\n      \"songname\":\"Daididau\",\n      \"themeid\": \"music\",\n      \"module\": \"vocality\",\n      \"createtime\":\"1423455640000\"\n    },\n    {\n      \"id\":1009,\n      \"userid\":\"u9009\",\n      \"nickname\": \"李留白\",\n      \"avatar\": \"http://p3.wmpic.me/article/2017/03/01/1488338945_yYFHhlst.jpg\",\n      \"pic\": \"http://p2.wmpic.me/article/2017/02/17/1487311390_xttfRbPJ_215x185.jpg\",\n      \"musicurl\":\"http://fs.web.kugou.com/d0c03431e188e8f0fea18db79ff0a32b/58ec8bc7/G006/M08/1D/11/poYBAFT7leyAKNokAEvKUZ7OdkE931.mp3\",\n      \"imgurl\":\"http://singerimg.kugou.com/uploadpic/softhead/100/20170110/20170110180849472.jpg\",\n      \"singer\":\"袁娅维\",\n      \"songname\":\"Golden\",\n      \"themeid\": \"music\",\n      \"module\": \"vocality\",\n      \"createtime\":\"1423355450000\"\n    },\n    {\n      \"id\":1010,\n      \"userid\":\"u9010\",\n      \"nickname\": \"李留白\",\n      \"avatar\": \"http://p2.wmpic.me/article/2017/02/22/1487730637_qHiHIzxH_215x185.jpg\",\n      \"pic\": \"http://p3.wmpic.me/article/2017/02/16/1487224457_xxmNBhjW_215x185.jpg\",\n      \"musicurl\":\"http://fs.web.kugou.com/a966f8a16c42f0f4130959fb3613aa3b/58ec8c05/G001/M01/0D/19/QQ0DAFSO1ZWAH7LDADwtteZZTJ8250.mp3\",\n      \"imgurl\":\"http://singerimg.kugou.com/uploadpic/softhead/100/20170205/20170205183509587.jpg\",\n      \"singer\":\"赵雷\",\n      \"songname\":\"成都\",\n      \"themeid\": \"music\",\n      \"module\": \"vocality\",\n      \"createtime\":\"1465354670000\"\n    }\n  ]\n}\n"
  },
  {
    "path": "build/build.js",
    "content": "// https://github.com/shelljs/shelljs\nrequire('./check-versions')()\n\nprocess.env.NODE_ENV = 'production'\n\nvar ora = require('ora')\nvar path = require('path')\nvar chalk = require('chalk')\nvar shell = require('shelljs')\nvar webpack = require('webpack')\nvar config = require('../config')\nvar webpackConfig = require('./webpack.prod.conf')\n\nvar spinner = ora('building for production...')\nspinner.start()\n\nvar assetsPath = path.join(config.build.assetsRoot, config.build.assetsSubDirectory)\nshell.rm('-rf', assetsPath)\nshell.mkdir('-p', assetsPath)\nshell.config.silent = true\nshell.cp('-R', 'static/*', assetsPath)\nshell.config.silent = false\n\nwebpack(webpackConfig, function (err, stats) {\n  spinner.stop()\n  if (err) throw err\n  process.stdout.write(stats.toString({\n    colors: true,\n    modules: false,\n    children: false,\n    chunks: false,\n    chunkModules: false\n  }) + '\\n\\n')\n\n  console.log(chalk.cyan('  Build complete.\\n'))\n  console.log(chalk.yellow(\n    '  Tip: built files are meant to be served over an HTTP server.\\n' +\n    '  Opening index.html over file:// won\\'t work.\\n'\n  ))\n})\n"
  },
  {
    "path": "build/check-versions.js",
    "content": "var chalk = require('chalk')\nvar semver = require('semver')\nvar packageConfig = require('../package.json')\n\nfunction exec (cmd) {\n  return require('child_process').execSync(cmd).toString().trim()\n}\n\nvar versionRequirements = [\n  {\n    name: 'node',\n    currentVersion: semver.clean(process.version),\n    versionRequirement: packageConfig.engines.node\n  },\n  {\n    name: 'npm',\n    currentVersion: exec('npm --version'),\n    versionRequirement: packageConfig.engines.npm\n  }\n]\n\nmodule.exports = function () {\n  var warnings = []\n  for (var i = 0; i < versionRequirements.length; i++) {\n    var mod = versionRequirements[i]\n    if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) {\n      warnings.push(mod.name + ': ' +\n        chalk.red(mod.currentVersion) + ' should be ' +\n        chalk.green(mod.versionRequirement)\n      )\n    }\n  }\n\n  if (warnings.length) {\n    console.log('')\n    console.log(chalk.yellow('To use this template, you must update following to modules:'))\n    console.log()\n    for (var i = 0; i < warnings.length; i++) {\n      var warning = warnings[i]\n      console.log('  ' + warning)\n    }\n    console.log()\n    process.exit(1)\n  }\n}\n"
  },
  {
    "path": "build/dev-client.js",
    "content": "/* eslint-disable */\nrequire('eventsource-polyfill')\nvar hotClient = require('webpack-hot-middleware/client?noInfo=true&reload=true')\n\nhotClient.subscribe(function (event) {\n  if (event.action === 'reload') {\n    window.location.reload()\n  }\n})\n"
  },
  {
    "path": "build/dev-server.js",
    "content": "require('./check-versions')()\n\nvar config = require('../config')\nif (!process.env.NODE_ENV) {\n  process.env.NODE_ENV = JSON.parse(config.dev.env.NODE_ENV)\n}\n\nvar opn = require('opn')\nvar path = require('path')\nvar express = require('express')\nvar webpack = require('webpack')\nvar proxyMiddleware = require('http-proxy-middleware')\nvar webpackConfig = require('./webpack.dev.conf')\n\n// default port where dev server listens for incoming traffic\nvar port = process.env.PORT || config.dev.port\n// automatically open browser, if not set will be false\nvar autoOpenBrowser = !!config.dev.autoOpenBrowser\n// Define HTTP proxies to your custom API backend\n// https://github.com/chimurai/http-proxy-middleware\nvar proxyTable = config.dev.proxyTable\n\nvar app = express()\n\nvar apiRoutes = require('../api/apiroutes.js')\n\napp.use('/api', apiRoutes);\n\nvar compiler = webpack(webpackConfig)\n\nvar devMiddleware = require('webpack-dev-middleware')(compiler, {\n  publicPath: webpackConfig.output.publicPath,\n  quiet: true\n})\n\nvar hotMiddleware = require('webpack-hot-middleware')(compiler, {\n  log: () => {}\n})\n// force page reload when html-webpack-plugin template changes\ncompiler.plugin('compilation', function (compilation) {\n  compilation.plugin('html-webpack-plugin-after-emit', function (data, cb) {\n    hotMiddleware.publish({ action: 'reload' })\n    cb()\n  })\n})\n\n// proxy api requests\nObject.keys(proxyTable).forEach(function (context) {\n  var options = proxyTable[context]\n  if (typeof options === 'string') {\n    options = { target: options }\n  }\n  app.use(proxyMiddleware(options.filter || context, options))\n})\n\n// handle fallback for HTML5 history API\napp.use(require('connect-history-api-fallback')())\n\n// serve webpack bundle output\napp.use(devMiddleware)\n\n// enable hot-reload and state-preserving\n// compilation error display\napp.use(hotMiddleware)\n\n// serve pure static assets\nvar staticPath = path.posix.join(config.dev.assetsPublicPath, config.dev.assetsSubDirectory)\napp.use(staticPath, express.static('./static'))\n\nvar uri = 'http://localhost:' + port\n\ndevMiddleware.waitUntilValid(function () {\n  console.log('> Listening at ' + uri + '\\n')\n})\n\nmodule.exports = app.listen(port, function (err) {\n  if (err) {\n    console.log(err)\n    return\n  }\n\n  // when env is testing, don't need open it\n  if (autoOpenBrowser && process.env.NODE_ENV !== 'testing') {\n    opn(uri)\n  }\n})\n"
  },
  {
    "path": "build/utils.js",
    "content": "var path = require('path')\nvar config = require('../config')\nvar ExtractTextPlugin = require('extract-text-webpack-plugin')\n\nexports.assetsPath = function (_path) {\n  var assetsSubDirectory = process.env.NODE_ENV === 'production'\n    ? config.build.assetsSubDirectory\n    : config.dev.assetsSubDirectory\n  return path.posix.join(assetsSubDirectory, _path)\n}\n\nexports.cssLoaders = function (options) {\n  options = options || {}\n  // generate loader string to be used with extract text plugin\n  function generateLoaders (loaders) {\n    var sourceLoader = loaders.map(function (loader) {\n      var extraParamChar\n      if (/\\?/.test(loader)) {\n        loader = loader.replace(/\\?/, '-loader?')\n        extraParamChar = '&'\n      } else {\n        loader = loader + '-loader'\n        extraParamChar = '?'\n      }\n      return loader + (options.sourceMap ? extraParamChar + 'sourceMap' : '')\n    }).join('!')\n\n    // Extract CSS when that option is specified\n    // (which is the case during production build)\n    if (options.extract) {\n      return ExtractTextPlugin.extract({\n        loader: sourceLoader,\n        fallbackLoader: 'vue-style-loader'\n      })\n    } else {\n      return ['vue-style-loader', sourceLoader].join('!')\n    }\n  }\n\n  // http://vuejs.github.io/vue-loader/en/configurations/extract-css.html\n  return {\n    css: generateLoaders(['css']),\n    postcss: generateLoaders(['css']),\n    less: generateLoaders(['css', 'less']),\n    sass: generateLoaders(['css', 'sass?indentedSyntax']),\n    scss: generateLoaders(['css', 'sass']),\n    stylus: generateLoaders(['css', 'stylus']),\n    styl: generateLoaders(['css', 'stylus'])\n  }\n}\n\n// Generate loaders for standalone style files (outside of .vue)\nexports.styleLoaders = function (options) {\n  var output = []\n  var loaders = exports.cssLoaders(options)\n  for (var extension in loaders) {\n    var loader = loaders[extension]\n    output.push({\n      test: new RegExp('\\\\.' + extension + '$'),\n      loader: loader\n    })\n  }\n  return output\n}\n"
  },
  {
    "path": "build/vue-loader.conf.js",
    "content": "var utils = require('./utils')\nvar config = require('../config')\nvar isProduction = process.env.NODE_ENV === 'production'\n\nmodule.exports = {\n  loaders: utils.cssLoaders({\n    sourceMap: isProduction\n      ? config.build.productionSourceMap\n      : config.dev.cssSourceMap,\n    extract: isProduction\n  }),\n  postcss: [\n    require('autoprefixer')({\n      browsers: ['last 2 versions']\n    })\n  ]\n}\n"
  },
  {
    "path": "build/webpack.base.conf.js",
    "content": "var path = require('path')\nvar utils = require('./utils')\nvar config = require('../config')\nvar vueLoaderConfig = require('./vue-loader.conf')\nvar eslintFriendlyFormatter = require('eslint-friendly-formatter')\n\nfunction resolve (dir) {\n  return path.join(__dirname, '..', dir)\n}\n\nmodule.exports = {\n  entry: {\n    app: './src/main.js'\n  },\n  output: {\n    path: config.build.assetsRoot,\n    filename: '[name].js',\n    publicPath: process.env.NODE_ENV === 'production'\n      ? config.build.assetsPublicPath\n      : config.dev.assetsPublicPath\n  },\n  resolve: {\n    extensions: ['.js', '.vue', '.json'],\n    modules: [\n      resolve('src'),\n      resolve('node_modules')\n    ],\n    alias: {\n      'vue$': 'vue/dist/vue.common.js',\n      'src': resolve('src'),\n      'assets': resolve('src/assets'),\n      'components': resolve('src/components'),\n      'pages': resolve('src/pages')\n    }\n  },\n  module: {\n    rules: [\n      {\n        test: /\\.vue$/,\n        loader: 'vue-loader',\n        options: vueLoaderConfig\n      },\n      {\n        test: /\\.js$/,\n        loader: 'babel-loader',\n        include: [resolve('src'), resolve('test')]\n      },\n      {\n        test: /\\.json$/,\n        loader: 'json-loader'\n      },\n      {\n        test: /\\.(png|jpe?g|gif|svg)(\\?.*)?$/,\n        loader: 'url-loader',\n        query: {\n          limit: 10000,\n          name: utils.assetsPath('img/[name].[hash:7].[ext]')\n        }\n      },\n      {\n        test: /\\.(woff2?|eot|ttf|otf)(\\?.*)?$/,\n        loader: 'url-loader',\n        query: {\n          limit: 10000,\n          name: utils.assetsPath('fonts/[name].[hash:7].[ext]')\n        }\n      }\n    ]\n  }\n}\n"
  },
  {
    "path": "build/webpack.dev.conf.js",
    "content": "var utils = require('./utils')\nvar webpack = require('webpack')\nvar config = require('../config')\nvar merge = require('webpack-merge')\nvar baseWebpackConfig = require('./webpack.base.conf')\nvar HtmlWebpackPlugin = require('html-webpack-plugin')\nvar FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin')\n\n// add hot-reload related code to entry chunks\nObject.keys(baseWebpackConfig.entry).forEach(function (name) {\n  baseWebpackConfig.entry[name] = ['./build/dev-client'].concat(baseWebpackConfig.entry[name])\n})\n\nmodule.exports = merge(baseWebpackConfig, {\n  module: {\n    rules: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap })\n  },\n  // cheap-module-eval-source-map is faster for development\n  devtool: '#cheap-module-eval-source-map',\n  plugins: [\n    new webpack.DefinePlugin({\n      'process.env': config.dev.env\n    }),\n    // https://github.com/glenjamin/webpack-hot-middleware#installation--usage\n    new webpack.HotModuleReplacementPlugin(),\n    new webpack.NoEmitOnErrorsPlugin(),\n    // https://github.com/ampedandwired/html-webpack-plugin\n    new HtmlWebpackPlugin({\n      filename: 'index.html',\n      template: 'index.html',\n      inject: true\n    }),\n    new FriendlyErrorsPlugin()\n  ]\n})\n"
  },
  {
    "path": "build/webpack.prod.conf.js",
    "content": "var path = require('path')\nvar utils = require('./utils')\nvar webpack = require('webpack')\nvar config = require('../config')\nvar merge = require('webpack-merge')\nvar baseWebpackConfig = require('./webpack.base.conf')\nvar HtmlWebpackPlugin = require('html-webpack-plugin')\nvar ExtractTextPlugin = require('extract-text-webpack-plugin')\nvar env = config.build.env\n\nvar webpackConfig = merge(baseWebpackConfig, {\n  module: {\n    rules: utils.styleLoaders({\n      sourceMap: config.build.productionSourceMap,\n      extract: true\n    })\n  },\n  devtool: config.build.productionSourceMap ? '#source-map' : false,\n  output: {\n    path: config.build.assetsRoot,\n    filename: utils.assetsPath('js/[name].[chunkhash].js'),\n    chunkFilename: utils.assetsPath('js/[id].[chunkhash].js')\n  },\n  plugins: [\n    // http://vuejs.github.io/vue-loader/en/workflow/production.html\n    new webpack.DefinePlugin({\n      'process.env': env\n    }),\n    new webpack.optimize.UglifyJsPlugin({\n      compress: {\n        warnings: false\n      }\n    }),\n    // extract css into its own file\n    new ExtractTextPlugin(utils.assetsPath('css/[name].[contenthash].css')),\n    // generate dist index.html with correct asset hash for caching.\n    // you can customize output by editing /index.html\n    // see https://github.com/ampedandwired/html-webpack-plugin\n    new HtmlWebpackPlugin({\n      filename: config.build.index,\n      template: 'index.html',\n      inject: true,\n      minify: {\n        removeComments: true,\n        collapseWhitespace: true,\n        removeAttributeQuotes: true\n        // more options:\n        // https://github.com/kangax/html-minifier#options-quick-reference\n      },\n      // necessary to consistently work with multiple chunks via CommonsChunkPlugin\n      chunksSortMode: 'dependency'\n    }),\n    // split vendor js into its own file\n    new webpack.optimize.CommonsChunkPlugin({\n      name: 'vendor',\n      minChunks: function (module, count) {\n        // any required modules inside node_modules are extracted to vendor\n        return (\n          module.resource &&\n          /\\.js$/.test(module.resource) &&\n          module.resource.indexOf(\n            path.join(__dirname, '../node_modules')\n          ) === 0\n        )\n      }\n    }),\n    // extract webpack runtime and module manifest to its own file in order to\n    // prevent vendor hash from being updated whenever app bundle is updated\n    new webpack.optimize.CommonsChunkPlugin({\n      name: 'manifest',\n      chunks: ['vendor']\n    })\n  ]\n})\n\nif (config.build.productionGzip) {\n  var CompressionWebpackPlugin = require('compression-webpack-plugin')\n\n  webpackConfig.plugins.push(\n    new CompressionWebpackPlugin({\n      asset: '[path].gz[query]',\n      algorithm: 'gzip',\n      test: new RegExp(\n        '\\\\.(' +\n        config.build.productionGzipExtensions.join('|') +\n        ')$'\n      ),\n      threshold: 10240,\n      minRatio: 0.8\n    })\n  )\n}\n\nif (config.build.bundleAnalyzerReport) {\n  var BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin\n  webpackConfig.plugins.push(new BundleAnalyzerPlugin())\n}\n\nmodule.exports = webpackConfig\n"
  },
  {
    "path": "config/dev.env.js",
    "content": "var merge = require('webpack-merge')\nvar prodEnv = require('./prod.env')\n\nmodule.exports = merge(prodEnv, {\n  NODE_ENV: '\"development\"'\n})\n"
  },
  {
    "path": "config/index.js",
    "content": "// see http://vuejs-templates.github.io/webpack for documentation.\nvar path = require('path')\n\nmodule.exports = {\n  build: {\n    env: require('./prod.env'),\n    index: path.resolve(__dirname, '../dist/index.html'),\n    assetsRoot: path.resolve(__dirname, '../dist'),\n    assetsSubDirectory: 'static',\n    assetsPublicPath: '/',\n    productionSourceMap: true,\n    // Gzip off by default as many popular static hosts such as\n    // Surge or Netlify already gzip all static assets for you.\n    // Before setting to `true`, make sure to:\n    // npm install --save-dev compression-webpack-plugin\n    productionGzip: false,\n    productionGzipExtensions: ['js', 'css'],\n    // Run the build command with an extra argument to\n    // View the bundle analyzer report after build finishes:\n    // `npm run build --report`\n    // Set to `true` or `false` to always turn it on or off\n    bundleAnalyzerReport: process.env.npm_config_report\n  },\n  dev: {\n    env: require('./dev.env'),\n    port: 8090,\n    autoOpenBrowser: true,\n    assetsSubDirectory: 'static',\n    assetsPublicPath: '/',\n    proxyTable: {},\n    // CSS Sourcemaps off by default because relative paths are \"buggy\"\n    // with this option, according to the CSS-Loader README\n    // (https://github.com/webpack/css-loader#sourcemaps)\n    // In our experience, they generally work as expected,\n    // just be aware of this issue when enabling this option.\n    cssSourceMap: false\n  }\n}\n"
  },
  {
    "path": "config/prod.env.js",
    "content": "module.exports = {\n  NODE_ENV: '\"production\"'\n}\n"
  },
  {
    "path": "index.html",
    "content": "<!DOCTYPE html>\n<html>\n\n<head>\n\t<meta charset=\"utf-8\">\n\t<title>timecat</title>\n\t<meta name=\"viewport\" content=\"width=device-width,initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.0,user-scalable=no\">\n\t<link rel=\"stylesheet\" href=\"./static/css/reset.css\">\n</head>\n\n<body>\n\t<div id=\"app\"></div>\n</body>\n\n</html>\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"timecat\",\n  \"version\": \"1.0.0\",\n  \"description\": \"时光留白-图片分享App\",\n  \"author\": \"hicoldcat <1351290389@qq.com>\",\n  \"private\": true,\n  \"scripts\": {\n    \"dev\": \"node build/dev-server.js\",\n    \"build\": \"node build/build.js\"\n  },\n  \"dependencies\": {\n    \"axios\": \"^0.15.3\",\n    \"element-ui\": \"^1.2.5\",\n    \"vue\": \"^2.1.10\",\n    \"vue-router\": \"^2.2.0\",\n    \"vuex\": \"^2.1.1\"\n  },\n  \"devDependencies\": {\n    \"autoprefixer\": \"^6.7.2\",\n    \"babel-core\": \"^6.22.1\",\n    \"babel-loader\": \"^6.2.10\",\n    \"babel-plugin-transform-runtime\": \"^6.22.0\",\n    \"babel-preset-es2015\": \"^6.22.0\",\n    \"babel-preset-stage-2\": \"^6.22.0\",\n    \"babel-register\": \"^6.22.0\",\n    \"chalk\": \"^1.1.3\",\n    \"connect-history-api-fallback\": \"^1.3.0\",\n    \"css-loader\": \"^0.26.1\",\n    \"eslint-friendly-formatter\": \"^2.0.7\",\n    \"eventsource-polyfill\": \"^0.9.6\",\n    \"express\": \"^4.14.1\",\n    \"extract-text-webpack-plugin\": \"^2.0.0-rc.2\",\n    \"file-loader\": \"^0.10.0\",\n    \"friendly-errors-webpack-plugin\": \"^1.1.3\",\n    \"function-bind\": \"^1.1.0\",\n    \"html-webpack-plugin\": \"^2.28.0\",\n    \"http-proxy-middleware\": \"^0.17.3\",\n    \"json-loader\": \"^0.5.4\",\n    \"less\": \"^2.7.2\",\n    \"less-loader\": \"^2.2.3\",\n    \"opn\": \"^4.0.2\",\n    \"ora\": \"^1.1.0\",\n    \"semver\": \"^5.3.0\",\n    \"shelljs\": \"^0.7.6\",\n    \"url-loader\": \"^0.5.7\",\n    \"vue-loader\": \"^10.3.0\",\n    \"vue-style-loader\": \"^2.0.0\",\n    \"vue-template-compiler\": \"^2.1.10\",\n    \"webpack\": \"^2.2.1\",\n    \"webpack-bundle-analyzer\": \"^2.2.1\",\n    \"webpack-dev-middleware\": \"^1.10.0\",\n    \"webpack-hot-middleware\": \"^2.16.1\",\n    \"webpack-merge\": \"^2.6.1\"\n  },\n  \"engines\": {\n    \"node\": \">= 4.0.0\",\n    \"npm\": \">= 3.0.0\"\n  }\n}\n"
  },
  {
    "path": "src/App.vue",
    "content": "<template>\n\t<div class=\"app\">\n\t\t<v-header v-show=\"!isDetailHeader\"></v-header>\n\t\t<detail-header :nickname=\"detailHeaderNickName\"  v-show=\"isDetailHeader\"></detail-header>\n\t\t<router-view class=\"content\"></router-view>\n\t\t<slide-bar></slide-bar>\n\t</div>\n</template>\n\n<script>\nimport { mapGetters, mapActions } from 'vuex'\n\nimport Header from 'components/header/Header.vue'\nimport DetailHeader from 'components/detailheader/DetailHeader.vue'\nimport SlideBar from 'components/slidebar/SlideBar.vue'\n\n\texport default {\n\t\tdata () {\n\t\t\treturn {\n\t\t\t\tnickname: ''\n\t\t\t}\n\t\t},\n\t\tcomputed: mapGetters({\n\t\t\tisDetailHeader: 'isDetailHeader',\n\t\t\tdetailHeaderNickName: 'detailHeaderNickName'\n\t  }),\n\t\tcomponents: {\n\t    \"v-header\": Header,\n\t\t\t\"slide-bar\": SlideBar,\n\t\t\t\"detail-header\": DetailHeader,\n\t  }\n\t}\n</script>\n\n<style lang=\"less\">\n\t.app{\n\t\theight: 100%;\n\t}\n\t.content{\n\t\tmargin-top: 60px;\n\t}\n</style>\n"
  },
  {
    "path": "src/assets/less/icon.less",
    "content": "@font-face {\n  font-family: 'icon';\n  src:  url('../fonts/icon.eot?g68udz');\n  src:  url('../fonts/icon.eot?g68udz#iefix') format('embedded-opentype'),\n    url('../fonts/icon.ttf?g68udz') format('truetype'),\n    url('../fonts/icon.woff?g68udz') format('woff'),\n    url('../fonts/icon.svg?g68udz#icon') format('svg');\n  font-weight: normal;\n  font-style: normal;\n}\n\n[class^=\"icon-\"], [class*=\" icon-\"] {\n  /* use !important to prevent issues with browser extensions that change fonts */\n  font-family: 'icon' !important;\n  speak: none;\n  font-style: normal;\n  font-weight: normal;\n  font-variant: normal;\n  text-transform: none;\n  line-height: 1;\n\n  /* Better Font Rendering =========== */\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\n.icon-diamond:before {\n  content: \"\\e90e\";\n}\n.icon-diamond_article:before {\n  content: \"\\e910\";\n}\n.icon-diamond_commend:before {\n  content: \"\\e912\";\n}\n.icon-diamond_fm:before {\n  content: \"\\e913\";\n}\n.icon-diamond_list:before {\n  content: \"\\e914\";\n}\n.icon-diamond_music:before {\n  content: \"\\e915\";\n}\n.icon-diamond_newmusic:before {\n  content: \"\\e916\";\n}\n.icon-diamond_play:before {\n  content: \"\\e917\";\n}\n.icon-diamond_playcard:before {\n  content: \"\\e918\";\n}\n.icon-diamond_share:before {\n  content: \"\\e919\";\n}\n.icon-fourhouse:before {\n  content: \"\\e90c\";\n}\n.icon-add_circle:before {\n  content: \"\\e901\";\n}\n.icon-arrow_lift:before {\n  content: \"\\e902\";\n}\n.icon-check_circle:before {\n  content: \"\\e903\";\n}\n.icon-close:before {\n  content: \"\\e904\";\n}\n.icon-favorite:before {\n  content: \"\\e906\";\n}\n.icon-keyboard_arrow_right:before {\n  content: \"\\e907\";\n}\n.icon-remove_circle_outline:before {\n  content: \"\\e908\";\n}\n.icon-shopping_cart:before {\n  content: \"\\e909\";\n}\n.icon-thumb_down:before {\n  content: \"\\e90a\";\n}\n.icon-thumb_up:before {\n  content: \"\\e90b\";\n}\n.icon-home:before {\n  content: \"\\e900\";\n}\n.icon-home2:before {\n  content: \"\\e91a\";\n}\n.icon-home3:before {\n  content: \"\\e91b\";\n}\n.icon-office:before {\n  content: \"\\e91c\";\n}\n.icon-newspaper:before {\n  content: \"\\e91d\";\n}\n.icon-pencil:before {\n  content: \"\\e905\";\n}\n.icon-pencil2:before {\n  content: \"\\e91e\";\n}\n.icon-quill:before {\n  content: \"\\e91f\";\n}\n.icon-pen:before {\n  content: \"\\e920\";\n}\n.icon-blog:before {\n  content: \"\\e921\";\n}\n.icon-eyedropper:before {\n  content: \"\\e922\";\n}\n.icon-droplet:before {\n  content: \"\\e923\";\n}\n.icon-paint-format:before {\n  content: \"\\e924\";\n}\n.icon-image:before {\n  content: \"\\e90d\";\n}\n.icon-images:before {\n  content: \"\\e925\";\n}\n.icon-camera:before {\n  content: \"\\e90f\";\n}\n.icon-headphones:before {\n  content: \"\\e926\";\n}\n.icon-music:before {\n  content: \"\\e911\";\n}\n.icon-play:before {\n  content: \"\\e927\";\n}\n.icon-film:before {\n  content: \"\\e928\";\n}\n.icon-video-camera:before {\n  content: \"\\e929\";\n}\n.icon-dice:before {\n  content: \"\\e92a\";\n}\n.icon-pacman:before {\n  content: \"\\e92b\";\n}\n.icon-spades:before {\n  content: \"\\e92c\";\n}\n.icon-clubs:before {\n  content: \"\\e92d\";\n}\n.icon-connection:before {\n  content: \"\\e92e\";\n}\n.icon-book:before {\n  content: \"\\e92f\";\n}\n.icon-books:before {\n  content: \"\\e930\";\n}\n.icon-library:before {\n  content: \"\\e931\";\n}\n.icon-file-text:before {\n  content: \"\\e932\";\n}\n.icon-profile:before {\n  content: \"\\e933\";\n}\n.icon-file-text2:before {\n  content: \"\\e934\";\n}\n.icon-barcode:before {\n  content: \"\\e937\";\n}\n.icon-qrcode:before {\n  content: \"\\e938\";\n}\n.icon-cart:before {\n  content: \"\\e93a\";\n}\n.icon-coin-dollar:before {\n  content: \"\\e93b\";\n}\n.icon-credit-card:before {\n  content: \"\\e93f\";\n}\n.icon-phone:before {\n  content: \"\\e942\";\n}\n.icon-phone-hang-up:before {\n  content: \"\\e943\";\n}\n.icon-address-book:before {\n  content: \"\\e944\";\n}\n.icon-location:before {\n  content: \"\\e947\";\n}\n.icon-location2:before {\n  content: \"\\e948\";\n}\n.icon-compass:before {\n  content: \"\\e949\";\n}\n.icon-compass2:before {\n  content: \"\\e94a\";\n}\n.icon-history:before {\n  content: \"\\e94d\";\n}\n.icon-clock:before {\n  content: \"\\e94e\";\n}\n.icon-clock2:before {\n  content: \"\\e94f\";\n}\n.icon-alarm:before {\n  content: \"\\e950\";\n}\n.icon-stopwatch:before {\n  content: \"\\e952\";\n}\n.icon-calendar:before {\n  content: \"\\e953\";\n}\n.icon-display:before {\n  content: \"\\e956\";\n}\n.icon-mobile:before {\n  content: \"\\e958\";\n}\n.icon-mobile2:before {\n  content: \"\\e959\";\n}\n.icon-tv:before {\n  content: \"\\e95b\";\n}\n.icon-floppy-disk:before {\n  content: \"\\e962\";\n}\n.icon-database:before {\n  content: \"\\e964\";\n}\n.icon-undo:before {\n  content: \"\\e965\";\n}\n.icon-redo:before {\n  content: \"\\e966\";\n}\n.icon-undo2:before {\n  content: \"\\e967\";\n}\n.icon-redo2:before {\n  content: \"\\e968\";\n}\n.icon-forward:before {\n  content: \"\\e969\";\n}\n.icon-reply:before {\n  content: \"\\e96a\";\n}\n.icon-bubbles:before {\n  content: \"\\e96c\";\n}\n.icon-bubbles2:before {\n  content: \"\\e96d\";\n}\n.icon-bubble2:before {\n  content: \"\\e96e\";\n}\n.icon-bubbles3:before {\n  content: \"\\e96f\";\n}\n.icon-user:before {\n  content: \"\\e971\";\n}\n.icon-users:before {\n  content: \"\\e972\";\n}\n.icon-user-plus:before {\n  content: \"\\e973\";\n}\n.icon-user-minus:before {\n  content: \"\\e974\";\n}\n.icon-user-check:before {\n  content: \"\\e975\";\n}\n.icon-user-tie:before {\n  content: \"\\e976\";\n}\n.icon-quotes-left:before {\n  content: \"\\e977\";\n}\n.icon-quotes-right:before {\n  content: \"\\e978\";\n}\n.icon-hour-glass:before {\n  content: \"\\e979\";\n}\n.icon-spinner:before {\n  content: \"\\e97a\";\n}\n.icon-spinner2:before {\n  content: \"\\e97b\";\n}\n.icon-spinner3:before {\n  content: \"\\e97c\";\n}\n.icon-spinner4:before {\n  content: \"\\e97d\";\n}\n.icon-spinner5:before {\n  content: \"\\e97e\";\n}\n.icon-spinner6:before {\n  content: \"\\e97f\";\n}\n.icon-spinner7:before {\n  content: \"\\e980\";\n}\n.icon-spinner9:before {\n  content: \"\\e982\";\n}\n.icon-spinner10:before {\n  content: \"\\e983\";\n}\n.icon-spinner11:before {\n  content: \"\\e984\";\n}\n.icon-search:before {\n  content: \"\\e986\";\n}\n.icon-zoom-in:before {\n  content: \"\\e987\";\n}\n.icon-zoom-out:before {\n  content: \"\\e988\";\n}\n.icon-enlarge:before {\n  content: \"\\e989\";\n}\n.icon-shrink:before {\n  content: \"\\e98a\";\n}\n.icon-enlarge2:before {\n  content: \"\\e98b\";\n}\n.icon-shrink2:before {\n  content: \"\\e98c\";\n}\n.icon-key:before {\n  content: \"\\e98d\";\n}\n.icon-key2:before {\n  content: \"\\e98e\";\n}\n.icon-lock:before {\n  content: \"\\e98f\";\n}\n.icon-unlocked:before {\n  content: \"\\e990\";\n}\n.icon-wrench:before {\n  content: \"\\e991\";\n}\n.icon-equalizer:before {\n  content: \"\\e992\";\n}\n.icon-equalizer2:before {\n  content: \"\\e993\";\n}\n.icon-cog:before {\n  content: \"\\e994\";\n}\n.icon-cogs:before {\n  content: \"\\e995\";\n}\n.icon-hammer:before {\n  content: \"\\e996\";\n}\n.icon-magic-wand:before {\n  content: \"\\e997\";\n}\n.icon-aid-kit:before {\n  content: \"\\e998\";\n}\n.icon-stats-dots:before {\n  content: \"\\e99b\";\n}\n.icon-stats-bars:before {\n  content: \"\\e99c\";\n}\n.icon-stats-bars2:before {\n  content: \"\\e99d\";\n}\n.icon-trophy:before {\n  content: \"\\e99e\";\n}\n.icon-gift:before {\n  content: \"\\e99f\";\n}\n.icon-list-numbered:before {\n  content: \"\\e9b9\";\n}\n.icon-list:before {\n  content: \"\\e9ba\";\n}\n.icon-list2:before {\n  content: \"\\e9bb\";\n}\n.icon-tree:before {\n  content: \"\\e9bc\";\n}\n.icon-menu:before {\n  content: \"\\e9bd\";\n}\n.icon-menu2:before {\n  content: \"\\e9be\";\n}\n.icon-menu3:before {\n  content: \"\\e9bf\";\n}\n.icon-download2:before {\n  content: \"\\e9c5\";\n}\n.icon-upload2:before {\n  content: \"\\e9c6\";\n}\n.icon-download3:before {\n  content: \"\\e9c7\";\n}\n.icon-upload3:before {\n  content: \"\\e9c8\";\n}\n.icon-sphere:before {\n  content: \"\\e9c9\";\n}\n.icon-earth:before {\n  content: \"\\e9ca\";\n}\n.icon-link:before {\n  content: \"\\e9cb\";\n}\n.icon-flag:before {\n  content: \"\\e9cc\";\n}\n.icon-attachment:before {\n  content: \"\\e9cd\";\n}\n.icon-eye:before {\n  content: \"\\e9ce\";\n}\n.icon-eye-plus:before {\n  content: \"\\e9cf\";\n}\n.icon-eye-minus:before {\n  content: \"\\e9d0\";\n}\n.icon-eye-blocked:before {\n  content: \"\\e9d1\";\n}\n.icon-bookmark:before {\n  content: \"\\e9d2\";\n}\n.icon-bookmarks:before {\n  content: \"\\e9d3\";\n}\n.icon-sun:before {\n  content: \"\\e9d4\";\n}\n.icon-contrast:before {\n  content: \"\\e9d5\";\n}\n.icon-brightness-contrast:before {\n  content: \"\\e9d6\";\n}\n.icon-star-empty:before {\n  content: \"\\e9d7\";\n}\n.icon-star-half:before {\n  content: \"\\e9d8\";\n}\n.icon-star-full:before {\n  content: \"\\e9d9\";\n}\n.icon-heart:before {\n  content: \"\\e9da\";\n}\n.icon-heart-broken:before {\n  content: \"\\e9db\";\n}\n.icon-plus:before {\n  content: \"\\ea0a\";\n}\n.icon-minus:before {\n  content: \"\\ea0b\";\n}\n.icon-play3:before {\n  content: \"\\ea1c\";\n}\n.icon-pause2:before {\n  content: \"\\ea1d\";\n}\n.icon-stop2:before {\n  content: \"\\ea1e\";\n}\n.icon-backward2:before {\n  content: \"\\ea1f\";\n}\n.icon-forward3:before {\n  content: \"\\ea20\";\n}\n.icon-first:before {\n  content: \"\\ea21\";\n}\n.icon-last:before {\n  content: \"\\ea22\";\n}\n.icon-previous2:before {\n  content: \"\\ea23\";\n}\n.icon-next2:before {\n  content: \"\\ea24\";\n}\n.icon-eject:before {\n  content: \"\\ea25\";\n}\n.icon-volume-high:before {\n  content: \"\\ea26\";\n}\n.icon-volume-medium:before {\n  content: \"\\ea27\";\n}\n.icon-volume-low:before {\n  content: \"\\ea28\";\n}\n.icon-volume-mute:before {\n  content: \"\\ea29\";\n}\n.icon-volume-mute2:before {\n  content: \"\\ea2a\";\n}\n.icon-volume-increase:before {\n  content: \"\\ea2b\";\n}\n.icon-volume-decrease:before {\n  content: \"\\ea2c\";\n}\n.icon-loop2:before {\n  content: \"\\ea2e\";\n}\n.icon-checkbox-checked:before {\n  content: \"\\ea52\";\n}\n.icon-checkbox-unchecked:before {\n  content: \"\\ea53\";\n}\n.icon-radio-checked:before {\n  content: \"\\ea54\";\n}\n.icon-radio-checked2:before {\n  content: \"\\ea55\";\n}\n.icon-radio-unchecked:before {\n  content: \"\\ea56\";\n}\n.icon-section:before {\n  content: \"\\ea76\";\n}\n.icon-paragraph-left:before {\n  content: \"\\ea77\";\n}\n.icon-paragraph-center:before {\n  content: \"\\ea78\";\n}\n.icon-paragraph-right:before {\n  content: \"\\ea79\";\n}\n.icon-paragraph-justify:before {\n  content: \"\\ea7a\";\n}\n.icon-indent-increase:before {\n  content: \"\\ea7b\";\n}\n.icon-indent-decrease:before {\n  content: \"\\ea7c\";\n}\n.icon-share:before {\n  content: \"\\ea7d\";\n}\n.icon-embed:before {\n  content: \"\\ea7f\";\n}\n.icon-embed2:before {\n  content: \"\\ea80\";\n}\n.icon-terminal:before {\n  content: \"\\ea81\";\n}\n.icon-share2:before {\n  content: \"\\ea82\";\n}\n.icon-mail:before {\n  content: \"\\ea83\";\n}\n.icon-mail2:before {\n  content: \"\\ea84\";\n}\n.icon-mail4:before {\n  content: \"\\ea86\";\n}\n.icon-google:before {\n  content: \"\\ea88\";\n}\n.icon-google-drive:before {\n  content: \"\\ea8f\";\n}\n.icon-instagram:before {\n  content: \"\\ea92\";\n}\n.icon-telegram:before {\n  content: \"\\ea95\";\n}\n.icon-sina-weibo:before {\n  content: \"\\ea9a\";\n}\n.icon-flickr:before {\n  content: \"\\eaa3\";\n}\n.icon-flickr2:before {\n  content: \"\\eaa4\";\n}\n.icon-github:before {\n  content: \"\\eab0\";\n}\n.icon-delicious:before {\n  content: \"\\eacd\";\n}\n"
  },
  {
    "path": "src/assets/less/index.less",
    "content": "@import \"./icon.less\";\n"
  },
  {
    "path": "src/assets/less/mixin.less",
    "content": "@baseBoxBackground:#fff;//盒子背景\n"
  },
  {
    "path": "src/components/article/Article.vue",
    "content": "<template>\n  <div class=\"article\">\n    <div class=\"box\">\n      <pic-box :src=\"article.pic\"></pic-box>\n      <div class=\"title\">{{'「'+article.title+'」'}}</div>\n      <bottom-bar :nickname=\"article.nickname\" :avatar=\"article.avatar\" :time=\"article.time\" :userid=\"article.userid\"></bottom-bar>\n    </div>\n  </div>\n</template>\n\n<script>\nimport PicBox from 'components/picbox/PicBox'\nimport BottomBar from 'components/bottombar/BottomBar'\n\n\nexport default {\n  props: {\n    article: {\n      type: Object\n    }\n  },\n  components: {\n    \"bottom-bar\": BottomBar,\n    \"pic-box\": PicBox\n  }\n}\n</script>\n\n<style lang=\"less\">\n@baseBackgroundColor:#fff;\n\n.article {\n    position: relative;\n    width: 100%;\n    background-color: #fff;\n\n    .box {\n        position: relative;\n        width: 90%;\n        background-color: @baseBackgroundColor;\n        margin: 0 auto;\n        // border: 1px solid #d1dbe5;\n        margin: 0 auto;\n        // box-shadow:0 2px 4px 0 rgba(0,0,0,.12), 0 0 6px 0 rgba(0,0,0,.04);\n        box-shadow: 0 0 30px -7px rgba(0,0,0,.3);\n        padding: 5px 0;\n        border-radius:4px;\n\n        .title {\n          font-size: 16px;\n          font-weight: 400;\n          font-family: fangzheng;\n          margin:3%;\n          padding: 5% 0;\n          width: 80%;\n          overflow: hidden;\n          white-space: nowrap;\n          text-overflow: ellipsis;\n        }\n\n    }\n}\n</style>\n"
  },
  {
    "path": "src/components/bottombar/BottomBar.vue",
    "content": "<template>\n  <div class=\"bottom\">\n    <div class=\"time\">\n      <div class=\"day\">\n        Feb.02\n      </div>\n      <div class=\"year\">\n        2017\n      </div>\n      <div class=\"plus\">+</div>\n    </div>\n    <div class=\"owner\" @click=\"goPersonalPages(userid,nickname)\">\n      <div class=\"avatar\">\n        <img :src=\"avatarUrl\" alt=\"\" @error=\"setErrorAvatar\">\n      </div>\n      <div class=\"name\">\n        {{nickname}}\n      </div>\n    </div>\n  </div>\n</template>\n\n<script>\nexport default {\n  props: {\n    time: {\n      type: String\n    },\n    avatar: {\n      type: String\n    },\n    nickname: {\n      type: String\n    },\n    userid: {\n      type: String\n    }\n  },\n  data () {\n    return {\n      avatarUrl: this.avatar\n    }\n  },\n  methods: {\n    goPersonalPages (uid,nickname) {\n      if (this.$route.name !== 'personal'){\n        if (uid && nickname) {\n          this.$store.dispatch('goPersonalPages',{userId:uid})\n          this.$store.dispatch('toggleheader',{nickname:nickname})\n        }\n      }\n    },\n    setErrorAvatar () {\n      this.$nextTick(function () {\n        let errorImgUrl = require('../../assets/image/img_error_avatar.png')\n        this.avatarUrl = errorImgUrl\n     })\n    }\n  }\n}\n</script>\n\n<style lang=\"less\">\n@font-face {\n  font-family: 'fangzheng';\n  src:  url('../../../static/fonts/fangzheng.ttf');\n  font-weight: normal;\n  font-style: normal;\n}\n\n  .bottom{\n    margin: 3%;\n    display: flex;\n    justify-content: space-between;\n    align-items: flex-end;\n\n    .owner {\n      flex: 0 0 20%;\n      display: inline-flex;\n      flex-direction: column;\n      align-items: center;\n      vertical-align: bottom;\n\n      .avatar img{\n        border-radius: 50%;\n        width: 40px;\n        height: 40px;\n        margin: 0 auto;\n      }\n\n      .name {\n        line-height: 40px;\n        height: 40px;\n        font-size: 16px;\n        text-align: center;\n        font-family: fangzheng;\n        align-self: center;\n      }\n    }\n\n    .time {\n      flex: 0 0 20%;\n      display: inline-block;\n      border: 1px solid #B7B7B7;\n      color: #B7B7B7;\n      padding: 2px;\n      width: 20%;\n      height: 82px;\n      line-height: 20px;\n\n      .plus{\n        font-size: 20px;\n        margin-left: 2px;\n      }\n    }\n  }\n</style>\n"
  },
  {
    "path": "src/components/detailheader/DetailHeader.vue",
    "content": "<template lang=\"html\">\n  <header class=\"detailheader\">\n    <div class=\"menu\" @click=\"goBack\">\n      <i class=\" icon-arrow_lift\"></i>\n    </div>\n    <div class=\"nickname\">\n      <h1>{{nickname}}</h1>\n    </div>\n    <div class=\"share\" @click=\"sharePerson\">\n      <i class=\"icon-share2\"></i>\n    </div>\n  </header>\n</template>\n\n<script>\nimport VueRouter from '../../router/routes.js'\nimport { mapGetters, mapActions } from 'vuex'\n\nexport default {\n  props: {\n    nickname: {\n      type: String\n    }\n  },\n  methods: {\n    goBack () {\n      VueRouter.go(-1)\n      this.$store.dispatch('toggleheader')\n    },\n    sharePerson () {\n      alert(\"分享功能待完善！\")\n    }\n  }\n}\n</script>\n\n<style lang=\"less\">\n@header-height:46px;\n@icon-font-size:22px;\n@title-font-size: 18px;\n@baseBorderColor:#3B3B3B;\n\n.detailheader {\n  position: fixed;\n  display: flex;\n  width: 100%;\n  height: @header-height;\n  background: #fff;\n  text-align: center;\n  line-height: @header-height;\n  box-shadow: 0 2px 10px #D8D8D8;\n  top:0;\n  left: 0;\n  z-index: 10;\n  .menu {\n    flex: 0 0 @header-height;\n    font-size: @icon-font-size;\n  }\n  .nickname {\n    flex: 1;\n    font-size: @title-font-size;\n  }\n  .share {\n    flex: 0 0 @header-height;\n    font-size: @icon-font-size;\n  }\n\n}\n</style>\n"
  },
  {
    "path": "src/components/header/Header.vue",
    "content": "<template>\n  <header class=\"heade\">\n    <div class=\"menu\" @click=\"toggleSlideBar\">\n      <i class=\"icon-diamond\"></i>\n    </div>\n    <div class=\"title\">\n      <h1>{{headertitle}}</h1>\n    </div>\n    <div class=\"write\" @click=\"goChooseThemePage\">\n      <i class=\"icon-quill\"></i>\n    </div>\n  </header>\n</template>\n\n<script>\nimport VueRouter from '../../router/routes.js'\nimport { mapGetters, mapActions } from 'vuex'\n\nexport default {\n  computed: mapGetters({\n    headertitle: 'headerTitle',\n  }),\n  methods: {\n    toggleSlideBar () {\n      this.$store.dispatch('toggleSlideBar')\n    },\n    goChooseThemePage () {\n      // VueRouter.push({ path: '/choosetheme' })\n    }\n  }\n}\n</script>\n\n<style lang=\"less\">\n  @header-height:46px;\n  @icon-font-size:22px;\n  @title-font-size: 18px;\n  @baseBorderColor:#3B3B3B;\n\n  .heade {\n    position: fixed;\n    display: flex;\n    width: 100%;\n    height: @header-height;\n    background: #fff;\n    text-align: center;\n    line-height: @header-height;\n    box-shadow: 0 2px 10px #D8D8D8;\n    top:0;\n    left: 0;\n    z-index: 10;\n    .menu {\n      flex: 0 0 @header-height;\n      font-size: @icon-font-size;\n    }\n    .title {\n      flex: 1;\n      font-size: @title-font-size;\n    }\n    .write {\n      flex: 0 0 @header-height;\n      font-size: @icon-font-size;\n    }\n\n  }\n</style>\n"
  },
  {
    "path": "src/components/info/Info.vue",
    "content": "<template>\n<div class=\"info\">\n  <div class=\"box\">\n    <pic-box :src=\"info.pic\" :id=\"info.id\" :nickname=\"info.nickname\"></pic-box>\n    <div class=\"desc\" @click=\"goDetailPage(info)\">\n      {{info.desc}}\n    </div>\n    <bottom-bar :nickname=\"info.nickname\" :avatar=\"info.avatar\" :time=\"info.time\" :userid=\"info.userid\"></bottom-bar>\n  </div>\n</div>\n</template>\n\n<script>\nimport BottomBar from 'components/bottombar/BottomBar'\nimport PicBox from 'components/picbox/PicBox'\n\nexport default {\n  props: {\n    info: {\n      type: Object\n    }\n  },\n  components: {\n    \"bottom-bar\": BottomBar,\n    \"pic-box\":PicBox\n  },\n  methods: {\n    goDetailPage: function (info) {\n        this.$store.dispatch('goDetailPage',{id:info.id})\n        this.$store.dispatch('toggleheader',{nickname:info.nickname})\n    }\n  }\n}\n</script>\n\n<style lang=\"less\">\n@baseBackgroundColor:#fff;\n@baseBorderColor:#3B3B3B;\n\n.info {\n    position: relative;\n    width: 100%;\n    background-color: #fff;\n\n    .box {\n        position: relative;\n        width: 90%;\n        background-color: @baseBackgroundColor;\n        margin: 0 auto;\n        // border: 1px solid #d1dbe5;\n        margin: 0 auto;\n        // box-shadow:0 2px 4px 0 rgba(0,0,0,.12), 0 0 6px 0 rgba(0,0,0,.04);\n        box-shadow: 0 0 30px -7px rgba(0,0,0,.3);\n        padding: 5px 0;\n        border-radius:4px;\n\n        .desc {\n          font-size: 16px;\n          font-weight: 400;\n          font-family: fangzheng;\n          margin:3%;\n          padding: 5% 0;\n          width: 80%;\n        }\n\n    }\n}\n</style>\n"
  },
  {
    "path": "src/components/infodetail/InfoDetail.vue",
    "content": "<template>\n  <div class=\"info-detail\">\n    <div class=\"img-box\">\n      <img :src=\"info.pic\" alt=\"\">\n    </div>\n\n    <div class=\"content-box\"><span>{{info.desc}}</span></div>\n\n    <div class=\"author-box\">\n      <span class=\"text\">by</span>\n      <span class=\"nickname\">{{info.nickname}}</span>\n    </div>\n\n    <div class=\"love\" @click=\"toggleLove\">\n      <div class=\"love-icon\">\n        <img src=\"../../assets/image/heart_select.png\" alt=\"\" v-if=\"isLove\">\n        <img src=\"../../assets/image/heart_unselect.png\" alt=\"\" v-else>\n      </div>\n      <div class=\"lovecount\">{{lovecount}}</div>\n    </div>\n\n  </div>\n</template>\n\n<script>\n\nimport { mapGetters } from 'vuex'\n\nexport default {\n  props: {\n    info: {\n      type: Object\n    }\n  },\n  computed: mapGetters({\n    isLove: 'isLove',\n    lovecount:'lovecount'\n  }),\n  components: {\n  },\n  methods: {\n    toggleLove: function () {\n      this.$store.dispatch('toggleLove')\n    }\n  }\n}\n</script>\n\n<style lang=\"less\">\n  .info-detail{\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    flex-direction: column;\n    font-family: fangzheng;\n\n\n    .img-box{\n      width: 94%;\n      margin: 3%;\n\n      img{\n        width: 100%;\n      }\n    }\n\n    .content-box{\n      width: 80%;\n      margin: 3% auto;\n      text-align:left;\n\n      span{\n        border-bottom: 1px solid #000;\n        line-height: 2rem;\n        padding: 5px 0;\n      }\n\n    }\n\n    .author-box{\n      width: 94%;\n      margin: 3% ;\n      text-align: right;\n\n      .text{\n        color: #7b7b7b;\n        font-size: .9rem;\n      }\n\n      .nickname{\n        font-size: 1rem;\n      }\n    }\n\n    .love{\n      width: 80%;\n      text-align: left;\n      display: flex;\n\n      .love-icon{\n        display: inline-flex;\n        justify-content: center;\n        align-items: center;\n        margin-right: .5rem;\n\n        img{\n          width: 1.5rem;\n          height: 1.5rem;\n        }\n      }\n      .lovecount{\n        display: inline-flex;\n        justify-content: center;\n        align-items: center;\n      }\n\n\n\n\n    }\n  }\n</style>\n"
  },
  {
    "path": "src/components/music/Music.vue",
    "content": "<template>\n  <div class=\"music\">\n    <div class=\"box\">\n      <pic-box :src=\"music.pic\"></pic-box>\n      <music-bar :musicurl=\"music.musicurl\" :imgurl=\"music.imgurl\" :singer=\"music.singer\" :songname=\"music.songname\" ></music-bar>\n      <bottom-bar :nickname=\"music.nickname\" :avatar=\"music.avatar\" :time=\"music.time\" :userid=\"music.userid\"></bottom-bar>\n    </div>\n  </div>\n</template>\n\n<script>\nimport BottomBar from 'components/bottombar/BottomBar'\nimport MusicBar from 'components/musicbar/MusicBar'\nimport PicBox from 'components/picbox/PicBox'\n\nexport default {\n  props: {\n    music: {\n      type: Object\n    }\n  },\n  components: {\n    \"bottom-bar\": BottomBar,\n    \"music-bar\": MusicBar,\n    \"pic-box\": PicBox\n  }\n}\n</script>\n\n<style lang=\"less\">\n@baseBackgroundColor:#fff;\n@baseBorderColor:#d1dbe5;\n\n.music {\n  position: relative;\n  width: 100%;\n  background-color: #fff;\n\n\n  .box {\n    position: relative;\n    width: 90%;\n    background-color: @baseBackgroundColor;\n    // border: 1px solid #d1dbe5;\n    margin: 0 auto;\n    // box-shadow:0 2px 4px 0 rgba(0,0,0,.12), 0 0 6px 0 rgba(0,0,0,.04);\n    box-shadow: 0 0 30px -7px rgba(0,0,0,.3);\n    padding: 5px 0;\n    border-radius:4px;\n  }\n}\n</style>\n"
  },
  {
    "path": "src/components/musicbar/MusicBar.vue",
    "content": "<template>\n  <div class=\"musicbar\">\n    <div class=\"musicbar-container\">\n      <div class=\"left\">\n        <img :src=\"imgurl\" alt=\"\">\n      </div>\n      <div class=\"center\">\n        <div class=\"songname\">{{songname}}</div>\n        <div class=\"singer\">{{singer}}</div>\n      </div>\n      <div class=\"right\" @click=\"togglePlayerStatus(musicurl)\">\n        <i class=\"icon-play3\"></i>\n      </div>\n    </div>\n  </div>\n</template>\n\n<script>\nexport default {\n  props: {\n    musicurl: {\n      type: String\n    },\n    imgurl: {\n      type: String\n    },\n    singer: {\n      type: String\n    },\n    songname: {\n      type: String\n    }\n  },\n  methods: {\n    togglePlayerStatus: function (url) {\n      this.$store.dispatch('togglePlayerStatus',{currentPlayerUrl:url})\n    }\n  }\n}\n</script>\n\n<style lang=\"less\">\n  .musicbar {\n    margin: 3%;\n\n    .musicbar-container {\n      padding: 2px;\n      display: flex;\n      position: relative;\n      border: 1px solid #d1dbe5;\n\n      .left {\n        display: inline-block;\n        flex: 0 0 40px;\n\n        img {\n          width: 40px;\n          height: 40px;\n        }\n      }\n\n      .center {\n        display: inline-block;\n        flex: 0 0 auto;\n        font-family: fangzheng;\n        margin-left: 10px;\n\n        .songname {\n          height: 25px;\n          line-height: 25px;\n          font-size: 16px;\n        }\n\n        .singer {\n          height: 15px;\n          line-height: 15px;\n          font-size: 12px;\n        }\n      }\n\n      .right {\n        position: absolute;\n        right: 0;\n        bottom: 0;\n        display: inline-block;\n        font-size: 30px;\n        line-height: 42px;\n        height: 42px;\n        vertical-align: middle;\n        opacity:0.5;\n      }\n\n    }\n\n  }\n</style>\n"
  },
  {
    "path": "src/components/picbox/PicBox.vue",
    "content": "<template>\n  <div class=\"pic\" @click=\"goDetailPage(id,nickname)\">\n    <img :src=\"imgsrc\" alt=\"\" @error=\"setErrorImg\">\n  </div>\n</template>\n\n<script>\nimport { mapGetters, mapActions } from 'vuex'\nexport default {\n  props: {\n    src: {\n      type: String\n    },\n    id: {\n      type: Number\n    },\n    nickname: {\n      type: String\n    }\n  },\n  data () {\n    return {\n      imgsrc:this.src\n    }\n  },\n  methods: {\n    setErrorImg () {\n      this.$nextTick(function () {\n        let errorImgUrl = require('../../assets/image/img_error_bg.jpg')\n        this.imgsrc = errorImgUrl\n     })\n   },\n   goDetailPage (id,nickname) {\n     if (id && nickname) {\n       this.$store.dispatch('goDetailPage',{id:id})\n       this.$store.dispatch('toggleheader',{nickname:nickname})\n     }\n   }\n  }\n}\n</script>\n\n<style lang=\"less\">\n  .pic {\n    width: 94%;\n    margin: 3%;\n\n    img{\n     width: 100%;\n   }\n  }\n</style>\n"
  },
  {
    "path": "src/components/player/Player.vue",
    "content": "<template lang=\"html\">\n  <div class=\"player\">\n    <audio :src=\"currentPlayerUrl\" autoplay=\"autoplay\" controls=\"controls\" ref=\"audiopleyer\" v-show=\"isAudioPlay\"></audio>\n  </div>\n</template>\n\n<script>\nimport { mapGetters, mapActions } from 'vuex'\n\nexport default {\n  computed: {\n    ...mapGetters({\n      isAudioPlay: 'isAudioPlay'\n    }),\n    currentPlayerUrl: function ( ) {\n      if (this.$refs.audiopleyer) {\n        this.$refs.audiopleyer.load()\n      }\n      return this.$store.getters.currentPlayerUrl\n    }\n  }\n}\n</script>\n\n<style lang=\"less\">\n  .player{\n    width: 100%;\n    position: fixed;\n    z-index: 10;\n    bottom: 0;\n    display: flex;\n    justify-content: center;\n    align-items: center;\n\n    audio {\n      width: 90%;\n      border: 1px solid #000;\n    }\n  }\n</style>\n"
  },
  {
    "path": "src/components/slidebar/SlideBar.vue",
    "content": "<template lang=\"html\">\n  <div class=\"slidebar\" v-if=\"isSlideBarShow\">\n    <el-row class=\"container\">\n      <el-col :span=\"16\" class=\"left\" @click=\"toggleSlideBar\">\n        <div class=\"useravatar\">\n          <div class=\"avatar\">\n            <img :src=\"personalInfo.avatar\" alt=\"\" @error=\"setErrorAvatar\" ref=\"sliderbaravatar\">\n          </div>\n          <div class=\"name\">\n            {{personalInfo.nickname}}\n          </div>\n        </div>\n        <el-menu class=\"el-menu-vertical-demo\" @select=\"handleSelect\">\n          <el-menu-item index=\"1\"><i class=\"icon-user\"></i><div class=\"navtext\">个人</div></el-menu-item>\n          <el-menu-item index=\"2\"><i class=\"icon-eye\"></i><div class=\"navtext\">关注</div></el-menu-item>\n          <el-menu-item index=\"3\"><i class=\"icon-bubbles3\"></i><div class=\"navtext\">消息</div></el-menu-item>\n          <el-menu-item index=\"4\"><i class=\"icon-cog\"></i><div class=\"navtext\">设置</div></el-menu-item>\n        </el-menu>\n      </el-col>\n      <el-col :span=\"8\" class=\"right\" ><div @click=\"toggleSlideBar\" class=\"rightEvent\"></div></el-col>\n    </el-row>\n  </div>\n</template>\n\n<script>\nimport { mapGetters, mapState } from 'vuex'\n\nexport default {\n  computed: {\n    ...mapState({\n      personalInfo: 'personalInfo'\n    }),\n    ...mapGetters({\n\t    isSlideBarShow: 'isSlideBarShow',\n\t  }),\n  },\n  methods: {\n    toggleSlideBar () {\n      this.$store.dispatch('toggleSlideBar')\n    },\n    handleSelect (data) {\n      let index = parseInt(data)\n      switch (index) {\n        case 1:\n          if (this.personalInfo.uid && this.personalInfo.nickname){\n            this.$store.dispatch('goPersonalPages',{userId:this.personalInfo.uid})\n            this.$store.dispatch('toggleheader',{nickname:this.personalInfo.nickname})\n            this.$store.dispatch('toggleSlideBar')\n          }\n          break;\n        default:\n\n      }\n    },\n    setErrorAvatar () {\n      this.$nextTick(function () {\n        let errorImgUrl = require('../../assets/image/img_error_avatar.png')\n        this.$refs.sliderbaravatar.src = errorImgUrl\n     })\n    }\n  }\n}\n</script>\n\n<style lang=\"less\">\n  @font-face {\n    font-family: 'fangzheng';\n    src:  url('../../../static/fonts/fangzheng.ttf');\n    font-weight: normal;\n    font-style: normal;\n  }\n\n  .slidebar {\n    position: fixed;\n    left: 0;\n    top: 0;\n    width: 100%;\n    height: 100%;\n    z-index: 50;\n    font-family: fangzheng;\n    animation: slidetoright .5s;\n    -moz-animation: slidetoright .5s;\t/* Firefox */\n    -webkit-animation: slidetoright .5s;\t/* Safari 和 Chrome */\n    -o-animation: slidetoright .5s;\n\n    .container{\n      height: 100%;\n\n      .left{\n        height: 100%;\n        background-color: #252525;\n\n        .useravatar{\n          display: flex;\n          vertical-align: middle;\n          align-items: center;\n          flex-direction: column;\n          margin: 20% 0 10% 0;\n\n          img{\n            border-radius:50%;\n            width: 100px;\n            height: 100px;\n            margin: 0 auto;\n            border: 2px solid #404040;\n          }\n\n          .name {\n            font-size: 20px;\n            color: #fff;\n            margin: 5% 0;\n          }\n        }\n\n        .el-menu{\n          background-color: #252525;\n\n          .el-menu-item{\n            color: white;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            border-bottom: 1px solid #404040;\n            color: #707070;\n\n            i {\n              flex: 0 0 5% ;\n            }\n            .navtext {\n              flex: 0 0 50%;\n              text-align: center;\n            }\n          }\n          .el-menu-item:hover {\n            background-color: #252525;\n            color: #fff;\n          }\n        }\n      }\n\n      .right{\n        opacity: 0.6;\n        height: 100%;\n        background-color: #808080;\n        z-index: 100;\n\n        .rightEvent {\n          height: 100%;\n        }\n      }\n    }\n  }\n\n  @keyframes slidetoright{\n    from {width: 0%;}\n    to {width: 100%;}\n  }\n\n  @-moz-keyframes slidetoright{\n    from {width: 0%;}\n    to {width: 100%;}\n  }\n\n  @-webkit-keyframes slidetoright {\n    from {width: 0%;}\n    to {width: 100%;}\n  }\n\n  @-o-keyframes slidetoright{\n    from {width: 0%;}\n    to {width: 100%;}\n  }\n\n</style>\n"
  },
  {
    "path": "src/components/switchbutton/SwitchButton.vue",
    "content": "<template lang=\"html\">\n  <div class=\"switchbutton\">\n    <div class=\"button\" @click=\"goNextPage\"><i class=\"icon-loop2\" ref=\"iconLoop\"></i></div>\n  </div>\n</template>\n\n<script>\nexport default {\n  methods: {\n    goNextPage () {\n      this.$store.dispatch('updatePage')\n      // this.$refs.iconLoop.style.transform = 'rotate(360deg)'\n    }\n  }\n}\n</script>\n\n<style lang=\"css\">\n.switchbutton {\n  position: fixed;\n  bottom: 5%;\n  right: 5%;\n}\n.button {\n  background-color: #000;\n  width: 3rem;\n  height: 3rem;\n  font-size: 1.5rem;\n  color: #fff;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  border-radius: 50%;\n}\n\n.icon-loop2{\n  margin: 0.5rem;\n}\n\n</style>\n"
  },
  {
    "path": "src/components/trip/Trip.vue",
    "content": "<template>\n  <div class=\"trip\">\n    <div class=\"box\">\n      <pic-box :src=\"trip.pic\"></pic-box>\n      <div class=\"center\">\n        <div class=\"destination\">\n          {{'【'+trip.destination+'】'}}\n        </div>\n        <div class=\"title\">\n          {{trip.title}}\n        </div>\n      </div>\n      <bottom-bar :nickname=\"trip.nickname\" :avatar=\"trip.avatar\" :time=\"trip.time\" :userid=\"trip.userid\"></bottom-bar>\n    </div>\n  </div>\n</template>\n\n<script>\nimport PicBox from 'components/picbox/PicBox'\nimport BottomBar from 'components/bottombar/BottomBar'\n\nexport default {\n  props: {\n    trip: {\n      type: Object\n    }\n  },\n  components: {\n    \"bottom-bar\": BottomBar,\n    \"pic-box\": PicBox\n  }\n}\n</script>\n\n<style lang=\"less\">\n  .trip {\n      position: relative;\n      width: 100%;\n      background-color: #fff;\n\n      .box {\n          position: relative;\n          width: 90%;\n          background-color: #fff;\n          margin: 0 auto;\n          // border: 1px solid #d1dbe5;\n          margin: 0 auto;\n          // box-shadow:0 2px 4px 0 rgba(0,0,0,.12), 0 0 6px 0 rgba(0,0,0,.04);\n          box-shadow: 0 0 30px -7px rgba(0,0,0,.3);\n          padding: 5px 0;\n          border-radius:4px;\n\n          .center {\n            font-size: 16px;\n            font-weight: 400;\n            font-family: fangzheng;\n            margin:3%;\n            padding: 5% 0;\n            width: 94%;\n            white-space: nowrap;\n            text-overflow: ellipsis;\n            overflow: hidden;\n            display: flex;\n\n            .destination {\n            }\n\n            .title {\n              flex: 1;\n              overflow: hidden;\n              white-space: nowrap;\n              text-overflow: ellipsis;\n            }\n          }\n      }\n  }\n</style>\n"
  },
  {
    "path": "src/main.js",
    "content": "// 项目入口，配置全局vue\nimport Vue from 'vue'\nimport VueRouter from './router/routes.js'\nimport Store from './store/index.js'\n\nimport './assets/less/index.less'\nimport App from './App.vue'\n\nimport ElementUI from 'element-ui'\nimport 'element-ui/lib/theme-default/index.css'\n\nVue.use(ElementUI)\n\nnew Vue({\n\trouter:VueRouter,\n\tstore:Store,\n\ttemplate:'<App/>',\n\tcomponents: {App}\n}).$mount('#app')\n\n// 默认进入商品模块\nVueRouter.push({ path: '/home' })\n"
  },
  {
    "path": "src/pages/choosetheme/ChooseTheme.vue",
    "content": "<template lang=\"html\">\n\n</template>\n\n<script>\nexport default {\n}\n</script>\n\n<style lang=\"css\">\n</style>\n"
  },
  {
    "path": "src/pages/daily/Daily.vue",
    "content": "<template>\n  <div class=\"daily\">\n    <div class=\"info-container\" v-for=\"item in dailylist\">\n      <info :info=\"item\" class=\"info\"></info>\n    </div>\n    <switch-button></switch-button>\n  </div>\n</template>\n\n<script>\nimport axios from 'axios'\n\nimport Info from 'components/info/Info.vue'\nimport SwitchButton from 'components/switchbutton/SwitchButton.vue'\n\nconst ERR_OK = 0\n\nexport default {\n  data () {\n    return {\n      dailylist:[]\n    }\n  },\n  created() {\n    axios.get('/api/daily').then((res) => {\n      res = res.data\n      if (res.errno === ERR_OK) {\n        this.dailylist = res.data\n      }\n    }).catch((error) => {\n      console.warn(error)\n    })\n  },\n  components: {\n    \"info\": Info,\n    \"switch-button\": SwitchButton\n  }}\n</script>\n\n<style lang=\"less\">\n  .daily {\n    .info{\n      margin: 20px 0;\n    }\n  }\n</style>\n"
  },
  {
    "path": "src/pages/detail/Detail.vue",
    "content": "<template lang=\"html\">\n  <div class=\"detail\">\n    <!-- <info v-if=\"detail.themeid == 'info' \" :info=\"detail\"></info> -->\n    <!-- <music v-if=\"detail.themeid == 'music' \" :info=\"detail\"></music> -->\n    <!-- <v-article v-if=\"detail.themeid == 'article' \" :info=\"detail\"></v-article> -->\n    <!-- <trip v-if=\"detail.themeid == 'trip' \" :info=\"detail\"></trip> -->\n    <info-detail :info=\"detail\"></info-detail>\n\n  </div>\n</template>\n\n<script>\nimport axios from 'axios'\nimport Info from 'components/info/Info.vue'\nimport Music from 'components/music/Music.vue'\nimport Article from 'components/article/Article.vue'\nimport Trip from 'components/trip/Trip.vue'\n\nimport InfoDetail from 'components/infodetail/InfoDetail.vue'\n\nconst ERR_OK = 0\n\nexport default {\n  data () {\n    return {\n      detail:{}\n    }\n  },\n  components: {\n    \"info\": Info,\n    \"music\": Music,\n    \"v-article\": Article,\n    \"trip\": Trip,\n    \"info-detail\":InfoDetail,\n  },\n  created () {\n    axios.get('/api/detail',{\n      params: {\n        id: this.$route.params\n      }\n    }).then((res) => {\n      res = res.data\n      console.info(res)\n      if (res.errno === ERR_OK) {\n        this.detail = res.data\n      }\n    }).catch((error) => {\n      console.warn(error)\n    })\n\n  }\n}\n</script>\n\n<style lang=\"less\">\n</style>\n"
  },
  {
    "path": "src/pages/essay/Essay.vue",
    "content": "<template>\n  <div class=\"eassy\">\n    <div class=\"article-container\" v-for=\"item in articlelist\">\n      <v-article :article=\"item\" class=\"articleitem\"></v-article>\n    </div>\n    <switch-button></switch-button>\n  </div>\n</template>\n\n<script>\nimport axios from 'axios'\n\nimport Header from 'components/header/Header.vue'\nimport Article from 'components/article/Article.vue'\nimport SwitchButton from 'components/switchbutton/SwitchButton.vue'\n\nconst ERR_OK = 0\n\nexport default {\n  data () {\n    return {\n      articlelist:[]\n    }\n  },\n  created() {\n    axios.get('/api/essay').then((res) => {\n      res = res.data\n      if (res.errno === ERR_OK) {\n        this.articlelist = res.data\n      }\n    }).catch((error) => {\n      console.warn(error)\n    })\n  },\n  components: {\n    \"v-article\": Article,\n    \"switch-button\": SwitchButton\n  }\n}\n</script>\n\n<style lang=\"less\">\n  .eassy {\n    .articleitem{\n      margin: 20px 0;\n    }\n  }\n</style>\n"
  },
  {
    "path": "src/pages/home/Home.vue",
    "content": "<template>\n  <div class=\"home\">\n    <div class=\"info-container\" v-for=\"item in homelist\">\n      <info :info=\"item\" class=\"info\"></info>\n    </div>\n\t\t<switch-button></switch-button>\n  </div>\n</template>\n\n<script>\nimport axios from 'axios'\n\nimport Info from 'components/info/Info.vue'\nimport SwitchButton from 'components/switchbutton/SwitchButton.vue'\n\nconst ERR_OK = 0\n\nexport default {\n  data () {\n    return {\n      homelist: []\n    }\n  },\n  created() {\n    axios.get('/api/home').then((res) => {\n      res = res.data\n      if (res.errno === ERR_OK) {\n        this.homelist = res.data\n      }\n    }).catch((error) => {\n      console.warn(error)\n    })\n  },\n  components: {\n    \"info\": Info,\n    \"switch-button\": SwitchButton\n  }\n}\n</script>\n\n<style lang=\"less\">\n  .home {\n    .info{\n      margin: 20px 0;\n    }\n  }\n</style>\n"
  },
  {
    "path": "src/pages/personal/Personal.vue",
    "content": "<template>\n  <div class=\"personal\">\n    <div class=\"personal-container\">\n      <div class=\"personal-info\">\n        <div class=\"info\">\n          <div class=\"avatar\">\n            <img :src=\"user.avatar\" alt=\"\" @error=\"setErrorAvatar\">\n          </div>\n          <div class=\"name\">\n            {{user.nickname}}\n          </div>\n        </div>\n        <div class=\"follow\">\n          <div class=\"menu\" @click=\"toggleFollowPerson(user.isfollow)\">\n            <i :class=\" isfollow == true ? 'icon-checkbox-checked' : 'icon-checkbox-unchecked'\"></i>\n          </div>\n            <div class=\"count\">\n              {{'Follower：'+ followcount}}\n            </div>\n        </div>\n      </div>\n      <div class=\"total\">{{'Total Cards : '+listlength}}</div>\n      <div class=\"content-box\">\n        <template v-for=\"item in user.contentlist\">\n          <div v-if=\"item.themeid === 'info'\" class=\"item\">\n            <info :info=\"item\"></info>\n          </div>\n          <div v-else-if=\"item.themeid === 'music'\" class=\"item\">\n            <music :music=\"item\"></music>\n          </div>\n          <div v-else-if=\"item.themeid === 'article'\" class=\"item\">\n            <v-article :article=\"item\"></v-article>\n          </div>\n          <div v-else-if=\"item.themeid === 'trip'\" class=\"item\">\n              <trip :trip=\"item\"></trip>\n          </div>\n        </template>\n      </div>\n    </div>\n  </div>\n</template>\n\n<script>\nimport axios from 'axios'\n\nimport Info from 'components/info/Info.vue'\nimport Music from 'components/music/Music.vue'\nimport Article from 'components/article/Article.vue'\nimport Trip from 'components/trip/Trip.vue'\n\n\nimport { mapGetters, mapActions } from 'vuex'\n\nconst ERR_OK = 0\n\nexport default {\n  data () {\n    return {\n      user: {},\n      listlength: \"\"\n    }\n  },\n  created() {\n    axios.get('/api/personal').then((res) => {\n      res = res.data\n      if (res.errno === ERR_OK) {\n        this.user = res.data\n        this.listlength = res.data.contentlist.length\n      }\n    }).catch((error) => {\n      console.warn(error)\n    })\n  },\n  methods: {\n    toggleFollowPerson () {\n      this.$nextTick(function () {\n        this.$store.dispatch('toggleFollowPerson',{userId:this.user.userid})\n      })\n    },\n    setErrorAvatar () {\n      this.$nextTick(function () {\n        let errorImgUrl = require('../../assets/image/img_error_avatar.png')\n        this.user.avatar = errorImgUrl\n     })\n    }\n  },\n  // mock下模拟的数据，正常情况下不需要computed下isfollow和followcount,而是真实的数据库数据\n  computed: mapGetters({\n    isfollow: 'isfollow',\n    followcount: 'followcount'\n  }),\n  components: {\n    \"info\": Info,\n    \"music\": Music,\n    \"v-article\": Article,\n    \"trip\": Trip\n  }\n}\n</script>\n\n<style lang=\"less\">\n@font-face {\n  font-family: 'fangzheng';\n  src:  url('../../../static/fonts/fangzheng.ttf');\n  font-weight: normal;\n  font-style: normal;\n}\n\n  .personal {\n    .personal-container {\n\n      .personal-info {\n        margin: 3%;\n        display: flex;\n        justify-content: space-between;\n        align-items: flex-end;\n\n        .info {\n          flex: 0 0 20%;\n          display: inline-flex;\n          flex-direction: column;\n          align-items: center;\n          vertical-align: bottom;\n\n          .avatar img{\n            border-radius: 50%;\n            width: 40px;\n            height: 40px;\n            margin: 0 auto;\n          }\n\n          .name {\n            line-height: 40px;\n            height: 40px;\n            font-size: 16px;\n            text-align: center;\n            font-family: fangzheng;\n            align-self: center;\n          }\n\n        }\n\n        .follow {\n          flex: 0 0 40%;\n          display: inline-flex;\n          flex-direction: column;\n          align-items: center;\n          vertical-align: bottom;\n\n          .menu {\n            line-height: 42px;\n            height: 42px;\n            text-align: center;\n            font-size: 25px;\n          }\n\n\n          .count {\n            line-height: 40px;\n            height: 40px;\n            font-size: 16px;\n            text-align: center;\n            font-family: fangzheng;\n            align-self: center;\n          }\n        }\n\n        .total {\n          display: inline-block;\n          position: relative;\n        }\n      }\n\n      .total {\n        margin: 5%;\n        font-size: 16px;\n        color: #000;\n        font-family: fangzheng;\n      }\n\n      .content-box {\n        .item {\n          margin: 20px 0;\n        }\n      }\n    }\n  }\n\n</style>\n"
  },
  {
    "path": "src/pages/travels/Travels.vue",
    "content": "<template>\n  <div class=\"travels\">\n    <div class=\"trip-container\" v-for=\"item in triplist\">\n      <trip :trip=\"item\" class=\"trip\"></trip>\n    </div>\n    <switch-button></switch-button>\n  </div>\n</template>\n\n<script>\nimport axios from 'axios'\n\nimport Trip from 'components/trip/Trip.vue'\nimport SwitchButton from 'components/switchbutton/SwitchButton.vue'\n\nconst ERR_OK = 0\n\nexport default {\n  data () {\n    return {\n      triplist:[]\n    }\n  },\n  created() {\n    axios.get('/api/travels').then((res) => {\n      res = res.data\n      if (res.errno === ERR_OK) {\n        this.triplist = res.data\n      }\n    }).catch((error) => {\n      console.warn(error)\n    })\n  },\n  components: {\n    \"trip\": Trip,\n    \"switch-button\": SwitchButton\n  }}\n</script>\n\n<style lang=\"less\">\n  .travels {\n    .trip{\n      margin: 20px 0;\n    }\n  }\n</style>\n"
  },
  {
    "path": "src/pages/vocality/Vocality.vue",
    "content": "<template>\n  <div class=\"vocality\">\n    <div class=\"music-container\" v-for=\"item in musiclist\">\n      <music :music=\"item\" class=\"music\"></music>\n    </div>\n    <switch-button></switch-button>\n    <v-player></v-player>\n  </div>\n</template>\n\n<script>\nimport axios from 'axios'\n\nimport Header from 'components/header/Header.vue'\nimport Music from 'components/music/Music.vue'\nimport SwitchButton from 'components/switchbutton/SwitchButton.vue'\nimport Player from 'components/player/Player.vue'\n\nconst ERR_OK = 0\n\nexport default {\n  data () {\n    return {\n      musiclist:[]\n    }\n  },\n  created() {\n    axios.get('/api/vocality').then((res) => {\n      res = res.data\n      if (res.errno === ERR_OK) {\n        this.musiclist = res.data\n      }\n    }).catch((error) => {\n      console.warn(error)\n    })\n  },\n  components: {\n    \"music\": Music,\n    \"switch-button\": SwitchButton,\n    \"v-player\": Player\n  }}\n</script>\n\n<style lang=\"less\">\n  .vocality {\n    .music{\n      margin: 20px 0;\n    }\n  }\n</style>\n"
  },
  {
    "path": "src/router/routes.js",
    "content": "/*路由配置文件*/\n\n// 引入vue及相关插件\nimport Vue from 'vue'\nimport VueRouter from 'vue-router'\nimport Vuex from 'vuex'\n\n// 引入自定义单文件组件\nimport Home from 'pages/home/Home'\nimport daily from 'pages/daily/Daily'\nimport Travels from 'pages/travels/Travels'\nimport Vocality from 'pages/vocality/Vocality'\nimport Essay from 'pages/essay/Essay'\nimport Personal from 'pages/personal/Personal'\nimport ChooseTheme from 'pages/choosetheme/ChooseTheme'\nimport Detail from 'pages/detail/Detail'\n\n// 注册插件\nVue.use(VueRouter)\nVue.use(Vuex)\n\n// 配置routes\nconst routes = [\n  {\n    path: '/home',\n    name: 'home',\n    component:Home\n  },\n  {\n    path: '/daily',\n    name: 'daily',\n    component:daily\n  },\n  {\n    path: '/travels',\n    name: 'travels',\n    component:Travels\n  },\n  {\n    path: '/vocality',\n    name: 'vocality',\n    component:Vocality\n  },\n  {\n    path: '/essay',\n    name: 'essay',\n    component:Essay\n  },\n  {\n    path: '/personal',\n    name: 'personal',\n    component:Personal\n  },\n  {\n    path: '/choosetheme',\n    name: 'choosetheme',\n    component:ChooseTheme\n  },\n  {\n    path: '/detail',\n    name: 'detail',\n    component:Detail\n  },\n  {\n    path: '/',\n    component:Home\n  }\n]\n\n// 路由配置\n const router = new VueRouter({\n\tmode:\"history\",\n\troutes\n})\n\n export default router\n"
  },
  {
    "path": "src/store/actions.js",
    "content": "// 分发actions，页面的action同意dispatch到此进行逻辑处理\n\nimport * as types from './mutation-types.js'\n\n// 首页各个模块跳转\nexport const  updatePage = ({commit}) => {\n  commit(types.UPDATE_NEXT_PAGE)\n}\n\n// 点击用户头像进入个人页面\nexport const  goPersonalPages = ({commit},payload) => {\n  if(payload.userId){\n    commit(types.GO_PERSONAL_PAGES,{\n      userId:payload.userId\n    })\n  }\n}\n\n// 切换关注用户\nexport const  toggleFollowPerson = ({commit}) => {\n  commit(types.TOGGLE_FOLLOW_PERSON)\n}\n\n// 切换侧边栏显示\nexport const  toggleSlideBar = ({commit}) => {\n  commit(types.TOGGLE_SLIDE_BAR)\n}\n\n// 切换header\nexport const  toggleheader = ({commit},payload) => {\n  if(payload){\n    commit(types.ADD_DETAIL_HEADER_NICKNAME,{\n      nickname:payload.nickname\n    })\n  } else {\n    commit(types.DELEATE_DETAIL_HEADER_NICKNAME)\n  }\n  commit(types.TOGGLE_HEADER)\n}\n\n// 切换音乐播放\nexport const  togglePlayerStatus = ({commit},payload) => {\n  if (payload.currentPlayerUrl) {\n    commit(types.TOGGLE_PLAYER_STATUS,{\n      currentPlayerUrl:payload.currentPlayerUrl\n    })\n  }\n}\n\n// 点击列表项进入详情页面\nexport const  goDetailPage = ({commit},payload) => {\n  if(payload.id){\n    commit(types.GO_DETAIL_PAGES,{\n      id:payload.id\n    })\n  }\n}\n\n// 点击列表项进入详情页面\nexport const  toggleLove = ({commit}) => {\n  commit(types.TOGGLE_LOVE)\n}\n"
  },
  {
    "path": "src/store/getters.js",
    "content": "export const headerTitle = state => state.pageArray[state.pageIndex].headerTitle\nexport const isSlideBarShow = state => state.isSlideBarShow\nexport const isDetailHeader = state => state.isDetailHeader\nexport const detailHeaderNickName = state => state.detailHeaderNickName\nexport const isAudioPlay = state => state.isAudioPlay\nexport const currentPlayerUrl = state => state.currentPlayerUrl\n\n//mockx下临时模拟的数据，正常情况下没有该方法\nexport const isfollow = state => state.isfollow\nexport const followcount = state => state.followcount\nexport const isLove = state => state.isLove\nexport const lovecount = state => state.lovecount\n"
  },
  {
    "path": "src/store/index.js",
    "content": "// vuex配置\n\nimport Vue from 'vue'\nimport Vuex from 'vuex'\nimport state from './state'\nimport * as actions from './actions'\nimport * as getters from './getters'\nimport mutations from './mutations'\n\nVue.use(Vuex)\n\nconst debug = process.env.NODE_ENV !== 'production'\n\nexport default new Vuex.Store({\n  state,\n  actions,\n  getters,\n  mutations,\n  strict:debug,\n})\n"
  },
  {
    "path": "src/store/mutation-types.js",
    "content": "export const UPDATE_NEXT_PAGE = 'UPDATE_NEXT_PAGE'\nexport const GO_PERSONAL_PAGES = 'GO_PERSONAL_PAGES'\nexport const TOGGLE_FOLLOW_PERSON = 'TOGGLE_FOLLOW_PERSON'\nexport const TOGGLE_SLIDE_BAR = 'TOGGLE_SLIDE_BAR'\nexport const TOGGLE_HEADER = 'TOGGLE_HEADER'\nexport const ADD_DETAIL_HEADER_NICKNAME = 'ADD_DETAIL_HEADER_NICKNAME'\nexport const DELEATE_DETAIL_HEADER_NICKNAME = 'DELEATE_DETAIL_HEADER_NICKNAME'\nexport const TOGGLE_PLAYER_STATUS = 'TOGGLE_PLAYER_STATUS'\nexport const GO_DETAIL_PAGES = 'GO_DETAIL_PAGES'\nexport const TOGGLE_LOVE = 'TOGGLE_LOVE'\n"
  },
  {
    "path": "src/store/mutations.js",
    "content": "import * as types from './mutation-types.js'\nimport VueRouter from '../router/routes.js'\n\nexport default {\n  [types.UPDATE_NEXT_PAGE](state) {\n    if (state.pageIndex < state.pageArray.length -1) {\n      state.pageIndex ++\n    } else {\n      state.pageIndex = 0\n    }\n    VueRouter.push({\n      path: '/' + state.pageArray[state.pageIndex].routename\n    })\n\n  },\n\n  [types.GO_PERSONAL_PAGES](state, {userId}) {\n    VueRouter.push({ name: 'personal', params: { userId: userId }})\n  },\n\n  [types.TOGGLE_FOLLOW_PERSON](state) {\n    // 正常的逻辑应该是将是否关注提交到数据库，更改数据库的字段并返回前端，现在是mock环境，只能在state中加了一个临时变量\n    if (state.isfollow) {\n      state.followcount --\n    } else {\n        state.followcount ++\n    }\n    state.isfollow = !state.isfollow\n  },\n\n  [types.TOGGLE_SLIDE_BAR](state) {\n    state.isSlideBarShow = !state.isSlideBarShow\n  },\n\n  [types.TOGGLE_HEADER](state) {\n    state.isDetailHeader = !state.isDetailHeader\n  },\n\n  [types.ADD_DETAIL_HEADER_NICKNAME](state,{nickname}) {\n    state.detailHeaderNickName = nickname\n  },\n\n  [types.DELEATE_DETAIL_HEADER_NICKNAME](state) {\n    state.detailHeaderNickName = ''\n  },\n\n  [types.TOGGLE_PLAYER_STATUS](state,{currentPlayerUrl}) {\n    if (!state.isAudioPlay) {\n      state.currentPlayerUrl = currentPlayerUrl\n      state.isAudioPlay = true\n    } else {\n      state.currentPlayerUrl = currentPlayerUrl\n    }\n  },\n\n  [types.GO_DETAIL_PAGES](state, {id}) {\n    VueRouter.push({ name: 'detail', params: { id: id }})\n  },\n\n  [types.TOGGLE_LOVE](state) {\n    // 正常的逻辑应该是将是否关注提交到数据库，更改数据库的字段并返回前端，现在是mock环境，只能在state中加了一个临时变量\n    if (state.isLove) {\n      state.lovecount --\n    } else {\n        state.lovecount ++\n    }\n    state.isLove = !state.isLove\n  },\n\n}\n"
  },
  {
    "path": "src/store/state.js",
    "content": "// 定义初始状态\nconst state = {\n  pageIndex: 0,\n  pageArray: [\n    {headerTitle: \"此处留白\", routename: \"home\"},\n    {headerTitle: \"片刻留白\", routename: \"daily\"},\n    {headerTitle: \"回音留白\", routename: \"vocality\"},\n    {headerTitle: \"字符留白\", routename: \"essay\"},\n    {headerTitle: \"半步留白\", routename: \"travels\"}\n  ],\n  isSlideBarShow: false,\n  isDetailHeader: false,\n  detailHeaderNickName:'',\n  personalInfo: {\n    avatar:'http://p1.wmpic.me/article/2017/03/06/1488780213_usvFXYIl.jpg',\n    nickname:'李留白',\n    uid: 9001\n  },\n  isAudioPlay:false,\n  currentPlayerUrl:'',\n  isfollow: false ,   //mockx下临时模拟的数据，正常情况下没有该字段\n  followcount:101,   //mockx下临时模拟的数据，正常情况下没有该字段\n  isLove:false,      //mockx下临时模拟的数据，正常情况下没有该字段\n  lovecount:12      //mockx下临时模拟的数据，正常情况下没有该字段\n}\n\nexport default state\n"
  },
  {
    "path": "static/.gitkeep",
    "content": ""
  },
  {
    "path": "static/css/reset.css",
    "content": "/**\n * Eric Meyer's Reset CSS v2.0 (http://meyerweb.com/eric/tools/css/reset/)\n * http://cssreset.com\n */\nhtml, body, div, span, applet, object, iframe,\nh1, h2, h3, h4, h5, h6, p, blockquote, pre,\na, abbr, acronym, address, big, cite, code,\ndel, dfn, em, img, ins, kbd, q, s, samp,\nsmall, strike, strong, sub, sup, tt, var,\nb, u, i, center,\ndl, dt, dd, ol, ul, li,\nfieldset, form, label, legend,\ntable, caption, tbody, tfoot, thead, tr, th, td,\narticle, aside, canvas, details, embed,\nfigure, figcaption, footer, header,\nmenu, nav, output, ruby, section, summary,\ntime, mark, audio, video, input {\n    margin: 0;\n    padding: 0;\n    border: 0;\n    font-size: 100%;\n    font-weight: normal;\n    vertical-align: baseline;\n}\n\n/* HTML5 display-role reset for older browsers */\narticle, aside, details, figcaption, figure,\nfooter, header, menu, nav, section {\n    display: block;\n}\n\nbody {\n    line-height: 1;\n}\n\nblockquote, q {\n    quotes: none;\n}\n\nblockquote:before, blockquote:after,\nq:before, q:after {\n    content: none;\n}\n\ntable {\n    border-collapse: collapse;\n    border-spacing: 0;\n}\n\n/* custom */\na {\n    color: #7e8c8d;\n    text-decoration: none;\n    -webkit-backface-visibility: hidden;\n}\n\nli {\n    list-style: none;\n}\n\n::-webkit-scrollbar {\n    width: 5px;\n    height: 5px;\n}\n\n::-webkit-scrollbar-track-piece {\n    background-color: rgba(0, 0, 0, 0.2);\n    -webkit-border-radius: 6px;\n}\n\n::-webkit-scrollbar-thumb:vertical {\n    height: 5px;\n    background-color: rgba(125, 125, 125, 0.7);\n    -webkit-border-radius: 6px;\n}\n\n::-webkit-scrollbar-thumb:horizontal {\n    width: 5px;\n    background-color: rgba(125, 125, 125, 0.7);\n    -webkit-border-radius: 6px;\n}\n\nhtml, body {\n    width: 100%;\n}\n\nbody {\n    -webkit-text-size-adjust: none;\n    -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n"
  }
]