king
8 天以前 a837624af068cb3a3455f66d9932fc1509e37b25
2025-06-10
43个文件已修改
433 ■■■■■ 已修改文件
public/manifest.json 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/index.js 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/imgScale/index.scss 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/card/prop-card/index.jsx 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/chart/antv-X6/index.jsx 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/datasource/verifycard/settingform/index.jsx 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/card/data-card/index.jsx 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/card/double-data-card/index.jsx 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/card/prop-card/index.jsx 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/chart/antv-X6/index.jsx 184 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/chart/antv-X6/index.scss 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/form/simple-form/index.jsx 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/table/base-table/index.jsx 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/table/edit-table/index.jsx 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/table/edit-table/normalTable/index.jsx 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/table/normal-table/index.jsx 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/index.jsx 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/popview/index.jsx 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/rolemanage/index.jsx 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/actionList/excelInbutton/index.jsx 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/actionList/exceloutbutton/index.jsx 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/actionList/funcMegvii/index.jsx 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/actionList/funczip/index.jsx 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/actionList/normalbutton/index.jsx 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/actionList/popupbutton/index.jsx 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/actionList/printbutton/index.jsx 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/actionList/tabbutton/index.jsx 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/mutilform/index.jsx 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/mutilform/mkCheck/index.jsx 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/mutilform/mkDatePicker/index.jsx 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/mutilform/mkInput/index.jsx 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/mutilform/mkNumberInput/index.jsx 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/mutilform/mkPopSelect/index.jsx 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/mutilform/mkSelect/index.jsx 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/mutilform/mkSwitch/index.jsx 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/mutilform/mkVercode/index.jsx 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/settingcomponent/editTable/index.jsx 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/topSearch/index.jsx 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/utils-custom.js 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/utils.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/login/index.jsx 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/login/index.scss 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/systemfunc/sidemenu/config.jsx 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
public/manifest.json
@@ -6,5 +6,5 @@
  "display": "standalone",
  "theme_color": "#000000",
  "background_color": "#ffffff",
  "mk_version": "20250502"
  "mk_version": "20250605"
}
src/api/index.js
@@ -156,25 +156,17 @@
  }
  /**
   * @description 使用dostar接口,跳过验证
   * @param {Object} param 查询及提交参数
   * @description 老系统登录
   */
  loginAndRedirect (param) {
    let url = ''
    if (process.env.NODE_ENV === 'production') {
      url = document.location.origin + '/zh-CN/Home/LoginAndRedirect'
    } else {
      url = window.GLOB.location + '/zh-CN/Home/LoginAndRedirect'
    }
    return axios({
      url: url,
      url: document.location.origin + '/zh-CN/Home/LoginAndRedirect',
      method: 'post',
      data: qs.stringify(param)
    })
  }
  /* @description 直接请求
  /**
   * @description 微信业务请求 原接口 'wxpay/getaccesstoken'
   */
  // wxAccessToken (appId, domain = '') {
@@ -1145,8 +1137,9 @@
              res.ErrCode = '-2'
              MKEmitter.emit('reloadTabs')
            } else if (res.message === 'permission deny') {
              res.message = window.GLOB.dict['permission_deny'] || '无当前菜单或按钮的访问权限,请联系管理员!'
              res.ErrMesg = window.GLOB.dict['permission_deny'] || '无当前菜单或按钮的访问权限,请联系管理员!'
              let isBtn = url.indexOf('s_TableData_InUpDe') > -1
              res.message = window.GLOB.dict['permission_deny'] || `无当前${isBtn ? '按钮' : '菜单'}的访问权限,请联系管理员!`
              res.ErrMesg = res.message
            }
          }
          resolve(res)
