const app = getApp(); Page({ data: { contact: '', phone: '', description: '', imageList: [], showNotification: true, countDown: 3, isFormValid: false, category: '投诉', categoryValue: '1', isPreviewMode: false, title: '', content: '', replyTime: '', replyContent: '', formSubmitted: false, isSubmitting: false, lastSubmitTime: 0, categoryMap: [ {name: '投诉', value: '1'}, {name: '建议', value: '2'} ], }, onLoad: function (options) { this.startCountDown(); // 检查是否是预览模式 if (options.mode === 'preview') { const id = options.id; // 获取数据 this.getDataById(id); // 设置为预览模式 this.setData({ isPreviewMode: true }); } else { // 非预览模式才检查表单有效性 this.checkFormValidity(); } }, onShow: function () { // 检查是否是从成功页面返回 if (this.data.formSubmitted) { // 重置表单数据 this.resetForm(); // 重置提交状态标记 this.setData({ formSubmitted: false }); } }, startCountDown: function () { let that = this; let timer = setInterval(function () { if (that.data.countDown > 0) { that.setData({ countDown: that.data.countDown - 1 }); } else { clearInterval(timer); } }, 1000); }, goBack: function () { wx.navigateBack(); }, radioChange: function (e) { const value = e.detail.value; const selectedCategory = this.data.categoryMap.find(item => item.value === value || item.name === value); this.setData({ category: selectedCategory.name, categoryValue: selectedCategory.value }); this.checkFormValidity(); }, inputContact: function (e) { this.setData({ contact: e.detail.value }); this.checkFormValidity(); }, inputPhone: function (e) { const value = e.detail.value; const phoneNumber = value.replace(/\D/g, ''); this.setData({ phone: phoneNumber }); this.checkFormValidity(); }, validatePhone: function (phone) { const phoneReg = /^1[3-9]\d{9}$/; return phoneReg.test(phone); }, inputDescription: function (e) { this.setData({ description: e.detail.value }); this.checkFormValidity(); }, chooseImage: function () { let that = this; if (that.data.imageList.length >= 10) { wx.showToast({ title: '最多只能上传10张图片', icon: 'none' }); return; } wx.chooseMedia({ count: 10 - that.data.imageList.length, mediaType: ['image'], sourceType: ['album', 'camera'], sizeType: ['compressed'], success: function (res) { let tempFiles = res.tempFiles; let validFiles = []; for (let i = 0; i < tempFiles.length; i++) { const file = tempFiles[i]; if (file.size <= 10 * 1024 * 1024) { validFiles.push(file); } else { wx.showToast({ title: '图片大小不能超过10M', icon: 'none' }); } } if (validFiles.length > 0) { let newImageList = that.data.imageList.concat(validFiles); that.setData({ imageList: newImageList }); } } }); }, previewImage: function (e) { let index = e.currentTarget.dataset.index; wx.previewImage({ current: this.data.imageList[index], urls: this.data.imageList }); }, deleteImage: function (e) { let index = e.currentTarget.dataset.index; let imageList = this.data.imageList; imageList.splice(index, 1); this.setData({ imageList: imageList }); }, checkFormValidity: function () { const { contact, phone, description, category } = this.data; // 只检查必填项:联系人、联系电话和内容说明 const isValid = contact.trim() !== '' && this.validatePhone(phone) && description.trim() !== ''; this.setData({ isFormValid: isValid }); return isValid; }, onInputChange: function (e) { const { field } = e.currentTarget.dataset; const { value } = e.detail; this.setData({ [field]: value }); this.checkFormValidity(); }, bindPickerChange: function (e) { this.checkFormValidity(); }, // 添加submitForm方法 submitForm: function () { // 如果正在提交中,直接返回 if (this.data.isSubmitting) { return; } if (!this.checkFormValidity()) { let errorMsg = ''; if (!this.data.contact.trim()) { errorMsg = '请填写联系人'; } else if (!this.validatePhone(this.data.phone)) { errorMsg = '请输入正确的联系电话'; } else if (!this.data.description.trim()) { errorMsg = '请填写内容说明'; } wx.showToast({ title: errorMsg, icon: 'none' }); return; } const now = Date.now(); const lastSubmitTime = this.data.lastSubmitTime; // 如果距离上次提交时间小于 2 秒,直接返回 if (now - lastSubmitTime < 2000) { // wx.showToast({ // title: '请勿重复提交', // icon: 'none', // }); return; } // 更新上次提交时间 this.setData({ lastSubmitTime: now, }); const fileManager = wx.getFileSystemManager(); this.data.imageList.map(imgInfo => { const base64 = fileManager.readFileSync(imgInfo.tempFilePath, 'base64'); imgInfo.base64 = base64; return imgInfo; }) const submitData = { category: this.data.categoryValue, contact: this.data.contact, phone: this.data.phone, description: this.data.description, images: this.data.imageList, userName: app.globalData.currentAccountInfo.username, userNum: app.globalData.currentAccountInfo.usernumber }; debugger // 设置正在提交中 防止重复点击提交按钮 this.setData({ isSubmitting: true, }); console.log('提交的数据:', submitData); wx.showLoading({ title: '提交中...', }); wx.request({ url: app.globalData.interfaceUrls.feedback, method: 'POST', header: { 'content-type': 'application/json', // 默认值 'token': app.globalData.userWxInfo.token, 'source': "wc", '!SAAS_LOGIN_TOKEN_!': app.globalData.currentAccountInfo.dsKey }, data: submitData, success(res) { wx.hideLoading(); if (res.data.code == '200') { wx.navigateTo({ url: '/pages/tousujianyiSuccess/tousujianyiSuccess', }); } }, fail(error) { wx.hideLoading() utils.simleInfo('登记失败,请稍后再试') }, complete: () => { this.setData({ isSubmitting: false, // 提交完成,重置标志位,可继续提交 formSubmitted: true // 在提交成功后设置标记,返回将重置表单 }); }, }) // 在提交成功后设置标记,返回将重置表单 // this.setData({ // formSubmitted: true // }); }, submitRepair: function () { this.submitForm(); }, // 根据ID获取数据 getDataById: function (id) { // 这里应该是从服务器获取数据 // 但为了演示,我们从本地数据中获取 const pages = getCurrentPages(); const prevPage = pages[pages.length - 2]; // 获取上一个页面 if (prevPage && prevPage.data.noticeList) { const item = prevPage.data.noticeList.find(item => item.id == id); if (item) { const formatTime = (timeString) => { if (!timeString) return ''; // 如果时间为空,返回空字符串 const date = new Date(timeString); const year = date.getFullYear(); const month = String(date.getMonth() + 1).padStart(2, '0'); // 月份补零 const day = String(date.getDate()).padStart(2, '0'); // 日期补零 return `${year}-${month}-${day}`; }; let categoryName = '投诉'; const categoryItem = this.data.categoryMap.find(cat => cat.value === item.category); if (categoryItem) { categoryName = categoryItem.name; } this.setData({ category: categoryName, categoryValue: item.category || '1', contact: item.feedbackperson || '', description: item.replynote || '', phone: item.contactnumber || '', imageList: item.attachments || [], replyTime: formatTime(item.replytime) || '', replyContent: item.replycontent || '' }); } } }, resetForm: function () { this.setData({ contact: '', phone: '', description: '', imageList: [], category: '投诉', categoryValue: '1' }); } });