Browse Source

feat(api): menu list part2

gemercheung 3 years ago
parent
commit
ef274e9cf4

+ 19 - 8
src/api/system/model/systemModel.ts

@@ -18,8 +18,15 @@ export type DeptParams = {
 };
 
 export type MenuParams = {
-  menuName?: string;
-  status?: string;
+  icon: string;
+  name: string;
+  orderNum: number;
+  parentId: number;
+  parentName: string;
+  perms: string;
+  status: number;
+  type: number;
+  url: string;
 };
 
 export interface AccountListItem {
@@ -42,13 +49,17 @@ export interface DeptListItem {
 }
 
 export interface MenuListItem {
-  id: string;
-  orderNo: string;
-  createTime: string;
-  status: number;
+  menuId: string;
+  children?: MenuListItem[];
   icon: string;
-  component: string;
-  permission: string;
+  name: string;
+  orderNum: number;
+  parentId: number;
+  parentName: string;
+  perms: string;
+  status: number;
+  type: number;
+  url: string;
 }
 
 export interface RoleListItem {

+ 11 - 0
src/api/system/system.ts

@@ -24,6 +24,9 @@ enum Api {
   MenuList = '/zfb-api/zfb/shop/sys/menu/queryAll',
   RolePageList = '/zfb-api/zfb/shop/sys/role/list',
   GetAllRoleList = '/basic-api/system/getAllRoleList',
+  saveMenu = '/zfb-api/zfb/shop/sys/menu/save',
+  updateMenu = '/zfb-api/zfb/shop/sys/menu/update',
+  deleteMenu = '/zfb-api/zfb/shop/sys/menu/delete',
 }
 
 export const getAccountList = (params: AccountParams) =>
@@ -37,6 +40,14 @@ export const getMenuList = (params?: MenuParams) =>
     url: Api.MenuList,
     params: params,
   });
+export const saveMenuApi = (params?: MenuParams) =>
+  defHttp.post<MenuListGetResultModel>({ url: Api.saveMenu, params });
+
+export const updateMenuApi = (params?: MenuParams) =>
+  defHttp.post<MenuListGetResultModel>({ url: Api.updateMenu, params });
+
+export const deleteMenuApi = (params?: (string | number)[]) =>
+  defHttp.post<MenuListGetResultModel>({ url: Api.deleteMenu, params });
 
 export const getRoleListByPage = (params?: RolePageParams) =>
   defHttp.post<RolePageListGetResultModel>({ url: Api.RolePageList, params });

+ 8 - 1
src/views/dashboard/system/menu/MenuDrawer.vue

@@ -16,7 +16,7 @@
   import { formSchema } from './menu.data';
   import { BasicDrawer, useDrawerInner } from '/@/components/Drawer';
 
-  import { getMenuList } from '/@/api/system/system';
+  import { getMenuList, saveMenuApi, updateMenuApi } from '/@/api/system/system';
   import { makeMenuTree } from '/@/utils/treeUtils';
 
   export default defineComponent({
@@ -62,6 +62,13 @@
           setDrawerProps({ confirmLoading: true });
           // TODO custom api
           console.log(values);
+          values.parentId ??= 0;
+          if (!unref(isUpdate)) {
+            await saveMenuApi(values);
+          } else {
+            await updateMenuApi(values);
+          }
+
           closeDrawer();
           emit('success');
         } finally {

+ 9 - 6
src/views/dashboard/system/menu/index.vue

@@ -30,7 +30,7 @@
   import { defineComponent, reactive } from 'vue';
 
   import { BasicTable, useTable, TableAction } from '/@/components/Table';
-  import { getMenuList } from '/@/api/system/system';
+  import { getMenuList, deleteMenuApi } from '/@/api/system/system';
 
   import { useDrawer } from '/@/components/Drawer';
   import MenuDrawer from './MenuDrawer.vue';
@@ -59,14 +59,14 @@
         useSearchForm: false,
         showTableSetting: true,
         bordered: true,
-        showIndexColumn: false,
-        canResize: false,
+        showIndexColumn: true,
+        canResize: true,
         actionColumn: {
           width: 80,
           title: '操作',
           dataIndex: 'action',
           slots: { customRender: 'action' },
-          fixed: undefined,
+          fixed: 'right',
         },
         afterFetch: handleAfterFetch,
       });
@@ -90,8 +90,11 @@
         });
       }
 
-      function handleDelete(record: Recordable) {
-        console.log(record);
+      async function handleDelete(record: Recordable) {
+        console.log(record.en);
+        try {
+          await deleteMenuApi([String(record.menuId)]);
+        } catch (error) {}
       }
 
       function handleSuccess() {

+ 16 - 5
src/views/dashboard/system/menu/menu.data.ts

@@ -8,10 +8,21 @@ import { Icon } from '/@/components/Icon';
 
 export const columns: BasicColumn[] = [
   {
+    title: 'ID',
+    dataIndex: 'menuId',
+    width: 80,
+  },
+  {
+    title: 'parentId(debug)',
+    dataIndex: 'parentId',
+    width: 80,
+  },
+  {
     title: '菜单名称',
     dataIndex: 'name',
     width: 200,
     align: 'left',
+    fixed: 'left',
   },
   {
     title: '上级菜单',
@@ -104,8 +115,8 @@ export const searchFormSchema: FormSchema[] = [
     component: 'Select',
     componentProps: {
       options: [
-        { label: '启用', value: '0' },
-        { label: '停用', value: '1' },
+        { label: '启用', value: 0 },
+        { label: '停用', value: 1 },
       ],
     },
     colProps: { span: 8 },
@@ -186,11 +197,11 @@ export const formSchema: FormSchema[] = [
     field: 'status',
     label: '状态',
     component: 'RadioButtonGroup',
-    defaultValue: 1,
+    defaultValue: 0,
     componentProps: {
       options: [
-        { label: '启用', value: 1 },
-        { label: '禁用', value: 0 },
+        { label: '启用', value: 0 },
+        { label: '禁用', value: 1 },
       ],
     },
   },