src/components/imgScale/index.scss
@@ -48,8 +48,8 @@
  overflow: hidden;
}
.mk-image-preview-img {
  max-width: 100%;
  max-height: 100%;
  max-width: 95%;
  max-height: 95%;
  vertical-align: middle;
  -webkit-transform: scale3d(1, 1, 1);
          transform: scale3d(1, 1, 1);
src/menu/components/card/prop-card/index.jsx
@@ -403,7 +403,7 @@
            <CopyComponent type="propcard" card={card}/>
            <PasteComponent options={['cardcell']} updateConfig={this.pasteComponent} />
            <FontColorsOutlined className="style" title="调整样式" onClick={this.changeStyle}/>
            {card.wrap.datatype === 'dynamic' ? <ClockComponent config={card} updateConfig={this.updateComponent}/> : <ClockCircleOutlined style={{color: '#eeeeee', cursor: 'not-allowed'}}/>}
            {card.wrap.datatype !== 'public' ? <ClockComponent config={card} updateConfig={this.updateComponent}/> : <ClockCircleOutlined style={{color: '#eeeeee', cursor: 'not-allowed'}}/>}
            <DeleteOutlined className="close" title="删除组件" onClick={() => this.props.deletecomponent(card.uuid)} />
            {card.wrap.datatype === 'dynamic' ? <SettingComponent config={card} updateConfig={this.updateComponent} /> : <SettingOutlined style={{color: '#eeeeee', cursor: 'not-allowed'}}/>}
          </div>
src/menu/components/chart/antv-X6/index.jsx
@@ -68,8 +68,8 @@
  'mk-rect',
  {
    inherit: 'rect',
    width: 66,
    height: 36,
    width: 100,
    height: 32,
    attrs: {
      body: {
        strokeWidth: 1,
@@ -89,8 +89,8 @@
  'mk-polygon',
  {
    inherit: 'polygon',
    width: 66,
    height: 36,
    width: 100,
    height: 32,
    attrs: {
      body: {
        strokeWidth: 1,
@@ -110,8 +110,8 @@
  'mk-circle',
  {
    inherit: 'circle',
    width: 36,
    height: 36,
    width: 40,
    height: 40,
    attrs: {
      body: {
        strokeWidth: 1,
@@ -131,8 +131,8 @@
  'mk-ellipse',
  {
    inherit: 'ellipse',
    width: 66,
    height: 36,
    width: 100,
    height: 32,
    attrs: {
      body: {
        strokeWidth: 1,
@@ -152,8 +152,8 @@
  'mk-star',
  {
    inherit: 'polygon',
    width: 36,
    height: 36,
    width: 40,
    height: 40,
    points: '100,10 40,198 190,78 10,78 160,198',
    attrs: {
      body: {
@@ -175,8 +175,8 @@
  'mk-text',
  {
    inherit: 'rect',
    width: 66,
    height: 36,
    width: 100,
    height: 50,
    attrs: {
      body: {
        strokeWidth: 0,
src/menu/datasource/verifycard/settingform/index.jsx
@@ -219,6 +219,7 @@
        sm: { span: 16 }
      }
    }
    let hasUp = !['balcony', 'menubar', 'commonbar', 'tabbar', 'invTable'].includes(config.subtype) && (!config.wrap || config.wrap.supType !== 'multi') && MenuType !== 'billPrint'
    return (
      <div className="model-datasource-setting-form-box">
@@ -474,7 +475,7 @@
                </Radio.Group>)}
              </Form.Item>
            </Col> : null}
            {!['balcony', 'menubar', 'commonbar', 'tabbar', 'invTable'].includes(config.subtype) && (!config.wrap || config.wrap.supType !== 'multi') && MenuType !== 'billPrint' ? <Col span={8}>
            {hasUp ? <Col span={8}>
              <Form.Item label={
                <Tooltip placement="topLeft" title={'该组件如果受其他组件控制,请选项相应的组件,没有时选“无”。'}>
                  <QuestionCircleOutlined className="mk-form-tip" />
@@ -737,6 +738,20 @@
                })(<InputNumber min={0} max={60000} precision={0} />)}
              </Form.Item>
            </Col> : null}
            {hasUp && setting.supModule && setting.supModule[0] && setting.supModule[0] !== 'empty' ? <Col span={8}>
              <Form.Item label={
                <Tooltip placement="topLeft" title="未获取到上级主键值的提示文本。">
                  <QuestionCircleOutlined className="mk-form-tip" />
                  上级空值提示
                </Tooltip>
              }>
                {getFieldDecorator('supModTip', {
                  initialValue: setting.supModTip || ''
                })(
                  <Input placeholder={''} autoComplete="off" />
                )}
              </Form.Item>
            </Col> : null}
          </Row>
        </Form>
        <Modal
src/tabviews/custom/components/card/data-card/index.jsx
@@ -1091,7 +1091,7 @@
    if (config.setting.supModule && !BID && config.wrap.supKey !== 'false') {
      notification.warning({
        top: 92,
        message: window.GLOB.dict['sup_key_req'] || '需要上级主键值!',
        message: config.setting.supModTip || window.GLOB.dict['sup_key_req'] || '需要上级主键值!',
        duration: 5
      })
      this.setState({
src/tabviews/custom/components/card/double-data-card/index.jsx
@@ -1002,7 +1002,7 @@
    if (config.setting.supModule && !BID && config.wrap.supKey !== 'false') {
      notification.warning({
        top: 92,
        message: window.GLOB.dict['sup_key_req'] || '需要上级主键值!',
        message: config.setting.supModTip || window.GLOB.dict['sup_key_req'] || '需要上级主键值!',
        duration: 5
      })
      this.setState({
src/tabviews/custom/components/card/prop-card/index.jsx
@@ -161,7 +161,7 @@
      MKEmitter.addListener('searchRefresh', this.searchRefresh)
    }
    if (config.timer && config.wrap.datatype === 'dynamic') {
    if (config.timer && config.wrap.datatype !== 'public') {
      this.timer = new TimerTask()
      this.timer.init(config.uuid, config.timer, config.timerRepeats, () => {this.loadData('timer')})
    }
src/tabviews/custom/components/chart/antv-X6/index.jsx
@@ -138,8 +138,8 @@
  'mk-rect',
  {
    inherit: 'rect',
    width: 66,
    height: 40,
    width: 100,
    height: 32,
    attrs: {
      body: {
        strokeWidth: 1,
@@ -168,8 +168,8 @@
  'mk-polygon',
  {
    inherit: 'polygon',
    width: 66,
    height: 40,
    width: 100,
    height: 32,
    attrs: {
      body: {
        strokeWidth: 1,
@@ -198,8 +198,8 @@
  'mk-paral',
  {
    inherit: 'polygon',
    width: 66,
    height: 40,
    width: 100,
    height: 32,
    attrs: {
      body: {
        strokeWidth: 1,
@@ -256,8 +256,8 @@
  'mk-ellipse',
  {
    inherit: 'ellipse',
    width: 66,
    height: 40,
    width: 100,
    height: 32,
    attrs: {
      body: {
        strokeWidth: 1,
@@ -318,8 +318,8 @@
  'mk-text',
  {
    inherit: 'text-block',
    width: 66,
    height: 40,
    width: 100,
    height: 50,
    text: '文本域',
    attrs: {
      body: {
@@ -900,18 +900,18 @@
    const stencil = new Stencil({
      title: '流程图',
      target: graph,
      stencilGraphWidth: 180,
      stencilGraphWidth: 230,
      stencilGraphHeight: 180,
      groups: [
        {
          title: '通用节点',
          name: 'group1',
          graphHeight: 240
          graphHeight: 150
        },
        {
          title: '自定义',
          name: 'group2',
          graphHeight: 150,
          graphHeight: 300,
          layoutOptions: {
            rowHeight: 70
          }
@@ -919,7 +919,7 @@
      ],
      layoutOptions: {
        columns: 2,
        columnWidth: 80,
        columnWidth: 110,
        rowHeight: 55
      }
    })
@@ -1055,10 +1055,10 @@
      mkdata: {status: 0, statusName: '未提交'},
      attrs: {
        body: {
          rx: 20,
          ry: 26,
          fill: '#52c41a',
          stroke: '#52c41a'
          rx: 0,
          ry: 0,
          fill: '#000000',
          stroke: '#000000'
        },
        text: {
          fill: '#ffffff',
@@ -1066,83 +1066,34 @@
        }
      }
    })
    const r2 = graph.createNode({
      shape: 'mk-rect',
      attrs: {
        body: {
          rx: 20,
          ry: 26,
          fill: '#e6f4ff',
          stroke: '#1890ff'
        },
        text: {
          text: '过程'
        }
      }
    })
    const r3 = graph.createNode({
      shape: 'mk-rect',
      attrs: {
        body: {
          rx: 6,
          ry: 6,
          fill: '#fff7e6',
          stroke: '#fa8c16'
        },
        text: {
          text: '可选过程'
        }
      }
    })
    const r4 = graph.createNode({
      shape: 'mk-rect',
      attrs: {
        body: {
          rx: 0,
          ry: 0,
          fill: '#fff7e6',
          stroke: '#fa8c16'
          fill: '#ffffff',
          stroke: '#757575'
        },
        text: {
          fill: '#000000',
          text: '节点'
        }
      }
    })
    const r5 = graph.createNode({
      shape: 'mk-polygon',
      attrs: {
        body: {
          refPoints: '0,10 10,0 20,10 10,20',
          fill: '#f9f0ff',
          stroke: '#722ed1'
          fill: '#ffffff',
          stroke: '#757575'
        },
        text: {
          fill: '#000000',
          text: '决策'
        }
      }
    })
    const r6 = graph.createNode({
      shape: 'mk-paral',
      attrs: {
        body: {
          refPoints: '10,0 40,0 30,20 0,20',
          fill: '#e6fffb',
          stroke: '#13c2c2'
        },
        text: {
          text: '数据'
        }
      }
    })
    const r7 = graph.createNode({
      shape: 'mk-circle',
      attrs: {
        body: {
          fill: '#e6f4ff',
          stroke: '#1890ff'
        },
        text: {
          text: '连接'
        }
      }
    })
@@ -1153,10 +1104,10 @@
      mkdata: {status: 888, statusName: '已完成'},
      attrs: {
        body: {
          rx: 20,
          ry: 26,
          fill: '#fa8c16',
          stroke: '#fa8c16'
          rx: 0,
          ry: 0,
          fill: '#000000',
          stroke: '#000000'
        },
        text: {
          fill: '#ffffff',
@@ -1165,7 +1116,65 @@
      }
    })
    
    stencil.load([r1, r2, r3, r4, r5, r6, r7, r8], 'group1')
    stencil.load([r1, r4, r5, r8], 'group1')
    const r2 = graph.createNode({
      shape: 'mk-rect',
      attrs: {
        body: {
          rx: 20,
          ry: 26,
          fill: '#ffffff',
          stroke: '#757575'
        },
        text: {
          fill: '#000000',
          text: '过程'
        }
      }
    })
    const r3 = graph.createNode({
      shape: 'mk-rect',
      attrs: {
        body: {
          rx: 6,
          ry: 6,
          fill: '#ffffff',
          stroke: '#757575'
        },
        text: {
          fill: '#000000',
          text: '可选过程'
        }
      }
    })
    const r6 = graph.createNode({
      shape: 'mk-paral',
      attrs: {
        body: {
          refPoints: '10,0 40,0 30,20 0,20',
          fill: '#ffffff',
          stroke: '#757575'
        },
        text: {
          fill: '#000000',
          text: '数据'
        }
      }
    })
    const r7 = graph.createNode({
      shape: 'mk-circle',
      attrs: {
        body: {
          fill: '#ffffff',
          stroke: '#757575'
        },
        text: {
          fill: '#000000',
          text: '连接'
        }
      }
    })
    
    const p1 = graph.createNode({
      shape: 'mk-ellipse',
@@ -1180,7 +1189,7 @@
      shape: 'mk-text'
    })
    
    stencil.load([p1, p2, p3], 'group2')
    stencil.load([r2, r3, r6, r7, p1, p2, p3], 'group2')
    if (this.cells.length > 0) {
      let cells = []
@@ -1299,7 +1308,7 @@
    const stencil = new Stencil({
      title: '流程图',
      target: graph,
      stencilGraphWidth: 180,
      stencilGraphWidth: 230,
      stencilGraphHeight: 180,
      groups: [
        {
@@ -1325,7 +1334,7 @@
      ],
      layoutOptions: {
        columns: 2,
        columnWidth: 80,
        columnWidth: 110,
        rowHeight: 55
      }
    })
@@ -1554,12 +1563,16 @@
  setback = () => {
    if (this.mkGraph.canUndo()) {
      this.mkGraph.undo()
    } else {
      message.warning('无可撤销记录!')
    }
  }
  setprev = () => {
    if (this.mkGraph.canRedo()) {
      this.mkGraph.redo()
    } else {
      message.warning('无可前进记录!')
    }
  }
@@ -1737,7 +1750,10 @@
    let cells = this.mkGraph.getCells()
    const that = this
    if (cells.length === 0) return
    if (cells.length === 0) {
      message.warning('尚未添加元素!')
      return
    }
    confirm({
      title: '确定清空元素吗?',
src/tabviews/custom/components/chart/antv-X6/index.scss
@@ -86,14 +86,17 @@
    display: flex;
    .mk-stencil {
      width: 180px;
      min-width: 180px;
      width: 240px;
      min-width: 240px;
      height: 100%;
      position: relative;
      z-index: 2;
      border-right: 1px solid #dfe3e8;
      transition: all 0.2s;
      .x6-port {
        display: none;
      }
      .x6-widget-stencil-title {
        display: none;
      }
src/tabviews/custom/components/form/simple-form/index.jsx
@@ -403,12 +403,12 @@
    }
  }
  mkFormSubmit = (btnId, callback, formId) => {
  mkFormSubmit = (btnId, callback, formId, errId) => {
    const { group } = this.state
    if (group.uuid !== btnId) return
    this.formRef.handleConfirm(formId).then(res => {
    this.formRef.handleConfirm(formId, errId).then(res => {
      MKEmitter.emit('triggerFormSubmit', {menuId: btnId, form: res})
    }, () => {
      callback && callback()
@@ -460,7 +460,7 @@
          data={data}
          action={group}
          unload={config.setting.supModule && !BID}
          inputSubmit={(id) => this.mkFormSubmit(group.uuid, null, id)}
          inputSubmit={(id, errId) => this.mkFormSubmit(group.uuid, null, id, errId)}
          wrappedComponentRef={(inst) => this.formRef = inst}
        /> : null}
        {data ? <div className={'mk-form-action ' + (group.$button || '')}>
src/tabviews/custom/components/table/base-table/index.jsx
@@ -436,7 +436,7 @@
    if (config.setting.supModule && !BID) {
      notification.warning({
        top: 92,
        message: window.GLOB.dict['sup_key_req'] || '需要上级主键值!',
        message: config.setting.supModTip || window.GLOB.dict['sup_key_req'] || '需要上级主键值!',
        duration: 5
      })
      this.setState({
src/tabviews/custom/components/table/edit-table/index.jsx
@@ -637,7 +637,7 @@
    if (setting.supModule && !BID) {
      notification.warning({
        top: 92,
        message: window.GLOB.dict['sup_key_req'] || '需要上级主键值!',
        message: setting.supModTip || window.GLOB.dict['sup_key_req'] || '需要上级主键值!',
        duration: 5
      })
      this.setState({
src/tabviews/custom/components/table/edit-table/normalTable/index.jsx
@@ -2508,7 +2508,7 @@
    if (setting.supModule && !BID) {
      notification.warning({
        top: 92,
        message: dict['sup_key_req'] || '需要上级主键值!',
        message: setting.supModTip || dict['sup_key_req'] || '需要上级主键值!',
        duration: 5
      })
src/tabviews/custom/components/table/normal-table/index.jsx
@@ -901,7 +901,7 @@
    if (setting.supModule && !BID && setting.supKey !== 'false') {
      notification.warning({
        top: 92,
        message: window.GLOB.dict['sup_key_req'] || '需要上级主键值!',
        message: setting.supModTip || window.GLOB.dict['sup_key_req'] || '需要上级主键值!',
        duration: 5
      })
      this.setState({
src/tabviews/custom/index.jsx
@@ -1258,7 +1258,7 @@
      } else if (component.wrap && component.wrap.datatype === 'static') {
        component.format = ''
        component.setting = component.setting || {}
        component.setting.useMSearch = false
        component.setting.useMSearch = component.wrap.useMSearch === 'true'
        component.setting.sync = 'false'
        return component
src/tabviews/custom/popview/index.jsx
@@ -905,7 +905,7 @@
      } else if (component.wrap && component.wrap.datatype === 'static') {
        component.format = ''
        component.setting = component.setting || {}
        component.setting.useMSearch = false
        component.setting.useMSearch = component.wrap.useMSearch === 'true'
        component.setting.sync = 'false'
        return component
src/tabviews/rolemanage/index.jsx
@@ -142,11 +142,11 @@
   * @description 获取所有菜单节点,形成权限树
   */
  getAllMenuList = async () => {
    const { selectRoleId, mainMenus } = this.state
    const { mainMenus } = this.state
    let param = {
      func: 's_rolemenu_get_FunMenu',
      RoleID: selectRoleId,
      RoleID: '',
      SelectedType: '',
      version: 1
    }
@@ -186,6 +186,10 @@
        loadingTree: false,
        menuTrees: _tree,
        menuOpenKeys: _openKeys
      }, () => {
        if (this.state.selectRoleId) {
          this.getSelectMenuList()
        }
      })
    } else {
      this.setState({
src/tabviews/zshare/actionList/excelInbutton/index.jsx
@@ -121,7 +121,7 @@
    if (setting.supModule && !BID) {
      notification.warning({
        top: 92,
        message: dict['sup_key_req'] || '需要上级主键值!',
        message: setting.supModTip || dict['sup_key_req'] || '需要上级主键值!',
        duration: 5
      })
    } else if (btn.Ot === 'requiredSgl' && data.length !== 1) {
src/tabviews/zshare/actionList/exceloutbutton/index.jsx
@@ -102,7 +102,7 @@
    if (setting.supModule && !BID) {
      notification.warning({
        top: 92,
        message: dict['sup_key_req'] || '需要上级主键值!',
        message: setting.supModTip || dict['sup_key_req'] || '需要上级主键值!',
        duration: 5
      })
    } else {
src/tabviews/zshare/actionList/funcMegvii/index.jsx
@@ -122,7 +122,7 @@
    if (setting.supModule && !BID) {
      notification.warning({
        top: 92,
        message: '需要上级主键值!',
        message: setting.supModTip || '需要上级主键值!',
        duration: 5
      })
    } else if (data.length === 0) {
src/tabviews/zshare/actionList/funczip/index.jsx
@@ -113,7 +113,7 @@
    if (setting.supModule && !BID) {
      notification.warning({
        top: 92,
        message: dict['sup_key_req'] || '需要上级主键值!',
        message: setting.supModTip || dict['sup_key_req'] || '需要上级主键值!',
        duration: 5
      })
      return
src/tabviews/zshare/actionList/normalbutton/index.jsx
@@ -413,7 +413,7 @@
    if (setting.supModule && !BID) {
      notification.warning({
        top: 92,
        message: dict['sup_key_req'] || '需要上级主键值!',
        message: setting.supModTip || dict['sup_key_req'] || '需要上级主键值!',
        duration: 5
      })
      return false
@@ -1533,7 +1533,7 @@
    if (setting.supModule && !BID) {
      notification.warning({
        top: 92,
        message: window.GLOB.dict['sup_key_req'] || '需要上级主键值!',
        message: setting.supModTip || window.GLOB.dict['sup_key_req'] || '需要上级主键值!',
        duration: 5
      })
      _resolve()
@@ -2682,11 +2682,16 @@
      delete result.message
      delete result.status
      param = {
        ...outParam,
        ...result,
        func: btn.callbackFunc
      }
      param = {}
      Object.keys(outParam).forEach(key => {
        param[key.toLowerCase()] = outParam[key]
      })
      Object.keys(result).forEach(key => {
        param[key.toLowerCase()] = result[key]
      })
      param.func = btn.callbackFunc
      if (window.GLOB.mkHS) {
        if (btn.callbackFunc === 's_sVersion_Local_add' && window.GLOB.forcedUpdate) { // special 传输号添加回调处理
@@ -3011,6 +3016,7 @@
    if (focusField) {
      MKEmitter.emit('resetFocus', btn.uuid, focusField)
    }
    window.GLOB.errFocusId = ''
    this.setState({
      loadingNumber: '',
@@ -3837,7 +3843,11 @@
      loadingTotal: '',
    })
    if (btnconfig && btnconfig.setting && btnconfig.setting.errFocus) {
    if (window.GLOB.errFocusId && (btnconfig || btn.OpenType === 'formSubmit')) {
      MKEmitter.emit('mkFC', 'focus', window.GLOB.errFocusId)
      window.GLOB.errFocusId = ''
    } else if (btnconfig && btnconfig.setting && btnconfig.setting.errFocus) {
      MKEmitter.emit('mkFC', 'focus', btnconfig.setting.errFocus)
    }
src/tabviews/zshare/actionList/popupbutton/index.jsx
@@ -155,7 +155,7 @@
    if (setting.supModule && !BID) {
      notification.warning({
        top: 92,
        message: dict['sup_key_req'] || '需要上级主键值!',
        message: setting.supModTip || dict['sup_key_req'] || '需要上级主键值!',
        duration: 5
      })
      return
src/tabviews/zshare/actionList/printbutton/index.jsx
@@ -143,7 +143,7 @@
    if (setting.supModule && !BID) {
      notification.warning({
        top: 92,
        message: dict['sup_key_req'] || '需要上级主键值!',
        message: setting.supModTip || dict['sup_key_req'] || '需要上级主键值!',
        duration: 5
      })
      return
src/tabviews/zshare/actionList/tabbutton/index.jsx
@@ -188,7 +188,7 @@
      if (!menu) {
        notification.warning({
          top: 92,
          message: dict['no_perm'] || '菜单已删除或没有访问权限!',
          message: dict['no_perm'] || `没有${btn.MenuName ? `菜单《${btn.MenuName}》的` : '此菜单的'}访问权限!`,
          duration: 5
        })
        return
@@ -285,7 +285,7 @@
    if (!menu) {
      notification.warning({
        top: 92,
        message: dict['no_perm'] || '菜单已删除或没有访问权限!',
        message: dict['no_perm'] || '没有此菜单的访问权限!',
        duration: 5
      })
      return
src/tabviews/zshare/mutilform/index.jsx
@@ -707,6 +707,13 @@
      
      if (item.enter === 'tab' || item.enter === 'sub') {
        item.tabUuid = ''
        if (item.enter === 'sub' && item.errTabField) {
          if (item.errTabField === 'origin') {
            item.errTabUuid = item.uuid
          } else if (fieldMap.has(item.errTabField)) {
            item.errTabUuid = fieldMap.get(item.errTabField).uuid
          }
        }
        if (item.tabField && fieldMap.has(item.tabField)) {
          item.tabUuid = fieldMap.get(item.tabField).uuid
        } else if (item.enter === 'tab') {
@@ -1561,10 +1568,11 @@
    return fields
  }
  handleConfirm = (formId) => {
  handleConfirm = (formId, errId) => {
    const { action } = this.props
    const { formlist, send_type, timestamp, n_id } = this.state
    window.GLOB.errFocusId = ''
    // 表单提交时检查输入值是否正确
    return new Promise((resolve, reject) => {
      this.props.form.validateFieldsAndScroll((err, values) => {
@@ -1691,6 +1699,7 @@
        })
        this.submitId = formId || ''
        window.GLOB.errFocusId = errId || ''
        if (locals) {
          sessionStorage.setItem('local_' + action.uuid, JSON.stringify(locals))
src/tabviews/zshare/mutilform/mkCheck/index.jsx
@@ -30,10 +30,10 @@
        config.tabUuid && MKEmitter.emit('mkFC', 'focus', config.tabUuid)
        if (config.linkFields || config.subFields || config.controlFields) {
          setTimeout(() => {
            this.props.onSubmit(config.tabUuid)
            this.props.onSubmit(config.tabUuid, config.errTabUuid)
          }, 1000)
        } else {
          this.props.onSubmit(config.tabUuid)
          this.props.onSubmit(config.tabUuid, config.errTabUuid)
        }
      }
    })
src/tabviews/zshare/mutilform/mkDatePicker/index.jsx
@@ -78,7 +78,7 @@
        MKEmitter.emit('mkFC', 'focus', config.tabUuid)
      } else if (config.enter === 'sub') {
        config.tabUuid && MKEmitter.emit('mkFC', 'focus', config.tabUuid)
        this.props.onSubmit(config.tabUuid)
        this.props.onSubmit(config.tabUuid, config.errTabUuid)
      }
    }, 50)
  }
src/tabviews/zshare/mutilform/mkInput/index.jsx
@@ -125,7 +125,7 @@
      MKEmitter.emit('mkFC', 'focus', config.tabUuid)
    } else {
      MKEmitter.emit('mkFC', 'focus', config.tabUuid)
      this.props.onSubmit(config.tabUuid)
      this.props.onSubmit(config.tabUuid, config.errTabUuid)
    }
  }
src/tabviews/zshare/mutilform/mkNumberInput/index.jsx
@@ -71,7 +71,7 @@
      MKEmitter.emit('mkFC', 'focus', config.tabUuid)
    } else {
      MKEmitter.emit('mkFC', 'focus', config.tabUuid)
      this.props.onSubmit(config.tabUuid)
      this.props.onSubmit(config.tabUuid, config.errTabUuid)
    }
  }
src/tabviews/zshare/mutilform/mkPopSelect/index.jsx
@@ -360,10 +360,10 @@
        config.tabUuid && MKEmitter.emit('mkFC', 'focus', config.tabUuid)
        if (config.subFields) {
          setTimeout(() => {
            this.props.onSubmit(config.tabUuid)
            this.props.onSubmit(config.tabUuid, config.errTabUuid)
          }, 1000)
        } else {
          this.props.onSubmit(config.tabUuid)
          this.props.onSubmit(config.tabUuid, config.errTabUuid)
        }
      }
    })
src/tabviews/zshare/mutilform/mkSelect/index.jsx
@@ -162,10 +162,10 @@
        config.tabUuid && MKEmitter.emit('mkFC', 'focus', config.tabUuid)
        if (config.linkFields || config.subFields || config.controlFields) {
          setTimeout(() => {
            this.props.onSubmit(config.tabUuid)
            this.props.onSubmit(config.tabUuid, config.errTabUuid)
          }, 1000)
        } else {
          this.props.onSubmit(config.tabUuid)
          this.props.onSubmit(config.tabUuid, config.errTabUuid)
        }
      }
    })
src/tabviews/zshare/mutilform/mkSwitch/index.jsx
@@ -41,10 +41,10 @@
        config.tabUuid && MKEmitter.emit('mkFC', 'focus', config.tabUuid)
        if (config.linkFields || config.subFields || config.controlFields) {
          setTimeout(() => {
            this.props.onSubmit(config.tabUuid)
            this.props.onSubmit(config.tabUuid, config.errTabUuid)
          }, 1000)
        } else {
          this.props.onSubmit(config.tabUuid)
          this.props.onSubmit(config.tabUuid, config.errTabUuid)
        }
      }
    })
src/tabviews/zshare/mutilform/mkVercode/index.jsx
@@ -56,7 +56,7 @@
      MKEmitter.emit('mkFC', 'focus', config.tabUuid)
    } else {
      config.tabUuid && MKEmitter.emit('mkFC', 'focus', config.tabUuid)
      this.props.onSubmit(config.tabUuid)
      this.props.onSubmit(config.tabUuid, config.errTabUuid)
    }
  }
src/tabviews/zshare/settingcomponent/editTable/index.jsx
@@ -77,7 +77,7 @@
      editable: true,
      options: [],
      width: '25%',
      render: (text, record) => {
      render: (text) => {
        if (!text) return ''
        return text[0] + '+' + shortkeycode[text[1]]
      }
@@ -92,7 +92,7 @@
      title: window.GLOB.dict['operation'] || '操作',
      dataIndex: 'operation',
      width: '140px',
      render: (text, record) => {
      render: (_, record) => {
        const { editingKey } = this.state
        const editable = this.isEditing(record)
        return editable ? (
@@ -100,11 +100,11 @@
            <EditableContext.Consumer>
              {form => (
                <span onClick={() => this.save(form, record.uuid)} style={{ marginRight: 8 , color: '#1890ff', cursor: 'pointer'}}>
                  保存
                  {window.GLOB.dict['save'] || '保存'}
                </span>
              )}
            </EditableContext.Consumer>
            <span style={{ color: '#1890ff', cursor: 'pointer'}} onClick={() => this.cancel(record.uuid)}>取消</span>
            <span style={{ color: '#1890ff', cursor: 'pointer'}} onClick={() => this.cancel(record.uuid)}>{window.GLOB.dict['cancel'] || '取消'}</span>
          </div>
        ) : (
          <div className={'edit-operation-btn' + (editingKey !== '' ? ' disabled' : '')} style={{minWidth: '110px'}}>
@@ -115,7 +115,7 @@
    }],
    printTypeColumns: [
      {
        title: '打印类型',
        title: window.GLOB.dict['print_type'] || '打印类型',
        dataIndex: 'Text',
        width: '26.1%'
      },
@@ -130,7 +130,7 @@
        title: window.GLOB.dict['operation'] || '操作',
        dataIndex: 'operation',
        width: '153px',
        render: (text, record) => {
        render: (_, record) => {
          const { editingKey } = this.state
          const editable = this.isEditing(record)
          return editable ? (
@@ -138,11 +138,11 @@
              <EditableContext.Consumer>
                {form => (
                  <span onClick={() => this.save(form, record.uuid, record.parentId)} style={{ marginRight: 8 , color: '#1890ff', cursor: 'pointer'}}>
                    保存
                    {window.GLOB.dict['save'] || '保存'}
                  </span>
                )}
              </EditableContext.Consumer>
              <span style={{ color: '#1890ff', cursor: 'pointer'}} onClick={() => this.cancel(record.uuid)}>取消</span>
              <span style={{ color: '#1890ff', cursor: 'pointer'}} onClick={() => this.cancel(record.uuid)}>{window.GLOB.dict['cancel'] || '取消'}</span>
            </div>
          ) : (
            <div className={'edit-operation-btn' + (editingKey !== '' ? ' disabled' : '')} style={{minWidth: '110px'}}>
src/tabviews/zshare/topSearch/index.jsx
@@ -1266,7 +1266,7 @@
    return (
      <>
        <Form {...formItemLayout} className={`mk-search-wrap mk-float-${setting.float} mk-order-${setting.order}`} style={setting.style}>
        <Form {...formItemLayout} className={`mk-search-wrap mk-float-${setting.float} mk-order-${setting.order || 'none'}`} style={setting.style}>
          <Row gutter={24}>{this.getFields()}</Row>
          {advanceValues.length && (setting.advanceType !== 'pulldown' || (setting.advanceType === 'pulldown' && !visible)) ? <Row gutter={24}>
            <div className="advanced-list">
src/utils/utils-custom.js
@@ -2553,6 +2553,9 @@
              filterSql(script.sql)
            })
          }
          if (item.setting.supModTip) {
            sql.push(item.setting.supModTip)
          }
        }
        if (item.columns) {
@@ -2729,6 +2732,9 @@
          filterSql(script.sql)
        })
      }
      if (item.setting.supModTip) {
        sql.push(item.setting.supModTip)
      }
    })
  }
@@ -2767,7 +2773,12 @@
  ops = ops.map(n => n.replace(/^\s+|\s+$/g, ''))
  menu = menu.map(n => n.replace(/^\s+|\s+$/g, ''))
  sql = sql.filter(Boolean)
  sql = sql.filter((n) => {
    if (!n) return false
    if (/^[a-zA-Z_]+$/.test(n)) return false
    return true
  })
  btn = btn.filter(Boolean)
  ops = ops.filter(Boolean)
  menu = menu.filter(Boolean)
@@ -3145,6 +3156,9 @@
              script.sql = filterSql(script.sql)
            })
          }
          if (item.setting.supModTip) {
            item.setting.supModTip = replaceTitle(item.setting.supModTip)
          }
        }
        if (item.columns) {
@@ -3320,6 +3334,9 @@
        item.scripts && item.scripts.forEach(script => {
          script.sql = filterSql(script.sql)
        })
      }
      if (item.setting.supModTip) {
        item.setting.supModTip = replaceTitle(item.setting.supModTip)
      }
    })
  }
@@ -3566,6 +3583,9 @@
              script.sql = filterSql(script.sql)
            })
          }
          if (item.setting.supModTip) {
            item.setting.supModTip = replaceTitle(item.setting.supModTip)
          }
        }
        if (item.columns) {
@@ -3726,6 +3746,9 @@
          script.sql = filterSql(script.sql)
        })
      }
      if (item.setting.supModTip) {
        item.setting.supModTip = replaceTitle(item.setting.supModTip)
      }
    })
  }
src/utils/utils.js
@@ -1188,6 +1188,10 @@
        val = val.replace(/(^\s+$)|\t+|\v+/ig, '')
        if (col.interception !== 'false') {
          val = val.replace(/^\s+|\s+$/g, '')
        }
        if (!val && col.required === 'true') {            // 必填校验
          errors.push(_position + '内容不可为空')
        } else if (col.limit && val.length > col.limit) { // 长度校验
src/views/login/index.jsx
@@ -851,7 +851,7 @@
            }
            // positecgroup
            if (res.users_upt === 'true' && window.GLOB.systemType === 'production') {
            if (['20210626201522493D7AD7591D7A547278685', '20210626201956190740F1DF384914A3CA9EF'].includes(window.GLOB.appkey) && res.users_upt === 'true' && window.GLOB.systemType === 'production') {
              Api.genericInterface({
                func: 's_Get_local_u_deleted',
                users_upt_date: res.users_upt_date,
src/views/login/index.scss
@@ -37,7 +37,7 @@
    min-height: 420px;
    display: flex;
    align-items: center;
    justify-content: right;
    justify-content: flex-end;
    padding-right: 20vw;
    overflow: hidden;
src/views/systemfunc/sidemenu/config.jsx
@@ -191,13 +191,13 @@
    MenuID: '1577972969199lei1g0qkvlh4tkc908m',
    MenuNo: 'sModularM',
    MenuName: '系统模块',
  }, {
    src: '',
    PageParam: {OpenType: 'newtab', Template: 'BaseTable'},
    type: 'BaseTable',
    MenuID: '1578479100252lfbp29v1kafk4s4q4ig',
    MenuNo: 'BDLanguagePacksM',
    MenuName: '语言包',
  // }, {
  //   src: '',
  //   PageParam: {OpenType: 'newtab', Template: 'BaseTable'},
  //   type: 'BaseTable',
  //   MenuID: '1578479100252lfbp29v1kafk4s4q4ig',
  //   MenuNo: 'BDLanguagePacksM',
  //   MenuName: '语言包',
  }, {
    src: '',
    systems: ['production', 'local', 'SSO', 'cloud'],