<!DOCTYPE html>
<html lang="vi" xmlns="http://www.w3.org/1999/xhtml" prefix="og: http://ogp.me/ns#">
<head>
<title>Tuyển dụng lập trình viên front-end &#40;HTML&#x002F;CSS&#x002F;JS&#41; phát triển NukeViet</title>
<meta name="description" content="Tuyển dụng lập trình viên front-end &#40;HTML&#x002F;CSS&#x002F;JS&#41; phát triển NukeViet - Savefile - Tin Tức -...">
<meta name="author" content="Horus">
<meta name="copyright" content="Horus [erp.xiris@gmail.com]">
<meta name="robots" content="noindex, follow">
<meta name="googlebot" content="noindex, follow">
<meta name="msnbot" content="noindex, follow">
<meta name="coccocbot" content="noindex, follow">
<meta name="generator" content="NukeViet v4.6">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta property="og:title" content="Tuyển dụng lập trình viên front-end (HTML/CSS/JS) phát triển NukeViet">
<meta property="og:type" content="website">
<meta property="og:description" content="Savefile - Tin Tức - https&#x3A;&#x002F;&#x002F;aiwater2.xiris.vn&#x002F;vi&#x002F;news&#x002F;savefile&#x002F;Tuyen-dung&#x002F;Tuyen-dung-lap-trinh-vien-front-end-HTML-CSS-JS-5.html">
<meta property="og:site_name" content="Horus">
<meta property="og:url" content="https://aiwater2.xiris.vn/vi/news/savefile/Tuyen-dung/Tuyen-dung-lap-trinh-vien-front-end-HTML-CSS-JS-5.html">
<link rel="shortcut icon" href="https://aiwater2.xiris.vn/uploads/chatgpt-image-08_31_42-20-thg-9-2025.webp">
<link rel="canonical" href="https://aiwater2.xiris.vn/vi/news/savefile/Tuyen-dung/Tuyen-dung-lap-trinh-vien-front-end-HTML-CSS-JS-5.html">
<link rel="alternate" href="https://aiwater2.xiris.vn/vi/news/rss/" title="Tin Tức" type="application/rss+xml">
<link rel="alternate" href="https://aiwater2.xiris.vn/vi/news/rss/Tin-tuc/" title="Tin Tức - Tin tức" type="application/rss+xml">
<link rel="alternate" href="https://aiwater2.xiris.vn/vi/news/rss/thong-cao-bao-chi/" title="Tin Tức - Thông cáo báo chí" type="application/rss+xml">
<link rel="alternate" href="https://aiwater2.xiris.vn/vi/news/rss/Ban-tin-noi-bo/" title="Tin Tức - Bản tin nội bộ" type="application/rss+xml">
<link rel="alternate" href="https://aiwater2.xiris.vn/vi/news/rss/Tin-cong-nghe/" title="Tin Tức - Tin công nghệ" type="application/rss+xml">
<link rel="alternate" href="https://aiwater2.xiris.vn/vi/news/rss/San-pham/" title="Tin Tức - Sản phẩm" type="application/rss+xml">
<link rel="alternate" href="https://aiwater2.xiris.vn/vi/news/rss/Doi-tac/" title="Tin Tức - Đối tác" type="application/rss+xml">
<link rel="alternate" href="https://aiwater2.xiris.vn/vi/news/rss/Tuyen-dung/" title="Tin Tức - Tuyển dụng" type="application/rss+xml">
<link rel="preload" as="style" href="https://aiwater2.xiris.vn/assets/css/font-awesome.min.css" type="text/css">
<link rel="preload" as="style" href="https://aiwater2.xiris.vn/themes/theme_xiris/fonts/font6/css/all.css" type="text/css">
<link rel="preload" as="style" href="https://aiwater2.xiris.vn/themes/theme_xiris/css/additional_css/datetimepicker/css/bootstrap-material-datetimepicker.css" type="text/css">
<link rel="preload" as="style" href="https://aiwater2.xiris.vn/themes/theme_xiris/css/additional_css/datetimepicker/css/font_icon.css" type="text/css">
<link rel="preload" as="style" href="https://aiwater2.xiris.vn/themes/theme_xiris/css/bootstrap.min.css" type="text/css">
<link rel="preload" as="style" href="https://aiwater2.xiris.vn/themes/theme_xiris/css/style.css" type="text/css">
<link rel="preload" as="style" href="https://aiwater2.xiris.vn/themes/theme_xiris/css/style.responsive.css?v=20260828bi" type="text/css">
<link rel="preload" as="style" href="https://aiwater2.xiris.vn/themes/theme_xiris/css/news.css" type="text/css">
<link rel="preload" as="style" href="https://aiwater2.xiris.vn/themes/theme_xiris/css/custom.css?v=20260907-dsbt-old-period" type="text/css">
<link rel="preload" as="style" href="https://aiwater2.xiris.vn/assets/js/jquery-ui/jquery-ui.min.css" type="text/css">
<link rel="preload" as="style" href="https://aiwater2.xiris.vn/assets/js/select2/select2.min.css" type="text/css">
<link rel="preload" as="style" href="https://aiwater2.xiris.vn/themes/theme_xiris/css/yearpicker.css" type="text/css">
<link rel="preload" as="style" href="https://aiwater2.xiris.vn/themes/theme_xiris/css/tree.chart.css" type="text/css">
<link rel="preload" as="style" href="https://aiwater2.xiris.vn/themes/theme_xiris/css/jquery-confirm.min.css" type="text/css">
<link rel="preload" as="style" href="https://unpkg.com/tributejs@5.1.3/dist/tribute.css" type="text/css">
<link rel="preload" as="style" href="https://aiwater2.xiris.vn/themes/theme_xiris/css/xiris_font.css?v=v3c9587a4" type="text/css">
<link rel="preload" as="style" href="https://aiwater2.xiris.vn/themes/theme_xiris/css/xiris_dark.css?v=v20260828bg" type="text/css">
<link rel="preload" as="style" href="https://aiwater2.xiris.vn/themes/theme_xiris/css/xiris_form.css?v=v106breadcrumbpad" type="text/css">
<link rel="preload" as="style" href="https://aiwater2.xiris.vn/themes/theme_xiris/css/xiris_typography.css?v=v20260911so" type="text/css">
<link rel="preload" as="script" href="https://aiwater2.xiris.vn/assets/js/jquery/jquery.min.js" type="text/javascript">
<link rel="preload" as="script" href="https://aiwater2.xiris.vn/assets/js/language/vi.js" type="text/javascript">
<link rel="preload" as="script" href="https://aiwater2.xiris.vn/assets/js/DOMPurify/purify3.js" type="text/javascript">
<link rel="preload" as="script" href="https://aiwater2.xiris.vn/assets/js/global.js" type="text/javascript">
<link rel="preload" as="script" href="https://aiwater2.xiris.vn/assets/js/site.js" type="text/javascript">
<link rel="preload" as="script" href="https://aiwater2.xiris.vn/themes/theme_xiris/js/news.js" type="text/javascript">
<link rel="preload" as="script" href="https://aiwater2.xiris.vn/themes/theme_xiris/js/main.js?v=1789094780" type="text/javascript">
<link rel="preload" as="script" href="https://aiwater2.xiris.vn/themes/theme_xiris/js/custom.js" type="text/javascript">
<link rel="preload" as="script" href="https://aiwater2.xiris.vn/themes/theme_xiris/js/additional_js/moment/moment.js" type="text/javascript">
<link rel="preload" as="script" href="https://aiwater2.xiris.vn/themes/theme_xiris/js/additional_js/moment/js/moment-with-locales.min.js" type="text/javascript">
<link rel="preload" as="script" href="https://aiwater2.xiris.vn/themes/theme_xiris/js/additional_js/moment/locale/vi.js" type="text/javascript">
<link rel="preload" as="script" href="https://aiwater2.xiris.vn/themes/theme_xiris/css/additional_css/datetimepicker/js/bootstrap-material-datetimepicker.js" type="text/javascript">
<link rel="preload" as="script" href="/themes/theme_xiris/js/fullcalender.min.js?t=1792029555" type="text/javascript">
<link rel="preload" as="script" href="https://aiwater2.xiris.vn/assets/js/jquery-ui/jquery-ui.min.js" type="text/javascript">
<link rel="preload" as="script" href="https://aiwater2.xiris.vn/assets/js/language/jquery.ui.datepicker-vi.js" type="text/javascript">
<link rel="preload" as="script" href="https://aiwater2.xiris.vn/assets/js/select2/select2.min.js" type="text/javascript">
<link rel="preload" as="script" href="https://aiwater2.xiris.vn/themes/theme_xiris/js/yearpicker.js" type="text/javascript">
<link rel="preload" as="script" href="https://aiwater2.xiris.vn/themes/theme_xiris/js/tree.chart.js" type="text/javascript">
<link rel="preload" as="script" href="/themes/theme_xiris/js/jquery-confirm.min.js?t=1792029555" type="text/javascript">
<link rel="preload" as="script" href="https://unpkg.com/tributejs@5.1.3/dist/tribute.min.js" type="text/javascript">
<link rel="preload" as="script" href="https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js" type="text/javascript">
<link rel="preload" as="script" href="https://cdnjs.cloudflare.com/ajax/libs/html2canvas/1.4.1/html2canvas.min.js" type="text/javascript">
<link rel="preload" as="script" href="https://connect.facebook.net/vi_VN/sdk.js#xfbml=1&version=v18.0&appId=363469809004152&autoLogAppEvents=1" type="text/javascript" crossorigin="anonymous">
<link rel="preload" as="script" href="https://aiwater2.xiris.vn/webpush/main.js" type="text/javascript">
<link rel="preload" as="script" href="https://aiwater2.xiris.vn/themes/theme_xiris/js/xiris_font_weight.js?v=v1dd27a73" type="text/javascript">
<link rel="preload" as="script" href="https://aiwater2.xiris.vn/themes/theme_xiris/js/xiris_loading.js?v=v5loadingorbit" type="text/javascript">
<link rel="preload" as="script" href="https://aiwater2.xiris.vn/themes/theme_xiris/js/xiris_bang_the.js?v=v12cotgop" type="text/javascript">
<link rel="preload" as="script" href="https://aiwater2.xiris.vn/themes/theme_xiris/js/xiris_loc.js?v=v5" type="text/javascript">
<link rel="preload" as="script" href="https://aiwater2.xiris.vn/themes/theme_xiris/js/xiris_len_xuong.js?v=v2" type="text/javascript">
<link rel="preload" as="script" href="https://aiwater2.xiris.vn/themes/theme_xiris/js/xiris_tabs.js?v=v1" type="text/javascript">
<link rel="preload" as="script" href="https://aiwater2.xiris.vn/themes/theme_xiris/js/xiris_datepicker.js?v=v1" type="text/javascript">
<link rel="preload" as="script" href="https://aiwater2.xiris.vn/themes/theme_xiris/js/xiris_select2.js?v=v4" type="text/javascript">
<link rel="preload" as="script" href="https://aiwater2.xiris.vn/themes/theme_xiris/js/xiris_copy.js?v=v2" type="text/javascript">
<link rel="preload" as="script" href="https://aiwater2.xiris.vn/themes/theme_xiris/js/xiris_quaylai.js?v=v11cuatuchoi" type="text/javascript">
<link rel="preload" as="script" href="https://aiwater2.xiris.vn/themes/theme_xiris/js/xiris_xemtep.js?v=v12gophopcu" type="text/javascript">
<link rel="preload" as="script" href="https://aiwater2.xiris.vn/themes/theme_xiris/js/xiris_ten_in.js?v=v2uutien" type="text/javascript">
<link rel="preload" as="script" href="https://aiwater2.xiris.vn/themes/theme_xiris/js/xiris_chup_anh.js?v=v4" type="text/javascript">
<link rel="preload" as="script" href="https://aiwater2.xiris.vn/themes/theme_xiris/js/xiris_excel_lh.js?v=v1" type="text/javascript">
<link rel="preload" as="script" href="https://aiwater2.xiris.vn/themes/theme_xiris/js/bootstrap.min.js" type="text/javascript">
<link rel="preload" as="script" href="https://aiwater2.xiris.vn//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit" type="text/javascript">
<link rel="stylesheet" href="https://aiwater2.xiris.vn/assets/css/font-awesome.min.css">
<link rel="stylesheet" href="https://aiwater2.xiris.vn/themes/theme_xiris/fonts/font6/css/all.css">
<link rel="stylesheet" href="https://aiwater2.xiris.vn/themes/theme_xiris/css/additional_css/datetimepicker/css/bootstrap-material-datetimepicker.css">
<link rel="stylesheet" href="https://aiwater2.xiris.vn/themes/theme_xiris/css/additional_css/datetimepicker/css/font_icon.css">
<link rel="stylesheet" href="https://aiwater2.xiris.vn/themes/theme_xiris/css/bootstrap.min.css">
<link rel="stylesheet" href="https://aiwater2.xiris.vn/themes/theme_xiris/css/style.css">
<link rel="stylesheet" href="https://aiwater2.xiris.vn/themes/theme_xiris/css/style.responsive.css?v=20260828bi">
<link rel="StyleSheet" href="https://aiwater2.xiris.vn/themes/theme_xiris/css/news.css">
<link rel="stylesheet" href="https://aiwater2.xiris.vn/themes/theme_xiris/css/custom.css?v=20260907-dsbt-old-period">
<link type="text/css" href="https://aiwater2.xiris.vn/assets/js/jquery-ui/jquery-ui.min.css" rel="stylesheet" />
<link href="https://aiwater2.xiris.vn/assets/js/select2/select2.min.css" type="text/css" rel="stylesheet" />
<link type="text/css" href="https://aiwater2.xiris.vn/themes/theme_xiris/css/yearpicker.css" rel="stylesheet" />
<link rel="stylesheet" type="text/css" href="https://aiwater2.xiris.vn/themes/theme_xiris/css/tree.chart.css">
<link type="text/css" href="https://aiwater2.xiris.vn/themes/theme_xiris/css/jquery-confirm.min.css" rel="stylesheet" />
<link rel="stylesheet" href="https://unpkg.com/tributejs@5.1.3/dist/tribute.css" />
<link rel="stylesheet" href="https://aiwater2.xiris.vn/themes/theme_xiris/css/xiris_font.css?v=v3c9587a4">
<link rel="stylesheet" href="https://aiwater2.xiris.vn/themes/theme_xiris/css/xiris_dark.css?v=v20260828bg">
<link rel="stylesheet" href="https://aiwater2.xiris.vn/themes/theme_xiris/css/xiris_form.css?v=v106breadcrumbpad">
<link rel="stylesheet" href="https://aiwater2.xiris.vn/themes/theme_xiris/css/xiris_typography.css?v=v20260911so">
<style>
    .load{
        display: block !important;
    }
    .no_load{
        display: none !important;
    }
    .four {
        width: 10px;
        height: 10px;
        background-color: #fff;
        border-radius: 50%;
        animation: loader4Animation 1s linear infinite;
        position: absolute;
        right: -25px;
        top: 5px;
    }
    @keyframes loader4Animation {
        0% {
          background-color: rgba(0,0,128, 1);
          box-shadow: 15px 0px 0px 0px rgba(0,0,128, 0.67),
          30px 0px 0px 0px rgba(0,0,128, 0.33);
      }
      17% {
          background-color: rgba(0,0,128, 0.67);
          box-shadow: 15px 0px 0px 0px rgba(0,0,128, 1),
          30px 0px 0px 0px rgba(0,0,128, 0.67);
      }
      33% {
          background-color: rgba(0,0,128, 0.33);
          box-shadow: 15px 0px 0px 0px rgba(0,0,128, 0.67),
          30px 0px 0px 0px rgba(0,0,128, 1);
      }
      50% {
          background-color: rgba(0,0,128, 0);
          box-shadow: 15px 0px 0px 0px rgba(0,0,128, 0.33),
          30px 0px 0px 0px rgba(0,0,128, 0.67);
      }
      67% {
          background-color: rgba(0,0,128, 0.33);
          box-shadow: 15px 0px 0px 0px rgba(0,0,128, 0),
          30px 0px 0px 0px rgba(0,0,128, 0.33);
      }
      83% {
          background-color: rgba(0,0,128, 0.67);
          box-shadow: 15px 0px 0px 0px rgba(0,0,128, 0.33),
          30px 0px 0px 0px rgba(0,0,128, 0);
      }
      100% {
          background-color: rgba(0,0,128, 1);
          box-shadow: 15px 0px 0px 0px rgba(0,0,128, 0.67),
          30px 0px 0px 0px rgba(0,0,128, 0.33);
      }
  }
  .load{
    position: fixed;
    height: 100vh;
    width: 100vw;
    top: 0px;
    left: 0px;
    z-index: 10000000;
    background: rgba(0, 0, 0, 0.3);
    text-align: center;
}
.load_box{
    height: 100px;
    width: 100px;
    position: absolute;
    top: 45%;
    display: inline-block;
    padding: 30px;
}
.load_box i{
    font-size: 40px;
    color: #fff;
    z-index: 100000000;
}
.load_box span{

}

