123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245 |
- <template>
- <view class='t-toptips' :style="{top: top,background: cubgColor}" :class="[show?'t-top-show':'']">
- <view v-if="loading" class="flex flex-sub">
- <view class="cu-progress flex-sub round striped active sm">
- <view :style="{ background: color,width: value + '%'}"></view>
- </view>
- <text class="margin-left">{{value}}%</text>
- </view>
- <block v-else>{{msg}}</block>
-
- </view>
- </template>
- <script>
- import config from "../../core/api.js"
- export default {
- props: {
- top: {
- type: String,
- default: 'auto'
- },
- bgColor: {
- type: String,
- default: 'rgba(49, 126, 243, 0.5)',
- },
- color: {
- type: String,
- default: '#e54d42',
- }
- },
- data() {
- return {
- cubgColor: '',
- loading: false,
- value: 5,
- show: false,
- msg: '执行完毕~',
- }
- },
- methods: {
- toast(title = '',{ duration = 2000, icon = 'none'} = {}) {
- uni.showToast({title,duration,icon});
- },
- getRequest(url) {
- let theRequest = new Object();
- let index = url.indexOf("?");
- if (index != -1) {
- let str = url.substring(index+1);
- let strs = str.split("&");
- for(let i = 0; i < strs.length; i ++) {
- theRequest[strs[i].split("=")[0]]=unescape(strs[i].split("=")[1]);
- }
- }
- return theRequest;
- },
- appChooseFile({currentWebview,url,name = 'file',header,...formData} = {}) {
- // #ifdef APP-PLUS
- let wv = plus.webview.create("","hybrid/html/index.html",{
- 'uni-app': 'none', //不加载uni-app渲染层框架,避免样式冲突
- top: 0,
- height: '100%',
- background: 'transparent'
- },{
- url,
- header,
- key: name,
- ...formData,
- });
- console.log(config.api)
- wv.loadURL(config.api + "/resources" + "/hybrid/html/index.html")
- currentWebview.append(wv);
- wv.overrideUrlLoading({mode:'reject'},(e)=>{
- let {fileName,id} = this.getRequest(e.url);
- fileName = unescape(fileName);
- id = unescape(id);
- return this.onCommit(
- this.$emit('up-success',{fileName,data: {id,statusCode: 200}})
- );
- });
- // #endif
- },
- wxChooseFile({url,name = 'file',header,...formData} = {}) {
- wx.chooseMessageFile({
- count: 1,
- /* type: 'image', */
- success: ({tempFiles}) => {
- let [{path:filePath,name:fileName}] = tempFiles;
- this.setdefUI();
-
- return uni.uploadFile({
- url,
- name,
- filePath,
- formData,
- header,
- success: (res) => {
- if (res.statusCode==200) {
- let data = JSON.parse(res.data);
-
- //可自行添加后台返回状态验证
- return this.onCommit(this.$emit('up-success',{fileName,data}));
- }
- return this.errorHandler('文件上传失败',this.upErr);
- },
- fail: () => this.errorHandler('文件上传失败',this.upErr)
- });
- },
- fail: () => this.errorHandler('文件选择失败',this.upErr)
- })
- },
- /*
- 上传
- */
- upload(param = {}) {
-
- if (!param.url) {
- this.toast('上传地址不正确');
- return;
- }
-
- if (this.loading) {
- this.toast('还有个文件玩命处理中,请稍候..');
- return;
- }
-
-
- // #ifdef APP-PLUS
- return this.appChooseFile(param);
-
- // #endif
-
- // #ifdef MP-WEIXIN
- return this.wxChooseFile(param);
- // #endif
- },
- /*
- 打开文件
- */
- open(filePath) {
- let system = uni.getSystemInfoSync().platform;
- if(system == 'ios'){
- filePath = encodeURI(filePath);
- }
- uni.openDocument({
- filePath,
- success: (res) => {console.log('打开文档成功');}
- });
- },
- /*
- 下载
- type: temporary=返回临时地址,local=长期保存到本地
- */
- download(url,type = 'temporary') {
- if (this.loading) {
- this.toast('还有个文件玩命处理中,请稍候..');
- return;
- }
- this.setdefUI();
-
- return new Promise((resolve,reject)=>{
- let downloadTask = uni.downloadFile({
- url,
- success: ({statusCode,tempFilePath}) => {
- if (statusCode === 200) {
- if (type == 'local') {
- uni.saveFile({
- tempFilePath,
- success:({savedFilePath}) => this.onCommit(resolve(savedFilePath)),
- fail: () => this.errorHandler('下载失败',reject)
- });
- }
- else {
- this.onCommit(resolve(tempFilePath))
- }
- }
- },
- fail: () => this.errorHandler('下载失败',reject)
- });
-
- downloadTask.onProgressUpdate(({progress = 0}) => {
- if (progress <= 100) {
- this.$nextTick(()=>{
- this.value = progress;
- });
- }
- });
- })
-
- },
-
- onCommit(resolve) {
- this.msg = '执行完毕~';
- this.loading = false;
- this.cubgColor = 'rgba(57, 181, 74, 0.5)';
- setTimeout(()=>{this.show = false;},1500);
- return resolve;
- },
-
- setdefUI() {
- this.cubgColor = this.bgColor;
- this.value = 0;
- this.loading = true;
- this.show = true;
- },
-
- upErr(errText) {
- this.$emit('up-error',errText);
- },
-
- errorHandler(errText,reject) {
- this.msg = errText;
- this.loading = false;
- this.cubgColor = 'rgba(229, 77, 66, 0.5)';
- setTimeout(()=>{this.show = false;},1500);
- return reject(errText);
- }
- }
- }
- </script>
- <style scoped>
- .t-toptips {
- width: 100%;
- padding: 18upx 30upx;
- box-sizing: border-box;
- position: fixed;
- z-index: 90;
- color: #fff;
- font-size: 30upx;
- left: 0;
- display: flex;
- align-items: center;
- justify-content: center;
- word-break: break-all;
- opacity: 0;
- transform: translateZ(0) translateY(-100%);
- transition: all 0.3s ease-in-out;
- }
-
- .t-top-show {
- transform: translateZ(0) translateY(0);
- opacity: 1;
- }
-
- </style>
|