king
2022-01-02 bde2916433c7830e2879e6524e32b9f6c8bd0bab
2022-01-02
40个文件已修改
725 ■■■■ 已修改文件
src/assets/css/viewstyle.scss 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/normalform/modalform/index.jsx 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/card/cardcomponent/options.jsx 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/card/data-card/index.jsx 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/card/data-card/options.jsx 33 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/table/normal-table/index.jsx 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/table/normal-table/options.jsx 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/mob/components/menubar/normal-menubar/menucomponent/options.jsx 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/mob/components/navbar/normal-navbar/menus/menuform/index.jsx 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/commontable/index.jsx 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/card/cardcellList/index.jsx 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/card/data-card/index.jsx 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/card/data-card/index.scss 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/card/prop-card/index.jsx 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/card/prop-card/index.scss 23 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/share/normalTable/index.jsx 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/share/normalTable/index.scss 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/table/edit-table/normalTable/index.jsx 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/table/normal-table/index.jsx 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/scriptmanage/config.jsx 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/subtable/index.jsx 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/subtabtable/index.jsx 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/actionList/changeuserbutton/index.jsx 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/actionList/excelInbutton/index.jsx 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/actionList/exceloutbutton/index.jsx 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/actionList/newpagebutton/index.jsx 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/actionList/normalbutton/index.jsx 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/actionList/popupbutton/index.jsx 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/actionList/popupbutton/index.scss 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/actionList/printbutton/index.jsx 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/actionList/tabbutton/index.jsx 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/automatic/index.jsx 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/normalTable/index.jsx 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/normalTable/index.scss 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/comtableconfig/index.jsx 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/sharecomponent/settingcomponent/settingform/datasource/index.jsx 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/subtableconfig/index.jsx 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/menudesign/index.jsx 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mobdesign/index.jsx 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/pcdesign/index.jsx 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/css/viewstyle.scss
@@ -186,41 +186,45 @@
    }
  }
  .custom-data-card-box, .custom-prop-card-box {
    .data-zoom.radio, .data-zoom.checkbox {
      .card-row-list > .ant-col:not(.active):not(.backFont):not(.font):not(.selected):not(.extend-card):hover > .card-item-box {
    .data-zoom.radio.active, .data-zoom.checkbox.active {
      .mk-card:not(.active):not(.selected):hover {
        > .card-item-box {
        border-color: $color4 !important;
        box-shadow: 0 0 4px $color4 !important;
      }
    }
    .card-row-list.radio, .card-row-list.checkbox {
      >.ant-col:not(.active):not(.backFont):not(.font):not(.selected):hover {
      .mk-card.active {
        > .card-item-box {
          border-color: $color6!important;
          box-shadow: 0 0 4px $color6!important;
        }
      }
      .mk-card.selected {
        >.card-item-box {
          border-color: $color4!important;
          box-shadow: 0 0 4px $color4!important;
        }
      }
    }
    .card-row-list {
      >.active >.card-item-box {
        border-color: $color6!important;
        box-shadow: 0 0 4px $color6!important;
      }
      >.backFont >.card-item-box {
    .data-zoom.radio.backFont, .data-zoom.checkbox.backFont {
      .mk-card:hover, .mk-card.active, .mk-card.selected {
        > .card-item-box {
        border-color: $color6!important;
        background-color: $color1!important;
        .ant-mk-text {
          .ant-mk-text, .ant-mk-date {
          color: $color6;
        }
      }
      >.font >.card-item-box {
      }
    }
    .data-zoom.radio.font, .data-zoom.checkbox.font {
      .mk-card:hover, .mk-card.active, .mk-card.selected {
        > .card-item-box {
        border-color: $color6!important;
        .ant-mk-text {
          .ant-mk-text, .ant-mk-date {
          color: $color6;
        }
      }
      >.selected >.card-item-box {
        border-color: $color4!important;
        box-shadow: 0 0 4px $color4!important;
      }
    }
  }
src/components/normalform/modalform/index.jsx
@@ -109,6 +109,8 @@
          if (vals.length === new Set(vals).size) {
            cell.hidden = true
          }
        } else if (item.notNull) {
          cell.hidden = !supItem.initval
        } else if (!item.values.includes(supItem.initval)) {
          cell.hidden = true
        }
@@ -177,6 +179,8 @@
            } else {
              m.hidden = true
            }
          } else if (cell.notNull) {
            m.hidden = !val
          } else {
            m.hidden = !cell.values.includes(val)
          }
src/menu/components/card/cardcomponent/options.jsx
@@ -19,6 +19,11 @@
    } else {
      appmenulist = []
    }
    if (appType === 'mob' && hasMenus) { // 数据卡可打开即时通信
      appmenulist.push({
        value: 'IM', label: '即时通信(系统页)'
      })
    }
  } else {
    menulist = sessionStorage.getItem('fstMenuList')
    if (menulist) {
src/menu/components/card/data-card/index.jsx
@@ -479,7 +479,7 @@
  getWrapForms = () => {
    const { card } = this.state
    return getWrapForm(card.wrap, card.subtype)
    return getWrapForm(card.wrap, card.subtype, card.columns)
  }
  updateWrap = (res) => {
src/menu/components/card/data-card/options.jsx
@@ -4,7 +4,7 @@
/**
 * @description Wrap表单配置信息
 */
export default function (wrap, subtype, columns, id) {
export default function (wrap, subtype, columns = [], id = '') {
  let appType = sessionStorage.getItem('appType')
  let MenuType = ''
  let menu = fromJS(window.GLOB.customMenu).toJS()
@@ -149,20 +149,18 @@
      ]
    },
    {
      type: subtype === 'propcard' ? 'select' : 'radio',
      type: 'select',
      field: 'selStyle',
      label: '选中风格',
      initval: wrap.selStyle || 'active',
      tooltip: '存在边框时,边框会使用系统色。',
      required: false,
      options: subtype === 'propcard' ? [
      options: [
        {value: 'none', label: '无'},
        {value: 'active', label: '外阴影'},
        {value: 'backFont', label: '背景+文字'},
        {value: 'font', label: '文字'},
      ] : [
        {value: 'none', label: '无'},
        {value: 'active', label: '外阴影'},
        ...(subtype === 'datacard' && appType === 'mob' ? [{value: 'check', label: '勾选'}] : [])
      ]
      // forbid: subtype !== 'propcard'
    },
@@ -265,6 +263,29 @@
      forbid: subtype !== 'propcard'
    },
    {
      type: 'select',
      field: 'controlField',
      label: '禁用字段',
      initval: wrap.controlField || '',
      tooltip: '用于控制行数据是否可选择。',
      required: false,
      allowClear: true,
      options: columns,
      controlFields: [
        {field: 'controlVal', notNull: true},
      ],
      forbid: subtype !== 'datacard'
    },
    {
      type: 'text',
      field: 'controlVal',
      label: '控制值',
      initval: wrap.controlVal || '',
      tooltip: '当字段值与控制值相等时,行数据会禁用,多个值用逗号分隔。',
      required: false,
      forbid: subtype !== 'datacard'
    },
    {
      type: 'multiselect',
      field: 'blacklist',
      label: '黑名单',
src/menu/components/table/normal-table/index.jsx
@@ -387,9 +387,9 @@
  }
  getWrapForms = () => {
    const { wrap, action } = this.state.card
    const { wrap, action, columns } = this.state.card
    return getWrapForm(wrap, action)
    return getWrapForm(wrap, action, columns)
  }
  updateWrap = (res) => {
src/menu/components/table/normal-table/options.jsx
@@ -1,7 +1,7 @@
/**
 * @description Wrap表单配置信息
 */
export default function (wrap, action = []) {
export default function (wrap, action = [], columns = []) {
  let roleList = sessionStorage.getItem('sysRoles')
  let appType = sessionStorage.getItem('appType')
@@ -101,7 +101,7 @@
        {value: 'true', label: '是'},
        {value: 'false', label: '否'},
      ],
      forbid: appType === 'mob'
      forbid: appType === 'mob' || appType === 'pc'
    },
    {
      type: 'radio',
@@ -202,6 +202,39 @@
      forbid: appType === 'mob'
    },
    {
      type: 'select',
      field: 'controlField',
      label: '禁用字段',
      initval: wrap.controlField || '',
      tooltip: '用于控制行数据是否可选择。',
      required: false,
      allowClear: true,
      options: columns,
      controlFields: [
        {field: 'controlVal', notNull: true},
      ]
    },
    {
      type: 'text',
      field: 'controlVal',
      label: '控制值',
      initval: wrap.controlVal || '',
      tooltip: '当字段值与控制值相等时,行数据会禁用,多个值用逗号分隔。',
      required: false
    },
    {
      type: 'radio',
      field: 'empty',
      label: '空值隐藏',
      initval: wrap.empty || 'show',
      tooltip: '当查询数据为空时,隐藏该组件。',
      required: false,
      options: [
        {value: 'show', label: '否'},
        {value: 'hidden', label: '是'},
      ],
    },
    {
      type: 'multiselect',
      field: 'blacklist',
      label: '黑名单',
src/mob/components/menubar/normal-menubar/menucomponent/options.jsx
@@ -41,7 +41,7 @@
      required: true
    },
    {
      type: 'select',
      type: 'radio',
      field: 'type',
      label: '菜单属性',
      initval: setting.type || 'menu',
@@ -49,11 +49,9 @@
      options: [
        {value: 'menu', label: '菜单'},
        {value: 'linkmenu', label: '关联菜单'},
        {value: 'sysmenu', label: '系统页'},
        {value: 'link', label: '链接'},
      ],
      controlFields: [
        {field: 'sysmenu', values: ['sysmenu']},
        {field: 'copyMenuId', values: ['menu']},
        {field: 'linkMenuId', values: ['linkmenu']},
        {field: 'linkurl', values: ['link']},
@@ -61,20 +59,10 @@
    },
    {
      type: 'select',
      field: 'sysmenu',
      label: '系统页面',
      initval: setting.sysmenu || '',
      required: true,
      options: [
        {value: 'AIService', label: '智能客服'},
      ]
    },
    {
      type: 'select',
      field: 'copyMenuId',
      label: '复制菜单',
      initval: setting.copyMenuId || '',
      tooltip: '复制菜单仅在当前菜单初始化时有效。',
      tooltip: '复制菜单仅在当前菜单创建时有效。',
      required: false,
      options: menulist
    },
@@ -84,7 +72,11 @@
      label: '关联菜单',
      initval: setting.linkMenuId || '',
      required: true,
      options: menulist
      options: [
        ...menulist,
        // {value: 'IM', label: '即时通信(系统页)'},
        {value: 'AIService', label: '智能客服(系统页)'}
      ]
    },
    {
      type: 'textarea',
src/mob/components/navbar/normal-navbar/menus/menuform/index.jsx
@@ -150,7 +150,6 @@
                <Radio.Group onChange={this.changeProperty} className="over">
                  <Radio value="menu">菜单</Radio>
                  <Radio value="linkmenu">关联菜单</Radio>
                  <Radio value="sysmenu">系统页</Radio>
                  <Radio value="link">链接</Radio>
                </Radio.Group>
              )}
@@ -168,21 +167,6 @@
              )}
            </Form.Item>
          </Col>
          {property === 'sysmenu' ? <Col span={12}>
            <Form.Item label="系统页面">
              {getFieldDecorator('sysmenu', {
                initialValue: menu.sysmenu || '',
                rules: [{
                  required: true,
                  message: '请选择系统页面!'
                }]
              })(
                <Select>
                  <Select.Option value="AIService">智能客服</Select.Option>
                </Select>
              )}
            </Form.Item>
          </Col> : null}
          {property === 'link' ? <Col span={24}>
            <Form.Item label="链接地址" className="textarea">
              {getFieldDecorator('link', {
@@ -210,6 +194,8 @@
              })(
                <Select>
                  {appMenus.map(item => (<Select.Option key={item.MenuID} value={item.MenuID}>{item.MenuName}</Select.Option>))}
                  {/* <Select.Option key="IM" value="IM">即时通信(系统页)</Select.Option> */}
                  <Select.Option key="AIService" value="AIService">智能客服(系统页)</Select.Option>
                </Select>
              )}
            </Form.Item>
src/tabviews/commontable/index.jsx
@@ -400,6 +400,14 @@
        })
      }
      if (config.setting.controlField) {
        if (config.setting.controlVal) {
          config.setting.controlVal = config.setting.controlVal.split(',')
        } else {
          config.setting.controlVal = ['']
        }
      }
      this.setState({
        pageSize: config.setting.pageSize || 10,
        loadingview: false,
@@ -735,6 +743,12 @@
          item.$$BID = BID || ''
          item.$Index = start + index + ''
          if (setting.controlField) {
            if (setting.controlVal.includes(item[setting.controlField])) {
              item.$disabled = true
            }
          }
          return item
        }),
        total: result.total,
src/tabviews/custom/components/card/cardcellList/index.jsx
@@ -671,6 +671,7 @@
            <NormalButton
              BID={data.$$BID}
              BData={data.$$BData || ''}
              disabled={data.$disabled}
              btn={card}
              show={card.show}
              style={card.style}
@@ -686,6 +687,7 @@
            <ExcelInButton
              BID={data.$$BID}
              BData={data.$$BData || ''}
              disabled={data.$disabled}
              btn={card}
              show={card.show}
              style={card.style}
@@ -700,6 +702,7 @@
            <ExcelOutButton
              BID={data.$$BID}
              BData={data.$$BData || ''}
              disabled={data.$disabled}
              btn={card}
              show={card.show}
              style={card.style}
@@ -713,6 +716,7 @@
            <PopupButton
              BID={data.$$BID}
              BData={data.$$BData || ''}
              disabled={data.$disabled}
              btn={card}
              show={card.show}
              style={card.style}
@@ -726,6 +730,7 @@
          <Col key={card.uuid} className="mk-cell-btn" span={card.width}>
            <TabButton
              BData={data.$$BData || ''}
              disabled={data.$disabled}
              btn={card}
              show={card.show}
              style={card.style}
@@ -739,6 +744,7 @@
          <Col key={card.uuid} className="mk-cell-btn" span={card.width}>
            <NewPageButton
              BData={data.$$BData || ''}
              disabled={data.$disabled}
              btn={card}
              show={card.show}
              style={card.style}
@@ -754,6 +760,7 @@
              <ChangeUserButton
                BID={data.$$BID}
                BData={data.$$BData || ''}
                disabled={data.$disabled}
                btn={card}
                show={card.show}
                style={card.style}
@@ -768,6 +775,7 @@
              <PrintButton
                BID={data.$$BID}
                BData={data.$$BData || ''}
                disabled={data.$disabled}
                btn={card}
                show={card.show}
                style={card.style}
src/tabviews/custom/components/card/data-card/index.jsx
@@ -54,6 +54,14 @@
    let precards = []
    let nextcards = []
    if (_config.wrap.controlField) {
      if (_config.wrap.controlVal) {
        _config.wrap.controlVal = _config.wrap.controlVal.split(',')
      } else {
        _config.wrap.controlVal = ['']
      }
    }
    _config.subcards.forEach(item => {
      if (item.setting.click === 'button' && !item.setting.linkbtn) {
        item.elements.forEach(ele => {
@@ -116,6 +124,12 @@
        item.$$BID = BID || ''
        item.$$BData = BData || ''
        item.$Index = index + 1 + ''
        if (_config.wrap.controlField) {
          if (_config.wrap.controlVal.includes(item[_config.wrap.controlField])) {
            item.$disabled = true
          }
        }
        return item
      })
@@ -150,6 +164,11 @@
    if (_config.wrap.supType === 'multi') {
      supComs = _config.supNodes.map(item => item.componentId)
    }
    _config.wrap.selStyle = _config.wrap.selStyle || 'active'
    _config.wrap.scale = _config.wrap.scale === 'true' ? 'scale' : ''
    _config.wrap.wrapClass =  `${_config.wrap.selStyle} ${_config.wrap.cardType || ''} ${_config.wrap.scale}`
    this.setState({
      supComs,
@@ -196,6 +215,13 @@
          item.$$BID = BID || ''
          item.$$BData = BData || ''
          item.$Index = index + 1 + ''
          if (config.wrap.controlField) {
            if (config.wrap.controlVal.includes(item[config.wrap.controlField])) {
              item.$disabled = true
            }
          }
          return item
        })
@@ -289,7 +315,7 @@
  checkTopLine = () => {
    const { config, data } = this.state
    if (!data || data.length === 0) {
    if (!data || data.length === 0 || data[0].$disabled) {
      this.setState({
        activeKey: '',
        selectKeys: [],
@@ -500,6 +526,13 @@
          item.$$BID = BID || ''
          item.$$BData = BData || ''
          item.$Index = index + start + ''
          if (config.wrap.controlField) {
            if (config.wrap.controlVal.includes(item[config.wrap.controlField])) {
              item.$disabled = true
            }
          }
          return item
        }),
        total: result.total,
@@ -627,6 +660,7 @@
    const { config, selectKeys, selectedData, activeKey, data } = this.state
    if (!config.wrap.cardType) return
    if (item.$disabled) return
    
    let _selectKeys = []
    let _selectedData = []
@@ -709,7 +743,7 @@
            selectedData={selectedData}
          /> : null
        }
        <div className={`data-zoom ${config.wrap.selStyle !== 'none' ? (config.wrap.cardType || '') : ''} ${config.wrap.scale || ''}`}>
        <div className={`data-zoom ${config.wrap.wrapClass}`}>
          {switchable ? <div className={'prev-page ' + (pageIndex === 1 ? 'disabled' : '')} onClick={this.prevPage}><div><div><img src={preImg} alt=""/></div></div></div> : null}
          <Row className="card-row-list">
            {offset ? <Col span={offset} style={{height: '10px'}}> </Col> : null}
@@ -718,11 +752,22 @@
                <CardItem card={item} cards={config} data={{$$BID: BID, $$BData: BData, $$selectedData: selectedData, $$type: 'extendCard'}}/>
              </Col>
            ))}
            {data && data.map((item, index) => (
              <Col className={(config.wrap.selStyle !== 'none' ? (activeKey === index ? ' active' : (selectKeys.indexOf(index) > -1 ? ' selected' : '')) : '') + (card.setting.click ? ' pointer' : '')} key={index} span={card.setting.width} onClick={() => {this.changeCard(index, item)}}>
            {data && data.map((item, index) => {
              let className = card.setting.click ? 'mk-card pointer ' : 'mk-card '
              if (item.$disabled) {
                className = 'mk-disabled'
              } else if (activeKey === index) {
                className += 'active'
              } else if (selectKeys.indexOf(index) > -1) {
                className += 'selected'
              }
              return (
                <Col className={className} key={index} span={card.setting.width} onClick={() => {this.changeCard(index, item)}}>
                <CardItem card={card} cards={config} data={item}/>
              </Col>
            ))}
              )
            })}
            {nextcards.map((item, index) => (
              <Col key={'next' + index} className="extend-card" span={item.setting.width || 6}>
                <CardItem card={item} cards={config} data={{$$BID: BID, $$BData: BData, $$selectedData: selectedData, $$type: 'extendCard'}}/>
src/tabviews/custom/components/card/data-card/index.scss
@@ -20,26 +20,39 @@
  .data-zoom {
    display: flex;
    position: relative;
  }
  .data-zoom.radio, .data-zoom.checkbox {
    .card-row-list {
      >.ant-col:not(.active):not(.selected):not(.extend-card):hover {
    .mk-disabled {
        >.card-item-box {
          border-color: #69c0ff!important;
          box-shadow: 0 0 4px #69c0ff!important;
        cursor: not-allowed;
        color: #bcbcbc;
        .ant-mk-text, .ant-mk-date, .anticon {
          color: #bcbcbc!important;
        }
      }
    }
  }
  .data-zoom.true {
  .data-zoom.scale {
    .card-row-list {
      >.ant-col:not(.extend-card):hover {
      .mk-card:hover {
        >.card-item-box {
          z-index: 1;
          transform: scale(1.05);
        }
      }
    }
  }
  .card-row-list {
    flex: 10;
    .mk-card.pointer {
      cursor: pointer;
    }
  }
  .card-item-box {
    position: relative;
    background-color: #ffffff;
    transition: all 0.3s;
    background-position: center center;
    background-repeat: no-repeat;
    background-size: cover;
  }
  .prev-page {
    width: 20px;
@@ -68,31 +81,6 @@
    content: ' ';
    display: block;
    clear: both;
  }
  .card-row-list {
    flex: 10;
    .card-item-box {
      position: relative;
      background-color: #ffffff;
      transition: all 0.3s;
    }
    >.pointer {
      cursor: pointer;
    }
    >.active >.card-item-box {
      border-color: #1890ff!important;
      box-shadow: 0 0 4px #1890ff;
    }
    >.selected >.card-item-box {
      border-color: #69c0ff!important;
      box-shadow: 0 0 4px #69c0ff;
    }
  }
  .card-item-box {
    background-position: center center;
    background-repeat: no-repeat;
    background-size: cover;
  }
  .ant-empty {
src/tabviews/custom/components/card/prop-card/index.jsx
@@ -109,9 +109,13 @@
      _config.subcards[0].offset = offset
    }
    let selected = _config.wrap.selected || 'false'
    _config.wrap.selStyle = _config.wrap.selStyle || 'active'
    _config.wrap.priKeyType = _config.wrap.priKeyType || 'static'
    let selected = _config.wrap.selected || 'false'
    _config.wrap.scale = _config.wrap.scale === 'true' ? 'scale' : ''
    _config.wrap.wrapClass =  `${_config.wrap.selStyle} ${_config.wrap.cardType || ''} ${_config.wrap.scale || ''}`
    this.setState({
      selected,
@@ -405,12 +409,19 @@
          </div> : null
        }
        <NormalHeader config={config}/>
        <Row className={`card-row-list ${config.wrap.cardType || ''} ${config.wrap.scale || ''}`}>
          {config.subcards.map((item, index) => (
            <Col className={(activeKey === index ? config.wrap.selStyle : '') + (item.setting.click ? ' pointer' : '')} key={index} span={item.setting.width || 6} offset={item.offset || 0} onClick={() => {this.changeCard(index, item)}}>
        <Row className={`card-row-list data-zoom ${config.wrap.wrapClass}`}>
          {config.subcards.map((item, index) => {
            let className = item.setting.click ? 'mk-card pointer ' : 'mk-card '
            if (activeKey === index) {
              className += 'active'
            }
            return (
              <Col className={className} key={index} span={item.setting.width || 6} offset={item.offset || 0} onClick={() => {this.changeCard(index, item)}}>
              <CardItem card={item} cards={config} data={data}/>
            </Col>
          ))}
            )
          })}
        </Row>
      </div>
    )
src/tabviews/custom/components/card/prop-card/index.scss
@@ -13,28 +13,12 @@
  }
  .card-row-list {
    .card-item-box {
      background-color: #ffffff;
      transition: all 0.3s;
    }
    >.pointer {
    .mk-card.pointer {
      cursor: pointer;
    }
    >.active >.card-item-box {
      border-color: #1890ff!important;
      box-shadow: 0 0 4px #1890ff;
    }
  }
  .card-row-list.radio, .card-row-list.checkbox {
    >.ant-col:not(.active):not(.selected):hover {
      >.card-item-box {
        border-color: #69c0ff!important;
        box-shadow: 0 0 4px #69c0ff!important;
      }
    }
  }
  .card-row-list.true {
    >.ant-col:hover {
  .card-row-list.scale {
    .mk-card:hover {
      >.card-item-box {
        z-index: 1;
        transform: scale(1.05);
@@ -44,6 +28,7 @@
  .card-item-box {
    position: relative;
    background-color: #ffffff;
    background-position: center center;
    background-repeat: no-repeat;
    background-size: cover;
src/tabviews/custom/components/share/normalTable/index.jsx
@@ -30,6 +30,10 @@
    let { lineMarks, onDoubleClick, data, className, ...resProps } = this.props
    let style = {}
    if (data && data.$disabled) {
      className = className + ' mk-disabled '
    }
    if (lineMarks && lineMarks.length > 0) {
      lineMarks.some(mark => {
        let originVal = data[mark.field[0]] + ''
@@ -80,7 +84,7 @@
            if (mark.fontColor) {
              style.color = mark.fontColor
            }
            className += className + ' background'
            className = className + ' background'
          } else if (mark.signType[0] === 'underline') {
            style.textDecoration = 'underline'
            style.color = mark.color
@@ -145,7 +149,7 @@
        resProps.rowSpan = record['$$' + col.field]
      }
      
      if (col.linkThdMenu || col.linkurl) {
      if (!record.$disabled && (col.linkThdMenu || col.linkurl)) {
        content = (
          <div>
            <div className="link-menu" onDoubleClick={(e) => triggerLink(e, col, record)}></div>
@@ -204,7 +208,7 @@
        resProps.rowSpan = record['$$' + col.field]
      }
      if (col.linkThdMenu || col.linkurl) {
      if (!record.$disabled && (col.linkThdMenu || col.linkurl)) {
        content = (
          <div>
            <div className="link-menu" onDoubleClick={(e) => triggerLink(e, col, record)}></div>
@@ -526,6 +530,7 @@
    const { MenuID, data, setting } = this.props
    if (MenuID !== menuId || !data || data.length === 0) return
    if (data[0].$disabled) return
    this.changedata(0)
    this.setState({ selectedRowKeys: [0], activeIndex: 0 })
@@ -649,7 +654,7 @@
    this.setState({ selectedRowKeys, activeIndex: _activeIndex })
    let selects = this.props.data.filter((item, _index) => selectedRowKeys.includes(_index))
    let selects = this.props.data.filter((item, _index) => selectedRowKeys.includes(_index) && !item.$disabled)
    this.props.chgSelectData(selects)
    if (setting.$hasSyncModule) {
@@ -664,6 +669,7 @@
    const { setting, MenuID, data } = this.props
    if (!setting.tableType || this.state.pickup) return
    if (record.$disabled) return
    
    let newkeys = fromJS(this.state.selectedRowKeys).toJS()
@@ -688,7 +694,7 @@
      this.setState({ selectedRowKeys: newkeys, activeIndex: _index !== '' ? _index : null })
    }
    let selects = this.props.data.filter((item, _index) => newkeys.includes(_index))
    let selects = this.props.data.filter((item, _index) => newkeys.includes(_index) && !item.$disabled)
    
    this.props.chgSelectData(selects)
@@ -723,6 +729,8 @@
      _id = data[index][setting.primaryKey] || ''
      _data = data[index] || ''
    }
    if (_data && _data.$disabled) return
    MKEmitter.emit('resetSelectLine', MenuID, _id, _data)
  }
@@ -812,6 +820,7 @@
    const { setting } = this.props
    if (!setting.doubleClick) return
    if (record.$disabled) return
    MKEmitter.emit('triggerBtnId', setting.doubleClick, [record])
  }
src/tabviews/custom/components/share/normalTable/index.scss
@@ -19,6 +19,30 @@
    font-size: inherit;
  }
  .mk-disabled {
    color: #bcbcbc;
    cursor: not-allowed;
    .ant-btn {
      cursor: not-allowed;
    }
    .ant-table-selection-column {
      > span::after {
        content: ' ';
        display: block;
        position: absolute;
        top: 0;
        bottom: 0;
        left: 0;
        right: 0;
        z-index: 1;
      }
    }
    .ant-checkbox-checked .ant-checkbox-inner {
      background-color: #fff!important;
      border-color: #d9d9d9!important;
    }
  }
  table {
    max-width: 100%;
    width: 100%;
src/tabviews/custom/components/table/edit-table/normalTable/index.jsx
@@ -472,7 +472,7 @@
        _copy.sorter = false
        if (item.editable === 'true') {
          _copy.title = <span>{item.label}<EditOutlined className="system-color" style={{position: 'absolute', bottom: 0, right: 0}}/></span>
          _copy.title = <span>{item.label}<EditOutlined className="system-color" style={{position: 'absolute', bottom: '2px', right: '5px'}}/></span>
        }
        edColumns.push(_copy)
      }
src/tabviews/custom/components/table/normal-table/index.jsx
@@ -58,6 +58,15 @@
    let _cols = new Map()
    let _data = null
    let _sync = _config.setting.sync === 'true'
    if (_config.wrap.controlField) {
      if (_config.wrap.controlVal) {
        _config.wrap.controlVal = _config.wrap.controlVal.split(',')
      } else {
        _config.wrap.controlVal = ['']
      }
    }
    let setting = {..._config.setting, ..._config.wrap, style: {}}
    if (setting.selected !== 'always' && setting.selected !== 'init') {
@@ -79,6 +88,13 @@
        item.$$BID = BID || ''
        item.$$BData = BData || ''
        item.$Index = index + 1 + ''
        if (setting.controlField) {
          if (setting.controlVal.includes(item[setting.controlField])) {
            item.$disabled = true
          }
        }
        return item
      })
@@ -119,6 +135,8 @@
    if (_config.wrap.collapse === 'true') {
      _config.wrap.title = _config.wrap.title || ' '
    }
    _config.style = _config.style || {}
    this.setState({
      pageSize: setting.pageSize || 10,
@@ -219,6 +237,13 @@
          item.$$BID = BID || ''
          item.$$BData = BData || ''
          item.$Index = start + index + ''
          if (setting.controlField) {
            if (setting.controlVal.includes(item[setting.controlField])) {
              item.$disabled = true
            }
          }
          return item
        }),
        selectedData: [],
@@ -537,6 +562,13 @@
          item.$$BID = BID || ''
          item.$$BData = BData || ''
          item.$Index = index + 1 + ''
          if (setting.controlField) {
            if (setting.controlVal.includes(item[setting.controlField])) {
              item.$disabled = true
            }
          }
          return item
        })
@@ -583,10 +615,15 @@
  }
  render() {
    const { BID, setting, searchlist, actions, config, columns, selectedData, BData } = this.state
    const { BID, setting, searchlist, actions, config, columns, selectedData, BData, data } = this.state
    let style = {...config.style}
    if (config.wrap.empty === 'hidden' && (!data || data.length === 0)) {
      style.display = 'none'
    }
    return (
      <div className="custom-normal-table" style={config.style}>
      <div className="custom-normal-table" style={style}>
        {config.wrap.collapse === 'true' ? <Collapse bordered={false} defaultActiveKey="1" expandIconPosition="right">
          <Panel forceRender={true} header={<NormalHeader config={config}/>} key="1">
            {searchlist && searchlist.length ?
@@ -605,7 +642,7 @@
                setting={setting}
                columns={columns}
                MenuID={config.uuid}
                data={this.state.data}
                data={data}
                fields={config.columns}
                total={this.state.total}
                lineMarks={config.lineMarks}
src/tabviews/scriptmanage/config.jsx
@@ -47,7 +47,7 @@
    type: "Modal",
    setting: {
      "title":"添加",
      "width":60,
      "width": 80,
      "focus":"func",
      "cols":"2",
      "finish":"close",
@@ -69,7 +69,7 @@
    type: "Modal",
    setting: {
      "title":"修改",
      "width":60,
      "width": 80,
      "focus":"func",
      "cols":"2",
      "finish":"close",
src/tabviews/subtable/index.jsx
@@ -321,6 +321,14 @@
        config.setting.selected = 'false'
      }
      if (config.setting.controlField) {
        if (config.setting.controlVal) {
          config.setting.controlVal = config.setting.controlVal.split(',')
        } else {
          config.setting.controlVal = ['']
        }
      }
      this.setState({
        pageSize: config.setting.pageSize || 10,
        BID: this.props.BID || '',
@@ -633,6 +641,12 @@
          item.$$BID = BID || ''
          item.$Index = start + index + ''
          if (setting.controlField) {
            if (setting.controlVal.includes(item[setting.controlField])) {
              item.$disabled = true
            }
          }
          return item
        }),
        total: result.total,
src/tabviews/subtabtable/index.jsx
@@ -282,6 +282,14 @@
        config.setting.selected = 'false'
      }
      if (config.setting.controlField) {
        if (config.setting.controlVal) {
          config.setting.controlVal = config.setting.controlVal.split(',')
        } else {
          config.setting.controlVal = ['']
        }
      }
      this.setState({
        pageSize: config.setting.pageSize || 10,
        loadingview: false,
@@ -573,6 +581,12 @@
          item.$$BID = BID || ''
          item.$Index = start + index + ''
          if (setting.controlField) {
            if (setting.controlVal.includes(item[setting.controlField])) {
              item.$disabled = true
            }
          }
          return item
        }),
        total: result.total,
src/tabviews/zshare/actionList/changeuserbutton/index.jsx
@@ -21,6 +21,7 @@
    btn: PropTypes.object,            // 按钮
    selectedData: PropTypes.any,      // 子表中选择数据
    setting: PropTypes.any,           // 页面通用设置
    disabled: PropTypes.any,          // 行按钮禁用
  }
  state = {
@@ -41,7 +42,7 @@
          disabled = true
        }
      })
      this.setState({disabled, hidden: disabled && btn.control === 'hidden'})
      this.setState({hidden: disabled && btn.control === 'hidden'})
    } else if (btn.control === 'parent') {
      if (!BData || !BData.hasOwnProperty(btn.controlField)) {
        this.setState({hidden: true})
@@ -53,6 +54,10 @@
          this.setState({hidden: false})
        }
      }
    }
    if (this.props.disabled || disabled) {
      this.setState({disabled: true})
    }
  }
@@ -67,9 +72,8 @@
  UNSAFE_componentWillReceiveProps (nextProps) {
    const { btn, selectedData, BData } = this.props
    if (btn.controlField && !is(fromJS(nextProps.selectedData || []), fromJS(selectedData || []))) {
      let disabled = false
    if (btn.controlField && !is(fromJS(nextProps.selectedData || []), fromJS(selectedData || []))) {
      if (nextProps.selectedData && nextProps.selectedData.length > 0) { // 表格中按钮隐藏控制
        nextProps.selectedData.forEach(item => {
          let s = item[btn.controlField] + ''
@@ -91,6 +95,12 @@
        }
      }
    }
    if (nextProps.disabled || disabled) {
      this.setState({disabled: true})
    } else {
      this.setState({disabled: false})
    }
  }
  componentWillUnmount () {
src/tabviews/zshare/actionList/excelInbutton/index.jsx
@@ -24,6 +24,7 @@
    Tab: PropTypes.any,               // 如果当前元素为标签时,tab为标签信息
    btn: PropTypes.object,            // 按钮
    setting: PropTypes.any,           // 页面通用设置
    disabled: PropTypes.any,          // 行按钮禁用
  }
  state = {
@@ -46,7 +47,7 @@
          disabled = true
        }
      })
      this.setState({disabled, hidden: disabled && btn.control === 'hidden'})
      this.setState({hidden: disabled && btn.control === 'hidden'})
    } else if (btn.control === 'parent') {
      if (!BData || !BData.hasOwnProperty(btn.controlField)) {
        this.setState({hidden: true})
@@ -58,6 +59,10 @@
          this.setState({hidden: false})
        }
      }
    }
    if (this.props.disabled || disabled) {
      this.setState({disabled: true})
    }
  }
@@ -72,9 +77,8 @@
  UNSAFE_componentWillReceiveProps (nextProps) {
    const { btn, selectedData, BData } = this.props
    if (btn.controlField && !is(fromJS(nextProps.selectedData || []), fromJS(selectedData || []))) {
      let disabled = false
    if (btn.controlField && !is(fromJS(nextProps.selectedData || []), fromJS(selectedData || []))) {
      if (nextProps.selectedData && nextProps.selectedData.length > 0) { // 表格中按钮隐藏控制
        nextProps.selectedData.forEach(item => {
          let s = item[btn.controlField] + ''
@@ -96,6 +100,12 @@
        }
      }
    }
    if (nextProps.disabled || disabled) {
      this.setState({disabled: true})
    } else {
      this.setState({disabled: false})
    }
  }
  componentWillUnmount () {
src/tabviews/zshare/actionList/exceloutbutton/index.jsx
@@ -24,6 +24,7 @@
    btn: PropTypes.object,            // 按钮
    setting: PropTypes.any,           // 页面通用设置
    updateStatus: PropTypes.func,     // 按钮状态更新
    disabled: PropTypes.any,          // 行按钮禁用
  }
  state = {
@@ -31,11 +32,12 @@
    excelName: '',  // 文件名
    search: '',     // 搜索条件
    loading: false, // 导出中
    hidden: false
    hidden: false,
    disabled: false
  }
  UNSAFE_componentWillMount () {
    const { btn, BData } = this.props
    const { btn, BData, disabled } = this.props
    if (btn.control === 'parent') {
      if (!BData || !BData.hasOwnProperty(btn.controlField)) {
@@ -48,6 +50,10 @@
          this.setState({hidden: false})
        }
      }
    }
    if (disabled) {
      this.setState({disabled: true})
    }
  }
@@ -74,6 +80,12 @@
          this.setState({hidden: false})
        }
      }
    }
    if (nextProps.disabled) {
      this.setState({disabled: true})
    } else {
      this.setState({disabled: false})
    }
  }
@@ -106,9 +118,9 @@
   */
  actionTrigger = (triggerId) => {
    const { setting, Tab, BID, btn } = this.props
    const { loading } = this.state
    const { loading, disabled } = this.state
    if ((triggerId && btn.uuid !== triggerId) || loading) return
    if ((triggerId && btn.uuid !== triggerId) || loading || disabled) return
    if (((Tab && Tab.supMenu) || setting.supModule) && !BID) {
      notification.warning({
@@ -910,7 +922,7 @@
  render() {
    const { btn, show } = this.props
    const { loading, hidden } = this.state
    const { loading, hidden, disabled } = this.state
    if (hidden) return null
@@ -919,6 +931,7 @@
        <Button
          className={'mk-btn mk-' + btn.class}
          icon={btn.icon}
          disabled={disabled}
          onClick={(e) => {e.stopPropagation(); this.actionTrigger()}}
          loading={loading}
        >{btn.label}</Button>
@@ -945,6 +958,7 @@
          type="link"
          title={show === 'icon' ? btn.label : ''}
          loading={loading}
          disabled={disabled}
          style={btn.style}
          icon={icon}
          onClick={(e) => {e.stopPropagation(); this.actionTrigger()}}
src/tabviews/zshare/actionList/newpagebutton/index.jsx
@@ -18,6 +18,7 @@
    btn: PropTypes.object,            // 按钮
    selectedData: PropTypes.any,      // 子表中选择数据
    setting: PropTypes.any,           // 页面通用设置
    disabled: PropTypes.any,          // 行按钮禁用
  }
  state = {
@@ -38,7 +39,7 @@
          disabled = true
        }
      })
      this.setState({disabled, hidden: disabled && btn.control === 'hidden'})
      this.setState({hidden: disabled && btn.control === 'hidden'})
    } else if (btn.control === 'parent') {
      if (!BData || !BData.hasOwnProperty(btn.controlField)) {
        this.setState({hidden: true})
@@ -50,6 +51,10 @@
          this.setState({hidden: false})
        }
      }
    }
    if (this.props.disabled || disabled) {
      this.setState({disabled: true})
    }
  }
@@ -64,9 +69,8 @@
  UNSAFE_componentWillReceiveProps (nextProps) {
    const { btn, selectedData, BData } = this.props
    if (btn.controlField && !is(fromJS(nextProps.selectedData || []), fromJS(selectedData || []))) {
      let disabled = false
    if (btn.controlField && !is(fromJS(nextProps.selectedData || []), fromJS(selectedData || []))) {
      if (nextProps.selectedData && nextProps.selectedData.length > 0) { // 表格中按钮隐藏控制
        nextProps.selectedData.forEach(item => {
          let s = item[btn.controlField] + ''
@@ -75,7 +79,7 @@
          }
        })
      }
      this.setState({disabled, hidden: disabled && btn.control === 'hidden'})
      this.setState({hidden: disabled && btn.control === 'hidden'})
    } else if (btn.control === 'parent' && !is(fromJS(nextProps.BData || {}), fromJS(BData || {}))) {
      if (!nextProps.BData || !nextProps.BData.hasOwnProperty(btn.controlField)) {
        this.setState({hidden: true})
@@ -88,6 +92,12 @@
        }
      }
    }
    if (nextProps.disabled || disabled) {
      this.setState({disabled: true})
    } else {
      this.setState({disabled: false})
    }
  }
  componentWillUnmount () {
src/tabviews/zshare/actionList/normalbutton/index.jsx
@@ -32,6 +32,7 @@
    columns: PropTypes.any,           // 字段列
    setting: PropTypes.any,           // 页面通用设置
    ContainerId: PropTypes.any,       // tab页面ID,用于弹窗控制
    disabled: PropTypes.any,          // 行按钮禁用
  }
  state = {
@@ -62,7 +63,7 @@
          disabled = true
        }
      })
      this.setState({disabled, hidden: disabled && btn.control === 'hidden'})
      this.setState({hidden: disabled && btn.control === 'hidden'})
    } else if (btn.control === 'parent') {
      if (!BData || !BData.hasOwnProperty(btn.controlField)) {
        this.setState({hidden: true})
@@ -74,6 +75,9 @@
          this.setState({hidden: false})
        }
      }
    }
    if (this.props.disabled || disabled) {
      this.setState({disabled: true})
    }
  }
@@ -98,9 +102,8 @@
  UNSAFE_componentWillReceiveProps (nextProps) {
    const { btn, selectedData, BData } = this.props
    if (btn.controlField && !is(fromJS(nextProps.selectedData || []), fromJS(selectedData || []))) {
      let disabled = false
    if (btn.controlField && !is(fromJS(nextProps.selectedData || []), fromJS(selectedData || []))) {
      if (nextProps.selectedData && nextProps.selectedData.length > 0) { // 表格中按钮隐藏控制
        nextProps.selectedData.forEach(item => {
          let s = item[btn.controlField] + ''
@@ -109,7 +112,7 @@
          }
        })
      }
      this.setState({disabled, hidden: disabled && btn.control === 'hidden'})
      this.setState({hidden: disabled && btn.control === 'hidden'})
    } else if (btn.control === 'parent' && !is(fromJS(nextProps.BData || {}), fromJS(BData || {}))) {
      if (!nextProps.BData || !nextProps.BData.hasOwnProperty(btn.controlField)) {
        this.setState({hidden: true})
@@ -122,6 +125,12 @@
        }
      }
    }
    if (nextProps.disabled || disabled) {
      this.setState({disabled: true})
    } else {
      this.setState({disabled: false})
    }
  }
  componentWillUnmount () {
src/tabviews/zshare/actionList/popupbutton/index.jsx
@@ -23,6 +23,7 @@
    MenuID: PropTypes.string,         // 菜单ID
    btn: PropTypes.object,            // 按钮
    setting: PropTypes.any,           // 页面通用设置
    disabled: PropTypes.any,          // 行按钮禁用
  }
  state = {
@@ -59,6 +60,10 @@
        }
      }
    }
    if (this.props.disabled || disabled) {
      this.setState({disabled: true})
    }
  }
  shouldComponentUpdate (nextProps, nextState) {
@@ -75,9 +80,8 @@
  UNSAFE_componentWillReceiveProps (nextProps) {
    const { btn, selectedData, BData } = this.props
    if (btn.controlField && !is(fromJS(nextProps.selectedData || []), fromJS(selectedData || []))) {
      let disabled = false
    if (btn.controlField && !is(fromJS(nextProps.selectedData || []), fromJS(selectedData || []))) {
      if (nextProps.selectedData && nextProps.selectedData.length > 0) { // 表格中按钮隐藏控制
        nextProps.selectedData.forEach(item => {
          let s = item[btn.controlField] + ''
@@ -86,7 +90,7 @@
          }
        })
      }
      this.setState({disabled, hidden: disabled && btn.control === 'hidden'})
      this.setState({hidden: disabled && btn.control === 'hidden'})
    } else if (btn.control === 'parent' && !is(fromJS(nextProps.BData || {}), fromJS(BData || {}))) {
      if (!nextProps.BData || !nextProps.BData.hasOwnProperty(btn.controlField)) {
        this.setState({hidden: true})
@@ -98,6 +102,12 @@
          this.setState({hidden: false})
        }
      }
    }
    if (nextProps.disabled || disabled) {
      this.setState({disabled: true})
    } else {
      this.setState({disabled: false})
    }
  }
