cashier_app/components/my-components/my-reportDamage.vue

345 lines
7.5 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>
<up-popup customStyle="overflow: hidden;" :show="show" round="20" mode="bottom" @close="close" @open="open">
<view class="reportDamage">
<view class="reportDamage_head">
<view class="reportDamage_title">{{title}}</view>
<up-icon name="close-circle-fill" color="#333" size="25" @tap="close"></up-icon>
</view>
<view class="reportDamage_content">
<view class="reportDamage_cell">
<view class="cell_lable">
<up-image v-if="type=='product'" class="thumbnail" radius="10" :show-loading="true" :src="item.coverImg"></up-image>
<view>{{item.conName}}</view>
</view>
<view class="cell_value">
<up-icon name="minus-circle" color="#999" size="25" @tap="minus"></up-icon>
<view class="text">{{vdata.stockNumber}}</view>
<up-icon name="plus-circle-fill" color="#318AFE" size="25" @tap="plus"></up-icon>
</view>
</view>
<view class="reportDamage_cell">
<view class="cell_lable">商品单位</view>
<view class="cell_value"><view>{{item.conUnit}}</view> <up-icon name="arrow-right" color="#999999" size="15"></up-icon></view>
</view>
<view class="reportDamage_cell">
<view class="cell_lable">报损图片</view>
<view class="cell_value file">
<view class="file_img" v-for="(item,index) in vdata.imgUrlList">
<up-image class="file_img_item" :show-loading="true" :src="item"></up-image>
<view class="del" @tap="del(index)">
<up-icon name="trash" color="#fff" size="25" @tap="plus"></up-icon>
</view>
</view>
<view class="file" @tap="chooseAndUploadAvatar()">
<up-icon name="camera-fill" color="#E5E5E5" size="35"></up-icon>
</view>
</view>
</view>
</view>
<view class="reportDamage_footer">
<view class="reportDamage_btn" @tap="affirm">确认</view>
</view>
</view>
</up-popup>
</template>
<script setup>
import {
computed,
ref,
reactive,
onMounted,
watch
} from 'vue';
import { $uploadFile } from '@/http/yskApi/file.js'
import { consumableBreakage , productBreakage} from '@/http/yskApi/breakage.js'
const props = defineProps({
show:{
type: Boolean,
default: false
},
type:{
type: String,
default: ""
},
title:{
type: String,
default: ""
},
item:{
type: Object,
},
})
const emits = defineEmits(['close','open',"affirm"])
const vdata = reactive({
stockNumber: 1,
imgUrlList: [],
})
let show = ref(props.show)
let type = ref(props.type)
let itemData = ref(props.item)
watch(()=>props.show,(newval)=>{
show.value=newval
})
onMounted(() => {
})
function close() {
show.value = false;
vdata.imgUrlList = [];
vdata.stockNumber = 1;
emits('close')
}
/**
* 打开报损弹窗
*/
function open() {
show.value = true;
emits('open')
}
/**
* 报损数量减少
*/
function minus() {
if ( vdata.stockNumber <= 1) {
return;
}
vdata.stockNumber--;
}
/**
* 报损数量增加
*/
function plus() {
vdata.stockNumber++;
}
/**
* 删除报损图片
*/
function del ( index ) {
vdata.imgUrlList.splice(index,1)
}
/**
* 上传报损图片
*/
function chooseAndUploadAvatar () {
if ( vdata.imgUrlList.length >= 6 ) {
uni.showToast({
title:'最多只可以上传六张',
icon:'none'
})
return;
}
// 选择图片
uni.chooseImage({
count: 1, // 默认为1只选择一张图片
sizeType: ['original', 'compressed'], // 图片质量,原图或压缩
sourceType: ['album', 'camera'], // 图片来源,相册或相机
success: (res) => {
let file = res.tempFiles[0];
console.log(res)
$uploadFile(file).then(res => {
console.log(res);
vdata.imgUrlList.push(res.data[0])
}).catch(res=>{
console.log(res);
if(res.errMsg){
uni.showToast({
title:'图片大小超出限制',
icon:'error'
})
}
})
},
fail: chooseImageError => {
// 选择图片失败处理逻辑
console.log('choose image fail:', chooseImageError);
}
});
}
/**
* 确认
*/
function affirm () {
// emits('affirm')
if (vdata.imgUrlList.length <= 0) {
uni.showToast({
title:'请上传报损图片',
icon:'none'
})
return;
}
let params = {
coverImg: vdata.imgUrlList,
}
//商品报损
if ( type.value == 'consumable') {
params.consId = itemData.value.conIn;
params.amount = vdata.stockNumber;
}
consumableBreakage(params).then((res) => {
show.value = false;
vdata.imgUrlList = [];
vdata.stockNumber = 1;
})
}
defineExpose({
close,
open,
affirm
})
</script>
<style lang="scss">
.mask {
background-color: rgba(51, 51, 51, .5);
}
::v-deep .u-popup__content{
// background-color: transparent;
}
.reportDamage{
width: 100%;
display: flex;
flex-direction: column;
.reportDamage_head{
width: 100%;
display: flex;
align-items: center;
justify-content: space-between;
padding: 32rpx;
box-sizing: border-box;
background: #F4F4F4;
.reportDamage_title{
font-weight: bold;
font-size: 32rpx;
color: #333333;
}
}
.reportDamage_content{
display: flex;
flex-direction: column;
background-color: #fff;
.reportDamage_cell{
display: flex;
align-items: center;
justify-content: space-between;
padding: 32rpx;
box-sizing: border-box;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 500;
font-size: 28rpx;
color: #333333;
border-bottom: 2rpx solid #E5E5E5;
.cell_lable{
display: flex;
align-items: center;
flex-shrink: 0;
.thumbnail{
width: 112rpx;
height: 112rpx;
margin-right: 24rpx;
}
::v-deep .u-image,.u-image__loading,.u-image__image{
width: 100%!important;
height: 100%!important;
}
::v-deep uni-image{
width: 112rpx!important;
height: 112rpx!important;
}
}
.cell_value{
display: flex;
align-items: center;
justify-content: flex-end;
flex-wrap: wrap;
.text{
margin-left: 20rpx;
margin-right: 20rpx;
}
.file{
padding: 30rpx;
border-radius: 8rpx 8rpx 8rpx 8rpx;
border: 2rpx solid #E5E5E5;
box-sizing: border-box;
margin-left: 20rpx;
}
.file_img{
width: 120rpx;
height: 120rpx;
margin-left: 20rpx;
margin-bottom: 20rpx;
position: relative;
border-radius: 10rpx;
overflow: hidden;
.del{
width: 100%;
height: 100%;
position: absolute;
top: 0;
left: 0;
background-color: rgba(0, 0, 0, 0.2);
display: flex;
align-items: center;
justify-content: center;
}
.file_img_item{
width: 120rpx;
height: 120rpx;
}
::v-deep .u-image,.u-image__loading,.u-image__image{
width: 100%!important;
height: 100%!important;
}
::v-deep uni-image{
width: 120rpx!important;
height: 120rpx!important;
}
}
}
.cell_value.file{
// flex-direction: row-reverse;
// justify-content: flex-start;
}
}
.reportDamage_cell:last-child{
border-bottom: none;
}
}
.reportDamage_footer{
background-color: #fff;
padding: 32rpx;
padding-bottom: 68rpx;
box-sizing: border-box;
}
.reportDamage_btn{
width: 100%;
height: 80rpx;
line-height: 80rpx;
text-align: center;
background: #318AFE;
border-radius: 40rpx 40rpx 40rpx 40rpx;
font-weight: 500;
font-size: 32rpx;
color: #FFFFFF;
}
}
</style>