正在显示
26 个修改的文件
包含
706 行增加
和
159 行删除
1 | 1 | //app.js |
2 | 2 | App({ |
3 | 3 | onLaunch: function () { |
4 | - // 展示本地存储能力 | |
4 | + var that = this; | |
5 | + console.log("onlaunch---", "onlaunch"); | |
6 | + //调用API从本地缓存中获取数据 | |
5 | 7 | var logs = wx.getStorageSync('logs') || [] |
6 | 8 | logs.unshift(Date.now()) |
7 | 9 | wx.setStorageSync('logs', logs) |
8 | - | |
9 | - // 登录 | |
10 | 10 | wx.login({ |
11 | - success: res => { | |
12 | - // 发送 res.code 到后台换取 openId, sessionKey, unionId | |
11 | + success: function (res) { | |
12 | + if (res.code) { | |
13 | + that.getTokenByCode(res.code, true) | |
14 | + } | |
13 | 15 | } |
14 | 16 | }) |
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 | |
17 | + }, | |
18 | + | |
19 | + onShow: function (res) { | |
20 | + console.log("onShow----", res); | |
21 | + var that = this; | |
22 | + that.globalData.onshow_count++; | |
23 | + if (that.globalData.onshow_count > 1) {//除第一次进入小程序之外的打开时 | |
24 | + wx.login({ | |
25 | + success: function (res) { | |
26 | + if (res.code) { | |
27 | + that.getTokenByCode(res.code, false) | |
28 | + } | |
29 | + } | |
30 | + }) | |
31 | + } | |
32 | + }, | |
24 | 33 | |
25 | - // 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回 | |
26 | - // 所以此处加入 callback 以防止这种情况 | |
27 | - if (this.userInfoReadyCallback) { | |
28 | - this.userInfoReadyCallback(res) | |
29 | - } | |
30 | - } | |
34 | + getTokenByCode: function (code, relaunch) { | |
35 | + var that = this; | |
36 | + var baseUrl = that.globalData.baseUrl; | |
37 | + wx.request({ | |
38 | + url: baseUrl + 'uaa/v1/auth/tokens', | |
39 | + data: { | |
40 | + "grant_type": "wx_app_code", | |
41 | + "code": code, | |
42 | + "scope": "global_access:end_user,tenant:wxe91c67adba6ac02d" | |
43 | + }, | |
44 | + method: "POST", | |
45 | + header: { | |
46 | + 'content-type': 'application/json' | |
47 | + }, | |
48 | + success: function (res) { | |
49 | + console.log("getTokenByCode", res.data) | |
50 | + var user = res.data.user; | |
51 | + var tenant = res.data.tenant; | |
52 | + that.globalData.tenant_id = tenant.id; | |
53 | + that.globalData.userInfo = res.data.user; | |
54 | + that.globalData.wx_open_id = user.wx_open_id; | |
55 | + that.globalData.Authorization = "Bearer " + res.data.access_token; | |
56 | + that.globalData.refresh_token = res.data.refresh_token; | |
57 | + if (user && user.type == "0") {//匿名用户 | |
58 | + wx.redirectTo({ | |
59 | + url: '../../getPhone/getPhone' | |
31 | 60 | }) |
61 | + } else if (user && user.type == "1") {//注册用户 | |
62 | + if (relaunch) { | |
63 | + wx.reLaunch({ //重新加载 | |
64 | + url: '../../tabbar/home/home' | |
65 | + }) | |
66 | + } | |
32 | 67 | } |
33 | - } | |
68 | + }, | |
69 | + fail: function (res) { | |
70 | + console.log("login-res-fail", res); | |
71 | + }, | |
34 | 72 | }) |
35 | 73 | }, |
74 | + getUserInfo: function (cb) { | |
75 | + var that = this | |
76 | + if (this.globalData.userInfo) { | |
77 | + typeof cb == "function" && cb(this.globalData.userInfo) | |
78 | + } else { | |
79 | + //调用登录接口 | |
80 | + wx.getUserInfo({ | |
81 | + withCredentials: false, | |
82 | + success: function (res) { | |
83 | + console.log("userInfo---", res) | |
84 | + that.globalData.userInfo = res.userInfo | |
85 | + typeof cb == "function" && cb(that.globalData.userInfo) | |
86 | + } | |
87 | + }) | |
88 | + } | |
89 | + }, | |
90 | + | |
36 | 91 | globalData: { |
37 | - userInfo: null | |
92 | + onshow_count: 0, | |
93 | + baseUrl: "http://47.98.47.16:20000/", | |
94 | + // baseUrl: "https://api.workai.com.cn/", | |
95 | + OSSUrl: "https://oss.workai.com.cn/", | |
96 | + userInfo: null, | |
97 | + hasLogin: false, | |
98 | + openid: null, | |
99 | + Authorization: null, | |
100 | + refresh_token: "", | |
101 | + tenant_id: "", | |
102 | + wx_open_id: "", | |
103 | + newComerOrder: null | |
38 | 104 | } |
39 | 105 | }) |
\ No newline at end of file | ... | ... |
1 | 1 | { |
2 | - "pages":[ | |
3 | - "pages/index/index", | |
4 | - "pages/logs/logs" | |
2 | + "pages": [ | |
3 | + "pages/main/home/home", | |
4 | + "pages/login/login", | |
5 | + "pages/getPhone/getPhone" | |
6 | + | |
5 | 7 | ], |
6 | - "window":{ | |
7 | - "backgroundTextStyle":"light", | |
8 | - "navigationBarBackgroundColor": "#fff", | |
8 | + "window": { | |
9 | + "backgroundTextStyle": "light", | |
10 | + "navigationBarBackgroundColor": "#4478e3", | |
9 | 11 | "navigationBarTitleText": "WeChat", |
10 | - "navigationBarTextStyle":"black" | |
12 | + "navigationBarTextStyle": "#fff" | |
11 | 13 | } |
12 | -} | |
14 | +} | |
\ No newline at end of file | ... | ... |
images/arrow_right.png
0 → 100644
418 Bytes
images/id.png
0 → 100644
989 Bytes
images/phone.png
0 → 100644
838 Bytes
pages/getPhone/getPhone.js
0 → 100644
1 | +// pages/getPhone/getPhone.js | |
2 | +const baseUrl = getApp().globalData.baseUrl; | |
3 | +let Authorization = ''; | |
4 | +var app = getApp(); | |
5 | +Page({ | |
6 | + | |
7 | + /** | |
8 | + * 页面的初始数据 | |
9 | + */ | |
10 | + data: { | |
11 | + | |
12 | + }, | |
13 | + | |
14 | + /** | |
15 | + * 生命周期函数--监听页面加载 | |
16 | + */ | |
17 | + onLoad: function (options) { | |
18 | + }, | |
19 | + getPhoneNumber: function (e) { | |
20 | + const _this = this; | |
21 | + const iv = e.detail.iv; | |
22 | + const encryptedData = e.detail.encryptedData; | |
23 | + console.log('getPhoneNumber' ,e) | |
24 | + if (e.detail.errMsg == 'getPhoneNumber:fail user deny') { | |
25 | + wx.showModal({ | |
26 | + title: '提示', | |
27 | + showCancel: false, | |
28 | + content: '未授权', | |
29 | + success: function (res) { } | |
30 | + }) | |
31 | + } else { | |
32 | + this.login(iv, encryptedData); | |
33 | + } | |
34 | + }, | |
35 | + login: function (iv, phone) { | |
36 | + var that = this; | |
37 | + var Authorization = getApp().globalData.Authorization; | |
38 | + const userInfo = app.globalData.userInfo; | |
39 | + const { opt, salary_unit,id } = that.data; | |
40 | + wx.request({ | |
41 | + url: baseUrl + "uaa/v1/users/op/bind-mobile", | |
42 | + data: { | |
43 | + "mobile": '13691224349',//必传,随便写一个 | |
44 | + "sms_code": '1234',//必传,随便写一个 | |
45 | + "wx_open_id": app.globalData.wx_open_id, //可选,如果传了,绑定到对应的微信号 | |
46 | + "tenant_id": app.globalData.tenant_id, | |
47 | + "source": "wx_app::" + phone + ":" + iv, | |
48 | + "scope": "expert" | |
49 | + }, | |
50 | + method: "POST", | |
51 | + header: { | |
52 | + 'content-type': 'application/json', // 默认值 | |
53 | + "Authorization": Authorization | |
54 | + }, | |
55 | + success: function (res) { | |
56 | + | |
57 | + console.log("succ", res); | |
58 | + if (200 == res.statusCode) { | |
59 | + app.globalData.Authorization = "Bearer " + res.data.access_token; | |
60 | + app.globalData.refresh_token = res.data.refresh_token; | |
61 | + var user = res.data.user; | |
62 | + var tenant = res.data.tenant; | |
63 | + app.globalData.tenant_id = tenant.id; | |
64 | + app.globalData.userInfo = user; | |
65 | + app.globalData.wx_open_id = user.wx_open_id; | |
66 | + | |
67 | + wx.reLaunch({ | |
68 | + url: '../tabbar/home/home' | |
69 | + }) | |
70 | + | |
71 | + } else { | |
72 | + wx.showToast({ | |
73 | + title: '登录失败,请重新登录', | |
74 | + }) | |
75 | + } | |
76 | + }, | |
77 | + fail: function (res) { | |
78 | + console.log("fail ", res.data) | |
79 | + }, | |
80 | + complete:function (res){ | |
81 | + wx.reLaunch({ | |
82 | + url: '../tabbar/home/home' | |
83 | + }) | |
84 | + } | |
85 | + }) | |
86 | + }, | |
87 | + phoneLogin: function () { | |
88 | + wx.navigateTo({ | |
89 | + url: '../login/login', | |
90 | + }) | |
91 | + }, | |
92 | + | |
93 | +}) | |
\ No newline at end of file | ... | ... |
pages/getPhone/getPhone.json
0 → 100644
pages/getPhone/getPhone.wxml
0 → 100644
1 | +<!--pages/getPhone/getPhone.wxml--> | |
2 | +<!-- <button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber">获取用户手机号</button> --> | |
3 | +<view class='page'> | |
4 | + <image src='/images/bg.jpg' class='back-img' mode="bottom aspectFill"></image> | |
5 | + <view class='content-wrap'> | |
6 | + <image src='/images/logo.png' class='logo' mode="aspectFit"></image> | |
7 | + <button open-type="getPhoneNumber" class='btn' bindgetphonenumber="getPhoneNumber">微信快速授权/登录</button> | |
8 | + <view class='loginByPhone' bindtap='phoneLogin'>输入手机号登录</view> | |
9 | + </view> | |
10 | + | |
11 | +</view> | |
\ No newline at end of file | ... | ... |
pages/getPhone/getPhone.wxss
0 → 100644
1 | +/* pages/getPhone/getPhone.wxss */ | |
2 | +.page{ | |
3 | + height: 100%; | |
4 | +} | |
5 | +.back-img{ | |
6 | + position: absolute; | |
7 | + top: 0px; | |
8 | + width: 100%; | |
9 | + height: 100%; | |
10 | +} | |
11 | +.content-wrap{ | |
12 | + margin-top: 360rpx; | |
13 | + width: 100%; | |
14 | +} | |
15 | +.logo{ | |
16 | + position: relative; | |
17 | + top: 0rpx; | |
18 | + height: 60rpx; | |
19 | + margin: 10px auto; | |
20 | + display: block; | |
21 | +} | |
22 | + | |
23 | +.btn{ | |
24 | + background: #FFF; | |
25 | + color: #529CE2; | |
26 | + height: 84rpx; | |
27 | + line-height: 84rpx; | |
28 | + font-size: 28rpx; | |
29 | + border-radius: 42rpx; | |
30 | + margin: 120rpx 60rpx 0 60rpx; | |
31 | +} | |
32 | + | |
33 | +.loginByPhone{ | |
34 | + position: relative; | |
35 | + text-align: center; | |
36 | + color: #FFF; | |
37 | + font-size: 28rpx; | |
38 | + margin: 40rpx; | |
39 | +} | ... | ... |
pages/index/index.js
已删除
100644 → 0
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 | - wx.navigateTo({ | |
15 | - url: '../logs/logs' | |
16 | - }) | |
17 | - }, | |
18 | - onLoad: function () { | |
19 | - if (app.globalData.userInfo) { | |
20 | - this.setData({ | |
21 | - userInfo: app.globalData.userInfo, | |
22 | - hasUserInfo: true | |
23 | - }) | |
24 | - } else if (this.data.canIUse){ | |
25 | - // 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回 | |
26 | - // 所以此处加入 callback 以防止这种情况 | |
27 | - app.userInfoReadyCallback = res => { | |
28 | - this.setData({ | |
29 | - userInfo: res.userInfo, | |
30 | - hasUserInfo: true | |
31 | - }) | |
32 | - } | |
33 | - } else { | |
34 | - // 在没有 open-type=getUserInfo 版本的兼容处理 | |
35 | - wx.getUserInfo({ | |
36 | - success: res => { | |
37 | - app.globalData.userInfo = res.userInfo | |
38 | - this.setData({ | |
39 | - userInfo: res.userInfo, | |
40 | - hasUserInfo: true | |
41 | - }) | |
42 | - } | |
43 | - }) | |
44 | - } | |
45 | - }, | |
46 | - getUserInfo: function(e) { | |
47 | - console.log(e) | |
48 | - app.globalData.userInfo = e.detail.userInfo | |
49 | - this.setData({ | |
50 | - userInfo: e.detail.userInfo, | |
51 | - hasUserInfo: true | |
52 | - }) | |
53 | - } | |
54 | -}) |
pages/index/index.wxml
已删除
100644 → 0
1 | -<!--index.wxml--> | |
2 | -<view class="container"> | |
3 | - <view class="userinfo"> | |
4 | - <button wx:if="{{!hasUserInfo && canIUse}}" open-type="getUserInfo" bindgetuserinfo="getUserInfo"> 获取头像昵称 </button> | |
5 | - <block wx:else> | |
6 | - <image bindtap="bindViewTap" class="userinfo-avatar" src="{{userInfo.avatarUrl}}" mode="cover"></image> | |
7 | - <text class="userinfo-nickname">{{userInfo.nickName}}</text> | |
8 | - </block> | |
9 | - </view> | |
10 | - <view class="usermotto"> | |
11 | - <text class="user-motto">{{motto}}</text> | |
12 | - </view> | |
13 | -</view> |
pages/index/index.wxss
已删除
100644 → 0
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 | -} | |
\ No newline at end of file |
pages/login/login.js
0 → 100644
1 | +//login.js | |
2 | +const loginUrl = require('../../config').loginUrl; | |
3 | +//获取应用实例 | |
4 | +var app = getApp(); | |
5 | +var baseUrl = app.globalData.baseUrl; | |
6 | + | |
7 | +Page({ | |
8 | + data: { | |
9 | + mobile: '', | |
10 | + verifyCode: "", | |
11 | + tenant_id: "", | |
12 | + wx_open_id: "", | |
13 | + verifyCodeTime: "获取验证码", | |
14 | + buttonDisable: false | |
15 | + }, | |
16 | + | |
17 | + mobileInputEvent: function (e) { | |
18 | + this.setData({ | |
19 | + mobile: e.detail.value | |
20 | + }); | |
21 | + }, | |
22 | + | |
23 | + verifyInputEvent: function (e) { | |
24 | + this.setData({ | |
25 | + verifyCode: e.detail.value | |
26 | + }); | |
27 | + console.log("verifyCode", this.data.verifyCode); | |
28 | + }, | |
29 | + | |
30 | + verifyCodeEvent: function () { | |
31 | + console.log("buttonDisable", this.data.buttonDisable); | |
32 | + if (this.data.buttonDisable) return; | |
33 | + var that = this; | |
34 | + var mobile = this.data.mobile; | |
35 | + var regMobile = /^1[3|4|5|7|8][0-9]{9}$/; | |
36 | + console.log("mobile---", mobile); | |
37 | + if (!regMobile.test(mobile)) { | |
38 | + wx.showToast({ | |
39 | + title: '手机号有误!' | |
40 | + }) | |
41 | + return; | |
42 | + } | |
43 | + var timelength = 60 | |
44 | + | |
45 | + var intervalId = setInterval(function () { | |
46 | + timelength = timelength - 1; | |
47 | + that.setData({ | |
48 | + verifyCodeTime: timelength + 's后重发', | |
49 | + buttonDisable: true | |
50 | + }) | |
51 | + if (timelength == 0) { | |
52 | + clearInterval(intervalId); | |
53 | + that.setData({ | |
54 | + verifyCodeTime: '获取验证码', | |
55 | + buttonDisable: false | |
56 | + }) | |
57 | + } | |
58 | + }, 1000); | |
59 | + that.getVerifyCode(mobile); | |
60 | + }, | |
61 | + | |
62 | + getVerifyCode: function (mobile) { | |
63 | + var that = this; | |
64 | + var Authorization = app.globalData.Authorization; | |
65 | + that.setData({ | |
66 | + tenant_id: app.globalData.tenant_id, | |
67 | + wx_open_id: app.globalData.wx_open_id | |
68 | + }) | |
69 | + wx.request({ | |
70 | + url: baseUrl + 'sms/v1/sms_codes', | |
71 | + method: "POST", | |
72 | + data: { | |
73 | + "mobile": mobile, | |
74 | + "type": "bindmobile", | |
75 | + "scope": "global_access:expert" | |
76 | + }, | |
77 | + header: { | |
78 | + 'content-type': 'application/json', // 默认值 | |
79 | + "Authorization": Authorization | |
80 | + }, | |
81 | + success: function (res) { | |
82 | + console.log(res.data) | |
83 | + }, | |
84 | + fail(res) { | |
85 | + console.log(res.data) | |
86 | + } | |
87 | + }) | |
88 | + }, | |
89 | + | |
90 | + login: function () { | |
91 | + var that = this; | |
92 | + var Authorization = getApp().globalData.Authorization; | |
93 | + wx.request({ | |
94 | + url: baseUrl + "uaa/v1/users/op/bind-mobile", | |
95 | + data: { | |
96 | + "mobile": that.data.mobile, | |
97 | + "sms_code": that.data.verifyCode, | |
98 | + "wx_open_id": that.data.wx_open_id, //可选,如果传了,绑定到对应的微信号 | |
99 | + "tenant_id": that.data.tenant_id, | |
100 | + "source": "wx_app", | |
101 | + "scope": "expert" | |
102 | + }, | |
103 | + method: "POST", | |
104 | + header: { | |
105 | + 'content-type': 'application/json', // 默认值 | |
106 | + "Authorization": Authorization | |
107 | + }, | |
108 | + success: function (res) { | |
109 | + console.log("succ", res); | |
110 | + if (200 == res.statusCode) { | |
111 | + app.globalData.Authorization = "Bearer " + res.data.access_token; | |
112 | + app.globalData.refresh_token = res.data.refresh_token; | |
113 | + var user = res.data.user; | |
114 | + var tenant = res.data.tenant; | |
115 | + app.globalData.tenant_id = tenant.id; | |
116 | + app.globalData.userInfo = user; | |
117 | + app.globalData.wx_open_id = user.wx_open_id; | |
118 | + | |
119 | + wx.reLaunch({ | |
120 | + url: '../tabbar/home/home' | |
121 | + }) | |
122 | + } else { | |
123 | + wx.showToast({ | |
124 | + title: '请重新登录', | |
125 | + }) | |
126 | + } | |
127 | + }, | |
128 | + fail: function (res) { | |
129 | + console.log("fail ", res.data) | |
130 | + }, | |
131 | + complete: function (res) { | |
132 | + wx.reLaunch({ | |
133 | + url: '../tabbar/home/home' | |
134 | + }) | |
135 | + } | |
136 | + }) | |
137 | + }, | |
138 | + | |
139 | + onLoad: function () { | |
140 | + | |
141 | + } | |
142 | +}) | ... | ... |
pages/login/login.json
0 → 100644
pages/login/login.wxml
0 → 100644
1 | +<!--pages/login/login.wxml--> | |
2 | +<view class="page"> | |
3 | + <image src='/images/bg.jpg' class='back-img' mode="bottom aspectFill"></image> | |
4 | + <view class='content-wrap'> | |
5 | + <image src='/images/logo.png' class='logo' mode="aspectFit"></image> | |
6 | + <view class="data_item"> | |
7 | + <image src='/images/user_name.png' class='icon' mode="aspectFit"></image> | |
8 | + <view class='input-wrap'>+86 | |
9 | + <input class="text-area" style='margin-left:20rpx;' bindinput="mobileInputEvent" name="mobile" type="number" placeholder='请输入手机号' placeholder-class='pl-class'></input> | |
10 | + </view> | |
11 | + </view> | |
12 | + <view class="data_item"> | |
13 | + <image src='/images/user_pwd.png' class='icon' mode="aspectFit"></image> | |
14 | + <view class='input-wrap' style='width:180rpx;'> | |
15 | + <input class="text-area" name="verify_code" bindinput="verifyInputEvent" placeholder='短信验证码' placeholder-class='pl-class'></input> | |
16 | + </view> | |
17 | + <button class="code-btn" bindtap="verifyCodeEvent" disabled="{{buttonDisable}}">{{verifyCodeTime}}</button> | |
18 | + | |
19 | + </view> | |
20 | + | |
21 | + <view > | |
22 | + <button class="btn" bindtap="login">登 录</button> | |
23 | + </view> | |
24 | + </view> | |
25 | + | |
26 | + | |
27 | +</view> | ... | ... |
pages/login/login.wxss
0 → 100644
1 | +/* pages/login/login.wxss */ | |
2 | + @import "../getPhone/getPhone.wxss"; | |
3 | +.data_item{ | |
4 | + position: relative; | |
5 | + height: 120rpx; | |
6 | + color: #fff; | |
7 | + margin: 0 120rpx; | |
8 | + display: flex; | |
9 | + border-bottom: 2rpx solid #FFF; | |
10 | +} | |
11 | +.pl-class{ | |
12 | + color: #FFF; | |
13 | + font-size: 28rpx; | |
14 | +} | |
15 | +.icon{ | |
16 | + position: absolute; | |
17 | + width: 32rpx; | |
18 | + height: 36rpx; | |
19 | + padding: 42rpx 44rpx ; | |
20 | +} | |
21 | +.input-wrap{ | |
22 | + display: flex; | |
23 | + line-height: 120rpx; | |
24 | + margin-left: 120rpx; | |
25 | +} | |
26 | +.text-area{ | |
27 | + font-size:28rpx; | |
28 | + margin: auto 0; | |
29 | + display: flex; | |
30 | +} | |
31 | +.code-btn{ | |
32 | + position: absolute; | |
33 | + color:#529CE2; | |
34 | + font-size: 28rpx; | |
35 | + border-radius: 32rpx; | |
36 | + height: 64rpx; | |
37 | + right: 0; | |
38 | + bottom: 28rpx; | |
39 | +} | |
40 | + | |
41 | + | ... | ... |
pages/logs/logs.js
已删除
100644 → 0
pages/logs/logs.wxml
已删除
100644 → 0
pages/logs/logs.wxss
已删除
100644 → 0
pages/main/home/home.js
0 → 100644
1 | +// pages/home/home.js | |
2 | +Page({ | |
3 | + | |
4 | + /** | |
5 | + * 页面的初始数据 | |
6 | + */ | |
7 | + data: { | |
8 | + list:["",""] | |
9 | + }, | |
10 | + | |
11 | + /** | |
12 | + * 生命周期函数--监听页面加载 | |
13 | + */ | |
14 | + onLoad: function (options) { | |
15 | + | |
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 | +}) | |
\ No newline at end of file | ... | ... |
pages/main/home/home.wxml
0 → 100644
1 | +<view class='page'> | |
2 | + | |
3 | + <view wx:if="{{list.length>0}}"> | |
4 | + <block wx:for="{{list}}" wx:key=""> | |
5 | + <view class='rectangle_solid_bg'> | |
6 | + <view style='padding:22rpx'> | |
7 | + <text class='text_black_28'>小爱同学</text> | |
8 | + <text class='rectangle_orange_bg text_red_20'>子女</text> | |
9 | + <text class='text_blue_28'>去完善</text> | |
10 | + <image class='arrow_wrap' src='/images/arrow_right.png'> </image> | |
11 | + </view> | |
12 | + <view style='padding:22rpx'> | |
13 | + <image class='phone_image_wrap'src='/images/phone.png'></image> | |
14 | + <text class='text_999_22'>130****8888</text> | |
15 | +<text style='margin:0rpx 20rpx;color:#999;height:16rpx'>|</text> | |
16 | + <image class='id_image_wrap'src='/images/id.png'></image> | |
17 | + <text class='text_999_22'>152000********0000</text> | |
18 | + </view> | |
19 | + </view> | |
20 | + </block> | |
21 | + </view> | |
22 | + | |
23 | + <view class='rectangle_dashed_bg'> | |
24 | + <view class='text_blue_28'> | |
25 | + 十 添加家庭成员 | |
26 | + </view> | |
27 | + </view> | |
28 | + | |
29 | +</view> | |
\ No newline at end of file | ... | ... |
pages/main/home/home.wxss
0 → 100644
1 | +/* pages/home/home.wxss */ | |
2 | + | |
3 | +.rectangle_solid_bg { | |
4 | + margin: 20rpx 32rpx; | |
5 | + background: #fff; | |
6 | + box-shadow: 0 8rpx 28rpx 0 rgba(208, 208, 208, 0.50); | |
7 | + border-radius: 8rpx; | |
8 | +} | |
9 | + | |
10 | +.rectangle_dashed_bg { | |
11 | + height: 68rpx; | |
12 | + margin: 40rpx 32rpx; | |
13 | + background: #fff; | |
14 | + border-style: dashed; | |
15 | + border: 2rpx solid #d7e4fb; | |
16 | + border-radius: 8rpx; | |
17 | +} | |
18 | + | |
19 | +.rectangle_orange_bg { | |
20 | + height: 32rpx; | |
21 | + margin: 0rpx 20rpx; | |
22 | + opacity: 0.5; | |
23 | +background: #F9DCD6; | |
24 | +border-radius: 2px; | |
25 | +} | |
26 | + | |
27 | +.text_red_20 { | |
28 | + font-family: PingFang-SC-Medium; | |
29 | + font-size: 20rpx; | |
30 | + padding: 14rpx; | |
31 | + text-align: center; | |
32 | + color: #FF7052; | |
33 | + letter-spacing: 0; | |
34 | +} | |
35 | + | |
36 | +.text_blue_28 { | |
37 | + font-family: PingFang-SC-Medium; | |
38 | + font-size: 28rpx; | |
39 | + padding: 14rpx; | |
40 | + text-align: center; | |
41 | + color: #357aeb; | |
42 | + letter-spacing: 0; | |
43 | +} | |
44 | + | |
45 | +.text_black_28 { | |
46 | + font-family: PingFangSC-Regular; | |
47 | + font-size: 28rpx; | |
48 | + color: #000; | |
49 | + line-height: 40rpx; | |
50 | +} | |
51 | + | |
52 | +.text_999_22 { | |
53 | + font-family: PingFangSC-Regular; | |
54 | + font-size: 22rpx; | |
55 | + color: #999; | |
56 | +} | |
57 | + | |
58 | +.arrow_wrap { | |
59 | + width: 12rpx; | |
60 | + height: 20rpx; | |
61 | +} | |
62 | + | |
63 | +.phone_image_wrap { | |
64 | + width: 22rpx; | |
65 | + height: 20rpx; | |
66 | + margin-right:12rpx; | |
67 | +} | |
68 | + | |
69 | +.id_image_wrap { | |
70 | + width: 30rpx; | |
71 | + height: 20rpx; | |
72 | + margin-right:12rpx; | |
73 | +} | ... | ... |
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() | |
1 | +function formatTime(date) { | |
2 | + var year = date.getFullYear() | |
3 | + var month = date.getMonth() + 1 | |
4 | + var day = date.getDate() | |
8 | 5 | |
9 | - return [year, month, day].map(formatNumber).join('/') + ' ' + [hour, minute, second].map(formatNumber).join(':') | |
6 | + var hour = date.getHours() | |
7 | + var minute = date.getMinutes() | |
8 | + var second = date.getSeconds() | |
9 | + | |
10 | + return [year, month, day].map(formatNumber).join('-') + ' ' + [hour, minute].map(formatNumber).join(':') | |
10 | 11 | } |
11 | 12 | |
12 | -const formatNumber = n => { | |
13 | +function formatNumber(n) { | |
13 | 14 | n = n.toString() |
14 | 15 | return n[1] ? n : '0' + n |
15 | 16 | } |
16 | 17 | |
18 | +function formatDateString(dateStr) { | |
19 | + var date = new Date() | |
20 | + date.setTime(dateStr * 1000) | |
21 | + var newDate = this.formatTime(date) | |
22 | + return newDate | |
23 | +} | |
24 | +function yearFormString(dateStr) { | |
25 | + var date = new Date() | |
26 | + date.setTime(dateStr * 1000) | |
27 | + var year = date.getFullYear() | |
28 | + return year | |
29 | +} | |
30 | +function monthFormString(dateStr) { | |
31 | + var date = new Date() | |
32 | + date.setTime(dateStr * 1000) | |
33 | + var month = date.getMonth() + 1 | |
34 | + return month | |
35 | +} | |
36 | +function dayFormString(dateStr) { | |
37 | + var date = new Date() | |
38 | + date.setTime(dateStr * 1000) | |
39 | + var day = date.getDate() | |
40 | + return day | |
41 | +} | |
42 | + | |
43 | +/** | |
44 | + * 检验18位身份证号码(15位号码可以只检测生日是否正确即可) | |
45 | + * @author wolfchen | |
46 | + * @param idCardNo 18为的身份证号码 | |
47 | + * @return Boolean 是否合法 | |
48 | + **/ | |
49 | +function isIDCardNum(idCardNo) { | |
50 | + var regID_18 = /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/; | |
51 | + var regID_15 = /^[1-9]\d{5}\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{2}$/; | |
52 | + var arrExp = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];//加权因子 | |
53 | + var arrValid = [1, 0, "X", 9, 8, 7, 6, 5, 4, 3, 2];//校验码 | |
54 | + if (regID_15.test(idCardNo)) { | |
55 | + return true; | |
56 | + } else if (regID_18.test(idCardNo)) { | |
57 | + var sum = 0, idx; | |
58 | + for (var i = 0; i < idCardNo.length - 1; i++) { | |
59 | + // 对前17位数字与权值乘积求和 | |
60 | + sum += parseInt(idCardNo.substr(i, 1), 10) * arrExp[i]; | |
61 | + } | |
62 | + // 计算模(固定算法) | |
63 | + idx = sum % 11; | |
64 | + // 检验第18为是否与校验码相等 | |
65 | + return arrValid[idx] == idCardNo.substr(17, 1).toUpperCase(); | |
66 | + } else { | |
67 | + return false; | |
68 | + } | |
69 | +} | |
70 | + | |
17 | 71 | module.exports = { |
18 | - formatTime: formatTime | |
72 | + formatTime: formatTime, | |
73 | + formatDateString: formatDateString, | |
74 | + yearFormString: yearFormString, | |
75 | + monthFormString: monthFormString, | |
76 | + dayFormString: dayFormString, | |
77 | + udekapi: udekapi, | |
78 | + isIDCardNum: isIDCardNum | |
19 | 79 | } | ... | ... |
请
注册
或
登录
后发表评论