@@ -279,7 +289,7 @@
      return (
        <Drawer
          title={btn.label}
          className={btn.$view === 'CustomPage' ? 'custom-drawer-popview' : ''}
          className={btn.$view === 'CustomPage' ? 'custom-drawer-popview' : 'table-drawer-popview'}
          width={width}
          height={height}
          maskClosable={btn.clickouter === 'close'}
src/tabviews/zshare/actionList/popupbutton/index.scss
@@ -6,6 +6,19 @@
    }
  }
}
.table-drawer-popview {
  .close-drawer {
    position: absolute;
    z-index: 3;
    right: 0;
    bottom: 0;
    width: 100%;
    padding: 8px 16px;
    background: #fff;
    text-align: right;
    box-shadow: 0 0 3px #cbcbcb;
  }
}
.custom-drawer-popview {
  .ant-drawer-content {
    .ant-drawer-header {
src/tabviews/zshare/actionList/printbutton/index.jsx
@@ -31,6 +31,7 @@
    btn: PropTypes.object,            // 按钮
    setting: PropTypes.any,           // 页面通用设置
    ContainerId: PropTypes.any,       // tab页面ID,用于弹窗控制
    disabled: PropTypes.any,          // 行按钮禁用
  }
  state = {
@@ -57,7 +58,7 @@
          disabled = true
        }
      })
      this.setState({disabled, hidden: disabled && btn.control === 'hidden'})
      this.setState({hidden: disabled && btn.control === 'hidden'})
    } else if (btn.control === 'parent') {
      if (!BData || !BData.hasOwnProperty(btn.controlField)) {
        this.setState({hidden: true})
@@ -69,6 +70,10 @@
          this.setState({hidden: false})
        }
      }
    }
    if (this.props.disabled || disabled) {
      this.setState({disabled: true})
    }
  }
