add error display on layout

This commit is contained in:
merelendor 2023-10-27 14:58:24 +03:00
parent 0f20d0d952
commit 498f2335f7
24 changed files with 299 additions and 39 deletions

View File

@ -67,6 +67,9 @@ export const getDeals = ({ dispatch, update = false }) =>
console.error("ACTION", "deals", "getDeals()", "ERROR");
console.error(error);
const eventMessage = new CustomEvent("_message", { detail: { type: "error", title: "Ошибка", content: "Ошибка при вызове метода ConsiderationOpportunity" } });
window.dispatchEvent(eventMessage);
dispatch({
type: actionTypes.DEALS_LIST,
data: {
@ -110,6 +113,9 @@ export const getDealOffers = ({ dispatch, deal_id }) =>
console.error("ACTION", "deals", "getDealOffers()", "ERROR");
console.error(error);
const eventMessage = new CustomEvent("_message", { detail: { type: "error", title: "Ошибка", content: "Ошибка при вызове метода quote" } });
window.dispatchEvent(eventMessage);
dispatch({
type: actionTypes.DEAL_OFFERS_LIST,
data: {
@ -143,6 +149,9 @@ export const downloadDealOffer = ({ quote_number, filename }) =>
console.error("ACTION", "sign", "downloadDealOffer()", "ERROR");
console.error(error);
const eventMessage = new CustomEvent("_message", { detail: { type: "error", title: "Ошибка", content: "Ошибка при вызове метода offerprintform" } });
window.dispatchEvent(eventMessage);
reject(error.data);
});
});
@ -171,6 +180,9 @@ export const acceptDealOffers = ({ deal_id, offers }) =>
console.error("ACTION", "deals", "acceptDealOffers()", "ERROR");
console.error(error);
const eventMessage = new CustomEvent("_message", { detail: { type: "error", title: "Ошибка", content: "Ошибка при вызове метода quote accept" } });
window.dispatchEvent(eventMessage);
reject();
});
});
@ -208,6 +220,9 @@ export const getDealDocuments = ({ dispatch, deal_id }) =>
console.error("ACTION", "deals", "getDealDocuments()", "ERROR");
console.error(error);
const eventMessage = new CustomEvent("_message", { detail: { type: "error", title: "Ошибка", content: "Ошибка при вызове метода document" } });
window.dispatchEvent(eventMessage);
dispatch({
type: actionTypes.DEAL_DOCUMENTS_LIST,
data: {
@ -246,6 +261,10 @@ export const sendDealDocuments = ({ deal_id }) =>
.catch((error) =>
{
console.error(error);
const eventMessage = new CustomEvent("_message", { detail: { type: "error", title: "Ошибка", content: "Ошибка при отправке пакета документов для сделки" } });
window.dispatchEvent(eventMessage);
reject();
});
});
@ -282,6 +301,9 @@ export const getDealContracts = ({ dispatch, deal_id }) =>
console.error("ACTION", "deals", "getDealContracts()", "ERROR");
console.error(error);
const eventMessage = new CustomEvent("_message", { detail: { type: "error", title: "Ошибка", content: "Ошибка при вызове метода contract" } });
window.dispatchEvent(eventMessage);
dispatch({
type: actionTypes.DEAL_CONTRACTS_LIST,
data: {
@ -329,6 +351,10 @@ export const attachDealDocument = ({ deal_id, document_id, document_name, group,
.catch((error) =>
{
console.error(error);
const eventMessage = new CustomEvent("_message", { detail: { type: "error", title: "Ошибка", content: "Ошибка при загрузке документа" } });
window.dispatchEvent(eventMessage);
reject();
});
});
@ -357,6 +383,10 @@ export const removeDealDocument = ({ deal_id, group, index, }) =>
.catch((error) =>
{
console.error(error);
const eventMessage = new CustomEvent("_message", { detail: { type: "error", title: "Ошибка", content: "Ошибка при удалении документа" } });
window.dispatchEvent(eventMessage);
reject();
});
});

View File

@ -55,6 +55,9 @@ export const getEDOOperatorList = ({ dispatch, update = false }) =>
console.error("ACTION", "edo", "getEDOOperatorList()", "ERROR");
console.error(error);
const eventMessage = new CustomEvent("_message", { detail: { type: "error", title: "Ошибка", content: "Ошибка при вызове метода GetEdoBox" } });
window.dispatchEvent(eventMessage);
dispatch({
type: actionTypes.EDO_OPERATORS_LIST,
data: {
@ -97,6 +100,9 @@ export const getEDOInvitesList = ({ dispatch, update = false }) =>
console.error("ACTION", "edo", "getEDOInvitesList()", "ERROR");
console.error(error);
const eventMessage = new CustomEvent("_message", { detail: { type: "error", title: "Ошибка", content: "Ошибка при вызове метода GetInviteEdoBox" } });
window.dispatchEvent(eventMessage);
dispatch({
type: actionTypes.EDO_INVITES_LIST,
data: {
@ -131,6 +137,9 @@ export const inviteToEDO = () =>
console.error("ACTION", "edo", "inviteToEDO()", "ERROR");
console.error(error);
const eventMessage = new CustomEvent("_message", { detail: { type: "error", title: "Ошибка", content: "Ошибка при вызове метода InviteEdoBox" } });
window.dispatchEvent(eventMessage);
reject(error.data);
});
});
@ -158,6 +167,9 @@ export const createEDOProject = (payload) =>
console.error("ACTION", "edo", "createEDOProject()", "ERROR");
console.error(error);
const eventMessage = new CustomEvent("_message", { detail: { type: "error", title: "Ошибка", content: "Ошибка при вызове метода CreateEDOProject" } });
window.dispatchEvent(eventMessage);
reject(error.data);
});
});
@ -194,6 +206,9 @@ export const docEDOSign = (payload) =>
console.error(error);
}
const eventMessage = new CustomEvent("_message", { detail: { type: "error", title: "Ошибка", content: "Ошибка при вызове метода SignEDODocument" } });
window.dispatchEvent(eventMessage);
reject(error.data);
});
});
@ -221,6 +236,9 @@ export const docEDOCancel = (payload) =>
console.error("ACTION", "edo", "docEDOCancel()", "ERROR");
console.error(error);
const eventMessage = new CustomEvent("_message", { detail: { type: "error", title: "Ошибка", content: "Ошибка при вызове метода CancelDocument" } });
window.dispatchEvent(eventMessage);
reject(error.data);
});
});
@ -257,6 +275,9 @@ export const docEDOConnect = (payload) =>
console.error(error);
}
const eventMessage = new CustomEvent("_message", { detail: { type: "error", title: "Ошибка", content: "Ошибка при вызове метода DocEdoConnect" } });
window.dispatchEvent(eventMessage);
reject(error.data);
});
});
@ -293,6 +314,9 @@ export const docEDOStatus = (payload) =>
console.error(error);
}
const eventMessage = new CustomEvent("_message", { detail: { type: "error", title: "Ошибка", content: "Ошибка при вызове метода GetEdoProjectID" } });
window.dispatchEvent(eventMessage);
reject(error.data);
});
});

