Explorar el Código

1、处理租户管理菜单列表优化
2、处理租户管理按钮展示优化

yys hace 1 día
padre
commit
48c24f11bd

+ 17 - 13
src/views/admin/sysCompany/index.vue

@@ -244,7 +244,7 @@
       </div>
     </el-dialog>
 
-    <!-- ===== 菜单编辑弹窗 ===== -->
+    <!-- ===== 菜单编辑弹窗(租户列表:管理端菜单 / 销售菜单) ===== -->
     <el-dialog :title="menuDialog.title" :visible.sync="menuDialog.visible" width="560px" append-to-body destroy-on-close @opened="onMenuDialogOpened">
       <div v-loading="menuDialog.loading" class="menu-tree-scroll">
         <div v-if="menuDialog.treeReady && menuDialog.treeData.length" class="menu-tree-toolbar">
@@ -256,14 +256,17 @@
           ref="menuTree"
           :data="menuDialog.treeData"
           show-checkbox
-          node-key="id"
+          node-key="menuId"
           :props="menuTreeProps"
           :expand-on-click-node="false"
         >
           <span slot-scope="{ data }" class="custom-tree-node">
-            <span>{{ data.label }}</span>
-            <el-tag v-if="data.visible === '0'" type="success" size="mini" style="margin-left:8px">显示</el-tag>
-            <el-tag v-else type="info" size="mini" style="margin-left:8px">隐藏</el-tag>
+            <span>{{ data.menuName }}</span>
+            <el-tag v-if="data.menuType === 'M'" size="mini" style="margin-left:6px">目录</el-tag>
+            <el-tag v-else-if="data.menuType === 'C'" type="success" size="mini" style="margin-left:6px">菜单</el-tag>
+            <el-tag v-else-if="data.menuType === 'F'" type="warning" size="mini" style="margin-left:6px">按钮</el-tag>
+            <el-tag v-if="data.visible === '0'" type="success" size="mini" style="margin-left:6px">已分配</el-tag>
+            <el-tag v-else type="info" size="mini" style="margin-left:6px">未分配</el-tag>
           </span>
         </el-tree>
         <el-empty v-if="!menuDialog.loading && menuDialog.treeReady && !menuDialog.treeData.length" description="暂无菜单数据" />
@@ -379,7 +382,7 @@ export default {
         operateType: [{ required: true, message: '请选择操作类型', trigger: 'change' }],
         amount: [{ required: true, message: '请输入金额', trigger: 'blur' }]
       },
