Kendo 左右菜单效果

效果图

代码

<%@ page import="org.nome.util.StringUtil" %>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@include file="/static/common/ace14commonJsForKendo.jsp"%>
<!DOCTYPE html>

<html>
<head>
	<title></title>

</head>
<body>
	<div id="splitterBody">

		<section id="splitterSection">
			<nav class="justify-content-center align-items-center" id="splitterNav">
				<div class="card w-100" style="border: none;">
					<h6 class="card-header" style="min-height:53px;">
						<span style="font-size: 16px; display: block; padding-top: 4px;">应用列表</span>
					</h6>
					<div class="card-body" >
						<p>
							<span class="k-textbox k-space-left w-100">
								<input id="keywords" name="keywords" type="text" placeholder="关键字搜索"/>
								<a class="k-icon k-i-search ml-1" href="javascript:;"></a>
							</span>
						</p>
						<div id="treeView"></div>
					</div>
				</div>
			</nav>
			<main class="justify-content-center align-items-center" id="splitterMain">
				<div class="card-body" style="padding: 0px; margin-left:2px;">
					<div id="treeDetail"></div>
				</div>
			</main>

		</section>

	</div>

<script id="editTemplate" type="text/x-kendo-template">
	<div class="card">
		<h6 class="card-header" style="min-height:50px;">
			<table style="width: 100%;">
				<tr>
					<td style="width: 50%; text-align: left; vertical-align: top;">
						<span class="add hide" style="font-size: 16px; display: block; padding-top: 0px;">新增</span>
						<span class="edit hide" style="font-size: 16px;display: block; padding-top: 0px;">编辑</span>
						<button class="k-button k-button-icontext theme-m-box view" onclick="createTree();"><span class="k-icon k-i-add"></span>新增</button>
					</td>
					<td style="width: 50%; text-align: right;">
						<button class="k-button k-button-icontext k-state-selected add hide" onclick="saveCreateTree();"><span class="k-icon k-i-save"></span>保存</button>
						<button class="k-button k-button-icontext k-state-selected edit hide" onclick="saveUpdateTree();"><span class="k-icon k-i-check"></span>更新</button>
						<button class="k-button k-button-icontext theme-s-box add edit hide" onclick="cancelTree();"><span class="k-icon k-i-cancel"></span>取消</button>

					</td>
				</tr>
			</table>
			</h6>
		<div class="card-body">
			<form>

				<input type="hidden" name="OptType" id="OptType" />
				<input type="hidden" name="AREA_ID" id="AREA_ID" value="#= AREA_ID #" />
				<input type="hidden" name="CREATE_BY" id="CREATE_BY" />
				<input type="hidden" name="ENABLED" id="ENABLED" value="1"/>
				<table class="table table-bordered">

				<tr>
					<td class="tdgray wd-150 wd-left">应用领域名称:</td>
					<td>
						<div class="mt-1 view">#= AREA_NAME #</div>
						<input class="k-textbox w-100 add edit hide" name="AREA_NAME" type="text" value="#= AREA_NAME #" required data-required-msg="请输入应用领域名称">

						<span class="k-invalid-msg" data-for="AREA_NAME"></span>
					</td>
				</tr>
					<tr>
						<td class="tdgray wd-150 wd-left">应用领域编码:</td>
					<td>
						<div class="mt-1 view">#= AREA_CODE #</div>

						<input class="k-textbox w-90 add  edit hide" name="AREA_CODE" type="text" value="#= AREA_CODE #">

							<button type="button" class="k-button k-button-icontext w-9 theme-m-box hide add  edit" onclick="generateCode();">自动生成</button>
					</td>
				</tr>
					<tr>
						<td class="tdgray wd-150 wd-left">访问路径:</td>
					<td>
						<div class="mt-1 view">#= AREA_DOMAIN #</div>

						<input class="k-textbox w-100 add  edit hide" name="AREA_DOMAIN" type="text" value="#= AREA_DOMAIN #">
					</td>
				</tr>
					<tr>
						<td class="tdgray wd-150 wd-left">排序:</td>
					<td>
						<div class="mt-1 view">#= AREA_ORDER #</div>
						<input class="k-textbox w-100 add edit hide" name="AREA_ORDER" type="text" value="#= AREA_ORDER #" checkexpession="NumOrNull" validationMessage="序号不能为空或者非数字"/>
						<span data-for="AREA_ORDER" class="k-invalid-msg"></span>
					</td>
				</tr>
					<tr>
						<td class="tdgray wd-150 wd-left">备注说明:</td>
					<td>
						<div class="mt-1 view">#= REMARKS #</div>
						<input class="k-textbox w-100 add edit hide" name="REMARKS" type="text" value="#= REMARKS #">
					</td>
				</tr>
				</table>
			</form>
		</div>
		<div class="card-footer text-center">
			<button class="k-button k-button-icontext k-state-selected view" onclick="updateTree();"><span class="k-icon k-i-edit"></span>编辑当前节点</button>
			<button class="k-button k-button-icontext theme-s-box view" onclick="destroyTree('#= AREA_ID #');"><span class="k-icon k-i-close"></span>删除当前节点</button>

		</div>
	</div>
