king
2025-03-05 4d6b132ef4d1ecb55397fa82dd8f18ab150b1e60
Merge branch 'develop'
22个文件已修改
412 ■■■■ 已修改文件
public/manifest.json 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/group/normal-group/index.jsx 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/group/normal-group/options.jsx 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/table/edit-table/columns/tableIn/index.jsx 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/debug/index.jsx 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/lowerField/index.jsx 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/basetable/index.jsx 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/card/prop-card/index.jsx 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/editor/braft-editor/index.scss 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/group/normal-group/index.jsx 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/share/braftContent/index.scss 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/table/edit-table/index.jsx 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/index.jsx 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/actionList/normalbutton/index.jsx 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/mutilform/index.jsx 25 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/zshare/modalform/index.jsx 89 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/zshare/verifycard/baseform/index.jsx 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/zshare/verifycard/index.jsx 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/utils-custom.js 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/billprint/index.jsx 25 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mkai/index.jsx 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mkai/index.scss 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
public/manifest.json
@@ -6,5 +6,5 @@
  "display": "standalone",
  "theme_color": "#000000",
  "background_color": "#ffffff",
  "mk_version": "20250205"
  "mk_version": "20250301"
}
src/menu/components/group/normal-group/index.jsx
@@ -116,9 +116,20 @@
  }
  getWrapForms = () => {
    const { setting } = this.state.group
    const { group } = this.state
    return getSettingForm(setting)
    let list = []
    group.components.forEach(item => {
      if (item.type === 'card' && item.subtype === 'propcard') {
        list.push({
          value: item.uuid,
          label: item.name,
          disabled: item.wrap.empty !== 'hidden'
        })
      }
    })
    return getSettingForm(group.setting, list)
  }
  updateWrap = (res) => {
@@ -175,7 +186,7 @@
        <NormalHeader hideSearch="true" config={group} updateComponent={this.updateComponent}/>
        <Popover overlayClassName="mk-popover-control-wrap" mouseLeaveDelay={0.2} mouseEnterDelay={0.2} content={
          <div className="mk-popover-control">
            <NormalForm title="分组设置" width={700} update={this.updateWrap} getForms={this.getWrapForms}>
            <NormalForm title="分组设置" width={800} update={this.updateWrap} getForms={this.getWrapForms}>
              <EditOutlined style={{color: '#1890ff'}} title="编辑"/>
            </NormalForm>
            <CopyComponent type="group" card={group}/>
src/menu/components/group/normal-group/options.jsx
@@ -1,7 +1,7 @@
/**
 * @description Wrap表单配置信息
 */
export default function (setting) {
export default function (setting, list) {
  let roleList = sessionStorage.getItem('sysRoles')
  let appType = sessionStorage.getItem('appType')
@@ -42,6 +42,16 @@
      precision: 0,
      required: true
    },
    {
      type: 'select',
      field: 'bindPropId',
      label: '显示状态绑定',
      initval: setting.bindPropId || '',
      tooltip: '分组可绑定设有空值隐藏的属性卡,当属性卡隐藏时分组一同隐藏。',
      required: false,
      options: list,
      forbid: appType === 'mob'
    },
    // {
    //   type: 'radio',
    //   field: 'print',
src/menu/components/table/edit-table/columns/tableIn/index.jsx
@@ -512,6 +512,8 @@
    forms.forEach(col => {
      if (/date/.test(col.datatype)) {
        vals.push(`'1949-10-01'`)
      } else if (col.editType && ['select', 'popSelect'].includes(col.editType)) {
        vals.push(`'0'`)
      } else if (col.type === 'number') {
        vals.push(`1`)
      } else {
src/menu/debug/index.jsx
@@ -76,9 +76,14 @@
        render: (_, record) => {
          return <span className="anticon anticon-deepseek" onClick={() => {
            if (record.sql) {
              sessionStorage.setItem('deepseek_sql', record.sql)
              sessionStorage.setItem('deepseek_sql', `请检查以下代码,指出其可优化的地方\n${record.sql}`)
              window.open('#/ai')
              setTimeout(() => {
                sessionStorage.removeItem('deepseek_sql')
              }, 0)
            }
            window.open('#/ai')
          }}>
            <svg viewBox="0 0 1391 1024" width="1.5em" height="1.5em" fill="currentColor">
              <path d="M1361.92 83.136c-14.272-7.04-20.416 6.272-28.736 12.992-2.816 2.24-5.248 5.12-7.68 7.68-20.8 22.336-45.056 36.864-76.8 35.136-46.464-2.56-86.08 12.032-121.152 47.616-7.552-43.904-32.256-70.08-69.888-86.912-19.712-8.768-39.68-17.472-53.376-36.48-9.664-13.44-12.288-28.48-17.216-43.264-3.008-8.96-6.08-18.112-16.32-19.712-11.2-1.728-15.552 7.68-19.968 15.424-17.536 32.128-24.32 67.52-23.68 103.296 1.6 80.448 35.52 144.576 103.04 190.144 7.68 5.312 9.6 10.56 7.168 18.176-4.608 15.68-10.048 30.976-14.912 46.592-3.072 10.112-7.68 12.352-18.304 8a308.224 308.224 0 0 1-97.28-66.176c-48-46.4-91.392-97.664-145.472-137.792a655.36 655.36 0 0 0-38.528-26.432c-55.232-53.76 7.232-97.792 21.632-103.04 15.104-5.376 5.312-24.128-43.52-23.936C652.032 24.704 607.36 41.024 550.4 62.72a156.8 156.8 0 0 1-26.048 7.68 542.016 542.016 0 0 0-161.408-5.696c-105.6 11.904-189.888 61.824-251.904 147.2C36.608 314.24 19.072 430.848 40.512 552.32c22.528 128 87.808 234.048 188.16 316.992 104 85.888 223.808 128 360.512 120 82.944-4.864 175.424-16 279.68-104.32 26.368 13.056 53.888 18.24 99.712 22.272 35.2 3.328 69.184-1.792 95.424-7.232 41.216-8.704 38.4-46.848 23.424-53.888-120.576-56.32-94.208-33.408-118.272-51.84 61.376-72.768 153.792-148.224 189.952-392.768 2.816-19.392 0.384-31.552 0-47.36-0.256-9.536 1.92-13.312 12.8-14.4a231.04 231.04 0 0 0 86.592-26.56c78.272-42.88 109.696-113.024 117.184-197.184 1.088-12.928-0.256-26.24-13.76-32.96z m-681.408 757.76c-116.928-92.096-173.696-122.368-197.12-120.96-21.888 1.152-17.984 26.304-13.184 42.624 5.12 16.128 11.648 27.328 20.8 41.408 6.464 9.408 10.752 23.424-6.272 33.92-37.76 23.424-103.232-7.872-106.24-9.472-76.288-44.8-140.032-104.192-184.96-185.344-43.264-78.08-68.48-161.92-72.576-251.328-1.152-21.632 5.184-29.312 26.688-33.152a265.6 265.6 0 0 1 85.696-2.24c119.296 17.472 220.928 71.04 306.048 155.52 48.768 48.32 85.504 105.92 123.392 162.176 40.256 59.776 83.648 116.672 138.88 163.392 19.392 16.32 35.072 28.8 49.92 37.952-44.928 5.056-119.872 6.08-171.008-34.496z m56.064-361.024a17.152 17.152 0 1 1 2.752 9.6 16.896 16.896 0 0 1-2.752-9.664z m174.08 89.472a102.72 102.72 0 0 1-33.024 8.96 70.528 70.528 0 0 1-44.736-14.272c-15.296-12.8-26.176-19.968-30.848-42.496a99.264 99.264 0 0 1 0.832-32.96c4.032-18.368-0.384-30.08-13.248-40.768-10.624-8.768-23.872-11.072-38.592-11.072a31.168 31.168 0 0 1-14.272-4.416c-6.144-3.072-11.136-10.752-6.336-20.16 1.536-3.008 8.96-10.304 10.752-11.712 19.84-11.328 42.88-7.68 64.192 0.896 19.712 8.064 34.56 22.848 56 43.776 21.952 25.28 25.792 32.384 38.4 51.328 9.856 14.848 18.816 30.208 24.96 47.616 3.776 10.88-1.152 19.776-14.08 25.28z"></path>
@@ -2101,6 +2106,8 @@
    forms.forEach(col => {
      if (/date/.test(col.datatype)) {
        vals.push(`'1949-10-01'`)
      } else if (col.editType && ['select', 'popSelect'].includes(col.editType)) {
        vals.push(`'0'`)
      } else if (col.type === 'number') {
        vals.push(`1`)
      } else {
src/menu/lowerField/index.jsx
@@ -66,7 +66,7 @@
      })
    }
    let resetElement = (m) => {
      if (m.field) {
      if (m.field && m.field !== '$Index') {
        m.field = m.field.toLowerCase()
      }
      if (m.posterField) {
@@ -219,7 +219,7 @@
        if (item.subcards) {
          item.subcards.forEach(card => {
            if (card.setting) {
              if (card.setting.controlField) {
              if (card.setting.controlField && card.setting.controlField !== '$Index') {
                card.setting.controlField = card.setting.controlField.toLowerCase()
              }
              if (card.setting.bgField) {
src/tabviews/basetable/index.jsx
@@ -180,6 +180,15 @@
        }
      }
      if (config.urlFields && config.urlFields.length) {
        config.urlFields.forEach(field => {
          let key = field.toLowerCase()
          if (urlparam[key] !== undefined) return
          urlparam[key] = ''
        })
      }
      window.GLOB.CacheData.set(MenuID, urlparam)
      if (window.backend && config.allSqls) {
@@ -213,7 +222,7 @@
      }
      if (config.urlFields) {
        config.urlFields.forEach(field => {
          let val = `'${urlparam[field.toLowerCase()] || ''}'`
          let val = `'${urlparam[field.toLowerCase()]}'`
          regs.push({
            reg: new RegExp('@' + field + '@', 'ig'),
            value: val
src/tabviews/custom/components/card/prop-card/index.jsx
@@ -211,6 +211,8 @@
              this.setState({data: _data}, () => {
                if (selected !== 'false') {
                  this.checkTopLine()
                } else if (config.wrap.empty === 'hidden') {
                  MKEmitter.emit('resetSelectLine', config.uuid, _data.$$uuid || '', _data)
                }
              })
            })
@@ -286,7 +288,7 @@
        } else {
          if (selected !== 'false') {
            this.checkTopLine()
          } else if (data.$$uuid) {
          } else {
            this.transferLine()
          }
          this.autoExec()
@@ -340,7 +342,7 @@
      } else {
        if (selected !== 'false') {
          this.checkTopLine()
        } else if (_data.$$uuid) {
        } else {
          this.transferLine()
        }
        this.autoExec()
@@ -432,7 +434,12 @@
  transferLine = () => {
    const { config, data } = this.state
    if (config.wrap.cardType) return
    if (config.wrap.cardType) {
      if (config.wrap.empty === 'hidden') {
        MKEmitter.emit('resetSelectLine', config.uuid, data.$$uuid || '', data)
      }
      return
    }
    MKEmitter.emit('resetSelectLine', config.uuid, data.$$uuid || '', data)
  }
src/tabviews/custom/components/editor/braft-editor/index.scss
@@ -26,14 +26,26 @@
      background: #ffffff;
    }
  }
  .braft-content table.no-border {
    td, th {
      border: none;
  .braft-content {
    table.no-border {
      td, th {
        border: none;
      }
    }
  }
  .braft-content table.align-center {
    td, th {
      text-align: center;
    table.align-center {
      td, th {
        text-align: center;
      }
    }
    table.deep-border {
      td, th {
        border-color: rgba(0, 0, 0, 0.85);
      }
    }
    table.word-break {
      td, th {
        word-break: break-all;
      }
    }
  }
}
@@ -49,7 +61,7 @@
}
.custom-braft-editor-box.no-border {
  .braft-content {
    table:not(.border) {
    table:not(.border):not(.deep-border) {
      td, th {
        border: none!important;
      }
@@ -79,7 +91,7 @@
}
.custom-braft-editor-box.word-break {
  .braft-content {
    table {
    table:not(.no-break) {
      td, th {
        word-break: break-all!important;
      }
@@ -88,7 +100,7 @@
}
.custom-braft-editor-box.tb-flex {
  .braft-content {
    table {
    table:not(.no-flex) {
      table-layout: fixed;
    }
  }
src/tabviews/custom/components/group/normal-group/index.jsx
@@ -3,6 +3,7 @@
import { DoubleLeftOutlined, DoubleRightOutlined } from '@ant-design/icons'
import asyncComponent from '@/utils/asyncComponent'
import MKEmitter from '@/utils/events.js'
import './index.scss'
const TabTransfer = asyncComponent(() => import('@/tabviews/custom/components/share/tabtransfer'))
@@ -14,24 +15,64 @@
  state = {
    visible: true,
    hidden: this.props.config.setting.bindPropId ? null : false,
    mergeAble: this.props.config.setting.mergeAble === 'true'
  }
  componentDidMount () {
    const { config } = this.props
    if (config.setting.bindPropId) {
      MKEmitter.addListener('resetSelectLine', this.resetStatus)
    }
  }
  componentWillUnmount () {
    this.setState = () => {
      return
    }
    MKEmitter.removeListener('resetSelectLine', this.resetStatus)
  }
  resetStatus = (MenuID, _, data) => {
    const { config } = this.props
    if (config.setting.bindPropId !== MenuID) return
    if (!data || data.$$empty) {
      this.setState({hidden: true})
    } else {
      this.setState({hidden: false})
    }
  }
  render() {
    const { config, style } = this.props
    const { visible, mergeAble } = this.state
    const { visible, mergeAble, hidden } = this.state
    if (config.components.length === 0) return (<div className={'ant-col ant-col-' + config.width} style={style}><div style={config.style}></div></div>)
    let _wrapStyle = style
    if (hidden) {
      _wrapStyle = {...style}
      _wrapStyle.display = 'none'
    }
    let title = config.setting && config.setting.title
    if (title && hidden === null) {
      title = ''
    }
    
    return (
      <div className={`ant-col ant-col-${config.width} ${mergeAble ? ' mk-merge-able mk-ctrl-' + (config.setting.ctrlNumber || 1) : ''} ${visible ? '' : ' close'}`} style={style}>
      <div className={`ant-col ant-col-${config.width} ${mergeAble ? ' mk-merge-able mk-ctrl-' + (config.setting.ctrlNumber || 1) : ''} ${visible ? '' : ' close'}`} style={_wrapStyle}>
        <div className={'normal-group-wrap ' + (config.setting.layout || '')} id={'anchor' + config.uuid} style={config.style}>
          <div className="mk-control">
            <DoubleLeftOutlined onClick={() => this.setState({visible: false})}/>
            <DoubleRightOutlined onClick={() => this.setState({visible: true})}/>
          </div>
          {config.setting && config.setting.title ? <div className="group-header" style={config.headerStyle}>
            <span className="title">{config.setting.title}</span>
          {title ? <div className="group-header" style={config.headerStyle}>
            <span className="title">{title}</span>
          </div> : null}
          <TabTransfer config={config}/>
        </div>
src/tabviews/custom/components/share/braftContent/index.scss
@@ -32,12 +32,14 @@
    border-collapse: collapse;
    border-spacing: 0;
    margin: 10px 0px;
    --table-font-size: 16px;
    tr:first-child {
      background-color: #f0f0f0;
    }
    td, th {
      padding: 5px 10px;
      font-size: 16px;
      font-size: var(--table-font-size, 16px);
      border: 1px solid #ddd;
    }
  }
src/tabviews/custom/components/table/edit-table/index.jsx
@@ -437,6 +437,7 @@
        total: 0
      })
      reset && MKEmitter.emit('resetTable', config.uuid, 'true') // 列表重置
      MKEmitter.emit('transferData' + setting.tableId, [])
      this.requestId = ''
      return
src/tabviews/custom/index.jsx
@@ -225,6 +225,15 @@
        }
      }
      if (config.urlFields && config.urlFields.length) {
        config.urlFields.forEach(field => {
          let key = field.toLowerCase()
          if (urlparam[key] !== undefined) return
          urlparam[key] = ''
        })
      }
      window.GLOB.CacheData.set(MenuID, urlparam)
      if (window.backend && config.allSqls) {
@@ -258,7 +267,7 @@
      }
      if (config.urlFields) {
        config.urlFields.forEach(field => {
          let val = `'${urlparam[field.toLowerCase()] || ''}'`
          let val = `'${urlparam[field.toLowerCase()]}'`
          regs.push({
            reg: new RegExp('@' + field + '@', 'ig'),
            value: val
src/tabviews/zshare/actionList/normalbutton/index.jsx
@@ -425,6 +425,13 @@
        duration: 5
      })
      return false
    } else if (btn.Ot !== 'notRequired' && data[0] && !data[0].$$uuid) {
      notification.warning({
        top: 92,
        message: dict['id_required'] || '未获取到ID值!',
        duration: 5
      })
      return false
    } else if (btn.Ot === 'requiredSgl' && data.length !== 1) {
      // 需要选择单行时,校验数据
      notification.warning({
@@ -3124,7 +3131,7 @@
    const { btn } = this.props
    if (!btn.verify) return
    if (btn.verify.noteEnable !== 'true' && btn.verify.wxNote !== 'true' && btn.verify.printEnable !== 'true' && btn.verify.emailEnable !== 'true') return
    if (btn.verify.noteEnable !== 'true' && btn.verify.wxNote !== 'true' && btn.verify.printEnable !== 'true' && btn.verify.emailEnable !== 'true' && btn.verify.DeepSeekable !== 'true') return
    let id = ''
    if (btn.output) {
@@ -3151,6 +3158,9 @@
    }
    if (btn.verify.emailEnable === 'true') {
      this.sendEmail(btn.verify, id)
    }
    if (btn.verify.DeepSeekable === 'true') {
      this.openDeepSeek(id)
    }
    if (btn.verify.wxNote === 'true') {
      if (btn.verify.wxTemplateId === 'mk_category_temp') {
@@ -3632,6 +3642,38 @@
    })
  }
  openDeepSeek = (id) => {
    let param = {
      func: 's_get_deepseek_local',
      upid: id
    }
    param.LText = Utils.getuuid()
    param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss')
    param.secretkey = Utils.encrypt(param.LText, param.timestamp)
    Api.genericInterface(param).then(res => {
      if (!res.status) {
        notification.warning({
          top: 92,
          message: res.message,
          duration: 5
        })
        return
      }
      if (res.deepseek_text) {
        sessionStorage.setItem('deepseek_sql', res.deepseek_text)
        window.open('#/ai')
        setTimeout(() => {
          sessionStorage.removeItem('deepseek_sql')
        }, 0)
      }
    })
  }
  /**
   * @description 操作失败后处理
   * 1、状态码为 E、N、F、NM 时,显示相应提示信息
src/tabviews/zshare/mutilform/index.jsx
@@ -182,12 +182,21 @@
      if (['select', 'link', 'radio', 'checkbox', 'checkcard', 'multiselect', 'cascader'].includes(item.type)) {
        item.options = item.options || []
        item.options = item.options.filter(cell => {
          cell.value = cell.Value
          cell.label = cell.Text
          return !cell.Hide
        })
        item.$select = true
        if (item.type === 'checkcard') {
          item.options = item.options.filter(cell => {
            cell.$value = cell.$value + ''
            return !cell.Hide
          })
        } else {
          item.options = item.options.filter(cell => {
            cell.value = cell.Value + ''
            cell.label = cell.Text
            return !cell.Hide
          })
        }
        if (item.setAll === 'true' && ['select', 'link', 'radio'].includes(item.type)) { // 添加空值
          item.options.unshift({
            key: Utils.getuuid(),
@@ -298,6 +307,8 @@
            newval = ''
          }
        }
      } else if (item.$select && item.resourceType === '0') {
        newval = newval + ''
      }
      if (newval !== '$empty') {
@@ -310,7 +321,7 @@
        if (isNaN(item.initval) || item.initval === '') {
          item.initval = 0
        }
      } else if (['select', 'link', 'radio', 'checkbox', 'checkcard', 'multiselect', 'cascader'].includes(item.type) && item.resourceType === '1') {
      } else if (item.$select && item.resourceType === '1') {
        deForms.push(item)
      } else if (item.type === 'rate') {
        item.rateCount = item.rateCount || 5
src/templates/zshare/modalform/index.jsx
@@ -896,51 +896,51 @@
    return fields
  }
  transfer = (options) => {
    if (options.length === 0) return options
  // transfer = (options) => {
  //   if (options.length === 0) return options
    let isNumber = true
    options.forEach(item => {
      if (!item.Value || isNaN(item.Value)) {
        isNumber = false
      }
    })
  //   let isNumber = true
  //   options.forEach(item => {
  //     if (!item.Value || isNaN(item.Value)) {
  //       isNumber = false
  //     }
  //   })
    if (isNumber) {
      return options.map(item => {
        item.Value = +item.Value
        return item
      })
    } else {
      return options.map(item => {
        item.Value = item.Value + ''
        return item
      })
    }
  }
  //   if (isNumber) {
  //     return options.map(item => {
  //       item.Value = +item.Value
  //       return item
  //     })
  //   } else {
  //     return options.map(item => {
  //       item.Value = item.Value + ''
  //       return item
  //     })
  //   }
  // }
  transferCard = (options) => {
    if (options.length === 0) return options
  // transferCard = (options) => {
  //   if (options.length === 0) return options
    let isNumber = true
    options.forEach(item => {
      if (!/^([0-9]|[1-9]\d{0,2})$/.test(item.$value)) {
        isNumber = false
      }
    })
  //   let isNumber = true
  //   options.forEach(item => {
  //     if (!/^([0-9]|[1-9]\d{0,2})$/.test(item.$value)) {
  //       isNumber = false
  //     }
  //   })
    if (isNumber) {
      return options.map(item => {
        item.$value = +item.$value
        return item
      })
    } else {
      return options.map(item => {
        item.$value = item.$value + ''
        return item
      })
    }
  }
  //   if (isNumber) {
  //     return options.map(item => {
  //       item.$value = +item.$value
  //       return item
  //     })
  //   } else {
  //     return options.map(item => {
  //       item.$value = item.$value + ''
  //       return item
  //     })
  //   }
  // }
  handleConfirm = () => {
    const { card, fields } = this.props
@@ -976,13 +976,17 @@
          if (['multiselect', 'select', 'link', 'radio', 'checkbox'].includes(values.type)) {
            if (values.resourceType === '0') {
              values.options = values.options || []
              values.options = values.options.map(item => {
                item.Value = item.Value + ''
                return item
              })
              values.dataSource = ''
              let type = values.type
              if (values.type === 'radio' && values.linkField) {
                type = 'link'
              }
              values.options = this.transfer(values.options)
              // values.options = this.transfer(values.options)
              if (values.options.filter(op => op.Text === '').length > 0) {
                notification.warning({
@@ -1030,6 +1034,7 @@
              let linkSubFields = values.linkSubField || []
              values.options = values.options.map(m => {
                m.ParentID = m.ParentID || ''
                m.$value = m.$value + ''
                linkSubFields.forEach(n => {
                  m[n] = m[n] || ''
@@ -1037,7 +1042,7 @@
                return m
              })
              values.options = this.transferCard(values.options)
              // values.options = this.transferCard(values.options)
              let type = values.type
              if (values.linkField) {
src/templates/zshare/verifycard/baseform/index.jsx
@@ -467,6 +467,20 @@
          <Col span={24}></Col>
          <Col span={8}>
            <Form.Item label={
              <Tooltip placement="bottomLeft" title="按钮执行完成后打开DeepSeek,请整理好需要提问的语句。">
                <QuestionCircleOutlined className="mk-form-tip" />
                DeekSeek
              </Tooltip>
            }>
              <Radio.Group value={verify.DeepSeekable} onChange={(e) => {this.onOptionChange(e.target.value, 'DeepSeekable')}}>
                <Radio value="true">开启</Radio>
                <Radio value="false">不开启</Radio>
              </Radio.Group>
            </Form.Item>
          </Col>
          <Col span={24}></Col>
          <Col span={8}>
            <Form.Item label={
              <Tooltip placement="bottomLeft" title={'选择发送短信时,需完善短信设置。'}>
                <QuestionCircleOutlined className="mk-form-tip" />
                发送短信
src/templates/zshare/verifycard/index.jsx
@@ -637,11 +637,12 @@
    }
    _verify.default = _verify.default || 'true'
    _verify.wxNote = _verify.wxNote || 'false'           // 公众号消息推送是否开启
    _verify.noteEnable = _verify.noteEnable || 'false'   // 短信发送是否开启
    _verify.emailEnable = _verify.emailEnable || 'false' // 邮件发送是否开启
    _verify.printEnable = _verify.printEnable || 'false' // 单据打印是否开启
    _verify.preHandle = _verify.preHandle || 'false'     // 按钮预处理是否开启
    _verify.wxNote = _verify.wxNote || 'false'            // 公众号消息推送是否开启
    _verify.noteEnable = _verify.noteEnable || 'false'    // 短信发送是否开启
    _verify.DeepSeekable = _verify.DeepSeekable || 'false'// DeepSeek是否开启
    _verify.emailEnable = _verify.emailEnable || 'false'  // 邮件发送是否开启
    _verify.printEnable = _verify.printEnable || 'false'  // 单据打印是否开启
    _verify.preHandle = _verify.preHandle || 'false'      // 按钮预处理是否开启
    _verify.invalid = _invalid
    _verify.uniques = _verify.uniques || []
    _verify.contrasts = _verify.contrasts || []
src/utils/utils-custom.js
@@ -1936,8 +1936,12 @@
    if (['pop', 'prompt', 'exec'].includes(cell.OpenType) && cell.verify && !cell.output) {
      if (cell.verify.noteEnable === 'true') {
        errors.push({ level: 0, detail: `按钮“${cell.label}”未设置返回值短信发送无效!`})
      } else if (cell.verify.wxNote === 'true') {
        errors.push({ level: 0, detail: `按钮“${cell.label}”未设置返回值公众号消息无效!`})
      } else if (cell.verify.emailEnable === 'true') {
        errors.push({ level: 0, detail: `按钮“${cell.label}”未设置返回值邮件发送无效!`})
      } else if (cell.verify.DeepSeekable === 'true') {
        errors.push({ level: 0, detail: `按钮“${cell.label}”未设置返回值DeekSeek无效!`})
      }
    }
@@ -2131,8 +2135,12 @@
      if (item.subButton.verify && !item.subButton.output) {
        if (item.subButton.verify.noteEnable === 'true') {
          errors.push({ level: 0, detail: `${item.subButton.label} 按钮未设置返回值短信发送无效!`})
        } else if (item.subButton.verify.wxNote === 'true') {
          errors.push({ level: 0, detail: `${item.subButton.label} 按钮未设置返回值公众号消息无效!`})
        } else if (item.subButton.verify.emailEnable === 'true') {
          errors.push({ level: 0, detail: `${item.subButton.label} 按钮未设置返回值邮件发送无效!`})
        } else if (item.subButton.verify.DeepSeekable === 'true') {
          errors.push({ level: 0, detail: `${item.subButton.label} 按钮未设置返回值DeekSeek无效!`})
        }
      }
@@ -2334,9 +2342,16 @@
    })
    return false
  } else if (/\sdecimal\(8,/ig.test(sql)) {
    let lines = ''
    sql.split(/\n/).forEach((s, i) => {
      if (/(^|\s)decimal\(8,/ig.test(s)) {
        lines = '第' + (i + 1) + '行中'
      }
    })
    notification.warning({
      top: 92,
      message: `不可使用 decimal(8`,
      message: `${lines}不可使用 decimal(8`,
      duration: 5
    })
    return false
src/views/billprint/index.jsx
@@ -66,11 +66,22 @@
        let param = JSON.parse(window.decodeURIComponent(window.atob(params.param)))
  
        sessionStorage.setItem('dataM', param.dataM || '')
        let urlParam = {...param}
        delete urlParam.tempId
        delete urlParam.pageId
        delete urlParam.dataM
        Object.keys(urlParam).forEach(key => {
          if (key === key.toLowerCase()) return
          urlParam[key.toLowerCase()] = urlParam[key]
          delete urlParam[key]
        })
        this.setState({
          BID: param.id || '',
          tempId: param.tempId,
          urlParam: param,
          urlParam: urlParam,
          pageId: param.pageId || ''
        }, () => {
          setTimeout(() => {
@@ -321,8 +332,16 @@
        config.components = config.components.filter(item => !['tabs', 'search'].includes(item.type))
        let urlparam = urlParam ? {...urlParam} : {}
        if (config.urlFields && config.urlFields.length) {
          config.urlFields.forEach(field => {
            let key = field.toLowerCase()
            if (urlparam[key] !== undefined) return
            urlparam[key] = ''
          })
        }
        if (window.backend && config.allSqls) {
          let urlparam = urlParam || {}
          let keys = Object.keys(urlparam)
          config.allSqls.forEach(item => {
            item.id = md5(window.GLOB.appkey + item.v_id)
@@ -354,7 +373,7 @@
        if (config.urlFields) {
          config.urlFields.forEach(field => {
            let val = `'${urlParam ? (urlParam[field] || '') : ''}'`
            let val = `'${urlparam[field.toLowerCase()]}'`
            regs.push({
              reg: new RegExp('@' + field + '@', 'ig'),
              value: val
src/views/mkai/index.jsx
@@ -129,7 +129,7 @@
  if (status) {
    return (
      <div className="item-title edit">
        <Input value={val} onChange={chanVal} onBlur={submit} onPressEnter={submit}/>
        <Input value={val} autoFocus onChange={chanVal} onBlur={submit} onPressEnter={submit}/>
      </div>
    )
  }
@@ -233,7 +233,7 @@
    UserID: '',
    LoginUID: '',
    textInput: '',
    type: 'deepseek-chat', // deepseek-chat deepseek-reasoner
    type: 'deepseek-reasoner', // deepseek-chat deepseek-reasoner
    currentChat: {id: '', list: [], title: ''},
    chats: []
  }
@@ -429,7 +429,7 @@
      if (!item.loading) {
        list.push({
          role: item.role,
          content: item.content
          content: item.oriText || item.content
        })
      }
    })
@@ -449,12 +449,15 @@
      delete _chat.loading
      _chat.list.pop()
      let _val = ''
      let _html = '服务器繁忙,请稍后再试。'
      let _val = '服务器繁忙,请稍后再试。'
      let _html = _val
      let tokens_count = 0
      if (res.success && res.choices && res.choices[0]) {
        _val = res.choices[0].message.content
        _html = this.getAssistVal(_val)
      } else if (!res.success && res.rawStatusCode === 400 && res.message && /This\s*model's\s*maximum\s*context\s*length/.test(res.message)) {
        _html = `当前对话已超出${type === 'deepseek-reasoner' ? '深度思考的' : ''}最大长度限制,开启一个新对话继续思考吧~`
        _val = _html
      }
      if (res.usage && res.usage.total_tokens) {
src/views/mkai/index.scss
@@ -481,10 +481,13 @@
          }
        }
        .input-wrap {
          width: 800px;
          width: 802px;
          position: sticky;
          bottom: 30px;
          z-index: 2;
          border-top-left-radius: 24px;
          border-top-right-radius: 24px;
          background-color: #ffffff;
          .c9dd4ww {
            cursor: text;
            box-sizing: border-box;