From b09b821ef36fd1ea979e9a5daa98e95732ac81d5 Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期三, 16 七月 2025 18:16:00 +0800
Subject: [PATCH] 2025-07-16

---
 src/pc/components/login/normal-login/loginform.jsx |  148 +++++++++++++++++++++++++++++++++++++------------
 1 files changed, 112 insertions(+), 36 deletions(-)

diff --git a/src/pc/components/login/normal-login/loginform.jsx b/src/pc/components/login/normal-login/loginform.jsx
index ddfe4a1..8790dd8 100644
--- a/src/pc/components/login/normal-login/loginform.jsx
+++ b/src/pc/components/login/normal-login/loginform.jsx
@@ -1,54 +1,103 @@
 import React, {Component} from 'react'
 import PropTypes from 'prop-types'
 import { is, fromJS } from 'immutable'
-import { Form, Icon, Input, Button, Checkbox } from 'antd'
+import { Form, Input, Button, Checkbox, notification } from 'antd'
+import { QrcodeOutlined, UserOutlined, LockOutlined } from '@ant-design/icons'
 
+import asyncElementComponent from '@/utils/asyncComponent'
 import MKEmitter from '@/utils/events.js'
 import './index.scss'
 
+const QrCode = asyncElementComponent(() => import('@/components/qrcode'))
+
 class LoginTabForm extends Component {
   static propTpyes = {
-    dict: PropTypes.object,
-    menuId: PropTypes.string,
-    loginWays: PropTypes.array,
-    wrap: PropTypes.array,
+    wrap: PropTypes.object,
+    changeway: PropTypes.func
   }
 
   state = {
     activeWay: null,
     loginWays: [],
+    scanWay: null
   }
 
   UNSAFE_componentWillMount () {
-    const { loginWays, wrap } = this.props
+    const { wrap } = this.props
 
-    let _loginWays = []
-    loginWays.forEach(item => {
-      if (!wrap.loginWays || wrap.loginWays.includes(item.type)) {
-        _loginWays.push(item)
+    let scanWay = null
+
+    let loginWays = []
+    wrap.loginWays.forEach(way => {
+      if (way === 'sms_vcode') {
+        loginWays.push({
+          type: 'sms_vcode',
+          label: '鐭俊鐧诲綍',
+          tempId: wrap.tempId,
+          sort: 2
+        })
+      } else if (way === 'uname_pwd') {
+        loginWays.push({
+          type: 'uname_pwd',
+          label: '璐﹀彿鐧诲綍',
+          shortcut: wrap.shortcut,
+          sort: 1
+        })
+      } else if (way === 'app_scan') {
+        scanWay = {
+          type: 'app_scan',
+          label: '鎵爜鐧诲綍',
+          sort: 3
+        }
+        loginWays.push(scanWay)
       }
     })
 
+    loginWays.sort((a, b) => a.sort - b.sort)
+
     this.setState({
-      loginWays: _loginWays,
-      activeWay: _loginWays[0],
+      loginWays: loginWays,
+      activeWay: loginWays[0],
+      scanWay
     })
   }
 
   UNSAFE_componentWillReceiveProps (nextProps) {
-    const { loginWays, wrap } = this.props
+    const { wrap } = this.props
 
     if (!is(fromJS(wrap), fromJS(nextProps.wrap))) {
-      let _loginWays = []
-      loginWays.forEach(item => {
-        if (!nextProps.wrap.loginWays || nextProps.wrap.loginWays.includes(item.type)) {
-          _loginWays.push(item)
+      let scanWay = null
+      let loginWays = []
+      nextProps.wrap.loginWays.forEach(way => {
+        if (way === 'sms_vcode') {
+          loginWays.push({
+            type: 'sms_vcode',
+            label: '鐭俊鐧诲綍',
+            tempId: wrap.tempId,
+            sort: 2
+          })
+        } else if (way === 'uname_pwd') {
+          loginWays.push({
+            type: 'uname_pwd',
+            label: '璐﹀彿鐧诲綍',
+            shortcut: wrap.shortcut,
+            sort: 1
+          })
+        } else if (way === 'app_scan') {
+          scanWay = {
+            type: 'app_scan',
+            label: '鎵爜鐧诲綍',
+            sort: 3
+          }
+          loginWays.push(scanWay)
         }
       })
+      loginWays.sort((a, b) => a.sort - b.sort)
 
       this.setState({
-        loginWays: _loginWays,
-        activeWay: _loginWays[0],
+        loginWays: loginWays,
+        activeWay: loginWays[0],
+        scanWay
       })
     }
   }
@@ -58,11 +107,19 @@
   }
 
   changeMenu = () => {
-    const { wrap, menuId } = this.props
+    const { wrap } = this.props
+
+    if (!wrap.linkmenu) {
+      notification.warning({
+        top: 92,
+        message: '璇疯缃叧鑱旇彍鍗曪紒',
+        duration: 5
+      })
+      return
+    }
 
     MKEmitter.emit('changeEditMenu', {
-      fixed: false,
-      MenuID: wrap.link === 'linkmenu' ? wrap.linkmenu : menuId,
+      MenuID: wrap.linkmenu,
       copyMenuId: '',
       MenuNo: '',
       MenuName: ''
@@ -79,31 +136,37 @@
   }
 
   render() {
-    const { activeWay, loginWays } = this.state
+    const { wrap } = this.props
+    const { activeWay, loginWays, scanWay } = this.state
+
+    let style = {}
+    if (wrap.borderRadius) {
+      style.borderRadius = wrap.borderRadius
+    }
 
     return (
       <Form className="login-edit-form">
-        <div className={'login-way-wrap ' + (loginWays.length === 1 ? 'simple' : '')}>
-          {loginWays.map(item => (
-            <div className={'login-way' + (activeWay.type === item.type ? ' active' : '')} onClick={() => this.onChangeTab(item)} key={item.type}>{item.label}</div>
-          ))}
-        </div>
-        {activeWay.type === 'uname_pwd' ? <div className="form-item-wrap">
+        {wrap.topTip !== 'hidden' ? <div className="login-way-title">{activeWay.label}</div> : null}
+        {scanWay && activeWay.type !== 'app_scan' ? <div className="scan-icon" onClick={() => this.onChangeTab(scanWay)}><QrcodeOutlined /></div> : null}
+        {activeWay.type === 'uname_pwd' ? <div className={'form-item-wrap ' + (activeWay.shortcut === 'none' ? 'no-short' : '')}>
           <Form.Item>
             <Input
-              prefix={<Icon type="user" style={{ color: 'rgba(0,0,0,.25)' }} />}
-              placeholder="鐢ㄦ埛鍚�"
+              prefix={<UserOutlined style={{ color: 'rgba(0,0,0,.25)' }} />}
+              placeholder="鐢ㄦ埛鍚�/鎵嬫満鍙�/閭"
               autoComplete="off"
             />
           </Form.Item>
           <Form.Item>
-            <Input.Password placeholder="瀵嗙爜" prefix={<Icon type="lock" style={{ color: 'rgba(0,0,0,.25)' }} />} />
+            <Input.Password placeholder="瀵嗙爜" visibilityToggle={wrap.vispwd !== 'false'} prefix={<LockOutlined style={{ color: 'rgba(0,0,0,.25)' }} />} />
           </Form.Item>
-          <Form.Item className="minline">
+          {!activeWay.shortcut || activeWay.shortcut === 'remember' ? <Form.Item className="minline">
             <Checkbox>璁颁綇瀵嗙爜</Checkbox>
-          </Form.Item>
+          </Form.Item> : null}
+          {activeWay.shortcut === 'autologon' ? <Form.Item className="minline">
+            <Checkbox>鑷姩鐧诲綍</Checkbox>
+          </Form.Item> : null}
           <Form.Item className="btn-login">
-            <Button type="primary" onDoubleClick={() => this.changeMenu()} className="login-form-button">
+            <Button type="primary" style={style} onDoubleClick={() => this.changeMenu()} className="login-form-button">
               鐧诲綍
             </Button>
           </Form.Item>
@@ -127,11 +190,24 @@
             />
           </Form.Item>
           <Form.Item className="btn-login">
-            <Button type="primary" onDoubleClick={() => this.changeMenu()} className="login-form-button">
+            <Button type="primary" style={style} onDoubleClick={() => this.changeMenu()} className="login-form-button">
               鐧诲綍
             </Button>
           </Form.Item>
         </div> : null}
+        {activeWay.type === 'app_scan' ? <div className="form-scan-wrap">
+          <div className="qr-wrap">
+            <QrCode card={{qrWidth: 500, color: '#000000'}} value={'minkesoft'}/>
+          </div>
+          璇蜂娇鐢ㄥ鎴风鎵竴鎵櫥褰�
+        </div> : null}
+        {wrap.classify !== 'login' ? <span className="mk-jump-way" onClick={() => this.props.changeway()}>娌℃湁璐﹀彿锛屽幓娉ㄥ唽锛�</span> : null}
+        <div className={'login-ways ' + (activeWay.type === 'app_scan' ? 'center' : '')}>
+          {loginWays.map(item => {
+            if (item.type === 'app_scan' || activeWay.type === item.type) return null
+            return (<span key={item.type} onClick={() => this.onChangeTab(item)}>{item.label}</span>)
+          })}
+        </div>
       </Form>
     )
   }

--
Gitblit v1.8.0