rate mobile fixes
This commit is contained in:
parent
41a4d824e8
commit
3c34e9fb2c
@ -4,7 +4,10 @@ import Router from 'next/router';
|
||||
import moment from 'moment';
|
||||
import { nSQL } from "@nano-sql/core";
|
||||
|
||||
/*
|
||||
import * as actionTypes from '../constants/actionTypes';
|
||||
import * as currentState from '../reducers/initialState';
|
||||
|
||||
/*DEALS_LIST
|
||||
/lk/ConsiderationOpportunity/quote
|
||||
|
||||
[{
|
||||
@ -24,24 +27,76 @@ import { nSQL } from "@nano-sql/core";
|
||||
"model_name": "Touareg",
|
||||
"object_count": 1,
|
||||
}]
|
||||
|
||||
[{
|
||||
"opp_number": "780",
|
||||
"statuscode_id": 107,
|
||||
"statuscode_name": " ",
|
||||
"comment": null,
|
||||
}, {
|
||||
"opp_number": "37197",
|
||||
"statuscode_id": 101,
|
||||
"statuscode_name": " ",
|
||||
"comment": null,
|
||||
}]
|
||||
opp_number- номер Лизинговой сделки
|
||||
statuscode_id - номер этапа
|
||||
statuscode_name - имя этапа
|
||||
comment - сопроводительный текст для данного этапа, который надо выводить
|
||||
|
||||
*/
|
||||
|
||||
export const getDeals = ({ dispatch }) =>
|
||||
{
|
||||
//console.log("ACTION", "support", "getAppeals()", `${ process.env.NEXT_PUBLIC_SELF_API_HOST }/api/support/appeals`);
|
||||
console.log("ACTION", "deals", "getDeals()", `${ process.env.NEXT_PUBLIC_SELF_API_HOST }/api/deals`);
|
||||
return new Promise((resolve, reject) =>
|
||||
{
|
||||
axios.post(`${ process.env.NEXT_PUBLIC_SELF_API_HOST }/api/deals/list`, {}, {
|
||||
console.log("??????????????????????? WTF");
|
||||
|
||||
axios.post(`${ process.env.NEXT_PUBLIC_SELF_API_HOST }/api/deals`, {}, {
|
||||
withCredentials: true,
|
||||
})
|
||||
.then((response) =>
|
||||
{
|
||||
//console.log("ACTION", "support", "getAppeals()", "response", response.data);
|
||||
dispatch({ type: actionTypes.DEALS, data: {} });
|
||||
console.log("!!!!!!!!!!!!!!!!!!!!!!!!! GOOOOOOD");
|
||||
console.log("ACTION", "deals", "getDeals()", "response", response.data);
|
||||
dispatch({
|
||||
type: actionTypes.DEALS_LIST,
|
||||
data: {
|
||||
list: [{
|
||||
"opp_number": "780",
|
||||
"statuscode_id": 107,
|
||||
"statuscode_name": " ",
|
||||
"comment": null,
|
||||
}, {
|
||||
"opp_number": "37197",
|
||||
"statuscode_id": 101,
|
||||
"statuscode_name": " ",
|
||||
"comment": null,
|
||||
}]
|
||||
}
|
||||
});
|
||||
resolve();
|
||||
})
|
||||
.catch((error) =>
|
||||
{
|
||||
console.log("!!!!!!!!!!!!!!!!!!!!!!!!! ERROR", { action: actionTypes.DEALS_LIST });
|
||||
dispatch({
|
||||
type: actionTypes.DEALS_LIST,
|
||||
data: {
|
||||
list: [{
|
||||
"opp_number": "780",
|
||||
"statuscode_id": 107,
|
||||
"statuscode_name": " ",
|
||||
"comment": null,
|
||||
}, {
|
||||
"opp_number": "37197",
|
||||
"statuscode_id": 101,
|
||||
"statuscode_name": " ",
|
||||
"comment": null,
|
||||
}]
|
||||
}
|
||||
});
|
||||
console.error(error);
|
||||
reject();
|
||||
});
|
||||
|
||||
@ -13,4 +13,5 @@ export * from './supportActions';
|
||||
export * from './adminActions';
|
||||
export * from './suggestsActions';
|
||||
export * from './questionnaireActions';
|
||||
export * from './feedbackActions';
|
||||
export * from './feedbackActions';
|
||||
export * from './dealsActions';
|
||||
45
components/DealsStatus/DealsList.js
Normal file
45
components/DealsStatus/DealsList.js
Normal file
@ -0,0 +1,45 @@
|
||||
import React from "react";
|
||||
import DealsListDeal from "./DealsListDeal";
|
||||
import SingleDeal from "./SingleDeal";
|
||||
|
||||
export default class DealsList extends React.Component
|
||||
{
|
||||
constructor(props)
|
||||
{
|
||||
super(props);
|
||||
}
|
||||
|
||||
render()
|
||||
{
|
||||
const { deals, dealSelected } = this.props;
|
||||
|
||||
console.log({ deals });
|
||||
|
||||
return (
|
||||
<div className="contractStatus_list">
|
||||
{ deals.list !== undefined && deals.list !== null && deals.list.map((deal, index) =>
|
||||
{
|
||||
if(index === dealSelected)
|
||||
{
|
||||
return (<SingleDeal
|
||||
key={ index }
|
||||
close={() => {
|
||||
this._handleModalToggle("current")
|
||||
}}
|
||||
/>)
|
||||
}
|
||||
else
|
||||
{
|
||||
return (
|
||||
<DealsListDeal
|
||||
key={ index }
|
||||
index={ index }
|
||||
{ ...deal }
|
||||
/>
|
||||
)
|
||||
}
|
||||
} )}
|
||||
</div>
|
||||
)
|
||||
}
|
||||
}
|
||||
55
components/DealsStatus/DealsListDeal.js
Normal file
55
components/DealsStatus/DealsListDeal.js
Normal file
@ -0,0 +1,55 @@
|
||||
import React from "react";
|
||||
import pluralize from 'pluralize-ru';
|
||||
|
||||
const statuses = [
|
||||
{
|
||||
title: "Сбор пакета документов",
|
||||
icon: "/assets/images/status/1.svg",
|
||||
}
|
||||
];
|
||||
|
||||
export default class DealsListDeal extends React.Component
|
||||
{
|
||||
constructor(props)
|
||||
{
|
||||
super(props)
|
||||
}
|
||||
|
||||
render()
|
||||
{
|
||||
const { index, comment, opp_number, statuscode_id, statuscode_name } = this.props;
|
||||
const step = statuscode_id - 100;
|
||||
|
||||
console.log("deal list item", { props: this.props });
|
||||
|
||||
return (
|
||||
<div className="list_item">
|
||||
<div>
|
||||
<p>Сделка { index + 1 }</p>
|
||||
</div>
|
||||
<div>
|
||||
<p>
|
||||
{ step === 0 ? "Не начата" : `${ step } ${ pluralize(step, 'этапа', 'этап', 'этапа', 'этапов') } ${ pluralize(step, 'пройдено', 'пройден', 'пройдено', 'пройдено') }` }
|
||||
{/*}
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width={18} height={18} fill="none">
|
||||
<path stroke="#8E94A7" strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M14.625 6.75 9 12.375 3.375 6.75" />
|
||||
</svg>
|
||||
{*/}
|
||||
</p>
|
||||
</div>
|
||||
<div>
|
||||
<img src="/assets/images/status/1.svg" width="50" height="50" />
|
||||
<p>Сбор пакета документов</p>
|
||||
</div>
|
||||
<div>
|
||||
<button className="button" onClick={() => { this._handleModalToggle("all") }} >
|
||||
Еще 4 этапа
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width={18} height={18} fill="none">
|
||||
<path stroke="#1C01A9" strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M14.625 6.75 9 12.375 3.375 6.75" />
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
}
|
||||
308
components/DealsStatus/SingleDeal.js
Normal file
308
components/DealsStatus/SingleDeal.js
Normal file
@ -0,0 +1,308 @@
|
||||
import React from "react"
|
||||
|
||||
export default class SingleDeal extends React.Component
|
||||
{
|
||||
constructor(props)
|
||||
{
|
||||
super(props);
|
||||
}
|
||||
|
||||
render()
|
||||
{
|
||||
const { close } = this.props;
|
||||
|
||||
return (
|
||||
<div className="contractStatus_modal">
|
||||
{/*}
|
||||
<div className="modal_header">
|
||||
<p className="modal_title">Статус сделки</p>
|
||||
<button className="modal_close" onClick={close}></button>
|
||||
</div>
|
||||
{*/}
|
||||
<div className="modal_body single_status">
|
||||
<div className="current">
|
||||
<p>Сделка 1</p>
|
||||
<span></span>
|
||||
<div className="status_body">
|
||||
<div className="status_header">
|
||||
<i className="status_1"></i>
|
||||
<p>Выбор КП</p>
|
||||
</div>
|
||||
<div className="wrap">
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th></th>
|
||||
<th>№</th>
|
||||
<th>Стоимость</th>
|
||||
<th>Первый платеж, р.</th>
|
||||
<th>Первый платеж, %</th>
|
||||
<th>Марка</th>
|
||||
<th>Модель</th>
|
||||
<th>Объектов лизинга</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>
|
||||
<div className="form_field checkbox">
|
||||
<input type="checkbox" name="row" id="row" checked="" onChange={ () => {} }/>
|
||||
<label htmlFor="row"></label>
|
||||
</div>
|
||||
</td>
|
||||
<td>1</td>
|
||||
<td>5 600 000 р.</td>
|
||||
<td>560 000 р.</td>
|
||||
<td>10 %</td>
|
||||
<td>Audi</td>
|
||||
<td>A8</td>
|
||||
<td>1</td>
|
||||
<td>
|
||||
<div className="dosc_list">
|
||||
<div className="row">
|
||||
<div className="small-icon">
|
||||
<p className="doc_name i-pdf">
|
||||
КП
|
||||
<span>№1</span>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<div className="form_field checkbox">
|
||||
<input type="checkbox" name="row" id="row" checked="" onChange={ () => {} }/>
|
||||
<label htmlFor="row"></label>
|
||||
</div>
|
||||
</td>
|
||||
<td>1</td>
|
||||
<td>5 600 000 р.</td>
|
||||
<td>560 000 р.</td>
|
||||
<td>10 %</td>
|
||||
<td>Audi</td>
|
||||
<td>A8</td>
|
||||
<td>1</td>
|
||||
<td>
|
||||
<div className="dosc_list">
|
||||
<div className="row">
|
||||
<div className="small-icon">
|
||||
<p className="doc_name i-pdf">
|
||||
КП
|
||||
<span>№1</span>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<p>Сделка 1</p>
|
||||
<span></span>
|
||||
<div className="status_body">
|
||||
<div className="status_header">
|
||||
<i className="status_2"></i>
|
||||
<p className="header">Программа финансирования</p>
|
||||
</div>
|
||||
<div className="wrap">
|
||||
<div className="single_text">
|
||||
<p>Статусный текст о том что выбирается программа финансированияи может быть по центру иконочка часиков или слева от статусного текста иконочка часиков</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<p>Сделка 1</p>
|
||||
<span></span>
|
||||
<div className="status_body">
|
||||
<div className="status_header">
|
||||
<i className="status_3"></i>
|
||||
<p>Сборка пакета документов</p>
|
||||
</div>
|
||||
<div className="wrap">
|
||||
<div className="message ok">
|
||||
<p>Вам не требуется актуализация данных анкеты Клиента</p>
|
||||
</div>
|
||||
<div className="message alert">
|
||||
<p>Требуется обновить данные в анкете</p>
|
||||
<button className="button button-blue">Актуализировать данные</button>
|
||||
</div>
|
||||
<div className="message wait">
|
||||
<p>Проводится проверка анкеты Вашей организации</p>
|
||||
</div>
|
||||
<p><b>Устав организации</b></p>
|
||||
<div className="attach_file">
|
||||
<label>
|
||||
<input type="file" hidden onChange={ () => {} }/>
|
||||
Прикрепить скан документов
|
||||
</label>
|
||||
</div>
|
||||
<div className="message documents">
|
||||
<div className="doc_list">
|
||||
<div className="dosc_list medium-icon">
|
||||
<div className="row">
|
||||
<p className="doc_name i-pdf i-medium">№123/2023 от 01.01.2023</p>
|
||||
</div>
|
||||
</div>
|
||||
<div className="dosc_list medium-icon">
|
||||
<div className="row">
|
||||
<p className="doc_name i-pdf i-medium">№123/2023 от 01.01.2023</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<p>Документы, отправленные Вами принадлежат другой организации бла бла коммент от менеджера</p>
|
||||
</div>
|
||||
<div className="attach_file">
|
||||
<label>
|
||||
<input type="file" hidden onChange={ () => {} }/>
|
||||
Прикрепить ещё
|
||||
</label>
|
||||
</div>
|
||||
<p><b>Другое название документа</b></p>
|
||||
<div className="attach_file">
|
||||
<label>
|
||||
<input type="file" hidden onChange={ () => {} }/>
|
||||
Прикрепить скан документов
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="">
|
||||
<p>Сделка 1</p>
|
||||
<span></span>
|
||||
<div className="status_body">
|
||||
<div className="status_header">
|
||||
<i className="status_4"></i>
|
||||
<p>Проверка документов</p>
|
||||
</div>
|
||||
<div className="wrap">
|
||||
<div className="single_text">
|
||||
<p>Статусный текст о том что выбирается программа финансированияи может быть по центру иконочка часиков или слева от статусного текста иконочка часиков</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<p>Сделка 1</p>
|
||||
<span></span>
|
||||
<div className="status_body">
|
||||
<div className="status_header">
|
||||
<i className="status_5"></i>
|
||||
<p>Принятие решения по заявке</p>
|
||||
</div>
|
||||
<div className="wrap">
|
||||
<div className="single_text">
|
||||
<p>Статусный текст о том что выбирается программа финансированияи может быть по центру иконочка часиков или слева от статусного текста иконочка часиков</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<p>Сделка 1</p>
|
||||
<span></span>
|
||||
<div className="status_body">
|
||||
<div className="status_header">
|
||||
<i className="status_6"></i>
|
||||
<p>Оформление лизинга</p>
|
||||
</div>
|
||||
<div className="wrap">
|
||||
<div className="single_text">
|
||||
<p>Статусный текст о том что выбирается программа финансированияи может быть по центру иконочка часиков или слева от статусного текста иконочка часиков</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<p>Сделка 1</p>
|
||||
<span></span>
|
||||
<div className="status_body">
|
||||
<div className="status_header">
|
||||
<i className="status_7"></i>
|
||||
<p>Выбор типа подписания</p>
|
||||
</div>
|
||||
<div className="wrap">
|
||||
<div className="block-column">
|
||||
<div className="dropdown_block open" >
|
||||
<div className="block_header default">
|
||||
<p><b>Подготовлено 3 из 12</b></p>
|
||||
</div>
|
||||
</div>
|
||||
<div className="dosc_list acts_list-checkbox medium-icon">
|
||||
<div className="row">
|
||||
<p className="doc_name i-doc i-medium" >
|
||||
<input type="checkbox" name="" id="" checked="" onChange={ () => {} }/>
|
||||
<label htmlFor="">№2022_6875 от 28.06.2022</label>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div className="block_footer_btn">
|
||||
<button className="button button-blue">Подписать в ЭДО</button>
|
||||
<button className="button button-blue">Подписать в бумажном виде</button>
|
||||
</div>
|
||||
</div>
|
||||
<div className="block-column">
|
||||
<div className="dropdown_block open" >
|
||||
<div className="block_header default">
|
||||
<p><b>К подписанию 3 из 12</b></p>
|
||||
</div>
|
||||
</div>
|
||||
<div className="dosc_list medium-icon">
|
||||
<div className="row flex-start">
|
||||
<p className="doc_name i-doc i-medium" >
|
||||
№123/2023 от 01.01.2023
|
||||
</p>
|
||||
<button className="button">Перейти в ЭДО</button>
|
||||
</div>
|
||||
<div className="row flex-start">
|
||||
<p className="doc_name i-doc i-medium" >
|
||||
№123/2023 от 01.01.2023
|
||||
</p>
|
||||
<button className="button">Скачать документ</button>
|
||||
<button className="button">Загрузить подписанный экземпляр</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="block-column">
|
||||
<div className="dropdown_block open" >
|
||||
<div className="block_header default">
|
||||
<p><b>Подписано 3 из 12</b></p>
|
||||
</div>
|
||||
</div>
|
||||
<div className="dosc_list medium-icon">
|
||||
<div className="row">
|
||||
<p className="doc_name i-doc i-medium" >
|
||||
<a href="#">Скачать №129/2023 от 01.01.2023 - Ожидание оплаты</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="block-column">
|
||||
<div className="dropdown_block open">
|
||||
<div className="block_header default">
|
||||
<p><b>Подготовлено 3 из 12</b></p>
|
||||
</div>
|
||||
</div>
|
||||
<div className="dosc_list medium-icon">
|
||||
<div className="row">
|
||||
<p className="doc_name i-doc i-medium">
|
||||
№123/2023 от 01.01.2023
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
}
|
||||
@ -1,310 +1,8 @@
|
||||
import React from "react"
|
||||
import { connect } from "react-redux"
|
||||
|
||||
class SingleDeal extends React.Component
|
||||
{
|
||||
constructor(props)
|
||||
{
|
||||
super(props);
|
||||
}
|
||||
|
||||
render()
|
||||
{
|
||||
const { close } = this.props;
|
||||
|
||||
return (
|
||||
<div className="contractStatus_modal">
|
||||
<div className="modal_header">
|
||||
<p className="modal_title">Статус сделки</p>
|
||||
<button className="modal_close" onClick={close}></button>
|
||||
</div>
|
||||
<div className="modal_body single_status">
|
||||
<div className="current">
|
||||
<p>Сделка 1</p>
|
||||
<span></span>
|
||||
<div className="status_body">
|
||||
<div className="status_header">
|
||||
<i className="status_1"></i>
|
||||
<p>Выбор КП</p>
|
||||
</div>
|
||||
<div className="wrap">
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th></th>
|
||||
<th>№</th>
|
||||
<th>Стоимость</th>
|
||||
<th>Первый платеж, р.</th>
|
||||
<th>Первый платеж, %</th>
|
||||
<th>Марка</th>
|
||||
<th>Модель</th>
|
||||
<th>Объектов лизинга</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>
|
||||
<div className="form_field checkbox">
|
||||
<input type="checkbox" name="row" id="row" checked="" onChange={ () => {} }/>
|
||||
<label htmlFor="row"></label>
|
||||
</div>
|
||||
</td>
|
||||
<td>1</td>
|
||||
<td>5 600 000 р.</td>
|
||||
<td>560 000 р.</td>
|
||||
<td>10 %</td>
|
||||
<td>Audi</td>
|
||||
<td>A8</td>
|
||||
<td>1</td>
|
||||
<td>
|
||||
<div className="dosc_list">
|
||||
<div className="row">
|
||||
<div className="small-icon">
|
||||
<p className="doc_name i-pdf">
|
||||
КП
|
||||
<span>№1</span>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<div className="form_field checkbox">
|
||||
<input type="checkbox" name="row" id="row" checked="" onChange={ () => {} }/>
|
||||
<label htmlFor="row"></label>
|
||||
</div>
|
||||
</td>
|
||||
<td>1</td>
|
||||
<td>5 600 000 р.</td>
|
||||
<td>560 000 р.</td>
|
||||
<td>10 %</td>
|
||||
<td>Audi</td>
|
||||
<td>A8</td>
|
||||
<td>1</td>
|
||||
<td>
|
||||
<div className="dosc_list">
|
||||
<div className="row">
|
||||
<div className="small-icon">
|
||||
<p className="doc_name i-pdf">
|
||||
КП
|
||||
<span>№1</span>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<p>Сделка 1</p>
|
||||
<span></span>
|
||||
<div className="status_body">
|
||||
<div className="status_header">
|
||||
<i className="status_2"></i>
|
||||
<p className="header">Программа финансирования</p>
|
||||
</div>
|
||||
<div className="wrap">
|
||||
<div className="single_text">
|
||||
<p>Статусный текст о том что выбирается программа финансированияи может быть по центру иконочка часиков или слева от статусного текста иконочка часиков</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<p>Сделка 1</p>
|
||||
<span></span>
|
||||
<div className="status_body">
|
||||
<div className="status_header">
|
||||
<i className="status_3"></i>
|
||||
<p>Сборка пакета документов</p>
|
||||
</div>
|
||||
<div className="wrap">
|
||||
<div className="message ok">
|
||||
<p>Вам не требуется актуализация данных анкеты Клиента</p>
|
||||
</div>
|
||||
<div className="message alert">
|
||||
<p>Требуется обновить данные в анкете</p>
|
||||
<button className="button button-blue">Актуализировать данные</button>
|
||||
</div>
|
||||
<div className="message wait">
|
||||
<p>Проводится проверка анкеты Вашей организации</p>
|
||||
</div>
|
||||
<p><b>Устав организации</b></p>
|
||||
<div className="attach_file">
|
||||
<label>
|
||||
<input type="file" hidden onChange={ () => {} }/>
|
||||
Прикрепить скан документов
|
||||
</label>
|
||||
</div>
|
||||
<div class="message documents">
|
||||
<div className="doc_list">
|
||||
<div class="dosc_list medium-icon">
|
||||
<div class="row">
|
||||
<p class="doc_name i-pdf i-medium">№123/2023 от 01.01.2023</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="dosc_list medium-icon">
|
||||
<div class="row">
|
||||
<p class="doc_name i-pdf i-medium">№123/2023 от 01.01.2023</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<p>Документы, отправленные Вами принадлежат другой организации бла бла коммент от менеджера</p>
|
||||
</div>
|
||||
<div className="attach_file">
|
||||
<label>
|
||||
<input type="file" hidden onChange={ () => {} }/>
|
||||
Прикрепить ещё
|
||||
</label>
|
||||
</div>
|
||||
<p><b>Другое название документа</b></p>
|
||||
<div className="attach_file">
|
||||
<label>
|
||||
<input type="file" hidden onChange={ () => {} }/>
|
||||
Прикрепить скан документов
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="">
|
||||
<p>Сделка 1</p>
|
||||
<span></span>
|
||||
<div className="status_body">
|
||||
<div className="status_header">
|
||||
<i className="status_4"></i>
|
||||
<p>Проверка документов</p>
|
||||
</div>
|
||||
<div className="wrap">
|
||||
<div className="single_text">
|
||||
<p>Статусный текст о том что выбирается программа финансированияи может быть по центру иконочка часиков или слева от статусного текста иконочка часиков</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<p>Сделка 1</p>
|
||||
<span></span>
|
||||
<div className="status_body">
|
||||
<div className="status_header">
|
||||
<i className="status_5"></i>
|
||||
<p>Принятие решения по заявке</p>
|
||||
</div>
|
||||
<div className="wrap">
|
||||
<div className="single_text">
|
||||
<p>Статусный текст о том что выбирается программа финансированияи может быть по центру иконочка часиков или слева от статусного текста иконочка часиков</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<p>Сделка 1</p>
|
||||
<span></span>
|
||||
<div className="status_body">
|
||||
<div className="status_header">
|
||||
<i className="status_6"></i>
|
||||
<p>Оформление лизинга</p>
|
||||
</div>
|
||||
<div className="wrap">
|
||||
<div className="single_text">
|
||||
<p>Статусный текст о том что выбирается программа финансированияи может быть по центру иконочка часиков или слева от статусного текста иконочка часиков</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<p>Сделка 1</p>
|
||||
<span></span>
|
||||
<div className="status_body">
|
||||
<div className="status_header">
|
||||
<i className="status_7"></i>
|
||||
<p>Выбор типа подписания</p>
|
||||
</div>
|
||||
<div className="wrap">
|
||||
<div className="block-column">
|
||||
<div className="dropdown_block open" >
|
||||
<div className="block_header default">
|
||||
<p><b>Подготовлено 3 из 12</b></p>
|
||||
</div>
|
||||
</div>
|
||||
<div className="dosc_list acts_list-checkbox medium-icon">
|
||||
<div className="row">
|
||||
<p className="doc_name i-doc i-medium" >
|
||||
<input type="checkbox" name="" id="" checked="" onChange={ () => {} }/>
|
||||
<label for="">№2022_6875 от 28.06.2022</label>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div className="block_footer_btn">
|
||||
<button className="button button-blue">Подписать в ЭДО</button>
|
||||
<button className="button button-blue">Подписать в бумажном виде</button>
|
||||
</div>
|
||||
</div>
|
||||
<div className="block-column">
|
||||
<div className="dropdown_block open" >
|
||||
<div className="block_header default">
|
||||
<p><b>К подписанию 3 из 12</b></p>
|
||||
</div>
|
||||
</div>
|
||||
<div className="dosc_list medium-icon">
|
||||
<div className="row flex-start">
|
||||
<p className="doc_name i-doc i-medium" >
|
||||
№123/2023 от 01.01.2023
|
||||
</p>
|
||||
<button className="button">Перейти в ЭДО</button>
|
||||
</div>
|
||||
<div className="row flex-start">
|
||||
<p className="doc_name i-doc i-medium" >
|
||||
№123/2023 от 01.01.2023
|
||||
</p>
|
||||
<button className="button">Скачать документ</button>
|
||||
<button className="button">Загрузить подписанный экземпляр</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="block-column">
|
||||
<div className="dropdown_block open" >
|
||||
<div className="block_header default">
|
||||
<p><b>Подписано 3 из 12</b></p>
|
||||
</div>
|
||||
</div>
|
||||
<div className="dosc_list medium-icon">
|
||||
<div className="row">
|
||||
<p className="doc_name i-doc i-medium" >
|
||||
<a href="#">Скачать №129/2023 от 01.01.2023 - Ожидание оплаты</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="block-column">
|
||||
<div className="dropdown_block open">
|
||||
<div className="block_header default">
|
||||
<p><b>Подготовлено 3 из 12</b></p>
|
||||
</div>
|
||||
</div>
|
||||
<div className="dosc_list medium-icon">
|
||||
<div className="row">
|
||||
<p className="doc_name i-doc i-medium">
|
||||
№123/2023 от 01.01.2023
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
}
|
||||
import DealsList from "./DealsList";
|
||||
import SingleDeal from "./SingleDeal";
|
||||
import { getDeals } from "../../actions";
|
||||
|
||||
class AllContractsModal extends React.Component
|
||||
{
|
||||
@ -378,105 +76,33 @@ class AllContractsModal extends React.Component
|
||||
}
|
||||
}
|
||||
|
||||
class DealsList extends React.Component
|
||||
{
|
||||
constructor(props)
|
||||
{
|
||||
super(props)
|
||||
}
|
||||
|
||||
render()
|
||||
{
|
||||
return (
|
||||
<div className="contractStatus_list">
|
||||
<div className="list_item">
|
||||
<div>
|
||||
<p>Сделка 1</p>
|
||||
</div>
|
||||
<div>
|
||||
<p>
|
||||
2 этапа пройдено
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width={18} height={18} fill="none">
|
||||
<path stroke="#8E94A7" strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M14.625 6.75 9 12.375 3.375 6.75" />
|
||||
</svg>
|
||||
</p>
|
||||
</div>
|
||||
<div>
|
||||
<img src="/assets/images/status/1.svg" width="50" height="50" />
|
||||
<p>Сбор пакета документов</p>
|
||||
</div>
|
||||
<div>
|
||||
<p>
|
||||
еще 4 этапа
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width={18} height={18} fill="none">
|
||||
<path stroke="#8E94A7" strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M14.625 6.75 9 12.375 3.375 6.75" />
|
||||
</svg>
|
||||
</p>
|
||||
</div>
|
||||
<div>
|
||||
<button className="button" onClick={() => { this._handleModalToggle("all") }} >
|
||||
Все сделки
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width={18} height={18} fill="none">
|
||||
<path stroke="#1C01A9" strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M14.625 6.75 9 12.375 3.375 6.75" />
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div className="list_item">
|
||||
<div>
|
||||
<p>Сделка 1</p>
|
||||
</div>
|
||||
<div>
|
||||
<p onClick={() => { this._handleModalToggle("current") }} >
|
||||
2 этапа пройдено
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width={18} height={18} fill="none">
|
||||
<path stroke="#8E94A7" strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M14.625 6.75 9 12.375 3.375 6.75"/>
|
||||
</svg>
|
||||
</p>
|
||||
</div>
|
||||
<div>
|
||||
<img src="/assets/images/status/3.svg" width="50" height="50" />
|
||||
<p>Сбор пакета документов</p>
|
||||
</div>
|
||||
<div>
|
||||
<p onClick={() => { this._handleModalToggle("current") }} >
|
||||
еще 4 этапа
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width={18} height={18} fill="none">
|
||||
<path stroke="#8E94A7" strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M14.625 6.75 9 12.375 3.375 6.75" />
|
||||
</svg>
|
||||
</p>
|
||||
</div>
|
||||
<div>
|
||||
<button className="button" onClick={() => { this._handleModalToggle("all") }}>
|
||||
Все сделки
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width={18} height={18} fill="none">
|
||||
<path stroke="#1C01A9" strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M14.625 6.75 9 12.375 3.375 6.75" />
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
class DealsStatus extends React.Component
|
||||
{
|
||||
constructor(props)
|
||||
{
|
||||
super(props)
|
||||
this.state = {
|
||||
currentContractModalOpened: false,
|
||||
allContractModalOpened: false,
|
||||
currentSelected: null
|
||||
currentContractModalOpened: false,
|
||||
allContractModalOpened: false,
|
||||
currentSelected: null,
|
||||
dealSelected: false,
|
||||
deals: undefined,
|
||||
}
|
||||
}
|
||||
|
||||
static getDerivedStateFromProps(nextProps, prevState) {
|
||||
return {}
|
||||
static getDerivedStateFromProps(nextProps, prevState)
|
||||
{
|
||||
console.log("DealsStatus", "getDerivedStateFromProps", { nextProps });
|
||||
return {
|
||||
deals: nextProps.deals,
|
||||
}
|
||||
}
|
||||
|
||||
componentDidMount() { }
|
||||
componentDidMount()
|
||||
{
|
||||
const { dispatch } = this.props;
|
||||
getDeals({ dispatch });
|
||||
}
|
||||
|
||||
componentDidUpdate(prevProps, prevState) { }
|
||||
|
||||
@ -505,17 +131,14 @@ class DealsStatus extends React.Component
|
||||
|
||||
render()
|
||||
{
|
||||
const { currentContractModalOpened, allContractModalOpened, currentSelected } = this.state
|
||||
const { currentContractModalOpened, allContractModalOpened, currentSelected, dealSelected, deals } = this.state
|
||||
|
||||
return (
|
||||
<>
|
||||
<DealsList/>
|
||||
|
||||
<SingleDeal
|
||||
close={() => {
|
||||
this._handleModalToggle("current")
|
||||
}}
|
||||
/>
|
||||
<div>
|
||||
<p className="deals_list_title">Статусы сделок</p>
|
||||
</div>
|
||||
<DealsList deals={ deals } dealSelected={ dealSelected }/>
|
||||
{/*}
|
||||
<AllContractsModal
|
||||
open={allContractModalOpened}
|
||||
@ -533,7 +156,10 @@ class DealsStatus extends React.Component
|
||||
|
||||
function mapStateToProps(state, ownProps)
|
||||
{
|
||||
return {}
|
||||
console.log({ "DealsStatus.state": state });
|
||||
return {
|
||||
deals: state.deals,
|
||||
}
|
||||
}
|
||||
|
||||
export default connect(mapStateToProps)(DealsStatus)
|
||||
|
||||
@ -3610,6 +3610,12 @@ main .dropdown_blocks_list .dropdown_block .block_body .fines_detail ul li {
|
||||
margin-bottom: -80px;
|
||||
}
|
||||
}
|
||||
@media all and (max-width: 360px) {
|
||||
.helpBox_wrapper.rate_opened {
|
||||
width: 100vw;
|
||||
margin: 0px;
|
||||
}
|
||||
}
|
||||
.helpBox_wrapper .helpBox {
|
||||
max-width: 730px;
|
||||
background: #FFFFFF;
|
||||
@ -3813,6 +3819,12 @@ main .dropdown_blocks_list .dropdown_block .block_body .fines_detail ul li {
|
||||
justify-content: center;
|
||||
animation: rate_body_shrink 0.25s normal forwards ease-in-out;
|
||||
}
|
||||
@media all and (max-width: 360px) {
|
||||
.rate_us.opened .rate_body {
|
||||
width: 100vw;
|
||||
margin: 0px;
|
||||
}
|
||||
}
|
||||
@keyframes rate_opened {
|
||||
from {
|
||||
width: 250px;
|
||||
@ -5287,7 +5299,7 @@ main .dropdown_blocks_list.zero-margin.gibdd .dropdown_block .block_body .fines_
|
||||
display: block !important;
|
||||
}
|
||||
.contractStatus_list {
|
||||
margin: 50px 0;
|
||||
margin: 20px 0;
|
||||
}
|
||||
.contractStatus_list .list_item {
|
||||
display: flex;
|
||||
@ -5371,13 +5383,11 @@ main .dropdown_blocks_list.zero-margin.gibdd .dropdown_block .block_body .fines_
|
||||
background: url("/assets/images/status/line_2.jpg") repeat-x left center;
|
||||
background-size: auto 13px;
|
||||
}
|
||||
.contractStatus_list .list_item div:nth-child(4) p {
|
||||
.contractStatus_list .list_item div:nth-child(4) {
|
||||
width: 150px;
|
||||
cursor: pointer;
|
||||
}
|
||||
.contractStatus_list .list_item div:nth-child(5) {
|
||||
width: 150px;
|
||||
}
|
||||
.contractStatus_list .list_item div:nth-child(5) button {
|
||||
.contractStatus_list .list_item div:nth-child(4) button {
|
||||
white-space: nowrap;
|
||||
gap: 0 8px;
|
||||
}
|
||||
@ -5385,7 +5395,7 @@ main .dropdown_blocks_list.zero-margin.gibdd .dropdown_block .block_body .fines_
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
.contractStatus_list .list_item:not(:last-child) div:nth-child(5) {
|
||||
visibility: hidden;
|
||||
/*visibility: hidden;*/
|
||||
}
|
||||
.opened .contractStatus_modal {
|
||||
transform: translateY(0);
|
||||
|
||||
@ -4032,6 +4032,13 @@ main .dropdown_blocks_list .dropdown_block .block_body {
|
||||
margin-bottom: -80px;
|
||||
}
|
||||
|
||||
&.rate_opened {
|
||||
@media all and (max-width: 360px) {
|
||||
width: 100vw;
|
||||
margin: 0px;
|
||||
}
|
||||
}
|
||||
|
||||
.helpBox {
|
||||
max-width: 730px;
|
||||
background: #FFFFFF;
|
||||
@ -4259,6 +4266,11 @@ main .dropdown_blocks_list .dropdown_block .block_body {
|
||||
|
||||
animation: rate_body_shrink 0.25s normal forwards ease-in-out;
|
||||
}
|
||||
|
||||
@media all and (max-width: 360px) {
|
||||
width: 100vw;
|
||||
margin: 0px;
|
||||
}
|
||||
}
|
||||
animation: rate_opened 0.25s normal forwards ease-in-out;
|
||||
}
|
||||
@ -6084,13 +6096,8 @@ main .dropdown_blocks_list.zero-margin.gibdd .dropdown_block {
|
||||
}
|
||||
|
||||
&:nth-child(4) {
|
||||
p {
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
|
||||
&:nth-child(5) {
|
||||
width: 150px;
|
||||
cursor: pointer;
|
||||
|
||||
button {
|
||||
white-space: nowrap;
|
||||
@ -6103,7 +6110,7 @@ main .dropdown_blocks_list.zero-margin.gibdd .dropdown_block {
|
||||
margin-bottom: 5px;
|
||||
|
||||
div:nth-child(5) {
|
||||
visibility: hidden;
|
||||
/*visibility: hidden;*/
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -625,6 +625,13 @@ div {
|
||||
right: 5px;
|
||||
}
|
||||
}
|
||||
.deals_list_title {
|
||||
font-size: 26px;
|
||||
font-weight: 700;
|
||||
line-height: 35px;
|
||||
margin-top: 35px;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
.contracts_list_title {
|
||||
font-size: 26px;
|
||||
font-weight: 700;
|
||||
|
||||
@ -669,6 +669,14 @@ div {
|
||||
}
|
||||
}
|
||||
|
||||
.deals_list_title {
|
||||
font-size: 26px;
|
||||
font-weight: 700;
|
||||
line-height: 35px;
|
||||
margin-top: 35px;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
.contracts_list_title {
|
||||
font-size: 26px;
|
||||
font-weight: 700;
|
||||
|
||||
@ -14,58 +14,71 @@ export default async function handler(req, res)
|
||||
{
|
||||
await cors(req, res);
|
||||
|
||||
if(req.headers.cookie !== undefined)
|
||||
return new Promise(async (resolve) =>
|
||||
{
|
||||
const cookies = cookie.parse(req.headers?.cookie ? req.headers?.cookie : "");
|
||||
|
||||
console.log("req.body");
|
||||
console.log(req.body);
|
||||
|
||||
if(cookies.jwt !== undefined && cookies.jwt !== null)
|
||||
if(req.headers.cookie !== undefined)
|
||||
{
|
||||
console.log("cookies.jwt");
|
||||
console.log(cookies.jwt);
|
||||
const cookies = cookie.parse(req.headers?.cookie ? req.headers?.cookie : "");
|
||||
|
||||
var client_jwt_decoded = jwt.verify(cookies.jwt, process.env.JWT_SECRET_CLIENT);
|
||||
var crm_jwt = jwt.sign(client_jwt_decoded, process.env.JWT_SECRET_CRM, { noTimestamp: true });
|
||||
console.log("req.body");
|
||||
console.log(req.body);
|
||||
|
||||
console.log("client_jwt_decoded", client_jwt_decoded);
|
||||
console.log("crm_jwt", crm_jwt);
|
||||
|
||||
const url = `${ process.env.CRM_API_HOST }/lk/ConsiderationOpportunity`;
|
||||
console.log({ url });
|
||||
|
||||
try
|
||||
if(cookies.jwt !== undefined && cookies.jwt !== null)
|
||||
{
|
||||
await axios.get(url, {
|
||||
params: { ...client_jwt_decoded, },
|
||||
headers: {
|
||||
"Authorization": `Bearer ${ crm_jwt }`,
|
||||
},
|
||||
withCredentials: true,
|
||||
})
|
||||
.then((crm_response) =>
|
||||
{
|
||||
console.log("API", "contract", "crm_response.data");
|
||||
//console.log("API", "contract", crm_response.data);
|
||||
console.log("cookies.jwt");
|
||||
console.log(cookies.jwt);
|
||||
|
||||
res.status(200).json(crm_response.data);
|
||||
})
|
||||
.catch((error) =>
|
||||
var client_jwt_decoded = jwt.verify(cookies.jwt, process.env.JWT_SECRET_CLIENT);
|
||||
const crm_payload = { acc_number: client_jwt_decoded.acc_number };
|
||||
var crm_jwt = jwt.sign(crm_payload, process.env.JWT_SECRET_CRM, { noTimestamp: true });
|
||||
|
||||
console.log("client_jwt_decoded", client_jwt_decoded);
|
||||
console.log("crm_jwt", crm_jwt);
|
||||
|
||||
const url = `${ process.env.CRM_API_HOST }/lk/ConsiderationOpportunity`;
|
||||
console.log({ url });
|
||||
|
||||
try
|
||||
{
|
||||
console.error(error);
|
||||
res.status(500);
|
||||
});
|
||||
await axios.get(url, {
|
||||
params: crm_payload,
|
||||
headers: {
|
||||
"Authorization": `Bearer ${ crm_jwt }`,
|
||||
},
|
||||
withCredentials: true,
|
||||
})
|
||||
.then((crm_response) =>
|
||||
{
|
||||
console.log("API", "contract", "crm_response.data");
|
||||
//console.log("API", "contract", crm_response.data);
|
||||
|
||||
res.status(200).json(crm_response.data);
|
||||
resolve();
|
||||
})
|
||||
.catch((error) =>
|
||||
{
|
||||
console.error(error);
|
||||
res.status(500).send();
|
||||
resolve();
|
||||
});
|
||||
}
|
||||
catch(e)
|
||||
{
|
||||
console.error(e);
|
||||
res.status(500).send();
|
||||
resolve();
|
||||
}
|
||||
}
|
||||
catch(e)
|
||||
else
|
||||
{
|
||||
console.error(e);
|
||||
res.status(500);
|
||||
res.status(403).send();
|
||||
resolve();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
res.status(403);
|
||||
res.status(403).send();
|
||||
resolve();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -4,132 +4,149 @@ import { SpinnerCircular } from "spinners-react"
|
||||
import Rating from "../Rating"
|
||||
import { getImage } from "../../../actions"
|
||||
|
||||
class Manager extends React.Component {
|
||||
constructor(props) {
|
||||
super(props)
|
||||
this.state = {
|
||||
company: {},
|
||||
photo: undefined,
|
||||
loading: true,
|
||||
full: false
|
||||
}
|
||||
}
|
||||
class Manager extends React.Component
|
||||
{
|
||||
constructor(props)
|
||||
{
|
||||
super(props)
|
||||
this.state = {
|
||||
company: {},
|
||||
photo: undefined,
|
||||
loading: true,
|
||||
full: false,
|
||||
rate: false,
|
||||
}
|
||||
}
|
||||
|
||||
static getDerivedStateFromProps(nextProps, prevState) {
|
||||
return {
|
||||
company: nextProps.company
|
||||
}
|
||||
}
|
||||
static getDerivedStateFromProps(nextProps, prevState) {
|
||||
return {
|
||||
company: nextProps.company
|
||||
}
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
const { company } = this.state
|
||||
componentDidMount()
|
||||
{
|
||||
const { company } = this.state;
|
||||
this._loadManagerAvatar();
|
||||
}
|
||||
|
||||
this._loadManagerAvatar()
|
||||
}
|
||||
componentDidUpdate(prevProps, prevState)
|
||||
{
|
||||
if (prevState.company.manager_photo === undefined && this.state.company.manager_photo !== undefined)
|
||||
{
|
||||
this._loadManagerAvatar();
|
||||
}
|
||||
}
|
||||
|
||||
componentDidUpdate(prevProps, prevState) {
|
||||
if (prevState.company.manager_photo === undefined && this.state.company.manager_photo !== undefined) {
|
||||
this._loadManagerAvatar()
|
||||
}
|
||||
}
|
||||
_loadManagerAvatar = () =>
|
||||
{
|
||||
const { company } = this.state
|
||||
|
||||
_loadManagerAvatar = () => {
|
||||
const { company } = this.state
|
||||
if (company.manager_photo !== undefined && company.manager_photo !== null && company.manager_photo !== "")
|
||||
{
|
||||
getImage({ id: company.manager_photo }).then((result) => {
|
||||
this.setState({ photo: result, loading: false });
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
if (company.manager_photo !== undefined) {
|
||||
this.setState({ photo: null, loading: false });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (company.manager_photo !== undefined && company.manager_photo !== null && company.manager_photo !== "") {
|
||||
getImage({ id: company.manager_photo }).then((result) => {
|
||||
this.setState({ photo: result, loading: false })
|
||||
})
|
||||
} else {
|
||||
if (company.manager_photo !== undefined) {
|
||||
this.setState({ photo: null, loading: false })
|
||||
}
|
||||
}
|
||||
}
|
||||
_handle_onFull = () =>
|
||||
{
|
||||
this.setState({ full: this.state.full ? false : true });
|
||||
}
|
||||
|
||||
_handle_onFull = () => {
|
||||
this.setState({ full: this.state.full ? false : true })
|
||||
}
|
||||
_handle_onRate = (rate) =>
|
||||
{
|
||||
this.setState({ rate });
|
||||
}
|
||||
|
||||
render() {
|
||||
const { company, loading, photo, full } = this.state
|
||||
render()
|
||||
{
|
||||
const { company, loading, photo, full, rate } = this.state
|
||||
|
||||
return (
|
||||
<div className="helpBox_wrapper">
|
||||
<div className={`helpBox ${!full ? "hidden" : ""}`}>
|
||||
<div className="avatar">
|
||||
{loading ? (
|
||||
<SpinnerCircular
|
||||
size={24}
|
||||
thickness={51}
|
||||
speed={100}
|
||||
color="rgba(28, 1, 169, 1)"
|
||||
secondaryColor="rgba(236, 239, 244, 1)"
|
||||
/>
|
||||
) : (
|
||||
<img
|
||||
src={photo !== null ? photo : `/assets/images/icons/avatar.svg`}
|
||||
loading="lazy"
|
||||
alt={company.manager_fio}
|
||||
/>
|
||||
)}
|
||||
</div>
|
||||
<div className="content">
|
||||
<p className="message">Помогу выбрать новый автомобиль</p>
|
||||
<p className="name">{company.manager_fio}</p>
|
||||
<p className="position">{company.manager_jobtitle}</p>
|
||||
<div className="info">
|
||||
<a href={`mailto:${company.manager_email}`}>{company.manager_email}</a>
|
||||
{company.manager_mobilephone !== undefined &&
|
||||
company.manager_mobilephone !== null &&
|
||||
company.manager_mobilephone !== "" && (
|
||||
<a href={`tel:+${company.manager_mobilephone.replace(/[^\d]/gm, "")}`}>
|
||||
{company.manager_mobilephone}
|
||||
</a>
|
||||
)}
|
||||
{company.manager_telegram !== undefined &&
|
||||
company.manager_telegram !== null &&
|
||||
company.manager_telegram !== "" && (
|
||||
<a
|
||||
href={`https://telegram.me/${company.manager_telegram.replace("@", "")}`}
|
||||
target="_blank"
|
||||
>{`@${company.manager_telegram.replace("@", "")}`}</a>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
<div className="button" onClick={this._handle_onFull}></div>
|
||||
</div>
|
||||
<div className={`helpBox_small interactive ${full ? "hidden" : ""}`} onClick={this._handle_onFull}>
|
||||
<div className="avatar">
|
||||
{loading ? (
|
||||
<SpinnerCircular
|
||||
size={24}
|
||||
thickness={51}
|
||||
speed={100}
|
||||
color="rgba(28, 1, 169, 1)"
|
||||
secondaryColor="rgba(236, 239, 244, 1)"
|
||||
/>
|
||||
) : (
|
||||
<img
|
||||
src={photo !== null ? photo : `/assets/images/icons/avatar.svg`}
|
||||
loading="lazy"
|
||||
alt={company.manager_fio}
|
||||
/>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
return (
|
||||
<div className={ `helpBox_wrapper ${ rate && "rate_opened" }` }>
|
||||
<div className={`helpBox ${!full ? "hidden" : ""}`}>
|
||||
<div className="avatar">
|
||||
{ loading ? (
|
||||
<SpinnerCircular
|
||||
size={24}
|
||||
thickness={51}
|
||||
speed={100}
|
||||
color="rgba(28, 1, 169, 1)"
|
||||
secondaryColor="rgba(236, 239, 244, 1)"
|
||||
/>
|
||||
) : (
|
||||
<img
|
||||
src={photo !== null ? photo : `/assets/images/icons/avatar.svg`}
|
||||
loading="lazy"
|
||||
alt={company.manager_fio}
|
||||
/>
|
||||
) }
|
||||
</div>
|
||||
<div className="content">
|
||||
<p className="message">Помогу выбрать новый автомобиль</p>
|
||||
<p className="name">{company.manager_fio}</p>
|
||||
<p className="position">{company.manager_jobtitle}</p>
|
||||
<div className="info">
|
||||
<a href={`mailto:${company.manager_email}`}>{company.manager_email}</a>
|
||||
{ company.manager_mobilephone !== undefined &&
|
||||
company.manager_mobilephone !== null &&
|
||||
company.manager_mobilephone !== "" && (
|
||||
<a href={`tel:+${company.manager_mobilephone.replace(/[^\d]/gm, "")}`}>
|
||||
{company.manager_mobilephone}
|
||||
</a>
|
||||
) }
|
||||
{ company.manager_telegram !== undefined &&
|
||||
company.manager_telegram !== null &&
|
||||
company.manager_telegram !== "" && (
|
||||
<a
|
||||
href={`https://telegram.me/${company.manager_telegram.replace("@", "")}`}
|
||||
target="_blank"
|
||||
>{`@${company.manager_telegram.replace("@", "")}`}</a>
|
||||
) }
|
||||
</div>
|
||||
</div>
|
||||
<div className="button" onClick={this._handle_onFull}></div>
|
||||
</div>
|
||||
<div className={`helpBox_small interactive ${full ? "hidden" : ""}`} onClick={this._handle_onFull}>
|
||||
<div className="avatar">
|
||||
{loading ? (
|
||||
<SpinnerCircular
|
||||
size={24}
|
||||
thickness={51}
|
||||
speed={100}
|
||||
color="rgba(28, 1, 169, 1)"
|
||||
secondaryColor="rgba(236, 239, 244, 1)"
|
||||
/>
|
||||
) : (
|
||||
<img
|
||||
src={photo !== null ? photo : `/assets/images/icons/avatar.svg`}
|
||||
loading="lazy"
|
||||
alt={company.manager_fio}
|
||||
/>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Оценка */}
|
||||
<Rating />
|
||||
</div>
|
||||
)
|
||||
}
|
||||
{/* Оценка */}
|
||||
<Rating onRate={ this._handle_onRate }/>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
function mapStateToProps(state, ownProps) {
|
||||
return {
|
||||
company: state.company
|
||||
}
|
||||
function mapStateToProps(state, ownProps)
|
||||
{
|
||||
return {
|
||||
company: state.company
|
||||
}
|
||||
}
|
||||
|
||||
export default connect(mapStateToProps)(Manager)
|
||||
export default connect(mapStateToProps)(Manager);
|
||||
|
||||
@ -66,6 +66,8 @@ class Rating extends React.Component
|
||||
hovered: newRating,
|
||||
opened: true,
|
||||
});
|
||||
|
||||
this.props.onRate(true);
|
||||
}
|
||||
|
||||
_handle_onFieldChange = (field, value) =>
|
||||
@ -95,6 +97,7 @@ class Rating extends React.Component
|
||||
|
||||
setTimeout(() => {
|
||||
this.setState({ hidden: true })
|
||||
this.props.onRate(false);
|
||||
}, 1000);
|
||||
|
||||
setTimeout(() => {
|
||||
|
||||
@ -547,13 +547,14 @@ class IndexPage extends React.Component
|
||||
}
|
||||
}
|
||||
|
||||
function mapStateToProps(state, ownProps) {
|
||||
return {
|
||||
company: state.company,
|
||||
contracts: state.contracts.list,
|
||||
page: state.contracts.page,
|
||||
pages: state.contracts.pages
|
||||
}
|
||||
function mapStateToProps(state, ownProps)
|
||||
{
|
||||
return {
|
||||
company: state.company,
|
||||
contracts: state.contracts.list,
|
||||
page: state.contracts.page,
|
||||
pages: state.contracts.pages
|
||||
}
|
||||
}
|
||||
|
||||
export const getServerSideProps = reduxWrapper.getServerSideProps((store) => async ({ req, res, query }) => {
|
||||
|
||||
@ -17,6 +17,12 @@ const dealsReducer = (state = initialState.deals, action) =>
|
||||
|
||||
case actionTypes.DEALS_LIST:
|
||||
{
|
||||
console.log("actionTypes.DEALS_LIST", actionTypes.DEALS_LIST, { action });
|
||||
console.log({
|
||||
...state,
|
||||
list: action.data.list,
|
||||
});
|
||||
|
||||
return {
|
||||
...state,
|
||||
list: action.data.list,
|
||||
|
||||
@ -235,18 +235,18 @@ export const defaultState = {
|
||||
deals:
|
||||
{
|
||||
loaded: false,
|
||||
list: undefined,
|
||||
list: null,
|
||||
deal: {
|
||||
loaded: false,
|
||||
offers: {
|
||||
list: undefined,
|
||||
filtered: undefined,
|
||||
list: null,
|
||||
filtered: null,
|
||||
},
|
||||
documents: {
|
||||
list: undefined,
|
||||
list: null,
|
||||
},
|
||||
contracts: {
|
||||
list: undefined,
|
||||
list: null,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
@ -15,6 +15,7 @@ import contractsInfoReducer from '../reducers/contractsInfoReducer';
|
||||
import contractEventsReducer from '../reducers/contractEventsReducer';
|
||||
import contractFinesReducer from '../reducers/contractFinesReducer';
|
||||
import questionnaireReducer from '../reducers/questionnaireReducer';
|
||||
import dealsReducer from '../reducers/dealsReducer';
|
||||
|
||||
const combinedReducer = combineReducers({
|
||||
auth: authReducer,
|
||||
@ -31,6 +32,7 @@ const combinedReducer = combineReducers({
|
||||
contract_events: contractEventsReducer,
|
||||
contract_fines: contractFinesReducer,
|
||||
questionnaire: questionnaireReducer,
|
||||
deals: dealsReducer,
|
||||
});
|
||||
|
||||
const makeStore = (context) =>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user