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