调试frontend

This commit is contained in:
2026-07-21 14:04:49 +08:00
parent dd1e55aea3
commit b45152599e
18 changed files with 1840 additions and 1382 deletions
+4 -7
View File
@@ -16,14 +16,11 @@ export function getFrontMenus() {
* @param {Object} frontMenuData 前端导航数据
* @returns {Promise}
*/
export function createFrontMenu(formData, options = {}) {
export function createFrontMenu(formData) {
return request({
url: "/backend/createfrontmenu",
url: "/backend/frontmenus",
method: "post",
data: formData,
headers: {
"Content-Type": "multipart/form-data"
}
});
}
@@ -35,7 +32,7 @@ export function createFrontMenu(formData, options = {}) {
*/
export function editFrontMenu(id, frontMenuData) {
return request({
url: `/backend/editfrontmenu/${id}`,
url: `/backend/frontmenus/${id}`,
method: "post",
data: frontMenuData,
});
@@ -48,7 +45,7 @@ export function editFrontMenu(id, frontMenuData) {
*/
export function deleteFrontMenu(id) {
return request({
url: `/backend/deletefrontmenu/${id}`,
url: `/backend/frontmenus/${id}`,
method: "delete",
});
}
+34 -7
View File
@@ -6,7 +6,7 @@
</div>
<!-- 错误提示 -->
<div v-else-if="hasError" class="error-container">
<div v-else-if="hasError && list.length === 0" class="error-container">
<el-icon class="error-icon"><Warning /></el-icon>
<div class="error-text">{{ errorMsg }}</div>
<el-button size="small" @click="fetchMenus">重新加载</el-button>
@@ -289,13 +289,40 @@ const processMenus = (menus) => {
}));
};
const list = computed(() => {
const menuData = menuStore.menus;
if (!menuData || menuData.length === 0) {
return [];
}
const fixedCmsMenu = {
id: -200,
path: "/apps/cms",
title: "文章中心",
icon: "Document",
order: -200,
children: [
{
id: -201,
path: "/apps/cms/articles",
title: "文章管理",
icon: "Document",
order: 1,
children: []
},
{
id: -202,
path: "/apps/cms/articles/category",
title: "文章分类",
icon: "Folder",
order: 2,
children: []
}
]
};
const allMenus = processMenus(menuData);
const mergeFixedCmsMenu = (menus) => {
const hasCmsMenu = menus.some((menu) => menu.path === fixedCmsMenu.path);
return hasCmsMenu ? menus : [fixedCmsMenu, ...menus];
};
const list = computed(() => {
const menuData = menuStore.menus || [];
const allMenus = processMenus(mergeFixedCmsMenu(menuData));
const sortMenusRecursively = (menus) => {
menus.forEach((menu) => {
+15
View File
@@ -3,6 +3,19 @@ import { convertMenusToRoutes } from "./dynamicRoutes";
// 静态子路由:需要在 Main 框架内显示的页面
const staticMainChildren = [
// CMS 文章中心是系统内置功能,不依赖数据库菜单配置。
{
path: "/apps/cms/articles",
name: "CmsArticles",
component: () => import("@/views/apps/cms/articles/index.vue"),
meta: { requiresAuth: true, title: "文章管理", modulePath: "/apps/cms" }
},
{
path: "/apps/cms/articles/category",
name: "CmsArticleCategories",
component: () => import("@/views/apps/cms/articles/category.vue"),
meta: { requiresAuth: true, title: "文章分类", modulePath: "/apps/cms" }
},
{
path: "/user/userProfile",
name: "userProfile",
@@ -90,6 +103,8 @@ export async function loadAndAddDynamicRoutes() {
routesLoadingPromise = null;
return Promise.resolve();
} else {
// 即使权限菜单为空,也要注册内置文章中心路由。
addDynamicRoutes([]);
dynamicRoutesAdded = true;
routesLoadingPromise = null;
return Promise.resolve();
@@ -156,6 +156,11 @@ function toggleExpand(category) {
}
function handleDelete(category) {
if (Number(category.tid) === 0 || category.is_global === true) {
ElMessage.warning("全局分类不可删除");
return;
}
ElMessageBox.confirm(`确定要删除分类\"${category.label}\"吗?`, "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
@@ -53,9 +53,18 @@
<el-button type="text" title="添加子分类" @click.stop="$emit('add-child', item)">
<el-icon><Plus /></el-icon>
</el-button>
<el-button type="text" class="danger" title="删除" @click.stop="$emit('delete', item)">
<el-button
v-if="item.tid !== 0"
type="text"
class="danger"
title="删除"
@click.stop="$emit('delete', item)"
>
<el-icon><Delete /></el-icon>
</el-button>
<el-tag v-else type="info" size="small" title="全局分类不可删除">
全局
</el-tag>
</el-button-group>
</div>
</div>