Merge branch 'master' of https://github.com/merelendor/evoleasing-account
Conflicts: css/main/style.css
This commit is contained in:
commit
a238a05bda
@ -28,53 +28,59 @@ export const getEvents = ({ dispatch, type, contract }) =>
|
||||
|
||||
return new Promise((resolve, reject) =>
|
||||
{
|
||||
axios.post(`${ process.env.NEXT_PUBLIC_SELF_API_HOST }/api/events`, {}, {
|
||||
withCredentials: true,
|
||||
})
|
||||
.then((response) =>
|
||||
if(global.store.getState().events.list === undefined)
|
||||
{
|
||||
axios.post(`${ process.env.NEXT_PUBLIC_SELF_API_HOST }/api/events`, {}, {
|
||||
withCredentials: true,
|
||||
})
|
||||
.then((response) =>
|
||||
{
|
||||
console.log("ACTION", "getEvents()", "response", response.data);
|
||||
const events = response.data;
|
||||
const filtered_events = [];
|
||||
|
||||
console.log("ACTION", "getEvents()", "events", events);
|
||||
|
||||
dispatch({ type: actionTypes.EVENTS, data: { list: events, loaded: true } });
|
||||
resolve();
|
||||
})
|
||||
.catch((error) =>
|
||||
{
|
||||
console.log("error");
|
||||
console.error(error);
|
||||
|
||||
reject();
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
console.log("ACTION", "getEvents()", "response", response.data);
|
||||
const events = response.data;
|
||||
const filtered_events = [];
|
||||
|
||||
console.log("ACTION", "getEvents()", "events", events);
|
||||
|
||||
dispatch({ type: actionTypes.EVENTS, data: { list: events, loaded: true } });
|
||||
resolve();
|
||||
})
|
||||
.catch((error) =>
|
||||
{
|
||||
console.log("error");
|
||||
console.error(error);
|
||||
|
||||
reject();
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
export const getFilteredEvents = ({ dispatch, type, search, contract }) =>
|
||||
export const getFilteredEvents = ({ dispatch, search }) =>
|
||||
{
|
||||
return new Promise((resolve, reject) =>
|
||||
{
|
||||
console.log("getFilteredEvents");
|
||||
|
||||
const types = {
|
||||
"restrictions": "restrictions",
|
||||
"payments": [ "kasko_prolong", "fingap_prolong", "osago_prolong" ],
|
||||
"additional": "graph_change",
|
||||
"finance": "end_contract",
|
||||
"additional": [ "osago_prolong", "kasko_prolong", "fingap_prolong" ],
|
||||
"finance": [ "graph_change", "end_contract" ],
|
||||
"fines": "fine_gibdd",
|
||||
"pts": "return_pts",
|
||||
};
|
||||
|
||||
if(type !== undefined || (search !== undefined || search !== null || search !== ""))
|
||||
if((search !== undefined || search !== null || search !== ""))
|
||||
{
|
||||
console.log(global.store.getState().events);
|
||||
const events = global.store.getState().events.list;
|
||||
|
||||
|
||||
let query = nSQL(events)
|
||||
.query("select");
|
||||
|
||||
|
||||
/*
|
||||
if(type !== undefined)
|
||||
{
|
||||
if(typeof types[ type ] === "string")
|
||||
@ -97,30 +103,22 @@ export const getFilteredEvents = ({ dispatch, type, search, contract }) =>
|
||||
query.where(array_of_queries);
|
||||
}
|
||||
}
|
||||
|
||||
if(contract !== undefined && contract !== null && contract !== "")
|
||||
{
|
||||
query.where([ [ "contract_number", "=", contract ] ]);
|
||||
}
|
||||
*/
|
||||
|
||||
if(search !== undefined && search !== null && search !== "")
|
||||
{
|
||||
query.where([ [ "contract_number", "LIKE", `%${ search }%` ], "OR", [ "add_info", "LIKE", `%${ search }%` ]]);
|
||||
}
|
||||
|
||||
|
||||
query.exec().then((rows) =>
|
||||
{
|
||||
console.log("rows");
|
||||
console.log(rows);
|
||||
|
||||
dispatch({ type: actionTypes.EVENTS_FILTERED, data: { filtered: rows } });
|
||||
resolve();
|
||||
|
||||
//callback(null, rows);
|
||||
|
||||
});
|
||||
|
||||
/*
|
||||
.orderBy("number", "asc")
|
||||
*/
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -129,3 +127,34 @@ export const getFilteredEvents = ({ dispatch, type, search, contract }) =>
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
export const getContractEvents = ({ dispatch, contract }) =>
|
||||
{
|
||||
return new Promise((resolve, reject) =>
|
||||
{
|
||||
console.log("getContractEvents");
|
||||
|
||||
console.log(global.store.getState().events);
|
||||
const events = global.store.getState().events.list;
|
||||
|
||||
let query = nSQL(events)
|
||||
.query("select");
|
||||
|
||||
if(contract !== undefined && contract !== null && contract !== "")
|
||||
{
|
||||
query.where([ [ "contract_number", "=", contract ] ]);
|
||||
}
|
||||
|
||||
query.exec().then((rows) =>
|
||||
{
|
||||
console.log("rows");
|
||||
console.log(rows);
|
||||
|
||||
const events_list = {};
|
||||
events_list[`${ contract }`] = rows;
|
||||
|
||||
dispatch({ type: actionTypes.CONTRACT_EVENTS, data: events_list });
|
||||
resolve();
|
||||
});
|
||||
});
|
||||
}
|
||||
@ -26,6 +26,9 @@ export const CONTRACT_OPTIONS = 'CONTRACT_OPTIONS';
|
||||
export const CONTRACT_CURRENT = 'CONTRACT_CURRENT';
|
||||
export const CONTRACT_CALCULATED = 'CONTRACT_CALCULATED';
|
||||
|
||||
export const CONTRACT_EVENTS = 'CONTRACT_EVENTS';
|
||||
export const CONTRACT_EVENTS_RESET = 'CONTRACT_EVENTS_RESET';
|
||||
|
||||
export const CALENDAR = 'CALENDAR';
|
||||
export const EVENTS = 'EVENTS';
|
||||
export const EVENTS_FILTERED = 'EVENTS_FILTERED';
|
||||
|
||||
@ -96,7 +96,7 @@ header .system_nav > li > a[data-notify]:before {
|
||||
text-align: center;
|
||||
color: #fff;
|
||||
background: #A8026B;
|
||||
font-size: 13px;
|
||||
font-size: 11px;
|
||||
}
|
||||
@media all and (max-width: 768px) {
|
||||
header .system_nav > li > a[data-notify]:before {
|
||||
@ -248,6 +248,7 @@ header .system_nav .backdrop .modal .list li p.date {
|
||||
width: 100%;
|
||||
margin-left: 0px;
|
||||
margin-right: 0;
|
||||
padding-left: 20px;
|
||||
}
|
||||
}
|
||||
header .system_nav .backdrop .modal .list li p.action {
|
||||
|
||||
@ -1 +1 @@
|
||||
{"version":3,"sources":["style.less"],"names":[],"mappings":"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"}
|
||||
{"version":3,"sources":["style.less"],"names":[],"mappings":"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"}
|
||||
@ -114,7 +114,7 @@ header {
|
||||
text-align: center;
|
||||
color: #fff;
|
||||
background: #A8026B;
|
||||
font-size: 13px;
|
||||
font-size: 11px;
|
||||
|
||||
@media all and (max-width: 768px) {
|
||||
width: 13px;
|
||||
@ -130,7 +130,6 @@ header {
|
||||
display: none;
|
||||
}
|
||||
|
||||
|
||||
&[data-icon="phone"] {
|
||||
background: url(/assets/images/icons/icon-phone-black.svg) no-repeat center;
|
||||
}
|
||||
@ -279,6 +278,7 @@ header {
|
||||
width: 100%;
|
||||
margin-left: 0px;
|
||||
margin-right: 0;
|
||||
padding-left: 20px;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -1981,6 +1981,7 @@ main aside .nav_toggle {
|
||||
text-overflow: ellipsis;
|
||||
max-width: 285px;
|
||||
overflow: hidden;
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
main aside .aside_nav {
|
||||
@ -2012,6 +2013,7 @@ main aside .aside_nav li a span {
|
||||
font-weight: 400;
|
||||
text-align: center;
|
||||
line-height: 20px;
|
||||
font-size: 11px;
|
||||
}
|
||||
main aside .aside_nav li a.active {
|
||||
background: var(--green);
|
||||
@ -2031,35 +2033,32 @@ main aside .aside_nav li a.active span {
|
||||
}
|
||||
@media all and (max-width: 1279px) {
|
||||
main aside .aside_nav {
|
||||
display: block;
|
||||
position: absolute;
|
||||
background: #fff;
|
||||
padding: 15px 20px;
|
||||
top: 25px;
|
||||
left: -10px;
|
||||
max-width: 320px;
|
||||
box-shadow: 0px 4px 32px rgba(0, 0, 0, 0.16);
|
||||
display: flex;
|
||||
overflow-x: auto;
|
||||
}
|
||||
main aside .aside_nav:not(.open) {
|
||||
display: none;
|
||||
}
|
||||
main aside .aside_nav li:not(:last-child) {
|
||||
margin-bottom: 6px;
|
||||
main aside .aside_nav li {
|
||||
margin-bottom: 0;
|
||||
background: var(--inactive);
|
||||
}
|
||||
main aside .aside_nav li a {
|
||||
font-size: 15px;
|
||||
font-weight: 400;
|
||||
padding: 0;
|
||||
min-height: unset;
|
||||
white-space: nowrap;
|
||||
padding: 0 16px;
|
||||
line-height: 42px;
|
||||
}
|
||||
main aside .aside_nav li a.active {
|
||||
background-color: transparent;
|
||||
color: var(--blue);
|
||||
background-color: var(--green);
|
||||
color: #fff;
|
||||
}
|
||||
}
|
||||
@media all and (max-width: 768px) {
|
||||
main aside .aside_nav {
|
||||
left: 0;
|
||||
margin: 0 -16px;
|
||||
padding: 0 16px;
|
||||
}
|
||||
}
|
||||
main aside .button {
|
||||
@ -2822,6 +2821,11 @@ main #order .container {
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
}
|
||||
@media all and (max-width: 768px) {
|
||||
.contract_table.schedule .table_row {
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
}
|
||||
.contract_table.schedule .table_row .table_cell {
|
||||
width: 25%;
|
||||
min-width: 14%;
|
||||
@ -3626,6 +3630,7 @@ main .dropdown_blocks_list .dropdown_block .block_body .fines_detail ul li {
|
||||
@media all and (max-width: 960px) {
|
||||
.helpBox_wrapper .helpBox.hidden {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
}
|
||||
.helpBox_wrapper .helpBox .avatar {
|
||||
@ -3664,15 +3669,18 @@ main .dropdown_blocks_list .dropdown_block .block_body .fines_detail ul li {
|
||||
gap: 15px;
|
||||
}
|
||||
.helpBox_wrapper .helpBox .content .info a {
|
||||
display: block;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
width: auto;
|
||||
min-width: calc(33.33% - 15px);
|
||||
padding-left: 38px;
|
||||
line-height: 26px;
|
||||
line-height: 1.2;
|
||||
min-height: 26px;
|
||||
font-size: 15px;
|
||||
color: #0C0C0C;
|
||||
box-sizing: border-box;
|
||||
background: url("/assets/images/icons/icon-messanger.svg") no-repeat left center;
|
||||
word-break: break-word;
|
||||
}
|
||||
.helpBox_wrapper .helpBox .content .info a[href^="tel:"] {
|
||||
background: url("/assets/images/icons/icon-phone-blue.svg") no-repeat left center;
|
||||
@ -3691,6 +3699,12 @@ main .dropdown_blocks_list .dropdown_block .block_body .fines_detail ul li {
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
}
|
||||
@media all and (max-width: 960px) {
|
||||
.helpBox_wrapper .helpBox .content {
|
||||
width: 100%;
|
||||
margin-top: 10px;
|
||||
}
|
||||
}
|
||||
.helpBox_wrapper .helpBox .button {
|
||||
position: absolute;
|
||||
top: 5px;
|
||||
@ -3792,6 +3806,11 @@ main .dropdown_blocks_list .dropdown_block .block_body .fines_detail ul li {
|
||||
.feed .feed_list {
|
||||
margin-right: -50px;
|
||||
}
|
||||
@media all and (max-width: 768px) {
|
||||
.feed .feed_list {
|
||||
margin-right: 0;
|
||||
}
|
||||
}
|
||||
.feed .feed_list .slick-track {
|
||||
display: flex;
|
||||
}
|
||||
@ -3804,6 +3823,7 @@ main .dropdown_blocks_list .dropdown_block .block_body .fines_detail ul li {
|
||||
}
|
||||
.feed .feed_list .slick-slide {
|
||||
margin-right: 30px;
|
||||
width: 480px;
|
||||
}
|
||||
.feed .feed_list .slick-slide div {
|
||||
height: 100%;
|
||||
@ -3811,10 +3831,15 @@ main .dropdown_blocks_list .dropdown_block .block_body .fines_detail ul li {
|
||||
.feed .feed_list .slick-slide:first-child {
|
||||
margin-left: 0;
|
||||
}
|
||||
@media (max-width: 1420px) {
|
||||
@media (max-width: 1279px) {
|
||||
.feed .feed_list .slick-slide {
|
||||
width: 289px;
|
||||
min-width: 289px;
|
||||
width: 289px !important;
|
||||
min-width: 289px !important;
|
||||
}
|
||||
}
|
||||
@media all and (max-width: 768px) {
|
||||
.feed .feed_list .slick-slide {
|
||||
margin-right: 15px;
|
||||
}
|
||||
}
|
||||
.feed .slick-arrow {
|
||||
@ -3968,6 +3993,11 @@ main .dropdown_blocks_list .dropdown_block .block_body .fines_detail ul li {
|
||||
.grecaptcha-badge {
|
||||
visibility: hidden;
|
||||
}
|
||||
@media all and (max-width: 1279px) {
|
||||
.changes {
|
||||
min-height: 60vh;
|
||||
}
|
||||
}
|
||||
.changes .block {
|
||||
margin-bottom: 55px;
|
||||
}
|
||||
@ -4160,6 +4190,7 @@ main .dropdown_blocks_list .dropdown_block .block_body .fines_detail ul li {
|
||||
.calc .btn_group .button:nth-child(2) {
|
||||
order: 1;
|
||||
width: 100%;
|
||||
min-width: 100% !important;
|
||||
}
|
||||
}
|
||||
@media all and (max-width: 768px) {
|
||||
@ -4206,26 +4237,49 @@ main .dropdown_blocks_list .dropdown_block .block_body .fines_detail ul li {
|
||||
.compare .compare_top p {
|
||||
font-weight: 700;
|
||||
}
|
||||
.compare .compare_top p a {
|
||||
font-weight: 400;
|
||||
display: inline-block;
|
||||
margin-left: 30px;
|
||||
}
|
||||
@media all and (max-width: 1279px) {
|
||||
.compare .compare_top p {
|
||||
margin-bottom: 12px;
|
||||
max-width: 60%;
|
||||
}
|
||||
.compare .compare_top p a {
|
||||
}
|
||||
@media all and (max-width: 768px) {
|
||||
.compare .compare_top p {
|
||||
max-width: none;
|
||||
}
|
||||
}
|
||||
.compare .compare_top a {
|
||||
font-weight: 400;
|
||||
display: inline-block;
|
||||
margin-left: 30px;
|
||||
margin-right: auto;
|
||||
}
|
||||
@media all and (max-width: 1279px) {
|
||||
.compare .compare_top a {
|
||||
display: block;
|
||||
margin-left: 0;
|
||||
margin-top: 20px;
|
||||
font-weight: 700;
|
||||
}
|
||||
}
|
||||
@media all and (max-width: 768px) {
|
||||
@media all and (max-width: 1279px) {
|
||||
.compare .compare_top {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
.compare .compare_top a {
|
||||
order: 1;
|
||||
margin-top: 0;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
.compare .compare_top p {
|
||||
max-width: none;
|
||||
width: 100%;
|
||||
order: 3;
|
||||
}
|
||||
.compare .compare_top button {
|
||||
order: 2;
|
||||
margin-bottom: 25px;
|
||||
}
|
||||
}
|
||||
.compare .compare_data {
|
||||
|
||||
File diff suppressed because one or more lines are too long
@ -2050,6 +2050,7 @@ main {
|
||||
text-overflow: ellipsis;
|
||||
max-width: 285px;
|
||||
overflow: hidden;
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
.aside_nav {
|
||||
@ -2081,6 +2082,7 @@ main {
|
||||
font-weight: 400;
|
||||
text-align: center;
|
||||
line-height: 20px;
|
||||
font-size: 11px;
|
||||
}
|
||||
|
||||
&.active {
|
||||
@ -2107,33 +2109,26 @@ main {
|
||||
}
|
||||
|
||||
@media all and (max-width: 1279px) {
|
||||
display: block;
|
||||
position: absolute;
|
||||
background: #fff;
|
||||
padding: 15px 20px;
|
||||
top: 25px;
|
||||
left: -10px;
|
||||
max-width: 320px;
|
||||
box-shadow: 0px 4px 32px rgba(0, 0, 0, 0.16);
|
||||
|
||||
&:not(.open) {
|
||||
display: none;
|
||||
}
|
||||
display: flex;
|
||||
|
||||
overflow-x: auto;
|
||||
|
||||
li {
|
||||
&:not(:last-child) {
|
||||
margin-bottom: 6px;
|
||||
}
|
||||
margin-bottom: 0;
|
||||
background: var(--inactive);
|
||||
|
||||
a {
|
||||
font-size: 15px;
|
||||
font-weight: 400;
|
||||
padding: 0;
|
||||
min-height: unset;
|
||||
white-space: nowrap;
|
||||
padding: 0 16px;
|
||||
line-height: 42px;
|
||||
|
||||
&.active {
|
||||
background-color: transparent;
|
||||
color: var(--blue);
|
||||
background-color: var(--green);
|
||||
color: #fff;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -2141,6 +2136,8 @@ main {
|
||||
|
||||
@media all and (max-width: 768px) {
|
||||
left: 0;
|
||||
margin: 0 -16px;
|
||||
padding: 0 16px;
|
||||
}
|
||||
}
|
||||
|
||||
@ -2350,7 +2347,6 @@ main {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Catalog
|
||||
.catalog_list {
|
||||
display: flex;
|
||||
@ -3090,6 +3086,10 @@ main {
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
|
||||
@media all and (max-width: 768px) {
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
.table_cell {
|
||||
width: 25%;
|
||||
//min-width: 25%;
|
||||
@ -4046,6 +4046,7 @@ main .dropdown_blocks_list .dropdown_block .block_body {
|
||||
|
||||
@media all and (max-width: 960px) {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
}
|
||||
|
||||
@ -4093,15 +4094,18 @@ main .dropdown_blocks_list .dropdown_block .block_body {
|
||||
gap: 15px;
|
||||
|
||||
a {
|
||||
display: block;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
width: auto;
|
||||
min-width: calc(33.33% - 15px);
|
||||
padding-left: 38px;
|
||||
line-height: 26px;
|
||||
line-height: 1.2;
|
||||
min-height: 26px;
|
||||
font-size: 15px;
|
||||
color: #0C0C0C;
|
||||
box-sizing: border-box;
|
||||
background: url("/assets/images/icons/icon-messanger.svg") no-repeat left center;
|
||||
word-break: break-word;
|
||||
|
||||
&[href^="tel:"] {
|
||||
background: url("/assets/images/icons/icon-phone-blue.svg") no-repeat left center;
|
||||
@ -4124,6 +4128,11 @@ main .dropdown_blocks_list .dropdown_block .block_body {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@media all and (max-width: 960px) {
|
||||
width: 100%;
|
||||
margin-top: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
.button {
|
||||
@ -4246,6 +4255,10 @@ main .dropdown_blocks_list .dropdown_block .block_body {
|
||||
//display: flex;
|
||||
margin-right: -50px;
|
||||
|
||||
@media all and (max-width: 768px) {
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
.slick-track {
|
||||
display: flex;
|
||||
|
||||
@ -4261,6 +4274,7 @@ main .dropdown_blocks_list .dropdown_block .block_body {
|
||||
|
||||
.slick-slide {
|
||||
margin-right: 30px;
|
||||
width: 480px;
|
||||
|
||||
div {height: 100%;}
|
||||
|
||||
@ -4268,9 +4282,13 @@ main .dropdown_blocks_list .dropdown_block .block_body {
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
@media (max-width: 1420px) {
|
||||
width: 289px;
|
||||
min-width: 289px;
|
||||
@media (max-width: 1279px) {
|
||||
width: 289px !important;
|
||||
min-width: 289px !important;
|
||||
}
|
||||
|
||||
@media all and (max-width: 768px) {
|
||||
margin-right: 15px;
|
||||
}
|
||||
|
||||
|
||||
@ -4445,7 +4463,10 @@ main .dropdown_blocks_list .dropdown_block .block_body {
|
||||
|
||||
.grecaptcha-badge { visibility: hidden; }
|
||||
.changes {
|
||||
|
||||
@media all and (max-width:1279px) {
|
||||
min-height: 60vh;
|
||||
|
||||
}
|
||||
.block {
|
||||
margin-bottom: 55px;
|
||||
|
||||
@ -4678,6 +4699,7 @@ main .dropdown_blocks_list .dropdown_block .block_body {
|
||||
@media all and (max-width: 768px) {
|
||||
order: 1;
|
||||
width: 100%;
|
||||
min-width: 100% !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -4731,28 +4753,55 @@ main .dropdown_blocks_list .dropdown_block .block_body {
|
||||
p {
|
||||
font-weight: 700;
|
||||
|
||||
a {
|
||||
font-weight: 400;
|
||||
display: inline-block;
|
||||
margin-left: 30px;
|
||||
}
|
||||
|
||||
|
||||
@media all and (max-width: 1279px) {
|
||||
margin-bottom: 12px;
|
||||
max-width: 60%;
|
||||
|
||||
a {
|
||||
display: block;
|
||||
margin-left: 0;
|
||||
margin-top: 20px;
|
||||
font-weight: 700;
|
||||
}
|
||||
}
|
||||
|
||||
@media all and (max-width: 768px) {
|
||||
max-width: none;
|
||||
}
|
||||
}
|
||||
|
||||
a {
|
||||
font-weight: 400;
|
||||
display: inline-block;
|
||||
margin-left: 30px;
|
||||
margin-right: auto;
|
||||
|
||||
@media all and (max-width: 1279px) {
|
||||
display: block;
|
||||
margin-left: 0;
|
||||
margin-top: 20px;
|
||||
font-weight: 700;
|
||||
}
|
||||
}
|
||||
|
||||
@media all and (max-width: 1279px) {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
margin-bottom: 10px;
|
||||
|
||||
a {
|
||||
order: 1;
|
||||
margin-top: 0;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
p {
|
||||
width: 100%;
|
||||
order: 3;
|
||||
|
||||
|
||||
}
|
||||
|
||||
button {
|
||||
order: 2;
|
||||
margin-bottom: 25px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.compare_data {
|
||||
|
||||
@ -58,11 +58,15 @@ class AnnouncementsList extends React.Component
|
||||
this.state = {
|
||||
company: {},
|
||||
announcements: [],
|
||||
width: 1920
|
||||
};
|
||||
}
|
||||
|
||||
componentDidMount()
|
||||
{
|
||||
this.setState({
|
||||
width: window.innerWidth
|
||||
})
|
||||
getAnnouncements().then((announcements) => this.setState({ announcements: announcements })).catch(() => {});
|
||||
}
|
||||
|
||||
@ -77,12 +81,11 @@ class AnnouncementsList extends React.Component
|
||||
dots: false,
|
||||
infinite: false,
|
||||
speed: 500,
|
||||
slidesToShow: 2,
|
||||
slidesToScroll: 1,
|
||||
slidesToShow: this.state.width < 1279 ? 1 : 2,
|
||||
centerMode: false,
|
||||
variableWidth: false,
|
||||
variableWidth: this.state.width < 1279 ? true : false,
|
||||
nextArrow: <NextArrow />,
|
||||
prevArrow: <PrevArrow />,
|
||||
prevArrow: <PrevArrow />
|
||||
};
|
||||
|
||||
const { announcements } = this.state;
|
||||
|
||||
@ -7,30 +7,37 @@ export default class InnerMenu extends React.Component
|
||||
{
|
||||
super(props);
|
||||
this.state = {
|
||||
type: undefined
|
||||
type: undefined,
|
||||
finance: 0,
|
||||
additional: 0,
|
||||
fines:0,
|
||||
pts: 0,
|
||||
};
|
||||
this.menuRef = React.createRef();
|
||||
}
|
||||
|
||||
componentDidMount()
|
||||
_checkEventsCount = () =>
|
||||
{
|
||||
const hash = this.props.router.asPath.split('#')[1];
|
||||
this.setState({ type: hash });
|
||||
}
|
||||
const { events, types } = this.props;
|
||||
const count = {
|
||||
finance: 0,
|
||||
additional: 0,
|
||||
fines:0,
|
||||
pts: 0,
|
||||
};
|
||||
|
||||
componentDidUpdate(prevProps, prevState)
|
||||
{
|
||||
const hash = this.props.router.asPath.split('#')[1];
|
||||
if(this.state.type !== hash)
|
||||
for(let i in events)
|
||||
{
|
||||
this.setState({ type: hash });
|
||||
count[types[events[i].event_type]]++;
|
||||
}
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
render()
|
||||
{
|
||||
console.log("Events", "InnerMenu", "this.props.router", this.props.router);
|
||||
const { type } = this.state;
|
||||
const { type } = this.props;
|
||||
const count = this._checkEventsCount();
|
||||
|
||||
return (
|
||||
<aside>
|
||||
@ -47,29 +54,31 @@ export default class InnerMenu extends React.Component
|
||||
</Link>
|
||||
</li>
|
||||
{*/}
|
||||
{/*}
|
||||
<li>
|
||||
<Link href={`/events#payments`} shallow>
|
||||
<a className={ type === "payments" ? "active" : "" }>Платежи</a>
|
||||
</Link>
|
||||
</li>
|
||||
{*/}
|
||||
<li>
|
||||
<Link href={`/events#finance`} shallow>
|
||||
<a className={ type === "finance" ? "active" : "" }>Договоры</a>
|
||||
<a className={ type === "finance" ? "active" : "" }>Договоры { count.finance > 0 && (<span>{ count.finance }</span>) }</a>
|
||||
</Link>
|
||||
</li>
|
||||
<li>
|
||||
<Link href={`/events#additional`} shallow>
|
||||
<a className={ type === "additional" ? "active" : "" }>Дополнительные услуги</a>
|
||||
<a className={ type === "additional" ? "active" : "" }>Дополнительные услуги { count.additional > 0 && (<span>{ count.additional }</span>) }</a>
|
||||
</Link>
|
||||
</li>
|
||||
<li>
|
||||
<Link href={`/events#fines`} shallow>
|
||||
<a className={ type === "fines" ? "active" : "" }>Штрафы</a>
|
||||
<a className={ type === "fines" ? "active" : "" }>Штрафы { count.fines > 0 && (<span>{ count.fines }</span>) }</a>
|
||||
</Link>
|
||||
</li>
|
||||
<li>
|
||||
<Link href={`/events#pts`} shallow>
|
||||
<a className={ type === "pts" ? "active" : "" }>ПТС</a>
|
||||
<a className={ type === "pts" ? "active" : "" }>ПТС { count.pts > 0 && (<span>{ count.pts }</span>) }</a>
|
||||
</Link>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
@ -54,6 +54,7 @@ class Header extends React.Component
|
||||
if (route.indexOf("/settings/") > -1) return "Настройки";
|
||||
if (route.indexOf("/contract") === 0) return "Договоры";
|
||||
if (route.indexOf("/support") === 0) return "Обращения";
|
||||
if (route.indexOf("/events") === 0) return "События";
|
||||
|
||||
return null;
|
||||
};
|
||||
|
||||
@ -211,10 +211,8 @@ export default class Comparison extends React.Component
|
||||
return (
|
||||
<article className="compare">
|
||||
<div className="compare_top">
|
||||
<p>
|
||||
Выбранный(ые) варианты изменения графика
|
||||
<a className="interactive" onClick={ this._handle_onOptions }>Вернуться к параметрам изменения графика</a>
|
||||
</p>
|
||||
<p>Выбранный(ые) варианты изменения графика</p>
|
||||
<a className="interactive" onClick={ this._handle_onOptions }>Вернуться к параметрам изменения графика</a>
|
||||
<button className="button button-blue" onClick={ this._handle_onDownloadPDF }>Скачать PDF</button>
|
||||
</div>
|
||||
<div className="compare_data">
|
||||
@ -232,7 +230,7 @@ export default class Comparison extends React.Component
|
||||
) }
|
||||
{ calculation !== undefined && calculation !== null && calculation.insurance_price_result_comment !== null && (
|
||||
<div className="form_field">
|
||||
<p><span>{ calculation.insurance_price_result_comment.label }:</span> { numeral(calculation.insurance_price_result_comment.value).format(' ., ') } ₽</p>
|
||||
<p><span>{ calculation.insurance_price_result_comment.label }:</span> { calculation.insurance_price_result_comment.value }</p>
|
||||
</div>
|
||||
) }
|
||||
{ calculation !== undefined && calculation !== null && calculation.number_paydate_comment !== null && (
|
||||
@ -247,7 +245,7 @@ export default class Comparison extends React.Component
|
||||
) }
|
||||
{ calculation !== undefined && calculation !== null && calculation.sum_comment !== null && (
|
||||
<div className="form_field">
|
||||
<p><span>{ calculation.sum_comment.label }</span> { numeral(calculation.sum_comment.value).format(' ., ') } ₽</p>
|
||||
<p><span>{ calculation.sum_comment.label }</span> { calculation.sum_comment.value }</p>
|
||||
</div>
|
||||
) }
|
||||
{/*}
|
||||
|
||||
@ -51,7 +51,7 @@ class PaymentDate extends React.Component
|
||||
|
||||
return (
|
||||
<div className="form_field">
|
||||
<label>Дата платежа</label>
|
||||
<label>Дата платежа:</label>
|
||||
<DateInput
|
||||
placeholder=""
|
||||
value={ value }
|
||||
@ -108,7 +108,7 @@ class FixLastPayment extends React.Component
|
||||
<div className="form_field">
|
||||
<input type="checkbox" hidden id="fix_pay" name="fix_pay" checked={ value } disabled={ option.disable ? true : false } onChange={ this._handle_onChange } style={ option.disable ? { opacity: 0.5 } : {} } />
|
||||
<label htmlFor="fix_pay" style={ option.disable ? { opacity: 0.5 } : {} }>
|
||||
Фиксировать последний платеж
|
||||
Не менять сумму последнего платежа
|
||||
</label>
|
||||
{ option.information !== undefined && option.information !== null && (
|
||||
<div className="help_tooltip">
|
||||
@ -173,7 +173,7 @@ class DateOffestType extends React.Component
|
||||
|
||||
return (
|
||||
<div className="form_field">
|
||||
<label>Тип каникул</label>
|
||||
<label>Тип каникул:</label>
|
||||
<div className="form_field">
|
||||
{ (!option.disable || (option.disable && value === 100000001)) && (
|
||||
<>
|
||||
@ -246,7 +246,7 @@ class PeriodSelector extends React.Component
|
||||
{
|
||||
return (
|
||||
<div className="form_field" style={ option.disable ? { opacity: 0.5 } : {} }>
|
||||
<label>Увеличить график на</label>
|
||||
<label>Увеличить срок договора на:</label>
|
||||
<select value={ value } onChange={ this._handle_onChange } disabled={ option.disable ? true : false }>
|
||||
{ periods.map((period, index) => (
|
||||
<option key={ index } value={ period }>{ index + 1 } { pluralize( index + 1, 'месяца', 'месяц', 'месяца', 'месяцев') } ({ period } { pluralize( period, 'платежа', 'платеж', 'платежа', 'платежей') })</option>
|
||||
@ -277,9 +277,9 @@ class SumSelector extends React.Component
|
||||
const { option, onOption } = this.props;
|
||||
|
||||
this.setState({
|
||||
value: option.min,
|
||||
value: option.value !== null ? option.value : option.min,
|
||||
min: option.min,
|
||||
max: option.max,
|
||||
max: option.max,
|
||||
}, () =>
|
||||
{
|
||||
onOption(this.state.value, false);
|
||||
@ -312,7 +312,7 @@ class SumSelector extends React.Component
|
||||
|
||||
return (
|
||||
<div className="form_field">
|
||||
<label style={ option.disable ? { opacity: 0.5 } : {} }>Увеличить платеж на (ЧДП)</label>
|
||||
<label style={ option.disable ? { opacity: 0.5 } : {} }>Изменить сумму платежа</label>
|
||||
<div className="input_with_notes" style={ option.disable ? { opacity: 0.5 } : {} }>
|
||||
<input type="number" placeholder="Укажите сумму" defaultValue={ value } disabled={ option.disable ? true : false } onChange={ this._handle_onChange }/>
|
||||
<span>от { numeral(min).format(' ., ') } ₽</span>
|
||||
@ -402,7 +402,7 @@ class InsurancePriceSelector extends React.Component
|
||||
|
||||
return (
|
||||
<div className="form_field">
|
||||
<label>Сумма пролонгации</label>
|
||||
<label>Премия по полису КАСКО:</label>
|
||||
<div className="input_with_notes">
|
||||
{ option.disable ? (
|
||||
<>{ numeral(value).format(' ., ') } ₽</>
|
||||
@ -481,7 +481,7 @@ class InsuranceDateFromSelector extends React.Component
|
||||
|
||||
return (
|
||||
<div className="form_field">
|
||||
<label>Дата начала пролонгации</label>
|
||||
<label>Дата очередного периода по КАСКО:</label>
|
||||
<DateInput
|
||||
placeholder=""
|
||||
value={ value }
|
||||
@ -665,6 +665,7 @@ export default class Options extends React.Component
|
||||
|
||||
return (
|
||||
<div className="block">
|
||||
<p className="title" style={{ fontSize: "16px" }}>{ options !== undefined && options !== null && options.number_planpayment_header.value }</p>
|
||||
<p className="title">Параметры опций изменений графика платежей</p>
|
||||
{ loading ? (
|
||||
<div style={{ position: "absolute", left: "50%", top: "50%" }}>
|
||||
|
||||
@ -8,6 +8,7 @@ export default class VariantsList extends React.Component
|
||||
{
|
||||
super(props);
|
||||
this.state = {
|
||||
opened: [],
|
||||
};
|
||||
}
|
||||
|
||||
@ -65,9 +66,27 @@ export default class VariantsList extends React.Component
|
||||
this.props.onOptions();
|
||||
}
|
||||
|
||||
_handle_onMobileHelp = (index) =>
|
||||
{
|
||||
console.log("_handle_onMobileHelp", index);
|
||||
const opened = [ ...this.state.opened ];
|
||||
|
||||
if (opened.indexOf(index) === -1)
|
||||
{
|
||||
opened.push(index);
|
||||
}
|
||||
else
|
||||
{
|
||||
opened.splice(opened.indexOf(index), 1);
|
||||
}
|
||||
|
||||
this.setState({ opened: opened });
|
||||
}
|
||||
|
||||
render()
|
||||
{
|
||||
const { number, variants, variants_types, selected, blocked, loading } = this.props;
|
||||
const { opened } = this.state;
|
||||
console.log(variants_types);
|
||||
|
||||
return (
|
||||
@ -80,7 +99,7 @@ export default class VariantsList extends React.Component
|
||||
const disabled = this._checkVariant(variant.type);
|
||||
const help = this._getVariantHelp(variant.type);
|
||||
|
||||
console.log("help", help);
|
||||
console.log("opened", opened);
|
||||
|
||||
return (
|
||||
<div className="form_field" key={ index }>
|
||||
@ -89,19 +108,17 @@ export default class VariantsList extends React.Component
|
||||
style={ disabled ? { color: "#A8026B", textDecoration: "line-through", } : {} }>{ variant.title }</label>
|
||||
{ help !== null && (
|
||||
<div className="help_tooltip">
|
||||
<div className="help_icon">
|
||||
<div className="help_icon" onClick={ () => this._handle_onMobileHelp(variant.type) }>
|
||||
<svg width={ 24 } height={ 24 } fill="none" xmlns="http://www.w3.org/2000/svg" >
|
||||
<path d="M12 21a9 9 0 1 0 0-18 9 9 0 0 0 0 18Z" stroke="#8E94A7" strokeWidth={ 2 } strokeLinecap="round" strokeLinejoin="round" />
|
||||
<path d="M11.25 11.25H12v5.25h.75" stroke="#8E94A7" strokeWidth={ 2 } strokeLinecap="round" strokeLinejoin="round" />
|
||||
<path d="M12 9a1.125 1.125 0 1 0 0-2.25A1.125 1.125 0 0 0 12 9Z" fill="#8E94A7" />
|
||||
</svg>
|
||||
</div>
|
||||
<div className="help_content">
|
||||
{" "}
|
||||
{/* opened */}
|
||||
<div className={`help_content ${ opened.indexOf(variant.type) > -1 && "opened" }`}>
|
||||
<div>
|
||||
<p className="help_tooltip_content" dangerouslySetInnerHTML={{ __html: help }}/>
|
||||
<p className="button">Закрыть</p>
|
||||
<p className="button" onClick={ () => this._handle_onMobileHelp(variant.type) }>Закрыть</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -57,11 +57,11 @@ class ChangeGraphicPage extends React.Component
|
||||
variants_unavailable: [],
|
||||
variants_loading: false,
|
||||
variants_types: [
|
||||
{ title: "Изменить дату платежа", type: "change_payment_date", help: "Это подсказка по Изменить дату платежа" },
|
||||
{ title: "Изменение параметров страхования", type: "insurance_change", help: "Это подсказка по Изменение параметров страхования" },
|
||||
{ title: "Изменение даты платежей", type: "change_payment_date", help: "Это подсказка по Изменить дату платежа" },
|
||||
{ title: "Включение КАСКО в график", type: "insurance_change", help: "Это подсказка по Изменение параметров страхования" },
|
||||
//{ title: "Изменение выкупного платежа", type: "last_payment_change", help: "Это подсказка по Изменение формулировки выкупной платеж" },
|
||||
{ title: "Лизинговые каникулы", type: "date_offset_change", help: "Это подсказка по Лизинговые каникулы" },
|
||||
{ title: "Изменение кол-ва платежей", type: "contract_term_change", help: "Это подсказка по Изменение кол-ва платежей" },
|
||||
{ title: "Увеличение срока договора лизинга", type: "contract_term_change", help: "Это подсказка по Изменение кол-ва платежей" },
|
||||
{ title: "Изменение суммы платежей", type: "sum_pay_change", help: "Это подсказка по Изменение суммы платежей" },
|
||||
{ title: "Досрочный выкуп", type: "early_redemption_change", help: "Это подсказка по Досрочный выкуп" },
|
||||
//{ title: "Изменение Лизингополучателя", type: "", help: "Это подсказка по Изменение Лизингополучателя" },
|
||||
|
||||
@ -10,11 +10,11 @@ export default class ContractHeader extends React.Component
|
||||
};
|
||||
}
|
||||
|
||||
componentDidMount()
|
||||
componentDidMount()
|
||||
{
|
||||
}
|
||||
|
||||
render()
|
||||
render()
|
||||
{
|
||||
const { number, date, car } = this.props;
|
||||
|
||||
|
||||
@ -1,7 +1,9 @@
|
||||
import React from "react";
|
||||
import Link from "next/link";
|
||||
import { connect } from "react-redux";
|
||||
import { getContractEvents, } from "../../../../actions";
|
||||
|
||||
export default class InnerMenu extends React.Component
|
||||
class InnerMenu extends React.Component
|
||||
{
|
||||
constructor(props)
|
||||
{
|
||||
@ -12,11 +14,27 @@ export default class InnerMenu extends React.Component
|
||||
menuOpened: false,
|
||||
count_events: 0,
|
||||
count_fines: 0,
|
||||
contract_events: {},
|
||||
};
|
||||
}
|
||||
|
||||
static getDerivedStateFromProps(nextProps, prevState)
|
||||
{
|
||||
return {
|
||||
contract_events: nextProps.contract_events,
|
||||
};
|
||||
}
|
||||
|
||||
componentDidMount()
|
||||
{
|
||||
const { number, dispatch } = this.props;
|
||||
const { contract_events } = this.state;
|
||||
|
||||
if(contract_events[number] === undefined)
|
||||
{
|
||||
getContractEvents({ dispatch, contract: number });
|
||||
}
|
||||
|
||||
let l = 0;
|
||||
let m = 0;
|
||||
const menu = [ "payments", "services", "agreement", "documents", "materials", "events", "change" ];
|
||||
@ -61,7 +79,10 @@ export default class InnerMenu extends React.Component
|
||||
render()
|
||||
{
|
||||
const { number, status } = this.props;
|
||||
const { menuOpened, count_events, count_fines } = this.state;
|
||||
const { menuOpened, count_fines, contract_events } = this.state;
|
||||
const count_events = contract_events[number] !== undefined && contract_events[number] !== null ? Object.keys(contract_events[number]).length : 0;
|
||||
|
||||
console.log("contract_events", contract_events);
|
||||
|
||||
return (
|
||||
<aside>
|
||||
@ -115,4 +136,13 @@ export default class InnerMenu extends React.Component
|
||||
</aside>
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function mapStateToProps(state, ownProps)
|
||||
{
|
||||
return {
|
||||
contract_events: state.contract_events
|
||||
};
|
||||
}
|
||||
|
||||
export default connect(mapStateToProps)(InnerMenu);
|
||||
@ -29,6 +29,7 @@ class ContractPage extends React.Component
|
||||
contracts_info: {},
|
||||
events_loaded: false,
|
||||
filtered: undefined,
|
||||
contract_events: {},
|
||||
};
|
||||
}
|
||||
|
||||
@ -36,8 +37,8 @@ class ContractPage extends React.Component
|
||||
{
|
||||
return {
|
||||
contracts_info: nextProps.contracts_info,
|
||||
events_loaded: nextProps.events_loaded,
|
||||
filtered: nextProps.filtered,
|
||||
events_loaded: nextProps.events_loaded,
|
||||
filtered: nextProps.filtered,
|
||||
};
|
||||
}
|
||||
|
||||
@ -105,32 +106,6 @@ class ContractPage extends React.Component
|
||||
<SpinnerCircular size={ 90 } thickness={ 51 } speed={ 100 } color="rgba(28, 1, 169, 1)" secondaryColor="rgba(236, 239, 244, 1)" />
|
||||
</div>
|
||||
) }
|
||||
{/*}
|
||||
<li className="new">
|
||||
<p className="name"><b>Внимание! Просрочена дата возврата СТС по договору: ХХ.ХХ.ХХХХ</b></p>
|
||||
<p className="type">Важное</p>
|
||||
<p className="date">10.01.2022</p>
|
||||
<p className="action">
|
||||
<a href="">Посмотрите порядок возврата СТС</a> или
|
||||
<a href="">Загрузите скан СТС</a>
|
||||
</p>
|
||||
</li>
|
||||
<li className="new">
|
||||
<p className="name"><b>Внимание! Просрочена дата возврата СТС по договору: ХХ.ХХ.ХХХХ</b></p>
|
||||
<p className="date">10.01.2022</p>
|
||||
<p className="action">
|
||||
<a href="">Посмотрите порядок возврата СТС</a> или
|
||||
<a href="">Загрузите скан СТС</a>
|
||||
</p>
|
||||
</li>
|
||||
<li className="new">
|
||||
<p className="name">Внимание! Осталось ХХ дней до пролонгации КАСКО по договору №ХХХХ: ХХ.ХХ.ХХХХ. Не забудьте самостоятельно продлить полис ОСАГО</p>
|
||||
<p className="date">10.01.2022</p>
|
||||
<p className="action">
|
||||
<a href="">Подробнее</a>
|
||||
</p>
|
||||
</li>
|
||||
{*/}
|
||||
</article>
|
||||
</div>
|
||||
</AccountLayout>
|
||||
|
||||
158
pages/events.js
158
pages/events.js
@ -16,12 +16,12 @@ import InnerMenu from "./components/Events/InnerMenu";
|
||||
|
||||
import NotificationMessage from "./components/Events/NotificationMessage";
|
||||
|
||||
import { getFilteredEvents } from "../actions";
|
||||
import { getEvents, getFilteredEvents } from "../actions";
|
||||
import AccountLayout from "./components/Layout/Account";
|
||||
|
||||
class EventsPage extends React.Component
|
||||
{
|
||||
constructor(props)
|
||||
constructor(props)
|
||||
{
|
||||
super(props);
|
||||
this.state = {
|
||||
@ -29,12 +29,21 @@ class EventsPage extends React.Component
|
||||
events_loaded: false,
|
||||
filtered: undefined,
|
||||
type: undefined,
|
||||
types: {
|
||||
"osago_prolong": "additional",
|
||||
"kasko_prolong": "additional",
|
||||
"fingap_prolong": "additional",
|
||||
"graph_change": "finance",
|
||||
"end_contract": "finance",
|
||||
"fine_gibdd": "fines",
|
||||
"return_pts": "pts",
|
||||
},
|
||||
loading: false,
|
||||
search: ""
|
||||
};
|
||||
}
|
||||
|
||||
static getDerivedStateFromProps(nextProps, prevState)
|
||||
static getDerivedStateFromProps(nextProps, prevState)
|
||||
{
|
||||
return {
|
||||
events: nextProps.events,
|
||||
@ -43,8 +52,25 @@ class EventsPage extends React.Component
|
||||
};
|
||||
}
|
||||
|
||||
componentDidMount()
|
||||
componentDidMount()
|
||||
{
|
||||
const { events_loaded } = this.state;
|
||||
const { dispatch, router } = this.props;
|
||||
|
||||
const hash = router.asPath.split('#')[1];
|
||||
console.log("HASH", hash);
|
||||
|
||||
this.setState({ type: hash }, () =>
|
||||
{
|
||||
if(!events_loaded)
|
||||
{
|
||||
getEvents({ dispatch })
|
||||
.then(() =>
|
||||
{
|
||||
this._filterEvents();
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
componentDidUpdate(prevProps, prevState)
|
||||
@ -52,10 +78,7 @@ class EventsPage extends React.Component
|
||||
const hash = this.props.router.asPath.split('#')[1];
|
||||
if(this.state.type !== hash)
|
||||
{
|
||||
this.setState({ type: hash }, () =>
|
||||
{
|
||||
this._filterEvents();
|
||||
});
|
||||
this.setState({ type: hash });
|
||||
}
|
||||
}
|
||||
|
||||
@ -72,13 +95,46 @@ class EventsPage extends React.Component
|
||||
_filterEvents = () =>
|
||||
{
|
||||
console.log("_filterEvents");
|
||||
const { type, search } = this.state;
|
||||
getFilteredEvents({ dispatch: this.props.dispatch, type, search });
|
||||
const { dispatch } = this.props;
|
||||
const { search } = this.state;
|
||||
|
||||
getFilteredEvents({ dispatch, search });
|
||||
}
|
||||
|
||||
_renderEvents = (events) =>
|
||||
{
|
||||
const { type, types } = this.state;
|
||||
const notifications = [];
|
||||
|
||||
for(let i in events)
|
||||
{
|
||||
let event = events[i];
|
||||
|
||||
if(type !== undefined && type !== types[ event.event_type ]) {}
|
||||
else
|
||||
{
|
||||
notifications.push(<NotificationMessage event={ event } key={ i } { ...this.props }/>);
|
||||
}
|
||||
}
|
||||
|
||||
if(notifications.length > 0)
|
||||
{
|
||||
return (
|
||||
<ul className="list events-list">
|
||||
{ notifications }
|
||||
</ul>
|
||||
)
|
||||
}
|
||||
else
|
||||
{
|
||||
return (<p>Нет событий по выбранным условиям.</p>)
|
||||
}
|
||||
}
|
||||
|
||||
render()
|
||||
{
|
||||
const { loading, search, events, events_loaded, filtered } = this.state;
|
||||
const { loading, type, types, search, events, events_loaded, filtered } = this.state;
|
||||
console.log("events", "type", type);
|
||||
|
||||
return (
|
||||
<React.Fragment>
|
||||
@ -95,7 +151,7 @@ class EventsPage extends React.Component
|
||||
<Company { ...this.props }/>
|
||||
</div>
|
||||
<div className="aside_container about">
|
||||
<InnerMenu { ...this.props }/>
|
||||
<InnerMenu { ...this.props } type={ type } types={ types } events={ filtered !== undefined ? filtered : events }/>
|
||||
<article>
|
||||
<div className="contract_search">
|
||||
<form onSubmit={ (event) => { event.preventDefault(); } }>
|
||||
@ -107,79 +163,11 @@ class EventsPage extends React.Component
|
||||
<button className="button" disabled={ search !== "" ? false : true } onClick={ this._handle_onSearch }>Поиск</button>
|
||||
</form>
|
||||
</div>
|
||||
{ events_loaded && (
|
||||
<>
|
||||
{ filtered !== undefined ? (
|
||||
<>
|
||||
{ filtered.length > 0 ? (
|
||||
<ul className="list events-list">
|
||||
{ filtered.map((event, index) => (
|
||||
<NotificationMessage event={ event } key={ index } { ...this.props }/>
|
||||
)) }
|
||||
</ul>
|
||||
) : (
|
||||
<p>Нет событий по выбранным условиям.</p>
|
||||
) }
|
||||
</>
|
||||
) : (
|
||||
<>
|
||||
{ events.length > 0 ? (
|
||||
<ul className="list events-list">
|
||||
{ events.map((event, index) => (
|
||||
<NotificationMessage event={ event } key={ index } { ...this.props }/>
|
||||
)) }
|
||||
</ul>
|
||||
) : (
|
||||
<p>У Вас нет событий по договорам.</p>
|
||||
) }
|
||||
</>
|
||||
)}
|
||||
</>
|
||||
) }
|
||||
{/*}
|
||||
<li className="new">
|
||||
<p className="name">
|
||||
<b>
|
||||
Внимание! { events_loaded === true ? "events_loaded" : "!!!events_loaded" } Просрочена дата возврата СТС по договору:
|
||||
ХХ.ХХ.ХХХХ
|
||||
</b>
|
||||
</p>
|
||||
<p className="type">Важное</p>
|
||||
<p className="date">10.01.2022</p>
|
||||
<p className="action">
|
||||
<a href="">Посмотрите порядок возврата СТС</a> или
|
||||
<a href="">Загрузите скан СТС</a>
|
||||
</p>
|
||||
</li>
|
||||
{*/}
|
||||
{/*}
|
||||
<li className="new">
|
||||
<p className="name">
|
||||
<b>
|
||||
Внимание! Просрочена дата возврата СТС по договору:
|
||||
ХХ.ХХ.ХХХХ
|
||||
</b>
|
||||
</p>
|
||||
<p className="date">10.01.2022</p>
|
||||
<p className="action">
|
||||
<a href="">Посмотрите порядок возврата СТС</a> или
|
||||
<a href="">Загрузите скан СТС</a>
|
||||
</p>
|
||||
</li>
|
||||
{*/}
|
||||
{/*}
|
||||
<li className="new">
|
||||
<p className="name">
|
||||
Внимание! Осталось ХХ дней до пролонгации КАСКО по
|
||||
договору №ХХХХ: ХХ.ХХ.ХХХХ. Не забудьте самостоятельно
|
||||
продлить полис ОСАГО
|
||||
</p>
|
||||
<p className="date">10.01.2022</p>
|
||||
<p className="action">
|
||||
<a href="">Подробнее</a>
|
||||
</p>
|
||||
</li>
|
||||
{*/}
|
||||
{ events_loaded && (
|
||||
<>
|
||||
{ filtered !== undefined ? this._renderEvents(filtered) : this._renderEvents(events) }
|
||||
</>
|
||||
) }
|
||||
</article>
|
||||
</div>
|
||||
</AccountLayout>
|
||||
|
||||
@ -21,6 +21,7 @@ import {
|
||||
setAppealsRead,
|
||||
} from "../../actions";
|
||||
import AccountLayout from "../components/Layout/Account";
|
||||
import RequestFile from "./components/RequestFile";
|
||||
|
||||
class SupportAppealsPage extends React.Component
|
||||
{
|
||||
@ -136,13 +137,14 @@ class SupportAppealsPage extends React.Component
|
||||
<>
|
||||
{ appeals.list.map((appeal, index) =>
|
||||
{
|
||||
console.log("appeal >>>>>>>", appeal);
|
||||
if(active) { if(appeal.status !== "active") { return null; } }
|
||||
|
||||
return (
|
||||
<div className="appeal_item" key={ index }>
|
||||
<div className="item_header">
|
||||
<p>Номер обращения: <b>{ appeal.number } от { moment(appeal.created_date, "YYYY-MM-DD").format("DD.MM.YYYY") }</b></p>
|
||||
<p>Отвественный сотрудник ОРК: <b>{ appeal.owner }</b></p>
|
||||
<p>Ваш персональный менеджер: <b>{ appeal.owner }</b></p>
|
||||
{ appeal.contracts.length > 0 && (
|
||||
<p>Договор{ appeal.contracts.length > 1 && "ы" }: <b>{ appeal.contracts.map((contract, contract_index) => (<span key={ contract_index }>№ { contract }{ contract_index < appeal.contracts.length - 1 && ", " }</span>)) }</b></p>
|
||||
) }
|
||||
@ -152,21 +154,24 @@ class SupportAppealsPage extends React.Component
|
||||
<div className="item_text">
|
||||
<p><b>Тема запроса</b></p>
|
||||
<p>{ appeal.subject }</p>
|
||||
{ appeal.documents.length > 0 && (
|
||||
<div className="dosc_list medium-icon">
|
||||
{ appeal.documents.map((file, index) => {
|
||||
if(file.doc_direction !== "outgoing") { return null; }
|
||||
return (<RequestFile key={ `template_${ index }` } id={ file.doc_url } filename={ file.doc_name } extension={ file.doc_extension }/>)
|
||||
}) }
|
||||
</div>
|
||||
) }
|
||||
</div>
|
||||
<div className="item_text">
|
||||
<p><b>Ответ ОРК</b></p>
|
||||
<p><b>Ответ службы клиентского сервиса</b></p>
|
||||
<p>{ appeal.answer === "" ? "Без ответа" : appeal.answer }</p>
|
||||
{ appeal.documents.length > 0 && (
|
||||
<div className="dosc_list medium-icon">
|
||||
{ appeal.documents.map((document, document_index) =>
|
||||
(
|
||||
<div className="row" key={ document_index }>
|
||||
<p className="doc_name i-pdf extension" data-format={ document.doc_extension }>
|
||||
{ document.doc_name }
|
||||
<span>Скачать документ</span>
|
||||
</p>
|
||||
</div>
|
||||
)) }
|
||||
{ appeal.documents.map((file, index) => {
|
||||
if(file.doc_direction !== "incoming") { return null; }
|
||||
(<RequestFile key={ `template_${ index }` } id={ file.doc_url } filename={ file.doc_name } extension={ file.doc_extension }/>)
|
||||
}) }
|
||||
</div>
|
||||
) }
|
||||
</div>
|
||||
|
||||
48
pages/support/components/RequestFile/index.js
Normal file
48
pages/support/components/RequestFile/index.js
Normal file
@ -0,0 +1,48 @@
|
||||
import React from "react";
|
||||
import { SpinnerCircular } from "spinners-react";
|
||||
|
||||
import { getFile } from "../../../../actions";
|
||||
|
||||
export default class RequestFile extends React.Component
|
||||
{
|
||||
constructor(props)
|
||||
{
|
||||
super(props);
|
||||
this.state = {
|
||||
downloading: false
|
||||
}
|
||||
}
|
||||
|
||||
_handle_onDownloadFile = () =>
|
||||
{
|
||||
const { id, filename } = this.props;
|
||||
const { downloading } = this.state;
|
||||
|
||||
if(!downloading)
|
||||
{
|
||||
this.setState({ downloading: true }, () =>
|
||||
{
|
||||
getFile({ id, filename })
|
||||
.then(() => { this.setState({ downloading: false }); })
|
||||
.catch(() => { this.setState({ downloading: false }); });
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
render()
|
||||
{
|
||||
const { filename, extension } = this.props;
|
||||
const { downloading } = this.state;
|
||||
|
||||
return (
|
||||
<div className="row interactive" onClick={ this._handle_onDownloadFile }>
|
||||
<p className="doc_name i-pdf extension" data-format={ extension } style={{ flexDirection: "column", display: "flex", alignItems: "flex-start", }}>
|
||||
{ filename }
|
||||
<span style={{ position: "relative", color: downloading ? "#8e94a780" : "#8e94a7", }}>
|
||||
Скачать шаблон{ downloading ? (<SpinnerCircular size={ 20 } thickness={ 100 } speed={ 100 } color="rgba(236, 239, 244, 1)" secondaryColor="rgba(28, 1, 169, 1)" style={{ position: "absolute", right: 0, marginRight: "-26px", top: 0, }} />) : null }
|
||||
</span>
|
||||
</p>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
}
|
||||
48
pages/support/components/TemplateFile/index.js
Normal file
48
pages/support/components/TemplateFile/index.js
Normal file
@ -0,0 +1,48 @@
|
||||
import React from "react";
|
||||
import { SpinnerCircular } from "spinners-react";
|
||||
|
||||
import { getBitrixFile } from "../../../../actions";
|
||||
|
||||
export default class TemplateFile extends React.Component
|
||||
{
|
||||
constructor(props)
|
||||
{
|
||||
super(props);
|
||||
this.state = {
|
||||
downloading: false
|
||||
}
|
||||
}
|
||||
|
||||
_handle_onDownloadFile = () =>
|
||||
{
|
||||
const { filename, url } = this.props.template;
|
||||
const { downloading } = this.state;
|
||||
|
||||
if(!downloading)
|
||||
{
|
||||
this.setState({ downloading: true }, () =>
|
||||
{
|
||||
getBitrixFile({ url, filename })
|
||||
.then(() => { this.setState({ downloading: false }); })
|
||||
.catch(() => { this.setState({ downloading: false }); });
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
render()
|
||||
{
|
||||
const { template } = this.props;
|
||||
const { downloading } = this.state;
|
||||
|
||||
return (
|
||||
<div className="row interactive" onClick={ this._handle_onDownloadFile }>
|
||||
<p className="doc_name i-pdf extension" data-format={ template.extension } style={{ flexDirection: "column", display: "flex", alignItems: "flex-start", }}>
|
||||
{ template.filename }
|
||||
<span style={{ position: "relative", color: downloading ? "#8e94a780" : "#8e94a7", }}>
|
||||
Скачать шаблон{ downloading ? (<SpinnerCircular size={ 20 } thickness={ 100 } speed={ 100 } color="rgba(236, 239, 244, 1)" secondaryColor="rgba(28, 1, 169, 1)" style={{ position: "absolute", right: 0, marginRight: "-26px", top: 0, }} />) : null }
|
||||
</span>
|
||||
</p>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
}
|
||||
@ -12,11 +12,12 @@ import Header from "../components/Header";
|
||||
import Footer from "../components/Footer";
|
||||
import Company from "../components/Company";
|
||||
import InnerMenu from "./components/InnerMenu";
|
||||
import AccountLayout from "../components/Layout/Account";
|
||||
import TemplateFile from "./components/TemplateFile";
|
||||
|
||||
import {
|
||||
getSupportThemes,
|
||||
} from "../../actions";
|
||||
import AccountLayout from "../components/Layout/Account";
|
||||
|
||||
class ContractPage extends React.Component
|
||||
{
|
||||
@ -182,12 +183,7 @@ class ContractPage extends React.Component
|
||||
<div className="column_text_block">
|
||||
<p><b>Шаблоны документов</b></p>
|
||||
<div className="dosc_list medium-icon">
|
||||
{ question.templates.map((template, index) =>
|
||||
(
|
||||
<div className="row" key={ `template_${ index }` }>
|
||||
<p className="doc_name i-pdf extension" data-format={ template.extension }>{ template.filename }</p>
|
||||
</div>
|
||||
)) }
|
||||
{ question.templates.map((template, index) => (<TemplateFile key={ `template_${ index }` } template={ template } />)) }
|
||||
</div>
|
||||
</div>
|
||||
) }
|
||||
|
||||
@ -15,6 +15,8 @@ import Footer from "../components/Footer";
|
||||
import Company from "../components/Company";
|
||||
import InnerMenu from "./components/InnerMenu";
|
||||
import SuccessMessage from "./components/SuccessMessage";
|
||||
import AccountLayout from "../components/Layout/Account";
|
||||
import TemplateFile from "./components/TemplateFile";
|
||||
|
||||
import {
|
||||
getSupportThemes,
|
||||
@ -23,46 +25,7 @@ import {
|
||||
sendNewAppeal,
|
||||
sendAppealAttachments
|
||||
} from "../../actions";
|
||||
import AccountLayout from "../components/Layout/Account";
|
||||
|
||||
class TemplateFile extends React.Component
|
||||
{
|
||||
constructor(props)
|
||||
{
|
||||
super(props);
|
||||
this.state = {
|
||||
downloading: false
|
||||
}
|
||||
}
|
||||
|
||||
_handle_onDownloadFile = () =>
|
||||
{
|
||||
const { filename, url } = this.props.template;
|
||||
const { downloading } = this.state;
|
||||
|
||||
if(!downloading)
|
||||
{
|
||||
this.setState({ downloading: true }, () =>
|
||||
{
|
||||
getBitrixFile({ url, filename })
|
||||
.then(() => { this.setState({ downloading: false }); })
|
||||
.catch(() => { this.setState({ downloading: false }); });
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
render()
|
||||
{
|
||||
const { template } = this.props;
|
||||
const { downloading } = this.state;
|
||||
|
||||
return (
|
||||
<div className="row interactive" onClick={ this._handle_onDownloadFile }>
|
||||
<p className="doc_name i-pdf extension" data-format={ template.extension }>{ template.filename }<span style={{ position: "relative", color: downloading ? "#8e94a780" : "#8e94a7", width: "100%" }}>Скачать шаблон{ downloading ? (<SpinnerCircular size={ 20 } thickness={ 100 } speed={ 100 } color="rgba(236, 239, 244, 1)" secondaryColor="rgba(28, 1, 169, 1)" style={{ position: "absolute", right: 0, marginRight: "-26px", top: 0, }} />) : null }</span></p>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
}
|
||||
class FileDropzone extends React.Component
|
||||
{
|
||||
constructor(props)
|
||||
@ -242,7 +205,10 @@ class SupportRequestPage extends React.Component
|
||||
})
|
||||
.then(() =>
|
||||
{
|
||||
this.setState({ loading: false, success: true, });
|
||||
this.setState({ loading: false, success: true, }, () =>
|
||||
{
|
||||
window.scrollTo(0, 0);
|
||||
});
|
||||
})
|
||||
.catch(() =>
|
||||
{
|
||||
@ -251,7 +217,10 @@ class SupportRequestPage extends React.Component
|
||||
}
|
||||
else
|
||||
{
|
||||
this.setState({ loading: false, success: true, });
|
||||
this.setState({ loading: false, success: true, }, () =>
|
||||
{
|
||||
window.scrollTo(0, 0);
|
||||
});
|
||||
}
|
||||
})
|
||||
.catch(() =>
|
||||
|
||||
28
reducers/contractEventsReducer.js
Normal file
28
reducers/contractEventsReducer.js
Normal file
@ -0,0 +1,28 @@
|
||||
import { HYDRATE } from 'next-redux-wrapper';
|
||||
|
||||
import * as actionTypes from '../constants/actionTypes';
|
||||
import initialState from "./initialState";
|
||||
|
||||
const contractEventsReducer = (state = initialState.contract_events, action) =>
|
||||
{
|
||||
switch (action.type)
|
||||
{
|
||||
case actionTypes.CONTRACT_EVENTS:
|
||||
{
|
||||
return {
|
||||
...state, ...action.data,
|
||||
};
|
||||
}
|
||||
|
||||
case actionTypes.CONTRACT_EVENTS_RESET:
|
||||
{
|
||||
return {};
|
||||
}
|
||||
|
||||
default: {
|
||||
return state;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
export default contractEventsReducer;
|
||||
@ -64,6 +64,7 @@ export const defaultState = {
|
||||
calculated: null,
|
||||
},
|
||||
},
|
||||
contract_events: {},
|
||||
calendar: {
|
||||
payments: null,
|
||||
periods: null,
|
||||
@ -87,7 +88,7 @@ export const defaultState = {
|
||||
events:
|
||||
{
|
||||
loaded: false,
|
||||
list: [],
|
||||
list: undefined,
|
||||
filtered: undefined,
|
||||
},
|
||||
support:
|
||||
|
||||
@ -12,6 +12,7 @@ import eventsReducer from '../reducers/eventsReducer';
|
||||
import supportReducer from '../reducers/supportReducer';
|
||||
import adminReducer from '../reducers/adminReducer';
|
||||
import contractsInfoReducer from '../reducers/contractsInfoReducer';
|
||||
import contractEventsReducer from '../reducers/contractEventsReducer';
|
||||
|
||||
const combinedReducer = combineReducers({
|
||||
auth: authReducer,
|
||||
@ -25,6 +26,7 @@ const combinedReducer = combineReducers({
|
||||
support: supportReducer,
|
||||
admin: adminReducer,
|
||||
contracts_info: contractsInfoReducer,
|
||||
contract_events: contractEventsReducer,
|
||||
});
|
||||
|
||||
const makeStore = (context) =>
|
||||
@ -42,7 +44,7 @@ const makeStore = (context) =>
|
||||
|
||||
const persistConfig = {
|
||||
key: 'nextjs',
|
||||
whitelist: [ 'auth', 'user', 'company', 'companies', 'contracts_info', ],
|
||||
whitelist: [ 'auth', 'user', 'company', 'companies', 'contracts_info', 'contract_events' ],
|
||||
storage
|
||||
};
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user