| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239 | <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>
 |