<component :is="breadcrumb.icon" v-if="theme.header.crumb.showIcon" class="inline-block align-text-bottom mr-4px text-16px" />
时间: 2024-02-14 15:24:26 浏览: 156
这段代码的作用是根据当前面包屑项的 `icon` 属性,动态地渲染一个组件。如果 `theme.header.crumb.showIcon` 为 `true`,那么就渲染这个组件,并且给这个组件添加一个 `class` 属性,值为 `"inline-block align-text-bottom mr-4px text-16px"`。
具体来说,`:is` 属性是用于动态地指定要渲染的组件的类型的。`:is="breadcrumb.icon"` 表示将要渲染的组件类型由 `breadcrumb.icon` 属性的值来确定。`v-if="theme.header.crumb.showIcon"` 则是一个条件渲染,只有当 `theme.header.crumb.showIcon` 为 `true` 时才会渲染这个组件。`class` 属性则是给这个组件添加一个 CSS 类名,用于设置组件的样式。
相关问题
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <link rel="stylesheet" href="./css/inputnumber.css" /> <link rel="stylesheet" href="./css/index.css" /> <script src="https://unpkg.com/vue@3"></script> <title>购物车</title> </head> <body> <div class="app-container" id="app"> <!-- 顶部banner --> <div class="banner-box"><img src="./img/fruit.jpg" alt="Fruit"></div> <!-- 面包屑 --> <div class="breadcrumb"> <span>🏠</span> / <span>购物车</span> </div> <!-- 购物车主体 --> <!-- v-if v-else 条件渲染,如果没有数据则显示空车 --> <div v-if="fruitList.length > 0" class="main"> <div class="table"> <!-- 头部 --> <div class="thead"> <div class="tr"> <div class="th">选中</div> <div class="th th-pic">图片</div> <div class="th">单价</div> <div class="th num-th">个数</div> <div class="th">小计</div> <div class="th">操作</div> </div> </div> <!-- 身体 --> <!-- v-for 循环遍历渲染数组 --> <div v-for="(item, index) in fruitList" :key="item.id" class="tbody"> <!-- v-bind 绑定 class 设置条件--> <div class="tr" :class="{ active: item.isChecked }"> <!-- v-model 绑定属性 --> <div class="td"><input type="checkbox" v-model="item.isChecked" /></div> <!-- v-bind 绑定 src --> <div class="td"><img :src="item.icon" alt="" /></div> <div class="td">{{ item.price }}</div> <div class="td"> <div class="my-input-number"> <!-- @click 点击事件实现数量加减 --> <!-- :disabled 是一个动态属性绑定,它允许你根据表达式的结果动态地设置 HTML 元素的 disabled 属性 --> <button :disabled="item.num <= 1" class="decrease" @click="item.num--"> - </button> <span class="my-input__inner">{{ item.num }}</span>
### Vue.js 购物车功能实现详解
以下是基于 Vue.js 的购物车功能实现的代码解析以及改进建议:
#### 1. 使用 `v-for` 渲染商品列表
通过 `v-for` 指令可以动态渲染商品列表。每个商品对象通常包含名称、价格和数量等字段。
```html
<div id="cart-app">
<ul>
<li v-for="(item, index) in cartItems" :key="index">
{{ item.name }} - ${{ item.price }}
<button @click="removeItem(index)">Remove</button>
Quantity:
<input type="number" v-model.number="item.quantity" min="0"/>
</li>
</ul>
<p>Total Price: ${{ calculateTotal() }}</p>
<form @submit.prevent="addItem">
<label>Name:</label><input v-model="newItem.name" />
<label>Price:</label><input v-model.number="newItem.price" />
<label>Quantity:</label><input v-model.number="newItem.quantity" />
<button type="submit">Add Item</button>
</form>
</div>
```
上述代码中,`v-for` 遍历了 `cartItems` 数组并显示每件商品的信息[^1]。同时,使用 `@click` 绑定移除按钮事件处理函数 `removeItem()` 来删除指定索引的商品。
#### 2. 双向数据绑定 `v-model`
`v-model` 实现了输入框与商品数量之间的双向绑定。当用户修改输入框中的数值时,对应的商品数量会实时更新到组件的数据模型中。
#### 3. 计算总金额方法
定义了一个计算总价的方法 `calculateTotal()`,它遍历所有商品并将单价乘以其数量求和。
```javascript
new Vue({
el: '#cart-app',
data: {
newItem: { name: '', price: 0, quantity: 1 },
cartItems: [
{ name: 'Apple', price: 1, quantity: 5 },
{ name: 'Banana', price: 0.5, quantity: 10 }
]
},
methods: {
addItem() {
this.cartItems.push({ ...this.newItem });
this.newItem = { name: '', price: 0, quantity: 1 };
},
removeItem(index) {
this.cartItems.splice(index, 1);
},
calculateTotal() {
return this.cartItems.reduce((total, item) => total + (item.price * item.quantity), 0);
}
}
});
```
此部分展示了如何利用 Vue 方法来管理购物车逻辑。`addItem` 和 `removeItem` 是用于增删商品的核心操作。
#### 4. 动态属性绑定 `:disabled`
为了增强用户体验,在某些情况下可能需要禁用按钮。例如,如果某个商品的数量减少至零,则应禁用其减号按钮。
```html
<button @click="decreaseQuantity(item)" :disabled="item.quantity === 0">-</button>
<input type="number" v-model.number="item.quantity" min="0"/>
<button @click="increaseQuantity(item)">+</button>
```
这里使用了 `:disabled` 属性绑定条件表达式 `item.quantity === 0`,从而控制按钮的状态。
#### 改进建议
- **性能优化**: 对于大型购物车应用,考虑分页加载或者虚拟滚动技术以提升页面响应速度。
- **状态管理**: 如果项目复杂度较高,推荐引入 Vuex 或 Pinia 进行全局状态管理。
- **表单验证**: 添加前端校验机制确保用户提交合法数据,比如防止负数或非法字符作为商品名。
```javascript
methods: {
decreaseQuantity(item) {
if (item.quantity > 0) {
item.quantity--;
}
},
increaseQuantity(item) {
item.quantity++;
}
}
```
以上改进增加了调整商品数量的功能,并且保持良好的交互体验。
---
<div class="col-lg-12"> <br /> <ol class="breadcrumb"> <li><i class="fa fa-dashboard"></i> <a href="${ctx}/"><fmt:message key="label.home" /></a></li> <li><i class="fa fa-table"></i> </i> <fmt:message key="label.home.sys" /></li> <li><i class="fa fa-table"></i> <fmt:message key="label.home.sys.authoritymanagement" /></li> <li><i class="fa fa-table"></i> <fmt:message key="label.home.sys.authoritymanagement.factor" /></li> <li class="active"><i class="fa fa-table"></i><fmt:message key="label.button.add" />/<fmt:message key="label.button.edit" /></li> </ol> </div>解析一下这段jsp代码
<think>好的,我现在需要帮助用户解析一段包含面包屑导航的JSP代码的功能和结构。首先,我得回忆一下JSP的基本知识,以及常见的标签和结构。用户提供的代码片段可能涉及HTML和JSP标签的结合使用,比如可能包含EL表达式、JSTL标签,或者自定义标签。
首先,我应该确认用户提供的具体代码是什么样的,但根据问题描述,用户提到的是“包含面包屑导航的JSP代码片段”。面包屑导航通常用于显示用户在网站中的当前位置,帮助导航。常见的结构可能是使用列表元素,比如`<ul>`和`<li>`,结合链接来展示层级路径。
接下来,我需要考虑JSP中常用的组件,比如JSTL的核心标签库(c:forEach, c:if等)或者表达式语言(EL)如${...}。可能代码中会循环遍历导航的各个部分,动态生成链接。例如,使用<c:forEach>来迭代一个列表,每个项生成一个<li>元素。
另外,可能涉及到条件判断,比如最后一个面包屑项不需要链接,只显示文本。这时候可能会用到<c:choose>或<c:if>来判断是否是最后一个元素,从而决定是否添加超链接。
还需要注意HTML结构是否正确,比如是否正确使用语义化标签,是否有正确的闭合标签。例如,引用[2]中提到应该使用<ul>和<li>来标记链接列表,而不是用<br>标签分隔,这点可能在用户的代码中有体现。
此外,JSP中可能包含一些服务器端的逻辑,比如获取当前页面的路径,或者从请求属性中获取面包屑的导航数据。例如,使用${pageContext.request.contextPath}来获取应用的上下文路径,确保链接的正确性。
可能还需要检查是否有使用自定义标签库,比如<%@ taglib %>指令引入的标签库,这些标签的具体作用需要根据命名空间和文档来分析。例如,如果有使用Spring的标签库,或者其他第三方库的标签。
最后,总结各个部分的功能,比如HTML结构负责展示,JSTL或EL负责动态内容的生成,条件判断处理不同情况下的显示方式,确保面包屑导航既美观又功能正确。
在解析过程中,需要注意代码的可维护性和是否符合MVC设计模式,比如是否将业务逻辑放在后端,JSP仅负责显示,这可能涉及到引用[1]中提到的MVC设计模式的应用。同时,可能涉及到国际化(i18n)的处理,比如文本是否通过资源文件动态加载,这也是需要考虑的点。
总结来说,解析步骤可能包括:识别HTML结构,分析JSP标签和EL表达式的动态内容生成,检查条件逻辑处理,确认导航数据的来源(如从后端传递的属性),以及评估代码是否符合最佳实践,如语义化HTML和MVC分离。</think>### 解析包含面包屑导航的JSP代码片段
以下是对JSP面包屑导航代码的功能解析及标签作用的说明。假设代码片段如下(模拟常见结构):
```jsp
<nav aria-label="Breadcrumb">
<ul class="breadcrumb">
<c:forEach items="${breadcrumbs}" var="crumb" varStatus="loop">
<li class="breadcrumb-item">
<c:choose>
<c:when test="${loop.last}">
<span>${crumb.name}</span>
</c:when>
<c:otherwise>
<a href="${pageContext.request.contextPath}${crumb.url}">${crumb.name}</a>
</c:otherwise>
</c:choose>
</li>
</c:forEach>
</ul>
</nav>
```
#### 1. **HTML结构解析**
- `<nav>`:定义导航区域,`aria-label`属性为无障碍阅读提供语义标注[^2]。
- `<ul class="breadcrumb">`:使用无序列表组织面包屑层级,类名`breadcrumb`通常关联CSS样式。
- `<li class="breadcrumb-item">`:每个列表项表示导航路径中的一个节点。
#### 2. **JSP标签与动态逻辑**
- **`<c:forEach>`**:JSTL核心标签,遍历后台传递的`breadcrumbs`集合[^1]。
- `items="${breadcrumbs}"`:从请求作用域获取面包屑数据(通常为`List<Crumb>`对象)。
- `var="crumb"`:定义当前迭代项的变量名。
- `varStatus="loop"`:获取循环状态(如`loop.last`判断是否为最后一项)。
- **`<c:choose>`**:条件分支标签,根据是否到达最后一项决定显示方式。
- **`<c:when test="${loop.last}">`**:若为最后一项,显示为`<span>`(无超链接)。
- **`<c:otherwise>`**:其他情况生成带超链接的`<a>`标签。
- **EL表达式**:`${...}`实现动态内容绑定。
- `${crumb.name}`:显示节点名称。
- `${pageContext.request.contextPath}${crumb.url}`:拼接上下文路径与节点URL,避免硬编码。
#### 3. **功能总结**
- **动态渲染路径**:根据后台数据生成多级导航,支持任意深度。
- **条件样式**:末项无链接,仅展示文本,符合面包屑设计规范。
- **可维护性**:数据与展示分离,符合MVC模式。
阅读全文
相关推荐







