├── .babelrc ├── .gitignore ├── .idea ├── fancy-store.iml ├── misc.xml ├── modules.xml ├── vcs.xml └── workspace.xml ├── .postcssrc.js ├── LICENSE ├── README.md ├── build ├── build.js ├── check-versions.js ├── favicon.png ├── github.png ├── logo.png ├── utils.js ├── vendor-manifest.json ├── vue-loader.conf.js ├── webpack.base.conf.js ├── webpack.dev.conf.js ├── webpack.dll.config.js └── webpack.prod.conf.js ├── config ├── dev.env.js ├── index.js └── prod.env.js ├── dist ├── index.html ├── precache-manifest.405e02c1c13e55a923ab27f3b3014342.js ├── service-worker.js ├── static │ ├── css │ │ ├── app.82e744b437a766b2e73fe8da7c0dfc3d.css │ │ ├── app.82e744b437a766b2e73fe8da7c0dfc3d.css.gz │ │ ├── iconfont.css │ │ ├── swiper.min.css │ │ └── swiper.min.css.gz │ ├── github.png │ ├── iconfont │ │ ├── iconfont.eot │ │ ├── iconfont.svg │ │ ├── iconfont.ttf │ │ └── iconfont.woff │ ├── img │ │ ├── favicon.png │ │ ├── github.png │ │ └── logo.png │ ├── js │ │ ├── 0.4e89b76a9b8b680460b8.js │ │ ├── 0.4e89b76a9b8b680460b8.js.gz │ │ ├── 1.dfa371a87014b2189288.js │ │ ├── 10.66ee08fb943231f7ddd5.js │ │ ├── 11.fed9aa2e784b67a4ef95.js │ │ ├── 12.d8a74bcc93c072e333ba.js │ │ ├── 2.a16941a1c1258deb3e32.js │ │ ├── 2.a16941a1c1258deb3e32.js.gz │ │ ├── 3.4e244e8a7461c07cfefb.js │ │ ├── 4.4ca64cc9f5454b7efe11.js │ │ ├── 5.ee9d87560f4a0224e225.js │ │ ├── 6.14304fb1eb65efcbf4f4.js │ │ ├── 7.51685c8857c33cfe1a99.js │ │ ├── 8.8ae3918cd8ef8931c0e6.js │ │ ├── 9.46b76a1c4b6a697943ac.js │ │ ├── app.ff7f382ad46feed21960.js │ │ ├── common.js │ │ ├── manifest.7804ab9d323801c9f706.js │ │ ├── rem.js │ │ ├── swiper.min.js │ │ ├── swiper.min.js.gz │ │ ├── vendor.c9c2c5fb7092aa901e92.js │ │ ├── vendor.c9c2c5fb7092aa901e92.js.gz │ │ ├── vendor.dll.js │ │ └── vendor.dll.js.gz │ └── less │ │ ├── base.less │ │ ├── reset.less │ │ └── variable.less └── sw-register.js ├── index.html ├── manifest.json ├── package-lock.json ├── package.json ├── src ├── .DS_Store ├── App.vue ├── components │ ├── .DS_Store │ ├── About │ │ └── About.vue │ ├── Agreement │ │ └── Agreement.vue │ ├── Collect │ │ └── Collect.vue │ ├── ForgetPasswd │ │ └── ForgetPasswd.vue │ ├── Hot │ │ └── Hot.vue │ ├── Index.vue │ ├── Login │ │ └── Login.vue │ ├── Member │ │ └── Member.vue │ ├── ModelBox │ │ ├── index.js │ │ └── index.vue │ ├── Register │ │ └── Register.vue │ ├── Search │ │ ├── Search.vue │ │ └── Searchbox.vue │ ├── ToastBox │ │ ├── index.js │ │ └── index.vue │ ├── base │ │ ├── Footer.vue │ │ ├── HeaderSec.vue │ │ └── NoPage.vue │ └── detail │ │ └── Detail.vue ├── main.js ├── router │ └── index.js └── store │ ├── actions.js │ ├── getters.js │ ├── index.js │ ├── mutation-types.js │ ├── mutations.js │ └── state.js └── static ├── css ├── iconfont.css └── swiper.min.css ├── github.png ├── iconfont ├── iconfont.eot ├── iconfont.svg ├── iconfont.ttf └── iconfont.woff ├── img ├── .DS_Store ├── favicon.png ├── github.png └── logo.png ├── js ├── common.js ├── rem.js ├── swiper.min.js └── vendor.dll.js └── less ├── base.less ├── reset.less └── variable.less /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["env", { 4 | "modules": false, 5 | "targets": { 6 | "browsers": ["> 1%", "last 2 versions", "not ie <= 8"] 7 | } 8 | }], 9 | "stage-2" 10 | ], 11 | "plugins": [[ 12 | "transform-runtime", 13 | { 14 | "helpers":false, 15 | "polyfill":false, 16 | "regenerator":true, 17 | "moduleName":"babel-runtime" 18 | } 19 | ] 20 | ] 21 | } 22 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | npm-debug.log 2 | node_modules 3 | .project 4 | .vscode 5 | .history 6 | .DS_Store 7 | .idea 8 | \.settings/ 9 | build/env.js 10 | .editorconfig -------------------------------------------------------------------------------- /.idea/fancy-store.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.postcssrc.js: -------------------------------------------------------------------------------- 1 | // https://github.com/michael-ciniawsky/postcss-load-config 2 | 3 | module.exports = { 4 | "plugins": { 5 | // to edit target browsers: use "browserslist" field in package.json 6 | "postcss-import": {}, 7 | "autoprefixer": {} 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Rick 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 使用Vue和Node实现前端,服务端,后台管理系统三个项目。 2 | 3 | 前后端分离,Restful API。 4 | 5 | * 前端: Vue-CLI 6 | * 服务端:Node-Koa2-Mongodb-Mongoose-七牛云对象存储 7 | 8 | * 后台管理系统: [iView-Admin](https://github.com/iview/iview-admin.git) 9 | 10 | * 开发IDE:VSCode 11 | 12 | * 部署环境:阿里云-Ubuntu16.04 13 | 14 | * 版本管理: Git 15 | 16 | 17 | ### 效果预览 18 | 19 | ![](https://user-gold-cdn.xitu.io/2018/7/1/16453367a8152049?w=362&h=648&f=gif&s=3244257) 20 | 21 | ![](https://user-gold-cdn.xitu.io/2018/7/1/1645493a797aef5a?w=364&h=646&f=gif&s=3248323) 22 | # 在线访问 23 | ### 前端: 24 | 25 | 扫码查看: 26 | ![](https://user-gold-cdn.xitu.io/2018/7/1/16454c3ce8fad285?w=280&h=280&f=png&s=1923) 27 | 28 | 在线查看: 29 | 30 | [http://infinite.czero.cn/Infinite-webDesign/dist](http://infinite.czero.cn/Infinite-webDesign/dist/#/hot) 31 | 32 | ### 后台管理系统: 33 | 还没有添加权限管理的功能,后续会加上。进入登录页面,如果不懂或者需要账号私聊我。。。 34 | 第一次使用iview-admin,感觉功能还是挺多的,还在摸索阶段,只用来实现简陋的功能,后续会持续优化。 35 | ![](https://user-gold-cdn.xitu.io/2018/7/1/164534495741f97e?w=600&h=426&f=gif&s=3022647) 36 | 37 | 在线查看: 38 | 39 | [http://infinite.czero.cn/Infinite-webAdmin/dist](http://infinite.czero.cn/Infinite-webAdmin/dist) 40 | 41 | ### 项目概览 42 | ### 前端(Vue-CLI): 43 | 功能: 44 | 架构是基于[Vue全家桶购物商城](https://github.com/czero1995/fancy-store.git) 45 | 46 | 1. 添加better-scroll组件实现下拉刷新和上拉加载。 47 | 2. 请求服务端API,真实的数据交互。 48 | 3. 添加搜索,登录,注册等功能并Vuex进行存储。 49 | 4. 图片都是使用Iconfont。 50 | 5. 动画切换,使用Vue-router做路由判断来实现不同的切换动画。 51 | 6. 模块化,全局注册组件弹窗(alert和toast)效果,封装共用js函数类。 52 | 7. 配置Webpack请求代理,解决请求服务器端跨域问题。 53 | 8. 使用keep-alive对组件进行缓存 54 | 55 | 目录结构: 56 | 57 | ├── config (配置目录,需要在index.js配置代理,不然会出现跨域的问题) 58 | │   ├── dev.env.js 59 | │   ├── index.js (配置跨域) 60 | │   └── prod.env.js 61 | ├── image 62 | │   └── github.png 63 | ├── index.html 64 | ├── components (组件目录) 65 | │   ├── About(关于我们) 66 | │   ├── Agreement(用户协议) 67 | │   ├── Base(共用基础组件) 68 | │   ├── Collect(我的收藏) 69 | │   ├── Detail(内容详情) 70 | │   ├── ForgetPasswd(忘记密码) 71 | │   ├── Hot(发现热门页) 72 | │   ├── Index.vue(首页,推荐页面) 73 | │   ├── Login(登录页) 74 | │   ├── Member(个人中心页) 75 | │   ├── ModelBox(全局注册弹窗组件) 76 | │   ├── Register(注册页) 77 | │   ├── Search(搜索页) 78 | │   └── ToastBox(全局注册Toast组件) 79 | ├── main.js 80 | ├── router 81 | │   └── index.js 82 | └── store (Vuex) 83 | ├── actions.js 84 | ├── getters.js (获取Vuex状态) 85 | ├── index.js (Vuex入口文件) 86 | ├── mutation-types.js (变量存储) 87 | ├── mutations.js (to修改动作) 88 | └── state.js (状态仓库) 89 | ### Vue-CLI Webpack构建优化 90 | #### 只黏贴关键部分的代码 91 | * 使用Happypack多线程打包构建 92 | 93 | 在**build/webpack.base.cong.js**下添加如下代码 94 | 95 | const HappyPack = require('happypack') 96 | const os = require('os') 97 | const happyThreadPool = HappyPack.ThreadPool({ size: os.cpus().length }) 98 | 99 | plugins: [ 100 | new HappyPack({ 101 | id: 'happy-babel-js', 102 | loaders: ['babel-loader?cacheDirectory=true'], 103 | threadPool: happyThreadPool, 104 | }) 105 | ], 106 | 107 | { 108 | test: /\.js$/, 109 | // loader: 'babel-loader', 110 | loader: 'happypack/loader?id=happy-babel-js', // 增加新的HappyPack构建loader 111 | exclude: /node_modules/, 112 | include: [resolve('src')] 113 | }, 114 | 115 | * babrl-loader开启缓存 116 | 117 | * 启用DllPlugin和DllReferencePlugin预编译库文件 118 | 119 | 120 | 第三方库文件单独打包一次,以后的编译都不需要在编译打包第三方库 121 | 122 | 在**build/**文件夹下新建**webpack.dll.config.js**文件,复制一下代码: 123 | 124 | const path = require("path") 125 | const webpack = require("webpack") 126 | 127 | module.exports = { 128 | // 你想要打包的模块的数组 129 | entry: { 130 | vendor: ['vue/dist/vue.esm.js', 'axios', 'vue-router', 'vuex'] 131 | }, 132 | output: { 133 | path: path.join(__dirname, '../static/js'), // 打包后文件输出的位置 134 | filename: '[name].dll.js', 135 | library: '[name]_library' 136 | }, 137 | plugins: [ 138 | new webpack.DllPlugin({ 139 | path: path.join(__dirname, '.', '[name]-manifest.json'), 140 | name: '[name]_library', 141 | context: __dirname 142 | }), 143 | // 压缩打包的文件 144 | new webpack.optimize.UglifyJsPlugin({ 145 | compress: { 146 | warnings: false 147 | } 148 | }) 149 | ] 150 | } 151 | 在**build/webpack.dev.config.js**和**build/webpack.prod.config.js**中添加plugins 152 | 153 | new webpack.DllReferencePlugin({ 154 | context: __dirname, 155 | manifest: require('./vendor-manifest.json') 156 | }), 157 | 158 | 在**根目录下的index.html**下引入预编译的库 159 | 160 | 161 | 162 | 在**package.json/scripts**下中添加dll命令 163 | 164 | "dll": "webpack --config ./build/webpack.dll.config.js" 165 | 166 | 运行: 167 | 168 | npm run dll 169 | 170 | 然后再 171 | 172 | npm run dev或npm run build 173 | 174 | ### 服务端(Node-Koa2-Mongodb-Mongoose): 175 | 功能: 176 | 177 | 1. 分页加载 178 | 2. 模糊查询 179 | 3. 定制Restful API 180 | 4. 七牛云第三方对象存储对接 181 | 5. pm2部署到阿里云 182 | 183 | 184 | 项目目录: 185 | 186 | ├── app 187 | │   ├── controllers (逻辑处理目录) 188 | │   │   ├── admin 189 | │   │   ├── app.js 190 | │   │   ├── hot 191 | │   │   ├── recommend 192 | │   │   ├── upload 193 | │   │   └── user 194 | │   ├── dbhelper (操控数据表目录) 195 | │   │   ├── AdminHelper.js 196 | │   │   ├── hotHelper.js 197 | │   │   ├── recommendHelper.js 198 | │   │   └── userHelper.js 199 | │   └── models (数据库模型目录) 200 | │   ├── admin.js (管理员表) 201 | │   ├── hot.js (热门发现数据表) 202 | │   ├── recommend.js (首页推荐表) 203 | │   └── user.js (用户管理表--登录注册) 204 | ├── app.js (服务端启动入口文件 node app.js) 205 | ├── config (配置目录) 206 | │   ├── config.js (基础配置信息--七牛云配置,数据库配置) 207 | │   └── router.js (路由配置) 208 | 209 | 210 | ### 后台管理系统(iView-Admin): 211 | 212 | 功能: 213 | 214 | 1. 文章管理,图片上传到七牛云。 215 | 2. 编辑文章 216 | 3. 添加文章 217 | 4. 用户管理 218 | 5. 富文本内容添加 219 | 220 | 221 | 项目目录: 222 | 223 | ├── build (配置全局请求地址和跨域处理) 224 | │   ├── webpack.dev.config.js (在这里配置请求跨域问题,及全局请求地址) 225 | ├── index.html 226 | ├── src 227 | │   ├── main.js 228 | │   ├── mixins (公共js工具目录) 229 | │   │   └── common.js 230 | │   ├── router (路由配置) 231 | │   │   ├── index.js 232 | │   │   └── router.js 233 | │   └── views 234 | │   ├── Main.vue 235 | │   ├── error-page 236 | │   ├── home 237 | │   ├── login.less 238 | │   ├── login.vue 239 | │   ├── main-components (组件入口目录) 240 | │   ├── main-menu 241 | │   ├─── edit (编辑) 242 | │   ├── hot (热门) 243 | │   ├── recommend (发现) 244 | │   ├── user (用户管理) 245 | │   ├── main.less 246 | │   ├── message 247 | │   └── my-components 248 | 249 | 250 | ## 调试方法: 251 | 1. Chrome调试(谷歌浏览器工具) 252 | 2. vConsole调试(真机调试查看log日志神器) 253 | 3. API调试神奇Postman。 254 | 4. Vue-devtools(调试Vuex状态) 255 | 256 | ## 跨域处理 257 | 1. 使用Webpack的proxyTable进行请求代理 258 | 2. Chrome安装cors拓展 259 | 3. 服务端配置所以路径都可跨域或者将开发的IP加入白名单 260 | 261 | ## 源码 262 | 前端源码: [https://github.com/czero1995/Infinite-webDesign.git](https://github.com/czero1995/Infinite-webDesign.git) 263 | 264 | 服务端源码:[https://github.com/czero1995/Infinite-webServer.git](https://github.com/czero1995/Infinite-webServer.git) 265 | 266 | 后台管理源码: [https://github.com/czero1995/Infinite-webAdmin.git](https://github.com/czero1995/Infinite-webAdmin.git) 267 | 268 | # 使用说明 269 | 270 | #克隆项目 271 | git clone https://github.com/czero1995/Infinite-webDesign.git 272 | 273 | # 安装依赖 274 | npm install 275 | 276 | # DLL构建库(提高打包和编译的速度) 277 | npm run dll 278 | 279 | # 本地开发环境 访问http://localhost:4000 280 | npm run dev 281 | 282 | # 构建生产 283 | npm run build 284 | 285 | ## 最后 286 | 如有建议或者问题,请私聊联系我,一起学习和进步。反手给我一个star^_^ 287 | -------------------------------------------------------------------------------- /build/build.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | require('./check-versions')() 3 | 4 | process.env.NODE_ENV = 'production' 5 | 6 | const ora = require('ora') 7 | const rm = require('rimraf') 8 | const path = require('path') 9 | const chalk = require('chalk') 10 | const webpack = require('webpack') 11 | const config = require('../config') 12 | const webpackConfig = require('./webpack.prod.conf') 13 | 14 | const spinner = ora('building for production...') 15 | spinner.start() 16 | 17 | rm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err => { 18 | if (err) throw err 19 | webpack(webpackConfig, (err, stats) => { 20 | spinner.stop() 21 | if (err) throw err 22 | process.stdout.write(stats.toString({ 23 | colors: true, 24 | modules: false, 25 | children: false, // if you are using ts-loader, setting this to true will make tyescript errors show up during build 26 | chunks: false, 27 | chunkModules: false 28 | }) + '\n\n') 29 | 30 | if (stats.hasErrors()) { 31 | console.log(chalk.red(' Build failed with errors.\n')) 32 | process.exit(1) 33 | } 34 | 35 | console.log(chalk.cyan(' Build complete.\n')) 36 | console.log(chalk.yellow( 37 | ' Tip: built files are meant to be served over an HTTP server.\n' + 38 | ' Opening index.html over file:// won\'t work.\n' 39 | )) 40 | }) 41 | }) 42 | -------------------------------------------------------------------------------- /build/check-versions.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const chalk = require('chalk') 3 | const semver = require('semver') 4 | const packageConfig = require('../package.json') 5 | const shell = require('shelljs') 6 | 7 | function exec (cmd) { 8 | return require('child_process').execSync(cmd).toString().trim() 9 | } 10 | 11 | const versionRequirements = [ 12 | { 13 | name: 'node', 14 | currentVersion: semver.clean(process.version), 15 | versionRequirement: packageConfig.engines.node 16 | } 17 | ] 18 | 19 | if (shell.which('npm')) { 20 | versionRequirements.push({ 21 | name: 'npm', 22 | currentVersion: exec('npm --version'), 23 | versionRequirement: packageConfig.engines.npm 24 | }) 25 | } 26 | 27 | module.exports = function () { 28 | const warnings = [] 29 | 30 | for (let i = 0; i < versionRequirements.length; i++) { 31 | const mod = versionRequirements[i] 32 | 33 | if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) { 34 | warnings.push(mod.name + ': ' + 35 | chalk.red(mod.currentVersion) + ' should be ' + 36 | chalk.green(mod.versionRequirement) 37 | ) 38 | } 39 | } 40 | 41 | if (warnings.length) { 42 | console.log('') 43 | console.log(chalk.yellow('To use this template, you must update following to modules:')) 44 | console.log() 45 | 46 | for (let i = 0; i < warnings.length; i++) { 47 | const warning = warnings[i] 48 | console.log(' ' + warning) 49 | } 50 | 51 | console.log() 52 | process.exit(1) 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /build/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/czero1995/Infinite-webDesign/418f957b298ac3dc1ef08e0f4c4f0dd22cbbe9c9/build/favicon.png -------------------------------------------------------------------------------- /build/github.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/czero1995/Infinite-webDesign/418f957b298ac3dc1ef08e0f4c4f0dd22cbbe9c9/build/github.png -------------------------------------------------------------------------------- /build/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/czero1995/Infinite-webDesign/418f957b298ac3dc1ef08e0f4c4f0dd22cbbe9c9/build/logo.png -------------------------------------------------------------------------------- /build/utils.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const path = require('path') 3 | const config = require('../config') 4 | const ExtractTextPlugin = require('extract-text-webpack-plugin') 5 | const packageConfig = require('../package.json') 6 | 7 | exports.assetsPath = function (_path) { 8 | const assetsSubDirectory = process.env.NODE_ENV === 'production' 9 | ? config.build.assetsSubDirectory 10 | : config.dev.assetsSubDirectory 11 | 12 | return path.posix.join(assetsSubDirectory, _path) 13 | } 14 | 15 | exports.cssLoaders = function (options) { 16 | options = options || {} 17 | 18 | const cssLoader = { 19 | loader: 'css-loader', 20 | options: { 21 | sourceMap: options.sourceMap 22 | } 23 | } 24 | 25 | const postcssLoader = { 26 | loader: 'postcss-loader', 27 | options: { 28 | sourceMap: options.sourceMap 29 | } 30 | } 31 | 32 | // generate loader string to be used with extract text plugin 33 | function generateLoaders (loader, loaderOptions) { 34 | const loaders = options.usePostCSS ? [cssLoader, postcssLoader] : [cssLoader] 35 | 36 | if (loader) { 37 | loaders.push({ 38 | loader: loader + '-loader', 39 | options: Object.assign({}, loaderOptions, { 40 | sourceMap: options.sourceMap 41 | }) 42 | }) 43 | } 44 | 45 | // Extract CSS when that option is specified 46 | // (which is the case during production build) 47 | if (options.extract) { 48 | return ExtractTextPlugin.extract({ 49 | use: loaders, 50 | fallback: 'vue-style-loader' 51 | }) 52 | } else { 53 | return ['vue-style-loader'].concat(loaders) 54 | } 55 | } 56 | 57 | // https://vue-loader.vuejs.org/en/configurations/extract-css.html 58 | return { 59 | css: generateLoaders(), 60 | postcss: generateLoaders(), 61 | less: generateLoaders('less'), 62 | sass: generateLoaders('sass', { indentedSyntax: true }), 63 | scss: generateLoaders('sass'), 64 | stylus: generateLoaders('stylus'), 65 | styl: generateLoaders('stylus') 66 | } 67 | } 68 | 69 | // Generate loaders for standalone style files (outside of .vue) 70 | exports.styleLoaders = function (options) { 71 | const output = [] 72 | const loaders = exports.cssLoaders(options) 73 | 74 | for (const extension in loaders) { 75 | const loader = loaders[extension] 76 | output.push({ 77 | test: new RegExp('\\.' + extension + '$'), 78 | use: loader 79 | }) 80 | } 81 | 82 | return output 83 | } 84 | 85 | exports.createNotifierCallback = () => { 86 | const notifier = require('node-notifier') 87 | 88 | return (severity, errors) => { 89 | if (severity !== 'error') return 90 | 91 | const error = errors[0] 92 | const filename = error.file && error.file.split('!').pop() 93 | 94 | notifier.notify({ 95 | title: packageConfig.name, 96 | message: severity + ': ' + error.name, 97 | subtitle: filename || '', 98 | icon: path.join(__dirname, 'logo.png') 99 | }) 100 | } 101 | } 102 | -------------------------------------------------------------------------------- /build/vendor-manifest.json: -------------------------------------------------------------------------------- 1 | {"name":"vendor_library","content":{"../node_modules/axios/lib/utils.js":{"id":0,"meta":{}},"../node_modules/process/browser.js":{"id":1,"meta":{}},"../node_modules/axios/lib/defaults.js":{"id":2,"meta":{}},"../node_modules/webpack/buildin/global.js":{"id":3,"meta":{}},"../node_modules/axios/lib/helpers/bind.js":{"id":4,"meta":{}},"../node_modules/axios/lib/adapters/xhr.js":{"id":5,"meta":{}},"../node_modules/axios/lib/core/createError.js":{"id":6,"meta":{}},"../node_modules/axios/lib/cancel/isCancel.js":{"id":7,"meta":{}},"../node_modules/axios/lib/cancel/Cancel.js":{"id":8,"meta":{}},"../node_modules/vue/dist/vue.esm.js":{"id":10,"meta":{"harmonyModule":true},"exports":["default"]},"../node_modules/timers-browserify/main.js":{"id":11,"meta":{}},"../node_modules/setimmediate/setImmediate.js":{"id":12,"meta":{}},"../node_modules/axios/index.js":{"id":13,"meta":{}},"../node_modules/axios/lib/axios.js":{"id":14,"meta":{}},"../node_modules/is-buffer/index.js":{"id":15,"meta":{}},"../node_modules/axios/lib/core/Axios.js":{"id":16,"meta":{}},"../node_modules/axios/lib/helpers/normalizeHeaderName.js":{"id":17,"meta":{}},"../node_modules/axios/lib/core/settle.js":{"id":18,"meta":{}},"../node_modules/axios/lib/core/enhanceError.js":{"id":19,"meta":{}},"../node_modules/axios/lib/helpers/buildURL.js":{"id":20,"meta":{}},"../node_modules/axios/lib/helpers/parseHeaders.js":{"id":21,"meta":{}},"../node_modules/axios/lib/helpers/isURLSameOrigin.js":{"id":22,"meta":{}},"../node_modules/axios/lib/helpers/btoa.js":{"id":23,"meta":{}},"../node_modules/axios/lib/helpers/cookies.js":{"id":24,"meta":{}},"../node_modules/axios/lib/core/InterceptorManager.js":{"id":25,"meta":{}},"../node_modules/axios/lib/core/dispatchRequest.js":{"id":26,"meta":{}},"../node_modules/axios/lib/core/transformData.js":{"id":27,"meta":{}},"../node_modules/axios/lib/helpers/isAbsoluteURL.js":{"id":28,"meta":{}},"../node_modules/axios/lib/helpers/combineURLs.js":{"id":29,"meta":{}},"../node_modules/axios/lib/cancel/CancelToken.js":{"id":30,"meta":{}},"../node_modules/axios/lib/helpers/spread.js":{"id":31,"meta":{}},"../node_modules/vue-router/dist/vue-router.esm.js":{"id":32,"meta":{"harmonyModule":true},"exports":["default"]},"../node_modules/vuex/dist/vuex.esm.js":{"id":33,"meta":{"harmonyModule":true},"exports":["Store","install","mapState","mapMutations","mapGetters","mapActions","createNamespacedHelpers","default"]}}} -------------------------------------------------------------------------------- /build/vue-loader.conf.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const utils = require('./utils') 3 | const config = require('../config') 4 | const isProduction = process.env.NODE_ENV === 'production' 5 | const sourceMapEnabled = isProduction 6 | ? config.build.productionSourceMap 7 | : config.dev.cssSourceMap 8 | 9 | module.exports = { 10 | loaders: utils.cssLoaders({ 11 | sourceMap: sourceMapEnabled, 12 | extract: isProduction 13 | }), 14 | cssSourceMap: sourceMapEnabled, 15 | cacheBusting: config.dev.cacheBusting, 16 | transformToRequire: { 17 | video: ['src', 'poster'], 18 | source: 'src', 19 | img: 'src', 20 | image: 'xlink:href' 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /build/webpack.base.conf.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const path = require('path') 3 | const utils = require('./utils') 4 | const config = require('../config') 5 | const vueLoaderConfig = require('./vue-loader.conf') 6 | const HappyPack = require('happypack') 7 | const os = require('os') 8 | const happyThreadPool = HappyPack.ThreadPool({ size: os.cpus().length }) 9 | 10 | function resolve(dir) { 11 | return path.join(__dirname, '..', dir) 12 | } 13 | 14 | 15 | 16 | module.exports = { 17 | context: path.resolve(__dirname, '../'), 18 | entry: { 19 | app: './src/main.js' 20 | }, 21 | output: { 22 | path: config.build.assetsRoot, 23 | filename: '[name].js', 24 | publicPath: process.env.NODE_ENV === 'production' 25 | ? config.build.assetsPublicPath 26 | : config.dev.assetsPublicPath 27 | }, 28 | resolve: { 29 | extensions: ['.js', '.vue', '.json'], 30 | alias: { 31 | 'vue$': 'vue/dist/vue.esm.js', 32 | '@': resolve('src'), 33 | } 34 | }, 35 | // 增加HappyPack插件 36 | plugins: [ 37 | new HappyPack({ 38 | id: 'happy-babel-js', 39 | loaders: ['babel-loader?cacheDirectory=true'], 40 | threadPool: happyThreadPool, 41 | }) 42 | ], 43 | module: { 44 | rules: [ 45 | { 46 | test: /\.vue$/, 47 | loader: 'vue-loader', 48 | options: vueLoaderConfig 49 | }, 50 | { 51 | test: /\.less$/, 52 | loader: 'vue-loader', 53 | options: vueLoaderConfig 54 | }, 55 | { 56 | test: /\.js$/, 57 | // loader: 'babel-loader', 58 | loader: 'happypack/loader?id=happy-babel-js', // 增加新的HappyPack构建loader 59 | exclude: /node_modules/, 60 | include: [resolve('src')] 61 | }, 62 | { 63 | test: /\.(png|jpe?g|gif|svg)(\?.*)?$/, 64 | loader: 'url-loader', 65 | options: { 66 | limit: 10000, 67 | name: utils.assetsPath('img/[name].[hash:7].[ext]') 68 | } 69 | }, 70 | { 71 | test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/, 72 | loader: 'url-loader', 73 | options: { 74 | limit: 10000, 75 | name: utils.assetsPath('media/[name].[hash:7].[ext]') 76 | } 77 | }, 78 | { 79 | test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/, 80 | loader: 'url-loader', 81 | options: { 82 | limit: 10000, 83 | name: utils.assetsPath('fonts/[name].[hash:7].[ext]') 84 | } 85 | } 86 | ] 87 | }, 88 | node: { 89 | // prevent webpack from injecting useless setImmediate polyfill because Vue 90 | // source contains it (although only uses it if it's native). 91 | setImmediate: false, 92 | // prevent webpack from injecting mocks to Node native modules 93 | // that does not make sense for the client 94 | dgram: 'empty', 95 | fs: 'empty', 96 | net: 'empty', 97 | tls: 'empty', 98 | child_process: 'empty' 99 | } 100 | } 101 | -------------------------------------------------------------------------------- /build/webpack.dev.conf.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const utils = require('./utils') 3 | const webpack = require('webpack') 4 | const config = require('../config') 5 | const merge = require('webpack-merge') 6 | const baseWebpackConfig = require('./webpack.base.conf') 7 | const HtmlWebpackPlugin = require('html-webpack-plugin') 8 | const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin') 9 | const portfinder = require('portfinder') 10 | 11 | const HOST = process.env.HOST 12 | const PORT = process.env.PORT && Number(process.env.PORT) 13 | 14 | const devWebpackConfig = merge(baseWebpackConfig, { 15 | module: { 16 | rules: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap, usePostCSS: true }) 17 | }, 18 | // cheap-module-eval-source-map is faster for development 19 | devtool: config.dev.devtool, 20 | 21 | // these devServer options should be customized in /config/index.js 22 | devServer: { 23 | clientLogLevel: 'warning', 24 | historyApiFallback: true, 25 | hot: true, 26 | compress: true, 27 | host: HOST || config.dev.host, 28 | port: PORT || config.dev.port, 29 | open: config.dev.autoOpenBrowser, 30 | overlay: config.dev.errorOverlay 31 | ? { warnings: false, errors: true } 32 | : false, 33 | publicPath: config.dev.assetsPublicPath, 34 | proxy: config.dev.proxyTable, 35 | quiet: true, // necessary for FriendlyErrorsPlugin 36 | watchOptions: { 37 | poll: config.dev.poll, 38 | }, 39 | disableHostCheck: true 40 | }, 41 | plugins: [ 42 | new webpack.DllReferencePlugin({ 43 | context: __dirname, 44 | manifest: require('./vendor-manifest.json') 45 | }), 46 | new webpack.HotModuleReplacementPlugin(), 47 | new webpack.NamedModulesPlugin(), // HMR shows correct file names in console on update. 48 | new webpack.NoEmitOnErrorsPlugin(), 49 | // https://github.com/ampedandwired/html-webpack-plugin 50 | new HtmlWebpackPlugin({ 51 | filename: 'index.html', 52 | template: 'index.html', 53 | inject: true 54 | }), 55 | ] 56 | }) 57 | 58 | module.exports = new Promise((resolve, reject) => { 59 | portfinder.basePort = process.env.PORT || config.dev.port 60 | portfinder.getPort((err, port) => { 61 | if (err) { 62 | reject(err) 63 | } else { 64 | // publish the new Port, necessary for e2e tests 65 | process.env.PORT = port 66 | // add port to devServer config 67 | devWebpackConfig.devServer.port = port 68 | 69 | // Add FriendlyErrorsPlugin 70 | devWebpackConfig.plugins.push(new FriendlyErrorsPlugin({ 71 | compilationSuccessInfo: { 72 | messages: [`Your application is running here: http://${devWebpackConfig.devServer.host}:${port}`], 73 | }, 74 | onErrors: config.dev.notifyOnErrors 75 | ? utils.createNotifierCallback() 76 | : undefined 77 | })) 78 | 79 | resolve(devWebpackConfig) 80 | } 81 | }) 82 | }) 83 | -------------------------------------------------------------------------------- /build/webpack.dll.config.js: -------------------------------------------------------------------------------- 1 | const path = require("path") 2 | const webpack = require("webpack") 3 | 4 | module.exports = { 5 | // 你想要打包的模块的数组 6 | entry: { 7 | vendor: ['vue/dist/vue.esm.js', 'axios', 'vue-router', 'vuex'] 8 | }, 9 | output: { 10 | path: path.join(__dirname, '../static/js'), // 打包后文件输出的位置 11 | filename: '[name].dll.js', 12 | library: '[name]_library' 13 | }, 14 | plugins: [ 15 | new webpack.DllPlugin({ 16 | path: path.join(__dirname, '.', '[name]-manifest.json'), 17 | name: '[name]_library', 18 | context: __dirname 19 | }), 20 | // 压缩打包的文件 21 | new webpack.optimize.UglifyJsPlugin({ 22 | compress: { 23 | warnings: false 24 | } 25 | }) 26 | ] 27 | } 28 | -------------------------------------------------------------------------------- /build/webpack.prod.conf.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const path = require('path') 3 | const utils = require('./utils') 4 | const webpack = require('webpack') 5 | const config = require('../config') 6 | const merge = require('webpack-merge') 7 | const baseWebpackConfig = require('./webpack.base.conf') 8 | const CopyWebpackPlugin = require('copy-webpack-plugin') 9 | const HtmlWebpackPlugin = require('html-webpack-plugin') 10 | const ExtractTextPlugin = require('extract-text-webpack-plugin') 11 | const OptimizeCSSPlugin = require('optimize-css-assets-webpack-plugin') 12 | const UglifyJsPlugin = require('uglifyjs-webpack-plugin') 13 | const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin; 14 | const env = require('../config/prod.env') 15 | 16 | const webpackConfig = merge(baseWebpackConfig, { 17 | module: { 18 | rules: utils.styleLoaders({ 19 | sourceMap: config.build.productionSourceMap, 20 | extract: true, 21 | usePostCSS: true 22 | }) 23 | }, 24 | devtool: config.build.productionSourceMap ? config.build.devtool : false, 25 | output: { 26 | path: config.build.assetsRoot, 27 | filename: utils.assetsPath('js/[name].[chunkhash].js'), 28 | chunkFilename: utils.assetsPath('js/[id].[chunkhash].js') 29 | }, 30 | plugins: [ 31 | // http://vuejs.github.io/vue-loader/en/workflow/production.html 32 | new webpack.DefinePlugin({ 33 | 'process.env': env 34 | }), 35 | new UglifyJsPlugin({ 36 | uglifyOptions: { 37 | compress: { 38 | warnings: false 39 | } 40 | }, 41 | sourceMap: config.build.productionSourceMap, 42 | parallel: true 43 | }), 44 | // new BundleAnalyzerPlugin(), //开启webpack-bunble-analyzer,查看打包后的资源占用 45 | // extract css into its own file 46 | new ExtractTextPlugin({ 47 | filename: utils.assetsPath('css/[name].[contenthash].css'), 48 | // Setting the following option to `false` will not extract CSS from codesplit chunks. 49 | // Their CSS will instead be inserted dynamically with style-loader when the codesplit chunk has been loaded by webpack. 50 | // It's currently set to `true` because we are seeing that sourcemaps are included in the codesplit bundle as well when it's `false`, 51 | // increasing file size: https://github.com/vuejs-templates/webpack/issues/1110 52 | allChunks: true, 53 | }), 54 | // Compress extracted CSS. We are using this plugin so that possible 55 | // duplicated CSS from different components can be deduped. 56 | new OptimizeCSSPlugin({ 57 | cssProcessorOptions: config.build.productionSourceMap 58 | ? { safe: true, map: { inline: false } } 59 | : { safe: true } 60 | }), 61 | // generate dist index.html with correct asset hash for caching. 62 | // you can customize output by editing /index.html 63 | // see https://github.com/ampedandwired/html-webpack-plugin 64 | new HtmlWebpackPlugin({ 65 | filename: config.build.index, 66 | template: 'index.html', 67 | inject: true, 68 | minify: { 69 | removeComments: true, 70 | collapseWhitespace: true, 71 | removeAttributeQuotes: true 72 | // more options: 73 | // https://github.com/kangax/html-minifier#options-quick-reference 74 | }, 75 | // necessary to consistently work with multiple chunks via CommonsChunkPlugin 76 | chunksSortMode: 'dependency' 77 | }), 78 | // keep module.id stable when vender modules does not change 79 | new webpack.HashedModuleIdsPlugin(), 80 | // enable scope hoisting 81 | new webpack.optimize.ModuleConcatenationPlugin(), 82 | // split vendor js into its own file 83 | new webpack.optimize.CommonsChunkPlugin({ 84 | name: 'vendor', 85 | minChunks(module) { 86 | // any required modules inside node_modules are extracted to vendor 87 | return ( 88 | module.resource && 89 | /\.js$/.test(module.resource) && 90 | module.resource.indexOf( 91 | path.join(__dirname, '../node_modules') 92 | ) === 0 93 | ) 94 | } 95 | }), 96 | // extract webpack runtime and module manifest to its own file in order to 97 | // prevent vendor hash from being updated whenever app bundle is updated 98 | new webpack.optimize.CommonsChunkPlugin({ 99 | name: 'manifest', 100 | minChunks: Infinity 101 | }), 102 | // This instance extracts shared chunks from code splitted chunks and bundles them 103 | // in a separate chunk, similar to the vendor chunk 104 | // see: https://webpack.js.org/plugins/commons-chunk-plugin/#extra-async-commons-chunk 105 | new webpack.optimize.CommonsChunkPlugin({ 106 | name: 'app', 107 | async: 'vendor-async', 108 | children: true, 109 | minChunks: 3 110 | }), 111 | 112 | // copy custom static assets 113 | new CopyWebpackPlugin([ 114 | { 115 | from: path.resolve(__dirname, '../static'), 116 | to: config.build.assetsSubDirectory, 117 | ignore: ['.*'] 118 | } 119 | ]), 120 | new webpack.DllReferencePlugin({ 121 | context: __dirname, 122 | manifest: require('./vendor-manifest.json') 123 | }) 124 | ] 125 | }) 126 | 127 | if (config.build.productionGzip) { 128 | const CompressionWebpackPlugin = require('compression-webpack-plugin') 129 | 130 | webpackConfig.plugins.push( 131 | new CompressionWebpackPlugin({ 132 | asset: '[path].gz[query]', 133 | algorithm: 'gzip', 134 | test: new RegExp( 135 | '\\.(' + 136 | config.build.productionGzipExtensions.join('|') + 137 | ')$' 138 | ), 139 | threshold: 10240, 140 | minRatio: 0.8 141 | }) 142 | ) 143 | } 144 | 145 | if (config.build.bundleAnalyzerReport) { 146 | const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin 147 | webpackConfig.plugins.push(new BundleAnalyzerPlugin()) 148 | } 149 | 150 | module.exports = webpackConfig 151 | -------------------------------------------------------------------------------- /config/dev.env.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const merge = require('webpack-merge') 3 | const prodEnv = require('./prod.env') 4 | 5 | module.exports = merge(prodEnv, { 6 | NODE_ENV: '"development"' 7 | }) 8 | -------------------------------------------------------------------------------- /config/index.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | // Template version: 1.2.7 3 | // see http://vuejs-templates.github.io/webpack for documentation. 4 | 5 | const path = require('path') 6 | 7 | module.exports = { 8 | dev: { 9 | 10 | // Paths 11 | assetsSubDirectory: 'static', 12 | assetsPublicPath: '/', 13 | proxyTable: { 14 | '/api': { 15 | // target: 'http://127.0.0.1:3000/', 16 | target: 'http://infinite.czero.cn:3000/', 17 | changeOrigin: true, 18 | pathRewrite: { '^/api': '/api' } 19 | 20 | } 21 | }, 22 | 23 | // Various Dev Server settings 24 | host: '127.0.0.1', // can be overwritten by process.env.HOST 25 | port: 4000, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined 26 | autoOpenBrowser: false, 27 | errorOverlay: true, 28 | notifyOnErrors: true, 29 | poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions- 30 | 31 | 32 | /** 33 | * Source Maps` 34 | */ 35 | 36 | // https://webpack.js.org/configuration/devtool/#development 37 | devtool: 'cheap-source-map', 38 | 39 | // If you have problems debugging vue-files in devtools, 40 | // set this to false - it *may* help 41 | // https://vue-loader.vuejs.org/en/options.html#cachebusting 42 | cacheBusting: true, 43 | 44 | // CSS Sourcemaps off by default because relative paths are "buggy" 45 | // with this option, according to the CSS-Loader README 46 | // (https://github.com/webpack/css-loader#sourcemaps) 47 | // In our experience, they generally work as expected, 48 | // just be aware of this issue when enabling this option. 49 | cssSourceMap: false, 50 | }, 51 | 52 | build: { 53 | // Template for index.html 54 | index: path.resolve(__dirname, '../dist/index.html'), 55 | 56 | // Paths 57 | assetsRoot: path.resolve(__dirname, '../dist'), 58 | assetsSubDirectory: './static', 59 | assetsPublicPath: './', 60 | 61 | /** 62 | * Source Maps 63 | */ 64 | 65 | productionSourceMap: false, 66 | // https://webpack.js.org/configuration/devtool/#production 67 | devtool: '#source-map', 68 | 69 | // Gzip off by default as many popular static hosts such as 70 | // Surge or Netlify already gzip all static assets for you. 71 | // Before setting to `true`, make sure to: 72 | // npm install --save-dev compression-webpack-plugin 73 | productionGzip: true, 74 | productionGzipExtensions: ['js', 'css'], 75 | 76 | // Run the build command with an extra argument to 77 | // View the bundle analyzer report after build finishes: 78 | // `npm run build --report` 79 | // Set to `true` or `false` to always turn it on or off 80 | bundleAnalyzerReport: process.env.npm_config_report 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /config/prod.env.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | module.exports = { 3 | NODE_ENV: '"production"', 4 | API_ROOT: '"//infinite.czero.cn:3000"' 5 | } 6 | -------------------------------------------------------------------------------- /dist/index.html: -------------------------------------------------------------------------------- 1 | Infinite

