Browse Source

给返回类型添加success

feature/rail
zhangjiming 5 months ago
parent
commit
f16de30ae1
  1. 38
      src/mock/recordList.ts
  2. 2
      src/pages/measure/components/MeasureAction.tsx
  3. 6
      src/pages/measure/components/MeasureDetail.tsx
  4. 4
      src/pages/measure/components/graph/ResultLayer.tsx
  5. 28
      src/services/httpRequest.ts
  6. 19
      src/services/measure/analysis.ts
  7. 24
      src/services/measure/type.ts
  8. 22
      src/services/wsTypes.ts

38
src/mock/recordList.ts

@ -0,0 +1,38 @@
export const detailList = [{
"id": 2703,//数据主键id
"createTime": "2025-03-03 17:05:34",//数据创建时间
"updateTime": "2025-03-03 17:05:34",//数据修改时间
"uuid": "650fc0a3-8bb2-4223-973e-72846fd31b82",//数据uuid
"operatorName": "张三",//操作员姓名
"trackShapeCode": "001",//轨型code
"verificationMethodCode": "aaa",//核校方式code
"name": "京沪铁路",//测量名称
"lineName": "河北段",//线路名称
"location": "100米处",//位置
"direction": "左"///方向
},{
"id": 2704,//数据主键id
"createTime": "2025-03-03 17:05:34",//数据创建时间
"updateTime": "2025-03-03 17:05:34",//数据修改时间
"uuid": "650fc0a3-8bb2-4223-973e-72846fd31b83",//数据uuid
"operatorName": "李四",//操作员姓名
"trackShapeCode": "002",//轨型code
"verificationMethodCode": "bbb",//核校方式code
"name": "京昆铁路",//测量名称
"lineName": "河北段",//线路名称
"location": "5100米处",//位置
"direction": "右"///方向
}]
export const bluetoothList = [{
name:'Kdkow_1',
id:'1',
},{
name:'llwoa_2',
id:'2',
}]
export const bluetoothInfo = {
type: 'kxy0812',
power: '78%',
}

2
src/pages/measure/components/MeasureAction.tsx