@@ -89,9 +94,8 @@
  UNSAFE_componentWillReceiveProps (nextProps) {
    const { btn, selectedData, BData } = this.props
    if (btn.controlField && !is(fromJS(nextProps.selectedData || []), fromJS(selectedData || []))) {
      let disabled = false
    if (btn.controlField && !is(fromJS(nextProps.selectedData || []), fromJS(selectedData || []))) {
      if (nextProps.selectedData && nextProps.selectedData.length > 0) { // 表格中按钮隐藏控制
        nextProps.selectedData.forEach(item => {
          let s = item[btn.controlField] + ''
@@ -113,6 +117,12 @@
        }
      }
    }
    if (nextProps.disabled || disabled) {
      this.setState({disabled: true})
    } else {
      this.setState({disabled: false})
    }
  }
  componentWillUnmount () {
src/tabviews/zshare/actionList/tabbutton/index.jsx
@@ -18,6 +18,7 @@
    btn: PropTypes.object,            // 按钮
    selectedData: PropTypes.any,      // 子表中选择数据
    setting: PropTypes.any,           // 页面通用设置
    disabled: PropTypes.any,          // 行按钮禁用
  }
  state = {
@@ -38,7 +39,7 @@
          disabled = true
        }
      })
      this.setState({disabled, hidden: disabled && btn.control === 'hidden'})
      this.setState({hidden: disabled && btn.control === 'hidden'})
    } else if (btn.control === 'parent') {
      if (!BData || !BData.hasOwnProperty(btn.controlField)) {
        this.setState({hidden: true})
@@ -50,6 +51,10 @@
          this.setState({hidden: false})
        }
      }
    }
    if (this.props.disabled || disabled) {
      this.setState({disabled: true})
    }
  }
