manger.js
javascript
2 months ago
21 kB
1
Indexable
Never
new Vue({ el: '#app', data: { info: null, totalResponse: null, storeList: null, selectedStore: 1, isLoaded: true, itemPriceChange: 0, modalInfo: null, currentItem: null, userInput: "", page: 1, checkedOrders: [], sortByLeft: false, currentSupply: null, supplyList: [], font: '==' }, created: function () { // console.log(this.info) window.jsPDF = window.jspdf.jsPDF; }, mounted: function () { if (Cookies.get('wildberries_store_selection') != undefined) { this.selectedStore = Cookies.get('wildberries_store_selection') } this.getData() }, watch: { // whenever question changes, this function will run sortByLeft(newQuestion, oldQuestion) { this.getData() } }, methods: { getData() { if (this.isLoaded) { axios.get("api/wildberries/manager/getStoreList.php").then(response => { this.storeList = response.data }) axios.get("api/wildberries/manager/getSupplyList.php").then(response => { this.supplyList = response.data if (this.supplyList.length > 0) { this.currentSupply = this.supplyList[0] } }) this.info = null this.isLoaded = false const code = this.userInput axios.get("api/wildberries/manager/getOrders.php?code=" + code + '&page=' + this.page + "&sortCheck=" + this.sortByLeft +"&supply="+this.currentSupply).then(response => { this.isLoaded = true this.info = response.data.orders for (var i = 0; i < this.info.length; i++) { if (this.info[i].currencyCode == 933) { this.info[i].changedPrice = this.info[i].price * 24 } else if (this.info[i].currencyCode == 398) { this.info[i].changedPrice = this.info[i].price / 5 } else { this.info[i].changedPrice = this.info[i].price } // console.log(i) } this.totalResponse = response.data }) .catch(function (error) { this.isLoaded = true if (error.response.status == 403) { location.reload() } }) } }, paginate() { var pagination = document.getElementById("pagination") console.log("testtsts", pagination) let totalPage = parseInt(this.totalResponse.count / 30) let pag = "" for (var i = 1; i < totalPage; i++) { console.log("p", i) if (i == this.page) { pag += '<li class="page-item active"><a class="page-link" href="#" tabindex="-1">' + i + '</a></li>' } else if (i > this.page && i < 5) { pag += '<li class="page-item"><a class="page-link" href="#" tabindex="-1">' + i + '</a></li>' } } pag += '<li class="page-item disabled"><a class="page-link" href="#" tabindex="-1">' + totalPage + '</a></li>' console.log("pagination", pag) pagination.innerHTML = '<ul class="pagination">' + pag + '</ul>' }, selectedPage(page) { if (page == this.page) { return "page-item active" } return "page-item" }, bindInfoButtons(id) { document.getElementById("name").innerHTML = ""; this.info.find(item => { if (item.id == id) { this.modalInfo = item // console.log(this.modalInfo.shtrih) // document.getElementById("okImage").src += "data:image/svg+xml;base64," + this.modalInfo.shtrih; this.itemPriceChange = item.price JsBarcode("#ean-13", this.modalInfo.item_barcode, { format: "ean13" }); } }) for (var i = 0; i < this.modalInfo.subOrders.length; i++) { document.getElementById("name").innerHTML += "<p>" + this.modalInfo.subOrders[i].name + " " + "<br></strong> Кол: <strong>" + this.modalInfo.subOrders[i].quantity + "</strong> <br><br>" } }, printButton(firstImg) { var win = window.open(''); win.document.write('<img src="' + "data:image/svg+xml;base64," + firstImg + '" onload="window.print();window.close()" />'); win.focus(); }, printAllButton(firstImg, modal) { const s = new XMLSerializer().serializeToString(document.getElementById("ean-13")) const encodedData = window.btoa(s) var qrImg = modal.qr const doc = new jsPDF({ orientation: "landscape", unit: "in", format: [1.57, 1.18] }); var img = new Image(); var img2 = new Image(); img.src = "data:image/svg+xml;base64," + firstImg; img2.src = "data:image/svg+xml;base64," + encodedData; var canvas = document.querySelector("canvas") var canvas2 = document.getElementById("canvas2") context = canvas.getContext("2d"); canvas.setAttribute('width', 800); canvas.setAttribute('height', 700); context2 = canvas2.getContext("2d"); canvas2.setAttribute('width', 800); canvas2.setAttribute('height', 500); const pdfWidth = doc.internal.pageSize.getWidth(); const pdfHeight = (300 * pdfWidth) / 400; // img.onload = function () { // context.drawImage(img, 0, 0, 800, 700); // var canvasdata = canvas.toDataURL("image/png"); // for (var i = 0; i < 3; i++) { // doc.addImage(canvasdata, "PNG", 0, 0.02, pdfWidth, pdfHeight); // doc.addPage(); // } // // doc.save("two-by-four.pdf"); // // document.body.appendChild(a); // // canvas.parentNode.removeChild(canvas); // }; this.svgString2Image(qrImg, 800, 600, 'png').then( function (value) { for (var i = 0; i < 3; i++) { doc.addImage(value, "PNG", 0, 0.02, pdfWidth, pdfHeight); doc.addPage(); } }) img2.onload = function () { context2.drawImage(img2, 0, 0, 800, 500); var canvasdata = canvas2.toDataURL("image/png"); const pdfWidth = doc.internal.pageSize.getWidth(); const pdfHeight = (500 * pdfWidth) / 800; // console.log('widdthh'+pdfWidth) for (var i = 0; i < 3; i++) { doc.addImage(canvasdata, "PNG", 0, 0.02, pdfWidth, pdfHeight); doc.addPage(); } doc.setFontSize(7); const myFont = "" // load the *.ttf font file as binary string // add the font to jsPDF // doc.addFileToVFS("OpenSans-Regular-normal", myFont); // doc.addFont("MyFont.ttf", "MyFont", "normal"); doc.setFont("OpenSans"); doc.addFileToVFS('OpenSans-Regular-normal.ttf', this.font); doc.addFont('OpenSans-Regular-normal.ttf', 'OpenSans-Regular', 'normal'); doc.setFont("OpenSans-Regular"); let color = modal.color.length > 0 ? "Цвет заказа: " + modal.color : "" for (var i = 0; i < modal.subOrders.length; i++) { doc.text(0.1, 0.2, modal.store_name + " " + "code: " + modal.code + "; " + modal.subOrders[i].name + "; " + color, { maxWidth: 1.0 }); } setTimeout(function () { window.open(doc.output('bloburl'), '_blank'); }, 2000); axios.get("api/wildberries/markPrinted.php?code=" + modal.code).then(response => { isLoaded = true $.notify("Этикетка распечатана", "success"); this.info.find(item => { if (item.code == code) { item.printed = true; } }) }) .catch(function (error) { if (error.response.status == 403) { location.reload() } }); // doc.save("Этикетка "+modal.code+".pdf"); // document.body.appendChild(a); // canvas.parentNode.removeChild(canvas); }; }, statusColor(status) { return (status == 0 ? "red" : (status == 1) ? "orange" : (status == 2) ? "green" : "grey") }, stockColor(amount) { return (amount >= 5 ? "green" : (amount >= 3) ? "orange" : (amount >= 0) ? "red" : "grey") }, statusBackgroundColor(item) { return ((item.userStatus == 3 || item.userStatus == 1) ? "grey" : item.status == 0 ? "greenBackground" : (item.status == 1) ? "orangeBackground" : (item.status == 2) ? "purpleBackground" : "grey") }, printedBackgroundColor(status) { return (status == 1 ? "green" : (status == 0) ? "red" : "grey") }, printSecondCodeButton(code) { const s = new XMLSerializer().serializeToString(document.getElementById("ean-13")) const encodedData = window.btoa(s) // console.log(encodedData) var win = window.open(''); win.document.write('<img src="' + "data:image/svg+xml;base64," + encodedData + '" onload="window.print();window.close()" />'); win.focus(); }, printGoodInfornation(order, code) { var printWindow = window.open(); printWindow.document.open('text/plain') let color = order.color.length > 0 ? "Цвет заказа: " + order.color : "" printWindow.document.write(order.subOrders[0].name + "; " + color); printWindow.document.close(); printWindow.focus(); printWindow.print(); printWindow.close(); axios.get("api/wildberries/markPrinted.php?code=" + code).then(response => { isLoaded = true $.notify("Этикетка распечатана", "success"); this.info.find(item => { if (item.code == code) { item.printed = true; } }) }) .catch(function (error) { if (error.response.status == 403) { location.reload() } }) }, getLinkBy(nmId) { return "https://www.wildberries.ru/catalog/" + nmId + "/detail.aspx"; }, sendOrdersToPacking() { axios.post("api/wildberries/addToSupply.php", { "orders": this.checkedOrders }).then(response => { const data = response.data // console.log(data) $.notify("Добавлено, перезагрузите страницу", "success"); location.reload(); }).catch(function (error) { $.notify("Произошла ошибка, перезагрузите страницу", "danger"); }) }, createSupply() { axios.post("api/wildberries/createSupply.php", { "orders": this.checkedOrders }).then(response => { const data = response.data // console.log(data) $.notify(data, "success"); location.reload(); }).catch(function (error) { console.log(error.response.data.response) if (error.response) { $.notify("" + error.response.data.response.errorText, "danger"); } else { $.notify("Произошла ошибка, перезагрузите страницу" + error.message, "error"); } }) }, closeSupply() { axios.post("api/wildberries/closeSupply.php").then(response => { const data = response.data // console.log(data) $.notify(response.data, "success"); this.getData() }).catch(function (error) { $.notify("Произошла ошибка, перезагрузите страницу", "danger"); }) }, restoreModalStates() { document.getElementById("sendSpinner").classList.add('hidden') // document.getElementById("okImage").classList.add('hidden') }, getCookie(cname) { let name = cname + "="; let decodedCookie = decodeURIComponent(document.cookie); let ca = decodedCookie.split(';'); for (let i = 0; i < ca.length; i++) { let c = ca[i]; while (c.charAt(0) == ' ') { c = c.substring(1); } if (c.indexOf(name) == 0) { return c.substring(name.length, c.length); } } return ""; }, changeSelection() { this.page = 1 document.cookie = "wildberries_store_selection=" + this.selectedStore this.getData() }, changeStock(item) { console.log("item", item) axios.post("api/wildberries/updateStock.php", { "barcode": item.item_barcode, "stock": item.stock, "warehouseId": item.warehouseId }).then(response => { const data = response.data // console.log(data) $.notify("Остаток изменен, система обновится через 10 минут", "success"); }).catch(function (error) { $.notify("Произошла ошибка, перезагрузите страницу", "danger"); }) }, deleteStock(item) { console.log("item", item) axios.post("api/wildberries/deleteStock.php", { "barcode": item.item_barcode, "stock": item.stock }).then(response => { const data = response.data // console.log(data) $.notify("Остаток изменен, система обновится через 4 минуты", "success"); }).catch(function (error) { $.notify("Произошла ошибка, перезагрузите страницу", "danger"); }) }, changePrice(item) { console.log(item) axios.post("api/wildberries/updatePrice.php", { "price": item.changedPrice, "nmId": item.nmId }).then(response => { const data = response.data // console.log(data) $.notify("Цена изменена успешно:" + data, "success"); }).catch(function (error) { $.notify("Произошла ошибка: " + error.response.data, "danger"); }) }, addDiscount(item) { console.log(item) axios.post("api/wildberries/updateDiscount.php", { "discount": Number(item.discount), "nmId": item.nmId }).then(response => { const data = response.data // console.log(data) $.notify("Скидка изменена успешно:" + data, "success"); }).catch(function (error) { $.notify("Произошла ошибка: " + error.response.data, "danger"); }) }, selectAllBoxes() { var checks = document.querySelectorAll("#Checkboxes") var mainCheckBox = document.getElementById("mainCheckbox") for (var i = 0; i < checks.length; i++) { if (mainCheckBox.checked && !checks[i].checked) { checks[i].click() } if (!mainCheckBox.checked && checks[i].checked) { checks[i].click() } } }, printAllInPage() { $.notify("Этикетка будет готова через 7 секунд", "success"); this.getDoc().then( function (value) { window.open(value.output('bloburl'), '_blank'); }, function (error) { console.log("eror: ", error); } ); }, myDisplayer(error) { console.log("error", error); }, async getDoc() { const doc = new jsPDF({ orientation: "landscape", unit: "in", format: [1.57, 1.18] }); doc.setFontSize(7); var actualLength = 0; // var actualLength = this.info.filter(function(element){ // return element.code == this.checkedOrders.filter(element => element) // }).length for (var i = 0; i < this.info.length; i++) { for (var j = 0; j < this.checkedOrders.length; j++) { if (this.info[i].code === this.checkedOrders[j]) { actualLength += 1 } } } console.log("actualLength", actualLength) return new Promise((resolve, reject) => { var totalStickers = 0; for (var j = 0; j < this.checkedOrders.length; j++) { const innerInfo = this.info.filter(currentItem => { console.log("currentItem", currentItem) return currentItem.code == this.checkedOrders[j] })[0] console.log("innerInfo", innerInfo) totalStickers += 1 console.log("Order", this.checkedOrders) JsBarcode("#ean-13", innerInfo.item_barcode, { format: "ean13" }); const s = new XMLSerializer().serializeToString(document.getElementById("ean-13")) const encodedData = window.btoa(s) doc.addFileToVFS('OpenSans-Regular-normal.ttf', this.font); doc.addFont('OpenSans-Regular-normal.ttf', 'OpenSans-Regular', 'normal'); doc.setFont("OpenSans-Regular"); console.log(innerInfo) console.log('before') encodeSvg = ""; this.svgString2Image(encodedData, 400, 300, 'png') .then( function (value) { encodeSvg = value; var pdfWidth = doc.internal.pageSize.getWidth(); var pdfHeight = (300 * pdfWidth) / 400; const firstImg = innerInfo.shtrih const qrImg = innerInfo.qr for (var i = 0; i < 3; i++) { console.log("qrImg", i) doc.addImage(qrImg, "PNG", 0, 0.02, pdfWidth, pdfHeight); doc.addPage(); } pdfHeight = (150 * pdfWidth) / 400; for (var i = 0; i < 3; i++) { doc.addImage(encodeSvg, "PNG", 0, 0.02, pdfWidth, pdfHeight); doc.setFontSize(5); var txtUnder = innerInfo.store_name + " \n" + "code: " + innerInfo.code + "; \n" + "Артикул: " + innerInfo.article + ";\n" + innerInfo.subOrders[0].name + "; " doc.text(0.1, 0.7, txtUnder, { maxWidth: 1.0 }) doc.addPage(); console.log('conf') txtUnder = "" doc.setFontSize(7); } let color = innerInfo.color.length > 0 ? "Цвет заказа: " + innerInfo.color : "" var txt = innerInfo.store_name + " " + "code: " + innerInfo.code + "; " + innerInfo.subOrders[0].name + "; " + color txt = "" var txt2 = "Дорогой друг! \nСпасибо за заказ. Мы очень рады, что Вы выбрали именно нас! Примите от нас в знак дружбы небольшой подарок! \n PS. Если Вам понравилось, будем счастливы положительному отзыву!" doc.setFontSize(6); doc.text(0.1, 0.15, txt2, { maxWidth: 1.1 }) txt = "" doc.addPage() }, function (error) { myDisplayer(error); } ) .catch(function (error) { console.log(error) }) console.log("after") axios.get("api/wildberries/markPrinted.php?code=" + innerInfo.code).then(response => { isLoaded = true // $.notify("Этикетка распечатана", "success"); this.info.find(item => { }) }) .catch(function (error) { // if (error.response.status == 403) { // $.notify("Не удалось отметить заказ:"++" как распечатанный", "success"); // } }) // if (totalStickers == actualLength) { // doc.deletePage(totalStickers); // c // } } const myTimeout = setTimeout(function () { doc.deletePage(doc.getNumberOfPages()); resolve(doc); }, 7000); }) }, async svgString2Image(svgString, width, height, format) { return new Promise((resolve, reject) => { // set default for format parameter format = format ? format : 'png'; // SVG data URL from SVG string var svgData = 'data:image/svg+xml;base64,' + svgString; // create canvas in memory(not in DOM) var canvas = document.createElement('canvas'); // get canvas context for drawing on canvas var context = canvas.getContext('2d'); // set canvas size canvas.width = width; canvas.height = height; // create image in memory(not in DOM) var image = new Image(); // later when image loads run this // start loading SVG data into in memory image image.src = svgData; image.onload = function () { // async (happens later) // clear canvas context.clearRect(0, 0, width, height); // draw image with SVG data to canvas context.drawImage(image, 0, 0, width, height); // snapshot canvas as png var pngData = canvas.toDataURL('image/' + format); // pass png data URL to callback resolve(pngData); }; // end async }); }, } })