From 5046d0d13dc6a8563b8e54e31913bc44cfa1072f Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期二, 26 四月 2022 19:23:18 +0800
Subject: [PATCH] 2022-04-26

---
 src/templates/zshare/editTable/index.jsx |   54 +++++++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 49 insertions(+), 5 deletions(-)

diff --git a/src/templates/zshare/editTable/index.jsx b/src/templates/zshare/editTable/index.jsx
index 347b021..ef0ff17 100644
--- a/src/templates/zshare/editTable/index.jsx
+++ b/src/templates/zshare/editTable/index.jsx
@@ -3,7 +3,7 @@
 import { is, fromJS } from 'immutable'
 import { DndProvider, DragSource, DropTarget } from 'react-dnd'
 import { Table, Input, InputNumber, Popconfirm, Form, Select, Radio, Cascader, notification, message, Modal, Typography } from 'antd'
-import { CopyOutlined, EditOutlined, DeleteOutlined, SnippetsOutlined } from '@ant-design/icons'
+import { CopyOutlined, EditOutlined, DeleteOutlined, SnippetsOutlined, SwapOutlined } from '@ant-design/icons'
 
 import Utils from '@/utils/utils.js'
 import ColorSketch from '@/mob/colorsketch'
@@ -12,6 +12,7 @@
 import CusSwitch from './cusSwitch'
 import zhCN from '@/locales/zh-CN/model.js'
 import enUS from '@/locales/en-US/model.js'
+import MKEmitter from '@/utils/events.js'
 import './index.scss'
 
 const MkEditIcon = asyncComponent(() => import('@/components/mkIcon'))
@@ -110,10 +111,12 @@
       )
     } else if (inputType === 'radio') {
       return (
-        <Radio.Group>
+        <Radio.Group style={{whiteSpace: 'nowrap'}}>
           {options.map((item, i) => (<Radio key={i} value={item.field || item.value}> {item.label || item.text} </Radio>))}
         </Radio.Group>
       )
+    } else if (inputType === 'textarea') {
+      return <Input.TextArea autoSize={true} placeholder=""/>
     } else {
       return <Input onPressEnter={() => this.getValue(form)}/>
     }
@@ -131,7 +134,7 @@
 
   renderCell = (form) => {
     const { getFieldDecorator } = form
-    const { editing, dataIndex, title, record, children, className, required, inputType } = this.props
+    const { editing, dataIndex, title, record, children, className, required, inputType, rules } = this.props
 
     return (
       <td className={className}>
@@ -142,7 +145,8 @@
                 {
                   required: required,
                   message: ['number', 'text', 'input'].includes(inputType) ? `${eTDict['form.required.input']} ${title}!` : `${eTDict['form.required.select']} ${title}!`,
-                }
+                },
+                ...rules
               ],
               initialValue: inputType === 'multiStr' ? (record[dataIndex] ? record[dataIndex].split(',') : []) : record[dataIndex],
             })(this.getInput(form))}
@@ -171,6 +175,7 @@
     data: [],
     editingKey: '',
     visible: false,
+    editLineId: '',
     columns: []
   }
 
@@ -217,6 +222,7 @@
             <div className={'edit-operation-btn' + (editingKey !== '' ? ' disabled' : '')} style={{minWidth: '110px', whiteSpace: 'nowrap'}}>
               {actions.includes('edit') ? <span className="primary" onClick={() => {editingKey === '' && this.edit(record.uuid)}}><EditOutlined /></span> : null}
               {actions.includes('copy') ? <span className="copy" onClick={() => {editingKey === '' && this.copy(record)}}><CopyOutlined /></span> : null}
+              {actions.includes('status') ? <span className="status" onClick={() => {editingKey === '' && this.handleStatus(record)}}><SwapOutlined /></span> : null}
               {actions.includes('del') && editingKey === '' ? <Popconfirm
                 overlayClassName="popover-confirm"
                 title={eTDict['model.query.delete']}
@@ -270,6 +276,21 @@
     }
   }
 
+  componentDidMount () {
+    MKEmitter.addListener('editLineId', this.getEditLineId)
+  }
+
+  componentWillUnmount () {
+    this.setState = () => {
+      return
+    }
+    MKEmitter.removeListener('editLineId', this.getEditLineId)
+  }
+
+  getEditLineId = (id) => {
+    this.setState({ editLineId: id })
+  }
+
   isEditing = record => record.uuid === this.state.editingKey
 
   cancel = () => {
@@ -311,6 +332,11 @@
     }
 
     try {
+      let srcid = localStorage.getItem(window.location.href.split('#')[0] + 'srcId')
+      if (srcid) {
+        msg.$srcId = srcid
+      }
+      
       msg = window.btoa(window.encodeURIComponent(JSON.stringify(msg)))
     } catch (e) {
       console.warn('Stringify Failure')
@@ -390,6 +416,22 @@
         })
       }
       message.success('绮樿创鎴愬姛銆�')
+    })
+  }
+
+  handleStatus = (record) => {
+    const { data } = this.state
+
+    record.status = record.status === 'false' ? 'true' : 'false'
+
+    let newData = data.map(item => {
+      if (record.uuid === item.uuid) return record
+
+      return item
+    })
+    
+    this.setState({ data: newData }, () => {
+      this.props.onChange(newData)
     })
   }
 
@@ -508,6 +550,7 @@
 
   render() {
     const { actions, indexShow } = this.props
+    const { editLineId } = this.state
 
     let components = {
       body: {
@@ -534,6 +577,7 @@
           inputType: col.inputType,
           dataIndex: col.dataIndex,
           options: col.options || [],
+          rules: col.rules || [],
           min: col.min || 0,
           max: col.max || 500,
           unlimit: col.unlimit,
@@ -570,7 +614,7 @@
               components={components}
               dataSource={data}
               columns={columns}
-              rowClassName="editable-row"
+              rowClassName={record => !editLineId || editLineId !== record.uuid ? 'editable-row' : 'editable-row active'}
               pagination={false}
               onRow={(record, index) => ({
                 index,

--
Gitblit v1.8.0