Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- dojo.provide("yug.dlgs.jePersonal");
- dojo.declare("yug.dlgs.jePersonal", null, {
- PARENT: "ttab_45",
- EMPPHOTOID: "personal-foto",
- BACKCLASS: "personal-back",
- ACTIVECSSCLASS: "active-element",
- INFOCELL: "info-cell",
- PRINTERHIDE: ["main", "mainMenu", "mainMenuBtn"],
- PRINTID: "print-link",
- ROLES: [
- {id:"worker", name:"Сотрудники ЗСК"},
- {id:"deputy", name:"Депутаты ЗСК"}
- ],
- PANES: {
- mainpage: {
- id: "personal-mainpage",
- isReady: false,
- infoClass: "info-cell-title",
- adds: {
- INFOCELLTEXT: "Личные дела"
- }
- },
- letters: {
- id: "personal-letters",
- isReady: false,
- infoClass: "info-cell-title",
- adds: {
- IMGCOLS: 9
- }
- },
- employees: {
- id: "personal-employees",
- isReady: false,
- infoClass: "info-cell-title",
- adds: {
- FIOLIST: "fio-list",
- ALPHALIST: "alpha-list"
- }
- },
- files: {
- id: "personal-files",
- isReady: false,
- infoClass: "info-cell-emp",
- adds: {
- COLUMNS: [
- {name:"sort", title:"№<br/>п/п", clazz:"doc-sort"},
- {name:"num", title:"Номер документа", clazz:"doc-num"},
- {name:"date", title:"Дата", clazz:"doc-date"},
- {name:"name", title:"Наименование документа", clazz:"doc-name"}
- ],
- FILECOL: "name",
- FILESTABLEID: "file-table",
- FILTERID: "file-filter",
- SECTATTR: "sectid",
- FILEATTR: "fileid"
- }
- },
- sections: {
- id: "personal-sections",
- isReady: false,
- infoClass: "info-cell-emp",
- adds: {
- IMGCOLS: 7
- }
- }
- },
- SERVLET: "./srvPersonalData",
- ALPHABETH: ['А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ё', 'Ж', 'З', 'И', 'Й', 'К', 'Л',
- 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т', 'У', 'Ф', 'Х', 'Ц', 'Ч', 'Ш',
- 'Щ', 'Ы', 'Э', 'Ю', 'Я'],
- currentRole: null,
- currentLetters: null,
- currentAlpha: null,
- currentSections: null,
- /**
- * Показ нужной панели и скрытие остальных
- */
- activatePane: function(activePane) {
- for(var pane in this.PANES) {
- var curPaneId = this.PANES[pane].id;
- var curPaneElem = dojo.byId(curPaneId);
- if(curPaneId != activePane.id) {
- dojo.style(curPaneElem, "display", "none");
- } else {
- dojo.style(curPaneElem, "display", "block");
- }
- }
- },
- /**
- * Очистка панели
- * pane - объект типа "панель" или имя панели
- */
- clearPane: function(pane) {
- if(typeof(pane) == "string") {
- var panes = this.PANES;
- for(var num in panes) {
- var pn = panes[num];
- if(pn.id == pane) {
- pane = pn;
- break;
- }
- }
- }
- pane.isReady = false;
- dojo.byId(pane.id).innerHTML = "";
- },
- /**
- * Устанавливает заголовок в правом верхнем углу (data принимает строку или элементы)
- */
- setHeader: function(clazz, data) {
- var header = dojo.byId(this.INFOCELL);
- dojo.attr(header, "class", "");
- dojo.addClass(header, clazz);
- if(typeof(data) == "string") {
- header.innerHTML = data;
- } else {
- header.innerHTML = "";
- header.appendChild(data);
- }
- },
- /**
- * Создать кнопки назад и смены роли
- */
- _createBack: function(onclick, parent) {
- var back = document.createElement("DIV");
- dojo.addClass(back, this.BACKCLASS);
- dojo.attr(back, "onClick", onclick);
- back.innerHTML = "Назад";
- parent.appendChild(back);
- var role, shift = null;
- for(var num in this.ROLES) {
- role = this.ROLES[num];
- if(this.currentRole != role) {
- shift = document.createElement("DIV");
- dojo.addClass(shift, this.BACKCLASS);
- dojo.attr(shift, "onClick", "personal.showLetters('" + role.id + "')");
- shift.innerHTML = role.name;
- parent.appendChild(shift);
- }
- }
- },
- /**
- * Обновление текущей роли при обновлении алфавита
- */
- _updateRole: function(roleId) {
- if(!this.currentRole || (roleId && this.currentRole.id != roleId)) {
- var role = null;
- for(var rl in this.ROLES) {
- role = this.ROLES[rl];
- if(role.id == roleId) {
- this.currentRole = role;
- var pane = null;
- for(var pn in this.PANES) {
- pane = this.PANES[pn];
- this.clearPane(pane);
- }
- break;
- }
- }
- }
- },
- _buildEmpPhoto: function(empId) {
- var img = document.createElement("IMG");
- img.id = this.EMPPHOTOID;
- img.src = this.SERVLET + "?call=empfile&empid=" + empId;
- return img;
- },
- _buildEmpInfo: function(empId) {
- var call = "empinfo";
- var deferred = new dojo.Deferred();
- var args = {
- url: this.SERVLET,
- handleAs: "json",
- content: {
- call: call,
- empid: empId
- },
- load: function(data) {
- var div = document.createElement("DIV");
- var item, p = null;
- for(var num in data) {
- item = data[num];
- p = document.createElement("P");
- dojo.addClass(p, "info-cell-emp-" + num);
- p.innerHTML = item;
- div.appendChild(p);
- }
- deferred.callback(div);
- }
- };
- dojo.xhrGet(args);
- return deferred;
- },
- _createMainTable: function(pane, count) {
- var parent = dojo.byId(pane.id);
- var table = document.createElement("TABLE");
- parent.appendChild(table);
- var tr, td, div, p = null;
- dojo.attr(table, "align", "center");
- dojo.addClass(table, "maintable");
- tr = document.createElement("TR");
- table.appendChild(tr);
- var roles = this.ROLES;
- for(var num in roles) {
- var role = roles[num].id;
- td = document.createElement("TD");
- dojo.attr(td, "align", "center");
- tr.appendChild(td);
- div = document.createElement("DIV");
- dojo.addClass(div, role);
- dojo.attr(div, "onClick", "personal.showLetters(\"" + role + "\")");
- td.appendChild(div);
- p = document.createElement("P");
- p.innerHTML = count[role];
- div.appendChild(p);
- }
- },
- showMainPage: function() { //показать главную страницу личных дел
- var self = this;
- var pane = this.PANES.mainpage;
- this.activatePane(pane);
- this.setHeader(pane.infoClass, pane.adds.INFOCELLTEXT);
- if(!pane.isReady) {
- var call = "empsnumber";
- var args = {
- url: this.SERVLET,
- handleAs: "json",
- content: {
- call: call
- },
- load: function(data) {
- self._createMainTable(pane, data);
- pane.isReady = true;
- }
- };
- dojo.xhrGet(args);
- }
- },
- _createLettersTable: function(pane) { //создаем таблицу в панели букв
- var parent = dojo.byId(pane.id);
- this._createBack("personal.showMainPage()", parent);
- var table = document.createElement("TABLE");
- parent.appendChild(table);
- var tr, td, img = null;
- dojo.attr(table, "align", "center");
- dojo.addClass(table, "letterstable");
- var exists, alpha, subsrc = null;
- for(var num in this.ALPHABETH) { //бежим по всему алфавиту
- alpha = this.ALPHABETH[num];
- exists = (this.currentLetters.indexOf(alpha) < 0 ? false : true);
- subsrc = (exists ? "_b.png" : "_g.png");
- if(num % pane.adds.IMGCOLS == 0) { //если делится на кол-во строк без остатка, рисуем новую строку
- tr = document.createElement("TR");
- table.appendChild(tr);
- }
- td = document.createElement("TD");
- tr.appendChild(td);
- img = document.createElement("IMG");
- dojo.attr(img, "letter", alpha);
- dojo.attr(img, "src", "./imgs/alpha/" + (++num) + subsrc);
- if(exists) {
- dojo.addClass(img, this.ACTIVECSSCLASS);
- dojo.attr(img, "onClick", "personal.showEmployees('" + alpha + "')");
- }
- td.appendChild(img);
- }
- return table;
- },
- _addImgAllLetters: function(pane, table) {
- var tr, td, img = null;
- tr = document.createElement("TR");
- table.appendChild(tr);
- td = document.createElement("TD");
- dojo.attr(td, "align", "right");
- dojo.attr(td, "colspan", pane.adds.IMGCOLS);
- dojo.addClass(td, "lettersall");
- tr.appendChild(td);
- img = document.createElement("IMG");
- dojo.addClass(img, this.ACTIVECSSCLASS);
- dojo.attr(img, "letter", "Все");
- dojo.attr(img, "src", "./imgs/alpha/32_b.png");
- dojo.attr(img, "onClick", "personal.showEmployees('')");
- td.appendChild(img);
- },
- showLetters: function(roleId) { //показать панель букв
- var self = this;
- var pane = this.PANES.letters;
- this.activatePane(pane);
- this._updateRole(roleId);
- this.setHeader(pane.infoClass, this.currentRole.name);
- if(!pane.isReady) { //Если панель уже была загружены, снова ее не грузим
- var call = "activeletters";
- var args = {
- url: this.SERVLET,
- handleAs: "json",
- content: {
- call: call,
- role: self.currentRole.id
- },
- load: function(data) {
- self.currentLetters = data.letters;
- var table = self._createLettersTable(pane);
- self._addImgAllLetters(pane, table);
- pane.isReady = true;
- }
- };
- dojo.xhrGet(args);
- }
- },
- _createLettersString: function(pane) {
- var parent = dojo.byId(pane.id);
- this._createBack("personal.showLetters(\"" + this.currentRole.id + "\")", parent);
- var div = document.createElement("DIV");
- div.id = pane.adds.ALPHALIST;
- parent.appendChild(div);
- var a = null;
- var alpha = null;
- for(var num in this.ALPHABETH) {
- alpha = this.ALPHABETH[num];
- a = document.createElement("A");
- dojo.attr(a, "letter", alpha);
- a.innerHTML = alpha;
- if(this.currentLetters.indexOf(alpha) >= 0) {
- dojo.addClass(a, this.ACTIVECSSCLASS);
- dojo.attr(a, "onClick", "personal.filterEmployees('" + alpha + "')");
- }
- div.appendChild(a);
- }
- return div;
- },
- _addStringAllLetters: function(div) {
- var a = document.createElement("A");
- dojo.attr(a, "letter", "Все");
- a.innerHTML = "Все";
- dojo.addClass(a, this.ACTIVECSSCLASS);
- dojo.attr(a, "onClick", "personal.filterEmployees('')");
- div.appendChild(a);
- },
- _createFioList: function(pane, fios) {
- var parent = dojo.byId(pane.id);
- var div = document.createElement("DIV");
- dojo.attr(div, "align", "center");
- parent.appendChild(div);
- var ul = document.createElement("UL");
- ul.id = pane.adds.FIOLIST;
- div.appendChild(ul);
- for(var num in fios) {
- var fio = fios[num];
- var li = document.createElement("LI");
- li.id = fio.id;
- dojo.attr(li, "letter", fio.fio.substr(0, 1).toUpperCase());
- dojo.attr(li, "commid", fio.commid);
- dojo.attr(li, "onClick", "personal.showDocumentSections('" + fio.id + "')");
- li.textContent = fio.fio;
- ul.appendChild(li);
- }
- },
- showEmployees: function(alpha) { //показать панель фамилий
- var self = this;
- var pane = this.PANES.employees;
- this.activatePane(pane);
- this.setHeader(pane.infoClass, this.currentRole.name);
- if(!pane.isReady) { //Если панель уже была загружены, снова ее не грузим
- var div = this._createLettersString(pane);
- this._addStringAllLetters(div);
- var call = "employees";
- var args = {
- url: this.SERVLET,
- handleAs: "json",
- content: {
- call: call,
- role: self.currentRole.id
- },
- load: function(data) {
- self._createFioList(pane, data.fiolist);
- pane.isReady = true;
- self.filterEmployees(alpha);
- }
- };
- dojo.xhrGet(args);
- } else {
- this.filterEmployees(alpha);
- }
- },
- _addImgAllSections: function(table, empId) {
- var tr, td, div, span = null;
- tr = document.createElement("TR");
- table.appendChild(tr);
- td = document.createElement("TD");
- dojo.addClass(td, "lettersall");
- dojo.attr(td, "align", "center");
- tr.appendChild(td);
- div = document.createElement("DIV");
- dojo.addClass(div, this.ACTIVECSSCLASS);
- dojo.attr(div, "onClick", "personal.showPersonalFiles('" + empId + "', '')");
- td.appendChild(div);
- span = document.createElement("SPAN");
- span.innerHTML = "Все документы";
- div.appendChild(span);
- return tr;
- },
- _createSectionsTable: function(pane, sections, empId) { //создаем таблицу в панели типов документа
- var parent = dojo.byId(pane.id);
- this._createBack("personal.clearPane('" + pane.id + "'); personal.showEmployees('" + this.currentAlpha + "')", parent);
- var table = document.createElement("TABLE");
- parent.appendChild(table);
- var tr, td, div, span = null;
- dojo.attr(table, "align", "center");
- dojo.addClass(table, "sectionstable");
- var exists, section = null;
- tr = this._addImgAllSections(table, empId);
- for(var num in sections) { //бежим по всем типам документов
- section = sections[num];
- num++; //из-за того, что первый элемент - ВСЕ
- exists = (section.count > 0 ? true : false);
- if(num % pane.adds.IMGCOLS == 0) { //если делится на кол-во строк без остатка, рисуем новую строку
- tr = document.createElement("TR");
- table.appendChild(tr);
- }
- td = document.createElement("TD");
- dojo.attr(td, "align", "center");
- tr.appendChild(td);
- div = document.createElement("DIV");
- if(exists) {
- dojo.addClass(div, this.ACTIVECSSCLASS);
- dojo.attr(div, "onClick", "personal.showPersonalFiles('" + empId + "', '" + section.id + "')");
- }
- td.appendChild(div);
- span = document.createElement("SPAN");
- span.innerHTML = section.name;
- div.appendChild(span);
- }
- return table;
- },
- showDocumentSections: function(empId) {
- var self = this;
- var pane = this.PANES.sections;
- this.activatePane(pane);
- if(!pane.isReady) { //Если панель уже была загружены, снова ее не грузим
- var call = "sections";
- var args = {
- url: this.SERVLET,
- handleAs: "json",
- content: {
- call: call,
- empid: empId
- },
- load: function(data) {
- self.currentSections = data.sections;
- self._createSectionsTable(pane, self.currentSections, empId);
- pane.isReady = true;
- self._buildEmpInfo(empId).addCallback(function(info) {
- var head = document.createElement("DIV");
- head.appendChild(self._buildEmpPhoto(empId));
- head.appendChild(info);
- self.setHeader(pane.infoClass, head);
- });
- }
- };
- dojo.xhrGet(args);
- }
- },
- _createFilesTableRow: function(pane, table, isHead, values) {
- var cols = pane.adds.COLUMNS;
- var tr, th, td, span = null;
- tr = document.createElement("TR");
- for(var num in cols) {
- var col = cols[num];
- if(isHead) {
- th = document.createElement("TH");
- span = document.createElement("SPAN");
- span.innerHTML = col.title;
- th.appendChild(span);
- tr.appendChild(th);
- } else {
- td = document.createElement("TD");
- var clazz = col.clazz;
- if(clazz) {
- dojo.addClass(td, clazz);
- }
- if(col.name != pane.adds.FILECOL) {
- span = document.createElement("SPAN");
- span.innerHTML = values[num];
- td.appendChild(span);
- } else {
- var a = document.createElement("A");
- span = document.createElement("SPAN");
- span.innerHTML = values[num];
- a.appendChild(span);
- dojo.attr(a, "target", "_blank");
- var fileattr = pane.adds.FILEATTR;
- dojo.attr(a, "href", this.SERVLET + "?call=empfile&docid=" + values[fileattr]);
- td.appendChild(a);
- }
- tr.appendChild(td);
- var sectattr = pane.adds.SECTATTR;
- dojo.attr(tr, sectattr, values[sectattr]);
- }
- }
- table.appendChild(tr);
- return table;
- },
- _createFilesTable: function(pane, files, empId, sectionId) {
- var parent = dojo.byId(pane.id);
- this._createPrintButton(pane);
- this._createBack("personal.clearPane('" + pane.id + "'); personal.showDocumentSections('" + empId + "')", parent)
- this._createFilesFilter(pane, files, sectionId);
- var table = document.createElement("TABLE");
- table.id = pane.adds.FILESTABLEID;
- parent.appendChild(table);
- dojo.attr(table, "align", "center");
- dojo.attr(table, "cellspacing", 0);
- dojo.addClass(table, "filestable");
- this._createFilesTableRow(pane, table, true);
- var file, values = null;
- for(var num in files) { //бежим по всем файлам
- file = files[num];
- values = {0:table.rows.length, 1:file.num, 2:file.datedoc, 3:file.name, "fileid":file.id, "sectid":file.sectid};
- this._createFilesTableRow(pane, table, false, values);
- }
- return table;
- },
- _createPrintButton: function(pane) {
- var parent = dojo.byId(pane.id);
- var a = document.createElement("A");
- a.id = this.PRINTID;
- a.innerHTML = "Печать";
- dojo.attr(a, "onClick", "print()");
- parent.appendChild(a);
- },
- _createFilesFilter: function(pane, files, sectionId) {
- var parent = dojo.byId(pane.id);
- var select, option = null;
- var sections = new Array();
- for(var num in files) {
- var file = files[num];
- if(sections.indexOf(file.sectid) < 0) {
- sections[file.sectid] = file.sectname;
- }
- }
- select = document.createElement("SELECT");
- select.id = pane.adds.FILTERID;
- parent.appendChild(select);
- option = document.createElement("OPTION");
- dojo.attr(option, "onClick", "personal.filterFiles('" + pane.adds.FILESTABLEID + "','')");
- option.text = "- Все документы -";
- select.appendChild(option);
- for(var nm in sections) {
- var section = sections[nm];
- option = document.createElement("OPTION");
- dojo.attr(option, "onClick", "personal.filterFiles('" + pane.adds.FILESTABLEID + "','" + nm + "')");
- option.text = section;
- if(nm == sectionId) {
- option.selected = true;
- }
- select.appendChild(option);
- }
- },
- showPersonalFiles: function(empId, sectionId) { //показать файлы личного дела
- var self = this;
- var pane = this.PANES.files;
- this.activatePane(pane);
- if(!pane.isReady) { //Если панель уже была загружены, снова ее не грузим
- var call = "filelist";
- var args = {
- url: this.SERVLET,
- handleAs: "json",
- content: {
- call: call,
- empid: empId
- },
- load: function(data) {
- self._createFilesTable(pane, data.filelist, empId, sectionId);
- self.filterFiles(pane.adds.FILESTABLEID, sectionId);
- pane.isReady = true;
- self._buildEmpInfo(empId).addCallback(function(info) {
- var head = document.createElement("DIV");
- head.appendChild(self._buildEmpPhoto(empId));
- head.appendChild(info);
- self.setHeader(pane.infoClass, head);
- });
- }
- };
- dojo.xhrGet(args);
- } else {
- this.filterFiles(pane.adds.FILESTABLEID, sectionId);
- }
- },
- filterEmployees: function(alpha) { //фильтруем список людей по букве
- this.currentAlpha = alpha;
- var list = this.PANES.employees.adds.FIOLIST;
- var visible = dojo.query("[letter$=" + this.currentAlpha + "]", list);
- dojo.query("li", list).forEach(function(fio){
- if(visible.indexOf(fio) >= 0) {
- dojo.style(fio, "display", "block");
- } else {
- dojo.style(fio, "display", "none");
- }
- });
- },
- filterFiles: function(tableId, sectionId) {
- var filesTable = dojo.byId(tableId);
- var rows = filesTable.rows;
- var visible = dojo.query("[sectid$=" + sectionId + "]", filesTable);
- var cnt = 0;
- for(var num in rows) {
- var row = rows[num];
- if(row.rowIndex > 0) {
- if(visible.indexOf(row) < 0 && sectionId) {
- dojo.style(row, "display", "none");
- } else {
- dojo.style(row, "display", "");
- row.cells[0].innerHTML = ++cnt;
- }
- }
- }
- }
- });
Add Comment
Please, Sign In to add comment