From 34e7681fd12b1c4e4994d3bea1a553870e10bc50 Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期六, 11 三月 2023 17:58:54 +0800
Subject: [PATCH] 2023-03-11

---
 src/pc/components/login/normal-login/index.jsx |  161 ++++++++++++++++++++++++++++++++++-------------------
 1 files changed, 104 insertions(+), 57 deletions(-)

diff --git a/src/pc/components/login/normal-login/index.jsx b/src/pc/components/login/normal-login/index.jsx
index 9f0d75e..60a3e17 100644
--- a/src/pc/components/login/normal-login/index.jsx
+++ b/src/pc/components/login/normal-login/index.jsx
@@ -1,21 +1,22 @@
 import React, {Component} from 'react'
 import PropTypes from 'prop-types'
 import { is, fromJS } from 'immutable'
-import { Icon, Popover } from 'antd'
+import { Popover } from 'antd'
+import { EditOutlined, FontColorsOutlined, ToolOutlined, DeleteOutlined } from '@ant-design/icons'
 
 import asyncIconComponent from '@/utils/asyncIconComponent'
 import asyncComponent from '@/utils/asyncComponent'
 
 import MKEmitter from '@/utils/events.js'
-import zhCN from '@/locales/zh-CN/model.js'
-import enUS from '@/locales/en-US/model.js'
 import { resetStyle } from '@/utils/utils-custom.js'
+import getWrapForm from './options'
 import './index.scss'
 
 const LoginForm = asyncComponent(() => import('./loginform'))
-const WrapComponent = asyncIconComponent(() => import('../wrapsetting'))
+const SignForm = asyncComponent(() => import('./signform'))
+const NormalForm = asyncIconComponent(() => import('@/components/normalform'))
 
