This commit is contained in:
2020-02-01 16:47:12 +07:00
commit 4c619ad6e6
16739 changed files with 3329179 additions and 0 deletions

1
web/js/boostrap-notify.min.js vendored Normal file

File diff suppressed because one or more lines are too long

446
web/js/common.js Normal file
View File

@@ -0,0 +1,446 @@
$(function () {
$('[data-toggle="tooltip"]').tooltip({
container: 'body'
});
function youtube_parser(url) {
var regExp = /^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\?))\??v?=?([^#\&\?]*).*/;
var match = url.match(regExp);
return (match && match[7].length == 11) ? match[7] : false;
}
$('iframe').each(function (i, o) {
var $o = $(o);
if ($o.prop('src').search('youtube') != -1) {
if (!$o.parent().hasClass('embed-responsive')) {
$o.addClass('embed-responsive-item');
$o.wrapAll('<div class="embed-responsive embed-responsive-16by9" />');
var vid = youtube_parser($o.prop("src"));
if (vid) {
$o.addClass('hidden-print');
$o.parent().addClass('youtube-preview youtube-preview-print').append('<img class="embed-responsive-item visible-print" src="https://img.youtube.com/vi/' + vid + '/0.jpg" onerror="this.src=\"https:\/\/img.youtube.com\/vi\/' + vid + '\/maxresdefault.jpg\""/>');
$o.parent().append('<a class="youtube-play-icon" href="' + $o.prop("src") + '"><img class="visible-print" src="/assets/images/icon_youtube_play.png"/></a>');
}
}
}
});
$.fn.modal.Constructor.prototype.enforceFocus = function () {};
// var api = common.getAPI();
// var socket = io.connect(api);
// socket.on('getNotification', function (data) {
// if (data.user_id == parseInt($("input[name='current_user_id']").val())) {
// var number = parseInt($("#number_notif_1").html()) + 1;
// $("#number_notif_1").html(number).removeClass("hidden");
// $("#number_notif_2").html(number);
// var html = `<li {if style="background: #edf2fa;">
// <a href="` + data.url + `">
// <i class="fa fa-book text-aqua"></i> ` + data.content + `
// </a>
// </li>`;
// $("#notif_lists").prepend(html);
// notification.df(`<a href="` + data.url + `" style="text-decoration: none;">` + data.content + `</a>`, 30000, data.type);
// }
// });
});
$(document).on('focusin', function (e) {
if ($(e.target).closest(".mce-window").length) {
e.stopImmediatePropagation();
}
});
/**
* Các hàm sử dụng chung
*/
var common = {};
common.csrf = $('meta[name="csrf-token"]').attr("content");
common.csrfParam = $('meta[name="csrf-param"]').attr("content");
common.getAPI = function () {
var protocol = location.protocol;
var slashes = protocol.concat("//");
var host = slashes.concat(window.location.hostname);
return host + ":8002/";
};
common.sendNotification = function (data) {
var api = common.getAPI();
$.ajax({
url: api + "notification",
type: 'POST',
data: JSON.stringify(data),
contentType: 'application/json',
success: function (data) {
}
});
};
common.mark = function (e) {
$.ajax({
url: $(e).attr("data-href"),
type: 'POST',
success: function (data) {
$("#number_notif_2").html("0");
$("#number_notif_1").html("0").addClass("hidden");
}
});
};
common.modalOpen = function (data, lg, title) {
$("#myModalContent").html(data);
$("#myModalContent").attr("style", "");
if (lg) {
$(".modal-dialog").addClass("modal-lg");
} else {
$(".modal-dialog").removeClass("modal-lg");
}
if (!title) {
$("#modalHeader").addClass("hidden");
} else {
$("#modalHeader").removeClass("hidden");
$("#myModalLabel").html(title);
}
$("#myModalFooter").addClass("hidden");
$("#myModal").modal();
};
common.modalOpenFullScreen = function (data, title) {
$("input[name='ReLoadFullScreen']").val("false");
$("#myModalFullScreenContent").html(data);
if (title == false) {
$("#modalFullScreenHeader").addClass("hidden");
} else {
$("#modalFullScreenHeader").removeClass("hidden");
$("#myModalFullScreenLabel").html(title);
}
$("#myModalFullScreen").modal();
};
common.modalBlock = function (stt) {
if (stt) {
$("#blocking").modal({
keyboard: false,
backdrop: false
});
} else {
$("#blocking").modal("hide");
}
};
common.uploadBlock = function (stt) {
if (stt) {
$("#uploadBlock").modal({
keyboard: false,
backdrop: false
});
} else {
$("#uploadBlock").modal("hide");
}
};
common.modalAlert = function (text, cls, link) {
$("#alertModalContent").html(text);
$("#alertModalDialog").removeClass("modal-lg");
$("#alertModal").modal({
backdrop: 'static',
keyboard: false
});
switch (cls) {
case "success":
$("#alertModalHeader").attr("style", "background-color:#5cb85c;color:white;");
break;
case "danger":
$("#alertModalHeader").attr("style", "background-color:#d9534f;color:white;");
break;
case "info":
$("#alertModalHeader").attr("style", "background-color:#5bc0de;color:white;");
break;
case "warning":
$("#alertModalHeader").attr("style", "background-color:#f0ad4e;color:white;");
break;
}
if (link !== "") {
$('#alertModal').on('hide.bs.modal', function () {
window.location = link;
});
}
};
common.ajaxError = function () {
common.modalAlert("Có lỗi xảy ra, có thể do đường truyền mạng, xin vui lòng thử lại!", "danger", "");
};
common.btnUpload = function (mUrl, className, extension, fileSize) {
var fData = {
UploadFile: true,
Name: className
};
fData[common.csrfParam] = common.csrf;
new afuButton({
uploadURI: mUrl,
formData: fData,
wrap: {
tagName: 'div',
classes: ''
},
fileExtension: extension,
fileSizeLimit: fileSize,
classes: 'btn btn-default file-paperclip-' + className,
fakeInputContent: '<span class=\'fa fa-paperclip\'></span>',
onUploaded: function (data) {
common.uploadBlock(false);
if (data !== 'false') {
var r = JSON.parse(data);
if (r['link'] == 2) {
alert('Định dạng tệp tin không được hỗ trợ!\n Các loại tệp tin được hỗ trợ: ' + extension);
} else {
//alert("Tệp tin đã được tải lên thành công");
$("#fileUpload" + className).attr("href", r['link']);
$("#fileUpload" + className).html(r['name'] + " ");
$("input[name='fileUploadLink" + className + "']").val(r['link']);
}
} else {
alert('Có lỗi xảy ra, tải tệp tin không thành công!');
}
}
}).addInstance('file' + className);
$(".file-paperclip-" + className).closest("div").attr("style", "display:inline-block;");
};
common.btnUploadImage = function (mUrl, className, extension, fileSize) {
var fData = {
UploadImage: true,
Name: className
};
fData[common.csrfParam] = common.csrf;
new afuButton({
uploadURI: mUrl,
formData: fData,
wrap: {
tagName: 'div',
classes: ''
},
fileExtension: extension,
fileSizeLimit: fileSize,
classes: 'btn btn-primary btn-xs',
fakeInputContent: '<span class=\'fa fa-file-image-o\'></span> Chọn hình ảnh',
onUploaded: function (data) {
common.uploadBlock(false);
alert("Hình ảnh đã được tải lên thành công");
$("#HinhMinhHoa" + className).attr("src", "data/uploads" + data);
$("input[name='HinhMinhHoaLink" + className + "']").val(data);
$("input[name='updateStatus']").val("1");
}
}).addInstance('image' + className);
};
common.dateTimePicker = function (id) {
$('#' + id).datetimepicker({
locale: 'vi',
ignoreReadonly: true,
format: 'HH:mm DD/MM/YYYY',
sideBySide: true
});
};
common.dateTimePickerDay = function (id) {
$('#' + id).datetimepicker({
locale: 'vi',
ignoreReadonly: true,
format: 'DD/MM/YYYY'
});
};
common.dateTimePickerHour = function (id) {
$('#' + id).datetimepicker({
locale: 'vi',
ignoreReadonly: true,
format: 'HH:mm'
});
};
common.checkAll = function (id, cls) {
$('#' + id).on('ifChecked', function (event) {
$('.' + cls).iCheck('check');
});
$('#' + id).on('ifUnchecked', function (event) {
$('.' + cls).iCheck('uncheck');
});
$('#' + id).on('ifChanged', function (event) {
if (!this.changed) {
this.changed = true;
$('#' + id).iCheck('check');
} else {
this.changed = false;
$('#' + id).iCheck('uncheck');
}
$('#' + id).iCheck('update');
});
};
common.getUrlParameter = function (sParam) {
var sPageURL = decodeURIComponent(window.location.search.substring(1)),
sURLVariables = sPageURL.split('&'),
sParameterName,
i;
for (i = 0; i < sURLVariables.length; i++) {
sParameterName = sURLVariables[i].split('=');
if (sParameterName[0] === sParam) {
return sParameterName[1] === undefined ? true : sParameterName[1];
}
}
};
common.error = function (id, text) {
$("#" + id).addClass("has-error").removeClass("has-success");
$("#" + id).find(".help-block").html(text).removeClass("hidden");
};
common.success = function (id) {
$("#" + id).addClass("has-success").removeClass("has-error");
$("#" + id).find(".help-block").addClass("hidden");
};
/**
* =========================
*/
/**
* Notification
*/
var notification = {
success: function (text, time) {
$.notify({
icon: "fa fa-check",
message: "<strong>" + text + "</strong>"
}, {
type: "success",
allow_dismiss: false,
showProgressbar: false,
z_index: 99999999,
placement: {
from: "bottom",
align: "left"
},
offset: 70,
delay: time,
animate: {
enter: 'animated fadeInDown',
exit: 'animated fadeOutUp'
},
});
},
danger: function (text, time) {
$.notify({
icon: "fa fa-remove",
message: "<strong>" + text + "</strong>"
}, {
type: "danger",
allow_dismiss: false,
showProgressbar: false,
z_index: 99999999,
placement: {
from: "bottom",
align: "left"
},
offset: 70,
delay: time,
animate: {
enter: 'animated fadeInDown',
exit: 'animated fadeOutUp'
},
});
},
warning: function (text, time) {
$.notify({
icon: "fa fa-question-circle",
message: "<strong>" + text + "</strong>"
}, {
type: "warning",
allow_dismiss: false,
showProgressbar: false,
z_index: 99999999,
placement: {
from: "bottom",
align: "left"
},
offset: 70,
delay: time,
animate: {
enter: 'animated fadeInDown',
exit: 'animated fadeOutUp'
},
});
},
info: function (text, time) {
$.notify({
icon: "fa fa-info-circle",
message: "<strong>" + text + "</strong>"
}, {
type: "info",
allow_dismiss: false,
showProgressbar: false,
z_index: 99999999,
placement: {
from: "bottom",
align: "right"
},
offset: 70,
delay: time,
animate: {
enter: 'animated fadeInDown',
exit: 'animated fadeOutUp'
},
});
},
df: function (text, time, type) {
$.notify({
icon: "fa fa-info-circle",
message: text
}, {
type: type,
allow_dismiss: false,
showProgressbar: false,
z_index: 99999999,
placement: {
from: "bottom",
align: "right"
},
offset: 70,
delay: time,
animate: {
enter: 'animated fadeInDown',
exit: 'animated fadeOutUp'
},
});
},
primary: function (text, time) {
$.notify({
icon: "fa fa-info-circle",
message: "<strong>" + text + "</strong>"
}, {
type: "primary",
allow_dismiss: false,
showProgressbar: false,
z_index: 99999999,
placement: {
from: "bottom",
align: "left"
},
offset: 70,
delay: time,
animate: {
enter: 'animated fadeInDown',
exit: 'animated fadeOutUp'
},
});
},
};
+function ($, document) {
//Fix scroll with modal multiple show
var stackModal = 0;
var orginBodyPad = '';
$(document).on('show.bs.modal', '.modal', function (event) {
// var zIndex = 1040 + (10 * $('.modal:visible').length);
// $(this).css('z-index', zIndex);
if (stackModal <= 0) {
orginBodyPad = document.body.style.paddingRight || '';
}
stackModal++;
setTimeout(function () {
$('.modal-backdrop').not('.modal-stack')
// .css('z-index', zIndex - 1)
.addClass('modal-stack');
}, 0);
$(this).appendTo(document.body);
});
$(document).on('hidden.bs.modal', '.modal', function (event) {
stackModal--;
if (stackModal > 0) {
$('body').addClass("modal-open");
} else {
$('body').removeClass("modal-open");
document.body.style.paddingRight = orginBodyPad;
orginBodyPad = '';
}
});
}(jQuery, document);

