collection.js 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556
  1. define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefined, Backend, Table, Form) {
  2. var Controller = {
  3. index: function () {
  4. // 初始化表格参数配置
  5. Table.api.init({
  6. extend: {
  7. index_url: 'teacher/collection/index' + location.search,
  8. add_url: 'teacher/collection/add',
  9. edit_url: 'teacher/collection/edit',
  10. del_url: 'teacher/collection/del',
  11. multi_url: 'teacher/collection/multi',
  12. import_url: 'teacher/collection/import',
  13. table: 'teacher_collection',
  14. }
  15. });
  16. var table = $("#table");
  17. // 初始化表格
  18. table.bootstrapTable({
  19. url: $.fn.bootstrapTable.defaults.extend.index_url,
  20. pk: 'exam_collection_id',
  21. sortName: 'exam_collection_id',
  22. fixedColumns: true,
  23. fixedRightNumber: 1,
  24. singleSelect : true, //
  25. searchFormVisible:true,
  26. search:false,
  27. columns: [
  28. [
  29. {checkbox: true},
  30. {field: 'exam_collection_id', title: __('编号'),operate: false},
  31. {field: 'exam_collection_name', title: __('Exam_collection_name'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content},
  32. // {field: 'sim_type', title: __('Sim_type'),searchList:{"0001":"FZD04B型侦毒器","0002":"FZB006型毒剂报警器","0003":"防化兵用毒剂报警器"},formatter: Table.api.formatter.simtype},
  33. // {field: 'question_setting_method', title: __('Question_setting_method'),searchList:{"1":"系统随机","2":"教员自选","3":"任务自选"},formatter: Table.api.formatter.simmethod},
  34. {
  35. field: 'exam_collection_state',searchList:{"2":"打开","3":"关闭"},
  36. title: __('Exam_collection_state'),
  37. align: 'center',
  38. table: table,
  39. formatter: Table.api.formatter.collectonstate
  40. },
  41. // {field: 'task_id', title: __('Task_id')},
  42. {field: 'limit_duration', title: __('Limit_duration')},
  43. // {field: 'start_time', title: __('Start_time'), operate:false, addclass:'datetimerange', autocomplete:false},
  44. // {field: 'end_time', title: __('End_time'), operate:false, addclass:'datetimerange', autocomplete:false},
  45. // {field: 'create_user_id', title: __('Create_user_id')},
  46. {field: 'create_by', title: __('Create_by'), operate: 'LIKE'},
  47. // {field: 'qudui_count', title: __('区队数量'), operate: false},
  48. {field: 'xueyuan_count', title: __('应考人数'), operate: false},
  49. {field: 'yikao_count', title: __('已考人数'), operate: false},
  50. {field: 'createtime', title: __('Create_time'), operate:'RANGE', addclass:'datetimerange', autocomplete:false,formatter: Table.api.formatter.datetime},
  51. // {field: 'update_by', title: __('Update_by'), operate: 'LIKE'},
  52. // {field: 'update_time', title: __('Update_time'), operate:'RANGE', addclass:'datetimerange', autocomplete:false},
  53. // {field: 'remark', title: __('Remark'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content},
  54. {field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate,
  55. // formatter: Table.api.formatter.operate
  56. formatter: Table.api.formatter.buttons,
  57. buttons: [
  58. {
  59. name: 'dispatch',
  60. text: '编辑',
  61. icon: 'fa fa-pencil',
  62. title: '编辑',
  63. classname: 'btn btn-success btn-xs btn-magic btn-dialog',
  64. // extend: 'data-area=\'["85%","85%"]\'',
  65. url: 'teacher/collection/edit',
  66. },
  67. {
  68. name: 'dispatch',
  69. text: '进入考试',
  70. icon: 'fa fa-hand-pointer-o',
  71. title: '进入考试',
  72. visible: function (rr) {
  73. if(rr.exam_collection_state == 2){
  74. return true;
  75. }
  76. return false;
  77. },
  78. classname: 'btn btn-info btn-xs btn-magic btn-addtabs',
  79. url: 'teacher/exams/persent',
  80. },
  81. {
  82. name: 'dispatch',
  83. text: '查看学员',
  84. icon: 'fa fa-eye',
  85. title: '查看学员',
  86. visible: function (rr) {
  87. if(rr.user_count > 0){
  88. return true;
  89. }
  90. return false;
  91. },
  92. classname: 'btn btn-warning btn-xs btn-magic btn-dialog',
  93. extend: 'data-area=\'["85%","85%"]\'',
  94. url: 'teacher/collection/viewuser',
  95. },
  96. {
  97. name: 'dispatch',
  98. text: '添加学员',
  99. icon: 'fa fa-plus',
  100. title: '添加学员',
  101. classname: 'btn btn-success btn-xs btn-magic btn-dialog',
  102. extend: 'data-area=\'["85%","85%"]\'',
  103. url: 'teacher/collection/adduser',
  104. },
  105. {
  106. name: 'dispatch',
  107. text: '删除学员',
  108. icon: 'fa fa-pencil',
  109. title: '删除学员',
  110. visible: function (rr) {
  111. if(rr.user_count > 0){
  112. return true;
  113. }
  114. return false;
  115. },
  116. classname: 'btn btn-info btn-xs btn-magic btn-dialog',
  117. extend: 'data-area=\'["75%","75%"]\'',
  118. url: 'teacher/collection/edituser',
  119. },
  120. {
  121. name: 'dispatch',
  122. text: '删除',
  123. icon: 'fa fa-trash',
  124. title: '删除',
  125. classname: 'btn btn-danger btn-xs btn-magic btn-ajax',
  126. url: 'teacher/collection/del',
  127. confirm: '确定要删除吗?',
  128. success: function (data, ret) {
  129. $(".btn-refresh").trigger("click");
  130. },
  131. error: function (data, ret) {
  132. Layer.alert(ret.msg);
  133. return false;
  134. }
  135. }
  136. ],
  137. }
  138. ]
  139. ]
  140. });
  141. // 为表格绑定事件
  142. Table.api.bindevent(table);
  143. $(document).on('click', '.btn-start', function () {
  144. var ids = Table.api.selectedids(table);
  145. Fast.api.ajax({
  146. url: "teacher/collection/start/ids/"+ids,
  147. type: "post",
  148. }, function () {
  149. Layer.alert('开始成功');
  150. table.bootstrapTable('refresh');
  151. Layer.close(index);
  152. });
  153. });
  154. },
  155. viewuser: function () {
  156. // 初始化表格参数配置
  157. Table.api.init({
  158. extend: {
  159. index_url: 'teacher/collection/viewuser/ids/' +Config.ids+ location.search,
  160. }
  161. });
  162. var table = $("#table");
  163. var multiple = true;
  164. // 初始化表格
  165. table.bootstrapTable({
  166. url: $.fn.bootstrapTable.defaults.extend.index_url,
  167. pk: 'task_id',
  168. sortName: 'task_id',
  169. fixedColumns: true,
  170. fixedRightNumber: 1,
  171. singleSelect : true,
  172. searchFormVisible:true,
  173. search: false,
  174. columns: [
  175. [
  176. // {checkbox: true},
  177. // {field: 'task_id', title: __('Task_id'),operate: false},
  178. {field: 'user_nickname', title: __('学员'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content},
  179. {field: 'sim_type', title: __('Sim_type'),searchList:{"0001":"FZD04B型侦毒器","0002":"FZB006型毒剂报警器","0003":"防化兵用毒剂报警器"},formatter: Table.api.formatter.simtype},
  180. {field: 'question_setting_method', title: __('Question_setting_method'),searchList:{"1":"系统随机","2":"教员自选","3":"任务自选"},formatter: Table.api.formatter.simmethod},
  181. {field: 'fault_names', title: __('故障内容'),formatter: Table.api.formatter.faultname,operate: false},
  182. {field: 'createtime', title: __('Create_time'), operate:'RANGE', addclass:'datetimerange', autocomplete:false,formatter: Table.api.formatter.datetime},
  183. // {
  184. // field: 'operate', title: __('Operate'), width: 85, events: {
  185. // 'click .btn-chooseone': function (e, value, row, index) {
  186. // Fast.api.close({url: row.url, multiple: multiple,task_id:row.task_id,task_name:row.name,fault_name:row.fault_name});
  187. // },
  188. // }, formatter: function () {
  189. // return '<a href="javascript:;" class="btn btn-danger btn-chooseone btn-xs"><i class="fa fa-check"></i> ' + __('Choose') + '</a>';
  190. // }
  191. // }
  192. ]
  193. ]
  194. });
  195. // 为表格绑定事件
  196. Table.api.bindevent(table);
  197. },
  198. task: function () {
  199. // 初始化表格参数配置
  200. Table.api.init({
  201. extend: {
  202. index_url: 'teacher/collection/task/type/' +Config.sim_type+'/ids/'+Config.ids+ location.search,
  203. }
  204. });
  205. var table = $("#table");
  206. var multiple = true;
  207. // 初始化表格
  208. table.bootstrapTable({
  209. url: $.fn.bootstrapTable.defaults.extend.index_url,
  210. pk: 'task_id',
  211. sortName: 'task_id',
  212. fixedColumns: true,
  213. fixedRightNumber: 1,
  214. singleSelect : true,
  215. searchFormVisible:true,
  216. search: false,
  217. columns: [
  218. [
  219. {checkbox: true},
  220. // {field: 'task_id', title: __('Task_id'),operate: false},
  221. {field: 'name', title: __('任务名称'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content},
  222. {field: 'sim_type', title: __('Sim_type'),searchList:{"0001":"FZD04B型侦毒器","0002":"FZB006型毒剂报警器","0003":"防化兵用毒剂报警器"},formatter: Table.api.formatter.simtype},
  223. {field: 'fault_name', title: __('故障内容'),formatter: Table.api.formatter.faultname},
  224. {field: 'createtime', title: __('Create_time'), operate:'RANGE', addclass:'datetimerange', autocomplete:false,formatter: Table.api.formatter.datetime},
  225. {
  226. field: 'operate', title: __('Operate'), width: 85, events: {
  227. 'click .btn-chooseone': function (e, value, row, index) {
  228. Fast.api.close({url: row.url, multiple: multiple,task_id:row.task_id,task_name:row.name,fault_name:row.fault_name});
  229. },
  230. }, formatter: function () {
  231. return '<a href="javascript:;" class="btn btn-danger btn-chooseone btn-xs"><i class="fa fa-check"></i> ' + __('Choose') + '</a>';
  232. }
  233. }
  234. ]
  235. ]
  236. });
  237. // 为表格绑定事件
  238. Table.api.bindevent(table);
  239. },
  240. faults: function () {
  241. // 初始化表格参数配置
  242. Table.api.init({
  243. extend: {
  244. index_url: 'teacher/collection/faults/type/'+Config.sim_type + location.search,
  245. }
  246. });
  247. var table = $("#table");
  248. var multiple = true;
  249. // 初始化表格
  250. table.bootstrapTable({
  251. url: $.fn.bootstrapTable.defaults.extend.index_url,
  252. pk: 'fault_id',
  253. sortName: 'fault_id',
  254. sortOrder:'asc',
  255. fixedColumns: true,
  256. fixedRightNumber: 1,
  257. searchFormVisible:false,
  258. showExport:false,
  259. pagination:false,
  260. search:false,
  261. columns: [
  262. [
  263. {checkbox: true},
  264. {field: 'sim_type', title: __('模拟器类型'),operate:false,searchList:{"0001":"FZD04B型侦毒器","0002":"FZB006型毒剂报警器","0003":"防化兵用毒剂报警器"},formatter: Table.api.formatter.simtype},
  265. {field: 'parent_name', title: __('故障现象'), operate: false, table: table, class: 'autocontent',},
  266. {field: 'name', title: __('故障内容'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content},
  267. // {
  268. // field: 'operate', title: __('Operate'), width: 85, events: {
  269. // 'click .btn-chooseone': function (e, value, row, index) {
  270. // Fast.api.close({url: row.url, multiple: multiple,task_id:row.fault_id});
  271. // },
  272. // }, formatter: function () {
  273. // return '<a href="javascript:;" class="btn btn-danger btn-chooseone btn-xs"><i class="fa fa-check"></i> ' + __('Choose') + '</a>';
  274. // }
  275. // }
  276. ]
  277. ]
  278. });
  279. // 为表格绑定事件
  280. Table.api.bindevent(table);
  281. // 选中多个
  282. $(document).on("click", ".btn-choose-multi", function () {
  283. var exam_collection_type = Config.rowinfo.exam_collection_type;
  284. var ids = Table.api.selectedids(table);
  285. if(ids.length!=3 && exam_collection_type==3){
  286. Layer.alert('故障内容只允许选择3个');
  287. return false
  288. }
  289. if(exam_collection_type==1 && ids.length>3){
  290. Layer.alert('故障内容最多允许选择3个');
  291. return false
  292. }
  293. console.log(ids)
  294. var taskname = [];
  295. var ptaskids = [];
  296. var datas = $("#table").bootstrapTable('getSelections');
  297. $.each(datas,function (index,val) {
  298. taskname.push(val.name)
  299. // var index = ptaskids.indexOf(val.parent_fault_id);
  300. // if (index > -1) {
  301. // Layer.alert('一个故障现象下只允许申请一个故障部位');
  302. // return false
  303. // }
  304. ptaskids.push(val.parent_fault_id)
  305. })
  306. console.log(taskname)
  307. console.log('taskname')
  308. console.log(ptaskids);
  309. var obj = {};
  310. for (var i = 0; i < ptaskids.length; i++) {
  311. var str = ptaskids[i];
  312. if (obj[str]) {
  313. Layer.alert('一个故障现象下只允许申请一个故障部位');
  314. return;
  315. } else {
  316. obj[str] = str; // 存入对象中做标记
  317. }
  318. }
  319. Fast.api.close({url: '', multiple: multiple, task_id:ids,task_name:taskname});
  320. });
  321. $("button[name=commonSearch]").css('display','none');
  322. },
  323. add: function () {
  324. Controller.api.bindevent1();
  325. },
  326. adduser: function () {
  327. Controller.api.bindevent2();
  328. },
  329. edituser: function () {
  330. Controller.api.bindevent2();
  331. },
  332. edit: function () {
  333. Controller.api.bindevent1();
  334. },
  335. api: {
  336. bindevent1: function () {
  337. Form.api.bindevent($("form[role=form]"));
  338. },
  339. initSubTable: function (index, row, $detail,parent_table) {
  340. var admin_id = row.id;
  341. var cur_table = $detail.html('<table id="sub_'+ admin_id +'" style="background-color:#d7d1d147"></table>').find('table');
  342. var sub_table = $(cur_table);
  343. var parent_options = parent_table.bootstrapTable("getOptions");
  344. var parent_selectids = parent_options.selectedIds;
  345. var checked = false;
  346. if (parent_selectids.indexOf(admin_id) !== -1) {
  347. checked = true;
  348. }
  349. parent_options.subSelectedIds[admin_id] = [];
  350. sub_table.bootstrapTable({
  351. // url: 'area/index',
  352. toolbar: false,
  353. showColumns: false,
  354. showToggle: false,
  355. showExport: false,
  356. search: false,
  357. pagination:false,
  358. commonSearch: false,
  359. sortOrder: 'ASC',
  360. checkboxHeader: false,
  361. columns: [
  362. {checkbox: true,
  363. formatter: function(value,rows,index){
  364. if(Config.user_ids.length==0){
  365. return false;
  366. }else if(Config.user_ids.indexOf(rows.id)>-1){
  367. return true;
  368. }else{
  369. return {disabled : true}
  370. }
  371. }
  372. },
  373. // {field: 'id', title: 'ID'},
  374. {field: 'username', title: __('学号')},
  375. {field: 'nickname', title: __('姓名')},
  376. ],
  377. data: row.alluser
  378. });
  379. Table.api.bindevent(sub_table);
  380. if(checked){
  381. sub_table.bootstrapTable("checkAll");
  382. }else{
  383. sub_table.bootstrapTable("uncheckAll");
  384. }
  385. sub_table.on("check.bs.table uncheck.bs.table check-all.bs.table uncheck-all.bs.table post-body.bs.table", function (e) {
  386. var selectedIds = Table.api.selectedids(sub_table);
  387. // selectedData = Table.api.selecteddata(sub_table);
  388. // parent_options.subSelectedIds= [];
  389. // parent_options.subSelectedIds[admin_id] = selectedIds;
  390. // parent_options.subSelectedData[admin_id] = selectedData;
  391. //
  392. // var allSubselectIds = [];
  393. // var allSubselectData = [];
  394. // var allSubselectProjectlib = [];
  395. // for (var i in parent_options.subSelectedIds) {
  396. // allSubselectIds.push.apply(allSubselectIds, parent_options.subSelectedIds[i]);
  397. // }
  398. // for (var j in parent_options.subSelectedData) {
  399. // allSubselectData.push.apply(allSubselectData, parent_options.subSelectedData[j]);
  400. // }
  401. // parent_options.allSubselectIds = allSubselectIds;
  402. // parent_options.allSubselectData = allSubselectData;
  403. console.log(selectedIds);
  404. $(".xueyuan_input").val(selectedIds.length);
  405. $(".xueyuan_total").html(selectedIds.length);
  406. $(".depart_ids").val(selectedIds.join());
  407. });
  408. },
  409. bindevent2: function () {
  410. var rel_Ids = [];
  411. var qudui_total = 0;
  412. var xueyuan_total = 0;
  413. Table.api.init({
  414. extend: {
  415. index_url: 'department/admin/departadmintotal' + location.search,
  416. // index_url: 'auth/admin/admintotal' + location.search,
  417. }
  418. });
  419. var table = $("#table1");
  420. table.on('post-body.bs.table', function (e, data) {
  421. $('#table1').bootstrapTable('expandAllRows');
  422. });
  423. // var oInit = new Object();
  424. // 初始化表格
  425. table.bootstrapTable({
  426. url: $.fn.bootstrapTable.defaults.extend.index_url,
  427. pk: 'id',
  428. sortName: 'id',
  429. fixedColumns: true,
  430. fixedRightNumber: 1,
  431. searchFormVisible:false,
  432. subSelectedIds: {},
  433. subSelectedData: {},
  434. allSubselectIds: [],
  435. allSubselectData: [],
  436. // pagination:false,
  437. detailView: true,//父子表
  438. Search:false,
  439. columns: [
  440. [
  441. {checkbox: true},
  442. {field: 'department_name', title: __('区队名称'), operate: false,width: '400px', table: table, class: 'autocontent', formatter: Table.api.formatter.content},
  443. {field: 'department_admin_count', title: __('人员数量'),operate: false},
  444. ]
  445. ],
  446. onExpandRow: function (index, row, $detail) {
  447. Controller.api.initSubTable(index, row, $detail,table);
  448. },
  449. onCheck: function (row, $element) {
  450. $('.btn-disabled').addClass('disabled');
  451. var id = row.id;
  452. console.log('选中了')
  453. $("#sub_" + id).bootstrapTable("checkAll");
  454. },
  455. onUncheck: function (row) {
  456. var id = row.id;
  457. $("#sub_" + id).bootstrapTable("uncheckAll");
  458. },
  459. });
  460. // 为表格绑定事件
  461. Table.api.bindevent(table);
  462. $(document).on('change', '#c-question_setting_method', function () {
  463. if($(this).val()==1){
  464. $(".btn-sm,.btn-task").css('display','none');
  465. }else if($(this).val()==2){
  466. $(".btn-sm").show();
  467. $(".btn-task").css('display','none');
  468. }else if($(this).val()==3){
  469. $(".btn-sm").css('display','none');
  470. $(".btn-task").show();
  471. }
  472. $(".question_ids").val(0);
  473. $(".task_id").val(0);
  474. $("#c-task_name").val('');
  475. $("#c-fault_name").val('');
  476. $("#c-question_name").val('');
  477. $(".tasks,.questions").css('display','none')
  478. });
  479. //考题
  480. $(document).on('click', '.btn-sm', function () {
  481. var simtype = $("#c-sim_type").val();
  482. if(!simtype){
  483. Layer.alert('请选择模拟器类型');
  484. return false
  485. }
  486. var examid = $(".examid").val();
  487. var title = '选择考题';
  488. Fast.api.open(Fast.api.fixurl("teacher/collection/faults/type/"+simtype+"/ids/"+examid), title, {
  489. area: ["85%", "85%"],
  490. maxmin: true,
  491. moveOut: false,
  492. offset: ['40px'],
  493. callback: function(value) {
  494. if (value.task_id) {
  495. $(".questions").css('display','block')
  496. $(".question_ids").val(value.task_id);
  497. $("#c-question_name").val(value.task_name);
  498. $(".tasks").css('display','none')
  499. $(".task_id").val(0);
  500. $("#c-task_name").val('');
  501. $("#c-fault_name").val('');
  502. }
  503. }
  504. });
  505. });
  506. //任务
  507. $(document).on('click', '.btn-task', function () {
  508. var simtype = $("#c-sim_type").val();
  509. if(!simtype){
  510. Layer.alert('请选择模拟器类型');
  511. return false;
  512. }
  513. var examid = $(".examid").val();
  514. var title = '选择任务';
  515. parent.Fast.api.open(Fast.api.fixurl("teacher/collection/task/type/"+simtype+"/ids/"+examid), title, {
  516. area: ["65%", "70%"],
  517. maxmin: true,
  518. moveOut: false,
  519. offset: ['40px'],
  520. callback: function(value) {
  521. console.log(value);
  522. if (value.task_id) {
  523. $(".tasks").css('display','block')
  524. $(".task_id").val(value.task_id);
  525. $("#c-task_name").val(value.task_name);
  526. $("#c-fault_name").val(value.fault_name);
  527. $(".questions").css('display','none')
  528. $(".question_ids").val(0);
  529. $("#c-question_name").val('');
  530. }
  531. }
  532. });
  533. });
  534. $("button[name=commonSearch]").css('display','none');
  535. $("input[name='btSelectAll']").css('display','none');
  536. Form.api.bindevent($("form[role=form]"));
  537. },
  538. }
  539. };
  540. return Controller;
  541. });