You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

258 lines
8.7 KiB

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<void>}
*/
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<void>}
*/
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;
}
}