</script>
<script>
	function defUI(){
		var masterMap = masterMap = {};
		masterMap.AREA_ID = '';
		masterMap.AREA_NAME = '';
		masterMap.AREA_CODE = '';
		masterMap.AREA_DOMAIN = '';
		masterMap.REMARKS = '';
		masterMap.AREA_ORDER = '';
		masterMap.ENABLED = '';
		masterMap.CREATE_BY = _userLoginName;
		$('#treeDetail').html(kendo.template($('#editTemplate').html())(masterMap));
		cancelTree();
		$(".card-footer").hide();
	}

	function generateCode(){
		var name = $("[name='AREA_NAME']").val();
		if(name == '') return;

		//name = encodeURI(name);
		name = encodeURI(name);

		$.ajax({
			url : '${basePath}appResource/getCodeByName.do',
			data : {name : name},
			cache : false,
			type : 'POST',
			dataType : 'json',
			success:function(data){
				$("[name='AREA_CODE']").val(data.code);

			},
			error:function(e){
				alertMsg(e, 'warning');
			}
		});
	}
	var treeView;
	$(function(){

		defUI();
		$('#splitterBody').height($('html').height()).kendoSplitter({
			orientation: 'vertical',
			panes: [
				{
					collapsible: true,
					resizable: false,
					scrollable: false,
					size: '0%'
				},
				{
					resizable: false,
					size: '100%'
				},
				{
					collapsible: true,
					resizable: false,
					scrollable: false,
					size: '0%'
				}
			]
		});
		$('#splitterSection').kendoSplitter({
			panes: [
				{
					collapsible: true,
					max: '30%',
					min: '10%',
					size: '20%'
				},
				{
					size: '70%'
				}
			]
		});
		// 获取数据源生成树形
		treeView = $('#treeView').kendoTreeView({
			dataSource: {
				transport: {

					read: function (options) {

						$.post('${basePath}appArea/list.do',function(data){


							data.rows =  new NewTreeHelper(data.rows).dataTransferer();
							options.success(data);
						}) ;
					}
				},
				schema: {
					data: 'rows',
					model: {
						id: 'ID',
						children: 'children'

					}
				}
			},
			template:
					'# var node = JSON.stringify(item).replace(/\\"/g, "\'"); #' +
					'<a class="k-link" href="javascript:editTree(#= node #);">#= item.text #</a>'
			// ,dataBound: function () {
			// 	if ($('#treeView a.k-state-selected').length === 1) {
			// 		location.href = $('#treeView a.k-state-selected').attr('href');
			// 	} else if ($('#treeView span.k-state-selected').length === 1) {
			// 		location.href = $('#treeView span.k-state-selected a').attr('href');
			// 	}
			// }
		}).data('kendoTreeView');
		// 关键字搜索
		$('#keywords').keyup(function () {

			treeView.expand($('#treeView li'));
			if ($(this).val() !== '') {
				$('#treeView li').hide();
				$('#treeView .k-in:contains(' + $(this).val() + ')').each(function () {
					$(this).parents('li').show();
				});
			} else {
				$('#treeView li').show();
			}
		});
	});
	// 增保存
	function saveCreateTree() {
		if ($('#treeDetail form').kendoValidator($.fn.ValidateConfig).data('kendoValidator').validate()) {
			$("#AREA_ID").val("");
			var form=$('#treeDetail form').serializeObject();
			$.post('${basePath}appArea/save.do',form,function(data){
				alertMsg('&nbsp;&nbsp;新增成功', 'success');
				refreshTree();
			});
		}
	}
	// 改
	function updateTree() {
		$("#OptType").val("Edit");
		$('#treeDetail .view').hide();
		$('#treeDetail .add').hide();
		$('#treeDetail .edit').show();
		$('#treeDetail input.add').prop('disabled', true);
		$('#treeDetail input.edit').prop('disabled', false);
		$(".card-footer").hide();
	}
	// 删
	function destroyTree(id) {
		confirmMsg('删除确认', '&nbsp;&nbsp;你确定要删除吗?', 'question', function () {
			$.post("${basePath}appArea/delete.do",{areaId : id},function (){
				refreshTree();
				defUI();
			});

		});
	}
	// 改保存
	function saveUpdateTree() {
		if ($('#treeDetail form').kendoValidator($.fn.ValidateConfig).data('kendoValidator').validate()) {

			var form=$('#treeDetail form').serializeObject();
			$.post('${basePath}appArea/save.do',form,function(data){
				alertMsg('&nbsp;&nbsp;修改成功', 'success');
				refreshTree();
			});
		}
	}
	// 取消
	function cancelTree() {
		$('#treeDetail .add').hide();
		$('#treeDetail .edit').hide();
		$('#treeDetail .view').show();
		$(".card-footer").show();
	}
	// 增删改查
	function editTree(node) {

		//查询表单信息
		$.ajax({
			url :'${basePath}appArea/edit.do',
			type : "POST",
			cache : false,
			dataType : "json",
			data : {
				areaId : node.ID
			},
			success:function(data) {
				var masterMap = data.masterMap;
				if(masterMap == null){
					masterMap = {};
					masterMap.AREA_ID = '';
					masterMap.AREA_ORDER = '1';
				}
				masterMap.ENABLED = '1';
				masterMap.CREATE_BY = _userLoginName;
				$('#treeDetail').html(kendo.template($('#editTemplate').html())(masterMap));
				cancelTree();

			}
		});
	}

	// 增
	function createTree() {
		$(".card-footer").show();
		$("#OptType").val("Add");
		$('#treeDetail .view').hide();
		$('#treeDetail .edit').hide();
		$('#treeDetail .add').show();
		$('#treeDetail input.edit').prop('disabled', true);
		$('#treeDetail input.add').prop('disabled', false);
		$(".card-footer").hide();
	}
