JQuery Smart UI 简介 (一) — 纯Htm+Js的ajax开发框架[演示Demo已放出]

本文详细介绍了jQuerySmartUI,一个基于jQuery的AJAX开发框架,它实现了前后台分离、功能与数据分离。该框架包含一套用于日常应用的jQuery插件,一套前端开发框架,以及与后台数据框架无缝结合的能力。它通过统一数据接口与服务端进行数据交换,支持多种数据库和权限控制。此外,还介绍了其在开源框架nbearlite基础上的扩展特性,包括使用“结构实体”解析JSON数据、数据库操作的读写分离等。

======================================================
注:本文源代码点此下载
======================================================

jquery smart ui是基于jquery的ajax开发框架,实现前、后台分离、功能和数据分离,ui层全部使用htm+js+json完成,通过一个统一数据接口与服务端进行数据交换。

主要有三部分组成:

一套日常应用的jquery插件(类似jquery ui,jquery easyui),核心基于template.js模板插件,具有强大的自定义功能。

一套前端开发框架(js、css),满足各种基本场景,有着不错的封装、扩展性。系统自动完成动态创建页面,与后台交互,取、赋值等繁琐的操作。

例:查询场景,其中查询条件区域、列表区域,数据格式化都是通过简单的配置和方法动态生成。

与smart ui无缝结合的后台数据框架(.net)。

统一数据交互接口,便于统一管理和维护。

fncode的方式,权限控制到每个方法。

在开源框架【nbearlite】的基础上扩展,使用“结构实体”来解析前台的json数据,避免了orm中实体的反射转换的性能消耗。

数据库操作实现读写分离,分别用不同类实现;结合“结构实体”自动的绑定回发的数据,使用更加便捷。

多种数据库支持和支持多数据库;

几个月时间奋战,jquery smart ui终于完成一版,先简单介绍一下,明天放出完整的演示demo。

演示demo

注:所有内容皆为原创,转载请注明出处 by jquery smart ui - roy zhang


