From f9455c981f94d5fd89103b1d332baefd039bebb2 Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期五, 25 十月 2024 09:17:14 +0800
Subject: [PATCH] 2024-10-25

---
 src/menu/components/share/markcomponent/index.jsx |  109 +++++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 91 insertions(+), 18 deletions(-)

diff --git a/src/menu/components/share/markcomponent/index.jsx b/src/menu/components/share/markcomponent/index.jsx
index c188601..160c1dd 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'
@@ -32,6 +32,20 @@
         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: [{
@@ -104,7 +118,21 @@
             'line-through': '涓垝绾�',
             'icon': '鍥炬爣',
             'iconfront': '鍥炬爣',
-            'iconback': '鍥炬爣',
+            'iconback': '鍥炬爣'
+          }
+
+          if (text[0] === 'indent') {
+            return (
+              <div>缂╄繘/{text[1]}涓瓧绗�</div>
+            )
+          } else if (text[0] === 'pointfront') {
+            return (
+              <div><span style={{display: 'inline-block', width: '8px', height: '8px', borderRadius: '14px', background: 'black', verticalAlign: 'middle'}}></span> 鐐癸紙鍓嶏級</div>
+            )
+          } else if (text[0] === 'pointback') {
+            return (
+              <div>鐐癸紙鍚庯級 <span style={{display: 'inline-block', width: '8px', height: '8px', borderRadius: '14px', background: 'black', verticalAlign: 'middle'}}></span></div>
+            )
           }
 
           return (
@@ -118,18 +146,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
@@ -229,6 +263,7 @@
         })
       }
     ]
+
     let signs = [
       {
         value: 'font',
@@ -247,6 +282,14 @@
         label: '涓垝绾�'
       },
       {
+        value: 'pointfront',
+        label: '鐐癸紙鍓嶏級'
+      },
+      {
+        value: 'pointback',
+        label: '鐐癸紙鍚庯級'
+      },
+      {
         value: 'iconfront',
         label: '鍥炬爣锛堝墠锛�',
         children: icons
@@ -255,10 +298,30 @@
         value: 'iconback',
         label: '鍥炬爣锛堝悗锛�',
         children: icons
+      },
+      {
+        value: 'indent',
+        label: '缂╄繘',
+        children: [{
+          value: 2,
+          label: '2涓瓧绗�'
+        }, {
+          value: 4,
+          label: '4涓瓧绗�'
+        }, {
+          value: 6,
+          label: '6涓瓧绗�'
+        }, {
+          value: 8,
+          label: '8涓瓧绗�'
+        }]
       }
     ]
 
     if (type === 'line' || type === 'sequence') {
+      signs.pop()
+      signs.pop()
+      signs.pop()
       signs.pop()
       signs.pop()
     } else if (type === 'slider') {
@@ -319,6 +382,11 @@
           item.fontColor = ''
         }
       }
+
+      if (item.contrastValue) {
+        item.contrastValue = item.contrastValue.replace(/\t+|\v+|\s+/g, '')
+      }
+
       if (val && item.contrastValue === val) {
         save = true
       }
@@ -331,12 +399,12 @@
       })
       this.props.onSubmit(marks)
     } else {
-      const _this = this
+      const that = this
       confirm({
         title: '瀛樺湪鏈繚瀛樻爣璁帮紝纭畾蹇界暐鍚楋紵',
         onOk() {
-          _this.setState({ visible: false })
-          _this.props.onSubmit(marks)
+          that.setState({ visible: false })
+          that.props.onSubmit(marks)
         },
         onCancel() {}
       })
@@ -346,11 +414,16 @@
   render() {
     const { marks, markColumns, visible, options, signs } = this.state
 
+    let className = ''
+    if (this.props.type === 'line' && this.props.marks.length) {
+      className = 'mk-line-marks'
+    }
+
     return (
-      <div style={{display: 'inline-block'}}>
+      <div style={{display: 'inline-block'}} className={className}>
         <AntDesignOutlined className="profile" title="鏍囪" onClick={this.resetMark} />
         <Modal
-          wrapClassName="model-table-column-mark-modal"
+          wrapClassName="mark-modal-wrap"
           title="鏍囪璁剧疆"
           visible={visible}
           width={'75vw'}
@@ -362,7 +435,7 @@
         >
           <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})}/>
+          <EditTable actions={['edit', 'move', 'del', 'copy']} type="marks" data={marks} columns={markColumns} onChange={(marks) => this.setState({marks})}/>
         </Modal>
       </div>
     )

--
Gitblit v1.8.0