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
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;
|
|
}
|
|
}
|