├── .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 |
5 |
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 | 
20 |
21 | 
22 | # 在线访问
23 | ### 前端:
24 |
25 | 扫码查看:
26 | 
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 | 
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 |
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 |
2 |
3 |
4 |
5 |
6 |
7 |
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 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/src/components/Agreement/Agreement.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/src/components/Collect/Collect.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/src/components/ForgetPasswd/ForgetPasswd.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | 手机号:
10 |
11 |
12 |
13 | 密码:
14 |
15 |
16 |
17 | 确认密码:
18 |
19 |
20 |
21 | 前往登录!
22 |
23 |
24 | 确认
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
100 |
101 |
138 |
--------------------------------------------------------------------------------
/src/components/Hot/Hot.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
![]()
17 |
18 |
19 |
20 |
21 |
22 |
26 |
27 |
28 |
{{item.title}}
29 |
![]()
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
138 |
139 |
195 |
--------------------------------------------------------------------------------
/src/components/Index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
{{pullDownText}}
7 |
8 |
Infinite
9 |
10 |
11 |
12 |
{{item.title}}
13 |
![]()
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
150 |
151 |
307 |
--------------------------------------------------------------------------------
/src/components/Login/Login.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | 手机:
9 |
10 |
11 |
12 | 密码:
13 |
14 |
15 |
16 |
17 | 前往注册!
18 |
19 |
20 | 忘记密码
21 |
22 |
23 |
24 |
25 | 登录
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
113 |
114 |
155 |
--------------------------------------------------------------------------------
/src/components/Member/Member.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |

10 |
11 |
12 | {{$store.state.userinfo.nickname}}
13 |
14 |
15 |
16 |
17 | 请登录!
18 |
19 |
20 |
21 |
22 |
23 | 我的收藏
24 |
25 |
26 |
27 |
28 | 用户协议
29 |
30 |
31 |
32 |
33 | 关于我们
34 |
35 |
36 |
37 |
38 | 退出登录
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
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 |
2 |
3 |
4 |
5 |
{{title}}
6 |
{{content}}
7 |
11 |
12 |
13 |
14 |
15 |
16 |
81 |
--------------------------------------------------------------------------------
/src/components/Register/Register.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | 用户名:
9 |
10 |
11 |
12 | 手机号:
13 |
14 |
15 |
16 | 密码:
17 |
18 |
19 |
20 | 确认密码:
21 |
22 |
23 |
24 | 已账号?前往登陆!
25 |
26 |
27 | 注册
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
114 |
115 |
152 |
--------------------------------------------------------------------------------
/src/components/Search/Search.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
13 |
14 |
搜索记录:
15 |
16 | {{item}}
17 | x
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
87 |
88 |
125 |
--------------------------------------------------------------------------------
/src/components/Search/Searchbox.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
{{item.title}}
10 |
![]()
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
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 |
2 |
5 |
6 |
7 |
33 |
34 |
--------------------------------------------------------------------------------
/src/components/base/Footer.vue:
--------------------------------------------------------------------------------
1 |
2 |
13 |
14 |
15 |
20 |
48 |
--------------------------------------------------------------------------------
/src/components/base/HeaderSec.vue:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
23 |
24 |
48 |
--------------------------------------------------------------------------------
/src/components/base/NoPage.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |

4 |
暂无数据,请前往添加。
5 |
6 |
7 |
8 |
28 |
--------------------------------------------------------------------------------
/src/components/detail/Detail.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
13 |
14 |
15 |
16 |
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 |
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 |
--------------------------------------------------------------------------------