Pārlūkot izejas kodu

add new fitur
1. bypass v1.0
2. verifikasi v1.0
dummy

andi 2 gadi atpakaļ
vecāks
revīzija
06f8c86a1e

+ 122 - 0
components/Bypass/TableBypass.js

@@ -0,0 +1,122 @@
+import Datatable from "@/components/Tables/Datatable";
+import { Button } from "reactstrap";
+import Link from "next/link";
+import moment from "moment";
+
+function TableBypass({ listData, to, linkName }) {
+    return (
+        <div className="card b">
+            <div className="card-body card-over">
+                <Datatable options={{ responsive: false, ordering: true }}>
+                    <table className="table w-100" data-order='[[3, "desc"]]'>
+                        <thead>
+                            <tr>
+                                <th>Nomor Sanksi</th>
+                                <th>Deskripsi Sanksi</th>
+                                {/* <th>Created</th> */}
+                                <th>Status</th>
+                                <th>Aksi</th>
+                            </tr>
+                        </thead>
+                        <tbody>
+                            {listData.length
+                                ? listData.map((data) => {
+                                    return (
+                                        <tr key={data._id}>
+                                            {/* <td>{data.no_sanksi}</td> */}
+                                            <td>
+                                                <div className="media align-items-center">
+                                                    <div className="media-body d-flex">
+                                                        <div>
+                                                            <h4>{data.no_sanksi}</h4>
+                                                            <p>{moment(data.createdAt).format("DD-MM-YYYY")}</p>
+                                                        </div>
+                                                    </div>
+                                                </div>
+                                            </td>
+                                            <td>
+                                                <div className="table-desc">
+                                                    <div className="media align-items-center">
+                                                        <div className="media-body d-flex">
+                                                            <div>
+                                                                {/* <h4 className="m-0">{data.laporan.pt.nama}</h4> */}
+                                                                <h4 className="m-0">{data.laporan.pt.nama.length > 64 ? data.laporan.pt.nama.substring(0, 64) + "..." : data.laporan.pt.nama}</h4>
+                                                                {/* <p className="w-105">{data.keterangan.length > 150 ? data.keterangan.substring(0, 150) + "..." : data.keterangan}</p> */}
+                                                                <p className="w-105">{data.keterangan}</p>
+                                                            </div>
+                                                        </div>
+                                                    </div>
+                                                </div>
+                                            </td>
+                                            {/* <td>{moment(data.createdAt).fromNow()}</td> */}
+                                            {/* <td>{moment(data.createdAt).format("DD MMMM YYYY")}</td> */}
+                                            <td>{data.is_pengajuan_keberatan === true || data.is_pengajuan_keberatan === false ?
+                                                <div>
+                                                    <div className="badge badge-green">{data.last_step}</div>
+                                                    {data.last_step === "Permohonan Keberatan" && (
+                                                        <p className="w-105">Sanksi dalam proses pengajuan permohonan keberatan</p>
+                                                    )}
+                                                    {data.last_step === "Jawaban Atas Permohonan Keberatan" && (
+                                                        <p className="w-105">PDDIKTI sudah memberikan jawaban atas permohonan keberatan</p>
+                                                    )}
+                                                    {data.last_step === "Permohonan Banding" && (
+                                                        <p className="w-105">Sanksi dalam proses pengajuan permohonan banding</p>
+                                                    )}
+                                                    {data.last_step === "Jawaban Atas Permohonan Banding" && (
+                                                        <p className="w-105">PDDIKTI sudah memberikan jawaban atas permohonan banding</p>
+                                                    )}
+                                                    {data.last_step === "Permohonan Pencabutan Sanksi" && (
+                                                        <p className="w-105">Sanksi dalam proses permohonan pencabutan sanksi</p>
+                                                    )}
+                                                    {data.last_step === "Jawaban Atas Permohonan Pencabutan Sanksi" && (
+                                                        <p className="w-105">PDDIKTI sudah memberikan jawaban atas permohonan pencabutan sanksi</p>
+                                                    )}
+                                                    {data.last_step === "Dokumen Perbaikan" && (
+                                                        <p className="w-105">Proses perbaikan dokumen</p>
+                                                    )}
+
+                                                </div>
+                                                :
+                                                <div>
+                                                    <div className="badge badge-red">Belum Diperiksa</div>
+                                                    <p className="w-105">Sanksi belum diperiksa</p>
+                                                </div>}
+                                            </td>
+                                            <td 
+                                            style={{width:"25%"}}
+                                            >
+                                                    {/* <Link
+                                                        href={{
+                                                            pathname: to,
+                                                            query: { id: data._id },
+                                                        }}
+                                                    > */}
+                                                        <Button className="btn-login float-right" color
+                                                         style={{ borderRadius: "7px" }}
+                                                        >
+                                                            <span className="font-color-white">
+                                                                {linkName}
+                                                            </span>
+                                                        </Button>
+                                                    {/* </Link> */}
+                                                    <Button className="btn-v2 float-right mr-2" color 
+                                                     style={{ borderRadius: "7px" }}
+                                                    >
+                                                        <span className="font-color-black">
+                                                            Pencabutan Sanksi
+                                                        </span>
+                                                    </Button>
+                                            </td>
+                                        </tr>
+                                    );
+                                })
+                                : ""}
+                        </tbody>
+                    </table>
+                </Datatable>
+            </div>
+        </div>
+    );
+}
+
+export default TableBypass;

