zhengyiming
7 天以前 3a6cec3cc9068778953f21516660bc4403bc7ceb
src/views/System/ModuleManage.vue
@@ -6,7 +6,7 @@
          <div class="query-filter-list-item">
            <SearchInput
              v-model="state.searchValue"
              placeholder="角色名称"
              placeholder="菜单名称"
              @on-click-search="handleSearch"
              @keyup.enter="handleSearch()"
            >
@@ -45,18 +45,18 @@
          </template>
          <template v-else-if="column.property === 'isMenu'">
            <el-switch
              v-model="row.isMenu"
              :modelValue="row.type === EnumMenuType.Menu"
              :onUpdate:modelValue="(v: boolean) =>{
                 row.type=v?EnumMenuType.Menu:EnumMenuType.Page
              }"
              inline-prompt
              :active-value="1"
              :inactive-value="0"
              @change="(v: number) => handleChangeStatus(v, row, 'isMenu')"
            ></el-switch>
          </template>
          <template v-else-if="column.property === 'enabledMark'">
            <el-switch
              v-model="row.enabledMark"
              :active-value="1"
              :inactive-value="0"
              :modelValue="!row.isDisabled"
              :onUpdate:modelValue="(v: boolean) => row.isDisabled =!v"
              @change="(v: number) => handleChangeStatus(v, row, 'enabledMark')"
            ></el-switch>
          </template>
