update_mobile

This commit is contained in:
annv
2023-03-31 13:33:09 +07:00
parent 43b61d3b7f
commit af83a74832
52 changed files with 19040 additions and 0 deletions

View File

@@ -0,0 +1,285 @@
// LAZY LOADING
lazy_load_group.push(
{
id: 'js-article-home',
target: '#js-article-home',
loadFn: function () {
getTopAricleList();
},
},
{
id: 'js-article-small-top',
target: '#js-article-small-top',
loadFn: function () {
articleTopMainSmall();
},
},
{
id: 'js-video-featured-',
target: '#js-video-featured-',
loadFn: function () {
getFeaturedVideo();
},
},
{
id: 'js-new-article',
target: '#js-new-article',
loadFn: function () {
getNewArticleHome();
},
},
{
id: 'js-product-hot-article',
target: '#js-product-hot-article',
loadFn: function () {
productHot();
},
},
{
id: 'js-article-small-home',
target: '#js-article-small-home',
loadFn: function () {
getBottomAricleList();
},
},
{
id: 'js-article-middle-right',
target: '#js-article-middle-right',
loadFn: function () {
articleCatRight();
},
},
)
// SWIPER ARTICLE TOP
function swiperArticle() {
new Swiper(".swiper-article", {
slidesPerView: 1,
spaceBetween: 10,
centeredSlides: true,
loop: true,
speed: 1000,
autoplay: {
delay: 2500,
disableOnInteraction: false,
pauseOnMouseEnter: "true",
},
pagination: {
el: ".swiper-pagination",
clickable: true,
},
navigation: {
nextEl: ".swiper-button-next",
prevEl: ".swiper-button-prev",
},
});
}
swiperArticle();
// GET ARTICLE TOP NEAR SWIPER
function getTopAricleList() {
var params = {
action_type: 'list',
type: 'article',
featured: 1,
show: 1
}
var target = "#js-article-home";
Hura.Ajax.get("article", params).then(function (data) {
var html = Hura.Template.parse(articleMainTop, data.list.splice(0, 3));
Hura.Template.render(target, html);
});
}
// GET ARTICLE TOP NEAR SWIPER
function getBottomAricleList() {
var params = {
action_type: 'list',
type: 'article',
featured: 1,
show: 8,
}
var target = "#js-article-small-home";
Hura.Ajax.get("article", params).then(function (data) {
var html = Hura.Template.parse(articleMainBottom, data.list.splice(0,3));
Hura.Template.render(target, html);
});
}
// GET ARTICLE COL LEFT
function articleTopMainSmall() {
var params = {
action_type: 'list',
type: 'article',
featured: 1,
show: 18
}
var target = "#js-article-small-top";
Hura.Ajax.get("article", params).then(function (data) {
var html = Hura.Template.parse(articleMainSmall, data.list.splice(0, 3));
Hura.Template.render(target, html);
});
}
// GET FEATURED VIDEO
function getFeaturedVideo() {
var params = {
action_type: "featured",
type: "article",
show: 10,
};
var smallTarget = "#js-video-featured-";
Hura.Ajax.get("article", params).then(function (data) {
var html = Hura.Template.parse(featureVideo, data.splice(0, 3));
Hura.Template.render(smallTarget, html);
});
}
// TIN MỚI NHẤT
function getNewArticleHome() {
var params = {
action_type: "featured",
type: "article",
show: 18,
};
var target = "#js-new-article";
Hura.Ajax.get("article", params).then(function (data) {
var html = Hura.Template.parse(newArticle, data.splice(0, 3));
Hura.Template.render(target, html);
});
}
// TIN TUYỂN DỤNG
function articleCatRight() {
var params = {
action_type: 'list',
type: 'article',
catId: 5,
};
var target = "#js-article-middle-right";
Hura.Ajax.get("article", params).then(function (data) {
//console.log(data)
var html = Hura.Template.parse(articleMiddleRight, data.list);
Hura.Template.render(target, html);
});
}
// GET PRODUCT NEWEST
function productHot() {
var params = {
action_type: "product-list",
hotType: "saleoff",
sort: "order",
};
var target = "#js-product-hot-article";
Hura.Ajax.get("product", params).then(function (data) {
//console.log(data.list);
var html = Hura.Template.parse(productHotArticle, data.list.splice(0, 5));
Hura.Template.render(target, html);
});
}
function run_anchor() {
var all = document.getElementById("js-find_toc").getElementsByTagName("*");
var nodes = [];
for(var i = all.length; i--; nodes.unshift(all[i]));
var result = document.createElement("ol");
buildRec(nodes, result, 2);
$("<div class='archor-text-group' id='js-toc_container'><div class='toc_title d-flex align-items-center justify-content-between gap-8'><b class='text-18 font-weight-700 d-flex align-items-center text-fint-toc'><img src='/static/assets/default/images/art-detial.png'><span>Nội dung chính</span></b></div><div id='js-outp'>" + result.outerHTML + "</div></div>").insertAfter('#js-first-paragraph');
$("#js-outp a").each(function(){
if($(this).text().trim()!=''){
var anchor_name = convertToSlug($(this).text());
$(this).attr("onclick", `scrollRec('${anchor_name}')`);
}
});
setTimeout(function(){
$("#js-toggle").click(function(){
$(this).parents("#js-toc_container").find("#js-outp").toggle();
});
}, 500)
}
function scrollRec(id) {
document.getElementById(id).scrollIntoView({behavior:'smooth'});
}
function buildRec(nodes, elm, lv) {
var node;
// console.log(elm);
// filter
do {
node = nodes.shift();
} while(node && !(/^h[123]$/i.test(node.tagName)));
// process the next node
if(node) {
var ul, li, cnt;
var curLv = parseInt(node.tagName.substring(1));
//console.log(curLv);
var stt = 0;
if(curLv == lv) { // same level append an il
cnt = 0;
} else if(curLv < lv && 1<2) { // walk up then append il
cnt = 0;
do {
elm = elm.parentNode.parentNode;
cnt--;
} while(cnt > (curLv - lv));
} else if(curLv > lv) { // create children then append il
cnt = 0;
do {
li = elm.lastChild;
if(li == null)
li = elm.appendChild(document.createElement("li"));
elm = li.appendChild(document.createElement("ol"));
cnt++;
} while(cnt < (curLv - lv) && 1<2);
}
li = elm.appendChild(document.createElement("li"));
// replace the next line with archor tags or whatever you want
li.innerHTML = '<a href="javascript:;">'+ node.innerText +'</a>';
// recursive call
buildRec(nodes, elm, lv + cnt);
}
}
function convertToSlug(Text){
let newText = Text;
return newText
.toLowerCase()
.replace(/à|á|ạ|ả|ã|â|ầ|ấ|ậ|ẩ|ẫ|ă|ằ|ắ|ặ|ẳ|ẵ/g, "a")
.replace(/è|é|ẹ|ẻ|ẽ|ê|ề|ế|ệ|ể|ễ/g, "e")
.replace(/ì|í|ị|ỉ|ĩ/g, "i")
.replace(/ò|ó|ọ|ỏ|õ|ô|ồ|ố|ộ|ổ|ỗ|ơ|ờ|ớ|ợ|ở|ỡ/g, "o")
.replace(/ù|ú|ụ|ủ|ũ|ư|ừ|ứ|ự|ử|ữ/g, "u")
.replace(/ỳ|ý|ỵ|ỷ|ỹ/g, "y")
.replace(/đ/g, "d")
.replace(/\u0300|\u0301|\u0303|\u0309|\u0323/g, "")
.replace(/\u02C6|\u0306|\u031B/g, "")
.replace(/[^\w ]+/g,'')
.replace(/ +/g,'-')
;
}
run_anchor();
$("#js-find_toc h2, #js-find_toc h3").each(function(){
if($(this).text().trim()!=''){
var anchor_name = convertToSlug($(this).text());
$(this).attr("id",anchor_name);
$(this).css("scroll-margin-top","80px");
}
});

View File

