_CmdLog.cshtml 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265
  1. @using WeEngine.Enum
  2. @using WeOnlineApp.Configuration
  3. @using WeOnlineApp.Helpers
  4. @model WeOnlineApp.Models.Play.CampPlayModel
  5. @{
  6. string id = "cmd-log";
  7. string body = "<div class=\"log-box-body\"></div>";
  8. }
  9. <style>
  10. .log-box-body {
  11. padding-left: 3px;
  12. }
  13. .card-log {
  14. width: 100%;
  15. margin: 10px 0;
  16. border-radius: 0.5rem;
  17. --bg: var(--mc);
  18. }
  19. .card-log > .card-header {
  20. padding: 0 20px 0 0;
  21. position: relative;
  22. height: 32px;
  23. }
  24. .card-log > .card-header .card-title {
  25. position: absolute;
  26. top: 0;
  27. left: -3px;
  28. font-weight: bold;
  29. color: #fff;
  30. background: var(--bg);
  31. padding: 5px 10px;
  32. border-radius: .75rem 0 .75rem 0;
  33. max-width: 50%;
  34. display: flex;
  35. }
  36. .card-log > .card-header .card-title:before {
  37. position: absolute;
  38. content: "";
  39. width: 0;
  40. height: 0;
  41. border-right: 5px solid var(--bg);
  42. border-bottom: 5px solid transparent;
  43. bottom: -5px;
  44. left: 0;
  45. }
  46. .card-log > .card-header .card-title span {
  47. white-space: nowrap;
  48. line-height: 21px;
  49. font-size: 15px;
  50. }
  51. .card-log > .card-header .card-title span.scene-name {
  52. margin-left: 10px;
  53. padding-right: 5px;
  54. font-size: 12px;
  55. font-style: italic;
  56. font-weight: normal;
  57. overflow: hidden;
  58. text-overflow: ellipsis;
  59. }
  60. .card-log > .card-header > .card-tools {
  61. margin-top: 3px;
  62. }
  63. .card-log > .card-header > .card-tools > .btn {
  64. padding: 0 5px !important;
  65. font-size: 13px !important;
  66. line-height: 22px;
  67. }
  68. .card-log > .card-body {
  69. color: #8c91a8;
  70. text-align: center;
  71. padding: 10px;
  72. font-size: 13px;
  73. border-radius: 0 0 0.5rem 0.5rem;
  74. position: relative;
  75. text-indent: 2em;
  76. }
  77. .log-box-body .split-line {
  78. height: 0;
  79. border-bottom: 2px dashed var(--mc);
  80. margin: 10px 0;
  81. }
  82. </style>
  83. @Html.Partial("_Run/_AreaBox", $"决策指令区#{id}#{body}")
  84. @using (Html.BeginScripts())
  85. {
  86. <script id="log-script">
  87. var $cmdLogBody = $('#@id .log-box-body');
  88. function GetLogs() {
  89. $.iwbAjax5({
  90. url: abp.appUrl + 'Query/GetPlayLogs?no=@(Model.Play.Id)',
  91. success: res => {
  92. if (res && res.length) {
  93. res.forEach(v => { FormatterLog(v); });
  94. }
  95. }
  96. });
  97. }
  98. function FormatterLog(data,isNew) {
  99. if (data) {
  100. var btnStr , sceneName = GetSceneNameByPath(data.scenePath);//, imagePath = data.imagePath ? data.imagePath : '/Content/Image/user.png';
  101. if (data.logState == '@(LogStateDefinition.New)') {
  102. @{
  103. var disabled = Model.PlayUser!=null && Model.PlayUser.PlayerType == CampPlayerTypeDefinition.Creator ? "" : "disabled";
  104. }
  105. btnStr = `<button type="button" id="log_${data.id}" class="btn btn-sm btn-iwb log-state log-wait" onclick="SubmitCmd('${data.id}')" @(disabled)>等待下达</button>`;
  106. } else if (data.logState == '@(LogStateDefinition.Submit)' ||
  107. data.logState == '@(LogStateDefinition.Send)' ||
  108. data.logState == '@(LogStateDefinition.HasMatch)') {
  109. btnStr =
  110. `<button type="button" id="log_${data.id}" class="btn btn-sm btn-success log-state" disabled>已下达</button>`;
  111. } else {
  112. btnStr =
  113. `<button type="button" id="log_${data.id}" class="btn btn-sm btn-danger log-state" disabled>未下达</button>'`;
  114. }
  115. var str = `<div class="card card-log shadow-sm " id="log_${data.id}">
  116. <div class="card-header">
  117. <div class="card-title"><span>${data.role}</span><span class="scene-name">${sceneName}</span></div>
  118. <div class="card-tools">${btnStr}</div>
  119. </div>
  120. <div class="card-body">${data.word}</div>
  121. </div>`;
  122. if (str) {
  123. isNew ? $cmdLogBody.prepend(str) : $cmdLogBody.append(str);
  124. window.Scroll2Top($cmdLogBody.closest('.scroll-box'));
  125. }
  126. }
  127. }
  128. function GetSceneNameByPath(path) {
  129. var sceneName = '', $sceneBox = $('.card-scene[data-path="' + path + '"]');
  130. if ($sceneBox.length > 0) {
  131. sceneName = $sceneBox.data("name");
  132. }
  133. return sceneName;
  134. }
  135. function SubmitCmd(id) {
  136. var path = $('#@id #current-scene-path').val();
  137. if (path) {
  138. $.iwbAjax4({
  139. url: abp.appUrl + "/CampPlay/SubmitCmd?id=" + id + "&scenePath=" + path,
  140. success: function() {}
  141. });
  142. } else {
  143. abp.message.warn("请选择一个情景!");
  144. }
  145. }
  146. function DisabledLog() {
  147. $('.log-wait').prop('disabled', true).text('未下达').removeClass('log-wait');
  148. }
  149. function ChangeLog(word, style) {
  150. var arr = word.split('|');
  151. var $log = $('#log_' + arr[0] + ' .card-body');
  152. if ($log.length) {
  153. var text = $log.html(), text2 = text;
  154. if (arr[2]) {
  155. var arr2 = arr[2].split(',');
  156. arr2.forEach(function(v) {
  157. var reg = new RegExp(v, "g");
  158. var str = '<span class="{1} ml-1 mr-1">{0}</span>'.format(v, style);
  159. if (text2.indexOf(str) < 0) {
  160. text2 = text2.replace(reg, str);
  161. }
  162. });
  163. $log.html(text2);
  164. if (text != text2) {
  165. $.iwbAjax5({
  166. url: abp.appUrl + 'CampPlay/UpdateLog',
  167. data: { id: arr[0], Text: text2 }
  168. });
  169. }
  170. }
  171. }
  172. }
  173. iwbHub.client.getCmdLog = function(msg) {
  174. console.log('getCmdLog: ', msg);
  175. if (msg) {
  176. try {
  177. var data = JSON.parse(msg);
  178. if (data.no == '@Model.Play.Id') {
  179. FormatterLog(data,true);
  180. }
  181. } catch (e) {
  182. console.log('getCmdLog: ', e);
  183. }
  184. }
  185. };
  186. iwbHub.client.getCmdLogSubmit = function(msg) {
  187. console.log('getCmdLogSubmit: ', msg);
  188. if (msg) {
  189. try {
  190. var data = JSON.parse(msg);
  191. if (data.no == '@Model.Play.Id') {
  192. $cmdLogBody.find('#log_' + data.logId).html('已下达').removeClass('btn-iwb')
  193. .removeClass('log-wait').addClass('btn-success').prop('disabled', true)
  194. .closest('.card-log')
  195. .find('.scene-name').html(GetSceneNameByPath(data.scenePath));
  196. }
  197. } catch (e) {
  198. console.log('getCmdLogSubmit: ', e);
  199. }
  200. }
  201. };
  202. iwbHub.client.getMatchSuccess = function(msg) {
  203. console.log('getMatchSuccess: ', msg);
  204. if (msg) {
  205. try {
  206. var data = JSON.parse(msg);
  207. if (!data) {
  208. return;
  209. }
  210. var url = "", style = "";
  211. if (data.scoreType == @((int) BehaviorScoreType.Normal)) {
  212. style = "text-success";
  213. url = "/Content/Media/S4.mp3";
  214. } else if (data.scoreType == @((int) BehaviorScoreType.Negative)) {
  215. style = "text-danger";
  216. url = "/Content/Media/E2.mp3";
  217. } else if (data.scoreType == @((int) BehaviorScoreType.ImportantNegative)) {
  218. style = "text-danger text-bold";
  219. url = "/Content/Media/E6.mp3";
  220. }
  221. ChangeLog(data.word, style);
  222. window.PlayAudio(url, data.scoreType);
  223. } catch (e) {
  224. console.log('getMatchSuccess: ', e);
  225. }
  226. }
  227. };
  228. iwbHub.client.getDisabledLog = function(msg) {
  229. console.log('getDisabledLog: ', msg);
  230. if (msg) {
  231. try {
  232. var data = JSON.parse(msg);
  233. if (data.no == '@Model.Play.Id') {
  234. $cmdLogBody.prepend('<div class="split-line"></div>');
  235. DisabledLog();
  236. window.DisabledScene1();
  237. }
  238. } catch (e) {
  239. console.log('getDisabledLog: ', e);
  240. }
  241. }
  242. }
  243. </script>
  244. }