请在移动端打开,并刷新页面。

-------------------------------------------------------------------------------- /dist/precache-manifest.405e02c1c13e55a923ab27f3b3014342.js: -------------------------------------------------------------------------------- 1 | self.__precacheManifest = [ 2 | { 3 | "revision": "90892628b69cec3bc4be58715fc72606", 4 | "url": "./index.html" 5 | }, 6 | { 7 | "revision": "c83ecb2c6b5e271d53022b23b40f0738", 8 | "url": "./static/js/vendor.dll.js" 9 | }, 10 | { 11 | "revision": "48ecc532a72f4b40b6e6c88cfd1d5216", 12 | "url": "./static/less/variable.less" 13 | }, 14 | { 15 | "revision": "d12f44160046880924cd4ad9458e1c8e", 16 | "url": "./static/less/reset.less" 17 | }, 18 | { 19 | "revision": "9a35adbb4a1c97310b7196b00e8c5f9f", 20 | "url": "./static/less/base.less" 21 | }, 22 | { 23 | "url": "./static/js/vendor.ebc740182311216715e8.js" 24 | }, 25 | { 26 | "revision": "5ed6afd60615cc6ded891157c5d8a2b9", 27 | "url": "./static/img/github.png" 28 | }, 29 | { 30 | "url": "./static/js/6.14304fb1eb65efcbf4f4.js" 31 | }, 32 | { 33 | "url": "./static/js/8.d48188355182552404d7.js" 34 | }, 35 | { 36 | "url": "./static/js/9.85ff0e1235b86aabccb6.js" 37 | }, 38 | { 39 | "revision": "cac127717f0efde313e9815af0ae8ea3", 40 | "url": "./static/js/swiper.min.js" 41 | }, 42 | { 43 | "revision": "9838dbe317ea1486320fcb6c7f74150c", 44 | "url": "./static/js/rem.js" 45 | }, 46 | { 47 | "revision": "bf8fca3e79cb1d2e4916123a2780e4eb", 48 | "url": "./static/js/common.js" 49 | }, 50 | { 51 | "url": "./static/js/app.2b65dba57b5d9933d0d0.js" 52 | }, 53 | { 54 | "url": "./static/js/7.e5bd944dd9c89c293e42.js" 55 | }, 56 | { 57 | "url": "./static/js/manifest.d1848cbff048c3e750a3.js" 58 | }, 59 | { 60 | "url": "./static/js/3.f52e53ea350adcfac823.js" 61 | }, 62 | { 63 | "url": "./static/js/5.1c73fa0a2d9d14b86207.js" 64 | }, 65 | { 66 | "url": "./static/js/2.b105d931b4bd3d720814.js" 67 | }, 68 | { 69 | "url": "./static/js/0.4e89b76a9b8b680460b8.js" 70 | }, 71 | { 72 | "url": "./static/js/1.07c983395ff55d8976ad.js" 73 | }, 74 | { 75 | "url": "./static/js/12.d8a74bcc93c072e333ba.js" 76 | }, 77 | { 78 | "url": "./static/js/11.fed9aa2e784b67a4ef95.js" 79 | }, 80 | { 81 | "url": "./static/js/10.66ee08fb943231f7ddd5.js" 82 | }, 83 | { 84 | "url": "./static/js/4.4ca64cc9f5454b7efe11.js" 85 | }, 86 | { 87 | "revision": "82b9c7a5a3f405032b1db71a25f67021", 88 | "url": "./static/img/logo.png" 89 | }, 90 | { 91 | "revision": "d9e2b51d67fc2fe52762764d2623fc72", 92 | "url": "./static/img/favicon.png" 93 | }, 94 | { 95 | "revision": "2e178c2b758522a1ef4c807df2e094f2", 96 | "url": "./static/iconfont/iconfont.woff" 97 | }, 98 | { 99 | "revision": "c70b5e89e6b971f4f733f475a7ce4903", 100 | "url": "./static/iconfont/iconfont.ttf" 101 | }, 102 | { 103 | "revision": "284db94f7eb6946bf519f3056afc7d97", 104 | "url": "./static/iconfont/iconfont.svg" 105 | }, 106 | { 107 | "revision": "fd1c5e7b727d0f155139a84759b63ba4", 108 | "url": "./static/iconfont/iconfont.eot" 109 | }, 110 | { 111 | "revision": "5ed6afd60615cc6ded891157c5d8a2b9", 112 | "url": "./static/github.png" 113 | }, 114 | { 115 | "revision": "6af34d0737ad0ca608111771cf74cc79", 116 | "url": "./static/css/swiper.min.css" 117 | }, 118 | { 119 | "revision": "da1fbcf11c0219aa71668e5a097c1ace", 120 | "url": "./static/css/iconfont.css" 121 | }, 122 | { 123 | "revision": "2b65dba57b5d9933d0d0", 124 | "url": "./static/css/app.66987723b07aa452f2340fcce8c8e53f.css" 125 | } 126 | ]; -------------------------------------------------------------------------------- /dist/service-worker.js: -------------------------------------------------------------------------------- 1 | importScripts("./precache-manifest.405e02c1c13e55a923ab27f3b3014342.js", "https://storage.googleapis.com/workbox-cdn/releases/3.4.1/workbox-sw.js"); 2 | 3 | 4 | workbox.skipWaiting() 5 | workbox.clientsClaim() 6 | 7 | // 设置缓存名称前缀 8 | workbox.core.setCacheNameDetails({ 9 | prefix: 'vuecli' 10 | }) 11 | 12 | // 缓存manifest.json 13 | workbox.routing.registerRoute( 14 | /\/manifest\.json/, 15 | workbox.strategies.staleWhileRevalidate() 16 | ) 17 | 18 | // sw-register网络请求优先 19 | workbox.routing.registerRoute( 20 | /\/sw-register\.js/, 21 | workbox.strategies.networkOnly() 22 | ) 23 | 24 | workbox.precaching.precacheAndRoute(self.__precacheManifest || []) 25 | -------------------------------------------------------------------------------- /dist/static/css/app.82e744b437a766b2e73fe8da7c0dfc3d.css.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/czero1995/Infinite-webDesign/418f957b298ac3dc1ef08e0f4c4f0dd22cbbe9c9/dist/static/css/app.82e744b437a766b2e73fe8da7c0dfc3d.css.gz -------------------------------------------------------------------------------- /dist/static/css/iconfont.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: 'iconfont'; /* project id 686422 */ 3 | src: url('//at.alicdn.com/t/font_686422_u44s2frt7ps.eot'); 4 | src: url('//at.alicdn.com/t/font_686422_u44s2frt7ps.eot?#iefix') format('embedded-opentype'), 5 | url('//at.alicdn.com/t/font_686422_u44s2frt7ps.woff') format('woff'), 6 | url('//at.alicdn.com/t/font_686422_u44s2frt7ps.ttf') format('truetype'), 7 | url('//at.alicdn.com/t/font_686422_u44s2frt7ps.svg#iconfont') format('svg'); 8 | } 9 | 10 | .iconfont { 11 | font-family:"iconfont" !important; 12 | font-size:16px; 13 | font-style:normal; 14 | -webkit-font-smoothing: antialiased; 15 | -moz-osx-font-smoothing: grayscale; 16 | } 17 | 18 | .icon-sousuo:before { content: "\e600"; } 19 | 20 | .icon-houtui:before { content: "\e749"; } 21 | 22 | .icon-wode:before { content: "\e646"; } 23 | 24 | .icon-remen:before { content: "\e633"; } 25 | 26 | .icon-plus-shiftup:before { content: "\e71f"; } 27 | 28 | .icon-tuijian:before { content: "\e63f"; } 29 | 30 | .icon-qianjin:before { content: "\e652"; } 31 | 32 | -------------------------------------------------------------------------------- /dist/static/css/swiper.min.css.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/czero1995/Infinite-webDesign/418f957b298ac3dc1ef08e0f4c4f0dd22cbbe9c9/dist/static/css/swiper.min.css.gz -------------------------------------------------------------------------------- /dist/static/github.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/czero1995/Infinite-webDesign/418f957b298ac3dc1ef08e0f4c4f0dd22cbbe9c9/dist/static/github.png -------------------------------------------------------------------------------- /dist/static/iconfont/iconfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/czero1995/Infinite-webDesign/418f957b298ac3dc1ef08e0f4c4f0dd22cbbe9c9/dist/static/iconfont/iconfont.eot -------------------------------------------------------------------------------- /dist/static/iconfont/iconfont.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 8 | Created by iconfont 9 | 10 | 11 | 12 | 13 | 21 | 22 | 23 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | -------------------------------------------------------------------------------- /dist/static/iconfont/iconfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/czero1995/Infinite-webDesign/418f957b298ac3dc1ef08e0f4c4f0dd22cbbe9c9/dist/static/iconfont/iconfont.ttf -------------------------------------------------------------------------------- /dist/static/iconfont/iconfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/czero1995/Infinite-webDesign/418f957b298ac3dc1ef08e0f4c4f0dd22cbbe9c9/dist/static/iconfont/iconfont.woff -------------------------------------------------------------------------------- /dist/static/img/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/czero1995/Infinite-webDesign/418f957b298ac3dc1ef08e0f4c4f0dd22cbbe9c9/dist/static/img/favicon.png -------------------------------------------------------------------------------- /dist/static/img/github.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/czero1995/Infinite-webDesign/418f957b298ac3dc1ef08e0f4c4f0dd22cbbe9c9/dist/static/img/github.png -------------------------------------------------------------------------------- /dist/static/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/czero1995/Infinite-webDesign/418f957b298ac3dc1ef08e0f4c4f0dd22cbbe9c9/dist/static/img/logo.png -------------------------------------------------------------------------------- /dist/static/js/0.4e89b76a9b8b680460b8.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/czero1995/Infinite-webDesign/418f957b298ac3dc1ef08e0f4c4f0dd22cbbe9c9/dist/static/js/0.4e89b76a9b8b680460b8.js.gz -------------------------------------------------------------------------------- /dist/static/js/1.dfa371a87014b2189288.js: -------------------------------------------------------------------------------- 1 | webpackJsonp([1],{KskE:function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=r("lC5x"),o=r.n(n),i=r("Ug5s"),a=r("9rMa"),s=Object.assign||function(t){for(var e=1;e=0,i=o&&n.regeneratorRuntime;if(n.regeneratorRuntime=void 0,t.exports=r("k9rz"),o)n.regeneratorRuntime=i;else try{delete n.regeneratorRuntime}catch(t){n.regeneratorRuntime=void 0}},k9rz:function(t,e){!function(e){"use strict";var r,n=Object.prototype,o=n.hasOwnProperty,i="function"==typeof Symbol?Symbol:{},a=i.iterator||"@@iterator",s=i.asyncIterator||"@@asyncIterator",c=i.toStringTag||"@@toStringTag",u="object"==typeof t,l=e.regeneratorRuntime;if(l)u&&(t.exports=l);else{(l=e.regeneratorRuntime=u?t.exports:{}).wrap=w;var f="suspendedStart",h="suspendedYield",v="executing",p="completed",m={},d={};d[a]=function(){return this};var g=Object.getPrototypeOf,y=g&&g(g(N([])));y&&y!==n&&o.call(y,a)&&(d=y);var _=E.prototype=x.prototype=Object.create(d);L.prototype=_.constructor=E,E.constructor=L,E[c]=L.displayName="GeneratorFunction",l.isGeneratorFunction=function(t){var e="function"==typeof t&&t.constructor;return!!e&&(e===L||"GeneratorFunction"===(e.displayName||e.name))},l.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,E):(t.__proto__=E,c in t||(t[c]="GeneratorFunction")),t.prototype=Object.create(_),t},l.awrap=function(t){return{__await:t}},O(k.prototype),k.prototype[s]=function(){return this},l.AsyncIterator=k,l.async=function(t,e,r,n){var o=new k(w(t,e,r,n));return l.isGeneratorFunction(e)?o:o.next().then(function(t){return t.done?t.value:o.next()})},O(_),_[c]="Generator",_[a]=function(){return this},_.toString=function(){return"[object Generator]"},l.keys=function(t){var e=[];for(var r in t)e.push(r);return e.reverse(),function r(){for(;e.length;){var n=e.pop();if(n in t)return r.value=n,r.done=!1,r}return r.done=!0,r}},l.values=N,P.prototype={constructor:P,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=r,this.done=!1,this.delegate=null,this.method="next",this.arg=r,this.tryEntries.forEach(R),!t)for(var e in this)"t"===e.charAt(0)&&o.call(this,e)&&!isNaN(+e.slice(1))&&(this[e]=r)},stop:function(){this.done=!0;var t=this.tryEntries[0].completion;if("throw"===t.type)throw t.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var e=this;function n(n,o){return s.type="throw",s.arg=t,e.next=n,o&&(e.method="next",e.arg=r),!!o}for(var i=this.tryEntries.length-1;i>=0;--i){var a=this.tryEntries[i],s=a.completion;if("root"===a.tryLoc)return n("end");if(a.tryLoc<=this.prev){var c=o.call(a,"catchLoc"),u=o.call(a,"finallyLoc");if(c&&u){if(this.prev=0;--r){var n=this.tryEntries[r];if(n.tryLoc<=this.prev&&o.call(n,"finallyLoc")&&this.prev=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),R(r),m}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var o=n.arg;R(r)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,n){return this.delegate={iterator:N(t),resultName:e,nextLoc:n},"next"===this.method&&(this.arg=r),m}}}function w(t,e,r,n){var o=e&&e.prototype instanceof x?e:x,i=Object.create(o.prototype),a=new P(n||[]);return i._invoke=function(t,e,r){var n=f;return function(o,i){if(n===v)throw new Error("Generator is already running");if(n===p){if("throw"===o)throw i;return S()}for(r.method=o,r.arg=i;;){var a=r.delegate;if(a){var s=C(a,r);if(s){if(s===m)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(n===f)throw n=p,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n=v;var c=b(t,e,r);if("normal"===c.type){if(n=r.done?p:h,c.arg===m)continue;return{value:c.arg,done:r.done}}"throw"===c.type&&(n=p,r.method="throw",r.arg=c.arg)}}}(t,r,a),i}function b(t,e,r){try{return{type:"normal",arg:t.call(e,r)}}catch(t){return{type:"throw",arg:t}}}function x(){}function L(){}function E(){}function O(t){["next","throw","return"].forEach(function(e){t[e]=function(t){return this._invoke(e,t)}})}function k(t){var e;this._invoke=function(r,n){function i(){return new Promise(function(e,i){!function e(r,n,i,a){var s=b(t[r],t,n);if("throw"!==s.type){var c=s.arg,u=c.value;return u&&"object"==typeof u&&o.call(u,"__await")?Promise.resolve(u.__await).then(function(t){e("next",t,i,a)},function(t){e("throw",t,i,a)}):Promise.resolve(u).then(function(t){c.value=t,i(c)},a)}a(s.arg)}(r,n,e,i)})}return e=e?e.then(i,i):i()}}function C(t,e){var n=t.iterator[e.method];if(n===r){if(e.delegate=null,"throw"===e.method){if(t.iterator.return&&(e.method="return",e.arg=r,C(t,e),"throw"===e.method))return m;e.method="throw",e.arg=new TypeError("The iterator does not provide a 'throw' method")}return m}var o=b(n,t.iterator,e.arg);if("throw"===o.type)return e.method="throw",e.arg=o.arg,e.delegate=null,m;var i=o.arg;return i?i.done?(e[t.resultName]=i.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=r),e.delegate=null,m):i:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,m)}function j(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function R(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function P(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(j,this),this.reset(!0)}function N(t){if(t){var e=t[a];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var n=-1,i=function e(){for(;++n80?t.pullDownText="释放刷新":t.pullDownText="下拉刷新",e.y<-120?t.scrollTopView=!0:t.scrollTopView=!1})})},methods:n({toDetail:function(t){this.$router.push({path:"/detail",query:{id:t,from:"index"}})},getData:function(){var t=this;this.loadMore=!1,this.pagenum=this.pagenum+1,this.$http.post(this.$baseURL+"recommend/all",{pagenum:this.pagenum,pagesize:this.pagesize}).then(function(e){0==e.data.data.length?(t.loadingTitle="没有更多的数据了",t.loadMore=!1):t.loadMore=!0,t.dataList=[].concat(l(t.dataList),l(e.data.data))}).catch(function(t){console.log(t)})},toTop:function(){this.scroll.scrollTo(0,0,1e3,"swipeBounce")}},Object(s.c)({}))},c={render:function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"page recommend"},[a("div",{ref:"wrapper",staticClass:"container wrapper"},[a("div",{ref:"content",staticClass:"content"},[a("div",{staticClass:"pull_down"},[t._v(t._s(t.pullDownText))]),t._v(" "),a("div",{staticClass:"list_box"},[a("div",{staticClass:"top_tab"},[t._v("Infinite")]),t._v(" "),a("transition",{attrs:{name:t.slidename}},[a("div",{directives:[{name:"show",rawName:"v-show",value:t.mainarea,expression:"mainarea"}]},t._l(t.dataList,function(e,o){return a("div",{key:o,staticClass:"list_item flex",on:{click:function(a){t.toDetail(e._id)}}},[a("div",{staticClass:"item_title"},[t._v(t._s(e.title))]),t._v(" "),a("img",{directives:[{name:"lazy",rawName:"v-lazy",value:e.post,expression:"item.post"}],staticClass:"item_post"})])}))])],1)])]),t._v(" "),a("div",{directives:[{name:"show",rawName:"v-show",value:t.scrollTopView,expression:"scrollTopView"}],staticClass:"scroll-top",on:{click:t.toTop}},[a("span",{staticClass:"iconfont icon-totop"},[t._v("")])]),t._v(" "),a("footers",{ref:"footer",attrs:{urlRouter:t.$route.path}})],1)},staticRenderFns:[]};var p=a("vSla")(r,c,!1,function(t){a("1GMO")},"data-v-199cfeaa",null);e.default=p.exports}}); -------------------------------------------------------------------------------- /dist/static/js/app.ff7f382ad46feed21960.js: -------------------------------------------------------------------------------- 1 | webpackJsonp([14],{"/sA3":function(t,e,n){"use strict";e.b=/(1[3-9]\d{9}$)/;e.a="http://infinite.czero.cn:3000/api/"},"92gq":function(t,e){},NHnr:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var o={};n.d(o,"history",function(){return p}),n.d(o,"login",function(){return h}),n.d(o,"userinfo",function(){return v}),n.d(o,"detailid",function(){return b}),n.d(o,"searchid",function(){return y}),n.d(o,"comname",function(){return g});var i=n("MVMM"),r=n("9rMa"),a=(n("kNAH"),{name:"app",created:function(){var t=this;localStorage.getItem("userMsg")&&this.$store.replaceState(Object.assign(this.$store.state,JSON.parse(localStorage.getItem("userMsg")))),window.addEventListener("beforeunload",function(){localStorage.setItem("userMsg",JSON.stringify(t.$store.state))})}}),s={render:function(){var t=this.$createElement,e=this._self._c||t;return e("div",{attrs:{id:"app"}},[e("keep-alive",[e("router-view")],1)],1)},staticRenderFns:[]};var c=n("vSla")(a,s,!1,function(t){n("XZDd")},null,null).exports,l=n("zO6J");i.a.use(l.a);var u,d=function(t){Promise.all([n.e(0),n.e(9)]).then(n.bind(null,"42Hy")).then(function(e){t(e)})},f=new l.a({routes:[{path:"/",component:d},{path:"/index",component:d},{path:"/hot",component:function(t){Promise.all([n.e(0),n.e(2)]).then(n.bind(null,"9XP/")).then(function(e){t(e)})}},{path:"/search",component:function(t){n.e(3).then(n.bind(null,"N2Ln")).then(function(e){t(e)})}},{path:"/searchbox",component:function(t){Promise.all([n.e(0),n.e(7)]).then(n.bind(null,"wC2p")).then(function(e){t(e)})}},{path:"/detail",component:function(t){Promise.all([n.e(0),n.e(8)]).then(n.bind(null,"MIom")).then(function(e){t(e)})}},{path:"/member",component:function(t){Promise.all([n.e(0),n.e(1)]).then(n.bind(null,"KskE")).then(function(e){t(e)})}},{path:"/login",component:function(t){Promise.all([n.e(0),n.e(5)]).then(n.bind(null,"mJTh")).then(function(e){t(e)})}},{path:"/register",component:function(t){Promise.all([n.e(0),n.e(4)]).then(n.bind(null,"kgOo")).then(function(e){t(e)})}},{path:"/forgetpasswd",component:function(t){Promise.all([n.e(0),n.e(6)]).then(n.bind(null,"anPG")).then(function(e){t(e)})}},{path:"/collect",component:function(t){Promise.all([n.e(0),n.e(10)]).then(n.bind(null,"Uz9m")).then(function(e){t(e)})}},{path:"/about",component:function(t){Promise.all([n.e(0),n.e(12)]).then(n.bind(null,"DbT+")).then(function(e){t(e)})}},{path:"/agreement",component:function(t){Promise.all([n.e(0),n.e(11)]).then(n.bind(null,"Nn55")).then(function(e){t(e)})}}]}),m=n("mUbh"),p=function(t){return t.history},h=function(t){return t.login},v=function(t){return t.userinfo},b=function(t){return t.detailid},y=function(t){return t.searchid},g=function(t){return t.comname},w={history:[],login:!1,userinfo:{},detailid:"",searchid:"",comname:"index"};function x(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var S=[],_=(x(u={},"SET_HISTORY",function(t,e){S.push(e),t.history=S}),x(u,"SET_LOGIN",function(t,e){t.login=e}),x(u,"SET_USERINFO",function(t,e){t.userinfo=e}),x(u,"SET_DETAILID",function(t,e){t.detailid=e}),x(u,"SET_SEARCHID",function(t,e){t.searchid=e}),x(u,"SET_COMNAME",function(t,e){t.comname=e}),u);n("6LYt");i.a.use(r.a);var B=new r.a.Store({actions:m,getters:o,state:w,mutations:_,strice:!1,plugins:[]}),T=n("2sCs"),M=n.n(T),P=n("zdS3"),E=n.n(P),$=n("iDdd"),C=n.n($),N=n("hn2z"),j=n.n(N),A=(n("XlLT"),{props:{toast:{type:String,default:"toast"}},data:function(){return{isShowToastBox:!1,resolve:"",reject:"",promise:""}},methods:{showToastBox:function(){var t=this;this.isShowToastBox=!0,setTimeout(function(){t.isShowToastBox=!1},2e3)}}}),O={render:function(){var t=this.$createElement,e=this._self._c||t;return e("div",{directives:[{name:"show",rawName:"v-show",value:this.isShowToastBox,expression:"isShowToastBox"}],staticClass:"toast-box"},[e("p",[this._v(this._s(this.toast))])])},staticRenderFns:[]};var I=n("vSla")(A,O,!1,function(t){n("fpI5")},"data-v-44678118",null).exports,k="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},L={};L.install=function(t,e){var n=t.extend(I),o=void 0;t.prototype.$toastBox={showToastBox:function(t){var e;return o||(e=(o=new n).$mount().$el,document.body.appendChild(e)),"string"==typeof t?o.toast=t:"object"===(void 0===t?"undefined":k(t))&&Object.assign(o,t),o.showToastBox()}}};var R=L,D={props:{title:{title:String,default:"提示"},content:{type:String,default:"这是弹框内容"},confirmBtn:{type:Boolean,default:!0},cancelBtn:{type:Boolean,default:!1}},data:function(){return{showModelBox:!1,resolve:"",reject:"",promise:""}},methods:{confirm:function(){this.showModelBox=!1,this.resolve("confirm"),this.remove()},cancel:function(){this.showModelBox=!1,this.reject("cancel"),this.remove()},onModelBox:function(){var t=this;return this.showModelBox=!0,this.promise=new Promise(function(e,n){t.resolve=e,t.reject=n}),this.promise},remove:function(){var t=this;setTimeout(function(){t.destroy()},300)},destroy:function(){this.$destroy(),document.body.removeChild(this.$el)}}},H={render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{directives:[{name:"show",rawName:"v-show",value:t.showModelBox,expression:"showModelBox"}],staticClass:"model"},[n("div",{staticClass:"model_box"},[n("div",{staticClass:"global_model_title"},[t._v(t._s(t.title))]),t._v(" "),n("div",{staticClass:"global_model_content"},[t._v(t._s(t.content))]),t._v(" "),n("div",{staticClass:"global_model_btn flex"},[n("div",{directives:[{name:"show",rawName:"v-show",value:t.cancelBtn,expression:"cancelBtn"}],staticClass:"global_model_btn--cancel",on:{click:t.cancel}},[t._v("取消")]),t._v(" "),n("div",{directives:[{name:"show",rawName:"v-show",value:t.confirmBtn,expression:"confirmBtn"}],staticClass:"global_model_btn--confirm",on:{click:t.confirm}},[t._v("确定")])])])])},staticRenderFns:[]};var z=n("vSla")(D,H,!1,function(t){n("92gq")},"data-v-12360a1f",null).exports,U="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},J={};J.install=function(t,e){var n=t.extend(z),o=void 0;t.prototype.$modelBox={onModelBox:function(t){var e;return o||(e=(o=new n).$mount().$el,document.body.appendChild(e)),"string"==typeof t?o.content=t:"object"===(void 0===t?"undefined":U(t))&&Object.assign(o,t),o.onModelBox().then(function(t){return o=null,Promise.resolve(t)}).catch(function(t){return o=null,Promise.reject(t)})}}};var X=J,F=n("/sA3");i.a.use(X),i.a.use(R);var q=new j.a;e.default=q;C.a.attach(document.body),i.a.use(r.a),i.a.prototype.$http=M.a,i.a.prototype.$baseURL=F.a,i.a.config.productionTip=!1,i.a.use(E.a,{preLoad:1.3,error:"../static/img/github.png",loading:"../static/img/github.png"}),new i.a({el:"#app",router:f,store:B,template:"",components:{App:c}})},XZDd:function(t,e){},XlLT:function(t,e){},fpI5:function(t,e){},kNAH:function(t,e){!function(t){function e(o){if(n[o])return n[o].exports;var i=n[o]={exports:{},id:o,loaded:!1};return t[o].call(i.exports,i,i.exports,e),i.loaded=!0,i.exports}var n={};e.m=t,e.c=n,e.p="",e(0)}([function(t,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=window;e.default=n.flex=function(t,e){var o=t||100,i=e||1,r=n.document,a=navigator.userAgent,s=a.match(/Android[\S\s]+AppleWebkit\/(\d{3})/i),c=a.match(/U3\/((\d+|\.){5,})/i),l=c&&parseInt(c[1].split(".").join(""),10)>=80,u=navigator.appVersion.match(/(iphone|ipad|ipod)/gi),d=n.devicePixelRatio||1;u||s&&s[1]>534||l||(d=1);var f=1/d,m=r.querySelector('meta[name="viewport"]');m||((m=r.createElement("meta")).setAttribute("name","viewport"),r.head.appendChild(m)),m.setAttribute("content","width=device-width,user-scalable=no,initial-scale="+f+",maximum-scale="+f+",minimum-scale="+f),r.documentElement.style.fontSize=o/2*d*i+"px"},t.exports=e.default}]),flex(100,1)},mUbh:function(t,e){}},["NHnr"]); -------------------------------------------------------------------------------- /dist/static/js/common.js: -------------------------------------------------------------------------------- 1 | export const phoneReg = /(1[3-9]\d{9}$)/; 2 | export const base_url = 'http://infinite.czero.cn:3000/api/'; 3 | // export const base_url = 'api/'; 4 | -------------------------------------------------------------------------------- /dist/static/js/manifest.7804ab9d323801c9f706.js: -------------------------------------------------------------------------------- 1 | !function(e){var n=window.webpackJsonp;window.webpackJsonp=function(r,c,a){for(var f,i,u,s=0,d=[];s= 80, 27 | p = navigator.appVersion.match(/(iphone|ipad|ipod)/gi), 28 | s = i.devicePixelRatio || 1; 29 | p || d && d[1] > 534 || c || (s = 1); 30 | var u = 1 / s, 31 | m = r.querySelector('meta[name="viewport"]'); 32 | m || (m = r.createElement("meta"), m.setAttribute("name", "viewport"), r.head.appendChild(m)), m.setAttribute("content", "width=device-width,user-scalable=no,initial-scale=" + u + ",maximum-scale=" + u + ",minimum-scale=" + u), r.documentElement.style.fontSize = a / 2 * s * n + "px" 33 | }, e.exports = t["default"] 34 | }]); 35 | flex(100, 1); -------------------------------------------------------------------------------- /dist/static/js/swiper.min.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/czero1995/Infinite-webDesign/418f957b298ac3dc1ef08e0f4c4f0dd22cbbe9c9/dist/static/js/swiper.min.js.gz -------------------------------------------------------------------------------- /dist/static/js/vendor.c9c2c5fb7092aa901e92.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/czero1995/Infinite-webDesign/418f957b298ac3dc1ef08e0f4c4f0dd22cbbe9c9/dist/static/js/vendor.c9c2c5fb7092aa901e92.js.gz -------------------------------------------------------------------------------- /dist/static/js/vendor.dll.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/czero1995/Infinite-webDesign/418f957b298ac3dc1ef08e0f4c4f0dd22cbbe9c9/dist/static/js/vendor.dll.js.gz -------------------------------------------------------------------------------- /dist/static/less/base.less: -------------------------------------------------------------------------------- 1 | @theme_background:#6495ED; 2 | @theme_hover:#6495ED; 3 | @theme_color:#6495ED; 4 | @base_color:white; 5 | @base_textSize:.2rem; 6 | @base_textColor:black; 7 | @base_boder:1px solid #ccc; 8 | [v-cloak] { 9 | display: none; 10 | } 11 | 12 | .model { 13 | position: absolute; 14 | top: 0%; 15 | left: 0%; 16 | background: rgba(0, 0, 0, 0.3); 17 | width: 100%; 18 | height: 100%; 19 | position: fixed; 20 | z-index: 9999; 21 | } 22 | 23 | .baseConfig { 24 | font-size: @base_textSize; 25 | color: @base_textColor; 26 | } 27 | 28 | .flex { 29 | display: flex; 30 | } 31 | 32 | .flex-center { 33 | .flex(); 34 | justify-content: center; 35 | } 36 | 37 | .flex_around { 38 | .flex(); 39 | justify-content: space-around; 40 | } 41 | 42 | .flex_between { 43 | .flex(); 44 | justify-content: space-between; 45 | } 46 | 47 | .flex-align { 48 | .flex(); 49 | align-items: flex-start; 50 | } 51 | 52 | .flex-align-center { 53 | .flex(); 54 | align-items: center; 55 | } 56 | 57 | .flex-align-end { 58 | .flex(); 59 | align-items: flex-end; 60 | } 61 | 62 | .flex-wrap { 63 | flex-wrap: wrap; 64 | } 65 | 66 | .goods-name { 67 | font-size: .28rem; 68 | margin-bottom: .2rem; 69 | } 70 | 71 | .goods-num { 72 | font-size: .26rem; 73 | margin-top: .2rem; 74 | } 75 | 76 | .goods-price { 77 | color: red; 78 | font-size: .26rem; 79 | margin: .2rem 0; 80 | } 81 | 82 | .slide-up-enter-active, 83 | .slide-up-leave-active { 84 | transition: all .5s 85 | } 86 | 87 | .slide-up-enter, 88 | .slide-up-leave-to { 89 | opacity: 0; 90 | transform: translate3d(0, 100%, 0); 91 | } 92 | 93 | .slide-go-enter-active, 94 | .slide-go-leave-active { 95 | transition: all .5s; 96 | opacity: .8; 97 | } 98 | 99 | .slide-go-enter, 100 | .slide-go-leave-to { 101 | transition: all .5s; 102 | transform: translate3d(100%, 0, 0); 103 | opacity: .8; 104 | } 105 | 106 | .slide-back-enter-active, 107 | .slide-back-leave-active { 108 | transition: all .5s; 109 | } 110 | 111 | .slide-back-enter, 112 | .slide-back-leave-to { 113 | transition: all .5s; 114 | transform: translate3d(-100%, 0, 0); 115 | } 116 | 117 | .bullet-enter-active, 118 | .bullet-leave-active { 119 | transition: 1s all cubic-bezier(.83, .97, .05, 1.44); 120 | } 121 | 122 | .bullet-enter, 123 | .bullet-leave-to { 124 | opacity: 0; 125 | transform: translate3d(0, 0, -100%); 126 | } 127 | 128 | .text-ellipsis { 129 | overflow: hidden; 130 | text-overflow: ellipsis; 131 | white-space: nowrap; 132 | } 133 | 134 | .page { 135 | display: flex; 136 | flex-direction: column; 137 | height: 100%; 138 | // overflow-y: scroll; 139 | // -webkit-overflow-scrolling: touch; 140 | } 141 | 142 | .container { 143 | flex: 1; 144 | // padding-top: .8rem; 145 | } 146 | 147 | 148 | header { 149 | text-align: center; 150 | background: transparent; 151 | color: @base_color; 152 | font-size: 0.26rem; 153 | line-height: 0.8rem; 154 | width: 100%; 155 | z-index: 10; 156 | position: absolute; 157 | // position: fixed; 158 | top: 0; 159 | padding: 0 0.2rem; 160 | box-sizing: border-box; 161 | } 162 | .search-box { 163 | position: relative; 164 | flex: 1; 165 | } 166 | input{ 167 | height: 0.6rem; 168 | width: 100%; 169 | font-size: 26px; 170 | padding-left: 0.8rem; 171 | box-sizing: border-box; 172 | border: none; 173 | outline: none; 174 | border-radius: 100px; 175 | } 176 | .search-icon { 177 | position: absolute; 178 | left: 0; 179 | color: #ccc; 180 | display: inline-block; 181 | z-index: 20; 182 | padding-left: 0.2rem; 183 | font-size: 0.4rem; 184 | } 185 | .chooice-icon { 186 | font-size: 0.4rem; 187 | } 188 | .chooice-type { 189 | padding-left: 0.1rem; 190 | width: 0.4rem; 191 | } 192 | 193 | .list_box{ 194 | padding-bottom: 1rem; 195 | padding-top: .8rem; 196 | } 197 | .list_item { 198 | height: 1.6rem; 199 | margin-bottom: .1rem; 200 | background-color: white; 201 | // box-shadow: 2px -3px 16px #ccc; 202 | border-radius: 10px; 203 | margin-top: .1rem; 204 | align-items: center; 205 | padding: 0 .2rem; 206 | position: relative; 207 | } 208 | 209 | 210 | .item_title { 211 | flex:1; 212 | font-size: .26rem; 213 | color: "#666"; 214 | overflow:hidden; 215 | margin-right: .6rem; 216 | text-overflow:ellipsis; 217 | display:-webkit-box; 218 | -webkit-box-orient:vertical; 219 | -webkit-line-clamp:2; 220 | } 221 | .item_post{ 222 | width: 1rem; 223 | height: 1rem; 224 | } -------------------------------------------------------------------------------- /dist/static/less/reset.less: -------------------------------------------------------------------------------- 1 | /* reset */ 2 | 3 | html, 4 | body, 5 | h1, 6 | h2, 7 | h3, 8 | h4, 9 | h5, 10 | h6, 11 | div, 12 | dl, 13 | dt, 14 | dd, 15 | ul, 16 | ol, 17 | li, 18 | p, 19 | blockquote, 20 | pre, 21 | hr, 22 | figure, 23 | table, 24 | caption, 25 | th, 26 | td, 27 | form, 28 | fieldset, 29 | legend, 30 | input, 31 | button, 32 | textarea, 33 | menu { 34 | margin: 0; 35 | padding: 0; 36 | } 37 | 38 | header, 39 | footer, 40 | section, 41 | article, 42 | aside, 43 | nav, 44 | hgroup, 45 | address, 46 | figure, 47 | figcaption, 48 | menu, 49 | details { 50 | display: block; 51 | } 52 | 53 | table { 54 | border-collapse: collapse; 55 | border-spacing: 0; 56 | } 57 | 58 | caption, 59 | th { 60 | text-align: left; 61 | font-weight: normal; 62 | } 63 | 64 | html, 65 | body, 66 | fieldset, 67 | img, 68 | iframe, 69 | abbr { 70 | border: 0; 71 | } 72 | 73 | i, 74 | cite, 75 | em, 76 | var, 77 | address, 78 | dfn { 79 | font-style: normal; 80 | } 81 | 82 | [hidefocus], 83 | summary { 84 | outline: 0; 85 | } 86 | 87 | li { 88 | list-style: none; 89 | } 90 | 91 | h1, 92 | h2, 93 | h3, 94 | h4, 95 | h5, 96 | h6, 97 | small { 98 | font-size: 100%; 99 | } 100 | 101 | q:before, 102 | q:after { 103 | content: none; 104 | } 105 | 106 | textarea { 107 | overflow: auto; 108 | resize: none; 109 | } 110 | 111 | label, 112 | summary { 113 | cursor: default; 114 | } 115 | 116 | a, 117 | button { 118 | cursor: pointer; 119 | } 120 | 121 | h1, 122 | h2, 123 | h3, 124 | h4, 125 | h5, 126 | h6, 127 | em, 128 | strong, 129 | b { 130 | font-weight: bold; 131 | } 132 | 133 | body { 134 | background: @base_color; 135 | font-size: @base_textSize; 136 | } 137 | a { 138 | text-decoration: none; 139 | border: none;-webkit-tap-highlight-color: rgba(0,0,0,0);-webkit-tap-highlight-color: transparent;outline: none; 140 | } 141 | body, 142 | html { 143 | height: 100%; 144 | } -------------------------------------------------------------------------------- /dist/static/less/variable.less: -------------------------------------------------------------------------------- 1 | @theme_background:#6495ED; 2 | @theme_hover:#6495ED; 3 | @theme_color:#6495ED; 4 | @base_color:white; 5 | @base_textSize:.2rem; 6 | @base_textColor:black; 7 | @base_boder:1px solid #ccc; 8 | 9 | -------------------------------------------------------------------------------- /dist/sw-register.js: -------------------------------------------------------------------------------- 1 | navigator.serviceWorker&&navigator.serviceWorker.register('./service-worker.js?v=1532417625410').then(function(){navigator.serviceWorker.addEventListener('message',function(e){if(e.data==='sw.update'){var themeColor=document.querySelector('meta[name=theme-color]');var dom=document.createElement('div');themeColor&&(themeColor.content='#000');dom.innerHTML='\n \n
\n
\n \n \u70B9\u51FB\u5237\u65B0\n
\n
\n ';document.body.appendChild(dom);setTimeout(function(){return document.getElementById('app-refresh').className+=' app-refresh-show'})}})}); -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Infinite 9 | 17 | 18 | 19 | 20 |
21 |
22 | 23 |

