<!DOCTYPE html>
<html lang="vi" xmlns="http://www.w3.org/1999/xhtml" prefix="og: http://ogp.me/ns#">
<head>
<title>NukeViet 4.0 có gì mới?</title>
<meta name="description" content="NukeViet 4.0 có gì mới? - Savefile - Tin Tức - https&#x3A;&#x002F;&#x002F;aiwater2.xiris.vn&#x002F;vi&#x002F;news&#x002F;savefile&#x002F;San-pham&#x002F;nukeviet-4-0-co-gi-moi-13.html">
<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="NukeViet 4.0 có gì mới?">
<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;San-pham&#x002F;nukeviet-4-0-co-gi-moi-13.html">
<meta property="og:site_name" content="Horus">
<meta property="og:url" content="https://aiwater2.xiris.vn/vi/news/savefile/San-pham/nukeviet-4-0-co-gi-moi-13.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/San-pham/nukeviet-4-0-co-gi-moi-13.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>NukeViet 4.0 có gì mới?</h1>
		<ul class="list-inline">
			<li>Thứ ba - 19/01/2016 04:07</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">
			NukeViet 4 là phiên bản NukeViet được cộng đồng đánh giá cao, hứa hẹn nhiều điểm vượt trội về công nghệ đến thời điểm hiện tại. NukeViet 4 thay đổi gần như hoàn toàn từ nhân hệ thống đến chức năng, giao diện người dùng. Vậy, có gì mới trong phiên bản này?
		</div>
				<div class="imghome">
			<img alt="NukeViet 4.0 có gì mới?" src="https://aiwater2.xiris.vn/uploads/news/chuc-mung-nukeviet-thong-tu-20-bo-tttt.jpg" width="460" class="img-thumbnail" />
		</div>
		<div class="clear"></div>
		<div id="bodytext" class="clearfix">
			<p dir="ltr">Trải qua hơn 10 năm phát triển, từ một mã nguồn chỉ mang tính cá nhân, NukeViet đã phát triển thành công theo hướng cộng đồng. Năm 2010, NukeViet 3 ra đời đánh dấu một mốc lớn trong quá trình đi lên của NukeViet, phát triển theo hướng chuyên nghiệp với sự hậu thuẫn của Công ty cổ phần phát triển nguồn mở Việt Nam (VINADES.,JSC). NukeViet 3 đã và được sử dụng rộng rãi trong cộng đồng, từ các cổng thông tin tổ chức, hệ thống giáo dục, cho đến các website cá nhân, thương mại, mang lại các trải nghiệm vượt trội của mã nguồn thương hiệu Việt so với các mã nguồn nổi tiếng khác trên thế giới.<br  /><br  />Năm 2016, NukeViet 4 ra đời được xem là một cuộc cách mạng lớn trong chuỗi sự kiện phát triển NukeViet, cũng như xu thế công nghệ hiện tại. Hệ thống gần như được đổi mới hoàn toàn từ nhân hệ thống đến giao diện, nâng cao đáng kể hiệu suất và trải nghiệm người dùng.<br  /><br  /><span style="line-height: 1.6;"><strong>Dưới đây là một số thay đổi của NukeViet 4.</strong></span><br  /><strong><span style="line-height: 1.6;">Các thay đổi từ nhân hệ thống:</span></strong></p><ul>	<li dir="ltr">	<p dir="ltr"><strong>Các công nghệ mới được áp dụng.</strong></p>	<ul>		<li dir="ltr">		<p dir="ltr">Sử dụng composer để quản lý các thư viện PHP được cài vào hệ thống.</p>		</li>		<li dir="ltr">		<p dir="ltr">Từng bước áp dụng &nbsp;các tiêu chuẩn viết code PHP theo khuyến nghị của <a href="http://www.php-fig.org/psr/">http://www.php-fig.org/psr/</a></p>		</li>		<li dir="ltr">		<p dir="ltr">Sử dụng PDO để thay cho extension MySQL.</p>		</li>	</ul>	</li></ul><ul>	<li dir="ltr">	<p dir="ltr"><strong>Tăng cường khả năng bảo mật</strong></p>	<ul>		<li dir="ltr">		<p dir="ltr">Sau khi các chuyên giả bảo mật của HP gửi đánh giá, chúng tôi đã tối ưu NukeViet 4.0 để hệ thống an toàn hơn.</p>		</li>		<li dir="ltr">		<p dir="ltr">Mã hóa các mật khẩu lưu trữ trong hệ thống: Các mật khẩu như FTP, SMTP,... đã được mã hóa, bảo mật thông tin người dùng.</p>		</li>	</ul>	</li></ul><ul>	<li dir="ltr">	<p dir="ltr"><strong>Tối ưu SEO:</strong></p>	<ul>		<li dir="ltr">		<p dir="ltr">SEO được xem là một trong những ưu tiên hàng đầu được phát triển trong phiên bản này. NukeViet 4 tập trung tối ưu hóa SEO Onpage mạnh mẽ. Các công cụ hỗ trợ SEO được tập hợp lại qua module “Công cụ SEO”. Các chức năng được thêm mới:</p>		<ul>			<li dir="ltr">			<p dir="ltr">Loại bỏ tên module khỏi URL khi không dùng đa ngôn ngữ</p>			</li>			<li dir="ltr">			<p dir="ltr">Cho phép đổi đường dẫn module</p>			</li>			<li dir="ltr">			<p dir="ltr">Thêm chức năng xác thực Google+ (Bản quyền tác giả)</p>			</li>			<li dir="ltr">			<p dir="ltr">Thêm chức năng ping đến các công cụ tìm kiếm: Submit url mới đến google để việc hiển thị bài viết mới lên kết quả tìm kiếm nhanh chóng hơn.</p>			</li>			<li dir="ltr">			<p dir="ltr">Hỗ trợ Meta OG của facebook</p>			</li>			<li dir="ltr">			<p dir="ltr">Hỗ trợ chèn Meta GEO qua Cấu hình Meta-Tags</p>			</li>		</ul>		</li>		<li dir="ltr">		<p dir="ltr">Cùng với đó, các module cũng được tối ưu hóa bằng các form hỗ trợ khai báo tiêu đề, mô tả (description), từ khóa (keywods) cho từng khu vực, từng trang. &nbsp;</p>		</li>		<li dir="ltr">		<p dir="ltr">Với sự hỗ trợ tối đa này, người quản trị (admin) có thể tùy biến lại website theo phong cách SEO riêng biệt.</p>		</li>	</ul>	</li>	<li dir="ltr">	<p dir="ltr"><strong>Thay đổi giao diện, sử dụng giao diện tuỳ biến</strong></p>	<ul>		<li dir="ltr">		<p dir="ltr">Giao diện trong NukeViet 4 được làm mới, tương thích với nhiều màn hình hơn.</p>		</li>		<li dir="ltr">		<p dir="ltr">Sử dụng thư viện bootstrap để việc phát triển giao diện thống nhất và dễ dàng hơn.</p>		</li>	</ul>	</li>	<li dir="ltr">	<p dir="ltr"><strong>Hệ thống nhận thông báo:&nbsp;</strong><span style="line-height: 1.6;">Có thể gọi đây là một tiện ích nhỏ, song nó rất hữu dụng để admin tương tác với hệ thống một cách nhanh chóng. Admin có thể nhận thông báo từ hệ thống (hoặc từ module) khi có sự kiện nào đó.</span></p>	</li></ul><p dir="ltr" style="margin-left: 40px;"><strong>Ví dụ:</strong> Khi có khách gửi liên hệ (qua module contact) đến thì hệ thống xuất hiện biểu tượng thông báo “Có liên hệ mới” ở góc phải, Admin sẽ nhận được ngay lập tức thông báo khi người dùng đang ở Admin control panel (ACP).</p><ul>	<li dir="ltr">	<p dir="ltr"><strong>Thay đổi cơ chế quản lý block:</strong></p>	<ul>		<li dir="ltr">		<p dir="ltr">Nhận thấy việc hiển thị block ở lightbox trong NukeViet 3 dẫn đến một số bất tiện trong quá trình quản lý, NukeViet 4 đã thay thế cách hiển thị này ở dạng cửa sổ popup. Dễ nhận thấy sự thay đổi này khi admin thêm (hoặc sửa) một block nào đó.</p>		</li>		<li dir="ltr">		<p dir="ltr">“Cấu hình hiển thị block trên các thiết bị” cũng được đưa vào phần cấu hình block, admin có thể tùy chọn cho phép block hiển thị trên các thiết bị nào (tất cả thiết bị, thiết bị di động, máy tính bảng, thiết bị khác).<span style="line-height: 1.6;">&nbsp;</span></p>		</li>	</ul>	</li></ul><ul>	<li dir="ltr">	<p dir="ltr"><strong>Thêm ngôn ngữ tiếng Pháp:</strong> website cài đặt mới có sẵn 3 ngôn ngữ mặc định là Việt, Anh và Pháp.</p>	</li></ul><p dir="ltr"><strong>Các thay đổi của module:</strong></p><ul>	<li dir="ltr">	<p dir="ltr"><strong>Module menu:</strong></p>	<ul>		<li dir="ltr">		<p dir="ltr">Phương án quản lý menu được thay đổi hướng tới việc quản lý menu nhanh chóng, tiện lợi nhất cho admin. Admin có thể nạp nhanh menu theo các tùy chọn mà hệ thống cung cấp.</p>		</li>		<li dir="ltr">		<p dir="ltr">Mẫu menu cũng được thay đổi, đa dạng và hiển thị tốt với các giao diện hiện đại.</p>		</li>	</ul>	</li>	<li dir="ltr">	<p dir="ltr"><strong>Module contact (Liên hệ):</strong></p>	<ul>		<li dir="ltr">		<p dir="ltr">Bổ sung các trường thông tin về bộ phận (Điện thoại, fax, email, các trường liên hệ khác,...).</p>		</li>		<li dir="ltr">		<p dir="ltr">Admin có thể trả lời khách nhiều lần, hệ thống lưu lại lịch sử trao đổi đó.</p>		</li>	</ul>	</li>	<li dir="ltr">	<p dir="ltr"><strong>Module users (Tài khoản):</strong></p>	<ul>		<li dir="ltr">		<p dir="ltr">Thay thế OpenID bằng thư viện OAuth - hỗ trợ tích hợp đăng nhập qua tài khoản mạng xã hội</p>		</li>		<li dir="ltr">		<p dir="ltr">Cho phép đăng nhập 1 lần tài khoản người dùng NukeViet với Alfresco, Zimbra, Moodle, Koha</p>		</li>		<li dir="ltr">		<p dir="ltr">Thêm chức năng tùy biến trường dữ liệu thành viên</p>		</li>		<li dir="ltr">		<p dir="ltr">Thêm chức năng phân quyền sử dụng module users</p>		</li>		<li dir="ltr">		<p dir="ltr">Thêm cấu hình: Số ký tự username, độ phức tạp mật khẩu, tạo mật khảu ngẫu nhiên,....</p>		</li>		<li dir="ltr">		<p dir="ltr">Cho phép sử dụng tên truy cập, hoặc email để đăng nhập</p>		</li>	</ul>	</li>	<li dir="ltr">	<p dir="ltr"><strong>Module about:</strong></p>	<ul>		<li dir="ltr">		<p dir="ltr">Module about ở NukeViet 3 được đổi tên thành module page</p>		</li>		<li dir="ltr">		<p dir="ltr">Thêm các cấu hình hỗ trợ SEO: Ảnh minh họa, chú thích ảnh minh họa, mô tả, từ khóa cho bài viết, hiển thị các công cụ tương tác với các mạng xã hội.</p>		</li>		<li dir="ltr">		<p dir="ltr">Thêm RSS</p>		</li>		<li dir="ltr">		<p dir="ltr">Cấu hình phương án hiển thị các bài viết trên trang chính</p>		</li>	</ul>	</li>	<li dir="ltr">	<p dir="ltr"><strong>Module news (Tin tức):</strong></p>	<ul>		<li dir="ltr">		<p dir="ltr">Thêm phân quyền cho người quản lý module, đến từng chủ đề</p>		</li>		<li dir="ltr">		<p dir="ltr">Thay đổi phương án lọc từ khóa bài viết, lọc từ khóa theo các từ khóa đã có trong tags thay vì đọc từ từ điển.</p>		</li>		<li dir="ltr">		<p dir="ltr">Bổ sung các trạng thái bài viết</p>		</li>		<li dir="ltr">		<p dir="ltr">Thêm cấu hình mặc định hiển thị ảnh minh họa trên trang xem chi tiết bài viết</p>		</li>		<li dir="ltr">		<p dir="ltr">Thêm các công cụ tương tác với mạng xã &nbsp;hội.</p>		</li>	</ul>	</li></ul><p dir="ltr"><strong>Quản lý Bình luận</strong></p><ul>	<li dir="ltr">	<p dir="ltr">Các bình luận của các module sẽ được tích hợp quản lý tập trung để cấu hình.</p>	</li>	<li dir="ltr">Khi xây dựng mới module, Chỉ cần nhúng 1 đoạn mã vào. Tránh phải việc copy mã code gây khó khăn cho bảo trì.</li></ul>
		</div>
				<div id="author">
						<p>
				<strong>Tác giả:</strong>
				VINADES
			</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/San-pham/nukeviet-4-0-co-gi-moi-13.html" title="NukeViet 4.0 có gì mới?">https://aiwater2.xiris.vn/vi/news/savefile/San-pham/nukeviet-4-0-co-gi-moi-13.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>