@@ -64,9 +69,8 @@
  UNSAFE_componentWillReceiveProps (nextProps) {
    const { btn, selectedData, BData } = this.props
    if (btn.controlField && !is(fromJS(nextProps.selectedData || []), fromJS(selectedData || []))) {
      let disabled = false
    if (btn.controlField && !is(fromJS(nextProps.selectedData || []), fromJS(selectedData || []))) {
      if (nextProps.selectedData && nextProps.selectedData.length > 0) { // 表格中按钮隐藏控制
        nextProps.selectedData.forEach(item => {
          let s = item[btn.controlField] + ''
@@ -75,7 +79,7 @@
          }
        })
      }
      this.setState({disabled, hidden: disabled && btn.control === 'hidden'})
      this.setState({hidden: disabled && btn.control === 'hidden'})
    } else if (btn.control === 'parent' && !is(fromJS(nextProps.BData || {}), fromJS(BData || {}))) {
      if (!nextProps.BData || !nextProps.BData.hasOwnProperty(btn.controlField)) {
        this.setState({hidden: true})
@@ -88,6 +92,12 @@
        }
      }
    }
    if (nextProps.disabled || disabled) {
      this.setState({disabled: true})
    } else {
      this.setState({disabled: false})
    }
  }
  componentWillUnmount () {
src/tabviews/zshare/automatic/index.jsx
@@ -110,6 +110,15 @@
    if (!this.state.running || MenuID !== config.MenuID) return
    if (data.$disabled) {
      this.setState({line: this.state.line + 1}, () => {
        setTimeout(() => {
          MKEmitter.emit('autoQueryData', config.MenuID, this.state.line)
        }, 100)
      })
      return
    }
    setTimeout(() => {
      MKEmitter.emit('triggerBtnId', autoMatic.action, [data], 'autoMatic')
      if (['prompt', 'pop'].includes(autoMatic.OpenType)) {
src/tabviews/zshare/normalTable/index.jsx
@@ -269,7 +269,7 @@
    if (id !== this.props.MenuID) return
    if (this.props.data.length > 0) {
      this.changeRow(null, 0)
      this.changeRow(this.props.data[0], 0)
    }
  }
@@ -281,7 +281,7 @@
    let i = index - (pageIndex - 1) * pageSize - 1
    if (this.props.data[i]) {
      this.changeRow(null, i)
      this.changeRow(this.props.data[i], i)
      MKEmitter.emit('autoTransSelectData', this.props.MenuID, this.props.data[i])
    } else {
      MKEmitter.emit('autoMaticOver', this.props.MenuID)
@@ -481,7 +481,7 @@
        content = md5(content)
      }
      if (item.linkThdMenu || item.linkurl) {
      if (!record.$disabled && (item.linkThdMenu || item.linkurl)) {
        if (item.rowspan === 'true') {
          return {
            children: (
@@ -580,7 +580,7 @@
        content = md5(content)
      }
      if (item.linkThdMenu || item.linkurl) {
      if (!record.$disabled && (item.linkThdMenu || item.linkurl)) {
        if (item.rowspan === 'true') {
          return {
            children: (
@@ -725,6 +725,7 @@
                  key={btn.uuid}
                  btn={btn}
                  BID={record.$$BID}
                  disabled={record.$disabled}
                  selectedData={[record]}
                  BData={this.props.BData}
                  setting={this.props.setting}
@@ -738,6 +739,7 @@
                  key={btn.uuid}
                  btn={btn}
                  BID={record.$$BID}
                  disabled={record.$disabled}
                  selectedData={[record]}
                  BData={this.props.BData}
                  setting={this.props.setting}
@@ -748,6 +750,7 @@
                <TabButton
                  key={btn.uuid}
                  btn={btn}
                  disabled={record.$disabled}
                  selectedData={[record]}
                  BData={this.props.BData}
                  MenuID={this.props.MenuID}
@@ -759,6 +762,7 @@
                <NewPageButton
                  key={btn.uuid}
                  btn={btn}
                  disabled={record.$disabled}
                  selectedData={[record]}
                  BData={this.props.BData}
                  setting={this.props.setting}
@@ -1029,7 +1033,7 @@
    this.setState({ selectedRowKeys, activeIndex: _activeIndex })
    let selects = this.props.data.filter((item, _index) => selectedRowKeys.includes(_index))
    let selects = this.props.data.filter((item, _index) => selectedRowKeys.includes(_index) && !item.$disabled)
    this.props.chgSelectData(selects)
  }
@@ -1039,6 +1043,7 @@
   */
  changeRow = (record, index) => {
    if (!this.props.setting.tableType || this.props.pickup) return
    if (record.$disabled) return
    
    let newkeys = fromJS(this.state.selectedRowKeys).toJS()
@@ -1171,6 +1176,7 @@
    const { setting } = this.props
    if (!setting.doubleClick) return
    if (record.$disabled) return
    MKEmitter.emit('triggerBtnId', setting.doubleClick, [record])
  }
@@ -1281,7 +1287,9 @@
          dataSource={_data}
          rowClassName={(record) => {
            let className = ''
            if ((setting.tableType === 'checkbox' || setting.tableType === 'radio') && record.key === activeIndex) {
            if (record.$disabled) {
              className = 'mk-disabled '
            } else if ((setting.tableType === 'checkbox' || setting.tableType === 'radio') && record.key === activeIndex) {
              className = 'mk-row-active '
            }
src/tabviews/zshare/normalTable/index.scss
@@ -23,6 +23,30 @@
    }
  }
  .mk-disabled {
    color: #bcbcbc;
    cursor: not-allowed;
    .ant-btn {
      cursor: not-allowed;
    }
    .ant-table-selection-column {
      > span::after {
        content: ' ';
        display: block;
        position: absolute;
        top: 0;
        bottom: 0;
        left: 0;
        right: 0;
        z-index: 1;
      }
    }
    .ant-checkbox-checked .ant-checkbox-inner {
      background-color: #fff!important;
      border-color: #d9d9d9!important;
    }
  }
  table {
    max-width: 100%;
    width: 100%;
src/templates/comtableconfig/index.jsx
@@ -292,6 +292,11 @@
      })
    }
    // 按钮不存在时,去掉绑定的双击按钮
    if (_config.setting.doubleClick && _config.action.findIndex((item) => item.uuid === _config.setting.doubleClick) === -1) {
      _config.setting.doubleClick = ''
    }
    // 未设置数据源或标签不合法时,启用状态为false
    let vresult = this.verifyconfig(_config)
    if (vresult !== true) {
src/templates/sharecomponent/settingcomponent/settingform/datasource/index.jsx
@@ -29,6 +29,7 @@
    interType: 'system',
    procMode: 'script',
    requestMode: 'system',
    controlField: '',
    tableType: '',
    funcTooltip: '',
    funcRules: []
@@ -66,6 +67,7 @@
      interType: setting.interType || 'system',
      procMode: setting.procMode || 'script',
      requestMode: setting.requestMode || 'system',
      controlField: setting.controlField || '',
      tableType: setting.tableType,
      funcTooltip: tooltip,
      funcRules: rules
@@ -195,7 +197,7 @@
  render() {
    const { setting, dict, menu, config, columns } = this.props
    const { getFieldDecorator } = this.props.form
    const { interType, funcRules, funcTooltip, procMode, requestMode, tableType } = this.state
    const { interType, funcRules, funcTooltip, procMode, requestMode, tableType, controlField } = this.state
    const formItemLayout = {
      labelCol: {
@@ -786,6 +788,38 @@
                })(<InputNumber min={12} max={50} precision={0}/>)}
              </Form.Item>
            </Col>
            <Col span={12}>
              <Form.Item label={
                <Tooltip placement="topLeft" title="用于控制行数据是否可选择。">
                  <QuestionCircleOutlined className="mk-form-tip" />
                  禁用字段
                </Tooltip>
              }>
                {getFieldDecorator('controlField', {
                  initialValue: setting.controlField || ''
                })(
                  <Select allowClear onChange={(val) => this.setState({controlField: val})}>
                    {columns.map((option, i) =>
                      <Select.Option key={i} value={option.value}>
                        {option.text}
                      </Select.Option>
                    )}
                  </Select>
                )}
              </Form.Item>
            </Col>
            {controlField ? <Col span={12}>
              <Form.Item label={
                <Tooltip placement="topLeft" title="当字段值与控制值相等时,行数据会禁用,多个值用逗号分隔。">
                  <QuestionCircleOutlined className="mk-form-tip" />
                  控制值
                </Tooltip>
              }>
                {getFieldDecorator('controlVal', {
                  initialValue: setting.controlVal || ''
                })(<Input autoComplete="off" />)}
              </Form.Item>
            </Col> : null}
          </Row>
        </Form>
      </div>
src/templates/subtableconfig/index.jsx
@@ -276,6 +276,10 @@
      }
    }
    if (_config.setting.doubleClick && _config.action.findIndex((item) => item.uuid === _config.setting.doubleClick) === -1) {
      _config.setting.doubleClick = ''
    }
    // 未设置数据源或主键时,启用状态为false
    let result = this.verifyconfig(_config)
  
src/views/menudesign/index.jsx
@@ -922,6 +922,10 @@
          error = `组件《${item.name}》坐标轴尚未设置!`
        } else if (item.type === 'tree' && (!item.wrap.valueField || !item.wrap.labelField || !item.wrap.parentField)) {
          error = `组件《${item.name}》基本信息尚未设置!`
        } else if (item.type === 'table' && item.wrap.doubleClick) {
          if (item.action.findIndex((m) => m.uuid === item.wrap.doubleClick) === -1) {
            error = `组件《${item.name}》绑定的双击按钮已删除!`
          }
        }
      })
    }
src/views/mobdesign/index.jsx
@@ -214,6 +214,13 @@
        duration: 5
      })
      return
    } else if (['AIService'].includes(menu.MenuID)) {
      notification.warning({
        top: 92,
        message: '系统页面不可编辑!',
        duration: 5
      })
      return
    }
    let param = {
src/views/pcdesign/index.jsx
@@ -1467,6 +1467,10 @@
          error = `组件《${item.name}》坐标轴尚未设置!`
        } else if (item.type === 'tree' && (!item.wrap.valueField || !item.wrap.labelField || !item.wrap.parentField)) {
          error = `组件《${item.name}》基本信息尚未设置!`
        } else if (item.type === 'table' && item.wrap.doubleClick) {
          if (item.action.findIndex((m) => m.uuid === item.wrap.doubleClick) === -1) {
            error = `组件《${item.name}》绑定的双击按钮已删除!`
          }
        }
      })
    }