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.
481 lines
11 KiB
481 lines
11 KiB
import { inputSync, nextTick } from "../../../../../utils/tools";
|
|
import {
|
|
wxShowToast,
|
|
wxRequestPost,
|
|
wxUploadFile,
|
|
wxChooseImage,
|
|
wxShowActionSheet,
|
|
} from "../../../../../utils/promise-wx-api";
|
|
import validate from "../../../../../utils/validate/index.js";
|
|
import words from "../../../../../config/words";
|
|
|
|
const app = getApp();
|
|
|
|
Component({
|
|
properties: {
|
|
badgeId: {
|
|
type: String,
|
|
value: "",
|
|
},
|
|
},
|
|
|
|
data: {
|
|
iniLoaded: false,
|
|
|
|
isApplied: false,
|
|
|
|
fmData: {
|
|
surname: "",
|
|
name: "",
|
|
idcard: "",
|
|
isCertificated: false,
|
|
mobile: "",
|
|
code: "",
|
|
certificationImg: "",
|
|
remark: "",
|
|
|
|
authResult: "",
|
|
authReason: "",
|
|
recordId: "",
|
|
},
|
|
fmConfig: {
|
|
surname: false,
|
|
name: false,
|
|
idcard: false,
|
|
isCertificated: false,
|
|
mobile: false,
|
|
code: false,
|
|
certificationImg: false,
|
|
remark: false,
|
|
},
|
|
|
|
submitBtnIsAllowed: false,
|
|
|
|
// 本地选择作品图片路径数组
|
|
imgList: [
|
|
// {
|
|
// tempFilePath: '', // 本地录制文件临时路径
|
|
// src: '', // 上传路径
|
|
// valid: true, // 是否合法
|
|
// }
|
|
],
|
|
|
|
// 手机验证码
|
|
codeData: {
|
|
status: 0, // 0初始 1发送中 2成功 3失败
|
|
cd: 0,
|
|
},
|
|
},
|
|
|
|
methods: {
|
|
async onLoad() {
|
|
await app.doAfterLogin();
|
|
|
|
await this.getFmConfig();
|
|
await this.iniVisit();
|
|
|
|
this.setData({
|
|
iniLoaded: true,
|
|
});
|
|
},
|
|
|
|
onShow() {},
|
|
|
|
inputSync,
|
|
|
|
// 更新data数据后需主动触发
|
|
$afterUpdateData() {
|
|
this.computeSubmitBtnIsAllowed();
|
|
},
|
|
|
|
// 获取短信验证码
|
|
async getTelCode() {
|
|
const { codeData } = this.data;
|
|
if (codeData.status == 1 || codeData.cd != 0) return;
|
|
|
|
const { fmData } = this.data,
|
|
vlt = validate(fmData, {
|
|
mobile: [
|
|
{
|
|
rule: "required",
|
|
message: "请先输入【手机号码】",
|
|
},
|
|
{
|
|
rule: "mobile",
|
|
message: "【手机号码】格式不正确",
|
|
},
|
|
],
|
|
});
|
|
if (!vlt.valid) {
|
|
return wx.showToast({
|
|
title: vlt.error,
|
|
icon: "none",
|
|
duration: 1500,
|
|
});
|
|
}
|
|
|
|
codeData.status = 1;
|
|
this.setData({ codeData });
|
|
|
|
const {
|
|
data: {
|
|
data: { code },
|
|
},
|
|
msg,
|
|
} = await wxRequestPost(
|
|
"epmetuser/more/badge/badgesendcode",
|
|
{
|
|
mobile: fmData.mobile,
|
|
},
|
|
{
|
|
// isMock: true,
|
|
isQuiet: false,
|
|
}
|
|
);
|
|
|
|
if (msg === "success" && code === 0) {
|
|
codeData.status = 2;
|
|
codeData.cd = 59;
|
|
this.setData({ codeData });
|
|
|
|
// 开始倒计时
|
|
this.sendTelCodeCd();
|
|
} else {
|
|
codeData.status = 3;
|
|
this.setData({ codeData });
|
|
}
|
|
},
|
|
|
|
// 发送短信倒计时
|
|
sendTelCodeCd() {
|
|
// 开始计时
|
|
const cdFn = async () => {
|
|
await nextTick(1000);
|
|
|
|
const { codeData } = this.data;
|
|
if (codeData.cd > 0) {
|
|
codeData.cd -= 1;
|
|
this.setData({ codeData });
|
|
cdFn();
|
|
}
|
|
};
|
|
cdFn();
|
|
},
|
|
|
|
// 删除封面
|
|
async handleLongTapCertificationImg() {
|
|
const {
|
|
fmData: { certificationImg },
|
|
} = this.data;
|
|
if (!certificationImg) return;
|
|
const { msg, data } = await wxShowActionSheet({
|
|
itemList: ["删除封面", "查看大图"],
|
|
});
|
|
if (msg == "success") {
|
|
const { tapIndex } = data;
|
|
if (tapIndex === 0) {
|
|
this.deleteCertificationImg();
|
|
} else if (tapIndex === 1) {
|
|
this.previewCertificationImg();
|
|
}
|
|
}
|
|
},
|
|
|
|
previewCertificationImg() {
|
|
const {
|
|
fmData: { certificationImg },
|
|
} = this.data;
|
|
wx.previewImage({
|
|
urls: [certificationImg],
|
|
});
|
|
},
|
|
|
|
deleteCertificationImg() {
|
|
this.setData({
|
|
imgList: [],
|
|
"fmData.certificationImg": "",
|
|
});
|
|
},
|
|
async addImg() {
|
|
const { imgList } = this.data;
|
|
const { msg, data } = await wxChooseImage({
|
|
count: 1,
|
|
sizeType: ["compressed"],
|
|
});
|
|
if (msg === "success") {
|
|
const { tempFilePaths } = data;
|
|
let newImgList = tempFilePaths.map((tempFilePath) => {
|
|
return {
|
|
tempFilePath,
|
|
src: "",
|
|
valid: true,
|
|
};
|
|
});
|
|
this.setData({
|
|
imgList: newImgList,
|
|
"fmData.certificationImg": tempFilePaths[0],
|
|
});
|
|
this.computeSubmitBtnIsAllowed();
|
|
}
|
|
},
|
|
// 上传图片
|
|
async uploadImgs() {
|
|
if (this.data.imgList.length === 0) {
|
|
return;
|
|
}
|
|
// 必须先开了,否则可能会冲突
|
|
wx.showLoading({
|
|
title: "上传图片中",
|
|
mask: true,
|
|
});
|
|
|
|
// 上传图片,返回地址
|
|
const uploadedImgList = await new Promise(async (reslove) => {
|
|
let { imgList } = this.data,
|
|
residueNum = imgList.length;
|
|
imgList.forEach(async (img, index) => {
|
|
if (img.src == "") {
|
|
const {
|
|
data: { data },
|
|
msg,
|
|
} = await wxUploadFile("oss/file/uploadimg", img.tempFilePath, {
|
|
// isMock: true
|
|
});
|
|
if (msg === "success" && data.code === 0) {
|
|
img.src = data.data.url;
|
|
img.valid = true;
|
|
}
|
|
}
|
|
imgList[index] = img;
|
|
|
|
residueNum -= 1;
|
|
if (residueNum === 0) {
|
|
reslove(imgList);
|
|
}
|
|
});
|
|
});
|
|
|
|
wx.hideLoading();
|
|
|
|
console.log(uploadedImgList);
|
|
|
|
this.setData({ imgList: uploadedImgList });
|
|
|
|
const imgsValid = uploadedImgList.every((item) => item.valid),
|
|
imgsAllUploaded = uploadedImgList.every((item) => item.src != "");
|
|
if (!imgsValid) {
|
|
wx.showToast({
|
|
title: "图片可能包含非法内容",
|
|
icon: "none",
|
|
duration: 1500,
|
|
});
|
|
return Promise.reject();
|
|
} else if (!imgsAllUploaded) {
|
|
wx.showToast({
|
|
title: "上传图片出错,请重试",
|
|
icon: "none",
|
|
duration: 1500,
|
|
});
|
|
return Promise.reject();
|
|
} else {
|
|
return this.setData({
|
|
"fmData.certificationImg": uploadedImgList[0].src,
|
|
});
|
|
}
|
|
},
|
|
|
|
computeSubmitBtnIsAllowed(isQuiet = true) {
|
|
const { fmConfig, fmData } = this.data;
|
|
const fmAllRules = {
|
|
surname: [
|
|
{
|
|
rule: "required",
|
|
message: "请先输入您的【姓氏】",
|
|
},
|
|
],
|
|
name: [
|
|
{
|
|
rule: "required",
|
|
message: "请先输入您的【名字】",
|
|
},
|
|
],
|
|
idcard: [
|
|
{
|
|
rule: "required",
|
|
message: "请先输入您的【证件号】",
|
|
},
|
|
],
|
|
mobile: [
|
|
{
|
|
rule: "required",
|
|
message: "请先输入【手机号码】",
|
|
},
|
|
{
|
|
rule: "mobile",
|
|
message: "【手机号码】格式不正确",
|
|
},
|
|
],
|
|
code: [
|
|
{
|
|
rule: "required",
|
|
message: "请先输入【短信验证码】",
|
|
},
|
|
],
|
|
remark: [
|
|
{
|
|
rule: "required",
|
|
message: "请先输入【备注】",
|
|
},
|
|
],
|
|
certificationImg: [
|
|
{
|
|
rule: "required",
|
|
message: "请上传【认证证件】",
|
|
},
|
|
],
|
|
};
|
|
let fmRules = {};
|
|
Object.keys(fmAllRules).forEach((k) => {
|
|
if (fmConfig[k]) {
|
|
fmRules[k] = fmAllRules[k];
|
|
}
|
|
});
|
|
const vlt = validate(fmData, fmRules);
|
|
if (!vlt.valid) {
|
|
if (!isQuiet) {
|
|
wx.showToast({
|
|
title: vlt.error,
|
|
icon: "none",
|
|
duration: 1500,
|
|
});
|
|
}
|
|
this.setData({
|
|
submitBtnIsAllowed: false,
|
|
});
|
|
return false;
|
|
} else {
|
|
this.setData({
|
|
submitBtnIsAllowed: true,
|
|
});
|
|
return true;
|
|
}
|
|
},
|
|
|
|
// 初始化访问
|
|
async iniVisit() {
|
|
const customerId = app.globalData.customerId;
|
|
const { badgeId, fmData } = this.data;
|
|
const {
|
|
data: {
|
|
data: { code, data },
|
|
},
|
|
msg,
|
|
} = await wxRequestPost(
|
|
"epmetuser/more/badge/certification/detail",
|
|
{
|
|
badgeId,
|
|
customerId,
|
|
},
|
|
{
|
|
// isMock: true,
|
|
isQuiet: false,
|
|
}
|
|
);
|
|
|
|
if (msg === "success" && code === 0) {
|
|
this.setData({
|
|
fmData: { ...fmData, ...data },
|
|
isApplied: true,
|
|
});
|
|
|
|
this.computeSubmitBtnIsAllowed();
|
|
}
|
|
},
|
|
|
|
// 初始化访问
|
|
async getFmConfig() {
|
|
const customerId = app.globalData.customerId;
|
|
const { badgeId, fmConfig } = this.data;
|
|
const {
|
|
data: {
|
|
data: { code, data },
|
|
},
|
|
msg,
|
|
} = await wxRequestPost(
|
|
"epmetuser/more/badge/authfield",
|
|
{
|
|
badgeId,
|
|
customerId,
|
|
},
|
|
{
|
|
// isMock: true,
|
|
isQuiet: false,
|
|
}
|
|
);
|
|
|
|
if (msg === "success" && code === 0) {
|
|
if (Array.isArray(data) && data.length > 0) {
|
|
data.forEach((item) => {
|
|
fmConfig[item.enName] = true;
|
|
});
|
|
}
|
|
if (fmConfig.mobile) {
|
|
fmConfig.code = true;
|
|
}
|
|
this.setData({
|
|
fmConfig,
|
|
});
|
|
}
|
|
},
|
|
|
|
// 注册
|
|
async submit() {
|
|
if (!this.computeSubmitBtnIsAllowed(false)) return;
|
|
|
|
await this.uploadImgs();
|
|
|
|
const { badgeId, fmData, fmConfig } = this.data;
|
|
const customerId = app.globalData.customerId;
|
|
let reqData = {};
|
|
Object.keys(fmData).forEach((k) => {
|
|
if (fmConfig[k]) {
|
|
reqData[k] = fmData[k];
|
|
}
|
|
});
|
|
|
|
wx.showLoading({
|
|
title: words.common.submitting,
|
|
mask: true,
|
|
});
|
|
const {
|
|
data: {
|
|
data: { code, data },
|
|
},
|
|
msg,
|
|
} = await wxRequestPost(
|
|
"resi/mine/badge/certification/add",
|
|
{
|
|
customerId,
|
|
badgeId,
|
|
...reqData,
|
|
},
|
|
{
|
|
// isMock: true,
|
|
isQuiet: false,
|
|
}
|
|
);
|
|
wx.hideLoading();
|
|
|
|
if (msg === "success" && code === 0) {
|
|
await this.selectComponent("#requestMsg").handleMsg();
|
|
|
|
wxShowToast({
|
|
title: "提交成功,请等待审核",
|
|
duration: 1500,
|
|
});
|
|
await nextTick(1500);
|
|
wx.navigateBack();
|
|
}
|
|
},
|
|
},
|
|
});
|
|
|