From c705e0b5aef5cd0778b78ec563cb71f06780b4d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=91=A3=E5=AE=8F=E5=87=AF?= Date: Wed, 10 Jun 2026 19:08:32 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A0=B7=E5=BC=8F=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../task-components/task-mock-data.ts | 437 ------------------ frontend-web/src/utils/request.ts | 6 - 2 files changed, 443 deletions(-) delete mode 100644 frontend-web/src/strategy-components/components/task-components/task-mock-data.ts diff --git a/frontend-web/src/strategy-components/components/task-components/task-mock-data.ts b/frontend-web/src/strategy-components/components/task-components/task-mock-data.ts deleted file mode 100644 index e91db4ea..00000000 --- a/frontend-web/src/strategy-components/components/task-components/task-mock-data.ts +++ /dev/null @@ -1,437 +0,0 @@ -import { TaskListItem } from './TaskManagement'; - -/** - * 任务看板假数据 —— 用于在没有后端 `/task/cop-tasks` / `/three/cop-three-tasks` - * 接口时,给「任务分析」「三情分析」两个页面提供演示数据。 - * - * 用法:把组件里的 `await service.post(url, payload)` 换成 - * `await mockCopTasks('task' | 'sentiment', taskType, payload)` - * 返回结构与真实接口保持一致:`{ data: { records, total } }`。 - */ - -export type MockColumnType = 'unanalyzed' | 'running' | 'completed'; -export type MockDataset = 'task' | 'sentiment'; - -interface MockTaskSeed { - taskName: string; - overview: string; - taskDirection: string; - taskLevel: number; // 1 一般 / 2 紧急 / 3 加急 - taskType: number; // 1 单任务 / 2 场景 / 3 会商 / 4 多智能体 / 5 检索 -} - -/** 列 → 状态码,与组件内 taskStatusMap 对齐。 */ -const COLUMN_STATUS: Record = { - unanalyzed: 0, - running: 20, - completed: 30, -}; - -/** 生成一条完整的 TaskListItem,仅覆盖有意义的字段,其余给安全默认值。 */ -function makeTask( - id: number, - column: MockColumnType, - seed: MockTaskSeed, - createTime: string, - updateTime: string, -): TaskListItem { - return { - createBy: 1001, - createTime, - deptId: null, - id, - isTop: 0, - issuingDept: '战略规划处', - keywords: null, - overview: seed.overview, - planTaskTop: 0, - platform: null, - ptaskId: null, - recommendedBasis: null, - scene: '', - sourceType: 1, - step: null, - taskContent: seed.overview, - taskDirection: seed.taskDirection, - taskEndDate: '2026-06-30 18:00:00', - taskLevel: seed.taskLevel, - taskName: seed.taskName, - taskNo: `T-${String(id).padStart(6, '0')}`, - taskStartDate: '2026-06-01 09:00:00', - taskStatus: COLUMN_STATUS[column], - taskSuperiorFlag: 0, - taskType: seed.taskType, - column, - updateBy: 1001, - updateTime, - endCount: column === 'completed' ? 1 : 0, - sumAll: 1, - progress: column === 'completed' ? 100 : column === 'running' ? 60 : 0, - taskStatusData: null, - } as TaskListItem; -} - -/** 「任务分析」页(业务码 6BF)数据种子。 */ -const TASK_SEEDS: Record = { - unanalyzed: [ - { - taskName: '夏季文旅消费季传播任务分析', - overview: - '围绕"夏季文旅消费季"主题,梳理传播目标、核心受众与潜在策略阻力,输出可执行的任务拆解建议。', - taskDirection: '王磊', - taskLevel: 2, - taskType: 1, - }, - { - taskName: '新能源补贴政策解读专题', - overview: - '针对新一轮新能源汽车补贴政策,分析公众关注焦点与误读风险点,形成政策解读传播要点清单。', - taskDirection: '李婷', - taskLevel: 1, - taskType: 5, - }, - { - taskName: '城市更新片区舆论引导任务', - overview: - '对老城区改造涉及的拆迁、安置等敏感议题进行任务目标拆解,识别需要重点回应的群体诉求。', - taskDirection: '张伟', - taskLevel: 3, - taskType: 2, - }, - { - taskName: '高校毕业季就业服务宣传', - overview: - '梳理面向应届毕业生的就业服务政策传播任务,明确分阶段触达节奏与渠道组合。', - taskDirection: '赵敏', - taskLevel: 1, - taskType: 1, - }, - { - taskName: '防汛应急科普传播任务', - overview: - '汛期来临前,分析防汛减灾科普内容的传播目标与受众分层,制定预警信息发布预案。', - taskDirection: '陈昊', - taskLevel: 2, - taskType: 1, - }, - { - taskName: '乡村振兴成果展示任务', - overview: - '围绕本地乡村振兴典型案例,拆解成果展示传播任务,确定故事化表达与素材采集方向。', - taskDirection: '周琳', - taskLevel: 1, - taskType: 2, - }, - ], - running: [ - { - taskName: '社区养老服务满意度专题分析', - overview: - '正在对社区居家养老服务的群众反馈进行任务分析,重点判断受众诉求与服务短板。', - taskDirection: '孙强', - taskLevel: 2, - taskType: 4, - }, - { - taskName: '中小企业纾困政策落地评估', - overview: - '多智能体协同分析纾困政策落地过程中的执行阻力与企业关切,形成阶段性研判。', - taskDirection: '吴静', - taskLevel: 3, - taskType: 4, - }, - { - taskName: '城市轨道交通延误舆情研判', - overview: - '针对近期地铁延误事件,正在拆解舆论传播路径与关键节点,评估引导策略有效性。', - taskDirection: '郑凯', - taskLevel: 2, - taskType: 3, - }, - { - taskName: '食品安全抽检结果发布任务', - overview: - '正在分析食品安全抽检通报的发布口径与受众反应,优化信息透明度与安抚策略。', - taskDirection: '冯雪', - taskLevel: 1, - taskType: 1, - }, - ], - completed: [ - { - taskName: '春节文化活动传播复盘', - overview: - '已完成春节系列文化活动的传播任务分析,沉淀受众画像与高互动内容规律。', - taskDirection: '黄涛', - taskLevel: 1, - taskType: 3, - }, - { - taskName: '医保改革政策宣传任务', - overview: - '已完成医保改革政策的传播目标拆解与受众分层,输出分群体沟通话术。', - taskDirection: '宋佳', - taskLevel: 2, - taskType: 4, - }, - { - taskName: '城市营商环境优化宣传', - overview: - '已完成营商环境优化举措的任务分析,明确企业端与公众端的差异化传播重点。', - taskDirection: '高鹏', - taskLevel: 1, - taskType: 2, - }, - { - taskName: '老旧小区加装电梯议题分析', - overview: - '已完成加装电梯涉及的邻里诉求与阻力识别,形成多方协商沟通建议。', - taskDirection: '何丽', - taskLevel: 2, - taskType: 3, - }, - { - taskName: '生态环保主题宣传周复盘', - overview: - '已完成环保宣传周的传播效果分析,总结渠道贡献度与可复用素材。', - taskDirection: '罗勇', - taskLevel: 1, - taskType: 1, - }, - { - taskName: '青年人才引进政策解读', - overview: - '已完成人才引进政策的受众判断与策略阻力分析,输出落地传播节奏表。', - taskDirection: '谭芳', - taskLevel: 1, - taskType: 5, - }, - ], -}; - -/** 「三情分析」页(业务码 3Q)数据种子。 */ -const SENTIMENT_SEEDS: Record = { - unanalyzed: [ - { - taskName: '暑期旅游热点情绪监测', - overview: - '对暑期热门景区相关讨论进行情绪与倾向分析,识别游客吐槽集中点与正向口碑话题。', - taskDirection: '王磊', - taskLevel: 2, - taskType: 1, - }, - { - taskName: '电价调整公众情绪研判', - overview: - '围绕居民阶梯电价调整,分析公众情绪走向与主要担忧,判断需要重点疏导的群体。', - taskDirection: '李婷', - taskLevel: 3, - taskType: 5, - }, - { - taskName: '校园周边交通安全舆情', - overview: - '对校园周边交通安全话题进行三情分析,梳理家长群体情绪与诉求强度。', - taskDirection: '张伟', - taskLevel: 2, - taskType: 1, - }, - { - taskName: '景区门票预约制讨论分析', - overview: - '分析门票预约制相关讨论的情绪分布,识别便利性与公平性两类核心关切。', - taskDirection: '赵敏', - taskLevel: 1, - taskType: 2, - }, - { - taskName: '夜间经济噪音投诉情绪', - overview: - '对夜市、夜间演出引发的噪音投诉进行情绪分析,区分居民与商户的不同立场。', - taskDirection: '陈昊', - taskLevel: 1, - taskType: 1, - }, - ], - running: [ - { - taskName: '台风预警信息传播情绪追踪', - overview: - '正在分析台风预警发布后的公众情绪变化,评估恐慌情绪与配合度的动态走势。', - taskDirection: '孙强', - taskLevel: 3, - taskType: 4, - }, - { - taskName: '学区划分调整舆论情绪', - overview: - '多智能体协同追踪学区调整话题的情绪热度与对立观点,研判潜在升级风险。', - taskDirection: '吴静', - taskLevel: 2, - taskType: 4, - }, - { - taskName: '网络热点事件情绪态势', - overview: - '正在对近期网络热点事件进行三情分析,识别情绪峰值节点与关键意见领袖。', - taskDirection: '郑凯', - taskLevel: 2, - taskType: 3, - }, - ], - completed: [ - { - taskName: '春运出行体验情绪复盘', - overview: - '已完成春运期间出行体验的情绪与倾向分析,沉淀满意度变化与高频抱怨主题。', - taskDirection: '黄涛', - taskLevel: 1, - taskType: 3, - }, - { - taskName: '惠民政策落地情绪评估', - overview: - '已完成惠民政策落地后的公众情绪评估,输出正向反馈与改进诉求清单。', - taskDirection: '宋佳', - taskLevel: 2, - taskType: 4, - }, - { - taskName: '城市内涝应对情绪分析', - overview: - '已完成强降雨内涝事件的三情分析,总结情绪演化曲线与有效安抚措施。', - taskDirection: '高鹏', - taskLevel: 2, - taskType: 1, - }, - { - taskName: '景区限流措施满意度分析', - overview: - '已完成节假日景区限流措施的情绪分析,明确游客接受度与体验改进方向。', - taskDirection: '何丽', - taskLevel: 1, - taskType: 2, - }, - { - taskName: '公共交通票价听证情绪', - overview: - '已完成票价听证会相关讨论的情绪与立场分析,输出分群体沟通建议。', - taskDirection: '罗勇', - taskLevel: 1, - taskType: 5, - }, - ], -}; - -const SEEDS: Record> = { - task: TASK_SEEDS, - sentiment: SENTIMENT_SEEDS, -}; - -/** 给同一列里的卡片生成错落有致的时间,便于「按时间倒序」展示。 */ -function buildTimes(index: number): { createTime: string; updateTime: string } { - const day = String(28 - index).padStart(2, '0'); - const hour = String(9 + (index % 8)).padStart(2, '0'); - return { - createTime: `2026-05-${day} ${hour}:15:00`, - updateTime: `2026-06-0${(index % 9) + 1} ${hour}:40:00`, - }; -} - -/** 数据集 → 列 → 完整任务列表(按 id 区分,避免两页 key 冲突)。 */ -function buildPool(dataset: MockDataset, column: MockColumnType): TaskListItem[] { - const base = dataset === 'task' ? 10000 : 20000; - const columnOffset = column === 'unanalyzed' ? 0 : column === 'running' ? 300 : 600; - return SEEDS[dataset][column].map((seed, index) => { - const { createTime, updateTime } = buildTimes(index); - return makeTask(base + columnOffset + index, column, seed, createTime, updateTime); - }); -} - -interface MockCopTasksPayload { - content?: string; - pageNum?: number; - pageSize?: number; - taskStatus?: number[]; -} - -/** 根据请求里的 taskStatus 数组反推当前查询的是哪一列。 */ -function resolveColumn(taskStatus?: number[]): MockColumnType { - const list = Array.isArray(taskStatus) ? taskStatus : []; - if (list.includes(20)) return 'running'; - if (list.includes(0) || list.includes(10)) return 'unanalyzed'; - return 'completed'; -} - -/** - * 模拟 `/task/cop-tasks` / `/three/cop-three-tasks` 接口的 body: - * 按列返回分页后的假数据,支持按 `content` 对任务名/摘要做模糊过滤。 - */ -function buildCopTasksBody(dataset: MockDataset, payload: MockCopTasksPayload) { - const { content = '', pageNum = 1, pageSize = 10, taskStatus } = payload; - const column = resolveColumn(taskStatus); - - let pool = buildPool(dataset, column); - const keyword = content.trim(); - if (keyword) { - pool = pool.filter( - (item) => - item.taskName.includes(keyword) || item.overview.includes(keyword), - ); - } - - const total = pool.length; - const start = (pageNum - 1) * pageSize; - const records = pool.slice(start, start + pageSize); - - return { code: 0, message: 'ok', data: { records, total } }; -} - -/** 命中本 mock 的接口路径 → 对应数据集。 */ -const MOCK_ROUTES: Array<{ match: string; dataset: MockDataset }> = [ - { match: '/three/cop-three-tasks', dataset: 'sentiment' }, - { match: '/task/cop-tasks', dataset: 'task' }, -]; - -/** 判断某个请求 url 是否应走假数据。 */ -export function matchTaskBoardMock(url?: string): MockDataset | null { - if (!url) return null; - const hit = MOCK_ROUTES.find((route) => url.includes(route.match)); - return hit ? hit.dataset : null; -} - -/** - * 临时假数据 axios adapter:命中任务看板接口时直接返回 mock body,不发真实请求。 - * 仅用于演示,撤掉假数据时删除 request.ts 中对它的引用即可。 - */ -export function taskBoardMockAdapter(config: { - url?: string; - data?: unknown; -}): Promise<{ data: unknown; status: number; statusText: string; headers: Record; config: unknown }> { - const dataset = matchTaskBoardMock(config.url) ?? 'task'; - - let payload: MockCopTasksPayload = {}; - try { - payload = - typeof config.data === 'string' - ? JSON.parse(config.data) - : ((config.data as MockCopTasksPayload) ?? {}); - } catch { - payload = {}; - } - - const body = buildCopTasksBody(dataset, payload); - - return new Promise((resolve) => { - // 模拟网络延迟,让 Loading 态可见。 - setTimeout(() => { - resolve({ - data: body, - status: 200, - statusText: 'OK', - headers: {}, - config, - }); - }, 280); - }); -} diff --git a/frontend-web/src/utils/request.ts b/frontend-web/src/utils/request.ts index 630ac4f4..17c6a139 100644 --- a/frontend-web/src/utils/request.ts +++ b/frontend-web/src/utils/request.ts @@ -1,6 +1,4 @@ import axios from 'axios' -// === 临时假数据(任务分析 / 三情分析看板):撤掉时删除本 import 及下方 request 拦截器中的对应块即可 === -import { matchTaskBoardMock, taskBoardMockAdapter } from '@/strategy-components/components/task-components/task-mock-data' // axios.interceptors const service = axios.create({ // baseURL: '', // url = base url + request url @@ -33,10 +31,6 @@ service.interceptors.response.use( ) service.interceptors.request.use( config => { - // === 临时假数据:任务看板两个接口直接走本地 mock,不发真实请求 === - if (matchTaskBoardMock(config.url)) { - config.adapter = taskBoardMockAdapter as any; - } // let token: any = localStorage.getItem('token'); config.headers['Authorization'] = `Bearer admin`; // if (token) {