diff --git a/actions/supportActions.js b/actions/supportActions.js index e594195..0e20589 100644 --- a/actions/supportActions.js +++ b/actions/supportActions.js @@ -1,4 +1,5 @@ import axios from 'axios'; +import { eachSeries } from 'async'; import * as actionTypes from '../constants/actionTypes'; import * as currentState from '../reducers/initialState'; @@ -105,24 +106,61 @@ export const sendNewAppeal = (appeal) => return new Promise((resolve, reject) => { - return new Promise((resolve, reject) => + axios.post(`${ process.env.NEXT_PUBLIC_SELF_API_HOST }/api/support/request`, appeal, { - axios.post(`${ process.env.NEXT_PUBLIC_SELF_API_HOST }/api/support/request`, { - query - }, + withCredentials: true, + }) + .then(async (response) => + { + console.log("sendNewAppeal", "response.data", response.data); + resolve(response.data); + }) + .catch((error) => + { + console.error(error); + reject(); + }); + }); +} + +export const sendAppealAttachments = (payload) => +{ + console.log("ACTION", "support", "sendAppealAttachments", payload); + + return new Promise((resolve, reject) => + { + eachSeries(payload.files, (file, callback) => + { + let data = new FormData(); + data.append('file', file); + + axios.post(`${ process.env.NEXT_PUBLIC_SELF_API_HOST }/api/support/attachment?request_client_number=${ payload.request_client_number }`, data, { + headers: { + "Content-Type": "multipart/form-data", + }, withCredentials: true, }) .then(async (response) => { - console.log("sendNewAppeal", "response.data", response.data); - resolve(); + console.log("sendAppealAttachments", "response.data", response.data); + callback(null); }) .catch((error) => { console.error(error); - reject(); + callback(true); }); + }, (err) => + { + if(!err) + { + resolve(); + } + else + { + reject(); + } }); }); } \ No newline at end of file diff --git a/pages/api/support/attachment.js b/pages/api/support/attachment.js index b7c08bf..9cea6a8 100644 --- a/pages/api/support/attachment.js +++ b/pages/api/support/attachment.js @@ -5,51 +5,190 @@ import cookie from 'cookie'; import moment from 'moment'; import jwt from 'jsonwebtoken'; import { cors } from '../../../lib/cors'; +import { inspect } from 'util'; +//import formidable from 'formidable'; export default async function handler(req, res) { + console.log("API", "support", "attachment"); await cors(req, res); - console.log("API", "support", "request"); - console.log(req.body); - console.log("-".repeat(50)); + console.log("req.query", req.query); - if(req.headers.cookie !== undefined) + return new Promise((resolve) => { - const cookies = cookie.parse(req.headers?.cookie ? req.headers?.cookie : ""); - if(cookies.jwt !== undefined && cookies.jwt !== null) + if(req.headers.cookie !== undefined) { - if(jwt.verify(cookies.jwt, process.env.JWT_SECRET_CLIENT)) + const cookies = cookie.parse(req.headers?.cookie ? req.headers?.cookie : ""); + + if(cookies.jwt !== undefined && cookies.jwt !== null) { - const response = await new Promise((resolve, reject) => - { - axios.post(`${ process.env.CRM_API_HOST }/lk/incident/UploadDocument`, req.body) - .then((api_response) => - { - console.log("RESPONSE"); - console.log(api_response.data); + 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 }); - resolve(api_response.data); + //const path = `${ process.env.CRM_API_HOST }/lk/incident/RequestClient/UploadDocument?request_client_number=${ fields.request_client_number }`; + const path = `${ process.env.CRM_API_HOST }/lk/incident/RequestClient/UploadDocument?request_client_number=${ req.query.request_client_number }`; + console.log("API", "support", "request", "path", path); + + console.log("*".repeat(50)); + console.log(req.headers); + console.log("*".repeat(50)); + + try + { + console.log("??????", req.headers['content-type']); + axios.post(path, req.body, + { + headers: { + "Content-Type": req.headers['content-type'], + //"Content-Type": "multipart/form-data", + "Authorization": `Bearer ${ crm_jwt }`, + }, + withCredentials: true, + }) + .then((crm_response) => + { + console.log("crm_response for", path); + console.log(inspect(crm_response.data, true, null, true)); + + res.status(200).json(crm_response.data); + resolve(); }) .catch((error) => { - console.log("error"); console.error(error); + console.error("-".repeat(30), "error.response.data:"); + console.error(error.response.data); - reject([]); + res.status(500).json(error.response.data); + resolve(); }); - }); - - res.status(200).json(response); + } + catch(e) + { + console.error(e); + res.status(500).end(e); + resolve(); + } } else { res.status(403); + resolve(); } } else { res.status(403); + resolve(); + } + }); +} + +/* +export default async function handler(req, res) +{ + console.log("API", "support", "attachment"); + await cors(req, res); + + return new Promise((resolve) => + { + if(req.headers.cookie !== undefined) + { + const cookies = cookie.parse(req.headers?.cookie ? req.headers?.cookie : ""); + + 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 }); + + const form = formidable({}); + form.parse(req, (err, fields, files) => + { + if(err) + { + console.error(err); + res.status(500).end(""); + resolve(); + } + else + { + console.log("fields", fields); + console.log("files", files); + console.log("API", "support", "attachment", "-".repeat(50)); + + //const path = `${ process.env.CRM_API_HOST }/lk/incident/RequestClient/UploadDocument?request_client_number=${ fields.request_client_number }`; + const path = `${ process.env.CRM_API_HOST }/lk/incident/RequestClient/UploadDocument?request_client_number=REQ2022_0000092`; + console.log("API", "support", "request", "path", path); + + try + { + axios.post(path, req.body, + { + headers: { + //"Content-Type": "application/json", + "Content-Type": "multipart/form-data", + "Authorization": `Bearer ${ crm_jwt }`, + }, + withCredentials: true, + }) + .then((crm_response) => + { + console.log("crm_response for", path); + console.log(inspect(crm_response.data, true, null, true)); + + res.status(200).json(crm_response.data); + resolve(); + }) + .catch((error) => + { + console.error(error); + console.error("-".repeat(30), "error.response.data:"); + console.error(error.response.data); + + res.status(500).json(error.response.data); + resolve(); + }); + } + catch(e) + { + console.error(e); + res.status(500).end(e); + resolve(); + } + } + }); + } + else + { + res.status(403); + resolve(); + } + } + else + { + res.status(403); + resolve(); + } + }); +} + +export const config = { + api: { + bodyParser: false + } +} +*/ +export const config = { + api: { + bodyParser: { + sizeLimit: '1000mb' } } } \ No newline at end of file diff --git a/pages/api/support/request.js b/pages/api/support/request.js index b5a4705..106c2c8 100644 --- a/pages/api/support/request.js +++ b/pages/api/support/request.js @@ -1,11 +1,69 @@ // Next.js API route support: https://nextjs.org/docs/api-routes/introduction -import CRMRequestPost from '../../../lib/CRMRequestPost'; +import axios from 'axios'; +import { Cookies } from 'react-cookie'; +import cookie from 'cookie'; +import moment from 'moment'; +import jwt from 'jsonwebtoken'; +import { cors } from '../../../lib/cors'; +import { inspect } from 'util'; export default async function handler(req, res) { console.log("API", "support", "request"); console.log(req.body); console.log("-".repeat(50)); + await cors(req, res); - await CRMRequestPost(req, res, `${ process.env.CRM_API_HOST }/lk/incident/CreateRequestClient`, req.body); + if(req.headers.cookie !== undefined) + { + const cookies = cookie.parse(req.headers?.cookie ? req.headers?.cookie : ""); + + 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 }); + + const path = `${ process.env.CRM_API_HOST }/lk/incident/RequestClient/CreateRequestClient?acc_number=${ client_jwt_decoded.acc_number }`; + console.log("API", "support", "request", "path", path); + + try + { + await axios.post(path, req.body, + { + headers: { + //"Content-Type": "application/json", + "Authorization": `Bearer ${ crm_jwt }`, + }, + withCredentials: true, + }) + .then((crm_response) => + { + console.log("crm_response for", path); + console.log(inspect(crm_response.data, true, null, true)); + + res.status(200).json(crm_response.data); + }) + .catch((error) => + { + console.error(error); + console.error("-".repeat(30), "error.response.data:"); + console.error(error.response.data); + + res.status(500).json(error.response.data); + }); + } + catch(e) + { + console.error(e); + res.status(500).send(e); + } + } + else + { + res.status(403); + } + } } \ No newline at end of file diff --git a/pages/settings/admin.js b/pages/settings/admin.js index 18b23fa..202460b 100644 --- a/pages/settings/admin.js +++ b/pages/settings/admin.js @@ -19,15 +19,116 @@ import Company from "../components/Company"; import { getUsers, sendPhoneChangeNumber, sendPhoneChangeNumberSmsCode, setUserPhone } from '../../actions'; -class IndexPage extends React.Component +class Form extends React.Component +{ + constructor(props) + { + super(props); + this.state = { + name: "", + email: "", + selection: false, + selected_companies_all: false, + selected_companies_list: [], + }; + } + + _handle_onChange = (field, value) => + { + this.setState({ [ field ]: value }); + } + + _handle_onCompaniesSelection = () => + { + this.setState({ selection: this.state.selection ? false : true }); + } + + _handle_onChangeCompanies_all = () => + { + const { selected_companies_all } = this.state; + this.setState({ selected_companies_all: selected_companies_all ? false : true }); + } + + _handle_onCompanySelect = (company) => + { + const { selected_companies_list } = this.state; + const selected_companies = []; + + let add = true; + for(let i in selected_companies_list) + { + if(selected_companies_list[i].inn !== company.inn) + { + selected_companies.push(selected_companies_list[i]); + } + else + { + add = false; + } + } + if(add) + { + selected_companies.push(company); + } + + this.setState({ selected_companies_list: selected_companies }); + } + + render() + { + const { companies } = this.props; + const { name, email, selection, selected_companies_all, selected_companies_list, } = this.state; + + return ( +
Настройки доступа к личному кабинету
{ company.title }
@@ -160,44 +293,11 @@ class IndexPage extends React.Component{ comment }
Перейти в раздел «Документы по договору»
+Сообщение успешно отправлено, ожидайте, пожалуйста, ответа от ответсвенного сотрудника Отдела
по работе с клиентами.
Перейти к списку обращений
Приложенные файлы
{ files.map((file, index) => ( -{ file.name } onDeleteFile(file.name) }>[ удалить ]
+{ file.name } onDeleteFile(file.name) }>[ удалить ]
)) }