-      menuTreeProps: { label: 'label', children: 'children' },
+      menuTreeProps: { label: 'menuName', children: 'children' },
       // 菜单编辑弹窗
       menuDialog: {
         visible: false,
@@ -592,7 +595,7 @@ export default {
       const ids = []
       const walk = (list) => {
         (list || []).forEach(n => {
-          if (n.visible === '0') ids.push(n.id)
+          if (n.visible === '0') ids.push(n.menuId)
           if (n.children && n.children.length) walk(n.children)
         })
       }
@@ -618,7 +621,7 @@ export default {
       const tree = this.$refs.menuTree
       if (!tree) return
       this.walkMenuTreeNodes(this.menuDialog.treeData, n => {
-        const node = tree.getNode(n.id)
+        const node = tree.getNode(n.menuId)
         if (node) node.expanded = true
       })
     },
@@ -626,7 +629,7 @@ export default {
       const tree = this.$refs.menuTree
       if (!tree) return
       this.walkMenuTreeNodes(this.menuDialog.treeData, n => {
-        const node = tree.getNode(n.id)
+        const node = tree.getNode(n.menuId)
         if (node) node.expanded = false
       })
     },
@@ -645,12 +648,13 @@ export default {
         if (res.code !== 200) {
           return Promise.reject(new Error(res.msg || '加载菜单失败'))
         }
-        const menus = res.menus || []
-        // 延迟挂载树,先出弹窗再渲染,默认全部收起
-        d.treeData = menus
+        const flat = res.menus || []
+        // 与模板维护页相同:扁平数据 + handleTree(menuId) 建树,保证层级一致
+        const tree = this.handleTree(flat, 'menuId')
+        d.treeData = tree
         requestAnimationFrame(() => {
           d.treeReady = true
-          this.$nextTick(() => this.applyMenuTreeChecked(menus))
+          this.$nextTick(() => this.applyMenuTreeChecked(tree))
         })
       }).catch(err => {
         this.$message.error(err.message || '加载菜单失败')

+ 6 - 0
src/views/admin/tenantCompany/index.vue

@@ -58,6 +58,12 @@
       :tree-props="{children: 'children', hasChildren: 'hasChildren'}"
     >
       <el-table-column prop="menuName" label="菜单名称" :show-overflow-tooltip="true" width="160"></el-table-column>
+      <el-table-column prop="menuType" label="类型" width="72" align="center">
+        <template slot-scope="scope">
+          <el-tag v-if="scope.row.menuType === 'M'" size="mini">目录</el-tag>
+          <el-tag v-else-if="scope.row.menuType === 'C'" type="success" size="mini">菜单</el-tag>
+        </template>
+      </el-table-column>
       <el-table-column prop="icon" label="图标" align="center" width="100">
         <template slot-scope="scope">
           <svg-icon :icon-class="scope.row.icon" />

+ 6 - 0
src/views/admin/tenantMenu/index.vue

@@ -58,6 +58,12 @@
       :tree-props="{children: 'children', hasChildren: 'hasChildren'}"
     >
       <el-table-column prop="menuName" label="菜单名称" :show-overflow-tooltip="true" width="160"></el-table-column>
+      <el-table-column prop="menuType" label="类型" width="72" align="center">
+        <template slot-scope="scope">
+          <el-tag v-if="scope.row.menuType === 'M'" size="mini">目录</el-tag>
+          <el-tag v-else-if="scope.row.menuType === 'C'" type="success" size="mini">菜单</el-tag>
+        </template>
+      </el-table-column>
       <el-table-column prop="icon" label="图标" align="center" width="100">
         <template slot-scope="scope">
           <svg-icon :icon-class="scope.row.icon" />

+ 6 - 1
src/views/saas/tenantCompany/index.vue

@@ -58,6 +58,12 @@
       :tree-props="{children: 'children', hasChildren: 'hasChildren'}"
     >
       <el-table-column prop="menuName" label="菜单名称" :show-overflow-tooltip="true" width="160"></el-table-column>
+      <el-table-column prop="menuType" label="类型" width="72" align="center">
+        <template slot-scope="scope">
+          <el-tag v-if="scope.row.menuType === 'M'" size="mini">目录</el-tag>
+          <el-tag v-else-if="scope.row.menuType === 'C'" type="success" size="mini">菜单</el-tag>
+        </template>
+      </el-table-column>
       <el-table-column prop="icon" label="图标" align="center" width="100">
         <template slot-scope="scope">
           <svg-icon :icon-class="scope.row.icon" />
@@ -340,7 +346,6 @@ export default {
     selected(name) {
       this.form.icon = name;
     },
-    /** 查询菜单列表 */
     getList() {
       this.loading = true;
       tenantComMenu(this.queryParams).then(response => {

+ 6 - 1
src/views/saas/tenantMenu/index.vue

@@ -58,6 +58,12 @@
       :tree-props="{children: 'children', hasChildren: 'hasChildren'}"
     >
       <el-table-column prop="menuName" label="菜单名称" :show-overflow-tooltip="true" width="160"></el-table-column>
+      <el-table-column prop="menuType" label="类型" width="72" align="center">
+        <template slot-scope="scope">
+          <el-tag v-if="scope.row.menuType === 'M'" size="mini">目录</el-tag>
+          <el-tag v-else-if="scope.row.menuType === 'C'" type="success" size="mini">菜单</el-tag>
+        </template>
+      </el-table-column>
       <el-table-column prop="icon" label="图标" align="center" width="100">
         <template slot-scope="scope">
           <svg-icon :icon-class="scope.row.icon" />
@@ -340,7 +346,6 @@ export default {
     selected(name) {
       this.form.icon = name;
     },
-    /** 查询菜单列表 */
     getList() {
       this.loading = true;
       tenantMenu(this.queryParams).then(response => {