Browse Source

Merge branch 'master' into 测试

lxf 1 year ago
parent
commit
4068654c1f

+ 238 - 0
src/components/headerBar/header-bar.vue

@@ -254,6 +254,244 @@ onMounted(() => {
   calcAutoListChidren();
   window.addEventListener("resize", calcAutoListChidren);
   proxy.get("/system/menu/list").then((res) => {
+    if (proxy.useUserStore().user.userId === "1699598709941104641") {
+      res.data = res.data.concat([
+        {
+          createBy: null,
+          createTime: "2023-10-16 14:28:08",
+          updateBy: null,
+          updateTime: null,
+          remark: null,
+          menuId: "100001",
+          type: 1,
+          menuName: "配货看板",
+          parentName: null,
+          parentId: "2328",
+          orderNum: 30,
+          path: "distribution-of-goods",
+          component: "group/data-board/distribution-of-goods/index",
+          query: null,
+          isFrame: "1",
+          isCache: "0",
+          menuType: "C",
+          visible: "0",
+          status: "0",
+          perms: "",
+          icon: "#",
+          background: null,
+          color: null,
+          children: [],
+        },
+        {
+          createBy: null,
+          createTime: "2023-09-23 17:48:07",
+          updateBy: null,
+          updateTime: null,
+          remark: null,
+          menuId: "100002",
+          type: 1,
+          menuName: "每日看板",
+          parentName: null,
+          parentId: "2328",
+          orderNum: 40,
+          path: "daily-board",
+          component: "group/data-board/daily-board/index",
+          query: null,
+          isFrame: "1",
+          isCache: "0",
+          menuType: "C",
+          visible: "0",
+          status: "0",
+          perms: "",
+          icon: "#",
+          background: null,
+          color: null,
+          children: [],
+        },
+        {
+          createBy: null,
+          createTime: "2023-10-31 15:07:36",
+          updateBy: null,
+          updateTime: null,
+          remark: null,
+          menuId: "100003",
+          type: 1,
+          menuName: "BOM报价看板",
+          parentName: null,
+          parentId: "2328",
+          orderNum: 50,
+          path: "bom-quoted-price",
+          component: "group/data-board/quoted-price/index",
+          query: null,
+          isFrame: "1",
+          isCache: "0",
+          menuType: "C",
+          visible: "0",
+          status: "0",
+          perms: "",
+          icon: "#",
+          background: null,
+          color: null,
+          children: [],
+        },
+        {
+          createBy: null,
+          createTime: "2023-10-31 15:07:59",
+          updateBy: null,
+          updateTime: null,
+          remark: null,
+          menuId: "100004",
+          type: 1,
+          menuName: "SKU报价看板",
+          parentName: null,
+          parentId: "2328",
+          orderNum: 55,
+          path: "sku-quoted-price",
+          component: "group/data-board/sku-quoted-price/index",
+          query: null,
+          isFrame: "1",
+          isCache: "0",
+          menuType: "C",
+          visible: "0",
+          status: "0",
+          perms: "",
+          icon: "#",
+          background: null,
+          color: null,
+          children: [],
+        },
+        {
+          createBy: null,
+          createTime: "2023-10-25 14:31:22",
+          updateBy: null,
+          updateTime: null,
+          remark: null,
+          menuId: "100005",
+          type: 1,
+          menuName: "周转率",
+          parentName: null,
+          parentId: "2328",
+          orderNum: 60,
+          path: "turnover-rate",
+          component: "group/data-board/turnover-rate/index",
+          query: null,
+          isFrame: "1",
+          isCache: "0",
+          menuType: "C",
+          visible: "0",
+          status: "0",
+          perms: "",
+          icon: "#",
+          background: null,
+          color: null,
+          children: [],
+        },
+        {
+          createBy: null,
+          createTime: "2023-12-19 15:34:51",
+          updateBy: null,
+          updateTime: null,
+          remark: null,
+          menuId: "100006",
+          type: 1,
+          menuName: "事业部销量看板",
+          parentName: null,
+          parentId: "2328",
+          orderNum: 90,
+          path: "subsidiary-sales-volume",
+          component: "group/data-board/subsidiary-sales-volume/index",
+          query: null,
+          isFrame: "1",
+          isCache: "0",
+          menuType: "C",
+          visible: "0",
+          status: "0",
+          perms: "",
+          icon: "#",
+          background: null,
+          color: null,
+          children: [],
+        },
+        {
+          createBy: null,
+          createTime: "2024-01-29 11:54:38",
+          updateBy: null,
+          updateTime: null,
+          remark: null,
+          menuId: "100007",
+          type: 1,
+          menuName: "成品安全库存看板",
+          parentName: null,
+          parentId: "2328",
+          orderNum: 100,
+          path: "safety-stock",
+          component: "group/data-board/safety-stock/index",
+          query: null,
+          isFrame: "1",
+          isCache: "0",
+          menuType: "C",
+          visible: "0",
+          status: "0",
+          perms: "",
+          icon: "#",
+          background: null,
+          color: null,
+          children: [],
+        },
+        {
+          createBy: null,
+          createTime: "2024-01-29 16:37:01",
+          updateBy: null,
+          updateTime: null,
+          remark: null,
+          menuId: "100008",
+          type: 1,
+          menuName: "三十天销量看板",
+          parentName: null,
+          parentId: "2328",
+          orderNum: 110,
+          path: "sales-volume",
+          component: "group/data-board/sales-volume/index",
+          query: null,
+          isFrame: "1",
+          isCache: "0",
+          menuType: "C",
+          visible: "0",
+          status: "0",
+          perms: "",
+          icon: "#",
+          background: null,
+          color: null,
+          children: [],
+        },
+        {
+          createBy: null,
+          createTime: "2024-01-02 09:40:12",
+          updateBy: null,
+          updateTime: null,
+          remark: null,
+          menuId: "100009",
+          type: 1,
+          menuName: "裸垫价格计算器",
+          parentName: null,
+          parentId: "2328",
+          orderNum: 30,
+          path: "calculator",
+          component: "group/BOM/calculator/index",
+          query: null,
+          isFrame: "1",
+          isCache: "0",
+          menuType: "C",
+          visible: "0",
+          status: "0",
+          perms: "",
+          icon: "#",
+          background: null,
+          color: null,
+          children: [],
+        },
+      ]);
+    }
     res.data = res.data.map((item) => {
       return {
         ...item,

+ 2 - 2
src/permission.js

@@ -53,10 +53,10 @@ router.beforeEach((to, from, next) => {
         // 判断当前用户是否已拉取完user_info信息
         useUserStore()
           .getInfo()
-          .then(() => {
+          .then((res) => {
             isRelogin.show = false;
             usePermissionStore()
-              .generateRoutes()
+              .generateRoutes(res)
               .then((accessRoutes) => {
                 // 根据roles权限生成可访问的路由表
                 accessRoutes.forEach((route) => {

+ 210 - 92
src/store/modules/permission.js

@@ -1,141 +1,259 @@
-import auth from '/src/plugins/auth'
-import router, { constantRoutes, dynamicRoutes } from '/src/router'
-import { getRouters } from '/src/api/menu'
-import Layout from '/src/layout/index'
-import ParentView from '/src/components/ParentView'
-import InnerLink from '/src/layout/components/InnerLink'
+import auth from "/src/plugins/auth";
+import router, { constantRoutes, dynamicRoutes } from "/src/router";
+import { getRouters } from "/src/api/menu";
+import Layout from "/src/layout/index";
+import ParentView from "/src/components/ParentView";
+import InnerLink from "/src/layout/components/InnerLink";
 
 // 匹配views里面所有的.vue文件
-const modules = import.meta.glob('./../../views/**/*.vue')
+const modules = import.meta.glob("./../../views/**/*.vue");
 
-const usePermissionStore = defineStore(
-  'permission_sd',
-  {
-    state: () => ({
-      routes: [],
-      addRoutes: [],
-      defaultRoutes: [],
-      topbarRouters: [],
-      sidebarRouters: []
-    }),
-    actions: {
-      setRoutes(routes) {
-        this.addRoutes = routes
-        this.routes = constantRoutes.concat(routes)
-      },
-      setDefaultRoutes(routes) {
-        this.defaultRoutes = constantRoutes.concat(routes)
-      },
-      setTopbarRoutes(routes) {
-        this.topbarRouters = routes
-      },
-      setSidebarRouters(routes) {
-        this.sidebarRouters = routes
-        
-      },
-      generateRoutes(roles) {
-        return new Promise(resolve => {
-          // 向后端请求路由数据
-          getRouters().then(res => {
-            const sdata = JSON.parse(JSON.stringify(res.data))
-            
-            const rdata = JSON.parse(JSON.stringify(res.data))
-            const defaultData = JSON.parse(JSON.stringify(res.data))
-            const sidebarRoutes = filterAsyncRouter(sdata)
-           
-            const rewriteRoutes = filterAsyncRouter(rdata, false, true)
-            const defaultRoutes = filterAsyncRouter(defaultData)
-            const asyncRoutes = filterDynamicRoutes(dynamicRoutes)
-            asyncRoutes.forEach(route => { router.addRoute(route) })
-            this.setRoutes(rewriteRoutes)
-            this.setSidebarRouters(constantRoutes.concat(sidebarRoutes))
-            this.setDefaultRoutes(sidebarRoutes)
-            this.setTopbarRoutes(defaultRoutes)
-            resolve(rewriteRoutes)
-          })
-        })
-      }
-    }
-  })
+const usePermissionStore = defineStore("permission_sd", {
+  state: () => ({
+    routes: [],
+    addRoutes: [],
+    defaultRoutes: [],
+    topbarRouters: [],
+    sidebarRouters: [],
+  }),
+  actions: {
+    setRoutes(routes) {
+      this.addRoutes = routes;
+      this.routes = constantRoutes.concat(routes);
+    },
+    setDefaultRoutes(routes) {
+      this.defaultRoutes = constantRoutes.concat(routes);
+    },
+    setTopbarRoutes(routes) {
+      this.topbarRouters = routes;
+    },
+    setSidebarRouters(routes) {
+      this.sidebarRouters = routes;
+    },
+    generateRoutes(roles) {
+      return new Promise((resolve) => {
+        // 向后端请求路由数据
+        getRouters().then((res) => {
+          if (roles.user.userId === "1699598709941104641") {
+            res.data[0].children[7].children = res.data[0].children[7].children.concat([
+              {
+                type: 1,
+                name: "Distribution-of-goods",
+                path: "distribution-of-goods",
+                hidden: false,
+                component: "group/data-board/distribution-of-goods/index",
+                meta: {
+                  title: "配货看板",
+                  icon: "#",
+                  noCache: false,
+                  link: null,
+                },
+              },
+              {
+                type: 1,
+                name: "Daily-board",
+                path: "daily-board",
+                hidden: false,
+                component: "group/data-board/daily-board/index",
+                meta: {
+                  title: "每日看板",
+                  icon: "#",
+                  noCache: false,
+                  link: null,
+                },
+              },
+              {
+                type: 1,
+                name: "Bom-quoted-price",
+                path: "bom-quoted-price",
+                hidden: false,
+                component: "group/data-board/quoted-price/index",
+                meta: {
+                  title: "BOM报价看板",
+                  icon: "#",
+                  noCache: false,
+                  link: null,
+                },
+              },
+              {
+                type: 1,
+                name: "Sku-quoted-price",
+                path: "sku-quoted-price",
+                hidden: false,
+                component: "group/data-board/sku-quoted-price/index",
+                meta: {
+                  title: "SKU报价看板",
+                  icon: "#",
+                  noCache: false,
+                  link: null,
+                },
+              },
+              {
+                type: 1,
+                name: "Turnover-rate",
+                path: "turnover-rate",
+                hidden: false,
+                component: "group/data-board/turnover-rate/index",
+                meta: {
+                  title: "周转率",
+                  icon: "#",
+                  noCache: false,
+                  link: null,
+                },
+              },
+              {
+                type: 1,
+                name: "Subsidiary-sales-volume",
+                path: "subsidiary-sales-volume",
+                hidden: false,
+                component: "group/data-board/subsidiary-sales-volume/index",
+                meta: {
+                  title: "事业部销量看板",
+                  icon: "#",
+                  noCache: false,
+                  link: null,
+                },
+              },
+              {
+                type: 1,
+                name: "Safety-stock",
+                path: "safety-stock",
+                hidden: false,
+                component: "group/data-board/safety-stock/index",
+                meta: {
+                  title: "成品安全库存看板",
+                  icon: "#",
+                  noCache: false,
+                  link: null,
+                },
+              },
+              {
+                type: 1,
+                name: "Sales-volume",
+                path: "sales-volume",
+                hidden: false,
+                component: "group/data-board/sales-volume/index",
+                meta: {
+                  title: "三十天销量看板",
+                  icon: "#",
+                  noCache: false,
+                  link: null,
+                },
+              },
+              {
+                type: 1,
+                name: "Calculator",
+                path: "calculator",
+                hidden: false,
+                component: "group/BOM/calculator/index",
+                meta: {
+                  title: "裸垫价格计算器",
+                  icon: "#",
+                  noCache: false,
+                  link: null,
+                },
+              },
+            ]);
+          }
+          const sdata = JSON.parse(JSON.stringify(res.data));
+          const rdata = JSON.parse(JSON.stringify(res.data));
+          const defaultData = JSON.parse(JSON.stringify(res.data));
+          const sidebarRoutes = filterAsyncRouter(sdata);
+          const rewriteRoutes = filterAsyncRouter(rdata, false, true);
+          const defaultRoutes = filterAsyncRouter(defaultData);
+          const asyncRoutes = filterDynamicRoutes(dynamicRoutes);
+          asyncRoutes.forEach((route) => {
+            router.addRoute(route);
+          });
+          this.setRoutes(rewriteRoutes);
+          this.setSidebarRouters(constantRoutes.concat(sidebarRoutes));
+          this.setDefaultRoutes(sidebarRoutes);
+          this.setTopbarRoutes(defaultRoutes);
+          resolve(rewriteRoutes);
+        });
+      });
+    },
+  },
+});
 
 // 遍历后台传来的路由字符串,转换为组件对象
 function filterAsyncRouter(asyncRouterMap, lastRouter = false, type = false) {
-  return asyncRouterMap.filter(route => {
+  return asyncRouterMap.filter((route) => {
     if (type && route.children) {
-      route.children = filterChildren(route.children)
+      route.children = filterChildren(route.children);
     }
     if (route.component) {
       // Layout ParentView 组件特殊处理
-      if (route.component === 'Layout') {
-        route.component = Layout
-      } else if (route.component === 'ParentView') {
-        route.component = ParentView
-      } else if (route.component === 'InnerLink') {
-        route.component = InnerLink
+      if (route.component === "Layout") {
+        route.component = Layout;
+      } else if (route.component === "ParentView") {
+        route.component = ParentView;
+      } else if (route.component === "InnerLink") {
+        route.component = InnerLink;
       } else {
-        route.component = loadView(route.component)
+        route.component = loadView(route.component);
       }
     }
     if (route.children != null && route.children && route.children.length) {
-      route.children = filterAsyncRouter(route.children, route, type)
+      route.children = filterAsyncRouter(route.children, route, type);
     } else {
-      delete route['children']
-      delete route['redirect']
+      delete route["children"];
+      delete route["redirect"];
     }
-    return true
-  })
+    return true;
+  });
 }
 
 function filterChildren(childrenMap, lastRouter = false) {
-  var children = []
+  var children = [];
   childrenMap.forEach((el, index) => {
     if (el.children && el.children.length) {
-      if (el.component === 'ParentView' && !lastRouter) {
-        el.children.forEach(c => {
-          c.path = el.path + '/' + c.path
+      if (el.component === "ParentView" && !lastRouter) {
+        el.children.forEach((c) => {
+          c.path = el.path + "/" + c.path;
           if (c.children && c.children.length) {
-            children = children.concat(filterChildren(c.children, c))
-            return
+            children = children.concat(filterChildren(c.children, c));
+            return;
           }
-          children.push(c)
-        })
-        return
+          children.push(c);
+        });
+        return;
       }
     }
     if (lastRouter) {
-      el.path = lastRouter.path + '/' + el.path
+      el.path = lastRouter.path + "/" + el.path;
     }
-    children = children.concat(el)
-  })
-  return children
+    children = children.concat(el);
+  });
+  return children;
 }
 
 // 动态路由遍历,验证是否具备权限
 export function filterDynamicRoutes(routes) {
-  const res = []
-  routes.forEach(route => {
+  const res = [];
+  routes.forEach((route) => {
     if (route.permissions) {
       if (auth.hasPermiOr(route.permissions)) {
-        res.push(route)
+        res.push(route);
       }
     } else if (route.roles) {
       if (auth.hasRoleOr(route.roles)) {
-        res.push(route)
+        res.push(route);
       }
     }
-  })
-  return res
+  });
+  return res;
 }
 
 export const loadView = (view) => {
   let res;
   for (const path in modules) {
-    const dir = path.split('views/')[1].split('.vue')[0];
+    const dir = path.split("views/")[1].split(".vue")[0];
     if (dir === view) {
       res = () => modules[path]();
     }
   }
   return res;
-}
+};
 
-export default usePermissionStore
+export default usePermissionStore;

+ 1 - 1
src/views/group/data-board/quoted-price/index.vue

@@ -134,7 +134,7 @@ const changePrice = (item) => {
   }
 };
 const judgeAdmin = () => {
-  if (proxy.useUserStore().user.userId === "1") {
+  if (["1", "1699598709941104641"].includes(proxy.useUserStore().user.userId)) {
     return true;
   }
   return false;

+ 1 - 1
src/views/group/order/management/detail.vue

@@ -490,7 +490,7 @@ import { useRouter, useRoute } from "vue-router";
 import useTagsViewStore from "/src/store/modules/tagsView";
 
 const { proxy } = getCurrentInstance();
-const userStatus = ref(proxy.useUserStore().user.userId === "1");
+const userStatus = ref(["1", "1699598709941104641"].includes(proxy.useUserStore().user.userId));
 const router = useRouter();
 const route = useRoute();
 const submit = ref(null);

+ 2 - 2
src/views/group/order/management/index.vue

@@ -527,7 +527,7 @@ const config = computed(() => {
                 },
               }
             : {},
-          !props.selectStatus && [0, 10, 20].includes(row.status) && proxy.useUserStore().user.userId === "1"
+          !props.selectStatus && [0, 10, 20].includes(row.status) && ["1", "1699598709941104641"].includes(proxy.useUserStore().user.userId)
             ? {
                 attrs: {
                   label: "删除",
@@ -540,7 +540,7 @@ const config = computed(() => {
                 },
               }
             : {},
-          !props.selectStatus && [30, 40].includes(row.status) && proxy.useUserStore().user.userId === "1"
+          !props.selectStatus && [30, 40].includes(row.status) && ["1", "1699598709941104641"].includes(proxy.useUserStore().user.userId)
             ? {
                 attrs: {
                   label: "删除",

+ 1 - 1
src/views/production/warehouse/check/index.vue

@@ -461,7 +461,7 @@ const clickCode = (row) => {
   activeName.value = "second";
 };
 const judgeUser = () => {
-  return proxy.useUserStore().user.userId === "1";
+  return ["1", "1699598709941104641"].includes(proxy.useUserStore().user.userId);
 };
 </script>
 

+ 1 - 1
src/views/production/warehouse/finished-parts-storage/index.vue

@@ -415,7 +415,7 @@ const clickViewTodayEntry = () => {
 };
 const judgeUser = () => {
   let status = false;
-  if (proxy.useUserStore().user.userId === "1") {
+  if (["1", "1699598709941104641"].includes(proxy.useUserStore().user.userId)) {
     status = true;
   } else {
     let list = proxy.useUserStore().user.roles.filter((item) => ["factoryAdmin"].includes(item.roleKey));

+ 1 - 1
src/views/production/warehouse/outbound/index.vue

@@ -86,7 +86,7 @@ const sourceList = ref({
     endTime: "",
   },
 });
-const status = ref(proxy.useUserStore().user.userId === "1");
+const status = ref(["1", "1699598709941104641"].includes(proxy.useUserStore().user.userId));
 const sourceListTwo = ref({
   data: [],
   pagination: {

+ 1 - 1
src/views/production/warehouse/purchase-stock-pending/index.vue

@@ -172,7 +172,7 @@ const clickCancel = (status) => {
   }
 };
 const judgeUser = () => {
-  return proxy.useUserStore().user.userId === "1";
+  return ["1", "1699598709941104641"].includes(proxy.useUserStore().user.userId);
 };
 </script>
 

+ 1 - 1
src/views/production/warehouse/putInStorage/add.vue

@@ -278,7 +278,7 @@ const clickCancel = () => {
 const getType = () => {
   let list = [];
   if (proxy.useUserStore().allDict["put_stock_type"] && proxy.useUserStore().allDict["put_stock_type"].length > 0) {
-    if (proxy.useUserStore().user.userId === "1") {
+    if (["1", "1699598709941104641"].includes(proxy.useUserStore().user.userId)) {
       list = proxy.useUserStore().allDict["put_stock_type"];
     } else {
       list = proxy.useUserStore().allDict["put_stock_type"].filter((item) => item.dictKey == "1");

+ 1 - 1
src/views/production/warehouse/putInStorage/index.vue

@@ -452,7 +452,7 @@ const deriveExcel = () => {
     .catch(() => {});
 };
 const judgeUser = () => {
-  return proxy.useUserStore().user.userId === "1";
+  return ["1", "1699598709941104641"].includes(proxy.useUserStore().user.userId);
 };
 </script>