This commit is contained in:
2025-11-16 15:31:19 +08:00
committed by LeonMMcoset
parent 999a45a598
commit 2026a2ab22
83 changed files with 1104 additions and 399 deletions

View File

@@ -8,6 +8,7 @@ import Typography from "@mui/material/Typography";
import Button from "@mui/material/Button";
import Menu from "@mui/material/Menu";
import MenuItem from "@mui/material/MenuItem";
import Container from "@mui/material/Container";
import { ThemeProvider, createTheme } from "@mui/material/styles";
import CssBaseline from "@mui/material/CssBaseline";
import { styled } from "@mui/material/styles";
@@ -122,6 +123,11 @@ const ClientLayout: React.FC<ClientLayoutProps> = ({ children }) => {
>
LeonPan
</MenuItem>
<MenuItem
onClick={() => (window.location.href = "/project/leonapp")}
>
LeonAPP
</MenuItem>
{/* <MenuItem onClick={handleClose}>My account</MenuItem> */}
<StyledListHeader></StyledListHeader>
<MenuItem
@@ -134,6 +140,40 @@ const ClientLayout: React.FC<ClientLayoutProps> = ({ children }) => {
</AppBar>
</Box>
{children}
{/* 页脚区域 */}
<Box sx={{ bgcolor: 'primary.dark', color: 'white', py: 8, px: 2 }}>
<Container maxWidth="lg">
<Box sx={{
display: 'flex',
flexDirection: { xs: 'column', md: 'row' },
justifyContent: 'space-between',
alignItems: 'center',
mb: 6
}}>
<Typography variant="h5" gutterBottom fontWeight="bold">
LeonCloud
</Typography>
<Typography variant="body1" sx={{ opacity: 0.8 }}>
LeonMMcoset的所有产品的运营商
</Typography>
</Box>
<Box sx={{
height: 1,
bgcolor: 'white',
opacity: 0.1,
mb: 6
}}></Box>
<Typography variant="body2" align="center" paragraph>
© {new Date().getFullYear()} LeonCloud.
</Typography>
<Typography variant="caption" align="center" color="rgba(255,255,255,0.7)">
</Typography>
</Container>
</Box>
</ThemeProvider>
);
};

97
app/not-found.tsx Normal file
View File

@@ -0,0 +1,97 @@
'use client';
import React from 'react';
import { Container, Typography, Button, Box, useMediaQuery } from '@mui/material';
import { useTheme } from '@mui/material/styles';
import { ArrowBack } from '@mui/icons-material';
import Link from 'next/link';
import ClientLayout from './components/ClientLayout';
const NotFoundPage: React.FC = () => {
const theme = useTheme();
const isMobile = useMediaQuery(theme.breakpoints.down('sm'));
const isMedium = useMediaQuery(theme.breakpoints.down('md'));
return (
<Container maxWidth="md" sx={{ py: { xs: 8, md: 16 }, textAlign: 'center' }}>
<Box
sx={{
display: 'flex',
flexDirection: 'column',
alignItems: 'center',
justifyContent: 'center',
minHeight: '60vh',
gap: { xs: 4, md: 6 },
}}
>
{/* 404 大号数字 */}
<Typography
variant={isMobile ? 'h1' : 'h1'}
component="h1"
sx={{
fontWeight: 700,
fontSize: isMobile ? '5rem' : isMedium ? '8rem' : '10rem',
color: theme.palette.primary.main,
opacity: 0.8,
lineHeight: 1,
letterSpacing: '-0.05em',
textShadow: '2px 2px 4px rgba(0,0,0,0.1)',
}}
>
404
</Typography>
{/* 错误标题 */}
<Typography
variant={isMobile ? 'h5' : 'h4'}
component="h2"
sx={{
fontWeight: 600,
color: theme.palette.text.primary,
mb: 2,
}}
>
</Typography>
{/* 错误描述 */}
<Typography
variant="body1"
sx={{
maxWidth: '600px',
color: theme.palette.text.secondary,
mb: 6,
fontSize: isMobile ? '1rem' : '1.125rem',
}}
>
访
</Typography>
{/* 返回首页按钮 */}
<Button
component={Link}
href="/"
variant="contained"
startIcon={<ArrowBack />}
sx={{
px: { xs: 4, md: 6 },
py: { xs: 1.5, md: 2 },
borderRadius: '9999px',
fontSize: { xs: '0.9rem', md: '1rem' },
fontWeight: 600,
textTransform: 'none',
transition: 'all 0.3s ease',
'&:hover': {
transform: 'translateY(-2px)',
boxShadow: '0 10px 20px rgba(0,0,0,0.1)',
},
}}
>
</Button>
</Box>
</Container>
);
};
export default NotFoundPage;

