Browse Source

优化

feat_upload_server_url_0416
LiLongLong 4 months ago
parent
commit
6f1daf59db
  1. 2
      src/App.tsx
  2. 11
      src/components/SideMenu.tsx
  3. 9
      src/index.tsx
  4. 31
      src/pages/measure/components/MeasureAction.tsx
  5. 12
      src/pages/measure/components/MeasureDetail.tsx
  6. 3
      src/pages/system/Setting.tsx
  7. 12
      src/services/httpRequest.ts
  8. 1
      src/services/measure/analysis.ts
  9. 8
      src/services/user/system.ts
  10. 15
      src/utils/index.ts

2
src/App.tsx

@ -50,7 +50,7 @@ function App() {
useEffect(() => { useEffect(() => {
if (localStorage.getItem("user")) { if (localStorage.getItem("user")) {
// navigate("/measure/action", { replace: true });
navigate("/measure/action", { replace: true });
} else { } else {
navigate("/login"); navigate("/login");
} }

11
src/components/SideMenu.tsx

@ -44,7 +44,16 @@ const items: MenuItem[] = [
key: '/task/list', key: '/task/list',
label: '任务列表' label: '任务列表'
}] }]
}
},
// {
// key: "system",
// label: "系统设置",
// icon: <img src={icon_task} alt=""/>,
// children: [{
// key: '/system',
// label: '系统设置'
// }]
// },
]; ];
export default function SideMenu() { export default function SideMenu() {

9
src/index.tsx

@ -1,7 +1,7 @@
import React from "react"; import React from "react";
import ReactDOM from "react-dom/client"; import ReactDOM from "react-dom/client";
import "./index.css"; import "./index.css";
import {createBrowserRouter, RouterProvider} from "react-router-dom";
import {createBrowserRouter, redirect, RouterProvider} from "react-router-dom";
import Login from "./pages/login/Login"; import Login from "./pages/login/Login";
import Measure from "./pages/measure/Measure"; import Measure from "./pages/measure/Measure";
import MeasureConfig from "./pages/measure/components/MeasureConfig"; import MeasureConfig from "./pages/measure/components/MeasureConfig";
@ -10,11 +10,13 @@ import MeasureAction from "./pages/measure/components/MeasureAction";
import DetailInfo from "./pages/measure/components/Detail"; import DetailInfo from "./pages/measure/components/Detail";
import RailConfig from "./pages/rail/RailConfig" import RailConfig from "./pages/rail/RailConfig"
import Org from "./pages/system/Org"; import Org from "./pages/system/Org";
import Setting from "./pages/system/Setting"
import Task from "./pages/task"; import Task from "./pages/task";
import AddTrack from "./pages/rail/AddTrack" import AddTrack from "./pages/rail/AddTrack"
import App from "./App"; import App from "./App";
import reportWebVitals from "./reportWebVitals"; import reportWebVitals from "./reportWebVitals";
// redux toolkit // redux toolkit
import {Provider} from "react-redux"; import {Provider} from "react-redux";
import store from "./store/index"; import store from "./store/index";
@ -70,7 +72,12 @@ const router = createBrowserRouter([
{ {
path:"/org", path:"/org",
element:<Org/> element:<Org/>
},
{
path:"/system",
element:<Setting/>
} }
], ],
}, },
{ {

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

@ -115,17 +115,36 @@ export default function MeasureAction() {
rightPoints.current = []; rightPoints.current = [];
canvasRef.current?.clearShapes(); canvasRef.current?.clearShapes();
canvasRef.current?.resetCanvas(); canvasRef.current?.resetCanvas();
if (startBtnText === "重新测量") {
setStatusList(initialStatusList);
}
// if (startBtnText === "重新测量") {
// let list = [...initialStatusList]
// list.forEach((item, index) => {
// if(index === 0){
// item.color = STEP_COLOR_BLUE;
// }else{
// item.color = STEP_COLOR_GREY;
// }
// })
// setStatusList(list);
// }
startMeasurement().then(res => { startMeasurement().then(res => {
if (res.status !== 0) { if (res.status !== 0) {
message.error(res.data.info); message.error(res.data.info);
// setTaskStatusName(taskStatusDescMap["IDLE"]); // setTaskStatusName(taskStatusDescMap["IDLE"]);
} else { } else {
const newStatusList = [...initialStatusList];
newStatusList[0].color = STEP_COLOR_BLUE;
setStatusList(newStatusList);
let list = [...initialStatusList]
list.forEach((item, index) => {
if(index === 0){
item.color = STEP_COLOR_BLUE;
}else{
item.color = STEP_COLOR_GREY;
}
})
setStatusList(list);
// const newStatusList = [...initialStatusList];
// newStatusList[0].color = STEP_COLOR_BLUE;
// setStatusList(newStatusList);
message.success("已通知设备开始测量"); message.success("已通知设备开始测量");
// setTaskStatusName(taskStatusDescMap["IDLE"]); // setTaskStatusName(taskStatusDescMap["IDLE"]);
setStartBtnText("重新测量"); setStartBtnText("重新测量");

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

@ -15,6 +15,7 @@ import {
import { getBaseRecordPointSetByCode } from "../../../services/track/trackShape" import { getBaseRecordPointSetByCode } from "../../../services/track/trackShape"
import { extraDescType, KTJ_BASE_TYPE } from '../../../services/ktjTypes'; import { extraDescType, KTJ_BASE_TYPE } from '../../../services/ktjTypes';
import { GX_CODE } from '../../../constant'; import { GX_CODE } from '../../../constant';
import { exportFile } from '../../../utils';
export default function MeasureDetail() { export default function MeasureDetail() {
useEffect(()=>{ useEffect(()=>{
queryDictionaryList() queryDictionaryList()
@ -80,6 +81,7 @@ export default function MeasureDetail() {
render:(_, record)=>{ render:(_, record)=>{
return <div> return <div>
<Button type="link" onClick={()=>onShowDetail(record)}></Button> <Button type="link" onClick={()=>onShowDetail(record)}></Button>
<Button type="link" onClick={()=>onDownloadRecord(record)}></Button>
</div> </div>
} }
}, },
@ -222,6 +224,14 @@ export default function MeasureDetail() {
getMeasurePoints(item) getMeasurePoints(item)
} }
//导出
const onDownloadRecord = async(item:DetailTable) => {
const response = await fetch(`/api/measurement-task/download/${item.id}`);
const blob = await response.blob(); // 先获取 Blob
const arrayBuffer = await blob.arrayBuffer(); // 将 Blob 转换为 ArrayBuffer
exportFile(arrayBuffer, `${item.name}.txt`); // 传递 ArrayBuffer 给函数
}
const getMeasurePoints = (recordItem:DetailTable) => { const getMeasurePoints = (recordItem:DetailTable) => {
getPointsById({id:recordItem.id}).then(res=>{ getPointsById({id:recordItem.id}).then(res=>{
if (canvasRef.current) { if (canvasRef.current) {
@ -496,7 +506,7 @@ export default function MeasureDetail() {
<Input className='ml-[2rem]' placeholder="测量名称" onChange={(e)=>setName(e.target.value)} style={{ width: 200 }}/> <Input className='ml-[2rem]' placeholder="测量名称" onChange={(e)=>setName(e.target.value)} style={{ width: 200 }}/>
<Select <Select
placeholder="请选择数据来源" placeholder="请选择数据来源"
className='ml-[2rem]'
className='ml-[2rem] w-[150px]'
onChange={setLineName} onChange={setLineName}
options={SJLY_List.map((item) => ({ options={SJLY_List.map((item) => ({
label: item.value, label: item.value,

3
src/pages/system/Setting.tsx

@ -0,0 +1,3 @@
export default function Setting(){
return <div>123</div>
}

12
src/services/httpRequest.ts

@ -32,7 +32,11 @@ export type ApiException = "invalidToken" | "serverError";
const exceptionSub = new Subject<ApiException>(); const exceptionSub = new Subject<ApiException>();
export const exceptionOb = exceptionSub.asObservable(); export const exceptionOb = exceptionSub.asObservable();
function extHandle(res: BaseResponse) {
function extHandle(res: BaseResponse, url:string) {
//下载文件时,接口返回的是数据流,直接返回res
if(url.includes("download")){
return res;
}
return { return {
...res, ...res,
success: res.status === 0, success: res.status === 0,
@ -44,11 +48,12 @@ export default async function httpRequest<T>({ url, method = "GET", params = {},
if (token) { if (token) {
headers = { Authorization: token, ...headers }; headers = { Authorization: token, ...headers };
} }
if (method === "GET") { if (method === "GET") {
const query = urlEncode(params); const query = urlEncode(params);
const _url = query ? url + "?" + query : url; const _url = query ? url + "?" + query : url;
const res = await fetch(_url, { headers }); const res = await fetch(_url, { headers });
return res.json().then(res => extHandle(res) as T);
return res.json().then(res => extHandle(res, url) as T);
} else { } else {
const body = encode === "json" ? JSON.stringify(params) : urlEncode(params); const body = encode === "json" ? JSON.stringify(params) : urlEncode(params);
const _headers = const _headers =
@ -56,7 +61,8 @@ export default async function httpRequest<T>({ url, method = "GET", params = {},
? { "Content-Type": "application/json; charset=utf-8", ...headers } ? { "Content-Type": "application/json; charset=utf-8", ...headers }
: { "Content-Type": "application/x-www-form-urlencoded; charset=utf-8", ...headers }; : { "Content-Type": "application/x-www-form-urlencoded; charset=utf-8", ...headers };
const res = await fetch(url, { method, headers: _headers, body }); const res = await fetch(url, { method, headers: _headers, body });
return res.json().then(res => extHandle(res) as T);
return res.json().then(res => extHandle(res, url) as T);
} }
} }
export function urlEncode(params?: Record<string, any>) { export function urlEncode(params?: Record<string, any>) {

1
src/services/measure/analysis.ts

@ -123,3 +123,4 @@ export function getPointsById(params:{id:number}){
method: "POST", method: "POST",
}); });
} }

8
src/services/user/system.ts

@ -0,0 +1,8 @@
import httpRequest, { BaseResponse } from "../httpRequest";
export function sysSet(params: { name:string, value: string }) {
return httpRequest<BaseResponse>({
url: "/api/sysSet",
params,
method: "PUT",
});
}

15
src/utils/index.ts

@ -85,3 +85,18 @@ export function findSymmetricPoint(px: number, py: number, ox = 0, oy = 0) {
return { x: sx, y: sy }; return { x: sx, y: sy };
} }
export function exportFile(response: ArrayBuffer, fileName: string){
// 创建 Blob 对象
const blob = new Blob([response], { type: 'application/octet-stream' });
// 创建一个 URL 对象,将 Blob 对象转换为 URL
const url = window.URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = fileName;
// 模拟点击 <a> 元素来触发下载
a.click();
// 释放 URL 对象
window.URL.revokeObjectURL(url);
}
Loading…
Cancel
Save