_FlowNode.cshtml 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744
  1. @using WePlatform.Views.Shared.Modals
  2. <link href="~/Content/Css/nodetree.css" rel="stylesheet" />
  3. @model string
  4. <section>
  5. <div class="modal fade flow-detail" id="modal-detail" tabindex="-1" aria-modal="true">
  6. <div class="modal-dialog modal-lg" style="margin-top: 190.5px;">
  7. <div class="modal-content">
  8. @Html.Partial("Modals/_ModalHeader", new ModalHeaderViewModel("节点配置详情", ""))
  9. <div class="modal-body" style="padding: 0">
  10. <form class="form-horizontal " id="form-detail" novalidate="novalidate" style="padding: 0">
  11. <div class="card card-primary card-outline card-outline-tabs" style="margin-bottom: 0; border-top: 0; ">
  12. <div class="card-header p-0 border-bottom-0">
  13. <ul class="nav nav-tabs" id="node-detail-tab" role="tablist">
  14. <li class="nav-item">
  15. <a class="nav-link active" id="tab-component" data-toggle="pill" href="#tab-content-component" role="tab">事务详情</a>
  16. </li>
  17. <li class="nav-item">
  18. <a class="nav-link " id="tab-scene" data-toggle="pill" href="#tab-content-scene" role="tab">情景信息</a>
  19. </li>
  20. <li class="nav-item">
  21. <a class="nav-link" id="tab-guide" data-toggle="pill" href="#tab-content-guide" role="tab">引导信息</a>
  22. </li>
  23. </ul>
  24. </div>
  25. <div class="card-body">
  26. <div class="tab-content" id="custom-tabs-four-tabContent">
  27. <div class="tab-pane fade" id="tab-content-scene" role="tabpanel">
  28. <table class="table table-sm table-striped table-condensed">
  29. <thead>
  30. <tr>
  31. <th style="width: 45%">情景编号</th>
  32. <th style="width: 45%">情景简称</th>
  33. <th style="width: 10%; text-align: center;">操作</th>
  34. </tr>
  35. </thead>
  36. <tbody>
  37. </tbody>
  38. </table>
  39. </div>
  40. <div class="tab-pane fade" id="tab-content-guide" role="tabpanel">
  41. <table class="table table-sm table-striped table-condensed">
  42. <thead>
  43. <tr>
  44. <th style="width: 45%">引导编号</th>
  45. <th style="width: 45%">引导简称</th>
  46. <th style="width: 10%; text-align: center;">操作</th>
  47. </tr>
  48. </thead>
  49. <tbody>
  50. </tbody>
  51. </table>
  52. </div>
  53. <div class="tab-pane fade active show" id="tab-content-component" role="tabpanel">
  54. <table class="table table-sm table-striped table-condensed">
  55. <thead>
  56. <tr>
  57. <th style="width: 85%">事务信息</th>
  58. @*<th style="width: 36%">事务名称</th>
  59. <th style="width: 18%;">事务类型</th>*@
  60. <th style="width: 15%; text-align: center;">操作</th>
  61. </tr>
  62. </thead>
  63. <tbody>
  64. </tbody>
  65. </table>
  66. </div>
  67. </div>
  68. </div>
  69. </div>
  70. </form>
  71. </div>
  72. <div class="modal-footer" style="text-align: center;">
  73. <button type="button" class="btn btn-outline-iwb waves-effect" data-dismiss="modal" style="min-width: 100px;">关闭窗口</button>
  74. </div>
  75. </div>
  76. </div>
  77. </div>
  78. </section>
  79. @{
  80. var modal = new ModalViewModel("流节点", new ModalBodyViewModel(new List<Input>()
  81. {
  82. new InputHide("id"),
  83. new InputHide("parentId"),
  84. new InputHide("path"),
  85. new InputHide("parentPath"),
  86. new InputHide("sceneNos"),
  87. new InputHide("variables"),
  88. new InputHide("guideNos"),
  89. new Input("name", "节点名称"),
  90. new Input("sceneNames", "情景名称").SetDisabled().SetSearchIcon("qm_scene","modal-node"),
  91. new Input("guideNames", "引导信息").SetNotRequired().SetDisabled().SetSearchIcon("qm_guide","modal-node"),
  92. }, "form-node"), "modal-node");
  93. }
  94. @Html.Partial("Modals/_Modal", modal)
  95. <div class="iwb-flow-tree" id="flow-menu" style="display: none; position: absolute;z-index: 9999">
  96. <div class="dropdown-menu show">
  97. <a class="dropdown-item" data-type="detail" href="javascript:void(0)">
  98. <i class="fa fa-list mr-2"></i>
  99. 查看配置详情
  100. </a>
  101. <a class="dropdown-item" data-type="add" href="javascript:void(0)">
  102. <i class="far fa-plus-square mr-2"></i>
  103. 增加节点
  104. </a>
  105. <a class="dropdown-item" data-type="addChild" href="javascript:void(0)">
  106. <i class="far fa-plus-square mr-2"></i>
  107. 增加子节点
  108. </a>
  109. <a class="dropdown-item" data-type="edit" href="javascript:void(0)">
  110. <i class="far fa-edit mr-2"></i>
  111. 编辑节点
  112. </a>
  113. <a class="dropdown-item" data-type="delete" href="javascript:void(0)">
  114. <i class="far fa-minus-square mr-2"></i>
  115. 删除节点
  116. </a>
  117. <a class="dropdown-item" data-type="PRE" href="javascript:void(0)">
  118. <i class="fa fa-cog mr-2"></i>
  119. 配置运行前事务
  120. </a>
  121. <a class="dropdown-item" data-type="RUN" href="javascript:void(0)">
  122. <i class="fa fa-cog mr-2"></i>
  123. 配置运行时事务
  124. </a>
  125. <a class="dropdown-item" data-type="POST" href="javascript:void(0)">
  126. <i class="fa fa-cog mr-2"></i>
  127. 配置运行后事务
  128. </a>
  129. </div>
  130. </div>
  131. @Html.Partial("_Component", Model)
  132. <script src="~/Content/Libs/html2canva/html2canvas.min.js"></script>
  133. <script src="~/Content/Js/flowtree.js"></script>
  134. <script id="flow-tree">
  135. var PRE = 'PRE', RUN = 'RUN', POST = 'POST', FLOWPRESTRING = 'F_';
  136. var _CompData = [];
  137. var _FlowTreeData = {};
  138. //初始化数据
  139. function GetInitData() {
  140. var data = {
  141. index: 1,
  142. id: 'FN1',
  143. no: 'FN1',
  144. path: 'FN1',
  145. parentPath: '',
  146. name: '根节点',
  147. sceneNos: '',
  148. sceneNames: '',
  149. guideNos: '',
  150. guideNames: '',
  151. preComponent: GetNewComponentNo(PRE),
  152. runningComponent: GetNewComponentNo(RUN),
  153. postComponent: GetNewComponentNo(POST),
  154. variables: '',
  155. children: []
  156. }
  157. var root = $.extend({}, data);
  158. root.children.push(GetInitChildData(root, root.path));
  159. root.children.push(GetInitChildData(root, root.path));
  160. return root;
  161. }
  162. function GetInitChildData(root, parentPath) {
  163. root.index++;
  164. var id ='FN'+ root.index;
  165. var data = {
  166. id: id,
  167. no: id,
  168. path: parentPath + "_" + id,
  169. parentPath: parentPath,
  170. name: '节点' + id,
  171. sceneNos: '',
  172. sceneNames: '',
  173. guideNos: '',
  174. guideNames: '',
  175. preComponent: GetNewComponentNo(PRE),
  176. runningComponent: GetNewComponentNo(RUN),
  177. postComponent: GetNewComponentNo(POST),
  178. variables: '',
  179. children: []
  180. }
  181. var node = $.extend({}, data);
  182. return node;
  183. }
  184. //获取新节点ID
  185. function GetNewNodeId() {
  186. _FlowTreeData.index++;
  187. return 'FN' +_FlowTreeData.index;
  188. }
  189. function GetNewComponentNo(typeStr) {
  190. return FLOWPRESTRING + typeStr + ($.now() + "").substr(5) + Math.floor(Math.random() * (9999 - 1001) + 1001) ;
  191. }
  192. //根据path 查询节点
  193. function GetNodeByPath(path) {
  194. path = path + "";
  195. if (path.indexOf('_')) {
  196. var arr = path.split('_');
  197. return GetNodeByPathArr(arr, _FlowTreeData);
  198. } else {
  199. return _FlowTreeData;
  200. }
  201. };
  202. function GetNodeByPathArr(arr, data, isRoot) {
  203. isRoot = isRoot === undefined ? true : false;
  204. data = data || _FlowTreeData;
  205. if (isRoot) {
  206. arr.shift();
  207. }
  208. if (arr.length > 0) {
  209. var childId = arr.shift();
  210. if (childId && data.children && data.children.length > 0) {
  211. var child = data.children.find(function (v) {
  212. return v.id == childId;
  213. });
  214. if (arr.length > 0) {
  215. return GetNodeByPathArr(arr, child, false);
  216. } else {
  217. return child;
  218. }
  219. } else {
  220. return null;
  221. }
  222. } else {
  223. return data;
  224. }
  225. };
  226. function InitFlowTree(initData, isOffset, $box, menuFun) {
  227. $box = $box || $('#modal .main-flow-box');
  228. menuFun = menuFun || window.FlowMenuFun;
  229. console.log("FlowTreeData:", initData, $box);
  230. _FlowTreeData = initData;
  231. //$box.empty();
  232. $box.flowTree({
  233. data: initData,
  234. offset: isOffset,
  235. nodeTemplate: window.NodeTemplate,
  236. customMenu: $('#flow-menu'),
  237. customMenuBefore: menuFun
  238. });
  239. }
  240. function NodeDetail(data) {
  241. if (data) {
  242. $('#modal-detail').off('show.bs.modal.detail').on('show.bs.modal.detail', function () {
  243. FlowDetailFormatter(data);
  244. $('#node-detail-tab li').eq(0).find('a').tab('show');
  245. });
  246. window._IsDetail ? $('#modal-detail').find('.save-btn').hide() : $('#modal-component').find('.save-btn').show();
  247. $('#modal-detail').modal('show');
  248. } else {
  249. abp.message.warn("节点数据异常!");
  250. }
  251. }
  252. function FlowDetailFormatter(data) {
  253. FlowDetailSceneGuideFormatter(data.sceneNos, data.sceneNames, 'scene', data.path);
  254. FlowDetailSceneGuideFormatter(data.guideNos, data.guideNames, 'guide', data.path);
  255. FlowDetailCompFormatter(data);
  256. }
  257. function FlowDetailSceneGuideFormatter(nos,names,idStr,path) {
  258. var str = '',
  259. op = '@(Model)' == 'package'
  260. ? '暂无操作'
  261. : '<a class="table-action" style="text-align: center;" onclick="flowMenuFuns.edit.call(this, \'' + path +'\')" >配置数据</a>',
  262. temp = '<tr><td>{0}</td><td>{1}</td><td>' + op + '</td></tr>',
  263. temp2 = '<tr><td colspan="2" style="color:red;font-weight:bold;cursor:pointer">未配置数据</td><td>' + op + '</td></tr>',
  264. empty = '<tr><td colspan="10" style="color:red;font-weight:bold;">未配置数据</td></tr>';
  265. if (nos) {
  266. var arr1 = nos.split(','), arr2 = names.split(',');
  267. arr1.forEach(function (v, i) {
  268. str += temp.format(v, arr2[i]);
  269. });
  270. } else if (!window._IsDetail && '@(Model))' != 'package') {
  271. str += temp2;
  272. }
  273. if (str) {
  274. $('#tab-content-' + idStr +' tbody').html(str);
  275. } else {
  276. $('#tab-content-' + idStr +' tbody').html(empty);
  277. }
  278. }
  279. //菜单
  280. var flowMenuFuns = {
  281. add: function (path) {
  282. var data = GetNodeByPath(path);
  283. console.log("Menu Add", path, data);
  284. if (!data.parentPath) {
  285. abp.message.warn("根节点只能添加子节点!");
  286. return;
  287. }
  288. var newId = GetNewNodeId();
  289. var parentId = data.parentId;
  290. OpenModal({
  291. modal: 'modal-node',
  292. modaltitle: abp.localization.iwbZero('OpCreate'),
  293. data: { id: newId, parentId: parentId, path: data.parentPath + "_" + newId, parentPath: data.parentPath },
  294. save: function () {
  295. NodeSave(path, 'add');
  296. }
  297. });
  298. },
  299. addChild: function (path) {
  300. var data = GetNodeByPath(path);
  301. console.log("Menu AddChild", path, data);
  302. var parentId = data.id;
  303. var newId = GetNewNodeId();
  304. OpenModal({
  305. modal: 'modal-node',
  306. modaltitle: abp.localization.iwbZero('OpCreate'),
  307. data: { id: newId, parentId: parentId, path: data.path + "_" + newId, parentPath: data.path },
  308. save: function () {
  309. NodeSave(path, 'addChild');
  310. }
  311. });
  312. },
  313. edit: function (path) {
  314. var data = GetNodeByPath(path);
  315. console.log("Menu Edit", path, data);
  316. OpenModal({
  317. modal: 'modal-node',
  318. modaltitle: abp.localization.iwbZero('OpUpdate'),
  319. data: data,
  320. save: function () {
  321. NodeSave(path, 'edit');
  322. }
  323. });
  324. },
  325. delete: function (path) {
  326. console.log("Menu Delete", path);
  327. MsgConfirm("确认删除节点吗?",
  328. "删除节点",
  329. function () {
  330. NodeSave(path, 'delete');
  331. });
  332. },
  333. PRE: function (path) {
  334. var data = GetComponentData(path, PRE);
  335. window._IsDetail ? $('#modal-component').find('.comp-btn').hide() : $('#modal-component').find('.comp-btn').show();
  336. console.log("Menu PrevComponent", path, data);
  337. if (data) {
  338. OpenModal({
  339. modal: 'modal-component',
  340. modaltitle: '运行前',
  341. data: data,
  342. save: function () {
  343. NodeSave(path, PRE);
  344. }
  345. });
  346. }
  347. },
  348. RUN: function (path) {
  349. var data = GetComponentData(path, RUN);
  350. console.log("Menu RunComponent", path, data);
  351. window._IsDetail ? $('#modal-component').find('.comp-btn').hide() : $('#modal-component').find('.comp-btn').show();
  352. if (data) {
  353. OpenModal({
  354. modal: 'modal-component',
  355. modaltitle: '运行时',
  356. data: data,
  357. save: function () {
  358. NodeSave(path, RUN);
  359. }
  360. });
  361. }
  362. },
  363. POST: function (path) {
  364. var data = GetComponentData(path, POST);
  365. window._IsDetail ? $('#modal-component').find('.comp-btn').hide() : $('#modal-component').find('.comp-btn').show();
  366. console.log("Menu PostComponent", path, data);
  367. if (data) {
  368. OpenModal({
  369. modal: 'modal-component',
  370. modaltitle: '运行后',
  371. data: data,
  372. save: function () {
  373. NodeSave(path, POST);
  374. }
  375. });
  376. }
  377. },
  378. detail: function (path) {
  379. var data = GetNodeByPath(path);
  380. NodeDetail(data);
  381. },
  382. none: function () { console.log("No Menu type"); }
  383. };
  384. function FlowMenuFun($node) {
  385. var path = $node.data('path');
  386. var parentPath = $node.data('parent-path');
  387. $('#flow-menu').find('a[data-type]').off('click.menu').on('click.menu',
  388. function () {
  389. var type = $(this).data('type');
  390. if (type == "detail" || '@(Model)' != 'package') {
  391. flowMenuFuns[type] ? flowMenuFuns[type].call($node, path, parentPath) : flowMenuFuns["none"].call(this);
  392. }
  393. });
  394. }
  395. </script>
  396. <script id="Component-S">
  397. var _COMPNAME = '@(Model)' === 'package' ? "方案包事务" : "事务";
  398. //获取组件数据
  399. function GetComponentData(path, type) {
  400. var data = GetNodeByPath(path);
  401. var str = type === PRE ? data.preComponent : type === RUN ? data.runningComponent : type === POST ? data.postComponent : "";
  402. //if ('@(Model)' === 'package' && !str) {
  403. //abp.message.warn('情景流节点未配置事务,如需更事务配置请先在情景流节点中配置!');
  404. //return null;
  405. //}
  406. var typeStr = type === PRE ? FLOWPRESTRING + PRE : type === RUN ? FLOWPRESTRING + RUN : type === POST ? FLOWPRESTRING + POST : "";
  407. var componentArr = str ? str.split('|') : [""];
  408. var componentNo = componentArr[0] || typeStr + $.now();
  409. var componentMapping = componentArr.length > 1 ? componentArr[1] : "";
  410. var componentName = componentArr.length > 2 ? componentArr[2] : _COMPNAME;
  411. var component="",index;
  412. if ('@(Model)' === 'package') {
  413. index = window._PackageCompData.findIndex(function (v) {
  414. return v.no == componentNo;
  415. });
  416. component = index > -1 ? JSON.stringify(window._PackageCompData[index].data) : "";
  417. }
  418. if (!component) {
  419. index = _CompData.findIndex(function (v) {
  420. return v.id == componentNo;
  421. });
  422. component = index > -1 ? JSON.stringify(_CompData[index].data) : "";
  423. }
  424. return { id: data.id, path: data.path, componentNo: componentNo, mapping: componentMapping, name: componentName, componentType: typeStr, component: component, sceneVariables: data.variables }
  425. }
  426. //保存节点
  427. function NodeSave(path, type) {
  428. var index, data = GetNodeByPath(path), parent;
  429. if (!data) {
  430. abp.message.warn("数据异常,请检查后再试!");
  431. return;
  432. }
  433. switch (type) {
  434. case 'add':
  435. case 'addChild':
  436. case 'edit':
  437. if (!$.formValidate($('#form-node'))) {
  438. return;
  439. }
  440. var formData = {
  441. id: $('#modal-node #id').val(),
  442. parentId: $('#modal-node #parentId').val(),
  443. path: $('#modal-node #path').val(),
  444. parentPath: $('#modal-node #parentPath').val(),
  445. name: $('#modal-node #name').val(),
  446. sceneNos: $('#modal-node #sceneNos').val(),
  447. sceneNames: $('#modal-node #sceneNames').val(),
  448. variables: $('#modal-node #variables').val(),
  449. guideNos: $('#modal-node #guideNos').val(),
  450. guideNames: $('#modal-node #guideNames').val()
  451. }
  452. switch (type) {
  453. case 'addChild':
  454. data.children.push($.extend({},
  455. {
  456. preComponent: GetNewComponentNo(PRE),
  457. runningComponent: GetNewComponentNo(RUN),
  458. postComponent: GetNewComponentNo(POST)
  459. },
  460. formData,
  461. { children: [] }));
  462. break;
  463. case 'add':
  464. parent = GetNodeByPath(data.parentPath);
  465. if (parent) {
  466. parent.children.push($.extend({},
  467. {
  468. preComponent: GetNewComponentNo(PRE),
  469. runningComponent: GetNewComponentNo(RUN),
  470. postComponent: GetNewComponentNo(POST)
  471. },
  472. formData,
  473. { children: [] }));
  474. } else {
  475. abp.message.warn("数据异常!");
  476. return;
  477. }
  478. break;
  479. case 'edit':
  480. $.extend(data, formData);
  481. }
  482. break;
  483. case 'delete':
  484. if (data.children && data.children.length > 0) {
  485. abp.message.warn("有子节点未删除,请检查后再试!");
  486. return;
  487. } else {
  488. parent = GetNodeByPath(data.parentPath);
  489. index = parent.children.findIndex(function (v) {
  490. return v.id == data.id;
  491. });
  492. parent.children.splice(index, 1);
  493. }
  494. break;
  495. case PRE:
  496. case RUN:
  497. case POST:
  498. ComponentSave(data, type,'@(Model)');
  499. break;
  500. }
  501. '@(Model)' != "package"
  502. ? InitFlowTree(_FlowTreeData, true)
  503. : InitFlowTree(data, false, $('#modal-flow-detail .main-box'), window.menuFlow);
  504. if ($('#modal-detail').hasClass('show')) {
  505. data = GetNodeByPath(path);
  506. switch (type) {
  507. case 'edit':
  508. FlowDetailSceneGuideFormatter(data.sceneNos, data.sceneNames, 'scene', data.path);
  509. FlowDetailSceneGuideFormatter(data.guideNos, data.guideNames, 'guide', data.path);
  510. break;
  511. case PRE:
  512. case RUN:
  513. case POST:
  514. FlowDetailCompFormatter(data);
  515. break;
  516. }
  517. }
  518. $('#modal-node').modal('hide');
  519. }
  520. function ComponentSave(data, type, source) {
  521. if (!$.formValidate($('#modal-component form'))) {
  522. return;
  523. }
  524. var componentNo = $('#modal-component #componentNo').val();
  525. var componentMapping = $('#modal-component #mapping').val();
  526. var componentName = $('#modal-component #name').val();
  527. @*@if (Model!= "package")
  528. {
  529. <text>
  530. if (!componentName) {
  531. abp.message.warn("组件名不能为空!", "提示");
  532. return;
  533. }
  534. </text>
  535. }*@
  536. var str = componentNo + "|" + componentMapping + "|" + (componentName ? componentName : _COMPNAME);
  537. switch (type) {
  538. case PRE:
  539. data.preComponent = str;
  540. break;
  541. case RUN:
  542. data.runningComponent = str;
  543. break;
  544. case POST:
  545. data.postComponent = str;
  546. break;
  547. }
  548. var compData = { id: componentNo, no: componentNo, name: componentName, data: $.extend([], window._ComponentDataArray || []) };
  549. var compDataArray;
  550. if (source && source === 'package') {
  551. compDataArray = window._PackageCompData;
  552. } else {
  553. compDataArray = _CompData;
  554. }
  555. var cIndex = compDataArray.findIndex(function (v) {
  556. return v.no === componentNo;
  557. });
  558. if (cIndex > -1) {
  559. compDataArray[cIndex] = compData;
  560. } else {
  561. compDataArray.push(compData);
  562. }
  563. $('#modal-component').modal('hide');
  564. }
  565. function RemoveComponent(componentNo, path, type) {
  566. var isPackageFlow = type.indexOf('P') == 0;
  567. var data = isPackageFlow? window.GetDataByPath(path) : GetNodeByPath(path);
  568. switch (type) {
  569. case "F_PRE":
  570. if (isPackageFlow || '@(Model)' != "package"){
  571. data.preComponent = data['preComponent'].substr(0, data['preComponent'].indexOf('|'))+"||";
  572. }
  573. break;
  574. case "P_PRE":
  575. data.preComponent = "";
  576. break;
  577. case "F_RUN":
  578. if (isPackageFlow || '@(Model)' != "package"){
  579. data.runningComponent = data['runningComponent'].substr(0, data['runningComponent'].indexOf('|')) + "||";
  580. }
  581. break;
  582. case "P_RUN":
  583. data.runningComponent = "";
  584. break;
  585. case "F_POST":
  586. if (isPackageFlow || '@(Model)' != "package"){
  587. data.postComponent = data['postComponent'].substr(0, data['postComponent'].indexOf('|')) + "||";
  588. }
  589. break;
  590. case "P_POST":
  591. data.postComponent = "";
  592. break;
  593. }
  594. var compDataArray;
  595. compDataArray = '@(Model)' === 'package' ? window._PackageCompData : _CompData;
  596. var cIndex = compDataArray.findIndex(function (v) {
  597. return v.no === componentNo;
  598. });
  599. if (cIndex > -1) {
  600. compDataArray.splice(cIndex, 1);
  601. }
  602. if ($('#modal-detail').hasClass('show')) {
  603. FlowDetailCompFormatter(data);
  604. }
  605. if ('@(Model)' === 'package') {
  606. window._refreshData = data;
  607. window.RefreshPackage();
  608. InitFlowTree(data, false, $('#modal-flow-detail .main-box'), window.menuFlow);
  609. } else {
  610. InitFlowTree(_FlowTreeData, true);
  611. }
  612. $('#modal-component').modal('hide');
  613. }
  614. function NodeTemplate(data) {
  615. var str1 = '<div class="setting no-setting no-select {1}" data-toggle="tip" title="{2}" {3} >{0} <span>未配置</span></div>',
  616. str2 = '<div class="setting no-select {1}" data-toggle="tip" title="{2}" {3} >{0} <span>已配置</span></div>',
  617. str3 = 'onclick="flowMenuFuns.{0}.call(this, \'' + data.path + '\')"';
  618. var str = '';
  619. str += '<div class="title"></div>';
  620. str += '<div class="title-text no-select">' + data['name'] + '</div>';
  621. str += '<div class="content no-select">';
  622. str += ('<div class="setting no-select path" data-toggle="tip" title="{0}">{0}</div>').format('路径:' + data['path']);
  623. str += (data['sceneNos'] ? str2 : str1).format('情景信息', 'scene','情景信息:' + (data['sceneNames'] ? data['sceneNames']: '无'), '@(Model)' == 'package'?'':str3.format("edit"));
  624. str += (data['guideNos'] ? str2 : str1).format('引导信息', 'guide', '引导信息:' + (data['guideNames'] ? data['guideNames'] : '无'), '@(Model)' == 'package' ? '' : str3.format("edit"));
  625. var preName = GetComponentName(data['preComponent']),
  626. runName = GetComponentName(data['runningComponent']),
  627. postName = GetComponentName(data['postComponent']);
  628. // data['preComponent'].substr(0, data['preComponent'].indexOf('|'))
  629. //str += (preName ? str2 : str1).format('运行前事务', 'pre', '事务:' + (preName ? preName : '无'), str3.format(PRE));
  630. //str += (runName ? str2 : str1).format('运行时事务', 'run', '事务:' + (runName ? runName : '无'), str3.format(RUN));
  631. //str += (postName ? str2 : str1).format('运行后事务', 'post', '事务:' + (postName ? postName : '无'), str3.format(POST));
  632. str += (preName ? str2 : str1).format('运行前事务', 'pre', '点击可配置事务', str3.format(PRE));
  633. str += (runName ? str2 : str1).format('运行时事务', 'run', '点击可配置事务', str3.format(RUN));
  634. str += (postName ? str2 : str1).format('运行后事务', 'post', '点击可配置事务', str3.format(POST));
  635. str += '</div>';
  636. return str;
  637. }
  638. function GetComponentName(component) {
  639. var componentArr = component ? component.split('|') : [""];
  640. var componentName = componentArr.length > 2 ? componentArr[2] : "";
  641. @if (Model== "package")
  642. {
  643. <text>
  644. var componentNo = componentArr[0];
  645. if (window._PackageCompData.findIndex(function (v) {return v.no === componentNo;})>-1) {
  646. componentName = '[方案包事务]&nbsp;&nbsp;' + componentName;
  647. }
  648. </text>
  649. }
  650. return componentName;
  651. }
  652. function FlowDetailCompFormatter(data) {
  653. var
  654. empty = '<tr><td colspan="10" style="color:red;font-weight:bold;">未配置数据</td></tr>';
  655. var str = '';
  656. str += FlowDetailComponentFormatter(data.preComponent, PRE, '运行前', data.path);
  657. str += FlowDetailComponentFormatter(data.runningComponent, RUN, '运行时', data.path);
  658. str += FlowDetailComponentFormatter(data.postComponent, POST, '运行后', data.path);
  659. if (str) {
  660. $('#tab-content-component tbody').html(str);
  661. } else {
  662. $('#tab-content-component tbody').html(empty);
  663. }
  664. }
  665. function FlowDetailComponentFormatter(comp,type,name,path) {
  666. var str = '',
  667. temp = '<tr><td style="color:red;">{0}' +
  668. '{0}事务组件</td><td style="text-align: center;" ><a class="table-action" onclick="flowMenuFuns.{1}.call(this,\'{2}\')">{3}</a></td></tr>'
  669. .format(name,type,path,'@(Model)' == 'package' ? '<span style="color:red;font-weight:bold;">重新配置</span>' : '查看详情'),
  670. temp2 = '<tr><td style="color:red;font-weight:bold;">未配置<span style="padding:0 5px;font-size:105%;">{0}</span>事务组件</td><td style="text-align: center;" ><a class="table-action" onclick="flowMenuFuns.{1}.call(this,\'{2}\')">配置事务</a></td></tr>'
  671. .format(name, type, path),
  672. componentArr,
  673. componentNo,
  674. componentName;
  675. if (comp) {
  676. componentArr = comp.split('|');
  677. componentNo = componentArr[0];
  678. componentName = componentArr.length > 2 ? componentArr[2] : "";
  679. if (componentName) {
  680. str += temp.format('');
  681. } else {
  682. @if (Model== "package")
  683. {
  684. <text>
  685. if (window._PackageCompData.findIndex(function (v) {return v.no === componentNo;})>-1) {
  686. str += temp.format('<span style="color:red;font-weight:bold;font-size:80%;">[方案包事务]&nbsp;&nbsp;</span>');
  687. }
  688. else {
  689. str += temp2;
  690. }
  691. </text>
  692. }
  693. else
  694. {
  695. <text>
  696. str += temp2;
  697. </text>
  698. }
  699. }
  700. } else if (!window._IsDetail) {
  701. str += temp2;
  702. }
  703. return str;
  704. }
  705. </script>