A function to change the text without a pop-up window

Effect:
Insert picture description here
Data in state:

handinDetail : [
        {
    
    
          key: 'reviewers',
          editable: false,
          info: {
    
    },
          label: '审核人',
          originMsg : {
    
    }
        },
        {
    
    
          key: 'copy_tos',
          editable: false,
          info: [],
          label: '抄送人',
          originMsg : []
        },
        {
    
    
          key: 'product_manager',
          editable: false,
          info: [],
          label: '实验所属PM',
          originMsg : []
        },
        {
    
    
          key: 'data_analyst',
          editable: false,
          info: [],
          label: '所属数据分析师',
          originMsg : []
        }
      ]

html code:

{
    
    !item.editable ? (
            <Tooltip>
            <p className="ellipise" style={
    
    {
    
    maxWidth: '100%', marginLeft: '10px'}}>
              {
    
    item.info.map ? item.info.map((a, b) => {
    
    
                return (
                  <p style={
    
    {
    
    display:'inline-block', marginRight: '10px'}}>
                    {
    
    a + (b + 1 === item.info.length ? '' : ',')}
                  </p>
                )
              }
              ): 
              Object.keys(item.info).map((a, b) => {
    
    
                return (
                  <p style={
    
    {
    
    display:'inline-block', marginRight: '10px'}}>
                      <span style={
    
    {
    
     marginRight: '3px' }}>
                        <Icon
                          type={
    
    reviewersIconMap[item.info[a]].type}
                          theme="filled"
                          style={
    
    {
    
     color: reviewersIconMap[item.info[a]].color}}
                        />
                      </span>
                    {
    
    a + (b + 1 === Object.keys(item.info).length ? '' : ',')}
                  </p>
                )
              })
              }
            </p>
          </Tooltip>
          ) : (
            <Select
              className="exp-nameInput"
              style={
    
    {
    
     width: '30%', marginLeft:'10px'}}
              value={
    
    item.info.map ? item.info : Object.keys(item.info)}
              onChange={
    
    v => this.handleInputChange(v,index)}
              mode="tags">
              {
    
    this.state.pureUserList.length ? this.state.pureUserList.map(item => {
    
    
                  return (
                    <Option value={
    
    item} key={
    
    item}>
                      {
    
    item}
                    </Option>
                  )
                }) : []}
            </Select>
          )}
            {
    
    !item.editable ? (
              <div>
                <Icon
                  onClick={
    
    this.toggleBoxShow.bind(this, {
    
    type: 'edit', index})}
                  type="edit"
                  theme="filled"
                  className="editNameIcon"
                />
              </div>
            ) : (
              <div className="exp_title_exp">
                <a
                  onClick={
    
    this.toggleBoxShow.bind(this, {
    
    type: 'submit', index})}
                  style={
    
    {
    
     marginRight: '5px' }}>
                  保存
                </a>
                <a onClick={
    
    this.toggleBoxShow.bind(this, {
    
    type: 'cancel', index})}>取消</a>
              </div>
            )}

Logic code:

 // 切换文字编辑与展示状态
  toggleBoxShow(data) {
    
    
    const {
    
    type, index} = data
    console.log(type,index)
    let tempArr = _.cloneDeep(this.state.handinDetail)
    if (type === 'edit') {
    
    
      let originData = tempArr[index].info
      tempArr[index].originMsg = originData
      console.log(tempArr[index])
      console.log(tempArr[index].editable)
      tempArr[index].editable = !tempArr[index].editable
      console.log(tempArr)
      this.setState({
    
    
        handinDetail: tempArr
      })
    } else {
    
    
      if (type === 'submit') {
    
    
        console.log(tempArr[index].originMsg, tempArr[index].info)
        if (tempArr[index].info.length === 0) {
    
    
          message.error('修改数据不能为空')
          return false
        }
        console.log(index)
        console.log(tempArr[index].originMsg.toString())
        console.log(Object.keys(tempArr[index].info).toString())
        if(tempArr[index].originMsg.toString() === tempArr[index].info.toString()){
    
    
          message.error('修改的内容不得与原先内容相同')
          return false
        }
        this.setState({
    
    
          load: false
        })
        let value = {
    
    }
        value.plan_draft_id = parseInt(this.state.id)
        let title = tempArr[index].key
        value[title] = tempArr[index].info
        if(index === 2){
    
    
          value[title] = tempArr[index].info[0]
        }
        console.log(value)
        modifyDraft(value).then(res => {
    
    
          if(res.result_code === 2000){
    
    
            message.success('修改成功!')
            tempArr[index].editable = !tempArr[index].editable
            this.setState({
    
    
              handinDetail: tempArr
            })
          }
          else{
    
    
            message.error('修改失败!')
          }
          this.setState({
    
    
            load: false
          })
        })
      } else {
    
    
        tempArr[index].editable = !tempArr[index].editable
        tempArr[index].info = tempArr[index].originMsg
        this.setState({
    
    
          handinDetail: tempArr
        })
      }
    }
  }

  //改变state中input的值
  handleInputChange = (v,index) => {
    
    
    let tempArr = this.state.handinDetail
    if(index == '2' || index == '3'){
    
    
      console.log(v,index)
      tempArr[index].info = v[v.length - 1] === undefined? [] : [v[v.length - 1]]
    }
    else{
    
    
      tempArr[index].info = v
    }
    this.setState({
    
    
      handinDetail: tempArr
    })
  }

Pay attention to setting an originMsg to store the most original value for use when canceling

Guess you like

Origin blog.csdn.net/Slueia/article/details/113767856