请在移动端打开,并刷新页面。

24 |
25 | 26 | 44 | 45 | 46 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "@platforms": ["android", "iPhone", "iPad"], 3 | "id": "H5025C1FA",/*应用的标识,创建应用时自动生成,勿手动修改*/ 4 | "name": "Infinite",/*应用名称,程序桌面图标名称*/ 5 | "version": { 6 | "name": "1.0",/*应用版本名称*/ 7 | "code": "" 8 | }, 9 | "description": "",/*应用描述信息*/ 10 | "icons": { 11 | "72": "icon.png" 12 | }, 13 | "launch_path": "index.html",/*应用的入口页面,默认为根目录下的index.html;支持网络地址,必须以http://或https://开头*/ 14 | "developer": { 15 | "name": "",/*开发者名称*/ 16 | "email": "",/*开发者邮箱地址*/ 17 | "url": ""/*开发者个人主页地址*/ 18 | }, 19 | "permissions": { 20 | "Accelerometer": { 21 | "description": "访问加速度感应器" 22 | }, 23 | "Audio": { 24 | "description": "访问麦克风" 25 | }, 26 | "Messaging":{ 27 | "description": "短彩邮件插件" 28 | }, 29 | "Cache": { 30 | "description": "管理应用缓存" 31 | }, 32 | "Camera": { 33 | "description": "访问摄像头" 34 | }, 35 | "Console": { 36 | "description": "跟踪调试输出日志" 37 | }, 38 | "Contacts": { 39 | "description": "访问系统联系人信息" 40 | }, 41 | "Device": { 42 | "description": "访问设备信息" 43 | }, 44 | "Downloader": { 45 | "description": "文件下载管理" 46 | }, 47 | "Events": { 48 | "description": "应用扩展事件" 49 | }, 50 | "File": { 51 | "description": "访问本地文件系统" 52 | }, 53 | "Gallery": { 54 | "description": "访问系统相册" 55 | }, 56 | "Geolocation": { 57 | "description": "访问位置信息" 58 | }, 59 | "Invocation": { 60 | "description": "使用Native.js能力" 61 | }, 62 | "Orientation": { 63 | "description": "访问方向感应器" 64 | }, 65 | "Proximity": { 66 | "description": "访问距离感应器" 67 | }, 68 | "Storage": { 69 | "description": "管理应用本地数据" 70 | }, 71 | 72 | "Uploader": { 73 | "description": "管理文件上传任务" 74 | }, 75 | "Runtime": { 76 | "description": "访问运行期环境" 77 | }, 78 | "XMLHttpRequest": { 79 | "description": "跨域网络访问" 80 | }, 81 | "Zip": { 82 | "description": "文件压缩与解压缩" 83 | }, 84 | "Barcode": { 85 | "description": "管理二维码扫描插件" 86 | }, 87 | "Maps": { 88 | "description": "管理地图插件" 89 | }, 90 | "Speech": { 91 | "description": "管理语音识别插件" 92 | }, 93 | "Webview":{ 94 | "description": "窗口管理" 95 | }, 96 | "NativeUI":{ 97 | "description": "原生UI控件" 98 | }, 99 | "Navigator":{ 100 | "description": "浏览器信息" 101 | }, 102 | "NativeObj":{ 103 | "description": "原生对象" 104 | } 105 | }, 106 | "plus": { 107 | "splashscreen": { 108 | "autoclose": true,/*是否自动关闭程序启动界面,true表示应用加载应用入口页面后自动关闭;false则需调plus.navigator.closeSplashscreen()关闭*/ 109 | "waiting": true/*是否在程序启动界面显示等待雪花,true表示显示,false表示不显示。*/ 110 | }, 111 | "popGesture": "close",/*设置应用默认侧滑返回关闭Webview窗口,"none"为无侧滑返回功能,"hide"为侧滑隐藏Webview窗口。参考http://ask.dcloud.net.cn/article/102*/ 112 | "runmode": "normal",/*应用的首次启动运行模式,可取liberate或normal,liberate模式在第一次启动时将解压应用资源(Android平台File API才可正常访问_www目录)*/ 113 | "signature": "Sk9JTiBVUyBtYWlsdG86aHIyMDEzQGRjbG91ZC5pbw==",/*可选,保���给应用签名,暂不使用*/ 114 | "distribute": { 115 | "apple": { 116 | "appid": "",/*iOS应用标识,苹果开发网站申请的appid,如io.dcloud.HelloH5*/ 117 | "mobileprovision": "",/*iOS应用打包配置文件*/ 118 | "password": "",/*iOS应用打包个人证书导入密码*/ 119 | "p12": "",/*iOS应用打包个人证书,打包配置文件关联的个人证书*/ 120 | "devices": "universal",/*iOS应用支持的设备类型,可取值iphone/ipad/universal*/ 121 | "frameworks":[ 122 | ]/*调用Native.js调用原生Objective-c API需要引用的FrameWork,如需调用GameCenter,则添加"GameKit.framework"*/ 123 | }, 124 | "google": { 125 | "packagename": "",/*Android应用包名,如io.dcloud.HelloH5*/ 126 | "keystore": "",/*Android应用打包使用的密钥库文件*/ 127 | "password": "",/*Android应用打包使用密钥库中证书的密码*/ 128 | "aliasname": "",/*Android应用打包���用密钥库中证书的别名*/ 129 | "permissions": ["","","","","","","","","","","","","","","","","","","","","",""] 130 | /*使用Native.js调用原生安卓API需要使用到的系统权限*/ 131 | }, 132 | "orientation": [ 133 | "portrait-primary" 134 | ],/*应用支持的方向,portrait-primary:竖屏正方向;portrait-secondary:竖屏反方向;landscape-primary:横屏正方向;landscape-secondary:横屏反方向*/ 135 | "icons": { 136 | "ios": { 137 | "prerendered": true, /*应用图标是否已经高亮处理,在iOS6及以下设备上有效*/ 138 | "auto": "", /*应用图标,分辨率:512x512,用于自动生成各种尺寸程序图标*/ 139 | "iphone": { 140 | "normal": "", /*iPhone3/3GS程序图标,分辨率:57x57*/ 141 | "retina": "", /*iPhone4程序图标,分辨率:114x114*/ 142 | "retina7": "", /*iPhone4S/5/6程序图标,分辨率:120x120*/ 143 | "retina8": "", /*iPhone6 Plus程序图标,分辨率:180x180*/ 144 | "spotlight-normal": "", /*iPhone3/3GS Spotlight搜索程序图标,分辨率:29x29*/ 145 | "spotlight-retina": "", /*iPhone4 Spotlight搜索程序图标,分辨率:58x58*/ 146 | "spotlight-retina7": "", /*iPhone4S/5/6 Spotlight搜索程序图标,分辨率:80x80*/ 147 | "settings-normal": "", /*iPhone4设置页面程序图标,分辨率:29x29*/ 148 | "settings-retina": "", /*iPhone4S/5/6设置页面程序图标,分辨率:58x58*/ 149 | "settings-retina8": "" /*iPhone6Plus设置页面程序图标,分辨率:87x87*/ 150 | }, 151 | "ipad": { 152 | "normal": "", /*iPad普通屏幕程序图标,分辨率:72x72*/ 153 | "retina": "", /*iPad高分屏程序图标,分辨率:144x144*/ 154 | "normal7": "", /*iPad iOS7程序图标,分辨率:76x76*/ 155 | "retina7": "", /*iPad iOS7高分屏程序图标,分辨率:152x152*/ 156 | "spotlight-normal": "", /*iPad Spotlight搜索程序图标,分辨率:50x50*/ 157 | "spotlight-retina": "", /*iPad高分屏Spotlight搜索程序图标,分辨率:100x100*/ 158 | "spotlight-normal7": "",/*iPad iOS7 Spotlight搜索程序图标,分辨率:40x40*/ 159 | "spotlight-retina7": "",/*iPad iOS7高分屏Spotlight搜索程序图标,分辨率:80x80*/ 160 | "settings-normal": "",/*iPad设置页面程序图标,分辨率:29x29*/ 161 | "settings-retina": "" /*iPad高分屏设置页面程序图标,分辨率:58x58*/ 162 | } 163 | }, 164 | "android": { 165 | "mdpi": "", /*普通屏程序图标,分辨率:48x48*/ 166 | "ldpi": "", /*大屏程序图标,分辨率:48x48*/ 167 | "hdpi": "", /*高分屏程序图标,分辨率:72x72*/ 168 | "xhdpi": "",/*720P高分屏程序图标,分辨率:96x96*/ 169 | "xxhdpi": ""/*1080P 高分屏程序图标,分辨率:144x144*/ 170 | } 171 | }, 172 | "splashscreen": { 173 | "ios": { 174 | "iphone": { 175 | "default": "", /*iPhone3启动图片选,分辨率:320x480*/ 176 | "retina35": "",/*3.5英寸设备(iPhone4)启动图片,分辨率:640x960*/ 177 | "retina40": "",/*4.0 英寸设备(iPhone5/iPhone5s)启动图片,分辨率:640x1136*/ 178 | "retina47": "",/*4.7 英寸设备(iPhone6)启动图片,分辨率:750x1334*/ 179 | "retina55": "",/*5.5 英寸设备(iPhone6 Plus)启动图片,分辨率:1242x2208*/ 180 | "retina55l": ""/*5.5 英寸设备(iPhone6 Plus)横屏启动图片,分辨率:2208x1242*/ 181 | }, 182 | "ipad": { 183 | "portrait": "", /*iPad竖屏启动图片,分辨率:768x1004*/ 184 | "portrait-retina": "",/*iPad高分屏竖屏图片,分辨率:1536x2008*/ 185 | "landscape": "", /*iPad横屏启动图片,分辨率:1024x748*/ 186 | "landscape-retina": "", /*iPad高分屏横屏启动图片,分辨率:2048x1496*/ 187 | "portrait7": "", /*iPad iOS7竖屏启动图��,分辨率:768x1024*/ 188 | "portrait-retina7": "",/*iPad iOS7高分屏竖屏图片,分辨率:1536x2048*/ 189 | "landscape7": "", /*iPad iOS7横屏启动图片,分辨率:1024x768*/ 190 | "landscape-retina7": ""/*iPad iOS7高分屏横屏启动图片,分辨率:2048x1536*/ 191 | } 192 | }, 193 | "android": { 194 | "mdpi": "", /*普通屏启动图片,分辨率:240x282*/ 195 | "ldpi": "", /*大屏启动图片,分辨率:320x442*/ 196 | "hdpi": "", /*高分屏启动图片,分辨率:480x762*/ 197 | "xhdpi": "", /*720P高分屏启动图片,分辨率:720x1242*/ 198 | "xxhdpi": ""/*1080P高分屏启动图片,分辨率:1080x1882*/ 199 | } 200 | } 201 | } 202 | } 203 | } -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Infinite", 3 | "version": "1.0.0", 4 | "description": "infinite", 5 | "author": "rick", 6 | "private": true, 7 | "scripts": { 8 | "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js --open", 9 | "start": "npm run dev", 10 | "build": "node build/build.js", 11 | "dll": "webpack --config ./build/webpack.dll.config.js" 12 | }, 13 | "dependencies": { 14 | "babel-plugin-transform-runtime": "^6.23.0", 15 | "better-scroll": "^1.11.1", 16 | "compression-webpack-plugin": "^1.1.11", 17 | "happypack": "^5.0.0", 18 | "vconsole": "^3.2.0", 19 | "vue": "^2.5.2", 20 | "vue-awesome-swiper": "^3.0.6", 21 | "vue-router": "^3.0.1" 22 | }, 23 | "devDependencies": { 24 | "autoprefixer": "^7.1.2", 25 | "axios": "^0.17.1", 26 | "babel-core": "^6.22.1", 27 | "babel-helper-vue-jsx-merge-props": "^2.0.3", 28 | "babel-loader": "^7.1.1", 29 | "babel-plugin-syntax-jsx": "^6.18.0", 30 | "babel-plugin-transform-runtime": "^6.22.0", 31 | "babel-plugin-transform-vue-jsx": "^3.5.0", 32 | "babel-preset-env": "^1.3.2", 33 | "babel-preset-stage-2": "^6.22.0", 34 | "chalk": "^2.0.1", 35 | "copy-webpack-plugin": "^4.0.1", 36 | "css-loader": "^0.28.0", 37 | "extract-text-webpack-plugin": "^3.0.0", 38 | "fastclick": "^1.0.6", 39 | "file-loader": "^1.1.4", 40 | "friendly-errors-webpack-plugin": "^1.6.1", 41 | "html-webpack-plugin": "^2.30.1", 42 | "less": "^2.7.3", 43 | "less-loader": "^4.0.5", 44 | "node-notifier": "^5.1.2", 45 | "optimize-css-assets-webpack-plugin": "^3.2.0", 46 | "ora": "^1.2.0", 47 | "portfinder": "^1.0.13", 48 | "postcss-import": "^11.0.0", 49 | "postcss-loader": "^2.0.8", 50 | "rimraf": "^2.6.0", 51 | "semver": "^5.3.0", 52 | "shelljs": "^0.7.6", 53 | "uglifyjs-webpack-plugin": "^1.1.1", 54 | "url-loader": "^0.5.8", 55 | "vue-lazyload": "^1.1.4", 56 | "vue-loader": "^13.3.0", 57 | "vue-style-loader": "^3.0.1", 58 | "vue-template-compiler": "^2.5.2", 59 | "vuex": "^3.0.1", 60 | "webpack": "^3.6.0", 61 | "webpack-bundle-analyzer": "^2.9.0", 62 | "webpack-dev-server": "^2.9.1", 63 | "webpack-merge": "^4.1.0" 64 | }, 65 | "engines": { 66 | "node": ">= 4.0.0", 67 | "npm": ">= 3.0.0" 68 | }, 69 | "browserslist": [ 70 | "> 1%", 71 | "last 2 versions", 72 | "not ie <= 8" 73 | ] 74 | } -------------------------------------------------------------------------------- /src/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/czero1995/Infinite-webDesign/418f957b298ac3dc1ef08e0f4c4f0dd22cbbe9c9/src/.DS_Store -------------------------------------------------------------------------------- /src/App.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 30 | 31 | 40 | -------------------------------------------------------------------------------- /src/components/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/czero1995/Infinite-webDesign/418f957b298ac3dc1ef08e0f4c4f0dd22cbbe9c9/src/components/.DS_Store -------------------------------------------------------------------------------- /src/components/About/About.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | -------------------------------------------------------------------------------- /src/components/Agreement/Agreement.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | -------------------------------------------------------------------------------- /src/components/Collect/Collect.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | -------------------------------------------------------------------------------- /src/components/ForgetPasswd/ForgetPasswd.vue: -------------------------------------------------------------------------------- 1 | 2 | 31 | 32 | 100 | 101 | 138 | -------------------------------------------------------------------------------- /src/components/Hot/Hot.vue: -------------------------------------------------------------------------------- 1 | 40 | 41 | 138 | 139 | 195 | -------------------------------------------------------------------------------- /src/components/Index.vue: -------------------------------------------------------------------------------- 1 | 29 | 30 | 150 | 151 | 307 | -------------------------------------------------------------------------------- /src/components/Login/Login.vue: -------------------------------------------------------------------------------- 1 | 32 | 33 | 113 | 114 | 155 | -------------------------------------------------------------------------------- /src/components/Member/Member.vue: -------------------------------------------------------------------------------- 1 | 48 | 49 | 109 | 110 | 173 | -------------------------------------------------------------------------------- /src/components/ModelBox/index.js: -------------------------------------------------------------------------------- 1 | import modelBoxVue from './index.vue'; 2 | 3 | // 定义插件对象 4 | const ModelBox = {}; 5 | // vue的install方法,用于定义vue插件 6 | ModelBox.install = function (Vue, options) { 7 | const ModelBoxInstance = Vue.extend(modelBoxVue); 8 | let currentMsg; 9 | const initInstance = () => { 10 | // 实例化vue实例 11 | currentMsg = new ModelBoxInstance(); 12 | let modelBoxEl = currentMsg.$mount().$el; 13 | document.body.appendChild(modelBoxEl); 14 | }; 15 | // 在vue的原型上添加实例方法,以全局调用 16 | Vue.prototype.$modelBox = { 17 | onModelBox(options) { 18 | if (!currentMsg) { 19 | initInstance(); 20 | } 21 | if (typeof options === 'string') { 22 | currentMsg.content = options; 23 | } else if (typeof options === 'object') { 24 | Object.assign(currentMsg, options); 25 | } 26 | return currentMsg.onModelBox() 27 | .then(val => { 28 | currentMsg = null; 29 | return Promise.resolve(val); 30 | }) 31 | .catch(err => { 32 | currentMsg = null; 33 | return Promise.reject(err) 34 | }); 35 | } 36 | }; 37 | }; 38 | export default ModelBox; 39 | -------------------------------------------------------------------------------- /src/components/ModelBox/index.vue: -------------------------------------------------------------------------------- 1 | 15 | 16 | 81 | -------------------------------------------------------------------------------- /src/components/Register/Register.vue: -------------------------------------------------------------------------------- 1 | 34 | 35 | 114 | 115 | 152 | -------------------------------------------------------------------------------- /src/components/Search/Search.vue: -------------------------------------------------------------------------------- 1 | 26 | 27 | 87 | 88 | 125 | -------------------------------------------------------------------------------- /src/components/Search/Searchbox.vue: -------------------------------------------------------------------------------- 1 | 20 | 21 | 77 | 78 | 84 | -------------------------------------------------------------------------------- /src/components/ToastBox/index.js: -------------------------------------------------------------------------------- 1 | import toastboxVue from './index.vue' 2 | 3 | const ToastBox = {} 4 | ToastBox.install = function (Vue, options) { 5 | const ToastBoxInstance = Vue.extend(toastboxVue); 6 | let currentToast; 7 | const initInstance = () => { 8 | currentToast = new ToastBoxInstance(); 9 | let toastBoxEl = currentToast.$mount().$el; 10 | document.body.appendChild(toastBoxEl); 11 | }; 12 | 13 | Vue.prototype.$toastBox = { 14 | showToastBox(options) { 15 | if (!currentToast) { 16 | initInstance(); 17 | } 18 | if (typeof options === 'string') { 19 | currentToast.toast = options 20 | } else if (typeof options === 'object') { 21 | Object.assign(currentToast, options); 22 | } 23 | return currentToast.showToastBox() 24 | } 25 | } 26 | } 27 | 28 | export default ToastBox; -------------------------------------------------------------------------------- /src/components/ToastBox/index.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 33 | 34 | -------------------------------------------------------------------------------- /src/components/base/Footer.vue: -------------------------------------------------------------------------------- 1 | 14 | 15 | 20 | 48 | -------------------------------------------------------------------------------- /src/components/base/HeaderSec.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 23 | 24 | 48 | -------------------------------------------------------------------------------- /src/components/base/NoPage.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 28 | -------------------------------------------------------------------------------- /src/components/detail/Detail.vue: -------------------------------------------------------------------------------- 1 | 17 | 18 | 91 | 92 | 129 | -------------------------------------------------------------------------------- /src/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Vuex from 'vuex' 3 | import App from './App' 4 | import router from './router' 5 | import store from './store' 6 | import axios from 'axios' 7 | import VueLazyLoad from 'vue-lazyload' 8 | import fastclick from 'fastclick' 9 | import Vconsole from 'vconsole' 10 | import '../static/css/iconfont.css' 11 | import ToastBox from './components/ToastBox/index' //全局Toast弹窗 12 | import ModelBox from './components/ModelBox/index' //全局提示框弹窗 13 | import * as common from "../static/js/common.js"; 14 | Vue.use(ModelBox) 15 | Vue.use(ToastBox) 16 | let vConsole = new Vconsole() 17 | export default vConsole 18 | 19 | fastclick.attach(document.body) //解决移动端点击事件200ms延迟 20 | 21 | Vue.use(Vuex) 22 | Vue.prototype.$http = axios; 23 | Vue.prototype.$baseURL = common.base_url 24 | Vue.config.productionTip = false //vuex开启开发环境日志 25 | // or with options 26 | Vue.use(VueLazyLoad, { //懒加载声明错误图和占位图 27 | preLoad: 1.3, 28 | error: '../static/img/github.png', 29 | loading: '../static/img/github.png', 30 | }) 31 | /* eslint-disable no-new */ 32 | new Vue({ 33 | el: '#app', 34 | router, 35 | store, 36 | template: '', 37 | components: { 38 | App 39 | } 40 | }) 41 | -------------------------------------------------------------------------------- /src/router/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Router from 'vue-router' 3 | Vue.use(Router) 4 | 5 | // 推荐页 6 | const Index = (resolve) => { 7 | import('@/components/Index').then((module) => { 8 | resolve(module) 9 | }) 10 | } 11 | // 发现页 12 | const Hot = (resolve) => { 13 | import('@/components/Hot/Hot').then((module) => { 14 | resolve(module) 15 | }) 16 | } 17 | // 搜索页 18 | const Search = (resolve) => { 19 | import('@/components/Search/Search').then((module) => { 20 | resolve(module) 21 | }) 22 | } 23 | // 搜索内容页 24 | const Searchbox = (resolve) => { 25 | import('@/components/Search/Searchbox').then((module) => { 26 | resolve(module) 27 | }) 28 | } 29 | // 内容闲情页 30 | const Detail = (resolve) => { 31 | import('@/components/Detail/Detail').then((module) => { 32 | resolve(module) 33 | }) 34 | } 35 | // 个人中心页 36 | const Member = (resolve) => { 37 | import('@/components/Member/Member').then((module) => { 38 | resolve(module) 39 | }) 40 | } 41 | // 登陆页 42 | const Login = (resolve) => { 43 | import('@/components/Login/Login').then((module) => { 44 | resolve(module) 45 | }) 46 | } 47 | // 注册页 48 | const Register = (resolve) => { 49 | import('@/components/Register/Register').then((module) => { 50 | resolve(module) 51 | }) 52 | } 53 | // 忘记密码页 54 | const ForgetPasswd = (resolve) => { 55 | import('@/components/ForgetPasswd/ForgetPasswd').then((module) => { 56 | resolve(module) 57 | }) 58 | } 59 | // 收藏页 60 | const Collect = (resolve) => { 61 | import('@/components/Collect/Collect').then((module) => { 62 | resolve(module) 63 | }) 64 | } 65 | // 关于我们页 66 | const About = (resolve) => { 67 | import('@/components/About/About').then((module) => { 68 | resolve(module) 69 | }) 70 | } 71 | // 用户协议页 72 | const Agreement = (resolve) => { 73 | import('@/components/Agreement/Agreement').then((module) => { 74 | resolve(module) 75 | }) 76 | } 77 | 78 | export default new Router({ 79 | // mode: 'history', 80 | routes: [{ 81 | path: '/', 82 | component: Index 83 | }, 84 | { 85 | path: '/index', 86 | component: Index 87 | }, 88 | { 89 | path: '/hot', 90 | component: Hot 91 | }, 92 | { 93 | path: '/search', 94 | component: Search 95 | }, 96 | { 97 | path: '/searchbox', 98 | component: Searchbox 99 | }, 100 | { 101 | path: '/detail', 102 | component: Detail 103 | }, 104 | { 105 | path: '/member', 106 | component: Member 107 | }, 108 | { 109 | path: '/login', 110 | component: Login 111 | }, 112 | { 113 | path: '/register', 114 | component: Register 115 | }, 116 | { 117 | path: '/forgetpasswd', 118 | component: ForgetPasswd 119 | }, 120 | { 121 | path: '/collect', 122 | component: Collect 123 | }, 124 | { 125 | path: '/about', 126 | component: About 127 | }, 128 | { 129 | path: '/agreement', 130 | component: Agreement 131 | }, 132 | 133 | ] 134 | }) -------------------------------------------------------------------------------- /src/store/actions.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/czero1995/Infinite-webDesign/418f957b298ac3dc1ef08e0f4c4f0dd22cbbe9c9/src/store/actions.js -------------------------------------------------------------------------------- /src/store/getters.js: -------------------------------------------------------------------------------- 1 | export const history = state => state.history //历史记录 2 | export const login = state => state.login//登录状态 3 | export const userinfo = state => state.userinfo//登录状态 4 | export const detailid = state => state.detailid//详情Id 5 | export const searchid = state => state.searchid//上次搜索关键词 6 | export const comname = state => state.comname //上个组件名字 7 | -------------------------------------------------------------------------------- /src/store/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Vuex from 'vuex' 3 | import * as actions from './actions' 4 | import * as getters from './getters' 5 | import state from './state' 6 | import mutations from './mutations' 7 | import createLogger from 'vuex/dist/logger' 8 | const debug = process.env.NODE_ENV !== 'production' 9 | 10 | Vue.use(Vuex) 11 | export default new Vuex.Store({ 12 | actions, 13 | getters, 14 | state, 15 | mutations, 16 | strice: debug, 17 | plugins: debug ? [createLogger()] : [] 18 | }) 19 | -------------------------------------------------------------------------------- /src/store/mutation-types.js: -------------------------------------------------------------------------------- 1 | export const SET_HISTORY = 'SET_HISTORY' //搜索记录 2 | export const SET_LOGIN = 'SET_LOGIN' //登录状态 3 | export const SET_USERINFO = 'SET_USERINFO' //用户信息 4 | export const SET_DETAILID = 'SET_DETAILID' //详情id 5 | export const SET_SEARCHID = 'SET_SEARCHID' //搜索关键词 6 | export const SET_COMNAME = 'SET_COMNAME' //组件名字 -------------------------------------------------------------------------------- /src/store/mutations.js: -------------------------------------------------------------------------------- 1 | import * as types from './mutation-types' 2 | const historyArr = []; 3 | const matutaions = { 4 | /*搜索记录*/ 5 | [types.SET_HISTORY](state, history) { 6 | historyArr.push(history); 7 | state.history = historyArr; 8 | }, 9 | /*登录状态*/ 10 | [types.SET_LOGIN](state, login) { 11 | state.login = login; 12 | }, 13 | /*用户*/ 14 | [types.SET_USERINFO](state, userinfo) { 15 | state.userinfo = userinfo; 16 | }, 17 | /*详情id*/ 18 | [types.SET_DETAILID](state, detailid) { 19 | state.detailid = detailid; 20 | }, 21 | /*详情id*/ 22 | [types.SET_SEARCHID](state, searchid) { 23 | state.searchid = searchid; 24 | }, 25 | /*组件名字*/ 26 | [types.SET_COMNAME](state, comname) { 27 | state.comname = comname; 28 | }, 29 | 30 | 31 | } 32 | export default matutaions -------------------------------------------------------------------------------- /src/store/state.js: -------------------------------------------------------------------------------- 1 | const state = { 2 | history: [], // 搜索记录 3 | login: false, // 登录状态 4 | userinfo: {}, // 用户信息 5 | detailid: '', // 详情id, 6 | searchid: '', // 搜索关键词, 7 | comname: 'index', //默认组件名字 8 | } 9 | export default state 10 | -------------------------------------------------------------------------------- /static/css/iconfont.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: 'iconfont'; /* project id 686422 */ 3 | src: url('//at.alicdn.com/t/font_686422_u44s2frt7ps.eot'); 4 | src: url('//at.alicdn.com/t/font_686422_u44s2frt7ps.eot?#iefix') format('embedded-opentype'), 5 | url('//at.alicdn.com/t/font_686422_u44s2frt7ps.woff') format('woff'), 6 | url('//at.alicdn.com/t/font_686422_u44s2frt7ps.ttf') format('truetype'), 7 | url('//at.alicdn.com/t/font_686422_u44s2frt7ps.svg#iconfont') format('svg'); 8 | } 9 | 10 | .iconfont { 11 | font-family:"iconfont" !important; 12 | font-size:16px; 13 | font-style:normal; 14 | -webkit-font-smoothing: antialiased; 15 | -moz-osx-font-smoothing: grayscale; 16 | } 17 | 18 | .icon-sousuo:before { content: "\e600"; } 19 | 20 | .icon-houtui:before { content: "\e749"; } 21 | 22 | .icon-wode:before { content: "\e646"; } 23 | 24 | .icon-remen:before { content: "\e633"; } 25 | 26 | .icon-plus-shiftup:before { content: "\e71f"; } 27 | 28 | .icon-tuijian:before { content: "\e63f"; } 29 | 30 | .icon-qianjin:before { content: "\e652"; } 31 | 32 | -------------------------------------------------------------------------------- /static/css/swiper.min.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Swiper 3.4.2 3 | * Most modern mobile touch slider and framework with hardware accelerated transitions 4 | * 5 | * http://www.idangero.us/swiper/ 6 | * 7 | * Copyright 2017, Vladimir Kharlampidi 8 | * The iDangero.us 9 | * http://www.idangero.us/ 10 | * 11 | * Licensed under MIT 12 | * 13 | * Released on: March 10, 2017 14 | */ 15 | .swiper-container{margin-left:auto;margin-right:auto;position:relative;overflow:hidden;z-index:1}.swiper-container-no-flexbox .swiper-slide{float:left}.swiper-container-vertical>.swiper-wrapper{-webkit-box-orient:vertical;-moz-box-orient:vertical;-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column}.swiper-wrapper{position:relative;width:100%;height:100%;z-index:1;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-transition-property:-webkit-transform;-moz-transition-property:-moz-transform;-o-transition-property:-o-transform;-ms-transition-property:-ms-transform;transition-property:transform;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.swiper-container-android .swiper-slide,.swiper-wrapper{-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-o-transform:translate(0,0);-ms-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.swiper-container-multirow>.swiper-wrapper{-webkit-box-lines:multiple;-moz-box-lines:multiple;-ms-flex-wrap:wrap;-webkit-flex-wrap:wrap;flex-wrap:wrap}.swiper-container-free-mode>.swiper-wrapper{-webkit-transition-timing-function:ease-out;-moz-transition-timing-function:ease-out;-ms-transition-timing-function:ease-out;-o-transition-timing-function:ease-out;transition-timing-function:ease-out;margin:0 auto}.swiper-slide{-webkit-flex-shrink:0;-ms-flex:0 0 auto;flex-shrink:0;width:100%;height:100%;position:relative}.swiper-container-autoheight,.swiper-container-autoheight .swiper-slide{height:auto}.swiper-container-autoheight .swiper-wrapper{-webkit-box-align:start;-ms-flex-align:start;-webkit-align-items:flex-start;align-items:flex-start;-webkit-transition-property:-webkit-transform,height;-moz-transition-property:-moz-transform;-o-transition-property:-o-transform;-ms-transition-property:-ms-transform;transition-property:transform,height}.swiper-container .swiper-notification{position:absolute;left:0;top:0;pointer-events:none;opacity:0;z-index:-1000}.swiper-wp8-horizontal{-ms-touch-action:pan-y;touch-action:pan-y}.swiper-wp8-vertical{-ms-touch-action:pan-x;touch-action:pan-x}.swiper-button-next,.swiper-button-prev{position:absolute;top:50%;width:27px;height:44px;margin-top:-22px;z-index:10;cursor:pointer;-moz-background-size:27px 44px;-webkit-background-size:27px 44px;background-size:27px 44px;background-position:center;background-repeat:no-repeat}.swiper-button-next.swiper-button-disabled,.swiper-button-prev.swiper-button-disabled{opacity:.35;cursor:auto;pointer-events:none}.swiper-button-prev,.swiper-container-rtl .swiper-button-next{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E");left:10px;right:auto}.swiper-button-prev.swiper-button-black,.swiper-container-rtl .swiper-button-next.swiper-button-black{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E")}.swiper-button-prev.swiper-button-white,.swiper-container-rtl .swiper-button-next.swiper-button-white{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E")}.swiper-button-next,.swiper-container-rtl .swiper-button-prev{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E");right:10px;left:auto}.swiper-button-next.swiper-button-black,.swiper-container-rtl .swiper-button-prev.swiper-button-black{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E")}.swiper-button-next.swiper-button-white,.swiper-container-rtl .swiper-button-prev.swiper-button-white{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E")}.swiper-pagination{position:absolute;text-align:center;-webkit-transition:.3s;-moz-transition:.3s;-o-transition:.3s;transition:.3s;-webkit-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0);z-index:10}.swiper-pagination.swiper-pagination-hidden{opacity:0}.swiper-container-horizontal>.swiper-pagination-bullets,.swiper-pagination-custom,.swiper-pagination-fraction{bottom:10px;left:0;width:100%}.swiper-pagination-bullet{width:8px;height:8px;display:inline-block;border-radius:100%;background:#000;opacity:.2}button.swiper-pagination-bullet{border:none;margin:0;padding:0;box-shadow:none;-moz-appearance:none;-ms-appearance:none;-webkit-appearance:none;appearance:none}.swiper-pagination-clickable .swiper-pagination-bullet{cursor:pointer}.swiper-pagination-white .swiper-pagination-bullet{background:#fff}.swiper-pagination-bullet-active{opacity:1;background:#007aff}.swiper-pagination-white .swiper-pagination-bullet-active{background:#fff}.swiper-pagination-black .swiper-pagination-bullet-active{background:#000}.swiper-container-vertical>.swiper-pagination-bullets{right:10px;top:50%;-webkit-transform:translate3d(0,-50%,0);-moz-transform:translate3d(0,-50%,0);-o-transform:translate(0,-50%);-ms-transform:translate3d(0,-50%,0);transform:translate3d(0,-50%,0)}.swiper-container-vertical>.swiper-pagination-bullets .swiper-pagination-bullet{margin:5px 0;display:block}.swiper-container-horizontal>.swiper-pagination-bullets .swiper-pagination-bullet{margin:0 5px}.swiper-pagination-progress{background:rgba(0,0,0,.25);position:absolute}.swiper-pagination-progress .swiper-pagination-progressbar{background:#007aff;position:absolute;left:0;top:0;width:100%;height:100%;-webkit-transform:scale(0);-ms-transform:scale(0);-o-transform:scale(0);transform:scale(0);-webkit-transform-origin:left top;-moz-transform-origin:left top;-ms-transform-origin:left top;-o-transform-origin:left top;transform-origin:left top}.swiper-container-rtl .swiper-pagination-progress .swiper-pagination-progressbar{-webkit-transform-origin:right top;-moz-transform-origin:right top;-ms-transform-origin:right top;-o-transform-origin:right top;transform-origin:right top}.swiper-container-horizontal>.swiper-pagination-progress{width:100%;height:4px;left:0;top:0}.swiper-container-vertical>.swiper-pagination-progress{width:4px;height:100%;left:0;top:0}.swiper-pagination-progress.swiper-pagination-white{background:rgba(255,255,255,.5)}.swiper-pagination-progress.swiper-pagination-white .swiper-pagination-progressbar{background:#fff}.swiper-pagination-progress.swiper-pagination-black .swiper-pagination-progressbar{background:#000}.swiper-container-3d{-webkit-perspective:1200px;-moz-perspective:1200px;-o-perspective:1200px;perspective:1200px}.swiper-container-3d .swiper-cube-shadow,.swiper-container-3d .swiper-slide,.swiper-container-3d .swiper-slide-shadow-bottom,.swiper-container-3d .swiper-slide-shadow-left,.swiper-container-3d .swiper-slide-shadow-right,.swiper-container-3d .swiper-slide-shadow-top,.swiper-container-3d .swiper-wrapper{-webkit-transform-style:preserve-3d;-moz-transform-style:preserve-3d;-ms-transform-style:preserve-3d;transform-style:preserve-3d}.swiper-container-3d .swiper-slide-shadow-bottom,.swiper-container-3d .swiper-slide-shadow-left,.swiper-container-3d .swiper-slide-shadow-right,.swiper-container-3d .swiper-slide-shadow-top{position:absolute;left:0;top:0;width:100%;height:100%;pointer-events:none;z-index:10}.swiper-container-3d .swiper-slide-shadow-left{background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,0)));background-image:-webkit-linear-gradient(right,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-moz-linear-gradient(right,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-o-linear-gradient(right,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:linear-gradient(to left,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-3d .swiper-slide-shadow-right{background-image:-webkit-gradient(linear,right top,left top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,0)));background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-moz-linear-gradient(left,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-o-linear-gradient(left,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:linear-gradient(to right,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-3d .swiper-slide-shadow-top{background-image:-webkit-gradient(linear,left top,left bottom,from(rgba(0,0,0,.5)),to(rgba(0,0,0,0)));background-image:-webkit-linear-gradient(bottom,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-moz-linear-gradient(bottom,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-o-linear-gradient(bottom,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:linear-gradient(to top,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-3d .swiper-slide-shadow-bottom{background-image:-webkit-gradient(linear,left bottom,left top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,0)));background-image:-webkit-linear-gradient(top,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-moz-linear-gradient(top,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-o-linear-gradient(top,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:linear-gradient(to bottom,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-coverflow .swiper-wrapper,.swiper-container-flip .swiper-wrapper{-ms-perspective:1200px}.swiper-container-cube,.swiper-container-flip{overflow:visible}.swiper-container-cube .swiper-slide,.swiper-container-flip .swiper-slide{pointer-events:none;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;backface-visibility:hidden;z-index:1}.swiper-container-cube .swiper-slide .swiper-slide,.swiper-container-flip .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-cube .swiper-slide-active,.swiper-container-cube .swiper-slide-active .swiper-slide-active,.swiper-container-flip .swiper-slide-active,.swiper-container-flip .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-container-cube .swiper-slide-shadow-bottom,.swiper-container-cube .swiper-slide-shadow-left,.swiper-container-cube .swiper-slide-shadow-right,.swiper-container-cube .swiper-slide-shadow-top,.swiper-container-flip .swiper-slide-shadow-bottom,.swiper-container-flip .swiper-slide-shadow-left,.swiper-container-flip .swiper-slide-shadow-right,.swiper-container-flip .swiper-slide-shadow-top{z-index:0;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;backface-visibility:hidden}.swiper-container-cube .swiper-slide{visibility:hidden;-webkit-transform-origin:0 0;-moz-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0;width:100%;height:100%}.swiper-container-cube.swiper-container-rtl .swiper-slide{-webkit-transform-origin:100% 0;-moz-transform-origin:100% 0;-ms-transform-origin:100% 0;transform-origin:100% 0}.swiper-container-cube .swiper-slide-active,.swiper-container-cube .swiper-slide-next,.swiper-container-cube .swiper-slide-next+.swiper-slide,.swiper-container-cube .swiper-slide-prev{pointer-events:auto;visibility:visible}.swiper-container-cube .swiper-cube-shadow{position:absolute;left:0;bottom:0;width:100%;height:100%;background:#000;opacity:.6;-webkit-filter:blur(50px);filter:blur(50px);z-index:0}.swiper-container-fade.swiper-container-free-mode .swiper-slide{-webkit-transition-timing-function:ease-out;-moz-transition-timing-function:ease-out;-ms-transition-timing-function:ease-out;-o-transition-timing-function:ease-out;transition-timing-function:ease-out}.swiper-container-fade .swiper-slide{pointer-events:none;-webkit-transition-property:opacity;-moz-transition-property:opacity;-o-transition-property:opacity;transition-property:opacity}.swiper-container-fade .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-fade .swiper-slide-active,.swiper-container-fade .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-zoom-container{width:100%;height:100%;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-box-pack:center;-moz-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;-webkit-box-align:center;-moz-box-align:center;-ms-flex-align:center;-webkit-align-items:center;align-items:center;text-align:center}.swiper-zoom-container>canvas,.swiper-zoom-container>img,.swiper-zoom-container>svg{max-width:100%;max-height:100%;object-fit:contain}.swiper-scrollbar{border-radius:10px;position:relative;-ms-touch-action:none;background:rgba(0,0,0,.1)}.swiper-container-horizontal>.swiper-scrollbar{position:absolute;left:1%;bottom:3px;z-index:50;height:5px;width:98%}.swiper-container-vertical>.swiper-scrollbar{position:absolute;right:3px;top:1%;z-index:50;width:5px;height:98%}.swiper-scrollbar-drag{height:100%;width:100%;position:relative;background:rgba(0,0,0,.5);border-radius:10px;left:0;top:0}.swiper-scrollbar-cursor-drag{cursor:move}.swiper-lazy-preloader{width:42px;height:42px;position:absolute;left:50%;top:50%;margin-left:-21px;margin-top:-21px;z-index:10;-webkit-transform-origin:50%;-moz-transform-origin:50%;transform-origin:50%;-webkit-animation:swiper-preloader-spin 1s steps(12,end) infinite;-moz-animation:swiper-preloader-spin 1s steps(12,end) infinite;animation:swiper-preloader-spin 1s steps(12,end) infinite}.swiper-lazy-preloader:after{display:block;content:"";width:100%;height:100%;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%236c6c6c'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");background-position:50%;-webkit-background-size:100%;background-size:100%;background-repeat:no-repeat}.swiper-lazy-preloader-white:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%23fff'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E")}@-webkit-keyframes swiper-preloader-spin{100%{-webkit-transform:rotate(360deg)}}@keyframes swiper-preloader-spin{100%{transform:rotate(360deg)}} -------------------------------------------------------------------------------- /static/github.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/czero1995/Infinite-webDesign/418f957b298ac3dc1ef08e0f4c4f0dd22cbbe9c9/static/github.png -------------------------------------------------------------------------------- /static/iconfont/iconfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/czero1995/Infinite-webDesign/418f957b298ac3dc1ef08e0f4c4f0dd22cbbe9c9/static/iconfont/iconfont.eot -------------------------------------------------------------------------------- /static/iconfont/iconfont.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 8 | Created by iconfont 9 | 10 | 11 | 12 | 13 | 21 | 22 | 23 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | -------------------------------------------------------------------------------- /static/iconfont/iconfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/czero1995/Infinite-webDesign/418f957b298ac3dc1ef08e0f4c4f0dd22cbbe9c9/static/iconfont/iconfont.ttf -------------------------------------------------------------------------------- /static/iconfont/iconfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/czero1995/Infinite-webDesign/418f957b298ac3dc1ef08e0f4c4f0dd22cbbe9c9/static/iconfont/iconfont.woff -------------------------------------------------------------------------------- /static/img/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/czero1995/Infinite-webDesign/418f957b298ac3dc1ef08e0f4c4f0dd22cbbe9c9/static/img/.DS_Store -------------------------------------------------------------------------------- /static/img/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/czero1995/Infinite-webDesign/418f957b298ac3dc1ef08e0f4c4f0dd22cbbe9c9/static/img/favicon.png -------------------------------------------------------------------------------- /static/img/github.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/czero1995/Infinite-webDesign/418f957b298ac3dc1ef08e0f4c4f0dd22cbbe9c9/static/img/github.png -------------------------------------------------------------------------------- /static/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/czero1995/Infinite-webDesign/418f957b298ac3dc1ef08e0f4c4f0dd22cbbe9c9/static/img/logo.png -------------------------------------------------------------------------------- /static/js/common.js: -------------------------------------------------------------------------------- 1 | export const phoneReg = /(1[3-9]\d{9}$)/; 2 | export const base_url = 'http://infinite.czero.cn:3000/api/'; 3 | // export const base_url = 'api/'; 4 | -------------------------------------------------------------------------------- /static/js/rem.js: -------------------------------------------------------------------------------- 1 | ! function(e) { 2 | function t(a) { 3 | if(i[a]) return i[a].exports; 4 | var n = i[a] = { 5 | exports: {}, 6 | id: a, 7 | loaded: !1 8 | }; 9 | return e[a].call(n.exports, n, n.exports, t), n.loaded = !0, n.exports 10 | } 11 | var i = {}; 12 | return t.m = e, t.c = i, t.p = "", t(0) 13 | }([function(e, t) { 14 | "use strict"; 15 | Object.defineProperty(t, "__esModule", { 16 | value: !0 17 | }); 18 | var i = window; 19 | t["default"] = i.flex = function(e, t) { 20 | var a = e || 100, 21 | n = t || 1, 22 | r = i.document, 23 | o = navigator.userAgent, 24 | d = o.match(/Android[\S\s]+AppleWebkit\/(\d{3})/i), 25 | l = o.match(/U3\/((\d+|\.){5,})/i), 26 | c = l && parseInt(l[1].split(".").join(""), 10) >= 80, 27 | p = navigator.appVersion.match(/(iphone|ipad|ipod)/gi), 28 | s = i.devicePixelRatio || 1; 29 | p || d && d[1] > 534 || c || (s = 1); 30 | var u = 1 / s, 31 | m = r.querySelector('meta[name="viewport"]'); 32 | m || (m = r.createElement("meta"), m.setAttribute("name", "viewport"), r.head.appendChild(m)), m.setAttribute("content", "width=device-width,user-scalable=no,initial-scale=" + u + ",maximum-scale=" + u + ",minimum-scale=" + u), r.documentElement.style.fontSize = a / 2 * s * n + "px" 33 | }, e.exports = t["default"] 34 | }]); 35 | flex(100, 1); -------------------------------------------------------------------------------- /static/less/base.less: -------------------------------------------------------------------------------- 1 | @theme_background:#6495ED; 2 | @theme_hover:#6495ED; 3 | @theme_color:#6495ED; 4 | @base_color:white; 5 | @base_textSize:.2rem; 6 | @base_textColor:black; 7 | @base_boder:1px solid #ccc; 8 | [v-cloak] { 9 | display: none; 10 | } 11 | 12 | .model { 13 | position: absolute; 14 | top: 0%; 15 | left: 0%; 16 | background: rgba(0, 0, 0, 0.3); 17 | width: 100%; 18 | height: 100%; 19 | position: fixed; 20 | z-index: 9999; 21 | } 22 | 23 | .baseConfig { 24 | font-size: @base_textSize; 25 | color: @base_textColor; 26 | } 27 | 28 | .flex { 29 | display: flex; 30 | } 31 | 32 | .flex-center { 33 | .flex(); 34 | justify-content: center; 35 | } 36 | 37 | .flex_around { 38 | .flex(); 39 | justify-content: space-around; 40 | } 41 | 42 | .flex_between { 43 | .flex(); 44 | justify-content: space-between; 45 | } 46 | 47 | .flex-align { 48 | .flex(); 49 | align-items: flex-start; 50 | } 51 | 52 | .flex-align-center { 53 | .flex(); 54 | align-items: center; 55 | } 56 | 57 | .flex-align-end { 58 | .flex(); 59 | align-items: flex-end; 60 | } 61 | 62 | .flex-wrap { 63 | flex-wrap: wrap; 64 | } 65 | 66 | .goods-name { 67 | font-size: .28rem; 68 | margin-bottom: .2rem; 69 | } 70 | 71 | .goods-num { 72 | font-size: .26rem; 73 | margin-top: .2rem; 74 | } 75 | 76 | .goods-price { 77 | color: red; 78 | font-size: .26rem; 79 | margin: .2rem 0; 80 | } 81 | 82 | .slide-up-enter-active, 83 | .slide-up-leave-active { 84 | transition: all .5s 85 | } 86 | 87 | .slide-up-enter, 88 | .slide-up-leave-to { 89 | opacity: 0; 90 | transform: translate3d(0, 100%, 0); 91 | } 92 | 93 | .slide-go-enter-active, 94 | .slide-go-leave-active { 95 | transition: all .5s; 96 | opacity: .8; 97 | } 98 | 99 | .slide-go-enter, 100 | .slide-go-leave-to { 101 | transition: all .5s; 102 | transform: translate3d(100%, 0, 0); 103 | opacity: .8; 104 | } 105 | 106 | .slide-back-enter-active, 107 | .slide-back-leave-active { 108 | transition: all .5s; 109 | } 110 | 111 | .slide-back-enter, 112 | .slide-back-leave-to { 113 | transition: all .5s; 114 | transform: translate3d(-100%, 0, 0); 115 | } 116 | 117 | .bullet-enter-active, 118 | .bullet-leave-active { 119 | transition: 1s all cubic-bezier(.83, .97, .05, 1.44); 120 | } 121 | 122 | .bullet-enter, 123 | .bullet-leave-to { 124 | opacity: 0; 125 | transform: translate3d(0, 0, -100%); 126 | } 127 | 128 | .text-ellipsis { 129 | overflow: hidden; 130 | text-overflow: ellipsis; 131 | white-space: nowrap; 132 | } 133 | 134 | .page { 135 | display: flex; 136 | flex-direction: column; 137 | height: 100%; 138 | // overflow-y: scroll; 139 | // -webkit-overflow-scrolling: touch; 140 | } 141 | 142 | .container { 143 | flex: 1; 144 | // padding-top: .8rem; 145 | } 146 | 147 | 148 | header { 149 | text-align: center; 150 | background: transparent; 151 | color: @base_color; 152 | font-size: 0.26rem; 153 | line-height: 0.8rem; 154 | width: 100%; 155 | z-index: 10; 156 | position: absolute; 157 | // position: fixed; 158 | top: 0; 159 | padding: 0 0.2rem; 160 | box-sizing: border-box; 161 | } 162 | .search-box { 163 | position: relative; 164 | flex: 1; 165 | } 166 | input{ 167 | height: 0.6rem; 168 | width: 100%; 169 | font-size: 26px; 170 | padding-left: 0.8rem; 171 | box-sizing: border-box; 172 | border: none; 173 | outline: none; 174 | border-radius: 100px; 175 | } 176 | .search-icon { 177 | position: absolute; 178 | left: 0; 179 | color: #ccc; 180 | display: inline-block; 181 | z-index: 20; 182 | padding-left: 0.2rem; 183 | font-size: 0.4rem; 184 | } 185 | .chooice-icon { 186 | font-size: 0.4rem; 187 | } 188 | .chooice-type { 189 | padding-left: 0.1rem; 190 | width: 0.4rem; 191 | } 192 | 193 | .list_box{ 194 | padding-bottom: 1rem; 195 | padding-top: .8rem; 196 | } 197 | .list_item { 198 | height: 1.6rem; 199 | margin-bottom: .1rem; 200 | background-color: white; 201 | // box-shadow: 2px -3px 16px #ccc; 202 | border-radius: 10px; 203 | margin-top: .1rem; 204 | align-items: center; 205 | padding: 0 .2rem; 206 | position: relative; 207 | } 208 | 209 | 210 | .item_title { 211 | flex:1; 212 | font-size: .26rem; 213 | color: "#666"; 214 | overflow:hidden; 215 | margin-right: .6rem; 216 | text-overflow:ellipsis; 217 | display:-webkit-box; 218 | -webkit-box-orient:vertical; 219 | -webkit-line-clamp:2; 220 | } 221 | .item_post{ 222 | width: 1rem; 223 | height: 1rem; 224 | } -------------------------------------------------------------------------------- /static/less/reset.less: -------------------------------------------------------------------------------- 1 | /* reset */ 2 | 3 | html, 4 | body, 5 | h1, 6 | h2, 7 | h3, 8 | h4, 9 | h5, 10 | h6, 11 | div, 12 | dl, 13 | dt, 14 | dd, 15 | ul, 16 | ol, 17 | li, 18 | p, 19 | blockquote, 20 | pre, 21 | hr, 22 | figure, 23 | table, 24 | caption, 25 | th, 26 | td, 27 | form, 28 | fieldset, 29 | legend, 30 | input, 31 | button, 32 | textarea, 33 | menu { 34 | margin: 0; 35 | padding: 0; 36 | } 37 | 38 | header, 39 | footer, 40 | section, 41 | article, 42 | aside, 43 | nav, 44 | hgroup, 45 | address, 46 | figure, 47 | figcaption, 48 | menu, 49 | details { 50 | display: block; 51 | } 52 | 53 | table { 54 | border-collapse: collapse; 55 | border-spacing: 0; 56 | } 57 | 58 | caption, 59 | th { 60 | text-align: left; 61 | font-weight: normal; 62 | } 63 | 64 | html, 65 | body, 66 | fieldset, 67 | img, 68 | iframe, 69 | abbr { 70 | border: 0; 71 | } 72 | 73 | i, 74 | cite, 75 | em, 76 | var, 77 | address, 78 | dfn { 79 | font-style: normal; 80 | } 81 | 82 | [hidefocus], 83 | summary { 84 | outline: 0; 85 | } 86 | 87 | li { 88 | list-style: none; 89 | } 90 | 91 | h1, 92 | h2, 93 | h3, 94 | h4, 95 | h5, 96 | h6, 97 | small { 98 | font-size: 100%; 99 | } 100 | 101 | q:before, 102 | q:after { 103 | content: none; 104 | } 105 | 106 | textarea { 107 | overflow: auto; 108 | resize: none; 109 | } 110 | 111 | label, 112 | summary { 113 | cursor: default; 114 | } 115 | 116 | a, 117 | button { 118 | cursor: pointer; 119 | } 120 | 121 | h1, 122 | h2, 123 | h3, 124 | h4, 125 | h5, 126 | h6, 127 | em, 128 | strong, 129 | b { 130 | font-weight: bold; 131 | } 132 | 133 | body { 134 | background: @base_color; 135 | font-size: @base_textSize; 136 | } 137 | a { 138 | text-decoration: none; 139 | border: none;-webkit-tap-highlight-color: rgba(0,0,0,0);-webkit-tap-highlight-color: transparent;outline: none; 140 | } 141 | body, 142 | html { 143 | height: 100%; 144 | } -------------------------------------------------------------------------------- /static/less/variable.less: -------------------------------------------------------------------------------- 1 | @theme_background:#6495ED; 2 | @theme_hover:#6495ED; 3 | @theme_color:#6495ED; 4 | @base_color:white; 5 | @base_textSize:.2rem; 6 | @base_textColor:black; 7 | @base_boder:1px solid #ccc; 8 | 9 | --------------------------------------------------------------------------------