213
web/js/editor.js Normal file
View File

@@ -0,0 +1,213 @@
var ed_temp = false;
var editor = {
href: "index.php?r=teacher/docs#Ajax",
mUrl: "index.php?r=teacher/docs",
loadEditorMin: function (id, rows) {
rows = rows || 300;
this.removeTinyMCE(id);
tinymce.init({
selector: 'textarea#' + id,
height: rows,
theme: 'modern',
language: 'vi_VN',
branding: false,
plugins: [
'advlist autolink lists link image charmap print preview hr anchor pagebreak',
'searchreplace wordcount visualblocks visualchars code fullscreen',
'insertdatetime media nonbreaking save table contextmenu directionality',
'emoticons template textcolor colorpicker textpattern imagetools mathjax'
],
toolbar1: 'styleselect | bold underline italic | alignleft aligncenter alignright alignjustify | bullist numlist | forecolor | media image btnVideo btnFlash btnPicture | math mathjax',
setup: function (ed) {
},
image_class_list: [
{title: 'Không dùng', value: ''},
{title: 'Tự co dãn theo chiều rộng', value: 'img-responsive img-c2f'},
],
image_advtab: false,
relative_urls : false,
remove_script_host : false,
entity_encoding: 'raw',
init_instance_callback: function (ed) {
// ed.execCommand('mceImage');
}
});
},
loadEditorMin2: function (id, rows) {
rows = rows || 300;
this.removeTinyMCE(id);
tinymce.init({
selector: 'textarea#' + id,
height: rows,
theme: 'modern',
language: 'vi_VN',
branding: false,
menubar: false,
toolbar1: 'styleselect | bold underline italic | alignleft aligncenter alignright alignjustify | bullist numlist',
image_advtab: false,
image_class_list: [
{title: 'Không dùng', value: ''},
{title: 'Tự co dãn theo chiều rộng', value: 'img-responsive img-c2f'},
],
templates: [
{title: 'Test template 1', content: 'Test 1'},
{title: 'Test template 2', content: 'Test 2'}
],
relative_urls : false,
remove_script_host : false,
entity_encoding: 'raw'
});
},
loadEditorInline: function (id, callback_config) {
this.removeTinyMCE(id);
tinymce.init({
selector: '#' + id,
inline: true,
theme: 'modern',
language: 'vi_VN',
branding: false,
plugins: [
'advlist autolink lists link image charmap print preview hr anchor pagebreak',
'searchreplace wordcount visualblocks visualchars code fullscreen',
'insertdatetime media nonbreaking save table contextmenu directionality',
'emoticons template paste textcolor colorpicker textpattern imagetools',
'placeholder'
],
valid_elements: "p[style],h3,h4,h5,h6,a[href|target],strong/b,br,table,tbody,thead,tr,td,ul,ol,li,img[src|class]",
toolbar1: 'styleselect | bold underline italic | alignleft aligncenter alignright alignjustify | bullist numlist | media btnVideo btnFlash btnPicture | math',
setup: function (ed) {
if (callback_config) {
callback_config(ed);
}
},
image_advtab: false,
image_class_list: [
{title: 'Không dùng', value: ''},
{title: 'Tự co dãn theo chiều rộng', value: 'img-responsive img-c2f'},
],
relative_urls : false,
remove_script_host : false,
entity_encoding: 'raw',
// document_base_url:document_base_url,
file_picker_callback: filePicker
});
},
addPreview: function () {
var tex = $("#math-editor").val();
if (tex !== "") {
$("#math-preview").html("$" + tex + "$");
} else {
$("#math-preview").html("");
}
MathJax.Hub.Queue(["Typeset", MathJax.Hub, $("#math-preview")[0]]);
},
removeTinyMCE: function (id) {
try {
tinymce.execCommand('mceRemoveEditor', true, id);
} catch (ex) {
console.log(ex); //exception with Firefox
}
//remove editor from EditorManager
var editors = tinymce.EditorManager.editors;
for (var i = 0; i < editors.length; i++) {
var editor = editors[i];
if (editor.id == id) {
editors.splice(i, 1);
}
}
delete(editors[id]);
},
formAddVideo: function () {
global.openModal(this.htmlLoading, true, "Quản lý video");
$.ajax({
url: this.href,
type: 'POST',
data: {
formAddVideo: true
},
success: function (data) {
$("#myModalContent").html(data);
}
});
},
formAddVideo2: function (e) {
var Search = $("input[name='TimKiemVideo']").val();
$(e).button("loading");
$.ajax({
url: this.href,
type: 'POST',
data: {
formAddVideo: true,
Search: Search
},
success: function (data) {
$("#myModalContent").html(data);
$("input[name='TimKiemVideo']").val(Search);
}
});
},
addVideo: function (e) {
var HTML = "<video controls=\"controls\" width=\"80%\" height=\"300\"><source src=\"" + $(e).attr('data') + "\" type=\"video/" + $(e).attr('data-ext') + "\"/></video>";
ed_temp.insertContent(HTML);
$("#myModal").modal("hide");
},
formAddFlash: function () {
global.openModal(this.htmlLoading, true, "Quản lý bài giảng tương tác");
$.ajax({
url: this.href,
type: 'POST',
data: {
formAddFlash: true
},
success: function (data) {
$("#myModalContent").html(data);
}
});
},
formAddFlash2: function (e) {
var Search = $("input[name='TimKiemFlash']").val();
$(e).button("loading");
$.ajax({
url: this.href,
type: 'POST',
data: {
formAddFlash: true,
Search: Search
},
success: function (data) {
$("#myModalContent").html(data);
$("input[name='TimKiemFlash']").val(Search);
}
});
},
addFlash: function (e) {
var HTML = "<p><object style=\"display: block; margin-left: auto; margin-right: auto;\" data=\"" + $(e).attr("data") + "\" type=\"application/x-shockwave-flash\" width=\"80%\" height=\"430\"></object></p>";
ed_temp.insertContent(HTML);
$("#myModal").modal("hide");
}
};
$("#math-editor").on("keyup", function () {
editor.addPreview();
});
$("#math-ok").on("click", function () {
if ($("#math-editor").val() !== "") {
var tex = "$" + $("#math-editor").val() + "$";
} else {
var tex = "";
}
ed_temp.insertContent(tex);
$("#mathEditor").modal("hide");
});
$("#math-refresh").on("click", function () {
$("#math-editor").val("");
$("#math-preview").html("");
});
$(".btn-math").on("click", function () {
var code = $(this).attr("data");
var cursorPos = $('#math-editor').prop('selectionStart');
var v = $('#math-editor').val();
var textBefore = v.substring(0, cursorPos);
var textAfter = v.substring(cursorPos, v.length);
$('#math-editor').val(textBefore + code + textAfter);
editor.addPreview();
});