using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using WebApplication1.Models;
using WebApplication1.Scripts;
namespace WebApplication1.Controllers
{
[LoginActionFitter]
public class OrgManagemController : Controller
{
AoutEntities1 db = new AoutEntities1();
ReturnJsonData jsonData = new ReturnJsonData();
Models.ReturnListJsonData orgTreeList = new Models.ReturnListJsonData();
// GET: OrgManagem
public ActionResult Index()
{
return View();
}
#region 查询
///
/// 模糊查询
///
///
///
///
/// <returns></returns>
public ActionResult GetList(int page, int limit, string orgname)
{
//返回树形表格
List<object> retultlist = new List<object>();
//第一步 查找所有的一级菜单
var list = db.OrganizationStructure.Where(a => a.ParentId == Guid.Empty).ToList();
if (!string.IsNullOrEmpty(orgname))
{
list = db.OrganizationStructure.Where(a => a.OrgName.Contains(orgname)).ToList();
foreach (var itme in list)
{
ReturnTreeListData obj = new ReturnTreeListData();
obj.ID = itme.ID;
obj.parentId = itme.ParentId;
obj.name = itme.OrgName;
obj.OrgCode = itme.OrgCode;
obj.Leve = itme.Leve;
obj.CreateDate = itme.CreateDate;
obj.ModifyDate = itme.ModifyDate;
//验证是否还有有子集
obj.isParent = false;
obj.children = null;
retultlist.Add(obj);
}
}
else
{
list = db.OrganizationStructure.Where(a => a.ParentId == Guid.Empty).ToList();
//循环
foreach (var itme in list)
{
ReturnTreeListData obj = new ReturnTreeListData();
obj.ID = itme.ID;
obj.parentId = itme.ParentId;
obj.name = itme.OrgName;
obj.OrgCode = itme.OrgCode;
obj.Leve = itme.Leve;
obj.CreateDate = itme.CreateDate;
obj.ModifyDate = itme.ModifyDate;
//验证是否还有有子集
obj.isParent = db.OrganizationStructure.Where(a => a.ParentId == itme.ID).ToList().Count > 0 ? true : false;
if (obj.isParent == true)
{
//查找所以子集
obj.children = BuildTree(list, itme.ID);
}
retultlist.Add(obj);
}
}
orgTreeList.code = 0;
orgTreeList.count = list.Count;
orgTreeList.data = retultlist;
return Json(orgTreeList, JsonRequestBehavior.AllowGet);
}
#endregion
public ActionResult GetEditData(Guid nodeId)
{
var current = db.OrganizationStructure.Find(nodeId);
if (current == null) return Json(new { success = false });
// 总公司的ParentId为null或自身(假设总公司ParentId=0或null)
var isRoot = current.ParentId == null || current.ParentId == Guid.Empty;
var parent = isRoot ? current : db.OrganizationStructure.Find(current.ParentId);
return Json(new
{
parentName = parent.OrgName,
parentCode = parent.OrgCode,
level = current.Leve,
orgName = current.OrgName,
orgCode = current.OrgCode,
ID = current.ID,
parentID = current.ParentId,
}, JsonRequestBehavior.AllowGet);
}
#region 递归调用
///
/// 递归调用
///
///
///
/// <returns></returns>
private List<object> BuildTree(List<OrganizationStructure> list, Guid ID)
{
List<object> Treelist = new List<object>();
List<OrganizationStructure> childList = db.OrganizationStructure.Where(a => a.ParentId == ID).ToList();
//循环
foreach (var itme in childList)
{
ReturnTreeListData obj = new ReturnTreeListData();
obj.ID = itme.ID;
obj.parentId = itme.ParentId;
obj.name = itme.OrgName;
obj.OrgCode = itme.OrgCode;
obj.Leve = itme.Leve;
obj.CreateDate = itme.CreateDate;
obj.ModifyDate = itme.ModifyDate;
obj.isParent = db.OrganizationStructure.Where(a => a.ParentId == itme.ID).ToList().Count > 0 ? true : false;
obj.children = BuildTree(childList, itme.ID);
Treelist.Add(obj);
}
return Treelist;
}
#endregion
#region 新增组织机构
///
/// 新增,修改
///
/// <returns></returns>
public ActionResult Add(OrganizationStructure org)
{
org.ID = Guid.NewGuid();
org.Leve = 0;
org.ParentId = Guid.Empty;
org.CreateDate = DateTime.Now;
org.ModifyDate = DateTime.Now;
db.OrganizationStructure.Add(org);
var result = db.SaveChanges();
if (result > 0)
{
jsonData.code = 0;
jsonData.msg = "新增组织机构成功";
}
else
{
jsonData.code = 1;
jsonData.msg = "新增失败,请联系管理员";
}
return Json(jsonData, JsonRequestBehavior.AllowGet);
}
#endregion
#region 删除
///
/// 删除操作
///
///
/// <returns></returns>
public ActionResult DelInfo(Guid? id)
{
if (id == null)
{
jsonData.code = 1;
jsonData.msg = "删除失败,未找到当行数据";
}
else
{
//删除
var entity = db.OrganizationStructure.Find(id);
if (entity == null)
{
jsonData.code = 1;
jsonData.msg = "删除失败,未找到当前行数据";
}
else
{
db.OrganizationStructure.Remove(entity);
var result = db.SaveChanges();
if (result > 0)
{
jsonData.code = 0;
jsonData.msg = "删除成功";
}
else
{
jsonData.code = 1;
jsonData.msg = "删除失败,请联系管理员";
}
}
}
return Json(jsonData, JsonRequestBehavior.AllowGet);
}
#endregion
#region 新增修改
///
/// 新增,修改
///
/// <returns></returns>
public ActionResult AddTreeInfo(string neworgname, string neworgcode, OrganizationStructure org, Guid?ID, Guid ParentId)
{
if (ID == null || ID == Guid.Empty)
{
// 新增逻辑:parentId为父节点ID(新增时需传递)
var newOrg = new OrganizationStructure
{
ID = Guid.NewGuid(),
ParentId = ParentId,
OrgName = neworgname,
OrgCode = neworgcode,
Leve = org.Leve,
CreateDate = DateTime.Now,
ModifyDate = DateTime.Now
};
db.OrganizationStructure.Add(newOrg);
}
else
{
// 编辑逻辑:通过ID查找当前行(确保是当前行,而非总公司,依赖ID唯一性)
var entity = db.OrganizationStructure.Find(ID);
if (entity != null)
{
entity.OrgName = neworgname;
entity.OrgCode = neworgcode;
entity.Leve = org.Leve;
entity.ModifyDate = DateTime.Now;
db.Entry(entity).State = EntityState.Modified;
}
}
var result = db.SaveChanges();
if (result > 0)
{
jsonData.code = 0;
jsonData.msg = "保存成功";
}
else
{
jsonData.code = 1;
jsonData.msg = "保存失败,请联系管理员";
}
return Json(jsonData, JsonRequestBehavior.AllowGet);
}
#endregion
}
}
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Demo</title>
<script src="~/Scripts/layui/layui.js"></script>
<script src="~/Scripts/jquery-3.4.1.js"></script>
<style>
body {
padding: 10px 20px 20px 20px;
width: 90%
}
.editInfo {
display: none;
}
.addeditInfo {
display: none;
}
.addorgfrom {
border-radius: 8px;
width: 400px;
max-width: 100%;
padding: 0px 35px 0;
margin: auto;
position: absolute;
top: 60%;
left: 55%;
margin: -120px 0 0 -230px;
}
.addform {
border-radius: 8px;
width: 400px;
max-width: 100%;
padding: 0px 35px 0;
margin: auto;
position: absolute;
top: 40%;
left: 54%;
margin: -120px 0 0 -230px;
}
.layui-form-item {
margin-left: -31px;
}
</style>
</head>
<body>
<fieldset class="layui-elem-field">
<legend>
首页
组织机构管理管理
</legend>
<label class="layui-form-label" style="width:90px;">组织机构名称</label>
<input type="text" name="orgname" id="name" autocomplete="off" class="layui-input">
<button type="button" class="layui-btn layui-btn but" style=" margin-bottom: 4px;" id="searchButton" onclick="Search()">查询</button>
<button type="button" class="layui-btn layui-bg-blue but" style=" margin-bottom: 4px;" onclick="Add()">添加</button>
</fieldset>
<script type="text/html" id="TPL-treeTable-demo-tools">
新增
编辑
删除
</script>
<form class="layui-form layui-form-pane addorgfrom" action="" lay-filter="demo-val-filter">
<input type="hidden" name="ID" />
<label class="layui-form-label" style="width:130px">组织机构名称</label>
<input type="text" name="orgname" autocomplete="off" placeholder="请输入组织机构名称" lay-verify="required" class="layui-input" style="width:87%">
<label class="layui-form-label" style="width:130px">组织机构代码</label>
<input type="text" name="orgcode" autocomplete="off" placeholder="请输入组织机构代码" lay-verify="required" class="layui-input" style="width:87%">
<button type="submit" class="layui-btn" lay-submit lay-filter="demo1" id="add" style="margin:10px">保存</button>
<button type="reset" class="layui-btn layui-btn-primary" style="margin-left:30px;">重置</button>
</form>
@*表格内的新增*@
<form class="layui-form layui-form-pane addform" action="" lay-filter="demo-val-filter">
<input type="hidden" name="ID" />
<input type="hidden" name="ParentId" />
<label class="layui-form-label" style="width:130px">上一级菜单名称</label>
<input type="text" name="orgname" autocomplete="off" disabled="disabled" placeholder="请输入组织机构名称" lay-verify="required" class="layui-input" style="width:87%">
<label class="layui-form-label" style="width:130px">上一级菜单代码</label>
<input type="text" name="orgncode" autocomplete="off" disabled="disabled" placeholder="请输入组织机构名称" lay-verify="required" class="layui-input" style="width:87%">
<label class="layui-form-label" style="width:120px">当前级别</label>
<select name="leve" lay-verify="required">
<option value="">请选择级别</option>
<option value="0">集团总部</option>
<option value="1">分公司</option>
<option value="2">部门</option>
<option value="3">其他</option>
</select>
<label class="layui-form-label" style="width:120px">组织机构名称</label>
<input type="text" name="neworgname" autocomplete="off" placeholder="请输入组织机构名称" lay-verify="required" class="layui-input" style="width:90%">
<label class="layui-form-label" style="width:120px">组织机构代码名称</label>
<input type="text" name="neworgcode" autocomplete="off" placeholder="请输入组织机构代码名称" lay-verify="required" class="layui-input" style="width:90%">
<button type="submit" class="layui-btn" lay-submit lay-filter="demo2" id="add" style="margin:10px">保存</button>
<button type="reset" class="layui-btn layui-btn-primary" style="margin-left:30px;">重置</button>
</form>
<script>
var SearchtreeTable;
layui.use(['form', 'table'], function () {
var table = layui.table;
var treeTable = layui.treeTable;
var layer = layui.layer;
var form = layui.form;
// 渲染
var inst = treeTable.render({
elem: '#ID-treeTable-demo',
url: '/OrgManagem/GetList', // 此处为静态模拟数据,实际使用时需换成真实接口
cols: [[
{ type: 'checkbox', },
{ field: 'ID', title: 'ID', hide: true }, // 隐藏但保留数据
{ field: 'ParentId', title: '父ID', hide: true }, // 隐藏但保留数据
{ field: 'name', title: '组织机构名称', width: '30%', },
{ field: 'OrgCode', title: '组织机构代码', width: '30%', sort: true },
{
field: 'Leve', title: '级别', width: '20%', sort: true, templet: function (d) {
switch (d.Leve) {
case 0:
return "集团总部";
break;
case 1:
return "分公司";
break;
case 2:
return "部门";
break;
default:
return "其他";
break;
}
}
},
{ title: "操作", width: '16%', align: "center", toolbar: "#TPL-treeTable-demo-tools" }
]],
tree: {
iconIndex: 1, // 图标显示在第 2 列(对应“组织机构名称”列,索引从 0 开始)
isParent: 'isParent', // 绑定后台的 isParent 字段(标识是否有子节点)
// 删除 async 配置!后台已返回完整 children 数组,无需异步加载
},
page: true
});
SearchtreeTable = inst;
//编辑,删除
table.on('tool(test)', function (obj) { // 双击 toolDouble
var data = obj.data; // 获得当前行数据
// console.log(obj)
if (obj.event === 'add') {
//新增子集
layer.open({
type: 1, // page 层类型
area: ['550px', '480px'],
title: '新增组织机构',
shade: 0.6, // 遮罩透明度
shadeClose: false, // 点击遮罩区域,关闭弹层
maxmin: false, // 允许全屏最小化
anim: 0, // 0-6 的动画形式,-1 不开启
content: $(".addeditInfo").html()
});
//赋值
form.val('demo-val-filter', {
"orgname": data.name,
"orgncode": data.OrgCode,
"ID": null,
"ParentId": data.ID
});
} else if (obj.event === 'edit') {
//编辑
//修改编辑职位
layer.open({
type: 1,
area: ['550px', '480px'],
title: '编辑组织机构',
shade: 0.6, // 遮罩透明度
shadeClose: false, // 点击遮罩区域,关闭弹层
maxmin: false, // 允许全屏最小化
anim: 0, // 0-6 的动画形式,-1 不开启
content: $('.addeditInfo').html(),
success: function () {
$.ajax({
url: '/OrgManagem/GetEditData',
data: { nodeId: data.ID },
success: function (res) {
// 填充数据,处理父节点不存在的情况
form.val('demo-val-filter', {
"orgname": res.parentName || data.name, // 父节点不存在时显示自身名称
"orgncode": res.parentCode || data.orgCode, // 父节点不存在时显示自身代码
"leve": res.level,
"neworgname": data.name,
"neworgcode": data.OrgCode,
"ID": res.ID,
"ParentId": res.parentID
});
}
});
}
});
} else {
layer.confirm('真的删除行 [' + data.name + '] 么', function (index) {
obj.del(); // 删除对应行(tr)的DOM结构
layer.close(index);
// 向服务端发送删除指令
$.ajax({
url: '/OrgManagem/DelInfo',
type: 'post',
data: { id: data.ID },
success: function (res) {
if (res.code == 0) {
layer.msg(res.msg, { icon: 6, time: 1500 }, function () {
Search();
})
} else {
layer.msg(res.msg, { icon: 5, time: 1500 })
}
}
})
});
}
});
// 提交事件
form.on('submit(demo1)', function (data) {
var field = data.field; // 获取表单字段值
// 此处可执行 Ajax 等操作
$.ajax({
url: '/OrgManagem/Add',
type: 'post',
data: field,
success: function (res) {
if (res.code == 0) {
layer.msg(res.msg, { icon: 6, time: 3000 }, function () {
layer.closeAll(); // 关闭所有类型的层
Search();
});
} else {
layer.msg(res.msg, { icon: 5, time: 2000 });
}
}
})
return false; // 阻止默认 form 跳转
});
// 提交事件
form.on('submit(demo2)', function (data) {
var field = data.field; // 获取表单字段值
var leve = data.leve;
var ParentId = data.ParentId;
// 此处可执行 Ajax 等操作
$.ajax({
url: '/OrgManagem/AddTreeInfo',
type: 'post',
data: field, leve, ParentId,
success: function (res) {
if (res.code == 0) {
layer.msg(res.msg, { icon: 6, time: 3000 }, function () {
layer.closeAll(); // 关闭所有类型的层
Search();
});
} else {
layer.msg(res.msg, { icon: 5, time: 2000 });
}
}
})
return false; // 阻止默认 form 跳转
});
});
//重载,模糊查询
function Search() {
var nameVal = $('input[name="orgname"]').val().trim();
// 完整重载 - 所有属性属性(options)均可参与到重载中
SearchtreeTable.reload({
where: { // 传递数据异步请求时携带的字段
orgname: nameVal,
},
height: 500 // 重设高度
});
}
//添加
function Add() {
// 在此处输入 layer 的任意代码
layer.open({
type: 1, // page 层类型
area: ['550px', '350px'],
title: '新增组织机构',
shade: 0.6, // 遮罩透明度
shadeClose: true, // 点击遮罩区域,关闭弹层
maxmin: true, // 允许全屏最小化
anim: 0, // 0-6 的动画形式,-1 不开启
content: $(".editInfo").html()
});
}
</script>
</body>
</html>按照这中代码格式和风格写出上面的添加和编辑

