Sfoglia il codice sorgente

fix: 动态菜单渲染fix

laiqi 1 anno fa
parent
commit
766de355e2

+ 0 - 117
apps/web-ele/src/views/demos/element/index.vue

@@ -1,117 +0,0 @@
-<script lang="ts" setup>
-import { ref } from 'vue';
-
-import { Page } from '@vben/common-ui';
-
-import {
-  ElButton,
-  ElCard,
-  ElMessage,
-  ElNotification,
-  ElSegmented,
-  ElSpace,
-  ElTable,
-} from 'element-plus';
-
-type NotificationType = 'error' | 'info' | 'success' | 'warning';
-
-function info() {
-  ElMessage.info('How many roads must a man walk down');
-}
-
-function error() {
-  ElMessage.error({
-    duration: 2500,
-    message: 'Once upon a time you dressed so fine',
-  });
-}
-
-function warning() {
-  ElMessage.warning('How many roads must a man walk down');
-}
-function success() {
-  ElMessage.success(
-    'Cause you walked hand in hand With another man in my place',
-  );
-}
-
-function notify(type: NotificationType) {
-  ElNotification({
-    duration: 2500,
-    message: '说点啥呢',
-    type,
-  });
-}
-const tableData = [
-  { prop1: '1', prop2: 'A' },
-  { prop1: '2', prop2: 'B' },
-  { prop1: '3', prop2: 'C' },
-  { prop1: '4', prop2: 'D' },
-  { prop1: '5', prop2: 'E' },
-  { prop1: '6', prop2: 'F' },
-];
-
-const segmentedValue = ref('Mon');
-
-const segmentedOptions = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'];
-</script>
-
-<template>
-  <Page
-    description="支持多语言,主题功能集成切换等"
-    title="Element Plus组件使用演示"
-  >
-    <div class="flex flex-wrap gap-5">
-      <ElCard class="mb-5 w-auto">
-        <template #header> 按钮 </template>
-        <ElSpace>
-          <ElButton text>Text</ElButton>
-          <ElButton>Default</ElButton>
-          <ElButton type="primary"> Primary </ElButton>
-          <ElButton type="info"> Info </ElButton>
-          <ElButton type="success"> Success </ElButton>
-          <ElButton type="warning"> Warning </ElButton>
-          <ElButton type="danger"> Error </ElButton>
-        </ElSpace>
-      </ElCard>
-      <ElCard class="mb-5 w-80">
-        <template #header> Message </template>
-        <ElSpace>
-          <ElButton type="info" @click="info"> 信息 </ElButton>
-          <ElButton type="danger" @click="error"> 错误 </ElButton>
-          <ElButton type="warning" @click="warning"> 警告 </ElButton>
-          <ElButton type="success" @click="success"> 成功 </ElButton>
-        </ElSpace>
-      </ElCard>
-      <ElCard class="mb-5 w-80">
-        <template #header> Notification </template>
-        <ElSpace>
-          <ElButton type="info" @click="notify('info')"> 信息 </ElButton>
-          <ElButton type="danger" @click="notify('error')"> 错误 </ElButton>
-          <ElButton type="warning" @click="notify('warning')"> 警告 </ElButton>
-          <ElButton type="success" @click="notify('success')"> 成功 </ElButton>
-        </ElSpace>
-      </ElCard>
-      <ElCard class="mb-5 w-auto">
-        <template #header> Segmented </template>
-        <ElSegmented
-          v-model="segmentedValue"
-          :options="segmentedOptions"
-          size="large"
-        />
-      </ElCard>
-      <ElCard class="mb-5 w-80">
-        <template #header> V-Loading </template>
-        <div class="flex size-72 items-center justify-center" v-loading="true">
-          一些演示的内容
-        </div>
-      </ElCard>
-      <ElCard class="mb-5 w-80">
-        <ElTable :data="tableData" stripe>
-          <ElTable.TableColumn label="测试列1" prop="prop1" />
-          <ElTable.TableColumn label="测试列2" prop="prop2" />
-        </ElTable>
-      </ElCard>
-    </div>
-  </Page>
-</template>

+ 0 - 181
apps/web-ele/src/views/demos/form/basic.vue

