/** * 统一 API 入口 * * 所有接口通过 http (request.js) 发出请求。 * 开发期由 mockAdapter.js 拦截返回模拟数据。 * 切真实后端时,只需删除 main.js 中的 `import '@/mock/mockAdapter'`。 * * 响应拦截器已自动脱壳:接口返回值直接是 data(不是 { code, data })。 * 业务错误走 catch。 */ import { http } from '@/utils/request' // ── 认证 ── export const apiGetCaptcha = () => http.get('/auth/captcha') export const apiLogin = (data) => http.post('/auth/login', data, { withToken: false, skipGlobalError: true }) export const apiChangePassword = (data) => http.post('/auth/change-password', data) // ── 路口基础数据 ── export const apiGetPoints = (params) => http.get('/intersections', { params }) export const apiGetIntersectionData = (id) => http.get(`/intersections/${id}`) export const apiGetSignalTiming = (id) => http.get(`/intersections/${id}/signal-timing`) export const apiGetIntersectionStages = (id) => http.get(`/intersections/${id}/stages`) export const apiGetSchemes = (id) => http.get(`/intersections/${id}/schemes`) // ── 区域菜单树 ── export const apiGetMenuTree = (tabId) => http.get('/regions/tree', { params: { tabId } }) export const apiGetTongzhouMenuTree = () => http.get('/regions/tree/tongzhou') export const apiGetTrunkLineMenuTree = () => http.get('/regions/tree/trunkline') // ── 设备状态 & 首页 ── export const apiGetDeviceStatus = (type) => http.get('/devices/status/summary', { params: { type } }) export const apiGetDeviceFaultStatus = () => http.get('/devices/fault-status') export const apiGetHomeSnapshot = () => http.get('/home/snapshot') export const apiGetControlModeStats = () => http.get('/home/control-mode-stats') export const apiGetLatestAlarms = (params) => http.get('/alarms/latest', { params }) // ── 勤务 & 任务 ── export const apiGetTasks = (params) => http.get('/tasks', { params }) export const apiGetSecurityRoutes = () => http.get('/security-routes') export const apiGetSecurityRouteDetail = (id) => http.get(`/security-routes/${id}`) export const apiGetKeyIntersections = () => http.get('/key-intersections') // ── 交通时空图 ── export const apiGetTrafficTimeSpace = (params) => http.get('/traffic/time-space', { params }) // ── 路口列表 & 字典 ── export const apiGetCrossingList = (params) => http.get('/crossings', { params }) export const apiGetDictOptions = (type) => http.get(`/dict/${type}`) // ── 设备操作 ── export const apiRestartDevice = (id) => http.post(`/devices/${id}/restart`) export const apiUpgradeDevice = (id, data) => http.post(`/devices/${id}/upgrade`, data) // ── 弹窗专用 ── export const apiGetSpecialTaskMonitorData = (id) => http.get(`/special-task/${id}/monitor`) export const apiGetCrossingPanelData = (id) => http.get(`/crossing/panel/${id}`) export const apiGetCrossingDetailData = (id, { iconMode } = {}) => http.get(`/crossing/detail/${id}`, { params: iconMode ? { iconMode } : undefined }) export const apiGetCrossingTopCharts = () => http.get('/crossing/top-charts') // cancelDuplicate:false —— 画布与表格都会轮询同一接口,让两路并发不互相取消 export const apiGetDetectorMonitorData = (id) => http.get(`/detector/monitor/${id || 'default'}`, { cancelDuplicate: false }) export const apiGetOverviewTopCharts = () => http.get('/overview/top-charts') export const apiGetMapLegendConfig = () => http.get('/map/legend-config')