280 lines
6.8 KiB
Vue
280 lines
6.8 KiB
Vue
<template>
|
|
<up-popup :show="popShow" @close="close" @open="open" mode="center" :round="9">
|
|
<view class="u-p-32 box u-font-28">
|
|
<view class="u-flex u-relative u-row-center">
|
|
<view class="u-font-32">修改库存</view>
|
|
<view class="u-absolute close">
|
|
<up-icon @click="close" :size="16" color="#000" name="close-circle-fill"></up-icon>
|
|
</view>
|
|
</view>
|
|
<view class="u-m-t-48">
|
|
<up-form labelPosition="left" :model="data" :rules="rules" ref="refForm" errorType="toast">
|
|
<view>商品名称</view>
|
|
<view class="u-m-t-16" v-if="isSku">{{data.name}}</view>
|
|
<view class="u-m-t-38">
|
|
<template v-if="!isSku">
|
|
<view class="u-m-b-32" >
|
|
<view class="u-flex u-row-between">
|
|
<view>{{data.name}}</view>
|
|
<view class="u-font-24">
|
|
<text>变动数量:</text>
|
|
<text class="number">{{data.stockNumber-data._stockNumber}}</text>
|
|
</view>
|
|
</view>
|
|
<view class="u-m-t-16">
|
|
<up-form-item prop="stockNumber">
|
|
<up-input v-model="data.stockNumber" type="number">
|
|
<template #suffix>
|
|
<view>{{data.unitName||''}}</view>
|
|
</template>
|
|
</up-input>
|
|
</up-form-item>
|
|
|
|
</view>
|
|
</view>
|
|
<view class="u-m-b-32">
|
|
<view class="u-flex u-row-between">
|
|
<view>备注</view>
|
|
</view>
|
|
<view class="u-m-t-16">
|
|
<up-textarea :height="42" v-model="form.note" placeholder="请输入备注"></up-textarea>
|
|
</view>
|
|
</view>
|
|
</template>
|
|
<template v-else>
|
|
<scroll-view scroll-y="true" style="max-height: 30vh;">
|
|
<view class="u-m-b-32" v-for="(item,index) in data.skuList" :key="index">
|
|
<view class="u-flex u-row-between">
|
|
<view>{{item.name}}</view>
|
|
<view class="u-font-24">
|
|
<text>变动数量:</text>
|
|
<text class="number">{{item.stockNumber-item._stockNumber}}</text>
|
|
</view>
|
|
</view>
|
|
<view class="u-m-t-16">
|
|
<up-input v-model="item.stockNumber">
|
|
<template #suffix>
|
|
<view>{{data.unitName||''}}</view>
|
|
</template>
|
|
</up-input>
|
|
</view>
|
|
</view>
|
|
<view class="u-m-b-32">
|
|
<view class="u-flex u-row-between">
|
|
<view>备注</view>
|
|
</view>
|
|
<view class="u-m-t-16">
|
|
<up-textarea :height="42" v-model="form.note" placeholder="请输入备注"></up-textarea>
|
|
</view>
|
|
</view>
|
|
</scroll-view>
|
|
</template>
|
|
|
|
<view class="u-m-t-60">
|
|
<my-button type="primary" shape="circle" @tap="save">
|
|
<view class="u-font-32">
|
|
保存
|
|
</view>
|
|
</my-button>
|
|
<view class="u-m-t-30">
|
|
<template v-if="!recoders.show">
|
|
<view class="color-999 u-font-24 u-flex u-row-center u-col-center">
|
|
<view class="u-flex" @click="changeShowRecoders(true)">
|
|
<view class="u-m-r-6">查看记录</view>
|
|
<up-icon name="arrow-down" :size="12"></up-icon>
|
|
</view>
|
|
</view>
|
|
</template>
|
|
|
|
<template v-else>
|
|
<scroll-view scroll-y="true" style="max-height: 30vh;">
|
|
<my-step :list="recoders.list"></my-step>
|
|
</scroll-view>
|
|
<view class="color-999 u-font-24 u-flex u-row-center u-col-center">
|
|
<!-- <view class="u-flex" @click="changeShowRecoders(false)"> -->
|
|
<view class="u-flex" @click="toRecodes">
|
|
<view class="u-m-r-6">全部记录</view>
|
|
<up-icon name="arrow-right" :size="12"></up-icon>
|
|
</view>
|
|
</view>
|
|
</template>
|
|
|
|
</view>
|
|
|
|
</view>
|
|
</view>
|
|
</up-form>
|
|
</view>
|
|
</view>
|
|
</up-popup>
|
|
</template>
|
|
|
|
<script setup>
|
|
import {
|
|
reactive,
|
|
ref,
|
|
watch,
|
|
onMounted,
|
|
computed
|
|
} from 'vue';
|
|
import {
|
|
returnSkuSnap,
|
|
returnTypeEnum,
|
|
returnCategory
|
|
} from '@/pageProduct/util.js'
|
|
import {
|
|
$tbShopUnit,$getProductStockDetail
|
|
} from '@/http/yskApi/goods.js'
|
|
import go from '@/commons/utils/go.js'
|
|
const refForm = ref(null)
|
|
const props = defineProps({
|
|
show: {
|
|
type: Boolean,
|
|
default: false
|
|
},
|
|
category: {
|
|
type: Array,
|
|
default: () => []
|
|
},
|
|
goods: {
|
|
type: Object,
|
|
default: () => {
|
|
return{
|
|
id:'',
|
|
skuList: []
|
|
}
|
|
}
|
|
}
|
|
})
|
|
const rules =reactive({
|
|
'stockNumber': [{
|
|
type: 'number',
|
|
required: true,
|
|
message: '请填写库存',
|
|
trigger: ['blur', 'change']
|
|
}
|
|
]
|
|
})
|
|
function toRecodes(){
|
|
console.log(props.goods.id);
|
|
go.to('PAGES_PRODUCT_INVOICING_LIST',{
|
|
productId:props.goods.id
|
|
})
|
|
}
|
|
function changeShowRecoders(show) {
|
|
recoders.show = show
|
|
}
|
|
const recoders = reactive({
|
|
list: [],
|
|
show: true,
|
|
active: 0
|
|
})
|
|
|
|
const data = ref({
|
|
name:''
|
|
})
|
|
const emits = defineEmits(['update:show', 'save'])
|
|
const form = reactive({
|
|
note: ''
|
|
})
|
|
let popShow = ref(props.show)
|
|
watch(() => props.show, (newval) => {
|
|
popShow.value = newval
|
|
if (newval) {
|
|
data.value = props.goods
|
|
getProductStockDetail()
|
|
}
|
|
})
|
|
async function getProductStockDetail(){
|
|
const {content}=await $getProductStockDetail({
|
|
page:0,
|
|
size:2,
|
|
productId:props.goods.id,
|
|
column:'/api/tbProductStockDetail/stock/count',
|
|
shopId:uni.getStorageSync('shopId'),
|
|
createdAt:[]
|
|
})
|
|
console.log(content);
|
|
recoders.list=content.map(v=>{
|
|
return {
|
|
...v,
|
|
title:v.createdAt,
|
|
content:v.type+':'+Math.abs(v.stockNumber)
|
|
}
|
|
})
|
|
}
|
|
const isSku = computed(() => {
|
|
// return data.value.typeEnum == '多规格'
|
|
return false
|
|
})
|
|
watch(() => popShow.value, (newval) => {
|
|
emits('update:show', newval)
|
|
})
|
|
|
|
function close() {
|
|
popShow.value = false
|
|
form.note=''
|
|
}
|
|
|
|
function open() {
|
|
|
|
}
|
|
function save() {
|
|
refForm.value.validate().then(valid => {
|
|
if (valid) {
|
|
emits('save', {
|
|
...data.value,
|
|
})
|
|
} else {
|
|
console.log(err);
|
|
}
|
|
}).catch(() => {
|
|
// 处理验证错误
|
|
});
|
|
}
|
|
// function save() {
|
|
// const skuSnap = returnSkuSnap(data.value)
|
|
// let typeEnum = returnTypeEnum(data.value.typeEnum)
|
|
// let lowPrice = undefined
|
|
// typeEnum = typeEnum ? typeEnum : 'normal'
|
|
// const findCategory = returnCategory(data.value.categoryName, props.category)
|
|
// console.log(typeEnum);
|
|
// console.log(findCategory);
|
|
// const categoryId = findCategory ? findCategory.id : ''
|
|
// if (typeEnum == 'normal') {
|
|
// // 单规格
|
|
// lowPrice = data.value.skuList[0].salePrice
|
|
// }
|
|
// emits('save', {
|
|
// ...data.value,
|
|
// lowPrice,
|
|
// typeEnum,
|
|
// images: data.value.images ? data.value.images : [data.value.coverImg],
|
|
// categoryId,
|
|
// skuSnap: JSON.stringify(skuSnap)
|
|
// })
|
|
// }
|
|
|
|
onMounted(()=>{
|
|
// #ifndef H5
|
|
refForm.value.setRules(rules)
|
|
// #endif
|
|
})
|
|
</script>
|
|
|
|
<style lang="scss" scoped>
|
|
.box {
|
|
width: 556rpx;
|
|
border-radius: 18rpx 18rpx 18rpx 18rpx;
|
|
box-sizing: border-box;
|
|
}
|
|
|
|
.close {
|
|
position: absolute;
|
|
right: 0;
|
|
}
|
|
|
|
.number {
|
|
color: #F0465B;
|
|
}
|
|
</style> |