锦水居民端小程序
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

599 lines
18 KiB

var api = require('../../../../utils/api.js')
Component({
data: {
personalInfo: {
identityNo: '', // 身份证号
realName: '', // 姓名
sex: '', // 性别
mobile: '', // 手机号
smsCode: '', // 验证码
road: '', // 什么路
villageName: '', // 小区
dwellingPlace: '', // 楼栋号-单元室
partyFlag: '0'
},
gridInfo: {
gridName: '', // 网格名称
gridId: '' // 网格id
},
wxInfo: {
encryptedData: '', // 完整信息的加密数据
iv: '', // 初始向量
wxCode: '', // 微信cod
},
smsCodeText: '获取验证码', // 获取验证码button内容
unionIdStatus: '0', // 是否完善过个人信息,完善过更新,未完善过增加
getMobileType: 'wx' // 获取手机号的方式,默认从微信获取,但是微信新获取部分用户会有各种莫名其妙的bug,所以增加手机号/验证码的方式
},
properties: {
type: {
type: String,
value: 'resident'
},
moreThanOneGrid: {
type: Boolean,
value: false
},
selectedGrid: {
type: Object,
observer: function(value) {
this.setData({
gridInfo: value
})
}
}
},
lifetimes: {
attached() {
this.getPersonalInfo().then(res => {
this.getGridList()
})
this.checkWxUnionId()
this.getWxCode()
}
},
methods: {
// 身份证号 双向绑定
bindIdentityNoInput(e) {
this.setData({
'personalInfo.identityNo': e.detail.value
})
console.log(this.data.personalInfo)
},
// 姓名 双向绑定
bindRealNameInput(e) {
this.setData({
'personalInfo.realName': e.detail.value
})
console.log(this.data.personalInfo)
},
// 选择性别回调
bindSexChange(e) {
this.setData({
'personalInfo.sex': e.detail.value
})
console.log(this.data.personalInfo)
},
// 手机号 双向绑定
bindMobileInput(e) {
this.setData({
'personalInfo.mobile': e.detail.value
})
console.log(this.data.personalInfo)
},
// 验证码 双向绑定
bindSmsCodeInput(e) {
this.setData({
'personalInfo.smsCode': e.detail.value
})
console.log(this.data.personalInfo)
},
// 路 双向绑定
bindRoadInput(e) {
this.setData({
'personalInfo.road': e.detail.value
})
console.log(this.data.personalInfo)
},
// 小区 双向绑定
bindVillageNameInput(e) {
this.setData({
'personalInfo.villageName': e.detail.value
})
console.log(this.data.personalInfo)
},
// 楼栋号-单元室 双向绑定
bindDwellingPlaceInput(e) {
this.setData({
'personalInfo.dwellingPlace': e.detail.value
})
console.log(this.data.personalInfo)
},
// 获取验证码
getSmsCode() {
if (!this.data.personalInfo.mobile) {
this.showToast('请先输入手机号')
return false
}
this.setData({
smsCodeText: '获取中...'
})
const mobile = this.data.personalInfo.mobile
api.sendSms(mobile).then(res => {
this.showToast('验证码发送成功')
let num = 60
this.setData({
smsCodeText: "60s后重新获取"
})
const timer = setInterval(() => {
if (num >= 1) {
this.setData({
smsCodeText: `${num}s后重新获取`
})
--num
} else {
clearInterval(timer)
this.setData({
smsCodeText: '获取验证码'
})
}
}, 1000)
}).catch(err => {
console.log(err)
this.setData({
smsCodeText: '获取验证码'
})
})
},
// 获取手机号
getPhoneNumber(e) {
if (e.detail.errMsg === 'getPhoneNumber:ok') {
const para = {
wxCode: '',
encryptedData: e.detail.encryptedData,
iv: e.detail.iv
}
const that = this
wx.login({
success(res) {
para.wxCode = res.code
api.getWxPhone(para).then(data => {
console.log('获取微信手机号', data)
that.setData({
'personalInfo.mobile': data.data
})
}).catch(err => {
console.log(err)
})
}
})
}
},
// 获取之前完善的个人信息
getPersonalInfo() {
return new Promise((resolve, reject) => {
api.prepareComplete().then(res => {
console.log('获取个人信息', res)
for (const key in this.data.personalInfo) {
this.data.personalInfo[key] = res.data[key]
}
for (const key in this.data.gridInfo) {
this.data.gridInfo[key] = res.data[key]
}
this.setData({
personalInfo: this.data.personalInfo,
gridInfo: this.data.gridInfo
})
if (this.data.personalInfo.partyFlag === '1') {
this.triggerEvent('selectTabChange', {
tab: 'partyMember',
partyFlag: '1'
})
}
resolve(true)
}).catch(err => {
console.log(err)
reject(false)
})
})
},
// 查看用户是否完善个人信息
checkWxUnionId() {
api.checkWxUnionId().then(res => {
console.log('查看用户是否已保存unionId', res)
this.setData({
unionIdStatus: res.data
// unionIdStatus: '0'
})
}).catch(err => {
this.setData({
unionIdStatus: '0'
})
console.log(err)
})
},
// 获取用户信息
getUserInfo(e) {
if (e.detail.errMsg === 'getUserInfo:ok') {
this.setData({
'wxInfo.encryptedData': e.detail.encryptedData,
'wxInfo.iv': e.detail.iv
})
this.getWxCode().then(() => {
this.submitPersonalInfo()
}).catch(() => {
this.showToast('获取wxCode失败,请重新提交')
})
} else {
this.showToast('请授权,再完善个人信息')
return false
}
},
// 获取wxCode
getWxCode() {
const that = this
return new Promise((resolve, reject) => {
wx.login({
success(res) {
that.setData({
'wxInfo.wxCode': res.code
})
console.log('wxInfo', that.data.wxInfo)
resolve(true)
},
fail(err) {
reject(false)
}
})
})
},
// 切换网格
changeGrid() {
this.triggerEvent('changeGrid', {
gridId: this.data.gridInfo.gridId
})
},
// 获取当前用户所有网格
getGridList() {
this.triggerEvent('getGridList', {
gridId: this.data.gridInfo.gridId
})
},
// 提交完善信息-从微信获取手机号方式
submitPersonalInfoByWx() {
if (!this.data.personalInfo.identityNo) {
if (this.data.type === 'partyMember') {
this.showToast('请输入身份证号')
return false
}
}
if (!this.data.personalInfo.realName) {
this.showToast('请填写姓名')
return false
}
if (!this.data.personalInfo.sex) {
this.showToast('请选择性别')
return false
}
if (!this.data.personalInfo.mobile) {
this.showToast('请填写手机号')
return false
}
// if (!this.data.personalInfo.smsCode) {
// this.showToast('请填写验证码')
// return false
// }
if (!this.data.personalInfo.road) {
this.showToast('请填写所在小区或所在道路')
return false
}
if (this.data.personalInfo.road.length > 100) {
this.showToast('小区或所在道路不能超过100个字')
return false
}
const para = {
partyFlag: this.data.type === 'partyMember' ? '1' : '0',
identityNo: this.data.personalInfo.identityNo,
mobile: this.data.personalInfo.mobile,
smsCode: this.data.personalInfo.smsCode,
realName: this.data.personalInfo.realName,
sex: this.data.personalInfo.sex,
road: this.data.personalInfo.road,
villageName: this.data.personalInfo.villageName,
dwellingPlace: this.data.personalInfo.dwellingPlace,
gridId: this.data.gridInfo.gridId,
wxCode: this.data.unionIdStatus === '0' ? this.data.wxInfo.wxCode : '',
encryptedData: this.data.unionIdStatus === '0' ? this.data.wxInfo.encryptedData : '',
iv: this.data.unionIdStatus === '0' ? this.data.wxInfo.iv : ''
}
if (this.data.personalInfo.partyFlag === '1' && this.data.type === 'resident') {
wx.showModal({
content: '您已是党员,无须进行居民认证,居民认证后会取消党员身份,是否继续?',
showCancel: true,
cancelText: '否',
confirmText: '是',
confirmColor: '#000000',
success: (e) => {
if (e.confirm) {
wx.showLoading({
title: '提交中...'
})
api.completeResidentInfoV2(para).then(res => {
wx.hideLoading()
if (res.data.resultCode == 1) {
wx.showModal({
title: '认证信息提交成功',
showCancel: false,
content: res.data.resultMsg,
success: res => {
wx.reLaunch({
url: '/pages/indexNew/indexNew'
})
}
})
} else {
wx.showToast({
title: '认证成功',
icon: 'none',
duration: 2000,
complete: () => {
setTimeout(() => {
wx.reLaunch({
url: '/pages/indexNew/indexNew'
})
}, 2000)
}
})
}
})
} else if (e.cancel) {
return false
}
},
})
} else {
wx.showLoading({
title: '提交中...'
})
if (this.data.type === 'partyMember') {
api.completePartyInfoV2(para).then(res => {
wx.hideLoading()
if (res.data.resultCode == 1) {
wx.showModal({
title: '认证信息提交成功',
showCancel: false,
content: res.data.resultMsg,
success: res => {
wx.reLaunch({
url: '/pages/indexNew/indexNew'
})
}
})
} else {
wx.showToast({
title: '认证成功',
icon: 'none',
duration: 2000,
complete: () => {
setTimeout(() => {
wx.reLaunch({
url: '/pages/indexNew/indexNew'
})
}, 2000)
}
})
}
})
} else if (this.data.type === 'resident') {
api.completeResidentInfoV2(para).then(res => {
wx.hideLoading()
if (res.data.resultCode == 1) {
wx.showModal({
title: '认证信息提交成功',
showCancel: false,
content: res.data.resultMsg,
success: res => {
wx.reLaunch({
url: '/pages/indexNew/indexNew'
})
}
})
} else {
wx.showToast({
title: '认证成功',
icon: 'none',
duration: 2000,
complete: () => {
setTimeout(() => {
wx.reLaunch({
url: '/pages/indexNew/indexNew'
})
}, 2000)
}
})
}
})
}
}
},
// 提交完善信息,手机号输入方式
submitPersonalInfoBySelf() {
if (!this.data.personalInfo.identityNo) {
if (this.data.type === 'partyMember') {
this.showToast('请输入身份证号')
return false
}
}
if (!this.data.personalInfo.realName) {
this.showToast('请填写姓名')
return false
}
if (!this.data.personalInfo.sex) {
this.showToast('请选择性别')
return false
}
if (!this.data.personalInfo.mobile) {
this.showToast('请填写手机号')
return false
}
if (!this.data.personalInfo.smsCode) {
this.showToast('请填写验证码')
return false
}
if (!this.data.personalInfo.road) {
this.showToast('请填写所在街道')
return false
}
const para = {
partyFlag: this.data.type === 'partyMember' ? '1' : '0',
identityNo: this.data.personalInfo.identityNo,
mobile: this.data.personalInfo.mobile,
smsCode: this.data.personalInfo.smsCode,
realName: this.data.personalInfo.realName,
sex: this.data.personalInfo.sex,
road: this.data.personalInfo.road,
villageName: this.data.personalInfo.villageName,
dwellingPlace: this.data.personalInfo.dwellingPlace,
gridId: this.data.gridInfo.gridId,
wxCode: this.data.unionIdStatus === '0' ? this.data.wxInfo.wxCode : '',
encryptedData: this.data.unionIdStatus === '0' ? this.data.wxInfo.encryptedData : '',
iv: this.data.unionIdStatus === '0' ? this.data.wxInfo.iv : ''
}
if (this.data.personalInfo.partyFlag === '1' && this.data.type === 'resident') {
wx.showModal({
content: '您已是党员,无须进行居民认证,居民认证后会取消党员身份,是否继续?',
showCancel: true,
cancelText: '否',
confirmText: '是',
confirmColor: '#000000',
success: (e) => {
if (e.confirm) {
wx.showLoading({
title: '提交中...'
})
api.completeResidentInfo(para).then(res => {
wx.hideLoading()
if (res.data.resultCode == 1) {
wx.showModal({
title: '认证信息提交成功',
showCancel: false,
content: res.data.resultMsg,
success: res => {
wx.reLaunch({
url: '/pages/indexNew/indexNew'
})
}
})
} else {
wx.showToast({
title: '认证成功',
icon: 'none',
duration: 2000,
complete: () => {
setTimeout(() => {
wx.reLaunch({
url: '/pages/indexNew/indexNew'
})
}, 2000)
}
})
}
})
} else if (e.cancel) {
return false
}
},
})
} else {
wx.showLoading({
title: '提交中...'
})
if (this.data.type === 'partyMember') {
api.completePartyInfo(para).then(res => {
wx.hideLoading()
if (res.data.resultCode == 1) {
wx.showModal({
title: '认证信息提交成功',
showCancel: false,
content: res.data.resultMsg,
success: res => {
wx.reLaunch({
url: '/pages/indexNew/indexNew'
})
}
})
} else {
wx.showToast({
title: '认证成功',
icon: 'none',
duration: 2000,
complete: () => {
setTimeout(() => {
wx.reLaunch({
url: '/pages/indexNew/indexNew'
})
}, 2000)
}
})
}
})
} else if (this.data.type === 'resident') {
api.completeResidentInfo(para).then(res => {
wx.hideLoading()
if (res.data.resultCode == 1) {
wx.showModal({
title: '认证信息提交成功',
showCancel: false,
content: res.data.resultMsg,
success: res => {
wx.reLaunch({
url: '/pages/indexNew/indexNew'
})
}
})
} else {
wx.showToast({
title: '认证成功',
icon: 'none',
duration: 2000,
complete: () => {
setTimeout(() => {
wx.reLaunch({
url: '/pages/indexNew/indexNew'
})
}, 2000)
}
})
}
})
}
}
},
submitPersonalInfo() {
if (this.data.getMobileType === 'wx') {
this.submitPersonalInfoByWx()
} else if (this.data.getMobileType === 'self') {
this.submitPersonalInfoBySelf()
}
},
// 代码简化,弹窗统一封装
showToast(title) {
wx.showToast({
title: title,
icon: 'none',
duration: 2000
})
},
changeGetMobileType() {
let type = 'wx'
if (this.data.getMobileType === 'wx') {
type = 'self'
} else if (this.data.getMobileType === 'self') {
type = 'wx'
}
this.setData({
getMobileType: type
})
}
}
})