mirror of
https://gitee.com/dotnetchina/OpenAuth.Net.git
synced 2026-07-31 19:16:49 +08:00
Compare commits
9 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4938027aa5 | ||
|
|
c8db5cb0b0 | ||
|
|
958a455dc4 | ||
|
|
c5149d33c4 | ||
|
|
86aad6337c | ||
|
|
099e695c27 | ||
|
|
a909d723a2 | ||
|
|
2b38807d2d | ||
|
|
d49ed28b13 |
@@ -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(); }
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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();
|
||||
}
|
||||
};
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
};
|
||||
}();
|
||||
|
||||
Reference in New Issue
Block a user