栏目节点管理

@using FM.Core.Entities;
@{

}
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>栏目管理</title>
<link href="/Content/css/default.css" rel="stylesheet" />
<script src="/Content/js/jquery-1.7.1.min.js"></script>
<script src="/Content/js/common.js"></script>
<link href="/Content/ManageMain/js/themes/default/easyui.css" rel="stylesheet" />
<script src="/Content/ManageMain/js/jquery.easyui.min.js"></script>
<script type="text/JavaScript">
function openChannel(id) {
var objsArray = $("[id^=tr_" + id + "_]");
var isok = true;
for (var i = 0; i < objsArray.length; i++) {
var displayStr = $("[id^=tr_" + id + "_]:eq(" + i + ")").css("display");
if (displayStr == "" || displayStr == "none") {
isok = true;
}
else {
isok = false;
}
}
if (isok) {
$("[id^=tr_" + id + "_]").show();
}
else {
$("[id^=tr_" + id + "_]").hide();
}
}
var i = 0
function Dis(cla, pid, curent, count) {
var o = $("#hid_" + cla);
if (o.val() == "0") {
$("." + cla).show();
o.val("1")
} else {
for (var h = parseInt(curent + 1); h <= parseInt(curent + 1 + count); h++) {
$("#tr_" + pid + " tr:eq(" + h + ")").hide();
$("#tr_" + pid + " input[type=hidden]:eq(" + h + ")").val("0");
}
o.val("0")
}
}
function showNav(n) {
var Ul = document.getElementById("tr_" + n);
if (Ul.style.display == "none") {
Ul.style.display = "";
document.getElementById("img_" + n).src = "/Content/images/menu/minus.gif";
}
else {
Ul.style.display = "none";
document.getElementById("img_" + n).src = "/Content/images/menu/plus.gif";
}

}
$(function () {
$("table[name=tab] tr").hover(function () {
$(this).addClass("hover");
}, function () {
$(this).removeClass("hover");
})
});
</script>
<style type="text/css">
.hover
{
background-color: #E1EEFE;
}
table
{
border: 0;
}
input, select
{
padding: 2px;
}
input.btn
{
padding: 2px 15px;
cursor: pointer;
}
#tabList
{
100%;
background-color: #AFC9EA;
border: 1px solid #AFC9EA;
}
table, table td, table th
{
border-collapse: collapse;
}
#tabList tr
{
background-color: White;
}
#tabList td
{
30px;
font-size: 12px;
height: 25px;
font-weight: bold;
vertical-align: middle;
}
.title_tab td
{
border: 1px solid #99bbe8;
padding: 0 6px;
}
</style>
</head>
<body>
<form id="form1">
<table align="center" cellspacing="0" cellpadding="4" width="100%" border="0" style="margin: 10px;">
<tr>
<td style="text-align: left; padding: 0px 5px 0px 5px;">
<fieldset style="border: solid 1px #AFC9EA; margin-right: 20px; padding: 10px;">
<legend>温馨提示</legend>
<table cellspacing="0" cellpadding="2" width="100%" border="0">
<tr>
<td style="padding-left: 15px;">
<img src="/Content/images/menu/plus.gif" />表示该栏目下有子栏目,点击展开或收起子栏目!
</td>
</tr>
<tr>
<td style="height: 5px;">
</td>
</tr>
</table>
</fieldset>
</td>
</tr>
<tr>
<td height="5">
</td>
</tr>
<tr>
<td>
<fieldset style="border: solid 1px #AFC9EA; margin-right: 20px; padding: 10px;">
<table class="tabborder" cellspacing="1" cellpadding="4" width="100%" align="center"
border="0">
<tr bgcolor="#E1EEFE">
<td width="80" align="center">
<strong>选择</strong>
</td>
<td width="100" align="center">
<strong>编号</strong>
</td>
<td align="center">
<strong>栏目名称</strong>
</td>
<td width="100" align="center">
<a href="../Navigation/NavigationEdit"><strong>操 作</strong></a>
</td>
</tr>
</table>
@{
foreach (var item in ViewBag.lt as List<NavigationView>)
{
int zz = 0;
<table name="tab" class="tabborder" cellspacing="1" cellpadding="4" width="100%"
align="center" border="0">
<tr>
<td width="80" align="center">
<input type="checkbox" id="ckb-@item.NavigationId" onclick="CheckAll(this)" style="border-0px;" value='@item.NavigationId'>
</td>
<td width="100" align="left">
&nbsp;&nbsp;@item.NavigationId
</td>
<td>
&nbsp;&nbsp;
@{if (item.NavigationList.Count > 0)
{
<img id="img_@(item.NavigationId)" src="/Content/images/menu/plus.gif" style="cursor:pointer;" border="0" align="absmiddle" onclick="showNav('@item.NavigationId')" />
}
else
{
<img id="img_@(item.NavigationId)" src="/Content/images/menu/minus.gif" style="cursor:pointer;" border="0" align="absmiddle" />
}
}
<a style="font-weight:bold;" href="/Navigation/NavigationEdit?id=@item.NavigationId">@item.NavigationName</a>
</td>
<td width="100" align="center">
<a href="/Navigation/NavigationEdit?pid=@item.NavigationId">@(item.IsAddChild == 0 ? "" : "添加子栏目")</a>
</td>
</tr>
</table>
<table name="tab" id="tr_@(item.NavigationId)" class="title_tab" width="100%" align="center" border="0" style="display:none;">
@foreach (var it in item.NavigationList)
{
zz++;
<tr class="@it.PId" onclick="Dis(@it.NavigationId,@item.NavigationId,@(zz - 1),@it.Count-1)">
<td width="80" align="center">
<input id="hid_@(it.NavigationId)" type="hidden" value="1" />
<input type="checkbox" onclick="checkCh(this)" name="chkchi-@item.NavigationId" id="ckbchi#@it.NavigationId" style="border-0px;" value='@it.NavigationId'/>
</td>
<td width="100" align="left">
</td>
<td>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="/Navigation/NavigationEdit?id=@it.NavigationId">@it.NavigationName</a>
</td>
<td width="100" align="center">
<a href="/Navigation/NavigationEdit?pid=@it.NavigationId">@(it.IsAddChild == 0 ? "" : "添加子栏目")</a>
</td>
</tr>

}
</table>
}
}
<table class="tabborder" cellspacing="1" cellpadding="4" width="100%" align="center"
border="0" style="margin-top: 5px;">
<tr bgcolor="#ffffff">
<td height="30" style="padding-left: 10px;">
<input id="hdIDList" type="hidden" name="hdIDList">
@*<input type="button" value="添加根栏目" onclick="AddPart()" />&nbsp;&nbsp;*@
<input type="button" value="删 除" onclick="DeletePart()" />
</td>
</tr>
</table>
</fieldset>
</td>
</tr>
</table>
</form>
</body>
</html>
<script type="text/javascript">
function AddPart() {
location.href = "../Navigation/NavigationEdit";
}
function DeletePart() {
if (!confirm("确定删除吗?")) { return false; }
var ids = "";
var chs = document.getElementsByTagName("input");
for (var i = 0; i < chs.length; i++) {
if (chs[i].checked) {
ids += chs[i].value + ",";
}
}
ids = ids.substring(0, ids.length - 1)
if (ids == "") {
alert("请先选中要删除的栏目!"); return false;
}
location.href = '../Navigation/DeletePart?ids=' + ids;
}
function CheckAll(obj) {
$("input[name=chkchi-" + obj.value + "]").attr("checked", obj.checked);
}
function checkCh(obj) {
var pid = obj.name.replace("chkchi-", "");
var reuslt = false;
var checksChi = $("input[name=" + obj.name + "]");
for (var i = 0; i < checksChi.length; i++) {
if (!checksChi[i].checked) {
reuslt = false;
}
}
if (!reuslt) {
$("input[id=ckb-" + pid + "]").attr("checked", false);
}

}
</script>

