talentInfo_base.js 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585
  1. /**
  2. * 人才认定申报管理初始化
  3. */
  4. var TalentInfo = {
  5. id: "TalentInfoTable", //表格id
  6. seItem: null, //选中的条目
  7. table: null,
  8. layerIndex: -1
  9. };
  10. /**
  11. * 初始化表格的列
  12. */
  13. TalentInfo.initColumn = function () {
  14. var type = $("#type").val();
  15. var superpriv = $("#superpriv").val();
  16. var process = $("#process").val();
  17. var isShowVerifyDept = false;
  18. isShowVerifyDept = process == 4 && superpriv ? true : false;
  19. return [
  20. {field: 'selectItem', checkbox: true},
  21. {title: '申报年度', field: 'apply_year', visible: true, align: 'center', valign: 'middle', 'class': 'uitd_showTip', width: "120px"},
  22. {title: '医院名称', field: 'enterprise_name', visible: true, align: 'center', valign: 'middle', 'class': 'uitd_showTip', width: "120px",
  23. formatter: function (value, row, index) {
  24. return value + (row.isGeneral == 1 ? "(总院)" : "");
  25. }
  26. },
  27. {title: '医共体', field: 'medicalCommunityName', visible: true, align: 'center', valign: 'middle', 'class': 'uitd_showTip', width: "120px"},
  28. {title: '姓名', field: 'name', visible: true, align: 'center', valign: 'middle', 'class': 'uitd_showTip', width: "100px",
  29. formatter: function (value, row, index) {
  30. if (row.sex == 1) {
  31. return value + '<span style="color:#6495ED">【男】</span>';
  32. }
  33. if (row.sex == 2) {
  34. return value + '<span style="color:#FF82AB">【女】</span>';
  35. }
  36. }
  37. },
  38. {title: '证件号码', field: 'card_number', visible: true, align: 'center', valign: 'middle', 'class': 'uitd_showTip', width: "120px"},
  39. {title: '认定层次', field: 'talentArrangeName', visible: true, align: 'center', valign: 'middle', 'class': 'uitd_showTip', width: "80px"},
  40. {title: '认定条件', field: 'talentConditionName', visible: true, align: 'center', valign: 'middle', 'class': 'uitd_showTip', width: "150px"},
  41. {title: '审核部门', field: 'verifyDepts', visible: isShowVerifyDept, align: 'center', valign: 'middle', 'class': 'uitd_showTip', width: "150px",
  42. formatter: function (value, row, index) {
  43. var html = "";
  44. for (var i in value) {
  45. let checkState = "";
  46. if (value[i].active == 1) {
  47. if (value[i].checkState == 9) {
  48. checkState = "<span style='color:#ff0000;'>审核驳回</span>";
  49. }
  50. if (value[i].checkState == 12) {
  51. checkState = "<span style='color:green;'>审核通过</span>";
  52. }
  53. } else {
  54. checkState = "<span style='color:gray;'>待审核</span>";
  55. }
  56. html += "<p style='margin:0 auto;'>" + value[i].name + "(" + checkState + ")</p>"
  57. }
  58. return html
  59. }
  60. },
  61. {title: '首次提交时间', field: 'first_submit_time', visible: true, align: 'center', valign: 'middle', 'class': 'uitd_showTip', width: "100px"},
  62. {title: '最新提交时间', field: 'new_submit_time', visible: true, align: 'center', valign: 'middle', 'class': 'uitd_showTip', width: "100px"},
  63. {title: '审核状态', field: 'checkState', visible: true, align: 'center', valign: 'middle', 'class': 'uitd_showTip', width: "100px",
  64. formatter: function (value, row, index) {
  65. if (typeof row.deptCheckState != "undefined") {
  66. if ((row.deptActive == 0 && row.realState == 10) || !row.deptActive) {
  67. if (row.resubmit) {
  68. return "<span class='label label-success'>待部门并审(重新提交)</span>";
  69. } else {
  70. return "<span class='label label-success'>待部门并审(首次提交)</span>";
  71. }
  72. }
  73. if (row.deptActive == 1 && row.newState == 12) {
  74. return "<span class='label label-primary'>部门并审通过</span>";
  75. }
  76. if (row.deptActive == 1 && row.newState == 9) {
  77. return "<span class='label label-danger'>部门并审驳回</span>";
  78. }
  79. } else {
  80. if (value == 1) {
  81. return "<span class='label label-danger'>驳回到分院</span>"
  82. }
  83. if (value == 2) {
  84. if (row.lastState == 4) {
  85. return "<span class='label label-success'>待审核(重新提交)</span>"
  86. }
  87. if (row.realState == 6) {
  88. return "<span class='label label-danger'>复审驳回</span>"
  89. }
  90. if (row.realState == 11) {
  91. return "<span class='label label-danger'>驳回到总院</span>"
  92. }
  93. return "<span class='label label-success'>待审核</span>"
  94. }
  95. if (value == 3) {
  96. return "<span class='label label-success'>待复审</span>"
  97. }
  98. if (value == 5) {
  99. return "<span class='label label-success'>复审通过</span>"
  100. }
  101. if (value == 10) {
  102. if (process == 3) {
  103. if (row.pass_dept_check == 1) {
  104. return "<span class='label label-success'>初审通过(待复审)</span>"
  105. }
  106. return "<span class='label label-success'>初审通过(待部门并审)</span>"
  107. }
  108. if (process == 4) {
  109. if (row.resubmit) {
  110. return "<span class='label label-success'>待部门并审(重新提交)</span>";
  111. } else {
  112. return "<span class='label label-success'>待部门并审(首次提交)</span>";
  113. }
  114. }
  115. if (row.resubmit) {
  116. return "<span class='label label-success'>待复审(重新提交)</span>";
  117. } else {
  118. return "<span class='label label-success'>待复审(首次提交)</span>";
  119. }
  120. }
  121. if (value == 8) {
  122. if (row.realState == 11) {
  123. return "<span class='label label-danger'>初审驳回</span>"
  124. } else {
  125. return "<span class='label label-success'>保存未提交</span>"
  126. }
  127. }
  128. if (value == 9) {
  129. if (row.realState == 13) {
  130. if (process == 3) {
  131. return "<span class='label label-danger'>待初审(部门并审驳回)</span>";
  132. }
  133. return "<span class='label label-danger'>部门并审驳回</span>";
  134. } else if (row.realState == 15) {
  135. if (process == 3) {
  136. return "<span class='label label-danger'>待初审(复审驳回)</span>";
  137. }
  138. return "<span class='label label-danger'>复审驳回</span>";
  139. } else {
  140. if (row.lastState == 11) {
  141. return "<span class='label label-success'>待初审(重新提交)</span>"
  142. }
  143. return "<span class='label label-success'>待初审(首次提交)</span>"
  144. }
  145. }
  146. if (value == -2) {
  147. return "<span class='label label-danger'>初审不通过</span>"
  148. }
  149. if (value == 16) {
  150. return "<span class='label label-danger'>复审不通过</span>"
  151. }
  152. if (value == -1 || value == 7) {
  153. return "<span class='label label-danger'>审核不通过</span>"
  154. }
  155. if (value == 4) {
  156. if (row.highProcess != null && row.highProcess != '' && row.highProcess >= 1) {
  157. return "<span class='label label-success'>上级驳回</span>"
  158. } else {
  159. return "<span class='label label-success'>待审核</span>"
  160. }
  161. }
  162. if (value == 11) {
  163. if (row.highProcess != null && row.highProcess != '' && row.highProcess >= 3) {
  164. return "<span class='label label-success'>上级驳回</span>"
  165. } else {
  166. return "<span class='label label-success'>待审核</span>"
  167. }
  168. }
  169. if (value == 12) {
  170. if (process == 4) {
  171. return "<span class='label label-success'>部门并审通过</span>";
  172. }
  173. if (process == 3) {
  174. return "<span class='label label-success'>待复审(部门并审通过)</span>";
  175. }
  176. if (row.resubmit) {
  177. return "<span class='label label-success'>待复审(重新提交)</span>";
  178. } else {
  179. return "<span class='label label-success'>待复审(首次提交)</span>";
  180. }
  181. }
  182. if (value == 13) {
  183. if (row.highProcess != null && row.highProcess != '' && row.highProcess >= 4) {
  184. return "<span class='label label-danger'>上级驳回</span>"
  185. } else {
  186. return "<span class='label label-success'>待审核</span>"
  187. }
  188. }
  189. if (value == 14) {
  190. return "<span class='label label-primary'>复审通过</span>"
  191. }
  192. if (value == 15) {
  193. if (row.highProcess != null && row.highProcess != '' && row.highProcess >= 5) {
  194. return "<span class='label label-success'>上级驳回</span>"
  195. } else {
  196. return "<span class='label label-success'>待审核</span>"
  197. }
  198. }
  199. }
  200. }
  201. },
  202. {title: '操作', field: 'id', visible: true, align: 'center', valign: 'middle', width: "80px",
  203. formatter: function (value, row, index) {
  204. return "<span class='label label-success' onclick=\"TalentInfo.showLog('" + value + "')\" >" +
  205. "<i class=\"fa fa-book\"></i>日志" +
  206. "</span>";
  207. }
  208. }
  209. ];
  210. };
  211. /**
  212. * 检查是否选中
  213. */
  214. TalentInfo.check = function () {
  215. var selected = $('#' + this.id).bootstrapTable('getSelections');
  216. if (selected.length != 1) {
  217. Feng.info("请先选中表格中的某一记录!");
  218. return false;
  219. } else {
  220. TalentInfo.seItem = selected[0];
  221. return true;
  222. }
  223. };
  224. TalentInfo.openCheckTalentInfo = function () {
  225. var title = $("#title").val();
  226. var process = $("#process").val();
  227. if (this.check()) {
  228. var index = layer.open({
  229. type: 2,
  230. title: '人才认定' + " - " + title,
  231. area: ['800px', '420px'], //宽高
  232. fix: false, //不固定
  233. maxmin: true,
  234. shade: 0,
  235. content: '/admin/talent/common_check/id/' + TalentInfo.seItem.id + '/process/' + process,
  236. btn: ['<i class="fa fa-eye"></i>&nbsp;&nbsp;保存未提交', '<i class="fa fa-save"></i>&nbsp;&nbsp;提交审核', '<i class="fa fa-eraser"></i>&nbsp;&nbsp;关闭'],
  237. btnAlign: 'c',
  238. btn1: function (index, layero) {
  239. var obj = layero.find("iframe")[0].contentWindow;
  240. obj.TalentInfoInfoDlg.showFirstCheckModal();
  241. }, btn2: function (index, layero) {
  242. var obj = layero.find("iframe")[0].contentWindow;
  243. obj.TalentInfoInfoDlg.submitCheck();
  244. return false;
  245. }
  246. });
  247. layer.full(index);
  248. TalentInfo.layerIndex = index;
  249. }
  250. }
  251. /**
  252. * 打开查看人才认定-初级审核详情
  253. */
  254. TalentInfo.openTalentInfoDetail = function () {
  255. if (this.check()) {
  256. var index = layer.open({
  257. type: 2,
  258. title: '人才认定申报详情',
  259. area: ['800px', '420px'], //宽高
  260. fix: false, //不固定
  261. maxmin: true,
  262. content: Feng.ctxPath + '/talentInfo/talentInfo_toDetail/' + TalentInfo.seItem.id + '/1'
  263. });
  264. layer.full(index);
  265. TalentInfo.layerIndex = index;
  266. }
  267. };
  268. TalentInfo.cancleThirdCheck = function () {
  269. if (this.check()) {
  270. var index = layer.open({
  271. type: 1,
  272. title: '撤销复核',
  273. area: ['800px', '420px'], //宽高
  274. fix: false, //不固定
  275. maxmin: true,
  276. content: '<form >\n' +
  277. ' <div class="form-group" style="margin: 10px;">\n' +
  278. ' <label for="checkMsg" class="control-label">撤销原因</label>\n' +
  279. ' <textarea class="form-control" id="msg" rows="6"></textarea>\n' +
  280. ' </div>\n' +
  281. ' </form>',
  282. btn: ['<i class="fa fa-save layui-bg-green"></i>&nbsp;&nbsp;提交', '<i class="fa fa-eraser"></i>&nbsp;&nbsp;关闭'],
  283. yes: function (index, layero) {
  284. var cancleMsg = $("#msg").val();
  285. if (Feng.isEmptyStr(cancleMsg)) {
  286. Feng.error("撤销原因不能为空");
  287. return;
  288. }
  289. var operation = function () {
  290. var ajax = new $ax(Feng.ctxPath + "/admin/talent/cancleThirdCheck", function (data) {
  291. if (data.code == 200) {
  292. Feng.success(data.msg);
  293. TalentInfo.table.refresh();
  294. layer.close(index);
  295. } else {
  296. Feng.error(data.msg);
  297. }
  298. locked = false;
  299. }, function (data) {
  300. Feng.error("撤销复核失败!" + data.responseJSON.message + "!");
  301. locked = false;
  302. });
  303. ajax.setData({"id": TalentInfo.seItem.id, "checkMsg": cancleMsg})
  304. ajax.start();
  305. };
  306. Feng.confirm("一旦提交无法修改,确定要撤销吗?", operation);
  307. }
  308. });
  309. }
  310. }
  311. /**
  312. * 修改驳回的字段及附件
  313. */
  314. TalentInfo.updateFieldsAndFiles = function () {
  315. if (this.check()) {
  316. var ajax = new $ax("/admin/talent/findFieldsAndFiles?id=" + TalentInfo.seItem.id, function (data) {
  317. if (data.code == 200) {
  318. layer.open({
  319. type: 1,
  320. id: "neewFieldFormModel",
  321. title: '修改',
  322. area: ['800px', '450px'], //宽高
  323. fix: false, //不固定
  324. shade: 0,
  325. maxmin: true,
  326. content: TalentInfo.creatFieldCheckModal(),
  327. btn: ['<i class="fa fa-save"></i>&nbsp;&nbsp;提交', '<i class="fa fa-eraser"></i>&nbsp;&nbsp;关闭'],
  328. btnAlign: 'c',
  329. zIndex: layer.zIndex,
  330. success: function (layero, index) {
  331. var html1 = '';
  332. if (typeof data.fieldList != "undefined" && data.fieldList.length > 0) {
  333. for (var key in data.fieldList) {
  334. html1 += '<li style="float:left;margin:0 10px 10px 0;"><input type="checkbox" value="' + data.fieldList[key]["key"] + '"><span>' + data.fieldList[key]["value"] + '</span></li>';
  335. }
  336. }
  337. var html2 = '';
  338. for (var key in data.fileList) {
  339. html2 = html2 + '<ul><li style="width: 100%"><input type="checkbox" value="' + data.fileList[key].id + '"><span>' + data.fileList[key].name + '</span></li></ul>';
  340. }
  341. $("#checkMsg").text(data.checkMsg);
  342. $("#firstCheckForm #field_info ul").css("overflow", "hidden").html(html1);
  343. $("#field_file").css("overflow", "hidden").empty().append(html2);
  344. //$("#field_file").empty().append(html);
  345. if (data.select.fields != null && data.select.fields != '') {
  346. $("#firstCheckForm #field_info li input").each(function () {
  347. if (data.select.fields.indexOf($(this).val()) != -1) {
  348. this.checked = true;
  349. }
  350. });
  351. }
  352. if (data.select.files != null && data.select.files != '') {
  353. $("#field_file input").each(function () {
  354. if (data.select.files.indexOf($(this).val()) != -1) {
  355. this.checked = true;
  356. }
  357. });
  358. }
  359. },
  360. yes: function (index, layero) {
  361. TalentInfo.submitFieldsAndFiles(index, data.id);
  362. }
  363. });
  364. } else {
  365. Feng.error(data.msg);
  366. }
  367. }, function (data) {
  368. Feng.error("查询失败!" + data.responseJSON.message + "!");
  369. });
  370. ajax.start();
  371. }
  372. }
  373. /**
  374. * 修改提交
  375. * @param index
  376. * @param id
  377. */
  378. TalentInfo.submitFieldsAndFiles = function (index, id) {
  379. var fields = '';
  380. var files = '';
  381. var checkMsg = $("#checkMsg").val();
  382. $("#firstCheckForm #field_info li input").each(function (index) {
  383. if ($(this).is(":checked")) {
  384. fields = fields + $(this).val() + ",";
  385. }
  386. });
  387. $("#field_file li input").each(function (index) {
  388. if ($(this).is(":checked")) {
  389. files = files + $(this).val() + ",";
  390. }
  391. });
  392. if (checkMsg.trim() == '') {
  393. Feng.info("请填写审核意见!");
  394. return;
  395. }
  396. if (fields == '' && files == '') {
  397. Feng.info("请选择可修改的字段或附件!");
  398. return;
  399. }
  400. var ajax = new $ax("/admin/talent/updateFieldsAndFiles", function (data) {
  401. if (data.code == 200) {
  402. layer.close(index);
  403. Feng.success(data.msg);
  404. } else {
  405. Feng.error(data.msg);
  406. }
  407. }, function (data) {
  408. Feng.error("修改失败!" + data.responseJSON.message + "!");
  409. });
  410. ajax.setData({"id": id, "fields": fields, "files": files, "checkMsg": checkMsg})
  411. ajax.start();
  412. }
  413. /**
  414. * 审核不通过
  415. */
  416. TalentInfo.setNotPass = function () {
  417. var selecteds = $('#' + this.id).bootstrapTable('getSelections');
  418. if (selecteds.length == 0) {
  419. Feng.info("请选择需要设置审核不通过的行");
  420. return;
  421. }
  422. var ids = "";
  423. for (var key in selecteds) {
  424. ids = ids + selecteds[key].id + ",";
  425. }
  426. ids = ids.substring(0, ids.length - 1);
  427. layer.open({
  428. type: 1,
  429. id: "notPassModal",
  430. title: '修改',
  431. area: ['800px', '450px'], //宽高
  432. fix: false, //不固定
  433. shade: 0,
  434. maxmin: true,
  435. content: '<form id="checkNotPass">\n' +
  436. ' <div class="form-group" style="margin: 10px;">\n' +
  437. ' <label for="checkMsgNotPass" class="control-label" >审核不通过原因</label>\n' +
  438. ' <textarea class="form-control" id="checkMsgNotPass" placeholder="此功能适用于未在申报提交截止时间内提交的数据" rows="6"></textarea>\n' +
  439. ' </div>\n' +
  440. ' </form>',
  441. btn: ['<i class="fa fa-save"></i>&nbsp;&nbsp;提交', '<i class="fa fa-eraser"></i>&nbsp;&nbsp;关闭'],
  442. btnAlign: 'c',
  443. zIndex: layer.zIndex,
  444. yes: function (index, layero) {
  445. var checkMsg = $("#checkMsgNotPass").val();
  446. if (Feng.isEmptyStr(checkMsg)) {
  447. Feng.info("请填写审核不通过原因");
  448. return;
  449. }
  450. var operation = function () {
  451. var ajax = new $ax("/admin/talent/cancel_verify", function (data) {
  452. if (data.code == 200) {
  453. Feng.success(data.msg);
  454. TalentInfo.table.refresh();
  455. layer.close(index);
  456. } else {
  457. Feng.error(data.msg);
  458. }
  459. }, function (data) {
  460. Feng.error("设置审核不通过失败!" + data.responseJSON.message + "!");
  461. });
  462. ajax.set("ids", ids);
  463. ajax.set("msg", checkMsg);
  464. ajax.start();
  465. }
  466. Feng.confirm("一旦提交无法修改,确定设置所选数据为审核不通过?", operation);
  467. }
  468. });
  469. }
  470. TalentInfo.creatFieldCheckModal = function () {
  471. return '<form id="firstCheckForm">\n' +
  472. ' <div class="form-group" style="margin: 10px;">\n' +
  473. ' <div >\n' +
  474. ' <label for="checkMsg" class="control-label" >审核意见</label>\n' +
  475. ' <textarea class="form-control" id="checkMsg" placeholder="审核状态属“审核通过”的,仅代表此步骤已操作完成,不代表用户提交的信息符合认定条件。若不符合认定条件的,请写明不符合原因。" rows="6"></textarea>\n' +
  476. ' <label for="checkMsg" class="control-label">可修改字段</label>\n' +
  477. ' <div id="field_info">\n' +
  478. ' <ul>\n' +
  479. ' </ul>\n' +
  480. ' </div>\n' +
  481. ' <label for="checkMsg" class="control-label">可修改附件</label>\n' +
  482. ' <div id="field_file">\n' +
  483. ' </div>\n' +
  484. ' <div class="form-group" style="text-align: center">\n' +
  485. ' <button type="button" class="btn btn-primary" onclick="TalentInfo.checkAll()">全选</button>\n' +
  486. ' <button type="button" class="btn btn-success" onclick="TalentInfo.unCheckAll()">反选</button>\n' +
  487. ' </div>\n' +
  488. ' </div>\n' +
  489. ' </div>\n' +
  490. ' </form>';
  491. }
  492. TalentInfo.fieldCheckd = function (context) {
  493. if ($(context).get(0).checked) {
  494. $(context).parent().next().children()[0].checked = true;
  495. $(context).parent().next().children().eq(0).trigger("change");
  496. }
  497. }
  498. TalentInfo.sourceCheckd = function (context) {
  499. if ($(context).get(0).checked) {
  500. $("#talentArrangeCheckBox").attr("checked", true);
  501. $("#talentArrangeCheckBox").trigger("change");
  502. }
  503. }
  504. TalentInfo.getPhones = function () {
  505. var process = $("#process").val();
  506. var ajax = new $ax("/admin/talent/getPhones/process/" + process, function (data) {
  507. if (data.code == 200) {
  508. layer.open({
  509. type: 1,
  510. title: "手机号码",
  511. area: ['830px', '300px'], //宽高
  512. fix: false, //不固定
  513. maxmin: true,
  514. content: "<span style='word-break:break-all'>" + data.obj + "</span>"
  515. });
  516. } else {
  517. Feng.info(data.msg);
  518. }
  519. }, function (data) {
  520. Feng.error("操作失败!");
  521. });
  522. ajax.setData(TalentInfo.formParams());
  523. ajax.start();
  524. }
  525. TalentInfo.getEnterprisePhones = function () {
  526. var process = $("#process").val();
  527. var ajax = new $ax("/admin/talent/getEnterprisePhones/process/" + process, function (data) {
  528. if (data.code == 200) {
  529. layer.open({
  530. type: 1,
  531. title: "手机号码",
  532. area: ['830px', '300px'], //宽高
  533. fix: false, //不固定
  534. maxmin: true,
  535. content: "<span style='word-break:break-all'>" + data.obj + "</span>"
  536. });
  537. } else {
  538. Feng.info(data.msg);
  539. }
  540. }, function (data) {
  541. Feng.error("操作失败!");
  542. });
  543. ajax.setData(TalentInfo.formParams());
  544. ajax.start();
  545. }
  546. $(function () {
  547. var defaultColunms = TalentInfo.initColumn();
  548. var process = $("#process").val();
  549. var table = new BSTable(TalentInfo.id, "/admin/talent/base_verify_list/process/" + process, defaultColunms);
  550. table.setPaginationType("server");
  551. table.setSingleSelect(false);
  552. table.setOnDblClickRow(function () {
  553. TalentInfo.openCheckTalentInfo();
  554. });
  555. TalentInfo.table = table.init();
  556. TalentInfo.init();
  557. // var defaultColunms = TalentInfo.initColumn();
  558. // var table = new KDTable(TalentInfo.id, "/talentInfo/list/1", defaultColunms);
  559. // table.setPaginationType("server");
  560. // TalentInfo.table = table.init();
  561. });