@@ -0,0 +1,645 @@
//Kiểm tra cú pháp Email
function validateEmail(Email) {
var regaxEmail =
/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
if (regaxEmail.test(Email)) {
return true;
} else {
return false;
}
}
function check_field(){
var number_regex1 = /^[0]\d{9}$/i;
var number_regex2 = /^[0]\d{10}$/i;
var error = "";
var check_name = document.getElementById('buyer_name').value;
if(check_name.length < 4) error += "- Tên quá ngắn\n";
else if(check_name.indexOf('<script') > -1) {
error += "- Họ tên chứa các ký tự không hợp lệ, bạn vui lòng kiểm tra lại\n";
}
var check_email = document.getElementById('buyer_email').value;
if(check_email.length < 4) {
error += "- Bạn chưa nhập email\n";
}
if(check_email.length > 4){
if(validateEmail(check_email)==false) error += "- Email không hợp lệ\n";
}
var check_add = document.getElementById('buyer_address').value;
if(check_add.length < 5) error += "- Địa chỉ quá ngắn\n";
else if(check_add.indexOf('<script') > -1) {
error += "- Địa chỉ chứa các ký tự không hợp lệ, bạn vui lòng kiểm tra lại\n";
}
var check_tel = document.getElementById('buyer_tel').value;
if(check_tel.length < 4) error += "- Bạn chưa nhập SĐT\n";
else{
if(number_regex1.test(check_tel) == false && number_regex2.test(check_tel) == false) error += "- Số điện thoại chưa chính xác\n";
}
var check_note = document.getElementById('buyer_note').value;
if(check_note.indexOf('<script') > -1) {
error += "- Ghi chú chứa các ký tự không hợp lệ, bạn vui lòng kiểm tra lại\n";
}
var check_province = document.getElementById('buyer_province').value;
if(check_province==0) error += "- Bạn chưa chọn Tỉnh/Thành phố\n";
else if(check_province.indexOf('<script') > -1) {
error += "- Tỉnh/Thành phố chứa các ký tự không hợp lệ, bạn vui lòng kiểm tra lại\n";
}
var check_district = document.getElementById('js-district-holder').value;
if(check_district==0) error += "- Bạn chưa chọn Quận/Huyện\n";
else if(check_district.indexOf('<script') > -1) {
error += "- Quận/Huyện phố chứa các ký tự không hợp lệ, bạn vui lòng kiểm tra lại\n";
}
if(error != "") {
alert(error); return false;
}
if (check_district > 0 && check_add.length > 5) {
var district = $('#js-district-holder option:selected').text();
$('#buyer_address').val(check_add +', '+ district)
}
$(".js-send-cart").css("pointer-events","none");
$(".js-send-cart").html("ĐANG XỬ LÝ...");
return true;
}
// check input validation section
function check_valid_input(pattern, target) {
// check valid value for input in cart page
$(target).on("input", function () {
var stringValue = $(target).val();
var status = pattern.test(stringValue);
if (status == false) {
$(this).css("outline-color", "rgb(194 29 29)"); //red
var targetName = $(this).prev().html().replace("*", "");
this.setCustomValidity(targetName + " quá ngắn/chưa đúng");
this.reportValidity();
} else {
this.setCustomValidity("");
this.reportValidity();
$(this).css("outline-color", "rgb(45 182 99)"); //green
}
});
return;
}
//for mail
function check_valid_input_executer() {
// add check func for each input here and call this func to check all input
//for mail
check_valid_input(
/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,
"#buyer_email"
);
//for name
check_valid_input(/^[a-zA-Z ]{4,20}$/, "#buyer_name");
//for phone number
check_valid_input(/(84|0[3|5|7|8|9])+([0-9]{8})\b/, "#buyer_tel");
//for address
check_valid_input(/.{10}/, "#buyer_address");
}
// end check input validation section
//Get province selection ( lay quan huyen )
function getProvince(province_id) {
var params = {
action_type: 'district-list',
province: province_id
};
var target = '#js-district-holder';
Hura.Ajax.get("province", params).then(function (data) {
//console.log(data);
// productTpl is in template: javascript/tpl
var html = Hura.Template.parse(provinceTpl, data);
Hura.Template.render(target, '<select name="user_info[district]" id="ship_to_district"><option value="0">Quận/Huyện</option>' + html +'</select>');
})
}
$(".js-bank-money").click(function(){
$("#show-info-bank").addClass("hide");
});
$(".js-bank-online").click(function(){
$("#show-info-bank").removeClass("hide");
});
var TOTAL_CART_VALUE_NODE = ".js-total-cart-price";
function formatCurrency(a) {
var b = parseFloat(a)
.toFixed(2)
.replace(/(\d)(?=(\d{3})+\.)/g, "$1.")
.toString();
var len = b.length;
b = b.substring(0, len - 3);
return b;
}
function strToNumber(str) {
str += "";
while (str.indexOf(".") > 0) {
str = str.replace(".", "");
}
var result = parseFloat(str);
return isNaN(result) ? 0 : result;
}
function tinhSoLuongSanPham() {
var total_item = 0;
$(".js-buy-quantity").each(function () {
total_item += parseInt($(this).val());
});
$("#js-total-quantity").html(total_item + " sản phẩm");
}
function checkTotalShippingFee(){
var province = $("#id-province").val();
var district = $("#id-distric").val();
var cart_total_before_fee_discount = $("#js-total-before-fee-discount").val();
if(province==0 || district == 0){
return;
}
var params = {
action : "shipping",
action_type: "get-shipping-and-cod",
order_value : cart_total_before_fee_discount,
province : province,
district : district
}
Hura.Ajax.post('shipping',params).then(function(data){
//console.log(data)
$('#js_price_ship').val(data.ship)
calculateCartTotalPrice()
})
}
//tinh tong gia don hang
function calculateCartTotalPrice() {
var dom_target = ".js-total-before-fee-cart-price";
var total_cart_price = 0;
$(".item-cart-price").each(function () {
total_cart_price += Hura.Util.strToNumber($(this).html());
});
//log for other reference
$("#js-total-before-fee-discount").val(total_cart_price);
//giam gia khac: voucher, membership, loyalty point conversion
var total_discount = 0;
total_discount += Number($("#js-discount-voucher").val());
total_discount += parseInt($("#js-discount-membership").val());
var voucher_value = parseInt($("#js-discount-voucher").val());
//phi khac: shipping, COD...
var total_other_fee = 0;
total_other_fee += parseInt($("#js-fee-shipping").val());
total_other_fee += parseInt($("#js-fee-cod").val());
//console.log(total_discount);
var priceFreeship = parseInt($('#js_price_freeship').val());
if($('#js_price_ship').val() == "nomal"){
$("#js-inner-ship").html(`
<div class="cart-customer-total d-flex align-items-center justify-content-between">
<div>
<span class="text">Phí vận chuyển: </span>
</div>
<p class="cart-customer-total-price">Chưa tính</p>
</div>
`);
$(dom_target).html(formatCurrency(total_cart_price)+' đ');
$(TOTAL_CART_VALUE_NODE).html(formatCurrency(total_cart_price - total_discount )+' đ');
}else{
var priceShip = parseInt($('#js_price_ship').val());
if(total_cart_price >= priceFreeship || priceShip == 0){
//console.log(total_cart_price);
//console.log(priceFreeship)
$("#js-inner-ship").html(`
<div class="cart-customer-total d-flex align-items-center justify-content-between">
<div>
<span class="text">Phí vận chuyển: </span>
</div>
<p class="cart-customer-total-price">Freeship</p>
</div>
`);
$(dom_target).html(formatCurrency(total_cart_price)+' đ');
$(TOTAL_CART_VALUE_NODE).html(formatCurrency(total_cart_price - total_discount )+' đ');
}else{
var minusPriceShip = priceFreeship - total_cart_price;
//console.log(total_cart_price);
//console.log(priceFreeship)
$("#js-inner-ship").html(`
<div class="cart-customer-total d-flex align-items-center justify-content-between">
<div>
<span class="text">Phí vận chuyển: </span>
</div>
<p class="cart-customer-total-price">${formatCurrency(priceShip) + ' đ'}</p>
</div>
<div class="text-ship d-flex justify-content-between">
<div class="text-ship-left">
Mua thêm <span class="text-red-b" style="color:yellow;font-size:14px;">${formatCurrency(minusPriceShip)} đ</span> để được <span class="text-red-b" style="color:yellow;font-size:14px;"> Freeship</span>
</div>
<div class="text-ship-right">
<a href="/">Mua thêm</a>
</div>
</div>
`);
//console.log(total_discount)
$(dom_target).html(formatCurrency(total_cart_price)+' đ');
$(TOTAL_CART_VALUE_NODE).html(formatCurrency(total_cart_price - total_discount + priceShip )+' đ');
}
}
}
//thay doi tong gia cua 1 san pham
function changeItemTotalPrice() {
var $row = $(this).closest(".js-item-row");
var item_type = $row.data("item_type");
var price = parseInt($row.find(".js-buy-price").val());
var quantity = parseInt($row.find(".js-buy-quantity").val());
var total_price = price * quantity;
//loai bo so luong vo ly
if (quantity < 1) {
$row.find(".js-buy-quantity").val(1);
total_price = 0;
}
$row.find(".item-cart-price").html(formatCurrency(total_price)+' đ');
calculateCartTotalPrice();
//console.log("updating cart = " + item_type);
//save to cart
switch (item_type) {
case "product":
Hura.Cart.Product.update($row.data("item_id"), $row.data("variant_id"), {quantity: quantity,});
break;
case "deal":
Hura.Cart.Deal.update($row.data("item_id"), { quantity: quantity });
break;
case "combo":
Hura.Cart.Combo.update($row.data("item_id"), { quantity: quantity });
break;
}
//
}
//nghe thay doi so luong sp
function listenQuantityChange() {
var $track_change = $(".js-quantity-change");
//thay doi so luong sp mua, neu nhap so luong
$track_change.on("change", function (e) {
var quantity_stock = $(this).attr("data-stock");
var $row = $(this).closest(".js-item-row");
var current_quantity = $(this).val();
if($(this).val() < 1) $(this).val(1);
if(current_quantity > quantity_stock) {
alert("Bạn được mua tối đa "+ quantity_stock + " sản phẩm này");
$row.find(".js-buy-quantity").val(quantity_stock);
changeItemTotalPrice.call(this);
tinhSoLuongSanPham.call(this);
return ;
}
changeItemTotalPrice.call(this);
tinhSoLuongSanPham.call(this);
});
//thay doi so luong sp theo - hoac +
$track_change.on("click", function (e) {
if (e.target.nodeName === "INPUT") return;
var quantity_change = parseInt(this.getAttribute("data-value"));
var $row = $(this).closest(".cart-item-info");
var current_quantity = parseInt($row.find(".js-buy-quantity").val());
var quantity_stock = parseInt($row.find(".js-buy-quantity").attr("data-stock"));
//loai bo so luong vo ly
if (current_quantity + quantity_change < 1) {
$row.find(".js-buy-quantity").val(1);
return;
}
if(current_quantity + quantity_change > quantity_stock) {
alert("Bạn được mua tối đa "+ quantity_stock + " sản phẩm này");
$row.find(".js-buy-quantity").val(quantity_stock);
changeItemTotalPrice.call(this);
tinhSoLuongSanPham.call(this);
return ;
}
$row.find(".js-buy-quantity").val(current_quantity + quantity_change);
//then update
changeItemTotalPrice.call(this);
tinhSoLuongSanPham.call(this);
});
}
function deleteCart(){
let product_ids = [];
$(".js-delete-item").each(function(){
var $row = $(this).closest(".js-item-row");
var item_id = $row.data("item_id");
var variant_id = $row.data("variant_id");
product_ids.push({item_id: item_id, variant_id: variant_id})
$row.remove();
});
deleteAllCart(product_ids);
}
async function deleteAllCart(product_ids){
for(let i = 0; i < product_ids.length; i++) {
let item_id = product_ids[i].item_id;
let variant_id = product_ids[i].variant_id;
await Hura.Cart.Product.remove(item_id, variant_id);
}
setTimeout(function(){
if($(".js-item-row").length==0){ location.reload();}
},500);
}
function downloadCartImage() {
var seconds = new Date().getTime() / 1000;
var print_url = "{{ global.domain }}/print/user.php?view=cart&f="+parseInt(seconds)+"&uid="+Hura.User.getUserId();
window.location = "https://screenshot.hurasoft.com/screenshot.php?url=" + encodeURIComponent(print_url);
}
//nghe xoa san pham
function listenDeleteCartItem() {
$(".item-cart-icon").on("click", function () {
var $row = $(this).closest(".cart-item-info");
var item_type = $row.data("item_type");
var item_id = $row.data("item_id");
calculateCartTotalPrice();
//console.log("deleting item from cart = " + item_type);
var deleteStatus;
//save to cart
switch (item_type) {
case "product":
deleteStatus = Hura.Cart.Product.remove(
item_id,
$row.data("variant_id")
);
location.reload();
break;
case "deal":
deleteStatus = Hura.Cart.Deal.remove(item_id);
location.reload();
break;
case "combo":
deleteStatus = Hura.Cart.Combo.remove(item_id);
location.reload();
break;
}
if (deleteStatus) {
deleteStatus.then(function () {
$row.remove();
tinhSoLuongSanPham();
});
}
});
}
// Voucher
function debounce(func, wait, immediate) {
var timeout;
return function() {
var context = this, args = arguments;
var later = function() {
timeout = null;
if (!immediate) func.apply(context, args);
};
var callNow = immediate && !timeout;
clearTimeout(timeout);
timeout = setTimeout(later, wait);
if (callNow) func.apply(context, args);
};
};
function voucher_input_change() {
$('#js_voucher_input').change();
}
function listenVoucherCode(dom_node) {
var cart_total_before_fee_discount = $("#js-total-before-fee-discount").val();
var $message_holder = $("#js-voucher-message");
var check_deal = 0
$(".js-item-row").each(function(){
var check = $(this).attr("data-check-deal")
if (check == 1) {
check_deal = 1;
}
})
$(dom_node).change(debounce(function(){
if (check_deal == 1) {
$message_holder.html('<span class="red">Mã voucher không được áp dụng. Vui lòng xóa sản phẩm DEAL trong giỏ hàng</span>');
} else{
var voucher_code = this.value.trim();
//update field to send when submit
$("#js_coupon_code").val(voucher_code);
$("#js-discount-voucher").val(0);
$("#price-discount").html('');
$message_holder.html('');
//xu ly hien thi
if(voucher_code.length > 2) {
var params = {
action_type: 'check',
code : voucher_code ,
order_value : cart_total_before_fee_discount,
product_ids : ''
}
Hura.Ajax.post('coupon', params).then(function (data) {
//console.log(data);
var voucher_info = data;
if(voucher_info.status == 'error') {
//bao loi
$message_holder.html(voucher_info.message);
return ;
}
$message_holder.html("Bạn đang sử dụng mã coupon/voucher: <b style='color: #f00;font-size: 16px'>" + voucher_info.coupon_info.code + "</b>");
$message_holder.show();
//xu ly khac
switch (voucher_info.coupon_info.type) {
case "cash": //giam tru tien
$("#js-discount-voucher").val(Hura.Util.strToNumber(voucher_info.coupon_info.cash_discount));
$("#price-discount").html(formatCurrency(voucher_info.coupon_info.cash_discount));
break;
case "priceoff"://giam gia %
//var total_price_in_cart = $('#js-total-before-fee-discount').val();
var total_price_in_cart = {% if global.module.name == 'combo_set' %}0{% else %}{{ page.cart_summary.total_value }}{% endif%};
var after_discount = Math.ceil( total_price_in_cart * voucher_info.coupon_info.content / 100);
$("#js-discount-voucher").val(Hura.Util.strToNumber(after_discount));
$("#price-discount").html(formatCurrency(voucher_info.total_cash_discount));
break;
case "pro":
//todo:
break;
case "other":
//todo:
break;
}
calculateCartTotalPrice();
})
}else{
$("#js-discount-voucher").val(0);
$message_holder.html('');
//recalculate total
calculateCartTotalPrice();
}
}
},100));
}
function getVoucherList(holder) {
var params = {
action_type: 'get-active-list',
limit: 50
}
Hura.Ajax.post('coupon', params).then(function (response) {
//console.log(response);
buildListVoucher(response, holder);
$(".js-voucher-active").click(function(){
$(".js-voucher-active").removeClass('current-voucher');
$(this).addClass('current-voucher');
});
})
}
function buildListVoucher(response, holder) {
var html = '';
var current_time = (new Date()).getTime()/1000;
if (response.total > 0) {
Object.keys(response).forEach(function(key, keyIndex) {
var data = response[key];
Object.keys(data).forEach(function(item, itemIndex) {
var status = data[item].can_use_with_cart.status;
var code = data[item].code
var title = data[item].title;
var id_coupon = data[item].id;
var to_time = data[item].to_time;
var time_left = to_time - current_time;
var check_product = data[item].can_use_with_cart.status;
if (time_left > 0 && check_product == 'yes') {
html+=`<div class="voucher-item active-voucher js-voucher-active" onclick="voucherSelected('`+code+`')">`;
} else{
html+='<div class="voucher-item">';
}
html+= '<div class="code"> Nhập <b class="d-block text-18">'+code+'</b> </div>';
html+= '<div class="text"> <p>'+ title +'</p><i class="circle"></i></div> </div>';
})
})
} else{
html+= `
<div class="no-voucher text-center">
<i class="no-voucher-img lazy" style="background-image:url(/static/assets/default/images/cart-ticket.png)"></i>
<p class="text-20 font-600 m-0"> Chưa có mã voucher nào ! </p>
</div>
`;
}
$(holder).html(html);
}
function voucherSelected(voucher_coder) {
$("#js_voucher_input_pop").val(voucher_coder);
$('#js-voucher-popupmessage').html("");
}
function voucherActive() {
$("#js_voucher_input").val("");
$("#js_voucher_input").change();
var newCode = $("#js_voucher_input_pop").val();
$("#js_voucher_input").val(newCode);
$("#js_voucher_input").change();
close_voucher();
}
function open_voucher() {
$("#js-popup-voucher").show();
$("body").addClass("overflow-hidden");
$(".cart-voucher-popup").addClass("active")
}
function close_voucher() {
$("#js-popup-voucher").hide();
$("body").removeClass("overflow-hidden");
$(".js-voucher-active").removeClass('current-voucher');
$("#js_voucher_input_pop").val("");
$(".cart-voucher-popup").removeClass("active")
}