@@ -1,181 +0,0 @@
-<script lang="ts" setup>
-import { h } from 'vue';
-
-import { Page } from '@vben/common-ui';
-
-import { ElButton, ElCard, ElCheckbox, ElMessage } from 'element-plus';
-
-import { useVbenForm } from '#/adapter/form';
-import { getAllMenusApi } from '#/api';
-
-const [Form, formApi] = useVbenForm({
-  commonConfig: {
-    // 所有表单项
-    componentProps: {
-      class: 'w-full',
-    },
-  },
-  layout: 'horizontal',
-  // 大屏一行显示3个,中屏一行显示2个,小屏一行显示1个
-  wrapperClass: 'grid-cols-1 md:grid-cols-2 lg:grid-cols-3',
-  handleSubmit: (values) => {
-    ElMessage.success(`表单数据:${JSON.stringify(values)}`);
-  },
-  schema: [
-    {
-      // 组件需要在 #/adapter.ts内注册,并加上类型
-      component: 'ApiSelect',
-      // 对应组件的参数
-      componentProps: {
-        // 菜单接口转options格式
-        afterFetch: (data: { name: string; path: string }[]) => {
-          return data.map((item: any) => ({
-            label: item.name,
-            value: item.path,
-          }));
-        },
-        // 菜单接口
-        api: getAllMenusApi,
-      },
-      // 字段名
-      fieldName: 'api',
-      // 界面显示的label
-      label: 'ApiSelect',
-    },
-    {
-      component: 'ApiTreeSelect',
-      // 对应组件的参数
-      componentProps: {
-        // 菜单接口
-        api: getAllMenusApi,
-        childrenField: 'children',
-        // 菜单接口转options格式
-        labelField: 'name',
-        valueField: 'path',
-      },
-      // 字段名
-      fieldName: 'apiTree',
-      // 界面显示的label
-      label: 'ApiTreeSelect',
-    },
-    {
-      component: 'Input',
-      fieldName: 'string',
-      label: 'String',
-    },
-    {
-      component: 'InputNumber',
-      fieldName: 'number',
-      label: 'Number',
-    },
-    {
-      component: 'RadioGroup',
-      fieldName: 'radio',
-      label: 'Radio',
-      componentProps: {
-        options: [
-          { value: 'A', label: 'A' },
-          { value: 'B', label: 'B' },
-          { value: 'C', label: 'C' },
-          { value: 'D', label: 'D' },
-          { value: 'E', label: 'E' },
-        ],
-      },
-    },
-    {
-      component: 'RadioGroup',
-      fieldName: 'radioButton',
-      label: 'RadioButton',
-      componentProps: {
-        isButton: true,
-        options: ['A', 'B', 'C', 'D', 'E', 'F'].map((v) => ({
-          value: v,
-          label: `选项${v}`,
-        })),
-      },
-    },
-    {
-      component: 'CheckboxGroup',
-      fieldName: 'checkbox',
-      label: 'Checkbox',
-      componentProps: {
-        options: ['A', 'B', 'C'].map((v) => ({ value: v, label: `选项${v}` })),
-      },
-    },
-    {
-      component: 'CheckboxGroup',
-      fieldName: 'checkbox1',
-      label: 'Checkbox1',
-      renderComponentContent: () => {
-        return {
-          default: () => {
-            return ['A', 'B', 'C', 'D'].map((v) =>
-              h(ElCheckbox, { label: v, value: v }),
-            );
-          },
-        };
-      },
-    },
-    {
-      component: 'CheckboxGroup',
-      fieldName: 'checkbotton',
-      label: 'CheckBotton',
-      componentProps: {
-        isButton: true,
-        options: [
-          { value: 'A', label: '选项A' },
-          { value: 'B', label: '选项B' },
-          { value: 'C', label: '选项C' },
-        ],
-      },
-    },
-    {
-      component: 'DatePicker',
-      fieldName: 'date',
-      label: 'Date',
-    },
-    {
-      component: 'Select',
-      fieldName: 'select',
-      label: 'Select',
-      componentProps: {
-        filterable: true,
-        options: [
-          { value: 'A', label: '选项A' },
-          { value: 'B', label: '选项B' },
-          { value: 'C', label: '选项C' },
-        ],
-      },
-    },
-  ],
-});
-function setFormValues() {
-  formApi.setValues({
-    string: 'string',
-    number: 123,
-    radio: 'B',
-    radioButton: 'C',
-    checkbox: ['A', 'C'],
-    checkbotton: ['B', 'C'],
-    checkbox1: ['A', 'B'],
-    date: new Date(),
-    select: 'B',
-  });
-}
-</script>
-<template>
-  <Page
-    description="我们重新包装了CheckboxGroup、RadioGroup、Select,可以通过options属性传入选项属性数组以自动生成选项"
-    title="表单演示"
-  >
-    <ElCard>
-      <template #header>
-        <div class="flex items-center">
-          <span class="flex-auto">基础表单演示</span>
-          <ElButton type="primary" @click="setFormValues">设置表单值</ElButton>
-        </div>
-      </template>
-      <Form />
-    </ElCard>
-  </Page>
-</template>

+ 5 - 0
apps/web-ele/src/views/system-manage/data-dictionary/index.vue

@@ -0,0 +1,5 @@
+<script lang="ts" setup></script>
+
+<template>
+  <div class="p-2">data-dictionary</div>
+</template>

+ 5 - 0
apps/web-ele/src/views/system-manage/menu-manage/index.vue

@@ -0,0 +1,5 @@
+<script lang="ts" setup></script>
+
+<template>
+  <div class="p-2">menu-manage</div>
+</template>

+ 5 - 0
apps/web-ele/src/views/system-manage/operation-logs/index.vue

@@ -0,0 +1,5 @@
+<script lang="ts" setup></script>
+
+<template>
+  <div class="p-2">operation-logs</div>
+</template>

+ 5 - 0
apps/web-ele/src/views/system-manage/role-manage/index.vue

@@ -0,0 +1,5 @@
+<script lang="ts" setup></script>
+
+<template>
+  <div class="p-2">role-manage</div>
+</template>

+ 4 - 0
packages/utils/src/helpers/generate-routes-backend.ts

@@ -67,8 +67,12 @@ async function generateRoutesByBackend(
       normalizePageMap,
     );
 
+    // console.log('menuRoutes:', menuRoutes);
+    // console.log('processMenuRoutes:', processMenuRoutes);
+
     // 合并动态路由和后端路由
     const finalRoutes = [...dynamicRoutes, ...routes];
+    // console.log('finalRoutes:', finalRoutes);
 
     return finalRoutes;
   } catch (error) {