View File

@ -31,6 +31,9 @@ export const signCheckCreatePrintForm = (payload) =>
console.error("ACTION", "sign", "signCheckCreatePrintForm()", "ERROR");
console.error(error);
const eventMessage = new CustomEvent("_message", { detail: { type: "error", title: "Ошибка", content: "Ошибка при вызове метода CheckCreatePrintForm" } });
window.dispatchEvent(eventMessage);
reject(error.data);
});
});
@ -58,6 +61,9 @@ export const signGetGUIDEntity = (payload) =>
console.error("ACTION", "sign", "signGetGUIDEntity()", "ERROR");
console.error(error);
const eventMessage = new CustomEvent("_message", { detail: { type: "error", title: "Ошибка", content: "Ошибка при вызове метода GetGUIDEntity" } });
window.dispatchEvent(eventMessage);
resolve(response.data);
});
});
@ -82,6 +88,9 @@ export const signCheckPowerAttorneyClient = (payload) =>
console.error("ACTION", "sign", "signCheckPowerAttorneyClient()", "ERROR");
console.error(error);
const eventMessage = new CustomEvent("_message", { detail: { type: "error", title: "Ошибка", content: "Ошибка при вызове метода CheckPowerAttorneyClient" } });
window.dispatchEvent(eventMessage);
reject(error.data);
});
});
@ -106,6 +115,9 @@ export const signGetPowerAttorneyClient = (payload) =>
console.error("ACTION", "sign", "signGetPowerAttorneyClient()", "ERROR");
console.error(error);
const eventMessage = new CustomEvent("_message", { detail: { type: "error", title: "Ошибка", content: "Ошибка при вызове метода GetPowerAttorneyClient" } });
window.dispatchEvent(eventMessage);
reject(error.data);
});
});
@ -130,6 +142,9 @@ export const signGetWMDoc = (payload) =>
console.error("ACTION", "sign", "signGetWMDoc()", "ERROR");
console.error(error);
const eventMessage = new CustomEvent("_message", { detail: { type: "error", title: "Ошибка", content: "Ошибка при вызове метода GetWMDoc" } });
window.dispatchEvent(eventMessage);
reject(error.data);
});
});
@ -155,6 +170,9 @@ export const signDownloadFile = ({ payload, filename }) =>
console.error("ACTION", "sign", "signDownloadFile()", "ERROR");
console.error(error);
const eventMessage = new CustomEvent("_message", { detail: { type: "error", title: "Ошибка", content: "Ошибка при вызове метода GetWMDoc" } });
window.dispatchEvent(eventMessage);
reject(error.data);
});
});
@ -180,6 +198,9 @@ export const signGetFileContractProject = (payload) =>
console.error("ACTION", "sign", "signGetFileContractProject()", "ERROR");
console.error(error);
const eventMessage = new CustomEvent("_message", { detail: { type: "error", title: "Ошибка", content: "Ошибка при вызове метода GetFileContractProject" } });
window.dispatchEvent(eventMessage);
reject(error.data);
});
});
@ -205,6 +226,9 @@ export const signCheckDownloadContractProject = (payload) =>
console.error("ACTION", "sign", "signCheckDownloadContractProject()", "ERROR");
console.error(error);
const eventMessage = new CustomEvent("_message", { detail: { type: "error", title: "Ошибка", content: "Ошибка при вызове метода CheckDownloadContractProject" } });
window.dispatchEvent(eventMessage);
reject(error.data);
});
});
@ -246,6 +270,9 @@ export const signUploadPaperDocument = (contract_number, deal_id, files) =>
console.error("ACTION", "sign", "signUploadPaperDocument()", "ERROR");
console.error(error);
const eventMessage = new CustomEvent("_message", { detail: { type: "error", title: "Ошибка", content: "Ошибка при отправке подписанного пакета документов" } });
window.dispatchEvent(eventMessage);
reject(error.data);
});
});
@ -273,6 +300,9 @@ export const signCheckCancelDocument = (payload) =>
console.error("ACTION", "sign", "signCheckCancelDocument()", "ERROR");
console.error(error);
const eventMessage = new CustomEvent("_message", { detail: { type: "error", title: "Ошибка", content: "Ошибка при вызове метода CheckCancelDocument" } });
window.dispatchEvent(eventMessage);
reject(error.data);
});
});
@ -300,6 +330,9 @@ export const signCancelDocument = (payload) =>
console.error("ACTION", "sign", "signCancelDocument()", "ERROR");
console.error(error);
const eventMessage = new CustomEvent("_message", { detail: { type: "error", title: "Ошибка", content: "Ошибка при вызове метода CancelDocument" } });
window.dispatchEvent(eventMessage);
reject(error.data);
});
});