View File

@@ -40,7 +40,19 @@ export default function Home() {
description: "个人项目展示平台",
image: "/projects/leonpan/logo.png",
href: "/project/leonpan"
}
},
{
name: "LeonBasic",
description: "基于Rust的简单易学的编程语言",
image: "/nologo.png",
href: "/project/leonbasic"
},
{
name: "LeonApp",
description: "基于PHP的轻量级应用程序",
image: "/projects/leonapp/logo.jpeg",
href: "/project/leonapp"
},
];
// 扩展服务类别数据
@@ -366,39 +378,6 @@ export default function Home() {
</Container>
</Box>
{/* 页脚区域 */}
<Box sx={{ bgcolor: 'primary.dark', color: 'white', py: 8, px: 2 }}>
<Container maxWidth="lg">
<Box sx={{
display: 'flex',
flexDirection: isMobile ? 'column' : 'row',
justifyContent: 'space-between',
alignItems: 'center',
mb: 6
}}>
<Typography variant="h5" gutterBottom fontWeight="bold">
LeonCloud
</Typography>
<Typography variant="body1" sx={{ opacity: 0.8 }}>
LeonMMcoset的所有产品的运营商
</Typography>
</Box>
<Box sx={{
height: 1,
bgcolor: 'white',
opacity: 0.1,
mb: 6
}}></Box>
<Typography variant="body2" align="center" paragraph>
© {new Date().getFullYear()} LeonCloud.
</Typography>
<Typography variant="caption" align="center" color="rgba(255,255,255,0.7)">
</Typography>
</Container>
</Box>
</Box>
);
}

View File

