add the ticket step function
parent
2768414f81
commit
276be1c988
File diff suppressed because it is too large
Load Diff
|
@ -17,6 +17,7 @@
|
||||||
"@fullcalendar/react": "^5.3.1",
|
"@fullcalendar/react": "^5.3.1",
|
||||||
"@fullcalendar/timegrid": "^5.3.1",
|
"@fullcalendar/timegrid": "^5.3.1",
|
||||||
"@loadable/component": "^5.13.2",
|
"@loadable/component": "^5.13.2",
|
||||||
|
"antd": "^4.19.5",
|
||||||
"attr-accept": "^2.2.2",
|
"attr-accept": "^2.2.2",
|
||||||
"bootstrap": "^4.5.3",
|
"bootstrap": "^4.5.3",
|
||||||
"chart.js": "^2.9.3",
|
"chart.js": "^2.9.3",
|
||||||
|
@ -73,9 +74,9 @@
|
||||||
"react-toastify": "^5.5.0",
|
"react-toastify": "^5.5.0",
|
||||||
"react-typed": "^1.2.0",
|
"react-typed": "^1.2.0",
|
||||||
"reactstrap": "^8.6.0",
|
"reactstrap": "^8.6.0",
|
||||||
|
"rsuite": "^5.6.1",
|
||||||
"slick-carousel": "^1.8.1",
|
"slick-carousel": "^1.8.1",
|
||||||
"uuid": "^3.4.0",
|
"uuid": "^3.4.0"
|
||||||
"rsuite": "^5.6.1"
|
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "react-scripts --openssl-legacy-provider start",
|
"start": "react-scripts --openssl-legacy-provider start",
|
||||||
|
@ -92,7 +93,6 @@
|
||||||
"eslint-config-prettier": "^8.3.0",
|
"eslint-config-prettier": "^8.3.0",
|
||||||
"eslint-plugin-prettier": "^4.0.0",
|
"eslint-plugin-prettier": "^4.0.0",
|
||||||
"eslint-plugin-react": "^7.28.0",
|
"eslint-plugin-react": "^7.28.0",
|
||||||
"postcss": "^8.0.0",
|
|
||||||
"gulp": "^4.0.2",
|
"gulp": "^4.0.2",
|
||||||
"gulp-autoprefixer": "^6.1.0",
|
"gulp-autoprefixer": "^6.1.0",
|
||||||
"gulp-clean-css": "^4.3.0",
|
"gulp-clean-css": "^4.3.0",
|
||||||
|
@ -101,6 +101,7 @@
|
||||||
"gulp-rtlcss": "^1.4.1",
|
"gulp-rtlcss": "^1.4.1",
|
||||||
"gulp-sass": "^5.0.0",
|
"gulp-sass": "^5.0.0",
|
||||||
"gulp-sourcemaps": "^2.6.5",
|
"gulp-sourcemaps": "^2.6.5",
|
||||||
|
"postcss": "^8.0.0",
|
||||||
"prettier": "1.17.1",
|
"prettier": "1.17.1",
|
||||||
"sass": "^1.43.4"
|
"sass": "^1.43.4"
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,6 +36,10 @@ import { withTranslation } from 'react-i18next';
|
||||||
import { toast } from 'react-toastify';
|
import { toast } from 'react-toastify';
|
||||||
import ButtonIcon from '../../common/ButtonIcon';
|
import ButtonIcon from '../../common/ButtonIcon';
|
||||||
import { APIBaseURL } from '../../../config';
|
import { APIBaseURL } from '../../../config';
|
||||||
|
import { join } from 'lodash';
|
||||||
|
import { Steps } from 'antd';
|
||||||
|
|
||||||
|
const { Step } = Steps;
|
||||||
|
|
||||||
const TicketApplication = ({ setRedirect, setRedirectUrl, t }) => {
|
const TicketApplication = ({ setRedirect, setRedirectUrl, t }) => {
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
@ -69,6 +73,9 @@ const TicketApplication = ({ setRedirect, setRedirectUrl, t }) => {
|
||||||
const [modalIsShown, setModalIsShown] = useState(false);
|
const [modalIsShown, setModalIsShown] = useState(false);
|
||||||
const [openedModalName, setOpenedModalName] = useState('');
|
const [openedModalName, setOpenedModalName] = useState('');
|
||||||
|
|
||||||
|
// status
|
||||||
|
const [ticketStatus, setTicketStatus] = useState({});
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
let isResponseOK = false;
|
let isResponseOK = false;
|
||||||
// Get Ticket Type
|
// Get Ticket Type
|
||||||
|
@ -152,8 +159,8 @@ const TicketApplication = ({ setRedirect, setRedirectUrl, t }) => {
|
||||||
<FontAwesomeIcon icon="ellipsis-h" className="fs--1" />
|
<FontAwesomeIcon icon="ellipsis-h" className="fs--1" />
|
||||||
</DropdownToggle>
|
</DropdownToggle>
|
||||||
<DropdownMenu right className="border py-2">
|
<DropdownMenu right className="border py-2">
|
||||||
<DropdownItem onClick={viewTicketStatusModal}>{t('View State')}</DropdownItem>
|
<DropdownItem onClick={viewTicketStatusModal.bind(this, id)}>{t('View State')}</DropdownItem>
|
||||||
<DropdownItem onClick={viewTicketWorkflowModal}>{t('View Workflow')}</DropdownItem>
|
<DropdownItem onClick={viewTicketWorkflowModal.bind(this, id)}>{t('View Workflow')}</DropdownItem>
|
||||||
</DropdownMenu>
|
</DropdownMenu>
|
||||||
</UncontrolledDropdown>
|
</UncontrolledDropdown>
|
||||||
);
|
);
|
||||||
|
@ -316,18 +323,61 @@ const TicketApplication = ({ setRedirect, setRedirectUrl, t }) => {
|
||||||
setModalIsShown(false);
|
setModalIsShown(false);
|
||||||
};
|
};
|
||||||
|
|
||||||
let viewTicketStatusModal = () => {
|
let viewTicketStatusModal = (id, e) => {
|
||||||
console.log('View Ticket Status');
|
console.log('View Ticket Status', id);
|
||||||
setModalIsShown(true);
|
// Get Ticket Status
|
||||||
setOpenedModalName('Status');
|
let isResponseOK = false;
|
||||||
|
fetch(APIBaseURL + '/ticket/status/' + id, {
|
||||||
|
method: 'GET',
|
||||||
|
headers: {
|
||||||
|
'Content-type': 'application/json'
|
||||||
|
},
|
||||||
|
body: null
|
||||||
|
})
|
||||||
|
.then(response => {
|
||||||
|
console.log(response);
|
||||||
|
if (response.ok) {
|
||||||
|
isResponseOK = true;
|
||||||
|
}
|
||||||
|
return response.json();
|
||||||
|
})
|
||||||
|
.then(json => {
|
||||||
|
if (isResponseOK) {
|
||||||
|
console.log('/ticket/status ---', json);
|
||||||
|
console.log('/ticket/status ---', json['data']);
|
||||||
|
console.log('/ticket/status ---', json);
|
||||||
|
let temp = json.data;
|
||||||
|
let current_id;
|
||||||
|
temp.value.map((item, index) => {
|
||||||
|
console.log(
|
||||||
|
'/ticket/status ---',
|
||||||
|
item.state_id,
|
||||||
|
temp.current_state_id,
|
||||||
|
item.state_id == temp.current_state_id
|
||||||
|
);
|
||||||
|
if (item.state_id == temp.current_state_id) {
|
||||||
|
current_id = index;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
console.log('temp', temp);
|
||||||
|
setTicketStatus({ ...temp, current_id: current_id });
|
||||||
|
setModalIsShown(true);
|
||||||
|
setOpenedModalName('Status');
|
||||||
|
} else {
|
||||||
|
toast.error(json.description);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch(err => {
|
||||||
|
console.log(err);
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
let hiddenTicketWorkflowModal = () => {
|
let hiddenTicketWorkflowModal = () => {
|
||||||
setModalIsShown(false);
|
setModalIsShown(false);
|
||||||
};
|
};
|
||||||
|
|
||||||
let viewTicketWorkflowModal = () => {
|
let viewTicketWorkflowModal = (id, e) => {
|
||||||
console.log('View Ticket Workflow');
|
console.log('View Ticket Workflow', id);
|
||||||
setModalIsShown(true);
|
setModalIsShown(true);
|
||||||
setOpenedModalName('Workflow');
|
setOpenedModalName('Workflow');
|
||||||
};
|
};
|
||||||
|
@ -339,25 +389,121 @@ const TicketApplication = ({ setRedirect, setRedirectUrl, t }) => {
|
||||||
setTicketApplicationPayload({ ...ticketApplicationPayload, ...temp });
|
setTicketApplicationPayload({ ...ticketApplicationPayload, ...temp });
|
||||||
};
|
};
|
||||||
|
|
||||||
let getModelContent = () => {
|
let getModelHeader = () => {
|
||||||
console.log("---------------------", "getModelContent");
|
console.log('---------------------', 'getModelHeader');
|
||||||
switch (openedModalName) {
|
switch (openedModalName) {
|
||||||
case 'Application':
|
case 'Application':
|
||||||
console.log("switch application")
|
console.log('switch application');
|
||||||
return <ModalHeader>{t('Ticket Application')}</ModalHeader>;
|
return <ModalHeader>{t('Ticket Application')}</ModalHeader>;
|
||||||
|
|
||||||
case 'Status':
|
case 'Status':
|
||||||
console.log("switch status")
|
console.log('switch status');
|
||||||
return <ModalHeader>{t('Ticket Status')}</ModalHeader>;
|
return <ModalHeader>{t('Ticket Status')}</ModalHeader>;
|
||||||
|
|
||||||
case 'Workflow':
|
case 'Workflow':
|
||||||
console.log("switch workflow")
|
console.log('switch workflow');
|
||||||
return <ModalHeader>{t('Ticket Workflow')}</ModalHeader>;
|
return <ModalHeader>{t('Ticket Workflow')}</ModalHeader>;
|
||||||
default:
|
default:
|
||||||
console.log("switch none")
|
console.log('switch none');
|
||||||
return <ModalHeader>{t('Ticket None')}</ModalHeader>;
|
return <ModalHeader>{t('Ticket None')}</ModalHeader>;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let getModelBody = () => {
|
||||||
|
console.log('---------------------', 'getModelBody');
|
||||||
|
switch (openedModalName) {
|
||||||
|
case 'Application':
|
||||||
|
console.log('switch application');
|
||||||
|
return (
|
||||||
|
<ModalBody>
|
||||||
|
{ticketApplicationfields.fields &&
|
||||||
|
ticketApplicationfields.fields.map((field, index) => {
|
||||||
|
if (field.field_type === 'input') {
|
||||||
|
return (
|
||||||
|
<InputGroup key={index}>
|
||||||
|
<InputGroupText>{field.field_name}</InputGroupText>
|
||||||
|
<Input placeholder={field.field_name} onChange={onFieldChange.bind(this, field.field_key)} />
|
||||||
|
</InputGroup>
|
||||||
|
);
|
||||||
|
} else if (field.field_type === 'text_area') {
|
||||||
|
return (
|
||||||
|
<InputGroup key={index}>
|
||||||
|
<InputGroupText>{field.field_name}</InputGroupText>
|
||||||
|
<textarea placeholder={field.field_name} onChange={onFieldChange.bind(this, field.field_key)} />
|
||||||
|
</InputGroup>
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
return <Input key={index}> Error field</Input>;
|
||||||
|
}
|
||||||
|
})}
|
||||||
|
</ModalBody>
|
||||||
|
);
|
||||||
|
|
||||||
|
case 'Status':
|
||||||
|
console.log('switch status');
|
||||||
|
return (
|
||||||
|
<ModalBody>
|
||||||
|
{ticketStatus && (
|
||||||
|
<Steps current={ticketStatus.current_id}>
|
||||||
|
{ticketStatus.value.map((item, index) => {
|
||||||
|
let description = '';
|
||||||
|
if (index < ticketStatus.current_id) {
|
||||||
|
let description_user = item.state_flow_log_list[0].participant_info.participant_alias;
|
||||||
|
let description_operation = item.state_flow_log_list[0].gmt_created;
|
||||||
|
let description_time = item.state_flow_log_list[0].transition.transition_name;
|
||||||
|
description = description_user + description_operation + '@' + description_time;
|
||||||
|
}
|
||||||
|
return <Step key={item.state_id} title={item.state_name} description={description} />;
|
||||||
|
})}
|
||||||
|
</Steps>
|
||||||
|
)}
|
||||||
|
</ModalBody>
|
||||||
|
);
|
||||||
|
|
||||||
|
case 'Workflow':
|
||||||
|
console.log('switch workflow');
|
||||||
|
return <ModalBody>{t('Ticket Workflow')}</ModalBody>;
|
||||||
|
default:
|
||||||
|
console.log('switch none');
|
||||||
|
return <ModalBody>{}</ModalBody>;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
let getModelFooter = () => {
|
||||||
|
switch (openedModalName) {
|
||||||
|
case 'Application':
|
||||||
|
return (
|
||||||
|
<ModalFooter>
|
||||||
|
<Button color="primary" onClick={submitApplication}>
|
||||||
|
{ticketApplicationfields.name}
|
||||||
|
</Button>
|
||||||
|
<Button onClick={hiddenModal}>{t('Close')}</Button>
|
||||||
|
</ModalFooter>
|
||||||
|
);
|
||||||
|
|
||||||
|
case 'Status':
|
||||||
|
return (
|
||||||
|
<ModalHeader>
|
||||||
|
<Button onClick={hiddenModal}>{t('Close')}</Button>
|
||||||
|
</ModalHeader>
|
||||||
|
);
|
||||||
|
|
||||||
|
case 'Workflow':
|
||||||
|
return (
|
||||||
|
<ModalHeader>
|
||||||
|
<Button onClick={hiddenModal}>{t('Close')}</Button>
|
||||||
|
</ModalHeader>
|
||||||
|
);
|
||||||
|
|
||||||
|
default:
|
||||||
|
return (
|
||||||
|
<ModalHeader>
|
||||||
|
<Button onClick={hiddenModal}>{t('Close')}</Button>
|
||||||
|
</ModalHeader>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
console.log('selectedTicketType', selectedTicketType);
|
console.log('selectedTicketType', selectedTicketType);
|
||||||
}, [selectedTicketType]);
|
}, [selectedTicketType]);
|
||||||
|
@ -383,6 +529,10 @@ const TicketApplication = ({ setRedirect, setRedirectUrl, t }) => {
|
||||||
console.log('openedModalName', openedModalName);
|
console.log('openedModalName', openedModalName);
|
||||||
}, [openedModalName]);
|
}, [openedModalName]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
console.log('ticketStatus', ticketStatus);
|
||||||
|
}, [ticketStatus]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Fragment>
|
<Fragment>
|
||||||
<div>
|
<div>
|
||||||
|
@ -424,37 +574,10 @@ const TicketApplication = ({ setRedirect, setRedirectUrl, t }) => {
|
||||||
</Form>
|
</Form>
|
||||||
</CardBody>
|
</CardBody>
|
||||||
</Card>
|
</Card>
|
||||||
<Modal isOpen={ modalIsShown}>
|
<Modal size="xl" isOpen={modalIsShown}>
|
||||||
{getModelContent()}
|
{getModelHeader()}
|
||||||
{/* {openedModalName=='Application' && (<ModalHeader>{t('Ticket Application')}</ModalHeader>) } */}
|
{getModelBody()}
|
||||||
<ModalBody>
|
{getModelFooter()}
|
||||||
{ticketApplicationfields.fields &&
|
|
||||||
ticketApplicationfields.fields.map((field, index) => {
|
|
||||||
if (field.field_type === 'input') {
|
|
||||||
return (
|
|
||||||
<InputGroup key={index}>
|
|
||||||
<InputGroupText>{field.field_name}</InputGroupText>
|
|
||||||
<Input placeholder={field.field_name} onChange={onFieldChange.bind(this, field.field_key)} />
|
|
||||||
</InputGroup>
|
|
||||||
);
|
|
||||||
} else if (field.field_type === 'text_area') {
|
|
||||||
return (
|
|
||||||
<InputGroup key={index}>
|
|
||||||
<InputGroupText>{field.field_name}</InputGroupText>
|
|
||||||
<textarea placeholder={field.field_name} onChange={onFieldChange.bind(this, field.field_key)} />
|
|
||||||
</InputGroup>
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
return <Input key={index}> Error field</Input>;
|
|
||||||
}
|
|
||||||
})}
|
|
||||||
</ModalBody>
|
|
||||||
<ModalFooter>
|
|
||||||
<Button color="primary" onClick={submitApplication}>
|
|
||||||
{ticketApplicationfields.name}
|
|
||||||
</Button>
|
|
||||||
<Button onClick={hiddenModal}>{t('Cancel')}</Button>
|
|
||||||
</ModalFooter>
|
|
||||||
</Modal>
|
</Modal>
|
||||||
|
|
||||||
<DetailedDataTable data={ticketList} title={t('Ticket List')} columns={columns} pagesize={10} />
|
<DetailedDataTable data={ticketList} title={t('Ticket List')} columns={columns} pagesize={10} />
|
||||||
|
|
|
@ -7,6 +7,7 @@ import App from './App';
|
||||||
import Main from './Main';
|
import Main from './Main';
|
||||||
import './helpers/initFA';
|
import './helpers/initFA';
|
||||||
import './i18n';
|
import './i18n';
|
||||||
|
import 'antd/dist/antd.css';
|
||||||
|
|
||||||
ReactDOM.render(
|
ReactDOM.render(
|
||||||
<Main>
|
<Main>
|
||||||
|
|
Loading…
Reference in New Issue