View File

@@ -0,0 +1,165 @@
// CHECK FORM RESIGTER
function check_field_registor() {
var error = "";
var email = document.getElementById("email").value;
if (ValidateEmail(email)) error += ValidateEmail(email);
var password = document.getElementById("password").value;
if (password.length < 6) error += "- Mật khẩu quá yếu\n";
var full_name = document.getElementById("full_name").value;
if (full_name.length < 2) error += "- Mời bạn nhập đúng tên\n";
var mobile = document.getElementById("tel").value;
if (mobile.length < 9) error += "- Mời bạn nhập đúng số điện thoại\n";
var address = document.getElementById("address").value;
if (address.length < 6) error += "- Mời bạn nhập địa chỉ\n";
var pass = $("#password").val();
var pass1 = $("#password1").val();
if (pass1 != pass) {
error += "- Mật khẩu không trùng khớp. Xin vui lòng nhập lại!";
}
if (error != "") {
alert(error);
return false;
} else {
var registerParams = {
action_type: "register",
info: {
email: email,
name: full_name,
tel: mobile,
mobile: mobile,
birthday: "",
password: password,
address: address,
},
};
Hura.Ajax.post("customer", registerParams).then(function (data) {
//console.log(data);
if (data.status == "error" && data.message == "Email exist") {
alert("Email đã được đăng ký \n Vui lòng nhập lại! ");
} else {
alert("Bạn đã đăng ký thành công! Chuyển tiếp sang Đăng nhập.");
location.href = "/dang-nhap";
}
});
}
}
// CHECK FORM LOGIN
function check_login() {
var error = "";
var email = document.getElementById("email").value;
if (ValidateEmail(email)) error += ValidateEmail(email);
var password = document.getElementById("password").value;
if (password.length == 0)
error += "- Bạn cần nhập mật khẩu để đăng nhập \n";
if (error != "") {
alert(error);
return false;
} else {
Hura.User.login(email, password).then(function (data) {
//console.log(data);
if (data.status == "error") {
alert(data.message);
} else {
alert("Đăng nhập thành công!");
location.href = "/taikhoan";
}
});
}
}
// CHECK VALIDATION EMAIL
function ValidateEmail(emailValue) {
var mailformat = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/;
if (emailValue.length < 6) return "- Mời bạn nhập email!\n";
else if (!emailValue.match(mailformat))
return "- Email không chính xác, vui lòng nhập lại\n";
}
// TOGGLE SHOW PASSWORD
function show_hide_pass(password) {
var x = $(password).parents(".item").find(".input-pass").attr("type");
if (x === "password") {
$(password).parents(".item").find(".input-pass").attr("type", "text");
} else {
$(password).parents(".item").find(".input-pass").attr("type", "password");
}
}
// FORGOT PASSWORD
function forgotPassword() {
var email = document.getElementById("email_register").value;
Hura.Ajax.customPost("/ajax/reset_password_request.php", {
email: email,
}).then(function (data) {
//console.log(data);
$("#js-mess").html(data.message);
});
}
var customerOrderTpl = `
<tr align="center">
<td>
<a href="?view=order-detail&id={%= item.orderId %}" style="color: #214186"
>#{%= item.orderId %}
<span class="color-primary" style="display: block">{%= item.orderDate %}</span>
<span class="red-bold" style="display: block">(Xem chi tiết)</span>
</a>
</td>
<td align="left">
{% for (let itemProduct of item.item_list) { %}
<a
href="{%= itemProduct.item_info.productUrl %}"
style="display: block; font-weight: 500; margin-bottom: 4px"
>
- {%= itemProduct.item_info.productName %}
</a>
{% } %}
</td>
<td class="red-bold" style="white-space: nowrap">
{%= parseInt(item.totalValue).toLocaleString() %} <u>đ</u>
{% if (item.status_id === "0") { %}
<p class="color-secondary">Đang xử lý</p>
{% } %}
</td>
</tr>
`;
{% endraw %}
// RENDER CUSTOMER ORDER LIST
function getOrderList() {
Hura.Ajax.post("account", { action_type: "recent-order" }).then(function (
order_list
) {
//console.log(order_list);
if (order_list.length > 0) {
var html = Hura.Template.parse(customerOrderTpl, order_list);
Hura.Template.render("#js-customer-order", html);
} else {
$(".order-page").html(`<p>Bạn chưa có đơn hàng nào!</p>`);
}
});
}

