fix: 上传200MB限制、备案信息、超级管理员仅首注、文件管理菜单

Made-with: Cursor
This commit is contained in:
whm
2026-03-18 16:50:20 +08:00
parent 31b1f2bb4c
commit d5bc102bd7
8 changed files with 92 additions and 9 deletions

View File

@@ -9,10 +9,19 @@
text-color="#bfcbd9" text-color="#bfcbd9"
active-text-color="#409EFF" active-text-color="#409EFF"
> >
<el-menu-item v-for="item in menuItems" :key="item.index" :index="item.index"> <template v-for="item in menuItems" :key="item.index">
<el-menu-item v-if="!item.children" :index="item.index">
<el-icon><component :is="item.icon" /></el-icon> <el-icon><component :is="item.icon" /></el-icon>
<span>{{ item.title }}</span> <span>{{ item.title }}</span>
</el-menu-item> </el-menu-item>
<el-sub-menu v-else :index="item.index">
<template #title>
<el-icon><component :is="item.icon" /></el-icon>
<span>{{ item.title }}</span>
</template>
<el-menu-item v-for="sub in item.children" :key="sub.index" :index="sub.index">{{ sub.title }}</el-menu-item>
</el-sub-menu>
</template>
</el-menu> </el-menu>
</el-aside> </el-aside>
<el-container> <el-container>
@@ -26,6 +35,7 @@
<el-main class="main"> <el-main class="main">
<router-view /> <router-view />
</el-main> </el-main>
<footer class="layout-footer">成都宇惠达智能科技有限公司 <a href="https://beian.miit.gov.cn/" target="_blank" rel="noopener">蜀ICP备2025134957号-1</a></footer>
</el-container> </el-container>
</el-container> </el-container>
</template> </template>
@@ -61,10 +71,25 @@ const menuItems = computed(() => {
{ index: '/sites', title: '站点管理', icon: Monitor, permission: 'site:manage' }, { index: '/sites', title: '站点管理', icon: Monitor, permission: 'site:manage' },
{ index: '/pages', title: '网页管理', icon: Document, permission: 'page:manage' }, { index: '/pages', title: '网页管理', icon: Document, permission: 'page:manage' },
{ index: '/homepage-edit', title: '首页编辑', icon: EditPen, permission: 'homepage:edit' }, { index: '/homepage-edit', title: '首页编辑', icon: EditPen, permission: 'homepage:edit' },
{ index: '/module-upload', title: '功能模块上传', icon: Upload, permission: 'module:upload' }, {
index: 'files',
title: '文件管理',
icon: Folder,
permission: null,
children: [
{ index: '/files/images', title: '图片管理(含图标)', permission: null },
{ index: '/module-upload', title: '功能模块上传', permission: 'module:upload' }
]
},
{ index: '/role-permissions', title: '角色权限管理', icon: Key, permission: 'role:permission' } { index: '/role-permissions', title: '角色权限管理', icon: Key, permission: 'role:permission' }
] ]
return all.filter((item) => hasPermission(item.permission)) return all.filter((item) => {
if (item.children) {
item.children = item.children.filter((sub) => hasPermission(sub.permission))
return hasPermission(item.permission) && item.children.length > 0
}
return hasPermission(item.permission)
})
}) })
const handleLogout = () => { const handleLogout = () => {
@@ -109,4 +134,13 @@ const handleLogout = () => {
background: #f0f2f5; background: #f0f2f5;
padding: 20px; padding: 20px;
} }
.layout-footer {
padding: 8px 20px;
font-size: 12px;
color: #999;
text-align: center;
border-top: 1px solid #eee;
}
.layout-footer a { color: #999; text-decoration: none; }
.layout-footer a:hover { text-decoration: underline; }
</style> </style>

View File

@@ -66,6 +66,12 @@ const routes = [
component: () => import('../views/sites/HomepageEdit.vue'), component: () => import('../views/sites/HomepageEdit.vue'),
meta: { title: '首页编辑', permission: 'homepage:edit' } meta: { title: '首页编辑', permission: 'homepage:edit' }
}, },
{
path: 'files/images',
name: 'FileImages',
component: () => import('../views/files/FileImages.vue'),
meta: { title: '图片管理', permission: null }
},
{ {
path: 'module-upload', path: 'module-upload',
name: 'ModuleUpload', name: 'ModuleUpload',

View File

@@ -0,0 +1,23 @@
<!--
文件管理可自定义功能子模块默认包含图片管理图标管理图标归在图片管理下
文件支持可下载 / 不可下载
超级管理员仅一个默认取第一个注册用户
-->
<template>
<div class="file-images">
<el-card>
<template #header>
<span>图片管理</span>
<el-tag size="small" style="margin-left:8px">含图标</el-tag>
</template>
<p class="tip">图片与图标统一在此管理支持可下载/不可下载功能开发中</p>
</el-card>
</div>
</template>
<script setup>
</script>
<style scoped>
.file-images .tip { color: #666; font-size: 14px; }
</style>

View File

@@ -4,6 +4,7 @@ server {
listen 443 ssl http2; listen 443 ssl http2;
listen [::]:443 ssl http2; listen [::]:443 ssl http2;
server_name yuheng.yuxindazhineng.com; server_name yuheng.yuxindazhineng.com;
client_max_body_size 200m;
ssl_certificate /etc/ssl/yh_web/yuheng.yuxindazhineng.com/fullchain.pem; ssl_certificate /etc/ssl/yh_web/yuheng.yuxindazhineng.com/fullchain.pem;
ssl_certificate_key /etc/ssl/yh_web/yuheng.yuxindazhineng.com/privkey.pem; ssl_certificate_key /etc/ssl/yh_web/yuheng.yuxindazhineng.com/privkey.pem;

View File

@@ -179,12 +179,21 @@ func Register(c *gin.Context) {
} }
} }
// 超级管理员仅一个:第一个注册用户为超级管理员,后续均为普通用户
count, _ := coll.CountDocuments(ctx, bson.M{})
roleID := models.RoleIDUser
role := "user"
if count == 0 {
roleID = models.RoleIDSuperAdmin
role = "admin"
}
doc := bson.M{ doc := bson.M{
"username": username, "username": username,
"mobile": input.Mobile, "mobile": input.Mobile,
"password": utils.HashPassword(input.Password), "password": utils.HashPassword(input.Password),
"role": "admin", "role": role,
"role_id": models.RoleIDSuperAdmin, "role_id": roleID,
} }
if input.Email != "" { if input.Email != "" {
doc["email"] = input.Email doc["email"] = input.Email

View File

@@ -79,6 +79,7 @@ func main() {
} }
r := gin.Default() r := gin.Default()
r.MaxMultipartMemory = 200 << 20 // 200MB与 Nginx client_max_body_size 一致,避免上传 413
r.Use(middleware.ErrorLogger()) r.Use(middleware.ErrorLogger())
// CORSALLOWED_ORIGINS 为空则允许所有来源;否则仅允许配置的域名) // CORSALLOWED_ORIGINS 为空则允许所有来源;否则仅允许配置的域名)

View File

@@ -22,6 +22,9 @@ RUN printf '%s\n' \
' alias /verify-root/$1;' \ ' alias /verify-root/$1;' \
' }' \ ' }' \
'' \ '' \
' location = / {' \
' try_files /index.html =404;' \
' }' \
' location / {' \ ' location / {' \
' try_files $uri $uri/ /index.html;' \ ' try_files $uri $uri/ /index.html;' \
' }' \ ' }' \

View File

@@ -48,7 +48,10 @@
</div> </div>
</section> </section>
<footer><p>{{ data.footer_text || '© 2024 YUHENG ONE // STELLAR EXPLORATION INITIATIVE' }}</p></footer> <footer>
<p>{{ data.footer_text || '© 2024 YUHENG ONE // STELLAR EXPLORATION INITIATIVE' }}</p>
<p class="beian">成都宇惠达智能科技有限公司 <a href="https://beian.miit.gov.cn/" target="_blank" rel="noopener">蜀ICP备2025134957号-1</a></p>
</footer>
</div> </div>
</template> </template>
@@ -360,6 +363,9 @@ onUnmounted(() => {
margin-top: 80px; position: relative; z-index: 10; margin-top: 80px; position: relative; z-index: 10;
} }
.landing footer p { color: rgba(255,255,255,0.3); font-size: 12px; font-family: 'Exo 2', sans-serif; letter-spacing: 2px; } .landing footer p { color: rgba(255,255,255,0.3); font-size: 12px; font-family: 'Exo 2', sans-serif; letter-spacing: 2px; }
.landing footer .beian { margin-top: 8px; }
.landing footer .beian a { color: rgba(255,255,255,0.4); text-decoration: none; }
.landing footer .beian a:hover { text-decoration: underline; }
@media (max-width: 768px) { @media (max-width: 768px) {
.navbar { padding: 15px 20px; } .navbar { padding: 15px 20px; }