king
2022-08-15 704f82b06befe96e5f739b2dce419f76f5683a6f
src/menu/components/card/data-card/index.jsx
@@ -197,6 +197,8 @@
    }
    card.errors = []
    let columns = card.columns.map(c => c.field)
    let lowcols = card.columns.map(c => c.field.toLowerCase())
    if (card.setting.interType === 'system' && card.setting.execute !== 'false' && !card.setting.dataresource) {
      card.errors.push({ level: 0, detail: '未设置数据源!'})
@@ -204,6 +206,8 @@
      card.errors.push({ level: 0, detail: '数据源中无可用脚本!'})
    } else if (!card.setting.primaryKey) {
      card.errors.push({ level: 0, detail: '未设置主键!'})
    } else if (!columns.includes(card.setting.primaryKey)) {
      card.errors.push({ level: 0, detail: '主键已失效!'})
    } else if (card.wrap.supType !== 'multi' && !card.setting.supModule) {
      card.errors.push({ level: 0, detail: '未设置上级组件!'})
    }
@@ -220,9 +224,6 @@
      }
    }
    let columns = card.columns.map(c => c.field)
    let lowcols = card.columns.map(c => c.field.toLowerCase())
    card.action.forEach(cell => {
      if (cell.OpenType === 'pop' || (cell.OpenType === 'funcbutton' && cell.execMode === 'pop')) {
        if (!cell.modal || cell.modal.fields.length === 0) {
@@ -237,6 +238,16 @@
          })
        }
      }
      // $check@有效性检测
      // if (['prompt', 'exec', 'pop'].includes(cell.OpenType) && cell.Ot === 'required' && cell.verify && cell.verify.scripts && cell.verify.scripts.length > 0) {
      //   cell.verify.scripts.some(s => {
      //     if (s.status !== 'false' && /\$check@|@check\$/ig.test(s.sql)) {
      //       card.errors.push({ level: 1, detail: `可选择多行的按钮“${cell.label}”中 $check@ 或 @check$ 将不会生效!`})
      //       return true
      //     }
      //     return false
      //   })
      // }
    })
    card.subcards.forEach((item, i) => {
@@ -573,7 +584,9 @@
  }
  updateWrap = (res) => {
    let _card = {...this.state.card, wrap: res}
    const { card } = this.state
    let _card = {...card, wrap: res}
    if (res.supNodes) {
      _card.supNodes = res.supNodes
@@ -587,11 +600,31 @@
      delete _card.supNodes
    }
    if (res.layout === 'flex') {
      _card.wrap.pagestyle = 'page'
    }
    if (res.selStyle === 'tabs' && card.wrap.selStyle !== 'tabs') {
      Object.keys(_card.style).forEach(key => {
        if (/^border/.test(key)) {
          delete _card.style[key]
        }
      })
      _card.style.borderBottomColor = '#eeeeee'
      _card.style.borderBottomWidth = '1px'
      _card.style.paddingBottom = '0px'
    this.updateComponent(_card)
      _card.subcards.forEach(item => {
        delete item.style.marginBottom
      })
      this.setState({card: {..._card, subcards: []}}, () => {
        this.updateComponent(_card)
      })
    } else {
      this.updateComponent(_card)
    }
  }
  pasteComponent = (res, resolve) => {
@@ -760,7 +793,7 @@
          <ToolOutlined />
        </Popover>
        <ActionComponent config={card} type="datacard" setSubConfig={this.setSubConfig} updateaction={this.updateComponent}/>
        <div className={'float-' + (card.wrap.cardFloat || 'left')}>
        <div className={'float-' + (card.wrap.cardFloat || 'left') + ' select-' + card.wrap.selStyle}>
          {card.subcards.map((subcard, index) => (<CardComponent key={subcard.uuid} cards={card} card={subcard} move={this.move} updateElement={this.updateCard} deleteElement={this.deleteCard}/>))}
        </div>
        <div style={{clear: 'both'}}></div>