======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Smart-SSO-Demo-H5</title> </head> <body> <h2>Smart-SSO-Demo-H5</h2> <br /><b>用户名</b>:<span id="_username"></span><br /> <br /><b>用户已分配的菜单</b>:<span id="_userMenus"></span> <br /><b>用户已分配的权限</b>:<span id="_userPermissions"></span> <br /><a href="javascript:goSSOLogoutUrl()">单点退出</a> </body> <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> <script>window.jQuery || alert('jQuery.js未加载成功,请检查网络或更换CDN')</script> <script type="text/javascript"> // 当前应用(smart-sso-demo-h5)后端服务地址 var BASE_URL = "http://127.0.0.1:8082"; // 客户端ID(保持与smart.sso.client-id配置致,用于多个客户端应用在同域部署下的数据隔离) var CLIENT_ID = "1002"; // token名称前缀(保持与smart.sso.token-name-prefix配置致,如果没有自定义则默认"smart-sso-token-") var TOKEN_NAME_PREFIX = "smart-sso-token-"; $(function () { if (validateLogin()) { getUserinfo(); } }) // 校验是否需要跳转到SSO认证中心 function validateLogin() { var accessToken = localStorage.getItem("accessToken" + CLIENT_ID); if (accessToken) { return true; } var code = getParam('code'); if (code && getAccessToken(code)) { removeCodeParamAndRedirect(); return true; } goSSOLoginUrl(); return false; } // 获取用户信息 function getUserinfo() { smart.ajax('GET', BASE_URL + "/userinfo", {}, function (res) { var userinfo = res.data; // 用户名 $("#_username").html(userinfo.username); // 用户已分配的菜单 var userMenus = ''; userinfo.userMenus.forEach(function (menu) { userMenus += '<li>' + menu + '</li>'; }); $('#_userMenus').html(userMenus); // 用户已分配的权限 var userPermissions = ''; userinfo.userPermissions.forEach(function (permission) { userPermissions += '<li>' + permission + '</li>'; }); $('#_userPermissions').html(userPermissions); }); } // 重定向至认证中心 function goSSOLoginUrl() { $.getJSON(BASE_URL + '/auth/login_url?redirectUri=' + location.href, function (res) { window.location.href = res.data; }) } // 重定向至服务端退出地址 function goSSOLogoutUrl() { $.getJSON(BASE_URL + '/auth/logout_url?redirectUri=' + location.href, function (res) { window.location.href = res.data; }) } // 获取accessToken function getAccessToken(code) { var bool = false; $.ajax({ url: BASE_URL + "/auth/access-token?code=" + code, type: 'GET', async: false, dataType: 'json', success: function (res) { if (res.code == 1) { localStorage.setItem("accessToken" + CLIENT_ID, res.data.accessToken); localStorage.setItem("refreshToken" + CLIENT_ID, res.data.refreshToken); bool = true; } } }); return bool; } // 获取refreshToken function getRefreshToken() { var bool = false; $.ajax({ url: BASE_URL + "/auth/refresh-token?refreshToken=" + localStorage.getItem("refreshToken" + CLIENT_ID), type: 'GET', async: false, dataType: 'json', success: function (res) { if (res.code == 1) { localStorage.setItem("accessToken" + CLIENT_ID, res.data.accessToken); localStorage.setItem("refreshToken" + CLIENT_ID, res.data.refreshToken); bool = true; } } }); return bool; } // 从url中获取指定名称的参数值 function getParam(name) { var query = window.location.search.substring(1); var vars = query.split("&"); for (var i = 0; i < vars.length; i++) { var pair = vars[i].split("="); if (pair[0] == name) { return pair[1]; } } return null; } // 重定向方式去除地址栏中的code参数 function removeCodeParamAndRedirect() { var url = new URL(window.location.href); url.searchParams.delete('code'); window.location.href = url.toString(); } </script> <script type="text/javascript"> var smart = {}; // 为业务请求封装Ajax方法,请求头自动附带token,请求返回处理token刷新和失效跳转等逻辑 smart.ajax = function (method, url, data, successFn) { $.ajax({ type: method, url: url, data: data, dataType: 'json', headers: { // 传递调用凭证 [TOKEN_NAME_PREFIX + CLIENT_ID]: localStorage.getItem("accessToken" + CLIENT_ID), // 跨域请求需自行设置X-Requested-With参数,Ajax仅在非跨域请求默认携带 'X-Requested-With': 'XMLHttpRequest' }, success: function (res) { // 响应成功 if (res.code == 1) { successFn(res); } // 后端登录失效,需要清理前端缓存,并跳转至认证中心 else if (res.code == 10) { localStorage.clear(); goSSOLoginUrl(); } /** * accessToken已过期,refreshToken已过期,客户端需要调用refreshToken刷新accessToken * 1、如果refreshToken成功,之前因为accessToken过期请求失败的接口再发起遍 * 2、否则,跳转至认证中心 */ else if (res.code == 15) { if (getRefreshToken()) { smart.ajax(method, url, data, successFn); } else { goSSOLoginUrl(); } } // 其它异常,弹出提示 else { alert(res.message); } }, error: function (xhr, type, errorThrown) { alert(JSON.stringify(xhr)); } }); } </script> </html> 前后端分离场景 集成到若依vue3框架
最新发布
10-30
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" id="extr-page"> <head> <base href="http://10.50.64.10:8080/"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> <title>VionTool MES系统登录</title> <link rel="shortcut icon" href="/staticResource/images/vt_icon.ico" type="image/x-icon"> <link href="/staticResource/css/login.css?v=20250609015108" rel="stylesheet" rev="stylesheet" type="text/css" media="all"/> <link href="/staticResource/css/demo.css?v=20250609015108" rel="stylesheet" rev="stylesheet" type="text/css" media="all"/> <link rel="stylesheet" type="text/css" media="screen" href="/staticResource/vendor/css/bootstrap.min.css?v=20250609015108"> <link rel="stylesheet" type="text/css" media="screen" href="/staticResource/vendor/css/smartadmin-production.min.css?v=20250609015108"> <script src="/staticResource/scripts/jquery/jquery-1.10.2.min.js?v=20250609015108"></script> <link href="/staticResource/styles/jet-login.css?v=20250609015108" rel="stylesheet"/> <link href="/staticResource/styles/font-awesome.min.css?v=20250609015108" rel="stylesheet"/> <script src="/staticResource/scripts/plugins/jquery.md5.js?v=20250609015108"></script> <script src="/staticResource/scripts/plugins/cookie/jquery.cookie.js?v=20250609015108"></script> <script src="/staticResource/scripts/plugins/dialog/dialog.js?v=20250609015108"></script> <script src="/staticResource/scripts/utils/jet-ui.js?v=20250609015108"></script> <link rel="stylesheet" href="http://10.50.64.10:8080//staticResource/vt/js/bootstrap-select/bootstrap-select.min.css?v=20250609015108"/> <script type="text/javascript" src="http://10.50.64.10:8080//staticResource/vt/js/bootstrap-select/bootstrap-select.min.js?v=20250609015108"></script> <script type="text/javascript" src="http://10.50.64.10:8080//staticResource/vt/js/vt-ui.js?v=20250609015108"></script> <script type="text/javascript" src="http://10.50.64.10:8080//staticResource/js/com/visiontool/system/loginInfo/login.js?v=20250609015108"></script> <link rel="stylesheet" href="http://10.50.64.10:8080//staticResource/vt/js/vt-ui.css?v=20250609015108"/> </head> <body style="overflow-x: hidden;"> <header id="header"> <div id="logo-group"> <span id="logo"> <img src="/staticResource/vendor/img/logo.png" alt="江西鸿泰模具股份有限公司"> </span> </div> </header> <div id="main" role="main"> <!-- MAIN CONTENT --> <div id="content" class="container"> <div class="row"> <div class="col-xs-12 col-sm-12 col-md-5 col-lg-6 hidden-xs hidden-sm"> <h1 class="txt-color-red login-header-big">VisionTool MES 生产制造系统</h1> <div class="hero"> <img src="/staticResource/vendor/img/demo/loading.jpg" class="pull-right display-image" alt="" style="width:380px"> </div> </div> <div class="col-xs-12 col-sm-12 col-md-5 col-lg-4"> <div class="well no-padding"> <form action="index.html" id="login-form" class="smart-form client-form"> <header>系统登录认证</header> <fieldset> <section> <label class="label username">用户名</label> <label class="input"> <i class="icon-append fa fa-user"></i> <input id="username" type="username" name="username" placeholder="用户名"> <b class="tooltip tooltip-top-right"><i class="fa fa-user txt-color-teal"></i>请输入用户名</b></label> </section> <section> <label class="label">密码</label> <label class="input"> <i class="icon-append fa fa-lock"></i> <input id="password" type="password" name="password" placeholder="密码"> <b class="tooltip tooltip-top-right"><i class="fa fa-lock txt-color-teal"></i> 请输入密码</b> </label> </section> <section> <label class="label">班次</label> <select id="shiftClass" name="shiftClass" class="selectpicker"></select> </section> <div class="note"> <a onclick="alert('请联系信息管理部:') ">忘记密码了?</a> </div> </section> </fieldset> <footer> <button id="btnlogin" type="button" class="btn btn-primary">登录</button> </footer> </form> </div> </div> </div> </div> </div> <div class="copyright" style="position: absolute; margin-left: 10px ;height: 50px;text-align: center;margin-left: 10px;right: 0;z-index: 10000;bottom: 0;"> <br> <p style="font-size: 15px">Copyright © 2019. 江西鸿泰模具股份有限公司 </p> </div> <script src="/staticResource/vendor/js/bootstrap/bootstrap.min.js?v=20250609015108"></script> </body> </html> 这是我的网页的login_page 怎么提取这个的CSRF令牌
06-25
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值