<style lang="scss"> .container{ min-height: 100%; background:#F6F6F6; padding:30rpx 0; .card{ margin-top:0; &>.title{ display:flex; align-items: center; justify-content: space-between; text:nth-child(2){ color:#777; } } .d-form /deep/{ &>.u-form-item{ position:relative; .u-form-item__body__right__message{ position:absolute; bottom:-10rpx; } } } } &>.fertilizer{ &>.name{ display:flex; align-items: center; margin-bottom:14rpx; text{ &:first-child{ font-size:20rpx; color:#fff; background:#10C176; border-radius: 7rpx; min-width:80rpx; padding:0 6rpx; text-align: center; height:40rpx; line-height: 40rpx; margin-right:16rpx; box-sizing: border-box; } &:nth-child(3){ border-radius: 50%; background:#10C176; color:#fff; margin-left:auto; width:35rpx; height:35rpx; text-align: center; line-height: 35rpx; } } } &>.company{ display:flex; align-items: center; text{ &.type{ flex-shrink: 0; font-size:20rpx; color:#FBA83C; } &.name{ margin-left:20rpx; font-size:20rpx; color:#707070; } &.specs{ margin-left:auto; } } } } &>.specs{ .select{ flex-grow: 1; height:80rpx; line-height: 80rpx; background:#F7F7F7; border-radius: 24rpx; padding:0 28rpx; display:flex; text{ color:#999; &:first-child{ flex-grow: 1; } &:nth-child(2){ flex-shrink: 0; transform: rotate(90deg); } } } .plant-xinjian{ color:#10C176; border-radius: 24rpx; margin-left:24rpx; background:#E7FCF3; height:80rpx; line-height: 80rpx; width:120rpx; text-align: center; box-shadow: 6rpx 6rpx 8rpx rgba(16,193,118,0.1); } .tip{ color:#FBA83C; font-size:24rpx; margin-top:12rpx; } } &>.purchase{ .input{ display:flex; background:#F7F7F7; border-radius: 24rpx; padding:20rpx; input{ flex-grow: 1; } text{ color:#999; line-height: 40rpx; margin-left:20rpx; } } } } </style> <template> <view class="container"> <view class="card fertilizer"> <view class="name"> <text>{{detail.agriculturalGoods}}</text> <text>{{detail.substanceName}}</text> <!-- <text class="plant-jiantou_zuoyouqiehuan" @click="$refs.dPicker.show=true"/> --> </view> <view class="company"> <text class="type">{{detail.detailType}}</text> <text v-if="formData.substanceType==1" class="name">{{detail.supplierName}}</text> <text v-else-if="inInventoryBatch.list.length<=0" class="specs">{{detail.equivalentInventory}}{{detail.unit}}</text> </view> </view> <view class="card specs" v-if="formData.substanceType==1"> <view class="title"> <text>规格</text> <text>{{detail.specDescribe}}</text> </view> <view class="tip">库存:{{detail.equivalentInventory}}{{detail.packgeUnit}}({{detail.equivalentInventory*detail.unitNum}}{{detail.unit}})</view> </view> <view class="card"> <u-form class="inline" :model="formData" ref="form" :rules="rules" labelWidth="auto"> <d-form v-if="inInventoryBatch.list.length>0" label="采收批次" field="inInventoryBatch" required type="select" :columns="inInventoryBatch.list" custom :value="inInventoryBatch.value" @select="inInventoryBatch.value=[$event[0].value];inInventoryBatch.number=$event[0].surplus;formData.inInventoryBatch=inInventoryBatch.value.at(-1)"> <view slot-scope="{row}" style="display:flex;"> <text style="margin-left:10rpx;font-weight:bold;">{{row.batchNo}}</text> <text style="font-size:24rpx;color:#999;margin-left:10rpx;">{{row.substanceName}}</text> <text style="margin-left:auto;color:#999;">剩余:{{row.surplus}}</text> </view> </d-form> <d-form :label="`${({in:'入',out:'出'})[mode]}库类型`" field="inOutType" required type="select" :columns="inOutType.list" :value="inOutType.value" @select="inOutType.value=$event.map(v=>v.value);formData.inOutType=inOutType.value.at(-1)"/> <d-form :label="`${({in:'入',out:'出'})[mode]}库批次号`" field="inOutBatchNo" required :value="formData.inOutBatchNo" @input="formData.inOutBatchNo=$event" btnText="生成" :btnFun="()=>this.formData.inOutBatchNo=`${({in:'RK',out:'CK'})[this.mode]}${new Date().format('yyyyMMdd')}${new Date().getTime()}`"/> <d-form :label="({1:`${({in:'入',out:'出'})[mode]}库数量`,2:'交易重量'})[formData.substanceType]" field="number" required :suffix="number.suffix" :value="formData.number" @input="formData.number=$event" type="digit"/> <template v-if="formData.substanceType==2&&formData.inOutType=='out01'&&inInventoryBatch.list.length>0"> <view style="display:flex;align-items: center;"> <d-form label="规格" required field="specification" type="digit" suffix="kg" :value="formData.specification" @input="formData.specification=$event"/> <text style="margin:45rpx 20rpx 0 20rpx;">/</text> <d-form style="width:max-content;margin-top:40rpx;" type="select" placeholder=" " @select="formData.packUnit=$event[0].value" :columns="[packWeightList]" :value="[formData.packUnit]"/> </view> <d-form label="交易数量" disabled type="digit" :suffix="formData.packUnit" :value="tradeNum"/> <d-form label="买方名称" required field="buyerName" btnIcon="plant-sousuo" :btnFun="searchBuy" :value="formData.buyerName" @input="formData.buyerName=$event"/> <d-form label="买方类型" required field="buyerType" type="select" :columns="[buyerType.list]" :value="buyerType.value" @select="buyerType.value=$event.map(v=>v.value);formData.buyerType=buyerType.value[1]"/> <d-form label="收货地址" required field="buyerAddress" type="textarea" :value="formData.buyerAddress" @input="formData.buyerAddress=$event"/> </template> <d-form :label="`${({in:'入',out:'出'})[mode]}库凭证`" type="upImg" :num="3" :value="formData.pic" @imgs="pic=$event"/> </u-form> </view> <button class="cu-btn round bg-green shadow submit" @click="submit">确定</button> </view> </template> <script> import request from '@/common/request' export default{ data(){ return{ mode:"", detail:{}, inInventoryBatch:{list:[],value:[],number:0}, inOutType:{list:[],value:[]}, pic:"", number:{suffix:""}, buyerType:{list:[],value:[]}, packWeightList:[], formData:{ inInventoryBatch:"", inOutType:"", goodsId:"", inOutBatchNo:"", pic:[], number:"", substanceType:"", tradeWeight:"", specification:"", packUnit:"", tradeNum:"", buyerType:"", buyerAddress:"", }, rules:{ inInventoryBatch:{required:true,message:"请选择采收批次!",trigger:['blur','change']}, inOutType:{required:true,validator:(rule,val,call)=>{ if(!val)call(new Error(`${({in:'入',out:'出'})[this.mode]}库类型必填!`)); else call() },trigger:['blur','change']}, inOutBatchNo:{required:true,validator:(rule,val,call)=>{ if(!val)call(new Error(`${({in:'入',out:'出'})[this.mode]}库批次号必填!`)); else call() },trigger:['blur','change']}, number:{required:true,validator:(rule,val,call)=>{ var title=({1:({in:'入',out:'出'})[this.mode],2:'交易重量'})[this.formData.substanceType] if(!(val>0))call(new Error(`请输入${title}!`)); else if(this.mode=='out' &&this.inInventoryBatch.list<=0&& val>this.detail.equivalentInventory)call(new Error(`${title}不能大于剩余数量${this.detail.equivalentInventory}!`)); else if(this.mode=='out' &&this.inInventoryBatch.list>0&& val>this.inInventoryBatch.number)call(new Error(`${title}不能大于剩余数量${this.inInventoryBatch.number}!`)); else call() },type:"number",trigger:['blur','change']}, specification:{required:true,message:"规格必填!",type:"number",trigger:['blur','change']}, tradeNum:{required:true,message:"交易数量必填!",type:"number",trigger:['blur','change']}, buyerName:{required:true,message:"买方名称必填!",trigger:['blur','change']}, buyerType:{required:true,message:"交易类型必选!",trigger:['blur','change']}, buyerAddress:{required:true,message:"收货地址必填!",trigger:['blur','change']}, }, mode:"", eventChannel:null, } }, computed:{ tradeNum(){ return Math.round((parseFloat(this.formData.number)/parseFloat(this.formData.specification)||0)*100)/100 }, }, onLoad(options){ this.formData.substanceType = ({nz:1, ncp:2})[options.type], this.mode=options.mode uni.setNavigationBarTitle({ title:({out:"出库",in:"入库"})[this.mode] }) this.eventChannel=this.getOpenerEventChannel() this.eventChannel.on("detail", e=>{ this.detail=e if(this.formData.substanceType==1){ this.number.suffix=(e.specDescribe.match(/\/(.+)/)||['',''])[1] }else{ this.number.suffix="kg" this.searchStock(e.inventoryId) } this.formData.goodsId=e.goodsId }) this.init() }, methods:{ async searchStock(inventoryId){ var res=await request("/api/Inventory/queryInInventoryBatchRecord",{ params:{inventoryId} }) if(res.statu){ this.inInventoryBatch.list=res.data.length>0?[res.data.map(v=>({...v,label:v.substanceName,value:v.batchNo}))]:[] }else{ uni.showModal({ title:"提示", content:res.msg||"获取库存失败!", showCancel:false, }) } }, async init(){ //出库类型 var res=await request("/common/api/dict/queryDictItemByDictCode",{ method:"post", //农产品前面加上product_ params: {dictCode: (this.formData.substanceType=="2"?"product_":"")+({out:"out_type",in:"in_type"})[this.mode]} }) if(res.statu){ this.inOutType.list=[res.data] }else{ uni.showModal({ title:"提示", content:res.msg||"获取出库类型选项失败!", showCancel:false, }) } //规格 var res = await request("/common/api/dict/queryDictItemByDictCode",{ method:"post", params:{dictCode:"dressing_unit"} }) if(res.statu){ this.packWeightList=res.data this.formData.packUnit=res.data[0].value }else{ uni.showModal({ title:"提示", content:res.msg||"获取规格选项失败!", showCancel:false, }) } //买方类型 var res = await request("/common/api/dict/categoryValue",{ method:"post", params:{code:"B08"} }) if(res.statu){ this.buyerType.list=res.data }else{ uni.showModal({ title:"提示", content:res.msg||"获取买方类型选项失败!", showCancel:false, }) } }, submit(){ this.$refs.form.validate().then(async valid=>{ if(valid){ var res=await request("/api/Inventory/inventoryOperate",{ method:"post", body:{ ...this.formData, inventoryId: this.detail.inventoryId, equivalentAmount: this.detail.equivalentInventory, supplier: this.detail.supplierName, pic:this.pic, type: ({in:2, out:1})[this.mode], tradeNum:this.tradeNum, } }) if(res.statu){ uni.navigateBack() this.eventChannel.emit("update") }else{ uni.showModal({ title:"提示", content:res.msg||"保存失败!", showCancel:false, }) } } }) }, searchBuy(){ uni.navigateTo({ url:`/pages/massif/search?data=${this.formData.buyerName||''}`, events:{update:e=>{ this.formData.buyerName=e.buyerName this.formData.buyerAddress=e.address this.formData.buyerType=e.buyerType[1] this.buyerType.value=e.buyerType }} }) }, }, } </script>