zhou zhou
11 小时以前 7c2bffa1a495cc4a3a263f654c08c231009c5c4e
rsf-design/src/views/system/menu/index.vue
@@ -1,4 +1,3 @@
<!-- 菜单管理页面 -->
<template>
  <div class="menu-page art-full-height">
    <ArtSearchBar
@@ -17,9 +16,9 @@
        @refresh="handleRefresh"
      >
        <template #left>
          <ElButton v-auth="'add'" @click="handleAddMenu" v-ripple>添加菜单</ElButton>
          <ElButton v-auth="'add'" @click="handleAddMenu" v-ripple>{{ t('pages.system.menu.buttons.add') }}</ElButton>
          <ElButton @click="toggleExpand" v-ripple>
            {{ isExpanded ? '收起' : '展开' }}
            {{ isExpanded ? t('pages.system.menu.actions.collapse') : t('pages.system.menu.actions.expand') }}
          </ElButton>
        </template>
      </ArtTableHeader>
@@ -48,6 +47,8 @@
</template>
<script setup>
  import { computed, nextTick, onMounted, reactive, ref } from 'vue'
  import { useI18n } from 'vue-i18n'
  import MenuDialog from './modules/menu-dialog.vue'
  import { formatMenuTitle } from '@/utils/router'
@@ -71,6 +72,7 @@
  } from './menuPage.helpers'
  defineOptions({ name: 'Menus' })
  const { t } = useI18n()
  const loading = ref(false)
  const isExpanded = ref(false)
@@ -89,13 +91,13 @@
  const formItems = computed(() => [
    {
      label: '菜单名称',
      label: t('pages.system.menu.search.name'),
      key: 'name',
      type: 'input',
      props: { clearable: true }
    },
    {
      label: '路由地址',
      label: t('pages.system.menu.search.route'),
      key: 'route',
      type: 'input',
      props: { clearable: true }
@@ -106,7 +108,7 @@
    loading.value = true
    try {
      const list = await guardRequestWithMessage(fetchGetMenuList({}), null, {
        timeoutMessage: '菜单加载超时,已停止等待'
        timeoutMessage: t('pages.system.menu.messages.loadTimeout')
      })
      if (list === null) {
        tableData.value = []
@@ -116,7 +118,7 @@
      tableData.value = Array.isArray(list) ? list : []
      menuTreeOptions.value = buildMenuTreeOptions(tableData.value, formatMenuTitle)
    } catch (error) {
      ElMessage.error(error?.message || '获取菜单失败')
      ElMessage.error(error?.message || t('pages.system.menu.messages.loadFailed'))
    } finally {
      loading.value = false
    }
@@ -183,59 +185,67 @@
  async function handleSubmit(formData) {
    const payload = buildMenuSubmitPayload(formData)
    if (payload.id && payload.id === payload.parentId) {
      ElMessage.error('上级菜单不能选择当前菜单')
      ElMessage.error(t('pages.system.menu.messages.menuSelfParent'))
      return
    }
    try {
      if (payload.id) {
        await fetchUpdateMenu(payload)
        ElMessage.success('修改成功')
        ElMessage.success(t('crud.messages.updateSuccess'))
      } else {
        await fetchSaveMenu(payload)
        ElMessage.success('新增成功')
        ElMessage.success(t('crud.messages.createSuccess'))
      }
      closeDialog()
      await loadMenuResources()
    } catch (error) {
      ElMessage.error(error?.message || '提交失败')
      ElMessage.error(error?.message || t('pages.system.menu.messages.submitFailed'))
    }
  }
  async function handleDeleteMenu(row) {
    try {
      await ElMessageBox.confirm(
        `确定要删除菜单「${getMenuDisplayTitle(row, formatMenuTitle)}」吗?删除后无法恢复`,
        '删除确认',
        t('pages.system.menu.messages.deleteMenuConfirm', {
          title: getMenuDisplayTitle(row, formatMenuTitle)
        }),
        t('crud.confirm.deleteTitle'),
        {
          confirmButtonText: '确定',
          cancelButtonText: '取消',
          confirmButtonText: t('common.confirm'),
          cancelButtonText: t('common.cancel'),
          type: 'warning'
        }
      )
      await fetchDeleteMenu(row.id)
      ElMessage.success('删除成功')
      ElMessage.success(t('crud.messages.deleteSuccess'))
      await loadMenuResources()
    } catch (error) {
      if (error !== 'cancel') {
        ElMessage.error(error?.message || '删除失败')
        ElMessage.error(error?.message || t('crud.messages.deleteFailed'))
      }
    }
  }
  async function handleDeleteAuth(row) {
    try {
      await ElMessageBox.confirm(`确定要删除权限「${row.name || row.authority || row.id}」吗?删除后无法恢复`, '删除确认', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      })
      await ElMessageBox.confirm(
        t('pages.system.menu.messages.deleteAuthConfirm', {
          title: row.name || row.authority || row.id
        }),
        t('crud.confirm.deleteTitle'),
        {
          confirmButtonText: t('common.confirm'),
          cancelButtonText: t('common.cancel'),
          type: 'warning'
        }
      )
      await fetchDeleteMenu(row.id)
      ElMessage.success('删除成功')
      ElMessage.success(t('crud.messages.deleteSuccess'))
      await loadMenuResources()
    } catch (error) {
      if (error !== 'cancel') {
        ElMessage.error(error?.message || '删除失败')
        ElMessage.error(error?.message || t('crud.messages.deleteFailed'))
      }
    }
  }