jabin 1 rok temu
rodzic
commit
3073d0ba03

+ 234 - 234
src/layout/index.vue

@@ -100,23 +100,160 @@
 </template>
 
 <script>
-  import { mapGetters } from 'vuex';
-  import { toggleFullscreen, isFullscreen } from 'ele-admin';
-  import RouterLayout from '@/components/RouterLayout/index.vue';
-  import HeaderTools from './components/header-tools.vue';
-  import PageFooter from './components/page-footer.vue';
-  import {
-    PROJECT_NAME,
-    HIDE_SIDEBARS,
-    HIDE_FOOTERS,
-    REPEATABLE_TABS,
-    HOME_TITLE,
-    HOME_PATH,
-    LAYOUT_PATH,
-    REDIRECT_PATH,
-    I18N_ENABLE
-  } from '@/config/setting';
-  import {
+import { mapGetters } from 'vuex';
+import { toggleFullscreen, isFullscreen } from 'ele-admin';
+import RouterLayout from '@/components/RouterLayout/index.vue';
+import HeaderTools from './components/header-tools.vue';
+import PageFooter from './components/page-footer.vue';
+import {
+  PROJECT_NAME,
+  HIDE_SIDEBARS,
+  HIDE_FOOTERS,
+  REPEATABLE_TABS,
+  HOME_TITLE,
+  HOME_PATH,
+  LAYOUT_PATH,
+  REDIRECT_PATH,
+  I18N_ENABLE
+} from '@/config/setting';
+import {
+  addPageTab,
+  removePageTab,
+  removeAllPageTab,
+  removeLeftPageTab,
+  removeRightPageTab,
+  removeOtherPageTab,
+  reloadPageTab,
+  setHomeComponents,
+  setPageTabs
+} from '@/utils/page-tab-util';
+import { secretLevelList } from '@/enum/dict';
+
+export default {
+  name: 'EleLayout',
+  components: {
+    RouterLayout,
+    HeaderTools
+  },
+  data() {
+    return {
+      PROJECT_NAME,
+      HIDE_SIDEBARS,
+      HIDE_FOOTERS,
+      REPEATABLE_TABS,
+      HOME_PATH,
+      HOME_TITLE,
+      LAYOUT_PATH,
+      REDIRECT_PATH,
+      // 是否全屏
+      fullscreen: false
+    };
+  },
+  computed: {
+    isQianKun() {
+      return window.__POWERED_BY_QIANKUN__;
+    },
+    // 当前语言
+    locale() {
+      return this.$i18n.locale;
+    },
+    // 菜单数据
+    menus() {
+      return this.$store.state.user.menus;
+    },
+    // 主题状态
+    ...mapGetters(['theme'])
+  },
+  methods: {
+    getSecretLevelStyle(item) {
+      return {
+        color: item.meta.secretLevel > 1 ? 'red' : 'green',
+        fontWeight: 'bold',
+        fontSize: '15px'
+      };
+    },
+    getSecretLevel(item) {
+      let find =
+        secretLevelList.find((i) => item.meta.secretLevel == i.value) || {};
+      return '(' + find.label + ')';
+    },
+    /* 侧栏折叠切换 */
+    updateCollapse(value) {
+      // console.log('value:', this.$store.state.user.menus);
+      this.$store.dispatch('theme/setCollapse', value);
+    },
+    /* 双侧栏一级折叠切换 */
+    updateSideNavCollapse(value) {
+      this.$store.dispatch('theme/setSideNavCollapse', value);
+    },
+    /* 内容区域全屏切换 */
+    updateBodyFullscreen(value) {
+      this.$store.dispatch('theme/setBodyFullscreen', value);
+    },
+    /* logo 点击事件 */
+    onLogoClick(isHome) {
+      isHome || this.$router.push(LAYOUT_PATH);
+    },
+    /* 监听屏幕尺寸改变 */
+    screenSizeChange() {
+      this.$store.dispatch('theme/updateScreenSize');
+      this.fullscreen = isFullscreen();
+    },
+    /* 全屏切换 */
+    onFullscreen() {
+      try {
+        this.fullscreen = toggleFullscreen();
+      } catch (e) {
+        this.$message.error('您的浏览器不支持全屏模式');
+      }
+    },
+    /* 页签右键菜单点击事件 */
+    onTabContextMenu({ key, tabKey, item, active }) {
+      switch (key) {
+        case 'reload': // 刷新
+          reloadPageTab({
+            isHome: !item,
+            fullPath: item?.fullPath ?? tabKey
+          });
+          break;
+        case 'close': // 关闭当前
+          removePageTab({
+            key: item?.fullPath ?? tabKey,
+            active
+          });
+          break;
+        case 'left': // 关闭左侧
+          removeLeftPageTab({
+            key: tabKey,
+            active
+          });
+          break;
+        case 'right': // 关闭右侧
+          removeRightPageTab({
+            key: tabKey,
+            active
+          });
+          break;
+        case 'other': // 关闭其他
+          removeOtherPageTab({
+            key: tabKey,
+            active
+          });
+          break;
+      }
+    },
+    /* 菜单标题国际化 */
+    i18n(_path, key) {
+      if (!I18N_ENABLE || !key) {
+        return;
+      }
+      const k = 'route.' + key + '._name';
+      const title = this.$t(k);
+      if (title !== k) {
+        return title;
+      }
+    },
+    //
     addPageTab,
     removePageTab,
     removeAllPageTab,
@@ -126,246 +263,109 @@
     reloadPageTab,
     setHomeComponents,
     setPageTabs
-  } from '@/utils/page-tab-util';
-  import { secretLevelList } from '@/enum/dict';
-
-  export default {
-    name: 'EleLayout',
-    components: {
-      RouterLayout,
-      HeaderTools
-    },
-    data() {
-      return {
-        PROJECT_NAME,
-        HIDE_SIDEBARS,
-        HIDE_FOOTERS,
-        REPEATABLE_TABS,
-        HOME_PATH,
-        HOME_TITLE,
-        LAYOUT_PATH,
-        REDIRECT_PATH,
-        // 是否全屏
-        fullscreen: false
-      };
-    },
-    computed: {
-      isQianKun() {
-        return window.__POWERED_BY_QIANKUN__;
-      },
-      // 当前语言
-      locale() {
-        return this.$i18n.locale;
-      },
-      // 菜单数据
-      menus() {
-        return this.$store.state.user.menus;
-      },
-      // 主题状态
-      ...mapGetters(['theme'])
-    },
-    methods: {
-      getSecretLevelStyle(item) {
-        return {
-          color: item.meta.secretLevel > 1 ? 'red' : 'green',
-          fontWeight: 'bold',
-          fontSize: '15px'
-        };
-      },
-      getSecretLevel(item) {
-        let find =
-          secretLevelList.find((i) => item.meta.secretLevel == i.value) || {};
-        return '(' + find.label + ')';
-      },
-      /* 侧栏折叠切换 */
-      updateCollapse(value) {
-        // console.log('value:', this.$store.state.user.menus);
-        this.$store.dispatch('theme/setCollapse', value);
-      },
-      /* 双侧栏一级折叠切换 */
-      updateSideNavCollapse(value) {
-        this.$store.dispatch('theme/setSideNavCollapse', value);
-      },
-      /* 内容区域全屏切换 */
-      updateBodyFullscreen(value) {
-        this.$store.dispatch('theme/setBodyFullscreen', value);
-      },
-      /* logo 点击事件 */
-      onLogoClick(isHome) {
-        isHome || this.$router.push(LAYOUT_PATH);
-      },
-      /* 监听屏幕尺寸改变 */
-      screenSizeChange() {
-        this.$store.dispatch('theme/updateScreenSize');
-        this.fullscreen = isFullscreen();
-      },
-      /* 全屏切换 */
-      onFullscreen() {
-        try {
-          this.fullscreen = toggleFullscreen();
-        } catch (e) {
-          this.$message.error('您的浏览器不支持全屏模式');
-        }
-      },
-      /* 页签右键菜单点击事件 */
-      onTabContextMenu({ key, tabKey, item, active }) {
-        switch (key) {
-          case 'reload': // 刷新
-            reloadPageTab({
-              isHome: !item,
-              fullPath: item?.fullPath ?? tabKey
-            });
-            break;
-          case 'close': // 关闭当前
-            removePageTab({
-              key: item?.fullPath ?? tabKey,
-              active
-            });
-            break;
-          case 'left': // 关闭左侧
-            removeLeftPageTab({
-              key: tabKey,
-              active
-            });
-            break;
-          case 'right': // 关闭右侧
-            removeRightPageTab({
-              key: tabKey,
-              active
-            });
-            break;
-          case 'other': // 关闭其他
-            removeOtherPageTab({
-              key: tabKey,
-              active
-            });
-            break;
-        }
-      },
-      /* 菜单标题国际化 */
-      i18n(_path, key) {
-        if (!I18N_ENABLE || !key) {
-          return;
-        }
-        const k = 'route.' + key + '._name';
-        const title = this.$t(k);
-        if (title !== k) {
-          return title;
-        }
-      },
-      //
-      addPageTab,
-      removePageTab,
-      removeAllPageTab,
-      removeLeftPageTab,
-      removeRightPageTab,
-      removeOtherPageTab,
-      reloadPageTab,
-      setHomeComponents,
-      setPageTabs
-    }
-  };
+  }
+};
 </script>
 
 <style lang="scss">
