文件
fenleixinxi/uniapp/common/api/post.js
MiAn 111054d984 feat: 新增会员浏览/拨打额度并优化无图展示逻辑
新增会员每日浏览完整信息和拨打电话的额度配置,调整付费查看接口描述为解锁完整信息,优化帖子无图时的兜底展示逻辑,修复图片加载路径问题,删除废弃工具脚本。
2026-10-28 11:06:39 +08:00

76 行
3.6 KiB
JavaScript

此文件含有模棱两可的 Unicode 字符

此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。

/**
* 接口模块 · 信息发布 与 信息详情(用户端)
* 对应模块:发布表单 / 付费置帖 / 套餐发帖 / 草稿箱 / 内容展示 / 付费查看 / 评价互动
*/
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