/**
|
* 信息输入逻辑
|
* 包括输入信息存储、输入规范性检测、错误提示等
|
* @see "/data/sceneInfo.js"
|
*/
|
module.exports = Behavior({
|
data: {
|
msg: [],
|
info: {}
|
},
|
lifetimes: {
|
attached: function () {}
|
},
|
methods: {
|
selectChange(e) {
|
const index = e.currentTarget.dataset.index
|
const options = e.detail.options
|
this.setData({
|
[`msg[${index}].options`]: options
|
})
|
},
|
|
pickerChange(e) {
|
console.log(e);
|
const {
|
index,
|
mode
|
} = e.currentTarget.dataset
|
let i = e.detail.value.concat(e.detail.code)
|
if (mode == 'region') {
|
this.setData({
|
[`msg[${index}].value`]: i
|
})
|
} else if (mode == 'selector') {
|
this.setData({
|
[`msg[${index}].selectIndex`]: i,
|
[`msg[${index}].value`]: this.data.msg[index].options[i].value
|
})
|
}
|
},
|
|
changeMsg(e) {
|
let id = e.detail.params.id
|
let value = e.detail.params.value
|
let msg = this.data.msg
|
let msgLength = msg.length
|
for (let i = 0; i < msgLength; i++) {
|
if (msg[i].id === id) {
|
let path = "msg[" + i + "].value"
|
let nPath = "msg[" + i + "].noValue"
|
this.setData({
|
[path]: value,
|
[nPath]: false
|
})
|
}
|
}
|
},
|
|
/**
|
* 信息完整度检查
|
*/
|
submitCheck() {
|
let msg = this.data.msg
|
//确认信息完整度
|
for (let i = 0; i < msg.length; i++) {
|
const m = msg[i]
|
//选填项直接略过
|
if (m.required == false) continue
|
//复选框和单选框(复选框的逻辑包含了单选框)
|
if (m.type == 'checkbox' || m.type == 'radio') {
|
// console.log('m.options', m.options);
|
m.value = ''
|
for (let t = 0; t < m.options.length; t++) {
|
const o = m.options[t];
|
if (o.checked) {
|
if (m.value != '') {
|
m.value += ';'
|
}
|
if (o.hasRemark) {
|
// console.log('o.remark', o.remark);
|
if (o.remark == '') {
|
this.setData({
|
[`msg[${i}].options[${t}].noValue`]: true
|
})
|
this.showErrorMsg(i, '备注信息不能为空')
|
return false
|
} else {
|
m.value += o.remark
|
}
|
} else {
|
m.value += o.name
|
}
|
}
|
}
|
if (m.value == '') {
|
this.showErrorMsg(i)
|
return false
|
}
|
}
|
//下拉选择框
|
else if (m.type == 'picker') {
|
if (m.pickerMode == 'selector') {
|
if (m.selectIndex == 0) {
|
this.showErrorMsg(i, `${this.data.msg[i].name}未选择`)
|
return false
|
} else {
|
m.value = m.options[m.selectIndex].name
|
}
|
} else if (m.pickerMode == 'region') {
|
if (m.value.length == 0) {
|
this.showErrorMsg(i, `${this.data.msg[i].name}未选择`)
|
return false
|
}
|
}
|
}
|
//输入框
|
else if (m.value === "" || m.value === null || m.value === undefined) {
|
this.showErrorMsg(i)
|
return false
|
}
|
}
|
|
// //密码一致性确认
|
// if (msg[1].value != msg[2].value) {
|
// let error = "两次输入的密码不一致"
|
// this.setData({
|
// errorMsg: error,
|
// })
|
// return false
|
// }
|
// //密码复杂度确认
|
// var pwError
|
// var pw = msg[1].value
|
// var regex1 = /[a-zA-Z]/
|
// var regex2 = /[0-9]/
|
// var r = regex1.test(pw) && regex2.test(pw)
|
// console.log('regex:' + r);
|
// if (pw.length < 6) {
|
// pwError = '密码位数最少6位'
|
// } else if (!r) {
|
// pwError = '密码必须包含字母和数字'
|
// }
|
// if (pwError) {
|
// this.setData({
|
// errorMsg: pwError,
|
// })
|
// return false
|
// }
|
|
return true
|
},
|
|
showErrorMsg(index, err = `${this.data.msg[index].name}不可为空`) {
|
this.setData({
|
errorMsg: err,
|
[`msg[${index}].noValue`]: true
|
})
|
const id = "#" + this.data.msg[index].id
|
wx.createSelectorQuery().select('.page').boundingClientRect(res1 => {
|
const top1 = res1.top
|
wx.createSelectorQuery().in(this).select(id).boundingClientRect(res => {
|
const h = res.top - top1 - 60
|
// console.log(h);
|
wx.pageScrollTo({
|
// duration: 300,
|
scrollTop: h,
|
// selector: id,
|
// offsetTop: -60,
|
})
|
}).exec();
|
}).exec();
|
},
|
|
onSubmit: function () {
|
console.log('onSubmit');
|
if (!this.submitCheck()) return
|
|
let msg = this.data.msg
|
if (msg) {
|
let info = {}
|
msg.forEach(m => {
|
info[m.id] = m.value
|
});
|
this.setData({info})
|
this.triggerEvent('onSubmit', info)
|
this.submit()
|
}
|
},
|
}
|
})
|