Files
sundynix-radio-mp/utils/api.js
T
2026-03-05 17:04:40 +08:00

269 lines
6.5 KiB
JavaScript

/**
* 早安电台 — 后端 API 接口封装
* 统一调用 request.js,对外暴露业务方法
*/
const { get, post } = require('./request')
// ======================== 登录相关 ========================
/** 小程序登录 (wx.login code → token + user) */
function miniLogin(code) {
return get('/auth/miniLogin', { code })
}
/** 获取位置信息 */
function getLocation(longitude, latitude) {
return get('/auth/getLocation', { longitude, latitude })
}
/** 获取天气 */
function getWeather(adcode) {
return get('/auth/getWeather', { adcode })
}
/** 获取手机号 */
function getPhone(code, openId) {
return get('/auth/getPhone', { code, openId })
}
// ======================== 分类管理 ========================
/** 获取分类列表(全量) */
function getCategoryList() {
return get('/radio/category/list')
}
/** 获取分类树 */
function getCategoryTree() {
return get('/radio/category/tree')
}
// ======================== 频道管理 ========================
/** 获取频道列表(分页) */
function getChannelList(params) {
return post('/radio/channel/list', {
current: params.current || 1,
pageSize: params.pageSize || 50,
categoryId: params.categoryId || '',
status: 1 // 仅上架
})
}
/** 获取免费频道列表 */
function getFreeChannelList(params) {
return post('/radio/channel/freeList', {
current: (params && params.current) || 1,
pageSize: (params && params.pageSize) || 20,
keyword: (params && params.keyword) || ''
})
}
/** 获取频道详情 */
function getChannelDetail(id) {
return get('/radio/channel/detail', { id })
}
// ======================== 节目管理 ========================
/** 获取节目列表(分页,需传 channelId) */
function getProgramList(params) {
return post('/radio/program/list', {
channelId: params.channelId,
current: params.current || 1,
pageSize: params.pageSize || 50,
status: 1
})
}
/** 获取节目详情 */
function getProgramDetail(id) {
return get('/radio/program/detail', { id })
}
// ======================== 订阅管理 ========================
/** 获取我的订阅列表 */
function getSubscriptionList(params) {
return post('/radio/subscription/list', {
current: (params && params.current) || 1,
pageSize: (params && params.pageSize) || 50
})
}
/** 检查是否可以订阅 */
function canSubscribe(channelId) {
return post('/radio/subscription/can-subscribe', { channelId })
}
/** 订阅频道 */
function subscribe(channelId) {
return post('/radio/subscription/subscribe', { channelId })
}
/** 退订频道 */
function unsubscribe(channelId) {
return post('/radio/subscription/unsubscribe', { channelId })
}
// ======================== 收听历史 ========================
/** 添加收听历史 */
function addHistory(params) {
return post('/history/add', {
programId: params.programId,
progress: params.progress || 0,
duration: params.duration || 0
})
}
/** 获取收听历史列表 */
function getHistoryList(params) {
return post('/history/list', {
current: (params && params.current) || 1,
pageSize: (params && params.pageSize) || 20
})
}
/** 删除单条收听历史 */
function deleteHistory(programId) {
return post('/history/delete', { programId })
}
/** 清空全部收听历史 */
function deleteAllHistory() {
return get('/history/deleteAll')
}
// ======================== 收藏 ========================
/** 添加收藏 */
function addFavorite(programId) {
return post('/favorite/add', { programId })
}
/** 取消收藏 */
function removeFavorite(programId) {
return post('/favorite/remove', { programId })
}
/** 清空全部收藏 */
function removeAllFavorites() {
return get('/favorite/removeAll')
}
/** 获取收藏列表 */
function getFavoriteList(params) {
return post('/favorite/list', {
current: (params && params.current) || 1,
pageSize: (params && params.pageSize) || 20
})
}
// ======================== 点赞 / 评论 ========================
/** 切换点赞 */
function toggleLike(programId) {
return post('/like/toggle', { programId })
}
/** 添加评论 */
function addComment(programId, content) {
return post('/comment/add', { programId, content })
}
/** 删除评论 */
function deleteComment(id) {
return post('/comment/delete', { id })
}
/** 获取评论列表 */
function getCommentList(programId, params) {
return post('/comment/list', {
programId,
current: (params && params.current) || 1,
pageSize: (params && params.pageSize) || 20
})
}
/** 获取当前登录用户 */
/** 获取 VIP 配置(价格等) */
function getVipConfig() {
return post('/vip/config/detail', {})
}
/** 发起 VIP 开通预支付 */
function initiateVipPayment() {
return post('/vip/vip',{})
}
function getUserInfo() {
return get('/user/info')
}
/** 付费订阅频道(传入方案 monthly/quarterly/annual 和价格) */
function subscribeChannel(params) {
return post('/radio/subscription/pay', params)
}
/**
* 主动查询微信支付状态
* @param {string} outTradeNo 商户订单号(上游返回)
* @returns {Promise<boolean>} true = 支付成功
*/
function queryPayStatus(outTradeNo) {
return get('/pay/query', { outTradeNo })
.then(function (res) {
// 后端返回 bool 或 { data: bool }
if (typeof res === 'boolean') return res
if (typeof res.data === 'boolean') return res.data
return res.code === 200 && !!res.data
})
}
/**
* 频道解锁(唇起微信支付骄支付单)
* @param {string} channelId
* @param {string} type '1'=包月 '2'=包季 '3'=包年
*/
function unlockChannel(channelId, type) {
return post('/radio/subscription/unlock', { channelId, type })
}
module.exports = {
miniLogin,
getLocation,
getWeather,
getPhone,
getCategoryList,
getCategoryTree,
getChannelList,
getFreeChannelList,
getChannelDetail,
getProgramList,
getProgramDetail,
getSubscriptionList,
canSubscribe,
subscribe,
unsubscribe,
addHistory,
getHistoryList,
deleteHistory,
deleteAllHistory,
addFavorite,
removeFavorite,
removeAllFavorites,
getFavoriteList,
toggleLike,
addComment,
deleteComment,
getCommentList,
getVipConfig,
initiateVipPayment,
getUserInfo,
subscribeChannel,
unlockChannel,
queryPayStatus
}