yulin.js 7.97 KB
/* eslint-disable */
/*
 * @Author: xule;
 * @Date: 2021-11-22
 * @Description:榆林登录页;
 */
import React from 'react';
import styles from './style/yulin.less'
import classNames from 'classnames';
import { connect } from 'react-redux';
import { CheckOutlined } from '@ant-design/icons';
import { withRouter } from '@wisdom-utils/runtime';
import Logo from '@/assets/images/login/榆林/标题.png'
import Code from '@/assets/images/login/榆林/小程序@2x.png'
import MyHead from '@/assets/images/login/榆林/d-我的.png'
import PassWord from '@/assets/images/login/榆林/密码.png'
import Close from '@/assets/oa/login/close.png'
import Open from '@/assets/oa/login/open.png'
import LoginAction from '../login';
import { actionCreators } from '@/containers/App/store';
import Cookies from 'js-cookie';
import QRCode from 'qrcode.react';
import { defaultApp } from '../../../../micro';
const Logger = logger('login');
// 、登录页
class InfoLogin extends React.Component {
  state = {
    loginStyle: false, //true  账号密码登录 false  扫码登录
    isOpen: false,   //查看密码
    isRember: false, //记住密码
    ddOrWeixin: '',
    qrcode: '',//二维码
    codeLenth: 1,
    time: '',
    week: '',
    date: ''
  }
  componentDidMount() {
    let action = new LoginAction(this.props, false, true)
    this.loginEvent(action);
    this.renderQRcode();
    this.renderTime();
  }
  renderQRcode() {
    var me = this;
    var list = globalConfig.qrcode ? globalConfig.qrcode.split("|") : [];
    let str = [];
    if (list.length) {
      list.forEach(function (val, index) {
        if (val && val.replace(/ /g, "").length > 0) {
          str.push(me.creatCodeHtml(val, index));
        }
      })
    } else {
      str.push(<span>手持APP下载未配置</span>);
    }
    this.setState({
      qrcode: str,
      codeLenth: list.length
    })
  }
  renderTime() {
    let me = this;
    setInterval(() => {
      const date = new Date();
      const weekday = ['周日', '周一', '周二', '周三', '周四', '周五', '周六'];
      const time = `${date.getHours() < 10 ? `0${date.getHours()}` : date.getHours()
        }:${date.getMinutes() < 10 ? `0${date.getMinutes()}` : date.getMinutes()}`;
      me.setState({
        time,
        week: weekday[date.getDay()],
        date: date.pattern('yyyy/MM/dd'),
      })
    }, 1000);

  }
  creatCodeHtml(val, index) {
    return (
      <div className={('codeCase codeCase' + index)}>
        <QRCode value={val.replace(/{ip}/ig, globalConfig.ip).split('=')[0]} />
        <div className={styles.codeText}>{val.replace(/{ip}/ig, globalConfig.ip).split('=')[0]}</div>
      </div>);
  }
  // 切换登录方式
  changeloginStyle = () => {
    const { ddOrWeixin } = this.state
    this.setState({
      loginStyle: !this.state.loginStyle,
      ddOrWeixin: ddOrWeixin ? '' : 'dingding'
    }, () => {
      Cookies.set('loginMode', `${this.state.ddOrWeixin ? 'dingding' : 'pdw'}`, {
        path: '/',
      });
      if (this.state.ddOrWeixin === 'dingding') {
        let action = new LoginAction(this.props, false, true)
        action.loginByDD()
      }
    })
  }
  // 查看密码
  seePassWord = (e) => {
    this.setState({
      isOpen: !this.state.isOpen
    })
  }
  // 记住密码
  remberWord = () => {
    this.setState({
      isRember: !this.state.isRember
    })
  }
  // 输入框变化
  handleForm = (e) => {
    const target = e.target
    // 判断事件类型,如果是checkbox返回checked值,不是返回文本框的value值
    const value = target.type == 'checkbox' ? target.checked : target.value;
    // 获取文本框的name值
    const name = target.name
    this.setState({
      [name]: value
    })
  }
  onKeyDownchange(e){
    if(e.keyCode == 13){
      this.loginToWeb5();
  }
  }
  // 登录
  loginToWeb5 = () => {
    const { loginName, passWord, isRember } = this.state
    let action = new LoginAction(this.props, false, true)
    action.loginHandler(loginName, passWord, null, isRember, false)
    this.loginEvent(action)

  }
  // 登录成功事件
  loginEvent(action) {
    action.globalConfig = this.props.global;
    this.props.updateCurrentIndex && this.props.updateCurrentIndex(-1);
    action && action.events.on('loginSuccess', event => {
      this.props.updateCurrentIndex && this.props.updateCurrentIndex(0);
      this.props.history.push(`/?client=${this.props.global.client}`);
      // window.share.event.emit('triggerMicro', this.props.global);
      defaultApp();
    });
    action && action.events.on('loginError', event => {

    });
    action && action.events.on('loginVisible', status => {

    });
  }
  render() {
    const { loginStyle, isOpen, isRember, loginName, passWord, qrcode, codeLenth, time, week, date } = this.state
    return (
      <div className={styles.InfoBg}>
        <div className={styles.IBtimeBox}>
          <span className={styles.IBTtime}>{time}</span>
          <span className={styles.IBTweek}>{week}</span>
          <span className={styles.IBTdate}>{date}</span>
        </div>
        <div className={styles.loginBg}>
          {/* 标题 */}
          <div className={styles.IBtitle}>
            <img src={Logo} alt="" />
          </div>
          <div className={styles.IBcenter}>
            <div className={styles.IBCleft}></div>
            <div className={styles.IBCright}>
              <p className={styles.IBCRnamec}>榆林清水工业园智慧水务平台</p>
              <p className={styles.IBCRnameE}>Smart Water Platform of Yulin Qingshui Industrial Park</p>

              {/* 登录主题 */}
              <form className={styles.loginForm} style={{ display: loginStyle ? 'none' : '' }}>
                <div className={styles.formgroup}>
                  <img className={styles.IBCRimg} src={MyHead} alt="" />
                  <input type="text" className={styles.inputLg} id='loginName' name='loginName' value={loginName} onChange={this.handleForm} placeholder="请输入你的用户名" />
                </div>
                <div className={styles.formgroup}>
                  <img className={styles.IBCRimg} src={PassWord} alt="" />
                  <input type={isOpen ? 'text' : "password"} className={styles.inputLg} onKeyDown={e=> this.onKeyDownchange(e)} id='passWord' name='passWord' value={passWord} onChange={this.handleForm} placeholder="请输入你的密码" />
                  <img className={styles.eyes} src={isOpen ? Open : Close} alt="" onMouseDown={(e) => this.seePassWord(e)} onMouseUp={(e) => this.seePassWord(e)} />
                </div>
                <div className={styles.formgroup} style={{ position: 'relative', marginTop: '20px' }}>
                  <label className={classNames(isRember ? (styles.rmpwdInput, styles.active) : styles.rmpwdInput)} onClick={() => this.remberWord()}>
                    <CheckOutlined style={{ display: isRember ? '' : 'none' }} />
                  </label>
                  <span style={{ color: '#9FA8B3', marginLeft: '10px', fontSize: '14px' }}>记住密码</span>
                </div>
                <div className={styles.submitBtn} onClick={this.loginToWeb5}>登录</div>
              </form>
            </div>
            <div className={styles.codeBox}>
              <img className={styles.codeImg} src={Code} alt="" />
              <div className={styles.codeBig} style={{ width: codeLenth * 148 + 'px' }}>
                {qrcode}
              </div>
            </div>
          </div>
        </div>
      </div>

    )
  }
}
const mapStateToProps = state => ({
  global: state.getIn(['global', 'globalConfig']),
  loginMode: state.getIn(['global', 'loginMode']),
});

const mapDispatchToProps = dispatch => ({
  updateConfig(config) {
    dispatch(actionCreators.getConfig(config));
  },
  createContext(data) {
    dispatch(actionCreators.createContext(data));
  },
  updateLoginMode(mode) {
    dispatch(actionCreators.changeLoginMode(mode));
  },
  updateCurrentIndex(index) {
    dispatch(actionCreators.updateCurrentIndex(index));
  },
});
export default connect(
  mapStateToProps,
  mapDispatchToProps,
)(withRouter(InfoLogin));