_CmdLog.cshtml 9.0 KB

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