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 图标
+
+
+ -
+
+
消息
+ 
+ .icon-wechat
+
+
+ -
+
+
YDUI-demo-me
+ 
+ .icon-me
+
+
+ -
+
+
通讯录
+ 
+ .icon-contact
+
+
+ -
+
+
发现
+ 
+ .icon-find
+
+
+
+
+
+
+ 第一步:使用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">3</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 @@
+
+
+
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 @@
+
+
+
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>$2>")),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=/
+
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 @@
+
+
+
+
+ {{menu_active.text}}
+
+
+
+
+
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 @@
+
+
+
+
+
+
+
+
chat-info
+
+
+ -
+
+
+ 杨涛yangtao
+
+ -
+
+
+
+
+
+
详细资料
+
+
+
+
+
+
+
+
+
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 @@
+
+
+
+
+
+
+
+
chat-detail
+
+
+ -
+
+
+ 杨涛yangtao
+
+ -
+
+
+
+
+
+
详细资料
+
+
+
+
+
+
+
+
+
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 @@
+
+
+
{{ content }}
+
+
+
+
+
+
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 @@
+
+
+
{{ content }}
+
+
+
+
+
+
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