样式修改

This commit is contained in:
董宏凯 committed 2026-06-10 19:08:32 +08:00
1 parent 19aeba5fab
commit c705e0b5ae
2 files changed
-443

No files matched your search

@@ -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<MockColumnType, number> = {
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<MockColumnType, MockTaskSeed[]> = {
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<MockColumnType, MockTaskSeed[]> = {
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<MockDataset, Record<MockColumnType, MockTaskSeed[]>> = {
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<string, unknown>; 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);
});
}
-6
View File
@@ -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) {