@ -29,7 +29,7 @@ export default function MeasureAction() {
const onAnalysisBtnClick = () => {
// navigate("../detail");
analyzeMeasurement().then(res => {
if (res.status === 0) {
if (res.success) {
// mask
} else {

6
src/pages/measure/components/MeasureDetail.tsx

@ -70,7 +70,11 @@ export default function MeasureDetail() {
const [tableData, setTableData] = useState<DetailTable[]>([])
const getDetailDataList = () => {
getDetailList().then(res => {
setTableData(res.data.list)
if (res.success) {
setTableData(res.data.list)
} else {
setTableData(detailList)
}
}).catch(e=>{
//如果接口异常,则使用mock数据
setTableData(detailList)

4
src/pages/measure/components/graph/ResultLayer.tsx

@ -54,7 +54,7 @@ export default function ResultLayer(props: {
const ctx = canvas.getContext("2d");
if (!ctx) return;
if (data.data.event === "START_RECORD_SIG") {
if ('event' in data.data && data.data.event === "START_RECORD_SIG") {
// setRtPoints([]);
pointArr.length = 0;
ctx.resetTransform();
@ -66,7 +66,7 @@ export default function ResultLayer(props: {
ctx.translate(xStartPx + xOffset, yStartPx + yOffset);
ctx.beginPath();
}, 0);
} else if (data.data.event === "END_RECORD_SIG") {
} else if ('event' in data.data && data.data.event === "END_RECORD_SIG") {
//
}
} else if (data.path === "/measurement-task/profile-record-ctrl-sig") {

28
src/services/httpRequest.ts

@ -1,9 +1,23 @@
import { Subject } from "rxjs";
export interface BaseResponse<T = any> {
data: T;
export interface FailResponse {
status: number;
success: false;
data: {
info: string;
}
}
export interface SuccessResponse<T = any> {
data: T;
success: true;
status: 0;
}
export type BaseResponse<T = any> = SuccessResponse<T> | FailResponse
// export interface BaseResponse<T = any> {
// data: T;
// status: 0;
// }
type HttpReqParam = {
url: string;
@ -18,6 +32,12 @@ export type ApiException = "invalidToken" | "serverError";
const exceptionSub = new Subject<ApiException>();
export const exceptionOb = exceptionSub.asObservable();
function extHandle(res: BaseResponse) {
return {
...res,
success: res.status === 0,
};
}
export default async function httpRequest<T>({ url, method = "GET", params = {}, encode = "json", headers = {} }: HttpReqParam) {
const token = sessionStorage.getItem("token");
@ -28,7 +48,7 @@ export default async function httpRequest<T>({ url, method = "GET", params = {},
const query = urlEncode(params);
const _url = query ? url + "?" + query : url;
const res = await fetch(_url, { headers });
return res.json() as T;
return res.json().then(res => extHandle(res) as T);
} else {
const body = encode === "json" ? JSON.stringify(params) : urlEncode(params);
const _headers =
@ -36,7 +56,7 @@ export default async function httpRequest<T>({ url, method = "GET", params = {},
? { "Content-Type": "application/json; charset=utf-8", ...headers }
: { "Content-Type": "application/x-www-form-urlencoded; charset=utf-8", ...headers };
const res = await fetch(url, { method, headers: _headers, body });
return res.json() as T;
return res.json().then(res => extHandle(res) as T);
}
}
export function urlEncode(params?: Record<string, any>) {

19
src/services/measure/analysis.ts

@ -1,5 +1,5 @@
import httpRequest, { type BaseResponse } from "../httpRequest";
import type { DetailTable } from "../../services/measure/type";
import type { AnalyzeResult, DetailTable, MeasureRecord } from "../../services/measure/type";
export function startMeasurement() {
return httpRequest<BaseResponse>({
@ -13,8 +13,9 @@ export function stopMeasurement() {
method: "POST",
});
}
export function analyzeMeasurement() {
return httpRequest<BaseResponse>({
return httpRequest<BaseResponse<AnalyzeResult>>({
url: "/measurement-task/analyze-measurement",
method: "POST",
});
@ -27,29 +28,19 @@ export function saveMeasurement() {
}
export function getDetailList() {
return httpRequest<BaseResponse<{list:DetailTable[]}>>({
return httpRequest<BaseResponse<{ list: DetailTable[] }>>({
url: "/measurement-data/list",
method: "POST",
});
}
export function delDetail(params:{ids:string}) {
export function delDetail(params: { ids: string }) {
return httpRequest<BaseResponse>({
url: `/measurement-data/delete/${params.ids}`,
method: "POST",
});
}
export type MeasureRecord = {
operatorName: "张三"; //操作员名称
// trackShapeCode: "code01"; //轨形code
// verificationMethodCode: "code01"; //核校方式code
name: "某某铁路"; ///测量名称
lineName: "河北段"; //线路名称
location: "100米处"; //位置
// direction: "左"; //方向
};
export function createMeasure(params: MeasureRecord) {
return httpRequest<BaseResponse>({
url: "/measurement-task/cache-measurement",

24
src/services/measure/type.ts

@ -7,4 +7,26 @@ export type DetailTable = {
operatorName:string;
name: string;
createTime: string;
}
}
export type MeasureRecord = {
operatorName: "张三"; //操作员名称
// trackShapeCode: "code01"; //轨形code
// verificationMethodCode: "code01"; //核校方式code
name: "某某铁路"; ///测量名称
lineName: "河北段"; //线路名称
location: "100米处"; //位置
// direction: "左"; //方向
};
export type AnalyzeAngle = {
x: number;
y: number;
degree: number;
describe: string;
};
export type AnalyzeResult = {
angles: AnalyzeAngle[];
};

22
src/services/wsTypes.ts

@ -17,6 +17,12 @@ export type TrackRecordSig = {
path: "/measurement-task/profile-record-ctrl-sig";
};
export const defaultContext: ContextMessage["data"] = {
loginFlag: false,
loginUser: {},
newMeasureAfterSave: false
};
export type ContextMessage = {
messageType: "DeviceContext";
data: {
@ -34,4 +40,18 @@ export type ContextMessage = {
path: "/deviceContext";
};
export type Datagram = TrackRecordSig | TaskState | ContextMessage;
export type MeasureState = {
messageType: "EVENT";
data: {
taskStatus: "IDLE" | "MEASURING" | "WAITING_FOR_MEASURING" | "FINISHED";
measureSideCnt: 0 | 1 | 2; //已测量数量,0,1,2 最多两边(左边和右边)
isMeasuringLeftEnd: boolean; //测量左侧完成
isMeasuringRightEnd: boolean; //测量右侧完成
motionlessSigFlag: boolean; //滑轮质心是否静止
inStartMeasuringPos: boolean; //是否在允许开始测量的位置
// profileRecordDescription: null; //用户填写的新测量信息
};
path: "/measurement-task/get-task-state";
};
export type Datagram = TrackRecordSig | TaskState | ContextMessage | MeasureState;
Loading…
Cancel
Save