11
web/js/logs.js Normal file
View File

@@ -0,0 +1,11 @@
$(function () {
common.dateTimePicker("from");
common.dateTimePicker("to");
});
function search(e) {
window.location = $(e).attr("data-href") + "?from=" + $("input[name='FromTime']").val() + "&to=" + $("input[name='ToTime']").val();
}
function _export(e) {
window.location = $(e).attr("data-href") + "?from=" + $("input[name='FromTime']").val() + "&to=" + $("input[name='ToTime']").val();
}

2
web/js/md5.min.js vendored Normal file
View File

@@ -0,0 +1,2 @@
!function(n){"use strict";function t(n,t){var r=(65535&n)+(65535&t);return(n>>16)+(t>>16)+(r>>16)<<16|65535&r}function r(n,t){return n<<t|n>>>32-t}function e(n,e,o,u,c,f){return t(r(t(t(e,n),t(u,f)),c),o)}function o(n,t,r,o,u,c,f){return e(t&r|~t&o,n,t,u,c,f)}function u(n,t,r,o,u,c,f){return e(t&o|r&~o,n,t,u,c,f)}function c(n,t,r,o,u,c,f){return e(t^r^o,n,t,u,c,f)}function f(n,t,r,o,u,c,f){return e(r^(t|~o),n,t,u,c,f)}function i(n,r){n[r>>5]|=128<<r%32,n[14+(r+64>>>9<<4)]=r;var e,i,a,d,h,l=1732584193,g=-271733879,v=-1732584194,m=271733878;for(e=0;e<n.length;e+=16)i=l,a=g,d=v,h=m,g=f(g=f(g=f(g=f(g=c(g=c(g=c(g=c(g=u(g=u(g=u(g=u(g=o(g=o(g=o(g=o(g,v=o(v,m=o(m,l=o(l,g,v,m,n[e],7,-680876936),g,v,n[e+1],12,-389564586),l,g,n[e+2],17,606105819),m,l,n[e+3],22,-1044525330),v=o(v,m=o(m,l=o(l,g,v,m,n[e+4],7,-176418897),g,v,n[e+5],12,1200080426),l,g,n[e+6],17,-1473231341),m,l,n[e+7],22,-45705983),v=o(v,m=o(m,l=o(l,g,v,m,n[e+8],7,1770035416),g,v,n[e+9],12,-1958414417),l,g,n[e+10],17,-42063),m,l,n[e+11],22,-1990404162),v=o(v,m=o(m,l=o(l,g,v,m,n[e+12],7,1804603682),g,v,n[e+13],12,-40341101),l,g,n[e+14],17,-1502002290),m,l,n[e+15],22,1236535329),v=u(v,m=u(m,l=u(l,g,v,m,n[e+1],5,-165796510),g,v,n[e+6],9,-1069501632),l,g,n[e+11],14,643717713),m,l,n[e],20,-373897302),v=u(v,m=u(m,l=u(l,g,v,m,n[e+5],5,-701558691),g,v,n[e+10],9,38016083),l,g,n[e+15],14,-660478335),m,l,n[e+4],20,-405537848),v=u(v,m=u(m,l=u(l,g,v,m,n[e+9],5,568446438),g,v,n[e+14],9,-1019803690),l,g,n[e+3],14,-187363961),m,l,n[e+8],20,1163531501),v=u(v,m=u(m,l=u(l,g,v,m,n[e+13],5,-1444681467),g,v,n[e+2],9,-51403784),l,g,n[e+7],14,1735328473),m,l,n[e+12],20,-1926607734),v=c(v,m=c(m,l=c(l,g,v,m,n[e+5],4,-378558),g,v,n[e+8],11,-2022574463),l,g,n[e+11],16,1839030562),m,l,n[e+14],23,-35309556),v=c(v,m=c(m,l=c(l,g,v,m,n[e+1],4,-1530992060),g,v,n[e+4],11,1272893353),l,g,n[e+7],16,-155497632),m,l,n[e+10],23,-1094730640),v=c(v,m=c(m,l=c(l,g,v,m,n[e+13],4,681279174),g,v,n[e],11,-358537222),l,g,n[e+3],16,-722521979),m,l,n[e+6],23,76029189),v=c(v,m=c(m,l=c(l,g,v,m,n[e+9],4,-640364487),g,v,n[e+12],11,-421815835),l,g,n[e+15],16,530742520),m,l,n[e+2],23,-995338651),v=f(v,m=f(m,l=f(l,g,v,m,n[e],6,-198630844),g,v,n[e+7],10,1126891415),l,g,n[e+14],15,-1416354905),m,l,n[e+5],21,-57434055),v=f(v,m=f(m,l=f(l,g,v,m,n[e+12],6,1700485571),g,v,n[e+3],10,-1894986606),l,g,n[e+10],15,-1051523),m,l,n[e+1],21,-2054922799),v=f(v,m=f(m,l=f(l,g,v,m,n[e+8],6,1873313359),g,v,n[e+15],10,-30611744),l,g,n[e+6],15,-1560198380),m,l,n[e+13],21,1309151649),v=f(v,m=f(m,l=f(l,g,v,m,n[e+4],6,-145523070),g,v,n[e+11],10,-1120210379),l,g,n[e+2],15,718787259),m,l,n[e+9],21,-343485551),l=t(l,i),g=t(g,a),v=t(v,d),m=t(m,h);return[l,g,v,m]}function a(n){var t,r="",e=32*n.length;for(t=0;t<e;t+=8)r+=String.fromCharCode(n[t>>5]>>>t%32&255);return r}function d(n){var t,r=[];for(r[(n.length>>2)-1]=void 0,t=0;t<r.length;t+=1)r[t]=0;var e=8*n.length;for(t=0;t<e;t+=8)r[t>>5]|=(255&n.charCodeAt(t/8))<<t%32;return r}function h(n){return a(i(d(n),8*n.length))}function l(n,t){var r,e,o=d(n),u=[],c=[];for(u[15]=c[15]=void 0,o.length>16&&(o=i(o,8*n.length)),r=0;r<16;r+=1)u[r]=909522486^o[r],c[r]=1549556828^o[r];return e=i(u.concat(d(t)),512+8*t.length),a(i(c.concat(e),640))}function g(n){var t,r,e="";for(r=0;r<n.length;r+=1)t=n.charCodeAt(r),e+="0123456789abcdef".charAt(t>>>4&15)+"0123456789abcdef".charAt(15&t);return e}function v(n){return unescape(encodeURIComponent(n))}function m(n){return h(v(n))}function p(n){return g(m(n))}function s(n,t){return l(v(n),v(t))}function C(n,t){return g(s(n,t))}function A(n,t,r){return t?r?s(t,n):C(t,n):r?m(n):p(n)}"function"==typeof define&&define.amd?define(function(){return A}):"object"==typeof module&&module.exports?module.exports=A:n.md5=A}(this);
//# sourceMappingURL=md5.min.js.map