+ 18 - 0
components/Layout/Menu.js

@@ -101,6 +101,24 @@ const Menu = [
 			},
 		],
 	},
+	///////--------Supporting Features-----\\\\\\\\\\
+	{
+		heading: "Supporting Features",
+		translate: "sidebar.heading.SUPPORTING_FEATURES",
+		
+	},
+	{
+		name: "Bypass",
+		path: "/app/bypass",
+		icon: "fas fa-feather",
+		translate: "sidebar.nav.Riwayat",
+	},
+	{
+		name: "Verifikasi",
+		path: "/app/verifikasi",
+		icon: "fas fa-building",
+		translate: "sidebar.nav.Riwayat",
+	},
 
 	///////------ANALYTICS REPORT------\\\\\\\\\\\
 

+ 1 - 1
components/Main/ChartdataHome.js

@@ -121,7 +121,7 @@ class ChartdataHome extends Component {
 						<FlotChart options={this.ChartSpline.options} data={this.state.dataChart.data} className="flot-chart" height="150px" width="300px" />
 					</CardBody>
 					<div align="center">
-						<h5 className="font-weight-bold font-10">Data Statistik Pengunjung Bulan {`${this.convertMonth(new Date().getMonth() + 1)} ${new Date().getFullYear()}`}</h5>
+						<h5 className="font-weight-bold" style={{ fontSize: "12px", marginTop: "3px" }}>Data Statistik Pengunjung Bulan {`${this.convertMonth(new Date().getMonth() + 1)} ${new Date().getFullYear()}`}</h5>
 					</div>
 				</Card>
 			</Col>

+ 1 - 3
components/Sanksi/TablePenetapanSanksi.js

@@ -60,8 +60,6 @@ export class TablePenetapanSanksi extends Component {
 
 	render() {
 		const { pelanggaran, labelSanksi, checkedData } = this.state;
-		console.log(labelSanksi.map((e) => e.value))
-
 		return (
 			<div className="card b ">
 				<div className="card-body card-over">
@@ -154,7 +152,7 @@ export class TablePenetapanSanksi extends Component {
 						}
 
 					</div>
-		
+
 
 				</div>
 			</div>

+ 39 - 0
pages/app/bypass/index.js

@@ -0,0 +1,39 @@
+import React, { Component } from "react";
+import ContentWrapper from "@/components/Layout/ContentWrapper";
+import { Row, Col } from "reactstrap";
+import { getSanksi } from "@/actions/sanksi";
+import { connect } from "react-redux";
+import Loader from "@/components/Common/Loader";
+import TableBypass from "../../../components/Bypass/TableBypass";
+class Bypass extends Component {
+    constructor(props) {
+        super(props);
+        this.state = {
+            sanksi: {},
+        };
+    }
+
+    componentDidMount = async () => {
+        const { token } = this.props;
+        const sanksi = await getSanksi(token);
+        this.setState({ sanksi });
+    };
+
+    render() {
+        const { sanksi } = this.state;
+        return (
+            <ContentWrapper>
+                <div className="content-heading">
+                    <span className="font-color-white">
+                        Bypass
+                    </span></div>
+                <Row>
+                    <Col lg={12}>{sanksi.data?.length ? <TableBypass listData={sanksi.data} linkName="Detail" /> : sanksi.data ? "Tidak ada Sanksi" : <Loader />}</Col>
+                </Row>
+            </ContentWrapper>
+        );
+    }
+}
+
+const mapStateToProps = (state) => ({ user: state.user, token: state.token });
+export default connect(mapStateToProps)(Bypass);

+ 1 - 1
pages/app/index.js

@@ -98,7 +98,7 @@ class App extends Component {
                       </Button>
                     </span>
                   </Link>
-                </p>waw
+                </p>
                 <div id="video-css">
                   <video controls>
                     <source src="/static/img/video/video_buat_laporan.mp4" type="video/mp4" />

+ 1 - 1
pages/app/pelaporan/search.js

@@ -131,7 +131,7 @@ class Search extends Component {
 				<div className="content-heading">
 					<div className="font-color-white">
 						Pelaporan
-						<div className="font-color-white font-10">Pilih Perguruan Tinggi</div>
+						<div className="font-color-white" style={{ fontSize:"12px", marginTop:"3px" }}>Pilih Perguruan Tinggi</div>
 					</div>
 					<div className="ml-auto">
 						<Link href="/app/pelaporan">

+ 144 - 0
pages/app/verifikasi/index.js

@@ -0,0 +1,144 @@
+import React from "react";
+import ContentWrapper from '@/components/Layout/ContentWrapper';
+import { Container, Row, Col, Card, CardBody, CardFooter, CardHeader, Input, Button } from 'reactstrap';
+import FormValidator from "@/components/Forms/Validator.js";
+import { ptPublic } from "@/actions/PT";
+import AsyncSelect from "react-select/async";
+
+
+const loadOptions = (inputValue, callback) => {
+    setTimeout(async () => {
+        const pt = await ptPublic({ search: inputValue });
+        const data = pt.data.map((e) => ({
+            value: e.id,
+            label: e.nama,
+            className: "State-ACT",
+        }));
+        callback(data);
+    }, 1000);
+};
+class Verifikasi extends React.Component {
+    constructor(props) {
+        super(props);
+        this.state = {
+            formLogin: {
+
+                password: "",
+                // pt_id: ""
+            },
+
+            inputValue: "",
+            pt_id: ""
+
+        };
+    }
+
+    validateOnChange = (event) => {
+        const input = event.target;
+        const form = input.form;
+        const value = input.type === "checkbox" ? input.checked : input.value;
+
+        const result = FormValidator.validate(input);
+        this.setState({
+            [form.name]: {
+                ...this.state[form.name],
+                [input.name]: value,
+                errors: {
+                    ...this.state[form.name].errors,
+                    [input.name]: result,
+                },
+            },
+        });
+    };
+    hasError = (formName, inputName, method) => {
+        return (
+            this.state[formName] &&
+            this.state[formName].errors &&
+            this.state[formName].errors[inputName] &&
+            this.state[formName].errors[inputName][method]
+        );
+    };
+
+
+
+    // handleInputChange = (newValue) => {
+    //     const inputValue = newValue.replace();
+    //     this.setState({ inputValue });
+    //     return inputValue;
+    //   };
+    handleChangeSelectPerguruanTinggi = (selected_PT) => {
+        this.setState({ pt_id: selected_PT.value });
+    };
+    onSubmit = async (e) => {
+        console.log("di submitt")
+    }
+
+
+    render() {
+        return (
+            <ContentWrapper>
+                <div className="content-heading">
+                    <span className="font-color-white">
+                        Verifikasi
+                    </span>
+                </div>
+                <Container className="container-sm pt-5" >
+                    <Card
+                        style={{ margin: "20px", borderRadius: "15px" }}
+                    >
+                        <CardHeader className="text-center">
+                            <div className="card-title font-weight-bold mt-4  font-color-black"
+                                style={{ fontSize: "20px" }}
+                            >Login sebagai Perguruan Tinggi</div>
+                        </CardHeader>
+                        <CardBody>
+                            <form onSubmit={this.onSubmit} method="post" name="formLogin">
+                                <div className="form-group">
+                                    <label className="col-form-label font-color-black mb-0 font-weight-bold">Password akun PDDIKTI</label>
+                                    <Input
+                                        style={{ borderRadius: "7px" }}
+                                        type="password"
+                                        id="id-password"
+                                        name="password"
+                                        invalid={this.hasError("formLogin", "password", "required")}
+                                        onChange={this.validateOnChange}
+                                        data-validate='["required"]'
+                                        value={this.state.formLogin.password}
+
+                                    />
+                                    <span className="invalid-feedback">Wajib diisi</span>
+                                </div>
+                                <div className="form-group">
+                                    <label className="col-form-label font-color-black mb-0 font-weight-bold">Perguruan Tinggi</label>
+                                    <AsyncSelect
+                                        style={{ borderRadius: "7px" }}
+                                        cacheOptions
+                                        loadOptions={loadOptions}
+                                        defaultOptions
+                                        onChange={(e) => {
+                                            this.handleChangeSelectPerguruanTinggi(e);
+                                        }}
+                                    // onInputChange={this.handleInputChange}
+                                    />
+                                    <span className="invalid-feedback">Field is required</span>
+                                </div>
+                                <Button color className="btn-login float-right mt-3"
+                                    style={{ borderRadius: "7px" }}
+                                    onClick={this.onSubmit}
+                                >
+                                    <span className="font-color-white">Login</span>
+                                </Button>
+                            </form>
+                        </CardBody>
+                    </Card>
+                </Container>
+            </ContentWrapper>)
+    }
+}
+
+
+
+
+
+
+export default Verifikasi

+ 8 - 2
styles/app/app/mycss.scss

@@ -58,7 +58,7 @@
 ///////////////////////////////////////////<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>
 
 
-  //////////////////////////////////Table Pelanggaran
+  //////////////////////////////////Table Pelanggaran in berita acara
   
   .table-a th {
     border: 1px solid #C0C0C0;
@@ -182,6 +182,7 @@ border-radius: 4px;
 }
 
 /////////////////////////////////////// style Component 
+
 .btn-v1-outline-purple {
   color: #3e3a8e;
   border-color: #3e3a8e; }
@@ -202,5 +203,10 @@ border-radius: 4px;
     .btn-v1-outline-purple:not(:disabled):not(.disabled):active:focus, .btn-v1-outline-purple:not(:disabled):not(.disabled).active:focus,
     .show > .btn-v1-outline-purple.dropdown-toggle:focus {
       box-shadow: 0 0 0 0.2rem rgba(114, 102, 186, 0.5); }
+    }
+    
+    .font-20{
+      font-size: 20px;
+    }
 
-    }
+    ///////////////////////// Menu Verifikasi

+ 0 - 8
styles/bootstrap/_type.scss

@@ -142,14 +142,6 @@ mark,
   font-size: 15px;
   border-radius: 10px;
 }
-.font-20{
-  font-size: 20px;
-  margin-left: 10px;
-}
 .mrgn-top-5{
   margin-top: 5px;
-}
-.font-10{
-  margin-top: 3px;
-  font-size: 12px;
 }