{"id":14,"date":"2026-07-28T23:37:06","date_gmt":"2026-07-28T23:37:06","guid":{"rendered":"https:\/\/jobstracker.nhum.in.th\/?page_id=14"},"modified":"2026-07-28T23:37:06","modified_gmt":"2026-07-28T23:37:06","slug":"team","status":"publish","type":"page","link":"https:\/\/jobstracker.nhum.in.th\/?page_id=14","title":{"rendered":"Team"},"content":{"rendered":"\n\n\n<!DOCTYPE html>\n<html>\n<head>\n  <base target=\"_top\">\n  <?!= include('Styles'); ?>\n<\/head>\n<body>\n  <?!= include('Nav'); ?>\n\n  <div class=\"container\">\n    <div class=\"card\">\n      <h2 id=\"teamFormTitle\">\u2795 \u0e40\u0e1e\u0e34\u0e48\u0e21\u0e17\u0e35\u0e21\u0e07\u0e32\u0e19<\/h2>\n      <form id=\"teamForm\">\n        <input type=\"hidden\" id=\"member_id\" value=\"\">\n        <label>\u0e0a\u0e37\u0e48\u0e2d-\u0e19\u0e32\u0e21\u0e2a\u0e01\u0e38\u0e25<\/label>\n        <input type=\"text\" id=\"name\" required>\n\n        <label>\u0e15\u0e33\u0e41\u0e2b\u0e19\u0e48\u0e07 \/ \u0e41\u0e1c\u0e19\u0e01<\/label>\n        <input type=\"text\" id=\"role\">\n\n        <label>\u0e40\u0e1a\u0e2d\u0e23\u0e4c\u0e42\u0e17\u0e23\u0e2a\u0e33\u0e23\u0e2d\u0e07<\/label>\n        <input type=\"text\" id=\"phone\">\n\n        <label>LINE User ID (\u0e40\u0e27\u0e49\u0e19\u0e27\u0e48\u0e32\u0e07\u0e44\u0e14\u0e49 \u0e16\u0e49\u0e32\u0e43\u0e2b\u0e49\u0e23\u0e30\u0e1a\u0e1a auto-register \u0e15\u0e2d\u0e19\u0e17\u0e31\u0e01\u0e41\u0e0a\u0e17\u0e40\u0e02\u0e49\u0e32 OA)<\/label>\n        <input type=\"text\" id=\"line_user_id\" placeholder=\"\u0e40\u0e0a\u0e48\u0e19 U8189cf6745fc0d...\">\n\n        <label><input type=\"checkbox\" id=\"active\" checked> \u0e22\u0e31\u0e07\u0e17\u0e33\u0e07\u0e32\u0e19\u0e2d\u0e22\u0e39\u0e48<\/label>\n\n        <div>\n          <button type=\"submit\" id=\"teamSubmitBtn\">\u0e1a\u0e31\u0e19\u0e17\u0e36\u0e01<\/button>\n          <button type=\"button\" class=\"secondary\" id=\"teamCancelBtn\" style=\"display:none;\" onclick=\"resetTeamForm()\">\u0e22\u0e01\u0e40\u0e25\u0e34\u0e01\u0e41\u0e01\u0e49\u0e44\u0e02<\/button>\n        <\/div>\n        <div id=\"teamFormMsg\"><\/div>\n      <\/form>\n    <\/div>\n\n    <div class=\"card\">\n      <div class=\"toolbar\">\n        <h2 style=\"margin:0;\">\ud83d\udc65 \u0e17\u0e35\u0e21\u0e07\u0e32\u0e19\u0e17\u0e31\u0e49\u0e07\u0e2b\u0e21\u0e14<\/h2>\n        <button class=\"secondary\" onclick=\"loadTeam()\">\ud83d\udd04 \u0e23\u0e35\u0e40\u0e1f\u0e23\u0e0a<\/button>\n      <\/div>\n      <div id=\"teamLoading\" class=\"loading\">\u0e01\u0e33\u0e25\u0e31\u0e07\u0e42\u0e2b\u0e25\u0e14&#8230;<\/div>\n      <div class=\"table-scroll\">\n        <table id=\"teamTable\" style=\"display:none;\">\n          <thead>\n            <tr><th>\u0e23\u0e2b\u0e31\u0e2a<\/th><th>\u0e0a\u0e37\u0e48\u0e2d<\/th><th>\u0e15\u0e33\u0e41\u0e2b\u0e19\u0e48\u0e07<\/th><th>\u0e40\u0e1a\u0e2d\u0e23\u0e4c<\/th><th>LINE<\/th><th>\u0e2a\u0e16\u0e32\u0e19\u0e30<\/th><th><\/th><\/tr>\n          <\/thead>\n          <tbody id=\"teamBody\"><\/tbody>\n        <\/table>\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <script>\n    var allTeamData = [];\n\n    function loadTeam() {\n      document.getElementById('teamLoading').style.display = 'block';\n      document.getElementById('teamTable').style.display = 'none';\n      google.script.run.withSuccessHandler(function (team) {\n        allTeamData = team;\n        renderTeam();\n        document.getElementById('teamLoading').style.display = 'none';\n        document.getElementById('teamTable').style.display = 'table';\n      }).getAllTeamList();\n    }\n\n    function renderTeam() {\n      var body = document.getElementById('teamBody');\n      body.innerHTML = allTeamData.map(function (m) {\n        return '<tr>' +\n          '<td>' + m.member_id + '<\/td>' +\n          '<td>' + m.name + '<\/td>' +\n          '<td>' + (m.role || '-') + '<\/td>' +\n          '<td>' + (m.phone || '-') + '<\/td>' +\n          '<td>' + (m.line_user_id ? '\u2705 \u0e40\u0e0a\u0e37\u0e48\u0e2d\u0e21\u0e41\u0e25\u0e49\u0e27' : '\u23f3 \u0e23\u0e2d\u0e17\u0e31\u0e01\u0e41\u0e0a\u0e17') + '<\/td>' +\n          '<td><span class=\"badge ' + (m.active ? 'badge-done' : 'badge-overdue') + '\">' + (m.active ? 'Active' : 'Inactive') + '<\/span><\/td>' +\n          '<td><button class=\"secondary\" onclick=\"editTeam('' + m.member_id + '')\">\u0e41\u0e01\u0e49\u0e44\u0e02<\/button><\/td>' +\n          '<\/tr>';\n      }).join('');\n    }\n\n    function editTeam(memberId) {\n      var m = allTeamData.find(function (x) { return x.member_id === memberId; });\n      if (!m) return;\n      document.getElementById('teamFormTitle').innerText = '\u270f\ufe0f \u0e41\u0e01\u0e49\u0e44\u0e02: ' + m.name;\n      document.getElementById('member_id').value = m.member_id;\n      document.getElementById('name').value = m.name;\n      document.getElementById('role').value = m.role || '';\n      document.getElementById('phone').value = m.phone || '';\n      document.getElementById('line_user_id').value = m.line_user_id || '';\n      document.getElementById('active').checked = !!m.active;\n      document.getElementById('teamSubmitBtn').innerText = '\u0e1a\u0e31\u0e19\u0e17\u0e36\u0e01\u0e01\u0e32\u0e23\u0e41\u0e01\u0e49\u0e44\u0e02';\n      document.getElementById('teamCancelBtn').style.display = 'inline-block';\n      window.scrollTo(0, 0);\n    }\n\n    function resetTeamForm() {\n      document.getElementById('teamForm').reset();\n      document.getElementById('member_id').value = '';\n      document.getElementById('teamFormTitle').innerText = '\u2795 \u0e40\u0e1e\u0e34\u0e48\u0e21\u0e17\u0e35\u0e21\u0e07\u0e32\u0e19';\n      document.getElementById('teamSubmitBtn').innerText = '\u0e1a\u0e31\u0e19\u0e17\u0e36\u0e01';\n      document.getElementById('teamCancelBtn').style.display = 'none';\n    }\n\n    document.getElementById('teamForm').addEventListener('submit', function (e) {\n      e.preventDefault();\n      var memberId = document.getElementById('member_id').value;\n      var form = {\n        name: document.getElementById('name').value,\n        role: document.getElementById('role').value,\n        phone: document.getElementById('phone').value,\n        line_user_id: document.getElementById('line_user_id').value,\n        active: document.getElementById('active').checked,\n      };\n      var msgBox = document.getElementById('teamFormMsg');\n      msgBox.innerHTML = '';\n\n      var handler = function (res) {\n        if (res.success) {\n          msgBox.innerHTML = '<div class=\"msg msg-success\">\u0e1a\u0e31\u0e19\u0e17\u0e36\u0e01\u0e2a\u0e33\u0e40\u0e23\u0e47\u0e08 \u2705<\/div>';\n          resetTeamForm();\n          loadTeam();\n        } else {\n          msgBox.innerHTML = '<div class=\"msg msg-error\">\u0e1c\u0e34\u0e14\u0e1e\u0e25\u0e32\u0e14: ' + (res.message || '') + '<\/div>';\n        }\n      };\n\n      var failHandler = function (err) {\n        msgBox.innerHTML = '<div class=\"msg msg-error\">\u0e1c\u0e34\u0e14\u0e1e\u0e25\u0e32\u0e14: ' + err.message + '<\/div>';\n      };\n\n      if (memberId) {\n        google.script.run.withSuccessHandler(handler).withFailureHandler(failHandler).updateTeamMember(memberId, form);\n      } else {\n        google.script.run.withSuccessHandler(handler).withFailureHandler(failHandler).createTeamMember(form);\n      }\n    });\n\n    loadTeam();\n  <\/script>\n<\/body>\n<\/html>\n\n\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-14","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/jobstracker.nhum.in.th\/index.php?rest_route=\/wp\/v2\/pages\/14","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jobstracker.nhum.in.th\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/jobstracker.nhum.in.th\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/jobstracker.nhum.in.th\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jobstracker.nhum.in.th\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=14"}],"version-history":[{"count":2,"href":"https:\/\/jobstracker.nhum.in.th\/index.php?rest_route=\/wp\/v2\/pages\/14\/revisions"}],"predecessor-version":[{"id":16,"href":"https:\/\/jobstracker.nhum.in.th\/index.php?rest_route=\/wp\/v2\/pages\/14\/revisions\/16"}],"wp:attachment":[{"href":"https:\/\/jobstracker.nhum.in.th\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=14"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}