当前位置: 首页 > news >正文

基于TypeScript+React+AntDesign 的车辆车型管理页面

项目目录结构:

my-app/├── node_modules/├── public/├── src/│   ├── App.js│   ├── VehicleForm.js│   └── index.js├── package.json└── README.md

目录

1.创建项目

2.列表页面VehicleForm.js,预留接口使用axios


1.创建项目

npx create-react-app my-app
cd my-app
npm install antd
npm install axios

App.js

// App.js
import React from 'react';
import 'antd/dist/reset.css'; // Import Ant Design styles
import VehicleForm from './VehicleForm'; // Import the VehicleForm componentconst App = () => {return (<div style={{ margin: '50px' }}><VehicleForm /></div>);
};export default App;

2.列表页面VehicleForm.js,预留接口使用axios

 

// VehicleForm.js
import React from 'react';
import { Form, Input, Button, Select, Row, Col, Tabs, Upload, message } from 'antd';
import { UploadOutlined } from '@ant-design/icons';
import axios from 'axios';const { Option } = Select;
const { TabPane } = Tabs;const VehicleForm = () => {// Placeholder function for form submissionconst handleFormSubmit = async (values) => {try {// Example API call for form submissionconst response = await axios.post('/api/vehicle/create', values);message.success('车型已创建成功');console.log('Form submission response:', response.data);} catch (error) {console.error('Error submitting form:', error);message.error('创建车型失败');}};// Placeholder function for file uploadconst handleFileUpload = (file) => {// Simulate file upload requestconst formData = new FormData();formData.append('file', file);axios.post('/api/vehicle/upload', formData).then(response => {message.success('文件上传成功');console.log('File upload response:', response.data);}).catch(error => {console.error('File upload failed:', error);message.error('文件上传失败');});// Prevent default upload behavior (since we're manually handling it)return false;};return (<div style={{ padding: '20px', backgroundColor: '#fff', borderRadius: '8px' }}><h2>创建自定义车型</h2><Form onFinish={handleFormSubmit} layout="vertical"><Row gutter={16}>{/* 参数标识 */}<Col span={8}><Form.Item label="参数标识" name="paramId"><Input placeholder="请输入参数标识" /></Form.Item></Col>{/* 车辆厂商 */}<Col span={8}><Form.Item label="车辆厂商" name="manufacturer"><Input placeholder="请输入车辆厂商" /></Form.Item></Col>{/* 车型用途 */}<Col span={8}><Form.Itemlabel="车型用途"name="useType"rules={[{ required: true, message: '请选择车型用途' }]}><Select placeholder="请选择车型用途"><Option value="passenger">乘用车</Option><Option value="commercial">商用车</Option></Select></Form.Item></Col></Row><Row gutter={16}>{/* 相机个数 */}<Col span={8}><Form.Item label="相机个数" name="cameraCount"><Input placeholder="请输入相机个数" /></Form.Item></Col>{/* 版本 */}<Col span={8}><Form.Item label="版本" name="version"><Input placeholder="请输入版本" /></Form.Item></Col>{/* 雷米波雷达个数 */}<Col span={8}><Form.Item label="雷米波雷达个数" name="radarCount"><Input placeholder="请输入雷米波雷达个数" /></Form.Item></Col></Row><Row gutter={16}>{/* 车型年份 */}<Col span={8}><Form.Itemlabel="车型年份"name="year"rules={[{ required: true, message: '请输入车型年份' }]}><Input placeholder="请输入车型年份" /></Form.Item></Col>{/* 备注 */}<Col span={16}><Form.Item label="备注" name="remark"><Input placeholder="参考注: 修改了***内容, 解决了***问题" /></Form.Item></Col></Row>{/* 上传按钮 */}<Form.Item><Upload beforeUpload={handleFileUpload}><Button icon={<UploadOutlined />}>上传车型参数</Button></Upload></Form.Item><Tabs defaultActiveKey="1" style={{ marginTop: '20px' }}><TabPane tab="车辆基础信息" key="1"><Upload beforeUpload={handleFileUpload}><Button icon={<UploadOutlined />}>基础信息上传</Button></Upload></TabPane><TabPane tab="开源版 Cam & Lidar 标定参数" key="2">添加内容</TabPane><TabPane tab="车联网参数" key="3">添加内容</TabPane><TabPane tab="传感器参数" key="4">添加内容</TabPane></Tabs>{/* 创建车型按钮 */}<Form.Item><Button type="primary" htmlType="submit">创建车型</Button></Form.Item></Form></div>);
};export default VehicleForm;

相关文章:

  • 相亲交友系统的社会影响:家庭结构的变化
  • mysql索引 -- 全文索引介绍(如何创建,使用),explain关键字
  • 《AI时代程序员的核心技能升级之路》
  • LInux操作系统安装Jenkins
  • Kafka技术详解[5]: 集群启动
  • 修改 idea 的 Terminal 命令窗口使用 git-bash
  • 计算机网络33——文件系统
  • 动态规划算法:13.简单多状态 dp 问题_打家劫舍II_C++
  • Meta广告资料库使用教程:Facebook、Instagram海外社媒营销统统拿下!
  • BEV学习---LSS4-模型训练
  • C++语法—引用
  • 以题为例浅谈反序列化漏洞
  • 高效的知识付费SaaS平台构建:探索Spring Cloud结合Spring Boot的最佳实践
  • C++——输入一行文字,找出其中大写字母、小写字母、空格、数字以及其他字符各有多少。用指针方法处理。
  • 手搓一个Agent#Datawhale 组队学习Task3
  • [PHP内核探索]PHP中的哈希表
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • Fundebug计费标准解释:事件数是如何定义的?
  • input实现文字超出省略号功能
  • Laravel核心解读--Facades
  • Python代码面试必读 - Data Structures and Algorithms in Python
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • spring boot下thymeleaf全局静态变量配置
  • swift基础之_对象 实例方法 对象方法。
  • Vue学习第二天
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 聊一聊前端的监控
  • 实现菜单下拉伸展折叠效果demo
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • #13 yum、编译安装与sed命令的使用
  • #java学习笔记(面向对象)----(未完结)
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • (编译到47%失败)to be deleted
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • (三十五)大数据实战——Superset可视化平台搭建
  • (转)Oracle 9i 数据库设计指引全集(1)
  • (转)Sql Server 保留几位小数的两种做法
  • (总结)(2)编译ORB_SLAM2遇到的错误
  • ***汇编语言 实验16 编写包含多个功能子程序的中断例程
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .gitignore不生效的解决方案
  • .NET 分布式技术比较
  • .netcore 如何获取系统中所有session_如何把百度推广中获取的线索(基木鱼,电话,百度商桥等)同步到企业微信或者企业CRM等企业营销系统中...
  • @Not - Empty-Null-Blank
  • @Pointcut 使用
  • @TableId注解详细介绍 mybaits 实体类主键注解
  • @TableLogic注解说明,以及对增删改查的影响
  • @transaction 提交事务_【读源码】剖析TCCTransaction事务提交实现细节
  • @Transactional 竟也能解决分布式事务?
  • [20160807][系统设计的三次迭代]
  • [ABC294Ex] K-Coloring
  • [autojs]逍遥模拟器和vscode对接