View File

@@ -0,0 +1,282 @@
Hura.UI.loadGroup(lazy_load_group);
// LAZY LOADING BLOCK ELEMENT
var lazy_load_group = [];
var lazyLoadInstance = new LazyLoad({
elements_selector: ".lazy"
});
lazy_load_group.push(
{
id: 'js-article-featured-footer',
target: '#js-article-featured-footer',
loadFn: function () {
getFooterAricleList();
},
},
)
//Kiểm tra cú pháp Email
function validateEmail(Email) {
var regaxEmail =
/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
if (regaxEmail.test(Email)) {
return true;
} else {
return false;
}
}
//Kiếm tra cú pháp Số điện thoại
var number_regex1 = /^[0]\d{9}$/i;
var number_regex2 = /^[0]\d{10}$/i;
var error = "";
//Kiểm tra tên chứa ký tự đặc biệt
var nameRegex = /[^a-z0-9A-Z_ÀÁÂÃÈÉÊÌÍÒÓÔÕÙÚĂĐĨŨƠàáâãèéêìíòóôõùúăđĩũơƯĂẠẢẤẦẨẪẬẮẰẲẴẶẸẺẼỀỀỂưăạảấầẩẫậắằẳẵặẹẻẽềềểỄỆỈỊỌỎỐỒỔỖỘỚỜỞỠỢỤỦỨỪễếệỉịọỏốồổỗộớờởỡợụủứừỬỮỰỲỴÝỶỸửữựỳỵỷỹ]/u;
// FORMAT PRICE
function formatCurrency(a) {
var b = parseFloat(a)
.toFixed(2)
.replace(/(\d)(?=(\d{3})+\.)/g, "$1.")
.toString();
var len = b.length;
b = b.substring(0, len - 3);
return b;
}
// CONVERT STRING TO NUMBER
function strToNumber(str) {
str += "";
while (str.indexOf(".") > 0) {
str = str.replace(".", "");
}
var result = parseFloat(str);
return isNaN(result) ? 0 : result;
}
// FIXED HEADER
function fixed_header() {
$(window).scroll(function () {
var distanceFromTop = $(document).scrollTop();
if (distanceFromTop > 500) {
$(".header").addClass("fixed-nav");
} else {
$(".header").removeClass("fixed-nav");
}
});
}
fixed_header();
// ADD ITEM TO CART SUCCESS FORM
var successForm = document.querySelector(".success-form");
function cartButton(idCart) {
Hura.Cart.Product.add(idCart, 0, { quantity: 1 }).then(function (
add_status
) {
if (add_status.status === "error") {
alert("Đã tồn tại sản phẩm trong giỏ hàng");
} else {
modalSuccess();
change_cart_amount();
}
});
}
// CALL MODAL SUCCESS
function modalSuccess() {
successForm.classList.toggle("hide");
setTimeout(function () {
successForm.classList.toggle("hide");
}, 1200);
}
// CHANGE AMOUNT CART HEADER
function change_cart_amount() {
Hura.Cart.getSummary().then(function (data) {
if (data.total_item != 0) {
$(".header-features-cart-amount").show().html(data.total_item);
$(".name-amount-sp").show();
$(".amount-sp-in-cart").show().html("("+ data.total_item +")");
} else {
$(".header-features-cart-amount").hide();
$(".name-amount-sp").hide();
}
});
}
change_cart_amount();
function _showMenu(){
$("body").addClass("overflow-hidden");
$(".global-menu-container").addClass("show");
$(".bg-menu").show();
}
function _hideMenu(){
$("body").removeClass("overflow-hidden");
$(".global-menu-container").removeClass("show");
$(".bg-menu").hide();
}
$(".js-show-cat-menu").click(function(){
$(this).parents(".js-cat-item").find(".js-sub-menu").slideToggle();
$(this).toggleClass("fa-angle-down")
});
$('.js-cat-2').click(function(){
$(this).parents('.js-cat-2-block').find('.sub-menu-2').slideToggle();
$(this).toggleClass('fa-angle-down')
});
// GET SEARCH PRODUCT
function searchProduct(value) {
var params = {
action: "search",
action_type: "search",
content: "product",
q: value,
};
Hura.Ajax.get("search", params).then(function (data) {
//console.log(data.list);
if (data.list.length > 0) {
$(".search-results").css("display", "block");
var html = Hura.Template.parse(searchResultsTpl, data.list);
Hura.Template.render(".search-results-list", html);
} else {
$(".search-results").css("display", "none");
}
});
}
// GET VALUE INPUT
function getSearchValue() {
$("#js-search-box").on("keyup", function (e) {
let value = e.target.value;
if (value) {
searchProduct(value);
} else {
$(".search-results").css("display", "none");
}
});
}
getSearchValue();
//ĐĂNG KÝ NHẬN TIN
function subscribe_newsletter(a) {
var email = $(a).val();
if (email.length > 4) {
var params = {
action: "customer",
action_type: "register-newsletter",
info: {
name: "Khách hàng nhận bản tin",
email: email,
},
};
Hura.Ajax.post("customer", params).then(function (data) {
//console.log(data);
if (data.status == "success") {
alert("Quý khách đã đăng ký thành công");
$(a).val("");
} else if (data.message == "Email exist") {
if (validateEmail(email) == false)
alert("Email không hợp lệ");
} else {
alert("Lỗi xảy ra, vui lòng thử lại");
}
});
} else {
alert("Vui lòng nhập địa chỉ email");
}
}
//TIN TỨC NỔI BẬT FOOTER
function getFooterAricleList() {
var params = {
action_type: 'list',
type: 'article',
featured: 1,
show: 10
}
var target = "#js-article-featured-footer";
Hura.Ajax.get("article", params).then(function (data) {
var html = Hura.Template.parse(articleFeaturedFooter, data.list.splice(0, 2));
Hura.Template.render(target, html);
convertTimeArticleHome();
});
}
function convertTimeArticleHome(){
$(".js-art-time").each(function(){
var time = $(this).attr("data-time");
var day = time.substring(0, 2);
var month = time.substring(3, 5);
var year = time.substring(6, 10);
var addDay = $(this).find("span");
var addYear = $(this).find("b");
$(addDay).html(day+'.'+month);
$(addYear).html(year);
})
}
$(".js-footer-item").click(function(){
$(this).parents(".info-item").find("ul, .support-list").slideToggle();
$(this).toggleClass("current");
});
// SORT SELECT BOX
function sortSelect() {
var href = window.location.href;
$(".js-select-sort-item").each(function () {
if ($(this).val() === href) {
$(this).attr("selected", "selected");
}
});
}
sortSelect();

