76 行
3.6 KiB
JavaScript
76 行
3.6 KiB
JavaScript
/**
|
||
* 接口模块 · 信息发布 与 信息详情(用户端)
|
||
* 对应模块:发布表单 / 付费置帖 / 套餐发帖 / 草稿箱 / 内容展示 / 付费查看 / 评价互动
|
||
*/
|
||
import { get, post, del, buildUrl, buildHeaders } from '../utils/request.js'
|
||
|
||
export const postApi = {
|
||
/**
|
||
* 上传发布媒体(图片 / 视频)
|
||
* 契约 §2.1:POST /post/upload multipart `file`(+可选 `type=image|video`)→ {url,type,size,name}
|
||
* 小程序环境走 uni.uploadFile(multipart/form-data,带 Authorization)。
|
||
* @param {String} filePath uni.chooseImage / uni.chooseVideo 得到的临时路径
|
||
* @param {'image'|'video'} type
|
||
* @returns {Promise<{url:string,type:string,size:number,name:string}>}
|
||
*/
|
||
uploadMedia(filePath, type = 'image') {
|
||
const kind = type === 'video' ? 'video' : 'image'
|
||
if (typeof uni === 'undefined' || !uni.uploadFile) {
|
||
return post('/post/upload', { file: filePath, type: kind }, { silent: true })
|
||
}
|
||
return new Promise((resolve, reject) => {
|
||
const header = buildHeaders()
|
||
// uni.uploadFile 自行设置 multipart 边界,不能带 application/json
|
||
delete header['Content-Type']
|
||
uni.uploadFile({
|
||
url: buildUrl('/post/upload'),
|
||
filePath,
|
||
name: 'file',
|
||
formData: { type: kind },
|
||
header,
|
||
success: (res) => {
|
||
let body = res && res.data
|
||
try {
|
||
body = JSON.parse(res.data)
|
||
} catch (e) {}
|
||
if (body && body.code === 0) {
|
||
resolve(body.data)
|
||
return
|
||
}
|
||
reject(new Error((body && body.message) || '上传失败'))
|
||
},
|
||
fail: () => reject(new Error('上传失败')),
|
||
})
|
||
})
|
||
},
|
||
/** 发布信息(返回审核状态,付费时返回支付订单;金额由服务端按后台配置计算) */
|
||
create: (payload) => post('/post/create', payload, { silent: true }),
|
||
/** 我的发布(status: all 默认 / pending 待审核 / passed 已通过 / rejected 已驳回 / offline 已下架) */
|
||
mine: (params = {}) => get('/post/mine', params, { silent: true }),
|
||
/** 发布配置(发布模式 free/paid、单条与月/年卡价格条数、我的剩余额度) */
|
||
publishConfig: () => get('/post/publish-config', {}, { silent: true }),
|
||
/** 草稿:列表 */
|
||
drafts: () => get('/post/drafts', {}, { silent: true }),
|
||
/** 草稿:保存 */
|
||
saveDraft: (payload) => post('/post/draft', payload, { silent: true }),
|
||
/** 草稿:删除 */
|
||
deleteDraft: (draftId) => post('/post/draft/delete', { draftId }, { silent: true }),
|
||
/** 删除信息 */
|
||
remove: (id) => del(`/post/${id}`, {}, { silent: true }),
|
||
|
||
/** 详情(accessOnly=1:仅回读解锁态,不计浏览量) */
|
||
detail: (id, params = {}) => get(`/post/${id}`, params, { silent: true }),
|
||
/** 申请拨打联系电话(校验每日拨打次数上限并记录拨打日志) */
|
||
dial: (id, payload = {}) => post(`/post/${id}/dial`, payload, { silent: true }),
|
||
/** 解锁完整信息(单条付费解锁,余额/微信;免费公开模式无需调用) */
|
||
payView: (id, payload) => post(`/post/${id}/pay-view`, payload, { silent: true }),
|
||
/** 发表评价(评分 + 图文) */
|
||
comment: (id, payload) => post(`/post/${id}/comment`, payload, { silent: true }),
|
||
/** 发布者回复评价 */
|
||
replyComment: (commentId, payload) => post(`/post/comment/${commentId}/reply`, payload, { silent: true }),
|
||
/** 评价列表(详情页「用户评价」,替代前端写死的假评价) */
|
||
comments: (id) => get(`/post/${id}/comments`, {}, { silent: true }),
|
||
}
|
||
|
||
export default postApi
|