Nanui 教程
最近接到一个项目 是关于构建一套 电脑端会员管理系统 但考虑到个人比较喜欢写Web 便首选Nanui构建项目。
中间遇到一些坑 但都已解决 ,便提供给大家参考。希望能帮助到大家-_-
项目采用 Nanui + LayuI + Echart + JQ
Demo版: https://pan.baidu.com/s/1vAlagCswNu8PloKb9d5GzQ 密码 jbnb
完整项目源码还在优化中 ,过几天上传。
代码示例 及Ui 截图如下
开启调试-代码:
base.LoadHandler.OnLoadStart += (sender, e) =>
{
base.Chromium.ShowDevTools();
};
登录对应前台js
form.on('submit(login)', function (d) {
var str = my.Func_login("{\"Name\":\"" + d.field.account + "\",\"Pass\":\""+ d.field.pwd +"\"}");
var result = eval('(' + str + ')');
if (result.isSuccess == true) {
layer.msg('登陆成功');
setTimeout(function (){
viewMain();
},1000);
} else {
layer.msg('登陆失败,密码错误');
}
后端代码
var FuncLogin = myObject.AddFunction("Func_login");
FuncLogin.Execute += (func, args) =>
{
var stringArgument = args.Arguments.FirstOrDefault(p => p.IsString);
if (stringArgument != null)
{
var str = stringArgument.StringValue;
JObject model = JObject.Parse(str);
var name = model["Name"].ToString();
var pass = model["Pass"].ToString();
object result = null;
var encry_pass = C_MD5.MD5Encrypt(pass);
var user = adminUserBLL.CheckAdminUser(name,encry_pass);
if (user!=null) {
CurrentAdminUser.Id = user.Id;
CurrentAdminUser.RoleId = user.RoleId.Value;
result = new { isSuccess = true, msg = "登录成功" };
}
else {
result = new { isSuccess = false, msg = "帐户名或密码错误" };
}
var resultStr = CfrV8Value.CreateString(Newtonsoft.Json.JsonConvert.SerializeObject(result));
args.SetReturnValue(resultStr);
}
};
主窗体 LayUi+Iframe
2后端调用前端 代码如下
2.1//调用前端js 实现菜单栏权限渲染
LoadHandler.OnLoadEnd += LoadMenu;
/// <summary>
/// 渲染角色对应的菜单
/// </summary>
private void LoadMenu(object sender, Chromium.Event.CfxOnLoadEndEventArgs e)
{
if (e.Frame.IsMain) {
var menus = menuBLL.QueryMenusList();
var res = JsonConvert.SerializeObject(new {data = menus });
ExecuteJavascript("SetMenu(" + res+ ")");
}
}
2.2 js代码
function SetMenu(res) {
console.log(res.data);
var html = "";
for (var i = 0; i < res.data.length; i++) {
html += "<li class=\"layui-nav-item\" url=" + res.data[i].Url + "><a>" + res.data[i].Name+"</a></li>";
}
$("#MenuBox").html(html);
}
3前端与后端通信 代码如下
3.1js代码
var user = {
page: 1,
pageSize: 10,
phone: $("#phone").val(),
name: $("#name").val(),
state: $(".layui-tab .layui-this").attr("lay-id")
};
var par = JSON.stringify(user);
var list = parent.userbll.QueryList(par);
var res = eval('(' + list + ')');
3.2后端代码
var userObject = GlobalObject.AddObject("userbll"); //新增用户BLL层 前端直接userbll.QueryList即可调用
var userProp = userObject.AddDynamicProperty("user");
InitProp(userProp);
/*查询会员列表*/
var QuertList = userObject.AddFunction("QueryList");
QuertList.Execute += (func, args) =>
{
var stringArgument = args.Arguments.FirstOrDefault(p => p.IsString);
if (stringArgument != null)
{
var str = stringArgument.StringValue;
var user = userBLL.QuertList(str); //调用数据库方法
var resultStr = CfrV8Value.CreateString(JsonConvert.SerializeObject(new { data = user.Item1, count = user.Item2 }));
args.SetReturnValue(resultStr);
}
};
用户管理
4 数据报表
Nanui 教程的更多相关文章
- NanUI文档 - 开始使用NanUI
NanUI文档目录 NanUI简介 开始使用NanUI 打包并使用内嵌式的HTML/CSS/JS资源 使用网页来设计整个窗口 如何实现C#与Javascript相互掉用(待更新...) 如何处理Nan ...
- NanUI文档 - 打包并使用内嵌式的HTML/CSS/JS资源
NanUI文档目录 NanUI简介 开始使用NanUI 打包并使用内嵌式的HTML/CSS/JS资源 使用网页来设计整个窗口 如何实现C#与Javascript相互掉用(待更新...) 如何处理Nan ...
- .Net/.Net Core 的界面框架 NanUI 发布新版本啦!
发布前感悟 NanUI 自从上一次更新 NanUI 0.7 已经过去大半年,B站和头条的教学视频也只制作到了第二集. 有朋友悄悄问我是不是发生什么事故我删库跑路了所以那么长时间不更新项目不发布教程,当 ...
- Angular2入门系列教程7-HTTP(一)-使用Angular2自带的http进行网络请求
上一篇:Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数 感觉这篇不是很好写,因为涉及到网络请求,如果采用真实的网络请求,这个例子大家拿到手估计还要自己写一个web ...
- Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数
上一篇:Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数 之前介绍了简单的路由以及传参,这篇文章我们将要学习复杂一些的路由以及传递其他附加参数.一个好的路由系统可以使我们 ...
- Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数
上一篇:Angular2入门系列教程-服务 上一篇文章我们将Angular2的数据服务分离出来,学习了Angular2的依赖注入,这篇文章我们将要学习Angualr2的路由 为了编写样式方便,我们这篇 ...
- Angular2入门系列教程4-服务
上一篇文章 Angular2入门系列教程-多个组件,主从关系 在编程中,我们通常会将数据提供单独分离出来,以免在编写程序的过程中反复复制粘贴数据请求的代码 Angular2中提供了依赖注入的概念,使得 ...
- Angular2入门系列教程1-使用Angular-cli搭建Angular2开发环境
一直在学Angular2,百忙之中抽点时间来写个简单的教程. 2016年是前端飞速发展的一年,前端越来越形成了(web component)组件化的编程模式:以前Jquery通吃一切的田园时代一去不复 ...
- wepack+sass+vue 入门教程(三)
十一.安装sass文件转换为css需要的相关依赖包 npm install --save-dev sass-loader style-loader css-loader loader的作用是辅助web ...
随机推荐
- serde
一.背景 1.当进程在进行远程通信时,彼此可以发送各种类型的数据,无论是什么类型的数据都会以二进制序列的形式在网络上传送. 发送方需要把对象转化为字节序列才可在网络上传输,称为对象序列化: 接收方则需 ...
- c++11 并发 条件变量 超时等待的代码练习
资料地址 http://en.cppreference.com/w/cpp/thread/condition_variable/wait_until http://www.cnblogs.com/ha ...
- robotframework 运行集合
Robot Framework 运行测试通过 pybot 命令,检查 _C:\Python36\Scripts_ 目录下是否有 pybot.bat 文件,正确安装 Robot Framework 一定 ...
- 使用xtrabackup备份innodb引擎的数据库
innodb引擎的数据库可以使用mysqldump备份,如果表很大几十个G甚至上百G,显示用mysqldump备份会非常慢.然后使用xtrabackup 可以很快的在线备份innodb数据库.Inno ...
- rails 部署 can't find gem bundler (>= 0.a) with executable bundle
多方寻找终得果,先感谢原作者,原作者博文 原因是本地项目bundler 和 服务器 bundler 版本不一致导致,项目是在本地建立,故Gemfile.lock最后一行BUNDLED WITH中是1. ...
- centos 7 禁止root登录及更改ssh端口号
vim /etc/ssh/sshd_config PermitRootLogin yes => PermitRootLogin no systemctl restart sshd.service ...
- 转--O2O刷单“黑市”折射下的泡沫#神作#
“XX打车和XX用车这样的公司,太不真诚.从前补贴的是现金,现在补贴的都是各种券,还有各种使用上的规则,为什么要设置这么多的限制?反正都要花一样的钱,为什么不能痛快点?让用户体验好一点?” 说这个话的 ...
- tp5系统核心设计提供了一些可能会需要的钩子(位置)
钩子 描述 参数 app_init 应用初始化标签位 无 app_begin 应用开始标签位 当前调度信息 module_init 模块初始化标签位 当前请求对象实例 action_begin ...
- Javascript 需要注意的细节
1.使用 === 代替 ==JavaScript 使用2种不同的等值运算符:===|!== 和 ==|!=,在比较操作中使用前者是最佳实践.“如果两边的操作数具有相同的类型和值,===返回true,! ...
- Check the NativeLink log file
今天用Quartus ii16.1仿真Cyclone IV的IP核DDR2,总是报上面的错误 .网上都说是modelsim路径的问题, 但我确定不是.最后用QaurtusII 12.1可以通道仿真. ...