View File

@@ -0,0 +1,137 @@
//SWIPER SLIDER SHOWCASE
function swiperShowCase() {
new Swiper(".swiper-showcase", {
slidesPerView: 1,
spaceBetween: 10,
centeredSlides: true,
loop: true,
speed: 1000,
preloadImages: false,
lazy: true,
autoplay: {
delay: 2500,
disableOnInteraction: false,
pauseOnMouseEnter: "true",
},
pagination: {
el: ".swiper-pagination",
clickable: true,
},
navigation: {
nextEl: ".swiper-button-next",
prevEl: ".swiper-button-prev",
},
});
}
swiperShowCase();
//COLLECTION
function swiperCollectionBox() {
new Swiper(".homepage-collection-swiper", {
slidesPerView: 2.5,
spaceBetween: 6,
rewind: true,
speed: 1000,
preloadImages: false,
lazy: true,
});
}
swiperCollectionBox();
// SET CATEGOTY ITEM LINK TO VIEW MORE BUTTON
function setLinkToSeeAllBtn(target, categoryLink) {
target
.parents(".collection-tab-container")
.find(".all-item-collection")
.children()
.attr("href", categoryLink);
}
// COLLECTION SECTION
function collectionBoxHandler() {
$(".js-collection-item").on("click", function () {
var collectionId = $(this).attr("data-id");
var collectionLink = $(this).attr("data-url");
$(this).parent().find(".active").removeClass("active");
$(this).addClass("active");
getCollectionProduct(collectionId);
setLinkToSeeAllBtn($(this), collectionLink);
});
}
function getCollectionProduct(collectionId) {
var params = {
action_type: "list",
id: collectionId,
show: 18,
};
var target = "#js-collection-holder";
Hura.Ajax.get("collection", params).then(function (data) {
var html = Hura.Template.parse(productTpl, data.list);
Hura.Template.render(target, html);
});
}
function firstClickCollection() {
collectionBoxHandler();
$(".js-collection-item").first().click();
}
firstClickCollection();
//SWIPER CATEGORY HOMEPAGE
function swiperListBox() {
new Swiper(".homepage-cat-swiper", {
slidesPerView: 2,
spaceBetween: 10,
rewind: true,
speed: 1000,
preloadImages: false,
lazy: true,
});
}
swiperListBox();
function lazyCategoryBox(){
for (let i = 0; i <= category_to_fetch.length - 1; i++) {
let idCat = category_to_fetch[i]
lazy_load_group.push({
id: "js-product-" + idCat,
target: "#js-product-" + idCat,
loadFn: function () {
getCategoryProduct(idCat)
},
});
}
}
lazyCategoryBox();
// AJAX CATEGORY BOX - HOT PRODUCT
function getCategoryProduct(id) {
var params = {
action_type: "product-list",
category: id,
};
var target = "#js-product-" + id;
Hura.Ajax.get("product", params).then(function (data) {
//console.log(data.list);
if (data.total == 0) {
$(target).html(
`<h3 class="box-empty font-weight-700 d-flex align-items-center justify-content-center">Sản phẩm đang được cập nhật...!</h3>`
);
} else {
var html = Hura.Template.parse(listCategoryHome, data.list);
Hura.Template.render(target, html);
}
});
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 583 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 542 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 538 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 642 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 270 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,869 @@
//FANCYBOX
// SWIPER GALLERY - PRODUCT
function swiperThumbnails() {
const galleryThumbs = new Swiper(".gallery-thumbs", {
spaceBetween: 8,
slidesPerView: 5,
slideToClickedSlide: true,
freeMode: true,
watchSlidesProgress: true,
centerInsufficientSlides: true,
navigation: {
nextEl: ".swiper-button-next-gallery",
prevEl: ".swiper-button-prev-gallery",
},
});
const galleryTop = new Swiper(".gallery-top", {
spaceBetween: 16,
slidesPerView: 1,
thumbs: {
swiper: galleryThumbs,
},
// AUTO SILDED AT FISRT AND END
on: {
slideChange: function () {
let activeIndex = this.activeIndex + 1;
let activeSlide = document.querySelector(
`.gallery-thumbs .swiper-slide:nth-child(${activeIndex})`
);
let nextSlide = document.querySelector(
`.gallery-thumbs .swiper-slide:nth-child(${activeIndex + 1})`
);
let prevSlide = document.querySelector(
`.gallery-thumbs .swiper-slide:nth-child(${activeIndex - 1})`
);
if (
nextSlide &&
!nextSlide.classList.contains("swiper-slide-visible")
) {
this.thumbs.swiper.slideNext();
} else if (
prevSlide &&
!prevSlide.classList.contains("swiper-slide-visible")
) {
this.thumbs.swiper.slidePrev();
}
},
},
});
}
swiperThumbnails()
function fancyBox() {
Fancybox.bind('[data-fancybox="gallery"]', {
Toolbar: {
display: [
{
id: "counter",
position: "center",
},
"zoom",
"slideshow",
"fullscreen",
"thumbs",
"close",
],
},
//click: "unset",
on: {
initLayout: (fancybox) => {
// Create left column
const $leftCol = document.createElement("div");
$leftCol.classList.add("fancybox__leftCol");
while (fancybox.$container.firstChild) {
$leftCol.appendChild(fancybox.$container.firstChild);
}
// Add elements to DOM
fancybox.$container.appendChild(fancybox.$backdrop);
fancybox.$container.appendChild($leftCol);
fancybox.$leftCol = $leftCol;
},
"Carousel.ready Carousel.change": (fancybox, carousel, slideIndex) => {
// Get index of the current gallery item
slideIndex =
slideIndex === undefined
? carousel.options.initialPage
: slideIndex;
// console.log(slideIndex);
// Get link related to current item
const $trigger = fancybox.items[slideIndex].$trigger;
// Get data from `data-info` attribute
const data = $trigger.dataset.info || "";
},
},
});
}
fancyBox();
function callForMe(){
var error = "";
var number_regex1 = /^[0]\d{9}$/i;
var number_regex2 = /^[0]\d{10}$/i;
var glPro = "{{ page.product_info.productName}}";
var check_name = 'Khách hàng yêu cầu gọi lại';
var check_email = '';
var check_tel = document.getElementById('phone-now').value;
var check_message = "Khách hàng yêu cầu gọi lại sản phẩm: " + glPro;
if(check_tel.length < 8) error += "- Bạn chưa nhập số điện thoại\n";
else{
if(number_regex1.test(check_tel) == false && number_regex2.test(check_tel) == false) error += "- Số điện thoại chưa chính xác\n";
}
if (error == "") {
var params = {
action : "customer",
action_type: "contact",
type: "contact",
info: {
name: check_name,
email: check_email,
tel: check_tel,
title : 'Khách hàng yêu cầu gọi lại sản phẩm: ' + glPro,
message: check_message,
},
};
Hura.Ajax.post("customer", params).then(function (data) {
alert(
"Bạn đã gửi liên hệ thành công\nChúng tôi đã nhận được thông tin và sẽ liên hệ với quý khách trong thời gian sớm nhất"
);
location.reload();
});
} else alert(error);
return false;
}
$("#js-showmore").click(function(){
$("#js-summary").toggleClass("active");
var text = $(this).find("span").html();
if (text == 'Xem thêm') {
$(this).find("span").text("Thu gọn");
} else if (text == 'Thu gọn') {
$(this).find("span").text("Xem thêm");
}
})
function _showProductDescription() {
let height_container = $("#js-product-desc").height();
$("#js-desc-showmore").css("display","block");
$("#js-desc-showmore").click(function(){
$("#js-product-desc").addClass("active");
$("#js-desc-showless").css("display","block");
$(this).hide();
});
$("#js-desc-showless").click(function(){
$("#js-product-desc").removeClass("active");
$("#js-desc-showmore").css("display","block");
$(this).hide();
$('html, body').animate({
scrollTop: $("#js-product-desc").offset().top - 140
},800);
});
}
_showProductDescription();
// ADD PRODUCT TO CART - PRODUCT DETAILS
function addProductToCart(product_id, variant_id_fake, props) {
const props_quantity = parseInt($(".js-buy-quantity-temp").attr("value"));
const stockQuantity = parseInt($(".bk-check-out-of-stock").attr("value"));
//console.log(props_quantity);
var variant_id = 0;
var data = $('.js-variant-option-container input[type="hidden"]').val();
if (data) {
var newData = JSON.parse(data)
variant_id = newData.variant_id;
}
if (stockQuantity) {
var product_props = {
quantity: props_quantity,
buyer_note: "",
};
Hura.Cart.Product.add(product_id, variant_id, product_props).then(function (
response
) {
// Error response
if (response.status === "error") {
if (response.error_type == "item-in-cart") {
alert("Sản phẩm đã trong giỏ hàng");
} else if (response.error_type == "invalid-item-id")
alert("ID sản phẩm không đúng");
else alert(response.message);
}
// Success response
else {
modalSuccess();
change_cart_amount();
}
});
} else {
alert("Sản phẩm không có sẵn. Vui lòng liên hệ. Xin cảm ơn!")
}
}
// BUY NOW
function buyNow(product_id, variant_id_fake, props) {
addProductToCart(product_id, variant_id_fake, props);
const stockQuantityCheck = parseInt($(".bk-check-out-of-stock").attr("value"));
if (stockQuantityCheck) {
setTimeout(function () {
window.location.href = "./cart";
}, 1500);
}
}
// BUY NOW
function buyPayInstall(product_id, variant_id_fake, props) {
addProductToCart(product_id, variant_id_fake, props);
const stockQuantityCheck = parseInt($(".bk-check-out-of-stock").attr("value"));
if (stockQuantityCheck) {
setTimeout(function () {
window.location.href = "./cart?show=tragop";
}, 1500);
}
}
// LANG NGHE THAY DOI SO LUONG SP
function listenQuantityBuy() {
const $track_change = $(".js-quantity-change");
//thay doi so luong sp mua, neu nhap so luong
$track_change.on("change", function (e) {
$(".js-buy-quantity-temp").attr("value", e.target.value);
});
//thay doi so luong sp theo - hoac +
$track_change.on("click", function (e) {
if (e.target.nodeName === "INPUT") return;
let quantity_change = parseInt(this.getAttribute("data-value"));
let $row = $(this).closest(".cart-quantity-select");
let current_quantity = parseInt($row.find(".js-buy-quantity").val());
//loai bo so luong vo ly
if (current_quantity < 0) {
$row.find(".js-buy-quantity").val(0);
return;
}
let totalQuantity = current_quantity + quantity_change;
$row.find(".js-buy-quantity").val(totalQuantity);
$(".js-buy-quantity-temp").attr("value", totalQuantity);
});
}
listenQuantityBuy();
function renReplyReview(new_replies){
var html = '';
new_replies.forEach(function(value,item){
var check_user = `<span class="avatar">
<b class="avatar-user">`+value.user_name+`</b>
</span>
<b class="name">`+value.user_name+`</b>`;
if (value.is_user_admin == 1) {
check_user = `<i class="cmt-logo"></i>
<b class="name">`+value.user_name+`</b>
<i class="qtv">QTV</i>`
}
if(value.is_user_admin == 1 || value.approved == 1){
html += `
<div class="item_reply">
<div class="comment_right">
<div class="comment-name">
`+check_user+`
</div>
<div class="reply-content">`+value.content+`</div>
</div>
</div>
`;
}
})
return html;
}
// COMMENT KHÁCH HÀNG
const is_admin_login = "no";
const customer_info = 0;
$(document).ready(function () {
getRatingComment();
$(".comment-form textarea").focus(function(){
$(this).parent().find(".form-input").show();
});
layComment({{ page.product_info.productId }}, "product", "", "", "new");
$("#js-show-comment").click(function(){
$("#js-box-review").fadeIn();
$("#js-show-comment").addClass("hide");
$("#js-hide-comment").removeClass("hide");
});
$("#js-hide-comment").click(function(){
$("#js-box-review").fadeOut();
$("#js-hide-comment").addClass("hide");
$("#js-show-comment").removeClass("hide");
});
$("#comment_keyword").keydown(function(e){
if(e.keyCode==13){
var search_field = $(".search-comment select").val();
var keyword = $("#comment_keyword").val();
//console.log(search_field +"---"+keyword);
}
});
$(".comment-action-list .sort a").click(function(){
$(".comment-action-list .sort a").removeClass("current");
$(this).addClass("current");
});
});
function checkReply(is_admin_login, customer_info, replyTo) {
var formReply = "";
if (is_admin_login == "yes") {
formReply =`
<div class="input-text" style="margin-bottom: 20px;align-items: center;display: flex;">
<p style="margin: 0 10px 0 0;color: #f15a22;">Bạn đang đăng nhập là Admin</p>
<input type=hidden id="name`+replyTo+`" value='Admin'/>
<input type=hidden id="email`+replyTo+`" value='admin@gmail.com'/>
<a href="javascript:;" class="send_form" onclick="postComment(`+replyTo+`,'reply')"> Gửi bình luận </a>
</div>
`;
} else if (is_admin_login == "no" && customer_info.length > 0) {
formReply =
`
<div class="input-text">
<input type=hidden id="name`+replyTo+`" value=''/>
<input type=hidden id="email`+replyTo+`" value=''/>
<a href="javascript:;" class="send_form" onclick="postComment(`+replyTo+`,'reply')"> Gửi bình luận </a>
</div>
`;
} else
formReply =
`
<div class="comment-form-input" id="comment-form-input-0" style="display: block;">
<div class="form-group input-text">
<input type="text" id="name`+replyTo+`" placeholder="Họ và tên" name='user_post[user_name]' class="inputText" value=""/>
<input type="text" id="email`+replyTo+`" placeholder="Email" name='user_post[user_email]' class="inputText" value=""/>
<a href="javascript:;" class="btn-send-comment send_form" onclick="postComment(`+replyTo+`,'reply')"> Gửi bình luận </a>
</div>
</div>`;
return formReply;
}
function checkReplyReview(is_admin_login, customer_info , replyTo) {
var formReply = '';
if( is_admin_login == 'yes') {
formReply = `
<p class="note">Bạn đang đăng nhập là Admin</p>
<input type=hidden id="review-name`+replyTo+`" value='Admin'/>
<input type=hidden id="review-email`+replyTo+`" value='admin@gmail.com'/>
<input type="button" onclick="postReview(`+replyTo+`,'reply')" value="Gửi" class="btn-send-comment" />
`;
} else if ( is_admin_login == 'no' && customer_info.length > 0 ) {
formReply = `
<input type=hidden id="review-name`+replyTo+`" value=''/>
<input type=hidden id="review-email`+replyTo+`" value=''/>
<input type="button" onclick="postReview(`+replyTo+`,'reply')" value="Gửi" class="btn-send-comment" />
`;
} else
formReply = `
<div class="comment-form-input" id="comment-form-input-0" style="display: block;">
<div class="form-group clearfix">
<input type="text" id="review-name`+replyTo+`" name='user_post[user_name]' class="inputText" placeholder="Họ tên*" value=""/>
<input type="text" id="review-email`+replyTo+`" name='user_post[user_email]' class="inputText" placeholder="Email*" value=""/>
<input type="button" onclick="postReview(`+replyTo+`,'reply')" value="Gửi" class="btn-send-comment" />
</div>
</div>`;
return formReply ;
}
function layComment(productId, item_type, searchText, searchField, sort) {
var params = {
action_type: "get",
item_type: "product",
item_id: productId,
search: searchText,
search_field: searchField,
order_by: "new",
};
Hura.Ajax.get("comment", params).then(function (data) {
//console.log("comment - ", data);
var html = Hura.Template.parse(commentTpl, data);
Hura.Template.render("#comment-list", html);
$(".js-avatar-user").each(function () {
var name = $(this).html().substring(0, 1);
$(this).html(name);
});
});
}
function getReply(commentId) {
var replyParams = {
action_type: "get-reply",
item_id: commentId,
};
var target = "#reply_list_" + commentId;
Hura.Ajax.get("comment", replyParams).then(function (data) {
// console.log("getReply - ", data);
var html = Hura.Template.parse(replyTpl, data);
Hura.Template.render(target, html);
$(".js-avatar-user").each(function () {
var name = $(this).html().substring(0, 1);
$(this).html(name);
});
});
}
function send_vote(){
var error = "";
var idUpload = $('#js-file-upload-id').val();
if($("#rating-content").val() == '') error+="Bạn chưa nhập nội dung đánh giá\n";
if($("#rating-name").val() == '') error+="Bạn chưa nhập tên\n";
if($("#rating-email").val() == '') error+="Bạn chưa nhập email\n";
if($("#rating-tel").val() == '') error+="Bạn chưa nhập số điện thoại\n";
if(error!=''){
alert(error);
return false;
}
var reviewParams = {
action_type: "review",
info : {
item_type : 'product',
item_title : `{{ page.product_info.productName }}`,
user_name : $("#rating-name").val(),
user_email : $("#rating-email").val(),
user_tel : $("#rating-tel").val(),
user_avatar : '',
user_note : '',
rate : $("#select-rate-pro input:checked").val(),
title : `Đánh giá sản phẩm {{ page.product_info.productName }}`,
content : $("#rating-content").val(),
files : idUpload
}
}
Hura.Ajax.post('customer', reviewParams).then(function (data) {
//console.log("data",data);
alert('Bạn đã gửi thành công!'); location.reload();
})
}
function getRatingComment() {
var params = {
action_type: "list",
search : '',
search_field :'',
order_by :'new',
numPerPage :20,
item_type : 'product'
};
Hura.Ajax.get("review", params).then(function (data) {
//console.log(data);
var html = Hura.Template.parse(rating_tpl, data);
Hura.Template.render("#js-review-holder", html);
})
}
function postComment(id, reply) {
if (check_field(id) == false) return false;
if (reply == "") {
var item_type = $(".form-post [name='user_post[item_type]']").val();
var item_id = $(".form-post [name='user_post[item_id]']").val();
var item_title = $(".form-post [name='user_post[item_title]']").val();
var title = $(".form-post [name='user_post[title]']").val();
var avatar = $(".form-post [name='user_post[user_avatar]']").val();
var user_name = $("#name" + id).val();
var user_email = $("#email" + id).val();
var content = $("#content" + id).val();
var rate = $("#rating-review0 input:checked").val();
var idUpload = $('#js-file-upload-id').val();
var params = {
action_type: "comment",
type :"ajax",
info: {
item_type : 'product',
item_id : '{{ page.product_info.productId }}',
item_title : `{{ page.product_info.productName }}`,
reply_to : reply_to,
user_email : user_email,
user_name : user_name,
user_avatar : '',
user_note : '',
rate : 5,
title : `{{ page.product_info.productName }}`,
content : content,
files : ''
},
};
// console.log(params);
Hura.Ajax.post("customer", params).then(function (data) {
alert("Bạn đã gửi thành công");
location.reload();
});
} else {
var reply_to = id;
var item_type = $(".form-reply" + id + "[name='user_post[item_type]']").val();
var item_id = $(".form-reply" + id + "[name='user_post[item_id]']").val();
var item_title = $(".form-reply" + id + "[name='user_post[item_title]']").val();
var title = $(".form-reply" + id + "[name='user_post[title]']").val();
var avatar = $(".form-reply" + id + "[name='user_post[user_avatar]']").val();
var user_name = $("#name" + id).val();
var user_email = $("#email" + id).val();
var content = $("#content" + id).val();
var params = {
action_type: "comment-reply",
info: {
item_type: item_type,
item_id: item_id,
item_title: item_title,
reply_to: reply_to,
user_email: user_email,
user_name: user_name,
user_avatar: "",
user_note: "",
rate: 5,
title: title,
content: content,
files: "",
},
};
Hura.Ajax.post("customer", params).then(function (data) {
alert("Bạn đã gửi thành công");
location.reload();
});
}
}
function closeCommentBox() {
$('#newCommentBox').fadeOut();
}
function showCommentBox(id) {
var error = "";
var content = document.getElementById("content"+id).value;
if(content=='') error+= "Bạn chưa nhập nội dung\n";
if(error==''){
$('#newCommentBox').fadeIn();
}
else {
alert(error);
return false;
}
}
function check_field(id) {
var error = "";
var name = document.getElementById("name"+id).value;
var email = document.getElementById("email"+id).value;
if(name=='') error+= "Bạn chưa nhập tên\n";
if(email=='') error+= "Bạn chưa nhập email\n";
if(error==''){
return true;
}
else {
alert(error);
return false;
}
};
function check_field_review(id) {
var error = "";
var name = document.getElementById("review-name"+id).value;
var email = document.getElementById("review-email"+id).value;
var content = document.getElementById("review-content"+id).value;
if(name=='') error+= "Bạn chưa nhập tên\n";
if(email=='') error+= "Bạn chưa nhập email\n";
if(content=='') error+= "Bạn chưa nhập nội dung\n";
if(error==''){
return true;
}
else {
alert(error);
return false;
}
};
function postReview(id,reply) {
if(check_field_review(id)==false) return false;
var reply_to = id;
var user_name = $("#review-name"+id).val();
var user_email = $("#review-email"+id).val();
var content = $("#review-content"+id).val();
var params = {
action_type: "review-reply",
type :"ajax",
info : {
item_type : 'product',
item_id : '{{ page.product_info.productId }}',
item_title : `{{ page.product_info.productName }}`,
reply_to : reply_to,
user_email : user_email,
user_name : user_name,
user_avatar : '',
user_note : '',
rate : 5,
title : `{{ page.product_info.productName }}`,
content : content,
files : ''
}
}
Hura.Ajax.post('customer', params).then(function (data) {
alert("Bạn đã gửi thành công");
location.reload();
})
};
function formatDate(a) {
var a = new Date(parseInt(a) * 1000);
var year = a.getFullYear();
var month = a.getMonth() + 1;
var date = a.getDate();
var hour = a.getHours();
var min = a.getMinutes();
var sec = a.getSeconds();
// var time = date + '/' + month + '/' + year + ' ' + hour + ':' + min + ':' + sec ;
var time = date + "/" + month + "/" + year;
return time;
}
function closeFormCommentInput() {
$(".form-input").hide();
}
function showFormReply(a) {
$("#" + a).show();
}
function showReplyForm(id){
var element = $("#reply-comment-"+id);
$("#reply-comment-"+id).toggle();
}
function closeCommentFormInput(a){
$(a).hide();
}
// POST PRODUCT HISTORY
var ITEM_TYPE = 'product';
var ITEM_ID = '{{ page.product_info.productId }}';
var ITEM_NAME = `{{ page.product_info.productName }}`;
var VARIANT_SELECTED = {};
// GET PRODUCT RELATIVE
function getRelativeProduct() {
var categoryID = parseInt($('.section-details').attr('data-item_category-id'));
var params = {
action_type: "product-list",
category: categoryID,
};
var target = "#js-bottom-product-box";
Hura.Ajax.get("product", params).then(function (data) {
//console.log(data.list)
var currentProductID = parseInt($('.section-details').attr('data-item_id'));
var newDataList = data.list.filter(item => item.id !== currentProductID);
if (data.list.length > 0) {
var html = Hura.Template.parse(productTpl, newDataList);
Hura.Template.render(target, html);
} else {
$("#js-bottom-product-box").html(`<p class="alert-mess">Sản phẩm đang cập nhập</p>`)
}
resetBottomBoxDetails();
});
}
getRelativeProduct();
// GET PRODUCT HISTORY
function getProductHistory() {
Hura.Ajax.post('user', { action_type: 'product-view-history' }).then(function (data) {
var target = '#js-bottom-product-history';
var html = Hura.Template.parse(productTpl, data.list);
Hura.Template.render(target, html);
resetBottomBoxDetails();
})
}
function resetBottomBoxDetails() {
$(".swiper-wrapper").css("display", "none");
setTimeout(function () {
$(".swiper-wrapper").css("display", "flex");
}, 100)
}
resetBottomBoxDetails();
// SWIPER BOTTOM PRODUCT BOX
function productBottomBoxSwiper() {
new Swiper(".bottom-product-box-swiper", {
slidesPerView: 2,
spaceBetween: 10,
rewind: true,
});
}
productBottomBoxSwiper();
// CẤU HÌNH : KÍCH THƯỚC, DUNG LƯỢNG, MÀU SẮC
function _setVariantColor() {
$('#js-variant-holder .js-variant-option-value').each(function () {
var variant_key = $(this).attr('data-key');
if (variant_key === 'mau-sac') {
$(this).addClass('js-variant-color');
}
});
$('.js-variant-color').each(function () {
var data_color = $(this).attr('data-value').substring(0, 7);
$(this).css('background', data_color)
});
}
_setVariantColor();
function _changePriceVariant() {
$('.js-variant-option-value').click(function () {
setTimeout(function () {
var data = JSON.parse($('#js-variant-holder input[type="hidden"]').val());
var price = parseInt(data.current_price);
var marketPrice = parseInt($('.bk-product-marketPrice').attr("value"));
var variantStock = data.current_stock;
var variantValue = data.label;
//console.log(data, price, marketPrice, variantValue)
$('.js-variant-label').attr("data-label", variantValue);
getVariantLabel();
var variantName = $('.js-variant-label').html();
$('.bk-check-out-of-stock').attr("value", variantStock);
if (variantStock > 0) {
$('.js-variant-price').html(formatCurrency(price) + ' <u>đ</u>');
$('.bk-product-price').html(price);
} else {
$('.js-variant-price').html("Hết hàng");
}
$('.bk-product-property').val(variantName)
$('.js-variant-name').html(' - (' + variantName + ')');
if (marketPrice > price && price > 0) {
var price_off = 100 - price / marketPrice * 100;
$('.js-price-off').html('(-' + formatCurrency(price_off) + '%)');
$('.js-variant-marketPrice').show();
} else {
$('.js-variant-marketPrice').hide();
$('.js-price-off').hide();
}
// change image
let variant_image = data.image;
//console.log(variant_image);
if (variant_image != '') {
$('.gallery-thumbs .swiper-slide').each(function (index) {
var slideThumbsSrc = $(this).children().attr("src");
if (variant_image === slideThumbsSrc) {
//console.log(index);
galleryTop.slideTo(index, 500, true);
}
});
}
}, 100);
});
//$('.js-variant-option-value:first-child').click();
}
_changePriceVariant();

File diff suppressed because it is too large Load Diff