[
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2019 zeng xiang\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "# 活动考勤签到小程序\n## 效果图\n![](img/demo.jpg)\n## 功能\n#### 创建活动\n1. 可以添加活动名称、简介等信息\n2. 地点选择时有搜索建议并能够在地图上标注\n3. 签到方式选择包括：照片（上传活动照片）、地点（在活动地点附近500米内）、人脸（本人签到）\n\n#### 活动搜索\n1. 通过数据库的模糊搜索简单实现——每输入一个字都进行查询\n2. 点击结果列表可以查看活动详情\n\n#### 活动管理\n1. 根据当前日期分成两个Tab：正在进行中、已结束\n2. 点击可以进入活动详情界面\n\n#### 活动详情\n1. 查看活动的发起人、起止日期、活动地点、简介\n2. 查看参与的人数\n3. 活动的签到情况根据日期进行归档，点击日期可以查看当日的签到情况\n\n#### 活动签到\n1. 首先必须上传打卡照片，从相册中选择\n2. 点击地点验证即可通过当前经纬度以及活动地点经纬度简单计算距离，小于500m认为在活动区域\n3. 点击人脸验证，通过Face++的人脸对比接口，将上传的照片和个人信息页面的照片进行对比，置信度大于50可以认作是同一个人\n4. 当所有的要求都满足后，完成活动的签到\n\n#### 个人信息\n1. 可以更改当前的照片\n\n## 相关技术\n1. 数据库采用MySQL\n2. 服务器基于Nodejs的Express4.0框架搭建，简单的接收JSON数据并返回，所有的活动信息、签到结果都记录在数据库中\n3. 个人信息图片、签到图片都存储在腾讯云的cos中\n4. 地理位置的推荐使用腾讯的地图接口\n\n## 项目部署\n#### 客户端\n1. 小程序客户端放在client文件夹，使用小程序开发工具打开\n2. 填补client/checkin/config.js中的腾讯云对象存储的相关信息\n3. 填补client/checkin/pages/checkIn/checkIn.js中相应的API的key等\n\n#### 服务端\n1. 安装Nodejs，执行 node app.js\n2. 数据库的配置在server/checkin/congigs/config.js中\n\n#### 数据库\n执行SQL文件即可\n\n\n\n"
  },
  {
    "path": "checkin.sql",
    "content": "/*\n Navicat Premium Data Transfer\n\n Source Server         : localhost_3306\n Source Server Type    : MySQL\n Source Server Version : 50720\n Source Host           : localhost:3306\n Source Schema         : checkin\n\n Target Server Type    : MySQL\n Target Server Version : 50720\n File Encoding         : 65001\n\n Date: 31/03/2018 19:27:31\n*/\n\nSET NAMES utf8mb4;\nSET FOREIGN_KEY_CHECKS = 0;\n\n-- ----------------------------\n-- Table structure for t_activity\n-- ----------------------------\nDROP TABLE IF EXISTS `t_activity`;\nCREATE TABLE `t_activity`  (\n  `F_ID` int(11) NOT NULL AUTO_INCREMENT,\n  `F_CreaterId` int(11) NOT NULL,\n  `F_Caption` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,\n  `F_Desc` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,\n  `F_Location` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,\n  `F_Lat` float NULL DEFAULT NULL,\n  `F_Lng` float NULL DEFAULT NULL,\n  `F_StartDate` date NULL DEFAULT NULL,\n  `F_EndDate` date NULL DEFAULT NULL,\n  `F_IfFace` int(11) NULL DEFAULT NULL,\n  `F_IfLocation` int(11) NULL DEFAULT NULL,\n  `F_IfPhoto` int(11) NULL DEFAULT NULL,\n  PRIMARY KEY (`F_ID`) USING BTREE,\n  INDEX `F_CreaterId`(`F_CreaterId`) USING BTREE,\n  CONSTRAINT `t_activity_ibfk_1` FOREIGN KEY (`F_CreaterId`) REFERENCES `t_user` (`F_ID`) ON DELETE RESTRICT ON UPDATE RESTRICT\n) ENGINE = InnoDB AUTO_INCREMENT = 40 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;\n\n-- ----------------------------\n-- Table structure for t_apply\n-- ----------------------------\nDROP TABLE IF EXISTS `t_apply`;\nCREATE TABLE `t_apply`  (\n  `F_ID` int(11) NOT NULL AUTO_INCREMENT,\n  `F_ApplyerId` int(11) NOT NULL,\n  `F_ActivityId` int(11) NOT NULL,\n  `F_ApplyDate` date NULL DEFAULT NULL,\n  PRIMARY KEY (`F_ID`) USING BTREE,\n  INDEX `F_ApplyerId`(`F_ApplyerId`) USING BTREE,\n  INDEX `F_ActivityId`(`F_ActivityId`) USING BTREE,\n  CONSTRAINT `t_apply_ibfk_1` FOREIGN KEY (`F_ApplyerId`) REFERENCES `t_user` (`F_ID`) ON DELETE RESTRICT ON UPDATE RESTRICT,\n  CONSTRAINT `t_apply_ibfk_2` FOREIGN KEY (`F_ActivityId`) REFERENCES `t_activity` (`F_ID`) ON DELETE RESTRICT ON UPDATE RESTRICT\n) ENGINE = InnoDB AUTO_INCREMENT = 16 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;\n\n-- ----------------------------\n-- Table structure for t_check\n-- ----------------------------\nDROP TABLE IF EXISTS `t_check`;\nCREATE TABLE `t_check`  (\n  `F_ID` int(11) NOT NULL AUTO_INCREMENT,\n  `F_ActivityId` int(11) NULL DEFAULT NULL,\n  `F_UserID` int(11) NULL DEFAULT NULL,\n  `F_CheckDate` date NULL DEFAULT NULL,\n  `F_PhotoUrl` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,\n  PRIMARY KEY (`F_ID`) USING BTREE,\n  INDEX `F_ActivityId`(`F_ActivityId`) USING BTREE,\n  INDEX `F_UserID`(`F_UserID`) USING BTREE,\n  CONSTRAINT `t_check_ibfk_1` FOREIGN KEY (`F_ActivityId`) REFERENCES `t_activity` (`F_ID`) ON DELETE RESTRICT ON UPDATE RESTRICT,\n  CONSTRAINT `t_check_ibfk_2` FOREIGN KEY (`F_UserID`) REFERENCES `t_user` (`F_ID`) ON DELETE RESTRICT ON UPDATE RESTRICT\n) ENGINE = InnoDB AUTO_INCREMENT = 30 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;\n\n-- ----------------------------\n-- Table structure for t_user\n-- ----------------------------\nDROP TABLE IF EXISTS `t_user`;\nCREATE TABLE `t_user`  (\n  `F_ID` int(11) NOT NULL AUTO_INCREMENT,\n  `F_Name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,\n  `F_PhotoUrl` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,\n  PRIMARY KEY (`F_ID`) USING BTREE\n) ENGINE = InnoDB AUTO_INCREMENT = 11 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;\n\n-- ----------------------------\n-- View structure for v_activity_info\n-- ----------------------------\nDROP VIEW IF EXISTS `v_activity_info`;\nCREATE ALGORITHM = UNDEFINED DEFINER = `root`@`localhost` SQL SECURITY DEFINER VIEW `v_activity_info` AS select `t_activity`.`F_ID` AS `F_ActivityId`,`t_user`.`F_Name` AS `F_CreaterName`,`t_activity`.`F_Caption` AS `F_Caption`,`t_activity`.`F_Desc` AS `F_Desc`,`t_activity`.`F_Location` AS `F_Location`,`t_activity`.`F_Lat` AS `F_Lat`,`t_activity`.`F_Lng` AS `F_Lng`,`t_activity`.`F_StartDate` AS `F_StartDate`,`t_activity`.`F_EndDate` AS `F_EndDate`,`t_activity`.`F_IfFace` AS `F_IfFace`,`t_activity`.`F_IfLocation` AS `F_IfLocation`,`t_activity`.`F_IfPhoto` AS `F_IfPhoto` from (`t_activity` join `t_user` on((`t_activity`.`F_CreaterId` = `t_user`.`F_ID`)));\n\n-- ----------------------------\n-- View structure for v_apply_activity\n-- ----------------------------\nDROP VIEW IF EXISTS `v_apply_activity`;\nCREATE ALGORITHM = UNDEFINED DEFINER = `root`@`localhost` SQL SECURITY DEFINER VIEW `v_apply_activity` AS select `t_activity`.`F_ID` AS `F_ID`,`t_activity`.`F_CreaterId` AS `F_CreaterId`,`t_activity`.`F_Caption` AS `F_Caption`,`t_activity`.`F_Desc` AS `F_Desc`,`t_activity`.`F_Lat` AS `F_Lat`,`t_activity`.`F_Lng` AS `F_Lng`,`t_activity`.`F_StartDate` AS `F_StartDate`,`t_activity`.`F_EndDate` AS `F_EndDate`,`t_activity`.`F_IfFace` AS `F_IfFace`,`t_activity`.`F_IfLocation` AS `F_IfLocation`,`t_activity`.`F_IfPhoto` AS `F_IfPhoto`,`t_apply`.`F_ApplyDate` AS `F_ApplyDate`,`t_apply`.`F_ApplyerId` AS `F_ApplyerId`,`t_activity`.`F_Location` AS `F_Location` from (`t_apply` join `t_activity` on((`t_apply`.`F_ActivityId` = `t_activity`.`F_ID`)));\n\n-- ----------------------------\n-- View structure for v_apply_info\n-- ----------------------------\nDROP VIEW IF EXISTS `v_apply_info`;\nCREATE ALGORITHM = UNDEFINED DEFINER = `root`@`localhost` SQL SECURITY DEFINER VIEW `v_apply_info` AS select `t_activity`.`F_ID` AS `F_ID`,count(0) AS `F_ApplyNum`,`t_activity`.`F_Caption` AS `F_Caption`,`t_apply`.`F_ApplyerId` AS `F_ApplyerId` from (`t_activity` join `t_apply` on((`t_apply`.`F_ActivityId` = `t_activity`.`F_ID`))) group by `t_activity`.`F_ID`;\n\n-- ----------------------------\n-- View structure for v_check_detail\n-- ----------------------------\nDROP VIEW IF EXISTS `v_check_detail`;\nCREATE ALGORITHM = UNDEFINED DEFINER = `root`@`localhost` SQL SECURITY DEFINER VIEW `v_check_detail` AS select `t_check`.`F_ActivityId` AS `F_ActivityId`,`t_check`.`F_UserID` AS `F_UserId`,`t_check`.`F_PhotoUrl` AS `F_CheckPhotoUrl`,`t_user`.`F_Name` AS `F_UserName`,`t_check`.`F_CheckDate` AS `F_CheckDate` from (`t_user` join `t_check` on((`t_check`.`F_UserID` = `t_user`.`F_ID`)));\n\nSET FOREIGN_KEY_CHECKS = 1;\n"
  },
  {
    "path": "client/README.md",
    "content": "# checkin\n"
  },
  {
    "path": "client/app.js",
    "content": "//app.js\nvar config = require('./config.js');\nApp({\n    onLaunch: function () {\n        // 展示本地存储能力\n        var logs = wx.getStorageSync('logs') || []\n        logs.unshift(Date.now())\n        wx.setStorageSync('logs', logs)\n\n        // 登录\n        // wx.login({\n        //   success: res => {\n        //     // 发送 res.code 到后台换取 openId, sessionKey, unionId\n        //   }\n        // })\n        // 获取用户信息\n        // wx.getSetting({\n        //   success: res => {\n        //     if (res.authSetting['scope.userInfo']) {\n        //       // 已经授权，可以直接调用 getUserInfo 获取头像昵称，不会弹框\n        //       wx.getUserInfo({\n        //         success: res => {\n        //           // 可以将 res 发送给后台解码出 unionId\n        //           this.globalData.userInfo = res.userInfo\n        //           console.log(res.userInfo);\n\n        //           // 由于 getUserInfo 是网络请求，可能会在 Page.onLoad 之后才返回\n        //           // 所以此处加入 callback 以防止这种情况\n        //           if (this.userInfoReadyCallback) {\n        //             this.userInfoReadyCallback(res)\n        //           }\n        //         }\n        //       })\n        //     }\n        //   }\n        // })\n        wx.getUserInfo({\n            success: res => {\n                // 可以将 res 发送给后台解码出 unionId\n                var that = this;\n                that.globalData.userInfo = res.userInfo;\n                wx.request({\n                    url: config.url+'/person/',\n                    data: {\n                        'username':res.userInfo.nickName\n                    },\n                    method: 'POST',\n                    success: function(user_res){\n                        that.globalData.user_id = user_res.data.userId\n                        that.globalData.avator_url = user_res.data.avatorUrl\n                        console.log(user_res.data);\n                    }\n                })\n\n                // 由于 getUserInfo 是网络请求，可能会在 Page.onLoad 之后才返回\n                // 所以此处加入 callback 以防止这种情况\n                if (this.userInfoReadyCallback) {\n                    this.userInfoReadyCallback(res)\n                }\n            }\n        });\n\n    },\n    globalData: {\n        userInfo: null,\n        users:null,\n        user_id:null,\n        avator_url:null\n    },\n    data: {\n        haveLocation: false,\n        activity_lat: -1,\n        activity_lng: -1,\n        activity_location: \"\"\n    }\n})"
  },
  {
    "path": "client/app.json",
    "content": "{\n    \"pages\": [\n        \"pages/search/search\",\n        \"pages/detail/detail\",\n        \"pages/manage/manage\",\n        \"pages/checkIn/checkIn\",\n        \"pages/new/new\",\n        \"pages/addLocation/addLocation\",\n        \"pages/user/user\",\n        \"pages/logs/logs\",\n        \"pages/searchDetail/searchDetail\"\n        \n    ],\n    \"window\": {\n        \"backgroundTextStyle\": \"light\",\n        \"navigationBarBackgroundColor\": \"#fff\",\n        \"navigationBarTitleText\": \"WeChat\",\n        \"navigationBarTextStyle\": \"black\"\n    },\n    \"tabBar\": {\n        \"color\": \"#9b9b9b\",\n        \"selectedColor\": \"#2ba245\",\n        \"borderStyle\": \"white\",\n        \"position\": \"bottom\",\n        \"list\": [\n            {\n                \"pagePath\": \"pages/new/new\",\n                \"text\": \"新建\",\n                \"iconPath\": \"image/new_normal.png\",\n                \"selectedIconPath\": \"image/new_pressed.png\"\n            },\n            {\n                \"pagePath\": \"pages/search/search\",\n                \"text\": \"查找\",\n                \"iconPath\": \"image/search_normal.png\",\n                \"selectedIconPath\": \"image/search_pressed.png\"\n            },\n            {\n                \"pagePath\": \"pages/manage/manage\",\n                \"text\": \"管理\",\n                \"iconPath\": \"image/manage_normal.png\",\n                \"selectedIconPath\": \"image/manage_pressed.png\"\n            },\n            {\n                \"pagePath\": \"pages/user/user\",\n                \"text\": \"我的\",\n                \"iconPath\": \"image/user_normal.png\",\n                \"selectedIconPath\": \"image/user_pressed.png\"\n            }\n        ]\n    }\n}"
  },
  {
    "path": "client/app.wxss",
    "content": "/**app.wxss**/\n@import \"dist/style/weui.wxss\";\n\n.container {\n  height: 100%;\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n} \npage{\n    background-color: #F8F8F8;\n    font-size: 16px;\n    font-family: -apple-system-font,Helvetica Neue,Helvetica,sans-serif;\n}\n.page__hd {\n    padding: 40px;\n}\n.page__bd {\n    padding-bottom: 40px;\n}\n.page__bd_spacing {\n    padding-left: 15px;\n    padding-right: 15px;\n}\n\n.page__ft{\n    padding-bottom: 10px;\n    text-align: center;\n}\n\n.page__title {\n    text-align: left;\n    font-size: 20px;\n    font-weight: 400;\n}\n\n.page__desc {\n    margin-top: 5px;\n    color: #888888;\n    text-align: left;\n    font-size: 14px;\n}"
  },
  {
    "path": "client/config.js",
    "content": "//服务器地址\nvar url = '' \n//腾讯云对象存储鉴权地址\nvar cosSignatureUrl = '';\n//腾讯云对象存储的区域：华东地区为sh\nvar cosRegion = '';\n//腾讯云对象存储cos的APPID\nvar cosAPPID = '12XXXXXXXX';\n//腾讯云COSSecretId\nvar cosSecretId = '';\n//腾讯云COSSecretKey\nvar cosSecretKey = '';\n//bucket\nvar cosBucketName = '';\n//dir路径\nvar cosDirName = '';\n\nmodule.exports = {\n    url: url,\n    cosSignatureUrl: cosSignatureUrl,\n    cosRegion: cosRegion,\n    cosAPPID: cosAPPID,\n    cosBucketName: cosBucketName,\n    cosDirName: cosDirName\n}"
  },
  {
    "path": "client/dist/app.js",
    "content": "App({\n    onLaunch: function () {\n        console.log('App Launch')\n    },\n    onShow: function () {\n        console.log('App Show')\n    },\n    onHide: function () {\n        console.log('App Hide')\n    },\n    globalData: {\n        hasLogin: false\n    }\n});"
  },
  {
    "path": "client/dist/app.json",
    "content": "{\n  \"pages\": [\n    \"example/index\",\n\n    \"example/button/button\",\n    \"example/list/list\",\n    \"example/input/input\",\n    \"example/slider/slider\",\n    \"example/uploader/uploader\",\n\n    \"example/article/article\",\n    \"example/badge/badge\",\n    \"example/flex/flex\",\n    \"example/footer/footer\",\n    \"example/gallery/gallery\",\n    \"example/grid/grid\",\n    \"example/icons/icons\",\n    \"example/loadmore/loadmore\",\n    \"example/panel/panel\",\n    \"example/preview/preview\",\n    \"example/progress/progress\",\n\n    \"example/actionsheet/actionsheet\",\n    \"example/dialog/dialog\",\n    \"example/msg/msg\",\n    \"example/msg/msg_success\",\n    \"example/msg/msg_fail\",\n    \"example/picker/picker\",\n    \"example/toast/toast\",\n\n    \"example/navbar/navbar\",\n    \"example/tabbar/tabbar\",\n\n    \"example/searchbar/searchbar\"\n  ],\n  \"window\": {\n    \"navigationBarTextStyle\": \"black\",\n    \"navigationBarTitleText\": \"WeUI for 小程序\",\n    \"navigationBarBackgroundColor\": \"#f8f8f8\",\n    \"backgroundColor\": \"#f8f8f8\"\n  },\n  \"networkTimeout\": {\n    \"request\": 10000,\n    \"connectSocket\": 10000,\n    \"uploadFile\": 10000,\n    \"downloadFile\": 10000\n  },\n  \"debug\": true\n}"
  },
  {
    "path": "client/dist/app.wxss",
    "content": "@import 'style/weui.wxss';\n\npage{\n    background-color: #F8F8F8;\n    font-size: 16px;\n    font-family: -apple-system-font,Helvetica Neue,Helvetica,sans-serif;\n}\n.page__hd {\n    padding: 40px;\n}\n.page__bd {\n    padding-bottom: 40px;\n}\n.page__bd_spacing {\n    padding-left: 15px;\n    padding-right: 15px;\n}\n\n.page__ft{\n    padding-bottom: 10px;\n    text-align: center;\n}\n\n.page__title {\n    text-align: left;\n    font-size: 20px;\n    font-weight: 400;\n}\n\n.page__desc {\n    margin-top: 5px;\n    color: #888888;\n    text-align: left;\n    font-size: 14px;\n}"
  },
  {
    "path": "client/dist/example/actionsheet/actionsheet.js",
    "content": "Page({\n    open: function(){\n        wx.showActionSheet({\n            itemList: ['A', 'B', 'C'],\n            success: function(res) {\n                if (!res.cancel) {\n                    console.log(res.tapIndex)\n                }\n            }\n        });\n    }\n});"
  },
  {
    "path": "client/dist/example/actionsheet/actionsheet.wxml",
    "content": "<view class=\"page\">\n    <view class=\"page__hd\">\n        <view class=\"page__title\">ActionSheet</view>\n        <view class=\"page__desc\">弹出式菜单，采用小程序原生的actionsheet</view>\n    </view>\n    <view class=\"page__bd\">\n        <view class=\"weui-btn-area\">\n            <button type=\"default\" bindtap=\"open\">ActionSheet</button>\n        </view>\n    </view>\n</view>"
  },
  {
    "path": "client/dist/example/actionsheet/actionsheet.wxss",
    "content": "page{\n    background-color: #FFFFFF;\n}"
  },
  {
    "path": "client/dist/example/article/article.js",
    "content": "Page({});"
  },
  {
    "path": "client/dist/example/article/article.wxml",
    "content": "<view class=\"page\">\n    <view class=\"page__hd\">\n        <view class=\"page__title\">Article</view>\n        <view class=\"page__desc\">文章</view>\n    </view>\n    <view class=\"page__bd\">\n        <view class=\"weui-article\">\n            <view class=\"weui-article__h1\">大标题</view>\n            <view class=\"weui-article__section\">\n                <view class=\"weui-article__title\">章标题</view>\n                <view class=\"weui-article__section\">\n                    <view class=\"weui-article__h3\">1.1 节标题</view>\n                    <view class=\"weui-article__p\">\n                        Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod\n                        tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,\n                        quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo\n                        consequat.\n                    </view>\n                    <view class=\"weui-article__p\">\n                        <image class=\"weui-article__img\" src=\"../images/pic_article.png\" mode=\"aspectFit\" style=\"height: 180px\" />\n                        <image class=\"weui-article__img\" src=\"../images/pic_article.png\" mode=\"aspectFit\" style=\"height: 180px\" />\n                    </view>\n                </view>\n                <view class=\"weui-article__section\">\n                    <view class=\"weui-article__h3\">1.2 节标题</view>\n                    <view class=\"weui-article__p\">\n                        Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod\n                        tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,\n                        cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non\n                        proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n                    </view>\n                </view>\n            </view>\n        </view>\n    </view>\n</view>"
  },
  {
    "path": "client/dist/example/article/article.wxss",
    "content": "page{\n    background-color: #FFFFFF;\n}\nimage{\n    margin: 4px 0;\n}"
  },
  {
    "path": "client/dist/example/badge/badge.js",
    "content": "Page({});"
  },
  {
    "path": "client/dist/example/badge/badge.wxml",
    "content": "<view class=\"page\">\n    <view class=\"page__hd\">\n        <view class=\"page__title\">Badge</view>\n        <view class=\"page__desc\">徽章</view>\n    </view>\n\n    <view class=\"page__bd\">\n        <view class=\"weui-cells__title\">新消息提示跟摘要信息后，统一在列表右侧</view>\n        <view class=\"weui-cells weui-cells_after-title\">\n            <view class=\"weui-cell weui-cell_access\">\n                <view class=\"weui-cell__bd\">单行列表</view>\n                <view class=\"weui-cell__ft weui-cell__ft_in-access\" style=\"font-size: 0\">\n                    <view style=\"display: inline-block;vertical-align:middle; font-size: 17px;\">详细信息</view>\n                    <view class=\"weui-badge weui-badge_dot\" style=\"margin-left: 5px;margin-right: 5px;\"></view>\n                </view>\n            </view>\n        </view>\n\n        <view class=\"weui-cells__title\">未读数红点跟在主题信息后，统一在列表左侧</view>\n        <view class=\"weui-cells weui-cells_after-title\">\n            <view class=\"weui-cell\">\n                <view class=\"weui-cell__hd\" style=\"position: relative;margin-right: 10px;\">\n                    <image src=\"../images/pic_160.png\" style=\"width: 50px; height: 50px; display: block\"/>\n                    <view class=\"weui-badge\" style=\"position: absolute;top: -.4em;right: -.4em;\">8</view>\n                </view>\n                <view class=\"weui-cell__bd\">\n                    <view>联系人名称</view>\n                    <view style=\"font-size: 13px;color: #888888;\">摘要信息</view>\n                </view>\n            </view>\n            <view class=\"weui-cell weui-cell_access\">\n                <view class=\"weui-cell__bd\">\n                    <view style=\"display: inline-block; vertical-align: middle\">单行列表</view>\n                    <view class=\"weui-badge\" style=\"margin-left: 5px;\">8</view>\n                </view>\n                <view class=\"weui-cell__ft weui-cell__ft_in-access\"></view>\n            </view>\n            <view class=\"weui-cell weui-cell_access\">\n                <view class=\"weui-cell__bd\">\n                    <view style=\"display: inline-block; vertical-align: middle\">单行列表</view>\n                    <view class=\"weui-badge\" style=\"margin-left: 5px;\">8</view>\n                </view>\n                <view class=\"weui-cell__ft weui-cell__ft_in-access\">详细信息</view>\n            </view>\n            <view class=\"weui-cell weui-cell_access\">\n                <view class=\"weui-cell__bd\">\n                    <view style=\"display: inline-block; vertical-align: middle\">单行列表</view>\n                    <view class=\"weui-badge\" style=\"margin-left: 5px;\">New</view>\n                </view>\n                <view class=\"weui-cell__ft weui-cell__ft_in-access\"></view>\n            </view>\n        </view>\n    </view>\n</view>"
  },
  {
    "path": "client/dist/example/button/button.js",
    "content": "Page({});"
  },
  {
    "path": "client/dist/example/button/button.wxml",
    "content": "<view class=\"page\">\n    <view class=\"page__hd\">\n        <view class=\"page__title\">Button</view>\n        <view class=\"page__desc\">按钮，WeUI采用小程序原生的按钮为主体，加入一些间距的样式。</view>\n    </view>\n    <view class=\"page__bd page__bd_spacing\">\n        <button class=\"weui-btn\" type=\"primary\">页面主操作 Normal</button>\n        <button class=\"weui-btn\" type=\"primary\" disabled=\"true\">页面主操作 Disabled</button>\n\n        <button class=\"weui-btn\" type=\"default\">页面次要操作 Normal</button>\n        <button class=\"weui-btn\" type=\"default\" disabled=\"true\">页面次要操作 Disabled</button>\n\n        <button class=\"weui-btn\" type=\"warn\">警告类操作 Normal</button>\n        <button class=\"weui-btn\" type=\"warn\" disabled=\"true\">警告类操作 Disabled</button>\n\n        <view class=\"button-sp-area\">\n            <button class=\"weui-btn\" type=\"primary\" plain=\"true\">按钮</button>\n            <button class=\"weui-btn\" type=\"primary\" disabled=\"true\" plain=\"true\">按钮</button>\n\n            <button class=\"weui-btn\" type=\"default\" plain=\"true\">按钮</button>\n            <button class=\"weui-btn\" type=\"default\" disabled=\"true\" plain=\"true\">按钮</button>\n\n            <button class=\"weui-btn mini-btn\" type=\"primary\" size=\"mini\">按钮</button>\n            <button class=\"weui-btn mini-btn\" type=\"default\" size=\"mini\">按钮</button>\n            <button class=\"weui-btn mini-btn\" type=\"warn\" size=\"mini\">按钮</button>\n        </view>\n    </view>\n</view>"
  },
  {
    "path": "client/dist/example/button/button.wxss",
    "content": ".button-sp-area{\n    margin: 0 auto;\n    padding-top: 15px;\n    width: 60%;\n}\n.mini-btn{\n    margin-right: 5px;\n}"
  },
  {
    "path": "client/dist/example/dialog/dialog.js",
    "content": "Page({\n    openConfirm: function () {\n        wx.showModal({\n            title: '弹窗标题',\n            content: '弹窗内容，告知当前状态、信息和解决方法，描述文字尽量控制在三行内',\n            confirmText: \"主操作\",\n            cancelText: \"辅助操作\",\n            success: function (res) {\n                console.log(res);\n                if (res.confirm) {\n                    console.log('用户点击主操作')\n                }else{\n                    console.log('用户点击辅助操作')\n                }\n            }\n        });\n    },\n    openAlert: function () {\n        wx.showModal({\n            content: '弹窗内容，告知当前状态、信息和解决方法，描述文字尽量控制在三行内',\n            showCancel: false,\n            success: function (res) {\n                if (res.confirm) {\n                    console.log('用户点击确定')\n                }\n            }\n        });\n    }\n});"
  },
  {
    "path": "client/dist/example/dialog/dialog.wxml",
    "content": "<view class=\"page\">\n    <view class=\"page__hd\">\n        <view class=\"page__title\">Dialog</view>\n        <view class=\"page__desc\">对话框，采用小程序原生的modal</view>\n    </view>\n    <view class=\"page__bd\">\n        <view class=\"weui-btn-area\">\n            <button class=\"weui-btn\" type=\"default\" bindtap=\"openConfirm\">Confirm Dialog</button>\n            <button class=\"weui-btn\" type=\"default\" bindtap=\"openAlert\">Alert Dialog</button>\n        </view>\n    </view>\n</view>"
  },
  {
    "path": "client/dist/example/dialog/dialog.wxss",
    "content": "page{\n    background-color: #FFFFFF;\n}"
  },
  {
    "path": "client/dist/example/flex/flex.js",
    "content": "Page({});"
  },
  {
    "path": "client/dist/example/flex/flex.wxml",
    "content": "<view class=\"page\">\n    <view class=\"page__hd\">\n        <view class=\"page__title\">Flex</view>\n        <view class=\"page__desc\">Flex布局</view>\n    </view>\n    <view class=\"page__bd page__bd_spacing\">\n        <view class=\"weui-flex\">\n            <view class=\"weui-flex__item\"><view class=\"placeholder\">weui</view></view>\n        </view>\n        <view class=\"weui-flex\">\n            <view class=\"weui-flex__item\"><view class=\"placeholder\">weui</view></view>\n            <view class=\"weui-flex__item\"><view class=\"placeholder\">weui</view></view>\n        </view>\n        <view class=\"weui-flex\">\n            <view class=\"weui-flex__item\"><view class=\"placeholder\">weui</view></view>\n            <view class=\"weui-flex__item\"><view class=\"placeholder\">weui</view></view>\n            <view class=\"weui-flex__item\"><view class=\"placeholder\">weui</view></view>\n        </view>\n        <view class=\"weui-flex\">\n            <view class=\"weui-flex__item\"><view class=\"placeholder\">weui</view></view>\n            <view class=\"weui-flex__item\"><view class=\"placeholder\">weui</view></view>\n            <view class=\"weui-flex__item\"><view class=\"placeholder\">weui</view></view>\n            <view class=\"weui-flex__item\"><view class=\"placeholder\">weui</view></view>\n        </view>\n        <view class=\"weui-flex\">\n            <view><view class=\"placeholder\">weui</view></view>\n            <view class=\"weui-flex__item\"><view class=\"placeholder\">weui</view></view>\n            <view><view class=\"placeholder\">weui</view></view>\n        </view>\n    </view>\n</view>"
  },
  {
    "path": "client/dist/example/flex/flex.wxss",
    "content": ".placeholder{\n    margin: 5px;\n    padding: 0 10px;\n    text-align: center;\n    background-color: #EBEBEB;\n    height: 2.3em;\n    line-height: 2.3em;\n    color: #cfcfcf;\n}"
  },
  {
    "path": "client/dist/example/footer/footer.js",
    "content": "Page({});"
  },
  {
    "path": "client/dist/example/footer/footer.wxml",
    "content": "<view class=\"page\">\n    <view class=\"page__hd\">\n        <view class=\"page__title\">Footer</view>\n        <view class=\"page__desc\">页脚</view>\n    </view>\n    <view class=\"page__bd page__bd_spacing\">\n        <view class=\"weui-footer\">\n            <view class=\"weui-footer__text\">Copyright © 2008-2016 weui.io</view>\n        </view>\n\n\n        <view class=\"weui-footer\">\n            <view class=\"weui-footer__links\">\n                <navigator url=\"\" class=\"weui-footer__link\">底部链接</navigator>\n            </view>\n            <view class=\"weui-footer__text\">Copyright © 2008-2016 weui.io</view>\n        </view>\n\n\n        <view class=\"weui-footer\">\n            <view class=\"weui-footer__links\">\n                <navigator url=\"\" class=\"weui-footer__link\">底部链接</navigator>\n                <navigator url=\"\" class=\"weui-footer__link\">底部链接</navigator>\n            </view>\n            <view class=\"weui-footer__text\">Copyright © 2008-2016 weui.io</view>\n        </view>\n\n\n        <view class=\"weui-footer weui-footer_fixed-bottom\">\n            <view class=\"weui-footer__links\">\n                <navigator url=\"\" class=\"weui-footer__link\">WeUI首页</navigator>\n            </view>\n            <view class=\"weui-footer__text\">Copyright © 2008-2016 weui.io</view>\n        </view>\n    </view>\n</view>"
  },
  {
    "path": "client/dist/example/footer/footer.wxss",
    "content": "/* 作为展示用的样式 */\n\n.weui-footer{\n    margin-bottom: 50px;\n}\n.weui-footer_fixed-bottom{\n    margin-bottom: 0;\n}"
  },
  {
    "path": "client/dist/example/gallery/gallery.js",
    "content": "Page({});"
  },
  {
    "path": "client/dist/example/gallery/gallery.wxml",
    "content": "<view class=\"page\">\n    <view class=\"page__hd\">\n        <view class=\"page__title\">Gallery</view>\n        <view class=\"page__desc\">画廊，建议采用小程序原生的wx.previewImage来实现。详情请看小程序文档。</view>\n    </view>\n</view>"
  },
  {
    "path": "client/dist/example/grid/grid.js",
    "content": "Page({\n    data: {\n        grids: [0, 1, 2, 3, 4, 5, 6, 7, 8]\n    }\n});"
  },
  {
    "path": "client/dist/example/grid/grid.wxml",
    "content": "<view class=\"page\">\n    <view class=\"page__hd\">\n        <view class=\"page__title\">Grid</view>\n        <view class=\"page__desc\">九宫格</view>\n    </view>\n    <view class=\"page__bd\">\n        <view class=\"weui-grids\">\n            <block wx:for=\"{{grids}}\" wx:key=\"*this\">\n                <navigator url=\"\" class=\"weui-grid\" hover-class=\"weui-grid_active\">\n                    <image class=\"weui-grid__icon\" src=\"../images/icon_tabbar.png\" />\n                    <view class=\"weui-grid__label\">Grid</view>\n                </navigator>\n            </block>\n        </view>\n    </view>\n</view>"
  },
  {
    "path": "client/dist/example/icons/icons.js",
    "content": "Page({});"
  },
  {
    "path": "client/dist/example/icons/icons.wxml",
    "content": "<view class=\"page\">\n    <view class=\"page__hd\">\n        <view class=\"page__title\">Icons</view>\n        <view class=\"page__desc\">图标</view>\n    </view>\n    <view class=\"page__bd\">\n        <view class=\"icon-box\">\n            <icon type=\"success\" size=\"93\"></icon>\n            <view class=\"icon-box__ctn\">\n                <view class=\"icon-box__title\">成功</view>\n                <view class=\"icon-box__desc\">用于表示操作顺利达成</view>\n            </view>\n        </view>\n        <view class=\"icon-box\">\n            <icon type=\"info\" size=\"93\"></icon>\n            <view class=\"icon-box__ctn\">\n                <view class=\"icon-box__title\">提示</view>\n                <view class=\"icon-box__desc\">用于表示信息提示；也常用于缺乏条件的操作拦截，提示用户所需信息</view>\n            </view>\n        </view>\n        <view class=\"icon-box\">\n            <icon type=\"warn\" size=\"93\" color=\"#FFBE00\"></icon>\n            <view class=\"icon-box__ctn\">\n                <view class=\"icon-box__title\">普通警告</view>\n                <view class=\"icon-box__desc\">用于表示操作后将引起一定后果的情况</view>\n            </view>\n        </view>\n        <view class=\"icon-box\">\n            <icon type=\"warn\" size=\"93\"></icon>\n            <view class=\"icon-box__ctn\">\n                <view class=\"icon-box__title\">强烈警告</view>\n                <view class=\"icon-box__desc\">用于表示操作后将引起严重的不可挽回的后果的情况</view>\n            </view>\n        </view>\n        <view class=\"icon-box\">\n            <icon type=\"waiting\" size=\"93\"></icon>\n            <view class=\"icon-box__ctn\">\n                <view class=\"icon-box__title\">等待</view>\n                <view class=\"icon-box__desc\">用于表示等待</view>\n            </view>\n        </view>\n        <view class=\"icon_sp_area\">\n            <icon type=\"success\" size=\"23\"></icon>\n            <icon type=\"success_no_circle\" size=\"23\"></icon>\n            <icon type=\"circle\" size=\"23\"></icon>\n            <icon type=\"warn\" size=\"23\" color=\"#F43530\"></icon>\n            <icon type=\"download\" size=\"23\"></icon>\n            <icon type=\"info_circle\" size=\"23\"></icon>\n            <icon type=\"cancel\" size=\"23\"></icon>\n            <icon type=\"search\" size=\"20\"></icon>\n        </view>\n    </view>\n</view>"
  },
  {
    "path": "client/dist/example/icons/icons.wxss",
    "content": "icon{\n    margin-right: 13px;\n}\n.page__bd {\n    padding-left: 40px;\n    padding-right: 40px;\n    text-align: left;\n}\n.icon-box{\n    margin-bottom: 25px;\n    display: flex;\n    align-items: center;\n}\n.icon-box__ctn{\n    flex-shrink: 100;\n}\n.icon-box__title{\n    font-size: 20px;\n}\n.icon-box__desc{\n    margin-top: 6px;\n    font-size: 12px;\n    color: #888888;\n}\n.icon_sp_area {\n    margin-top: 10px;\n    text-align: left;\n}"
  },
  {
    "path": "client/dist/example/images/base64.js",
    "content": "module.exports = {\n    icon20: \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAC4AAAAuCAMAAABgZ9sFAAAAVFBMVEXx8fHMzMzr6+vn5+fv7+/t7e3d3d2+vr7W1tbHx8eysrKdnZ3p6enk5OTR0dG7u7u3t7ejo6PY2Njh4eHf39/T09PExMSvr6+goKCqqqqnp6e4uLgcLY/OAAAAnklEQVRIx+3RSRLDIAxE0QYhAbGZPNu5/z0zrXHiqiz5W72FqhqtVuuXAl3iOV7iPV/iSsAqZa9BS7YOmMXnNNX4TWGxRMn3R6SxRNgy0bzXOW8EBO8SAClsPdB3psqlvG+Lw7ONXg/pTld52BjgSSkA3PV2OOemjIDcZQWgVvONw60q7sIpR38EnHPSMDQ4MjDjLPozhAkGrVbr/z0ANjAF4AcbXmYAAAAASUVORK5CYII=\",\n    icon60: \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAB4CAMAAAAOusbgAAAAeFBMVEUAwAD///+U5ZTc9twOww7G8MYwzDCH4YcfyR9x23Hw+/DY9dhm2WZG0kbT9NP0/PTL8sux7LFe115T1VM+zz7i+OIXxhes6qxr2mvA8MCe6J6M4oz6/frr+us5zjn2/fa67rqB4IF13XWn6ad83nxa1loqyirn+eccHxx4AAAC/klEQVRo3u2W2ZKiQBBF8wpCNSCyLwri7v//4bRIFVXoTBBB+DAReV5sG6lTXDITiGEYhmEYhmEYhmEYhmEY5v9i5fsZGRx9PyGDne8f6K9cfd+mKXe1yNG/0CcqYE86AkBMBh66f20deBc7wA/1WFiTwvSEpBMA2JJOBsSLxe/4QEEaJRrASP8EVF8Q74GbmevKg0saa0B8QbwBdjRyADYxIhqxAZ++IKYtciPXLQVG+imw+oo4Bu56rjEJ4GYsvPmKOAB+xlz7L5aevqUXuePWVhvWJ4eWiwUQ67mK51qPj4dFDMlRLBZTqF3SDvmr4BwtkECu5gHWPkmDfQh02WLxXuvbvC8ku8F57GsI5e0CmUwLz1kq3kD17R1In5816rGvQ5VMk5FEtIiWislTffuDpl/k/PzscdQsv8r9qWq4LRWX6tQYtTxvI3XyrwdyQxChXioOngH3dLgOFjk0all56XRi/wDFQrGQU3Os5t0wJu1GNtNKHdPqYaGYQuRDfbfDf26AGLYSyGS3ZAK4S8XuoAlxGSdYMKwqZKM9XJMtyqXi7HX/CiAZS6d8bSVUz5J36mEMFDTlAFQzxOT1dzLRljjB6+++ejFqka+mXIe6F59mw22OuOw1F4T6lg/9VjL1rLDoI9Xzl1MSYDNHnPQnt3D1EE7PrXjye/3pVpr1Z45hMUdcACc5NVQI0bOdS1WA0wuz73e7/5TNqBPhQXPEFGJNV2zNqWI7QKBd2Gn6AiBko02zuAOXeWIXjV0jNqdKegaE/kJQ6Bfs4aju04lMLkA2T5wBSYPKDGF3RKhFYEa6A1L1LG2yacmsaZ6YPOSAMKNsO+N5dNTfkc5Aqe26uxHpx7ZirvgCwJpWq/lmX1hA7LyabQ34tt5RiJKXSwQ+0KU0V5xg+hZrd4Bn1n4EID+WkQdgLfRNtvil9SPfwy+WQ7PFBWQz6dGWZBLkeJFXZGCfLUjCgGgqXo5TuSu3cugdcTv/HjqnBTEMwzAMwzAMwzAMwzAMw/zf/AFbXiOA6frlMAAAAABJRU5ErkJggg==\"\n};"
  },
  {
    "path": "client/dist/example/index.js",
    "content": "Page({\n    data: {\n        list: [\n            {\n                id: 'form',\n                name: '表单',\n                open: false,\n                pages: ['button', 'list', 'input', 'slider', 'uploader']\n            },\n            {\n                id: 'widget',\n                name: '基础组件',\n                open: false,\n                pages: ['article', 'badge', 'flex', 'footer', 'gallery', 'grid', 'icons', 'loadmore', 'panel', 'preview', 'progress']\n            },\n            {\n                id: 'feedback',\n                name: '操作反馈',\n                open: false,\n                pages: ['actionsheet', 'dialog', 'msg', 'picker', 'toast']\n            },\n            {\n                id: 'nav',\n                name: '导航相关',\n                open: false,\n                pages: ['navbar', 'tabbar']\n            },\n            {\n                id: 'search',\n                name: '搜索相关',\n                open: false,\n                pages: ['searchbar']\n            }\n        ]\n    },\n    kindToggle: function (e) {\n        var id = e.currentTarget.id, list = this.data.list;\n        for (var i = 0, len = list.length; i < len; ++i) {\n            if (list[i].id == id) {\n                list[i].open = !list[i].open\n            } else {\n                list[i].open = false\n            }\n        }\n        this.setData({\n            list: list\n        });\n    }\n});\n"
  },
  {
    "path": "client/dist/example/index.wxml",
    "content": "<view class=\"page\">\n    <view class=\"page__hd\">\n        <view class=\"page__title\">WeUI</view>\n        <view class=\"page__desc\">WeUI 是一套同微信原生视觉体验一致的基础样式库，由微信官方设计团队为微信内网页和微信小程序量身设计，令用户的使用感知更加统一。</view>\n    </view>\n    <view class=\"page__bd page__bd_spacing\">\n        <view class=\"kind-list\">\n            <block wx:for=\"{{list}}\" wx:key=\"id\">\n                <view class=\"kind-list__item\">\n                    <view id=\"{{item.id}}\" class=\"weui-flex kind-list__item-hd {{item.open ? 'kind-list__item-hd_show' : ''}}\" bindtap=\"kindToggle\">\n                        <view class=\"weui-flex__item\">{{item.name}}</view>\n                        <image class=\"kind-list__img\" src=\"images/icon_nav_{{item.id}}.png\"></image>\n                    </view>\n                    <view class=\"kind-list__item-bd {{item.open ? 'kind-list__item-bd_show' : ''}}\">\n                        <view class=\"weui-cells {{item.open ? 'weui-cells_show' : ''}}\">\n                            <block wx:for=\"{{item.pages}}\" wx:for-item=\"page\" wx:key=\"*this\">\n                                <navigator url=\"{{page}}/{{page}}\" class=\"weui-cell weui-cell_access\">\n                                    <view class=\"weui-cell__bd\">{{page}}</view>\n                                    <view class=\"weui-cell__ft weui-cell__ft_in-access\"></view>\n                                </navigator>\n                            </block>\n                        </view>\n                    </view>\n                </view>\n            </block>\n        </view>\n    </view>\n    <view class=\"page__ft\">\n        <image src=\"images/icon_footer.png\" style=\"width: 84px; height: 19px;\"></image>\n    </view>\n</view>"
  },
  {
    "path": "client/dist/example/index.wxss",
    "content": "/*!\n * WeUI v1.1.1 (https://github.com/weui/weui-wxss)\n * Copyright 2017 Tencent, Inc.\n * Licensed under the MIT license\n */\n.weui-flex{-webkit-box-align:center;-webkit-align-items:center;align-items:center}.weui-cells{margin-top:0;opacity:0;-webkit-transform:translateY(-50%);transform:translateY(-50%);-webkit-transition:.3s;transition:.3s}.weui-cells:after,.weui-cells:before{display:none}.weui-cells_show{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}.weui-cell:before{right:15px}.kind-list__item{margin:10px 0;background-color:#fff;border-radius:2px;overflow:hidden}.kind-list__item:first-child{margin-top:0}.kind-list__img{width:30px;height:30px}.kind-list__item-hd{padding:20px;-webkit-transition:opacity .3s;transition:opacity .3s}.kind-list__item-hd_show{opacity:.4}.kind-list__item-bd{height:0;overflow:hidden}.kind-list__item-bd_show{height:auto}"
  },
  {
    "path": "client/dist/example/input/input.js",
    "content": "Page({\n    data: {\n        showTopTips: false,\n\n        radioItems: [\n            {name: 'cell standard', value: '0'},\n            {name: 'cell standard', value: '1', checked: true}\n        ],\n        checkboxItems: [\n            {name: 'standard is dealt for u.', value: '0', checked: true},\n            {name: 'standard is dealicient for u.', value: '1'}\n        ],\n\n        date: \"2016-09-01\",\n        time: \"12:01\",\n\n        countryCodes: [\"+86\", \"+80\", \"+84\", \"+87\"],\n        countryCodeIndex: 0,\n\n        countries: [\"中国\", \"美国\", \"英国\"],\n        countryIndex: 0,\n\n        accounts: [\"微信号\", \"QQ\", \"Email\"],\n        accountIndex: 0,\n\n        isAgree: false\n    },\n    showTopTips: function(){\n        var that = this;\n        this.setData({\n            showTopTips: true\n        });\n        setTimeout(function(){\n            that.setData({\n                showTopTips: false\n            });\n        }, 3000);\n    },\n    radioChange: function (e) {\n        console.log('radio发生change事件，携带value值为：', e.detail.value);\n\n        var radioItems = this.data.radioItems;\n        for (var i = 0, len = radioItems.length; i < len; ++i) {\n            radioItems[i].checked = radioItems[i].value == e.detail.value;\n        }\n\n        this.setData({\n            radioItems: radioItems\n        });\n    },\n    checkboxChange: function (e) {\n        console.log('checkbox发生change事件，携带value值为：', e.detail.value);\n\n        var checkboxItems = this.data.checkboxItems, values = e.detail.value;\n        for (var i = 0, lenI = checkboxItems.length; i < lenI; ++i) {\n            checkboxItems[i].checked = false;\n\n            for (var j = 0, lenJ = values.length; j < lenJ; ++j) {\n                if(checkboxItems[i].value == values[j]){\n                    checkboxItems[i].checked = true;\n                    break;\n                }\n            }\n        }\n\n        this.setData({\n            checkboxItems: checkboxItems\n        });\n    },\n    bindDateChange: function (e) {\n        this.setData({\n            date: e.detail.value\n        })\n    },\n    bindTimeChange: function (e) {\n        this.setData({\n            time: e.detail.value\n        })\n    },\n    bindCountryCodeChange: function(e){\n        console.log('picker country code 发生选择改变，携带值为', e.detail.value);\n\n        this.setData({\n            countryCodeIndex: e.detail.value\n        })\n    },\n    bindCountryChange: function(e) {\n        console.log('picker country 发生选择改变，携带值为', e.detail.value);\n\n        this.setData({\n            countryIndex: e.detail.value\n        })\n    },\n    bindAccountChange: function(e) {\n        console.log('picker account 发生选择改变，携带值为', e.detail.value);\n\n        this.setData({\n            accountIndex: e.detail.value\n        })\n    },\n    bindAgreeChange: function (e) {\n        this.setData({\n            isAgree: !!e.detail.value.length\n        });\n    }\n});"
  },
  {
    "path": "client/dist/example/input/input.wxml",
    "content": "<view class=\"page\" xmlns:wx=\"http://www.w3.org/1999/xhtml\">\n    <view class=\"page__hd\">\n        <view class=\"page__title\">Input</view>\n        <view class=\"page__desc\">表单输入</view>\n    </view>\n    <view class=\"page__bd\">\n        <view class=\"weui-toptips weui-toptips_warn\" wx:if=\"{{showTopTips}}\">错误提示</view>\n\n        <view class=\"weui-cells__title\">单选列表项</view>\n        <view class=\"weui-cells weui-cells_after-title\">\n            <radio-group bindchange=\"radioChange\">\n                <label class=\"weui-cell weui-check__label\" wx:for=\"{{radioItems}}\" wx:key=\"value\">\n                    <radio class=\"weui-check\" value=\"{{item.value}}\" checked=\"{{item.checked}}\"/>\n\n                    <view class=\"weui-cell__bd\">{{item.name}}</view>\n                    <view class=\"weui-cell__ft weui-cell__ft_in-radio\" wx:if=\"{{item.checked}}\">\n                        <icon class=\"weui-icon-radio\" type=\"success_no_circle\" size=\"16\"></icon>\n                    </view>\n                </label>\n            </radio-group>\n            <view class=\"weui-cell weui-cell_link\">\n                <view class=\"weui-cell__bd\">添加更多</view>\n            </view>\n        </view>\n\n        <view class=\"weui-cells__title\">复选列表项</view>\n        <view class=\"weui-cells weui-cells_after-title\">\n            <checkbox-group bindchange=\"checkboxChange\">\n                <label class=\"weui-cell weui-check__label\" wx:for=\"{{checkboxItems}}\" wx:key=\"value\">\n                    <checkbox class=\"weui-check\" value=\"{{item.value}}\" checked=\"{{item.checked}}\"/>\n\n                    <view class=\"weui-cell__hd weui-check__hd_in-checkbox\">\n                        <icon class=\"weui-icon-checkbox_circle\" type=\"circle\" size=\"23\" wx:if=\"{{!item.checked}}\"></icon>\n                        <icon class=\"weui-icon-checkbox_success\" type=\"success\" size=\"23\" wx:if=\"{{item.checked}}\"></icon>\n                    </view>\n                    <view class=\"weui-cell__bd\">{{item.name}}</view>\n                </label>\n            </checkbox-group>\n            <view class=\"weui-cell weui-cell_link\">\n                <view class=\"weui-cell__bd\">添加更多</view>\n            </view>\n        </view>\n\n        <view class=\"weui-cells__title\">表单</view>\n        <view class=\"weui-cells weui-cells_after-title\">\n            <view class=\"weui-cell weui-cell_input\">\n                <view class=\"weui-cell__hd\">\n                    <view class=\"weui-label\">qq</view>\n                </view>\n                <view class=\"weui-cell__bd\">\n                    <input class=\"weui-input\" placeholder=\"请输入qq\"/>\n                </view>\n            </view>\n            <view class=\"weui-cell weui-cell_input weui-cell_vcode\">\n                <view class=\"weui-cell__hd\">\n                    <view class=\"weui-label\">手机号</view>\n                </view>\n                <view class=\"weui-cell__bd\">\n                    <input class=\"weui-input\" placeholder=\"请输入手机号\" />\n                </view>\n                <view class=\"weui-cell__ft\">\n                    <view class=\"weui-vcode-btn\">获取验证码</view>\n                </view>\n            </view>\n            <view class=\"weui-cell weui-cell_input\">\n                <view class=\"weui-cell__hd\">\n                    <view class=\"weui-label\">日期</view>\n                </view>\n                <view class=\"weui-cell__bd\">\n                    <picker mode=\"date\" value=\"{{date}}\" start=\"2015-09-01\" end=\"2017-09-01\" bindchange=\"bindDateChange\">\n                        <view class=\"weui-input\">{{date}}</view>\n                    </picker>\n                </view>\n            </view>\n            <view class=\"weui-cell weui-cell_input\">\n                <view class=\"weui-cell__hd\">\n                    <view class=\"weui-label\">时间</view>\n                </view>\n                <view class=\"weui-cell__bd\">\n                    <picker mode=\"time\" value=\"{{time}}\" start=\"09:01\" end=\"21:01\" bindchange=\"bindTimeChange\">\n                        <view class=\"weui-input\">{{time}}</view>\n                    </picker>\n                </view>\n            </view>\n            <view class=\"weui-cell weui-cell_input weui-cell_vcode\">\n                <view class=\"weui-cell__hd\">\n                    <view class=\"weui-label\">验证码</view>\n                </view>\n                <view class=\"weui-cell__bd\">\n                    <input class=\"weui-input\" placeholder=\"请输入验证码\" />\n                </view>\n                <view class=\"weui-cell__ft\">\n                    <image class=\"weui-vcode-img\" src=\"../images/vcode.jpg\" style=\"width: 108px\"></image>\n                </view>\n            </view>\n        </view>\n        <view class=\"weui-cells__tips\">底部说明文字底部说明文字</view>\n\n        <view class=\"weui-cells__title\">表单报错</view>\n        <view class=\"weui-cells weui-cells_after-title\">\n            <view class=\"weui-cell weui-cell_input weui-cell_warn\">\n                <view class=\"weui-cell__hd\">\n                    <view class=\"weui-label\">卡号</view>\n                </view>\n                <view class=\"weui-cell__bd\">\n                    <input class=\"weui-input\" placeholder=\"请输入卡号\"/>\n                </view>\n                <view class=\"weui-cell__ft\">\n                    <icon type=\"warn\" size=\"23\" color=\"#E64340\"></icon>\n                </view>\n            </view>\n        </view>\n\n        <view class=\"weui-cells__title\">开关</view>\n        <view class=\"weui-cells weui-cells_after-title\">\n            <view class=\"weui-cell weui-cell_switch\">\n                <view class=\"weui-cell__bd\">标题文字</view>\n                <view class=\"weui-cell__ft\">\n                    <switch checked />\n                </view>\n            </view>\n        </view>\n\n        <view class=\"weui-cells__title\">文本框</view>\n        <view class=\"weui-cells weui-cells_after-title\">\n            <view class=\"weui-cell weui-cell_input\">\n                <view class=\"weui-cell__bd\">\n                    <input class=\"weui-input\" placeholder=\"请输入文本\" />\n                </view>\n            </view>\n        </view>\n\n        <view class=\"weui-cells__title\">文本域</view>\n        <view class=\"weui-cells weui-cells_after-title\">\n            <view class=\"weui-cell\">\n                <view class=\"weui-cell__bd\">\n                    <textarea class=\"weui-textarea\" placeholder=\"请输入文本\" style=\"height: 3.3em\" />\n                    <view class=\"weui-textarea-counter\">0/200</view>\n                </view>\n            </view>\n        </view>\n\n        <view class=\"weui-cells__title\">选择</view>\n        <view class=\"weui-cells weui-cells_after-title\">\n            <view class=\"weui-cell weui-cell_select\">\n                <view class=\"weui-cell__hd\" style=\"width: 105px\">\n                    <picker bindchange=\"bindCountryCodeChange\" value=\"{{countryCodeIndex}}\" range=\"{{countryCodes}}\">\n                        <view class=\"weui-select\">{{countryCodes[countryCodeIndex]}}</view>\n                    </picker>\n                </view>\n                <view class=\"weui-cell__bd weui-cell__bd_in-select-before\">\n                    <input class=\"weui-input\" placeholder=\"请输入号码\" />\n                </view>\n            </view>\n        </view>\n\n        <view class=\"weui-cells__title\">选择</view>\n        <view class=\"weui-cells weui-cells_after-title\">\n            <view class=\"weui-cell weui-cell_select\">\n                <view class=\"weui-cell__bd\">\n                    <picker bindchange=\"bindAccountChange\" value=\"{{accountIndex}}\" range=\"{{accounts}}\">\n                        <view class=\"weui-select\">{{accounts[accountIndex]}}</view>\n                    </picker>\n                </view>\n            </view>\n            <view class=\"weui-cell weui-cell_select\">\n                <view class=\"weui-cell__hd weui-cell__hd_in-select-after\">\n                    <view class=\"weui-label\">国家/地区</view>\n                </view>\n                <view class=\"weui-cell__bd\">\n                    <picker bindchange=\"bindCountryChange\" value=\"{{countryIndex}}\" range=\"{{countries}}\">\n                        <view class=\"weui-select weui-select_in-select-after\">{{countries[countryIndex]}}</view>\n                    </picker>\n                </view>\n            </view>\n        </view>\n\n        <checkbox-group bindchange=\"bindAgreeChange\">\n            <label class=\"weui-agree\" for=\"weuiAgree\">\n                <view class=\"weui-agree__text\">\n                    <checkbox class=\"weui-agree__checkbox\" id=\"weuiAgree\" value=\"agree\" checked=\"{{isAgree}}\" />\n                    <view class=\"weui-agree__checkbox-icon\">\n                        <icon class=\"weui-agree__checkbox-icon-check\" type=\"success_no_circle\" size=\"9\" wx:if=\"{{isAgree}}\"></icon>\n                    </view>\n                    阅读并同意<navigator url=\"\" class=\"weui-agree__link\">《相关条款》</navigator>\n                </view>\n            </label>\n        </checkbox-group>\n\n        <view class=\"weui-btn-area\">\n            <button class=\"weui-btn\" type=\"primary\" bindtap=\"showTopTips\">确定</button>\n        </view>\n    </view>\n</view>"
  },
  {
    "path": "client/dist/example/list/list.js",
    "content": "var base64 = require(\"../images/base64\");\nPage({\n    onLoad: function(){\n        this.setData({\n            icon: base64.icon20\n        });\n    }\n});"
  },
  {
    "path": "client/dist/example/list/list.wxml",
    "content": "<view class=\"page\">\n    <view class=\"page__hd\">\n        <view class=\"page__title\">List</view>\n        <view class=\"page__desc\">列表</view>\n    </view>\n    <view class=\"page__bd\">\n        <view class=\"weui-cells__title\">带说明的列表项</view>\n        <view class=\"weui-cells weui-cells_after-title\">\n            <view class=\"weui-cell\">\n                <view class=\"weui-cell__bd\">标题文字</view>\n                <view class=\"weui-cell__ft\">说明文字</view>\n            </view>\n        </view>\n\n        <view class=\"weui-cells__title\">带图标、说明的列表项</view>\n        <view class=\"weui-cells weui-cells_after-title\">\n            <view class=\"weui-cell\">\n                <view class=\"weui-cell__hd\">\n                    <image src=\"{{icon}}\" style=\"margin-right: 5px;vertical-align: middle;width:20px; height: 20px;\"></image>\n                </view>\n                <view class=\"weui-cell__bd\">标题文字</view>\n                <view class=\"weui-cell__ft\">说明文字</view>\n            </view>\n            <view class=\"weui-cell\">\n                <view class=\"weui-cell__hd\">\n                    <image src=\"{{icon}}\" style=\"margin-right: 5px;vertical-align: middle;width:20px; height: 20px;\"></image>\n                </view>\n                <view class=\"weui-cell__bd\">标题文字</view>\n                <view class=\"weui-cell__ft\">说明文字</view>\n            </view>\n        </view>\n\n        <view class=\"weui-cells__title\">带跳转的列表项</view>\n        <view class=\"weui-cells weui-cells_after-title\">\n            <navigator url=\"\" class=\"weui-cell weui-cell_access\" hover-class=\"weui-cell_active\">\n                <view class=\"weui-cell__bd\">cell standard</view>\n                <view class=\"weui-cell__ft weui-cell__ft_in-access\"></view>\n            </navigator>\n            <navigator url=\"\" class=\"weui-cell weui-cell_access\" hover-class=\"weui-cell_active\">\n                <view class=\"weui-cell__bd\">cell standard</view>\n                <view class=\"weui-cell__ft weui-cell__ft_in-access\"></view>\n            </navigator>\n        </view>\n\n        <view class=\"weui-cells__title\">带说明、跳转的列表项</view>\n        <view class=\"weui-cells weui-cells_after-title\">\n            <navigator url=\"\" class=\"weui-cell weui-cell_access\" hover-class=\"weui-cell_active\">\n                <view class=\"weui-cell__bd\">cell standard</view>\n                <view class=\"weui-cell__ft weui-cell__ft_in-access\">说明文字</view>\n            </navigator>\n            <navigator url=\"\" class=\"weui-cell weui-cell_access\" hover-class=\"weui-cell_active\">\n                <view class=\"weui-cell__bd\">cell standard</view>\n                <view class=\"weui-cell__ft weui-cell__ft_in-access\">说明文字</view>\n            </navigator>\n        </view>\n\n        <view class=\"weui-cells__title\">带图标、说明、跳转的列表项</view>\n        <view class=\"weui-cells weui-cells_after-title\">\n            <navigator url=\"\" class=\"weui-cell weui-cell_access\" hover-class=\"weui-cell_active\">\n                <view class=\"weui-cell__hd\">\n                    <image src=\"{{icon}}\" style=\"margin-right: 5px;vertical-align: middle;width:20px; height: 20px;\"></image>\n                </view>\n                <view class=\"weui-cell__bd\">cell standard</view>\n                <view class=\"weui-cell__ft weui-cell__ft_in-access\">说明文字</view>\n            </navigator>\n            <navigator url=\"\" class=\"weui-cell weui-cell_access\" hover-class=\"weui-cell_active\">\n                <view class=\"weui-cell__hd\">\n                    <image src=\"{{icon}}\" style=\"margin-right: 5px;vertical-align: middle;width:20px; height: 20px;\"></image>\n                </view>\n                <view class=\"weui-cell__bd\">cell standard</view>\n                <view class=\"weui-cell__ft weui-cell__ft_in-access\">说明文字</view>\n            </navigator>\n        </view>\n    </view>\n</view>"
  },
  {
    "path": "client/dist/example/loadmore/loadmore.js",
    "content": "Page({});"
  },
  {
    "path": "client/dist/example/loadmore/loadmore.wxml",
    "content": "<view class=\"page\">\n    <view class=\"page__hd\">\n        <view class=\"page__title\">Loadmore</view>\n        <view class=\"page__desc\">加载更多</view>\n    </view>\n    <view class=\"page__bd\">\n        <view class=\"weui-loadmore\">\n            <view class=\"weui-loading\"></view>\n            <view class=\"weui-loadmore__tips\">正在加载</view>\n        </view>\n        <view class=\"weui-loadmore weui-loadmore_line\">\n            <view class=\"weui-loadmore__tips weui-loadmore__tips_in-line\">暂无数据</view>\n        </view>\n        <view class=\"weui-loadmore weui-loadmore_line weui-loadmore_dot\">\n            <view class=\"weui-loadmore__tips weui-loadmore__tips_in-line weui-loadmore__tips_in-dot\"></view>\n        </view>\n    </view>\n</view>"
  },
  {
    "path": "client/dist/example/loadmore/loadmore.wxss",
    "content": "page{\n    background-color: #FFFFFF;\n}"
  },
  {
    "path": "client/dist/example/msg/msg.js",
    "content": "Page({\n    openSuccess: function () {\n        wx.navigateTo({\n            url: 'msg_success'\n        })\n    },\n    openFail: function () {\n        wx.navigateTo({\n            url: 'msg_fail'\n        })\n    }\n});"
  },
  {
    "path": "client/dist/example/msg/msg.wxml",
    "content": "<view class=\"page\">\n    <view class=\"page__hd\">\n        <view class=\"page__title\">Msg</view>\n        <view class=\"page__desc\">提示页</view>\n    </view>\n    <view class=\"page__bd\">\n        <view class=\"weui-btn-area\">\n            <button class=\"weui-btn\" type=\"default\" bindtap=\"openSuccess\">成功提示页</button>\n            <button class=\"weui-btn\" type=\"default\" bindtap=\"openFail\">失败提示页</button>\n        </view>\n    </view>\n</view>"
  },
  {
    "path": "client/dist/example/msg/msg.wxss",
    "content": "page{\n    background-color: #FFFFFF;\n}"
  },
  {
    "path": "client/dist/example/msg/msg_fail.js",
    "content": "Page({});"
  },
  {
    "path": "client/dist/example/msg/msg_fail.wxml",
    "content": "<view class=\"page\">\n    <view class=\"weui-msg\">\n        <view class=\"weui-msg__icon-area\">\n            <icon type=\"warn\" size=\"93\"></icon>\n        </view>\n        <view class=\"weui-msg__text-area\">\n            <view class=\"weui-msg__title\">操作失败</view>\n            <view class=\"weui-msg__desc\">内容详情，可根据实际需要安排，如果换行则不超过规定长度，居中展现<navigator url=\"\" class=\"weui-msg__link\">文字链接</navigator></view>\n        </view>\n        <view class=\"weui-msg__opr-area\">\n            <view class=\"weui-btn-area\">\n                <button class=\"weui-btn\" type=\"primary\">推荐操作</button>\n                <button class=\"weui-btn\" type=\"default\">辅助操作</button>\n            </view>\n        </view>\n        <view class=\"weui-msg__extra-area\">\n            <view class=\"weui-footer\">\n                <view class=\"weui-footer__links\">\n                    <navigator url=\"\" class=\"weui-footer__link\">底部链接文本</navigator>\n                </view>\n                <view class=\"weui-footer__text\">Copyright © 2008-2016 weui.io</view>\n            </view>\n        </view>\n    </view>\n</view>"
  },
  {
    "path": "client/dist/example/msg/msg_fail.wxss",
    "content": "page{\n    background-color: #FFFFFF;\n}"
  },
  {
    "path": "client/dist/example/msg/msg_success.js",
    "content": "Page({});"
  },
  {
    "path": "client/dist/example/msg/msg_success.wxml",
    "content": "<view class=\"page\">\n    <view class=\"weui-msg\">\n        <view class=\"weui-msg__icon-area\">\n            <icon type=\"success\" size=\"93\"></icon>\n        </view>\n        <view class=\"weui-msg__text-area\">\n            <view class=\"weui-msg__title\">操作成功</view>\n            <view class=\"weui-msg__desc\">内容详情，可根据实际需要安排，如果换行则不超过规定长度，居中展现<navigator url=\"\" class=\"weui-msg__link\">文字链接</navigator></view>\n        </view>\n        <view class=\"weui-msg__opr-area\">\n            <view class=\"weui-btn-area\">\n                <button class=\"weui-btn\" type=\"primary\">推荐操作</button>\n                <button class=\"weui-btn\" type=\"default\">辅助操作</button>\n            </view>\n        </view>\n        <view class=\"weui-msg__extra-area\">\n            <view class=\"weui-footer\">\n                <view class=\"weui-footer__links\">\n                    <navigator url=\"\" class=\"weui-footer__link\">底部链接文本</navigator>\n                </view>\n                <view class=\"weui-footer__text\">Copyright © 2008-2016 weui.io</view>\n            </view>\n        </view>\n    </view>\n</view>"
  },
  {
    "path": "client/dist/example/msg/msg_success.wxss",
    "content": "page{\n    background-color: #FFFFFF;\n}"
  },
  {
    "path": "client/dist/example/navbar/navbar.js",
    "content": "var sliderWidth = 96; // 需要设置slider的宽度，用于计算中间位置\n\nPage({\n    data: {\n        tabs: [\"选项一\", \"选项二\", \"选项三\"],\n        activeIndex: 1,\n        sliderOffset: 0,\n        sliderLeft: 0\n    },\n    onLoad: function () {\n        var that = this;\n        wx.getSystemInfo({\n            success: function(res) {\n                that.setData({\n                    sliderLeft: (res.windowWidth / that.data.tabs.length - sliderWidth) / 2,\n                    sliderOffset: res.windowWidth / that.data.tabs.length * that.data.activeIndex\n                });\n            }\n        });\n    },\n    tabClick: function (e) {\n        this.setData({\n            sliderOffset: e.currentTarget.offsetLeft,\n            activeIndex: e.currentTarget.id\n        });\n    }\n});"
  },
  {
    "path": "client/dist/example/navbar/navbar.wxml",
    "content": "<view class=\"page\">\n    <view class=\"page__bd\">\n        <view class=\"weui-tab\">\n            <view class=\"weui-navbar\">\n                <block wx:for=\"{{tabs}}\" wx:key=\"*this\">\n                    <view id=\"{{index}}\" class=\"weui-navbar__item {{activeIndex == index ? 'weui-bar__item_on' : ''}}\" bindtap=\"tabClick\">\n                        <view class=\"weui-navbar__title\">{{item}}</view>\n                    </view>\n                </block>\n                <view class=\"weui-navbar__slider\" style=\"left: {{sliderLeft}}px; transform: translateX({{sliderOffset}}px); -webkit-transform: translateX({{sliderOffset}}px);\"></view>\n            </view>\n            <view class=\"weui-tab__panel\">\n                <view class=\"weui-tab__content\" hidden=\"{{activeIndex != 0}}\">选项一的内容</view>\n                <view class=\"weui-tab__content\" hidden=\"{{activeIndex != 1}}\">选项二的内容</view>\n                <view class=\"weui-tab__content\" hidden=\"{{activeIndex != 2}}\">选项三的内容</view>\n            </view>\n        </view>\n    </view>\n</view>"
  },
  {
    "path": "client/dist/example/navbar/navbar.wxss",
    "content": "page,\n.page,\n.page__bd{\n    height: 100%;\n}\n.page__bd{\n    padding-bottom: 0;\n}\n.weui-tab__content{\n    padding-top: 60px;\n    text-align: center;\n}"
  },
  {
    "path": "client/dist/example/panel/panel.js",
    "content": "var base64 = require(\"../images/base64\");\n\nPage({\n    onLoad: function(){\n        this.setData({\n            icon20: base64.icon20,\n            icon60: base64.icon60\n        });\n    }\n});"
  },
  {
    "path": "client/dist/example/panel/panel.wxml",
    "content": "<view class=\"page\">\n  <view class=\"page__hd\">\n    <view class=\"page__title\">Panel</view>\n    <view class=\"page__desc\">面板</view>\n  </view>\n  <view class=\"page__bd\">\n    <view class=\"weui-panel weui-panel_access\">\n      <view class=\"weui-panel__hd\">图文组合列表</view>\n      <view class=\"weui-panel__bd\">\n        <navigator url=\"\" class=\"weui-media-box weui-media-box_appmsg\" hover-class=\"weui-cell_active\">\n          <view class=\"weui-media-box__hd weui-media-box__hd_in-appmsg\">\n            <image class=\"weui-media-box__thumb\" src=\"{{icon60}}\" />\n          </view>\n          <view class=\"weui-media-box__bd weui-media-box__bd_in-appmsg\">\n            <view class=\"weui-media-box__title\">标题一</view>\n            <view class=\"weui-media-box__desc\">由各种物质组成的巨型球状天体，叫做星球。星球有一定的形状，有自己的运行轨道。</view>\n          </view>\n        </navigator>\n        <navigator url=\"\" class=\"weui-media-box weui-media-box_appmsg\" hover-class=\"weui-cell_active\">\n          <view class=\"weui-media-box__hd weui-media-box__hd_in-appmsg\">\n            <image class=\"weui-media-box__thumb\" src=\"{{icon60}}\" />\n          </view>\n          <view class=\"weui-media-box__bd weui-media-box__bd_in-appmsg\">\n            <view class=\"weui-media-box__title\">标题二</view>\n            <view class=\"weui-media-box__desc\">由各种物质组成的巨型球状天体，叫做星球。星球有一定的形状，有自己的运行轨道。</view>\n          </view>\n        </navigator>\n      </view>\n      <view class=\"weui-panel__ft\">\n        <view class=\"weui-cell weui-cell_access weui-cell_link\">\n          <view class=\"weui-cell__bd\">查看更多</view>\n          <view class=\"weui-cell__ft weui-cell__ft_in-access\"></view>\n        </view>\n      </view>\n    </view>\n    <view class=\"weui-panel weui-panel_access\">\n      <view class=\"weui-panel__hd\">文字组合列表</view>\n      <view class=\"weui-panel__bd\">\n        <view class=\"weui-media-box weui-media-box_text\">\n          <view class=\"weui-media-box__title weui-media-box__title_in-text\">标题一</view>\n          <view class=\"weui-media-box__desc\">由各种物质组成的巨型球状天体，叫做星球。星球有一定的形状，有自己的运行轨道。</view>\n        </view>\n        <view class=\"weui-media-box weui-media-box_text\">\n          <view class=\"weui-media-box__title weui-media-box__title_in-text\">标题二</view>\n          <view class=\"weui-media-box__desc\">由各种物质组成的巨型球状天体，叫做星球。星球有一定的形状，有自己的运行轨道。</view>\n        </view>\n      </view>\n      <view class=\"weui-panel__ft\">\n        <view class=\"weui-cell weui-cell_access weui-cell_link\">\n          <view class=\"weui-cell__bd\">查看更多</view>\n          <view class=\"weui-cell__ft weui-cell__ft_in-access\"></view>\n        </view>\n      </view>\n    </view>\n    <view class=\"weui-panel\">\n      <view class=\"weui-panel__hd\">小图文组合列表</view>\n      <view class=\"weui-panel__bd\">\n        <view class=\"weui-media-box weui-media-box_small-appmsg\">\n          <view class=\"weui-cells weui-cells_in-small-appmsg\">\n            <navigator url=\"\" class=\"weui-cell weui-cell_access\" hover-class=\"weui-cell_active\">\n              <view class=\"weui-cell__hd\">\n                <image src=\"{{icon20}}\" style=\"width: 20px;height: 20px;margin-right: 5px\" />\n              </view>\n              <view class=\"weui-cell__bd weui-cell_primary\">\n                <view>文字标题</view>\n              </view>\n              <view class=\"weui-cell__ft weui-cell__ft_in-access\"></view>\n            </navigator>\n            <navigator url=\"\" class=\"weui-cell weui-cell_access\" hover-class=\"weui-cell_active\">\n              <view class=\"weui-cell__hd\">\n                <image src=\"{{icon20}}\" style=\"width: 20px;height: 20px;margin-right: 5px\" />\n              </view>\n              <view class=\"weui-cell__bd weui-cell_primary\">\n                <view>文字标题</view>\n              </view>\n              <view class=\"weui-cell__ft weui-cell__ft_in-access\"></view>\n            </navigator>\n          </view>\n        </view>\n      </view>\n    </view>\n    <view class=\"weui-panel\">\n      <view class=\"weui-panel__hd\">文字列表附来源</view>\n      <view class=\"weui-panel__bd\">\n        <view class=\"weui-media-box weui-media-box_text\">\n          <view class=\"weui-media-box__title weui-media-box__title_in-text\">标题一</view>\n          <view class=\"weui-media-box__desc\">由各种物质组成的巨型球状天体，叫做星球。星球有一定的形状，有自己的运行轨道。</view>\n          <view class=\"weui-media-box__info\">\n            <view class=\"weui-media-box__info__meta\">文字来源</view>\n            <view class=\"weui-media-box__info__meta\">时间</view>\n            <view class=\"weui-media-box__info__meta weui-media-box__info__meta_extra\">其它信息</view>\n          </view>\n        </view>\n      </view>\n    </view>\n  </view>\n</view>"
  },
  {
    "path": "client/dist/example/picker/picker.js",
    "content": "Page({\n    data: {\n        array: ['美国', '中国', '巴西', '日本'],\n        index: 0,\n        date: '2016-09-01',\n        time: '12:01'\n    },\n    bindPickerChange: function(e) {\n        console.log('picker发送选择改变，携带值为', e.detail.value)\n        this.setData({\n            index: e.detail.value\n        })\n    },\n    bindDateChange: function(e) {\n        this.setData({\n            date: e.detail.value\n        })\n    },\n    bindTimeChange: function(e) {\n        this.setData({\n            time: e.detail.value\n        })\n    }\n});"
  },
  {
    "path": "client/dist/example/picker/picker.wxml",
    "content": "<view class=\"page\">\n    <view class=\"page__hd\">\n        <view class=\"page__title\">Picker</view>\n        <view class=\"page__desc\">选择器，这里使用小程序原生的picker。</view>\n    </view>\n    <view class=\"page__bd\">\n        <view class=\"weui-btn-area\">\n            <picker bindchange=\"bindPickerChange\" value=\"{{index}}\" range=\"{{array}}\">\n                <button type=\"default\">单列选择器</button>\n            </picker>\n            <picker class=\"weui-btn\" mode=\"time\" value=\"{{time}}\" start=\"09:01\" end=\"21:01\" bindchange=\"bindTimeChange\">\n                <button type=\"default\">时间选择器</button>\n            </picker>\n            <picker class=\"weui-btn\" mode=\"date\" value=\"{{date}}\" start=\"2015-09-01\" end=\"2017-09-01\" bindchange=\"bindDateChange\">\n                <button type=\"default\">日期选择器</button>\n            </picker>\n        </view>\n    </view>\n</view>"
  },
  {
    "path": "client/dist/example/picker/picker.wxss",
    "content": "page{\n    background-color: #FFFFFF;\n}"
  },
  {
    "path": "client/dist/example/preview/preview.js",
    "content": "Page({});"
  },
  {
    "path": "client/dist/example/preview/preview.wxml",
    "content": "<view class=\"page\">\n    <view class=\"page__hd\">\n        <view class=\"page__title\">Preview</view>\n        <view class=\"page__desc\">表单预览</view>\n    </view>\n    <view class=\"page__bd\">\n        <view class=\"weui-form-preview\">\n            <view class=\"weui-form-preview__hd\">\n                <view class=\"weui-form-preview__item\">\n                    <view class=\"weui-form-preview__label\">付款金额</view>\n                    <view class=\"weui-form-preview__value_in-hd\">¥2400.00</view>\n                </view>\n            </view>\n            <view class=\"weui-form-preview__bd\">\n                <view class=\"weui-form-preview__item\">\n                    <view class=\"weui-form-preview__label\">商品</view>\n                    <view class=\"weui-form-preview__value\">电动打蛋机</view>\n                </view>\n                <view class=\"weui-form-preview__item\">\n                    <view class=\"weui-form-preview__label\">标题标题</view>\n                    <view class=\"weui-form-preview__value\">名字名字名字</view>\n                </view>\n                <view class=\"weui-form-preview__item\">\n                    <view class=\"weui-form-preview__label\">标题标题</view>\n                    <view class=\"weui-form-preview__value\">很长很长的名字很长很长的名字很长很长的名字很长很长的名字很长很长的名字</view>\n                </view>\n            </view>\n            <view class=\"weui-form-preview__ft\">\n                <navigator url=\"\" class=\"weui-form-preview__btn weui-form-preview__btn_primary\" hover-class=\"weui-form-preview__btn_active\">操作</navigator>\n            </view>\n        </view>\n        <view class=\"weui-form-preview\">\n            <view class=\"weui-form-preview__hd\">\n                <view class=\"weui-form-preview__label\">付款金额</view>\n                <view class=\"weui-form-preview__value_in-hd\">¥2400.00</view>\n            </view>\n            <view class=\"weui-form-preview__bd\">\n                <view class=\"weui-form-preview__item\">\n                    <view class=\"weui-form-preview__label\">商品</view>\n                    <view class=\"weui-form-preview__value\">电动打蛋机</view>\n                </view>\n                <view class=\"weui-form-preview__item\">\n                    <view class=\"weui-form-preview__label\">标题标题</view>\n                    <view class=\"weui-form-preview__value\">名字名字名字</view>\n                </view>\n                <view class=\"weui-form-preview__item\">\n                    <view class=\"weui-form-preview__label\">标题标题</view>\n                    <view class=\"weui-form-preview__value\">很长很长的名字很长很长的名字很长很长的名字很长很长的名字很长很长的名字</view>\n                </view>\n            </view>\n            <view class=\"weui-form-preview__ft\">\n                <navigator class=\"weui-form-preview__btn weui-form-preview__btn_default\" hover-class=\"weui-form-preview__btn_active\">辅助操作</navigator>\n                <navigator class=\"weui-form-preview__btn weui-form-preview__btn_primary\" hover-class=\"weui-form-preview__btn_active\">操作</navigator>\n            </view>\n        </view>\n    </view>\n</view>"
  },
  {
    "path": "client/dist/example/preview/preview.wxss",
    "content": ".weui-form-preview{\n    margin-bottom: 25px;\n}"
  },
  {
    "path": "client/dist/example/progress/progress.js",
    "content": "function _next(){\n    var that = this;\n    if(this.data.progress >= 100){\n        this.setData({\n            disabled: false\n        });\n        return true;\n    }\n    this.setData({\n        progress: ++this.data.progress\n    });\n    setTimeout(function(){\n        _next.call(that);\n    }, 20);\n}\n\nPage({\n    data: {\n        progress: 0,\n        disabled: false\n    },\n    upload: function(){\n        if(this.data.disabled) return;\n\n        this.setData({\n            progress: 0,\n            disabled: true\n        });\n        _next.call(this);\n    }\n});"
  },
  {
    "path": "client/dist/example/progress/progress.wxml",
    "content": "<view class=\"page\">\n    <view class=\"page__hd\">\n        <view class=\"page__title\">Progress</view>\n        <view class=\"page__desc\">进度条，这里采用小程序原生的progress</view>\n    </view>\n    <view class=\"page__bd page__bd_spacing\">\n        <view class=\"weui-progress\">\n            <view class=\"weui-progress__bar\">\n                <progress percent=\"0\" stroke-width=\"3\" />\n            </view>\n            <view class=\"weui-progress__opr\">\n                <icon type=\"cancel\" size=\"22\"></icon>\n            </view>\n        </view>\n        <view class=\"weui-progress\">\n            <view class=\"weui-progress__bar\">\n                <progress percent=\"50\" stroke-width=\"3\" />\n            </view>\n            <view class=\"weui-progress__opr\">\n                <icon type=\"cancel\" size=\"22\"></icon>\n            </view>\n        </view>\n        <view class=\"weui-progress\">\n            <view class=\"weui-progress__bar\">\n                <progress percent=\"80\" stroke-width=\"3\" />\n            </view>\n            <view class=\"weui-progress__opr\">\n                <icon type=\"cancel\" size=\"22\"></icon>\n            </view>\n        </view>\n        <view class=\"weui-progress\">\n            <view class=\"weui-progress__bar\">\n                <progress percent=\"{{progress}}\" stroke-width=\"3\" />\n            </view>\n            <view class=\"weui-progress__opr\">\n                <icon type=\"cancel\" size=\"22\"></icon>\n            </view>\n        </view>\n        <view class=\"weui-btn-area\">\n            <button type=\"primary\" bindtap=\"upload\" disabled=\"{{disabled}}\">上传</button>\n        </view>\n    </view>\n</view>"
  },
  {
    "path": "client/dist/example/progress/progress.wxss",
    "content": ".weui-progress{\n    margin-bottom: 24px;\n}"
  },
  {
    "path": "client/dist/example/searchbar/searchbar.js",
    "content": "Page({\n    data: {\n        inputShowed: false,\n        inputVal: \"\"\n    },\n    showInput: function () {\n        this.setData({\n            inputShowed: true\n        });\n    },\n    hideInput: function () {\n        this.setData({\n            inputVal: \"\",\n            inputShowed: false\n        });\n    },\n    clearInput: function () {\n        this.setData({\n            inputVal: \"\"\n        });\n    },\n    inputTyping: function (e) {\n        this.setData({\n            inputVal: e.detail.value\n        });\n    }\n});"
  },
  {
    "path": "client/dist/example/searchbar/searchbar.wxml",
    "content": "<view class=\"page\">\n    <view class=\"page__hd\">\n        <view class=\"page__title\">SearchBar</view>\n        <view class=\"page__desc\">搜索栏</view>\n    </view>\n    <view class=\"page__bd\">\n        <view class=\"weui-search-bar\">\n            <view class=\"weui-search-bar__form\">\n                <view class=\"weui-search-bar__box\">\n                    <icon class=\"weui-icon-search_in-box\" type=\"search\" size=\"14\"></icon>\n                    <input type=\"text\" class=\"weui-search-bar__input\" placeholder=\"搜索\" value=\"{{inputVal}}\" focus=\"{{inputShowed}}\" bindinput=\"inputTyping\" />\n                    <view class=\"weui-icon-clear\" wx:if=\"{{inputVal.length > 0}}\" bindtap=\"clearInput\">\n                        <icon type=\"clear\" size=\"14\"></icon>\n                    </view>\n                </view>\n                <label class=\"weui-search-bar__label\" hidden=\"{{inputShowed}}\" bindtap=\"showInput\">\n                    <icon class=\"weui-icon-search\" type=\"search\" size=\"14\"></icon>\n                    <view class=\"weui-search-bar__text\">搜索</view>\n                </label>\n            </view>\n            <view class=\"weui-search-bar__cancel-btn\" hidden=\"{{!inputShowed}}\" bindtap=\"hideInput\">取消</view>\n        </view>\n        <view class=\"weui-cells searchbar-result\" wx:if=\"{{inputVal.length > 0}}\">\n            <navigator url=\"\" class=\"weui-cell\" hover-class=\"weui-cell_active\">\n                <view class=\"weui-cell__bd\">\n                    <view>实时搜索文本</view>\n                </view>\n            </navigator>\n            <navigator url=\"\" class=\"weui-cell\" hover-class=\"weui-cell_active\">\n                <view class=\"weui-cell__bd\">\n                    <view>实时搜索文本</view>\n                </view>\n            </navigator>\n            <navigator url=\"\" class=\"weui-cell\" hover-class=\"weui-cell_active\">\n                <view class=\"weui-cell__bd\">\n                    <view>实时搜索文本</view>\n                </view>\n            </navigator>\n            <navigator url=\"\" class=\"weui-cell\" hover-class=\"weui-cell_active\">\n                <view class=\"weui-cell__bd\">\n                    <view>实时搜索文本</view>\n                </view>\n            </navigator>\n        </view>\n    </view>\n</view>"
  },
  {
    "path": "client/dist/example/searchbar/searchbar.wxss",
    "content": ".searchbar-result{\n    margin-top: 0;\n    font-size: 14px;\n}\n.searchbar-result:before{\n    display: none;\n}\n.weui-cell{\n    padding: 12px 15px 12px 35px;\n}"
  },
  {
    "path": "client/dist/example/slider/slider.js",
    "content": "Page({});"
  },
  {
    "path": "client/dist/example/slider/slider.wxml",
    "content": "<view class=\"page\">\n    <view class=\"page__hd\">\n        <view class=\"page__title\">Slider</view>\n        <view class=\"page__desc\">滑块，这里采用小程序原生的slider。</view>\n    </view>\n\n    <view class=\"page__bd page__bd_spacing\">\n        <slider/>\n        <slider show-value value=\"50\"/>\n    </view>\n</view>"
  },
  {
    "path": "client/dist/example/slider/slider.wxss",
    "content": "slider{\n    margin-bottom: 30px;\n}"
  },
  {
    "path": "client/dist/example/tabbar/tabbar.js",
    "content": "Page({});"
  },
  {
    "path": "client/dist/example/tabbar/tabbar.wxml",
    "content": "<view class=\"page\">\n    <view class=\"page__hd\">\n        <view class=\"page__title\">Tabbar</view>\n        <view class=\"page__desc\">底部导航，建议采用小程序原生的tabbar，通过设置app.json来实现。详情请看小程序文档。</view>\n    </view>\n</view>"
  },
  {
    "path": "client/dist/example/toast/toast.js",
    "content": "Page({\n    openToast: function () {\n        wx.showToast({\n            title: '已完成',\n            icon: 'success',\n            duration: 3000\n        });\n    },\n    openLoading: function () {\n        wx.showToast({\n            title: '数据加载中',\n            icon: 'loading',\n            duration: 3000\n        });\n    }\n});"
  },
  {
    "path": "client/dist/example/toast/toast.wxml",
    "content": "<view class=\"page\">\n    <view class=\"page__hd\">\n        <view class=\"page__title\">Toast</view>\n        <view class=\"page__desc\">弹出式提示，采用小程序原生的toast</view>\n    </view>\n    <view class=\"page__bd\">\n        <view class=\"weui-btn-area\">\n            <button class=\"weui-btn\" type=\"default\" bindtap=\"openToast\">成功提示</button>\n            <button class=\"weui-btn\" type=\"default\" bindtap=\"openLoading\">加载中提示</button>\n        </view>\n    </view>\n</view>"
  },
  {
    "path": "client/dist/example/toast/toast.wxss",
    "content": "page{\n    background-color: #FFFFFF;\n}"
  },
  {
    "path": "client/dist/example/uploader/uploader.js",
    "content": "Page({\n    data: {\n        files: []\n    },\n    chooseImage: function (e) {\n        var that = this;\n        wx.chooseImage({\n            sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图，默认二者都有\n            sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机，默认二者都有\n            success: function (res) {\n                // 返回选定照片的本地文件路径列表，tempFilePath可以作为img标签的src属性显示图片\n                that.setData({\n                    files: that.data.files.concat(res.tempFilePaths)\n                });\n            }\n        })\n    },\n    previewImage: function(e){\n        wx.previewImage({\n            current: e.currentTarget.id, // 当前显示图片的http链接\n            urls: this.data.files // 需要预览的图片http链接列表\n        })\n    }\n});"
  },
  {
    "path": "client/dist/example/uploader/uploader.wxml",
    "content": "<view class=\"page\">\n    <view class=\"page__hd\">\n        <view class=\"page__title\">Uploader</view>\n        <view class=\"page__desc\">上传组件</view>\n    </view>\n    <view class=\"page__bd\">\n        <view class=\"weui-cells\">\n            <view class=\"weui-cell\">\n                <view class=\"weui-cell__bd\">\n                    <view class=\"weui-uploader\">\n                        <view class=\"weui-uploader__hd\">\n                            <view class=\"weui-uploader__title\">图片上传</view>\n                            <view class=\"weui-uploader__info\">{{files.length}}/2</view>\n                        </view>\n                        <view class=\"weui-uploader__bd\">\n                            <view class=\"weui-uploader__files\" id=\"uploaderFiles\">\n                                <block wx:for=\"{{files}}\" wx:key=\"*this\">\n                                    <view class=\"weui-uploader__file\" bindtap=\"previewImage\" id=\"{{item}}\">\n                                        <image class=\"weui-uploader__img\" src=\"{{item}}\" mode=\"aspectFill\" />\n                                    </view>\n                                </block>\n                                <view class=\"weui-uploader__file\">\n                                    <image class=\"weui-uploader__img\" src=\"../images/pic_160.png\" mode=\"aspectFill\" />\n                                </view>\n                                <view class=\"weui-uploader__file\">\n                                    <image class=\"weui-uploader__img\" src=\"../images/pic_160.png\" mode=\"aspectFill\" />\n                                </view>\n                                <view class=\"weui-uploader__file\">\n                                    <image class=\"weui-uploader__img\" src=\"../images/pic_160.png\" mode=\"aspectFill\" />\n                                </view>\n                                <view class=\"weui-uploader__file weui-uploader__file_status\">\n                                    <image class=\"weui-uploader__img\" src=\"../images/pic_160.png\" mode=\"aspectFill\" />\n                                    <view class=\"weui-uploader__file-content\">\n                                        <icon type=\"warn\" size=\"23\" color=\"#F43530\"></icon>\n                                    </view>\n                                </view>\n                                <view class=\"weui-uploader__file weui-uploader__file_status\">\n                                    <image class=\"weui-uploader__img\" src=\"../images/pic_160.png\" mode=\"aspectFill\" />\n                                    <view class=\"weui-uploader__file-content\">50%</view>\n                                </view>\n                            </view>\n                            <view class=\"weui-uploader__input-box\">\n                                <view class=\"weui-uploader__input\" bindtap=\"chooseImage\"></view>\n                            </view>\n                        </view>\n                    </view>\n                </view>\n            </view>\n        </view>\n    </view>\n</view>"
  },
  {
    "path": "client/dist/style/base/fn.wxss",
    "content": "/*!\n * WeUI v1.1.1 (https://github.com/weui/weui-wxss)\n * Copyright 2017 Tencent, Inc.\n * Licensed under the MIT license\n */\n"
  },
  {
    "path": "client/dist/style/base/mixin/setArrow.wxss",
    "content": "/*!\n * WeUI v1.1.1 (https://github.com/weui/weui-wxss)\n * Copyright 2017 Tencent, Inc.\n * Licensed under the MIT license\n */\n"
  },
  {
    "path": "client/dist/style/base/mixin/setOnepx.wxss",
    "content": "/*!\n * WeUI v1.1.1 (https://github.com/weui/weui-wxss)\n * Copyright 2017 Tencent, Inc.\n * Licensed under the MIT license\n */\n"
  },
  {
    "path": "client/dist/style/base/mixin/text.wxss",
    "content": "/*!\n * WeUI v1.1.1 (https://github.com/weui/weui-wxss)\n * Copyright 2017 Tencent, Inc.\n * Licensed under the MIT license\n */\n"
  },
  {
    "path": "client/dist/style/base/reset.wxss",
    "content": "/*!\n * WeUI v1.1.1 (https://github.com/weui/weui-wxss)\n * Copyright 2017 Tencent, Inc.\n * Licensed under the MIT license\n */\npage{line-height:1.6;font-family:-apple-system-font,Helvetica Neue,sans-serif}icon{vertical-align:middle}"
  },
  {
    "path": "client/dist/style/base/variable/color.wxss",
    "content": "/*!\n * WeUI v1.1.1 (https://github.com/weui/weui-wxss)\n * Copyright 2017 Tencent, Inc.\n * Licensed under the MIT license\n */\n"
  },
  {
    "path": "client/dist/style/base/variable/global.wxss",
    "content": "/*!\n * WeUI v1.1.1 (https://github.com/weui/weui-wxss)\n * Copyright 2017 Tencent, Inc.\n * Licensed under the MIT license\n */\n"
  },
  {
    "path": "client/dist/style/base/variable/weui-button.wxss",
    "content": "/*!\n * WeUI v1.1.1 (https://github.com/weui/weui-wxss)\n * Copyright 2017 Tencent, Inc.\n * Licensed under the MIT license\n */\n"
  },
  {
    "path": "client/dist/style/base/variable/weui-cell.wxss",
    "content": "/*!\n * WeUI v1.1.1 (https://github.com/weui/weui-wxss)\n * Copyright 2017 Tencent, Inc.\n * Licensed under the MIT license\n */\n"
  },
  {
    "path": "client/dist/style/base/variable/weui-dialog.wxss",
    "content": "/*!\n * WeUI v1.1.1 (https://github.com/weui/weui-wxss)\n * Copyright 2017 Tencent, Inc.\n * Licensed under the MIT license\n */\n"
  },
  {
    "path": "client/dist/style/base/variable/weui-grid.wxss",
    "content": "/*!\n * WeUI v1.1.1 (https://github.com/weui/weui-wxss)\n * Copyright 2017 Tencent, Inc.\n * Licensed under the MIT license\n */\n"
  },
  {
    "path": "client/dist/style/base/variable/weui-msg.wxss",
    "content": "/*!\n * WeUI v1.1.1 (https://github.com/weui/weui-wxss)\n * Copyright 2017 Tencent, Inc.\n * Licensed under the MIT license\n */\n"
  },
  {
    "path": "client/dist/style/base/variable/weui-progress.wxss",
    "content": "/*!\n * WeUI v1.1.1 (https://github.com/weui/weui-wxss)\n * Copyright 2017 Tencent, Inc.\n * Licensed under the MIT license\n */\n"
  },
  {
    "path": "client/dist/style/weui.wxss",
    "content": "/*!\n * WeUI v1.1.1 (https://github.com/weui/weui-wxss)\n * Copyright 2017 Tencent, Inc.\n * Licensed under the MIT license\n */\npage{line-height:1.6;font-family:-apple-system-font,Helvetica Neue,sans-serif}icon{vertical-align:middle}.weui-cells{position:relative;margin-top:1.17647059em;background-color:#fff;line-height:1.41176471;font-size:17px}.weui-cells:before{top:0;border-top:1rpx solid #d9d9d9}.weui-cells:after,.weui-cells:before{content:\" \";position:absolute;left:0;right:0;height:1px;color:#d9d9d9}.weui-cells:after{bottom:0;border-bottom:1rpx solid #d9d9d9}.weui-cells__title{margin-top:.77em;margin-bottom:.3em;padding-left:15px;padding-right:15px;color:#999;font-size:14px}.weui-cells_after-title{margin-top:0}.weui-cells__tips{margin-top:.3em;color:#999;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:before{content:\" \";position:absolute;left:0;top:0;right:0;height:1px;border-top:1rpx solid #d9d9d9;color:#d9d9d9;left:15px}.weui-cell:first-child:before{display:none}.weui-cell_active{background-color:#ececec}.weui-cell_primary{-webkit-box-align:start;-webkit-align-items:flex-start;align-items:flex-start}.weui-cell__bd{-webkit-box-flex:1;-webkit-flex:1;flex:1}.weui-cell__ft{text-align:right;color:#999}.weui-cell_access{color:inherit}.weui-cell__ft_in-access{padding-right:13px;position:relative}.weui-cell__ft_in-access:after{content:\" \";display:inline-block;height:6px;width:6px;border-width:2px 2px 0 0;border-color:#c8c8cd;border-style:solid;-webkit-transform:matrix(.71,.71,-.71,.71,0,0);transform:matrix(.71,.71,-.71,.71,0,0);position:relative;top:-2px;position:absolute;top:50%;margin-top:-4px;right:2px}.weui-cell_link{color:#586c94;font-size:14px}.weui-cell_link:active{background-color:#ececec}.weui-cell_link:first-child:before{display:block}.weui-icon-radio{margin-left:3.2px;margin-right:3.2px}.weui-icon-checkbox_circle,.weui-icon-checkbox_success{margin-left:4.6px;margin-right:4.6px}.weui-check__label:active{background-color:#ececec}.weui-check{position:absolute;left:-9999px}.weui-check__hd_in-checkbox{padding-right:.35em}.weui-cell__ft_in-radio{padding-left:.35em}.weui-cell_input{padding-top:0;padding-bottom:0}.weui-label{width:105px;word-wrap:break-word;word-break:break-all}.weui-input{height:2.58823529em;min-height:2.58823529em;line-height:2.58823529em}.weui-toptips{position:fixed;-webkit-transform:translateZ(0);transform:translateZ(0);top:0;left:0;right:0;padding:5px;font-size:14px;text-align:center;color:#fff;z-index:5000;word-wrap:break-word;word-break:break-all}.weui-toptips_warn{background-color:#e64340}.weui-textarea{display:block;width:100%}.weui-textarea-counter{color:#b2b2b2;text-align:right}.weui-cell_warn,.weui-textarea-counter_warn{color:#e64340}.weui-form-preview{position:relative;background-color:#fff}.weui-form-preview:before{top:0;border-top:1rpx solid #d9d9d9}.weui-form-preview:after,.weui-form-preview:before{content:\" \";position:absolute;left:0;right:0;height:1px;color:#d9d9d9}.weui-form-preview:after{bottom:0;border-bottom:1rpx solid #d9d9d9}.weui-form-preview__value{font-size:14px}.weui-form-preview__value_in-hd{font-size:26px}.weui-form-preview__hd{position:relative;padding:10px 15px;text-align:right;line-height:2.5em}.weui-form-preview__hd:after{content:\" \";position:absolute;left:0;bottom:0;right:0;height:1px;border-bottom:1rpx solid #d9d9d9;color:#d9d9d9;left:15px}.weui-form-preview__bd{padding:10px 15px;font-size:.9em;text-align:right;color:#999;line-height:2}.weui-form-preview__ft{position:relative;line-height:50px;display:-webkit-box;display:-webkit-flex;display:flex}.weui-form-preview__ft:after{content:\" \";position:absolute;left:0;top:0;right:0;height:1px;border-top:1rpx solid #d5d5d6;color:#d5d5d6}.weui-form-preview__item{overflow:hidden}.weui-form-preview__label{float:left;margin-right:1em;min-width:4em;color:#999;text-align:justify;text-align-last:justify}.weui-form-preview__value{display:block;overflow:hidden;word-break:normal;word-wrap:break-word}.weui-form-preview__btn{position:relative;display:block;-webkit-box-flex:1;-webkit-flex:1;flex:1;color:#3cc51f;text-align:center}.weui-form-preview__btn:after{content:\" \";position:absolute;left:0;top:0;width:1px;bottom:0;border-left:1rpx solid #d5d5d6;color:#d5d5d6}.weui-form-preview__btn:first-child:after{display:none}.weui-form-preview__btn_active{background-color:#eee}.weui-form-preview__btn_default{color:#999}.weui-form-preview__btn_primary{color:#0bb20c}.weui-cell_select{padding:0}.weui-select{position:relative;padding-left:15px;padding-right:30px;height:2.58823529em;min-height:2.58823529em;line-height:2.58823529em;border-right:1rpx solid #d9d9d9}.weui-select:before{content:\" \";display:inline-block;height:6px;width:6px;border-width:2px 2px 0 0;border-color:#c8c8cd;border-style:solid;-webkit-transform:matrix(.71,.71,-.71,.71,0,0);transform:matrix(.71,.71,-.71,.71,0,0);position:relative;top:-2px;position:absolute;top:50%;right:15px;margin-top:-4px}.weui-select_in-select-after{padding-left:0}.weui-cell__bd_in-select-before,.weui-cell__hd_in-select-after{padding-left:15px}.weui-cell_vcode{padding-right:0}.weui-vcode-btn,.weui-vcode-img{margin-left:5px;height:2.58823529em;vertical-align:middle}.weui-vcode-btn{display:inline-block;padding:0 .6em 0 .7em;border-left:1px solid #e5e5e5;line-height:2.58823529em;font-size:17px;color:#3cc51f;white-space:nowrap}.weui-vcode-btn:active{color:#52a341}.weui-cell_switch{padding-top:6px;padding-bottom:6px}.weui-uploader__hd{display:-webkit-box;display:-webkit-flex;display:flex;padding-bottom:10px;-webkit-box-align:center;-webkit-align-items:center;align-items:center}.weui-uploader__title{-webkit-box-flex:1;-webkit-flex:1;flex:1}.weui-uploader__info{color:#b2b2b2}.weui-uploader__bd{margin-bottom:-4px;margin-right:-9px;overflow:hidden}.weui-uploader__file{float:left;margin-right:9px;margin-bottom:9px}.weui-uploader__img{display:block;width:79px;height:79px}.weui-uploader__file_status{position:relative}.weui-uploader__file_status:before{content:\" \";position:absolute;top:0;right:0;bottom:0;left:0;background-color:rgba(0,0,0,.5)}.weui-uploader__file-content{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);color:#fff}.weui-uploader__input-box{float:left;position:relative;margin-right:9px;margin-bottom:9px;width:77px;height:77px;border:1px solid #d9d9d9}.weui-uploader__input-box:after,.weui-uploader__input-box:before{content:\" \";position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);background-color:#d9d9d9}.weui-uploader__input-box:before{width:2px;height:39.5px}.weui-uploader__input-box:after{width:39.5px;height:2px}.weui-uploader__input-box:active{border-color:#999}.weui-uploader__input-box:active:after,.weui-uploader__input-box:active:before{background-color:#999}.weui-uploader__input{position:absolute;z-index:1;top:0;left:0;width:100%;height:100%;opacity:0}.weui-article{padding:20px 15px;font-size:15px}.weui-article__section{margin-bottom:1.5em}.weui-article__h1{font-size:18px;font-weight:400;margin-bottom:.9em}.weui-article__h2{font-size:16px;font-weight:400;margin-bottom:.34em}.weui-article__h3{font-weight:400;font-size:15px;margin-bottom:.34em}.weui-article__p{margin:0 0 .8em}.weui-msg{padding-top:36px;text-align:center}.weui-msg__link{display:inline;color:#586c94}.weui-msg__icon-area{margin-bottom:30px}.weui-msg__text-area{margin-bottom:25px;padding:0 20px}.weui-msg__title{margin-bottom:5px;font-weight:400;font-size:20px}.weui-msg__desc{font-size:14px;color:#999}.weui-msg__opr-area{margin-bottom:25px}.weui-msg__extra-area{margin-bottom:15px;font-size:14px;color:#999}@media screen and (min-height:438px){.weui-msg__extra-area{position:fixed;left:0;bottom:0;width:100%;text-align:center}}.weui-flex{display:-webkit-box;display:-webkit-flex;display:flex}.weui-flex__item{-webkit-box-flex:1;-webkit-flex:1;flex:1}.weui-btn{margin-top:15px}.weui-btn:first-child{margin-top:0}.weui-btn-area{margin:1.17647059em 15px .3em}.weui-agree{display:block;padding:.5em 15px;font-size:13px}.weui-agree__text{color:#999}.weui-agree__link{display:inline;color:#586c94}.weui-agree__checkbox{position:absolute;left:-9999px}.weui-agree__checkbox-icon{position:relative;top:2px;display:inline-block;border:1px solid #d1d1d1;background-color:#fff;border-radius:3px;width:11px;height:11px}.weui-agree__checkbox-icon-check{position:absolute;top:1px;left:1px}.weui-footer{color:#999;font-size:14px;text-align:center}.weui-footer_fixed-bottom{position:fixed;bottom:.52em;left:0;right:0}.weui-footer__links{font-size:0}.weui-footer__link{display:inline-block;vertical-align:top;margin:0 .62em;position:relative;font-size:14px;color:#586c94}.weui-footer__link:before{content:\" \";position:absolute;left:0;top:0;width:1px;bottom:0;border-left:1rpx solid #c7c7c7;color:#c7c7c7;left:-.65em;top:.36em;bottom:.36em}.weui-footer__link:first-child:before{display:none}.weui-footer__text{padding:0 .34em;font-size:12px}.weui-grids{border-top:1rpx solid #d9d9d9;border-left:1rpx solid #d9d9d9;overflow:hidden}.weui-grid{position:relative;float:left;padding:20px 10px;width:33.33333333%;box-sizing:border-box;border-right:1rpx solid #d9d9d9;border-bottom:1rpx solid #d9d9d9}.weui-grid_active{background-color:#ececec}.weui-grid__icon{display:block;width:28px;height:28px;margin:0 auto}.weui-grid__label{margin-top:5px;display:block;text-align:center;color:#000;font-size:14px;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.weui-loading{margin:0 5px;width:20px;height:20px;display:inline-block;vertical-align:middle;-webkit-animation:a 1s steps(12) infinite;animation:a 1s steps(12) infinite;background:transparent url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjAiIGhlaWdodD0iMTIwIiB2aWV3Qm94PSIwIDAgMTAwIDEwMCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgxMDB2MTAwSDB6Ii8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjRTlFOUU5IiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgLTMwKSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iIzk4OTY5NyIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgzMCAxMDUuOTggNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjOUI5OTlBIiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKDYwIDc1Ljk4IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0EzQTFBMiIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSg5MCA2NSA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNBQkE5QUEiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoMTIwIDU4LjY2IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0IyQjJCMiIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgxNTAgNTQuMDIgNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjQkFCOEI5IiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKDE4MCA1MCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNDMkMwQzEiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTE1MCA0NS45OCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNDQkNCQ0IiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTEyMCA0MS4zNCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNEMkQyRDIiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTkwIDM1IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0RBREFEQSIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgtNjAgMjQuMDIgNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjRTJFMkUyIiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKC0zMCAtNS45OCA2NSkiLz48L3N2Zz4=) no-repeat;background-size:100%}.weui-loading.weui-loading_transparent{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120' viewBox='0 0 100 100'%3E%3Cpath fill='none' d='M0 0h100v100H0z'/%3E%3Crect xmlns='http://www.w3.org/2000/svg' width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.56)' rx='5' ry='5' transform='translate(0 -30)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.5)' rx='5' ry='5' transform='rotate(30 105.98 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.43)' rx='5' ry='5' transform='rotate(60 75.98 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.38)' rx='5' ry='5' transform='rotate(90 65 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.32)' rx='5' ry='5' transform='rotate(120 58.66 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.28)' rx='5' ry='5' transform='rotate(150 54.02 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.25)' rx='5' ry='5' transform='rotate(180 50 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.2)' rx='5' ry='5' transform='rotate(-150 45.98 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.17)' rx='5' ry='5' transform='rotate(-120 41.34 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.14)' rx='5' ry='5' transform='rotate(-90 35 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.1)' rx='5' ry='5' transform='rotate(-60 24.02 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.03)' rx='5' ry='5' transform='rotate(-30 -5.98 65)'/%3E%3C/svg%3E\")}@-webkit-keyframes a{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes a{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.weui-badge{display:inline-block;padding:.15em .4em;min-width:8px;border-radius:18px;background-color:#e64340;color:#fff;line-height:1.2;text-align:center;font-size:12px;vertical-align:middle}.weui-badge_dot{padding:.4em;min-width:0}.weui-loadmore{width:65%;margin:1.5em auto;line-height:1.6em;font-size:14px;text-align:center}.weui-loadmore__tips{display:inline-block;vertical-align:middle}.weui-loadmore_line{border-top:1px solid #e5e5e5;margin-top:2.4em}.weui-loadmore__tips_in-line{position:relative;top:-.9em;padding:0 .55em;background-color:#fff;color:#999}.weui-loadmore__tips_in-dot{position:relative;padding:0 .16em;width:4px;height:1.6em}.weui-loadmore__tips_in-dot:before{content:\" \";position:absolute;top:50%;left:50%;margin-top:-1px;margin-left:-2px;width:4px;height:4px;border-radius:50%;background-color:#e5e5e5}.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:1rpx solid #e5e5e5}.weui-panel:after,.weui-panel:before{content:\" \";position:absolute;left:0;right:0;height:1px;color:#e5e5e5}.weui-panel:after{bottom:0;border-bottom:1rpx solid #e5e5e5}.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;right:0;height:1px;border-bottom:1rpx solid #e5e5e5;color:#e5e5e5;left:15px}.weui-media-box{padding:15px;position:relative}.weui-media-box:before{content:\" \";position:absolute;left:0;top:0;right:0;height:1px;border-top:1rpx solid #e5e5e5;color:#e5e5e5;left:15px}.weui-media-box:first-child:before{display:none}.weui-media-box__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__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__info{margin-top:15px;padding-bottom:5px;font-size:13px;color:#cecece;line-height:1em;list-style:none;overflow:hidden}.weui-media-box__info__meta{float:left;padding-right:1em}.weui-media-box__info__meta_extra{padding-left:1em;border-left:1px solid #cecece}.weui-media-box__title_in-text{margin-bottom:8px}.weui-media-box_appmsg{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center}.weui-media-box__thumb{width:100%;height:100%;vertical-align:top}.weui-media-box__hd_in-appmsg{margin-right:.8em;width:60px;height:60px;line-height:60px;text-align:center}.weui-media-box__bd_in-appmsg{-webkit-box-flex:1;-webkit-flex:1;flex:1;min-width:0}.weui-media-box_small-appmsg{padding:0}.weui-cells_in-small-appmsg{margin-top:0}.weui-cells_in-small-appmsg:before{display:none}.weui-progress{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center}.weui-progress__bar{-webkit-box-flex:1;-webkit-flex:1;flex:1}.weui-progress__opr{margin-left:15px;font-size:0}.weui-navbar{display:-webkit-box;display:-webkit-flex;display:flex;position:absolute;z-index:500;top:0;width:100%;border-bottom:1rpx solid #ccc}.weui-navbar__item{position:relative;display:block;-webkit-box-flex:1;-webkit-flex:1;flex:1;padding:13px 0;text-align:center;font-size:0}.weui-navbar__item.weui-bar__item_on{color:#1aad19}.weui-navbar__slider{position:absolute;content:\" \";left:0;bottom:0;width:6em;height:3px;background-color:#1aad19;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}.weui-navbar__title{display:inline-block;font-size:15px;max-width:8em;width:auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}.weui-tab{position:relative;height:100%}.weui-tab__panel{box-sizing:border-box;height:100%;padding-top:50px;overflow:auto;-webkit-overflow-scrolling:touch}.weui-search-bar{position:relative;padding:8px 10px;display:-webkit-box;display:-webkit-flex;display:flex;box-sizing:border-box;background-color:#efeff4;border-top:1rpx solid #d7d6dc;border-bottom:1rpx solid #d7d6dc}.weui-icon-search{margin-right:8px;font-size:inherit}.weui-icon-search_in-box{position:absolute;left:10px;top:7px}.weui-search-bar__text{display:inline-block;font-size:14px;vertical-align:middle}.weui-search-bar__form{position:relative;-webkit-box-flex:1;-webkit-flex:auto;flex:auto;border-radius:5px;background:#fff;border:1rpx solid #e6e6ea}.weui-search-bar__box{position:relative;padding-left:30px;padding-right:30px;width:100%;box-sizing:border-box;z-index:1}.weui-search-bar__input{height:28px;line-height:28px;font-size:14px}.weui-icon-clear{position:absolute;top:0;right:0;padding:7px 8px;font-size:0}.weui-search-bar__label{position:absolute;top:0;right:0;bottom:0;left:0;z-index:2;border-radius:3px;text-align:center;color:#9b9b9b;background:#fff;line-height:28px}.weui-search-bar__cancel-btn{margin-left:10px;line-height:28px;color:#09bb07;white-space:nowrap}"
  },
  {
    "path": "client/dist/style/widget/weui-agree/weui-agree.wxss",
    "content": "/*!\n * WeUI v1.1.1 (https://github.com/weui/weui-wxss)\n * Copyright 2017 Tencent, Inc.\n * Licensed under the MIT license\n */\n.weui-agree{display:block;padding:.5em 15px;font-size:13px}.weui-agree__text{color:#999}.weui-agree__link{display:inline;color:#586c94}.weui-agree__checkbox{position:absolute;left:-9999px}.weui-agree__checkbox-icon{position:relative;top:2px;display:inline-block;border:1px solid #d1d1d1;background-color:#fff;border-radius:3px;width:11px;height:11px}.weui-agree__checkbox-icon-check{position:absolute;top:1px;left:1px}"
  },
  {
    "path": "client/dist/style/widget/weui-animate/weui-animate.wxss",
    "content": "/*!\n * WeUI v1.1.1 (https://github.com/weui/weui-wxss)\n * Copyright 2017 Tencent, Inc.\n * Licensed under the MIT license\n */\n@-webkit-keyframes a{0%{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes a{0%{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.weui-animate-slide-up{-webkit-animation:a ease .3s forwards;animation:a ease .3s forwards}@-webkit-keyframes b{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes b{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.weui-animate-slide-down{-webkit-animation:b ease .3s forwards;animation:b ease .3s forwards}@-webkit-keyframes c{0%{opacity:0}to{opacity:1}}@keyframes c{0%{opacity:0}to{opacity:1}}.weui-animate-fade-in{-webkit-animation:c ease .3s forwards;animation:c ease .3s forwards}@-webkit-keyframes d{0%{opacity:1}to{opacity:0}}@keyframes d{0%{opacity:1}to{opacity:0}}.weui-animate-fade-out{-webkit-animation:d ease .3s forwards;animation:d ease .3s forwards}"
  },
  {
    "path": "client/dist/style/widget/weui-button/weui-button.wxss",
    "content": "/*!\n * WeUI v1.1.1 (https://github.com/weui/weui-wxss)\n * Copyright 2017 Tencent, Inc.\n * Licensed under the MIT license\n */\n.weui-btn{margin-top:15px}.weui-btn:first-child{margin-top:0}.weui-btn-area{margin:1.17647059em 15px .3em}"
  },
  {
    "path": "client/dist/style/widget/weui-cell/weui-access.wxss",
    "content": "/*!\n * WeUI v1.1.1 (https://github.com/weui/weui-wxss)\n * Copyright 2017 Tencent, Inc.\n * Licensed under the MIT license\n */\n.weui-cell_access{color:inherit}.weui-cell__ft_in-access{padding-right:13px;position:relative}.weui-cell__ft_in-access:after{content:\" \";display:inline-block;height:6px;width:6px;border-width:2px 2px 0 0;border-color:#c8c8cd;border-style:solid;-webkit-transform:matrix(.71,.71,-.71,.71,0,0);transform:matrix(.71,.71,-.71,.71,0,0);position:relative;top:-2px;position:absolute;top:50%;margin-top:-4px;right:2px}.weui-cell_link{color:#586c94;font-size:14px}.weui-cell_link:active{background-color:#ececec}.weui-cell_link:first-child:before{display:block}"
  },
  {
    "path": "client/dist/style/widget/weui-cell/weui-cell.wxss",
    "content": "/*!\n * WeUI v1.1.1 (https://github.com/weui/weui-wxss)\n * Copyright 2017 Tencent, Inc.\n * Licensed under the MIT license\n */\n.weui-cells{position:relative;margin-top:1.17647059em;background-color:#fff;line-height:1.41176471;font-size:17px}.weui-cells:before{top:0;border-top:1rpx solid #d9d9d9}.weui-cells:after,.weui-cells:before{content:\" \";position:absolute;left:0;right:0;height:1px;color:#d9d9d9}.weui-cells:after{bottom:0;border-bottom:1rpx solid #d9d9d9}.weui-cells__title{margin-top:.77em;margin-bottom:.3em;padding-left:15px;padding-right:15px;color:#999;font-size:14px}.weui-cells_after-title{margin-top:0}.weui-cells__tips{margin-top:.3em;color:#999;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:before{content:\" \";position:absolute;left:0;top:0;right:0;height:1px;border-top:1rpx solid #d9d9d9;color:#d9d9d9;left:15px}.weui-cell:first-child:before{display:none}.weui-cell_active{background-color:#ececec}.weui-cell_primary{-webkit-box-align:start;-webkit-align-items:flex-start;align-items:flex-start}.weui-cell__bd{-webkit-box-flex:1;-webkit-flex:1;flex:1}.weui-cell__ft{text-align:right;color:#999}"
  },
  {
    "path": "client/dist/style/widget/weui-cell/weui-check.wxss",
    "content": "/*!\n * WeUI v1.1.1 (https://github.com/weui/weui-wxss)\n * Copyright 2017 Tencent, Inc.\n * Licensed under the MIT license\n */\n.weui-icon-radio{margin-left:3.2px;margin-right:3.2px}.weui-icon-checkbox_circle,.weui-icon-checkbox_success{margin-left:4.6px;margin-right:4.6px}.weui-check__label:active{background-color:#ececec}.weui-check{position:absolute;left:-9999px}.weui-check__hd_in-checkbox{padding-right:.35em}.weui-cell__ft_in-radio{padding-left:.35em}"
  },
  {
    "path": "client/dist/style/widget/weui-cell/weui-form/weui-form-preview.wxss",
    "content": "/*!\n * WeUI v1.1.1 (https://github.com/weui/weui-wxss)\n * Copyright 2017 Tencent, Inc.\n * Licensed under the MIT license\n */\n.weui-form-preview{position:relative;background-color:#fff}.weui-form-preview:before{top:0;border-top:1rpx solid #d9d9d9}.weui-form-preview:after,.weui-form-preview:before{content:\" \";position:absolute;left:0;right:0;height:1px;color:#d9d9d9}.weui-form-preview:after{bottom:0;border-bottom:1rpx solid #d9d9d9}.weui-form-preview__value{font-size:14px}.weui-form-preview__value_in-hd{font-size:26px}.weui-form-preview__hd{position:relative;padding:10px 15px;text-align:right;line-height:2.5em}.weui-form-preview__hd:after{content:\" \";position:absolute;left:0;bottom:0;right:0;height:1px;border-bottom:1rpx solid #d9d9d9;color:#d9d9d9;left:15px}.weui-form-preview__bd{padding:10px 15px;font-size:.9em;text-align:right;color:#999;line-height:2}.weui-form-preview__ft{position:relative;line-height:50px;display:-webkit-box;display:-webkit-flex;display:flex}.weui-form-preview__ft:after{content:\" \";position:absolute;left:0;top:0;right:0;height:1px;border-top:1rpx solid #d5d5d6;color:#d5d5d6}.weui-form-preview__item{overflow:hidden}.weui-form-preview__label{float:left;margin-right:1em;min-width:4em;color:#999;text-align:justify;text-align-last:justify}.weui-form-preview__value{display:block;overflow:hidden;word-break:normal;word-wrap:break-word}.weui-form-preview__btn{position:relative;display:block;-webkit-box-flex:1;-webkit-flex:1;flex:1;color:#3cc51f;text-align:center}.weui-form-preview__btn:after{content:\" \";position:absolute;left:0;top:0;width:1px;bottom:0;border-left:1rpx solid #d5d5d6;color:#d5d5d6}.weui-form-preview__btn:first-child:after{display:none}.weui-form-preview__btn_active{background-color:#eee}.weui-form-preview__btn_default{color:#999}.weui-form-preview__btn_primary{color:#0bb20c}"
  },
  {
    "path": "client/dist/style/widget/weui-cell/weui-form/weui-form_common.wxss",
    "content": "/*!\n * WeUI v1.1.1 (https://github.com/weui/weui-wxss)\n * Copyright 2017 Tencent, Inc.\n * Licensed under the MIT license\n */\n.weui-cell_input{padding-top:0;padding-bottom:0}.weui-label{width:105px;word-wrap:break-word;word-break:break-all}.weui-input{height:2.58823529em;min-height:2.58823529em;line-height:2.58823529em}.weui-toptips{position:fixed;-webkit-transform:translateZ(0);transform:translateZ(0);top:0;left:0;right:0;padding:5px;font-size:14px;text-align:center;color:#fff;z-index:5000;word-wrap:break-word;word-break:break-all}.weui-toptips_warn{background-color:#e64340}.weui-textarea{display:block;width:100%}.weui-textarea-counter{color:#b2b2b2;text-align:right}.weui-cell_warn,.weui-textarea-counter_warn{color:#e64340}"
  },
  {
    "path": "client/dist/style/widget/weui-cell/weui-form/weui-select.wxss",
    "content": "/*!\n * WeUI v1.1.1 (https://github.com/weui/weui-wxss)\n * Copyright 2017 Tencent, Inc.\n * Licensed under the MIT license\n */\n.weui-cell_select{padding:0}.weui-select{position:relative;padding-left:15px;padding-right:30px;height:2.58823529em;min-height:2.58823529em;line-height:2.58823529em;border-right:1rpx solid #d9d9d9}.weui-select:before{content:\" \";display:inline-block;height:6px;width:6px;border-width:2px 2px 0 0;border-color:#c8c8cd;border-style:solid;-webkit-transform:matrix(.71,.71,-.71,.71,0,0);transform:matrix(.71,.71,-.71,.71,0,0);position:relative;top:-2px;position:absolute;top:50%;right:15px;margin-top:-4px}.weui-select_in-select-after{padding-left:0}.weui-cell__bd_in-select-before,.weui-cell__hd_in-select-after{padding-left:15px}"
  },
  {
    "path": "client/dist/style/widget/weui-cell/weui-form/weui-vcode.wxss",
    "content": "/*!\n * WeUI v1.1.1 (https://github.com/weui/weui-wxss)\n * Copyright 2017 Tencent, Inc.\n * Licensed under the MIT license\n */\n.weui-cell_vcode{padding-right:0}.weui-vcode-btn,.weui-vcode-img{margin-left:5px;height:2.58823529em;vertical-align:middle}.weui-vcode-btn{display:inline-block;padding:0 .6em 0 .7em;border-left:1px solid #e5e5e5;line-height:2.58823529em;font-size:17px;color:#3cc51f;white-space:nowrap}.weui-vcode-btn:active{color:#52a341}"
  },
  {
    "path": "client/dist/style/widget/weui-cell/weui-form.wxss",
    "content": "/*!\n * WeUI v1.1.1 (https://github.com/weui/weui-wxss)\n * Copyright 2017 Tencent, Inc.\n * Licensed under the MIT license\n */\n.weui-cell_input{padding-top:0;padding-bottom:0}.weui-label{width:105px;word-wrap:break-word;word-break:break-all}.weui-input{height:2.58823529em;min-height:2.58823529em;line-height:2.58823529em}.weui-toptips{position:fixed;-webkit-transform:translateZ(0);transform:translateZ(0);top:0;left:0;right:0;padding:5px;font-size:14px;text-align:center;color:#fff;z-index:5000;word-wrap:break-word;word-break:break-all}.weui-toptips_warn{background-color:#e64340}.weui-textarea{display:block;width:100%}.weui-textarea-counter{color:#b2b2b2;text-align:right}.weui-cell_warn,.weui-textarea-counter_warn{color:#e64340}.weui-form-preview{position:relative;background-color:#fff}.weui-form-preview:before{top:0;border-top:1rpx solid #d9d9d9}.weui-form-preview:after,.weui-form-preview:before{content:\" \";position:absolute;left:0;right:0;height:1px;color:#d9d9d9}.weui-form-preview:after{bottom:0;border-bottom:1rpx solid #d9d9d9}.weui-form-preview__value{font-size:14px}.weui-form-preview__value_in-hd{font-size:26px}.weui-form-preview__hd{position:relative;padding:10px 15px;text-align:right;line-height:2.5em}.weui-form-preview__hd:after{content:\" \";position:absolute;left:0;bottom:0;right:0;height:1px;border-bottom:1rpx solid #d9d9d9;color:#d9d9d9;left:15px}.weui-form-preview__bd{padding:10px 15px;font-size:.9em;text-align:right;color:#999;line-height:2}.weui-form-preview__ft{position:relative;line-height:50px;display:-webkit-box;display:-webkit-flex;display:flex}.weui-form-preview__ft:after{content:\" \";position:absolute;left:0;top:0;right:0;height:1px;border-top:1rpx solid #d5d5d6;color:#d5d5d6}.weui-form-preview__item{overflow:hidden}.weui-form-preview__label{float:left;margin-right:1em;min-width:4em;color:#999;text-align:justify;text-align-last:justify}.weui-form-preview__value{display:block;overflow:hidden;word-break:normal;word-wrap:break-word}.weui-form-preview__btn{position:relative;display:block;-webkit-box-flex:1;-webkit-flex:1;flex:1;color:#3cc51f;text-align:center}.weui-form-preview__btn:after{content:\" \";position:absolute;left:0;top:0;width:1px;bottom:0;border-left:1rpx solid #d5d5d6;color:#d5d5d6}.weui-form-preview__btn:first-child:after{display:none}.weui-form-preview__btn_active{background-color:#eee}.weui-form-preview__btn_default{color:#999}.weui-form-preview__btn_primary{color:#0bb20c}.weui-cell_select{padding:0}.weui-select{position:relative;padding-left:15px;padding-right:30px;height:2.58823529em;min-height:2.58823529em;line-height:2.58823529em;border-right:1rpx solid #d9d9d9}.weui-select:before{content:\" \";display:inline-block;height:6px;width:6px;border-width:2px 2px 0 0;border-color:#c8c8cd;border-style:solid;-webkit-transform:matrix(.71,.71,-.71,.71,0,0);transform:matrix(.71,.71,-.71,.71,0,0);position:relative;top:-2px;position:absolute;top:50%;right:15px;margin-top:-4px}.weui-select_in-select-after{padding-left:0}.weui-cell__bd_in-select-before,.weui-cell__hd_in-select-after{padding-left:15px}.weui-cell_vcode{padding-right:0}.weui-vcode-btn,.weui-vcode-img{margin-left:5px;height:2.58823529em;vertical-align:middle}.weui-vcode-btn{display:inline-block;padding:0 .6em 0 .7em;border-left:1px solid #e5e5e5;line-height:2.58823529em;font-size:17px;color:#3cc51f;white-space:nowrap}.weui-vcode-btn:active{color:#52a341}"
  },
  {
    "path": "client/dist/style/widget/weui-cell/weui-switch.wxss",
    "content": "/*!\n * WeUI v1.1.1 (https://github.com/weui/weui-wxss)\n * Copyright 2017 Tencent, Inc.\n * Licensed under the MIT license\n */\n.weui-cell_switch{padding-top:6px;padding-bottom:6px}"
  },
  {
    "path": "client/dist/style/widget/weui-cell/weui-uploader.wxss",
    "content": "/*!\n * WeUI v1.1.1 (https://github.com/weui/weui-wxss)\n * Copyright 2017 Tencent, Inc.\n * Licensed under the MIT license\n */\n.weui-uploader__hd{display:-webkit-box;display:-webkit-flex;display:flex;padding-bottom:10px;-webkit-box-align:center;-webkit-align-items:center;align-items:center}.weui-uploader__title{-webkit-box-flex:1;-webkit-flex:1;flex:1}.weui-uploader__info{color:#b2b2b2}.weui-uploader__bd{margin-bottom:-4px;margin-right:-9px;overflow:hidden}.weui-uploader__file{float:left;margin-right:9px;margin-bottom:9px}.weui-uploader__img{display:block;width:79px;height:79px}.weui-uploader__file_status{position:relative}.weui-uploader__file_status:before{content:\" \";position:absolute;top:0;right:0;bottom:0;left:0;background-color:rgba(0,0,0,.5)}.weui-uploader__file-content{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);color:#fff}.weui-uploader__input-box{float:left;position:relative;margin-right:9px;margin-bottom:9px;width:77px;height:77px;border:1px solid #d9d9d9}.weui-uploader__input-box:after,.weui-uploader__input-box:before{content:\" \";position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);background-color:#d9d9d9}.weui-uploader__input-box:before{width:2px;height:39.5px}.weui-uploader__input-box:after{width:39.5px;height:2px}.weui-uploader__input-box:active{border-color:#999}.weui-uploader__input-box:active:after,.weui-uploader__input-box:active:before{background-color:#999}.weui-uploader__input{position:absolute;z-index:1;top:0;left:0;width:100%;height:100%;opacity:0}"
  },
  {
    "path": "client/dist/style/widget/weui-flex/weui-flex.wxss",
    "content": "/*!\n * WeUI v1.1.1 (https://github.com/weui/weui-wxss)\n * Copyright 2017 Tencent, Inc.\n * Licensed under the MIT license\n */\n.weui-flex{display:-webkit-box;display:-webkit-flex;display:flex}.weui-flex__item{-webkit-box-flex:1;-webkit-flex:1;flex:1}"
  },
  {
    "path": "client/dist/style/widget/weui-footer/weui-footer.wxss",
    "content": "/*!\n * WeUI v1.1.1 (https://github.com/weui/weui-wxss)\n * Copyright 2017 Tencent, Inc.\n * Licensed under the MIT license\n */\n.weui-footer{color:#999;font-size:14px;text-align:center}.weui-footer_fixed-bottom{position:fixed;bottom:.52em;left:0;right:0}.weui-footer__links{font-size:0}.weui-footer__link{display:inline-block;vertical-align:top;margin:0 .62em;position:relative;font-size:14px;color:#586c94}.weui-footer__link:before{content:\" \";position:absolute;left:0;top:0;width:1px;bottom:0;border-left:1rpx solid #c7c7c7;color:#c7c7c7;left:-.65em;top:.36em;bottom:.36em}.weui-footer__link:first-child:before{display:none}.weui-footer__text{padding:0 .34em;font-size:12px}"
  },
  {
    "path": "client/dist/style/widget/weui-grid/weui-grid.wxss",
    "content": "/*!\n * WeUI v1.1.1 (https://github.com/weui/weui-wxss)\n * Copyright 2017 Tencent, Inc.\n * Licensed under the MIT license\n */\n.weui-grids{border-top:1rpx solid #d9d9d9;border-left:1rpx solid #d9d9d9;overflow:hidden}.weui-grid{position:relative;float:left;padding:20px 10px;width:33.33333333%;box-sizing:border-box;border-right:1rpx solid #d9d9d9;border-bottom:1rpx solid #d9d9d9}.weui-grid_active{background-color:#ececec}.weui-grid__icon{display:block;width:28px;height:28px;margin:0 auto}.weui-grid__label{margin-top:5px;display:block;text-align:center;color:#000;font-size:14px;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}"
  },
  {
    "path": "client/dist/style/widget/weui-loading/weui-loading.wxss",
    "content": "/*!\n * WeUI v1.1.1 (https://github.com/weui/weui-wxss)\n * Copyright 2017 Tencent, Inc.\n * Licensed under the MIT license\n */\n.weui-loading{margin:0 5px;width:20px;height:20px;display:inline-block;vertical-align:middle;-webkit-animation:a 1s steps(12) infinite;animation:a 1s steps(12) infinite;background:transparent url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjAiIGhlaWdodD0iMTIwIiB2aWV3Qm94PSIwIDAgMTAwIDEwMCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgxMDB2MTAwSDB6Ii8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjRTlFOUU5IiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgLTMwKSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iIzk4OTY5NyIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgzMCAxMDUuOTggNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjOUI5OTlBIiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKDYwIDc1Ljk4IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0EzQTFBMiIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSg5MCA2NSA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNBQkE5QUEiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoMTIwIDU4LjY2IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0IyQjJCMiIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgxNTAgNTQuMDIgNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjQkFCOEI5IiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKDE4MCA1MCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNDMkMwQzEiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTE1MCA0NS45OCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNDQkNCQ0IiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTEyMCA0MS4zNCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNEMkQyRDIiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTkwIDM1IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0RBREFEQSIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgtNjAgMjQuMDIgNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjRTJFMkUyIiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKC0zMCAtNS45OCA2NSkiLz48L3N2Zz4=) no-repeat;background-size:100%}.weui-loading.weui-loading_transparent{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120' viewBox='0 0 100 100'%3E%3Cpath fill='none' d='M0 0h100v100H0z'/%3E%3Crect xmlns='http://www.w3.org/2000/svg' width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.56)' rx='5' ry='5' transform='translate(0 -30)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.5)' rx='5' ry='5' transform='rotate(30 105.98 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.43)' rx='5' ry='5' transform='rotate(60 75.98 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.38)' rx='5' ry='5' transform='rotate(90 65 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.32)' rx='5' ry='5' transform='rotate(120 58.66 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.28)' rx='5' ry='5' transform='rotate(150 54.02 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.25)' rx='5' ry='5' transform='rotate(180 50 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.2)' rx='5' ry='5' transform='rotate(-150 45.98 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.17)' rx='5' ry='5' transform='rotate(-120 41.34 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.14)' rx='5' ry='5' transform='rotate(-90 35 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.1)' rx='5' ry='5' transform='rotate(-60 24.02 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.03)' rx='5' ry='5' transform='rotate(-30 -5.98 65)'/%3E%3C/svg%3E\")}@-webkit-keyframes a{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes a{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}"
  },
  {
    "path": "client/dist/style/widget/weui-media-box/weui-media-box.wxss",
    "content": "/*!\n * WeUI v1.1.1 (https://github.com/weui/weui-wxss)\n * Copyright 2017 Tencent, Inc.\n * Licensed under the MIT license\n */\n.weui-media-box{padding:15px;position:relative}.weui-media-box:before{content:\" \";position:absolute;left:0;top:0;right:0;height:1px;border-top:1rpx solid #e5e5e5;color:#e5e5e5;left:15px}.weui-media-box:first-child:before{display:none}.weui-media-box__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__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__info{margin-top:15px;padding-bottom:5px;font-size:13px;color:#cecece;line-height:1em;list-style:none;overflow:hidden}.weui-media-box__info__meta{float:left;padding-right:1em}.weui-media-box__info__meta_extra{padding-left:1em;border-left:1px solid #cecece}.weui-media-box__title_in-text{margin-bottom:8px}.weui-media-box_appmsg{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center}.weui-media-box__thumb{width:100%;height:100%;vertical-align:top}.weui-media-box__hd_in-appmsg{margin-right:.8em;width:60px;height:60px;line-height:60px;text-align:center}.weui-media-box__bd_in-appmsg{-webkit-box-flex:1;-webkit-flex:1;flex:1;min-width:0}.weui-media-box_small-appmsg{padding:0}.weui-cells_in-small-appmsg{margin-top:0}.weui-cells_in-small-appmsg:before{display:none}"
  },
  {
    "path": "client/dist/style/widget/weui-page/weui-article.wxss",
    "content": "/*!\n * WeUI v1.1.1 (https://github.com/weui/weui-wxss)\n * Copyright 2017 Tencent, Inc.\n * Licensed under the MIT license\n */\n.weui-article{padding:20px 15px;font-size:15px}.weui-article__section{margin-bottom:1.5em}.weui-article__h1{font-size:18px;font-weight:400;margin-bottom:.9em}.weui-article__h2{font-size:16px;font-weight:400;margin-bottom:.34em}.weui-article__h3{font-weight:400;font-size:15px;margin-bottom:.34em}.weui-article__p{margin:0 0 .8em}"
  },
  {
    "path": "client/dist/style/widget/weui-page/weui-msg.wxss",
    "content": "/*!\n * WeUI v1.1.1 (https://github.com/weui/weui-wxss)\n * Copyright 2017 Tencent, Inc.\n * Licensed under the MIT license\n */\n.weui-msg{padding-top:36px;text-align:center}.weui-msg__link{display:inline;color:#586c94}.weui-msg__icon-area{margin-bottom:30px}.weui-msg__text-area{margin-bottom:25px;padding:0 20px}.weui-msg__title{margin-bottom:5px;font-weight:400;font-size:20px}.weui-msg__desc{font-size:14px;color:#999}.weui-msg__opr-area{margin-bottom:25px}.weui-msg__extra-area{margin-bottom:15px;font-size:14px;color:#999}@media screen and (min-height:438px){.weui-msg__extra-area{position:fixed;left:0;bottom:0;width:100%;text-align:center}}"
  },
  {
    "path": "client/dist/style/widget/weui-panel/weui-panel.wxss",
    "content": "/*!\n * WeUI v1.1.1 (https://github.com/weui/weui-wxss)\n * Copyright 2017 Tencent, Inc.\n * Licensed under the MIT license\n */\n.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:1rpx solid #e5e5e5}.weui-panel:after,.weui-panel:before{content:\" \";position:absolute;left:0;right:0;height:1px;color:#e5e5e5}.weui-panel:after{bottom:0;border-bottom:1rpx solid #e5e5e5}.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;right:0;height:1px;border-bottom:1rpx solid #e5e5e5;color:#e5e5e5;left:15px}"
  },
  {
    "path": "client/dist/style/widget/weui-progress/weui-progress.wxss",
    "content": "/*!\n * WeUI v1.1.1 (https://github.com/weui/weui-wxss)\n * Copyright 2017 Tencent, Inc.\n * Licensed under the MIT license\n */\n.weui-progress{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center}.weui-progress__bar{-webkit-box-flex:1;-webkit-flex:1;flex:1}.weui-progress__opr{margin-left:15px;font-size:0}"
  },
  {
    "path": "client/dist/style/widget/weui-searchbar/weui-searchbar.wxss",
    "content": "/*!\n * WeUI v1.1.1 (https://github.com/weui/weui-wxss)\n * Copyright 2017 Tencent, Inc.\n * Licensed under the MIT license\n */\n.weui-search-bar{position:relative;padding:8px 10px;display:-webkit-box;display:-webkit-flex;display:flex;box-sizing:border-box;background-color:#efeff4;border-top:1rpx solid #d7d6dc;border-bottom:1rpx solid #d7d6dc}.weui-icon-search{margin-right:8px;font-size:inherit}.weui-icon-search_in-box{position:absolute;left:10px;top:7px}.weui-search-bar__text{display:inline-block;font-size:14px;vertical-align:middle}.weui-search-bar__form{position:relative;-webkit-box-flex:1;-webkit-flex:auto;flex:auto;border-radius:5px;background:#fff;border:1rpx solid #e6e6ea}.weui-search-bar__box{position:relative;padding-left:30px;padding-right:30px;width:100%;box-sizing:border-box;z-index:1}.weui-search-bar__input{height:28px;line-height:28px;font-size:14px}.weui-icon-clear{position:absolute;top:0;right:0;padding:7px 8px;font-size:0}.weui-search-bar__label{position:absolute;top:0;right:0;bottom:0;left:0;z-index:2;border-radius:3px;text-align:center;color:#9b9b9b;background:#fff;line-height:28px}.weui-search-bar__cancel-btn{margin-left:10px;line-height:28px;color:#09bb07;white-space:nowrap}"
  },
  {
    "path": "client/dist/style/widget/weui-tab/weui-navbar.wxss",
    "content": "/*!\n * WeUI v1.1.1 (https://github.com/weui/weui-wxss)\n * Copyright 2017 Tencent, Inc.\n * Licensed under the MIT license\n */\n.weui-navbar{display:-webkit-box;display:-webkit-flex;display:flex;position:absolute;z-index:500;top:0;width:100%;border-bottom:1rpx solid #ccc}.weui-navbar__item{position:relative;display:block;-webkit-box-flex:1;-webkit-flex:1;flex:1;padding:13px 0;text-align:center;font-size:0}.weui-navbar__item.weui-bar__item_on{color:#1aad19}.weui-navbar__slider{position:absolute;content:\" \";left:0;bottom:0;width:6em;height:3px;background-color:#1aad19;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}.weui-navbar__title{display:inline-block;font-size:15px;max-width:8em;width:auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}"
  },
  {
    "path": "client/dist/style/widget/weui-tab/weui-tab.wxss",
    "content": "/*!\n * WeUI v1.1.1 (https://github.com/weui/weui-wxss)\n * Copyright 2017 Tencent, Inc.\n * Licensed under the MIT license\n */\n.weui-navbar{display:-webkit-box;display:-webkit-flex;display:flex;position:absolute;z-index:500;top:0;width:100%;border-bottom:1rpx solid #ccc}.weui-navbar__item{position:relative;display:block;-webkit-box-flex:1;-webkit-flex:1;flex:1;padding:13px 0;text-align:center;font-size:0}.weui-navbar__item.weui-bar__item_on{color:#1aad19}.weui-navbar__slider{position:absolute;content:\" \";left:0;bottom:0;width:6em;height:3px;background-color:#1aad19;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}.weui-navbar__title{display:inline-block;font-size:15px;max-width:8em;width:auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}.weui-tab{position:relative;height:100%}.weui-tab__panel{box-sizing:border-box;height:100%;padding-top:50px;overflow:auto;-webkit-overflow-scrolling:touch}"
  },
  {
    "path": "client/dist/style/widget/weui-tips/weui-badge.wxss",
    "content": "/*!\n * WeUI v1.1.1 (https://github.com/weui/weui-wxss)\n * Copyright 2017 Tencent, Inc.\n * Licensed under the MIT license\n */\n.weui-badge{display:inline-block;padding:.15em .4em;min-width:8px;border-radius:18px;background-color:#e64340;color:#fff;line-height:1.2;text-align:center;font-size:12px;vertical-align:middle}.weui-badge_dot{padding:.4em;min-width:0}"
  },
  {
    "path": "client/dist/style/widget/weui-tips/weui-loadmore.wxss",
    "content": "/*!\n * WeUI v1.1.1 (https://github.com/weui/weui-wxss)\n * Copyright 2017 Tencent, Inc.\n * Licensed under the MIT license\n */\n.weui-loadmore{width:65%;margin:1.5em auto;line-height:1.6em;font-size:14px;text-align:center}.weui-loadmore__tips{display:inline-block;vertical-align:middle}.weui-loadmore_line{border-top:1px solid #e5e5e5;margin-top:2.4em}.weui-loadmore__tips_in-line{position:relative;top:-.9em;padding:0 .55em;background-color:#fff;color:#999}.weui-loadmore__tips_in-dot{position:relative;padding:0 .16em;width:4px;height:1.6em}.weui-loadmore__tips_in-dot:before{content:\" \";position:absolute;top:50%;left:50%;margin-top:-1px;margin-left:-2px;width:4px;height:4px;border-radius:50%;background-color:#e5e5e5}"
  },
  {
    "path": "client/libs/amap-wx.js",
    "content": "function AMapWX(a){this.key=a.key,this.requestConfig={key:a.key,s:\"rsx\",platform:\"WXJS\",appname:a.key,sdkversion:\"1.2.0\",logversion:\"2.0\"}}AMapWX.prototype.getWxLocation=function(a,b){wx.getLocation({type:\"gcj02\",success:function(a){var c=a.longitude+\",\"+a.latitude;wx.setStorage({key:\"userLocation\",data:c}),b(c)},fail:function(c){wx.getStorage({key:\"userLocation\",success:function(a){a.data&&b(a.data)}}),a.fail({errCode:\"0\",errMsg:c.errMsg||\"\"})}})},AMapWX.prototype.getRegeo=function(a){function c(c){var d=b.requestConfig;wx.request({url:\"https://restapi.amap.com/v3/geocode/regeo\",data:{key:b.key,location:c,extensions:\"all\",s:d.s,platform:d.platform,appname:b.key,sdkversion:d.sdkversion,logversion:d.logversion},method:\"GET\",header:{\"content-type\":\"application/json\"},success:function(b){var d,e,f,g,h,i,j,k,l;b.data.status&&\"1\"==b.data.status?(d=b.data.regeocode,e=d.addressComponent,f=[],g=\"\",d&&d.roads[0]&&d.roads[0].name&&(g=d.roads[0].name+\"附近\"),h=c.split(\",\")[0],i=c.split(\",\")[1],d.pois&&d.pois[0]&&(g=d.pois[0].name+\"附近\",j=d.pois[0].location,j&&(h=parseFloat(j.split(\",\")[0]),i=parseFloat(j.split(\",\")[1]))),e.provice&&f.push(e.provice),e.city&&f.push(e.city),e.district&&f.push(e.district),e.streetNumber&&e.streetNumber.street&&e.streetNumber.number?(f.push(e.streetNumber.street),f.push(e.streetNumber.number)):(k=\"\",d&&d.roads[0]&&d.roads[0].name&&(k=d.roads[0].name),f.push(k)),f=f.join(\"\"),l=[{iconPath:a.iconPath,width:a.iconWidth,height:a.iconHeight,name:f,desc:g,longitude:h,latitude:i,id:0,regeocodeData:d}],a.success(l)):a.fail({errCode:b.data.infocode,errMsg:b.data.info})},fail:function(b){a.fail({errCode:\"0\",errMsg:b.errMsg||\"\"})}})}var b=this;a.location?c(a.location):b.getWxLocation(a,function(a){c(a)})},AMapWX.prototype.getWeather=function(a){function d(d){var e=\"base\";a.type&&\"forecast\"==a.type&&(e=\"all\"),wx.request({url:\"https://restapi.amap.com/v3/weather/weatherInfo\",data:{key:b.key,city:d,extensions:e,s:c.s,platform:c.platform,appname:b.key,sdkversion:c.sdkversion,logversion:c.logversion},method:\"GET\",header:{\"content-type\":\"application/json\"},success:function(b){function c(a){var b={city:{text:\"城市\",data:a.city},weather:{text:\"天气\",data:a.weather},temperature:{text:\"温度\",data:a.temperature},winddirection:{text:\"风向\",data:a.winddirection+\"风\"},windpower:{text:\"风力\",data:a.windpower+\"级\"},humidity:{text:\"湿度\",data:a.humidity+\"%\"}};return b}var d,e;b.data.status&&\"1\"==b.data.status?b.data.lives?(d=b.data.lives,d&&d.length>0&&(d=d[0],e=c(d),e[\"liveData\"]=d,a.success(e))):b.data.forecasts&&b.data.forecasts[0]&&a.success({forecast:b.data.forecasts[0]}):a.fail({errCode:b.data.infocode,errMsg:b.data.info})},fail:function(b){a.fail({errCode:\"0\",errMsg:b.errMsg||\"\"})}})}function e(e){wx.request({url:\"https://restapi.amap.com/v3/geocode/regeo\",data:{key:b.key,location:e,extensions:\"all\",s:c.s,platform:c.platform,appname:b.key,sdkversion:c.sdkversion,logversion:c.logversion},method:\"GET\",header:{\"content-type\":\"application/json\"},success:function(b){var c,e;b.data.status&&\"1\"==b.data.status?(e=b.data.regeocode,e.addressComponent?c=e.addressComponent.adcode:e.aois&&e.aois.length>0&&(c=e.aois[0].adcode),d(c)):a.fail({errCode:b.data.infocode,errMsg:b.data.info})},fail:function(b){a.fail({errCode:\"0\",errMsg:b.errMsg||\"\"})}})}var b=this,c=b.requestConfig;a.city?d(a.city):b.getWxLocation(a,function(a){e(a)})},AMapWX.prototype.getPoiAround=function(a){function d(d){var e={key:b.key,location:d,s:c.s,platform:c.platform,appname:b.key,sdkversion:c.sdkversion,logversion:c.logversion};a.querytypes&&(e[\"types\"]=a.querytypes),a.querykeywords&&(e[\"keywords\"]=a.querykeywords),wx.request({url:\"https://restapi.amap.com/v3/place/around\",data:e,method:\"GET\",header:{\"content-type\":\"application/json\"},success:function(b){var c,d,e,f;if(b.data.status&&\"1\"==b.data.status){if(b=b.data,b&&b.pois){for(c=[],d=0;d<b.pois.length;d++)e=0==d?a.iconPathSelected:a.iconPath,c.push({latitude:parseFloat(b.pois[d].location.split(\",\")[1]),longitude:parseFloat(b.pois[d].location.split(\",\")[0]),iconPath:e,width:22,height:32,id:d,name:b.pois[d].name,address:b.pois[d].address});f={markers:c,poisData:b.pois},a.success(f)}}else a.fail({errCode:b.data.infocode,errMsg:b.data.info})},fail:function(b){a.fail({errCode:\"0\",errMsg:b.errMsg||\"\"})}})}var b=this,c=b.requestConfig;a.location?d(a.location):b.getWxLocation(a,function(a){d(a)})},AMapWX.prototype.getStaticmap=function(a){function f(b){c.push(\"location=\"+b),a.zoom&&c.push(\"zoom=\"+a.zoom),a.size&&c.push(\"size=\"+a.size),a.scale&&c.push(\"scale=\"+a.scale),a.markers&&c.push(\"markers=\"+a.markers),a.labels&&c.push(\"labels=\"+a.labels),a.paths&&c.push(\"paths=\"+a.paths),a.traffic&&c.push(\"traffic=\"+a.traffic);var e=d+c.join(\"&\");a.success({url:e})}var e,b=this,c=[],d=\"https://restapi.amap.com/v3/staticmap?\";c.push(\"key=\"+b.key),e=b.requestConfig,c.push(\"s=\"+e.s),c.push(\"platform=\"+e.platform),c.push(\"appname=\"+e.appname),c.push(\"sdkversion=\"+e.sdkversion),c.push(\"logversion=\"+e.logversion),a.location?f(a.location):b.getWxLocation(a,function(a){f(a)})},AMapWX.prototype.getInputtips=function(a){var b=this,c=b.requestConfig,d={key:b.key,s:c.s,platform:c.platform,appname:b.key,sdkversion:c.sdkversion,logversion:c.logversion};a.location&&(d[\"location\"]=a.location),a.keywords&&(d[\"keywords\"]=a.keywords),a.type&&(d[\"type\"]=a.type),a.city&&(d[\"city\"]=a.city),a.citylimit&&(d[\"citylimit\"]=a.citylimit),wx.request({url:\"https://restapi.amap.com/v3/assistant/inputtips\",data:d,method:\"GET\",header:{\"content-type\":\"application/json\"},success:function(b){b&&b.data&&b.data.tips&&a.success({tips:b.data.tips})},fail:function(b){a.fail({errCode:\"0\",errMsg:b.errMsg||\"\"})}})},AMapWX.prototype.getDrivingRoute=function(a){var b=this,c=b.requestConfig,d={key:b.key,s:c.s,platform:c.platform,appname:b.key,sdkversion:c.sdkversion,logversion:c.logversion};a.origin&&(d[\"origin\"]=a.origin),a.destination&&(d[\"destination\"]=a.destination),a.strategy&&(d[\"strategy\"]=a.strategy),a.waypoints&&(d[\"waypoints\"]=a.waypoints),a.avoidpolygons&&(d[\"avoidpolygons\"]=a.avoidpolygons),a.avoidroad&&(d[\"avoidroad\"]=a.avoidroad),wx.request({url:\"https://restapi.amap.com/v3/direction/driving\",data:d,method:\"GET\",header:{\"content-type\":\"application/json\"},success:function(b){b&&b.data&&b.data.route&&a.success({paths:b.data.route.paths,taxi_cost:b.data.route.taxi_cost||\"\"})},fail:function(b){a.fail({errCode:\"0\",errMsg:b.errMsg||\"\"})}})},AMapWX.prototype.getWalkingRoute=function(a){var b=this,c=b.requestConfig,d={key:b.key,s:c.s,platform:c.platform,appname:b.key,sdkversion:c.sdkversion,logversion:c.logversion};a.origin&&(d[\"origin\"]=a.origin),a.destination&&(d[\"destination\"]=a.destination),wx.request({url:\"https://restapi.amap.com/v3/direction/walking\",data:d,method:\"GET\",header:{\"content-type\":\"application/json\"},success:function(b){b&&b.data&&b.data.route&&a.success({paths:b.data.route.paths})},fail:function(b){a.fail({errCode:\"0\",errMsg:b.errMsg||\"\"})}})},AMapWX.prototype.getTransitRoute=function(a){var b=this,c=b.requestConfig,d={key:b.key,s:c.s,platform:c.platform,appname:b.key,sdkversion:c.sdkversion,logversion:c.logversion};a.origin&&(d[\"origin\"]=a.origin),a.destination&&(d[\"destination\"]=a.destination),a.strategy&&(d[\"strategy\"]=a.strategy),a.city&&(d[\"city\"]=a.city),a.cityd&&(d[\"cityd\"]=a.cityd),wx.request({url:\"https://restapi.amap.com/v3/direction/transit/integrated\",data:d,method:\"GET\",header:{\"content-type\":\"application/json\"},success:function(b){if(b&&b.data&&b.data.route){var c=b.data.route;a.success({distance:c.distance||\"\",taxi_cost:c.taxi_cost||\"\",transits:c.transits})}},fail:function(b){a.fail({errCode:\"0\",errMsg:b.errMsg||\"\"})}})},AMapWX.prototype.getRidingRoute=function(a){var b=this,c=b.requestConfig,d={key:b.key,s:c.s,platform:c.platform,appname:b.key,sdkversion:c.sdkversion,logversion:c.logversion};a.origin&&(d[\"origin\"]=a.origin),a.destination&&(d[\"destination\"]=a.destination),wx.request({url:\"https://restapi.amap.com/v4/direction/bicycling\",data:d,method:\"GET\",header:{\"content-type\":\"application/json\"},success:function(b){b&&b.data&&b.data.data&&a.success({paths:b.data.data.paths})},fail:function(b){a.fail({errCode:\"0\",errMsg:b.errMsg||\"\"})}})},module.exports.AMapWX=AMapWX;"
  },
  {
    "path": "client/libs/qqmap-wx-jssdk.js",
    "content": "/**\n * 微信小程序JavaScriptSDK\n * \n * @version 1.0\n * @date 2017-01-10\n * @author jaysonzhou@tencent.com\n */\n\nvar ERROR_CONF = {\n    KEY_ERR: 311,\n    KEY_ERR_MSG: 'key格式错误',\n    PARAM_ERR: 310,\n    PARAM_ERR_MSG: '请求参数信息有误',\n    SYSTEM_ERR: 600,\n    SYSTEM_ERR_MSG: '系统错误',\n    WX_ERR_CODE: 1000,\n    WX_OK_CODE: 200\n};\nvar BASE_URL = 'https://apis.map.qq.com/ws/';\nvar URL_SEARCH = BASE_URL + 'place/v1/search';\nvar URL_SUGGESTION = BASE_URL + 'place/v1/suggestion';\nvar URL_GET_GEOCODER = BASE_URL + 'geocoder/v1/';\nvar URL_CITY_LIST = BASE_URL + 'district/v1/list';\nvar URL_AREA_LIST = BASE_URL + 'district/v1/getchildren';\nvar URL_DISTANCE = BASE_URL + 'distance/v1/';\nvar Utils = {\n    /**\n     * 得到终点query字符串\n     * @param {Array|String} 检索数据\n     */\n    location2query(data) {\n        if (typeof data == 'string') {\n            return data;\n        }\n        var query = '';\n        for (var i = 0; i < data.length; i++) {\n            var d = data[i];\n            if (!!query) {\n                query += ';';\n            }\n            if (d.location) {\n                query = query + d.location.lat + ',' + d.location.lng;\n            }\n            if (d.latitude && d.longitude) {\n                query = query + d.latitude + ',' + d.longitude;\n            }\n        }\n        return query;\n    },\n\n    /**\n     * 使用微信接口进行定位\n     */\n    getWXLocation(success, fail, complete) {\n        wx.getLocation({\n            type: 'gcj02',\n            success: success,\n            fail: fail,\n            complete: complete\n        });\n    },\n\n    /**\n     * 获取location参数\n     */\n    getLocationParam(location) {\n        if (typeof location == 'string') {\n            var locationArr = location.split(',');\n            if (locationArr.length === 2) {\n                location = {\n                    latitude: location.split(',')[0],\n                    longitude: location.split(',')[1]\n                };\n            } else {\n                location = {};\n            }\n        }\n        return location;\n    },\n\n    /**\n     * 回调函数默认处理\n     */\n    polyfillParam(param) {\n        param.success = param.success || function () { };\n        param.fail = param.fail || function () { };\n        param.complete = param.complete || function () { };\n    },\n\n    /**\n     * 验证param对应的key值是否为空\n     * \n     * @param {Object} param 接口参数\n     * @param {String} key 对应参数的key\n     */\n    checkParamKeyEmpty(param, key) {\n        if (!param[key]) {\n            var errconf = this.buildErrorConfig(ERROR_CONF.PARAM_ERR, ERROR_CONF.PARAM_ERR_MSG + key +'参数格式有误');\n            param.fail(errconf);\n            param.complete(errconf);\n            return true;\n        }\n        return false;\n    },\n\n    /**\n     * 验证参数中是否存在检索词keyword\n     * \n     * @param {Object} param 接口参数\n     */\n    checkKeyword(param){\n        return !this.checkParamKeyEmpty(param, 'keyword');\n    },\n\n    /**\n     * 验证location值\n     * \n     * @param {Object} param 接口参数\n     */\n    checkLocation(param) {\n        var location = this.getLocationParam(param.location);\n        if (!location || !location.latitude || !location.longitude) {\n            var errconf = this.buildErrorConfig(ERROR_CONF.PARAM_ERR, ERROR_CONF.PARAM_ERR_MSG + ' location参数格式有误')\n            param.fail(errconf);\n            param.complete(errconf);\n            return false;\n        }\n        return true;\n    },\n\n    /**\n     * 构造错误数据结构\n     * @param {Number} errCode 错误码\n     * @param {Number} errMsg 错误描述\n     */\n    buildErrorConfig(errCode, errMsg) {\n        return {\n            status: errCode,\n            message: errMsg\n        };\n    },\n\n    /**\n     * 构造微信请求参数，公共属性处理\n     * \n     * @param {Object} param 接口参数\n     * @param {Object} param 配置项\n     */\n    buildWxRequestConfig(param, options) {\n        var that = this;\n        options.header = { \"content-type\": \"application/json\" };\n        options.method = 'GET';\n        options.success = function (res) {\n            var data = res.data;\n            if (data.status === 0) {\n                param.success(data);\n            } else {\n                param.fail(data);\n            }\n        };\n        options.fail = function (res) {\n            res.statusCode = ERROR_CONF.WX_ERR_CODE;\n            param.fail(that.buildErrorConfig(ERROR_CONF.WX_ERR_CODE, result.errMsg));\n        };\n        options.complete = function (res) {\n            var statusCode = +res.statusCode;\n            switch(statusCode) {\n                case ERROR_CONF.WX_ERR_CODE: {\n                    param.complete(that.buildErrorConfig(ERROR_CONF.WX_ERR_CODE, res.errMsg));\n                    break;\n                }\n                case ERROR_CONF.WX_OK_CODE: {\n                    var data = res.data;\n                    if (data.status === 0) {\n                        param.complete(data);\n                    } else {\n                        param.complete(that.buildErrorConfig(data.status, data.message));\n                    }\n                    break;\n                }\n                default:{\n                    param.complete(that.buildErrorConfig(ERROR_CONF.SYSTEM_ERR, ERROR_CONF.SYSTEM_ERR_MSG));\n                }\n\n            }\n        }\n        return options;\n    },\n\n    /**\n     * 处理用户参数是否传入坐标进行不同的处理\n     */\n    locationProcess(param, locationsuccess, locationfail, locationcomplete) {\n        var that = this;\n        locationfail = locationfail || function (res) {\n            res.statusCode = ERROR_CONF.WX_ERR_CODE;\n            param.fail(that.buildErrorConfig(ERROR_CONF.WX_ERR_CODE, res.errMsg));\n        };\n        locationcomplete = locationcomplete || function (res) {\n            if (res.statusCode == ERROR_CONF.WX_ERR_CODE) {\n                param.complete(that.buildErrorConfig(ERROR_CONF.WX_ERR_CODE, res.errMsg));\n            }\n        };\n        if (!param.location) {\n            that.getWXLocation(locationsuccess, locationfail, locationcomplete);\n        } else if (that.checkLocation(param)) {\n            var location = Utils.getLocationParam(param.location);\n            locationsuccess(location);\n        }\n    }\n}\n\n\nclass QQMapWX {\n\n    /**\n     * 构造函数\n     * \n     * @param {Object} options 接口参数,key 为必选参数\n     */\n    constructor(options) {\n        if (!options.key) {\n            throw Error('key值不能为空');\n        }\n        this.key = options.key;\n    }\n\n    /**\n     * POI周边检索\n     *\n     * @param {Object} options 接口参数对象\n     * \n     * 参数对象结构可以参考\n     * @see http://lbs.qq.com/webservice_v1/guide-search.html\n     */\n    search(options) {\n        var that = this;\n        options = options || {};\n\n        Utils.polyfillParam(options);\n\n        if (!Utils.checkKeyword(options)) {\n            return;\n        }\n\n        var requestParam = {\n            keyword: options.keyword,\n            orderby: options.orderby || '_distance',\n            page_size: options.page_size || 10,\n            page_index: options.page_index || 1,\n            output: 'json',\n            key: that.key\n        };\n\n        if (options.address_format) {\n            requestParam.address_format = options.address_format;\n        }\n\n        if (options.filter) {\n            requestParam.filter = options.filter;\n        }\n\n        var distance = options.distance || \"1000\";\n        var auto_extend = options.auto_extend || 1;\n\n        var locationsuccess = function (result) {\n            requestParam.boundary = \"nearby(\" + result.latitude + \",\" + result.longitude + \",\" + distance + \",\" + auto_extend +\")\";\n            wx.request(Utils.buildWxRequestConfig(options, {\n                url: URL_SEARCH,\n                data: requestParam\n            }));\n        }\n        Utils.locationProcess(options, locationsuccess);\n    }\n\n    /**\n     * sug模糊检索\n     *\n     * @param {Object} options 接口参数对象\n     * \n     * 参数对象结构可以参考\n     * http://lbs.qq.com/webservice_v1/guide-suggestion.html\n     */\n    getSuggestion(options) {\n        var that = this;\n        options = options || {};\n        Utils.polyfillParam(options);\n\n        if (!Utils.checkKeyword(options)) {\n            return;\n        }\n\n        var requestParam = {\n            keyword: options.keyword,\n            region: options.region || '全国',\n            region_fix: options.region_fix || 0,\n            policy: options.policy || 0,\n            output: 'json',\n            key: that.key\n        };\n        wx.request(Utils.buildWxRequestConfig(options, {\n            url: URL_SUGGESTION,\n            data: requestParam\n        }));\n    }\n\n    /**\n     * 逆地址解析\n     *\n     * @param {Object} options 接口参数对象\n     * \n     * 请求参数结构可以参考\n     * http://lbs.qq.com/webservice_v1/guide-gcoder.html\n     */\n    reverseGeocoder(options) {\n        var that = this;\n        options = options || {};\n        Utils.polyfillParam(options);\n        var requestParam = {\n            coord_type: options.coord_type || 5,\n            get_poi: options.get_poi || 0,\n            output: 'json',\n            key: that.key\n        };\n        if (options.poi_options) {\n            requestParam.poi_options = options.poi_options\n        }\n\n        var locationsuccess = function (result) {\n            requestParam.location = result.latitude + ',' + result.longitude;\n            wx.request(Utils.buildWxRequestConfig(options, {\n                url: URL_GET_GEOCODER,\n                data: requestParam\n            }));\n        };\n        Utils.locationProcess(options, locationsuccess);\n    }\n\n    /**\n     * 地址解析\n     *\n     * @param {Object} options 接口参数对象\n     * \n     * 请求参数结构可以参考\n     * http://lbs.qq.com/webservice_v1/guide-geocoder.html\n     */\n    geocoder(options) {\n        var that = this;\n        options = options || {};\n        Utils.polyfillParam(options);\n\n        if (Utils.checkParamKeyEmpty(options, 'address')) {\n            return;\n        }\n\n        var requestParam = {\n            address: options.address,\n            output: 'json',\n            key: that.key\n        };\n\n        wx.request(Utils.buildWxRequestConfig(options, {\n            url: URL_GET_GEOCODER,\n            data: requestParam\n        }));\n    }\n\n\n    /**\n     * 获取城市列表\n     *\n     * @param {Object} options 接口参数对象\n     * \n     * 请求参数结构可以参考\n     * http://lbs.qq.com/webservice_v1/guide-region.html\n     */\n    getCityList(options) {\n        var that = this;\n        options = options || {};\n        Utils.polyfillParam(options);\n        var requestParam = {\n            output: 'json',\n            key: that.key\n        };\n\n        wx.request(Utils.buildWxRequestConfig(options, {\n            url: URL_CITY_LIST,\n            data: requestParam\n        }));\n    }\n\n    /**\n     * 获取对应城市ID的区县列表\n     *\n     * @param {Object} options 接口参数对象\n     * \n     * 请求参数结构可以参考\n     * http://lbs.qq.com/webservice_v1/guide-region.html\n     */\n    getDistrictByCityId(options) {\n        var that = this;\n        options = options || {};\n        Utils.polyfillParam(options);\n\n        if (Utils.checkParamKeyEmpty(options, 'id')) {\n            return;\n        }\n\n        var requestParam = {\n            id: options.id || '',\n            output: 'json',\n            key: that.key\n        };\n\n        wx.request(Utils.buildWxRequestConfig(options, {\n            url: URL_AREA_LIST,\n            data: requestParam\n        }));\n    }\n\n    /**\n     * 用于单起点到多终点的路线距离(非直线距离)计算：\n     * 支持两种距离计算方式：步行和驾车。\n     * 起点到终点最大限制直线距离10公里。\n     *\n     * @param {Object} options 接口参数对象\n     * \n     * 请求参数结构可以参考\n     * http://lbs.qq.com/webservice_v1/guide-distance.html\n     */\n    calculateDistance(options) {\n        var that = this;\n        options = options || {};\n        Utils.polyfillParam(options);\n\n        if (Utils.checkParamKeyEmpty(options, 'to')) {\n            return;\n        }\n\n        var requestParam = {\n            mode: options.mode || 'walking',\n            to: Utils.location2query(options.to),\n            output: 'json',\n            key: that.key\n        };\n\n        var locationsuccess = function (result) {\n            requestParam.from = result.latitude + ',' + result.longitude;\n            wx.request(Utils.buildWxRequestConfig(options, {\n                url: URL_DISTANCE,\n                data: requestParam\n            }));\n        }\n        if (options.from) {\n            options.location = options.from;\n        }\n        \n        Utils.locationProcess(options, locationsuccess);\n    }\n}\n\nmodule.exports = QQMapWX;"
  },
  {
    "path": "client/pages/addLocation/addLocation.js",
    "content": "var des_lat = -1;\nvar des_lng = -1;\nvar des_title = \"\";\nvar callout_obj={};\nPage({\n    data: {\n        markers: [{\n            iconPath: \"../../image/marker.png\",\n            id: 0,\n            latitude: -1,\n            longitude: -1,\n            callout:{}\n        }],\n        controls: [{\n            id: 1,\n            iconPath: '../../image/location.png',\n            position: {\n                left: 20,\n                top: 450 - 50,\n                width: 30,\n                height: 30\n            },\n            clickable: true\n        }],\n        inputShowed: false,\n        inputVal: \"\",\n        central_longitude: -1,\n        central_latitude: 20,\n    },\n    regionchange(e) {\n        console.log(e.type)\n    },\n    /**\n     * 点击marker的时候触发，显示callout\n     */\n    markertap(e) {\n        var that = this;\n        callout_obj = {\n            content:des_title,\n            color:\"#000\",\n            fontSize:12,\n            borderRadius:5,\n            padding:3,\n            display:'ALWAYS',\n            textAlign:'cneter'\n        };\n        that.setData({\n            markers:[{\n                iconPath: \"../../image/marker.png\",\n                id: 0,\n                latitude: des_lat,\n                longitude: des_lng,\n                callout: callout_obj\n            }]\n        });\n        \n    },\n    controltap(e) {\n        var that = this;\n        that.mapCtx.moveToLocation();\n    },\n\n    searchDetail: function () {\n        wx.redirectTo({\n            url: '../searchDetail/searchDetail',\n        })\n    },\n\n    /**\n     * 页面载入的时候获取用户地址\n     */\n    onLoad: function (options) {\n        var that = this;\n        if (!getApp().data.haveLocation) {\n            wx.getLocation({\n                type: 'wgs84',\n                success: function (res) {\n                    that.setData({\n                        central_latitude: res.latitude,\n                        central_longitude: res.longitude\n                    });\n                }\n            });\n            getApp().data.haveLocation = true;\n            //页面退出的时候也要更新haveLocation！！！！！\n            // !!!!!!!\n        }\n\n\n        des_lat = options.lat;\n        des_lng = options.lng;\n        des_title = options.title;\n        that.setData({\n            markers: [{\n                iconPath: \"../../image/marker.png\",\n                id: 0,\n                latitude: des_lat,\n                longitude: des_lng\n            }],\n            central_latitude: des_lat,\n            central_longitude: des_lng\n        })\n\n    },\n\n    onReady: function (e) {\n        var that = this;\n        that.mapCtx = wx.createMapContext('myMap');\n    },\n\n    /**\n     * 确定地点并返回\n     */\n    submit_location: function() {\n        getApp().data.activity_lat = des_lat;\n        getApp().data.activity_lng = des_lng;\n        getApp().data.activity_location = des_title;\n        wx.navigateBack({\n            delta:1\n        });\n        console.log(getApp().data.activity_location);\n    }\n})"
  },
  {
    "path": "client/pages/addLocation/addLocation.json",
    "content": "{}"
  },
  {
    "path": "client/pages/addLocation/addLocation.wxml",
    "content": "<view class=\"page\">\n    <view class=\"page__bd\">\n        <view class=\"weui-search-bar\">\n            <view class=\"weui-search-bar__form\">\n                <view class=\"weui-search-bar__box\">\n                    <icon class=\"weui-icon-search_in-box\" type=\"search\" size=\"14\"></icon>\n                    <input type=\"text\" class=\"weui-search-bar__input\" placeholder=\"搜索\" bindtap=\"searchDetail\" />\n                </view>\n            </view>\n        </view>\n    </view>\n    <view class='page_bd'>\n        <map id=\"myMap\" longitude=\"{{central_longitude}}\" latitude=\"{{central_latitude}}\" scale=\"14\" controls=\"{{controls}}\" bindcontroltap=\"controltap\" markers=\"{{markers}}\" show-location='true' bindmarkertap=\"markertap\" bindregionchange=\"regionchange\" show-location style=\"width: 100%; height: 900rpx;\">\n        </map>\n    </view>\n    <view class='page_bd btn-submit'>\n         <button class=\"weui-btn\" type=\"primary\" bindtap=\"submit_location\">确定</button>\n    </view>\n</view>"
  },
  {
    "path": "client/pages/addLocation/addLocation.wxss",
    "content": ".searchbar-result{\n    margin-top: 0;\n    font-size: 14px;\n}\n.searchbar-result:before{\n    display: none;\n}\n.weui-cell{\n    padding: 12px 15px 12px 35px;\n}\n.btn-submit {\n    margin-top: 50rpx;\n}"
  },
  {
    "path": "client/pages/checkIn/checkIn.js",
    "content": "// pages/checkIn/checkIn.js\nvar uploadFn = require('../../utils/upload.js');\nvar config = require('../../config.js');\nvar distance = require('../../utils/getdistance.js');\nvar QQMapWX = require('../../libs/qqmap-wx-jssdk.js');\n//腾讯地图Key\nvar demo = new QQMapWX({\n    key: ''\n});\nconst app = getApp();\nvar photo_check_url = null;\nvar photo_check_res = false;\nvar location_check_res = false;\nvar face_check_res = false;\nvar activity_lat = null;\nvar activity_lng = null;\nvar activity_id = null;\nPage({\n\n    /**\n     * 页面的初始数据\n     */\n    data: {\n        activity_title: \"\",\n        photo: \"../../image/avator.jpg\",\n        location_res: \"等待验证\",\n        face_res: \"等待验证\",\n        face_disabled:false,\n        location_disabled:false\n    },\n\n    /**\n     * 生命周期函数--监听页面加载\n     */\n    onLoad: function (options) {\n        var that = this;\n        console.log('点击打卡', photo_check_res, location_check_res)\n        activity_lat = options.lat;\n        activity_lng = options.lng;\n        activity_id = options.activityId;\n        console.log(options.activityId);\n        if(options.face == 0){\n            face_check_res = true;\n        }\n        if(options.location == 0) {\n            location_check_res = true;\n        }\n        console.log(options.face,options.location);\n        that.setData({\n            activity_title: options.title,\n            face_disabled: options.face==0?true:false,\n            location_disabled: options.location == 0 ? true : false\n        });\n    },\n\n    /**\n     * 生命周期函数--监听页面初次渲染完成\n     */\n    onReady: function () {\n\n    },\n\n    /**\n     * 生命周期函数--监听页面显示\n     */\n    onShow: function () {\n    },\n\n    /**\n     * 生命周期函数--监听页面隐藏\n     */\n    onHide: function () {\n\n    },\n\n    /**\n     * 生命周期函数--监听页面卸载\n     */\n    onUnload: function () {\n        var that = this;\n        that.setData({\n            face_disabled: false,\n            location_disabled: false\n        })\n    },\n\n    /**\n     * 页面相关事件处理函数--监听用户下拉动作\n     */\n    onPullDownRefresh: function () {\n\n    },\n\n    /**\n     * 页面上拉触底事件的处理函数\n     */\n    onReachBottom: function () {\n\n    },\n\n    /**\n     * 用户点击右上角分享\n     */\n    onShareAppMessage: function () {\n\n    },\n    /**\n     * 选择图片\n     * api_key face++的人脸对比接口key\n     * api_secret face++的人脸对比接口secret\n     * image_url2 第二张人脸的照片\n     */\n    chooseImage: function () {\n        wx.chooseImage({\n            success: function (res) {\n                var tempFilePaths = res.tempFilePaths\n                wx.uploadFile({\n                    url: 'https://api-cn.faceplusplus.com/facepp/v3/compare', //仅为示例，非真实的接口地址\n                    filePath: tempFilePaths[0],\n                    name: 'image_file1',\n                    formData: {\n                        'api_key': '',\n                        'api_secret': '',\n                        'image_url2': ''\n                    },\n                    success: function (res) {\n                        console.log(res.data);\n                        //do something\n                    }\n                })\n            }\n        })\n    },\n    /**\n     * 点击上传打卡照片时，进行图片签到\n     */\n    photoCheck: function () {\n        var me = this;\n        wx.chooseImage({\n            success: function (res) {\n                var filePath = res.tempFilePaths[0];\n                // var fileName = filePath.match(/http.{7}(.*)/);\n                // fileName = fileName[1];\n                var fileName = Date.parse(new Date()) + '.jpg';\n                uploadFn(filePath, fileName, me, function (photo_url) {\n                    photo_check_url = photo_url;\n                    photo_check_res = true;\n                    //   最后用的时候再打开，否则频繁请求说不定要钱呢！\n                      me.setData({\n                          photo: photo_url\n                      });\n                    // console.log(photo_url);\n                });\n            },\n        })\n    },\n    /**\n     * 点击地点验证，进行地点签到\n     */\n    locationCheck: function () {\n        var that = this;\n        wx.getLocation({\n            success: function (res) {\n                var p1 = {\n                    lat: res.latitude,\n                    lng: res.longitude\n                };\n                var p2 = {\n                    lat: activity_lat,\n                    lng: activity_lng\n                };\n                // console.log(p1, p2);\n                demo.calculateDistance({\n                    to: [{\n                        latitude: p1.lat,\n                        longitude: p1.lng\n                    }],\n                    from: {\n                        latitude: p2.lat,\n                        longitude: p2.lng\n                    },\n                    success: function (res) {\n                        var dis = res.result.elements[0].distance;\n                        if (dis <= 1000) {\n                            location_check_res = true;\n                            that.setData({\n                                location_res: \"验证成功\"\n                            })\n                        } else {\n                            location_check_res = false;\n                            that.setData({\n                                location_res: \"验证失败\"\n                            })\n                        }\n                        // console.log(res.result.elements[0].distance);\n                        console.log(res);\n                    },\n                    fail: function (res) {\n                        console.log(res);\n                    },\n                })\n            },\n        })\n    },\n    /**\n     * 点击人脸验证，进行人脸签到\n     * api_key face++的人脸对比接口key\n     * api_secret face++的人脸对比接口secret\n     * image_url2 第二张人脸的照片\n     */\n    faceCheck: function () {\n        var that = this;\n        wx.chooseImage({\n            success: function (res) {\n                var avator_url = app.globalData.avator_url;\n                console.log('本地照片地址',avator_url);\n                if (avator_url == '') {\n                    wx.showToast({\n                        title: '请绑定照片',\n                        duration: 1000\n                    })\n                } else {\n                    var tempFilePaths = res.tempFilePaths\n                    wx.uploadFile({\n                        url: 'https://api-cn.faceplusplus.com/facepp/v3/compare', //仅为示例，非真实的接口地址\n                        filePath: tempFilePaths[0],\n                        name: 'image_file1',\n                        formData: {\n                            'api_key': '',\n                            'api_secret': '',\n                            'image_url2': avator_url\n                        },\n                        success: function (res) {\n                            console.log(res.data);\n                            var obj = JSON.parse(res.data);\n                            // console.log(obj.confidence);\n                           if(obj.confidence >= 50){\n                               face_check_res = true;\n                               that.setData({\n                                   face_res:'验证成功'\n                               })\n                           }else if (obj.confidence < 50) {\n                               that.setData({\n                                   face_res:'验证失败'\n                               })\n                           }else{\n                               wx.showToast({\n                                   title: 'API并发控制',\n                                   duration: 1000\n                               })\n                           }\n                        }\n                    })\n                }\n\n            }\n        })\n    },\n    submitCheck: function(){\n        if(photo_check_res&&location_check_res&&face_check_res){\n            wx.request({\n                url: config.url + '/check',\n                method:'POST',\n                data:{\n                    'userId':app.globalData.user_id,\n                    'activityId':activity_id,\n                    'photoUrl':photo_check_url\n                },\n                success: function(check_res){\n                    if(check_res.data.code==1){\n                        wx.navigateBack({\n                        });\n                        photo_check_res = false;\n                        face_check_res = false;\n                        location_check_res = false;\n                    }\n                }\n\n            })\n        }else{\n            wx.showToast({\n                title: '请完成所有验证',\n                duration: 1000\n            })\n        }\n    }\n})"
  },
  {
    "path": "client/pages/checkIn/checkIn.json",
    "content": "{}"
  },
  {
    "path": "client/pages/checkIn/checkIn.wxml",
    "content": "<view class=\"page\">\n    <view class=\"page_check_hd\">\n        <view class=\"page_check_title\">{{activity_title}}</view>\n    </view>\n    <view class='check_image_bd'>\n        <image class='check_image' src='{{photo}}'></image>\n    </view>\n    <view class=\"button-sp-area\">\n        <button class=\"weui-btn\" type=\"primary\" plain=\"true\" bindtap='photoCheck'>上传打卡照片</button>\n    </view>\n    <view class='check_group'>\n        <view class='group_item'>\n            <button class=\"weui-btn mini-btn\" disabled='{{location_disabled}}' type=\"primary\" size=\"mini\" bindtap='locationCheck'>地点验证</button>\n            <view class='text_item'>{{location_res}}</view>\n        </view>\n        <view class='group_item'>\n            <button class=\"weui-btn mini-btn\" type=\"primary\" size=\"mini\" bindtap='faceCheck' disabled='{{face_disabled}}'>人脸验证</button>\n            <view class='text_item'>{{face_res}}</view>\n        </view>\n    </view>\n    <view class=\"page__bd page__bd_spacing\">\n        <view class='btn_footer'></view>\n        <button class=\"weui-btn\" type=\"primary\" bindtap='submitCheck'>完成</button>\n    </view>\n    \n</view>"
  },
  {
    "path": "client/pages/checkIn/checkIn.wxss",
    "content": ".page_check_hd {\n    padding: 20rpx;\n}\n.page_check_title{\n    font-size: 20px;\n    text-align: center;\n    height: 400;\n}\n\n.check_image_bd {\n    width: 100%;\n    align-content: center;\n}\n.check_image {\n    width: 600rpx;\n    height: 400rpx;\n    padding-left:75rpx; \n}\n.button-sp-area{\n    margin: 0 auto;\n    padding-top: 15px;\n    width: 60%;\n}\n.check_group{\n    margin: 0 auto;\n    padding-top: 30px;\n    width: 70%;\n}\n.mini-btn{\n    margin-right: 5px;\n}\n.text_item {\n    float: right;\n    display: block;\n    font-size: 15px;\n    margin-top: 2rpx;\n}\n.btn_footer {\n    margin-bottom: 50px;\n}\n.group_item {\n    margin-top: 20px;\n}"
  },
  {
    "path": "client/pages/detail/detail.js",
    "content": "// pages/detail/detail.js\nvar config = require('../../config.js');\nvar app = getApp();\nvar haveApplyed = false;\nvar lat = null;\nvar lng = null;\nvar face = null;\nvar location = null;\nvar activity_id=null;\nPage({\n\n  /**\n   * 页面的初始数据\n   */\n  data: {\n      detail_info:{},\n      activity_info:{},\n      check_date_info:{},\n      detail_show:false,\n      show_date:true,\n      date_info_hidden:true,\n      apply_msg:\"点击报名\"\n  },\n\n  /**\n   * 生命周期函数--监听页面加载\n   */\n  onLoad: function (options) {\n      var activityId = options.activity_id;\n      activity_id = activityId;\n      var that = this;\n    //   console.log(activityId);\n      wx.request({\n          url: config.url +'/check/details',\n          data: {\n              'id':activityId\n          },\n          method:'POST',\n          success:function(res) {\n              console.log(res.data);\n              that.setData({\n                  detail_info:res.data\n              });\n          }\n      });\n      wx.request({\n          url: config.url + '/activity/actInfo',\n          data:{\n              'id':activityId\n          },\n          method:'POST',\n          success: function(res) {\n              that.setData({\n                  activity_info:res.data\n              })\n              console.log(res.data);\n              lng = res.data.infos[0].F_Lng;\n              lat = res.data.infos[0].F_Lat;\n              face = res.data.infos[0].F_IfFace;\n              location = res.data.infos[0].F_IfLocation;\n          }\n      })\n      //判断是否已经报过名\n      wx.request({\n          url: config.url + '/activity/haveApply',\n          data:{\n              'userId': app.globalData.user_id,\n              'activityId':activityId\n          },\n          method:'POST',\n          success: function(res){\n              console.log(res.data)\n              if(res.data.code){\n                  haveApplyed = true;\n                  that.setData({\n                      apply_msg:'点击打卡'\n                  })\n              }\n          }\n      })\n  },\n\n  /**\n   * 生命周期函数--监听页面初次渲染完成\n   */\n  onReady: function () {\n  \n  },\n\n  /**\n   * 生命周期函数--监听页面显示\n   */\n  onShow: function () {\n  \n  },\n\n  /**\n   * 生命周期函数--监听页面隐藏\n   */\n  onHide: function () {\n  \n  },\n\n  /**\n   * 生命周期函数--监听页面卸载\n   */\n  onUnload: function () {\n  \n  },\n\n  /**\n   * 页面相关事件处理函数--监听用户下拉动作\n   */\n  onPullDownRefresh: function () {\n  \n  },\n\n  /**\n   * 页面上拉触底事件的处理函数\n   */\n  onReachBottom: function () {\n  \n  },\n\n  /**\n   * 用户点击右上角分享\n   */\n  onShareAppMessage: function () {\n  \n  },\n  getActivity_detail: function(){\n      console.log('detail clicked')\n      var that = this;\n      var temp = that.data.detail_show;\n      that.setData({\n          detail_show:!temp\n      })\n  },\n  getCheckDate: function(){\n      var that = this;\n      var temp = that.data.show_date;\n      that.setData({\n          show_date:!temp\n      })\n\n  },\n  /**\n   * 点击具体的时期时触发操作\n   * 2018-02-26\n   */\n  getDetailedCheck:function(e){\n      var that = this;\n      var date = e.currentTarget.dataset.date;\n    //   console.log(date);\n      var temp = that.data.date_info_hidden;\n      wx.request({\n          url: config.url + '/check/details/date',\n          method:'POST',\n          data:{\n              'activityId': activity_id,\n              'checkDate':date\n          },\n          success:function(res){\n              that.setData({\n                  check_date_info:res.data.details,\n                  date_info_hidden :!temp\n              })\n              console.log(!temp,res.data.details);\n              \n          }\n      })\n  },\n  submitCheck:function(){\n      if(haveApplyed){\n          console.log(activity_id);\n          wx.redirectTo({\n              url: '../checkIn/checkIn?lat=' + lat + '&lng=' + lng +'&activityId=' + activity_id\n              +'&face='+ face +'&location='+location\n          })\n      }else{\n          wx.request({\n              url:config.url + '/activity/apply',\n              method:'POST',\n              data:{\n                  'activityId':activity_id,\n                  'userId':app.globalData.user_id\n              },\n              success: function(res){\n                  wx.showToast({\n                      title: '报名成功',\n                  })\n              }\n\n          })\n          wx.switchTab({\n              url: '../manage/manage'\n          })\n      }\n  }\n\n\n})"
  },
  {
    "path": "client/pages/detail/detail.json",
    "content": "{}"
  },
  {
    "path": "client/pages/detail/detail.wxml",
    "content": "<view class=\"page\">\n    <view class=\"page_detail_hd\">\n        <view class=\"page_detail_title\">{{activity_info.infos[0].F_Caption}}</view>\n    </view>\n    <view class=\"weui-cell\" bindtap='getActivity_detail'>\n        <view class=\"weui-cell__hd\">\n            <image class='cell_image' src='../../image/right.png'></image>\n            <view class=\"weui-label label_head\">活动详情</view>\n        </view>\n    </view>\n    <view class=\"weui-cell desc_content\" hidden='{{!detail_show}}'>\n        <view class=\"weui-cell__bd\">\n            <view>发起人： {{activity_info.infos[0].F_CreaterName}}</view>\n            <view>活动开始时间： {{activity_info.infos[0].F_StartDate}}</view>\n            <view>活动结束时间： {{activity_info.infos[0].F_EndDate}}</view>\n            <view>活动地点： {{activity_info.infos[0].F_Location}}</view>\n            <view>简介： {{activity_info.infos[0].F_Desc}}</view>\n        </view>\n    </view>\n\n    <view class=\"weui-cell\">\n        <view class=\"weui-cell__hd\">\n            <image class='cell_image' src='../../image/right.png'></image>\n            <view class=\"weui-label label_head\">已有{{activity_info.nums}}人报名</view>\n        </view>\n    </view>\n    <view class=\"weui-cell\" bindtap='getCheckDate'>\n        <view class=\"weui-cell__hd\">\n            <image class='cell_image' src='../../image/right.png'></image>\n            <view class=\"weui-label label_head\">打卡记录</view>\n        </view>\n    </view>\n\n    <block wx:for='{{detail_info.dates}}'>\n        <view class=\"weui-cell\" hidden='{{show_date}}'>\n            <view class=\"weui-cell__hd\" bindtap='getDetailedCheck' data-date='{{item.F_CheckDate}}'>\n                <image class='cell_image' src='../../image/right.png'></image>\n                <view class=\"weui-label label_head\">{{item.F_CheckDate}}</view>\n            </view>\n        </view>\n    </block>\n\n     <view hidden='{{date_info_hidden}}'>\n        <block wx:for='{{check_date_info}}'>\n            <view class=\"weui-cell__bd\">\n                <view class='label_name'>\n                    {{item.F_UserName}}\n                </view>\n                <image class='check_image' src='{{item.F_CheckPhotoUrl}}'></image>\n            </view>\n        </block>\n    </view> \n    <view class=\"button-sp-area\">\n        <button class=\"weui-btn\" type=\"primary\" bindtap='submitCheck'>{{apply_msg}}</button>\n    </view>\n</view>"
  },
  {
    "path": "client/pages/detail/detail.wxss",
    "content": ".page_detail_hd {\n    padding: 20rpx;\n}\n.page_detail_title{\n    font-size: 20px;\n    text-align: center;\n    height: 400;\n}\n.cell_image {\n    width: 16px;\n    height: 16px;\n}\n.cell_image_sm{\n    width: 14px;\n    height: 14px;\n}\n.label_head {\n    display: inline\n}\n\n.label_name {\n    margin-left:50rpx;\n}\n.check_image{\n    padding-left:50rpx;\n}\n\n.desc_content {\n    width: 90%;\n    float: right;\n}\n.check_content_date {\n    width: 90%;\n    float: right;\n}\n.check_content_detail {\n    width: 80%;\n    float: right;\n}\n.check_image {\n    padding: 0;\n    margin: 0;\n    width: 240px;\n    height: 180px;\n    display: block\n}\n.button-sp-area{\n    margin: 0 auto;\n    padding-top: 15px;\n    width: 80%;\n}\n.check_item {\n    width: 100%;\n    margin: 0 auto;\n    display: block;\n}"
  },
  {
    "path": "client/pages/logs/logs.js",
    "content": "//logs.js\nconst util = require('../../utils/util.js')\n\nPage({\n  data: {\n    logs: []\n  },\n  onLoad: function () {\n    this.setData({\n      logs: (wx.getStorageSync('logs') || []).map(log => {\n        return util.formatTime(new Date(log))\n      })\n    })\n  }\n})\n"
  },
  {
    "path": "client/pages/logs/logs.json",
    "content": "{\n  \"navigationBarTitleText\": \"查看启动日志\"\n}"
  },
  {
    "path": "client/pages/logs/logs.wxml",
    "content": "<!--logs.wxml-->\n<view class=\"container log-list\">\n  <block wx:for=\"{{logs}}\" wx:for-item=\"log\">\n    <text class=\"log-item\">{{index + 1}}. {{log}}</text>\n  </block>\n</view>\n"
  },
  {
    "path": "client/pages/logs/logs.wxss",
    "content": ".log-list {\n  display: flex;\n  flex-direction: column;\n  padding: 40rpx;\n}\n.log-item {\n  margin: 10rpx;\n}\n"
  },
  {
    "path": "client/pages/manage/manage.js",
    "content": "var sliderWidth = 96; // 需要设置slider的宽度，用于计算中间位置\nvar config = require('../../config.js');\nvar app = getApp();\n\nPage({\n    data: {\n        tabs: [\"进行中\", \"已结束\"],\n        activeIndex: 1,\n        sliderOffset: 0,\n        sliderLeft: 0,\n        completed: [],\n        processing: []\n    },\n    onLoad: function () {\n        var that = this;\n        wx.getSystemInfo({\n            success: function (res) {\n                that.setData({\n                    sliderLeft: (res.windowWidth / that.data.tabs.length - sliderWidth) / 2,\n                    sliderOffset: res.windowWidth / that.data.tabs.length * that.data.activeIndex\n                });\n            }\n        });\n    },\n    onShow: function () {\n        var that = this;\n        wx.request({\n            url: config.url + '/activity/getall',\n            data:{\n                'userId':app.globalData.user_id\n            },\n            method: 'POST',\n            success: function (res) {\n                console.log(res.data);\n                that.setData({\n                    completed: res.data.completed,\n                    processing: res.data.processing\n                });\n            }\n        })\n    },\n    tabClick: function (e) {\n        this.setData({\n            sliderOffset: e.currentTarget.offsetLeft,\n            activeIndex: e.currentTarget.id\n        });\n    }\n});"
  },
  {
    "path": "client/pages/manage/manage.json",
    "content": "{}"
  },
  {
    "path": "client/pages/manage/manage.wxml",
    "content": "<view class=\"page\">\n    <view class=\"page__bd\">\n        <view class=\"weui-tab\">\n            <view class=\"weui-navbar\">\n                <block wx:for=\"{{tabs}}\" wx:key=\"*this\">\n                    <view id=\"{{index}}\" class=\"weui-navbar__item {{activeIndex == index ? 'weui-bar__item_on' : ''}}\" bindtap=\"tabClick\">\n                        <view class=\"weui-navbar__title\">{{item}}</view>\n                    </view>\n                </block>\n                <view class=\"weui-navbar__slider\" style=\"left: {{sliderLeft}}px; transform: translateX({{sliderOffset}}px); -webkit-transform: translateX({{sliderOffset}}px);\"></view>\n            </view>\n            <view class=\"weui-tab__panel\">\n                <view class=\"weui-tab__content\" hidden=\"{{activeIndex != 0}}\">\n                    <view class=\"weui-panel weui-panel_access\">\n                        <view class=\"weui-panel__bd\">\n                            <block wx:for=\"{{processing}}\">\n                                <navigator url='../detail/detail?activity_id={{item.F_ID}}' open-type='navigate'>\n                                    <view class=\"weui-media-box weui-media-box_text\">\n                                        <view class=\"weui-media-box__title weui-media-box__title_in-text\">{{item.F_Caption}}</view>\n                                        <view class=\"weui-media-box__desc\">{{item.F_StartDate}}——{{item.F_EndDate}}</view>\n                                        <view class=\"weui-media-box__desc\">{{item.F_Location}}</view>\n                                        <view class=\"weui-media-box__desc\">今日已打卡</view>\n                                    </view>\n                                </navigator>\n                            </block>\n                        </view>\n                    </view>\n                </view>\n                <view class=\"weui-tab__content\" hidden=\"{{activeIndex != 1}}\">\n                    <view class=\"weui-panel weui-panel_access\">\n                        <view class=\"weui-panel__bd\">\n                            <block wx:for=\"{{completed}}\">\n                                <view class=\"weui-media-box weui-media-box_text\">\n                                    <view class=\"weui-media-box__title weui-media-box__title_in-text\">{{item.F_Caption}}</view>\n                                    <view class=\"weui-media-box__desc\">{{item.F_StartDate}}——{{item.F_EndDate}}</view>\n                                    <view class=\"weui-media-box__desc\">{{item.F_Location}}</view>\n                                    <view class=\"weui-media-box__desc\">打卡1次</view>\n                                </view>\n                            </block>\n                        </view>\n                    </view>\n                </view>\n            </view>\n        </view>\n    </view>\n</view>"
  },
  {
    "path": "client/pages/manage/manage.wxss",
    "content": "page,\n.page,\n.page__bd{\n    height: 100%;\n}\n.page__bd{\n    padding-bottom: 0;\n}\n.weui-media-box__desc {\n  padding-bottom: 8rpx;\n}"
  },
  {
    "path": "client/pages/new/new.js",
    "content": "// pages/new/new.js\nvar location = \"\";\nvar config = require('../../config.js');\nvar app = getApp();\n\nPage({\n\n    /**\n     * 页面的初始数据\n     */\n    data: {\n        start_date: \"2018-01-01\",\n        end_date: \"2018-01-02\",\n        checkboxItems: [\n            { name: '拍照打卡', value: '1', checked: true },\n            { name: '地点打卡', value: '2' },\n            { name: '人脸打卡', value: '3' }\n        ],\n        activity_location: \"\"\n    },\n\n    /**\n     * 生命周期函数--监听页面加载\n     */\n    onLoad: function (options) {\n\n    },\n\n    /**\n     * 生命周期函数--监听页面初次渲染完成\n     */\n    onReady: function () {\n\n    },\n\n    /**\n     * 生命周期函数--监听页面显示\n     */\n    onShow: function () {\n        var that = this;\n        console.log(getApp().data.activity_location);\n        location = getApp().data.activity_location;\n        if (location != \"\") {\n            that.setData({\n                activity_location: location\n            });\n        }\n    },\n\n    /**\n     * 生命周期函数--监听页面隐藏\n     */\n    onHide: function () {\n\n    },\n\n    /**\n     * 生命周期函数--监听页面卸载\n     */\n    onUnload: function () {\n\n    },\n\n    /**\n     * 页面相关事件处理函数--监听用户下拉动作\n     */\n    onPullDownRefresh: function () {\n\n    },\n\n    /**\n     * 页面上拉触底事件的处理函数\n     */\n    onReachBottom: function () {\n\n    },\n\n    /**\n     * 用户点击右上角分享\n     */\n    onShareAppMessage: function () {\n\n    },\n    /**\n     * 选择日期并获取日期\n     */\n    bindStartDateChange: function (e) {\n        this.setData({\n            start_date: e.detail.value\n        });\n        console.log()\n    },\n    bindEndDateChange: function (e) {\n        this.setData({\n            end_date: e.detail.value\n        })\n    },\n\n    checkboxChange: function (e) {\n        console.log('checkbox发生change事件，携带value值为：', e.detail.value);\n        var checkboxItems = this.data.checkboxItems, values = e.detail.value;\n        for (var i = 0, lenI = checkboxItems.length; i < lenI; ++i) {\n            checkboxItems[i].checked = false;\n\n            for (var j = 0, lenJ = values.length; j < lenJ; ++j) {\n                if (checkboxItems[i].value == values[j]) {\n                    checkboxItems[i].checked = true;\n                    break;\n                }\n            }\n        }\n\n        this.setData({\n            checkboxItems: checkboxItems\n        });\n    },\n    getLocation: function () {\n        wx.navigateTo({\n            url: '../addLocation/addLocation',\n        });\n    },\n    \n    formSubmit: function (e) {\n        var ifPhoto = 0;\n        var ifLocation = 0;\n        var ifFace = 0;\n        var value = e.detail.value\n        var types = value.checkin_types;\n        // console.log(types.l);\n        for (var i = 0; i < types.length; i++) {\n            if (types[i] == 1) {\n                ifPhoto = 1;\n            }\n\n            if (types[i] == 2) {\n                ifLocation = 1;\n            }\n            if (types[i] == 3) {\n                ifFace = 1;\n            }\n        }\n        wx.request({\n            url: config.url+'/activity/create',\n            data: {\n                'createrId': app.globalData.user_id,\n                'activity_name': value.activity_name,\n                'activity_desc': value.activity_desc,\n                'location': value.activity_location,\n                'lat': app.data.activity_lat,\n                'lng': app.data.activity_lng,\n                'startDate':value.start_date,\n                'endDate':value.end_date,\n                'ifFace':ifFace,\n                'ifPhoto':ifPhoto,\n                'ifLocation':ifLocation\n            },\n            method:'POST',\n            success:function(res) {\n                // console.log(res.data);\n                wx.switchTab({\n                    url: '/pages/manage/manage'\n                })\n            }\n        })\n\n\n    }\n})"
  },
  {
    "path": "client/pages/new/new.json",
    "content": "{}"
  },
  {
    "path": "client/pages/new/new.wxml",
    "content": "<form bindsubmit='formSubmit'>\n    <view class=\"weui-cell weui-cell_input\">\n        <view class=\"weui-cell__hd\">\n            <view class=\"weui-label\">活动名称</view>\n        </view>\n        <view class=\"weui-cell__bd\">\n            <input name=\"activity_name\" class=\"weui-input\" placeholder=\"请输入活动名称\" />\n        </view>\n    </view>\n    <view class=\"weui-cell\">\n        <view class=\"weui-cell__bd\">\n            <textarea name = \"activity_desc\" class=\"weui-textarea\" placeholder=\"请输入活动简介\" style=\"height: 3.3em\" />\n            <view class=\"weui-textarea-counter\">0/200</view>\n        </view>\n    </view>\n\n    <view class=\"weui-cell weui-cell_input\">\n        <view class=\"weui-cell__hd\">\n            <view class=\"weui-label\">起止日期</view>\n        </view>\n        <view class=\"weui-cell__bd\">\n            <picker name=\"start_date\" mode=\"date\" value=\"{{start_date}}\" start=\"2018-01-01\" end=\"2019-09-01\" bindchange=\"bindStartDateChange\">\n                <view class=\"weui-input\">{{start_date}}</view>\n            </picker>\n        </view>\n        <view class=\"weui-cell__bd\">\n            <picker name='end_date' mode=\"date\" value=\"{{end_date}}\" start=\"2018-01-02\" end=\"2019-09-02\" bindchange=\"bindEndDateChange\">\n                <view class=\"weui-input\">{{end_date}}</view>\n            </picker>\n        </view>\n    </view>\n\n    <view class=\"weui-cell weui-cell_input weui-cell_vcode\">\n        <view class=\"weui-cell__hd\">\n            <view class=\"weui-label\">活动地点</view>\n        </view>\n        <view class=\"weui-cell__bd\">\n            <input name='activity_location' class=\"weui-input\" placeholder=\"点击获取地点\" value='{{activity_location}}' disabled='true' />\n        </view>\n        <view class=\"weui-cell__ft\">\n            <view class=\"weui-vcode-btn\" bindtap=\"getLocation\">获取地点</view>\n        </view>\n    </view>\n\n    <view class=\"weui-cells weui-cells_after-title\">\n        <checkbox-group name= 'checkin_types' bindchange=\"checkboxChange\">\n            <label class=\"weui-cell weui-check__label\" wx:for=\"{{checkboxItems}}\" wx:key=\"value\">\n                <checkbox class=\"weui-check\" value=\"{{item.value}}\" checked=\"{{item.checked}}\" />\n\n                <view class=\"weui-cell__hd weui-check__hd_in-checkbox\">\n                    <icon class=\"weui-icon-checkbox_circle\" type=\"circle\" size=\"23\" wx:if=\"{{!item.checked}}\"></icon>\n                    <icon class=\"weui-icon-checkbox_success\" type=\"success\" size=\"23\" wx:if=\"{{item.checked}}\"></icon>\n                </view>\n                <view class=\"weui-cell__bd\">{{item.name}}</view>\n            </label>\n        </checkbox-group>\n    </view>\n\n    <view class=\"weui-btn-area\">\n        <button class=\"weui-btn btn-green\" form-type='submit'>确定</button>\n    </view>\n</form>"
  },
  {
    "path": "client/pages/new/new.wxss",
    "content": ".weui-btn.btn-green {\n    background-color: \"#2ba245\";\n}"
  },
  {
    "path": "client/pages/search/search.js",
    "content": "/**\n * TODO:onload中加载所有正在进行的活动，在Typing中进行过滤，不用一遍一遍查询服务器\n */\nvar config = require('../../config.js');\nPage({\n    data: {\n        inputShowed: false,\n        inputVal: \"\",\n        processing:[]\n    },\n    showInput: function () {\n        this.setData({\n            inputShowed: true\n        });\n    },\n    hideInput: function () {\n        this.setData({\n            inputVal: \"\",\n            inputShowed: false\n        });\n    },\n    clearInput: function () {\n        this.setData({\n            inputVal: \"\"\n        });\n    },\n    inputTyping: function (e) {\n        var that = this;\n        that.setData({\n            inputVal: e.detail.value\n        });\n        wx.request({\n            url: config.url + '/activity/like',\n            method: 'POST',\n            data:{\n                'str': e.detail.value\n            },\n            success: function (res) {\n                that.setData({\n                    processing: res.data.processing\n                });\n            }\n        })\n    },\n    /**\n     * 生命周期函数--监听页面加载\n     */\n    onLoad: function (options) {\n        // var that = this;\n        // wx.request({\n        //     url: config.url + '/activity/getall',\n        //     method: 'POST',\n        //     success: function (res) {\n        //         that.setData({\n        //             processing: res.data.processing\n        //         });\n        //     }\n        // })\n    },\n});"
  },
  {
    "path": "client/pages/search/search.json",
    "content": "{}"
  },
  {
    "path": "client/pages/search/search.wxml",
    "content": "<view class=\"page\">\n\n    <view class=\"page__bd\">\n        <view class=\"weui-search-bar\">\n            <view class=\"weui-search-bar__form\">\n                <view class=\"weui-search-bar__box\">\n                    <icon class=\"weui-icon-search_in-box\" type=\"search\" size=\"14\"></icon>\n                    <input type=\"text\" class=\"weui-search-bar__input\" placeholder=\"搜索\" value=\"{{inputVal}}\" focus=\"{{inputShowed}}\" bindinput=\"inputTyping\" />\n                    <view class=\"weui-icon-clear\" wx:if=\"{{inputVal.length > 0}}\" bindtap=\"clearInput\">\n                        <icon type=\"clear\" size=\"14\"></icon>\n                    </view>\n                </view>\n                <label class=\"weui-search-bar__label\" hidden=\"{{inputShowed}}\" bindtap=\"showInput\">\n                    <icon class=\"weui-icon-search\" type=\"search\" size=\"14\"></icon>\n                    <view class=\"weui-search-bar__text\">搜索</view>\n                </label>\n            </view>\n            <view class=\"weui-search-bar__cancel-btn\" hidden=\"{{!inputShowed}}\" bindtap=\"hideInput\">取消</view>\n        </view>\n        <view class=\"weui-cells searchbar-result\" wx:if=\"{{inputVal.length > 0}}\">\n            <block wx:for='{{processing}}'>\n                <navigator url=\"../detail/detail?activity_id={{item.F_ID}}\" class=\"weui-cell\" hover-class=\"weui-cell_active\">\n                    <view class=\"weui-cell__bd\">\n                        <view class='search_title'>{{item.F_Caption}}</view>\n                        <view class='search_desc'>{{item.F_Location}}</view>\n                    </view>\n                </navigator>\n            </block>\n        </view>\n    </view>\n</view>"
  },
  {
    "path": "client/pages/search/search.wxss",
    "content": ".searchbar-result{\n    margin-top: 0;\n    font-size: 14px;\n}\n.searchbar-result:before{\n    display: none;\n}\n.weui-cell{\n    padding: 12px 15px 12px 35px;\n}\n.search_title {\n    font-size: 15px;\n    color: '#fff'\n}\n.search_desc{\n    font-size: 10px;\n    color: '#eee'\n}"
  },
  {
    "path": "client/pages/searchDetail/searchDetail.js",
    "content": "var QQMapWX = require('../../libs/qqmap-wx-jssdk.js');\n//key:腾讯地图的key\nvar demo = new QQMapWX({\n    key:''\n});\nPage({\n    data: {\n        inputShowed: false,\n        inputVal: \"\",\n        result:[]\n    },\n    showInput: function () {\n        this.setData({\n            inputShowed: true\n        });\n    },\n    hideInput: function () {\n        this.setData({\n            inputVal: \"\",\n            inputShowed: false\n        });\n    },\n    clearInput: function () {\n        this.setData({\n            inputVal: \"\"\n        });\n    },\n    /**\n     * 当每次输入框更改的时候触发此函数\n     */\n    inputTyping: function (e) {\n        var that = this;\n        that.setData({\n            inputVal: e.detail.value\n        });\n        demo.getSuggestion({\n            keyword: e.detail.value,\n            region:'常州市',\n            success:function(res){\n                if(res.status == 0){\n                    that.setData({\n                        result:res.data\n                    })\n                }\n            },\n            fail: function (res) {\n                console.log(res);\n            },\n            complete: function (res) {\n                console.log(res);\n            }\n        });\n    }\n});"
  },
  {
    "path": "client/pages/searchDetail/searchDetail.json",
    "content": "{}"
  },
  {
    "path": "client/pages/searchDetail/searchDetail.wxml",
    "content": "<view class=\"page\">\n    <view class=\"page__bd\">\n        <view class=\"weui-search-bar\">\n            <view class=\"weui-search-bar__form\">\n                <view class=\"weui-search-bar__box\">\n                    <icon class=\"weui-icon-search_in-box\" type=\"search\" size=\"14\"></icon>\n                    <input type=\"text\" class=\"weui-search-bar__input\" placeholder=\"搜索\" value=\"{{inputVal}}\" focus=\"{{inputShowed}}\" bindinput=\"inputTyping\" />\n                    <view class=\"weui-icon-clear\" wx:if=\"{{inputVal.length > 0}}\" bindtap=\"clearInput\">\n                        <icon type=\"clear\" size=\"14\"></icon>\n                    </view>\n                </view>\n                <label class=\"weui-search-bar__label\" hidden=\"{{inputShowed}}\" bindtap=\"showInput\">\n                    <icon class=\"weui-icon-search\" type=\"search\" size=\"14\"></icon>\n                    <view class=\"weui-search-bar__text\">搜索</view>\n                </label>\n            </view>\n            <view class=\"weui-search-bar__cancel-btn\" hidden=\"{{!inputShowed}}\" bindtap=\"hideInput\">取消</view>\n        </view>\n        <view class=\"weui-cells searchbar-result\" wx:if=\"{{inputVal.length > 0}}\">\n            <block wx:for=\"{{result}}\">\n                <navigator url=\"../addLocation/addLocation?lat={{item.location.lat}}&lng={{item.location.lng}}&title={{item.title}}\" class=\"weui-cell\" hover-class=\"weui-cell_active\" open-type='redirect'>\n                    <view class=\"weui-cell__bd\">\n                        <view>{{item.title}}</view>\n                    </view>\n                </navigator>\n            </block>\n        </view>\n    </view>\n</view>"
  },
  {
    "path": "client/pages/searchDetail/searchDetail.wxss",
    "content": ".searchbar-result{\n    margin-top: 0;\n    font-size: 14px;\n}\n.searchbar-result:before{\n    display: none;\n}\n.weui-cell{\n    padding: 12px 15px 12px 35px;\n}"
  },
  {
    "path": "client/pages/user/user.js",
    "content": "// pages/user/user.js\nvar uploadFn = require('../../utils/upload.js');\nvar config = require('../../config.js');\nconst app = getApp();\nPage({\n\n    /**\n     * 页面的初始数据\n     */\n    data: {\n        user_name: \"张三\",\n        user_city: \"常州\",\n        // 此时头像的照片是静态的\n        avator_path: \"../../image/avator.jpg\",\n        userInfo: {},\n        hasUserInfo: false,\n        canIUse: wx.canIUse('button.open-type.getUserInfo')\n    },\n\n    /**\n     * 生命周期函数--监听页面加载\n     */\n    onLoad: function () {\n        if (app.globalData.userInfo) {\n            this.setData({\n                userInfo: app.globalData.userInfo,\n                hasUserInfo: true,\n                avator_path: app.globalData.avator_url\n            });\n        } else if (this.data.canIUse) {\n            // 由于 getUserInfo 是网络请求，可能会在 Page.onLoad 之后才返回\n            // 所以此处加入 callback 以防止这种情况\n            app.userInfoReadyCallback = res => {\n                this.setData({\n                    userInfo: res.userInfo,\n                    hasUserInfo: true,\n                    avator_path: app.globalData.avator_url\n                })\n            }\n        } else {\n            // 在没有 open-type=getUserInfo 版本的兼容处理\n            wx.getUserInfo({\n                success: res => {\n                    app.globalData.userInfo = res.userInfo\n                    this.setData({\n                        userInfo: res.userInfo,\n                        hasUserInfo: true,\n                        avator_path: app.globalData.avator_url\n                    })\n                }\n            })\n        }\n    },\n\n    /**\n     * 生命周期函数--监听页面初次渲染完成\n     */\n    onReady: function () {\n\n    },\n\n    /**\n     * 生命周期函数--监听页面显示\n     */\n    onShow: function () {\n\n    },\n\n    /**\n     * 生命周期函数--监听页面隐藏\n     */\n    onHide: function () {\n\n    },\n\n    /**\n     * 生命周期函数--监听页面卸载\n     */\n    onUnload: function () {\n\n    },\n\n    /**\n     * 页面相关事件处理函数--监听用户下拉动作\n     */\n    onPullDownRefresh: function () {\n\n    },\n\n    /**\n     * 页面上拉触底事件的处理函数\n     */\n    onReachBottom: function () {\n\n    },\n\n    /**\n     * 用户点击右上角分享\n     */\n    onShareAppMessage: function () {\n\n    },\n    changeAvator: function () {\n        var me = this;\n        wx.chooseImage({\n            success: function (res) {\n                var filePath = res.tempFilePaths[0];\n                console.log(filePath);\n                // var fileName = filePath.match(/http.{7}(.*)/);\n                //fileName = fileName[1];\n                var fileName = Date.parse(new Date())+'.jpg';\n                console.log(fileName);\n                uploadFn(filePath, fileName, me,function(avator_url){\n                    wx.request({\n                        url: config.url + '/person/update',\n                        data:{\n                            'user_id': app.globalData.user_id,\n                            'avator_url': avator_url\n                        },\n                        method: 'POST',\n                        success: function(res) {\n                            console.log(res.data);\n                            app.globalData.avator_url = avator_url;\n                        }\n                    })\n                });\n            },\n        })\n    }\n})"
  },
  {
    "path": "client/pages/user/user.json",
    "content": "{}"
  },
  {
    "path": "client/pages/user/user.wxml",
    "content": "<view class='container'>\n  <image src='{{avator_path}}' class='avator' mode='aspectFill'></image>\n</view>\n<view class='user-info'>\n  <view class='item'>\n    <text>姓名：</text>\n    <text>{{ userInfo.nickName }}</text>\n  </view>\n  <view class='item'>\n    <text>城市：</text>\n    <text>{{ userInfo.city }}</text>\n  </view>\n</view>\n<view class='update-info'>\n  <button class=\"weui-btn\" type=\"primary\" bindtap='changeAvator'>更改信息</button>\n</view>\n"
  },
  {
    "path": "client/pages/user/user.wxss",
    "content": "\n.container {\n  height: 100%;\n}\n.avator {\n  margin-top: 100rpx;\n}\n.user-info{\n  padding-top: 50rpx;\n  margin-left: 250rpx;\n}\n.user-info .item {\n  padding-bottom: 20rpx;\n}\n.item text {\n  padding-left: 5rpx;\n}\n.update-info {\n  margin: 0 auto;\n  width: 60%;\n}"
  },
  {
    "path": "client/project.config.json",
    "content": "{\n\t\"description\": \"项目配置文件。\",\n\t\"setting\": {\n\t\t\"urlCheck\": false,\n\t\t\"es6\": true,\n\t\t\"postcss\": true,\n\t\t\"minified\": true,\n\t\t\"newFeature\": true\n\t},\n\t\"compileType\": \"miniprogram\",\n\t\"libVersion\": \"1.7.2\",\n\t\"appid\": \"wx690dcd5ab42b7e2c\",\n\t\"projectname\": \"checkin\",\n\t\"condition\": {\n\t\t\"search\": {\n\t\t\t\"current\": -1,\n\t\t\t\"list\": []\n\t\t},\n\t\t\"conversation\": {\n\t\t\t\"current\": -1,\n\t\t\t\"list\": []\n\t\t},\n\t\t\"miniprogram\": {\n\t\t\t\"current\": -1,\n\t\t\t\"list\": []\n\t\t}\n\t}\n}"
  },
  {
    "path": "client/utils/getdistance.js",
    "content": "var PI = Math.PI;\nvar EARTH_RADIUS = 6378137.0;\n\nfunction getRad(d) {\n    return d * PI / 180.0;\n}\n\n// (113.52911321166994,22.802929526649727,113.52804032806398,22.803246016075406)\n// lat1,lng1,lat2,lng2\nfunction distance(p1,p2,callback) {\n    console.log(p1,p2);\n    var f = getRad((p1.lat + p2.lat) / 2);\n    var g = getRad((p1.lat - p2.lat) / 2);\n    var l = getRad((p1.lng - p2.lng) / 2);\n    var sg = Math.sin(g);\n    var sl = Math.sin(l);\n    var sf = Math.sin(f);\n    var s, c, w, r, d, h1, h2;\n    var a = EARTH_RADIUS;\n    var fl = 1 / 298.257;\n    sg = sg * sg;\n    sl = sl * sl;\n    sf = sf * sf;\n    s = sg * (1 - sl) + (1 - sf) * sl;\n    c = (1 - sg) * (1 - sl) + sf * sl;\n    w = Math.atan(Math.sqrt(s / c));\n    r = Math.sqrt(s * c) / w;\n    d = 2 * w * a;\n    h1 = (3 * r - 1) / 2 / c;\n    h2 = (3 * r + 1) / 2 / s;\n    var dis = d * (1 + fl * (h1 * sf * (1 - sg) - h2 * (1 - sf) * sg));\n    console.log(dis); \n}\nmodule.exports = distance"
  },
  {
    "path": "client/utils/upload.js",
    "content": "/**\n * 最终上传到cos的URL\n * 把以下字段配置成自己的cos相关信息，详情可看API文档 https://www.qcloud.com/document/product/436/6066\n * REGION: cos上传的地区\n * APPID: 账号的appid\n * BUCKET_NAME: cos bucket的名字\n * DIR_NAME: 上传的文件目录\n * \n */\nvar config = require('../config.js');\nvar cosUrl = \"http://\" + config.cosRegion + \".file.myqcloud.com/files/v2/\" + config.cosAPPID + \"/\" + config.cosBucketName +'/' + config.cosDirName;\n\n//填写自己的鉴权服务器地址\nvar cosSignatureUrl = config.cosSignatureUrl;\n\n/**\n * 上传方法\n * filePath: 上传的文件路径\n * fileName： 上传到cos后的文件名\n */\nfunction upload(filePath, fileName, me,callback) {\n    // console.log(cosUrl+ '/' + fileName)\n\n    // 鉴权获取签名\n    wx.request({\n        url: cosSignatureUrl,\n        success: function(cosRes) {\n\n            // 签名\n            var signature = cosRes.data\n\n            // 头部带上签名，上传文件至COS\n            wx.uploadFile({\n                url: cosUrl + '/' + fileName,\n                filePath: filePath,\n                header: {\n                    'Authorization': signature\n                },\n                name: 'filecontent',\n                formData: {\n                    op: 'upload'\n                },\n                success: function(uploadRes){\n                    // var data = uploadRes.data;\n                    // console.log('uploadRes', uploadRes.)\n                    //do something\n                    // me.setData({\n                    //     avator_path: data.data.source_url\n                    // });\n                    // console.log(me.data);\n                    var upload_res = JSON.parse(uploadRes.data)\n                    me.setData({\n                        avator_path:upload_res.data.source_url\n                    })\n                    callback(upload_res.data.source_url)\n                    \n                },\n                fail: function(e) {\n                    console.log('e', e)\n                }\n            })\n        }\n    })\n}\n\nmodule.exports = upload"
  },
  {
    "path": "client/utils/util.js",
    "content": "const formatTime = date => {\n  const year = date.getFullYear()\n  const month = date.getMonth() + 1\n  const day = date.getDate()\n  const hour = date.getHours()\n  const minute = date.getMinutes()\n  const second = date.getSeconds()\n\n  return [year, month, day].map(formatNumber).join('/') + ' ' + [hour, minute, second].map(formatNumber).join(':')\n}\n\nconst formatNumber = n => {\n  n = n.toString()\n  return n[1] ? n : '0' + n\n}\n\nmodule.exports = {\n  formatTime: formatTime\n}\n"
  },
  {
    "path": "server/checkin/.idea/checkin.iml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<module type=\"WEB_MODULE\" version=\"4\">\n  <component name=\"NewModuleRootManager\">\n    <content url=\"file://$MODULE_DIR$\">\n      <excludeFolder url=\"file://$MODULE_DIR$/.tmp\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/temp\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/tmp\" />\n    </content>\n    <orderEntry type=\"inheritedJdk\" />\n    <orderEntry type=\"sourceFolder\" forTests=\"false\" />\n  </component>\n</module>"
  },
  {
    "path": "server/checkin/.idea/jsLibraryMappings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"JavaScriptLibraryMappings\">\n    <includedPredefinedLibrary name=\"Node.js Core\" />\n  </component>\n</project>"
  },
  {
    "path": "server/checkin/.idea/modules.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"ProjectModuleManager\">\n    <modules>\n      <module fileurl=\"file://$PROJECT_DIR$/.idea/checkin.iml\" filepath=\"$PROJECT_DIR$/.idea/checkin.iml\" />\n    </modules>\n  </component>\n</project>"
  },
  {
    "path": "server/checkin/.idea/runConfigurations/bin_www.xml",
    "content": "<component name=\"ProjectRunConfigurationManager\">\n  <configuration default=\"false\" name=\"bin\\www\" type=\"NodeJSConfigurationType\" factoryName=\"Node.js\" path-to-js-file=\"bin/www\" working-dir=\"$PROJECT_DIR$\">\n    <envs>\n      <env name=\"DEBUG\" value=\"checkin:*\" />\n    </envs>\n    <EXTENSION ID=\"com.jetbrains.nodejs.run.NodeJSStartBrowserRunConfigurationExtension\">\n      <browser url=\"http://localhost:3000/\" />\n    </EXTENSION>\n    <method />\n  </configuration>\n</component>"
  },
  {
    "path": "server/checkin/.idea/workspace.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"ChangeListManager\">\n    <list default=\"true\" id=\"55ffb1ce-351b-45eb-b182-57dd08cec958\" name=\"Default\" comment=\"\" />\n    <ignored path=\"$PROJECT_DIR$/.tmp/\" />\n    <ignored path=\"$PROJECT_DIR$/temp/\" />\n    <ignored path=\"$PROJECT_DIR$/tmp/\" />\n    <option name=\"EXCLUDED_CONVERTED_TO_IGNORED\" value=\"true\" />\n    <option name=\"TRACKING_ENABLED\" value=\"true\" />\n    <option name=\"SHOW_DIALOG\" value=\"false\" />\n    <option name=\"HIGHLIGHT_CONFLICTS\" value=\"true\" />\n    <option name=\"HIGHLIGHT_NON_ACTIVE_CHANGELIST\" value=\"false\" />\n    <option name=\"LAST_RESOLUTION\" value=\"IGNORE\" />\n  </component>\n  <component name=\"FileEditorManager\">\n    <leaf SIDE_TABS_SIZE_LIMIT_KEY=\"300\">\n      <file leaf-file-name=\"activity.js\" pinned=\"false\" current-in-tab=\"false\">\n        <entry file=\"file://$PROJECT_DIR$/routes/activity.js\">\n          <provider selected=\"true\" editor-type-id=\"text-editor\">\n            <state relative-caret-position=\"1394\">\n              <caret line=\"82\" column=\"3\" lean-forward=\"false\" selection-start-line=\"59\" selection-start-column=\"0\" selection-end-line=\"82\" selection-end-column=\"3\" />\n              <folding />\n            </state>\n          </provider>\n        </entry>\n      </file>\n      <file leaf-file-name=\"activity.js\" pinned=\"false\" current-in-tab=\"false\">\n        <entry file=\"file://$PROJECT_DIR$/models/activity.js\">\n          <provider selected=\"true\" editor-type-id=\"text-editor\">\n            <state relative-caret-position=\"187\">\n              <caret line=\"11\" column=\"19\" lean-forward=\"false\" selection-start-line=\"11\" selection-start-column=\"19\" selection-end-line=\"11\" selection-end-column=\"19\" />\n              <folding />\n            </state>\n          </provider>\n        </entry>\n      </file>\n      <file leaf-file-name=\"person.js\" pinned=\"false\" current-in-tab=\"false\">\n        <entry file=\"file://$PROJECT_DIR$/models/person.js\">\n          <provider selected=\"true\" editor-type-id=\"text-editor\">\n            <state relative-caret-position=\"374\">\n              <caret line=\"22\" column=\"6\" lean-forward=\"false\" selection-start-line=\"22\" selection-start-column=\"6\" selection-end-line=\"22\" selection-end-column=\"6\" />\n              <folding />\n            </state>\n          </provider>\n        </entry>\n      </file>\n      <file leaf-file-name=\"check.js\" pinned=\"false\" current-in-tab=\"true\">\n        <entry file=\"file://$PROJECT_DIR$/routes/check.js\">\n          <provider selected=\"true\" editor-type-id=\"text-editor\">\n            <state relative-caret-position=\"859\">\n              <caret line=\"113\" column=\"19\" lean-forward=\"false\" selection-start-line=\"113\" selection-start-column=\"19\" selection-end-line=\"113\" selection-end-column=\"19\" />\n              <folding />\n            </state>\n          </provider>\n        </entry>\n      </file>\n      <file leaf-file-name=\"check.js\" pinned=\"false\" current-in-tab=\"false\">\n        <entry file=\"file://$PROJECT_DIR$/models/check.js\">\n          <provider selected=\"true\" editor-type-id=\"text-editor\">\n            <state relative-caret-position=\"952\">\n              <caret line=\"56\" column=\"24\" lean-forward=\"false\" selection-start-line=\"56\" selection-start-column=\"4\" selection-end-line=\"56\" selection-end-column=\"24\" />\n              <folding />\n            </state>\n          </provider>\n        </entry>\n      </file>\n      <file leaf-file-name=\"apply.js\" pinned=\"false\" current-in-tab=\"false\">\n        <entry file=\"file://$PROJECT_DIR$/models/apply.js\">\n          <provider selected=\"true\" editor-type-id=\"text-editor\">\n            <state relative-caret-position=\"187\">\n              <caret line=\"11\" column=\"4\" lean-forward=\"false\" selection-start-line=\"11\" selection-start-column=\"4\" selection-end-line=\"11\" selection-end-column=\"9\" />\n              <folding />\n            </state>\n          </provider>\n        </entry>\n      </file>\n      <file leaf-file-name=\"person.js\" pinned=\"false\" current-in-tab=\"false\">\n        <entry file=\"file://$PROJECT_DIR$/routes/person.js\">\n          <provider selected=\"true\" editor-type-id=\"text-editor\">\n            <state relative-caret-position=\"1054\">\n              <caret line=\"62\" column=\"7\" lean-forward=\"false\" selection-start-line=\"62\" selection-start-column=\"7\" selection-end-line=\"62\" selection-end-column=\"7\" />\n              <folding />\n            </state>\n          </provider>\n        </entry>\n      </file>\n    </leaf>\n  </component>\n  <component name=\"FileTemplateManagerImpl\">\n    <option name=\"RECENT_TEMPLATES\">\n      <list>\n        <option value=\"JavaScript File\" />\n      </list>\n    </option>\n  </component>\n  <component name=\"IdeDocumentHistory\">\n    <option name=\"CHANGED_PATHS\">\n      <list>\n        <option value=\"$PROJECT_DIR$/routes/user.js\" />\n        <option value=\"$PROJECT_DIR$/app.js\" />\n        <option value=\"$PROJECT_DIR$/models/users.js\" />\n        <option value=\"$PROJECT_DIR$/models/persons.js\" />\n        <option value=\"$PROJECT_DIR$/utils/dbConnection.js\" />\n        <option value=\"$PROJECT_DIR$/package.json\" />\n        <option value=\"$PROJECT_DIR$/routes/person.js\" />\n        <option value=\"$PROJECT_DIR$/configs/config.js\" />\n        <option value=\"$PROJECT_DIR$/models/apply.js\" />\n        <option value=\"$PROJECT_DIR$/models/person.js\" />\n        <option value=\"$PROJECT_DIR$/models/activity.js\" />\n        <option value=\"$PROJECT_DIR$/routes/activity.js\" />\n        <option value=\"$PROJECT_DIR$/models/check.js\" />\n        <option value=\"$PROJECT_DIR$/routes/check.js\" />\n      </list>\n    </option>\n  </component>\n  <component name=\"JsBuildToolGruntFileManager\" detection-done=\"true\" sorting=\"DEFINITION_ORDER\" />\n  <component name=\"JsBuildToolPackageJson\" detection-done=\"true\" sorting=\"DEFINITION_ORDER\">\n    <package-json value=\"$PROJECT_DIR$/package.json\" />\n  </component>\n  <component name=\"JsGulpfileManager\">\n    <detection-done>true</detection-done>\n    <sorting>DEFINITION_ORDER</sorting>\n  </component>\n  <component name=\"NodeModulesDirectoryManager\">\n    <handled-path value=\"$PROJECT_DIR$/node_modules\" />\n  </component>\n  <component name=\"ProjectFrameBounds\" extendedState=\"6\">\n    <option name=\"x\" value=\"755\" />\n    <option name=\"y\" value=\"71\" />\n    <option name=\"width\" value=\"974\" />\n    <option name=\"height\" value=\"1047\" />\n  </component>\n  <component name=\"ProjectView\">\n    <navigator currentView=\"ProjectPane\" proportions=\"\" version=\"1\">\n      <flattenPackages />\n      <showMembers />\n      <showModules />\n      <showLibraryContents />\n      <hideEmptyPackages />\n      <abbreviatePackageNames />\n      <autoscrollToSource />\n      <autoscrollFromSource />\n      <sortByType />\n      <manualOrder />\n      <foldersAlwaysOnTop value=\"true\" />\n    </navigator>\n    <panes>\n      <pane id=\"Scope\" />\n      <pane id=\"ProjectPane\">\n        <subPane>\n          <expand>\n            <path>\n              <item name=\"checkin\" type=\"b2602c69:ProjectViewProjectNode\" />\n              <item name=\"checkin\" type=\"462c0819:PsiDirectoryNode\" />\n            </path>\n            <path>\n              <item name=\"checkin\" type=\"b2602c69:ProjectViewProjectNode\" />\n              <item name=\"checkin\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"models\" type=\"462c0819:PsiDirectoryNode\" />\n            </path>\n            <path>\n              <item name=\"checkin\" type=\"b2602c69:ProjectViewProjectNode\" />\n              <item name=\"checkin\" type=\"462c0819:PsiDirectoryNode\" />\n              <item name=\"routes\" type=\"462c0819:PsiDirectoryNode\" />\n            </path>\n          </expand>\n          <select />\n        </subPane>\n      </pane>\n      <pane id=\"Scratches\" />\n    </panes>\n  </component>\n  <component name=\"PropertiesComponent\">\n    <property name=\"WebServerToolWindowFactoryState\" value=\"false\" />\n    <property name=\"nodejs_interpreter_path\" value=\"node\" />\n    <property name=\"javascript.nodejs.core.library.configured.version\" value=\"8.9.1\" />\n    <property name=\"HbShouldOpenHtmlAsHb\" value=\"\" />\n    <property name=\"restartRequiresConfirmation\" value=\"false\" />\n  </component>\n  <component name=\"RunDashboard\">\n    <option name=\"ruleStates\">\n      <list>\n        <RuleState>\n          <option name=\"name\" value=\"ConfigurationTypeDashboardGroupingRule\" />\n        </RuleState>\n        <RuleState>\n          <option name=\"name\" value=\"StatusDashboardGroupingRule\" />\n        </RuleState>\n      </list>\n    </option>\n  </component>\n  <component name=\"ShelveChangesManager\" show_recycled=\"false\">\n    <option name=\"remove_strategy\" value=\"false\" />\n  </component>\n  <component name=\"SvnConfiguration\">\n    <configuration />\n  </component>\n  <component name=\"TaskManager\">\n    <task active=\"true\" id=\"Default\" summary=\"Default task\">\n      <changelist id=\"55ffb1ce-351b-45eb-b182-57dd08cec958\" name=\"Default\" comment=\"\" />\n      <created>1515909390162</created>\n      <option name=\"number\" value=\"Default\" />\n      <option name=\"presentableId\" value=\"Default\" />\n      <updated>1515909390162</updated>\n      <workItem from=\"1515909401575\" duration=\"5570000\" />\n      <workItem from=\"1515981587973\" duration=\"23753000\" />\n      <workItem from=\"1516060323461\" duration=\"17815000\" />\n      <workItem from=\"1516153847923\" duration=\"20707000\" />\n      <workItem from=\"1519611582476\" duration=\"5405000\" />\n      <workItem from=\"1519820264629\" duration=\"1390000\" />\n      <workItem from=\"1519865020109\" duration=\"253000\" />\n      <workItem from=\"1519865983083\" duration=\"290000\" />\n      <workItem from=\"1519867389000\" duration=\"1386000\" />\n      <workItem from=\"1519950574777\" duration=\"2479000\" />\n      <workItem from=\"1520235809612\" duration=\"321000\" />\n      <workItem from=\"1520240045471\" duration=\"102000\" />\n      <workItem from=\"1520241380747\" duration=\"29000\" />\n    </task>\n    <servers />\n  </component>\n  <component name=\"TimeTrackingManager\">\n    <option name=\"totallyTimeSpent\" value=\"79500000\" />\n  </component>\n  <component name=\"ToolWindowManager\">\n    <frame x=\"-8\" y=\"-8\" width=\"1936\" height=\"1056\" extended-state=\"6\" />\n    <layout>\n      <window_info id=\"Project\" active=\"false\" anchor=\"left\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"true\" show_stripe_button=\"true\" weight=\"0.0640625\" sideWeight=\"0.5\" order=\"0\" side_tool=\"false\" content_ui=\"combo\" />\n      <window_info id=\"TODO\" active=\"false\" anchor=\"bottom\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" show_stripe_button=\"true\" weight=\"0.33\" sideWeight=\"0.5\" order=\"6\" side_tool=\"false\" content_ui=\"tabs\" />\n      <window_info id=\"Docker\" active=\"false\" anchor=\"bottom\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" show_stripe_button=\"false\" weight=\"0.33\" sideWeight=\"0.5\" order=\"7\" side_tool=\"false\" content_ui=\"tabs\" />\n      <window_info id=\"Event Log\" active=\"false\" anchor=\"bottom\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" show_stripe_button=\"true\" weight=\"0.33\" sideWeight=\"0.5\" order=\"7\" side_tool=\"true\" content_ui=\"tabs\" />\n      <window_info id=\"Version Control\" active=\"false\" anchor=\"bottom\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" show_stripe_button=\"false\" weight=\"0.33\" sideWeight=\"0.5\" order=\"7\" side_tool=\"false\" content_ui=\"tabs\" />\n      <window_info id=\"npm\" active=\"false\" anchor=\"left\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" show_stripe_button=\"true\" weight=\"0.33\" sideWeight=\"0.5\" order=\"2\" side_tool=\"true\" content_ui=\"tabs\" />\n      <window_info id=\"Structure\" active=\"false\" anchor=\"left\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" show_stripe_button=\"true\" weight=\"0.25\" sideWeight=\"0.5\" order=\"1\" side_tool=\"false\" content_ui=\"tabs\" />\n      <window_info id=\"Terminal\" active=\"false\" anchor=\"bottom\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" show_stripe_button=\"true\" weight=\"0.33\" sideWeight=\"0.5\" order=\"7\" side_tool=\"false\" content_ui=\"tabs\" />\n      <window_info id=\"Favorites\" active=\"false\" anchor=\"left\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" show_stripe_button=\"true\" weight=\"0.33\" sideWeight=\"0.5\" order=\"2\" side_tool=\"true\" content_ui=\"tabs\" />\n      <window_info id=\"Cvs\" active=\"false\" anchor=\"bottom\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" show_stripe_button=\"true\" weight=\"0.25\" sideWeight=\"0.5\" order=\"4\" side_tool=\"false\" content_ui=\"tabs\" />\n      <window_info id=\"Message\" active=\"false\" anchor=\"bottom\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" show_stripe_button=\"true\" weight=\"0.33\" sideWeight=\"0.5\" order=\"0\" side_tool=\"false\" content_ui=\"tabs\" />\n      <window_info id=\"Commander\" active=\"false\" anchor=\"right\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" show_stripe_button=\"true\" weight=\"0.4\" sideWeight=\"0.5\" order=\"0\" side_tool=\"false\" content_ui=\"tabs\" />\n      <window_info id=\"Inspection\" active=\"false\" anchor=\"bottom\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" show_stripe_button=\"true\" weight=\"0.4\" sideWeight=\"0.5\" order=\"5\" side_tool=\"false\" content_ui=\"tabs\" />\n      <window_info id=\"Run\" active=\"false\" anchor=\"bottom\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" show_stripe_button=\"true\" weight=\"0.27889714\" sideWeight=\"0.5\" order=\"2\" side_tool=\"false\" content_ui=\"tabs\" />\n      <window_info id=\"Hierarchy\" active=\"false\" anchor=\"right\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" show_stripe_button=\"true\" weight=\"0.25\" sideWeight=\"0.5\" order=\"2\" side_tool=\"false\" content_ui=\"combo\" />\n      <window_info id=\"Find\" active=\"false\" anchor=\"bottom\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" show_stripe_button=\"true\" weight=\"0.33\" sideWeight=\"0.5\" order=\"1\" side_tool=\"false\" content_ui=\"tabs\" />\n      <window_info id=\"Ant Build\" active=\"false\" anchor=\"right\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" show_stripe_button=\"true\" weight=\"0.25\" sideWeight=\"0.5\" order=\"1\" side_tool=\"false\" content_ui=\"tabs\" />\n      <window_info id=\"Debug\" active=\"false\" anchor=\"bottom\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" show_stripe_button=\"true\" weight=\"0.3997879\" sideWeight=\"0.5\" order=\"3\" side_tool=\"false\" content_ui=\"tabs\" />\n    </layout>\n  </component>\n  <component name=\"TypeScriptGeneratedFilesManager\">\n    <option name=\"version\" value=\"1\" />\n  </component>\n  <component name=\"VcsContentAnnotationSettings\">\n    <option name=\"myLimit\" value=\"2678400000\" />\n  </component>\n  <component name=\"XDebuggerManager\">\n    <breakpoint-manager>\n      <option name=\"time\" value=\"1\" />\n    </breakpoint-manager>\n    <watches-manager />\n  </component>\n  <component name=\"editorHistoryManager\">\n    <entry file=\"file://$PROJECT_DIR$/models/activity.js\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"187\">\n          <caret line=\"11\" column=\"19\" lean-forward=\"false\" selection-start-line=\"11\" selection-start-column=\"19\" selection-end-line=\"11\" selection-end-column=\"19\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/routes/check.js\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"1547\">\n          <caret line=\"91\" column=\"35\" lean-forward=\"false\" selection-start-line=\"91\" selection-start-column=\"35\" selection-end-line=\"91\" selection-end-column=\"35\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/models/person.js\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"374\">\n          <caret line=\"22\" column=\"6\" lean-forward=\"true\" selection-start-line=\"22\" selection-start-column=\"6\" selection-end-line=\"22\" selection-end-column=\"6\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/models/check.js\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"952\">\n          <caret line=\"56\" column=\"24\" lean-forward=\"false\" selection-start-line=\"56\" selection-start-column=\"4\" selection-end-line=\"56\" selection-end-column=\"24\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/models/apply.js\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"187\">\n          <caret line=\"11\" column=\"4\" lean-forward=\"true\" selection-start-line=\"11\" selection-start-column=\"4\" selection-end-line=\"11\" selection-end-column=\"9\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/routes/person.js\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"1054\">\n          <caret line=\"62\" column=\"7\" lean-forward=\"false\" selection-start-line=\"62\" selection-start-column=\"7\" selection-end-line=\"62\" selection-end-column=\"7\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/routes/activity.js\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"0\">\n          <caret line=\"0\" column=\"0\" lean-forward=\"false\" selection-start-line=\"0\" selection-start-column=\"0\" selection-end-line=\"0\" selection-end-column=\"0\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/models/activity.js\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"187\">\n          <caret line=\"11\" column=\"19\" lean-forward=\"false\" selection-start-line=\"11\" selection-start-column=\"19\" selection-end-line=\"11\" selection-end-column=\"19\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/models/person.js\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"374\">\n          <caret line=\"22\" column=\"6\" lean-forward=\"true\" selection-start-line=\"22\" selection-start-column=\"6\" selection-end-line=\"22\" selection-end-column=\"6\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/routes/check.js\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"1547\">\n          <caret line=\"91\" column=\"35\" lean-forward=\"false\" selection-start-line=\"91\" selection-start-column=\"35\" selection-end-line=\"91\" selection-end-column=\"35\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/models/check.js\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"952\">\n          <caret line=\"56\" column=\"24\" lean-forward=\"false\" selection-start-line=\"56\" selection-start-column=\"4\" selection-end-line=\"56\" selection-end-column=\"24\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/models/apply.js\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"187\">\n          <caret line=\"11\" column=\"4\" lean-forward=\"true\" selection-start-line=\"11\" selection-start-column=\"4\" selection-end-line=\"11\" selection-end-column=\"9\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/routes/person.js\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"1275\">\n          <caret line=\"75\" column=\"30\" lean-forward=\"false\" selection-start-line=\"75\" selection-start-column=\"20\" selection-end-line=\"75\" selection-end-column=\"30\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/routes/activity.js\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"850\">\n          <caret line=\"50\" column=\"32\" lean-forward=\"false\" selection-start-line=\"50\" selection-start-column=\"32\" selection-end-line=\"50\" selection-end-column=\"32\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/models/activity.js\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"187\">\n          <caret line=\"11\" column=\"19\" lean-forward=\"false\" selection-start-line=\"11\" selection-start-column=\"19\" selection-end-line=\"11\" selection-end-column=\"19\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/models/person.js\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"374\">\n          <caret line=\"22\" column=\"6\" lean-forward=\"true\" selection-start-line=\"22\" selection-start-column=\"6\" selection-end-line=\"22\" selection-end-column=\"6\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/routes/person.js\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"714\">\n          <caret line=\"42\" column=\"45\" lean-forward=\"true\" selection-start-line=\"42\" selection-start-column=\"15\" selection-end-line=\"42\" selection-end-column=\"45\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/routes/check.js\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"629\">\n          <caret line=\"37\" column=\"41\" lean-forward=\"true\" selection-start-line=\"37\" selection-start-column=\"41\" selection-end-line=\"37\" selection-end-column=\"41\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/routes/activity.js\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"0\">\n          <caret line=\"0\" column=\"0\" lean-forward=\"false\" selection-start-line=\"0\" selection-start-column=\"0\" selection-end-line=\"0\" selection-end-column=\"0\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/models/activity.js\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"527\">\n          <caret line=\"31\" column=\"30\" lean-forward=\"false\" selection-start-line=\"31\" selection-start-column=\"30\" selection-end-line=\"31\" selection-end-column=\"30\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/routes/check.js\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"425\">\n          <caret line=\"25\" column=\"0\" lean-forward=\"true\" selection-start-line=\"25\" selection-start-column=\"0\" selection-end-line=\"25\" selection-end-column=\"0\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/models/check.js\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"34\">\n          <caret line=\"2\" column=\"18\" lean-forward=\"true\" selection-start-line=\"2\" selection-start-column=\"18\" selection-end-line=\"2\" selection-end-column=\"18\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/routes/activity.js\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"1037\">\n          <caret line=\"61\" column=\"0\" lean-forward=\"false\" selection-start-line=\"61\" selection-start-column=\"0\" selection-end-line=\"64\" selection-end-column=\"6\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/models/activity.js\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"306\">\n          <caret line=\"18\" column=\"0\" lean-forward=\"false\" selection-start-line=\"18\" selection-start-column=\"0\" selection-end-line=\"18\" selection-end-column=\"0\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/routes/check.js\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"51\">\n          <caret line=\"3\" column=\"0\" lean-forward=\"false\" selection-start-line=\"3\" selection-start-column=\"0\" selection-end-line=\"8\" selection-end-column=\"2\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/app.js\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"0\">\n          <caret line=\"0\" column=\"0\" lean-forward=\"false\" selection-start-line=\"0\" selection-start-column=\"0\" selection-end-line=\"0\" selection-end-column=\"0\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/routes/index.js\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"0\">\n          <caret line=\"0\" column=\"0\" lean-forward=\"false\" selection-start-line=\"0\" selection-start-column=\"0\" selection-end-line=\"8\" selection-end-column=\"24\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/routes/activity.js\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"0\">\n          <caret line=\"0\" column=\"0\" lean-forward=\"false\" selection-start-line=\"0\" selection-start-column=\"0\" selection-end-line=\"9\" selection-end-column=\"24\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/routes/person.js\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"221\">\n          <caret line=\"13\" column=\"0\" lean-forward=\"false\" selection-start-line=\"13\" selection-start-column=\"0\" selection-end-line=\"13\" selection-end-column=\"0\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/package.json\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"119\">\n          <caret line=\"7\" column=\"19\" lean-forward=\"false\" selection-start-line=\"7\" selection-start-column=\"19\" selection-end-line=\"7\" selection-end-column=\"19\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/models/person.js\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"306\">\n          <caret line=\"18\" column=\"18\" lean-forward=\"true\" selection-start-line=\"18\" selection-start-column=\"18\" selection-end-line=\"18\" selection-end-column=\"18\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/models/activity.js\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"17\">\n          <caret line=\"1\" column=\"0\" lean-forward=\"false\" selection-start-line=\"1\" selection-start-column=\"0\" selection-end-line=\"1\" selection-end-column=\"0\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/models/check.js\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"0\">\n          <caret line=\"0\" column=\"0\" lean-forward=\"false\" selection-start-line=\"0\" selection-start-column=\"0\" selection-end-line=\"2\" selection-end-column=\"1\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/routes/check.js\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"51\">\n          <caret line=\"3\" column=\"0\" lean-forward=\"false\" selection-start-line=\"3\" selection-start-column=\"0\" selection-end-line=\"8\" selection-end-column=\"2\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/routes/users.js\" />\n    <entry file=\"file://$PROJECT_DIR$/routes/user.js\" />\n    <entry file=\"file://$PROJECT_DIR$/models/users.js\" />\n    <entry file=\"file://$PROJECT_DIR$/routes/index.js\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"0\">\n          <caret line=\"0\" column=\"0\" lean-forward=\"false\" selection-start-line=\"0\" selection-start-column=\"0\" selection-end-line=\"8\" selection-end-column=\"24\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/utils/dbConnection.js\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"204\">\n          <caret line=\"12\" column=\"14\" lean-forward=\"false\" selection-start-line=\"12\" selection-start-column=\"14\" selection-end-line=\"12\" selection-end-column=\"14\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/node_modules/express/lib/router/route.js\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"607\">\n          <caret line=\"111\" column=\"2\" lean-forward=\"false\" selection-start-line=\"111\" selection-start-column=\"2\" selection-end-line=\"111\" selection-end-column=\"2\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/package.json\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"323\">\n          <caret line=\"19\" column=\"0\" lean-forward=\"false\" selection-start-line=\"19\" selection-start-column=\"0\" selection-end-line=\"19\" selection-end-column=\"0\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/node_modules/mysql/lib/protocol/Parser.js\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"211\">\n          <caret line=\"79\" column=\"0\" lean-forward=\"false\" selection-start-line=\"79\" selection-start-column=\"0\" selection-end-line=\"79\" selection-end-column=\"0\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/configs/config.js\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"0\">\n          <caret line=\"0\" column=\"25\" lean-forward=\"true\" selection-start-line=\"0\" selection-start-column=\"25\" selection-end-line=\"0\" selection-end-column=\"25\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/app.js\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"-289\">\n          <caret line=\"5\" column=\"30\" lean-forward=\"false\" selection-start-line=\"5\" selection-start-column=\"26\" selection-end-line=\"5\" selection-end-column=\"30\" />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/models/activity.js\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"187\">\n          <caret line=\"11\" column=\"19\" lean-forward=\"false\" selection-start-line=\"11\" selection-start-column=\"19\" selection-end-line=\"11\" selection-end-column=\"19\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/models/apply.js\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"187\">\n          <caret line=\"11\" column=\"4\" lean-forward=\"false\" selection-start-line=\"11\" selection-start-column=\"4\" selection-end-line=\"11\" selection-end-column=\"9\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/models/check.js\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"952\">\n          <caret line=\"56\" column=\"24\" lean-forward=\"false\" selection-start-line=\"56\" selection-start-column=\"4\" selection-end-line=\"56\" selection-end-column=\"24\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/models/person.js\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"374\">\n          <caret line=\"22\" column=\"6\" lean-forward=\"false\" selection-start-line=\"22\" selection-start-column=\"6\" selection-end-line=\"22\" selection-end-column=\"6\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/routes/person.js\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"1054\">\n          <caret line=\"62\" column=\"7\" lean-forward=\"false\" selection-start-line=\"62\" selection-start-column=\"7\" selection-end-line=\"62\" selection-end-column=\"7\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/routes/activity.js\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"1394\">\n          <caret line=\"82\" column=\"3\" lean-forward=\"false\" selection-start-line=\"59\" selection-start-column=\"0\" selection-end-line=\"82\" selection-end-column=\"3\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/routes/check.js\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state relative-caret-position=\"859\">\n          <caret line=\"113\" column=\"19\" lean-forward=\"false\" selection-start-line=\"113\" selection-start-column=\"19\" selection-end-line=\"113\" selection-end-column=\"19\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n  </component>\n</project>"
  },
  {
    "path": "server/checkin/app.js",
    "content": "var express = require('express');\nvar path = require('path');\nvar favicon = require('serve-favicon');\nvar logger = require('morgan');\nvar cookieParser = require('cookie-parser');\nvar bodyParser = require('body-parser');\n\nvar index = require('./routes/index');\nvar activity = require('./routes/activity');\nvar person = require('./routes/person');\nvar check = require('./routes/check');\n\nvar app = express();\n\n// view engine setup\napp.set('views', path.join(__dirname, 'views'));\napp.set('view engine', 'ejs');\n\n// uncomment after placing your favicon in /public\n//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));\napp.use(logger('dev'));\napp.use(bodyParser.json());\napp.use(bodyParser.urlencoded({ extended: false }));\napp.use(cookieParser());\napp.use(express.static(path.join(__dirname, 'public')));\n\napp.use('/', index);\napp.use('/activity', activity);\napp.use('/person', person);\napp.use('/check', check);\n\n// catch 404 and forward to error handler\napp.use(function(req, res, next) {\n  var err = new Error('Not Found');\n  err.status = 404;\n  next(err);\n});\n\n// error handler\napp.use(function(err, req, res, next) {\n  // set locals, only providing error in development\n  res.locals.message = err.message;\n  res.locals.error = req.app.get('env') === 'development' ? err : {};\n\n  // render the error page\n  res.status(err.status || 500);\n  res.render('error');\n});\n\nmodule.exports = app;\n"
  },
  {
    "path": "server/checkin/bin/www",
    "content": "#!/usr/bin/env node\n\n/**\n * Module dependencies.\n */\n\nvar app = require('../app');\nvar debug = require('debug')('checkin:server');\nvar http = require('http');\n\n/**\n * Get port from environment and store in Express.\n */\n\nvar port = normalizePort(process.env.PORT || '3000');\napp.set('port', port);\n\n/**\n * Create HTTP server.\n */\n\nvar server = http.createServer(app);\n\n/**\n * Listen on provided port, on all network interfaces.\n */\n\nserver.listen(port);\nserver.on('error', onError);\nserver.on('listening', onListening);\n\n/**\n * Normalize a port into a number, string, or false.\n */\n\nfunction normalizePort(val) {\n  var port = parseInt(val, 10);\n\n  if (isNaN(port)) {\n    // named pipe\n    return val;\n  }\n\n  if (port >= 0) {\n    // port number\n    return port;\n  }\n\n  return false;\n}\n\n/**\n * Event listener for HTTP server \"error\" event.\n */\n\nfunction onError(error) {\n  if (error.syscall !== 'listen') {\n    throw error;\n  }\n\n  var bind = typeof port === 'string'\n    ? 'Pipe ' + port\n    : 'Port ' + port;\n\n  // handle specific listen errors with friendly messages\n  switch (error.code) {\n    case 'EACCES':\n      console.error(bind + ' requires elevated privileges');\n      process.exit(1);\n      break;\n    case 'EADDRINUSE':\n      console.error(bind + ' is already in use');\n      process.exit(1);\n      break;\n    default:\n      throw error;\n  }\n}\n\n/**\n * Event listener for HTTP server \"listening\" event.\n */\n\nfunction onListening() {\n  var addr = server.address();\n  var bind = typeof addr === 'string'\n    ? 'pipe ' + addr\n    : 'port ' + addr.port;\n  debug('Listening on ' + bind);\n}\n"
  },
  {
    "path": "server/checkin/configs/config.js",
    "content": "var dbhost = 'localhost';\nvar dbuser = 'root';\nvar dbpassword = '123456';\nvar database = 'checkin';\nvar dbport = '3306'\nmodule.exports = {\n    dbhost: dbhost,\n    dbuser: dbuser,\n    dbpassword: dbpassword,\n    database: database,\n    dbport:dbport\n}"
  },
  {
    "path": "server/checkin/models/activity.js",
    "content": "var db = require('../utils/dbConnection');\nmodule.exports = {\n    create: function create (a,callback) {\n        var sql = 'INSERT INTO T_activity(F_ID,F_CreaterId,F_Caption,F_Desc,F_Location,F_Lat,F_Lng,F_StartDate' +\n            ',F_EndDate,F_IfFace,F_IfPhoto,F_IfLocation)' +\n            ' VALUES(0,?,?,?,?,?,?,?,?,?,?,?)';\n        var params=[a.F_CreaterId,a.F_Caption,a.F_Desc,a.F_Location,a.F_Lat,a.F_Lng,a.F_StartDate,a.F_EndDate\n            ,a.F_IfFace,a.F_IfPhoto,a.F_IfLocation];\n\n        db.connection.query(sql,params,function (err,res) {\n            if(err) {\n                console.log('INSERT ACTIVITY:', err.message);\n                return;\n            }\n\n            callback(res);\n            console.log('INSERT ACTIVITY SUCCESS');\n        });\n    },\n\n    getall: function (user_id,callback) {\n        var sql = 'SELECT * FROM v_apply_activity WHERE F_ApplyerId=? ';\n        var params = [user_id];\n        db.connection.query(sql,params,function (err,res) {\n            if(err){\n                console.log(err);\n                return;\n            }\n            callback(res);\n        })\n    },\n    \n    getallLike:function (str,callback) {\n        var sql = 'SELECT * FROM T_activity WHERE F_Caption LIKE ? ';\n        str = '%' + str + '%';\n        var params = [str];\n        db.connection.query(sql,params,function (err,res) {\n            if(err){\n                console.log(err);\n                return;\n            }\n            callback(res);\n        })\n    },\n    getInfo:function (activityId,callback) {\n        var sql = 'SELECT * FROM v_activity_info WHERE F_ActivityId = ?';\n        var params = [activityId];\n        db.connection.query(sql,params,function (err,res) {\n            if(err){\n                console.log(err.message);\n                return;\n            }\n            callback(res);\n\n        })\n    },\n    haveApplyed:function (activity_id,user_id,callback) {\n        var sql = 'SELECT * FROM t_apply WHERE F_ApplyerId = ? AND F_ActivityId = ?';\n        var params = [user_id,activity_id];\n        db.connection.query(sql,params,function (err,res) {\n            if(err){\n                console.log(err);\n                return;\n            }\n            console.log(res);\n            callback(res);\n        })\n    }\n}"
  },
  {
    "path": "server/checkin/models/apply.js",
    "content": "var db = require('../utils/dbConnection');\nvar moment = require('moment');\n\n\n\nmodule.exports = {\n    /**\n     * TODO\n     * 用户对某个签到活动进行报名\n     * @param user\n     */\n    apply: function apply(user_id,activity_id,callback) {\n        var sql = 'INSERT INTO t_apply (F_ID,F_ApplyerId,F_ActivityId,F_ApplyDate)VALUES(0,?,?,?)';\n        var now = moment().format('YYYY-MM-DD');\n        var params = [user_id,activity_id,now];\n        db.connection.query(sql,params,function (err,res) {\n            var re = true;\n            if(err){\n                console.log(err.message);\n                return;\n            }\n            callback(re);\n        })\n    },\n    getApplyNumByActId: function applyNum(activity_id,callback) {\n        var sql = 'SELECT COUNT(*) AS NUMS FROM t_apply WHERE F_ActivityId = ? GROUP BY F_ActivityId';\n        var params = [activity_id];\n        db.connection.query(sql,params,function (err,res) {\n            if(err){\n                console.log(err);\n                return;\n            }\n            // console.log(res[0].NUMS);\n            if(res[0]==null){\n                callback(0)\n            }else{\n                callback(res[0].NUMS);\n            }\n        });\n    }\n\n\n}"
  },
  {
    "path": "server/checkin/models/check.js",
    "content": "var db = require('../utils/dbConnection');\nvar moment = require('moment');\nmodule.exports = {\n    check: function (user_id,activity_id,photo_url,callback) {\n        var sql = 'INSERT INTO T_check(F_ID,F_ActivityId,F_UserID,F_CheckDate,F_PhotoUrl)VALUES(0,?,?,?,?)';\n        var now = new Date();\n        var params = [activity_id, user_id, now, photo_url];\n        console.log(params);\n        db.connection.query(sql,params,function (err,result) {\n            if(err){\n                console.log(err.message);\n                return;\n            }\n            console.log(\"INSERT CHECK SUCCESS\",result.insertId);\n            callback(result);\n\n        });\n    },\n\n    getDetailById: function getDetailById(activity_id,callback) {\n        var sql = 'SELECT * FROM v_check_detail WHERE F_ActivityId = ?';\n        var params = [activity_id];\n        db.connection.query(sql,params,function (err,res) {\n            if(err){\n                console.log(err);\n                return;\n            }\n            // console.log(res);\n            callback(res);\n        })\n    },\n\n    getDateById: function getDateById(activity_id,callback) {\n        var sql = 'SELECT DISTINCT F_CheckDate FROM v_check_detail WHERE F_ActivityId = ?';\n        var params = [activity_id];\n        db.connection.query(sql,params,function (err,res) {\n            if(err){\n                console.log(err);\n                return;\n            }\n            console.log(res);\n            callback(res);\n        })\n    },\n    getCheckByDate: function getCheckByDate(check_date,callback) {\n        var sql = 'SELECT * FROM v_check_detail WHERE F_CheckDate = ?'\n        var params = [check_date];\n        db.connection.query(sql,params,function (err,res) {\n            if(err){\n                console.log(err);\n                return;\n            }\n            console.log(res);\n            callback(res);\n        })\n    },\n    getDetailByIdAndDate: function getDetailByIdAndDate(activity_id,date,callback) {\n        var sql = 'SELECT * FROM v_check_detail WHERE F_ActivityId = ? AND F_CheckDate = ?';\n        var params = [activity_id,date];\n        db.connection.query(sql,params,function (err,res) {\n            if(err){\n                console.log(err);\n                return;\n            }\n            // console.log(res);\n            callback(res);\n        })\n    },\n\n}"
  },
  {
    "path": "server/checkin/models/person.js",
    "content": "var db = require('../utils/dbConnection');\n\n\n\nmodule.exports = {\n    /**\n     * 第一次使用的时候创建用户，通过检索是否在数据库中有记录\n     * @param user\n     */\n    create: function create(user,callback) {\n        var sql = 'INSERT INTO T_user(F_ID,F_Name)VALUES(0,?)';\n        var params = [user];\n        db.connection.query(sql,params,function (err,result) {\n            if(err){\n                console.log(err.message);\n                return;\n            }\n            console.log(\"INSERT SUCCESS\",result.insertId);\n            callback(result);\n\n        });\n        // connetction.end();\n    },\n    /**\n     * 通过用户名查找用户\n     * @param name\n     */\n    getUserByName: function getUserByName(name,callback) {\n        var sql = 'SELECT * FROM T_user WHERE F_Name=?';\n        var params = [name];\n        // var sql = 'SELECT * FROM T_user';\n        db.connection.query(sql,params,function (err,result) {\n           if(err){\n               console.log(err.message);\n               return;\n           }\n           // console.log(result);\n           callback(result);\n        });\n    },\n\n    /**\n     * 传入用户名,并将用户的信息更新\n     * @param name\n     */\n    updateUserById: function updateUserByName(user_id,avator_url,callback) {\n        var sql = 'UPDATE T_user SET F_PhotoUrl = ? WHERE F_ID = ?';\n        var params = [avator_url,user_id];\n        db.connection.query(sql,params,function (err,result) {\n            if(err){\n                console.log(err.message);\n                return;\n            }\n            callback(result);\n        })\n    }\n\n}"
  },
  {
    "path": "server/checkin/package.json",
    "content": "{\n  \"name\": \"checkin\",\n  \"version\": \"0.0.0\",\n  \"private\": true,\n  \"scripts\": {\n    \"start\": \"node ./bin/www\"\n  },\n  \"dependencies\": {\n    \"body-parser\": \"~1.18.2\",\n    \"cookie-parser\": \"~1.4.3\",\n    \"debug\": \"~2.6.9\",\n    \"ejs\": \"~2.5.7\",\n    \"express\": \"~4.15.5\",\n    \"morgan\": \"~1.9.0\",\n    \"serve-favicon\": \"~2.4.5\",\n    \"mysql\": \"latest\",\n    \"moment\": \"latest\"\n  }\n}\n"
  },
  {
    "path": "server/checkin/public/stylesheets/style.css",
    "content": "body {\n  padding: 50px;\n  font: 14px \"Lucida Grande\", Helvetica, Arial, sans-serif;\n}\n\na {\n  color: #00B7FF;\n}\n"
  },
  {
    "path": "server/checkin/routes/activity.js",
    "content": "var express = require('express');\nvar activity = require('../models/activity');\nvar apply = require('../models/apply');\nvar moment = require('moment');\nvar router = express.Router();\n\nrouter.post('/', function (req, res, next) {\n    var result = {\n        code: 1\n    };\n    res.send(result);\n});\n\n/**\n * /activity/create\n * POST\n * 创建新的签到活动\n */\nrouter.post('/create', function (req, res, next) {\n    var F_CreaterId = req.body.createrId;\n    var F_Caption = req.body.activity_name;\n    var F_Desc = req.body.activity_desc;\n    var F_Location = req.body.location;\n    var F_Lat = req.body.lat;\n    var F_Lng = req.body.lng;\n    var F_SatrtDate = req.body.startDate;\n    var F_EndDate = req.body.endDate;\n    var F_IfFace = req.body.ifFace;\n    var F_IfPhoto = req.body.ifPhoto;\n    var F_IfLocation = req.body.ifLocation;\n    var act = {\n        F_CreaterId: F_CreaterId,\n        F_Caption: F_Caption,\n        F_Desc: F_Desc,\n        F_Location: F_Location,\n        F_Lat: F_Lat,\n        F_Lng: F_Lng,\n        F_StartDate: F_SatrtDate,\n        F_EndDate: F_EndDate,\n        F_IfFace: F_IfFace,\n        F_IfPhoto: F_IfPhoto,\n        F_IfLocation: F_IfLocation\n    };\n    // console.log(act);\n    activity.create(act,function (act_res) {\n        console.log(act_res);\n        apply.apply(F_CreaterId,act_res.insertId,function (apply_res) {\n            var insert_res = {\n                code:1\n            };\n            res.send(insert_res);\n        })\n    });\n\n});\n/**\n * activity/getall\n * 返回所有的活动，结束了则是completed,还在进行中是processing\n */\nrouter.post('/getall',function (req,res,next) {\n    var user_id = req.body.userId;\n    var now = moment();\n    var completed = [];\n    var processing = [];\n    console.log(now);\n    activity.getall(user_id,function (activitys) {\n        for(var i = 0; i < activitys.length; i ++){\n            activitys[i].F_StartDate = moment(activitys[i].F_StartDate).format('YYYY-MM-DD');\n            activitys[i].F_EndDate = moment(activitys[i].F_EndDate).format('YYYY-MM-DD');\n            //<0说明在endDate在现在之前---已经结束了\n            if(moment(activitys[i].F_EndDate).diff(now)<0){\n                completed.push(activitys[i]);\n            }else {\n                processing.push(activitys[i]);\n            }\n        }\n        var res_getall = {\n            'completed':completed,\n            'processing':processing\n        };\n        res.send(res_getall);\n    })\n});\n\nrouter.get('/getall',function (req,res,next) {\n    var now = moment();\n    var completed = [];\n    var processing = [];\n    console.log(now);\n    activity.getall(function (activitys) {\n        for(var i = 0; i < activitys.length; i ++){\n            activitys[i].F_StartDate = moment(activitys[i].F_StartDate).format('YYYY-MM-DD');\n            activitys[i].F_EndDate = moment(activitys[i].F_EndDate).format('YYYY-MM-DD');\n            //<0说明在endDate在现在之前---已经结束了\n            if(moment(activitys[i].F_EndDate).diff(now)<=0){\n                completed.push(activitys[i]);\n            }else {\n                processing.push(activitys[i]);\n            }\n        }\n        var res_getall = {\n            'completed':completed,\n            'processing':processing\n        };\n        res.send(res_getall);\n    });\n});\n/**\n * 模糊查询所有的活动\n */\nrouter.post('/like',function (req,res,next) {\n    // var re = {\n    //     code:1\n    // };\n    // res.send(re);\n    var str = req.body.str;\n    // var str = '火锅';\n    var now = moment();\n    var completed = [];\n    var processing = [];\n    activity.getallLike(str,function (activitys) {\n        for(var i = 0; i < activitys.length; i ++){\n            activitys[i].F_StartDate = moment(activitys[i].F_StartDate).format('YYYY-MM-DD');\n            activitys[i].F_EndDate = moment(activitys[i].F_EndDate).format('YYYY-MM-DD');\n            //<0说明在endDate在现在之前---已经结束了\n            if(moment(activitys[i].F_EndDate).diff(now)<0){\n                completed.push(activitys[i]);\n            }else {\n                processing.push(activitys[i]);\n            }\n        }\n        var res_getall = {\n            'completed':completed,\n            'processing':processing\n        };\n        res.send(res_getall);\n    })\n});\n\n/**\n * /activity/actInfo\n */\nrouter.post('/actInfo',function (req,res,next) {\n    var id = req.body.id;\n    // var id = 28;\n    activity.getInfo(id,function (activitys) {\n        for(var i = 0;i < activitys.length;i ++){\n            activitys[i].F_StartDate = moment(activitys[i].F_StartDate).format('YYYY-MM-DD');\n            activitys[i].F_EndDate = moment(activitys[i].F_EndDate).format('YYYY-MM-DD');\n        }\n        apply.getApplyNumByActId(id,function (nums) {\n            var result = {\n                'infos':activitys,\n                'nums':nums\n            };\n            res.send(result);\n        })\n\n    });\n});\n\n/**\n * /activity/haveApply\n */\nrouter.post('/haveApply',function (req,res,next) {\n    var activity_id = req.body.activityId;\n    var user_id = req.body.userId;\n    var have = false;\n    // var activity_id = 28;\n    // var user_id = 100;\n    activity.haveApplyed(activity_id,user_id,function (result) {\n        if(result.length != 0){\n            have = true;\n        }\n        var response = {\n            'code':have\n        };\n        res.send(response);\n    })\n});\n\n/**\n * /activity/apply\n */\nrouter.post('/apply',function (req,res,next) {\n    var activity_id = req.body.activityId;\n    var user_id = req.body.userId;\n    apply.apply(user_id,activity_id,function (result) {\n        var re = {\n            'code':result\n        };\n        res.send(re);\n    });\n});\n\nmodule.exports = router;"
  },
  {
    "path": "server/checkin/routes/check.js",
    "content": "var express = require('express');\nvar router = express.Router();\nvar check = require('../models/check');\nvar moment = require('moment');\n\n// router.get('/',function (req,res,next) {\n//\n// });\n\n\n\n/**\n * /check\n * userid activityid photourl\n */\nrouter.post('/',function (req,res,next) {\n    var userId = req.body.userId;\n    var activityId = req.body.activityId;\n    var photoUrl = req.body.photoUrl;\n    check.check(userId,activityId,photoUrl,function (insert_res) {\n        console.log(insert_res);\n        var result = {\n            code:1\n        };\n        res.send(result);\n    })\n\n});\n\nrouter.get('/details',function (req,res,next) {\n    // var activity_id = req.body.id;\n     var activity_id = 31;\n    check.getDetailById(activity_id,function (details) {\n        check.getDateById(activity_id,function (dates) {\n            for(var i = 0; i < details.length; i ++) {\n                details[i].F_CheckDate = moment(details[i].F_CheckDate).format('YYYY-MM-DD');\n            }\n            for(var i = 0; i < dates.length; i ++) {\n                dates[i].F_CheckDate = moment(dates[i].F_CheckDate).format('YYYY-MM-DD');\n            }\n            var response = {\n                'dateNum':dates.length,\n                'dates':dates,\n                'details':details\n            }\n            res.send(response);\n\n            // res.send(details);\n            // res.send(details)\n        })\n\n    })\n});\n\n/**\n * /check/details\n * activity_id\n */\nrouter.post('/details',function (req,res,next) {\n   var activity_id = req.body.id;\n   //  var activity_id = 25;\n   check.getDetailById(activity_id,function (details) {\n       check.getDateById(activity_id,function (dates) {\n           for(var i = 0; i < details.length; i ++) {\n               details[i].F_CheckDate = moment(details[i].F_CheckDate).format('YYYY-MM-DD');\n           }\n           for(var i = 0; i < dates.length; i ++) {\n               dates[i].F_CheckDate = moment(dates[i].F_CheckDate).format('YYYY-MM-DD');\n           }\n           var response = {\n               'dateNum':dates.length,\n               'dates':dates,\n               'details':details\n           }\n           res.send(response);\n\n           // res.send(details);\n           // res.send(details)\n       })\n\n   })\n});\n/**\n * 查找某个活动某天的签到情况\n */\nrouter.post('/details/date',function (req,res,next) {\n    var activity_id = req.body.activityId;\n    var check_date = req.body.checkDate;\n    // var activity_id = 31;\n    // var check_date = \"2018-01-17\";\n    console.log(activity_id,check_date);\n    check.getDetailByIdAndDate(activity_id,check_date,function (details) {\n        for(var i = 0; i < details.length; i ++) {\n            details[i].F_CheckDate = moment(details[i].F_CheckDate).format('YYYY-MM-DD');\n        }\n        var response = {\n            'details':details\n        }\n        console.log(check_date,details);\n        res.send(response);\n    })\n\n});\n\nrouter.post('/dateCheck',function (req,res,next) {\n    var check_date = req.body.checkDate;\n    check.getCheckByDate(check_date,function (checks) {\n        console.log(checks);\n    })\n});\n\nrouter.get('/test',function (req,res,next) {\n    var time = moment.unix(1509672700).format('YYYY-MM-DD HH:mm');\n    res.send(time);\n\n})\nmodule.exports = router;"
  },
  {
    "path": "server/checkin/routes/index.js",
    "content": "var express = require('express');\nvar router = express.Router();\n\n/* GET home page. */\nrouter.get('/', function(req, res, next) {\n  res.render('index', { title: 'Express' });\n});\n\nmodule.exports = router;\n"
  },
  {
    "path": "server/checkin/routes/person.js",
    "content": "var express = require('express');\nvar users = require('../models/person');\nvar router = express.Router();\n\n\n/* GET home page. */\nrouter.get('/', function(req, res, next) {\n    var userId = -1;\n    var username = '曾曾曾';\n    users.getUserByName(username,function (userInfos) {\n        console.log(userInfos);\n        if(userInfos.length == 0) {\n            users.create(username,function (add_result) {\n                userId = add_result.insertId;\n            })\n        }else {\n            userId = userInfos[0].F_ID;\n        }\n\n        var result = {\n            userId: userId\n        };\n        res.send(result);\n    });\n\n});\n\n/**\n * 查找是否有F_User = username\n * POST /person/\n * username=''\n */\nrouter.post('/',function (req, res) {\n    var userId = -1;\n    var avatorUrl = '';\n    var username = req.body.username;\n    // console.log(username);\n    // var username = '李四';\n    users.getUserByName(username,function (userInfos) {\n        console.log(userInfos);\n        if(userInfos.length === 0) {\n            users.create(username,function (add_result) {\n                userId = add_result.insertId;\n                var result = {\n                    userId: userId,\n                    avatorUrl:avatorUrl\n                };\n                res.send(result);\n            })\n        }else {\n            userId = userInfos[0].F_ID;\n            avatorUrl = userInfos[0].F_PhotoUrl;\n            var result = {\n                userId: userId,\n                avatorUrl: avatorUrl\n            };\n            res.send(result);\n        }\n\n\n        console.log(result);\n\n    });\n});\n\n/**\n * 用于更新某个用户的头像使用的\n */\nrouter.post('/update',function (req, res) {\n    var user_id = req.body.user_id;\n    var avator_url = req.body.avator_url;\n    var result = {\n        code: 1\n    };\n    users.updateUserById(user_id,avator_url,function (update_res) {\n        console.log(update_res);\n        res.send(result);\n    })\n\n});\n\n\n\nmodule.exports = router;"
  },
  {
    "path": "server/checkin/utils/dbConnection.js",
    "content": "var config = require('../configs/config');\nvar mysql = require('mysql');\nvar connection = mysql.createConnection({\n    host            : config.dbhost,\n    user            : config.dbuser,\n    password        : config.dbpassword,\n    database        : config.database,\n    port            : config.dbport\n});\nconnection.connect();\n\nmodule.exports = {\n    connection: connection\n}\n\n"
  },
  {
    "path": "server/checkin/views/error.ejs",
    "content": "<h1><%= message %></h1>\n<h2><%= error.status %></h2>\n<pre><%= error.stack %></pre>\n"
  },
  {
    "path": "server/checkin/views/index.ejs",
    "content": "<!DOCTYPE html>\n<html>\n  <head>\n    <title><%= title %></title>\n    <link rel='stylesheet' href='/stylesheets/style.css' />\n  </head>\n  <body>\n    <h1><%= title %></h1>\n    <p>Welcome to <%= title %></p>\n  </body>\n</html>\n"
  }
]