APP管理平台--前端篇,首页(三)

article/2025/9/12 21:00:03

作为首页,肯定在打开网址后就看得到对应信息。那么作为APP管理平台,这个信息自然而然的表现成了APP列表。那么依据现有各大应用市场需要分为已上线未上线。但是在实际做的时候没有区分,这次项目中将所有新增的APP都展示了。区分布局就决定了上下,上面是个TAB,用于切换;下面是个LIST,用于展示列表。
布局

APP顾名思义就是上传的各种APP数据,组件是团队内部使用的nexus仓库上的自构仓库,由于APP业务是组件化,所以存在业务组件和功能组件,但是组件数量太多,所以就顺便挂了出来,并且查看最新版本也相较于方便了(做个归纳)。
那么,利用React的特性拆分一下,分为TopMainList,和Home

export default function Home () {return (<div><PageTop /><MainList /></div>)
}

在顶层只有一个菜单和登录按钮(如果已经登录就是上传按钮),这里用cookie是否包含userId信息为区分

//import { AppstoreOutlined, AppstoreAddOutlined } from '@ant-design/icons';
function PageTop (props) {//import { useNavigate } from 'react-router-dom';//获取路由组件,通过之前的APP.js定义的进行路由跳转var navigate = useNavigate();//这里的路由将在后面篇章说明,本章只处理首页const loginBtn = (!cookie.get("userId")) ?<Button onClick={() => navigate('/login')}>登录</Button> :<Button onClick={() => navigate('/upload')}>上传</Button>;return (<div className='top'><MenuselectedKeys='app'mode="horizontal"className='topMenu'><Menu.Item key="app" icon={<AppstoreOutlined />}>APP</Menu.Item><Menu.Item key="module" icon={<AppstoreAddOutlined />}>组件</Menu.Item></Menu><div className='loginOrUpload'>{loginBtn}</div></div>)
}

import cookie from 'js-cookie';//获取cookie的组件库 — 地址
npm i js-cookie

npm start 一下,样子已经有了。
顶部1
诶,登录应该与菜单在同一条线上,那么就需要将整个布局改成横的。

.top {display: flex;margin :10px;
}

顶部2
发现菜单的显示有问题,猜测应该是组件的宽度有问题,并且将top改成了flex的显示方式,那么子元素也改成flex的相关方式。

.topMenu{flex: auto;
}.loginOrUpload button{width: 64px;height: 36px;margin: 2px;
}

顶部3
代码中看到Menu已经设置了相关配置,由于需要与MainList数据联动,因此相关处理参数由上层组件传递下来,也就是Home

