an_xiao/police_uniapp/pagesD/uploadpictures/uploadpictures.vue

339 lines
8.8 KiB
Vue
Raw Normal View History

2024-07-25 16:03:08 +08:00
<template>
<view class="hidden">
<view class="hiddenItem">
<u--form labelWidth="150rpx" :model="dataUser" ref="uForm" labelAlign="right">
<u-form-item label="活动名称:" prop="names" borderBottom>
<u--input v-model="dataUser.names" placeholder="请输入活动名称"></u--input>
</u-form-item>
<u-form-item label="活动介绍:" prop="comment" borderBottom>
<u--textarea :maxlength="-1" v-model="dataUser.comment" placeholder="请输入内容"
autoHeight></u--textarea>
</u-form-item>
<u-form-item label="类别:" prop="comment" borderBottom @click="show = true">
<u-action-sheet @select="radioChanges" @close="show = false" closeOnClickAction="true"
:actions="radiolist" :show="show"></u-action-sheet>
<view class="dataUserunit" :style="{color: dataUser.type ||'#c2cad2'}" v-model="dataUser.type">
{{dataUser.type || "请输入用户类型"}}
</view>
</u-form-item>
<u-form-item label="上传图片:" borderBottom @click="chooseImage">
<view style="color: red">点击上传图片最多只能上传9张</view>
</u-form-item>
</u--form>
</view>
<view class="drag-container">
<view class="darg-item item-transition" v-for="(item, index) in dragImgList" :mark:index="index"
:mark:key="item.key" :key="index"
:style="{ transform: `translate(${index === currentIndex ? tranX : item.tranX + 'px'},${index === currentIndex ? tranY : item.tranY + 'px'})` }">
<image class="darg-item-img" :src="item.src" mode="aspectFit"></image>
<text class="drag-item-delete" :key="item.key" @click="deleteImg">x</text>
</view>
</view>
<view class="uploadbutton"
:style="{ transform: `translate(${uploadPosition.tranX + 'px'},${uploadPosition.tranY + 'px'})` }">
<button :hidden="!dragImgList.length" @click="uploadImage" size="mini" type="primary">提交申请</button>
</view>
</view>
</template>
<script>
import {
mapGetters
} from 'vuex';
import {
timestampFormatTime
} from '@/utils/index.js';
import {
schoolnewsdata
} from '@/api/login.js';
export default {
data() {
return {
dataUser: {
names: '',
comment: '',
type: ''
},
show: false,
radiolist: [{
name: '应急演练'
},
{
name: '法治宣传'
},
{
name: '校园风采'
}
],
baseURl: 'https://www.lonsungsh.com:8083',
dragImgList: [], // 图片列表 { src: string, key: number, tranX: number, tranY: number }[]
imageID: [], //上传图片的id集合
imageUrlsDate: [], //上传图片url的合集
uploadPosition: {
// upload上传图标位移距离
tranX: 0,
tranY: 0
},
ITEM_SIZE: 128, // 图片大小 单位px
// containerRes: {}, // 拖拽容器属性
currentKey: -1, // 正在拖拽图片的key
currentIndex: -1, // 正在拖拽图片的index
tranX: 0, // 正在拖拽图片移动的x距离
tranY: 0, // 正在拖拽图片移动的y距离
};
},
onLoad() {},
computed: {
// 拿取vuex数据
...mapGetters({
userInfo: 'users/getLoginInfo'
})
},
methods: {
chooseImage() {
console.log(1111);
// 多张图片上传
var that = this;
if (that.dragImgList.length >= 9) {
uni.showToast({
title: '最大限制9张',
timeout: 6000
});
console.log(222);
} else {
console.log(333);
uni.chooseImage({
count: 9,
sizeType: ['original', 'compressed'],
mediaType: ['image', 'video'],
sourceType: ['album', 'camera'],
maxDuration: 30,
camera: 'back',
success: async (res) => {
if (!res) {
return
}
const imgs = res.tempFiles
if (!imgs || imgs.length <= 0) {
return
}
const picUploadData = {
creator: that.userInfo.name,
business: 'school.news',
type: 'image',
deviceid: that.userInfo.id,
createtime: timestampFormatTime(),
description: '2222',
comment: '图片描述'
};
for (var i = 0; i < imgs.length; i++) {
const item = imgs[i];
let listParams = {
tranX: that.ITEM_SIZE * ((that.dragImgList.length + i) % 3),
tranY: Math.floor((that.dragImgList.length + i) / 3) * that.ITEM_SIZE,
key: that.dragImgList.length + i
}
wx.uploadFile({
url: that.baseURl + '/mdev/picture/upload', //这里就是保存到服务器的接口
filePath: item.path,
timeout: 5000,
// 参数名和接口一致
name: 'file',
header: {
'Content-Type': 'multipart/form-data;charset=utf-8'
},
formData: {
jsondata: JSON.stringify(picUploadData)
},
success(res) {
const resImage = JSON.parse(res.data)?.data;
if (resImage) {
listParams.src = that.baseURl + resImage.uri,
that.dragImgList.push(listParams);
if (!that.imageID.includes(resImage.id)) {
that.imageID.push(resImage.id);
}
if (!that.imageUrlsDate.includes(resImage.uri)) {
that.imageUrlsDate.push(resImage.uri);
}
that.setUploaPosition(that.dragImgList.length);
}
},
fail(err) {
uni.showToast({
title: err,
timeout: 6000
});
}
})
}
},
fail(res) {
uni.showToast({
title: res,
timeout: 6000
});
}
});
}
},
// 修改上传图片位置
setUploaPosition(listLength) {
const uploadPositions = {
tranX: (listLength % 3) * this.ITEM_SIZE,
tranY: Math.floor(listLength / 3) * this.ITEM_SIZE
};
this.uploadPosition = {
tranX: uploadPositions.tranX,
tranY: uploadPositions.tranY
};
},
/**
* 删除图片
*/
deleteImg(e) {
var that = this;
const keyDelete = e.mark.key;
const list = that.dragImgList.filter((item) => item.key !== keyDelete);
let imagesLIst = that.imageID.filter((value, index, arr) => index !== keyDelete);
that.imageID = imagesLIst;
let UrlsDateLIst = that.imageUrlsDate.filter((value, index, arr) => index !== keyDelete);
that.imageUrlsDate = UrlsDateLIst;
console.log(that.imageUrlsDate);
list.forEach((item) => item.key > keyDelete && item.key--);
that.getListPosition(list);
that.setUploaPosition(list.length);
},
/**
* 修改位置
*/
getListPosition(list) {
const dragImgLists = list.map((item) => {
item.tranX = this.ITEM_SIZE * (item.key % 3);
item.tranY = Math.floor(item.key / 3) * this.ITEM_SIZE;
return item;
});
this.dragImgList = dragImgLists;
},
// 提交
uploadImage() {
var that = this;
const schoolNews = {
newsId: `${Math.round(Math.random() * 100000000)}`,
creator: that.userInfo.name,
timestamp: timestampFormatTime(),
title: that.dataUser.names,
comment: that.dataUser.comment,
images: JSON.stringify(that.imageID),
imageUrls: JSON.stringify(that.imageUrlsDate),
brigade: that.userInfo.brigade,
borough: that.userInfo.borough,
detachment: '',
station: that.userInfo.station,
type: that.dataUser.type
};
schoolnewsdata(schoolNews)
.then((res) => {
uni.showLoading({
title: '正在上传中....'
});
setTimeout(() => {
uni.hideLoading();
uni.showToast({
title: '上传成功'
});
setTimeout(() => {
uni.switchTab({
url: `/pages/securityCheck/securityCheck`
});
}, 900);
}, 1000);
})
.catch((error) => {
console.log(error);
});
},
radioChanges(val) {
this.dataUser.type = val.name
}
}
};
</script>
<style lang="scss">
.hidden {
height: 95vh;
display: flex;
flex-direction: column;
.imageItem {
margin-left: 20rpx;
}
.drag-container {
position: relative;
width: 300px;
// height: 430px;
}
.item-transition {
transition: transform 0.1s;
}
.darg-item {
position: absolute;
top: 0;
left: 0;
width: 123px;
height: 123px;
}
.darg-item-img {
width: 100%;
height: 100%;
// border: 1px solid red;
}
.drag-item-delete {
position: absolute;
top: 19px;
right: -1px;
width: 45rpx;
height: 33rpx;
background-color: rgba(0, 0, 0, 0.5);
font-size: 34rpx;
line-height: 25rpx;
text-align: center;
border-radius: 0 0 0 114rpx;
color: #fff;
}
.drag-item-upload {
background-color: burlywood;
font-size: 200rpx;
text-align: center;
color: white;
line-height: 160rpx;
}
.uploadbutton {
width: 224rpx;
height: 100rpx;
text-align: center;
line-height: 50px;
overflow: hidden;
margin-top: 49px;
}
.dataUserunit {
padding-left: 16rpx;
}
}
</style>