"use client"; import { FC } from "react"; import { Page, Text, View, Document, StyleSheet, Font, Image, PDFViewer, } from "@react-pdf/renderer"; import get from "lodash.get"; import { dayDate } from "@/lib/utils/date"; import { getNumber } from "@/lib/utils/getNumber"; Font.register({ family: "zen", src: `${process.env.NEXT_PUBLIC_BASE_URL}/zen.ttf`, }); Font.register({ family: "NotoSansCJK", fonts: [ { src: `${process.env.NEXT_PUBLIC_BASE_URL}/NotoSansSC-Regular.otf`, fontWeight: "normal", }, { src: `${process.env.NEXT_PUBLIC_BASE_URL}/NotoSansSC-Bold.otf`, fontWeight: "bold", }, ], }); // Create styles const styles = StyleSheet.create({ page: { padding: 20, fontFamily: "NotoSansCJK", fontSize: 10, display: "flex", // fontWeight: "bold", flexDirection: "column", }, title: { fontSize: 10, textAlign: "center", width: 80, fontWeight: "bold", }, thead: { fontSize: 12, textAlign: "center", display: "flex", flexDirection: "row", alignItems: "center", }, section: { marginBottom: 10, }, table: { width: "auto", borderStyle: "solid", borderWidth: 1, marginBottom: 10, }, tableRow: { flexDirection: "row", }, tableCol: { borderStyle: "solid", borderWidth: 1, padding: 5, flex: 1, }, image: { height: 50, // Atur tinggi gambar marginBottom: 5, alignSelf: "center", }, }); // Create Document Component export const DocumentBiodata: FC = ({ data, onRender }) => { console.log({ data }); return ( { if (typeof onRender === "function") { onRender(); } }} > Untuk Posisi 部位 : DATA DIRI 个人资料 {[ { label: "Nama Lengkap 姓名", value: data?.name }, { label: "Tempat & Tanggal Lahir 出生地点,日期", value: data?.birth_place && data?.birth_date ? `${data?.birth_place}, ${dayDate(data?.birth_date)}` : "", }, ].map((row: any, rowIndex) => { return ; })} Photo No. ........ {[ [ { label: "Jenis Kelamin 性别", value: data?.gender === "FEMALE" ? "P 女" : data?.gender === "MALE" ? "L 男" : "L 男 / P 女", mode: "noline", }, { label: "Suku 民族", value: "", }, ], [ { label: "Status Perkawinan 婚姻状况", value: "TK / K0 / K1 / K2 / K3", mode: "noline", }, { label: "Tinggi 身高 / Berat Badan 体重", value: "____ cm / ____ kg", }, ], [ { label: "No. KTP 身份证号码", value: "" }, { label: "Agama 宗教", value: data?.religion }, ], [ { label: "Masa Berlaku KTP 身份证有效期", value: "" }, { label: "NPWP No. 个人所得税", value: "" }, ], [ { label: "Kepemilikan SIM 驾驶证", value: "SIM A No. ___________", }, { label: "SIM B No.", value: "" }, ], [ { label: "SIM C No.", value: "_____________" }, { label: "Golongan Darah 血型", value: "____" }, ], { label: "No. Jamsostek (KPJ) 社会保险卡号", value: "", // mode: "placeholder", }, { label: "Alamat Lengkap 地址", value: data?.address }, { label: "Alamat Lengkap Asal 故乡地址", value: "" }, { label: "Alamat Email 电子邮件地址", value: data?.user?.email }, ].map((row: any, rowIndex) => { return ; })} DATA KELUARGA 家人资料 Nama 姓名 L/P 男/女 Hub. Keluarga 亲缘 Tgl Lahir 生日 Pendidikan 学历 No. HP 手机号码 Pekerjaan 工作 {[ { category: "Orang Tua 父母亲", count: 2 }, { category: "Kakak/Adik 兄妹", count: 6 }, { category: "Istri/Suami 妻子/丈夫", count: 1 }, { category: "Anak 孩子", count: 2 }, ].map((group, index) => ( {group.category} {[...Array(group.count)].map((_, idx) => ( {idx + 1}. ))} ))} PENDIDIKAN 学历 A. Formal 正式 Tahun 年 Masuk 进入 Keluar 退出 Nama Sekolah 校名 Jurusan 科学 Tempat 地点 Berijazah 具有文凭书 / Tidak 否 Bicara 口语 K C B Tulis 写作 K C B {[ "SD 小学", "SLTP 中学", "SLTA 高学", "D 1/2/3", "S1", "S2 研究", "S3", ].map((level, index) => ( {} {level} ))} B. Non Formal非正式 Tahun 年 Materi Pelatihan 培训材料 Penyelenggara 主办者 Lamanya 长度 Tempat 地点 Dibiayai 融资 Berijazah 具有文凭书 {[...Array(6)].map((_, index) => ( ))} AKTIVITAS SOSIAL社交活动 Tahun 年 Masuk 进入 Keluar 退出 Nama Organisasi 本组织名称 Tempat 地点 Posisi 地位 Deskripsi Organisasi 本组织的说明 {[...Array(4)].map((_, index) => ( ))} REFERENSI参考 Nama 姓名 Nama Perusahaan 公司名称 Alamat 地址 No. Telp. 电话号码 Posisi 地位 Hubungan 关系 {[...Array(4)].map((_, index) => ( ))} PENGALAMAN KERJA工作经验 Diluar Grup JULONG 于julong集团以外(Dimulai dari perusahaan yang terakhir始于最后一家公司起) Tahun 年 Masuk 进入 Keluar 退出 Nama & Alamat Perusahaan 公司名称和地址 Jabatan 职级 Awal 初 Akhir 末 Gaji 薪水 Awal 初 Akhir 末 Alasan Keluar 退出理由 {[...Array(2)].map((_, index) => ( ))} {/* Additional Description Section */} Silahkan tunjukkan posisi anda dalam struktur organisasi perusahaan 请您指指出您在公司系统里的职级: Jelaskan tanggung jawab pekerjaan saudara 描述您的工作职责: Tahun 年 Masuk 进入 Keluar 退出 Nama & Alamat Perusahaan 公司名称和地址 Jabatan 职级 Awal 初 Akhir 末 Gaji 薪水 Awal 初 Akhir 末 Alasan Keluar 退出理由 {[...Array(2)].map((_, index) => ( ))} {/* Additional Description Section */} Silahkan tunjukkan posisi anda dalam struktur organisasi perusahaan 请您指指出您在公司系统里的职级: Jelaskan tanggung jawab pekerjaan saudara 描述您的工作职责: Dalam Grup JULONG于julong集团内(Dimulai dari perusahaan yang terakhir始于最后一家公司起) Tahun 年 Masuk 进入 Keluar 退出 Nama & Alamat Perusahaan 公司名称和地址 Jabatan 职级 Awal 初 Akhir 末 Gaji 薪水 Awal 初 Akhir 末 Alasan Pindah 搬迁理由 {[...Array(4)].map((_, index) => ( ))} INFORMASI LAINNYA更多信息 1. Siapa yang dapat dihubungi jika terjadi keadaan darurat? 在紧急情况下可以与谁进行联系? {[ [ { label: "Nama 姓名", value: "L 男 / P 女", }, { label: "Hubungan 关系", value: "", }, ], [ { label: "Alamat Lengkap 地址", value: "", }, { label: "No. Telp. / HP 电话号码", value: "", }, ], ].map((row: any, rowIndex) => { return ; })} 2. Dapatkah kami menghubungi referensi anda, untuk memperoleh informasi secara lengkap mengenai diri anda? 我们能否与您的参考接触, 为获得您自己已完成的信息? : {[...Array(12)].map((_, index) => { const questions = [ "Pernahkah anda bekerja pada perusahaan/grup kami sebelumnya? 您是否在过去曾经与我们公司集团职业? Ya是 / Tidak否 *", "Adakah keluarga/kenalan anda yang bekerja pada perusahaan/grup kami? 您有没有亲戚朋友在我们公司职业? Ya是 / Tidak否 *", "Pernahkah anda menderita sakit berat atau kecelakaan? 您是否曾经得重病或严重事故? Ya是 / Tidak否 *", "Pernahkah anda bermasalah dengan pihak yang berwajib? 您是否与有关当局惹麻烦? Ya是 / Tidak否 *", "Apa hobi anda? 您的业余爱好是什么?", "Apakah anda mempunyai masalah dengan tubuh anda, seperti penglihatan, pendengaran, berbicara, buta warna dll? 您本身的腑器 (听觉, 视觉, 讲话等等) 是否有问题 Ya是 / Tidak否 *", "Kenapa anda ingin bergabung dengan perusahaan kami? 您为何想加入我们公司?", "Bersediakah anda jika dimutasikan ke cabang lain atau perusahaan lain yang masih berada dalam grup perusahaan kami? 您是否愿意重新指派到另一家与我们有关的家公司? Ya是 / Tidak否 *", "Bersediakah anda perjalanan dinas ke luar kota untuk waktu tertentu? 您愿意不到别处官方? Ya是 / Tidak否 *", "Tunjangan dan fasilitas apa saja yang anda peroleh dari perusahaan tempat anda bekerja sekarang/sebelumnya?", "Berapa gaji dan fasilitas yang anda harapkan? 你希望得到的薪水和设施是什么?", "Jika anda diterima, kapan anda akan bergabung dengan perusahaan kami?", ]; const details = [ "Jika ya, kapan, sebagai apa dan nama perusahaan ? 若是是, 在何时, 什么职位, 和公司名称?", "Jika ya, siapa, sebagai apa dan diperusahaan mana ? 若是是, 谁, 什么职位, 和公司名称?", "Jika ya, kapan dan apa penyebabnya/kecelakaannya ? 若是是, 何时, 和什么疾病/事故?", "Jika ya, kapan dan kasus apa ? 若是是, 何时, 什么案件?", "", "Jika ya, sebutkan apa ? 若是是, 请您提出来。", "", "Jika tidak, kenapa ? 若不愿, 为什么?", "Jika tidak, kenapa ? 若不愿, 为什么?", "您目前/以前的职业公司提供什么津贴和设备。", "", "若您被录用的话, 在何时可以加入我们公司?", ]; const hasDetail = details[index] !== ""; return ( {index + 3}. {questions[index]} {hasDetail ? {details[index]} : <>} : ); })} Keterangan di atas saya buat dengan sebenarnya dan jika dikemudian hari ternyata terdapat hal-hal yang bertentangan, maka saya bersedia dituntut 信息效果已与我方的说明一致。同样送类标题由我方的术强制转换地解释。若有朝一日存在任何虚假信息, 我能够接受贵公司的制裁并愿意收! {/* Bagian Kota dan Tanggal */} , {/* Bagian Tanda Tangan */} . Calon Karyawan 候选人 ); }; const HeaderPDF = ({ data }: { data: any }) => { return ( JULONG GROUP INDONESIA FORMULIR 表单 Nomor Dokumen 文件编码 {get(data, "document_number") || "-"} Revisi 修正 {getNumber(get(data, "revised"))} Tanggal Berlaku 有效期 {dayDate(get(data, "document_date"))} Halaman 页面 `${pageNumber} dari ${totalPages}` } /> DATA PRIBADI KARYAWAN 员工个人资料 ); }; const RowPDF = ({ row, rowIndex }: { row: any; rowIndex: any }) => { if (!Array.isArray(row)) { return ( {row.label} : {row.value || " "} ); } return ( {row.map((item, colIndex) => ( {item.label} : {item.value || ":"} ))} ); };