import md5 from 'js-md5'
export default {
  install(Vue, options) {
    Vue.prototype.md5 = md5;
    //消息成功提示
    Vue.prototype.Success = function (msg) {
        this.$message({
          message: msg,
          duration: 2000,
          type: "success"
        });
      },
      //错误提示
      Vue.prototype.Error = function (msg) {
        this.$message({
          message: msg,
          duration: 2000,
          type: "error"
        });
      },

      //一般提示
      Vue.prototype.Info = function (msg) {
        this.$message({
          message: msg,
          duration: 2000,
          type: "info"
        });
      },
      //警告提示
      Vue.prototype.Warning = function (msg) {
        this.$message({
          message: msg,
          duration: 2000,
          type: "warning"
        });
      },
      //Confirm
      Vue.prototype.Confirm = function (msg, callback) {
        this.$confirm(msg, "提示", {
            confirmButtonText: "确定",
            cancelButtonText: "取消",
            type: "warning"
          })
          .then(() => {
            if (typeof callback === 'function') {
              callback();
            }
          })
          .catch(() => {
            this.Info("已取消操作");
          });
      },

      //域名管理对象
      Vue.prototype.domainManager = function () {
        let domainUrl = '';
        let javaUrl = 'http://192.168.2.65:8018';
        domainUrl = "http://192.168.1.27:8200";

        let vtUploadUrl = "http://192.168.1.214:8120";
        let vtViewUrl = "http://192.168.1.214:8130";

        let locationName = window.location.hostname;
        if (locationName.indexOf('testmall.oytour') !== -1) {
          domainUrl = "https://mallapi.oytour.com";
          javaUrl = "http://property.oytour.com";
          vtUploadUrl = "http://upload.oytour.com";
          vtViewUrl = "https://imgfile.oytour.com";
        } else if (locationName.indexOf('oytour') !== -1) {
          domainUrl = "https://mallapi.oytour.com";
          javaUrl = "http://property.oytour.com";
          vtUploadUrl = "http://upload.oytour.com";
          vtViewUrl = "https://imgfile.oytour.com";
        }
        var obj = {
          //主地址npm
          DomainUrl: domainUrl,
          //资产管理
          javaUrl: javaUrl,
          //常用提交数据URL
          PostUrl: domainUrl + "/api/common/post",
          ImageUrl: 'https://viitto-1301420277.cos.ap-chengdu.myqcloud.com',
          UploadFileUrl: domainUrl + '/api/File/LocalFileUploadImport',
          UploadBlob: domainUrl + '/api/File/UploadBlob',
          //文件上传自己服务器
          VTUploadUrl: vtUploadUrl,
          //文件预览自己服务器
          VTViewUrl: vtViewUrl
        };
        return obj;
      },
      //浏览器缓存
      Vue.prototype.getLocalStorage = function () {
        var localStorageData = window.localStorage["mall_userInfo"];
        if (localStorageData !== undefined && localStorageData != 'undefined') {
          return JSON.parse(localStorageData);
        } else {
          return null;
        }
      },
      //验证只能输入2位小数【负数：isMinus传true】
      Vue.prototype.checkPrice = function (item, filed, isMinus) {
        var value = "" + item[filed]; //转字符串
        var t = value.charAt(0);
        value = value.replace(/[^\d.]/g, ""); //清除“数字”和“.”以外的字符
        value = value.replace(/\.{2,}/g, "."); //只保留第一个. 清除多余的
        value = value
          .replace(".", "$#$")
          .replace(/\./g, "")
          .replace("$#$", ".");
        value = value.replace(/^(\-)*(\d+)\.(\d\d).*$/, '$1$2.$3'); //只能输入两个小数
        //如果第一位是负号，则允许添加   如果不允许添加负号 可以把这块注释掉
        //是否允许负数
        if (isMinus && t == '-') {
          value = '-' + value;
        }
        item[filed] = value;
      }
    //验证只能输入整数【负数：isMinus传true】
    Vue.prototype.checkInteger = function (item, filed, isMinus) {
        var value = "" + item[filed]; //转字符串
        var t = value.charAt(0);
        value = value.replace(this.$commonUtils.Regex.isInteger, "");
        //是否允许负数
        if (isMinus && t == '-') {
          value = '-' + value;
        }
        item[filed] = value;
      },
      //是否是线上环境【发布时修改为true】
      Vue.prototype.isOnline = function () {
        return process.env.NODE_ENV !== 'development';
      },
      //文件类型数组
      Vue.prototype.FileType = function () {
        var fileTypeJson = {
          //主地址npm
          UserImg: "User", //用户相图片
          //常用提交数据URL
          GoodsImg: "Goods", //素材相关文件
          SetImg: "Set", //用户相图片
          Video: "Video", //视频
        };
        return fileTypeJson;
      },
      //上传文件到本地服务器
      Vue.prototype.UploadSelfFile = function (path, file, callback) {
        var that = this;
        that.Info('上传中...')
        var newPath = '/Upload/' + path + "/";
        var formData = new FormData();
        var uploadUrl = that.domainManager().VTUploadUrl + "/Upload?filePath=" + newPath + "&isCreateCover=1";
        formData.append("myfile", file);
        that.$http.post(uploadUrl, formData, {})
          .then(res => {
            if (res && res.status == 200 && res.data && res.data.FilePath) {
              var uploadResult = {
                resultCode: 1,
                FileName: file.name,
                FileUrl: that.domainManager().VTViewUrl + res.data.FilePath,
                VideoCoverImg: that.domainManager().VTViewUrl + res.data.VideoCoverImg
              }
              if (callback) {
                callback(uploadResult);
              }
            }
          }).catch(function (reason) {
            console.log(reason)
          });
      },
      //PDF预览
      Vue.prototype.previewPDF = function (url) {
        window.open(url);
      },
      //上传文件到云存储
      Vue.prototype.UploadFileToTencent = function (path, fileObj, callback) {
        // debugger;
        var upInfo = JSON.parse(localStorage.uploadInfo);
        if (fileObj.type == "image/png" || fileObj.type == "image/jpeg") {
          let that = this
          lrz(fileObj, {
              width: 750,
              quality: 0.8
            })
            .then(function (rst) {
              //成功时执行
              var arr = rst.base64.split(',');
              var mime = arr[0].match(/:(.*?);/)[1];
              var bstr = atob(arr[1]);
              var n = bstr.length;
              var u8arr = new Uint8Array(n);
              while (n--) {
                u8arr[n] = bstr.charCodeAt(n);
              }
              var newFile = new File([u8arr], fileObj.name, {
                type: mime
              });
              if (upInfo && upInfo.IsDefault == 1) {
                if (upInfo.StoreType == 1) {
                  that.uploadStart(path, newFile, callback)
                }
                if (upInfo.StoreType == 2) {
                  that.uploadToAli(path, newFile, callback)
                }
              } else {
                that.Error('请先配置上传');
              }
            }).catch(function (error) {
              if (upInfo && upInfo.IsDefault == 1) {
                if (upInfo.StoreType == 1) {
                  that.uploadStart(path, fileObj, callback)
                }
                if (upInfo.StoreType == 2) {
                  that.uploadToAli(path, fileObj, callback)
                }
              } else {
                that.Error('请先配置上传');
              }
            }).always(function () {
              //不管成功或失败，都会执行
            })
        } else {
          if (upInfo && upInfo.IsDefault == 1) {
            if (upInfo.StoreType == 1) {
              this.uploadStart(path, fileObj, callback)
            }
            if (upInfo.StoreType == 2) {
              this.uploadToAli(path, fileObj, callback)
            }
          } else {
            this.Error('请先配置上传');
          }
        }
      },
      Vue.prototype.uploadStart = function (path, fileObj, callback) {
        var upInfo = JSON.parse(localStorage.uploadInfo);
        //获取文件扩展名
        var filename = fileObj.name;
        var index = filename.lastIndexOf(".");
        var suffix = filename.substr(index);
        var timestamp1 = Date.parse(new Date()) + "_" + (Math.ceil(Math.random() * 1000));
        let str = '';
        if (this.isOnline()) {
          str = "/Test"
        }
        var newFileName = str + '/Upload/' + path + "/" + timestamp1 + "" + suffix;
        var uploadMsg = {
          Bucket: upInfo.Bucket,
          Region: upInfo.Region,
          SecretId: upInfo.SecretId,
          SecretKey: upInfo.SecretKey,
        };
        var COS = require('cos-js-sdk-v5');
        var cos = new COS({
          SecretId: uploadMsg.SecretId,
          SecretKey: uploadMsg.SecretKey,
        });
        cos.putObject({
          Bucket: uploadMsg.Bucket,
          Region: uploadMsg.Region, //存储桶所在地域，必须字段
          Key: newFileName, //文件名
          StorageClass: 'STANDARD',
          Body: fileObj, // 上传文件对象
          onProgress: function (progressData) {}
        }, function (err, data) {
          if (data && data.statusCode == 200) {
            var uploadResult = {
              resultCode: 1,
              FileName: fileObj.name,
              FileUrl: "https://" + data.Location
            }
            if (callback) {
              callback(uploadResult);
            }
          } else {
            /*上传文件异常*/
            console.log(err || data);
          }
        });
      },
      //上传至阿里云
      Vue.prototype.uploadToAli = function (path, fileObj, successCall) {
        var upInfo = JSON.parse(localStorage.uploadInfo);
        var OSS = require('ali-oss');
        var oss = new OSS({
          region: upInfo.Region,
          accessKeyId: upInfo.SecretId,
          accessKeySecret: upInfo.SecretKey,
          bucket: upInfo.Bucket
        })
        //获取文件扩展名
        var filename = fileObj.name;
        var index = filename.lastIndexOf(".");
        var suffix = filename.substr(index);
        var timestamp1 = Date.parse(new Date()) + "_" + (Math.ceil(Math.random() * 1000));
        let str = '';
        if (this.isOnline()) {
          str = "/Test"
        }
        var newFileName = str + '/Upload/' + path + "/" + timestamp1 + "" + suffix;
        var result = oss.multipartUpload(newFileName, fileObj, {
          progress: function* (p) {}
        }).then(res => {
          var uploadResult = {
            resultCode: 1,
            FileName: fileObj.name,
            FileUrl: res.res.requestUrls[0].replace('http', 'https')
          }
          successCall(uploadResult);
        })
      },
      //公用跳转
      Vue.prototype.CommonJump = function (path, obj) {
        this.$router.push({
          name: path,
          query: obj
        });
      }
    //公用判断图片地址 判断是否包含http
    Vue.prototype.getIconLink = function (url) {
      let str = ''
      if (url && url != '') {
        if (url.indexOf('http') != -1) {
          str = url
        } else {
          str = this.domainManager().ImageUrl + url;
        }
        return str;
      }
    }
    //HTTP提交数据
    Vue.prototype.apipost = function (cmd, msg, successCall, faildCall, isOnline) {
      var apiurl = this.domainManager().DomainUrl + cmd;
      var postData = this.GetPostData(cmd, msg, "");
      this.$http.post(apiurl, postData, {
          headers: {
            'Content-Type': 'application/json',
            'Referer-Viitto': this.$route.path
          }
        })
        .then(res => {
          if (res.data.resultCode == 10000 || res.data.resultCode == 10001) {
            this.$router.push({
              path: '/login'
            });
          } else if (res.resultCode == 10005) {
            this.$router.go(-1);
          } else {
            successCall(res);
          }
        }, faildCall)
    }
    //获取请求参数
    Vue.prototype.GetPostData = function (cmd, msg, newCmd) {
        if (msg == null || msg == "") {
          msg = {}
        }
        var timestamp = (new Date()).valueOf();
        if (!localStorage.mall_userInfo && localStorage.mall_userInfo != "" &&
          this.$route.path.toLowerCase() != "/login" &&
          this.$route.path.toLowerCase() != "/register" &&
          this.$route.path.toLowerCase() != "/forgetpassword"
        ) {
          this.$router.push({
            path: '/login'
          })
        }
        var token = "";
        var key = "";
        var MallBaseId = "0"; //小程序ID
        var TenantId = "0"; //商户Id
        var EmpId = 0; //员工编号【员工登录时使用】
        if (this.getLocalStorage() != null) {
          token = this.getLocalStorage().Token;
          key = this.getLocalStorage().SecretKey;
          MallBaseId = this.getLocalStorage().MallBaseId;
          TenantId = this.getLocalStorage().TenantId;
          EmpId = this.getLocalStorage().EmpId;
        }
        var encodeMsg = encodeURIComponent(JSON.stringify(msg)).toLowerCase();
        var md5Str = md5(`cmd=${cmd}&msg=${encodeMsg}&timestamp=${timestamp}&token=${token}&key=${key}`);
        let tempLanguage = 0;
        if (localStorage.language && localStorage.language != '') {
          if (localStorage.language == "zh-TW") {
            tempLanguage = 1;
          } else if (localStorage.language == "Japanese") {
            tempLanguage = 2;
          }
        }
        var cmdStr = "";
        if (newCmd) {
          cmdStr = newCmd;
        }
        var postData = {
          msg: msg,
          timestamp: timestamp,
          token: token,
          sign: md5Str,
          languageId: tempLanguage,
          cmd: cmdStr,
          MallBaseId: MallBaseId,
          TenantId: TenantId,
          EmpId: EmpId,
          SmallShopsId: 0,
          MiniAppId: "wxacd9f8cc3480d29e",
          OpenId: "ow_7I5cKHQJeQlNJOKoeERRhe6SA",
          UserId: 21382,
        }
        return postData
      },
      //HTTP提交数据资产
      Vue.prototype.assetsApipost = function (cmd, msg, successCall, faildCall, isOnline) {
        var apiurl = this.domainManager().DomainUrl + cmd;
        var postData = this.GetAssetsPostData(cmd, msg, "");
        this.$http.post(apiurl, postData, {
            headers: {
              'Content-Type': 'application/json',
              'Referer-Viitto': this.$route.path
            }
          })
          .then(res => {
            if (res.data.resultCode == 10000 || res.data.resultCode == 10001) {
              this.$router.push({
                path: '/login'
              });
            } else if (res.resultCode == 10005) {
              this.$router.go(-1);
            } else {
              successCall(res);
            }
          }, faildCall)
      }

    //获取请求参数
    Vue.prototype.GetAssetsPostData = function (cmd, msg, newCmd) {
        if (msg == null || msg == "") {
          msg = {}
        }
        var timestamp = (new Date()).valueOf();
        if (!localStorage.mall_userInfo && localStorage.mall_userInfo != "" &&
          this.$route.path.toLowerCase() != "/login" &&
          this.$route.path.toLowerCase() != "/register" &&
          this.$route.path.toLowerCase() != "/forgetpassword"
        ) {
          this.$router.push({
            path: '/login'
          })
        }
        var token = "";
        var key = "";
        var MallBaseId = "0"; //小程序ID
        var TenantId = "0"; //商户Id
        var EmpId = 0; //员工编号【员工登录时使用】
        var ERPGroupId = 0;
        var ERPEmpId = 0;
        var ERPBranchId = 0;
        if (this.getLocalStorage() != null) {
          token = this.getLocalStorage().Token;
          key = this.getLocalStorage().SecretKey;
          MallBaseId = this.getLocalStorage().MallBaseId;
          TenantId = this.getLocalStorage().TenantId;
          EmpId = this.getLocalStorage().EmpId;
          ERPGroupId = this.getLocalStorage().ERPGroupId;
          ERPEmpId = this.getLocalStorage().ERPEmpId;
          ERPBranchId = this.getLocalStorage().ERPBranchId;
        }
        var encodeMsg = encodeURIComponent(JSON.stringify(msg)).toLowerCase();
        var md5Str = md5(`cmd=${cmd}&msg=${encodeMsg}&timestamp=${timestamp}&token=${token}&key=${key}`);
        let tempLanguage = 0;
        if (localStorage.language && localStorage.language != '') {
          if (localStorage.language == "zh-TW") {
            tempLanguage = 1;
          } else if (localStorage.language == "Japanese") {
            tempLanguage = 2;
          }
        }
        var cmdStr = "";
        if (newCmd) {
          cmdStr = newCmd;
        }
        var postData = {
          msg: msg,
          timestamp: timestamp,
          token: token,
          sign: md5Str,
          languageId: tempLanguage,
          cmd: cmdStr,
          MallBaseId: MallBaseId,
          TenantId: TenantId,
          EmpId: EmpId,
          ERPGroupId: ERPGroupId,
          ERPEmpId: ERPEmpId,
          ERPBranchId: ERPBranchId,
        }
        return postData
      },

      //文件下载
      Vue.prototype.GetLocalFile = function (cmd, msg, fileName, newCmd, successCall) {
        var apiurl = this.domainManager().DomainUrl + cmd;
        var postData = this.GetPostData(cmd, msg, newCmd);
        this.$http.post(apiurl, postData, {
          responseType: 'arraybuffer'
        }).then((res) => {
          let blob = new Blob([res.data], {
            type: "application/vnd.ms-excel"
          })
          let url = URL.createObjectURL(blob);
          let link = document.createElement('a');
          link.href = url;
          link.setAttribute("download", fileName);
          document.body.appendChild(link);
          link.click();
          successCall(res);
        }).catch(function (res) {});
      },

      //调用资产的接口
      Vue.prototype.apiJavaPost = function (cmd, msg, successCall, faildCall) {
        if (msg == null || msg == "") {
          msg = {}
        }
        var apiurl = this.domainManager().javaUrl + cmd;
        var timestamp = (new Date()).valueOf();
        this.apiurl = apiurl;
        var token = "";
        var key = "";
        var MallBaseId = "0"; //小程序ID
        var TenantId = "0"; //商户Id
        var uid = "0"
        if (this.getLocalStorage() != null) {
          token = this.getLocalStorage().Token;
          key = this.getLocalStorage().SecretKey;
          MallBaseId = this.getLocalStorage().MallBaseId;
          TenantId = this.getLocalStorage().TenantId;
          uid = this.getLocalStorage().ERPEmpId
        }
        var md5Str = md5(`msg=YXZCGL2020&timestamp=${timestamp}&token=${token}&key=${key}`);
        var postData = {
          "msg": msg,
          "timestamp": timestamp,
          "token": token,
          "sign": md5Str,
          "MallBaseId": MallBaseId,
          "TenantId": TenantId,
          'uid': uid
        }
        if (localStorage.g && localStorage.g != 'undefined') {
          postData.groupId = 2;
        }
        this.$http.post(apiurl, postData, {
            headers: {
              'Content-Type': 'application/json',
              'Referer-Viitto': this.$route.path
            }
          })
          .then(res => {
            if (res.data.resultCode == 10000 || res.data.resultCode == 10001) {
              this.$router.push({
                path: '/login'
              })
            } else if (res.data.resultCode == 10005) {
              this.$router.go(-1)
            } else {
              successCall(res)
            }
          }, faildCall)
      }
  }
}