Commit d35668442dfc66fbe8b4bb731b6ec496e64854c5
1 parent
8cd16d4b
Exists in
master
打卡功能简单版
打卡功能简单版
Showing
29 changed files
with
1034 additions
and
168 deletions
Show diff stats
app.json
1 | 1 | { |
2 | 2 | "pages": [ |
3 | + "pages/login/loginNew/loginNew", | |
3 | 4 | "pages/login/codeLogin/codeLogin", |
5 | + "pages/index/achievement/achievement", | |
4 | 6 | "pages/index/rank/rank", |
5 | 7 | "pages/index/index", |
6 | - "pages/index/achievement/achievement", | |
7 | 8 | "pages/index/newPunch/newPunch", |
8 | 9 | "pages/mine/record/record", |
9 | 10 | "pages/mine/index", | ... | ... |
84.5 KB
pages/index/achievement/achievement.js
1 | 1 | // pages/index/achievement/achievement.js |
2 | +// 引入插件安装器 | |
3 | +import plugin from '../../../component/v2/plugins/index' | |
4 | +import week from '../../../component/v2/plugins/week' | |
5 | +import todo from '../../../component/v2/plugins/todo' | |
6 | +import request from '../../../api/request.js' | |
7 | +import moment from 'moment'; | |
8 | +plugin | |
9 | + .use(week) | |
10 | + .use(todo) | |
2 | 11 | Page({ |
3 | 12 | |
4 | - /** | |
5 | - * 页面的初始数据 | |
6 | - */ | |
7 | - data: { | |
8 | - calendarConfig: { | |
9 | - // theme: 'elegant', | |
10 | - weekMode: true, // 周视图模式 | |
11 | - // highlightToday: true, // 是否高亮显示当天 | |
12 | - // hideHeader: true, // 隐藏日历头部操作栏 | |
13 | - }, | |
14 | - isDisplay:false | |
15 | - }, | |
16 | - takeoverTap(e) { | |
17 | - console.log('takeoverTap', e.detail) | |
18 | - }, | |
19 | - //获取信息 | |
20 | - getInfo(e) { | |
21 | - // 切换为周视图 | |
22 | - const calendar = this.selectComponent('#calendar').calendar | |
23 | - console.log(calendar.getCurrentYM()) | |
24 | - calendar.switchView('week', '#calendar').then(() => {}) | |
25 | - return | |
26 | - // 切换为周视图 | |
27 | - this.setData({ | |
28 | - isDisplay: !this.data.isDisplay | |
29 | - }) | |
30 | - if (this.data.isDisplay) { | |
31 | - calendar.switchView('month').then(() => {}) | |
32 | - } else { | |
33 | - calendar.switchView('week').then(() => {}) | |
34 | - } | |
35 | - }, | |
36 | - /** | |
37 | - * 生命周期函数--监听页面加载 | |
38 | - */ | |
39 | - onLoad(options) { | |
40 | - | |
41 | - }, | |
42 | - // 统一返回 | |
43 | - handleBack() { | |
44 | - wx.navigateBack() | |
45 | - }, | |
46 | - /** | |
47 | - * 用户点击右上角分享 | |
48 | - */ | |
49 | - onShareAppMessage() { | |
50 | - | |
51 | - } | |
13 | + /** | |
14 | + * 页面的初始数据 | |
15 | + */ | |
16 | + data: { | |
17 | + calendarConfig: { | |
18 | + theme: 'elegant', | |
19 | + weekMode: true, // 周视图模式 | |
20 | + // highlightToday: true, // 是否高亮显示当天 | |
21 | + hideHeader: true, // 隐藏日历头部操作栏 | |
22 | + autoChoosedWhenJump: true, // 设置默认日期及跳转到指定日期后是否需要自动选中 | |
23 | + defaultDate: moment(new Date().getTime()).format('YYYY-MM-DD'), // 默认选中指定某天,如需选中需配置 autoChoosedWhenJump: true | |
24 | + }, | |
25 | + isDisplay: false, | |
26 | + calendar: {}, //日历 | |
27 | + valueId: '', //任务ID | |
28 | + taskVo: { | |
29 | + allowRepairCard: 0, | |
30 | + hasData: 0, | |
31 | + id: 0, | |
32 | + releaseTime: "", | |
33 | + signTotal: 0, | |
34 | + taskCycle: 0, | |
35 | + taskDesc: "", | |
36 | + taskFrequency: "", | |
37 | + taskTitle: "", | |
38 | + weekDay: "" | |
39 | + }, | |
40 | + resData: [], //成果数据 | |
41 | + recordVo: { | |
42 | + commitTime: "", | |
43 | + files: [], | |
44 | + signDate: "", | |
45 | + taskRecordDesc: "", | |
46 | + taskStatisticsParam: "" | |
47 | + }, //成果数据当天 | |
48 | + recordVoShow: false, | |
49 | + dayMoment: 0 , //数据月份 | |
50 | + }, | |
51 | + /** | |
52 | + * 选择日期后执行的事件 | |
53 | + */ | |
54 | + afterTapDate(e) { | |
55 | + let date = e.detail.date | |
56 | + // let month = e.detail.month | |
57 | + // let year = e.detail.year | |
58 | + let recordVo = this.data.resData.eventDetails[date - 1].recordVo | |
59 | + if (recordVo != null) { | |
60 | + console.log('复制',recordVo) | |
61 | + this.setData({ | |
62 | + recordVo: recordVo | |
63 | + }) | |
64 | + this.setData({ | |
65 | + recordVoShow: true | |
66 | + }) | |
67 | + }else { | |
68 | + this.setData({ | |
69 | + recordVoShow: false | |
70 | + }) | |
71 | + } | |
72 | + }, | |
73 | + //获取信息 | |
74 | + getInfo(doday,isOne=0) { | |
75 | + request({ | |
76 | + url: `/wx/task/getSignRecord`, | |
77 | + method: 'get', | |
78 | + data: { | |
79 | + // wx.getStorageSync('userInfo_id'), | |
80 | + "taskId": this.data.valueId, | |
81 | + "signDate": doday | |
82 | + }, | |
83 | + }).then(res => { | |
84 | + if (res.code == 0) { | |
85 | + this.setData({ | |
86 | + resData: res.data | |
87 | + }) | |
88 | + this.getV2(res.data) | |
89 | + if(isOne ==1) { | |
90 | + let e = { | |
91 | + detail: { | |
92 | + date: moment().date(), | |
93 | + month: moment().month() + 1, | |
94 | + year: moment().year() | |
95 | + } | |
96 | + } | |
97 | + this.afterTapDate(e) | |
98 | + } | |
99 | + } else { | |
100 | + wx.showToast({ | |
101 | + title: res.msg, | |
102 | + icon: 'none' | |
103 | + }) | |
104 | + } | |
105 | + }) | |
106 | + }, | |
107 | + //初始化日历 | |
108 | + initialize() { | |
109 | + // 设置待办 | |
110 | + this.setData({ | |
111 | + 'calendar': this.selectComponent('#calendar').calendar | |
112 | + }) | |
113 | + }, | |
114 | + //显示日历 | |
115 | + getV2(resData) { | |
116 | + this.setData({ | |
117 | + taskVo: resData.taskVo | |
118 | + }) | |
119 | + // const calendar = this.selectComponent('#calendar').calendar | |
120 | + this.data.calendar.setTodos({ | |
121 | + // 待办点标记设置 | |
122 | + pos: 'bottom', // 待办点标记位置 ['top', 'bottom'] | |
123 | + dotColor: 'red', // 待办点标记颜色 | |
124 | + circle: false, // 待办圆圈标记设置(如圆圈标记已签到日期),该设置与点标记设置互斥 | |
125 | + showLabelAlways: true, // 点击时是否显示待办事项(圆点/文字),在 circle 为 true 及当日历配置 showLunar 为 true 时,此配置失效 | |
126 | + dates: resData.eventDetails | |
127 | + }) | |
128 | + }, | |
129 | + /** | |
130 | + * 生命周期函数--监听页面加载 | |
131 | + */ | |
132 | + onLoad(options) { | |
133 | + this.setData({ | |
134 | + valueId: options.valueId | |
135 | + }) | |
136 | + }, | |
137 | + // 统一返回 | |
138 | + handleBack() { | |
139 | + wx.navigateBack() | |
140 | + }, | |
141 | + /** | |
142 | + * 生命周期函数--监听页面初次渲染完成 | |
143 | + */ | |
144 | + onReady() { | |
145 | + this.initialize() | |
146 | + this.getInfo(moment(new Date().getTime()).format('YYYY-MM-DD'),1) | |
147 | + }, | |
52 | 148 | }) |
53 | 149 | \ No newline at end of file | ... | ... |
pages/index/achievement/achievement.json
1 | 1 | { |
2 | 2 | "usingComponents": { |
3 | 3 | "van-icon": "@vant/weapp/icon/index", |
4 | - "calendar": "/component/v2/index" | |
5 | - } | |
4 | + "calendar": "/component/v2/index", | |
5 | + "van-popup": "@vant/weapp/popup/index", | |
6 | + "van-field": "@vant/weapp/field/index", | |
7 | + "van-image": "@vant/weapp/image/index", | |
8 | + "van-button": "@vant/weapp/button/index" | |
9 | + }, | |
10 | + "navigationBarTitleText": "我的成果" | |
6 | 11 | } |
7 | 12 | \ No newline at end of file | ... | ... |
pages/index/achievement/achievement.wxml
1 | 1 | <!--pages/index/achievement/achievement.wxml--> |
2 | 2 | <view class="punch_detail"> |
3 | - <calendar id="calendar" config="{{calendarConfig}}" bind:takeoverTap="takeoverTap" /> | |
3 | + <calendar id="calendar" config="{{calendarConfig}}" bind:afterTapDate="afterTapDate"/> | |
4 | 4 | <!-- <view class="btn" bindtap="getInfo">按钮</view> --> |
5 | + <view class="line_grey"></view> | |
6 | + <view class="card"> | |
7 | + <view class="card_title">{{taskVo.taskTitle}}</view> | |
8 | + <view class="card_flex"> | |
9 | + <view class="flex_grey">已进行 {{taskVo.signTotal +' / ' +taskVo.taskCycle}} 天</view> | |
10 | + <view class="flex_grey">打卡频次 : {{taskVo.taskFrequency}}</view> | |
11 | + <view class="flex_grey">{{taskVo.hasData == 1 ?'允许补卡': '不允许补卡'}}</view> | |
12 | + </view> | |
13 | + <view class="card_context">{{taskVo.taskDesc}}</view> | |
14 | + <view class="grey_font"> | |
15 | + <view>我发布与{{taskVo.weekDay}} {{taskVo.releaseTime}}</view> | |
16 | + <view class="grey_font_bottom"></view> | |
17 | + </view> | |
18 | + </view> | |
19 | + | |
20 | + <view class="grey_line"></view> | |
21 | + <view class="box" wx:if="{{recordVoShow}}"> | |
22 | + <view class="box_title">打卡成果</view> | |
23 | + <view class="box_blue">本次打卡坚持了<span>{{recordVo.taskStatisticsParam}}分钟</span></view> | |
24 | + <view class="box_grey">"{{recordVo.taskRecordDesc}}"</view> | |
25 | + <view class="box_pic"> | |
26 | + <view class="box_img" wx:for="{{recordVo.files}}" wx:key="index" wx:for-item="value"> | |
27 | + <van-image width="100%" height="26vw" fit="fill" src="{{value}}" /> | |
28 | + </view> | |
29 | + </view> | |
30 | + </view> | |
5 | 31 | </view> |
6 | 32 | \ No newline at end of file | ... | ... |
pages/index/achievement/achievement.wxss
... | ... | @@ -4,4 +4,131 @@ |
4 | 4 | height: 20vw; |
5 | 5 | background-color: aqua; |
6 | 6 | font-size: 5vw; |
7 | +} | |
8 | +.line_grey { | |
9 | + width: 90vw; | |
10 | + height: 1px; | |
11 | + background-color: #999; | |
12 | + margin: 10px 5vw 20px; | |
13 | +} | |
14 | +.card { | |
15 | + width: 92vw; | |
16 | + margin-left: 4vw; | |
17 | +} | |
18 | +.card_title { | |
19 | + font-size: 18px; | |
20 | + color: #556191; | |
21 | + margin: 15px 0; | |
22 | +} | |
23 | +.card_flex { | |
24 | + display: flex; | |
25 | +} | |
26 | +.flex_grey { | |
27 | + padding: 7px 10px; | |
28 | + box-sizing: border-box; | |
29 | + margin: 0 5px 10px 0; | |
30 | + font-size: 13px; | |
31 | + background-color: #F4F4F4; | |
32 | + color: #666666; | |
33 | + border-radius: 3px; | |
34 | +} | |
35 | +.card_context { | |
36 | + font-size: 16px; | |
37 | + margin: 10px 0; | |
38 | +} | |
39 | +.grey_font { | |
40 | + font-size: 14px; | |
41 | + color: #999999; | |
42 | + margin: 20px 0; | |
43 | +} | |
44 | +.grey_font_bottom { | |
45 | + margin-top: 5px; | |
46 | +} | |
47 | +.btn_box { | |
48 | + display: flex; | |
49 | + justify-content: space-around; | |
50 | + position: fixed; | |
51 | + bottom: 50px; | |
52 | + width: 100vw; | |
53 | +} | |
54 | +.pop_title { | |
55 | + font-size: 18px; | |
56 | + font-weight: bold; | |
57 | + text-align: center; | |
58 | + margin: 20px 0; | |
59 | +} | |
60 | +.pop_flex { | |
61 | + display: flex; | |
62 | + justify-content: space-between; | |
63 | + align-items: center; | |
64 | + padding: 0 20px; | |
65 | + box-sizing: border-box; | |
66 | +} | |
67 | +.pop_cell { | |
68 | + width: 40vw; | |
69 | + display: flex; | |
70 | + align-items: center; | |
71 | +} | |
72 | +.pop_fz { | |
73 | + width: 70px; | |
74 | +} | |
75 | +.pop_btn { | |
76 | + position: absolute; | |
77 | + bottom: 30px; | |
78 | + width: 90vw; | |
79 | + margin: 0 5vw; | |
80 | +} | |
81 | +.pop_tip { | |
82 | + position: absolute; | |
83 | + bottom: 90px; | |
84 | + width: 90vw; | |
85 | + margin: 0 5vw; | |
86 | +} | |
87 | +.pop_pic { | |
88 | + width: 70px; | |
89 | + height: 30px; | |
90 | +} | |
91 | +.grey_line { | |
92 | + width: 90vw; | |
93 | + height: 1px; | |
94 | + margin: 20vw 5vw 10vw ; | |
95 | + background-color: #999; | |
96 | +} | |
97 | +.box { | |
98 | + padding: 0 5vw; | |
99 | + box-sizing: border-box; | |
100 | + margin-bottom: 20px; | |
101 | +} | |
102 | +.box_title { | |
103 | + font-size: 20px; | |
104 | + font-weight: bold; | |
105 | +} | |
106 | +.box_blue { | |
107 | + padding: 7px 10px; | |
108 | + box-sizing: border-box; | |
109 | + background-color: #EDF5FF; | |
110 | + color: #333333; | |
111 | + margin: 15px 0; | |
112 | + border-radius: 10px; | |
113 | +} | |
114 | +.box_blue span { | |
115 | + color: #3A86F5; | |
116 | +} | |
117 | +.box_grey { | |
118 | + padding: 18px 10px; | |
119 | + box-sizing: border-box; | |
120 | + background-color: #FBFBFB; | |
121 | + color: #666666 ; | |
122 | + margin: 15px 0; | |
123 | + border-radius: 10px; | |
124 | +} | |
125 | +.box_pic { | |
126 | + display: flex; | |
127 | + justify-content: space-between; | |
128 | + flex-wrap: wrap; | |
129 | +} | |
130 | +.box_img { | |
131 | + width: 26vw; | |
132 | + margin:0 0 10px; | |
133 | + border-radius: 10px; | |
7 | 134 | } |
8 | 135 | \ No newline at end of file | ... | ... |
pages/index/index.js
... | ... | @@ -49,15 +49,15 @@ Page({ |
49 | 49 | }, |
50 | 50 | |
51 | 51 | // 打卡成果 |
52 | - handleAchievement(){ | |
52 | + handleAchievement(e){ | |
53 | 53 | wx.navigateTo({ |
54 | - url: '/pages/index/achievement/achievement', | |
54 | + url: '/pages/index/achievement/achievement?valueId='+e.currentTarget.dataset.valueid , | |
55 | 55 | }) |
56 | 56 | }, |
57 | 57 | // 去打卡 |
58 | - handleDetail(){ | |
58 | + handleDetail(e){ | |
59 | 59 | wx.navigateTo({ |
60 | - url: '/pages/index/punchDetail/punchDetail', | |
60 | + url: '/pages/index/punchDetail/punchDetail?valueId='+e.currentTarget.dataset.valueid , | |
61 | 61 | }) |
62 | 62 | }, |
63 | 63 | /** | ... | ... |
pages/index/index.wxml
1 | 1 | <view class="main"> |
2 | - <view class="bck" style="background-image: url('https://szyundisk.oss-cn-hangzhou.aliyuncs.com/null/67c3d489-6635-4bef-90f2-03553f56fd0a.png')"> | |
3 | - </view> | |
4 | - <view class="box"> | |
5 | - <view class="title_name"> | |
2 | + <!-- <view class="bck" style="background-image: url('https://szyundisk.oss-cn-hangzhou.aliyuncs.com/null/67c3d489-6635-4bef-90f2-03553f56fd0a.png')"> | |
3 | + </view> --> | |
6 | 4 | <!-- 打卡排行榜 --> |
5 | + <!-- <view class="box"> | |
6 | + <view class="title_name"> | |
7 | 7 | </view> |
8 | 8 | <vidw class="title_view" bindtap="toRank">立即查看</vidw> |
9 | - <!-- <view class="tabs_css"> | |
9 | + <view class="tabs_css"> | |
10 | 10 | <view class="{{active == 1?'tabs_item check' :'tabs_item no_check'}}" bindtap="checkTabs" data-index='1'>我的打卡</view> |
11 | 11 | <view class="{{active == 2?'tabs_item check' :'tabs_item no_check'}} " bindtap='checkTabs' data-index='2'>我创建的</view> |
12 | - </view> --> | |
12 | + </view> | |
13 | 13 | <view class="tabs_div"></view> |
14 | - </view> | |
14 | + </view> --> | |
15 | 15 | <view class="white_box"> |
16 | 16 | <view class="card" wx:for="{{taskList}}" wx:key="index" wx:for-item="value"> |
17 | 17 | <view class="card_title"> |
... | ... | @@ -44,9 +44,9 @@ |
44 | 44 | </view> |
45 | 45 | <view class="grey_line"></view> |
46 | 46 | <view class="blue_font"> |
47 | - <view bindtap="handleAchievement">打卡成果</view> | |
47 | + <view bindtap="handleAchievement" data-valueId="{{value.id}}">打卡成果</view> | |
48 | 48 | <view class="blue_line"></view> |
49 | - <view bindtap="handleDetail">去打卡</view> | |
49 | + <view bindtap="handleDetail" data-valueId="{{value.id}}">去打卡</view> | |
50 | 50 | </view> |
51 | 51 | </view> |
52 | 52 | </view> | ... | ... |
pages/index/newPunch/newPunch.js
... | ... | @@ -28,7 +28,7 @@ Page({ |
28 | 28 | //弹出层 |
29 | 29 | //统计单位 |
30 | 30 | unitShow: false, |
31 | - columnsUnit: ['小时', '天', '月'], | |
31 | + columnsUnit: ['分钟', '小时', '个', '篇', '本', '张', '页', '次'], | |
32 | 32 | //开始时间 |
33 | 33 | startTimeShow: false, |
34 | 34 | columnsStartTime: ['9', '10', '11', '12'], |
... | ... | @@ -67,7 +67,7 @@ Page({ |
67 | 67 | columnsClockLack: [1,2,3], |
68 | 68 | //必须包含 |
69 | 69 | containShow: false, |
70 | - columnsContain: ['图片'], | |
70 | + columnsContain: ['无限制','图片'], | |
71 | 71 | }, |
72 | 72 | //获取模板详情 / 空模板 |
73 | 73 | getDetail() { |
... | ... | @@ -99,7 +99,7 @@ Page({ |
99 | 99 | 'form.remindTime': data.remindTime |
100 | 100 | }) |
101 | 101 | this.setData({ |
102 | - 'form.startDate': data.startDate | |
102 | + 'form.startDate': moment(new Date().getTime()).format('YYYY-MM-DD') | |
103 | 103 | }) |
104 | 104 | this.setData({ |
105 | 105 | 'form.statisticsUnit': data.statisticsUnit |
... | ... | @@ -183,6 +183,17 @@ Page({ |
183 | 183 | }, |
184 | 184 | }); |
185 | 185 | }, |
186 | + //删除 | |
187 | + delFile(event) { | |
188 | + let [list,index] = [this.data.fileList,event.detail.index] | |
189 | + list.splice(index,1) | |
190 | + this.setData({ | |
191 | + fileList:list | |
192 | + }) | |
193 | + this.setData({ | |
194 | + 'form.taskFileUrl': this.data.fileList.map(v => v.url) | |
195 | + }) | |
196 | + }, | |
186 | 197 | //开关 |
187 | 198 | onswitchChange({ |
188 | 199 | detail | ... | ... |
pages/index/newPunch/newPunch.wxml
1 | 1 | <!--pages/index/rank/rank.wxml--> |
2 | 2 | <view class="punch_detail"> |
3 | 3 | <view class="title_card"> |
4 | - <van-cell-group> | |
5 | - <van-field value="{{ form.taskTitle }}" placeholder="请输入标题" border="{{ false }}" bind:change="onfieldChange" /> | |
4 | + <van-cell-group border="{{ false }}"> | |
5 | + <van-field value="{{ form.taskTitle }}" placeholder="请输入标题" border="{{ false }}" bind:change="onfieldChange" /> | |
6 | 6 | </van-cell-group> |
7 | 7 | <view class="grey_line"></view> |
8 | 8 | <view class="box_card"> |
9 | - <van-cell-group> | |
10 | - <van-field value="{{ form.taskDesc }}" type="textarea" placeholder="请输入" autosize border="{{ false }}" bind:change="onfieldDescChange" /> | |
9 | + <van-cell-group border="{{ false }}"> | |
10 | + <van-field value="{{ form.taskDesc }}" type="textarea" placeholder="请输入" autosize border="{{ false }}" bind:change="onfieldDescChange" /> | |
11 | 11 | </van-cell-group> |
12 | 12 | </view> |
13 | 13 | <view class="tip_card"> |
14 | - <van-uploader accept='image' file-list="{{ fileList }}" deletable="{{ true }}" bind:after-read="afterRead"> | |
14 | + <van-uploader accept='image' file-list="{{ fileList }}" deletable="{{ true }}" bind:after-read="afterRead" bind:delete="delFile"> | |
15 | 15 | <view class="tip_item"> |
16 | 16 | <image class="pic" src="/img/answer/tp1.png" alt="" /> |
17 | 17 | </view> |
... | ... | @@ -31,12 +31,12 @@ |
31 | 31 | </view> |
32 | 32 | </view> |
33 | 33 | <view class="grey_line"></view> |
34 | - <view class="white_card_nopadding"> | |
35 | - <van-cell-group> | |
34 | + <view class="white_card_nopadding" wx:if="{{form.hasData == 1}}"> | |
35 | + <van-cell-group border="{{ false }}"> | |
36 | 36 | <van-cell title="统计单位" value="{{ form.statisticsUnit }}" is-link label="请选择统计单位" border="{{ false }}" bindtap="openUnitShow" /> |
37 | 37 | </van-cell-group> |
38 | 38 | </view> |
39 | - <view class="white_card"> | |
39 | + <view class="white_card" wx:if="{{form.hasData == 1}}"> | |
40 | 40 | <view>允许补卡</view> |
41 | 41 | <view> |
42 | 42 | <van-switch checked="{{ form.allowRepairCard }}" size='20' bind:change="onChange" active-value='1' inactive-value='2' /> |
... | ... | @@ -46,29 +46,29 @@ |
46 | 46 | 开启后,在打卡周期内,学生家长可对未打卡的任务进行补卡。 |
47 | 47 | </view> |
48 | 48 | <view class="white_card_nopadding"> |
49 | - <van-cell-group> | |
49 | + <van-cell-group border="{{ false }}"> | |
50 | 50 | <van-cell title="开始时间" value="{{ form.startDate }}" is-link border="{{ false }}" bindtap="openStartTimeShow" /> |
51 | 51 | </van-cell-group> |
52 | 52 | </view> |
53 | 53 | <view class="white_card_nopadding"> |
54 | - <van-cell-group> | |
54 | + <van-cell-group border="{{ false }}"> | |
55 | 55 | <van-cell title="打卡周期" value="{{ form.taskCycle + ' 天'}}" is-link border="{{ false }}" bindtap="openClockCycleShow" /> |
56 | 56 | </van-cell-group> |
57 | 57 | </view> |
58 | 58 | <view class="white_card_nopadding"> |
59 | - <van-cell-group> | |
59 | + <van-cell-group border="{{ false }}"> | |
60 | 60 | <van-cell title="打卡频次" value="{{ form.taskFrequency }}" is-link border="{{ false }}" bindtap="openClockRateShow" /> |
61 | 61 | </van-cell-group> |
62 | 62 | </view> |
63 | 63 | |
64 | 64 | <view class="clearance"></view> |
65 | 65 | <view class="white_card_nopadding"> |
66 | - <van-cell-group> | |
66 | + <van-cell-group border="{{ false }}"> | |
67 | 67 | <van-cell title="打卡提醒" value="{{ form.remindTime }}" is-link border="{{ false }}" bindtap="openClockRemindShow" /> |
68 | 68 | </van-cell-group> |
69 | 69 | </view> |
70 | 70 | <view class="white_card_nopadding"> |
71 | - <van-cell-group> | |
71 | + <van-cell-group border="{{ false }}"> | |
72 | 72 | <van-cell title="缺卡打卡提醒" value="{{ form.lackNum + ' 次' }}" is-link border="{{ false }}" bindtap="openClockLackShow" /> |
73 | 73 | </van-cell-group> |
74 | 74 | </view> |
... | ... | @@ -77,7 +77,7 @@ |
77 | 77 | 学生如缺卡达到一定条件,将会提醒家长 |
78 | 78 | </view> |
79 | 79 | <view class="white_card_nopadding"> |
80 | - <van-cell-group> | |
80 | + <van-cell-group border="{{ false }}" > | |
81 | 81 | <van-cell title="提交时必须包含" value="{{ form.submitCondition }}" is-link border="{{ false }}" bindtap="openContainShow" /> |
82 | 82 | </van-cell-group> |
83 | 83 | </view> | ... | ... |
pages/index/punchDetail/punchDetail.js
1 | -// pages/index/punchDetail/punchDetail.js | |
1 | +// pages/index/achievement/achievement.js | |
2 | +// 引入插件安装器 | |
3 | +import plugin from '../../../component/v2/plugins/index' | |
4 | +import week from '../../../component/v2/plugins/week' | |
5 | +import todo from '../../../component/v2/plugins/todo' | |
6 | +import request from '../../../api/request.js' | |
7 | +import moment from 'moment'; | |
8 | +plugin | |
9 | + .use(week) | |
10 | + .use(todo) | |
2 | 11 | Page({ |
3 | 12 | |
4 | 13 | /** |
5 | 14 | * 页面的初始数据 |
6 | 15 | */ |
7 | 16 | data: { |
8 | - showEdit: false, //确认打卡 | |
9 | - Clocked: false, //已打卡状态,只是为了演示用 | |
10 | - showSuccess:false | |
17 | + calendarConfig: { | |
18 | + theme: 'elegant', | |
19 | + weekMode: true, // 周视图模式 | |
20 | + highlightToday: true, // 是否高亮显示当天 | |
21 | + hideHeader: true, // 隐藏日历头部操作栏 | |
22 | + }, | |
23 | + isDisplay: false, | |
24 | + clockShow: false, | |
25 | + form: { | |
26 | + id: '', //任务ID | |
27 | + isRepair: 1, //是否补卡1立即打卡2补卡 | |
28 | + repairDate: '', //补卡日期,当isRepair=2时必传,格式:YYYY-MM-dd | |
29 | + statisticsUnit: '', //统计单位所含内容 | |
30 | + taskDesc: '', //打卡描述内容 | |
31 | + taskFileUrl: [], //任务文件(含多个) | |
32 | + userId: '' | |
33 | + }, | |
34 | + fileList: [], | |
35 | + calendar: {}, //日历 | |
36 | + valueId: '', //任务ID | |
37 | + taskVo: { | |
38 | + allowRepairCard: 0, | |
39 | + hasData: 0, | |
40 | + id: 0, | |
41 | + releaseTime: "", | |
42 | + signTotal: 0, | |
43 | + taskCycle: 0, | |
44 | + taskDesc: "", | |
45 | + taskFrequency: "", | |
46 | + taskTitle: "", | |
47 | + weekDay: "" | |
48 | + }, | |
49 | + resData: [], //成果数据 | |
50 | + recordVo: { | |
51 | + commitTime: "", | |
52 | + files: [], | |
53 | + signDate: "", | |
54 | + taskRecordDesc: "", | |
55 | + taskStatisticsParam: "" | |
56 | + }, //成果数据当天 | |
57 | + recordVoShow: false, | |
58 | + isToday:true,//是否是今天 | |
11 | 59 | }, |
12 | - | |
13 | - /** | |
14 | - * 生命周期函数--监听页面加载 | |
60 | + /** | |
61 | + * 选择日期后执行的事件 | |
15 | 62 | */ |
16 | - onLoad(options) { | |
63 | + afterTapDate(e) { | |
64 | + let date = e.detail.date | |
65 | + let isToday = e.detail.isToday | |
66 | + this.setData({ | |
67 | + isToday | |
68 | + }) | |
69 | + let recordVo = this.data.resData.eventDetails[date - 1].recordVo | |
70 | + if (recordVo != null) { | |
71 | + console.log('复制',recordVo) | |
72 | + this.setData({ | |
73 | + recordVo: recordVo | |
74 | + }) | |
75 | + this.setData({ | |
76 | + recordVoShow: true | |
77 | + }) | |
78 | + }else { | |
79 | + this.setData({ | |
80 | + recordVoShow: false | |
81 | + }) | |
82 | + } | |
83 | + }, | |
84 | + //获取信息 | |
85 | + getInfo(doday) { | |
86 | + request({ | |
87 | + url: `/wx/task/getSignRecord`, | |
88 | + method: 'get', | |
89 | + data: { | |
90 | + // wx.getStorageSync('userInfo_id'), | |
91 | + "taskId": this.data.valueId, | |
92 | + "signDate": doday | |
93 | + }, | |
94 | + }).then(res => { | |
95 | + if (res.code == 0) { | |
96 | + this.setData({ | |
97 | + resData: res.data | |
98 | + }) | |
99 | + this.getV2(res.data) | |
100 | + } else { | |
101 | + wx.showToast({ | |
102 | + title: res.msg, | |
103 | + icon: 'none' | |
104 | + }) | |
105 | + } | |
106 | + }) | |
107 | + }, | |
108 | + //初始化日历 | |
109 | + initialize() { | |
110 | + // 设置待办 | |
111 | + this.setData({ | |
112 | + 'calendar': this.selectComponent('#calendar').calendar | |
113 | + }) | |
17 | 114 | |
18 | 115 | }, |
19 | - // 打卡成果 | |
20 | - handleAchievement(){ | |
116 | + //显示日历 | |
117 | + getV2(resData) { | |
118 | + this.setData({ | |
119 | + taskVo: resData.taskVo | |
120 | + }) | |
121 | + // const calendar = this.selectComponent('#calendar').calendar | |
122 | + this.data.calendar.setTodos({ | |
123 | + // 待办点标记设置 | |
124 | + pos: 'bottom', // 待办点标记位置 ['top', 'bottom'] | |
125 | + dotColor: 'purple', // 待办点标记颜色 | |
126 | + circle: false, // 待办圆圈标记设置(如圆圈标记已签到日期),该设置与点标记设置互斥 | |
127 | + showLabelAlways: true, // 点击时是否显示待办事项(圆点/文字),在 circle 为 true 及当日历配置 showLunar 为 true 时,此配置失效 | |
128 | + dates: resData.eventDetails | |
129 | + }) | |
130 | + }, | |
131 | + //成果 | |
132 | + toAchieve(e) { | |
21 | 133 | wx.navigateTo({ |
22 | - url: '/pages/index/achievement/achievement', | |
134 | + url: '../achievement/achievement?valueId='+this.data.valueId, | |
23 | 135 | }) |
24 | 136 | }, |
25 | - // 打开打卡信息填写 | |
26 | - handleEdit() { | |
27 | - console.log(111) | |
137 | + //唤起 打卡 | |
138 | + toClock() { | |
139 | + let selectData = this.data.calendar.getSelectedDates() | |
140 | + let doday = selectData[0].year + '-' + selectData[0].month + '-' + selectData[0].date | |
141 | + console.log(doday) | |
142 | + | |
28 | 143 | this.setData({ |
29 | - showEdit: true | |
144 | + clockShow: true | |
30 | 145 | }) |
31 | 146 | }, |
32 | - // 关闭打卡信息填写 | |
33 | - closeEdit() { | |
147 | + //确定-打卡 | |
148 | + toCardTask() { | |
34 | 149 | this.setData({ |
35 | - showEdit: false | |
150 | + 'form.id': this.data.valueId | |
36 | 151 | }) |
37 | - }, | |
38 | - // 提交打卡信息,跳转打卡成功页面 | |
39 | - handleSubmit() { | |
40 | 152 | this.setData({ |
41 | - Clocked: true, | |
42 | - showEdit: false, | |
43 | - showSuccess:true | |
153 | + 'form.userId': wx.getStorageSync('userInfo_id') | |
154 | + }) | |
155 | + console.log(this.data.form) | |
156 | + request({ | |
157 | + url: `/wx/task/commitCardTask`, | |
158 | + method: 'post', | |
159 | + data: this.data.form, | |
160 | + }).then(res => { | |
161 | + if (res.code == 0) { | |
162 | + wx.showToast({ | |
163 | + title: '打卡成功', | |
164 | + icon: 'none' | |
165 | + }) | |
166 | + this.closeClockShow() | |
167 | + } else { | |
168 | + wx.showToast({ | |
169 | + title: res.msg, | |
170 | + icon: 'none' | |
171 | + }) | |
172 | + } | |
44 | 173 | }) |
45 | 174 | }, |
46 | - colseSuccess(){ | |
175 | + /** | |
176 | + * 生命周期函数--监听页面加载 | |
177 | + */ | |
178 | + onLoad(options) { | |
47 | 179 | this.setData({ |
48 | - showSuccess:false | |
180 | + valueId: options.valueId | |
49 | 181 | }) |
50 | 182 | }, |
183 | + /** | |
184 | + * 生命周期函数--监听页面初次渲染完成 | |
185 | + */ | |
186 | + onReady() { | |
187 | + this.initialize() | |
188 | + this.getInfo(moment(new Date().getTime()).format('YYYY-MM-DD')) | |
189 | + }, | |
190 | + // 统一返回 | |
51 | 191 | handleBack() { |
52 | 192 | wx.navigateBack() |
53 | 193 | }, |
... | ... | @@ -56,5 +196,79 @@ Page({ |
56 | 196 | */ |
57 | 197 | onShareAppMessage() { |
58 | 198 | |
199 | + }, | |
200 | + //统计单位所含内容 | |
201 | + onStatisChange(e) { | |
202 | + this.setData({ | |
203 | + 'form.statisticsUnit': e.detail | |
204 | + }) | |
205 | + }, | |
206 | + //内容 | |
207 | + onTaskDescChange(e) { | |
208 | + this.setData({ | |
209 | + 'form.taskDesc': e.detail | |
210 | + }) | |
211 | + }, | |
212 | + //文件上传 | |
213 | + afterRead(event) { | |
214 | + const { | |
215 | + file | |
216 | + } = event.detail; | |
217 | + var that = this | |
218 | + // 当设置 mutiple 为 true 时, file 为数组格式,否则为对象格式 | |
219 | + wx.uploadFile({ | |
220 | + url: 'https://market.myjxt.com:51311/file/fileUpload', // 仅为示例,非真实的接口地址 | |
221 | + filePath: file.url, | |
222 | + name: 'file', | |
223 | + formData: { | |
224 | + user: 'test' | |
225 | + }, | |
226 | + success(res) { | |
227 | + // 上传完成需要更新 fileList | |
228 | + const { | |
229 | + fileList = [] | |
230 | + } = that.data; | |
231 | + fileList.push({ | |
232 | + ...file, | |
233 | + url: res.data | |
234 | + }); | |
235 | + console.log(res, fileList) | |
236 | + that.setData({ | |
237 | + fileList | |
238 | + }); | |
239 | + that.setData({ | |
240 | + 'form.taskFileUrl': fileList.map(v => v.url) | |
241 | + }) | |
242 | + }, | |
243 | + }); | |
244 | + }, | |
245 | + //删除 | |
246 | + delFile(event) { | |
247 | + let [list, index] = [this.data.fileList, event.detail.index] | |
248 | + list.splice(index, 1) | |
249 | + this.setData({ | |
250 | + fileList: list | |
251 | + }) | |
252 | + this.setData({ | |
253 | + 'form.taskFileUrl': this.data.fileList.map(v => v.url) | |
254 | + }) | |
255 | + }, | |
256 | + //关闭 | |
257 | + closeClockShow() { | |
258 | + let form = { | |
259 | + id: '', //任务ID | |
260 | + isRepair: 1, //是否补卡1立即打卡2补卡 | |
261 | + repairDate: '', //补卡日期,当isRepair=2时必传,格式:YYYY-MM-dd | |
262 | + statisticsUnit: '', //统计单位所含内容 | |
263 | + taskDesc: '', //打卡描述内容 | |
264 | + taskFileUrl: [], //任务文件(含多个) | |
265 | + userId: '' | |
266 | + } | |
267 | + this.setData({ | |
268 | + form: form | |
269 | + }) | |
270 | + this.setData({ | |
271 | + clockShow: false | |
272 | + }) | |
59 | 273 | } |
60 | 274 | }) |
61 | 275 | \ No newline at end of file | ... | ... |
pages/index/punchDetail/punchDetail.json
1 | 1 | { |
2 | 2 | "usingComponents": { |
3 | 3 | "van-icon": "@vant/weapp/icon/index", |
4 | - "van-popup": "@vant/weapp/popup/index" | |
5 | - } | |
4 | + "calendar": "/component/v2/index", | |
5 | + "van-popup": "@vant/weapp/popup/index", | |
6 | + "van-field": "@vant/weapp/field/index", | |
7 | + "van-uploader": "@vant/weapp/uploader/index", | |
8 | + "van-button": "@vant/weapp/button/index" | |
9 | + }, | |
10 | + "navigationBarTitleText": "立即打卡" | |
6 | 11 | } |
7 | 12 | \ No newline at end of file | ... | ... |
pages/index/punchDetail/punchDetail.wxml
1 | -<!--pages/index/punchDetail/punchDetail.wxml--> | |
1 | +<!--pages/index/achievement/achievement.wxml--> | |
2 | 2 | <view class="punch_detail"> |
3 | - <!-- 顶部统一返回 --> | |
4 | - <view class="navigation_back" bindtap="handleBack"> | |
5 | - <van-icon name="arrow-left" /> | |
3 | + <calendar id="calendar" config="{{calendarConfig}}" bind:afterTapDate="afterTapDate"/> | |
4 | + <!-- <view class="btn" bindtap="getInfo">按钮</view> --> | |
5 | + <view class="line_grey"></view> | |
6 | + <view class="card"> | |
7 | + <view class="card_title">{{taskVo.taskTitle}}</view> | |
8 | + <view class="card_flex"> | |
9 | + <view class="flex_grey">已进行 {{taskVo.signTotal +' / ' +taskVo.taskCycle}} 天</view> | |
10 | + <view class="flex_grey">打卡频次 : {{taskVo.taskFrequency}}</view> | |
11 | + <view class="flex_grey">{{taskVo.hasData == 1 ?'允许补卡': '不允许补卡'}}</view> | |
12 | + </view> | |
13 | + <view class="card_context">{{taskVo.taskDesc}}</view> | |
14 | + <view class="grey_font"> | |
15 | + <view>我发布与{{taskVo.weekDay}} {{taskVo.releaseTime}}</view> | |
16 | + <view class="grey_font_bottom"></view> | |
17 | + </view> | |
18 | + </view> | |
19 | + <view class="btn_box"> | |
20 | + <van-button round color="#F4F4F4" bindtap='toAchieve' custom-style="color: #000;">我的成果</van-button> | |
21 | + <van-button round type="info" bindtap='toClock' wx:if="{{isToday}}">立即打卡</van-button> | |
6 | 22 | </view> |
7 | - <!-- 已打卡 --> | |
8 | - <image class="temporary" wx:if="{{Clocked}}" src="/img/_check_in3.png" mode="widthFix" alt="" /> | |
9 | - <!-- 未打卡 --> | |
10 | - <image class="temporary" wx:else src="/img/_check_in1.png" mode="widthFix" alt="" /> | |
11 | - <!-- 我的成果 --> | |
12 | - <text class="temporary_box" wx:if="{{!Clocked}}" style="width: 308rpx;height: 100rpx;position: absolute;top: 1412rpx;left: 32rpx;" bindtap="handleAchievement"></text> | |
13 | - <!-- 立即打卡 --> | |
14 | - <text class="temporary_box" wx:if="{{!Clocked}}" style="width: 308rpx;height: 100rpx;position: absolute;top: 1412rpx;right: 32rpx;" bindtap="handleEdit"></text> | |
15 | 23 | |
16 | - <!-- 立即打卡 --> | |
17 | - <van-popup show="{{ showEdit }}" position="bottom" custom-style="height: 80%;" bind:close="closeEdit"> | |
18 | - <image class="temporary" src="/img/_check_in2.png" mode="widthFix" alt="" /> | |
19 | - <text class="temporary_box" style="width: 700rpx;height: 100rpx;position: absolute;top: 1452rpx;right: 32rpx;" bindtap="handleSubmit"></text> | |
20 | - </van-popup> | |
21 | - <!-- 打卡成果 --> | |
22 | - <van-popup show="{{ showSuccess }}" custom-style="width:80%;height: 80%;" bind:close="colseSuccess"> | |
23 | - <image class="temporary" src="/img/_check_in4.png" mode="widthFix" alt="" /> | |
24 | - <text class="temporary_box" style="width: 200rpx;height: 60rpx;position: absolute;top: 800rpx;left: 200rpx;" bindtap="colseSuccess"></text> | |
24 | + <!--打卡--> | |
25 | + <van-popup show="{{ clockShow }}" position="bottom" custom-style="height: 60%;" round bind:close="closeClockShow"> | |
26 | + <view class="pop_title">提交打卡成果</view> | |
27 | + <view class="pop_flex"> | |
28 | + <view>提交数据</view> | |
29 | + <view class="pop_cell"> | |
30 | + <view> | |
31 | + <van-cell-group> | |
32 | + <van-field value="{{ form.statisticsUnit }}" placeholder="请输入" border="{{ false }}" bind:change="onStatisChange" /> | |
33 | + </van-cell-group> | |
34 | + </view> | |
35 | + <view class="pop_fz">分钟</view> | |
36 | + </view> | |
37 | + </view> | |
38 | + <van-field value="{{ form.taskDesc }}" label="" type="textarea" placeholder="填写内容" autosize border="{{ false }}" bind:change="onTaskDescChange"/> | |
39 | + <view class="pop_tip"> | |
40 | + <van-uploader accept='image' file-list="{{ fileList }}" deletable="{{ true }}" bind:after-read="afterRead" bind:delete="delFile"> | |
41 | + <view class="tip_item"> | |
42 | + <image class="pop_pic" src="/img/answer/tp1.png" alt="" /> | |
43 | + </view> | |
44 | + </van-uploader> | |
45 | + <!-- <image class="pop_pic" src="/img/answer/tp1.png" alt="" /> --> | |
46 | + </view> | |
47 | + <view class="pop_btn"> | |
48 | + <van-button type="info" block round bindtap="toCardTask">提 交</van-button> | |
49 | + </view> | |
25 | 50 | </van-popup> |
26 | 51 | </view> |
27 | 52 | \ No newline at end of file | ... | ... |
pages/index/punchDetail/punchDetail.wxss
1 | 1 | /* pages/index/punchDetail/punchDetail.wxss */ |
2 | +/* pages/index/achievement/achievement.wxss */ | |
3 | +.btn { | |
4 | + width: 20vw; | |
5 | + height: 20vw; | |
6 | + background-color: aqua; | |
7 | + font-size: 5vw; | |
8 | +} | |
9 | +.line_grey { | |
10 | + width: 90vw; | |
11 | + height: 1px; | |
12 | + background-color: #999; | |
13 | + margin: 10px 5vw 20px; | |
14 | +} | |
15 | +.card { | |
16 | + width: 92vw; | |
17 | + margin-left: 4vw; | |
18 | +} | |
19 | +.card_title { | |
20 | + font-size: 18px; | |
21 | + color: #556191; | |
22 | + margin: 15px 0; | |
23 | +} | |
24 | +.card_flex { | |
25 | + display: flex; | |
26 | +} | |
27 | +.flex_grey { | |
28 | + padding: 7px 10px; | |
29 | + box-sizing: border-box; | |
30 | + margin: 0 5px 10px 0; | |
31 | + font-size: 13px; | |
32 | + background-color: #F4F4F4; | |
33 | + color: #666666; | |
34 | + border-radius: 3px; | |
35 | +} | |
36 | +.card_context { | |
37 | + font-size: 16px; | |
38 | + margin: 10px 0; | |
39 | +} | |
40 | +.grey_font { | |
41 | + font-size: 14px; | |
42 | + color: #999999; | |
43 | + margin: 20px 0; | |
44 | +} | |
45 | +.grey_font_bottom { | |
46 | + margin-top: 5px; | |
47 | +} | |
48 | +.btn_box { | |
49 | + display: flex; | |
50 | + justify-content: space-around; | |
51 | + position: fixed; | |
52 | + bottom: 50px; | |
53 | + width: 100vw; | |
54 | +} | |
55 | +.pop_title { | |
56 | + font-size: 18px; | |
57 | + font-weight: bold; | |
58 | + text-align: center; | |
59 | + margin: 20px 0; | |
60 | +} | |
61 | +.pop_flex { | |
62 | + display: flex; | |
63 | + justify-content: space-between; | |
64 | + align-items: center; | |
65 | + padding: 0 20px; | |
66 | + box-sizing: border-box; | |
67 | +} | |
68 | +.pop_cell { | |
69 | + width: 40vw; | |
70 | + display: flex; | |
71 | + align-items: center; | |
72 | +} | |
73 | +.pop_fz { | |
74 | + width: 70px; | |
75 | +} | |
76 | +.pop_btn { | |
77 | + position: absolute; | |
78 | + bottom: 30px; | |
79 | + width: 90vw; | |
80 | + margin: 0 5vw; | |
81 | +} | |
82 | +.pop_tip { | |
83 | + position: absolute; | |
84 | + bottom: 90px; | |
85 | + width: 90vw; | |
86 | + margin: 0 5vw; | |
87 | +} | |
88 | +.pop_pic { | |
89 | + width: 70px; | |
90 | + height: 30px; | |
91 | +} | |
2 | 92 | \ No newline at end of file | ... | ... |
pages/index/rank/rank.js
... | ... | @@ -11,10 +11,19 @@ Page({ |
11 | 11 | dayTime: '', |
12 | 12 | user: { |
13 | 13 | id: '', |
14 | - name: '', | |
14 | + userName: '', | |
15 | 15 | nickname: '', |
16 | 16 | phone: "", |
17 | 17 | token: "", |
18 | + headImg: '' | |
19 | + }, | |
20 | + selfData: { | |
21 | + id: 0, | |
22 | + isOneSelf: 0, | |
23 | + signDayNum: 0, | |
24 | + signPercentage: "", | |
25 | + signRecordNum: 0, | |
26 | + userId: 0 | |
18 | 27 | } |
19 | 28 | }, |
20 | 29 | |
... | ... | @@ -49,6 +58,27 @@ Page({ |
49 | 58 | url: '/pages/index/index', |
50 | 59 | }) |
51 | 60 | }, |
61 | + //获取个人 | |
62 | + getSelf() { | |
63 | + request({ | |
64 | + url: `/wx/task/getOneSelf`, | |
65 | + method: 'get', | |
66 | + data: { | |
67 | + "userId": wx.getStorageSync("userInfo_id") | |
68 | + }, | |
69 | + }).then(res => { | |
70 | + if (res.code == 0) { | |
71 | + this.setData({ | |
72 | + selfData: res.data | |
73 | + }) | |
74 | + } else { | |
75 | + wx.showToast({ | |
76 | + title: res.msg, | |
77 | + icon: 'none', | |
78 | + }) | |
79 | + } | |
80 | + }) | |
81 | + }, | |
52 | 82 | /** |
53 | 83 | * 生命周期函数--监听页面加载 |
54 | 84 | */ |
... | ... | @@ -59,16 +89,11 @@ Page({ |
59 | 89 | this.setData({ |
60 | 90 | "dayTime": moment(new Date().getTime()).format('YYYY-MM-DD') |
61 | 91 | }) |
92 | + this.getSelf() | |
62 | 93 | this.getRankList() |
63 | 94 | }, |
64 | 95 | // 统一返回 |
65 | 96 | handleBack() { |
66 | 97 | wx.navigateBack() |
67 | 98 | }, |
68 | - /** | |
69 | - * 用户点击右上角分享 | |
70 | - */ | |
71 | - onShareAppMessage() { | |
72 | - | |
73 | - } | |
74 | 99 | }) |
75 | 100 | \ No newline at end of file | ... | ... |
pages/index/rank/rank.wxml
... | ... | @@ -5,11 +5,11 @@ |
5 | 5 | <view class="white_box"> |
6 | 6 | <view class="title_box"> |
7 | 7 | <view class="title_pic"> |
8 | - <image class="pic" src="/img/answer/user.png" alt="" /> | |
9 | - {{user.name}} | |
8 | + <image class="pic" src="{{user.headImg}}" alt="" /> | |
9 | + {{user.userName != null ? user.userName : user.nickname}} | |
10 | 10 | </view> |
11 | - <view class="red_title">已坚持xx天</view> | |
12 | - <view class="red_title">xx次</view> | |
11 | + <view class="red_title">已坚持{{selfData.signDayNum}}天</view> | |
12 | + <view class="red_title">{{selfData.signRecordNum}}次</view> | |
13 | 13 | </view> |
14 | 14 | <view class="grey_title"> |
15 | 15 | <view class="table_L"> |
... | ... | @@ -25,11 +25,11 @@ |
25 | 25 | <image wx:if="{{index == 1}}" class="tem_pic" src="/img/answer/2.png" alt="" /> |
26 | 26 | <image wx:if="{{index == 2}}" class="tem_pic" src="/img/answer/3.png" alt="" /> |
27 | 27 | <view class="tem_pic" wx:if="{{index != 0 && index != 1 && index != 2}}">{{index + 1}}</view> |
28 | - <view>{{value.name}}</view> | |
28 | + <view>{{value.userName}}</view> | |
29 | 29 | </view> |
30 | 30 | <view class="table_R"> |
31 | - <view class="grey_R">已坚持52天</view> | |
32 | - <view>120</view> | |
31 | + <view class="grey_R">已坚持{{value.signDayNum}}天</view> | |
32 | + <view>{{value.signRecordNum}}</view> | |
33 | 33 | </view> |
34 | 34 | </view> |
35 | 35 | </view> | ... | ... |
pages/index/rank/rank.wxss
pages/login/codeLogin/codeLogin.js
pages/login/codeLogin/codeLogin.wxml
... | ... | @@ -7,18 +7,18 @@ |
7 | 7 | <text class="title" selectable="false" space="false" decode="false">欢迎登录</text> |
8 | 8 | </view> |
9 | 9 | <view class="tips_box"> |
10 | - <!-- <text class="tips" selectable="false" space="false" decode="false">请输入登录资料</text> --> | |
10 | + <text class="tips" selectable="false" space="false" decode="false">请输入登录资料</text> | |
11 | 11 | </view> |
12 | 12 | <view class='cont-box'> |
13 | - <!-- <view class="phoneBox"> | |
13 | + <view class="phoneBox"> | |
14 | 14 | <input type='number' placeholder='请输入手机号' bindinput="bindUserName" /> |
15 | 15 | </view> |
16 | 16 | <view class="codeBox"> |
17 | 17 | <input type='number' class="codeInput" placeholder='请输入短信验证码' bindinput="bindCode" /> |
18 | 18 | <view class="getCode" bindtap="getCode">{{codeCont}}</view> |
19 | - </view> --> | |
19 | + </view> | |
20 | 20 | <view class="btnBox"> |
21 | - <!-- <text class="next button" bindtap='next'>登 录</text> --> | |
21 | + <text class="next button" bindtap='next'>登 录</text> | |
22 | 22 | <!-- <navigator url="/pages/login/login" class="vipLogin button">微信登陆</navigator> --> |
23 | 23 | <button class="one_click_btn" open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber">微信一键登陆</button> |
24 | 24 | </view> | ... | ... |
pages/login/codeLogin/codeLogin.wxss
... | ... | @@ -0,0 +1,161 @@ |
1 | +// pages/login/loginNew/loginNew.js | |
2 | +import request from '../../../api/request.js' | |
3 | +var appid = 'wx186236fdcd93edcc'; | |
4 | +Page({ | |
5 | + | |
6 | + /** | |
7 | + * 页面的初始数据 | |
8 | + */ | |
9 | + data: { | |
10 | + checked: true, | |
11 | + session_key: '', | |
12 | + openId: '', | |
13 | + encryptedData: '', | |
14 | + iv: '', | |
15 | + phone: '' | |
16 | + }, | |
17 | + //多选框 | |
18 | + onChange(e) { | |
19 | + this.setData({ | |
20 | + checked: e.detail | |
21 | + }) | |
22 | + }, | |
23 | + //获取session_key | |
24 | + getOpenId() { | |
25 | + return request({ | |
26 | + url: `/wx/app/getOpenId/wx186236fdcd93edcc`, | |
27 | + method: 'get', | |
28 | + data: { | |
29 | + code: this.data.loginCode | |
30 | + }, | |
31 | + }).then(res2 => { | |
32 | + this.setData({ | |
33 | + session_key: res2.data.sessionKey | |
34 | + }) | |
35 | + this.setData({ | |
36 | + openId: res2.data.openid | |
37 | + }) | |
38 | + console.log(this.data); | |
39 | + }) | |
40 | + }, | |
41 | + getPhoneNumber(e) { | |
42 | + console.log('?') | |
43 | + if(!this.data.checked) { | |
44 | + return wx.showToast({title: '请先阅读并同意用户协议和隐私协议',icon: 'none'}) | |
45 | + } | |
46 | + console.log(e.detail) | |
47 | + if (e.detail.errMsg == 'getPhoneNumber:ok') { | |
48 | + this.setData({ | |
49 | + encryptedData: e.detail.encryptedData, | |
50 | + iv: e.detail.iv, | |
51 | + }, () => { | |
52 | + this.login() | |
53 | + }) | |
54 | + } | |
55 | + }, | |
56 | + login() { | |
57 | + if (!this.data.encryptedData || !this.data.session_key || !this.data.iv) { | |
58 | + wx.showToast({ | |
59 | + title: '一键登陆失败,请重试', | |
60 | + icon: 'none', | |
61 | + duration: 2000 | |
62 | + }) | |
63 | + } | |
64 | + request({ | |
65 | + url: `/wx/app/oneClickLogin/`+ appid, | |
66 | + method: 'post', | |
67 | + data: { | |
68 | + "encryptedData": this.data.encryptedData, | |
69 | + "sessionKey": this.data.session_key, | |
70 | + "iv": this.data.iv, | |
71 | + "openId": this.data.openId | |
72 | + }, | |
73 | + }).then(res => { | |
74 | + if (res.code == 0) { | |
75 | + if (res.data) { | |
76 | + this.setData({ | |
77 | + phone: res.data.phone | |
78 | + }, () => { | |
79 | + wx.setStorageSync('userInfo', res.data) | |
80 | + wx.setStorageSync('userInfo_id', res.data.id) | |
81 | + wx.switchTab({ | |
82 | + url: '/pages/mine/index', | |
83 | + }) | |
84 | + }) | |
85 | + } else { | |
86 | + wx.showToast({ | |
87 | + title: '一键登陆失败,请重试', | |
88 | + icon: 'none', | |
89 | + duration: 2000 | |
90 | + }) | |
91 | + } | |
92 | + } | |
93 | + }) | |
94 | + }, | |
95 | + /** | |
96 | + * 生命周期函数--监听页面加载 | |
97 | + */ | |
98 | + onLoad() { | |
99 | + wx.login({ | |
100 | + success: (res) => { | |
101 | + if (res.code) { | |
102 | + this.setData({ | |
103 | + loginCode: res.code | |
104 | + }) | |
105 | + this.getOpenId() | |
106 | + } else { | |
107 | + console.log('登录失败!' + res.errMsg) | |
108 | + } | |
109 | + } | |
110 | + }) | |
111 | + }, | |
112 | + | |
113 | + /** | |
114 | + * 生命周期函数--监听页面初次渲染完成 | |
115 | + */ | |
116 | + onReady() { | |
117 | + | |
118 | + }, | |
119 | + | |
120 | + /** | |
121 | + * 生命周期函数--监听页面显示 | |
122 | + */ | |
123 | + onShow() { | |
124 | + | |
125 | + }, | |
126 | + | |
127 | + /** | |
128 | + * 生命周期函数--监听页面隐藏 | |
129 | + */ | |
130 | + onHide() { | |
131 | + | |
132 | + }, | |
133 | + | |
134 | + /** | |
135 | + * 生命周期函数--监听页面卸载 | |
136 | + */ | |
137 | + onUnload() { | |
138 | + | |
139 | + }, | |
140 | + | |
141 | + /** | |
142 | + * 页面相关事件处理函数--监听用户下拉动作 | |
143 | + */ | |
144 | + onPullDownRefresh() { | |
145 | + | |
146 | + }, | |
147 | + | |
148 | + /** | |
149 | + * 页面上拉触底事件的处理函数 | |
150 | + */ | |
151 | + onReachBottom() { | |
152 | + | |
153 | + }, | |
154 | + | |
155 | + /** | |
156 | + * 用户点击右上角分享 | |
157 | + */ | |
158 | + onShareAppMessage() { | |
159 | + | |
160 | + } | |
161 | +}) | |
0 | 162 | \ No newline at end of file | ... | ... |
... | ... | @@ -0,0 +1,21 @@ |
1 | +<!--pages/login/loginNew/loginNew.wxml--> | |
2 | +<view> | |
3 | + <view class="box"> | |
4 | + <view class="img_box"> | |
5 | + <image class="pic" src="/img/login_img.png" alt="" /> | |
6 | + </view> | |
7 | + <view class="box_title">Hey</view> | |
8 | + <view class="box_grey">欢迎使用自主学习之旅~</view> | |
9 | + </view> | |
10 | + <view class="fied_box"> | |
11 | + <view> | |
12 | + <van-button type="info" block round open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber">登 录</van-button> | |
13 | + </view> | |
14 | + <view class="small_font"> | |
15 | + <van-checkbox value="{{ checked }}" shape="square" bind:change="onChange" icon-size='15'> | |
16 | + 已同意<text class="blue_font"> 用户协议 </text>和<text class="blue_font"> 隐私协议 </text> | |
17 | + </van-checkbox> | |
18 | + </view> | |
19 | + <van-notify id="van-notify" /> | |
20 | + </view> | |
21 | +</view> | |
0 | 22 | \ No newline at end of file | ... | ... |
... | ... | @@ -0,0 +1,43 @@ |
1 | +/* pages/login/loginNew/loginNew.wxss */ | |
2 | +.box { | |
3 | + display: flex; | |
4 | + justify-content: center; | |
5 | + flex-wrap: wrap; | |
6 | +} | |
7 | +.img_box { | |
8 | + width: 60vw; | |
9 | + height: 60vw; | |
10 | + margin: 100px 0 30px; | |
11 | +} | |
12 | +.pic { | |
13 | + width: 100%; | |
14 | + height: 100%; | |
15 | +} | |
16 | +.box_title { | |
17 | + width: 100%; | |
18 | + text-align: center; | |
19 | + margin: 15px 0; | |
20 | + font-weight: bold; | |
21 | +} | |
22 | +.box_grey { | |
23 | + width: 100%; | |
24 | + text-align: center; | |
25 | + color: #999; | |
26 | +} | |
27 | +.fied_box { | |
28 | + position: fixed; | |
29 | + bottom: 40px; | |
30 | + width: 100%; | |
31 | + padding: 0 30px; | |
32 | + box-sizing: border-box; | |
33 | +} | |
34 | +.small_font { | |
35 | + display: flex; | |
36 | + justify-content: center; | |
37 | + font-size: 12px; | |
38 | + margin: 10px 0 0; | |
39 | +} | |
40 | +.blue_font { | |
41 | + color: #3578F9; | |
42 | + text-decoration:underline; | |
43 | +} | |
0 | 44 | \ No newline at end of file | ... | ... |
pages/mine/index.js
... | ... | @@ -8,6 +8,7 @@ Page({ |
8 | 8 | data: { |
9 | 9 | user_name: '', |
10 | 10 | user_phone: '', |
11 | + user_img: '', | |
11 | 12 | }, |
12 | 13 | // 打卡记录 |
13 | 14 | handleRecord(){ |
... | ... | @@ -15,10 +16,12 @@ Page({ |
15 | 16 | url: '/pages/mine/record/record', |
16 | 17 | }) |
17 | 18 | }, |
18 | -// 退出登录 | |
19 | + // 退出登录 | |
19 | 20 | handleLoginOut(){ |
21 | + wx.clearStorage() | |
22 | + wx.clearStorageSync() | |
20 | 23 | wx.navigateTo({ |
21 | - url: '/pages/login/codeLogin/codeLogin', | |
24 | + url: '/pages/login/loginNew/loginNew', | |
22 | 25 | }) |
23 | 26 | }, |
24 | 27 | /** |
... | ... | @@ -27,8 +30,9 @@ Page({ |
27 | 30 | onLoad(options) { |
28 | 31 | let userInfo = wx.getStorageSync('userInfo') |
29 | 32 | this.setData({ |
30 | - "user_name": userInfo.name || userInfo.nickname, | |
31 | - "user_phone": userInfo.phone | |
33 | + "user_name": userInfo.userName || userInfo.nickname, | |
34 | + "user_phone": userInfo.phone, | |
35 | + 'user_img':userInfo.headImg, | |
32 | 36 | }) |
33 | 37 | }, |
34 | 38 | /** | ... | ... |
pages/mine/index.wxml
1 | 1 | <view class="mine" style="background-image: url('https://szyundisk.oss-cn-hangzhou.aliyuncs.com/null/89741dbf-cc76-45a6-a3c9-a210eb7deeef.png')"> |
2 | 2 | <view class="title"> |
3 | 3 | <view> |
4 | - <image class="pic" src="/img/answer/user.png" alt="" /> | |
4 | + <image class="pic" src="{{user_img}}" alt="" /> | |
5 | 5 | </view> |
6 | 6 | <view class="title_box"> |
7 | 7 | <view class="title_name">{{user_name}}</view> | ... | ... |
pages/mine/record/record.js
... | ... | @@ -23,7 +23,7 @@ Page({ |
23 | 23 | url: `/wx/task/cardTaskList`, |
24 | 24 | method: 'post', |
25 | 25 | data: { |
26 | - "oneselfFlag": this.data.tabindex + 1, | |
26 | + "oneselfFlag": this.data.tabindex + 1 , | |
27 | 27 | "page": 1, |
28 | 28 | "pageSize": 999, |
29 | 29 | "userId": wx.getStorageSync("userInfo_id") |
... | ... | @@ -99,15 +99,15 @@ Page({ |
99 | 99 | this.getTaskList() |
100 | 100 | }, |
101 | 101 | // 打卡成果 |
102 | - handleAchievement() { | |
102 | + handleAchievement(e) { | |
103 | 103 | wx.navigateTo({ |
104 | - url: '/pages/index/achievement/achievement', | |
104 | + url: '/pages/index/achievement/achievement?valueId='+e.currentTarget.dataset.valueid , | |
105 | 105 | }) |
106 | 106 | }, |
107 | 107 | // 去打卡 |
108 | - handleDetail() { | |
108 | + handleDetail(e) { | |
109 | 109 | wx.navigateTo({ |
110 | - url: '/pages/index/punchDetail/punchDetail', | |
110 | + url: '/pages/index/punchDetail/punchDetail?valueId='+e.currentTarget.dataset.valueid , | |
111 | 111 | }) |
112 | 112 | }, |
113 | 113 | // 统一返回 | ... | ... |
pages/mine/record/record.wxml
... | ... | @@ -38,13 +38,13 @@ |
38 | 38 | {{value.allowRepairCard == 1 ? '允许补卡': '不允许补卡'}} |
39 | 39 | </view> |
40 | 40 | <view class="grey_line"></view> |
41 | - <view class="blue_font" wx:if="{{tabindex == 1}}"> | |
42 | - <view bindtap="handleAchievement">我的成果</view> | |
41 | + <view class="blue_font" wx:if="{{tabindex == 0}}"> | |
42 | + <view bindtap="handleAchievement" data-valueId="{{value.id}}">我的成果</view> | |
43 | 43 | <view class="blue_line"></view> |
44 | - <view bindtap="handleDetail">去打卡</view> | |
44 | + <view bindtap="handleDetail" data-valueId="{{value.id}}">去打卡</view> | |
45 | 45 | </view> |
46 | 46 | <view class="blue_font" wx:else> |
47 | - <view bindtap="handleAchievement">打卡成果</view> | |
47 | + <view bindtap="handleAchievement" data-valueId="{{value.id}}">打卡成果</view> | |
48 | 48 | </view> |
49 | 49 | </view> |
50 | 50 | ... | ... |
pages/mine/record/record.wxss
... | ... | @@ -21,10 +21,10 @@ |
21 | 21 | |
22 | 22 | .card { |
23 | 23 | width: 92vw; |
24 | - height: 370px; | |
25 | 24 | background-color: #fff; |
26 | 25 | border-radius: 8vw; |
27 | 26 | padding: 8vw; |
27 | + margin-bottom: 30px; | |
28 | 28 | box-sizing: border-box; |
29 | 29 | box-shadow: 1px 1px 1px 1px rgb(228, 228, 228); |
30 | 30 | } |
... | ... | @@ -96,7 +96,7 @@ |
96 | 96 | .blue_font { |
97 | 97 | display: flex; |
98 | 98 | justify-content: space-around; |
99 | - margin-top: 20px; | |
99 | + margin-top: 15px; | |
100 | 100 | font-size: 4.1vw; |
101 | 101 | color: #458EF8; |
102 | 102 | font-weight: 540; |
... | ... | @@ -104,7 +104,7 @@ |
104 | 104 | |
105 | 105 | .blue_line { |
106 | 106 | width: 1px; |
107 | - height: 20px; | |
107 | + height: 15px; | |
108 | 108 | background-color: #EAEAEA; |
109 | 109 | } |
110 | 110 | ... | ... |