.no_load{
    display: none;
}
:root {
  --primary-color: #fff;
  --background-color: #017e84;
  --background-color-hover: #036267;
}
</style>
<style id="xiris-critical-first-paint">
  /* Hide first-paint-only content before its JavaScript relocation/styling finishes. */
  #xirisPdfHeader { display: none !important; }
  .dropdown_chuong_thong_bao { display: none !important; }
  #xiris-hdr-right .dropdown_chuong_thong_bao { display: block !important; }
</style>
<style type="text/css">
    /* Dáng chung cho mọi nút chép link — khai một chỗ để năm màn không mỗi nơi một kiểu. */
    .xiris-copy{display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;
      padding:0;flex:0 0 auto;border:1px solid rgba(127,145,164,.35);border-radius:6px;
      background:transparent;color:#7f91a4;font-size:11.5px;line-height:1;cursor:pointer;
      transition:color .15s ease,border-color .15s ease,background .15s ease}
    .xiris-copy:hover{color:#168ccb;border-color:#168ccb;background:rgba(22,140,203,.08)}
    .xiris-copy.xiris-copy-ok{color:#138a72;border-color:rgba(19,138,114,.5);background:rgba(19,138,114,.10)}
    .xiris-copy.xiris-copy-loi{color:#e5484d;border-color:rgba(229,72,77,.5);background:rgba(229,72,77,.10)}
  </style>
<style type="text/css">
	body{background: #fff;}
</style>
  <div id="fb-root"></div>
  <!-- ===== X-IRIS: che do SANG / TOI =====
       File phu, chi an khi <html data-xtheme="dark"> -> khong bat thi vo hai.
       Script dat O DAY, TRONG <head>, chay TRUOC khi <body> ton tai: gan thuoc tinh len
       <html> ngay luc nay thi trang ve ra da la mau toi. De xuong cuoi trang hay doi
       DOMContentLoaded la nguoi dung thay CHOP TRANG moi lan tai — choi mat va lo ngay. -->
  <!-- Bộ 3 font (Montserrat / Chakra Petch / Orbitron) — tự host. Nạp cho CẢ HAI chế độ
       sáng-tối nên phải đứng NGOÀI xiris_dark.css. -->
  <!-- Bảng màu DÙNG CHUNG cho các màn thêm mới/chỉnh sửa/xem chi tiết (Nhập/Xuất hàng,
       Phiếu vận hành, Ghi chỉ số, Thông số vận hành...) — xem xiris_form.css để biết
       LÝ DO từng giá trị. Đứng SAU xiris_dark.css vì đọc lại biến --x-* của nó (thứ tự
       không bắt buộc về mặt kỹ thuật — var() phân giải lúc dùng chứ không lúc nạp — nhưng
       để đây cho xuôi mắt khi đọc code). -->
  <!-- ⚠⚠ ĐỔI NỘI DUNG xiris_form.css THÌ PHẢI ĐỔI LUÔN CHỮ SAU ?v= Ở ĐÂY.
       18/09/2026: khối "BẢNG THÀNH THẺ" (mốc 820px) được thêm vào file mà vẫn để nguyên
       ?v=v26donvi. Máy chủ trả file mới, nhưng trình duyệt nào đã từng tải v26donvi thì cứ
       dùng bản cũ trong ổ đĩa — chủ dự án mở màn Danh sách sự cố ở bề ngang 768px vẫn thấy
       bảng cuộn ngang, cột "Thiết bị" bị bóp còn một chữ một dòng. Đo lại bằng chính file
       trên host với bảng y hệt thì ra thẻ đúng như thiết kế ⇒ lỗi nằm ở bản cache, không
       phải ở CSS. Đổi chữ này là buộc mọi máy tải lại. -->
  <!-- Typography chung: chu Chakra Petch, tung chu so 0-9 Orbitron. -->
  <!-- Chi ha nhung chu dang vuot 600; giu nguyen cac muc 400/500/600 va font icon. -->
  <!-- Loading DÙNG CHUNG toàn site (xfShowPageLoading/xfHidePageLoading) — xem
       js/xiris_loading.js. Test đầu tiên ở Tổng quan xử lý nước thải, user chốt ổn (25/08). -->
<!-- Bang thanh THE tren dien thoai: gan class "xf-the" cho <table> la du.
     Kieu dang o css/xiris_form.css, muc "BANG THANH THE". -->
  <!-- 11/09/2026: đổi MỌI <input type="date"> sang jQuery UI datepicker dd/mm/yyyy (chuẩn của
       site). Đặt SAU jquery-ui ở trên vì tệp này cần $.fn.datepicker; nó tự chờ nếu chưa có.
       Nạp site-wide nên màn cũ đổi hết mà màn mới cứ viết input type="date" bình thường. -->
  <!-- 11/09/2026 (user: "tất cả những chỗ dùng select đều thay bằng select2 luôn"): tự bọc MỌI
       <select> chưa được màn nào tự bọc. Đặt SAU select2.min.js ở trên vì cần $.fn.select2 (tệp
       tự chờ nếu chưa có). Ô nào muốn chừa thì thêm data-no-select2 vào thẻ select. -->
  <!-- 18/09: nút SAO CHÉP LINK dùng chung (chủ dự án: "chỗ nào có danh sách sự cố thì thêm cái
       icon sao chép cho dễ copy"). Màn nào cần chỉ việc đặt data-copy-link="<url>" lên một cái
       <button>, không phải chép logic clipboard vào từng .tpl. -->
  <!-- 22/09: nút QUAY LẠI dùng chung (chủ dự án: "trang chi tiết hay trang thêm đều thêm
       một nút Quay lại nằm bên phải của trang, style như này, chế độ sáng, chế độ tối").
       Tệp này gom kiểu cho mọi nút quay lại sẵn có VÀ tự chèn nút cho màn chưa có.
       Kiểu dáng khai ở css/xiris_form.css, mục "NÚT QUAY LẠI DÙNG CHUNG".
       ⚠ Danh sách màn được chèn nằm ở hằng DS_OP trong chính tệp JS — thêm màn thì sửa ở đó. -->
  <!-- 25/09: TRINH XEM TAI LIEU dung chung (chu du an: "minh can xem tai lieu, anh ne tren
       phan mem luon, dang nhu khi bam no mo modal xong minh xem duoc tren do cac tai lieu luon"
       — va khong gui tep ra thu vien Office truc tuyen, "lam vay bi lo tai lieu").
       Bat MOI the <a> co &tep= trong href (dau nhan biet do cong tep o tang 1 de lai) nen khong
       man nao phai sua .tpl. Anh xem tai cho, PDF vao khung, tep khong ve duoc thi hien nut
       Tai ve. Kieu dang o css/xiris_form.css, muc "TRINH XEM TAI LIEU DUNG CHUNG".
       ⚠ Man nao DA co hop xem rieng thi tep JS tu chua ra — danh sach o hang CHUA trong do. -->
  <!-- 25/09: TÊN TỆP SẴN cho bản in / xuất PDF (chủ dự án: "xuất PDF sao không có tên
       file sẵn như Excel"). Nút Excel tự đặt tên, còn window.print() thì trình duyệt lấy
       document.title làm tên gợi ý — tệp này đổi tiêu đề thành tên phiếu ngay trước khi in
       rồi trả lại. Không đụng nút, không đụng màn nào. -->
  <!-- 12/09: hộp "Chụp ảnh" bằng webcam dùng chung — màn nào có ô <input type=file> ảnh thì
       gọi xirisChupAnh(oTep, {ten:…}). Bản gốc nằm trong thong_so_van_hanh_add.tpl, tách ra
       đây để Bảo trì (và sau này Nhập/Xuất hàng, Đồng hồ) khỏi chép lại ~150 dòng. -->
</head>
<body id="body">

  <!-- 11/09/2026 (user): letterhead GreenWorld cho MỌI bản in PDF (window.print) của site.
       Nội dung do modules/duan/functions.php -> duan_hdr_html() dựng theo CẤU HÌNH của dự án
       (màn op=cau_hinh_header_in), theme.php gán vào biến này. Đặt ngay đầu <body> nên áp cho
       tất cả màn mà không phải sửa từng .tpl. Bình thường ẩn, chỉ hiện khi in — CSS ở
       xiris_form.css (#xirisPdfHeader). -->
  <!-- 12/10/2026: đọc qua thẻ JSON. Viết trần "window.XIRIS_LH =  || null" thì ở module ngoài duan
       (duan_hdr_json không có) biến rỗng thành "= || null" — SyntaxError trên màn Nhân viên và các màn khác. -->
  </div>

  <div id="form_in_danh_sach"></div>
  <div id="box_xem_danh_gia" class="hidden">
    <div id="box_content_danh_gia">

    </div>
  </div>
  <div class="notification" id="notification">
    <span class="message">

    </span>
    <span class="close-btn" onclick="closeNotification()">&times;</span>
  </div>
  <div class="modal fade" id="modal_doi_pass" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true" data-backdrop="static" data-keyboard="false">
    <div class="modal-dialog">

      <div class="modal-content">
        <div class="modal-header">
          <h4 class="modal-title text-center" id="title_modal_doi_pass">
            Vui lòng đổi mật khẩu để đảm bảo tính bảo mật
          </h4>
        </div>
        <div class="modal-body">
          <p>
            <div class="alert alert-danger">
              Mật khẩu phải có ít nhất 8 ký tự, bao gồm chữ, chữ IN HOA, số và ký tự đặc biệt!
            </div>
          </p>
          <p>
            <input type="password" id="mat_khau_1" class="form-control" name="" placeholder="Nhập mật khẩu mới">
          </p>
          <p>
            <input type="password" id="mat_khau_2" class="form-control" name="" placeholder="Nhập lại mật khẩu mới">
          </p>
          <p class="text-center">
            <button class="btn btn-primary" type="button" onclick="doi_mat_khau()">Đổi mật khẩu</button>
          </p>

        </div>
      </div>

    </div>
  </div>
  <button id="hiddenPushBtn" style="display:none"></button>
<div id="print">
	<div id="hd_print">
		<h2 class="pull-left">Horus</h2>
		<p class="pull-right"><a title="Horus" href="https://aiwater2.xiris.vn/">https://aiwater2.xiris.vn</a></p>
	</div>
	<div class="clear"></div>
	<hr />
	<div id="content">
		<h1>Tuyển dụng lập trình viên front-end (HTML/CSS/JS) phát triển NukeViet</h1>
		<ul class="list-inline">
			<li>Thứ ba - 20/10/2015 21:31</li>
			<li class="hidden-print txtrequired"><em class="fa fa-print">&nbsp;</em><a title="In ra" href="javascript:;" onclick="window.print()">In ra</a></li>
			<li class="hidden-print txtrequired"><em class="fa fa-power-off">&nbsp;</em><a title="Đóng cửa sổ này" href="javascript:;" onclick="window.close()">Đóng cửa sổ này</a></li>
		</ul>
		<div class="clear"></div>
		<div id="hometext">
			Bạn đam mê nguồn mở? Bạn đang cần tìm một công việc phù hợp với thế mạnh của bạn về front-end (HTML/CSS/JS)? Hãy gia nhập VINADES.,JSC để xây dựng mã nguồn mở hàng đầu cho Việt Nam.
		</div>
				<div class="imghome">
			<img alt="Tuyển dụng" src="https://aiwater2.xiris.vn/uploads/news/tuyendung-kythuat.jpg" width="460" class="img-thumbnail" />
						<p>
				<em>Tuyển dụng</em>
			</p>
		</div>
		<div class="clear"></div>
		<div id="bodytext" class="clearfix">
			Công ty cổ phần phát triển nguồn mở Việt Nam (VINADES.,JSC) đang thu hút tuyển dụng nhân tài ở các vị trí:<ol><li><a href="https://aiwater2.xiris.vn/Tuyen-dung/Tuyen-dung-lap-trinh-vien-PHP-7.html">Lập trình viên PHP và MySQL.</a></li><li><a href="https://aiwater2.xiris.vn/Tuyen-dung/Tuyen-dung-lap-trinh-vien-front-end-HTML-CSS-JS-9.html">Lập trình viên front-end (HTML/CSS/JS).</a></li><li><a href="https://aiwater2.xiris.vn/Tuyen-dung/Tuyen-dung-chuyen-vien-do-hoa-8.html">Chuyên Viên Đồ Hoạ.</a></li></ol><br />Tại VINADES.,JSC bạn sẽ được tham gia các dự án của công ty, tham gia xây dựng và phát triển bộ nhân hệ thống NukeViet, được học hỏi và trau dồi nâng cao kiến thức và kỹ năng cá nhân. Ngoài ra, nếu bạn đam mê về nguồn mở và có mong muốn cống hiến cho quá trình phát triển nguồn mở của Việt Nam nói riêng và của thế giới nói chung, thì đây là cơ hội lớn nhất để bạn đạt được mong muốn của mình. Tham gia công tác tại công ty là bạn đã góp phần xây dựng một cộng đồng nguồn mở chuyên nghiệp cho Việt Nam để vươn xa ra thế giới.<br /><br /><span style="font-size:16px;"><strong>1. Vị trí dự tuyển:</strong></span> Lập trình viên front-end (HTML/ CSS/ JS)<br /><br /><span style="font-size:16px;"><strong>2. Mô tả công việc:</strong></span><ul><li>Cắt, làm giao diện website từ bản thiết kế (sử dụng Photoshop) trên nền hệ thống NukeViet.</li><li>Tham gia vào việc phát triển Front-End các ứng dụng nền web.</li><li>Thực hiện các công đoạn để dưa website vào hoạt động như upload dữ liệu lên host, xử lý lỗi, sự cố liên quan.</li><li>Chịu trách nhiệm về chất lượng, trải nghiệm người dùng, thẩm mỹ của sản phẩm trong khi sản phẩm hoạt động Tham mưu, tư vấn về chất lượng, thẩm mỹ, trải nghiệm người dùng về các sản phẩm.</li><li>Đảm bảo website theo các tiêu chuẩn web (W3c, XHTML, CSS 3.0, Tableless, no inline style, … ).</li><li>Đảm bảo website hiển thị đúng trên tất cả các trình duyệt.</li><li>Đảm bảo website theo chuẩn “Responsive Web Design.</li><li>Đảm bảo việc đưa sản phẩm thiết kế đến người dùng cuối cùng một cách chính xác và đẹp.</li><li>Thực hiện các công việc theo sự phân công của cấp trên.</li><li>Chịu trách nhiệm về chất lượng và tiến độ công việc.</li></ul><br /><span style="font-size:16px;"><strong>3. Yêu cầu:</strong></span><ul><li>Có kiến thức cơ bản về thiết kế website: Am hiểu các dạng layout, thành phần của một website.</li><li>Hiểu rõ và nắm chắc cách làm Theme/Template.</li><li>Sử dụng thành thạo HTML5, CSS3 &amp; Javascrip/Jquery và Xtemplate</li><li>Khả năng chuyển PSD sang NukeViet tốt.</li><li>Biết đưa website lên host, xử lý lỗi, sự cố liên quan.</li><li>Chịu trách nhiệm về chất lượng và tiến độ công việc phụ trách.</li><li>Khả năng sáng tạo, tính thẩm mỹ tốt.</li><li>Đam mê công việc về web.</li></ul><br /><em><strong>Ưu tiên các ứng viên:</strong></em><ul><li>Có kiến thức cơ bản về quản trị website NukeViệt.</li><li>Am hiểu về Responsive và có thể thiết kế giao diện, layout trên mobile (Boostrap).</li><li>Sử dụng và nắm rõ các tính năng, block thường dùng của NukeViet.</li><li>Biết sử dụng git để quản lý source code (nếu ứng viên chưa biết công ty sẽ đào tạo thêm).</li><li>Có khả năng giao tiếp với khách hàng (Trực tiếp, điện thoại, email).</li><li>Có khả năng làm việc độc lập và làm việc theo nhóm.</li><li>Có tinh thần trách nhiệm cao và chủ động trong công việc.</li><li>Có khả năng trình bày ý tưởng.</li></ul><br /><span style="font-size:16px;"><strong>4. Quyền lợi:</strong></span><ul><li>Lương thoả thuận, trả qua ATM.</li><li>Thưởng theo dự án, các ngày lễ tết.</li><li>Hưởng các chế độ khác theo quy định của công ty và pháp luật: Bảo hiểm y tế, bảo hiểm xã hội...</li></ul><br /><span style="font-size:16px;"><strong>5. Thời gian làm việc:</strong></span> Toàn thời gian cố định hoặc làm online.<br /><br /><span style="font-size:16px;"><strong>6. Hạn nộp hồ sơ:</strong></span> Không hạn chế, vui lòng kiểm tra tại <a href="https://vinades.vn/vi/news/Tuyen-dung/">https://vinades.vn/vi/news/Tuyen-dung/</a><br /><br /><span style="font-size:16px;"><strong>7. Cách thức đăng ký dự tuyển:</strong></span> Làm Hồ sơ xin việc<em><strong> (download tại đây: <strong><a href="https://vinades.vn/vi/download/Tai-lieu/Ban-khai-so-yeu-ly-lich-ky-thuat-vien/" target="_blank"><u>Mẫu lý lịch ứng viên</u></a></strong>)</strong></em> và gửi về hòm thư <a href="mailto:tuyendung@vinades.vn">tuyendung@vinades.vn</a><br /><br /><span style="font-size:16px;"><strong>8. Hồ sơ bao gồm:</strong></span><ul><li>Đơn xin việc: Tự biên soạn.</li><li>Thông tin ứng viên: Theo mẫu của VINADES.,JSC</li></ul>&nbsp;<p><strong>Chi tiết vui lòng tham khảo tại:</strong> <a href="https://vinades.vn/vi/news/Tuyen-dung/" target="_blank">https://vinades.vn/vi/news/Tuyen-dung/</a><br /><br /><strong>Mọi thắc mắc vui lòng liên hệ:</strong></p><blockquote><p><strong>Công ty cổ phần phát triển nguồn mở Việt Nam.</strong><br />Trụ sở chính: Tầng 6, tòa nhà Sông Đà, 131 Trần Phú, Văn Quán, Hà Đông, Hà Nội.</p><div>- Tel: +84-24-85872007 - Fax: +84-24-35500914<br />- Email: <a href="mailto:contact@vinades.vn">contact@vinades.vn</a> - Website: <a href="http://www.vinades.vn/">http://www.vinades.vn</a></div></blockquote>
		</div>
				<div id="author">
						<p>
				<strong>Tác giả:</strong>
				Phạm Quốc Tiến
			</p>
		</div>
	</div>
	<div id="footer" class="clearfix">
		<div id="url">
			<strong>URL của bản tin này: </strong><a href="https://aiwater2.xiris.vn/vi/news/savefile/Tuyen-dung/Tuyen-dung-lap-trinh-vien-front-end-HTML-CSS-JS-5.html" title="Tuyển dụng lập trình viên front-end (HTML/CSS/JS) phát triển NukeViet">https://aiwater2.xiris.vn/vi/news/savefile/Tuyen-dung/Tuyen-dung-lap-trinh-vien-front-end-HTML-CSS-JS-5.html</a>

		</div>
		<div class="clear"></div>
		<div class="copyright">
			&copy; Horus
		</div>
		<div id="contact">
			<a href="mailto:erp.xiris@gmail.com">erp.xiris@gmail.com</a>
		</div>
	</div>
</div>
        <div id="timeoutsess" class="chromeframe">
            Bạn đã không sử dụng Site, <a onclick="timeoutsesscancel();" href="https://aiwater2.xiris.vn/#">Bấm vào đây để duy trì trạng thái đăng nhập</a>. Thời gian chờ: <span id="secField"> 60 </span> giây
        </div>
        <div id="openidResult" class="nv-alert" style="display:none"></div>
        <div id="openidBt" data-result="" data-redirect=""></div>
    <div class="no_load">
      <div style="text-align: center;background: #dcdcdc;width: 100%;padding: 10px;">
        <span style="position: relative;font-size: 16px; font-weight: 600;">
          Vui lòng đợi trong giây lát
          <div class="loader four">
          </div>
      </span>
      <span>

      </span>
  </div>
  <div class="load_box">
    <span>
      <i class="fa fa-spinner icon_loading"></i>
  </span>
</div>
</div>
<script src="https://aiwater2.xiris.vn/assets/js/jquery/jquery.min.js"></script>
<script>
/* 12/09/2026 (user): "sao chuyển hướng lâu quá ta, không tức thì được hả".
   Chốt chặn "khách chưa đăng nhập -> sang xiris.vn" ban đầu đặt trong themes/.../users/login.tpl,
   tức nằm trong THÂN trang. Đo thật: </head> kết thúc ở byte 30.509 còn đoạn chuyển hướng nằm ở
   byte 83.819, SAU 12 tệp CSS chặn dòng (FontAwesome, bootstrap, style.css...). Script trong body
   phải đợi mọi stylesheet đang chờ tải xong mới được chạy, nên người dùng nhìn thấy nguyên trang
   đăng nhập chớp lên rồi mới nhảy.
   Đưa lên DÒNG ĐẦU của <head>, trước cả <title> và mọi <link>: trình duyệt gặp là chạy ngay trong
   lúc đọc HTML, chưa tải tệp phụ nào.

   Tệp này dùng chung cho MỌI trang -> phải tự nhận ra mình đang ở trang đăng nhập; nơi khác thì
   thoát ra ngay, tốn vài micro giây. Trang đăng nhập chỉ được phát cho KHÁCH (người đã đăng nhập
   mở /vi/users/login/ là bị lõi đá sang Tổng quan trước khi trang kịp dựng - đã đo), nên không
   cần thêm dấu hiệu nào khác.

   ⚠⚠ HAI CỬA THOÁT — ĐỪNG GỠ, không có là xiris.vn hỏng thì KHÔNG AI vào được aiwater:
     1. ?dnnb=1  -> ở lại form của aiwater (nhớ 30 phút bằng cookie, vì vòng POST đăng nhập quay
        lại trang này mà không còn tham số trên URL).
     2. sso_status= / sso_login= -> KHÔNG đẩy đi. includes/sso/src/Controller.php::legacyLoginUrl()
        đá về đúng trang này kèm &sso_status=<lý do> khi SSO hỏng hoặc bị tắt; đẩy tiếp là hai site
        đá qua đá lại vô tận. */
(function () {
    try {
        var p = window.location.pathname || '', q = window.location.search || '';
        if (!/\/users\/login\//.test(p) && !(/[?&]nv=users(?:&|$)/.test(q) && /[?&]op=login(?:&|$)/.test(q))) { return; }
        if (/[?&](?:dnnb=1|sso_status=|sso_login=)/.test(q)) {
            document.cookie = 'xiris_dnnb=1; Max-Age=1800; path=/';
            return;
        }
        if (/(?:^|;\s*)xiris_dnnb=1/.test(document.cookie)) { return; }
        /* 12/09 (user chốt): đá THẲNG sang xiris.vn, KHÔNG đi qua /sso/start. Đã thử
           /sso/start (tự bật trang đăng nhập) — user không muốn: "tự mở modal chi".
           15/09 (user): đích đổi từ TRANG CHỦ sang TRANG ĐĂNG NHẬP — "giờ mình không muốn
           nó vô trang https://xiris.vn/ nữa mà vô trang https://xiris.vn/vi/users/login/,
           logic đăng nhập y như cũ, chỉ là đổi đường dẫn chuyển hướng thôi". Trang đó dùng
           CÙNG luồng SSO với modal ở trang chủ (POST /login/ kèm sso_direct=1), nên khách
           khỏi phải tự đi tìm nút đăng nhập nữa.
           ⚠ URL này có 4 BẢN SAO — modules/duan/functions.php + 3 layout header_only*.tpl
           (theme_xiris x2, lastest_default x1). Đổi thì đổi cho đủ cả 4. */
        window.location.replace('https://xiris.vn/vi/users/login/');
    } catch (e) {}
})();
</script>
<script>
    var op_nuke='savefile'
  </script>
<script>var nv_base_siteurl="/",nv_lang_data="vi",nv_lang_interface="vi",nv_name_variable="nv",nv_fc_variable="op",nv_lang_variable="language",nv_module_name="news",nv_func_name="savefile",nv_is_user=0, nv_my_ofs=-4,nv_my_abbr="EDT",nv_cookie_prefix="cb",nv_check_pass_mstime=17938000,nv_area_admin=0,nv_safemode=0,theme_responsive=1,nv_recaptcha_ver=2,nv_recaptcha_sitekey="",nv_recaptcha_type="image",XSSsanitize=1;</script>
<script src="https://aiwater2.xiris.vn/assets/js/language/vi.js"></script>
<script src="https://aiwater2.xiris.vn/assets/js/DOMPurify/purify3.js"></script>
<script src="https://aiwater2.xiris.vn/assets/js/global.js"></script>
<script src="https://aiwater2.xiris.vn/assets/js/site.js"></script>
<script src="https://aiwater2.xiris.vn/themes/theme_xiris/js/news.js"></script>
<script src="https://aiwater2.xiris.vn/themes/theme_xiris/js/main.js?v=1789094780"></script>
<script src="https://aiwater2.xiris.vn/themes/theme_xiris/js/custom.js"></script>
<script src="https://aiwater2.xiris.vn/themes/theme_xiris/js/additional_js/moment/moment.js"></script>
<script src="https://aiwater2.xiris.vn/themes/theme_xiris/js/additional_js/moment/js/moment-with-locales.min.js"></script>
<script src="https://aiwater2.xiris.vn/themes/theme_xiris/js/additional_js/moment/locale/vi.js"></script>
<script src="https://aiwater2.xiris.vn/themes/theme_xiris/css/additional_css/datetimepicker/js/bootstrap-material-datetimepicker.js"></script>
<script>
    function myFunction() {
      var x = document.getElementById("my-Links");
      if (x.style.display === "block") {
        x.style.display = "none";
      } else {
        x.style.display = "block";
      }
    }
  </script>
<script>
    function openNav() {
      document.getElementById("mySidepanel").style.width = "250px";
    }

    function closeNav() {
      document.getElementById("mySidepanel").style.width = "0";
    }
  </script>
<script>
    function openPage(pageName, elmnt, color,mau) {

      // Hide all elements with class="tabcontent" by default */
      var i, tabcontent, tablinks;
      tabcontent = document.getElementsByClassName("tabcontent");
      for (i = 0; i < tabcontent.length; i++) {
        tabcontent[i].style.display = "none";
      }

      // Remove the background color of all tablinks/buttons
      tablinks = document.getElementsByClassName("tablink");
      for (i = 0; i < tablinks.length; i++) {
        tablinks[i].style.backgroundColor = "";
        tablinks[i].style.color="black";
      }

      // Show the specific tab content
      document.getElementById(pageName).style.display = "block";

      // Add the specific color to the button used to open the tab content
      elmnt.style.backgroundColor =color; 

      elmnt.style.color ="white"; 
    }
    // document.addEventListener("DOMContentLoaded", function() {
    // // Hide the loader when the content is fully loaded
    //   document.querySelector(".loader-wrapper").style.display = "none";
    // });
    function loadpage() {
      document.body.prepend(createElementFromHTML('<div class="loader-wrapper">' +
        '<div class="loader">' +
        '<div class="circle1"></div>' +
        '<div class="circle2"></div>' +
        '<div class="circle3"></div>' +
        '<div class="center"></div>' +
        '</div>' +
        '</div>'));

      function createElementFromHTML(htmlString) {
        const div = document.createElement('div');
        div.innerHTML = htmlString.trim();
        return div.firstChild;
      }
      //phan_mem_dang_chay();
      // hello();
      document.querySelector(".loader-wrapper").style.display = "flex";
    }
    function loadpage_tutu() {
      phan_mem_dang_chay();
      hello();
      document.querySelector(".loader-wrapper").style.display = "flex";
    }
    function unload() {
      setTimeout(function() { 
        document.querySelector(".loader-wrapper").style.display = "none";
      }, 1000);

    }

    function unload2() {
      setTimeout(function() { 
        document.querySelector(".loader-wrapper").style.display = "none";
      }, 100);
    }

    var allLinks = document.querySelectorAll(".loadpage");

    // Thêm bộ lắng nghe sự kiện khi click vào mỗi thẻ a
    allLinks.forEach(function(link) {
      link.addEventListener("click", function(event) {
        loadpage();
      });
    });

    var allLinks = document.querySelectorAll(".loadpage_tutu");

    // Thêm bộ lắng nghe sự kiện khi click vào mỗi thẻ a
    allLinks.forEach(function(link) {
      link.addEventListener("click", function(event) {
        loadpage_tutu();
      });
    });
  </script>
<script src="/themes/theme_xiris/js/fullcalender.min.js?t=1792029555"></script>
<script type="text/javascript"src="https://aiwater2.xiris.vn/assets/js/jquery-ui/jquery-ui.min.js"></script>
<script type="text/javascript" src="https://aiwater2.xiris.vn/assets/js/language/jquery.ui.datepicker-vi.js"></script>
<script type="text/javascript" src="https://aiwater2.xiris.vn/assets/js/select2/select2.min.js"></script>
<script type="text/javascript"src="https://aiwater2.xiris.vn/themes/theme_xiris/js/yearpicker.js"></script>
<script src="https://aiwater2.xiris.vn/themes/theme_xiris/js/tree.chart.js"></script>
<script src="/themes/theme_xiris/js/jquery-confirm.min.js?t=1792029555"></script>
<script src="https://unpkg.com/tributejs@5.1.3/dist/tribute.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/html2canvas/1.4.1/html2canvas.min.js"></script>
<script async defer crossorigin="anonymous" src="https://connect.facebook.net/vi_VN/sdk.js#xfbml=1&version=v18.0&appId=363469809004152&autoLogAppEvents=1" nonce="TfC8yNBk"></script>
<script src="https://aiwater2.xiris.vn/webpush/main.js"></script>
<script>
    let link_web = 'aiwater2.xiris.vn';
    var global_user_id = 0;
  </script>
<script type="text/javascript">

    function musicstart(){
      var audio = new Audio('/uploads/business/am_thanh/thong_bao.mp3');
      audio.play();
      setTimeout(function(){ 
        audio.pause();
      }, 
      5000);
    }

  </script>
<script defer src="https://aiwater2.xiris.vn/themes/theme_xiris/js/xiris_font_weight.js?v=v1dd27a73"></script>
<script src="https://aiwater2.xiris.vn/themes/theme_xiris/js/xiris_loading.js?v=v5loadingorbit"></script>
<script src="https://aiwater2.xiris.vn/themes/theme_xiris/js/xiris_bang_the.js?v=v12cotgop"></script>
<script src="https://aiwater2.xiris.vn/themes/theme_xiris/js/xiris_loc.js?v=v5"></script>
<script src="https://aiwater2.xiris.vn/themes/theme_xiris/js/xiris_len_xuong.js?v=v2"></script>
<script src="https://aiwater2.xiris.vn/themes/theme_xiris/js/xiris_tabs.js?v=v1"></script>
<script src="https://aiwater2.xiris.vn/themes/theme_xiris/js/xiris_datepicker.js?v=v1"></script>
<script src="https://aiwater2.xiris.vn/themes/theme_xiris/js/xiris_select2.js?v=v4"></script>
<script src="https://aiwater2.xiris.vn/themes/theme_xiris/js/xiris_copy.js?v=v2"></script>
<script src="https://aiwater2.xiris.vn/themes/theme_xiris/js/xiris_quaylai.js?v=v11cuatuchoi"></script>
<script src="https://aiwater2.xiris.vn/themes/theme_xiris/js/xiris_xemtep.js?v=v12gophopcu"></script>
<script src="https://aiwater2.xiris.vn/themes/theme_xiris/js/xiris_ten_in.js?v=v2uutien"></script>
<script src="https://aiwater2.xiris.vn/themes/theme_xiris/js/xiris_chup_anh.js?v=v4"></script>
<script>
    (function () { try {
      var t = localStorage.getItem('xiris_theme');
      if (t === 'dark') { document.documentElement.setAttribute('data-xtheme', 'dark'); }
    } catch (e) {} })();
  </script>
<script>window.XIRIS_LH = (function () { try { return JSON.parse(document.getElementById('xiris_lh_json').textContent || 'null'); } catch (e) { return null; } })();</script>
<script src="https://aiwater2.xiris.vn/themes/theme_xiris/js/xiris_excel_lh.js?v=v1"></script>
<script>
  /* 11/09/2026: letterhead phải nằm TRONG khối in của màn, không đứng ngoài.
     Lý do: mỗi màn có kiểu "ẩn cả trang, chỉ chừa khối của tôi" riêng
     (body{visibility:hidden} / body * / body.x > :not(#root){display:none} ...). Đứng ngoài
     thì lần nào cũng phải đấu độ đặc hiệu CSS với từng màn — thắng chỗ này thua chỗ kia (đúng lỗi
     phiếu chi tiết bảo trì không có header). Nhét vào trong khối in là hết đấu: khối in hiện thì
     header hiện theo, lại thừa hưởng luôn lề trái/phải nên canh thẳng hàng với nội dung, và vì
     nằm trong dòng chảy nên tự đẩy nội dung xuống, khỏi cần chừa lề cứng. */
  (function () {
      var head = document.getElementById('xirisPdfHeader');
      var foot = document.getElementById('xirisPdfFooter');
      if (!head && !foot) return;
      // Xếp theo thứ tự ưu tiên: khối nào khớp trước thì dùng khối đó.
      var DS_GOC = ['#ls_ct', '#bcmPrintRoot', '#tkxlnPrintRoot', '.pvv', '.bcv-wrap',
                    '.nh-wrap', '.ts-wrap', '.tkw', '.mr', '.mn-page'];
      var choCu = null, keCu = null, fChoCu = null, fKeCu = null;
      function vaoTrong() {
          if (choCu || fChoCu) return;             // đã dời rồi (Chrome bắn beforeprint 2 lần)
          var goc = null;
          for (var i = 0; i < DS_GOC.length && !goc; i++) goc = document.querySelector(DS_GOC[i]);
          if (!goc) return;                        // màn không có khối in -> thôi, khỏi chèn
          // Màn Báo cáo bảo trì có sẵn khung .bcm-lh để đặt letterhead (nay cũng lấy ảnh theo
          // cấu hình). Nếu khung đó ĐANG CÓ ẢNH thì thôi, khỏi chèn nữa kẻo chồng hai cái;
          // còn nếu trống (cấu hình đang để kiểu "Mẫu" nên không có ảnh) thì vẫn chèn bình thường.
          var sanCo = goc.querySelector('.bcm-lh img[src], .xf-lh-san-co img[src]');
          if (head && !(sanCo && sanCo.getAttribute('src'))) {
              choCu = head.parentNode;
              keCu = head.nextSibling;
              goc.insertBefore(head, goc.firstChild);
          }
          if (foot) {
              fChoCu = foot.parentNode;
              fKeCu = foot.nextSibling;
              goc.appendChild(foot);
          }
      }
      function veCho() {
          if (choCu && head) {
              choCu.insertBefore(head, keCu);
              choCu = null;
              keCu = null;
          }
          if (fChoCu && foot) {
              fChoCu.insertBefore(foot, fKeCu);
              fChoCu = null;
              fKeCu = null;
          }
      }
      window.addEventListener('beforeprint', vaoTrong);
      window.addEventListener('afterprint', veCho);
      // Safari cũ không bắn beforeprint/afterprint mà đổi trạng thái matchMedia.
      if (window.matchMedia) {
          var mq = window.matchMedia('print');
          var nghe = function (e) { e.matches ? vaoTrong() : veCho(); };
          if (mq.addEventListener) { mq.addEventListener('change', nghe); }
          else if (mq.addListener) { mq.addListener(nghe); }
      }
  })();
  </script>
<script type="module">
  // Import the functions you need from the SDKs you need
    import { initializeApp } from "https://www.gstatic.com/firebasejs/11.3.1/firebase-app.js";
    import { getAnalytics } from "https://www.gstatic.com/firebasejs/11.3.1/firebase-analytics.js";
  // TODO: Add SDKs for Firebase products that you want to use
  // https://firebase.google.com/docs/web/setup#available-libraries

  // Your web app's Firebase configuration
  // For Firebase JS SDK v7.20.0 and later, measurementId is optional
    const firebaseConfig = {
      apiKey: "AIzaSyAmpmNf8D9UnsTG8HH3oQdaSnzmufrMeRM",
      authDomain: "notification-gw.firebaseapp.com",
      projectId: "notification-gw",
      storageBucket: "notification-gw.firebasestorage.app",
      messagingSenderId: "106889627175",
      appId: "1:106889627175:web:298a59659065e43e9c3002",
      measurementId: "G-FTTYGHJLME"
    };

  // Initialize Firebase
    const app = initializeApp(firebaseConfig);
    const analytics = getAnalytics(app);
  </script>
<script type="text/javascript">

    function showNotification(noi_dung_thong_bao) {
      am_thanh_mac_dinh();
      var notification = document.getElementById('notification');
      notification.style.display = 'block';
      $('#notification .message').html(noi_dung_thong_bao);
      notification.classList.add('success');
      setTimeout(function () {
        notification.style.display = 'none';
        notification.classList.remove('success', 'error', 'warning');
      }, 7000);
    }

    function showNotification_noaudio(noi_dung_thong_bao) {
      var notification = document.getElementById('notification');
      notification.style.display = 'block';
      $('#notification .message').html(noi_dung_thong_bao);
      notification.classList.add('success');
      setTimeout(function () {
        notification.style.display = 'none';
        notification.classList.remove('success', 'error', 'warning');
      }, 7000);
    }

    function closeNotification() {
      var notification = document.getElementById('notification');
      notification.style.display = 'none';
      notification.classList.remove('success', 'error', 'warning');
    }
    // doi_pass();
    // function doi_pass(){
    //   $.ajax({
    //     type : 'POST',
    //     url: nv_base_siteurl + 'index.php?' + nv_name_variable + '=business&' + nv_fc_variable + '=main&mod=kiem_tra_doi_pass',
    //     contentType: false,
    //     processData: false,
    //     success : function(res){
    //       res2=JSON.parse(res);
    //       if(res2.status=="OK"){
    //         $('#modal_doi_pass').modal('show');

    //       }else if(res2.status=="KO"){

    //       }else{
    //         alert('Có lỗi xảy ra, vui lòng kiểm tra lại')

    //       }
    //     },
    //     error: function(xhr, ajaxOptions, thrownError) {
    //       alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
    //     }
    //   });
    // }
    function doi_mat_khau() {
      var a = $('#mat_khau_1').val();
      var b = $('#mat_khau_2').val();

      var regex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*#?&])[A-Za-z\d@$!%*#?&]{8,}$/;

      if (!regex.test(a)) {
        alert('Mật khẩu phải có ít nhất 8 ký tự, bao gồm chữ, chữ IN HOA, số và ký tự đặc biệt!');
        return;
      }

      if (a !== b) {
        alert('Mật khẩu không trùng khớp!');
        return;
      }

      $.ajax({
        type: 'POST',
        url: nv_base_siteurl + 'index.php?' + nv_name_variable + '=business&' + nv_fc_variable + '=main&mod=doi_pass',
        data: { mat_khau: a },
        success: function (res) {
          res2 = JSON.parse(res);
          if (res2.status == "OK") {
            alert('Đổi mật khẩu thành công!');
            window.location.href = 'https://x.greenworld.vn/vi/users/logout/';
          } else {
            alert('Có lỗi xảy ra, vui lòng kiểm tra lại');
          }
        },
        error: function (xhr, ajaxOptions, thrownError) {
          alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
        }
      });
    }
    // xac_thuc_ip();
    // function xac_thuc_ip(){
    //   $.ajax({
    //     type : 'POST',
    //     url: nv_base_siteurl + 'index.php?' + nv_name_variable + '=business&' + nv_fc_variable + '=main&mod=xac_thuc_ip',
    //     contentType: false,
    //     processData: false,
    //     success : function(res){
    //       res2=JSON.parse(res);
    //       if(res2.status=="OK"){
    //       }else if(res2.status=="KO"){

    //       }else{
    //         alert('Có lỗi xảy ra, vui lòng kiểm tra lại')

    //       }
    //     },
    //     error: function(xhr, ajaxOptions, thrownError) {
    //       alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
    //     }
    //   });
    // }
  </script>
<script>
  var elements = document.getElementsByClassName('comment-info');

  for (var i = 0; i < elements.length; i++) {
    var content = elements[i].innerHTML;

    // Dùng RegExp để tìm các từ bắt đầu bằng @ và bọc strong
    var newContent = content.replace(/@(\w+)/g, function(match, p1) {
      return '<strong>@' + p1 + '</strong>';
    });

    elements[i].innerHTML = newContent;
  }
</script>
<script src="https://aiwater2.xiris.vn/themes/theme_xiris/js/bootstrap.min.js"></script>
<script type="text/javascript">
  function loading(){
    var $elie = $(".icon_loading");
    rotate(0);
    function rotate(degree) {
     $elie.css({ WebkitTransform: 'rotate(' + degree + 'deg)'});
     $elie.css({ '-moz-transform': 'rotate(' + degree + 'deg)'});
     setTimeout(
      function() {
       rotate(++degree); 
   },
   10
   );
 }    
 $(".no_load").addClass("load");
 $(".no_load").removeClass("no_load");
}
function removeloading(){
   $(".load").addClass("no_load");
   $(".load").removeClass("load");

}
function go_back(){
    history.back();
}
</script>
<script type="text/javascript">
  // Hàm kích hoạt dịch
        function triggerTranslate(lang) {
            // Cập nhật giao diện nút bấm
            document.querySelectorAll('.lang-item').forEach(el => el.classList.remove('active'));
            document.getElementById(lang + '-btn').classList.add('active');

            // Tìm thẻ select của Google
            var select = document.querySelector('.goog-te-combo');
            if (select) {
                select.value = lang;
                select.dispatchEvent(new Event('change')); // Bắt buộc phải có dòng này Google mới hiểu
            }
        }

        // Cấu hình Google
        function googleTranslateElementInit() {
            new google.translate.TranslateElement({
                pageLanguage: 'vi',
                includedLanguages: 'en,vi',
                autoDisplay: false
            }, 'google_translate_element');
        }
        // Hàm dọn dẹp thanh banner cứng đầu (Chạy liên tục)
        setInterval(function() {
            var banner = document.querySelector('.goog-te-banner-frame');
            if (banner) banner.style.display = 'none';
            if (document.body.style.top !== '0px') document.body.style.top = '0px';
        }, 500);
    </script>
<script type="text/javascript" src="https://aiwater2.xiris.vn//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit"></script>
</body>
</html>