Files
MER-2.2_2601/mer_plat_admin/src/router/index.js
AriadenCaseblg 61c5d964a3 feat: 移植商户端订单管理到平台端 & 新增订单打印功能
1. 将商户端订单管理功能完整移植到平台端管理后台,包括:
   - 商户订单列表、退款单、预约管理(服务看板+工单管理)
   - 菜单名称加"商户"前缀,区别于平台端原有订单管理
   - 不影响平台端原有订单管理功能

2. 新增订单打印功能:
   - 前端:独立打印页面(无layout),支持浏览器打印
   - 后端:新增打印专用API,使用eb_sync_order_detail_staging表的product_name和info字段

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-10 11:16:27 +08:00

270 lines
7.9 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2026 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
import Vue from 'vue';
import Router from 'vue-router';
Vue.use(Router);
/* Layout */
import Layout from '@/layout';
/* Router Modules */
// import componentsRouter from './modules/components'
import productRouter from './modules/product';
import orderRouter from './modules/order';
import userRouter from './modules/user';
import distributionRouter from './modules/distribution';
import marketingRouter from './modules/marketing';
import financeRouter from './modules/finance';
import operationRouter from './modules/operation';
import merchant from './modules/merchant';
import pagediy from '@/router/modules/pagediy';
import areaRouter from './modules/area';
import merchantOrderRouter from './modules/merchantOrder';
/**
* Note: sub-menu only appear when route children.length >= 1
* Detail see: https://panjiachen.github.io/vue-element-admin-site/guide/essentials/router-and-nav.html
*
* hidden: true if set true, item will not show in the sidebar(default is false)
* alwaysShow: true if set true, will always show the root menu
* if not set alwaysShow, when item has more than one children route,
* it will becomes nested mode, otherwise not show the root menu
* redirect: noRedirect if set noRedirect will no redirect in the breadcrumb
* name:'router-name' the name is used by <keep-alive> (must set!!!)
* meta : {
roles: ['admin','editor'] control the page roles (you can set multiple roles)
title: 'title' the name show in sidebar and breadcrumb (recommend set)
icon: 'svg-name' the icon show in the sidebar
noCache: true if set true, the page will no be cached(default is false)
affix: true if set true, the tag will affix in the tags-view
breadcrumb: false if set false, the item will hidden in breadcrumb(default is true)
activeMenu: '/example/list' if set path, the sidebar will highlight the path you set
}
*/
/**
* constantRoutes
* a base page that does not have permission requirements
* all roles can be accessed
*
*/
export const constantRoutes = [
// 商品
productRouter,
// 订单
orderRouter,
// 会员
userRouter,
// 分销
distributionRouter,
// 营销
marketingRouter,
// 财务
financeRouter,
// 设置
operationRouter,
//商户管理
merchant,
// 页面diy
pagediy,
// 圈层管理
areaRouter,
// 商户订单管理(从商户端移植)
merchantOrderRouter,
{
path: '/404',
component: () => import('@/views/error-page/404'),
hidden: true,
},
{
path: '/page/design/creatDevise/:id?/:type?/:fromTo?',
component: () => import('@/views/pagediy/devise/creatDevise'),
hidden: true,
},
{
path: '/redirect',
component: Layout,
hidden: true,
children: [
{
path: '/redirect/:path(.*)',
component: () => import('@/views/redirect/index'),
},
],
},
{
path: '/login',
name: 'Login',
component: () => import('@/views/login/index'),
hidden: true,
},
{
path: '/auth-redirect',
component: () => import('@/views/login/auth-redirect'),
hidden: true,
},
{
path: '/401',
component: () => import('@/views/error-page/401'),
hidden: true,
},
// {
// path: '/',
// component: Layout,
// redirect: '/dashboard',
// name: 'Dashboard',
// meta: {
// title: '控制台',
// icon: 'clipboard',
// },
// children: [
// {
// path: '/dashboard',
// component: () => import('@/views/dashboard/index'),
// name: 'DashboardIndex',
// meta: { title: '主页', icon: 'dashboard' },
// },
// ],
// },
{
path: '/',
component: Layout,
redirect: '/dashboard',
children: [
{
path: '/dashboard',
component: () => import('@/views/dashboard/index'),
name: 'Dashboard',
meta: { title: '主页', icon: 'dashboard', isAffix: true },
},
{
path: '/dashboard/statistic/product',
component: () => import('@/views/dashboard/product/index'),
name: 'productStatistic',
meta: { title: '商品统计', icon: 'dashboard' },
},
{
path: '/dashboard/statistic/order',
component: () => import('@/views/dashboard/order/index'),
name: 'orderStatistic',
meta: { title: '订单统计', icon: 'dashboard' },
},
{
path: '/dashboard/statistic/user',
component: () => import('@/views/dashboard/user/index'),
name: 'userStatistic',
meta: { title: '用户统计', icon: 'dashboard' },
},
],
},
{
path: '/circle',
component: Layout,
redirect: '/circle/dashboard',
children: [
{
path: 'dashboard',
component: () => import('@/views/dashboard/index'),
name: 'circle_Dashboard',
meta: { title: '主页', icon: 'dashboard'},
},
],
},
{
path: '/merchantOrder/print/:orderNo',
component: () => import('@/views/merchantOrder/orderPrint'),
name: 'MerchantOrderPrint',
hidden: true,
meta: { title: '订单打印' },
},
{
path: '/setting/uploadPicture',
component: () => import('@/components/base/uploadPicture.vue'),
name: 'uploadPicture',
},
// 404 page must be placed at the end !!!
{ path: '*', redirect: '/404', hidden: true },
];
// 生成带circle前缀的路由函数
function generateCircleRoutes(routes, prefix = 'circle', split = '', isChild = false) {
return routes.map((route) => {
let newRoute;
if (isChild) {
newRoute = {
...route,
name: route.name ? `circle_${route.name}` : undefined,
meta: {
...route.meta,
isCircleRoute: true,
},
};
} else {
if (route.path != '*') {
newRoute = {
...route,
path: route.path == '/' ? route.path + prefix : split + prefix + route.path,
name: route.name ? `circle_${route.name}` : undefined,
meta: {
...route.meta,
isCircleRoute: true,
},
};
} else {
newRoute = {
...route,
meta: {
...route.meta,
isCircleRoute: true,
},
};
}
}
// 递归处理子路由
if (route.children) {
newRoute.children = generateCircleRoutes(route.children, 'circle', '', true); // 子路由不需要再加前缀
}
// if(route.redirect == '/dashboard'){
// newRoute.redirect = '/circle/dashboard';
// }
return newRoute;
});
}
// 动态添加circle路由
const circleRoutes = generateCircleRoutes(constantRoutes, 'circle', '/');
/**
* asyncRoutes
* the routes that need to be dynamically loaded based on user roles
*/
export const asyncRoutes = [];
const createRouter = () =>
new Router({
// mode: 'history', // require service support
mode: 'history',
scrollBehavior: () => ({ y: 0 }),
routes: constantRoutes,
});
const router = createRouter();
router.addRoutes(circleRoutes);
// Detail see: https://github.com/vuejs/vue-router/issues/1234#issuecomment-357941465
export function resetRouter() {
const newRouter = createRouter();
router.matcher = newRouter.matcher; // reset router
}
export default router;