// pages/vehicleMaintenance/operation/offer/offer.ts import { getAction, postAction } from '../../../../api/base'; Page({ /** * 页面的初始数据 */ data: { showMore: true, // 展示/收起明细 classifyOptions: [] as any, // 维修分类数据 filterClassifyOptions: [] as any, // 过滤维修分类数据 repairDetailList: [] as any, // 维修明细 materialCost: '' as any, // 总计材料费 totalWorkHours: '' as any, // 总计工时 totalWorkHoursCost: '' as any, // 总计工时费用 repairCost: '' as any, // 联维修报价 content: '', // 内容说明 attachmentList: [], // 单据附件 inRepairImgUrl: [], // 维修中图片 afterRepairImgUrl: [], // 维修后图片 paramsInfo: {} as any, // 维修单数据 uploadUrl: 'api/vehicles/repair/fileUpload', // 上传图片地址 classifySearchVal: '', // 维修分类过滤查询 currentIndex: null // 当前选中的维修明细 }, showDetail() { this.setData({ showMore: !this.data.showMore }); }, // 明细相关值修改------------------- addOffer() { let tmpArr = this.data.repairDetailList; tmpArr.push({ repairClass: '', repairClass_dictText: '', repairContent: '', quantity: '', unitPrice: '', workHours: '', workHoursCost: '', totalCost: 0 }); this.setData({ repairDetailList: tmpArr }); }, changeOfferVal(e: any) { console.log(e); let tmpArr = this.data.repairDetailList; let index = e.currentTarget.dataset.index; let key = e.currentTarget.dataset.key; if (key != 'repairContent') { if (e.detail.value > 99999999) { wx.showToast({ title: '输入值不能大于99999999', icon: 'none' }); e.detail.value = 99999999; } else if (e.detail.value < 0) { wx.showToast({ title: '输入值不能小于0', icon: 'none' }); e.detail.value = 0; } tmpArr[index][key] = Number(Number(e.detail.value).toFixed(2)); } else tmpArr[index][key] = e.detail.value; this.setData({ repairDetailList: tmpArr }); if (key == 'repairContent') { this.checkString(tmpArr[index][key]); // 维修内容不用计算 return; } // 调用计算总金额 this.calculateTotal(); }, // 校验字符串 checkString(str: string) { let res = true; const spaceRegex = new RegExp(/\s+/g); if (str && spaceRegex.test(str)) { wx.showToast({ title: '维修内容不支持含有空格', icon: 'none' }); res = false; } const regex = /['"{};<>!@#$%^&*|\\]/; if (str && regex.test(str)) { wx.showToast({ title: '维修内容不支持特殊字符', icon: 'none' }); res = false; } const tooLong = str.length > 100; if (str && tooLong) { wx.showToast({ title: '维修内容输入长度不得超过100个字符', icon: 'none' }); res = false; } return res; }, changeNum(e: any) { console.log(e); let tmpArr = this.data.repairDetailList; let index = e.currentTarget.dataset.index; if (tmpArr[index].quantity == '') { tmpArr[index].quantity = 0; } if (e.currentTarget.dataset.type == 'up') { tmpArr[index].quantity += 1; tmpArr[index].quantity = Number( Number(tmpArr[index].quantity).toFixed(2) ); } else { if (tmpArr[index].quantity == 0) { wx.showToast({ title: '数量不能为负数', icon: 'none' }); return; } tmpArr[index].quantity -= 1; tmpArr[index].quantity = Number( Number(tmpArr[index].quantity).toFixed(2) ); } this.setData({ repairDetailList: tmpArr }); // 调用计算总金额 this.calculateTotal(); }, delOffer(e: any) { console.log(e.currentTarget.dataset.index); let tmpArr = this.data.repairDetailList.filter( (x: any, i: number) => i != e.currentTarget.dataset.index ); this.setData({ repairDetailList: tmpArr }); // 调用计算总金额 this.calculateTotal(); }, calculateTotal() { let tmpArr = this.data.repairDetailList; let materialCost = 0; let totalWorkHours = 0; let totalWorkHoursCost = 0; let repairCost = 0; tmpArr.forEach((item: any) => { let quantity = item.quantity ? Number(item.quantity) : 0; let unitPrice = item.unitPrice ? Number(item.unitPrice) : 0; let workHours = item.workHours ? Number(item.workHours) : 0; let workHoursCost = item.workHoursCost ? Number(item.workHoursCost) : 0; item.totalCost = Number( (quantity * unitPrice + workHours * workHoursCost).toFixed(2) ); materialCost += Number((quantity * unitPrice).toFixed(2)); totalWorkHours += workHours; totalWorkHoursCost += Number((workHours * workHoursCost).toFixed(2)); repairCost += item.totalCost; }); this.setData({ repairDetailList: tmpArr, materialCost: materialCost, totalWorkHours: totalWorkHours, totalWorkHoursCost: totalWorkHoursCost, repairCost: repairCost }); }, // 明细相关值修改------------------- getMarker(e: any) { console.log(e); this.setData({ content: e.detail.value }); }, // 上一步 goBack() { wx.navigateBack(); }, // 提交报价 bindSend() { // 校验是否新增了维修明细 if (this.data.repairDetailList.length == 0) { wx.showToast({ title: '请先新建维修明细', icon: 'none' }); return; } // 校验维修明细 let res = true; let result = true; this.data.repairDetailList.forEach((item: any) => { let key = Object.keys(item); key.forEach(el => { if (item[el] === '') res = false; if (el == 'repairContent') { let check = this.checkString(item[el]); if (!check) result = false; } }); }); if (!res) { wx.showToast({ title: '请完成维修明细的填写', icon: 'none' }); return; } // 维修内容校验 if (!result) { return; } if (this.data.attachmentList.length == 0) { wx.showToast({ title: '请上传单据附件', icon: 'none' }); return; } if (this.data.inRepairImgUrl.length == 0) { wx.showToast({ title: '请上传维修中图片', icon: 'none' }); return; } if (this.data.afterRepairImgUrl.length == 0) { wx.showToast({ title: '请上传维修后图片', icon: 'none' }); return; } let params = { repairInfo: this.data.paramsInfo.repairInfo, repairAssign: this.data.paramsInfo.repairAssign, repairOffer: { repairDetailList: this.data.repairDetailList, materialCost: this.data.materialCost, totalWorkHours: this.data.totalWorkHours, //总计工时 totalWorkHoursCost: this.data.totalWorkHoursCost, //工时费用总计 repairCost: this.data.repairCost, //联维修报价 content: this.data.content, //内容说明 attachmentList: this.data.attachmentList, //内容说明 inRepairImgUrl: this.data.inRepairImgUrl.length > 0 ? this.data.inRepairImgUrl.join(',') : '', //维修中图片 afterRepairImgUrl: this.data.afterRepairImgUrl.length > 0 ? this.data.afterRepairImgUrl.join(',') : '' //维修后图片 } }; wx.showLoading({ title: '加载中', mask: true }); postAction('api/vehicles/repair/addDataEntry', params) .then((res: any) => { if (res.code == 200) { wx.hideLoading(); wx.showToast({ title: '录入成功', icon: 'none' }); wx.setStorageSync('message', { flowStatus: 100, id: res.message }); wx.redirectTo({ url: '../message/message', fail: e => { console.log(e); } }); } else { wx.hideLoading(); wx.showToast({ title: res.message, icon: 'none' }); } }) .catch((err: any) => { wx.hideLoading(); wx.showToast({ title: err.message, icon: 'none' }); }); }, // 单据附件上传回调 returnPicOne(e: any) { this.setData({ attachmentList: e.detail.photoList }); }, // 维修中图片上传回调 returnPicTwo(e: any) { let list = [] as any; e.detail.photoList.forEach((item: any) => { list.push(item.fileUrl); }); this.setData({ inRepairImgUrl: list }); }, // 维修后图片上传回调 returnPicThree(e: any) { let list = [] as any; e.detail.photoList.forEach((item: any) => { list.push(item.fileUrl); }); this.setData({ afterRepairImgUrl: list }); }, getInf() { // 获取信息 let info = wx.getStorageSync('paramsInfo'); wx.removeStorage({ key: 'paramsInfo' }); this.setData({ paramsInfo: info }); console.log('看看数据', this.data.paramsInfo); }, // 获取报修分类 getRepairClass() { getAction('api/vehicles/repair/getRepairClass') .then((res: any) => { if (res.code == 200) { let data = [] as any; res.result.forEach((el: any) => { el.value = el.value; el.text = el.text; }); data = res.result; this.setData({ classifyOptions: data, filterClassifyOptions: data }); } else { wx.showToast({ title: res.message, icon: 'none' }); } }) .catch((err: any) => { wx.showToast({ title: err.message, icon: 'none' }); }); }, // 展示选择框 pickerChange(event: any) { //下拉框切换是否展示 let { fieldname, index } = event.currentTarget.dataset; let data: any = { ...this.data }; data[fieldname] = true; this.setData(data); this.setData({ currentIndex: index }); }, // 隐藏展示框 hidePicker() { this.setData({ classifyShow: false }); }, // 选择器点击确认 pickerConfirm(event: any) { let { fieldname } = event.currentTarget.dataset; let detail = event.detail; let data = this.data.repairDetailList; let index = this.data.currentIndex; if (index != null) { data[index].repairClass = detail.value.value; data[index].repairClass_dictText = detail.value.text; // 选择报修分类 if (fieldname == 'classify') { this.setData({ repairDetailList: data }); } } this.hidePicker(); }, // 清空数据 resetData(event: any) { let { fieldname, index } = event.currentTarget.dataset; let data = this.data.repairDetailList; if (fieldname == 'repairPeople') { this.setData({ repairPeople: '' }); } else if (fieldname == 'phone') { this.setData({ phone: '' }); } else if (fieldname == 'repairContent') { data[index].repairContent = ''; this.setData({ repairDetailList: data }); } }, /** * 生命周期函数--监听页面加载 */ onLoad() {}, /** * 生命周期函数--监听页面初次渲染完成 */ onReady() { this.getInf(); this.getRepairClass(); }, /** * 生命周期函数--监听页面显示 */ onShow() {}, /** * 生命周期函数--监听页面隐藏 */ onHide() {}, /** * 生命周期函数--监听页面卸载 */ onUnload() {}, /** * 页面相关事件处理函数--监听用户下拉动作 */ onPullDownRefresh() {}, /** * 页面上拉触底事件的处理函数 */ onReachBottom() {}, /** * 用户点击右上角分享 */ onShareAppMessage() {} });