diff --git a/.babelrc b/.babelrc new file mode 100644 index 0000000..41789ca --- /dev/null +++ b/.babelrc @@ -0,0 +1,5 @@ +{ + "presets": ["es2015", "stage-2"], + "plugins": ["transform-runtime"], + "comments": false +} diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..9d08a1a --- /dev/null +++ b/.editorconfig @@ -0,0 +1,9 @@ +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..34af377 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,2 @@ +build/*.js +config/*.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..be86a2b --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +.DS_Store +node_modules/ +dist/ +npm-debug.log +selenium-debug.log +test/unit/coverage +test/e2e/reports diff --git a/README.md b/README.md index 197f55d..6ae6bf5 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,19 @@ # vue-wechat -用vue.js开发微信app界面的demo +> 用vue.js开发微信app界面的demo + +vue-cli vue vuex vue-router vue-toutch zepto weui + +?vue-resource +### 安装 + +``` bash +# install dependencies +cnpm install + +# serve with hot reload at localhost:8080 +npm run dev + +# build for production with minification +npm run build + +``` \ No newline at end of file diff --git a/build/build.js b/build/build.js new file mode 100644 index 0000000..37f5a82 --- /dev/null +++ b/build/build.js @@ -0,0 +1,35 @@ +// https://github.com/shelljs/shelljs +require('shelljs/global') +env.NODE_ENV = 'production' + +var path = require('path') +var config = require('../config') +var ora = require('ora') +var webpack = require('webpack') +var webpackConfig = require('./webpack.prod.conf') + +console.log( + ' Tip:\n' + + ' Built files are meant to be served over an HTTP server.\n' + + ' Opening index.html over file:// won\'t work.\n' +) + +var spinner = ora('building for production...') +spinner.start() + +var assetsPath = path.join(config.build.assetsRoot, config.build.assetsSubDirectory) +rm('-rf', assetsPath) +mkdir('-p', assetsPath) +cp('-R', 'static/', assetsPath) + +webpack(webpackConfig, function (err, stats) { + spinner.stop() + if (err) throw err + process.stdout.write(stats.toString({ + colors: true, + modules: false, + children: false, + chunks: false, + chunkModules: false + }) + '\n') +}) diff --git a/build/dev-client.js b/build/dev-client.js new file mode 100644 index 0000000..18aa1e2 --- /dev/null +++ b/build/dev-client.js @@ -0,0 +1,9 @@ +/* eslint-disable */ +require('eventsource-polyfill') +var hotClient = require('webpack-hot-middleware/client?noInfo=true&reload=true') + +hotClient.subscribe(function (event) { + if (event.action === 'reload') { + window.location.reload() + } +}) diff --git a/build/dev-server.js b/build/dev-server.js new file mode 100644 index 0000000..f46f216 --- /dev/null +++ b/build/dev-server.js @@ -0,0 +1,69 @@ +var path = require('path') +var express = require('express') +var webpack = require('webpack') +var config = require('../config') +var proxyMiddleware = require('http-proxy-middleware') +var webpackConfig = process.env.NODE_ENV === 'testing' + ? require('./webpack.prod.conf') + : require('./webpack.dev.conf') + +// default port where dev server listens for incoming traffic +var port = process.env.PORT || config.dev.port +// Define HTTP proxies to your custom API backend +// https://github.com/chimurai/http-proxy-middleware +var proxyTable = config.dev.proxyTable + +var app = express() +var compiler = webpack(webpackConfig) + +var devMiddleware = require('webpack-dev-middleware')(compiler, { + publicPath: webpackConfig.output.publicPath, + stats: { + colors: true, + chunks: false + } +}) + +var hotMiddleware = require('webpack-hot-middleware')(compiler) +// force page reload when html-webpack-plugin template changes +compiler.plugin('compilation', function (compilation) { + compilation.plugin('html-webpack-plugin-after-emit', function (data, cb) { + hotMiddleware.publish({ action: 'reload' }) + cb() + }) +}) + +// proxy api requests +Object.keys(proxyTable).forEach(function (context) { + var options = proxyTable[context] + if (typeof options === 'string') { + options = { target: options } + } + app.use(proxyMiddleware(context, options)) +}) + +// handle fallback for HTML5 history API +app.use(require('connect-history-api-fallback')()) + +// serve webpack bundle output +app.use(devMiddleware) + +// enable hot-reload and state-preserving +// compilation error display +app.use(hotMiddleware) + +// serve pure static assets +var staticPath = path.posix.join(config.dev.assetsPublicPath, config.dev.assetsSubDirectory) +app.use(staticPath, express.static('./static')) + +//服务端路由 +app.post('/message', function(request, response) { + response.send({code:1,obj:{name:"yangtao",age:40}}); +}) +module.exports = app.listen(port, function (err) { + if (err) { + console.log(err) + return + } + console.log('Listening at http://localhost:' + port + '\n') +}) diff --git a/build/mock-server.js b/build/mock-server.js new file mode 100644 index 0000000..00f17b7 --- /dev/null +++ b/build/mock-server.js @@ -0,0 +1,36 @@ +var path = require('path') +var express = require('express') +var webpack = require('webpack') +var config = require('../config') +var proxyMiddleware = require('http-proxy-middleware') +var webpackConfig = process.env.NODE_ENV === 'testing' + ? require('./webpack.prod.conf') + : require('./webpack.dev.conf') + + +var mockapp = express() +mockapp.use(express.static(path.join(__dirname, '../src/'))); + +mockapp.all('*', function(req, res, next) { + // console.log(req) + res.header("Access-Control-Allow-Origin", "*"); + res.header("Access-Control-Allow-Headers", "X-Requested-With"); + res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS"); + res.header("X-Powered-By",' 3.2.1') + res.header("Content-Type", "application/json;charset=utf-8"); + next(); +}); + +mockapp.get('/', function(req, res){ + res.send('hello world'); +}); + + +module.exports = mockapp.listen(6625,function (err) { + + if (err) { + console.log(err) + return + } + console.log('Listening at http://localhost:' + 6625 + '\n') +}); diff --git a/build/utils.js b/build/utils.js new file mode 100644 index 0000000..4ec8d0b --- /dev/null +++ b/build/utils.js @@ -0,0 +1,59 @@ +var path = require('path') +var config = require('../config') +var ExtractTextPlugin = require('extract-text-webpack-plugin') + +exports.assetsPath = function (_path) { + var assetsSubDirectory = process.env.NODE_ENV === 'production' + ? config.build.assetsSubDirectory + : config.dev.assetsSubDirectory + return path.posix.join(assetsSubDirectory, _path) +} + +exports.cssLoaders = function (options) { + options = options || {} + // generate loader string to be used with extract text plugin + function generateLoaders (loaders) { + var sourceLoader = loaders.map(function (loader) { + var extraParamChar + if (/\?/.test(loader)) { + loader = loader.replace(/\?/, '-loader?') + extraParamChar = '&' + } else { + loader = loader + '-loader' + extraParamChar = '?' + } + return loader + (options.sourceMap ? extraParamChar + 'sourceMap' : '') + }).join('!') + + if (options.extract) { + return ExtractTextPlugin.extract('vue-style-loader', sourceLoader) + } else { + return ['vue-style-loader', sourceLoader].join('!') + } + } + + // http://vuejs.github.io/vue-loader/configurations/extract-css.html + return { + css: generateLoaders(['css']), + postcss: generateLoaders(['css']), + less: generateLoaders(['css', 'less']), + sass: generateLoaders(['css', 'sass?indentedSyntax']), + scss: generateLoaders(['css', 'sass']), + stylus: generateLoaders(['css', 'stylus']), + styl: generateLoaders(['css', 'stylus']) + } +} + +// Generate loaders for standalone style files (outside of .vue) +exports.styleLoaders = function (options) { + var output = [] + var loaders = exports.cssLoaders(options) + for (var extension in loaders) { + var loader = loaders[extension] + output.push({ + test: new RegExp('\\.' + extension + '$'), + loader: loader + }) + } + return output +} diff --git a/build/webpack.base.conf.js b/build/webpack.base.conf.js new file mode 100644 index 0000000..7ef7769 --- /dev/null +++ b/build/webpack.base.conf.js @@ -0,0 +1,64 @@ +var path = require('path') +var config = require('../config') +var utils = require('./utils') +var projectRoot = path.resolve(__dirname, '../') +var ExtractTextPlugin = require('extract-text-webpack-plugin'); +module.exports = { + entry: { + app: './src/main.js' + }, + output: { + path: config.build.assetsRoot, + publicPath: process.env.NODE_ENV === 'production' ? config.build.assetsPublicPath : config.dev.assetsPublicPath, + filename: '[name].js' + }, + resolve: { + extensions: ['', '.js', '.vue'], + fallback: [path.join(__dirname, '../node_modules')], + alias: { + 'src': path.resolve(__dirname, '../src'), + 'assets': path.resolve(__dirname, '../src/assets'), + 'components': path.resolve(__dirname, '../src/components'), + 'utils':path.resolve(__dirname, '../src/utils.js'), + 'topHandle':path.resolve(__dirname,'../src/components/top-handle.vue'), + 'action':path.resolve(__dirname,'../src/vuex/action') + } + }, + resolveLoader: { + fallback: [path.join(__dirname, '../node_modules')] + }, + module: { + loaders: [{ + test: /\.vue$/, + loader: 'vue' + }, { + test: /\.js$/, + loader: 'babel', + include: projectRoot, + exclude: /node_modules/ + }, { + test: /\.json$/, + loader: 'json' + }, { + test: /\.html$/, + loader: 'vue-html' + }, { + test: /\.(png|jpe?g|gif|svg)(\?.*)?$/, + loader: 'url', + query: { + limit: 10, + name: utils.assetsPath('img/[name].[hash:7].[ext]') + } + }, { + test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/, + loader: 'url', + query: { + limit: 10000, + name: utils.assetsPath('fonts/[name].[hash:7].[ext]') + } + }] + }, + vue: { + loaders: utils.cssLoaders({ sourceMap: true }) + } +} diff --git a/build/webpack.dev.conf.js b/build/webpack.dev.conf.js new file mode 100644 index 0000000..ebaf474 --- /dev/null +++ b/build/webpack.dev.conf.js @@ -0,0 +1,39 @@ +var config = require('../config') +var webpack = require('webpack') +var merge = require('webpack-merge') +var utils = require('./utils') +var baseWebpackConfig = require('./webpack.base.conf') +var HtmlWebpackPlugin = require('html-webpack-plugin') + +// add hot-reload related code to entry chunks +Object.keys(baseWebpackConfig.entry).forEach(function (name) { + baseWebpackConfig.entry[name] = ['./build/dev-client'].concat(baseWebpackConfig.entry[name]) +}) + +module.exports = merge(baseWebpackConfig, { + module: { + loaders: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap }) + }, + // eval-source-map is faster for development + devtool: '#eval-source-map', + plugins: [ + new webpack.DefinePlugin({ + 'process.env': config.dev.env + }), + // https://github.com/glenjamin/webpack-hot-middleware#installation--usage + new webpack.optimize.OccurenceOrderPlugin(), + new webpack.HotModuleReplacementPlugin(), + new webpack.NoErrorsPlugin(), + // https://github.com/ampedandwired/html-webpack-plugin + new HtmlWebpackPlugin({ + filename: 'index.html', + template: 'index.html', + inject: true + }), + new webpack.ProvidePlugin({ + "$":'webpack-zepto', + "zepto":"zepto", + "window.zepto":"webpack-zepto" + }) + ] +}) diff --git a/build/webpack.prod.conf.js b/build/webpack.prod.conf.js new file mode 100644 index 0000000..6119f70 --- /dev/null +++ b/build/webpack.prod.conf.js @@ -0,0 +1,102 @@ +var path = require('path') +var config = require('../config') +var utils = require('./utils') +var webpack = require('webpack') +var merge = require('webpack-merge') +var baseWebpackConfig = require('./webpack.base.conf') +var ExtractTextPlugin = require('extract-text-webpack-plugin') +var HtmlWebpackPlugin = require('html-webpack-plugin') +var env = process.env.NODE_ENV === 'testing' + ? require('../config/test.env') + : config.build.env + +var webpackConfig = merge(baseWebpackConfig, { + module: { + loaders: utils.styleLoaders({ sourceMap: config.build.productionSourceMap, extract: true }) + }, + devtool: config.build.productionSourceMap ? '#source-map' : false, + output: { + path: config.build.assetsRoot, + filename: utils.assetsPath('js/[name].[chunkhash].js'), + chunkFilename: utils.assetsPath('js/[id].[chunkhash].js') + }, + vue: { + loaders: utils.cssLoaders({ + sourceMap: config.build.productionSourceMap, + extract: true + }) + }, + plugins: [ + // http://vuejs.github.io/vue-loader/workflow/production.html + new webpack.DefinePlugin({ + 'process.env': env + }), + new webpack.optimize.UglifyJsPlugin({ + compress: { + warnings: false + } + }), + new webpack.optimize.OccurenceOrderPlugin(), + // extract css into its own file + new ExtractTextPlugin(utils.assetsPath('css/[name].[contenthash].css')), + // generate dist index.html with correct asset hash for caching. + // you can customize output by editing /index.html + // see https://github.com/ampedandwired/html-webpack-plugin + new HtmlWebpackPlugin({ + filename: process.env.NODE_ENV === 'testing' + ? 'index.html' + : config.build.index, + template: 'index.html', + inject: true, + minify: { + removeComments: true, + collapseWhitespace: true, + removeAttributeQuotes: true + // more options: + // https://github.com/kangax/html-minifier#options-quick-reference + }, + // necessary to consistently work with multiple chunks via CommonsChunkPlugin + chunksSortMode: 'dependency' + }), + // split vendor js into its own file + new webpack.optimize.CommonsChunkPlugin({ + name: 'vendor', + minChunks: function (module, count) { + // any required modules inside node_modules are extracted to vendor + return ( + module.resource && + /\.js$/.test(module.resource) && + module.resource.indexOf( + path.join(__dirname, '../node_modules') + ) === 0 + ) + } + }), + // extract webpack runtime and module manifest to its own file in order to + // prevent vendor hash from being updated whenever app bundle is updated + new webpack.optimize.CommonsChunkPlugin({ + name: 'manifest', + chunks: ['vendor'] + }) + ] +}) + +if (config.build.productionGzip) { + var CompressionWebpackPlugin = require('compression-webpack-plugin') + + webpackConfig.plugins.push( + new CompressionWebpackPlugin({ + asset: '[path].gz[query]', + algorithm: 'gzip', + test: new RegExp( + '\\.(' + + config.build.productionGzipExtensions.join('|') + + ')$' + ), + threshold: 10240, + minRatio: 0.8 + }) + ) +} + +module.exports = webpackConfig diff --git a/config/dev.env.js b/config/dev.env.js new file mode 100644 index 0000000..efead7c --- /dev/null +++ b/config/dev.env.js @@ -0,0 +1,6 @@ +var merge = require('webpack-merge') +var prodEnv = require('./prod.env') + +module.exports = merge(prodEnv, { + NODE_ENV: '"development"' +}) diff --git a/config/index.js b/config/index.js new file mode 100644 index 0000000..207dfbd --- /dev/null +++ b/config/index.js @@ -0,0 +1,32 @@ +// see http://vuejs-templates.github.io/webpack for documentation. +var path = require('path') + +module.exports = { + build: { + env: require('./prod.env'), + index: path.resolve(__dirname, '../dist/index.html'), + assetsRoot: path.resolve(__dirname, '../dist'), + assetsSubDirectory: 'static', + assetsPublicPath: '/', + productionSourceMap: true, + // Gzip off by default as many popular static hosts such as + // Surge or Netlify already gzip all static assets for you. + // Before setting to `true`, make sure to: + // npm install --save-dev compression-webpack-plugin + productionGzip: false, + productionGzipExtensions: ['js', 'css'] + }, + dev: { + env: require('./dev.env'), + port: 8080, + assetsSubDirectory: 'static', + assetsPublicPath: '/', + proxyTable: {}, + // CSS Sourcemaps off by default because relative paths are "buggy" + // with this option, according to the CSS-Loader README + // (https://github.com/webpack/css-loader#sourcemaps) + // In our experience, they generally work as expected, + // just be aware of this issue when enabling this option. + cssSourceMap: false + } +} diff --git a/config/prod.env.js b/config/prod.env.js new file mode 100644 index 0000000..773d263 --- /dev/null +++ b/config/prod.env.js @@ -0,0 +1,3 @@ +module.exports = { + NODE_ENV: '"production"' +} diff --git a/config/test.env.js b/config/test.env.js new file mode 100644 index 0000000..89f90de --- /dev/null +++ b/config/test.env.js @@ -0,0 +1,6 @@ +var merge = require('webpack-merge') +var devEnv = require('./dev.env') + +module.exports = merge(devEnv, { + NODE_ENV: '"testing"' +}) diff --git a/index.html b/index.html new file mode 100644 index 0000000..734127f --- /dev/null +++ b/index.html @@ -0,0 +1,20 @@ + + + + + + vue-wechat + + + + + + + + + +
+ + + + diff --git a/package.json b/package.json new file mode 100644 index 0000000..834e973 --- /dev/null +++ b/package.json @@ -0,0 +1,55 @@ +{ + "name": "wechat", + "version": "1.0.0", + "description": "用vue.js开发微信app界面的高保真demo", + "author": "yangtao ", + "private": true, + "scripts": { + "dev": "node build/dev-server.js", + "build": "node build/build.js" + }, + "dependencies": { + "vue": "^1.0.21", + "babel-runtime": "^6.0.0" + }, + "devDependencies": { + "babel-core": "^6.0.0", + "babel-loader": "^6.0.0", + "babel-plugin-transform-runtime": "^6.0.0", + "babel-preset-es2015": "^6.0.0", + "babel-preset-stage-2": "^6.0.0", + "babel-register": "^6.0.0", + "connect-history-api-fallback": "^1.1.0", + "css-loader": "^0.24.0", + "eventsource-polyfill": "^0.9.6", + "express": "^4.13.3", + "extract-text-webpack-plugin": "^1.0.1", + "fastclick": "^1.0.6", + "file-loader": "^0.8.4", + "function-bind": "^1.0.2", + "html-webpack-plugin": "^2.8.1", + "http-proxy-middleware": "^0.12.0", + "json-loader": "^0.5.4", + "merge-descriptors": "^1.0.1", + "node-sass": "^3.8.0", + "ora": "^0.2.0", + "sass-loader": "^4.0.0", + "shelljs": "^0.6.0", + "style-loader": "^0.13.1", + "url-loader": "^0.5.7", + "vue-hot-reload-api": "^1.2.0", + "vue-html-loader": "^1.0.0", + "vue-loader": "^8.3.0", + "vue-resource": "^1.0.0", + "vue-router": "^0.7.13", + "vue-style-loader": "^1.0.0", + "vue-touch": "^1.1.0", + "vuex": "^1.0.0-rc.2", + "vuex-router-sync": "^2.1.0", + "webpack": "^1.12.2", + "webpack-dev-middleware": "^1.4.0", + "webpack-hot-middleware": "^2.6.0", + "webpack-merge": "^0.8.3", + "webpack-zepto": "^0.0.1" + } +} \ No newline at end of file diff --git a/src/app.vue b/src/app.vue new file mode 100644 index 0000000..2c15411 --- /dev/null +++ b/src/app.vue @@ -0,0 +1,50 @@ + + + diff --git a/src/assets/css/base.scss b/src/assets/css/base.scss new file mode 100644 index 0000000..4c1d243 --- /dev/null +++ b/src/assets/css/base.scss @@ -0,0 +1,34 @@ +$top-background:linear-gradient(to bottom, #303036, #3c3b40); + +.app-header { + position: absolute; + left: 0; + top: 0; + width: 100%; + z-index: 3; + height: 45px; + line-height: 45px; + font-size: 19px; + background:$top-background; + color: #ffffff; + text-align: center; + // background: rgba(0, 0, 0,.8); +} + +.app-content { + padding-top: 45px; + padding-bottom: 50px; + overflow: hidden; + position: relative; + height: 100%; +} + +.app-footer{ + bottom: 0; + left: 0; + width: 100%; + position: absolute; + z-index: 3; +} + + diff --git a/src/assets/css/common.scss b/src/assets/css/common.scss new file mode 100644 index 0000000..fe36a7e --- /dev/null +++ b/src/assets/css/common.scss @@ -0,0 +1,225 @@ +$top-background:linear-gradient(to bottom, #303036, #3c3b40); + +a, +button, +input, +textarea { + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} +input:focus{ + outline: none; +} +body{ + -webkit-overflow-scrolling: touch; + line-height: 1; + line-height: 1.6; +} + +html, +body, +#app { + font-family:PingFang SC,Hiragino Sans GB,Arial, Microsoft YaHei,Helvetica; + height: 100%; + overflow: hidden; + +} + +* { + box-sizing: border-box; +} + +*:before, +*:after { + box-sizing: inherit; +} +.clearfix:before{ + content: ""; + display: table; +} +.clearfix:after{ + content: ""; + display: table; + clear: both; +} +._full { + height: 100%; + /* background-color: #f0eff5; */ +} +._ellipsis{ + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +._left{ + float: left; +} +._right{ + float: right; +} +._scroll { + overflow: auto; +} +.margin-top-0{ + margin-top: 0; +} +/*1px线*/ +._line-fine:not(:first-child)::before { + content: ""; + position: absolute; + width: 200%; + left: 0; + top: 0; + transform: scale(.5); + transform-origin: 0 0; + -webkit-transform: scale(.5); + -webkit-transform-origin: 0 0; + background-color: #b7b7b7; + height: 1px; +} + +/*消息气泡*/ +._news-count{ + position: absolute; + font-style: initial; + right: -9px; + top: -5px; + padding: 0 4px; + width: auto; + min-width: 18px; + height: 18px; + line-height: 18px; + z-index:2 ; + border-radius: 9px; + color: #ffffff; + text-align: center; + font-size:14px; + background-color: #f43531; +} +.app-footer ._news-count{ + left: 100%; + margin-left: -10px; + right: initial; +} +._news-dot{ + position: absolute; + right: -3px; + top: -3px; + width: 10px; + height: 10px; + z-index:2; + border-radius: 50%; + color: #ffffff; + text-align: center; + background-color: red; + background-color: #f43531; +} +/*weui*/ +.weui_cells_only::before{ + left: 15px; +} + +/*cell 箭头*/ +.weui_select_before .weui_cell_hd::before, +.weui_panel_access .weui_panel_ft::after, +.weui_cells_access .weui_cell_ft::after{ + height: 11px; + width: 11px; +} + +/* + router-view transition="cover" + cover开头的 是router-view过渡切换是公用的样式 + _cover-* 是会被cover 影响的元素 +*/ +/* transitoin */ +.cover-transition { + opacity: 1; + transition: .35s opacity linear; +} +.cover-enter, +.cover-leave{ + opacity: .98; +} + +/*initial*/ +/*1*/ +._cover-top{ + position: relative; + height: 45px; + line-height: 45px; + padding: 0 15px 0 10px; + background:$top-background; + color: #ffffff; + transition: .15s all linear; + opacity: 1; +} +/*2*/ +._cover-top .top-title{ + transition: .2s all linear; + transform: translate3d(-50%,0,0); + /* opacity: 1; */ +} +/*3*/ +._cover-content{ + transition: .2s all ease-in-out; + opacity: 1; + transform: translate3d(0%,0,0); + height: calc(100% - 45px); + position: relative; + background-color: #ebebeb; +} + + +/*enter ,leaver*/ +/*1*/ +.cover-enter ._cover-top, +.cover-leave ._cover-top{ + opacity: 0; +} +/*2*/ +.cover-enter ._cover-top .top-title, +.cover-leave ._cover-top .top-title { + transform: translate3d(0%,0,0); +} +/*3*/ +.cover-enter ._cover-content{ + transform: translate3d(80%,0,0); +} +.cover-leave ._cover-content { + transition: .25s all ease; + transform: translate3d(100%,0,0); +} + + +/* + router开头的 是router-view最外层的export组件元素 +*/ +/* 保证next router page 能覆盖住current page */ +._full_inner{ + position: relative; + height: 100%; + z-index: 1; +} +._full_router{ + position: absolute; + z-index: 2; + top: 0; + left: 0; + height:100%; + width: 100%; +} + +/* effect30 */ +.app-header ._effect, +.app-content ._effect, +.app-footer ._effect{ + opacity: 1; + transition: .2s all linear; +} +._effect--30{ + transform:translate3d(-30%,0,0); +} +._effect--50{ + opacity: 0; + transform:translate3d(-50%,0,0); +} \ No newline at end of file diff --git a/src/assets/css/iconfont.css b/src/assets/css/iconfont.css new file mode 100644 index 0000000..d5538ad --- /dev/null +++ b/src/assets/css/iconfont.css @@ -0,0 +1,52 @@ + +@font-face {font-family: "iconfont"; + src: url('../fonts/iconfont.eot?t=1472541941'); /* IE9*/ + src: url('../fonts/iconfont.eot?t=1472541941#iefix') format('embedded-opentype'), /* IE6-IE8 */ + url('../fonts/iconfont.woff?t=1472541941') format('woff'), /* chrome, firefox */ + url('../fonts/iconfont.ttf?t=1472541941') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/ + url('../fonts/iconfont.svg?t=1472541941#iconfont') format('svg'); /* iOS 4.1- */ +} + +@font-face { + font-family: 'iconfont'; + src: url('http://at.alicdn.com/t/font_1473316944_0904915.eot'); /* IE9*/ + src: url('http://at.alicdn.com/t/font_1473316944_0904915.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ + url('http://at.alicdn.com/t/font_1473316944_0904915.woff') format('woff'), /* chrome、firefox */ + url('http://at.alicdn.com/t/font_1473316944_0904915.ttf') format('truetype'), /* chrome、firefox、opera、Safari, Android, iOS 4.2+*/ + url('http://at.alicdn.com/t/font_1473316944_0904915.svg#iconfont') format('svg'); /* iOS 4.1- */ +} + +.iconfont { + font-family:"iconfont" !important; + font-size:16px; + font-style:normal; + -webkit-font-smoothing: antialiased; + -webkit-text-stroke-width: 0.2px; + -moz-osx-font-smoothing: grayscale; +} + +/**/ +.icon-tips-jia::before { content: "\e605"; } +.icon-return-arrow::before { content: "\e60a"; } +.icon-tips-add-friend::before { content: "\e606"; } +.icon-chat-set::before { content: "\e60e"; } +.icon-mute::before { content: "\e604"; } +.icon-tips-xiaoxi::before { content: "\e607"; } +.icon-chat-person::before { content: "\e60c"; } +.icon-more::before { content: "\e60b"; } +.icon-tips-saoyisao::before { content: "\e608"; } +.icon-wechat::before { content: "\e600"; } +.icon-me::before { content: "\e601"; } +.icon-dialogue-jia::before { content: "\e615"; } +.icon-tips-fukuan::before { content: "\e609"; } +.icon-contact::before { content: "\e610"; } +.icon-find::before { content: "\e603"; } +.icon-chat-group::before { content: "\e60d"; } +.icon-chat-detail-add::before { content: "\e616"; } + +.icon-dialogue-voice::before { content: "\e60f"; } +.icon-dialogue-jianpan::before { content: "\e611"; } +.icon-dialogue-smile::before { content: "\e612"; } +.icon-dialogue-bar-jianpan::before{ content: "\e602"; } +.icon-dialogue-bar-menu::before{ content: "\e613"; } + diff --git a/src/assets/css/reset.css b/src/assets/css/reset.css new file mode 100644 index 0000000..643986d --- /dev/null +++ b/src/assets/css/reset.css @@ -0,0 +1,47 @@ +/* http://meyerweb.com/eric/tools/css/reset/ + v2.0 | 20110126 + License: none (public domain) +*/ + +html, body, div, span, applet, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +a, abbr, acronym, address, big, cite, code, +del, dfn, em, img, ins, kbd, q, s, samp, +small, strike, strong, sub, sup, tt, +b, u, i, center, +dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td, +article, aside, canvas, details, embed, +figure, figcaption, footer, header, hgroup, +menu, nav, output, ruby, section, summary, +time, mark, audio, video { + margin: 0; + padding: 0; + border: 0; + font-size: 100%; + vertical-align: baseline; +} +/* HTML5 display-role reset for older browsers */ +article, aside, details, figcaption, figure, +footer, header, hgroup, menu, nav, section { + display: block; +} +body { + line-height: 1; +} +ol, ul { + list-style: none; +} +blockquote, q { + quotes: none; +} +blockquote:before, blockquote:after, +q:before, q:after { + content: ''; + content: none; +} +table { + border-collapse: collapse; + border-spacing: 0; +} \ No newline at end of file diff --git a/src/assets/css/weui.min.css b/src/assets/css/weui.min.css new file mode 100644 index 0000000..03498f5 --- /dev/null +++ b/src/assets/css/weui.min.css @@ -0,0 +1,5 @@ +/*! + * WeUI v0.4.3 (https://github.com/weui/weui) + * Copyright 2016 Tencent, Inc. + * Licensed under the MIT license + */html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{line-height:1.6;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}*{margin:0;padding:0}a img{border:0}a{text-decoration:none}@font-face{font-weight:400;font-style:normal;font-family:weui;src:url('data:application/octet-stream;base64,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') format('truetype')}[class*=" weui_icon_"]:before,[class^=weui_icon_]:before{font-family:weui;font-style:normal;font-weight:400;speak:none;display:inline-block;vertical-align:middle;text-decoration:inherit;width:1em;margin-right:.2em;text-align:center;font-variant:normal;text-transform:none;line-height:1em;margin-left:.2em}.weui_icon_circle:before{content:"\EA01"}.weui_icon_download:before{content:"\EA02"}.weui_icon_info:before{content:"\EA03"}.weui_icon_safe_success:before{content:"\EA04"}.weui_icon_safe_warn:before{content:"\EA05"}.weui_icon_success:before{content:"\EA06"}.weui_icon_success_circle:before{content:"\EA07"}.weui_icon_success_no_circle:before{content:"\EA08"}.weui_icon_waiting:before{content:"\EA09"}.weui_icon_waiting_circle:before{content:"\EA0A"}.weui_icon_warn:before{content:"\EA0B"}.weui_icon_info_circle:before{content:"\EA0C"}.weui_icon_cancel:before{content:"\EA0D"}.weui_icon_search:before{content:"\EA0E"}.weui_icon_clear:before{content:"\EA0F"}[class*=" weui_icon_"]:before,[class^=weui_icon_]:before{margin:0}.weui_icon_success:before{font-size:23px;color:#09bb07}.weui_icon_waiting:before{font-size:23px;color:#10aeff}.weui_icon_warn:before{font-size:23px;color:#f43530}.weui_icon_info:before{font-size:23px;color:#10aeff}.weui_icon_success_circle:before,.weui_icon_success_no_circle:before{font-size:23px;color:#09bb07}.weui_icon_waiting_circle:before{font-size:23px;color:#10aeff}.weui_icon_circle:before{font-size:23px;color:#c9c9c9}.weui_icon_download:before,.weui_icon_info_circle:before{font-size:23px;color:#09bb07}.weui_icon_safe_success:before{color:#09bb07}.weui_icon_safe_warn:before{color:#ffbe00}.weui_icon_cancel:before{color:#f43530;font-size:22px}.weui_icon_clear:before,.weui_icon_search:before{color:#b2b2b2;font-size:14px}.weui_icon_msg:before{font-size:104px}.weui_icon_warn.weui_icon_msg:before{color:#f76260}.weui_icon_safe:before{font-size:104px}.weui_btn.weui_btn_mini{line-height:1.9;font-size:14px;padding:0 .75em;display:inline-block}button.weui_btn,input.weui_btn{width:100%;border-width:0;outline:0;-webkit-appearance:none}button.weui_btn:focus,input.weui_btn:focus{outline:0}button.weui_btn_inline,button.weui_btn_mini,input.weui_btn_inline,input.weui_btn_mini{width:auto}.weui_btn+.weui_btn{margin-top:15px}.weui_btn.weui_btn_inline+.weui_btn.weui_btn_inline{margin-top:auto;margin-left:15px}.weui_btn_area{margin:1.17647059em 15px .3em}.weui_btn_area.weui_btn_area_inline{display:-webkit-box;display:-webkit-flex;display:flex}.weui_btn_area.weui_btn_area_inline .weui_btn{margin-top:auto;margin-right:15px;width:100%;-webkit-box-flex:1;-webkit-flex:1;flex:1}.weui_btn_area.weui_btn_area_inline .weui_btn:last-child{margin-right:0}.weui_btn{position:relative;display:block;margin-left:auto;margin-right:auto;padding-left:14px;padding-right:14px;box-sizing:border-box;font-size:18px;text-align:center;text-decoration:none;color:#fff;line-height:2.33333333;border-radius:5px;-webkit-tap-highlight-color:rgba(0,0,0,0);overflow:hidden}.weui_btn:after{content:" ";width:200%;height:200%;position:absolute;top:0;left:0;border:1px solid rgba(0,0,0,.2);-webkit-transform:scale(.5);transform:scale(.5);-webkit-transform-origin:0 0;transform-origin:0 0;box-sizing:border-box;border-radius:10px}.weui_btn.weui_btn_inline{display:inline-block}.weui_btn_default{background-color:#f7f7f7;color:#454545}.weui_btn_default:not(.weui_btn_disabled):visited{color:#454545}.weui_btn_default:not(.weui_btn_disabled):active{color:#a1a1a1;background-color:#dedede}.weui_btn_primary{background-color:#04be02}.weui_btn_primary:not(.weui_btn_disabled):visited{color:#fff}.weui_btn_primary:not(.weui_btn_disabled):active{color:hsla(0,0%,100%,.4);background-color:#039702}.weui_btn_warn{background-color:#ef4f4f}.weui_btn_warn:not(.weui_btn_disabled):visited{color:#fff}.weui_btn_warn:not(.weui_btn_disabled):active{color:hsla(0,0%,100%,.4);background-color:#c13e3e}.weui_btn_disabled{color:hsla(0,0%,100%,.6)}.weui_btn_disabled.weui_btn_default{color:#c9c9c9}.weui_btn_plain_primary{color:#04be02;border:1px solid #04be02}button.weui_btn_plain_primary,input.weui_btn_plain_primary{border-width:1px;background-color:transparent}.weui_btn_plain_primary:active{border-color:#039702}.weui_btn_plain_primary:after{border-width:0}.weui_btn_plain_default{color:#5a5a5a;border:1px solid #5a5a5a}button.weui_btn_plain_default,input.weui_btn_plain_default{border-width:1px;background-color:transparent}.weui_btn_plain_default:after{border-width:0}.weui_cell{position:relative}.weui_cell:before{content:" ";position:absolute;left:0;top:0;width:100%;height:1px;border-top:1px solid #d9d9d9;color:#d9d9d9;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(.5);transform:scaleY(.5);left:15px}.weui_cell:first-child:before{display:none}.weui_cells{margin-top:1.17647059em;background-color:#fff;line-height:1.41176471;font-size:17px;overflow:hidden;position:relative}.weui_cells:before{top:0;border-top:1px solid #d9d9d9;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui_cells:after,.weui_cells:before{content:" ";position:absolute;left:0;width:100%;height:1px;color:#d9d9d9}.weui_cells:after{bottom:0;border-bottom:1px solid #d9d9d9;-webkit-transform-origin:0 100%;transform-origin:0 100%;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui_cells_title{margin-top:.77em;margin-bottom:.3em;padding-left:15px;padding-right:15px;color:#888;font-size:14px}.weui_cells_title+.weui_cells{margin-top:0}.weui_cells_tips{margin-top:.3em;color:#888;padding-left:15px;padding-right:15px;font-size:14px}.weui_cell{padding:10px 15px;position:relative;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center}.weui_cell_ft{text-align:right;color:#888}.weui_cell_primary{-webkit-box-flex:1;-webkit-flex:1;flex:1}.weui_cells_access .weui_cell:not(.no_access){-webkit-tap-highlight-color:rgba(0,0,0,0)}.weui_cells_access .weui_cell:not(.no_access):active{background-color:#ececec}.weui_cells_access a.weui_cell{color:inherit}.weui_cells_access .weui_cell_ft:after{content:" ";display:inline-block;-webkit-transform:rotate(45deg);transform:rotate(45deg);height:6px;width:6px;border-width:2px 2px 0 0;border-color:#c8c8cd;border-style:solid;position:relative;top:-2px;top:-1px;margin-left:.3em}.weui_check_label{-webkit-tap-highlight-color:rgba(0,0,0,0)}.weui_check{position:absolute;left:-9999em}.weui_cells_radio .weui_cell_ft{padding-left:.35em}.weui_cells_radio .weui_cell:active{background-color:#ececec}.weui_cells_radio .weui_check:checked+.weui_icon_checked:before{display:block;content:'\EA08';color:#09bb07;font-size:16px}.weui_cells_checkbox .weui_cell_hd{padding-right:.35em}.weui_cells_checkbox .weui_cell:active{background-color:#ececec}.weui_cells_checkbox .weui_icon_checked:before{content:'\EA01';color:#c9c9c9;font-size:23px;display:block}.weui_cells_checkbox .weui_check:checked+.weui_icon_checked:before{content:'\EA06';color:#09bb07}.weui_label{display:block;width:105px;word-wrap:break-word;word-break:break-all}.weui_input{width:100%;border:0;outline:0;-webkit-appearance:none;background-color:transparent;font-size:inherit;color:inherit;height:1.41176471em;line-height:1.41176471}.weui_input::-webkit-inner-spin-button,.weui_input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.weui_textarea{display:block;border:0;resize:none;width:100%;color:inherit;font-size:1em;line-height:inherit;outline:0}.weui_textarea_counter{color:#b2b2b2;text-align:right}.weui_cell_warn .weui_textarea_counter{color:#e64340}.weui_toptips{display:none;position:fixed;-webkit-transform:translateZ(0);width:100%;top:0;line-height:2.3;font-size:14px;text-align:center;color:#fff;z-index:50000}.weui_toptips.weui_warn{background-color:#e64340}.weui_cells_form .weui_cell_warn{color:#e64340}.weui_cells_form .weui_cell_warn .weui_icon_warn{display:inline-block}.weui_cells_form .weui_cell_ft{font-size:0}.weui_cells_form .weui_icon_warn{display:none}.weui_cells_form input,.weui_cells_form label[for],.weui_cells_form textarea{-webkit-tap-highlight-color:rgba(0,0,0,0)}.weui_cell_select{padding:0}.weui_cell_select .weui_select{padding-right:30px}.weui_cell_select .weui_cell_bd:after{content:" ";display:inline-block;-webkit-transform:rotate(45deg);transform:rotate(45deg);height:6px;width:6px;border-width:2px 2px 0 0;border-color:#c8c8cd;border-style:solid;position:relative;top:-2px;position:absolute;top:50%;right:15px;margin-top:-3px}.weui_select{-webkit-appearance:none;border:0;outline:0;background-color:transparent;width:100%;font-size:inherit;height:44px;line-height:44px;position:relative;z-index:1;padding-left:15px}.weui_select_before{padding-right:15px}.weui_select_before .weui_select{width:105px;box-sizing:border-box}.weui_select_before .weui_cell_hd{position:relative}.weui_select_before .weui_cell_hd:after{content:" ";position:absolute;right:0;top:0;width:1px;height:100%;border-right:1px solid #d9d9d9;color:#d9d9d9;-webkit-transform-origin:100% 0;transform-origin:100% 0;-webkit-transform:scaleX(.5);transform:scaleX(.5)}.weui_select_before .weui_cell_hd:before{content:" ";display:inline-block;-webkit-transform:rotate(45deg);transform:rotate(45deg);height:6px;width:6px;border-width:2px 2px 0 0;border-color:#c8c8cd;border-style:solid;position:relative;top:-2px;position:absolute;top:50%;right:15px;margin-top:-3px}.weui_select_before .weui_cell_bd{padding-left:15px}.weui_select_before .weui_cell_bd:after{display:none}.weui_select_after{padding-left:15px}.weui_select_after .weui_select{padding-left:0}.weui_vcode{padding-top:0;padding-right:0;padding-bottom:0}.weui_vcode .weui_cell_ft img{margin-left:5px;height:44px;vertical-align:middle}.weui_cell_switch{padding-top:6px;padding-bottom:6px}.weui_switch{-webkit-appearance:none;appearance:none;position:relative;width:52px;height:32px;border:1px solid #dfdfdf;outline:0;border-radius:16px;box-sizing:border-box;background:#dfdfdf}.weui_switch:before{width:50px;background-color:#fdfdfd}.weui_switch:after,.weui_switch:before{content:" ";position:absolute;top:0;left:0;height:30px;border-radius:15px;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}.weui_switch:after{width:30px;background-color:#fff;box-shadow:0 1px 3px rgba(0,0,0,.4)}.weui_switch:checked{border-color:#04be02;background-color:#04be02}.weui_switch:checked:before{-webkit-transform:scale(0);transform:scale(0)}.weui_switch:checked:after{-webkit-transform:translateX(20px);transform:translateX(20px)}.weui_uploader_hd{padding-top:0;padding-right:0;padding-left:0}.weui_uploader_hd .weui_cell_ft{font-size:1em}.weui_uploader_bd{margin-bottom:-4px;margin-right:-9px;overflow:hidden}.weui_uploader_files{list-style:none}.weui_uploader_file{float:left;margin-right:9px;margin-bottom:9px;width:79px;height:79px;background:no-repeat 50%;background-size:cover}.weui_uploader_status{position:relative}.weui_uploader_status:before{content:" ";position:absolute;top:0;right:0;bottom:0;left:0;background-color:rgba(0,0,0,.5)}.weui_uploader_status .weui_uploader_status_content{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);color:#fff}.weui_uploader_status .weui_icon_warn{display:block}.weui_uploader_input_wrp{float:left;position:relative;margin-right:9px;margin-bottom:9px;width:77px;height:77px;border:1px solid #d9d9d9}.weui_uploader_input_wrp:after,.weui_uploader_input_wrp:before{content:" ";position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);background-color:#d9d9d9}.weui_uploader_input_wrp:before{width:2px;height:39.5px}.weui_uploader_input_wrp:after{width:39.5px;height:2px}.weui_uploader_input_wrp:active{border-color:#999}.weui_uploader_input_wrp:active:after,.weui_uploader_input_wrp:active:before{background-color:#999}.weui_uploader_input{position:absolute;z-index:1;top:0;left:0;width:100%;height:100%;opacity:0;-webkit-tap-highlight-color:rgba(0,0,0,0)}.weui_msg{padding-top:36px;text-align:center}.weui_msg .weui_icon_area{margin-bottom:30px}.weui_msg .weui_text_area{margin-bottom:25px;padding:0 20px}.weui_msg .weui_msg_title{margin-bottom:5px;font-weight:400;font-size:20px}.weui_msg .weui_msg_desc{font-size:14px;color:#888}.weui_msg .weui_opr_area{margin-bottom:25px}.weui_msg .weui_extra_area{margin-bottom:15px;font-size:14px;color:#888}.weui_msg .weui_extra_area a{color:#61749b}@media screen and (min-height:438px){.weui_extra_area{position:fixed;left:0;bottom:0;width:100%;text-align:center}}.weui_article{padding:20px 15px;font-size:15px}.weui_article section{margin-bottom:1.5em}.weui_article h1{font-size:17px;font-weight:400;margin-bottom:.75em}.weui_article h2{font-size:16px;font-weight:400;margin-bottom:.3em}.weui_article h3{font-weight:400;font-size:15px}.weui_article *{max-width:100%;box-sizing:border-box;word-wrap:break-word}.weui_article p{margin:10px 0}.weui_tabbar{display:-webkit-box;display:-webkit-flex;display:flex;position:absolute;z-index:500;bottom:0;width:100%;background-color:#f7f7fa}.weui_tabbar:before{content:" ";position:absolute;left:0;top:0;width:100%;height:1px;border-top:1px solid #979797;color:#979797;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui_tabbar_item{display:block;-webkit-box-flex:1;-webkit-flex:1;flex:1;padding:7px 0 0;-webkit-tap-highlight-color:transparent}.weui_tabbar_item.weui_bar_item_on .weui_tabbar_label{color:#09bb07}.weui_tabbar_icon{margin:0 auto;width:24px;height:24px}.weui_tabbar_icon img{display:block;width:100%;height:100%}.weui_tabbar_icon+.weui_tabbar_label{margin-top:5px}.weui_tabbar_label{text-align:center;color:#888;font-size:12px}.weui_navbar{display:-webkit-box;display:-webkit-flex;display:flex;position:absolute;z-index:500;top:0;width:100%;background-color:#fafafa}.weui_navbar:after{content:" ";position:absolute;left:0;bottom:0;width:100%;height:1px;border-bottom:1px solid #bcbab6;color:#bcbab6;-webkit-transform-origin:0 100%;transform-origin:0 100%;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui_navbar+.weui_tab_bd{padding-top:50px;padding-bottom:0}.weui_navbar_item{position:relative;display:block;-webkit-box-flex:1;-webkit-flex:1;flex:1;padding:13px 0;text-align:center;font-size:15px;-webkit-tap-highlight-color:transparent}.weui_navbar_item:active{background-color:#ededed}.weui_navbar_item.weui_bar_item_on{background-color:#eaeaea}.weui_navbar_item:after{content:" ";position:absolute;right:0;top:0;width:1px;height:100%;border-right:1px solid #ccc;color:#ccc;-webkit-transform-origin:100% 0;transform-origin:100% 0;-webkit-transform:scaleX(.5);transform:scaleX(.5)}.weui_navbar_item:last-child:after{display:none}.weui_tab{position:relative;height:100%}.weui_tab_bd{box-sizing:border-box;height:100%;padding-bottom:55px;overflow:auto;-webkit-overflow-scrolling:touch}.weui_tab_bd_item{display:none}.weui_tab_bd_item_active{display:block}.weui_progress{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center}.weui_progress_bar{background-color:#ebebeb;height:3px;-webkit-box-flex:1;-webkit-flex:1;flex:1}.weui_progress_inner_bar{width:0;height:100%;background-color:#09bb07}.weui_progress_opr{display:block;margin-left:15px;font-size:0}.weui_panel{background-color:#fff;margin-top:10px;position:relative;overflow:hidden}.weui_panel:first-child{margin-top:0}.weui_panel:before{top:0;border-top:1px solid #e5e5e5;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui_panel:after,.weui_panel:before{content:" ";position:absolute;left:0;width:100%;height:1px;color:#e5e5e5}.weui_panel:after{bottom:0;border-bottom:1px solid #e5e5e5;-webkit-transform-origin:0 100%;transform-origin:0 100%;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui_panel_hd{padding:14px 15px 10px;color:#999;font-size:13px;position:relative}.weui_panel_hd:after{content:" ";position:absolute;left:0;bottom:0;width:100%;height:1px;border-bottom:1px solid #e5e5e5;color:#e5e5e5;-webkit-transform-origin:0 100%;transform-origin:0 100%;-webkit-transform:scaleY(.5);transform:scaleY(.5);left:15px}.weui_panel_ft{padding:10px 15px 12px;color:#999;font-size:14px;position:relative}.weui_panel_ft:before{content:" ";position:absolute;left:0;top:0;width:100%;height:1px;border-top:1px solid #e5e5e5;color:#e5e5e5;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(.5);transform:scaleY(.5);left:15px}.weui_panel_access .weui_panel_ft{display:block;color:#586c94;-webkit-tap-highlight-color:rgba(0,0,0,0)}.weui_panel_access .weui_panel_ft:active{background-color:#ececec}.weui_panel_access .weui_panel_ft:after{content:" ";display:inline-block;-webkit-transform:rotate(45deg);transform:rotate(45deg);height:6px;width:6px;border-width:2px 2px 0 0;border-color:#c7c7cc;border-style:solid;position:relative;top:-2px;position:absolute;right:15px;top:50%;margin-top:-4px}.weui_media_box{padding:15px;position:relative}.weui_media_box:before{content:" ";position:absolute;left:0;top:0;width:100%;height:1px;border-top:1px solid #e5e5e5;color:#e5e5e5;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(.5);transform:scaleY(.5);left:15px}.weui_media_box:first-child:before{display:none}a.weui_media_box{color:#000;-webkit-tap-highlight-color:rgba(0,0,0,0)}a.weui_media_box:active{background-color:#ececec}.weui_media_box .weui_media_title{font-weight:400;font-size:17px;width:auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;word-wrap:break-word;word-break:break-all}.weui_media_box .weui_media_desc{color:#999;font-size:13px;line-height:1.2;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.weui_media_box.weui_media_text .weui_media_title{margin-bottom:8px}.weui_media_box.weui_media_text .weui_media_info{margin-top:15px;padding-bottom:5px;font-size:13px;color:#cecece;line-height:1em;list-style:none;overflow:hidden}.weui_media_box.weui_media_text .weui_media_info_meta{float:left;padding-right:1em}.weui_media_box.weui_media_text .weui_media_info_meta.weui_media_info_meta_extra{padding-left:1em;border-left:1px solid #cecece}.weui_media_box.weui_media_appmsg{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center}.weui_media_box.weui_media_appmsg .weui_media_hd{margin-right:.8em;width:60px;height:60px;line-height:60px;text-align:center}.weui_media_box.weui_media_appmsg .weui_media_appmsg_thumb{width:100%;max-height:100%;vertical-align:top}.weui_media_box.weui_media_appmsg .weui_media_bd{-webkit-box-flex:1;-webkit-flex:1;flex:1;min-width:0}.weui_media_box.weui_media_small_appmsg{padding:0}.weui_media_box.weui_media_small_appmsg .weui_cells{margin-top:0}.weui_media_box.weui_media_small_appmsg .weui_cells:before{display:none}.weui_grids{position:relative;overflow:hidden}.weui_grids:before{content:'';position:absolute;box-sizing:border-box;width:200%;height:200%;left:0;top:0;border:1px solid #d9d9d9;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scale(.5);transform:scale(.5)}.weui_grid{position:relative;float:left;padding:20px 10px;width:33.33333333%;box-sizing:border-box}.weui_grid:before{content:'';position:absolute;box-sizing:border-box;width:200%;height:200%;left:0;top:0;border-bottom:1px solid #d9d9d9;border-right:1px solid #d9d9d9;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scale(.5);transform:scale(.5)}.weui_grid:nth-child(3n):before{border-right-width:0}.weui_grid:active{background-color:#e4e4e4}.weui_grid_icon{width:28px;height:28px;margin:0 auto}.weui_grid_icon img{display:block;width:100%;height:100%}.weui_grid_icon+.weui_grid_label{margin-top:5px}.weui_grid_label{display:block;text-align:center;color:#000;font-size:14px}.weui_dialog{position:fixed;z-index:5000;width:85%;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);background-color:#fafafc;text-align:center;border-radius:3px;overflow:hidden}.weui_dialog_confirm .weui_dialog .weui_dialog_hd{padding:1.2em 20px .5em}.weui_dialog_confirm .weui_dialog .weui_dialog_bd{text-align:left}.weui_dialog_hd{padding:1.2em 0 .5em}.weui_dialog_title{font-weight:400;font-size:17px}.weui_dialog_bd{padding:0 20px;font-size:15px;color:#888;word-wrap:break-word;word-break:break-all}.weui_dialog_ft{position:relative;line-height:42px;margin-top:20px;font-size:17px;display:-webkit-box;display:-webkit-flex;display:flex}.weui_dialog_ft a{display:block;-webkit-box-flex:1;-webkit-flex:1;flex:1;color:#3cc51f;text-decoration:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}.weui_dialog_ft a:active{background-color:#eee}.weui_dialog_ft:after{content:" ";position:absolute;left:0;top:0;width:100%;height:1px;border-top:1px solid #d5d5d6;color:#d5d5d6;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui_dialog_confirm .weui_dialog_ft a{position:relative}.weui_dialog_confirm .weui_dialog_ft a:after{content:" ";position:absolute;left:0;top:0;width:1px;height:100%;border-left:1px solid #d5d5d6;color:#d5d5d6;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleX(.5);transform:scaleX(.5)}.weui_dialog_confirm .weui_dialog_ft a:first-child:after{display:none}.weui_btn_dialog.default{color:#353535}.weui_btn_dialog.primary{color:#0bb20c}@media screen and (min-width:1024px){.weui_dialog{width:35%}}.weui_toast{position:fixed;z-index:50000;width:7.6em;min-height:7.6em;top:180px;left:50%;margin-left:-3.8em;background:rgba(40,40,40,.75);text-align:center;border-radius:5px;color:#fff}.weui_icon_toast{margin:22px 0 0;display:block}.weui_icon_toast:before{content:'\EA08';color:#fff;font-size:55px}.weui_toast_content{margin:0 0 15px}.weui_loading_toast .weui_toast_content{margin-top:64%;font-size:14px}.weui_loading{position:absolute;width:0;z-index:1;left:50%;top:38%}.weui_loading_leaf{position:absolute;top:-1px;opacity:.25}.weui_loading_leaf:before{content:" ";position:absolute;width:8.14px;height:3.08px;background:#d1d1d5;box-shadow:0 0 1px rgba(0,0,0,.0980392);border-radius:1px;-webkit-transform-origin:left 50% 0;transform-origin:left 50% 0}.weui_loading_leaf_0{-webkit-animation:a 1.25s linear infinite;animation:a 1.25s linear infinite}.weui_loading_leaf_0:before{-webkit-transform:rotate(0deg) translate(7.92px);transform:rotate(0deg) translate(7.92px)}.weui_loading_leaf_1{-webkit-animation:b 1.25s linear infinite;animation:b 1.25s linear infinite}.weui_loading_leaf_1:before{-webkit-transform:rotate(30deg) translate(7.92px);transform:rotate(30deg) translate(7.92px)}.weui_loading_leaf_2{-webkit-animation:c 1.25s linear infinite;animation:c 1.25s linear infinite}.weui_loading_leaf_2:before{-webkit-transform:rotate(60deg) translate(7.92px);transform:rotate(60deg) translate(7.92px)}.weui_loading_leaf_3{-webkit-animation:d 1.25s linear infinite;animation:d 1.25s linear infinite}.weui_loading_leaf_3:before{-webkit-transform:rotate(90deg) translate(7.92px);transform:rotate(90deg) translate(7.92px)}.weui_loading_leaf_4{-webkit-animation:e 1.25s linear infinite;animation:e 1.25s linear infinite}.weui_loading_leaf_4:before{-webkit-transform:rotate(120deg) translate(7.92px);transform:rotate(120deg) translate(7.92px)}.weui_loading_leaf_5{-webkit-animation:f 1.25s linear infinite;animation:f 1.25s linear infinite}.weui_loading_leaf_5:before{-webkit-transform:rotate(150deg) translate(7.92px);transform:rotate(150deg) translate(7.92px)}.weui_loading_leaf_6{-webkit-animation:g 1.25s linear infinite;animation:g 1.25s linear infinite}.weui_loading_leaf_6:before{-webkit-transform:rotate(180deg) translate(7.92px);transform:rotate(180deg) translate(7.92px)}.weui_loading_leaf_7{-webkit-animation:h 1.25s linear infinite;animation:h 1.25s linear infinite}.weui_loading_leaf_7:before{-webkit-transform:rotate(210deg) translate(7.92px);transform:rotate(210deg) translate(7.92px)}.weui_loading_leaf_8{-webkit-animation:i 1.25s linear infinite;animation:i 1.25s linear infinite}.weui_loading_leaf_8:before{-webkit-transform:rotate(240deg) translate(7.92px);transform:rotate(240deg) translate(7.92px)}.weui_loading_leaf_9{-webkit-animation:j 1.25s linear infinite;animation:j 1.25s linear infinite}.weui_loading_leaf_9:before{-webkit-transform:rotate(270deg) translate(7.92px);transform:rotate(270deg) translate(7.92px)}.weui_loading_leaf_10{-webkit-animation:k 1.25s linear infinite;animation:k 1.25s linear infinite}.weui_loading_leaf_10:before{-webkit-transform:rotate(300deg) translate(7.92px);transform:rotate(300deg) translate(7.92px)}.weui_loading_leaf_11{-webkit-animation:l 1.25s linear infinite;animation:l 1.25s linear infinite}.weui_loading_leaf_11:before{-webkit-transform:rotate(330deg) translate(7.92px);transform:rotate(330deg) translate(7.92px)}@-webkit-keyframes a{0%{opacity:.25}0.01%{opacity:.25}0.02%{opacity:1}60.01%{opacity:.25}to{opacity:.25}}@-webkit-keyframes b{0%{opacity:.25}8.34333%{opacity:.25}8.35333%{opacity:1}68.3433%{opacity:.25}to{opacity:.25}}@-webkit-keyframes c{0%{opacity:.25}16.6767%{opacity:.25}16.6867%{opacity:1}76.6767%{opacity:.25}to{opacity:.25}}@-webkit-keyframes d{0%{opacity:.25}25.01%{opacity:.25}25.02%{opacity:1}85.01%{opacity:.25}to{opacity:.25}}@-webkit-keyframes e{0%{opacity:.25}33.3433%{opacity:.25}33.3533%{opacity:1}93.3433%{opacity:.25}to{opacity:.25}}@-webkit-keyframes f{0%{opacity:.270958333333333}41.6767%{opacity:.25}41.6867%{opacity:1}1.67667%{opacity:.25}to{opacity:.270958333333333}}@-webkit-keyframes g{0%{opacity:.375125}50.01%{opacity:.25}50.02%{opacity:1}10.01%{opacity:.25}to{opacity:.375125}}@-webkit-keyframes h{0%{opacity:.479291666666667}58.3433%{opacity:.25}58.3533%{opacity:1}18.3433%{opacity:.25}to{opacity:.479291666666667}}@-webkit-keyframes i{0%{opacity:.583458333333333}66.6767%{opacity:.25}66.6867%{opacity:1}26.6767%{opacity:.25}to{opacity:.583458333333333}}@-webkit-keyframes j{0%{opacity:.687625}75.01%{opacity:.25}75.02%{opacity:1}35.01%{opacity:.25}to{opacity:.687625}}@-webkit-keyframes k{0%{opacity:.791791666666667}83.3433%{opacity:.25}83.3533%{opacity:1}43.3433%{opacity:.25}to{opacity:.791791666666667}}@-webkit-keyframes l{0%{opacity:.895958333333333}91.6767%{opacity:.25}91.6867%{opacity:1}51.6767%{opacity:.25}to{opacity:.895958333333333}}.weui_mask{background:rgba(0,0,0,.6)}.weui_mask,.weui_mask_transition,.weui_mask_transparent{position:fixed;z-index:1000;width:100%;height:100%;top:0;left:0}.weui_mask_transition{display:none;background:transparent;-webkit-transition:background .3s;transition:background .3s}.weui_fade_toggle{background:rgba(0,0,0,.6)}.weui_actionsheet{position:fixed;left:0;bottom:0;-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:5000;width:100%;background-color:#efeff4;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}.weui_actionsheet_menu{background-color:#fff}.weui_actionsheet_action{margin-top:6px;background-color:#fff}.weui_actionsheet_cell{position:relative;padding:10px 0;text-align:center;font-size:18px}.weui_actionsheet_cell:before{content:" ";position:absolute;left:0;top:0;width:100%;height:1px;border-top:1px solid #d9d9d9;color:#d9d9d9;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui_actionsheet_cell:active{background-color:#ececec}.weui_actionsheet_cell:first-child:before{display:none}.weui_actionsheet_toggle{-webkit-transform:translate(0);transform:translate(0)}.weui_search_bar{position:relative;padding:8px 10px;display:-webkit-box;display:-webkit-flex;display:flex;box-sizing:border-box;background-color:#efeff4}.weui_search_bar:before{top:0;border-top:1px solid #c7c7c7;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui_search_bar:after,.weui_search_bar:before{content:" ";position:absolute;left:0;width:100%;height:1px;color:#c7c7c7}.weui_search_bar:after{bottom:0;border-bottom:1px solid #c7c7c7;-webkit-transform-origin:0 100%;transform-origin:0 100%;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.weui_search_bar.weui_search_focusing .weui_search_cancel{display:block}.weui_search_bar.weui_search_focusing .weui_search_text{display:none}.weui_search_outer{position:relative;-webkit-box-flex:1;-webkit-flex:auto;flex:auto;background-color:#efeff4}.weui_search_outer:after{content:'';position:absolute;left:0;top:0;width:200%;height:200%;-webkit-transform:scale(.5);transform:scale(.5);-webkit-transform-origin:0 0;transform-origin:0 0;border-radius:10px;border:1px solid #e6e6ea;box-sizing:border-box;background:#fff}.weui_search_inner{position:relative;padding-left:30px;padding-right:30px;height:100%;width:100%;box-sizing:border-box;z-index:1}.weui_search_inner .weui_search_input{padding:4px 0;width:100%;height:1.42857143em;border:0;font-size:14px;line-height:1.42857143em;box-sizing:content-box;background:transparent}.weui_search_inner .weui_search_input:focus{outline:none}.weui_search_inner .weui_icon_search{position:absolute;left:10px;top:-2px;line-height:28px}.weui_search_inner .weui_icon_clear{position:absolute;top:-2px;right:0;padding:0 10px;line-height:28px}.weui_search_text{position:absolute;top:1px;right:1px;bottom:1px;left:1px;z-index:2;border-radius:3px;text-align:center;color:#9b9b9b;background:#fff}.weui_search_text span{display:inline-block;font-size:14px;vertical-align:middle}.weui_search_text .weui_icon_search{margin-right:5px}.weui_search_cancel{display:none;margin-left:10px;line-height:28px;white-space:nowrap;color:#09bb07}.weui_search_input:not(:valid)~.weui_icon_clear{display:none}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration,input[type=search]::-webkit-search-results-button,input[type=search]::-webkit-search-results-decoration{display:none} \ No newline at end of file diff --git a/src/assets/demo.html b/src/assets/demo.html new file mode 100644 index 0000000..d1d8e1d --- /dev/null +++ b/src/assets/demo.html @@ -0,0 +1,74 @@ + + + + + + IconFont + + + + +
+

IconFont 图标

+ + + +
+ 第一步:使用font-face声明字体 +
+@font-face {font-family: 'iconfont';
+    src: url('iconfont.eot'); /* IE9*/
+    src: url('iconfont.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
+    url('iconfont.woff') format('woff'), /* chrome、firefox */
+    url('iconfont.ttf') format('truetype'), /* chrome、firefox、opera、Safari, Android, iOS 4.2+*/
+    url('iconfont.svg#iconfont') format('svg'); /* iOS 4.1- */
+}
+
+第二步:定义使用iconfont的样式 +
+.iconfont{
+    font-family:"iconfont" !important;
+    font-size:16px;font-style:normal;
+    -webkit-font-smoothing: antialiased;
+    -webkit-text-stroke-width: 0.2px;
+    -moz-osx-font-smoothing: grayscale;}
+
+第三步:挑选相应图标并获取字体编码,应用于页面 +
+<i class="iconfont">&#x33;</i>
+
+
+ +
+ + diff --git a/src/assets/fonts/f/iconfont.eot b/src/assets/fonts/f/iconfont.eot new file mode 100644 index 0000000..03869fb Binary files /dev/null and b/src/assets/fonts/f/iconfont.eot differ diff --git a/src/assets/fonts/f/iconfont.svg b/src/assets/fonts/f/iconfont.svg new file mode 100644 index 0000000..fab527a --- /dev/null +++ b/src/assets/fonts/f/iconfont.svg @@ -0,0 +1,101 @@ + + + + +Created by FontForge 20120731 at Fri Sep 2 18:17:55 2016 + By admin + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/fonts/f/iconfont.ttf b/src/assets/fonts/f/iconfont.ttf new file mode 100644 index 0000000..4a8bd9b Binary files /dev/null and b/src/assets/fonts/f/iconfont.ttf differ diff --git a/src/assets/fonts/f/iconfont.woff b/src/assets/fonts/f/iconfont.woff new file mode 100644 index 0000000..abe7de7 Binary files /dev/null and b/src/assets/fonts/f/iconfont.woff differ diff --git a/src/assets/fonts/iconfont.eot b/src/assets/fonts/iconfont.eot new file mode 100644 index 0000000..f6fca44 Binary files /dev/null and b/src/assets/fonts/iconfont.eot differ diff --git a/src/assets/fonts/iconfont.svg b/src/assets/fonts/iconfont.svg new file mode 100644 index 0000000..c7a365c --- /dev/null +++ b/src/assets/fonts/iconfont.svg @@ -0,0 +1,103 @@ + + + + +Created by FontForge 20120731 at Tue Sep 6 01:03:58 2016 + By admin + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/fonts/iconfont.ttf b/src/assets/fonts/iconfont.ttf new file mode 100644 index 0000000..f0e2649 Binary files /dev/null and b/src/assets/fonts/iconfont.ttf differ diff --git a/src/assets/fonts/iconfont.woff b/src/assets/fonts/iconfont.woff new file mode 100644 index 0000000..4472825 Binary files /dev/null and b/src/assets/fonts/iconfont.woff differ diff --git a/src/assets/images/friend-pic00.jpg b/src/assets/images/friend-pic00.jpg new file mode 100644 index 0000000..be58b6d Binary files /dev/null and b/src/assets/images/friend-pic00.jpg differ diff --git a/src/assets/images/friend-pic01.jpg b/src/assets/images/friend-pic01.jpg new file mode 100644 index 0000000..af6ae5d Binary files /dev/null and b/src/assets/images/friend-pic01.jpg differ diff --git a/src/assets/images/friend-pic02.jpg b/src/assets/images/friend-pic02.jpg new file mode 100644 index 0000000..12a0351 Binary files /dev/null and b/src/assets/images/friend-pic02.jpg differ diff --git a/src/assets/images/friend-pic03.jpg b/src/assets/images/friend-pic03.jpg new file mode 100644 index 0000000..55f3af4 Binary files /dev/null and b/src/assets/images/friend-pic03.jpg differ diff --git a/src/assets/images/group-pic01.png b/src/assets/images/group-pic01.png new file mode 100644 index 0000000..9a64e8a Binary files /dev/null and b/src/assets/images/group-pic01.png differ diff --git a/src/assets/images/puiblic-pic01.png b/src/assets/images/puiblic-pic01.png new file mode 100644 index 0000000..98c4c83 Binary files /dev/null and b/src/assets/images/puiblic-pic01.png differ diff --git a/src/assets/images/sub-pic01.png b/src/assets/images/sub-pic01.png new file mode 100644 index 0000000..1e8c97c Binary files /dev/null and b/src/assets/images/sub-pic01.png differ diff --git a/src/assets/js/zepto.min.js b/src/assets/js/zepto.min.js new file mode 100644 index 0000000..4821a1c --- /dev/null +++ b/src/assets/js/zepto.min.js @@ -0,0 +1,2 @@ +/* Zepto v1.2.0 - zepto event ajax form ie - zeptojs.com/license */ +!function(t,e){"function"==typeof define&&define.amd?define(function(){return e(t)}):e(t)}(this,function(t){var e=function(){function $(t){return null==t?String(t):S[C.call(t)]||"object"}function F(t){return"function"==$(t)}function k(t){return null!=t&&t==t.window}function M(t){return null!=t&&t.nodeType==t.DOCUMENT_NODE}function R(t){return"object"==$(t)}function Z(t){return R(t)&&!k(t)&&Object.getPrototypeOf(t)==Object.prototype}function z(t){var e=!!t&&"length"in t&&t.length,n=r.type(t);return"function"!=n&&!k(t)&&("array"==n||0===e||"number"==typeof e&&e>0&&e-1 in t)}function q(t){return a.call(t,function(t){return null!=t})}function H(t){return t.length>0?r.fn.concat.apply([],t):t}function I(t){return t.replace(/::/g,"/").replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z\d])([A-Z])/g,"$1_$2").replace(/_/g,"-").toLowerCase()}function V(t){return t in l?l[t]:l[t]=new RegExp("(^|\\s)"+t+"(\\s|$)")}function _(t,e){return"number"!=typeof e||h[I(t)]?e:e+"px"}function B(t){var e,n;return c[t]||(e=f.createElement(t),f.body.appendChild(e),n=getComputedStyle(e,"").getPropertyValue("display"),e.parentNode.removeChild(e),"none"==n&&(n="block"),c[t]=n),c[t]}function U(t){return"children"in t?u.call(t.children):r.map(t.childNodes,function(t){return 1==t.nodeType?t:void 0})}function X(t,e){var n,r=t?t.length:0;for(n=0;r>n;n++)this[n]=t[n];this.length=r,this.selector=e||""}function J(t,r,i){for(n in r)i&&(Z(r[n])||L(r[n]))?(Z(r[n])&&!Z(t[n])&&(t[n]={}),L(r[n])&&!L(t[n])&&(t[n]=[]),J(t[n],r[n],i)):r[n]!==e&&(t[n]=r[n])}function W(t,e){return null==e?r(t):r(t).filter(e)}function Y(t,e,n,r){return F(e)?e.call(t,n,r):e}function G(t,e,n){null==n?t.removeAttribute(e):t.setAttribute(e,n)}function K(t,n){var r=t.className||"",i=r&&r.baseVal!==e;return n===e?i?r.baseVal:r:void(i?r.baseVal=n:t.className=n)}function Q(t){try{return t?"true"==t||("false"==t?!1:"null"==t?null:+t+""==t?+t:/^[\[\{]/.test(t)?r.parseJSON(t):t):t}catch(e){return t}}function tt(t,e){e(t);for(var n=0,r=t.childNodes.length;r>n;n++)tt(t.childNodes[n],e)}var e,n,r,i,O,P,o=[],s=o.concat,a=o.filter,u=o.slice,f=t.document,c={},l={},h={"column-count":1,columns:1,"font-weight":1,"line-height":1,opacity:1,"z-index":1,zoom:1},p=/^\s*<(\w+|!)[^>]*>/,d=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,m=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,g=/^(?:body|html)$/i,v=/([A-Z])/g,y=["val","css","html","text","data","width","height","offset"],x=["after","prepend","before","append"],b=f.createElement("table"),E=f.createElement("tr"),j={tr:f.createElement("tbody"),tbody:b,thead:b,tfoot:b,td:E,th:E,"*":f.createElement("div")},w=/complete|loaded|interactive/,T=/^[\w-]*$/,S={},C=S.toString,N={},A=f.createElement("div"),D={tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},L=Array.isArray||function(t){return t instanceof Array};return N.matches=function(t,e){if(!e||!t||1!==t.nodeType)return!1;var n=t.matches||t.webkitMatchesSelector||t.mozMatchesSelector||t.oMatchesSelector||t.matchesSelector;if(n)return n.call(t,e);var r,i=t.parentNode,o=!i;return o&&(i=A).appendChild(t),r=~N.qsa(i,e).indexOf(t),o&&A.removeChild(t),r},O=function(t){return t.replace(/-+(.)?/g,function(t,e){return e?e.toUpperCase():""})},P=function(t){return a.call(t,function(e,n){return t.indexOf(e)==n})},N.fragment=function(t,n,i){var o,s,a;return d.test(t)&&(o=r(f.createElement(RegExp.$1))),o||(t.replace&&(t=t.replace(m,"<$1>")),n===e&&(n=p.test(t)&&RegExp.$1),n in j||(n="*"),a=j[n],a.innerHTML=""+t,o=r.each(u.call(a.childNodes),function(){a.removeChild(this)})),Z(i)&&(s=r(o),r.each(i,function(t,e){y.indexOf(t)>-1?s[t](e):s.attr(t,e)})),o},N.Z=function(t,e){return new X(t,e)},N.isZ=function(t){return t instanceof N.Z},N.init=function(t,n){var i;if(!t)return N.Z();if("string"==typeof t)if(t=t.trim(),"<"==t[0]&&p.test(t))i=N.fragment(t,RegExp.$1,n),t=null;else{if(n!==e)return r(n).find(t);i=N.qsa(f,t)}else{if(F(t))return r(f).ready(t);if(N.isZ(t))return t;if(L(t))i=q(t);else if(R(t))i=[t],t=null;else if(p.test(t))i=N.fragment(t.trim(),RegExp.$1,n),t=null;else{if(n!==e)return r(n).find(t);i=N.qsa(f,t)}}return N.Z(i,t)},r=function(t,e){return N.init(t,e)},r.extend=function(t){var e,n=u.call(arguments,1);return"boolean"==typeof t&&(e=t,t=n.shift()),n.forEach(function(n){J(t,n,e)}),t},N.qsa=function(t,e){var n,r="#"==e[0],i=!r&&"."==e[0],o=r||i?e.slice(1):e,s=T.test(o);return t.getElementById&&s&&r?(n=t.getElementById(o))?[n]:[]:1!==t.nodeType&&9!==t.nodeType&&11!==t.nodeType?[]:u.call(s&&!r&&t.getElementsByClassName?i?t.getElementsByClassName(o):t.getElementsByTagName(e):t.querySelectorAll(e))},r.contains=f.documentElement.contains?function(t,e){return t!==e&&t.contains(e)}:function(t,e){for(;e&&(e=e.parentNode);)if(e===t)return!0;return!1},r.type=$,r.isFunction=F,r.isWindow=k,r.isArray=L,r.isPlainObject=Z,r.isEmptyObject=function(t){var e;for(e in t)return!1;return!0},r.isNumeric=function(t){var e=Number(t),n=typeof t;return null!=t&&"boolean"!=n&&("string"!=n||t.length)&&!isNaN(e)&&isFinite(e)||!1},r.inArray=function(t,e,n){return o.indexOf.call(e,t,n)},r.camelCase=O,r.trim=function(t){return null==t?"":String.prototype.trim.call(t)},r.uuid=0,r.support={},r.expr={},r.noop=function(){},r.map=function(t,e){var n,i,o,r=[];if(z(t))for(i=0;i=0?t:t+this.length]},toArray:function(){return this.get()},size:function(){return this.length},remove:function(){return this.each(function(){null!=this.parentNode&&this.parentNode.removeChild(this)})},each:function(t){return o.every.call(this,function(e,n){return t.call(e,n,e)!==!1}),this},filter:function(t){return F(t)?this.not(this.not(t)):r(a.call(this,function(e){return N.matches(e,t)}))},add:function(t,e){return r(P(this.concat(r(t,e))))},is:function(t){return this.length>0&&N.matches(this[0],t)},not:function(t){var n=[];if(F(t)&&t.call!==e)this.each(function(e){t.call(this,e)||n.push(this)});else{var i="string"==typeof t?this.filter(t):z(t)&&F(t.item)?u.call(t):r(t);this.forEach(function(t){i.indexOf(t)<0&&n.push(t)})}return r(n)},has:function(t){return this.filter(function(){return R(t)?r.contains(this,t):r(this).find(t).size()})},eq:function(t){return-1===t?this.slice(t):this.slice(t,+t+1)},first:function(){var t=this[0];return t&&!R(t)?t:r(t)},last:function(){var t=this[this.length-1];return t&&!R(t)?t:r(t)},find:function(t){var e,n=this;return e=t?"object"==typeof t?r(t).filter(function(){var t=this;return o.some.call(n,function(e){return r.contains(e,t)})}):1==this.length?r(N.qsa(this[0],t)):this.map(function(){return N.qsa(this,t)}):r()},closest:function(t,e){var n=[],i="object"==typeof t&&r(t);return this.each(function(r,o){for(;o&&!(i?i.indexOf(o)>=0:N.matches(o,t));)o=o!==e&&!M(o)&&o.parentNode;o&&n.indexOf(o)<0&&n.push(o)}),r(n)},parents:function(t){for(var e=[],n=this;n.length>0;)n=r.map(n,function(t){return(t=t.parentNode)&&!M(t)&&e.indexOf(t)<0?(e.push(t),t):void 0});return W(e,t)},parent:function(t){return W(P(this.pluck("parentNode")),t)},children:function(t){return W(this.map(function(){return U(this)}),t)},contents:function(){return this.map(function(){return this.contentDocument||u.call(this.childNodes)})},siblings:function(t){return W(this.map(function(t,e){return a.call(U(e.parentNode),function(t){return t!==e})}),t)},empty:function(){return this.each(function(){this.innerHTML=""})},pluck:function(t){return r.map(this,function(e){return e[t]})},show:function(){return this.each(function(){"none"==this.style.display&&(this.style.display=""),"none"==getComputedStyle(this,"").getPropertyValue("display")&&(this.style.display=B(this.nodeName))})},replaceWith:function(t){return this.before(t).remove()},wrap:function(t){var e=F(t);if(this[0]&&!e)var n=r(t).get(0),i=n.parentNode||this.length>1;return this.each(function(o){r(this).wrapAll(e?t.call(this,o):i?n.cloneNode(!0):n)})},wrapAll:function(t){if(this[0]){r(this[0]).before(t=r(t));for(var e;(e=t.children()).length;)t=e.first();r(t).append(this)}return this},wrapInner:function(t){var e=F(t);return this.each(function(n){var i=r(this),o=i.contents(),s=e?t.call(this,n):t;o.length?o.wrapAll(s):i.append(s)})},unwrap:function(){return this.parent().each(function(){r(this).replaceWith(r(this).children())}),this},clone:function(){return this.map(function(){return this.cloneNode(!0)})},hide:function(){return this.css("display","none")},toggle:function(t){return this.each(function(){var n=r(this);(t===e?"none"==n.css("display"):t)?n.show():n.hide()})},prev:function(t){return r(this.pluck("previousElementSibling")).filter(t||"*")},next:function(t){return r(this.pluck("nextElementSibling")).filter(t||"*")},html:function(t){return 0 in arguments?this.each(function(e){var n=this.innerHTML;r(this).empty().append(Y(this,t,e,n))}):0 in this?this[0].innerHTML:null},text:function(t){return 0 in arguments?this.each(function(e){var n=Y(this,t,e,this.textContent);this.textContent=null==n?"":""+n}):0 in this?this.pluck("textContent").join(""):null},attr:function(t,r){var i;return"string"!=typeof t||1 in arguments?this.each(function(e){if(1===this.nodeType)if(R(t))for(n in t)G(this,n,t[n]);else G(this,t,Y(this,r,e,this.getAttribute(t)))}):0 in this&&1==this[0].nodeType&&null!=(i=this[0].getAttribute(t))?i:e},removeAttr:function(t){return this.each(function(){1===this.nodeType&&t.split(" ").forEach(function(t){G(this,t)},this)})},prop:function(t,e){return t=D[t]||t,1 in arguments?this.each(function(n){this[t]=Y(this,e,n,this[t])}):this[0]&&this[0][t]},removeProp:function(t){return t=D[t]||t,this.each(function(){delete this[t]})},data:function(t,n){var r="data-"+t.replace(v,"-$1").toLowerCase(),i=1 in arguments?this.attr(r,n):this.attr(r);return null!==i?Q(i):e},val:function(t){return 0 in arguments?(null==t&&(t=""),this.each(function(e){this.value=Y(this,t,e,this.value)})):this[0]&&(this[0].multiple?r(this[0]).find("option").filter(function(){return this.selected}).pluck("value"):this[0].value)},offset:function(e){if(e)return this.each(function(t){var n=r(this),i=Y(this,e,t,n.offset()),o=n.offsetParent().offset(),s={top:i.top-o.top,left:i.left-o.left};"static"==n.css("position")&&(s.position="relative"),n.css(s)});if(!this.length)return null;if(f.documentElement!==this[0]&&!r.contains(f.documentElement,this[0]))return{top:0,left:0};var n=this[0].getBoundingClientRect();return{left:n.left+t.pageXOffset,top:n.top+t.pageYOffset,width:Math.round(n.width),height:Math.round(n.height)}},css:function(t,e){if(arguments.length<2){var i=this[0];if("string"==typeof t){if(!i)return;return i.style[O(t)]||getComputedStyle(i,"").getPropertyValue(t)}if(L(t)){if(!i)return;var o={},s=getComputedStyle(i,"");return r.each(t,function(t,e){o[e]=i.style[O(e)]||s.getPropertyValue(e)}),o}}var a="";if("string"==$(t))e||0===e?a=I(t)+":"+_(t,e):this.each(function(){this.style.removeProperty(I(t))});else for(n in t)t[n]||0===t[n]?a+=I(n)+":"+_(n,t[n])+";":this.each(function(){this.style.removeProperty(I(n))});return this.each(function(){this.style.cssText+=";"+a})},index:function(t){return t?this.indexOf(r(t)[0]):this.parent().children().indexOf(this[0])},hasClass:function(t){return t?o.some.call(this,function(t){return this.test(K(t))},V(t)):!1},addClass:function(t){return t?this.each(function(e){if("className"in this){i=[];var n=K(this),o=Y(this,t,e,n);o.split(/\s+/g).forEach(function(t){r(this).hasClass(t)||i.push(t)},this),i.length&&K(this,n+(n?" ":"")+i.join(" "))}}):this},removeClass:function(t){return this.each(function(n){if("className"in this){if(t===e)return K(this,"");i=K(this),Y(this,t,n,i).split(/\s+/g).forEach(function(t){i=i.replace(V(t)," ")}),K(this,i.trim())}})},toggleClass:function(t,n){return t?this.each(function(i){var o=r(this),s=Y(this,t,i,K(this));s.split(/\s+/g).forEach(function(t){(n===e?!o.hasClass(t):n)?o.addClass(t):o.removeClass(t)})}):this},scrollTop:function(t){if(this.length){var n="scrollTop"in this[0];return t===e?n?this[0].scrollTop:this[0].pageYOffset:this.each(n?function(){this.scrollTop=t}:function(){this.scrollTo(this.scrollX,t)})}},scrollLeft:function(t){if(this.length){var n="scrollLeft"in this[0];return t===e?n?this[0].scrollLeft:this[0].pageXOffset:this.each(n?function(){this.scrollLeft=t}:function(){this.scrollTo(t,this.scrollY)})}},position:function(){if(this.length){var t=this[0],e=this.offsetParent(),n=this.offset(),i=g.test(e[0].nodeName)?{top:0,left:0}:e.offset();return n.top-=parseFloat(r(t).css("margin-top"))||0,n.left-=parseFloat(r(t).css("margin-left"))||0,i.top+=parseFloat(r(e[0]).css("border-top-width"))||0,i.left+=parseFloat(r(e[0]).css("border-left-width"))||0,{top:n.top-i.top,left:n.left-i.left}}},offsetParent:function(){return this.map(function(){for(var t=this.offsetParent||f.body;t&&!g.test(t.nodeName)&&"static"==r(t).css("position");)t=t.offsetParent;return t})}},r.fn.detach=r.fn.remove,["width","height"].forEach(function(t){var n=t.replace(/./,function(t){return t[0].toUpperCase()});r.fn[t]=function(i){var o,s=this[0];return i===e?k(s)?s["inner"+n]:M(s)?s.documentElement["scroll"+n]:(o=this.offset())&&o[t]:this.each(function(e){s=r(this),s.css(t,Y(this,i,e,s[t]()))})}}),x.forEach(function(n,i){var o=i%2;r.fn[n]=function(){var n,a,s=r.map(arguments,function(t){var i=[];return n=$(t),"array"==n?(t.forEach(function(t){return t.nodeType!==e?i.push(t):r.zepto.isZ(t)?i=i.concat(t.get()):void(i=i.concat(N.fragment(t)))}),i):"object"==n||null==t?t:N.fragment(t)}),u=this.length>1;return s.length<1?this:this.each(function(e,n){a=o?n:n.parentNode,n=0==i?n.nextSibling:1==i?n.firstChild:2==i?n:null;var c=r.contains(f.documentElement,a);s.forEach(function(e){if(u)e=e.cloneNode(!0);else if(!a)return r(e).remove();a.insertBefore(e,n),c&&tt(e,function(e){if(!(null==e.nodeName||"SCRIPT"!==e.nodeName.toUpperCase()||e.type&&"text/javascript"!==e.type||e.src)){var n=e.ownerDocument?e.ownerDocument.defaultView:t;n.eval.call(n,e.innerHTML)}})})})},r.fn[o?n+"To":"insert"+(i?"Before":"After")]=function(t){return r(t)[n](this),this}}),N.Z.prototype=X.prototype=r.fn,N.uniq=P,N.deserializeValue=Q,r.zepto=N,r}();return t.Zepto=e,void 0===t.$&&(t.$=e),function(e){function h(t){return t._zid||(t._zid=n++)}function p(t,e,n,r){if(e=d(e),e.ns)var i=m(e.ns);return(a[h(t)]||[]).filter(function(t){return t&&(!e.e||t.e==e.e)&&(!e.ns||i.test(t.ns))&&(!n||h(t.fn)===h(n))&&(!r||t.sel==r)})}function d(t){var e=(""+t).split(".");return{e:e[0],ns:e.slice(1).sort().join(" ")}}function m(t){return new RegExp("(?:^| )"+t.replace(" "," .* ?")+"(?: |$)")}function g(t,e){return t.del&&!f&&t.e in c||!!e}function v(t){return l[t]||f&&c[t]||t}function y(t,n,i,o,s,u,f){var c=h(t),p=a[c]||(a[c]=[]);n.split(/\s/).forEach(function(n){if("ready"==n)return e(document).ready(i);var a=d(n);a.fn=i,a.sel=s,a.e in l&&(i=function(t){var n=t.relatedTarget;return!n||n!==this&&!e.contains(this,n)?a.fn.apply(this,arguments):void 0}),a.del=u;var c=u||i;a.proxy=function(e){if(e=T(e),!e.isImmediatePropagationStopped()){e.data=o;var n=c.apply(t,e._args==r?[e]:[e].concat(e._args));return n===!1&&(e.preventDefault(),e.stopPropagation()),n}},a.i=p.length,p.push(a),"addEventListener"in t&&t.addEventListener(v(a.e),a.proxy,g(a,f))})}function x(t,e,n,r,i){var o=h(t);(e||"").split(/\s/).forEach(function(e){p(t,e,n,r).forEach(function(e){delete a[o][e.i],"removeEventListener"in t&&t.removeEventListener(v(e.e),e.proxy,g(e,i))})})}function T(t,n){return(n||!t.isDefaultPrevented)&&(n||(n=t),e.each(w,function(e,r){var i=n[e];t[e]=function(){return this[r]=b,i&&i.apply(n,arguments)},t[r]=E}),t.timeStamp||(t.timeStamp=Date.now()),(n.defaultPrevented!==r?n.defaultPrevented:"returnValue"in n?n.returnValue===!1:n.getPreventDefault&&n.getPreventDefault())&&(t.isDefaultPrevented=b)),t}function S(t){var e,n={originalEvent:t};for(e in t)j.test(e)||t[e]===r||(n[e]=t[e]);return T(n,t)}var r,n=1,i=Array.prototype.slice,o=e.isFunction,s=function(t){return"string"==typeof t},a={},u={},f="onfocusin"in t,c={focus:"focusin",blur:"focusout"},l={mouseenter:"mouseover",mouseleave:"mouseout"};u.click=u.mousedown=u.mouseup=u.mousemove="MouseEvents",e.event={add:y,remove:x},e.proxy=function(t,n){var r=2 in arguments&&i.call(arguments,2);if(o(t)){var a=function(){return t.apply(n,r?r.concat(i.call(arguments)):arguments)};return a._zid=h(t),a}if(s(n))return r?(r.unshift(t[n],t),e.proxy.apply(null,r)):e.proxy(t[n],t);throw new TypeError("expected function")},e.fn.bind=function(t,e,n){return this.on(t,e,n)},e.fn.unbind=function(t,e){return this.off(t,e)},e.fn.one=function(t,e,n,r){return this.on(t,e,n,r,1)};var b=function(){return!0},E=function(){return!1},j=/^([A-Z]|returnValue$|layer[XY]$|webkitMovement[XY]$)/,w={preventDefault:"isDefaultPrevented",stopImmediatePropagation:"isImmediatePropagationStopped",stopPropagation:"isPropagationStopped"};e.fn.delegate=function(t,e,n){return this.on(e,t,n)},e.fn.undelegate=function(t,e,n){return this.off(e,t,n)},e.fn.live=function(t,n){return e(document.body).delegate(this.selector,t,n),this},e.fn.die=function(t,n){return e(document.body).undelegate(this.selector,t,n),this},e.fn.on=function(t,n,a,u,f){var c,l,h=this;return t&&!s(t)?(e.each(t,function(t,e){h.on(t,n,a,e,f)}),h):(s(n)||o(u)||u===!1||(u=a,a=n,n=r),(u===r||a===!1)&&(u=a,a=r),u===!1&&(u=E),h.each(function(r,o){f&&(c=function(t){return x(o,t.type,u),u.apply(this,arguments)}),n&&(l=function(t){var r,s=e(t.target).closest(n,o).get(0);return s&&s!==o?(r=e.extend(S(t),{currentTarget:s,liveFired:o}),(c||u).apply(s,[r].concat(i.call(arguments,1)))):void 0}),y(o,t,u,a,n,l||c)}))},e.fn.off=function(t,n,i){var a=this;return t&&!s(t)?(e.each(t,function(t,e){a.off(t,n,e)}),a):(s(n)||o(i)||i===!1||(i=n,n=r),i===!1&&(i=E),a.each(function(){x(this,t,i,n)}))},e.fn.trigger=function(t,n){return t=s(t)||e.isPlainObject(t)?e.Event(t):T(t),t._args=n,this.each(function(){t.type in c&&"function"==typeof this[t.type]?this[t.type]():"dispatchEvent"in this?this.dispatchEvent(t):e(this).triggerHandler(t,n)})},e.fn.triggerHandler=function(t,n){var r,i;return this.each(function(o,a){r=S(s(t)?e.Event(t):t),r._args=n,r.target=a,e.each(p(a,t.type||t),function(t,e){return i=e.proxy(r),r.isImmediatePropagationStopped()?!1:void 0})}),i},"focusin focusout focus blur load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select keydown keypress keyup error".split(" ").forEach(function(t){e.fn[t]=function(e){return 0 in arguments?this.bind(t,e):this.trigger(t)}}),e.Event=function(t,e){s(t)||(e=t,t=e.type);var n=document.createEvent(u[t]||"Events"),r=!0;if(e)for(var i in e)"bubbles"==i?r=!!e[i]:n[i]=e[i];return n.initEvent(t,r,!0),T(n)}}(e),function(e){function p(t,n,r){var i=e.Event(n);return e(t).trigger(i,r),!i.isDefaultPrevented()}function d(t,e,n,i){return t.global?p(e||r,n,i):void 0}function m(t){t.global&&0===e.active++&&d(t,null,"ajaxStart")}function g(t){t.global&&!--e.active&&d(t,null,"ajaxStop")}function v(t,e){var n=e.context;return e.beforeSend.call(n,t,e)===!1||d(e,n,"ajaxBeforeSend",[t,e])===!1?!1:void d(e,n,"ajaxSend",[t,e])}function y(t,e,n,r){var i=n.context,o="success";n.success.call(i,t,o,e),r&&r.resolveWith(i,[t,o,e]),d(n,i,"ajaxSuccess",[e,n,t]),b(o,e,n)}function x(t,e,n,r,i){var o=r.context;r.error.call(o,n,e,t),i&&i.rejectWith(o,[n,e,t]),d(r,o,"ajaxError",[n,r,t||e]),b(e,n,r)}function b(t,e,n){var r=n.context;n.complete.call(r,e,t),d(n,r,"ajaxComplete",[e,n]),g(n)}function E(t,e,n){if(n.dataFilter==j)return t;var r=n.context;return n.dataFilter.call(r,t,e)}function j(){}function w(t){return t&&(t=t.split(";",2)[0]),t&&(t==c?"html":t==f?"json":a.test(t)?"script":u.test(t)&&"xml")||"text"}function T(t,e){return""==e?t:(t+"&"+e).replace(/[&?]{1,2}/,"?")}function S(t){t.processData&&t.data&&"string"!=e.type(t.data)&&(t.data=e.param(t.data,t.traditional)),!t.data||t.type&&"GET"!=t.type.toUpperCase()&&"jsonp"!=t.dataType||(t.url=T(t.url,t.data),t.data=void 0)}function C(t,n,r,i){return e.isFunction(n)&&(i=r,r=n,n=void 0),e.isFunction(r)||(i=r,r=void 0),{url:t,data:n,success:r,dataType:i}}function O(t,n,r,i){var o,s=e.isArray(n),a=e.isPlainObject(n);e.each(n,function(n,u){o=e.type(u),i&&(n=r?i:i+"["+(a||"object"==o||"array"==o?n:"")+"]"),!i&&s?t.add(u.name,u.value):"array"==o||!r&&"object"==o?O(t,u,r,n):t.add(n,u)})}var i,o,n=+new Date,r=t.document,s=/)<[^<]*)*<\/script>/gi,a=/^(?:text|application)\/javascript/i,u=/^(?:text|application)\/xml/i,f="application/json",c="text/html",l=/^\s*$/,h=r.createElement("a");h.href=t.location.href,e.active=0,e.ajaxJSONP=function(i,o){if(!("type"in i))return e.ajax(i);var c,p,s=i.jsonpCallback,a=(e.isFunction(s)?s():s)||"Zepto"+n++,u=r.createElement("script"),f=t[a],l=function(t){e(u).triggerHandler("error",t||"abort")},h={abort:l};return o&&o.promise(h),e(u).on("load error",function(n,r){clearTimeout(p),e(u).off().remove(),"error"!=n.type&&c?y(c[0],h,i,o):x(null,r||"error",h,i,o),t[a]=f,c&&e.isFunction(f)&&f(c[0]),f=c=void 0}),v(h,i)===!1?(l("abort"),h):(t[a]=function(){c=arguments},u.src=i.url.replace(/\?(.+)=\?/,"?$1="+a),r.head.appendChild(u),i.timeout>0&&(p=setTimeout(function(){l("timeout")},i.timeout)),h)},e.ajaxSettings={type:"GET",beforeSend:j,success:j,error:j,complete:j,context:null,global:!0,xhr:function(){return new t.XMLHttpRequest},accepts:{script:"text/javascript, application/javascript, application/x-javascript",json:f,xml:"application/xml, text/xml",html:c,text:"text/plain"},crossDomain:!1,timeout:0,processData:!0,cache:!0,dataFilter:j},e.ajax=function(n){var u,f,s=e.extend({},n||{}),a=e.Deferred&&e.Deferred();for(i in e.ajaxSettings)void 0===s[i]&&(s[i]=e.ajaxSettings[i]);m(s),s.crossDomain||(u=r.createElement("a"),u.href=s.url,u.href=u.href,s.crossDomain=h.protocol+"//"+h.host!=u.protocol+"//"+u.host),s.url||(s.url=t.location.toString()),(f=s.url.indexOf("#"))>-1&&(s.url=s.url.slice(0,f)),S(s);var c=s.dataType,p=/\?.+=\?/.test(s.url);if(p&&(c="jsonp"),s.cache!==!1&&(n&&n.cache===!0||"script"!=c&&"jsonp"!=c)||(s.url=T(s.url,"_="+Date.now())),"jsonp"==c)return p||(s.url=T(s.url,s.jsonp?s.jsonp+"=?":s.jsonp===!1?"":"callback=?")),e.ajaxJSONP(s,a);var P,d=s.accepts[c],g={},b=function(t,e){g[t.toLowerCase()]=[t,e]},C=/^([\w-]+:)\/\//.test(s.url)?RegExp.$1:t.location.protocol,N=s.xhr(),O=N.setRequestHeader;if(a&&a.promise(N),s.crossDomain||b("X-Requested-With","XMLHttpRequest"),b("Accept",d||"*/*"),(d=s.mimeType||d)&&(d.indexOf(",")>-1&&(d=d.split(",",2)[0]),N.overrideMimeType&&N.overrideMimeType(d)),(s.contentType||s.contentType!==!1&&s.data&&"GET"!=s.type.toUpperCase())&&b("Content-Type",s.contentType||"application/x-www-form-urlencoded"),s.headers)for(o in s.headers)b(o,s.headers[o]);if(N.setRequestHeader=b,N.onreadystatechange=function(){if(4==N.readyState){N.onreadystatechange=j,clearTimeout(P);var t,n=!1;if(N.status>=200&&N.status<300||304==N.status||0==N.status&&"file:"==C){if(c=c||w(s.mimeType||N.getResponseHeader("content-type")),"arraybuffer"==N.responseType||"blob"==N.responseType)t=N.response;else{t=N.responseText;try{t=E(t,c,s),"script"==c?(1,eval)(t):"xml"==c?t=N.responseXML:"json"==c&&(t=l.test(t)?null:e.parseJSON(t))}catch(r){n=r}if(n)return x(n,"parsererror",N,s,a)}y(t,N,s,a)}else x(N.statusText||null,N.status?"error":"abort",N,s,a)}},v(N,s)===!1)return N.abort(),x(null,"abort",N,s,a),N;var A="async"in s?s.async:!0;if(N.open(s.type,s.url,A,s.username,s.password),s.xhrFields)for(o in s.xhrFields)N[o]=s.xhrFields[o];for(o in g)O.apply(N,g[o]);return s.timeout>0&&(P=setTimeout(function(){N.onreadystatechange=j,N.abort(),x(null,"timeout",N,s,a)},s.timeout)),N.send(s.data?s.data:null),N},e.get=function(){return e.ajax(C.apply(null,arguments))},e.post=function(){var t=C.apply(null,arguments);return t.type="POST",e.ajax(t)},e.getJSON=function(){var t=C.apply(null,arguments);return t.dataType="json",e.ajax(t)},e.fn.load=function(t,n,r){if(!this.length)return this;var a,i=this,o=t.split(/\s/),u=C(t,n,r),f=u.success;return o.length>1&&(u.url=o[0],a=o[1]),u.success=function(t){i.html(a?e("
").html(t.replace(s,"")).find(a):t),f&&f.apply(i,arguments)},e.ajax(u),this};var N=encodeURIComponent;e.param=function(t,n){var r=[];return r.add=function(t,n){e.isFunction(n)&&(n=n()),null==n&&(n=""),this.push(N(t)+"="+N(n))},O(r,t,n),r.join("&").replace(/%20/g,"+")}}(e),function(t){t.fn.serializeArray=function(){var e,n,r=[],i=function(t){return t.forEach?t.forEach(i):void r.push({name:e,value:t})};return this[0]&&t.each(this[0].elements,function(r,o){n=o.type,e=o.name,e&&"fieldset"!=o.nodeName.toLowerCase()&&!o.disabled&&"submit"!=n&&"reset"!=n&&"button"!=n&&"file"!=n&&("radio"!=n&&"checkbox"!=n||o.checked)&&i(t(o).val())}),r},t.fn.serialize=function(){var t=[];return this.serializeArray().forEach(function(e){t.push(encodeURIComponent(e.name)+"="+encodeURIComponent(e.value))}),t.join("&")},t.fn.submit=function(e){if(0 in arguments)this.bind("submit",e);else if(this.length){var n=t.Event("submit");this.eq(0).trigger(n),n.isDefaultPrevented()||this.get(0).submit()}return this}}(e),function(){try{getComputedStyle(void 0)}catch(e){var n=getComputedStyle;t.getComputedStyle=function(t,e){try{return n(t,e)}catch(r){return null}}}}(),e}); \ No newline at end of file diff --git a/src/assets/logo.png b/src/assets/logo.png new file mode 100644 index 0000000..f3d2503 Binary files /dev/null and b/src/assets/logo.png differ diff --git a/src/components/dialogue-bar-person.vue b/src/components/dialogue-bar-person.vue new file mode 100644 index 0000000..421f5b6 --- /dev/null +++ b/src/components/dialogue-bar-person.vue @@ -0,0 +1,66 @@ + + + diff --git a/src/components/dialogue-bar-public.vue b/src/components/dialogue-bar-public.vue new file mode 100644 index 0000000..5f22098 --- /dev/null +++ b/src/components/dialogue-bar-public.vue @@ -0,0 +1,74 @@ + + + diff --git a/src/components/dialogue-bar.vue b/src/components/dialogue-bar.vue new file mode 100644 index 0000000..9123da8 --- /dev/null +++ b/src/components/dialogue-bar.vue @@ -0,0 +1,93 @@ + + + diff --git a/src/components/index-header.vue b/src/components/index-header.vue new file mode 100644 index 0000000..552170e --- /dev/null +++ b/src/components/index-header.vue @@ -0,0 +1,124 @@ + + + diff --git a/src/components/index-nav.vue b/src/components/index-nav.vue new file mode 100644 index 0000000..c94c0a0 --- /dev/null +++ b/src/components/index-nav.vue @@ -0,0 +1,86 @@ + + + diff --git a/src/components/sample.vue b/src/components/sample.vue new file mode 100644 index 0000000..f182863 --- /dev/null +++ b/src/components/sample.vue @@ -0,0 +1,20 @@ + + + diff --git a/src/components/search-bar.vue b/src/components/search-bar.vue new file mode 100644 index 0000000..940f1f4 --- /dev/null +++ b/src/components/search-bar.vue @@ -0,0 +1,60 @@ + + + diff --git a/src/components/top-handle.vue b/src/components/top-handle.vue new file mode 100644 index 0000000..d04c62d --- /dev/null +++ b/src/components/top-handle.vue @@ -0,0 +1,133 @@ + + + diff --git a/src/filters.js b/src/filters.js new file mode 100644 index 0000000..644fd96 --- /dev/null +++ b/src/filters.js @@ -0,0 +1,38 @@ +/** + * 时间格式化 + * 对Date的扩展,将 Date 转化为指定格式的String + * 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符, + * 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字) + * 例子: + * (new Date()).Format("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423 + * (new Date()).Format("yyyy-M-d h:m:s.S") ==> 2006-7-2 8:9:4.18 + * //author: meizz + */ +const _filters = { + +} +_filters.fmtDate = function(_date, fmt) { + var date = new Date(_date) + var o = { + "M+": date.getMonth() + 1, //月份 + "d+": date.getDate(), //日 + "h+": date.getHours(), //小时 + "m+": date.getMinutes(), //分 + "s+": date.getSeconds(), //秒 + "q+": Math.floor((date.getMonth() + 3) / 3), //季度 + "S": date.getMilliseconds() //毫秒 + }; + if (/(y+)/.test(fmt)) + fmt = fmt.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length)); + for (var k in o) + if (new RegExp("(" + k + ")").test(fmt)) + fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length))); + return fmt; +} + +export default (Vue) =>{ + Object.keys(_filters).forEach(key=>{ + Vue.filter(key,_filters[key]) + }) + // _filters[] +} \ No newline at end of file diff --git a/src/main.js b/src/main.js new file mode 100644 index 0000000..faf6c02 --- /dev/null +++ b/src/main.js @@ -0,0 +1,49 @@ +import Vue from 'vue' +import Vuex from 'vuex' +import VueRouter from 'vue-router' +import { sync } from 'vuex-router-sync' +// import VueResource from 'vue-resource' +import VueTouch from 'vue-touch' +import zepto from 'webpack-zepto' +import fastclick from 'fastclick' + +import store from './vuex/store' +import routerMap from './route-config.js' +import filters from './filters' + +// const configPath = '/src/mock/' + +// window.configPath = configPath; + + +Vue.use(Vuex) +Vue.use(VueRouter) +// Vue.use(VueResource) +Vue.use(VueTouch) + +const router = new VueRouter({ + history: true, + abstract:false, + saveScrollPosition: true +}) + +routerMap(router) + +sync(store, router) + +// Vue.http.options.headers = { +// 'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8' +// } +filters(Vue) + +fastclick.attach(document.body) + +const App = Vue.extend(require('./app.vue')) + +router.start(App, '#app') + + +window.router = router +window.Vue = Vue +window.$ = zepto + diff --git a/src/route-config.js b/src/route-config.js new file mode 100644 index 0000000..7e731ee --- /dev/null +++ b/src/route-config.js @@ -0,0 +1,114 @@ +import store from './vuex/store' +export default function(router) { + //个人资料 + const personInfo = { + component: resolve => { + require(['./views/contact/person-info.vue'], resolve) + }, + subRoutes: { + //个人资料设置 + 'person-info-set': { + component: resolve => { + require(['./views/contact/person-info-set.vue'], resolve) + } + } + + } + } + //个人相册 + const photos = { + component: resolve => { + require(['./views/find/photos.vue'], resolve) + }, + subRoutes: { + //预览 + 'preview': { + component: resolve => { + require(['./views/find/photos-preview.vue'], resolve) + } + }, + //个人资料 + 'person-info': personInfo + } + } + personInfo.photos = photos + + //对话框 + const dialogue = { + component: resolve => { + require(['./views/chat/dialogue.vue'], resolve) + }, + subRoutes: { + //聊天详情 + 'chat-detail': { + component: resolve => { + require(['./views/chat/chat-detail.vue'], resolve) + }, + subRoutes: { + 'person-info': personInfo + } + }, + //群聊天信息 + 'chat-info': { + component: resolve => { + require(['./views/chat/chat-info.vue'], resolve) + }, + subRoutes: { + 'person-info': personInfo + } + } + //other + } + } + // + router.map({ + '/chat': { + component: resolve => { + require(['./views/chat.vue'], resolve) + }, + subRoutes: { + 'dialogue': dialogue + } + }, + '*':{ + component:resolve=>{ + require(['./views/404.vue'],resolve) + } + }, + '/contact': { + component: resolve => { + require(['./views/contact.vue'], resolve) + }, + subRoutes:{ + //个人资料 + 'person-info': personInfo + } + }, + '/find': { + component: resolve => { + require(['./views/find.vue'], resolve) + } + }, + '/me': { + component: resolve => { + require(['./views/me.vue'], resolve) + } + } + }) + router.redirect({ + '/': '/chat' + }) + + router.afterEach(function({from,to}) { + let fromPath = from.path || '/'; + let toPath = to.path; + let toPath_end = toPath.lastIndexOf('/'); + let backPath = toPath.slice(0,toPath_end); + store.dispatch('BACK_PATH',backPath) + }) + + // router.afterEach(function (transition) { + // console.log("after",transition) + // // transition.next() + // }) +} diff --git a/src/utils.js b/src/utils.js new file mode 100644 index 0000000..4497853 --- /dev/null +++ b/src/utils.js @@ -0,0 +1,16 @@ +module.exports = { + methods: { + get_backPath: ([first, ...other]) => { + // @params {Array} [first,...other] : route.to.matched + let otherLen = other.length; + let backPath = otherLen < 1 ? '/': first.handler.path; + if (otherLen > 0) { + for (let i = 0; i < (otherLen - 1); i++) { + backPath += '/' + other[i].handler.path + } + } + console.log(backPath) + return {path:backPath}; + } + } +} diff --git a/src/views/404.vue b/src/views/404.vue new file mode 100644 index 0000000..9b70a65 --- /dev/null +++ b/src/views/404.vue @@ -0,0 +1,21 @@ + + + diff --git a/src/views/chat.vue b/src/views/chat.vue new file mode 100644 index 0000000..8b1e1a1 --- /dev/null +++ b/src/views/chat.vue @@ -0,0 +1,302 @@ + + + + diff --git a/src/views/chat/chat-detail.vue b/src/views/chat/chat-detail.vue new file mode 100644 index 0000000..a9582f7 --- /dev/null +++ b/src/views/chat/chat-detail.vue @@ -0,0 +1,172 @@ + + + diff --git a/src/views/chat/chat-info.vue b/src/views/chat/chat-info.vue new file mode 100644 index 0000000..91691b0 --- /dev/null +++ b/src/views/chat/chat-info.vue @@ -0,0 +1,171 @@ + + + diff --git a/src/views/chat/create-group-chat.vue b/src/views/chat/create-group-chat.vue new file mode 100644 index 0000000..cf37227 --- /dev/null +++ b/src/views/chat/create-group-chat.vue @@ -0,0 +1,21 @@ + + + diff --git a/src/views/chat/dialogue.vue b/src/views/chat/dialogue.vue new file mode 100644 index 0000000..e0e10d0 --- /dev/null +++ b/src/views/chat/dialogue.vue @@ -0,0 +1,115 @@ + + + diff --git a/src/views/contact.vue b/src/views/contact.vue new file mode 100644 index 0000000..dfd638f --- /dev/null +++ b/src/views/contact.vue @@ -0,0 +1,41 @@ + + + diff --git a/src/views/contact/person-info-set.vue b/src/views/contact/person-info-set.vue new file mode 100644 index 0000000..f182863 --- /dev/null +++ b/src/views/contact/person-info-set.vue @@ -0,0 +1,20 @@ + + + diff --git a/src/views/contact/person-info.vue b/src/views/contact/person-info.vue new file mode 100644 index 0000000..960b3a3 --- /dev/null +++ b/src/views/contact/person-info.vue @@ -0,0 +1,56 @@ + + + diff --git a/src/views/find.vue b/src/views/find.vue new file mode 100644 index 0000000..3148cdd --- /dev/null +++ b/src/views/find.vue @@ -0,0 +1,19 @@ + + + + + diff --git a/src/views/find/photos-preview.vue b/src/views/find/photos-preview.vue new file mode 100644 index 0000000..f182863 --- /dev/null +++ b/src/views/find/photos-preview.vue @@ -0,0 +1,20 @@ + + + diff --git a/src/views/find/photos.vue b/src/views/find/photos.vue new file mode 100644 index 0000000..f182863 --- /dev/null +++ b/src/views/find/photos.vue @@ -0,0 +1,20 @@ + + + diff --git a/src/views/me.vue b/src/views/me.vue new file mode 100644 index 0000000..d060f88 --- /dev/null +++ b/src/views/me.vue @@ -0,0 +1,19 @@ + + + + + diff --git a/src/views/read.me b/src/views/read.me new file mode 100644 index 0000000..a828764 --- /dev/null +++ b/src/views/read.me @@ -0,0 +1,43 @@ +chat + dialogue 放对话窗口(友聊,群聊,公众号,订阅号) + chat-detail 聊天详情,聊天信息 + 个人聊天&群聊 详情页 + 公众号&订阅号 详情页 + + +contact + 通讯录主页 + 新的朋友 + 添加朋友 + 群聊 + 标签 + 公众号 + friends-info 存放个人详细资料和资料设置 (友聊,群聊,公众号,订阅号) + friends-info-set + + +find + circle-self + circle-friends + rich-scan 扫一扫 + 摇一摇 + 附近的人 + 漂流瓶 + 购物 + 游戏 + +me + + info + info-* + + set + set-* + + 钱包 + 钱包-* + + 收藏 + 卡包 + 表情 + diff --git a/src/views/sample.vue b/src/views/sample.vue new file mode 100644 index 0000000..f182863 --- /dev/null +++ b/src/views/sample.vue @@ -0,0 +1,20 @@ + + + diff --git a/src/vuex/action.js b/src/vuex/action.js new file mode 100644 index 0000000..e8f6809 --- /dev/null +++ b/src/vuex/action.js @@ -0,0 +1,30 @@ +import index from './base/index' + +export const get_menu = ({ dispatch }, menu) => { + index.getMenu(menu => { + dispatch('SET_MENU', menu) + }) +} +export const set_menu_active = ({ dispatch }, _index) => { + dispatch('SET_MENU_ACTIVE', _index) +} +export const get_menu_wechat_list = ({ dispatch }, list) => { + index.getWechatList(list => { + dispatch('SET_MENU_WECHAT_LIST', list) + }) +} + +export const menu_shift = ({dispatch})=>{ + dispatch('SHIFT_MENU') +} +export const set_dialogue_bar = ({dispatch},componentName)=>{ + dispatch('DIALOGUE_BAR',componentName) +} +export const set_dialogue_id = ({dispatch},id)=>{ + dispatch('DIALOGUE_ID',id) +} +export const set_dialogue_type = ({dispatch},type)=>{ + dispatch('DIALOGUE_TYPE',type) +} + + diff --git a/src/vuex/base/index.js b/src/vuex/base/index.js new file mode 100644 index 0000000..6dee7a2 --- /dev/null +++ b/src/vuex/base/index.js @@ -0,0 +1,289 @@ +const _menu = [{ + index: 0, + path: { + path: '/chat' + }, + hint: { type: "count", count: 999 }, //count,dot + iconClass: 'icon-wechat', + text: '微信' +}, { + index: 1, + path: { + path: '/contact' + }, + + hint: { type: "count", count: 999 }, //count,dot + iconClass: 'icon-contact', + text: '通讯录' +}, { + index: 2, + path: { + path: '/find' + }, + hint: { type: "dot", count: true }, //count,dot + iconClass: 'icon-find', + text: '发现' +}, { + index: 3, + path: { + path: '/me' + }, + hint: { type: null, count: 0 }, //count,dot + iconClass: 'icon-me', + text: '我' +}] +const _contact = [{ + text: "新的朋友", + pic: "../assets/images/contact-new-friends.png" +}] +/* +base.type:[friends:好友/group:群/service:服务号/sub:订阅号] + 关于头像右上角提示 + 订阅号永远是dot + [group,friends,service] 消息正常 -> count + [group,friends,service] 消息免打扰 -> dot + isStick 是否置顶 + newsUnreadCount 未读消息数量 + chatTitle + newsMute 消息免打扰 + endChatAuth 最后一条消息作者 + endChatTxt 最后一条消息内容 + +公众号分为 订阅号和服务号,服务号出现在消息列表 + +假数据 头像链接 +friends : http://ww1.sinaimg.cn/mw690/d0d07035jw1f7f2n6w1j1j20e60e6wg4.jpg +group : http://ww1.sinaimg.cn/mw690/d0d07035jw1f7f2n7cawhj202q02qglk.jpg +service : http://ww1.sinaimg.cn/mw690/d0d07035jw1f7f2n80l8ij202q02qmx2.jpg +sub : http://ww4.sinaimg.cn/mw690/d0d07035jw1f7f2n8ruarj202q02qdfp.jpg +*/ +const _wechat_list = [ + { + "base": { + "id": 1, + "type": "friends", + "newsUnreadCount": 9, + "newsMute": false, + "chatTitle": "小明", + "isStick": false, + "iconSrc": "http://ww1.sinaimg.cn/mw690/d0d07035jw1f7f2n6w1j1j20e60e6wg4.jpg", + "endTimeStr": 1472632586443, + "endChatAuth": "杨涛", + "endChatTxt": "未屏蔽", + }, + "friendModel": {}, + "groupModel": {}, + "serviceModel": {}, + "subModel": {} + }, + { + "base": { + "id": 2, + "type": "group", + "newsUnreadCount": 1, + "newsMute": true, + "chatTitle": "公司群 | HOME", + "iconSrc": "http://ww1.sinaimg.cn/mw690/d0d07035jw1f7f2n7cawhj202q02qglk.jpg", + "endTimeStr": 1472632586443, + "endChatAuth": "东东", + "endChatTxt": "今天天气不错", + "isStick": false + }, + "friendModel": {}, + "groupModel": {}, + "serviceModel": {}, + "subModel": {} + },{ + "base": { + "id": 2, + "type": "group", + "newsUnreadCount": 5, + "newsMute": false, + "chatTitle": "研发", + "iconSrc": "http://ww1.sinaimg.cn/mw690/d0d07035jw1f7f2n7cawhj202q02qglk.jpg", + "endTimeStr": 1472632586443, + "endChatAuth": "漆羽斌", + "endChatTxt": "服务器线上有个bug", + "isStick": false + }, + "friendModel": {}, + "groupModel": {}, + "serviceModel": {}, + "subModel": {} + }, + { + "base": { + "id": 3, + "type": "service", + "newsUnreadCount": 1, + "newsMute": false, + "chatTitle": "京东JD.COM", + "iconSrc": "http://ww1.sinaimg.cn/mw690/d0d07035jw1f7f2n80l8ij202q02qmx2.jpg", + "endTimeStr": 1472632586443, + "endChatAuth": "", + "endChatTxt": "【750元福利来袭 | 中秋满199减100】", + "isStick": false + }, + "friendModel": {}, + "groupModel": {}, + "serviceModel": {}, + "subModel": {} + }, + { + "base": { + "id": 4, + "type": "sub", + "newsUnreadCount": 1, + "newsMute": false, + "chatTitle": "订阅号", + "iconSrc": "http://ww4.sinaimg.cn/mw690/d0d07035jw1f7f2n8ruarj202q02qdfp.jpg", + "endTimeStr": 1472632586443, + "endChatAuth": "前端那些事", + "endChatTxt": "技术团队风格指南", + "isStick": false + }, + "friendModel": {}, + "groupModel": {}, + "serviceModel": {}, + "subModel": {} + }, + { + "base": { + "id": 6, + "type": "friends", + "newsUnreadCount": 0, + "newsMute": false, + "chatTitle": "小亮", + "iconSrc": "http://ww1.sinaimg.cn/mw690/d0d07035jw1f7f2n6w1j1j20e60e6wg4.jpg", + "endTimeStr": 1472632586443, + "endChatAuth": "小亮", + "endChatTxt": "123", + "isStick": false + }, + "friendModel": {}, + "groupModel": {}, + "serviceModel": {}, + "subModel": {} + }, + { + "base": { + "id": 55, + "type": "group", + "newsUnreadCount": 1, + "newsMute": false, + "chatTitle": "校友,小旭", + "iconSrc": "http://ww1.sinaimg.cn/mw690/d0d07035jw1f7f2n7cawhj202q02qglk.jpg", + "endTimeStr": 1472632586443, + "endChatAuth": "杨涛", + "endChatTxt": "苹果秋季发布会在9月7号", + "isStick": false + }, + "friendModel": {}, + "groupModel": {}, + "serviceModel": {}, + "subModel": {} + }, + { + "base": { + "id": 56, + "type": "friends", + "newsUnreadCount": 9, + "newsMute": true, + "chatTitle": "校友,小旭", + "iconSrc": "http://ww1.sinaimg.cn/mw690/d0d07035jw1f7f2n6w1j1j20e60e6wg4.jpg", + "endTimeStr": 1472632586443, + "endChatAuth": "杨涛", + "endChatTxt": "苹果秋季发布会在9月7号", + "isStick": false + }, + "friendModel": {}, + "groupModel": {}, + "serviceModel": {}, + "subModel": {} + }, + { + "base": { + "id": 3, + "type": "friends", + "newsUnreadCount": 9, + "newsMute": true, + "chatTitle": "校友,小旭", + "iconSrc": "http://ww1.sinaimg.cn/mw690/d0d07035jw1f7f2n6w1j1j20e60e6wg4.jpg", + "endTimeStr": 1472632586443, + "endChatAuth": "杨涛", + "endChatTxt": "苹果秋季发布会在9月7号", + "isStick": false + }, + "friendModel": {}, + "groupModel": {}, + "serviceModel": {}, + "subModel": {} + }, + { + "base": { + "id": 4, + "type": "friends", + "newsUnreadCount": 1, + "newsMute": true, + "chatTitle": "校友,小旭", + "iconSrc": "http://ww1.sinaimg.cn/mw690/d0d07035jw1f7f2n6w1j1j20e60e6wg4.jpg", + "endTimeStr": 1472632586443, + "endChatAuth": "杨涛", + "endChatTxt": "苹果秋季发布会在9月7号", + "isStick": false + }, + "friendModel": {}, + "groupModel": {}, + "serviceModel": {}, + "subModel": {} + }, + { + "base": { + "id": 1, + "type": "friends", + "newsUnreadCount": 9, + "newsMute": true, + "chatTitle": "校友,小旭", + "iconSrc": "http://ww1.sinaimg.cn/mw690/d0d07035jw1f7f2n6w1j1j20e60e6wg4.jpg", + "endTimeStr": 1472632586443, + "endChatAuth": "杨涛", + "endChatTxt": "苹果秋季发布会在9月7号", + "isStick": false + }, + "friendModel": {}, + "groupModel": {}, + "serviceModel": {}, + "subModel": {} + }, + { + "base": { + "id": 2, + "type": "friends", + "newsUnreadCount": 1, + "newsMute": true, + "chatTitle": "校友,小旭", + "iconSrc": "http://ww1.sinaimg.cn/mw690/d0d07035jw1f7f2n6w1j1j20e60e6wg4.jpg", + "endTimeStr": 1472632586443, + "endChatAuth": "杨涛", + "endChatTxt": "苹果秋季发布会在9月7号", + "isStick": false + }, + "friendModel": {}, + "groupModel": {}, + "serviceModel": {}, + "subModel": {} + } +] + + +export default { + getMenu(cb) { + cb(_menu) + }, + getContact(cb) { + cb(_contact) + }, + getWechatList(cb) { + cb(_wechat_list) + } +} diff --git a/src/vuex/store.js b/src/vuex/store.js new file mode 100644 index 0000000..cc9b627 --- /dev/null +++ b/src/vuex/store.js @@ -0,0 +1,56 @@ +import Vue from 'vue' +import Vuex from 'vuex' + +Vue.use(Vuex) + +//状态 +const state = { + back_path:'', + is_back:false,//是否是下一页 + menu: [], + menu_active:{text:"微信",index:0}, + wechat_list:[], + //dialogue + dialogue_bar:'dialogueBarPerson', + dialogue_id:'', + dialogue_type:'' +} + +const mutations = { + ['SET_MENU'](state,menu){ + state.menu = menu; + }, + ['SET_MENU_ACTIVE'](state, _index) { + state.menu_active = state.menu[_index] + }, + ['SET_MENU_WECHAT_LIST'](state,list){ + state.wechat_list = list + }, + ['SHIFT_MENU'](state){ + // console.log(state.wechat_list) + // state.wechat_list.shift(); + // console.log(state.wechat_list) + }, + ['BACK_PATH'](state,_path){ + //设置返回按钮跳转路径 + state.back_path = {path:_path}; + }, + //dialogue + ['DIALOGUE_BAR'](state,componentName){ + console.log(componentName) + state.dialogue_bar = componentName; + }, + ['DIALOGUE_ID'](state,id){ + state.dialogue_id = id; + }, + ['DIALOGUE_TYPE'](state,type){ + state.dialogue_type = type; + } + +} + +export default new Vuex.Store({ + state, + mutations, + strict: true +}) diff --git a/static/.gitkeep b/static/.gitkeep new file mode 100644 index 0000000..e69de29