using FM.Core.Entities;
using FM.Core.Services;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.Mvc;

namespace FM.Management.Controllers
{
public class NavigationController : Controller
{
//
// GET: /Navigation/

/// <summary>
/// 成功删除节点个数
/// </summary>
int P_count = 0;
private readonly INavigationService _inavigationService;
//
// GET: /Navigation/
public NavigationController(INavigationService inavigationService)
{
_inavigationService = inavigationService;
}

public ActionResult Index()
{
return View();
}

/// <summary>
/// 删除节点
/// </summary>
/// <param name="ids"></param>
public void DeletePart(string ids)
{
if (!string.IsNullOrWhiteSpace(ids))
{
string unDeles = GetWebNids("UnDelete");

string[] idm = ids.Split(new char[] { ',' });
foreach (var id in idm)
{
int intId = ToInt(id);
if (unDeles.IndexOf(intId.ToString()) == -1)
{
//获得当前节点的实体数据
Navigation naData = _inavigationService.GetNaviagtionById(intId);
if (naData != null)
{
//删除当前节点及其子节点
DeleteChild(intId);
//判断是否有父节点,修改父节点的子节点数量
if (naData.PId != 0)
SetPCount(naData.PId, -P_count);
//如果当前节点删除失败,但删除子节点成功,则修改当前节点数
SetPCount(naData.NavigationId, -P_count);
}
}
else
{
Response.Write("<script>alert('系统内置栏目不允许删除!');location.href='../Navigation/NavigationList'</script>");
return;
}
}
}
if (P_count > 0)
Response.Write("<script>alert('操作成功!');location.href='../Navigation/NavigationList'</script>");
else
Response.Write("<script>alert('操作失败!该栏目下面存在未删除资源!');location.href='../Navigation/NavigationList'</script>");
}

/// <summary>
/// 删除节点及其子节点
/// </summary>
/// <param name="pid"></param>
public void DeleteChild(int id)
{
//获得子节点数据
List<Navigation> list = _inavigationService.GetNaviagtionListByPid(id);
foreach (var item in list)
{
string unDeles = GetWebNids("UnDelete");
if (unDeles.IndexOf(item.NavigationId.ToString()) == -1)
//递归
DeleteChild(item.NavigationId);
else
Response.Write("<script>alert('系统内置栏目不允许删除!');location.href='../Navigation/NavigationList'</script>");
}
if (_inavigationService.DeleteNavigationById(id))
P_count++;
}

/// <summary>
/// 修改父节点的节点数量
/// </summary>
/// <param name="id"></param>
public void SetPCount(int id, int count)
{
Navigation naData = _inavigationService.GetNaviagtionById(id);
if (naData != null)
{
if (naData.PId != 0)
SetPCount(naData.PId, count);
_inavigationService.UpdateCount(naData.NavigationId, count);
}
}
/// <summary>
/// 修改父节点的深度
/// </summary>
/// <param name="id"></param>
public void SetPDepth(int id, int depth)
{
Navigation naData = _inavigationService.GetNaviagtionById(id);
if (naData != null)
{
if (naData.PId != 0)
SetPDepth(naData.PId, naData.Depth);
_inavigationService.UpdateDepth(naData.NavigationId, depth - 1);
}
}

/// <summary>
/// 修改子节点的深度
/// </summary>
/// <param name="id"></param>
/// <param name="depth">当前节点的深度</param>
public void UpdataChildDepth(int id, int depth)
{
List<Navigation> list = _inavigationService.GetNaviagtionListByPid(id);
foreach (var item in list)
{
UpdataChildDepth(item.NavigationId, depth + 1);
}
_inavigationService.UpdateDepth(id, depth);
}

#region 通用方法

/// <summary>
/// 获得配置文件的对应节点的值
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public int GetWebNid(string key)
{
string nid = FM.Core.Utility.ConfigHelper.Instance.GetAppSetting(key);
return Convert.ToInt32(nid);
}
/// <summary>
/// 获得配置文件的对应节点的值
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public string GetWebNids(string key)
{
return FM.Core.Utility.ConfigHelper.Instance.GetAppSetting(key);
}
public int RequestForm(string param, int defVaule)
{
if (Request.Form[param] != null)
return ToInt(Request.Form[param].ToString());
return defVaule;
}

public string RequestForm(string param, string defVaule)
{
if (Request.Form[param] != null)
return Request.Form[param].ToString();
return defVaule;
}

public static int ToInt(object obj)
{
int i = 0;
try { i = Convert.ToInt32(obj); }
catch { ;}
return i;
}
#endregion

/// <summary>
/// 提交
/// </summary>
public void NavigationSubmit()
{
string rId = RequestForm("id", "");
string rPid = RequestForm("Pid", "");
bool result = false;
var na = new Navigation();
// na.URL = RequestForm("iptURL", "");
na.PartModel = RequestForm("PartModel", 1);
//修改
if (!string.IsNullOrWhiteSpace(rId))
{
na.NavigationId = Convert.ToInt32(rId);
SetUrl(na);
na = _inavigationService.GetNaviagtionById(na.NavigationId);
SetData(na);
na.URL = na.URL;
na.PartModel = na.PartModel;
Navigation pNa = _inavigationService.GetNaviagtionById(ToInt(rPid));
//修改原父节点的子节点数
SetPCount(na.PId, -na.Count - 1);
//修改新父节点的子节点数
if (pNa != null)
{
SetPCount(ToInt(rPid), na.Count + 1);
na.PId = ToInt(rPid);
na.Depth = pNa.Depth + 1;
//if (!string.IsNullOrWhiteSpace(pNa.URL))
//{
// if (pNa.URL.IndexOf("?") > -1)
// {
// pNa.URL = pNa.URL.Substring(0, pNa.URL.IndexOf("?"));
// na.URL = pNa.URL + "?nId=" + na.NavigationId;
// }
// else
// {
// na.URL = pNa.URL + "?nId=" + na.NavigationId;
// }
//}
}
else
{
na.PId = 0;
na.Depth = 0;
}
result = _inavigationService.UpdateNavigation(na);
UpdataChildDepth(na.NavigationId, na.Depth);
}
//新增
else
{
na.Depth = 0;
na.Count = 0;
SetData(na);
//新增子栏目
if (!string.IsNullOrWhiteSpace(rPid))
{
na.PId = Convert.ToInt32(rPid);
var pNa = new Navigation();
//获得父节点的数据
pNa = _inavigationService.GetNaviagtionById(na.PId);
if (pNa != null)
{
SetPCount(pNa.NavigationId, 1);
na.Depth = pNa.Depth + 1;

// if (!string.IsNullOrWhiteSpace(pNa.URL))
// {
// if (pNa.URL.IndexOf("?") > -1)
// {
// pNa.URL = pNa.URL.Substring(0, pNa.URL.IndexOf("?"));
// na.URL = pNa.URL + "?nId=" + maxId;
// }
// else
// {
// na.URL = pNa.URL + "?nId=" + maxId;
// }
// }
}
}
int maxId = _inavigationService.GetMaxNavigationId();
na.NavigationId = maxId + 1;
SetUrl(na);
result = _inavigationService.InsertNavigation(na);
}
if (result)
Response.Write("<script>alert('操作成功!');location.href='../Navigation/NavigationList'</script>");
else
Response.Write("<script>alert('操作失败!');location.href='../Navigation/NavigationList'</script>");
}

public void SetData(Navigation na)
{
na.NavigationName = RequestForm("iptName", "");
na.Icon = RequestForm("iptIcon", "");
na.OrderId = RequestForm("iptOrderId", 0);
na.Visible = RequestForm("iptVisble", 0);
na.IsSing = RequestForm("iptchkSing", 1);

na.EnglishName = RequestForm("iptEnglishName", "");
}

public void SetUrl(Navigation na)
{
//资讯模型
if (na.PartModel == 1)
{
na.URL = "/News/NewsList?nId=" + na.NavigationId;
}
//视频模型
else if (na.PartModel == 2)
{
na.URL = "/News/VideoList?nId=" + na.NavigationId;
}
//图片模型
else if (na.PartModel == 3)
{
na.URL = "/News/ImgList?nId=" + na.NavigationId;
}
//资讯模型2
else if (na.PartModel == 4)
{
na.URL = "/News/NewsEditTwo?nId=" + na.NavigationId;
}
else
{
na.URL = "/News/NewsList?nId=" + na.NavigationId;
}
}


/// <summary>
/// 单页面
/// </summary>
/// <returns></returns>
public ActionResult NavigationEdit()
{
List<Navigation> listN = new List<Navigation>();
ViewBag.Pid = Request.QueryString["pid"];
List<Navigation> list = _inavigationService.GetNaviagtionList();
var navigation = new Navigation();
//修改
if (Request.QueryString["id"] != null)
{
int id = Convert.ToInt32(Request.QueryString["id"]);
ViewBag.id = id;
navigation = _inavigationService.GetNaviagtionById(id);
ViewBag.Pid = navigation.PId;
RemoveChild(id);
foreach (var it in listInt)
{
list = list.Where(n => n.NavigationId != it).ToList();
}
}
ViewBag.list = list.OrderBy(a => a.Depth).ToList();
ViewBag.Navigation = navigation;
ViewBag.ActionUrl = "../Navigation/NavigationSubmit";
return View();
}
List<int> listInt = new List<int>();
public void RemoveChild(int pId)
{
var list = _inavigationService.GetNaviagtionListByPid(pId);
foreach (var item in list)
{
listInt.Add(item.NavigationId);
RemoveChild(item.NavigationId);
}
}

int nType;
List<Navigation> listAll = new List<Navigation>();
public ActionResult NavigationList()
{
List<NavigationView> listView = new List<NavigationView>();
List<Navigation> list = _inavigationService.GetNaviagtionListByPid(0);
foreach (var item in list)
{
listAll = new List<Navigation>();
var navigationview = new NavigationView();
navigationview.NavigationId = item.NavigationId;
navigationview.NavigationCode = item.NavigationCode;
navigationview.NavigationName = item.NavigationName;
navigationview.PId = item.PId;
navigationview.Depth = item.Depth;
navigationview.Count = item.Count;
navigationview.Visible = item.Visible;
navigationview.URL = item.URL;
navigationview.PId = item.PId;
navigationview.OrderId = item.OrderId;
navigationview.IsAddChild = item.NavigationId == GetWebNid("F_Nid") ? 1 : 0;
nType = navigationview.IsAddChild;
if (item.NavigationId != 0)
navigationview.NavigationList = GetNavigationList(item.NavigationId);
listView.Add(navigationview);
}
ViewBag.lt = listView;
return View();
}

public List<Navigation> GetNavigationList(int id)
{
List<Navigation> lt = _inavigationService.GetNaviagtionListByPid(id);
foreach (var item in lt)
{
var na = new Navigation();
na = item;
na.NavigationName = GetNavigationName(item.NavigationName, item.Depth);
na.IsAddChild = nType;
na.PId = item.PId;
if (na.Count == 0)
{
na.IsAddChild = 0;
}
listAll.Add(na);
//获得子节点
GetNavigationList(item.NavigationId);
}
return listAll;
}

public string GetNavigationName(string name, int Deth)
{
string fix = "|---";
string str = string.Empty;
for (int i = 0; i < Deth; i++)
{
str += fix;
}
return str + name;
}

public string GetPartJson()
{
List<Navigation> list = _inavigationService.GetNaviagtionListByPid(0);
StringBuilder strb = new StringBuilder();
string MenuJosn = "{\"menus\": [" + GetTask(0, strb) + "]}";
return MenuJosn;
}
public string GetTask(int id, StringBuilder strb)
{
List<Navigation> list = _inavigationService.GetNaviagtionListByPid(id);
int i = 0;
foreach (var item in list)
{
strb.Append("{");
strb.Append("\"menuid\":\"" + item.NavigationId + "\"");
strb.Append(",\"menuname\":\"" + item.NavigationName + "\"");
strb.Append(",\"url\":\"" + item.URL + "\"");
strb.Append(",\"icon\":\"../" + item.Icon + "\"");
strb.Append(",\"menus\":[");
if (item.NavigationId != 0)
GetTask(item.NavigationId, strb);
strb.Append("]");
if (i == list.Count - 1)
strb.Append("}");
else
strb.Append("},");
i++;
}
return strb.ToString();
}

}
}

原文地址:https://www.cnblogs.com/wzq806341010/p/2941151.html