lanan-repair-app/pages-warehouse/inOutWarehouse/inOutWarehouse.vue
2024-10-21 21:04:47 +08:00

248 lines
5.8 KiB
Vue

<template>
<view class="container">
<VNavigationBar background-color="#fff" title="配件出库" title-color="#333"></VNavigationBar>
<view class="search">
<view class="searchBox">
<input class="searchInput" placeholder="查询配件名称" placeholder-style="font-size: 28rpx" type="text">
<text>搜索</text>
</view>
</view>
<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 repairList" :key="index" class="listItem">
<view class="repairName">{{ item.name }}</view>
<view class="repairBottom">
<text class="repairDesc">单位:
<text class="repairUnit">{{ item.unit }}</text>
</text>
<view class="repairBtns">
<u-icon name="minus-circle-fill" size="24" @click="delNum(item)"></u-icon>
<text class="repairNum">{{ item.num }}</text>
<u-icon color="#0174F6" name="plus-circle-fill" size="24" @click="addNum(item)"></u-icon>
</view>
</view>
</view>
</view>
</view>
<view class="footer">
<text class="label">共选择:</text>
<text class="repairNum">{{ repairCount }}个配件</text>
<view class="submit" @click="submit">确认出库</view>
</view>
</view>
</template>
<script>
import VNavigationBar from "@/components/VNavigationBar.vue";
export default {
components: {VNavigationBar},
onLoad() {
this.init()
},
data() {
return {
tabs: [
{name: '全部', value: ''},
{name: '机油', value: '1'},
{name: '机油', value: '2'},
{name: '机油', value: '3'},
{name: '机油', value: '4'},
{name: '机油', value: '5'},
],
repairList: [],
selectedRepairList: [
{name: '炫驰全合成机油S7 4L/ALL', num: 3, unit: '桶', id: 3}
],
active: ''
};
},
computed: {
repairCount() {
return this.selectedRepairList.reduce((val, item) => {
return item.num + val
}, 0)
}
},
methods: {
init() {
// 接口返回
const result = [{name: '炫驰全合成机油S7 4L/ALL', num: 0, unit: '桶', id: 1},
{name: '炫驰全合成机油S7 4L/ALL', num: 0, unit: '桶', id: 2},
{name: '炫驰全合成机油S7 4L/ALL', num: 0, unit: '桶', id: 3},
{name: '炫驰全合成机油S7 4L/ALL', num: 0, unit: '桶', id: 4},
{name: '炫驰全合成机油S7 4L/ALL', num: 0, unit: '桶', id: 5}]
// 初始化数据
this.repairList = result.map(m => {
if (this.selectedRepairList && this.selectedRepairList.length > 0) {
const find = this.selectedRepairList.find(f => f.id === m.id)
if (find) {
m.num = find.num
}
}
return m
})
},
addNum(repair) {
this.$set(repair, 'num', repair.num + 1)
const find = this.selectedRepairList.find(f => f.id === repair.id)
if (find) {
find.num = repair.num
} else {
this.selectedRepairList.push(JSON.parse(JSON.stringify(repair)))
}
console.log('repair', repair)
},
delNum(repair) {
if (repair.num <= 0) {
return
}
this.$set(repair, 'num', repair.num - 1)
const findIndex = this.selectedRepairList.findIndex(f => f.id === repair.id)
if (findIndex > -1 && repair.num <= 0) {
this.selectedRepairList.splice(findIndex, 1)
} else if (repair.num > 0) {
this.$set(this.selectedRepairList[findIndex], 'num', repair.num)
}
},
submit() {
console.log('this.selectedRepairList', this.selectedRepairList)
}
}
}
</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 {
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;
}
}
</style>