fix: 上传200MB限制、备案信息、超级管理员仅首注、文件管理菜单
Made-with: Cursor
This commit is contained in:
@@ -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>
|
||||||
|
|||||||
@@ -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',
|
||||||
|
|||||||
23
admin/src/views/files/FileImages.vue
Normal file
23
admin/src/views/files/FileImages.vue
Normal 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>
|
||||||
@@ -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;
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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())
|
||||||
|
|
||||||
// CORS(ALLOWED_ORIGINS 为空则允许所有来源;否则仅允许配置的域名)
|
// CORS(ALLOWED_ORIGINS 为空则允许所有来源;否则仅允许配置的域名)
|
||||||
|
|||||||
@@ -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;' \
|
||||||
' }' \
|
' }' \
|
||||||
|
|||||||
@@ -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; }
|
||||||
|
|||||||
Reference in New Issue
Block a user