diff --git a/api/app/index.js b/api/app/index.js index 379fd0e..ead0831 100644 --- a/api/app/index.js +++ b/api/app/index.js @@ -332,3 +332,63 @@ export function getMyCustomRequest(id) { method: 'get' }) } + +// 查询当前可参与的积分任务 +export function listPointTasks() { + return request({ + url: '/app/pointTask/active', + method: 'get' + }) +} + +// 查询积分任务详情和当前用户状态 +export function getPointTask(id) { + return request({ + url: '/app/pointTask/active/' + id, + method: 'get' + }) +} + +// 获取七牛任务截图上传凭证 +export function getPointTaskUploadToken(data) { + return request({ + url: '/app/pointTask/upload-token', + method: 'post', + data: data + }) +} + +// 提交积分任务 +export function submitPointTask(taskId, data) { + return request({ + url: '/app/pointTask/' + taskId + '/submit', + method: 'post', + data: data + }) +} + +// 重新提交审核未通过的积分任务 +export function resubmitPointTask(submissionId, data) { + return request({ + url: '/app/pointTask/submission/' + submissionId + '/resubmit', + method: 'post', + data: data + }) +} + +// 查询我的积分任务记录 +export function listMyPointTaskSubmissions(query) { + return request({ + url: '/app/pointTask/submission/my', + method: 'get', + params: query + }) +} + +// 查询我的积分任务提交详情 +export function getMyPointTaskSubmission(id) { + return request({ + url: '/app/pointTask/submission/my/' + id, + method: 'get' + }) +} diff --git a/marketing/task-covers/article-task-cover.png b/marketing/task-covers/article-task-cover.png new file mode 100644 index 0000000..e5747bb Binary files /dev/null and b/marketing/task-covers/article-task-cover.png differ diff --git a/marketing/task-covers/join-group-cover.png b/marketing/task-covers/join-group-cover.png new file mode 100644 index 0000000..c2c0a64 Binary files /dev/null and b/marketing/task-covers/join-group-cover.png differ diff --git a/pages.json b/pages.json index a760162..adc8c2e 100644 --- a/pages.json +++ b/pages.json @@ -138,6 +138,30 @@ "enablePullDownRefresh" : false } }, + { + "path" : "pages/task/index", + "style" : + { + "navigationBarTitleText" : "任务中心", + "enablePullDownRefresh" : true + } + }, + { + "path" : "pages/task/detail", + "style" : + { + "navigationBarTitleText" : "任务详情", + "enablePullDownRefresh" : true + } + }, + { + "path" : "pages/task/records", + "style" : + { + "navigationBarTitleText" : "我的任务", + "enablePullDownRefresh" : true + } + }, { "path" : "pages/mine/custom_requests", "style" : diff --git a/pages/mine/index.vue b/pages/mine/index.vue index 023e6eb..a769217 100644 --- a/pages/mine/index.vue +++ b/pages/mine/index.vue @@ -55,15 +55,15 @@ --> - + - 积分兑换 + class="text-olive cuIcon-formfill"> + 任务中心 - + - 兑换记录 + class="text-cyan cuIcon-medal"> + 我的任务 @@ -250,6 +250,20 @@ this.CreateAd() }, methods: { + pointTasks(){ + if (!this.userid) { + this.$refs.uToast.show({ type: 'success', message: '请先授权登录', icon: false }) + return + } + this.$tab.navigateTo('/pages/task/index') + }, + pointTaskRecords(){ + if (!this.userid) { + this.$refs.uToast.show({ type: 'success', message: '请先授权登录', icon: false }) + return + } + this.$tab.navigateTo('/pages/task/records') + }, lottery(){ this.$tab.navigateTo('/pages/mine/lottery') }, diff --git a/pages/task/detail.vue b/pages/task/detail.vue new file mode 100644 index 0000000..9850ded --- /dev/null +++ b/pages/task/detail.vue @@ -0,0 +1,158 @@ + + + + + diff --git a/pages/task/index.vue b/pages/task/index.vue new file mode 100644 index 0000000..7994673 --- /dev/null +++ b/pages/task/index.vue @@ -0,0 +1,96 @@ + + + + + diff --git a/pages/task/records.vue b/pages/task/records.vue new file mode 100644 index 0000000..f54f7d4 --- /dev/null +++ b/pages/task/records.vue @@ -0,0 +1,61 @@ + + + + + diff --git a/utils/qiniu.js b/utils/qiniu.js index e69de29..41bb8bf 100644 --- a/utils/qiniu.js +++ b/utils/qiniu.js @@ -0,0 +1,45 @@ +import { getPointTaskUploadToken } from '@/api/app/index.js' + +function fileNameFromPath(path) { + const clean = String(path || '').split('?')[0] + return clean.substring(clean.lastIndexOf('/') + 1) || ('task-' + Date.now() + '.jpg') +} + +function contentTypeOf(file) { + if (file && file.type) return file.type + const name = fileNameFromPath(file && file.path) + const ext = name.substring(name.lastIndexOf('.') + 1).toLowerCase() + if (ext === 'png') return 'image/png' + if (ext === 'webp') return 'image/webp' + return 'image/jpeg' +} + +/** 小程序直传任务截图到七牛云。 */ +export function uploadPointTaskImage(file) { + const filePath = file.path || file.tempFilePath + const fileName = file.name || fileNameFromPath(filePath) + const fileSize = Number(file.size || 0) + const contentType = contentTypeOf(file) + return getPointTaskUploadToken({ fileName, fileSize, contentType }).then(response => { + const data = response.data || {} + return new Promise((resolve, reject) => { + uni.uploadFile({ + url: data.uploadHost, + filePath: filePath, + name: 'file', + formData: { + token: data.uploadToken, + key: data.objectKey + }, + success: result => { + if (result.statusCode >= 200 && result.statusCode < 300) { + resolve({ objectKey: data.objectKey, localPath: filePath }) + return + } + reject(new Error('七牛上传失败,请重试')) + }, + fail: reject + }) + }) + }) +}