Create.cshtml 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. @using IwbZero.ToolCommon.StringModel
  2. @using WeOnlineApp.Configuration
  3. @using WeOnlineApp.Helpers
  4. @using WeOnlineApp.TrainingCamp.Dto
  5. @{
  6. Layout = "~/Views/Shared/Layout/_Layout.Play.cshtml";
  7. ViewBag.Title = "创建演练";
  8. CampDto camp = ViewBag.Camp;
  9. }
  10. <link href="~/Content/Css/input.min.css" rel="stylesheet" />
  11. <style>
  12. #form {
  13. width: 100%;
  14. padding: 20px 10px;
  15. }
  16. form label.error {
  17. top: 8px;
  18. left: auto;
  19. }
  20. .float-label {
  21. color: var(--mainColor);
  22. font-weight: 600;
  23. }
  24. .controls input[type="text"], .controls textarea, .controls select {
  25. border: 1px solid var(--mainColor);
  26. background-color: var(--mainBgColor);
  27. }
  28. .role-box {
  29. width: 100%;
  30. border: 1px solid var(--mainColor);
  31. padding: 15px 10px 0;
  32. background-color: var(--mainBgColor);
  33. position: relative;
  34. margin-bottom: 20px;
  35. }
  36. .role-box .role-label {
  37. width: auto;
  38. position: absolute;
  39. top: -16px;
  40. left: 7px;
  41. color: var(--mainColor);
  42. background-color: var(--mainBgColor);
  43. font-size: 16px;
  44. display: inline-block;
  45. padding: 4px 10px;
  46. font-weight: 400;
  47. transition: color .3s,top .3s,background-color .8s;
  48. }
  49. .iwb-checkbox.iwb-green {
  50. color: var(--mainColor);
  51. }
  52. </style>
  53. @{
  54. }
  55. <div class="row box-content">
  56. <div class="col-sm-6">
  57. <div class="box" style="height:calc(100vh - 20px)">
  58. <div class="box-header">
  59. <span>创建演练</span>
  60. <div class="back-btn">
  61. <button type="button" class="btn btn-outline-success btn-sm mr-3" style="width: 80px;" onclick="Study()">预演学习</button>
  62. <button type="button" class="btn btn-outline-light btn-sm" style="width: 80px;" onclick="Back()">返回课程</button>
  63. </div>
  64. </div>
  65. <div class="box-body">
  66. <form id="form">
  67. <div class="row">
  68. <div class="controls">
  69. <input type="text" id="name" class="float-label required" name="name" autocomplete="off">
  70. <label for="name"><i class="fa fa-edit"></i>&nbsp;&nbsp;演练名称</label>
  71. </div>
  72. <div class="controls">
  73. <i class="fa fa-sort"></i>
  74. <select id="playModel" class="float-label required" autocomplete="off">
  75. <option value="" selected=""></option>
  76. <option value="@(CampPlayModelDefinition.Team)">团队合作演练</option>
  77. <option value="@(CampPlayModelDefinition.Single)">单人演练</option>
  78. </select>
  79. <label for="playModel"><i class="fa fa-user"></i>&nbsp;&nbsp;演练模式</label>
  80. </div>
  81. <div class="controls">
  82. <i class="fa fa-sort"></i>
  83. <select id="isPublic" class="float-label required" autocomplete="off">
  84. <option value="" selected=""></option>
  85. <option value="false">私有</option>
  86. <option value="true">公开</option>
  87. </select>
  88. <label for="isPublic"><i class="fa fa-lock"></i>&nbsp;&nbsp;是否公开</label>
  89. </div>
  90. </div>
  91. <div class="row">
  92. <div class="role-box">
  93. <label class="role-label" for="isPublic"><i class="fa fa-users"></i>&nbsp;&nbsp;演练角色</label>
  94. <div class="row">
  95. @if (camp.AssessRoleNames.IsNotEmpty())
  96. {
  97. //PlayRoleNames
  98. var arr = camp.AssessRoleNames.Split(',');
  99. foreach (var roleName in arr)
  100. {
  101. <div class="col-sm-4"><label class="iwb-checkbox iwb-green"><input type="checkbox" data-role-no="@(roleName)" checked="checked" class="assess-role" name="assess-role" value="@(roleName)"><span></span>@(roleName)</label></div>
  102. }
  103. }
  104. </div>
  105. </div>
  106. </div>
  107. <div class="row">
  108. <button type="button" class="btn btn-info btn-block" onclick="Create()" style="border-radius: 0;padding:10px">创建演练</button>
  109. </div>
  110. </form>
  111. </div>
  112. </div>
  113. </div>
  114. <div class="col-sm-6">
  115. @Html.Partial("~/Views/Play/_CampDetail.cshtml", camp)
  116. </div>
  117. </div>
  118. @using (Html.BeginScripts())
  119. {
  120. <script>
  121. $(function() {
  122. InputFloatLabel(".float-label");
  123. $('#name').val('@(camp.Name)-@(AbpSession.RealName)-@(DateTime.Now.ToString("yyyyMMdd"))').focus();
  124. $('#playModel').val('@(CampPlayModelDefinition.Single)').focus();
  125. $('#isPublic').val('false').focus();
  126. });
  127. function Study() {
  128. window.location.href = "@Url.Action("Study","Play")/@(camp.Id)";
  129. }
  130. function Create() {
  131. var flag = $.formValidate($('#form'),
  132. {
  133. errorPlacement: function (error, element) {
  134. if (element.parent().find('label.error').length === 0) {
  135. element.before(error);
  136. }
  137. element.focus();
  138. }
  139. });
  140. if (flag) {
  141. var roles = [];
  142. $('#form .assess-role').each(function() {
  143. if ($(this).is(":checked")) {
  144. roles.push($(this).data("role-no"));
  145. }
  146. });
  147. if (roles.length <= 0) {
  148. abp.message.warn("请至少选择一个角色!");
  149. return;
  150. }
  151. var data = {
  152. campNo:'@(camp.Id)',
  153. name:$('#form #name').val(),
  154. playModel: $('#form #playModel').val(),
  155. isPublic: $('#form #isPublic').val(),
  156. playRoleNames: roles.join(",")
  157. };
  158. $.iwbAjax4({
  159. url: abp.appUrl + "/CampPlay/CreatePlay",
  160. data:data,
  161. success: function(res) {
  162. if (res) {
  163. window.open("/play/run/" + res);
  164. }
  165. },
  166. error: function (error) {
  167. if (error.details) {
  168. return abp.message.error(error.details, error.message);
  169. } else {
  170. return abp.message.error(error.message || abp.ajax.defaultError.message);
  171. }
  172. }
  173. });
  174. }
  175. }
  176. </script>
  177. }