html
<template>
<view class="container">
<view class="text f-32 color-3 d-flex a-center j-between">
<view>图片</view>
<view class="f-28">{{goodspic.length}}/9</view>
</view>
<view class="pictures d-flex">
<view class="ul d-flex" v-if="goodspic.length != 0">
<view class="li" v-for="(item,index) in goodspic" :key="index">
<image src="https://web-assets.dcloud.net.cn/unidoc/zh/shuijiao.jpg" mode=""></image>
<view class="icon-del-box" @click="handleDel(item,index)">
<view class="icon-del"></view>
<view class="icon-del rotate"></view>
</view>
</view>
</view>
<view class="pictures_wrapper" @click="handlePictures" v-if="goodspic.length < 9">
<uni-icons type="plusempty" color="#707070"></uni-icons>
</view>
</view>
</view>
</template>
js
<script>
export default {
data() {
return {
picGoods: [],
goodspic: [],
UploadUrl: [],
thumbnail: '',
}
},
methods: {
// 上传图片
handlePictures(){
let token = '21839asd1489s490asdsad14sd014d01AS4'; // 仅为示例,非真实的
let url = 'https://www.example.com/upload'; // 仅为示例,非真实的接口地址
let that = this;
uni.chooseImage({
count: 9,
sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
sourceType: ['album','camera'], //从相册选择
success: (res) => {
let arr = res.tempFilePaths
let i = 0;
let length = arr.length;
let upload = () => {
uni.uploadFile({
url : url,
header: {
'X-Token': token //自定义请求头信息
},
filePath: arr[i],
name: 'pic',
success: (uploadFileRes) => {
//图片显示赋值
const back = JSON.parse(uploadFileRes.data);
//图片显示赋值
let backArr = back.data.pic;
if(that.thumbnail==''){ //缩略图
that.thumbnail = backArr;
}else{
that.thumbnail = that.thumbnail +";" +backArr;
}
that.picGoods.push(backArr)
console.log('picGoods',picGoods)
let detailUrl = that.UploadUrl.substr(0, that.UploadUrl.length - 1) + back.data.pic;
that.goodspic.push(detailUrl)
console.log('goodspic',goodspic)
//如果还有照片,继续上传
i++;
if (i < length) {
upload();
}
},
fail:(err)=>{
console.log(err)
}
});
};
upload();
},
error:(err)=>{
console.log('选择图片错误', err)
}
});
},
// 删除
handleDel(val,idx){
this.goodspic.splice(idx, 1)
},
}
}
</script>
css
<style scoped lang="less">
.f-32{
font-size: 32rpx;
}
.color-3{
color: #333;
}
.d-flex{
display: flex;
}
.a-center{
align-items: center;
}
.j-between{
justify-content: space-between;
}
.container{
padding: 40rpx 32rpx;
.text{
padding-bottom: 30rpx;
}
.pictures{
flex-wrap: wrap;
.pictures_wrapper{
width: 160rpx;
height: 160rpx;
border-radius: 8rpx;
border: 1px solid #DDDDDD;
background-color: #F5F5F5;
display: flex;
align-items: center;
justify-content: center;
}
.ul{
margin-left: 20rpx;
}
.li{
width: 160rpx;
height: 160rpx;
border-radius: 8rpx;
overflow: hidden;
position: relative;
margin-right: 80rpx;
margin-bottom: 20rpx;
image{
width: 100%;
height: 100%;
}
.icon-del-box{
display: flex;
align-items: center;
justify-content: center;
position: absolute;
top: 0;
right: 0;
height: 52rpx;
width: 52rpx;
border-radius: 50%;
background-color: rgba(0, 0, 0, 0.5);
z-index: 2;
transform: rotate(-45deg);
.icon-del{
width: 30rpx;
height: 4rpx;
background-color: #fff;
border-radius: 4rpx;
}
.rotate {
position: absolute;
transform: rotate(90deg);
}
}
}
}
}
</style>