@{
Layout = null;
}
<!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>Index</title> <script src="~/Scripts/layui/layui.js"></script> <script src="~/Scripts/jquery-3.4.1.js"></script> <style> body { padding: 10px 20px 20px 20px; width: 90% } .editInfo { display: none; } .addeditInfo { display: none; } .editnewInfo { display: none; } </style> </head> <body> <fieldset class="layui-elem-field"> <legend> 首页 菜单管理 </legend> <label class="layui-form-label" style="width:90px;">菜单名称</label> <input type="text" name="eumname" id="name" autocomplete="off" class="layui-input"> <button type="button" class="layui-btn layui-btn but" style=" margin-bottom: 4px;" id="searchButton" onclick="Search()">查询</button> <button type="button" class="layui-btn layui-bg-blue but" style=" margin-bottom: 4px;" onclick="Add()">添加</button> </fieldset> <script type="text/html" id="TPL-treeTable-demo-tools"> 新增 编辑 删除 </script> <form class="layui-form layui-form-pane addorgfrom" action="" lay-filter="demo-val-filter"> <input type="hidden" name="ID" /> <label class="layui-form-label" style="width:130px">模块名称</label> <input type="text" name="menuname" autocomplete="off" placeholder="请输入组织模块名称" lay-verify="required" class="layui-input" style="width:87%"> <label class="layui-form-label" style="width:130px">模块代码</label> <input type="text" name="menucode" autocomplete="off" placeholder="请输入组织模块代码" lay-verify="required" class="layui-input" style="width:87%"> <button type="submit" class="layui-btn" lay-submit lay-filter="demo1" style="margin:10px">保存</button> <button type="reset" class="layui-btn layui-btn-primary" style="margin-left:30px;">重置</button> </form> @*表格内的新增,编辑*@ <form class="layui-form layui-form-pane addform" action="" lay-filter="demo-val-filter"> <input type="hidden" name="ID" /> <input type="hidden" name="ParentId" /> <label class="layui-form-label" style="width:130px">上一级菜单名称</label> <input type="text" name="modulename" autocomplete="off" disabled="disabled" placeholder="请输入模块名称" lay-verify="required" class="layui-input" style="width:87%"> <label class="layui-form-label" style="width:130px">上一级菜单代码</label> <input type="text" name="modulecode" autocomplete="off" disabled="disabled" placeholder="请输入模块代码" lay-verify="required" class="layui-input" style="width:87%"> <label class="layui-form-label" style="width:120px">当前级别</label> <select name="Type" lay-verify="required" disabled="disabled"> <option value="">请选择级别</option> <option value="0">菜单</option> <option value="1">其他</option> </select> <label class="layui-form-label" style="width:120px">模块名称</label> <input type="text" name="newname" autocomplete="off" placeholder="请输入模块名称" lay-verify="required" class="layui-input" style="width:90%"> <label class="layui-form-label" style="width:120px">模块代码</label> <input type="text" name="newcode" autocomplete="off" placeholder="请输入模块代码" lay-verify="required" class="layui-input" style="width:90%"> <button type="submit" class="layui-btn" lay-submit lay-filter="demo2" style="margin:10px">保存</button> <button type="reset" class="layui-btn layui-btn-primary" style="margin-left:30px;">重置</button> </form> <script> var SearchtreeTable; layui.use(['form', 'table'], function () { var table = layui.table; var treeTable = layui.treeTable; var layer = layui.layer; var form = layui.form; // 渲染 var inst = treeTable.render({ elem: '#ID-treeTable-demo', url: '/ResourceManage/GetList', // 此处为静态模拟数据,实际使用时需换成真实接口 cols: [[ { type: 'checkbox', }, { field: 'ID', title: 'ID', hide: true }, // 隐藏但保留数据 { field: 'ParentId', title: '父ID', hide: true }, // 隐藏但保留数据 { field: 'name', title: '模块名称', width: '20%', }, { field: 'ModuleCode', title: '模块代码', width: '20%', sort: true }, { field: 'Type', title: '级别', width: '20%', sort: true, templet: function (d) { switch (d.Type) { case 0: return "菜单"; break; case 1: return "其他"; break; default: return "其他"; break; } } }, { field: 'Url', title: '链接', width: '15%', sort: true }, { title: "操作", width: '21.5%', align: "center", toolbar: "#TPL-treeTable-demo-tools" } ]], tree: { iconIndex: 1, // 图标显示在第 2 列(对应“组织机构名称”列,索引从 0 开始) isParent: 'isParent', // 绑定后台的 isParent 字段(标识是否有子节点) // 删除 async 配置!后台已返回完整 children 数组,无需异步加载 }, page: true }); SearchtreeTable = inst; //新增,编辑,删除 table.on('tool(test)', function (obj) { // 双击 toolDouble var data = obj.data; // 获得当前行数据 // console.log(obj) if (obj.event === 'add') { //新增子集 layer.open({ type: 1, // page 层类型 area: ['550px', '480px'], title: '新增资源模块', shade: 0.6, // 遮罩透明度 shadeClose: false, // 点击遮罩区域,关闭弹层 maxmin: false, // 允许全屏最小化 anim: 0, // 0-6 的动画形式,-1 不开启 content: $(".addeditInfo").html() }); //赋值 form.val('demo-val-filter', { "modulename": data.name, "modulecode": data.ModuleCode, "Type": data.Type, "ID": null, "ParentId": data.ID }); } else if (obj.event === 'edit') { //编辑 //修改编辑职位 layer.open({ type: 1, area: ['550px', '480px'], title: '编辑资源模块', shade: 0.6, // 遮罩透明度 shadeClose: false, // 点击遮罩区域,关闭弹层 maxmin: false, // 允许全屏最小化 anim: 0, // 0-6 的动画形式,-1 不开启 content: $('.addeditInfo').html(), success: function () { $.ajax({ url: '/ResourceManage/GetEditData', data: { nodeId: data.ID }, success: function (res) { // 填充数据,处理父节点不存在的情况 form.val('demo-val-filter', { "modulename": res.parentName || data.name, // 父节点不存在时显示自身名称 "modulecode": res.parentCode || data.ModuleCode, // 父节点不存在时显示自身代码 "Type": data.Type, "newname": data.name, "newcode": data.ModuleCode, "ID": res.ID, "ParentId": res.parentID }); } }); } }); } else { layer.confirm('真的删除行 [' + data.name + '] 么', function (index) { obj.del(); // 删除对应行(tr)的DOM结构 layer.close(index); // 向服务端发送删除指令 $.ajax({ url: '/ResourceManage/DelInfo', type: 'post', data: { id: data.ID }, success: function (res) { if (res.code == 0) { layer.msg(res.msg, { icon: 6, time: 1500 }, function () { Search(); }) } else { layer.msg(res.msg, { icon: 5, time: 1500 }) } } }) }); } }); // 提交事件 form.on('submit(demo1)', function (data) { var field = data.field; // 获取表单字段值 // 此处可执行 Ajax 等操作 $.ajax({ url: '/ResourceManage/Add', type: 'post', data: field, success: function (res) { if (res.code == 0) { layer.msg(res.msg, { icon: 6, time: 3000 }, function () { layer.closeAll(); // 关闭所有类型的层 Search(); }); } else { layer.msg(res.msg, { icon: 5, time: 2000 }); } } }) return false; // 阻止默认 form 跳转 }); // 提交事件 form.on('submit(demo2)', function (data) { var field = data.field; // 获取表单字段值 var leve = data.leve; var ID = data.ID; var ParentId = data.ParentId; // 此处可执行 Ajax 等操作 $.ajax({ url: '/ResourceManage/AddTreeInfo', type: 'post', data: { newname: field.newname, newcode: field.newcode, Type: field.Type, ID: field.ID, pid: field.ParentId }, success: function (res) { if (res.code == 0) { layer.msg(res.msg, { icon: 6, time: 3000 }, function () { layer.closeAll(); // 关闭所有类型的层 Search(); }); } else { layer.msg(res.msg, { icon: 5, time: 2000 }); } } }) return false; // 阻止默认 form 跳转 }); }); //重载,模糊查询 //重载,模糊查询 function Search() { var nameVal = $('input[name="eumname"]').val().trim(); // 完整重载 - 所有属性属性(options)均可参与到重载中 SearchtreeTable.reload({ where: { // 传递数据异步请求时携带的字段 eumname: nameVal, }, }); } //添加 function Add() { // 在此处输入 layer 的任意代码 layer.open({ type: 1, // page 层类型 area: ['550px', '350px'], title: '新增资源模块', shade: 0.6, // 遮罩透明度 shadeClose: true, // 点击遮罩区域,关闭弹层 maxmin: true, // 允许全屏最小化 anim: 0, // 0-6 的动画形式,-1 不开启 content: $(".editInfo").html() }); } </script> </body> </html> using System; using System.Collections.Generic; using System.Data.Entity; using System.Linq; using System.Web; using System.Web.Mvc; using WebApplication1.Models;
namespace WebApplication1.Controllers
{
[LoginActionFitter]
public class ResourceManageController : Controller
{
AoutEntities1 db = new AoutEntities1();
ReturnJsonData jsonData = new ReturnJsonData();
ReturnListJsonData orgTreeList = new ReturnListJsonData();
// GET:
public ActionResult Index()
{
return View();
}
#region 查询 /// /// 模糊查询 /// /// /// /// /// <returns></returns> public ActionResult GetList(int page, int limit, string eumname) { //返回树形表格 List<object> retultlist = new List<object>(); //第一步 查找所有的一级菜单 var list = db.SystemResourceModule.Where(a => a.ParentId == Guid.Empty).ToList(); if (!string.IsNullOrEmpty(eumname)) { list = db.SystemResourceModule.Where(a => a.ModuleName.Contains(eumname)).ToList(); foreach (var itme in list) { ReturnMenuListData obj = new ReturnMenuListData(); obj.ID = itme.ID; obj.ParentId = itme.ParentId; obj.name = itme.ModuleName; obj.ModuleCode = itme.ModuleCode; obj.Url = itme.Url; obj.Type = itme.Type; obj.CreateDate = itme.CreateDate; obj.ModifyDate = itme.ModifyDate; //验证是否还有有子集 obj.isParent = false; obj.children = null; retultlist.Add(obj); } } else { list = db.SystemResourceModule.Where(a => a.ParentId == Guid.Empty).ToList(); //循环 foreach (var itme in list) { ReturnMenuListData obj = new ReturnMenuListData(); obj.ID = itme.ID; obj.ParentId = itme.ParentId; obj.name = itme.ModuleName; obj.ModuleCode = itme.ModuleCode; obj.Url = itme.Url; obj.Type = itme.Type; obj.CreateDate = itme.CreateDate; obj.ModifyDate = itme.ModifyDate; //验证是否还有有子集 obj.isParent = db.SystemResourceModule.Where(a => a.ParentId == itme.ID).ToList().Count > 0 ? true : false; if (obj.isParent == true) { //查找所以子集 obj.children = BuildTree(list, itme.ID); } retultlist.Add(obj); } } orgTreeList.code = 0; orgTreeList.count = list.Count; orgTreeList.data = retultlist; return Json(orgTreeList, JsonRequestBehavior.AllowGet); } #endregion #region 递归调用 /// /// 递归调用 /// /// /// /// <returns></returns> private List<object> BuildTree(List<SystemResourceModule> list, Guid ID) { List<object> Treelist = new List<object>(); List<SystemResourceModule> childList = db.SystemResourceModule.Where(a => a.ParentId == ID).ToList(); //循环 foreach (var itme in childList) { ReturnMenuListData obj = new ReturnMenuListData(); obj.ID = itme.ID; obj.ParentId = itme.ParentId; obj.name = itme.ModuleName; obj.ModuleCode = itme.ModuleCode; obj.Url = itme.Url; obj.CreateDate = itme.CreateDate; obj.ModifyDate = itme.ModifyDate; obj.isParent = db.SystemResourceModule.Where(a => a.ParentId == itme.ID).ToList().Count > 0 ? true : false; obj.children = BuildTree(childList, itme.ID); Treelist.Add(obj); } return Treelist; } #endregion #region 查询父级及子集信息 public ActionResult GetEditData(Guid nodeId) { var current = db.SystemResourceModule.Find(nodeId); if (current == null) return Json(new { success = false }); // 总公司的ParentId为null或自身(假设总公司ParentId=0或null) var isRoot = current.ParentId == null || current.ParentId == Guid.Empty; var parent = isRoot ? current : db.SystemResourceModule.Find(current.ParentId); return Json(new { parentName = parent.ModuleName, parentCode = parent.ModuleCode, Type = current.Type, orgName = current.ModuleName, orgCode = current.ModuleCode, ID = current.ID, parentID = current.ParentId, }, JsonRequestBehavior.AllowGet); } #endregion #region 删除 /// /// 删除操作 /// /// /// <returns></returns> public ActionResult DelInfo(Guid? id) { if (id == null) { jsonData.code = 1; jsonData.msg = "删除失败,未找到当行数据"; } else { //删除 var entity = db.SystemResourceModule.Find(id); if (entity == null) { jsonData.code = 1; jsonData.msg = "删除失败,未找到当前行数据"; } else { db.SystemResourceModule.Remove(entity); var result = db.SaveChanges(); if (result > 0) { jsonData.code = 0; jsonData.msg = "删除成功"; } else { jsonData.code = 1; jsonData.msg = "删除失败,请联系管理员"; } } } return Json(jsonData, JsonRequestBehavior.AllowGet); } #endregion #region 新增菜单 /// /// 新增,修改 /// /// <returns></returns> public ActionResult Add(SystemResourceModule org, string menuname, string menucode) { org.ModuleName = menuname; org.ModuleCode = menucode; org.ID = Guid.NewGuid(); org.Type = 0; org.ParentId = Guid.Empty; org.CreateDate = DateTime.Now; org.ModifyDate = DateTime.Now; db.SystemResourceModule.Add(org); var result = db.SaveChanges(); if (result > 0) { jsonData.code = 0; jsonData.msg = "新增资源模块成功"; } else { jsonData.code = 1; jsonData.msg = "新增失败,请联系管理员"; } return Json(jsonData, JsonRequestBehavior.AllowGet); } #endregion #region 新增修改 /// /// 新增,修改 /// /// <returns></returns> public ActionResult AddTreeInfo(string newname, string newcode, int? Type, Guid? ID, Guid pid) { if (ID == null || ID == Guid.Empty) { // 新增逻辑:parentId为父节点ID(新增时需传递) var newOrg = new SystemResourceModule { ID = Guid.NewGuid(), ParentId = pid, ModuleName = newname, ModuleCode = newcode, Type = Type + 1, CreateDate = DateTime.Now, ModifyDate = DateTime.Now }; db.SystemResourceModule.Add(newOrg); } else { // 编辑逻辑:通过ID查找当前行(确保是当前行,而非总公司,依赖ID唯一性) var entity = db.SystemResourceModule.Find(ID); if (entity != null) { entity.ModuleName = newname; entity.ModuleCode = newcode; entity.ModifyDate = DateTime.Now; db.Entry(entity).State = EntityState.Modified; } } var result = db.SaveChanges(); if (result > 0) { jsonData.code = 0; jsonData.msg = "保存成功"; } else { jsonData.code = 1; jsonData.msg = "保存失败,请联系管理员"; } return Json(jsonData, JsonRequestBehavior.AllowGet); } #endregion }
}检查错误

@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
<script src="~/Scripts/layui/layui.js"></script>
<script src="~/Scripts/jquery-3.4.1.js"></script>
<style>
body {
padding: 10px 20px 20px 20px;
width: 90%
}
.editInfo {
display: none;
}
.addeditInfo {
display: none;
}
.editnewInfo {
display: none;
}
</style>
</head>
<body>
<fieldset class="layui-elem-field">
<legend>
首页
菜单管理
</legend>
<label class="layui-form-label" style="width:90px;">菜单名称</label>
<input type="text" name="eumname" id="name" autocomplete="off" class="layui-input">
<button type="button" class="layui-btn layui-btn but" style=" margin-bottom: 4px;" id="searchButton" onclick="Search()">查询</button>
<button type="button" class="layui-btn layui-bg-blue but" style=" margin-bottom: 4px;" onclick="Add()">添加</button>
</fieldset>
<script type="text/html" id="TPL-treeTable-demo-tools">
新增
编辑
删除
</script>
<form class="layui-form layui-form-pane addorgfrom" action="" lay-filter="demo-val-filter">
<input type="hidden" name="ID" />
<label class="layui-form-label" style="width:130px">模块名称</label>
<input type="text" name="menuname" autocomplete="off" placeholder="请输入组织模块名称" lay-verify="required" class="layui-input" style="width:87%">
<label class="layui-form-label" style="width:130px">模块代码</label>
<input type="text" name="menucode" autocomplete="off" placeholder="请输入组织模块代码" lay-verify="required" class="layui-input" style="width:87%">
<button type="submit" class="layui-btn" lay-submit lay-filter="demo1" style="margin:10px">保存</button>
<button type="reset" class="layui-btn layui-btn-primary" style="margin-left:30px;">重置</button>
</form>
@*表格内的新增,编辑*@
<form class="layui-form layui-form-pane addform" action="" lay-filter="demo-val-filter">
<input type="hidden" name="ID" />
<input type="hidden" name="ParentId" />
<label class="layui-form-label" style="width:130px">上一级菜单名称</label>
<input type="text" name="modulename" autocomplete="off" disabled="disabled" placeholder="请输入模块名称" lay-verify="required" class="layui-input" style="width:87%">
<label class="layui-form-label" style="width:130px">上一级菜单代码</label>
<input type="text" name="modulecode" autocomplete="off" disabled="disabled" placeholder="请输入模块代码" lay-verify="required" class="layui-input" style="width:87%">
<label class="layui-form-label" style="width:120px">当前级别</label>
<select name="Type" lay-verify="required" disabled="disabled">
<option value="">请选择级别</option>
<option value="0">菜单</option>
<option value="1">其他</option>
</select>
<label class="layui-form-label" style="width:120px">模块名称</label>
<input type="text" name="newname" autocomplete="off" placeholder="请输入模块名称" lay-verify="required" class="layui-input" style="width:90%">
<label class="layui-form-label" style="width:120px">模块代码</label>
<input type="text" name="newcode" autocomplete="off" placeholder="请输入模块代码" lay-verify="required" class="layui-input" style="width:90%">
<button type="submit" class="layui-btn" lay-submit lay-filter="demo2" style="margin:10px">保存</button>
<button type="reset" class="layui-btn layui-btn-primary" style="margin-left:30px;">重置</button>
</form>
<script>
var SearchtreeTable;
layui.use(['form', 'table'], function () {
var table = layui.table;
var treeTable = layui.treeTable;
var layer = layui.layer;
var form = layui.form;
// 渲染
var inst = treeTable.render({
elem: '#ID-treeTable-demo',
url: '/ResourceManage/GetList', // 此处为静态模拟数据,实际使用时需换成真实接口
cols: [[
{ type: 'checkbox', },
{ field: 'ID', title: 'ID', hide: true }, // 隐藏但保留数据
{ field: 'ParentId', title: '父ID', hide: true }, // 隐藏但保留数据
{ field: 'name', title: '模块名称', width: '20%', },
{ field: 'ModuleCode', title: '模块代码', width: '20%', sort: true },
{
field: 'Type', title: '级别', width: '20%', sort: true, templet: function (d) {
switch (d.Type) {
case 0:
return "菜单";
break;
case 1:
return "其他";
break;
default:
return "其他";
break;
}
}
},
{ field: 'Url', title: '链接', width: '15%', sort: true },
{ title: "操作", width: '21.5%', align: "center", toolbar: "#TPL-treeTable-demo-tools" }
]],
tree: {
iconIndex: 1, // 图标显示在第 2 列(对应“组织机构名称”列,索引从 0 开始)
isParent: 'isParent', // 绑定后台的 isParent 字段(标识是否有子节点)
// 删除 async 配置!后台已返回完整 children 数组,无需异步加载
},
page: true
});
SearchtreeTable = inst;
//新增,编辑,删除
table.on('tool(test)', function (obj) { // 双击 toolDouble
var data = obj.data; // 获得当前行数据
// console.log(obj)
if (obj.event === 'add') {
//新增子集
layer.open({
type: 1, // page 层类型
area: ['550px', '480px'],
title: '新增资源模块',
shade: 0.6, // 遮罩透明度
shadeClose: false, // 点击遮罩区域,关闭弹层
maxmin: false, // 允许全屏最小化
anim: 0, // 0-6 的动画形式,-1 不开启
content: $(".addeditInfo").html()
});
//赋值
form.val('demo-val-filter', {
"modulename": data.name,
"modulecode": data.ModuleCode,
"Type": data.Type,
"ID": null,
"ParentId": data.ID
});
} else if (obj.event === 'edit') {
//编辑
//修改编辑职位
layer.open({
type: 1,
area: ['550px', '480px'],
title: '编辑资源模块',
shade: 0.6, // 遮罩透明度
shadeClose: false, // 点击遮罩区域,关闭弹层
maxmin: false, // 允许全屏最小化
anim: 0, // 0-6 的动画形式,-1 不开启
content: $('.addeditInfo').html(),
success: function () {
$.ajax({
url: '/ResourceManage/GetEditData',
data: { nodeId: data.ID },
success: function (res) {
// 填充数据,处理父节点不存在的情况
form.val('demo-val-filter', {
"modulename": res.parentName || data.name, // 父节点不存在时显示自身名称
"modulecode": res.parentCode || data.ModuleCode, // 父节点不存在时显示自身代码
"Type": data.Type,
"newname": data.name,
"newcode": data.ModuleCode,
"ID": res.ID,
"ParentId": res.parentID
});
}
});
}
});
} else {
layer.confirm('真的删除行 [' + data.name + '] 么', function (index) {
obj.del(); // 删除对应行(tr)的DOM结构
layer.close(index);
// 向服务端发送删除指令
$.ajax({
url: '/ResourceManage/DelInfo',
type: 'post',
data: { id: data.ID },
success: function (res) {
if (res.code == 0) {
layer.msg(res.msg, { icon: 6, time: 1500 }, function () {
Search();
})
} else {
layer.msg(res.msg, { icon: 5, time: 1500 })
}
}
})
});
}
});
// 提交事件
form.on('submit(demo1)', function (data) {
var field = data.field; // 获取表单字段值
// 此处可执行 Ajax 等操作
$.ajax({
url: '/ResourceManage/Add',
type: 'post',
data: field,
success: function (res) {
if (res.code == 0) {
layer.msg(res.msg, { icon: 6, time: 3000 }, function () {
layer.closeAll(); // 关闭所有类型的层
Search();
});
} else {
layer.msg(res.msg, { icon: 5, time: 2000 });
}
}
})
return false; // 阻止默认 form 跳转
});
// 提交事件
form.on('submit(demo2)', function (data) {
var field = data.field; // 获取表单字段值
var leve = data.leve;
var ID = data.ID;
var ParentId = data.ParentId;
// 此处可执行 Ajax 等操作
$.ajax({
url: '/ResourceManage/AddTreeInfo',
type: 'post',
data: { newname: field.newname, newcode: field.newcode, Type: field.Type, ID: field.ID, pid: field.ParentId },
success: function (res) {
if (res.code == 0) {
layer.msg(res.msg, { icon: 6, time: 3000 }, function () {
layer.closeAll(); // 关闭所有类型的层
Search();
});
} else {
layer.msg(res.msg, { icon: 5, time: 2000 });
}
}
})
return false; // 阻止默认 form 跳转
});
});
//重载,模糊查询
//重载,模糊查询
function Search() {
var nameVal = $('input[name="eumname"]').val().trim();
// 完整重载 - 所有属性属性(options)均可参与到重载中
SearchtreeTable.reload({
where: { // 传递数据异步请求时携带的字段
eumname: nameVal,
},
});
}
//添加
function Add() {
// 在此处输入 layer 的任意代码
layer.open({
type: 1, // page 层类型
area: ['550px', '350px'],
title: '新增资源模块',
shade: 0.6, // 遮罩透明度
shadeClose: true, // 点击遮罩区域,关闭弹层
maxmin: true, // 允许全屏最小化
anim: 0, // 0-6 的动画形式,-1 不开启
content: $(".editInfo").html()
});
}
</script>
</body>
</html>
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using WebApplication1.Models;
namespace WebApplication1.Controllers
{
[LoginActionFitter]
public class ResourceManageController : Controller
{
AoutEntities1 db = new AoutEntities1();
ReturnJsonData jsonData = new ReturnJsonData();
ReturnListJsonData orgTreeList = new ReturnListJsonData();
// GET:
public ActionResult Index()
{
return View();
}
#region 查询
///
/// 模糊查询
///
///
///
///
/// <returns></returns>
public ActionResult GetList(int page, int limit, string eumname)
{
//返回树形表格
List<object> retultlist = new List<object>();
//第一步 查找所有的一级菜单
var list = db.SystemResourceModule.Where(a => a.ParentId == Guid.Empty).ToList();
if (!string.IsNullOrEmpty(eumname))
{
list = db.SystemResourceModule.Where(a => a.ModuleName.Contains(eumname)).ToList();
foreach (var itme in list)
{
ReturnMenuListData obj = new ReturnMenuListData();
obj.ID = itme.ID;
obj.ParentId = itme.ParentId;
obj.name = itme.ModuleName;
obj.ModuleCode = itme.ModuleCode;
obj.Url = itme.Url;
obj.Type = itme.Type;
obj.CreateDate = itme.CreateDate;
obj.ModifyDate = itme.ModifyDate;
//验证是否还有有子集
obj.isParent = false;
obj.children = null;
retultlist.Add(obj);
}
}
else
{
list = db.SystemResourceModule.Where(a => a.ParentId == Guid.Empty).ToList();
//循环
foreach (var itme in list)
{
ReturnMenuListData obj = new ReturnMenuListData();
obj.ID = itme.ID;
obj.ParentId = itme.ParentId;
obj.name = itme.ModuleName;
obj.ModuleCode = itme.ModuleCode;
obj.Url = itme.Url;
obj.Type = itme.Type;
obj.CreateDate = itme.CreateDate;
obj.ModifyDate = itme.ModifyDate;
//验证是否还有有子集
obj.isParent = db.SystemResourceModule.Where(a => a.ParentId == itme.ID).ToList().Count > 0 ? true : false;
if (obj.isParent == true)
{
//查找所以子集
obj.children = BuildTree(list, itme.ID);
}
retultlist.Add(obj);
}
}
orgTreeList.code = 0;
orgTreeList.count = list.Count;
orgTreeList.data = retultlist;
return Json(orgTreeList, JsonRequestBehavior.AllowGet);
}
#endregion
#region 递归调用
///
/// 递归调用
///
///
///
/// <returns></returns>
private List<object> BuildTree(List<SystemResourceModule> list, Guid ID)
{
List<object> Treelist = new List<object>();
List<SystemResourceModule> childList = db.SystemResourceModule.Where(a => a.ParentId == ID).ToList();
//循环
foreach (var itme in childList)
{
ReturnMenuListData obj = new ReturnMenuListData();
obj.ID = itme.ID;
obj.ParentId = itme.ParentId;
obj.name = itme.ModuleName;
obj.ModuleCode = itme.ModuleCode;
obj.Url = itme.Url;
obj.CreateDate = itme.CreateDate;
obj.ModifyDate = itme.ModifyDate;
obj.isParent = db.SystemResourceModule.Where(a => a.ParentId == itme.ID).ToList().Count > 0 ? true : false;
obj.children = BuildTree(childList, itme.ID);
Treelist.Add(obj);
}
return Treelist;
}
#endregion
#region 查询父级及子集信息
public ActionResult GetEditData(Guid nodeId)
{
var current = db.SystemResourceModule.Find(nodeId);
if (current == null) return Json(new { success = false });
// 总公司的ParentId为null或自身(假设总公司ParentId=0或null)
var isRoot = current.ParentId == null || current.ParentId == Guid.Empty;
var parent = isRoot ? current : db.SystemResourceModule.Find(current.ParentId);
return Json(new
{
parentName = parent.ModuleName,
parentCode = parent.ModuleCode,
Type = current.Type,
orgName = current.ModuleName,
orgCode = current.ModuleCode,
ID = current.ID,
parentID = current.ParentId,
}, JsonRequestBehavior.AllowGet);
}
#endregion
#region 删除
///
/// 删除操作
///
///
/// <returns></returns>
public ActionResult DelInfo(Guid? id)
{
if (id == null)
{
jsonData.code = 1;
jsonData.msg = "删除失败,未找到当行数据";
}
else
{
//删除
var entity = db.SystemResourceModule.Find(id);
if (entity == null)
{
jsonData.code = 1;
jsonData.msg = "删除失败,未找到当前行数据";
}
else
{
db.SystemResourceModule.Remove(entity);
var result = db.SaveChanges();
if (result > 0)
{
jsonData.code = 0;
jsonData.msg = "删除成功";
}
else
{
jsonData.code = 1;
jsonData.msg = "删除失败,请联系管理员";
}
}
}
return Json(jsonData, JsonRequestBehavior.AllowGet);
}
#endregion
#region 新增菜单
///
/// 新增,修改
///
/// <returns></returns>
public ActionResult Add(SystemResourceModule org, string menuname, string menucode)
{
org.ModuleName = menuname;
org.ModuleCode = menucode;
org.ID = Guid.NewGuid();
org.Type = 0;
org.ParentId = Guid.Empty;
org.CreateDate = DateTime.Now;
org.ModifyDate = DateTime.Now;
db.SystemResourceModule.Add(org);
var result = db.SaveChanges();
if (result > 0)
{
jsonData.code = 0;
jsonData.msg = "新增资源模块成功";
}
else
{
jsonData.code = 1;
jsonData.msg = "新增失败,请联系管理员";
}
return Json(jsonData, JsonRequestBehavior.AllowGet);
}
#endregion
#region 新增修改
///
/// 新增,修改
///
/// <returns></returns>
public ActionResult AddTreeInfo(string newname, string newcode, int? Type, Guid? ID, Guid pid)
{
if (ID == null || ID == Guid.Empty)
{
// 新增逻辑:parentId为父节点ID(新增时需传递)
var newOrg = new SystemResourceModule
{
ID = Guid.NewGuid(),
ParentId = pid,
ModuleName = newname,
ModuleCode = newcode,
Type = Type + 1,
CreateDate = DateTime.Now,
ModifyDate = DateTime.Now
};
db.SystemResourceModule.Add(newOrg);
}
else
{
// 编辑逻辑:通过ID查找当前行(确保是当前行,而非总公司,依赖ID唯一性)
var entity = db.SystemResourceModule.Find(ID);
if (entity != null)
{
entity.ModuleName = newname;
entity.ModuleCode = newcode;
entity.ModifyDate = DateTime.Now;
db.Entry(entity).State = EntityState.Modified;
}
}
var result = db.SaveChanges();
if (result > 0)
{
jsonData.code = 0;
jsonData.msg = "保存成功";
}
else
{
jsonData.code = 1;
jsonData.msg = "保存失败,请联系管理员";
}
return Json(jsonData, JsonRequestBehavior.AllowGet);
}
#endregion
}
}数据展示不出来

public class OrganizationStructureController : Controller { AoutEntities db = new AoutEntities(); ReturnListJsonData jsonData = new ReturnListJsonData(); public ActionResult Index() { return View(); } #region 模糊查询 public ActionResult GetList(int page, int limit, string name, string code) { var list = db.OrganizationStructure.Where(a => a.IsDel == false).ToList(); if (!string.IsNullOrEmpty(name)) { list = list.Where(a => a.OrgName.Contains(name)).ToList(); } if (!string.IsNullOrEmpty(code)) { list = list.Where(a => a.OrgCode.Contains(code)).ToList(); } var offset = (page - 1) * limit; var data = list.OrderByDescending(a => a.ModifyDate).Skip(offset).Take(limit); jsonData.code = 0; jsonData.count = list.Count; jsonData.data = data; jsonData.msg = "success"; return Json(jsonData, JsonRequestBehavior.AllowGet); } #endregion #region 添加组织机构 [HttpPost] public ActionResult Add(OrganizationStructure org) { try { org.ID = Guid.NewGuid(); org.IsDel = false; org.CreateDate = DateTime.Now; org.ModifyDate = DateTime.Now; db.OrganizationStructure.Add(org); db.SaveChanges(); jsonData.code = 0; jsonData.msg = "添加成功"; } catch (Exception ex) { jsonData.code = 1; jsonData.msg = ex.Message; } return Json(jsonData); } #endregion #region 更新组织机构 [HttpPost] public ActionResult Update(OrganizationStructure org) { try { var model = db.OrganizationStructure.FirstOrDefault(a => a.ID == org.ID && a.IsDel == false); if (model != null) { model.OrgName = org.OrgName; model.OrgCode = org.OrgCode; model.Leve = org.Leve; model.ParentId = org.ParentId; model.ModifyDate = DateTime.Now; db.SaveChanges(); jsonData.code = 0; jsonData.msg = "更新成功"; } else { jsonData.code = 1; jsonData.msg = "未找到该组织机构"; } } catch (Exception ex) { jsonData.code = 1; jsonData.msg = ex.Message; } return Json(jsonData); } #endregion #region 删除组织机构(软删除) [HttpPost] public ActionResult Delete(Guid ID) { try { var model = db.OrganizationStructure.FirstOrDefault(a => a.ID == ID && a.IsDel == false); if (model != null) { model.IsDel = true; db.SaveChanges(); jsonData.code = 0; jsonData.msg = "删除成功"; } else { jsonData.code = 1; jsonData.msg = "未找到该组织机构"; } } catch (Exception ex) { jsonData.code = 1; jsonData.msg = ex.Message; } return Json(jsonData); } #endregion } 前端页面: @{ Layout = null; } <!DOCTYPE html> <html> <head> <script src="~/Scripts/layui/layui.js"></script> <script src="~/Scripts/jquery-3.4.1.js"></script> <style> body { padding: 10px 20px 20px 20px; width: 90% } .but { margin-top: -5px } </style> </head> <body> <fieldset class="layui-elem-field"> <legend> 首页 组织机构管理 </legend> <label class="layui-form-label">机构名称</label> <input type="text" name="name" id="name" autocomplete="off" class="layui-input"> <label class="layui-form-label">机构代码</label> <input type="text" name="code" id="code" autocomplete="off" class="layui-input"> <button type="button" class="layui-btn layui-btn-radius but" id="searchButton" onclick="Search()">查询</button> <button type="button" class="layui-btn layui-bg-blue but" onclick="AddOrg()">添加</button> </fieldset> <fieldset class="layui-elem-field"> <script type="text/html" id="toolDemo"> 编辑 删除 </script> </fieldset> <script> var tableIns; layui.use(['table', 'layer', 'form'], function () { var table = layui.table; var layer = layui.layer; // 创建渲染实例 tableIns = table.render({ elem: '#test', url: '/OrganizationStructure/GetList', page: true, cols: [[ { type: 'numbers', width: '15%', title: '序列号' }, { field: 'OrgName', width: '20%', title: '机构名称' }, { field: 'OrgCode', width: '20%', title: '机构代码' }, { field: 'Leve', width: '10%', title: '级别' }, { field: 'ParentId', width: '15%', title: '父节点ID' }, { field: 'ModifyDate', width: '20%', title: '修改时间', templet: function (d) { return formatDate(d.ModifyDate); } }, { title: '操作', width: '25%', templet: '#toolDemo' } ]], }); // 编辑删除事件 table.on('tool(test)', function (obj) { var data = obj.data; if (obj.event === 'edit') { EditOrg(data); } else if (obj.event === 'del') { DeleteOrg(data, obj); } }); }); function formatDate(dateStr) { if (!dateStr) return ''; var timestamp = parseInt(dateStr.replace(/\/Date$(\d+)$\//, '$1')); var date = new Date(timestamp); return date.getFullYear() + '-' + ('0' + (date.getMonth() + 1)).slice(-2) + '-' + ('0' + date.getDate()).slice(-2); } // 添加组织机构弹窗 function AddOrg() { layer.open({ type: 1, title: '添加组织机构', content: <label class="layui-form-label">机构名称</label> <input type="text" id="add_name" class="layui-input"> <label class="layui-form-label">机构代码</label> <input type="text" id="add_code" class="layui-input"> <label class="layui-form-label">级别</label> <input type="number" id="add_leve" class="layui-input"> <label class="layui-form-label">父节点ID</label> <input type="text" id="add_parentId" class="layui-input"> , btn: ['保存', '取消'], yes: function (index) { $.post('/OrganizationStructure/Add', { OrgName: $('#add_name').val(), OrgCode: $('#add_code').val(), Leve: $('#add_leve').val(), ParentId: $('#add_parentId').val() }, function (res) { if (res.code == 0) { layer.close(index); Search(); // 刷新列表 } else { layer.msg('操作失败:' + res.msg); } }); } }); } // 编辑组织机构弹窗 function EditOrg(data) { layer.open({ type: 1, title: '编辑组织机构', content: <label class="layui-form-label">机构名称</label> <input type="text" id="edit_name" value="${data.OrgName}" class="layui-input"> <label class="layui-form-label">机构代码</label> <input type="text" id="edit_code" value="${data.OrgCode}" class="layui-input"> <label class="layui-form-label">级别</label> <input type="number" id="edit_leve" value="${data.Leve}" class="layui-input"> <label class="layui-form-label">父节点ID</label> <input type="text" id="edit_parentId" value="${data.ParentId}" class="layui-input"> , btn: ['更新', '取消'], yes: function (index) { $.post('/OrganizationStructure/Update', { ID: data.ID, OrgName: $('#edit_name').val(), OrgCode: $('#edit_code').val(), Leve: $('#edit_leve').val(), ParentId: $('#edit_parentId').val() }, function (res) { if (res.code == 0) { layer.close(index); Search(); } else { layer.msg('更新失败:' + res.msg); } }); } }); } // 删除组织机构 function DeleteOrg(data, obj) { layer.confirm('真的删除行 [' + data.OrgName + '] 么', function (index) { $.post('/OrganizationStructure/Delete', { ID: data.ID }, function (res) { if (res.code == 0) { obj.del(); layer.close(index); } else { layer.msg('删除失败:' + res.msg); } }); }); } // 查询重载 function Search() { var nameVal = $('input[name="name"]').val().trim(); var codeVal = $('input[name="code"]').val().trim(); tableIns.reload({ where: { name: nameVal, code: codeVal }, page: { curr: 1 } // 重置分页 }); } </script> </body> </html> 帮我整理这两个


@{ Layout = null; } <!DOCTYPE html> <html> <head> <script src="~/Scripts/layui/layui.js"></script> <script src="~/Scripts/jquery-3.4.1.js"></script> <style> body { padding: 10px 20px 20px 20px; width: 97% } .but { margin-top: -5px } .editInfo { display: none; } </style> </head> <body> <fieldset class="layui-elem-field"> <legend> 基本信息管理 员工管理 </legend> <label class="layui-form-label" style="width: 60px;">员工账号</label> <input type="text" name="code" id="code" autocomplete="off" class="layui-input"> <label class="layui-form-label" style="width: 60px;">员工姓名</label> <input type="text" name="name" id="name" autocomplete="off" class="layui-input"> <button type="button" class="layui-btn layui-btn-radius but" id="searchButton" onclick="Search()">查询</button> <button type="button" class="layui-btn layui-bg-blue but" onclick="Add()">添加</button> <button type="button" class="layui-btn layui-btn-danger layui-btn-radius">批量删除</button> <button type="button" class="layui-btn layui-btn-danger layui-btn-radius">导出</button> <button type="button" class="layui-btn but" id="searchButton">导入文件</button> </fieldset> <fieldset class="layui-elem-field"> <script type="text/html" id="toolDemo"> 编辑 删除 <form class="layui-form" id="editForm"> <input type="hidden" name="ID" id="ID"> <label class="layui-form-label">员工账号</label> <input type="text" name="UserCode" required lay-verify="required" class="layui-input"> <label class="layui-form-label">员工姓名</label> <input type="text" name="UserName" required lay-verify="required" class="layui-input"> <label class="layui-form-label">性别</label> <input type="radio" name="Sex" id="man" value="true" title="男" checked> <input type="radio" name="Sex" value="false" title="女"> <label class="layui-form-label">出生日期</label> <input type="text" name="BirthDay" id="BirthDay" class="layui-input"> <label class="layui-form-label">邮箱</label> <input type="text" name="Email" class="layui-input"> <label class="layui-form-label">电话</label> <input type="text" name="Tel" class="layui-input"> <label class="layui-form-label">创建时间</label> <input type="text" name="CreateDate" id="CreateDate" class="layui-input"> <label class="layui-form-label">地址</label> <input type="text" name="Address" class="layui-input"> <button class="layui-btn" lay-submit lay-filter="saveBtn">保存</button> <button type="reset" class="layui-btn layui-btn-primary">重置</button> </form> </script> </fieldset> <script> var tableIns; var form; var isEdit; layui.use(['table', 'form','laydate'], function () { var table = layui.table; form = layui.form; // 修正:移除重复的var声明 var laydate = layui.laydate; // 创建渲染实例 tableIns = table.render({ elem: '#test', url: '/UserManagem/GetList', page: true, cols: [[ { type: 'checkbox', width: '5%', title: '' }, { type: 'numbers', width: '5%', title: '序号' }, { field: 'UserCode', width: '8%', title: '员工账号' }, { field: 'UserName', width: '8%', title: '员工姓名' }, { field: 'Sex', width: '8%', title: '性别', templet: function (d) { if (d.Sex == true) { return "男" } else { return "女"; } } }, { field: 'BirthDay', width: '8%', title: '出生日期', templet: function (d) { return convertJsonDate(d.BirthDay); } }, { field: 'BirthDay', width: '8%', title: '年龄', templet: function (d) { return calculateAge(d.BirthDay); } }, { field: 'Status', width: '8%', title: '是否离职', templet: function (d) { if (d.Status == true) { return "离职"; } else { return "在职"; } } }, { field: 'Email', width: '8%', title: '邮箱' }, { field: 'Tel', width: '8%', title: '电话' }, { field: 'CreateDate', width: '8%', title: '创建时间', templet: function (d) { return convertJsonDate(d.CreateDate); } }, { field: 'Address', width: '8%', title: '员工住址' }, { title: '操作', width: '10.5%', templet: '#toolDemo' } ]], done: function (res, curr, count) { // 数据渲染完成后的回调 if (res.code !== 0) { // 假设0是成功状态码 layer.msg('数据加载失败: ' + res.msg, { icon: 5 }); } }, error: function () { // 请求错误的回调 layer.msg('网络请求错误,请检查接口', { icon: 5 }); } }); //编辑,删除 table.on('tool(test)', function (obj) { // 双击 toolDouble var data = obj.data; // 获得当前行数据 var field = obj.field; // 得到字段 var value = obj.value; // 得到修改后的值 var data = obj.data; // 得到所在行所有键值 // console.log(obj) if (obj.event === 'edit') { layer.open({ type: 1, area: ['500px', '400px'], // 增加高度预留 title: '编辑员工信息', content: $(".editInfo").html(), success: function (layero, index) { // 数据绑定(注意格式转换) laydate.render({ elem: '#BirthDay', // 绑定元素 format: 'yyyy-MM-dd' // 日期格式 }); laydate.render({ elem: '#CreateDate', // 绑定元素 format: 'yyyy-MM-dd' // 日期格式 }); form.val('editForm', { "UserCode": data.UserCode, "UserName": data.UserName, "Sex": data.Sex ? "true" : "false", // 统一转为字符串 "BirthDay": convertJsonDate(data.BirthDay), "Email": data.Email, "Tel": data.Tel, "Address": data.Address }); // 动态渲染表单元素(重要!) form.render(); } }); } else { layer.confirm('真的删除员工 [' + data.UserCode + '] 么', function (index) { obj.del(); // 删除对应行(tr)的DOM结构 layer.close(index); // 向服务端发送删除指令 $.ajax({ url: '/UserManagem/DelInfo', type: 'post', data: { id: data.ID }, success: function (res) { if (res.code == 0) { layer.msg(res.msg, { icon: 6, time: 1500 }, function () { Search(); }) } else { layer.msg(res.msg, { icon: 5, time: 1500 }) } } }) }); } }); }); // 处理日期格式函数 function convertJsonDate(jsonDate) { if (!jsonDate) return ''; try { // 提取时间戳 const timestamp = parseInt(jsonDate.match(/\d+/)[0]); // 创建 Date 对象 const date = new Date(timestamp); // 获取年、月、日 const year = date.getFullYear(); const month = (date.getMonth() + 1).toString().padStart(2, '0'); const day = date.getDate().toString().padStart(2, '0'); // 返回格式化后的日期 return ${year}-${month}-${day}; } catch (e) { console.error('日期格式化错误:', e); return jsonDate; } } //重载,模糊查询 function Search() { var nameVal = $('input[name="name"]').val().trim(); var codeVal = $('input[name="code"]').val().trim(); // 完整重载 - 所有属性属性(options)均可参与到重载中 tableIns.reload({ where: { // 传递数据异步请求时携带的字段 name: nameVal, code: codeVal }, height: 500 // 重设高度 }); } function calculateAge(jsonBirthDate) { if (!jsonBirthDate) return ''; try { // 先转换为日期格式 const birthDate = convertJsonDateToDate(jsonBirthDate); const today = new Date(); let age = today.getFullYear() - birthDate.getFullYear(); const monthDiff = today.getMonth() - birthDate.getMonth(); if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) { age--; } return age; } catch (e) { console.error('年龄计算错误:', e); return ''; } } // 辅助函数:将JSON日期转换为Date对象 function convertJsonDateToDate(jsonDate) { const timestamp = parseInt(jsonDate.match(/\d+/)[0]); return new Date(timestamp); } </script> </body> </html> 完成添加的弹窗

@{ Layout = null; } <!DOCTYPE html> <html> <head> <script src="~/Scripts/layui/layui.js"></script> <script src="~/Scripts/jquery-3.4.1.js"></script> <style> body { padding: 10px 20px 20px 20px; width: 97% } .but { margin-top: -5px } .editInfo { display: none; } </style> </head> <body> <fieldset class="layui-elem-field"> <legend> 基本信息管理 员工管理 </legend> <label class="layui-form-label" style="width: 60px;">员工账号</label> <input type="text" name="code" id="code" autocomplete="off" class="layui-input"> <label class="layui-form-label" style="width: 60px;">员工姓名</label> <input type="text" name="name" id="name" autocomplete="off" class="layui-input"> <button type="button" class="layui-btn layui-btn-radius but" id="searchButton" onclick="Search()">查询</button> <button type="button" class="layui-btn layui-bg-blue but" onclick="Add()">添加</button> <button type="button" class="layui-btn layui-btn-danger layui-btn-radius">批量删除</button> <button type="button" class="layui-btn layui-btn-danger layui-btn-radius">导出</button> <button type="button" class="layui-btn but" id="searchButton">导入文件</button> </fieldset> <fieldset class="layui-elem-field"> <script type="text/html" id="toolDemo"> 编辑 删除 <form class="layui-form" id="editForm"> <input type="hidden" name="ID" id="ID"> <label class="layui-form-label">员工账号</label> <input type="text" name="UserCode" required lay-verify="required" class="layui-input"> <label class="layui-form-label">员工姓名</label> <input type="text" name="UserName" required lay-verify="required" class="layui-input"> <label class="layui-form-label">性别</label> <input type="radio" name="Sex" value="true" title="男" checked> <input type="radio" name="Sex" value="false" title="女"> <label class="layui-form-label">出生日期</label> <input type="text" name="BirthDay" id="BirthDay" class="layui-input"> <label class="layui-form-label">邮箱</label> <input type="text" name="Email" class="layui-input"> <label class="layui-form-label">电话</label> <input type="text" name="Tel" class="layui-input"> <label class="layui-form-label">地址</label> <input type="text" name="Address" class="layui-input"> <label class="layui-form-label">状态</label> <input type="checkbox" name="Status" lay-skin="switch" lay-text="离职|在职"> <button class="layui-btn" lay-submit lay-filter="saveBtn">保存</button> <button type="reset" class="layui-btn layui-btn-primary">重置</button> </form> </script> </fieldset> <script> var tableIns; var form; var isEdit; layui.use(['table', 'form',], function () { var table = layui.table; form = layui.form; // 修正:移除重复的var声明 // 创建渲染实例 tableIns = table.render({ elem: '#test', url: '/UserManagem/GetList', page: true, cols: [[ { type: 'checkbox', width: '5%', title: '' }, { type: 'numbers', width: '5%', title: '序号' }, { field: 'UserCode', width: '8%', title: '员工账号' }, { field: 'UserName', width: '8%', title: '员工姓名' }, { field: 'Sex', width: '8%', title: '性别', templet: function (d) { return d.Sex ? "男" : "女"; // 修正:使用大写的Sex } }, { field: 'BirthDay', width: '8%', title: '出生日期', templet: function (d) { return convertJsonDate(d.BirthDay); } }, { field: 'BirthDay', width: '8%', title: '年龄', templet: function (d) { return calculateAge(d.BirthDay); } }, { field: 'Status', width: '8%', title: '是否离职', templet: function (d) { return d.Status ? "离职" : "在职"; } }, { field: 'Email', width: '8%', title: '邮箱' }, { field: 'Tel', width: '8%', title: '电话' }, { field: 'CreateDate', width: '8%', title: '创建时间', templet: function (d) { return convertJsonDate(d.CreateDate); } }, { field: 'Address', width: '8%', title: '员工住址' }, { title: '操作', width: '10.5%', templet: '#toolDemo' } ]], done: function (res, curr, count) { // 数据渲染完成后的回调 if (res.code !== 0) { // 假设0是成功状态码 layer.msg('数据加载失败: ' + res.msg, { icon: 5 }); } }, error: function () { // 请求错误的回调 layer.msg('网络请求错误,请检查接口', { icon: 5 }); } }); //编辑,删除 table.on('tool(test)', function (obj) { // 双击 toolDouble var data = obj.data; // 获得当前行数据 var field = obj.field; // 得到字段 var value = obj.value; // 得到修改后的值 var data = obj.data; // 得到所在行所有键值 // console.log(obj) if (obj.event === 'edit') { //编辑 //修改编辑职位 layer.open({ type: 1, // page 层类型 area: ['500px', '300px'], title: '编辑职位', shade: 0.6, // 遮罩透明度 shadeClose: false, // 点击遮罩区域,关闭弹层 maxmin: false, // 允许全屏最小化 anim: 0, // 0-6 的动画形式,-1 不开启 content: $(".editInfo").html() }); //赋值 form.val('demo-val-filter', { "jobname": data.JobName, "jobcode": data.JobCode, "ID": data.ID }); } else { layer.confirm('真的删除员工 [' + data.UserCode + '] 么', function (index) { obj.del(); // 删除对应行(tr)的DOM结构 layer.close(index); // 向服务端发送删除指令 $.ajax({ url: '/UserManagem/DelInfo', type: 'post', data: { id: data.ID }, success: function (res) { if (res.code == 0) { layer.msg(res.msg, { icon: 6, time: 1500 }, function () { Search(); }) } else { layer.msg(res.msg, { icon: 5, time: 1500 }) } } }) }); } }); }); // 处理日期格式函数 function convertJsonDate(jsonDate) { if (!jsonDate) return ''; try { // 提取时间戳 const timestamp = parseInt(jsonDate.match(/\d+/)[0]); // 创建 Date 对象 const date = new Date(timestamp); // 获取年、月、日 const year = date.getFullYear(); const month = (date.getMonth() + 1).toString().padStart(2, '0'); const day = date.getDate().toString().padStart(2, '0'); // 返回格式化后的日期 return ${year}-${month}-${day}; } catch (e) { console.error('日期格式化错误:', e); return jsonDate; } } //表单提交事件,新增和编辑 form.on('submit(demo1)', function (data) { var field = data.field; // 获取表单字段值 $.ajax({ url: '/UserManagem/Add', type: 'post', data: field, success: function (res) { if (res.code == 0) { layer.msg(res.msg, { icon: 6, time: 3000 }, function () { layer.closeAll(); // 关闭所有类型的层 Search(); }); } else { layer.msg(res.msg, { icon: 5, time: 2000 }); } } }) }) //重载,模糊查询 function Search() { var nameVal = $('input[name="name"]').val().trim(); var codeVal = $('input[name="code"]').val().trim(); // 完整重载 - 所有属性属性(options)均可参与到重载中 tableIns.reload({ where: { // 传递数据异步请求时携带的字段 name: nameVal, code: codeVal }, height: 500 // 重设高度 }); } // 处理日期格式函数 function convertJsonDate(jsonDate) { // 提取时间戳 const timestamp = parseInt(jsonDate.match(/\d+/)[0]); // 创建 Date 对象 const date = new Date(timestamp); // 获取年、月、日 const year = date.getUTCFullYear(); const month = (date.getUTCMonth() + 1).toString().padStart(2, '0'); const day = date.getUTCDate().toString().padStart(2, '0'); // 返回格式化后的日期 return ${year}-${month}-${day}; } //新增职位 function Add() { // 在此处输入 layer 的任意代码 layer.open({ type: 1, // page 层类型 area: ['500px', '300px'], title: '新建职位', shade: 0.6, // 遮罩透明度 shadeClose: false, // 点击遮罩区域,关闭弹层 maxmin: false, // 允许全屏最小化 anim: 0, // 0-6 的动画形式,-1 不开启 content: $(".editInfo").html() }); } function calculateAge(jsonBirthDate) { if (!jsonBirthDate) return ''; try { // 先转换为日期格式 const birthDate = convertJsonDateToDate(jsonBirthDate); const today = new Date(); let age = today.getFullYear() - birthDate.getFullYear(); const monthDiff = today.getMonth() - birthDate.getMonth(); if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) { age--; } return age; } catch (e) { console.error('年龄计算错误:', e); return ''; } } // 辅助函数:将JSON日期转换为Date对象 function convertJsonDateToDate(jsonDate) { const timestamp = parseInt(jsonDate.match(/\d+/)[0]); return new Date(timestamp); } </script> </body> </html> 实现男女动态选择 以及状态选择

@{ Layout = null; } <!DOCTYPE html> <html> <head> <script src="~/Scripts/layui/layui.js"></script> <script src="~/Scripts/jquery-3.4.1.js"></script> <style> body { padding: 10px 20px 20px 20px; width: 90% } .but { margin-top: -5px } </style> </head> <body> <fieldset class="layui-elem-field"> <legend> 首页 职位管理 </legend> <label class="layui-form-label">职位名称</label> <input type="text" name="name" id="name" autocomplete="off" class="layui-input"> <label class="layui-form-label">职位代码</label> <input type="text" name="code" id="code" autocomplete="off" class="layui-input"> <button type="button" class="layui-btn layui-btn-radius but" id="searchButton" onclick="Search()">查询</button> <button type="button" class="layui-btn layui-bg-blue but" onclick="AddJob()">添加</button> </fieldset> <fieldset class="layui-elem-field"> <script type="text/html" id="toolDemo"> 编辑 删除 </script> </fieldset> <script> var tableIns; layui.use(['table', 'layer', 'form'], function () { var table = layui.table; var layer = layui.layer; // 创建渲染实例 tableIns = table.render({ elem: '#test', url: '/JobManagem/GetList', page: true, cols: [[ { type: 'numbers', width: '15%', title: '序列号' }, { field: 'JobName', width: '20%', title: '职位名称' }, { field: 'JobCode', width: '20%', title: '职位代码' }, { field: 'ModifyDate', width: '20%', title: '修改时间', templet: function (d) { return formatDate(d.ModifyDate); } }, { title: '操作', width: '25%', templet: '#toolDemo' } ]], }); // 编辑删除事件 table.on('tool(test)', function (obj) { var data = obj.data; if (obj.event === 'edit') { EditJob(data); } else if (obj.event === 'del') { DeleteJob(data, obj); } }); }); function formatDate(dateStr) { if (!dateStr) return ''; // 提取时间戳(兼容 "/Date(123456789)/" 格式) var timestamp = parseInt(dateStr.replace(/\/Date$(\d+)$\//, '$ 1')); var date = new Date(timestamp); return date.getFullYear() + '-' + ('0' + (date.getMonth() + 1)).slice(-2) + '-' + // 月份从0开始,需+1 ('0' + date.getDate()).slice(-2); } // 添加职位弹窗 function AddJob() { layer.open({ type: 1, title: '添加职位', content: <label class="layui-form-label">职位名称</label> <input type="text" id="add_name" class="layui-input"> <label class="layui-form-label">职位代码</label> <input type="text" id="add_code" class="layui-input"> , btn: ['保存', '取消'], yes: function (index) { $.post('/JobManagem/AddJob', { JobName: $('#add_name').val(), JobCode: $('#add_code').val() }, function (res) { if (res.code == 0) { layer.close(index); Search(); // 刷新列表 } else { layer.msg('操作失败:' + res.msg); } }); } }); } // 编辑职位弹窗 function EditJob(data) { layer.open({ type: 1, title: '编辑职位', content: <label class="layui-form-label">职位名称</label> <input type="text" id="edit_name" value="${data.JobName}" class="layui-input"> <label class="layui-form-label">职位代码</label> <input type="text" id="edit_code" value="${data.JobCode}" class="layui-input"> , btn: ['更新', '取消'], yes: function (index) { $.post('/JobManagem/UpdateJob', { ID: data.ID, JobName: $('#edit_name').val(), JobCode: $('#edit_code').val() }, function (res) { if (res.code == 0) { layer.close(index); Search(); } else { layer.msg('更新失败:' + res.msg); } }); } }); } // 删除职位 function DeleteJob(data, obj) { layer.confirm('真的删除行 [' + data.JobName + '] 么', function (index) { $.post('/JobManagem/DeleteJob', { ID: data.ID }, function (res) { if (res.code == 0) { obj.del(); layer.close(index); } else { layer.msg('删除失败:' + res.msg); } }); }); } // 查询重载 function Search() { var nameVal = $('input[name="name"]').val().trim(); var codeVal = $('input[name="code"]').val().trim(); tableIns.reload({ where: { name: nameVal, code: codeVal }, page: { curr: 1 } // 重置分页 }); } </script> </body> </html> 用更简单的代码进行优化