@@ -95,14 +95,22 @@
  OperationBtnType,
  SearchInput,
} from '@bole-core/components';
import { ModuleUtils, TreeModuleDtoGroupDto, Message, TreeStore } from '@/utils';
import { ModuleUtils, TreeModuleDtoGroupDto, Message, TreeStore, flattenTree } from '@/utils';
import { TableInstance } from 'element-plus';
import { SubModuleType, SubModuleTitle, SubModuleKey, FastBtn, ModuleColumns } from '@/constants';
import {
  SubModuleType,
  SubModuleTitle,
  SubModuleKey,
  FastBtn,
  ModuleColumns,
  EnumMenuType,
} from '@/constants';
import SubModuleEditDrawer from './components/SubModuleEditDrawer.vue';
import AddOrEditModuleDialog from './components/AddOrEditModuleDialog.vue';
import { useDebounceFn } from '@vueuse/core';
import _ from 'lodash';
import { useReset } from '@bole-core/core';
import * as menuServices from '@/services/api/menu';
defineOptions({
  name: 'ModuleManage',
@@ -189,8 +197,8 @@
  sortCode: 0,
  path: '',
  isCache: true,
  isMenu: 1,
  enabledMark: 1,
  isMenu: true,
  enabledMark: true,
  showCacheSelect: false,
  showIconSelect: false,
  showSubMenuIconSelect: false,
@@ -198,10 +206,10 @@
  title: '',
};
const editForm = reactive({ ...BaseFormData });
const currentDialogModule = ref<TreeModuleDtoGroupDto>({});
const currentDialogModule = ref<API.GetMenuQueryResult>({});
//drawer
const drawerVisible = ref(false);
const currentDrawerModule = ref<TreeModuleDtoGroupDto>({});
const currentDrawerModule = ref<API.GetMenuQueryResult>({});
const drawerState = reactive<{
  type: SubModuleType;
  tableData: ValueOf<API.AllSubModule>;
@@ -215,10 +223,16 @@
});
async function getAllModule() {
  try {
    let res = await baseModuleServices.getAllModuleList({
      showLoading: !state.loading,
    });
    const treeStore = ModuleUtils.convertToModuleGroup(res);
    let res = await menuServices.getMenus(
      {
        userType: EnumUserType.Operation,
        clientType: EnumClientType.PcWeb,
      },
      {
        showLoading: false,
      }
    );
    const treeStore = ModuleUtils.convertToModuleGroup(flattenTree(res));
    moduleTreeStore.value = treeStore;
    originModuleTree.value = [...treeStore.data];
  } catch (error) {}
@@ -234,16 +248,21 @@
  statusType: T
) {
  try {
    let params = {
      ..._.omit(data, ['children', 'parentNode']),
      [statusType]: value,
    };
    await baseModuleServices.addOrEditModule(params);
    // let params = {
    //   ..._.omit(data, ['children', 'parentNode']),
    //   [statusType]: value,
    // };
    // await baseModuleServices.addOrEditModule(params);
  } catch (error) {
    Message.errorMessage('操作失败');
  }
}
function openDialog(options: {
async function getMenu(id: string) {
  return await menuServices.getMenu({ id: id });
}
async function openDialog(options: {
  module?: TreeModuleDtoGroupDto;
  showCacheSelect: boolean;
  showIconSelect: boolean;
@@ -252,46 +271,48 @@
  parentId: string;
  baseSortCode?: number;
}) {
  const {
    module,
    showCacheSelect,
    showIconSelect,
    showSubMenuIconSelect,
    showParentSelect,
    parentId,
    baseSortCode,
  } = options;
  if (module) {
    currentDialogModule.value = module;
    useSetReactive(editForm, {
      title: `${module.name}编辑`,
      enCode: module.enCode,
      name: module.name,
      icon: module.icon,
      sortCode: module.sortCode,
      path: module.path,
      isMenu: module.isMenu,
      enabledMark: module.enabledMark,
      parentId: parentId,
  try {
    const {
      module,
      showCacheSelect,
      showIconSelect,
      showSubMenuIconSelect,
      showParentSelect,
      isCache: module.isCache,
    });
  } else {
    currentDialogModule.value = {};
    useSetReactive(editForm, BaseFormData, {
      title: '新增功能模块',
      parentId: parentId,
      showCacheSelect,
      showIconSelect,
      showSubMenuIconSelect,
      showParentSelect,
      sortCode: baseSortCode,
    });
  }
  editDialogFormVisible.value = true;
      parentId,
      baseSortCode,
    } = options;
    if (module) {
      currentDialogModule.value = await getMenu(module.id);
      useSetReactive(editForm, {
        title: `${module.name}编辑`,
        enCode: module.code,
        name: module.name,
        icon: module.icon,
        sortCode: module.sort,
        path: module.url,
        isMenu: module.type == EnumMenuType.Menu,
        enabledMark: !module.isDisabled,
        parentId: parentId,
        showCacheSelect,
        showIconSelect,
        showSubMenuIconSelect,
        showParentSelect,
        isCache: module.isCache,
      });
    } else {
      currentDialogModule.value = {};
      useSetReactive(editForm, BaseFormData, {
        title: '新增功能模块',
        parentId: parentId,
        showCacheSelect,
        showIconSelect,
        showSubMenuIconSelect,
        showParentSelect,
        sortCode: baseSortCode,
      });
    }
    editDialogFormVisible.value = true;
  } catch (error) {}
}
function handleAddOrEditRootModule(module?: TreeModuleDtoGroupDto) {
  const showCacheSelect = false;
@@ -341,16 +362,17 @@
}
async function handleAddOrEditModule() {
  try {
    let params: API.ModuleDto = {
      enCode: editForm.enCode,
    let params: API.SaveMenuCommand = {
      userType: EnumUserType.Operation,
      clientType: EnumClientType.PcWeb,
      code: editForm.enCode,
      name: editForm.name,
      sortCode: editForm.sortCode,
      path: editForm.path,
      // isCache: true,
      isMenu: editForm.isMenu,
      enabledMark: editForm.enabledMark,
      type: editForm.isMenu ? EnumMenuType.Menu : EnumMenuType.Page,
      visitLevel: EnumMenuVisitLevel.NeedPower,
      icon: editForm.icon,
      // parentId:,
      url: editForm.path,
      isDisabled: !editForm.enabledMark,
      sort: editForm.sortCode,
    };
    if (editForm.showCacheSelect) {
      params.isCache = editForm.isCache;
@@ -360,8 +382,9 @@
    }
    if (currentDialogModule.value.id) {
      params.id = currentDialogModule.value.id;
      params.groups = currentDialogModule.value.groups;
    }
    const res = await baseModuleServices.addOrEditModule(params);
    const res = await saveMenu(params);
    if (res) {
      Message.successMessage('保存成功');
      getAllModule();
@@ -370,28 +393,45 @@
  } catch (e) {}
}
async function saveMenu(params: API.SaveMenuCommand) {
  try {
    const res = await menuServices.saveMenu(params);
    if (res) {
      Message.successMessage('保存成功');
      getAllModule();
      editDialogFormVisible.value = false;
      return res;
    }
  } catch (error) {}
}
async function handleDelete(module: TreeModuleDtoGroupDto) {
  try {
    await Message.deleteMessage();
    const res = await baseModuleServices.deleteModule({ id: module.id });
    const res = await menuServices.deleteMenu({ ids: [module.id] });
    if (res) {
      Message.successMessage('删除成功');
      getAllModule();
    }
  } catch (error) {}
}
function openDrawer(module: TreeModuleDtoGroupDto, type: SubModuleType) {
  drawerState.type = type;
  currentDrawerModule.value = module;
  getBaseModuleGetAllSubModule(module, type);
async function openDrawer(module: TreeModuleDtoGroupDto, type: SubModuleType) {
  try {
    drawerState.type = type;
    currentDrawerModule.value = await getMenu(module.id);
    await nextTick();
    getBaseModuleGetAllSubModule(module, type);
  } catch (error) {}
}
async function getBaseModuleGetAllSubModule(module: TreeModuleDtoGroupDto, type: SubModuleType) {
  try {
    let params = {
      moduleId: module.id,
    };
    const res = await baseModuleServices.getAllSubModule(params);
    drawerState.tableData = res[SubModuleKey[type]];
    const defaultGroup = currentDrawerModule.value.groups.find((g) => g.group === 'default') ?? {};
    if (type === SubModuleType.Column) {
      drawerState.tableData = defaultGroup.fields ?? [];
    } else {
      drawerState.tableData =
        defaultGroup.buttonLocations?.find((b) => b.location === SubModuleKey[type])?.buttons ?? [];
    }
    drawerVisible.value = true;
  } catch (error) {}
}
@@ -411,7 +451,7 @@
}
function getDefaultSortCode() {
  return drawerState.tableData.length > 0
    ? drawerState.tableData[drawerState.tableData.length - 1].sortCode + 1
    ? drawerState.tableData[drawerState.tableData.length - 1].sort + 1
    : 0;
}
function handleBatchAddColumn(keys: string[]) {