Camp.cshtml 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648
  1. @using IwbZero.IwbDataQuery
  2. @using IwbZero.ToolCommon.StringModel
  3. @using WeApp.Configuration
  4. @using WeApp.Authorization
  5. @using WeApp.Views.Shared.Modals
  6. @using WeApp.Views.Shared.SearchForm
  7. @using WeApp.Views.Shared.Table
  8. @using WeEngine.Enum
  9. @{
  10. ViewBag.Title = "演练培训营管理";
  11. string activeMenu = PermissionNames.PagesTrainMgCampMg; //The menu item will be active for this page.
  12. ViewBag.ActiveMenu = activeMenu;
  13. string auditState = ViewBag.AutidState,
  14. state = ViewBag.State,
  15. stuHelp = ViewBag.SthHelp,
  16. variableType = IwbDataType.GetDataTypeSelectStr();
  17. var searchForm = new SearchFormViewModel(new List<SearchItem>()
  18. {
  19. new SearchItem("name","培训营名称"),
  20. new SearchItem("packageName","方案包名称"),
  21. new SearchItem("campState","方案包状态",FieldType.I).SetSelectItem(state),
  22. new SearchItem("planDate","计划日期",FieldType.D),
  23. });
  24. var table = new TableViewModel(IwbConsts.ApiAppUrl + "Camp/GetAll", activeMenu, searchForm)
  25. .SetFields(new List<FieldItem>()
  26. {
  27. new FieldItem("name", "培训营名称"),
  28. new FieldItem("packageName", "方案包名称"),
  29. new FieldItem("scoreRule", "评分规则"),
  30. new FieldItem("campState", "方案包状态","StateFormatter").SetWidth(100),
  31. new FieldItem("roundScore", "每轮总分").SetWidth(100),
  32. new FieldItem("planDate", "计划日期","DateTimeFormatter").SetWidth(200),
  33. new FieldItem("", "操作","ActionFormatter").SetWidth(200),
  34. });
  35. var input = new ModalBodyViewModel(new List<Input>()
  36. {
  37. new InputHide("id"),
  38. new InputHide("packageName"),
  39. new InputHide("engineModelType"),
  40. new Input("name", "培训营名称"),
  41. new Input("packageNo", "方案包编号").SetSelectOptions(""),
  42. new Input("address", "培训地点"),
  43. new InputDateTime("planDate", "计划日期"),
  44. new InputNumber("roundScore", "每轮总分").SetMin(100),
  45. new InputNumber("maxRoundMinute", "每轮时长").SetMin(1),
  46. //new Input("scoreRule", "评分规则",@class:"expression").SetHelp("请以@分隔 [系统评分(权重|总分),专家评分(权重|总分),电话评分(权重|总分)] (例: 7|500@2|10@1|100)"),
  47. //new Input("campState", "审核状态").SetSelectOptions(auditState),
  48. //new InputTextarea("description", "培训目标").SetNotRequired(),
  49. });
  50. var input2 = new ModalBodyViewModel(new List<Input>()
  51. {
  52. //new InputNumber("roundScore", "每轮总分").SetMin(100),
  53. //new InputNumber("maxRoundMinute", "每轮时长").SetMin(1),
  54. new Input("scoreRule", "评分规则",@class:"expression").SetHelp("请以@分隔 [系统评分(权重|总分),专家评分(权重|总分),电话评分(权重|总分)] (例: 7|500@2|10@1|100)"),
  55. new Input("campState", "审核状态").SetSelectOptions(auditState),
  56. new Input("stuHelp", "学员提示").SetSelectOptions(stuHelp,true).SetNotRequired(),
  57. new InputTextarea("description", "培训目标").SetNotRequired(),
  58. });
  59. }
  60. @section css{
  61. }
  62. @Html.Partial("Table/_Table", table)
  63. @section modal{
  64. <!--Main Modal-->
  65. <section>
  66. <div class="modal fade show" id="modal" tabindex="-1" aria-modal="true">
  67. <div class="modal-dialog modal-lg" style="margin-top: 190.5px;">
  68. <div class="modal-content">
  69. @Html.Partial("Modals/_ModalHeader", new ModalHeaderViewModel("培训营"))
  70. <div class="modal-body" style="padding: 0">
  71. <form class="form-horizontal " id="form" novalidate="novalidate" style="padding: 0">
  72. <div class="card card-primary card-outline card-outline-tabs" style="margin-bottom: 0; border-top: 0; ">
  73. <div class="card-header p-0 border-bottom-0">
  74. <ul class="nav nav-tabs" role="tablist">
  75. <li class="nav-item">
  76. <a class="nav-link active" id="tab-base" data-toggle="pill" href="#tab-content-base" role="tab">基础信息</a>
  77. </li>
  78. <li class="nav-item">
  79. <a class="nav-link" data-toggle="pill" href="#tab-content-base2" role="tab">扩展信息</a>
  80. </li>
  81. </ul>
  82. </div>
  83. <div class="card-body">
  84. <div class="tab-content" id="scene-tabContent">
  85. <div class="tab-pane fade show active" id="tab-content-base" role="tabpanel">
  86. @Html.Partial("Modals/_ModalInput", input)
  87. </div>
  88. <div class="tab-pane fade" id="tab-content-base2" role="tabpanel">
  89. @Html.Partial("Modals/_ModalInput", input2)
  90. </div>
  91. </div>
  92. </div>
  93. </div>
  94. </form>
  95. </div>
  96. @Html.Partial("Modals/_ModalFooter", "0")
  97. </div>
  98. </div>
  99. </div>
  100. </section>
  101. }
  102. @section scripts
  103. {
  104. <script type="text/javascript">
  105. jQuery.validator.addMethod("expression",
  106. function(value, element) {
  107. var tel = /^\d{1,}\|\d{1,}@@+\d{1,}\|\d{1,}@@+\d{1,}\|\d{1,}$/;
  108. return (tel.test(value));
  109. },
  110. "请正确填写表达式!");
  111. var $table;
  112. $(function() {
  113. $table = LoadTable();
  114. var packageSettingStr =
  115. '<div style="margin: 0px 20px 10px;"><button type="button" class="btn btn-sm btn-block btn-success" id="package-btn" onclick="PackageSetting(\'{0}\')">方案包配置</button></div>';
  116. $('#modal #packageNo').off('change.package').on('change.package',
  117. function() {
  118. $('#modal #packageName').val('');
  119. $('#modal #engineModelType').val('');
  120. $('#modal #package-btn').remove();
  121. _PackageSetting = null;
  122. var packageNo = $('#modal #packageNo').val();
  123. if (packageNo) {
  124. GetPackageSetting(packageNo);
  125. $('#modal #packageName').val($('#modal #packageNo option:selected').text());
  126. $('#modal #engineModelType').val($('#modal #packageNo option:selected').data('model-type'));
  127. $(this).closest('.form-group').after(packageSettingStr.format(packageNo));
  128. }
  129. });
  130. var funs = window.iwbfuns || { none: function() { console.log("No type"); } };
  131. funs["btnCreate"] = function() {
  132. $('#modal #package-btn').remove();
  133. _PackageSetting = null;
  134. $('#tab-base').tab('show');
  135. $.iwbAjax4({
  136. url: abp.appUrl + 'Camp/GetPackageSelectStr',
  137. block: true,
  138. success: function(res) {
  139. $('#modal #packageNo').html(res).select2();
  140. BtnCreate({
  141. data: { id: "", scoreRule:'7|500@2|10@1|100', campState: '@(CampStateDefinition.New)' },
  142. disabled: 'campState',
  143. dataFun: GetSaveData
  144. });
  145. }
  146. });
  147. }
  148. funs["btnUpdate"] = function() {
  149. var row = $table.bootstrapTable('getSelections')[0];
  150. $('#modal #package-btn').remove();
  151. if (row) {
  152. $('#tab-base').tab('show');
  153. if (row.campState == @(CampStateDefinition.New) || row.campState == @(CampStateDefinition.Audit)) {
  154. $('#modal #packageNo').closest('.form-group').after(packageSettingStr.format(row.packageNo));
  155. _PackageSetting = null;
  156. $.iwbAjax4({
  157. url: abp.appUrl + 'Camp/GetPackageSelectStr',
  158. block: true,
  159. success: function(res) {
  160. $('#modal #packageNo').html(res).select2();
  161. BtnUpdate({
  162. disabled: "",
  163. dataFun: GetSaveData,
  164. shownAfter: function() {
  165. GetPackageSetting(row.packageNo);
  166. GetStuHelp(row.id);
  167. }
  168. },
  169. row);
  170. }
  171. });
  172. } else {
  173. abp.message.warn("培训营已运行不能再修改!");
  174. }
  175. } else {
  176. abp.message.warn(abp.localization.iwbZero('SelectRecordOperation'));
  177. }
  178. };
  179. funs["btnGroup"] = function(url) {
  180. var row = $table.bootstrapTable('getSelections')[0];
  181. if (row) {
  182. $.iwbAjax4({
  183. url: abp.appUrl + 'Camp/CheckCampGroup?no=' + row.id,
  184. isAlert: false,
  185. success: function(res) {
  186. if (res) {
  187. window.open(res, "_blank");
  188. } else {
  189. $(document).iwbModal('create',
  190. {
  191. url: url,
  192. modal: 'modal-group',
  193. modaltitle: '分组管理',
  194. data: { campNo: row.id, count: 1 },
  195. modalBody:
  196. '<form style="margin-top:10px"><input class="form-control" id="campNo" name="campNo" type="hidden"><div class="form-group row"><label class=" iwb-label iwb-label-sm iwb-label-required" for="count">分组数量</label><div class=""><div class="input-group input-group-sm "><input class="form-control required number" id="count" name="count" min="1" type="number" placeholder="请输入分组数量..."></div></div></div></form>',
  197. success: function(res) {
  198. if (res) {
  199. window.open(res, "_blank");
  200. }
  201. }
  202. });
  203. }
  204. }
  205. });
  206. } else {
  207. abp.message.warn(abp.localization.iwbZero('SelectRecordOperation'));
  208. }
  209. }
  210. funs["btnAttach"] = function() {
  211. var row = $table.bootstrapTable('getSelections')[0];
  212. if (row) {
  213. $.iwbAjax1({
  214. url: abp.appUrl + 'Camp/CheckAttach?no=' + row.id,
  215. isAlert: false,
  216. success: function(res) {
  217. if (res) {
  218. window.open(res, "_blank");
  219. }
  220. }
  221. });
  222. } else {
  223. abp.message.warn(abp.localization.iwbZero('SelectRecordOperation'));
  224. }
  225. }
  226. funs["btnTag"] = function(url) {
  227. var row = $table.bootstrapTable('getSelections')[0];
  228. if (row) {
  229. $.iwbAjax4({
  230. url: abp.appUrl + 'Camp/GetBehaviorTags?no=' + row.id,
  231. isAlert: false,
  232. success: function(res) {
  233. if (res) {
  234. TagModal(res, url);
  235. }
  236. }
  237. });
  238. } else {
  239. abp.message.warn(abp.localization.iwbZero('SelectRecordOperation'));
  240. }
  241. }
  242. funs["btnRole"] = function(url) {
  243. var row = $table.bootstrapTable('getSelections')[0];
  244. if (row) {
  245. $.iwbAjax4({
  246. url: abp.appUrl + 'Camp/GetGroupRoles?no=' + row.id,
  247. isAlert: false,
  248. success: function(res) {
  249. if (res) {
  250. GroupRoleModal(res, url);
  251. }
  252. }
  253. });
  254. } else {
  255. abp.message.warn(abp.localization.iwbZero('SelectRecordOperation'));
  256. }
  257. }
  258. });
  259. function GetSaveData() {
  260. _PackageSetting = _PackageSetting || {};
  261. var data = $.formSerialize($('#modal #form'));
  262. //data.roundScore = _PackageSetting.roundScore;
  263. data.assessRoleNames = _PackageSetting.assessRoleNames;
  264. data.assessAuto = _PackageSetting.assessAuto;
  265. data.variable = _PackageSetting.variable;
  266. return data;
  267. }
  268. function GetStuHelp(id) {
  269. $.iwbAjax4({
  270. url: abp.appUrl + 'query/GetStuHelpStrByCamp?no=' + id ,
  271. success: function(res) {
  272. if (res) {
  273. $('#modal #stuHelp').val(res).select2();
  274. }
  275. }
  276. });
  277. }
  278. </script>
  279. <script id="PackageSetting-S">
  280. var _PackageSetting = null;
  281. function PackageSetting() {
  282. if (_PackageSetting) {
  283. console.log("qq",_PackageSetting)
  284. PackageSettingModal(_PackageSetting);
  285. } else {
  286. abp.message.warn('未发现配置信息!');
  287. }
  288. }
  289. function GetPackageSetting(no) {
  290. var id = $('#modal #id').val() || 'none';
  291. $.iwbAjax4({
  292. url: abp.appUrl + 'camp/GetPackageSetting?id=' + id + '&packageNo=' + no,
  293. success: function(res) {
  294. if (res) {
  295. _PackageSetting = res;
  296. }
  297. }
  298. });
  299. }
  300. function PackageSettingModal(data) {
  301. var $body = FormatterPackageSettingBody(data);
  302. $(document).iwbModal('create',
  303. {
  304. modal: 'modal-package-setting',
  305. modaltitle: "方案包配置",
  306. modalBody: $body,
  307. save: SavePackageSetting
  308. });
  309. }
  310. function FormatterPackageSettingBody(data) {
  311. var $form = $('<form>', { 'css': { 'padding': '10px' } });
  312. //$form.append(
  313. // '<div class="form-group row"><label class=" iwb-label iwb-label-sm" for="roundScore">每轮总分</label><div class=""><div class="input-group input-group-sm "><input class="form-control number" id="roundScore" name="roundScore" type="text" placeholder="请输入每轮总分..." style="" aria-required="true"></div></div></div>');
  314. //if (data.roundScore) {
  315. // $form.find('#roundScore').val(data.roundScore);
  316. //}
  317. $form.append(FormatterVariableBox(data.variable));
  318. $form.append(FormatterRoleBox(data.allRoles, data.assessRoleNames, data.assessAuto));
  319. return $form;
  320. }
  321. function FormatterRoleBox(allRoles, assessRoleNames, assessAuto) {
  322. var temp =
  323. '<label class="iwb-checkbox iwb-{3}"><input type="checkbox" id="role-{0}" data-role-no="{0}" data-role-name="{1}" name="assess-role{4}" value="{0}" {2}><span></span>{1}</label>';
  324. var $roleBox = $('<div>',
  325. { 'class': 'dynamic-box row', 'css': { 'margin': '10px', 'paddingBottom': '0' } });
  326. var roleArr = assessRoleNames ? assessRoleNames.split(',') : undefined;
  327. var modelType = $('#modal #engineModelType').val();
  328. if (allRoles) {
  329. allRoles.forEach(function(v) {
  330. var checkedStr = "";
  331. if (roleArr && roleArr.indexOf(v.roleName) >= 0) {
  332. checkedStr = "checked";
  333. }
  334. var $role = $('<div>', { 'class': 'col-sm-4' }).append(temp.format(v.roleName,
  335. v.roleName + "(" + v.rolePer + "%)",
  336. checkedStr,
  337. 'green',""));
  338. if (modelType == @(ModelType.IndependentTeam.ToInt()) ||
  339. modelType == @(ModelType.Independent.ToInt())) {
  340. $role.on('click',
  341. function(e) {
  342. e.preventDefault();
  343. e.stopPropagation();
  344. var flag = $(this).find('input').is(':checked');
  345. $(this).closest('.role-box').find('input').prop('checked', false);
  346. $(this).find('input').prop('checked', !flag);
  347. });
  348. }
  349. $roleBox.append($role);
  350. });
  351. }
  352. var $info = $('<div>',
  353. { 'class': 'iwb-info-box iwb-sm', 'id': 'role-box', 'css': { 'padding': '0 10px' } });
  354. $info.append('<div class="box-header">考核角色<small>(不配置即视为关闭关联角色)</small></div>');
  355. $info.append($roleBox);
  356. $info.append($('<div>',
  357. {
  358. 'class': 'role-auto',
  359. 'css': { 'border': 'none', 'textAlign': 'right', 'marginRight': '0 30px 0 0' }
  360. })
  361. .append(temp.format('auto', '未考核角色自动满分', assessAuto != false ? "checked" : "", 'danger',"auto")));
  362. return $info;
  363. }
  364. function FormatterVariableBox(variableStr) {
  365. if (!variableStr) {
  366. return '';
  367. }
  368. var label = '<div class="dynamic-label col-sm-{0}"><label class="iwb-label">{1}</label></div >',
  369. $box = $('<div>', { 'class': 'dynamic-box', 'css': { 'margin': '10px' } }),
  370. $box1 = $('<div>', { 'class': 'row iwb-dynamic-box' }),
  371. $box2 = $('<div>', { 'class': 'row iwb-dynamic-box' });
  372. $box1.append(label.format('4', '变量'))
  373. .append(label.format('4', '类型'))
  374. .append(label.format('4', '默认值'));
  375. $box2.append(
  376. '<div class="col-sm-4"><div class="input-group input-group-sm"><input class="form-control required" name="variableId" placeholder="请输入变量" style="width: 100%" /></div></div><div class="col-sm-4"><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 style="display:none"><button class="btn btn-sm btn-block btn-add" type="button" onclick="AddDynamicBox(this)">增加</button></div>');
  377. $box.append($box1).append($box2);
  378. var variableArr = variableStr.split(',');
  379. for (var i = 0; i < variableArr.length; i++) {
  380. var str = variableArr[i];
  381. var arr = str.split(':');
  382. var $that = i === 0
  383. ? $box.find('.iwb-dynamic-box').eq(1)
  384. : AddDynamicBox($box.find('.iwb-dynamic-box').eq(1).find('.btn-add'));
  385. $that.find('.form-control[name="variableId"]').val(arr[0]).prop('disabled', true);
  386. $that.find('.form-control[name="variableType"]').val(arr[1].toLocaleLowerCase() || "string").select2()
  387. .prop('disabled', true);
  388. $that.find('.form-control[name="defaultValue"]').val(arr[2] || "");
  389. }
  390. var $info = $('<div>',
  391. { 'class': 'iwb-info-box iwb-sm', 'id': 'variable-box', 'css': { 'padding': '0 10px' } });
  392. $info.append('<div class="box-header">全局变量</div>');
  393. $info.append($box);
  394. return $info;
  395. }
  396. function SavePackageSetting() {
  397. var $modal = $('#modal-package-setting');
  398. _PackageSetting = _PackageSetting || {};
  399. //_PackageSetting.roundScore = $modal.find('#roundScore').val();
  400. var roleNames = '';
  401. $modal.find('#role-box input[name="assess-role"]:checked').each(function() {
  402. if ($(this).is(':checked')) {
  403. roleNames += (roleNames === "" ? "" : ",") + $(this).data('role-no');
  404. }
  405. });
  406. _PackageSetting.assessAuto = $modal.find('#role-auto').is(':checked');
  407. _PackageSetting.assessRoleNames = roleNames;
  408. var variableStr = '';
  409. $modal.find('#variable-box').find('.iwb-dynamic-box').each(function() {
  410. var name = $(this).find('.form-control[name="variableId"]').val();
  411. if (name) {
  412. var type = $(this).find('.form-control[name="variableType"]').val() || 'string';
  413. var value = $(this).find('.form-control[name="defaultValue"]').val() || '';
  414. variableStr += (variableStr == '' ? '' : ',') + '{0}:{1}:{2}'.format(name, type, value);
  415. }
  416. });
  417. _PackageSetting.variable = variableStr;
  418. $modal.modal('hide');
  419. }
  420. </script>
  421. <script id="tag-s">
  422. function TagModal(data, url) {
  423. var $body = FormatterTagBody(data);
  424. $(document).iwbModal('create',
  425. {
  426. modal: 'modal-tag',
  427. modaltitle: "筛选行为标签",
  428. modalBody: $body,
  429. save: function () {
  430. SaveTag(url);
  431. }
  432. });
  433. }
  434. function FormatterTagBody(data) {
  435. var $form = $('<form>', { 'css': { 'padding': '10px' } });
  436. $form.append('<input class="form-control" id="campNo" name="campNo" type="hidden">');
  437. $form.find("#campNo").val(data.campNo);
  438. var temp =
  439. '<label class="iwb-checkbox iwb-{3}"><input type="checkbox" id="tag-{0}" data-tag-no="{0}" name="tag" value="{0}" {2}><span></span>{1}</label>';
  440. var $tagBox = $('<div>', { 'class': 'dynamic-box row', 'css': { 'margin': '10px', 'paddingBottom': '0' } });
  441. var tagArr = data.behaviorTagNos ? data.behaviorTagNos.split(',') : undefined;
  442. if (data.allTags) {
  443. data.allTags.forEach(function (v) {
  444. var checkedStr = "";
  445. if (tagArr && tagArr.indexOf(v.tagNo) >= 0) {
  446. checkedStr = "checked";
  447. }
  448. var $tag = $('<div>', { 'class': 'col-sm-3' })
  449. .append(temp.format(v.tagNo, v.tagName, checkedStr, 'green'));
  450. $tagBox.append($tag);
  451. });
  452. }
  453. var $info = $('<div>', { 'class': 'iwb-info-box iwb-sm', 'id': 'tag-box', 'css': { 'padding': '0 10px' } });
  454. $info.append('<div class="box-header">评估标签</div>');
  455. $info.append($tagBox);
  456. $form.append($info);
  457. return $form;
  458. }
  459. function SaveTag(url) {
  460. var $modal = $('#modal-tag'), data = { campNo: $modal.find('#campNo').val() };
  461. var tagNos = '';
  462. $modal.find('#tag-box input[name="tag"]:checked').each(function () {
  463. if ($(this).is(':checked')) {
  464. tagNos += (tagNos === "" ? "" : ",") + $(this).data('tag-no');
  465. }
  466. });
  467. data.behaviorTagNos = tagNos;
  468. $.iwbAjax1({
  469. url: url,
  470. data: data,
  471. success: function () {
  472. $modal.modal('hide');
  473. }
  474. });
  475. }
  476. </script>
  477. <script id="groupRole-s">
  478. function GroupRoleModal(data, url) {
  479. var $body = FormatterGroupRoleBody(data);
  480. $(document).iwbModal('create',
  481. {
  482. modal: 'modal-group-role',
  483. modaltitle: "筛选角色组预案",
  484. modalBody: $body,
  485. save: function () {
  486. SaveGroupRole(url);
  487. }
  488. });
  489. }
  490. function FormatterGroupRoleBody(data) {
  491. var $form = $('<form>', { 'css': { 'padding': '10px' } });
  492. $form.append('<input class="form-control" id="campNo" name="campNo" type="hidden">');
  493. $form.find("#campNo").val(data.campNo);
  494. var temp =
  495. '<label class="iwb-checkbox iwb-{3}"><input type="checkbox" id="group-{0}" data-group-no="{0}" name="group" value="{0}" {2}><span></span>{1}</label>';
  496. var $groupBox = $('<div>',
  497. { 'class': 'dynamic-box row', 'css': { 'margin': '10px', 'paddingBottom': '0' } });
  498. //var groupArr = data.groupNos ? data.groupNos.split(',') : undefined;
  499. if (data.allGroups) {
  500. data.allGroups.forEach(function (v) {
  501. var checkedStr = "";
  502. if (data.groupNos && data.groupNos.indexOf(v.id) >= 0) {
  503. checkedStr = "checked";
  504. }
  505. var $group = $('<div>', { 'class': 'col-sm-3' })
  506. .append(temp.format(v.id, v.roleGroupName, checkedStr, 'green'));
  507. $groupBox.append($group);
  508. });
  509. }
  510. var $info = $('<div>',
  511. { 'class': 'iwb-info-box iwb-sm', 'id': 'group-box', 'css': { 'padding': '0 10px' } });
  512. $info.append('<div class="box-header">角色组预案</div>');
  513. $info.append($groupBox);
  514. $form.append($info);
  515. return $form;
  516. }
  517. function SaveGroupRole(url) {
  518. var $modal = $('#modal-group-role'), data = { campNo: $modal.find('#campNo').val() };
  519. var groupNos = [];
  520. $modal.find('#group-box input[name="group"]:checked').each(function () {
  521. if ($(this).is(':checked')) {
  522. groupNos.push($(this).data('group-no'));
  523. }
  524. });
  525. data.groupNos = groupNos;
  526. $.iwbAjax1({
  527. url: url,
  528. data: data,
  529. success: function () {
  530. $modal.modal('hide');
  531. }
  532. });
  533. }
  534. </script>
  535. <!--格式化-->
  536. <script id="formatter-script" type="text/javascript">
  537. var icon = '<i class="fa fa-angle-double-right"></i>';
  538. function TypeFormatter(v) {
  539. var name = $('#hid-type option[value="' + v + '"]').text();
  540. switch (v) {
  541. case 0:
  542. return '<span class="label label-danger">' + name + '</span>';
  543. default:
  544. return '<span class="label label-info">' + name + '</span>';
  545. }
  546. }
  547. function ActionFormatter(v, r) {
  548. var temp = '<a class="table-action" href="{1}" target="_blank">' + icon + '{0}</a>';
  549. var str = '';
  550. if (r.campState == @(CampStateDefinition.Audit) || r.campState == @(CampStateDefinition.Run)) {
  551. str += temp.format("演练实施", '/Train/Eval/{0}'.format(r.id));
  552. }
  553. if (r.campState == @(CampStateDefinition.Run)) {
  554. @if (IsGranted(PermissionNames.PagesTrainMgPortraitMgGenerate))
  555. {
  556. <text>
  557. str += temp.format("生成画像", '/Train/GeneratePortrait/{0}'.format(r.id));
  558. </text>
  559. }
  560. }
  561. if (r.campState == @(CampStateDefinition.End)) {
  562. @if (IsGranted(PermissionNames.PagesTrainMgPortraitMgGenerate))
  563. {
  564. <text>
  565. str += temp.format("生成画像", '/Train/GeneratePortrait/{0}'.format(r.id));
  566. </text>
  567. }
  568. else if (IsGranted(PermissionNames.PagesTrainMgPortraitMgQuery))
  569. {
  570. <text>
  571. str += temp.format("演练画像", '/Train/Portrait/{0}'.format(r.id));
  572. </text>
  573. }
  574. }
  575. if (!str) {
  576. str += '<span class="table-action">暂无操作</span>';
  577. }
  578. return str;
  579. }
  580. function StateFormatter(v) {
  581. var name = $('#hid-state option[value="' + v + '"]').text();
  582. switch (v) {
  583. case @(CampStateDefinition.New):
  584. return '<span class="label label-info">' + name + '</span>';
  585. case @(CampStateDefinition.Audit):
  586. return '<span class="label label-success">' + name + '</span>';
  587. case @(CampStateDefinition.Run):
  588. return '<span class="label label-iwb">' + name + '</span>';
  589. case @(CampStateDefinition.Error):
  590. case @(CampStateDefinition.End):
  591. return '<span class="label label-danger">' + name + '</span>';
  592. default:
  593. return '<span class="label label-info">' + name + '</span>';
  594. }
  595. }
  596. </script>
  597. }
  598. <section style="display: none">
  599. <select id="hid-type">
  600. <option value=""></option>
  601. </select>
  602. <select id="hid-state">
  603. @(Html.Raw(state))
  604. </select>
  605. @*@Html.DropDownList("hid-type", type)*@
  606. </section>