wu
2024-07-18 68ee8235c8cd659fba5e59e3d924d5ea093504ab
UI-Project/src/views/User/rolelist.vue
@@ -13,7 +13,7 @@
// import { ref } from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus'
//  import LanguageMixin from './lang/LanguageMixin'
const selectedProjectNoa = ref(''); // 当前选中的角色
const selectedProjectNoa = ref(null); // 当前选中的角色
// const options = ref<any[]>([]); // 下拉选项列表  
  const name = ref('');
const tableData = ref([])
@@ -57,20 +57,28 @@
const getTableRow = async () => {
  try {  
    let menuList = [];
     let parentIdMap = {}; // 用于存储已经添加的父项
    selectedOptions.value.forEach(array => {
      if (array.length >= 2) {
        let id = array[0];
        let parentId = array[1];
        // 如果id还未作为父项添加,则添加它
        if (!parentIdMap[id]) {
        menuList.push({  
          id: id,  
          parentId: 0,
          children: [
        {
          id: parentId,
          parentId: id,
        }
      ],
            parentId: 0, // 通常,顶级项的parentId可能是null或特定的根ID,这里设为0可能是个特殊用途
            children: []
        });  
          parentIdMap[id] = menuList[menuList.length - 1]; // 更新映射
        }
        // 向对应的父项添加子项
        if (!parentIdMap[id].children.some(child => child.id === parentId)) {
          // 检查是否已存在相同的子项(基于id),避免重复添加
          parentIdMap[id].children.push({
            id: parentId,
            parentId: id
          });
        }
      }  
    });
    const dataToSend = {  
@@ -91,64 +99,124 @@
    console.error(error);
  }
};
// 处理编辑按钮点击
function handleEdit(row) {  
  name.value = row.name; 
  selectedOptions.value = row.selectedOptions
//  options.value = res.data.tree
 adda.value = true; // 显示对话框
  window.localStorage.setItem('id', row.id)
  adda.value = true;
  window.localStorage.setItem('ids', row.id);
  const parentIdMap = {};
  const menuItemsById = {}; // 快速查找菜单项
  let topLevelItems = []; // 存储顶级菜单项
  row.menuList.forEach(item => {
    const parentId = item.parentId === 0 ? null : item.parentId;
    const menuItem = {
      id: item.id,
      parentId: parentId,
      menuName: item.menuName,
      children: []
    };
    menuItemsById[item.id] = menuItem;
    // 初始化或更新parentIdMap中的数组
    if (!parentIdMap[parentId]) {
      parentIdMap[parentId] = [];
    }
    if (parentId === null) {
      // 顶级菜单项直接添加到topLevelItems
      topLevelItems.push(menuItem);
    } else {
      // 非顶级菜单项添加到parentIdMap中
      parentIdMap[parentId].push(menuItem);
    }
  });
  for (const parentId in parentIdMap) {
    if (parentId !== 'null') { // 跳过顶级菜单项
      parentIdMap[parentId].forEach(child => {
        // 查找父项并添加子项
        if (menuItemsById[parentId]) {
          menuItemsById[parentId].children.push(child);
        }
      });
    }
  }
  if (selectedOptions.value !== topLevelItems) {
    selectedOptions.value = topLevelItems;
  }
  console.log(topLevelItems);
  // selectedOptions.value = topLevelItems;
const topLevelItemsWithChildren = topLevelItems; // 包含顶级菜单项及其子菜单项的数组  
 let selectedPath = [];
// 循环遍历 topLevelItemsWithChildren 数组
for (let i = 0; i < topLevelItemsWithChildren.length; i++) {
 // 添加顶级菜单项的 id
 selectedPath.push(topLevelItemsWithChildren[i].id);
 // 如果有子菜单项,添加第一个子菜单项的 id
 if (topLevelItemsWithChildren[i].children && topLevelItemsWithChildren[i].children.length > 0) {
  for (let j = 0; j < topLevelItemsWithChildren[i].children.length; j++) {
            // 将每个子菜单项的 id 添加到 selectedPath 中
            selectedPath.push(topLevelItemsWithChildren[i].children[j].id);
        }
    }
}
 console.log(selectedPath);
selectedOptions.value = selectedPath;
}
// 编辑
const getTableRowa = async () => {
  let id = window.localStorage.getItem('id')
  let ids = window.localStorage.getItem('ids')
  try {  
    let menuList = [];
     let parentIdMap = {}; // 用于存储已经添加的父项
    selectedOptions.value.forEach(array => {
      if (array.length >= 2) {
        let id = array[0];
        let parentId = array[1];
        // 如果id还未作为父项添加,则添加它
        if (!parentIdMap[id]) {
        menuList.push({  
          id: id,  
          parentId: 0,
          children: [
        {
          id: parentId,
          parentId: id,
        }
      ],
            parentId: 0, // 通常,顶级项的parentId可能是null或特定的根ID,这里设为0可能是个特殊用途
            children: []
        });  
          parentIdMap[id] = menuList[menuList.length - 1]; // 更新映射
        }
        // 向对应的父项添加子项
        if (!parentIdMap[id].children.some(child => child.id === parentId)) {
          // 检查是否已存在相同的子项(基于id),避免重复添加
          parentIdMap[id].children.push({
            id: parentId,
            parentId: id
          });
        }
      }  
    });
    const dataToSend = {  
      id:id,
      id:ids,
      name: name.value,
      menuList: menuList
    };  
    const response = await request.post('/loadGlass/sys/role/updateRole', dataToSend);
  // try {
  //   const response = await request.post('/loadGlass/sys/role/updateRole', {
  //     id: id,
  //     name: name.value,
  //   });
    if (response.code == 200) {
      // 绑定成功,处理逻辑
      ElMessage.success(response.message);
      adda.value = false;
      name.value = '';
       selectedOptions.value = '';
      fetchOptionsa()
      tableData.value = response.data;
      fetchOptionsa();
    } else {
      // 请求失败,显示错误消息
      ElMessage.error(response.message);
    }
  } catch (error) {
    // 处理错误
    console.error(error);
  }
};
function closeDialog(row) {
     add.value = false;
      name.value = '';
      selectedOptions.value = '';
}
function closeDialoga(row) {
     adda.value = false;
      name.value = '';
      selectedOptions.value = '';
}
// 删除 
 const opena = async(row) => {  
  try {
@@ -244,7 +312,7 @@
        <el-button type="primary" @click="getTableRow">
          {{ $t('delivery.sure') }}
        </el-button>
        <el-button @click="add = false"> {{ $t('delivery.cancel') }}</el-button>
        <el-button @click="closeDialog"> {{ $t('delivery.cancel') }}</el-button>
      </div>
    </template>
  </el-dialog> 
@@ -284,7 +352,7 @@
        <el-button type="primary" @click="getTableRowa">
          {{ $t('delivery.sure') }}
        </el-button>
        <el-button @click="adda = false">{{ $t('delivery.cancel') }}</el-button>
        <el-button @click="closeDialoga">{{ $t('delivery.cancel') }}</el-button>
      </div>
    </template>
  </el-dialog>