Package.cshtml 87 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832
  1. @using IwbZero.IwbDataQuery
  2. @using IwbZero.ToolCommon.StringModel
  3. @using WeEngine.Enum
  4. @using WePlatform.Configuration
  5. @using WePlatform.Authorization
  6. @using WePlatform.Views.Shared.Modals
  7. @using WePlatform.Views.Shared.Query
  8. @using WePlatform.Views.Shared.SearchForm
  9. @using WePlatform.Views.Shared.Table
  10. @{
  11. ViewBag.Title = "演练方案包策划";
  12. string activeMenu = PermissionNames.PagesWePlayerMgPackageMg; //The menu item will be active for this page.
  13. ViewBag.ActiveMenu = activeMenu;
  14. string category = ViewBag.Category,
  15. sceneType = ViewBag.SceneType,
  16. engineModel = ViewBag.EngineModel,
  17. evalModel = ViewBag.EvalModel,
  18. guideType = ViewBag.GuideType,
  19. resourceType = ViewBag.ResourceType,
  20. variableType = IwbDataType.GetDataTypeSelectStr(),
  21. packageState = "<option value=\"\" selected>请选择方案包状态...</option><option value=\"" + PackageStateDefinition.New + "\">新建</option><option value=\"" + PackageStateDefinition.Solidified + "\">已固化</option>";
  22. var searchForm = new SearchFormViewModel(new List<SearchItem>()
  23. {
  24. new SearchItem("packageName","方案包名称"),
  25. new SearchItem("sceneCategory","场景类别").SetSelectItem(category,isTree:true),
  26. new SearchItem("engineModelNo","推演模型").SetSelectItem(engineModel),
  27. new SearchItem("evalModelNo","评估模型").SetSelectItem(evalModel),
  28. new SearchItem("packageState","方案包状态",FieldType.I).SetSelectItem(packageState),
  29. });
  30. var table = new TableViewModel(IwbConsts.ApiAppUrl + "Package/GetAll", activeMenu, searchForm)
  31. .SetFields(new List<FieldItem>()
  32. {
  33. new FieldItem("packageName", "方案包名称"),
  34. new FieldItem("sceneCategoryName", "类别名称"),
  35. new FieldItem("engineModelNo", "推演模型","EngineModelFormatter"),
  36. new FieldItem("evalModelNo", "评估模型","EvalModelFormatter"),
  37. new FieldItem("packageState", "方案包状态","PackageFormatter"),
  38. new FieldItem("masterPlanner", "总策划"),
  39. new FieldItem("planner", "策划人员")});
  40. var flowTable = new TableViewModel("table-flow").SetLocalData().SetPageArray(15)
  41. .SetFields(new List<FieldItem>()
  42. {
  43. new FieldItem("id", "编码"),
  44. new FieldItem("name", "情景流名称"),
  45. new FieldItem("sceneCategory", "类别名称","CategoryFormatter",isSort:false),
  46. new FieldItem("", "详情","FlowActionFormatter"),
  47. });
  48. var sceneTable = new TableViewModel("table-scene").SetLocalData().SetPageArray(15)
  49. .SetFields(new List<FieldItem>()
  50. {
  51. new FieldItem("id", "编码"),
  52. new FieldItem("name", "情景名称"),
  53. new FieldItem("sceneCategory", "类别名称","CategoryFormatter",isSort:false),
  54. new FieldItem("sceneType", "情景类型","SceneTypeFormatter"),
  55. new FieldItem("sceneTag", "情景标签"),
  56. //new FieldItem("", "详情","ActionFormatter"),
  57. });
  58. var behaviorTable = new TableViewModel("table-behavior").SetLocalData().SetPageArray(15)
  59. .SetFields(new List<FieldItem>()
  60. {
  61. new FieldItem("id", "编码"),
  62. new FieldItem("name", "行为名称"),
  63. new FieldItem("sceneCategory", "类别名称","CategoryFormatter",isSort:false),
  64. new FieldItem("behaviorTag", "行为标签"),
  65. new FieldItem("roleNames", "角色名称",isSort:false),
  66. new FieldItem("ruleKeyword", "行为关键字"),
  67. //new FieldItem("", "详情","ActionFormatter"),
  68. });
  69. var guideTable = new TableViewModel("table-guide").SetLocalData().SetPageArray(15)
  70. .SetFields(new List<FieldItem>()
  71. {
  72. new FieldItem("id", "编码"),
  73. new FieldItem("name", "提示名称"),
  74. //new FieldItem("description", "提示详情"),
  75. new FieldItem("guideType", "提示类型","GuideTypeFormatter"),
  76. // new FieldItem("", "详情","ActionFormatter"),
  77. });
  78. var environTable = new TableViewModel("table-environ").SetLocalData().SetPageArray(15)
  79. .SetFields(new List<FieldItem>()
  80. {
  81. new FieldItem("id", "编码"),
  82. new FieldItem("resourceName", "资源名称"),
  83. new FieldItem("resourceType", "资源类型","ResourceTypeFormatter"),
  84. new FieldItem("messageCode", "消息代码"),
  85. new FieldItem("resourcePath", "资源路径","PathFormatter"),
  86. // new FieldItem("", "详情","ActionFormatter"),
  87. });
  88. }
  89. @section css{
  90. <link href="~/Content/Libs/jstree/themes/proton/style.min.css" rel="stylesheet" />
  91. <link href="~/Content/Css/nodetree.css" rel="stylesheet" />
  92. <style>
  93. .round.add.r-setting.flow-s.flow-d {
  94. font-size: 100%;
  95. }
  96. .package-menu {
  97. position: absolute;
  98. top: 20px;
  99. z-index: 1;
  100. }
  101. .package-menu.left {
  102. left: 30px;
  103. }
  104. .package-menu.right {
  105. right: 30px;
  106. }
  107. .role-box, .role-auto {
  108. width: 100%;
  109. margin: 10px 20px;
  110. padding: 10px;
  111. padding-bottom: 0;
  112. border: 1px solid #049e9a;
  113. border-radius: 4px;
  114. }
  115. .role-auto {
  116. border: none;
  117. text-align: right;
  118. margin-right: 30px;
  119. margin-top: 0;
  120. }
  121. </style>
  122. }
  123. @*<div class="main-box iwb-package-tree" id="test" style="height: 500px; overflow-y: auto;width: 1300px;margin: 10px;">
  124. </div>*@
  125. <div class="iwb-package-tree" id="package-menu" style="display: none; position: absolute;z-index: 9999">
  126. <div class="dropdown-menu show">
  127. <a class="dropdown-item round add" data-type="addRound" href="javascript:void(0)">
  128. <i class="far fa-plus-square mr-2"></i>
  129. 增加轮次信息
  130. </a>
  131. <a class="dropdown-item round delete" data-type="deleteRound" href="javascript:void(0)">
  132. <i class="far fa-minus-square mr-2"></i>
  133. 删除轮次信息
  134. </a>
  135. <a class="dropdown-item round r-setting" data-type="roundSetting" href="javascript:void(0)">
  136. <i class="fa fa-cog mr-2"></i>
  137. 配置轮次信息
  138. </a>
  139. <a class="dropdown-item comp" data-type="PRE" href="javascript:void(0)">
  140. <i class="fa fa-cog mr-2"></i>
  141. 配置运行前事务
  142. </a>
  143. <a class="dropdown-item comp" data-type="RUN" href="javascript:void(0)">
  144. <i class="fa fa-cog mr-2"></i>
  145. 配置运行时事务
  146. </a>
  147. <a class="dropdown-item comp" data-type="POST" href="javascript:void(0)">
  148. <i class="fa fa-cog mr-2"></i>
  149. 配置运行后事务
  150. </a>
  151. <a class="dropdown-item guide" data-type="guide" href="javascript:void(0)">
  152. <i class="fa fa-cog mr-2"></i>
  153. 配置引导信息
  154. </a>
  155. <a class="dropdown-item block add" data-type="addBlock" href="javascript:void(0)">
  156. <i class="far fa-plus-square mr-2"></i>
  157. 增加情景流块
  158. </a>
  159. <a class="dropdown-item block delete" data-type="deleteBlock" href="javascript:void(0)">
  160. <i class="far fa-minus-square mr-2"></i>
  161. 删除情景流块
  162. </a>
  163. <a class="dropdown-item flow-s" data-type="flow-s" href="javascript:void(0)">
  164. <i class="far fa-plus-square mr-2"></i>
  165. 配置情景流
  166. </a>
  167. <a class="dropdown-item flow-d" data-type="flow-d" href="javascript:void(0)">
  168. <i class="far fa-plus-square mr-2"></i>
  169. 情景流详情
  170. </a>
  171. </div>
  172. </div>
  173. <div class="iwb-package-tree" id="package-detail-menu" style="display: none; position: absolute;z-index: 9999">
  174. <div class="dropdown-menu show">
  175. <a class="dropdown-item round r-setting" data-type="roundSettingDetail" href="javascript:void(0)">
  176. <i class="fa fa-cog mr-2"></i>
  177. 查看轮次信息
  178. </a>
  179. <a class="dropdown-item comp" data-type="preDetail" href="javascript:void(0)">
  180. <i class="fa fa-cog mr-2"></i>
  181. 查看运行前事务
  182. </a>
  183. <a class="dropdown-item comp" data-type="runDetail" href="javascript:void(0)">
  184. <i class="fa fa-cog mr-2"></i>
  185. 查看运行时事务
  186. </a>
  187. <a class="dropdown-item comp" data-type="postDetail" href="javascript:void(0)">
  188. <i class="fa fa-cog mr-2"></i>
  189. 查看运行后事务
  190. </a>
  191. <a class="dropdown-item guide" data-type="guideDetail" href="javascript:void(0)">
  192. <i class="fa fa-cog mr-2"></i>
  193. 查看引导信息
  194. </a>
  195. <a class="dropdown-item flow-d" data-type="flow-d" href="javascript:void(0)">
  196. <i class="far fa-plus-square mr-2"></i>
  197. 情景流详情
  198. </a>
  199. </div>
  200. </div>
  201. <div class="row">
  202. <div class="col-sm-3">
  203. <div class="iwb-tree-box">
  204. <div class="box-header">场景类别</div>
  205. <div class="scroll box-body">
  206. <div id="sc-tree"></div>
  207. </div>
  208. </div>
  209. </div>
  210. <div class="col-sm-9">
  211. @Html.Partial("Table/_Table", table)
  212. </div>
  213. </div>
  214. @section modal{
  215. @{
  216. var baseInput = new ModalBodyViewModel(new List<Input>
  217. {
  218. new InputHide("id"),
  219. new Input("sceneCategory", "场景类别").SetSelectOptions(category),
  220. new Input("engineModelNo", "推演模型").SetSelectOptions(engineModel).SetHelp("<span style=\"color: red;\">注:请先确定推演模型后再配置方案包(更改模型后会初始化方案包配置)</span>"),
  221. new Input("evalModelNo", "评估模型").SetSelectOptions(evalModel),
  222. new Input("packageName", "方案包名称"),
  223. new Input("masterPlanner", "总策划").SetNotRequired(),
  224. new Input("planner", "策划人员").SetNotRequired(),
  225. new InputTextarea("description", "详情描述").SetNotRequired(),
  226. });
  227. }
  228. <!--Main Modal-->
  229. <section>
  230. <div class="modal fade" id="modal" tabindex="-1" aria-modal="true">
  231. <div class="modal-dialog modal-lg" style="max-width: 1300px;">
  232. <div class="modal-content">
  233. @Html.Partial("Modals/_ModalHeader", new ModalHeaderViewModel("方案包"))
  234. <div class="modal-body" style="padding: 0">
  235. <form class="form-horizontal " id="form" style="padding-top: 10px">
  236. @*<input class="form-control" id="id" name="id" type="hidden">
  237. <div class="form-group row">
  238. <label class="col-sm-1 iwb-label iwb-label-sm iwb-label-required" for="sceneCategory">场景类别</label>
  239. <div class="col-sm-5">
  240. <div class="input-group input-group-sm">
  241. <select class="form-control required" id="sceneCategory" name="sceneCategory" placeholder="请输入场景类别..." style="width: 100%">
  242. @(Html.Raw(category))
  243. </select>
  244. </div>
  245. </div>
  246. <label class="col-sm-1 iwb-label iwb-label-sm iwb-label-required" for="engineModelNo">推演模型</label>
  247. <div class="col-sm-5">
  248. <div class="input-group input-group-sm">
  249. <select class="form-control required" id="engineModelNo" name="engineModelNo" placeholder="请输入推演模型..." style="width: 100%">
  250. @(Html.Raw(engineModel))
  251. </select>
  252. </div>
  253. </div>
  254. </div>
  255. <div class="form-group row">
  256. <label class="col-sm-1 iwb-label iwb-label-sm iwb-label-required" for="packageName">方案包名称</label>
  257. <div class="col-sm-5">
  258. <div class="input-group input-group-sm">
  259. <input class="form-control required" id="packageName" name="packageName" type="text" placeholder="请输入方案包名称..." style="">
  260. </div>
  261. </div>
  262. <label class="col-sm-1 iwb-label iwb-label-sm" for="masterPlanner">总策划</label>
  263. <div class="col-sm-5">
  264. <div class="input-group input-group-sm">
  265. <input class="form-control" id="masterPlanner" name="masterPlanner" type="text" placeholder="请输入总策划人员..." style="">
  266. </div>
  267. </div>
  268. </div>
  269. <div class="form-group row">
  270. <label class="col-sm-1 iwb-label iwb-label-sm" for="planner">策划人员</label>
  271. <div class="col-sm-5">
  272. <div class="input-group input-group-sm">
  273. <input class="form-control" id="planner" name="planner" type="text" placeholder="请输入策划人员..." style="">
  274. </div>
  275. </div>
  276. <div class="col-sm-6" style="color: red; padding: 5px;">
  277. 注:请先确定推演模型后再配置方案包(更改模型后会初始化方案包配置)
  278. </div>
  279. </div>*@
  280. <div class="card card-primary card-outline card-outline-tabs" style="margin-bottom: 0; border-top: 0; ">
  281. <div class="card-header p-0 border-bottom-0">
  282. <ul class="nav nav-tabs">
  283. <li class="nav-item">
  284. <a class="nav-link active" data-toggle="pill" id="tab-package-base" href="#tab-content-base" role="tab">基础信息</a>
  285. </li>
  286. <li class="nav-item">
  287. <a class="nav-link" data-toggle="pill" href="#tab-content-packageSetting" role="tab">方案包配置</a>
  288. </li>
  289. </ul>
  290. </div>
  291. <div class="card-body">
  292. <div class="tab-content">
  293. <div class="tab-pane fade show active" id="tab-content-base" role="tabpanel">
  294. @Html.Partial("Modals/_ModalInput", baseInput)
  295. </div>
  296. <div class="tab-pane fade" id="tab-content-packageSetting" role="tabpanel">
  297. <div style="position: relative;">
  298. <div class="package-menu left" style="">
  299. <button id="variable-setting" onclick="VariableSetting()" class="btn btn-iwb btn-sm" type="button">变量配置</button>
  300. </div>
  301. <div class="package-menu right" style="">
  302. <button id="role-setting" onclick="RoleSetting()" class="btn btn-iwb btn-sm" type="button">角色配置</button>
  303. <button id="package-verify" onclick="PackageVerify()" class="btn btn-danger btn-sm" type="button">方案包校验</button>
  304. </div>
  305. <div class="main-box main-package-box">
  306. </div>
  307. </div>
  308. </div>
  309. </div>
  310. </div>
  311. </div>
  312. </form>
  313. </div>
  314. @Html.Partial("Modals/_ModalFooter", "0")
  315. </div>
  316. </div>
  317. </div>
  318. </section>
  319. <section>
  320. <div class="modal fade" id="modal-package-detail" tabindex="-1" aria-modal="true">
  321. <div class="modal-dialog modal-lg" style="max-width: 1300px;">
  322. <div class="modal-content">
  323. @Html.Partial("Modals/_ModalHeader", new ModalHeaderViewModel("方案包详情"))
  324. <div class="modal-body" style="padding: 0">
  325. <div class="card card-primary card-outline card-outline-tabs" style="margin-bottom: 0; border-top: 0; ">
  326. <div class="card-header p-0 border-bottom-0">
  327. <ul class="nav nav-tabs" id="package-tab" role="tablist">
  328. <li class="nav-item">
  329. <a class="nav-link active" id="tab-detail-package-link" data-toggle="pill" href="#tab-detail-package" role="tab">方案包信息</a>
  330. </li>
  331. <li class="nav-item">
  332. <a class="nav-link" data-toggle="pill" href="#tab-detail-flow" role="tab">情景流信息</a>
  333. </li>
  334. <li class="nav-item">
  335. <a class="nav-link" data-toggle="pill" href="#tab-detail-scene" role="tab">情景信息</a>
  336. </li>
  337. <li class="nav-item">
  338. <a class="nav-link" data-toggle="pill" href="#tab-detail-behavior" role="tab">行为信息</a>
  339. </li>
  340. <li class="nav-item">
  341. <a class="nav-link" data-toggle="pill" href="#tab-detail-guide" role="tab">引导信息</a>
  342. </li>
  343. <li class="nav-item">
  344. <a class="nav-link" data-toggle="pill" href="#tab-detail-environ" role="tab">环境资源信息</a>
  345. </li>
  346. </ul>
  347. </div>
  348. <div class="card-body" style="padding: 10px">
  349. <div class="tab-content iwb-bootstrap-table" id="package-tabContent">
  350. <div class="tab-pane fade show active" id="tab-detail-package" role="tabpanel">
  351. <div class="row package-detail">
  352. </div>
  353. <div class="main-box main-package-box">
  354. </div>
  355. </div>
  356. <div class="tab-pane fade" id="tab-detail-flow" role="tabpanel">
  357. @Html.Partial("Table/_Table", flowTable)
  358. </div>
  359. <div class="tab-pane fade" id="tab-detail-scene" role="tabpanel">
  360. @Html.Partial("Table/_Table", sceneTable)
  361. </div>
  362. <div class="tab-pane fade" id="tab-detail-behavior" role="tabpanel">
  363. @Html.Partial("Table/_Table", behaviorTable)
  364. </div>
  365. <div class="tab-pane fade" id="tab-detail-guide" role="tabpanel">
  366. @Html.Partial("Table/_Table", guideTable)
  367. </div>
  368. <div class="tab-pane fade" id="tab-detail-environ" role="tabpanel">
  369. @Html.Partial("Table/_Table", environTable)
  370. </div>
  371. </div>
  372. </div>
  373. </div>
  374. </div>
  375. @Html.Partial("Modals/_ModalFooter", "1")
  376. </div>
  377. </div>
  378. </div>
  379. </section>
  380. @{
  381. var roundSettingModal = new ModalViewModel("轮次信息配置", "", new ModalBodyViewModel(new List<Input>
  382. {
  383. new InputHide("path"),
  384. new InputNumber("roundFullScore", "轮次总分", @class: "number", other: "min=0.001"),
  385. new InputNumber("controlRate", "随机概率", @class: "number", other: "min=0 max=100"),
  386. new InputNumber("sceneCount", "情景流数", @class: " digits", other: "min=1")
  387. }, "form-round-setting"), "modal-round-setting");
  388. var flowModal = new ModalViewModel("添加情景流", "", new ModalBodyViewModel(new List<Input>
  389. {
  390. new InputHide("path"),
  391. new InputHide("flowNos"),
  392. new Input("flowNames", "情景流").SetDisabled().SetSearchIcon("qm_flow", "modal-flow", "flowNos,flowNames,variables"),
  393. }, "form-flow"), "modal-flow");
  394. var guideModal = new ModalViewModel("配置引导信息", "", new ModalBodyViewModel(new List<Input>
  395. {
  396. new InputHide("path"),
  397. new InputHide("guideNos"),
  398. new Input("guideNames", "引导信息").SetDisabled().SetSearchIcon("qm_guide", "modal-guide", "guideNos,guideNames"),
  399. }, "form-guide"), "modal-guide");
  400. var solidifyModal = new ModalViewModel("固化方案包", "", new ModalBodyViewModel(new List<Input>
  401. {
  402. new InputHide("id"),
  403. new Input("newName", "固化名称"),
  404. }, "form-solidify"), "modal-solidify");
  405. }
  406. <section>
  407. <div class="modal fade" id="modal-flow-detail" tabindex="-1" aria-modal="true">
  408. <div class="modal-dialog modal-lg" style="max-width: 1300px;">
  409. <div class="modal-content">
  410. @Html.Partial("Modals/_ModalHeader", new ModalHeaderViewModel(""))
  411. <div class="modal-body" style="padding: 0; min-height: 500px;">
  412. <div class="main-box main-flow-box"></div>
  413. </div>
  414. @Html.Partial("Modals/_ModalFooter", "1")
  415. </div>
  416. </div>
  417. </div>
  418. </section>
  419. @Html.Partial("Modals/_Modal", roundSettingModal)
  420. @Html.Partial("Modals/_Modal", flowModal)
  421. @Html.Partial("_FlowNode", "package")
  422. @Html.Partial("Modals/_Modal", guideModal)
  423. @Html.Partial("Query/_SceneFlowInfo", new QueryWithSelect("flowNos,flowNames,variables", new Dictionary<string, string>
  424. {
  425. ["sceneCategory"] = category
  426. }))
  427. @Html.Partial("Query/_GuideInfo", new QueryWithSelect("guideNos,guideNames", new Dictionary<string, string>() { ["guideType"] = guideType }))
  428. @Html.Partial("Modals/_Modal", solidifyModal)
  429. }
  430. @section scripts
  431. {
  432. <script src="~/Content/Libs/jstree/jstree.min.js"></script>
  433. <script src="~/Content/Js/packagetree.js"></script>
  434. <script type="text/javascript">
  435. var PACKAGEPRESTRING = 'P_';
  436. var $table, _EngineModelType, _IsDetail = false, _PackageVariable = [], cuScNo = '';
  437. $(function () {
  438. OverlayScrollbar($('.scroll'));
  439. InitScTree();
  440. //InitPackage($.extend({}, GetInitPackage()));
  441. $('#modal #packageName,#modal #engineModelNo').on('change',
  442. function () {
  443. var name = $('#modal #packageName').val();
  444. if (name) {
  445. _PackageTreeData.name = name;
  446. InitPackage(_PackageTreeData, true);
  447. }
  448. });
  449. $table = LoadTable({
  450. searchFun: TableSearchFun
  451. });
  452. var funs = window.iwbfuns || { none: function() { console.log("No type"); } };
  453. funs["btnCreate"] = function() {
  454. $('.package-menu.right ').hide();
  455. BtnCreate({
  456. data: { id: "" },
  457. dataFun: GetSaveData,
  458. form: $('#modal #form'),
  459. select2tree: "sceneCategory,sceneCategoryEx",
  460. shownAfter: function () {
  461. $('#modal .modal-dialog').animate({ 'marginTop': '50px' });
  462. $('#modal #tab-package-base').tab('show');
  463. _PackageCompData = [];
  464. var initData = GetInitPackage();
  465. var data = $.extend({}, initData);
  466. InitPackage(data);
  467. _PackageVariable = [];
  468. }
  469. });
  470. }
  471. funs["btnUpdate"] = function() {
  472. var row = $table.bootstrapTable("getSelections")[0];
  473. if (row) {
  474. if (row.packageState == @(PackageStateDefinition.Solidified)) {
  475. abp.message.warn("方案包已固化不能修改!");
  476. return;
  477. }
  478. BtnUpdate({
  479. select2tree: "sceneCategory,sceneCategoryEx",
  480. form: $('#modal #form'),
  481. disabled: "",
  482. dataFun: GetSaveData,
  483. shownAfter: function() {
  484. $('#modal .modal-dialog').animate({ 'marginTop': '50px' });
  485. $('#modal #tab-package-base').tab('show');
  486. var data;
  487. try {
  488. data = row.contentInfo ? JSON.parse(row.contentInfo) : undefined;
  489. _PackageCompData = row.componentInfo ? JSON.parse(row.componentInfo) : [];
  490. console.log("U-Package:", data, _PackageCompData);
  491. } catch (e) {
  492. console.log(e);
  493. }
  494. if (!data) {
  495. var initData = GetInitPackage();
  496. data = $.extend({}, initData);
  497. }
  498. _PackageVariable = [];
  499. $.iwbAjax4({
  500. url: abp.appUrl + "Package/GetVariable?no=" + row.id,
  501. blockUI: true,
  502. success: function(res) {
  503. _PackageVariable = $.extend([], res || []);
  504. }
  505. });
  506. InitPackage(data);
  507. $('.package-menu.right').show();
  508. }
  509. },
  510. row);
  511. } else {
  512. abp.message.warn(abp.localization.iwbZero('SelectRecordOperation'));
  513. }
  514. };
  515. funs["btnDelete"] = function(url) {
  516. var row = $table.bootstrapTable("getSelections")[0];
  517. if (row) {
  518. if (row.packageState == @(PackageStateDefinition.Solidified)) {
  519. abp.message.warn("方案包已固化不能删除!");
  520. return;
  521. }
  522. BtnDelete({ url: url }, row);
  523. } else {
  524. abp.message.warn(abp.localization.iwbZero('SelectRecordOperation'));
  525. }
  526. };
  527. funs["btnCopy"] = function(url) {
  528. var row = $table.bootstrapTable("getSelections")[0];
  529. if (row) {
  530. MsgConfirm("确定拷贝【" + row.packageName + "-" + row.id + "】方案包吗?",
  531. "拷贝方案包",
  532. function() {
  533. $.iwbAjax1({
  534. url: url,
  535. table: "table",
  536. data: { id: row.id }
  537. });
  538. });
  539. } else {
  540. abp.message.warn(abp.localization.iwbZero('SelectRecordOperation'));
  541. }
  542. };
  543. funs["btnSolidify"] = function(url) {
  544. var row = $table.bootstrapTable("getSelections")[0];
  545. if (row) {
  546. OpenModal({
  547. url: url,
  548. table: "table",
  549. modal: 'modal-solidify',
  550. data: { id: row.id, newName: row.packageName },
  551. dataFun: function() {
  552. return {
  553. id: $('#modal-solidify #id').val(),
  554. newName: $('#modal-solidify #newName').val()
  555. };
  556. }
  557. });
  558. } else {
  559. abp.message.warn(abp.localization.iwbZero('SelectRecordOperation'));
  560. }
  561. };
  562. });
  563. function InitScTree() {
  564. $('#sc-tree')
  565. .jstree({
  566. 'core': {
  567. 'data': GetNode,
  568. 'strings': {
  569. 'Loading ...': '请稍后...'
  570. },
  571. 'force_text': true,
  572. 'check_callback': true,
  573. 'themes': {
  574. 'name': 'proton',
  575. 'responsive': true,
  576. 'variant': 'large'
  577. }
  578. },
  579. 'plugins': ['wholerow'] // 'state',
  580. }).on('ready.jstree',function(e, data) {
  581. //console.log('000', e, data);
  582. var inst = data.instance,
  583. obj = inst.get_node('@(IwbConsts.SceneCategoryRootNo)');
  584. inst.open_node(obj);
  585. inst.select_node(obj);
  586. cuScNo = '';
  587. RefreshTable();
  588. }).on('activate_node.jstree',function(e, data) {
  589. //console.log('111',data);
  590. cuScNo = data.node.id == '@(IwbConsts.SceneCategoryRootNo)' ? "" : data.node.id;
  591. RefreshTable();
  592. });
  593. }
  594. function GetNode(node, callback) {
  595. $.iwbAjax4({
  596. url: abp.appUrl + 'Query/GetChildSceneCategory',
  597. data: { id: node.id },
  598. success: function(res) {
  599. if (callback) {
  600. callback.call(this, res);
  601. } else {
  602. $("#sc-tree").html("暂无数据!");
  603. }
  604. }
  605. });
  606. }
  607. function TableSearchFun(sl) {
  608. sl.push({
  609. KeyWords: cuScNo,
  610. KeyField: 'sceneCategory',
  611. FieldType: '0',
  612. ExpType: '0'
  613. });
  614. }
  615. </script>
  616. <script type="text/javascript">
  617. function GetSaveData() {
  618. var data = $.formSerialize($('#form'));
  619. data.contentInfo = JSON.stringify(_PackageTreeData);
  620. data.componentInfo = JSON.stringify(_PackageCompData);
  621. var variableStr = '';
  622. _PackageVariable.forEach(function(v) {
  623. if (v.name) {
  624. variableStr += (variableStr == '' ? '' : ',') + '@@@@{0}:{1}:{2}'.format(v.name, v.type, v.value);
  625. }
  626. });
  627. data.variable = variableStr;
  628. return data;
  629. }
  630. function VariableSetting() {
  631. VariableModal(_PackageVariable);
  632. }
  633. function VariableModal(data) {
  634. var $form = FormatterVariableBox(data);
  635. $(document).iwbModal('create',
  636. {
  637. modal: 'modal-variable-setting',
  638. modaltitle: '方案包全局变量',
  639. modalBody: $form,
  640. save: SaveVariable
  641. });
  642. }
  643. function FormatterVariableBox(data) {
  644. var label = '<div class="dynamic-label col-sm-{0}"><label class="iwb-label">{1}</label></div >',
  645. $box = $('<div>', { 'class': 'dynamic-box' }),
  646. $box1 = $('<div>', { 'class': 'row iwb-dynamic-box' }),
  647. $box2 = $('<div>', { 'class': 'row iwb-dynamic-box' });
  648. $box1.append(label.format('3', '变量'))
  649. .append(label.format('3', '类型'))
  650. .append(label.format('4', '默认值'))
  651. .append(label.format('2', '增加/删除'));
  652. $box2.append(
  653. '<div class="col-sm-3"><div class="input-group input-group-sm"><input class="form-control required" name="variableId" placeholder="请输入变量" style="width: 100%" /></div></div><div class="col-sm-3"><div class="input-group input-group-sm"><select class="form-control required" name="variableType" style="width: 100%">@(Html.Raw(variableType))</select></div></div><div class="col-sm-4"><div class="input-group input-group-sm"><input class="form-control required" name="defaultValue" placeholder="请输入默认值" style="width: 100%" /></div></div><div class="col-sm-2"><button class="btn btn-sm btn-block btn-add" type="button" onclick="AddDynamicBox(this)">增加</button></div>');
  654. $box.append($box1).append($box2);
  655. if (data && data.length > 0) {
  656. for (var i = 0; i < data.length; i++) {
  657. var item = data[i];
  658. var $that = i === 0
  659. ? $box.find('.iwb-dynamic-box').eq(1)
  660. : AddDynamicBox($box.find('.iwb-dynamic-box').eq(1).find('.btn-add'));
  661. $that.find('.form-control[name="variableId"]').val(item.name);
  662. $that.find('.form-control[name="variableType"]').val(item.type).select2();
  663. $that.find('.form-control[name="defaultValue"]').val(item.value);
  664. }
  665. }
  666. var $form = $('<form>', { 'id': 'variable-form' });
  667. $form.append($box);
  668. return $form;
  669. }
  670. function SaveVariable() {
  671. _PackageVariable = [];
  672. $('#variable-form').find('.iwb-dynamic-box').each(function() {
  673. var name = $(this).find('.form-control[name="variableId"]').val();
  674. if (name) {
  675. var type = $(this).find('.form-control[name="variableType"]').val() || 'string';
  676. var value = $(this).find('.form-control[name="defaultValue"]').val() || '';
  677. _PackageVariable.push({ name: name, type: type, value: value });
  678. }
  679. });
  680. $('#modal-variable-setting').modal('hide');
  681. }
  682. function RoleSetting() {
  683. var no = $('#modal #id').val();
  684. if (!no) {
  685. abp.message.warn('请确认方案包已保存后再进行角色配置!');
  686. return;
  687. }
  688. var modelType = $('#modal #engineModelNo option:selected').data('model-type');
  689. if (modelType == @(ModelType.ManyTeam.ToInt()) ||
  690. modelType == @(ModelType.IndependentTeam.ToInt()) ||
  691. modelType == @(ModelType.Independent.ToInt())) {
  692. $.iwbAjax4({
  693. url: abp.appUrl + "Package/GetPackageRoles?no=" + no,
  694. blockUI: true,
  695. success: function(res) {
  696. if (res) {
  697. var $form = FormatterRoleBox(res);
  698. $(document).iwbModal('create',
  699. {
  700. modal: 'modal-assess-role',
  701. modaltitle: '设定考核角色',
  702. data: { id: no },
  703. modalBody: $form,
  704. save: SaveAssessRole
  705. });
  706. }
  707. }
  708. });
  709. } else {
  710. abp.message.warn('当前模型不支持角色配置!');
  711. }
  712. }
  713. function FormatterRoleBox(data) {
  714. var $form = $('<form>', { 'class': 'row' });
  715. var temp =
  716. '<label class="iwb-checkbox iwb-{3}"><input type="checkbox" id="role-{0}" data-role-no="{0}" data-role-name="{1}" name="assess-role" value="{0}" {2}><span></span>{1}</label>';
  717. $form.append('<input id="id" name="id" type="hidden" >');
  718. var $roleBox = $('<div>', { 'class': 'role-box row' });
  719. var roleArr = data.assessRoleNos ? data.assessRoleNos.split(',') : undefined;
  720. var modelType = $('#modal #engineModelNo option:selected').data('model-type');
  721. if (data.allRoles) {
  722. data.allRoles.forEach(function(v) {
  723. var checkedStr = "";
  724. if (roleArr && roleArr.indexOf(v.roleNo) > -1) {
  725. checkedStr = "checked";
  726. }
  727. var $role = $('<div>', { 'class': 'col-sm-4' }).append(temp.format(v.roleNo,
  728. v.roleName + "(" + v.rolePer + "%)",
  729. checkedStr,
  730. 'green'));
  731. if (modelType == @(ModelType.IndependentTeam.ToInt()) ||
  732. modelType == @(ModelType.Independent.ToInt())) {
  733. $role.on('click',
  734. function(e) {
  735. e.preventDefault();
  736. e.stopPropagation();
  737. var flag = $(this).find('input').is(':checked');
  738. $(this).closest('.role-box').find('input').prop('checked', false);
  739. $(this).find('input').prop('checked', !flag);
  740. });
  741. }
  742. $roleBox.append($role);
  743. });
  744. }
  745. $form.append($roleBox);
  746. $form.append($('<div>', { 'class': 'role-auto' })
  747. .append(temp.format('auto', '未考核角色自动满分', data.assessAuto != false ? "checked" : "", 'danger')));
  748. return $form;
  749. }
  750. function SaveAssessRole() {
  751. var roleNos = '', roleNames='';
  752. $('#modal-assess-role .role-box input[name="assess-role"]:checked').each(function() {
  753. if ($(this).is(':checked')) {
  754. roleNos += (roleNos === "" ? "" : ",") + $(this).data('role-no');
  755. roleNames += (roleNames === "" ? "" : ",") + $(this).data('role-name');
  756. }
  757. });
  758. var data = {
  759. id: $('#modal-assess-role #id').val(),
  760. assessAuto: $('#modal-assess-role #role-auto').is(':checked'),
  761. assessRoleNos: roleNos,
  762. assessRoleNames: roleNames
  763. }
  764. $.iwbAjax1({
  765. url: abp.appUrl + "Package/SetAssessRole",
  766. data: data,
  767. success: function() {
  768. $('#modal-assess-role').modal('hide');
  769. }
  770. });
  771. }
  772. function PackageVerify() {
  773. $.iwbAjax4({
  774. url: abp.appUrl + "Package/PackageVerify?no=" + $('#modal #id').val(),
  775. success: function (res) {
  776. if (res) {
  777. abp.message.success("方案包校验成功!","校验成功");
  778. }
  779. },
  780. error: function (error) {
  781. if (error.details) {
  782. return abp.message.error(error.details, error.message);
  783. } else {
  784. return abp.message.error(error.message || abp.ajax.defaultError.message);
  785. }
  786. }
  787. });
  788. }
  789. function PackageDetail(id) {
  790. _IsDetail = true;
  791. $.iwbAjax4({
  792. url: abp.appUrl + 'Package/Detail?no=' + id,
  793. success: function(res) {
  794. if (res) {
  795. FormatterDetail(res);
  796. OpenModal({
  797. modal: 'modal-package-detail'
  798. });
  799. }
  800. }
  801. });
  802. }
  803. var _FlowDetailData = [], _ComponentDetailData = [],isRefreshDetail=false;
  804. function FormatterDetail(data) {
  805. if (data) {
  806. _FlowDetailData = data.flows || [];
  807. _ComponentDetailData = data.components || [];
  808. var detail = data.detail, h = 520;
  809. if (detail) {
  810. var str = '', temp = '<dl class="col-sm-{2}" title="{0}:{1}" data-toggle="tip"><dt>{0}:</dt><dd>{1}</dd></dl>', col = 3;
  811. str += detail.id ? temp.format("方案包编号", detail.id, col) : "";
  812. str += detail.packageName ? temp.format("方案包名称", detail.packageName, col) : "";
  813. var categoryName = $('#modal #sceneCategory option[value="' + detail.sceneCategory + '"]')
  814. .text();
  815. str += categoryName ? temp.format("场景类别", categoryName, col) : "";
  816. var modelName = $('#hid-engineModel option[value="' + detail.engineModelNo + '"]').text();
  817. str += modelName ? temp.format("推演模型", modelName, col) : "";
  818. str += detail.description ? temp.format("方案包详情", detail.description, 12) : "";
  819. str += data.assessRoleNames ? temp.format("考核角色", data.assessRoleNames, 12) : "";
  820. str += detail.masterPlanner ? temp.format("总策划", detail.masterPlanner, col) : "";
  821. str += detail.planner ? temp.format("策划人员", detail.planner, 12-col) : "";
  822. $('#tab-detail-package .package-detail').html(str);
  823. $('#tab-detail-package .package-detail').find('[data-toggle="tip"]').tooltip({ 'placement': 'bottom', 'container': 'body', 'delay': 500 });
  824. var initData;
  825. try {
  826. initData = detail.contentInfo ? JSON.parse(detail.contentInfo) : undefined;
  827. _PackageCompData = detail.componentInfo ? JSON.parse(detail.componentInfo) : [];
  828. window._CompData = $.extend([], _ComponentDetailData);
  829. console.log("Data-Package:", initData, _PackageCompData, window._CompData);
  830. } catch (e) {
  831. console.log(e);
  832. }
  833. if (!initData) {
  834. initData = GetInitPackage();
  835. initData = $.extend({}, initData);
  836. }
  837. InitPackage(initData,
  838. false,
  839. $('#tab-detail-package .main-box'),
  840. 'package-detail-menu',
  841. PackageDetailMenuFun);
  842. }
  843. LoadTable({
  844. table: 'table-flow',
  845. data: _FlowDetailData,
  846. height: h
  847. }, isRefreshDetail);
  848. LoadTable({
  849. table: 'table-scene',
  850. data: data.scenes || [],
  851. height: h
  852. }, isRefreshDetail);
  853. LoadTable({
  854. table: 'table-guide',
  855. data: data.guides || [],
  856. height: h
  857. }, isRefreshDetail);
  858. LoadTable({
  859. table: 'table-behavior',
  860. data: data.behaviors || [],
  861. height: h
  862. }, isRefreshDetail);
  863. LoadTable({
  864. table: 'table-environ',
  865. data: data.environResources || [],
  866. height: h
  867. }, isRefreshDetail);
  868. _IsDetail = true;
  869. isRefreshDetail = true;
  870. }
  871. $('#tab-detail-package-link').tab('show');
  872. }
  873. function PackageFlowDetail(id) {
  874. var flow = _FlowDetailData.find(function(v) {
  875. return v.id == id;
  876. });
  877. if (flow) {
  878. OpenModal({
  879. modal: 'modal-flow-detail',
  880. modaltitle: flow.name + '-' + flow.id + ' 详情',
  881. shownBefore: function() {
  882. var data;
  883. _IsDetail = true;
  884. try {
  885. //data = flow.contentInfo || {};
  886. //var pathArr = data.path.split("_");
  887. //data.path = pathArr[pathArr.length - 1];
  888. //console.log("U-JSON:", data, window._CompData);
  889. window.InitFlowTree(flow, false, $('#modal-flow-detail .main-box'), menuFlow);
  890. } catch (e) {
  891. console.log(e);
  892. abp.message.warn('数据异常!');
  893. }
  894. },
  895. save: function() {
  896. $('#modal-component').modal('hide');
  897. }
  898. });
  899. }
  900. }
  901. </script>
  902. <script id="packageTree-init-data">
  903. function GetInitPackage() {
  904. var data = {
  905. id: "P",
  906. no: "P",
  907. name: '演练方案包',
  908. path: "P",
  909. parentPath: '',
  910. roundCount: 0,
  911. engineType: '',
  912. guideNos: '',
  913. guideNames: '',
  914. preComponent: '',
  915. runningComponent: '',
  916. postComponent: '',
  917. variables: '',
  918. children: [
  919. ]
  920. }
  921. var package = $.extend({}, data);
  922. package.children.push(GetInitRound(package));
  923. return package;
  924. }
  925. function GetInitRound(package) {
  926. package.roundCount++;
  927. var index = package.roundCount;
  928. var data = {
  929. id: "R" + index,
  930. no: "R" + index,
  931. name: '轮次' + index,
  932. path: package.path + "_R" + index,
  933. parentPath: package.path,
  934. roundIndex: index,
  935. blockIndex: 0,
  936. roundFullScore: 500,
  937. controlRate: 80,
  938. sceneCount: 2,
  939. guideNos: '',
  940. guideNames: '',
  941. preComponent: '',
  942. runningComponent: '',
  943. postComponent: '',
  944. variables: '',
  945. children: [
  946. ]
  947. }
  948. var roundInfo = $.extend({}, data);
  949. roundInfo.children.push(GetInitBlock(roundInfo, 1));
  950. roundInfo.children.push(GetInitBlock(roundInfo));
  951. roundInfo.children.push(GetInitBlock(roundInfo));
  952. roundInfo.children.push(GetInitBlock(roundInfo));
  953. return roundInfo;
  954. }
  955. function GetInitBlock(roundInfo, type) {
  956. type = type || 2;
  957. roundInfo.blockIndex++;
  958. var index = roundInfo.blockIndex;
  959. var data = {
  960. id: "SFB" + index,
  961. no: "SFB" + index,
  962. name: '情景流块' + index,
  963. path: roundInfo.path + "_SFB" + index,
  964. parentPath: roundInfo.path,
  965. blockType: type,
  966. flowNos: '',
  967. flowNames: '',
  968. guideNos: '',
  969. guideNames: '',
  970. preComponent: '',
  971. runningComponent:'',
  972. postComponent:'',
  973. variables: ''
  974. }
  975. //data.children.push({
  976. // id: '',
  977. // no: "SF" + 1,
  978. // name: '情景流' + 1,
  979. // path: data.path + "_SF" + 1,
  980. // parentPath: data.path,
  981. // guideNos: '',
  982. // guideNames: '',
  983. // preComponent: '',
  984. // runningComponent: '',
  985. // postComponent: '',
  986. // variables: '',
  987. // children: []
  988. //});
  989. var block = $.extend({}, data);
  990. return block;
  991. }
  992. function GetPackageNewComponentNo(typeStr) {
  993. return PACKAGEPRESTRING + typeStr + $.now();
  994. }
  995. </script>
  996. <script id="menu-fun">
  997. var _refreshData, _$refreshNode, _refreshType;
  998. var packageMenuFuns = {
  999. 'roundSetting': RoundSetting,
  1000. 'roundSettingDetail': RoundSettingDetail,
  1001. 'addRound': AddRound,
  1002. 'deleteRound': DeleteRound,
  1003. 'addBlock': AddBlock,
  1004. 'deleteBlock': DeleteBlock,
  1005. 'flow-s': FlowSetting,
  1006. 'flow-d': FlowDetail,
  1007. 'guide': GuideSetting,
  1008. 'guideDetail': GuideSettingDetail,
  1009. 'PRE': PreComponentSetting,
  1010. 'preDetail': PreComponentSettingDetail,
  1011. 'RUN': RunComponentSetting,
  1012. 'runDetail': RunComponentSettingDetail,
  1013. 'POST': PostComponentSetting,
  1014. 'postDetail': PostComponentSettingDetail,
  1015. 'none': function () {
  1016. console.log('Package-Menu:', 'NONE');
  1017. }
  1018. };
  1019. function SettingFun(that) {
  1020. var type = $(that).data("setting");
  1021. var $that = $(that).data("type-rs") ? $(that).closest('.round-setting') : $(that).closest('.setting-btn-box'),
  1022. path = $that.data('path'),
  1023. parentPath = $that.data('parent-path');
  1024. console.log("setting", type);
  1025. _refreshData = GetDataByPath(path);
  1026. _$refreshNode = $that;
  1027. _refreshType = type;
  1028. packageMenuFuns[type]
  1029. ? packageMenuFuns[type].call($that, path, parentPath, $that)
  1030. : packageMenuFuns["none"].call(this);
  1031. }
  1032. var $roundSettingModal, $flowModal, $guideModal;
  1033. function RoundSettingDetail(path, parentPath, $node) {
  1034. RoundSetting(path, parentPath, $node, true);
  1035. }
  1036. function RoundSetting(path, parentPath, $node, isDetail) {
  1037. var data = GetDataByPath(path);
  1038. isDetail = isDetail || false;
  1039. _IsDetail = isDetail;
  1040. console.log('Package-Menu:RoundSetting', path, parentPath, data, isDetail);
  1041. if (!data) {
  1042. abp.message.warn('数据异常,未查询到路径为【' + path + '】数据!');
  1043. return;
  1044. }
  1045. var formData = {
  1046. path: path,
  1047. roundFullScore: data.roundFullScore,
  1048. controlRate: data.controlRate,
  1049. sceneCount: data.sceneCount
  1050. }
  1051. $roundSettingModal = $('#modal-round-setting');
  1052. OpenModal({
  1053. modal: $roundSettingModal,
  1054. data: formData,
  1055. shownBefore: function () {
  1056. isDetail
  1057. ? $roundSettingModal.find('.save-btn').hide()
  1058. : $roundSettingModal.find('.save-btn').show();
  1059. },
  1060. save: function () {
  1061. PackageSave($roundSettingModal.find('#path').val(), "roundSetting", $node);
  1062. }
  1063. });
  1064. }
  1065. function AddRound(path, parentPath, $node) {
  1066. var parent = GetDataByPath(parentPath);
  1067. if (!parent) {
  1068. abp.message.warn('数据异常,未查询到路径为【' + parentPath + '】数据!');
  1069. return;
  1070. }
  1071. console.log('Package-Menu:AddRound', path, parentPath, parent);
  1072. var childData = $.extend({}, GetInitRound(parent));
  1073. parent.children = parent.children || [];
  1074. parent.children.push(childData);
  1075. RefreshPackage(childData, $node, 'addRound');
  1076. }
  1077. function DeleteRound(path, parentPath, $node) {
  1078. var data = GetDataByPath(path);
  1079. if (!data) {
  1080. abp.message.warn('数据异常,未查询到路径为【' + path + '】数据!');
  1081. return;
  1082. }
  1083. MsgConfirm("确认删除【" + data.name + "】吗?",
  1084. "删除轮次",
  1085. function () {
  1086. var parent = GetDataByPath(parentPath);
  1087. if (!parent) {
  1088. abp.message.warn('数据异常,未查询到路径为【' + parentPath + '】数据!');
  1089. return;
  1090. }
  1091. console.log('Package-Menu:DeleteRound', path, parentPath, parent);
  1092. var index = parent.children.findIndex(function (v) {
  1093. return v.path === path;
  1094. });
  1095. if (index > -1) {
  1096. parent.roundCount--;
  1097. parent.children.splice(index, 1);
  1098. RefreshPackage(parent.children[index], $node, 'deleteRound');
  1099. }
  1100. });
  1101. }
  1102. function AddBlock(path, parentPath, $node) {
  1103. MsgConfirm("确认添加新情景流块吗?",
  1104. "添加情景流块",
  1105. function () {
  1106. var parent = GetDataByPath(parentPath);
  1107. if (!parent) {
  1108. abp.message.warn('数据异常,未查询到路径为【' + parentPath + '】数据!');
  1109. return;
  1110. }
  1111. console.log('Package-Menu:AddBlock', path, parentPath, parent);
  1112. var childData = $.extend({}, GetInitBlock(parent));
  1113. parent.children = parent.children || [];
  1114. parent.children.push(childData);
  1115. RefreshPackage(childData, $node, 'addBlock');
  1116. });
  1117. }
  1118. function DeleteBlock(path, parentPath, $node) {
  1119. var data = GetDataByPath(path);
  1120. console.log('Package-Menu:DeleteBlock', path, parentPath, data);
  1121. if (!data) {
  1122. abp.message.warn('数据异常,未查询到路径为【' + path + '】数据!');
  1123. return;
  1124. }
  1125. MsgConfirm("确认删除【" + data.name + "】吗?",
  1126. "删除情景流块",
  1127. function () {
  1128. var parent = GetDataByPath(parentPath);
  1129. if (!parent) {
  1130. abp.message.warn('数据异常,未查询到路径为【' + parentPath + '】数据!');
  1131. return;
  1132. }
  1133. console.log('Package-Menu:DeleteBlock', path, parentPath, parent);
  1134. var index = parent.children.findIndex(function (v) {
  1135. return v.path === path;
  1136. });
  1137. if (index > -1) {
  1138. RefreshPackage(parent.children[index], $node, 'deleteBlock');
  1139. parent.children.splice(index, 1);
  1140. }
  1141. //InitPackage(_PackageTreeData);
  1142. });
  1143. }
  1144. function FlowSetting(path, parentPath, $node) {
  1145. var data = GetDataByPath(path);
  1146. console.log('Package-Menu:FlowSetting', path, parentPath, data);
  1147. if (!data) {
  1148. abp.message.warn('数据异常,未查询到路径为【' + path + '】数据!');
  1149. return;
  1150. }
  1151. var formData = { path: path, flowNos: data.flowNos, flowNames: data.flowNames }
  1152. $flowModal = $('#modal-flow');
  1153. OpenModal({
  1154. modal: $flowModal,
  1155. data: formData,
  1156. save: function () {
  1157. PackageSave($flowModal.find('#path').val(), "flow", $node);
  1158. }
  1159. });
  1160. }
  1161. var menuFlow = function FlowMenuFun($node) {
  1162. $('#flow-menu').find('a.dropdown-item').hide();
  1163. $('#flow-menu').find('a.dropdown-item[data-type="detail"]').show();
  1164. var path = $node.data('path');
  1165. var parentPath = $node.data('parent-path');
  1166. $('#flow-menu').find('a[data-type]').off('click.menu').on('click.menu',
  1167. function () {
  1168. var type = $(this).data('type');
  1169. window.flowMenuFuns[type]
  1170. ? window.flowMenuFuns[type].call($node, path, parentPath)
  1171. : window.flowMenuFuns["none"].call(this);
  1172. });
  1173. }
  1174. function FlowDetail(path, parentPath) {
  1175. var no = $(this).data('flow-no');
  1176. console.log('Package-Menu:FlowDetail', path, parentPath, no);
  1177. if (!no) {
  1178. abp.message.warn('数据异常,未查询到编号为【' + no + '】情景流数据!');
  1179. return;
  1180. }
  1181. window._IsDetail
  1182. ? $('#modal-component').find('.save-btn').hide()
  1183. : $('#modal-component').find('.save-btn').show();
  1184. $.iwbAjax4({
  1185. url: abp.appUrl + 'Query/QuerySceneFlowByNo?no=' + no,
  1186. success: function (res) {
  1187. if (res) {
  1188. OpenModal({
  1189. modal: 'modal-flow-detail',
  1190. modaltitle: res.flowName + '-' + res.id + ' 详情',
  1191. shownBefore: function () {
  1192. var data;
  1193. try {
  1194. data = res.contentInfo ? JSON.parse(res.contentInfo) : undefined;
  1195. window._CompData = res.componentInfo ? JSON.parse(res.componentInfo) : [];
  1196. console.log("U-JSON:", data, window._CompData);
  1197. window.InitFlowTree(data, false, $('#modal-flow-detail .main-box'), menuFlow);
  1198. } catch (e) {
  1199. console.log(e);
  1200. abp.message.warn('数据异常!');
  1201. }
  1202. },
  1203. save: function () {
  1204. $('#modal-component').modal('hide');
  1205. }
  1206. });
  1207. }
  1208. }
  1209. });
  1210. }
  1211. function GuideSettingDetail(path, parentPath, $node) {
  1212. GuideSetting(path, parentPath, $node, true);
  1213. }
  1214. function GuideSetting(path, parentPath, $node, isDetail) {
  1215. var data = GetDataByPath(path);
  1216. isDetail = isDetail || false;
  1217. _IsDetail = isDetail;
  1218. console.log('Package-Menu:GuideSetting', path, parentPath, data, isDetail);
  1219. if (!data) {
  1220. abp.message.warn('数据异常,未查询到路径为【' + path + '】数据!');
  1221. return;
  1222. }
  1223. var formData = { path: path, guideNos: data.guideNos, guideNames: data.guideNames }
  1224. $guideModal = $('#modal-guide');
  1225. OpenModal({
  1226. modal: $guideModal,
  1227. data: formData,
  1228. shownBefore: function () {
  1229. isDetail
  1230. ? $guideModal.find('.save-btn').hide()
  1231. : $guideModal.find('.save-btn').show();
  1232. },
  1233. save: function () {
  1234. data.guideNos = $guideModal.find('#guideNos').val();
  1235. data.guideNames = $guideModal.find('#guideNames').val();
  1236. PackageSave($guideModal.find('#path').val(), 'guide', $node);
  1237. }
  1238. });
  1239. }
  1240. function PreComponentSettingDetail(path, parentPath, $node) {
  1241. PreComponentSetting(path, parentPath, $node, true);
  1242. }
  1243. function PreComponentSetting(path, parentPath, $node, isDetail) {
  1244. var data = GetPackageComponentData(path, window.PRE);
  1245. _IsDetail = isDetail;
  1246. console.log("Menu PrevComponent", path, parentPath, data, isDetail);
  1247. if (data) {
  1248. OpenModal({
  1249. modal: 'modal-component',
  1250. modaltitle: '运行前',
  1251. data: data,
  1252. shownBefore: function () {
  1253. isDetail
  1254. ? $('#modal-component').find('.save-btn').hide()
  1255. : $('#modal-component').find('.save-btn').show();
  1256. },
  1257. save: function () {
  1258. PackageSave(path, window.PRE, $node);
  1259. }
  1260. });
  1261. }
  1262. }
  1263. function RunComponentSettingDetail(path, parentPath, $node) {
  1264. RunComponentSetting(path, parentPath, $node, true);
  1265. }
  1266. function RunComponentSetting(path, parentPath, $node, isDetail) {
  1267. var data = GetPackageComponentData(path, window.RUN);
  1268. _IsDetail = isDetail;
  1269. console.log("Menu RunComponent", path, parentPath, data, isDetail);
  1270. if (data) {
  1271. OpenModal({
  1272. modal: 'modal-component',
  1273. modaltitle: '运行时',
  1274. data: data,
  1275. shownBefore: function () {
  1276. isDetail
  1277. ? $('#modal-component').find('.save-btn').hide()
  1278. : $('#modal-component').find('.save-btn').show();
  1279. },
  1280. save: function () {
  1281. PackageSave(path, window.RUN, $node);
  1282. }
  1283. });
  1284. }
  1285. }
  1286. function PostComponentSettingDetail(path, parentPath, $node) {
  1287. PostComponentSetting(path, parentPath, $node, true);
  1288. }
  1289. function PostComponentSetting(path, parentPath, $node, isDetail) {
  1290. var data = GetPackageComponentData(path, window.POST);
  1291. _IsDetail = isDetail;
  1292. console.log("Menu PostComponent", path, parentPath, data, isDetail);
  1293. if (data) {
  1294. OpenModal({
  1295. modal: 'modal-component',
  1296. modaltitle: '运行后',
  1297. data: data,
  1298. shownBefore: function () {
  1299. isDetail
  1300. ? $('#modal-component').find('.save-btn').hide()
  1301. : $('#modal-component').find('.save-btn').show();
  1302. },
  1303. save: function () {
  1304. PackageSave(path, window.POST, $node);
  1305. }
  1306. });
  1307. }
  1308. }
  1309. //获取组件数据
  1310. function GetPackageComponentData(path, type) {
  1311. var data = GetDataByPath(path);
  1312. window._FlowTreeData = {}
  1313. var str = type === window.PRE ? data.preComponent : type === window.RUN ? data.runningComponent : type === window.POST ? data.postComponent : "";
  1314. var typeStr = type === window.PRE ? PACKAGEPRESTRING + window.PRE : type === window.RUN ? PACKAGEPRESTRING + window.RUN : type === window.POST ? PACKAGEPRESTRING + window.POST : "";
  1315. var componentArr = str ? str.split('|') : [""];
  1316. var componentNo = componentArr[0] || typeStr + $.now();
  1317. var componentMapping = componentArr.length > 1 ? componentArr[1] : "";
  1318. var componentName = componentArr.length > 2 ? componentArr[2] : "";
  1319. var index = _PackageCompData.findIndex(function (v) {
  1320. return v.no == componentNo;
  1321. });
  1322. var component;
  1323. if (index > -1) {
  1324. component = JSON.stringify(_PackageCompData[index].data);
  1325. } else {
  1326. index = window._CompData.findIndex(function (v) {
  1327. return v.no == componentNo;
  1328. });
  1329. component = index > -1 ? JSON.stringify(window._CompData[index].data) : "";
  1330. }
  1331. return {
  1332. id: data.id,
  1333. path: data.path,
  1334. componentNo: componentNo,
  1335. mapping: componentMapping,
  1336. name: componentName,
  1337. componentType: typeStr,
  1338. component: component
  1339. }
  1340. }
  1341. function PackageSave(path, type, $node) {
  1342. var data = GetDataByPath(path);
  1343. switch (type) {
  1344. case 'roundSetting':
  1345. var valid = $.formValidate($('#form-round-setting'));
  1346. if (valid) {
  1347. data.roundFullScore = $roundSettingModal.find('#roundFullScore').val();
  1348. data.controlRate = $roundSettingModal.find('#controlRate').val();
  1349. data.sceneCount = $roundSettingModal.find('#sceneCount').val();
  1350. $roundSettingModal.modal('hide');
  1351. }
  1352. break;
  1353. case 'flow':
  1354. data.flowNos = $flowModal.find('#flowNos').val();
  1355. data.flowNames = $flowModal.find('#flowNames').val();
  1356. $flowModal.modal('hide');
  1357. break;
  1358. case 'guide':
  1359. data.guideNos = $guideModal.find('#guideNos').val();
  1360. data.guideNames = $guideModal.find('#guideNames').val();
  1361. $guideModal.modal('hide');
  1362. break;
  1363. case window.PRE:
  1364. case window.RUN:
  1365. case window.POST:
  1366. window.ComponentSave(data, type, 'package');
  1367. break;
  1368. }
  1369. _refreshData = data;
  1370. _$refreshNode = $node;
  1371. _refreshType = type;
  1372. RefreshPackage();
  1373. //InitPackage(_PackageTreeData);
  1374. }
  1375. function PackageMenuFun($node, $menu) {
  1376. var path = $node.data('path'), parentPath = $node.data('parent-path');
  1377. $menu = $menu || $('#package-menu');
  1378. $menu.find('a').removeClass('last-child');
  1379. $menu.find('a:visible:last').addClass('last-child');
  1380. console.log("MenuTarget:", path, parentPath, $node);
  1381. $menu.find('a[data-type]').off('click.menu').on('click.menu',
  1382. function () {
  1383. _refreshData = undefined;
  1384. _$refreshNode = undefined;
  1385. _refreshType = undefined;
  1386. var type = $(this).data('type');
  1387. packageMenuFuns[type]
  1388. ? packageMenuFuns[type].call($node, path, parentPath, $node)
  1389. : packageMenuFuns["none"].call(this);
  1390. });
  1391. }
  1392. //根据path 查询数据
  1393. function GetDataByPath(path) {
  1394. path = path + "";
  1395. if (path.indexOf('_')) {
  1396. var arr = path.split('_');
  1397. return GetDataByPathArr(arr, _PackageTreeData);
  1398. } else {
  1399. return _PackageTreeData;
  1400. }
  1401. };
  1402. function GetDataByPathArr(arr, data, isRoot) {
  1403. isRoot = isRoot === undefined ? true : false;
  1404. data = data || _PackageTreeData;
  1405. if (isRoot) {
  1406. arr.shift();
  1407. }
  1408. if (arr.length > 0) {
  1409. var childId = arr.shift();
  1410. if (childId && data.children && data.children.length > 0) {
  1411. var child = data.children.find(function (v) {
  1412. return v.id == childId;
  1413. });
  1414. if (arr.length > 0) {
  1415. return GetDataByPathArr(arr, child, false);
  1416. } else {
  1417. return child;
  1418. }
  1419. } else {
  1420. return null;
  1421. }
  1422. } else {
  1423. return data;
  1424. }
  1425. };
  1426. function PackageDetailMenuFun($node, $menu) {
  1427. var path = $node.data('path'), parentPath = $node.data('parent-path');
  1428. $menu = $menu || $('#package-detail-menu');
  1429. console.log("DetailMenuTarget:", path, parentPath, $node);
  1430. $menu.find('a[data-type]').off('click.menu').on('click.menu',
  1431. function () {
  1432. var type = $(this).data('type');
  1433. packageMenuFuns[type]
  1434. ? packageMenuFuns[type].call($node, path, parentPath, $node)
  1435. : packageMenuFuns["none"].call(this);
  1436. });
  1437. }
  1438. </script>
  1439. <script id="packageTree">
  1440. var _PackageCompData = [], _PackageTreeData = {};
  1441. function InitPackage(data, isOffset, $modal, menu, menuFun) {
  1442. _PackageTreeData = data;
  1443. _IsDetail = false;
  1444. menu = menu || 'package-menu';
  1445. menuFun = menuFun || PackageMenuFun;
  1446. $modal = $modal || $('#modal .main-box');
  1447. var engineType = $('#modal #engineModelNo option:selected').data('engine-type');
  1448. if (engineType) {
  1449. _PackageTreeData.engineType = engineType;
  1450. }
  1451. console.log(_PackageTreeData);
  1452. $modal.packageTree({
  1453. data: _PackageTreeData,
  1454. offset: isOffset,
  1455. customMenu: menu,
  1456. customMenuBefore: menuFun,
  1457. flowDetailFun: packageMenuFuns['flow-d'],
  1458. settingFun: SettingFun
  1459. });
  1460. }
  1461. function RefreshPackage(data, $node, type) {
  1462. data = data || $.extend(true, {}, _refreshData);
  1463. $node = $node || _$refreshNode;
  1464. type = type || _refreshType;
  1465. $('#modal .main-box').packageTree('refresh',
  1466. {
  1467. data: data,
  1468. node: $node,
  1469. type: type
  1470. });
  1471. }
  1472. </script>
  1473. <!--格式化-->
  1474. <script id="formatter-script" type="text/javascript">
  1475. var icon = '<i class="fa fa-angle-double-right"></i>';
  1476. function TypeFormatter(v) {
  1477. var name = $('#hid-type option[value="' + v + '"]').text();
  1478. switch (v) {
  1479. case 0:
  1480. return '<span class="label label-danger">' + name + '</span>';
  1481. default:
  1482. return '<span class="label label-info">' + name + '</span>';
  1483. }
  1484. }
  1485. function CategoryFormatter(v) {
  1486. var name = $('#hid-category option[value="' + v + '"]').text();
  1487. switch (v) {
  1488. case '':
  1489. return '';
  1490. default:
  1491. return '<span class="label label-info">' + name + '</span>';
  1492. }
  1493. }
  1494. function EngineModelFormatter(v) {
  1495. var name = $('#hid-engineModel option[value="' + v + '"]').text();
  1496. switch (v) {
  1497. case '':
  1498. return '';
  1499. default:
  1500. return '<span class="label label-warning">' + name + '</span>';
  1501. }
  1502. }
  1503. function EvalModelFormatter(v) {
  1504. var name = $('#hid-evalModel option[value="' + v + '"]').text();
  1505. switch (v) {
  1506. case '':
  1507. return '';
  1508. default:
  1509. return '<span class="label label-info">' + name + '</span>';
  1510. }
  1511. }
  1512. function PackageFormatter(v, r) {
  1513. var name = $('#hid-packageState option[value="' + v + '"]').text();
  1514. switch (v) {
  1515. case @PackageStateDefinition.New:
  1516. return '<span class="label label-danger">' + name + '</span>';
  1517. case @PackageStateDefinition.Solidified:
  1518. var str = '<span class="label label-success">' + name + '</span>';
  1519. str += '<span class="table-action" style="margin-left:20px" onclick="PackageDetail(\'' +
  1520. r.id +
  1521. '\')">' +
  1522. icon +
  1523. ' 查看详情</span>';
  1524. return str;
  1525. default:
  1526. return '';
  1527. }
  1528. }
  1529. function FlowActionFormatter(v, r) {
  1530. return '<span class="table-action" style="margin-left:20px" onclick="PackageFlowDetail(\'' +
  1531. r.id +
  1532. '\')">' +
  1533. icon +
  1534. ' 查看详情</span>';
  1535. }
  1536. function SceneTypeFormatter(v) {
  1537. var name = $('#hid-sceneType option[value="' + v + '"]').text();
  1538. switch (v) {
  1539. case 1:
  1540. return '<span class="label label-danger">' + name + '</span>';
  1541. default:
  1542. return '<span class="label label-info">' + name + '</span>';
  1543. }
  1544. }
  1545. function GuideTypeFormatter(v) {
  1546. var name = $('#hid-guideType option[value="' + v + '"]').text();
  1547. switch (v) {
  1548. case 0:
  1549. return '<span class="label label-danger">' + name + '</span>';
  1550. default:
  1551. return '<span class="label label-info">' + name + '</span>';
  1552. }
  1553. }
  1554. function ResourceTypeFormatter(v) {
  1555. var name = $('#hid-resource-type option[value="' + v + '"]').text();
  1556. switch (v) {
  1557. case 1:
  1558. return '<span class="label label-danger">' + name + '</span>';
  1559. case 2:
  1560. return '<span class="label label-info">' + name + '</span>';
  1561. case 3:
  1562. return '<span class="label label-success">' + name + '</span>';
  1563. default:
  1564. return '<span class="label label-info">' + name + '</span>';
  1565. }
  1566. }
  1567. function PathFormatter(v) {
  1568. if (v) {
  1569. return '<a class="table-action" href="{0}" target="_blank">查看附件</a>'.format(v);
  1570. }
  1571. return '暂无附件';
  1572. }
  1573. </script>
  1574. }
  1575. <section style="display: none">
  1576. <select id="hid-type">
  1577. <option value=""></option>
  1578. </select>
  1579. <select id="hid-category">
  1580. @(Html.Raw(category))
  1581. </select>
  1582. <select id="hid-engineModel">
  1583. @(Html.Raw(engineModel))
  1584. </select>
  1585. <select id="hid-evalModel">
  1586. @(Html.Raw(evalModel))
  1587. </select>
  1588. <select id="hid-packageState">
  1589. @(Html.Raw(packageState))
  1590. </select>
  1591. <select id="hid-sceneType">
  1592. @(Html.Raw(sceneType))
  1593. </select>
  1594. <select id="hid-guideType">
  1595. @Html.Raw(guideType)
  1596. </select>
  1597. <select id="hid-resource-type">
  1598. @Html.Raw(resourceType)
  1599. </select>
  1600. @*@Html.DropDownList("hid-type", type)*@
  1601. </section>
  1602. @* <div class="round-box">
  1603. <div class="line-v"></div>
  1604. <div class="round-node start-node">高层火灾演练 场景</div>
  1605. </div>
  1606. <div class="round-box">
  1607. <div class="line-v"></div>
  1608. <div class="block-node left">
  1609. <div class="round-setting">
  1610. <div class="title">轮次规则配置</div>
  1611. <div class="content">
  1612. <div class="setting score">
  1613. 轮次总分:<span class="value">500</span> <span class="pull-right">分</span>
  1614. </div>
  1615. <div class="setting rate">
  1616. 随机抽取概率:<span class="value">80</span><span class="pull-right">%</span>
  1617. </div>
  1618. <div class="setting count">
  1619. 演化情景流数:<span class="value">3</span><span class="pull-right">个</span>
  1620. </div>
  1621. <div class="setting guide">引导信息 <span>未配置</span></div>
  1622. <div class="setting prev">运行前事务 <span class="pull-right">未配置</span></div>
  1623. <div class="setting run">运行时事务 <span class="pull-right">未配置</span></div>
  1624. <div class="setting post">运行后事务 <span class="pull-right">未配置</span></div>
  1625. </div>
  1626. </div>
  1627. <div class="block-box obj-block-box">
  1628. <div class="title">客观情景块</div>
  1629. <div class="block-content">
  1630. <div class="setting-box">
  1631. <div class="setting guide">引导信息 <span class="pull-right">未配置</span></div>
  1632. <div class="setting prev">运行前事务 <span class="pull-right">未配置</span></div>
  1633. <div class="setting run">运行时事务 <span class="pull-right">未配置</span></div>
  1634. <div class="setting post">运行后事务 <span class="pull-right">未配置</span></div>
  1635. </div>
  1636. <div class="flow-box">
  1637. <div class="flow-info">
  1638. <div class="flow-name no-select">情景流1</div>
  1639. <div class="flow-setting" title="配置情景流"><i class="fa fa-cog"></i></div>
  1640. </div>
  1641. <div class="flow-info">
  1642. <div class="name no-select">情景流2</div>
  1643. <div class="flow-setting" title="配置情景流"><i class="fa fa-cog"></i></div>
  1644. </div>
  1645. <div class="flow-info">
  1646. <div class="name no-select">情景流3</div>
  1647. <div class="flow-setting" title="配置情景流"><i class="fa fa-cog"></i></div>
  1648. </div>
  1649. </div>
  1650. </div>
  1651. </div>
  1652. </div>
  1653. <div class="round-node">1</div>
  1654. <div class="block-node right">
  1655. <div class="tab-content-box">
  1656. <div class="title">演化情景块</div>
  1657. <div class="tab-content">
  1658. <div class="tab-pane fade text-left show active" id="ev-block-tab-1">
  1659. <div class="block-box evolution-block-box">
  1660. <div class="block-content">
  1661. <div class="setting-box">
  1662. <div class="setting guide">引导信息 <span class="pull-right">未配置</span></div>
  1663. <div class="setting prev">运行前事务 <span class="pull-right">未配置</span></div>
  1664. <div class="setting run">运行时事务 <span class="pull-right">未配置</span></div>
  1665. <div class="setting post">运行后事务 <span class="pull-right">未配置</span></div>
  1666. </div>
  1667. <div class="flow-box">
  1668. </div>
  1669. </div>
  1670. </div>
  1671. </div>
  1672. <div class="tab-pane text-left fade" id="ev-block-tab-2">
  1673. <div class="block-box evolution-block-box">
  1674. <div class="block-content">
  1675. <div class="setting-box">
  1676. <div class="setting guide">引导信息 <span class="pull-right">未配置</span></div>
  1677. <div class="setting prev">运行前事务 <span class="pull-right">未配置</span></div>
  1678. <div class="setting run">运行时事务 <span class="pull-right">未配置</span></div>
  1679. <div class="setting post">运行后事务 <span class="pull-right">未配置</span></div>
  1680. </div>
  1681. <div class="flow-box">
  1682. </div>
  1683. </div>
  1684. </div>
  1685. </div>
  1686. </div>
  1687. </div>
  1688. <div class="tab-box">
  1689. <div class="title">情景块集合 <i title="添加演化情景流块" class="icon far fa-plus-square"></i></div>
  1690. <ul class="nav nav-tabs flex-column">
  1691. <li class="nav-item">
  1692. <a class="nav-link active" data-toggle="pill" href="#ev-block-tab-1" role="tab">演化情景块 1</a>
  1693. </li>
  1694. <li class="nav-item">
  1695. <a class="nav-link" data-toggle="pill" href="#ev-block-tab-2" role="tab">演化情景块 2</a>
  1696. </li>
  1697. </ul>
  1698. </div>
  1699. </div>
  1700. </div>
  1701. <div class="round-box">
  1702. <div class="line-v"></div>
  1703. <div class="round-node">END</div>
  1704. </div> *@