const menuServices = require('../../services/menus.js') function findeBelong(data, index) { let array = []; for (let i = data.length - 1; i >= 0; i--) { if (data[i].belongto == index) { const obj = { id: data[i].id, name: data[i].name, desc: data[i].about, children: [] } array.push(obj); data.splice(i, 1); } } return array; } function sortTree(arr, all) { let tree = (arr, all) => { for (let i = 0; i < arr.length; i++) { let item = findeBelong(all, arr[i].id); for (let j = 0; j < item.length; j++) { const obj = { id: item[j].id, name: item[j].name, desc: item[j].desc, children: [] } arr[i].children.push(obj); } tree(arr[i].children, all) } } tree(arr, all) } module.exports = { /** * 获取所有的菜单 * @param ctx * @param next * @returns {Promise} */ async getAll(ctx, next) { let result = { success: false, message: '', data: null } let getResult = await menuServices.getAllMenus(); if (getResult && Array.isArray(getResult)) { let menus = JSON.parse(JSON.stringify(getResult)); let fa = findeBelong(menus, '0'); sortTree(fa, menus); if (menus.length > 0) { result.success = false; result.message = '菜单不完整'; ctx.body = result return } else { result.success = true; result.message = 'success'; result.data = fa; } } else{ result.success = false; result.message = 'fail'; ctx.body = result return ; } //menus有长度表示还有菜单没消耗完 ctx.body = result }, /** * 创建菜单 * @param ctx * @param next * @returns {Promise} */ async createOne(ctx, next) { let result = { success: false, message: '', data: null } let formData = ctx.request.body; //验证参数的必需 let menuResult = await menuServices.validatorNeed(formData, [ {key: 'name', error: '标题不能为空', validate: (data) => data == undefined}, {key: 'belongto', error: '没有所属ID', validate: (data) => data == undefined} ]); if (!menuResult.success) { result.success = false; result.message = menuResult.message; ctx.body = result; return; } else { // 验证所属ID是数据库中的 if (Number(formData.belongto) > 0) { let allMenus = await menuServices.getAllMenus(); let allID = allMenus.map(v => v.id); if (allID.indexOf(formData.belongto) == -1) { result.success = false; result.message = '没有该菜单'; ctx.body = result; return; } } let createResult = await menuServices.createMenu(formData); if (createResult && createResult.insertId * 1 > 0) { result.success = true; result.message = '创建成功'; } else { result.success = true; result.message = '系统错误'; ctx.body = result; return; } } ctx.body = result; }, /** * * 修改菜单 */ async updateOne(ctx, next) { let result = { success: false, message: '', data: null } let formData = ctx.request.body; //验证参数的必需 let menuResult = await menuServices.validatorNeed(formData, [ {key: 'id', error: 'id不能为空', validate: (data) => data == undefined}, { key: 'id', error: '没有这个菜单', validate: async (data) => { let allMenus = await menuServices.getAllMenus(); let allID = allMenus.map(v => v.id); if (allID.indexOf(formData.id) == -1) { return true; } return false; } }, {key: 'belongto', error: '没有父类', validate: (data) => data == undefined || data < 0}, { key: 'belongto', error: '没有父ID', validate: async (data) => { if (data == 0) { return false; } let allMenus = await menuServices.getAllMenus(); let allID = allMenus.map(v => v.id); if (allID.indexOf(formData.belongto) == -1) { return true; } return false; } }, {key: 'id', error: 'ID不能与父ID相同', validate: (data) => formData.id == formData.belongto} ]); if (!menuResult.success) { result.success = false; result.message = menuResult.message; ctx.body = result; return; } else { let updateResult = await menuServices.updateMenu(formData); if (updateResult) { result.success = true; result.message = 'success'; } else { result.success = false; result.message = 'fail'; } } ctx.body = result; }, /** * 删除菜单 */ async deleteOne(ctx, next) { let result = { success: false, message: '', data: null } let formData = ctx.request.body; //验证参数的必需 let menuResult = await menuServices.validatorNeed(formData, [ {key: 'id', error: 'id不能为空', validate: (data) => data == undefined}, { key: 'id', error: '没有这个菜单', validate: async (data) => { let allMenus = await menuServices.getAllMenus(); let allID = allMenus.map(v => v.id); if (allID.indexOf(formData.id) == -1) { return true; } return false; } }, { key: 'id', error: '这个菜单存在子菜单,替换ID出错', validate: async (data) => { let judgeResult = await menuServices.judgeID(data); if (formData.fix==0){ return false; } if(judgeResult&&!formData.fix){ return true }else if(judgeResult&&formData.fix){ //替换ID不能跟要删除的ID相同 if (formData.fix==formData.id){ return '替换ID不能跟要删除的ID相同'; } // 替换ID不能跟需要修改的ID相同 let uID = judgeResult.map(v => v.id); if (uID.indexOf(formData.fix) != -1) { return '替换ID不能跟需要修改的ID相同'; } // 替换ID必须存在与菜单中 let allMenus = await menuServices.getAllMenus(); let allID = allMenus.map(v => v.id); if (allID.indexOf(formData.fix) == -1) { return '替换ID必须存在与菜单中'; }else { return false; } }else { return false } } }, ]); if (!menuResult.success) { result.success = false; result.message = menuResult.message; ctx.body = result; return; } else { let judgeResult = await menuServices.judgeID(formData.id); let deleteResult = await menuServices.deleteMenu(formData,judgeResult,formData.fix); if (deleteResult){ //删除成功 result.success = true; result.message = 'success'; } else { result.success = false; result.message = 'fail'; } } ctx.body = result; } }