├── .babelrc
├── .editorconfig
├── .gitignore
├── .postcssrc.js
├── .project
├── README.md
├── build
├── build.js
├── check-versions.js
├── utils.js
├── vue-loader.conf.js
├── webpack.base.conf.js
├── webpack.dev.conf.js
└── webpack.prod.conf.js
├── config
├── dev.env.js
├── index.js
└── prod.env.js
├── manifest.json
├── package.json
├── src
├── assets
│ ├── audio
│ │ ├── shake.wav
│ │ └── videoviewdemo.mp4
│ ├── css
│ │ ├── base.styl
│ │ ├── common.styl
│ │ ├── flex.styl
│ │ ├── iconfont.styl
│ │ ├── index.styl
│ │ ├── mint.css
│ │ ├── reset.styl
│ │ ├── transition.styl
│ │ └── variable.styl
│ ├── fonts
│ │ ├── iconfont.eot
│ │ ├── iconfont.svg
│ │ ├── iconfont.ttf
│ │ └── iconfont.woff
│ ├── img
│ │ ├── weixin.png
│ │ └── zhifubao.png
│ ├── js
│ │ ├── mixins.js
│ │ ├── plusReady.js
│ │ ├── storageConst.js
│ │ ├── utils.js
│ │ ├── vconsole.min.js
│ │ └── webview.js
│ └── logo.png
├── components
│ ├── baseRow
│ │ └── BaseRow.vue
│ ├── cell
│ │ └── Cell.vue
│ ├── header
│ │ └── Header.vue
│ ├── indexList
│ │ └── IndexList.vue
│ └── indexTab
│ │ ├── IndexMine.vue
│ │ ├── IndexPlus.vue
│ │ └── IndexUi.vue
└── html
│ ├── advertisement
│ ├── App.vue
│ ├── advertisement.html
│ └── advertisement.js
│ ├── index
│ ├── App.vue
│ ├── index.html
│ └── index.js
│ ├── login
│ ├── App.vue
│ ├── login.html
│ └── login.js
│ ├── plus
│ ├── accelerometer
│ │ ├── App.vue
│ │ ├── accelerometer.html
│ │ └── accelerometer.js
│ ├── camera
│ │ ├── App.vue
│ │ ├── camera.html
│ │ └── camera.js
│ ├── geolocation
│ │ ├── App.vue
│ │ ├── geolocation.html
│ │ └── geolocation.js
│ ├── header
│ │ ├── App.vue
│ │ ├── header.html
│ │ └── header.js
│ ├── resumeCallback
│ │ ├── App.vue
│ │ ├── resumeCallback.html
│ │ └── resumeCallback.js
│ ├── webview1
│ │ ├── App.vue
│ │ ├── webview1.html
│ │ └── webview1.js
│ └── webview2
│ │ ├── App.vue
│ │ ├── webview2.html
│ │ └── webview2.js
│ ├── slider
│ ├── App.vue
│ ├── slider.html
│ └── slider.js
│ └── ui
│ ├── actionSheet
│ ├── App.vue
│ ├── actionSheet.html
│ └── actionSheet.js
│ ├── button
│ ├── App.vue
│ ├── button.html
│ └── button.js
│ ├── checkbox
│ ├── App.vue
│ ├── checkbox.html
│ └── checkbox.js
│ ├── dialog
│ ├── App.vue
│ ├── dialog.html
│ └── dialog.js
│ ├── drawer
│ ├── App.vue
│ ├── drawer.html
│ └── drawer.js
│ ├── form
│ ├── App.vue
│ ├── form.html
│ └── form.js
│ ├── indexList
│ ├── App.vue
│ ├── indexList.html
│ └── indexList.js
│ ├── input
│ ├── App.vue
│ ├── input.html
│ └── input.js
│ ├── loading
│ ├── App.vue
│ ├── loading.html
│ └── loading.js
│ ├── picker
│ ├── App.vue
│ ├── picker.html
│ └── picker.js
│ ├── popup
│ ├── App.vue
│ ├── popup.html
│ └── popup.js
│ ├── radio
│ ├── App.vue
│ ├── radio.html
│ └── radio.js
│ ├── rate
│ ├── App.vue
│ ├── rate.html
│ └── rate.js
│ ├── scroll
│ ├── App.vue
│ ├── scroll.html
│ └── scroll.js
│ ├── select
│ ├── App.vue
│ ├── select.html
│ └── select.js
│ ├── slide
│ ├── App.vue
│ ├── slide.html
│ └── slide.js
│ ├── swipe
│ ├── App.vue
│ ├── swipe.html
│ └── swipe.js
│ ├── switch
│ ├── App.vue
│ ├── switch.html
│ └── switch.js
│ ├── textarea
│ ├── App.vue
│ ├── textarea.html
│ └── textarea.js
│ ├── tip
│ ├── App.vue
│ ├── tip.html
│ └── tip.js
│ ├── toast
│ ├── App.vue
│ ├── toast.html
│ └── toast.js
│ ├── toolbar
│ ├── App.vue
│ ├── toolbar.html
│ └── toolbar.js
│ ├── upload
│ ├── App.vue
│ ├── upload.html
│ └── upload.js
│ └── validator
│ ├── App.vue
│ ├── validator.html
│ └── validator.js
├── static
├── .gitkeep
├── QR
│ ├── weixin.png
│ └── zhifubao.png
├── icon
│ └── more.png
├── media
│ └── shake.wav
└── mock
│ ├── city.js
│ └── indexList.js
└── unpackage
├── .confirmed_dependencies
└── .dependencies
/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "presets": [
3 | ["env", {
4 | "modules": false,
5 | "targets": {
6 | "browsers": ["> 1%", "last 2 versions", "not ie <= 8"]
7 | }
8 | }],
9 | "stage-0"
10 | ],
11 | "plugins": ["transform-vue-jsx", "transform-runtime"]
12 | }
13 |
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | charset = utf-8
5 | indent_style = space
6 | indent_size = 2
7 | end_of_line = lf
8 | insert_final_newline = true
9 | trim_trailing_whitespace = true
10 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules/
3 | /dist/
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 |
8 | # Editor directories and files
9 | .idea
10 | .vscode
11 | *.suo
12 | *.ntvs*
13 | *.njsproj
14 | *.sln
15 |
--------------------------------------------------------------------------------
/.postcssrc.js:
--------------------------------------------------------------------------------
1 | // https://github.com/michael-ciniawsky/postcss-load-config
2 |
3 | module.exports = {
4 | "plugins": {
5 | "postcss-import": {},
6 | "postcss-url": {},
7 | // to edit target browsers: use "browserslist" field in package.json
8 | "autoprefixer": {}
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/.project:
--------------------------------------------------------------------------------
1 |
2 |
3 | vue-webapck-mint-hbuilder-multipage
4 |
5 |
6 |
7 |
8 |
9 | com.aptana.ide.core.unifiedBuilder
10 |
11 |
12 |
13 |
14 | com.pandora.projects.ui.MKeyBuilder
15 |
16 |
17 |
18 |
19 |
20 | com.pandora.projects.ui.MKeyNature
21 | com.aptana.projects.webnature
22 |
23 |
24 |
25 | 1527501393363
26 |
27 | 26
28 |
29 | org.eclipse.ui.ide.multiFilter
30 | 1.0-name-matches-false-false-node_modules
31 |
32 |
33 |
34 | 1527692257676
35 |
36 | 26
37 |
38 | org.eclipse.ui.ide.multiFilter
39 | 1.0-name-matches-false-false-node_modules
40 |
41 |
42 |
43 | 1528870553379
44 |
45 | 26
46 |
47 | org.eclipse.ui.ide.multiFilter
48 | 1.0-name-matches-false-false-node_modules
49 |
50 |
51 |
52 |
53 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # vue-webpack-cube for hbuilder
2 |
3 | > 此项目设计的最初目的是为了解决使用 vue+webpack 自动化构建并实时同步手机热更新调试而诞生。截止目前,DCloud 官方并提供一套完整的 vue+webpack+hbuilder 实时开发调试的文章,只是零零散散有人去构建一些自己的项目,并不能很好地教会或者引导大量开发者使用该开发模式进行开发。本项目以构建流程为主,适量 demo 为辅,印证了 vue+webpack+hbuilder 实时调试以及打包的可行性,为开发者提供多开发种选择。
4 | 本APP与其他APP不同,该APP并不是功能性APP,所以几乎没有展示内容的业务逻辑,你可以把它理解为DCLOUD的muiAPP,做UIdemo的展示,并且验证PLUS在vue+webpack构建方式下的各类使用情况。更多的AQ可以在APP中的‘ABOUT’中得到解答。
5 | 本应用为多页面开发,单页面请参照我的另一个APP:[vue-webpack-mint-for-hbuilder](https://github.com/wjsljc/vue-webpack-mint-for-hbuilder "vue-webpack-mint-for-hbuilder")
6 |
7 | ## 使用步骤
8 | ###下载代码
9 | ```
10 | $ git clone https://github.com/wjsljc/vue-webpack-cube-for-hbuilder.git
11 | $ cd vue-webpack-cube-for-hbuilder
12 | $ npm install
13 | ```
14 |
15 | ### 在浏览器中调试调试
16 | ```
17 | $ npm run dev
18 | ```
19 | 浏览器地址为:``http://localhost:8080/html/index.html``
20 |
21 | ### 真机同步调试
22 | ```
23 | $ npm run dev
24 | ```
25 | 在 HBuilder 中设置应用入口地址为 ``本地服务器:端口号/html/index.html``
26 | 如 192.168.11.102:8080/html/index.html
27 | > 请确保手机与本地服务在同一网段,否则无法访问本机的服务。
28 |
29 | ### 编译后真机同步调试
30 | ```
31 | $ npm run build
32 | ```
33 | - 把 dist 目录下的文件复制到 HBuilder 项目下
34 | - 设置起始页为 html/index.html
35 | - 真机运行调试
36 |
37 | ## 主要架构以及特色
38 | > vue + webpack + cube-ui + hbuilder
39 | - UI模块和PLUS模块独立展示,参考使用各取所需
40 | - UI是对cube-ui官网demo的仿造与实际实践,采用的是后编译,100%迁移以及额外的扩展,更多的自定义demo展示与结合APP的运用,更加符合一款APP的基础需求
41 | - PLUS对5+SDK的的集成运用,对APP常用的几个功能进行了展示,验证5+在vue中的使用
42 | - 索引页面、登陆与登出,登陆超时、广告弹出等等功能的基础实现原理,使得APP更加“高仿”
43 | - 对公共函数的封装、组件的封装、对公用代码mixin的使用等也体现了作者对APP的态度
44 |
45 | ## 赞助
46 | 如果该项目给您带来了工作上的参考或者启发,亦或者期待更多其他项目的诞生和该项目的继续维护,支持作者原创扫一扫或点击识别下方的二维码,为作者打赏1.0元吧!
47 |
48 | 
49 | 
50 |
51 |
--------------------------------------------------------------------------------
/build/build.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 | require('./check-versions')()
3 |
4 | process.env.NODE_ENV = 'production'
5 |
6 | const ora = require('ora')
7 | const rm = require('rimraf')
8 | const path = require('path')
9 | const chalk = require('chalk')
10 | const webpack = require('webpack')
11 | const config = require('../config')
12 | const webpackConfig = require('./webpack.prod.conf')
13 |
14 | const spinner = ora('building for production...')
15 | spinner.start()
16 |
17 | rm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err => {
18 | if (err) throw err
19 | webpack(webpackConfig, (err, stats) => {
20 | spinner.stop()
21 | if (err) throw err
22 | process.stdout.write(stats.toString({
23 | colors: true,
24 | modules: false,
25 | children: false, // If you are using ts-loader, setting this to true will make TypeScript errors show up during build.
26 | chunks: false,
27 | chunkModules: false
28 | }) + '\n\n')
29 |
30 | if (stats.hasErrors()) {
31 | console.log(chalk.red(' Build failed with errors.\n'))
32 | process.exit(1)
33 | }
34 |
35 | console.log(chalk.cyan(' Build complete.\n'))
36 | console.log(chalk.yellow(
37 | ' Tip: built files are meant to be served over an HTTP server.\n' +
38 | ' Opening index.html over file:// won\'t work.\n'
39 | ))
40 | })
41 | })
42 |
--------------------------------------------------------------------------------
/build/check-versions.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 | const chalk = require('chalk')
3 | const semver = require('semver')
4 | const packageConfig = require('../package.json')
5 | const shell = require('shelljs')
6 |
7 | function exec (cmd) {
8 | return require('child_process').execSync(cmd).toString().trim()
9 | }
10 |
11 | const versionRequirements = [
12 | {
13 | name: 'node',
14 | currentVersion: semver.clean(process.version),
15 | versionRequirement: packageConfig.engines.node
16 | }
17 | ]
18 |
19 | if (shell.which('npm')) {
20 | versionRequirements.push({
21 | name: 'npm',
22 | currentVersion: exec('npm --version'),
23 | versionRequirement: packageConfig.engines.npm
24 | })
25 | }
26 |
27 | module.exports = function () {
28 | const warnings = []
29 |
30 | for (let i = 0; i < versionRequirements.length; i++) {
31 | const mod = versionRequirements[i]
32 |
33 | if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) {
34 | warnings.push(mod.name + ': ' +
35 | chalk.red(mod.currentVersion) + ' should be ' +
36 | chalk.green(mod.versionRequirement)
37 | )
38 | }
39 | }
40 |
41 | if (warnings.length) {
42 | console.log('')
43 | console.log(chalk.yellow('To use this template, you must update following to modules:'))
44 | console.log()
45 |
46 | for (let i = 0; i < warnings.length; i++) {
47 | const warning = warnings[i]
48 | console.log(' ' + warning)
49 | }
50 |
51 | console.log()
52 | process.exit(1)
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/build/utils.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 | const path = require('path')
3 | const config = require('../config')
4 | const ExtractTextPlugin = require('extract-text-webpack-plugin')
5 | const packageConfig = require('../package.json')
6 |
7 | exports.assetsPath = function (_path) {
8 | const assetsSubDirectory = process.env.NODE_ENV === 'production'
9 | ? config.build.assetsSubDirectory
10 | : config.dev.assetsSubDirectory
11 |
12 | return path.posix.join(assetsSubDirectory, _path)
13 | }
14 |
15 | exports.cssLoaders = function (options) {
16 | options = options || {}
17 |
18 | const cssLoader = {
19 | loader: 'css-loader',
20 | options: {
21 | sourceMap: options.sourceMap
22 | }
23 | }
24 |
25 | const postcssLoader = {
26 | loader: 'postcss-loader',
27 | options: {
28 | sourceMap: options.sourceMap
29 | }
30 | }
31 |
32 | // generate loader string to be used with extract text plugin
33 | function generateLoaders (loader, loaderOptions) {
34 | const loaders = options.usePostCSS ? [cssLoader, postcssLoader] : [cssLoader]
35 |
36 | if (loader) {
37 | loaders.push({
38 | loader: loader + '-loader',
39 | options: Object.assign({}, loaderOptions, {
40 | sourceMap: options.sourceMap
41 | })
42 | })
43 | }
44 |
45 | // Extract CSS when that option is specified
46 | // (which is the case during production build)
47 | if (options.extract) {
48 | return ExtractTextPlugin.extract({
49 | use: loaders,
50 | fallback: 'vue-style-loader'
51 | })
52 | } else {
53 | return ['vue-style-loader'].concat(loaders)
54 | }
55 | }
56 |
57 | const stylusOptions = {
58 | 'resolve url': true
59 | }
60 |
61 | // https://vue-loader.vuejs.org/en/configurations/extract-css.html
62 | return {
63 | css: generateLoaders(),
64 | postcss: generateLoaders(),
65 | less: generateLoaders('less'),
66 | sass: generateLoaders('sass', {indentedSyntax: true}),
67 | scss: generateLoaders('sass'),
68 | stylus: generateLoaders('stylus', stylusOptions),
69 | styl: generateLoaders('stylus', stylusOptions)
70 | }
71 | }
72 |
73 | // Generate loaders for standalone style files (outside of .vue)
74 | exports.styleLoaders = function (options) {
75 | const output = []
76 | const loaders = exports.cssLoaders(options)
77 |
78 | for (const extension in loaders) {
79 | const loader = loaders[extension]
80 | output.push({
81 | test: new RegExp('\\.' + extension + '$'),
82 | use: loader
83 | })
84 | }
85 |
86 | return output
87 | }
88 |
89 | exports.createNotifierCallback = () => {
90 | const notifier = require('node-notifier')
91 |
92 | return (severity, errors) => {
93 | if (severity !== 'error') return
94 |
95 | const error = errors[0]
96 | const filename = error.file && error.file.split('!').pop()
97 |
98 | notifier.notify({
99 | title: packageConfig.name,
100 | message: severity + ': ' + error.name,
101 | subtitle: filename || '',
102 | icon: path.join(__dirname, 'logo.png')
103 | })
104 | }
105 | }
106 |
--------------------------------------------------------------------------------
/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 | extract: false // cube修改
14 | }),
15 | cssSourceMap: sourceMapEnabled,
16 | cacheBusting: config.dev.cacheBusting,
17 | transformToRequire: {
18 | video: ['src', 'poster'],
19 | source: 'src',
20 | img: 'src',
21 | image: 'xlink:href'
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/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 PostCompilePlugin = require('webpack-post-compile-plugin')
7 | const TransformModulesPlugin = require('webpack-transform-modules-plugin')
8 | const glob = require('glob')
9 | const entries = getEntry(['./src/html/*.js', './src/html/**/*.js', './src/html/**/**/*.js']) // 获得入口js文件
10 |
11 | function resolve (dir) {
12 | return path.join(__dirname, '..', dir)
13 | }
14 |
15 | console.log('entries ' + JSON.stringify(entries))
16 | module.exports = {
17 | context: path.resolve(__dirname, '../'),
18 | entry: entries,
19 | output: {
20 | path: config.build.assetsRoot,
21 | filename: '[name].js',
22 | publicPath: process.env.NODE_ENV === 'production'
23 | ? undefined
24 | : config.dev.assetsPublicPath
25 | },
26 | resolve: {
27 | extensions: ['.js', '.vue', '.json'],
28 | alias: {
29 | 'vue$': 'vue/dist/vue.esm.js',
30 | '@': resolve('src'),
31 | 'html': resolve('src/html'),
32 | 'assets': resolve('src/assets'),
33 | 'components': resolve('src/components'),
34 | 'static': resolve('static')
35 | }
36 | },
37 | module: {
38 | rules: [
39 | {
40 | test: /\.vue$/,
41 | loader: 'vue-loader',
42 | options: vueLoaderConfig
43 | },
44 | {
45 | test: /\.js$/,
46 | loader: 'babel-loader',
47 | include: [resolve('src'), resolve('test'), resolve('node_modules/webpack-dev-server/client')]
48 | },
49 | {
50 | test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
51 | loader: 'url-loader',
52 | options: {
53 | limit: 10000000,
54 | name: utils.assetsPath('img/[name].[hash:7].[ext]')
55 | }
56 | },
57 | {
58 | test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/,
59 | loader: 'url-loader',
60 | options: {
61 | limit: 10000,
62 | name: utils.assetsPath('media/[name].[hash:7].[ext]')
63 | }
64 | },
65 | {
66 | test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
67 | loader: 'url-loader',
68 | options: {
69 | limit: 10000,
70 | name: utils.assetsPath('fonts/iconfont.[ext]')
71 | }
72 | }
73 | ]
74 | },
75 | node: {
76 | // prevent webpack from injecting useless setImmediate polyfill because Vue
77 | // source contains it (although only uses it if it's native).
78 | setImmediate: false,
79 | // prevent webpack from injecting mocks to Node native modules
80 | // that does not make sense for the client
81 | dgram: 'empty',
82 | fs: 'empty',
83 | net: 'empty',
84 | tls: 'empty',
85 | child_process: 'empty'
86 | },
87 | plugins: [
88 | new PostCompilePlugin(),
89 | new TransformModulesPlugin()
90 | ]
91 | }
92 |
93 | function getEntry (globPath) {
94 | console.log('globPath ' + JSON.stringify(globPath))
95 | let entries = {},
96 | basename, tmp, pathname;
97 | if (typeof (globPath) != "object") {
98 | globPath = [globPath]
99 | }
100 | globPath.forEach((itemPath) => {
101 | glob.sync(itemPath).forEach(function (entry) {
102 | basename = path.basename(entry, path.extname(entry));
103 | if (entry.split('/').length > 4) {
104 | if (entry.split('/').length === 5) {
105 | tmp = entry.split('/').splice(-3)
106 | pathname = tmp.splice(0, 1) + '/' + basename; // 正确输出js和html的路径
107 | } else if (entry.split('/').length === 6) {
108 | tmp = entry.split('/').splice(-4)
109 | pathname = tmp[0] + '/' + tmp[1] + '/' + basename; // 正确输出js和html的路径
110 | }
111 | entries[pathname] = entry;
112 | } else {
113 | entries[basename] = entry;
114 | }
115 | });
116 | });
117 | // console.log('entries ' + JSON.stringify(entries))
118 | return entries;
119 | }
120 |
--------------------------------------------------------------------------------
/build/webpack.dev.conf.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 | const utils = require('./utils')
3 | const webpack = require('webpack')
4 | const config = require('../config')
5 | const merge = require('webpack-merge')
6 | const path = require('path')
7 | const baseWebpackConfig = require('./webpack.base.conf')
8 | const CopyWebpackPlugin = require('copy-webpack-plugin')
9 | const HtmlWebpackPlugin = require('html-webpack-plugin')
10 | const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin')
11 | const portfinder = require('portfinder')
12 | const glob = require('glob')
13 |
14 | const HOST = process.env.HOST
15 | const PORT = process.env.PORT && Number(process.env.PORT)
16 |
17 | const devWebpackConfig = merge(baseWebpackConfig, {
18 | module: {
19 | rules: utils.styleLoaders({sourceMap: config.dev.cssSourceMap, usePostCSS: true})
20 | },
21 | // cheap-module-eval-source-map is faster for development
22 | devtool: config.dev.devtool,
23 |
24 | // these devServer options should be customized in /config/index.js
25 | devServer: {
26 | clientLogLevel: 'warning',
27 | historyApiFallback: {
28 | rewrites: [
29 | {from: /.*/, to: path.posix.join(config.dev.assetsPublicPath, 'index.html')},
30 | ],
31 | },
32 | hot: true,
33 | contentBase: false, // since we use CopyWebpackPlugin.
34 | compress: true,
35 | host: HOST || config.dev.host,
36 | port: PORT || config.dev.port,
37 | open: config.dev.autoOpenBrowser,
38 | overlay: config.dev.errorOverlay
39 | ? {warnings: false, errors: true}
40 | : false,
41 | publicPath: config.dev.assetsPublicPath,
42 | proxy: config.dev.proxyTable,
43 | quiet: true, // necessary for FriendlyErrorsPlugin
44 | watchOptions: {
45 | poll: config.dev.poll,
46 | }
47 | },
48 | plugins: [
49 | new webpack.DefinePlugin({
50 | 'process.env': require('../config/dev.env')
51 | }),
52 | new webpack.HotModuleReplacementPlugin(),
53 | new webpack.NamedModulesPlugin(), // HMR shows correct file names in console on update.
54 | new webpack.NoEmitOnErrorsPlugin(),
55 | // https://github.com/ampedandwired/html-webpack-plugin
56 | // new HtmlWebpackPlugin({
57 | // filename: 'index.html',
58 | // template: 'index.html',
59 | // inject: true
60 | // }),
61 | // copy custom static assets
62 | new CopyWebpackPlugin([
63 | {
64 | from: path.resolve(__dirname, '../static'),
65 | to: config.dev.assetsSubDirectory,
66 | ignore: ['.*']
67 | }
68 | ])
69 | ]
70 | })
71 |
72 | function getEntry (globPath) {
73 | console.log('globPath ' + JSON.stringify(globPath))
74 | let entries = {},
75 | basename, tmp, pathname;
76 | if (typeof (globPath) != "object") {
77 | globPath = [globPath]
78 | }
79 | globPath.forEach((itemPath) => {
80 | glob.sync(itemPath).forEach(function (entry) {
81 | basename = path.basename(entry, path.extname(entry));
82 | if (entry.split('/').length > 4) {
83 | if (entry.split('/').length === 5) {
84 | tmp = entry.split('/').splice(-3)
85 | pathname = tmp.splice(0, 1) + '/' + basename; // 正确输出js和html的路径
86 | } else if (entry.split('/').length === 6) {
87 | tmp = entry.split('/').splice(-4)
88 | pathname = tmp[0] + '/' + tmp[1] + '/' + basename; // 正确输出js和html的路径
89 | }
90 | entries[pathname] = entry;
91 | } else {
92 | entries[basename] = entry;
93 | }
94 | });
95 | });
96 | return entries;
97 | }
98 |
99 | let pages = getEntry(['./src/html/*.html', './src/html/**/*.html', './src/html/**/**/*.html'])
100 | console.log('pages ' + JSON.stringify(pages))
101 | for (let pathname in pages) {
102 | // 配置生成的html文件,定义路径等
103 | console.log('pathname ' + JSON.stringify(pathname))
104 | let conf = {
105 | filename: pathname + '.html',
106 | template: pages[pathname], // 模板路径
107 | inject: true, // js插入位置
108 | // necessary to consistently work with multiple chunks via CommonsChunkPlugin
109 | chunksSortMode: 'dependency'
110 |
111 | }
112 |
113 | if (pathname in devWebpackConfig.entry) {
114 | conf.chunks = ['manifest', 'vendor', pathname]
115 | conf.hash = true
116 | }
117 |
118 | devWebpackConfig.plugins.push(new HtmlWebpackPlugin(conf))
119 | }
120 |
121 | console.log('devWebpackConfig ' + JSON.stringify(devWebpackConfig))
122 |
123 | module.exports = new Promise((resolve, reject) => {
124 | portfinder.basePort = process.env.PORT || config.dev.port
125 | portfinder.getPort((err, port) => {
126 | if (err) {
127 | reject(err)
128 | } else {
129 | // publish the new Port, necessary for e2e tests
130 | process.env.PORT = port
131 | // add port to devServer config
132 | devWebpackConfig.devServer.port = port
133 |
134 | // Add FriendlyErrorsPlugin
135 | devWebpackConfig.plugins.push(new FriendlyErrorsPlugin({
136 | compilationSuccessInfo: {
137 | messages: [`Your application is running here: http://${devWebpackConfig.devServer.host}:${port}`],
138 | },
139 | onErrors: config.dev.notifyOnErrors
140 | ? utils.createNotifierCallback()
141 | : undefined
142 | }))
143 |
144 | resolve(devWebpackConfig)
145 | }
146 | })
147 | })
148 |
--------------------------------------------------------------------------------
/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 glob = require('glob')
14 |
15 | const env = require('../config/prod.env')
16 |
17 | const webpackConfig = merge(baseWebpackConfig, {
18 | module: {
19 | rules: utils.styleLoaders({
20 | sourceMap: config.build.productionSourceMap,
21 | extract: true,
22 | usePostCSS: true
23 | })
24 | },
25 | devtool: config.build.productionSourceMap ? config.build.devtool : false,
26 | output: {
27 | path: config.build.assetsRoot,
28 | filename: utils.assetsPath('js/[name].[chunkhash].js'),
29 | chunkFilename: utils.assetsPath('js/[id].[chunkhash].js')
30 | },
31 | plugins: [
32 | // http://vuejs.github.io/vue-loader/en/workflow/production.html
33 | new webpack.DefinePlugin({
34 | 'process.env': env
35 | }),
36 | new UglifyJsPlugin({
37 | uglifyOptions: {
38 | compress: {
39 | warnings: false
40 | }
41 | },
42 | sourceMap: config.build.productionSourceMap,
43 | parallel: true
44 | }),
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 | new webpack.HashedModuleIdsPlugin(),
62 | // enable scope hoisting
63 | new webpack.optimize.ModuleConcatenationPlugin(),
64 | // split vendor js into its own file
65 | new webpack.optimize.CommonsChunkPlugin({
66 | name: 'vendor',
67 | minChunks (module) {
68 | // any required modules inside node_modules are extracted to vendor
69 | return (
70 | module.resource &&
71 | /\.js$/.test(module.resource) &&
72 | module.resource.indexOf(
73 | path.join(__dirname, '../node_modules')
74 | ) === 0
75 | )
76 | }
77 | }),
78 | // extract webpack runtime and module manifest to its own file in order to
79 | // prevent vendor hash from being updated whenever app bundle is updated
80 | new webpack.optimize.CommonsChunkPlugin({
81 | name: 'manifest',
82 | minChunks: Infinity
83 | }),
84 | // This instance extracts shared chunks from code splitted chunks and bundles them
85 | // in a separate chunk, similar to the vendor chunk
86 | // see: https://webpack.js.org/plugins/commons-chunk-plugin/#extra-async-commons-chunk
87 | new webpack.optimize.CommonsChunkPlugin({
88 | name: 'app',
89 | async: 'vendor-async',
90 | children: true,
91 | minChunks: 3
92 | }),
93 |
94 | // copy custom static assets
95 | new CopyWebpackPlugin([
96 | {
97 | from: path.resolve(__dirname, '../static'),
98 | to: config.build.assetsSubDirectory,
99 | ignore: ['.*']
100 | }
101 | ])
102 | ]
103 | })
104 |
105 | if (config.build.productionGzip) {
106 | const CompressionWebpackPlugin = require('compression-webpack-plugin')
107 |
108 | webpackConfig.plugins.push(
109 | new CompressionWebpackPlugin({
110 | asset: '[path].gz[query]',
111 | algorithm: 'gzip',
112 | test: new RegExp(
113 | '\\.(' +
114 | config.build.productionGzipExtensions.join('|') +
115 | ')$'
116 | ),
117 | threshold: 10240,
118 | minRatio: 0.8
119 | })
120 | )
121 | }
122 |
123 | if (config.build.bundleAnalyzerReport) {
124 | const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin
125 | webpackConfig.plugins.push(new BundleAnalyzerPlugin())
126 | }
127 |
128 | function getEntry (globPath) {
129 | console.log('globPath ' + JSON.stringify(globPath))
130 | let entries = {},
131 | basename, tmp, pathname
132 | if (typeof (globPath) != "object") {
133 | globPath = [globPath]
134 | }
135 | globPath.forEach((itemPath) => {
136 | glob.sync(itemPath).forEach(function (entry) {
137 | basename = path.basename(entry, path.extname(entry))
138 | if (entry.split('/').length > 4) {
139 | if (entry.split('/').length === 5) {
140 | tmp = entry.split('/').splice(-3)
141 | pathname = tmp.splice(0, 1) + '/' + basename // 正确输出js和html的路径
142 | } else if (entry.split('/').length === 6) {
143 | tmp = entry.split('/').splice(-4)
144 | pathname = tmp[0] + '/' + tmp[1] + '/' + basename // 正确输出js和html的路径
145 | }
146 | entries[pathname] = entry
147 | } else {
148 | entries[basename] = entry
149 | }
150 | })
151 | })
152 | // console.log('entries ' + JSON.stringify(entries))
153 | return entries
154 | }
155 |
156 | console.log('proWebpackConfig ' + JSON.stringify(webpackConfig))
157 | let pages = getEntry(['./src/html/*.html', './src/html/**/*.html', './src/html/**/**/*.html'])
158 |
159 | for (let pathname in pages) {
160 | // 配置生成的html文件,定义路径等
161 | let conf = {
162 | filename: pathname + '.html',
163 | template: pages[pathname], // 模板路径
164 | inject: true, // js插入位置
165 | chunksSortMode: 'dependency'
166 |
167 | }
168 |
169 | if (pathname in webpackConfig.entry) {
170 | conf.chunks = ['manifest', 'vendor', pathname]
171 | conf.hash = true
172 | }
173 |
174 | webpackConfig.plugins.push(new HtmlWebpackPlugin(conf))
175 | }
176 |
177 | module.exports = webpackConfig
178 |
--------------------------------------------------------------------------------
/config/dev.env.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 | const merge = require('webpack-merge')
3 | const prodEnv = require('./prod.env')
4 |
5 | module.exports = merge(prodEnv, {
6 | NODE_ENV: '"development"'
7 | })
8 |
--------------------------------------------------------------------------------
/config/index.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 | // Template version: 1.3.1
3 | // see http://vuejs-templates.github.io/webpack for documentation.
4 |
5 | const path = require('path')
6 |
7 | module.exports = {
8 | dev: {
9 |
10 | // Paths
11 | assetsSubDirectory: 'static',
12 | assetsPublicPath: '/',
13 | proxyTable: {},
14 |
15 | // Various Dev Server settings
16 | host: '0.0.0.0', // can be overwritten by process.env.HOST
17 | port: 8080, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined
18 | autoOpenBrowser: false,
19 | errorOverlay: true,
20 | notifyOnErrors: true,
21 | poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions-
22 |
23 |
24 | /**
25 | * Source Maps
26 | */
27 |
28 | // https://webpack.js.org/configuration/devtool/#development
29 | devtool: 'cheap-module-eval-source-map',
30 |
31 | // If you have problems debugging vue-files in devtools,
32 | // set this to false - it *may* help
33 | // https://vue-loader.vuejs.org/en/options.html#cachebusting
34 | cacheBusting: true,
35 |
36 | cssSourceMap: true
37 | },
38 |
39 | build: {
40 | // Template for index.html
41 | index: path.resolve(__dirname, '../dist/index.html'),
42 |
43 | // Paths
44 | assetsRoot: path.resolve(__dirname, '../dist'),
45 | assetsSubDirectory: 'static',
46 | assetsPublicPath: '../',
47 |
48 | /**
49 | * Source Maps
50 | */
51 |
52 | productionSourceMap: true,
53 | // https://webpack.js.org/configuration/devtool/#production
54 | devtool: '#source-map',
55 |
56 | // Gzip off by default as many popular static hosts such as
57 | // Surge or Netlify already gzip all static assets for you.
58 | // Before setting to `true`, make sure to:
59 | // npm install --save-dev compression-webpack-plugin
60 | productionGzip: false,
61 | productionGzipExtensions: ['js', 'css'],
62 |
63 | // Run the build command with an extra argument to
64 | // View the bundle analyzer report after build finishes:
65 | // `npm run build --report`
66 | // Set to `true` or `false` to always turn it on or off
67 | bundleAnalyzerReport: process.env.npm_config_report
68 | }
69 | }
70 |
--------------------------------------------------------------------------------
/config/prod.env.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 | module.exports = {
3 | NODE_ENV: '"production"'
4 | }
5 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "vue-webapck-cube-hbuilder-multipage",
3 | "version": "1.0.0",
4 | "description": "A Vue.js project",
5 | "author": "ljc_mac_window",
6 | "private": false,
7 | "scripts": {
8 | "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
9 | "start": "npm run dev",
10 | "build": "node build/build.js"
11 | },
12 | "dependencies": {
13 | "axios": "^0.18.0",
14 | "cube-ui": "^1.9.4",
15 | "fastclick": "^1.0.6",
16 | "mint-ui": "^2.2.13",
17 | "vue": "^2.5.2"
18 | },
19 | "compileDependencies": [
20 | "cube-ui"
21 | ],
22 | "transformModules": {
23 | "cube-ui": {
24 | "transform": "cube-ui/src/modules/${member}",
25 | "kebabCase": true
26 | }
27 | },
28 | "devDependencies": {
29 | "autoprefixer": "^7.1.2",
30 | "babel-core": "^6.22.1",
31 | "babel-helper-vue-jsx-merge-props": "^2.0.3",
32 | "babel-loader": "^7.1.1",
33 | "babel-plugin-syntax-jsx": "^6.18.0",
34 | "babel-plugin-transform-runtime": "^6.22.0",
35 | "babel-plugin-transform-vue-jsx": "^3.5.0",
36 | "babel-polyfill": "^6.26.0",
37 | "babel-preset-env": "^1.3.2",
38 | "babel-preset-stage-0": "^6.24.1",
39 | "chalk": "^2.0.1",
40 | "copy-webpack-plugin": "^4.0.1",
41 | "css-loader": "^0.28.0",
42 | "extract-text-webpack-plugin": "^3.0.0",
43 | "file-loader": "^1.1.4",
44 | "friendly-errors-webpack-plugin": "^1.6.1",
45 | "html-webpack-plugin": "^2.30.1",
46 | "node-notifier": "^5.1.2",
47 | "optimize-css-assets-webpack-plugin": "^3.2.0",
48 | "ora": "^1.2.0",
49 | "portfinder": "^1.0.13",
50 | "postcss-import": "^11.0.0",
51 | "postcss-loader": "^2.0.8",
52 | "postcss-url": "^7.2.1",
53 | "rimraf": "^2.6.0",
54 | "semver": "^5.3.0",
55 | "shelljs": "^0.7.6",
56 | "stylus": "^0.54.5",
57 | "stylus-loader": "^3.0.2",
58 | "uglifyjs-webpack-plugin": "^1.1.1",
59 | "url-loader": "^0.5.8",
60 | "vue-loader": "^13.3.0",
61 | "vue-style-loader": "^3.0.1",
62 | "vue-template-compiler": "^2.5.2",
63 | "webpack": "^3.6.0",
64 | "webpack-bundle-analyzer": "^2.9.0",
65 | "webpack-dev-server": "^2.9.1",
66 | "webpack-merge": "^4.1.0",
67 | "webpack-post-compile-plugin": "^0.4.1",
68 | "webpack-transform-modules-plugin": "^0.3.5"
69 | },
70 | "engines": {
71 | "node": ">= 6.0.0",
72 | "npm": ">= 3.0.0"
73 | },
74 | "browserslist": [
75 | "> 1%",
76 | "last 2 versions",
77 | "not ie <= 8"
78 | ]
79 | }
80 |
--------------------------------------------------------------------------------
/src/assets/audio/shake.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wjsljc/vue-webpack-cube-for-hbuilder/df43955bfabcfe56ccbc0e2831b9e649484af73a/src/assets/audio/shake.wav
--------------------------------------------------------------------------------
/src/assets/audio/videoviewdemo.mp4:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wjsljc/vue-webpack-cube-for-hbuilder/df43955bfabcfe56ccbc0e2831b9e649484af73a/src/assets/audio/videoviewdemo.mp4
--------------------------------------------------------------------------------
/src/assets/css/base.styl:
--------------------------------------------------------------------------------
1 | @import "variable.styl"
2 |
3 | body, html
4 | line-height: 1
5 | font-family: 'PingFang SC', 'STHeitiSC-Light', 'Helvetica-Light', arial, sans-serif, 'Droid Sans Fallback'
6 | user-select: none
7 | -webkit-tap-highlight-color: transparent
8 | background: $color-background
9 | color: $color-text
10 |
11 | /*滚动条样式*/
12 | .bscroll-vertical-scrollbar {
13 | width 4px !important
14 | }
15 |
16 | .bscroll-horizontal-scrollbar {
17 | height 4px !important
18 | }
19 |
20 | #__vconsole .vc-switch {
21 | width 15px
22 | height 15px
23 | padding 8px
24 | border-radius 100%
25 | bottom 50%
26 | right 5px
27 | background-color $color-background-w
28 | }
29 |
--------------------------------------------------------------------------------
/src/assets/css/common.styl:
--------------------------------------------------------------------------------
1 | @import "variable.styl"
2 |
3 | .mint-cell-wrapper {
4 | height 50px
5 | }
6 |
7 | /*头部样式*/
8 | .mint-header {
9 | height 50px
10 | h1 {
11 | font-size $font-size-medium-x
12 | }
13 | }
14 |
15 | /*indicator遮罩*/
16 | .mint-indicator-wrapper, .mint-indicator-mask {
17 | z-index 9999999 !important
18 | }
19 |
20 | /*msgbox弹出框字体大小*/
21 | .mint-msgbox-confirm, .mint-msgbox-cancel {
22 | font-size $font-size-medium-x
23 | }
24 |
25 | /*搜索框左边间距*/
26 | .mint-searchbar-core {
27 | padding-left 5px
28 | }
29 |
30 | /*header组件*/
31 | .mint-header.is-fixed {
32 | z-index 201
33 | }
34 |
--------------------------------------------------------------------------------
/src/assets/css/flex.styl:
--------------------------------------------------------------------------------
1 | .flex-1 {
2 | flex: 1;
3 | }
4 |
5 | .flex-2 {
6 | flex: 2;
7 | }
8 |
9 | .flex-3 {
10 | flex: 3;
11 | }
12 |
13 | .flex-4 {
14 | flex: 4;
15 | }
16 |
17 | .flex-5 {
18 | flex: 5;
19 | }
20 |
21 | .flex-6 {
22 | flex: 6;
23 | }
24 |
25 | .flex-7 {
26 | flex: 7;
27 | }
28 |
29 | .flex-8 {
30 | flex: 8;
31 | }
32 |
33 | .flex-9 {
34 | flex: 9;
35 | }
36 |
37 | flex($i)
38 | flex $i
39 |
40 | .flex-middle {
41 | -webkit-align-items: center;
42 | align-items: center;
43 | }
44 |
45 | .flex-center {
46 | -webkit-justify-content: center;
47 | justify-content: center;
48 | }
49 |
50 | .flex-row {
51 | display: -webkit-flex;
52 | display: flex;
53 | flex-direction: row;
54 | }
55 |
56 | .flex-col {
57 | display: -webkit-flex;
58 | display: flex;
59 | flex-direction: column;
60 | }
61 |
62 | .flex-allCenter {
63 | display: -webkit-flex;
64 | display: flex;
65 | -webkit-justify-content: center;
66 | justify-content: center;
67 | -webkit-align-items: center;
68 | align-items: center;
69 | }
70 |
--------------------------------------------------------------------------------
/src/assets/css/iconfont.styl:
--------------------------------------------------------------------------------
1 |
2 | @font-face {font-family: "iconfont";
3 | src: url('../fonts/iconfont.eot?t=1528706240259'); /* IE9*/
4 | src: url('../fonts/iconfont.eot?t=1528706240259#iefix') format('embedded-opentype'), /* IE6-IE8 */
5 | url('data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAAAckAAsAAAAAChgAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAADMAAABCsP6z7U9TLzIAAAE8AAAARAAAAFZW7kpnY21hcAAAAYAAAAB5AAAByJ9Z26JnbHlmAAAB/AAAAv4AAAOMRp3n5mhlYWQAAAT8AAAAMQAAADYRp+9waGhlYQAABTAAAAAeAAAAJAffA4ZobXR4AAAFUAAAABYAAAAYF+n//2xvY2EAAAVoAAAADgAAAA4DUAHYbWF4cAAABXgAAAAfAAAAIAEVAG1uYW1lAAAFmAAAAUUAAAJtPlT+fXBvc3QAAAbgAAAAQwAAAFdYBQPdeJxjYGRgYOBikGPQYWB0cfMJYeBgYGGAAJAMY05meiJQDMoDyrGAaQ4gZoOIAgCKIwNPAHicY2Bk/sM4gYGVgYOpk+kMAwNDP4RmfM1gxMjBwMDEwMrMgBUEpLmmMDgwVLyoZG7438AQw9zA0AAUZgTJAQAtywzreJzFkVEKgzAQRN+6aSlFPIknkZ6nROh5o0fwz84m+uEJnPBCZthlAws8ABejSGA/jNBXqdXcedc8Mcn3vOj0zsXLsGzrvO9Kr+6Uqfo84VzTkrqxJ7fJ7ht9VV/vz+FiD/lAXyzeiN2UoRE1y9aIXa1zg+4PPmwdXwAAAHicPVFdaxtHFJ0zo92VP7TaXe3uaNeWrNmNtXHlLFjWh6G1gkMprUhCjfTSt4iEvEUxNbZpkgc3uKZfhv4Apw+loIcSKPGraQstfchLf0AhddvkpdAfUGhWmbXdDpd7z9yZe++cM0QhZPw7O2ZFUiAXyRJ5k7xLCNQaAp2WIKJGTGtwhOJwW2dRGAktDGK2Ch6otltvNapc1dQ8dJSxLOqtKKYRmo0OfR11twR4M37Pmp+12BeYLEblj5Iu/QrOXDib71xK3lm8bNcrhezOtGV5lvV5VlWULKWZvI473J1QJibV5Gsl7zvHcwt0DtNe5F99L1eZsQYfN4aleT4B7O6iMFPRR5dN35T2wHcLlqcZuWzRz4UXbOw8nyoWpkvVP4lcSurY+/iJZMkEsSTjWclVR1BttOouDzvyzbYaVOf/R3CwuLYo7Y/r5wD3r6F2pSYN26JWk7lKJc0virNwPmf8PdtkayR/qukauZLOoS53Us1WIWVrh80YkQ7NCaUzy+Cig7YZQwrJHdHsALYaiqDaNButtijDMSkplHJZ3Q3cQvBPxPZu3txj0UIbaC/Q4DQmP/eGNLlHh/hSeC+feUJ4NPAE3oIdBrmm6bpm06oH3w5u7VG6d2sgK5ODsw7YlHGeDnuDQW/4cjItxWZRAKKYHEhOkJz+Yj8yVypHEGlokXakEnzw6wD3Gij+wH9JTuAfrSfDz/DNdyufJC+IMh6PDzJgt8kU4aROrpEbslbyk4wleclXArmVIEYhqK7iXJL0S1Yh06kWujyK0Wp3aDWKoakpbrm8LD9O+68oRqO1nF62VXza26B0o9e/S+nd/tYhY4dbp/5vg7Mn+/tPGFzBM7+NRs8UuFN5l1lGuGz4JfsSNzzFMKKrlaXaTP+NpwanH95INXv4mHHG6Ua/n3aWfp0dbm89YuzR1vbhv69xs7t/xNjRfje93B2dZDIno67J8dSucKYtvb3m5iYzsOb8jGbyC3d21qeSY26sDHbPnvL44YrBpcSvAGYipTsAAHicY2BkYGAA4ldSC2vj+W2+MnCzMIDAdZfQAzD6////vSyMzGlALgcDE0gUAE5MDDUAAAB4nGNgZGBgbvjfwBDDwvAfCFgYGYAiKIANAKDFBmwAAHicY2FgYGB+ycDAwoCM//8HABWcAv8AAAAAAAAAdgCqARQBLgHGAAB4nGNgZGBgYGNIZGBlAAEmIOYCQgaG/2A+AwAS2AGDAHicZY9NTsMwEIVf+gekEqqoYIfkBWIBKP0Rq25YVGr3XXTfpk6bKokjx63UA3AejsAJOALcgDvwSCebNpbH37x5Y08A3OAHHo7fLfeRPVwyO3INF7gXrlN/EG6QX4SbaONVuEX9TdjHM6bCbXRheYPXuGL2hHdhDx18CNdwjU/hOvUv4Qb5W7iJO/wKt9Dx6sI+5l5XuI1HL/bHVi+cXqnlQcWhySKTOb+CmV7vkoWt0uqca1vEJlODoF9JU51pW91T7NdD5yIVWZOqCas6SYzKrdnq0AUb5/JRrxeJHoQm5Vhj/rbGAo5xBYUlDowxQhhkiMro6DtVZvSvsUPCXntWPc3ndFsU1P9zhQEC9M9cU7qy0nk6T4E9XxtSdXQrbsuelDSRXs1JErJCXta2VELqATZlV44RelzRiT8oZ0j/AAlabsgAAAB4nGNgYoAALgbsgI2RiZGZkYWRlZGNkZ2BsYI9PTUvPaU0nyU3MzeRPzkxv6o0PzkDKJaen5fOVgkkMkoZGAApqQ41AA==') format('woff'),
6 | url('../fonts/iconfont.ttf?t=1528706240259') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/
7 | url('../fonts/iconfont.svg?t=1528706240259#iconfont') format('svg'); /* iOS 4.1- */
8 | }
9 |
10 | .iconfont {
11 | font-family:"iconfont" !important;
12 | font-size:16px;
13 | font-style:normal;
14 | -webkit-font-smoothing: antialiased;
15 | -moz-osx-font-smoothing: grayscale;
16 | }
17 |
18 | .icon-gengduo:before { content: "\e879"; }
19 |
20 | .icon-mima:before { content: "\e603"; }
21 |
22 | .icon-caozuochenggong:before { content: "\e7f8"; }
23 |
24 | .icon-yonghu:before { content: "\e60e"; }
25 |
26 |
--------------------------------------------------------------------------------
/src/assets/css/index.styl:
--------------------------------------------------------------------------------
1 | @import "./reset.styl"
2 | @import "./base.styl"
3 | @import "./common.styl"
4 | @import "./iconfont.styl"
5 | @import "./variable.styl"
6 |
--------------------------------------------------------------------------------
/src/assets/css/reset.styl:
--------------------------------------------------------------------------------
1 | /**
2 | * Eric Meyer's Reset CSS v2.0 (http://meyerweb.com/eric/tools/css/reset/)
3 | * http://cssreset.com
4 | */
5 | html, body, div, span, applet, object, iframe,
6 | h1, h2, h3, h4, h5, h6, p, blockquote, pre,
7 | a, abbr, acronym, address, big, cite, code,
8 | del, dfn, em, img, ins, kbd, q, s, samp,
9 | small, strike, strong, sub, sup, tt, var,
10 | b, u, i, center,
11 | dl, dt, dd, ol, ul, li,
12 | fieldset, form, label, legend,
13 | table, caption, tbody, tfoot, thead, tr, th, td,
14 | article, aside, canvas, details, embed,
15 | figure, figcaption, footer, header,
16 | menu, nav, output, ruby, section, summary,
17 | time, mark, audio, video, input
18 | margin: 0
19 | padding: 0
20 | border: 0
21 | font-size: 100%
22 | font-weight: normal
23 | vertical-align: baseline
24 |
25 | /* HTML5 display-role reset for older browsers */
26 | article, aside, details, figcaption, figure,
27 | footer, header, menu, nav, section
28 | display: block
29 |
30 | body
31 | line-height: 1
32 |
33 | blockquote, q
34 | quotes: none
35 |
36 | blockquote:before, blockquote:after,
37 | q:before, q:after
38 | content: none
39 |
40 | table
41 | border-collapse: collapse
42 | border-spacing: 0
43 |
44 | /* custom */
45 |
46 | a
47 | color: #7e8c8d
48 | -webkit-backface-visibility: hidden
49 | text-decoration: none
50 |
51 | li
52 | list-style: none
53 |
54 | body
55 | -webkit-text-size-adjust: none
56 | -webkit-tap-highlight-color: rgba(0, 0, 0, 0)
57 |
--------------------------------------------------------------------------------
/src/assets/css/transition.styl:
--------------------------------------------------------------------------------
1 | .slide-enter-active, .slide-leave-active
2 | transition: all .3s
3 |
4 | .slide-enter, .slide-leave-to
5 | transform: translate3d(100%, 0, 0)
6 |
--------------------------------------------------------------------------------
/src/assets/css/variable.styl:
--------------------------------------------------------------------------------
1 | // 颜色定义规范
2 | $color-background = #222
3 | $color-background-d = rgba(0, 0, 0, 0.3)
4 | $color-highlight-background = #333
5 | $color-dialog-background = #666
6 | $color-theme = #ffcd32
7 | $color-theme-d = rgba(255, 205, 49, 0.5)
8 | $color-sub-theme = #d93f30
9 | $color-text = #fff
10 | $color-text-d = rgba(255, 255, 255, 0.3)
11 | $color-text-l = rgba(255, 255, 255, 0.5)
12 | $color-text-ll = rgba(255, 255, 255, 0.8)
13 |
14 | //字体定义规范
15 | $font-size-small-s = 10px
16 | $font-size-small = 12px
17 | $font-size-medium = 14px
18 | $font-size-medium-x = 16px
19 | $font-size-large = 18px
20 | $font-size-large-x = 22px
21 |
--------------------------------------------------------------------------------
/src/assets/fonts/iconfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wjsljc/vue-webpack-cube-for-hbuilder/df43955bfabcfe56ccbc0e2831b9e649484af73a/src/assets/fonts/iconfont.eot
--------------------------------------------------------------------------------
/src/assets/fonts/iconfont.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
46 |
--------------------------------------------------------------------------------
/src/assets/fonts/iconfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wjsljc/vue-webpack-cube-for-hbuilder/df43955bfabcfe56ccbc0e2831b9e649484af73a/src/assets/fonts/iconfont.ttf
--------------------------------------------------------------------------------
/src/assets/fonts/iconfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wjsljc/vue-webpack-cube-for-hbuilder/df43955bfabcfe56ccbc0e2831b9e649484af73a/src/assets/fonts/iconfont.woff
--------------------------------------------------------------------------------
/src/assets/img/weixin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wjsljc/vue-webpack-cube-for-hbuilder/df43955bfabcfe56ccbc0e2831b9e649484af73a/src/assets/img/weixin.png
--------------------------------------------------------------------------------
/src/assets/img/zhifubao.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wjsljc/vue-webpack-cube-for-hbuilder/df43955bfabcfe56ccbc0e2831b9e649484af73a/src/assets/img/zhifubao.png
--------------------------------------------------------------------------------
/src/assets/js/mixins.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import {} from 'assets/js/utils'
3 | import { plusReady } from 'assets/js/plusReady'
4 | import BaseRow from 'components/baseRow/BaseRow'
5 | import 'assets/css/index.styl'
6 | import {
7 | /* eslint-disable no-unused-vars */
8 | Style,
9 | Scroll
10 | } from 'cube-ui'
11 |
12 | Vue.use(Scroll)
13 |
14 | export const webviewMixin = {
15 | components: {
16 | BaseRow
17 | },
18 | data () {
19 | return {
20 | scrollConf: {
21 | options: {
22 | stopPropagation: true,
23 | scrollbar: {
24 | fade: true
25 | }
26 | }
27 | }
28 | }
29 | },
30 | created () {
31 | plusReady(() => {
32 | plus.key.addEventListener('backbutton', function () {
33 | let currentView = plus.webview.currentWebview()
34 | currentView.close()
35 | })
36 | })
37 | plusReady(this.plusReady)
38 | },
39 | methods: {
40 | plusReady () {
41 |
42 | }
43 | }
44 | }
45 |
46 | export const indexMixin = {
47 | data () {
48 | return {
49 | scrollConf: {
50 | options: {
51 | stopPropagation: true,
52 | scrollbar: {
53 | fade: true
54 | }
55 | }
56 | }
57 | }
58 | },
59 | created () {
60 | plusReady(() => {
61 | let self = this
62 | plus.key.addEventListener('backbutton', function () {
63 | self.$createDialog({
64 | type: 'confirm',
65 | icon: 'cubeic-alert',
66 | title: '温馨提示',
67 | content: '您正在退出APP',
68 | confirmBtn: {
69 | text: '残忍退出',
70 | active: true,
71 | disabled: false,
72 | href: 'javascript:;'
73 | },
74 | cancelBtn: {
75 | text: '返回',
76 | active: false,
77 | disabled: false,
78 | href: 'javascript:;'
79 | },
80 | onConfirm: () => {
81 | let currentView = plus.webview.currentWebview()
82 | currentView.close()
83 | },
84 | onCancel: () => {
85 | self.$createToast({
86 | type: 'correct',
87 | time: 1000,
88 | txt: '欢迎回来'
89 | }).show()
90 | }
91 | }).show()
92 | })
93 | })
94 | plusReady(this.plusReady)
95 | },
96 | methods: {
97 | plusReady () {
98 |
99 | }
100 | }
101 | }
102 |
--------------------------------------------------------------------------------
/src/assets/js/plusReady.js:
--------------------------------------------------------------------------------
1 | export const plusReady = (fn) => {
2 | if (window.plus) {
3 | setTimeout(fn, 0)
4 | } else {
5 | document.addEventListener("plusready", fn, false)
6 | }
7 | }
8 |
9 |
10 | /*重写返回按钮事件*/
11 | plusReady(() => {
12 |
13 | })
14 |
--------------------------------------------------------------------------------
/src/assets/js/storageConst.js:
--------------------------------------------------------------------------------
1 | export const SLIDER_FLAG = '_slider_flag_' // 索引页存储标识
2 | export const LOGIN_FLAG = '_login_flag_' // 登陆标识
3 | export const AD_FLAG = '_AD_flag_' // 广告显示标识
4 | export const INDEX_ACTIVETAB = '_index_activeTab_' // 首页tab活跃标识
5 |
--------------------------------------------------------------------------------
/src/assets/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wjsljc/vue-webpack-cube-for-hbuilder/df43955bfabcfe56ccbc0e2831b9e649484af73a/src/assets/logo.png
--------------------------------------------------------------------------------
/src/components/baseRow/BaseRow.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | {{title}}
6 |
7 |
8 |
9 |
10 |
11 |
12 |
22 |
23 |
40 |
--------------------------------------------------------------------------------
/src/components/cell/Cell.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
{{title}}
5 |
{{desc}}
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
28 |
29 |
59 |
--------------------------------------------------------------------------------
/src/components/header/Header.vue:
--------------------------------------------------------------------------------
1 |
2 |
11 |
12 |
13 |
28 |
29 |
54 |
--------------------------------------------------------------------------------
/src/components/indexList/IndexList.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
8 |
11 |
12 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
89 |
90 |
132 |
--------------------------------------------------------------------------------
/src/components/indexTab/IndexMine.vue:
--------------------------------------------------------------------------------
1 |
2 |
63 |
64 |
65 |
119 |
120 |
174 |
--------------------------------------------------------------------------------
/src/components/indexTab/IndexPlus.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 |
15 |
16 |
17 |
18 |
19 |
49 |
50 |
55 |
--------------------------------------------------------------------------------
/src/components/indexTab/IndexUi.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
33 | |
35 | |
36 |
37 |
38 |
39 |
40 |
41 |
83 |
84 |
92 |
--------------------------------------------------------------------------------
/src/html/advertisement/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 关闭
5 |
这里是广告位
6 |
7 |
8 |
9 |
10 |
26 |
27 |
59 |
--------------------------------------------------------------------------------
/src/html/advertisement/advertisement.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/src/html/advertisement/advertisement.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import App from './App'
3 | import 'assets/css/index.styl'
4 | import {
5 | /* eslint-disable no-unused-vars */
6 | Style,
7 | Dialog,
8 | Button
9 | } from 'cube-ui'
10 |
11 | Vue.use(Dialog)
12 | Vue.use(Button)
13 |
14 | new Vue({
15 | el: '#app',
16 | template: '',
17 | components: {App}
18 | })
19 |
--------------------------------------------------------------------------------
/src/html/index/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/src/html/index/index.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import App from './App'
3 | import fastclick from 'fastclick'
4 | import 'assets/css/index.styl'
5 | import {
6 | /* eslint-disable no-unused-vars */
7 | Style,
8 | Button,
9 | Loading,
10 | Tip,
11 | Popup,
12 | Toast,
13 | Picker,
14 | Slide,
15 | Dialog
16 | } from 'cube-ui'
17 |
18 | Vue.use(Button)
19 | Vue.use(Loading)
20 | Vue.use(Tip)
21 | Vue.use(Popup)
22 | Vue.use(Toast)
23 | Vue.use(Picker)
24 | Vue.use(Slide)
25 | Vue.use(Dialog)
26 |
27 | /* 整个body下面的点击都没有300ms的延时 */
28 | fastclick.attach(document.body)
29 |
30 | new Vue({
31 | el: '#app',
32 | template: '',
33 | components: {App}
34 | })
35 |
--------------------------------------------------------------------------------
/src/html/login/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
hbuilder+vue+cube+webpack开发
5 |
欢迎您
6 |
7 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
70 |
148 |
--------------------------------------------------------------------------------
/src/html/login/login.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/src/html/login/login.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import App from './App'
3 | import 'assets/css/index.styl'
4 | import {
5 | /* eslint-disable no-unused-vars */
6 | Style,
7 | Dialog,
8 | Button
9 | } from 'cube-ui'
10 |
11 | Vue.use(Dialog)
12 | Vue.use(Button)
13 |
14 | new Vue({
15 | el: '#app',
16 | template: '',
17 | components: {App}
18 | })
19 |
--------------------------------------------------------------------------------
/src/html/plus/accelerometer/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
16 |
17 |
18 |
102 |
103 |
125 |
--------------------------------------------------------------------------------
/src/html/plus/accelerometer/accelerometer.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Accelerometer
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/src/html/plus/accelerometer/accelerometer.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import App from './App'
3 | import 'assets/css/index.styl'
4 | import {
5 | /* eslint-disable no-unused-vars */
6 | Style,
7 | Button,
8 | Toast
9 | } from 'cube-ui'
10 |
11 | Vue.use(Button)
12 | Vue.use(Toast)
13 |
14 | new Vue({
15 | el: '#app',
16 | template: '',
17 | components: {App}
18 | })
19 |
--------------------------------------------------------------------------------
/src/html/plus/camera/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
16 |
17 |
18 |
147 |
148 |
168 |
--------------------------------------------------------------------------------
/src/html/plus/camera/camera.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Camera
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/src/html/plus/camera/camera.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import App from './App'
3 | import 'assets/css/index.styl'
4 | import {
5 | /* eslint-disable no-unused-vars */
6 | Style,
7 | Button,
8 | Toast,
9 | ActionSheet
10 | } from 'cube-ui'
11 |
12 | Vue.use(Button)
13 | Vue.use(Toast)
14 | Vue.use(ActionSheet)
15 |
16 | new Vue({
17 | el: '#app',
18 | template: '',
19 | components: {App}
20 | })
21 |
--------------------------------------------------------------------------------
/src/html/plus/geolocation/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
14 |
15 |
16 |
56 |
57 |
74 |
--------------------------------------------------------------------------------
/src/html/plus/geolocation/geolocation.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Geolocation
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/src/html/plus/geolocation/geolocation.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import App from './App'
3 | import 'assets/css/index.styl'
4 | import {
5 | /* eslint-disable no-unused-vars */
6 | Style,
7 | Button,
8 | Toast
9 | } from 'cube-ui'
10 |
11 | Vue.use(Button)
12 | Vue.use(Toast)
13 |
14 | new Vue({
15 | el: '#app',
16 | template: '',
17 | components: {App}
18 | })
19 |
--------------------------------------------------------------------------------
/src/html/plus/header/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
19 |
20 |
21 |
106 |
107 |
138 |
--------------------------------------------------------------------------------
/src/html/plus/header/header.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Header的综合应用
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/src/html/plus/header/header.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import App from './App'
3 | import 'assets/css/index.styl'
4 | import {
5 | /* eslint-disable no-unused-vars */
6 | Style,
7 | Button,
8 | Toast,
9 | ActionSheet
10 | } from 'cube-ui'
11 |
12 | Vue.use(Button)
13 | Vue.use(Toast)
14 | Vue.use(ActionSheet)
15 |
16 | new Vue({
17 | el: '#app',
18 | template: '',
19 | components: {App}
20 | })
21 |
--------------------------------------------------------------------------------
/src/html/plus/resumeCallback/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 |
8 | 123
9 |
10 |
11 |
12 |
13 |
14 |
15 |
51 |
52 |
69 |
--------------------------------------------------------------------------------
/src/html/plus/resumeCallback/resumeCallback.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ResumeCallback
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/src/html/plus/resumeCallback/resumeCallback.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import App from './App'
3 | import 'assets/css/index.styl'
4 | import {
5 | /* eslint-disable no-unused-vars */
6 | Style,
7 | Button,
8 | Toast
9 | } from 'cube-ui'
10 |
11 | Vue.use(Button)
12 | Vue.use(Toast)
13 |
14 | new Vue({
15 | el: '#app',
16 | template: '',
17 | components: {App}
18 | })
19 |
--------------------------------------------------------------------------------
/src/html/plus/webview1/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 |
8 | 点击跳转下一个页面
9 |
10 |
11 |
12 |
13 |
14 |
15 |
34 |
35 |
52 |
--------------------------------------------------------------------------------
/src/html/plus/webview1/webview1.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Webview页面连跳
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/src/html/plus/webview1/webview1.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import App from './App'
3 | import 'assets/css/index.styl'
4 | import {
5 | /* eslint-disable no-unused-vars */
6 | Style,
7 | Button,
8 | Toast
9 | } from 'cube-ui'
10 |
11 | Vue.use(Button)
12 | Vue.use(Toast)
13 |
14 | new Vue({
15 | el: '#app',
16 | template: '',
17 | components: {App}
18 | })
19 |
--------------------------------------------------------------------------------
/src/html/plus/webview2/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 |
8 | 点击返回首页
9 |
10 |
11 |
12 |
13 |
14 |
15 |
31 |
32 |
49 |
--------------------------------------------------------------------------------
/src/html/plus/webview2/webview2.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Webview页面连跳
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/src/html/plus/webview2/webview2.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import App from './App'
3 | import 'assets/css/index.styl'
4 | import {
5 | /* eslint-disable no-unused-vars */
6 | Style,
7 | Button,
8 | Toast
9 | } from 'cube-ui'
10 |
11 | Vue.use(Button)
12 | Vue.use(Toast)
13 |
14 | new Vue({
15 | el: '#app',
16 | template: '',
17 | components: {App}
18 | })
19 |
--------------------------------------------------------------------------------
/src/html/slider/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 |
8 |
欢迎使用vue-webpack-mint
9 | for hbuilder
10 |
11 |
12 |
13 |
14 |
制作
15 | By LJC
16 |
17 |
18 |
19 |
20 | 开启新的体验
21 |
22 |
23 |
24 |
25 |
26 |
27 |
64 |
65 |
107 |
--------------------------------------------------------------------------------
/src/html/slider/slider.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/src/html/slider/slider.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import App from './App'
3 | import 'assets/css/index.styl'
4 | import {
5 | /* eslint-disable no-unused-vars */
6 | Style,
7 | Slide,
8 | Button
9 | } from 'cube-ui'
10 |
11 | Vue.use(Slide)
12 | Vue.use(Button)
13 |
14 | new Vue({
15 | el: '#app',
16 | template: '',
17 | components: {App}
18 | })
19 |
--------------------------------------------------------------------------------
/src/html/ui/actionSheet/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 |
8 | 操作列表
9 | 高亮显示
10 | 样式设定
11 |
12 |
13 |
14 |
15 |
16 |
17 |
120 |
121 |
137 |
--------------------------------------------------------------------------------
/src/html/ui/actionSheet/actionSheet.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ActionSheet
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/src/html/ui/actionSheet/actionSheet.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import App from './App'
3 | import 'assets/css/index.styl'
4 | import {
5 | /* eslint-disable no-unused-vars */
6 | Style,
7 | ActionSheet,
8 | Button,
9 | Toast
10 | } from 'cube-ui'
11 |
12 | Vue.use(ActionSheet)
13 | Vue.use(Button)
14 | Vue.use(Toast)
15 |
16 | new Vue({
17 | el: '#app',
18 | template: '',
19 | components: {App}
20 | })
21 |
--------------------------------------------------------------------------------
/src/html/ui/button/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
19 |
20 |
21 |
43 |
44 |
62 |
--------------------------------------------------------------------------------
/src/html/ui/button/button.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Button
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/src/html/ui/button/button.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import App from './App'
3 | import 'assets/css/index.styl'
4 | import {
5 | /* eslint-disable no-unused-vars */
6 | Style,
7 | Button,
8 | } from 'cube-ui'
9 |
10 | Vue.use(Button)
11 |
12 | new Vue({
13 | el: '#app',
14 | template: '',
15 | components: {App}
16 | })
17 |
--------------------------------------------------------------------------------
/src/html/ui/checkbox/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
78 |
79 |
80 |
189 |
190 |
235 |
--------------------------------------------------------------------------------
/src/html/ui/checkbox/checkbox.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Checkbox
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/src/html/ui/checkbox/checkbox.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import App from './App'
3 | import 'assets/css/index.styl'
4 | import {
5 | /* eslint-disable no-unused-vars */
6 | Style,
7 | Checkbox,
8 | CheckboxGroup
9 | } from 'cube-ui'
10 |
11 | Vue.use(Checkbox)
12 | Vue.use(CheckboxGroup)
13 |
14 | new Vue({
15 | el: '#app',
16 | template: '',
17 | components: {App}
18 | })
19 |
--------------------------------------------------------------------------------
/src/html/ui/dialog/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 |
8 | alert
9 | confirm
10 | button
11 | configure
12 | slot
13 |
14 |
15 |
16 |
17 |
18 |
19 |
125 |
126 |
153 |
--------------------------------------------------------------------------------
/src/html/ui/dialog/dialog.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Loading
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/src/html/ui/dialog/dialog.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import App from './App'
3 | import 'assets/css/index.styl'
4 | import {
5 | /* eslint-disable no-unused-vars */
6 | Style,
7 | Dialog,
8 | Button,
9 | Toast,
10 | } from 'cube-ui'
11 |
12 | Vue.use(Dialog)
13 | Vue.use(Button)
14 | Vue.use(Toast)
15 |
16 | new Vue({
17 | el: '#app',
18 | template: '',
19 | components: {App}
20 | })
21 |
--------------------------------------------------------------------------------
/src/html/ui/drawer/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 |
8 | Show Drawer
9 |
10 |
11 | Show Drawer
12 |
13 |
14 |
15 |
24 |
25 |
32 | {{province.text}}
33 |
39 |
40 |
41 | {{item.text}}
42 |
43 |
44 |
45 |
46 |
47 |
48 |
128 |
129 |
147 |
--------------------------------------------------------------------------------
/src/html/ui/drawer/drawer.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Drawer
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/src/html/ui/drawer/drawer.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import App from './App'
3 | import 'assets/css/index.styl'
4 | import {
5 | /* eslint-disable no-unused-vars */
6 | Style,
7 | Drawer,
8 | Button,
9 | Toast,
10 | Dialog,
11 | } from 'cube-ui'
12 |
13 | Vue.use(Drawer)
14 | Vue.use(Button)
15 | Vue.use(Toast)
16 | Vue.use(Dialog)
17 |
18 | new Vue({
19 | el: '#app',
20 | template: '',
21 | components: {App}
22 | })
23 |
--------------------------------------------------------------------------------
/src/html/ui/form/form.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Form
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/src/html/ui/form/form.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import App from './App'
3 | import 'assets/css/index.styl'
4 | import {
5 | /* eslint-disable no-unused-vars */
6 | Style,
7 | Form,
8 | Picker,
9 | Button,
10 | Toast,
11 | Switch,
12 | DatePicker
13 | } from 'cube-ui'
14 |
15 | Vue.use(Form)
16 | Vue.use(Picker)
17 | Vue.use(Button)
18 | Vue.use(Toast)
19 | Vue.use(Switch)
20 | Vue.use(DatePicker)
21 |
22 | new Vue({
23 | el: '#app',
24 | template: '',
25 | components: {App}
26 | })
27 |
--------------------------------------------------------------------------------
/src/html/ui/indexList/indexList.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | IndexList
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/src/html/ui/indexList/indexList.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import App from './App'
3 | import 'assets/css/index.styl'
4 | import {
5 | /* eslint-disable no-unused-vars */
6 | Style,
7 | IndexList,
8 | Button,
9 | Dialog,
10 | Checkbox,
11 | CheckboxGroup,
12 | Toast,
13 | } from 'cube-ui'
14 |
15 | Vue.use(IndexList)
16 | Vue.use(Button)
17 | Vue.use(Dialog)
18 | Vue.use(Checkbox)
19 | Vue.use(CheckboxGroup)
20 | Vue.use(Toast)
21 |
22 | new Vue({
23 | el: '#app',
24 | template: '',
25 | components: {App}
26 | })
27 |
--------------------------------------------------------------------------------
/src/html/ui/input/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
65 |
66 |
67 |
114 |
115 |
135 |
--------------------------------------------------------------------------------
/src/html/ui/input/input.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Input
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/src/html/ui/input/input.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import App from './App'
3 | import 'assets/css/index.styl'
4 | import {
5 | /* eslint-disable no-unused-vars */
6 | Style,
7 | Input,
8 | Switch
9 | } from 'cube-ui'
10 |
11 | Vue.use(Input)
12 | Vue.use(Switch)
13 |
14 |
15 | new Vue({
16 | el: '#app',
17 | template: '',
18 | components: {App}
19 | })
20 |
--------------------------------------------------------------------------------
/src/html/ui/loading/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
28 |
29 |
47 |
--------------------------------------------------------------------------------
/src/html/ui/loading/loading.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Loading
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/src/html/ui/loading/loading.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import App from './App'
3 | import 'assets/css/index.styl'
4 | import {
5 | /* eslint-disable no-unused-vars */
6 | Style,
7 | Loading,
8 | } from 'cube-ui'
9 |
10 | Vue.use(Loading)
11 |
12 | new Vue({
13 | el: '#app',
14 | template: '',
15 | components: {App}
16 | })
17 |
--------------------------------------------------------------------------------
/src/html/ui/picker/picker.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Picker
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/src/html/ui/picker/picker.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import App from './App'
3 | import 'assets/css/index.styl'
4 | import {
5 | /* eslint-disable no-unused-vars */
6 | Style,
7 | Button,
8 | Picker,
9 | CascadePicker,
10 | DatePicker,
11 | TimePicker,
12 | SegmentPicker,
13 | Toast,
14 | Dialog
15 | } from 'cube-ui'
16 |
17 | Vue.use(Button)
18 | Vue.use(Picker)
19 | Vue.use(CascadePicker)
20 | Vue.use(Toast)
21 | Vue.use(Dialog)
22 | Vue.use(DatePicker)
23 | Vue.use(TimePicker)
24 | Vue.use(SegmentPicker)
25 |
26 | new Vue({
27 | el: '#app',
28 | template: '',
29 | components: {App}
30 | })
31 |
--------------------------------------------------------------------------------
/src/html/ui/popup/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
26 |
27 |
28 |
84 |
85 |
109 |
--------------------------------------------------------------------------------
/src/html/ui/popup/popup.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Popup
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/src/html/ui/popup/popup.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import App from './App'
3 | import 'assets/css/index.styl'
4 | import {
5 | /* eslint-disable no-unused-vars */
6 | Style,
7 | Popup,
8 | Button
9 | } from 'cube-ui'
10 |
11 | Vue.use(Popup)
12 | Vue.use(Button)
13 |
14 | new Vue({
15 | el: '#app',
16 | template: '',
17 | components: {App}
18 | })
19 |
--------------------------------------------------------------------------------
/src/html/ui/radio/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
47 |
48 |
49 |
127 |
128 |
163 |
--------------------------------------------------------------------------------
/src/html/ui/radio/radio.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Radio
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/src/html/ui/radio/radio.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import App from './App'
3 | import 'assets/css/index.styl'
4 | import {
5 | /* eslint-disable no-unused-vars */
6 | Style,
7 | Radio,
8 | } from 'cube-ui'
9 |
10 | Vue.use(Radio)
11 |
12 | new Vue({
13 | el: '#app',
14 | template: '',
15 | components: {App}
16 | })
17 |
--------------------------------------------------------------------------------
/src/html/ui/rate/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
44 |
45 |
46 |
71 |
72 |
108 |
--------------------------------------------------------------------------------
/src/html/ui/rate/rate.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Rate
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/src/html/ui/rate/rate.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import App from './App'
3 | import 'assets/css/index.styl'
4 | import {
5 | /* eslint-disable no-unused-vars */
6 | Style,
7 | Switch,
8 | Rate
9 | } from 'cube-ui'
10 |
11 | Vue.use(Switch)
12 | Vue.use(Rate)
13 |
14 | new Vue({
15 | el: '#app',
16 | template: '',
17 | components: {App}
18 | })
19 |
--------------------------------------------------------------------------------
/src/html/ui/scroll/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
39 |
40 |
41 |
42 |
43 |
126 |
127 |
181 |
--------------------------------------------------------------------------------
/src/html/ui/scroll/scroll.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Scroll
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/src/html/ui/scroll/scroll.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import App from './App'
3 | import 'assets/css/index.styl'
4 | import {
5 | /* eslint-disable no-unused-vars */
6 | Style,
7 | Scroll,
8 | Button
9 | } from 'cube-ui'
10 |
11 | Vue.use(Scroll)
12 | Vue.use(Button)
13 |
14 | new Vue({
15 | el: '#app',
16 | template: '',
17 | components: {App}
18 | })
19 |
--------------------------------------------------------------------------------
/src/html/ui/select/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
35 |
36 |
37 |
106 |
107 |
131 |
--------------------------------------------------------------------------------
/src/html/ui/select/select.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Select
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/src/html/ui/select/select.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import App from './App'
3 | import 'assets/css/index.styl'
4 | import {
5 | /* eslint-disable no-unused-vars */
6 | Style,
7 | Select,
8 | Switch,
9 | Toast
10 | } from 'cube-ui'
11 |
12 | Vue.use(Select)
13 | Vue.use(Switch)
14 | Vue.use(Toast)
15 |
16 | new Vue({
17 | el: '#app',
18 | template: '',
19 | components: {App}
20 | })
21 |
--------------------------------------------------------------------------------
/src/html/ui/slide/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
46 |
47 |
48 |
96 |
97 |
114 |
--------------------------------------------------------------------------------
/src/html/ui/slide/slide.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Slide
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/src/html/ui/slide/slide.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import App from './App'
3 | import 'assets/css/index.styl'
4 | import {
5 | /* eslint-disable no-unused-vars */
6 | Style,
7 | Slide,
8 | } from 'cube-ui'
9 |
10 | Vue.use(Slide)
11 |
12 | new Vue({
13 | el: '#app',
14 | template: '',
15 | components: {App}
16 | })
17 |
--------------------------------------------------------------------------------
/src/html/ui/swipe/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
41 |
42 |
43 |
218 |
219 |
245 |
--------------------------------------------------------------------------------
/src/html/ui/swipe/swipe.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Swipe
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/src/html/ui/swipe/swipe.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import App from './App'
3 | import 'assets/css/index.styl'
4 | import {
5 | /* eslint-disable no-unused-vars */
6 | Style,
7 | Swipe,
8 | ActionSheet,
9 | } from 'cube-ui'
10 |
11 | Vue.use(Swipe)
12 | Vue.use(ActionSheet)
13 |
14 | new Vue({
15 | el: '#app',
16 | template: '',
17 | components: {App}
18 | })
19 |
--------------------------------------------------------------------------------
/src/html/ui/switch/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 |
8 |
9 | Switch
10 |
11 |
12 |
13 |
16 | 无法取消
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
44 |
45 |
59 |
--------------------------------------------------------------------------------
/src/html/ui/switch/switch.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Switch
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/src/html/ui/switch/switch.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import App from './App'
3 | import 'assets/css/index.styl'
4 | import {
5 | /* eslint-disable no-unused-vars */
6 | Style,
7 | Switch,
8 | } from 'cube-ui'
9 |
10 | Vue.use(Switch)
11 |
12 | new Vue({
13 | el: '#app',
14 | template: '',
15 | components: {App}
16 | })
17 |
--------------------------------------------------------------------------------
/src/html/ui/textarea/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
43 |
44 |
45 |
90 |
91 |
111 |
--------------------------------------------------------------------------------
/src/html/ui/textarea/textarea.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Textarea
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/src/html/ui/textarea/textarea.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import App from './App'
3 | import 'assets/css/index.styl'
4 | import {
5 | /* eslint-disable no-unused-vars */
6 | Style,
7 | Textarea,
8 | Switch,
9 | Toast
10 | } from 'cube-ui'
11 |
12 | Vue.use(Textarea)
13 | Vue.use(Switch)
14 | Vue.use(Toast)
15 |
16 | new Vue({
17 | el: '#app',
18 | template: '',
19 | components: {App}
20 | })
21 |
--------------------------------------------------------------------------------
/src/html/ui/tip/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
49 |
50 |
51 |
101 |
102 |
130 |
--------------------------------------------------------------------------------
/src/html/ui/tip/tip.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Tip
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/src/html/ui/tip/tip.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import App from './App'
3 | import 'assets/css/index.styl'
4 | import {
5 | /* eslint-disable no-unused-vars */
6 | Style,
7 | Button,
8 | Tip,
9 | } from 'cube-ui'
10 |
11 | Vue.use(Button)
12 | Vue.use(Tip)
13 |
14 | new Vue({
15 | el: '#app',
16 | template: '',
17 | components: {App}
18 | })
19 |
--------------------------------------------------------------------------------
/src/html/ui/toast/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 |
8 | 显示1s
9 | 没有遮罩
10 | loading
11 | correct
12 | error
13 | warn
14 |
15 |
16 | 事件回调
17 | 点击消失
18 |
19 |
20 |
21 |
我知道了
22 |
23 |
24 |
25 |
119 |
120 |
147 |
--------------------------------------------------------------------------------
/src/html/ui/toast/toast.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Toast
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/src/html/ui/toast/toast.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import App from './App'
3 | import 'assets/css/index.styl'
4 | import {
5 | /* eslint-disable no-unused-vars */
6 | Style,
7 | Toast,
8 | Button
9 | } from 'cube-ui'
10 |
11 | Vue.use(Toast)
12 | Vue.use(Button)
13 |
14 | new Vue({
15 | el: '#app',
16 | template: '',
17 | components: {App}
18 | })
19 |
--------------------------------------------------------------------------------
/src/html/ui/toolbar/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
31 |
32 |
33 |
94 |
95 |
120 |
--------------------------------------------------------------------------------
/src/html/ui/toolbar/toolbar.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Toolbar
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/src/html/ui/toolbar/toolbar.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import App from './App'
3 | import 'assets/css/index.styl'
4 | import {
5 | /* eslint-disable no-unused-vars */
6 | Style,
7 | Toolbar,
8 | Toast,
9 | } from 'cube-ui'
10 |
11 | Vue.use(Toolbar)
12 | Vue.use(Toast)
13 |
14 | new Vue({
15 | el: '#app',
16 | template: '',
17 | components: {App}
18 | })
19 |
--------------------------------------------------------------------------------
/src/html/ui/upload/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
68 |
69 |
70 |
193 |
194 |
262 |
--------------------------------------------------------------------------------
/src/html/ui/upload/upload.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Upload
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/src/html/ui/upload/upload.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import App from './App'
3 | import 'assets/css/index.styl'
4 | import {
5 | /* eslint-disable no-unused-vars */
6 | Style,
7 | Upload,
8 | Toast,
9 | Button
10 | } from 'cube-ui'
11 |
12 | Vue.use(Upload)
13 | Vue.use(Button)
14 | Vue.use(Toast)
15 |
16 | new Vue({
17 | el: '#app',
18 | template: '',
19 | components: {App}
20 | })
21 |
--------------------------------------------------------------------------------
/src/html/ui/validator/validator.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Validator
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/src/html/ui/validator/validator.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import App from './App'
3 | import 'assets/css/index.styl'
4 | import {
5 | /* eslint-disable no-unused-vars */
6 | Style,
7 | Input,
8 | Rate,
9 | Radio,
10 | Validator,
11 | Button,
12 | Switch,
13 | Select
14 | } from 'cube-ui'
15 |
16 | Vue.use(Input)
17 | Vue.use(Rate)
18 | Vue.use(Radio)
19 | Vue.use(Validator)
20 | Vue.use(Button)
21 | Vue.use(Switch)
22 | Vue.use(Select)
23 |
24 | new Vue({
25 | el: '#app',
26 | template: '',
27 | components: {App}
28 | })
29 |
--------------------------------------------------------------------------------
/static/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wjsljc/vue-webpack-cube-for-hbuilder/df43955bfabcfe56ccbc0e2831b9e649484af73a/static/.gitkeep
--------------------------------------------------------------------------------
/static/QR/weixin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wjsljc/vue-webpack-cube-for-hbuilder/df43955bfabcfe56ccbc0e2831b9e649484af73a/static/QR/weixin.png
--------------------------------------------------------------------------------
/static/QR/zhifubao.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wjsljc/vue-webpack-cube-for-hbuilder/df43955bfabcfe56ccbc0e2831b9e649484af73a/static/QR/zhifubao.png
--------------------------------------------------------------------------------
/static/icon/more.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wjsljc/vue-webpack-cube-for-hbuilder/df43955bfabcfe56ccbc0e2831b9e649484af73a/static/icon/more.png
--------------------------------------------------------------------------------
/static/media/shake.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wjsljc/vue-webpack-cube-for-hbuilder/df43955bfabcfe56ccbc0e2831b9e649484af73a/static/media/shake.wav
--------------------------------------------------------------------------------
/static/mock/indexList.js:
--------------------------------------------------------------------------------
1 | export const cityData = [
2 | {
3 | "name": "★Hot City",
4 | "items": [
5 | {
6 | "name": "北京",
7 | "value": 3,
8 | "checked": false
9 | },
10 | {
11 | "name": "成都",
12 | "value": 2,
13 | "checked": false
14 | }
15 | ]
16 | },
17 | {
18 | "name": "A",
19 | "items": [
20 | {
21 | "name": "鞍山",
22 | "value": 1,
23 | "checked": false
24 | },
25 | {
26 | "name": "安庆",
27 | "value": 2,
28 | "checked": false
29 | }
30 | ]
31 | },
32 | {
33 | "name": "B",
34 | "items": [
35 | {
36 | "name": "北京",
37 | "value": 3,
38 | "checked": false
39 | },
40 | {
41 | "name": "北海",
42 | "value": 4,
43 | "checked": false
44 | }
45 | ]
46 | },
47 | {
48 | "name": "C",
49 | "items": [
50 | {
51 | "name": "成都",
52 | "value": 5,
53 | "checked": false
54 | }
55 | ]
56 | },
57 | {
58 | "name": "F",
59 | "items": [
60 | {
61 | "name": "福建",
62 | "value": 6,
63 | "checked": false
64 | }
65 | ]
66 | },
67 | {
68 | "name": "Y",
69 | "items": [
70 | {
71 | "name": "雅安",
72 | "value": 7,
73 | "checked": false
74 | },
75 | {
76 | "name": "亚新",
77 | "value": 8,
78 | "checked": false
79 | }
80 | ]
81 | },
82 | {
83 | "name": "Z",
84 | "items": [
85 | {
86 | "name": "郑州",
87 | "value": 9,
88 | "checked": false
89 | },
90 | {
91 | "name": "振铎",
92 | "value": 10,
93 | "checked": false
94 | }
95 | ]
96 | }
97 | ]
98 |
--------------------------------------------------------------------------------
/unpackage/.confirmed_dependencies:
--------------------------------------------------------------------------------
1 | null
--------------------------------------------------------------------------------
/unpackage/.dependencies:
--------------------------------------------------------------------------------
1 | null
--------------------------------------------------------------------------------