123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297 |
- <template>
- <view class="upload-image">
- <view class="pull-left" :class="itemClass" v-for="(item, index) in value" :key="item.url">
- <view class="imgwarp">
- <view style="margin-bottom: 100%;" class="text-center">
- <!-- <u-loading-page v-if="item.loading" font-size="28" :loading="true"></u-loading-page> -->
-
- <view style="margin-top: 20px;" v-if="item.loading" class="">
- <u-loading-icon ></u-loading-icon>
- </view>
-
- <view class="img-square-warp" v-else @click="clickImg(index)" style="position: absolute;top: 0;right: 0;left: 0;bottom: 0;">
- <image :src="item.type=='image' ? item.url+'?x-oss-process=image/resize,m_fill,h_200,w_200,limit_0' : item.video_img" mode="widthFix" class="img-max img-square"/>
- </view>
- </view>
- <span v-if="showRemove" class="img-remove" @click="remove(index)"></span>
- </view>
- </view>
- <view class="pull-left" :class="itemClass">
- <view class="imgwarp ui-flex ui-flex-align-center ui-flex-center" v-if="max > value.length" @click="choose()">
- <u-icon name="camera-fill" size="48" ></u-icon>
- </view>
- </view>
-
- <u-popup :show="showPopup" mode="bottom" @close="showPopup = false">
- <view class="ui-flex-row u-border-bottom">
- <view class="ui-flex-1 ui-p f12 text-center u-border-right">照片</view>
- <!-- <view class="ui-flex-1 ui-p f12 text-center" v-if="chooseVideo">视频</view> -->
- </view>
- <view class="ui-flex-row">
- <view class="ui-flex-1 ui-p" @click="choose('image', 'camera')">
- <u-icon label="拍摄照片" size="28px" space="7px" labelSize="12px" labelPos="bottom" name="camera"></u-icon>
- </view>
- <view class="ui-flex-1 ui-p u-border-right" @click="choose('image', 'album')">
- <u-icon label="选择照片" size="28px" space="7px" labelSize="12px" labelPos="bottom" name="photo"></u-icon>
- </view>
- <!-- <view class="ui-flex-1 ui-p" @click="choose('video', 'camera')" v-if="chooseVideo">
- <u-icon label="拍摄视频" size="28px" space="7px" labelSize="12px" labelPos="bottom" name="play-circle"></u-icon>
- </view>
- <view class="ui-flex-1 ui-p" @click="choose('video', 'album')" v-if="chooseVideo">
- <u-icon label="选择视频" size="28px" space="7px" labelSize="12px" labelPos="bottom" name="plus-circle"></u-icon>
- </view> -->
- </view>
- </u-popup>
- </view>
- </template>
- <script>
- // import Request from '@/common/base-request.js'
- // import uLoadingIcon from '@/uni_modules/uview-ui/components/u-loading-icon/u-loading-icon.vue'
- export default {
- comments : {
-
- },
- props : {
- max : {
- default : 1
- },
- dir : {
- required: false
- },
- itemClass : {
- type : String,
- default : '',
- },
- value : {
- type : Array,
- default : function(){
- return []
- },
- },
- showRemove : {
- default : true,
- },
- crop : {
- type : [Object, undefined],
- default: undefined
- },
- type : {
- type : String,
- default : 'image'
- }
- },
- computed : {
- chooseVideo (){
- if(this.type != 'all'){
- return false;
- }
- return true;
- }
- },
- data() {
- return {
- showPopup : false,
- video: {
- // isVideo : true,
- // loading : true,
- // videoUrl : 'xxx',
- // videoCover : 'xxx'
- }
- }
- },
- methods : {
- remove : function(index){
- this.value.splice(index, 1);
- this.$emit("input",this.value)
- },
- clickImg(index){
- if(this.showRemove){
- return
- }
- this.selectIndex = index;
- return this.showPopup = true;
- },
- choose(type, sourceType){
- if(!type){
- this.selectIndex = null;
- return this.showPopup = true;
- }
- this.showPopup = false;
- if(type == 'image'){
- uni.chooseImage({
- count: this.max - this.value.length, //默认9
- sourceType : [sourceType],
- sizeType: ['compressed'], //可以指定是原图还是压缩图,默认二者都有
- crop : this.crop,
- // sourceType: ['album'], //从相册选择
- success: (fileList) => {
- this.toUploadImgs(fileList);
- },
- })
- }else{
- uni.chooseVideo({
- sourceType: [sourceType],
- maxDuration : 60,
- success: (res) => {
- // console.log(res);
- // self.src = res.tempFilePath;
- this.video = {
- isVideo : true,
- loading : true,
- videoUrl : '',
- videoCover : '',
- }
-
- let filePath = {
- filePath : res.tempFilePath,
- // #ifdef H5
- fileInfo : res.tempFile
- // #endif
- };
-
- this.value.push({
- loading :true,
- type : 'video',
- })
- let index=this.value.length-1
- this.$emit("input",this.value)
-
- this.$uploadOSS('/leapi/upload', filePath, this.dir + '/', (res) => {
- if(res){
- let obj={
- url : res.imgurl,
- video_img : res.imgurl + '?x-oss-process=video/snapshot,t_1000,f_jpg,w_300,h_300,m_fast',
- loading : false,
- type : 'video',
- }
- this.$set(this.value,index,obj)
- // this.list[index].url = res.imgurl
- // this.list[index].video_img = res.imgurl + '?x-oss-process=video/snapshot,t_1000,f_jpg,w_300,h_300,m_fast';
- // this.list[index].loading = false
- this.video.loading = false,
- this.video.videoUrl = res.imgurl;
- this.video.videoCover = res.imgurl + '?x-oss-process=video/snapshot,t_1000,f_jpg,w_300,h_300,m_fast';
- this.$emit("input",this.value)
- }
- })
- }
- });
- }
- },
- toUploadImgs : function(fileList){
- console.log(fileList,"filelist");
- if(!fileList.tempFilePaths){
- return;
- }
- fileList.tempFilePaths.forEach((filePath, index) => {
- let file={
- filePath : filePath,
- // #ifdef H5
- fileInfo : fileList.tempFiles[index]
- // #endif
- }
-
- this.value.push({
- file :file,
- loading :true,
- type : 'image',
- })
- let list_index=this.value.length-1
- console.log(list_index,"list_indexlist_index",file)
- uni.uploadFile({
- url: 'http://125.124.170.221:8000/api/upload',
- filePath: file.filePath,
- name: 'file',
- success: (myres) => {
- console.log(myres,"mures");
- let { data } = JSON.parse(myres.data);
- console.log(data,"data");
- let obj={
- url : data.url,
- loading : false,
- type : 'image'
- }
- this.$set(this.value,list_index,obj)
- this.value[list_index].url = data.url
- this.value[list_index].loading = false
- this.value[list_index].type = 'image'
- delete this.value[list_index].file
- this.$emit("input",this.value)
- },
- fail : (err=>{
- console.log(err,"err");
- })
- });
-
- // this.$uploadOSS('/leapi/upload', file, this.dir + '/', (res) => {
- // if(res){
- // let obj={
- // url : res.imgurl,
- // thumburl : res.imgurl + '?x-oss-process=style%2Fsquare200',
- // loading : false,
- // type : 'image'
- // }
- // this.$set(this.value,list_index,obj)
- // // this.value[list_index].url = res.imgurl
- // // this.value[list_index].thumburl = res.imgurl + '?x-oss-process=style%2Fsquare200',
- // // this.value[list_index].loading = false
- // // this.value[list_index].type = 'image'
- // // delete this.value[list_index].file
- // // this.list[index].loading = false,
- // // this.list[index].thumburl = res.imgurl + '?x-oss-process=style%2Fsquare200';
- // // this.list[index].imgurl = res.imgurl;
- // }
- // //
- // this.$emit("input",this.value)
- // })
- });
- }
- },
- }
- </script>
- <style scoped>
- .upload-image .img-max{
- width: 90%;
- margin: 5%;
- }
- .upload-image .imgwarp{
- width: 76px;
- height: 76px;
- line-height: 76px;
- margin-right: 10px;
- margin-bottom: 10px;
- color: #ccc;
- border: 1px dashed;
- position: relative;
- box-sizing: content-box;
- }
- .upload-image .img-remove{
- position: absolute;
- right: -10px;
- top: -8px;
- width: 40px;
- height: 40px;
- z-index: 100;
- text-align: right;
- line-height: normal;
- background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAC4AAAAuCAYAAABXuSs3AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyFpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDIxIDc5LjE1NDkxMSwgMjAxMy8xMC8yOS0xMTo0NzoxNiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo4NDEwQzFDNTFFMEExMUU0QURCREEwODgzQjUwQjFDRiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo4NDEwQzFDNjFFMEExMUU0QURCREEwODgzQjUwQjFDRiI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjg0MTBDMUMzMUUwQTExRTRBREJEQTA4ODNCNTBCMUNGIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjg0MTBDMUM0MUUwQTExRTRBREJEQTA4ODNCNTBCMUNGIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+9KF98QAABA1JREFUeNrMmmlIVFEYhr8ZjfYoMtsjTIkWQtMsXCqkspQWyB8SlmWiSSq0+L/fbbSbWZZZ4Q+DiBYEi8olkzYistL21JnIjGiXrPebORPXcWa8Z+be8b7wcmaGOec898y93znnO2MiH5W6Pns4ivnCs+BJcDA8WHzlG/wBfgs/gqvhm+Wnij770q/JS9j+KFLgNHgxHCDZxB+4Ci6DK3ARv3QFB/BAFDnwVng8aaNWeA9ciAv4oTk4oJehOAhPIX30As4D/FVNwAE8AMVeMdL+UCH/oriAn16DA3o0iktwFPlX9+EkwFulwQEdgqISDqW+UTO8BPCvVIMDeoIIW5Opb/Uajgf8+17BAT0IRQ0cQcbQAzgO8N+VH5pdfHGfgaBJsOz3OOIY7SQUl8mYSsaoX+kBLsLeYx3jtK96Cc9whEnlrZJjYGhWiHIuMSvWHttlW1qRlEjzoiOlCebHzqOsDWlkNptlqxaIO4MCxQe8YBon08LK5KWUmrKKurq6bO/rG+6phs7OWGeDNsHFJ8/8b0OFxsKr4bOOS14rO9IMbfvJ0Hle9kZVI6+EZi2Mi6HM9DWyo25jNYv19CKZmh/b27uNkhp4Z2gWt/H0+QtZ8EXMHDAzPCoRb6Qu+11LK1msVpozO5xMJntg4jI6MoJaLRZ639KmCrqo5DTdqq2XBedG6hk8Ey9iZGszfJsF8JGe4eNj5tKmjelaQTvUwg/nNG9r3264aytzszP+gzluG1a/wEA9oFnTGDzMlxZ6g9cBmhXK4GN8bcUdvFIaQrOCuPVhWrTE8IeKSlzGZI2hWUPMpKECAtxv9n93dmo6/zP4Fy0a4uiRk5nuchqXmaRU6iv3YtEC2lX0kJ2kZOZA7qlJD2i+pw8fK9ELvpmjylNepGsNrXwQN2e5DpVqF2Yu1MgzJ2enUvWCll0eqNROBufcRYGb/adP0DrBc94x1yyyplVS8+3UsB7QR0+UeozTdXd6xnluIzgoSHa0r4G5w9F7mUzN46Xn6EZNXTfo6ro70pNUecUFunilUha8TLkDOg/vEjuMXsUd887lL8rGZ02qoJ2XB6OCRnoDzfdUhfMufwvZk5tG1jbcJnudd/mFIgVgVDHbkR6ZLJGvyDMweL4y9dxtVfT44b0mhMeJeDnbYNAnAb27t9xhPvzQQNDMkutqddhNIiu6HH5jAGhmWO6cqXU34iTy0Ql9/LBy3wmucuPkaZpHBa4YS/ZjDX+L+4wVDCQFLuAtAv6YH6GLBLTHfYLMcSHnzg+QQY4LVZ8Ii1BZjJefyH70PVQjYJ7Gd8AZgG5UW8nXI/F08RB7cyR+HS4lfxyJu7mIESgWiGdhOtkT8Hw+OsSxsYWtIko8gWvJ/ieEDl/6/SfAACQq2Uox69/XAAAAAElFTkSuQmCC) no-repeat 15px 0;
- background-size: 23px auto;
- }
- .upload-image:after{
- content: ' ';
- display: block;
- clear: both;
- }
- .uloading{
- position: absolute;
- top : calc(50% - 7px);
- left: calc(50% - 7px);
-
- /* #ifndef H5 */
- top : 0;
- /* #endif */
- }
- </style>
|