Commit bdf88e21 authored by Samir Sadyhov's avatar Samir Sadyhov 🤔

выпилен компонент список работ

parent 2e600c02
......@@ -64,7 +64,6 @@
* [Канбан доска](constructor/components/Канбан-доска)
* [представление реестра, с поиском, фильтрацией и кучей дополнительных функций + выгрузка записей в excel](constructor/components/записи%20реестра)
* [Фильтр записей реестра](constructor/components/фильтр)
* [Список работ](constructor/components/Список работ)
### Дополнительно
......
.workflow-work-container {
width: 100%;
height: 100%;
}
.workflow-table-list>thead>tr>th {
vertical-align: middle;
font-weight: bold;
color: #262626;
text-transform: none !important;
-moz-user-select: none;
-webkit-user-select: none;
-ms-user-select: none;
user-select: none;
position: sticky;
top: 0px;
background: #FAFAFA;
cursor: pointer;
}
.workflow-table-list>thead>tr>th {
border-right: 1px solid #E8E8E8;
}
.workflow-table-list>thead>tr>th:after {
content: '';
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
border-bottom: 1px solid #E8E8E8;
z-index: -1;
}
.workflow-table-list>tbody>tr {
cursor: pointer;
-moz-user-select: none;
-webkit-user-select: none;
-ms-user-select: none;
user-select: none;
border-top: 1px solid #E8E8E8;
border-bottom: 1px solid #E8E8E8;
transition: .3s;
}
.workflow-table-list>tbody>tr>td>.uk-checkbox {
background-color: #fff;
}
.workflow-table-list>tbody>tr>td>.uk-checkbox:checked {
background-color: #1e87f0;
}
.workflow-table-list>tbody>[selected],
.workflow-table-list>tbody>tr:hover {
background-color: #E6F7FF;
}
.workflow-table-list {
table-layout: fixed;
font-size: 10pt;
width: 100%;
margin: 0;
}
.workflow-table-container {
background: #fff;
width: 100%;
height: calc(100% - 50px);
overflow: auto;
}
.workflow-table-list td {
padding: 10px;
border-right: 1px solid #E8E8E8;
white-space: nowrap !important;
overflow: hidden !important;
text-overflow: ellipsis;
}
/*пагинатор*/
.workflow-paginator-container {
height: 50px;
width: 100%;
display: flex;
justify-content: center;
align-items: center;
background: #fff;
border-top: 1px solid rgb(196, 196, 196);
}
.workflow-pt-paginator {
height: 32px;
}
.workflow-pt-paginator-container {
width: 168px;
height: 32px;
display: inline-block;
float: right;
}
.workflow-pt-paginator button {
height: 100%;
width: 34px;
background-color: #fff;
border: none;
float: left;
cursor: pointer;
}
.workflow-pt-paginator button:hover {
border-color: orange;
}
.workflow-pt-paginator button[disabled] {
opacity: 0.5;
cursor: default;
border-color: #d6d6d6;
}
.workflow-pt-paginator button.workflow-pt-previous {
background: url('data:image/png;base64,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') no-repeat center;
}
.workflow-pt-paginator button.workflow-pt-next {
background: url('data:image/png;base64,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') no-repeat center;
}
.workflow-pt-paginator .workflow-pt-paginator-content {
display: inline-block;
width: 100px;
height: 100%;
text-align: center;
vertical-align: top;
margin: 0;
padding: 0;
float: left;
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
}
.workflow-pt-paginator .workflow-pt-paginator-content>label {
width: 100%;
display: flex;
justify-content: center;
align-items: center;
height: 100%;
background-color: #fff;
}
.workflow-pt-paginator .workflow-pt-paginator-content>input {
display: none;
width: calc(100% - 4px);
height: calc(100% - 6px);
border: 0;
text-align: center;
padding-top: 3px;
background-color: #fff;
}
.workflow-table-list tbody .new_work {
font-weight: 600;
}
.workflow-table-list tbody .expired_work {
color: #af0100;
}
.workflow-table-list tbody .soon_expired_work {
color: orange;
}
.work-progress-container {
width: 100%;
background-color: #e1e7f3;
border-radius: 5px;
}
.work-progress {
height: 19px;
background-color: #72b8fa;
text-align: center;
line-height: 19px;
color: #222;
border-radius: 5px;
}
.sortable:before {
content: '';
position: absolute;
top: 15px;
right: 20px;
border: solid #262626;
border-width: 0 3px 3px 0;
padding: 3px;
transition: transform .3s;
}
.sortable__down:before {
transform: rotate(45deg);
-webkit-transform: rotate(45deg);
}
.sortable__up:before {
transform: rotate(-135deg);
-webkit-transform: rotate(-135deg);
}
.mobile-table-header {
display: none;
font-weight: 600;
margin-right: 10px;
}
/*context-menu*/
.workflow-context-menu {
position: absolute;
display: none;
background-color: #fff;
box-shadow: 0px 2px 10px rgba(0, 0, 0, 0.2);
padding: 0px;
min-width: 200px;
width: auto;
}
.workflow-context-menu ul {
list-style: none;
margin: 0;
padding: 0;
}
.workflow-context-menu ul li {
padding: 0;
background-color: #fff;
display: block;
}
.workflow-context-menu ul li a {
color: #555;
padding: 10px;
}
.workflow-context-menu ul li a:hover {
background-color: rgb(255, 165, 0, 0.3);
}
.workflow-context-menu ul .uk-disabled a {
color: #dedede;
}
table.work-info {
border-collapse: collapse;
width: 100%;
font-size: 12px;
font-family: sans-serif;
}
table.work-info td {
text-align: left;
color: #222;
}
table.work-info td {
border-bottom: 1px solid #ddd;
padding: 5px;
}
table.work-info tbody>tr:hover {
background-color: rgba(72, 157, 243, 0.2);
}
<div class="workflow-work-container">
<div class="workflow-table-container"></div>
<div class="workflow-paginator-container"></div>
</div>
const compContainer = $(`#${comp.code}`);
const workContainer = compContainer.find(`.workflow-work-container`);
const tableContainer = workContainer.find(`.workflow-table-container`);
const paginatorContainer = workContainer.find(`.workflow-paginator-container`);
const getProgressBar = value => `<div class="work-progress-container"><div class="work-progress" style="width: ${value}%;">${value}%</div></div>`;
const deleteWork = async workID => {
return new Promise(resolve => {
rest.synergyGet(`api/workflow/work/delete?workID=${workID}&locale=${AS.OPTIONS.locale}`, resolve, err => {
console.log(`ERROR [ deleteWork ]: ${JSON.stringify(err)}`);
resolve(null);
});
});
}
const getDocInfo = async workID => {
return new Promise(resolve => {
rest.synergyGet(`api/workflow/work/${workID}/document?&locale=${AS.OPTIONS.locale}`, resolve, err => {
console.log(`ERROR [ deleteWork ]: ${JSON.stringify(err)}`);
resolve(null);
});
});
}
const stopRoute = async documentID => {
return new Promise(resolve => {
rest.synergyPost(`api/docflow/doc/stop_route?documentID=${documentID}&locale=${AS.OPTIONS.locale}`, null, "application/json; charset=UTF-8", resolve, err => {
console.log(`ERROR [ stopRoute ]: ${JSON.stringify(err)}`);
resolve(null);
});
});
}
const Paginator = {
countInPart: 15,
rows: 0,
currentPage: 1,
pages: 0,
update: function(){
this.pages = Math.ceil(this.rows / this.countInPart),
this.label.text(this.currentPage + ' / ' + this.pages);
if(this.pages == 0) {
this.bPrevious.attr('disabled', 'disabled');
this.bNext.attr('disabled', 'disabled');
} else {
if(this.currentPage == 1) {
this.bPrevious.attr('disabled', 'disabled');
if (this.currentPage == this.pages) {
this.bNext.attr('disabled', 'disabled');
} else {
this.bNext.removeAttr('disabled');
}
} else {
this.bPrevious.removeAttr('disabled');
if (this.currentPage == this.pages) {
this.bNext.attr('disabled', 'disabled');
} else {
this.bNext.removeAttr('disabled');
}
}
}
},
addListeners: function(){
this.bNext.click(() => {
this.currentPage++;
this.update();
WorkTable.createBody();
});
this.bPrevious.click(() => {
this.currentPage--;
this.update();
WorkTable.createBody();
});
this.label.on('dblclick', e => {
e.preventDefault();
this.input.show();
this.label.hide();
this.input.on('blur', () => {
this.label.show();
this.input.hide();
});
this.input.val("" + this.currentPage);
this.input.on('keypress', e => {
if (e.which != 8 && e.which != 0 && e.which != 46 && (e.which < 48 || e.which > 57)) return false;
});
this.input.on('keydown', e => {
if(e.which === 13) {
let inputVal = +this.input.val();
if(inputVal && inputVal != this.currentPage && inputVal <= this.pages && inputVal >= 1){
this.currentPage = inputVal;
this.update();
WorkTable.createBody();
}
this.label.show();
this.input.hide();
this.input.off();
}
});
this.input.focus();
});
},
render: function(){
this.container = $('<div class="workflow-pt-container">');
this.paginator = $('<div class="workflow-pt-paginator">');
this.pContent = $('<div class="workflow-pt-paginator-content">');
this.bPrevious = $(`<button class="workflow-pt-previous" disabled="disabled" title="${i18n.tr('Назад')}">`);
this.bNext = $(`<button class="workflow-pt-next" disabled="disabled" title="${i18n.tr('Вперед')}">`);
this.label = $('<label>');
this.input = $('<input type="text">');
paginatorContainer.empty().append(this.container);
this.pContent.append(this.label).append(this.input);
this.paginator.append(this.bPrevious).append(this.pContent).append(this.bNext);
this.container.append(this.paginator);
},
reset: function(countInPart){
this.countInPart = countInPart;
this.rows = countInPart;
this.currentPage = 1;
this.pages = 0;
},
init: function(countInPart = 15){
const {rowsPerPage = countInPart} = localStorage;
this.render();
this.reset(rowsPerPage);
this.addListeners();
}
};
const WorkTable = {
filterType: 'OWN_WORKS',
filterId: null,
objectId: null,
search: null,
periodType: null,
isAscSort: true,
sortColumn: null,
table: null,
tHead: null,
tBody: null,
selectedItems: [],
priorities: null,
getUrl: function(){
let url = `api/workflow/works/list_ext?userID=${AS.OPTIONS.currentUser.userid}&filterType=${this.filterType}`;
const startRecord = Paginator.currentPage * Paginator.countInPart - Paginator.countInPart;
url += `&startRecord=${startRecord}&recordsCount=${Paginator.countInPart}`;
if(this.filterId) url += `&filterID=${this.filterId}`;
if(this.objectId) url += `&objectID=${this.objectId}`;
if(this.search) url += `&search=${this.search}`;
if(this.periodType) url += `&hasExtSearchParams=true&periodType=${this.periodType}`;
if(this.sortColumn) url += `&sortColumn=${this.sortColumn}&isAscSort=${this.isAscSort}`;
url += `&locale=${AS.OPTIONS.locale}`;
return url;
},
sortable: function(th) {
if(th.attr('columnid') == 'checkbox' || th.hasClass("uk-checkbox")) return;
this.tHead.find('th').not(th).removeClass('sortable sortable__down sortable__up');
if (th.hasClass("sortable__down") || th.hasClass("sortable__up")) {
th.toggleClass("sortable__down sortable__up");
} else {
th.addClass("sortable sortable__down");
}
this.sortColumn = th.attr('columnid');
this.isAscSort = th.hasClass("sortable__down") ? true : false;
this.createBody();
},
createHeader: function() {
this.tHead.empty();
this.isAscSort = true;
this.sortColumn = null;
const tr = $('<tr>');
const th = $('<th columnid="checkbox" style="width: 40px;"></th>');
const checkbox = $('<input/>')
.addClass('uk-checkbox')
.attr('type', 'checkbox')
.on('change', e => {
this.tBody.find('td > [type="checkbox"]').each((k, x) => {
x.checked = !!e.target.checked;
});
this.tBody.find('td > [type="checkbox"]').each((k, x) => {
$(x).trigger('change');
});
});
th.append(checkbox);
tr.append(th);
tr.append(`<th columnid="name" class="uk-table-expand">${i18n.tr('Название')}</th>`);
if(this.filterType == 'OWN_WORKS') {
tr.append(`<th columnid="author" class="uk-width-small">${i18n.tr('Поставил')}</th>`);
} else {
tr.append(`<th columnid="responsible" class="uk-width-small">${i18n.tr('Ответственный')}</th>`);
}
tr.append(`<th columnid="left" class="uk-width-small">${i18n.tr('Осталось')}</th>`);
tr.append(`<th columnid="percent" class="uk-width-small">${i18n.tr('Прогресс')}</th>`);
tr.on('click', e => this.sortable($(e.target)));
this.tHead.append(tr);
},
getContextMenuItem: function(name, icon, handler, disabled = false){
const li = $(`<li>`);
const a = $('<a>');
const span = $(`<span class="uk-margin-small-right" uk-icon="icon: ${icon}"></span>`);
if(disabled) li.addClass('uk-disabled');
a.append(span, i18n.tr(name));
li.append(a);
li.on('click', e => {
e.preventDefault();
e.target.blur();
if(handler) handler();
});
return li;
},
openWorkInfo: function(work){
const createRow = (label, value) => $(`<tr><td>${i18n.tr(label)}</td><td>${value}</td></tr>`);
const dialog = $('<div class="uk-flex-top" uk-modal>');
const md = $('<div class="uk-modal-dialog uk-margin-auto-vertical">');
const modalBody = $('<div>', {class: 'uk-modal-body uk-overflow-auto', style: 'padding: 15px;'});
const container = $('<div>');
const table = $('<table>', {class: 'uk-table work-info'});
const body = $('<tbody>');
table.append(body);
container.append(table);
modalBody.append(container);
dialog.append(md);
md.append(
'<button class="uk-modal-close-default" type="button" uk-close></button>',
`<div class="uk-modal-header"><h3 class="uk-modal-title">${i18n.tr('Информация')}</h3></div>`,
modalBody,
`<div class="uk-modal-footer uk-text-right"><button class="uk-button uk-button-default uk-modal-close" type="button">${i18n.tr('Закрыть')}</button></div>`
);
const priority = this.priorities.find(x => x.id == work.priority);
const remained = Number(work.remained) < 0 ? `${i18n.tr('Просрочено')} ${work.remained_label.replaceAll('-', '')}` : `${i18n.tr('Осталось')} ${work.remained_label}`;
body.append(
createRow('Наименование:', work.name),
createRow('Автор:', work.author.name),
`<tr><td>${i18n.tr('Приоритет:')}</td><td style="display: flex; align-items: center;"><span style="width: 20px; height: 20px; background: ${priority.color}; margin-right: 10px;"></span><span>${priority.name}</span></td></tr>`,
createRow('Начало:', work.start_date),
createRow('Завершение:', work.finish_date),
createRow('Сроки:', remained)
);
UIkit.modal(dialog).show();
dialog.on('hidden', () => dialog.remove());
},
deleteWork: async function(work){
UIkit.modal.confirm(i18n.tr('Вы действительно хотите удалить данную работу?'),
{labels: {ok: i18n.tr('Да'), cancel: i18n.tr('Отмена')}})
.then(async () => {
Cons.showLoader();
try {
const resultDelete = await deleteWork(work.actionID);
if(!resultDelete) throw new Error(i18n.tr('Произошла ошибка при удалении работы'));
if(resultDelete.errorCode != '0') throw new Error(resultDelete.errorMessage);
Paginator.init();
this.createBody();
showMessage(resultDelete.errorMessage, 'success');
} catch (e) {
Cons.hideLoader();
showMessage(e.message, 'error');
}
}, () => null);
},
stopRoute: async function(work){
UIkit.modal.confirm(i18n.tr('Вы действительно хотите прервать данный маршрут?'),
{labels: {ok: i18n.tr('Да'), cancel: i18n.tr('Отмена')}})
.then(async () => {
Cons.showLoader();
try {
const docInfo = await getDocInfo(work.actionID);
if(!docInfo) throw new Error(i18n.tr('Произошла ошибка прерывания маршрута'));
const result = await stopRoute(docInfo.documentID);
if(!result) throw new Error(i18n.tr('Произошла ошибка прерывания маршрута'));
if(result.errorCode != '0') throw new Error(result.errorMessage);
Paginator.init();
this.createBody();
showMessage(result.errorMessage, 'success');
} catch (e) {
Cons.hideLoader();
showMessage(e.message, 'error');
}
}, () => null);
},
contextNavItems: [
{
name: 'Информация',
icon: 'info',
handler: function(me, work){
me.openWorkInfo(work);
}
},
{
name: 'Удалить',
icon: 'trash',
handler: function(me, work){
me.deleteWork(work);
},
prop: 'can_delete'
},
{
name: 'Прервать маршрут',
icon: 'ban',
handler: function(me, work){
me.stopRoute(work);
}
},
// 'divider',
// {
// name: 'Изменить',
// icon: 'pencil',
// handler: function(me, work){
// console.log('типа Изменить', work);
// }
// },
// {
// name: 'Переслать',
// icon: 'forward',
// handler: function(me, work){
// console.log('типа Переслать', work);
// }
// },
// {
// name: 'Перепоручить',
// icon: 'users',
// handler: function(me, work){
// console.log('типа Перепоручить', work);
// }
// }
],
contextMenu: function(el, work) {
el.on('contextmenu', event => {
$('.workflow-context-menu').remove();
const contextMenu = $('<div>', {class: 'workflow-context-menu'});
const nav = $('<ul class="uk-nav-default uk-nav-parent-icon" uk-nav>');
contextMenu.css({
"left": event.pageX + 'px',
"top": event.pageY + 'px'
});
contextMenu.append(nav);
this.contextNavItems.forEach(item => {
if(item == 'divider') {
nav.append('<li class="uk-nav-divider"></li>');
} else {
const {name, icon, handler, prop = false} = item;
nav.append(this.getContextMenuItem(name, icon, () => handler(this, work), prop && work[prop] == "false"));
}
});
$('body').append(contextMenu);
contextMenu.show('fast');
return false;
});
},
createRow: function(item) {
const {actionID, name, is_new, is_expired, is_soon_expired, user, author, remained_label, percent} = item;
const tr = $('<tr>');
const checkbox = $('<input/>').addClass('uk-checkbox').attr('type', 'checkbox');
const tmpTd = $('<td>');
if(this.selectedItems.indexOf(actionID) !== -1) checkbox.prop('checked', true);
tmpTd.append(`<span class="mobile-table-header">Выбор</span>`).append(checkbox);
tr.append(tmpTd);
if(this.priorities) {
const priority = this.priorities.find(x => x.id == item.priority);
if(priority) tmpTd.css({
'background': priority.color
});
}
checkbox.on('change', e => {
if(e.target.checked) {
if(this.selectedItems.indexOf(actionID) === -1) {
this.selectedItems.push(actionID);
}
} else {
const index = this.selectedItems.indexOf(actionID);
if(index !== -1) this.selectedItems.splice(index, 1);
}
// if(this.selectedItems.length > 0) {
// $('.action-menu-item').removeClass('uk-disabled');
// if($('.action-menu-item.item-delete').length) {
// if(!this.isDelete) $('.action-menu-item.item-delete').addClass('uk-disabled');
// }
// } else {
// $('.action-menu-item').addClass('uk-disabled');
// }
});
if(is_new && is_new == "true") tr.addClass('new_work');
if(is_expired && is_expired == "true") {
tr.addClass('expired_work');
} else if (is_soon_expired && is_soon_expired == "true") {
tr.addClass('soon_expired_work');
}
tr.append(`<td uk-tooltip="title: ${name}; delay: 500;">${name}</td>`);
if(this.filterType == 'OWN_WORKS') {
tr.append(`<td uk-tooltip="${author.name}">${author.name}</td>`);
} else {
tr.append(`<td uk-tooltip="${user.name}">${user.name}</td>`);
}
tr.append(`<td uk-tooltip="${remained_label}">${remained_label}</td>`);
tr.append(`<td>${getProgressBar(percent)}</td>`);
let timeoutId;
tr.on('click', e => {
if($(e.target).is("input")) return;
timeoutId = setTimeout(() => {
if(!timeoutId) return;
this.tBody.find('tr').removeAttr('selected');
tr.attr('selected', true);
fire({type: 'worklist_item_click', ...item}, comp.code);
}, 200);
});
tr.on('dblclick', e => {
if($(e.target).is("input")) return;
clearTimeout(timeoutId);
timeoutId = null;
fire({type: 'worklist_item_dbl_click', ...item}, comp.code);
});
this.contextMenu(tr, item);
return tr;
},
createBody: function(rowsCount) {
Cons.showLoader();
rest.synergyGet(this.getUrl(), res => {
this.tBody.empty();
res.data.forEach(item => this.tBody.append(this.createRow(item)));
Paginator.rows = res.totalCount;
Paginator.update();
Cons.hideLoader();
});
},
render: function() {
compContainer.find(`.jsx-parser`).css({
'width': '100%',
'height': '100%'
});
this.table = $('<table class="workflow-table-list uk-table uk-table-small uk-table-responsive">');
this.tHead = $('<thead>');
this.tBody = $('<tbody>');
this.table.append(this.tHead).append(this.tBody);
tableContainer.empty().append(this.table);
},
reset: function(){
this.search = null;
this.periodType = null;
this.isAscSort = true;
this.sortColumn = null;
this.selectedItems = [];
},
init: function() {
const {systemSettings} = Cons.getAppStore();
if(systemSettings) this.priorities = systemSettings.current_priorities;
this.render();
this.createHeader();
Paginator.init();
this.createBody();
}
};
WorkTable.init();
addListener('worklist_filter_arbitrary_change', comp.code, filterData => {
const {filterType, filterId, objectId} = filterData;
WorkTable.filterType = filterType;
WorkTable.filterId = filterId;
WorkTable.objectId = objectId;
WorkTable.reset();
WorkTable.createHeader();
WorkTable.createBody();
Paginator.init();
});
addListener('worklist_translate', comp.code, () => {
WorkTable.createHeader();
WorkTable.reset();
WorkTable.createBody();
Paginator.init();
});
addListener('worklist_search', comp.code, e => {
const {value = null} = e;
WorkTable.search = value;
WorkTable.createBody();
Paginator.init();
});
addListener('worklist_row_count_on_page', comp.code, e => {
const {rowsPerPage = null} = e;
WorkTable.search = null;
Paginator.init(rowsPerPage);
WorkTable.createBody();
});
addListener('worklist_update', comp.code, e => {
const {countInPart} = Paginator;
Paginator.init(countInPart);
WorkTable.createBody();
});
$(document).off()
.on('contextmenu', () => $('.workflow-context-menu').remove())
.on('click', () => $('.workflow-context-menu').remove());
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment