FlowNodeForm.cshtml 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446
  1. @{
  2. ViewBag.Title = "工作流节点设置";
  3. Layout = "~/Views/Shared/_Form.cshtml";
  4. }
  5. <link href="~/Content/styles/learun-ckbox-radio.css" rel="stylesheet" />
  6. <link href="~/Content/styles/learun-flow.css" rel="stylesheet" />
  7. <script>
  8. var node, nodelist = [], frmContentJson, frmType, NodePramData;
  9. $(function () {
  10. initLoadPageData();
  11. initControl();
  12. })
  13. function initLoadPageData()
  14. {
  15. frmType = top.FlowSchemeBuider.postData["FrmType"];
  16. var _FlowDesignObject = top.FlowSchemeBuider.FlowDesignObject;
  17. node = _FlowDesignObject.$nodeData[_FlowDesignObject.$focus];
  18. node.id = _FlowDesignObject.$focus;
  19. for (var i in _FlowDesignObject.$nodeData) {
  20. _FlowDesignObject.$nodeData[i]["id"] = i;
  21. nodelist.push(_FlowDesignObject.$nodeData[i]);
  22. }
  23. if (frmType != 1)
  24. {
  25. frmContentJson = JSON.parse(top.FlowSchemeBuider.frmData["FrmContent"]);
  26. initFrmCotent(frmContentJson);
  27. }
  28. }
  29. //初始化控件
  30. function initControl() {
  31. GetDesignateMemberTree();
  32. if (frmType == 0) {//自定义表单
  33. $('.systemdatabase').hide();
  34. }
  35. else {//系统表单(需要绑定数据表)
  36. initLoadSysTemTable();
  37. }
  38. if (node.type != "confluencenode")//是否会签节点
  39. {
  40. $('#confluencenode').hide();
  41. }
  42. $('#NodeName').val(node.name);
  43. //由谁执行
  44. //var dd = $("#NodeMake").ComboBox({
  45. // data: [{ "key": 0, "value": "操作执行人员" }, { "key": 1, "value": "系统执行" }],
  46. // id: "key",
  47. // text: "value"
  48. //}).ComboBoxSetValue(0);
  49. //表单
  50. $("#NodeFrm").ComboBox({
  51. url: "../../FlowManage/FormDesign/GetAllListJson",
  52. id: "frmmainid",
  53. text: "frmname",
  54. description: "==请选择==",
  55. allowSearch: true
  56. });
  57. //驳回类型
  58. $("#NodeRejectType").ComboBox({
  59. data: [{ "key": 0, "value": "前一步" }, { "key": 1, "value": "第一步" }, { "key": 2, "value": "某一步" }, { "key": 3, "value": "用户指定" }, { "key": 4, "value": "不处理" }],
  60. id: "key",
  61. text: "value"
  62. }).bind("change", function () {
  63. var _value = $(this).attr('data-value');
  64. var _comdata = [];
  65. if (_value == 2) {
  66. _comdata = nodelist;
  67. }
  68. //驳回到某一步
  69. $("#NodeRejectStep").ComboBox({
  70. data: _comdata,
  71. id: "id",
  72. text: "name"
  73. });
  74. }).ComboBoxSetValue(0);
  75. //驳回到某一步
  76. $("#NodeRejectStep").ComboBox({
  77. description: "==请选择==",
  78. allowSearch: true,
  79. height: "110px",
  80. });
  81. //会签策略
  82. $("#NodeConfluenceType").ComboBox({
  83. data: [{ "key": 0, "value": "所有步骤通过" }, { "key": 1, "value": "一个步骤通过即可" }, { "key": 2, "value": "按百分比计算" }],
  84. id: "key",
  85. text: "value",
  86. description: "==请选择==",
  87. });
  88. //处理者
  89. $("input[name='NodeDesignateTypename']").click(function () {
  90. var id = $(this).attr('id');
  91. if (id == 'NodeDesignateType2') {
  92. $("#Treebackground").hide();
  93. } else {
  94. $("#Treebackground").show();
  95. }
  96. });
  97. $("#NodeDataBaseToSQL").ComboBoxTree({
  98. description: "==请选择执行SQL语句的数据库==",
  99. height: "230px",
  100. url: "../../SystemManage/DataBaseLink/GetTreeJson",
  101. allowSearch: true
  102. })
  103. if (node.setInfo != undefined)
  104. {
  105. var _NodeCode = $('#NodeCode').val();
  106. node.setInfo.NodeCode = node.setInfo.NodeCode == "" ? _NodeCode : node.setInfo.NodeCode;
  107. $("#BaseInfo").SetWebControls(node.setInfo);
  108. $('#NodeDataBase').trigger('change');
  109. $('#NodeTable').ComboBoxSetValue(node.setInfo.NodeTable);
  110. $('#NodeTable').trigger('change');
  111. $('#NodePram').ComboBoxSetValue(node.setInfo.NodePram);
  112. $("#" + node.setInfo.NodeDesignate).trigger("click");
  113. if (node.setInfo.NodeDesignate == "NodeDesignateType2")
  114. {
  115. $("#Role").setCheckedNodes(node.setInfo.NodeDesignateData.role);
  116. $("#Post").setCheckedNodes(node.setInfo.NodeDesignateData.post);
  117. $("#UserGroup").setCheckedNodes(node.setInfo.NodeDesignateData.usergroup);
  118. $("#User").setCheckedNodes(node.setInfo.NodeDesignateData.user);
  119. }
  120. $.each(node.setInfo.frmPermissionInfo, function (i, item) {
  121. if (item.look) {
  122. $('#PermissionInfo').find('#frm_' + item.fieldid).attr("checked", "checked");
  123. }
  124. else {
  125. $('#PermissionInfo').find('#frm_' + item.fieldid).removeAttr("checked");
  126. }
  127. if (item.down != undefined)
  128. {
  129. if (item.down) {
  130. $('#PermissionInfo').find('#frmx_' + item.fieldid).attr("checked", "checked");
  131. }
  132. else {
  133. $('#PermissionInfo').find('#frmx_' + item.fieldid).removeAttr("checked");
  134. }
  135. }
  136. });
  137. }
  138. }
  139. function initLoadSysTemTable()
  140. {
  141. //数据库选择
  142. var _NodeDb = "";
  143. $("#NodeDataBase").ComboBoxTree({
  144. description: "==请选择库==",
  145. height: "150px",
  146. url: "../../SystemManage/DataBaseLink/GetTreeJson",
  147. allowSearch: true
  148. }).bind("change", function () {
  149. var value = $(this).attr('data-value');
  150. _NodeDb = value;
  151. //数据表
  152. $("#NodeTable").ComboBox({
  153. param: { dataBaseLinkId: value },
  154. url: "../../SystemManage/DataBaseTable/GetTableListJson",
  155. id: "name",
  156. text: "name"
  157. });
  158. });
  159. //数据表
  160. $("#NodeTable").ComboBox({
  161. description: "==请选择表==",
  162. height: "140px",
  163. allowSearch: true
  164. }).bind("change", function () {
  165. var value = $(this).attr('data-value');
  166. var tablefiledJsonData = [];
  167. $.ajax({
  168. url: "../../SystemManage/DataBaseTable/GetTableFiledListJson",
  169. data: { dataBaseLinkId: _NodeDb, tableName: value },
  170. type: "GET",
  171. dataType: "json",
  172. async: false,
  173. success: function (data) {
  174. tablefiledJsonData = data;
  175. $.each(tablefiledJsonData, function (id, item) {
  176. item.remark = item.column + "【" + item.remark + "】";
  177. });
  178. NodePramData = tablefiledJsonData;
  179. //数据表
  180. $("#NodePram").ComboBox({
  181. data: tablefiledJsonData,
  182. id: "column",
  183. text: "remark"
  184. });
  185. },
  186. error: function (XMLHttpRequest, textStatus, errorThrown) {
  187. dialogMsg(errorThrown, -1);
  188. }
  189. });
  190. });
  191. $("#NodePram").ComboBox({
  192. description: "==请选择字段==",
  193. height: "140px",
  194. allowSearch: true
  195. });
  196. }
  197. function GetDesignateMemberTree()
  198. {
  199. GetTree('Role');
  200. GetTree('Post');
  201. GetTree('UserGroup');
  202. GetTree('User');
  203. function GetTree(type) {
  204. var item = {
  205. height: 262,
  206. showcheck: true,
  207. data: $.arrayClone(top.FlowSchemeBuider.AllAuthorizeCheckData[type]),
  208. oncheckboxclick: function (item, et, s) {
  209. var $item = $("#" + item.mytype + "Div");
  210. if (et == 1) {
  211. var mytype = "";
  212. var _html = "";
  213. var _title = '';
  214. switch (item.mytype) {
  215. case "Role":
  216. mytype = 'label-success';
  217. break;
  218. case "Post":
  219. mytype = 'label-info';
  220. break;
  221. case "UserGroup":
  222. mytype = 'label-warning';
  223. break;
  224. case "User":
  225. mytype = 'label-danger';
  226. break;
  227. }
  228. _html += '<span id="' + item.id + '" data-value="' + item.mytype + '" class="flow-card-box label ' + mytype + ' ">' + item.text + '<i class="fa fa-close"></i></span>';
  229. $item.append(_html);
  230. $item.show();
  231. $(".flow-card-box").click(function () {
  232. $(this).remove();
  233. $('#' + $(this).attr('data-value')).setNoCheckedNodes($(this).attr('id'));
  234. if ($item.find('.flow-card-box').length == 0) {
  235. $item.hide();
  236. }
  237. })
  238. }
  239. else if (et == 0) {
  240. $item.find('#' + item.id).remove();
  241. if ($item.find('.flow-card-box').length == 0) {
  242. $item.hide();
  243. }
  244. }
  245. }
  246. };
  247. $("#" + type).treeview(item);
  248. }
  249. }
  250. function initFrmCotent(data)
  251. {
  252. $.each(data, function (i, item) {
  253. var rowdata = '<tr><td><i class="fa fa-star"></i></td><td>' + item.control_label + '</td><td>';
  254. if (item.control_type == 'image' || item.control_type == 'upload')
  255. {
  256. rowdata += '<div class="ckbox ckbox-color_a"><input id="frmx_' + item.control_field + '" value="'+ item.control_field +'" type="checkbox" checked><label for="frmx_' + item.control_field + '">下载</label></div>';
  257. }
  258. rowdata += '<div class="ckbox ckbox-color_a"><input id="frm_' + item.control_field + '" value="'+ item.control_field +'" type="checkbox" checked><label for="frm_' + item.control_field + '">查看</label></div>';
  259. rowdata += '</td></tr>';
  260. $('#PermissionInfo').find('table').append(rowdata);
  261. });
  262. }
  263. //保存字段设置
  264. function AcceptClick() {
  265. if (!$('#BaseInfo').Validform()) {
  266. return false;
  267. }
  268. var baseinfo = $("#BaseInfo").GetWebControls();
  269. baseinfo["NodeDesignate"] = $('.bottomline').find('input:checked').attr("id");
  270. if (baseinfo["NodeDesignate"] == 'NodeDesignateType2') {
  271. var _Designate = {};
  272. _Designate["role"] = $("#Role").getCheckedAllNodes();
  273. _Designate["post"] = $("#Post").getCheckedAllNodes();
  274. _Designate["usergroup"] = $("#UserGroup").getCheckedAllNodes();
  275. _Designate["user"] = $("#User").getCheckedAllNodes();
  276. baseinfo["NodeDesignateData"] = _Designate;
  277. }
  278. var _PermissionInfo = [];
  279. $.each($('#PermissionInfo').find('tr'),function(i,item){
  280. var _ck = $(item).find('input');
  281. var _point = {};
  282. $.each(_ck,function(j,d){
  283. _point["fieldid"] = $(d).val();
  284. if($(d).attr("id").indexOf("frmx_") == -1)
  285. {
  286. _point["look"] = $(d)[0].checked;
  287. }
  288. else
  289. {
  290. _point["down"] = $(d)[0].checked;
  291. }
  292. });
  293. _PermissionInfo.push(_point);
  294. });
  295. baseinfo["frmPermissionInfo"] = _PermissionInfo;
  296. var sqlinfo = $("#SQLInfo").GetWebControls();
  297. baseinfo = $.extend(baseinfo, sqlinfo);
  298. top.FlowSchemeBuider.callBackNode(node.id, baseinfo, NodePramData);
  299. dialogClose();
  300. }
  301. </script>
  302. <ul class="nav nav-tabs">
  303. <li class="active"><a href="#BaseInfo" data-toggle="tab">基本配置</a></li>
  304. <li><a href="#MakerInfo" data-toggle="tab">审核者</a></li>
  305. <li><a href="#PermissionInfo" data-toggle="tab">权限分配</a></li>
  306. <li><a href="#SQLInfo" data-toggle="tab">节点通过后执行SQL</a></li>
  307. </ul>
  308. <div class="tab-content">
  309. <div id="BaseInfo" class="tab-pane active" style="padding-top:15px;padding-right:30px;">
  310. <table class="form">
  311. <tr>
  312. <td class="formTitle">节点标识</td>
  313. <td class="formValue">
  314. <input id="NodeCode" type="text" class="form-control" value="@Guid.NewGuid().ToString()" disabled isvalid="yes" checkexpession="NotNull" />
  315. </td>
  316. <td class="formTitle">节点名称<font face="宋体">*</font></td>
  317. <td class="formValue">
  318. <input id="NodeName" type="text" class="form-control" isvalid="yes" checkexpession="NotNull" />
  319. </td>
  320. </tr>
  321. <tr class="systemdatabase">
  322. <td class="formTitle">绑定表名<font face="宋体">*</font></td>
  323. <td class="formValue">
  324. <div id="NodeDataBase" style="float:left;width:128px;" type="selectTree" class="ui-select" ></div>
  325. <div id="NodeTable" style="float:right;width:128px;" type="select" class="ui-select" ></div>
  326. </td>
  327. <td class="formTitle">绑定字段<font face="宋体">*</font></td>
  328. <td class="formValue">
  329. <div id="NodePram" type="select" class="ui-select"></div>
  330. </td>
  331. </tr>
  332. <tr>
  333. <td class="formTitle">驳回类型<font face="宋体">*</font></td>
  334. <td class="formValue">
  335. <div id="NodeRejectType" type="select" class="ui-select" isvalid="yes" checkexpession="NotNull"></div>
  336. </td>
  337. <td class="formTitle">驳回步骤</td>
  338. <td class="formValue">
  339. <div id="NodeRejectStep" type="select" class="ui-select"></div>
  340. </td>
  341. </tr>
  342. <tr>
  343. @*<td class="formTitle">由谁执行<font face="宋体">*</font></td>
  344. <td class="formValue">
  345. <div id="NodeMake" type="select" class="ui-select" isvalid="yes" checkexpession="NotNull"></div>
  346. </td>*@
  347. <td class="formTitle">选项</td>
  348. <td class="formValue">
  349. <div class="ckbox ckbox-color_a"><input id="NodeIsOver" type="checkbox" /><label for="NodeIsOver">是否允许终止流程</label></div>
  350. </td>
  351. </tr>
  352. <tr id="confluencenode">
  353. <td class="formTitle">会签策略<font face="宋体">*</font></td>
  354. <td class="formValue">
  355. <div id="NodeConfluenceType" type="select" class="ui-select"></div>
  356. </td>
  357. <td class="formTitle">会签比例</td>
  358. <td class="formValue">
  359. <input id="NodeConfluenceRate" type="text" class="form-control" value="100" />
  360. </td>
  361. </tr>
  362. <tr>
  363. <th class="formTitle">
  364. 备注
  365. </th>
  366. <td class="formValue" colspan="3">
  367. <textarea id="Description" class="form-control" style="height: 80px;"></textarea>
  368. </td>
  369. </tr>
  370. </table>
  371. </div>
  372. <div id="MakerInfo" class="tab-pane">
  373. <div class="bottomline">
  374. <div class="rdio rdio-color_a"><input name="NodeDesignateTypename" id="NodeDesignateType1" type="radio" checked /><label for="NodeDesignateType1">所有成员</label></div>
  375. <div class="rdio rdio-color_a"><input name="NodeDesignateTypename" id="NodeDesignateType2" type="radio" /><label for="NodeDesignateType2">指定成员</label></div>
  376. <div class="rdio rdio-color_a"><input name="NodeDesignateTypename" id="NodeDesignateType3" type="radio" /><label for="NodeDesignateType3">发起者领导</label></div>
  377. <div class="rdio rdio-color_a"><input name="NodeDesignateTypename" id="NodeDesignateType4" type="radio" /><label for="NodeDesignateType4">前一步骤领导</label></div>
  378. <div class="rdio rdio-color_a"><input name="NodeDesignateTypename" id="NodeDesignateType5" type="radio" /><label for="NodeDesignateType5">发起者部门领导</label></div>
  379. <div class="rdio rdio-color_a"><input name="NodeDesignateTypename" id="NodeDesignateType6" type="radio" /><label for="NodeDesignateType6">发起者公司领导</label></div>
  380. </div>
  381. <div id="DesignateMember" >
  382. <div class="standtabborder" style="height: 262px;">
  383. <div class="standtab standtabactived" onclick="$.standTabchange(this, 'Role')">
  384. 角色
  385. </div>
  386. <div class="standtab " onclick="$.standTabchange(this, 'Post')">
  387. 岗位
  388. </div>
  389. <div class="standtab " onclick="$.standTabchange(this, 'UserGroup')">
  390. 用户组
  391. </div>
  392. <div class="standtab " onclick="$.standTabchange(this, 'User')">
  393. 用户
  394. </div>
  395. </div>
  396. <div id="Role" class="standtab-pane"></div>
  397. <div id="Post" style="display: none;" class="standtab-pane"></div>
  398. <div id="UserGroup" style="display: none;" class="standtab-pane"></div>
  399. <div id="User" style="display: none;" class="standtab-pane"></div>
  400. <div style="margin: 0px; border-right: none; border-left: none; border-bottom: none; background-color: #fff; overflow: auto; padding-bottom: 10px;height:262px;">
  401. <div id="RoleDiv" class="flow-portal-panel">
  402. <div class="flow-portal-panel-title"><i class="fa fa-paw"></i>&nbsp;&nbsp;角色</div>
  403. </div>
  404. <div id="PostDiv" class="flow-portal-panel">
  405. <div class="flow-portal-panel-title"><i class="fa fa-graduation-cap"></i>&nbsp;&nbsp;岗位</div>
  406. </div>
  407. <div id="UserGroupDiv" class="flow-portal-panel">
  408. <div class="flow-portal-panel-title"><i class="fa fa-group"></i>&nbsp;&nbsp;用户组</div>
  409. </div>
  410. <div id="UserDiv" class="flow-portal-panel">
  411. <div class="flow-portal-panel-title"><i class="fa fa-user"></i>&nbsp;&nbsp;用户</div>
  412. </div>
  413. </div>
  414. <div id="Treebackground" style="position: fixed; top: 87px; left: 0px; z-index: 2; width: 750px; height: 262px; background: #000; filter: alpha(opacity=10); opacity: 0.1;"></div>
  415. </div>
  416. </div>
  417. <div id="PermissionInfo" class="tab-pane" style="overflow-y:auto;">
  418. <div style="line-height:45px;padding-left:10px;color: #666; font-weight: 300;font-size: 16px;">
  419. <i class="fa fa-tags"></i>&nbsp;&nbsp;表单权限配置(默认都是勾选的)
  420. </div>
  421. <div style="overflow-y:auto;height:261px;">
  422. <table class="table flow-table-Permission"></table>
  423. </div>
  424. </div>
  425. <div id="SQLInfo" class="tab-pane">
  426. <div style="padding:10px;">
  427. <div id="NodeDataBaseToSQL" style="margin-bottom:10px;" type="selectTree" class="ui-select"></div>
  428. <textarea id="NodeSQL" class="form-control" placeholder="请在此处填写需要执行的SQL语句,用{0}表示流程实例的主键Id!" style="height: 240px;"></textarea>
  429. </div>
  430. </div>
  431. </div>
  432. <style>
  433. .standtab-pane {
  434. width:224px;
  435. border-right:1px solid #ccc;
  436. float:left;
  437. }
  438. </style>