Bladeren bron

菜单管理提交

LAPTOP-16IUEB3P\Lenovo 3 jaren geleden
bovenliggende
commit
f4d4ff1c59

+ 15 - 2
ele-admin-template/package-lock.json

@@ -2032,7 +2032,7 @@
       "dependencies": {
         "@vue/vue-loader-v15": {
           "version": "npm:vue-loader@15.10.1",
-          "resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-15.10.1.tgz",
+          "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.10.1.tgz",
           "integrity": "sha512-SaPHK1A01VrNthlix6h1hq4uJu7S/z0kdLUb6klubo738NeQoLbS6V9/d8Pv19tU0XdQKju3D1HSKuI8wJ5wMA==",
           "dev": true,
           "requires": {
@@ -2045,7 +2045,7 @@
           "dependencies": {
             "hash-sum": {
               "version": "1.0.2",
-              "resolved": "https://registry.npmmirror.com/hash-sum/-/hash-sum-1.0.2.tgz",
+              "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz",
               "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==",
               "dev": true
             }
@@ -2697,6 +2697,11 @@
       "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
       "dev": true
     },
+    "bignumber.js": {
+      "version": "9.1.1",
+      "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.1.tgz",
+      "integrity": "sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig=="
+    },
     "binary-extensions": {
       "version": "2.2.0",
       "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz",
@@ -5601,6 +5606,14 @@
       "resolved": "https://registry.npmmirror.com/jsesc/-/jsesc-2.5.2.tgz",
       "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA=="
     },
+    "json-bigint": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz",
+      "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==",
+      "requires": {
+        "bignumber.js": "^9.0.0"
+      }
+    },
     "json-parse-better-errors": {
       "version": "1.0.2",
       "resolved": "https://registry.npmmirror.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",

+ 1 - 0
ele-admin-template/package.json

@@ -28,6 +28,7 @@
     "element-ui": "2.15.7",
     "github-markdown-css": "^5.1.0",
     "jsbarcode": "^3.11.5",
+    "json-bigint": "^1.0.0",
     "nprogress": "^0.2.0",
     "tinymce": "^5.10.5",
     "vue": "^2.7.10",

+ 33 - 0
ele-admin-template/src/api/system/menu/index.js

@@ -14,6 +14,39 @@ export async function listMenus(params) {
 }
 
 
+/**
+ * 新增或编辑菜单信息
+ * @param params 菜单信息
+ */
+export async function saveOrUpdate(params) {
+  const res = await request.post(`/system/resources/saveNew`, params);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+
+
+/**
+ * 删除菜单
+ * @param params 菜单信息
+ */
+export async function deleteMenu(params) {
+  const res = await request.post('/system/resources/removeById', params);
+  if (res.data.code == 0) {
+    return res.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+
+
+
+
+
+
+
 //--------------------原系统接口
 /**
  * 添加菜单

+ 11 - 2
ele-admin-template/src/utils/request.js

@@ -7,11 +7,20 @@ import { MessageBox } from 'element-ui';
 import { API_BASE_URL, TOKEN_HEADER_NAME, LAYOUT_PATH } from '@/config/setting';
 import { getToken, setToken } from './token-util';
 import { logout } from './page-tab-util';
+import JSONBIG from 'json-bigint'
+
+
 
 const service = axios.create({
-  baseURL: API_BASE_URL
+  baseURL: API_BASE_URL,
+  transformResponse: [function (data) {
+    const json = JSONBIG({
+      storeAsString: true
+    })
+    const res = json.parse(data)
+    return res
+  }]
 });
-
 /**
  * 添加请求拦截器
  */

+ 57 - 54
ele-admin-template/src/views/system/menu/components/menu-edit.vue

@@ -11,7 +11,7 @@
     <el-form ref="form" :model="form" :rules="rules" label-width="100px">
       <el-row>
         <el-col :span="12">
-          <el-form-item label="上级菜单:" prop="parentId">
+          <el-form-item label="上级菜单:">
             <ele-tree-select
               clearable
               v-model="form.parentId"
@@ -24,10 +24,10 @@
           </el-form-item>
         </el-col>
         <el-col :span="12">
-          <el-form-item label="菜单名称:" prop="title">
+          <el-form-item label="菜单名称:" prop="name">
             <el-input
               clearable
-              v-model="form.title"
+              v-model="form.name"
               placeholder="请输入菜单名称"
             />
           </el-form-item>
@@ -46,7 +46,7 @@
             <ele-icon-picker
               v-model="form.icon"
               placeholder="请选择菜单图标"
-              :disabled="form.menuType === 2"
+              :disabled="form.type === 2"
             />
           </el-form-item>
         </el-col>
@@ -62,7 +62,7 @@
           </el-form-item>
         </el-col>
         <el-col :span="12">
-          <el-form-item label="菜单类型:">
+          <el-form-item label="菜单类型:" prop="type">
             <el-radio-group v-model="form.type" @change="onMenuTypeChange">
               <el-radio :label="1">菜单</el-radio>
               <el-radio :label="2">按钮</el-radio>
@@ -85,7 +85,7 @@
 
 <script>
   import { EleIconPicker } from 'ele-admin';
-  import { addMenu, updateMenu } from '@/api/system/menu';
+  import { saveOrUpdate  } from '@/api/system/menu';
 
   export default {
     components: { EleIconPicker },
@@ -95,24 +95,20 @@
       // 修改回显的数据
       data: Object,
       // 上级菜单id
-      parentId: Number,
+      parentId: [Number,String],
       // 全部菜单数据
       menuList: Array
     },
     data() {
       const defaultForm = {
-        menuId: null,
+        id: null,
         parentId: '',
-        title: '',
-        menuType: 0,
-        openType: 0,
+        name: '',
+        type: 1,
         icon: '',
-        path: '',
-        component: '',
-        authority: '',
-        sortNumber: null,
-        hide: 0,
-        meta: ''
+        url: '',
+        sort: null,
+        permissionCode:1
       };
       return {
         defaultForm,
@@ -120,9 +116,10 @@
         form: { ...defaultForm },
         // 表单验证规则
         rules: {
-          title: [{required: true,message: '请输入菜单名称',trigger: 'blur'}],
+          name: [{required: true,message: '请输入菜单名称',trigger: 'blur'}],
           sort: [{required: true,message: '请输入排序号', trigger: 'blur'}],
-          parentId: [{required: true,message: '请选择上级菜单', trigger: 'blur'}],
+          url: [{required: true,message: '请输入菜单路由', trigger: 'blur'}],
+          type: [{required: true,message: '请选择菜单类型', trigger: 'blur'}],
         },
         // 提交状态
         loading: false,
@@ -131,16 +128,16 @@
       };
     },
     computed: {
-      pathPlaceholder() {
-        return this.form.openType === 2 ? '请输入外链地址' : '请输入路由地址';
-      },
-      componentPlaceholder() {
-        return this.form.openType === 1 ? '请输入内链地址' : '请输入组件路径';
-      },
-      // 是否开启响应式布局
-      styleResponsive() {
-        return this.$store.state.theme.styleResponsive;
-      }
+      // pathPlaceholder() {
+      //   return this.form.openType === 2 ? '请输入外链地址' : '请输入路由地址';
+      // },
+      // componentPlaceholder() {
+      //   return this.form.openType === 1 ? '请输入内链地址' : '请输入组件路径';
+      // },
+      // // 是否开启响应式布局
+      // styleResponsive() {
+      //   return this.$store.state.theme.styleResponsive;
+      // }
     },
     methods: {
       /* 保存编辑 */
@@ -153,14 +150,21 @@
           const data = {
             ...this.form,
             // menuType 对应的值与后端不一致在前端处理
-            menuType: this.form.menuType === 2 ? 1 : 0,
+            // type: this.form.type === 2 ? 1 : 0,
             parentId: this.form.parentId || 0
           };
-          const saveOrUpdate = this.isUpdate ? updateMenu : addMenu;
+          // const saveOrUpdate = this.isUpdate ? updateMenu : addMenu;
+          if(!this.isUpdate){
+            delete data.id
+          }
           saveOrUpdate(data)
-            .then((msg) => {
+            .then(res => {
               this.loading = false;
-              this.$message.success(msg);
+              if(this.isUpdate){
+                this.$message.success('菜单编辑成功');
+              }else{
+                this.$message.success('菜单新增成功');
+              }
               this.updateVisible(false);
               this.$emit('done');
             })
@@ -200,36 +204,35 @@
         }
       },
       /* 判断是否是外链 */
-      isUrl(url) {
-        return !!(
-          url &&
-          (url.startsWith('http://') ||
-            url.startsWith('https://') ||
-            url.startsWith('//'))
-        );
-      },
+      // isUrl(url) {
+      //   return !!(
+      //     url &&
+      //     (url.startsWith('http://') ||
+      //       url.startsWith('https://') ||
+      //       url.startsWith('//'))
+      //   );
+      // },
       /* 判断是否是目录 */
-      isDirectory(d) {
-        return !!d.children?.length && !d.component;
-      }
+      // isDirectory(d) {
+      //   return !!d.children?.length && !d.component;
+      // }
     },
     watch: {
       visible(visible) {
         if (visible) {
           if (this.data) {
-            const isInnerLink = this.isUrl(this.data.component) ? 1 : 0;
+            // const isInnerLink = this.isUrl(this.data.component) ? 1 : 0;
             // menuType 对应的值与后端不一致在前端处理
-            const menuType =
-              this.data.menuType === 1
-                ? 2
-                : this.isDirectory(this.data)
-                ? 0
-                : 1;
+            // const menuType =
+            //   this.data.type === 1
+            //     ? 2
+            //     : this.isDirectory(this.data)
+            //     ? 0
+            //     : 1;
             this.$util.assignObject(this.form, {
               ...this.data,
-              menuType,
-              openType: this.isUrl(this.data.path) ? 2 : isInnerLink,
-              parentId: this.data.parentId === 0 ? '' : this.data.parentId ?? ''
+              // openType: this.isUrl(this.data.path) ? 2 : isInnerLink,
+              parentId: this.data.parentId == 0 ? '' : this.data.parentId ?? ''
             });
             this.isUpdate = true;
           } else {

+ 7 - 14
ele-admin-template/src/views/system/menu/index.vue

@@ -94,7 +94,7 @@
 <script>
   import MenuSearch from './components/menu-search.vue';
   import MenuEdit from './components/menu-edit.vue';
-  import { listMenus, removeMenu } from '@/api/system/menu';
+  import { listMenus, deleteMenu } from '@/api/system/menu';
 
   export default {
     name: 'SystemMenu',
@@ -131,16 +131,6 @@
             showOverflowTooltip: true,
             width: 60
           },
-          // {
-          //   prop: 'hide',
-          //   label: '可见',
-          //   align: 'center',
-          //   showOverflowTooltip: true,
-          //   width: 60,
-          //   formatter: (_row, _column, cellValue) => {
-          //     return ['是', '否'][cellValue];
-          //   }
-          // },
           {
             prop: 'type',
             label: '类型',
@@ -185,6 +175,9 @@
       },
       /* 数据转为树形结构 */
       parseData(data) {
+        // data.map(item=>{
+        //    item.id = parseInt(item.id)
+        // })
         return this.$util.toTreeData({
           data: data,
           idField: 'id',
@@ -214,10 +207,10 @@
           return;
         }
         const loading = this.$loading({ lock: true });
-        removeMenu(row.menuId)
-          .then((msg) => {
+        deleteMenu([row.id])
+          .then(res => {
             loading.close();
-            this.$message.success(msg);
+            this.$message.success('菜单删除成功');
             this.reload();
           })
           .catch((e) => {

+ 2 - 2
ele-admin-template/vue.config.js

@@ -15,9 +15,9 @@ module.exports = {
     proxy: {
       // 当我们的本地的请求 有/api的时候,就会代理我们的请求地址向另外一个服务器发出请求
       '/api': {
-        target: 'http://192.168.3.51:18086', // 跨域请求的地址
+        // target: 'http://192.168.3.51:18086', // 跨域请求的地址
         // target: 'http://192.168.3.35:8080', // kang杨威
-        //target: 'http://192.168.3.25:8080', // 黄峥嵘
+        target: 'http://192.168.3.25:8080', // 黄峥嵘
         changeOrigin: true, // 只有这个值为true的情况下 才表示开启跨域
         pathRewrite: {
           '^/api': ''