|
@@ -1,102 +1,696 @@
|
|
|
-'use strict'
|
|
|
|
|
-// Template version: 1.2.5
|
|
|
|
|
-// see http://vuejs-templates.github.io/webpack for documentation.
|
|
|
|
|
-
|
|
|
|
|
-const path = require('path')
|
|
|
|
|
-const devEnv = require('./dev.env')
|
|
|
|
|
-
|
|
|
|
|
-module.exports = {
|
|
|
|
|
- configureWebpack: {
|
|
|
|
|
- module: {
|
|
|
|
|
- rules: [{
|
|
|
|
|
- test: /\.mjs$/,
|
|
|
|
|
- include: /node_modules/,
|
|
|
|
|
- type: 'javascript/auto'
|
|
|
|
|
- }]
|
|
|
|
|
|
|
+/**
|
|
|
|
|
+ * 全站路由配置
|
|
|
|
|
+ *
|
|
|
|
|
+ * 建议:
|
|
|
|
|
+ * 1. 代码中路由统一使用name属性跳转(不使用path属性)
|
|
|
|
|
+ */
|
|
|
|
|
+import Vue from "vue";
|
|
|
|
|
+import Router from "vue-router";
|
|
|
|
|
+import http from "@/utils/httpRequest";
|
|
|
|
|
+import { isURL } from "@/utils/validate";
|
|
|
|
|
+import { clearLoginInfo } from "@/utils";
|
|
|
|
|
+
|
|
|
|
|
+Vue.use(Router);
|
|
|
|
|
+
|
|
|
|
|
+// 开发环境不使用懒加载, 因为懒加载页面太多的话会造成webpack热更新太慢, 所以只有生产环境使用懒加载
|
|
|
|
|
+const _import = require("./import-" + process.env.NODE_ENV);
|
|
|
|
|
+
|
|
|
|
|
+// 全局路由(无需嵌套上左右整体布局)
|
|
|
|
|
+const globalRoutes = [
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/404",
|
|
|
|
|
+ component: _import("common/404"),
|
|
|
|
|
+ name: "404",
|
|
|
|
|
+ meta: { title: "404未找到" }
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/login",
|
|
|
|
|
+ component: _import("common/login"),
|
|
|
|
|
+ name: "login",
|
|
|
|
|
+ meta: { title: "登录" }
|
|
|
|
|
+ }
|
|
|
|
|
+];
|
|
|
|
|
+
|
|
|
|
|
+// 主入口路由(需嵌套上左右整体布局)
|
|
|
|
|
+const mainRoutes = {
|
|
|
|
|
+ path: "/",
|
|
|
|
|
+ component: _import("main"),
|
|
|
|
|
+ name: "main",
|
|
|
|
|
+ redirect: { name: "home" },
|
|
|
|
|
+ meta: { title: "主入口整体布局" },
|
|
|
|
|
+ children: [
|
|
|
|
|
+ // 通过meta对象设置路由展示方式
|
|
|
|
|
+ // 1. isTab: 是否通过tab展示内容, true: 是, false: 否
|
|
|
|
|
+ // 2. iframeUrl: 是否通过iframe嵌套展示内容, '以http[s]://开头': 是, '': 否
|
|
|
|
|
+ // 提示: 如需要通过iframe嵌套展示内容, 但不通过tab打开, 请自行创建组件使用iframe处理!
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/home",
|
|
|
|
|
+ component: _import("common/home"),
|
|
|
|
|
+ name: "home",
|
|
|
|
|
+ meta: { title: "首页" }
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/userList",
|
|
|
|
|
+ component: _import("user/userList"),
|
|
|
|
|
+ name: "userList",
|
|
|
|
|
+ meta: { title: "用户列表", isTab: true }
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/allocationList",
|
|
|
|
|
+ component: _import("allocation/allocationList"),
|
|
|
|
|
+ name: "allocationList",
|
|
|
|
|
+ meta: { title: "配置列表", isTab: true }
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/financeList",
|
|
|
|
|
+ component: _import("finance/financeList"),
|
|
|
|
|
+ name: "financeList",
|
|
|
|
|
+ meta: { title: "财务中心", isTab: true }
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/message",
|
|
|
|
|
+ component: _import("message/message"),
|
|
|
|
|
+ name: "message",
|
|
|
|
|
+ meta: { title: "消息中心", isTab: true }
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/recharge",
|
|
|
|
|
+ component: _import("recharge/recharge"),
|
|
|
|
|
+ name: "recharge",
|
|
|
|
|
+ meta: { title: "充值记录", isTab: true }
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/downList",
|
|
|
|
|
+ component: _import("downLoad/downList"),
|
|
|
|
|
+ name: "downList",
|
|
|
|
|
+ meta: { title: "导出记录", isTab: true }
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/taskConfig",
|
|
|
|
|
+ component: _import("taskConfig/taskConfig"),
|
|
|
|
|
+ name: "taskConfig",
|
|
|
|
|
+ meta: { title: "任务配置", isTab: true }
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/bannerList",
|
|
|
|
|
+ component: _import("banner/bannerList"),
|
|
|
|
|
+ name: "bannerList",
|
|
|
|
|
+ meta: { title: "商城配置", isTab: true }
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/mission",
|
|
|
|
|
+ component: _import("mission/mission"),
|
|
|
|
|
+ name: "mission",
|
|
|
|
|
+ meta: { title: "订单中心", isTab: true }
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/system",
|
|
|
|
|
+ component: _import("mission/system"),
|
|
|
|
|
+ name: "system",
|
|
|
|
|
+ meta: { title: "系统任务", isTab: true }
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/missionsye",
|
|
|
|
|
+ component: _import("sysmission/missionsye"),
|
|
|
|
|
+ name: "missionsye",
|
|
|
|
|
+ meta: { title: "活动派送", isTab: true }
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/materialsList",
|
|
|
|
|
+ component: _import("materials/materialsList"),
|
|
|
|
|
+ name: "materialsList",
|
|
|
|
|
+ meta: { title: "好物圈", isTab: true }
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/missionAdd",
|
|
|
|
|
+ component: _import("sysmission/missionAdd"),
|
|
|
|
|
+ name: "missionAdd",
|
|
|
|
|
+ meta: { title: "发布任务", isTab: false }
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/missionRedact",
|
|
|
|
|
+ component: _import("sysmission/missionRedact"),
|
|
|
|
|
+ name: "missionRedact",
|
|
|
|
|
+ meta: { title: "修改任务", isTab: false }
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/userDetail",
|
|
|
|
|
+ component: _import("user/userDetail"),
|
|
|
|
|
+ name: "userDetail",
|
|
|
|
|
+ meta: { title: "用户详情", isTab: false }
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/userDetail1",
|
|
|
|
|
+ component: _import("user/userDetail1"),
|
|
|
|
|
+ name: "userDetail1",
|
|
|
|
|
+ meta: { title: "用户详情", isTab: false }
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/missionDetails",
|
|
|
|
|
+ component: _import("mission/missionDetails"),
|
|
|
|
|
+ name: "missionDetails",
|
|
|
|
|
+ meta: { title: "任务详情", isTab: false }
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/fitmentList",
|
|
|
|
|
+ component: _import("fitment/fitmentList"),
|
|
|
|
|
+ name: "fitmentList",
|
|
|
|
|
+ meta: { title: "首页装修", isTab: false }
|
|
|
|
|
+ },
|
|
|
|
|
+
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/coupon",
|
|
|
|
|
+ component: _import("coupon/coupon"),
|
|
|
|
|
+ name: "coupon",
|
|
|
|
|
+ meta: { title: "优惠券管理", isTab: true }
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/couponList",
|
|
|
|
|
+ component: _import("coupon/couponList"),
|
|
|
|
|
+ name: "couponList",
|
|
|
|
|
+ meta: { title: "优惠券列表", isTab: true }
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/huodongList",
|
|
|
|
|
+ component: _import("coupon/huodongList"),
|
|
|
|
|
+ name: "huodongList",
|
|
|
|
|
+ meta: { title: "活动参与记录", isTab: true }
|
|
|
|
|
+ },
|
|
|
|
|
+
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/missionComplain",
|
|
|
|
|
+ component: _import("mission/missionComplain"),
|
|
|
|
|
+ name: "missionComplain",
|
|
|
|
|
+ meta: { title: "任务投诉", isTab: true }
|
|
|
|
|
+ },
|
|
|
|
|
+
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/classifyAdmin",
|
|
|
|
|
+ component: _import("selfShop/classifyAdmin"),
|
|
|
|
|
+ name: "classifyAdmin",
|
|
|
|
|
+ meta: { title: "商品分类", isTab: true }
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/orderAdmin",
|
|
|
|
|
+ component: _import("selfShop/orderAdmin"),
|
|
|
|
|
+ name: "orderAdmin",
|
|
|
|
|
+ meta: { title: "自营订单", isTab: true }
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/addressAamin",
|
|
|
|
|
+ component: _import("selfShop/addressAamin"),
|
|
|
|
|
+ name: "addressAamin",
|
|
|
|
|
+ meta: { title: "地址管理", isTab: true }
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/shopAdmin",
|
|
|
|
|
+ component: _import("selfShop/shopAdmin"),
|
|
|
|
|
+ name: "shopAdmin",
|
|
|
|
|
+ meta: { title: "商品管理", isTab: true }
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/fenxiaoOrder",
|
|
|
|
|
+ component: _import("selfShop/fenxiaoOrder"),
|
|
|
|
|
+ name: "fenxiaoOrder",
|
|
|
|
|
+ meta: { title: "分销订单", isTab: true }
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/disposeOrder",
|
|
|
|
|
+ component: _import("selfShop/disposeOrder"),
|
|
|
|
|
+ name: "disposeOrder",
|
|
|
|
|
+ meta: { title: "待处理订单", isTab: true }
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/shopConfig",
|
|
|
|
|
+ component: _import("selfShop/shopConfig"),
|
|
|
|
|
+ name: "shopConfig",
|
|
|
|
|
+ meta: { title: "自营商城配置", isTab: true }
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/shopPublish",
|
|
|
|
|
+ component: _import("selfShop/shopPublish"),
|
|
|
|
|
+ name: "shopPublish",
|
|
|
|
|
+ meta: { title: "发布商品", isTab: false }
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/shopAmend",
|
|
|
|
|
+ component: _import("selfShop/shopAmend"),
|
|
|
|
|
+ name: "shopAmend",
|
|
|
|
|
+ meta: { title: "修改商品", isTab: false }
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/specification",
|
|
|
|
|
+ component: _import("selfShop/specification"),
|
|
|
|
|
+ name: "specification",
|
|
|
|
|
+ meta: { title: "商品规格", isTab: true }
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/orderDetails",
|
|
|
|
|
+ component: _import("selfShop/orderDetails"),
|
|
|
|
|
+ name: "orderDetails",
|
|
|
|
|
+ meta: { title: "订单详情", isTab: true }
|
|
|
|
|
+ },
|
|
|
|
|
+
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/shopsList",
|
|
|
|
|
+ component: _import("shopsList/shopsList"),
|
|
|
|
|
+ name: "shopsList",
|
|
|
|
|
+ meta: { title: "商铺中心", isTab: true }
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/shopDatas",
|
|
|
|
|
+ component: _import("shopsList/shopDatas"),
|
|
|
|
|
+ name: "shopDatas",
|
|
|
|
|
+ meta: { title: "商铺数据", isTab: false }
|
|
|
|
|
+ },
|
|
|
|
|
+
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/shopsListAdmin",
|
|
|
|
|
+ component: _import("shopsList/shopAdmin"),
|
|
|
|
|
+ name: "shopsListAdmin",
|
|
|
|
|
+ meta: { title: "商铺商品管理", isTab: false }
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/shopsOrder",
|
|
|
|
|
+ component: _import("shopsList/shopsOrder"),
|
|
|
|
|
+ name: "shopsOrder",
|
|
|
|
|
+ meta: { title: "商铺订单", isTab: false }
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/shopPrintSet",
|
|
|
|
|
+ component: _import("shopsList/shopPrintSet"),
|
|
|
|
|
+ name: "shopPrintSet",
|
|
|
|
|
+ meta: { title: "打印配置", isTab: false }
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/topupmoney",
|
|
|
|
|
+ component: _import("topupmoney/topupmoney"),
|
|
|
|
|
+ name: "topupmoney",
|
|
|
|
|
+ meta: { title: "充值配置", isTab: true }
|
|
|
|
|
+ },
|
|
|
|
|
+
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/shopsListSm",
|
|
|
|
|
+ component: _import("shopManagement/shopsList"),
|
|
|
|
|
+ name: "shopsListSm",
|
|
|
|
|
+ meta: { title: "商铺中心", isTab: false }
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/shopsListAdminSm",
|
|
|
|
|
+ component: _import("shopManagement/shopAdmin"),
|
|
|
|
|
+ name: "shopsListAdminSm",
|
|
|
|
|
+ meta: { title: "商铺商品管理", isTab: true }
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/missionSm",
|
|
|
|
|
+ component: _import("shopManagement/mission"),
|
|
|
|
|
+ name: "missionSm",
|
|
|
|
|
+ meta: { title: "订单中心", isTab: false }
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/shopsOrderSm",
|
|
|
|
|
+ component: _import("shopManagement/shopsOrder"),
|
|
|
|
|
+ name: "shopsOrderSm",
|
|
|
|
|
+ meta: { title: "商铺订单", isTab: true }
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/shopDatasSm",
|
|
|
|
|
+ component: _import("shopsList/shopDatas"),
|
|
|
|
|
+ name: "shopDatasSm",
|
|
|
|
|
+ meta: { title: "商铺数据", isTab: true }
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/shopAutonym",
|
|
|
|
|
+ component: _import("shopAutonym/shopAutonym"),
|
|
|
|
|
+ name: "shopAutonym",
|
|
|
|
|
+ meta: { title: "商户审核", isTab: true }
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/shopduanxinlistRun",
|
|
|
|
|
+ component: _import("shopManagement/duanxinlist"),
|
|
|
|
|
+ name: "shopduanxinlistRun",
|
|
|
|
|
+ meta: { title: "商家短信记录", isTab: true }
|
|
|
|
|
+ },
|
|
|
|
|
+
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/missionRun",
|
|
|
|
|
+ component: _import("runErrands/mission"),
|
|
|
|
|
+ name: "missionRun",
|
|
|
|
|
+ meta: { title: "跑腿任务", isTab: true }
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/orderCenterRun",
|
|
|
|
|
+ component: _import("runErrands/orderCenter"),
|
|
|
|
|
+ name: "orderCenterRun",
|
|
|
|
|
+ meta: { title: "跑腿订单", isTab: true }
|
|
|
|
|
+ },
|
|
|
|
|
+
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/duanxinlistRun",
|
|
|
|
|
+ component: _import("runErrands/duanxinlist"),
|
|
|
|
|
+ name: "duanxinlistRun",
|
|
|
|
|
+ meta: { title: "短信记录", isTab: true }
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/duanxinmobanRun",
|
|
|
|
|
+ component: _import("runErrands/duanxinmoban"),
|
|
|
|
|
+ name: "duanxinmobanRun",
|
|
|
|
|
+ meta: { title: "短信模板记录", isTab: true }
|
|
|
|
|
+ },
|
|
|
|
|
+
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/financeListRun",
|
|
|
|
|
+ component: _import("runErrands/financeList"),
|
|
|
|
|
+ name: "financeListRun",
|
|
|
|
|
+ meta: { title: "跑腿财务中心", isTab: true }
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/business",
|
|
|
|
|
+ component: _import("business/business"),
|
|
|
|
|
+ name: "business",
|
|
|
|
|
+ meta: { title: "申诉中心", isTab: true }
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/autonym",
|
|
|
|
|
+ component: _import("autonym/autonym"),
|
|
|
|
|
+ name: "autonym",
|
|
|
|
|
+ meta: { title: "实名认证", isTab: true }
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/riderScheduling",
|
|
|
|
|
+ component: _import("riderScheduling/riderScheduling"),
|
|
|
|
|
+ name: "riderScheduling",
|
|
|
|
|
+ meta: { title: "骑手调度", isTab: true }
|
|
|
|
|
+ },
|
|
|
|
|
+
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/messageRun",
|
|
|
|
|
+ component: _import("runErrands/message"),
|
|
|
|
|
+ name: "messageRun",
|
|
|
|
|
+ meta: { title: "消息中心", isTab: true }
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/feedback",
|
|
|
|
|
+ component: _import("runErrands/feedback"),
|
|
|
|
|
+ name: "feedback",
|
|
|
|
|
+ meta: { title: "反馈中心", isTab: true }
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/serviceType",
|
|
|
|
|
+ component: _import("serviceType/serviceType"),
|
|
|
|
|
+ name: "serviceType",
|
|
|
|
|
+ meta: { title: "同城服务类型", isTab: true }
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/riderTop",
|
|
|
|
|
+ component: _import("riderTop/riderTop"),
|
|
|
|
|
+ name: "riderTop",
|
|
|
|
|
+ meta: { title: "骑手排行榜", isTab: true }
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/materialLink",
|
|
|
|
|
+ component: _import("allocation/materialLink"),
|
|
|
|
|
+ name: "materialLink",
|
|
|
|
|
+ meta: { title: "帮助中心", isTab: true }
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/vueMchat",
|
|
|
|
|
+ component: _import("vueMchat/vueMchat"),
|
|
|
|
|
+ name: "vueMchat",
|
|
|
|
|
+ meta: { title: "聊天会话", isTab: true }
|
|
|
|
|
+ },
|
|
|
|
|
+
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/app",
|
|
|
|
|
+ component: _import("app/app"),
|
|
|
|
|
+ name: "app",
|
|
|
|
|
+ meta: { title: "升级配置", isTab: true }
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/memberDetails",
|
|
|
|
|
+ component: _import("members/memberDetails"),
|
|
|
|
|
+ name: "memberDetails",
|
|
|
|
|
+ meta: { title: "会员配置", isTab: true }
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/vipPrivilege",
|
|
|
|
|
+ component: _import("members/vipPrivilege"),
|
|
|
|
|
+ name: "vipPrivilege",
|
|
|
|
|
+ meta: { title: "会员特权", isTab: true }
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/bondList",
|
|
|
|
|
+ component: _import("shopsList/bondList"),
|
|
|
|
|
+ name: "bondList",
|
|
|
|
|
+ meta: { title: "保证金明细", isTab: false }
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/pingjiaList",
|
|
|
|
|
+ component: _import("shopsList/pingjiaList"),
|
|
|
|
|
+ name: "pingjiaList",
|
|
|
|
|
+ meta: { title: "评价明细", isTab: false }
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/shopWallet",
|
|
|
|
|
+ component: _import("shopsList/shopWallet"),
|
|
|
|
|
+ name: "shopWallet",
|
|
|
|
|
+ meta: { title: "商铺钱包", isTab: false }
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/bannerListRun",
|
|
|
|
|
+ component: _import("runErrands/bannerList"),
|
|
|
|
|
+ name: "bannerListRun",
|
|
|
|
|
+ meta: { title: "跑腿首页装修", isTab: true }
|
|
|
|
|
+ },
|
|
|
|
|
+ // 2022.11.07 新增
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/comment",
|
|
|
|
|
+ component: _import("comment/comment"),
|
|
|
|
|
+ name: "comment",
|
|
|
|
|
+ meta: { title: "评价中心", isTab: true }
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/chatRecord",
|
|
|
|
|
+ component: _import("chatRecord/chatRecord"),
|
|
|
|
|
+ name: "chatRecord",
|
|
|
|
|
+ meta: { title: "聊天记录", isTab: true }
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/integral",
|
|
|
|
|
+ component: _import("integral/integral"),
|
|
|
|
|
+ name: "integral",
|
|
|
|
|
+ meta: { title: "活动管理", isTab: true }
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/integralDetail",
|
|
|
|
|
+ component: _import("integral/integralDetail"),
|
|
|
|
|
+ name: "integralDetail",
|
|
|
|
|
+ meta: { title: "活动详情", isTab: false }
|
|
|
|
|
+ },
|
|
|
|
|
+
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/couponShop",
|
|
|
|
|
+ component: _import("coupon/couponShop"),
|
|
|
|
|
+ name: "couponShop",
|
|
|
|
|
+ meta: { title: "优惠券管理", isTab: false }
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ path: "/commentList",
|
|
|
|
|
+ component: _import("message/commentList"),
|
|
|
|
|
+ name: "commentList",
|
|
|
|
|
+ meta: { title: "评价列表", isTab: true }
|
|
|
|
|
+ }
|
|
|
|
|
+ ],
|
|
|
|
|
+ beforeEnter(to, from, next) {
|
|
|
|
|
+ let token = Vue.cookie.get("token");
|
|
|
|
|
+ if (!token || !/\S/.test(token)) {
|
|
|
|
|
+ clearLoginInfo();
|
|
|
|
|
+ next({ name: "login" });
|
|
|
|
|
+ }
|
|
|
|
|
+ next();
|
|
|
|
|
+ }
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
|
|
+const router = new Router({
|
|
|
|
|
+ mode: "hash", // hash
|
|
|
|
|
+ scrollBehavior(to, from, savedPosition) {
|
|
|
|
|
+ if (savedPosition) {
|
|
|
|
|
+ return savedPosition; // 按下 后退/前进 按钮时,类似浏览器的原生表现
|
|
|
|
|
+ } else {
|
|
|
|
|
+ return { x: 0, y: 0 }; // 让页面滚动到顶部
|
|
|
}
|
|
}
|
|
|
},
|
|
},
|
|
|
- dev: {
|
|
|
|
|
-
|
|
|
|
|
- // Paths
|
|
|
|
|
- assetsSubDirectory: 'static',
|
|
|
|
|
- assetsPublicPath: '/',
|
|
|
|
|
- // 代理列表, 是否开启代理通过[./dev.env.js]配置
|
|
|
|
|
- proxyTable: devEnv.OPEN_PROXY === false ? {} : {
|
|
|
|
|
- '/proxyApi': {
|
|
|
|
|
- target: 'https://mxys.chuanghai-tech.com/wm-test/wm-api',
|
|
|
|
|
- // target: 'http://192.168.0.131:8171/sqx_fast/',
|
|
|
|
|
- // target: 'https://mxys.chuanghai-tech.com/sqx_fast/',
|
|
|
|
|
- changeOrigin: true,
|
|
|
|
|
- pathRewrite: {
|
|
|
|
|
- '^/proxyApi': ''
|
|
|
|
|
|
|
+ isAddDynamicMenuRoutes: false, // 是否已经添加动态(菜单)路由
|
|
|
|
|
+ routes: globalRoutes.concat(mainRoutes)
|
|
|
|
|
+});
|
|
|
|
|
+
|
|
|
|
|
+router.beforeEach((to, from, next) => {
|
|
|
|
|
+ let userId = Vue.cookie.get("userId");
|
|
|
|
|
+ let menuList = sessionStorage.getItem("menuList");
|
|
|
|
|
+
|
|
|
|
|
+ // 添加动态(菜单)路由
|
|
|
|
|
+ // 1. 已经添加 or 全局路由, 直接访问
|
|
|
|
|
+ // 2. 获取菜单列表, 添加并保存本地存储
|
|
|
|
|
+ // console.log(userId, "测试", menuList);
|
|
|
|
|
+ if (userId != "" && menuList && (menuList == "[]" || menuList.length == 0)) {
|
|
|
|
|
+ console.log(userId, "测试1221");
|
|
|
|
|
+ http({
|
|
|
|
|
+ url: http.adornUrl("sys/menu/nav"),
|
|
|
|
|
+ method: "get",
|
|
|
|
|
+ params: http.adornParams()
|
|
|
|
|
+ })
|
|
|
|
|
+ .then(({ data }) => {
|
|
|
|
|
+ // console.log(data);
|
|
|
|
|
+
|
|
|
|
|
+ if (data && data.code === 0) {
|
|
|
|
|
+ fnAddDynamicMenuRoutes(data.menuList);
|
|
|
|
|
+ router.options.isAddDynamicMenuRoutes = true;
|
|
|
|
|
+ sessionStorage.setItem(
|
|
|
|
|
+ "menuList",
|
|
|
|
|
+ JSON.stringify(data.menuList || "[]")
|
|
|
|
|
+ );
|
|
|
|
|
+ sessionStorage.setItem(
|
|
|
|
|
+ "permissions",
|
|
|
|
|
+ JSON.stringify(data.permissions || "[]")
|
|
|
|
|
+ );
|
|
|
|
|
+
|
|
|
|
|
+ next({ ...to, replace: true });
|
|
|
|
|
+ } else {
|
|
|
|
|
+ sessionStorage.setItem("menuList", "[]");
|
|
|
|
|
+ sessionStorage.setItem("permissions", "[]");
|
|
|
|
|
+ next();
|
|
|
}
|
|
}
|
|
|
- },
|
|
|
|
|
- },
|
|
|
|
|
-
|
|
|
|
|
- // Various Dev Server settings
|
|
|
|
|
- host: '127.0.0.1', // can be overwritten by process.env.HOST
|
|
|
|
|
- port: 8001, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined
|
|
|
|
|
- autoOpenBrowser: true,
|
|
|
|
|
- errorOverlay: true,
|
|
|
|
|
- notifyOnErrors: true,
|
|
|
|
|
- poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions-
|
|
|
|
|
-
|
|
|
|
|
- // Use Eslint Loader?
|
|
|
|
|
- // If true, your code will be linted during bundling and
|
|
|
|
|
- // linting errors and warnings will be shown in the console.
|
|
|
|
|
- useEslint: true,
|
|
|
|
|
- // If true, eslint errors and warnings will also be shown in the error overlay
|
|
|
|
|
- // in the browser.
|
|
|
|
|
- showEslintErrorsInOverlay: false,
|
|
|
|
|
-
|
|
|
|
|
- /**
|
|
|
|
|
- * Source Maps
|
|
|
|
|
- */
|
|
|
|
|
-
|
|
|
|
|
- // https://webpack.js.org/configuration/devtool/#development
|
|
|
|
|
- devtool: 'eval-source-map',
|
|
|
|
|
-
|
|
|
|
|
- // If you have problems debugging vue-files in devtools,
|
|
|
|
|
- // set this to false - it *may* help
|
|
|
|
|
- // https://vue-loader.vuejs.org/en/options.html#cachebusting
|
|
|
|
|
- cacheBusting: true,
|
|
|
|
|
-
|
|
|
|
|
- // CSS Sourcemaps off by default because relative paths are "buggy"
|
|
|
|
|
- // with this option, according to the CSS-Loader README
|
|
|
|
|
- // (https://github.com/webpack/css-loader#sourcemaps)
|
|
|
|
|
- // In our experience, they generally work as expected,
|
|
|
|
|
- // just be aware of this issue when enabling this option.
|
|
|
|
|
- cssSourceMap: false,
|
|
|
|
|
- },
|
|
|
|
|
|
|
+ })
|
|
|
|
|
+ .catch(e => {
|
|
|
|
|
+ console.log(
|
|
|
|
|
+ `%c${e} 请求菜单列表和权限失败,跳转至登录页!!`,
|
|
|
|
|
+ "color:blue"
|
|
|
|
|
+ );
|
|
|
|
|
+ router.push({ name: "login" });
|
|
|
|
|
+ });
|
|
|
|
|
+ } else if (
|
|
|
|
|
+ router.options.isAddDynamicMenuRoutes ||
|
|
|
|
|
+ fnCurrentRouteType(to, globalRoutes) === "global"
|
|
|
|
|
+ ) {
|
|
|
|
|
+ // console.log(userId, "测试12");
|
|
|
|
|
+ next();
|
|
|
|
|
+ } else {
|
|
|
|
|
+ console.log(userId, "测试123");
|
|
|
|
|
+ http({
|
|
|
|
|
+ url: http.adornUrl("sys/menu/nav"),
|
|
|
|
|
+ method: "get",
|
|
|
|
|
+ params: http.adornParams()
|
|
|
|
|
+ })
|
|
|
|
|
+ .then(({ data }) => {
|
|
|
|
|
+ if (data && data.code === 0) {
|
|
|
|
|
+ console.log(data);
|
|
|
|
|
|
|
|
- build: {
|
|
|
|
|
- // Template for index.html
|
|
|
|
|
- index: path.resolve(__dirname, '../dist/index.html'),
|
|
|
|
|
-
|
|
|
|
|
- // Paths
|
|
|
|
|
- assetsRoot: path.resolve(__dirname, '../dist'),
|
|
|
|
|
- assetsSubDirectory: 'static',
|
|
|
|
|
- assetsPublicPath: '/wm-admin',
|
|
|
|
|
-
|
|
|
|
|
- /**
|
|
|
|
|
- * Source Maps
|
|
|
|
|
- */
|
|
|
|
|
-
|
|
|
|
|
- productionSourceMap: false,//隐藏源码
|
|
|
|
|
- // https://webpack.js.org/configuration/devtool/#production
|
|
|
|
|
- devtool: '#source-map',
|
|
|
|
|
-
|
|
|
|
|
- // Gzip off by default as many popular static hosts such as
|
|
|
|
|
- // Surge or Netlify already gzip all static assets for you.
|
|
|
|
|
- // Before setting to `true`, make sure to:
|
|
|
|
|
- // npm install --save-dev compression-webpack-plugin
|
|
|
|
|
- productionGzip: false,
|
|
|
|
|
- productionGzipExtensions: ['js', 'css'],
|
|
|
|
|
-
|
|
|
|
|
- // Run the build command with an extra argument to
|
|
|
|
|
- // View the bundle analyzer report after build finishes:
|
|
|
|
|
- // `npm run build --report`
|
|
|
|
|
- // Set to `true` or `false` to always turn it on or off
|
|
|
|
|
- bundleAnalyzerReport: process.env.npm_config_report
|
|
|
|
|
|
|
+ fnAddDynamicMenuRoutes(data.menuList);
|
|
|
|
|
+ router.options.isAddDynamicMenuRoutes = true;
|
|
|
|
|
+ sessionStorage.setItem(
|
|
|
|
|
+ "menuList",
|
|
|
|
|
+ JSON.stringify(data.menuList || "[]")
|
|
|
|
|
+ );
|
|
|
|
|
+ sessionStorage.setItem(
|
|
|
|
|
+ "permissions",
|
|
|
|
|
+ JSON.stringify(data.permissions || "[]")
|
|
|
|
|
+ );
|
|
|
|
|
+ next({ ...to, replace: true });
|
|
|
|
|
+ } else {
|
|
|
|
|
+ sessionStorage.setItem("menuList", "[]");
|
|
|
|
|
+ sessionStorage.setItem("permissions", "[]");
|
|
|
|
|
+ next();
|
|
|
|
|
+ }
|
|
|
|
|
+ })
|
|
|
|
|
+ .catch(e => {
|
|
|
|
|
+ console.log(
|
|
|
|
|
+ `%c${e} 请求菜单列表和权限失败,跳转至登录页!!`,
|
|
|
|
|
+ "color:blue"
|
|
|
|
|
+ );
|
|
|
|
|
+ router.push({ name: "login" });
|
|
|
|
|
+ });
|
|
|
}
|
|
}
|
|
|
|
|
+});
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * 判断当前路由类型, global: 全局路由, main: 主入口路由
|
|
|
|
|
+ * @param {*} route 当前路由
|
|
|
|
|
+ */
|
|
|
|
|
+function fnCurrentRouteType(route, globalRoutes = []) {
|
|
|
|
|
+ var temp = [];
|
|
|
|
|
+ for (var i = 0; i < globalRoutes.length; i++) {
|
|
|
|
|
+ if (route.path === globalRoutes[i].path) {
|
|
|
|
|
+ return "global";
|
|
|
|
|
+ } else if (
|
|
|
|
|
+ globalRoutes[i].children &&
|
|
|
|
|
+ globalRoutes[i].children.length >= 1
|
|
|
|
|
+ ) {
|
|
|
|
|
+ temp = temp.concat(globalRoutes[i].children);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ return temp.length >= 1 ? fnCurrentRouteType(route, temp) : "main";
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * 添加动态(菜单)路由
|
|
|
|
|
+ * @param {*} menuList 菜单列表
|
|
|
|
|
+ * @param {*} routes 递归创建的动态(菜单)路由
|
|
|
|
|
+ */
|
|
|
|
|
+function fnAddDynamicMenuRoutes(menuList = [], routes = []) {
|
|
|
|
|
+ var temp = [];
|
|
|
|
|
+ console.log(menuList, "list列表");
|
|
|
|
|
+ for (var i = 0; i < menuList.length; i++) {
|
|
|
|
|
+ if (menuList[i].list && menuList[i].list.length >= 1) {
|
|
|
|
|
+ temp = temp.concat(menuList[i].list);
|
|
|
|
|
+ } else if (menuList[i].url && /\S/.test(menuList[i].url)) {
|
|
|
|
|
+ menuList[i].url = menuList[i].url.replace(/^\//, "");
|
|
|
|
|
+ var route = {
|
|
|
|
|
+ path: menuList[i].url.replace("/", "-"),
|
|
|
|
|
+ component: null,
|
|
|
|
|
+ name: menuList[i].url.replace("/", "-"),
|
|
|
|
|
+ meta: {
|
|
|
|
|
+ menuId: menuList[i].menuId,
|
|
|
|
|
+ title: menuList[i].name,
|
|
|
|
|
+ isDynamic: true,
|
|
|
|
|
+ isTab: true,
|
|
|
|
|
+ iframeUrl: ""
|
|
|
|
|
+ }
|
|
|
|
|
+ };
|
|
|
|
|
+ // url以http[s]://开头, 通过iframe展示
|
|
|
|
|
+ if (isURL(menuList[i].url)) {
|
|
|
|
|
+ route["path"] = `i-${menuList[i].menuId}`;
|
|
|
|
|
+ route["name"] = `i-${menuList[i].menuId}`;
|
|
|
|
|
+ route["meta"]["iframeUrl"] = menuList[i].url;
|
|
|
|
|
+ } else {
|
|
|
|
|
+ try {
|
|
|
|
|
+ route["component"] = _import(`modules/${menuList[i].url}`) || null;
|
|
|
|
|
+ } catch (e) {}
|
|
|
|
|
+ }
|
|
|
|
|
+ routes.push(route);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ // console.log(temp, "路由");
|
|
|
|
|
+ if (temp.length >= 1) {
|
|
|
|
|
+ fnAddDynamicMenuRoutes(temp, routes);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ mainRoutes.name = "main-dynamic";
|
|
|
|
|
+ mainRoutes.children = routes;
|
|
|
|
|
+ router.addRoutes([mainRoutes, { path: "*", redirect: { name: "404" } }]);
|
|
|
|
|
+ sessionStorage.setItem(
|
|
|
|
|
+ "dynamicMenuRoutes",
|
|
|
|
|
+ JSON.stringify(mainRoutes.children || "[]")
|
|
|
|
|
+ );
|
|
|
|
|
+ console.log("\n");
|
|
|
|
|
+ console.log(
|
|
|
|
|
+ "%c!<-------------------- 动态(菜单)路由 s -------------------->",
|
|
|
|
|
+ "color:blue"
|
|
|
|
|
+ );
|
|
|
|
|
+ console.log(mainRoutes.children);
|
|
|
|
|
+ console.log(
|
|
|
|
|
+ "%c!<-------------------- 动态(菜单)路由 e -------------------->",
|
|
|
|
|
+ "color:blue"
|
|
|
|
|
+ );
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+export default router;
|