+
+
+
+
+
diff --git a/OpenAuth.Mvc/Views/Forms/index.cshtml b/OpenAuth.Mvc/Views/Forms/index.cshtml
index df286773..151252c4 100644
--- a/OpenAuth.Mvc/Views/Forms/index.cshtml
+++ b/OpenAuth.Mvc/Views/Forms/index.cshtml
@@ -29,7 +29,7 @@
diff --git a/OpenAuth.Mvc/Views/Home/Main.cshtml b/OpenAuth.Mvc/Views/Home/Main.cshtml
index b7741f01..62dc656b 100644
--- a/OpenAuth.Mvc/Views/Home/Main.cshtml
+++ b/OpenAuth.Mvc/Views/Home/Main.cshtml
@@ -80,9 +80,9 @@
郑重提示:为安全起见,关闭了所有修改请求,如想体验完整功能可搭建本地环境,并将version置为空字符串
- 项目地址
- 在线文档
- 喜欢就Star一下吧
+ 项目地址
+ 在线文档
+ 喜欢就Star一下吧
注:【本框架仅作为学习交流使用,如需用作商业用途,请联系作者授权,谢谢】
技术交流QQ群:【1号:】484498493 【2号:】626433139
diff --git a/OpenAuth.Mvc/Views/ModuleManager/Index.cshtml b/OpenAuth.Mvc/Views/ModuleManager/Index.cshtml
index 32c8e7c9..e1726e1c 100644
--- a/OpenAuth.Mvc/Views/ModuleManager/Index.cshtml
+++ b/OpenAuth.Mvc/Views/ModuleManager/Index.cshtml
@@ -26,7 +26,7 @@
diff --git a/OpenAuth.Mvc/Views/RoleManager/Index.cshtml b/OpenAuth.Mvc/Views/RoleManager/Index.cshtml
index e27873ea..b63ecf85 100644
--- a/OpenAuth.Mvc/Views/RoleManager/Index.cshtml
+++ b/OpenAuth.Mvc/Views/RoleManager/Index.cshtml
@@ -22,7 +22,7 @@
diff --git a/OpenAuth.Mvc/Views/UserManager/Index.cshtml b/OpenAuth.Mvc/Views/UserManager/Index.cshtml
index 70670cb5..0a70e33a 100644
--- a/OpenAuth.Mvc/Views/UserManager/Index.cshtml
+++ b/OpenAuth.Mvc/Views/UserManager/Index.cshtml
@@ -25,7 +25,7 @@
diff --git a/OpenAuth.Mvc/js/flow-ui/flow.js b/OpenAuth.Mvc/js/flow-ui/flow.js
deleted file mode 100644
index 86d95bee..00000000
--- a/OpenAuth.Mvc/js/flow-ui/flow.js
+++ /dev/null
@@ -1,1909 +0,0 @@
-//定义一个区域图类:
-function GooFlow(bgDiv, property) {
- if (navigator.userAgent.indexOf("MSIE 8.0") > 0 || navigator.userAgent.indexOf("MSIE 7.0") > 0 || navigator.userAgent.indexOf("MSIE 6.0") > 0)
- GooFlow.prototype.useSVG = "";
- else GooFlow.prototype.useSVG = "1";
- //初始化区域图的对象
- this.$id = bgDiv.attr("id");
- this.$bgDiv = bgDiv;//最父框架的DIV
- this.$bgDiv.addClass("GooFlow");
- var width = (property.width || 800) - 2;
- var height = (property.height || 500) - 2;
- this.$bgDiv.css({ width: width + "px", height: height + "px" });
- this.$tool = null;//左侧工具栏对象
- this.$head = null;//顶部标签及工具栏按钮
- this.$title = "newFlow_1";//流程图的名称
- this.$nodeRemark = {};//每一种结点或按钮的说明文字,JSON格式,key为类名,value为用户自定义文字说明
- this.$nowType = "cursor";//当前要绘制的对象类型
- this.$lineData = {};
- this.$lineCount = 0;
- this.$nodeData = {};
- this.$nodeCount = 0;
- this.$areaData = {};
- this.$areaCount = 0;
- this.$lineDom = {};
- this.$nodeDom = {};
- this.$areaDom = {};
- this.$max = property.initNum || 1;//计算默认ID值的起始SEQUENCE
- this.$focus = "";//当前被选定的结点/转换线ID,如果没选中或者工作区被清空,则为""
- this.$cursor = "default";//鼠标指针在工作区内的样式
- this.$editable = false;//工作区是否可编辑
- this.$deletedItem = {};//在流程图的编辑操作中被删除掉的元素ID集合,元素ID为KEY,元素类型(node,line.area)为VALUE
- var headHeight = 0;
- var tmp = "";
- if (property.haveHead) {
- tmp = "
";
- for (var x = 0; x < property.headBtns.length; ++x) {
- tmp += "
"
- }
- tmp += "
";
- this.$head = $(tmp);
- this.$bgDiv.append(this.$head);
- headHeight = 24;
- //以下是当工具栏按钮被点击时触发的事件自定义(虚函数),格式为function(),因为可直接用THIS操作对象本身,不用传参;用户可自行重定义:
- this.onBtnNewClick = null;//新建流程图按钮被点中
- this.onBtnOpenClick = null;//打开流程图按钮定义
- this.onBtnSaveClick = null;//保存流程图按钮定义
- this.onFreshClick = null;//重载流程图按钮定义
- if (property.headBtns)
- this.$head.on("click", { inthis: this }, function (e) {
- if (!e) e = window.event;
- var tar = e.target;
- if (tar.tagName == "DIV" || tar.tagName == "SPAN") return;
- else if (tar.tagName == "a") tar = tar.childNode[0];
- var This = e.data.inthis;
- //定义顶部操作栏按钮的事件
- switch ($(tar).attr("class")) {
- case "ico_new": if (This.onBtnNewClick != null) This.onBtnNewClick(); break;
- case "ico_open": if (This.onBtnOpenClick != null) This.onBtnOpenClick(); break;
- case "ico_save": if (This.onBtnSaveClick != null) This.onBtnSaveClick(); break;
- case "ico_undo": This.undo(); break;
- case "ico_redo": This.redo(); break;
- case "ico_reload": if (This.onFreshClick != null) This.onFreshClick(); break;
- }
- });
- }
- var toolWidth = 0;
- if (property.haveTool) {
- this.$bgDiv.append("
");
- this.$tool = this.$bgDiv.find(".GooFlow_tool div");
- //未加代码:加入绘图工具按钮
- this.$tool.append("
");
- if (property.toolBtns && property.toolBtns.length > 0) {
- tmp = "
";
- for (var i = 0; i < property.toolBtns.length; ++i) {
- tmp += "
";//加入自定义按钮
- }
- this.$tool.append(tmp);
- }
- //加入区域划分框工具开关按钮
- if (property.haveGroup)
- this.$tool.append("
");
- toolWidth = 31;
- this.$nowType = "cursor";
- //绑定各个按钮的点击事件
- this.$tool.on("click", { inthis: this }, function (e) {
- if (!e) e = window.event;
- var tar;
- switch (e.target.tagName) {
- case "SPAN": return false;
- case "DIV": return false;
- case "B": tar = e.target.parentNode; break;
- case "A": tar = e.target;
- };
- var type = $(tar).attr("type");
- e.data.inthis.switchToolBtn(type);
- return false;
- });
- this.$editable = true;//只有具有工具栏时可编辑
- }
- width = width - toolWidth - 8;
- height = height;
- this.$bgDiv.append("
");
- this.$workArea = $("
")
- .attr({ "unselectable": "on", "onselectstart": 'return false', "onselect": 'document.selection.empty()' });
- this.$bgDiv.children(".GooFlow_work").append(this.$workArea);
- this.$draw = null;//画矢量线条的容器
- this.initDraw("draw_" + this.$id, width, height);
- this.$group = null;
- if (property.haveGroup)
- this.initGroup(width, height);
- if (this.$editable) {
- this.$workArea.on("click", { inthis: this }, function (e) {
- if (!e) e = window.event;
- if (!e.data.inthis.$editable) return;
- var type = e.data.inthis.$nowType;
- if (type == "cursor") {
- var t = $(e.target);
- var n = t.prop("tagName");
- if (n == "svg" || (n == "DIV" && t.prop("class").indexOf("GooFlow_work") > -1) || n == "LABEL") e.data.inthis.blurItem();
- return;
- }
- else if (type == "direct" || type == "group") return;
- var X, Y;
- var ev = mousePosition(e), t = getElCoordinate(this);
- X = ev.x - t.left + this.parentNode.scrollLeft - 1;
- Y = ev.y - t.top + this.parentNode.scrollTop - 1;
-
- var name = "新建节点" + e.data.inthis.$max;
- var type = e.data.inthis.$nowType;
- if (type == 'startround') {
- name = "开始";
- }
- if (type == 'endround') {
- name = "结束";
- }
- var executeadd = true;
- var _nodeData = e.data.inthis.$nodeData;
- $.each(_nodeData, function (i) {
- if (_nodeData[i].name == name) {
- alert(name + '节点不能重复');
- executeadd = false;
- return false;
- }
- })
- if (executeadd) {
- e.data.inthis.addNode(e.data.inthis.$id + "_node_" + e.data.inthis.$max, { name: name, left: X, top: Y, type: e.data.inthis.$nowType, css: '', img: '', });
- e.data.inthis.$max++;
- }
- });
- //划线时用的绑定
- this.$workArea.mousemove({ inthis: this }, function (e) {
- if (e.data.inthis.$nowType != "direct") return;
- var lineStart = $(this).data("lineStart");
- if (!lineStart) return;
- var ev = mousePosition(e), t = getElCoordinate(this);
- var X, Y;
- X = ev.x - t.left + this.parentNode.scrollLeft;
- Y = ev.y - t.top + this.parentNode.scrollTop;
- var line = document.getElementById("GooFlow_tmp_line");
- if (GooFlow.prototype.useSVG != "") {
- line.childNodes[0].setAttribute("d", "M " + lineStart.x + " " + lineStart.y + " L " + X + " " + Y);
- line.childNodes[1].setAttribute("d", "M " + lineStart.x + " " + lineStart.y + " L " + X + " " + Y);
- if (line.childNodes[1].getAttribute("marker-end") == "url(\"#arrow2\")")
- line.childNodes[1].setAttribute("marker-end", "url(#arrow3)");
- else line.childNodes[1].setAttribute("marker-end", "url(#arrow2)");
- }
- else line.points.value = lineStart.x + "," + lineStart.y + " " + X + "," + Y;
- });
- this.$workArea.mouseup({ inthis: this }, function (e) {
- if (e.data.inthis.$nowType != "direct") return;
- $(this).css("cursor", "auto").removeData("lineStart");
- var tmp = document.getElementById("GooFlow_tmp_line");
- if (tmp) e.data.inthis.$draw.removeChild(tmp);
- });
- //为了结点而增加的一些集体delegate绑定
- this.initWorkForNode();
- //对结点进行移动或者RESIZE时用来显示的遮罩层
- this.$ghost = $("
").attr({ "unselectable": "on", "onselectstart": 'return false', "onselect": 'document.selection.empty()' });
- this.$bgDiv.append(this.$ghost);
- this.$textArea = $("
");
- this.$bgDiv.append(this.$textArea);
- this.$lineMove = $("
");//操作折线时的移动框
- this.$workArea.append(this.$lineMove);
- this.$lineMove.on("mousedown", { inthis: this }, function (e) {
- if (e.button == 2) return false;
- var lm = $(this);
- lm.css({ "background-color": "#333" });
- var This = e.data.inthis;
- var ev = mousePosition(e), t = getElCoordinate(This.$workArea[0]);
- var X, Y;
- X = ev.x - t.left + This.$workArea[0].parentNode.scrollLeft;
- Y = ev.y - t.top + This.$workArea[0].parentNode.scrollTop;
- var p = This.$lineMove.position();
- var vX = X - p.left, vY = Y - p.top;
- var isMove = false;
- document.onmousemove = function (e) {
- if (!e) e = window.event;
- var ev = mousePosition(e);
- var ps = This.$lineMove.position();
- X = ev.x - t.left + This.$workArea[0].parentNode.scrollLeft;
- Y = ev.y - t.top + This.$workArea[0].parentNode.scrollTop;
- if (This.$lineMove.data("type") == "lr") {
- X = X - vX;
- if (X < 0) X = 0;
- else if (X > This.$workArea.width())
- X = This.$workArea.width();
- This.$lineMove.css({ left: X + "px" });
- }
- else if (This.$lineMove.data("type") == "tb") {
- Y = Y - vY;
- if (Y < 0) Y = 0;
- else if (Y > This.$workArea.height())
- Y = This.$workArea.height();
- This.$lineMove.css({ top: Y + "px" });
- }
- isMove = true;
- }
- document.onmouseup = function (e) {
- if (isMove) {
- var p = This.$lineMove.position();
- if (This.$lineMove.data("type") == "lr")
- This.setLineM(This.$lineMove.data("tid"), p.left + 3);
- else if (This.$lineMove.data("type") == "tb")
- This.setLineM(This.$lineMove.data("tid"), p.top + 3);
- }
- This.$lineMove.css({ "background-color": "transparent" });
- if (This.$focus == This.$lineMove.data("tid")) {
- This.focusItem(This.$lineMove.data("tid"));
- }
- document.onmousemove = null;
- document.onmouseup = null;
- }
- });
- this.$lineOper = $("
");//选定线时显示的操作框
- this.$workArea.append(this.$lineOper);
- this.$lineOper.on("click", { inthis: this }, function (e) {
- if (!e) e = window.event;
- if (e.target.tagName != "A" && e.target.tagName != "B") return;
- var This = e.data.inthis;
- var id = $(this).data("tid");
- switch ($(e.target).attr("class")) {
- case "b_x":
- This.delLine(id);
- this.style.display = "none"; break;
- case "b_l1":
- This.setLineType(id, "lr"); break;
- case "b_l2":
- This.setLineType(id, "tb"); break;
- case "b_l3":
- This.setLineType(id, "sl"); break;
- break;
- }
- });
-
- //下面绑定当结点/线/分组块的一些操作事件,这些事件可直接通过this访问对象本身
- //当操作某个单元(结点/线/分组块)被添加时,触发的方法,返回FALSE可阻止添加事件的发生
- //格式function(id,type,json):id是单元的唯一标识ID,type是单元的种类,有"node","line","area"三种取值,json即addNode,addLine或addArea方法的第二个传参json.
- this.onItemAdd = null;
- //当操作某个单元(结点/线/分组块)被删除时,触发的方法,返回FALSE可阻止删除事件的发生
- //格式function(id,type):id是单元的唯一标识ID,type是单元的种类,有"node","line","area"三种取值
- this.onItemDel = null;
- //当操作某个单元(结点/分组块)被移动时,触发的方法,返回FALSE可阻止移动事件的发生
- //格式function(id,type,left,top):id是单元的唯一标识ID,type是单元的种类,有"node","area"两种取值,线line不支持移动,left是新的左边距坐标,top是新的顶边距坐标
- this.onItemMove = null;
- //当操作某个单元(结点/线/分组块)被重命名时,触发的方法,返回FALSE可阻止重命名事件的发生
- //格式function(id,name,type):id是单元的唯一标识ID,type是单元的种类,有"node","line","area"三种取值,name是新的名称
- this.onItemRename = null;
- //当操作某个单元(结点/线)被由不选中变成选中时,触发的方法,返回FALSE可阻止选中事件的发生
- //格式function(id,type):id是单元的唯一标识ID,type是单元的种类,有"node","line"两种取值,"area"不支持被选中
- this.onItemFocus = null;
- //当操作某个单元(结点/线)被由选中变成不选中时,触发的方法,返回FALSE可阻止取消选中事件的发生
- //格式function(id,type):id是单元的唯一标识ID,type是单元的种类,有"node","line"两种取值,"area"不支持被取消选中
- this.onItemBlur = null;
- //当操作某个单元(结点/分组块)被重定义大小或造型时,触发的方法,返回FALSE可阻止重定大小/造型事件的发生
- //格式function(id,type,width,height):id是单元的唯一标识ID,type是单元的种类,有"node","line","area"三种取值;width是新的宽度,height是新的高度
- this.onItemResize = null;
- //当移动某条折线中段的位置,触发的方法,返回FALSE可阻止重定大小/造型事件的发生
- //格式function(id,M):id是单元的唯一标识ID,M是中段的新X(或Y)的坐标
- this.onLineMove = null;
- //当变换某条连接线的类型,触发的方法,返回FALSE可阻止重定大小/造型事件的发生
- //格式function(id,type):id是单元的唯一标识ID,type是连接线的新类型,"sl":直线,"lr":中段可左右移动的折线,"tb":中段可上下移动的折线
- this.onLineSetType = null;
- //当用重色标注某个结点/转换线时触发的方法,返回FALSE可阻止重定大小/造型事件的发生
- //格式function(id,type,mark):id是单元的唯一标识ID,type是单元类型("node"结点,"line"转换线),mark为布尔值,表示是要标注TRUE还是取消标注FALSE
- this.onItemMark = null;
-
- if (property.useOperStack && this.$editable) {//如果要使用堆栈记录操作并提供“撤销/重做”的功能,只在编辑状态下有效
- this.$undoStack = [];
- this.$redoStack = [];
- this.$isUndo = 0;
- ///////////////以下是构造撤销操作/重做操作的方法
- //为了节省浏览器内存空间,undo/redo中的操作缓存栈,最多只可放40步操作;超过40步时,将自动删掉最旧的一个缓存
- this.pushOper = function (funcName, paras) {
- var len = this.$undoStack.length;
- if (this.$isUndo == 1) {
- this.$redoStack.push([funcName, paras]);
- this.$isUndo = false;
- if (this.$redoStack.length > 40) this.$redoStack.shift();
- } else {
- this.$undoStack.push([funcName, paras]);
- if (this.$undoStack.length > 40) this.$undoStack.shift();
- if (this.$isUndo == 0) {
- this.$redoStack.splice(0, this.$redoStack.length);
- }
- this.$isUndo = 0;
- }
- };
- //将外部的方法加入到GooFlow对象的事务操作堆栈中,在过后的undo/redo操作中可以进行控制,一般用于对流程图以外的附加信息进行编辑的事务撤销/重做控制;
- //传参func为要执行方法对象,jsonPara为外部方法仅有的一个面向字面的JSON传参,由JSON对象带入所有要传的信息;
- //提示:为了让外部方法能够被UNDO/REDO,需要在编写这些外部方法实现时,加入对该方法执行后效果回退的另一个执行方法的pushExternalOper
- this.pushExternalOper = function (func, jsonPara) {
- this.pushOper("externalFunc", [func, jsonPara]);
- };
- //撤销上一步操作
- this.undo = function () {
- if (this.$undoStack.length == 0) return;
- var tmp = this.$undoStack.pop();
- this.$isUndo = 1;
- if (tmp[0] == "externalFunc") {
- tmp[1][0](tmp[1][1]);
- }
- else {
- //传参的数量,最多支持6个.
- switch (tmp[1].length) {
- case 0: this[tmp[0]](); break;
- case 1: this[tmp[0]](tmp[1][0]); break;
- case 2: this[tmp[0]](tmp[1][0], tmp[1][1]); break;
- case 3: this[tmp[0]](tmp[1][0], tmp[1][1], tmp[1][2]); break;
- case 4: this[tmp[0]](tmp[1][0], tmp[1][1], tmp[1][2], tmp[1][3]); break;
- case 5: this[tmp[0]](tmp[1][0], tmp[1][1], tmp[1][2], tmp[1][3], tmp[1][4]); break;
- case 6: this[tmp[0]](tmp[1][0], tmp[1][1], tmp[1][2], tmp[1][3], tmp[1][4], tmp[1][5]); break;
- }
- }
- };
- //重做最近一次被撤销的操作
- this.redo = function () {
- if (this.$redoStack.length == 0) return;
- var tmp = this.$redoStack.pop();
- this.$isUndo = 2;
- if (tmp[0] == "externalFunc") {
- tmp[1][0](tmp[1][1]);
- }
- else {
- //传参的数量,最多支持6个.
- switch (tmp[1].length) {
- case 0: this[tmp[0]](); break;
- case 1: this[tmp[0]](tmp[1][0]); break;
- case 2: this[tmp[0]](tmp[1][0], tmp[1][1]); break;
- case 3: this[tmp[0]](tmp[1][0], tmp[1][1], tmp[1][2]); break;
- case 4: this[tmp[0]](tmp[1][0], tmp[1][1], tmp[1][2], tmp[1][3]); break;
- case 5: this[tmp[0]](tmp[1][0], tmp[1][1], tmp[1][2], tmp[1][3], tmp[1][4]); break;
- case 6: this[tmp[0]](tmp[1][0], tmp[1][1], tmp[1][2], tmp[1][3], tmp[1][4], tmp[1][5]); break;
- }
- }
- };
- }
- $(document).keydown({ inthis: this }, function (e) {
- //绑定键盘操作
- var This = e.data.inthis;
- if (This.$focus == "") return;
- switch (e.keyCode) {
- case 46://删除
- This.delNode(This.$focus, true);
- This.delLine(This.$focus);
- break;
- }
- });
- }
-}
-GooFlow.prototype = {
- useSVG: "",
- getSvgMarker: function (id, color) {
- var m = document.createElementNS("http://www.w3.org/2000/svg", "marker");
- m.setAttribute("id", id);
- m.setAttribute("viewBox", "0 0 6 6");
- m.setAttribute("refX", 5);
- m.setAttribute("refY", 3);
- m.setAttribute("markerUnits", "strokeWidth");
- m.setAttribute("markerWidth", 6);
- m.setAttribute("markerHeight", 6);
- m.setAttribute("orient", "auto");
- var path = document.createElementNS("http://www.w3.org/2000/svg", "path");
- path.setAttribute("d", "M 0 0 L 6 3 L 0 6 z");
- path.setAttribute("fill", color);
- path.setAttribute("stroke-width", 0);
- m.appendChild(path);
- return m;
- },
- initDraw: function (id, width, height) {
- var elem;
- if (GooFlow.prototype.useSVG != "") {
- this.$draw = document.createElementNS("http://www.w3.org/2000/svg", "svg");//可创建带有指定命名空间的元素节点
- this.$workArea.prepend(this.$draw);
- var defs = document.createElementNS("http://www.w3.org/2000/svg", "defs");
- this.$draw.appendChild(defs);
- defs.appendChild(GooFlow.prototype.getSvgMarker("arrow1", "gray"));
- defs.appendChild(GooFlow.prototype.getSvgMarker("arrow2", "#ff3300"));
- defs.appendChild(GooFlow.prototype.getSvgMarker("arrow3", "#ff3300"));
- }
- else {
- this.$draw = document.createElement("v:group");
- this.$draw.coordsize = width * 3 + "," + height * 3;
- this.$workArea.prepend("
");
- this.$workArea.children("div")[0].insertBefore(this.$draw, null);
- }
- this.$draw.id = id;
- this.$draw.style.width = width * 3 + "px";
- this.$draw.style.height = +height * 3 + "px";
- //绑定连线的点击选中以及双击编辑事件
- var tmpClk = null;
- if (GooFlow.prototype.useSVG != "") tmpClk = "g";
- else tmpClk = "PolyLine";
- if (this.$editable) {
- $(this.$draw).delegate(tmpClk, "click", { inthis: this }, function (e) {
- e.data.inthis.focusItem(this.id, true);
- });
- $(this.$draw).delegate(tmpClk, "dblclick", { inthis: this }, function (e) {
- var This = e.data.inthis;
- OpenLine(this.id, This);
- //var oldTxt, x, y, from, to;
- //var This = e.data.inthis;
- //if (GooFlow.prototype.useSVG != "") {
- // oldTxt = this.childNodes[2].textContent;
- // from = this.getAttribute("from").split(",");
- // to = this.getAttribute("to").split(",");
- //} else {
- // oldTxt = this.childNodes[1].innerHTML;
- // var n = this.getAttribute("fromTo").split(",");
- // from = [n[0], n[1]];
- // to = [n[2], n[3]];
- //}
- //if (This.$lineData[this.id].type == "lr") {
- // from[0] = This.$lineData[this.id].M;
- // to[0] = from[0];
- //}
- //else if (This.$lineData[this.id].type == "tb") {
- // from[1] = This.$lineData[this.id].M;
- // to[1] = from[1];
- //}
- //x = (parseInt(from[0], 10) + parseInt(to[0], 10)) / 2 - 60;
- //y = (parseInt(from[1], 10) + parseInt(to[1], 10)) / 2 - 12;
- //var t = getElCoordinate(This.$workArea[0]);
- //This.$textArea.val(oldTxt).css({
- // display: "block", width: 120, height: 14,
- // left: t.left + x - This.$workArea[0].parentNode.scrollLeft,
- // top: t.top + y - This.$workArea[0].parentNode.scrollTop
- //}).data("id", This.$focus).focus();
- //This.$workArea.parent().one("mousedown", function (e) {
- // if (e.button == 2) return false;
- // This.setName(This.$textArea.data("id"), This.$textArea.val(), "line");
- // This.$textArea.val("").removeData("id").hide();
- //});
- });
- }
- },
- initGroup: function (width, height) {
- this.$group = $("
");//存放背景区域的容器
- this.$workArea.prepend(this.$group);
- if (!this.$editable) return;
- //区域划分框操作区的事件绑定
- this.$group.on("mousedown", { inthis: this }, function (e) {//绑定RESIZE功能以及移动功能
- if (e.button == 2) return false;
- var This = e.data.inthis;
- if (This.$nowType != "group") return;
- if (This.$textArea.css("display") == "block") {
- This.setName(This.$textArea.data("id"), This.$textArea.val(), "area");
- This.$textArea.val("").removeData("id").hide();
- return false;
- };
- if (!e) e = window.event;
- var cursor = $(e.target).css("cursor");
- var id = e.target.parentNode;
- switch (cursor) {
- case "nw-resize": id = id.parentNode; break;
- case "w-resize": id = id.parentNode; break;
- case "n-resize": id = id.parentNode; break;
- case "move": break;
- default: return;
- }
- id = id.id;
- var hack = 1;
- if (navigator.userAgent.indexOf("8.0") != -1) hack = 0;
- var ev = mousePosition(e), t = getElCoordinate(This.$workArea[0]);
-
- var X, Y;
- X = ev.x - t.left + This.$workArea[0].parentNode.scrollLeft;
- Y = ev.y - t.top + This.$workArea[0].parentNode.scrollTop;
- if (cursor != "move") {
- This.$ghost.css({
- display: "block",
- width: This.$areaData[id].width - 2 + "px", height: This.$areaData[id].height - 2 + "px",
- top: This.$areaData[id].top + t.top - This.$workArea[0].parentNode.scrollTop + hack + "px",
- left: This.$areaData[id].left + t.left - This.$workArea[0].parentNode.scrollLeft + hack + "px", cursor: cursor
- });
- var vX = (This.$areaData[id].left + This.$areaData[id].width) - X;
- var vY = (This.$areaData[id].top + This.$areaData[id].height) - Y;
- }
- else {
- var vX = X - This.$areaData[id].left;
- var vY = Y - This.$areaData[id].top;
- }
- var isMove = false;
- This.$ghost.css("cursor", cursor);
- document.onmousemove = function (e) {
- if (!e) e = window.event;
- var ev = mousePosition(e);
- if (cursor != "move") {
- X = ev.x - t.left + This.$workArea[0].parentNode.scrollLeft - This.$areaData[id].left + vX;
- Y = ev.y - t.top + This.$workArea[0].parentNode.scrollTop - This.$areaData[id].top + vY;
- if (X < 200) X = 200;
- if (Y < 100) Y = 100;
- switch (cursor) {
- case "nw-resize": This.$ghost.css({ width: X - 2 + "px", height: Y - 2 + "px" }); break;
- case "w-resize": This.$ghost.css({ width: X - 2 + "px" }); break;
- case "n-resize": This.$ghost.css({ height: Y - 2 + "px" }); break;
- }
- }
- else {
- if (This.$ghost.css("display") == "none") {
- This.$ghost.css({
- display: "block",
- width: This.$areaData[id].width - 2 + "px", height: This.$areaData[id].height - 2 + "px",
- top: This.$areaData[id].top + t.top - This.$workArea[0].parentNode.scrollTop + hack + "px",
- left: This.$areaData[id].left + t.left - This.$workArea[0].parentNode.scrollLeft + hack + "px", cursor: cursor
- });
- }
- X = ev.x - vX; Y = ev.y - vY;
- if (X < t.left - This.$workArea[0].parentNode.scrollLeft)
- X = t.left - This.$workArea[0].parentNode.scrollLeft;
- else if (X + This.$workArea[0].parentNode.scrollLeft + This.$areaData[id].width > t.left + This.$workArea.width())
- X = t.left + This.$workArea.width() - This.$workArea[0].parentNode.scrollLeft - This.$areaData[id].width;
- if (Y < t.top - This.$workArea[0].parentNode.scrollTop)
- Y = t.top - This.$workArea[0].parentNode.scrollTop;
- else if (Y + This.$workArea[0].parentNode.scrollTop + This.$areaData[id].height > t.top + This.$workArea.height())
- Y = t.top + This.$workArea.height() - This.$workArea[0].parentNode.scrollTop - This.$areaData[id].height;
- This.$ghost.css({ left: X + hack + "px", top: Y + hack + "px" });
- }
- isMove = true;
- }
- document.onmouseup = function (e) {
- This.$ghost.empty().hide();
- document.onmousemove = null;
- document.onmouseup = null;
- if (!isMove) return;
- if (cursor != "move")
- This.resizeArea(id, This.$ghost.outerWidth(), This.$ghost.outerHeight());
- else
- This.moveArea(id, X + This.$workArea[0].parentNode.scrollLeft - t.left, Y + This.$workArea[0].parentNode.scrollTop - t.top);
- return false;
- }
- });
- //绑定修改文字说明功能
- this.$group.on("dblclick", { inthis: this }, function (e) {
- var This = e.data.inthis;
- if (This.$nowType != "group") return;
- if (!e) e = window.event;
- if (e.target.tagName != "LABEL") return false;
- var oldTxt = e.target.innerHTML;
- var p = e.target.parentNode;
- var x = parseInt(p.style.left, 10) + 18, y = parseInt(p.style.top, 10) + 1;
- var t = getElCoordinate(This.$workArea[0]);
- This.$textArea.val(oldTxt).css({
- display: "block", width: 100, height: 14,
- left: t.left + x - This.$workArea[0].parentNode.scrollLeft,
- top: t.top + y - This.$workArea[0].parentNode.scrollTop
- }).data("id", p.id).focus();
- This.$workArea.parent().one("mousedown", function (e) {
- if (e.button == 2) return false;
- if (This.$textArea.css("display") == "block") {
- This.setName(This.$textArea.data("id"), This.$textArea.val(), "area");
- This.$textArea.val("").removeData("id").hide();
- }
- });
- return false;
- });
- //绑定点击事件
- this.$group.mouseup({ inthis: this }, function (e) {
-
- var This = e.data.inthis;
- if (This.$nowType != "group") return;
- if (!e) e = window.event;
- switch ($(e.target).attr("class")) {
- case "rs_close": This.delArea(e.target.parentNode.parentNode.id); return false;//删除该分组区域
- case "bg": return;
- }
- switch (e.target.tagName) {
- case "LABEL": return false;
- case "B"://绑定变色功能
- var id = e.target.parentNode.id;
- switch (This.$areaData[id].color) {
- case "red": This.setAreaColor(id, "yellow"); break;
- case "yellow": This.setAreaColor(id, "blue"); break;
- case "blue": This.setAreaColor(id, "green"); break;
- case "green": This.setAreaColor(id, "red"); break;
- }
- return false;
- }
- if (e.data.inthis.$ghost.css("display") == "none") {
- var X, Y;
- var ev = mousePosition(e), t = getElCoordinate(this);
- X = ev.x - t.left + this.parentNode.parentNode.scrollLeft - 1;
- Y = ev.y - t.top + this.parentNode.parentNode.scrollTop - 1;
- var color = ["red", "yellow", "blue", "green"];
- e.data.inthis.addArea(e.data.inthis.$id + "_area_" + e.data.inthis.$max, { name: "area_" + e.data.inthis.$max, left: X, top: Y, color: color[e.data.inthis.$max % 4], width: 200, height: 100 });
- e.data.inthis.$max++;
- return false;
- }
- });
- },
- //每一种类型结点及其按钮的说明文字
- setNodeRemarks: function (remark) {
- if (this.$tool != null)
- {
- this.$tool.children("a").each(function () {
- this.title = remark[$(this).attr("id").split("btn_")[1]];
- });
- this.$nodeRemark = remark;
- }
- },
-
- //切换左边工具栏按钮,传参TYPE表示切换成哪种类型的按钮
- switchToolBtn: function (type) {
- this.$tool.children("#" + this.$id + "_btn_" + this.$nowType.split(" ")[0]).attr("class", "GooFlow_tool_btn");
- if (this.$nowType == "group") {
- this.$workArea.prepend(this.$group);
- for (var key in this.$areaDom) this.$areaDom[key].addClass("lock").children("div:eq(1)").css("display", "none");
- }
- this.$nowType = type;
- this.$tool.children("#" + this.$id + "_btn_" + type.split(" ")[0]).attr("class", "GooFlow_tool_btndown");
- if (this.$nowType == "group") {
- this.blurItem();
- this.$workArea.append(this.$group);
- for (var key in this.$areaDom) this.$areaDom[key].removeClass("lock").children("div:eq(1)").css("display", "");
- }
- if (this.$textArea.css("display") == "none") this.$textArea.removeData("id").val("").hide();
- },
- //增加一个流程结点,传参为一个JSON,有id,name,top,left,width,height,type(结点类型)等属性
- addNode: function (id, json) {
- if (this.onItemAdd != null && !this.onItemAdd(id, "node", json)) return;
- if (this.$undoStack && this.$editable) {
- this.pushOper("delNode", [id]);
- }
- var mark = json.type;
- if (json.type != "startround" && json.type != "endround") {
- if (!json.width || json.width < 86) json.width = 150;
- if (!json.height || json.height < 24) json.height = 65;
- if (!json.top || json.top < 0) json.top = 0;
- if (!json.left || json.left < 0) json.left = 0;
- var hack = 0;
- if (navigator.userAgent.indexOf("8.0") != -1) hack = 2;
- this.$nodeDom[id] = $("
");
- if (json.type.indexOf(" mix") > -1) this.$nodeDom[id].addClass(mark);
- //json.css = mark;
- //json.img = mark;
- }
- else {
- json.width = 24; json.height = 24;
- var name = json.name;
- if (json.type == 'startround') {
- name = "开始";
- }
- if (json.type == 'endround') {
- name = "结束";
- }
- this.$nodeDom[id] = $("
");
- }
- var ua = navigator.userAgent.toLowerCase();
- if (ua.indexOf('msie') != -1 && ua.indexOf('8.0') != -1)
- this.$nodeDom[id].css("filter", "progid:DXImageTransform.Microsoft.Shadow(color=#94AAC2,direction=135,strength=2)");
- this.$workArea.append(this.$nodeDom[id]);
- this.$nodeData[id] = json;
- ++this.$nodeCount;
- if (this.$editable) {
- this.$nodeData[id].alt = true;
- if (this.$deletedItem[id]) delete this.$deletedItem[id];//在回退删除操作时,去掉该元素的删除记录
- }
- },
- initWorkForNode: function () {
- //绑定点击事件
- this.$workArea.delegate(".GooFlow_item", "click", { inthis: this }, function (e) {
- e.data.inthis.focusItem(this.id, true);
- $(this).removeClass("item_mark");
- //if (!$(this).hasClass("item_startround")) {
- // LoadrightMenu("#" + this.id);
- //}
- //if (!$(this).hasClass("item_endround")) {
- // LoadrightMenu("#" + this.id);
- //}
- });
- //绑定右击事件
- this.$workArea.delegate(".GooFlow_item", "contextmenu", { inthis: this }, function (e) {
- e.data.inthis.focusItem(this.id, true);
- $(this).removeClass("item_mark");
- return false;
- });
- //绑定用鼠标移动事件
- this.$workArea.delegate(".ico", "mousedown", { inthis: this }, function (e) {
- if (!e) e = window.event;
- if (e.button == 2) return false;
- var This = e.data.inthis;
- if (This.$nowType == "direct") return;
- var Dom = $(this).parents(".GooFlow_item");
- var id = Dom.attr("id");
- This.focusItem(id, true);
- var hack = 1;
- if (navigator.userAgent.indexOf("8.0") != -1) hack = 0;
- var ev = mousePosition(e), t = getElCoordinate(This.$workArea[0]);
-
- Dom.children("table").clone().prependTo(This.$ghost);
- var X, Y;
- X = ev.x - t.left + This.$workArea[0].parentNode.scrollLeft;
- Y = ev.y - t.top + This.$workArea[0].parentNode.scrollTop;
- var vX = X - This.$nodeData[id].left, vY = Y - This.$nodeData[id].top;
- var isMove = false;
- document.onmousemove = function (e) {
- if (!e) e = window.event;
- var ev = mousePosition(e);
- if (X == ev.x - vX && Y == ev.y - vY) return false;
- X = ev.x - vX; Y = ev.y - vY;
-
- if (isMove && This.$ghost.css("display") == "none") {
- This.$ghost.css({
- display: "block",
- width: $('#' + id).width() - 2 + "px", height: $('#' + id).height() - 2 + "px",
- top: This.$nodeData[id].top + t.top - This.$workArea[0].parentNode.scrollTop + hack + "px",
- left: This.$nodeData[id].left + t.left - This.$workArea[0].parentNode.scrollLeft + hack + "px", cursor: "move"
- });
- }
-
- if (X < t.left - This.$workArea[0].parentNode.scrollLeft)
- X = t.left - This.$workArea[0].parentNode.scrollLeft;
- else if (X + This.$workArea[0].parentNode.scrollLeft + This.$nodeData[id].width > t.left + This.$workArea.width())
- X = t.left + This.$workArea.width() - This.$workArea[0].parentNode.scrollLeft - This.$nodeData[id].width;
- if (Y < t.top - This.$workArea[0].parentNode.scrollTop)
- Y = t.top - This.$workArea[0].parentNode.scrollTop;
- else if (Y + This.$workArea[0].parentNode.scrollTop + This.$nodeData[id].height > t.top + This.$workArea.height())
- Y = t.top + This.$workArea.height() - This.$workArea[0].parentNode.scrollTop - This.$nodeData[id].height;
- This.$ghost.css({ left: X + hack + "px", top: Y + hack + "px" });
- isMove = true;
- }
- document.onmouseup = function (e) {
- if (isMove) This.moveNode(id, X + This.$workArea[0].parentNode.scrollLeft - t.left, Y + This.$workArea[0].parentNode.scrollTop - t.top);
- This.$ghost.empty().hide();
- document.onmousemove = null;
- document.onmouseup = null;
- }
- });
- if (!this.$editable) return;
- //绑定鼠标覆盖/移出事件
- this.$workArea.delegate(".GooFlow_item", "mouseenter", { inthis: this }, function (e) {
- if (e.data.inthis.$nowType != "direct") return;
- $(this).addClass("item_mark");
- });
- this.$workArea.delegate(".GooFlow_item", "mouseleave", { inthis: this }, function (e) {
- if (e.data.inthis.$nowType != "direct") return;
- $(this).removeClass("item_mark");
- });
- //绑定连线时确定初始点
- this.$workArea.delegate(".GooFlow_item", "mousedown", { inthis: this }, function (e) {
- if (e.button == 2) return false;
- var This = e.data.inthis;
- if (This.$nowType != "direct") return;
- var ev = mousePosition(e), t = getElCoordinate(This.$workArea[0]);
- var X, Y;
- X = ev.x - t.left + This.$workArea[0].parentNode.scrollLeft;
- Y = ev.y - t.top + This.$workArea[0].parentNode.scrollTop;
- This.$workArea.data("lineStart", { "x": X, "y": Y, "id": this.id }).css("cursor", "crosshair");
- var line = GooFlow.prototype.drawLine("GooFlow_tmp_line", [X, Y], [X, Y], true, true);
- This.$draw.appendChild(line);
- });
- //绑定连线时确定结束点
- this.$workArea.delegate(".GooFlow_item", "mouseup", { inthis: this }, function (e) {
- var This = e.data.inthis;
- if (This.$nowType != "direct") return;
- var lineStart = This.$workArea.data("lineStart");
- if (lineStart) This.addLine(This.$id + "_line_" + This.$max, { from: lineStart.id, to: this.id, name: "" });
- This.$max++;
- });
- //绑定双击编辑事件
- this.$workArea.delegate(".GooFlow_item > .span", "dblclick", { inthis: this }, function (e) {
- var This = e.data.inthis;
- var type = $('.item_focus').hasClass('item_startround');
- if (type) {
- OpenNode(This);
- }
- //var oldTxt = this.innerHTML;
- //var This = e.data.inthis;
- //var id = this.parentNode.id;
- //var t = getElCoordinate(This.$workArea[0]);
- //This.$textArea.val(oldTxt).css({
- // display: "block", height: $(this).height(), width: 100,
- // left: t.left + This.$nodeData[id].left - This.$workArea[0].parentNode.scrollLeft - 24,
- // top: t.top + This.$nodeData[id].top - This.$workArea[0].parentNode.scrollTop + 26
- //})
- // .data("id", This.$focus).focus();
- //This.$workArea.parent().one("mousedown", function (e) {
- // if (e.button == 2) return false;
- // This.setName(This.$textArea.data("id"), This.$textArea.val(), "node");
- // This.$textArea.val("").removeData("id").hide();
- //});
- });
- //节点双击事件
- this.$workArea.delegate(".ico + td", "dblclick", { inthis: this }, function (e) {
- var This = e.data.inthis;
- OpenNode(This);
- //var oldTxt = this.innerHTML;
- //var This = e.data.inthis;
- //var id = $(this).parents(".GooFlow_item").attr("id");
- //var t = getElCoordinate(This.$workArea[0]);
- //This.$textArea.val(oldTxt).css({
- // display: "block", width: $(this).width() + 24, height: $(this).height(),
- // left: t.left + 24 + This.$nodeData[id].left - This.$workArea[0].parentNode.scrollLeft,
- // top: t.top + 2 + This.$nodeData[id].top - This.$workArea[0].parentNode.scrollTop
- //})
- // .data("id", This.$focus).focus();
- //This.$workArea.parent().one("mousedown", function (e) {
- // if (e.button == 2) return false;
- // This.setName(This.$textArea.data("id"), This.$textArea.val(), "node");
- // This.$textArea.val("").removeData("id").hide();
- //});
- });
- //绑定结点的删除功能
- this.$workArea.delegate(".rs_close", "click", { inthis: this }, function (e) {
- if (!e) e = window.event;
- e.data.inthis.delNode(e.data.inthis.$focus);
- return false;
- });
- //绑定结点的RESIZE功能
- this.$workArea.delegate(".GooFlow_item > div > div[class!=rs_close]", "mousedown", { inthis: this }, function (e) {
- if (!e) e = window.event;
- if (e.button == 2) return false;
- var cursor = $(this).css("cursor");
- if (cursor == "pointer") { return; }
- var This = e.data.inthis;
- var id = This.$focus;
- This.switchToolBtn("cursor");
- e.cancelBubble = true;
- e.stopPropagation();
- var hack = 1;
- if (navigator.userAgent.indexOf("8.0") != -1) hack = 0;
- var ev = mousePosition(e), t = getElCoordinate(This.$workArea[0]);
- This.$ghost.css({
- display: "block",
- width: This.$nodeData[id].width - 2 + "px", height: This.$nodeData[id].height - 2 + "px",
- top: This.$nodeData[id].top + t.top - This.$workArea[0].parentNode.scrollTop + hack + "px",
- left: This.$nodeData[id].left + t.left - This.$workArea[0].parentNode.scrollLeft + hack + "px", cursor: cursor
- });
- var X, Y;
- X = ev.x - t.left + This.$workArea[0].parentNode.scrollLeft;
- Y = ev.y - t.top + This.$workArea[0].parentNode.scrollTop;
- var vX = (This.$nodeData[id].left + This.$nodeData[id].width) - X;
- var vY = (This.$nodeData[id].top + This.$nodeData[id].height) - Y;
- var isMove = false;
- This.$ghost.css("cursor", cursor);
- document.onmousemove = function (e) {
- if (!e) e = window.event;
- var ev = mousePosition(e);
- X = ev.x - t.left + This.$workArea[0].parentNode.scrollLeft - This.$nodeData[id].left + vX;
- Y = ev.y - t.top + This.$workArea[0].parentNode.scrollTop - This.$nodeData[id].top + vY;
- if (X < 86) X = 86;
- if (Y < 24) Y = 24;
- isMove = true;
- switch (cursor) {
- case "nw-resize": This.$ghost.css({ width: X - 2 + "px", height: Y - 2 + "px" }); break;
- case "w-resize": This.$ghost.css({ width: X - 2 + "px" }); break;
- case "n-resize": This.$ghost.css({ height: Y - 2 + "px" }); break;
- }
- }
- document.onmouseup = function (e) {
- This.$ghost.hide();
- if (!isMove) return;
- if (!e) e = window.event;
- This.resizeNode(id, This.$ghost.outerWidth(), This.$ghost.outerHeight());
- document.onmousemove = null;
- document.onmouseup = null;
- }
- });
- },
- //获取结点/连线/分组区域的详细信息
- getItemInfo: function (id, type) {
- switch (type) {
- case "node": return this.$nodeData[id] || null;
- case "line": return this.$lineData[id] || null;
- case "area": return this.$areaData[id] || null;
- }
- },
- //取消所有结点/连线被选定的状态
- blurItem: function () {
- if (this.$focus != "") {
- var jq = $("#" + this.$focus);
- if (jq.prop("tagName") == "DIV") {
- if (this.onItemBlur != null && !this.onItemBlur(id, "node")) return false;
- jq.removeClass("item_focus").children("div:eq(0)").css("display", "none");
- }
- else {
- if (this.onItemBlur != null && !this.onItemBlur(id, "line")) return false;
- if (GooFlow.prototype.useSVG != "") {
- if (!this.$lineData[this.$focus].marked) {
- jq[0].childNodes[1].setAttribute("stroke", "gray");
- jq[0].childNodes[1].setAttribute("marker-end", "url(#arrow1)");
- }
- }
- else {
- if (!this.$lineData[this.$focus].marked) jq[0].strokeColor = "gray";
- }
- this.$lineMove.hide().removeData("type").removeData("tid");
- if (this.$editable) this.$lineOper.hide().removeData("tid");
- }
- }
- this.$focus = "";
- return true;
- },
- //选定某个结点/转换线 bool:TRUE决定了要触发选中事件,FALSE则不触发选中事件,多用在程序内部调用。
- focusItem: function (id, bool) {
- var jq = $("#" + id);
- if (jq.length == 0) return;
- if (!this.blurItem()) return;//先执行"取消选中",如果返回FLASE,则也会阻止选定事件继续进行.
- if (jq.prop("tagName") == "DIV") {
- if (bool && this.onItemFocus != null && !this.onItemFocus(id, "node")) return;
- jq.addClass("item_focus");
- if (this.$editable) jq.children("div:eq(0)").css("display", "block");
- this.$workArea.append(jq);
- }
- else {//如果是连接线
- if (this.onItemFocus != null && !this.onItemFocus(id, "line")) return;
- if (GooFlow.prototype.useSVG != "") {
- jq[0].childNodes[1].setAttribute("stroke", "#ff3300");
- jq[0].childNodes[1].setAttribute("marker-end", "url(#arrow2)");
- }
- else jq[0].strokeColor = "#ff3300";
- if (!this.$editable) return;
- var x, y, from, to;
- if (GooFlow.prototype.useSVG != "") {
- from = jq.attr("from").split(",");
- to = jq.attr("to").split(",");
- } else {
- var n = jq[0].getAttribute("fromTo").split(",");
- from = [n[0], n[1]];
- to = [n[2], n[3]];
- }
- from[0] = parseInt(from[0], 10);
- from[1] = parseInt(from[1], 10);
- to[0] = parseInt(to[0], 10);
- to[1] = parseInt(to[1], 10);
- //var t=getElCoordinate(this.$workArea[0]);
- if (this.$lineData[id].type == "lr") {
- from[0] = this.$lineData[id].M;
- to[0] = from[0];
-
- this.$lineMove.css({
- width: "5px", height: (to[1] - from[1]) * (to[1] > from[1] ? 1 : -1) + "px",
- left: from[0] - 3 + "px",
- top: (to[1] > from[1] ? from[1] : to[1]) + 1 + "px",
- cursor: "e-resize", display: "block"
- }).data({ "type": "lr", "tid": id });
- }
- else if (this.$lineData[id].type == "tb") {
- from[1] = this.$lineData[id].M;
- to[1] = from[1];
- this.$lineMove.css({
- width: (to[0] - from[0]) * (to[0] > from[0] ? 1 : -1) + "px", height: "5px",
- left: (to[0] > from[0] ? from[0] : to[0]) + 1 + "px",
- top: from[1] - 3 + "px",
- cursor: "s-resize", display: "block"
- }).data({ "type": "tb", "tid": id });
- }
- x = (from[0] + to[0]) / 2 - 35;
- y = (from[1] + to[1]) / 2 + 6;
- this.$lineOper.css({ display: "block", left: x + "px", top: y + "px" }).data("tid", id);
- }
- this.$focus = id;
- this.switchToolBtn("cursor");
- },
- //移动结点到一个新的位置
- moveNode: function (id, left, top) {
- if (!this.$nodeData[id]) return;
- if (this.onItemMove != null && !this.onItemMove(id, "node", left, top)) return;
- if (this.$undoStack) {
- var paras = [id, this.$nodeData[id].left, this.$nodeData[id].top];
- this.pushOper("moveNode", paras);
- }
- if (left < 0) left = 0;
- if (top < 0) top = 0;
- $("#" + id).css({ left: left + "px", top: top + "px" });
- this.$nodeData[id].left = left;
- this.$nodeData[id].top = top;
- //重画转换线
- this.resetLines(id, this.$nodeData[id]);
- if (this.$editable) {
- this.$nodeData[id].alt = true;
- }
- },
- //设置结点/连线/分组区域的文字信息
- setName: function (id, name, type,setinfo) {
- var oldName;
- if (type == "node") {//如果是结点
- this.$nodeData[id].setInfo = setinfo;
- if (!this.$nodeData[id])
- if (this.$nodeData[id].name == name)
- if (this.onItemRename != null && !this.onItemRename(id, name, "node"))
- oldName = this.$nodeData[id].name;
- this.$nodeData[id].name = name;
- if (this.$nodeData[id].type.indexOf("round") > 1) {
- this.$nodeDom[id].children(".span").text(name);
- }
- else {
- this.$nodeDom[id].find("td:eq(1)").text(name);
- var hack = 0;
- if (navigator.userAgent.indexOf("8.0") != -1) hack = 2;
- var width = this.$nodeDom[id].outerWidth();
- var height = this.$nodeDom[id].outerHeight();
- this.$nodeDom[id].children("table").css({ width: width - 2 + "px", height: height - 2 + "px" });
- this.$nodeData[id].width = width;
- this.$nodeData[id].height = height;
- }
- if (this.$editable) {
- this.$nodeData[id].alt = true;
- }
- //重画转换线
- this.resetLines(id, this.$nodeData[id]);
- }
- else if (type == "line") {//如果是线
- this.$lineData[id].setInfo = setinfo;
- if (!this.$lineData[id])
- if (this.$lineData[id].name == name)
- if (this.onItemRename != null && !this.onItemRename(id, name, "line"))
- oldName = this.$lineData[id].name;
- this.$lineData[id].name = name;
- if (GooFlow.prototype.useSVG != "") {
- this.$lineDom[id].childNodes[2].textContent = name;
- }
- else {
- this.$lineDom[id].childNodes[1].innerHTML = name;
- var n = this.$lineDom[id].getAttribute("fromTo").split(",");
- var x;
- if (this.$lineData[id].type != "lr") {
- x = (n[2] - n[0]) / 2;
- }
- else {
- var Min = n[2] > n[0] ? n[0] : n[2];
- if (Min > this.$lineData[id].M) Min = this.$lineData[id].M;
- x = this.$lineData[id].M - Min;
- }
- if (x < 0) x = x * -1;
- this.$lineDom[id].childNodes[1].style.left = x - this.$lineDom[id].childNodes[1].offsetWidth / 2 + 4 + "px";
- }
- if (this.$editable) {
- this.$lineData[id].alt = true;
- }
- }
- else if (type == "area") {//如果是分组区域
- if (!this.$areaData[id]) return;
- if (this.$areaData[id].name == name) return;
- if (this.onItemRename != null && !this.onItemRename(id, name, "area")) return;
- oldName = this.$areaData[id].name;
- this.$areaData[id].name = name;
- this.$areaDom[id].children("label").text(name);
- if (this.$editable) {
- this.$areaData[id].alt = true;
- }
- }
- if (this.$undoStack) {
- var paras = [id, oldName, type];
- this.pushOper("setName", paras);
- }
- },
- //设置结点的尺寸,仅支持非开始/结束结点
- resizeNode: function (id, width, height) {
- if (!this.$nodeData[id]) return;
- if (this.onItemResize != null && !this.onItemResize(id, "node", width, height)) return;
- if (this.$nodeData[id].type == "start" || this.$nodeData[id].type == "end") return;
- if (this.$undoStack) {
- var paras = [id, this.$nodeData[id].width, this.$nodeData[id].height];
- this.pushOper("resizeNode", paras);
- }
- var hack = 0;
- if (navigator.userAgent.indexOf("8.0") != -1) hack = 2;
- this.$nodeDom[id].children("table").css({ width: width - 2 + "px", height: height - 2 + "px" });
- width = this.$nodeDom[id].outerWidth() - hack;
- height = this.$nodeDom[id].outerHeight() - hack;
- this.$nodeDom[id].children("table").css({ width: width - 2 + "px", height: height - 2 + "px" });
- this.$nodeData[id].width = width;
- this.$nodeData[id].height = height;
- if (this.$editable) {
- this.$nodeData[id].alt = true;
- }
- //重画转换线
- this.resetLines(id, this.$nodeData[id]);
- },
- //删除结点
- delNode: function (id) {
- if (!this.$nodeData[id]) return;
- if (this.onItemDel != null && !this.onItemDel(id, "node")) return;
- //先删除可能的连线
- for (var k in this.$lineData) {
- if (this.$lineData[k].from == id || this.$lineData[k].to == id) {
- //this.$draw.removeChild(this.$lineDom[k]);
- //delete this.$lineData[k];
- //delete this.$lineDom[k];
- this.delLine(k);
- }
- }
- //再删除结点本身
- if (this.$undoStack) {
- var paras = [id, this.$nodeData[id]];
- this.pushOper("addNode", paras);
- }
- delete this.$nodeData[id];
- this.$nodeDom[id].remove();
- delete this.$nodeDom[id];
- --this.$nodeCount;
- if (this.$focus == id) this.$focus = "";
-
- if (this.$editable) {
- //在回退新增操作时,如果节点ID以this.$id+"_node_"开头,则表示为本次编辑时新加入的节点,这些节点的删除不用加入到$deletedItem中
- if (id.indexOf(this.$id + "_node_") < 0)
- this.$deletedItem[id] = "node";
- }
- },
- //设置流程图的名称
- setTitle: function (text) {
- this.$title = text;
- if (this.$head) this.$head.children("label").attr("title", text).text(text);
- },
- //载入一组数据
- loadData: function (data) {
- if (data == undefined)
- {
- data = "";
- }
- var t = this.$editable;
- this.$editable = false;
- if (data.title) this.setTitle(data.title);
- if (data.initNum) this.$max = data.initNum;
- for (var i in data.nodes)
- this.addNode(data.nodes[i].id, data.nodes[i]);
- for (var j in data.lines)
- this.addLine(data.lines[j].id, data.lines[j]);
- for (var k in data.areas)
- this.addArea(data.areas[k].id, data.areas[k]);
- this.$editable = t;
- this.$deletedItem = {};
- },
- //用AJAX方式,远程读取一组数据
- //参数para为JSON结构,与JQUERY中$.ajax()方法的传参一样
- loadDataAjax: function (para) {
- var This = this;
- $.ajax({
- type: para.type,
- url: para.url,
- dataType: "json",
- data: para.data,
- success: function (msg) {
- if (para.dataFilter) para.dataFilter(msg, "json");
- This.loadData(msg);
- if (para.success) para.success(msg);
- },
- error: function (XMLHttpRequest, textStatus, errorThrown) {
- if (para.error) para.error(textStatus, errorThrown);
- }
- })
- },
- //把画好的整个流程图导出到一个变量中(其实也可以直接访问GooFlow对象的$nodeData,$lineData,$areaData这三个JSON属性)
- exportData: function () {
- var ret = { title: this.$title, nodes: this.$nodeData, lines: this.$lineData, areas: this.$areaData, initNum: this.$max };
-
- var _nodeobject = [],_lineobject = [];
- for (var k1 in ret.nodes) {
- if (!ret.nodes[k1].marked) {
- delete ret.nodes[k1]["marked"];
- }
- ret.nodes[k1]["id"] = k1;
- _nodeobject.push(ret.nodes[k1]);
- }
- ret.nodes = _nodeobject;
- for (var k2 in ret.lines) {
- if (!ret.lines[k2].marked) {
- delete ret.lines[k2]["marked"];
- }
- ret.lines[k2]["id"] = k2;
- _lineobject.push(ret.lines[k2]);
- }
- ret.lines = _lineobject;
- return ret;
- },
- //只把本次编辑流程图中作了变更(包括增删改)的元素导出到一个变量中,以方便用户每次编辑载入的流程图后只获取变更过的数据
- exportAlter: function () {
- var ret = { nodes: {}, lines: {}, areas: {} };
- for (var k1 in this.$nodeData) {
- if (this.$nodeData[k1].alt) {
- ret.nodes[k1] = this.$nodeData[k1];
- }
- }
- for (var k2 in this.$lineData) {
- if (this.$lineData[k2].alt) {
- ret.lines[k2] = this.$lineData[k2];
- }
- }
- for (var k3 in this.$areaData) {
- if (this.$areaData[k3].alt) {
- ret.areas[k3] = this.$areaData[k3];
- }
- }
- ret.deletedItem = this.$deletedItem;
- return ret;
- },
- //变更元素的ID,一般用于快速保存后,将后台返回新元素的ID更新到页面中;type为元素类型(节点,连线,区块)
- transNewId: function (oldId, newId, type) {
- var tmp;
- switch (type) {
- case "node":
- if (this.$nodeData[oldId]) {
- tmp = this.$nodeData[oldId];
- delete this.$nodeData[oldId];
- this.$nodeData[newId] = tmp;
- }
- break;
- case "line":
- if (this.$lineData[oldId]) {
- tmp = this.$lineData[oldId];
- delete this.$lineData[oldId];
- this.$lineData[newId] = tmp;
- }
- break;
- case "area":
- if (this.$areaData[oldId]) {
- tmp = this.$areaData[oldId];
- delete this.$areaData[oldId];
- this.$areaData[newId] = tmp;
- }
- break;
- }
- },
- //清空工作区及已载入的数据
- clearData: function () {
- for (var key in this.$nodeData) {
- this.delNode(key);
- }
- for (var key in this.$lineData) {
- this.delLine(key);
- }
- for (var key in this.$areaData) {
- this.delArea(key);
- }
- this.$deletedItem = {};
- },
- //销毁自己
- destrory: function () {
- this.$bgDiv.empty();
- this.$lineData = null;
- this.$nodeData = null;
- this.$lineDom = null;
- this.$nodeDom = null;
- this.$areaDom = null;
- this.$areaData = null;
- this.$nodeCount = 0;
- this.$areaCount = 0;
- this.$areaCount = 0;
- this.$deletedItem = {};
- },
- ///////////以下为有关画线的方法
- //绘制一条箭头线,并返回线的DOM
- drawLine: function (id, sp, ep, mark, dash) {
- var line;
- if (GooFlow.prototype.useSVG != "") {
- line = document.createElementNS("http://www.w3.org/2000/svg", "g");
- var hi = document.createElementNS("http://www.w3.org/2000/svg", "path");
- var path = document.createElementNS("http://www.w3.org/2000/svg", "path");
-
- if (id != "") line.setAttribute("id", id);
- line.setAttribute("from", sp[0] + "," + sp[1]);
- line.setAttribute("to", ep[0] + "," + ep[1]);
- hi.setAttribute("visibility", "hidden");
- hi.setAttribute("stroke-width", 9);
- hi.setAttribute("fill", "none");
- hi.setAttribute("stroke", "white");
- hi.setAttribute("d", "M " + sp[0] + " " + sp[1] + " L " + ep[0] + " " + ep[1]);
- hi.setAttribute("pointer-events", "stroke");
- path.setAttribute("d", "M " + sp[0] + " " + sp[1] + " L " + ep[0] + " " + ep[1]);
- path.setAttribute("stroke-width", 2.0);
- path.setAttribute("stroke-linecap", "round");
- path.setAttribute("fill", "none");
- if (dash) path.setAttribute("style", "stroke-dasharray:6,5");
- if (mark) {
- path.setAttribute("stroke", "#ff3300");
- path.setAttribute("marker-end", "url(#arrow2)");
- }
- else {
- path.setAttribute("stroke", "gray");
- path.setAttribute("marker-end", "url(#arrow1)");
- }
- line.appendChild(hi);
- line.appendChild(path);
- line.style.cursor = "crosshair";
- if (id != "" && id != "GooFlow_tmp_line") {
- var text = document.createElementNS("http://www.w3.org/2000/svg", "text");
- //text.textContent=id;
- line.appendChild(text);
- var x = (ep[0] + sp[0]) / 2;
- var y = (ep[1] + sp[1]) / 2;
- text.setAttribute("text-anchor", "middle");
- text.setAttribute("x", x);
- text.setAttribute("y", y - 5);
- line.style.cursor = "pointer";
- text.style.cursor = "text";
- }
- } else {
- line = document.createElement("v:polyline");
- if (id != "") line.id = id;
- //line.style.position="absolute";
- line.points.value = sp[0] + "," + sp[1] + " " + ep[0] + "," + ep[1];
- line.setAttribute("fromTo", sp[0] + "," + sp[1] + "," + ep[0] + "," + ep[1]);
- line.strokeWeight = "1.2";
- line.stroke.EndArrow = "Block";
- line.style.cursor = "crosshair";
- if (id != "" && id != "GooFlow_tmp_line") {
- var text = document.createElement("div");
- //text.innerHTML=id;
- line.appendChild(text);
- var x = (ep[0] - sp[0]) / 2;
- var y = (ep[1] - sp[1]) / 2;
- if (x < 0) x = x * -1;
- if (y < 0) y = y * -1;
- text.style.left = x + "px";
- text.style.top = y - 6 + "px";
- line.style.cursor = "pointer";
- }
- if (dash) line.stroke.dashstyle = "Dash";
- if (mark) line.strokeColor = "#ff3300";
- else line.strokeColor = "gray";
- }
- return line;
- },
- //画一条只有两个中点的折线
- drawPoly: function (id, sp, m1, m2, ep, mark) {
- var poly, strPath;
- if (GooFlow.prototype.useSVG != "") {
- poly = document.createElementNS("http://www.w3.org/2000/svg", "g");
- var hi = document.createElementNS("http://www.w3.org/2000/svg", "path");
- var path = document.createElementNS("http://www.w3.org/2000/svg", "path");
- if (id != "") poly.setAttribute("id", id);
- poly.setAttribute("from", sp[0] + "," + sp[1]);
- poly.setAttribute("to", ep[0] + "," + ep[1]);
- hi.setAttribute("visibility", "hidden");
- hi.setAttribute("stroke-width", 9);
- hi.setAttribute("fill", "none");
- hi.setAttribute("stroke", "white");
- strPath = "M " + sp[0] + " " + sp[1];
- if (m1[0] != sp[0] || m1[1] != sp[1])
- strPath += " L " + m1[0] + " " + m1[1];
- if (m2[0] != ep[0] || m2[1] != ep[1])
- strPath += " L " + m2[0] + " " + m2[1];
- strPath += " L " + ep[0] + " " + ep[1];
- hi.setAttribute("d", strPath);
- hi.setAttribute("pointer-events", "stroke");
- path.setAttribute("d", strPath);
- path.setAttribute("stroke-width", 2.0);
- path.setAttribute("stroke-linecap", "round");
- path.setAttribute("fill", "none");
- if (mark) {
- path.setAttribute("stroke", "#ff3300");
- path.setAttribute("marker-end", "url(#arrow2)");
- }
- else {
- path.setAttribute("stroke", "gray");
- path.setAttribute("marker-end", "url(#arrow1)");
- }
- poly.appendChild(hi);
- poly.appendChild(path);
- var text = document.createElementNS("http://www.w3.org/2000/svg", "text");
- //text.textContent=id;
- poly.appendChild(text);
- var x = (m2[0] + m1[0]) / 2;
- var y = (m2[1] + m1[1]) / 2;
- text.setAttribute("text-anchor", "middle");
- text.setAttribute("x", x);
- text.setAttribute("y", y - 5);
- text.style.cursor = "text";
- poly.style.cursor = "pointer";
- }
- else {
- poly = document.createElement("v:Polyline");
- if (id != "") poly.id = id;
- poly.filled = "false";
- strPath = sp[0] + "," + sp[1];
- if (m1[0] != sp[0] || m1[1] != sp[1])
- strPath += " " + m1[0] + "," + m1[1];
- if (m2[0] != ep[0] || m2[1] != ep[1])
- strPath += " " + m2[0] + "," + m2[1];
- strPath += " " + ep[0] + "," + ep[1];
- poly.points.value = strPath;
- poly.setAttribute("fromTo", sp[0] + "," + sp[1] + "," + ep[0] + "," + ep[1]);
- poly.strokeWeight = "1.2";
- poly.stroke.EndArrow = "Block";
- var text = document.createElement("div");
- //text.innerHTML=id;
- poly.appendChild(text);
- var x = (m2[0] - m1[0]) / 2;
- var y = (m2[1] - m1[1]) / 2;
- if (x < 0) x = x * -1;
- if (y < 0) y = y * -1;
- text.style.left = x + "px";
- text.style.top = y - 4 + "px";
- poly.style.cursor = "pointer";
- if (mark) poly.strokeColor = "#ff3300";
- else poly.strokeColor = "gray";
- }
- return poly;
- },
- //计算两个结点间要连直线的话,连线的开始坐标和结束坐标
- calcStartEnd: function (n1, n2) {
- var X_1, Y_1, X_2, Y_2;
- //X判断:
- var x11 = n1.left, x12 = n1.left + n1.width, x21 = n2.left, x22 = n2.left + n2.width;
- //结点2在结点1左边
- if (x11 >= x22) {
- X_1 = x11; X_2 = x22;
- }
- //结点2在结点1右边
- else if (x12 <= x21) {
- X_1 = x12; X_2 = x21;
- }
- //结点2在结点1水平部分重合
- else if (x11 <= x21 && x12 >= x21 && x12 <= x22) {
- X_1 = (x12 + x21) / 2; X_2 = X_1;
- }
- else if (x11 >= x21 && x12 <= x22) {
- X_1 = (x11 + x12) / 2; X_2 = X_1;
- }
- else if (x21 >= x11 && x22 <= x12) {
- X_1 = (x21 + x22) / 2; X_2 = X_1;
- }
- else if (x11 <= x22 && x12 >= x22) {
- X_1 = (x11 + x22) / 2; X_2 = X_1;
- }
-
- //Y判断:
- var y11 = n1.top, y12 = n1.top + n1.height, y21 = n2.top, y22 = n2.top + n2.height;
- //结点2在结点1上边
- if (y11 >= y22) {
- Y_1 = y11; Y_2 = y22;
- }
- //结点2在结点1下边
- else if (y12 <= y21) {
- Y_1 = y12; Y_2 = y21;
- }
- //结点2在结点1垂直部分重合
- else if (y11 <= y21 && y12 >= y21 && y12 <= y22) {
- Y_1 = (y12 + y21) / 2; Y_2 = Y_1;
- }
- else if (y11 >= y21 && y12 <= y22) {
- Y_1 = (y11 + y12) / 2; Y_2 = Y_1;
- }
- else if (y21 >= y11 && y22 <= y12) {
- Y_1 = (y21 + y22) / 2; Y_2 = Y_1;
- }
- else if (y11 <= y22 && y12 >= y22) {
- Y_1 = (y11 + y22) / 2; Y_2 = Y_1;
- }
- return { "start": [X_1, Y_1], "end": [X_2, Y_2] };
- },
- //计算两个结点间要连折线的话,连线的所有坐标
- calcPolyPoints: function (n1, n2, type, M) {
- //开始/结束两个结点的中心
- var SP = { x: n1.left + n1.width / 2, y: n1.top + n1.height / 2 };
- var EP = { x: n2.left + n2.width / 2, y: n2.top + n2.height / 2 };
- var sp = [], m1 = [], m2 = [], ep = [];
- //如果是允许中段可左右移动的折线,则参数M为可移动中段线的X坐标
- //粗略计算起始点
- sp = [SP.x, SP.y];
- ep = [EP.x, EP.y];
- if (type == "lr") {
- //粗略计算2个中点
- m1 = [M, SP.y];
- m2 = [M, EP.y];
- //再具体分析修改开始点和中点1
- if (m1[0] > n1.left && m1[0] < n1.left + n1.width) {
- m1[1] = (SP.y > EP.y ? n1.top : n1.top + n1.height);
- sp[0] = m1[0]; sp[1] = m1[1];
- }
- else {
- sp[0] = (m1[0] < n1.left ? n1.left : n1.left + n1.width)
- }
- //再具体分析中点2和结束点
- if (m2[0] > n2.left && m2[0] < n2.left + n2.width) {
- m2[1] = (SP.y > EP.y ? n2.top + n2.height : n2.top);
- ep[0] = m2[0]; ep[1] = m2[1];
- }
- else {
- ep[0] = (m2[0] < n2.left ? n2.left : n2.left + n2.width)
- }
- }
- //如果是允许中段可上下移动的折线,则参数M为可移动中段线的Y坐标
- else if (type == "tb") {
- //粗略计算2个中点
- m1 = [SP.x, M];
- m2 = [EP.x, M];
- //再具体分析修改开始点和中点1
- if (m1[1] > n1.top && m1[1] < n1.top + n1.height) {
- m1[0] = (SP.x > EP.x ? n1.left : n1.left + n1.width);
- sp[0] = m1[0]; sp[1] = m1[1];
- }
- else {
- sp[1] = (m1[1] < n1.top ? n1.top : n1.top + n1.height)
- }
- //再具体分析中点2和结束点
- if (m2[1] > n2.top && m2[1] < n2.top + n2.height) {
- m2[0] = (SP.x > EP.x ? n2.left + n2.width : n2.left);
- ep[0] = m2[0]; ep[1] = m2[1];
- }
- else {
- ep[1] = (m2[1] < n2.top ? n2.top : n2.top + n2.height);
- }
- }
- return { start: sp, m1: m1, m2: m2, end: ep };
- },
- //初始化折线中段的X/Y坐标,mType='rb'时为X坐标,mType='tb'时为Y坐标
- getMValue: function (n1, n2, mType) {
- if (mType == "lr") {
- return (n1.left + n1.width / 2 + n2.left + n2.width / 2) / 2;
- }
- else if (mType == "tb") {
- return (n1.top + n1.height / 2 + n2.top + n2.height / 2) / 2;
- }
- },
- //增加一条线
- addLine: function (id, json) {
- if (this.onItemAdd != null && !this.onItemAdd(id, "line", json)) return;
- if (this.$undoStack && this.$editable) {
- this.pushOper("delLine", [id]);
- }
- var n1 = null, n2 = null;//获取开始/结束结点的数据
- if (json.from == json.to) return;
- //避免两个节点间不能有一条以上同向接连线
- for (var k in this.$lineData) {
- if ((json.from == this.$lineData[k].from && json.to == this.$lineData[k].to))
- return;
- }
- var n1 = this.$nodeData[json.from], n2 = this.$nodeData[json.to];//获取开始/结束结点的数据
- if (!n1 || !n2) return;
- var res;
- if (json.type && json.type != "sl")
- res = GooFlow.prototype.calcPolyPoints(n1, n2, json.type, json.M);
- else
- res = GooFlow.prototype.calcStartEnd(n1, n2);
- if (!res) return;
- this.$lineData[id] = {};
- this.$lineData[id].setInfo = json.setInfo;
- this.$lineData[id].id = json.id;
- if (json.type) {
- this.$lineData[id].type = json.type;
- this.$lineData[id].M = json.M;
- }
- else this.$lineData[id].type = "sl";//默认为直线
- this.$lineData[id].from = json.from;
- this.$lineData[id].to = json.to;
- this.$lineData[id].name = json.name;
- if (json.mark) this.$lineData[id].marked = json.mark;
- else this.$lineData[id].marked = false;
-
- if (this.$lineData[id].type == "sl")
- this.$lineDom[id] = GooFlow.prototype.drawLine(id, res.start, res.end, json.mark);
- else
- this.$lineDom[id] = GooFlow.prototype.drawPoly(id, res.start, res.m1, res.m2, res.end, json.mark);
- this.$draw.appendChild(this.$lineDom[id]);
- if (GooFlow.prototype.useSVG == "") {
- this.$lineDom[id].childNodes[1].innerHTML = json.name;
- if (this.$lineData[id].type != "sl") {
- var Min = (res.start[0] > res.end[0] ? res.end[0] : res.start[0]);
- if (Min > res.m2[0]) Min = res.m2[0];
- if (Min > res.m1[0]) Min = res.m1[0];
- this.$lineDom[id].childNodes[1].style.left = (res.m2[0] + res.m1[0]) / 2 - Min - this.$lineDom[id].childNodes[1].offsetWidth / 2 + 4;
- Min = (res.start[1] > res.end[1] ? res.end[1] : res.start[1]);
- if (Min > res.m2[1]) Min = res.m2[1];
- if (Min > res.m1[1]) Min = res.m1[1];
- this.$lineDom[id].childNodes[1].style.top = (res.m2[1] + res.m1[1]) / 2 - Min - this.$lineDom[id].childNodes[1].offsetHeight / 2;
- } else
- this.$lineDom[id].childNodes[1].style.left =
- ((res.end[0] - res.start[0]) * (res.end[0] > res.start[0] ? 1 : -1) - this.$lineDom[id].childNodes[1].offsetWidth) / 2 + 4;
- }
- else this.$lineDom[id].childNodes[2].textContent = json.name;
- ++this.$lineCount;
- if (this.$editable) {
- this.$lineData[id].alt = true;
- if (this.$deletedItem[id]) delete this.$deletedItem[id];//在回退删除操作时,去掉该元素的删除记录
- }
- },
- //重构所有连向某个结点的线的显示,传参结构为$nodeData数组的一个单元结构
- resetLines: function (id, node) {
- for (var i in this.$lineData) {
- var other = null;//获取结束/开始结点的数据
- var res;
- if (this.$lineData[i].from == id) {//找结束点
- other = this.$nodeData[this.$lineData[i].to] || null;
- if (other == null) continue;
- if (this.$lineData[i].type == "sl")
- res = GooFlow.prototype.calcStartEnd(node, other);
- else
- res = GooFlow.prototype.calcPolyPoints(node, other, this.$lineData[i].type, this.$lineData[i].M)
- if (!res) break;
- }
- else if (this.$lineData[i].to == id) {//找开始点
- other = this.$nodeData[this.$lineData[i].from] || null;
- if (other == null) continue;
- if (this.$lineData[i].type == "sl")
- res = GooFlow.prototype.calcStartEnd(other, node);
- else
- res = GooFlow.prototype.calcPolyPoints(other, node, this.$lineData[i].type, this.$lineData[i].M);
- if (!res) break;
- }
- if (other == null) continue;
- this.$draw.removeChild(this.$lineDom[i]);
- if (this.$lineData[i].type == "sl") {
- this.$lineDom[i] = GooFlow.prototype.drawLine(i, res.start, res.end, this.$lineData[i].marked);
- }
- else {
- this.$lineDom[i] = GooFlow.prototype.drawPoly(i, res.start, res.m1, res.m2, res.end, this.$lineData[i].marked);
- }
- this.$draw.appendChild(this.$lineDom[i]);
- if (GooFlow.prototype.useSVG == "") {
- this.$lineDom[i].childNodes[1].innerHTML = this.$lineData[i].name;
- if (this.$lineData[i].type != "sl") {
- var Min = (res.start[0] > res.end[0] ? res.end[0] : res.start[0]);
- if (Min > res.m2[0]) Min = res.m2[0];
- if (Min > res.m1[0]) Min = res.m1[0];
- this.$lineDom[i].childNodes[1].style.left = (res.m2[0] + res.m1[0]) / 2 - Min - this.$lineDom[i].childNodes[1].offsetWidth / 2 + 4;
- Min = (res.start[1] > res.end[1] ? res.end[1] : res.start[1]);
- if (Min > res.m2[1]) Min = res.m2[1];
- if (Min > res.m1[1]) Min = res.m1[1];
- this.$lineDom[i].childNodes[1].style.top = (res.m2[1] + res.m1[1]) / 2 - Min - this.$lineDom[i].childNodes[1].offsetHeight / 2 - 4;
- } else
- this.$lineDom[i].childNodes[1].style.left =
- ((res.end[0] - res.start[0]) * (res.end[0] > res.start[0] ? 1 : -1) - this.$lineDom[i].childNodes[1].offsetWidth) / 2 + 4;
- }
- else this.$lineDom[i].childNodes[2].textContent = this.$lineData[i].name;
- }
- },
- //重新设置连线的样式 newType= "sl":直线, "lr":中段可左右移动型折线, "tb":中段可上下移动型折线
- setLineType: function (id, newType) {
- if (!newType || newType == null || newType == "" || newType == this.$lineData[id].type) return false;
- if (this.onLineSetType != null && !this.onLineSetType(id, newType)) return;
- if (this.$undoStack) {
- var paras = [id, this.$lineData[id].type];
- this.pushOper("setLineType", paras);
- if (this.$lineData[id].type != "sl") {
- var para2 = [id, this.$lineData[id].M];
- this.pushOper("setLineM", para2);
- }
- }
- var from = this.$lineData[id].from;
- var to = this.$lineData[id].to;
- this.$lineData[id].type = newType;
- var res;
- //如果是变成折线
- if (newType != "sl") {
- var res = GooFlow.prototype.calcPolyPoints(this.$nodeData[from], this.$nodeData[to], this.$lineData[id].type, this.$lineData[id].M);
- this.setLineM(id, this.getMValue(this.$nodeData[from], this.$nodeData[to], newType), true);
- }
- //如果是变回直线
- else {
- delete this.$lineData[id].M;
- this.$lineMove.hide().removeData("type").removeData("tid");
- res = GooFlow.prototype.calcStartEnd(this.$nodeData[from], this.$nodeData[to]);
- if (!res) return;
- this.$draw.removeChild(this.$lineDom[id]);
- this.$lineDom[id] = GooFlow.prototype.drawLine(id, res.start, res.end, this.$lineData[id].marked || this.$focus == id);
- this.$draw.appendChild(this.$lineDom[id]);
- if (GooFlow.prototype.useSVG == "") {
- this.$lineDom[id].childNodes[1].innerHTML = this.$lineData[id].name;
- this.$lineDom[id].childNodes[1].style.left =
- ((res.end[0] - res.start[0]) * (res.end[0] > res.start[0] ? 1 : -1) - this.$lineDom[id].childNodes[1].offsetWidth) / 2 + 4;
- }
- else
- this.$lineDom[id].childNodes[2].textContent = this.$lineData[id].name;
- }
- if (this.$focus == id) {
- this.focusItem(id);
- }
- if (this.$editable) {
- this.$lineData[id].alt = true;
- }
- },
- //设置折线中段的X坐标值(可左右移动时)或Y坐标值(可上下移动时)
- setLineM: function (id, M, noStack) {
- if (!this.$lineData[id] || M < 0 || !this.$lineData[id].type || this.$lineData[id].type == "sl") return false;
- if (this.onLineMove != null && !this.onLineMove(id, M)) return false;
- if (this.$undoStack && !noStack) {
- var paras = [id, this.$lineData[id].M];
- this.pushOper("setLineM", paras);
- }
- var from = this.$lineData[id].from;
- var to = this.$lineData[id].to;
- this.$lineData[id].M = M;
- var ps = GooFlow.prototype.calcPolyPoints(this.$nodeData[from], this.$nodeData[to], this.$lineData[id].type, this.$lineData[id].M);
- this.$draw.removeChild(this.$lineDom[id]);
- this.$lineDom[id] = GooFlow.prototype.drawPoly(id, ps.start, ps.m1, ps.m2, ps.end, this.$lineData[id].marked || this.$focus == id);
- this.$draw.appendChild(this.$lineDom[id]);
- if (GooFlow.prototype.useSVG == "") {
- this.$lineDom[id].childNodes[1].innerHTML = this.$lineData[id].name;
- var Min = (ps.start[0] > ps.end[0] ? ps.end[0] : ps.start[0]);
- if (Min > ps.m2[0]) Min = ps.m2[0];
- if (Min > ps.m1[0]) Min = ps.m1[0];
- this.$lineDom[id].childNodes[1].style.left = (ps.m2[0] + ps.m1[0]) / 2 - Min - this.$lineDom[id].childNodes[1].offsetWidth / 2 + 4;
- Min = (ps.start[1] > ps.end[1] ? ps.end[1] : ps.start[1]);
- if (Min > ps.m2[1]) Min = ps.m2[1];
- if (Min > ps.m1[1]) Min = ps.m1[1];
- this.$lineDom[id].childNodes[1].style.top = (ps.m2[1] + ps.m1[1]) / 2 - Min - this.$lineDom[id].childNodes[1].offsetHeight / 2 - 4;
- }
- else this.$lineDom[id].childNodes[2].textContent = this.$lineData[id].name;
- if (this.$editable) {
- this.$lineData[id].alt = true;
- }
- },
- //删除转换线
- delLine: function (id) {
- if (!this.$lineData[id]) return;
- if (this.onItemDel != null && !this.onItemDel(id, "node")) return;
- if (this.$undoStack) {
- var paras = [id, this.$lineData[id]];
- this.pushOper("addLine", paras);
- }
- this.$draw.removeChild(this.$lineDom[id]);
- delete this.$lineData[id];
- delete this.$lineDom[id];
- if (this.$focus == id) this.$focus = "";
- --this.$lineCount;
- if (this.$editable) {
- //在回退新增操作时,如果节点ID以this.$id+"_line_"开头,则表示为本次编辑时新加入的节点,这些节点的删除不用加入到$deletedItem中
- if (id.indexOf(this.$id + "_line_") < 0)
- this.$deletedItem[id] = "line";
- }
- this.$lineOper.hide();
- },
- //用颜色标注/取消标注一个结点或转换线,常用于显示重点或流程的进度。
- //这是一个在编辑模式中无用,但是在纯浏览模式中非常有用的方法,实际运用中可用于跟踪流程的进度。
- markItem: function (id, type, mark) {
- if (type == "node") {
- if (!this.$nodeData[id]) return;
- if (this.onItemMark != null && !this.onItemMark(id, "node", mark)) return;
- this.$nodeData[id].marked = mark || false;
- if (mark) this.$nodeDom[id].addClass("item_mark");
- else this.$nodeDom[id].removeClass("item_mark");
-
- } else if (type == "line") {
- if (!this.$lineData[id]) return;
- if (this.onItemMark != null && !this.onItemMark(id, "line", mark)) return;
- this.$lineData[id].marked = mark || false;
- if (GooFlow.prototype.useSVG != "") {
- if (mark) {
- this.$nodeDom[id].childNodes[1].setAttribute("stroke", "#ff3300");
- this.$nodeDom[id].childNodes[1].setAttribute("marker-end", "url(#arrow2)");
- } else {
- this.$nodeDom[id].childNodes[1].setAttribute("stroke", "gray");
- this.$nodeDom[id].childNodes[1].setAttribute("marker-end", "url(#arrow1)");
- }
- } else {
- if (mark) this.$nodeDom[id].strokeColor = "#ff3300";
- else this.$nodeDom[id].strokeColor = "gray"
- }
- }
- if (this.$undoStatck) {
- var paras = [id, type, !mark];
- this.pushOper("markItem", paras);
- }
- },
- ////////////////////////以下为区域分组块操作
- moveArea: function (id, left, top) {
- if (!this.$areaData[id]) return;
- if (this.onItemMove != null && !this.onItemMove(id, "area", left, top)) return;
- if (this.$undoStack) {
- var paras = [id, this.$areaData[id].left, this.$areaData[id].top];
- this.pushOper("moveNode", paras);
- }
- if (left < 0) left = 0;
- if (top < 0) top = 0;
- $("#" + id).css({ left: left + "px", top: top + "px" });
- this.$areaData[id].left = left;
- this.$areaData[id].top = top;
- if (this.$editable) {
- this.$areaData[id].alt = true;
- }
- },
- //删除区域分组
- delArea: function (id) {
- if (!this.$areaData[id]) return;
- if (this.$undoStack) {
- var paras = [id, this.$areaData[id]];
- this.pushOper("addArea", paras);
- }
- if (this.onItemDel != null && !this.onItemDel(id, "node")) return;
- delete this.$areaData[id];
- this.$areaDom[id].remove();
- delete this.$areaDom[id];
- --this.$areaCount;
- if (this.$editable) {
- //在回退新增操作时,如果节点ID以this.$id+"_area_"开头,则表示为本次编辑时新加入的节点,这些节点的删除不用加入到$deletedItem中
- if (id.indexOf(this.$id + "_area_") < 0)
- this.$deletedItem[id] = "area";
- }
- },
- //设置区域分组的颜色
- setAreaColor: function (id, color) {
- if (!this.$areaData[id]) return;
- if (this.$undoStack) {
- var paras = [id, this.$areaData[id].color];
- this.pushOper("setAreaColor", paras);
- }
- if (color == "red" || color == "yellow" || color == "blue" || color == "green") {
- this.$areaDom[id].removeClass("area_" + this.$areaData[id].color).addClass("area_" + color);
- this.$areaData[id].color = color;
- }
- if (this.$editable) {
- this.$areaData[id].alt = true;
- }
- },
- //设置区域分块的尺寸
- resizeArea: function (id, width, height) {
- if (!this.$areaData[id]) return;
- if (this.onItemResize != null && !this.onItemResize(id, "area", width, height)) return;
- if (this.$undoStack) {
- var paras = [id, this.$areaData[id].width, this.$areaData[id].height];
- this.pushOper("resizeArea", paras);
- }
- var hack = 0;
- if (navigator.userAgent.indexOf("8.0") != -1) hack = 2;
- this.$areaDom[id].children(".bg").css({ width: width - 2 + "px", height: height - 2 + "px" });
- width = this.$areaDom[id].outerWidth();
- height = this.$areaDom[id].outerHeight();
- this.$areaDom[id].children("bg").css({ width: width - 2 + "px", height: height - 2 + "px" });
- this.$areaData[id].width = width;
- this.$areaData[id].height = height;
- if (this.$editable) {
- this.$areaData[id].alt = true;
- }
- },
- addArea: function (id, json) {
- if (this.onItemAdd != null && !this.onItemAdd(id, "area", json)) return;
- if (this.$undoStack && this.$editable) {
- this.pushOper("delArea", [id]);
- }
- this.$areaDom[id] = $("
");
- this.$areaData[id] = json;
- this.$group.append(this.$areaDom[id]);
- if (this.$nowType != "group") this.$areaDom[id].children("div:eq(1)").css("display", "none");
- ++this.$areaCount;
- if (this.$editable) {
- this.$areaData[id].alt = true;
- if (this.$deletedItem[id]) delete this.$deletedItem[id];//在回退删除操作时,去掉该元素的删除记录
- }
- },
- //重构整个流程图设计器的宽高
- reinitSize: function (width, height) {
- var w = (width || 800) - 2;
- var h = (height || 500) - 2;
- this.$bgDiv.css({ height: h + "px", width: w + "px" });
- var headHeight = 0, hack = 10;
- if (this.$head != null) {
- headHeight = 24;
- hack = 7;
- }
- if (this.$tool != null) {
- this.$tool.css({ height: h - headHeight - hack + "px" });
- }
- w -= 39;
- h = h - headHeight - (this.$head != null ? 5 : 8);
- this.$workArea.parent().css({ height: h + "px", width: w + "px" });
- this.$workArea.css({ height: h * 3 + "px", width: w * 3 + "px" });
- if (GooFlow.prototype.useSVG == "") {
- this.$draw.coordsize = w * 3 + "," + h * 3;
- }
- this.$draw.style.width = w * 3 + "px";
- this.$draw.style.height = +h * 3 + "px";
- if (this.$group == null) {
- this.$group.css({ height: h * 3 + "px", width: w * 3 + "px" });
- }
- }
-}
-//将此类的构造函数加入至JQUERY对象中
-jQuery.extend({
- createGooFlow: function (bgDiv, property) {
- return new GooFlow(bgDiv, property);
- }
-});
-//获取一个DIV的绝对坐标的功能函数,即使是非绝对定位,一样能获取到
-function getElCoordinate(dom) {
- var t = dom.offsetTop;
- var l = dom.offsetLeft;
- dom = dom.offsetParent;
- while (dom) {
- t += dom.offsetTop;
- l += dom.offsetLeft;
- dom = dom.offsetParent;
- }; return {
- top: t,
- left: l
- };
-}
-//兼容各种浏览器的,获取鼠标真实位置
-function mousePosition(ev) {
- if (!ev) ev = window.event;
- if (ev.pageX || ev.pageY) {
- return { x: ev.pageX, y: ev.pageY };
- }
- return {
- x: ev.clientX + document.documentElement.scrollLeft - document.body.clientLeft,
- y: ev.clientY + document.documentElement.scrollTop - document.body.clientTop
- };
-}
\ No newline at end of file
diff --git a/OpenAuth.Mvc/js/flow-ui/gooflow.js b/OpenAuth.Mvc/js/flow-ui/gooflow.js
new file mode 100644
index 00000000..d8944dc9
--- /dev/null
+++ b/OpenAuth.Mvc/js/flow-ui/gooflow.js
@@ -0,0 +1,2279 @@
+layui.define("jquery",
+ function(exports) {
+ var jQuery = layui.jquery,
+ $ = layui.jquery;
+
+ //定义一个区域图类:
+ function GooFlow(bgDiv, property) {
+ if (navigator.userAgent.indexOf("MSIE 8.0") > 0 ||
+ navigator.userAgent.indexOf("MSIE 7.0") > 0 ||
+ navigator.userAgent.indexOf("MSIE 6.0") > 0)
+ GooFlow.prototype.useSVG = "";
+ else GooFlow.prototype.useSVG = "1";
+ //初始化区域图的对象
+ this.$id = bgDiv.attr("id");
+ this.$bgDiv = bgDiv; //最父框架的DIV
+ this.$bgDiv.addClass("GooFlow");
+ var width = (property.width || 800) - 2;
+ var height = (property.height || 500) - 2;
+ this.$bgDiv.css({ width: width + "px", height: height + "px" });
+ this.$tool = null; //左侧工具栏对象
+ this.$head = null; //顶部标签及工具栏按钮
+ this.$title = "newFlow_1"; //流程图的名称
+ this.$nodeRemark = {}; //每一种结点或按钮的说明文字,JSON格式,key为类名,value为用户自定义文字说明
+ this.$nowType = "cursor"; //当前要绘制的对象类型
+ this.$lineData = {};
+ this.$lineCount = 0;
+ this.$nodeData = {};
+ this.$nodeCount = 0;
+ this.$areaData = {};
+ this.$areaCount = 0;
+ this.$lineDom = {};
+ this.$nodeDom = {};
+ this.$areaDom = {};
+ this.$max = property.initNum || 1; //计算默认ID值的起始SEQUENCE
+ this.$focus = ""; //当前被选定的结点/转换线ID,如果没选中或者工作区被清空,则为""
+ this.$cursor = "default"; //鼠标指针在工作区内的样式
+ this.$editable = false; //工作区是否可编辑
+ this.$deletedItem = {}; //在流程图的编辑操作中被删除掉的元素ID集合,元素ID为KEY,元素类型(node,line.area)为VALUE
+ var headHeight = 0;
+ var tmp = "";
+ if (property.haveHead) {
+ tmp = "
";
+ for (var x = 0; x < property.headBtns.length; ++x) {
+ tmp += "
"
+ }
+ tmp += "
";
+ this.$head = $(tmp);
+ this.$bgDiv.append(this.$head);
+ headHeight = 24;
+ //以下是当工具栏按钮被点击时触发的事件自定义(虚函数),格式为function(),因为可直接用THIS操作对象本身,不用传参;用户可自行重定义:
+ this.onBtnNewClick = null; //新建流程图按钮被点中
+ this.onBtnOpenClick = null; //打开流程图按钮定义
+ this.onBtnSaveClick = null; //保存流程图按钮定义
+ this.onFreshClick = null; //重载流程图按钮定义
+ if (property.headBtns)
+ this.$head.on("click",
+ { inthis: this },
+ function(e) {
+ if (!e) e = window.event;
+ var tar = e.target;
+ if (tar.tagName == "DIV" || tar.tagName == "SPAN") return;
+ else if (tar.tagName == "a") tar = tar.childNode[0];
+ var This = e.data.inthis;
+ //定义顶部操作栏按钮的事件
+ switch ($(tar).attr("class")) {
+ case "ico_new":
+ if (This.onBtnNewClick != null) This.onBtnNewClick();
+ break;
+ case "ico_open":
+ if (This.onBtnOpenClick != null) This.onBtnOpenClick();
+ break;
+ case "ico_save":
+ if (This.onBtnSaveClick != null) This.onBtnSaveClick();
+ break;
+ case "ico_undo":
+ This.undo();
+ break;
+ case "ico_redo":
+ This.redo();
+ break;
+ case "ico_reload":
+ if (This.onFreshClick != null) This.onFreshClick();
+ break;
+ }
+ });
+ }
+ var toolWidth = 0;
+ if (property.haveTool) {
+ this.$bgDiv.append("
");
+ this.$tool = this.$bgDiv.find(".GooFlow_tool div");
+ //未加代码:加入绘图工具按钮
+ this.$tool.append("
");
+ if (property.toolBtns && property.toolBtns.length > 0) {
+ tmp = "
";
+ for (var i = 0; i < property.toolBtns.length; ++i) {
+ tmp += "
"; //加入自定义按钮
+ }
+ this.$tool.append(tmp);
+ }
+ //加入区域划分框工具开关按钮
+ if (property.haveGroup)
+ this.$tool.append("
");
+ toolWidth = 31;
+ this.$nowType = "cursor";
+ //绑定各个按钮的点击事件
+ this.$tool.on("click",
+ { inthis: this },
+ function(e) {
+ if (!e) e = window.event;
+ var tar;
+ switch (e.target.tagName) {
+ case "SPAN":
+ return false;
+ case "DIV":
+ return false;
+ case "B":
+ tar = e.target.parentNode;
+ break;
+ case "A":
+ tar = e.target;
+ };
+ var type = $(tar).attr("type");
+ e.data.inthis.switchToolBtn(type);
+ return false;
+ });
+ this.$editable = true; //只有具有工具栏时可编辑
+ }
+ width = width - toolWidth - 8;
+ height = height;
+ this.$bgDiv.append("
");
+ this.$workArea = $("
")
+ .attr({
+ "unselectable": "on",
+ "onselectstart": 'return false',
+ "onselect": 'document.selection.empty()'
+ });
+ this.$bgDiv.children(".GooFlow_work").append(this.$workArea);
+ this.$draw = null; //画矢量线条的容器
+ this.initDraw("draw_" + this.$id, width, height);
+ this.$group = null;
+ if (property.haveGroup)
+ this.initGroup(width, height);
+ if (this.$editable) {
+ this.$workArea.on("click",
+ { inthis: this },
+ function(e) {
+ if (!e) e = window.event;
+ if (!e.data.inthis.$editable) return;
+ var type = e.data.inthis.$nowType;
+ if (type == "cursor") {
+ var t = $(e.target);
+ var n = t.prop("tagName");
+ if (n == "svg" ||
+ (n == "DIV" && t.prop("class").indexOf("GooFlow_work") > -1) ||
+ n == "LABEL") e.data.inthis.blurItem();
+ return;
+ } else if (type == "direct" || type == "group") return;
+ var X, Y;
+ var ev = mousePosition(e), t = getElCoordinate(this);
+ X = ev.x - t.left + this.parentNode.scrollLeft - 1;
+ Y = ev.y - t.top + this.parentNode.scrollTop - 1;
+
+ var name = "新建节点" + e.data.inthis.$max;
+ var type = e.data.inthis.$nowType;
+ if (type == 'startround') {
+ name = "开始";
+ }
+ if (type == 'endround') {
+ name = "结束";
+ }
+ var executeadd = true;
+ var _nodeData = e.data.inthis.$nodeData;
+ $.each(_nodeData,
+ function(i) {
+ if (_nodeData[i].name == name) {
+ alert(name + '节点不能重复');
+ executeadd = false;
+ return false;
+ }
+ })
+ if (executeadd) {
+ e.data.inthis.addNode(e.data.inthis.$id + "_node_" + e.data.inthis.$max,
+ { name: name, left: X, top: Y, type: e.data.inthis.$nowType, css: '', img: '', });
+ e.data.inthis.$max++;
+ }
+ });
+ //划线时用的绑定
+ this.$workArea.mousemove({ inthis: this },
+ function(e) {
+ if (e.data.inthis.$nowType != "direct") return;
+ var lineStart = $(this).data("lineStart");
+ if (!lineStart) return;
+ var ev = mousePosition(e), t = getElCoordinate(this);
+ var X, Y;
+ X = ev.x - t.left + this.parentNode.scrollLeft;
+ Y = ev.y - t.top + this.parentNode.scrollTop;
+ var line = document.getElementById("GooFlow_tmp_line");
+ if (GooFlow.prototype.useSVG != "") {
+ line.childNodes[0].setAttribute("d",
+ "M " + lineStart.x + " " + lineStart.y + " L " + X + " " + Y);
+ line.childNodes[1].setAttribute("d",
+ "M " + lineStart.x + " " + lineStart.y + " L " + X + " " + Y);
+ if (line.childNodes[1].getAttribute("marker-end") == "url(\"#arrow2\")")
+ line.childNodes[1].setAttribute("marker-end", "url(#arrow3)");
+ else line.childNodes[1].setAttribute("marker-end", "url(#arrow2)");
+ } else line.points.value = lineStart.x + "," + lineStart.y + " " + X + "," + Y;
+ });
+ this.$workArea.mouseup({ inthis: this },
+ function(e) {
+ if (e.data.inthis.$nowType != "direct") return;
+ $(this).css("cursor", "auto").removeData("lineStart");
+ var tmp = document.getElementById("GooFlow_tmp_line");
+ if (tmp) e.data.inthis.$draw.removeChild(tmp);
+ });
+ //为了结点而增加的一些集体delegate绑定
+ this.initWorkForNode();
+ //对结点进行移动或者RESIZE时用来显示的遮罩层
+ this.$ghost = $("
").attr({
+ "unselectable": "on",
+ "onselectstart": 'return false',
+ "onselect": 'document.selection.empty()'
+ });
+ this.$bgDiv.append(this.$ghost);
+ this.$textArea = $("
");
+ this.$bgDiv.append(this.$textArea);
+ this.$lineMove = $("
"); //操作折线时的移动框
+ this.$workArea.append(this.$lineMove);
+ this.$lineMove.on("mousedown",
+ { inthis: this },
+ function(e) {
+ if (e.button == 2) return false;
+ var lm = $(this);
+ lm.css({ "background-color": "#333" });
+ var This = e.data.inthis;
+ var ev = mousePosition(e), t = getElCoordinate(This.$workArea[0]);
+ var X, Y;
+ X = ev.x - t.left + This.$workArea[0].parentNode.scrollLeft;
+ Y = ev.y - t.top + This.$workArea[0].parentNode.scrollTop;
+ var p = This.$lineMove.position();
+ var vX = X - p.left, vY = Y - p.top;
+ var isMove = false;
+ document.onmousemove = function(e) {
+ if (!e) e = window.event;
+ var ev = mousePosition(e);
+ var ps = This.$lineMove.position();
+ X = ev.x - t.left + This.$workArea[0].parentNode.scrollLeft;
+ Y = ev.y - t.top + This.$workArea[0].parentNode.scrollTop;
+ if (This.$lineMove.data("type") == "lr") {
+ X = X - vX;
+ if (X < 0) X = 0;
+ else if (X > This.$workArea.width())
+ X = This.$workArea.width();
+ This.$lineMove.css({ left: X + "px" });
+ } else if (This.$lineMove.data("type") == "tb") {
+ Y = Y - vY;
+ if (Y < 0) Y = 0;
+ else if (Y > This.$workArea.height())
+ Y = This.$workArea.height();
+ This.$lineMove.css({ top: Y + "px" });
+ }
+ isMove = true;
+ }
+ document.onmouseup = function(e) {
+ if (isMove) {
+ var p = This.$lineMove.position();
+ if (This.$lineMove.data("type") == "lr")
+ This.setLineM(This.$lineMove.data("tid"), p.left + 3);
+ else if (This.$lineMove.data("type") == "tb")
+ This.setLineM(This.$lineMove.data("tid"), p.top + 3);
+ }
+ This.$lineMove.css({ "background-color": "transparent" });
+ if (This.$focus == This.$lineMove.data("tid")) {
+ This.focusItem(This.$lineMove.data("tid"));
+ }
+ document.onmousemove = null;
+ document.onmouseup = null;
+ }
+ });
+ this.$lineOper =
+ $(
+ "
"); //选定线时显示的操作框
+ this.$workArea.append(this.$lineOper);
+ this.$lineOper.on("click",
+ { inthis: this },
+ function(e) {
+ if (!e) e = window.event;
+ if (e.target.tagName != "A" && e.target.tagName != "B") return;
+ var This = e.data.inthis;
+ var id = $(this).data("tid");
+ switch ($(e.target).attr("class")) {
+ case "b_x":
+ This.delLine(id);
+ this.style.display = "none";
+ break;
+ case "b_l1":
+ This.setLineType(id, "lr");
+ break;
+ case "b_l2":
+ This.setLineType(id, "tb");
+ break;
+ case "b_l3":
+ This.setLineType(id, "sl");
+ break;
+ break;
+ }
+ });
+
+ //下面绑定当结点/线/分组块的一些操作事件,这些事件可直接通过this访问对象本身
+ //当操作某个单元(结点/线/分组块)被添加时,触发的方法,返回FALSE可阻止添加事件的发生
+ //格式function(id,type,json):id是单元的唯一标识ID,type是单元的种类,有"node","line","area"三种取值,json即addNode,addLine或addArea方法的第二个传参json.
+ this.onItemAdd = null;
+ //当操作某个单元(结点/线/分组块)被删除时,触发的方法,返回FALSE可阻止删除事件的发生
+ //格式function(id,type):id是单元的唯一标识ID,type是单元的种类,有"node","line","area"三种取值
+ this.onItemDel = null;
+ //当操作某个单元(结点/分组块)被移动时,触发的方法,返回FALSE可阻止移动事件的发生
+ //格式function(id,type,left,top):id是单元的唯一标识ID,type是单元的种类,有"node","area"两种取值,线line不支持移动,left是新的左边距坐标,top是新的顶边距坐标
+ this.onItemMove = null;
+ //当操作某个单元(结点/线/分组块)被重命名时,触发的方法,返回FALSE可阻止重命名事件的发生
+ //格式function(id,name,type):id是单元的唯一标识ID,type是单元的种类,有"node","line","area"三种取值,name是新的名称
+ this.onItemRename = null;
+ //当操作某个单元(结点/线)被由不选中变成选中时,触发的方法,返回FALSE可阻止选中事件的发生
+ //格式function(id,type):id是单元的唯一标识ID,type是单元的种类,有"node","line"两种取值,"area"不支持被选中
+ this.onItemFocus = null;
+ //当操作某个单元(结点/线)被由选中变成不选中时,触发的方法,返回FALSE可阻止取消选中事件的发生
+ //格式function(id,type):id是单元的唯一标识ID,type是单元的种类,有"node","line"两种取值,"area"不支持被取消选中
+ this.onItemBlur = null;
+ //当操作某个单元(结点/分组块)被重定义大小或造型时,触发的方法,返回FALSE可阻止重定大小/造型事件的发生
+ //格式function(id,type,width,height):id是单元的唯一标识ID,type是单元的种类,有"node","line","area"三种取值;width是新的宽度,height是新的高度
+ this.onItemResize = null;
+ //当移动某条折线中段的位置,触发的方法,返回FALSE可阻止重定大小/造型事件的发生
+ //格式function(id,M):id是单元的唯一标识ID,M是中段的新X(或Y)的坐标
+ this.onLineMove = null;
+ //当变换某条连接线的类型,触发的方法,返回FALSE可阻止重定大小/造型事件的发生
+ //格式function(id,type):id是单元的唯一标识ID,type是连接线的新类型,"sl":直线,"lr":中段可左右移动的折线,"tb":中段可上下移动的折线
+ this.onLineSetType = null;
+ //当用重色标注某个结点/转换线时触发的方法,返回FALSE可阻止重定大小/造型事件的发生
+ //格式function(id,type,mark):id是单元的唯一标识ID,type是单元类型("node"结点,"line"转换线),mark为布尔值,表示是要标注TRUE还是取消标注FALSE
+ this.onItemMark = null;
+
+ if (property.useOperStack && this.$editable) { //如果要使用堆栈记录操作并提供“撤销/重做”的功能,只在编辑状态下有效
+ this.$undoStack = [];
+ this.$redoStack = [];
+ this.$isUndo = 0;
+ ///////////////以下是构造撤销操作/重做操作的方法
+ //为了节省浏览器内存空间,undo/redo中的操作缓存栈,最多只可放40步操作;超过40步时,将自动删掉最旧的一个缓存
+ this.pushOper = function(funcName, paras) {
+ var len = this.$undoStack.length;
+ if (this.$isUndo == 1) {
+ this.$redoStack.push([funcName, paras]);
+ this.$isUndo = false;
+ if (this.$redoStack.length > 40) this.$redoStack.shift();
+ } else {
+ this.$undoStack.push([funcName, paras]);
+ if (this.$undoStack.length > 40) this.$undoStack.shift();
+ if (this.$isUndo == 0) {
+ this.$redoStack.splice(0, this.$redoStack.length);
+ }
+ this.$isUndo = 0;
+ }
+ };
+ //将外部的方法加入到GooFlow对象的事务操作堆栈中,在过后的undo/redo操作中可以进行控制,一般用于对流程图以外的附加信息进行编辑的事务撤销/重做控制;
+ //传参func为要执行方法对象,jsonPara为外部方法仅有的一个面向字面的JSON传参,由JSON对象带入所有要传的信息;
+ //提示:为了让外部方法能够被UNDO/REDO,需要在编写这些外部方法实现时,加入对该方法执行后效果回退的另一个执行方法的pushExternalOper
+ this.pushExternalOper = function(func, jsonPara) {
+ this.pushOper("externalFunc", [func, jsonPara]);
+ };
+ //撤销上一步操作
+ this.undo = function() {
+ if (this.$undoStack.length == 0) return;
+ var tmp = this.$undoStack.pop();
+ this.$isUndo = 1;
+ if (tmp[0] == "externalFunc") {
+ tmp[1][0](tmp[1][1]);
+ } else {
+ //传参的数量,最多支持6个.
+ switch (tmp[1].length) {
+ case 0:
+ this[tmp[0]]();
+ break;
+ case 1:
+ this[tmp[0]](tmp[1][0]);
+ break;
+ case 2:
+ this[tmp[0]](tmp[1][0], tmp[1][1]);
+ break;
+ case 3:
+ this[tmp[0]](tmp[1][0], tmp[1][1], tmp[1][2]);
+ break;
+ case 4:
+ this[tmp[0]](tmp[1][0], tmp[1][1], tmp[1][2], tmp[1][3]);
+ break;
+ case 5:
+ this[tmp[0]](tmp[1][0], tmp[1][1], tmp[1][2], tmp[1][3], tmp[1][4]);
+ break;
+ case 6:
+ this[tmp[0]](tmp[1][0], tmp[1][1], tmp[1][2], tmp[1][3], tmp[1][4], tmp[1][5]);
+ break;
+ }
+ }
+ };
+ //重做最近一次被撤销的操作
+ this.redo = function() {
+ if (this.$redoStack.length == 0) return;
+ var tmp = this.$redoStack.pop();
+ this.$isUndo = 2;
+ if (tmp[0] == "externalFunc") {
+ tmp[1][0](tmp[1][1]);
+ } else {
+ //传参的数量,最多支持6个.
+ switch (tmp[1].length) {
+ case 0:
+ this[tmp[0]]();
+ break;
+ case 1:
+ this[tmp[0]](tmp[1][0]);
+ break;
+ case 2:
+ this[tmp[0]](tmp[1][0], tmp[1][1]);
+ break;
+ case 3:
+ this[tmp[0]](tmp[1][0], tmp[1][1], tmp[1][2]);
+ break;
+ case 4:
+ this[tmp[0]](tmp[1][0], tmp[1][1], tmp[1][2], tmp[1][3]);
+ break;
+ case 5:
+ this[tmp[0]](tmp[1][0], tmp[1][1], tmp[1][2], tmp[1][3], tmp[1][4]);
+ break;
+ case 6:
+ this[tmp[0]](tmp[1][0], tmp[1][1], tmp[1][2], tmp[1][3], tmp[1][4], tmp[1][5]);
+ break;
+ }
+ }
+ };
+ }
+ $(document).keydown({ inthis: this },
+ function(e) {
+ //绑定键盘操作
+ var This = e.data.inthis;
+ if (This.$focus == "") return;
+ switch (e.keyCode) {
+ case 46: //删除
+ This.delNode(This.$focus, true);
+ This.delLine(This.$focus);
+ break;
+ }
+ });
+ }
+ }
+
+ GooFlow.prototype = {
+ useSVG: "",
+ getSvgMarker: function(id, color) {
+ var m = document.createElementNS("http://www.w3.org/2000/svg", "marker");
+ m.setAttribute("id", id);
+ m.setAttribute("viewBox", "0 0 6 6");
+ m.setAttribute("refX", 5);
+ m.setAttribute("refY", 3);
+ m.setAttribute("markerUnits", "strokeWidth");
+ m.setAttribute("markerWidth", 6);
+ m.setAttribute("markerHeight", 6);
+ m.setAttribute("orient", "auto");
+ var path = document.createElementNS("http://www.w3.org/2000/svg", "path");
+ path.setAttribute("d", "M 0 0 L 6 3 L 0 6 z");
+ path.setAttribute("fill", color);
+ path.setAttribute("stroke-width", 0);
+ m.appendChild(path);
+ return m;
+ },
+ initDraw: function(id, width, height) {
+ var elem;
+ if (GooFlow.prototype.useSVG != "") {
+ this.$draw = document.createElementNS("http://www.w3.org/2000/svg", "svg"); //可创建带有指定命名空间的元素节点
+ this.$workArea.prepend(this.$draw);
+ var defs = document.createElementNS("http://www.w3.org/2000/svg", "defs");
+ this.$draw.appendChild(defs);
+ defs.appendChild(GooFlow.prototype.getSvgMarker("arrow1", "gray"));
+ defs.appendChild(GooFlow.prototype.getSvgMarker("arrow2", "#ff3300"));
+ defs.appendChild(GooFlow.prototype.getSvgMarker("arrow3", "#ff3300"));
+ } else {
+ this.$draw = document.createElement("v:group");
+ this.$draw.coordsize = width * 3 + "," + height * 3;
+ this.$workArea.prepend("
");
+ this.$workArea.children("div")[0].insertBefore(this.$draw, null);
+ }
+ this.$draw.id = id;
+ this.$draw.style.width = width * 3 + "px";
+ this.$draw.style.height = +height * 3 + "px";
+ //绑定连线的点击选中以及双击编辑事件
+ var tmpClk = null;
+ if (GooFlow.prototype.useSVG != "") tmpClk = "g";
+ else tmpClk = "PolyLine";
+ if (this.$editable) {
+ $(this.$draw).delegate(tmpClk,
+ "click",
+ { inthis: this },
+ function(e) {
+ e.data.inthis.focusItem(this.id, true);
+ });
+ $(this.$draw).delegate(tmpClk,
+ "dblclick",
+ { inthis: this },
+ function(e) {
+ var This = e.data.inthis;
+ OpenLine(this.id, This);
+ //var oldTxt, x, y, from, to;
+ //var This = e.data.inthis;
+ //if (GooFlow.prototype.useSVG != "") {
+ // oldTxt = this.childNodes[2].textContent;
+ // from = this.getAttribute("from").split(",");
+ // to = this.getAttribute("to").split(",");
+ //} else {
+ // oldTxt = this.childNodes[1].innerHTML;
+ // var n = this.getAttribute("fromTo").split(",");
+ // from = [n[0], n[1]];
+ // to = [n[2], n[3]];
+ //}
+ //if (This.$lineData[this.id].type == "lr") {
+ // from[0] = This.$lineData[this.id].M;
+ // to[0] = from[0];
+ //}
+ //else if (This.$lineData[this.id].type == "tb") {
+ // from[1] = This.$lineData[this.id].M;
+ // to[1] = from[1];
+ //}
+ //x = (parseInt(from[0], 10) + parseInt(to[0], 10)) / 2 - 60;
+ //y = (parseInt(from[1], 10) + parseInt(to[1], 10)) / 2 - 12;
+ //var t = getElCoordinate(This.$workArea[0]);
+ //This.$textArea.val(oldTxt).css({
+ // display: "block", width: 120, height: 14,
+ // left: t.left + x - This.$workArea[0].parentNode.scrollLeft,
+ // top: t.top + y - This.$workArea[0].parentNode.scrollTop
+ //}).data("id", This.$focus).focus();
+ //This.$workArea.parent().one("mousedown", function (e) {
+ // if (e.button == 2) return false;
+ // This.setName(This.$textArea.data("id"), This.$textArea.val(), "line");
+ // This.$textArea.val("").removeData("id").hide();
+ //});
+ });
+ }
+ },
+ initGroup: function(width, height) {
+ this.$group =
+ $("
"); //存放背景区域的容器
+ this.$workArea.prepend(this.$group);
+ if (!this.$editable) return;
+ //区域划分框操作区的事件绑定
+ this.$group.on("mousedown",
+ { inthis: this },
+ function(e) { //绑定RESIZE功能以及移动功能
+ if (e.button == 2) return false;
+ var This = e.data.inthis;
+ if (This.$nowType != "group") return;
+ if (This.$textArea.css("display") == "block") {
+ This.setName(This.$textArea.data("id"), This.$textArea.val(), "area");
+ This.$textArea.val("").removeData("id").hide();
+ return false;
+ };
+ if (!e) e = window.event;
+ var cursor = $(e.target).css("cursor");
+ var id = e.target.parentNode;
+ switch (cursor) {
+ case "nw-resize":
+ id = id.parentNode;
+ break;
+ case "w-resize":
+ id = id.parentNode;
+ break;
+ case "n-resize":
+ id = id.parentNode;
+ break;
+ case "move":
+ break;
+ default:
+ return;
+ }
+ id = id.id;
+ var hack = 1;
+ if (navigator.userAgent.indexOf("8.0") != -1) hack = 0;
+ var ev = mousePosition(e), t = getElCoordinate(This.$workArea[0]);
+
+ var X, Y;
+ X = ev.x - t.left + This.$workArea[0].parentNode.scrollLeft;
+ Y = ev.y - t.top + This.$workArea[0].parentNode.scrollTop;
+ if (cursor != "move") {
+ This.$ghost.css({
+ display: "block",
+ width: This.$areaData[id].width - 2 + "px",
+ height: This.$areaData[id].height - 2 + "px",
+ top: This.$areaData[id].top +
+ t.top -
+ This.$workArea[0].parentNode.scrollTop +
+ hack +
+ "px",
+ left: This.$areaData[id].left +
+ t.left -
+ This.$workArea[0].parentNode.scrollLeft +
+ hack +
+ "px",
+ cursor: cursor
+ });
+ var vX = (This.$areaData[id].left + This.$areaData[id].width) - X;
+ var vY = (This.$areaData[id].top + This.$areaData[id].height) - Y;
+ } else {
+ var vX = X - This.$areaData[id].left;
+ var vY = Y - This.$areaData[id].top;
+ }
+ var isMove = false;
+ This.$ghost.css("cursor", cursor);
+ document.onmousemove = function(e) {
+ if (!e) e = window.event;
+ var ev = mousePosition(e);
+ if (cursor != "move") {
+ X = ev.x -
+ t.left +
+ This.$workArea[0].parentNode.scrollLeft -
+ This.$areaData[id].left +
+ vX;
+ Y = ev.y - t.top + This.$workArea[0].parentNode.scrollTop - This.$areaData[id].top + vY;
+ if (X < 200) X = 200;
+ if (Y < 100) Y = 100;
+ switch (cursor) {
+ case "nw-resize":
+ This.$ghost.css({ width: X - 2 + "px", height: Y - 2 + "px" });
+ break;
+ case "w-resize":
+ This.$ghost.css({ width: X - 2 + "px" });
+ break;
+ case "n-resize":
+ This.$ghost.css({ height: Y - 2 + "px" });
+ break;
+ }
+ } else {
+ if (This.$ghost.css("display") == "none") {
+ This.$ghost.css({
+ display: "block",
+ width: This.$areaData[id].width - 2 + "px",
+ height: This.$areaData[id].height - 2 + "px",
+ top: This.$areaData[id].top +
+ t.top -
+ This.$workArea[0].parentNode.scrollTop +
+ hack +
+ "px",
+ left: This.$areaData[id].left +
+ t.left -
+ This.$workArea[0].parentNode.scrollLeft +
+ hack +
+ "px",
+ cursor: cursor
+ });
+ }
+ X = ev.x - vX;
+ Y = ev.y - vY;
+ if (X < t.left - This.$workArea[0].parentNode.scrollLeft)
+ X = t.left - This.$workArea[0].parentNode.scrollLeft;
+ else if (X + This.$workArea[0].parentNode.scrollLeft + This.$areaData[id].width >
+ t.left + This.$workArea.width())
+ X = t.left +
+ This.$workArea.width() -
+ This.$workArea[0].parentNode.scrollLeft -
+ This.$areaData[id].width;
+ if (Y < t.top - This.$workArea[0].parentNode.scrollTop)
+ Y = t.top - This.$workArea[0].parentNode.scrollTop;
+ else if (Y + This.$workArea[0].parentNode.scrollTop + This.$areaData[id].height >
+ t.top + This.$workArea.height())
+ Y = t.top +
+ This.$workArea.height() -
+ This.$workArea[0].parentNode.scrollTop -
+ This.$areaData[id].height;
+ This.$ghost.css({ left: X + hack + "px", top: Y + hack + "px" });
+ }
+ isMove = true;
+ }
+ document.onmouseup = function(e) {
+ This.$ghost.empty().hide();
+ document.onmousemove = null;
+ document.onmouseup = null;
+ if (!isMove) return;
+ if (cursor != "move")
+ This.resizeArea(id, This.$ghost.outerWidth(), This.$ghost.outerHeight());
+ else
+ This.moveArea(id,
+ X + This.$workArea[0].parentNode.scrollLeft - t.left,
+ Y + This.$workArea[0].parentNode.scrollTop - t.top);
+ return false;
+ }
+ });
+ //绑定修改文字说明功能
+ this.$group.on("dblclick",
+ { inthis: this },
+ function(e) {
+ var This = e.data.inthis;
+ if (This.$nowType != "group") return;
+ if (!e) e = window.event;
+ if (e.target.tagName != "LABEL") return false;
+ var oldTxt = e.target.innerHTML;
+ var p = e.target.parentNode;
+ var x = parseInt(p.style.left, 10) + 18, y = parseInt(p.style.top, 10) + 1;
+ var t = getElCoordinate(This.$workArea[0]);
+ This.$textArea.val(oldTxt).css({
+ display: "block",
+ width: 100,
+ height: 14,
+ left: t.left + x - This.$workArea[0].parentNode.scrollLeft,
+ top: t.top + y - This.$workArea[0].parentNode.scrollTop
+ }).data("id", p.id).focus();
+ This.$workArea.parent().one("mousedown",
+ function(e) {
+ if (e.button == 2) return false;
+ if (This.$textArea.css("display") == "block") {
+ This.setName(This.$textArea.data("id"), This.$textArea.val(), "area");
+ This.$textArea.val("").removeData("id").hide();
+ }
+ });
+ return false;
+ });
+ //绑定点击事件
+ this.$group.mouseup({ inthis: this },
+ function(e) {
+
+ var This = e.data.inthis;
+ if (This.$nowType != "group") return;
+ if (!e) e = window.event;
+ switch ($(e.target).attr("class")) {
+ case "rs_close":
+ This.delArea(e.target.parentNode.parentNode.id);
+ return false; //删除该分组区域
+ case "bg":
+ return;
+ }
+ switch (e.target.tagName) {
+ case "LABEL":
+ return false;
+ case "B": //绑定变色功能
+ var id = e.target.parentNode.id;
+ switch (This.$areaData[id].color) {
+ case "red":
+ This.setAreaColor(id, "yellow");
+ break;
+ case "yellow":
+ This.setAreaColor(id, "blue");
+ break;
+ case "blue":
+ This.setAreaColor(id, "green");
+ break;
+ case "green":
+ This.setAreaColor(id, "red");
+ break;
+ }
+ return false;
+ }
+ if (e.data.inthis.$ghost.css("display") == "none") {
+ var X, Y;
+ var ev = mousePosition(e), t = getElCoordinate(this);
+ X = ev.x - t.left + this.parentNode.parentNode.scrollLeft - 1;
+ Y = ev.y - t.top + this.parentNode.parentNode.scrollTop - 1;
+ var color = ["red", "yellow", "blue", "green"];
+ e.data.inthis.addArea(e.data.inthis.$id + "_area_" + e.data.inthis.$max,
+ {
+ name: "area_" + e.data.inthis.$max,
+ left: X,
+ top: Y,
+ color: color[e.data.inthis.$max % 4],
+ width: 200,
+ height: 100
+ });
+ e.data.inthis.$max++;
+ return false;
+ }
+ });
+ },
+ //每一种类型结点及其按钮的说明文字
+ setNodeRemarks: function(remark) {
+ if (this.$tool != null) {
+ this.$tool.children("a").each(function() {
+ this.title = remark[$(this).attr("id").split("btn_")[1]];
+ });
+ this.$nodeRemark = remark;
+ }
+ },
+
+ //切换左边工具栏按钮,传参TYPE表示切换成哪种类型的按钮
+ switchToolBtn: function(type) {
+ this.$tool.children("#" + this.$id + "_btn_" + this.$nowType.split(" ")[0])
+ .attr("class", "GooFlow_tool_btn");
+ if (this.$nowType == "group") {
+ this.$workArea.prepend(this.$group);
+ for (var key in this.$areaDom)
+ this.$areaDom[key].addClass("lock").children("div:eq(1)").css("display", "none");
+ }
+ this.$nowType = type;
+ this.$tool.children("#" + this.$id + "_btn_" + type.split(" ")[0])
+ .attr("class", "GooFlow_tool_btndown");
+ if (this.$nowType == "group") {
+ this.blurItem();
+ this.$workArea.append(this.$group);
+ for (var key in this.$areaDom)
+ this.$areaDom[key].removeClass("lock").children("div:eq(1)").css("display", "");
+ }
+ if (this.$textArea.css("display") == "none") this.$textArea.removeData("id").val("").hide();
+ },
+ //增加一个流程结点,传参为一个JSON,有id,name,top,left,width,height,type(结点类型)等属性
+ addNode: function(id, json) {
+ if (this.onItemAdd != null && !this.onItemAdd(id, "node", json)) return;
+ if (this.$undoStack && this.$editable) {
+ this.pushOper("delNode", [id]);
+ }
+ var mark = json.type;
+ if (json.type != "startround" && json.type != "endround") {
+ if (!json.width || json.width < 86) json.width = 150;
+ if (!json.height || json.height < 24) json.height = 65;
+ if (!json.top || json.top < 0) json.top = 0;
+ if (!json.left || json.left < 0) json.left = 0;
+ var hack = 0;
+ if (navigator.userAgent.indexOf("8.0") != -1) hack = 2;
+ this.$nodeDom[id] = $("
");
+ if (json.type.indexOf(" mix") > -1) this.$nodeDom[id].addClass(mark);
+ //json.css = mark;
+ //json.img = mark;
+ } else {
+ json.width = 24;
+ json.height = 24;
+ var name = json.name;
+ if (json.type == 'startround') {
+ name = "开始";
+ }
+ if (json.type == 'endround') {
+ name = "结束";
+ }
+ this.$nodeDom[id] = $("
");
+ }
+ var ua = navigator.userAgent.toLowerCase();
+ if (ua.indexOf('msie') != -1 && ua.indexOf('8.0') != -1)
+ this.$nodeDom[id].css("filter",
+ "progid:DXImageTransform.Microsoft.Shadow(color=#94AAC2,direction=135,strength=2)");
+ this.$workArea.append(this.$nodeDom[id]);
+ this.$nodeData[id] = json;
+ ++this.$nodeCount;
+ if (this.$editable) {
+ this.$nodeData[id].alt = true;
+ if (this.$deletedItem[id]) delete this.$deletedItem[id]; //在回退删除操作时,去掉该元素的删除记录
+ }
+ },
+ initWorkForNode: function() {
+ //绑定点击事件
+ this.$workArea.delegate(".GooFlow_item",
+ "click",
+ { inthis: this },
+ function(e) {
+ e.data.inthis.focusItem(this.id, true);
+ $(this).removeClass("item_mark");
+ //if (!$(this).hasClass("item_startround")) {
+ // LoadrightMenu("#" + this.id);
+ //}
+ //if (!$(this).hasClass("item_endround")) {
+ // LoadrightMenu("#" + this.id);
+ //}
+ });
+ //绑定右击事件
+ this.$workArea.delegate(".GooFlow_item",
+ "contextmenu",
+ { inthis: this },
+ function(e) {
+ e.data.inthis.focusItem(this.id, true);
+ $(this).removeClass("item_mark");
+ return false;
+ });
+ //绑定用鼠标移动事件
+ this.$workArea.delegate(".ico",
+ "mousedown",
+ { inthis: this },
+ function(e) {
+ if (!e) e = window.event;
+ if (e.button == 2) return false;
+ var This = e.data.inthis;
+ if (This.$nowType == "direct") return;
+ var Dom = $(this).parents(".GooFlow_item");
+ var id = Dom.attr("id");
+ This.focusItem(id, true);
+ var hack = 1;
+ if (navigator.userAgent.indexOf("8.0") != -1) hack = 0;
+ var ev = mousePosition(e), t = getElCoordinate(This.$workArea[0]);
+
+ Dom.children("table").clone().prependTo(This.$ghost);
+ var X, Y;
+ X = ev.x - t.left + This.$workArea[0].parentNode.scrollLeft;
+ Y = ev.y - t.top + This.$workArea[0].parentNode.scrollTop;
+ var vX = X - This.$nodeData[id].left, vY = Y - This.$nodeData[id].top;
+ var isMove = false;
+ document.onmousemove = function(e) {
+ if (!e) e = window.event;
+ var ev = mousePosition(e);
+ if (X == ev.x - vX && Y == ev.y - vY) return false;
+ X = ev.x - vX;
+ Y = ev.y - vY;
+
+ if (isMove && This.$ghost.css("display") == "none") {
+ This.$ghost.css({
+ display: "block",
+ width: $('#' + id).width() - 2 + "px",
+ height: $('#' + id).height() - 2 + "px",
+ top: This.$nodeData[id].top +
+ t.top -
+ This.$workArea[0].parentNode.scrollTop +
+ hack +
+ "px",
+ left: This.$nodeData[id].left +
+ t.left -
+ This.$workArea[0].parentNode.scrollLeft +
+ hack +
+ "px",
+ cursor: "move"
+ });
+ }
+
+ if (X < t.left - This.$workArea[0].parentNode.scrollLeft)
+ X = t.left - This.$workArea[0].parentNode.scrollLeft;
+ else if (X + This.$workArea[0].parentNode.scrollLeft + This.$nodeData[id].width >
+ t.left + This.$workArea.width())
+ X = t.left +
+ This.$workArea.width() -
+ This.$workArea[0].parentNode.scrollLeft -
+ This.$nodeData[id].width;
+ if (Y < t.top - This.$workArea[0].parentNode.scrollTop)
+ Y = t.top - This.$workArea[0].parentNode.scrollTop;
+ else if (Y + This.$workArea[0].parentNode.scrollTop + This.$nodeData[id].height >
+ t.top + This.$workArea.height())
+ Y = t.top +
+ This.$workArea.height() -
+ This.$workArea[0].parentNode.scrollTop -
+ This.$nodeData[id].height;
+ This.$ghost.css({ left: X + hack + "px", top: Y + hack + "px" });
+ isMove = true;
+ }
+ document.onmouseup = function(e) {
+ if (isMove)
+ This.moveNode(id,
+ X + This.$workArea[0].parentNode.scrollLeft - t.left,
+ Y + This.$workArea[0].parentNode.scrollTop - t.top);
+ This.$ghost.empty().hide();
+ document.onmousemove = null;
+ document.onmouseup = null;
+ }
+ });
+ if (!this.$editable) return;
+ //绑定鼠标覆盖/移出事件
+ this.$workArea.delegate(".GooFlow_item",
+ "mouseenter",
+ { inthis: this },
+ function(e) {
+ if (e.data.inthis.$nowType != "direct") return;
+ $(this).addClass("item_mark");
+ });
+ this.$workArea.delegate(".GooFlow_item",
+ "mouseleave",
+ { inthis: this },
+ function(e) {
+ if (e.data.inthis.$nowType != "direct") return;
+ $(this).removeClass("item_mark");
+ });
+ //绑定连线时确定初始点
+ this.$workArea.delegate(".GooFlow_item",
+ "mousedown",
+ { inthis: this },
+ function(e) {
+ if (e.button == 2) return false;
+ var This = e.data.inthis;
+ if (This.$nowType != "direct") return;
+ var ev = mousePosition(e), t = getElCoordinate(This.$workArea[0]);
+ var X, Y;
+ X = ev.x - t.left + This.$workArea[0].parentNode.scrollLeft;
+ Y = ev.y - t.top + This.$workArea[0].parentNode.scrollTop;
+ This.$workArea.data("lineStart", { "x": X, "y": Y, "id": this.id }).css("cursor", "crosshair");
+ var line = GooFlow.prototype.drawLine("GooFlow_tmp_line", [X, Y], [X, Y], true, true);
+ This.$draw.appendChild(line);
+ });
+ //绑定连线时确定结束点
+ this.$workArea.delegate(".GooFlow_item",
+ "mouseup",
+ { inthis: this },
+ function(e) {
+ var This = e.data.inthis;
+ if (This.$nowType != "direct") return;
+ var lineStart = This.$workArea.data("lineStart");
+ if (lineStart)
+ This.addLine(This.$id + "_line_" + This.$max,
+ { from: lineStart.id, to: this.id, name: "" });
+ This.$max++;
+ });
+ //绑定双击编辑事件
+ this.$workArea.delegate(".GooFlow_item > .span",
+ "dblclick",
+ { inthis: this },
+ function(e) {
+ var This = e.data.inthis;
+ var type = $('.item_focus').hasClass('item_startround');
+ if (type) {
+ OpenNode(This);
+ }
+ //var oldTxt = this.innerHTML;
+ //var This = e.data.inthis;
+ //var id = this.parentNode.id;
+ //var t = getElCoordinate(This.$workArea[0]);
+ //This.$textArea.val(oldTxt).css({
+ // display: "block", height: $(this).height(), width: 100,
+ // left: t.left + This.$nodeData[id].left - This.$workArea[0].parentNode.scrollLeft - 24,
+ // top: t.top + This.$nodeData[id].top - This.$workArea[0].parentNode.scrollTop + 26
+ //})
+ // .data("id", This.$focus).focus();
+ //This.$workArea.parent().one("mousedown", function (e) {
+ // if (e.button == 2) return false;
+ // This.setName(This.$textArea.data("id"), This.$textArea.val(), "node");
+ // This.$textArea.val("").removeData("id").hide();
+ //});
+ });
+ //节点双击事件
+ this.$workArea.delegate(".ico + td",
+ "dblclick",
+ { inthis: this },
+ function(e) {
+ var This = e.data.inthis;
+ OpenNode(This);
+ //var oldTxt = this.innerHTML;
+ //var This = e.data.inthis;
+ //var id = $(this).parents(".GooFlow_item").attr("id");
+ //var t = getElCoordinate(This.$workArea[0]);
+ //This.$textArea.val(oldTxt).css({
+ // display: "block", width: $(this).width() + 24, height: $(this).height(),
+ // left: t.left + 24 + This.$nodeData[id].left - This.$workArea[0].parentNode.scrollLeft,
+ // top: t.top + 2 + This.$nodeData[id].top - This.$workArea[0].parentNode.scrollTop
+ //})
+ // .data("id", This.$focus).focus();
+ //This.$workArea.parent().one("mousedown", function (e) {
+ // if (e.button == 2) return false;
+ // This.setName(This.$textArea.data("id"), This.$textArea.val(), "node");
+ // This.$textArea.val("").removeData("id").hide();
+ //});
+ });
+ //绑定结点的删除功能
+ this.$workArea.delegate(".rs_close",
+ "click",
+ { inthis: this },
+ function(e) {
+ if (!e) e = window.event;
+ e.data.inthis.delNode(e.data.inthis.$focus);
+ return false;
+ });
+ //绑定结点的RESIZE功能
+ this.$workArea.delegate(".GooFlow_item > div > div[class!=rs_close]",
+ "mousedown",
+ { inthis: this },
+ function(e) {
+ if (!e) e = window.event;
+ if (e.button == 2) return false;
+ var cursor = $(this).css("cursor");
+ if (cursor == "pointer") {
+ return;
+ }
+ var This = e.data.inthis;
+ var id = This.$focus;
+ This.switchToolBtn("cursor");
+ e.cancelBubble = true;
+ e.stopPropagation();
+ var hack = 1;
+ if (navigator.userAgent.indexOf("8.0") != -1) hack = 0;
+ var ev = mousePosition(e), t = getElCoordinate(This.$workArea[0]);
+ This.$ghost.css({
+ display: "block",
+ width: This.$nodeData[id].width - 2 + "px",
+ height: This.$nodeData[id].height - 2 + "px",
+ top: This.$nodeData[id].top + t.top - This.$workArea[0].parentNode.scrollTop + hack + "px",
+ left: This.$nodeData[id].left +
+ t.left -
+ This.$workArea[0].parentNode.scrollLeft +
+ hack +
+ "px",
+ cursor: cursor
+ });
+ var X, Y;
+ X = ev.x - t.left + This.$workArea[0].parentNode.scrollLeft;
+ Y = ev.y - t.top + This.$workArea[0].parentNode.scrollTop;
+ var vX = (This.$nodeData[id].left + This.$nodeData[id].width) - X;
+ var vY = (This.$nodeData[id].top + This.$nodeData[id].height) - Y;
+ var isMove = false;
+ This.$ghost.css("cursor", cursor);
+ document.onmousemove = function(e) {
+ if (!e) e = window.event;
+ var ev = mousePosition(e);
+ X = ev.x - t.left + This.$workArea[0].parentNode.scrollLeft - This.$nodeData[id].left + vX;
+ Y = ev.y - t.top + This.$workArea[0].parentNode.scrollTop - This.$nodeData[id].top + vY;
+ if (X < 86) X = 86;
+ if (Y < 24) Y = 24;
+ isMove = true;
+ switch (cursor) {
+ case "nw-resize":
+ This.$ghost.css({ width: X - 2 + "px", height: Y - 2 + "px" });
+ break;
+ case "w-resize":
+ This.$ghost.css({ width: X - 2 + "px" });
+ break;
+ case "n-resize":
+ This.$ghost.css({ height: Y - 2 + "px" });
+ break;
+ }
+ }
+ document.onmouseup = function(e) {
+ This.$ghost.hide();
+ if (!isMove) return;
+ if (!e) e = window.event;
+ This.resizeNode(id, This.$ghost.outerWidth(), This.$ghost.outerHeight());
+ document.onmousemove = null;
+ document.onmouseup = null;
+ }
+ });
+ },
+ //获取结点/连线/分组区域的详细信息
+ getItemInfo: function(id, type) {
+ switch (type) {
+ case "node":
+ return this.$nodeData[id] || null;
+ case "line":
+ return this.$lineData[id] || null;
+ case "area":
+ return this.$areaData[id] || null;
+ }
+ },
+ //取消所有结点/连线被选定的状态
+ blurItem: function() {
+ if (this.$focus != "") {
+ var jq = $("#" + this.$focus);
+ if (jq.prop("tagName") == "DIV") {
+ if (this.onItemBlur != null && !this.onItemBlur(id, "node")) return false;
+ jq.removeClass("item_focus").children("div:eq(0)").css("display", "none");
+ } else {
+ if (this.onItemBlur != null && !this.onItemBlur(id, "line")) return false;
+ if (GooFlow.prototype.useSVG != "") {
+ if (!this.$lineData[this.$focus].marked) {
+ jq[0].childNodes[1].setAttribute("stroke", "gray");
+ jq[0].childNodes[1].setAttribute("marker-end", "url(#arrow1)");
+ }
+ } else {
+ if (!this.$lineData[this.$focus].marked) jq[0].strokeColor = "gray";
+ }
+ this.$lineMove.hide().removeData("type").removeData("tid");
+ if (this.$editable) this.$lineOper.hide().removeData("tid");
+ }
+ }
+ this.$focus = "";
+ return true;
+ },
+ //选定某个结点/转换线 bool:TRUE决定了要触发选中事件,FALSE则不触发选中事件,多用在程序内部调用。
+ focusItem: function(id, bool) {
+ var jq = $("#" + id);
+ if (jq.length == 0) return;
+ if (!this.blurItem()) return; //先执行"取消选中",如果返回FLASE,则也会阻止选定事件继续进行.
+ if (jq.prop("tagName") == "DIV") {
+ if (bool && this.onItemFocus != null && !this.onItemFocus(id, "node")) return;
+ jq.addClass("item_focus");
+ if (this.$editable) jq.children("div:eq(0)").css("display", "block");
+ this.$workArea.append(jq);
+ } else { //如果是连接线
+ if (this.onItemFocus != null && !this.onItemFocus(id, "line")) return;
+ if (GooFlow.prototype.useSVG != "") {
+ jq[0].childNodes[1].setAttribute("stroke", "#ff3300");
+ jq[0].childNodes[1].setAttribute("marker-end", "url(#arrow2)");
+ } else jq[0].strokeColor = "#ff3300";
+ if (!this.$editable) return;
+ var x, y, from, to;
+ if (GooFlow.prototype.useSVG != "") {
+ from = jq.attr("from").split(",");
+ to = jq.attr("to").split(",");
+ } else {
+ var n = jq[0].getAttribute("fromTo").split(",");
+ from = [n[0], n[1]];
+ to = [n[2], n[3]];
+ }
+ from[0] = parseInt(from[0], 10);
+ from[1] = parseInt(from[1], 10);
+ to[0] = parseInt(to[0], 10);
+ to[1] = parseInt(to[1], 10);
+ //var t=getElCoordinate(this.$workArea[0]);
+ if (this.$lineData[id].type == "lr") {
+ from[0] = this.$lineData[id].M;
+ to[0] = from[0];
+
+ this.$lineMove.css({
+ width: "5px",
+ height: (to[1] - from[1]) * (to[1] > from[1] ? 1 : -1) + "px",
+ left: from[0] - 3 + "px",
+ top: (to[1] > from[1] ? from[1] : to[1]) + 1 + "px",
+ cursor: "e-resize",
+ display: "block"
+ }).data({ "type": "lr", "tid": id });
+ } else if (this.$lineData[id].type == "tb") {
+ from[1] = this.$lineData[id].M;
+ to[1] = from[1];
+ this.$lineMove.css({
+ width: (to[0] - from[0]) * (to[0] > from[0] ? 1 : -1) + "px",
+ height: "5px",
+ left: (to[0] > from[0] ? from[0] : to[0]) + 1 + "px",
+ top: from[1] - 3 + "px",
+ cursor: "s-resize",
+ display: "block"
+ }).data({ "type": "tb", "tid": id });
+ }
+ x = (from[0] + to[0]) / 2 - 35;
+ y = (from[1] + to[1]) / 2 + 6;
+ this.$lineOper.css({ display: "block", left: x + "px", top: y + "px" }).data("tid", id);
+ }
+ this.$focus = id;
+ this.switchToolBtn("cursor");
+ },
+ //移动结点到一个新的位置
+ moveNode: function(id, left, top) {
+ if (!this.$nodeData[id]) return;
+ if (this.onItemMove != null && !this.onItemMove(id, "node", left, top)) return;
+ if (this.$undoStack) {
+ var paras = [id, this.$nodeData[id].left, this.$nodeData[id].top];
+ this.pushOper("moveNode", paras);
+ }
+ if (left < 0) left = 0;
+ if (top < 0) top = 0;
+ $("#" + id).css({ left: left + "px", top: top + "px" });
+ this.$nodeData[id].left = left;
+ this.$nodeData[id].top = top;
+ //重画转换线
+ this.resetLines(id, this.$nodeData[id]);
+ if (this.$editable) {
+ this.$nodeData[id].alt = true;
+ }
+ },
+ //设置结点/连线/分组区域的文字信息
+ setName: function(id, name, type, setinfo) {
+ var oldName;
+ if (type == "node") { //如果是结点
+ this.$nodeData[id].setInfo = setinfo;
+ if (!this.$nodeData[id])
+ if (this.$nodeData[id].name == name)
+ if (this.onItemRename != null && !this.onItemRename(id, name, "node"))
+ oldName = this.$nodeData[id].name;
+ this.$nodeData[id].name = name;
+ if (this.$nodeData[id].type.indexOf("round") > 1) {
+ this.$nodeDom[id].children(".span").text(name);
+ } else {
+ this.$nodeDom[id].find("td:eq(1)").text(name);
+ var hack = 0;
+ if (navigator.userAgent.indexOf("8.0") != -1) hack = 2;
+ var width = this.$nodeDom[id].outerWidth();
+ var height = this.$nodeDom[id].outerHeight();
+ this.$nodeDom[id].children("table").css({ width: width - 2 + "px", height: height - 2 + "px" });
+ this.$nodeData[id].width = width;
+ this.$nodeData[id].height = height;
+ }
+ if (this.$editable) {
+ this.$nodeData[id].alt = true;
+ }
+ //重画转换线
+ this.resetLines(id, this.$nodeData[id]);
+ } else if (type == "line") { //如果是线
+ this.$lineData[id].setInfo = setinfo;
+ if (!this.$lineData[id])
+ if (this.$lineData[id].name == name)
+ if (this.onItemRename != null && !this.onItemRename(id, name, "line"))
+ oldName = this.$lineData[id].name;
+ this.$lineData[id].name = name;
+ if (GooFlow.prototype.useSVG != "") {
+ this.$lineDom[id].childNodes[2].textContent = name;
+ } else {
+ this.$lineDom[id].childNodes[1].innerHTML = name;
+ var n = this.$lineDom[id].getAttribute("fromTo").split(",");
+ var x;
+ if (this.$lineData[id].type != "lr") {
+ x = (n[2] - n[0]) / 2;
+ } else {
+ var Min = n[2] > n[0] ? n[0] : n[2];
+ if (Min > this.$lineData[id].M) Min = this.$lineData[id].M;
+ x = this.$lineData[id].M - Min;
+ }
+ if (x < 0) x = x * -1;
+ this.$lineDom[id].childNodes[1].style.left =
+ x - this.$lineDom[id].childNodes[1].offsetWidth / 2 + 4 + "px";
+ }
+ if (this.$editable) {
+ this.$lineData[id].alt = true;
+ }
+ } else if (type == "area") { //如果是分组区域
+ if (!this.$areaData[id]) return;
+ if (this.$areaData[id].name == name) return;
+ if (this.onItemRename != null && !this.onItemRename(id, name, "area")) return;
+ oldName = this.$areaData[id].name;
+ this.$areaData[id].name = name;
+ this.$areaDom[id].children("label").text(name);
+ if (this.$editable) {
+ this.$areaData[id].alt = true;
+ }
+ }
+ if (this.$undoStack) {
+ var paras = [id, oldName, type];
+ this.pushOper("setName", paras);
+ }
+ },
+ //设置结点的尺寸,仅支持非开始/结束结点
+ resizeNode: function(id, width, height) {
+ if (!this.$nodeData[id]) return;
+ if (this.onItemResize != null && !this.onItemResize(id, "node", width, height)) return;
+ if (this.$nodeData[id].type == "start" || this.$nodeData[id].type == "end") return;
+ if (this.$undoStack) {
+ var paras = [id, this.$nodeData[id].width, this.$nodeData[id].height];
+ this.pushOper("resizeNode", paras);
+ }
+ var hack = 0;
+ if (navigator.userAgent.indexOf("8.0") != -1) hack = 2;
+ this.$nodeDom[id].children("table").css({ width: width - 2 + "px", height: height - 2 + "px" });
+ width = this.$nodeDom[id].outerWidth() - hack;
+ height = this.$nodeDom[id].outerHeight() - hack;
+ this.$nodeDom[id].children("table").css({ width: width - 2 + "px", height: height - 2 + "px" });
+ this.$nodeData[id].width = width;
+ this.$nodeData[id].height = height;
+ if (this.$editable) {
+ this.$nodeData[id].alt = true;
+ }
+ //重画转换线
+ this.resetLines(id, this.$nodeData[id]);
+ },
+ //删除结点
+ delNode: function(id) {
+ if (!this.$nodeData[id]) return;
+ if (this.onItemDel != null && !this.onItemDel(id, "node")) return;
+ //先删除可能的连线
+ for (var k in this.$lineData) {
+ if (this.$lineData[k].from == id || this.$lineData[k].to == id) {
+ //this.$draw.removeChild(this.$lineDom[k]);
+ //delete this.$lineData[k];
+ //delete this.$lineDom[k];
+ this.delLine(k);
+ }
+ }
+ //再删除结点本身
+ if (this.$undoStack) {
+ var paras = [id, this.$nodeData[id]];
+ this.pushOper("addNode", paras);
+ }
+ delete this.$nodeData[id];
+ this.$nodeDom[id].remove();
+ delete this.$nodeDom[id];
+ --this.$nodeCount;
+ if (this.$focus == id) this.$focus = "";
+
+ if (this.$editable) {
+ //在回退新增操作时,如果节点ID以this.$id+"_node_"开头,则表示为本次编辑时新加入的节点,这些节点的删除不用加入到$deletedItem中
+ if (id.indexOf(this.$id + "_node_") < 0)
+ this.$deletedItem[id] = "node";
+ }
+ },
+ //设置流程图的名称
+ setTitle: function(text) {
+ this.$title = text;
+ if (this.$head) this.$head.children("label").attr("title", text).text(text);
+ },
+ //载入一组数据
+ loadData: function(data) {
+ if (data == undefined) {
+ data = "";
+ }
+ var t = this.$editable;
+ this.$editable = false;
+ if (data.title) this.setTitle(data.title);
+ if (data.initNum) this.$max = data.initNum;
+ for (var i in data.nodes)
+ this.addNode(data.nodes[i].id, data.nodes[i]);
+ for (var j in data.lines)
+ this.addLine(data.lines[j].id, data.lines[j]);
+ for (var k in data.areas)
+ this.addArea(data.areas[k].id, data.areas[k]);
+ this.$editable = t;
+ this.$deletedItem = {};
+ },
+ //用AJAX方式,远程读取一组数据
+ //参数para为JSON结构,与JQUERY中$.ajax()方法的传参一样
+ loadDataAjax: function(para) {
+ var This = this;
+ $.ajax({
+ type: para.type,
+ url: para.url,
+ dataType: "json",
+ data: para.data,
+ success: function(msg) {
+ if (para.dataFilter) para.dataFilter(msg, "json");
+ This.loadData(msg);
+ if (para.success) para.success(msg);
+ },
+ error: function(XMLHttpRequest, textStatus, errorThrown) {
+ if (para.error) para.error(textStatus, errorThrown);
+ }
+ })
+ },
+ //把画好的整个流程图导出到一个变量中(其实也可以直接访问GooFlow对象的$nodeData,$lineData,$areaData这三个JSON属性)
+ exportData: function() {
+ var ret = {
+ title: this.$title,
+ nodes: this.$nodeData,
+ lines: this.$lineData,
+ areas: this.$areaData,
+ initNum: this.$max
+ };
+
+ var _nodeobject = [], _lineobject = [];
+ for (var k1 in ret.nodes) {
+ if (!ret.nodes[k1].marked) {
+ delete ret.nodes[k1]["marked"];
+ }
+ ret.nodes[k1]["id"] = k1;
+ _nodeobject.push(ret.nodes[k1]);
+ }
+ ret.nodes = _nodeobject;
+ for (var k2 in ret.lines) {
+ if (!ret.lines[k2].marked) {
+ delete ret.lines[k2]["marked"];
+ }
+ ret.lines[k2]["id"] = k2;
+ _lineobject.push(ret.lines[k2]);
+ }
+ ret.lines = _lineobject;
+ return ret;
+ },
+ //只把本次编辑流程图中作了变更(包括增删改)的元素导出到一个变量中,以方便用户每次编辑载入的流程图后只获取变更过的数据
+ exportAlter: function() {
+ var ret = { nodes: {}, lines: {}, areas: {} };
+ for (var k1 in this.$nodeData) {
+ if (this.$nodeData[k1].alt) {
+ ret.nodes[k1] = this.$nodeData[k1];
+ }
+ }
+ for (var k2 in this.$lineData) {
+ if (this.$lineData[k2].alt) {
+ ret.lines[k2] = this.$lineData[k2];
+ }
+ }
+ for (var k3 in this.$areaData) {
+ if (this.$areaData[k3].alt) {
+ ret.areas[k3] = this.$areaData[k3];
+ }
+ }
+ ret.deletedItem = this.$deletedItem;
+ return ret;
+ },
+ //变更元素的ID,一般用于快速保存后,将后台返回新元素的ID更新到页面中;type为元素类型(节点,连线,区块)
+ transNewId: function(oldId, newId, type) {
+ var tmp;
+ switch (type) {
+ case "node":
+ if (this.$nodeData[oldId]) {
+ tmp = this.$nodeData[oldId];
+ delete this.$nodeData[oldId];
+ this.$nodeData[newId] = tmp;
+ }
+ break;
+ case "line":
+ if (this.$lineData[oldId]) {
+ tmp = this.$lineData[oldId];
+ delete this.$lineData[oldId];
+ this.$lineData[newId] = tmp;
+ }
+ break;
+ case "area":
+ if (this.$areaData[oldId]) {
+ tmp = this.$areaData[oldId];
+ delete this.$areaData[oldId];
+ this.$areaData[newId] = tmp;
+ }
+ break;
+ }
+ },
+ //清空工作区及已载入的数据
+ clearData: function() {
+ for (var key in this.$nodeData) {
+ this.delNode(key);
+ }
+ for (var key in this.$lineData) {
+ this.delLine(key);
+ }
+ for (var key in this.$areaData) {
+ this.delArea(key);
+ }
+ this.$deletedItem = {};
+ },
+ //销毁自己
+ destrory: function() {
+ this.$bgDiv.empty();
+ this.$lineData = null;
+ this.$nodeData = null;
+ this.$lineDom = null;
+ this.$nodeDom = null;
+ this.$areaDom = null;
+ this.$areaData = null;
+ this.$nodeCount = 0;
+ this.$areaCount = 0;
+ this.$areaCount = 0;
+ this.$deletedItem = {};
+ },
+ ///////////以下为有关画线的方法
+ //绘制一条箭头线,并返回线的DOM
+ drawLine: function(id, sp, ep, mark, dash) {
+ var line;
+ if (GooFlow.prototype.useSVG != "") {
+ line = document.createElementNS("http://www.w3.org/2000/svg", "g");
+ var hi = document.createElementNS("http://www.w3.org/2000/svg", "path");
+ var path = document.createElementNS("http://www.w3.org/2000/svg", "path");
+
+ if (id != "") line.setAttribute("id", id);
+ line.setAttribute("from", sp[0] + "," + sp[1]);
+ line.setAttribute("to", ep[0] + "," + ep[1]);
+ hi.setAttribute("visibility", "hidden");
+ hi.setAttribute("stroke-width", 9);
+ hi.setAttribute("fill", "none");
+ hi.setAttribute("stroke", "white");
+ hi.setAttribute("d", "M " + sp[0] + " " + sp[1] + " L " + ep[0] + " " + ep[1]);
+ hi.setAttribute("pointer-events", "stroke");
+ path.setAttribute("d", "M " + sp[0] + " " + sp[1] + " L " + ep[0] + " " + ep[1]);
+ path.setAttribute("stroke-width", 2.0);
+ path.setAttribute("stroke-linecap", "round");
+ path.setAttribute("fill", "none");
+ if (dash) path.setAttribute("style", "stroke-dasharray:6,5");
+ if (mark) {
+ path.setAttribute("stroke", "#ff3300");
+ path.setAttribute("marker-end", "url(#arrow2)");
+ } else {
+ path.setAttribute("stroke", "gray");
+ path.setAttribute("marker-end", "url(#arrow1)");
+ }
+ line.appendChild(hi);
+ line.appendChild(path);
+ line.style.cursor = "crosshair";
+ if (id != "" && id != "GooFlow_tmp_line") {
+ var text = document.createElementNS("http://www.w3.org/2000/svg", "text");
+ //text.textContent=id;
+ line.appendChild(text);
+ var x = (ep[0] + sp[0]) / 2;
+ var y = (ep[1] + sp[1]) / 2;
+ text.setAttribute("text-anchor", "middle");
+ text.setAttribute("x", x);
+ text.setAttribute("y", y - 5);
+ line.style.cursor = "pointer";
+ text.style.cursor = "text";
+ }
+ } else {
+ line = document.createElement("v:polyline");
+ if (id != "") line.id = id;
+ //line.style.position="absolute";
+ line.points.value = sp[0] + "," + sp[1] + " " + ep[0] + "," + ep[1];
+ line.setAttribute("fromTo", sp[0] + "," + sp[1] + "," + ep[0] + "," + ep[1]);
+ line.strokeWeight = "1.2";
+ line.stroke.EndArrow = "Block";
+ line.style.cursor = "crosshair";
+ if (id != "" && id != "GooFlow_tmp_line") {
+ var text = document.createElement("div");
+ //text.innerHTML=id;
+ line.appendChild(text);
+ var x = (ep[0] - sp[0]) / 2;
+ var y = (ep[1] - sp[1]) / 2;
+ if (x < 0) x = x * -1;
+ if (y < 0) y = y * -1;
+ text.style.left = x + "px";
+ text.style.top = y - 6 + "px";
+ line.style.cursor = "pointer";
+ }
+ if (dash) line.stroke.dashstyle = "Dash";
+ if (mark) line.strokeColor = "#ff3300";
+ else line.strokeColor = "gray";
+ }
+ return line;
+ },
+ //画一条只有两个中点的折线
+ drawPoly: function(id, sp, m1, m2, ep, mark) {
+ var poly, strPath;
+ if (GooFlow.prototype.useSVG != "") {
+ poly = document.createElementNS("http://www.w3.org/2000/svg", "g");
+ var hi = document.createElementNS("http://www.w3.org/2000/svg", "path");
+ var path = document.createElementNS("http://www.w3.org/2000/svg", "path");
+ if (id != "") poly.setAttribute("id", id);
+ poly.setAttribute("from", sp[0] + "," + sp[1]);
+ poly.setAttribute("to", ep[0] + "," + ep[1]);
+ hi.setAttribute("visibility", "hidden");
+ hi.setAttribute("stroke-width", 9);
+ hi.setAttribute("fill", "none");
+ hi.setAttribute("stroke", "white");
+ strPath = "M " + sp[0] + " " + sp[1];
+ if (m1[0] != sp[0] || m1[1] != sp[1])
+ strPath += " L " + m1[0] + " " + m1[1];
+ if (m2[0] != ep[0] || m2[1] != ep[1])
+ strPath += " L " + m2[0] + " " + m2[1];
+ strPath += " L " + ep[0] + " " + ep[1];
+ hi.setAttribute("d", strPath);
+ hi.setAttribute("pointer-events", "stroke");
+ path.setAttribute("d", strPath);
+ path.setAttribute("stroke-width", 2.0);
+ path.setAttribute("stroke-linecap", "round");
+ path.setAttribute("fill", "none");
+ if (mark) {
+ path.setAttribute("stroke", "#ff3300");
+ path.setAttribute("marker-end", "url(#arrow2)");
+ } else {
+ path.setAttribute("stroke", "gray");
+ path.setAttribute("marker-end", "url(#arrow1)");
+ }
+ poly.appendChild(hi);
+ poly.appendChild(path);
+ var text = document.createElementNS("http://www.w3.org/2000/svg", "text");
+ //text.textContent=id;
+ poly.appendChild(text);
+ var x = (m2[0] + m1[0]) / 2;
+ var y = (m2[1] + m1[1]) / 2;
+ text.setAttribute("text-anchor", "middle");
+ text.setAttribute("x", x);
+ text.setAttribute("y", y - 5);
+ text.style.cursor = "text";
+ poly.style.cursor = "pointer";
+ } else {
+ poly = document.createElement("v:Polyline");
+ if (id != "") poly.id = id;
+ poly.filled = "false";
+ strPath = sp[0] + "," + sp[1];
+ if (m1[0] != sp[0] || m1[1] != sp[1])
+ strPath += " " + m1[0] + "," + m1[1];
+ if (m2[0] != ep[0] || m2[1] != ep[1])
+ strPath += " " + m2[0] + "," + m2[1];
+ strPath += " " + ep[0] + "," + ep[1];
+ poly.points.value = strPath;
+ poly.setAttribute("fromTo", sp[0] + "," + sp[1] + "," + ep[0] + "," + ep[1]);
+ poly.strokeWeight = "1.2";
+ poly.stroke.EndArrow = "Block";
+ var text = document.createElement("div");
+ //text.innerHTML=id;
+ poly.appendChild(text);
+ var x = (m2[0] - m1[0]) / 2;
+ var y = (m2[1] - m1[1]) / 2;
+ if (x < 0) x = x * -1;
+ if (y < 0) y = y * -1;
+ text.style.left = x + "px";
+ text.style.top = y - 4 + "px";
+ poly.style.cursor = "pointer";
+ if (mark) poly.strokeColor = "#ff3300";
+ else poly.strokeColor = "gray";
+ }
+ return poly;
+ },
+ //计算两个结点间要连直线的话,连线的开始坐标和结束坐标
+ calcStartEnd: function(n1, n2) {
+ var X_1, Y_1, X_2, Y_2;
+ //X判断:
+ var x11 = n1.left, x12 = n1.left + n1.width, x21 = n2.left, x22 = n2.left + n2.width;
+ //结点2在结点1左边
+ if (x11 >= x22) {
+ X_1 = x11;
+ X_2 = x22;
+ }
+ //结点2在结点1右边
+ else if (x12 <= x21) {
+ X_1 = x12;
+ X_2 = x21;
+ }
+ //结点2在结点1水平部分重合
+ else if (x11 <= x21 && x12 >= x21 && x12 <= x22) {
+ X_1 = (x12 + x21) / 2;
+ X_2 = X_1;
+ } else if (x11 >= x21 && x12 <= x22) {
+ X_1 = (x11 + x12) / 2;
+ X_2 = X_1;
+ } else if (x21 >= x11 && x22 <= x12) {
+ X_1 = (x21 + x22) / 2;
+ X_2 = X_1;
+ } else if (x11 <= x22 && x12 >= x22) {
+ X_1 = (x11 + x22) / 2;
+ X_2 = X_1;
+ }
+
+ //Y判断:
+ var y11 = n1.top, y12 = n1.top + n1.height, y21 = n2.top, y22 = n2.top + n2.height;
+ //结点2在结点1上边
+ if (y11 >= y22) {
+ Y_1 = y11;
+ Y_2 = y22;
+ }
+ //结点2在结点1下边
+ else if (y12 <= y21) {
+ Y_1 = y12;
+ Y_2 = y21;
+ }
+ //结点2在结点1垂直部分重合
+ else if (y11 <= y21 && y12 >= y21 && y12 <= y22) {
+ Y_1 = (y12 + y21) / 2;
+ Y_2 = Y_1;
+ } else if (y11 >= y21 && y12 <= y22) {
+ Y_1 = (y11 + y12) / 2;
+ Y_2 = Y_1;
+ } else if (y21 >= y11 && y22 <= y12) {
+ Y_1 = (y21 + y22) / 2;
+ Y_2 = Y_1;
+ } else if (y11 <= y22 && y12 >= y22) {
+ Y_1 = (y11 + y22) / 2;
+ Y_2 = Y_1;
+ }
+ return { "start": [X_1, Y_1], "end": [X_2, Y_2] };
+ },
+ //计算两个结点间要连折线的话,连线的所有坐标
+ calcPolyPoints: function(n1, n2, type, M) {
+ //开始/结束两个结点的中心
+ var SP = { x: n1.left + n1.width / 2, y: n1.top + n1.height / 2 };
+ var EP = { x: n2.left + n2.width / 2, y: n2.top + n2.height / 2 };
+ var sp = [], m1 = [], m2 = [], ep = [];
+ //如果是允许中段可左右移动的折线,则参数M为可移动中段线的X坐标
+ //粗略计算起始点
+ sp = [SP.x, SP.y];
+ ep = [EP.x, EP.y];
+ if (type == "lr") {
+ //粗略计算2个中点
+ m1 = [M, SP.y];
+ m2 = [M, EP.y];
+ //再具体分析修改开始点和中点1
+ if (m1[0] > n1.left && m1[0] < n1.left + n1.width) {
+ m1[1] = (SP.y > EP.y ? n1.top : n1.top + n1.height);
+ sp[0] = m1[0];
+ sp[1] = m1[1];
+ } else {
+ sp[0] = (m1[0] < n1.left ? n1.left : n1.left + n1.width)
+ }
+ //再具体分析中点2和结束点
+ if (m2[0] > n2.left && m2[0] < n2.left + n2.width) {
+ m2[1] = (SP.y > EP.y ? n2.top + n2.height : n2.top);
+ ep[0] = m2[0];
+ ep[1] = m2[1];
+ } else {
+ ep[0] = (m2[0] < n2.left ? n2.left : n2.left + n2.width)
+ }
+ }
+ //如果是允许中段可上下移动的折线,则参数M为可移动中段线的Y坐标
+ else if (type == "tb") {
+ //粗略计算2个中点
+ m1 = [SP.x, M];
+ m2 = [EP.x, M];
+ //再具体分析修改开始点和中点1
+ if (m1[1] > n1.top && m1[1] < n1.top + n1.height) {
+ m1[0] = (SP.x > EP.x ? n1.left : n1.left + n1.width);
+ sp[0] = m1[0];
+ sp[1] = m1[1];
+ } else {
+ sp[1] = (m1[1] < n1.top ? n1.top : n1.top + n1.height)
+ }
+ //再具体分析中点2和结束点
+ if (m2[1] > n2.top && m2[1] < n2.top + n2.height) {
+ m2[0] = (SP.x > EP.x ? n2.left + n2.width : n2.left);
+ ep[0] = m2[0];
+ ep[1] = m2[1];
+ } else {
+ ep[1] = (m2[1] < n2.top ? n2.top : n2.top + n2.height);
+ }
+ }
+ return { start: sp, m1: m1, m2: m2, end: ep };
+ },
+ //初始化折线中段的X/Y坐标,mType='rb'时为X坐标,mType='tb'时为Y坐标
+ getMValue: function(n1, n2, mType) {
+ if (mType == "lr") {
+ return (n1.left + n1.width / 2 + n2.left + n2.width / 2) / 2;
+ } else if (mType == "tb") {
+ return (n1.top + n1.height / 2 + n2.top + n2.height / 2) / 2;
+ }
+ },
+ //增加一条线
+ addLine: function(id, json) {
+ if (this.onItemAdd != null && !this.onItemAdd(id, "line", json)) return;
+ if (this.$undoStack && this.$editable) {
+ this.pushOper("delLine", [id]);
+ }
+ var n1 = null, n2 = null; //获取开始/结束结点的数据
+ if (json.from == json.to) return;
+ //避免两个节点间不能有一条以上同向接连线
+ for (var k in this.$lineData) {
+ if ((json.from == this.$lineData[k].from && json.to == this.$lineData[k].to))
+ return;
+ }
+ var n1 = this.$nodeData[json.from], n2 = this.$nodeData[json.to]; //获取开始/结束结点的数据
+ if (!n1 || !n2) return;
+ var res;
+ if (json.type && json.type != "sl")
+ res = GooFlow.prototype.calcPolyPoints(n1, n2, json.type, json.M);
+ else
+ res = GooFlow.prototype.calcStartEnd(n1, n2);
+ if (!res) return;
+ this.$lineData[id] = {};
+ this.$lineData[id].setInfo = json.setInfo;
+ this.$lineData[id].id = json.id;
+ if (json.type) {
+ this.$lineData[id].type = json.type;
+ this.$lineData[id].M = json.M;
+ } else this.$lineData[id].type = "sl"; //默认为直线
+ this.$lineData[id].from = json.from;
+ this.$lineData[id].to = json.to;
+ this.$lineData[id].name = json.name;
+ if (json.mark) this.$lineData[id].marked = json.mark;
+ else this.$lineData[id].marked = false;
+
+ if (this.$lineData[id].type == "sl")
+ this.$lineDom[id] = GooFlow.prototype.drawLine(id, res.start, res.end, json.mark);
+ else
+ this.$lineDom[id] = GooFlow.prototype.drawPoly(id, res.start, res.m1, res.m2, res.end, json.mark);
+ this.$draw.appendChild(this.$lineDom[id]);
+ if (GooFlow.prototype.useSVG == "") {
+ this.$lineDom[id].childNodes[1].innerHTML = json.name;
+ if (this.$lineData[id].type != "sl") {
+ var Min = (res.start[0] > res.end[0] ? res.end[0] : res.start[0]);
+ if (Min > res.m2[0]) Min = res.m2[0];
+ if (Min > res.m1[0]) Min = res.m1[0];
+ this.$lineDom[id].childNodes[1].style.left = (res.m2[0] + res.m1[0]) / 2 -
+ Min -
+ this.$lineDom[id].childNodes[1].offsetWidth / 2 +
+ 4;
+ Min = (res.start[1] > res.end[1] ? res.end[1] : res.start[1]);
+ if (Min > res.m2[1]) Min = res.m2[1];
+ if (Min > res.m1[1]) Min = res.m1[1];
+ this.$lineDom[id].childNodes[1].style.top = (res.m2[1] + res.m1[1]) / 2 -
+ Min -
+ this.$lineDom[id].childNodes[1].offsetHeight / 2;
+ } else
+ this.$lineDom[id].childNodes[1].style.left =
+ ((res.end[0] - res.start[0]) * (res.end[0] > res.start[0] ? 1 : -1) -
+ this.$lineDom[id].childNodes[1].offsetWidth) /
+ 2 +
+ 4;
+ } else this.$lineDom[id].childNodes[2].textContent = json.name;
+ ++this.$lineCount;
+ if (this.$editable) {
+ this.$lineData[id].alt = true;
+ if (this.$deletedItem[id]) delete this.$deletedItem[id]; //在回退删除操作时,去掉该元素的删除记录
+ }
+ },
+ //重构所有连向某个结点的线的显示,传参结构为$nodeData数组的一个单元结构
+ resetLines: function(id, node) {
+ for (var i in this.$lineData) {
+ var other = null; //获取结束/开始结点的数据
+ var res;
+ if (this.$lineData[i].from == id) { //找结束点
+ other = this.$nodeData[this.$lineData[i].to] || null;
+ if (other == null) continue;
+ if (this.$lineData[i].type == "sl")
+ res = GooFlow.prototype.calcStartEnd(node, other);
+ else
+ res = GooFlow.prototype.calcPolyPoints(node,
+ other,
+ this.$lineData[i].type,
+ this.$lineData[i].M)
+ if (!res) break;
+ } else if (this.$lineData[i].to == id) { //找开始点
+ other = this.$nodeData[this.$lineData[i].from] || null;
+ if (other == null) continue;
+ if (this.$lineData[i].type == "sl")
+ res = GooFlow.prototype.calcStartEnd(other, node);
+ else
+ res = GooFlow.prototype.calcPolyPoints(other,
+ node,
+ this.$lineData[i].type,
+ this.$lineData[i].M);
+ if (!res) break;
+ }
+ if (other == null) continue;
+ this.$draw.removeChild(this.$lineDom[i]);
+ if (this.$lineData[i].type == "sl") {
+ this.$lineDom[i] = GooFlow.prototype.drawLine(i, res.start, res.end, this.$lineData[i].marked);
+ } else {
+ this.$lineDom[i] =
+ GooFlow.prototype.drawPoly(i, res.start, res.m1, res.m2, res.end, this.$lineData[i].marked);
+ }
+ this.$draw.appendChild(this.$lineDom[i]);
+ if (GooFlow.prototype.useSVG == "") {
+ this.$lineDom[i].childNodes[1].innerHTML = this.$lineData[i].name;
+ if (this.$lineData[i].type != "sl") {
+ var Min = (res.start[0] > res.end[0] ? res.end[0] : res.start[0]);
+ if (Min > res.m2[0]) Min = res.m2[0];
+ if (Min > res.m1[0]) Min = res.m1[0];
+ this.$lineDom[i].childNodes[1].style.left = (res.m2[0] + res.m1[0]) / 2 -
+ Min -
+ this.$lineDom[i].childNodes[1].offsetWidth / 2 +
+ 4;
+ Min = (res.start[1] > res.end[1] ? res.end[1] : res.start[1]);
+ if (Min > res.m2[1]) Min = res.m2[1];
+ if (Min > res.m1[1]) Min = res.m1[1];
+ this.$lineDom[i].childNodes[1].style.top = (res.m2[1] + res.m1[1]) / 2 -
+ Min -
+ this.$lineDom[i].childNodes[1].offsetHeight / 2 -
+ 4;
+ } else
+ this.$lineDom[i].childNodes[1].style.left =
+ ((res.end[0] - res.start[0]) * (res.end[0] > res.start[0] ? 1 : -1) -
+ this.$lineDom[i].childNodes[1].offsetWidth) /
+ 2 +
+ 4;
+ } else this.$lineDom[i].childNodes[2].textContent = this.$lineData[i].name;
+ }
+ },
+ //重新设置连线的样式 newType= "sl":直线, "lr":中段可左右移动型折线, "tb":中段可上下移动型折线
+ setLineType: function(id, newType) {
+ if (!newType || newType == null || newType == "" || newType == this.$lineData[id].type) return false;
+ if (this.onLineSetType != null && !this.onLineSetType(id, newType)) return;
+ if (this.$undoStack) {
+ var paras = [id, this.$lineData[id].type];
+ this.pushOper("setLineType", paras);
+ if (this.$lineData[id].type != "sl") {
+ var para2 = [id, this.$lineData[id].M];
+ this.pushOper("setLineM", para2);
+ }
+ }
+ var from = this.$lineData[id].from;
+ var to = this.$lineData[id].to;
+ this.$lineData[id].type = newType;
+ var res;
+ //如果是变成折线
+ if (newType != "sl") {
+ var res = GooFlow.prototype.calcPolyPoints(this.$nodeData[from],
+ this.$nodeData[to],
+ this.$lineData[id].type,
+ this.$lineData[id].M);
+ this.setLineM(id, this.getMValue(this.$nodeData[from], this.$nodeData[to], newType), true);
+ }
+ //如果是变回直线
+ else {
+ delete this.$lineData[id].M;
+ this.$lineMove.hide().removeData("type").removeData("tid");
+ res = GooFlow.prototype.calcStartEnd(this.$nodeData[from], this.$nodeData[to]);
+ if (!res) return;
+ this.$draw.removeChild(this.$lineDom[id]);
+ this.$lineDom[id] = GooFlow.prototype.drawLine(id,
+ res.start,
+ res.end,
+ this.$lineData[id].marked || this.$focus == id);
+ this.$draw.appendChild(this.$lineDom[id]);
+ if (GooFlow.prototype.useSVG == "") {
+ this.$lineDom[id].childNodes[1].innerHTML = this.$lineData[id].name;
+ this.$lineDom[id].childNodes[1].style.left =
+ ((res.end[0] - res.start[0]) * (res.end[0] > res.start[0] ? 1 : -1) -
+ this.$lineDom[id].childNodes[1].offsetWidth) /
+ 2 +
+ 4;
+ } else
+ this.$lineDom[id].childNodes[2].textContent = this.$lineData[id].name;
+ }
+ if (this.$focus == id) {
+ this.focusItem(id);
+ }
+ if (this.$editable) {
+ this.$lineData[id].alt = true;
+ }
+ },
+ //设置折线中段的X坐标值(可左右移动时)或Y坐标值(可上下移动时)
+ setLineM: function(id, M, noStack) {
+ if (!this.$lineData[id] || M < 0 || !this.$lineData[id].type || this.$lineData[id].type == "sl")
+ return false;
+ if (this.onLineMove != null && !this.onLineMove(id, M)) return false;
+ if (this.$undoStack && !noStack) {
+ var paras = [id, this.$lineData[id].M];
+ this.pushOper("setLineM", paras);
+ }
+ var from = this.$lineData[id].from;
+ var to = this.$lineData[id].to;
+ this.$lineData[id].M = M;
+ var ps = GooFlow.prototype.calcPolyPoints(this.$nodeData[from],
+ this.$nodeData[to],
+ this.$lineData[id].type,
+ this.$lineData[id].M);
+ this.$draw.removeChild(this.$lineDom[id]);
+ this.$lineDom[id] = GooFlow.prototype.drawPoly(id,
+ ps.start,
+ ps.m1,
+ ps.m2,
+ ps.end,
+ this.$lineData[id].marked || this.$focus == id);
+ this.$draw.appendChild(this.$lineDom[id]);
+ if (GooFlow.prototype.useSVG == "") {
+ this.$lineDom[id].childNodes[1].innerHTML = this.$lineData[id].name;
+ var Min = (ps.start[0] > ps.end[0] ? ps.end[0] : ps.start[0]);
+ if (Min > ps.m2[0]) Min = ps.m2[0];
+ if (Min > ps.m1[0]) Min = ps.m1[0];
+ this.$lineDom[id].childNodes[1].style.left = (ps.m2[0] + ps.m1[0]) / 2 -
+ Min -
+ this.$lineDom[id].childNodes[1].offsetWidth / 2 +
+ 4;
+ Min = (ps.start[1] > ps.end[1] ? ps.end[1] : ps.start[1]);
+ if (Min > ps.m2[1]) Min = ps.m2[1];
+ if (Min > ps.m1[1]) Min = ps.m1[1];
+ this.$lineDom[id].childNodes[1].style.top = (ps.m2[1] + ps.m1[1]) / 2 -
+ Min -
+ this.$lineDom[id].childNodes[1].offsetHeight / 2 -
+ 4;
+ } else this.$lineDom[id].childNodes[2].textContent = this.$lineData[id].name;
+ if (this.$editable) {
+ this.$lineData[id].alt = true;
+ }
+ },
+ //删除转换线
+ delLine: function(id) {
+ if (!this.$lineData[id]) return;
+ if (this.onItemDel != null && !this.onItemDel(id, "node")) return;
+ if (this.$undoStack) {
+ var paras = [id, this.$lineData[id]];
+ this.pushOper("addLine", paras);
+ }
+ this.$draw.removeChild(this.$lineDom[id]);
+ delete this.$lineData[id];
+ delete this.$lineDom[id];
+ if (this.$focus == id) this.$focus = "";
+ --this.$lineCount;
+ if (this.$editable) {
+ //在回退新增操作时,如果节点ID以this.$id+"_line_"开头,则表示为本次编辑时新加入的节点,这些节点的删除不用加入到$deletedItem中
+ if (id.indexOf(this.$id + "_line_") < 0)
+ this.$deletedItem[id] = "line";
+ }
+ this.$lineOper.hide();
+ },
+ //用颜色标注/取消标注一个结点或转换线,常用于显示重点或流程的进度。
+ //这是一个在编辑模式中无用,但是在纯浏览模式中非常有用的方法,实际运用中可用于跟踪流程的进度。
+ markItem: function(id, type, mark) {
+ if (type == "node") {
+ if (!this.$nodeData[id]) return;
+ if (this.onItemMark != null && !this.onItemMark(id, "node", mark)) return;
+ this.$nodeData[id].marked = mark || false;
+ if (mark) this.$nodeDom[id].addClass("item_mark");
+ else this.$nodeDom[id].removeClass("item_mark");
+
+ } else if (type == "line") {
+ if (!this.$lineData[id]) return;
+ if (this.onItemMark != null && !this.onItemMark(id, "line", mark)) return;
+ this.$lineData[id].marked = mark || false;
+ if (GooFlow.prototype.useSVG != "") {
+ if (mark) {
+ this.$nodeDom[id].childNodes[1].setAttribute("stroke", "#ff3300");
+ this.$nodeDom[id].childNodes[1].setAttribute("marker-end", "url(#arrow2)");
+ } else {
+ this.$nodeDom[id].childNodes[1].setAttribute("stroke", "gray");
+ this.$nodeDom[id].childNodes[1].setAttribute("marker-end", "url(#arrow1)");
+ }
+ } else {
+ if (mark) this.$nodeDom[id].strokeColor = "#ff3300";
+ else this.$nodeDom[id].strokeColor = "gray"
+ }
+ }
+ if (this.$undoStatck) {
+ var paras = [id, type, !mark];
+ this.pushOper("markItem", paras);
+ }
+ },
+ ////////////////////////以下为区域分组块操作
+ moveArea: function(id, left, top) {
+ if (!this.$areaData[id]) return;
+ if (this.onItemMove != null && !this.onItemMove(id, "area", left, top)) return;
+ if (this.$undoStack) {
+ var paras = [id, this.$areaData[id].left, this.$areaData[id].top];
+ this.pushOper("moveNode", paras);
+ }
+ if (left < 0) left = 0;
+ if (top < 0) top = 0;
+ $("#" + id).css({ left: left + "px", top: top + "px" });
+ this.$areaData[id].left = left;
+ this.$areaData[id].top = top;
+ if (this.$editable) {
+ this.$areaData[id].alt = true;
+ }
+ },
+ //删除区域分组
+ delArea: function(id) {
+ if (!this.$areaData[id]) return;
+ if (this.$undoStack) {
+ var paras = [id, this.$areaData[id]];
+ this.pushOper("addArea", paras);
+ }
+ if (this.onItemDel != null && !this.onItemDel(id, "node")) return;
+ delete this.$areaData[id];
+ this.$areaDom[id].remove();
+ delete this.$areaDom[id];
+ --this.$areaCount;
+ if (this.$editable) {
+ //在回退新增操作时,如果节点ID以this.$id+"_area_"开头,则表示为本次编辑时新加入的节点,这些节点的删除不用加入到$deletedItem中
+ if (id.indexOf(this.$id + "_area_") < 0)
+ this.$deletedItem[id] = "area";
+ }
+ },
+ //设置区域分组的颜色
+ setAreaColor: function(id, color) {
+ if (!this.$areaData[id]) return;
+ if (this.$undoStack) {
+ var paras = [id, this.$areaData[id].color];
+ this.pushOper("setAreaColor", paras);
+ }
+ if (color == "red" || color == "yellow" || color == "blue" || color == "green") {
+ this.$areaDom[id].removeClass("area_" + this.$areaData[id].color).addClass("area_" + color);
+ this.$areaData[id].color = color;
+ }
+ if (this.$editable) {
+ this.$areaData[id].alt = true;
+ }
+ },
+ //设置区域分块的尺寸
+ resizeArea: function(id, width, height) {
+ if (!this.$areaData[id]) return;
+ if (this.onItemResize != null && !this.onItemResize(id, "area", width, height)) return;
+ if (this.$undoStack) {
+ var paras = [id, this.$areaData[id].width, this.$areaData[id].height];
+ this.pushOper("resizeArea", paras);
+ }
+ var hack = 0;
+ if (navigator.userAgent.indexOf("8.0") != -1) hack = 2;
+ this.$areaDom[id].children(".bg").css({ width: width - 2 + "px", height: height - 2 + "px" });
+ width = this.$areaDom[id].outerWidth();
+ height = this.$areaDom[id].outerHeight();
+ this.$areaDom[id].children("bg").css({ width: width - 2 + "px", height: height - 2 + "px" });
+ this.$areaData[id].width = width;
+ this.$areaData[id].height = height;
+ if (this.$editable) {
+ this.$areaData[id].alt = true;
+ }
+ },
+ addArea: function(id, json) {
+ if (this.onItemAdd != null && !this.onItemAdd(id, "area", json)) return;
+ if (this.$undoStack && this.$editable) {
+ this.pushOper("delArea", [id]);
+ }
+ this.$areaDom[id] = $("
" +
+ "
");
+ this.$areaData[id] = json;
+ this.$group.append(this.$areaDom[id]);
+ if (this.$nowType != "group") this.$areaDom[id].children("div:eq(1)").css("display", "none");
+ ++this.$areaCount;
+ if (this.$editable) {
+ this.$areaData[id].alt = true;
+ if (this.$deletedItem[id]) delete this.$deletedItem[id]; //在回退删除操作时,去掉该元素的删除记录
+ }
+ },
+ //重构整个流程图设计器的宽高
+ reinitSize: function(width, height) {
+ var w = (width || 800) - 2;
+ var h = (height || 500) - 2;
+ this.$bgDiv.css({ height: h + "px", width: w + "px" });
+ var headHeight = 0, hack = 10;
+ if (this.$head != null) {
+ headHeight = 24;
+ hack = 7;
+ }
+ if (this.$tool != null) {
+ this.$tool.css({ height: h - headHeight - hack + "px" });
+ }
+ w -= 39;
+ h = h - headHeight - (this.$head != null ? 5 : 8);
+ this.$workArea.parent().css({ height: h + "px", width: w + "px" });
+ this.$workArea.css({ height: h * 3 + "px", width: w * 3 + "px" });
+ if (GooFlow.prototype.useSVG == "") {
+ this.$draw.coordsize = w * 3 + "," + h * 3;
+ }
+ this.$draw.style.width = w * 3 + "px";
+ this.$draw.style.height = +h * 3 + "px";
+ if (this.$group == null) {
+ this.$group.css({ height: h * 3 + "px", width: w * 3 + "px" });
+ }
+ }
+ }
+ //将此类的构造函数加入至JQUERY对象中
+ jQuery.extend({
+ createGooFlow: function(bgDiv, property) {
+ return new GooFlow(bgDiv, property);
+ }
+ });
+
+ //获取一个DIV的绝对坐标的功能函数,即使是非绝对定位,一样能获取到
+ function getElCoordinate(dom) {
+ var t = dom.offsetTop;
+ var l = dom.offsetLeft;
+ dom = dom.offsetParent;
+ while (dom) {
+ t += dom.offsetTop;
+ l += dom.offsetLeft;
+ dom = dom.offsetParent;
+ };
+ return {
+ top: t,
+ left: l
+ };
+ }
+
+ //兼容各种浏览器的,获取鼠标真实位置
+ function mousePosition(ev) {
+ if (!ev) ev = window.event;
+ if (ev.pageX || ev.pageY) {
+ return { x: ev.pageX, y: ev.pageY };
+ }
+ return {
+ x: ev.clientX + document.documentElement.scrollLeft - document.body.clientLeft,
+ y: ev.clientY + document.documentElement.scrollTop - document.body.clientTop
+ };
+ }
+
+ exports('flow-ui/gooflow');
+ });
+
diff --git a/OpenAuth.Mvc/js/openauth.js b/OpenAuth.Mvc/js/openauth.js
index 6fbb5a98..a5248e2d 100644
--- a/OpenAuth.Mvc/js/openauth.js
+++ b/OpenAuth.Mvc/js/openauth.js
@@ -46,7 +46,7 @@ layui.define(['jquery', 'layer'], function (exports) {
layer.close(index);
});
}
- }
+ }
exports(MOD_NAME, openauth);
});
\ No newline at end of file
diff --git a/OpenAuth.Mvc/js/queryString.js b/OpenAuth.Mvc/js/queryString.js
index 467c64a5..77ee6600 100644
--- a/OpenAuth.Mvc/js/queryString.js
+++ b/OpenAuth.Mvc/js/queryString.js
@@ -1,25 +1,25 @@
-// ***********************************************************************
-// Assembly : OpenAuth.Mvc
-// Author : yubaolee
-// Created : 09-04-2016
-//
-// Last Modified By : yubaolee
-// Last Modified On : 09-04-2016
-// ***********************************************************************
-//
-// 版权所有(C) 2015
-//
-//
解析URL中的参数
-// ***********************************************************************
-
+// ***********************************************************************
+// Assembly : OpenAuth.Mvc
+// Author : yubaolee
+// Created : 09-04-2016
+//
+// Last Modified By : yubaolee
+// Last Modified On : 09-04-2016
+// ***********************************************************************
+//
+// 版权所有(C) 2015
+//
+//
解析URL中的参数
+// ***********************************************************************
+
layui.define("jquery",function(exports){
- var jQuery=layui.jquery;
-(function ($) {
- $.getUrlParam = function (name) {
- var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
- var r = window.location.search.substr(1).match(reg);
- if (r != null) return unescape(r[2]); return null;
- }
-})(jQuery);
+ var jQuery=layui.jquery;
+(function ($) {
+ $.getUrlParam = function (name) {
+ var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
+ var r = window.location.search.substr(1).match(reg);
+ if (r != null) return unescape(r[2]); return null;
+ }
+})(jQuery);
exports('queryString');
});
\ No newline at end of file
diff --git a/OpenAuth.Mvc/js/utils/flowlayout.js b/OpenAuth.Mvc/js/utils/flowlayout.js
index 8c31562c..e5742c66 100644
--- a/OpenAuth.Mvc/js/utils/flowlayout.js
+++ b/OpenAuth.Mvc/js/utils/flowlayout.js
@@ -1,373 +1,403 @@
-//初始化设计流程器
-$.fn.flowdesign = function (options) {
- var $frmpreview = $(this);
- if (!$frmpreview.attr('id')) {
- return false;
- }
- var FlowPanel;
- $frmpreview.html("");
- var defaults = {
- flowcontent: "",
- frmtype: 0,//自定义表单0,系统表单1
- frmData: "",
- width: $(window).width(),
- height: $(window).height() + 2,
- OpenNode: function () { return false},
- OpenLine: function () { return false },
- NodeRemarks: {
- cursor: "选择指针",
- direct: "步骤连线",
- startround: "开始节点",
- endround: "结束节点",
- stepnode: "普通节点",
- shuntnode: "分流节点",
- confluencenode: "合流节点",
- group: "区域规划"
- },
- haveTool:true,
- toolBtns: ["startround", "endround", "stepnode", "shuntnode", "confluencenode"],
- isprocessing: false,
- nodeData: null,
- activityId: "",
- preview:0
- };
- var options = $.extend(defaults, options);
- FlowPanel = $.createGooFlow($(this), {
- width: options.width,
- height: options.height,
- haveHead: true,
- headBtns: ["undo", "redo"],
- haveTool: options.haveTool,
- toolBtns: options.toolBtns,
- haveGroup: true,
- useOperStack: true
- });
- FlowPanel.setNodeRemarks(options.NodeRemarks);
- FlowPanel.loadData(options.flowcontent);
- OpenNode = options.OpenNode;
- OpenLine = options.OpenLine;
- //导出数据扩展方法
- //所有节点必须有进出线段
- //必须有开始结束节点(且只能为一个)
- //分流合流节点必须成对出现
- //分流合流节点必须一一对应且中间必须有且只能有一个普通节点
- //分流节点与合流节点之前的审核节点必须有且只能有一条出去和进来节点
- FlowPanel.exportDataEx = function () {
- var _data = FlowPanel.exportData();
- var _fromlines = {}, _tolines = {}, _nodes = {}, _fnodes = [], _hnodes = [], _startroundFlag = 0, _endroundFlag = 0;
- for (var i in _data.lines)
- {
- if (_fromlines[_data.lines[i].from] == undefined)
- {
- _fromlines[_data.lines[i].from] = [];
- }
- _fromlines[_data.lines[i].from].push(_data.lines[i].to);
+layui.define("jquery",
+ function(exports) {
+ var $ = layui.jquery;
- if (_tolines[_data.lines[i].to] == undefined) {
- _tolines[_data.lines[i].to] = [];
+ //初始化设计流程器
+ $.fn.flowdesign = function(options) {
+ var $frmpreview = $(this);
+ if (!$frmpreview.attr('id')) {
+ return false;
}
- _tolines[_data.lines[i].to].push(_data.lines[i].from);
- }
- for (var j in _data.nodes)
- {
- var _node = _data.nodes[j];
- var _flag = false;
- switch (_node.type)
- {
- case "startround":
- _startroundFlag++;
- if (_fromlines[_node.id] == undefined) {
- dialogTop("开始节点无法流转到下一个节点", "error");
- return -1;
+ var flowPanel;
+ $frmpreview.html("");
+ var defaults = {
+ flowcontent: "",
+ frmtype: 0, //自定义表单0,系统表单1
+ frmData: "",
+ width: $(window).width(),
+ height: $(window).height() + 2,
+ OpenNode: function() { return false },
+ OpenLine: function() { return false },
+ NodeRemarks: {
+ cursor: "选择指针",
+ direct: "步骤连线",
+ startround: "开始节点",
+ endround: "结束节点",
+ stepnode: "普通节点",
+ shuntnode: "分流节点",
+ confluencenode: "合流节点",
+ group: "区域规划"
+ },
+ haveTool: true,
+ toolBtns: ["startround", "endround", "stepnode", "shuntnode", "confluencenode"],
+ isprocessing: false,
+ nodeData: null,
+ activityId: "",
+ preview: 0
+ };
+ var options = $.extend(defaults, options);
+ flowPanel = $.createGooFlow($(this),
+ {
+ width: options.width,
+ height: options.height,
+ haveHead: true,
+ headBtns: ["undo", "redo"],
+ haveTool: options.haveTool,
+ toolBtns: options.toolBtns,
+ haveGroup: true,
+ useOperStack: true
+ });
+ flowPanel.setNodeRemarks(options.NodeRemarks);
+ flowPanel.loadData(options.flowcontent);
+ OpenNode = options.OpenNode;
+ OpenLine = options.OpenLine;
+ //导出数据扩展方法
+ //所有节点必须有进出线段
+ //必须有开始结束节点(且只能为一个)
+ //分流合流节点必须成对出现
+ //分流合流节点必须一一对应且中间必须有且只能有一个普通节点
+ //分流节点与合流节点之前的审核节点必须有且只能有一条出去和进来节点
+ flowPanel.exportDataEx = function() {
+ var _data = flowPanel.exportData();
+ var _fromlines = {},
+ _tolines = {},
+ _nodes = {},
+ _fnodes = [],
+ _hnodes = [],
+ _startroundFlag = 0,
+ _endroundFlag = 0;
+ for (var i in _data.lines) {
+ if (_fromlines[_data.lines[i].from] == undefined) {
+ _fromlines[_data.lines[i].from] = [];
}
- break;
- case "endround":
- _endroundFlag++;
- if ( _tolines[_node.id] == undefined) {
- dialogTop("无法流转到结束节点", "error");
- return -1;
+ _fromlines[_data.lines[i].from].push(_data.lines[i].to);
+
+ if (_tolines[_data.lines[i].to] == undefined) {
+ _tolines[_data.lines[i].to] = [];
}
- break;
- case "stepnode":
- _flag = true;
- break;
- case "shuntnode":
- _flag = true;
- _fnodes.push(_node.id);
- break;
- case "confluencenode":
- _hnodes.push(_node.id);
- _flag = true;
- break;
- default:
- dialogTop("节点数据异常,请重新登录下系统!", "error");
- return -1;
- break;
- }
- if (_flag)
- {
- if (_tolines[_node.id] == undefined) {
- labellingRedNode(_node.id);
- dialogTop("标注红色的节点没有【进来】的连接线段", "error");
+ _tolines[_data.lines[i].to].push(_data.lines[i].from);
+ }
+ for (var j in _data.nodes) {
+ var _node = _data.nodes[j];
+ var _flag = false;
+ switch (_node.type) {
+ case "startround":
+ _startroundFlag++;
+ if (_fromlines[_node.id] == undefined) {
+ dialogTop("开始节点无法流转到下一个节点", "error");
+ return -1;
+ }
+ break;
+ case "endround":
+ _endroundFlag++;
+ if (_tolines[_node.id] == undefined) {
+ dialogTop("无法流转到结束节点", "error");
+ return -1;
+ }
+ break;
+ case "stepnode":
+ _flag = true;
+ break;
+ case "shuntnode":
+ _flag = true;
+ _fnodes.push(_node.id);
+ break;
+ case "confluencenode":
+ _hnodes.push(_node.id);
+ _flag = true;
+ break;
+ default:
+ dialogTop("节点数据异常,请重新登录下系统!", "error");
+ return -1;
+ break;
+ }
+ if (_flag) {
+ if (_tolines[_node.id] == undefined) {
+ labellingRedNode(_node.id);
+ dialogTop("标注红色的节点没有【进来】的连接线段", "error");
+ return -1;
+ }
+ if (_fromlines[_node.id] == undefined) {
+ labellingRedNode(_node.id);
+ dialogTop("标注红色的节点没有【出去】的连接线段", "error");
+ return -1;
+ }
+ }
+ _nodes[_node.id] = _node;
+ }
+ if (_startroundFlag == 0) {
+ dialogTop("必须有开始节点", "error");
return -1;
}
- if (_fromlines[_node.id] == undefined) {
- labellingRedNode(_node.id);
- dialogTop("标注红色的节点没有【出去】的连接线段", "error");
+
+ if (_endroundFlag == 0) {
+ dialogTop("必须有结束节点", "error");
return -1;
}
- }
- _nodes[_node.id] = _node;
- }
- if (_startroundFlag == 0) {
- dialogTop("必须有开始节点", "error");
- return -1;
- }
- if (_endroundFlag == 0)
- {
- dialogTop("必须有结束节点", "error");
- return -1;
- }
-
- if (_fnodes.length != _hnodes.length)
- {
- dialogTop("分流节点必须等于合流节点", "error");
- return -1;
- }
- for (var a in _fnodes) {
- var aNondeid = _fnodes[a];
- if (_fromlines[aNondeid].length == 1) {
- labellingRedNode(aNondeid);
- dialogTop("标注红色的分流节点不允许只有一条【出去】的线段", "error");
- return -1;
- }
- var _hhnodeid = {};
- for (var b in _fromlines[aNondeid])
- {
- btoNode = _fromlines[aNondeid][b];
- if (_nodes[btoNode].type == "stepnode") {
- var _nextLine = _fromlines[_nodes[btoNode].id];
-
- var _nextNode = _nodes[_nextLine[0]];
- if (_nextNode.type != "confluencenode") {
- labellingRedNode(_nodes[btoNode].id);
- dialogTop("标注红色的普通节点下一个节点必须是合流节点", "error");
+ if (_fnodes.length != _hnodes.length) {
+ dialogTop("分流节点必须等于合流节点", "error");
+ return -1;
+ }
+ for (var a in _fnodes) {
+ var aNondeid = _fnodes[a];
+ if (_fromlines[aNondeid].length == 1) {
+ labellingRedNode(aNondeid);
+ dialogTop("标注红色的分流节点不允许只有一条【出去】的线段", "error");
return -1;
}
- else {
- _hhnodeid[_nextLine[0]] = 0;
- if (_hhnodeid.length > 1) {
+ var _hhnodeid = {};
+ for (var b in _fromlines[aNondeid]) {
+ btoNode = _fromlines[aNondeid][b];
+ if (_nodes[btoNode].type == "stepnode") {
+ var _nextLine = _fromlines[_nodes[btoNode].id];
+
+ var _nextNode = _nodes[_nextLine[0]];
+ if (_nextNode.type != "confluencenode") {
+ labellingRedNode(_nodes[btoNode].id);
+ dialogTop("标注红色的普通节点下一个节点必须是合流节点", "error");
+ return -1;
+ } else {
+ _hhnodeid[_nextLine[0]] = 0;
+ if (_hhnodeid.length > 1) {
+ labellingRedNode(aNondeid);
+ dialogTop("标注红色的分流节点与之对应的合流节点只能有一个", "error");
+ return -1;
+ }
+ if (_tolines[_nextLine[0]].length != _fromlines[aNondeid].length) {
+ labellingRedNode(_nextLine[0]);
+ dialogTop("标注红色的合流节点与之对应的分流节点只能有一个", "error");
+ return -1;
+ }
+ }
+ if (_nextLine.length > 1) {
+ labellingRedNode(_nodes[btoNode].id);
+ dialogTop("标注红色的节点只能有一条出去的线条【分流合流之间】", "error");
+ return -1;
+ } else if (_tolines[_nodes[btoNode].id], length > 1) {
+ labellingRedNode(_nodes[btoNode].id);
+ dialogTop("标注红色的节点只能有一条进来的线条【分流合流之间】", "error");
+ return -1;
+ }
+ } else {
labellingRedNode(aNondeid);
- dialogTop("标注红色的分流节点与之对应的合流节点只能有一个", "error");
- return -1;
- }
- if (_tolines[_nextLine[0]].length != _fromlines[aNondeid].length) {
- labellingRedNode(_nextLine[0]);
- dialogTop("标注红色的合流节点与之对应的分流节点只能有一个", "error");
+ dialogTop("标注红色的分流节点必须经过一个普通节点到合流节点", "error");
return -1;
}
}
- if (_nextLine.length > 1) {
- labellingRedNode(_nodes[btoNode].id);
- dialogTop("标注红色的节点只能有一条出去的线条【分流合流之间】", "error");
- return -1;
- }
- else if (_tolines[_nodes[btoNode].id],length > 1) {
- labellingRedNode(_nodes[btoNode].id);
- dialogTop("标注红色的节点只能有一条进来的线条【分流合流之间】", "error");
- return -1;
- }
- }
- else {
- labellingRedNode(aNondeid);
- dialogTop("标注红色的分流节点必须经过一个普通节点到合流节点", "error");
- return -1;
- }
- }
-
- }
- return _data;
- }
- FlowPanel.SetNodeEx = function (id,data) {
- FlowPanel.setName(id, data.NodeName, "node", data);
- }
- FlowPanel.SetLineEx = function (id, data) {
- FlowPanel.setName(id, data.LineName, "line", data);
- }
- if (options.isprocessing)//如果是显示进程状态
- {
- var tipHtml = '
';
- tipHtml += '
已处理
';
- tipHtml += '
正在处理
';
- tipHtml += '
不通过
';
- tipHtml += '
驳回
';
- tipHtml += '
未处理
';
- $frmpreview.find('.GooFlow_work .GooFlow_work_inner').css('background-image', 'none');
- $frmpreview.find('td').css('color', '#fff');
- $frmpreview.css('background', '#fff');
- $frmpreview.find('.ico').remove();
- $frmpreview.find('.GooFlow_item').css('border', '0px');
- $frmpreview.append(tipHtml);
- $.each(options.nodeData, function (i, item) {
- $frmpreview.find("#" + item.id).css("background", "#999");
- if (item.type == "startround") {
- $frmpreview.find("#" + item.id).css("background", "#5cb85c");
- }
- else {
- if (item.id == options.activityId) {
- $frmpreview.find("#" + item.id).css("background", "#5bc0de");//正在处理
- }
- if (item.setInfo != undefined && item.setInfo.Taged != undefined) {
- if (item.setInfo.Taged == -1) {
- $frmpreview.find("#" + item.id).css("background", "#d9534f");//不通过
- }
- else if (item.setInfo.Taged == 1) {
- $frmpreview.find("#" + item.id).css("background", "#5cb85c");//通过
- }
- else {
- $frmpreview.find("#" + item.id).css("background", "#f0ad4e");//驳回
- }
}
+ return _data;
}
- if (item.setInfo != undefined && item.setInfo.Taged != undefined)
+ flowPanel.SetNodeEx = function(id, data) {
+ flowPanel.setName(id, data.NodeName, "node", data);
+ }
+ flowPanel.SetLineEx = function(id, data) {
+ flowPanel.setName(id, data.LineName, "line", data);
+ }
+ if (options.isprocessing) //如果是显示进程状态
{
- var _one = clientuserData[item.setInfo.UserId];
- var _row = '
';
- var tagname = { "-1": "不通过", "1": "通过", "0": "驳回" };
- _row += "
处理人:" + (_one == undefined ? item.setInfo.UserId : _one.RealName) + "
";
- _row += "
结果:" + tagname[item.setInfo.Taged] + "
";
- _row += "
处理时间:" + item.setInfo.TagedTime + "
";
- _row += "
备注:" + item.setInfo.description + "
";
+ var tipHtml =
+ '
';
+ tipHtml +=
+ '
已处理
';
+ tipHtml +=
+ '
正在处理
';
+ tipHtml +=
+ '
不通过
';
+ tipHtml +=
+ '
驳回
';
+ tipHtml +=
+ '
未处理
';
- $frmpreview.find('#' + item.id).attr('data-toggle', 'tooltip');
- $frmpreview.find('#' + item.id).attr('data-placement', 'bottom');
- $frmpreview.find('#' + item.id).attr('title', _row);
+ $frmpreview.find('.GooFlow_work .GooFlow_work_inner').css('background-image', 'none');
+ $frmpreview.find('td').css('color', '#fff');
+ $frmpreview.css('background', '#fff');
+ $frmpreview.find('.ico').remove();
+ $frmpreview.find('.GooFlow_item').css('border', '0px');
+ $frmpreview.append(tipHtml);
+ $.each(options.nodeData,
+ function(i, item) {
+ $frmpreview.find("#" + item.id).css("background", "#999");
+ if (item.type == "startround") {
+ $frmpreview.find("#" + item.id).css("background", "#5cb85c");
+ } else {
+ if (item.id == options.activityId) {
+ $frmpreview.find("#" + item.id).css("background", "#5bc0de"); //正在处理
+ }
+ if (item.setInfo != undefined && item.setInfo.Taged != undefined) {
+ if (item.setInfo.Taged == -1) {
+ $frmpreview.find("#" + item.id).css("background", "#d9534f"); //不通过
+ } else if (item.setInfo.Taged == 1) {
+ $frmpreview.find("#" + item.id).css("background", "#5cb85c"); //通过
+ } else {
+ $frmpreview.find("#" + item.id).css("background", "#f0ad4e"); //驳回
+ }
+ }
+ }
+ if (item.setInfo != undefined && item.setInfo.Taged != undefined) {
+ var _one = clientuserData[item.setInfo.UserId];
+ var _row = '
';
+ var tagname = { "-1": "不通过", "1": "通过", "0": "驳回" };
+ _row += "
处理人:" + (_one == undefined ? item.setInfo.UserId : _one.RealName) + "
";
+ _row += "
结果:" + tagname[item.setInfo.Taged] + "
";
+ _row += "
处理时间:" + item.setInfo.TagedTime + "
";
+ _row += "
备注:" + item.setInfo.description + "
";
+
+ $frmpreview.find('#' + item.id).attr('data-toggle', 'tooltip');
+ $frmpreview.find('#' + item.id).attr('data-placement', 'bottom');
+ $frmpreview.find('#' + item.id).attr('title', _row);
+ }
+ });
+ $('[data-toggle="tooltip"]').tooltip({ "html": true });
+ }
+ if (options.preview == 1) {
+ preview();
}
- });
- $('[data-toggle="tooltip"]').tooltip({"html":true});
- }
- if (options.preview == 1)
- {
- preview();
- }
- //预览
- function preview() {
- var _frmitems = {};
- for (var i in options.frmData) {
- var _frmitem = options.frmData[i];
- _frmitems[_frmitem.control_field] = _frmitem.control_label;
+ //预览
+ function preview() {
+ var _frmitems = {};
+ for (var i in options.frmData) {
+ var _frmitem = options.frmData[i];
+ _frmitems[_frmitem.control_field] = _frmitem.control_label;
+ }
+ var DataBaseLinkData = {};
+
+
+ var _NodeRejectType = { "0": "前一步", "1": "第一步", "2": "某一步", "3": "用户指定", "4": "不处理" };
+ var _NodeIsOver = { "0": "不允许", "1": "允许" };
+ var _NodeDesignate = {
+ "NodeDesignateType1": "所有成员",
+ "NodeDesignateType2": "指定成员",
+ "NodeDesignateType3": "发起者领导",
+ "NodeDesignateType4": "前一步骤领导",
+ "NodeDesignateType5": "发起者部门领导",
+ "NodeDesignateType6": "发起者公司领导"
+ };
+ var _NodeConfluenceType = { "0": "所有步骤通过", "1": "一个步骤通过即可", "2": "按百分比计算" };
+ $.each(options.flowcontent.nodes,
+ function(i, item) {
+ if (item.setInfo != undefined) {
+ var _popoverhtml = "";
+ _popoverhtml +=
+ '
基本信息
';
+ _popoverhtml += '
';
+ _popoverhtml += '- 节点标识:' + item.setInfo.NodeCode + '
';
+ _popoverhtml += '- 驳回类型:' + _NodeRejectType[item.setInfo.NodeRejectType] + '
';
+ _popoverhtml += '- 终止流程:' + _NodeIsOver[item.setInfo.NodeIsOver] + '
';
+ if (item.setInfo.Description != "") {
+ _popoverhtml += '- 备注:' + item.setInfo.Description + '
';
+ }
+ if (item.setInfo.NodeConfluenceType != "") {
+ _popoverhtml += '- 会签策略:' +
+ _NodeConfluenceType[item.setInfo.NodeConfluenceType] +
+ '
';
+ if (item.setInfo.NodeConfluenceType == 2) {
+ _popoverhtml += '- 会签比例:' + item.setInfo.NodeConfluenceRate + '
';
+ }
+ }
+ if (item.setInfo.NodeDataBase != "") {
+ _popoverhtml += '- 绑定数据库:' + DataBaseLinkData[item.setInfo.NodeDataBase] + '
';
+ }
+ if (item.setInfo.NodeTable != "") {
+ _popoverhtml += '- 绑定表名:' + item.setInfo.NodeTable + '
';
+ }
+ if (item.setInfo.NodePram != "") {
+ _popoverhtml += '- 绑定字段:' + item.setInfo.NodePram + '
';
+ }
+ _popoverhtml += '
';
+
+ _popoverhtml +=
+ '
审核者
';
+ _popoverhtml += '
';
+ _popoverhtml += '- 类型:' + _NodeDesignate[item.setInfo.NodeDesignate] + '
';
+ if (item.setInfo.NodeDesignateData != undefined) {
+ var _rowstr = "";
+ for (var i in item.setInfo.NodeDesignateData.role) {
+ var _postitem = item.setInfo.NodeDesignateData.role[i];
+ var _one = top.clientroleData[_postitem];
+ _rowstr += ' ' +
+ (_one == undefined ? _postitem : _one.FullName) +
+ '';
+ if (i == item.setInfo.NodeDesignateData.role.length - 1) {
+ _popoverhtml += '- 角色:' + _rowstr + '
';
+ }
+ }
+
+ _rowstr = "";
+ for (var i in item.setInfo.NodeDesignateData.user) {
+ var _postitem = item.setInfo.NodeDesignateData.user[i];
+ var _one = clientuserData[_postitem];
+ _rowstr += ' ' +
+ (_one == undefined ? _postitem : _one.RealName) +
+ '';
+ if (i == item.setInfo.NodeDesignateData.user.length - 1) {
+ _popoverhtml += '- 用户:' + _rowstr + '
';
+ }
+ }
+ }
+ _popoverhtml += '
';
+
+ var _row = "";
+ for (var i in item.setInfo.frmPermissionInfo) {
+ var _item = item.setInfo.frmPermissionInfo[i];
+ var _downtext = "";
+ if (_item.down) {
+ _downtext = ' | 可下载';
+ } else if (_item.down != undefined) {
+ _downtext = ' | 不可下载';
+ }
+ _row += '
' +
+ _frmitems[_item.fieldid] +
+ ': ' +
+ (_item.look ? '可查看' : '不可查看') +
+ _downtext +
+ '';
+ if (i == item.setInfo.frmPermissionInfo.length - 1) {
+ _popoverhtml +=
+ '
权限分配
';
+ _popoverhtml += '
';
+ _popoverhtml += _row;
+ _popoverhtml += '
';
+ }
+ }
+
+ if (item.setInfo.NodeDataBaseToSQL != "" || item.setInfo.NodeSQL != "") {
+ _popoverhtml +=
+ '
执行SQL
';
+ _popoverhtml += '
';
+ _popoverhtml += '- 数据库:' + DataBaseLinkData[item.setInfo.NodeDataBaseToSQL] + '
';
+ _popoverhtml += '- SQL语句:' + item.setInfo.NodeSQL + '
';
+ _popoverhtml += '
';
+ }
+
+ $frmpreview.find('#' + item.id).attr('title', item.name);
+ $frmpreview.find('#' + item.id).attr('data-toggle', 'popover');
+ $frmpreview.find('#' + item.id).attr('data-placement', 'bottom');
+ $frmpreview.find('#' + item.id).attr('data-content', _popoverhtml);
+ } else {
+ $frmpreview.find('#' + item.id).attr('title', item.name);
+ $frmpreview.find('#' + item.id).attr('data-toggle', 'popover');
+ $frmpreview.find('#' + item.id).attr('data-placement', 'bottom');
+ $frmpreview.find('#' + item.id).attr('data-content', "该节点未被设置");
+ }
+ });
+ $frmpreview.find('.GooFlow_item').popover({ html: true });
+ }
+
+ function labellingRedNode(id) {
+ $frmpreview.find('.flow-labellingnode-red').removeClass('flow-labellingnode-red');
+ $frmpreview.find('#' + id).addClass('flow-labellingnode-red');
+ }
+
+ return flowPanel;
}
- var DataBaseLinkData = {};
+
+ exports('utils/flowlayout'); //只有这样写才能找到utils/flowlayout??好尴尬
+ });
+
- var _NodeRejectType = { "0": "前一步", "1": "第一步", "2": "某一步", "3": "用户指定", "4": "不处理" };
- var _NodeIsOver = { "0": "不允许", "1": "允许" };
- var _NodeDesignate = { "NodeDesignateType1": "所有成员", "NodeDesignateType2": "指定成员", "NodeDesignateType3": "发起者领导", "NodeDesignateType4": "前一步骤领导", "NodeDesignateType5": "发起者部门领导", "NodeDesignateType6": "发起者公司领导" };
- var _NodeConfluenceType = { "0": "所有步骤通过", "1": "一个步骤通过即可", "2": "按百分比计算" };
- $.each(options.flowcontent.nodes, function (i, item) {
- if (item.setInfo != undefined) {
- var _popoverhtml = "";
- _popoverhtml += '
基本信息
';
- _popoverhtml += '
';
- _popoverhtml += '- 节点标识:' + item.setInfo.NodeCode + '
';
- _popoverhtml += '- 驳回类型:' + _NodeRejectType[item.setInfo.NodeRejectType] + '
';
- _popoverhtml += '- 终止流程:' + _NodeIsOver[item.setInfo.NodeIsOver] + '
';
- if (item.setInfo.Description != "") { _popoverhtml += '- 备注:' + item.setInfo.Description + '
'; }
- if (item.setInfo.NodeConfluenceType != "") {
- _popoverhtml += '- 会签策略:' + _NodeConfluenceType[item.setInfo.NodeConfluenceType] + '
';
- if (item.setInfo.NodeConfluenceType == 2) {
- _popoverhtml += '- 会签比例:' + item.setInfo.NodeConfluenceRate + '
';
- }
- }
- if (item.setInfo.NodeDataBase != "") {
- _popoverhtml += '- 绑定数据库:' + DataBaseLinkData[item.setInfo.NodeDataBase] + '
';
- }
- if (item.setInfo.NodeTable != "") {
- _popoverhtml += '- 绑定表名:' + item.setInfo.NodeTable + '
';
- }
- if (item.setInfo.NodePram != "") {
- _popoverhtml += '- 绑定字段:' + item.setInfo.NodePram + '
';
- }
- _popoverhtml += '
';
-
- _popoverhtml += '
审核者
';
- _popoverhtml += '
';
- _popoverhtml += '- 类型:' + _NodeDesignate[item.setInfo.NodeDesignate] + '
';
- if (item.setInfo.NodeDesignateData != undefined) {
- var _rowstr = "";
- for (var i in item.setInfo.NodeDesignateData.role) {
- var _postitem = item.setInfo.NodeDesignateData.role[i];
- var _one = top.clientroleData[_postitem];
- _rowstr += ' ' + (_one == undefined ? _postitem : _one.FullName) + '';
- if (i == item.setInfo.NodeDesignateData.role.length - 1) {
- _popoverhtml += '- 角色:' + _rowstr + '
';
- }
- }
-
- _rowstr = "";
- for (var i in item.setInfo.NodeDesignateData.user) {
- var _postitem = item.setInfo.NodeDesignateData.user[i];
- var _one = clientuserData[_postitem];
- _rowstr += ' ' + (_one == undefined ? _postitem : _one.RealName) + '';
- if (i == item.setInfo.NodeDesignateData.user.length - 1) {
- _popoverhtml += '- 用户:' + _rowstr + '
';
- }
- }
- }
- _popoverhtml += '
';
-
- var _row = "";
- for (var i in item.setInfo.frmPermissionInfo) {
- var _item = item.setInfo.frmPermissionInfo[i];
- var _downtext = "";
- if (_item.down) {
- _downtext = ' | 可下载';
- }
- else if (_item.down != undefined) {
- _downtext = ' | 不可下载';
- }
- _row += '
' + _frmitems[_item.fieldid] + ': ' + (_item.look ? '可查看' : '不可查看') + _downtext + '';
- if (i == item.setInfo.frmPermissionInfo.length - 1) {
- _popoverhtml += '
权限分配
';
- _popoverhtml += '
';
- _popoverhtml += _row;
- _popoverhtml += '
';
- }
- }
-
- if (item.setInfo.NodeDataBaseToSQL != "" || item.setInfo.NodeSQL != "") {
- _popoverhtml += '
执行SQL
';
- _popoverhtml += '
';
- _popoverhtml += '- 数据库:' + DataBaseLinkData[item.setInfo.NodeDataBaseToSQL] + '
';
- _popoverhtml += '- SQL语句:' + item.setInfo.NodeSQL + '
';
- _popoverhtml += '
';
- }
-
- $frmpreview.find('#' + item.id).attr('title', item.name);
- $frmpreview.find('#' + item.id).attr('data-toggle', 'popover');
- $frmpreview.find('#' + item.id).attr('data-placement', 'bottom');
- $frmpreview.find('#' + item.id).attr('data-content', _popoverhtml);
- }
- else {
- $frmpreview.find('#' + item.id).attr('title', item.name);
- $frmpreview.find('#' + item.id).attr('data-toggle', 'popover');
- $frmpreview.find('#' + item.id).attr('data-placement', 'bottom');
- $frmpreview.find('#' + item.id).attr('data-content', "该节点未被设置");
- }
- });
- $frmpreview.find('.GooFlow_item').popover({ html: true });
- }
-
- function labellingRedNode(id)
- {
- $frmpreview.find('.flow-labellingnode-red').removeClass('flow-labellingnode-red');
- $frmpreview.find('#' + id).addClass('flow-labellingnode-red');
- }
-
- return FlowPanel;
-}
diff --git a/OpenAuth.Mvc/layui/css/layui.css b/OpenAuth.Mvc/layui/css/layui.css
index 743cd495..394f92dd 100644
--- a/OpenAuth.Mvc/layui/css/layui.css
+++ b/OpenAuth.Mvc/layui/css/layui.css
@@ -1,2 +1,2 @@
-/** layui-v2.1.5 MIT License By http://www.layui.com */
- .layui-btn,.layui-inline,img{vertical-align:middle}.layui-btn,.layui-disabled,.layui-icon,.layui-unselect{-webkit-user-select:none;-ms-user-select:none;-moz-user-select:none}blockquote,body,button,dd,div,dl,dt,form,h1,h2,h3,h4,h5,h6,input,li,ol,p,pre,td,textarea,th,ul{margin:0;padding:0;-webkit-tap-highlight-color:rgba(0,0,0,0)}a:active,a:hover{outline:0}img{display:inline-block;border:none}li{list-style:none}table{border-collapse:collapse;border-spacing:0}h1,h2,h3{font-size:14px;font-weight:400}h4,h5,h6{font-size:100%;font-weight:400}button,input,optgroup,option,select,textarea{font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;outline:0}pre{white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word}@font-face{font-family:layui-icon;src:url(../font/iconfont.eot?v=213);src:url(../font/iconfont.eot?v=213#iefix) format('embedded-opentype'),url(../font/iconfont.svg?v=213#iconfont) format('svg'),url(../font/iconfont.woff?v=213) format('woff'),url(../font/iconfont.ttf?v=213) format('truetype')}.layui-icon{font-family:layui-icon!important;font-size:16px;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body{line-height:24px;font:14px Helvetica Neue,Helvetica,PingFang SC,\5FAE\8F6F\96C5\9ED1,Tahoma,Arial,sans-serif}hr{height:1px;margin:10px 0;border:0;background-color:#e2e2e2;clear:both}a{color:#333;text-decoration:none}a:hover{color:#777}a cite{font-style:normal;*cursor:pointer}.layui-border-box,.layui-border-box *{box-sizing:border-box}.layui-box,.layui-box *{box-sizing:content-box}.layui-clear{clear:both;*zoom:1}.layui-clear:after{content:'\20';clear:both;*zoom:1;display:block;height:0}.layui-inline{position:relative;display:inline-block;*display:inline;*zoom:1}.layui-edge{position:absolute;width:0;height:0;border-style:dashed;border-color:transparent;overflow:hidden}.layui-elip{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.layui-disabled,.layui-disabled:hover{color:#d2d2d2!important;cursor:not-allowed!important}.layui-circle{border-radius:100%}.layui-show{display:block!important}.layui-hide{display:none!important}.layui-main{position:relative;width:1140px;margin:0 auto}.layui-header{position:relative;z-index:1000;height:60px}.layui-header a:hover{transition:all .5s;-webkit-transition:all .5s}.layui-side{position:fixed;top:0;bottom:0;z-index:999;width:200px;overflow-x:hidden}.layui-side-scroll{width:220px;height:100%;overflow-x:hidden}.layui-body{position:absolute;left:200px;right:0;top:0;bottom:0;z-index:998;width:auto;overflow:hidden;overflow-y:auto;box-sizing:border-box}.layui-layout-body{overflow:hidden}.layui-layout-admin .layui-header{background-color:#23262E}.layui-layout-admin .layui-side{top:60px;width:200px;overflow-x:hidden}.layui-layout-admin .layui-body{top:60px;bottom:44px}.layui-layout-admin .layui-main{width:auto;margin:0 15px}.layui-layout-admin .layui-footer{position:fixed;left:200px;right:0;bottom:0;height:44px;line-height:44px;padding:0 15px;background-color:#eee}.layui-layout-admin .layui-logo{position:absolute;left:0;top:0;width:200px;height:100%;line-height:60px;text-align:center;color:#009688;font-size:16px}.layui-layout-admin .layui-header .layui-nav{background:0 0}.layui-layout-left{position:absolute!important;left:200px;top:0}.layui-layout-right{position:absolute!important;right:0;top:0}.layui-container{position:relative;margin:0 auto;padding:0 15px;box-sizing:border-box}.layui-fluid{position:relative;margin:0 auto;padding:0 15px}.layui-row:after,.layui-row:before{content:'';display:block;clear:both}.layui-col-lg1,.layui-col-lg10,.layui-col-lg11,.layui-col-lg12,.layui-col-lg2,.layui-col-lg3,.layui-col-lg4,.layui-col-lg5,.layui-col-lg6,.layui-col-lg7,.layui-col-lg8,.layui-col-lg9,.layui-col-md1,.layui-col-md10,.layui-col-md11,.layui-col-md12,.layui-col-md2,.layui-col-md3,.layui-col-md4,.layui-col-md5,.layui-col-md6,.layui-col-md7,.layui-col-md8,.layui-col-md9,.layui-col-sm1,.layui-col-sm10,.layui-col-sm11,.layui-col-sm12,.layui-col-sm2,.layui-col-sm3,.layui-col-sm4,.layui-col-sm5,.layui-col-sm6,.layui-col-sm7,.layui-col-sm8,.layui-col-sm9,.layui-col-xs1,.layui-col-xs10,.layui-col-xs11,.layui-col-xs12,.layui-col-xs2,.layui-col-xs3,.layui-col-xs4,.layui-col-xs5,.layui-col-xs6,.layui-col-xs7,.layui-col-xs8,.layui-col-xs9{position:relative;display:block;box-sizing:border-box}.layui-col-xs1,.layui-col-xs10,.layui-col-xs11,.layui-col-xs12,.layui-col-xs2,.layui-col-xs3,.layui-col-xs4,.layui-col-xs5,.layui-col-xs6,.layui-col-xs7,.layui-col-xs8,.layui-col-xs9{float:left}.layui-col-xs1{width:8.33333333%}.layui-col-xs2{width:16.66666667%}.layui-col-xs3{width:25%}.layui-col-xs4{width:33.33333333%}.layui-col-xs5{width:41.66666667%}.layui-col-xs6{width:50%}.layui-col-xs7{width:58.33333333%}.layui-col-xs8{width:66.66666667%}.layui-col-xs9{width:75%}.layui-col-xs10{width:83.33333333%}.layui-col-xs11{width:91.66666667%}.layui-col-xs12{width:100%}.layui-col-xs-offset1{margin-left:8.33333333%}.layui-col-xs-offset2{margin-left:16.66666667%}.layui-col-xs-offset3{margin-left:25%}.layui-col-xs-offset4{margin-left:33.33333333%}.layui-col-xs-offset5{margin-left:41.66666667%}.layui-col-xs-offset6{margin-left:50%}.layui-col-xs-offset7{margin-left:58.33333333%}.layui-col-xs-offset8{margin-left:66.66666667%}.layui-col-xs-offset9{margin-left:75%}.layui-col-xs-offset10{margin-left:83.33333333%}.layui-col-xs-offset11{margin-left:91.66666667%}.layui-col-xs-offset12{margin-left:100%}@media screen and (max-width:768px){.layui-hide-xs{display:none!important}.layui-show-xs-block{display:block!important}.layui-show-xs-inline{display:inline!important}.layui-show-xs-inline-block{display:inline-block!important}}@media screen and (min-width:768px){.layui-container{width:750px}.layui-hide-sm{display:none!important}.layui-show-sm-block{display:block!important}.layui-show-sm-inline{display:inline!important}.layui-show-sm-inline-block{display:inline-block!important}.layui-col-sm1,.layui-col-sm10,.layui-col-sm11,.layui-col-sm12,.layui-col-sm2,.layui-col-sm3,.layui-col-sm4,.layui-col-sm5,.layui-col-sm6,.layui-col-sm7,.layui-col-sm8,.layui-col-sm9{float:left}.layui-col-sm1{width:8.33333333%}.layui-col-sm2{width:16.66666667%}.layui-col-sm3{width:25%}.layui-col-sm4{width:33.33333333%}.layui-col-sm5{width:41.66666667%}.layui-col-sm6{width:50%}.layui-col-sm7{width:58.33333333%}.layui-col-sm8{width:66.66666667%}.layui-col-sm9{width:75%}.layui-col-sm10{width:83.33333333%}.layui-col-sm11{width:91.66666667%}.layui-col-sm12{width:100%}.layui-col-sm-offset1{margin-left:8.33333333%}.layui-col-sm-offset2{margin-left:16.66666667%}.layui-col-sm-offset3{margin-left:25%}.layui-col-sm-offset4{margin-left:33.33333333%}.layui-col-sm-offset5{margin-left:41.66666667%}.layui-col-sm-offset6{margin-left:50%}.layui-col-sm-offset7{margin-left:58.33333333%}.layui-col-sm-offset8{margin-left:66.66666667%}.layui-col-sm-offset9{margin-left:75%}.layui-col-sm-offset10{margin-left:83.33333333%}.layui-col-sm-offset11{margin-left:91.66666667%}.layui-col-sm-offset12{margin-left:100%}}@media screen and (min-width:992px){.layui-container{width:970px}.layui-hide-md{display:none!important}.layui-show-md-block{display:block!important}.layui-show-md-inline{display:inline!important}.layui-show-md-inline-block{display:inline-block!important}.layui-col-md1,.layui-col-md10,.layui-col-md11,.layui-col-md12,.layui-col-md2,.layui-col-md3,.layui-col-md4,.layui-col-md5,.layui-col-md6,.layui-col-md7,.layui-col-md8,.layui-col-md9{float:left}.layui-col-md1{width:8.33333333%}.layui-col-md2{width:16.66666667%}.layui-col-md3{width:25%}.layui-col-md4{width:33.33333333%}.layui-col-md5{width:41.66666667%}.layui-col-md6{width:50%}.layui-col-md7{width:58.33333333%}.layui-col-md8{width:66.66666667%}.layui-col-md9{width:75%}.layui-col-md10{width:83.33333333%}.layui-col-md11{width:91.66666667%}.layui-col-md12{width:100%}.layui-col-md-offset1{margin-left:8.33333333%}.layui-col-md-offset2{margin-left:16.66666667%}.layui-col-md-offset3{margin-left:25%}.layui-col-md-offset4{margin-left:33.33333333%}.layui-col-md-offset5{margin-left:41.66666667%}.layui-col-md-offset6{margin-left:50%}.layui-col-md-offset7{margin-left:58.33333333%}.layui-col-md-offset8{margin-left:66.66666667%}.layui-col-md-offset9{margin-left:75%}.layui-col-md-offset10{margin-left:83.33333333%}.layui-col-md-offset11{margin-left:91.66666667%}.layui-col-md-offset12{margin-left:100%}}@media screen and (min-width:1200px){.layui-container{width:1170px}.layui-hide-lg{display:none!important}.layui-show-lg-block{display:block!important}.layui-show-lg-inline{display:inline!important}.layui-show-lg-inline-block{display:inline-block!important}.layui-col-lg1,.layui-col-lg10,.layui-col-lg11,.layui-col-lg12,.layui-col-lg2,.layui-col-lg3,.layui-col-lg4,.layui-col-lg5,.layui-col-lg6,.layui-col-lg7,.layui-col-lg8,.layui-col-lg9{float:left}.layui-col-lg1{width:8.33333333%}.layui-col-lg2{width:16.66666667%}.layui-col-lg3{width:25%}.layui-col-lg4{width:33.33333333%}.layui-col-lg5{width:41.66666667%}.layui-col-lg6{width:50%}.layui-col-lg7{width:58.33333333%}.layui-col-lg8{width:66.66666667%}.layui-col-lg9{width:75%}.layui-col-lg10{width:83.33333333%}.layui-col-lg11{width:91.66666667%}.layui-col-lg12{width:100%}.layui-col-lg-offset1{margin-left:8.33333333%}.layui-col-lg-offset2{margin-left:16.66666667%}.layui-col-lg-offset3{margin-left:25%}.layui-col-lg-offset4{margin-left:33.33333333%}.layui-col-lg-offset5{margin-left:41.66666667%}.layui-col-lg-offset6{margin-left:50%}.layui-col-lg-offset7{margin-left:58.33333333%}.layui-col-lg-offset8{margin-left:66.66666667%}.layui-col-lg-offset9{margin-left:75%}.layui-col-lg-offset10{margin-left:83.33333333%}.layui-col-lg-offset11{margin-left:91.66666667%}.layui-col-lg-offset12{margin-left:100%}}.layui-col-space1{margin:-.5px}.layui-col-space1>*{padding:.5px}.layui-col-space3{margin:-1.5px}.layui-col-space3>*{padding:1.5px}.layui-col-space5{margin:-2.5px}.layui-col-space5>*{padding:2.5px}.layui-col-space8{margin:-3.5px}.layui-col-space8>*{padding:3.5px}.layui-col-space10{margin:-5px}.layui-col-space10>*{padding:5px}.layui-col-space12{margin:-6px}.layui-col-space12>*{padding:6px}.layui-col-space15{margin:-7.5px}.layui-col-space15>*{padding:7.5px}.layui-col-space18{margin:-9px}.layui-col-space18>*{padding:9px}.layui-col-space20{margin:-10px}.layui-col-space20>*{padding:10px}.layui-col-space22{margin:-11px}.layui-col-space22>*{padding:11px}.layui-col-space25{margin:-12.5px}.layui-col-space25>*{padding:12.5px}.layui-col-space30{margin:-15px}.layui-col-space30>*{padding:15px}.layui-btn,.layui-input,.layui-select,.layui-textarea,.layui-upload-button{outline:0;-webkit-appearance:none;transition:all .3s;-webkit-transition:all .3s;box-sizing:border-box}.layui-elem-quote{margin-bottom:10px;padding:15px;line-height:22px;border-left:5px solid #009688;border-radius:0 2px 2px 0;background-color:#f2f2f2}.layui-quote-nm{border-color:#e2e2e2;border-style:solid;border-width:1px 1px 1px 5px;background:0 0}.layui-elem-field{margin-bottom:10px;padding:0;border:1px solid #e2e2e2}.layui-elem-field legend{margin-left:20px;padding:0 10px;font-size:20px;font-weight:300}.layui-field-title{margin:10px 0 20px;border:none;border-top:1px solid #e2e2e2}.layui-field-box{padding:10px 15px}.layui-field-title .layui-field-box{padding:10px 0}.layui-progress{position:relative;height:6px;border-radius:20px;background-color:#e2e2e2}.layui-progress-bar{position:absolute;width:0;max-width:100%;height:6px;border-radius:20px;text-align:right;background-color:#5FB878;transition:all .3s;-webkit-transition:all .3s}.layui-progress-big,.layui-progress-big .layui-progress-bar{height:18px;line-height:18px}.layui-progress-text{position:relative;top:-18px;line-height:18px;font-size:12px;color:#666}.layui-progress-big .layui-progress-text{position:static;padding:0 10px;color:#fff}.layui-collapse{border:1px solid #e2e2e2;border-radius:2px}.layui-colla-item{border-top:1px solid #e2e2e2}.layui-colla-item:first-child{border-top:none}.layui-colla-title{position:relative;height:42px;line-height:42px;padding:0 15px 0 35px;color:#333;background-color:#f2f2f2;cursor:pointer}.layui-colla-content{display:none;padding:10px 15px;line-height:22px;border-top:1px solid #e2e2e2;color:#666}.layui-bg-black,.layui-bg-blue,.layui-bg-cyan,.layui-bg-green,.layui-bg-orange,.layui-bg-red{color:#fff!important}.layui-colla-icon{position:absolute;left:15px;top:0;font-size:14px}.layui-bg-red{background-color:#FF5722!important}.layui-bg-orange{background-color:#FFB800!important}.layui-bg-green{background-color:#009688!important}.layui-bg-cyan{background-color:#2F4056!important}.layui-bg-blue{background-color:#1E9FFF!important}.layui-bg-black{background-color:#393D49!important}.layui-bg-gray{background-color:#eee!important;color:#666!important}.layui-text{line-height:22px;font-size:14px;color:#666}.layui-text h1,.layui-text h2,.layui-text h3{font-weight:500;color:#333}.layui-text h1{font-size:30px}.layui-text h2{font-size:24px}.layui-text h3{font-size:18px}.layui-text a{color:#01AAED}.layui-text a:hover{text-decoration:underline}.layui-text ul{padding:5px 0 5px 15px}.layui-text ul li{margin-top:5px;list-style-type:disc}.layui-text em,.layui-word-aux{color:#999!important;padding:0 5px!important}.layui-btn{display:inline-block;height:38px;line-height:38px;padding:0 18px;background-color:#009688;color:#fff;white-space:nowrap;text-align:center;font-size:14px;border:none;border-radius:2px;cursor:pointer}.layui-btn:hover{opacity:.8;filter:alpha(opacity=80);color:#fff}.layui-btn:active{opacity:1;filter:alpha(opacity=100)}.layui-btn+.layui-btn{margin-left:10px}.layui-btn-radius{border-radius:100px}.layui-btn .layui-icon{margin-right:3px;font-size:18px;vertical-align:bottom;vertical-align:middle\9}.layui-btn-primary{border:1px solid #C9C9C9;background-color:#fff;color:#555}.layui-btn-primary:hover{border-color:#009688;color:#333}.layui-btn-normal{background-color:#1E9FFF}.layui-btn-warm{background-color:#FFB800}.layui-btn-danger{background-color:#FF5722}.layui-btn-disabled,.layui-btn-disabled:active,.layui-btn-disabled:hover{border:1px solid #e6e6e6;background-color:#FBFBFB;color:#C9C9C9;cursor:not-allowed;opacity:1}.layui-btn-big{height:44px;line-height:44px;padding:0 25px;font-size:16px}.layui-btn-small{height:30px;line-height:30px;padding:0 10px;font-size:12px}.layui-btn-small i{font-size:16px!important}.layui-btn-mini{height:22px;line-height:22px;padding:0 5px;font-size:12px}.layui-btn-mini i{font-size:14px!important}.layui-btn-group{display:inline-block;vertical-align:middle;font-size:0}.layui-btn-group .layui-btn{margin-left:0!important;margin-right:0!important;border-left:1px solid rgba(255,255,255,.5);border-radius:0}.layui-btn-group .layui-btn-primary{border-left:none}.layui-btn-group .layui-btn-primary:hover{border-color:#C9C9C9;color:#009688}.layui-btn-group .layui-btn:first-child{border-left:none;border-radius:2px 0 0 2px}.layui-btn-group .layui-btn-primary:first-child{border-left:1px solid #c9c9c9}.layui-btn-group .layui-btn:last-child{border-radius:0 2px 2px 0}.layui-btn-group .layui-btn+.layui-btn{margin-left:0}.layui-btn-group+.layui-btn-group{margin-left:10px}.layui-input,.layui-select,.layui-textarea{height:38px;line-height:1.3;line-height:38px\9;border:1px solid #e6e6e6;background-color:#fff;border-radius:2px}.layui-input::-webkit-input-placeholder,.layui-select::-webkit-input-placeholder,.layui-textarea::-webkit-input-placeholder{line-height:1.3}.layui-form-label,.layui-form-mid,.layui-textarea{line-height:20px;position:relative}.layui-input,.layui-textarea{display:block;width:100%;padding-left:10px}.layui-input:hover,.layui-textarea:hover{border-color:#D2D2D2!important}.layui-input:focus,.layui-textarea:focus{border-color:#C9C9C9!important}.layui-textarea{min-height:100px;height:auto;padding:6px 10px;resize:vertical}.layui-select{padding:0 10px}.layui-form input[type=checkbox],.layui-form input[type=radio],.layui-form select{display:none}.layui-form-item{margin-bottom:15px;clear:both;*zoom:1}.layui-form-item:after{content:'\20';clear:both;*zoom:1;display:block;height:0}.layui-form-label{float:left;display:block;padding:9px 15px;width:80px;font-weight:400;text-align:right}.layui-form-item .layui-inline{margin-bottom:5px;margin-right:10px}.layui-input-block,.layui-input-inline{position:relative}.layui-input-block{margin-left:110px;min-height:36px}.layui-input-inline{display:inline-block;vertical-align:middle}.layui-form-item .layui-input-inline{float:left;width:190px;margin-right:10px}.layui-form-text .layui-input-inline{width:auto}.layui-form-mid{float:left;display:block;padding:8px 0!important;margin-right:10px}.layui-form-danger+.layui-form-select .layui-input,.layui-form-danger:focus{border:1px solid #FF5722!important}.layui-form-select{position:relative}.layui-form-select .layui-input{padding-right:30px;cursor:pointer}.layui-form-select .layui-edge{position:absolute;right:10px;top:50%;margin-top:-3px;cursor:pointer;border-width:6px;border-top-color:#c2c2c2;border-top-style:solid;transition:all .3s;-webkit-transition:all .3s}.layui-form-select dl{display:none;position:absolute;left:0;top:42px;padding:5px 0;z-index:999;min-width:100%;border:1px solid #d2d2d2;max-height:300px;overflow-y:auto;background-color:#fff;border-radius:2px;box-shadow:0 2px 4px rgba(0,0,0,.12);box-sizing:border-box}.layui-form-select dl dd,.layui-form-select dl dt{padding:0 10px;line-height:36px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.layui-form-select dl dt{font-size:12px;color:#999}.layui-form-select dl dd{cursor:pointer}.layui-form-select dl dd:hover{background-color:#f2f2f2}.layui-form-select .layui-select-group dd{padding-left:20px}.layui-form-select dl dd.layui-select-tips{padding-left:10px!important;color:#999}.layui-form-select dl dd.layui-this{background-color:#5FB878;color:#fff}.layui-form-checkbox,.layui-form-select dl dd.layui-disabled{background-color:#fff}.layui-form-selected dl{display:block}.layui-form-checkbox,.layui-form-checkbox *,.layui-form-radio,.layui-form-radio *,.layui-form-switch{display:inline-block;vertical-align:middle}.layui-form-selected .layui-edge{margin-top:-9px;-webkit-transform:rotate(180deg);transform:rotate(180deg);margin-top:-3px\9}:root .layui-form-selected .layui-edge{margin-top:-9px\0/IE9}.layui-form-selectup dl{top:auto;bottom:42px}.layui-select-none{margin:5px 0;text-align:center;color:#999}.layui-select-disabled .layui-disabled{border-color:#eee!important}.layui-select-disabled .layui-edge{border-top-color:#d2d2d2}.layui-form-checkbox{position:relative;height:30px;line-height:28px;margin-right:10px;padding-right:30px;border:1px solid #d2d2d2;cursor:pointer;font-size:0;border-radius:2px;-webkit-transition:.1s linear;transition:.1s linear;box-sizing:border-box}.layui-form-checkbox:hover{border:1px solid #c2c2c2}.layui-form-checkbox span{padding:0 10px;height:100%;font-size:14px;background-color:#d2d2d2;color:#fff;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.layui-form-checkbox:hover span{background-color:#c2c2c2}.layui-form-checkbox i{position:absolute;right:0;width:30px;color:#fff;font-size:20px;text-align:center}.layui-form-checkbox:hover i{color:#c2c2c2}.layui-form-checked,.layui-form-checked:hover{border-color:#5FB878}.layui-form-checked span,.layui-form-checked:hover span{background-color:#5FB878}.layui-form-checked i,.layui-form-checked:hover i{color:#5FB878}.layui-form-item .layui-form-checkbox{margin-top:4px}.layui-form-checkbox[lay-skin=primary]{height:auto!important;line-height:normal!important;border:none!important;margin-right:0;padding-right:0;background:0 0}.layui-form-checkbox[lay-skin=primary] span{float:right;padding-right:15px;line-height:18px;background:0 0;color:#666}.layui-form-checkbox[lay-skin=primary] i{position:relative;top:0;width:16px;height:16px;line-height:16px;border:1px solid #d2d2d2;font-size:12px;border-radius:2px;background-color:#fff;-webkit-transition:.1s linear;transition:.1s linear}.layui-form-checkbox[lay-skin=primary]:hover i{border-color:#5FB878;color:#fff}.layui-form-checked[lay-skin=primary] i{border-color:#5FB878;background-color:#5FB878;color:#fff}.layui-checkbox-disbaled[lay-skin=primary] span{background:0 0!important}.layui-checkbox-disbaled[lay-skin=primary]:hover i{border-color:#d2d2d2}.layui-form-item .layui-form-checkbox[lay-skin=primary]{margin-top:10px}.layui-form-switch{position:relative;height:22px;line-height:22px;width:42px;padding:0 5px;margin-top:8px;border:1px solid #d2d2d2;border-radius:20px;cursor:pointer;background-color:#fff;-webkit-transition:.1s linear;transition:.1s linear}.layui-form-switch i{position:absolute;left:5px;top:3px;width:16px;height:16px;border-radius:20px;background-color:#d2d2d2;-webkit-transition:.1s linear;transition:.1s linear}.layui-form-switch em{position:absolute;right:5px;top:0;width:25px;padding:0!important;text-align:center!important;color:#999!important;font-style:normal!important;font-size:12px}.layui-form-onswitch{border-color:#5FB878;background-color:#5FB878}.layui-form-onswitch i{left:32px;background-color:#fff}.layui-form-onswitch em{left:5px;right:auto;color:#fff!important}.layui-checkbox-disbaled{border-color:#e2e2e2!important}.layui-checkbox-disbaled span{background-color:#e2e2e2!important}.layui-checkbox-disbaled:hover i{color:#fff!important}.layui-form-radio{line-height:28px;margin:6px 10px 0 0;padding-right:10px;cursor:pointer;font-size:0}.layui-form-radio i{margin-right:8px;font-size:22px;color:#c2c2c2}.layui-form-radio span{font-size:14px}.layui-form-radio i:hover,.layui-form-radioed i{color:#5FB878}.layui-radio-disbaled i{color:#e2e2e2!important}.layui-form-pane .layui-form-label{width:110px;padding:8px 15px;height:38px;line-height:20px;border:1px solid #e6e6e6;border-radius:2px 0 0 2px;text-align:center;background-color:#FBFBFB;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;box-sizing:border-box}.layui-form-pane .layui-input-inline{margin-left:-1px}.layui-form-pane .layui-input-block{margin-left:110px;left:-1px}.layui-form-pane .layui-input{border-radius:0 2px 2px 0}.layui-form-pane .layui-form-text .layui-form-label{float:none;width:100%;border-right:1px solid #e6e6e6;border-radius:2px;box-sizing:border-box;text-align:left}.layui-form-pane .layui-form-text .layui-input-inline{display:block;margin:0;top:-1px;clear:both}.layui-form-pane .layui-form-text .layui-input-block{margin:0;left:0;top:-1px}.layui-form-pane .layui-form-text .layui-textarea{min-height:100px;border-radius:0 0 2px 2px}.layui-form-pane .layui-form-checkbox{margin:4px 0 4px 10px}.layui-form-pane .layui-form-radio,.layui-form-pane .layui-form-switch{margin-top:6px;margin-left:10px}.layui-form-pane .layui-form-item[pane]{position:relative;border:1px solid #e6e6e6}.layui-form-pane .layui-form-item[pane] .layui-form-label{position:absolute;left:0;top:0;height:100%;border-width:0 1px 0 0}.layui-form-pane .layui-form-item[pane] .layui-input-inline{margin-left:110px}@media screen and (max-width:450px){.layui-form-item .layui-form-label{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.layui-form-item .layui-inline{display:block;margin-right:0;margin-bottom:20px;clear:both}.layui-form-item .layui-inline:after{content:'\20';clear:both;display:block;height:0}.layui-form-item .layui-input-inline{display:block;float:none;left:-3px;width:auto;margin:0 0 10px 112px}.layui-form-item .layui-input-inline+.layui-form-mid{margin-left:110px;top:-5px;padding:0}.layui-form-item .layui-form-checkbox{margin-right:5px;margin-bottom:5px}}.layui-layedit{border:1px solid #d2d2d2;border-radius:2px}.layui-layedit-tool{padding:3px 5px;border-bottom:1px solid #e2e2e2;font-size:0}.layedit-tool-fixed{position:fixed;top:0;border-top:1px solid #e2e2e2}.layui-layedit-tool .layedit-tool-mid,.layui-layedit-tool .layui-icon{display:inline-block;vertical-align:middle;text-align:center;font-size:14px}.layui-layedit-tool .layui-icon{position:relative;width:32px;height:30px;line-height:30px;margin:3px 5px;color:#777;cursor:pointer;border-radius:2px}.layui-layedit-tool .layui-icon:hover{color:#393D49}.layui-layedit-tool .layui-icon:active{color:#000}.layui-layedit-tool .layedit-tool-active{background-color:#e2e2e2;color:#000}.layui-layedit-tool .layui-disabled,.layui-layedit-tool .layui-disabled:hover{color:#d2d2d2;cursor:not-allowed}.layui-layedit-tool .layedit-tool-mid{width:1px;height:18px;margin:0 10px;background-color:#d2d2d2}.layedit-tool-html{width:50px!important;font-size:30px!important}.layedit-tool-b,.layedit-tool-code,.layedit-tool-help{font-size:16px!important}.layedit-tool-d,.layedit-tool-face,.layedit-tool-image,.layedit-tool-unlink{font-size:18px!important}.layedit-tool-image input{position:absolute;font-size:0;left:0;top:0;width:100%;height:100%;opacity:.01;filter:Alpha(opacity=1);cursor:pointer}.layui-layedit-iframe iframe{display:block;width:100%}#LAY_layedit_code{overflow:hidden}.layui-laypage{display:inline-block;*display:inline;*zoom:1;vertical-align:middle;margin:10px 0;font-size:0}.layui-laypage>a:first-child,.layui-laypage>a:first-child em{border-radius:2px 0 0 2px}.layui-laypage>a:last-child,.layui-laypage>a:last-child em{border-radius:0 2px 2px 0}.layui-laypage>:first-child{margin-left:0!important}.layui-laypage>:last-child{margin-right:0!important}.layui-laypage a,.layui-laypage button,.layui-laypage input,.layui-laypage select,.layui-laypage span{border:1px solid #e2e2e2}.layui-laypage a,.layui-laypage span{display:inline-block;*display:inline;*zoom:1;vertical-align:middle;padding:0 15px;height:28px;line-height:28px;margin:0 -1px 5px 0;background-color:#fff;color:#333;font-size:12px}.layui-laypage a:hover{color:#009688}.layui-laypage em{font-style:normal}.layui-laypage .layui-laypage-spr{color:#999;font-weight:700}.layui-laypage a{text-decoration:none}.layui-laypage .layui-laypage-curr{position:relative}.layui-laypage .layui-laypage-curr em{position:relative;color:#fff}.layui-laypage .layui-laypage-curr .layui-laypage-em{position:absolute;left:-1px;top:-1px;padding:1px;width:100%;height:100%;background-color:#009688}.layui-laypage-em{border-radius:2px}.layui-laypage-next em,.layui-laypage-prev em{font-family:Sim sun;font-size:16px}.layui-laypage .layui-laypage-count,.layui-laypage .layui-laypage-limits,.layui-laypage .layui-laypage-skip{margin-left:10px;margin-right:10px;padding:0;border:none}.layui-laypage .layui-laypage-limits{vertical-align:top}.layui-laypage select{height:22px;padding:3px;border-radius:2px;cursor:pointer}.layui-laypage .layui-laypage-skip{height:30px;line-height:30px;color:#999}.layui-laypage button,.layui-laypage input{height:30px;line-height:30px;border:1px solid #e2e2e2;border-radius:2px;vertical-align:top;background-color:#fff;box-sizing:border-box}.layui-laypage input{display:inline-block;width:40px;margin:0 10px;padding:0 3px;text-align:center}.layui-laypage input:focus,.layui-laypage select:focus{border-color:#009688!important}.layui-laypage button{margin-left:10px;padding:0 10px;cursor:pointer}.layui-flow-more{margin:10px 0;text-align:center;color:#999;font-size:14px}.layui-flow-more a{height:32px;line-height:32px}.layui-flow-more a *{display:inline-block;vertical-align:top}.layui-flow-more a cite{padding:0 20px;border-radius:3px;background-color:#eee;color:#333;font-style:normal}.layui-flow-more a cite:hover{opacity:.8}.layui-flow-more a i{font-size:30px;color:#737383}.layui-table{width:100%;margin:10px 0;background-color:#fff}.layui-table tr{transition:all .3s;-webkit-transition:all .3s}.layui-table thead tr,.layui-table-fixed-l tr,.layui-table-header,.layui-table-mend,.layui-table-patch,.layui-table-tool{background-color:#f2f2f2}.layui-table th{text-align:left;font-weight:400}.layui-table td,.layui-table th,.layui-table-header,.layui-table-tool,.layui-table-view,.layui-table[lay-skin=row],.layui-table[lay-skin=line]{border:1px solid #e2e2e2}.layui-table td,.layui-table th{position:relative;padding:9px 15px;min-height:20px;line-height:20px;font-size:14px}.layui-table[lay-even] tr:nth-child(even){background-color:#f8f8f8}.layui-table tbody tr:hover,.layui-table-hover{background-color:#f2f2f2!important}.layui-table-click{background-color:#FFEEE8!important}.layui-table[lay-skin=line] td,.layui-table[lay-skin=line] th{border-width:0 0 1px}.layui-table[lay-skin=row] td,.layui-table[lay-skin=row] th{border-width:0 1px 0 0}.layui-table[lay-skin=nob] td,.layui-table[lay-skin=nob] th{border:none}.layui-table img{max-width:100px}.layui-table[lay-size=lg] td,.layui-table[lay-size=lg] th{padding:15px 30px}.layui-table-view .layui-table[lay-size=lg] .layui-table-cell{height:40px;line-height:40px}.layui-table[lay-size=sm] td,.layui-table[lay-size=sm] th{font-size:12px;padding:5px 10px}.layui-table-view .layui-table[lay-size=sm] .layui-table-cell{height:20px;line-height:20px}.layui-table[lay-data]{display:none}.layui-table-view{position:relative;margin:10px 0;overflow:hidden}.layui-table-view .layui-table{position:relative;width:auto;margin:0}.layui-table-body,.layui-table-header .layui-table,.layui-table-tool{margin-bottom:-1px}.layui-table-view .layui-table[lay-skin=line]{border-width:0 1px 0 0}.layui-table-view .layui-table[lay-skin=row]{border-width:0 0 1px}.layui-table-view .layui-table td,.layui-table-view .layui-table th{padding:5px 0;border-top:none;border-left:none}.layui-table-view .layui-table td{cursor:default}.layui-table-view .layui-form-checkbox[lay-skin=primary] i{width:18px;height:18px}.layui-table-header{border-width:0 0 1px;overflow:hidden}.layui-table-sort{width:20px;height:20px;margin-left:5px;cursor:pointer!important}.layui-table-sort .layui-edge{left:5px;border-width:5px}.layui-table-sort .layui-table-sort-asc{top:4px;border-top:none;border-bottom-style:solid;border-bottom-color:#b2b2b2}.layui-table-sort .layui-table-sort-asc:hover{border-bottom-color:#666}.layui-table-sort .layui-table-sort-desc{bottom:4px;border-bottom:none;border-top-style:solid;border-top-color:#b2b2b2}.layui-table-sort .layui-table-sort-desc:hover{border-top-color:#666}.layui-table-sort[lay-sort=asc] .layui-table-sort-asc{border-bottom-color:#000}.layui-table-sort[lay-sort=desc] .layui-table-sort-desc{border-top-color:#000}.layui-table-cell{height:28px;line-height:28px;padding:0 15px;position:relative;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;box-sizing:border-box}.layui-table-cell .layui-form-checkbox{top:-1px}.layui-table-cell .layui-table-link{color:#01AAED}.laytable-cell-space{width:15px;padding:0;text-align:center}.layui-table-body{position:relative;overflow:auto;margin-right:-1px}.layui-table-body .layui-none{line-height:40px;text-align:center;color:#999}.layui-table-fixed{position:absolute;left:0;top:0}.layui-table-fixed .layui-table-body{overflow:hidden}.layui-table-fixed-r{left:auto;right:-1px;border-left:1px solid #e2e2e2;box-shadow:-1px 0 8px rgba(0,0,0,.1)}.layui-table-fixed-r .layui-table-header{position:relative;overflow:visible}.layui-table-mend{position:absolute;right:-49px;top:0;height:100%;width:50px}.layui-table-tool{position:relative;width:100%;padding:7px 10px 0 0;border-width:1px 0 0;height:41px;font-size:12px;white-space:nowrap}.layui-table-tool:hover{overflow-x:auto}.layui-table-page{height:26px}.layui-table-tool .layui-laypage{margin:0}.layui-table-tool .layui-laypage a,.layui-table-tool .layui-laypage span{height:26px;line-height:26px;border:none;background:0 0;padding:0 12px}.layui-table-tool .layui-laypage .layui-laypage-count,.layui-table-tool .layui-laypage .layui-laypage-limits,.layui-table-tool .layui-laypage .layui-laypage-skip{margin-left:0;padding:0}.layui-table-tool .layui-laypage .layui-laypage-total{padding:0 10px}.layui-table-tool .layui-laypage .layui-laypage-spr{padding:0}.layui-table-tool .layui-laypage button,.layui-table-tool .layui-laypage input{height:26px;line-height:26px}.layui-table-tool .layui-laypage input{width:40px}.layui-table-tool .layui-laypage button{padding:0 10px}.layui-table-view select[lay-ignore]{display:inline-block}.layui-table-tool select{height:18px}.layui-table-patch .layui-table-cell{padding:0;width:30px}.layui-table-edit{position:absolute;left:0;top:0;width:100%;height:100%;padding:0 15px 1px;border:none}.layui-table-edit:focus{background-color:#F0F9F2}body .layui-table-tips .layui-layer-content{background:0 0;padding:0;box-shadow:0 1px 6px rgba(0,0,0,.1)}.layui-table-tips-main{margin:-44px 0 0 -1px;max-height:150px;padding:8px 15px;font-size:14px;overflow-y:scroll;background-color:#fff;color:#333;border:1px solid #e2e2e2}.layui-code,.layui-upload-list{margin:10px 0}.layui-table-tips-c{position:absolute;right:-3px;top:-12px;width:18px;height:18px;padding:3px;text-align:center;font-weight:700;border-radius:100%;font-size:14px;cursor:pointer;background-color:#666}.layui-table-tips-c:hover{background-color:#999}.layui-upload-file{display:none!important;opacity:.01;filter:Alpha(opacity=1)}.layui-upload-drag,.layui-upload-form,.layui-upload-wrap{display:inline-block}.layui-upload-choose{padding:0 10px;color:#999}.layui-upload-drag{position:relative;padding:30px;border:1px dashed #e2e2e2;background-color:#fff;text-align:center;cursor:pointer;color:#999}.layui-upload-drag .layui-icon{font-size:50px;color:#009688}.layui-upload-drag[lay-over]{border-color:#009688}.layui-upload-iframe{position:absolute;width:0;height:0;border:0;visibility:hidden}.layui-upload-wrap{position:relative;vertical-align:middle}.layui-upload-wrap .layui-upload-file{display:block!important;position:absolute;left:0;top:0;z-index:10;font-size:100px;width:100%;height:100%;opacity:.01;filter:Alpha(opacity=1);cursor:pointer}.layui-code{position:relative;padding:15px;line-height:20px;border:1px solid #ddd;border-left-width:6px;background-color:#F2F2F2;color:#333;font-family:Courier New;font-size:12px}.layui-tree{line-height:26px}.layui-tree li{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.layui-tree li .layui-tree-spread,.layui-tree li a{display:inline-block;vertical-align:top;height:26px;*display:inline;*zoom:1;cursor:pointer}.layui-tree li a{font-size:0}.layui-tree li a i{font-size:16px}.layui-tree li a cite{padding:0 6px;font-size:14px;font-style:normal}.layui-tree li i{padding-left:6px;color:#333;-moz-user-select:none}.layui-tree li .layui-tree-check{font-size:13px}.layui-tree li .layui-tree-check:hover{color:#009E94}.layui-tree li ul{display:none;margin-left:20px}.layui-tree li .layui-tree-enter{line-height:24px;border:1px dotted #000}.layui-tree-drag{display:none;position:absolute;left:-666px;top:-666px;background-color:#f2f2f2;padding:5px 10px;border:1px dotted #000;white-space:nowrap}.layui-tree-drag i{padding-right:5px}.layui-nav{position:relative;padding:0 20px;background-color:#393D49;color:#fff;border-radius:2px;font-size:0;box-sizing:border-box}.layui-nav *{font-size:14px}.layui-nav .layui-nav-item{position:relative;display:inline-block;*display:inline;*zoom:1;vertical-align:middle;line-height:60px}.layui-nav .layui-nav-item a{display:block;padding:0 20px;color:#fff;color:rgba(255,255,255,.7);transition:all .3s;-webkit-transition:all .3s}.layui-nav .layui-this:after,.layui-nav-bar,.layui-nav-tree .layui-nav-itemed:after{position:absolute;left:0;top:0;width:0;height:5px;background-color:#5FB878;transition:all .2s;-webkit-transition:all .2s}.layui-nav-bar{z-index:1000}.layui-nav .layui-nav-item a:hover,.layui-nav .layui-this a{color:#fff}.layui-nav .layui-this:after{content:'';top:auto;bottom:0;width:100%}.layui-nav-img{width:30px;height:30px;margin-right:10px;border-radius:50%}.layui-nav .layui-nav-more{content:'';width:0;height:0;border-style:solid dashed dashed;border-color:#fff transparent transparent;overflow:hidden;cursor:pointer;transition:all .2s;-webkit-transition:all .2s;position:absolute;top:28px;right:3px;border-width:6px;border-top-color:rgba(255,255,255,.7)}.layui-nav .layui-nav-mored,.layui-nav-itemed .layui-nav-more{top:22px;border-style:dashed dashed solid;border-color:transparent transparent #fff}.layui-nav-child{display:none;position:absolute;left:0;top:65px;min-width:100%;line-height:36px;padding:5px 0;box-shadow:0 2px 4px rgba(0,0,0,.12);border:1px solid #d2d2d2;background-color:#fff;z-index:100;border-radius:2px;white-space:nowrap}.layui-nav .layui-nav-child a{color:#333}.layui-nav .layui-nav-child a:hover{background-color:#f2f2f2;color:#000}.layui-nav-child dd{position:relative}.layui-nav .layui-nav-child dd.layui-this a,.layui-nav-child dd.layui-this{background-color:#5FB878;color:#fff}.layui-nav-child dd.layui-this:after{display:none}.layui-nav-tree{width:200px;padding:0}.layui-nav-tree .layui-nav-item{display:block;width:100%;line-height:45px}.layui-nav-tree .layui-nav-item a{height:45px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.layui-nav-tree .layui-nav-item a:hover{background-color:#4E5465}.layui-nav-tree .layui-nav-bar{width:5px;height:0;background-color:#009688}.layui-nav-tree .layui-nav-child dd.layui-this,.layui-nav-tree .layui-nav-child dd.layui-this a,.layui-nav-tree .layui-this,.layui-nav-tree .layui-this>a,.layui-nav-tree .layui-this>a:hover{background-color:#009688;color:#fff}.layui-nav-tree .layui-this:after{display:none}.layui-nav-itemed>a,.layui-nav-tree .layui-nav-title a,.layui-nav-tree .layui-nav-title a:hover{color:#fff!important}.layui-nav-tree .layui-nav-child{position:relative;z-index:0;top:0;border:none;box-shadow:none}.layui-nav-tree .layui-nav-child a{height:40px;line-height:40px;color:#fff;color:rgba(255,255,255,.7)}.layui-nav-tree .layui-nav-child,.layui-nav-tree .layui-nav-child a:hover{background:0 0;color:#fff}.layui-nav-tree .layui-nav-more{top:20px;right:10px}.layui-nav-itemed .layui-nav-more{top:14px}.layui-nav-itemed .layui-nav-child{display:block;padding:0;background-color:rgba(0,0,0,.3)!important}.layui-nav-side{position:fixed;top:0;bottom:0;left:0;overflow-x:hidden;z-index:999}.layui-bg-blue .layui-nav-bar,.layui-bg-blue .layui-nav-itemed:after,.layui-bg-blue .layui-this:after{background-color:#93D1FF}.layui-bg-blue .layui-nav-child dd.layui-this{background-color:#1E9FFF}.layui-bg-blue .layui-nav-itemed>a,.layui-nav-tree.layui-bg-blue .layui-nav-title a,.layui-nav-tree.layui-bg-blue .layui-nav-title a:hover{background-color:#007DDB!important}.layui-breadcrumb{visibility:hidden;font-size:0}.layui-breadcrumb a{padding-right:8px;line-height:22px;font-size:14px;color:#333!important}.layui-breadcrumb a:hover{color:#01AAED!important}.layui-breadcrumb a cite,.layui-breadcrumb a span{color:#666;cursor:text;font-style:normal}.layui-breadcrumb a span{padding-left:8px;font-family:Sim sun}.layui-tab{margin:10px 0;text-align:left!important}.layui-tab[overflow]>.layui-tab-title{overflow:hidden}.layui-tab-title{position:relative;left:0;height:40px;white-space:nowrap;font-size:0;border-bottom:1px solid #e2e2e2;transition:all .2s;-webkit-transition:all .2s}.layui-tab-title li{display:inline-block;*display:inline;*zoom:1;vertical-align:middle;font-size:14px;transition:all .2s;-webkit-transition:all .2s;position:relative;line-height:40px;min-width:65px;padding:0 15px;text-align:center;cursor:pointer}.layui-tab-title li a{display:block}.layui-tab-title .layui-this{color:#000}.layui-tab-title .layui-this:after{position:absolute;left:0;top:0;content:'';width:100%;height:41px;border:1px solid #e2e2e2;border-bottom-color:#fff;border-radius:2px 2px 0 0;box-sizing:border-box;pointer-events:none}.layui-tab-bar{position:absolute;right:0;top:0;z-index:10;width:30px;height:39px;line-height:39px;border:1px solid #e2e2e2;border-radius:2px;text-align:center;background-color:#fff;cursor:pointer}.layui-tab-bar .layui-icon{position:relative;display:inline-block;top:3px;transition:all .3s;-webkit-transition:all .3s}.layui-tab-item{display:none}.layui-tab-more{padding-right:30px;height:auto!important;white-space:normal!important}.layui-tab-more li.layui-this:after{border-bottom-color:#e2e2e2;border-radius:2px}.layui-tab-more .layui-tab-bar .layui-icon{top:-2px;top:3px\9;-webkit-transform:rotate(180deg);transform:rotate(180deg)}:root .layui-tab-more .layui-tab-bar .layui-icon{top:-2px\0/IE9}.layui-tab-content{padding:10px}.layui-tab-title li .layui-tab-close{position:relative;display:inline-block;width:18px;height:18px;line-height:20px;margin-left:8px;top:1px;text-align:center;font-size:14px;color:#c2c2c2;transition:all .2s;-webkit-transition:all .2s}.layui-tab-title li .layui-tab-close:hover{border-radius:2px;background-color:#FF5722;color:#fff}.layui-tab-brief>.layui-tab-title .layui-this{color:#009688}.layui-tab-brief>.layui-tab-more li.layui-this:after,.layui-tab-brief>.layui-tab-title .layui-this:after{border:none;border-radius:0;border-bottom:2px solid #5FB878}.layui-tab-brief[overflow]>.layui-tab-title .layui-this:after{top:-1px}.layui-tab-card{border:1px solid #e2e2e2;border-radius:2px;box-shadow:0 2px 5px 0 rgba(0,0,0,.1)}.layui-tab-card>.layui-tab-title{background-color:#f2f2f2}.layui-tab-card>.layui-tab-title li{margin-right:-1px;margin-left:-1px}.layui-tab-card>.layui-tab-title .layui-this{background-color:#fff}.layui-tab-card>.layui-tab-title .layui-this:after{border-top:none;border-width:1px;border-bottom-color:#fff}.layui-tab-card>.layui-tab-title .layui-tab-bar{height:40px;line-height:40px;border-radius:0;border-top:none;border-right:none}.layui-tab-card>.layui-tab-more .layui-this{background:0 0;color:#5FB878}.layui-tab-card>.layui-tab-more .layui-this:after{border:none}.layui-timeline{padding-left:5px}.layui-timeline-item{position:relative;padding-bottom:20px}.layui-timeline-axis{position:absolute;left:-5px;top:0;z-index:10;width:20px;height:20px;line-height:20px;background-color:#fff;color:#5FB878;border-radius:50%;text-align:center;cursor:pointer}.layui-timeline-axis:hover{color:#FF5722}.layui-timeline-item:before{content:'';position:absolute;left:5px;top:0;z-index:0;width:1px;height:100%;background-color:#e2e2e2}.layui-timeline-item:last-child:before{display:none}.layui-timeline-item:first-child:before{display:block}.layui-timeline-content{padding-left:25px}.layui-badge,.layui-badge-rim{line-height:18px;padding:0 5px}.layui-timeline-title{position:relative;margin-bottom:10px}.layui-badge,.layui-badge-dot,.layui-badge-rim{position:relative;display:inline-block;font-size:12px;background-color:#FF5722;color:#fff}.layui-badge{min-width:8px;height:18px;text-align:center;border-radius:9px}.layui-badge-dot{width:8px;height:8px;border-radius:50%}.layui-badge-rim{height:18px;border:1px solid #e2e2e2;border-radius:3px;background-color:#fff;color:#666}.layui-btn .layui-badge,.layui-btn .layui-badge-dot{margin-left:5px}.layui-nav .layui-badge,.layui-nav .layui-badge-dot{position:absolute;top:50%;margin:-10px 6px 0}.layui-tab-title .layui-badge,.layui-tab-title .layui-badge-dot{left:5px;top:-2px}.layui-carousel{position:relative;left:0;top:0;background-color:#f2f2f2}.layui-carousel>[carousel-item]{position:relative;width:100%;height:100%;overflow:hidden}.layui-carousel>[carousel-item]:before{position:absolute;content:'\e63d';left:50%;top:50%;width:100px;line-height:20px;margin:-10px 0 0 -50px;text-align:center;color:#999;font-family:layui-icon!important;font-size:20px;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.layui-carousel>[carousel-item]>*{display:none;position:absolute;left:0;top:0;width:100%;height:100%;background-color:#f2f2f2;transition-duration:.3s;-webkit-transition-duration:.3s}.layui-carousel-updown>*{-webkit-transition:.3s ease-in-out up;transition:.3s ease-in-out up}.layui-carousel-arrow{display:none\9;opacity:0;position:absolute;left:10px;top:50%;margin-top:-18px;width:36px;height:36px;line-height:36px;text-align:center;font-size:20px;border:0;border-radius:50%;background-color:rgba(0,0,0,.2);color:#fff;-webkit-transition-duration:.3s;transition-duration:.3s;cursor:pointer}.layui-carousel-arrow[lay-type=add]{left:auto!important;right:10px}.layui-carousel:hover .layui-carousel-arrow[lay-type=add],.layui-carousel[lay-arrow=always] .layui-carousel-arrow[lay-type=add]{right:20px}.layui-carousel[lay-arrow=always] .layui-carousel-arrow{opacity:1;left:20px}.layui-carousel[lay-arrow=none] .layui-carousel-arrow{display:none}.layui-carousel-arrow:hover,.layui-carousel-ind ul:hover{background-color:rgba(0,0,0,.35)}.layui-carousel:hover .layui-carousel-arrow{display:block\9;opacity:1;left:20px}.layui-carousel-ind{position:relative;top:-35px;width:100%;line-height:0!important;text-align:center;font-size:0}.layui-carousel[lay-indicator=outside]{margin-bottom:30px}.layui-carousel[lay-indicator=outside] .layui-carousel-ind{top:10px}.layui-carousel[lay-indicator=outside] .layui-carousel-ind ul{background-color:rgba(0,0,0,.5)}.layui-carousel[lay-indicator=none] .layui-carousel-ind{display:none}.layui-carousel-ind ul{display:inline-block;padding:5px;background-color:rgba(0,0,0,.2);border-radius:10px;-webkit-transition-duration:.3s;transition-duration:.3s}.layui-carousel-ind li{display:inline-block;width:10px;height:10px;margin:0 3px;font-size:14px;background-color:#e2e2e2;background-color:rgba(255,255,255,.5);border-radius:50%;cursor:pointer;-webkit-transition-duration:.3s;transition-duration:.3s}.layui-carousel-ind li:hover{background-color:rgba(255,255,255,.7)}.layui-carousel-ind li.layui-this{background-color:#fff}.layui-carousel>[carousel-item]>.layui-carousel-next,.layui-carousel>[carousel-item]>.layui-carousel-prev,.layui-carousel>[carousel-item]>.layui-this{display:block}.layui-carousel>[carousel-item]>.layui-this{left:0}.layui-carousel>[carousel-item]>.layui-carousel-prev{left:-100%}.layui-carousel>[carousel-item]>.layui-carousel-next{left:100%}.layui-carousel>[carousel-item]>.layui-carousel-next.layui-carousel-left,.layui-carousel>[carousel-item]>.layui-carousel-prev.layui-carousel-right{left:0}.layui-carousel>[carousel-item]>.layui-this.layui-carousel-left{left:-100%}.layui-carousel>[carousel-item]>.layui-this.layui-carousel-right{left:100%}.layui-carousel[lay-anim=updown] .layui-carousel-arrow{left:50%!important;top:20px;margin:0 0 0 -18px}.layui-carousel[lay-anim=updown]>[carousel-item]>*,.layui-carousel[lay-anim=fade]>[carousel-item]>*{left:0!important}.layui-carousel[lay-anim=updown] .layui-carousel-arrow[lay-type=add]{top:auto!important;bottom:20px}.layui-carousel[lay-anim=updown] .layui-carousel-ind{position:absolute;top:50%;right:20px;width:auto;height:auto}.layui-carousel[lay-anim=updown] .layui-carousel-ind ul{padding:3px 5px}.layui-carousel[lay-anim=updown] .layui-carousel-ind li{display:block;margin:6px 0}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-this{top:0}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-carousel-prev{top:-100%}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-carousel-next{top:100%}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-carousel-next.layui-carousel-left,.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-carousel-prev.layui-carousel-right{top:0}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-this.layui-carousel-left{top:-100%}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-this.layui-carousel-right{top:100%}.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-carousel-next,.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-carousel-prev{opacity:0}.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-carousel-next.layui-carousel-left,.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-carousel-prev.layui-carousel-right{opacity:1}.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-this.layui-carousel-left,.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-this.layui-carousel-right{opacity:0}.layui-fixbar{position:fixed;right:15px;bottom:15px;z-index:9999}.layui-fixbar li{width:50px;height:50px;line-height:50px;margin-bottom:1px;text-align:center;cursor:pointer;font-size:30px;background-color:#9F9F9F;color:#fff;border-radius:2px;opacity:.95}.layui-fixbar li:hover{opacity:.85}.layui-fixbar li:active{opacity:1}.layui-fixbar .layui-fixbar-top{display:none;font-size:40px}body .layui-util-face{border:none;background:0 0}body .layui-util-face .layui-layer-content{padding:0;background-color:#fff;color:#666;box-shadow:none}.layui-util-face .layui-layer-TipsG{display:none}.layui-util-face ul{position:relative;width:372px;padding:10px;border:1px solid #D9D9D9;background-color:#fff;box-shadow:0 0 20px rgba(0,0,0,.2)}.layui-util-face ul li{cursor:pointer;float:left;border:1px solid #e8e8e8;height:22px;width:26px;overflow:hidden;margin:-1px 0 0 -1px;padding:4px 2px;text-align:center}.layui-util-face ul li:hover{position:relative;z-index:2;border:1px solid #eb7350;background:#fff9ec}.layui-anim{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:both;animation-fill-mode:both}.layui-anim.layui-icon{display:inline-block}.layui-anim-loop{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}@-webkit-keyframes layui-rotate{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(360deg)}}@keyframes layui-rotate{from{transform:rotate(0)}to{transform:rotate(360deg)}}.layui-anim-rotate{-webkit-animation-name:layui-rotate;animation-name:layui-rotate;-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-timing-function:linear;animation-timing-function:linear}@-webkit-keyframes layui-up{from{-webkit-transform:translate3d(0,100%,0);opacity:.3}to{-webkit-transform:translate3d(0,0,0);opacity:1}}@keyframes layui-up{from{transform:translate3d(0,100%,0);opacity:.3}to{transform:translate3d(0,0,0);opacity:1}}.layui-anim-up{-webkit-animation-name:layui-up;animation-name:layui-up}@-webkit-keyframes layui-upbit{from{-webkit-transform:translate3d(0,30px,0);opacity:.3}to{-webkit-transform:translate3d(0,0,0);opacity:1}}@keyframes layui-upbit{from{transform:translate3d(0,30px,0);opacity:.3}to{transform:translate3d(0,0,0);opacity:1}}.layui-anim-upbit{-webkit-animation-name:layui-upbit;animation-name:layui-upbit}@-webkit-keyframes layui-scale{0%{opacity:.3;-webkit-transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1)}}@keyframes layui-scale{0%{opacity:.3;-ms-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-ms-transform:scale(1);transform:scale(1)}}.layui-anim-scale{-webkit-animation-name:layui-scale;animation-name:layui-scale}@-webkit-keyframes layui-scale-spring{0%{opacity:.5;-webkit-transform:scale(.5)}80%{opacity:.8;-webkit-transform:scale(1.1)}100%{opacity:1;-webkit-transform:scale(1)}}@keyframes layui-scale-spring{0%{opacity:.5;transform:scale(.5)}80%{opacity:.8;transform:scale(1.1)}100%{opacity:1;transform:scale(1)}}.layui-anim-scaleSpring{-webkit-animation-name:layui-scale-spring;animation-name:layui-scale-spring}@-webkit-keyframes layui-fadein{0%{opacity:0}100%{opacity:1}}@keyframes layui-fadein{0%{opacity:0}100%{opacity:1}}.layui-anim-fadein{-webkit-animation-name:layui-fadein;animation-name:layui-fadein}@-webkit-keyframes layui-fadeout{0%{opacity:1}100%{opacity:0}}@keyframes layui-fadeout{0%{opacity:1}100%{opacity:0}}.layui-anim-fadeout{-webkit-animation-name:layui-fadeout;animation-name:layui-fadeout}
\ No newline at end of file
+/** layui-v2.2.5 MIT License By https://www.layui.com */
+ .layui-inline,img{display:inline-block;vertical-align:middle}h1,h2,h3,h4,h5,h6{font-weight:400}.layui-edge,.layui-header,.layui-inline,.layui-main{position:relative}.layui-btn,.layui-edge,.layui-inline,img{vertical-align:middle}.layui-btn,.layui-disabled,.layui-icon,.layui-unselect{-webkit-user-select:none;-ms-user-select:none;-moz-user-select:none}blockquote,body,button,dd,div,dl,dt,form,h1,h2,h3,h4,h5,h6,input,li,ol,p,pre,td,textarea,th,ul{margin:0;padding:0;-webkit-tap-highlight-color:rgba(0,0,0,0)}a:active,a:hover{outline:0}img{border:none}li{list-style:none}table{border-collapse:collapse;border-spacing:0}h4,h5,h6{font-size:100%}button,input,optgroup,option,select,textarea{font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;outline:0}pre{white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word}body{line-height:24px;font:14px Helvetica Neue,Helvetica,PingFang SC,\5FAE\8F6F\96C5\9ED1,Tahoma,Arial,sans-serif}hr{height:1px;margin:10px 0;border:0;clear:both}a{color:#333;text-decoration:none}a:hover{color:#777}a cite{font-style:normal;*cursor:pointer}.layui-border-box,.layui-border-box *{box-sizing:border-box}.layui-box,.layui-box *{box-sizing:content-box}.layui-clear{clear:both;*zoom:1}.layui-clear:after{content:'\20';clear:both;*zoom:1;display:block;height:0}.layui-inline{*display:inline;*zoom:1}.layui-edge{display:inline-block;width:0;height:0;border-width:6px;border-style:dashed;border-color:transparent;overflow:hidden}.layui-edge-top{top:-4px;border-bottom-color:#999;border-bottom-style:solid}.layui-edge-right{border-left-color:#999;border-left-style:solid}.layui-edge-bottom{top:2px;border-top-color:#999;border-top-style:solid}.layui-edge-left{border-right-color:#999;border-right-style:solid}.layui-elip{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.layui-disabled,.layui-disabled:hover{color:#d2d2d2!important;cursor:not-allowed!important}.layui-circle{border-radius:100%}.layui-show{display:block!important}.layui-hide{display:none!important}@font-face{font-family:layui-icon;src:url(../font/iconfont.eot?v=220);src:url(../font/iconfont.eot?v=220#iefix) format('embedded-opentype'),url(../font/iconfont.svg?v=220#iconfont) format('svg'),url(../font/iconfont.woff?v=220) format('woff'),url(../font/iconfont.ttf?v=220) format('truetype')}.layui-icon{font-family:layui-icon!important;font-size:16px;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.layui-icon-duihua:before{content:"\e611"}.layui-icon-shezhi:before{content:"\e614"}.layui-icon-yinshenim:before{content:"\e60f"}.layui-icon-search:before{content:"\e615"}.layui-icon-fenxiang1:before{content:"\e641"}.layui-icon-shezhi1:before{content:"\e620"}.layui-icon-yinqing:before{content:"\e628"}.layui-icon-yuejuancuohao:before{content:"\1006"}.layui-icon-cuo:before{content:"\1007"}.layui-icon-baobiao:before{content:"\e629"}.layui-icon-star:before{content:"\e600"}.layui-icon-yuandian:before{content:"\e617"}.layui-icon-chat:before{content:"\e606"}.layui-icon-logo:before{content:"\e609"}.layui-icon-list:before{content:"\e60a"}.layui-icon-tubiao:before{content:"\e62c"}.layui-icon-right:before{content:"\1005"}.layui-icon-huanfu2:before{content:"\e61b"}.layui-icon-On-line:before{content:"\e610"}.layui-icon-biaoge:before{content:"\e62d"}.layui-icon-youyou:before{content:"\e602"}.layui-icon-zuozuo:before{content:"\e603"}.layui-icon-cart-simple:before{content:"\e698"}.layui-icon-cry:before{content:"\e69c"}.layui-icon-smile:before{content:"\e6af"}.layui-icon-survey:before{content:"\e6b2"}.layui-icon-tree:before{content:"\e62e"}.layui-icon-iconfont17:before{content:"\e62f"}.layui-icon-tianjia:before{content:"\e61f"}.layui-icon-xiazai:before{content:"\e601"}.layui-icon-xuanzemoban48:before{content:"\e630"}.layui-icon-gongju:before{content:"\e631"}.layui-icon-face-surprised:before{content:"\e664"}.layui-icon-bianji:before{content:"\e642"}.layui-icon-speaker:before{content:"\e645"}.layui-icon-xiangxia:before{content:"\e61a"}.layui-icon-wenjian:before{content:"\e621"}.layui-icon-layouts:before{content:"\e632"}.layui-icon-duigou:before{content:"\e618"}.layui-icon-tianjia1:before{content:"\e608"}.layui-icon-yaoyaozhibofanye:before{content:"\e633"}.layui-icon-read:before{content:"\e705"}.layui-icon-404:before{content:"\e61c"}.layui-icon-lunbozutu:before{content:"\e634"}.layui-icon-help:before{content:"\e607"}.layui-icon-daima1:before{content:"\e635"}.layui-icon-jinshui:before{content:"\e636"}.layui-icon-find-fill:before{content:"\e670"}.layui-icon-about:before{content:"\e60b"}.layui-icon-location:before{content:"\e715"}.layui-icon-xiangshang:before{content:"\e619"}.layui-icon-pause:before{content:"\e651"}.layui-icon-riqi:before{content:"\e637"}.layui-icon-uploadfile:before{content:"\e61d"}.layui-icon-delete:before{content:"\e640"}.layui-icon-play:before{content:"\e652"}.layui-icon-top:before{content:"\e604"}.layui-icon-haoyouqingqiu:before{content:"\e612"}.layui-icon-weibiaoti1:before{content:"\e605"}.layui-icon-chuangkou:before{content:"\e638"}.layui-icon-comiisbiaoqing:before{content:"\e60c"}.layui-icon-zhengque:before{content:"\e616"}.layui-icon-dollar:before{content:"\e659"}.layui-icon-iconfontwodehaoyou:before{content:"\e613"}.layui-icon-wenjianxiazai:before{content:"\e61e"}.layui-icon-tupian:before{content:"\e60d"}.layui-icon-lianjie:before{content:"\e64c"}.layui-icon-diamond:before{content:"\e735"}.layui-icon-jilu:before{content:"\e60e"}.layui-icon-liucheng:before{content:"\e622"}.layui-icon-fontstrikethrough:before{content:"\e64f"}.layui-icon-unlink:before{content:"\e64d"}.layui-icon-bianjiwenzi:before{content:"\e639"}.layui-icon-sanjiao:before{content:"\e623"}.layui-icon-danxuankuanghouxuan:before{content:"\e63f"}.layui-icon-danxuankuangxuanzhong:before{content:"\e643"}.layui-icon-juzhongduiqi:before{content:"\e647"}.layui-icon-youduiqi:before{content:"\e648"}.layui-icon-zuoduiqi:before{content:"\e649"}.layui-icon-gongsisvgtubiaozongji22:before{content:"\e626"}.layui-icon-gongsisvgtubiaozongji23:before{content:"\e627"}.layui-icon-refresh-2:before{content:"\1002"}.layui-icon-loading-1:before{content:"\e63e"}.layui-icon-return:before{content:"\e65c"}.layui-icon-jiacu:before{content:"\e62b"}.layui-icon-uploading:before{content:"\e67c"}.layui-icon-liaotianduihuaimgoutong:before{content:"\e63a"}.layui-icon-video:before{content:"\e6ed"}.layui-icon-headset:before{content:"\e6fc"}.layui-icon-wenjianjiafan:before{content:"\e624"}.layui-icon-shouji:before{content:"\e63b"}.layui-icon-tianjia2:before{content:"\e654"}.layui-icon-wenjianjia:before{content:"\e7a0"}.layui-icon-biaoqing:before{content:"\e650"}.layui-icon-html:before{content:"\e64b"}.layui-icon-biaodan:before{content:"\e63c"}.layui-icon-cart:before{content:"\e657"}.layui-icon-camera-fill:before{content:"\e65d"}.layui-icon-25:before{content:"\e62a"}.layui-icon-emwdaima:before{content:"\e64e"}.layui-icon-fire:before{content:"\e756"}.layui-icon-set:before{content:"\e716"}.layui-icon-zitixiahuaxian:before{content:"\e646"}.layui-icon-sanjiao1:before{content:"\e625"}.layui-icon-tips:before{content:"\e702"}.layui-icon-tupian-copy-copy:before{content:"\e64a"}.layui-icon-more-vertical:before{content:"\e671"}.layui-icon-zhuti2:before{content:"\e66c"}.layui-icon-loading:before{content:"\e63d"}.layui-icon-xieti:before{content:"\e644"}.layui-icon-refresh-1:before{content:"\e666"}.layui-icon-rmb:before{content:"\e65e"}.layui-icon-home:before{content:"\e68e"}.layui-icon-user:before{content:"\e770"}.layui-icon-notice:before{content:"\e667"}.layui-icon-voice:before{content:"\e688"}.layui-icon-download:before{content:"\e681"}.layui-icon-snowflake:before{content:"\e6b1"}.layui-icon-yemian1:before{content:"\e655"}.layui-icon-template:before{content:"\e663"}.layui-icon-auz:before{content:"\e672"}.layui-icon-console:before{content:"\e665"}.layui-icon-app:before{content:"\e653"}.layui-icon-xiayiye:before{content:"\e65a"}.layui-icon-website:before{content:"\e7ae"}.layui-icon-xiayiye1:before{content:"\e65b"}.layui-icon-component:before{content:"\e857"}.layui-icon-more:before{content:"\e65f"}.layui-icon-shrink-right:before{content:"\e668"}.layui-icon-spread-left:before{content:"\e66b"}.layui-icon-camera:before{content:"\e660"}.layui-icon-note:before{content:"\e66e"}.layui-icon-refresh:before{content:"\e669"}.layui-icon-nv:before{content:"\e661"}.layui-icon-nan:before{content:"\e662"}.layui-icon-senior:before{content:"\e674"}.layui-icon-theme:before{content:"\e66a"}.layui-icon-tread:before{content:"\e6c5"}.layui-icon-praise:before{content:"\e6c6"}.layui-icon-star-fill:before{content:"\e658"}.layui-icon-template-1:before{content:"\e656"}.layui-icon-loading-2:before{content:"\e66d"}.layui-main{width:1140px;margin:0 auto}.layui-header{z-index:1000;height:60px}.layui-header a:hover{transition:all .5s;-webkit-transition:all .5s}.layui-side{position:fixed;top:0;bottom:0;z-index:999;width:200px;overflow-x:hidden}.layui-side-scroll{width:220px;height:100%;overflow-x:hidden}.layui-body{position:absolute;left:200px;right:0;top:0;bottom:0;z-index:998;width:auto;overflow:hidden;overflow-y:auto;box-sizing:border-box}.layui-layout-body{overflow:hidden}.layui-layout-admin .layui-header{background-color:#23262E}.layui-layout-admin .layui-side{top:60px;width:200px;overflow-x:hidden}.layui-layout-admin .layui-body{top:60px;bottom:44px}.layui-layout-admin .layui-main{width:auto;margin:0 15px}.layui-layout-admin .layui-footer{position:fixed;left:200px;right:0;bottom:0;height:44px;line-height:44px;padding:0 15px;background-color:#eee}.layui-layout-admin .layui-logo{position:absolute;left:0;top:0;width:200px;height:100%;line-height:60px;text-align:center;color:#009688;font-size:16px}.layui-layout-admin .layui-header .layui-nav{background:0 0}.layui-layout-left{position:absolute!important;left:200px;top:0}.layui-layout-right{position:absolute!important;right:0;top:0}.layui-container{position:relative;margin:0 auto;padding:0 15px;box-sizing:border-box}.layui-fluid{position:relative;margin:0 auto;padding:0 15px}.layui-row:after,.layui-row:before{content:'';display:block;clear:both}.layui-col-lg1,.layui-col-lg10,.layui-col-lg11,.layui-col-lg12,.layui-col-lg2,.layui-col-lg3,.layui-col-lg4,.layui-col-lg5,.layui-col-lg6,.layui-col-lg7,.layui-col-lg8,.layui-col-lg9,.layui-col-md1,.layui-col-md10,.layui-col-md11,.layui-col-md12,.layui-col-md2,.layui-col-md3,.layui-col-md4,.layui-col-md5,.layui-col-md6,.layui-col-md7,.layui-col-md8,.layui-col-md9,.layui-col-sm1,.layui-col-sm10,.layui-col-sm11,.layui-col-sm12,.layui-col-sm2,.layui-col-sm3,.layui-col-sm4,.layui-col-sm5,.layui-col-sm6,.layui-col-sm7,.layui-col-sm8,.layui-col-sm9,.layui-col-xs1,.layui-col-xs10,.layui-col-xs11,.layui-col-xs12,.layui-col-xs2,.layui-col-xs3,.layui-col-xs4,.layui-col-xs5,.layui-col-xs6,.layui-col-xs7,.layui-col-xs8,.layui-col-xs9{position:relative;display:block;box-sizing:border-box}.layui-col-xs1,.layui-col-xs10,.layui-col-xs11,.layui-col-xs12,.layui-col-xs2,.layui-col-xs3,.layui-col-xs4,.layui-col-xs5,.layui-col-xs6,.layui-col-xs7,.layui-col-xs8,.layui-col-xs9{float:left}.layui-col-xs1{width:8.33333333%}.layui-col-xs2{width:16.66666667%}.layui-col-xs3{width:25%}.layui-col-xs4{width:33.33333333%}.layui-col-xs5{width:41.66666667%}.layui-col-xs6{width:50%}.layui-col-xs7{width:58.33333333%}.layui-col-xs8{width:66.66666667%}.layui-col-xs9{width:75%}.layui-col-xs10{width:83.33333333%}.layui-col-xs11{width:91.66666667%}.layui-col-xs12{width:100%}.layui-col-xs-offset1{margin-left:8.33333333%}.layui-col-xs-offset2{margin-left:16.66666667%}.layui-col-xs-offset3{margin-left:25%}.layui-col-xs-offset4{margin-left:33.33333333%}.layui-col-xs-offset5{margin-left:41.66666667%}.layui-col-xs-offset6{margin-left:50%}.layui-col-xs-offset7{margin-left:58.33333333%}.layui-col-xs-offset8{margin-left:66.66666667%}.layui-col-xs-offset9{margin-left:75%}.layui-col-xs-offset10{margin-left:83.33333333%}.layui-col-xs-offset11{margin-left:91.66666667%}.layui-col-xs-offset12{margin-left:100%}@media screen and (max-width:768px){.layui-hide-xs{display:none!important}.layui-show-xs-block{display:block!important}.layui-show-xs-inline{display:inline!important}.layui-show-xs-inline-block{display:inline-block!important}}@media screen and (min-width:768px){.layui-container{width:750px}.layui-hide-sm{display:none!important}.layui-show-sm-block{display:block!important}.layui-show-sm-inline{display:inline!important}.layui-show-sm-inline-block{display:inline-block!important}.layui-col-sm1,.layui-col-sm10,.layui-col-sm11,.layui-col-sm12,.layui-col-sm2,.layui-col-sm3,.layui-col-sm4,.layui-col-sm5,.layui-col-sm6,.layui-col-sm7,.layui-col-sm8,.layui-col-sm9{float:left}.layui-col-sm1{width:8.33333333%}.layui-col-sm2{width:16.66666667%}.layui-col-sm3{width:25%}.layui-col-sm4{width:33.33333333%}.layui-col-sm5{width:41.66666667%}.layui-col-sm6{width:50%}.layui-col-sm7{width:58.33333333%}.layui-col-sm8{width:66.66666667%}.layui-col-sm9{width:75%}.layui-col-sm10{width:83.33333333%}.layui-col-sm11{width:91.66666667%}.layui-col-sm12{width:100%}.layui-col-sm-offset1{margin-left:8.33333333%}.layui-col-sm-offset2{margin-left:16.66666667%}.layui-col-sm-offset3{margin-left:25%}.layui-col-sm-offset4{margin-left:33.33333333%}.layui-col-sm-offset5{margin-left:41.66666667%}.layui-col-sm-offset6{margin-left:50%}.layui-col-sm-offset7{margin-left:58.33333333%}.layui-col-sm-offset8{margin-left:66.66666667%}.layui-col-sm-offset9{margin-left:75%}.layui-col-sm-offset10{margin-left:83.33333333%}.layui-col-sm-offset11{margin-left:91.66666667%}.layui-col-sm-offset12{margin-left:100%}}@media screen and (min-width:992px){.layui-container{width:970px}.layui-hide-md{display:none!important}.layui-show-md-block{display:block!important}.layui-show-md-inline{display:inline!important}.layui-show-md-inline-block{display:inline-block!important}.layui-col-md1,.layui-col-md10,.layui-col-md11,.layui-col-md12,.layui-col-md2,.layui-col-md3,.layui-col-md4,.layui-col-md5,.layui-col-md6,.layui-col-md7,.layui-col-md8,.layui-col-md9{float:left}.layui-col-md1{width:8.33333333%}.layui-col-md2{width:16.66666667%}.layui-col-md3{width:25%}.layui-col-md4{width:33.33333333%}.layui-col-md5{width:41.66666667%}.layui-col-md6{width:50%}.layui-col-md7{width:58.33333333%}.layui-col-md8{width:66.66666667%}.layui-col-md9{width:75%}.layui-col-md10{width:83.33333333%}.layui-col-md11{width:91.66666667%}.layui-col-md12{width:100%}.layui-col-md-offset1{margin-left:8.33333333%}.layui-col-md-offset2{margin-left:16.66666667%}.layui-col-md-offset3{margin-left:25%}.layui-col-md-offset4{margin-left:33.33333333%}.layui-col-md-offset5{margin-left:41.66666667%}.layui-col-md-offset6{margin-left:50%}.layui-col-md-offset7{margin-left:58.33333333%}.layui-col-md-offset8{margin-left:66.66666667%}.layui-col-md-offset9{margin-left:75%}.layui-col-md-offset10{margin-left:83.33333333%}.layui-col-md-offset11{margin-left:91.66666667%}.layui-col-md-offset12{margin-left:100%}}@media screen and (min-width:1200px){.layui-container{width:1170px}.layui-hide-lg{display:none!important}.layui-show-lg-block{display:block!important}.layui-show-lg-inline{display:inline!important}.layui-show-lg-inline-block{display:inline-block!important}.layui-col-lg1,.layui-col-lg10,.layui-col-lg11,.layui-col-lg12,.layui-col-lg2,.layui-col-lg3,.layui-col-lg4,.layui-col-lg5,.layui-col-lg6,.layui-col-lg7,.layui-col-lg8,.layui-col-lg9{float:left}.layui-col-lg1{width:8.33333333%}.layui-col-lg2{width:16.66666667%}.layui-col-lg3{width:25%}.layui-col-lg4{width:33.33333333%}.layui-col-lg5{width:41.66666667%}.layui-col-lg6{width:50%}.layui-col-lg7{width:58.33333333%}.layui-col-lg8{width:66.66666667%}.layui-col-lg9{width:75%}.layui-col-lg10{width:83.33333333%}.layui-col-lg11{width:91.66666667%}.layui-col-lg12{width:100%}.layui-col-lg-offset1{margin-left:8.33333333%}.layui-col-lg-offset2{margin-left:16.66666667%}.layui-col-lg-offset3{margin-left:25%}.layui-col-lg-offset4{margin-left:33.33333333%}.layui-col-lg-offset5{margin-left:41.66666667%}.layui-col-lg-offset6{margin-left:50%}.layui-col-lg-offset7{margin-left:58.33333333%}.layui-col-lg-offset8{margin-left:66.66666667%}.layui-col-lg-offset9{margin-left:75%}.layui-col-lg-offset10{margin-left:83.33333333%}.layui-col-lg-offset11{margin-left:91.66666667%}.layui-col-lg-offset12{margin-left:100%}}.layui-col-space1{margin:-.5px}.layui-col-space1>*{padding:.5px}.layui-col-space3{margin:-1.5px}.layui-col-space3>*{padding:1.5px}.layui-col-space5{margin:-2.5px}.layui-col-space5>*{padding:2.5px}.layui-col-space8{margin:-3.5px}.layui-col-space8>*{padding:3.5px}.layui-col-space10{margin:-5px}.layui-col-space10>*{padding:5px}.layui-col-space12{margin:-6px}.layui-col-space12>*{padding:6px}.layui-col-space15{margin:-7.5px}.layui-col-space15>*{padding:7.5px}.layui-col-space18{margin:-9px}.layui-col-space18>*{padding:9px}.layui-col-space20{margin:-10px}.layui-col-space20>*{padding:10px}.layui-col-space22{margin:-11px}.layui-col-space22>*{padding:11px}.layui-col-space25{margin:-12.5px}.layui-col-space25>*{padding:12.5px}.layui-col-space30{margin:-15px}.layui-col-space30>*{padding:15px}.layui-btn,.layui-input,.layui-select,.layui-textarea,.layui-upload-button{outline:0;-webkit-appearance:none;transition:all .3s;-webkit-transition:all .3s;box-sizing:border-box}.layui-elem-quote{margin-bottom:10px;padding:15px;line-height:22px;border-left:5px solid #009688;border-radius:0 2px 2px 0;background-color:#f2f2f2}.layui-quote-nm{border-style:solid;border-width:1px 1px 1px 5px;background:0 0}.layui-elem-field{margin-bottom:10px;padding:0;border-width:1px;border-style:solid}.layui-elem-field legend{margin-left:20px;padding:0 10px;font-size:20px;font-weight:300}.layui-field-title{margin:10px 0 20px;border-width:1px 0 0}.layui-field-box{padding:10px 15px}.layui-field-title .layui-field-box{padding:10px 0}.layui-progress{position:relative;height:6px;border-radius:20px;background-color:#e2e2e2}.layui-progress-bar{position:absolute;left:0;top:0;width:0;max-width:100%;height:6px;border-radius:20px;text-align:right;background-color:#5FB878;transition:all .3s;-webkit-transition:all .3s}.layui-progress-big,.layui-progress-big .layui-progress-bar{height:18px;line-height:18px}.layui-progress-text{position:relative;top:-20px;line-height:18px;font-size:12px;color:#666}.layui-progress-big .layui-progress-text{position:static;padding:0 10px;color:#fff}.layui-collapse{border-width:1px;border-style:solid;border-radius:2px}.layui-colla-content,.layui-colla-item{border-top-width:1px;border-top-style:solid}.layui-colla-item:first-child{border-top:none}.layui-colla-title{position:relative;height:42px;line-height:42px;padding:0 15px 0 35px;color:#333;background-color:#f2f2f2;cursor:pointer;font-size:14px}.layui-colla-content{display:none;padding:10px 15px;line-height:22px;color:#666}.layui-colla-icon{position:absolute;left:15px;top:0;font-size:14px}.layui-card-body,.layui-card-header,.layui-form-label,.layui-form-mid,.layui-form-select,.layui-input-block,.layui-input-inline,.layui-textarea{position:relative}.layui-card{margin-bottom:15px;border-radius:2px;background-color:#fff;box-shadow:0 1px 2px 0 rgba(0,0,0,.05)}.layui-card:last-child{margin-bottom:0}.layui-card-header{height:42px;line-height:42px;padding:0 15px;border-bottom:1px solid #f6f6f6;color:#333;border-radius:2px 2px 0 0;font-size:14px}.layui-bg-black,.layui-bg-blue,.layui-bg-cyan,.layui-bg-green,.layui-bg-orange,.layui-bg-red{color:#fff!important}.layui-card-body{padding:10px 15px;line-height:24px}.layui-card-body .layui-table{margin:5px 0}.layui-card .layui-tab{margin:0}.layui-panel-window{position:relative;padding:15px;border-radius:0;border-top:5px solid #E6E6E6;background-color:#fff}.layui-bg-red{background-color:#FF5722!important}.layui-bg-orange{background-color:#FFB800!important}.layui-bg-green{background-color:#009688!important}.layui-bg-cyan{background-color:#2F4056!important}.layui-bg-blue{background-color:#1E9FFF!important}.layui-bg-black{background-color:#393D49!important}.layui-bg-gray{background-color:#eee!important;color:#666!important}.layui-badge-rim,.layui-colla-content,.layui-colla-item,.layui-collapse,.layui-elem-field,.layui-form-pane .layui-form-item[pane],.layui-form-pane .layui-form-label,.layui-input,.layui-layedit,.layui-layedit-tool,.layui-quote-nm,.layui-select,.layui-tab-bar,.layui-tab-card,.layui-tab-title,.layui-tab-title .layui-this:after,.layui-textarea{border-color:#e6e6e6}.layui-timeline-item:before,hr{background-color:#e6e6e6}.layui-text{line-height:22px;font-size:14px;color:#666}.layui-text h1,.layui-text h2,.layui-text h3{font-weight:500;color:#333}.layui-text h1{font-size:30px}.layui-text h2{font-size:24px}.layui-text h3{font-size:18px}.layui-text a:not(.layui-btn){color:#01AAED}.layui-text a:not(.layui-btn):hover{text-decoration:underline}.layui-text ul{padding:5px 0 5px 15px}.layui-text ul li{margin-top:5px;list-style-type:disc}.layui-text em,.layui-word-aux{color:#999!important;padding:0 5px!important}.layui-btn{display:inline-block;height:38px;line-height:38px;padding:0 18px;background-color:#009688;color:#fff;white-space:nowrap;text-align:center;font-size:14px;border:none;border-radius:2px;cursor:pointer}.layui-btn:hover{opacity:.8;filter:alpha(opacity=80);color:#fff}.layui-btn:active{opacity:1;filter:alpha(opacity=100)}.layui-btn+.layui-btn{margin-left:10px}.layui-btn-container{font-size:0}.layui-btn-container .layui-btn{margin-right:10px;margin-bottom:10px}.layui-btn-container .layui-btn+.layui-btn{margin-left:0}.layui-table .layui-btn-container .layui-btn{margin-bottom:9px}.layui-btn-radius{border-radius:100px}.layui-btn .layui-icon{margin-right:3px;font-size:18px;vertical-align:bottom;vertical-align:middle\9}.layui-btn-primary{border:1px solid #C9C9C9;background-color:#fff;color:#555}.layui-btn-primary:hover{border-color:#009688;color:#333}.layui-btn-normal{background-color:#1E9FFF}.layui-btn-warm{background-color:#FFB800}.layui-btn-danger{background-color:#FF5722}.layui-btn-disabled,.layui-btn-disabled:active,.layui-btn-disabled:hover{border:1px solid #e6e6e6;background-color:#FBFBFB;color:#C9C9C9;cursor:not-allowed;opacity:1}.layui-btn-lg{height:44px;line-height:44px;padding:0 25px;font-size:16px}.layui-btn-sm{height:30px;line-height:30px;padding:0 10px;font-size:12px}.layui-btn-sm i{font-size:16px!important}.layui-btn-xs{height:22px;line-height:22px;padding:0 5px;font-size:12px}.layui-btn-xs i{font-size:14px!important}.layui-btn-group{display:inline-block;vertical-align:middle;font-size:0}.layui-btn-group .layui-btn{margin-left:0!important;margin-right:0!important;border-left:1px solid rgba(255,255,255,.5);border-radius:0}.layui-btn-group .layui-btn-primary{border-left:none}.layui-btn-group .layui-btn-primary:hover{border-color:#C9C9C9;color:#009688}.layui-btn-group .layui-btn:first-child{border-left:none;border-radius:2px 0 0 2px}.layui-btn-group .layui-btn-primary:first-child{border-left:1px solid #c9c9c9}.layui-btn-group .layui-btn:last-child{border-radius:0 2px 2px 0}.layui-btn-group .layui-btn+.layui-btn{margin-left:0}.layui-btn-group+.layui-btn-group{margin-left:10px}.layui-btn-fluid{width:100%}.layui-input,.layui-select,.layui-textarea{height:38px;line-height:1.3;line-height:38px\9;border-width:1px;border-style:solid;background-color:#fff;border-radius:2px}.layui-input::-webkit-input-placeholder,.layui-select::-webkit-input-placeholder,.layui-textarea::-webkit-input-placeholder{line-height:1.3}.layui-input,.layui-textarea{display:block;width:100%;padding-left:10px}.layui-input:hover,.layui-textarea:hover{border-color:#D2D2D2!important}.layui-input:focus,.layui-textarea:focus{border-color:#C9C9C9!important}.layui-textarea{min-height:100px;height:auto;line-height:20px;padding:6px 10px;resize:vertical}.layui-select{padding:0 10px}.layui-form input[type=checkbox],.layui-form input[type=radio],.layui-form select{display:none}.layui-form [lay-ignore]{display:initial}.layui-form-item{margin-bottom:15px;clear:both;*zoom:1}.layui-form-item:after{content:'\20';clear:both;*zoom:1;display:block;height:0}.layui-form-label{float:left;display:block;padding:9px 15px;width:80px;font-weight:400;line-height:20px;text-align:right}.layui-form-label-col{display:block;float:none;padding:9px 0;line-height:20px;text-align:left}.layui-form-item .layui-inline{margin-bottom:5px;margin-right:10px}.layui-input-block{margin-left:110px;min-height:36px}.layui-input-inline{display:inline-block;vertical-align:middle}.layui-form-item .layui-input-inline{float:left;width:190px;margin-right:10px}.layui-form-text .layui-input-inline{width:auto}.layui-form-mid{float:left;display:block;padding:9px 0!important;line-height:20px;margin-right:10px}.layui-form-danger+.layui-form-select .layui-input,.layui-form-danger:focus{border-color:#FF5722!important}.layui-form-select .layui-input{padding-right:30px;cursor:pointer}.layui-form-select .layui-edge{position:absolute;right:10px;top:50%;margin-top:-3px;cursor:pointer;border-width:6px;border-top-color:#c2c2c2;border-top-style:solid;transition:all .3s;-webkit-transition:all .3s}.layui-form-select dl{display:none;position:absolute;left:0;top:42px;padding:5px 0;z-index:999;min-width:100%;border:1px solid #d2d2d2;max-height:300px;overflow-y:auto;background-color:#fff;border-radius:2px;box-shadow:0 2px 4px rgba(0,0,0,.12);box-sizing:border-box}.layui-form-select dl dd,.layui-form-select dl dt{padding:0 10px;line-height:36px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.layui-form-select dl dt{font-size:12px;color:#999}.layui-form-select dl dd{cursor:pointer}.layui-form-select dl dd:hover{background-color:#f2f2f2}.layui-form-select .layui-select-group dd{padding-left:20px}.layui-form-select dl dd.layui-select-tips{padding-left:10px!important;color:#999}.layui-form-select dl dd.layui-this{background-color:#5FB878;color:#fff}.layui-form-checkbox,.layui-form-select dl dd.layui-disabled{background-color:#fff}.layui-form-selected dl{display:block}.layui-form-checkbox,.layui-form-checkbox *,.layui-form-switch{display:inline-block;vertical-align:middle}.layui-form-selected .layui-edge{margin-top:-9px;-webkit-transform:rotate(180deg);transform:rotate(180deg);margin-top:-3px\9}:root .layui-form-selected .layui-edge{margin-top:-9px\0/IE9}.layui-form-selectup dl{top:auto;bottom:42px}.layui-select-none{margin:5px 0;text-align:center;color:#999}.layui-select-disabled .layui-disabled{border-color:#eee!important}.layui-select-disabled .layui-edge{border-top-color:#d2d2d2}.layui-form-checkbox{position:relative;height:30px;line-height:28px;margin-right:10px;padding-right:30px;border:1px solid #d2d2d2;cursor:pointer;font-size:0;border-radius:2px;-webkit-transition:.1s linear;transition:.1s linear;box-sizing:border-box}.layui-form-checkbox:hover{border:1px solid #c2c2c2}.layui-form-checkbox span{padding:0 10px;height:100%;font-size:14px;background-color:#d2d2d2;color:#fff;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.layui-form-checkbox:hover span{background-color:#c2c2c2}.layui-form-checkbox i{position:absolute;right:0;width:30px;color:#fff;font-size:20px;text-align:center}.layui-form-checkbox:hover i{color:#c2c2c2}.layui-form-checked,.layui-form-checked:hover{border-color:#5FB878}.layui-form-checked span,.layui-form-checked:hover span{background-color:#5FB878}.layui-form-checked i,.layui-form-checked:hover i{color:#5FB878}.layui-form-item .layui-form-checkbox{margin-top:4px}.layui-form-checkbox[lay-skin=primary]{height:auto!important;line-height:normal!important;border:none!important;margin-right:0;padding-right:0;background:0 0}.layui-form-checkbox[lay-skin=primary] span{float:right;padding-right:15px;line-height:18px;background:0 0;color:#666}.layui-form-checkbox[lay-skin=primary] i{position:relative;top:0;width:16px;height:16px;line-height:16px;border:1px solid #d2d2d2;font-size:12px;border-radius:2px;background-color:#fff;-webkit-transition:.1s linear;transition:.1s linear}.layui-form-checkbox[lay-skin=primary]:hover i{border-color:#5FB878;color:#fff}.layui-form-checked[lay-skin=primary] i{border-color:#5FB878;background-color:#5FB878;color:#fff}.layui-checkbox-disbaled[lay-skin=primary] span{background:0 0!important;color:#c2c2c2}.layui-checkbox-disbaled[lay-skin=primary]:hover i{border-color:#d2d2d2}.layui-form-item .layui-form-checkbox[lay-skin=primary]{margin-top:10px}.layui-form-switch{position:relative;height:22px;line-height:22px;width:42px;padding:0 5px;margin-top:8px;border:1px solid #d2d2d2;border-radius:20px;cursor:pointer;background-color:#fff;-webkit-transition:.1s linear;transition:.1s linear}.layui-form-switch i{position:absolute;left:5px;top:3px;width:16px;height:16px;border-radius:20px;background-color:#d2d2d2;-webkit-transition:.1s linear;transition:.1s linear}.layui-form-switch em{position:absolute;right:5px;top:0;width:25px;padding:0!important;text-align:center!important;color:#999!important;font-style:normal!important;font-size:12px}.layui-form-onswitch{border-color:#5FB878;background-color:#5FB878}.layui-form-onswitch i{left:32px;background-color:#fff}.layui-form-onswitch em{left:5px;right:auto;color:#fff!important}.layui-checkbox-disbaled{border-color:#e2e2e2!important}.layui-checkbox-disbaled span{background-color:#e2e2e2!important}.layui-checkbox-disbaled:hover i{color:#fff!important}[lay-radio]{display:none}.layui-form-radio,.layui-form-radio *{display:inline-block;vertical-align:middle}.layui-form-radio{line-height:28px;margin:6px 10px 0 0;padding-right:10px;cursor:pointer;font-size:0}.layui-form-radio *{font-size:14px}.layui-form-radio>i{margin-right:8px;font-size:22px;color:#c2c2c2}.layui-form-radio>i:hover,.layui-form-radioed>i{color:#5FB878}.layui-radio-disbaled>i{color:#e2e2e2!important}.layui-form-pane .layui-form-label{width:110px;padding:8px 15px;height:38px;line-height:20px;border-width:1px;border-style:solid;border-radius:2px 0 0 2px;text-align:center;background-color:#FBFBFB;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;box-sizing:border-box}.layui-form-pane .layui-input-inline{margin-left:-1px}.layui-form-pane .layui-input-block{margin-left:110px;left:-1px}.layui-form-pane .layui-input{border-radius:0 2px 2px 0}.layui-form-pane .layui-form-text .layui-form-label{float:none;width:100%;border-radius:2px;box-sizing:border-box;text-align:left}.layui-form-pane .layui-form-text .layui-input-inline{display:block;margin:0;top:-1px;clear:both}.layui-form-pane .layui-form-text .layui-input-block{margin:0;left:0;top:-1px}.layui-form-pane .layui-form-text .layui-textarea{min-height:100px;border-radius:0 0 2px 2px}.layui-form-pane .layui-form-checkbox{margin:4px 0 4px 10px}.layui-form-pane .layui-form-radio,.layui-form-pane .layui-form-switch{margin-top:6px;margin-left:10px}.layui-form-pane .layui-form-item[pane]{position:relative;border-width:1px;border-style:solid}.layui-form-pane .layui-form-item[pane] .layui-form-label{position:absolute;left:0;top:0;height:100%;border-width:0 1px 0 0}.layui-form-pane .layui-form-item[pane] .layui-input-inline{margin-left:110px}@media screen and (max-width:450px){.layui-form-item .layui-form-label{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.layui-form-item .layui-inline{display:block;margin-right:0;margin-bottom:20px;clear:both}.layui-form-item .layui-inline:after{content:'\20';clear:both;display:block;height:0}.layui-form-item .layui-input-inline{display:block;float:none;left:-3px;width:auto;margin:0 0 10px 112px}.layui-form-item .layui-input-inline+.layui-form-mid{margin-left:110px;top:-5px;padding:0}.layui-form-item .layui-form-checkbox{margin-right:5px;margin-bottom:5px}}.layui-layedit{border-width:1px;border-style:solid;border-radius:2px}.layui-layedit-tool{padding:3px 5px;border-bottom-width:1px;border-bottom-style:solid;font-size:0}.layedit-tool-fixed{position:fixed;top:0;border-top:1px solid #e2e2e2}.layui-layedit-tool .layedit-tool-mid,.layui-layedit-tool .layui-icon{display:inline-block;vertical-align:middle;text-align:center;font-size:14px}.layui-layedit-tool .layui-icon{position:relative;width:32px;height:30px;line-height:30px;margin:3px 5px;color:#777;cursor:pointer;border-radius:2px}.layui-layedit-tool .layui-icon:hover{color:#393D49}.layui-layedit-tool .layui-icon:active{color:#000}.layui-layedit-tool .layedit-tool-active{background-color:#e2e2e2;color:#000}.layui-layedit-tool .layui-disabled,.layui-layedit-tool .layui-disabled:hover{color:#d2d2d2;cursor:not-allowed}.layui-layedit-tool .layedit-tool-mid{width:1px;height:18px;margin:0 10px;background-color:#d2d2d2}.layedit-tool-html{width:50px!important;font-size:30px!important}.layedit-tool-b,.layedit-tool-code,.layedit-tool-help{font-size:16px!important}.layedit-tool-d,.layedit-tool-face,.layedit-tool-image,.layedit-tool-unlink{font-size:18px!important}.layedit-tool-image input{position:absolute;font-size:0;left:0;top:0;width:100%;height:100%;opacity:.01;filter:Alpha(opacity=1);cursor:pointer}.layui-layedit-iframe iframe{display:block;width:100%}#LAY_layedit_code{overflow:hidden}.layui-laypage{display:inline-block;*display:inline;*zoom:1;vertical-align:middle;margin:10px 0;font-size:0}.layui-laypage>a:first-child,.layui-laypage>a:first-child em{border-radius:2px 0 0 2px}.layui-laypage>a:last-child,.layui-laypage>a:last-child em{border-radius:0 2px 2px 0}.layui-laypage>:first-child{margin-left:0!important}.layui-laypage>:last-child{margin-right:0!important}.layui-laypage a,.layui-laypage button,.layui-laypage input,.layui-laypage select,.layui-laypage span{border:1px solid #e2e2e2}.layui-laypage a,.layui-laypage span{display:inline-block;*display:inline;*zoom:1;vertical-align:middle;padding:0 15px;height:28px;line-height:28px;margin:0 -1px 5px 0;background-color:#fff;color:#333;font-size:12px}.layui-laypage a:hover{color:#009688}.layui-laypage em{font-style:normal}.layui-laypage .layui-laypage-spr{color:#999;font-weight:700}.layui-laypage a{text-decoration:none}.layui-laypage .layui-laypage-curr{position:relative}.layui-laypage .layui-laypage-curr em{position:relative;color:#fff}.layui-laypage .layui-laypage-curr .layui-laypage-em{position:absolute;left:-1px;top:-1px;padding:1px;width:100%;height:100%;background-color:#009688}.layui-laypage-em{border-radius:2px}.layui-laypage-next em,.layui-laypage-prev em{font-family:Sim sun;font-size:16px}.layui-laypage .layui-laypage-count,.layui-laypage .layui-laypage-limits,.layui-laypage .layui-laypage-skip{margin-left:10px;margin-right:10px;padding:0;border:none}.layui-laypage .layui-laypage-limits{vertical-align:top}.layui-laypage select{height:22px;padding:3px;border-radius:2px;cursor:pointer}.layui-laypage .layui-laypage-skip{height:30px;line-height:30px;color:#999}.layui-laypage button,.layui-laypage input{height:30px;line-height:30px;border-radius:2px;vertical-align:top;background-color:#fff;box-sizing:border-box}.layui-laypage input{display:inline-block;width:40px;margin:0 10px;padding:0 3px;text-align:center}.layui-laypage input:focus,.layui-laypage select:focus{border-color:#009688!important}.layui-laypage button{margin-left:10px;padding:0 10px;cursor:pointer}.layui-table,.layui-table-view{margin:10px 0}.layui-flow-more{margin:10px 0;text-align:center;color:#999;font-size:14px}.layui-flow-more a{height:32px;line-height:32px}.layui-flow-more a *{display:inline-block;vertical-align:top}.layui-flow-more a cite{padding:0 20px;border-radius:3px;background-color:#eee;color:#333;font-style:normal}.layui-flow-more a cite:hover{opacity:.8}.layui-flow-more a i{font-size:30px;color:#737383}.layui-table{width:100%;background-color:#fff;color:#666}.layui-table tr{transition:all .3s;-webkit-transition:all .3s}.layui-table th{text-align:left;font-weight:400}.layui-table tbody tr:hover,.layui-table thead tr,.layui-table-click,.layui-table-header,.layui-table-hover,.layui-table-mend,.layui-table-patch,.layui-table-tool,.layui-table[lay-even] tr:nth-child(even){background-color:#f2f2f2}.layui-table td,.layui-table th,.layui-table-fixed-r,.layui-table-header,.layui-table-page,.layui-table-tips-main,.layui-table-tool,.layui-table-view,.layui-table[lay-skin=line],.layui-table[lay-skin=row]{border-width:1px;border-style:solid;border-color:#e6e6e6}.layui-table td,.layui-table th{position:relative;padding:9px 15px;min-height:20px;line-height:20px;font-size:14px}.layui-table[lay-skin=line] td,.layui-table[lay-skin=line] th{border-width:0 0 1px}.layui-table[lay-skin=row] td,.layui-table[lay-skin=row] th{border-width:0 1px 0 0}.layui-table[lay-skin=nob] td,.layui-table[lay-skin=nob] th{border:none}.layui-table img{max-width:100px}.layui-table[lay-size=lg] td,.layui-table[lay-size=lg] th{padding:15px 30px}.layui-table-view .layui-table[lay-size=lg] .layui-table-cell{height:40px;line-height:40px}.layui-table[lay-size=sm] td,.layui-table[lay-size=sm] th{font-size:12px;padding:5px 10px}.layui-table-view .layui-table[lay-size=sm] .layui-table-cell{height:20px;line-height:20px}.layui-table[lay-data]{display:none}.layui-table-box,.layui-table-view{position:relative;overflow:hidden}.layui-table-view .layui-table{position:relative;width:auto;margin:0}.layui-table-body,.layui-table-header .layui-table,.layui-table-page{margin-bottom:-1px}.layui-table-view .layui-table[lay-skin=line]{border-width:0 1px 0 0}.layui-table-view .layui-table[lay-skin=row]{border-width:0 0 1px}.layui-table-view .layui-table td,.layui-table-view .layui-table th{padding:5px 0;border-top:none;border-left:none}.layui-table-view .layui-table td{cursor:default}.layui-table-view .layui-form-checkbox[lay-skin=primary] i{width:18px;height:18px}.layui-table-header{border-width:0 0 1px;overflow:hidden}.layui-table-sort{width:10px;height:20px;margin-left:5px;cursor:pointer!important}.layui-table-sort .layui-edge{position:absolute;left:5px;border-width:5px}.layui-table-sort .layui-table-sort-asc{top:4px;border-top:none;border-bottom-style:solid;border-bottom-color:#b2b2b2}.layui-table-sort .layui-table-sort-asc:hover{border-bottom-color:#666}.layui-table-sort .layui-table-sort-desc{bottom:4px;border-bottom:none;border-top-style:solid;border-top-color:#b2b2b2}.layui-table-sort .layui-table-sort-desc:hover{border-top-color:#666}.layui-table-sort[lay-sort=asc] .layui-table-sort-asc{border-bottom-color:#000}.layui-table-sort[lay-sort=desc] .layui-table-sort-desc{border-top-color:#000}.layui-table-cell{height:28px;line-height:28px;padding:0 15px;position:relative;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;box-sizing:border-box}.layui-table-cell .layui-form-checkbox[lay-skin=primary]{top:-1px;vertical-align:middle}.layui-table-cell .layui-table-link{color:#01AAED}.laytable-cell-checkbox,.laytable-cell-numbers,.laytable-cell-space{padding:0;text-align:center}.layui-table-body{position:relative;overflow:auto;margin-right:-1px}.layui-table-body .layui-none{line-height:40px;text-align:center;color:#999}.layui-table-fixed{position:absolute;left:0;top:0}.layui-table-fixed .layui-table-body{overflow:hidden}.layui-table-fixed-l{box-shadow:0 -1px 8px rgba(0,0,0,.08)}.layui-table-fixed-r{left:auto;right:-1px;border-width:0 0 0 1px;box-shadow:-1px 0 8px rgba(0,0,0,.08)}.layui-table-fixed-r .layui-table-header{position:relative;overflow:visible}.layui-table-mend{position:absolute;right:-49px;top:0;height:100%;width:50px}.layui-table-tool{position:relative;width:100%;height:50px;line-height:30px;padding:10px 15px;border-width:0 0 1px}.layui-table-page{position:relative;width:100%;padding:7px 7px 0;border-width:1px 0 0;height:41px;font-size:12px}.layui-table-page>div{height:26px}.layui-table-page .layui-laypage{margin:0}.layui-table-page .layui-laypage a,.layui-table-page .layui-laypage span{height:26px;line-height:26px;margin-bottom:10px;border:none;background:0 0}.layui-table-page .layui-laypage a,.layui-table-page .layui-laypage span.layui-laypage-curr{padding:0 12px}.layui-table-page .layui-laypage span{margin-left:0;padding:0}.layui-table-page .layui-laypage .layui-laypage-prev{margin-left:-7px!important}.layui-table-page .layui-laypage .layui-laypage-curr .layui-laypage-em{left:0;top:0;padding:0}.layui-table-page .layui-laypage button,.layui-table-page .layui-laypage input{height:26px;line-height:26px}.layui-table-page .layui-laypage input{width:40px}.layui-table-page .layui-laypage button{padding:0 10px}.layui-table-page select{height:18px}.layui-table-view select[lay-ignore]{display:inline-block}.layui-table-patch .layui-table-cell{padding:0;width:30px}.layui-table-edit{position:absolute;left:0;top:0;width:100%;height:100%;padding:0 14px 1px;border-radius:0;box-shadow:1px 1px 20px rgba(0,0,0,.15)}.layui-table-edit:focus{border-color:#5FB878!important}select.layui-table-edit{padding:0 0 0 10px;border-color:#C9C9C9}.layui-table-view .layui-form-checkbox,.layui-table-view .layui-form-radio,.layui-table-view .layui-form-switch{top:0;margin:0;box-sizing:content-box}.layui-table-view .layui-form-checkbox{top:-1px;height:26px;line-height:26px}body .layui-table-tips .layui-layer-content{background:0 0;padding:0;box-shadow:0 1px 6px rgba(0,0,0,.1)}.layui-table-tips-main{margin:-44px 0 0 -1px;max-height:150px;padding:8px 15px;font-size:14px;overflow-y:scroll;background-color:#fff;color:#333}.layui-code,.layui-upload-list{margin:10px 0}.layui-table-tips-c{position:absolute;right:-3px;top:-12px;width:18px;height:18px;padding:3px;text-align:center;font-weight:700;border-radius:100%;font-size:14px;cursor:pointer;background-color:#666}.layui-table-tips-c:hover{background-color:#999}.layui-upload-file{display:none!important;opacity:.01;filter:Alpha(opacity=1)}.layui-upload-drag,.layui-upload-form,.layui-upload-wrap{display:inline-block}.layui-upload-choose{padding:0 10px;color:#999}.layui-upload-drag{position:relative;padding:30px;border:1px dashed #e2e2e2;background-color:#fff;text-align:center;cursor:pointer;color:#999}.layui-upload-drag .layui-icon{font-size:50px;color:#009688}.layui-upload-drag[lay-over]{border-color:#009688}.layui-upload-iframe{position:absolute;width:0;height:0;border:0;visibility:hidden}.layui-upload-wrap{position:relative;vertical-align:middle}.layui-upload-wrap .layui-upload-file{display:block!important;position:absolute;left:0;top:0;z-index:10;font-size:100px;width:100%;height:100%;opacity:.01;filter:Alpha(opacity=1);cursor:pointer}.layui-code{position:relative;padding:15px;line-height:20px;border:1px solid #ddd;border-left-width:6px;background-color:#F2F2F2;color:#333;font-family:Courier New;font-size:12px}.layui-tree{line-height:26px}.layui-tree li{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.layui-tree li .layui-tree-spread,.layui-tree li a{display:inline-block;vertical-align:top;height:26px;*display:inline;*zoom:1;cursor:pointer}.layui-tree li a{font-size:0}.layui-tree li a i{font-size:16px}.layui-tree li a cite{padding:0 6px;font-size:14px;font-style:normal}.layui-tree li i{padding-left:6px;color:#333;-moz-user-select:none}.layui-tree li .layui-tree-check{font-size:13px}.layui-tree li .layui-tree-check:hover{color:#009E94}.layui-tree li ul{display:none;margin-left:20px}.layui-tree li .layui-tree-enter{line-height:24px;border:1px dotted #000}.layui-tree-drag{display:none;position:absolute;left:-666px;top:-666px;background-color:#f2f2f2;padding:5px 10px;border:1px dotted #000;white-space:nowrap}.layui-tree-drag i{padding-right:5px}.layui-nav{position:relative;padding:0 20px;background-color:#393D49;color:#fff;border-radius:2px;font-size:0;box-sizing:border-box}.layui-nav *{font-size:14px}.layui-nav .layui-nav-item{position:relative;display:inline-block;*display:inline;*zoom:1;vertical-align:middle;line-height:60px}.layui-nav .layui-nav-item a{display:block;padding:0 20px;color:#fff;color:rgba(255,255,255,.7);transition:all .3s;-webkit-transition:all .3s}.layui-nav .layui-this:after,.layui-nav-bar,.layui-nav-tree .layui-nav-itemed:after{position:absolute;left:0;top:0;width:0;height:5px;background-color:#5FB878;transition:all .2s;-webkit-transition:all .2s}.layui-nav-bar{z-index:1000}.layui-nav .layui-nav-item a:hover,.layui-nav .layui-this a{color:#fff}.layui-nav .layui-this:after{content:'';top:auto;bottom:0;width:100%}.layui-nav-img{width:30px;height:30px;margin-right:10px;border-radius:50%}.layui-nav .layui-nav-more{content:'';width:0;height:0;border-style:solid dashed dashed;border-color:#fff transparent transparent;overflow:hidden;cursor:pointer;transition:all .2s;-webkit-transition:all .2s;position:absolute;top:50%;right:3px;margin-top:-3px;border-width:6px;border-top-color:rgba(255,255,255,.7)}.layui-nav .layui-nav-mored,.layui-nav-itemed .layui-nav-more{margin-top:-9px;border-style:dashed dashed solid;border-color:transparent transparent #fff}.layui-nav-child{display:none;position:absolute;left:0;top:65px;min-width:100%;line-height:36px;padding:5px 0;box-shadow:0 2px 4px rgba(0,0,0,.12);border:1px solid #d2d2d2;background-color:#fff;z-index:100;border-radius:2px;white-space:nowrap}.layui-nav .layui-nav-child a{color:#333}.layui-nav .layui-nav-child a:hover{background-color:#f2f2f2;color:#000}.layui-nav-child dd{position:relative}.layui-nav .layui-nav-child dd.layui-this a,.layui-nav-child dd.layui-this{background-color:#5FB878;color:#fff}.layui-nav-child dd.layui-this:after{display:none}.layui-nav-tree{width:200px;padding:0}.layui-nav-tree .layui-nav-item{display:block;width:100%;line-height:45px}.layui-nav-tree .layui-nav-item a{height:45px;line-height:45px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.layui-nav-tree .layui-nav-item a:hover{background-color:#4E5465}.layui-nav-tree .layui-nav-bar{width:5px;height:0;background-color:#009688}.layui-nav-tree .layui-nav-child dd.layui-this,.layui-nav-tree .layui-nav-child dd.layui-this a,.layui-nav-tree .layui-this,.layui-nav-tree .layui-this>a,.layui-nav-tree .layui-this>a:hover{background-color:#009688;color:#fff}.layui-nav-tree .layui-this:after{display:none}.layui-nav-itemed>a,.layui-nav-tree .layui-nav-title a,.layui-nav-tree .layui-nav-title a:hover{color:#fff!important}.layui-nav-tree .layui-nav-child{position:relative;z-index:0;top:0;border:none;box-shadow:none}.layui-nav-tree .layui-nav-child a{height:40px;line-height:40px;color:#fff;color:rgba(255,255,255,.7)}.layui-nav-tree .layui-nav-child,.layui-nav-tree .layui-nav-child a:hover{background:0 0;color:#fff}.layui-nav-tree .layui-nav-more{top:20px;right:10px;margin:0}.layui-nav-itemed .layui-nav-more{top:14px}.layui-nav-itemed .layui-nav-child{display:block;padding:0;background-color:rgba(0,0,0,.3)!important}.layui-nav-side{position:fixed;top:0;bottom:0;left:0;overflow-x:hidden;z-index:999}.layui-bg-blue .layui-nav-bar,.layui-bg-blue .layui-nav-itemed:after,.layui-bg-blue .layui-this:after{background-color:#93D1FF}.layui-bg-blue .layui-nav-child dd.layui-this{background-color:#1E9FFF}.layui-bg-blue .layui-nav-itemed>a,.layui-nav-tree.layui-bg-blue .layui-nav-title a,.layui-nav-tree.layui-bg-blue .layui-nav-title a:hover{background-color:#007DDB!important}.layui-breadcrumb{visibility:hidden;font-size:0}.layui-breadcrumb>*{font-size:14px}.layui-breadcrumb a{color:#999!important}.layui-breadcrumb a:hover{color:#5FB878!important}.layui-breadcrumb a cite{color:#666;font-style:normal}.layui-breadcrumb span[lay-separator]{margin:0 10px;color:#999}.layui-tab{margin:10px 0;text-align:left!important}.layui-tab[overflow]>.layui-tab-title{overflow:hidden}.layui-tab-title{position:relative;left:0;height:40px;white-space:nowrap;font-size:0;border-bottom-width:1px;border-bottom-style:solid;transition:all .2s;-webkit-transition:all .2s}.layui-tab-title li{display:inline-block;*display:inline;*zoom:1;vertical-align:middle;font-size:14px;transition:all .2s;-webkit-transition:all .2s;position:relative;line-height:40px;min-width:65px;padding:0 15px;text-align:center;cursor:pointer}.layui-tab-title li a{display:block}.layui-tab-title .layui-this{color:#000}.layui-tab-title .layui-this:after{position:absolute;left:0;top:0;content:'';width:100%;height:41px;border-width:1px;border-style:solid;border-bottom-color:#fff;border-radius:2px 2px 0 0;box-sizing:border-box;pointer-events:none}.layui-tab-bar{position:absolute;right:0;top:0;z-index:10;width:30px;height:39px;line-height:39px;border-width:1px;border-style:solid;border-radius:2px;text-align:center;background-color:#fff;cursor:pointer}.layui-tab-bar .layui-icon{position:relative;display:inline-block;top:3px;transition:all .3s;-webkit-transition:all .3s}.layui-tab-item{display:none}.layui-tab-more{padding-right:30px;height:auto!important;white-space:normal!important}.layui-tab-more li.layui-this:after{border-bottom-color:#e2e2e2;border-radius:2px}.layui-tab-more .layui-tab-bar .layui-icon{top:-2px;top:3px\9;-webkit-transform:rotate(180deg);transform:rotate(180deg)}:root .layui-tab-more .layui-tab-bar .layui-icon{top:-2px\0/IE9}.layui-tab-content{padding:10px}.layui-tab-title li .layui-tab-close{position:relative;display:inline-block;width:18px;height:18px;line-height:20px;margin-left:8px;top:1px;text-align:center;font-size:14px;color:#c2c2c2;transition:all .2s;-webkit-transition:all .2s}.layui-tab-title li .layui-tab-close:hover{border-radius:2px;background-color:#FF5722;color:#fff}.layui-tab-brief>.layui-tab-title .layui-this{color:#009688}.layui-tab-brief>.layui-tab-more li.layui-this:after,.layui-tab-brief>.layui-tab-title .layui-this:after{border:none;border-radius:0;border-bottom:2px solid #5FB878}.layui-tab-brief[overflow]>.layui-tab-title .layui-this:after{top:-1px}.layui-tab-card{border-width:1px;border-style:solid;border-radius:2px;box-shadow:0 2px 5px 0 rgba(0,0,0,.1)}.layui-tab-card>.layui-tab-title{background-color:#f2f2f2}.layui-tab-card>.layui-tab-title li{margin-right:-1px;margin-left:-1px}.layui-tab-card>.layui-tab-title .layui-this{background-color:#fff}.layui-tab-card>.layui-tab-title .layui-this:after{border-top:none;border-width:1px;border-bottom-color:#fff}.layui-tab-card>.layui-tab-title .layui-tab-bar{height:40px;line-height:40px;border-radius:0;border-top:none;border-right:none}.layui-tab-card>.layui-tab-more .layui-this{background:0 0;color:#5FB878}.layui-tab-card>.layui-tab-more .layui-this:after{border:none}.layui-timeline{padding-left:5px}.layui-timeline-item{position:relative;padding-bottom:20px}.layui-timeline-axis{position:absolute;left:-5px;top:0;z-index:10;width:20px;height:20px;line-height:20px;background-color:#fff;color:#5FB878;border-radius:50%;text-align:center;cursor:pointer}.layui-timeline-axis:hover{color:#FF5722}.layui-timeline-item:before{content:'';position:absolute;left:5px;top:0;z-index:0;width:1px;height:100%}.layui-timeline-item:last-child:before{display:none}.layui-timeline-item:first-child:before{display:block}.layui-timeline-content{padding-left:25px}.layui-timeline-title{position:relative;margin-bottom:10px}.layui-badge,.layui-badge-dot,.layui-badge-rim{position:relative;display:inline-block;padding:0 6px;font-size:12px;text-align:center;background-color:#FF5722;color:#fff;border-radius:2px}.layui-badge{height:18px;line-height:18px}.layui-badge-dot{width:8px;height:8px;padding:0;border-radius:50%}.layui-badge-rim{height:18px;line-height:18px;border-width:1px;border-style:solid;background-color:#fff;color:#666}.layui-btn .layui-badge,.layui-btn .layui-badge-dot{margin-left:5px}.layui-nav .layui-badge,.layui-nav .layui-badge-dot{position:absolute;top:50%;margin:-8px 6px 0}.layui-tab-title .layui-badge,.layui-tab-title .layui-badge-dot{left:5px;top:-2px}.layui-carousel{position:relative;left:0;top:0;background-color:#f8f8f8}.layui-carousel>[carousel-item]{position:relative;width:100%;height:100%;overflow:hidden}.layui-carousel>[carousel-item]:before{position:absolute;content:'\e63d';left:50%;top:50%;width:100px;line-height:20px;margin:-10px 0 0 -50px;text-align:center;color:#c2c2c2;font-family:layui-icon!important;font-size:30px;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.layui-carousel>[carousel-item]>*{display:none;position:absolute;left:0;top:0;width:100%;height:100%;background-color:#f8f8f8;transition-duration:.3s;-webkit-transition-duration:.3s}.layui-carousel-updown>*{-webkit-transition:.3s ease-in-out up;transition:.3s ease-in-out up}.layui-carousel-arrow{display:none\9;opacity:0;position:absolute;left:10px;top:50%;margin-top:-18px;width:36px;height:36px;line-height:36px;text-align:center;font-size:20px;border:0;border-radius:50%;background-color:rgba(0,0,0,.2);color:#fff;-webkit-transition-duration:.3s;transition-duration:.3s;cursor:pointer}.layui-carousel-arrow[lay-type=add]{left:auto!important;right:10px}.layui-carousel:hover .layui-carousel-arrow[lay-type=add],.layui-carousel[lay-arrow=always] .layui-carousel-arrow[lay-type=add]{right:20px}.layui-carousel[lay-arrow=always] .layui-carousel-arrow{opacity:1;left:20px}.layui-carousel[lay-arrow=none] .layui-carousel-arrow{display:none}.layui-carousel-arrow:hover,.layui-carousel-ind ul:hover{background-color:rgba(0,0,0,.35)}.layui-carousel:hover .layui-carousel-arrow{display:block\9;opacity:1;left:20px}.layui-carousel-ind{position:relative;top:-35px;width:100%;line-height:0!important;text-align:center;font-size:0}.layui-carousel[lay-indicator=outside]{margin-bottom:30px}.layui-carousel[lay-indicator=outside] .layui-carousel-ind{top:10px}.layui-carousel[lay-indicator=outside] .layui-carousel-ind ul{background-color:rgba(0,0,0,.5)}.layui-carousel[lay-indicator=none] .layui-carousel-ind{display:none}.layui-carousel-ind ul{display:inline-block;padding:5px;background-color:rgba(0,0,0,.2);border-radius:10px;-webkit-transition-duration:.3s;transition-duration:.3s}.layui-carousel-ind li{display:inline-block;width:10px;height:10px;margin:0 3px;font-size:14px;background-color:#e2e2e2;background-color:rgba(255,255,255,.5);border-radius:50%;cursor:pointer;-webkit-transition-duration:.3s;transition-duration:.3s}.layui-carousel-ind li:hover{background-color:rgba(255,255,255,.7)}.layui-carousel-ind li.layui-this{background-color:#fff}.layui-carousel>[carousel-item]>.layui-carousel-next,.layui-carousel>[carousel-item]>.layui-carousel-prev,.layui-carousel>[carousel-item]>.layui-this{display:block}.layui-carousel>[carousel-item]>.layui-this{left:0}.layui-carousel>[carousel-item]>.layui-carousel-prev{left:-100%}.layui-carousel>[carousel-item]>.layui-carousel-next{left:100%}.layui-carousel>[carousel-item]>.layui-carousel-next.layui-carousel-left,.layui-carousel>[carousel-item]>.layui-carousel-prev.layui-carousel-right{left:0}.layui-carousel>[carousel-item]>.layui-this.layui-carousel-left{left:-100%}.layui-carousel>[carousel-item]>.layui-this.layui-carousel-right{left:100%}.layui-carousel[lay-anim=updown] .layui-carousel-arrow{left:50%!important;top:20px;margin:0 0 0 -18px}.layui-carousel[lay-anim=updown]>[carousel-item]>*,.layui-carousel[lay-anim=fade]>[carousel-item]>*{left:0!important}.layui-carousel[lay-anim=updown] .layui-carousel-arrow[lay-type=add]{top:auto!important;bottom:20px}.layui-carousel[lay-anim=updown] .layui-carousel-ind{position:absolute;top:50%;right:20px;width:auto;height:auto}.layui-carousel[lay-anim=updown] .layui-carousel-ind ul{padding:3px 5px}.layui-carousel[lay-anim=updown] .layui-carousel-ind li{display:block;margin:6px 0}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-this{top:0}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-carousel-prev{top:-100%}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-carousel-next{top:100%}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-carousel-next.layui-carousel-left,.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-carousel-prev.layui-carousel-right{top:0}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-this.layui-carousel-left{top:-100%}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-this.layui-carousel-right{top:100%}.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-carousel-next,.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-carousel-prev{opacity:0}.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-carousel-next.layui-carousel-left,.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-carousel-prev.layui-carousel-right{opacity:1}.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-this.layui-carousel-left,.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-this.layui-carousel-right{opacity:0}.layui-fixbar{position:fixed;right:15px;bottom:15px;z-index:9999}.layui-fixbar li{width:50px;height:50px;line-height:50px;margin-bottom:1px;text-align:center;cursor:pointer;font-size:30px;background-color:#9F9F9F;color:#fff;border-radius:2px;opacity:.95}.layui-fixbar li:hover{opacity:.85}.layui-fixbar li:active{opacity:1}.layui-fixbar .layui-fixbar-top{display:none;font-size:40px}body .layui-util-face{border:none;background:0 0}body .layui-util-face .layui-layer-content{padding:0;background-color:#fff;color:#666;box-shadow:none}.layui-util-face .layui-layer-TipsG{display:none}.layui-util-face ul{position:relative;width:372px;padding:10px;border:1px solid #D9D9D9;background-color:#fff;box-shadow:0 0 20px rgba(0,0,0,.2)}.layui-util-face ul li{cursor:pointer;float:left;border:1px solid #e8e8e8;height:22px;width:26px;overflow:hidden;margin:-1px 0 0 -1px;padding:4px 2px;text-align:center}.layui-util-face ul li:hover{position:relative;z-index:2;border:1px solid #eb7350;background:#fff9ec}.layui-anim{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:both;animation-fill-mode:both}.layui-anim.layui-icon{display:inline-block}.layui-anim-loop{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}@-webkit-keyframes layui-rotate{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(360deg)}}@keyframes layui-rotate{from{transform:rotate(0)}to{transform:rotate(360deg)}}.layui-anim-rotate{-webkit-animation-name:layui-rotate;animation-name:layui-rotate;-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-timing-function:linear;animation-timing-function:linear}@-webkit-keyframes layui-up{from{-webkit-transform:translate3d(0,100%,0);opacity:.3}to{-webkit-transform:translate3d(0,0,0);opacity:1}}@keyframes layui-up{from{transform:translate3d(0,100%,0);opacity:.3}to{transform:translate3d(0,0,0);opacity:1}}.layui-anim-up{-webkit-animation-name:layui-up;animation-name:layui-up}@-webkit-keyframes layui-upbit{from{-webkit-transform:translate3d(0,30px,0);opacity:.3}to{-webkit-transform:translate3d(0,0,0);opacity:1}}@keyframes layui-upbit{from{transform:translate3d(0,30px,0);opacity:.3}to{transform:translate3d(0,0,0);opacity:1}}.layui-anim-upbit{-webkit-animation-name:layui-upbit;animation-name:layui-upbit}@-webkit-keyframes layui-scale{0%{opacity:.3;-webkit-transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1)}}@keyframes layui-scale{0%{opacity:.3;-ms-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-ms-transform:scale(1);transform:scale(1)}}.layui-anim-scale{-webkit-animation-name:layui-scale;animation-name:layui-scale}@-webkit-keyframes layui-scale-spring{0%{opacity:.5;-webkit-transform:scale(.5)}80%{opacity:.8;-webkit-transform:scale(1.1)}100%{opacity:1;-webkit-transform:scale(1)}}@keyframes layui-scale-spring{0%{opacity:.5;transform:scale(.5)}80%{opacity:.8;transform:scale(1.1)}100%{opacity:1;transform:scale(1)}}.layui-anim-scaleSpring{-webkit-animation-name:layui-scale-spring;animation-name:layui-scale-spring}@-webkit-keyframes layui-fadein{0%{opacity:0}100%{opacity:1}}@keyframes layui-fadein{0%{opacity:0}100%{opacity:1}}.layui-anim-fadein{-webkit-animation-name:layui-fadein;animation-name:layui-fadein}@-webkit-keyframes layui-fadeout{0%{opacity:1}100%{opacity:0}}@keyframes layui-fadeout{0%{opacity:1}100%{opacity:0}}.layui-anim-fadeout{-webkit-animation-name:layui-fadeout;animation-name:layui-fadeout}
\ No newline at end of file
diff --git a/OpenAuth.Mvc/layui/css/layui.mobile.css b/OpenAuth.Mvc/layui/css/layui.mobile.css
index 3c216334..8bfc0db9 100644
--- a/OpenAuth.Mvc/layui/css/layui.mobile.css
+++ b/OpenAuth.Mvc/layui/css/layui.mobile.css
@@ -1,2 +1,2 @@
-/** layui-v2.1.5 MIT License By http://www.layui.com */
+/** layui-v2.2.5 MIT License By https://www.layui.com */
blockquote,body,button,dd,div,dl,dt,form,h1,h2,h3,h4,h5,h6,input,legend,li,ol,p,td,textarea,th,ul{margin:0;padding:0;-webkit-tap-highlight-color:rgba(0,0,0,0)}html{font:12px 'Helvetica Neue','PingFang SC',STHeitiSC-Light,Helvetica,Arial,sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}a,button,input{-webkit-tap-highlight-color:rgba(255,0,0,0)}a{text-decoration:none;background:0 0}a:active,a:hover{outline:0}table{border-collapse:collapse;border-spacing:0}li{list-style:none}b,strong{font-weight:700}h1,h2,h3,h4,h5,h6{font-weight:500}address,cite,dfn,em,var{font-style:normal}dfn{font-style:italic}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}img{border:0;vertical-align:bottom}.layui-inline,input,label{vertical-align:middle}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0;outline:0}button,select{text-transform:none}select{-webkit-appearance:none;border:none}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}@font-face{font-family:layui-icon;src:url(../font/iconfont.eot?v=1.0.7);src:url(../font/iconfont.eot?v=1.0.7#iefix) format('embedded-opentype'),url(../font/iconfont.woff?v=1.0.7) format('woff'),url(../font/iconfont.ttf?v=1.0.7) format('truetype'),url(../font/iconfont.svg?v=1.0.7#iconfont) format('svg')}.layui-icon{font-family:layui-icon!important;font-size:16px;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.layui-box,.layui-box *{-webkit-box-sizing:content-box!important;-moz-box-sizing:content-box!important;box-sizing:content-box!important}.layui-border-box,.layui-border-box *{-webkit-box-sizing:border-box!important;-moz-box-sizing:border-box!important;box-sizing:border-box!important}.layui-inline{position:relative;display:inline-block;*display:inline;*zoom:1}.layui-edge,.layui-upload-iframe{position:absolute;width:0;height:0}.layui-edge{border-style:dashed;border-color:transparent;overflow:hidden}.layui-elip{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.layui-unselect{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.layui-disabled,.layui-disabled:active{background-color:#d2d2d2!important;color:#fff!important;cursor:not-allowed!important}.layui-circle{border-radius:100%}.layui-show{display:block!important}.layui-hide{display:none!important}.layui-upload-iframe{border:0;visibility:hidden}.layui-upload-enter{border:1px solid #009E94;background-color:#009E94;color:#fff;-webkit-transform:scale(1.1);transform:scale(1.1)}@-webkit-keyframes layui-m-anim-scale{0%{opacity:0;-webkit-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes layui-m-anim-scale{0%{opacity:0;-webkit-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}.layui-m-anim-scale{animation-name:layui-m-anim-scale;-webkit-animation-name:layui-m-anim-scale}@-webkit-keyframes layui-m-anim-up{0%{opacity:0;-webkit-transform:translateY(800px);transform:translateY(800px)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes layui-m-anim-up{0%{opacity:0;-webkit-transform:translateY(800px);transform:translateY(800px)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}.layui-m-anim-up{-webkit-animation-name:layui-m-anim-up;animation-name:layui-m-anim-up}@-webkit-keyframes layui-m-anim-left{0%{-webkit-transform:translateX(100%);transform:translateX(100%)}100%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes layui-m-anim-left{0%{-webkit-transform:translateX(100%);transform:translateX(100%)}100%{-webkit-transform:translateX(0);transform:translateX(0)}}.layui-m-anim-left{-webkit-animation-name:layui-m-anim-left;animation-name:layui-m-anim-left}@-webkit-keyframes layui-m-anim-right{0%{-webkit-transform:translateX(-100%);transform:translateX(-100%)}100%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes layui-m-anim-right{0%{-webkit-transform:translateX(-100%);transform:translateX(-100%)}100%{-webkit-transform:translateX(0);transform:translateX(0)}}.layui-m-anim-right{-webkit-animation-name:layui-m-anim-right;animation-name:layui-m-anim-right}@-webkit-keyframes layui-m-anim-lout{0%{-webkit-transform:translateX(0);transform:translateX(0)}100%{-webkit-transform:translateX(-100%);transform:translateX(-100%)}}@keyframes layui-m-anim-lout{0%{-webkit-transform:translateX(0);transform:translateX(0)}100%{-webkit-transform:translateX(-100%);transform:translateX(-100%)}}.layui-m-anim-lout{-webkit-animation-name:layui-m-anim-lout;animation-name:layui-m-anim-lout}@-webkit-keyframes layui-m-anim-rout{0%{-webkit-transform:translateX(0);transform:translateX(0)}100%{-webkit-transform:translateX(100%);transform:translateX(100%)}}@keyframes layui-m-anim-rout{0%{-webkit-transform:translateX(0);transform:translateX(0)}100%{-webkit-transform:translateX(100%);transform:translateX(100%)}}.layui-m-anim-rout{-webkit-animation-name:layui-m-anim-rout;animation-name:layui-m-anim-rout}.layui-m-layer{position:relative;z-index:19891014}.layui-m-layer *{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.layui-m-layermain,.layui-m-layershade{position:fixed;left:0;top:0;width:100%;height:100%}.layui-m-layershade{background-color:rgba(0,0,0,.7);pointer-events:auto}.layui-m-layermain{display:table;font-family:Helvetica,arial,sans-serif;pointer-events:none}.layui-m-layermain .layui-m-layersection{display:table-cell;vertical-align:middle;text-align:center}.layui-m-layerchild{position:relative;display:inline-block;text-align:left;background-color:#fff;font-size:14px;border-radius:5px;box-shadow:0 0 8px rgba(0,0,0,.1);pointer-events:auto;-webkit-overflow-scrolling:touch;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.2s;animation-duration:.2s}.layui-m-layer0 .layui-m-layerchild{width:90%;max-width:640px}.layui-m-layer1 .layui-m-layerchild{border:none;border-radius:0}.layui-m-layer2 .layui-m-layerchild{width:auto;max-width:260px;min-width:40px;border:none;background:0 0;box-shadow:none;color:#fff}.layui-m-layerchild h3{padding:0 10px;height:60px;line-height:60px;font-size:16px;font-weight:400;border-radius:5px 5px 0 0;text-align:center}.layui-m-layerbtn span,.layui-m-layerchild h3{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.layui-m-layercont{padding:50px 30px;line-height:22px;text-align:center}.layui-m-layer1 .layui-m-layercont{padding:0;text-align:left}.layui-m-layer2 .layui-m-layercont{text-align:center;padding:0;line-height:0}.layui-m-layer2 .layui-m-layercont i{width:25px;height:25px;margin-left:8px;display:inline-block;background-color:#fff;border-radius:100%;-webkit-animation:layui-m-anim-loading 1.4s infinite ease-in-out;animation:layui-m-anim-loading 1.4s infinite ease-in-out;-webkit-animation-fill-mode:both;animation-fill-mode:both}.layui-m-layerbtn,.layui-m-layerbtn span{position:relative;text-align:center;border-radius:0 0 5px 5px}.layui-m-layer2 .layui-m-layercont p{margin-top:20px}@-webkit-keyframes layui-m-anim-loading{0%,100%,80%{transform:scale(0);-webkit-transform:scale(0)}40%{transform:scale(1);-webkit-transform:scale(1)}}@keyframes layui-m-anim-loading{0%,100%,80%{transform:scale(0);-webkit-transform:scale(0)}40%{transform:scale(1);-webkit-transform:scale(1)}}.layui-m-layer2 .layui-m-layercont i:first-child{margin-left:0;-webkit-animation-delay:-.32s;animation-delay:-.32s}.layui-m-layer2 .layui-m-layercont i.layui-m-layerload{-webkit-animation-delay:-.16s;animation-delay:-.16s}.layui-m-layer2 .layui-m-layercont>div{line-height:22px;padding-top:7px;margin-bottom:20px;font-size:14px}.layui-m-layerbtn{display:box;display:-moz-box;display:-webkit-box;width:100%;height:50px;line-height:50px;font-size:0;border-top:1px solid #D0D0D0;background-color:#F2F2F2}.layui-m-layerbtn span{display:block;-moz-box-flex:1;box-flex:1;-webkit-box-flex:1;font-size:14px;cursor:pointer}.layui-m-layerbtn span[yes]{color:#40AFFE}.layui-m-layerbtn span[no]{border-right:1px solid #D0D0D0;border-radius:0 0 0 5px}.layui-m-layerbtn span:active{background-color:#F6F6F6}.layui-m-layerend{position:absolute;right:7px;top:10px;width:30px;height:30px;border:0;font-weight:400;background:0 0;cursor:pointer;-webkit-appearance:none;font-size:30px}.layui-m-layerend::after,.layui-m-layerend::before{position:absolute;left:5px;top:15px;content:'';width:18px;height:1px;background-color:#999;transform:rotate(45deg);-webkit-transform:rotate(45deg);border-radius:3px}.layui-m-layerend::after{transform:rotate(-45deg);-webkit-transform:rotate(-45deg)}body .layui-m-layer .layui-m-layer-footer{position:fixed;width:95%;max-width:100%;margin:0 auto;left:0;right:0;bottom:10px;background:0 0}.layui-m-layer-footer .layui-m-layercont{padding:20px;border-radius:5px 5px 0 0;background-color:rgba(255,255,255,.8)}.layui-m-layer-footer .layui-m-layerbtn{display:block;height:auto;background:0 0;border-top:none}.layui-m-layer-footer .layui-m-layerbtn span{background-color:rgba(255,255,255,.8)}.layui-m-layer-footer .layui-m-layerbtn span[no]{color:#FD482C;border-top:1px solid #c2c2c2;border-radius:0 0 5px 5px}.layui-m-layer-footer .layui-m-layerbtn span[yes]{margin-top:10px;border-radius:5px}body .layui-m-layer .layui-m-layer-msg{width:auto;max-width:90%;margin:0 auto;bottom:-150px;background-color:rgba(0,0,0,.7);color:#fff}.layui-m-layer-msg .layui-m-layercont{padding:10px 20px}
\ No newline at end of file
diff --git a/OpenAuth.Mvc/layui/css/modules/code.css b/OpenAuth.Mvc/layui/css/modules/code.css
index b8d1795e..08ba72e5 100644
--- a/OpenAuth.Mvc/layui/css/modules/code.css
+++ b/OpenAuth.Mvc/layui/css/modules/code.css
@@ -1,2 +1,2 @@
-/** layui-v2.1.5 MIT License By http://www.layui.com */
+/** layui-v2.2.5 MIT License By https://www.layui.com */
html #layuicss-skincodecss{display:none;position:absolute;width:1989px}.layui-code-h3,.layui-code-view{position:relative;font-size:12px}.layui-code-view{display:block;margin:10px 0;padding:0;border:1px solid #e2e2e2;border-left-width:6px;background-color:#F2F2F2;color:#333;font-family:Courier New}.layui-code-h3{padding:0 10px;height:32px;line-height:32px;border-bottom:1px solid #e2e2e2}.layui-code-h3 a{position:absolute;right:10px;top:0;color:#999}.layui-code-view .layui-code-ol{position:relative;overflow:auto}.layui-code-view .layui-code-ol li{position:relative;margin-left:45px;line-height:20px;padding:0 5px;border-left:1px solid #e2e2e2;list-style-type:decimal-leading-zero;*list-style-type:decimal;background-color:#fff}.layui-code-view pre{margin:0}.layui-code-notepad{border:1px solid #0C0C0C;border-left-color:#3F3F3F;background-color:#0C0C0C;color:#C2BE9E}.layui-code-notepad .layui-code-h3{border-bottom:none}.layui-code-notepad .layui-code-ol li{background-color:#3F3F3F;border-left:none}
\ No newline at end of file
diff --git a/OpenAuth.Mvc/layui/css/modules/laydate/default/laydate.css b/OpenAuth.Mvc/layui/css/modules/laydate/default/laydate.css
index fef46e3a..6e970f34 100644
--- a/OpenAuth.Mvc/layui/css/modules/laydate/default/laydate.css
+++ b/OpenAuth.Mvc/layui/css/modules/laydate/default/laydate.css
@@ -1,2 +1,2 @@
-/** layui-v2.1.5 MIT License By http://www.layui.com */
- .laydate-set-ym,.layui-laydate,.layui-laydate *,.layui-laydate-list{box-sizing:border-box}html #layuicss-laydate{display:none;position:absolute;width:1989px}.layui-laydate *{margin:0;padding:0}.layui-laydate{position:absolute;z-index:66666666;margin:5px 0;border-radius:2px;font-size:14px;-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-name:laydate-upbit;animation-name:laydate-upbit}.layui-laydate-main{width:272px}.layui-laydate-content td,.layui-laydate-header *,.layui-laydate-list li{transition-duration:.3s;-webkit-transition-duration:.3s}@-webkit-keyframes laydate-upbit{from{-webkit-transform:translate3d(0,20px,0);opacity:.3}to{-webkit-transform:translate3d(0,0,0);opacity:1}}@keyframes laydate-upbit{from{transform:translate3d(0,20px,0);opacity:.3}to{transform:translate3d(0,0,0);opacity:1}}.layui-laydate-static{position:relative;z-index:0;display:inline-block;margin:0;-webkit-animation:none;animation:none}.laydate-ym-show .laydate-next-m,.laydate-ym-show .laydate-prev-m{display:none!important}.laydate-ym-show .laydate-next-y,.laydate-ym-show .laydate-prev-y{display:inline-block!important}.laydate-time-show .laydate-set-ym span[lay-type=month],.laydate-time-show .laydate-set-ym span[lay-type=year],.laydate-time-show .layui-laydate-header .layui-icon,.laydate-ym-show .laydate-set-ym span[lay-type=month]{display:none!important}.layui-laydate-header{position:relative;line-height:30px;padding:10px 70px 5px}.laydate-set-ym span,.layui-laydate-header i{padding:0 5px;cursor:pointer}.layui-laydate-header *{display:inline-block;vertical-align:bottom}.layui-laydate-header i{position:absolute;top:10px;color:#999;font-size:18px}.layui-laydate-header i.laydate-prev-y{left:15px}.layui-laydate-header i.laydate-prev-m{left:45px}.layui-laydate-header i.laydate-next-y{right:15px}.layui-laydate-header i.laydate-next-m{right:45px}.laydate-set-ym{width:100%;text-align:center;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.laydate-time-text{cursor:default!important}.layui-laydate-content{position:relative;padding:10px;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.layui-laydate-content table{border-collapse:collapse;border-spacing:0}.layui-laydate-content td,.layui-laydate-content th{width:36px;height:30px;padding:5px;text-align:center}.layui-laydate-content td{position:relative;cursor:pointer}.laydate-day-mark{position:absolute;left:0;top:0;width:100%;height:100%;line-height:30px;font-size:12px;overflow:hidden}.laydate-day-mark::after{position:absolute;content:'';right:2px;top:2px;width:5px;height:5px;border-radius:50%}.layui-laydate-footer{position:relative;height:46px;line-height:26px;padding:10px 20px}.layui-laydate-footer span{margin-right:15px;display:inline-block;cursor:pointer;font-size:12px}.layui-laydate-footer span:hover{color:#5FB878}.laydate-footer-btns{position:absolute;right:10px;top:10px}.laydate-footer-btns span{height:26px;line-height:26px;margin:0 0 0 -1px;padding:0 10px;border:1px solid #C9C9C9;background-color:#fff;white-space:nowrap;vertical-align:top;border-radius:2px}.layui-laydate-list>li,.layui-laydate-range .layui-laydate-main{display:inline-block;vertical-align:middle}.layui-laydate-list{position:absolute;left:0;top:0;width:100%;height:100%;padding:10px;background-color:#fff}.layui-laydate-list>li{position:relative;width:33.3%;height:36px;line-height:36px;margin:3px 0;text-align:center;cursor:pointer}.laydate-month-list>li{width:25%;margin:17px 0}.laydate-time-list>li{height:100%;margin:0;line-height:normal;cursor:default}.laydate-time-list p{position:relative;top:-4px;line-height:29px}.laydate-time-list ol{height:181px;overflow:hidden}.laydate-time-list>li:hover ol{overflow-y:auto}.laydate-time-list ol li{width:130%;padding-left:33px;line-height:30px;text-align:left;cursor:pointer}.layui-laydate-hint{position:absolute;top:115px;left:50%;width:250px;margin-left:-125px;line-height:20px;padding:15px;text-align:center;font-size:12px}.layui-laydate-range{width:546px}.layui-laydate-range .laydate-main-list-0 .laydate-next-m,.layui-laydate-range .laydate-main-list-0 .laydate-next-y,.layui-laydate-range .laydate-main-list-1 .laydate-prev-m,.layui-laydate-range .laydate-main-list-1 .laydate-prev-y{display:none}.layui-laydate-range .laydate-main-list-1 .layui-laydate-content{border-left:1px solid #e2e2e2}.layui-laydate,.layui-laydate-hint{border:1px solid #d2d2d2;box-shadow:0 2px 4px rgba(0,0,0,.12);background-color:#fff;color:#666}.layui-laydate-header{border-bottom:1px solid #e2e2e2}.layui-laydate-header i:hover,.layui-laydate-header span:hover{color:#5FB878}.layui-laydate-content{border-top:none 0;border-bottom:none 0}.layui-laydate-content th{font-weight:400;color:#333}.layui-laydate-content td{color:#666}.layui-laydate-content td.laydate-selected{background-color:#00F7DE}.laydate-selected:hover{background-color:#00F7DE!important}.layui-laydate-content td:hover,.layui-laydate-list li:hover{background-color:#eaeaea;color:#333}.laydate-time-list li ol{margin:0;padding:0;border:1px solid #e2e2e2;border-left-width:0}.laydate-time-list li:first-child ol{border-left-width:1px}.laydate-time-list>li:hover{background:0 0}.layui-laydate-content .laydate-day-next,.layui-laydate-content .laydate-day-prev{color:#d2d2d2}.laydate-selected.laydate-day-next,.laydate-selected.laydate-day-prev{color:#fff!important}.layui-laydate-footer{border-top:1px solid #e2e2e2}.layui-laydate-hint{color:#FF5722}.laydate-day-mark::after{background-color:#5FB878}.layui-laydate-content td.layui-this .laydate-day-mark::after{display:none}.layui-laydate-footer span[lay-type=date]{color:#5FB878}.layui-laydate .layui-this{background-color:#009688!important;color:#fff!important}.layui-laydate .laydate-disabled,.layui-laydate .laydate-disabled:hover{background:0 0!important;color:#d2d2d2!important;cursor:not-allowed!important;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.laydate-theme-molv{border:none}.laydate-theme-molv.layui-laydate-range{width:548px}.laydate-theme-molv .layui-laydate-main{width:274px}.laydate-theme-molv .layui-laydate-header{border:none;background-color:#009688}.laydate-theme-molv .layui-laydate-header i,.laydate-theme-molv .layui-laydate-header span{color:#f6f6f6}.laydate-theme-molv .layui-laydate-header i:hover,.laydate-theme-molv .layui-laydate-header span:hover{color:#fff}.laydate-theme-molv .layui-laydate-content{border:1px solid #e2e2e2;border-top:none;border-bottom:none}.laydate-theme-molv .laydate-main-list-1 .layui-laydate-content{border-left:none}.laydate-theme-grid .laydate-month-list>li,.laydate-theme-grid .laydate-year-list>li,.laydate-theme-grid .layui-laydate-content td,.laydate-theme-grid .layui-laydate-content thead,.laydate-theme-molv .layui-laydate-footer{border:1px solid #e2e2e2}.laydate-theme-grid .laydate-selected,.laydate-theme-grid .laydate-selected:hover{background-color:#f2f2f2!important;color:#009688!important}.laydate-theme-grid .laydate-selected.laydate-day-next,.laydate-theme-grid .laydate-selected.laydate-day-prev{color:#d2d2d2!important}.laydate-theme-grid .laydate-month-list,.laydate-theme-grid .laydate-year-list{margin:1px 0 0 1px}.laydate-theme-grid .laydate-month-list>li,.laydate-theme-grid .laydate-year-list>li{margin:0 -1px -1px 0}.laydate-theme-grid .laydate-year-list>li{height:43px;line-height:43px}.laydate-theme-grid .laydate-month-list>li{height:71px;line-height:71px}
\ No newline at end of file
+/** layui-v2.2.5 MIT License By https://www.layui.com */
+ .laydate-set-ym,.layui-laydate,.layui-laydate *,.layui-laydate-list{box-sizing:border-box}html #layuicss-laydate{display:none;position:absolute;width:1989px}.layui-laydate *{margin:0;padding:0}.layui-laydate{position:absolute;z-index:66666666;margin:5px 0;border-radius:2px;font-size:14px;-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-name:laydate-upbit;animation-name:laydate-upbit}.layui-laydate-main{width:272px}.layui-laydate-content td,.layui-laydate-header *,.layui-laydate-list li{transition-duration:.3s;-webkit-transition-duration:.3s}@-webkit-keyframes laydate-upbit{from{-webkit-transform:translate3d(0,20px,0);opacity:.3}to{-webkit-transform:translate3d(0,0,0);opacity:1}}@keyframes laydate-upbit{from{transform:translate3d(0,20px,0);opacity:.3}to{transform:translate3d(0,0,0);opacity:1}}.layui-laydate-static{position:relative;z-index:0;display:inline-block;margin:0;-webkit-animation:none;animation:none}.laydate-ym-show .laydate-next-m,.laydate-ym-show .laydate-prev-m{display:none!important}.laydate-ym-show .laydate-next-y,.laydate-ym-show .laydate-prev-y{display:inline-block!important}.laydate-time-show .laydate-set-ym span[lay-type=month],.laydate-time-show .laydate-set-ym span[lay-type=year],.laydate-time-show .layui-laydate-header .layui-icon,.laydate-ym-show .laydate-set-ym span[lay-type=month]{display:none!important}.layui-laydate-header{position:relative;line-height:30px;padding:10px 70px 5px}.laydate-set-ym span,.layui-laydate-header i{padding:0 5px;cursor:pointer}.layui-laydate-header *{display:inline-block;vertical-align:bottom}.layui-laydate-header i{position:absolute;top:10px;color:#999;font-size:18px}.layui-laydate-header i.laydate-prev-y{left:15px}.layui-laydate-header i.laydate-prev-m{left:45px}.layui-laydate-header i.laydate-next-y{right:15px}.layui-laydate-header i.laydate-next-m{right:45px}.laydate-set-ym{width:100%;text-align:center;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.laydate-time-text{cursor:default!important}.layui-laydate-content{position:relative;padding:10px;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.layui-laydate-content table{border-collapse:collapse;border-spacing:0}.layui-laydate-content td,.layui-laydate-content th{width:36px;height:30px;padding:5px;text-align:center}.layui-laydate-content td{position:relative;cursor:pointer}.laydate-day-mark{position:absolute;left:0;top:0;width:100%;height:100%;line-height:30px;font-size:12px;overflow:hidden}.laydate-day-mark::after{position:absolute;content:'';right:2px;top:2px;width:5px;height:5px;border-radius:50%}.layui-laydate-footer{position:relative;height:46px;line-height:26px;padding:10px 20px}.layui-laydate-footer span{margin-right:15px;display:inline-block;cursor:pointer;font-size:12px}.layui-laydate-footer span:hover{color:#5FB878}.laydate-footer-btns{position:absolute;right:10px;top:10px}.laydate-footer-btns span{height:26px;line-height:26px;margin:0 0 0 -1px;padding:0 10px;border:1px solid #C9C9C9;background-color:#fff;white-space:nowrap;vertical-align:top;border-radius:2px}.layui-laydate-list>li,.layui-laydate-range .layui-laydate-main{display:inline-block;vertical-align:middle}.layui-laydate-list{position:absolute;left:0;top:0;width:100%;height:100%;padding:10px;background-color:#fff}.layui-laydate-list>li{position:relative;width:33.3%;height:36px;line-height:36px;margin:3px 0;text-align:center;cursor:pointer}.laydate-month-list>li{width:25%;margin:17px 0}.laydate-time-list>li{height:100%;margin:0;line-height:normal;cursor:default}.laydate-time-list p{position:relative;top:-4px;line-height:29px}.laydate-time-list ol{height:181px;overflow:hidden}.laydate-time-list>li:hover ol{overflow-y:auto}.laydate-time-list ol li{width:130%;padding-left:33px;line-height:30px;text-align:left;cursor:pointer}.layui-laydate-hint{position:absolute;top:115px;left:50%;width:250px;margin-left:-125px;line-height:20px;padding:15px;text-align:center;font-size:12px}.layui-laydate-range{width:546px}.layui-laydate-range .laydate-main-list-0 .laydate-next-m,.layui-laydate-range .laydate-main-list-0 .laydate-next-y,.layui-laydate-range .laydate-main-list-1 .laydate-prev-m,.layui-laydate-range .laydate-main-list-1 .laydate-prev-y{display:none}.layui-laydate-range .laydate-main-list-1 .layui-laydate-content{border-left:1px solid #e2e2e2}.layui-laydate,.layui-laydate-hint{border:1px solid #d2d2d2;box-shadow:0 2px 4px rgba(0,0,0,.12);background-color:#fff;color:#666}.layui-laydate-header{border-bottom:1px solid #e2e2e2}.layui-laydate-header i:hover,.layui-laydate-header span:hover{color:#5FB878}.layui-laydate-content{border-top:none 0;border-bottom:none 0}.layui-laydate-content th{font-weight:400;color:#333}.layui-laydate-content td{color:#666}.layui-laydate-content td.laydate-selected{background-color:#00F7DE}.laydate-selected:hover{background-color:#00F7DE!important}.layui-laydate-content td:hover,.layui-laydate-list li:hover{background-color:#eaeaea;color:#333}.laydate-time-list li ol{margin:0;padding:0;border:1px solid #e2e2e2;border-left-width:0}.laydate-time-list li:first-child ol{border-left-width:1px}.laydate-time-list>li:hover{background:0 0}.layui-laydate-content .laydate-day-next,.layui-laydate-content .laydate-day-prev{color:#d2d2d2}.laydate-selected.laydate-day-next,.laydate-selected.laydate-day-prev{background-color:#f8f8f8!important}.layui-laydate-footer{border-top:1px solid #e2e2e2}.layui-laydate-hint{color:#FF5722}.laydate-day-mark::after{background-color:#5FB878}.layui-laydate-content td.layui-this .laydate-day-mark::after{display:none}.layui-laydate-footer span[lay-type=date]{color:#5FB878}.layui-laydate .layui-this{background-color:#009688!important;color:#fff!important}.layui-laydate .laydate-disabled,.layui-laydate .laydate-disabled:hover{background:0 0!important;color:#d2d2d2!important;cursor:not-allowed!important;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.laydate-theme-molv{border:none}.laydate-theme-molv.layui-laydate-range{width:548px}.laydate-theme-molv .layui-laydate-main{width:274px}.laydate-theme-molv .layui-laydate-header{border:none;background-color:#009688}.laydate-theme-molv .layui-laydate-header i,.laydate-theme-molv .layui-laydate-header span{color:#f6f6f6}.laydate-theme-molv .layui-laydate-header i:hover,.laydate-theme-molv .layui-laydate-header span:hover{color:#fff}.laydate-theme-molv .layui-laydate-content{border:1px solid #e2e2e2;border-top:none;border-bottom:none}.laydate-theme-molv .laydate-main-list-1 .layui-laydate-content{border-left:none}.laydate-theme-grid .laydate-month-list>li,.laydate-theme-grid .laydate-year-list>li,.laydate-theme-grid .layui-laydate-content td,.laydate-theme-grid .layui-laydate-content thead,.laydate-theme-molv .layui-laydate-footer{border:1px solid #e2e2e2}.laydate-theme-grid .laydate-selected,.laydate-theme-grid .laydate-selected:hover{background-color:#f2f2f2!important;color:#009688!important}.laydate-theme-grid .laydate-selected.laydate-day-next,.laydate-theme-grid .laydate-selected.laydate-day-prev{color:#d2d2d2!important}.laydate-theme-grid .laydate-month-list,.laydate-theme-grid .laydate-year-list{margin:1px 0 0 1px}.laydate-theme-grid .laydate-month-list>li,.laydate-theme-grid .laydate-year-list>li{margin:0 -1px -1px 0}.laydate-theme-grid .laydate-year-list>li{height:43px;line-height:43px}.laydate-theme-grid .laydate-month-list>li{height:71px;line-height:71px}
\ No newline at end of file
diff --git a/OpenAuth.Mvc/layui/css/modules/layer/default/layer.css b/OpenAuth.Mvc/layui/css/modules/layer/default/layer.css
index 01e08ae0..6a001539 100644
--- a/OpenAuth.Mvc/layui/css/modules/layer/default/layer.css
+++ b/OpenAuth.Mvc/layui/css/modules/layer/default/layer.css
@@ -1,2 +1,2 @@
-/** layui-v2.1.5 MIT License By http://www.layui.com */
+/** layui-v2.2.5 MIT License By https://www.layui.com */
.layui-layer-imgbar,.layui-layer-imgtit a,.layui-layer-tab .layui-layer-title span,.layui-layer-title{text-overflow:ellipsis;white-space:nowrap}html #layuicss-layer{display:none;position:absolute;width:1989px}.layui-layer,.layui-layer-shade{position:fixed;_position:absolute;pointer-events:auto}.layui-layer-shade{top:0;left:0;width:100%;height:100%;_height:expression(document.body.offsetHeight+"px")}.layui-layer{-webkit-overflow-scrolling:touch;top:150px;left:0;margin:0;padding:0;background-color:#fff;-webkit-background-clip:content;border-radius:2px;box-shadow:1px 1px 50px rgba(0,0,0,.3)}.layui-layer-close{position:absolute}.layui-layer-content{position:relative}.layui-layer-border{border:1px solid #B2B2B2;border:1px solid rgba(0,0,0,.1);box-shadow:1px 1px 5px rgba(0,0,0,.2)}.layui-layer-load{background:url(loading-1.gif) center center no-repeat #eee}.layui-layer-ico{background:url(icon.png) no-repeat}.layui-layer-btn a,.layui-layer-dialog .layui-layer-ico,.layui-layer-setwin a{display:inline-block;*display:inline;*zoom:1;vertical-align:top}.layui-layer-move{display:none;position:fixed;*position:absolute;left:0;top:0;width:100%;height:100%;cursor:move;opacity:0;filter:alpha(opacity=0);background-color:#fff;z-index:2147483647}.layui-layer-resize{position:absolute;width:15px;height:15px;right:0;bottom:0;cursor:se-resize}.layer-anim{-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.3s;animation-duration:.3s}@-webkit-keyframes layer-bounceIn{0%{opacity:0;-webkit-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes layer-bounceIn{0%{opacity:0;-webkit-transform:scale(.5);-ms-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}}.layer-anim-00{-webkit-animation-name:layer-bounceIn;animation-name:layer-bounceIn}@-webkit-keyframes layer-zoomInDown{0%{opacity:0;-webkit-transform:scale(.1) translateY(-2000px);transform:scale(.1) translateY(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateY(60px);transform:scale(.475) translateY(60px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}@keyframes layer-zoomInDown{0%{opacity:0;-webkit-transform:scale(.1) translateY(-2000px);-ms-transform:scale(.1) translateY(-2000px);transform:scale(.1) translateY(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateY(60px);-ms-transform:scale(.475) translateY(60px);transform:scale(.475) translateY(60px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}.layer-anim-01{-webkit-animation-name:layer-zoomInDown;animation-name:layer-zoomInDown}@-webkit-keyframes layer-fadeInUpBig{0%{opacity:0;-webkit-transform:translateY(2000px);transform:translateY(2000px)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes layer-fadeInUpBig{0%{opacity:0;-webkit-transform:translateY(2000px);-ms-transform:translateY(2000px);transform:translateY(2000px)}100%{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}.layer-anim-02{-webkit-animation-name:layer-fadeInUpBig;animation-name:layer-fadeInUpBig}@-webkit-keyframes layer-zoomInLeft{0%{opacity:0;-webkit-transform:scale(.1) translateX(-2000px);transform:scale(.1) translateX(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateX(48px);transform:scale(.475) translateX(48px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}@keyframes layer-zoomInLeft{0%{opacity:0;-webkit-transform:scale(.1) translateX(-2000px);-ms-transform:scale(.1) translateX(-2000px);transform:scale(.1) translateX(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateX(48px);-ms-transform:scale(.475) translateX(48px);transform:scale(.475) translateX(48px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}.layer-anim-03{-webkit-animation-name:layer-zoomInLeft;animation-name:layer-zoomInLeft}@-webkit-keyframes layer-rollIn{0%{opacity:0;-webkit-transform:translateX(-100%) rotate(-120deg);transform:translateX(-100%) rotate(-120deg)}100%{opacity:1;-webkit-transform:translateX(0) rotate(0);transform:translateX(0) rotate(0)}}@keyframes layer-rollIn{0%{opacity:0;-webkit-transform:translateX(-100%) rotate(-120deg);-ms-transform:translateX(-100%) rotate(-120deg);transform:translateX(-100%) rotate(-120deg)}100%{opacity:1;-webkit-transform:translateX(0) rotate(0);-ms-transform:translateX(0) rotate(0);transform:translateX(0) rotate(0)}}.layer-anim-04{-webkit-animation-name:layer-rollIn;animation-name:layer-rollIn}@keyframes layer-fadeIn{0%{opacity:0}100%{opacity:1}}.layer-anim-05{-webkit-animation-name:layer-fadeIn;animation-name:layer-fadeIn}@-webkit-keyframes layer-shake{0%,100%{-webkit-transform:translateX(0);transform:translateX(0)}10%,30%,50%,70%,90%{-webkit-transform:translateX(-10px);transform:translateX(-10px)}20%,40%,60%,80%{-webkit-transform:translateX(10px);transform:translateX(10px)}}@keyframes layer-shake{0%,100%{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}10%,30%,50%,70%,90%{-webkit-transform:translateX(-10px);-ms-transform:translateX(-10px);transform:translateX(-10px)}20%,40%,60%,80%{-webkit-transform:translateX(10px);-ms-transform:translateX(10px);transform:translateX(10px)}}.layer-anim-06{-webkit-animation-name:layer-shake;animation-name:layer-shake}@-webkit-keyframes fadeIn{0%{opacity:0}100%{opacity:1}}.layui-layer-title{padding:0 80px 0 20px;height:42px;line-height:42px;border-bottom:1px solid #eee;font-size:14px;color:#333;overflow:hidden;background-color:#F8F8F8;border-radius:2px 2px 0 0}.layui-layer-setwin{position:absolute;right:15px;*right:0;top:15px;font-size:0;line-height:initial}.layui-layer-setwin a{position:relative;width:16px;height:16px;margin-left:10px;font-size:12px;_overflow:hidden}.layui-layer-setwin .layui-layer-min cite{position:absolute;width:14px;height:2px;left:0;top:50%;margin-top:-1px;background-color:#2E2D3C;cursor:pointer;_overflow:hidden}.layui-layer-setwin .layui-layer-min:hover cite{background-color:#2D93CA}.layui-layer-setwin .layui-layer-max{background-position:-32px -40px}.layui-layer-setwin .layui-layer-max:hover{background-position:-16px -40px}.layui-layer-setwin .layui-layer-maxmin{background-position:-65px -40px}.layui-layer-setwin .layui-layer-maxmin:hover{background-position:-49px -40px}.layui-layer-setwin .layui-layer-close1{background-position:1px -40px;cursor:pointer}.layui-layer-setwin .layui-layer-close1:hover{opacity:.7}.layui-layer-setwin .layui-layer-close2{position:absolute;right:-28px;top:-28px;width:30px;height:30px;margin-left:0;background-position:-149px -31px;*right:-18px;_display:none}.layui-layer-setwin .layui-layer-close2:hover{background-position:-180px -31px}.layui-layer-btn{text-align:right;padding:0 15px 12px;pointer-events:auto;user-select:none;-webkit-user-select:none}.layui-layer-btn a{height:28px;line-height:28px;margin:5px 5px 0;padding:0 15px;border:1px solid #dedede;background-color:#fff;color:#333;border-radius:2px;font-weight:400;cursor:pointer;text-decoration:none}.layui-layer-btn a:hover{opacity:.9;text-decoration:none}.layui-layer-btn a:active{opacity:.8}.layui-layer-btn .layui-layer-btn0{border-color:#1E9FFF;background-color:#1E9FFF;color:#fff}.layui-layer-btn-l{text-align:left}.layui-layer-btn-c{text-align:center}.layui-layer-dialog{min-width:260px}.layui-layer-dialog .layui-layer-content{position:relative;padding:20px;line-height:24px;word-break:break-all;overflow:hidden;font-size:14px;overflow-x:hidden;overflow-y:auto}.layui-layer-dialog .layui-layer-content .layui-layer-ico{position:absolute;top:16px;left:15px;_left:-40px;width:30px;height:30px}.layui-layer-ico1{background-position:-30px 0}.layui-layer-ico2{background-position:-60px 0}.layui-layer-ico3{background-position:-90px 0}.layui-layer-ico4{background-position:-120px 0}.layui-layer-ico5{background-position:-150px 0}.layui-layer-ico6{background-position:-180px 0}.layui-layer-rim{border:6px solid #8D8D8D;border:6px solid rgba(0,0,0,.3);border-radius:5px;box-shadow:none}.layui-layer-msg{min-width:180px;border:1px solid #D3D4D3;box-shadow:none}.layui-layer-hui{min-width:100px;background-color:#000;filter:alpha(opacity=60);background-color:rgba(0,0,0,.6);color:#fff;border:none}.layui-layer-hui .layui-layer-content{padding:12px 25px;text-align:center}.layui-layer-dialog .layui-layer-padding{padding:20px 20px 20px 55px;text-align:left}.layui-layer-page .layui-layer-content{position:relative;overflow:auto}.layui-layer-iframe .layui-layer-btn,.layui-layer-page .layui-layer-btn{padding-top:10px}.layui-layer-nobg{background:0 0}.layui-layer-iframe iframe{display:block;width:100%}.layui-layer-loading{border-radius:100%;background:0 0;box-shadow:none;border:none}.layui-layer-loading .layui-layer-content{width:60px;height:24px;background:url(loading-0.gif) no-repeat}.layui-layer-loading .layui-layer-loading1{width:37px;height:37px;background:url(loading-1.gif) no-repeat}.layui-layer-ico16,.layui-layer-loading .layui-layer-loading2{width:32px;height:32px;background:url(loading-2.gif) no-repeat}.layui-layer-tips{background:0 0;box-shadow:none;border:none}.layui-layer-tips .layui-layer-content{position:relative;line-height:22px;min-width:12px;padding:8px 15px;font-size:12px;_float:left;border-radius:2px;box-shadow:1px 1px 3px rgba(0,0,0,.2);background-color:#000;color:#fff}.layui-layer-tips .layui-layer-close{right:-2px;top:-1px}.layui-layer-tips i.layui-layer-TipsG{position:absolute;width:0;height:0;border-width:8px;border-color:transparent;border-style:dashed;*overflow:hidden}.layui-layer-tips i.layui-layer-TipsB,.layui-layer-tips i.layui-layer-TipsT{left:5px;border-right-style:solid;border-right-color:#000}.layui-layer-tips i.layui-layer-TipsT{bottom:-8px}.layui-layer-tips i.layui-layer-TipsB{top:-8px}.layui-layer-tips i.layui-layer-TipsL,.layui-layer-tips i.layui-layer-TipsR{top:5px;border-bottom-style:solid;border-bottom-color:#000}.layui-layer-tips i.layui-layer-TipsR{left:-8px}.layui-layer-tips i.layui-layer-TipsL{right:-8px}.layui-layer-lan[type=dialog]{min-width:280px}.layui-layer-lan .layui-layer-title{background:#4476A7;color:#fff;border:none}.layui-layer-lan .layui-layer-btn{padding:5px 10px 10px;text-align:right;border-top:1px solid #E9E7E7}.layui-layer-lan .layui-layer-btn a{background:#fff;border-color:#E9E7E7;color:#333}.layui-layer-lan .layui-layer-btn .layui-layer-btn1{background:#C9C5C5}.layui-layer-molv .layui-layer-title{background:#009f95;color:#fff;border:none}.layui-layer-molv .layui-layer-btn a{background:#009f95;border-color:#009f95}.layui-layer-molv .layui-layer-btn .layui-layer-btn1{background:#92B8B1}.layui-layer-iconext{background:url(icon-ext.png) no-repeat}.layui-layer-prompt .layui-layer-input{display:block;width:230px;height:36px;margin:0 auto;line-height:30px;padding-left:10px;border:1px solid #e6e6e6;color:#333}.layui-layer-prompt textarea.layui-layer-input{width:300px;height:100px;line-height:20px;padding:6px 10px}.layui-layer-prompt .layui-layer-content{padding:20px}.layui-layer-prompt .layui-layer-btn{padding-top:0}.layui-layer-tab{box-shadow:1px 1px 50px rgba(0,0,0,.4)}.layui-layer-tab .layui-layer-title{padding-left:0;overflow:visible}.layui-layer-tab .layui-layer-title span{position:relative;float:left;min-width:80px;max-width:260px;padding:0 20px;text-align:center;overflow:hidden;cursor:pointer}.layui-layer-tab .layui-layer-title span.layui-this{height:43px;border-left:1px solid #eee;border-right:1px solid #eee;background-color:#fff;z-index:10}.layui-layer-tab .layui-layer-title span:first-child{border-left:none}.layui-layer-tabmain{line-height:24px;clear:both}.layui-layer-tabmain .layui-layer-tabli{display:none}.layui-layer-tabmain .layui-layer-tabli.layui-this{display:block}.layui-layer-photos{-webkit-animation-duration:.8s;animation-duration:.8s}.layui-layer-photos .layui-layer-content{overflow:hidden;text-align:center}.layui-layer-photos .layui-layer-phimg img{position:relative;width:100%;display:inline-block;*display:inline;*zoom:1;vertical-align:top}.layui-layer-imgbar,.layui-layer-imguide{display:none}.layui-layer-imgnext,.layui-layer-imgprev{position:absolute;top:50%;width:27px;_width:44px;height:44px;margin-top:-22px;outline:0;blr:expression(this.onFocus=this.blur())}.layui-layer-imgprev{left:10px;background-position:-5px -5px;_background-position:-70px -5px}.layui-layer-imgprev:hover{background-position:-33px -5px;_background-position:-120px -5px}.layui-layer-imgnext{right:10px;_right:8px;background-position:-5px -50px;_background-position:-70px -50px}.layui-layer-imgnext:hover{background-position:-33px -50px;_background-position:-120px -50px}.layui-layer-imgbar{position:absolute;left:0;bottom:0;width:100%;height:32px;line-height:32px;background-color:rgba(0,0,0,.8);background-color:#000\9;filter:Alpha(opacity=80);color:#fff;overflow:hidden;font-size:0}.layui-layer-imgtit *{display:inline-block;*display:inline;*zoom:1;vertical-align:top;font-size:12px}.layui-layer-imgtit a{max-width:65%;overflow:hidden;color:#fff}.layui-layer-imgtit a:hover{color:#fff;text-decoration:underline}.layui-layer-imgtit em{padding-left:10px;font-style:normal}@-webkit-keyframes layer-bounceOut{100%{opacity:0;-webkit-transform:scale(.7);transform:scale(.7)}30%{-webkit-transform:scale(1.05);transform:scale(1.05)}0%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes layer-bounceOut{100%{opacity:0;-webkit-transform:scale(.7);-ms-transform:scale(.7);transform:scale(.7)}30%{-webkit-transform:scale(1.05);-ms-transform:scale(1.05);transform:scale(1.05)}0%{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}}.layer-anim-close{-webkit-animation-name:layer-bounceOut;animation-name:layer-bounceOut;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.2s;animation-duration:.2s}@media screen and (max-width:1100px){.layui-layer-iframe{overflow-y:auto;-webkit-overflow-scrolling:touch}}
\ No newline at end of file
diff --git a/OpenAuth.Mvc/layui/font/iconfont.eot b/OpenAuth.Mvc/layui/font/iconfont.eot
index aaafc4c6..337538e4 100644
Binary files a/OpenAuth.Mvc/layui/font/iconfont.eot and b/OpenAuth.Mvc/layui/font/iconfont.eot differ
diff --git a/OpenAuth.Mvc/layui/font/iconfont.svg b/OpenAuth.Mvc/layui/font/iconfont.svg
index f6cefb54..abdbf68c 100644
--- a/OpenAuth.Mvc/layui/font/iconfont.svg
+++ b/OpenAuth.Mvc/layui/font/iconfont.svg
@@ -63,7 +63,7 @@ t9.5 -10.5t21.5 -4h37h67h81h80h64h36q23 0 34 12t2 38q-5 13 -9.5 30.5t-9.5 34.5q-
-
+
@@ -93,7 +93,7 @@ t9.5 -10.5t21.5 -4h37h67h81h80h64h36q23 0 34 12t2 38q-5 13 -9.5 30.5t-9.5 34.5q-
-
+
@@ -105,7 +105,7 @@ t9.5 -10.5t21.5 -4h37h67h81h80h64h36q23 0 34 12t2 38q-5 13 -9.5 30.5t-9.5 34.5q-
-
+
@@ -123,10 +123,13 @@ t9.5 -10.5t21.5 -4h37h67h81h80h64h36q23 0 34 12t2 38q-5 13 -9.5 30.5t-9.5 34.5q-
+
+
+
-
+
@@ -147,7 +150,7 @@ t9.5 -10.5t21.5 -4h37h67h81h80h64h36q23 0 34 12t2 38q-5 13 -9.5 30.5t-9.5 34.5q-
-
+
@@ -165,19 +168,19 @@ t9.5 -10.5t21.5 -4h37h67h81h80h64h36q23 0 34 12t2 38q-5 13 -9.5 30.5t-9.5 34.5q-
-
+
-
+
-
+
-
+
@@ -189,7 +192,7 @@ t9.5 -10.5t21.5 -4h37h67h81h80h64h36q23 0 34 12t2 38q-5 13 -9.5 30.5t-9.5 34.5q-
-
+
@@ -210,7 +213,7 @@ t9.5 -10.5t21.5 -4h37h67h81h80h64h36q23 0 34 12t2 38q-5 13 -9.5 30.5t-9.5 34.5q-
-
+
@@ -225,7 +228,7 @@ t9.5 -10.5t21.5 -4h37h67h81h80h64h36q23 0 34 12t2 38q-5 13 -9.5 30.5t-9.5 34.5q-
-
+
@@ -267,13 +270,13 @@ t9.5 -10.5t21.5 -4h37h67h81h80h64h36q23 0 34 12t2 38q-5 13 -9.5 30.5t-9.5 34.5q-
-
+
-
+
-
+
@@ -285,10 +288,10 @@ t9.5 -10.5t21.5 -4h37h67h81h80h64h36q23 0 34 12t2 38q-5 13 -9.5 30.5t-9.5 34.5q-
-
+
-
+
@@ -312,10 +315,10 @@ t9.5 -10.5t21.5 -4h37h67h81h80h64h36q23 0 34 12t2 38q-5 13 -9.5 30.5t-9.5 34.5q-
-
+
-
+
@@ -324,7 +327,10 @@ t9.5 -10.5t21.5 -4h37h67h81h80h64h36q23 0 34 12t2 38q-5 13 -9.5 30.5t-9.5 34.5q-
-
+
+
+
+
@@ -333,52 +339,91 @@ t9.5 -10.5t21.5 -4h37h67h81h80h64h36q23 0 34 12t2 38q-5 13 -9.5 30.5t-9.5 34.5q-
+
+
+
-
+
-
+
+
+
+
-
+
-
+
-
+
-
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -387,13 +432,25 @@ t9.5 -10.5t21.5 -4h37h67h81h80h64h36q23 0 34 12t2 38q-5 13 -9.5 30.5t-9.5 34.5q-
-
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/OpenAuth.Mvc/layui/font/iconfont.ttf b/OpenAuth.Mvc/layui/font/iconfont.ttf
index c336bc91..3a020b8a 100644
Binary files a/OpenAuth.Mvc/layui/font/iconfont.ttf and b/OpenAuth.Mvc/layui/font/iconfont.ttf differ
diff --git a/OpenAuth.Mvc/layui/font/iconfont.woff b/OpenAuth.Mvc/layui/font/iconfont.woff
index 1b94156e..e27e2fc0 100644
Binary files a/OpenAuth.Mvc/layui/font/iconfont.woff and b/OpenAuth.Mvc/layui/font/iconfont.woff differ
diff --git a/OpenAuth.Mvc/layui/lay/modules/carousel.js b/OpenAuth.Mvc/layui/lay/modules/carousel.js
index 7cda768b..47626083 100644
--- a/OpenAuth.Mvc/layui/lay/modules/carousel.js
+++ b/OpenAuth.Mvc/layui/lay/modules/carousel.js
@@ -1,2 +1,2 @@
-/** layui-v2.1.5 MIT License By http://www.layui.com */
- ;layui.define("jquery",function(e){"use strict";var i=layui.$,n=(layui.hint(),layui.device(),{config:{},set:function(e){var n=this;return n.config=i.extend({},n.config,e),n},on:function(e,i){return layui.onevent.call(this,t,e,i)}}),t="carousel",a="layui-this",l=">*[carousel-item]>*",o="layui-carousel-left",r="layui-carousel-right",d="layui-carousel-prev",s="layui-carousel-next",u="layui-carousel-arrow",c="layui-carousel-ind",m=function(e){var t=this;t.config=i.extend({},t.config,n.config,e),t.render()};m.prototype.config={width:"600px",height:"280px",full:!1,arrow:"hover",indicator:"inside",autoplay:!0,interval:3e3,anim:"",trigger:"click",index:0},m.prototype.render=function(){var e=this,n=e.config;n.elem=i(n.elem),n.elem[0]&&(e.elemItem=n.elem.find(l),n.index<0&&(n.index=0),n.index>=e.elemItem.length&&(n.index=e.elemItem.length-1),n.interval<800&&(n.interval=800),n.full?n.elem.css({position:"fixed",width:"100%",height:"100%",zIndex:9999}):n.elem.css({width:n.width,height:n.height}),n.elem.attr("lay-anim",n.anim),e.elemItem.eq(n.index).addClass(a),e.indicator(),e.elemItem.length<=1||(e.arrow(),e.autoplay(),e.events()))},m.prototype.reload=function(e){var n=this;clearInterval(n.timer),n.config=i.extend({},n.config,e),n.render()},m.prototype.prevIndex=function(){var e=this,i=e.config,n=i.index-1;return n<0&&(n=e.elemItem.length-1),n},m.prototype.nextIndex=function(){var e=this,i=e.config,n=i.index+1;return n>=e.elemItem.length&&(n=0),n},m.prototype.addIndex=function(e){var i=this,n=i.config;e=e||1,n.index=n.index+e,n.index>=i.elemItem.length&&(n.index=0)},m.prototype.subIndex=function(e){var i=this,n=i.config;e=e||1,n.index=n.index-e,n.index<0&&(n.index=i.elemItem.length-1)},m.prototype.autoplay=function(){var e=this,i=e.config;i.autoplay&&(e.timer=setInterval(function(){e.slide()},i.interval))},m.prototype.arrow=function(){var e=this,n=e.config,t=i(['
",'
"].join(""));n.elem.attr("lay-arrow",n.arrow),n.elem.find("."+u)[0]&&n.elem.find("."+u).remove(),n.elem.append(t),t.on("click",function(){var n=i(this),t=n.attr("lay-type");e.slide(t)})},m.prototype.indicator=function(){var e=this,n=e.config,t=e.elemInd=i(['
',function(){var i=[];return layui.each(e.elemItem,function(e){i.push("")}),i.join("")}(),"
"].join(""));n.elem.attr("lay-indicator",n.indicator),n.elem.find("."+c)[0]&&n.elem.find("."+c).remove(),n.elem.append(t),"updown"===n.anim&&t.css("margin-top",-(t.height()/2)),t.find("li").on("hover"===n.trigger?"mouseover":n.trigger,function(){var t=i(this),a=t.index();a>n.index?e.slide("add",a-n.index):a
*[carousel-item]>*",o="layui-carousel-left",r="layui-carousel-right",d="layui-carousel-prev",s="layui-carousel-next",u="layui-carousel-arrow",c="layui-carousel-ind",m=function(e){var t=this;t.config=i.extend({},t.config,n.config,e),t.render()};m.prototype.config={width:"600px",height:"280px",full:!1,arrow:"hover",indicator:"inside",autoplay:!0,interval:3e3,anim:"",trigger:"click",index:0},m.prototype.render=function(){var e=this,n=e.config;n.elem=i(n.elem),n.elem[0]&&(e.elemItem=n.elem.find(l),n.index<0&&(n.index=0),n.index>=e.elemItem.length&&(n.index=e.elemItem.length-1),n.interval<800&&(n.interval=800),n.full?n.elem.css({position:"fixed",width:"100%",height:"100%",zIndex:9999}):n.elem.css({width:n.width,height:n.height}),n.elem.attr("lay-anim",n.anim),e.elemItem.eq(n.index).addClass(a),e.elemItem.length<=1||(e.indicator(),e.arrow(),e.autoplay(),e.events()))},m.prototype.reload=function(e){var n=this;clearInterval(n.timer),n.config=i.extend({},n.config,e),n.render()},m.prototype.prevIndex=function(){var e=this,i=e.config,n=i.index-1;return n<0&&(n=e.elemItem.length-1),n},m.prototype.nextIndex=function(){var e=this,i=e.config,n=i.index+1;return n>=e.elemItem.length&&(n=0),n},m.prototype.addIndex=function(e){var i=this,n=i.config;e=e||1,n.index=n.index+e,n.index>=i.elemItem.length&&(n.index=0)},m.prototype.subIndex=function(e){var i=this,n=i.config;e=e||1,n.index=n.index-e,n.index<0&&(n.index=i.elemItem.length-1)},m.prototype.autoplay=function(){var e=this,i=e.config;i.autoplay&&(e.timer=setInterval(function(){e.slide()},i.interval))},m.prototype.arrow=function(){var e=this,n=e.config,t=i(['",'"].join(""));n.elem.attr("lay-arrow",n.arrow),n.elem.find("."+u)[0]&&n.elem.find("."+u).remove(),n.elem.append(t),t.on("click",function(){var n=i(this),t=n.attr("lay-type");e.slide(t)})},m.prototype.indicator=function(){var e=this,n=e.config,t=e.elemInd=i(['',function(){var i=[];return layui.each(e.elemItem,function(e){i.push("")}),i.join("")}(),"
"].join(""));n.elem.attr("lay-indicator",n.indicator),n.elem.find("."+c)[0]&&n.elem.find("."+c).remove(),n.elem.append(t),"updown"===n.anim&&t.css("margin-top",-(t.height()/2)),t.find("li").on("hover"===n.trigger?"mouseover":n.trigger,function(){var t=i(this),a=t.index();a>n.index?e.slide("add",a-n.index):a/g,">").replace(/'/g,"'").replace(/"/g,""")),c.html('- '+o.replace(/[\r\t\n]+/g,"
- ")+"
"),c.find(">.layui-code-h3")[0]||c.prepend(''+(c.attr("lay-title")||e.title||"code")+(e.about?'layui.code':"")+"
");var d=c.find(">.layui-code-ol");c.addClass("layui-box layui-code-view"),(c.attr("lay-skin")||e.skin)&&c.addClass("layui-code-"+(c.attr("lay-skin")||e.skin)),(d.find("li").length/100|0)>0&&d.css("margin-left",(d.find("li").length/100|0)+"px"),(c.attr("lay-height")||e.height)&&d.css("max-height",c.attr("lay-height")||e.height)})})}).addcss("modules/code.css","skincodecss");
\ No newline at end of file
diff --git a/OpenAuth.Mvc/layui/lay/modules/element.js b/OpenAuth.Mvc/layui/lay/modules/element.js
index 3217752f..d469ba06 100644
--- a/OpenAuth.Mvc/layui/lay/modules/element.js
+++ b/OpenAuth.Mvc/layui/lay/modules/element.js
@@ -1,2 +1,2 @@
-/** layui-v2.1.5 MIT License By http://www.layui.com */
- ;layui.define("jquery",function(i){"use strict";var a=layui.$,t=(layui.hint(),layui.device()),l="element",e="layui-this",n="layui-show",s=function(){this.config={}};s.prototype.set=function(i){var t=this;return a.extend(!0,t.config,i),t},s.prototype.on=function(i,a){return layui.onevent.call(this,l,i,a)},s.prototype.tabAdd=function(i,t){var l=".layui-tab-title",e=a(".layui-tab[lay-filter="+i+"]"),n=e.children(l),s=n.children(".layui-tab-bar"),o=e.children(".layui-tab-content"),c=''+(t.title||"unnaming")+"";return s[0]?s.before(c):n.append(c),o.append(''+(t.content||"")+"
"),y.hideTabMore(!0),y.tabAuto(),this},s.prototype.tabDelete=function(i,t){var l=".layui-tab-title",e=a(".layui-tab[lay-filter="+i+"]"),n=e.children(l),s=n.find('>li[lay-id="'+t+'"]');return y.tabDelete(null,s),this},s.prototype.tabChange=function(i,t){var l=".layui-tab-title",e=a(".layui-tab[lay-filter="+i+"]"),n=e.children(l),s=n.find('>li[lay-id="'+t+'"]');return y.tabClick(null,null,s),this},s.prototype.progress=function(i,t){var l="layui-progress",e=a("."+l+"[lay-filter="+i+"]"),n=e.find("."+l+"-bar"),s=n.find("."+l+"-text");return n.css("width",t),s.text(t),this};var o=".layui-nav",c="layui-nav-item",r="layui-nav-bar",u="layui-nav-tree",d="layui-nav-child",h="layui-nav-more",f="layui-anim layui-anim-upbit",y={tabClick:function(i,t,s){var o=s||a(this),t=t||o.parent().children("li").index(o),c=o.parents(".layui-tab").eq(0),r=c.children(".layui-tab-content").children(".layui-tab-item"),u=o.find("a"),d=c.attr("lay-filter");"javascript:;"!==u.attr("href")&&"_blank"===u.attr("target")||(o.addClass(e).siblings().removeClass(e),r.eq(t).addClass(n).siblings().removeClass(n)),layui.event.call(this,l,"tab("+d+")",{elem:c,index:t})},tabDelete:function(i,t){var l=t||a(this).parent(),n=l.index(),s=l.parents(".layui-tab").eq(0),o=s.children(".layui-tab-content").children(".layui-tab-item");l.hasClass(e)&&(l.next()[0]?y.tabClick.call(l.next()[0],null,n+1):l.prev()[0]&&y.tabClick.call(l.prev()[0],null,n-1)),l.remove(),o.eq(n).remove(),setTimeout(function(){y.tabAuto()},50)},tabAuto:function(){var i="layui-tab-more",l="layui-tab-bar",e="layui-tab-close",n=this;a(".layui-tab").each(function(){var s=a(this),o=s.children(".layui-tab-title"),c=(s.children(".layui-tab-content").children(".layui-tab-item"),'lay-stope="tabmore"'),r=a('');if(n===window&&8!=t.ie&&y.hideTabMore(!0),s.attr("lay-allowClose")&&o.find("li").each(function(){var i=a(this);if(!i.find("."+e)[0]){var t=a('ဆ');t.on("click",y.tabDelete),i.append(t)}}),o.prop("scrollWidth")>o.outerWidth()+1){if(o.find("."+l)[0])return;o.append(r),s.attr("overflow",""),r.on("click",function(a){o[this.title?"removeClass":"addClass"](i),this.title=this.title?"":"收缩"})}else o.find("."+l).remove(),s.removeAttr("overflow")})},hideTabMore:function(i){var t=a(".layui-tab-title");i!==!0&&"tabmore"===a(i.target).attr("lay-stope")||(t.removeClass("layui-tab-more"),t.find(".layui-tab-bar").attr("title",""))},clickThis:function(){var i=a(this),t=i.parents(o),n=t.attr("lay-filter"),s=i.find("a");i.find("."+d)[0]||("javascript:;"!==s.attr("href")&&"_blank"===s.attr("target")||(t.find("."+e).removeClass(e),i.addClass(e)),layui.event.call(this,l,"nav("+n+")",i))},clickChild:function(){var i=a(this),t=i.parents(o),n=t.attr("lay-filter");t.find("."+e).removeClass(e),i.addClass(e),layui.event.call(this,l,"nav("+n+")",i)},showChild:function(){var i=a(this),t=i.parents(o),l=i.parent(),e=i.siblings("."+d);t.hasClass(u)&&(e.removeClass(f),l["none"===e.css("display")?"addClass":"removeClass"](c+"ed"))},collapse:function(){var i=a(this),t=i.find(".layui-colla-icon"),e=i.siblings(".layui-colla-content"),s=i.parents(".layui-collapse").eq(0),o=s.attr("lay-filter"),c="none"===e.css("display");if("string"==typeof s.attr("lay-accordion")){var r=s.children(".layui-colla-item").children("."+n);r.siblings(".layui-colla-title").children(".layui-colla-icon").html(""),r.removeClass(n)}e[c?"addClass":"removeClass"](n),t.html(c?"":""),layui.event.call(this,l,"collapse("+o+")",{title:i,content:e,show:c})}};s.prototype.init=function(i){var l={tab:function(){y.tabAuto.call({})},nav:function(){var i=200,l={},e={},s={},p=function(o,c,r){var y=a(this),p=y.find("."+d);c.hasClass(u)?o.css({top:y.position().top,height:y.children("a").height(),opacity:1}):(p.addClass(f),o.css({left:y.position().left+parseFloat(y.css("marginLeft")),top:y.position().top+y.height()-5}),l[r]=setTimeout(function(){o.css({width:y.width(),opacity:1})},t.ie&&t.ie<10?0:i),clearTimeout(s[r]),"block"===p.css("display")&&clearTimeout(e[r]),e[r]=setTimeout(function(){p.addClass(n),y.find("."+h).addClass(h+"d")},300))};a(o).each(function(t){var o=a(this),f=a(''),v=o.find("."+c);o.find("."+r)[0]||(o.append(f),v.on("mouseenter",function(){p.call(this,f,o,t)}).on("mouseleave",function(){o.hasClass(u)||(clearTimeout(e[t]),e[t]=setTimeout(function(){o.find("."+d).removeClass(n),o.find("."+h).removeClass(h+"d")},300))}),o.on("mouseleave",function(){clearTimeout(l[t]),s[t]=setTimeout(function(){o.hasClass(u)?f.css({height:0,top:f.position().top+f.height()/2,opacity:0}):f.css({width:0,left:f.position().left+f.width()/2,opacity:0})},i)})),v.each(function(){var i=a(this),t=i.find("."+d);if(t[0]&&!i.find("."+h)[0]){var l=i.children("a");l.append('')}i.off("click",y.clickThis).on("click",y.clickThis),i.children("a").off("click",y.showChild).on("click",y.showChild),t.children("dd").off("click",y.clickChild).on("click",y.clickChild)})})},breadcrumb:function(){var i=".layui-breadcrumb";a(i).each(function(){var i=a(this),t=i.attr("lay-separator")||">",l=i.find("a");l.find(".layui-box")[0]||(l.each(function(i){i!==l.length-1&&a(this).append(''+t+"")}),i.css("visibility","visible"))})},progress:function(){var i="layui-progress";a("."+i).each(function(){var t=a(this),l=t.find(".layui-progress-bar"),e=l.attr("lay-percent");l.css("width",e),t.attr("lay-showPercent")&&setTimeout(function(){var a=Math.round(l.width()/t.width()*100);a>100&&(a=100),l.html(''+a+"%")},350)})},collapse:function(){var i="layui-collapse";a("."+i).each(function(){var i=a(this).find(".layui-colla-item");i.each(function(){var i=a(this),t=i.find(".layui-colla-title"),l=i.find(".layui-colla-content"),e="none"===l.css("display");t.find(".layui-colla-icon").remove(),t.append(''+(e?"":"")+""),t.off("click",y.collapse).on("click",y.collapse)})})}};return layui.each(l,function(i,a){a()})};var p=new s,v=a(document);p.init();var b=".layui-tab-title li";v.on("click",b,y.tabClick),v.on("click",y.hideTabMore),a(window).on("resize",y.tabAuto),i(l,p)});
\ No newline at end of file
+/** layui-v2.2.5 MIT License By https://www.layui.com */
+ ;layui.define("jquery",function(i){"use strict";var t=layui.$,a=(layui.hint(),layui.device()),e="element",l="layui-this",n="layui-show",s=function(){this.config={}};s.prototype.set=function(i){var a=this;return t.extend(!0,a.config,i),a},s.prototype.on=function(i,t){return layui.onevent.call(this,e,i,t)},s.prototype.tabAdd=function(i,a){var e=".layui-tab-title",l=t(".layui-tab[lay-filter="+i+"]"),n=l.children(e),s=n.children(".layui-tab-bar"),o=l.children(".layui-tab-content"),c=''+(a.title||"unnaming")+"";return s[0]?s.before(c):n.append(c),o.append(''+(a.content||"")+"
"),y.hideTabMore(!0),y.tabAuto(),this},s.prototype.tabDelete=function(i,a){var e=".layui-tab-title",l=t(".layui-tab[lay-filter="+i+"]"),n=l.children(e),s=n.find('>li[lay-id="'+a+'"]');return y.tabDelete(null,s),this},s.prototype.tabChange=function(i,a){var e=".layui-tab-title",l=t(".layui-tab[lay-filter="+i+"]"),n=l.children(e),s=n.find('>li[lay-id="'+a+'"]');return y.tabClick.call(s[0],null,null,s),this},s.prototype.tab=function(i){i=i||{},v.on("click",i.headerElem,function(a){var e=t(this).index();y.tabClick.call(this,a,e,null,i)})},s.prototype.progress=function(i,a){var e="layui-progress",l=t("."+e+"[lay-filter="+i+"]"),n=l.find("."+e+"-bar"),s=n.find("."+e+"-text");return n.css("width",a),s.text(a),this};var o=".layui-nav",c="layui-nav-item",r="layui-nav-bar",u="layui-nav-tree",d="layui-nav-child",h="layui-nav-more",f="layui-anim layui-anim-upbit",y={tabClick:function(i,a,s,o){o=o||{};var c=s||t(this),a=a||c.parent().children("li").index(c),r=o.headerElem?c.parent():c.parents(".layui-tab").eq(0),u=o.bodyElem?t(o.bodyElem):r.children(".layui-tab-content").children(".layui-tab-item"),d=c.find("a"),h=r.attr("lay-filter");"javascript:;"!==d.attr("href")&&"_blank"===d.attr("target")||(c.addClass(l).siblings().removeClass(l),u.eq(a).addClass(n).siblings().removeClass(n)),layui.event.call(this,e,"tab("+h+")",{elem:r,index:a})},tabDelete:function(i,a){var n=a||t(this).parent(),s=n.index(),o=n.parents(".layui-tab").eq(0),c=o.children(".layui-tab-content").children(".layui-tab-item"),r=o.attr("lay-filter");n.hasClass(l)&&(n.next()[0]?y.tabClick.call(n.next()[0],null,s+1):n.prev()[0]&&y.tabClick.call(n.prev()[0],null,s-1)),n.remove(),c.eq(s).remove(),setTimeout(function(){y.tabAuto()},50),layui.event.call(this,e,"tabDelete("+r+")",{elem:o,index:s})},tabAuto:function(){var i="layui-tab-more",e="layui-tab-bar",l="layui-tab-close",n=this;t(".layui-tab").each(function(){var s=t(this),o=s.children(".layui-tab-title"),c=(s.children(".layui-tab-content").children(".layui-tab-item"),'lay-stope="tabmore"'),r=t('');if(n===window&&8!=a.ie&&y.hideTabMore(!0),s.attr("lay-allowClose")&&o.find("li").each(function(){var i=t(this);if(!i.find("."+l)[0]){var a=t('ဆ');a.on("click",y.tabDelete),i.append(a)}}),o.prop("scrollWidth")>o.outerWidth()+1){if(o.find("."+e)[0])return;o.append(r),s.attr("overflow",""),r.on("click",function(t){o[this.title?"removeClass":"addClass"](i),this.title=this.title?"":"收缩"})}else o.find("."+e).remove(),s.removeAttr("overflow")})},hideTabMore:function(i){var a=t(".layui-tab-title");i!==!0&&"tabmore"===t(i.target).attr("lay-stope")||(a.removeClass("layui-tab-more"),a.find(".layui-tab-bar").attr("title",""))},clickThis:function(){var i=t(this),a=i.parents(o),n=a.attr("lay-filter"),s=i.find("a"),c="string"==typeof i.attr("lay-unselect");i.find("."+d)[0]||("javascript:;"!==s.attr("href")&&"_blank"===s.attr("target")||c||(a.find("."+l).removeClass(l),i.addClass(l)),layui.event.call(this,e,"nav("+n+")",i))},clickChild:function(){var i=t(this),a=i.parents(o),n=a.attr("lay-filter");a.find("."+l).removeClass(l),i.addClass(l),layui.event.call(this,e,"nav("+n+")",i)},showChild:function(){var i=t(this),a=i.parents(o),e=i.parent(),l=i.siblings("."+d);a.hasClass(u)&&(l.removeClass(f),e["none"===l.css("display")?"addClass":"removeClass"](c+"ed"))},collapse:function(){var i=t(this),a=i.find(".layui-colla-icon"),l=i.siblings(".layui-colla-content"),s=i.parents(".layui-collapse").eq(0),o=s.attr("lay-filter"),c="none"===l.css("display");if("string"==typeof s.attr("lay-accordion")){var r=s.children(".layui-colla-item").children("."+n);r.siblings(".layui-colla-title").children(".layui-colla-icon").html(""),r.removeClass(n)}l[c?"addClass":"removeClass"](n),a.html(c?"":""),layui.event.call(this,e,"collapse("+o+")",{title:i,content:l,show:c})}};s.prototype.init=function(i,e){var l=function(){return e?'[lay-filter="'+e+'"]':""}(),s={tab:function(){y.tabAuto.call({})},nav:function(){var i=200,e={},s={},p={},v=function(l,o,c){var r=t(this),y=r.find("."+d);o.hasClass(u)?l.css({top:r.position().top,height:r.children("a").height(),opacity:1}):(y.addClass(f),l.css({left:r.position().left+parseFloat(r.css("marginLeft")),top:r.position().top+r.height()-l.height()}),e[c]=setTimeout(function(){l.css({width:r.width(),opacity:1})},a.ie&&a.ie<10?0:i),clearTimeout(p[c]),"block"===y.css("display")&&clearTimeout(s[c]),s[c]=setTimeout(function(){y.addClass(n),r.find("."+h).addClass(h+"d")},300))};t(o+l).each(function(a){var l=t(this),o=t(''),f=l.find("."+c);l.find("."+r)[0]||(l.append(o),f.on("mouseenter",function(){v.call(this,o,l,a)}).on("mouseleave",function(){l.hasClass(u)||(clearTimeout(s[a]),s[a]=setTimeout(function(){l.find("."+d).removeClass(n),l.find("."+h).removeClass(h+"d")},300))}),l.on("mouseleave",function(){clearTimeout(e[a]),p[a]=setTimeout(function(){l.hasClass(u)?o.css({height:0,top:o.position().top+o.height()/2,opacity:0}):o.css({width:0,left:o.position().left+o.width()/2,opacity:0})},i)})),f.each(function(){var i=t(this),a=i.find("."+d);if(a[0]&&!i.find("."+h)[0]){var e=i.children("a");e.append('')}i.off("click",y.clickThis).on("click",y.clickThis),i.children("a").off("click",y.showChild).on("click",y.showChild),a.children("dd").off("click",y.clickChild).on("click",y.clickChild)})})},breadcrumb:function(){var i=".layui-breadcrumb";t(i+l).each(function(){var i=t(this),a="lay-separator",e=i.attr(a)||"/",l=i.find("a");l.next("span["+a+"]")[0]||(l.each(function(i){i!==l.length-1&&t(this).after(""+e+"")}),i.css("visibility","visible"))})},progress:function(){var i="layui-progress";t("."+i+l).each(function(){var a=t(this),e=a.find(".layui-progress-bar"),l=e.attr("lay-percent");e.css("width",function(){return/^.+\/.+$/.test(l)?100*new Function("return "+l)()+"%":l}()),a.attr("lay-showPercent")&&setTimeout(function(){e.html(''+l+"")},350)})},collapse:function(){var i="layui-collapse";t("."+i+l).each(function(){var i=t(this).find(".layui-colla-item");i.each(function(){var i=t(this),a=i.find(".layui-colla-title"),e=i.find(".layui-colla-content"),l="none"===e.css("display");a.find(".layui-colla-icon").remove(),a.append(''+(l?"":"")+""),a.off("click",y.collapse).on("click",y.collapse)})})}};return s[i]?s[i]():layui.each(s,function(i,t){t()})},s.prototype.render=s.prototype.init;var p=new s,v=t(document);p.render();var b=".layui-tab-title li";v.on("click",b,y.tabClick),v.on("click",y.hideTabMore),t(window).on("resize",y.tabAuto),i(e,p)});
\ No newline at end of file
diff --git a/OpenAuth.Mvc/layui/lay/modules/flow.js b/OpenAuth.Mvc/layui/lay/modules/flow.js
index 5e23add2..501df15a 100644
--- a/OpenAuth.Mvc/layui/lay/modules/flow.js
+++ b/OpenAuth.Mvc/layui/lay/modules/flow.js
@@ -1,2 +1,2 @@
-/** layui-v2.1.5 MIT License By http://www.layui.com */
+/** layui-v2.2.5 MIT License By https://www.layui.com */
;layui.define("jquery",function(e){"use strict";var l=layui.$,o=function(e){},t='';o.prototype.load=function(e){var o,i,n,r,a=this,c=0;e=e||{};var f=l(e.elem);if(f[0]){var m=l(e.scrollElem||document),u=e.mb||50,s=!("isAuto"in e)||e.isAuto,v=e.end||"没有更多了",y=e.scrollElem&&e.scrollElem!==document,d="加载更多",h=l('");f.find(".layui-flow-more")[0]||f.append(h);var p=function(e,t){e=l(e),h.before(e),t=0==t||null,t?h.html(v):h.find("a").html(d),i=t,o=null,n&&n()},g=function(){o=!0,h.find("a").html(t),"function"==typeof e.done&&e.done(++c,p)};if(g(),h.find("a").on("click",function(){l(this);i||o||g()}),e.isLazyimg)var n=a.lazyimg({elem:e.elem+" img",scrollElem:e.scrollElem});return s?(m.on("scroll",function(){var e=l(this),t=e.scrollTop();r&&clearTimeout(r),i||(r=setTimeout(function(){var i=y?e.height():l(window).height(),n=y?e.prop("scrollHeight"):document.documentElement.scrollHeight;n-t-i<=u&&(o||g())},100))}),a):a}},o.prototype.lazyimg=function(e){var o,t=this,i=0;e=e||{};var n=l(e.scrollElem||document),r=e.elem||"img",a=e.scrollElem&&e.scrollElem!==document,c=function(e,l){var o=n.scrollTop(),r=o+l,c=a?function(){return e.offset().top-n.offset().top+o}():e.offset().top;if(c>=o&&c<=r&&!e.attr("src")){var m=e.attr("lay-src");layui.img(m,function(){var l=t.lazyimg.elem.eq(i);e.attr("src",m).removeAttr("lay-src"),l[0]&&f(l),i++})}},f=function(e,o){var f=a?(o||n).height():l(window).height(),m=n.scrollTop(),u=m+f;if(t.lazyimg.elem=l(r),e)c(e,f);else for(var s=0;su)break}};if(f(),!o){var m;n.on("scroll",function(){var e=l(this);m&&clearTimeout(m),m=setTimeout(function(){f(null,e)},50)}),o=!0}return f},e("flow",new o)});
\ No newline at end of file
diff --git a/OpenAuth.Mvc/layui/lay/modules/form.js b/OpenAuth.Mvc/layui/lay/modules/form.js
index 7247f212..27279398 100644
--- a/OpenAuth.Mvc/layui/lay/modules/form.js
+++ b/OpenAuth.Mvc/layui/lay/modules/form.js
@@ -1,2 +1,2 @@
-/** layui-v2.1.5 MIT License By http://www.layui.com */
- ;layui.define("layer",function(e){"use strict";var i=layui.$,t=layui.layer,a=layui.hint(),n=layui.device(),l="form",s=".layui-form",r="layui-this",u="layui-hide",c="layui-disabled",o=function(){this.config={verify:{required:[/[\S]+/,"必填项不能为空"],phone:[/^1\d{10}$/,"请输入正确的手机号"],email:[/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/,"邮箱格式不正确"],url:[/(^#)|(^http(s*):\/\/[^\s]+\.[^\s]+)/,"链接格式不正确"],number:function(e){if(!e||isNaN(e))return"只能填写数字"},date:[/^(\d{4})[-\/](\d{1}|0\d{1}|1[0-2])([-\/](\d{1}|0\d{1}|[1-2][0-9]|3[0-1]))*$/,"日期格式不正确"],identity:[/(^\d{15}$)|(^\d{17}(x|X|\d)$)/,"请输入正确的身份证号"]}}};o.prototype.set=function(e){var t=this;return i.extend(!0,t.config,e),t},o.prototype.verify=function(e){var t=this;return i.extend(!0,t.config.verify,e),t},o.prototype.on=function(e,i){return layui.onevent.call(this,l,e,i)},o.prototype.render=function(e,t){var n=this,o=i(s+function(){return t?'[lay-filter="'+t+'"]':""}()),d={select:function(){var e,t="请选择",a="layui-form-select",n="layui-select-title",s="layui-select-none",d="",f=o.find("select"),y=function(t,l){i(t.target).parent().hasClass(n)&&!l||(i("."+a).removeClass(a+"ed "+a+"up"),e&&d&&e.val(d)),e=null},h=function(t,o,f){var h=i(this),p=t.find("."+n),m=p.find("input"),k=t.find("dl"),g=k.children("dd");if(!o){var b=function(){var e=t.offset().top+t.outerHeight()+5-v.scrollTop(),i=k.outerHeight();t.addClass(a+"ed"),g.removeClass(u),e+i>v.height()&&e>=i&&t.addClass(a+"up")},x=function(e){t.removeClass(a+"ed "+a+"up"),m.blur(),e||C(m.val(),function(e){e&&(d=k.find("."+r).html(),m&&m.val(d))})};p.on("click",function(e){t.hasClass(a+"ed")?x():(y(e,!0),b()),k.find("."+s).remove()}),p.find(".layui-edge").on("click",function(){m.focus()}),m.on("keyup",function(e){var i=e.keyCode;9===i&&b()}).on("keydown",function(e){var i=e.keyCode;9===i?x():13===i&&e.preventDefault()});var C=function(e,t,a){var n=0;layui.each(g,function(){var t=i(this),l=t.text(),s=l.indexOf(e)===-1;(""===e||"blur"===a?e!==l:s)&&n++,"keyup"===a&&t[s?"addClass":"removeClass"](u)});var l=n===g.length;return t(l),l},w=function(e){var i=this.value,t=e.keyCode;return 9!==t&&13!==t&&37!==t&&38!==t&&39!==t&&40!==t&&(C(i,function(e){e?k.find("."+s)[0]||k.append('无匹配项
'):k.find("."+s).remove()},"keyup"),void(""===i&&k.find("."+s).remove()))};f&&m.on("keyup",w).on("blur",function(i){e=m,d=k.find("."+r).html(),setTimeout(function(){C(m.val(),function(e){e&&!d&&m.val("")},"blur")},200)}),g.on("click",function(){var e=i(this),a=e.attr("lay-value"),n=h.attr("lay-filter");return!e.hasClass(c)&&(e.hasClass("layui-select-tips")?m.val(""):(m.val(e.text()),e.addClass(r)),e.siblings().removeClass(r),h.val(a).removeClass("layui-form-danger"),layui.event.call(this,l,"select("+n+")",{elem:h[0],value:a,othis:t}),x(!0),!1)}),t.find("dl>dt").on("click",function(e){return!1}),i(document).off("click",y).on("click",y)}};f.each(function(e,l){var s=i(this),u=s.next("."+a),o=this.disabled,d=l.value,f=i(l.options[l.selectedIndex]),y=l.options[0];if("string"==typeof s.attr("lay-ignore"))return s.show();var v="string"==typeof s.attr("lay-search"),p=y?y.value?t:y.innerHTML||t:t,m=i(['','
','
','
'+function(e){var i=[];return layui.each(e,function(e,a){0!==e||a.value?"optgroup"===a.tagName.toLowerCase()?i.push("- "+a.label+"
"):i.push('- '+a.innerHTML+"
"):i.push('- '+(a.innerHTML||t)+"
")}),0===i.length&&i.push('- 没有选项
'),i.join("")}(s.find("*"))+"
","
"].join(""));u[0]&&u.remove(),s.after(m),h.call(this,m,o,v)})},checkbox:function(){var e={checkbox:["layui-form-checkbox","layui-form-checked","checkbox"],_switch:["layui-form-switch","layui-form-onswitch","switch"]},t=o.find("input[type=checkbox]"),a=function(e,t){var a=i(this);e.on("click",function(){var i=a.attr("lay-filter"),n=(a.attr("lay-text")||"").split("|");a[0].disabled||(a[0].checked?(a[0].checked=!1,e.removeClass(t[1]).find("em").text(n[1])):(a[0].checked=!0,e.addClass(t[1]).find("em").text(n[0])),layui.event.call(a[0],l,t[2]+"("+i+")",{elem:a[0],value:a[0].value,othis:e}))})};t.each(function(t,n){var l=i(this),s=l.attr("lay-skin"),r=(l.attr("lay-text")||"").split("|"),u=this.disabled;"switch"===s&&(s="_"+s);var o=e[s]||e.checkbox;if("string"==typeof l.attr("lay-ignore"))return l.show();var d=l.next("."+o[0]),f=i(['',{_switch:""+((n.checked?r[0]:r[1])||"")+""}[s]||(n.title.replace(/\s/g,"")?""+n.title+"":"")+''+(s?"":"")+"","
"].join(""));d[0]&&d.remove(),l.after(f),a.call(this,f,o)})},radio:function(){var e="layui-form-radio",t=["",""],a=o.find("input[type=radio]"),n=function(a){var n=i(this),r="layui-anim-scaleSpring";a.on("click",function(){var u=n[0].name,c=n.parents(s),o=n.attr("lay-filter"),d=c.find("input[name="+u.replace(/(\.|#|\[|\])/g,"\\$1")+"]");n[0].disabled||(layui.each(d,function(){var a=i(this).next("."+e);this.checked=!1,a.removeClass(e+"ed"),a.find(".layui-icon").removeClass(r).html(t[1])}),n[0].checked=!0,a.addClass(e+"ed"),a.find(".layui-icon").addClass(r).html(t[0]),layui.event.call(n[0],l,"radio("+o+")",{elem:n[0],value:n[0].value,othis:a}))})};a.each(function(a,l){var s=i(this),r=s.next("."+e),u=this.disabled;if("string"==typeof s.attr("lay-ignore"))return s.show();var o=i(['',''+t[l.checked?0:1]+"",""+(l.title||"未命名")+"","
"].join(""));r[0]&&r.remove(),s.after(o),n.call(this,o)})}};return e?d[e]?d[e]():a.error("不支持的"+e+"表单渲染"):layui.each(d,function(e,i){i()}),n};var d=function(){var e=i(this),a=f.config.verify,r=null,u="layui-form-danger",c={},o=e.parents(s),d=o.find("*[lay-verify]"),y=e.parents("form")[0],v=o.find("input,select,textarea"),h=e.attr("lay-filter");return layui.each(d,function(e,l){var s=i(this),c=s.attr("lay-verify").split("|"),o="",d=s.val();if(s.removeClass(u),layui.each(c,function(e,i){var c="function"==typeof a[i];if(a[i]&&(c?o=a[i](d,l):!a[i][0].test(d)))return t.msg(o||a[i][1],{icon:5,shift:6}),n.android||n.ios||l.focus(),s.addClass(u),r=!0}),r)return r}),!r&&(layui.each(v,function(e,i){i.name&&(/^checkbox|radio$/.test(i.type)&&!i.checked||(c[i.name]=i.value))}),layui.event.call(this,l,"submit("+h+")",{elem:this,form:y,field:c}))},f=new o,y=i(document),v=i(window);f.render(),y.on("reset",s,function(){var e=i(this).attr("lay-filter");setTimeout(function(){f.render(null,e)},50)}),y.on("submit",s,d).on("click","*[lay-submit]",d),e(l,f)});
\ No newline at end of file
+/** layui-v2.2.5 MIT License By https://www.layui.com */
+ ;layui.define("layer",function(e){"use strict";var t=layui.$,i=layui.layer,a=layui.hint(),n=layui.device(),l="form",r=".layui-form",s="layui-this",o="layui-hide",u="layui-disabled",c=function(){this.config={verify:{required:[/[\S]+/,"必填项不能为空"],phone:[/^1\d{10}$/,"请输入正确的手机号"],email:[/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/,"邮箱格式不正确"],url:[/(^#)|(^http(s*):\/\/[^\s]+\.[^\s]+)/,"链接格式不正确"],number:function(e){if(!e||isNaN(e))return"只能填写数字"},date:[/^(\d{4})[-\/](\d{1}|0\d{1}|1[0-2])([-\/](\d{1}|0\d{1}|[1-2][0-9]|3[0-1]))*$/,"日期格式不正确"],identity:[/(^\d{15}$)|(^\d{17}(x|X|\d)$)/,"请输入正确的身份证号"]}}};c.prototype.set=function(e){var i=this;return t.extend(!0,i.config,e),i},c.prototype.verify=function(e){var i=this;return t.extend(!0,i.config.verify,e),i},c.prototype.on=function(e,t){return layui.onevent.call(this,l,e,t)},c.prototype.render=function(e,i){var n=this,c=t(r+function(){return i?'[lay-filter="'+i+'"]':""}()),d={select:function(){var e,i="请选择",a="layui-form-select",n="layui-select-title",r="layui-select-none",d="",f=c.find("select"),y=function(i,l){t(i.target).parent().hasClass(n)&&!l||(t("."+a).removeClass(a+"ed "+a+"up"),e&&d&&e.val(d)),e=null},h=function(i,c,f){var h=t(this),p=i.find("."+n),m=p.find("input"),k=i.find("dl"),g=k.children("dd");if(!c){var x=function(){var e=i.offset().top+i.outerHeight()+5-v.scrollTop(),t=k.outerHeight();i.addClass(a+"ed"),g.removeClass(o),e+t>v.height()&&e>=t&&i.addClass(a+"up")},b=function(e){i.removeClass(a+"ed "+a+"up"),m.blur(),e||C(m.val(),function(e){e&&(d=k.find("."+s).html(),m&&m.val(d))})};p.on("click",function(e){i.hasClass(a+"ed")?b():(y(e,!0),x()),k.find("."+r).remove()}),p.find(".layui-edge").on("click",function(){m.focus()}),m.on("keyup",function(e){var t=e.keyCode;9===t&&x()}).on("keydown",function(e){var t=e.keyCode;9===t?b():13===t&&e.preventDefault()});var C=function(e,i,a){var n=0;layui.each(g,function(){var i=t(this),l=i.text(),r=l.indexOf(e)===-1;(""===e||"blur"===a?e!==l:r)&&n++,"keyup"===a&&i[r?"addClass":"removeClass"](o)});var l=n===g.length;return i(l),l},w=function(e){var t=this.value,i=e.keyCode;return 9!==i&&13!==i&&37!==i&&38!==i&&39!==i&&40!==i&&(C(t,function(e){e?k.find("."+r)[0]||k.append('无匹配项
'):k.find("."+r).remove()},"keyup"),void(""===t&&k.find("."+r).remove()))};f&&m.on("keyup",w).on("blur",function(t){e=m,d=k.find("."+s).html(),setTimeout(function(){C(m.val(),function(e){d||m.val("")},"blur")},200)}),g.on("click",function(){var e=t(this),a=e.attr("lay-value"),n=h.attr("lay-filter");return!e.hasClass(u)&&(e.hasClass("layui-select-tips")?m.val(""):(m.val(e.text()),e.addClass(s)),e.siblings().removeClass(s),h.val(a).removeClass("layui-form-danger"),layui.event.call(this,l,"select("+n+")",{elem:h[0],value:a,othis:i}),b(!0),!1)}),i.find("dl>dt").on("click",function(e){return!1}),t(document).off("click",y).on("click",y)}};f.each(function(e,l){var r=t(this),o=r.next("."+a),c=this.disabled,d=l.value,f=t(l.options[l.selectedIndex]),y=l.options[0];if("string"==typeof r.attr("lay-ignore"))return r.show();var v="string"==typeof r.attr("lay-search"),p=y?y.value?i:y.innerHTML||i:i,m=t(['','
','
','
'+function(e){var t=[];return layui.each(e,function(e,a){0!==e||a.value?"optgroup"===a.tagName.toLowerCase()?t.push("- "+a.label+"
"):t.push('- '+a.innerHTML+"
"):t.push('- '+(a.innerHTML||i)+"
")}),0===t.length&&t.push('- 没有选项
'),t.join("")}(r.find("*"))+"
","
"].join(""));o[0]&&o.remove(),r.after(m),h.call(this,m,c,v)})},checkbox:function(){var e={checkbox:["layui-form-checkbox","layui-form-checked","checkbox"],_switch:["layui-form-switch","layui-form-onswitch","switch"]},i=c.find("input[type=checkbox]"),a=function(e,i){var a=t(this);e.on("click",function(){var t=a.attr("lay-filter"),n=(a.attr("lay-text")||"").split("|");a[0].disabled||(a[0].checked?(a[0].checked=!1,e.removeClass(i[1]).find("em").text(n[1])):(a[0].checked=!0,e.addClass(i[1]).find("em").text(n[0])),layui.event.call(a[0],l,i[2]+"("+t+")",{elem:a[0],value:a[0].value,othis:e}))})};i.each(function(i,n){var l=t(this),r=l.attr("lay-skin"),s=(l.attr("lay-text")||"").split("|"),o=this.disabled;"switch"===r&&(r="_"+r);var c=e[r]||e.checkbox;if("string"==typeof l.attr("lay-ignore"))return l.show();var d=l.next("."+c[0]),f=t(['',{_switch:""+((n.checked?s[0]:s[1])||"")+""}[r]||(n.title.replace(/\s/g,"")?""+n.title+"":"")+''+(r?"":"")+"","
"].join(""));d[0]&&d.remove(),l.after(f),a.call(this,f,c)})},radio:function(){var e="layui-form-radio",i=["",""],a=c.find("input[type=radio]"),n=function(a){var n=t(this),s="layui-anim-scaleSpring";a.on("click",function(){var o=n[0].name,u=n.parents(r),c=n.attr("lay-filter"),d=u.find("input[name="+o.replace(/(\.|#|\[|\])/g,"\\$1")+"]");n[0].disabled||(layui.each(d,function(){var a=t(this).next("."+e);this.checked=!1,a.removeClass(e+"ed"),a.find(".layui-icon").removeClass(s).html(i[1])}),n[0].checked=!0,a.addClass(e+"ed"),a.find(".layui-icon").addClass(s).html(i[0]),layui.event.call(n[0],l,"radio("+c+")",{elem:n[0],value:n[0].value,othis:a}))})};a.each(function(a,l){var r=t(this),s=r.next("."+e),o=this.disabled;if("string"==typeof r.attr("lay-ignore"))return r.show();s[0]&&s.remove();var c=t(['','
'+i[l.checked?0:1]+"","
"+function(){var e=l.title||"";return"string"==typeof r.next().attr("lay-radio")&&(e=r.next().html(),r.next().remove()),e}()+"
","
"].join(""));r.after(c),n.call(this,c)})}};return e?d[e]?d[e]():a.error("不支持的"+e+"表单渲染"):layui.each(d,function(e,t){t()}),n};var d=function(){var e=t(this),a=f.config.verify,s=null,o="layui-form-danger",u={},c=e.parents(r),d=c.find("*[lay-verify]"),y=e.parents("form")[0],v=c.find("input,select,textarea"),h=e.attr("lay-filter");if(layui.each(d,function(e,l){var r=t(this),u=r.attr("lay-verify").split("|"),c=r.attr("lay-verType"),d=r.val();if(r.removeClass(o),layui.each(u,function(e,t){var u,f="",y="function"==typeof a[t];if(a[t]){var u=y?f=a[t](d,l):!a[t][0].test(d);if(f=f||a[t][1],u)return"tips"===c?i.tips(f,function(){return"string"==typeof r.attr("lay-ignore")||"select"!==l.tagName.toLowerCase()&&!/^checkbox|radio$/.test(l.type)?r:r.next()}(),{tips:1}):"alert"===c?i.alert(f,{title:"提示",shadeClose:!0}):i.msg(f,{icon:5,shift:6}),n.android||n.ios||l.focus(),r.addClass(o),s=!0}}),s)return s}),s)return!1;var p={};return layui.each(v,function(e,t){if(t.name=(t.name||"").replace(/^\s*|\s*&/,""),t.name){if(/^.*\[\]$/.test(t.name)){var i=t.name.match(/^(.*)\[\]$/g)[0];p[i]=0|p[i],t.name=t.name.replace(/^(.*)\[\]$/,"$1["+p[i]++ +"]")}/^checkbox|radio$/.test(t.type)&&!t.checked||(u[t.name]=t.value)}}),layui.event.call(this,l,"submit("+h+")",{elem:this,form:y,field:u})},f=new c,y=t(document),v=t(window);f.render(),y.on("reset",r,function(){var e=t(this).attr("lay-filter");setTimeout(function(){f.render(null,e)},50)}),y.on("submit",r,d).on("click","*[lay-submit]",d),e(l,f)});
\ No newline at end of file
diff --git a/OpenAuth.Mvc/layui/lay/modules/jquery.js b/OpenAuth.Mvc/layui/lay/modules/jquery.js
index 12a8fc62..c0ca71fe 100644
--- a/OpenAuth.Mvc/layui/lay/modules/jquery.js
+++ b/OpenAuth.Mvc/layui/lay/modules/jquery.js
@@ -1,4 +1,4 @@
-/** layui-v2.1.5 MIT License By http://www.layui.com */
+/** layui-v2.2.5 MIT License By https://www.layui.com */
;!function(e,t){"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(e,t){function n(e){var t=!!e&&"length"in e&&e.length,n=pe.type(e);return"function"!==n&&!pe.isWindow(e)&&("array"===n||0===t||"number"==typeof t&&t>0&&t-1 in e)}function r(e,t,n){if(pe.isFunction(t))return pe.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return pe.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(Ce.test(t))return pe.filter(t,e,n);t=pe.filter(t,e)}return pe.grep(e,function(e){return pe.inArray(e,t)>-1!==n})}function i(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}function o(e){var t={};return pe.each(e.match(De)||[],function(e,n){t[n]=!0}),t}function a(){re.addEventListener?(re.removeEventListener("DOMContentLoaded",s),e.removeEventListener("load",s)):(re.detachEvent("onreadystatechange",s),e.detachEvent("onload",s))}function s(){(re.addEventListener||"load"===e.event.type||"complete"===re.readyState)&&(a(),pe.ready())}function u(e,t,n){if(void 0===n&&1===e.nodeType){var r="data-"+t.replace(_e,"-$1").toLowerCase();if(n=e.getAttribute(r),"string"==typeof n){try{n="true"===n||"false"!==n&&("null"===n?null:+n+""===n?+n:qe.test(n)?pe.parseJSON(n):n)}catch(i){}pe.data(e,t,n)}else n=void 0}return n}function l(e){var t;for(t in e)if(("data"!==t||!pe.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}function c(e,t,n,r){if(He(e)){var i,o,a=pe.expando,s=e.nodeType,u=s?pe.cache:e,l=s?e[a]:e[a]&&a;if(l&&u[l]&&(r||u[l].data)||void 0!==n||"string"!=typeof t)return l||(l=s?e[a]=ne.pop()||pe.guid++:a),u[l]||(u[l]=s?{}:{toJSON:pe.noop}),"object"!=typeof t&&"function"!=typeof t||(r?u[l]=pe.extend(u[l],t):u[l].data=pe.extend(u[l].data,t)),o=u[l],r||(o.data||(o.data={}),o=o.data),void 0!==n&&(o[pe.camelCase(t)]=n),"string"==typeof t?(i=o[t],null==i&&(i=o[pe.camelCase(t)])):i=o,i}}function f(e,t,n){if(He(e)){var r,i,o=e.nodeType,a=o?pe.cache:e,s=o?e[pe.expando]:pe.expando;if(a[s]){if(t&&(r=n?a[s]:a[s].data)){pe.isArray(t)?t=t.concat(pe.map(t,pe.camelCase)):t in r?t=[t]:(t=pe.camelCase(t),t=t in r?[t]:t.split(" ")),i=t.length;for(;i--;)delete r[t[i]];if(n?!l(r):!pe.isEmptyObject(r))return}(n||(delete a[s].data,l(a[s])))&&(o?pe.cleanData([e],!0):fe.deleteExpando||a!=a.window?delete a[s]:a[s]=void 0)}}}function d(e,t,n,r){var i,o=1,a=20,s=r?function(){return r.cur()}:function(){return pe.css(e,t,"")},u=s(),l=n&&n[3]||(pe.cssNumber[t]?"":"px"),c=(pe.cssNumber[t]||"px"!==l&&+u)&&Me.exec(pe.css(e,t));if(c&&c[3]!==l){l=l||c[3],n=n||[],c=+u||1;do o=o||".5",c/=o,pe.style(e,t,c+l);while(o!==(o=s()/u)&&1!==o&&--a)}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}function p(e){var t=ze.split("|"),n=e.createDocumentFragment();if(n.createElement)for(;t.length;)n.createElement(t.pop());return n}function h(e,t){var n,r,i=0,o="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):void 0;if(!o)for(o=[],n=e.childNodes||e;null!=(r=n[i]);i++)!t||pe.nodeName(r,t)?o.push(r):pe.merge(o,h(r,t));return void 0===t||t&&pe.nodeName(e,t)?pe.merge([e],o):o}function g(e,t){for(var n,r=0;null!=(n=e[r]);r++)pe._data(n,"globalEval",!t||pe._data(t[r],"globalEval"))}function m(e){Be.test(e.type)&&(e.defaultChecked=e.checked)}function y(e,t,n,r,i){for(var o,a,s,u,l,c,f,d=e.length,y=p(t),v=[],x=0;x"!==f[1]||Ve.test(a)?0:u:u.firstChild,o=a&&a.childNodes.length;o--;)pe.nodeName(c=a.childNodes[o],"tbody")&&!c.childNodes.length&&a.removeChild(c);for(pe.merge(v,u.childNodes),u.textContent="";u.firstChild;)u.removeChild(u.firstChild);u=y.lastChild}else v.push(t.createTextNode(a));for(u&&y.removeChild(u),fe.appendChecked||pe.grep(h(v,"input"),m),x=0;a=v[x++];)if(r&&pe.inArray(a,r)>-1)i&&i.push(a);else if(s=pe.contains(a.ownerDocument,a),u=h(y.appendChild(a),"script"),s&&g(u),n)for(o=0;a=u[o++];)Ie.test(a.type||"")&&n.push(a);return u=null,y}function v(){return!0}function x(){return!1}function b(){try{return re.activeElement}catch(e){}}function w(e,t,n,r,i,o){var a,s;if("object"==typeof t){"string"!=typeof n&&(r=r||n,n=void 0);for(s in t)w(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),i===!1)i=x;else if(!i)return e;return 1===o&&(a=i,i=function(e){return pe().off(e),a.apply(this,arguments)},i.guid=a.guid||(a.guid=pe.guid++)),e.each(function(){pe.event.add(this,t,i,r,n)})}function T(e,t){return pe.nodeName(e,"table")&&pe.nodeName(11!==t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function C(e){return e.type=(null!==pe.find.attr(e,"type"))+"/"+e.type,e}function E(e){var t=it.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function N(e,t){if(1===t.nodeType&&pe.hasData(e)){var n,r,i,o=pe._data(e),a=pe._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;r1&&"string"==typeof p&&!fe.checkClone&&rt.test(p))return e.each(function(i){var o=e.eq(i);g&&(t[0]=p.call(this,i,o.html())),S(o,t,n,r)});if(f&&(l=y(t,e[0].ownerDocument,!1,e,r),i=l.firstChild,1===l.childNodes.length&&(l=i),i||r)){for(s=pe.map(h(l,"script"),C),a=s.length;c")).appendTo(t.documentElement),t=(ut[0].contentWindow||ut[0].contentDocument).document,t.write(),t.close(),n=D(e,t),ut.detach()),lt[e]=n),n}function L(e,t){return{get:function(){return e()?void delete this.get:(this.get=t).apply(this,arguments)}}}function H(e){if(e in Et)return e;for(var t=e.charAt(0).toUpperCase()+e.slice(1),n=Ct.length;n--;)if(e=Ct[n]+t,e in Et)return e}function q(e,t){for(var n,r,i,o=[],a=0,s=e.length;a=0&&n=0},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},isPlainObject:function(e){var t;if(!e||"object"!==pe.type(e)||e.nodeType||pe.isWindow(e))return!1;try{if(e.constructor&&!ce.call(e,"constructor")&&!ce.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(n){return!1}if(!fe.ownFirst)for(t in e)return ce.call(e,t);for(t in e);return void 0===t||ce.call(e,t)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?ue[le.call(e)]||"object":typeof e},globalEval:function(t){t&&pe.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(ge,"ms-").replace(me,ye)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t){var r,i=0;if(n(e))for(r=e.length;iT.cacheLength&&delete e[t.shift()],e[n+" "]=r}var t=[];return e}function r(e){return e[P]=!0,e}function i(e){var t=H.createElement("div");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function o(e,t){for(var n=e.split("|"),r=n.length;r--;)T.attrHandle[n[r]]=t}function a(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||V)-(~e.sourceIndex||V);if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function s(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function u(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function l(e){return r(function(t){return t=+t,r(function(n,r){for(var i,o=e([],n.length,t),a=o.length;a--;)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function c(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function f(){}function d(e){for(var t=0,n=e.length,r="";t1?function(t,n,r){for(var i=e.length;i--;)if(!e[i](t,n,r))return!1;return!0}:e[0]}function g(e,n,r){for(var i=0,o=n.length;i-1&&(r[l]=!(a[l]=f))}}else x=m(x===a?x.splice(h,x.length):x),o?o(null,a,x,u):Q.apply(a,x)})}function v(e){for(var t,n,r,i=e.length,o=T.relative[e[0].type],a=o||T.relative[" "],s=o?1:0,u=p(function(e){return e===t},a,!0),l=p(function(e){return ee(t,e)>-1},a,!0),c=[function(e,n,r){var i=!o&&(r||n!==A)||((t=n).nodeType?u(e,n,r):l(e,n,r));return t=null,i}];s1&&h(c),s>1&&d(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace(se,"$1"),n,s0,o=e.length>0,a=function(r,a,s,u,l){var c,f,d,p=0,h="0",g=r&&[],y=[],v=A,x=r||o&&T.find.TAG("*",l),b=W+=null==v?1:Math.random()||.1,w=x.length;for(l&&(A=a===H||a||l);h!==w&&null!=(c=x[h]);h++){if(o&&c){for(f=0,a||c.ownerDocument===H||(L(c),s=!_);d=e[f++];)if(d(c,a||H,s)){u.push(c);break}l&&(W=b)}i&&((c=!d&&c)&&p--,r&&g.push(c))}if(p+=h,i&&h!==p){for(f=0;d=n[f++];)d(g,y,a,s);if(r){if(p>0)for(;h--;)g[h]||y[h]||(y[h]=G.call(u));y=m(y)}Q.apply(u,y),l&&!r&&y.length>0&&p+n.length>1&&t.uniqueSort(u)}return l&&(W=b,A=v),g};return i?r(a):a}var b,w,T,C,E,N,k,S,A,D,j,L,H,q,_,F,M,O,R,P="sizzle"+1*new Date,B=e.document,W=0,I=0,$=n(),z=n(),X=n(),U=function(e,t){return e===t&&(j=!0),0},V=1<<31,Y={}.hasOwnProperty,J=[],G=J.pop,K=J.push,Q=J.push,Z=J.slice,ee=function(e,t){for(var n=0,r=e.length;n+~]|"+ne+")"+ne+"*"),ce=new RegExp("="+ne+"*([^\\]'\"]*?)"+ne+"*\\]","g"),fe=new RegExp(oe),de=new RegExp("^"+re+"$"),pe={ID:new RegExp("^#("+re+")"),CLASS:new RegExp("^\\.("+re+")"),TAG:new RegExp("^("+re+"|[*])"),ATTR:new RegExp("^"+ie),PSEUDO:new RegExp("^"+oe),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ne+"*(even|odd|(([+-]|)(\\d*)n|)"+ne+"*(?:([+-]|)"+ne+"*(\\d+)|))"+ne+"*\\)|)","i"),bool:new RegExp("^(?:"+te+")$","i"),needsContext:new RegExp("^"+ne+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ne+"*((?:-\\d)?\\d*)"+ne+"*\\)|)(?=[^-]|$)","i")},he=/^(?:input|select|textarea|button)$/i,ge=/^h\d$/i,me=/^[^{]+\{\s*\[native \w/,ye=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ve=/[+~]/,xe=/'|\\/g,be=new RegExp("\\\\([\\da-f]{1,6}"+ne+"?|("+ne+")|.)","ig"),we=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},Te=function(){L()};try{Q.apply(J=Z.call(B.childNodes),B.childNodes),J[B.childNodes.length].nodeType}catch(Ce){Q={apply:J.length?function(e,t){K.apply(e,Z.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}w=t.support={},E=t.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},L=t.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:B;return r!==H&&9===r.nodeType&&r.documentElement?(H=r,q=H.documentElement,_=!E(H),(n=H.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",Te,!1):n.attachEvent&&n.attachEvent("onunload",Te)),w.attributes=i(function(e){return e.className="i",!e.getAttribute("className")}),w.getElementsByTagName=i(function(e){return e.appendChild(H.createComment("")),!e.getElementsByTagName("*").length}),w.getElementsByClassName=me.test(H.getElementsByClassName),w.getById=i(function(e){return q.appendChild(e).id=P,!H.getElementsByName||!H.getElementsByName(P).length}),w.getById?(T.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&_){var n=t.getElementById(e);return n?[n]:[]}},T.filter.ID=function(e){var t=e.replace(be,we);return function(e){return e.getAttribute("id")===t}}):(delete T.find.ID,T.filter.ID=function(e){var t=e.replace(be,we);return function(e){var n="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}}),T.find.TAG=w.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):w.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){for(;n=o[i++];)1===n.nodeType&&r.push(n);return r}return o},T.find.CLASS=w.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&_)return t.getElementsByClassName(e)},M=[],F=[],(w.qsa=me.test(H.querySelectorAll))&&(i(function(e){q.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&F.push("[*^$]="+ne+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||F.push("\\["+ne+"*(?:value|"+te+")"),e.querySelectorAll("[id~="+P+"-]").length||F.push("~="),e.querySelectorAll(":checked").length||F.push(":checked"),e.querySelectorAll("a#"+P+"+*").length||F.push(".#.+[+~]")}),i(function(e){var t=H.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&F.push("name"+ne+"*[*^$|!~]?="),e.querySelectorAll(":enabled").length||F.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),F.push(",.*:")})),(w.matchesSelector=me.test(O=q.matches||q.webkitMatchesSelector||q.mozMatchesSelector||q.oMatchesSelector||q.msMatchesSelector))&&i(function(e){w.disconnectedMatch=O.call(e,"div"),O.call(e,"[s!='']:x"),M.push("!=",oe)}),F=F.length&&new RegExp(F.join("|")),M=M.length&&new RegExp(M.join("|")),t=me.test(q.compareDocumentPosition),R=t||me.test(q.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},U=t?function(e,t){if(e===t)return j=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n?n:(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1,1&n||!w.sortDetached&&t.compareDocumentPosition(e)===n?e===H||e.ownerDocument===B&&R(B,e)?-1:t===H||t.ownerDocument===B&&R(B,t)?1:D?ee(D,e)-ee(D,t):0:4&n?-1:1)}:function(e,t){if(e===t)return j=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,s=[e],u=[t];if(!i||!o)return e===H?-1:t===H?1:i?-1:o?1:D?ee(D,e)-ee(D,t):0;if(i===o)return a(e,t);for(n=e;n=n.parentNode;)s.unshift(n);for(n=t;n=n.parentNode;)u.unshift(n);for(;s[r]===u[r];)r++;return r?a(s[r],u[r]):s[r]===B?-1:u[r]===B?1:0},H):H},t.matches=function(e,n){return t(e,null,null,n)},t.matchesSelector=function(e,n){if((e.ownerDocument||e)!==H&&L(e),n=n.replace(ce,"='$1']"),w.matchesSelector&&_&&!X[n+" "]&&(!M||!M.test(n))&&(!F||!F.test(n)))try{var r=O.call(e,n);if(r||w.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(i){}return t(n,H,null,[e]).length>0},t.contains=function(e,t){return(e.ownerDocument||e)!==H&&L(e),R(e,t)},t.attr=function(e,t){(e.ownerDocument||e)!==H&&L(e);var n=T.attrHandle[t.toLowerCase()],r=n&&Y.call(T.attrHandle,t.toLowerCase())?n(e,t,!_):void 0;return void 0!==r?r:w.attributes||!_?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},t.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},t.uniqueSort=function(e){var t,n=[],r=0,i=0;if(j=!w.detectDuplicates,D=!w.sortStable&&e.slice(0),e.sort(U),j){for(;t=e[i++];)t===e[i]&&(r=n.push(i));for(;r--;)e.splice(n[r],1)}return D=null,e},C=t.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=C(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r++];)n+=C(t);return n},T=t.selectors={cacheLength:50,createPseudo:r,match:pe,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(be,we),e[3]=(e[3]||e[4]||e[5]||"").replace(be,we),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||t.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&t.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return pe.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&fe.test(n)&&(t=N(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(be,we).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=$[e+" "];return t||(t=new RegExp("(^|"+ne+")"+e+"("+ne+"|$)"))&&$(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,n,r){return function(i){var o=t.attr(i,e);return null==o?"!="===n:!n||(o+="","="===n?o===r:"!="===n?o!==r:"^="===n?r&&0===o.indexOf(r):"*="===n?r&&o.indexOf(r)>-1:"$="===n?r&&o.slice(-r.length)===r:"~="===n?(" "+o.replace(ae," ")+" ").indexOf(r)>-1:"|="===n&&(o===r||o.slice(0,r.length+1)===r+"-"))}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,f,d,p,h,g=o!==a?"nextSibling":"previousSibling",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!u&&!s,x=!1;if(m){if(o){for(;g;){for(d=t;d=d[g];)if(s?d.nodeName.toLowerCase()===y:1===d.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){for(d=m,f=d[P]||(d[P]={}),c=f[d.uniqueID]||(f[d.uniqueID]={}),
l=c[e]||[],p=l[0]===W&&l[1],x=p&&l[2],d=p&&m.childNodes[p];d=++p&&d&&d[g]||(x=p=0)||h.pop();)if(1===d.nodeType&&++x&&d===t){c[e]=[W,p,x];break}}else if(v&&(d=t,f=d[P]||(d[P]={}),c=f[d.uniqueID]||(f[d.uniqueID]={}),l=c[e]||[],p=l[0]===W&&l[1],x=p),x===!1)for(;(d=++p&&d&&d[g]||(x=p=0)||h.pop())&&((s?d.nodeName.toLowerCase()!==y:1!==d.nodeType)||!++x||(v&&(f=d[P]||(d[P]={}),c=f[d.uniqueID]||(f[d.uniqueID]={}),c[e]=[W,x]),d!==t)););return x-=i,x===r||x%r===0&&x/r>=0}}},PSEUDO:function(e,n){var i,o=T.pseudos[e]||T.setFilters[e.toLowerCase()]||t.error("unsupported pseudo: "+e);return o[P]?o(n):o.length>1?(i=[e,e,"",n],T.setFilters.hasOwnProperty(e.toLowerCase())?r(function(e,t){for(var r,i=o(e,n),a=i.length;a--;)r=ee(e,i[a]),e[r]=!(t[r]=i[a])}):function(e){return o(e,0,i)}):o}},pseudos:{not:r(function(e){var t=[],n=[],i=k(e.replace(se,"$1"));return i[P]?r(function(e,t,n,r){for(var o,a=i(e,null,r,[]),s=e.length;s--;)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,r,o){return t[0]=e,i(t,null,o,n),t[0]=null,!n.pop()}}),has:r(function(e){return function(n){return t(e,n).length>0}}),contains:r(function(e){return e=e.replace(be,we),function(t){return(t.textContent||t.innerText||C(t)).indexOf(e)>-1}}),lang:r(function(e){return de.test(e||"")||t.error("unsupported lang: "+e),e=e.replace(be,we).toLowerCase(),function(t){var n;do if(n=_?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===q},focus:function(e){return e===H.activeElement&&(!H.hasFocus||H.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!T.pseudos.empty(e)},header:function(e){return ge.test(e.nodeName)},input:function(e){return he.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:l(function(){return[0]}),last:l(function(e,t){return[t-1]}),eq:l(function(e,t,n){return[n<0?n+t:n]}),even:l(function(e,t){for(var n=0;n=0;)e.push(r);return e}),gt:l(function(e,t,n){for(var r=n<0?n+t:n;++r2&&"ID"===(a=o[0]).type&&w.getById&&9===t.nodeType&&_&&T.relative[o[1].type]){if(t=(T.find.ID(a.matches[0].replace(be,we),t)||[])[0],!t)return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}for(i=pe.needsContext.test(e)?0:o.length;i--&&(a=o[i],!T.relative[s=a.type]);)if((u=T.find[s])&&(r=u(a.matches[0].replace(be,we),ve.test(o[0].type)&&c(t.parentNode)||t))){if(o.splice(i,1),e=r.length&&d(o),!e)return Q.apply(n,r),n;break}}return(l||k(e,f))(r,t,!_,n,!t||ve.test(e)&&c(t.parentNode)||t),n},w.sortStable=P.split("").sort(U).join("")===P,w.detectDuplicates=!!j,L(),w.sortDetached=i(function(e){return 1&e.compareDocumentPosition(H.createElement("div"))}),i(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||o("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),w.attributes&&i(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||o("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),i(function(e){return null==e.getAttribute("disabled")})||o(te,function(e,t,n){var r;if(!n)return e[t]===!0?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),t}(e);pe.find=ve,pe.expr=ve.selectors,pe.expr[":"]=pe.expr.pseudos,pe.uniqueSort=pe.unique=ve.uniqueSort,pe.text=ve.getText,pe.isXMLDoc=ve.isXML,pe.contains=ve.contains;var xe=function(e,t,n){for(var r=[],i=void 0!==n;(e=e[t])&&9!==e.nodeType;)if(1===e.nodeType){if(i&&pe(e).is(n))break;r.push(e)}return r},be=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},we=pe.expr.match.needsContext,Te=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,Ce=/^.[^:#\[\.,]*$/;pe.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?pe.find.matchesSelector(r,e)?[r]:[]:pe.find.matches(e,pe.grep(t,function(e){return 1===e.nodeType}))},pe.fn.extend({find:function(e){var t,n=[],r=this,i=r.length;if("string"!=typeof e)return this.pushStack(pe(e).filter(function(){for(t=0;t1?pe.unique(n):n),n.selector=this.selector?this.selector+" "+e:e,n},filter:function(e){return this.pushStack(r(this,e||[],!1))},not:function(e){return this.pushStack(r(this,e||[],!0))},is:function(e){return!!r(this,"string"==typeof e&&we.test(e)?pe(e):e||[],!1).length}});var Ee,Ne=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,ke=pe.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||Ee,"string"==typeof e){if(r="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:Ne.exec(e),!r||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof pe?t[0]:t,pe.merge(this,pe.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:re,!0)),Te.test(r[1])&&pe.isPlainObject(t))for(r in t)pe.isFunction(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}if(i=re.getElementById(r[2]),i&&i.parentNode){if(i.id!==r[2])return Ee.find(e);this.length=1,this[0]=i}return this.context=re,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):pe.isFunction(e)?"undefined"!=typeof n.ready?n.ready(e):e(pe):(void 0!==e.selector&&(this.selector=e.selector,this.context=e.context),pe.makeArray(e,this))};ke.prototype=pe.fn,Ee=pe(re);var Se=/^(?:parents|prev(?:Until|All))/,Ae={children:!0,contents:!0,next:!0,prev:!0};pe.fn.extend({has:function(e){var t,n=pe(e,this),r=n.length;return this.filter(function(){for(t=0;t-1:1===n.nodeType&&pe.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?pe.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?pe.inArray(this[0],pe(e)):pe.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(pe.uniqueSort(pe.merge(this.get(),pe(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),pe.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return xe(e,"parentNode")},parentsUntil:function(e,t,n){return xe(e,"parentNode",n)},next:function(e){return i(e,"nextSibling")},prev:function(e){return i(e,"previousSibling")},nextAll:function(e){return xe(e,"nextSibling")},prevAll:function(e){return xe(e,"previousSibling")},nextUntil:function(e,t,n){return xe(e,"nextSibling",n)},prevUntil:function(e,t,n){return xe(e,"previousSibling",n)},siblings:function(e){return be((e.parentNode||{}).firstChild,e)},children:function(e){return be(e.firstChild)},contents:function(e){return pe.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:pe.merge([],e.childNodes)}},function(e,t){pe.fn[e]=function(n,r){var i=pe.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=pe.filter(r,i)),this.length>1&&(Ae[e]||(i=pe.uniqueSort(i)),Se.test(e)&&(i=i.reverse())),this.pushStack(i)}});var De=/\S+/g;pe.Callbacks=function(e){e="string"==typeof e?o(e):pe.extend({},e);var t,n,r,i,a=[],s=[],u=-1,l=function(){for(i=e.once,r=t=!0;s.length;u=-1)for(n=s.shift();++u-1;)a.splice(n,1),n<=u&&u--}),this},has:function(e){return e?pe.inArray(e,a)>-1:a.length>0},empty:function(){return a&&(a=[]),this},disable:function(){return i=s=[],a=n="",this},disabled:function(){return!a},lock:function(){return i=!0,n||c.disable(),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=n||[],n=[e,n.slice?n.slice():n],s.push(n),t||l()),this},fire:function(){return c.fireWith(this,arguments),this},fired:function(){return!!r}};return c},pe.extend({Deferred:function(e){var t=[["resolve","done",pe.Callbacks("once memory"),"resolved"],["reject","fail",pe.Callbacks("once memory"),"rejected"],["notify","progress",pe.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return pe.Deferred(function(n){pe.each(t,function(t,o){var a=pe.isFunction(e[t])&&e[t];i[o[1]](function(){var e=a&&a.apply(this,arguments);e&&pe.isFunction(e.promise)?e.promise().progress(n.notify).done(n.resolve).fail(n.reject):n[o[0]+"With"](this===r?n.promise():this,a?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?pe.extend(e,r):r}},i={};return r.pipe=r.then,pe.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t,n,r,i=0,o=ie.call(arguments),a=o.length,s=1!==a||e&&pe.isFunction(e.promise)?a:0,u=1===s?e:pe.Deferred(),l=function(e,n,r){return function(i){n[e]=this,r[e]=arguments.length>1?ie.call(arguments):i,r===t?u.notifyWith(n,r):--s||u.resolveWith(n,r)}};if(a>1)for(t=new Array(a),n=new Array(a),r=new Array(a);i0||(je.resolveWith(re,[pe]),pe.fn.triggerHandler&&(pe(re).triggerHandler("ready"),pe(re).off("ready"))))}}),pe.ready.promise=function(t){if(!je)if(je=pe.Deferred(),"complete"===re.readyState||"loading"!==re.readyState&&!re.documentElement.doScroll)e.setTimeout(pe.ready);else if(re.addEventListener)re.addEventListener("DOMContentLoaded",s),e.addEventListener("load",s);else{re.attachEvent("onreadystatechange",s),e.attachEvent("onload",s);var n=!1;try{n=null==e.frameElement&&re.documentElement}catch(r){}n&&n.doScroll&&!function i(){if(!pe.isReady){try{n.doScroll("left")}catch(t){return e.setTimeout(i,50)}a(),pe.ready()}}()}return je.promise(t)},pe.ready.promise();var Le;for(Le in pe(fe))break;fe.ownFirst="0"===Le,fe.inlineBlockNeedsLayout=!1,pe(function(){var e,t,n,r;n=re.getElementsByTagName("body")[0],n&&n.style&&(t=re.createElement("div"),r=re.createElement("div"),r.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",n.appendChild(r).appendChild(t),"undefined"!=typeof t.style.zoom&&(t.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",fe.inlineBlockNeedsLayout=e=3===t.offsetWidth,e&&(n.style.zoom=1)),n.removeChild(r))}),function(){var e=re.createElement("div");fe.deleteExpando=!0;try{delete e.test}catch(t){fe.deleteExpando=!1}e=null}();var He=function(e){var t=pe.noData[(e.nodeName+" ").toLowerCase()],n=+e.nodeType||1;return(1===n||9===n)&&(!t||t!==!0&&e.getAttribute("classid")===t)},qe=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,_e=/([A-Z])/g;pe.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(e){return e=e.nodeType?pe.cache[e[pe.expando]]:e[pe.expando],!!e&&!l(e)},data:function(e,t,n){return c(e,t,n)},removeData:function(e,t){return f(e,t)},_data:function(e,t,n){return c(e,t,n,!0)},_removeData:function(e,t){return f(e,t,!0)}}),pe.fn.extend({data:function(e,t){var n,r,i,o=this[0],a=o&&o.attributes;if(void 0===e){if(this.length&&(i=pe.data(o),1===o.nodeType&&!pe._data(o,"parsedAttrs"))){for(n=a.length;n--;)a[n]&&(r=a[n].name,0===r.indexOf("data-")&&(r=pe.camelCase(r.slice(5)),u(o,r,i[r])));pe._data(o,"parsedAttrs",!0)}return i}return"object"==typeof e?this.each(function(){pe.data(this,e)}):arguments.length>1?this.each(function(){pe.data(this,e,t)}):o?u(o,e,pe.data(o,e)):void 0},removeData:function(e){return this.each(function(){pe.removeData(this,e)})}}),pe.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=pe._data(e,t),n&&(!r||pe.isArray(n)?r=pe._data(e,t,pe.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=pe.queue(e,t),r=n.length,i=n.shift(),o=pe._queueHooks(e,t),a=function(){pe.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return pe._data(e,n)||pe._data(e,n,{empty:pe.Callbacks("once memory").add(function(){pe._removeData(e,t+"queue"),pe._removeData(e,n)})})}}),pe.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.lengtha",fe.leadingWhitespace=3===e.firstChild.nodeType,fe.tbody=!e.getElementsByTagName("tbody").length,fe.htmlSerialize=!!e.getElementsByTagName("link").length,fe.html5Clone="<:nav>"!==re.createElement("nav").cloneNode(!0).outerHTML,n.type="checkbox",n.checked=!0,t.appendChild(n),fe.appendChecked=n.checked,e.innerHTML="",fe.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue,t.appendChild(e),n=re.createElement("input"),n.setAttribute("type","radio"),n.setAttribute("checked","checked"),n.setAttribute("name","t"),e.appendChild(n),fe.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,fe.noCloneEvent=!!e.addEventListener,e[pe.expando]=1,fe.attributes=!e.getAttribute(pe.expando)}();var Xe={option:[1,""],legend:[1,""],area:[1,""],param:[1,""],thead:[1,""],tr:[2,""],col:[2,""],td:[3,""],_default:fe.htmlSerialize?[0,"",""]:[1,"X","
"]};Xe.optgroup=Xe.option,Xe.tbody=Xe.tfoot=Xe.colgroup=Xe.caption=Xe.thead,Xe.th=Xe.td;var Ue=/<|?\w+;/,Ve=/-1&&(h=p.split("."),p=h.shift(),h.sort()),a=p.indexOf(":")<0&&"on"+p,t=t[pe.expando]?t:new pe.Event(p,"object"==typeof t&&t),t.isTrigger=i?2:3,t.namespace=h.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=r),n=null==n?[t]:pe.makeArray(n,[t]),l=pe.event.special[p]||{},i||!l.trigger||l.trigger.apply(r,n)!==!1)){if(!i&&!l.noBubble&&!pe.isWindow(r)){for(u=l.delegateType||p,Ke.test(u+p)||(s=s.parentNode);s;s=s.parentNode)d.push(s),c=s;c===(r.ownerDocument||re)&&d.push(c.defaultView||c.parentWindow||e)}for(f=0;(s=d[f++])&&!t.isPropagationStopped();)t.type=f>1?u:l.bindType||p,o=(pe._data(s,"events")||{})[t.type]&&pe._data(s,"handle"),o&&o.apply(s,n),o=a&&s[a],o&&o.apply&&He(s)&&(t.result=o.apply(s,n),t.result===!1&&t.preventDefault());if(t.type=p,!i&&!t.isDefaultPrevented()&&(!l._default||l._default.apply(d.pop(),n)===!1)&&He(r)&&a&&r[p]&&!pe.isWindow(r)){c=r[a],c&&(r[a]=null),pe.event.triggered=p;try{r[p]()}catch(g){}pe.event.triggered=void 0,c&&(r[a]=c)}return t.result}},dispatch:function(e){e=pe.event.fix(e);var t,n,r,i,o,a=[],s=ie.call(arguments),u=(pe._data(this,"events")||{})[e.type]||[],l=pe.event.special[e.type]||{};if(s[0]=e,e.delegateTarget=this,!l.preDispatch||l.preDispatch.call(this,e)!==!1){for(a=pe.event.handlers.call(this,e,u),t=0;(i=a[t++])&&!e.isPropagationStopped();)for(e.currentTarget=i.elem,n=0;(o=i.handlers[n++])&&!e.isImmediatePropagationStopped();)e.rnamespace&&!e.rnamespace.test(o.namespace)||(e.handleObj=o,e.data=o.data,r=((pe.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,s),void 0!==r&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()));return l.postDispatch&&l.postDispatch.call(this,e),e.result}},handlers:function(e,t){var n,r,i,o,a=[],s=t.delegateCount,u=e.target;if(s&&u.nodeType&&("click"!==e.type||isNaN(e.button)||e.button<1))for(;u!=this;u=u.parentNode||this)if(1===u.nodeType&&(u.disabled!==!0||"click"!==e.type)){for(r=[],n=0;n-1:pe.find(i,this,null,[u]).length),r[i]&&r.push(o);r.length&&a.push({elem:u,handlers:r})}return s]","i"),tt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,nt=/