├── 微信小程序前端
├── pages
│ ├── index
│ │ ├── help.json
│ │ ├── next.json
│ │ ├── help.wxss
│ │ ├── next.wxss
│ │ ├── ini.json
│ │ ├── help.js
│ │ ├── help.wxml
│ │ ├── index.wxml
│ │ ├── next.wxml
│ │ ├── next.js
│ │ ├── index.wxss
│ │ ├── ini.wxml
│ │ ├── ini.wxss
│ │ ├── index.js
│ │ └── ini.js
│ ├── logs
│ │ ├── logs.json
│ │ ├── logs.wxml
│ │ ├── logs.js
│ │ └── logs.wxss
│ ├── register
│ │ ├── register.json
│ │ ├── register.wxss
│ │ ├── register.wxml
│ │ └── register.js
│ ├── Detial_Message
│ │ ├── Detial_Message.json
│ │ ├── Detial_Message.wxml
│ │ ├── Detial_Message.js
│ │ └── Detial_Message.wxss
│ ├── Message_1Form
│ │ ├── Message_1Form.json
│ │ ├── Message_1Form.wxml
│ │ ├── Message_1Form.wxss
│ │ └── Message_1Form.js
│ └── Message_2Form
│ │ ├── Message_2Form.json
│ │ ├── Message_2Form.wxml
│ │ ├── Message_2Form.wxss
│ │ └── Message_2Form.js
├── assets
│ ├── logs.png
│ ├── plus.png
│ ├── icon0.png
│ ├── icon1.png
│ ├── icon2.png
│ ├── icon3.png
│ ├── icon4.png
│ ├── icon5.png
│ ├── icon6.png
│ ├── todos.png
│ ├── logs-active.png
│ └── todos-active.png
├── app.wxss
├── project.config.json
├── app.js
├── app.json
├── utils
│ └── util.js
└── weui.wxss
├── 软件设计文档.pdf
├── 软件需求规格说明书.pdf
├── 小组分工与贡献率说明.pdf
├── README.md
├── 安装部署说明.md
├── 后端php
├── login.php
├── participate.php
├── register.php
├── launchsignin.php
├── delete.php
├── lookupdetail.php
├── lookup.php
└── lookparticipate.php
└── LICENSE
/微信小程序前端/pages/index/help.json:
--------------------------------------------------------------------------------
1 | {}
--------------------------------------------------------------------------------
/微信小程序前端/pages/index/next.json:
--------------------------------------------------------------------------------
1 | {}
--------------------------------------------------------------------------------
/微信小程序前端/pages/index/help.wxss:
--------------------------------------------------------------------------------
1 | /* pages/index/help.wxss */
--------------------------------------------------------------------------------
/微信小程序前端/pages/index/next.wxss:
--------------------------------------------------------------------------------
1 | /* pages/index/next.wxss */
--------------------------------------------------------------------------------
/微信小程序前端/pages/index/ini.json:
--------------------------------------------------------------------------------
1 | {
2 | "navigationBarTitleText": "发起签到"
3 | }
--------------------------------------------------------------------------------
/微信小程序前端/pages/logs/logs.json:
--------------------------------------------------------------------------------
1 | {
2 | "navigationBarTitleText": "查看启动日志"
3 | }
--------------------------------------------------------------------------------
/软件设计文档.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/edwincai/Wechat_Qrcode_sign_in/HEAD/软件设计文档.pdf
--------------------------------------------------------------------------------
/软件需求规格说明书.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/edwincai/Wechat_Qrcode_sign_in/HEAD/软件需求规格说明书.pdf
--------------------------------------------------------------------------------
/小组分工与贡献率说明.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/edwincai/Wechat_Qrcode_sign_in/HEAD/小组分工与贡献率说明.pdf
--------------------------------------------------------------------------------
/微信小程序前端/assets/logs.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/edwincai/Wechat_Qrcode_sign_in/HEAD/微信小程序前端/assets/logs.png
--------------------------------------------------------------------------------
/微信小程序前端/assets/plus.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/edwincai/Wechat_Qrcode_sign_in/HEAD/微信小程序前端/assets/plus.png
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ## 微信小程序扫码签到
2 | 扫码签到是一个基于微信平台的小程序,通过微信扫一扫,可以实现自动签到功能,免去了手工签到的麻烦。扫码签到主要用在课堂签到,并且支持扩展,以便应用到其它需要签到的场景。
3 |
--------------------------------------------------------------------------------
/微信小程序前端/assets/icon0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/edwincai/Wechat_Qrcode_sign_in/HEAD/微信小程序前端/assets/icon0.png
--------------------------------------------------------------------------------
/微信小程序前端/assets/icon1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/edwincai/Wechat_Qrcode_sign_in/HEAD/微信小程序前端/assets/icon1.png
--------------------------------------------------------------------------------
/微信小程序前端/assets/icon2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/edwincai/Wechat_Qrcode_sign_in/HEAD/微信小程序前端/assets/icon2.png
--------------------------------------------------------------------------------
/微信小程序前端/assets/icon3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/edwincai/Wechat_Qrcode_sign_in/HEAD/微信小程序前端/assets/icon3.png
--------------------------------------------------------------------------------
/微信小程序前端/assets/icon4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/edwincai/Wechat_Qrcode_sign_in/HEAD/微信小程序前端/assets/icon4.png
--------------------------------------------------------------------------------
/微信小程序前端/assets/icon5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/edwincai/Wechat_Qrcode_sign_in/HEAD/微信小程序前端/assets/icon5.png
--------------------------------------------------------------------------------
/微信小程序前端/assets/icon6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/edwincai/Wechat_Qrcode_sign_in/HEAD/微信小程序前端/assets/icon6.png
--------------------------------------------------------------------------------
/微信小程序前端/assets/todos.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/edwincai/Wechat_Qrcode_sign_in/HEAD/微信小程序前端/assets/todos.png
--------------------------------------------------------------------------------
/微信小程序前端/assets/logs-active.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/edwincai/Wechat_Qrcode_sign_in/HEAD/微信小程序前端/assets/logs-active.png
--------------------------------------------------------------------------------
/微信小程序前端/assets/todos-active.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/edwincai/Wechat_Qrcode_sign_in/HEAD/微信小程序前端/assets/todos-active.png
--------------------------------------------------------------------------------
/微信小程序前端/pages/logs/logs.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {{data.useNname}}
5 | {{data.key}}
--------------------------------------------------------------------------------
/安装部署说明.md:
--------------------------------------------------------------------------------
1 | ## 安装部署说明
2 | 1. 本应用是基于微信环境的微信小程序。发布后可以在微信扫码,扫描小程序码即可自动安装。
3 | 2. 由于审核尚未通过,电脑端展示需要通过微信开发者工具模拟运行。新建一个小程序,将github里面“微信小程序前端”部分代码复制到本地对应目录即可运行。
4 |
--------------------------------------------------------------------------------
/微信小程序前端/pages/index/help.js:
--------------------------------------------------------------------------------
1 | // This is our App Service.
2 | // This is our data
3 | // Register a Page.
4 | Page({
5 | onLoad: function (option) {
6 | console.log(option.query)
7 | }
8 |
9 | })
--------------------------------------------------------------------------------
/微信小程序前端/pages/register/register.json:
--------------------------------------------------------------------------------
1 | {
2 | "navigationBarBackgroundColor": "#ffffff",
3 | "navigationBarTextStyle": "black",
4 | "navigationBarTitleText": "注册用户",
5 | "backgroundColor": "#eeeeee",
6 | "backgroundTextStyle": "light"
7 | }
--------------------------------------------------------------------------------
/微信小程序前端/pages/Detial_Message/Detial_Message.json:
--------------------------------------------------------------------------------
1 | {
2 | "navigationBarBackgroundColor": "#000000",
3 | "navigationBarTextStyle": "white",
4 | "navigationBarTitleText": "签到信息",
5 | "backgroundColor": "#eeeeee",
6 | "backgroundTextStyle": "light"}
--------------------------------------------------------------------------------
/微信小程序前端/pages/Message_1Form/Message_1Form.json:
--------------------------------------------------------------------------------
1 | {
2 | "navigationBarBackgroundColor": "#000000",
3 | "navigationBarTextStyle": "white",
4 | "navigationBarTitleText": "签到信息",
5 | "backgroundColor": "#eeeeee",
6 | "backgroundTextStyle": "light"
7 | }
--------------------------------------------------------------------------------
/微信小程序前端/pages/Message_2Form/Message_2Form.json:
--------------------------------------------------------------------------------
1 | {
2 | "navigationBarBackgroundColor": "#000000",
3 | "navigationBarTextStyle": "white",
4 | "navigationBarTitleText": "签到信息",
5 | "backgroundColor": "#eeeeee",
6 | "backgroundTextStyle": "light"
7 |
8 | }
--------------------------------------------------------------------------------
/微信小程序前端/app.wxss:
--------------------------------------------------------------------------------
1 | @import "weui.wxss"
2 | /**app.wxss**/
3 | .container {
4 | height: 100%;
5 | display: flex;
6 | flex-direction: column;
7 | align-items: center;
8 | justify-content: space-between;
9 | padding: 200rpx 0;
10 | box-sizing: border-box;
11 | }
12 |
--------------------------------------------------------------------------------
/微信小程序前端/pages/index/help.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 扫码签到工具
4 | 签到小工具,适用于培训,会议,旅游,投票的签到。
5 | 使用方法如下:
6 | 1.发起者点击发起签到,输入签到名称,获得二维码
7 | 2.发起者将二维码发送给需签到的人,参与者通过扫
8 | 二维码即可完成签到
9 | 3.发起者可以查看并导出已签到名单
10 | 4.签到者可以修改自己的签到信息
11 |
12 |
13 |
14 |
15 |
16 | 作者:
17 | 白露 马楷强 崔书宇 蔡冠文
18 | 周蕊雨 吴志慧 李文轩 蔡凡
19 |
--------------------------------------------------------------------------------
/微信小程序前端/pages/Detial_Message/Detial_Message.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 签到总人数为:{{list.length}}
4 |
5 | {{item.studentID}}
6 | {{item.studentName}}
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/微信小程序前端/pages/index/index.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 | hello!
4 |
5 |
6 |
7 |
8 |
9 | 发起签到
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 | 扫码签到
19 |
20 |
--------------------------------------------------------------------------------
/微信小程序前端/pages/logs/logs.js:
--------------------------------------------------------------------------------
1 | // pages/leftSwiperDel/index.js
2 | Page({
3 | data: {
4 |
5 | },
6 | onLoad: function (options) {
7 | // 页面初始化 options为页面跳转所带来的参数
8 |
9 | },
10 | onReady: function () {
11 | // 页面渲染完成
12 | },
13 | onShow: function () {
14 | // 页面显示
15 | },
16 | onHide: function () {
17 | // 页面隐藏
18 | },
19 | onUnload: function () {
20 | // 页面关闭
21 | }
22 | //测试临时数据
23 |
24 |
25 |
26 | })
27 |
--------------------------------------------------------------------------------
/微信小程序前端/pages/Message_2Form/Message_2Form.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | 签到总人数为:{{list.length}}
7 |
8 | {{item.topic}}
9 | {{item.startTime}}
10 | {{item.endTime}}
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/微信小程序前端/pages/index/next.wxml:
--------------------------------------------------------------------------------
1 |
2 | 发起签到成功!
3 | \n
4 | 签到主题:
5 | {{temp}}
6 | 签到二维码:
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 | 扫码签到步骤:
15 | 1.从微信小程序中搜索“扫码签到工具”
16 | 2.打开“扫码签到工具”,点击“扫码签到”,扫码。
17 |
18 | 说明:
19 | 点击“获取二维码”预览图片,保存图片到相册后
20 | 即可分享给他人扫码签到
--------------------------------------------------------------------------------
/微信小程序前端/pages/index/next.js:
--------------------------------------------------------------------------------
1 | // This is our App Service.
2 | // This is our data
3 | // Register a Page.
4 | var app = getApp()
5 | Page({
6 | data: {
7 | imgalist: [/*二维码地址*/],
8 | tempFilePaths: app.globalData.url
9 | },
10 | /**
11 | * 预览图片
12 | */
13 | previewImage:function (e) {
14 | var current = e.target.dataset.src;
15 | wx.previewImage({
16 | current: current, // 当前显示图片的http链接
17 | urls: this.data.imgalist // 需要预览的图片http链接列表
18 | })
19 | },
20 |
21 | onLoad: function (option) {
22 | //console.log(option.query)
23 | this.setData({
24 | tempFilePaths: app.globalData.url
25 | })
26 | }
27 |
28 | })
--------------------------------------------------------------------------------
/微信小程序前端/pages/Message_1Form/Message_1Form.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | 发起了{{list.length}}个签到
7 |
8 |
9 |
10 | {{item.state}} {{item.txt}}
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/微信小程序前端/project.config.json:
--------------------------------------------------------------------------------
1 | {
2 | "description": "项目配置文件。",
3 | "packOptions": {
4 | "ignore": []
5 | },
6 | "setting": {
7 | "urlCheck": false,
8 | "es6": true,
9 | "postcss": true,
10 | "minified": true,
11 | "newFeature": true
12 | },
13 | "compileType": "miniprogram",
14 | "libVersion": "2.0.8",
15 | "appid": "wx6c521c83fe3494ca",
16 | "projectname": "%E6%89%AB%E7%A0%81%E7%AD%BE%E5%88%B0",
17 | "condition": {
18 | "search": {
19 | "current": -1,
20 | "list": []
21 | },
22 | "conversation": {
23 | "current": -1,
24 | "list": []
25 | },
26 | "game": {
27 | "currentL": -1,
28 | "list": []
29 | },
30 | "miniprogram": {
31 | "current": -1,
32 | "list": []
33 | }
34 | }
35 | }
--------------------------------------------------------------------------------
/微信小程序前端/pages/index/index.wxss:
--------------------------------------------------------------------------------
1 | /**index.wxss**/
2 | .userinfo {
3 | display: flex;
4 | flex-direction: column;
5 | align-items: center;
6 | }
7 |
8 | .userinfo-avatar {
9 | width: 128rpx;
10 | height: 128rpx;
11 | margin: 20rpx;
12 | border-radius: 50%;
13 | }
14 |
15 | .userinfo-nickname {
16 | color: #aaa;
17 | }
18 |
19 | .usermotto {
20 | margin-top: 200px;
21 | }
22 |
23 | .item-icon{
24 | width: 64rpx;
25 | vertical-align: middle;
26 | margin-right: 16rpx;
27 | display: flex;
28 | justify-content: center;
29 | }
30 |
31 | .item {
32 | display: flex;
33 | justify-content: center;
34 | }
35 |
36 | .text{
37 | width: 100%;
38 | height: 100%;
39 | display: flex;
40 | justify-content: center;
41 | }
--------------------------------------------------------------------------------
/后端php/login.php:
--------------------------------------------------------------------------------
1 | connect_error) {
13 | die("连接失败: " . $conn->connect_error);
14 | }
15 | $conn->query("set names utf8"); //设置php连接数据库用utf8编码,不然中文乱码
16 | $sql = "SELECT * FROM registeruser
17 | WHERE name='$_POST[name]' AND id='$_POST[id]'";
18 |
19 | $result = $conn->query($sql);
20 |
21 | if ($resul)
22 | echo "t";
23 | else
24 | echo "f";
25 |
26 | var_dump($result);
27 | ?>
--------------------------------------------------------------------------------
/后端php/participate.php:
--------------------------------------------------------------------------------
1 | connect_error) {
13 | die("连接失败: " . $conn->connect_error);
14 | }
15 | $conn->query("set names utf8"); //设置php连接数据库用utf8编码,不然中文乱码
16 | $sql = "INSERT INTO signinrecord
17 | VALUES ('$_POST[FormID]', '$_POST[studentID]', '$_POST[studentName]', '$_POST[topic]')";
18 |
19 | $result = $conn->query($sql);
20 | //echo $result;
21 | //var_dump($result);
22 | echo json_encode($_POST);
23 | ?>
--------------------------------------------------------------------------------
/后端php/register.php:
--------------------------------------------------------------------------------
1 | connect_error) {
13 | die("连接失败: " . $conn->connect_error);
14 | }
15 | $conn->query("set names utf8"); //设置php连接数据库用utf8编码,不然中文乱码
16 | $sql = "INSERT INTO registeruser (name, id, university)
17 | VALUES ('$_POST[name]', '$_POST[id]', '$_POST[university]')";
18 | //var_dump($_POST);
19 | $result = $conn->query($sql);
20 |
21 | if ($result)
22 | echo "t";
23 | else
24 | echo "f";
25 | ?>
--------------------------------------------------------------------------------
/后端php/launchsignin.php:
--------------------------------------------------------------------------------
1 | connect_error) {
13 | die("连接失败: " . $conn->connect_error);
14 | }
15 | $conn->query("set names utf8"); //设置php连接数据库用utf8编码,不然中文乱码
16 | $sql = "INSERT INTO signin
17 | VALUES ('$_POST[FormID]', '$_POST[startTime]', '$_POST[endTime]', '$_POST[FormerID]', '$_POST[topic]', '$_POST[content]')";
18 |
19 | $result = $conn->query($sql);
20 | var_dump($result);
21 | var_dump($_POST);
22 | echo $_POST;
23 | ?>
--------------------------------------------------------------------------------
/微信小程序前端/pages/register/register.wxss:
--------------------------------------------------------------------------------
1 | /**index.wxss**/
2 | .userinfo {
3 | display: flex;
4 | flex-direction: column;
5 | align-items: center;
6 | }
7 |
8 | .userinfo-avatar {
9 | width: 128rpx;
10 | height: 128rpx;
11 | margin: 20rpx;
12 | border-radius: 50%;
13 | }
14 |
15 | .userinfo-nickname {
16 | color: #aaa;
17 | }
18 |
19 | .usermotto {
20 | margin-top: 200px;
21 | }
22 |
23 | .login_info{
24 | z-index: 999;
25 | position:absolute;
26 | }
27 | .login_form{
28 | border-radius:5px;
29 | margin-left:8%;
30 | background-color: rgba(255,255,255,0.2);
31 | }
32 |
33 | .login_info{
34 | z-index: 999;
35 | position:absolute;
36 | }
37 | .login_form{
38 | border-radius:5px;
39 | margin-left:8%;
40 | background-color: rgba(255,255,255,0.2);
41 | }
--------------------------------------------------------------------------------
/后端php/delete.php:
--------------------------------------------------------------------------------
1 | connect_error) {
13 | die("连接失败: " . $conn->connect_error);
14 | }
15 | $conn->query("set names utf8"); //设置php连接数据库用utf8编码,不然中文乱码
16 |
17 | //删除signin表中一条记录
18 | $sql = "DELETE FROM signin WHERE FormID='$_POST[FormID]'";
19 | $result1 = $conn->query($sql);
20 |
21 | //var_dump(FormID);
22 |
23 | //删除表signinrecord中所有FormID的记录
24 | $sql = "DELETE FROM signinrecord WHERE FormID='$_POST[FormID]'";
25 | $result2 = $conn->query($sql);
26 |
27 | echo $result1 && $result2;
28 | ?>
--------------------------------------------------------------------------------
/后端php/lookupdetail.php:
--------------------------------------------------------------------------------
1 | connect_error) {
13 | die("连接失败: " . $conn->connect_error);
14 | }
15 | $conn->query("set names utf8"); //设置php连接数据库用utf8编码,不然中文乱码
16 | $sql = "SELECT * FROM signinrecord
17 | WHERE FormID='$_POST[FormID]'";
18 |
19 | //查询数据库,结果集保存在result中
20 | $result = $conn->query($sql);
21 |
22 | //json化此数组,返回数据给微信
23 | $arr = [];
24 | //var_dump($arr);
25 |
26 | //把数据库拿到的结果集转化成数组
27 | if ($result){
28 | while ($row = $result->fetch_assoc())
29 | $arr[] = $row;
30 | }
31 |
32 | //返回给微信的json数据,注意json接受的参数只能是数组或者对象
33 | echo json_encode($arr);
34 | ?>
--------------------------------------------------------------------------------
/微信小程序前端/pages/logs/logs.wxss:
--------------------------------------------------------------------------------
1 | /* pages/leftSwiperDel/index.wxss */
2 | view{
3 | box-sizing: border-box;
4 | }
5 | .item-box{
6 | width: 700rpx;
7 | margin: 0 auto;
8 | padding:40rpx 0;
9 | }
10 | .items{
11 | width: 100%;
12 | }
13 | .item{
14 | position: relative;
15 | border-top: 2rpx solid #eee;
16 | height: 120rpx;
17 | line-height: 120rpx;
18 | overflow: hidden;
19 |
20 | }
21 | .item:last-child{
22 | border-bottom: 2rpx solid #eee;
23 | }
24 | .inner{
25 | position: absolute;
26 | top:0;
27 | }
28 | .inner.txt{
29 | background-color: #fff;
30 | width: 100%;
31 | z-index: 5;
32 | padding:0 10rpx;
33 | transition: left 0.2s ease-in-out;
34 | white-space:nowrap;
35 | overflow:hidden;
36 | text-overflow:ellipsis;
37 | }
38 | .inner.del{
39 | background-color: #e64340;
40 | width: 180rpx;text-align: center;
41 | z-index: 4;
42 | right: 0;
43 | color: #fff
44 | }
45 | .item-icon{
46 | width: 64rpx;
47 | vertical-align: middle;
48 | margin-right: 16rpx
49 | }
50 | .thumb{
51 | width: 200px;
52 | height: 200px;
53 | -webkit-overflow-scrolling: touch;
54 | overflow: scroll;
55 | }
--------------------------------------------------------------------------------
/微信小程序前端/app.js:
--------------------------------------------------------------------------------
1 | //app.js
2 | App({
3 | onLaunch: function () {
4 | // 展示本地存储能力
5 | var logs = wx.getStorageSync('logs') || []
6 | logs.unshift(Date.now())
7 | wx.setStorageSync('logs', logs)
8 |
9 | // 登录
10 | wx.login({
11 | success: res => {
12 | // 发送 res.code 到后台换取 openId, sessionKey, unionId
13 | }
14 | })
15 | // 获取用户信息
16 | wx.getSetting({
17 | success: res => {
18 | if (res.authSetting['scope.userInfo']) {
19 | // 已经授权,可以直接调用 getUserInfo 获取头像昵称,不会弹框
20 | wx.getUserInfo({
21 | success: res => {
22 | // 可以将 res 发送给后台解码出 unionId
23 | this.globalData.userInfo = res.userInfo
24 |
25 | // 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回
26 | // 所以此处加入 callback 以防止这种情况
27 | if (this.userInfoReadyCallback) {
28 | this.userInfoReadyCallback(res)
29 | }
30 | }
31 | })
32 | }
33 | }
34 | })
35 | },
36 | globalData: {
37 | userInfo: null,
38 | wxId: 123,
39 | name: "",
40 | num: "",
41 | school: "",
42 | test:0,
43 | inner:"",
44 | url:"",
45 | },
46 | User: {
47 |
48 | }
49 | })
--------------------------------------------------------------------------------
/微信小程序前端/app.json:
--------------------------------------------------------------------------------
1 | {
2 | "pages": [
3 | "pages/index/index",
4 | "pages/logs/logs",
5 | "pages/Message_1Form/Message_1Form",
6 | "pages/Message_2Form/Message_2Form",
7 | "pages/index/ini",
8 | "pages/index/next",
9 | "pages/index/help",
10 | "pages/Detial_Message/Detial_Message",
11 | "pages/register/register"
12 | ],
13 | "window": {
14 | "backgroundTextStyle": "light",
15 | "navigationBarBackgroundColor": "#fff",
16 | "navigationBarTitleText": "WeChat",
17 | "navigationBarTextStyle": "black"
18 | },
19 | "tabBar": {
20 | "color": "#999",
21 | "selectedColor": "#222",
22 | "backgroundColor": "#f8f9fb",
23 | "borderStyle": "white",
24 | "list": [
25 | {
26 | "pagePath": "pages/index/index",
27 | "text": "主页",
28 | "iconPath": "assets/todos.png",
29 | "selectedIconPath": "assets/todos-active.png"
30 | },
31 | {
32 | "pagePath": "pages/Message_1Form/Message_1Form",
33 | "text": "已发起",
34 | "iconPath": "assets/logs.png",
35 | "selectedIconPath": "assets/logs-active.png"
36 | },
37 | {
38 | "pagePath": "pages/Message_2Form/Message_2Form",
39 | "text": "已签到",
40 | "iconPath": "assets/logs.png",
41 | "selectedIconPath": "assets/logs-active.png"
42 | },
43 | {
44 | "pagePath": "pages/index/help",
45 | "text": "帮助",
46 | "iconPath": "assets/logs.png",
47 | "selectedIconPath": "assets/logs-active.png"
48 | }
49 | ]
50 | }
51 | }
--------------------------------------------------------------------------------
/后端php/lookup.php:
--------------------------------------------------------------------------------
1 | connect_error) {
13 | die("连接失败: " . $conn->connect_error);
14 | }
15 | $conn->query("set names utf8"); //设置php连接数据库用utf8编码,不然中文乱码
16 | //$date = date("Y/m/d H:i:s", time() + 3600 * 6); //时间比本地时间慢了6个小时,加上
17 | //var_dump($date);
18 | /* $sql = "INSERT INTO sign (name, date)
19 | VALUES ('语文', '$date')";
20 | $result = $conn->query($sql); */
21 | //var_dump($result);
22 |
23 | /* $conn = new mysqli($servername, $username, $password, $dbname);
24 | $sql = "SELECT * FROM Myguests";
25 | $result = $conn->query($sql); */
26 |
27 | $sql = "SELECT * FROM signin
28 | WHERE FormerID='$_POST[FormerID]'";
29 | //var_dump($_POST);
30 |
31 | //查询数据库,结果集保存在result中
32 | $result = $conn->query($sql);
33 |
34 | //json化此数组,返回数据给微信
35 | $arr = [];
36 | //var_dump($arr);
37 |
38 | //把数据库拿到的结果集转化成数组
39 | if ($result){
40 | while ($row = $result->fetch_assoc())
41 | $arr[] = $row;
42 | }
43 | //echo $arr[];
44 | //var_dump($arr);
45 | //var_dump(json_encode($arr));
46 | //$a = ['1'=>1, '2'=>['2'=>34, '3a'=>'da'], '3v'=>'bgf'];
47 | //var_dump($a);
48 | //var_dump(json_encode($a));
49 |
50 | //返回给微信的json数据,注意json接受的参数只能是数组或者对象
51 | echo json_encode($arr);
52 | $conn->close();
53 | ?>
--------------------------------------------------------------------------------
/微信小程序前端/pages/Detial_Message/Detial_Message.js:
--------------------------------------------------------------------------------
1 | // pages/Detial_Message/Detial_Message.js
2 | Page({
3 |
4 | /**
5 | * 页面的初始数据
6 | */
7 | data: {
8 | str: '',
9 | key: '',
10 | list : ""
11 | },
12 |
13 | /**
14 | * 生命周期函数--监听页面加载
15 | */
16 | onLoad: function (options) {
17 | this.setData({
18 | str: options.detail
19 | })
20 | var str = this.data.str;
21 | var that = this;
22 |
23 | wx.request({
24 | url: 'http://172.18.159.50/lookupdetail.php',
25 | data: {
26 | FormID: str,
27 | },
28 | method: 'POST',
29 | header: {
30 | "Content-Type": "application/x-www-form-urlencoded"
31 | },
32 | success: function (res) {
33 | var list = new Array();
34 | list = res.data;
35 | that.setData({
36 | list: list
37 | });
38 | }
39 | })
40 | },
41 |
42 | /**
43 | * 生命周期函数--监听页面初次渲染完成
44 | */
45 | onReady: function () {
46 |
47 | },
48 |
49 | /**
50 | * 生命周期函数--监听页面显示
51 | */
52 | onShow: function () {
53 |
54 | },
55 |
56 | /**
57 | * 生命周期函数--监听页面隐藏
58 | */
59 | onHide: function () {
60 |
61 | },
62 |
63 | /**
64 | * 生命周期函数--监听页面卸载
65 | */
66 | onUnload: function () {
67 |
68 | },
69 |
70 | /**
71 | * 页面相关事件处理函数--监听用户下拉动作
72 | */
73 | onPullDownRefresh: function () {
74 |
75 | },
76 |
77 | /**
78 | * 页面上拉触底事件的处理函数
79 | */
80 | onReachBottom: function () {
81 |
82 | },
83 |
84 | /**
85 | * 用户点击右上角分享
86 | */
87 | onShareAppMessage: function () {
88 |
89 | }
90 | })
91 |
--------------------------------------------------------------------------------
/微信小程序前端/pages/index/ini.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
61 |
62 |
63 |
64 |
--------------------------------------------------------------------------------
/微信小程序前端/pages/Detial_Message/Detial_Message.wxss:
--------------------------------------------------------------------------------
1 | /* pages/Message_1Form/Message_1Form.wxss */
2 | .InitialFindButton {
3 | width: 50%;
4 | margin-top: 30rpx;
5 | background-color: #eee;
6 | color: #000;
7 | float: left;
8 | }
9 | .Sign_inFindButton {
10 | width: 50%;
11 | margin-top: 30rpx;
12 | background-color: #eee;
13 | color: #000;
14 | float: right;
15 | }
16 | .button {
17 | width: 33%;
18 | margin-top: 30rpx;
19 | background-color: #eee;
20 | color: #000;
21 | float: left;
22 | position:fixed;
23 | left: 33%;
24 | bottom:0;
25 | }
26 | view{
27 | box-sizing: border-box;
28 | }
29 | .item-box{
30 | width: 700rpx;
31 | margin: 0 auto;
32 | padding:40rpx 0;
33 | }
34 | .items{
35 | width: 100%;
36 | }
37 | .item{
38 | position: relative;
39 | border-top: 2rpx solid #eee;
40 | height: 120rpx;
41 | line-height: 120rpx;
42 | overflow: hidden;
43 | }
44 | .item:last-child{
45 | border-bottom: 2rpx solid #eee;
46 | }
47 |
48 | .ID{
49 | background-color: #fff;
50 | width: 50%;
51 | z-index: 5;
52 | padding:0 10rpx;
53 | transition: left 0.2s ease-in-out;
54 | white-space:nowrap;
55 | overflow:hidden;
56 | text-overflow:ellipsis;
57 | color: red;
58 | }
59 |
60 | .NAME{
61 | background-color: #fff;
62 | width: 50%;
63 | z-index: 5;
64 | padding:0 10rpx;
65 | transition: left 0.2s ease-in-out;
66 | white-space:nowrap;
67 | overflow:hidden;
68 | text-overflow:ellipsis;
69 | color: blue;
70 | }
71 |
72 | .TOPIC{
73 | background-color: #fff;
74 | width: 50%;
75 | z-index: 5;
76 | padding:0 10rpx;
77 | transition: left 0.2s ease-in-out;
78 | white-space:nowrap;
79 | overflow:hidden;
80 | text-overflow:ellipsis;
81 | color: green;
82 | }
83 |
--------------------------------------------------------------------------------
/微信小程序前端/pages/Message_2Form/Message_2Form.wxss:
--------------------------------------------------------------------------------
1 | /* pages/Message_1Form/Message_1Form.wxss */
2 | .InitialFindButton {
3 | width: 50%;
4 | margin-top: 30rpx;
5 | background-color: #eee;
6 | color: #000;
7 | float: left;
8 | }
9 | .Sign_inFindButton {
10 | width: 50%;
11 | margin-top: 30rpx;
12 | background-color: #eee;
13 | color: #000;
14 | float: right;
15 | }
16 | .button {
17 | width: 33%;
18 | margin-top: 30rpx;
19 | background-color: #eee;
20 | color: #000;
21 | float: left;
22 | position:fixed;
23 | left: 33%;
24 | bottom:0;
25 | }
26 | view{
27 | box-sizing: border-box;
28 | }
29 | .item-box{
30 | width: 700rpx;
31 | margin: 0 auto;
32 | padding:40rpx 0;
33 | }
34 | .items{
35 | width: 100%;
36 | }
37 | .item{
38 | position: relative;
39 | border-top: 2rpx solid #eee;
40 | height: 120rpx;
41 | line-height: 120rpx;
42 | overflow: hidden;
43 | }
44 | .item:last-child{
45 | border-bottom: 2rpx solid #eee;
46 | }
47 |
48 | .ID{
49 | background-color: #fff;
50 | width: 50%;
51 | z-index: 5;
52 | padding:0 10rpx;
53 | transition: left 0.2s ease-in-out;
54 | white-space:nowrap;
55 | overflow:hidden;
56 | text-overflow:ellipsis;
57 | color: red;
58 | }
59 |
60 | .NAME{
61 | background-color: #fff;
62 | width: 50%;
63 | z-index: 5;
64 | padding:0 10rpx;
65 | transition: left 0.2s ease-in-out;
66 | white-space:nowrap;
67 | overflow:hidden;
68 | text-overflow:ellipsis;
69 | color: blue;
70 | }
71 |
72 | .TOPIC{
73 | background-color: #fff;
74 | width: 50%;
75 | z-index: 5;
76 | padding:0 10rpx;
77 | transition: left 0.2s ease-in-out;
78 | white-space:nowrap;
79 | overflow:hidden;
80 | text-overflow:ellipsis;
81 | color: green;
82 | }
83 |
--------------------------------------------------------------------------------
/微信小程序前端/utils/util.js:
--------------------------------------------------------------------------------
1 | const formatTime = date => {
2 | const year = date.getFullYear()
3 | const month = date.getMonth() + 1
4 | const day = date.getDate()
5 | const hour = date.getHours()
6 | const minute = date.getMinutes()
7 | const second = date.getSeconds()
8 |
9 | return [year, month, day].map(formatNumber).join('/') + ' ' + [hour, minute, second].map(formatNumber).join(':')
10 | }
11 |
12 | const formatNumber = n => {
13 | n = n.toString()
14 | return n[1] ? n : '0' + n
15 | }
16 |
17 | function req(url, data, cb) {
18 | wx.request({
19 | url: url,
20 | data: data,
21 | method: 'post',
22 | header: { 'Content-Type': 'application/x-www-form-urlencoded' },
23 | success: function (res) {
24 | console.log(res.data)
25 | return typeof cb == "function" && cb(res.data)
26 | },
27 | fail: function () {
28 | return typeof cb == "function" && cb(false)
29 | }
30 | })
31 | }
32 |
33 | function getReq(url, data, cb) {
34 | wx.request({
35 | url: url,
36 | data: data,
37 | method: 'get',
38 | header: { 'Content-Type': 'application/x-www-form-urlencoded' },
39 | success: function (res) {
40 | return typeof cb == "function" && cb(res.data)
41 | },
42 | fail: function () {
43 | return typeof cb == "function" && cb(false)
44 | }
45 | })
46 | }
47 |
48 | // 去前后空格
49 | function trim(str) {
50 | return str.replace(/(^\s*)|(\s*$)/g, "");
51 | }
52 |
53 | // 提示错误信息
54 | function isError(msg, that) {
55 | that.setData({
56 | showTopTips: true,
57 | errorMsg: msg
58 | })
59 | }
60 |
61 | // 清空错误信息
62 | function clearError(that) {
63 | that.setData({
64 | showTopTips: false,
65 | errorMsg: ""
66 | })
67 | }
68 |
69 | module.exports = {
70 | formatTime: formatTime,
71 | req: req,
72 | trim: trim,
73 | isError: isError,
74 | clearError: clearError,
75 | getReq: getReq
76 | }
77 |
--------------------------------------------------------------------------------
/后端php/lookparticipate.php:
--------------------------------------------------------------------------------
1 | connect_error) {
13 | die("连接失败: " . $conn->connect_error);
14 | }
15 | $conn->query("set names utf8"); //设置php连接数据库用utf8编码,不然中文乱码
16 | $sql = "SELECT * FROM signinrecord
17 | WHERE studentID='$_POST[studentID]' AND studentName='$_POST[studentName]'";
18 |
19 | //查询数据库,结果集保存在result中
20 | $result = $conn->query($sql);
21 |
22 | //保存所有含有本学生信息的signinrecord记录,
23 | $arr = [];
24 | //var_dump($arr);
25 |
26 | //把数据库拿到的结果集转化成数组
27 | if ($result){
28 | while ($row = $result->fetch_assoc())
29 | $arr[] = $row;
30 | }
31 | //var_dump($arr);
32 | //echo "
";
33 | //保存所有不同的FormID字段值的数组,目的是删去arr中重复的FormID
34 | $formid = [];
35 |
36 | foreach ($arr as $value){
37 | // if (!in_array($value['FormID'], $formid){
38 | // $formid = $value['FormID'];
39 | // }
40 | //echo $value['FormID'];
41 | if (!in_array($value['FormID'], $formid)){
42 | $formid[] = $value['FormID'];
43 | }
44 |
45 | }
46 | //echo "
";
47 | //var_dump($formid);
48 | $result = []; //返回给微信的参与签到信息数组
49 |
50 | foreach ($formid as $value){
51 | $sql = "SELECT * FROM signin
52 | WHERE FormID='$value'";
53 | $request = $conn->query($sql); //查询结果集
54 | //echo "
";
55 | //var_dump($request);
56 | if ($request){
57 | //echo "aa";
58 | //var_dump($request);
59 | while ($row = $request->fetch_assoc())
60 | //var_dump($row);
61 | $result[] = $row;
62 | }
63 | }
64 |
65 | //var_dump($result);
66 | //echo "
";
67 | //var_dump($formid);
68 | //echo "
";
69 | //
70 | //返回给微信的json数据,注意json接受的参数只能是数组或者对象
71 | echo json_encode($result);
72 | //var_dump($result);
73 | ?>
--------------------------------------------------------------------------------
/微信小程序前端/pages/index/ini.wxss:
--------------------------------------------------------------------------------
1 | /* pages/ini/ini.wxss */
2 | .container {
3 | max-width:100%;
4 | }
5 | .block-1{
6 | width: 100%;
7 | background-color:whitesmoke;
8 | margin-top: -150rpx;
9 | display: block;
10 | }
11 | .block-2{
12 | width: 98%;
13 | background-color: blanchedalmond;
14 | margin-top: 1%;
15 | margin-left:1%;
16 | height:30pt;
17 | display: block;
18 | }
19 | .block-3{
20 | width: 30%;
21 | background-color:white;
22 | height:30pt;
23 | display: block;
24 | float:left;
25 |
26 | font-size: 10pt;
27 | color: #353535;
28 | text-align: right;
29 | }
30 | .block-4{
31 | width: 70%;
32 | background-color: white;
33 | height:30pt;
34 | display: block;
35 | float: right;
36 | }
37 | .block-5{
38 | width: 98%;
39 | background-color: white;
40 | margin-top: 1%;
41 | margin-left:1%;
42 | height:80pt;
43 | display: block;
44 | }
45 | .text-1 {
46 | padding-right:5%;
47 | padding-top:10%;
48 | }
49 | .text-2 {
50 | padding-left:2%;
51 | padding-top:1%;
52 | margin-top:3%;
53 | margin-right: 2%;
54 |
55 | width: 95%;
56 | background-color: gainsboro;
57 | height:18pt;
58 | display: block;
59 | float: right;
60 | }
61 | .text-3 {
62 | padding-left:2%;
63 | padding-top:1%;
64 | margin-top:3%;
65 | margin-right: 2%;
66 |
67 | width: 95%;
68 | background-color: gainsboro;
69 | height:70pt;
70 | display: block;
71 | float: right;
72 | }
73 | .e {
74 | width:100%;
75 | text-align: right;
76 | display: block;
77 | float: left;
78 | background-color: white;
79 | margin-top:1%;
80 | line-height: 80rpx;
81 | }
82 | .temp{
83 | padding-right: 2%;
84 | }
85 | .button {
86 | background-color: green;
87 | margin-top: 3pt;
88 | }
89 | textarea{
90 | border: 1px lightgray solid;
91 | width:96%;
92 | margin-top:1%;
93 | height: 88%;
94 | }
95 |
--------------------------------------------------------------------------------
/微信小程序前端/pages/register/register.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | {{errorMsg}}
7 |
8 |
9 |
10 |
11 |
12 | {{userInfo.nickName}}
13 |
14 |
15 |
16 |
17 |
46 |
47 |
--------------------------------------------------------------------------------
/微信小程序前端/pages/Message_1Form/Message_1Form.wxss:
--------------------------------------------------------------------------------
1 | /* pages/Message_1Form/Message_1Form.wxss */
2 | .InitialFindButton {
3 | width: 50%;
4 | margin-top: 30rpx;
5 | background-color: #eee;
6 | color: #000;
7 | float: left;
8 | }
9 | .Sign_inFindButton {
10 | width: 50%;
11 | margin-top: 30rpx;
12 | background-color: #eee;
13 | color: #000;
14 | float: right;
15 | }
16 | view{
17 | box-sizing: border-box;
18 | }
19 | .item-box{
20 | width: 700rpx;
21 | margin: 0 auto;
22 | padding:40rpx 0;
23 | }
24 | .items{
25 | width: 100%;
26 | }
27 | .item{
28 | position: relative;
29 | border-top: 2rpx solid #eee;
30 | height: 120rpx;
31 | line-height: 120rpx;
32 | overflow: hidden;
33 | }
34 | .item:last-child{
35 | border-bottom: 2rpx solid #eee;
36 | }
37 | .inner{
38 | position: absolute;
39 | top:0;
40 | }
41 | .inner.txt{
42 | background-color: #fff;
43 | width: 100%;
44 | z-index: 5;
45 | padding:0 10rpx;
46 | transition: left 0.2s ease-in-out;
47 | white-space:nowrap;
48 | overflow:hidden;
49 | text-overflow:ellipsis;
50 | }
51 | .inner.del{
52 | background-color: #e64340;
53 | width: 180rpx;text-align: center;
54 | z-index: 4;
55 | right: 0;
56 | color: #fff;
57 | }
58 | .inner.out{
59 | background-color: #001340;
60 | width: 180rpx;text-align: center;
61 | z-index: 4;
62 | right: 180rpx;
63 | color: #fff;
64 | }
65 | .IfEnd{
66 | width: 20%;
67 | text-align: center;
68 | }
69 |
70 | .thumb{
71 | width: 200px;
72 | height: 200px;
73 | -webkit-overflow-scrolling: touch;
74 | overflow: scroll;
75 | }
76 |
77 | #ongoing{
78 | color: red;
79 | }
80 | #end{
81 | color: green;
82 | }
83 | .total{
84 | text-align: center;
85 | color: blue;
86 | }
87 |
88 | .bright789-text{
89 | font-size: 40rpx;
90 | line-height: 40px;
91 | color: #ff0000;
92 | }
93 | .bright789_view_hide{
94 | display: none;
95 | }
96 | .bright789_view_show{
97 | display: block;
98 | }
--------------------------------------------------------------------------------
/微信小程序前端/pages/Message_2Form/Message_2Form.js:
--------------------------------------------------------------------------------
1 | // pages/Message_2Form/Message_2Form.js
2 | Page({
3 |
4 | /**
5 | * 页面的初始数据
6 | */
7 | data: {
8 | list : ""
9 | },
10 |
11 | /**
12 | * 生命周期函数--监听页面加载
13 | */
14 | onLoad: function (options) {
15 | this.getConnectToDB();
16 | },
17 |
18 | /**
19 | * 生命周期函数--监听页面初次渲染完成
20 | */
21 | onReady: function () {
22 |
23 | },
24 |
25 | /**
26 | * 生命周期函数--监听页面显示
27 | */
28 | onShow: function () {
29 |
30 | },
31 |
32 | /**
33 | * 生命周期函数--监听页面隐藏
34 | */
35 | onHide: function () {
36 |
37 | },
38 |
39 | /**
40 | * 生命周期函数--监听页面卸载
41 | */
42 | onUnload: function () {
43 |
44 | },
45 |
46 | /**
47 | * 页面相关事件处理函数--监听用户下拉动作
48 | */
49 | onPullDownRefresh: function () {
50 |
51 | },
52 |
53 | /**
54 | * 页面上拉触底事件的处理函数
55 | */
56 | onReachBottom: function () {
57 |
58 | },
59 |
60 | /**
61 | * 用户点击右上角分享
62 | */
63 | onShareAppMessage: function () {
64 |
65 | },
66 | //查看已发起
67 | InitialFind: function (e) {
68 | this.getConnectToDB();
69 | wx.switchTab({
70 | url: '../Message_1Form/Message_1Form'
71 | })
72 | },
73 |
74 | //查看已签到
75 | Sign_inFind: function (e) {
76 | wx.switchTab({
77 | url: '../Message_2Form/Message_2Form'
78 | })
79 | },
80 |
81 | //与数据库连接,更新列表
82 | getConnectToDB : function () {
83 | var that = this;
84 | wx.request({
85 | url: 'http://172.18.159.50/lookparticipate.php',
86 | method: 'POST',
87 | data: {
88 | studentID: getApp().globalData.num,
89 | studentName :getApp().globalData.name
90 | },
91 | header: {
92 | "Content-Type": "application/x-www-form-urlencoded"
93 | },
94 | success : function(res) {
95 | console.log(res.data)
96 | var list = new Array();
97 | list = res.data;
98 | that.setData({
99 | list: list
100 | })
101 | },
102 |
103 | })
104 | }
105 | })
--------------------------------------------------------------------------------
/微信小程序前端/pages/index/index.js:
--------------------------------------------------------------------------------
1 | //index.js
2 | //获取应用实例
3 | const app = getApp()
4 |
5 | Page({
6 | data: {
7 | motto: 'Hello World',
8 | userInfo: {},
9 | hasUserInfo: false,
10 | canIUse: wx.canIUse('button.open-type.getUserInfo'),
11 | },
12 | //事件处理函数
13 | bindViewTap: function() {
14 | },
15 | onLoad: function () {
16 | if (getApp().globalData.test == 0) {
17 | wx.redirectTo({
18 | url: '../register/register'
19 | })
20 | getApp().globalData.test = getApp().globalData.test + 1
21 | }
22 | if (app.globalData.userInfo) {
23 | this.setData({
24 | userInfo: app.globalData.userInfo,
25 | hasUserInfo: true
26 | })
27 | } else if (this.data.canIUse){
28 | // 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回
29 | // 所以此处加入 callback 以防止这种情况
30 | app.userInfoReadyCallback = res => {
31 | this.setData({
32 | userInfo: res.userInfo,
33 | hasUserInfo: true
34 | })
35 | }
36 | } else {
37 | // 在没有 open-type=getUserInfo 版本的兼容处理
38 | wx.getUserInfo({
39 | success: res => {
40 | app.globalData.userInfo = res.userInfo
41 | this.setData({
42 | userInfo: res.userInfo,
43 | hasUserInfo: true
44 | })
45 | }
46 | })
47 | }
48 | },
49 | getUserInfo: function(e) {
50 | console.log(e)
51 | app.globalData.userInfo = e.detail.userInfo
52 | this.setData({
53 | userInfo: e.detail.userInfo,
54 | hasUserInfo: true
55 | })
56 | },
57 |
58 | InitialSignIn : function() {
59 | wx.navigateTo({
60 | url:'ini'
61 | })
62 |
63 | },
64 | scan : function() {
65 | wx.scanCode({
66 | success: (res) => {
67 | console.log(res)
68 |
69 | var str = res.result;
70 | var arr = str.split("*");
71 |
72 | wx.request({
73 | url: "http://172.18.159.50/participate.php",
74 | //str=”jpg|bmp | gif | ico | png”; arr = str.split(”|”);
75 |
76 |
77 | data: {
78 |
79 | FormID:arr[0],
80 | studentID:app.globalData.num,
81 | studentName:app.globalData.name,
82 | topic:arr[1],
83 | },
84 |
85 | method: "POST",
86 |
87 | header: {
88 | "Content-type": "application/x-www-form-urlencoded"
89 | },
90 |
91 | success: function (res) {
92 | wx.showToast({
93 | title: '签到成功',
94 | icon: 'none',
95 | duration: 2000
96 | })
97 | console.log(res);
98 | console.log("succ");
99 | },
100 | fail: function (res) {
101 | wx.showToast({
102 | title: '签到失败',
103 | icon: 'none',
104 | duration: 2000
105 | })
106 | console.log(this.record);
107 | console.log("failed");
108 | }
109 | });
110 | }
111 | })
112 | }
113 | })
114 |
--------------------------------------------------------------------------------
/微信小程序前端/pages/register/register.js:
--------------------------------------------------------------------------------
1 | //index.js
2 | //获取应用实例
3 | const app = getApp();
4 | var util = require('../../utils/util.js');
5 |
6 | Page({
7 | data: {
8 | motto: '',
9 | userInfo: {},
10 | hasUserInfo: false,
11 | canIUse: wx.canIUse('button.open-type.getUserInfo')
12 | },
13 | //事件处理函数
14 | onLoad: function () {
15 | if (app.globalData.userInfo) {
16 | this.setData({
17 | userInfo: app.globalData.userInfo,
18 | hasUserInfo: true
19 | })
20 | } else if (this.data.canIUse){
21 | // 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回
22 | // 所以此处加入 callback 以防止这种情况
23 | app.userInfoReadyCallback = res => {
24 | this.setData({
25 | userInfo: res.userInfo,
26 | hasUserInfo: true
27 | })
28 | }
29 | } else {
30 | // 在没有 open-type=getUserInfo 版本的兼容处理
31 | wx.getUserInfo({
32 | success: res => {
33 | app.globalData.userInfo = res.userInfo
34 | this.setData({
35 | userInfo: res.userInfo,
36 | hasUserInfo: true
37 | })
38 | }
39 | })
40 | }
41 | //获取用户信息,并将其放入全局变量name,num,school中
42 | wx.getStorage({
43 | key: 'UserName',
44 | //检测是否曾经登陆过该程序,如果有直接调转入主界面中
45 | success: function(res) {
46 | getApp().globalData.name = res.data
47 | getApp().globalData.num = wx.getStorageSync('UserId')
48 | getApp().globalData.school = wx.getStorageSync('UserSchool')
49 | wx.switchTab({
50 | url: '../index/index',
51 | })
52 | },
53 | fail:function() {
54 |
55 | }
56 | })
57 |
58 | },
59 | getUserInfo: function(e) {
60 | console.log(e)
61 | app.globalData.userInfo = e.detail.userInfo
62 | this.setData({
63 | userInfo: e.detail.userInfo,
64 | hasUserInfo: true
65 | })
66 | },
67 |
68 | formSubmit:function(x) {
69 | //定义姓名,学号,学校
70 | var name = x.detail.value.name;
71 | var num = x.detail.value.num;
72 | var school = x.detail.value.school;
73 | var that = this;
74 | //姓名是否为空
75 | if (("" == util.trim(name)) || ("" == util.trim(num)) || (("" == util.trim(school)))) {
76 | util.isError("信息不能为空", that);
77 | return;
78 | } else {
79 | util.clearError(that);
80 | }
81 |
82 | //向数据库上传用户信息
83 | wx.request({
84 | url: 'http://172.18.159.50/register.php',
85 | data:{
86 | name:name,
87 | id:num,
88 | university:school
89 | },
90 | method: 'POST',
91 | header: { 'Content-Type': 'application/x-www-form-urlencoded' },
92 | success:function (res) {
93 | console.log(name);
94 | console.log(res.data);
95 | //将用户信息导入缓存
96 | wx.setStorageSync('UserName', name);
97 | wx.setStorageSync('UserId', num);
98 | wx.setStorageSync('UserSchool', school);
99 | getApp().globalData.name = name;
100 | getApp().globalData.num = num;
101 | getApp().globalData.school = school;
102 |
103 | wx.showModal({
104 | title: '注册状态',
105 | content: '注册成功,点击确认进入主页',
106 | success: function (res) {
107 | if (res.confirm) {
108 | // 点击确定后跳转登录页面并关闭当前页面
109 | wx.switchTab({
110 | url: '../index/index'
111 | })
112 | }
113 | }
114 | })
115 | }
116 | })
117 | }
118 | })
119 |
--------------------------------------------------------------------------------
/微信小程序前端/pages/index/ini.js:
--------------------------------------------------------------------------------
1 | // pages/ini/ini.js
2 | var util = require('../../utils/util.js');
3 | var status = true;
4 | var inputTopic = "";
5 | var app = getApp()
6 | Page({
7 |
8 | /**
9 | * 页面的初始数据
10 | */
11 | data: {
12 | test:"",
13 | logs: [],
14 | topic: "",
15 | inputTopic: "a",
16 | inputActivity:"",
17 | inputTime:"12:00",
18 | time:"",
19 | stime:"",
20 | endtime:"",
21 | show: "",
22 | show1:"",
23 | show2:"?",
24 | src:"",
25 | status: status,
26 | tempFilePaths: 'http://qr.liantu.com/api.php?text=a',
27 | imgwidth: 0,
28 | imgheight: 0,
29 | temp: app.globalData.inner,
30 | formID:"",
31 | formerID:"",
32 | num: app.globalData.num,
33 | name: app.globalData.name,
34 | },
35 |
36 | /**
37 | * 生命周期函数--监听页面加载
38 | */
39 | onLoad: function (options) {
40 | //this.getdata();
41 | //setData({
42 | // temp : app.globalData.inner
43 | //})
44 | //app.global.Data.inner = inputTopic
45 | var stime = util.formatTime(new Date());
46 | this.setData({
47 | stime: stime
48 | });
49 | console.log(stime);
50 | },
51 |
52 | bindTimeChange: function (e) {
53 | this.endtime = e.detail.value;
54 | this.setData({
55 | inputTime: e.detail.value,
56 | endtime: e.detail.value,
57 | })
58 | //console.log(this.endtime);
59 | //console.log(e.detail.value);
60 | },
61 | bindInput_1: function(e) {
62 | this.inputTopic = e.detail.value;
63 | this.setData({
64 | inputTopic: e.detail.value,
65 | })
66 | },
67 | bindInput_2: function (e) {
68 | this.inputActivity = e.detail.value;
69 | this.setData({
70 | inputActivity: e.detail.value
71 | })
72 | },
73 | formSubmit: function(e) {
74 | if (e.detail.value.topic.length==0&&e.detail.value.endtime.length==0) {
75 | wx.showToast({
76 | title: '签到主题和结束时间不能为空',
77 | icon: 'none',
78 | duration: 2000
79 | })
80 | }
81 | else if(e.detail.value.topic.length==0) {
82 | wx.showToast({
83 | title: '签到主题不能为空',
84 | icon: 'none',
85 | duration: 2000
86 | })
87 | }
88 | else if (e.detail.value.endtime.length == 0) {
89 | wx.showToast({
90 | title: '结束时间不能为空',
91 | icon: 'none',
92 | duration: 2000
93 | })
94 | }
95 | else {
96 | var that = this;
97 | var a = "http://qr.liantu.com/api.php?text=";
98 | var t1 = e.detail.value.topic + e.detail.value.endtime;
99 | var t2 = a + t1 + "*" + e.detail.value.topic;
100 | this.tempFilePaths = t2;
101 | this.formID = t1;
102 | this.setData({
103 | tempFilePaths: t2,
104 | formID: t1,
105 | });
106 | app.globalData.inner = e.detail.value.topic;
107 | app.globalData.url = this.tempFilePaths;
108 | console.log(app.globalData.url);
109 | console.log(app.globalData.inner);
110 | console.log(that.tempFilePaths);
111 |
112 | console.log(this.formID);
113 | console.log(this.endtime);
114 |
115 |
116 | //提交数据
117 |
118 | wx.request({
119 | url:"http://172.18.159.50/launchsignin.php",
120 |
121 | data:{
122 | topic:this.data.inputTopic,
123 | startTime:this.data.stime,
124 | endTime:this.data.endtime,
125 | content:this.data.inputActivity,
126 | FormerID: app.globalData.num + app.globalData.name,//学号和姓名标识一个用户
127 | FormID: e.detail.value.topic + e.detail.value.endtime,//话题和时间标识一次发起签到
128 | },
129 |
130 | method:"POST",
131 |
132 | header:{
133 | "Content-type":"application/x-www-form-urlencoded"
134 | },
135 |
136 | success:function(res) {
137 | //console.log(res.data);
138 | console.log("succ");
139 | },
140 | fail:function(res) {
141 | //console.log(this.record);
142 | console.log("failed");
143 | }
144 | });
145 |
146 | wx.navigateTo({
147 | url: 'next'
148 | })
149 | }
150 |
151 | //wx.navigateTo({
152 | // url: 'next'
153 | //})
154 | },
155 |
156 | toastHide: function (event) {
157 | status = true
158 | this.setData({ status: status })
159 | },
160 |
161 | })
--------------------------------------------------------------------------------
/微信小程序前端/pages/Message_1Form/Message_1Form.js:
--------------------------------------------------------------------------------
1 | // pages/Message_1Form/Message_1Form.js
2 | Page({
3 |
4 | /**
5 | * 页面的初始数据
6 | */
7 | data: {
8 | delBtnWidth: 180,//删除按钮宽度单位(rpx)
9 | turn_to_detial : true,
10 | str : "",
11 | arr :""
12 | },
13 |
14 | /**
15 | * 生命周期函数--监听页面加载
16 | */
17 | onLoad: function (options) {
18 | this.initEleWidth();
19 | this.getConnectToDB();
20 | },
21 |
22 | /**
23 | * 生命周期函数--监听页面初次渲染完成
24 | */
25 | onReady: function () {
26 |
27 | },
28 |
29 | /**
30 | * 生命周期函数--监听页面显示
31 | */
32 | onShow: function () {
33 |
34 | },
35 |
36 | /**
37 | * 生命周期函数--监听页面隐藏
38 | */
39 | onHide: function () {
40 |
41 | },
42 |
43 | /**
44 | * 生命周期函数--监听页面卸载
45 | */
46 | onUnload: function () {
47 |
48 | },
49 |
50 | /**
51 | * 页面相关事件处理函数--监听用户下拉动作
52 | */
53 | onPullDownRefresh: function () {
54 |
55 | },
56 |
57 | /**
58 | * 页面上拉触底事件的处理函数
59 | */
60 | onReachBottom: function () {
61 |
62 | },
63 |
64 | /**
65 | * 用户点击右上角分享
66 | */
67 | onShareAppMessage: function () {
68 |
69 | },
70 |
71 |
72 | /*************************************************************************** */
73 | /******************************************************************************* */
74 | /********************************************************************************** */
75 | touchS: function (e) {
76 | if (e.touches.length == 1) {
77 | this.setData({
78 | //设置触摸起始点水平方向位置
79 | startX: e.touches[0].clientX
80 | });
81 | }
82 | },
83 | touchM: function (e) {
84 | if (e.touches.length == 1) {
85 | //手指移动时水平方向位置
86 | var moveX = e.touches[0].clientX;
87 | //手指起始点位置与移动期间的差值
88 | var disX = this.data.startX - moveX;
89 | var delBtnWidth = this.data.delBtnWidth;
90 | var txtStyle = "";
91 | if (disX == 0 || disX < 0) {//如果移动距离小于等于0,文本层位置不变
92 | txtStyle = "left:0px";
93 | } else if (disX > 0) {//移动距离大于0,文本层left值等于手指移动距离
94 | txtStyle = "left:-" + disX + "px";
95 | if (disX >= delBtnWidth) {
96 | //控制手指移动距离最大值为删除按钮的宽度
97 | txtStyle = "left:-" + delBtnWidth * 2 + "px";
98 | }
99 | }
100 | //获取手指触摸的是哪一项
101 | var index = e.target.dataset.index;
102 | var list = this.data.list;
103 | list[index].txtStyle = txtStyle;
104 | //更新列表的状态
105 | this.setData({
106 | list: list
107 | });
108 | }
109 | },
110 |
111 | touchE: function (e) {
112 | if (e.changedTouches.length == 1) {
113 | //手指移动结束后水平位置
114 | var endX = e.changedTouches[0].clientX;
115 | //触摸开始与结束,手指移动的距离
116 | var disX = this.data.startX - endX;
117 | var delBtnWidth = this.data.delBtnWidth;
118 | //如果距离小于删除按钮的1/2,不显示删除按钮
119 | var txtStyle = disX > delBtnWidth / 2 ? "left:-" + delBtnWidth * 2 + "px" : "left:0px";
120 | //获取手指触摸的是哪一项
121 | var index = e.target.dataset.index;
122 | var list = this.data.list;
123 | list[index].txtStyle = txtStyle;
124 | //更新列表的状态
125 | this.setData({
126 | list: list,
127 | });
128 | }
129 | },
130 | //获取元素自适应后的实际宽度
131 | getEleWidth: function (w) {
132 | var real = 0;
133 | try {
134 | var res = wx.getSystemInfoSync().windowWidth;
135 | var scale = (750 / 2) / (w / 2);//以宽度750px设计稿做宽度的自适应
136 | // console.log(scale);
137 | real = Math.floor(res / scale);
138 | return real;
139 | } catch (e) {
140 | return false;
141 | // Do something when catch error
142 | }
143 | },
144 | initEleWidth: function () {
145 | var delBtnWidth = this.getEleWidth(this.data.delBtnWidth);
146 | this.setData({
147 | delBtnWidth: delBtnWidth
148 | });
149 | },
150 | //点击删除按钮事件
151 | DeleteItem: function (e) {
152 | //获取列表中要删除项的下标
153 | var index = e.target.dataset.index;
154 | var list = this.data.list;
155 |
156 | console.log(list[index].FormID);
157 | //移除列表中下标为index的项
158 | //list.splice(index, 1);
159 | //更新列表的状态,写回数据库
160 | wx.request({
161 | url: 'http://172.18.159.50/delete.php',
162 | data : {
163 | FormID: list[index].FormID,
164 | },
165 | method : 'POST',
166 | header : {
167 | "Content-Type": "application/x-www-form-urlencoded"
168 | },
169 |
170 | success : function(res) {
171 | //that.record = res.data;
172 | console.log(res.data);
173 | }
174 | })
175 | this.data.turn_to_detial = false;
176 | //更新列表
177 | this.setData({
178 | list: list
179 | });
180 | this.getConnectDB();
181 | },
182 |
183 | //从数据库获取数据
184 | getConnectToDB: function() {
185 | var that = this;
186 | wx.request({
187 | url: 'http://172.18.159.50/lookup.php',
188 | //url: 'http://127.0.0.1/phpmyadmin/test/find.php',
189 | method: 'POST',
190 | data: {
191 | FormerID: getApp().globalData.num + getApp().globalData.name
192 | },
193 | header: {
194 | "Content-Type": "application/x-www-form-urlencoded"
195 | },
196 | success: function (res) {
197 | console.log(res.data)
198 | var list = new Array();
199 | list = res.data;
200 | for(var i = 0; i < list.length; i++) {
201 | list[i].txtStyle = "";
202 | list[i].txt = list[i].topic;
203 | var timestamp = Date.parse(new Date());
204 | var date = new Date(timestamp);
205 | //获取当前时间
206 | var nowtime = date.getFullYear() + '/' + date.getUTCMonth() + '/' + date.getDay() + ' ' + date.getHours() + ':' + date.getMinutes() + ':' + date.getSeconds();
207 | //判断是否结束
208 | if(list[i].endTime > nowtime) {
209 | list[i].IfEnd = "end",
210 | list[i].state = "进行中"
211 | }
212 | else {
213 | list[i].IfEnd = "ongoing"
214 | list[i].state = "已结束"
215 | }
216 | }
217 | console.log(nowtime)
218 | //更新列表
219 | that.setData({
220 | list: list
221 | });
222 | }
223 | /*
224 | success: function (res) {
225 | console.log(res.data)
226 | that.setData({arr : res.data.split(" ")});
227 | var list = new Array();
228 | for (var i = 0; i < that.data.arr.length - 4; i = i + 4) {
229 | var ob = {
230 | txtStyle : "",
231 | IfEnd: that.data.arr[i],
232 |
233 | txt: that.data.arr[i + 1],
234 |
235 | state: that.data.arr[i + 2],
236 |
237 | FormID : that.data.arr[i+3]
238 |
239 | };
240 | list.push(ob);
241 | that.setData({
242 | list: list
243 | });
244 | }
245 | },*/
246 |
247 | })
248 | },
249 |
250 |
251 | //查看已发起
252 | InitialFind:function(e) {
253 | this.getConnectToDB();
254 | wx.switchTab({
255 | url: '../Message_1Form/Message_1Form'
256 | })
257 | },
258 |
259 | //查看已签到
260 | Sign_inFind:function(e) {
261 | wx.switchTab({
262 | url: '../Message_2Form/Message_2Form'
263 | })
264 | },
265 |
266 | //获取已发起签到的签到名单
267 | GetDetialMessage:function(e) {
268 | var index = e.target.dataset.index;
269 | var list = this.data.list;
270 | //将FormID传递到跳转页面
271 | var key = list[index].FormID;
272 | console.log(key)
273 | if (this.data.turn_to_detial == true) {
274 | wx.navigateTo({
275 | url: "../Detial_Message/Detial_Message?detail=" + key
276 |
277 | })
278 | }
279 | this.data.turn_to_detial = true
280 | },
281 |
282 | //导出
283 | ExportItem:function(e) {
284 | /******** */
285 | }
286 |
287 | })
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Apache License
2 | Version 2.0, January 2004
3 | http://www.apache.org/licenses/
4 |
5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6 |
7 | 1. Definitions.
8 |
9 | "License" shall mean the terms and conditions for use, reproduction,
10 | and distribution as defined by Sections 1 through 9 of this document.
11 |
12 | "Licensor" shall mean the copyright owner or entity authorized by
13 | the copyright owner that is granting the License.
14 |
15 | "Legal Entity" shall mean the union of the acting entity and all
16 | other entities that control, are controlled by, or are under common
17 | control with that entity. For the purposes of this definition,
18 | "control" means (i) the power, direct or indirect, to cause the
19 | direction or management of such entity, whether by contract or
20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the
21 | outstanding shares, or (iii) beneficial ownership of such entity.
22 |
23 | "You" (or "Your") shall mean an individual or Legal Entity
24 | exercising permissions granted by this License.
25 |
26 | "Source" form shall mean the preferred form for making modifications,
27 | including but not limited to software source code, documentation
28 | source, and configuration files.
29 |
30 | "Object" form shall mean any form resulting from mechanical
31 | transformation or translation of a Source form, including but
32 | not limited to compiled object code, generated documentation,
33 | and conversions to other media types.
34 |
35 | "Work" shall mean the work of authorship, whether in Source or
36 | Object form, made available under the License, as indicated by a
37 | copyright notice that is included in or attached to the work
38 | (an example is provided in the Appendix below).
39 |
40 | "Derivative Works" shall mean any work, whether in Source or Object
41 | form, that is based on (or derived from) the Work and for which the
42 | editorial revisions, annotations, elaborations, or other modifications
43 | represent, as a whole, an original work of authorship. For the purposes
44 | of this License, Derivative Works shall not include works that remain
45 | separable from, or merely link (or bind by name) to the interfaces of,
46 | the Work and Derivative Works thereof.
47 |
48 | "Contribution" shall mean any work of authorship, including
49 | the original version of the Work and any modifications or additions
50 | to that Work or Derivative Works thereof, that is intentionally
51 | submitted to Licensor for inclusion in the Work by the copyright owner
52 | or by an individual or Legal Entity authorized to submit on behalf of
53 | the copyright owner. For the purposes of this definition, "submitted"
54 | means any form of electronic, verbal, or written communication sent
55 | to the Licensor or its representatives, including but not limited to
56 | communication on electronic mailing lists, source code control systems,
57 | and issue tracking systems that are managed by, or on behalf of, the
58 | Licensor for the purpose of discussing and improving the Work, but
59 | excluding communication that is conspicuously marked or otherwise
60 | designated in writing by the copyright owner as "Not a Contribution."
61 |
62 | "Contributor" shall mean Licensor and any individual or Legal Entity
63 | on behalf of whom a Contribution has been received by Licensor and
64 | subsequently incorporated within the Work.
65 |
66 | 2. Grant of Copyright License. Subject to the terms and conditions of
67 | this License, each Contributor hereby grants to You a perpetual,
68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69 | copyright license to reproduce, prepare Derivative Works of,
70 | publicly display, publicly perform, sublicense, and distribute the
71 | Work and such Derivative Works in Source or Object form.
72 |
73 | 3. Grant of Patent License. Subject to the terms and conditions of
74 | this License, each Contributor hereby grants to You a perpetual,
75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76 | (except as stated in this section) patent license to make, have made,
77 | use, offer to sell, sell, import, and otherwise transfer the Work,
78 | where such license applies only to those patent claims licensable
79 | by such Contributor that are necessarily infringed by their
80 | Contribution(s) alone or by combination of their Contribution(s)
81 | with the Work to which such Contribution(s) was submitted. If You
82 | institute patent litigation against any entity (including a
83 | cross-claim or counterclaim in a lawsuit) alleging that the Work
84 | or a Contribution incorporated within the Work constitutes direct
85 | or contributory patent infringement, then any patent licenses
86 | granted to You under this License for that Work shall terminate
87 | as of the date such litigation is filed.
88 |
89 | 4. Redistribution. You may reproduce and distribute copies of the
90 | Work or Derivative Works thereof in any medium, with or without
91 | modifications, and in Source or Object form, provided that You
92 | meet the following conditions:
93 |
94 | (a) You must give any other recipients of the Work or
95 | Derivative Works a copy of this License; and
96 |
97 | (b) You must cause any modified files to carry prominent notices
98 | stating that You changed the files; and
99 |
100 | (c) You must retain, in the Source form of any Derivative Works
101 | that You distribute, all copyright, patent, trademark, and
102 | attribution notices from the Source form of the Work,
103 | excluding those notices that do not pertain to any part of
104 | the Derivative Works; and
105 |
106 | (d) If the Work includes a "NOTICE" text file as part of its
107 | distribution, then any Derivative Works that You distribute must
108 | include a readable copy of the attribution notices contained
109 | within such NOTICE file, excluding those notices that do not
110 | pertain to any part of the Derivative Works, in at least one
111 | of the following places: within a NOTICE text file distributed
112 | as part of the Derivative Works; within the Source form or
113 | documentation, if provided along with the Derivative Works; or,
114 | within a display generated by the Derivative Works, if and
115 | wherever such third-party notices normally appear. The contents
116 | of the NOTICE file are for informational purposes only and
117 | do not modify the License. You may add Your own attribution
118 | notices within Derivative Works that You distribute, alongside
119 | or as an addendum to the NOTICE text from the Work, provided
120 | that such additional attribution notices cannot be construed
121 | as modifying the License.
122 |
123 | You may add Your own copyright statement to Your modifications and
124 | may provide additional or different license terms and conditions
125 | for use, reproduction, or distribution of Your modifications, or
126 | for any such Derivative Works as a whole, provided Your use,
127 | reproduction, and distribution of the Work otherwise complies with
128 | the conditions stated in this License.
129 |
130 | 5. Submission of Contributions. Unless You explicitly state otherwise,
131 | any Contribution intentionally submitted for inclusion in the Work
132 | by You to the Licensor shall be under the terms and conditions of
133 | this License, without any additional terms or conditions.
134 | Notwithstanding the above, nothing herein shall supersede or modify
135 | the terms of any separate license agreement you may have executed
136 | with Licensor regarding such Contributions.
137 |
138 | 6. Trademarks. This License does not grant permission to use the trade
139 | names, trademarks, service marks, or product names of the Licensor,
140 | except as required for reasonable and customary use in describing the
141 | origin of the Work and reproducing the content of the NOTICE file.
142 |
143 | 7. Disclaimer of Warranty. Unless required by applicable law or
144 | agreed to in writing, Licensor provides the Work (and each
145 | Contributor provides its Contributions) on an "AS IS" BASIS,
146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147 | implied, including, without limitation, any warranties or conditions
148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149 | PARTICULAR PURPOSE. You are solely responsible for determining the
150 | appropriateness of using or redistributing the Work and assume any
151 | risks associated with Your exercise of permissions under this License.
152 |
153 | 8. Limitation of Liability. In no event and under no legal theory,
154 | whether in tort (including negligence), contract, or otherwise,
155 | unless required by applicable law (such as deliberate and grossly
156 | negligent acts) or agreed to in writing, shall any Contributor be
157 | liable to You for damages, including any direct, indirect, special,
158 | incidental, or consequential damages of any character arising as a
159 | result of this License or out of the use or inability to use the
160 | Work (including but not limited to damages for loss of goodwill,
161 | work stoppage, computer failure or malfunction, or any and all
162 | other commercial damages or losses), even if such Contributor
163 | has been advised of the possibility of such damages.
164 |
165 | 9. Accepting Warranty or Additional Liability. While redistributing
166 | the Work or Derivative Works thereof, You may choose to offer,
167 | and charge a fee for, acceptance of support, warranty, indemnity,
168 | or other liability obligations and/or rights consistent with this
169 | License. However, in accepting such obligations, You may act only
170 | on Your own behalf and on Your sole responsibility, not on behalf
171 | of any other Contributor, and only if You agree to indemnify,
172 | defend, and hold each Contributor harmless for any liability
173 | incurred by, or claims asserted against, such Contributor by reason
174 | of your accepting any such warranty or additional liability.
175 |
176 | END OF TERMS AND CONDITIONS
177 |
178 | APPENDIX: How to apply the Apache License to your work.
179 |
180 | To apply the Apache License to your work, attach the following
181 | boilerplate notice, with the fields enclosed by brackets "[]"
182 | replaced with your own identifying information. (Don't include
183 | the brackets!) The text should be enclosed in the appropriate
184 | comment syntax for the file format. We also recommend that a
185 | file or class name and description of purpose be included on the
186 | same "printed page" as the copyright notice for easier
187 | identification within third-party archives.
188 |
189 | Copyright [yyyy] [name of copyright owner]
190 |
191 | Licensed under the Apache License, Version 2.0 (the "License");
192 | you may not use this file except in compliance with the License.
193 | You may obtain a copy of the License at
194 |
195 | http://www.apache.org/licenses/LICENSE-2.0
196 |
197 | Unless required by applicable law or agreed to in writing, software
198 | distributed under the License is distributed on an "AS IS" BASIS,
199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200 | See the License for the specific language governing permissions and
201 | limitations under the License.
202 |
--------------------------------------------------------------------------------
/微信小程序前端/weui.wxss:
--------------------------------------------------------------------------------
1 | /*!
2 | * WeUI v1.1.1 (https://github.com/weui/weui-wxss)
3 | * Copyright 2017 Tencent, Inc.
4 | * Licensed under the MIT license
5 | */
6 | page{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}
--------------------------------------------------------------------------------