Skip to content

Commit

Permalink
uploader, wechat api, query
Browse files Browse the repository at this point in the history
  • Loading branch information
szuprefix committed Aug 30, 2020
1 parent d9884c2 commit 15a80f2
Show file tree
Hide file tree
Showing 6 changed files with 203 additions and 8 deletions.
144 changes: 144 additions & 0 deletions src/components/media/qcloud/mobile/Uploader.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,144 @@
<template>
<uploader :after-read="afterRead" @delete="onDelete" v-model="fileList" v-bind="[$props, $attrs]"/>
</template>
<script>
import {Uploader} from 'vant'
import TcCos from 'cos-js-sdk-v5'
import {format} from 'date-fns'
import {template} from 'lodash'
import ServerResponse from 'vue-django/src/mixins/server_response'
export default{
mixins: [ServerResponse],
props: {
signUrl: String,
fileName: String,
context: Object,
bucket: String,
region: {type: String, default: 'ap-guangzhou'},
value: {type: Array, default: () => []}
},
data () {
return {
fileList: this.genFileList(),
elUploader: undefined,
tcCos: new TcCos({
getAuthorization: this.getAuthorization
})
}
},
components: {Uploader},
methods: {
genFileList () {
return this.value.map(u => {
return {url: u}
})
},
getAuthorization (options, callback) {
let signUrl = template(this.signUrl)(this.context)
return this.$http.post(signUrl).then(({data}) => {
let d = {
TmpSecretId: data.credentials.tmpSecretId,
TmpSecretKey: data.credentials.tmpSecretKey,
XCosSecurityToken: data.credentials.sessionToken,
StartTime: data.startTime,
ExpiredTime: data.expiredTime,
}
callback(d)
})
},
afterRead (file, detail) {
let fs
if (file instanceof Array) {
fs = file
} else {
fs = [file]
}
fs.forEach(f => {
this.uploadFile(f).then(data => {
let url = 'https://' + data.Location
this.fileList[detail.index] = Object.assign(this.fileList[detail.index], {url})
this.onChange()
this.$emit('uploaded', {...detail, url, name: data.name})
}).catch(this.onServerResponseError)
})
},
onChange () {
this.$emit('input', this.fileList.map(a => a.url))
// console.log(this.fileList)
},
onDelete (file, detail) {
this.onChange()
this.$emit('delete', detail)
},
getFileNumber(fn) {
let re = /(\d+)\./g
let m = re.exec(fn)
if (m) {
return m[1]
}
},
getFileNameContext (fn) {
let ps = fn.split('.')
let extName
let fileName = fn
let baseName = fn
if (ps.length > 1) {
extName = ps[ps.length - 1]
baseName = fn.substr(0, fn.length - 1 - extName.length)
}
let d = new Date()
let dateTime = format(d, 'YYYYMMDDHHmmssSSS')
return {
extName,
fileName,
baseName,
dateTime,
number: this.getFileNumber(fn)
}
},
uploadFile (req) {
req.status = 'uploading'
req.message = '上传中...'
let file = req.file
let fn = file.name
let ctx = {...this.context, ...this.getFileNameContext(fn)}
file.uploadContext = ctx
// console.log(ctx)
let fileName = template(this.fileName || '${dateTime}.${extName}')(ctx)
// console.log(fileName)
// return
return new Promise((resolve, reject) => {
this.tcCos.putObject({
Bucket: this.bucket, /* 必须 */
Region: this.region, /* 存储桶所在地域,必须字段 */
Key: fileName,
Body: file,
onProgress: function (info) {
// console.log('tcCos.onProgress', info, file)
req.message = `${info.percent * 100}%`
// req.onProgress(info)
}
}, function (err, data) {
// console.log(err || data)
data.name = fn
if (err) {
req.status = 'failed'
req.message = '上传失败'
reject(err)
} else {
req.status = undefined
req.message = undefined
resolve(data)
}
})
})
}
},
computed: {},
watch: {
value () {
this.fileList = this.genFileList()
}
}
}
</script>
5 changes: 3 additions & 2 deletions src/components/mobile/model/List.vue
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,8 @@
queries: {type: Object, default: {}},
layout: {type: String, default: 'panel'},
prepare: Function,
pageSize: {type: Number, default: 20}
pageSize: {type: Number, default: 20},
url: String
},
data () {
return {
Expand All @@ -49,7 +50,7 @@
qd.owner_id = this.owner.id
}
this.loading = true
return this.model.query(qd).then(data => {
return this.model.query(qd, this.url).then(data => {
this.loading = false
this.count = data.count
let ds = data.results
Expand Down
9 changes: 6 additions & 3 deletions src/components/model/Model.js
Original file line number Diff line number Diff line change
Expand Up @@ -144,8 +144,11 @@ export default function (appModel, defaults, eventor) {
let mid = id || this.id
return `${this.getListUrl()}${mid}/`
},
query (d) {
return axios.get(`${this.getListUrl()}?${Qs.stringify(d, {arrayFormat: 'comma'})}`).then(({data}) => {
query (d, url) {
if (!url) {
url = this.getListUrl()
}
return axios.get(`${url}?${Qs.stringify(d, {arrayFormat: 'comma'})}`).then(({data}) => {
return data
})
},
Expand All @@ -159,7 +162,7 @@ export default function (appModel, defaults, eventor) {
return import(`@/views${this.getListUrl()}config.js`).then(m => {
return m.default || {}
}).catch((err) => {
console.warn(err, '找不到视图配置,将使用默认配置')
console.warn(`找不到视图配置@/views${this.getListUrl()}config.js,将使用默认配置`)
return {}
}).then(config => {
this.viewsConfig = config
Expand Down
44 changes: 44 additions & 0 deletions src/components/wechat/Api.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
/**
* Created by denishuang on 2020/8/27.
*/

import $script from 'scriptjs'
import axios from '../../configs/axios'
var inited = false
export function init (options) {
if (inited) {
return
}
$script([
'https://res.wx.qq.com/open/js/jweixin-1.6.0.js',
], () => {
return axios.get(`/wechat/mp/jsapi/config/`).then(({data}) => {
if (data.signature) {
data.signature = data.signature.toLowerCase()
}
data.nonceStr = data.noncestr
window.wx.config({
debug: window.wx_debug,
...data,
...options
})
inited = true
})
})
}

export function dataURLtoFile (dataurl, filename) {
var arr = dataurl.split(',')
var mime = arr[0].match(/:(.*?);/)[1]
var bstr = atob(arr[1])
var n = bstr.length
var u8arr = new Uint8Array(n)
while (n--) {
u8arr[n] = bstr.charCodeAt(n)
}
return new File([u8arr], filename, {type: mime})
}

export default {
init
}
2 changes: 1 addition & 1 deletion src/mixins/server_response.js
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ export default {
if ([404,403,405,406,429, 537].includes(error.code) && error.msg.detail) {
error.msg = error.msg.detail
}
console.log(error)
console.error(error)
if (error.code === 400) {
// this.errors = this.formErrors = joinErrors(error.msg)
} else if (error.code === 401) {
Expand Down
7 changes: 5 additions & 2 deletions src/utils/app_model.js
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,11 @@ export function AppModel (config) {
return data
})
},
query (d) {
return axios.get(`${this.listUrl}?${Qs.stringify(d, {arrayFormat: 'comma'})}`).then(({data}) => {
query (d, url) {
if (!url) {
url = this.listUrl
}
return axios.get(`${url}?${Qs.stringify(d, {arrayFormat: 'comma'})}`).then(({data}) => {
return data
})
},
Expand Down

0 comments on commit 15a80f2

Please sign in to comment.