// 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: [], // 单据附件 echoFile: null as any, // 回显时的单据附件 repairObject: {} 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) { let tmpArr = this.data.repairDetailList; let index = e.currentTarget.dataset.index; let { key, fixed } = e.currentTarget.dataset; 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(fixed)); } 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) { 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(0) ); } 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(0) ); } this.setData({ repairDetailList: tmpArr }); // 调用计算总金额 this.calculateTotal(); }, delOffer(e: any) { 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) { this.setData({ content: e.detail.value }); }, // 提交报价 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; } // 单据附件数据 let fileList = JSON.parse(JSON.stringify(this.data.attachmentList)) as any; // 如何有回显的附件且未删除 if (this.data.echoFile) { this.data.echoFile.forEach((item: any) => { fileList.push(item); }); } if (fileList == 0) { wx.showToast({ title: '请上传单据附件', icon: 'none' }); return; } let params = { id: this.data.repairObject.id, //id flowStatus: 3, //当前流程状态 checkFlag: 1, //审核状态 1-》通过, 2-》不通过 repairInfo: {}, repairAssign: {}, repairOffer: { id: null, 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: fileList // 单据附件 }, currentRepairCheck: {} }; wx.showLoading({ title: '加载中', mask: true }); postAction('api/vehicles/repair/submitRepairObject', params) .then((res: any) => { if (res.code == 200) { wx.hideLoading(); wx.showToast({ title: '派单成功', icon: 'none' }); wx.setStorageSync('message', { repairOffer: this.data.repairObject.repairInfo.orderNo, plateNumber: this.data.repairObject.repairInfo.plateNumber, price: this.data.repairCost, id: this.data.repairObject.id, flowStatus: 3 }); 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' }); }); }, returnPic(e: any) { this.setData({ attachmentList: e.detail.photoList }); }, // 删除回显图片 delImg(e: any) { let that = this; let { index } = e.currentTarget.dataset; let { echoFile } = this.data; wx.showModal({ title: '提示', content: '是否删除当前照片', success(res) { if (res.confirm) { echoFile.splice(index, 1); that.setData({ echoFile: echoFile }); } } }); }, getInf() { // 获取信息 let info = wx.getStorageSync('repairObject'); wx.removeStorage({ key: 'repairObject' }); this.setData({ repairObject: info }); }, // 获取报修分类 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 }); // 如果是审核不通过的数据,需要回显 // 需要等待维修分类的数据出来 if (this.data.repairObject.repairOffer) { this.setData({ repairDetailList: this.data.repairObject.repairOffer.repairDetailList, materialCost: this.data.repairObject.repairOffer.materialCost, //总计材料费 totalWorkHours: this.data.repairObject.repairOffer.totalWorkHours, //总计工时 totalWorkHoursCost: this.data.repairObject.repairOffer.totalWorkHoursCost, //工时费用总计 repairCost: this.data.repairObject.repairOffer.repairCost, //联维修报价 content: this.data.repairObject.repairOffer.content, //内容说明 echoFile: this.data.repairObject.repairOffer.attachmentList // 回显附件 }); } } 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 == 'repairContent') { data[index].repairContent = ''; this.setData({ repairDetailList: data }); } }, // 图片预览 showImage(event: any) { let { index, image } = event.currentTarget.dataset; let list = [] as any; if (image == 'echoFile') { this.data.echoFile.forEach((item: any) => { list.push(item.fileUrl); }); } wx.previewImage({ current: list[index | 0], // 当前显示图片的http链接 默认urls[0] urls: list // 需要预览的图片http链接列表 }); }, /** * 生命周期函数--监听页面加载 */ onLoad() {}, /** * 生命周期函数--监听页面初次渲染完成 */ onReady() { this.getRepairClass(); this.getInf(); }, /** * 生命周期函数--监听页面显示 */ onShow() {}, /** * 生命周期函数--监听页面隐藏 */ onHide() {}, /** * 生命周期函数--监听页面卸载 */ onUnload() {}, /** * 页面相关事件处理函数--监听用户下拉动作 */ onPullDownRefresh() {}, /** * 页面上拉触底事件的处理函数 */ onReachBottom() {}, /** * 用户点击右上角分享 */ onShareAppMessage() {} });