坐标拾取器
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

468 lines
9.5 KiB

<template>
<view class="w-upload">
<view class="fileBox" v-if="fileShow">
<view class="filePath" v-for="(j, index1) in fileList" :key="index1">
<view class="text1" @click="wpriven(j.src,'local')">{{ j.name }}</view>
<view class="w-edit" @click="wdelete(index1, fileList, 1)"><text class="w-btn1">x</text></view>
</view>
</view>
<view class="imgList" v-if="imgShow">
<view class="imgItem" v-for="(k, index2) in imgList" :key="index2">
<image class="w-img" :src="baseUrl+k" mode="" @click="wpriven(baseUrl+k,'local')"></image>
<text class="cancel" @click="wdelete(index2, imgList, 2)">x</text>
</view>
<view class="addItem" v-if="showAdd" @click="upLoadImg(1)">+</view>
</view>
<view class="w-drawer" v-if="!imgShow || !fileShow">
<view class="w-setbox" :class="{ wShow: isshow }">
<view class="w-header">
<view class="w-item w-item1" @click="wselect(index)" v-for="(i, index) in selectList" :key="index">{{ i }}</view>
<view class="w-line"></view>
<view class="w-item" @click="wclose">取消</view>
</view>
</view>
</view>
</view>
</template>
<script>
import { WUpload } from '@/components/file-img-upload/upload.js';
import config from '@/config.js';
const baseUrls = config.baseUrl
export default {
props: {
showAdd:{
type: Boolean,
default: true
},
token : {
type: String,
default: ''
},
fileShow: {
type: Boolean,
default: false
},
imgShow: {
type: Boolean,
default: false
},
fileList: {
type: Array,
default: []
},
imgList: {
type: Array,
default: []
},
requestUrl: {
type: String,
default: ''
},
uploadName: {
type: String,
default: 'file'
},
fileType: {
type: String,
default: ''
},
imgType: {
type: String,
default: ''
}
},
name: 'WUpload',
data() {
return {
baseUrl:baseUrls,
isshow: false,
selectList: ['文档', '图片']
};
},
created() {},
methods: {
wclose() {
this.isshow = false;
},
uploadOpen() {
this.isshow = true;
},
wselect(index) {
if (index == 0) {
this.upLoadFile();
} else {
this.upLoadImg();
}
this.isshow = false;
},
wpriven(url,type) {
let that = this;
uni.showLoading({
title: '下载中...',
mask: true
});
that.udownload(url, type)
.then(path => {
uni.hideLoading();
that.uopen(path);
})
.catch(() => {
uni.hideLoading();
uni.showToast({
title: '下载失败',
icon: 'none'
});
});
},
wdelete(index, list, num) {
list.forEach((i, j) => {
if (j == index) {
if (num == 1) {
this.$emit('updateFileList', [j,i]); //返回被删除的文件
} else {
this.$emit('updateImgList', [j,i]); //返回被删除的图片
}
}
});
},
// 下载临时储存 temporary 临时 local 永久
udownload(url, type) {
let that = this;
return new Promise((resolve, reject) => {
uni.downloadFile({
url,
success: ({ statusCode, tempFilePath }) => {
if (statusCode === 200) {
if (type == 'local') {
uni.saveFile({
tempFilePath,
success: ({ savedFilePath }) => that.onCommit(resolve(savedFilePath)),
fail: () => that.errorHandler('下载失败', reject)
});
} else {
that.onCommit(resolve(tempFilePath));
}
}
},
fail: () => that.errorHandler('下载失败', reject)
});
});
},
onCommit(resolve) {
return resolve;
},
errorHandler(errText, reject) {
uni.showToast({
title: errText,
icon: 'none'
});
return reject(errText);
},
// 打开文件
uopen(filePath) {
debugger
let system = uni.getSystemInfoSync().platform;
if (system == 'ios') {
filePath = encodeURI(filePath);
}
uni.openDocument({
showMenu: true,
filePath,
success: res => {
console.log('打开文档成功');
},
fail: res1 => {
uni.getImageInfo({
src: filePath,
success: imgInfo => {
uni.previewImage({
current: filePath,
urls: [filePath]
});
},
fail: err => {
uni.showToast({
title: '不支持该格式',
icon: 'none'
});
return;
}
});
}
});
},
// 文件上传
upLoadFile() {
let that = this;
uni.chooseMessageFile({
type: 'file',
success: function(source) {
if (source.tempFiles[0].size < 1024 * 1024 * 5) {
WUpload(
that.requestUrl,
that.uploadName,
that.token,
{
// token: uni.getStorageSync('token'),
// 看项目接口要求的格式修改关键字
upload_type: that.fileType
},
source
)
.then(res2 => {
if (res2.state == true) {
let Res2 = res2.data;
Res2.name = source.tempFiles[0].name;
that.$emit('fileSuccess', Res2); //返回上传成功的数据
uni.showToast({
title: '上传成功'
});
} else {
uni.showToast({
title: '上传失败',
icon: 'none'
});
}
})
.catch(catchRes => {
console.log(catchRes);
uni.showToast({
title: '上传失败',
icon: 'none'
});
});
} else {
uni.showToast({
title: '文件过大,无法上传',
icon: 'none'
});
}
}
});
},
// 图片上传
upLoadImg(num) {
let that = this;
uni.chooseImage({
count: 1, // 默认9
sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有
sourceType: ['camera', 'album'], // 可以指定来源是相册还是相机,默认二者都有
success: function(source) {
if (source.tempFiles[0].size < 1024 * 1024 * 2) {
uni.getImageInfo({
src: source.tempFilePaths[0],
success(res) {
WUpload(
that.requestUrl,
that.uploadName,
that.token,
{
// token: uni.getStorageSync('token'),
// 根据接口要求修改对应的格式关键字
upload_type: that.imgType
},
source
)
.then(res1 => {
console.log(res1,source,'909090')
if (res1.code == 200) {
let Res = res1.fileName;
// Res.name = source.tempFilePaths[0];
if (num == 1) {
that.$emit('imgSuccess', Res); //返回上传成功的数据
} else {
that.$emit('fileSuccess', Res); //返回上传成功的数据
}
uni.showToast({
title: '上传成功'
});
} else {
uni.showToast({
title: '上传失败',
icon: 'none'
});
}
})
.catch(catchRes => {
console.log(catchRes);
uni.showToast({
title: '上传失败',
icon: 'none'
});
});
},
fail(error) {
console.log(error);
}
});
} else {
uni.showToast({
title: '图片过大,无法上传',
icon: 'none'
});
}
}
});
}
}
};
</script>
<style scoped>
.w-drawer {
box-sizing: border-box;
width: 100%;
height: 100%;
display: flex;
display: -webkit-flex;
flex-direction: column;
}
.w-setbox {
box-sizing: border-box;
position: fixed;
z-index: 1000;
left: 0px;
right: 0px;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.7);
box-shadow: 0px 3px 12px rgba(0, 0, 0, 0.12);
-webkit-transition: all 0.2 ease;
transition: all 0.2 ease;
bottom: -100%;
/* -webkit-transform: scale(1);
transform: scale(1); */
}
.wShow {
box-sizing: border-box;
bottom: 0;
/* transform: scale(0); */
}
.w-header {
box-sizing: border-box;
width: 100%;
background: #ffffff;
line-height: 40px;
position: absolute;
bottom: 0;
border-top-left-radius: 20px;
border-top-right-radius: 20px;
-webkit-transition: all 0.4 ease;
transition: all 0.4 ease;
/* border-bottom: 10rpx solid #ffffff; */
}
.w-line {
width: 100%;
background-color: #f7f8fa;
height: 8px;
}
.w-item {
box-sizing: border-box;
height: 100rpx;
line-height: 100rpx;
width: 100%;
text-align: center;
}
.w-item1:first-child {
border-bottom: 1px solid #ebedf0;
}
.fileBox {
box-sizing: border-box;
margin: 20rpx;
}
.filePath {
box-sizing: border-box;
width: 100%;
/* padding: 10rpx 0; */
display: flex;
/* flex-direction: column; */
justify-content: space-between;
align-items: center;
border-bottom: 1px solid #c0c0c0;
}
.text1 {
flex: 1;
/* width: 100%; */
/* margin: 10rpx 0 20rpx; */
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
padding-left: 10rpx;
/* text-align: center; */
vertical-align: middle;
}
.w-btn1 {
padding: 10rpx;
padding-right: 20rpx;
/* color: #f56c6c; */
font-size: 38rpx;
}
.w-edit {
color: #cccccc;
/* width: 100%; */
display: flex;
justify-content: flex-end;
}
.imgList {
display: flex;
justify-content: flex-start;
flex-wrap: wrap;
padding: 0 10rpx;
}
.imgItem {
margin: 20rpx 10rpx;
position: relative;
width: 160rpx;
height: 160rpx;
border-radius: 5px;
}
.cancel {
position: absolute;
height: 35rpx;
width: 35rpx;
line-height: 28rpx;
font-size: 30rpx;
text-align: center;
vertical-align: middle;
right: 0px;
top: 0px;
background-color: #f56c6c;
color: #ffffff;
z-index: 999;
border-radius: 0 5px 0 0;
}
.w-img {
border-radius: 5px;
width: 160rpx;
height: 160rpx;
}
.addItem {
margin: 20rpx 10rpx;
width: 160rpx;
height: 160rpx;
border: 1px solid #cccccc;
display: flex;
justify-content: center;
align-items: center;
font-size: 50rpx;
color: #999;
border-radius: 5px;
}
</style>