View File

@ -72,10 +72,12 @@ class DealContractsSignEDO extends React.Component
for(let i in documents)
{
console.log({ fin: documents[i] });
if(!documents[i].completed)
if(!documents[i].error && !documents[i].completed)
{
completed = false;
break;
}
}
return completed;
}

View File

@ -3723,7 +3723,6 @@ main .dropdown_blocks_list .dropdown_block .block_body .fines_detail ul li {
}
@media all and (max-width: 960px) {
.helpBox_wrapper .helpBox .content {
width: 100%;
margin-top: 10px;
}
}

View File

@ -4153,7 +4153,7 @@ main .dropdown_blocks_list .dropdown_block .block_body {
}
@media all and (max-width: 960px) {
width: 100%;
// width: 100%;
margin-top: 10px;
}
}

View File

@ -642,3 +642,43 @@ div {
margin-top: 35px;
margin-bottom: 35px;
}
.messages_overlay {
position: fixed;
top: 0px;
right: 0px;
width: 30%;
display: flex;
flex-direction: column;
align-items: flex-start;
justify-content: flex-start;
z-index: 100;
gap: 10px 10px;
margin: 10px;
}
.messages_overlay .overlay_message_error {
position: relative;
width: 100%;
background-color: #df2525;
padding: 10px 15px;
font-size: 12px;
}
.messages_overlay .overlay_message_error h4,
.messages_overlay .overlay_message_error p {
color: #fff;
}
.messages_overlay .overlay_message_error h4 {
padding: 0px;
margin: 0px;
margin-bottom: 2px;
}
.messages_overlay .overlay_message_error .button {
position: absolute;
top: 8px;
right: 8px;
width: 16px;
height: 16px;
padding: 0;
border: 0;
background: url("/assets/images/icons/close-white.svg") no-repeat center;
background-size: 16px;
}

