记《高校考勤系统》小程序(1)
发布时间:2020-12-14 19:04:34 所属栏目:资源 来源:网络整理
导读:引言 这是我自学小程序并上线的第一个算是完整的项目(其实是♀朋友的毕业设计需求 ),前端萌新一枚.其中肯定会有许多不合理或需要改进的地方请大家指出,谢谢!:sunglasses::sunglasses:(前期准备工作就不介绍啦,我们直接进入正题) 一.功能需求整理,思路规
引言这是我自学小程序并上线的第一个算是完整的项目(其实是♀朋友的毕业设计需求 ),前端萌新一枚.其中肯定会有许多不合理或需要改进的地方请大家指出,谢谢!:sunglasses::sunglasses:(前期准备工作就不介绍啦,我们直接进入正题) 一.功能需求整理,思路规划
拿到需求想了想除了注册登录,主要划分两大块,一为普通学生用户功能,二为管理员教师功能.因为要在一个小程序中全部展示,所以思考在用户注册时添加‘status’字段作为后续用户权限判断依据来展示相对应的页面及功能。(也不知道这样做对不对:cry:,头大) 根据理解画了流程图二.项目整体布局搭建小程序主要划分为四块,所以首先我们在app.json中创建对应的tabbar.
实现效果:三.用户注册登录
这里我新建了三张页面分别为启动动画过渡页、登录页、注册页.启动动画过渡页:点击查看js代码
Page({
data: {
openid: '',//获取用户_openid
panduan: //判断用是否存在
arr: []
},onLoad: function(options) {
wx.cloud.callFunction({ //获取用户openid
name: 'login',data: {},}).then(res => {
this.openid = res.result.openid
}).then(res => {
const db = wx.cloud.database({
env: 'env-urae8' //数据库环境名
})
db.collection('users').get().then(res => { //获取用户数据
this.arr = res.data
for (let i = 0; i < this.arr.length; i++) { //循环判断用户数据中是否存在用户
if (this.openid == this.arr[i]._openid) {
this.panduan = 'true'
}
}
}).then(res => {
this.panduan == 'true') { //存在用户跳转登录页面
wx.reLaunch({
url: '/pages/index/index',})
} else this.data.panduan == '') {
wx.redirectTo({
url: '/pages/login/login' //不存在用户跳转登录页
})
}
})
}).catch(err => {
wx.showToast({
icon: 'none',title: '用户信息获取失败,请检查网络',})
})
}
})
复制代码
用户登录页:点击查看js代码
Page({
data: {
userid:'no',openid: ''
},onGotUserInfo(e){
this.data.errMsg = e.detail.errMsg
if (e.detail.errMsg == 'getUserInfo:ok'){
this.setData({
userBtn: true,trueBtn:false
})
}
},useridInput(e){
this.userid = e.detail.value
},loginBtn(){
data.haveuserid = 'no' //清除判断是否存在用户名
const db = wx.cloud.database({ //数据库新增用户注册信息
env: 'env-urae8'
})
db.collection('users').get().then(res => {
for (let i = 0; i < res.data.length; i++) {
if (res.data[i].userid === this.userid && res.data[i]._openid == this.openid) {
'yes'
}
}
var pattern = /^d{6,12}$/
if(this.userid == '000001'){
wx.switchTab({
url: '/pages/index/index'
})
}if (pattern.test(this.userid) && data.haveuserid == 'yes' && data.errMsg == 'getUserInfo:ok'){
wx.switchTab({
url: 'getUserInfo:fail auth deny' || '') {
wx.showToast({
title: '请授权后再登录',icon: 2000
})
}if (!pattern.test(this.userid)) { //判断是否符合用户名
wx.showToast({
title: '请输入6-12位数字',0);">1500
})
}'no') {
wx.showToast({
title: '学号或工号错误或不存在,请重新输入或注册',0);">2000
})
}
})
},registerBtn(){
wx.redirectTo({
url: '/pages/register/register'
})
},onLoad: function (options) {
this.setData({
trueBtn:true //用户授权框样式
})
wx.cloud.callFunction({ data: {},success: res => {
this.openid = res.result.openid
},fail: err => {
wx.showToast({
icon: <view class="title">登录</view>
<view>
<"input">
<image src="../../images/userimg.png"></image>
<input class="inputBtn" bindinput="useridInput" placeholder="请输入学号或工号"></input>
</"userBtn">
<button hidden="{{ userBtn }}" open-type="getUserInfo" lang="zh_CN" bindgetuserinfo="onGotUserInfo"
class="onGotUserInfo"></button>
<image hidden={{ trueBtn }}" class="true" src="../../images/true.png"></text class="userTit">用户授权</text>
</button class="loginBtn shadow bg-blue" bindtap="loginBtn">登 录</button>
<"registerBtn shadow bg-blue" bindtap="registerBtn">注 册</button>
</view>
复制代码
点击查看wxss代码
page {
position: relative;
background-color: white;
}
.title {
margin-top: 200rpx;
text-align: center;
font-size: 40rpx;
}
.input{
width: 60%;
margin: 0 auto;
120rpx;
padding: 20rpx;
border-radius: 10rpx;
background-color: #f6f6f6;
display: flex;
justify-content: start;
}
.input image{
30rpx;
height: 6rpx;
display: block;
}
.inputBtn {
100%;
40rpx;
margin-left: 20rpx;
}
.loginBtn,.registerBtn {
400rpx;
#07c160;
color: white;
font-weight: 600;
}
.loginBtn {
margin-bottom: 60rpx;
60rpx;
}
.userBtn {
160rpx;
190rpx;
justify-content: flex-start;
}
.onGotUserInfo {
44rpx;
0;
border: 6rpx solid #07c160;
}
.true{
44rpx;
}
.userTit{
12rpx;
}
复制代码
用户注册页:const app = getApp()
wx.cloud.init();
Page({
data: {
steps: [{
text: '第一步',desc: '授权登录'
},{
text: '第二步',0);">'输入信息'
},0);">'第三步',0);">'完成注册'
}
],active: 0,nextOne: //第一个下一步
hiddenName: false,136);">//授权登录
userid: // 用户学号或者工号
nickName: //用户名
avatarUrl: //用户头像
userStatus: '0',136);">//用户注册状态
step: 1,0);">'no'//判断是否存在用户名
},nextOne() {
this.setData({
active: //状态为步骤2
firstBoxHide: //隐藏步骤1框
secondBoxHide: false //显示步骤2框
})
},onGotUserInfo(e) {
this.setData({
nickName: e.detail.userInfo.nickName,136);">//获取用户名
avatarUrl: e.detail.userInfo.avatarUrl,136);">//获取头像
nextOne: //下一步按钮显示
hiddenName: //授权按钮隐藏
firstHide: //显示用户信息
})
this.nickName = e.detail.userInfo.nickName
this.avatarUrl = e.detail.userInfo.avatarUrl
},useridInput(e) {
for(var i = 0;i < res.data.length ; i++){
this.userid || res.this.openid){
'yes'
}
}
1500
})
} 'yes') { //判断数据库是否存在用户名
wx.showToast({
title: '用户已存在,请直接登录',0);">1500
})
this.setData({
backBtn: //显示返回登录按钮
})
} else {
this.setData({
secondBtn: //隐藏确定按钮
nextTwo: //显示second框下一步按钮
})
}
})
},backBtn(){ //返回登录页面
wx.redirectTo({
url: '/pages/login/login'
})
},nextTwo() {
this.setData({
userid: this.userid,nickName: this.nickName,avatarUrl: this.avatarUrl,secondBoxHide: //隐藏second框
thirdBoxHide: //显示third框
nextTwo: //隐藏下一步2按钮
active: 3,136);">//初始状态为步骤3
})
},thirdBtn() { //完成注册按钮
const db = wx.cloud.database({ 'users').add({
data: {
userid: data.userStatus
},success: res => {
wx.switchTab({
url: '/pages/index/index'
})
}
})
},onLoad: function(options) {
//初始状态为步骤1
nextOne: //隐藏下一步按钮
firstHide: //隐藏用户框信息
firstBoxHide: //
secondBoxHide: //隐藏步骤2框
nextTwo: //隐藏second框下一步按钮
thirdBoxHide: //显示third框
backBtn://隐藏返回登录按钮
})
//获取用户openid
data.step === 1 && !data.openid) {
wx.cloud.callFunction({
name: this.step = 2,51); font-weight: 700;">this.openid = res.result.openid
},fail: err => {
wx.showToast({
icon: 三.首页页面搭建
先来看看完成后的效果图
getUserLocation() {
var qqmapsdk;
var _this = this;
wx.getSetting({ //判断是否授权
success(res) {
wx.getLocation({
type: 'gcj02',//返回可以用于wx.openLocation的经纬度
success(res) {
// console.log('已授权')
qqmapsdk = new QQMapWX({
key: "****",//自己申请的key
})
qqmapsdk.reverseGeocoder({
location: {
latitude: res.latitude,longitude: res.longitude
},success(addressRes) {
// console.log(addressRes) //这里就可以获取到当前经纬度所在城市的详细信息
_this.city = addressRes.result.ad_info.city; //获取当前所在城市
})
},fail(res) {
console.log(res)
}
})
},fail(res) {
// console.log('未授权')
}
})
}
})
},复制代码
+ 定位获取到的城市名,header: {
'content-type': 'application/json' // 默认值
},success(res) {
//返回城市天气数据
}
})
复制代码
data.result.weather[i].info.day[1].indexOf('晴') >= 0) { //判断条件为接口返回数据
//晴天天气模块显示其他隐藏
} '阴') >= 0 ||
res.'云') >= 0) {
//多云或阴天天气模块显示其他隐藏
} '小雨') >= //小雨气模块显示其他隐藏
} '大雨') >= //大雨气模块显示其他隐藏
} '雪') >= //下雪天气模块显示其他隐藏
}
复制代码
|