<div id="studentWorkPage">
<!-- =========================================================
ADMIN CHẤM BÀI / STUDENT WORK v18.5.1F
CORE:
student-work.js @ v18.5.1
KIẾN TRÚC:
---------------------------------------------------------
- Chấm điểm / nhận xét
- Xóa bài
- Quà GVCN
- Linh thú
- Phân trang
- Ưu tiên bài
- Đồng bộ
- ADMIN
- Reward Core Canonical Assets
- Tài sản / Linh Thạch dùng StudentRewardSystem chung
MODULE MÔ TẢ:
---------------------------------------------------------
1. Lấy Mô tả bài tập trực tiếp từ:
NopBaiLuyenTap
Form Responses 1
gid = 1837470623
2. Cấu trúc:
A = Dấu thời gian
B = Họ và tên
C = Mã học viên
D = Tổ
E = Khóa
F = Tải bài tập lên
G = Mô tả bài tập
3. Ghép mô tả với bài theo:
- Google Drive File ID
- URL bài
- Mã học viên + thời gian dự phòng
4. Hiển thị mô tả ngay dưới tên học viên
5. Tìm kiếm theo:
- Họ và tên
- Mã học viên
- Mô tả bài tập
6. Icon bút:
String.fromCodePoint(0x270E)
========================================================= -->
<!-- =========================================================
CSS v18.5.1
========================================================= -->
<!-- student-work.css v18.5.1: nay nằm trong student-work/core-v31.kho.js -->
<!-- =========================================================
CSS MODULE MÔ TẢ
========================================================= -->
<style>
/* =========================================================
MÔ TẢ BÀI TẬP
========================================================= */
.tp18-work-description{
display:flex;
align-items:flex-start;
gap:6px;
width:fit-content;
max-width:100%;
box-sizing:border-box;
margin:5px 0 9px;
padding:5px 9px;
border:1px solid #eadfd3;
border-radius:8px;
background:#f8f3ed;
color:#765344;
font-size:12px;
font-weight:600;
line-height:1.45;
overflow-wrap:anywhere;
}
/* =========================================================
ICON
========================================================= */
.tp18-work-description-icon{
flex:0 0 auto;
display:inline-flex;
align-items:center;
justify-content:center;
min-width:14px;
color:#a16e45;
font-size:13px;
line-height:1.35;
}
/* =========================================================
TEXT
========================================================= */
.tp18-work-description-text{
min-width:0;
color:#765344;
white-space:normal;
overflow-wrap:anywhere;
}
/* =========================================================
MOBILE
========================================================= */
@media (max-width:600px){
.tp18-work-description{
gap:4px;
margin-top:4px;
margin-bottom:7px;
padding:4px 7px;
border-radius:7px;
font-size:11px;
line-height:1.4;
}
.tp18-work-description-icon{
min-width:12px;
font-size:12px;
}
}
</style>
<!-- =========================================================
GIAO DIỆN CHÍNH
========================================================= -->
<div
class="tp18-wrap locked"
id="tp18-wrap"
>
<!-- =====================================================
HEADER
====================================================== -->
<div class="tp18-header">
<h2 id="tp18-title">
Tác phẩm học viên
</h2>
<p id="tp18-subtitle">
Tác phẩm · Điểm số · Nhận xét · Linh Thú
</p>
</div>
<!-- =====================================================
ADMIN NOTE
====================================================== -->
<div
class="tp18-admin-note"
id="tp18-admin-note"
></div>
<!-- =====================================================
STATUS
====================================================== -->
<div
class="tp18-status"
id="tp18-status"
></div>
<!-- =====================================================
TOAST
====================================================== -->
<div
class="tp18-toast"
id="tp18-toast"
></div>
<!-- =====================================================
NỘP BÀI
====================================================== -->
<div
class="tp18-submit"
id="tp18-submit"
>
<a
href="https://docs.google.com/forms/d/e/1FAIpQLScfsWRNbv1h3XdJq1K_llPnkmmWOll480qRB5e8aWgvJj5eUw/viewform"
target="_blank"
rel="noopener noreferrer"
>
📝 Nộp bài tập
</a>
</div>
<!-- =====================================================
TÌM KIẾM
====================================================== -->
<div
class="tp18-admin-search"
id="tp18-admin-search"
>
<div class="tp18-search-box">
<div
class="tp18-search-icon"
id="tp18-search-icon"
></div>
<input
autocomplete="off"
class="tp18-search-input"
id="tp18-search-input"
placeholder="Tìm theo tên, mã học viên hoặc mô tả bài tập..."
spellcheck="false"
type="search"
/>
<button
class="tp18-search-clear"
id="tp18-search-clear"
type="button"
>
Xóa
</button>
</div>
<div
class="tp18-search-info"
id="tp18-search-info"
></div>
</div>
<!-- =====================================================
STUDENT BAR
====================================================== -->
<div
class="tp18-student-bar"
id="tp18-student-bar"
>
<strong
id="tp18-student-title"
></strong>
<button
class="tp18-grade"
id="tp18-back"
type="button"
>
Quay lại
</button>
</div>
<!-- =====================================================
PHÂN TRANG TRÊN
====================================================== -->
<div
class="tp18-pages"
id="tp18-pages-top"
></div>
<!-- =====================================================
LOADING
====================================================== -->
<div
class="tp18-loading"
id="tp18-loading"
>
Đang tải dữ liệu...
</div>
<!-- =====================================================
ERROR
====================================================== -->
<div
class="tp18-error"
id="tp18-error"
></div>
<!-- =====================================================
EMPTY
====================================================== -->
<div
class="tp18-empty"
id="tp18-empty"
>
Chưa có tác phẩm.
</div>
<!-- =====================================================
GRID
====================================================== -->
<div
class="tp18-grid"
id="tp18-grid"
></div>
<!-- =====================================================
PHÂN TRANG DƯỚI
====================================================== -->
<div
class="tp18-pages"
id="tp18-pages-bottom"
></div>
</div>
<!-- =========================================================
IFRAME FORM
========================================================= -->
<iframe
id="tp18-gift-frame"
name="tp18-gift-frame"
style="display:none;width:0;height:0;border:0;"
></iframe>
<!-- =========================================================
STUDENT WORK v18.5.1F LOADER
========================================================= -->
<!-- Từ 11/11/2026: student-work.css v18.5.1, student-work.js (a6ad656) và mã khởi động của trang này nằm chung trong kho jsthanhphong.blogspot.com, file student-work/core-v31.kho.js (thay cho GitHub + jsdelivr). Không xuống dòng bên trong thẻ script. -->
<script>(function(w,d){var P='student-work/core-v31.kho.js',C='kho_f_student_work_core_v31_kho_js',R=w.__kho=w.__kho||{};if(R[P])return;R[P]=1;var ran=0,cur='',D=null,ok=0,q=[];function dec(h){var p=new DOMParser().parseFromString(h,'text/html').querySelector('pre');if(!p)return '';p.querySelectorAll('br').forEach(function(b){b.replaceWith('\n')});var t=p.textContent;if(/kho-b64/.test(p.className))t=new TextDecoder().decode(Uint8Array.from(atob(t.replace(/\s+/g,'')),function(x){return x.charCodeAt(0)}));return t}function run(s){if(ran)return;ran=1;try{w.performance.mark('kho-run:'+P)}catch(e){}try{(0,eval)(s+'\n//# sourceURL=kho/'+P)}catch(e){console.error('[KHO] '+P,e)}}function go(){if(ok)return;ok=1;q.forEach(function(f){f()})}function old(){try{for(var i=localStorage.length-1;i>=0;i--){var k=localStorage.key(i);if(k.indexOf('kho:')===0)localStorage.removeItem(k)}}catch(e){}}w[C]=function(x){var f=function(){var e=((x.feed||{}).entry||[])[0];if(!e)return;var id=String(e.id.$t).split('.post-')[1];if(cur===id)return;var s=dec(e.content.$t);if(!s)return;try{if(D)D.transaction('f','readwrite').objectStore('f').put({id:id,code:s},P)}catch(z){}if(!ran)old();run(s)};if(ok)f();else q.push(f)};try{var o=w.indexedDB.open('kho',1);o.onupgradeneeded=function(){o.result.createObjectStore('f')};o.onerror=go;o.onsuccess=function(){D=o.result;try{var g=D.transaction('f').objectStore('f').get(P);g.onerror=go;g.onsuccess=function(){var v=g.result;if(v){if(typeof v.code==='string'){cur=v.id;run(v.code)}}go()}}catch(e){go()}}}catch(e){go()}setTimeout(go,500)})(window,document)</script><script async src="https://jsthanhphong.blogspot.com/feeds/posts/default/-/f-student-work-core-v31-kho-js?alt=json-in-script&max-results=1&orderby=published&callback=kho_f_student_work_core_v31_kho_js"></script><script>setTimeout(function(){if(!window.TP18_V1851F_STARTED){var e=document.getElementById('tp18-error');if(e){e.style.display='block';e.textContent='Không thể tải trang chấm bài. Hãy tải lại trang.';}}},30000);</script>
</div>
Nhận xét
Đăng nhận xét