function PageTop(props){...//这里通过props传递进来<MenuonClick={props.onClick}selectedKeys={[props.type]}mode="horizontal"...
}export default function Home () {const [type, setType] = useState('app');const handleMenu = e => {setType(e.key);//e为Menu传递回的Item信息}return (<div><PageTop type={type}onClick={handleMenu}/><MainList /></div>)
}

运行一下,点击Menu正常表现。
接下来列表的展示了,Antd有个Table组件,用进来。

function MainList (props) {const list = props.mainList;const appColums = [{title: '名字',dataIndex: 'name',key: 'name'},{title: '版本',dataIndex: 'appVersion',key: 'appVersion'},{title: '业务线条',dataIndex: 'business',key: 'business'},{title: '操作',dataIndex: 'id',key: 'op',width: 400,render: (text, record) => {let id = record.id;return (<div><Button onClick={() =>navigate('/detail/' + id)} type='link'>详情</Button><Button type='link' href={record.downloadUrl}>下载</Button></div>)}}];const handleKey = record => {return record.id}return (<Table columns={appColums} dataSource={list} bordered={true} rowKey={handleKey} className='mainTable' />)
}

只需要这样按照官网文档塞数据就好了,展示效果:
APP
列表数据是通过props.list传递进来的,也就是在上一层,那也需要处理下。

export default function Home () {
...const [mainList, setMainList] = useState([]);const handleMenu = e => {setMainList([]);//重置数据,防止切换的时候会有上一个数据遗留的动效...}...<MainList mainList={mainList} type={type} />
...
}

如此将列表和菜单给联系起来了,接着就是写网络请求,将数据加载出来。

export default function Home () {
...const handleMenu = e => {setMainList([]);//重置数据,防止切换的时候会有上一个数据遗留的动效setType(e.key);didMount(e.key);//加载数据}const didMount = (t) => {fetch("/api/" + t + "/list").then(response => response.json()).then(json => {setMainList(json.detail.list)}).catch(e => setMainList([]));}
...
}
//请求结束了,那在列表那也需要处理两种列表
function MainList (props) {
...const moduleColumns = [{title: 'GroupId',dataIndex: 'groupId',key: 'groupId'},{title: 'ArtifactId',dataIndex: 'artifactId',key: 'artifactId'},{title: '版本',dataIndex: 'version',key: 'version'},{title: '更新时间',dataIndex: 'updateTime',key: 'updateTime',}];...//更改确定columns用的具体索引方式return (<Table columns={props.type === 'app' ? appColums : moduleColumns} dataSource={list} pagination={{ pageSize: 100 }} bordered={true} rowKey={handleKey} className='mainTable' />)
...
}

然后现在点击App / Module 两个按钮将请求不同的数据,
在这里插入图片描述
如此。整个首页就有了菜单,登录按钮,列表三个元素,接下来就是用户信息了,需要登录后才能进行具体的操作嘛。

前端篇●二


http://chatgpt.dhexx.cn/article/SARoaeI0.shtml

相关文章

一天撸一个财务APP系统【安卓端+前端+后端】

昨天有个粉丝朋友也想学开发Web和小程序、安卓&#xff0c;问可以在大学学会吗&#xff1f; 在学校学到的东西真的有限&#xff1a; 在很多的高校&#xff0c;有一些教授是学院派的&#xff0c;他们没有做过多少开发工作&#xff0c;上课就是照本宣科&#xff0c;讲的知识点都…

如何查看手机APP使用的前端框架?

一、首先获取该APP的apk包&#xff08;长按APP&#xff0c;点击‘分享’&#xff0c;分享到微信‘文件传输助手’&#xff0c;即可获得apk包--参考本博主上篇文章&#xff09;。 二、把apk扩展名改成.zip然后解压。不同的编译软件目录结果也不一样。&#xff08;为方便起见&am…

【网络协议】IPV4协议介绍

&#x1f4aa;本节内容&#xff1a;IPV4协议介绍、IPV4地址格式、IPV4数据格式及C项目结构体设计 &#x1f60f;【Qt6网络抓包工具项目实战】总导航目录&#xff08;建议收藏书签~~~&#xff09; ✌️ part1 &#x1f60f;【Qt6网络抓包工具项目实战】1.1Qt6.2.2环境搭建(免费…

DHCP协议

目录 1、DHCP协议 2、DHCP的工作过程 动态获取IP地址流程 跟新租期流程 解除租期流程 1、DHCP协议 DHCP(Dynamic Host Configuration Protocol)协议是处于应用层的协议。一个主机如果想正常上网&#xff0c;需要配置IP地址&#xff0c;子网掩码&#xff0c;默认网关基本配置…

TCP/IP-----协议号、端口号、ARP、icmp

文章目录 一、数据流向过程二、协议详解1&#xff09;ARP协议2&#xff09;ICMP协议 协议号 协议号是存在于IP数据报的首部的20字节的固定部分&#xff0c;占有8bit.该字段是指出此数据报所携带的是数据是使用何种协议&#xff0c;以便目的主机的IP层知道将数据部分上交给哪个处…

UDP协议

引言 本文中只关于IPv4&#xff1b;UDP是一种保留消息边界的简单的面向数据报的传输层协议。它不提供差错纠正、队列管理、重复消除、流量控制和拥塞控制。总之&#xff0c;能没有的都没了。但它提供了差错检测&#xff0c;是一种端到端的校验和。因此使用它的程序必须自己实现…

BGP协议

BGP协议 工作层工作原理BGP简单配置———含密码认证配置个人图解BGP 工作层 BGP是工作在应用层的协议&#xff0c;但基于传输层的TCP协议 工作原理 路由协议通常分为内部网关协议&#xff08;IGP: Interior Gateway Protocol&#xff09;和外部网关协议&#xff08;EGP: Ext…

IP协议介绍

文章目录 定义特点作用寻址和路由&#xff1a;分片与重组&#xff1a; ①TCP分段与IP分片的区别&#xff1f;TCP分段IP分片什么是MSS&#xff1f;滑动窗口与MSS的区别&#xff1f; 什么是MTU&#xff1f;MSS与MTU的关系疑问UDP是否会进行分段&#xff1f;TCP分段后会进行IP分片…

华为 协议归纳总结

青出于蓝而胜于蓝 文章目录 一、路由优先级二、路由协议三、常见的永久组地址四、常用的UDP协议及端口号五、常用的TCP协议及端口号六、协议七、报文头格式 一些常用的知识点&#xff0c;经常用到&#xff0c;也很容易忘记、混淆&#xff0c;所以有必要去整理一下这些常用知识点…

管理距离 动态协议端口号 协议号

管理距离(Administrative Distance&#xff0c;简称AD ) 路由器可以通过多种途径获知路由条目∶如静态手工配置、各种动态路由协议等等。当路由器从两种不用的途径获知去往同一个目的地的两条路由&#xff0c;那么路由器会比较这两条路由的AD值&#xff0c;也就是管理距离&…

各协议的协议号和端口号

协议号与端口号详解 IP是网络层协议&#xff0c;IP头中的协议号用来说明IP报文中承载的是哪种协议&#xff08;一般是传输层协议&#xff0c;比如6 TCP&#xff0c;17 UDP&#xff1b;但也可能是网络层协议&#xff0c;比如1 ICMP&#xff1b;也可能是应用层协议&#xff0c;比…

TCP/IP协议号

转自http://www.52rd.com/Blog/Detail_RD.Blog_liweikui_22903.html&#xff0c;作者&#xff1a;liweikui IP协议号&#xff1a;IP首部中有8位协议号&#xff0c;用于指明IP的上层协议&#xff0c;具体如下&#xff1a; 协议号 协议类型 说明 0 HOPOPT IPv6逐跳选项 1…

MATLAB APP全局变量的使用

切换到代码视图&#xff0c;左上角代码浏览器点击属性&#xff0c;有如下提示&#xff1a; 点击➕旁边&#xff0c;会出现提示&#xff1a; 按照提示所说&#xff0c;在这里就可以添加全局变量了。 点击➕&#xff0c;在代码中便会添加如下代码&#xff1a; properties (Acce…

MATLAB GUI 设全局变量的位置

如果要在控件之外定义全局变量&#xff0c; 则这个全局变量要设置在OutputFcn下面 如图&#xff1a;

matlab 全局变量(global)数据类型报错问题

今天我在做matlab的GUI界面时&#xff0c;其中涉及到定义一个全局的元胞变量(cell)。将其摘录下来如下&#xff1a; clc;clear all global a s11;s2123;s3a; a(1,1:3){s1,s2,s3}然后出现错误&#xff1a;从 cell 转换为 double 时出现以下错误:错误使用 double无法从 cell 转换…

matlab 全局符号变量,优化全局变量使用 - MATLAB Simulink Example - MathWorks 中国

示例模型 在模型 matlab:rtwdemo_optimize_global_ebf 中&#xff0c;Assignment 模块将来自 Inport 模块和 Constant 模块的值赋给输出信号。输出信号馈入 Gain 模块中。 model rtwdemo_optimize_global_ebf; load_system(rtwdemo_optimize_global_ebf) 生成代码但不进行优化…

20220117 matlab 全局变量调试

要在外部和里面都定义global才行貌似 global f1function parameter_inpu__() global f1 f11;endglobal f1 b1 f_temp test1__(); dynamic_e()function parameter_inpu__() global f1 f11;endfunction test1__() global f1 b1 b1f1;endfunction dynamic_e() global f_temp f_te…

matlab变量全局化,matlab全局变量global

matlab global定义全局变量的问题 我写了matlab的一个主函数,放在一个M文件中,然后在这个主函数中调用其可以,前提是两个函数共用变量均需用global声明 例子: 保存f.m内容如下: function f(a,b) global x y; x=a; y=b; 保存g.m内容如下: function [out]=g global x y; ou…

matlab 编程之全局变量(global)和永久变量(persistent)

一、global 官方解释&#xff1a; help globalglobal Define global variable.global X Y Z defines X, Y, and Z as global in scope.Ordinarily, each MATLAB function has itsown local variables, which are separate from those of other functions,and from those of th…