├── .babelrc ├── .editorconfig ├── .eslintignore ├── .eslintrc.js ├── .gitignore ├── .postcssrc.js ├── README.md ├── build ├── build.js ├── check-versions.js ├── dev-client.js ├── dev-server.js ├── utils.js ├── vue-loader.conf.js ├── webpack.base.conf.js ├── webpack.dev.conf.js └── webpack.prod.conf.js ├── config ├── dev.env.js ├── index.js └── prod.env.js ├── index.html ├── package.json ├── project.config.json ├── src ├── App.vue ├── components │ ├── HomeBox │ │ └── index.vue │ └── card.vue ├── main.js ├── pages │ ├── index │ │ ├── index.vue │ │ └── main.js │ ├── logs │ │ ├── index.vue │ │ └── main.js │ ├── map │ │ ├── index.vue │ │ └── main.js │ └── merchant │ │ ├── index.vue │ │ └── main.js ├── store │ └── index.js └── utils │ ├── api │ └── index.js │ └── index.js └── static ├── .gitkeep ├── font ├── demo.css ├── demo_fontclass.html ├── demo_symbol.html ├── demo_unicode.html ├── iconfont.css ├── iconfont.eot ├── iconfont.js ├── iconfont.svg ├── iconfont.ttf └── iconfont.woff └── location.png /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["env", { 4 | "modules": false, 5 | "targets": { 6 | "browsers": ["> 1%", "last 2 versions", "not ie <= 8"] 7 | } 8 | }], 9 | "stage-2" 10 | ], 11 | "plugins": ["transform-runtime"], 12 | "env": { 13 | "test": { 14 | "presets": ["env", "stage-2"], 15 | "plugins": ["istanbul"] 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | build/*.js 2 | config/*.js 3 | -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | // http://eslint.org/docs/user-guide/configuring 2 | 3 | module.exports = { 4 | root: true, 5 | parser: 'babel-eslint', 6 | parserOptions: { 7 | sourceType: 'module' 8 | }, 9 | env: { 10 | browser: false, 11 | node: true, 12 | es6: true 13 | }, 14 | // https://github.com/standard/standard/blob/master/docs/RULES-en.md 15 | extends: 'standard', 16 | // required to lint *.vue files 17 | plugins: [ 18 | 'html' 19 | ], 20 | // add your custom rules here 21 | 'rules': { 22 | // allow paren-less arrow functions 23 | 'arrow-parens': 0, 24 | // allow async-await 25 | 'generator-star-spacing': 0, 26 | // allow debugger during development 27 | 'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0 28 | }, 29 | globals: { 30 | App: true, 31 | Page: true, 32 | wx: true, 33 | getApp: true, 34 | getPage: true 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /.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 | *.suo 11 | *.ntvs* 12 | *.njsproj 13 | *.sln 14 | -------------------------------------------------------------------------------- /.postcssrc.js: -------------------------------------------------------------------------------- 1 | // https://github.com/michael-ciniawsky/postcss-load-config 2 | 3 | module.exports = { 4 | "plugins": { 5 | "postcss-mpvue-wxss": {} 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 美食搜索 2 | 3 | > mpvue 初次尝鲜 4 | 5 | ## 主要有三小个功能 6 | 7 | ### 上拉加载,下拉刷新 8 | ``` bash 9 | ... 10 | onPullDownRefresh () { 11 | ... 12 | }, 13 | onReachBottom () { 14 | ... 15 | }, 16 | data () { 17 | ... 18 | } 19 | ... 20 | 为什么把这个摘出来,因为这两个可以直接用在生命周期里面 21 | ``` 22 | *** 23 | ### 搜索 24 | *** 25 | ### 地图插件 26 | ``` bash 27 | 调用原生小程序的组件 28 | 29 | ``` 30 | *** 31 | 32 | ### 注: 33 | 34 | ``` bash 35 | 我觉得,会vue的上手mpvue难度不大,但是别把原生的小程序组件或者api给抛弃了,毕竟根本还是小程序呀 36 | 所有,我觉得最好的方式是,在开发中结合小程序文档一起进行 37 | 一起,共勉加油!!! 38 | ``` 39 | 40 | # 演示 41 | ![](http://mpv-blog.oss-cn-beijing.aliyuncs.com/mpvue.gif?Expires=1555517212&OSSAccessKeyId=TMP.AQFF-3wKh892sJ2Xko0VUfGN67-Ed-Bk-knKBMhY6ZeGgcoDtbLHkvHaVX3pADAtAhQJC18JgiSqa_j0jc4G9eSSDi9YrAIVALe_RFoKtnJrfGPo4GpM2xolCqBE&Signature=OVp5ZAGlx85SqT%2BYRP9pJz83e48%3D) 42 | 43 | ![](http://p6v49iw9y.bkt.clouddn.com/Jietu20180408-194915-HD.gif) 44 | 45 | 46 | -------------------------------------------------------------------------------- /build/build.js: -------------------------------------------------------------------------------- 1 | require('./check-versions')() 2 | 3 | process.env.NODE_ENV = 'production' 4 | 5 | var ora = require('ora') 6 | var rm = require('rimraf') 7 | var path = require('path') 8 | var chalk = require('chalk') 9 | var webpack = require('webpack') 10 | var config = require('../config') 11 | var webpackConfig = require('./webpack.prod.conf') 12 | 13 | var spinner = ora('building for production...') 14 | spinner.start() 15 | 16 | rm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err => { 17 | if (err) throw err 18 | webpack(webpackConfig, function (err, stats) { 19 | spinner.stop() 20 | if (err) throw err 21 | process.stdout.write(stats.toString({ 22 | colors: true, 23 | modules: false, 24 | children: false, 25 | chunks: false, 26 | chunkModules: false 27 | }) + '\n\n') 28 | 29 | if (stats.hasErrors()) { 30 | console.log(chalk.red(' Build failed with errors.\n')) 31 | process.exit(1) 32 | } 33 | 34 | console.log(chalk.cyan(' Build complete.\n')) 35 | console.log(chalk.yellow( 36 | ' Tip: built files are meant to be served over an HTTP server.\n' + 37 | ' Opening index.html over file:// won\'t work.\n' 38 | )) 39 | }) 40 | }) 41 | -------------------------------------------------------------------------------- /build/check-versions.js: -------------------------------------------------------------------------------- 1 | var chalk = require('chalk') 2 | var semver = require('semver') 3 | var packageConfig = require('../package.json') 4 | var shell = require('shelljs') 5 | function exec (cmd) { 6 | return require('child_process').execSync(cmd).toString().trim() 7 | } 8 | 9 | var versionRequirements = [ 10 | { 11 | name: 'node', 12 | currentVersion: semver.clean(process.version), 13 | versionRequirement: packageConfig.engines.node 14 | } 15 | ] 16 | 17 | if (shell.which('npm')) { 18 | versionRequirements.push({ 19 | name: 'npm', 20 | currentVersion: exec('npm --version'), 21 | versionRequirement: packageConfig.engines.npm 22 | }) 23 | } 24 | 25 | module.exports = function () { 26 | var warnings = [] 27 | for (var i = 0; i < versionRequirements.length; i++) { 28 | var mod = versionRequirements[i] 29 | if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) { 30 | warnings.push(mod.name + ': ' + 31 | chalk.red(mod.currentVersion) + ' should be ' + 32 | chalk.green(mod.versionRequirement) 33 | ) 34 | } 35 | } 36 | 37 | if (warnings.length) { 38 | console.log('') 39 | console.log(chalk.yellow('To use this template, you must update following to modules:')) 40 | console.log() 41 | for (var i = 0; i < warnings.length; i++) { 42 | var warning = warnings[i] 43 | console.log(' ' + warning) 44 | } 45 | console.log() 46 | process.exit(1) 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /build/dev-client.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | require('eventsource-polyfill') 3 | var hotClient = require('webpack-hot-middleware/client?noInfo=true&reload=true') 4 | 5 | hotClient.subscribe(function (event) { 6 | if (event.action === 'reload') { 7 | window.location.reload() 8 | } 9 | }) 10 | -------------------------------------------------------------------------------- /build/dev-server.js: -------------------------------------------------------------------------------- 1 | require('./check-versions')() 2 | 3 | var config = require('../config') 4 | if (!process.env.NODE_ENV) { 5 | process.env.NODE_ENV = JSON.parse(config.dev.env.NODE_ENV) 6 | } 7 | 8 | // var opn = require('opn') 9 | var path = require('path') 10 | var express = require('express') 11 | var webpack = require('webpack') 12 | var proxyMiddleware = require('http-proxy-middleware') 13 | var webpackConfig = require('./webpack.dev.conf') 14 | 15 | // default port where dev server listens for incoming traffic 16 | var port = process.env.PORT || config.dev.port 17 | // automatically open browser, if not set will be false 18 | var autoOpenBrowser = !!config.dev.autoOpenBrowser 19 | // Define HTTP proxies to your custom API backend 20 | // https://github.com/chimurai/http-proxy-middleware 21 | var proxyTable = config.dev.proxyTable 22 | 23 | var app = express() 24 | var compiler = webpack(webpackConfig) 25 | 26 | // var devMiddleware = require('webpack-dev-middleware')(compiler, { 27 | // publicPath: webpackConfig.output.publicPath, 28 | // quiet: true 29 | // }) 30 | 31 | // var hotMiddleware = require('webpack-hot-middleware')(compiler, { 32 | // log: false, 33 | // heartbeat: 2000 34 | // }) 35 | // force page reload when html-webpack-plugin template changes 36 | // compiler.plugin('compilation', function (compilation) { 37 | // compilation.plugin('html-webpack-plugin-after-emit', function (data, cb) { 38 | // hotMiddleware.publish({ action: 'reload' }) 39 | // cb() 40 | // }) 41 | // }) 42 | 43 | // proxy api requests 44 | Object.keys(proxyTable).forEach(function (context) { 45 | var options = proxyTable[context] 46 | if (typeof options === 'string') { 47 | options = { target: options } 48 | } 49 | app.use(proxyMiddleware(options.filter || context, options)) 50 | }) 51 | 52 | // handle fallback for HTML5 history API 53 | app.use(require('connect-history-api-fallback')()) 54 | 55 | // serve webpack bundle output 56 | // app.use(devMiddleware) 57 | 58 | // enable hot-reload and state-preserving 59 | // compilation error display 60 | // app.use(hotMiddleware) 61 | 62 | // serve pure static assets 63 | var staticPath = path.posix.join(config.dev.assetsPublicPath, config.dev.assetsSubDirectory) 64 | app.use(staticPath, express.static('./static')) 65 | 66 | var uri = 'http://localhost:' + port 67 | 68 | var _resolve 69 | var readyPromise = new Promise(resolve => { 70 | _resolve = resolve 71 | }) 72 | 73 | // console.log('> Starting dev server...') 74 | // devMiddleware.waitUntilValid(() => { 75 | // console.log('> Listening at ' + uri + '\n') 76 | // // when env is testing, don't need open it 77 | // if (autoOpenBrowser && process.env.NODE_ENV !== 'testing') { 78 | // opn(uri) 79 | // } 80 | // _resolve() 81 | // }) 82 | 83 | var server = app.listen(port, 'localhost') 84 | 85 | // for 小程序的文件保存机制 86 | require('webpack-dev-middleware-hard-disk')(compiler, { 87 | publicPath: webpackConfig.output.publicPath, 88 | quiet: true 89 | }) 90 | 91 | module.exports = { 92 | ready: readyPromise, 93 | close: () => { 94 | server.close() 95 | } 96 | } 97 | -------------------------------------------------------------------------------- /build/utils.js: -------------------------------------------------------------------------------- 1 | var path = require('path') 2 | var config = require('../config') 3 | var ExtractTextPlugin = require('extract-text-webpack-plugin') 4 | 5 | exports.assetsPath = function (_path) { 6 | var assetsSubDirectory = process.env.NODE_ENV === 'production' 7 | ? config.build.assetsSubDirectory 8 | : config.dev.assetsSubDirectory 9 | return path.posix.join(assetsSubDirectory, _path) 10 | } 11 | 12 | exports.cssLoaders = function (options) { 13 | options = options || {} 14 | 15 | var cssLoader = { 16 | loader: 'css-loader', 17 | options: { 18 | minimize: process.env.NODE_ENV === 'production', 19 | sourceMap: options.sourceMap 20 | } 21 | } 22 | 23 | var postcssLoader = { 24 | loader: 'postcss-loader', 25 | options: { 26 | sourceMap: true 27 | } 28 | } 29 | 30 | var px2rpxLoader = { 31 | loader: 'px2rpx-loader', 32 | options: { 33 | baseDpr: 1, 34 | rpxUnit: 0.5 35 | } 36 | } 37 | 38 | // generate loader string to be used with extract text plugin 39 | function generateLoaders (loader, loaderOptions) { 40 | var loaders = [cssLoader, px2rpxLoader, postcssLoader] 41 | if (loader) { 42 | loaders.push({ 43 | loader: loader + '-loader', 44 | options: Object.assign({}, loaderOptions, { 45 | sourceMap: options.sourceMap 46 | }) 47 | }) 48 | } 49 | 50 | // Extract CSS when that option is specified 51 | // (which is the case during production build) 52 | if (options.extract) { 53 | return ExtractTextPlugin.extract({ 54 | use: loaders, 55 | fallback: 'vue-style-loader' 56 | }) 57 | } else { 58 | return ['vue-style-loader'].concat(loaders) 59 | } 60 | } 61 | 62 | // https://vue-loader.vuejs.org/en/configurations/extract-css.html 63 | return { 64 | css: generateLoaders(), 65 | wxss: generateLoaders(), 66 | postcss: generateLoaders(), 67 | less: generateLoaders('less'), 68 | sass: generateLoaders('sass', { indentedSyntax: true }), 69 | scss: generateLoaders('sass'), 70 | stylus: generateLoaders('stylus'), 71 | styl: generateLoaders('stylus') 72 | } 73 | } 74 | 75 | // Generate loaders for standalone style files (outside of .vue) 76 | exports.styleLoaders = function (options) { 77 | var output = [] 78 | var loaders = exports.cssLoaders(options) 79 | for (var extension in loaders) { 80 | var loader = loaders[extension] 81 | output.push({ 82 | test: new RegExp('\\.' + extension + '$'), 83 | use: loader 84 | }) 85 | } 86 | return output 87 | } 88 | -------------------------------------------------------------------------------- /build/vue-loader.conf.js: -------------------------------------------------------------------------------- 1 | var utils = require('./utils') 2 | var config = require('../config') 3 | // var isProduction = process.env.NODE_ENV === 'production' 4 | // for mp 5 | var isProduction = true 6 | 7 | module.exports = { 8 | loaders: utils.cssLoaders({ 9 | sourceMap: isProduction 10 | ? config.build.productionSourceMap 11 | : config.dev.cssSourceMap, 12 | extract: isProduction 13 | }), 14 | transformToRequire: { 15 | video: 'src', 16 | source: 'src', 17 | img: 'src', 18 | image: 'xlink:href' 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /build/webpack.base.conf.js: -------------------------------------------------------------------------------- 1 | var path = require('path') 2 | var fs = require('fs') 3 | var utils = require('./utils') 4 | var config = require('../config') 5 | var vueLoaderConfig = require('./vue-loader.conf') 6 | var MpvuePlugin = require('webpack-mpvue-asset-plugin') 7 | var glob = require('glob') 8 | 9 | function resolve (dir) { 10 | return path.join(__dirname, '..', dir) 11 | } 12 | 13 | function getEntry (rootSrc, pattern) { 14 | var files = glob.sync(path.resolve(rootSrc, pattern)) 15 | return files.reduce((res, file) => { 16 | var info = path.parse(file) 17 | var key = info.dir.slice(rootSrc.length + 1) + '/' + info.name 18 | res[key] = path.resolve(file) 19 | return res 20 | }, {}) 21 | } 22 | 23 | const appEntry = { app: resolve('./src/main.js') } 24 | const pagesEntry = getEntry(resolve('./src'), 'pages/**/main.js') 25 | const entry = Object.assign({}, appEntry, pagesEntry) 26 | 27 | module.exports = { 28 | // 如果要自定义生成的 dist 目录里面的文件路径, 29 | // 可以将 entry 写成 {'toPath': 'fromPath'} 的形式, 30 | // toPath 为相对于 dist 的路径, 例:index/demo,则生成的文件地址为 dist/index/demo.js 31 | entry, 32 | target: require('mpvue-webpack-target'), 33 | output: { 34 | path: config.build.assetsRoot, 35 | filename: '[name].js', 36 | publicPath: process.env.NODE_ENV === 'production' 37 | ? config.build.assetsPublicPath 38 | : config.dev.assetsPublicPath 39 | }, 40 | resolve: { 41 | extensions: ['.js', '.vue', '.json'], 42 | alias: { 43 | 'vue': 'mpvue', 44 | '@': resolve('src') 45 | }, 46 | symlinks: false 47 | }, 48 | module: { 49 | rules: [ 50 | { 51 | test: /\.(js|vue)$/, 52 | loader: 'eslint-loader', 53 | enforce: 'pre', 54 | include: [resolve('src'), resolve('test')], 55 | options: { 56 | formatter: require('eslint-friendly-formatter') 57 | } 58 | }, 59 | { 60 | test: /\.vue$/, 61 | loader: 'mpvue-loader', 62 | options: vueLoaderConfig 63 | }, 64 | { 65 | test: /\.js$/, 66 | include: [resolve('src'), resolve('test')], 67 | use: [ 68 | 'babel-loader', 69 | { 70 | loader: 'mpvue-loader', 71 | options: { 72 | checkMPEntry: true 73 | } 74 | }, 75 | ] 76 | }, 77 | { 78 | test: /\.(png|jpe?g|gif|svg)(\?.*)?$/, 79 | loader: 'url-loader', 80 | options: { 81 | limit: 10000, 82 | name: utils.assetsPath('img/[name].[ext]') 83 | } 84 | }, 85 | { 86 | test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/, 87 | loader: 'url-loader', 88 | options: { 89 | limit: 10000, 90 | name: utils.assetsPath('media/[name]].[ext]') 91 | } 92 | }, 93 | { 94 | test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/, 95 | loader: 'url-loader', 96 | options: { 97 | limit: 10000, 98 | name: utils.assetsPath('fonts/[name].[ext]') 99 | } 100 | } 101 | ] 102 | }, 103 | plugins: [ 104 | new MpvuePlugin() 105 | ] 106 | } 107 | -------------------------------------------------------------------------------- /build/webpack.dev.conf.js: -------------------------------------------------------------------------------- 1 | var utils = require('./utils') 2 | var webpack = require('webpack') 3 | var config = require('../config') 4 | var merge = require('webpack-merge') 5 | var baseWebpackConfig = require('./webpack.base.conf') 6 | // var HtmlWebpackPlugin = require('html-webpack-plugin') 7 | var FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin') 8 | 9 | // copy from ./webpack.prod.conf.js 10 | var path = require('path') 11 | var ExtractTextPlugin = require('extract-text-webpack-plugin') 12 | var CopyWebpackPlugin = require('copy-webpack-plugin') 13 | var OptimizeCSSPlugin = require('optimize-css-assets-webpack-plugin') 14 | 15 | // add hot-reload related code to entry chunks 16 | // Object.keys(baseWebpackConfig.entry).forEach(function (name) { 17 | // baseWebpackConfig.entry[name] = ['./build/dev-client'].concat(baseWebpackConfig.entry[name]) 18 | // }) 19 | 20 | module.exports = merge(baseWebpackConfig, { 21 | module: { 22 | rules: utils.styleLoaders({ 23 | sourceMap: config.dev.cssSourceMap, 24 | extract: true 25 | }) 26 | }, 27 | // cheap-module-eval-source-map is faster for development 28 | // devtool: '#cheap-module-eval-source-map', 29 | devtool: '#source-map', 30 | output: { 31 | path: config.build.assetsRoot, 32 | // filename: utils.assetsPath('js/[name].[chunkhash].js'), 33 | // chunkFilename: utils.assetsPath('js/[id].[chunkhash].js') 34 | filename: utils.assetsPath('js/[name].js'), 35 | chunkFilename: utils.assetsPath('js/[id].js') 36 | }, 37 | plugins: [ 38 | new webpack.DefinePlugin({ 39 | 'process.env': config.dev.env 40 | }), 41 | 42 | // copy from ./webpack.prod.conf.js 43 | // extract css into its own file 44 | new ExtractTextPlugin({ 45 | // filename: utils.assetsPath('css/[name].[contenthash].css') 46 | filename: utils.assetsPath('css/[name].wxss') 47 | }), 48 | // Compress extracted CSS. We are using this plugin so that possible 49 | // duplicated CSS from different components can be deduped. 50 | new OptimizeCSSPlugin({ 51 | cssProcessorOptions: { 52 | safe: true 53 | } 54 | }), 55 | new webpack.optimize.CommonsChunkPlugin({ 56 | name: 'vendor', 57 | minChunks: function (module, count) { 58 | // any required modules inside node_modules are extracted to vendor 59 | return ( 60 | module.resource && 61 | /\.js$/.test(module.resource) && 62 | module.resource.indexOf('node_modules') >= 0 63 | ) || count > 1 64 | } 65 | }), 66 | new webpack.optimize.CommonsChunkPlugin({ 67 | name: 'manifest', 68 | chunks: ['vendor'] 69 | }), 70 | // copy custom static assets 71 | new CopyWebpackPlugin([ 72 | { 73 | from: path.resolve(__dirname, '../static'), 74 | to: config.build.assetsSubDirectory, 75 | ignore: ['.*'] 76 | } 77 | ]), 78 | 79 | // https://github.com/glenjamin/webpack-hot-middleware#installation--usage 80 | // new webpack.HotModuleReplacementPlugin(), 81 | new webpack.NoEmitOnErrorsPlugin(), 82 | // https://github.com/ampedandwired/html-webpack-plugin 83 | // new HtmlWebpackPlugin({ 84 | // filename: 'index.html', 85 | // template: 'index.html', 86 | // inject: true 87 | // }), 88 | new FriendlyErrorsPlugin() 89 | ] 90 | }) 91 | -------------------------------------------------------------------------------- /build/webpack.prod.conf.js: -------------------------------------------------------------------------------- 1 | var path = require('path') 2 | var utils = require('./utils') 3 | var webpack = require('webpack') 4 | var config = require('../config') 5 | var merge = require('webpack-merge') 6 | var baseWebpackConfig = require('./webpack.base.conf') 7 | var CopyWebpackPlugin = require('copy-webpack-plugin') 8 | // var HtmlWebpackPlugin = require('html-webpack-plugin') 9 | var ExtractTextPlugin = require('extract-text-webpack-plugin') 10 | var OptimizeCSSPlugin = require('optimize-css-assets-webpack-plugin') 11 | 12 | var env = config.build.env 13 | 14 | var webpackConfig = merge(baseWebpackConfig, { 15 | module: { 16 | rules: utils.styleLoaders({ 17 | sourceMap: config.build.productionSourceMap, 18 | extract: true 19 | }) 20 | }, 21 | devtool: config.build.productionSourceMap ? '#source-map' : false, 22 | output: { 23 | path: config.build.assetsRoot, 24 | // filename: utils.assetsPath('js/[name].[chunkhash].js'), 25 | // chunkFilename: utils.assetsPath('js/[id].[chunkhash].js') 26 | filename: utils.assetsPath('js/[name].js'), 27 | chunkFilename: utils.assetsPath('js/[id].js') 28 | }, 29 | plugins: [ 30 | // http://vuejs.github.io/vue-loader/en/workflow/production.html 31 | new webpack.DefinePlugin({ 32 | 'process.env': env 33 | }), 34 | new webpack.optimize.UglifyJsPlugin({ 35 | compress: { 36 | warnings: false 37 | }, 38 | sourceMap: true 39 | }), 40 | // extract css into its own file 41 | new ExtractTextPlugin({ 42 | // filename: utils.assetsPath('css/[name].[contenthash].css') 43 | filename: utils.assetsPath('css/[name].wxss') 44 | }), 45 | // Compress extracted CSS. We are using this plugin so that possible 46 | // duplicated CSS from different components can be deduped. 47 | new OptimizeCSSPlugin({ 48 | cssProcessorOptions: { 49 | safe: true 50 | } 51 | }), 52 | // generate dist index.html with correct asset hash for caching. 53 | // you can customize output by editing /index.html 54 | // see https://github.com/ampedandwired/html-webpack-plugin 55 | // new HtmlWebpackPlugin({ 56 | // filename: config.build.index, 57 | // template: 'index.html', 58 | // inject: true, 59 | // minify: { 60 | // removeComments: true, 61 | // collapseWhitespace: true, 62 | // removeAttributeQuotes: true 63 | // // more options: 64 | // // https://github.com/kangax/html-minifier#options-quick-reference 65 | // }, 66 | // // necessary to consistently work with multiple chunks via CommonsChunkPlugin 67 | // chunksSortMode: 'dependency' 68 | // }), 69 | // keep module.id stable when vender modules does not change 70 | new webpack.HashedModuleIdsPlugin(), 71 | // split vendor js into its own file 72 | new webpack.optimize.CommonsChunkPlugin({ 73 | name: 'vendor', 74 | minChunks: function (module, count) { 75 | // any required modules inside node_modules are extracted to vendor 76 | return ( 77 | module.resource && 78 | /\.js$/.test(module.resource) && 79 | module.resource.indexOf('node_modules') >= 0 80 | ) || count > 1 81 | } 82 | }), 83 | // extract webpack runtime and module manifest to its own file in order to 84 | // prevent vendor hash from being updated whenever app bundle is updated 85 | new webpack.optimize.CommonsChunkPlugin({ 86 | name: 'manifest', 87 | chunks: ['vendor'] 88 | }), 89 | // copy custom static assets 90 | new CopyWebpackPlugin([ 91 | { 92 | from: path.resolve(__dirname, '../static'), 93 | to: config.build.assetsSubDirectory, 94 | ignore: ['.*'] 95 | } 96 | ]) 97 | ] 98 | }) 99 | 100 | // if (config.build.productionGzip) { 101 | // var CompressionWebpackPlugin = require('compression-webpack-plugin') 102 | 103 | // webpackConfig.plugins.push( 104 | // new CompressionWebpackPlugin({ 105 | // asset: '[path].gz[query]', 106 | // algorithm: 'gzip', 107 | // test: new RegExp( 108 | // '\\.(' + 109 | // config.build.productionGzipExtensions.join('|') + 110 | // ')$' 111 | // ), 112 | // threshold: 10240, 113 | // minRatio: 0.8 114 | // }) 115 | // ) 116 | // } 117 | 118 | if (config.build.bundleAnalyzerReport) { 119 | var BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin 120 | webpackConfig.plugins.push(new BundleAnalyzerPlugin()) 121 | } 122 | 123 | module.exports = webpackConfig 124 | -------------------------------------------------------------------------------- /config/dev.env.js: -------------------------------------------------------------------------------- 1 | var merge = require('webpack-merge') 2 | var prodEnv = require('./prod.env') 3 | 4 | module.exports = merge(prodEnv, { 5 | NODE_ENV: '"development"' 6 | }) 7 | -------------------------------------------------------------------------------- /config/index.js: -------------------------------------------------------------------------------- 1 | // see http://vuejs-templates.github.io/webpack for documentation. 2 | var path = require('path') 3 | 4 | module.exports = { 5 | build: { 6 | env: require('./prod.env'), 7 | index: path.resolve(__dirname, '../dist/index.html'), 8 | assetsRoot: path.resolve(__dirname, '../dist'), 9 | assetsSubDirectory: 'static', 10 | assetsPublicPath: '/', 11 | productionSourceMap: false, 12 | // Gzip off by default as many popular static hosts such as 13 | // Surge or Netlify already gzip all static assets for you. 14 | // Before setting to `true`, make sure to: 15 | // npm install --save-dev compression-webpack-plugin 16 | productionGzip: false, 17 | productionGzipExtensions: ['js', 'css'], 18 | // Run the build command with an extra argument to 19 | // View the bundle analyzer report after build finishes: 20 | // `npm run build --report` 21 | // Set to `true` or `false` to always turn it on or off 22 | bundleAnalyzerReport: process.env.npm_config_report 23 | }, 24 | dev: { 25 | env: require('./dev.env'), 26 | port: 8080, 27 | // 在小程序开发者工具中不需要自动打开浏览器 28 | autoOpenBrowser: false, 29 | assetsSubDirectory: 'static', 30 | assetsPublicPath: '/', 31 | productionSourceMap: false, 32 | proxyTable: {}, 33 | // CSS Sourcemaps off by default because relative paths are "buggy" 34 | // with this option, according to the CSS-Loader README 35 | // (https://github.com/webpack/css-loader#sourcemaps) 36 | // In our experience, they generally work as expected, 37 | // just be aware of this issue when enabling this option. 38 | cssSourceMap: false 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /config/prod.env.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | NODE_ENV: '"production"' 3 | } 4 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | demo 6 | 7 | 8 |
9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "xiaoshengkai", 3 | "version": "1.0.0", 4 | "description": "A Mpvue project", 5 | "author": "xiaoshengkai <354830981@qq.com>", 6 | "private": true, 7 | "scripts": { 8 | "dev": "node build/dev-server.js", 9 | "start": "node build/dev-server.js", 10 | "build": "node build/build.js", 11 | "lint": "eslint --ext .js,.vue src" 12 | }, 13 | "dependencies": { 14 | "mpvue": "^1.0.6", 15 | "vue-amap": "^0.5.4", 16 | "vuex": "^2.3.1" 17 | }, 18 | "devDependencies": { 19 | "mpvue-loader": "^1.0.8", 20 | "mpvue-webpack-target": "^1.0.0", 21 | "mpvue-template-compiler": "^1.0.6", 22 | "postcss-mpvue-wxss": "^1.0.0", 23 | "px2rpx-loader": "^0.1.8", 24 | "babel-core": "^6.22.1", 25 | "glob": "^7.1.2", 26 | "webpack-mpvue-asset-plugin": "^0.0.1", 27 | "babel-eslint": "^7.1.1", 28 | "babel-loader": "^7.1.1", 29 | "babel-plugin-transform-runtime": "^6.22.0", 30 | "babel-preset-env": "^1.3.2", 31 | "babel-preset-stage-2": "^6.22.0", 32 | "babel-register": "^6.22.0", 33 | "chalk": "^2.0.1", 34 | "connect-history-api-fallback": "^1.3.0", 35 | "copy-webpack-plugin": "^4.0.1", 36 | "css-loader": "^0.28.0", 37 | "cssnano": "^3.10.0", 38 | "eslint": "^3.19.0", 39 | "eslint-friendly-formatter": "^3.0.0", 40 | "eslint-loader": "^1.7.1", 41 | "eslint-plugin-html": "^3.0.0", 42 | "eslint-config-standard": "^6.2.1", 43 | "eslint-plugin-promise": "^3.4.0", 44 | "eslint-plugin-standard": "^2.0.1", 45 | "eventsource-polyfill": "^0.9.6", 46 | "express": "^4.14.1", 47 | "extract-text-webpack-plugin": "^2.0.0", 48 | "file-loader": "^0.11.1", 49 | "friendly-errors-webpack-plugin": "^1.1.3", 50 | "html-webpack-plugin": "^2.28.0", 51 | "http-proxy-middleware": "^0.17.3", 52 | "webpack-bundle-analyzer": "^2.2.1", 53 | "semver": "^5.3.0", 54 | "shelljs": "^0.7.6", 55 | "optimize-css-assets-webpack-plugin": "^2.0.0", 56 | "ora": "^1.2.0", 57 | "rimraf": "^2.6.0", 58 | "url-loader": "^0.5.8", 59 | "vue-style-loader": "^3.0.1", 60 | "webpack": "^2.6.1", 61 | "webpack-dev-middleware-hard-disk": "^1.10.0", 62 | "webpack-merge": "^4.1.0", 63 | "postcss-loader": "^2.0.6" 64 | }, 65 | "engines": { 66 | "node": ">= 4.0.0", 67 | "npm": ">= 3.0.0" 68 | }, 69 | "browserslist": [ 70 | "> 1%", 71 | "last 2 versions", 72 | "not ie <= 8" 73 | ] 74 | } 75 | -------------------------------------------------------------------------------- /project.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "description": "项目配置文件。", 3 | "setting": { 4 | "urlCheck": true, 5 | "es6": false, 6 | "postcss": true, 7 | "minified": true, 8 | "newFeature": true 9 | }, 10 | "miniprogramRoot": "./dist/", 11 | "compileType": "miniprogram", 12 | "appid": "touristappid", 13 | "projectname": "demo", 14 | "condition": { 15 | "search": { 16 | "current": -1, 17 | "list": [] 18 | }, 19 | "conversation": { 20 | "current": -1, 21 | "list": [] 22 | }, 23 | "game": { 24 | "currentL": -1, 25 | "list": [] 26 | }, 27 | "miniprogram": { 28 | "current": -1, 29 | "list": [] 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/App.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 32 | -------------------------------------------------------------------------------- /src/components/HomeBox/index.vue: -------------------------------------------------------------------------------- 1 | 17 | 18 | 25 | 26 | -------------------------------------------------------------------------------- /src/components/card.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 14 | 15 | 20 | -------------------------------------------------------------------------------- /src/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './App' 3 | import store from './store' 4 | import '../static/font/iconfont.css' 5 | 6 | Vue.config.productionTip = false 7 | App.mpType = 'app' 8 | 9 | const app = new Vue({ 10 | store, 11 | ...App 12 | }) 13 | app.$mount() 14 | 15 | export default { 16 | // 这个字段走 app.json 17 | config: { 18 | // 页面前带有 ^ 符号的,会被编译成首页,其他页面可以选填,我们会自动把 webpack entry 里面的入口页面加进去 19 | pages: ['^pages/index/main'], 20 | window: { 21 | backgroundTextStyle: 'light', 22 | navigationBarBackgroundColor: '#fff', 23 | navigationBarTitleText: '美食搜索', 24 | navigationBarTextStyle: 'black' 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/pages/index/index.vue: -------------------------------------------------------------------------------- 1 | 20 | 21 | 103 | 104 | 148 | -------------------------------------------------------------------------------- /src/pages/index/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './index' 3 | 4 | const app = new Vue(App) 5 | app.$mount() 6 | 7 | export default { 8 | config: { 9 | enablePullDownRefresh: true 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/pages/logs/index.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 32 | 33 | 44 | -------------------------------------------------------------------------------- /src/pages/logs/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './index' 3 | 4 | const app = new Vue(App) 5 | app.$mount() 6 | 7 | export default { 8 | config: { 9 | navigationBarTitleText: '查看启动日志' 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/pages/map/index.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 27 | 28 | -------------------------------------------------------------------------------- /src/pages/map/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './index' 3 | 4 | const app = new Vue(App) 5 | app.$mount() 6 | -------------------------------------------------------------------------------- /src/pages/merchant/index.vue: -------------------------------------------------------------------------------- 1 | 21 | 22 | 71 | 128 | -------------------------------------------------------------------------------- /src/pages/merchant/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './index' 3 | 4 | const app = new Vue(App) 5 | app.$mount() 6 | -------------------------------------------------------------------------------- /src/store/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Vuex from 'vuex' 3 | 4 | Vue.use(Vuex) 5 | 6 | let store = new Vuex.Store({ 7 | state: { 8 | latitude: 0, 9 | longitude: 0 10 | }, 11 | mutations: { 12 | changeState (state, obj) { 13 | for (let key of Object.keys(obj)) { 14 | state[key] = obj[key] 15 | } 16 | } 17 | } 18 | }) 19 | 20 | Vue.prototype.$store = store 21 | 22 | export default store 23 | -------------------------------------------------------------------------------- /src/utils/api/index.js: -------------------------------------------------------------------------------- 1 | const sendURL = 'https://market.csyjia.com/user/customer' 2 | 3 | const request = (url, data = {}, method = 'POST') => new Promise((resolve, reject) => { 4 | url = sendURL + url 5 | wx.request({ 6 | url, 7 | data, 8 | method, 9 | success: res => resolve(res.data), 10 | fail: res => reject(res) 11 | }) 12 | }) 13 | 14 | export default request 15 | -------------------------------------------------------------------------------- /src/utils/index.js: -------------------------------------------------------------------------------- 1 | function formatNumber (n) { 2 | const str = n.toString() 3 | return str[1] ? str : `0${str}` 4 | } 5 | 6 | export function formatTime (date) { 7 | const year = date.getFullYear() 8 | const month = date.getMonth() + 1 9 | const day = date.getDate() 10 | 11 | const hour = date.getHours() 12 | const minute = date.getMinutes() 13 | const second = date.getSeconds() 14 | 15 | const t1 = [year, month, day].map(formatNumber).join('/') 16 | const t2 = [hour, minute, second].map(formatNumber).join(':') 17 | 18 | return `${t1} ${t2}` 19 | } 20 | 21 | -------------------------------------------------------------------------------- /static/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoshengkai/mpvue-FG/e6457fbd934936ce32e593f6dbe8df19232f5565/static/.gitkeep -------------------------------------------------------------------------------- /static/font/demo.css: -------------------------------------------------------------------------------- 1 | *{margin: 0;padding: 0;list-style: none;} 2 | /* 3 | KISSY CSS Reset 4 | 理念:1. reset 的目的不是清除浏览器的默认样式,这仅是部分工作。清除和重置是紧密不可分的。 5 | 2. reset 的目的不是让默认样式在所有浏览器下一致,而是减少默认样式有可能带来的问题。 6 | 3. reset 期望提供一套普适通用的基础样式。但没有银弹,推荐根据具体需求,裁剪和修改后再使用。 7 | 特色:1. 适应中文;2. 基于最新主流浏览器。 8 | 维护:玉伯, 正淳 9 | */ 10 | 11 | /** 清除内外边距 **/ 12 | body, h1, h2, h3, h4, h5, h6, hr, p, blockquote, /* structural elements 结构元素 */ 13 | dl, dt, dd, ul, ol, li, /* list elements 列表元素 */ 14 | pre, /* text formatting elements 文本格式元素 */ 15 | form, fieldset, legend, button, input, textarea, /* form elements 表单元素 */ 16 | th, td /* table elements 表格元素 */ { 17 | margin: 0; 18 | padding: 0; 19 | } 20 | 21 | /** 设置默认字体 **/ 22 | body, 23 | button, input, select, textarea /* for ie */ { 24 | font: 12px/1.5 tahoma, arial, \5b8b\4f53, sans-serif; 25 | } 26 | h1, h2, h3, h4, h5, h6 { font-size: 100%; } 27 | address, cite, dfn, em, var { font-style: normal; } /* 将斜体扶正 */ 28 | code, kbd, pre, samp { font-family: courier new, courier, monospace; } /* 统一等宽字体 */ 29 | small { font-size: 12px; } /* 小于 12px 的中文很难阅读,让 small 正常化 */ 30 | 31 | /** 重置列表元素 **/ 32 | ul, ol { list-style: none; } 33 | 34 | /** 重置文本格式元素 **/ 35 | a { text-decoration: none; } 36 | a:hover { text-decoration: underline; } 37 | 38 | 39 | /** 重置表单元素 **/ 40 | legend { color: #000; } /* for ie6 */ 41 | fieldset, img { border: 0; } /* img 搭车:让链接里的 img 无边框 */ 42 | button, input, select, textarea { font-size: 100%; } /* 使得表单元素在 ie 下能继承字体大小 */ 43 | /* 注:optgroup 无法扶正 */ 44 | 45 | /** 重置表格元素 **/ 46 | table { border-collapse: collapse; border-spacing: 0; } 47 | 48 | /* 清除浮动 */ 49 | .ks-clear:after, .clear:after { 50 | content: '\20'; 51 | display: block; 52 | height: 0; 53 | clear: both; 54 | } 55 | .ks-clear, .clear { 56 | *zoom: 1; 57 | } 58 | 59 | .main { 60 | padding: 30px 100px; 61 | width: 960px; 62 | margin: 0 auto; 63 | } 64 | .main h1{font-size:36px; color:#333; text-align:left;margin-bottom:30px; border-bottom: 1px solid #eee;} 65 | 66 | .helps{margin-top:40px;} 67 | .helps pre{ 68 | padding:20px; 69 | margin:10px 0; 70 | border:solid 1px #e7e1cd; 71 | background-color: #fffdef; 72 | overflow: auto; 73 | } 74 | 75 | .icon_lists{ 76 | width: 100% !important; 77 | 78 | } 79 | 80 | .icon_lists li{ 81 | float:left; 82 | width: 100px; 83 | height:180px; 84 | text-align: center; 85 | list-style: none !important; 86 | } 87 | .icon_lists .icon{ 88 | font-size: 42px; 89 | line-height: 100px; 90 | margin: 10px 0; 91 | color:#333; 92 | -webkit-transition: font-size 0.25s ease-out 0s; 93 | -moz-transition: font-size 0.25s ease-out 0s; 94 | transition: font-size 0.25s ease-out 0s; 95 | 96 | } 97 | .icon_lists .icon:hover{ 98 | font-size: 100px; 99 | } 100 | 101 | 102 | 103 | .markdown { 104 | color: #666; 105 | font-size: 14px; 106 | line-height: 1.8; 107 | } 108 | 109 | .highlight { 110 | line-height: 1.5; 111 | } 112 | 113 | .markdown img { 114 | vertical-align: middle; 115 | max-width: 100%; 116 | } 117 | 118 | .markdown h1 { 119 | color: #404040; 120 | font-weight: 500; 121 | line-height: 40px; 122 | margin-bottom: 24px; 123 | } 124 | 125 | .markdown h2, 126 | .markdown h3, 127 | .markdown h4, 128 | .markdown h5, 129 | .markdown h6 { 130 | color: #404040; 131 | margin: 1.6em 0 0.6em 0; 132 | font-weight: 500; 133 | clear: both; 134 | } 135 | 136 | .markdown h1 { 137 | font-size: 28px; 138 | } 139 | 140 | .markdown h2 { 141 | font-size: 22px; 142 | } 143 | 144 | .markdown h3 { 145 | font-size: 16px; 146 | } 147 | 148 | .markdown h4 { 149 | font-size: 14px; 150 | } 151 | 152 | .markdown h5 { 153 | font-size: 12px; 154 | } 155 | 156 | .markdown h6 { 157 | font-size: 12px; 158 | } 159 | 160 | .markdown hr { 161 | height: 1px; 162 | border: 0; 163 | background: #e9e9e9; 164 | margin: 16px 0; 165 | clear: both; 166 | } 167 | 168 | .markdown p, 169 | .markdown pre { 170 | margin: 1em 0; 171 | } 172 | 173 | .markdown > p, 174 | .markdown > blockquote, 175 | .markdown > .highlight, 176 | .markdown > ol, 177 | .markdown > ul { 178 | width: 80%; 179 | } 180 | 181 | .markdown ul > li { 182 | list-style: circle; 183 | } 184 | 185 | .markdown > ul li, 186 | .markdown blockquote ul > li { 187 | margin-left: 20px; 188 | padding-left: 4px; 189 | } 190 | 191 | .markdown > ul li p, 192 | .markdown > ol li p { 193 | margin: 0.6em 0; 194 | } 195 | 196 | .markdown ol > li { 197 | list-style: decimal; 198 | } 199 | 200 | .markdown > ol li, 201 | .markdown blockquote ol > li { 202 | margin-left: 20px; 203 | padding-left: 4px; 204 | } 205 | 206 | .markdown code { 207 | margin: 0 3px; 208 | padding: 0 5px; 209 | background: #eee; 210 | border-radius: 3px; 211 | } 212 | 213 | .markdown pre { 214 | border-radius: 6px; 215 | background: #f7f7f7; 216 | padding: 20px; 217 | } 218 | 219 | .markdown pre code { 220 | border: none; 221 | background: #f7f7f7; 222 | margin: 0; 223 | } 224 | 225 | .markdown strong, 226 | .markdown b { 227 | font-weight: 600; 228 | } 229 | 230 | .markdown > table { 231 | border-collapse: collapse; 232 | border-spacing: 0px; 233 | empty-cells: show; 234 | border: 1px solid #e9e9e9; 235 | width: 95%; 236 | margin-bottom: 24px; 237 | } 238 | 239 | .markdown > table th { 240 | white-space: nowrap; 241 | color: #333; 242 | font-weight: 600; 243 | 244 | } 245 | 246 | .markdown > table th, 247 | .markdown > table td { 248 | border: 1px solid #e9e9e9; 249 | padding: 8px 16px; 250 | text-align: left; 251 | } 252 | 253 | .markdown > table th { 254 | background: #F7F7F7; 255 | } 256 | 257 | .markdown blockquote { 258 | font-size: 90%; 259 | color: #999; 260 | border-left: 4px solid #e9e9e9; 261 | padding-left: 0.8em; 262 | margin: 1em 0; 263 | font-style: italic; 264 | } 265 | 266 | .markdown blockquote p { 267 | margin: 0; 268 | } 269 | 270 | .markdown .anchor { 271 | opacity: 0; 272 | transition: opacity 0.3s ease; 273 | margin-left: 8px; 274 | } 275 | 276 | .markdown .waiting { 277 | color: #ccc; 278 | } 279 | 280 | .markdown h1:hover .anchor, 281 | .markdown h2:hover .anchor, 282 | .markdown h3:hover .anchor, 283 | .markdown h4:hover .anchor, 284 | .markdown h5:hover .anchor, 285 | .markdown h6:hover .anchor { 286 | opacity: 1; 287 | display: inline-block; 288 | } 289 | 290 | .markdown > br, 291 | .markdown > p > br { 292 | clear: both; 293 | } 294 | 295 | 296 | .hljs { 297 | display: block; 298 | background: white; 299 | padding: 0.5em; 300 | color: #333333; 301 | overflow-x: auto; 302 | } 303 | 304 | .hljs-comment, 305 | .hljs-meta { 306 | color: #969896; 307 | } 308 | 309 | .hljs-string, 310 | .hljs-variable, 311 | .hljs-template-variable, 312 | .hljs-strong, 313 | .hljs-emphasis, 314 | .hljs-quote { 315 | color: #df5000; 316 | } 317 | 318 | .hljs-keyword, 319 | .hljs-selector-tag, 320 | .hljs-type { 321 | color: #a71d5d; 322 | } 323 | 324 | .hljs-literal, 325 | .hljs-symbol, 326 | .hljs-bullet, 327 | .hljs-attribute { 328 | color: #0086b3; 329 | } 330 | 331 | .hljs-section, 332 | .hljs-name { 333 | color: #63a35c; 334 | } 335 | 336 | .hljs-tag { 337 | color: #333333; 338 | } 339 | 340 | .hljs-title, 341 | .hljs-attr, 342 | .hljs-selector-id, 343 | .hljs-selector-class, 344 | .hljs-selector-attr, 345 | .hljs-selector-pseudo { 346 | color: #795da3; 347 | } 348 | 349 | .hljs-addition { 350 | color: #55a532; 351 | background-color: #eaffea; 352 | } 353 | 354 | .hljs-deletion { 355 | color: #bd2c00; 356 | background-color: #ffecec; 357 | } 358 | 359 | .hljs-link { 360 | text-decoration: underline; 361 | } 362 | 363 | pre{ 364 | background: #fff; 365 | } 366 | 367 | 368 | 369 | 370 | 371 | -------------------------------------------------------------------------------- /static/font/demo_fontclass.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | IconFont 7 | 8 | 9 | 10 | 11 |
12 |

IconFont 图标

13 |
    14 | 15 |
  • 16 | 17 |
    购物车空
    18 |
    .icon-gouwuchekong
    19 |
  • 20 | 21 |
  • 22 | 23 |
    用户反馈
    24 |
    .icon-yonghufankui03
    25 |
  • 26 | 27 |
  • 28 | 29 |
    餐厅推荐
    30 |
    .icon-cantingtuijian
    31 |
  • 32 | 33 |
  • 34 | 35 |
    取号排队
    36 |
    .icon-quhaopaidui
    37 |
  • 38 | 39 |
  • 40 | 41 |
    倒计时
    42 |
    .icon-daojishi
    43 |
  • 44 | 45 |
  • 46 | 47 |
    WIFI 我fi
    48 |
    .icon-wifiwofi
    49 |
  • 50 | 51 |
  • 52 | 53 |
    下一步
    54 |
    .icon-next
    55 |
  • 56 | 57 |
  • 58 | 59 |
    闹铃
    60 |
    .icon-naoling
    61 |
  • 62 | 63 |
  • 64 | 65 |
    支付
    66 |
    .icon-zhifu
    67 |
  • 68 | 69 |
  • 70 | 71 |
    客服热线
    72 |
    .icon-kefurexian
    73 |
  • 74 | 75 |
  • 76 | 77 |
    位置
    78 |
    .icon-weizhi
    79 |
  • 80 | 81 |
  • 82 | 83 |
    首页
    84 |
    .icon-iconfonthome0
    85 |
  • 86 | 87 |
  • 88 | 89 |
    90 |
    .icon-iconset0114
    91 |
  • 92 | 93 |
  • 94 | 95 |
    相机
    96 |
    .icon-xiangji
    97 |
  • 98 | 99 |
  • 100 | 101 |
    返回箭头
    102 |
    .icon-fanhuijiantou
    103 |
  • 104 | 105 |
  • 106 | 107 |
    对号
    108 |
    .icon-duihaocheckmark17
    109 |
  • 110 | 111 |
  • 112 | 113 |
    23_购物袋
    114 |
    .icon-23gouwudai
    115 |
  • 116 | 117 |
  • 118 | 119 |
    日历 日期
    120 |
    .icon-riliriqi
    121 |
  • 122 | 123 |
  • 124 | 125 |
    停车位
    126 |
    .icon-tingchewei
    127 |
  • 128 | 129 |
  • 130 | 131 |
    我的收藏
    132 |
    .icon-wodeshoucang
    133 |
  • 134 | 135 |
  • 136 | 137 |
    眼镜
    138 |
    .icon-yanjing
    139 |
  • 140 | 141 |
  • 142 | 143 |
    座位
    144 |
    .icon-zuowei
    145 |
  • 146 | 147 |
  • 148 | 149 |
    待付款
    150 |
    .icon-daifukuan
    151 |
  • 152 | 153 |
  • 154 | 155 |
    选项
    156 |
    .icon-icon
    157 |
  • 158 | 159 |
  • 160 | 161 |
    减号
    162 |
    .icon-jianhao
    163 |
  • 164 | 165 |
  • 166 | 167 |
    关于我们
    168 |
    .icon-guanyuwomen-copy
    169 |
  • 170 | 171 |
  • 172 | 173 |
    收藏
    174 |
    .icon-shoucang1
    175 |
  • 176 | 177 |
  • 178 | 179 |
    提醒
    180 |
    .icon-remind
    181 |
  • 182 | 183 |
  • 184 | 185 |
    清除缓存
    186 |
    .icon-icon901
    187 |
  • 188 | 189 |
  • 190 | 191 |
    设置
    192 |
    .icon-shezhi2
    193 |
  • 194 | 195 |
  • 196 | 197 |
    我的收藏
    198 |
    .icon-wodeshoucang1
    199 |
  • 200 | 201 |
  • 202 | 203 |
    设置
    204 |
    .icon-shezhi3
    205 |
  • 206 | 207 |
  • 208 | 209 |
    减号
    210 |
    .icon-jianhao3
    211 |
  • 212 | 213 |
  • 214 | 215 |
    加号
    216 |
    .icon-jiahao1
    217 |
  • 218 | 219 |
  • 220 | 221 |
    时间
    222 |
    .icon-time
    223 |
  • 224 | 225 |
  • 226 | 227 |
    关闭
    228 |
    .icon-guanbi
    229 |
  • 230 | 231 |
  • 232 | 233 |
    性别
    234 |
    .icon-xingbie
    235 |
  • 236 | 237 |
  • 238 | 239 |
    性别
    240 |
    .icon-xingbie1
    241 |
  • 242 | 243 |
  • 244 | 245 |
    自己
    246 |
    .icon-personal
    247 |
  • 248 | 249 |
  • 250 | 251 |
    人数
    252 |
    .icon-renshu
    253 |
  • 254 | 255 |
  • 256 | 257 |
    手机
    258 |
    .icon-shouji
    259 |
  • 260 | 261 |
  • 262 | 263 |
    说明
    264 |
    .icon-ziyuan
    265 |
  • 266 | 267 |
  • 268 | 269 |
    搜索
    270 |
    .icon-search
    271 |
  • 272 | 273 |
  • 274 | 275 |
    酒水
    276 |
    .icon-jiushui
    277 |
  • 278 | 279 |
  • 280 | 281 |
    座位
    282 |
    .icon-zuowei2
    283 |
  • 284 | 285 |
  • 286 | 287 |
    加号
    288 |
    .icon-jiahao
    289 |
  • 290 | 291 |
  • 292 | 293 |
    勾选
    294 |
    .icon-gouxuan
    295 |
  • 296 | 297 |
  • 298 | 299 |
    减号
    300 |
    .icon-jianhao1
    301 |
  • 302 | 303 |
  • 304 | 305 |
    头像
    306 |
    .icon-touxiang
    307 |
  • 308 | 309 |
  • 310 | 311 |
    分享
    312 |
    .icon-fenxiang
    313 |
  • 314 | 315 |
  • 316 | 317 |
    加号
    318 |
    .icon-jiahao2
    319 |
  • 320 | 321 |
  • 322 | 323 |
    设置
    324 |
    .icon-shezhi
    325 |
  • 326 | 327 |
  • 328 | 329 |
    下一步
    330 |
    .icon-jiantou1-right
    331 |
  • 332 | 333 |
  • 334 | 335 |
    用户反馈
    336 |
    .icon-yonghufankui
    337 |
  • 338 | 339 |
  • 340 | 341 |
    电话
    342 |
    .icon-dianhua
    343 |
  • 344 | 345 |
  • 346 | 347 |
    设置
    348 |
    .icon-shezhi1
    349 |
  • 350 | 351 |
  • 352 | 353 |
    空调
    354 |
    .icon-kongtiao
    355 |
  • 356 | 357 |
  • 358 | 359 |
    订单记录
    360 |
    .icon-dingdan
    361 |
  • 362 | 363 |
  • 364 | 365 |
    勾选
    366 |
    .icon-gouxuan1
    367 |
  • 368 | 369 |
  • 370 | 371 |
    对号
    372 |
    .icon-duihao
    373 |
  • 374 | 375 |
  • 376 | 377 |
    向下边框三角
    378 |
    .icon-down-trangle
    379 |
  • 380 | 381 |
  • 382 | 383 |
    删除/数字面板编辑态
    384 |
    .icon-chuyidong
    385 |
  • 386 | 387 |
  • 388 | 389 |
    优惠券
    390 |
    .icon-youhuiquan
    391 |
  • 392 | 393 |
  • 394 | 395 |
    点选 - 勾
    396 |
    .icon-gou
    397 |
  • 398 | 399 |
  • 400 | 401 |
    手机
    402 |
    .icon-icon--
    403 |
  • 404 | 405 |
  • 406 | 407 |
    邀请好友
    408 |
    .icon-yaoqinghaoyou
    409 |
  • 410 | 411 |
  • 412 | 413 |
    删 除
    414 |
    .icon-shanchu
    415 |
  • 416 | 417 |
  • 418 | 419 |
    浏览记录
    420 |
    .icon-liulanjilu
    421 |
  • 422 | 423 |
  • 424 | 425 |
    减号
    426 |
    .icon-jianhao2
    427 |
  • 428 | 429 |
  • 430 | 431 |
    晴天,太阳
    432 |
    .icon-icon--1
    433 |
  • 434 | 435 |
  • 436 | 437 |
    收 藏
    438 |
    .icon-shoucang
    439 |
  • 440 | 441 |
  • 442 | 443 |
    用餐
    444 |
    .icon-yongcan
    445 |
  • 446 | 447 |
  • 448 | 449 |
    扫一扫
    450 |
    .icon-scan_icon
    451 |
  • 452 | 453 |
454 | 455 |

font-class引用

456 |
457 | 458 |

font-class是unicode使用方式的一种变种,主要是解决unicode书写不直观,语意不明确的问题。

459 |

与unicode使用方式相比,具有如下特点:

460 |
    461 |
  • 兼容性良好,支持ie8+,及所有现代浏览器。
  • 462 |
  • 相比于unicode语意明确,书写更直观。可以很容易分辨这个icon是什么。
  • 463 |
  • 因为使用class来定义图标,所以当要替换图标时,只需要修改class里面的unicode引用。
  • 464 |
  • 不过因为本质上还是使用的字体,所以多色图标还是不支持的。
  • 465 |
466 |

使用步骤如下:

467 |

第一步:引入项目下面生成的fontclass代码:

468 | 469 | 470 |
<link rel="stylesheet" type="text/css" href="./iconfont.css">
471 |

第二步:挑选相应图标并获取类名,应用于页面:

472 |
<i class="iconfont icon-xxx"></i>
473 |
474 |

"iconfont"是你项目下的font-family。可以通过编辑项目查看,默认是"iconfont"。

475 |
476 |
477 | 478 | 479 | -------------------------------------------------------------------------------- /static/font/demo_symbol.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | IconFont 7 | 8 | 9 | 10 | 24 | 25 | 26 |
27 |

IconFont 图标

28 |
    29 | 30 |
  • 31 | 34 |
    购物车空
    35 |
    #icon-gouwuchekong
    36 |
  • 37 | 38 |
  • 39 | 42 |
    用户反馈
    43 |
    #icon-yonghufankui03
    44 |
  • 45 | 46 |
  • 47 | 50 |
    餐厅推荐
    51 |
    #icon-cantingtuijian
    52 |
  • 53 | 54 |
  • 55 | 58 |
    取号排队
    59 |
    #icon-quhaopaidui
    60 |
  • 61 | 62 |
  • 63 | 66 |
    倒计时
    67 |
    #icon-daojishi
    68 |
  • 69 | 70 |
  • 71 | 74 |
    WIFI 我fi
    75 |
    #icon-wifiwofi
    76 |
  • 77 | 78 |
  • 79 | 82 |
    下一步
    83 |
    #icon-next
    84 |
  • 85 | 86 |
  • 87 | 90 |
    闹铃
    91 |
    #icon-naoling
    92 |
  • 93 | 94 |
  • 95 | 98 |
    支付
    99 |
    #icon-zhifu
    100 |
  • 101 | 102 |
  • 103 | 106 |
    客服热线
    107 |
    #icon-kefurexian
    108 |
  • 109 | 110 |
  • 111 | 114 |
    位置
    115 |
    #icon-weizhi
    116 |
  • 117 | 118 |
  • 119 | 122 |
    首页
    123 |
    #icon-iconfonthome0
    124 |
  • 125 | 126 |
  • 127 | 130 |
    131 |
    #icon-iconset0114
    132 |
  • 133 | 134 |
  • 135 | 138 |
    相机
    139 |
    #icon-xiangji
    140 |
  • 141 | 142 |
  • 143 | 146 |
    返回箭头
    147 |
    #icon-fanhuijiantou
    148 |
  • 149 | 150 |
  • 151 | 154 |
    对号
    155 |
    #icon-duihaocheckmark17
    156 |
  • 157 | 158 |
  • 159 | 162 |
    23_购物袋
    163 |
    #icon-23gouwudai
    164 |
  • 165 | 166 |
  • 167 | 170 |
    日历 日期
    171 |
    #icon-riliriqi
    172 |
  • 173 | 174 |
  • 175 | 178 |
    停车位
    179 |
    #icon-tingchewei
    180 |
  • 181 | 182 |
  • 183 | 186 |
    我的收藏
    187 |
    #icon-wodeshoucang
    188 |
  • 189 | 190 |
  • 191 | 194 |
    眼镜
    195 |
    #icon-yanjing
    196 |
  • 197 | 198 |
  • 199 | 202 |
    座位
    203 |
    #icon-zuowei
    204 |
  • 205 | 206 |
  • 207 | 210 |
    待付款
    211 |
    #icon-daifukuan
    212 |
  • 213 | 214 |
  • 215 | 218 |
    选项
    219 |
    #icon-icon
    220 |
  • 221 | 222 |
  • 223 | 226 |
    减号
    227 |
    #icon-jianhao
    228 |
  • 229 | 230 |
  • 231 | 234 |
    关于我们
    235 |
    #icon-guanyuwomen-copy
    236 |
  • 237 | 238 |
  • 239 | 242 |
    收藏
    243 |
    #icon-shoucang1
    244 |
  • 245 | 246 |
  • 247 | 250 |
    提醒
    251 |
    #icon-remind
    252 |
  • 253 | 254 |
  • 255 | 258 |
    清除缓存
    259 |
    #icon-icon901
    260 |
  • 261 | 262 |
  • 263 | 266 |
    设置
    267 |
    #icon-shezhi2
    268 |
  • 269 | 270 |
  • 271 | 274 |
    我的收藏
    275 |
    #icon-wodeshoucang1
    276 |
  • 277 | 278 |
  • 279 | 282 |
    设置
    283 |
    #icon-shezhi3
    284 |
  • 285 | 286 |
  • 287 | 290 |
    减号
    291 |
    #icon-jianhao3
    292 |
  • 293 | 294 |
  • 295 | 298 |
    加号
    299 |
    #icon-jiahao1
    300 |
  • 301 | 302 |
  • 303 | 306 |
    时间
    307 |
    #icon-time
    308 |
  • 309 | 310 |
  • 311 | 314 |
    关闭
    315 |
    #icon-guanbi
    316 |
  • 317 | 318 |
  • 319 | 322 |
    性别
    323 |
    #icon-xingbie
    324 |
  • 325 | 326 |
  • 327 | 330 |
    性别
    331 |
    #icon-xingbie1
    332 |
  • 333 | 334 |
  • 335 | 338 |
    自己
    339 |
    #icon-personal
    340 |
  • 341 | 342 |
  • 343 | 346 |
    人数
    347 |
    #icon-renshu
    348 |
  • 349 | 350 |
  • 351 | 354 |
    手机
    355 |
    #icon-shouji
    356 |
  • 357 | 358 |
  • 359 | 362 |
    说明
    363 |
    #icon-ziyuan
    364 |
  • 365 | 366 |
  • 367 | 370 |
    搜索
    371 |
    #icon-search
    372 |
  • 373 | 374 |
  • 375 | 378 |
    酒水
    379 |
    #icon-jiushui
    380 |
  • 381 | 382 |
  • 383 | 386 |
    座位
    387 |
    #icon-zuowei2
    388 |
  • 389 | 390 |
  • 391 | 394 |
    加号
    395 |
    #icon-jiahao
    396 |
  • 397 | 398 |
  • 399 | 402 |
    勾选
    403 |
    #icon-gouxuan
    404 |
  • 405 | 406 |
  • 407 | 410 |
    减号
    411 |
    #icon-jianhao1
    412 |
  • 413 | 414 |
  • 415 | 418 |
    头像
    419 |
    #icon-touxiang
    420 |
  • 421 | 422 |
  • 423 | 426 |
    分享
    427 |
    #icon-fenxiang
    428 |
  • 429 | 430 |
  • 431 | 434 |
    加号
    435 |
    #icon-jiahao2
    436 |
  • 437 | 438 |
  • 439 | 442 |
    设置
    443 |
    #icon-shezhi
    444 |
  • 445 | 446 |
  • 447 | 450 |
    下一步
    451 |
    #icon-jiantou1-right
    452 |
  • 453 | 454 |
  • 455 | 458 |
    用户反馈
    459 |
    #icon-yonghufankui
    460 |
  • 461 | 462 |
  • 463 | 466 |
    电话
    467 |
    #icon-dianhua
    468 |
  • 469 | 470 |
  • 471 | 474 |
    设置
    475 |
    #icon-shezhi1
    476 |
  • 477 | 478 |
  • 479 | 482 |
    空调
    483 |
    #icon-kongtiao
    484 |
  • 485 | 486 |
  • 487 | 490 |
    订单记录
    491 |
    #icon-dingdan
    492 |
  • 493 | 494 |
  • 495 | 498 |
    勾选
    499 |
    #icon-gouxuan1
    500 |
  • 501 | 502 |
  • 503 | 506 |
    对号
    507 |
    #icon-duihao
    508 |
  • 509 | 510 |
  • 511 | 514 |
    向下边框三角
    515 |
    #icon-down-trangle
    516 |
  • 517 | 518 |
  • 519 | 522 |
    删除/数字面板编辑态
    523 |
    #icon-chuyidong
    524 |
  • 525 | 526 |
  • 527 | 530 |
    优惠券
    531 |
    #icon-youhuiquan
    532 |
  • 533 | 534 |
  • 535 | 538 |
    点选 - 勾
    539 |
    #icon-gou
    540 |
  • 541 | 542 |
  • 543 | 546 |
    手机
    547 |
    #icon-icon--
    548 |
  • 549 | 550 |
  • 551 | 554 |
    邀请好友
    555 |
    #icon-yaoqinghaoyou
    556 |
  • 557 | 558 |
  • 559 | 562 |
    删 除
    563 |
    #icon-shanchu
    564 |
  • 565 | 566 |
  • 567 | 570 |
    浏览记录
    571 |
    #icon-liulanjilu
    572 |
  • 573 | 574 |
  • 575 | 578 |
    减号
    579 |
    #icon-jianhao2
    580 |
  • 581 | 582 |
  • 583 | 586 |
    晴天,太阳
    587 |
    #icon-icon--1
    588 |
  • 589 | 590 |
  • 591 | 594 |
    收 藏
    595 |
    #icon-shoucang
    596 |
  • 597 | 598 |
  • 599 | 602 |
    用餐
    603 |
    #icon-yongcan
    604 |
  • 605 | 606 |
  • 607 | 610 |
    扫一扫
    611 |
    #icon-scan_icon
    612 |
  • 613 | 614 |
615 | 616 | 617 |

symbol引用

618 |
619 | 620 |

这是一种全新的使用方式,应该说这才是未来的主流,也是平台目前推荐的用法。相关介绍可以参考这篇文章 621 | 这种用法其实是做了一个svg的集合,与另外两种相比具有如下特点:

622 |
    623 |
  • 支持多色图标了,不再受单色限制。
  • 624 |
  • 通过一些技巧,支持像字体那样,通过font-size,color来调整样式。
  • 625 |
  • 兼容性较差,支持 ie9+,及现代浏览器。
  • 626 |
  • 浏览器渲染svg的性能一般,还不如png。
  • 627 |
628 |

使用步骤如下:

629 |

第一步:引入项目下面生成的symbol代码:

630 |
<script src="./iconfont.js"></script>
631 |

第二步:加入通用css代码(引入一次就行):

632 |
<style type="text/css">
633 | .icon {
634 |    width: 1em; height: 1em;
635 |    vertical-align: -0.15em;
636 |    fill: currentColor;
637 |    overflow: hidden;
638 | }
639 | </style>
640 |

第三步:挑选相应图标并获取类名,应用于页面:

641 |
<svg class="icon" aria-hidden="true">
642 |   <use xlink:href="#icon-xxx"></use>
643 | </svg>
644 |         
645 |
646 | 647 | 648 | -------------------------------------------------------------------------------- /static/font/demo_unicode.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | IconFont 7 | 8 | 9 | 29 | 30 | 31 |
32 |

IconFont 图标

33 |
    34 | 35 |
  • 36 | 37 |
    购物车空
    38 |
    &#xe618;
    39 |
  • 40 | 41 |
  • 42 | 43 |
    用户反馈
    44 |
    &#xe600;
    45 |
  • 46 | 47 |
  • 48 | 49 |
    餐厅推荐
    50 |
    &#xe723;
    51 |
  • 52 | 53 |
  • 54 | 55 |
    取号排队
    56 |
    &#xe62d;
    57 |
  • 58 | 59 |
  • 60 | 61 |
    倒计时
    62 |
    &#xe62c;
    63 |
  • 64 | 65 |
  • 66 | 67 |
    WIFI 我fi
    68 |
    &#xe707;
    69 |
  • 70 | 71 |
  • 72 | 73 |
    下一步
    74 |
    &#xe61a;
    75 |
  • 76 | 77 |
  • 78 | 79 |
    闹铃
    80 |
    &#xe632;
    81 |
  • 82 | 83 |
  • 84 | 85 |
    支付
    86 |
    &#xe628;
    87 |
  • 88 | 89 |
  • 90 | 91 |
    客服热线
    92 |
    &#xe64f;
    93 |
  • 94 | 95 |
  • 96 | 97 |
    位置
    98 |
    &#xe624;
    99 |
  • 100 | 101 |
  • 102 | 103 |
    首页
    104 |
    &#xe629;
    105 |
  • 106 | 107 |
  • 108 | 109 |
    110 |
    &#xe625;
    111 |
  • 112 | 113 |
  • 114 | 115 |
    相机
    116 |
    &#xe63d;
    117 |
  • 118 | 119 |
  • 120 | 121 |
    返回箭头
    122 |
    &#xe61b;
    123 |
  • 124 | 125 |
  • 126 | 127 |
    对号
    128 |
    &#xe770;
    129 |
  • 130 | 131 |
  • 132 | 133 |
    23_购物袋
    134 |
    &#xe64e;
    135 |
  • 136 | 137 |
  • 138 | 139 |
    日历 日期
    140 |
    &#xe807;
    141 |
  • 142 | 143 |
  • 144 | 145 |
    停车位
    146 |
    &#xe75a;
    147 |
  • 148 | 149 |
  • 150 | 151 |
    我的收藏
    152 |
    &#xe613;
    153 |
  • 154 | 155 |
  • 156 | 157 |
    眼镜
    158 |
    &#xe63e;
    159 |
  • 160 | 161 |
  • 162 | 163 |
    座位
    164 |
    &#xe65d;
    165 |
  • 166 | 167 |
  • 168 | 169 |
    待付款
    170 |
    &#xe68e;
    171 |
  • 172 | 173 |
  • 174 | 175 |
    选项
    176 |
    &#xe67a;
    177 |
  • 178 | 179 |
  • 180 | 181 |
    减号
    182 |
    &#xe615;
    183 |
  • 184 | 185 |
  • 186 | 187 |
    关于我们
    188 |
    &#xe734;
    189 |
  • 190 | 191 |
  • 192 | 193 |
    收藏
    194 |
    &#xe63b;
    195 |
  • 196 | 197 |
  • 198 | 199 |
    提醒
    200 |
    &#xe623;
    201 |
  • 202 | 203 |
  • 204 | 205 |
    清除缓存
    206 |
    &#xe611;
    207 |
  • 208 | 209 |
  • 210 | 211 |
    设置
    212 |
    &#xe644;
    213 |
  • 214 | 215 |
  • 216 | 217 |
    我的收藏
    218 |
    &#xe604;
    219 |
  • 220 | 221 |
  • 222 | 223 |
    设置
    224 |
    &#xe7a0;
    225 |
  • 226 | 227 |
  • 228 | 229 |
    减号
    230 |
    &#xe60e;
    231 |
  • 232 | 233 |
  • 234 | 235 |
    加号
    236 |
    &#xe60f;
    237 |
  • 238 | 239 |
  • 240 | 241 |
    时间
    242 |
    &#xe656;
    243 |
  • 244 | 245 |
  • 246 | 247 |
    关闭
    248 |
    &#xe620;
    249 |
  • 250 | 251 |
  • 252 | 253 |
    性别
    254 |
    &#xe65b;
    255 |
  • 256 | 257 |
  • 258 | 259 |
    性别
    260 |
    &#xe619;
    261 |
  • 262 | 263 |
  • 264 | 265 |
    自己
    266 |
    &#xe627;
    267 |
  • 268 | 269 |
  • 270 | 271 |
    人数
    272 |
    &#xe616;
    273 |
  • 274 | 275 |
  • 276 | 277 |
    手机
    278 |
    &#xe62a;
    279 |
  • 280 | 281 |
  • 282 | 283 |
    说明
    284 |
    &#xe65a;
    285 |
  • 286 | 287 |
  • 288 | 289 |
    搜索
    290 |
    &#xe704;
    291 |
  • 292 | 293 |
  • 294 | 295 |
    酒水
    296 |
    &#xe639;
    297 |
  • 298 | 299 |
  • 300 | 301 |
    座位
    302 |
    &#xe626;
    303 |
  • 304 | 305 |
  • 306 | 307 |
    加号
    308 |
    &#xe6ad;
    309 |
  • 310 | 311 |
  • 312 | 313 |
    勾选
    314 |
    &#xe617;
    315 |
  • 316 | 317 |
  • 318 | 319 |
    减号
    320 |
    &#xe60a;
    321 |
  • 322 | 323 |
  • 324 | 325 |
    头像
    326 |
    &#xe605;
    327 |
  • 328 | 329 |
  • 330 | 331 |
    分享
    332 |
    &#xe61c;
    333 |
  • 334 | 335 |
  • 336 | 337 |
    加号
    338 |
    &#xe60b;
    339 |
  • 340 | 341 |
  • 342 | 343 |
    设置
    344 |
    &#xe608;
    345 |
  • 346 | 347 |
  • 348 | 349 |
    下一步
    350 |
    &#xe601;
    351 |
  • 352 | 353 |
  • 354 | 355 |
    用户反馈
    356 |
    &#xe61d;
    357 |
  • 358 | 359 |
  • 360 | 361 |
    电话
    362 |
    &#xe62e;
    363 |
  • 364 | 365 |
  • 366 | 367 |
    设置
    368 |
    &#xe60c;
    369 |
  • 370 | 371 |
  • 372 | 373 |
    空调
    374 |
    &#xe607;
    375 |
  • 376 | 377 |
  • 378 | 379 |
    订单记录
    380 |
    &#xe612;
    381 |
  • 382 | 383 |
  • 384 | 385 |
    勾选
    386 |
    &#xe61f;
    387 |
  • 388 | 389 |
  • 390 | 391 |
    对号
    392 |
    &#xe602;
    393 |
  • 394 | 395 |
  • 396 | 397 |
    向下边框三角
    398 |
    &#xe610;
    399 |
  • 400 | 401 |
  • 402 | 403 |
    删除/数字面板编辑态
    404 |
    &#xe606;
    405 |
  • 406 | 407 |
  • 408 | 409 |
    优惠券
    410 |
    &#xe62b;
    411 |
  • 412 | 413 |
  • 414 | 415 |
    点选 - 勾
    416 |
    &#xe60d;
    417 |
  • 418 | 419 |
  • 420 | 421 |
    手机
    422 |
    &#xe650;
    423 |
  • 424 | 425 |
  • 426 | 427 |
    邀请好友
    428 |
    &#xe61e;
    429 |
  • 430 | 431 |
  • 432 | 433 |
    删 除
    434 |
    &#xe603;
    435 |
  • 436 | 437 |
  • 438 | 439 |
    浏览记录
    440 |
    &#xe65f;
    441 |
  • 442 | 443 |
  • 444 | 445 |
    减号
    446 |
    &#xe621;
    447 |
  • 448 | 449 |
  • 450 | 451 |
    晴天,太阳
    452 |
    &#xe79b;
    453 |
  • 454 | 455 |
  • 456 | 457 |
    收 藏
    458 |
    &#xe609;
    459 |
  • 460 | 461 |
  • 462 | 463 |
    用餐
    464 |
    &#xe622;
    465 |
  • 466 | 467 |
  • 468 | 469 |
    扫一扫
    470 |
    &#xe614;
    471 |
  • 472 | 473 |
474 |

unicode引用

475 |
476 | 477 |

unicode是字体在网页端最原始的应用方式,特点是:

478 |
    479 |
  • 兼容性最好,支持ie6+,及所有现代浏览器。
  • 480 |
  • 支持按字体的方式去动态调整图标大小,颜色等等。
  • 481 |
  • 但是因为是字体,所以不支持多色。只能使用平台里单色的图标,就算项目里有多色图标也会自动去色。
  • 482 |
483 |
484 |

注意:新版iconfont支持多色图标,这些多色图标在unicode模式下将不能使用,如果有需求建议使用symbol的引用方式

485 |
486 |

unicode使用步骤如下:

487 |

第一步:拷贝项目下面生成的font-face

488 |
@font-face {
489 |   font-family: 'iconfont';
490 |   src: url('iconfont.eot');
491 |   src: url('iconfont.eot?#iefix') format('embedded-opentype'),
492 |   url('iconfont.woff') format('woff'),
493 |   url('iconfont.ttf') format('truetype'),
494 |   url('iconfont.svg#iconfont') format('svg');
495 | }
496 | 
497 |

第二步:定义使用iconfont的样式

498 |
.iconfont{
499 |   font-family:"iconfont" !important;
500 |   font-size:16px;font-style:normal;
501 |   -webkit-font-smoothing: antialiased;
502 |   -webkit-text-stroke-width: 0.2px;
503 |   -moz-osx-font-smoothing: grayscale;
504 | }
505 | 
506 |

第三步:挑选相应图标并获取字体编码,应用于页面

507 |
<i class="iconfont">&#x33;</i>
508 | 509 |
510 |

"iconfont"是你项目下的font-family。可以通过编辑项目查看,默认是"iconfont"。

511 |
512 |
513 | 514 | 515 | 516 | 517 | -------------------------------------------------------------------------------- /static/font/iconfont.css: -------------------------------------------------------------------------------- 1 | 2 | @font-face {font-family: "iconfont"; 3 | src: url('iconfont.eot?t=1521084252892'); /* IE9*/ 4 | src: url('iconfont.eot?t=1521084252892#iefix') format('embedded-opentype'), /* IE6-IE8 */ 5 | url('data:application/x-font-woff;charset=utf-8;base64,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') format('woff'), 6 | url('iconfont.ttf?t=1521084252892') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/ 7 | url('iconfont.svg?t=1521084252892#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-gouwuchekong:before { content: "\e618"; } 19 | 20 | .icon-yonghufankui03:before { content: "\e600"; } 21 | 22 | .icon-cantingtuijian:before { content: "\e723"; } 23 | 24 | .icon-quhaopaidui:before { content: "\e62d"; } 25 | 26 | .icon-daojishi:before { content: "\e62c"; } 27 | 28 | .icon-wifiwofi:before { content: "\e707"; } 29 | 30 | .icon-next:before { content: "\e61a"; } 31 | 32 | .icon-naoling:before { content: "\e632"; } 33 | 34 | .icon-zhifu:before { content: "\e628"; } 35 | 36 | .icon-kefurexian:before { content: "\e64f"; } 37 | 38 | .icon-weizhi:before { content: "\e624"; } 39 | 40 | .icon-iconfonthome0:before { content: "\e629"; } 41 | 42 | .icon-iconset0114:before { content: "\e625"; } 43 | 44 | .icon-xiangji:before { content: "\e63d"; } 45 | 46 | .icon-fanhuijiantou:before { content: "\e61b"; } 47 | 48 | .icon-duihaocheckmark17:before { content: "\e770"; } 49 | 50 | .icon-23gouwudai:before { content: "\e64e"; } 51 | 52 | .icon-riliriqi:before { content: "\e807"; } 53 | 54 | .icon-tingchewei:before { content: "\e75a"; } 55 | 56 | .icon-wodeshoucang:before { content: "\e613"; } 57 | 58 | .icon-yanjing:before { content: "\e63e"; } 59 | 60 | .icon-zuowei:before { content: "\e65d"; } 61 | 62 | .icon-daifukuan:before { content: "\e68e"; } 63 | 64 | .icon-icon:before { content: "\e67a"; } 65 | 66 | .icon-jianhao:before { content: "\e615"; } 67 | 68 | .icon-guanyuwomen-copy:before { content: "\e734"; } 69 | 70 | .icon-shoucang1:before { content: "\e63b"; } 71 | 72 | .icon-remind:before { content: "\e623"; } 73 | 74 | .icon-icon901:before { content: "\e611"; } 75 | 76 | .icon-shezhi2:before { content: "\e644"; } 77 | 78 | .icon-wodeshoucang1:before { content: "\e604"; } 79 | 80 | .icon-shezhi3:before { content: "\e7a0"; } 81 | 82 | .icon-jianhao3:before { content: "\e60e"; } 83 | 84 | .icon-jiahao1:before { content: "\e60f"; } 85 | 86 | .icon-time:before { content: "\e656"; } 87 | 88 | .icon-guanbi:before { content: "\e620"; } 89 | 90 | .icon-xingbie:before { content: "\e65b"; } 91 | 92 | .icon-xingbie1:before { content: "\e619"; } 93 | 94 | .icon-personal:before { content: "\e627"; } 95 | 96 | .icon-renshu:before { content: "\e616"; } 97 | 98 | .icon-shouji:before { content: "\e62a"; } 99 | 100 | .icon-ziyuan:before { content: "\e65a"; } 101 | 102 | .icon-search:before { content: "\e704"; } 103 | 104 | .icon-jiushui:before { content: "\e639"; } 105 | 106 | .icon-zuowei2:before { content: "\e626"; } 107 | 108 | .icon-jiahao:before { content: "\e6ad"; } 109 | 110 | .icon-gouxuan:before { content: "\e617"; } 111 | 112 | .icon-jianhao1:before { content: "\e60a"; } 113 | 114 | .icon-touxiang:before { content: "\e605"; } 115 | 116 | .icon-fenxiang:before { content: "\e61c"; } 117 | 118 | .icon-jiahao2:before { content: "\e60b"; } 119 | 120 | .icon-shezhi:before { content: "\e608"; } 121 | 122 | .icon-jiantou1-right:before { content: "\e601"; } 123 | 124 | .icon-yonghufankui:before { content: "\e61d"; } 125 | 126 | .icon-dianhua:before { content: "\e62e"; } 127 | 128 | .icon-shezhi1:before { content: "\e60c"; } 129 | 130 | .icon-kongtiao:before { content: "\e607"; } 131 | 132 | .icon-dingdan:before { content: "\e612"; } 133 | 134 | .icon-gouxuan1:before { content: "\e61f"; } 135 | 136 | .icon-duihao:before { content: "\e602"; } 137 | 138 | .icon-down-trangle:before { content: "\e610"; } 139 | 140 | .icon-chuyidong:before { content: "\e606"; } 141 | 142 | .icon-youhuiquan:before { content: "\e62b"; } 143 | 144 | .icon-gou:before { content: "\e60d"; } 145 | 146 | .icon-icon--:before { content: "\e650"; } 147 | 148 | .icon-yaoqinghaoyou:before { content: "\e61e"; } 149 | 150 | .icon-shanchu:before { content: "\e603"; } 151 | 152 | .icon-liulanjilu:before { content: "\e65f"; } 153 | 154 | .icon-jianhao2:before { content: "\e621"; } 155 | 156 | .icon-icon--1:before { content: "\e79b"; } 157 | 158 | .icon-shoucang:before { content: "\e609"; } 159 | 160 | .icon-yongcan:before { content: "\e622"; } 161 | 162 | .icon-scan_icon:before { content: "\e614"; } 163 | 164 | -------------------------------------------------------------------------------- /static/font/iconfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoshengkai/mpvue-FG/e6457fbd934936ce32e593f6dbe8df19232f5565/static/font/iconfont.eot -------------------------------------------------------------------------------- /static/font/iconfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoshengkai/mpvue-FG/e6457fbd934936ce32e593f6dbe8df19232f5565/static/font/iconfont.ttf -------------------------------------------------------------------------------- /static/font/iconfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoshengkai/mpvue-FG/e6457fbd934936ce32e593f6dbe8df19232f5565/static/font/iconfont.woff -------------------------------------------------------------------------------- /static/location.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaoshengkai/mpvue-FG/e6457fbd934936ce32e593f6dbe8df19232f5565/static/location.png --------------------------------------------------------------------------------