| | |
| | | "target" : "http://124.70.216.149:8083", //æµè¯ç¯å¢ |
| | | "changeOrigin" : true, //æ¯å¦è·¨å |
| | | "secure" : true // æ¯å¦æ¯æ https åè®®ç代ç |
| | | } |
| | | }, |
| | | "/api/" : { |
| | | //æ å°åå |
| | | "target" : "http://localhost:24147", //æµè¯ç¯å¢ |
| | | "changeOrigin" : true, //æ¯å¦è·¨å |
| | | "secure" : true // æ¯å¦æ¯æ https åè®®ç代ç |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | } |
| | | }, |
| | | { |
| | | "path": "pages/ad_page/wx_pyqset", |
| | | "style": { |
| | | "navigationBarTitleText": "æåå设置", |
| | | "navigationBarTextStyle": "black", |
| | | "navigationBarBackgroundColor": "#ffffff" |
| | | } |
| | | }, |
| | | { |
| | | "path": "pages/ad_page/trans", |
| | | "style": { |
| | | "navigationStyle": "custom", |
| | |
| | | <template> |
| | | <view class="container" style="height: auto;"> |
| | | <view style="margin: 0.5rem;"> |
| | | <button class="mini-btn" style="background-color: cornflowerblue; margin-right: 10px;" type="primary" size="mini">çä¿¡å®¡æ ¸</button> |
| | | <button @click="toPyq()" class="mini-btn" type="default" size="mini">微信æåå</button> |
| | | </view> |
| | | |
| | | <v-tabs v-model="currentTab" :tabs="tabList" :pills="true" line-height="0" activeColor="#fff" |
| | | @change="changeTab" pillsColor="#FF928F" :fixed="true"></v-tabs> |
| | | <cc-pullScroolView class="pullScrollView" ref="pullScroll" :enablePullDown="false" :back-top="false"> |
| | |
| | | curPageNum: 1, |
| | | pageCount: 10, |
| | | totalNum: 0, |
| | | checkType: '', |
| | | whiteid: "ocUrg6nVVPhn-m6yNPg7igYnB64g,ocUrg6ud9UqAdLpqnA2sSf24EFd4,ocUrg6klrlpbPTnzMDr6R8WDmOXU,ocUrg6qawIzxqqzOHYy2a9YSfx_0" |
| | | checkType: '' |
| | | } |
| | | }, |
| | | onLoad(option) { |
| | | this.checkId(); |
| | | //this.checkId(); |
| | | }, |
| | | |
| | | // 䏿å è½½ |
| | |
| | | } |
| | | }, |
| | | methods: { |
| | | toPyq() |
| | | { |
| | | uni.navigateTo({ |
| | | url:'/pages/ad_page/wx_pyqset' |
| | | }) |
| | | }, |
| | | //æ£æ¥ç½åå |
| | | checkId() { |
| | | var openId = uni.getStorageSync('smsopenid'); |
| | | if (openId == "" || this.whiteid.indexOf(openId) < 0) { |
| | | var openId = uni.getStorageSync('smsopenid'); |
| | | var whiteid=comUtils.getSmsStatus(status); |
| | | if (openId == "" || whiteid.indexOf(openId) < 0) { |
| | | uni.reLaunch({ |
| | | url: '/pages/emptypage/nopermissions' |
| | | }) |
| | | } else { |
| | | this.getTemplateData(); |
| | | } |
| | | } |
| | | }, |
| | | copy(taskid) { |
| | | uni.setClipboardData({ |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <view class="container" style="height: auto;"> |
| | | <view style="margin: 0.5rem;"> |
| | | <button class="mini-btn" style="margin-right: 10px;" type="default" size="mini">çä¿¡å®¡æ ¸</button> |
| | | <button class="mini-btn" style="background-color: cornflowerblue;" type="primary" size="mini">微信æåå</button> |
| | | </view> |
| | | <view style="display: flex;justify-content: center; flex-direction: column; /"> |
| | | <view> |
| | | <textarea maxlength="492" v-model="content" class="smstxt" placeholder="请è¾å
¥æååææ¡" |
| | | placeholder-class="text-color-assist font-size-base"></textarea> |
| | | </view> |
| | | <view> |
| | | <textarea maxlength="492" v-model="commnet" class="smstxt" placeholder="请è¾å
¥è¯è®º(éå¿
å¡«)" |
| | | placeholder-class="text-color-assist font-size-base"></textarea> |
| | | </view> |
| | | <view> |
| | | <cl-upload action="/api/automanage/uploadpublicfile" @onSuccess="onSuccess" v-model="list" :listStyle="{ |
| | | columns: 2, |
| | | columnGap: '20rpx', |
| | | rowGap:'20rpx', |
| | | padding:'10rpx', |
| | | height:'300rpx', |
| | | radius:'20rpx' |
| | | }"> |
| | | <template v-slot:addImg> |
| | | <view class="newAddImg"> |
| | | <view>ï¼</view> |
| | | <text>æ·»å </text> |
| | | </view> |
| | | </template> |
| | | </cl-upload> |
| | | </view> |
| | | </view> |
| | | <view style="text-align: center;margin-top: 3rem;"> |
| | | <button @click="addSet()" |
| | | style="width: 10rem;height: 3rem; line-height: 3rem; font-size: 20px; color: #fff; background: green;" |
| | | class="mini-btn" type="default" size="mini">æäº¤</button> |
| | | </view> |
| | | </view> |
| | | </template> |
| | | |
| | | <script> |
| | | import comUtils from '@/utils/ComUtils.js' |
| | | export default { |
| | | data() { |
| | | return { |
| | | content: '', |
| | | list: [], |
| | | commnet: '' |
| | | } |
| | | }, |
| | | onLoad(option) { |
| | | //this.checkId(); |
| | | }, |
| | | |
| | | methods: { |
| | | //æ£æ¥ç½åå |
| | | checkId() { |
| | | var openId = uni.getStorageSync('smsopenid'); |
| | | var whiteid = comUtils.getSmsStatus(status); |
| | | if (openId == "" || whiteid.indexOf(openId) < 0) { |
| | | uni.reLaunch({ |
| | | url: '/pages/emptypage/nopermissions' |
| | | }) |
| | | } else { |
| | | this.getTemplateData(); |
| | | } |
| | | }, |
| | | onSuccess(reslut) { |
| | | // ææå¡ç«¯è¿åçå¾çå°åæ·»å å°listä¸ä¸ç»ä»¶æ°æ®åæ¥ |
| | | this.list.push(reslut.result) |
| | | }, |
| | | addSet() { |
| | | var param = { |
| | | Content: this.content, |
| | | PicList: this.list, |
| | | Commnet: this.commnet |
| | | } |
| | | var that=this; |
| | | that.$http.post('/api/AutoManage/AddPyq', param).then(e => { |
| | | uni.hideLoading(); |
| | | if (e.result) { |
| | | uni.showToast({ |
| | | title: 'æä½æåï¼', |
| | | icon: 'none' |
| | | }); |
| | | that.content=''; |
| | | that.list=[]; |
| | | that.commnet=''; |
| | | } else { |
| | | uni.showToast({ |
| | | title: 'æä½å¤±è´¥ï¼', |
| | | icon: 'none' |
| | | }); |
| | | } |
| | | }).catch(function(err) { |
| | | uni.hideLoading() |
| | | console.log(err); |
| | | }) |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | page { |
| | | background: #fff; |
| | | height: 100%; |
| | | } |
| | | |
| | | .smstxt { |
| | | width: 90%; |
| | | margin-top: 2rem; |
| | | border: 1px solid; |
| | | } |
| | | |
| | | .newAddImg { |
| | | width: 8rem; |
| | | border: 1px solid; |
| | | height: 8rem; |
| | | display: flex; |
| | | justify-content: center; |
| | | flex-direction: column; |
| | | text-align: center; |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | ## 1.4.0ï¼2023-07-04ï¼ |
| | | æ°å¢unicloudå¯ç¨ç®å½é项 |
| | | ## 1.3.9ï¼2023-06-28ï¼ |
| | | ä¿®å¤å±æ§éæ©å¨è¦åæç¤º |
| | | ## 1.3.8ï¼2023-06-02ï¼ |
| | | æå¨ä¸ä¼ 没æå¯ä¸ä¼ æä»¶æ¶è¿å空æ°ç»; æé«ä»£ç è´¨éåå¯é
读æ§; |
| | | ## 1.3.7ï¼2023-05-22ï¼ |
| | | æ°å¢èªå®ä¹è§é¢å°é¢é
ç½®; æ°å¢æ·»å æé®ææ§½ |
| | | ## 1.3.6ï¼2023-05-22ï¼ |
| | | æ·»å èªå®ä¹å¾çèµæºé
ç½® |
| | | ## 1.3.5ï¼2023-05-04ï¼ |
| | | ä¿®å¤å°ç¨åºcloudType为otherçæ¶åè·åä¸å°è§é¢å 餿é®ç¦ç¹é®é¢ |
| | | ## 1.3.4ï¼2023-04-27ï¼ |
| | | ä¿®å¤å°ç¨åºunicloudèªå¨ä¸ä¼ ä¸èªå¨åæ¥æ°æ®é®é¢ |
| | | ## 1.3.3ï¼2023-04-27ï¼ |
| | | ä¿®å¤å 餿é®å±çº§é®é¢ |
| | | ## 1.3.2ï¼2023-04-24ï¼ |
| | | ä¿®å¤å®åAPPé
ç½®cloudType:other æ æ³æ¾ç¤ºhttpå°é¢é®é¢ |
| | | ## 1.3.1ï¼2023-04-19ï¼ |
| | | ä¿®æ¹çæ¬ä¿¡æ¯ |
| | | ## 1.3.0ï¼2023-04-19ï¼ |
| | | ä¿®å¤æå¨ä¸ä¼ å·²ç¥é®é¢; æ°å¢å é¤åï¼ä¸ä¼ åé©å彿° |
| | | ## 1.2.9ï¼2023-03-22ï¼ |
| | | ä¿®å¤å·²ç¥é®é¢ |
| | | ## 1.2.8ï¼2023-03-22ï¼ |
| | | ä¿®å¤å·²ç¥é®é¢ |
| | | ## 1.2.7ï¼2023-03-21ï¼ |
| | | ä¿®å¤é¨åè§é¢å°é¢ç½å±é®é¢ |
| | | ## 1.2.6ï¼2023-03-21ï¼ |
| | | ä¿®å¤é¨åè§é¢å°é¢ç½å±é®é¢ |
| | | ## 1.2.5ï¼2023-03-08ï¼ |
| | | å
¼å®¹vue3ä¸v-modelæ°æ®ç»å® |
| | | ## 1.2.4ï¼2023-03-06ï¼ |
| | | 1.ä¿®å¤ä½çæ¬å¾®ä¿¡å°ç¨åºvideoå¾å±å
¼å®¹é®é¢; |
| | | 2.ä¿®å¤unicloudä¸ä¼ v-modelä¸åæ¥é®é¢; |
| | | ## 1.2.3ï¼2023-02-02ï¼ |
| | | æ·»å éå¶å¾çè§é¢å¤§å°åè½ |
| | | ## 1.2.2ï¼2023-02-01ï¼ |
| | | å
¼å®¹æ¯ä»å®å°ç¨åºæå¨ä¸ä¼ è§é¢ |
| | | ## 1.2.1ï¼2023-01-31ï¼ |
| | | æ´æ°å¾çèµæºå°å |
| | | ## 1.2.0ï¼2022-12-12ï¼ |
| | | å
¼å®¹uniCloudä¸ä¼ |
| | | ## 1.1.9ï¼2022-12-12ï¼ |
| | | 1. æ·»å æå¤§è§é¢éå¶ |
| | | 2. ä¼åé¨ååè½ |
| | | ## 1.1.8ï¼2022-12-09ï¼ |
| | | ä¿®å¤é¨å设å¤ä¸ä¼ è§é¢ç¬¬ä¸å¸§é»å±é®é¢ |
| | | ## 1.1.7ï¼2022-12-01ï¼ |
| | | ä¿®å¤h5ä¸ä¼ å¼å¯å缩åä¸ç´æ¾ç¤ºâæ£å¨å缩ä¸âé®é¢ |
| | | ## 1.1.6ï¼2022-11-24ï¼ |
| | | å
¼å®¹æ¯ä»å®å°ç¨åºæå¨ä¸ä¼ |
| | | ## 1.1.5ï¼2022-11-07ï¼ |
| | | æ·»å å è½½é
ç½® |
| | | ## 1.1.4ï¼2022-11-07ï¼ |
| | | ä¿®å¤å¾çéå¶æ°éåå¯ä»¥å¤æ¬¡éæ©æå¤§æ°éå¾çé®é¢ |
| | | ## 1.1.3ï¼2022-10-28ï¼ |
| | | æ·»å æç¤ºå¼¹çªé
ç½® |
| | | ## 1.1.1ï¼2022-10-28ï¼ |
| | | ä¿®å¤å·²ç¥é®é¢ |
| | | ## 1.1.0ï¼2022-08-25ï¼ |
| | | ä¿®å¤base64å缩é®é¢ |
| | | ## 1.0.9ï¼2022-08-25ï¼ |
| | | ä¿®å¤æå¡å¨è¿åæ°æ®æ ¼å¼é®é¢ |
| | | ## 1.0.8ï¼2022-08-01ï¼ |
| | | ä¼åä»£ç æ ¼å¼ãé»è¾ |
| | | ## 1.0.6ï¼2022-07-30ï¼ |
| | | ä¿®æ¹å·²ç¥é®é¢ |
| | | ## 1.0.5ï¼2022-07-30ï¼ |
| | | 1. aspect-ratioå
¼å®¹é®é¢ï¼æ·»å height屿§ä¿åº |
| | | 2. æ·»å çå¬ä¸ä¼ è¿åº¦ååäºä»¶ |
| | | ## 1.0.3ï¼2022-07-30ï¼ |
| | | æ·»å æé®æ§å¶ï¼äºä»¶è¯´æ |
| | | ## 1.0.2ï¼2022-07-30ï¼ |
| | | ä¼åæå¡å¨æ¥å£è¿åæ°æ®ä¸ä¼ |
| | | ## 1.0.1ï¼2022-07-29ï¼ |
| | | åå§åç»ä»¶ |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <image class="image" :src="imgSrc" mode="aspectFill" :disabled="false" :controls='false' @error="imgerror"></image> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | props: { |
| | | src: { |
| | | type: String, |
| | | default: '' |
| | | }, |
| | | cloudType: { |
| | | type: String, |
| | | default: 'oss' |
| | | }, |
| | | }, |
| | | data() { |
| | | return { |
| | | imgSrc: '' |
| | | }; |
| | | }, |
| | | mounted() { |
| | | this.setCloudFunction() |
| | | }, |
| | | methods: { |
| | | imgerror(even) { |
| | | this.imgSrc = `https://mp-61599c79-d7ee-4a75-a24b-e5a288da6dd3.cdn.bspapp.com/cloudstorage/887c60f0-27f8-46d1-8769-2c45be0f3d7d.png` |
| | | }, |
| | | setCloudFunction() { |
| | | const fileType = this.src.split('.').pop(); |
| | | const IMAGE_REGEXP = /(jpeg|jpg|gif|png|svg|webp|jfif|bmp|dpg|image)/i |
| | | if (IMAGE_REGEXP.test(fileType)) { |
| | | return this.imgSrc = this.src; |
| | | } |
| | | |
| | | switch (this.cloudType){ |
| | | case 'oss': |
| | | this.imgSrc = this.src + '?x-oss-process=video/snapshot,t_0,f_jpg' |
| | | break; |
| | | case 'process': |
| | | this.imgSrc = this.src + '?ci-process=snapshot&time=0.01' |
| | | break; |
| | | case 'vframe': |
| | | this.imgSrc = this.src + '?vframe/jpg/offset/0' |
| | | break; |
| | | default: |
| | | this.imgSrc = this.src |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .image { |
| | | width: 100%; |
| | | height: 100%; |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <view class="cl-updata"> |
| | | <view class="file-list" :style="[listRowStyle]"> |
| | | |
| | | <view v-for="(item, index) in previewList" @tap="clickSelectedFile(item, index)" class="file-list-row" |
| | | :style="[rowStyle]" :key="index"> |
| | | |
| | | <image |
| | | class="_image" |
| | | v-if="fileUrlType(item) === 'image'" |
| | | :src="item.path" |
| | | :style="[imgStyle]" |
| | | mode="aspectFill"> |
| | | </image> |
| | | |
| | | <view v-else class="_video" :style="[imgStyle]"> |
| | | |
| | | <!-- #ifdef MP-WEIXIN || MP-ALIPAY --> |
| | | <video |
| | | v-if="!autoUpload || cloudType === 'other'" |
| | | class="_video" |
| | | :style="[imgStyle]" |
| | | :src="item.path" |
| | | :show-center-play-btn="false" |
| | | :show-fullscreen-btn="false" |
| | | :show-play-btn="false" |
| | | :show-loading="false" |
| | | :enable-progress-gesture="false" |
| | | :controls="false"> |
| | | <view @tap="previewVideo(item, index)" class="play"> |
| | | <image style="width: 100%;" :src="playImg" mode="widthFix"></image> |
| | | </view> |
| | | </video> |
| | | |
| | | <!-- #endif --> |
| | | |
| | | <!-- #ifdef APP-PLUS --> |
| | | <video |
| | | v-if="cloudType === 'other'" |
| | | class="_video" |
| | | :style="[imgStyle]" |
| | | :src="item.path" |
| | | :poster="item.path" |
| | | :controls="false" |
| | | :show-center-play-btn="false" |
| | | :show-fullscreen-btn="false" |
| | | :show-play-btn="false" |
| | | :show-loading="false" |
| | | :enable-progress-gesture="false"> |
| | | <cover-image class="app_play" :src="playImg" @tap="previewVideo(item, index)"></cover-image> |
| | | <cover-view class="remove" v-if="remove" @tap="deleteSelectedFile(item, index)"> |
| | | <cover-image class="image" :src="deleteImg" mode="widthFix" @tap="deleteSelectedFile(item, index)"></cover-image> |
| | | </cover-view> |
| | | </video> |
| | | <!-- #endif --> |
| | | |
| | | <!-- #ifndef MP-WEIXIN || MP-ALIPAY || APP-PLUS --> |
| | | <video |
| | | v-if="cloudType === 'other'" |
| | | class="_video" |
| | | :autoplay="false" |
| | | :style="[imgStyle]" |
| | | :src="item.path" |
| | | :controls="false" |
| | | :show-center-play-btn="false" |
| | | :show-fullscreen-btn="false" |
| | | :show-play-btn="false" |
| | | :show-loading="false" |
| | | :enable-progress-gesture="false" > |
| | | <cover-view @tap="previewVideo(item, index)" class="play"> |
| | | <cover-image style="width: 100%;" :src="playImg" mode="widthFix"></cover-image> |
| | | </cover-view> |
| | | </video> |
| | | |
| | | <!-- #endif --> |
| | | |
| | | <template v-else> |
| | | <cl-image class="pay" :style="[imgStyle]" :cloudType="cloudType" |
| | | :src="(item.poster || item.path)"></cl-image> |
| | | |
| | | <view class="play" @tap="previewVideo(item, index)"> |
| | | <image class="play-img" :src="playImg" mode="widthFix"></image> |
| | | </view> |
| | | </template> |
| | | |
| | | </view> |
| | | |
| | | <view class="remove" v-if="remove" @tap.stop="deleteSelectedFile(item, index)"> |
| | | <image class="image" :src="deleteImg" mode="widthFix"></image> |
| | | </view> |
| | | </view> |
| | | |
| | | <view v-if="add && FileList.length < max" @tap="selectFileTypeOnAdd" :style="[rowStyle]" class="file-list-row"> |
| | | <slot name="addImg"> |
| | | <div class="add-image"> |
| | | <image class="_image" :src="addImg" mode="widthFix"></image> |
| | | </div> |
| | | </slot> |
| | | </view> |
| | | </view> |
| | | |
| | | |
| | | <view v-if="tempVideoUrl" class="mask"> |
| | | <image @tap="tempVideoUrl = ''" class="_root" :src="closeImg" mode="widthFix"></image> |
| | | |
| | | <view class="block" @tap.stop> |
| | | <video class="block_video" autoplay :src="tempVideoUrl"></video> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | </template> |
| | | |
| | | <script> |
| | | import ClImage from '../cl-image/cl-image.vue' |
| | | export default { |
| | | name: "cl-upload", |
| | | components: { ClImage }, |
| | | props: { |
| | | //åæ§å¾çå表 |
| | | // #ifdef VUE2 |
| | | value: { |
| | | type: Array, |
| | | default: () => [], |
| | | }, |
| | | // #endif |
| | | |
| | | // #ifdef VUE3 |
| | | modelValue: { |
| | | type: Array, |
| | | default: () => [], |
| | | }, |
| | | // #endif |
| | | |
| | | // åå¨äºç±»å ossé¿éäº vframeä¸çäº processè
¾è®¯äº otherå
¶ä» |
| | | cloudType: { |
| | | type: String, |
| | | default: 'oss' |
| | | }, |
| | | // æ è¯ç¬¦,å³å端æ¥å£åæ°å |
| | | fileName: { |
| | | type: String, |
| | | default: 'file' |
| | | }, |
| | | // æä»¶ç±»å 'image', 'video', 'all' |
| | | fileType: { |
| | | type: String, |
| | | default: 'all' |
| | | }, |
| | | // ä¸ä¼ å¾çåæ° |
| | | imageFormData: { |
| | | type: Object | null, |
| | | default: () => { } |
| | | }, |
| | | // ä¸ä¼ è§é¢åæ° |
| | | videoFromData: { |
| | | type: Object, |
| | | default: () => { } |
| | | }, |
| | | |
| | | // å¿
éåæ°ï¼ä¸ä¼ çå°å |
| | | action: { |
| | | type: String, |
| | | default: '' |
| | | }, |
| | | |
| | | // å¯ç¨ç®å½, ä»
unicloudé¿éäºæ¯æ |
| | | // https://uniapp.dcloud.net.cn/uniCloud/storage.html#storage-dir |
| | | cloudPathAsRealPath: { |
| | | type: Boolean, |
| | | default: false |
| | | }, |
| | | |
| | | // 设置ä¸ä¼ ç请æ±å¤´é¨ |
| | | headers: { |
| | | type: Object, |
| | | default: () => { } |
| | | }, |
| | | |
| | | // ä¸ä¼ æ¶é带çé¢å¤åæ° |
| | | data: { |
| | | type: Object, |
| | | default: () => { } |
| | | }, |
| | | |
| | | // æ¯å¦å¼å¯é¢è§å¾ç |
| | | isPreviewImage: { |
| | | type: Boolean, |
| | | default: true |
| | | }, |
| | | |
| | | // å¾çæç¤ºå¨æ ·å¼ï¼å¯åå¼ï¼"default" - åºé¨åç¹æç¤ºå¨ï¼ "number" - 顶鍿°åæç¤ºå¨ï¼ "none" - 䏿¾ç¤ºæç¤ºå¨ã |
| | | indicator: { |
| | | type: String, |
| | | default: 'none' |
| | | }, |
| | | // æ¯å¦å¨éåæä»¶åç«å³è¿è¡ä¸ä¼ |
| | | autoUpload: { |
| | | type: Boolean, |
| | | default: true |
| | | }, |
| | | // æ¯å¦æ¾ç¤ºå é¤æé® |
| | | remove: { |
| | | type: Boolean, |
| | | default: true |
| | | }, |
| | | // æ¯å¦æ·»å æé® |
| | | add: { |
| | | type: Boolean, |
| | | default: true |
| | | }, |
| | | // æå¤æ¾ç¤ºæ°é |
| | | max: { |
| | | type: Number, |
| | | default: 9 |
| | | }, |
| | | // è§é¢æå¤§ä¸ä¼ æ°é |
| | | maxVideo: { |
| | | type: Number, |
| | | default: 0 |
| | | }, |
| | | // åè¡¨æ ·å¼ |
| | | listStyle: { |
| | | type: Object, |
| | | default: () => { } |
| | | }, |
| | | // å é¤æç¤ºå¼¹çªæ é¢ |
| | | deleteTitle: { |
| | | type: String, |
| | | default: 'æç¤º' |
| | | }, |
| | | // å é¤æç¤ºå¼¹çªææ¡ |
| | | deleteText: { |
| | | type: String, |
| | | default: 'æ¨ç¡®è®¤è¦å é¤åï¼' |
| | | }, |
| | | // å è½½ææ¡ |
| | | loadingText: { |
| | | type: String, |
| | | default: 'æ£å¨ä¸ä¼ ä¸...' |
| | | }, |
| | | // æ¯å¦å¼å¯å é¤åé©å |
| | | useBeforeDelete: { |
| | | type: Boolean, |
| | | default: false |
| | | }, |
| | | // æ¯å¦å¼å¯ä¸ä¼ åé©å |
| | | useBeforeUpload: { |
| | | type: Boolean, |
| | | default: false |
| | | }, |
| | | // æ·»å æé®å¾ç |
| | | addImg: { |
| | | type: String, |
| | | default: 'https://mp-61599c79-d7ee-4a75-a24b-e5a288da6dd3.cdn.bspapp.com/cloudstorage/bb1550b3-e0a8-4a90-a86f-00f8c6afa9fb.png' |
| | | }, |
| | | // ææ¾æé®å¾ç |
| | | playImg: { |
| | | type: String, |
| | | default: 'https://mp-61599c79-d7ee-4a75-a24b-e5a288da6dd3.cdn.bspapp.com/cloudstorage/ae40402f-aa53-4344-b553-2322799bebd6.png' |
| | | }, |
| | | // å 餿é®å¾ç |
| | | deleteImg: { |
| | | type: String, |
| | | default: 'https://mp-61599c79-d7ee-4a75-a24b-e5a288da6dd3.cdn.bspapp.com/cloudstorage/d20177a5-417e-4c5d-a266-1988361c543d.png' |
| | | }, |
| | | // å
³éè§é¢æé®å¾ç |
| | | closeImg: { |
| | | type: String, |
| | | default: 'https://mp-61599c79-d7ee-4a75-a24b-e5a288da6dd3.cdn.bspapp.com/cloudstorage/cde4362d-7ec7-4cac-a692-12e1f576be1e.png' |
| | | }, |
| | | }, |
| | | data() { |
| | | return { |
| | | // 渲æå表 |
| | | FileList: [], |
| | | |
| | | // é¢è§è§é¢å°å |
| | | tempVideoUrl: '', |
| | | |
| | | // ä¸´æ¶æä»¶å表 |
| | | tempFile_paths: [], |
| | | |
| | | }; |
| | | }, |
| | | watch: { |
| | | // #ifdef VUE2 |
| | | 'value': { |
| | | handler: function (newVal, oldVal) { |
| | | this.FileList = newVal; |
| | | }, |
| | | deep: true, |
| | | immediate: true |
| | | }, |
| | | // #endif |
| | | |
| | | // #ifdef VUE3 |
| | | 'modelValue': { |
| | | handler: function (newVal, oldVal) { |
| | | this.FileList = newVal; |
| | | }, |
| | | deep: true, |
| | | immediate: true |
| | | }, |
| | | // #endif |
| | | }, |
| | | computed: { |
| | | previewList() { |
| | | return this.FileList.map(item => { |
| | | return { |
| | | path: item.path || item, |
| | | poster: item.poster || '' |
| | | } |
| | | }) |
| | | }, |
| | | listRowStyle() { |
| | | const style = { |
| | | 'grid-template-columns': `repeat(${this.listStyle?.columns || 4}, 1fr)`, // æ¯è¡æ°é |
| | | 'grid-column-gap': this.listStyle?.columnGap || '40rpx', // è¡é´è· |
| | | 'grid-row-gap': this.listStyle?.rowGap || '40rpx', // åé´è· |
| | | 'padding': this.listStyle?.padding || '0rpx' // å表å
è¾¹è· |
| | | } |
| | | |
| | | return style; |
| | | }, |
| | | rowStyle() { |
| | | const { height = '140rpx', ratio } = this.listStyle || {}; |
| | | const style = { |
| | | 'aspect-ratio': height ? '' : ratio || '1/1', // å¾çæ¯ä¾ |
| | | 'height': height, |
| | | }; |
| | | |
| | | return style; |
| | | }, |
| | | |
| | | imgStyle() { |
| | | const style = { |
| | | 'border-radius': this.listStyle?.radius || '6rpx', // å¾çåè§ |
| | | } |
| | | return style; |
| | | } |
| | | }, |
| | | methods: { |
| | | /** |
| | | * å é¤å·²éæ©æä»¶ |
| | | * @param {object} item æä»¶ä¿¡æ¯ |
| | | * @param {number} selectedFileIndex æä»¶ç´¢å¼ |
| | | * */ |
| | | deleteSelectedFile(item, selectedFileIndex) { |
| | | |
| | | const fileToDelete = this.FileList[selectedFileIndex]; |
| | | |
| | | // å é¤åé©å |
| | | if (this.useBeforeDelete) { |
| | | this.$emit('beforeDelete', fileToDelete, selectedFileIndex, () => { |
| | | return deleteFileFromList() |
| | | }) |
| | | } |
| | | |
| | | if (!this.useBeforeDelete) { |
| | | uni.showModal({ |
| | | title: this.deleteTitle, |
| | | content: this.deleteText, |
| | | success: (res) => { |
| | | if (res.confirm) { |
| | | deleteFileFromList() |
| | | } |
| | | } |
| | | }); |
| | | } |
| | | |
| | | const deleteFileFromList = () => { |
| | | const tempFileIndex = this.tempFile_paths.indexOf(item || item.path); |
| | | |
| | | if (tempFileIndex > -1) { |
| | | this.tempFile_paths.splice(tempFileIndex, 1) |
| | | } |
| | | |
| | | this.FileList.splice(selectedFileIndex, 1) |
| | | |
| | | // #ifdef VUE2 |
| | | this.$emit('input', this.FileList) |
| | | // #endif |
| | | |
| | | // #ifdef VUE3 |
| | | this.$emit("update:modelValue", this.FileList); |
| | | // #endif |
| | | } |
| | | |
| | | }, |
| | | |
| | | /** |
| | | * ç¹å»å·²éæ©æä»¶ |
| | | * @param {object} item æä»¶ä¿¡æ¯ |
| | | * @param {number} index æä»¶ç´¢å¼ |
| | | * */ |
| | | clickSelectedFile(item, index) { |
| | | this.previewImage(item?.path ?? item, index); |
| | | this.$emit('onImage', { |
| | | item, |
| | | index |
| | | }) |
| | | }, |
| | | |
| | | /** |
| | | * ç¹å»éæ©å¾çæé® |
| | | * */ |
| | | selectFileTypeOnAdd() { |
| | | |
| | | switch (this.fileType) { |
| | | case 'image': |
| | | this.handleFileSelection(1); |
| | | break; |
| | | case 'video': |
| | | this.handleFileSelection(2); |
| | | break; |
| | | case 'all': |
| | | uni.showActionSheet({ |
| | | itemList: ['ç¸å', 'è§é¢'], |
| | | success: (res) => { |
| | | const tapIndex = res.tapIndex; |
| | | if (tapIndex === 0) { |
| | | this.handleFileSelection(1); |
| | | } else { |
| | | this.handleFileSelection(2); |
| | | } |
| | | }, |
| | | fail: (res) => { |
| | | console.error(res.errMsg); |
| | | } |
| | | }); |
| | | break; |
| | | default: |
| | | this.handleFileSelection(1); |
| | | break; |
| | | } |
| | | }, |
| | | |
| | | |
| | | /** |
| | | * 仿¬å°éæ©æä»¶ã |
| | | * @param { number } updataType éæ©ç±»å 1:å¾ç 2è§é¢ |
| | | * */ |
| | | async handleFileSelection(updataType) { |
| | | const that = this; |
| | | if (updataType === 1) { |
| | | |
| | | const data = Object.assign({}, { |
| | | // æå¤å¯ä»¥éæ©çå¾çå¼ æ°ï¼é»è®¤9 |
| | | count: 9, |
| | | // ä»
对 mediaType 为 image æ¶ææï¼æ¯å¦å缩æéæä»¶ |
| | | // #ifndef MP-TOUTIAO |
| | | sizeType: ['original', 'compressed'], |
| | | // #endif |
| | | // album ä»ç¸åéå¾ï¼camera 使ç¨ç¸æºï¼é»è®¤äºè
齿ã |
| | | sourceType: ['camera', 'album'], |
| | | |
| | | compress: false |
| | | }, this.imageFormData) |
| | | |
| | | data['count'] = this.max - this.FileList.length |
| | | |
| | | uni.chooseImage({ |
| | | ...data, |
| | | success: async (res) => { |
| | | let tempFiles = res.tempFiles |
| | | const compress = that.imageFormData?.compress || false; |
| | | |
| | | // éå¶å¾çä¸ä¼ 尺寸 |
| | | if (that.imageFormData?.size ?? false) { |
| | | const maxSize = that.imageFormData.size * 1024 * 1024 |
| | | |
| | | tempFiles.map((imgInfo, index) => { |
| | | if (imgInfo.size > maxSize) { |
| | | tempFiles.splice(index, 1) |
| | | that.$emit('onImageSize', imgInfo) |
| | | return uni.showToast({ |
| | | title: `å¾çæå¤§ä¸ä¼ ${that.imageFormData.size}MB`, |
| | | duration: 2000, |
| | | icon: 'none' |
| | | }); |
| | | } |
| | | }) |
| | | } |
| | | |
| | | // å¼å¯å缩å¾ç |
| | | if (compress) { |
| | | const compressedImagePathList = tempFiles.map(imageItem => { |
| | | return that.compressImage(imageItem.path) |
| | | }) |
| | | |
| | | Promise.all(compressedImagePathList).then(result => { |
| | | upload(result); |
| | | }) |
| | | |
| | | } else { |
| | | upload(tempFiles); |
| | | } |
| | | |
| | | function upload(tempImages) { |
| | | if (that.autoUpload) { |
| | | tempImages.map(item => { |
| | | that.onBeforeUploadFile(item, 'image') |
| | | }) |
| | | } else { |
| | | that.FileList = [...that.FileList, ...tempImages] |
| | | tempImages.map(item => { |
| | | that.tempFile_paths.push(item) |
| | | }) |
| | | } |
| | | } |
| | | |
| | | }, |
| | | fail(err) { |
| | | console.error('éæ©å¾ç失败', err) |
| | | that.$emit('onError', err) |
| | | } |
| | | |
| | | }) |
| | | } |
| | | |
| | | if (updataType === 2) { |
| | | |
| | | // éå¶è§é¢æå¤§ä¸ä¼ æ°é |
| | | const VIDEO_REGEXP = /\.(mp4|flv|avi)/i |
| | | const videoList = await that.FileList.filter(item => { |
| | | const fileUrl = item?.url ?? item |
| | | return VIDEO_REGEXP.test(fileUrl) |
| | | }) |
| | | |
| | | if (that.maxVideo > 0 && videoList.length >= that.maxVideo) { |
| | | that.$emit('onVideoMax', that.maxVideo, videoList.length) |
| | | return uni.showToast({ |
| | | title: 'è§é¢æ°éå·²è¶
åº', |
| | | duration: 2000, |
| | | icon: 'none' |
| | | }); |
| | | } |
| | | |
| | | const data = Object.assign({}, { |
| | | // ææè§é¢æé¿æææ¶é´ï¼åä½ç§ãæé¿æ¯æ 60 ç§ã |
| | | maxDuration: 60, |
| | | // #ifndef MP-TOUTIAO |
| | | // 'front'ã'back'ï¼é»è®¤'back' |
| | | camera: "back", |
| | | // #endif |
| | | |
| | | // album ä»ç¸åéè§é¢ï¼camera 使ç¨ç¸æºææï¼é»è®¤äºè
齿ã |
| | | sourceType: ['camera', 'album'], |
| | | // æ¯å¦å缩æéçè§é¢æºæä»¶ï¼é»è®¤å¼ä¸º trueï¼éè¦å缩ã |
| | | compressed: true, |
| | | // 'front'ã'back'ï¼é»è®¤'back' |
| | | }, this.videoFromData) |
| | | |
| | | uni.chooseVideo({ |
| | | ...data, |
| | | success: (res) => { |
| | | let tempFilePath = { ...res } |
| | | tempFilePath['path'] = res.tempFilePath |
| | | |
| | | // éå¶è§é¢ä¸ä¼ 尺寸 |
| | | if (that.videoFromData?.size ?? false) { |
| | | const maxSize = that.videoFromData.size * 1024 * 1024 |
| | | |
| | | if (tempFilePath.size > maxSize) { |
| | | uni.showToast({ |
| | | title: `è§é¢æå¤§ä¸ä¼ ${that.videoFromData.size}MB`, |
| | | duration: 2000, |
| | | icon: 'none' |
| | | }); |
| | | return false; |
| | | } |
| | | |
| | | } |
| | | if (that.autoUpload) { |
| | | that.onBeforeUploadFile(tempFilePath, 'video') |
| | | } else { |
| | | that.FileList.push(tempFilePath) |
| | | that.tempFile_paths.push(tempFilePath) |
| | | } |
| | | }, |
| | | fail(err) { |
| | | console.error('éæ©è§é¢å¤±è´¥', err) |
| | | } |
| | | |
| | | }) |
| | | } |
| | | }, |
| | | |
| | | /** |
| | | * ä¸ä¼ åé©å |
| | | * @param { tempFile } ä¸´æ¶æä»¶ |
| | | * @return { Promise } |
| | | * */ |
| | | onBeforeUploadFile(tempFile) { |
| | | if (this.useBeforeUpload) { |
| | | return this.$emit('beforeUpload', tempFile, () => { |
| | | return this.updataFile(tempFile); |
| | | }) |
| | | } |
| | | return this.updataFile(tempFile); |
| | | }, |
| | | |
| | | /** |
| | | * ä¸ä¼ æä»¶å°æå¡å¨ |
| | | * @param { tempFile } ä¸´æ¶æä»¶ |
| | | * @return { Promise } |
| | | * */ |
| | | updataFile(tempFile) { |
| | | const that = this; |
| | | const filePath = tempFile.path || tempFile; |
| | | const fileType = this.fileUrlType(filePath) == 'image' ? '.png' : '.mp4'; |
| | | const fileName = tempFile.name || Date.now() + fileType; |
| | | |
| | | uni.showLoading({ |
| | | title: this.loadingText, |
| | | icon: 'loading' |
| | | }) |
| | | |
| | | return new Promise((resolve, reject) => { |
| | | // uniCloudä¸ä¼ |
| | | if (that.action === 'uniCloud') { |
| | | |
| | | uniCloud.uploadFile({ |
| | | cloudPath: String(fileName), |
| | | filePath: filePath, |
| | | // #ifdef MP-ALIPAY |
| | | fileType: fileType, |
| | | // #endif |
| | | cloudPathAsRealPath: this.cloudPathAsRealPath, |
| | | |
| | | onUploadProgress: (progressEvent) => { |
| | | const percentCompleted = Math.round( |
| | | (progressEvent.loaded * 100) / progressEvent.total |
| | | ); |
| | | that.$emit('onProgress', percentCompleted) |
| | | }, |
| | | success(result) { |
| | | if (that.autoUpload) { |
| | | that.FileList.push(result.fileID) |
| | | } else { |
| | | that.FileList.map((item, index) => { |
| | | if (item === filePath || item.path === filePath) { |
| | | that.FileList.splice(index, 1, result.fileID) |
| | | } |
| | | }) |
| | | } |
| | | |
| | | // #ifdef VUE2 |
| | | that.$emit('input', that.FileList) |
| | | // #endif |
| | | // #ifdef VUE3 |
| | | that.$emit("update:modelValue", that.FileList); |
| | | // #endif |
| | | |
| | | resolve(result.fileID) |
| | | uni.hideLoading(); |
| | | that.$emit('onProgress', { |
| | | ...result |
| | | }) |
| | | }, |
| | | fail: (error) => { |
| | | uni.hideLoading(); |
| | | console.error('error', error); |
| | | that.$emit('onError', error) |
| | | reject(error) |
| | | } |
| | | }) |
| | | return false; |
| | | } |
| | | |
| | | // æ¥å£æå¡ä¸ä¼ |
| | | const uploadTask = uni.uploadFile({ |
| | | url: that.action, |
| | | filePath: filePath, |
| | | name: that.fileName, |
| | | formData: that.data, |
| | | header: that.headers, |
| | | // #ifdef MP-ALIPAY |
| | | fileType: filetype, |
| | | // #endif |
| | | success: (uploadFileRes) => { |
| | | const data = JSON.parse(uploadFileRes.data) |
| | | uni.hideLoading(); |
| | | that.success(data) |
| | | |
| | | if (!this.autoUpload) { |
| | | that.FileList.map((item, index) => { |
| | | if (item === filePath || item.path === filePath) { |
| | | that.FileList.splice(index, 1) |
| | | } |
| | | }) |
| | | } |
| | | |
| | | resolve(data) |
| | | }, |
| | | fail: (error) => { |
| | | uni.hideLoading(); |
| | | console.error('error', error); |
| | | that.$emit('onError', error) |
| | | reject(error) |
| | | } |
| | | }); |
| | | |
| | | uploadTask.onProgressUpdate((res) => { |
| | | that.$emit('onProgress', { |
| | | ...res, |
| | | ...tempFile |
| | | }) |
| | | }); |
| | | }) |
| | | }, |
| | | |
| | | /** |
| | | * æå¨ä¸ä¼ |
| | | * */ |
| | | submit() { |
| | | |
| | | return new Promise((resolve, reject) => { |
| | | if (this.tempFile_paths.length <= 0) { |
| | | resolve([]) |
| | | } |
| | | |
| | | const uploadedFilePaths = this.tempFile_paths.map(item => { |
| | | return this.onBeforeUploadFile(item || item.path) |
| | | }) |
| | | |
| | | Promise.all(uploadedFilePaths).then(res => { |
| | | this.tempFile_paths = [] |
| | | resolve(res) |
| | | }).catch(err => { |
| | | reject(err) |
| | | }) |
| | | }) |
| | | |
| | | }, |
| | | |
| | | /** |
| | | * è¿åæ°æ® |
| | | * @param {array} data ä¸ä¼ æååçæ°æ® |
| | | * @return {array} è¿åæ°æ® |
| | | * */ |
| | | success(data) { |
| | | this.$emit('onSuccess', data); |
| | | |
| | | // èªå®ä¹æ°æ®ç»æ-éæ©æ§å¼å¯ |
| | | // const list = data.map(item=> { |
| | | // return JSON.parse(item).data.link; |
| | | // }) |
| | | // this.$emit('input', [...this.FileList, ...list]); |
| | | }, |
| | | /** |
| | | * å缩å¾ç |
| | | * @param {array} tempFilePaths 临æ¶è·¯å¾æ°ç» |
| | | * @return {array} 被å缩è¿çè·¯å¾æ°ç» |
| | | * */ |
| | | async compressImage(tempFilePaths) { |
| | | const that = this; |
| | | |
| | | return new Promise((resolve, reject) => { |
| | | |
| | | if (typeof tempFilePaths !== 'string') { |
| | | console.error('å缩路å¾é误') |
| | | reject([]) |
| | | } |
| | | |
| | | uni.showLoading({ |
| | | title: 'å缩ä¸...', |
| | | icon: 'loading', |
| | | }) |
| | | |
| | | // #ifdef H5 |
| | | this.canvasDataURL(tempFilePaths, { |
| | | quality: that.imageFormData.quality / 100 |
| | | }, (base64Codes) => { |
| | | resolve(base64Codes); |
| | | uni.hideLoading(); |
| | | }) |
| | | // #endif |
| | | |
| | | // #ifndef H5 |
| | | uni.compressImage({ |
| | | src: tempFilePaths, |
| | | quality: that.imageFormData.quality || 80, |
| | | success: res => { |
| | | resolve(res.tempFilePath); |
| | | uni.hideLoading(); |
| | | }, |
| | | fail(err) { |
| | | reject(err); |
| | | uni.hideLoading(); |
| | | } |
| | | }) |
| | | // #endif |
| | | |
| | | }) |
| | | }, |
| | | |
| | | /** |
| | | * H5å缩å¾çè´¨é |
| | | * @param {string} path å¾çè·¯å¾ |
| | | * @param {object} obj å缩é
ç½® |
| | | * @param {function} callback åè°å½æ° |
| | | * @return {string} base64 |
| | | * */ |
| | | canvasDataURL(path, obj, callback) { |
| | | var img = new Image(); |
| | | img.src = path; |
| | | img.onload = function () { |
| | | var that = this; |
| | | // é»è®¤ææ¯ä¾å缩 |
| | | var w = that.width, |
| | | h = that.height, |
| | | scale = w / h; |
| | | w = obj.width || w; |
| | | h = obj.height || (w / scale); |
| | | var quality = 0.8; // é»è®¤å¾çè´¨é为0.8 |
| | | //çæcanvas |
| | | var canvas = document.createElement('canvas'); |
| | | var ctx = canvas.getContext('2d'); |
| | | // åå»ºå±æ§èç¹ |
| | | var anw = document.createAttribute("width"); |
| | | anw.nodeValue = w; |
| | | var anh = document.createAttribute("height"); |
| | | anh.nodeValue = h; |
| | | canvas.setAttributeNode(anw); |
| | | canvas.setAttributeNode(anh); |
| | | ctx.drawImage(that, 0, 0, w, h); |
| | | // å¾åè´¨é |
| | | if (obj.quality && obj.quality <= 1 && obj.quality > 0) { |
| | | quality = obj.quality; |
| | | } |
| | | // qualityå¼è¶å°ï¼æç»å¶åºçå¾åè¶æ¨¡ç³ |
| | | var base64 = canvas.toDataURL('image/jpeg', quality); |
| | | // åè°å½æ°è¿åbase64çå¼ |
| | | callback(base64); |
| | | } |
| | | }, |
| | | |
| | | /** |
| | | * é¢è§å¾ç |
| | | * @param {string, object} item æä»¶ä¿¡æ¯ |
| | | * */ |
| | | previewImage(item) { |
| | | if (this.fileUrlType(item) === 'video') return false; |
| | | if (!this.isPreviewImage) return false; |
| | | |
| | | const imgs = this.FileList.filter(item => { |
| | | return this.fileUrlType(item) !== 'video' |
| | | }).map(item => item?.path ?? item) |
| | | const current = imgs.indexOf(item || item.path); |
| | | |
| | | uni.previewImage({ |
| | | current: current, |
| | | urls: imgs, |
| | | success() { |
| | | }, |
| | | fail(err) { |
| | | console.log(err); |
| | | } |
| | | }) |
| | | }, |
| | | |
| | | /** |
| | | * é¢è§è§é¢ |
| | | * @param {string, object} item æä»¶ä¿¡æ¯ |
| | | * @param {number} index ç´¢å¼ |
| | | * */ |
| | | previewVideo(item, index) { |
| | | this.$emit('onVideo', { |
| | | item, |
| | | index |
| | | }) |
| | | this.tempVideoUrl = item.path; |
| | | }, |
| | | |
| | | /** |
| | | * æ¯å¦imgç±»å |
| | | * @param {string, object} item æä»¶ä¿¡æ¯ |
| | | * @return {boolean} æ¯å¦imgç±»å |
| | | * */ |
| | | fileUrlType(file) { |
| | | const filePath = file.path || file; |
| | | |
| | | if (this.isBase64(filePath)) return 'image' |
| | | |
| | | const fileType = filePath.split('.').pop(); |
| | | |
| | | const IMAGE_REGEXP = /(jpeg|jpg|gif|png|svg|webp|jfif|bmp|dpg|image)/i |
| | | if (IMAGE_REGEXP.test(fileType)) { |
| | | return 'image'; |
| | | } else { |
| | | return 'video'; |
| | | } |
| | | }, |
| | | // 夿æ¯å¦æ¯base64 |
| | | isBase64(str) { |
| | | if (str === '' || typeof str !== 'string') return console.error('æä»¶è·¯å¾é误, base64', str); |
| | | return str.includes('blob:') || str.includes('data:image'); |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .cl-updata { |
| | | |
| | | .file-list { |
| | | display: grid; |
| | | |
| | | &-row { |
| | | display: inline-flex; |
| | | align-items: center; |
| | | position: relative; |
| | | |
| | | .play-img { |
| | | width: 100%; |
| | | } |
| | | |
| | | ._image { |
| | | height: 100%; |
| | | width: 100%; |
| | | } |
| | | |
| | | ._video { |
| | | position: relative; |
| | | width: 100%; |
| | | height: 100%; |
| | | overflow: hidden; |
| | | } |
| | | |
| | | .video-fixed { |
| | | position: absolute; |
| | | top: 0; |
| | | left: 0; |
| | | bottom: 0; |
| | | width: 100%; |
| | | height: 100%; |
| | | border-radius: 10rpx; |
| | | z-index: 96; |
| | | } |
| | | |
| | | .play { |
| | | position: absolute; |
| | | top: 50%; |
| | | left: 50%; |
| | | transform: translate(-50%, -50%); |
| | | width: 30%; |
| | | z-index: 95; |
| | | } |
| | | |
| | | .app_play { |
| | | position: absolute; |
| | | top: 50%; |
| | | left: 50%; |
| | | transform: translate(-50%, -50%); |
| | | width: 50rpx; |
| | | height: 50rpx; |
| | | } |
| | | |
| | | .remove { |
| | | position: absolute; |
| | | top: 0; |
| | | right: 0; |
| | | background-color: #373737; |
| | | height: 50rpx; |
| | | width: 50rpx; |
| | | border-bottom-left-radius: 200rpx; |
| | | z-index: 97; |
| | | |
| | | .image { |
| | | width: 20rpx; |
| | | height: 20rpx; |
| | | position: absolute; |
| | | right: 12rpx; |
| | | top: 12rpx; |
| | | } |
| | | } |
| | | } |
| | | |
| | | .add-image { |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | border: 2rpx dashed #ccc; |
| | | width: 100%; |
| | | height: 100%; |
| | | border-radius: 5rpx; |
| | | |
| | | &:active { |
| | | opacity: 0.8; |
| | | } |
| | | |
| | | ._image { |
| | | width: 40%; |
| | | } |
| | | } |
| | | } |
| | | |
| | | .mask { |
| | | background-color: #000; |
| | | position: fixed; |
| | | top: 0; |
| | | right: 0; |
| | | bottom: 0; |
| | | left: 0; |
| | | z-index: 99; |
| | | |
| | | .block { |
| | | padding: 0 30rpx; |
| | | position: absolute; |
| | | top: 50%; |
| | | left: 50%; |
| | | transform: translate(-50%, -50%); |
| | | width: 100%; |
| | | |
| | | .block_video { |
| | | width: 100%; |
| | | height: 78vh; |
| | | } |
| | | } |
| | | |
| | | ._root { |
| | | width: 60rpx; |
| | | height: 60rpx; |
| | | position: absolute; |
| | | left: 40rpx; |
| | | top: 5vh |
| | | } |
| | | } |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | { |
| | | "id": "cl-upload", |
| | | "displayName": "ä¸ä¼ å¾çãè§é¢ å
æ¬é¢è§ãå缩ãæå¨ä¸ä¼ ãuniCloudä¸ä¼ çåè½", |
| | | "version": "1.4.0", |
| | | "description": "ä¸ä¼ å¾çè§é¢ï¼æ¯ææå¨èªå¨ä¸ä¼ ï¼èªå®ä¹æ ·å¼ï¼uniCloudä¸ä¼ ãé¢è§ï¼å é¤çåè½", |
| | | "keywords": [ |
| | | "ä¸ä¼ å¾çï¼ä¸ä¼ è§é¢ï¼é¢è§ï¼å é¤ï¼", |
| | | "uniCloudä¸ä¼ " |
| | | ], |
| | | "repository": "", |
| | | "engines": { |
| | | "HBuilderX": "^3.5.3" |
| | | }, |
| | | "dcloudext": { |
| | | "type": "component-vue", |
| | | "sale": { |
| | | "regular": { |
| | | "price": "0.00" |
| | | }, |
| | | "sourcecode": { |
| | | "price": "0.00" |
| | | } |
| | | }, |
| | | "contact": { |
| | | "qq": "" |
| | | }, |
| | | "declaration": { |
| | | "ads": "æ ", |
| | | "data": "æ ", |
| | | "permissions": "æ " |
| | | }, |
| | | "npmurl": "" |
| | | }, |
| | | "uni_modules": { |
| | | "dependencies": [], |
| | | "encrypt": [], |
| | | "platforms": { |
| | | "cloud": { |
| | | "tcb": "y", |
| | | "aliyun": "y" |
| | | }, |
| | | "client": { |
| | | "Vue": { |
| | | "vue2": "y", |
| | | "vue3": "y" |
| | | }, |
| | | "App": { |
| | | "app-vue": "u", |
| | | "app-nvue": "u" |
| | | }, |
| | | "H5-mobile": { |
| | | "Safari": "y", |
| | | "Android Browser": "y", |
| | | "微信æµè§å¨(Android)": "y", |
| | | "QQæµè§å¨(Android)": "y" |
| | | }, |
| | | "H5-pc": { |
| | | "Chrome": "y", |
| | | "IE": "y", |
| | | "Edge": "y", |
| | | "Firefox": "y", |
| | | "Safari": "y" |
| | | }, |
| | | "å°ç¨åº": { |
| | | "微信": "y", |
| | | "é¿é": "y", |
| | | "ç¾åº¦": "u", |
| | | "åèè·³å¨": "y", |
| | | "QQ": "u", |
| | | "éé": "u", |
| | | "å¿«æ": "u", |
| | | "é£ä¹¦": "u", |
| | | "京ä¸": "u" |
| | | }, |
| | | "å¿«åºç¨": { |
| | | "å为": "u", |
| | | "èç": "u" |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | ### cl-upload ä¸ä¼ ç»ä»¶ |
| | | |
| | | > æ¯ææå¨èªå¨ä¸ä¼ ï¼æ ·å¼è°æ´ï¼åæ°é
ç½®ï¼é¢è§ï¼å é¤çåè½ |
| | | |
| | | |
| | | > `注æï¼æ¯æ¬¡ä¸ä¼ é½éè¦åè°å½æ°æ¥æ¶åæ°å¹¶ä¸æ·»å å°ä¸ç»ä»¶ç»å®çæ°ç»ä¸ä»¥ä¿ææ°æ®ä¸è´,è¿æ ·åæ¯å 为ç»ä»¶ä¸ç¥éæå¡ç«¯è¿åçæ°æ®æ ¼å¼ï¼ä¹å¯ä»¥å¨ç»ä»¶ä¸ä¿®æ¹promiseæ ¼å¼ ä¸å³æ°¸é¸` |
| | | |
| | | ### 注æäºé¡¹ |
| | | 1. ratio å¾çæ¯ä¾å±æ§é¨åææºä¸æ¯æï¼å¯éç¨height屿§ä»£æ¿ |
| | | 2. èªå®ä¹ææ¾æé®é¨å平尿å
¼å®¹æ§é®é¢ï¼å¯éæ©æ§å
³é |
| | | 3. å¼å¯å缩å¾çè¿åç临æ¶è·¯å¾æ²¡æå°¾ç¼ï¼å®æ¹apiçé®é¢ãçæºä¸æ²¡é®é¢ï¼ä¹å¯ä»¥å¨ä¸ä¼ çæ¶åæå¨æ·»å å°¾ç¼ |
| | | 4. **è§é¢å°åå¿
é¡»`https`, httpå¯è½å¯¼è´æ æ³æ¾ç¤ºå°é¢å¾** |
| | | 5. å¦ææ²¡æ¡ä»¶ç¨`https`é£å°±é
ç½®`cloudType: other` |
| | | |
| | | ### H5ä½éªå°å |
| | |  |
| | | |
| | | #### listæ°æ®æ ¼å¼ |
| | | |
| | | 1. æ°ç»æ ¼å¼ |
| | | ``` |
| | | ['å°å1','å°å2'] |
| | | ``` |
| | | 2. JSONæ ¼å¼ |
| | | ``` |
| | | [ |
| | | { |
| | | path: 'å°å1.png', |
| | | // å
¶ä»ä¿¡æ¯ |
| | | }, |
| | | { |
| | | path: 'å°å2.mp4', |
| | | poster: 'èªå®ä¹å°é¢.png' |
| | | // å
¶ä»ä¿¡æ¯ |
| | | }, |
| | | { |
| | | path: 'å°å3.mp4', |
| | | poster: require('../../static/c1.png'), // å°é¢ä¹å¯ä»¥æ¯æ¬å°å¾ç |
| | | // å
¶ä»ä¿¡æ¯ |
| | | }, |
| | | ] |
| | | ``` |
| | | |
| | | #### åºç¡ä½¿ç¨ |
| | | |
| | | ``` |
| | | <cl-upload v-model="list" action="请æ±å°å" @onSuccess="onSuccess"></cl-upload> |
| | | |
| | | methods: { |
| | | /** |
| | | * èªå¨ä¸ä¼ è¿åçæ¯ä¸å¼ å¾çä¿¡æ¯ |
| | | * æå¨ä¸ä¼ è¿åçæ¯å·²é䏿æå¾çæè
è§é¢ä¿¡æ¯ |
| | | * */ |
| | | onSuccess(reslut) { |
| | | // ææå¡ç«¯è¿åçå¾çå°åæ·»å å°listä¸ä¸ç»ä»¶æ°æ®åæ¥ |
| | | this.list.push(reslut.url) |
| | | }, |
| | | } |
| | | ``` |
| | | ### uniCloudä¸ä¼ |
| | | > ä¸å¥ä»£ç å®ç°ä¸ä¼ ,å°±æ¯è¿ä¹ç®å |
| | | |
| | | ``` |
| | | <cl-upload v-model="list" action="uniCloud"></cl-upload> |
| | | ``` |
| | | |
| | | ### èªå®ä¹æ ·å¼ |
| | | > éè¿ listStyle æ§å¶æ¯è¡æ°éãæ¯ä¾ãè¡é´è·ãåé´è·çå¸¸ç¨æ ·å¼ |
| | | |
| | | ``` |
| | | <cl-upload v-model="list" :listStyle="{ |
| | | columns: 2, |
| | | columnGap: '20rpx', |
| | | rowGap:'20rpx', |
| | | padding:'10rpx', |
| | | height:'300rpx', |
| | | radius:'20rpx' |
| | | }"> |
| | | <template v-slot:addImg> |
| | | <view class="newAddImg"> |
| | | <view>ï¼</view> |
| | | <text >æ·»å </text> |
| | | </view> |
| | | </template> |
| | | </cl-upload> |
| | | ``` |
| | | |
| | | ### é¢è§æ¨¡å¼ |
| | | > å
³éæ¾ç¤ºæ·»å æé®åå é¤æé® |
| | | ``` |
| | | <cl-upload v-model="list" :add="false" :remove="false"></cl-upload> |
| | | ``` |
| | | |
| | | ### æå¨ä¸ä¼ |
| | | |
| | | > éè¿ autoUpload å
³éæèªå¨ä¸ä¼ ï¼æäº¤çæ¶åéè¿ refs 主å¨è°ç¨ç»ä»¶ä¸ä¼ æ¹æ³ï¼è¿åæ¬æ¬¡æäº¤æåæå¡å¨è¿åæ°æ® |
| | | |
| | | ``` |
| | | <cl-upload |
| | | ref="upload2" |
| | | v-model="list2" |
| | | :autoUpload="false"></cl-upload> |
| | | |
| | | <button @tap="submit">æå¨æäº¤</button> |
| | | |
| | | methods: { |
| | | submit() { |
| | | /** |
| | | * 主å¨è°ç¨ç»ä»¶ä¸ä¼ æ¹æ³ |
| | | * */ |
| | | this.$refs.upload2.submit().then(reslut=>{ |
| | | console.log(reslut); // æ¬æ¬¡æäº¤æåæå¡å¨è¿åæ°æ® |
| | | |
| | | // ä¸ä¼ ç¬¬ä¸æ¹æå¡å¨éè¦æå¨åæ¥æ°æ® |
| | | // ä¸ä¼ uniCloudåä¸éè¦ |
| | | const imgUrls = reslut.list.map(imgInfo=> imgInfo.url); |
| | | this.list2 = [...this.list2, ...imgUrls] |
| | | }) |
| | | }, |
| | | } |
| | | ``` |
| | | |
| | | ### é
ç½®å é¤ååä¸ä¼ åé©å |
| | | ``` |
| | | / ** |
| | | * å¼å¯å é¤åé©å useBeforeDelete |
| | | * å¼å¯ä¸ä¼ åé©å useBeforeUpload |
| | | */ |
| | | <cl-upload v-model="list" |
| | | useBeforeDelete |
| | | useBeforeUpload |
| | | @beforeDelete="beforeDelete" |
| | | @beforeUpload="beforeUpload"></cl-upload> |
| | | |
| | | |
| | | methods: { |
| | | /** |
| | | * å é¤åé©å |
| | | * @param {Object} item å½åå é¤çå¾çæè
è§é¢ä¿¡æ¯ |
| | | * @param {Number} index å½åå é¤çå¾çæè§é¢ç´¢å¼ |
| | | * @param {Function} next è°ç¨æ¤å½æ°ç»§ç»æ§è¡ç»ä»¶å é¤é»è¾ |
| | | * */ |
| | | beforeDelete(item, index, next) { |
| | | uni.showModal({ |
| | | title: 'æç¤ºä¿¡æ¯', |
| | | content: 'ç¡®å®è¦å é¤è¿ä¸ªæä»¶åï¼', |
| | | success: res => { |
| | | if (res.confirm) { |
| | | // 模ææå¡å¨æ¥å£ |
| | | setTimeout(() => { |
| | | next(); |
| | | }, 1000); |
| | | } |
| | | } |
| | | }); |
| | | }, |
| | | /** |
| | | * ä¸ä¼ åé©å |
| | | * @param {Object} tempFile å½åä¸ä¼ æä»¶ä¿¡æ¯ |
| | | * @param {Function} next è°ç¨æ¤å½æ°ç»§ç»æ§è¡ç»ä»¶ä¸ä¼ é»è¾ |
| | | * */ |
| | | beforeUpload(tempFile, next) { |
| | | // èªå·±çä¸ä¼ é»è¾ |
| | | // 妿ä¸éè¦èµ°ç»ä»¶çä¸ä¼ é»è¾å°±ä¸ç¨è°ç¨next(), 使¯ä¸ä¼ å®è¦åæ¥å°list |
| | | } |
| | | } |
| | | ``` |
| | | |
| | | ## API |
| | | |
| | | | åæ° | 说æ | ç±»å | é»è®¤å¼ | å¯éå¼ | |
| | | | --- | --- | --- | --- | --- | |
| | | | action | ä¸ä¼ å°å | String |-| uniCloud | |
| | | | cloudPathAsRealPath | å¯ç¨ç®å½, ä»
unicloudé¿éäºæ¯æ`1.4.0` `HBuilderX 3.8.5` | Boolean |false| true | |
| | | | cloudType | åå¨äºç±»å(åä¸ªäºæå¡æªåå°é¢æ¹å¼ä¸åã otheré项æ¯videoä¿åºææ®µ,é¨å平尿å
¼å®¹æ§é®é¢) | String |oss| é¿éäº:oss ä¸çäº:vframe è
¾è®¯äº:process å
¶ä»:other | |
| | | | headers | 设置ä¸ä¼ ç请æ±å¤´é¨ | Object | - |- | |
| | | | data | ä¸ä¼ æ¶é带çé¢å¤åæ° | Object | - | - | |
| | | | fileName| æ è¯ç¬¦,å³å端æ¥å£åæ°å | String | file | - | |
| | | | fileType | æä»¶ç±»å | String | all | 'image', 'video', 'all' | |
| | | | imageFormData | ä¸ä¼ å¾çåæ° | Object | - | - | |
| | | | videoFromData | ä¸ä¼ è§é¢åæ° | Object | - | - | |
| | | | listStyle | åè¡¨æ ·å¼ |Object | - | - | |
| | | | isPreviewImage | æ¯å¦å¼å¯é¢è§å¾ç | Boolean | true |false | |
| | | | remove | æ¯å¦æ¾ç¤ºå é¤æé® | Boolean | true |false | |
| | | | add | æ¯å¦æ·»å æé® | Boolean | true |false | |
| | | | max | æå¤æ¾ç¤ºæ°é | Number | 9 | - | |
| | | | maxVideo | è§é¢æå¤§ä¸ä¼ æ°é | Number | ä¸éå¶ | - | |
| | | | deleteTitle| å é¤æç¤ºå¼¹çªæ é¢ | String | æç¤º | - | |
| | | | deleteText| å é¤æç¤ºå¼¹çªææ¡ | String | æ¨ç¡®è®¤è¦å é¤åï¼ | - | |
| | | | loadingText| å è½½ææ¡ | String | æ£å¨ä¸ä¼ ä¸... | - | |
| | | | useBeforeDelete| æ¯å¦å¼å¯å é¤åé©å | Boolean | false | true | |
| | | | useBeforeUpload | æ¯å¦å¼å¯ä¸ä¼ åé©å | Boolean | false | true | |
| | | | addImg| æ·»å æé®å¾ç | String | - | - | |
| | | | playImg| ææ¾æé®å¾ç | String | - | - | |
| | | | deleteImg| å 餿é®å¾ç | String | - | - | |
| | | | closeImg| å
³éè§é¢æé®å¾ç | String | - | - | |
| | | |
| | | #### imageFormData |
| | | |
| | | | åæ° | 说æ | ç±»å | é»è®¤å¼ | å¯éå¼ | |
| | | | --- | --- | --- | --- | --- | |
| | | | count | æå¤å¯ä»¥éæ©çå¾çå¼ æ° | number |9| - | |
| | | | sizeType | original åå¾ï¼compressed åç¼©å¾ | array | é»è®¤äºè
齿 |- | |
| | | | sourceType | ç¸åæè
ç¸æº | array | ['camera ', 'album'] | ['camera ', 'album'] | |
| | | | compress | æ¯å¦å¼å¯å¾çå缩 | Boolean | false | true | |
| | | | quality | å缩质é | number | 80 | - | |
| | | | size | å¾çå¤§å° | number | - | åä½MB | |
| | | |
| | | #### videoFromData |
| | | |
| | | | åæ° | 说æ | ç±»å | é»è®¤å¼ | å¯éå¼ | |
| | | | --- | --- | --- | --- | --- | |
| | | | maxDuration | ææè§é¢æé¿æææ¶é´ | number |60| æå¤60ç§ | |
| | | | camera | åæå头åæå头 | array | - |- | |
| | | | compressed | æ¯å¦å缩æéçè§é¢æºæä»¶ã | Boolean | true |- | |
| | | | sourceType | ç¸åæè
ç¸æº | array | ['camera ', 'album'] | ['camera ', 'album'] | |
| | | | size | è§é¢å¤§å° | number | - | åä½MB | |
| | | |
| | | #### listStyle |
| | | |
| | | | åæ° | 说æ | ç±»å | é»è®¤å¼ | å¯éå¼ | |
| | | | --- | --- | --- | --- | --- | |
| | | | columns | æ¯è¡æ°é | number |4| - | |
| | | | columnGap | è¡é´è· | string | '40rpx' |- | |
| | | | rowGap | åé´è· | string | '40rpx' |- | |
| | | | padding | å表å
è¾¹è· | string | '0 0rpx' |- | |
| | | | ratio | å¾çæ¯ä¾ | string | '1/1' | ä½çæ¬ææºä¸æ¯æ,å¯ä»¥éæ©height屿§ | |
| | | | height | å¾çé«åº¦ | string | '140rpx' |- | |
| | | | radius | å¾çåè§ | string | '6rpx' |- | |
| | | |
| | | #### Events |
| | | |
| | | | äºä»¶å | 说æ | åè°åæ° | |
| | | | --- | --- | --- | |
| | | | onSuccess | ä¸ä¼ æå | data: æå¡å¨è¿åæ°æ® | |
| | | | onError | ä¸ä¼ 失败 | error:éè¯¯ä¿¡æ¯ | |
| | | | onImage | ç¹å»å¾ç | item: å¾çä¿¡æ¯ index: åè¡¨ç´¢å¼ | |
| | | | onVideo | ç¹å»è§é¢ | item: è§é¢ä¿¡æ¯ index: åè¡¨ç´¢å¼ | |
| | | | onProgress | ä¸ä¼ è¿ç¨ | onProgressåæ°è¯´æ| |
| | | | onVideoMax | 触åè§é¢æå¤§æ°ééå¶ | maxVideo, fileLength| |
| | | | onImageSize | 触åå¾çæå¤§å°ºå¯¸éå¶ | å¾çä¿¡æ¯ | |
| | | | beforeDelete | å é¤åé©å | item: æä»¶ä¿¡æ¯ index:æä»¶ç´¢å¼ next:ç»§ç»æ§è¡å é¤é»è¾ | |
| | | | beforeUpload | ä¸ä¼ åé©å | tempFile: æä»¶ä¿¡æ¯ next:ç»§ç»æ§è¡å é¤é»è¾ | |
| | | |
| | | #### onProgressåæ°è¯´æ |
| | | | äºä»¶å | 说æ | |
| | | | --- | --- | |
| | | | progress | ä¸ä¼ è¿åº¦ç¾åæ¯ | |
| | | | totalBytesSent | å·²ç»ä¸ä¼ çæ°æ®é¿åº¦ | |
| | | | totalBytesExpectedToSend | 颿éè¦ä¸ä¼ çæ°æ®æ»é¿åº¦ | |
| | | |
| | | |
| | | ### [éå°é®é¢æè
讨论 uniapp å å
¥QQ群 553291781](https://jq.qq.com/?_wv=1027&k=5UkMN1QX) |
| | |
| | | return fmt; |
| | | } |
| | | |
| | | function getAllowdId() |
| | | { |
| | | return "ocUrg6nVVPhn-m6yNPg7igYnB64g,ocUrg6ud9UqAdLpqnA2sSf24EFd4,ocUrg6klrlpbPTnzMDr6R8WDmOXU,ocUrg6qawIzxqqzOHYy2a9YSfx_0"; |
| | | } |
| | | |
| | | function getSmsStatus(status) { |
| | | switch (status) { |
| | | case 0: |
| | |
| | | getUrlPar, |
| | | formatDate, |
| | | getSmsStatus, |
| | | getBackSmsStatus |
| | | getBackSmsStatus, |
| | | getAllowdId |
| | | } |