<template> <view class="tallyDetail"> <view class="base-information"> <view class="top row bothSide verCenter"> <view class="title row verCenter"> <text class="arrow row rowCenter verCenter"></text> <text class="tt">基础信息</text> </view> <view class="toggle row verCenter" @click="toggle()"> <text class="iconfont icon-sanjiaoxing" :class="{ rotate: flag }"></text> <text class="tt">{{ flag ? '隐藏' : '展开' }}</text> </view> </view> <view class="pp row verCenter"> <text class="t1">入仓号:</text> <text class="t2" style="width: auto;">{{ goodsArrangeData.number }}</text> <text class="type row rowCenter verCenter" v-if="goodsArrangeData.isInspOrg">商检</text> </view> <view class="pp row verCenter" v-if="flag"> <text class="t1">订单时间:</text> <text class="t2">{{goodsArrangeData.orderDate}}</text> </view> <view class="pp row verCenter" v-if="flag"> <text class="t1">订单客户:</text> <text class="t2">{{ goodsArrangeData.customer }}</text> </view> <view class="pp row verCenter" v-if="flag"> <text class="t1">供应商:</text> <text class="t2">{{ goodsArrangeData.supplier }}</text> </view> <view class="pp row verCenter"> <text class="t1">登记数量:</text> <text class="t2">{{ goodsArrangeData.num }}</text> </view> <view class="pp row"> <text class="t1">采购备注:</text> <text class="t2">{{ goodsArrangeData.remark }}</text> </view> </view> <view class="question-box"> <block v-for="(v, d) in form" :key="d"> <view class="top row verCenter"> <text class="t1">问题类型</text> <text class="iconfont icon-sanjiaoxing1"></text> <view class="el-select-box"> <picker @change="bindPickerChange($event, d)" :value="questionTypeIndex[d]" :range="typeList" range-key="content"> <view class="uni-input">{{ typeList[questionTypeIndex[d]].content || '请选择' }}</view> </picker> </view> </view> <!-- 问题列表 --> <view class="uni-table"> <view class="uni-th row"> <text class="row verCenter">规格型号</text> <text class="row verCenter">订单{{ text[d] }}</text> <text class="row verCenter">实到{{ text[d] }}</text> <text class="row verCenter rowCenter" style="padding-left: 0;flex: 0 0 20%;">是否异常</text> </view> <view class="uni-tr row verCenter" v-for="(item, index) in form[d].exceptionlist" :key="index"> <text class="txt w row verCenter">{{ item.model }}</text> <text class="txt w row verCenter">{{ item.order_data }}</text> <input class="w uni-input" type="text" @input="onInput($event, d, index)" :value="form[d].exception[index].val" :disabled="!form[d].exception[index].is" :class="{ bg: !form[d].exception[index].is }" /> <view class="w" style="padding-left: 0;text-align: center;flex: 0 0 20%;"><switch :checked="form.exception[index].is" @change="switchChange($event, d, index)" style="transform: scale(0.5);" color="#197ADB" /></view> </view> </view> <!-- 图片上传 --> <view class="upload-box"> <view class="title row bothSide verCenter"> <text class="tt-l">来货图片上传(必填)</text> <text class="tt-r">{{ form[d].sort_goods_img.length }}/4</text> </view> <view class="upload-list row verCenter"> <template v-if="form[d].sort_goods_img.length > 0"> <view class="pic-box" v-for="(v, index) in form[d].sort_goods_img" :key="index"> <image :src="v" mode="aspectFill" lazy-load="true" @click="previewChange(form[d].sort_goods_img, index)"></image> <view class="delete row rowCenter verCenter" @click="deletePic(d, index)"><text class="iconfont icon-shanchu"></text></view> </view> </template> <view class="default row rowCenter verCenter" @click="chooseImageChange(d)" v-if="form[d].sort_goods_img.length < 4"><text class="iconfont icon-xingzhuangjiehe"></text></view> </view> </view> </block> <view class="textarea-box"> <textarea @input="inputChange()" maxlength="200" placeholder="请输入异常备注" placeholder-style="color:#6E767A;" v-model="ask_customer_remark"></textarea> <text class="text">{{ limitword }}/200</text> </view> </view> <view class="btn row rowCenter verCenter" @click="submit()">提交委托单问客</view> <view class="rebtn row rowCenter verCenter" @click="add()">保存并继续添加问题</view> </view> </template> <script> import { API } from '@/util/api.js'; import w_md5 from '../../js_sdk/zww-md5/w_md5.js'; export default { data() { return { flag: false, //toggle limitword: 0, //备注文字限制 goodsArrangeData: {}, //理货列表数据 noexebshowFalg: true, //控制是否会触发生命周期 limitword: 0, //备注文字限制, text: [''], //记录数组文字 typeList: [], //问题类型列表 questionTypeIndex: [0], //问题类型索引 erp_order_sn: '', //form入仓号 ask_customer_remark: '', //form仓库问客备注 entrys: {}, //form 金蝶数据, index: 0, //记录form当前操作索引 form: [ { ask_customer_exception_id: '', //异常id sort_goods_img: [], //问题图片 exception: [], //异常开关监听列表 exceptionlist: [] //原始订单列表数据 } ] }; }, onLoad(options) { this.erp_order_sn = options.number || ''; //获取参数入仓号 }, onShow() { if (this.noexebshowFalg) { this.getData(); } }, methods: { /** * 获取基础数据 */ getData() { this.request(API.getGoodsArrangeData, 'POST', { page: this.page, number: this.erp_order_sn }, true).then(res => { if (res.err_code === 0) { this.goodsArrangeData = res.data[0]; //理货列表数据 this.entrys = res.data[0]; //form 金蝶数据, this.getAllException(0); } else { uni.showToast({ title: res.err_msg, icon: 'error' }); } }); }, /** * 获取问题类型 */ getAllException(index) { this.request(API.getAllException, 'POST', {}, true).then(res => { if (res.err_code === 0) { this.typeList = res.data; this.form[index].ask_customer_exception_id = res.data[0].ask_customer_exception_id; //默认 this.text[index] = res.data[0].content.substr(0, 2); //默认 this.getExceptionData(index); } else { uni.showToast({ title: res.err_msg, icon: 'error' }); } }); }, /** * 获取异常订单数据 */ getExceptionData(index) { this.request(API.getExceptionData, 'POST', { ask_customer_exception_id: this.form[index].ask_customer_exception_id, entrys: this.entrys }, true).then(res => { if (res.err_code === 0) { this.form[index].exception = []; //清空异常开关监听列表 this.form[index].exceptionlist = res.data; //原始订单列表数据 //创建异常开关监听列表 if (res.data.length > 0) { for (let i = 0; i < res.data.length; i++) { this.form[index].exception.push({ val: '', is: false }); } } } else { uni.showToast({ title: res.err_msg, icon: 'error' }); } }); }, onInput(e, d, index) { this.form[d].exception[index].val = e.detail.value; }, switchChange(e, d, index) { this.$set(this.form[d].exception[index], 'is', e.target.value); if (!e.target.value) { this.$set(this.form[d].exception[index], 'val', ''); } }, toggle() { this.flag = !this.flag; }, previewChange(img, index) { this.noexebshowFalg = false; //不允许再次触发onshow这个生命周期 uni.previewImage({ current: index, urls: img }); }, inputChange() { if (this.ask_customer_remark.length <= 200) { this.limitword = this.ask_customer_remark.length; } }, deletePic(d, index) { this.form[d].sort_goods_img.splice(index, 1); }, bindPickerChange(e, d) { console.log('picker发送选择改变,携带值为', e.target.value); this.questionTypeIndex[d] = e.target.value; //问题索引 this.form[d].ask_customer_exception_id = this.typeList[e.target.value].ask_customer_exception_id; //异常id this.text[d] = this.typeList[e.target.value].content.substr(0, 2); //文字 this.getExceptionData(d); }, chooseImageChange(index) { this.noexebshowFalg = false; //不允许再次触发onshow这个生命周期 var self = this; var time = parseInt(new Date().getTime() / 1000); uni.chooseImage({ count: 4, sourceType: ['album', 'camera'], success: chooseImageRes => { uni.showLoading({ title: '上传中...' }); const tempFilePaths = chooseImageRes.tempFilePaths; let maxNum = tempFilePaths.length * 1 + self.form[index].sort_goods_img.length * 1; if (maxNum > 4) { uni.hideLoading(); uni.showToast({ title: '图片不超过4张' }); return false; } for (let i = 0; i < tempFilePaths.length; i++) { console.log(tempFilePaths[i]); uni.uploadFile({ url: API.upload, filePath: tempFilePaths[i], name: 'upload', formData: { source: '1', k1: time, k2: w_md5.hex_md5_32(w_md5.hex_md5_32(String(time)) + 'fh6y5t4rr351d2c3bryi') }, success: uploadFileRes => { uni.hideLoading(); var data = JSON.parse(uploadFileRes.data); console.log(data); if (data.code === 200) { self.form[index].sort_goods_img.push(data.data[0]); } else { uni.showToast({ title: data.message, icon: 'error' }); } }, fail: error => { uni.hideLoading(); console.log(error); } }); } } }); }, add() { this.form.push({ ask_customer_exception_id: '', sort_goods_img: [], exception: [], exceptionlist: [] }); this.index++; this.questionTypeIndex.push(0); uni.showLoading({ title: '添加问题中' }); setTimeout(() => { uni.hideLoading(); this.getAllException(this.index); }, 500); }, submit() { this.noexebshowFalg = false; //不允许再次触发onshow这个生命周期 //判断如有异常,是否填写实际 var tempArr = []; for (let i = 0; i < this.form.length; i++) { if (this.form[i].exception.findIndex(target => target.is === true) == -1) { uni.showModal({ title: '提示', content: '异常的产品请至少填写一个', showCancel: false, success: res => { if (res.confirm) { } else if (res.cancel) { console.log('用户点击取消'); } } }); return false; } else { console.log('验证不通过'); } } //判断来货图片 if (this.form.length > 0) { for (let i = 0; i < this.form.length; i++) { if (this.form[i].sort_goods_img.length <= 0) { uni.showModal({ title: '提示', content: '请上传所有问题类型的来货图片', showCancel: false, success: res => { if (res.confirm) { } else if (res.cancel) { console.log('用户点击取消'); } } }); return false; } } } var params = { form: this.form, erp_order_sn: this.erp_order_sn, ask_customer_remark: this.ask_customer_remark, entrys: this.entrys }; this.request(API.addAskCustomer, 'POST', params, true).then(res => { if (res.err_code === 0) { uni.showToast({ title: '提交成功', icon: 'success' }); setTimeout(() => { uni.navigateTo({ url: '/pages/goods/tally?currentIndex=1' }); }, 2000); } else { uni.showToast({ title: res.err_msg, icon: 'error' }); } }); } } }; </script> <style scoped lang="scss"> @import '../../assets/css/goods/tallyQuestion.scss'; </style>