-  .ele-admin-logo {
-    font-size: 18px !important;
-    justify-content: flex-start !important;
-    align-items: center !important;
-    img {
-      height: 35px !important;
-      max-width: 86px;
-      width: auto;
-      margin-right: 6px;
-    }
+.ele-admin-logo {
+  font-size: 18px !important;
+  justify-content: flex-start !important;
+  align-items: center !important;
+  img {
+    height: 35px !important;
+    max-width: 86px;
+    width: auto;
+    margin-right: 6px;
   }
-  // 侧栏菜单徽章样式,定位在右侧垂直居中并调小尺寸
-  .ele-menu-badge {
-    position: absolute;
-    top: 50%;
-    right: 14px;
-    line-height: 1;
-    margin-top: -9px;
-    font-size: 0;
+}
+// 侧栏菜单徽章样式,定位在右侧垂直居中并调小尺寸
+.ele-menu-badge {
+  position: absolute;
+  top: 50%;
+  right: 14px;
+  line-height: 1;
+  margin-top: -9px;
+  font-size: 0;
 
-    .el-badge__content {
-      height: 18px;
-      line-height: 18px;
-      border-radius: 9px;
-      border: none;
-      min-width: 18px;
-      padding: 0 4px;
-      box-sizing: border-box;
-    }
+  .el-badge__content {
+    height: 18px;
+    line-height: 18px;
+    border-radius: 9px;
+    border: none;
+    min-width: 18px;
+    padding: 0 4px;
+    box-sizing: border-box;
   }
+}
 
-  // 父级菜单标题中右侧多定位一点,避免与箭头重合
-  .el-submenu > .el-submenu__title .ele-menu-badge {
-    right: 36px;
-  }
+// 父级菜单标题中右侧多定位一点,避免与箭头重合
+.el-submenu > .el-submenu__title .ele-menu-badge {
+  right: 36px;
+}
 
-  // 折叠悬浮中样式调整
-  .el-menu--popup {
-    .el-submenu > .el-submenu__title .ele-menu-badge {
-      right: 20px;
-    }
+// 折叠悬浮中样式调整
+.el-menu--popup {
+  .el-submenu > .el-submenu__title .ele-menu-badge {
+    right: 20px;
   }
+}
 
-  // 侧栏折叠后样式调整
-  .ele-admin-collapse .ele-admin-sidebar-menus > .el-scrollbar {
-    & > .el-scrollbar__wrap > .el-scrollbar__view > .el-menu {
-      & > .el-menu-item,
-      & > .el-submenu > .el-submenu__title {
-        .ele-menu-badge {
-          top: 2px;
-          right: 2px;
-          margin: 0;
-        }
+// 侧栏折叠后样式调整
+.ele-admin-collapse .ele-admin-sidebar-menus > .el-scrollbar {
+  & > .el-scrollbar__wrap > .el-scrollbar__view > .el-menu {
+    & > .el-menu-item,
+    & > .el-submenu > .el-submenu__title {
+      .ele-menu-badge {
+        top: 2px;
+        right: 2px;
+        margin: 0;
       }
     }
   }
+}
 
-  // 顶栏菜单标题中样式调整
-  .ele-admin-header-nav > .el-scrollbar > .el-scrollbar__wrap {
-    & > .el-scrollbar__view > .el-menu {
-      & > .el-menu-item,
-      & > .el-submenu > .el-submenu__title {
-        .ele-menu-badge {
-          position: static;
-          right: auto;
-          top: auto;
-          display: inline-block;
-          vertical-align: 6px;
-          margin: 0 0 0 2px;
-        }
+// 顶栏菜单标题中样式调整
+.ele-admin-header-nav > .el-scrollbar > .el-scrollbar__wrap {
+  & > .el-scrollbar__view > .el-menu {
+    & > .el-menu-item,
+    & > .el-submenu > .el-submenu__title {
+      .ele-menu-badge {
+        position: static;
+        right: auto;
+        top: auto;
+        display: inline-block;
+        vertical-align: 6px;
+        margin: 0 0 0 2px;
       }
     }
   }
+}
 
-  // 双侧栏时一级侧栏菜单中样式调整,定位在右上角
-  .ele-admin-sidebar-nav-menu > .el-scrollbar > .el-scrollbar__wrap {
-    & > .el-scrollbar__view > .el-menu {
-      & > .el-menu-item,
-      & > .el-submenu > .el-submenu__title {
-        .ele-menu-badge {
-          top: 0;
-          right: 0;
-          margin: 0;
-        }
+// 双侧栏时一级侧栏菜单中样式调整,定位在右上角
+.ele-admin-sidebar-nav-menu > .el-scrollbar > .el-scrollbar__wrap {
+  & > .el-scrollbar__view > .el-menu {
+    & > .el-menu-item,
+    & > .el-submenu > .el-submenu__title {
+      .ele-menu-badge {
+        top: 0;
+        right: 0;
+        margin: 0;
       }
     }
   }
+}
 
-  // 双侧栏时一级侧栏菜单折叠后样式调整
-  .ele-admin-nav-collapse .ele-admin-sidebar-nav-menu > .el-scrollbar {
-    & > .el-scrollbar__wrap > .el-scrollbar__view > .el-menu {
-      & > .el-menu-item,
-      & > .el-submenu > .el-submenu__title {
-        .ele-menu-badge {
-          top: 0;
-          right: 0;
-        }
+// 双侧栏时一级侧栏菜单折叠后样式调整
+.ele-admin-nav-collapse .ele-admin-sidebar-nav-menu > .el-scrollbar {
+  & > .el-scrollbar__wrap > .el-scrollbar__view > .el-menu {
+    & > .el-menu-item,
+    & > .el-submenu > .el-submenu__title {
+      .ele-menu-badge {
+        top: 0;
+        right: 0;
       }
     }
   }
+}
 </style>

+ 38 - 14
src/router/index.js

@@ -28,9 +28,9 @@ const router = new VueRouter({
  * 路由守卫
  */
 router.beforeEach((to, from, next) => {
-  console.log(store.state.user);
-  console.log(to);
-  console.log(from);
+  // console.log(store.state.user);
+  // console.log(to, 999);
+  // console.log(from);
 
   if (!from.path.includes(REDIRECT_PATH)) {
     NProgress.start();
@@ -56,19 +56,31 @@ router.beforeEach((to, from, next) => {
                   path: '/bpm/definition',
                   component: 'bpm/definition',
                   name: '流程定义',
-                  meta: { title: '流程定义', hide: true, routePath: '/bpm/definition' }
+                  meta: {
+                    title: '流程定义',
+                    hide: true,
+                    routePath: '/bpm/definition'
+                  }
                 },
                 {
                   path: '/bpm/modelEditor',
                   component: 'bpm/model/modelEditor',
                   name: '设计流程',
-                  meta: { title: '设计流程', hide: true, routePath: '/bpm/modelEditor' }
+                  meta: {
+                    title: '设计流程',
+                    hide: true,
+                    routePath: '/bpm/modelEditor'
+                  }
                 },
                 {
                   path: '/bpm/processInstance',
                   component: 'bpm/processInstance/detail',
                   name: '流程详情',
-                  meta: { title: '流程详情', hide: true, routePath: '/bpm/processInstance' }
+                  meta: {
+                    title: '流程详情',
+                    hide: true,
+                    routePath: '/bpm/processInstance'
+                  }
                 }
               );
             }
@@ -86,6 +98,17 @@ router.beforeEach((to, from, next) => {
           next();
         });
     } else {
+      // // 判断外链并跳转
+      // if (to.meta) {
+      //   if (to.meta.source && to.meta.source == 2) {
+      //     // console.log(to, 99999);
+      //     next({
+      //       path: `/source`,
+      //       query: { link: to.meta.iframe }
+      //     });
+      //     return;
+      //   }
+      // }
       // console.log(router.getRoutes(), 'router', routes);
       if (routes.length >= router.getRoutes()?.length) {
         router.addRoute(
@@ -121,18 +144,19 @@ router.roleChange = async ({ menus, homePath, authoritiesRouter }) => {
   const currentUser = JSON.parse(sessionStorage['currentUser']);
 
   if (menus && menus.length > 0) {
-    router.addRoute(
-      getMenuRoutes([...menus, ...authoritiesRouter], homePath)
-    );
+    router.addRoute(getMenuRoutes([...menus, ...authoritiesRouter], homePath));
     if (router.currentRoute.path != (menus[0].redirect || menus[0].path)) {
       await router.replace({
-        path: menus[0].redirect || menus[0].path,
-      })
+        path: menus[0].redirect || menus[0].path
+      });
     }
-    const newToken = await changeRole({ groupId: currentUser.currentGroupId, roleId: currentUser.currentRoleId })
-    setToken(newToken)
+    const newToken = await changeRole({
+      groupId: currentUser.currentGroupId,
+      roleId: currentUser.currentRoleId
+    });
+    setToken(newToken);
     setTimeout(() => {
-      window.location.reload()
+      window.location.reload();
     }, 100);
   }
 

+ 8 - 3
src/router/routes.js

@@ -17,7 +17,7 @@ export const routes = [
     path: '/forget',
     component: () => import('@/views/forget/index.vue'),
     meta: { title: '忘记密码' }
-  },
+  }
 
   // {
   //   path: '/bpm',
@@ -57,13 +57,18 @@ export const routes = [
  * @param menus 菜单数据
  * @param homePath 菜单数据的第一个页面地址
  */
-export function getMenuRoutes (menus, homePath) {
+export function getMenuRoutes(menus, homePath) {
   const routes = [
     // 用于刷新的路由
     {
       path: REDIRECT_PATH + '/:path(.*)',
       component: RedirectLayout,
       meta: { hideFooter: true }
+    },
+    {
+      path: '/source',
+      component: () => import('@/views/source/index.vue'),
+      meta: { hideFooter: true }
     }
   ];
   // 路由铺平处理
@@ -85,7 +90,7 @@ export function getMenuRoutes (menus, homePath) {
  * 获取路由组件
  * @param component 组件名称
  */
-function getComponent (component) {
+function getComponent(component) {
   if (component) {
     return () => import('@/views/' + component);
   }

+ 9 - 4
src/store/modules/user.js

@@ -25,7 +25,9 @@ const formatRouter = (list) => {
         p.children = [];
       }
       p.meta = {
-        secretLevel: p.secretLevel
+        secretLevel: p.secretLevel,
+        source: p.source,
+        path: p.path
       };
       arr.push(p);
       // }
@@ -121,9 +123,12 @@ export default {
     //   return { menus, homePath };
     // },
     //动态路由
-    async fetchUserInfo({ commit,state }) {
-      let currentUser=JSON.parse(sessionStorage['currentUser'])
-      const result = await getResourcesTree({groupId:currentUser.currentGroupId,roleId:currentUser.currentRoleId}).catch(() => {});
+    async fetchUserInfo({ commit, state }) {
+      let currentUser = JSON.parse(sessionStorage['currentUser']);
+      const result = await getResourcesTree({
+        groupId: currentUser.currentGroupId,
+        roleId: currentUser.currentRoleId
+      }).catch(() => {});
       const list = result?.filter((i) => i.path === '/page-main-data');
       if (!list?.length) {
         return {};

+ 39 - 0
src/views/source/index.vue

@@ -0,0 +1,39 @@
+<template>
+  <div>
+    <iframe style="width: 100%; height: 100vh" :src="link + `?token=${token}`">
+    </iframe>
+  </div>
+</template>
+  
+  <script>
+import { getToken } from '@/utils/token-util';
+export default {
+  data() {
+    return {
+      link: '',
+      token: ''
+    };
+  },
+  mounted() {
+    // if (this.$route.query && this.$route.query.link) {
+    //   this.link = this.$route.query.link;
+    // }
+  },
+  watch: {
+    // 监视搜索词变化
+    '$route.query.link': {
+      immediate: true,
+      handler() {
+        // console.log(2222);
+        this.link = this.$route.query.link;
+        this.token = getToken();
+      }
+    }
+  },
+  methods: {}
+};
+</script>
+  
+  <style lang="scss" scoped>
+</style>
+  

+ 95 - 27
src/views/system/menu/components/menu-edit.vue

@@ -1,61 +1,117 @@
 <!-- 编辑弹窗 -->
 <template>
-  <ele-modal width="720px" :visible="visible" :close-on-click-modal="false" custom-class="ele-dialog-form"
-    :title="isUpdate ? '修改菜单' : '添加菜单'" @update:visible="updateVisible">
+  <ele-modal
+    width="720px"
+    :visible="visible"
+    :close-on-click-modal="false"
+    custom-class="ele-dialog-form"
+    :title="isUpdate ? '修改菜单' : '添加菜单'"
+    @update:visible="updateVisible"
+  >
     <el-form ref="form" :model="form" :rules="rules" label-width="100px">
       <el-row>
-
-
         <el-col :span="12">
           <el-form-item label="上级菜单:">
-            <ele-tree-select clearable v-model="form.parentId" :data="menuList" label-key="name" value-key="id"
-              default-expand-all placeholder="请选择上级菜单" />
+            <ele-tree-select
+              clearable
+              v-model="form.parentId"
+              :data="menuList"
+              label-key="name"
+              value-key="id"
+              default-expand-all
+              placeholder="请选择上级菜单"
+            />
           </el-form-item>
         </el-col>
         <el-col :span="12">
           <el-form-item label="菜单名称:" prop="name">
-            <el-input clearable v-model="form.name" placeholder="请输入菜单名称" />
+            <el-input
+              clearable
+              v-model="form.name"
+              placeholder="请输入菜单名称"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="24">
+          <el-form-item label="菜单来源:" prop="source">
+            <el-radio-group v-model="form.source" @input="sourceChange">
+              <el-radio :label="1">内部地址</el-radio>
+              <el-radio :label="2">外部地址</el-radio>
+            </el-radio-group>
           </el-form-item>
         </el-col>
         <el-col :span="12">
           <el-form-item label="路由地址:" prop="url">
-            <el-input clearable v-model="form.url" placeholder="请输入路由地址" />
+            <el-input
+              :disabled="form.source == 2"
+              clearable
+              v-model="form.url"
+              placeholder="请输入路由地址"
+            />
           </el-form-item>
         </el-col>
         <el-col :span="12">
-          <el-form-item label="组件地址:" prop="component">
-            <el-input clearable v-model="form.component" placeholder="请输入路由地址" />
+          <el-form-item
+            :label="form.source == 1 ? '组件地址' : '外链地址'"
+            :prop="form.source == 2 ? 'component' : ''"
+          >
+            <el-input
+              clearable
+              v-model="form.component"
+              :placeholder="
+                form.source == 1 ? '请输入组件地址' : '请输入外链地址'
+              "
+            />
           </el-form-item>
         </el-col>
-
         <el-col :span="12">
           <el-form-item label="权限编码:" prop="permissionCode">
-            <el-input clearable v-model="form.permissionCode" placeholder="请输入路由地址" />
+            <el-input
+              clearable
+              v-model="form.permissionCode"
+              placeholder="请输入路由地址"
+            />
           </el-form-item>
         </el-col>
 
-
         <el-col :span="12">
           <el-form-item v-if="form.rootId != 99999" label="菜单图标:">
-            <ele-icon-picker v-model="form.icon" placeholder="请选择菜单图标" :disabled="form.type === 2" />
+            <ele-icon-picker
+              v-model="form.icon"
+              placeholder="请选择菜单图标"
+              :disabled="form.type === 2"
+            />
           </el-form-item>
 
           <el-form-item v-if="form.rootId == 99999" label="菜单图标:">
-            <el-input clearable v-model="form.icon" placeholder="请输入pda图标" />
+            <el-input
+              clearable
+              v-model="form.icon"
+              placeholder="请输入pda图标"
+            />
           </el-form-item>
-
         </el-col>
         <el-col :span="12">
           <el-form-item label="密级:" prop="secretLevel">
-           <el-select v-model="form.secretLevel" style="width: 100%">
-             <el-option v-for="item in secretLevelList()" :key="item.value" :label="item.label" :value="item.value"></el-option>
-           </el-select>
+            <el-select v-model="form.secretLevel" style="width: 100%">
+              <el-option
+                v-for="item in secretLevelList()"
+                :key="item.value"
+                :label="item.label"
+                :value="item.value"
+              ></el-option>
+            </el-select>
           </el-form-item>
         </el-col>
         <el-col :span="12">
           <el-form-item label="排序号:" prop="sort">
-            <el-input-number :min="0" v-model="form.sort" placeholder="请输入排序号" controls-position="right"
-              class="ele-fluid ele-text-left" />
+            <el-input-number
+              :min="0"
+              v-model="form.sort"
+              placeholder="请输入排序号"
+              controls-position="right"
+              class="ele-fluid ele-text-left"
+            />
           </el-form-item>
         </el-col>
         <el-col :span="12">
@@ -83,7 +139,7 @@
 <script>
 import { EleIconPicker } from 'ele-admin';
 import { saveOrUpdate } from '@/api/system/menu';
-import {secretLevelList} from "@/enum/dict";
+import { secretLevelList } from '@/enum/dict';
 
 export default {
   components: { EleIconPicker },
@@ -103,13 +159,14 @@ export default {
       parentId: '',
       name: '',
       type: 1,
+      source: 1,
       icon: '',
       url: '/',
       component: '',
       sort: null,
       rootId: null,
       permissionCode: 1,
-      secretLevel: 1,
+      secretLevel: 1
     };
     return {
       defaultForm,
@@ -117,11 +174,12 @@ export default {
       form: { ...defaultForm },
       // 表单验证规则
       rules: {
-        name: [
-          { required: true, message: '请输入菜单名称', trigger: 'blur' }
-        ],
+        name: [{ required: true, message: '请输入菜单名称', trigger: 'blur' }],
         sort: [{ required: true, message: '请输入排序号', trigger: 'blur' }],
         url: [{ required: true, message: '请输入菜单路由', trigger: 'blur' }],
+        component: [
+          { required: true, message: '请输入组件地址', trigger: 'blur' }
+        ],
         type: [{ required: true, message: '请选择菜单类型', trigger: 'blur' }]
       },
       // 提交状态
@@ -144,7 +202,15 @@ export default {
   },
   methods: {
     secretLevelList() {
-      return secretLevelList
+      return secretLevelList;
+    },
+    sourceChange(e) {
+      if (e == 2) {
+        this.form.url =
+          '/sourceLink' + Math.floor(10000 + Math.random() * 90000);
+      } else {
+        this.form.url = '/';
+      }
     },
     /* 保存编辑 */
     save() {
@@ -242,6 +308,7 @@ export default {
             parentId: this.data.parentId == 0 ? '' : this.data.parentId ?? ''
           });
           this.isUpdate = true;
+          // this.sourceChange(this.form.source);
         } else {
           this.form.parentId = this.parentId ?? '';
           this.isUpdate = false;
@@ -249,6 +316,7 @@ export default {
       } else {
         this.$refs.form.clearValidate();
         this.form = { ...this.defaultForm };
+        // this.sourceChange(this.form.source);
       }
     }
   }

+ 1 - 1
vue.config.js

@@ -34,7 +34,7 @@ module.exports = {
         // target: 'http://192.168.1.124:50001',
         // target: 'http://192.168.1.147:18086',
         // target: 'http://192.168.1.176:18086',
-        target: 'http://192.168.1.105:18086',
+        target: 'http://192.168.1.251:18086',
 
         changeOrigin: true, // 只有这个值为true的情况下 才表示开启跨域
         pathRewrite: {