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.
239 lines
6.4 KiB
239 lines
6.4 KiB
<template>
|
|
<view>
|
|
<page-head :title="title"></page-head>
|
|
<view class="uni-common-mt">
|
|
<form>
|
|
<view class="uni-list">
|
|
<view class="uni-list-cell">
|
|
<view class="uni-list-cell-left">
|
|
<view class="uni-label">图片来源</view>
|
|
</view>
|
|
<view class="uni-list-cell-right">
|
|
<picker :range="sourceType" @change="sourceTypeChange" :value="sourceTypeIndex" mode="selector">
|
|
<view class="uni-input">{{sourceType[sourceTypeIndex]}}</view>
|
|
</picker>
|
|
</view>
|
|
</view>
|
|
|
|
<view class="uni-list-cell">
|
|
<view class="uni-list-cell-left">
|
|
<view class="uni-label">图片质量</view>
|
|
</view>
|
|
<view class="uni-list-cell-right">
|
|
<picker :range="sizeType" @change="sizeTypeChange" :value="sizeTypeIndex" mode="selector">
|
|
<view class="uni-input">{{sizeType[sizeTypeIndex]}}</view>
|
|
</picker>
|
|
</view>
|
|
</view>
|
|
|
|
<view class="uni-list-cell">
|
|
<view class="uni-list-cell-left">
|
|
<view class="uni-label">数量限制</view>
|
|
</view>
|
|
<view class="uni-list-cell-right">
|
|
<picker :range="count" @change="countChange" mode="selector">
|
|
<view class="uni-input">{{count[countIndex]}}</view>
|
|
</picker>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
|
|
|
|
<view class="uni-list list-pd">
|
|
<view class="uni-list-cell cell-pd">
|
|
<view class="uni-uploader">
|
|
<view class="uni-uploader-head">
|
|
<view class="uni-uploader-title">点击可预览选好的图片</view>
|
|
<view class="uni-uploader-info">{{imageList.length}}/9</view>
|
|
</view>
|
|
<view class="uni-uploader-body">
|
|
<view class="uni-uploader__files">
|
|
<block v-for="(image,index) in imageList" :key="index">
|
|
<view class="uni-uploader__file">
|
|
<image class="uni-uploader__img" :src="image" :data-src="image" @tap="previewImage"></image>
|
|
</view>
|
|
</block>
|
|
<view class="uni-uploader__input-box">
|
|
<view class="uni-uploader__input" @tap="chooseImage"></view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</form>
|
|
</view>
|
|
</view>
|
|
</template>
|
|
<script>
|
|
import permision from "@/common/permission.js"
|
|
var sourceType = [
|
|
['camera'],
|
|
['album'],
|
|
['camera', 'album']
|
|
]
|
|
var sizeType = [
|
|
['compressed'],
|
|
['original'],
|
|
['compressed', 'original']
|
|
]
|
|
export default {
|
|
data() {
|
|
return {
|
|
title: 'choose/previewImage',
|
|
imageList: [],
|
|
sourceTypeIndex: 2,
|
|
sourceType: ['拍照', '相册', '拍照或相册'],
|
|
sizeTypeIndex: 2,
|
|
sizeType: ['压缩', '原图', '压缩或原图'],
|
|
countIndex: 8,
|
|
count: [1, 2, 3, 4, 5, 6, 7, 8, 9]
|
|
}
|
|
},
|
|
onUnload() {
|
|
this.imageList = [],
|
|
this.sourceTypeIndex = 2,
|
|
this.sourceType = ['拍照', '相册', '拍照或相册'],
|
|
this.sizeTypeIndex = 2,
|
|
this.sizeType = ['压缩', '原图', '压缩或原图'],
|
|
this.countIndex = 8;
|
|
},
|
|
methods: {
|
|
sourceTypeChange: function(e) {
|
|
this.sourceTypeIndex = parseInt(e.detail.value)
|
|
},
|
|
sizeTypeChange: function(e) {
|
|
this.sizeTypeIndex = parseInt(e.detail.value)
|
|
},
|
|
countChange: function(e) {
|
|
this.countIndex = e.detail.value;
|
|
},
|
|
chooseImage: async function() {
|
|
// #ifdef APP-PLUS
|
|
// TODO 选择相机或相册时 需要弹出actionsheet,目前无法获得是相机还是相册,在失败回调中处理
|
|
if (this.sourceTypeIndex !== 2) {
|
|
let status = await this.checkPermission();
|
|
if (status !== 1) {
|
|
return;
|
|
}
|
|
}
|
|
// #endif
|
|
|
|
if (this.imageList.length === 9) {
|
|
let isContinue = await this.isFullImg();
|
|
console.log("是否继续?", isContinue);
|
|
if (!isContinue) {
|
|
return;
|
|
}
|
|
}
|
|
uni.chooseImage({
|
|
sourceType: sourceType[this.sourceTypeIndex],
|
|
sizeType: sizeType[this.sizeTypeIndex],
|
|
count: this.imageList.length + this.count[this.countIndex] > 9 ? 9 - this.imageList.length : this.count[this.countIndex],
|
|
success: (res) => {
|
|
this.imageList = this.imageList.concat(res.tempFilePaths);
|
|
},
|
|
fail: (err) => {
|
|
console.log("err: ",err);
|
|
// #ifdef APP-PLUS
|
|
if (err['code'] && err.code !== 0 && this.sourceTypeIndex === 2) {
|
|
this.checkPermission(err.code);
|
|
}
|
|
// #endif
|
|
// #ifdef MP
|
|
if(err.errMsg.indexOf('cancel') !== '-1'){
|
|
return;
|
|
}
|
|
uni.getSetting({
|
|
success: (res) => {
|
|
let authStatus = false;
|
|
switch (this.sourceTypeIndex) {
|
|
case 0:
|
|
authStatus = res.authSetting['scope.camera'];
|
|
break;
|
|
case 1:
|
|
authStatus = res.authSetting['scope.album'];
|
|
break;
|
|
case 2:
|
|
authStatus = res.authSetting['scope.album'] && res.authSetting['scope.camera'];
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
if (!authStatus) {
|
|
uni.showModal({
|
|
title: '授权失败',
|
|
content: 'Hello uni-app需要从您的相机或相册获取图片,请在设置界面打开相关权限',
|
|
success: (res) => {
|
|
if (res.confirm) {
|
|
uni.openSetting()
|
|
}
|
|
}
|
|
})
|
|
}
|
|
}
|
|
})
|
|
// #endif
|
|
}
|
|
})
|
|
},
|
|
isFullImg: function() {
|
|
return new Promise((res) => {
|
|
uni.showModal({
|
|
content: "已经有9张图片了,是否清空现有图片?",
|
|
success: (e) => {
|
|
if (e.confirm) {
|
|
this.imageList = [];
|
|
res(true);
|
|
} else {
|
|
res(false)
|
|
}
|
|
},
|
|
fail: () => {
|
|
res(false)
|
|
}
|
|
})
|
|
})
|
|
},
|
|
previewImage: function(e) {
|
|
var current = e.target.dataset.src
|
|
uni.previewImage({
|
|
current: current,
|
|
urls: this.imageList
|
|
})
|
|
},
|
|
async checkPermission(code) {
|
|
let type = code ? code - 1 : this.sourceTypeIndex;
|
|
let status = permision.isIOS ? await permision.requestIOS(sourceType[type][0]) :
|
|
await permision.requestAndroid(type === 0 ? 'android.permission.CAMERA' :
|
|
'android.permission.READ_EXTERNAL_STORAGE');
|
|
|
|
if (status === null || status === 1) {
|
|
status = 1;
|
|
} else {
|
|
uni.showModal({
|
|
content: "没有开启权限",
|
|
confirmText: "设置",
|
|
success: function(res) {
|
|
if (res.confirm) {
|
|
permision.gotoAppSetting();
|
|
}
|
|
}
|
|
})
|
|
}
|
|
|
|
return status;
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style>
|
|
.cell-pd {
|
|
padding: 22rpx 30rpx;
|
|
}
|
|
|
|
.list-pd {
|
|
margin-top: 50rpx;
|
|
}
|
|
</style>
|
|
|