9 Commits
v6.3 ... v6.4

Author SHA1 Message Date
wintel
4938027aa5 fix #IADLX5 为角色分配按钮权限不起作用。 2024-07-18 21:52:02 +08:00
wintel
c8db5cb0b0 fix #IAE0NF 2024-07-18 20:50:53 +08:00
yubaolee
958a455dc4 fix #IABKQN 2024-07-11 22:21:48 +08:00
yubaolee
c5149d33c4 修复图标编辑时初始化加载 2024-07-11 21:18:07 +08:00
yubaolee
86aad6337c 修复图标初始化 2024-07-11 21:08:42 +08:00
yubaolee
099e695c27 修复按钮错位 2024-07-11 21:03:58 +08:00
yubaolee
a909d723a2 * fix IABKQN 输入框输入收清除其他下拉框或选择框的内容 2024-07-11 17:37:38 +08:00
yubaolee
2b38807d2d fix IABKQN 输入框输入收清除其他下拉框或选择框的内容 2024-07-11 16:43:21 +08:00
yubaolee
d49ed28b13 fix #I9TF4L 表单值已经发生变化,但寻找下一个节点时还是按照初始值找 2024-07-04 09:33:49 +08:00
7 changed files with 229 additions and 258 deletions

View File

@@ -44,8 +44,10 @@ namespace OpenAuth.App
var moduleIds = SugarClient.Queryable<Relevance>().Where(
u =>
(u.Key == Define.ROLEMODULE && _userRoleIds.Contains(u.FirstId))).Select(u => u.SecondId).ToList();
var elementIds = GetElementIds();
return SugarClient.Queryable<ModuleView>().Where(m =>moduleIds.Contains(m.Id)).Includes(x=>x.Elements).ToList();
return SugarClient.Queryable<ModuleView>().Where(m =>moduleIds.Contains(m.Id))
.Includes(x=>x.Elements.Where(u=>elementIds.Contains(u.Id)).ToList()).ToList();
}
}
@@ -54,14 +56,24 @@ namespace OpenAuth.App
{
get
{
var elementIds = SugarClient.Queryable<Relevance>().Where(
u =>
(u.Key == Define.ROLEELEMENT && _userRoleIds.Contains(u.FirstId))).Select(u => u.SecondId).ToList();
var elementIds = GetElementIds();
var usermoduleelements = SugarClient.Queryable<ModuleElement>().Where(u => elementIds.Contains(u.Id));
return usermoduleelements.ToList();
}
}
/// <summary>
/// 获取角色可访问的菜单Id
/// </summary>
/// <returns></returns>
private List<string> GetElementIds()
{
var elementIds = SugarClient.Queryable<Relevance>().Where(
u =>
(u.Key == Define.ROLEELEMENT && _userRoleIds.Contains(u.FirstId))).Select(u => u.SecondId).ToList();
return elementIds;
}
public List<Role> Roles
{
get { return SugarClient.Queryable<Role>().Where(u => _userRoleIds.Contains(u.Id)).ToList(); }

View File

@@ -30,7 +30,13 @@ namespace OpenAuth.App
var columnFields = loginContext.GetTableColumns("Category");
if (columnFields == null || columnFields.Count == 0)
{
throw new Exception("请在代码生成界面配置Category表的字段属性");
//因为分类字典值需要在别的地方使用,必需初始化有值
columnFields = new List<BuilderTableColumn>
{
new() { ColumnName = "Name", ColumnType = "string" },
new() { ColumnName = "DtCode", ColumnType = "string" },
new() { ColumnName = "DtValue", ColumnType = "string" }
};
}
var result = new TableData();

View File

@@ -55,7 +55,8 @@ namespace OpenAuth.App
IRepository<FlowInstance, OpenAuthDBContext> repository
, RevelanceManagerApp app, FlowSchemeApp flowSchemeApp, FormApp formApp,
IHttpClientFactory httpClientFactory, IAuth auth, IServiceProvider serviceProvider,
SysMessageApp messageApp, DbExtension dbExtension, UserManagerApp userManagerApp, OrgManagerApp orgManagerApp)
SysMessageApp messageApp, DbExtension dbExtension, UserManagerApp userManagerApp,
OrgManagerApp orgManagerApp)
: base(unitWork, repository, auth)
{
_revelanceApp = app;
@@ -136,16 +137,15 @@ namespace OpenAuth.App
if (flowInstance.FrmType == 1) //如果是开发者自定义的表单
{
var t = Type.GetType("OpenAuth.App." + flowInstance.DbName + "App");
ICustomerForm icf = (ICustomerForm) _serviceProvider.GetService(t);
ICustomerForm icf = (ICustomerForm)_serviceProvider.GetService(t);
try
{
icf.Add(flowInstance.Id, flowInstance.FrmData);
}
catch (Exception e)
{
throw new Exception("流程表单数据解析失败,请检查表单是否填写完整");
throw new Exception("流程表单数据解析失败,请检查表单是否填写完整");
}
}
//如果工作流配置的表单配置有对应的数据库
@@ -256,7 +256,7 @@ namespace OpenAuth.App
if (form.FrmType == 1) //如果是开发者自定义的表单,更新对应数据库表数据
{
var t = Type.GetType("OpenAuth.App." + req.DbName + "App");
ICustomerForm icf = (ICustomerForm) _serviceProvider.GetService(t);
ICustomerForm icf = (ICustomerForm)_serviceProvider.GetService(t);
icf.Update(req.Id, req.FrmData);
}
else if (form.FrmType == 2 && !string.IsNullOrEmpty(form.DbName)) //拖拽表单定义了关联数据库
@@ -283,6 +283,7 @@ namespace OpenAuth.App
{
continue;
}
updatestr += $"{column.ColumnName} = '{val}',";
}
@@ -342,7 +343,7 @@ namespace OpenAuth.App
string canCheckId = ""; //寻找当前登录用户可审核的节点Id
foreach (string fromForkStartNodeId in wfruntime.FromNodeLines[wfruntime.currentNodeId]
.Select(u => u.to))
.Select(u => u.to))
{
var fromForkStartNode = wfruntime.Nodes[fromForkStartNodeId]; //与会前开始节点直接连接的节点
canCheckId = GetOneForkLineCanCheckNodeId(fromForkStartNode, wfruntime, tag);
@@ -353,9 +354,10 @@ namespace OpenAuth.App
{
throw (new Exception("审核异常,找不到审核节点"));
}
var content = $"{user.Account}-{DateTime.Now.ToString("yyyy-MM-dd HH:mm")}审批了【{wfruntime.Nodes[canCheckId].name}】" +
$"结果:{(tag.Taged == 1 ? "" : "")},备注:{tag.Description}";
var content =
$"{user.Account}-{DateTime.Now.ToString("yyyy-MM-dd HH:mm")}审批了【{wfruntime.Nodes[canCheckId].name}】" +
$"结果:{(tag.Taged == 1 ? "" : "")},备注:{tag.Description}";
AddOperationHis(instanceId, tag, content);
wfruntime.MakeTagNode(canCheckId, tag); //标记审核节点状态
@@ -384,12 +386,12 @@ namespace OpenAuth.App
flowInstance.MakerList = GetForkNodeMakers(wfruntime, wfruntime.currentNodeId);
AddTransHistory(wfruntime);
}
flowInstance.SchemeContent = JsonHelper.Instance.Serialize(wfruntime.ToSchemeObj());
}
#endregion
#region
else
@@ -399,16 +401,12 @@ namespace OpenAuth.App
#endregion
if (!string.IsNullOrEmpty(request.FrmData))
//自定义开发表单,需要更新对应的数据库
if (!string.IsNullOrEmpty(request.FrmData) && flowInstance.FrmType == 1)
{
flowInstance.FrmData = request.FrmData;
if (flowInstance.FrmType == 1) //如果是开发者自定义的表单,更新对应数据库表数据
{
var t = Type.GetType("OpenAuth.App." + flowInstance.DbName + "App");
ICustomerForm icf = (ICustomerForm) _serviceProvider.GetService(t);
icf.Update(flowInstance.Id, flowInstance.FrmData);
}
var t = Type.GetType("OpenAuth.App." + flowInstance.DbName + "App");
ICustomerForm icf = (ICustomerForm)_serviceProvider.GetService(t);
icf.Update(flowInstance.Id, flowInstance.FrmData);
}
UnitWork.Update(flowInstance);
@@ -428,6 +426,12 @@ namespace OpenAuth.App
private void VerifyNode(VerificationReq request, Tag tag, FlowInstance flowInstance)
{
var user = _auth.GetCurrentUser().User;
if (!string.IsNullOrEmpty(request.FrmData))
{
flowInstance.FrmData = request.FrmData;
}
FlowRuntime wfruntime = new FlowRuntime(flowInstance);
wfruntime.MakeTagNode(wfruntime.currentNodeId, tag);
if (tag.Taged == (int)TagState.Ok)
@@ -463,22 +467,23 @@ namespace OpenAuth.App
wfruntime.nextNodeId = "-1";
wfruntime.nextNodeType = 4;
}
var content = $"{user.Account}-{DateTime.Now.ToString("yyyy-MM-dd HH:mm")}审批了【{wfruntime.currentNode.name}】" +
$"结果:{(tag.Taged == 1 ? "" : "")},备注:{tag.Description}";
AddOperationHis(flowInstance.Id, tag, content);
flowInstance.SchemeContent = JsonHelper.Instance.Serialize(wfruntime.ToSchemeObj());
//如果审批通过,且下一个审批人是自己,则自动审批
if (tag.Taged == (int)TagState.Ok)
{
if (flowInstance.MakerList != "1" && (!flowInstance.MakerList.Contains(user.Id)))
{
return;
}
VerifyNode(request, tag, flowInstance);
}
var content =
$"{user.Account}-{DateTime.Now.ToString("yyyy-MM-dd HH:mm")}审批了【{wfruntime.currentNode.name}】" +
$"结果:{(tag.Taged == 1 ? "" : "")},备注:{tag.Description}";
AddOperationHis(flowInstance.Id, tag, content);
flowInstance.SchemeContent = JsonHelper.Instance.Serialize(wfruntime.ToSchemeObj());
//如果审批通过,且下一个审批人是自己,则自动审批
if (tag.Taged == (int)TagState.Ok)
{
if (flowInstance.MakerList != "1" && (!flowInstance.MakerList.Contains(user.Id)))
{
return;
}
VerifyNode(request, tag, flowInstance);
}
}
//会签时,获取一条会签分支上面是否有用户可审核的节点
@@ -527,7 +532,7 @@ namespace OpenAuth.App
var tag = new Tag
{
Description = reqest.VerificationOpinion,
Taged = (int) TagState.Reject,
Taged = (int)TagState.Reject,
UserId = user.Id,
UserName = user.Name
};
@@ -613,7 +618,7 @@ namespace OpenAuth.App
makerList = GenericHelpers.ArrayToString(request.NodeDesignates, makerList);
}
else if (wfruntime.nextNode.setInfo.NodeDesignate == Setinfo.RUNTIME_PARENT
else if (wfruntime.nextNode.setInfo.NodeDesignate == Setinfo.RUNTIME_PARENT
|| wfruntime.nextNode.setInfo.NodeDesignate == Setinfo.RUNTIME_MANY_PARENTS)
{
//如果是上一节点执行人的直属上级或连续多级直属上级
@@ -630,7 +635,8 @@ namespace OpenAuth.App
{
throw new Exception("无法找到当前用户的直属上级");
}
makerList = GenericHelpers.ArrayToString(new[]{parentId}, makerList);
makerList = GenericHelpers.ArrayToString(new[] { parentId }, makerList);
}
else if (wfruntime.nextNode.setInfo.NodeDesignate == Setinfo.RUNTIME_CHAIRMAN)
{
@@ -687,7 +693,7 @@ namespace OpenAuth.App
{
if (node.setInfo != null && node.setInfo.Taged != null)
{
if (node.type != FlowNode.FORK && node.setInfo.Taged != (int) TagState.Ok) //如果节点是不同意或驳回,则不用再找了
if (node.type != FlowNode.FORK && node.setInfo.Taged != (int)TagState.Ok) //如果节点是不同意或驳回,则不用再找了
{
break;
}
@@ -733,7 +739,8 @@ namespace OpenAuth.App
}
else if (node.setInfo != null)
{
if (string.IsNullOrEmpty(node.setInfo.NodeDesignate) ||node.setInfo.NodeDesignate == Setinfo.ALL_USER) //所有成员
if (string.IsNullOrEmpty(node.setInfo.NodeDesignate) ||
node.setInfo.NodeDesignate == Setinfo.ALL_USER) //所有成员
{
makerList = "1";
}
@@ -774,7 +781,7 @@ namespace OpenAuth.App
CheckNodeDesignate(request);
}
bool isReject = TagState.Reject.Equals((TagState) Int32.Parse(request.VerificationFinally));
bool isReject = TagState.Reject.Equals((TagState)Int32.Parse(request.VerificationFinally));
if (isReject) //驳回
{
NodeReject(request);
@@ -904,7 +911,7 @@ namespace OpenAuth.App
TransitionSate = 0
});
}
private void AddOperationHis(string instanceId, Tag tag, string content)
{
FlowInstanceOperationHistory flowInstanceOperationHistory = new FlowInstanceOperationHistory

View File

@@ -1,9 +1,10 @@
@section header
{
<link rel="stylesheet" href="/css/treetable.css" />
<link rel="stylesheet" href="/js/dtree/dtree.css" />
<link rel="stylesheet" href="/js/dtree/font/dtreefont.css" />
<link rel="stylesheet" href="/css/treetable.css"/>
<link rel="stylesheet" href="/js/dtree/dtree.css"/>
<link rel="stylesheet" href="/js/dtree/font/dtreefont.css"/>
}
<blockquote class="layui-elem-quote news_search toolList" id="menus">
</blockquote>
@@ -18,46 +19,45 @@
lay-data="{height: 'full-80', id:'mainList'}"
lay-filter="list" lay-size="sm">
<thead>
<tr>
<th lay-data="{checkbox:true, fixed: true}"></th>
<th lay-data="{field:'Name', width:120, sort: true, fixed: true}">模块名称</th>
<th lay-data="{field:'Status', width:100,templet: '#statusTpl'}">导航栏展示</th>
<th lay-data="{field:'IsSys', width:100,templet: '#sysTpl'}">模块类型</th>
<th lay-data="{field:'IconName', width:60,templet: '#iconTpl'}">图标</th>
<th lay-data="{field:'CascadeId', width:80}">层级ID</th>
<th lay-data="{field:'Code', width:80}">模块标识</th>
<th lay-data="{field:'Url', width:200}">Url</th>
<th lay-data="{field:'ParentName', width:135}">父节点名称</th>
<th lay-data="{field:'SortNo', width:80}">排序号</th>
</tr>
<tr>
<th lay-data="{checkbox:true, fixed: true}"></th>
<th lay-data="{field:'Name', width:120, sort: true, fixed: true}">模块名称</th>
<th lay-data="{field:'Status', width:100,templet: '#statusTpl'}">导航栏展示</th>
<th lay-data="{field:'IsSys', width:100,templet: '#sysTpl'}">模块类型</th>
<th lay-data="{field:'IconName', width:60,templet: '#iconTpl'}">图标</th>
<th lay-data="{field:'CascadeId', width:80}">层级ID</th>
<th lay-data="{field:'Code', width:80}">模块标识</th>
<th lay-data="{field:'Url', width:200}">Url</th>
<th lay-data="{field:'ParentName', width:135}">父节点名称</th>
<th lay-data="{field:'SortNo', width:80}">排序号</th>
</tr>
</thead>
</table>
<script type="text/html" id="iconTpl">
{{# if( d.IconName != null && d.IconName != ''){ }}
{{# if( d.IconName != null && d.IconName != ''){ }}
<i class="layui-icon {{ d.IconName }}"></i>
{{# } else { }}
{{# } else { }}
{{ d.IconName }}
{{# } }}
{{# } }}
</script>
<script type="text/html" id="statusTpl">
{{# if( d.Status == -1){ }}
{{# if( d.Status == -1){ }}
<span style="color:red">隐藏</span>
{{# } else { }}
{{# } else { }}
<span style="color:green">显示</span>
{{# } }}
{{# } }}
</script>
<script type="text/html" id="sysTpl">
{{# if( d.IsSys == 1){ }}
<script type="text/html" id="sysTpl">
{{# if( d.IsSys == 1){ }}
<span class="layui-badge">内置</span>
{{# } else { }}
{{# } else { }}
<span class="layui-badge layui-bg-green">自定义</span>
{{# } }}
{{# } }}
</script>
</div>
<div class="layui-col-xs">
<div class="layui-col-xs3">
<!--菜单列表-->
<table class="layui-table"
lay-data="{height: 'full-80', id:'menuList', text: { none: '单击模块列表数据行查看菜单' }}"
@@ -69,32 +69,31 @@
</tr>
</thead>
</table>
<script type="text/html" id="menuTpl">
<button class="layui-btn layui-btn-xs {{ d.Class }} layui-btn-fluid" alt="{{ d.DomId }}"> <i class="layui-icon {{ d.Icon }}"></i> {{ d.Name }}</button>
</script>
</div>
</div>
<!--模块添加/编辑窗口-->
<div id="divEdit" style="display: none">
<form class="layui-form layui-form-pane" action="" id="formEdit">
<form class="layui-form layui-form-pane" action="" id="formEdit" lay-filter="formEdit">
<input type="hidden" name="Id" v-model="tmp.Id" />
<input type="hidden" name="Id"/>
<div class="layui-form-item">
<label class="layui-form-label">模块名称</label>
<div class="layui-input-block">
<input type="text" name="Name" v-model="tmp.Name" required lay-verify="required"
<input type="text" name="Name" required lay-verify="required"
placeholder="请输入模块名称" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">导航栏展示</label>
<div class="layui-input-block">
<select name="Status" v-model="tmp.Status" required lay-verify="required">
<option value="0" selected="selected" >正常</option>
<select name="Status" required lay-verify="required">
<option value="0" selected="selected">正常</option>
<option value="-1">隐藏</option>
</select>
@@ -103,27 +102,27 @@
<div class="layui-form-item">
<label class="layui-form-label">模块标识</label>
<div class="layui-input-block">
<input type="text" name="Code" v-model="tmp.Code"
<input type="text" name="Code"
placeholder="比如Module" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">URL地址</label>
<div class="layui-input-block">
<input type="text" name="Url" v-model="tmp.Url" required lay-verify="required"
<input type="text" name="Url" required lay-verify="required"
placeholder="请输入URL" autocomplete="off" 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="IconName" name="IconName" v-model="tmp.IconName" lay-filter="iconPicker" class="layui-input">
<input type="text" id="IconName" name="IconName" lay-filter="iconPicker" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">排序号</label>
<div class="layui-input-block">
<input type="text" name="SortNo" v-model="tmp.SortNo" required lay-verify="required"
<input type="text" name="SortNo" required lay-verify="required"
placeholder="请输入排序号" autocomplete="off" class="layui-input">
</div>
</div>
@@ -131,9 +130,8 @@
<div class="layui-form-item">
<label class="layui-form-label">所属模块</label>
<div class="layui-input-block">
<input id="ParentName" name="ParentName" v-model="tmp.ParentName" class="layui-input" />
<input id="ParentId" name="ParentId" v-model="tmp.ParentId" type="hidden" />
<input id="ParentName" name="ParentName" class="layui-input"/>
<input id="ParentId" name="ParentId" type="hidden"/>
</div>
</div>
@@ -148,15 +146,15 @@
<!--添加菜单窗口-->
<div id="divMenuEdit" style="display: none">
<form class="layui-form layui-form-pane" action="" id="mfromEdit">
<form class="layui-form layui-form-pane" action="" id="mfromEdit" lay-filter="mfromEdit">
<input type="hidden" name="Id" v-model="tmp.Id" />
<input type="hidden" name="ModuleId" v-model="tmp.ModuleId" />
<input type="hidden" name="Id"/>
<input type="hidden" name="ModuleId"/>
<div class="layui-form-item">
<label class="layui-form-label">菜单名称</label>
<div class="layui-input-block">
<input type="text" name="Name" v-model="tmp.Name" required lay-verify="required"
<input type="text" name="Name" required lay-verify="required"
placeholder="请输入名称" autocomplete="off" class="layui-input">
</div>
</div>
@@ -164,28 +162,28 @@
<div class="layui-form-item">
<label class="layui-form-label">DomId</label>
<div class="layui-input-block">
<input type="text" name="DomId" v-model="tmp.DomId" required lay-verify="required"
<input type="text" name="DomId" required lay-verify="required"
placeholder="请输入DomId" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<div class="layui-form-item">
<label class="layui-form-label">图标</label>
<div class="layui-input-block">
<input type="text" id="Icon" name="Icon" v-model="tmp.Icon" lay-filter="btnIconPicker" class="layui-input">
<input type="text" id="Icon" name="Icon" lay-filter="btnIconPicker" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">样式</label>
<div class="layui-input-block">
<input type="text" name="Class" v-model="tmp.Class"
<input type="text" name="Class"
placeholder="菜单的样式layui-btn-danger" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">排序号</label>
<div class="layui-input-block">
<input type="text" name="Sort" v-model="tmp.Sort" required lay-verify="required"
<input type="text" name="Sort" required lay-verify="required"
placeholder="请输入排序号" autocomplete="off" class="layui-input">
</div>
</div>
@@ -200,4 +198,4 @@
</div>
<script type="text/javascript" src="/layui/layui.js"></script>
<script type="text/javascript" src="/userJs/modules.js"></script>
<script type="text/javascript" src="/userJs/modules.js?v2"></script>

View File

@@ -56,21 +56,21 @@
<!--用户添加/编辑窗口-->
<div id="divEdit" style="display: none">
<form class="layui-form layui-form-pane" action="" id="formEdit">
<form class="layui-form layui-form-pane" action="" id="formEdit" lay-filter="formEdit">
<input type="hidden" name="Id" v-model="tmp.Id" />
<input type="hidden" name="Id" />
<div class="layui-form-item">
<label class="layui-form-label">账号</label>
<div class="layui-input-block">
<input type="text" name="Account" v-model="tmp.Account" required lay-verify="required"
<input type="text" name="Account" required lay-verify="required"
placeholder="请输入登录账号" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">姓名</label>
<div class="layui-input-block">
<input type="text" name="Name" v-model="tmp.Name" required lay-verify="required"
<input type="text" name="Name" required lay-verify="required"
placeholder="请输入昵称或姓名" autocomplete="off" class="layui-input">
</div>
</div>
@@ -78,8 +78,8 @@
<div class="layui-form-item">
<label class="layui-form-label">所属部门</label>
<div class="layui-input-block">
<input id="Organizations" name="Organizations" v-model="tmp.Organizations" required lay-verify="required" class="layui-input" />
<input id="OrganizationIds" name="OrganizationIds" v-model="tmp.OrganizationIds" required lay-verify="required" type="hidden" />
<input id="Organizations" name="Organizations" required lay-verify="required" class="layui-input" />
<input id="OrganizationIds" name="OrganizationIds" required lay-verify="required" type="hidden" />
</div>
</div>
@@ -87,14 +87,14 @@
<div class="layui-form-item" pane>
<label class="layui-form-label">性别</label>
<div class="layui-input-block">
<input type="radio" name="Sex" value="1" title="男" v-model="tmp.Sex" >
<input type="radio" name="Sex" value="0" title="女" v-model="tmp.Sex" >
<input type="radio" name="Sex" value="1" title="男" >
<input type="radio" name="Sex" value="0" title="女" >
</div>
</div>
<div class="layui-form-item" pane>
<label class="layui-form-label">禁用</label>
<div class="layui-input-block">
<input type="checkbox" name="Status" v-model="tmp.Status" lay-skin="switch" value="1">
<input type="checkbox" name="Status" lay-skin="switch" value="1">
</div>
</div>
<div class="layui-form-item">
@@ -107,4 +107,4 @@
</div>
<script type="text/javascript" src="/layui/layui.js"></script>
<script type="text/javascript" src="/userJs/users.js?v2.0"></script>
<script type="text/javascript" src="/userJs/users.js?v3.0"></script>

View File

@@ -1,62 +1,39 @@
layui.config({
base: "/js/"
}).use(['form','vue', 'ztree', 'layer', 'jquery', 'table', 'droptree', 'openauth', 'iconPicker', 'utils'], function () {
}).use(['form', 'ztree', 'layer', 'jquery', 'table', 'droptree', 'openauth', 'iconPicker', 'utils'], function () {
var form = layui.form,
layer = layui.layer,
$ = layui.jquery;
var iconPicker = layui.iconPicker;
var btnIconPicker = layui.iconPicker;
var vmMenu = new Vue({
el: "#mfromEdit",
data(){
return {
tmp: {}
}
},
watch:{
tmp(val){
this.$nextTick(function () {
form.render(); //刷新select等
btnIconPicker.checkIcon('btnIconPicker', this.tmp.Icon);
})
}
},
mounted(){
form.render();
}
});
var vmModule = new Vue({
el: "#formEdit",
data(){
return {
tmp: {} //使用一个tmp封装一下后面可以直接用vm.tmp赋值
}
},
watch:{
tmp(val){
this.$nextTick(function () {
form.render(); //刷新select等
layui.droptree("/UserSession/GetModules", "#ParentName", "#ParentId", false);
iconPicker.checkIcon('iconPicker', this.tmp.IconName);
})
}
},
mounted(){
form.render();
layui.droptree("/UserSession/GetModules", "#ParentName", "#ParentId", false);
}
});
var moduleInitVal = { //模块初始化的值
Id: "",
SortNo: 1,
IconName: 'layui-icon-app',
ParentId: '',
ParentName: '',
Name: '',
Url: '',
Status: 0,
Remark: '',
Code: ''
};
var menuInital={ //菜单初始化的值
Id: "",
ModuleId: "",
Name:'',
DomeId:'',
Class:'',
Sort: 1,
Icon: 'layui-icon-app'
}
iconPicker.render({
// 选择器推荐使用input
elem: '#IconName',
type: 'fontClass',
// 每个图标格子的宽度:'43px'或'20%'
cellWidth: '43px',
// 点击回调
click: function (data) {
vmModule.tmp.IconName = data.icon;
}
});
btnIconPicker.render({ //按钮的图标
// 选择器推荐使用input
@@ -64,19 +41,15 @@ layui.config({
type: 'fontClass',
// 每个图标格子的宽度:'43px'或'20%'
cellWidth: '43px',
// 点击回调
click: function (data) {
vmMenu.tmp.Icon = data.icon;
}
});
var table = layui.table;
var openauth = layui.openauth;
$("#menus").loadMenus("Module");
//主列表加载,可反复调用进行刷新
var config= {}; //table的参数如搜索key点击tree的id
var config = {}; //table的参数如搜索key点击tree的id
var mainList = function (options) {
if (options != undefined) {
$.extend(config, options);
@@ -86,7 +59,7 @@ layui.config({
where: config
, response: {
statusCode: 200 //规定成功的状态码默认0
}
}
});
}
@@ -101,7 +74,7 @@ layui.config({
where: menucon
, response: {
statusCode: 200 //规定成功的状态码默认0
}
}
});
}
@@ -110,7 +83,7 @@ layui.config({
var url = '/UserSession/GetModules';
var zTreeObj;
var setting = {
view: { selectedMulti: false },
view: {selectedMulti: false},
data: {
key: {
name: 'Name',
@@ -125,17 +98,17 @@ layui.config({
},
callback: {
onClick: function (event, treeId, treeNode) {
mainList({ pId: treeNode.Id });
mainList({pId: treeNode.Id});
}
}
};
var load = function () {
$.getJSON(url, function (json) {
zTreeObj = $.fn.zTree.init($("#tree"), setting);
var newNode = { Name: "根节点", Id: null, ParentId: "" };
var newNode = {Name: "根节点", Id: null, ParentId: ""};
json.Result.push(newNode);
zTreeObj.addNodes(null, json.Result);
mainList({ pId: "" });
mainList({pId: ""});
zTreeObj.expandAll(true);
});
};
@@ -146,35 +119,35 @@ layui.config({
}();
$("#tree").height($("div.layui-table-view").height());
//添加(编辑)模块对话框
var editDlg = function() {
var update = false; //是否为更新
var show = function (data) {
var editDlg = function () {
var show = function (update, data) {
var title = update ? "编辑信息" : "添加";
layer.open({
title: title,
area: ["500px", "480px"],
type: 1,
content: $('#divEdit'),
success: function() {
if(data.Id ==''){
for(var key in vmModule.tmp){
delete vmModule.tmp[key];
}
success: function () {
layui.droptree("/UserSession/GetModules", "#ParentName", "#ParentId", false);
if (data == undefined) {
form.val("formEdit", moduleInitVal);
} else {
form.val("formEdit", data);
iconPicker.checkIcon('iconPicker', data.IconName);
}
vmModule.tmp = Object.assign({}, vmModule.tmp,data)
},
end: mainList
});
var url = "/moduleManager/Add";
if (update) {
url = "/moduleManager/Update";
url = "/moduleManager/Update";
}
//提交数据
form.on('submit(formSubmit)',
function(data) {
function (data) {
$.post(url,
data.field,
function(data) {
function (data) {
layer.msg(data.Message);
if ((!update) && data.Code == 200) { //添加成功要刷新左边的树
ztree.reload();
@@ -185,25 +158,18 @@ layui.config({
});
}
return {
add: function() { //弹出添加
update = false;
show({
Id: "",
SortNo: 1,
IconName:'layui-icon-app'
});
add: function () { //弹出添加
show(false);
},
update: function(data) { //弹出编辑框
update = true;
show(data);
update: function (data) { //弹出编辑框
show(true,data);
}
};
}();
//添加菜单对话框
var meditDlg = function () {
var update = false; //是否为更新
var show = function (data) {
var show = function (update, data) {
var title = update ? "编辑信息" : "添加";
layer.open({
title: title,
@@ -211,12 +177,12 @@ layui.config({
type: 1,
content: $('#divMenuEdit'),
success: function () {
if(data.Id ==''){
for(var key in vmMenu.tmp){
delete vmMenu.tmp[key];
}
if (data == undefined) {
form.val("mfromEdit", menuInital);
} else {
form.val("mfromEdit", data);
btnIconPicker.checkIcon('btnIconPicker', data.Icon);
}
vmMenu.tmp = Object.assign({}, vmMenu.tmp,data)
},
end: menuList
});
@@ -238,24 +204,17 @@ layui.config({
}
return {
add: function (moduleId) { //弹出添加
update = false;
show({
Id: "",
ModuleId:moduleId,
Sort: 1,
Icon:'layui-icon-app'
});
show(false);
},
update: function (data) { //弹出编辑框
update = true;
show(data);
show(true,data);
}
};
}();
//监听行单击事件
table.on('row(list)', function(obj){
menuList({moduleId:obj.data.Id});
table.on('row(list)', function (obj) {
menuList({moduleId: obj.data.Id});
});
//监听页面主按钮操作
@@ -264,7 +223,9 @@ layui.config({
var checkStatus = table.checkStatus('mainList')
, data = checkStatus.data;
openauth.del("/moduleManager/Delete",
data.map(function (e) { return e.Id; }),
data.map(function (e) {
return e.Id;
}),
function () {
mainList();
ztree.reload();
@@ -274,7 +235,9 @@ layui.config({
var checkStatus = table.checkStatus('menuList')
, data = checkStatus.data;
openauth.del("/moduleManager/DelMenu",
data.map(function (e) { return e.Id; }),
data.map(function (e) {
return e.Id;
}),
menuList);
}
, btnAdd: function () { //添加模块
@@ -289,15 +252,15 @@ layui.config({
}
meditDlg.add(data[0].Id);
}
, btnEdit: function () { //编辑
var checkStatus = table.checkStatus('mainList')
, data = checkStatus.data;
if (data.length != 1) {
layer.msg("请选择编辑的行,且同时只能编辑一行");
return;
}
editDlg.update(data[0]);
}
, btnEdit: function () { //编辑
var checkStatus = table.checkStatus('mainList')
, data = checkStatus.data;
if (data.length != 1) {
layer.msg("请选择编辑的行,且同时只能编辑一行");
return;
}
editDlg.update(data[0]);
}
, btnEditMenu: function () { //编辑菜单
var checkStatus = table.checkStatus('menuList')
@@ -310,9 +273,9 @@ layui.config({
}
, search: function () { //搜索
mainList({ key: $('#key').val() });
mainList({key: $('#key').val()});
}
, btnRefresh: function() {
, btnRefresh: function () {
mainList();
}
};

View File

@@ -7,6 +7,16 @@ layui.config({
var table = layui.table;
var openauth = layui.openauth;
var toplayer = (top == undefined || top.layer === undefined) ? layer : top.layer; //顶层的LAYER
var initVal = { //初始化数据
Id: '',
Account:'',
Name:'',
Organizations:'',
OrganizationIds:'',
Sex:'',
Status:0
};
$("#menus").loadMenus("User");
@@ -68,9 +78,7 @@ layui.config({
//添加(编辑)对话框
var editDlg = function() {
var vm;
var update = false; //是否为更新
var show = function (data) {
var show = function (update, data) {
var title = update ? "编辑信息" : "添加";
layer.open({
title: title,
@@ -78,34 +86,18 @@ layui.config({
type: 1,
content: $('#divEdit'),
success: function() {
if(vm == undefined){
vm = new Vue({
el: "#formEdit",
data(){
return {
tmp:data //使用一个tmp封装一下后面可以直接用vm.tmp赋值
}
},
watch:{
tmp(val){
this.$nextTick(function () {
form.render(); //刷新select等
//layui.droptree("/UserSession/GetOrgs", "#Organizations", "#OrganizationIds");
})
}
},
mounted(){
form.render();
var _this = this;
layui.droptree("/UserSession/GetOrgs", "#Organizations", "#OrganizationIds", true,function (ids, names) {
_this.tmp.OrganizationIds = ids;
_this.tmp.Organizations = names;
});
}
if (data == undefined) {
form.val("formEdit", initVal);
} else {
layui.droptree("/UserSession/GetOrgs", "#Organizations", "#OrganizationIds", true,function (ids, names) {
form.val("formEdit", {
Organizations: names,
OrganizationIds: ids
});
});
}else{
vm.tmp = Object.assign({}, vm.tmp,data)
}
form.val("formEdit", data);
}
},
end: mainList
});
@@ -127,22 +119,15 @@ layui.config({
//重置
$("#reset").click(function(){
vm.tmp = {
OrganizationIds:'',
Organizations:''
}
});
}
return {
add: function() { //弹出添加
update = false;
show({
Id: ''
});
show(false);
},
update: function(data) { //弹出编辑框
update = true;
show(data);
show(true,data);
}
};
}();