"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports["default"] = void 0;

var _antd = require("antd");

var _jsBase = require("js-base64");

var _jsCookie = _interopRequireDefault(require("js-cookie"));

var _sha = _interopRequireDefault(require("sha1"));

var _SlideVerify = _interopRequireDefault(require("../../../components/SlideVerify"));

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }

function _readOnlyError(name) { throw new Error("\"" + name + "\" is read-only"); }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

var REDIRECT_URI = "https://panda-water.com/civbase/user/login";

var Login =
/*#__PURE__*/
function () {
  function Login(props, callback, isInit) {
    _classCallCheck(this, Login);

    this.events = window.share.event;
    this.globalConfig = props.global;
    this.updateConfig = props.updateConfig;
    this.createContext = props.createContext;
    this.history = props.history;
    this.callback = callback;
    this.hasTry = false;

    if (isInit) {
      this.init();
    } // 

  }

  _createClass(Login, [{
    key: "init",
    value: function init() {
      this.loginFailed = false;
      this.guid = Math.round(Math.random() * 10000 + Date.now()).toString(16);
      this.redirect_state = _jsCookie["default"].get('redirect_state');

      var token = this.globalConfig.initToken || _jsCookie["default"].get('token');

      var ddCode = this.globalConfig.ddCode;
      var loginName = this.globalConfig.loginName;
      var password = this.globalConfig.password;
      var loginMode = _jsCookie["default"].get("loginMode") || null;
      if (loginMode && loginMode == 'iotWechat') ddCode = null;
      var self = this; // self.qrcodeLogin(self.globalConfig.qrcodeData.code);

      if (!!token) {
        self.getToweb(token);
      } else if (!!ddCode) {} else if (!!loginName && !!password) {
        self.otherLoginIn(loginName, password);
      } else if (self.globalConfig.qrcodeData && self.globalConfig.qrcodeData.state && self.globalConfig.qrcodeData.state === this.redirect_state && self.globalConfig.qrcodeData.code !== "") {
        console.log("init iotWechat");
        self.qrcodeLogin(self.globalConfig.qrcodeData.code);
      } else if (!!self.globalConfig.isSingleLogin && !!!!self.globalConfig.singleLoginCode) {} else {
        if (self.goLogin()) {
          return false;
        }
      }
    }
  }, {
    key: "getToweb",
    value: function getToweb(token) {
      debugger;
      this.globalConfig.token = token;
      var self = this;
      Http.getUserInfo({
        token: this.globalConfig.token,
        subOID: 'subOID',
        site: this.getLocalSiteBytoken(token),
        'request.preventCache': Date.now()
      }, {
        ignoreSite: true
      }).then(function (response) {
        debugger;

        if (response && !response.errMsg) {
          self.globalConfig.userInfo = {};

          if (response.Groups && response.Groups instanceof Array && response.Groups.length) {
            self.globalConfig.userInfo.Groups = response.Groups;
          }

          self.globalConfig.userInfo = Object.assign({}, response, self.globalConfig.userInfo);
          self.updateConfig && self.updateConfig(self.globalConfig);
          self.getUserInfoAndConfig();
        }
      });
    }
  }, {
    key: "writeLogs",
    value: function writeLogs() {
      if (this.globalConfig.userInfo.UserImge === '') {
        // _config.userInfo.UserImge = __webpack_public_path__ + "assets/images/icon/熊猫新2.png";
        this.globalConfig.userInfo.UserImge = 'https://panda-water.cn/web4/assets/images/icon/熊猫新2.png';
      }

      if (this.globalConfig.userInfo.site) {
        Http.writeLogs({
          origin: window.location.origin,
          client: this.globalConfig.client,
          site: this.globalConfig.userInfo && this.globalConfig.userInfo.site ? this.globalConfig.userInfo.site : '',
          loginName: this.globalConfig.userInfo && this.globalConfig.userInfo.fullName ? this.globalConfig.userInfo.fullName : ''
        })["catch"](function (error) {
          console.log(error);
        });
      }
    }
  }, {
    key: "getIndustry",
    value: function getIndustry(flag, token, _getIndustry) {
      var _this2 = this;

      this.globalConfig.userInfo.Industries = new Array();

      if (this.globalConfig.userInfo.Groups && this.globalConfig.userInfo.Groups.length) {
        this.globalConfig.userInfo.Groups.forEach(function (group) {
          if (group.industry && _this2.globalConfig.userInfo.Industries.indexOf(group.industry) < 0) {
            _this2.globalConfig.userInfo.Industries.push(group.industry);
          }
        });
      }

      if (!flag && this.isSignIn && this.globalConfig.userInfo.Industries.length && this.globalConfig.userInfo.Industries.length > 1) {
        this.createContext(this); //console.log('云平台');

        this.history.push('/industry');
        return false;
      }

      this.getWebConfig(token, _getIndustry);
    }
  }, {
    key: "getWebConfig",
    value: function getWebConfig(token, getIndustry) {
      var _this3 = this;

      debugger;
      var self = this;
      Http.getWebSiteConfig({
        client: this.globalConfig.client,
        token: token,
        'request.preventCache': Date.now()
      }).then(function (response) {
        debugger;

        if (response && response.length > 0) {
          self.globalConfig = Object.assign(self.globalConfig, response.shift(), {
            theme: self.globalConfig.theme,
            menu: self.globalConfig.menu,
            style: self.globalConfig.style
          });
          self.updateConfig && self.updateConfig(self.globalConfig);
          self.getProjectItems().then(function () {
            window.subSysCfg = {};
            response.forEach(function (item) {
              window.subSysCfg[item.client] = item;
            });

            if (!!self.globalConfig.isShared) {
              self.globalConfig.mode = 'single';
              self.globalConfig.style = 'sandbox';
              self.globalConfig.uiwidgets = [self.globalConfig.shareWidget];
              self.globalConfig.widgets = [];
            } // this.events.removeAllListeners('loginSuccess')
            // this.events.removeAllListeners('toggleIndustry')
            // window.share.event = this.events;


            if (self.globalConfig.userInfo.site && self.globalConfig.userInfo.site.length > 0) {
              Http.getWebSiteConfig({
                client: self.globalConfig.client,
                token: token
              }, {
                ignoreSite: true,
                'request.preventCache': Date.now()
              }).then(function (response) {
                debugger;

                if (response && response.length > 0) {
                  debugger;
                  var mainConf = response.shift();
                  if (mainConf.homepage) self.globalConfig.homepage = mainConf.homepage;
                  if (mainConf.bannerLogo) self.globalConfig.bannerLogo = mainConf.bannerLogo;
                  if (mainConf.logo) self.globalConfig.logo = mainConf.logo;
                  if (mainConf.mdi) self.globalConfig.mdi = mainConf.mdi;
                  if (mainConf.menu) self.globalConfig.menu = mainConf.menu;
                  if (mainConf.shortcutIcon) self.globalConfig.shortcutIcon = mainConf.shortcutIcon;
                }

                self.updateConfig && self.updateConfig(self.globalConfig); // console.log("===loginSuccess===")

                getIndustry ? self.events.emit('toggleIndustry') : self.events.emit('loginSuccess');
                window.share.event = self.events;
                self.callback && self.callback();
              });
            } else {
              //loginSuccess
              self.updateConfig && self.updateConfig(self.globalConfig); // console.log("===loginSuccess===")

              getIndustry ? self.events.emit('toggleIndustry') : self.events.emit('loginSuccess');
              window.share.event = self.events;
              self.callback && self.callback();
            }
          });
        } else {
          if (_this3.goLogin()) {
            return false;
          }

          _this3.handleLoginError();

          console.log('获取网络配置失败');
        }
      })["catch"](function (error) {
        console.log(error);

        _this3.handleLoginError();

        console.log('获取网络配置失败');
      });
    }
  }, {
    key: "getProjectItems",
    value: function getProjectItems() {
      var MAX_BOTTOM = 0;
      var isScale = false;
      var widgetIndex = -1;
      this.globalConfig.uiwidgets.map(function (item, index) {
        if (parseInt(item['bottom']) > MAX_BOTTOM) {
          MAX_BOTTOM = parseInt(item['bottom']);
        }

        if (!isScale && item.url.toLowerCase().indexOf('widgets/zoom') > -1) isScale = true;
        if (widgetIndex == -1 && item.url.indexOf('ToggleProject/ToggleProject') > -1) widgetIndex = index;
      });
      var layers = this.globalConfig.mapsettings.layers;

      if (layers.length === 0) {
        widgetIndex != -1 && this.globalConfig.uiwidgets.splice(widgetIndex, 1);
        return Promise.resolve({});
      }

      var layer = layers[0];

      if (!layer.id) {
        layer.layerType = 'dynamic';
      } else {
        layer.layerType = 'PipenetLayer';
      }

      if (layers.length > 1 && widgetIndex == -1) {
        this.globalConfig.uiwidgets.push({
          bottom: isScale ? MAX_BOTTOM + 70 : MAX_BOTTOM + 35,
          config: '',
          label: '方案切换',
          right: 15,
          url: 'product/webgisPanda/ToggleProject/ToggleProject'
        });
      }

      if (layer.areaName) this.globalConfig.mapsettings.areasettings.areaName = layer.areaName;
      if (layer.backgroundColor) this.globalConfig.mapsettings.areasettings.backgroundColor = layer.backgroundColor;
      if (layer.boundColor) this.globalConfig.mapsettings.areasettings.boundColor = layer.boundColor;
      if (layer.boundWidth) this.globalConfig.mapsettings.areasettings.boundWidth = layer.boundWidth;

      if (Number.isInteger(parseInt(layer.backgroundOpacity))) {
        this.globalConfig.mapsettings.areasettings.backgroundOpacity = layer.backgroundOpacity;
      }

      if (layer.extent) this.globalConfig.mapsettings.areasettings.extent = layer.extent;
      if (layer.basemaps && layer.basemaps.length > 0) this.globalConfig.mapsettings.basemaps = layer.basemaps;
      this.updateConfig && this.updateConfig(this.globalConfig);
      return Promise.resolve({});
    }
  }, {
    key: "handleLoginError",
    value: function handleLoginError(callback) {
      _jsCookie["default"].set(this.globalConfig.client, '', {
        path: '/'
      });

      _jsCookie["default"].set('token', '', {
        path: '/'
      });

      _jsCookie["default"].set('site', '', {
        path: '/'
      });

      _jsCookie["default"].set('loginMode', '', {
        path: '/'
      });

      _jsCookie["default"].set('redirect_state', '', {
        path: '/'
      });

      this.loginFailed = true;
      callback && callback();
    }
  }, {
    key: "goLogin",
    value: function goLogin() {
      if (this.globalConfig.style === 'ios' && this.globalConfig.loginTemplate === 'IOSCloud.html') {
        window.location.href = window.location.origin + '/#login';
        return true;
      } else {
        return false;
      }
    }
  }, {
    key: "isRememberPWD",
    value: function isRememberPWD(status) {
      this.isRememberPWD = status;
    }
  }, {
    key: "getLocalSiteBytoken",
    value: function getLocalSiteBytoken(tk) {
      var sStr = localStorage.getItem('loginSite'),
          s = null;

      if (sStr) {
        var sObj = JSON.parse(sStr);

        if (sObj && sObj[tk]) {
          s = sObj[tk];
        }
      }

      return s;
    }
  }, {
    key: "loginByDD",
    value: function loginByDD() {
      var gotoUrl = 'https://oapi.dingtalk.com/connect/oauth2/sns_authorize?appid=dingoakne99srqra6hldv2&response_type=code&scope=snsapi_login&state=STATE&redirect_uri=' + encodeURIComponent(window.location.href);
      var obj = DDLogin({
        id: 'login_container',
        "goto": encodeURIComponent(gotoUrl),
        style: 'border:none;background-color:#FFFFFF;',
        width: '365',
        height: '400'
      });

      var handleMessage = function handleMessage(event) {
        var origin = event.origin;
        console.log('origin', event.origin);

        if (origin == 'https://login.dingtalk.com') {
          //判断是否来自ddLogin扫码事件。
          var loginTmpCode = event.data;
          var redirectUrl = 'https://oapi.dingtalk.com/connect/oauth2/sns_authorize?appid=dingoakne99srqra6hldv2&response_type=code&scope=snsapi_login&state=STATE&redirect_uri=' + encodeURIComponent(window.location.href) + '&loginTmpCode=' + loginTmpCode; //获取到loginTmpCode后就可以在这里构造跳转链接进行跳转了

          window.location.href = redirectUrl;
        }
      };

      if (typeof window.addEventListener != 'undefined') {
        window.addEventListener('message', handleMessage, false);
      } else if (typeof window.attachEvent != 'undefined') {
        window.attachEvent('onmessage', handleMessage);
      }
    }
  }, {
    key: "ddLoginIn",
    value: function ddLoginIn(code) {
      var _this4 = this;

      Http.getOA({
        query: {
          TmpAuthCode: code
        },
        cacheBust: true
      }).then(function (response) {
        if (response && response.data && response.data.getMe) {
          var tk = response.data.getMe[0].token;
          _this4.globalConfig.token = tk;
          var url = window.location.href; //获取当前页面的url

          if (url.indexOf('&code') != -1) {
            //判断是否存在参数
            url = (_readOnlyError("url"), url.replace(/(\&code|#)[^'"]*/, '')); //去除参数

            window.history.pushState({}, 0, url);
          }

          _this4.isSignIn = true;

          _this4.getUserInfoAndConfig();
        } else {
          _this4.handleLoginError(); // msgUtils.fault("登录失败，请检查用户名或密码");
          // msgUtils.fault("登录失败，" + error.message);


          _this4.hasTry = true; //已经输错过密码
        }
      });
    }
  }, {
    key: "qrcodeLogin",
    value: function qrcodeLogin(code) {
      var _this5 = this;

      var self = this;
      Http.generatetokenByqrcode({
        f: "json",
        expiration: self.globalConfig.expiration || 43200000,
        referer: self.globalConfig.client,
        skipMenuTest: 1,
        qrcode: code
      }, {
        cacheBust: true
      }).then(function (response) {
        if (response.token) {
          self.globalConfig.token = response.token;
          self.updateConfig && self.updateConfig(_this5.globalConfig);
          self.isSignIn = true;
          self.getUserInfoAndConfig();
          console.log("===getUserInfoAndConfig===");
        } else {
          _antd.message.error("登录失败," + response.message);

          self.events.emit('loginError', response);
          setTimeout(function () {
            self.handleLoginError(function () {
              window.location.href = REDIRECT_URI;
            });
          }, 600);
        }
      })["catch"](function (error) {
        _antd.message.error("登录失败," + response.message);

        self.events.emit('loginError', response);
        setTimeout(function () {
          self.handleLoginError(function () {
            window.location.href = REDIRECT_URI;
          });
        }, 600);
      });
    }
  }, {
    key: "otherLoginIn",
    value: function otherLoginIn(usr, pwd) {
      var _this6 = this;

      var uesrName = (0, _jsBase.decode)(usr.substring(0, usr.length - 3)),
          password = (0, _jsBase.decode)(pwd.substring(0, pwd.length - 3));
      Http.generateToken({
        f: 'json',
        expiration: this.globalConfig.expiration,
        //token过期时间(单位：秒)
        client: 'referer',
        username: uesrName,
        password: (0, _sha["default"])(password).toUpperCase(),
        referer: this.globalConfig.client,
        skipMenuTest: 1
      }).then(function (response) {
        if (response && response.token) {
          var tk = response.token;
          _this6.globalConfig.token = tk;
          Http.getUserInfo({
            token: tk,
            subOID: 'subOID',
            site: _this6.getLocalSiteBytoken(tk)
          }, {
            cacheBust: true,
            ignoreSite: true
          }).then(function (response) {
            debugger;

            if (response && response.errMsg) {
              this.globalConfig.userInfo = {};

              if (response.data.Groups && response.data.Groups instanceof Array && response.data.Groups.length) {
                this.globalConfig.userInfo.Groups = response.data.Groups;
              }

              self.updateConfig && self.updateConfig(self.globalConfig);
              this.getUserInfoAndConfig();
            }
          });
        } else {
          _this.handleLoginError();

          _antd.message.error('登录失败');

          _this6.hasTry = true;
        }
      })["catch"](function (error) {
        _this.handleLoginError();

        _antd.message.error('登录失败');

        _this6.hasTry = true;
      });
    }
  }, {
    key: "getUserInfoAndConfig",
    value: function getUserInfoAndConfig(failCallback, flag, industry) {
      debugger;
      var token = this.globalConfig.token;

      var site = _jsCookie["default"].get('site');

      var self = this;
      var _industrySite = null;
      debugger;

      if (industry) {
        debugger;
        var userInfo = self.globalConfig.userInfo && self.globalConfig.userInfo.Groups && self.globalConfig.userInfo.Groups instanceof Array ? self.globalConfig.userInfo.Groups.find(function (enter) {
          return enter.industry === industry;
        }) : null;

        if (userInfo) {
          self.globalConfig.userInfo = {
            site: userInfo.site ? userInfo.site : null,
            Groups: self.globalConfig.userInfo.Groups
          };
          _industrySite = userInfo.site ? userInfo.site : null; // self.globalConfig.Industry = industry

          self.updateConfig && self.updateConfig(self.globalConfig);
        }
      } else if (!!site && self.isSignIn) {
        self.globalConfig.userInfo = {
          site: decodeURIComponent((0, _jsBase.decode)(site)),
          Groups: self.globalConfig.userInfo && self.globalConfig.userInfo.Groups && self.globalConfig.userInfo.Groups instanceof Array ? self.globalConfig.userInfo.Groups : null
        };
        self.updateConfig && self.updateConfig(self.globalConfig);
      }

      if (self.isSignIn || !!industry) {
        debugger;
        Http.getUserInfo({
          token: token,
          subOID: 'subOID',
          industry: industry,
          site: _industrySite ? _industrySite : this.getLocalSiteBytoken(token) //self.globalConfig.userInfo.site ? self.globalConfig.userInfo.site: this.getLocalSiteBytoken(token),
          //industrySite ? _industrySite : this.getLocalSiteBytoken(token),

        }, {
          ignoreSite: true,
          'request.preventCache': Date.now()
        }).then(function (response) {
          try {
            debugger;

            if (response && !response.errMsg) {
              self.globalConfig.userInfo = Object.assign({}, response, self.globalConfig.userInfo);
              var date = new Date();
              date.setTime(date.getTime() + 24 * 60 * 60 * 1000); // date = date.toGMTString();

              var encodeSite = (0, _jsBase.encode)(encodeURIComponent(response.site));

              _jsCookie["default"].set("site", encodeSite, {
                expires: date,
                path: "/"
              });

              self.globalConfig.Industry = industry;
              self.updateConfig && self.updateConfig(self.globalConfig);
              var loginSite = {};
              loginSite[token] = response.site; // Cookie.set()

              localStorage.setItem("loginSite", JSON.stringify(loginSite));
              self.writeLogs();
              self.getIndustry(flag, token, industry);
            } else {
              if (self.goLogin()) {
                return false;
              }

              self.handleLoginError(failCallback);
            }

            self.updateConfig && self.updateConfig(self.globalConfig);
          } catch (error) {
            if (self.goLogin()) {
              return false;
            }

            self.handleLoginError(failCallback);
            console.log(error);
          }
        })["catch"](function (error) {
          if (self.goLogin()) {
            return false;
          }

          self.handleLoginError(failCallback);
          console.log(error);
        });
      } else {
        try {
          self.writeLogs();
          self.getIndustry(flag, token);
        } catch (error) {
          if (self.goLogin()) {
            return false;
          }

          self.handleLoginError(failCallback);
          console.log(error);
        }
      }
    }
  }, {
    key: "login",
    value: function login(usr, pwd, userPhone, isRememberPWD) {
      var _this7 = this;

      this.events.removeAllListeners('loginError');
      var self = this;
      Http.generateToken({
        f: 'json',
        expiration: this.globalConfig.expiration,
        //token过期时间(单位：秒)
        client: 'referer',
        username: usr,
        password: pwd ? (0, _sha["default"])(pwd).toUpperCase() : "",
        referer: this.globalConfig.client,
        skipMenuTest: 1,
        userPhone: userPhone,
        'request.preventCache': Date.now()
      }, {
        ignoreSite: true
      }).then(function (response) {
        debugger;

        if (response && response.token) {
          debugger;
          var token = response.token;

          _jsCookie["default"].set('token', token);

          var exp = 86400000;
          _this7.globalConfig.token = token;

          if (isRememberPWD) {
            _jsCookie["default"].set(_this7.globalConfig.client, token, {
              expires: exp / (24 * 60 * 60 * 1000),
              path: '/'
            });

            _jsCookie["default"].set('token', token, {
              expires: exp / (24 * 60 * 60 * 1000),
              path: '/'
            });
          }

          _this7.isSignIn = true;
          _this7.updateConfig && _this7.updateConfig(_this7.globalConfig);

          _this7.getUserInfoAndConfig();
        } else {
          self.hasTry = true;
          self.events.emit('loginError', response);

          _antd.message.error(response.error.message);

          self.callback && self.callback(false);
        }
      })["catch"](function (error) {
        self.hasTry = true;
        self.handleLoginError();
        self.events.emit('loginError', error.message);

        _antd.message.error("登录服务异常");

        console.log('登录失败', error.message);
      });
    }
  }, {
    key: "loginHandler",
    value: function loginHandler(user, pwd, userPhone, isRememberPWD, ref) {
      var self = this;

      if (user && pwd) {
        if (self.loginFailed && self.captchaObj) {
          self.captchaObj.verify();
        } else {
          if (self.hasTry) {
            self.slideVerify(ref, function () {
              self.login(user, pwd, userPhone, isRememberPWD);
            });
          } else {
            self.login(user, pwd, userPhone, isRememberPWD);
          }
        }
      }
    }
  }, {
    key: "phoneLoginFormHandler",
    value: function phoneLoginFormHandler(userPhone, captcha) {
      this.login('', '', userPhone);
    }
  }, {
    key: "slideVerify",
    value: function slideVerify(ref, _onSuccess, onFail, onRefresh) {
      this.events.emit('loginVisible', true);

      if (this.renderVerify) {
        this.renderVerify.destroy();
      }

      this.renderVerify = new _SlideVerify["default"]();
      this.renderVerify.render({
        container: ref.current,
        onSuccess: function onSuccess() {
          _onSuccess && _onSuccess();
        }
      });
    }
  }, {
    key: "getLocalSites",
    value: function getLocalSites() {
      var localSite = localStorage.getItem("loginSite"),
          value = {};

      if (localSite) {
        value = JSON.parse(localSite);
      }

      return value;
    }
  }]);

  return Login;
}();

var _default = Login;
exports["default"] = _default;