manger.js

mail@pastecode.io avatarunknown
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
      });

    },

  }
})