View File

@ -688,3 +688,47 @@ div {
margin-top: 35px;
margin-bottom: 35px;
}
.messages_overlay {
position: fixed;
top: 0px;
right: 0px;
width: 30%;
display: flex;
flex-direction: column;
align-items: flex-start;
justify-content: flex-start;
z-index: 100;
gap: 10px 10px;
margin: 10px;
.overlay_message_error {
position: relative;
width: 100%;
background-color: #df2525;
padding: 10px 15px;
font-size: 12px;
h4, p {
color: #fff;
}
h4 {
padding: 0px;
margin: 0px;
margin-bottom: 2px;
}
.button {
position: absolute;
top: 8px;
right: 8px;
width: 16px;
height: 16px;
padding: 0;
border: 0;
background: url("/assets/images/icons/close-white.svg") no-repeat center;
background-size: 16px;
}
}
}

View File

@ -7,7 +7,7 @@ import jwt from 'jsonwebtoken';
import { cors } from '../cors';
import { inspect } from 'util';
export default async function CRMRequestPost(req, res, path, params, array = false)
export default async function CRMRequestPost({ req, res, path, params, headers = {}, options = {}, array = false, log = false })
{
await cors(req, res);
@ -15,18 +15,17 @@ export default async function CRMRequestPost(req, res, path, params, array = fal
{
const cookies = cookie.parse(req.headers?.cookie ? req.headers?.cookie : "");
//console.log("-".repeat(50));
//console.log("CRMRequestPost", "req.body");
//console.log(req.body);
if(cookies.jwt !== undefined && cookies.jwt !== null)
{
//console.log("cookies.jwt");
//console.log(cookies.jwt);
var client_jwt_decoded = jwt.verify(cookies.jwt, process.env.JWT_SECRET_CLIENT);
var crm_jwt = jwt.sign({ acc_number: client_jwt_decoded.acc_number }, process.env.JWT_SECRET_CRM, { noTimestamp: true });
if(log)
{
console.log("client_jwt_decoded", client_jwt_decoded);
console.log("crm_jwt", crm_jwt);
}
let payload;
if(array)
{
@ -36,24 +35,22 @@ export default async function CRMRequestPost(req, res, path, params, array = fal
{
payload = { ...{ acc_number: client_jwt_decoded.acc_number }, ...params };
}
//console.log("path", path);
try
{
await axios.post(path, payload,
{
headers: {
"Content-Type": "application/json",
"Authorization": `Bearer ${ crm_jwt }`,
},
headers: { ...{ "Content-Type": "application/json", "Authorization": `Bearer ${ crm_jwt }` }, ...headers },
withCredentials: true,
})
.then((crm_response) =>
{
//console.log("crm_response for", path);
//console.log(inspect(crm_response.data, true, null, true));
if(log)
{
console.log("crm_response for", path);
console.log("payload", payload);
console.log(inspect(crm_response.data, true, null, true));
}
res.status(200).json(crm_response.data);
})

View File

@ -7,5 +7,10 @@ export default async function handler(req, res)
console.log(req.body);
console.log("-".repeat(50));
await CRMRequestPost(req, res, `${ process.env.CRM_API_HOST }/lk/add-contract/CreateCalculation?contract_number=${ req.body.contract_number }`, req.body);
await CRMRequestPost({
req, res,
path: `${ process.env.CRM_API_HOST }/lk/add-contract/CreateCalculation?contract_number=${ req.body.contract_number }`,
params: req.body,
log: true,
});
}

View File

@ -7,5 +7,10 @@ export default async function handler(req, res)
console.log(req.body);
console.log("-".repeat(50));
await CRMRequestPost(req, res, `${ process.env.CRM_API_HOST }/lk/add-contract/Signing?addcontract_number=${ req.body.addcontract_number }`, req.body);
await CRMRequestPost({
req, res,
path: `${ process.env.CRM_API_HOST }/lk/add-contract/Signing?addcontract_number=${ req.body.addcontract_number }`,
params: req.body,
log: true,
});
}

View File

@ -2,7 +2,7 @@ import CRMRequestGet from '../../../../lib/CRMRequestGet';
export default async function handler(req, res)
{
console.log("\n\n", "API", "SIGN", "/check");
console.log("\n\n", "API", "SIGN", "api/contract/sign/check");
const { contract_number, addcontract_number, sign_type } = req.body;
const payload = {

View File

@ -2,7 +2,7 @@ import CRMRequestGet from '../../../../../lib/CRMRequestGet';
export default async function handler(req, res)
{
console.log("\n\n", "API", "SIGN", "/document/connect");
console.log("\n\n", "API", "SIGN", "/sign/document/connect");
const { contract_number, addcontract_number, } = req.body;
const payload = {

View File

@ -1,4 +1,4 @@
import CRMRequestGet from '../../../../../lib/CRMRequestGet';
import CRMRequestPost from '../../../../../lib/CRMRequestPost';
export default async function handler(req, res)
{
@ -17,9 +17,9 @@ export default async function handler(req, res)
console.log({ payload });
await CRMRequestGet({ req, res,
await CRMRequestPost({ req, res,
path: `${ process.env.CRM_API_HOST }/File/GetWMDoc`,
data: JSON.stringify(payload),
params: payload,
headers: { "Content-Type": "application/json" },
log: true,
});

View File

@ -2,7 +2,7 @@ import CRMRequestGet from '../../../../../lib/CRMRequestGet';
export default async function handler(req, res)
{
console.log("\n\n", "API", "SIGN", "/document/status");
console.log("\n\n", "API", "SIGN", "/sign/document/status");
const { contract_number, addcontract_number, } = req.body;
const payload = {

View File

@ -16,5 +16,11 @@ export default async function handler(req, res)
console.log("/accept");
console.log({ offers });
await CRMRequestPost(req, res, `${ process.env.CRM_API_HOST }/lk/ConsiderationOpportunity/quote?opp_number=${ deal_id }`, offers, true);
await CRMRequestPost({
req, res,
path: `${ process.env.CRM_API_HOST }/lk/ConsiderationOpportunity/quote?opp_number=${ deal_id }`,
params: offers,
array: true,
log: true,
});
}

View File

@ -5,7 +5,7 @@ import CRMRequestGet from '../../../lib/CRMRequestGet';
export default async function handler(req, res)
{
console.log("\n\n", "API", "EDO", "/cancel");
console.log("\n\n", "API", "EDO", "/edo/cancel");
const { contract_number, addcontract_number, doc_type_id, } = req.body;
const payload = {

View File

@ -2,7 +2,7 @@ import CRMRequestGet from '../../../lib/CRMRequestGet';
export default async function handler(req, res)
{
console.log("\n\n", "API", "EDO", "/project");
console.log("\n\n", "API", "EDO", "/edo/project");
const { contract_number, addcontract_number, power_attorney, power_attorney_number, edo_box, } = req.body;
const payload = {

View File

@ -2,7 +2,7 @@ import CRMRequestGet from '../../../lib/CRMRequestGet';
export default async function handler(req, res)
{
console.log("\n\n", "API", "EDO", "/sign");
console.log("\n\n", "API", "EDO", "/edo/sign");
const { edoid } = req.body;
const payload = {

View File

@ -6,5 +6,11 @@ export default async function handler(req, res)
console.log(req.body);
console.log("-".repeat(50));
await CRMRequestPost(req, res, `${ process.env.LOGS_API_HOST }/lk/DownloadDocumentFromLK`, req.body, true);
await CRMRequestPost({
req, res,
path: `${ process.env.LOGS_API_HOST }/lk/DownloadDocumentFromLK`,
params: req.body,
array: true,
log: true,
});
}

View File

@ -6,10 +6,62 @@ export default class AccountLayout extends React.Component
constructor(props)
{
super(props);
this.state = {
messages: [],
}
}
componentDidMount()
{
if(window !== undefined)
{
window.addEventListener("_track", this._handle_onTrack);
window.addEventListener("_move", this._handle_onMove);
window.addEventListener("_message", this._handle_onMessage);
}
console.log("CDM", { state: this.state });
}
componentWillUnmount()
{
if(window !== undefined)
{
window.removeEventListener("_track", this._handle_onTrack);
window.removeEventListener("_move", this._handle_onMove);
window.removeEventListener("_message", this._handle_onMessage);
}
}
_handle_onTrack = (event) =>
{
//event.detail.path
console.log("LAYOUT", "_handle_onTrack", { event, props: this.props });
}
_handle_onMove = (event) =>
{
this.props.router.push(event.detail.path);
}
_handle_onMessage = (event) =>
{
const messages = [ ...this.state.messages ];
messages.push(event.detail);
this.setState({ messages });
}
_handle_onMessageRemove = (index) =>
{
const messages = [ ...this.state.messages ];
messages.splice(index, 1);
this.setState({ messages });
}
render()
{
const { messages } = this.state;
return (
<main>
<section>
@ -21,6 +73,17 @@ export default class AccountLayout extends React.Component
</div>
</section>
<Manager/>
{ messages.length > 0 && (
<div className="messages_overlay">
{ messages.map((message, index) => (
<div className={ `overlay_message_${ message.type }` } key={ index }>
<h4>{ message.title }</h4>
<p>{ message.content }</p>
<div className="button" onClick={ () => this._handle_onMessageRemove(index) }></div>
</div>
))}
</div>
) }
</main>
)
}

View File

@ -229,11 +229,17 @@ class SignEDO extends React.Component
}
}
_handle_onGoToEDOInvites = () =>
{
const eventLogin = new CustomEvent("_move", { detail: { path: "/settings/digital" } });
window.dispatchEvent(eventLogin);
}
_handle_onFormSubmit = (event) =>
{
event.preventDefault();
const { onFinish, onCancel, onGoToEDOInvites } = this.props;
const { onFinish, onCancel } = this.props;
const { operators, operator_selected, step, finished, error } = this.state;
console.log("_handle_onFormSubmit");
@ -241,7 +247,7 @@ class SignEDO extends React.Component
if(operators !== null && operators.length === 0)
{
onGoToEDOInvites();
this._handle_onGoToEDOInvites();
}
else
{

View File

@ -312,7 +312,7 @@ class ChangeGraphicPage extends React.Component
<meta name="description" content="ЛК Эволюция автолизинга" />
</Head>
<Header { ...this.props } />
<AccountLayout>
<AccountLayout { ...this.props }>
<div className="title_wrapper">
<div className="left" style={{ flexDirection: "column" }}>
<ContractHeader number={ number } date={ date } car={ car }/>

View File

@ -288,7 +288,7 @@ class IndexPage extends React.Component
<meta name="description" content="ЛК Эволюция автолизинга" />
</Head>
<Header {...this.props} />
<AccountLayout>
<AccountLayout { ...this.props }>
<div className="title_wrapper">
<div className="left">
<h1 className="section_title">Личный кабинет</h1>