Guest User

Untitled

a guest
Nov 24th, 2017
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 25.06 KB | None | 0 0
  1. dojo.provide("yug.dlgs.jePersonal");
  2.  
  3. dojo.declare("yug.dlgs.jePersonal", null, {
  4. PARENT: "ttab_45",
  5. EMPPHOTOID: "personal-foto",
  6. BACKCLASS: "personal-back",
  7. ACTIVECSSCLASS: "active-element",
  8. INFOCELL: "info-cell",
  9. PRINTERHIDE: ["main", "mainMenu", "mainMenuBtn"],
  10. PRINTID: "print-link",
  11. ROLES: [
  12. {id:"worker", name:"Сотрудники ЗСК"},
  13. {id:"deputy", name:"Депутаты ЗСК"}
  14. ],
  15. PANES: {
  16. mainpage: {
  17. id: "personal-mainpage",
  18. isReady: false,
  19. infoClass: "info-cell-title",
  20. adds: {
  21. INFOCELLTEXT: "Личные дела"
  22. }
  23. },
  24. letters: {
  25. id: "personal-letters",
  26. isReady: false,
  27. infoClass: "info-cell-title",
  28. adds: {
  29. IMGCOLS: 9
  30. }
  31. },
  32. employees: {
  33. id: "personal-employees",
  34. isReady: false,
  35. infoClass: "info-cell-title",
  36. adds: {
  37. FIOLIST: "fio-list",
  38. ALPHALIST: "alpha-list"
  39. }
  40. },
  41. files: {
  42. id: "personal-files",
  43. isReady: false,
  44. infoClass: "info-cell-emp",
  45. adds: {
  46. COLUMNS: [
  47. {name:"sort", title:"№<br/>п/п", clazz:"doc-sort"},
  48. {name:"num", title:"Номер документа", clazz:"doc-num"},
  49. {name:"date", title:"Дата", clazz:"doc-date"},
  50. {name:"name", title:"Наименование документа", clazz:"doc-name"}
  51. ],
  52. FILECOL: "name",
  53. FILESTABLEID: "file-table",
  54. FILTERID: "file-filter",
  55. SECTATTR: "sectid",
  56. FILEATTR: "fileid"
  57. }
  58. },
  59. sections: {
  60. id: "personal-sections",
  61. isReady: false,
  62. infoClass: "info-cell-emp",
  63. adds: {
  64. IMGCOLS: 7
  65. }
  66. }
  67. },
  68. SERVLET: "./srvPersonalData",
  69. ALPHABETH: ['А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ё', 'Ж', 'З', 'И', 'Й', 'К', 'Л',
  70. 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т', 'У', 'Ф', 'Х', 'Ц', 'Ч', 'Ш',
  71. 'Щ', 'Ы', 'Э', 'Ю', 'Я'],
  72.  
  73. currentRole: null,
  74. currentLetters: null,
  75. currentAlpha: null,
  76. currentSections: null,
  77.  
  78. /**
  79. * Показ нужной панели и скрытие остальных
  80. */
  81. activatePane: function(activePane) {
  82. for(var pane in this.PANES) {
  83. var curPaneId = this.PANES[pane].id;
  84. var curPaneElem = dojo.byId(curPaneId);
  85. if(curPaneId != activePane.id) {
  86. dojo.style(curPaneElem, "display", "none");
  87. } else {
  88. dojo.style(curPaneElem, "display", "block");
  89. }
  90. }
  91. },
  92.  
  93. /**
  94. * Очистка панели
  95. * pane - объект типа "панель" или имя панели
  96. */
  97. clearPane: function(pane) {
  98. if(typeof(pane) == "string") {
  99. var panes = this.PANES;
  100. for(var num in panes) {
  101. var pn = panes[num];
  102. if(pn.id == pane) {
  103. pane = pn;
  104. break;
  105. }
  106. }
  107. }
  108. pane.isReady = false;
  109. dojo.byId(pane.id).innerHTML = "";
  110. },
  111.  
  112. /**
  113. * Устанавливает заголовок в правом верхнем углу (data принимает строку или элементы)
  114. */
  115. setHeader: function(clazz, data) {
  116. var header = dojo.byId(this.INFOCELL);
  117. dojo.attr(header, "class", "");
  118. dojo.addClass(header, clazz);
  119. if(typeof(data) == "string") {
  120. header.innerHTML = data;
  121. } else {
  122. header.innerHTML = "";
  123. header.appendChild(data);
  124. }
  125. },
  126.  
  127. /**
  128. * Создать кнопки назад и смены роли
  129. */
  130. _createBack: function(onclick, parent) {
  131. var back = document.createElement("DIV");
  132. dojo.addClass(back, this.BACKCLASS);
  133. dojo.attr(back, "onClick", onclick);
  134. back.innerHTML = "Назад";
  135. parent.appendChild(back);
  136.  
  137. var role, shift = null;
  138. for(var num in this.ROLES) {
  139. role = this.ROLES[num];
  140. if(this.currentRole != role) {
  141. shift = document.createElement("DIV");
  142. dojo.addClass(shift, this.BACKCLASS);
  143. dojo.attr(shift, "onClick", "personal.showLetters('" + role.id + "')");
  144. shift.innerHTML = role.name;
  145. parent.appendChild(shift);
  146. }
  147. }
  148. },
  149.  
  150. /**
  151. * Обновление текущей роли при обновлении алфавита
  152. */
  153. _updateRole: function(roleId) {
  154. if(!this.currentRole || (roleId && this.currentRole.id != roleId)) {
  155. var role = null;
  156. for(var rl in this.ROLES) {
  157. role = this.ROLES[rl];
  158. if(role.id == roleId) {
  159. this.currentRole = role;
  160. var pane = null;
  161. for(var pn in this.PANES) {
  162. pane = this.PANES[pn];
  163. this.clearPane(pane);
  164. }
  165. break;
  166. }
  167. }
  168. }
  169. },
  170.  
  171. _buildEmpPhoto: function(empId) {
  172. var img = document.createElement("IMG");
  173. img.id = this.EMPPHOTOID;
  174. img.src = this.SERVLET + "?call=empfile&empid=" + empId;
  175. return img;
  176. },
  177.  
  178. _buildEmpInfo: function(empId) {
  179. var call = "empinfo";
  180. var deferred = new dojo.Deferred();
  181. var args = {
  182. url: this.SERVLET,
  183. handleAs: "json",
  184. content: {
  185. call: call,
  186. empid: empId
  187. },
  188. load: function(data) {
  189. var div = document.createElement("DIV");
  190. var item, p = null;
  191. for(var num in data) {
  192. item = data[num];
  193. p = document.createElement("P");
  194. dojo.addClass(p, "info-cell-emp-" + num);
  195. p.innerHTML = item;
  196. div.appendChild(p);
  197. }
  198. deferred.callback(div);
  199. }
  200. };
  201. dojo.xhrGet(args);
  202. return deferred;
  203. },
  204.  
  205. _createMainTable: function(pane, count) {
  206. var parent = dojo.byId(pane.id);
  207.  
  208. var table = document.createElement("TABLE");
  209. parent.appendChild(table);
  210. var tr, td, div, p = null;
  211.  
  212. dojo.attr(table, "align", "center");
  213. dojo.addClass(table, "maintable");
  214.  
  215. tr = document.createElement("TR");
  216. table.appendChild(tr);
  217. var roles = this.ROLES;
  218. for(var num in roles) {
  219. var role = roles[num].id;
  220. td = document.createElement("TD");
  221. dojo.attr(td, "align", "center");
  222. tr.appendChild(td);
  223.  
  224. div = document.createElement("DIV");
  225. dojo.addClass(div, role);
  226. dojo.attr(div, "onClick", "personal.showLetters(\"" + role + "\")");
  227. td.appendChild(div);
  228.  
  229. p = document.createElement("P");
  230. p.innerHTML = count[role];
  231. div.appendChild(p);
  232. }
  233.  
  234. },
  235.  
  236. showMainPage: function() { //показать главную страницу личных дел
  237. var self = this;
  238. var pane = this.PANES.mainpage;
  239.  
  240. this.activatePane(pane);
  241.  
  242. this.setHeader(pane.infoClass, pane.adds.INFOCELLTEXT);
  243.  
  244. if(!pane.isReady) {
  245. var call = "empsnumber";
  246. var args = {
  247. url: this.SERVLET,
  248. handleAs: "json",
  249. content: {
  250. call: call
  251. },
  252. load: function(data) {
  253. self._createMainTable(pane, data);
  254. pane.isReady = true;
  255. }
  256. };
  257. dojo.xhrGet(args);
  258. }
  259. },
  260.  
  261. _createLettersTable: function(pane) { //создаем таблицу в панели букв
  262. var parent = dojo.byId(pane.id);
  263.  
  264. this._createBack("personal.showMainPage()", parent);
  265.  
  266. var table = document.createElement("TABLE");
  267. parent.appendChild(table);
  268. var tr, td, img = null;
  269.  
  270. dojo.attr(table, "align", "center");
  271. dojo.addClass(table, "letterstable");
  272.  
  273. var exists, alpha, subsrc = null;
  274.  
  275. for(var num in this.ALPHABETH) { //бежим по всему алфавиту
  276. alpha = this.ALPHABETH[num];
  277. exists = (this.currentLetters.indexOf(alpha) < 0 ? false : true);
  278. subsrc = (exists ? "_b.png" : "_g.png");
  279. if(num % pane.adds.IMGCOLS == 0) { //если делится на кол-во строк без остатка, рисуем новую строку
  280. tr = document.createElement("TR");
  281. table.appendChild(tr);
  282. }
  283. td = document.createElement("TD");
  284. tr.appendChild(td);
  285. img = document.createElement("IMG");
  286. dojo.attr(img, "letter", alpha);
  287. dojo.attr(img, "src", "./imgs/alpha/" + (++num) + subsrc);
  288. if(exists) {
  289. dojo.addClass(img, this.ACTIVECSSCLASS);
  290. dojo.attr(img, "onClick", "personal.showEmployees('" + alpha + "')");
  291. }
  292. td.appendChild(img);
  293. }
  294. return table;
  295. },
  296.  
  297. _addImgAllLetters: function(pane, table) {
  298. var tr, td, img = null;
  299. tr = document.createElement("TR");
  300. table.appendChild(tr);
  301. td = document.createElement("TD");
  302. dojo.attr(td, "align", "right");
  303. dojo.attr(td, "colspan", pane.adds.IMGCOLS);
  304. dojo.addClass(td, "lettersall");
  305. tr.appendChild(td);
  306. img = document.createElement("IMG");
  307. dojo.addClass(img, this.ACTIVECSSCLASS);
  308. dojo.attr(img, "letter", "Все");
  309. dojo.attr(img, "src", "./imgs/alpha/32_b.png");
  310. dojo.attr(img, "onClick", "personal.showEmployees('')");
  311. td.appendChild(img);
  312. },
  313.  
  314. showLetters: function(roleId) { //показать панель букв
  315. var self = this;
  316. var pane = this.PANES.letters;
  317.  
  318. this.activatePane(pane);
  319.  
  320. this._updateRole(roleId);
  321.  
  322. this.setHeader(pane.infoClass, this.currentRole.name);
  323.  
  324. if(!pane.isReady) { //Если панель уже была загружены, снова ее не грузим
  325. var call = "activeletters";
  326. var args = {
  327. url: this.SERVLET,
  328. handleAs: "json",
  329. content: {
  330. call: call,
  331. role: self.currentRole.id
  332. },
  333. load: function(data) {
  334. self.currentLetters = data.letters;
  335. var table = self._createLettersTable(pane);
  336. self._addImgAllLetters(pane, table);
  337. pane.isReady = true;
  338. }
  339. };
  340. dojo.xhrGet(args);
  341. }
  342. },
  343.  
  344. _createLettersString: function(pane) {
  345. var parent = dojo.byId(pane.id);
  346.  
  347. this._createBack("personal.showLetters(\"" + this.currentRole.id + "\")", parent);
  348.  
  349. var div = document.createElement("DIV");
  350. div.id = pane.adds.ALPHALIST;
  351.  
  352. parent.appendChild(div);
  353.  
  354. var a = null;
  355. var alpha = null;
  356. for(var num in this.ALPHABETH) {
  357. alpha = this.ALPHABETH[num];
  358. a = document.createElement("A");
  359. dojo.attr(a, "letter", alpha);
  360. a.innerHTML = alpha;
  361. if(this.currentLetters.indexOf(alpha) >= 0) {
  362. dojo.addClass(a, this.ACTIVECSSCLASS);
  363. dojo.attr(a, "onClick", "personal.filterEmployees('" + alpha + "')");
  364. }
  365. div.appendChild(a);
  366. }
  367. return div;
  368. },
  369.  
  370. _addStringAllLetters: function(div) {
  371. var a = document.createElement("A");
  372. dojo.attr(a, "letter", "Все");
  373. a.innerHTML = "Все";
  374. dojo.addClass(a, this.ACTIVECSSCLASS);
  375. dojo.attr(a, "onClick", "personal.filterEmployees('')");
  376. div.appendChild(a);
  377. },
  378.  
  379. _createFioList: function(pane, fios) {
  380. var parent = dojo.byId(pane.id);
  381.  
  382. var div = document.createElement("DIV");
  383. dojo.attr(div, "align", "center");
  384. parent.appendChild(div);
  385.  
  386. var ul = document.createElement("UL");
  387. ul.id = pane.adds.FIOLIST;
  388. div.appendChild(ul);
  389.  
  390. for(var num in fios) {
  391. var fio = fios[num];
  392. var li = document.createElement("LI");
  393. li.id = fio.id;
  394. dojo.attr(li, "letter", fio.fio.substr(0, 1).toUpperCase());
  395. dojo.attr(li, "commid", fio.commid);
  396. dojo.attr(li, "onClick", "personal.showDocumentSections('" + fio.id + "')");
  397. li.textContent = fio.fio;
  398. ul.appendChild(li);
  399. }
  400. },
  401.  
  402. showEmployees: function(alpha) { //показать панель фамилий
  403. var self = this;
  404. var pane = this.PANES.employees;
  405.  
  406. this.activatePane(pane);
  407. this.setHeader(pane.infoClass, this.currentRole.name);
  408.  
  409. if(!pane.isReady) { //Если панель уже была загружены, снова ее не грузим
  410. var div = this._createLettersString(pane);
  411. this._addStringAllLetters(div);
  412. var call = "employees";
  413. var args = {
  414. url: this.SERVLET,
  415. handleAs: "json",
  416. content: {
  417. call: call,
  418. role: self.currentRole.id
  419. },
  420. load: function(data) {
  421. self._createFioList(pane, data.fiolist);
  422. pane.isReady = true;
  423. self.filterEmployees(alpha);
  424. }
  425. };
  426. dojo.xhrGet(args);
  427. } else {
  428. this.filterEmployees(alpha);
  429. }
  430. },
  431.  
  432. _addImgAllSections: function(table, empId) {
  433. var tr, td, div, span = null;
  434. tr = document.createElement("TR");
  435. table.appendChild(tr);
  436. td = document.createElement("TD");
  437. dojo.addClass(td, "lettersall");
  438. dojo.attr(td, "align", "center");
  439. tr.appendChild(td);
  440. div = document.createElement("DIV");
  441. dojo.addClass(div, this.ACTIVECSSCLASS);
  442. dojo.attr(div, "onClick", "personal.showPersonalFiles('" + empId + "', '')");
  443. td.appendChild(div);
  444. span = document.createElement("SPAN");
  445. span.innerHTML = "Все документы";
  446. div.appendChild(span);
  447. return tr;
  448. },
  449.  
  450. _createSectionsTable: function(pane, sections, empId) { //создаем таблицу в панели типов документа
  451. var parent = dojo.byId(pane.id);
  452.  
  453. this._createBack("personal.clearPane('" + pane.id + "'); personal.showEmployees('" + this.currentAlpha + "')", parent);
  454.  
  455. var table = document.createElement("TABLE");
  456. parent.appendChild(table);
  457. var tr, td, div, span = null;
  458.  
  459. dojo.attr(table, "align", "center");
  460. dojo.addClass(table, "sectionstable");
  461.  
  462. var exists, section = null;
  463.  
  464. tr = this._addImgAllSections(table, empId);
  465.  
  466. for(var num in sections) { //бежим по всем типам документов
  467. section = sections[num];
  468. num++; //из-за того, что первый элемент - ВСЕ
  469. exists = (section.count > 0 ? true : false);
  470. if(num % pane.adds.IMGCOLS == 0) { //если делится на кол-во строк без остатка, рисуем новую строку
  471. tr = document.createElement("TR");
  472. table.appendChild(tr);
  473. }
  474. td = document.createElement("TD");
  475. dojo.attr(td, "align", "center");
  476. tr.appendChild(td);
  477. div = document.createElement("DIV");
  478. if(exists) {
  479. dojo.addClass(div, this.ACTIVECSSCLASS);
  480. dojo.attr(div, "onClick", "personal.showPersonalFiles('" + empId + "', '" + section.id + "')");
  481. }
  482. td.appendChild(div);
  483. span = document.createElement("SPAN");
  484. span.innerHTML = section.name;
  485. div.appendChild(span);
  486. }
  487. return table;
  488. },
  489.  
  490. showDocumentSections: function(empId) {
  491. var self = this;
  492. var pane = this.PANES.sections;
  493. this.activatePane(pane);
  494. if(!pane.isReady) { //Если панель уже была загружены, снова ее не грузим
  495. var call = "sections";
  496. var args = {
  497. url: this.SERVLET,
  498. handleAs: "json",
  499. content: {
  500. call: call,
  501. empid: empId
  502. },
  503. load: function(data) {
  504. self.currentSections = data.sections;
  505. self._createSectionsTable(pane, self.currentSections, empId);
  506. pane.isReady = true;
  507. self._buildEmpInfo(empId).addCallback(function(info) {
  508. var head = document.createElement("DIV");
  509. head.appendChild(self._buildEmpPhoto(empId));
  510. head.appendChild(info);
  511. self.setHeader(pane.infoClass, head);
  512. });
  513. }
  514. };
  515. dojo.xhrGet(args);
  516. }
  517. },
  518.  
  519. _createFilesTableRow: function(pane, table, isHead, values) {
  520. var cols = pane.adds.COLUMNS;
  521.  
  522. var tr, th, td, span = null;
  523.  
  524. tr = document.createElement("TR");
  525. for(var num in cols) {
  526. var col = cols[num];
  527. if(isHead) {
  528. th = document.createElement("TH");
  529. span = document.createElement("SPAN");
  530. span.innerHTML = col.title;
  531. th.appendChild(span);
  532. tr.appendChild(th);
  533. } else {
  534. td = document.createElement("TD");
  535. var clazz = col.clazz;
  536. if(clazz) {
  537. dojo.addClass(td, clazz);
  538. }
  539. if(col.name != pane.adds.FILECOL) {
  540. span = document.createElement("SPAN");
  541. span.innerHTML = values[num];
  542. td.appendChild(span);
  543. } else {
  544. var a = document.createElement("A");
  545. span = document.createElement("SPAN");
  546. span.innerHTML = values[num];
  547. a.appendChild(span);
  548. dojo.attr(a, "target", "_blank");
  549. var fileattr = pane.adds.FILEATTR;
  550. dojo.attr(a, "href", this.SERVLET + "?call=empfile&docid=" + values[fileattr]);
  551. td.appendChild(a);
  552. }
  553. tr.appendChild(td);
  554. var sectattr = pane.adds.SECTATTR;
  555. dojo.attr(tr, sectattr, values[sectattr]);
  556. }
  557. }
  558. table.appendChild(tr);
  559. return table;
  560. },
  561.  
  562. _createFilesTable: function(pane, files, empId, sectionId) {
  563. var parent = dojo.byId(pane.id);
  564.  
  565. this._createPrintButton(pane);
  566. this._createBack("personal.clearPane('" + pane.id + "'); personal.showDocumentSections('" + empId + "')", parent)
  567. this._createFilesFilter(pane, files, sectionId);
  568.  
  569. var table = document.createElement("TABLE");
  570. table.id = pane.adds.FILESTABLEID;
  571. parent.appendChild(table);
  572.  
  573. dojo.attr(table, "align", "center");
  574. dojo.attr(table, "cellspacing", 0);
  575. dojo.addClass(table, "filestable");
  576.  
  577. this._createFilesTableRow(pane, table, true);
  578.  
  579. var file, values = null;
  580. for(var num in files) { //бежим по всем файлам
  581. file = files[num];
  582. values = {0:table.rows.length, 1:file.num, 2:file.datedoc, 3:file.name, "fileid":file.id, "sectid":file.sectid};
  583. this._createFilesTableRow(pane, table, false, values);
  584. }
  585. return table;
  586. },
  587.  
  588. _createPrintButton: function(pane) {
  589. var parent = dojo.byId(pane.id);
  590.  
  591. var a = document.createElement("A");
  592. a.id = this.PRINTID;
  593. a.innerHTML = "Печать";
  594. dojo.attr(a, "onClick", "print()");
  595. parent.appendChild(a);
  596. },
  597.  
  598. _createFilesFilter: function(pane, files, sectionId) {
  599. var parent = dojo.byId(pane.id);
  600.  
  601. var select, option = null;
  602.  
  603. var sections = new Array();
  604. for(var num in files) {
  605. var file = files[num];
  606. if(sections.indexOf(file.sectid) < 0) {
  607. sections[file.sectid] = file.sectname;
  608. }
  609. }
  610.  
  611. select = document.createElement("SELECT");
  612. select.id = pane.adds.FILTERID;
  613. parent.appendChild(select);
  614. option = document.createElement("OPTION");
  615. dojo.attr(option, "onClick", "personal.filterFiles('" + pane.adds.FILESTABLEID + "','')");
  616. option.text = "- Все документы -";
  617. select.appendChild(option);
  618.  
  619. for(var nm in sections) {
  620. var section = sections[nm];
  621. option = document.createElement("OPTION");
  622. dojo.attr(option, "onClick", "personal.filterFiles('" + pane.adds.FILESTABLEID + "','" + nm + "')");
  623. option.text = section;
  624. if(nm == sectionId) {
  625. option.selected = true;
  626. }
  627. select.appendChild(option);
  628. }
  629. },
  630.  
  631. showPersonalFiles: function(empId, sectionId) { //показать файлы личного дела
  632. var self = this;
  633. var pane = this.PANES.files;
  634. this.activatePane(pane);
  635. if(!pane.isReady) { //Если панель уже была загружены, снова ее не грузим
  636. var call = "filelist";
  637. var args = {
  638. url: this.SERVLET,
  639. handleAs: "json",
  640. content: {
  641. call: call,
  642. empid: empId
  643. },
  644. load: function(data) {
  645. self._createFilesTable(pane, data.filelist, empId, sectionId);
  646. self.filterFiles(pane.adds.FILESTABLEID, sectionId);
  647. pane.isReady = true;
  648. self._buildEmpInfo(empId).addCallback(function(info) {
  649. var head = document.createElement("DIV");
  650. head.appendChild(self._buildEmpPhoto(empId));
  651. head.appendChild(info);
  652. self.setHeader(pane.infoClass, head);
  653. });
  654. }
  655. };
  656. dojo.xhrGet(args);
  657. } else {
  658. this.filterFiles(pane.adds.FILESTABLEID, sectionId);
  659. }
  660. },
  661.  
  662. filterEmployees: function(alpha) { //фильтруем список людей по букве
  663. this.currentAlpha = alpha;
  664. var list = this.PANES.employees.adds.FIOLIST;
  665. var visible = dojo.query("[letter$=" + this.currentAlpha + "]", list);
  666.  
  667. dojo.query("li", list).forEach(function(fio){
  668. if(visible.indexOf(fio) >= 0) {
  669. dojo.style(fio, "display", "block");
  670. } else {
  671. dojo.style(fio, "display", "none");
  672. }
  673. });
  674. },
  675.  
  676. filterFiles: function(tableId, sectionId) {
  677. var filesTable = dojo.byId(tableId);
  678. var rows = filesTable.rows;
  679. var visible = dojo.query("[sectid$=" + sectionId + "]", filesTable);
  680. var cnt = 0;
  681. for(var num in rows) {
  682. var row = rows[num];
  683. if(row.rowIndex > 0) {
  684. if(visible.indexOf(row) < 0 && sectionId) {
  685. dojo.style(row, "display", "none");
  686. } else {
  687. dojo.style(row, "display", "");
  688. row.cells[0].innerHTML = ++cnt;
  689. }
  690. }
  691. }
  692. }
  693. });
Add Comment
Please, Sign In to add comment