@@ -0,0 +1,502 @@
"use client";
import {
Card,
CardContent,
Typography,
Button,
Grid,
Box,
Container,
ImageList,
ImageListItem,
Link as MuiLink,
} from "@mui/material";
import { useTheme } from "@mui/material/styles";
import useMediaQuery from "@mui/material/useMediaQuery";
import GitHubIcon from "@mui/icons-material/GitHub";
import PublicIcon from "@mui/icons-material/Public";
import CodeIcon from "@mui/icons-material/Code";
import ShoppingCartIcon from "@mui/icons-material/ShoppingCart";
import SmartphoneIcon from "@mui/icons-material/Smartphone";
import RefreshIcon from "@mui/icons-material/Refresh";
import LinkIcon from "@mui/icons-material/Link";
export default function LeonAPP() {
const theme = useTheme();
const isMobile = useMediaQuery(theme.breakpoints.down("sm"));
const isMedium = useMediaQuery(theme.breakpoints.down("md"));
// 项目特点
const features = [
{
icon: (
<ShoppingCartIcon
color="primary"
style={{ fontSize: isMobile ? 24 : 32 }}
/>
),
title: "应用商城",
description: "提供各类应用和工具的展示与下载服务",
},
{
icon: (
<SmartphoneIcon
color="primary"
style={{ fontSize: isMobile ? 24 : 32 }}
/>
),
title: "移动友好",
description: "完全适配移动设备,提供流畅的用户体验",
},
{
icon: (
<RefreshIcon color="primary" style={{ fontSize: isMobile ? 24 : 32 }} />
),
title: "持续更新",
description: "v2版本正在开发中将带来全新的设计和实现",
},
{
icon: (
<CodeIcon color="primary" style={{ fontSize: isMobile ? 24 : 32 }} />
),
title: "开源项目",
description: "采用MIT开源协议鼓励社区参与和贡献",
},
];
return (
<Container maxWidth="lg" sx={{ py: { xs: 4, md: 8 } }}>
{/* 英雄区域 */}
<Box
sx={{
textAlign: "center",
mb: { xs: 6, md: 10 },
p: { xs: 4, md: 8 },
borderRadius: 4,
background:
"linear-gradient(135deg, rgba(63,81,181,0.05) 0%, rgba(63,81,181,0.1) 100%)",
}}
>
<Typography
variant="h3"
component="h1"
gutterBottom
sx={{ fontWeight: 700, mb: 3 }}
>
LeonAPP
</Typography>
<Typography variant="h6" color="text.secondary" gutterBottom>
</Typography>
<Typography
variant="body1"
sx={{
maxWidth: 600,
mx: "auto",
fontSize: { xs: "1rem", md: "1.1rem" },
}}
>
LeonCloud和武汉喵星创想互联网科技有限公司开发维护
</Typography>
<Box
sx={{
mt: 6,
display: "flex",
gap: 2,
justifyContent: "center",
flexWrap: "wrap",
}}
>
<Button
variant="contained"
startIcon={<PublicIcon />}
href="https://leon.miaostars.com"
target="_blank"
rel="noopener noreferrer"
sx={{ px: 3, py: 1.2 }}
>
访
</Button>
<Button
variant="outlined"
startIcon={<GitHubIcon />}
href="http://leonmmcoset.jjxmm.win:2000/LeonMMcoset/leonapp"
target="_blank"
rel="noopener noreferrer"
sx={{ px: 3, py: 1.2 }}
>
</Button>
</Box>
</Box>
{/* 项目概述 */}
<Box sx={{ mb: { xs: 8, md: 12 } }}>
<Typography
variant="h4"
component="h2"
gutterBottom
sx={{ mb: 4, fontWeight: 600 }}
>
</Typography>
<Grid container spacing={4}>
<Grid size={{ xs: 12, md: 6 }}>
<Typography variant="body1" sx={{ mb: 3, lineHeight: 1.8 }}>
LeonAPP是一个开源的应用商城项目
LeonCloud和武汉喵星创想互联网科技有限公司共同拥有和维护
</Typography>
<Typography variant="body1" sx={{ mb: 3, lineHeight: 1.8 }}>
LeonAPP
v1版本已发布PHP和HTML5技术栈实现LeonAPP
v2版本
</Typography>
<Typography variant="body1" sx={{ lineHeight: 1.8 }}>
MIT开源协议PC客户端使用GPLv3开源
</Typography>
</Grid>
<Grid size={{ xs: 12, md: 6 }}>
<Card sx={{ height: "100%", boxShadow: 3, borderRadius: 2 }}>
<CardContent>
<Typography
variant="h6"
gutterBottom
sx={{ mb: 2, fontWeight: 600 }}
>
</Typography>
<Box sx={{ display: "flex", flexDirection: "column", gap: 2 }}>
{features.map((feature, index) => (
<Box
key={index}
sx={{ display: "flex", alignItems: "flex-start", gap: 2 }}
>
<Box sx={{ color: theme.palette.primary.main, mt: 0.5 }}>
{feature.icon}
</Box>
<Box>
<Typography
variant="subtitle1"
sx={{ fontWeight: 600 }}
>
{feature.title}
</Typography>
<Typography variant="body2" color="text.secondary">
{feature.description}
</Typography>
</Box>
</Box>
))}
</Box>
</CardContent>
</Card>
</Grid>
</Grid>
</Box>
{/* 版本信息 */}
<Box sx={{ mb: { xs: 8, md: 12 } }}>
<Typography
variant="h4"
component="h2"
gutterBottom
sx={{ mb: 4, fontWeight: 600 }}
>
</Typography>
<Grid container spacing={4}>
<Grid size={{ xs: 12, md: 6 }}>
<Card sx={{ height: "100%", boxShadow: 2, borderRadius: 2 }}>
<CardContent>
<Typography
variant="h6"
gutterBottom
sx={{
mb: 2,
fontWeight: 600,
color: theme.palette.primary.main,
}}
>
LeonAPP v1
</Typography>
<Typography
variant="body2"
color="text.secondary"
sx={{ mb: 2 }}
>
</Typography>
<Typography variant="body1" sx={{ mb: 3 }}>
PHP和HTML5技术栈实现的应用商城系统
</Typography>
<Button
variant="outlined"
size="small"
startIcon={<GitHubIcon />}
href="http://leonmmcoset.jjxmm.win:2000/LeonMMcoset/leonapp"
target="_blank"
rel="noopener noreferrer"
>
</Button>
</CardContent>
</Card>
</Grid>
<Grid size={{ xs: 12, md: 6 }}>
<Card
sx={{
height: "100%",
boxShadow: 2,
borderRadius: 2,
borderLeft: `4px solid ${theme.palette.primary.main}`,
}}
>
<CardContent>
<Typography
variant="h6"
gutterBottom
sx={{
mb: 2,
fontWeight: 600,
color: theme.palette.primary.main,
}}
>
LeonAPP v2
</Typography>
<Typography
variant="body2"
color="text.secondary"
sx={{ mb: 2 }}
>
</Typography>
<Typography variant="body1" sx={{ mb: 3 }}>
</Typography>
<Button
variant="outlined"
size="small"
disabled
startIcon={<RefreshIcon />}
>
</Button>
</CardContent>
</Card>
</Grid>
</Grid>
</Box>
{/* 截图展示 */}
<Box sx={{ mb: { xs: 8, md: 12 } }}>
<Typography
variant="h4"
component="h2"
gutterBottom
sx={{ mb: 4, fontWeight: 600 }}
>
</Typography>
<Typography variant="body2" color="text.secondary" sx={{ mb: 4 }}>
LeonAPP v1界面预览
</Typography>
<ImageList
sx={{ width: "100%", height: "auto" }}
cols={isMobile ? 1 : isMedium ? 2 : 3}
rowHeight={250}
>
<ImageListItem>
<img
src="/projects/leonapp/img1.png"
alt="LeonAPP v1截图1"
loading="lazy"
style={{
borderRadius: "8px",
width: "100%",
height: "100%",
objectFit: "cover",
}}
/>
</ImageListItem>
<ImageListItem>
<img
src="/projects/leonapp/img2.png"
alt="LeonAPP v1截图2"
loading="lazy"
style={{
borderRadius: "8px",
width: "100%",
height: "100%",
objectFit: "cover",
}}
/>
</ImageListItem>
<ImageListItem>
<img
src="/projects/leonapp/img3.png"
alt="LeonAPP v1截图3"
loading="lazy"
style={{
borderRadius: "8px",
width: "100%",
height: "100%",
objectFit: "cover",
}}
/>
</ImageListItem>
</ImageList>
</Box>
{/* 资源链接 */}
<Box sx={{ mb: 6 }}>
<Typography
variant="h4"
component="h2"
gutterBottom
sx={{ mb: 4, fontWeight: 600 }}
>
</Typography>
<Grid container spacing={3}>
<Grid size={{ xs: 12, sm: 6, md: 4 }}>
<Card
sx={{
height: "100%",
transition: "transform 0.2s",
"&:hover": { transform: "translateY(-5px)" },
}}
>
<CardContent>
<LinkIcon
sx={{
fontSize: 40,
mb: 2,
color: theme.palette.primary.main,
}}
/>
<Typography variant="h6" gutterBottom>
</Typography>
<Typography
variant="body2"
color="text.secondary"
sx={{ mb: 3 }}
>
访LeonAPP官方网站
</Typography>
<Button
variant="contained"
fullWidth
href="https://leon.miaostars.com"
target="_blank"
rel="noopener noreferrer"
>
访
</Button>
</CardContent>
</Card>
</Grid>
<Grid size={{ xs: 12, sm: 6, md: 4 }}>
<Card
sx={{
height: "100%",
transition: "transform 0.2s",
"&:hover": { transform: "translateY(-5px)" },
}}
>
<CardContent>
<GitHubIcon
sx={{
fontSize: 40,
mb: 2,
color: theme.palette.primary.main,
}}
/>
<Typography variant="h6" gutterBottom>
</Typography>
<Typography
variant="body2"
color="text.secondary"
sx={{ mb: 3 }}
>
</Typography>
<Button
variant="outlined"
fullWidth
href="http://leonmmcoset.jjxmm.win:2000/LeonMMcoset/leonapp"
target="_blank"
rel="noopener noreferrer"
>
</Button>
</CardContent>
</Card>
</Grid>
<Grid size={{ xs: 12, sm: 6, md: 4 }}>
<Card
sx={{
height: "100%",
transition: "transform 0.2s",
"&:hover": { transform: "translateY(-5px)" },
}}
>
<CardContent>
<CodeIcon
sx={{
fontSize: 40,
mb: 2,
color: theme.palette.primary.main,
}}
/>
<Typography variant="h6" gutterBottom>
</Typography>
<Typography
variant="body2"
color="text.secondary"
sx={{ mb: 3 }}
>
v1: PHP + HTML5
<br />
v2: 开发中...
</Typography>
<Button
variant="outlined"
fullWidth
href="http://leonmmcoset.jjxmm.win:2000/LeonMMcoset/leonapp"
target="_blank"
rel="noopener noreferrer"
>
</Button>
</CardContent>
</Card>
</Grid>
</Grid>
</Box>
{/* 页脚 */}
<Box
sx={{
mt: 12,
pt: 6,
borderTop: "1px solid",
borderColor: "divider",
textAlign: "center",
}}
>
<Typography variant="body2" color="text.secondary">
© {new Date().getFullYear()} LeonCloud &
</Typography>
<Typography variant="body2" color="text.secondary" sx={{ mt: 1 }}>
LeonAPP -
</Typography>
</Box>
</Container>
);
}

