Merge branch 'master' of https://github.com/merelendor/evoleasing-account
This commit is contained in:
commit
81ed694d48
@ -609,7 +609,7 @@ export const getContractGraphicChangeGetCurrent = ({ dispatch, number }) =>
|
||||
{
|
||||
console.log("ACTION", "getContractGraphicChangeGetCurrent", "response.data", response.data);
|
||||
|
||||
dispatch({ type: actionTypes.CONTRACT_CHANGE, data: { current: response.data.planpayments } });
|
||||
dispatch({ type: actionTypes.CONTRACT_CHANGE, data: { current: { payments: response.data.planpayments, total: response.data.sum_total } } });
|
||||
resolve();
|
||||
})
|
||||
.catch((error) =>
|
||||
@ -636,7 +636,7 @@ export const getContractGraphicChangeGetCalculated = ({ dispatch, calculation })
|
||||
{
|
||||
console.log("ACTION", "getContractGraphicChangeGetCalculated", "response.data", response.data);
|
||||
|
||||
dispatch({ type: actionTypes.CONTRACT_CHANGE, data: { calculated: response.data.planpayments } });
|
||||
dispatch({ type: actionTypes.CONTRACT_CHANGE, data: { calculated: { payments: response.data.planpayments, total: response.data.sum_total } } });
|
||||
resolve();
|
||||
})
|
||||
.catch((error) =>
|
||||
|
||||
@ -20,6 +20,21 @@ if(process.browser)
|
||||
};
|
||||
}
|
||||
|
||||
function _getMarks(query, content)
|
||||
{
|
||||
let new_content = content;
|
||||
const search_array = query.split(" ");
|
||||
for(let s in search_array)
|
||||
{
|
||||
const chunk = search_array[s];
|
||||
const s_regex = new RegExp(chunk, 'gim');
|
||||
|
||||
new_content = new_content.replace(s_regex, `<mark>${ chunk }</mark>`)
|
||||
}
|
||||
|
||||
return new_content;
|
||||
}
|
||||
|
||||
export const setAppealsRead = ({ dispatch, appeals }) =>
|
||||
{
|
||||
return new Promise((resolve, reject) =>
|
||||
@ -90,7 +105,32 @@ export const getSupportThemes = ({ dispatch, query, }) =>
|
||||
console.log("getContractRules", "response.data", response.data);
|
||||
if(query !== undefined)
|
||||
{
|
||||
dispatch({ type: actionTypes.SUPPORT_THEMES_FILTERED, data: { filtered: response.data.themes } });
|
||||
const { themes } = response.data;
|
||||
const themes_filtered = [];
|
||||
|
||||
for(let t in themes)
|
||||
{
|
||||
if(themes[t].questions.length > 0)
|
||||
{
|
||||
const _theme = {
|
||||
_name: _getMarks(query, themes[t].name),
|
||||
questions: [],
|
||||
};
|
||||
|
||||
for(let q in themes[t].questions)
|
||||
{
|
||||
const _question = themes[t].questions[q];
|
||||
_question._title = _getMarks(query, themes[t].questions[q].title);
|
||||
_question._answer = _getMarks(query, themes[t].questions[q].answer);
|
||||
|
||||
_theme.questions.push(_question);
|
||||
}
|
||||
|
||||
themes_filtered.push(_theme);
|
||||
}
|
||||
}
|
||||
|
||||
dispatch({ type: actionTypes.SUPPORT_THEMES_FILTERED, data: { filtered: themes_filtered } });
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@ -15,11 +15,12 @@ export default class NotificationsList extends React.Component
|
||||
render()
|
||||
{
|
||||
const { events } = this.props;
|
||||
const limit = window.innerWidth > 768 ? 5 : 3;
|
||||
|
||||
return (
|
||||
<>
|
||||
<ul className="list">
|
||||
{ events !== undefined && events !== null && events.slice(0, 5).map((event, index) => <NotificationMessage event={ event } key={ index } { ...this.props }/>) }
|
||||
{ events !== undefined && events !== null && events.slice(0, limit).map((event, index) => <NotificationMessage event={ event } key={ index } { ...this.props }/>) }
|
||||
</ul>
|
||||
<Link href="/events">
|
||||
<a className="all">Все события</a>
|
||||
|
||||
@ -73,10 +73,10 @@ export default class CalculationsList extends React.Component
|
||||
<p className="item_desc">
|
||||
{ calculation.date_offset_type_comment !== null && (<>{ `${ calculation.date_offset_type_comment.label }: ${ calculation.date_offset_type_comment.value }` }<br/></>) }
|
||||
{ calculation.number_paydate_comment !== null && (<>{ `${ calculation.number_paydate_comment.label }: ${ calculation.number_paydate_comment.value }` }<br/></>) }
|
||||
{ calculation.insurance_price_result_comment !== null && (<>{ calculation.insurance_price_result_comment.label }: <span style={{ whiteSpace: "nowrap"}}>{ numeral(calculation.insurance_price_result_comment.value).format(' ., ') } ₽</span><br/></>) }
|
||||
{ calculation.insurance_price_result_comment !== null && (<>{ calculation.insurance_price_result_comment.label }: <span>{ calculation.insurance_price_result_comment.value }</span><br/></>) }
|
||||
{ calculation.fix_last_payment_available_comment !== null && (<>{ `${ calculation.fix_last_payment_available_comment.label }: ${ calculation.fix_last_payment_available_comment.value ? "да" : "нет" }` }<br/></>) }
|
||||
{ calculation.period_new_comment !== null && (<>{ `${ calculation.period_new_comment.label }: ${ calculation.period_new_comment.value }` }<br/></>) }
|
||||
{ calculation.sum_comment !== null && (<>{ calculation.sum_comment.label }: <span style={{ whiteSpace: "nowrap"}}>{ numeral(calculation.sum_comment.value).format(' ., ') } ₽</span><br/></>) }
|
||||
{ calculation.sum_comment !== null && (<>{ calculation.sum_comment.label }: <span>{ calculation.sum_comment.value }</span><br/></>) }
|
||||
</p>
|
||||
<a className="item_link interactive" onClick={ () => this._handle_onCalculation(calculation.addcontract_number) }>Подробнее</a>
|
||||
</div>
|
||||
|
||||
@ -48,11 +48,11 @@ export default class Comparison extends React.Component
|
||||
}
|
||||
|
||||
const opened = [];
|
||||
for(let i in current)
|
||||
for(let i in current.payments)
|
||||
{
|
||||
if(moment(current[i].plandate) >= today)
|
||||
if(moment(current.payments[i].plandate) >= today)
|
||||
{
|
||||
opened.push(current[i].name);
|
||||
opened.push(current.payments[i].name);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -134,13 +134,11 @@ export default class Comparison extends React.Component
|
||||
|
||||
if(current !== undefined && current !== null && calculated !== undefined && calculated !== null)
|
||||
{
|
||||
console.log("_renderMixedPayments", "current.length", current.length, "calculated.length", calculated.length);
|
||||
|
||||
if(current.length > calculated.length)
|
||||
if(current.payments.length > calculated.payments.length)
|
||||
{
|
||||
return (
|
||||
<>
|
||||
{ current.map((payment, index) =>
|
||||
{ current.payments.map((payment, index) =>
|
||||
{
|
||||
if(!show_previous && moment(payment.plandate) < today) { return null; }
|
||||
else
|
||||
@ -155,15 +153,26 @@ export default class Comparison extends React.Component
|
||||
<div><span>Сумма досрочного выкупа</span> { numeral(payment.early_repayment_sum).format(' ., ') } ₽</div>
|
||||
</div>
|
||||
<div className="table_cell">
|
||||
<div><span>Новый график</span> { calculated[index] !== undefined ? moment(calculated[index].plandate, "YYYY.MM.DD").format("DD.MM.YYYY") : (`-`) }</div>
|
||||
<div><span>На сумму</span> { calculated[index] !== undefined ? (<>{ numeral(calculated[index].sum).format(' ., ') } ₽</>) : (`-`) }</div>
|
||||
<div><span>Сумма досрочного выкупа</span> { calculated[index] !== undefined ? (<>{ numeral(calculated[index].early_repayment_sum).format(' ., ') } ₽</>) : (`-`) }</div>
|
||||
<div><span>Новый график</span> { calculated.payments[index] !== undefined ? moment(calculated.payments[index].plandate, "YYYY.MM.DD").format("DD.MM.YYYY") : (`-`) }</div>
|
||||
<div><span>На сумму</span> { calculated.payments[index] !== undefined ? (<>{ numeral(calculated.payments[index].sum).format(' ., ') } ₽</>) : (`-`) }</div>
|
||||
<div><span>Сумма досрочного выкупа</span> { calculated.payments[index] !== undefined ? (<>{ numeral(calculated.payments[index].early_repayment_sum).format(' ., ') } ₽</>) : (`-`) }</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
}) }
|
||||
<div key={ `mixed_total` } className={ `table_row ${ opened.indexOf("mixed_total") > -1 && "opened" }` } onClick={ () => this._handle_onMixedPayment("mixed_total") }>
|
||||
<p className="row_title">Итого</p>
|
||||
<div className="table_group">
|
||||
<div className="table_cell">
|
||||
<div><span>Текущий график</span> { numeral(current.total).format(' ., ') } ₽</div>
|
||||
</div>
|
||||
<div className="table_cell">
|
||||
<div><span>Новый график</span> { numeral(calculated.total).format(' ., ') } ₽</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</>
|
||||
)
|
||||
}
|
||||
@ -171,7 +180,7 @@ export default class Comparison extends React.Component
|
||||
{
|
||||
return (
|
||||
<>
|
||||
{ calculated.map((payment, index) =>
|
||||
{ calculated.payments.map((payment, index) =>
|
||||
{
|
||||
if(!show_previous && moment(payment.plandate) < today) { return null; }
|
||||
else
|
||||
@ -181,9 +190,9 @@ export default class Comparison extends React.Component
|
||||
<p className="row_title">Платеж №{ payment.name }</p>
|
||||
<div className="table_group">
|
||||
<div className="table_cell">
|
||||
<div><span>Текущий график</span> { current[index] !== undefined ? moment(current[index].plandate, "YYYY.MM.DD").format("DD.MM.YYYY") : (`-`) }</div>
|
||||
<div><span>На сумму</span> { current[index] !== undefined ? (<>{ numeral(current[index].sum).format(' ., ') } ₽</>) : (`-`) }</div>
|
||||
<div><span>Сумма досрочного выкупа</span> { current[index] !== undefined ? (<>{ numeral(current[index].early_repayment_sum).format(' ., ') } ₽</>) : (`-`) }</div>
|
||||
<div><span>Текущий график</span> { current.payments[index] !== undefined ? moment(current.payments[index].plandate, "YYYY.MM.DD").format("DD.MM.YYYY") : (`-`) }</div>
|
||||
<div><span>На сумму</span> { current.payments[index] !== undefined ? (<>{ numeral(current.payments[index].sum).format(' ., ') } ₽</>) : (`-`) }</div>
|
||||
<div><span>Сумма досрочного выкупа</span> { current.payments[index] !== undefined ? (<>{ numeral(current.payments[index].early_repayment_sum).format(' ., ') } ₽</>) : (`-`) }</div>
|
||||
</div>
|
||||
<div className="table_cell">
|
||||
<div><span>Новый график</span> { moment(payment.plandate, "YYYY.MM.DD").format("DD.MM.YYYY") }</div>
|
||||
@ -195,6 +204,17 @@ export default class Comparison extends React.Component
|
||||
)
|
||||
}
|
||||
}) }
|
||||
<div key={ `mixed_total` } className={ `table_row ${ opened.indexOf("mixed_total") > -1 && "opened" }` } onClick={ () => this._handle_onMixedPayment("mixed_total") }>
|
||||
<p className="row_title">Итого</p>
|
||||
<div className="table_group">
|
||||
<div className="table_cell">
|
||||
<div><span>Текущий график</span> { numeral(current.total).format(' ., ') } ₽</div>
|
||||
</div>
|
||||
<div className="table_cell">
|
||||
<div><span>Новый график</span> { numeral(calculated.total).format(' ., ') } ₽</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</>
|
||||
)
|
||||
}
|
||||
@ -213,18 +233,19 @@ export default class Comparison extends React.Component
|
||||
<div className="compare_top">
|
||||
<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">
|
||||
{ calculation !== undefined && calculation !== null && calculation.fix_last_payment_available_comment !== null && (
|
||||
<div className="form_field">
|
||||
<input type="checkbox" hidden id="" name="" checked={ calculation.fix_last_payment_available_comment.value ? true : false } disabled style={ calculation.fix_last_payment_available_comment.value ? {} : { background: "unset"} } />
|
||||
<label htmlFor="">{ calculation.fix_last_payment_available_comment.label }</label>
|
||||
<p><span>{ calculation.fix_last_payment_available_comment.label }:</span> { calculation.fix_last_payment_available_comment.value ? "Да" : "Нет" }</p>
|
||||
</div>
|
||||
) }
|
||||
{ calculation !== undefined && calculation !== null && calculation.date_offset_type_comment !== null && (
|
||||
<div className="form_field">
|
||||
<input type="checkbox" hidden id="" name="" checked={ calculation.date_offset_type_comment.value ? true : false } disabled style={ calculation.date_offset_type_comment.value ? {} : { background: "unset"} } />
|
||||
<input type="checkbox" hidden id="" name="" checked={ calculation.date_offset_type_comment.value ? true : false } disabled={ true } style={ calculation.date_offset_type_comment.value ? {} : { background: "unset"} } />
|
||||
<label htmlFor="">{ calculation.date_offset_type_comment.label }</label>
|
||||
</div>
|
||||
) }
|
||||
@ -286,7 +307,7 @@ export default class Comparison extends React.Component
|
||||
</button>
|
||||
</div>
|
||||
) }
|
||||
{ current !== undefined && current !== null && current.map((payment, index) =>
|
||||
{ current !== undefined && current !== null && current.payments.map((payment, index) =>
|
||||
{
|
||||
if(!show_previous && moment(payment.plandate) < today) { return null; }
|
||||
|
||||
@ -299,6 +320,14 @@ export default class Comparison extends React.Component
|
||||
</div>
|
||||
)
|
||||
}) }
|
||||
{ current !== undefined && current !== null && (
|
||||
<div key={ `current_total` } className="table_row" >
|
||||
<div></div>
|
||||
<div><b>Итого</b></div>
|
||||
<div><b>{ numeral(current.total).format(' ., ') } ₽</b></div>
|
||||
<div></div>
|
||||
</div>
|
||||
) }
|
||||
</div>
|
||||
</div>
|
||||
<div className="compare_table">
|
||||
@ -321,7 +350,7 @@ export default class Comparison extends React.Component
|
||||
</button>
|
||||
</div>
|
||||
) }
|
||||
{ calculated !== undefined && calculated !== null && calculated.map((payment, index) =>
|
||||
{ calculated !== undefined && calculated !== null && calculated.payments.map((payment, index) =>
|
||||
{
|
||||
if(!show_previous && moment(payment.plandate) < today) { return null; }
|
||||
|
||||
@ -334,6 +363,14 @@ export default class Comparison extends React.Component
|
||||
</div>
|
||||
)
|
||||
}) }
|
||||
{ calculated !== undefined && calculated !== null && (
|
||||
<div key={ `calculated_total` } className="table_row" >
|
||||
<div></div>
|
||||
<div><b>Итого</b></div>
|
||||
<div><b>{ numeral(calculated.total).format(' ., ') } ₽</b></div>
|
||||
<div></div>
|
||||
</div>
|
||||
) }
|
||||
</div>
|
||||
</div>
|
||||
<div className="compare_table touchable">
|
||||
|
||||
@ -17,6 +17,7 @@ class PaymentDate extends React.Component
|
||||
value: null,
|
||||
min: null,
|
||||
max: null,
|
||||
help: false,
|
||||
}
|
||||
}
|
||||
|
||||
@ -44,6 +45,14 @@ class PaymentDate extends React.Component
|
||||
});
|
||||
}
|
||||
|
||||
_handle_onMobileHelp = () =>
|
||||
{
|
||||
if(window.innerWidth < 768)
|
||||
{
|
||||
this.setState({ help: this.state.help ? false : true });
|
||||
}
|
||||
}
|
||||
|
||||
render()
|
||||
{
|
||||
const { option } = this.props;
|
||||
@ -74,6 +83,7 @@ class FixLastPayment extends React.Component
|
||||
super(props);
|
||||
this.state = {
|
||||
value: false,
|
||||
help: false,
|
||||
};
|
||||
}
|
||||
|
||||
@ -99,10 +109,18 @@ class FixLastPayment extends React.Component
|
||||
});
|
||||
}
|
||||
|
||||
_handle_onMobileHelp = () =>
|
||||
{
|
||||
if(window.innerWidth < 768)
|
||||
{
|
||||
this.setState({ help: this.state.help ? false : true });
|
||||
}
|
||||
}
|
||||
|
||||
render()
|
||||
{
|
||||
const { option } = this.props;
|
||||
const { value } = this.state;
|
||||
const { value, help } = this.state;
|
||||
|
||||
return (
|
||||
<div className="form_field">
|
||||
@ -112,19 +130,17 @@ class FixLastPayment extends React.Component
|
||||
</label>
|
||||
{ option.information !== undefined && option.information !== null && (
|
||||
<div className="help_tooltip">
|
||||
<div className="help_icon">
|
||||
<div className="help_icon" onClick={ () => this._handle_onMobileHelp() }>
|
||||
<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 ${ help && "opened" }`}>
|
||||
<div>
|
||||
<p dangerouslySetInnerHTML={{ __html: option.information }}/>
|
||||
<p className="button">Закрыть</p>
|
||||
<p className="button" onClick={ () => this._handle_onMobileHelp() }>Закрыть</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -269,6 +285,7 @@ class SumSelector extends React.Component
|
||||
value: "",
|
||||
min: null,
|
||||
max: null,
|
||||
help: false,
|
||||
}
|
||||
}
|
||||
|
||||
@ -305,10 +322,18 @@ class SumSelector extends React.Component
|
||||
}
|
||||
}
|
||||
|
||||
_handle_onMobileHelp = () =>
|
||||
{
|
||||
if(window.innerWidth < 768)
|
||||
{
|
||||
this.setState({ help: this.state.help ? false : true });
|
||||
}
|
||||
}
|
||||
|
||||
render()
|
||||
{
|
||||
const { option } = this.props;
|
||||
const { value, min, max } = this.state;
|
||||
const { value, min, max, help } = this.state;
|
||||
|
||||
return (
|
||||
<div className="form_field">
|
||||
@ -320,19 +345,17 @@ class SumSelector extends React.Component
|
||||
</div>
|
||||
{ option.information !== undefined && option.information !== null && (
|
||||
<div className="help_tooltip">
|
||||
<div className="help_icon">
|
||||
<div className="help_icon" onClick={ () => this._handle_onMobileHelp() }>
|
||||
<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 ${ help && "opened" }`}>
|
||||
<div>
|
||||
<p dangerouslySetInnerHTML={{ __html: option.information }}/>
|
||||
<p className="button">Закрыть</p>
|
||||
<p className="button" onClick={ () => this._handle_onMobileHelp() }>Закрыть</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -351,6 +374,7 @@ class InsurancePriceSelector extends React.Component
|
||||
value: "",
|
||||
min: null,
|
||||
max: null,
|
||||
help: false,
|
||||
}
|
||||
}
|
||||
|
||||
@ -395,10 +419,18 @@ class InsurancePriceSelector extends React.Component
|
||||
//}
|
||||
}
|
||||
|
||||
_handle_onMobileHelp = () =>
|
||||
{
|
||||
if(window.innerWidth < 768)
|
||||
{
|
||||
this.setState({ help: this.state.help ? false : true });
|
||||
}
|
||||
}
|
||||
|
||||
render()
|
||||
{
|
||||
const { option } = this.props;
|
||||
const { value, min, max } = this.state;
|
||||
const { value, min, max, help } = this.state;
|
||||
|
||||
return (
|
||||
<div className="form_field">
|
||||
@ -416,19 +448,17 @@ class InsurancePriceSelector extends React.Component
|
||||
</div>
|
||||
{ option.information !== undefined && option.information !== null && (
|
||||
<div className="help_tooltip">
|
||||
<div className="help_icon">
|
||||
<div className="help_icon" onClick={ () => this._handle_onMobileHelp() }>
|
||||
<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 ${ help && "opened" }`}>
|
||||
<div>
|
||||
<p dangerouslySetInnerHTML={{ __html: option.information }}/>
|
||||
<p className="button">Закрыть</p>
|
||||
<p className="button" onClick={ () => this._handle_onMobileHelp() }>Закрыть</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -593,7 +623,7 @@ export default class Options extends React.Component
|
||||
{
|
||||
this.setState({ sending: false, }, () =>
|
||||
{
|
||||
alert("К сожаление при расчете возникла ошибка.");
|
||||
alert("К сожалению при расчете возникла ошибка.");
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@ -68,19 +68,21 @@ export default class VariantsList extends React.Component
|
||||
|
||||
_handle_onMobileHelp = (index) =>
|
||||
{
|
||||
console.log("_handle_onMobileHelp", index);
|
||||
const opened = [ ...this.state.opened ];
|
||||
if(window.innerWidth < 768)
|
||||
{
|
||||
const opened = [ ...this.state.opened ];
|
||||
|
||||
if (opened.indexOf(index) === -1)
|
||||
{
|
||||
opened.push(index);
|
||||
}
|
||||
else
|
||||
{
|
||||
opened.splice(opened.indexOf(index), 1);
|
||||
if (opened.indexOf(index) === -1)
|
||||
{
|
||||
opened.push(index);
|
||||
}
|
||||
else
|
||||
{
|
||||
opened.splice(opened.indexOf(index), 1);
|
||||
}
|
||||
|
||||
this.setState({ opened: opened });
|
||||
}
|
||||
|
||||
this.setState({ opened: opened });
|
||||
}
|
||||
|
||||
render()
|
||||
|
||||
@ -227,7 +227,7 @@ class ChangeGraphicPage extends React.Component
|
||||
{
|
||||
this.setState({ loading: false, }, () =>
|
||||
{
|
||||
alert("К сожаление при формировании документа возникла ошибка.");
|
||||
alert("К сожалению при формировании документа возникла ошибка.");
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@ -64,7 +64,7 @@ export default class InnerMenu extends React.Component
|
||||
render()
|
||||
{
|
||||
const { user, observer } = this.props;
|
||||
const { menu, menuOpened, } = this.state;
|
||||
const { menuOpened, } = this.state;
|
||||
|
||||
return (
|
||||
<aside>
|
||||
|
||||
@ -156,26 +156,26 @@ class SupportAppealsPage extends React.Component
|
||||
{ appeal.client_request !== null && appeal.client_request !== "" && (
|
||||
<>
|
||||
<p><b>Текст запроса</b></p>
|
||||
<p>{ appeal.client_request }</p>
|
||||
<p dangerouslySetInnerHTML={{ __html: appeal.client_request.replace("\\n", "<br/>") }}></p>
|
||||
</>
|
||||
) }
|
||||
{ appeal.documents.length > 0 && (
|
||||
<div className="dosc_list medium-icon">
|
||||
{ appeal.documents.map((file, index) => {
|
||||
if(file.doc_direction !== "incoming") { return null; }
|
||||
return (<RequestFile key={ `template_${ index }` } id={ file.doc_url } filename={ `${ file.doc_name }.${ file.doc_extension }` } extension={ file.doc_extension } title="Скачать документ"/>)
|
||||
return (<RequestFile key={ `template_${ index }` } file={ file }/>)
|
||||
}) }
|
||||
</div>
|
||||
) }
|
||||
</div>
|
||||
<div className="item_text">
|
||||
<p><b>Ответ службы клиентского сервиса</b></p>
|
||||
<p>{ appeal.answer === "" ? "Без ответа" : appeal.answer }</p>
|
||||
<p dangerouslySetInnerHTML={{ __html: appeal.answer === null || appeal.answer === "" ? "Без ответа" : appeal.answer.replace("\\n", "<br/>") }}></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 }.${ file.doc_extension }` } extension={ file.doc_extension } title="Скачать документ"/>)
|
||||
return (<RequestFile key={ `template_${ index }` } file={ file }/>)
|
||||
}) }
|
||||
</div>
|
||||
) }
|
||||
|
||||
@ -15,14 +15,14 @@ export default class RequestFile extends React.Component
|
||||
|
||||
_handle_onDownloadFile = () =>
|
||||
{
|
||||
const { id, filename } = this.props;
|
||||
const { file } = this.props;
|
||||
const { downloading } = this.state;
|
||||
|
||||
if(!downloading)
|
||||
{
|
||||
this.setState({ downloading: true }, () =>
|
||||
{
|
||||
getFile({ id, filename })
|
||||
getFile({ id: file.doc_url, filename: `${ file.doc_name }.${ file.doc_extension }` })
|
||||
.then(() => { this.setState({ downloading: false }); })
|
||||
.catch(() => { this.setState({ downloading: false }); });
|
||||
});
|
||||
@ -31,15 +31,15 @@ export default class RequestFile extends React.Component
|
||||
|
||||
render()
|
||||
{
|
||||
const { filename, extension, title } = this.props;
|
||||
const { file } = 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 }
|
||||
<p className="doc_name i-pdf extension" data-format={ file.doc_extension } style={{ flexDirection: "column", display: "flex", alignItems: "flex-start", }}>
|
||||
{ file.doc_name }
|
||||
<span style={{ position: "relative", color: downloading ? "#8e94a780" : "#8e94a7", }}>
|
||||
{ title ? title : "Скачать шаблон" } { 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 }
|
||||
Скачать документ { 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>
|
||||
|
||||
@ -20,7 +20,7 @@ import {
|
||||
resetFilteredThemes,
|
||||
} from "../../actions";
|
||||
|
||||
class ContractPage extends React.Component
|
||||
class SupportPage extends React.Component
|
||||
{
|
||||
constructor(props)
|
||||
{
|
||||
@ -248,8 +248,8 @@ class ContractPage extends React.Component
|
||||
(
|
||||
<div className="search_list" key={ `searched_${ question.id }` }>
|
||||
<div className="search_item">
|
||||
<p className="item_title" dangerouslySetInnerHTML={{ __html: this._getMarks(`${ theme.name } / ${ question.title }`) }}></p>
|
||||
<p dangerouslySetInnerHTML={{ __html: this._getMarks(`${ theme.name } / ${ question.answer }`) }}/>
|
||||
<p className="item_title" dangerouslySetInnerHTML={{ __html: `${ theme._name } / ${ question._title }` }}></p>
|
||||
<p dangerouslySetInnerHTML={{ __html: question._answer }}/>
|
||||
{/*}
|
||||
<p>К каждой теме свободное <mark>html поле для миниинструкции</mark> (со ссылками на формы документов и документы). Привязка к теме обращения в CRM</p>
|
||||
{*/}
|
||||
@ -343,4 +343,4 @@ export const getServerSideProps = reduxWrapper.getServerSideProps(
|
||||
}
|
||||
);
|
||||
|
||||
export default withRouter(connect(mapStateToProps)(ContractPage));
|
||||
export default withRouter(connect(mapStateToProps)(SupportPage));
|
||||
|
||||
@ -43,7 +43,7 @@ const makeStore = (context) =>
|
||||
const storage = require('redux-persist/lib/storage').default;
|
||||
|
||||
const persistConfig = {
|
||||
key: 'nextjs',
|
||||
key: 'lkevoleasing',
|
||||
whitelist: [ 'auth', 'user', 'company', 'companies', 'contracts_info', 'contract_events' ],
|
||||
storage
|
||||
};
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user