新增图片选择组件
parent
5c749cca9f
commit
7d2af0d211
@ -0,0 +1,175 @@
|
||||
<template>
|
||||
<view class="photoList">
|
||||
<view class="itemBox photoBox" v-for="(img, index) in localValue" :key="index">
|
||||
<view class="closeBtn" @click="deleteImg(index)">
|
||||
<image class="img" src="../../../static/images/iconCloseGray.svg" mode="scaleToFill"></image>
|
||||
</view>
|
||||
<image class="img" :src="img" mode="aspectFit" @click="showScreenImg(index)"></image>
|
||||
</view>
|
||||
<view class="itemBox chooseBtn" @click="chooseImg">
|
||||
<view class="inner">
|
||||
<image class="img" src="../../../static/images/upload-pic-icon.svg" mode="scaleToFill"></image>
|
||||
<text class="desc">添加照片</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
|
||||
import {session} from "@/store/modules/session";
|
||||
import {url} from "@/utils/url";
|
||||
|
||||
export default {
|
||||
name:"ljChooseImg",
|
||||
props: {
|
||||
imgList: {
|
||||
type: Array,
|
||||
default () {
|
||||
return []
|
||||
}
|
||||
},
|
||||
},
|
||||
data(){
|
||||
return{
|
||||
localValue:this.imgList
|
||||
}
|
||||
},
|
||||
methods:{
|
||||
deleteImg(index : any){
|
||||
this.localValue.splice(index, 1);
|
||||
},
|
||||
chooseImg(){
|
||||
uni.chooseImage({
|
||||
count: 9,
|
||||
sourceType: ['album', 'camera'],
|
||||
success: (res) => {
|
||||
let tempFilePaths: any = res.tempFilePaths;
|
||||
tempFilePaths.map((item) => {
|
||||
uni.uploadFile({
|
||||
url: "http://192.168.202.34:30000/prod-api/file/upload",
|
||||
fileType: 'image',
|
||||
filePath: item,
|
||||
header: {
|
||||
Authorization: 'Bearer ' + session.user?.access_token,
|
||||
},
|
||||
name: 'file',
|
||||
success: (res) => {
|
||||
uni.hideLoading();
|
||||
if (!res.data) {
|
||||
return;
|
||||
}
|
||||
let data = JSON.parse(res.data);
|
||||
this.localValue = [...this.localValue, data.data.url];
|
||||
uni.hideLoading();
|
||||
},
|
||||
fail: (err) => {
|
||||
console.log(err);
|
||||
uni.showToast({
|
||||
title:"图片上传失败!",
|
||||
icon:"none"
|
||||
})
|
||||
uni.hideLoading();
|
||||
},
|
||||
});
|
||||
});
|
||||
},
|
||||
});
|
||||
},
|
||||
showScreenImg(index : any){
|
||||
uni.previewImage({
|
||||
current: index,
|
||||
urls: this.localValue,
|
||||
loop: true
|
||||
});
|
||||
}
|
||||
|
||||
},
|
||||
watch: {
|
||||
localValue(newVal) {
|
||||
this.$emit('update:imgList', newVal);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
|
||||
.photoList {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
padding-top: 12rpx;
|
||||
|
||||
.chooseBtn {
|
||||
width: 202rpx;
|
||||
height: 202rpx;
|
||||
background: #fafafa;
|
||||
border-radius: 12rpx;
|
||||
border: 2rpx dashed #e2e2e2;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
|
||||
.inner {
|
||||
text-align: center;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.desc {
|
||||
font-size: 28rpx;
|
||||
font-weight: 400;
|
||||
color: #24252a;
|
||||
line-height: 40rpx;
|
||||
}
|
||||
|
||||
.img {
|
||||
width: 50rpx;
|
||||
height: 50rpx;
|
||||
margin-bottom: 6rpx;
|
||||
}
|
||||
}
|
||||
|
||||
.photoBox {
|
||||
width: 202rpx;
|
||||
height: 202rpx;
|
||||
background: #fafafa;
|
||||
border-radius: 12rpx;
|
||||
position: relative;
|
||||
|
||||
.closeBtn {
|
||||
position: absolute;
|
||||
top: -12rpx;
|
||||
right: -12rpx;
|
||||
z-index: 2;
|
||||
width: 36rpx;
|
||||
height: 36rpx;
|
||||
|
||||
.img {
|
||||
width: 36rpx;
|
||||
height: 36rpx;
|
||||
}
|
||||
}
|
||||
|
||||
.img {
|
||||
width: 202rpx;
|
||||
height: 202rpx;
|
||||
border-radius: 12rpx;
|
||||
}
|
||||
}
|
||||
|
||||
.itemBox {
|
||||
flex: 0 0 202rpx;
|
||||
margin-right: 10rpx;
|
||||
|
||||
&:last-child {
|
||||
margin-right: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
Loading…
Reference in New Issue