View File

@@ -42,29 +42,9 @@ export default function LeonBasic() {
// 示例代码
const exampleCode = `// LeonBasic示例代码
print("Hello, World!")
// 变量声明
name = "LeonBasic"
version = 1.0
// 条件语句
if version > 0.5:
print(f"当前版本: {version}")
else:
print("需要更新版本")
// 循环语句
for i in range(1, 5):
print(f"计数: {i}")
// 函数定义
def greet(name):
return f"你好, {name}!"
// 函数调用
message = greet("开发者")
print(message)`;
require("basic");
var(input) = basic.input(string:"");
basic.print(string:"请输入一个数字:" + var(input));`;
return (
<Container maxWidth="lg" sx={{ py: { xs: 4, md: 8 } }}>
@@ -157,7 +137,7 @@ print(message)`;
</Box>
{/* 语法示例 */}
{/* <Box sx={{ mb: { xs: 8, md: 12 } }}>
<Box sx={{ mb: { xs: 8, md: 12 } }}>
<Typography variant="h4" component="h2" gutterBottom sx={{ mb: 4, fontWeight: 600 }}>
</Typography>
@@ -188,7 +168,7 @@ print(message)`;
{exampleCode}
</Box>
</Card>
</Box> */}
</Box>
{/* 资源链接 */}
<Box sx={{ mb: 6 }}>
@@ -253,7 +233,7 @@ print(message)`;
<Button
variant="outlined"
fullWidth
href="https://lb.jjmm.ink/docs"
href="https://github.com/Leonmmcoset/LeonLang/tree/master/test"
target="_blank"
rel="noopener noreferrer"
>
@@ -268,7 +248,7 @@ print(message)`;
{/* 页脚 */}
<Box sx={{ textAlign: 'center', mt: 12, pt: 4, borderTop: '1px solid rgba(0,0,0,0.1)' }}>
<Typography variant="body2" color="text.secondary">
© {new Date().getFullYear()} LeonBasic Programming Language
© {new Date().getFullYear()} LeonMMcoset
</Typography>
</Box>
</Container>