lanan-repair-app/pages-warehouse/inOutWarehouse/inOutWarehouse.vue
2024-10-27 16:11:44 +08:00

340 lines
8.0 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view class="container">
<VNavigationBar background-color="#fff" title="单据处理" title-color="#333"></VNavigationBar>
<!-- <view class="tabs">-->
<!-- <view v-for="(item, index) in tabs" :key="index" :class="{'active': item.value === active}" class="tab-item">-->
<!-- {{ item.name }}-->
<!-- </view>-->
<!-- </view>-->
<view class="listBox">
<view class="list">
<view v-for="(item, index) in wares" :key="index" class="listItem">
<view class="repairName">{{ item.waresName }}</view>
<view class="repairBottom">
<text class="repairDesc">单位:
<text class="repairUnit">{{ item.wares.unit }}</text>
</text>
<text class="repairDesc">申请数量:
<text class="repairUnit">{{ item.waresCount }}</text>
</text>
<view class="repairBtns">
<u-icon name="minus-circle-fill" size="24" @click="delNum(item)"></u-icon>
<text class="repairNum">{{ item.thisNum }}</text>
<u-icon color="#0174F6" name="plus-circle-fill" size="24" @click="addNum(item)"></u-icon>
</view>
</view>
<view class="repairBottom">
<text class="repairDesc">库存:
<text class="repairUnit">{{ item.wares.stock }}</text>
</text>
<text class="repairDesc">已领取:
<text class="repairUnit">{{ item.waresAlreadyCount }}</text>
</text>
<view class="repairBtns"></view>
</view>
</view>
</view>
</view>
<view class="footer">
<text class="label"></text>
<text class="repairNum"></text>
<!-- <view class="submit" @click="toPart">采购</view>-->
<view class="submit" @click="submit">{{isReceive?'通知领料':'通知退料'}}</view>
</view>
</view>
</template>
<script>
import VNavigationBar from "@/components/VNavigationBar.vue";
import request from '@/utils/request';
import {
getJSONData,setJSONData
} from '@/utils/auth'
import {getDictTextByCodeAndValue,createUniqueCodeByHead} from "@/utils/utils";
export default {
components: {VNavigationBar},
data() {
return {
//配件申请单id
twId:'',
//配件列表
wares:[],
//true 领料 false 退料
isReceive:true,
//父组件传入的数据
formData:{},
active: ''
};
},
onLoad(data) {
if(getJSONData("applyWaresForm")){
this.formData = getJSONData("applyWaresForm")
this.isReceive = this.formData.isReceive
this.twId = this.formData.id
this.init()
}
},
computed: {},
methods: {
/**
* 初始化配件数据
*/
init() {
const params = {
twId:this.formData.id
}
request({
url: '/admin-api/repair/twi/list',
method: 'get',
params: params
}).then((res)=>{
res.data.map((item)=>{
if(!item.waresAlreadyCount){
item.waresAlreadyCount = 0
}
if(!item.wares.stock){
item.wares.stock=0
}
if(this.isReceive){
//领料,最大可领取数量为申请数量-已领取数量,同时不能大于库存数量,默认数量就是最大可领取数量
item.maxNum = parseInt(item.waresCount) - parseInt(item.waresAlreadyCount)
if(item.maxNum >item.wares.stock){
item.maxNum = item.wares.stock
}
item.thisNum = item.maxNum
}else{
//退料最大数量为已领取数量最小数量为0,默认数量为0
item.maxNum = item.waresAlreadyCount
item.thisNum = 0
}
})
this.wares = res.data;
})
},
/**
*
*/
addNum(repair) {
if((repair.thisNum+1) > repair.maxNum){
uni.showToast({
title: '超过库存数量或最大申请数量!',
icon: 'none'
})
return
}
this.$set(repair, 'thisNum', repair.thisNum + 1)
const find = this.wares.find(f => f.id == repair.id)
if (find) {
find.thisNum = repair.thisNum
} else {
this.wares.push(JSON.parse(JSON.stringify(repair)))
}
console.log('repair', repair)
},
/**
* 减
*/
delNum(repair) {
if (repair.thisNum == 0) {
//已经等于0了没法再减了
return
}
this.$set(repair, 'thisNum', repair.thisNum - 1)
const find = this.wares.find(f => f.id == repair.id)
if (find) {
find.thisNum = repair.thisNum
} else {
this.wares.push(JSON.parse(JSON.stringify(repair)))
}
},
/**
* 出库
*/
submit() {
this.formData.repairSo = {
soType:this.isReceive?'02':'04',
soNo:createUniqueCodeByHead(this.isReceive?'LL':'TL'),
userId:this.formData.repairId,
userName:this.formData.repairName,
soStatus:this.isReceive?'04':'07'
}
this.formData.repairSois = [...this.wares.map(item =>{
return {
soiType: this.isReceive ? '02' : "04",
goodsId: item.waresId,
goodsCount: item.thisNum,
}
})]
if (this.isReceive){
this.formData.items = [...this.wares.map(item => {
return {
id: item.id,
}
})]
}
request({
url: '/admin-api/repair/tw/pass',
method: 'post',
data:this.formData
}).then((res)=>{
if (res.code === 200){
uni.showToast({
title: '通知成功!',
icon: 'none'
})
setTimeout(()=>{
uni.navigateBack()
},700)
}
})
},
/**
* 跳转采购页面
*/
toPart(){
const formData = this.formData;
formData.items = this.wares;
setJSONData("applyWaresForm",formData)
uni.navigateTo({
url: '/pages-warehouse/inOutWarehouse/part'
})
}
}
}
</script>
<style lang="scss">
.container {
height: 100%;
background-color: #F3F5F7;
display: flex;
flex-direction: column;
}
.search {
padding: 0 40rpx;
background-color: #fff;
& > .searchBox {
height: 84rpx;
background: #F3F5F7;
border-radius: 12rpx 12rpx 12rpx 12rpx;
margin: 0 auto;
padding: 0 30rpx;
font-size: 28rpx;
color: #0174F6;
display: flex;
align-items: center;
}
.searchInput {
flex: 1;
width: 0;
color: #333;
}
}
.tabs {
background-color: #fff;
padding: 30rpx 40rpx;
margin: 0 auto;
display: flex;
align-items: center;
column-gap: 30rpx;
overflow: auto;
.tab-item {
flex-shrink: 0;
padding: 16rpx 30rpx;
font-size: 28rpx;
color: #113A68;
background: #F2F2F7;
border-radius: 30rpx 30rpx 30rpx 30rpx;
&.active {
background: #0174F6;
color: #fff;
}
}
}
.listBox {
padding: 30rpx 32rpx;
flex: 1;
height: 0;
.list {
background-color: #fff;
padding: 0 30rpx;
height: 100%;
overflow: auto;
}
.listItem {
padding: 30rpx 0;
border-bottom: 2rpx solid #DDDDDD;
&:last-child {
border-bottom: none;
}
.repairName {
font-size: 32rpx;
color: #333333;
margin-bottom: 20rpx;
}
.repairBottom {
display: flex;
align-items: center;
justify-content: space-between;
}
.repairDesc {
font-size: 28rpx;
color: #858BA0;
}
.repairUnit {
color: #333333;
}
.repairBtns {
width: 65px;
display: flex;
align-items: center;
column-gap: 10rpx;
}
}
}
.footer {
padding: 14rpx 32rpx;
background-color: #fff;
display: flex;
align-items: center;
.repairNum {
flex: 1;
width: 0;
margin-right: 10rpx;
}
.submit {
width: 208rpx;
height: 72rpx;
background: #0174F6;
border-radius: 38rpx 38rpx 38rpx 38rpx;
text-align: center;
line-height: 72rpx;
font-size: 32rpx;
color: #FFFFFF;
margin-left: 20rpx;
}
}
</style>