const express = require('express'); const { getResolvedUserWithPageAccess } = require('../services/pageAccess'); const { getOpsBIncentiveBoard, getOpsBIncentiveBatches, getOpsBIncentiveDaily } = require('../services/opsBIncentiveBoardService'); const { getAlibaba1688Product } = require('../services/alibaba1688ProductService'); const { attachEncodingDetail } = require('../services/alibaba1688ProductEncodingRegistry'); const router = express.Router(); async function ensurePlanningUploadAccess(req) { const user = await getResolvedUserWithPageAccess(req.user.sub); if (!user || (user.role !== 'admin' && !user.allowedPageKeys?.includes('ops_b_incentive'))) { const error = new Error('当前账号没有激励看板权限'); error.status = 403; throw error; } return user; } async function ensureSelectionFissionAccess(req) { // Selection workflows are available to every authenticated user. They share // this router with template uploads, but must not inherit upload permissions. return getResolvedUserWithPageAccess(req.user.sub); } router.get('/selection-fission/1688-products/:productId', async (req, res) => { try { await ensureSelectionFissionAccess(req); const result = await attachEncodingDetail( await getAlibaba1688Product(req.params.productId) ); res.setHeader('Cache-Control', 'private, no-store, no-cache, must-revalidate'); res.setHeader('Pragma', 'no-cache'); res.json({ success: true, data: result }); } catch (error) { console.error('获取1688待上架商品详情失败:', error); res.status(error.statusCode || error.status || 500).json({ success: false, error: error.message || '获取1688待上架商品详情失败', }); } }); router.get('/analysis/ops-b-incentive/batches', async (req, res) => { try { await ensurePlanningUploadAccess(req); const data = await getOpsBIncentiveBatches(); res.json({ success: true, data }); } catch (error) { console.error('获取运营中心B激励看板批次列表失败:', error); res.status(error.status || 500).json({ error: error.message || '获取运营中心B激励看板批次列表失败', }); } }); router.get('/analysis/ops-b-incentive', async (req, res) => { try { await ensurePlanningUploadAccess(req); const result = await getOpsBIncentiveBoard(req.query || {}); res.json({ success: true, data: result }); } catch (error) { console.error('获取运营中心B拼多多激励看板失败:', error); res.status(error.status || 500).json({ error: error.message || '获取运营中心B拼多多激励看板失败', }); } }); router.get('/analysis/ops-b-incentive/daily', async (req, res) => { try { await ensurePlanningUploadAccess(req); const result = await getOpsBIncentiveDaily(req.query || {}); res.json({ success: true, data: result }); } catch (error) { console.error('获取运营中心B拼多多激励每日明细失败:', error); res.status(error.status || 500).json({ error: error.message || '获取运营中心B拼多多激励每日明细失败', }); } }); module.exports = router;