锦水居民端小程序
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.

468 lines
11 KiB

const api = require('../../../../utils/api')
Page({
data: {
districtPickerOptions: [],
districtPickerVisible: false,
districtPickerValue: [],
districtPickerLabel: '',
groupPickerOptions: [],
groupPickerVisible: false,
groupPickerValue: [],
groupPickerLabel: '',
nationPickerOptions: [],
nationPickerVisible: false,
nationPickerValue: [],
nationPickerLabel: '',
rulePickerOptions: [],
rulePickerVisible: false,
rulePickerValue: [],
rulePickerLabel: '',
name: '',
idCard: '',
address: '',
telephone: '',
smsCode: '',
note: '',
smsCodeText: '获取验证码',
id: '',
submitBtnDisabled: false,
protocolChecked: false
},
onLoad() {
Promise.all([this.getNationList(), this.getRuleList(), this.getDistrictList()]).then(res => {
this.getVoterDetail()
})
},
// 所选地区
showDistrictPicker() {
this.setData({
districtPickerVisible: true
})
},
onDistrictPickerConfirm(e) {
this.setData({
districtPickerValue: e.detail.value,
districtPickerLabel: e.detail.label,
groupPickerValue: [],
groupPickerLabel: ''
})
this.getGroupList()
},
onDistrictPickerCancel() {
this.setData({
districtPickerVisible: false
})
},
onDistrictPickerVisibleChange(e) {
this.setData({
districtPickerVisible: e.detail.visible
})
},
// 所选小组
showGroupPicker() {
if ( this.data.districtPickerValue.length === 0) {
this.showToast("请先选择所在选区")
return false
}
this.setData({
groupPickerVisible: true
})
},
onGroupPickerConfirm(e) {
this.setData({
groupPickerValue: e.detail.value,
groupPickerLabel: e.detail.label
})
},
onGroupPickerCancel() {
this.setData({
groupPickerVisible: false
})
},
onGroupPickerVisibleChange(e) {
this.setData({
groupPickerVisible: e.detail.visible
})
},
// 民族
showNationPicker() {
this.setData({
nationPickerVisible: true
})
},
onNationPickerConfirm(e) {
this.setData({
nationPickerValue: e.detail.value,
nationPickerLabel: e.detail.label
})
},
onNationPickerCancel() {
this.setData({
nationPickerVisible: false
})
},
onNationPickerVisibleChange(e) {
this.setData({
nationPickerVisible: e.detail.visible
})
},
// 参选原则
showRulePicker() {
this.setData({
rulePickerVisible: true
})
},
onRulePickerConfirm(e) {
this.setData({
rulePickerValue: e.detail.value,
rulePickerLabel: e.detail.label
})
},
onRulePickerCancel() {
this.setData({
rulePickerVisible: false
})
},
onRulePickerVisibleChange(e) {
this.setData({
rulePickerVisible: e.detail.visible
})
},
inputName(e) {
this.setData({
name: e.detail.value
})
},
inputIdCard(e) {
this.setData({
idCard: e.detail.value
})
},
inputAddress(e) {
this.setData({
address: e.detail.value
})
},
inputTelephone(e) {
this.setData({
telephone: e.detail.value
})
},
inputSmsCode(e) {
this.setData({
smsCode: e.detail.value
})
},
inputNote(e) {
this.setData({
note: e.detail.value
})
},
// 获取民族列表
getNationList() {
return new Promise((resolve, reject) => {
api.getNationList().then(res => {
const arr = []
res.data.forEach(item => {
arr.push({
label: item.nationName,
value: item.nationNumericalCode
})
})
this.setData({
nationPickerOptions: arr
})
resolve(true)
}).catch(err => {
console.error(err)
reject(false)
})
})
},
// 获取参选规则
getRuleList() {
return new Promise((resolve, reject) => {
const params = {
configType: "2",
pid: ""
}
api.getVoterConfigList(params).then(res => {
console.log('参选规则列表', res)
const rulePickerOptions = []
res.data.forEach(item => {
rulePickerOptions.push({
label: item.configName,
value: item.configCode
})
})
this.setData({
rulePickerOptions
})
resolve(true)
}).catch(err => {
console.error(err)
reject(false)
})
})
},
// 获取所选小区
getDistrictList() {
return new Promise((resolve, reject) => {
const params = {
configType: "0",
pid: ""
}
api.getVoterConfigList(params).then(res => {
console.log('参选规则列表', res)
const districtPickerOptions = []
res.data.forEach(item => {
districtPickerOptions.push({
label: item.configName,
value: item.configCode,
id: item.id
})
})
this.setData({
districtPickerOptions
})
resolve(true)
}).catch(err => {
console.error(err)
reject(false)
})
})
},
// 获取所在小组
getGroupList() {
let pid = ''
this.data.districtPickerOptions.forEach(item => {
if (item.value === this.data.districtPickerValue[0]) {
pid = item.id
}
})
const params = {
configType: "1",
pid
}
api.getVoterConfigList(params).then(res => {
console.log('参选规则列表', res)
const groupPickerOptions = []
res.data.forEach(item => {
groupPickerOptions.push({
label: item.configName,
value: item.configCode
})
})
this.setData({
groupPickerOptions
})
}).catch(err => {
console.error(err)
})
},
// 获取验证码
getSmsCode () {
if (!this.data.telephone.trim('')) {
this.showToast("请先输入手机号")
return false
}
this.setData({
smsCodeText: "获取中..."
})
const mobile = this.data.telephone.trim('')
api.sendSms(mobile).then(() => {
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: "获取验证码"
})
})
},
// 提交选民登记
submitVoter() {
if (!this.data.protocolChecked) {
this.showToast('请勾选底部按钮')
return false
}
const { id, districtPickerValue, groupPickerValue, name, nationPickerValue, nationPickerLabel, idCard, address, rulePickerValue, note, telephone, smsCode } = this.data
if (districtPickerValue.length === 0) {
this.showToast('请选择所属选区')
return false
} else if (groupPickerValue.length === 0) {
this.showToast('请选择所在小组')
return false
} else if (!name) {
this.showToast('请输入真实姓名')
return false
} else if (nationPickerValue.length === 0) {
this.showToast('请选择民族')
return false
} else if (!idCard) {
this.showToast('请输入身份证号')
return false
} else if (!address) {
this.showToast('请输入户籍地址')
return false
} else if (rulePickerValue.length === 0) {
this.showToast('请选择参选原则')
return false
} else if (!telephone) {
this.showToast('请输入手机号码')
return false
} else if (!smsCode) {
this.showToast('请输入验证码')
return false
}
const params = {
id,
constituencyCode: districtPickerValue[0],
groupCode: groupPickerValue[0],
name,
nationName: nationPickerLabel,
nationNumericalCode: nationPickerValue[0],
idNumber: idCard,
domicile: address,
participationPrincipleCode: rulePickerValue[0],
remark: note,
mobile: telephone,
smsCode
}
wx.showLoading({
title: '提交中...'
})
this.setData({
submitBtnDisabled: true
})
api.submitVote(params).then(res => {
this.showToast('提交成功')
setTimeout(() => {
wx.navigateBack({
delta: 1
});
}, 1000)
}).catch(err => {
console.error(err)
}).finally(() => {
this.setData({
submitBtnDisabled: false
})
})
},
// 获取详情
getVoterDetail() {
api.getVoterDetail().then(res => {
if (res.data) {
const { id, constituencyCode, groupCode, name, nationNumericalCode, idNumber, domicile, participationPrincipleCode, remark, mobile } = res.data
let pid = ''
let districtPickerLabel = ''
this.data.districtPickerOptions.forEach(item => {
if (item.value === constituencyCode) {
districtPickerLabel = item.label
pid = item.id
}
})
let nationPickerLabel = ''
this.data.nationPickerOptions.forEach(item => {
if (item.value === nationNumericalCode) {
nationPickerLabel = item.label
}
})
let rulePickerLabel = ''
this.data.rulePickerOptions.forEach(item => {
if (item.value === participationPrincipleCode) {
rulePickerLabel = item.label
}
})
this.getGroupDetail({ pid, groupCode })
this.setData({
id,
districtPickerLabel,
districtPickerValue: [constituencyCode],
name,
nationPickerLabel,
nationPickerValue: [nationNumericalCode],
idCard: idNumber,
address: domicile,
rulePickerLabel,
rulePickerValue: participationPrincipleCode,
note: remark,
telephone: mobile
})
}
}).catch(err => {
console.error(err)
})
},
// 所选小组回显
getGroupDetail({ pid, groupCode }) {
const params = {
configType: "1",
pid
}
api.getVoterConfigList(params).then(res => {
console.log('参选规则列表', res)
const groupPickerOptions = []
res.data.forEach(item => {
groupPickerOptions.push({
label: item.configName,
value: item.configCode
})
})
let groupPickerLabel = ''
groupPickerOptions.forEach(item => {
if (item.value === groupCode) {
groupPickerLabel = item.label
}
})
this.setData({
groupPickerLabel,
groupPickerOptions,
groupPickerValue: [groupCode]
})
}).catch(err => {
console.error(err)
})
},
// 代码简化,弹窗统一封装
showToast (title) {
wx.showToast({
title: title,
icon: "none",
duration: 2000
})
},
// 用户协议点选按钮
changeCheckedState() {
this.setData({
protocolChecked: !this.data.protocolChecked
})
}
})