</script>
</body>
</html>

自定义验证

 //配置验证
   $.fn.ValidateConfig={
      rules: {
         isNotNull: function (input) {
            if (input.is("[checkexpession=NotNull]")) {
               var value = input.val();
               return $.trim(value)!="";
            }
            return true;
         },
         isNum: function (input) {
            if (input.is("[checkexpession=Num]")) {
               var value = input.val();
               if($.trim(value)==""){
                  return true;
               }
               var regex = /^[-+]?\d+$/;
               return regex.test($.trim(value));
            }
            return true;
         },
         isNumOrNull: function (input) {

            if (input.is("[checkexpession=NumOrNull]")) {
               debugger;
               var value = input.val();
               if($.trim(value)==""){
                  return false;
               }
               var regex = /^[-+]?\d+$/;
               return regex.test($.trim(value));
            }
            return true;
         },
         isEmail: function (input) {
            if (input.is("[checkexpession=Email]")) {
               var value = input.val();
               if($.trim(value)==""){
                  return true;
               }
               var regex = /^\w{3,}@\w+(\.\w+)+$/;
               return regex.test($.trim(value));
            }
            return true;
         },
         isEmailOrNull: function (input) {
            if (input.is("[checkexpession=EmailOrNull]")) {
               var value = input.val();
               if($.trim(value)==""){
                  return false;
               }
               var regex = /^\w{3,}@\w+(\.\w+)+$/;
               return regex.test($.trim(value));
            }
            return true;
         },
         isEnglishStr: function (input) {
            if (input.is("[checkexpession=EnglishStr]")) {
               var value = input.val();
               if($.trim(value)==""){
                  return true;
               }
               var regex = /^[a-z,A-Z]+$/;
               return regex.test($.trim(value));
            }
            return true;
         },
         isEnglishStrOrNull: function (input) {
            if (input.is("[checkexpession=EnglishStrOrNull]")) {
               var value = input.val();
               if($.trim(value)==""){
                  return false;
               }
               var regex = /^[a-z,A-Z]+$/;
               return regex.test($.trim(value));
            }
            return true;
         },
         isTelephone: function (input) {
            if (input.is("[checkexpession=Telephone]")) {
               var value = input.val();
               if($.trim(value)==""){
                  return true;
               }
               var regex = /^(\d{3,4}\-)?[1-9]\d{6,7}$/;
               return regex.test($.trim(value));
            }
            return true;
         },
         isTelephoneOrNull: function (input) {
            if (input.is("[checkexpession=TelephoneOrNull]")) {
               var value = input.val();
               if($.trim(value)==""){
                  return false;
               }
               var regex = /^(\d{3,4}\-)?[1-9]\d{6,7}$/;
               return regex.test($.trim(value));
            }
            return true;
         },

         isMobile: function (input) {
            if (input.is("[checkexpession=Mobile]")) {
               var value = input.val();
               if($.trim(value)==""){
                  return true;
               }
               var regex = /^(\+\d{2,3}\-)?\d{11}$/;
               return regex.test($.trim(value));
            }
            return true;
         },
         isMobileOrnull: function (input) {
            if (input.is("[checkexpession=MobileOrnull]")) {
               var value = input.val();
               if($.trim(value)==""){
                  return false;
               }
               var regex = /^(\+\d{2,3}\-)?\d{11}$/;
               return regex.test($.trim(value));
            }
            return true;
         },
         isCKNotNull: function (input) {
            if (!input.is('[checkexpession=CKNotNull]')) {
               return true;
            }
            return $('[checkexpession=CKNotNull]').is(':checked');
         },
         isRDNotNull: function (input) {
            if (!input.is('[checkexpession=RDNotNull]')) {
               return true;
            }
            return $('[checkexpession=RDNotNull]').is(':checked');
         },
      },
      messages: {
         isNotNull: "{0}不能为空",
         isNum: "{0}必须为数字",
         isNumOrNull: "{0}不是数字或空",
         isEmail: "{0}必须为E-mail格式",
         isEmailOrNull: "{0}不是E-mail格式或空",
         isEnglishStr: "{0}必须为英文字符串",
         isEnglishStrOrNull: "{0}不是英文字符串或空",
         isTelephone: "{0}必须为电话格式",
         isTelephoneOrNull: "{0}不是电话格式或空",
         isMobile: "{0}必须为手机格式",
         isMobileOrnull: "{0}不是手机格式或空",
         isCKNotNull: "{0}至少选择一项",
         isRDNotNull: "{0}请选择",
      },
   };

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值