-class PropCardEditComponent extends Component {
+class LoginComponent extends Component {
   static propTpyes = {
     card: PropTypes.object,
     deletecomponent: PropTypes.func,
@@ -23,9 +24,8 @@
   }
 
   state = {
-    dict: sessionStorage.getItem('lang') !== 'en-US' ? zhCN : enUS,
     card: null,
-    back: false
+    active: 'login'
   }
 
   UNSAFE_componentWillMount () {
@@ -36,20 +36,11 @@
       let _card = {
         uuid: card.uuid,
         type: card.type,
-        floor: card.floor,
-        tabId: card.tabId || '',
-        parentId: card.parentId || '',
-        dataName: card.dataName || '',
         width: card.width || 24,
         name: card.name,
         subtype: card.subtype,
-        wrap: { name: card.name, width: card.width || 24, loginWays: ['uname_pwd'] },
-        style: { background: '#ffffff', width: '330px', borderRadius: '4px', marginLeft: '55vw'},
-        loginWays: [
-          {type: 'uname_pwd', label: '璐﹀彿瀵嗙爜', remember: 'true'},
-          {type: 'sms_vcode', label: '鐭俊楠岃瘉鐮�'},
-          {type: 'app_scan', label: '鎵爜鐧诲綍'},
-        ]
+        wrap: { name: card.name, width: card.width || 24, classify: 'login', loginWays: ['uname_pwd'], shortcut: 'remember' },
+        style: { background: '#ffffff', width: '330px', borderRadius: '4px', marginLeft: '55vw'}
       }
 
       if (ismob) {
@@ -67,23 +58,29 @@
         _card.wrap.name = card.name
         _card.style = config.style
       }
-      this.setState({
-        card: _card
-      })
-      this.props.updateConfig(_card)
+
+      this.updateComponent(_card)
     } else {
       let _card = fromJS(card).toJS()
-      if (_card.loginWays.length === 2) {
-        _card.loginWays.push({type: 'app_scan', label: '鎵爜鐧诲綍'})
+      if (_card.wrap.link && _card.wrap.link === 'menu') {
+        _card.wrap.linkmenu = _card.uuid
       }
+      _card.wrap.classify = _card.wrap.classify || 'login'
+
+      let active = 'login'
+      if (_card.wrap.classify === 'signin') {
+        active = 'signin'
+      }
+      if (!_card.style.minHeight && _card.wrap.height) {
+        _card.style.minHeight = _card.wrap.height
+        delete _card.wrap.height
+      }
+
       this.setState({
+        active,
         card: _card
       })
     }
-  }
-
-  componentDidMount () {
-    MKEmitter.addListener('submitStyle', this.getStyle)
   }
 
   shouldComponentUpdate (nextProps, nextState) {
@@ -97,58 +94,84 @@
     this.setState = () => {
       return
     }
-    MKEmitter.removeListener('submitStyle', this.getStyle)
   }
 
   /**
    * @description 鍗$墖琛屽灞備俊鎭洿鏂帮紙鏁版嵁婧愶紝鏍峰紡绛夛級
    */
-  updateComponent = (component) => {
+  updateComponent = (card) => {
+    card.width = card.wrap.width
+    card.name = card.wrap.name
+
+    card.errors = []
+
+    if (!card.wrap.linkmenu) {
+      card.errors.push({ level: 0, detail: '鐧诲綍鍚庤烦杞彍鍗曟湭璁剧疆锛�'})
+    }
+    
     this.setState({
-      card: component
+      card: card
     })
 
-    component.width = component.wrap.width
-    component.name = component.wrap.name
-
-    this.props.updateConfig(component)
+    this.props.updateConfig(card)
   }
 
   changeStyle = () => {
     const { card } = this.state
 
-    MKEmitter.emit('changeStyle', [card.uuid], ['width', 'background', 'border', 'padding', 'margin'], card.style)
+    MKEmitter.emit('changeStyle', ['width', 'background', 'border', 'padding', 'margin', 'clear', 'minHeight'], card.style, this.getStyle)
   }
 
-  getStyle = (comIds, style) => {
-    const { card } = this.state
-
-    if (comIds.length !== 1 || comIds[0] !== card.uuid) return
-
-    let _card = {...card, style}
-
-    this.setState({
-      card: _card
-    })
+  getStyle = (style) => {
+    let _card = {...this.state.card, style}
     
-    this.props.updateConfig(_card)
+    this.updateComponent(_card)
   }
 
   clickComponent = (e) => {
     if (sessionStorage.getItem('style-control') === 'true' || sessionStorage.getItem('style-control') === 'component') {
       e.stopPropagation()
-      MKEmitter.emit('clickComponent', this.state.card)
+      MKEmitter.emit('clickComponent', this.state.card.uuid, null, (style) => {
+        let _card = {...this.state.card}
+        _card.style = {..._card.style, ...style}
+
+        this.setState({ card: _card })
+        this.props.updateConfig(_card)
+      })
     }
   }
 
+  getWrapForms = () => {
+    const { card } = this.state
+
+    return getWrapForm(card.wrap)
+  }
+
+  updateWrap = (res) => {
+    let card = fromJS(this.state.card).toJS()
+
+    card.wrap = res
+
+    let active = 'login'
+    if (res.classify === 'signin') {
+      active = 'signin'
+    }
+    this.setState({
+      active
+    })
+
+    this.updateComponent(card)
+  }
+
   render() {
-    const { card, dict } = this.state
+    const { card, active } = this.state
     let style = resetStyle(card.style)
-    if (card.wrap.maxWidth) {
-      style.maxWidth = card.wrap.maxWidth
+
+    if (card.style.width) {
       let left = style.marginLeft && style.marginLeft !== '0px' ? style.marginLeft : 'auto'
       let right = style.marginRight && style.marginRight !== '0px' ? style.marginRight : 'auto'
       style.margin = (style.marginTop || 0) + ' ' + right + ' ' + (style.marginBottom || 0) + ' ' + left
+      style.maxWidth = `calc(100% - ${style.marginLeft || '0px'} - ${style.marginRight || '0px'})`
       delete style.marginLeft
       delete style.marginRight
       delete style.marginTop
@@ -159,17 +182,41 @@
       <div className="login-edit-box" style={style} onClick={this.clickComponent} id={card.uuid}>
         <Popover overlayClassName="mk-popover-control-wrap" mouseLeaveDelay={0.2} mouseEnterDelay={0.2} content={
           <div className="mk-popover-control">
-            <WrapComponent config={card} updateConfig={this.updateComponent} />
-            <Icon className="style" title="璋冩暣鏍峰紡" onClick={this.changeStyle} type="font-colors" />
-            <Icon className="close" title="鍒犻櫎缁勪欢" type="delete" onClick={() => this.props.deletecomponent(card.uuid)} />
+            <NormalForm title="娉ㄥ唽/鐧诲綍璁剧疆" width={800} update={this.updateWrap} getForms={this.getWrapForms}>
+              <EditOutlined style={{color: '#1890ff'}} title="缂栬緫"/>
+            </NormalForm>
+            <FontColorsOutlined className="style" title="璋冩暣鏍峰紡" onClick={this.changeStyle}/>
+            <DeleteOutlined className="close" title="鍒犻櫎缁勪欢" onClick={() => this.props.deletecomponent(card.uuid)} />
           </div>
         } trigger="hover">
-          <Icon type="tool" />
+          <ToolOutlined />
         </Popover>
-        <LoginForm loginWays={card.loginWays} wrap={card.wrap} menuId={card.uuid} dict={dict} />
+        {card.wrap.loginWays && active === 'login' ? <LoginForm wrap={card.wrap} changeway={() => this.setState({active: 'signin'})}/> : null}
+        {card.wrap.signWays && active === 'signin' ? <SignForm wrap={card.wrap} changeway={() => this.setState({active: 'login'})}/> : null}
+        <div className="component-name">
+          <div className="center">
+            <div className="title" onDoubleClick={() => {
+              let oInput = document.createElement('input')
+              oInput.value = card.uuid
+              document.body.appendChild(oInput)
+              oInput.select()
+              document.execCommand('Copy')
+              document.body.removeChild(oInput)
+            }}>{card.name}</div>
+            <div className="content">
+              {card.errors && card.errors.map((err, index) => {
+                if (err.level === 0) {
+                  return <span key={index} className="error">{err.detail}</span>
+                } else {
+                  return <span key={index} className="waring">{err.detail}锛�</span>
+                }
+              })}
+            </div>
+          </div>
+        </div>
       </div>
     )
   }
 }
 
-export default PropCardEditComponent
\ No newline at end of file
+export default LoginComponent
\ No newline at end of file

--
Gitblit v1.8.0