mirror of
https://gitee.com/dotnetchina/OpenAuth.Net.git
synced 2025-07-16 16:50:54 +08:00
routine update
This commit is contained in:
parent
0a21ac28ff
commit
0c2cb7911d
@ -25,6 +25,12 @@ namespace OpenAuth.Mvc.Controllers
|
|||||||
return View();
|
return View();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//流程节点信息
|
||||||
|
public ActionResult NodeInfo()
|
||||||
|
{
|
||||||
|
return View();
|
||||||
|
}
|
||||||
|
|
||||||
//添加或修改
|
//添加或修改
|
||||||
[System.Web.Mvc.HttpPost]
|
[System.Web.Mvc.HttpPost]
|
||||||
public string Add(FlowScheme obj)
|
public string Add(FlowScheme obj)
|
||||||
|
@ -205,6 +205,7 @@
|
|||||||
<Content Include="js\flow-ui\img\wallbg.png" />
|
<Content Include="js\flow-ui\img\wallbg.png" />
|
||||||
<Content Include="js\utils\flowlayout.js" />
|
<Content Include="js\utils\flowlayout.js" />
|
||||||
<Content Include="js\utils\ui.js" />
|
<Content Include="js\utils\ui.js" />
|
||||||
|
<Content Include="userJs\nodeInfo.js" />
|
||||||
<Content Include="userJs\categories.js" />
|
<Content Include="userJs\categories.js" />
|
||||||
<Content Include="userJs\assign.js" />
|
<Content Include="userJs\assign.js" />
|
||||||
<Content Include="js\openauth.js" />
|
<Content Include="js\openauth.js" />
|
||||||
@ -236,7 +237,6 @@
|
|||||||
<Content Include="userJs\modules.js" />
|
<Content Include="userJs\modules.js" />
|
||||||
<Content Include="js\queryString.js" />
|
<Content Include="js\queryString.js" />
|
||||||
<Content Include="userJs\orgs.js" />
|
<Content Include="userJs\orgs.js" />
|
||||||
<Content Include="userJs\flowDesign.js" />
|
|
||||||
<Content Include="userJs\roles.js" />
|
<Content Include="userJs\roles.js" />
|
||||||
<Content Include="js\ueditor\dialogs\anchor\anchor.html" />
|
<Content Include="js\ueditor\dialogs\anchor\anchor.html" />
|
||||||
<Content Include="js\ueditor\dialogs\attachment\attachment.css" />
|
<Content Include="js\ueditor\dialogs\attachment\attachment.css" />
|
||||||
@ -643,7 +643,7 @@
|
|||||||
<Content Include="Views\Forms\Preview.cshtml" />
|
<Content Include="Views\Forms\Preview.cshtml" />
|
||||||
<Content Include="Views\FlowInstances\Index.cshtml" />
|
<Content Include="Views\FlowInstances\Index.cshtml" />
|
||||||
<Content Include="Views\FlowSchemes\Index.cshtml" />
|
<Content Include="Views\FlowSchemes\Index.cshtml" />
|
||||||
<Content Include="Views\FlowSchemes\Design.cshtml" />
|
<Content Include="Views\FlowSchemes\NodeInfo.cshtml" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup />
|
<ItemGroup />
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
@ -1,19 +0,0 @@
|
|||||||
@{
|
|
||||||
Layout = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
<!DOCTYPE html>
|
|
||||||
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<meta name="viewport" content="width=device-width" />
|
|
||||||
<link href="/js/ueditor/formdesign/bootstrap/css/bootstrap.min.css" rel="stylesheet" />
|
|
||||||
<link href="/js/flow-ui/flow.css" rel="stylesheet" />
|
|
||||||
<title>流程设计</title>
|
|
||||||
</head>
|
|
||||||
<body id="flowPanel" style="margin: 0">
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
|
|
||||||
<script type="text/javascript" src="/layui/layui.js"></script>
|
|
||||||
<script type="text/javascript" src="/userJs/flowDesign.js"></script>
|
|
@ -1,6 +1,7 @@
|
|||||||
@section header
|
@section header
|
||||||
{
|
{
|
||||||
<link rel="stylesheet" href="/css/treetable.css" />
|
<link rel="stylesheet" href="/css/treetable.css" />
|
||||||
|
<link href="/js/flow-ui/flow.css" rel="stylesheet" />
|
||||||
}
|
}
|
||||||
<blockquote class="layui-elem-quote news_search toolList">
|
<blockquote class="layui-elem-quote news_search toolList">
|
||||||
@Html.Action("MenuHeader", "Home")
|
@Html.Action("MenuHeader", "Home")
|
||||||
@ -43,9 +44,9 @@
|
|||||||
<div class="layui-tab layui-tab-brief" lay-filter="tab">
|
<div class="layui-tab layui-tab-brief" lay-filter="tab">
|
||||||
<ul class="layui-tab-title">
|
<ul class="layui-tab-title">
|
||||||
<li class="layui-this">基本信息</li>
|
<li class="layui-this">基本信息</li>
|
||||||
<li>表单设计</li>
|
<li>流程设计</li>
|
||||||
</ul>
|
</ul>
|
||||||
<div class="layui-tab-content" style="height: 100px;">
|
<div class="layui-tab-content">
|
||||||
<div class="layui-tab-item layui-show">
|
<div class="layui-tab-item layui-show">
|
||||||
|
|
||||||
<div class="layui-form-item">
|
<div class="layui-form-item">
|
||||||
@ -94,11 +95,11 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="layui-tab-item">
|
<div class="layui-tab-item">
|
||||||
<iframe src="/flowschemes/design" style="margin: 0px;"></iframe>
|
<div id="flowPanel" style=""></div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="layui-row">
|
<div class="layui-row">
|
||||||
<div class="layui-input-block">
|
<div class="layui-input-block">
|
||||||
<button class="layui-btn" lay-submit lay-filter="formSubmit">立即提交</button>
|
<button class="layui-btn" lay-submit lay-filter="formSubmit">立即提交</button>
|
||||||
@ -109,6 +110,6 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script type="text/javascript" src="/layui/layui.js"></script>
|
<script type="text/javascript" src="/layui/layui.js"></script>
|
||||||
<script type="text/javascript" src="/userJs/flowSchemes.js"></script>
|
<script type="text/javascript" src="/userJs/flowSchemes.js?v2"></script>
|
||||||
|
|
||||||
|
|
||||||
|
49
OpenAuth.Mvc/Views/FlowSchemes/NodeInfo.cshtml
Normal file
49
OpenAuth.Mvc/Views/FlowSchemes/NodeInfo.cshtml
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
@section header
|
||||||
|
{
|
||||||
|
<link rel="stylesheet" href="/css/treetable.css" />
|
||||||
|
}
|
||||||
|
|
||||||
|
<form class="layui-form" action="" id="formEdit">
|
||||||
|
<div class="layui-row">
|
||||||
|
<div class="layui-tab layui-tab-brief" lay-filter="tab">
|
||||||
|
<ul class="layui-tab-title">
|
||||||
|
<li class="layui-this">基本信息</li>
|
||||||
|
<li>执行人</li>
|
||||||
|
</ul>
|
||||||
|
<div class="layui-tab-content">
|
||||||
|
<div class="layui-tab-item layui-show">
|
||||||
|
|
||||||
|
<div class="layui-form-item">
|
||||||
|
<label class="layui-form-label">节点标识</label>
|
||||||
|
<div class="layui-input-block">
|
||||||
|
<input type="text" name="NodeCode" id="NodeCode" v-model="NodeCode" 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="NodeName" v-model="NodeName" 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="Description" v-model="Description" required lay-verify="required"
|
||||||
|
placeholder="备注" autocomplete="off" class="layui-input">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="layui-tab-item">
|
||||||
|
<ul id="tree" class="ztree" style="display: inline-block; width: 180px; padding: 10px; border: 1px solid #ddd; overflow: auto;"></ul>
|
||||||
|
<ul id="menutree" class="ztree" style="display: inline-block; width: 180px; padding: 10px; border: 1px solid #ddd; overflow: auto;"></ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<script type="text/javascript" src="/layui/layui.js"></script>
|
||||||
|
<script type="text/javascript" src="/userJs/nodeInfo.js"></script>
|
@ -1,101 +0,0 @@
|
|||||||
layui.config({
|
|
||||||
base: "/js/"
|
|
||||||
}).use(['form', 'vue', 'layer', 'jquery', 'table', 'flow-ui/gooflow', 'utils/flowlayout', 'droptree', 'queryString'], function () {
|
|
||||||
var form = layui.form,
|
|
||||||
element = layui.element,
|
|
||||||
//layer = (parent == undefined || parent.layer === undefined )? layui.layer : parent.layer,
|
|
||||||
layer = layui.layer,
|
|
||||||
$ = layui.jquery;
|
|
||||||
|
|
||||||
var postData = {};//提交数据
|
|
||||||
var flowData = {};
|
|
||||||
var frmData = {};
|
|
||||||
var SchemeContentOld;
|
|
||||||
var frmapp;
|
|
||||||
var shcemeAuthorizeData = "";
|
|
||||||
var AllAuthorizeCheckData = {};
|
|
||||||
|
|
||||||
|
|
||||||
/*=========流程设计(begin)======================*/
|
|
||||||
var FlowDesignPanel;
|
|
||||||
var FlowDesignObject;//
|
|
||||||
var LineId;
|
|
||||||
var nodePramData = [];
|
|
||||||
FlowDesignPanel = $('#flowPanel').flowdesign({
|
|
||||||
height: ($(window).height() - 87),
|
|
||||||
widht: 1000,
|
|
||||||
OpenNode: function (object) {
|
|
||||||
FlowDesignObject = object;
|
|
||||||
if (object.$nodeData[object.$focus].type == 'startround') {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
layer.open({
|
|
||||||
type: 2,
|
|
||||||
skin: 'layui-layer-rim', //加上边框
|
|
||||||
area: ['800px', '450px'], //宽高
|
|
||||||
maxmin: true, //开启最大化最小化按钮
|
|
||||||
title: '节点设置【' + object.$nodeData[object.$focus].name + '】',
|
|
||||||
content: '/FlowManage/FlowDesign/FlowNodeForm',
|
|
||||||
btn: ['保存', '关闭'],
|
|
||||||
yes: function (index, layero) {
|
|
||||||
var body = layer.getChildFrame('body', index);
|
|
||||||
var iframeWin = window[layero.find('iframe')[0]['name']]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
|
|
||||||
iframeWin.AcceptClick();
|
|
||||||
},
|
|
||||||
cancel: function (index) {
|
|
||||||
layer.close(index);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
},
|
|
||||||
OpenLine: function (id, object) {
|
|
||||||
FlowDesignObject = object;
|
|
||||||
LineId = id;
|
|
||||||
var _line = object.$lineData[id];
|
|
||||||
var _fromNode = object.$nodeData[_line.from];
|
|
||||||
if (_fromNode.type == "shuntnode") {
|
|
||||||
dialogTop("前一个节点是分流节点无法设置流转条件", "error");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
layer.open({
|
|
||||||
type: 2,
|
|
||||||
skin: 'layui-layer-rim', //加上边框
|
|
||||||
area: ['800px', '450px'], //宽高
|
|
||||||
maxmin: true, //开启最大化最小化按钮
|
|
||||||
title: '流转条件设置',
|
|
||||||
content: '/FlowManage/FlowDesign/FlowLineForm',
|
|
||||||
btn: ['保存', '关闭'],
|
|
||||||
yes: function (index, layero) {
|
|
||||||
var body = layer.getChildFrame('body', index);
|
|
||||||
var iframeWin = window[layero.find('iframe')[0]['name']]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
|
|
||||||
iframeWin.AcceptClick();
|
|
||||||
},
|
|
||||||
cancel: function (index) {
|
|
||||||
layer.close(index);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
|
||||||
});
|
|
||||||
function setFlowInfo(data) {
|
|
||||||
FlowDesignPanel.loadData(data);
|
|
||||||
}
|
|
||||||
function callBackNode(id, data, _nodePramData) {
|
|
||||||
nodePramData = _nodePramData;
|
|
||||||
FlowDesignPanel.SetNodeEx(id, data);
|
|
||||||
}
|
|
||||||
function callBackLine(id, data) {
|
|
||||||
FlowDesignPanel.SetLineEx(id, data);
|
|
||||||
}
|
|
||||||
function bindingFlow() {
|
|
||||||
var _content = FlowDesignPanel.exportDataEx();
|
|
||||||
if (_content == -1) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
flowData["SchemeContent"] = JSON.stringify({ "Frm": frmData, "Flow": _content });
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
/*=========流程设计(end)=====================*/
|
|
||||||
|
|
||||||
})
|
|
@ -1,6 +1,6 @@
|
|||||||
layui.config({
|
layui.config({
|
||||||
base: "/js/"
|
base: "/js/"
|
||||||
}).use(['form','vue', 'ztree', 'layer','element', 'jquery', 'table','droptree','openauth'], function () {
|
}).use(['form', 'vue', 'ztree', 'layer', 'element', 'jquery', 'table', 'droptree', 'openauth', 'flow-ui/gooflow', 'utils/flowlayout'], function () {
|
||||||
var form = layui.form, element = layui.element,
|
var form = layui.form, element = layui.element,
|
||||||
//layer = (parent == undefined || parent.layer === undefined )? layui.layer : parent.layer,
|
//layer = (parent == undefined || parent.layer === undefined )? layui.layer : parent.layer,
|
||||||
layer = layui.layer,
|
layer = layui.layer,
|
||||||
@ -66,6 +66,55 @@
|
|||||||
}
|
}
|
||||||
}();
|
}();
|
||||||
|
|
||||||
|
/*=========流程设计(begin)======================*/
|
||||||
|
var flowData = {};
|
||||||
|
var frmData = {};
|
||||||
|
var nodePramData = [];
|
||||||
|
var flowDesignPanel = $('#flowPanel').flowdesign({
|
||||||
|
height: 500,
|
||||||
|
widht: 700,
|
||||||
|
OpenNode: function (object) {
|
||||||
|
if (object.$nodeData[object.$focus].type == 'startround') {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
layer.open({
|
||||||
|
type: 2,
|
||||||
|
area: ['500px', '450px'], //宽高
|
||||||
|
maxmin: true, //开启最大化最小化按钮
|
||||||
|
title: '节点设置【' + object.$nodeData[object.$focus].name + '】',
|
||||||
|
content: '/flowschemes/nodeInfo',
|
||||||
|
btn: ['保存', '关闭'],
|
||||||
|
yes: function (index, layero) {
|
||||||
|
var body = layer.getChildFrame('body', index);
|
||||||
|
var iframeWin = window[layero.find('iframe')[0]['name']]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
|
||||||
|
var nodedata = iframeWin.getVal();
|
||||||
|
flowDesignPanel.SetNodeEx(object.$focus, nodedata);
|
||||||
|
},
|
||||||
|
cancel: function (index) {
|
||||||
|
layer.close(index);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
OpenLine: function (id, object) {
|
||||||
|
lay.msg("暂不能设置分支条件");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
function setFlowInfo(data) {
|
||||||
|
flowDesignPanel.loadData(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
function bindingFlow() {
|
||||||
|
var _content = flowDesignPanel.exportDataEx();
|
||||||
|
if (_content == -1) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
flowData["SchemeContent"] = JSON.stringify({ "Frm": frmData, "Flow": _content });
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
/*=========流程设计(end)=====================*/
|
||||||
|
|
||||||
//添加(编辑)对话框
|
//添加(编辑)对话框
|
||||||
var editDlg = function() {
|
var editDlg = function() {
|
||||||
var vm = new Vue({
|
var vm = new Vue({
|
||||||
@ -90,7 +139,8 @@
|
|||||||
}
|
}
|
||||||
//提交数据
|
//提交数据
|
||||||
form.on('submit(formSubmit)',
|
form.on('submit(formSubmit)',
|
||||||
function(data) {
|
function (data) {
|
||||||
|
$.exentd(data.field, flowData);
|
||||||
$.post(url,
|
$.post(url,
|
||||||
data.field,
|
data.field,
|
||||||
function(data) {
|
function(data) {
|
||||||
@ -158,8 +208,4 @@
|
|||||||
});
|
});
|
||||||
|
|
||||||
//监听页面主按钮操作 end
|
//监听页面主按钮操作 end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
})
|
})
|
129
OpenAuth.Mvc/userJs/nodeInfo.js
Normal file
129
OpenAuth.Mvc/userJs/nodeInfo.js
Normal file
@ -0,0 +1,129 @@
|
|||||||
|
layui.config({
|
||||||
|
base: "/js/"
|
||||||
|
}).use(['form', 'vue', 'ztree', 'layer', 'element', 'jquery', 'queryString'], function () {
|
||||||
|
var //layer = (parent == undefined || parent.layer === undefined )? layui.layer : parent.layer,
|
||||||
|
layer = layui.layer,
|
||||||
|
$ = layui.jquery;
|
||||||
|
|
||||||
|
var users = [];
|
||||||
|
|
||||||
|
//菜单列表
|
||||||
|
var menucon = {}; //table的参数,如搜索key,点击tree的id
|
||||||
|
//菜单树状列表,等lay table没问题了,可以换成table
|
||||||
|
var menutree = function () {
|
||||||
|
var url = '/UserManager/Load';
|
||||||
|
var menuTree;
|
||||||
|
var setting = {
|
||||||
|
view: { selectedMulti: true },
|
||||||
|
check: {
|
||||||
|
enable: true,
|
||||||
|
chkStyle: "checkbox",
|
||||||
|
chkboxType: { "Y": "", "N": "" } //去掉勾选时级联
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
key: {
|
||||||
|
name: 'Name',
|
||||||
|
title: 'Name'
|
||||||
|
},
|
||||||
|
simpleData: {
|
||||||
|
enable: true,
|
||||||
|
idKey: 'Id',
|
||||||
|
pIdKey: 'ParentId',
|
||||||
|
rootPId: 'null'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
callback: {
|
||||||
|
onCheck: function (event, treeId, treeNode) {
|
||||||
|
users.push(treeNode.Id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
var load = function (options) {
|
||||||
|
if (options != undefined) {
|
||||||
|
$.extend(menucon, options);
|
||||||
|
}
|
||||||
|
|
||||||
|
$.getJSON(url, menucon, function (json) {
|
||||||
|
menuTree = $.fn.zTree.init($("#menutree"), setting);
|
||||||
|
menuTree.addNodes(null, json.data);
|
||||||
|
//如果已经分配了用户,则设置相应的状态
|
||||||
|
|
||||||
|
$.each(users,
|
||||||
|
function (i) {
|
||||||
|
var that = this;
|
||||||
|
var node = menuTree.getNodeByParam("Id", that, null);
|
||||||
|
menuTree.checkNode(node, true, false);
|
||||||
|
});
|
||||||
|
menuTree.expandAll(true);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
return {
|
||||||
|
load: load
|
||||||
|
}
|
||||||
|
}();
|
||||||
|
|
||||||
|
//左边树状机构列表
|
||||||
|
var ztree = function () {
|
||||||
|
var url = '/UserSession/GetOrgs';
|
||||||
|
var zTreeObj;
|
||||||
|
var setting = {
|
||||||
|
view: { selectedMulti: false },
|
||||||
|
data: {
|
||||||
|
key: {
|
||||||
|
name: 'Name',
|
||||||
|
title: 'Name'
|
||||||
|
},
|
||||||
|
simpleData: {
|
||||||
|
enable: true,
|
||||||
|
idKey: 'Id',
|
||||||
|
pIdKey: 'ParentId',
|
||||||
|
rootPId: 'null'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
callback: {
|
||||||
|
onClick: function (event, treeId, treeNode) {
|
||||||
|
menutree.load({ orgId: treeNode.Id });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
var load = function () {
|
||||||
|
$.getJSON(url, function (json) {
|
||||||
|
zTreeObj = $.fn.zTree.init($("#tree"), setting);
|
||||||
|
var newNode = { Name: "全部", Id: null, ParentId: "" };
|
||||||
|
json.push(newNode);
|
||||||
|
zTreeObj.addNodes(null, json);
|
||||||
|
menutree.load({ orgId: '' });
|
||||||
|
zTreeObj.expandAll(true);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
load();
|
||||||
|
return {
|
||||||
|
reload: load
|
||||||
|
}
|
||||||
|
}();
|
||||||
|
|
||||||
|
var vm = new Vue({
|
||||||
|
el: "#formEdit"
|
||||||
|
});
|
||||||
|
|
||||||
|
var _FlowDesignObject = parent.FlowDesignObject;
|
||||||
|
node = _FlowDesignObject.$nodeData[_FlowDesignObject.$focus];
|
||||||
|
node.id = _FlowDesignObject.$focus;
|
||||||
|
vm.set($data.node.setInfo);
|
||||||
|
|
||||||
|
//提供给上父页面调用
|
||||||
|
getVal = function () {
|
||||||
|
var result = {
|
||||||
|
NodeDesignateData: { //节点指定操作人
|
||||||
|
users: users,
|
||||||
|
role: [],
|
||||||
|
org:[]
|
||||||
|
}
|
||||||
|
};
|
||||||
|
$.extend(result, vm.$data);
|
||||||
|
|
||||||
|
console.log(JSON.stringify(result));
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
})
|
Loading…
Reference in New Issue
Block a user