feat(task): 任务详情(cop-task-detail)登录深链增加本地假数据开关
- 新增 VITE_MOCK_COP_TASK_DETAIL 开关(默认 false 走真实接口;true 时该接口走本地假数据, 供 consumer 外网不可达时调试),与 VITE_USE_REAL_DATA 独立 - utils/request.ts 按开关把 cop-task-detail 请求切到本地 mock adapter - task-mock-data.ts 增加 cop-task-detail 假数据 + matcher/adapter - 各 .env(development/network/production/sit) + .env.example 补充该开关说明 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
b380575f16
commit
d5d0494928
7 files changed
+128
-1
No files matched your search
@@ -4,6 +4,9 @@
|
||||
# 任务看板数据源:true=真实接口(默认);改成 false 可让任务分析/三情分析两页走本地假数据。
|
||||
VITE_USE_REAL_DATA=true
|
||||
|
||||
# 任务详情(登录深链 cop-task-detail)数据源:默认真实接口;改成 true 走本地假数据(consumer 外网不可达时调试用)。
|
||||
VITE_MOCK_COP_TASK_DETAIL=false
|
||||
|
||||
# Gateway / DeerFlow API
|
||||
VITE_BACKEND_BASE_URL=http://127.0.0.1:8001
|
||||
VITE_LANGGRAPH_BASE_URL=http://127.0.0.1:8001/api
|
||||
|
||||
@@ -33,6 +33,11 @@
|
||||
# 仅本机 .env 默认 false(假数据)。改后需重启 dev / 重新打包生效。
|
||||
# VITE_USE_REAL_DATA=true
|
||||
|
||||
# --- 任务详情(登录深链 cop-task-detail)数据源开关 ---
|
||||
# 默认真实接口(未设/false);改成 true 时该接口走本地假数据(consumer 外网不可达时调试用)。
|
||||
# 与 VITE_USE_REAL_DATA 独立。改后需重启 dev / 重新打包生效。
|
||||
# VITE_MOCK_COP_TASK_DETAIL=false
|
||||
|
||||
# MaxKey 鉴权根地址(无界 onlineTicket 换 token)
|
||||
# VITE_AUTH_BASE_URL=https://auth.y.sit.4.cn
|
||||
# VITE_AIPI_CONSUMER_URL=https://ch1.b.uat.4.cn/consumer
|
||||
|
||||
@@ -4,6 +4,9 @@
|
||||
# 任务看板数据源:true=真实接口(默认);改成 false 可让任务分析/三情分析两页走本地假数据。
|
||||
VITE_USE_REAL_DATA=true
|
||||
|
||||
# 任务详情(登录深链 cop-task-detail)数据源:默认真实接口;改成 true 走本地假数据(调试用)。
|
||||
VITE_MOCK_COP_TASK_DETAIL=false
|
||||
|
||||
# Gateway / DeerFlow API
|
||||
VITE_BACKEND_BASE_URL=http://47.88.25.99:7001
|
||||
VITE_LANGGRAPH_BASE_URL=http://47.88.25.99:7001/api
|
||||
|
||||
@@ -4,6 +4,9 @@
|
||||
# 任务看板数据源:true=真实接口(默认);改成 false 可让任务分析/三情分析两页走本地假数据。
|
||||
VITE_USE_REAL_DATA=true
|
||||
|
||||
# 任务详情(登录深链 cop-task-detail)数据源:默认真实接口;改成 true 走本地假数据(调试用)。
|
||||
VITE_MOCK_COP_TASK_DETAIL=false
|
||||
|
||||
# Gateway / DeerFlow API
|
||||
VITE_BACKEND_BASE_URL=https://ch1.b.uat.4.cn/deerflow
|
||||
VITE_LANGGRAPH_BASE_URL=https://ch1.b.uat.4.cn/deerflow/api
|
||||
|
||||
@@ -4,6 +4,9 @@
|
||||
# 任务看板数据源:true=真实接口(默认);改成 false 可让任务分析/三情分析两页走本地假数据。
|
||||
VITE_USE_REAL_DATA=true
|
||||
|
||||
# 任务详情(登录深链 cop-task-detail)数据源:默认真实接口;改成 true 走本地假数据(调试用)。
|
||||
VITE_MOCK_COP_TASK_DETAIL=false
|
||||
|
||||
# Gateway / DeerFlow API
|
||||
VITE_BACKEND_BASE_URL=https://ch1.b.sit.4.cn/deerflow
|
||||
VITE_LANGGRAPH_BASE_URL=https://ch1.b.sit.4.cn/deerflow/api
|
||||
|
||||
@@ -399,6 +399,102 @@ const MOCK_ROUTES: Array<{ match: string; dataset: MockDataset }> = [
|
||||
{ match: '/task/cop-tasks', dataset: 'task' },
|
||||
];
|
||||
|
||||
// ───────────── 任务详情假数据(cop-task-detail,给登录任务深链用) ─────────────
|
||||
//
|
||||
// consumer 接口 `{VITE_AIPI_CONSUMER_URL}/taskAnalysSearch/cop-task-detail` 外网可能不可达,
|
||||
// 可用假数据模拟登录深链(?taskId=&goPath=)效果。返回结构与真实接口一致:
|
||||
// `{ code, message, data: { id, overview, taskDirection, taskName, taskContent } }`
|
||||
//
|
||||
// 启停由 `VITE_MOCK_COP_TASK_DETAIL` 控制(默认真实数据,=true 时走假数据),
|
||||
// 见 `utils/request.ts` 的请求拦截器。
|
||||
|
||||
/** cop-task-detail 命中路径。 */
|
||||
const COP_TASK_DETAIL_ROUTE = '/taskAnalysSearch/cop-task-detail';
|
||||
|
||||
interface CopTaskDetailSeed {
|
||||
taskName: string;
|
||||
taskContent: string;
|
||||
overview: string;
|
||||
taskDirection: string;
|
||||
}
|
||||
|
||||
/** 任务详情假数据池(按 taskId 取模选一条,让不同 taskId 呈现不同任务)。 */
|
||||
const COP_TASK_DETAIL_SEEDS: CopTaskDetailSeed[] = [
|
||||
{
|
||||
taskName: '暑期文旅消费季舆情倾向分析',
|
||||
taskContent:
|
||||
'围绕"暑期文旅消费季"全网讨论,分析公众情绪走向、核心关切与潜在争议点,识别需重点引导的群体,并给出传播策略建议。',
|
||||
overview: '暑期文旅消费季相关讨论的情绪与倾向分析。',
|
||||
taskDirection: '王磊',
|
||||
},
|
||||
{
|
||||
taskName: '居民阶梯电价调整公众情绪研判',
|
||||
taskContent:
|
||||
'针对居民阶梯电价调整方案,梳理公众主要担忧(用电成本、公平性),判断情绪峰值节点与高敏群体,形成分群体沟通要点。',
|
||||
overview: '阶梯电价调整的公众情绪研判。',
|
||||
taskDirection: '李婷',
|
||||
},
|
||||
{
|
||||
taskName: '城市更新片区舆论引导任务',
|
||||
taskContent:
|
||||
'对老城区改造涉及的拆迁、安置等敏感议题进行情绪与诉求拆解,识别居民、商户等不同立场,制定差异化回应策略。',
|
||||
overview: '城市更新片区敏感议题的舆论引导分析。',
|
||||
taskDirection: '张伟',
|
||||
},
|
||||
];
|
||||
|
||||
/** 从 taskId 反推一个稳定下标(同一 taskId 每次返回同一条)。 */
|
||||
function pickSeedIndex(taskId: string): number {
|
||||
const digits = (taskId.match(/\d+/g) ?? []).join('');
|
||||
const n = digits ? Number(digits.slice(-6)) : 0;
|
||||
return Number.isFinite(n) ? n % COP_TASK_DETAIL_SEEDS.length : 0;
|
||||
}
|
||||
|
||||
/** 模拟 cop-task-detail 的 body。 */
|
||||
function buildCopTaskDetailBody(taskId: string) {
|
||||
const seed = COP_TASK_DETAIL_SEEDS[pickSeedIndex(taskId)];
|
||||
return {
|
||||
code: 0,
|
||||
message: 'ok',
|
||||
data: {
|
||||
id: taskId,
|
||||
overview: seed.overview,
|
||||
taskDirection: seed.taskDirection,
|
||||
taskName: seed.taskName,
|
||||
taskContent: seed.taskContent,
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
/** 判断某请求 url 是否是 cop-task-detail。 */
|
||||
export function matchCopTaskDetailMock(url?: string): boolean {
|
||||
return !!url && url.includes(COP_TASK_DETAIL_ROUTE);
|
||||
}
|
||||
|
||||
/** 从 axios config 取 taskId(优先 params,其次 url query)。 */
|
||||
function readTaskIdFromConfig(config: { url?: string; params?: Record<string, unknown> }): string {
|
||||
const fromParams = config.params?.taskId;
|
||||
if (fromParams != null && fromParams !== '') return String(fromParams);
|
||||
if (config.url) {
|
||||
const m = config.url.match(/[?&]taskId=([^&]+)/);
|
||||
if (m) return decodeURIComponent(m[1]);
|
||||
}
|
||||
return '';
|
||||
}
|
||||
|
||||
/** 临时假数据 axios adapter:命中 cop-task-detail 时直接返回 mock body,不发真实请求。 */
|
||||
export function copTaskDetailMockAdapter(config: {
|
||||
url?: string;
|
||||
params?: Record<string, unknown>;
|
||||
}): Promise<{ data: unknown; status: number; statusText: string; headers: Record<string, unknown>; config: unknown }> {
|
||||
const body = buildCopTaskDetailBody(readTaskIdFromConfig(config));
|
||||
return new Promise((resolve) => {
|
||||
setTimeout(() => {
|
||||
resolve({ data: body, status: 200, statusText: 'OK', headers: {}, config });
|
||||
}, 200);
|
||||
});
|
||||
}
|
||||
|
||||
/** 判断某个请求 url 是否应走假数据。 */
|
||||
export function matchTaskBoardMock(url?: string): MockDataset | null {
|
||||
if (!url) return null;
|
||||
|
||||
@@ -1,5 +1,10 @@
|
||||
import axios from 'axios'
|
||||
import { matchTaskBoardMock, taskBoardMockAdapter } from '@/strategy-components/components/task-components/task-mock-data'
|
||||
import {
|
||||
matchTaskBoardMock,
|
||||
taskBoardMockAdapter,
|
||||
matchCopTaskDetailMock,
|
||||
copTaskDetailMockAdapter,
|
||||
} from '@/strategy-components/components/task-components/task-mock-data'
|
||||
|
||||
// 任务看板(任务分析 / 三情分析)数据源开关:
|
||||
// VITE_USE_REAL_DATA=true → 走真实接口;其它(含未设置)→ 这两个接口走本地假数据。
|
||||
@@ -7,6 +12,11 @@ import { matchTaskBoardMock, taskBoardMockAdapter } from '@/strategy-components/
|
||||
// 仅本机 .env 默认 false(假数据)。改 env 后需重启 dev server 生效。
|
||||
const USE_REAL_DATA = import.meta.env.VITE_USE_REAL_DATA === 'true'
|
||||
|
||||
// 任务详情(cop-task-detail,登录深链用)数据源开关:
|
||||
// 默认真实数据;仅当 VITE_MOCK_COP_TASK_DETAIL=true 时走本地假数据(consumer 外网不可达时调试用)。
|
||||
// 与 USE_REAL_DATA 独立。改 env 后需重启 dev server 生效。
|
||||
const MOCK_COP_TASK_DETAIL = import.meta.env.VITE_MOCK_COP_TASK_DETAIL === 'true'
|
||||
|
||||
// axios.interceptors
|
||||
const service = axios.create({
|
||||
// baseURL: '', // url = base url + request url
|
||||
@@ -43,6 +53,10 @@ service.interceptors.request.use(
|
||||
if (!USE_REAL_DATA && matchTaskBoardMock(config.url)) {
|
||||
config.adapter = taskBoardMockAdapter as any;
|
||||
}
|
||||
// 任务详情(登录深链):默认真实接口;仅 VITE_MOCK_COP_TASK_DETAIL=true 时走本地假数据。
|
||||
if (MOCK_COP_TASK_DETAIL && matchCopTaskDetailMock(config.url)) {
|
||||
config.adapter = copTaskDetailMockAdapter as any;
|
||||
}
|
||||
// let token: any = localStorage.getItem('token');
|
||||
config.headers['Authorization'] = `Bearer admin`;
|
||||
// if (token) {
|
||||
|
||||
Reference in new issue
Block a user