From ac1d52c46ff9019fcc93cf3d5e7ab17cf850824e Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期四, 10 八月 2023 16:05:24 +0800
Subject: [PATCH] 2023-08-10

---
 src/menu/components/share/markcomponent/index.jsx |   88 +++++++++++++++++++++++++++++++++-----------
 1 files changed, 66 insertions(+), 22 deletions(-)

diff --git a/src/menu/components/share/markcomponent/index.jsx b/src/menu/components/share/markcomponent/index.jsx
index 1da2ecd..246f2ea 100644
--- a/src/menu/components/share/markcomponent/index.jsx
+++ b/src/menu/components/share/markcomponent/index.jsx
@@ -1,7 +1,7 @@
 import React, {Component} from 'react'
 import PropTypes from 'prop-types'
 import { fromJS } from 'immutable'
-import { Modal, Col } from 'antd'
+import { Modal, Col, notification } from 'antd'
 import { AntDesignOutlined } from '@ant-design/icons'
 
 import Utils from '@/utils/utils.js'
@@ -9,9 +9,6 @@
 import MarkForm from './markform'
 import MkIcon from '@/components/mk-icon'
 import { minkeIconSystem } from '@/utils/option.js'
-import zhCN from '@/locales/zh-CN/model.js'
-import enUS from '@/locales/en-US/model.js'
-import '@/assets/css/table.scss'
 import './index.scss'
 
 const EditTable = asyncComponent(() => import('@/templates/zshare/editTable'))
@@ -19,13 +16,13 @@
 
 class MarkColumn extends Component {
   static propTpyes = {
+    field: PropTypes.any,
     columns: PropTypes.array,  // 鏄剧ず鍒�
     marks: PropTypes.object,
     onSubmit: PropTypes.func
   }
 
   state = {
-    dict: sessionStorage.getItem('lang') !== 'en-US' ? zhCN : enUS,
     marks: null,
     columns: null,
     visible: false,
@@ -35,8 +32,31 @@
         dataIndex: 'field',
         width: '16%',
         editable: true,
+        unique: true,
+        uniqueFunc: (data, item) => {
+          let index = data.findIndex(mark => mark.uuid !== item.uuid && mark.contrastValue === item.contrastValue && mark.match === item.match && mark.field.join('') === item.field.join(''))
+
+          if (index > -1) {
+            notification.warning({
+              top: 92,
+              message: '姝ゆ爣璁板凡瀛樺湪锛�',
+              duration: 5
+            })
+            return false
+          }
+          return true
+        },
         inputType: 'cascader',
         options: [],
+        rules: [{
+          validator: (rule, value, callback) => {
+            if (value[1] === 'dynamic' && value[0] === value[2]) {
+              callback('瀵规瘮瀛楁涓嶅彲鐩稿悓锛�')
+            } else {
+              callback()
+            }
+          }
+        }],
         render: text => {
           return (
             <div>{text[0]}  VS  {text[2] ? text[2] : '闈欐�佸��'}</div>
@@ -63,7 +83,15 @@
         width: '16%',
         editable: true,
         required: false,
-        inputType: 'input'
+        inputType: 'input',
+        render: (text, record) => {
+          if (!text) return ''
+          if (record.field && record.field[1] === 'dynamic') {
+            return <span title="瀵规瘮鍔ㄦ�佸�兼椂锛屽姣斿�兼棤鏁堛��" style={{textDecoration: 'line-through'}}>{text}</span>
+          } else {
+            return text
+          }
+        }
       },
       {
         title: '棰滆壊',
@@ -104,18 +132,24 @@
   markChange = (values) => {
     let _marks = fromJS(this.state.marks).toJS()
 
-    if (values.uuid) {
-      _marks = _marks.map(item => {
-        if (item.uuid === values.uuid) {
-          return values
-        } else {
-          return item
-        }
+    let has = false
+    _marks.forEach(mark => {
+      if (mark.contrastValue === values.contrastValue && mark.match === values.match && mark.field.join('') === values.field.join('')) {
+        has = true
+      }
+    })
+
+    if (has) {
+      notification.warning({
+        top: 92,
+        message: '姝ゆ爣璁板凡瀛樺湪锛�',
+        duration: 5
       })
-    } else {
-      values.uuid = Utils.getuuid()
-      _marks.push(values)
+      return
     }
+
+    values.uuid = Utils.getuuid()
+    _marks.push(values)
 
     this.setState({
       marks: _marks
@@ -138,9 +172,10 @@
     _columns.unshift({field: '$Index', label: '搴忓彿'})
 
     let options = _columns.map(col => {
+      let label = `${col.field}锛�${col.label}锛塦
       return {
         value: col.field,
-        label: col.label,
+        label: label,
         isLeaf: false,
         children: [
           {
@@ -151,9 +186,10 @@
             value: 'dynamic',
             label: '鍔ㄦ�佸��',
             children: _columns.map(cell => {
+              let _label = `${cell.field}锛�${cell.label}锛塦
               return {
                 value: cell.field,
-                label: cell.label
+                label: _label
               }
             })
           }
@@ -258,6 +294,9 @@
       if (item.signType && item.signType[0] === 'icon') {
         item.signType = [item.signType[0] + item.signType[1], item.signType[2], item.signType[3]]
       }
+      if (!item.uuid) {
+        item.uuid = Utils.getuuid()
+      }
       return item
     })
 
@@ -300,6 +339,11 @@
           item.fontColor = ''
         }
       }
+
+      if (item.contrastValue) {
+        item.contrastValue = item.contrastValue.replace(/\t+|\v+|\s+/g, '')
+      }
+
       if (val && item.contrastValue === val) {
         save = true
       }
@@ -325,23 +369,23 @@
   }
 
   render() {
-    const { marks, markColumns, visible, options, signs, dict } = this.state
+    const { marks, markColumns, visible, options, signs } = this.state
 
     return (
       <div style={{display: 'inline-block'}}>
         <AntDesignOutlined className="profile" title="鏍囪" onClick={this.resetMark} />
         <Modal
           wrapClassName="model-table-column-mark-modal"
-          title={'鏍囪璁剧疆'}
+          title="鏍囪璁剧疆"
           visible={visible}
           width={'75vw'}
           maskClosable={false}
-          okText={dict['model.submit']}
+          okText="鎻愪氦"
           onOk={this.markSubmit}
           onCancel={() => { this.setState({ visible: false }) }}
           destroyOnClose
         >
-          <MarkForm dict={dict} signs={signs} columns={options} markChange={this.markChange}/>
+          <MarkForm field={this.props.field} signs={signs} columns={options} markChange={this.markChange}/>
           <Col style={{fontSize: '12px', color: '#757575', paddingLeft: '10px'}} span={24}>娉細浠庝笂鍒颁笅锛屽尮閰嶇涓�涓鍚堟潯浠剁殑鏍囪銆�</Col>
           <EditTable actions={['edit', 'move', 'del']} data={marks} columns={markColumns} onChange={(marks) => this.setState({marks})}/>
         </Modal>

--
Gitblit v1.8.0