3
web/js/socket.io.min.js vendored Normal file

File diff suppressed because one or more lines are too long

344
web/js/user.js Normal file
View File

@@ -0,0 +1,344 @@
$(function () {
user.btnAvatar();
});
var user = {};
user.form = function (e) {
common.modalBlock(true);
$.ajax({
url: $(e).attr("data-href"),
type: 'POST',
success: function (data) {
common.modalBlock(false);
common.modalOpen(data.form, false, data.title);
$('#role').select2({
tags: true,
tokenSeparators: [',']
});
},
error: function (jqXHR, textStatus, errorThrown) {
common.modalBlock(false);
common.ajaxError();
}
});
};
user.save = function (e) {
var error = 0;
var Name = user.checkName();
if (!Name) {
error++;
}
var Username = user.checkUsername();
if (!Username) {
error++;
}
var Role = user.checkRole();
if (!Role) {
error++;
}
var PhoneNumber = user.checkPhone();
if (!PhoneNumber && PhoneNumber !== "") {
error++;
}
var Email = user.checkEmail();
if (!Email && Email !== "") {
error++;
}
var Quota = user.checkQuota();
if (!Quota) {
error++;
}
if (error == 0) {
common.modalBlock(true);
$.ajax({
url: $(e).attr("data-href"),
type: 'POST',
data: {
Name: Name,
Username: Username,
Role: Role,
PhoneNumber: PhoneNumber,
Email: Email,
Quota: Quota,
Password: $("input[name='Password']").val()
},
success: function (data) {
common.modalBlock(false);
if (data.stt) {
window.location.reload(true);
} else {
if (data.reason === "username") {
user.error("username", "Tên đăng nhập đã tồn tại!");
}
if (data.reason === "email") {
user.error("email", "Email đã được sử dụng!");
}
return;
}
},
error: function (jqXHR, textStatus, errorThrown) {
common.modalBlock(false);
common.ajaxError();
}
});
} else {
return;
}
};
user.saveInfo = function (e) {
var error = 0;
var Name = user.checkName();
if (!Name) {
error++;
}
var PhoneNumber = user.checkPhone();
if (!PhoneNumber && PhoneNumber !== "") {
error++;
}
var Email = user.checkEmail();
if (!Email && Email !== "") {
error++;
}
if (error == 0) {
common.modalBlock(true);
$.ajax({
url: $(e).attr("data-href"),
type: 'POST',
data: {
Name: Name,
PhoneNumber: PhoneNumber,
Email: Email
},
success: function (data) {
common.modalBlock(false);
if (data) {
$("#success").removeClass("hidden");
setTimeout(function () {
$("#success").addClass("hidden");
window.location.reload(true);
}, 2000);
} else {
alert("Email đã được sử dụng!");
}
},
error: function (jqXHR, textStatus, errorThrown) {
common.modalBlock(false);
common.ajaxError();
}
});
} else {
return;
}
};
user.error = function (id, text) {
$("#" + id).addClass("has-error").removeClass("has-success");
$("#" + id).find(".help-block").html(text).removeClass("hidden");
};
user.success = function (id) {
$("#" + id).addClass("has-success").removeClass("has-error");
$("#" + id).find(".help-block").addClass("hidden");
};
user.checkName = function () {
var Name = $("input[name='Name']").val();
Name = Name.trim();
if (Name === "") {
user.error("name", "Hãy nhập họ tên!");
return false;
}
var name = Name.split(" ");
var pattern = /^\D*$/;
if (pattern.test(Name)) {
for (var i = 0; i < name.length; i++) {
name[i] = name[i].charAt(0).toUpperCase() + name[i].slice(1).toLowerCase();
}
name = name.join(" ");
$("input[name='Name']").val(name);
user.success("name");
return name;
} else {
user.error("name", "Họ tên không hợp lệ!");
return false;
}
};
user.checkUsername = function () {
var Username = $("input[name='Username']").val();
Username = Username.trim();
if (Username === "") {
user.error("username", "Hãy chọn tên đăng nhập!");
return false;
}
Username = user.change_alias(Username);
Username = Username.split(" ");
Username = Username.join("");
$("input[name='Username']").val(Username);
user.success("username");
return Username;
};
user.checkRole = function () {
var Role = $("select[name='Role']").val();
if (Role.length == 0) {
user.error("roles", "Chưa phân quyền người dùng!");
return false;
}
user.success("roles");
return Role;
};
user.checkPhone = function () {
var PhoneNumber = $("input[name='PhoneNumber']").val();
if (PhoneNumber === "") {
return PhoneNumber;
}
var pattern = /^[0-9]{10,11}$/;
if (pattern.test(PhoneNumber)) {
user.success("phone");
return PhoneNumber;
} else {
user.error("phone", "Số điện thoại không hợp lệ");
return false;
}
};
user.checkEmail = function () {
var Email = $("input[name='Email']").val();
if (Email === "") {
return Email;
}
var pattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
if (pattern.test(Email)) {
user.success("email");
return Email;
} else {
user.error("email", "Địa chỉ email không hợp lệ");
return false;
}
};
user.checkQuota = function () {
var Quota = $("input[name='Quota']").val();
if (Quota === "") {
return Quota;
}
if (parseInt(Quota) > 0) {
user.success("quota");
return Quota;
} else {
user.error("quota", "Giới hạn dự án phải là số dương");
return false;
}
};
user.change_alias = function (alias) {
var str = alias;
str = str.toLowerCase();
str = str.replace(/à|á|ạ|ả|ã|â|ầ|ấ|ậ|ẩ|ẫ|ă|ằ|ắ|ặ|ẳ|ẵ/g, "a");
str = str.replace(/è|é|ẹ|ẻ|ẽ|ê|ề|ế|ệ|ể|ễ/g, "e");
str = str.replace(/ì|í|ị|ỉ|ĩ/g, "i");
str = str.replace(/ò|ó|ọ|ỏ|õ|ô|ồ|ố|ộ|ổ|ỗ|ơ|ờ|ớ|ợ|ở|ỡ/g, "o");
str = str.replace(/ù|ú|ụ|ủ|ũ|ư|ừ|ứ|ự|ử|ữ/g, "u");
str = str.replace(/ỳ|ý|ỵ|ỷ|ỹ/g, "y");
str = str.replace(/đ/g, "d");
str = str.replace(/!|@|%|\^|\*|\(|\)|\+|\=|\<|\>|\?|\/|,|\.|\:|\;|\'|\"|\&|\#|\[|\]|~|\$|_|`|-|{|}|\||\\/g, " ");
str = str.replace(/ + /g, " ");
str = str.trim();
return str;
};
user.password = function (e) {
var error = 0;
var OldPassword = user.checkOldPassword();
if (!OldPassword) {
error++;
}
var NewPassword = user.checkNewPassword();
if (!NewPassword) {
error++;
}
var ReNewPassword = user.checkReNewPassword();
if (!ReNewPassword) {
error++;
}
if (error == 0) {
common.modalBlock(true);
$.ajax({
url: $(e).attr("data-href"),
type: 'POST',
data: {
NewPassword: NewPassword
},
success: function (data) {
common.modalBlock(false);
$("#success").removeClass("hidden");
setTimeout(function () {
$("#success").addClass("hidden");
window.location.reload(true);
}, 2000);
},
error: function (jqXHR, textStatus, errorThrown) {
common.modalBlock(false);
common.ajaxError();
}
});
} else {
return;
}
};
user.checkOldPassword = function () {
var OldPassword = $("input[name='OldPassword']").val();
if (OldPassword === "") {
user.error("old-password", "Hãy nhập mật khẩu cũ!");
return false;
} else {
OldPassword = md5(OldPassword);
var pass = $("input[name='password']").val();
if (OldPassword === pass) {
user.success("old-password");
return true;
} else {
user.error("old-password", "Mật khẩu cũ không chính xác!");
return false;
}
}
};
user.checkNewPassword = function () {
var NewPassword = $("input[name='NewPassword']").val();
if (NewPassword === "") {
user.error("new-password", "Hãy nhập mật khẩu mới!");
return false;
} else {
user.success("new-password");
return NewPassword;
}
};
user.checkReNewPassword = function () {
var ReNewPassword = $("input[name='ReNewPassword']").val();
if (ReNewPassword === "") {
user.error("re-new-password", "Hãy nhắc lại mật khẩu mới!");
return false;
} else {
var NewPassword = $("input[name='NewPassword']").val();
if (NewPassword === ReNewPassword) {
user.success("re-new-password");
return true;
} else {
user.error("re-new-password", "Nhắc lại mật khẩu mới không đúng!");
return false;
}
}
};
user.btnAvatar = function () {
var fData = {
UploadImage: true
};
fData[common.csrfParam] = common.csrf;
new afuButton({
uploadURI: $("input[name='url_upload_avatar']").val(),
formData: fData,
wrap: {
tagName: 'div',
classes: ''
},
fileExtension: '.png,.jpg,.jpeg,.gif',
fileSizeLimit: 1,
classes: 'btn btn-default',
fakeInputContent: '<span class=\'fa fa-file-image-o\'></span> Chọn hình ảnh',
onUploaded: function (data) {
common.modalBlock(false);
window.location.reload(true);
}
}).addInstance('image');
};

62
web/js/vehicle.js Normal file
View File

@@ -0,0 +1,62 @@
$(function () {
});
function _form(e) {
common.modalBlock(true);
$.ajax({
url: $(e).attr("data-href"),
type: 'POST',
success: function (data) {
common.modalBlock(false);
common.modalOpen(data.form, false, data.title);
},
error: function (jqXHR, textStatus, errorThrown) {
common.modalBlock(false);
common.ajaxError();
}
});
}
function _save(e) {
var error = 0;
var plate = $("input[name='Plate']").val();
if (plate === "") {
common.error("plate", "Hãy nhập biển số xe!");
error++;
} else {
common.success("plate");
}
var type = $("input[name='Type']").val();
if (type === "") {
common.error("type", "Hãy nhập loại xe!");
error++;
} else {
common.success("type");
}
if (error == 0) {
common.modalBlock(true);
$.ajax({
url: $(e).attr("data-href"),
type: 'POST',
data: {
plate: plate,
type: type,
company: $("input[name='Company']").val(),
vehicleType: $("input[name='VehicleType']").val(),
driver: $("input[name='Driver']").val(),
telephone: $("input[name='Telephone']").val(),
cmt: $("input[name='CMT']").val()
},
success: function (data) {
common.modalBlock(false);
alert("Đã lưu thông tin thành công!");
window.location.reload(true);
},
error: function (jqXHR, textStatus, errorThrown) {
common.modalBlock(false);
common.ajaxError();
}
});
}
}