king
2023-08-31 c5b925431860e7d4194bfe550e86866b11e4f7a4
Merge branch 'positec' into dms
53个文件已修改
5个文件已添加
956 ■■■■■ 已修改文件
src/api/index.js 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/mobimg/canlendar.png 补丁 | 查看 | 原始文档 | blame | 历史
src/index.js 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/calendar/options.jsx 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/card/balcony/options.jsx 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/card/data-card/options.jsx 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/card/double-data-card/options.jsx 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/carousel/data-card/options.jsx 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/chart/antv-G6/chartcompile/formconfig.jsx 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/chart/antv-bar/chartcompile/formconfig.jsx 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/chart/antv-dashboard/chartcompile/formconfig.jsx 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/chart/antv-pie/chartcompile/formconfig.jsx 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/chart/antv-scatter/chartcompile/formconfig.jsx 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/chart/chart-custom/chartcompile/formconfig.jsx 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/code/sandbox/options.jsx 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/editor/braft-editor/options.jsx 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/table/normal-table/options.jsx 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/timeline/normal-timeline/options.jsx 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/tree/antd-tree/options.jsx 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/datasource/index.jsx 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/datasource/verifycard/columnform/index.jsx 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/datasource/verifycard/index.jsx 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/datasource/verifycard/settingform/index.jsx 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/modulesource/option.jsx 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/process/index.jsx 136 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/process/index.scss 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/process/settingform/index.jsx 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/process/settingform/index.scss 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/chart/antv-X6/nodeupdate/index.jsx 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/form/simple-form/index.jsx 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/table/base-table/index.jsx 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/table/edit-table/normalTable/index.jsx 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/index.jsx 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/actionList/excelInbutton/index.jsx 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/actionList/funcMegvii/index.jsx 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/actionList/funczip/index.jsx 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/actionList/normalbutton/index.jsx 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/actionList/printbutton/index.jsx 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/topSearch/index.jsx 87 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/sharecomponent/actioncomponent/verifyexcelin/columnform/index.jsx 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/sharecomponent/actioncomponent/verifyexcelin/index.jsx 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/sharecomponent/actioncomponent/verifyprint/index.jsx 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/sharecomponent/fieldscomponent/index.jsx 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/sharecomponent/searchcomponent/dragsearch/card.jsx 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/zshare/editTable/index.jsx 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/zshare/verifycard/index.jsx 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/utils-datamanage.js 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/utils.js 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/billprint/index.jsx 33 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/design/header/index.jsx 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/design/sidemenu/thdmenuplus/index.jsx 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/login/index.jsx 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/menudesign/index.jsx 53 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mobdesign/index.jsx 43 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/pcdesign/index.jsx 29 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/printTemplate/index.jsx 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/sso/index.jsx 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/tabledesign/index.jsx 33 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/index.js
@@ -94,7 +94,6 @@
  
  /**
   * @description 使用dostar接口,跳过验证
   * @param {Object} param 查询及提交参数
   */
  dostarInterface (param) {
    param.userid = param.userid || ''
@@ -697,7 +696,7 @@
    if (window.GLOB.CacheMap.has(_param)) {
      return Promise.resolve(window.GLOB.CacheMap.get(_param))
    } else {
      return Promise.resolve({ErrCode: 'S', ErrMesg: '', LongParam: '', message: '', status: false})
      return Promise.resolve({ErrCode: 'S', LongParam: '', message: '', status: false})
    }
  }
@@ -801,7 +800,7 @@
      token = JSON.parse(window.decodeURIComponent(window.atob(token)))
    } catch (e) {
      token = null
      _resolve({status: false, ErrCode: 'E', message: '接口信息解析失败!', ErrMesg: 'token_error'})
      _resolve({status: false, ErrCode: 'token_error', message: '接口信息解析失败!'})
    }
    if (!token) return
@@ -904,7 +903,7 @@
    param.appkey = window.GLOB.appkey || ''
    if (param.$token === '') {
      return Promise.resolve({status: false, ErrCode: 'E', message: '接口地址尚未设置!', ErrMesg: 'token_error'})
      return Promise.resolve({status: false, ErrCode: 'token_error', message: '接口地址尚未设置!'})
    } else if (param.$token) {
      return new Promise(resolve => this.visitOuterSystem(param, resolve))
    }
src/assets/mobimg/canlendar.png
src/index.js
@@ -181,6 +181,16 @@
        GLOB.navBar = _systemMsg.navBar || 'shutter'
        GLOB.appVersion = _systemMsg.app_version || ''
        let levels = [30, 10, 20, 40, 50, 60, 70, 80, 90, 100]
        levels.some(m => {
          if (_systemMsg.Member_Level === md5('mksoft' + GLOB.appkey + m)) {
            GLOB.memberLevel = m
            return true
          }
          return false
        })
        if (GLOB.favicon) {
          let link = document.querySelector("link[rel*='icon']") || document.createElement('link')
          link.type = 'image/x-icon'
@@ -236,19 +246,6 @@
    let lang = localStorage.getItem(_href + 'lang') || (config.defaultLang !== 'en-US' ? 'zh-CN' : 'en-US')
    sessionStorage.setItem('lang', lang)
    let _level = 0
    let _Mlevel = sessionStorage.getItem('Member_Level')
    if (_Mlevel) {
      if (_Mlevel === md5('mksoft' + GLOB.appkey + new Date().getFullYear() + new Date().getMonth() + 10)) {
        _level = 10
      } else if (_Mlevel === md5('mksoft' + GLOB.appkey + new Date().getFullYear() + new Date().getMonth() + 20)) {
        _level = 20
      } else if (_Mlevel === md5('mksoft' + GLOB.appkey + new Date().getFullYear() + new Date().getMonth() + 30)) {
        _level = 30
      }
    }
    GLOB.memberLevel = _level
    GLOB.mkThdMenus = [] // 三级菜单
    GLOB.mkActions = {}  // 按钮权限集
@@ -281,6 +278,15 @@
      value: GLOB.cloudServiceApi || ''
    })
    if (GLOB.memberLevel) {
      Object.defineProperty(GLOB, 'memberLevel', {
        writable: false,
        value: GLOB.memberLevel
      })
    } else {
      GLOB.memberLevel = 0
    }
    if (GLOB.sysType === 'cloud') {
      Object.defineProperty(GLOB, 'debugger', {
        writable: false,
src/menu/components/calendar/options.jsx
@@ -5,6 +5,8 @@
export default function (wrap, columns) {
  let roleList = sessionStorage.getItem('sysRoles')
  let appType = sessionStorage.getItem('appType')
  let isprint = sessionStorage.getItem('MenuType') === 'billPrint'
  let ispop = sessionStorage.getItem('editMenuType') === 'popview'
  if (roleList) {
    try {
@@ -113,7 +115,7 @@
        {value: 'true', label: !appType ? '继承菜单' : '启用'},
        {value: 'false', label: '禁用'},
      ],
      forbid: sessionStorage.getItem('editMenuType') === 'popview'
      forbid: ispop || isprint
    },
    {
      type: 'radio',
@@ -125,7 +127,7 @@
        {value: 'true', label: '继承菜单'},
        {value: 'false', label: '禁用'},
      ],
      forbid: sessionStorage.getItem('editMenuType') === 'popview'
      forbid: ispop || isprint
    },
    {
      type: 'radio',
@@ -143,7 +145,8 @@
        {field: 'menu', values: ['menu']},
        {field: 'menuType', values: ['menus']},
        {field: 'menus', values: ['menus']},
      ]
      ],
      forbid: isprint
    },
    {
      type: 'select',
@@ -152,6 +155,7 @@
      initval: wrap.menuType || '',
      required: true,
      options: columns,
      forbid: isprint
    },
    {
      type: 'cascader',
@@ -161,6 +165,7 @@
      required: true,
      extendName: 'MenuNo',
      options: menulist,
      forbid: isprint
    },
    {
      type: 'multiselect',
@@ -169,7 +174,7 @@
      initval: wrap.blacklist || [],
      required: false,
      options: roleList,
      forbid: !!appType
      forbid: !!appType || isprint
    },
    {
      type: 'table',
@@ -207,6 +212,7 @@
      required: true,
      span: 24,
      actions: ['view'],
      forbid: isprint,
      columns: [
        {
          title: '标识',
src/menu/components/card/balcony/options.jsx
@@ -6,7 +6,8 @@
 */
export default function (wrap, buttons, columns) {
  let menu = window.GLOB.customMenu
  let MenuType = menu.parentId === 'BillPrintTemp' ? 'billPrint' : ''
  let isprint = sessionStorage.getItem('MenuType') === 'billPrint'
  let ispop = sessionStorage.getItem('editMenuType') === 'popview'
  let modules = MenuUtils.getLinkModules(menu.components) || []
  let supmodules = MenuUtils.getSupModules(menu.components, '', menu.interfaces)
@@ -124,7 +125,7 @@
        {field: 'syncModule', values: ['sync']},
        {field: 'checkAll', values: ['sync']},
      ],
      forbid: MenuType === 'billPrint'
      forbid: isprint
    },
    {
      type: 'cascader',
@@ -133,7 +134,8 @@
      initval: wrap.supModule || [],
      // tooltip: '当上级组件不存在或没有权限时,当前组件不显示。',
      required: true,
      options: supmodules
      options: supmodules,
      forbid: isprint
    },
    {
      type: 'radio',
@@ -145,7 +147,8 @@
      options: [
        {value: 'hidden', label: '选行'},
        {value: 'show', label: '始终'},
      ]
      ],
      forbid: isprint
    },
    {
      type: 'cascader',
@@ -154,7 +157,8 @@
      initval: wrap.syncModule || '',
      tooltip: '当同步组件不存在或没有权限时,当前组件不显示。',
      required: true,
      options: modules
      options: modules,
      forbid: isprint
    },
    {
      type: 'radio',
@@ -166,7 +170,8 @@
      options: [
        {value: 'hidden', label: '隐藏'},
        {value: 'show', label: '显示'},
      ]
      ],
      forbid: isprint
    },
    {
      type: 'radio',
@@ -201,7 +206,7 @@
        {value: 'content', label: '浮动卡'},
        {value: 'headerOrfooter', label: '页眉/页脚'},
      ],
      forbid: MenuType !== 'billPrint'
      forbid: !isprint
    },
    {
      type: 'radio',
@@ -213,7 +218,7 @@
        {value: 'true', label: !appType ? '继承菜单' : '启用'},
        {value: 'false', label: '禁用'},
      ],
      forbid: sessionStorage.getItem('editMenuType') === 'popview'
      forbid: ispop || isprint
    },
    {
      type: 'radio',
@@ -225,7 +230,7 @@
        {value: 'true', label: '继承菜单'},
        {value: 'false', label: '禁用'},
      ],
      forbid: sessionStorage.getItem('editMenuType') === 'popview'
      forbid: ispop || isprint
    },
    {
      type: 'select',
@@ -234,7 +239,7 @@
      initval: wrap.linkbtn || '',
      required: false,
      options: buttons,
      forbid: MenuType === 'billPrint'
      forbid: isprint
    },
    {
      type: 'multiselect',
@@ -243,7 +248,7 @@
      initval: wrap.blacklist || [],
      required: false,
      options: roleList,
      forbid: !!appType
      forbid: !!appType || isprint
    },
  ]
src/menu/components/card/data-card/options.jsx
@@ -5,7 +5,8 @@
 */
export default function (wrap, subtype, columns = [], id = '', supNodes = [], setting, buttons = []) {
  let appType = sessionStorage.getItem('appType')
  let MenuType = ''
  let isprint = sessionStorage.getItem('MenuType') === 'billPrint'
  let ispop = sessionStorage.getItem('editMenuType') === 'popview'
  let menu = window.GLOB.customMenu
  let laypage = setting && setting.laypage !== 'false'
  let interfaces = []
@@ -18,10 +19,6 @@
        })
      }
    })
  }
  if (menu.parentId === 'BillPrintTemp') {
    MenuType = 'billPrint'
  }
  let modules = []
  if (subtype === 'propcard' || subtype === 'datacard') {
@@ -184,7 +181,7 @@
      options: [
        {value: 'page', label: '页码'},
        {value: 'switch', label: '左右切换', forbid: appType === 'mob' || subtype === 'tablecard'},
        {value: 'slide', label: '滑动加载', forbid: appType !== 'mob' || sessionStorage.getItem('editMenuType') === 'popview'},
        {value: 'slide', label: '滑动加载', forbid: appType !== 'mob' || ispop},
        {value: 'more', label: '查看更多'},
      ],
      controlFields: [
@@ -333,7 +330,7 @@
      controlFields: [
        {field: 'printHeight', values: ['content']},
      ],
      forbid: subtype !== 'propcard' || MenuType !== 'billPrint'
      forbid: subtype !== 'propcard' || !isprint
    },
    {
      type: 'number',
@@ -342,7 +339,7 @@
      initval: wrap.printHeight || '',
      tooltip: subtype !== 'propcard' ? '当前数据卡高度相当于几条数据。' : '当前属性卡高度相当于几条数据。',
      required: false,
      forbid: subtype === 'tablecard' || MenuType !== 'billPrint'
      forbid: subtype === 'tablecard' || !isprint
    },
    {
      type: 'select',
@@ -491,7 +488,7 @@
        {value: 'true', label: '验证'},
        {value: 'false', label: '忽略'},
      ],
      forbid: subtype !== 'datacard'
      forbid: subtype !== 'datacard' || isprint
    },
    {
      type: 'cascader',
@@ -501,7 +498,7 @@
      required: false,
      options: modules,
      allowClear: true,
      forbid: subtype !== 'propcard'
      forbid: subtype !== 'propcard' || isprint
    },
    {
      type: 'select',
@@ -533,7 +530,7 @@
      initval: wrap.supType || 'single',
      tooltip: '上级组件为单一组件或多个组件。',
      required: false,
      forbid: subtype !== 'datacard' || appType === 'mob',
      forbid: subtype !== 'datacard' || appType === 'mob' || isprint,
      options: [
        {value: 'single', label: '单组件'},
        {value: 'multi', label: '多组件'},
@@ -552,7 +549,7 @@
        {value: 'true', label: !appType ? '继承菜单' : '启用'},
        {value: 'false', label: '禁用'},
      ],
      forbid: sessionStorage.getItem('editMenuType') === 'popview'
      forbid: ispop || isprint
    },
    {
      type: 'radio',
@@ -564,7 +561,7 @@
        {value: 'true', label: '继承菜单'},
        {value: 'false', label: '禁用'},
      ],
      forbid: sessionStorage.getItem('editMenuType') === 'popview'
      forbid: ispop || isprint
    },
    {
      type: 'multiselect',
@@ -573,7 +570,7 @@
      initval: wrap.blacklist || [],
      required: false,
      options: roleList,
      forbid: !!appType
      forbid: !!appType || isprint
    },
    {
      type: 'text',
@@ -590,7 +587,7 @@
      label: '上级组件',
      initval: supNodes,
      required: true,
      forbid: subtype !== 'datacard' || appType === 'mob',
      forbid: subtype !== 'datacard' || appType === 'mob' || isprint,
      span: 24,
      columns: [
        {
src/menu/components/card/double-data-card/options.jsx
@@ -3,15 +3,10 @@
 */
export default function (wrap, columns = [], setting) {
  let appType = sessionStorage.getItem('appType')
  // let MenuType = ''
  // let menu = window.GLOB.customMenu
  let laypage = setting && setting.laypage !== 'false'
  // if (menu.parentId === 'BillPrintTemp') {
  //   MenuType = 'billPrint'
  // }
  let roleList = sessionStorage.getItem('sysRoles')
  let isprint = sessionStorage.getItem('MenuType') === 'billPrint'
  let ispop = sessionStorage.getItem('editMenuType') === 'popview'
  if (roleList) {
    try {
@@ -91,7 +86,7 @@
      disabled: !laypage,
      options: [
        {value: 'page', label: '页码'},
        {value: 'slide', label: '滑动加载', forbid: appType !== 'mob' || sessionStorage.getItem('editMenuType') === 'popview'},
        {value: 'slide', label: '滑动加载', forbid: appType !== 'mob' || ispop},
        {value: 'more', label: '查看更多'},
      ],
      controlFields: [
@@ -156,15 +151,6 @@
        {value: 'true', label: '有'},
      ],
    },
    // {
    //   type: 'number',
    //   field: 'printHeight',
    //   label: '换算高度',
    //   initval: wrap.printHeight || '',
    //   tooltip: '当前数据卡高度相当于几条数据。',
    //   required: false,
    //   forbid: MenuType !== 'billPrint'
    // },
    {
      type: 'radio',
      field: 'empty',
@@ -239,7 +225,7 @@
        {value: 'true', label: !appType ? '继承菜单' : '启用'},
        {value: 'false', label: '禁用'},
      ],
      forbid: sessionStorage.getItem('editMenuType') === 'popview'
      forbid: ispop || isprint
    },
    {
      type: 'radio',
@@ -251,7 +237,7 @@
        {value: 'true', label: '继承菜单'},
        {value: 'false', label: '禁用'},
      ],
      forbid: sessionStorage.getItem('editMenuType') === 'popview'
      forbid: ispop || isprint
    },
    {
      type: 'multiselect',
@@ -260,7 +246,7 @@
      initval: wrap.blacklist || [],
      required: false,
      options: roleList,
      forbid: !!appType
      forbid: !!appType || isprint
    },
    {
      type: 'text',
src/menu/components/carousel/data-card/options.jsx
@@ -4,6 +4,7 @@
export default function (wrap, subtype) {
  let appType = sessionStorage.getItem('appType')
  let roleList = sessionStorage.getItem('sysRoles')
  let ispop = sessionStorage.getItem('editMenuType') === 'popview'
  if (roleList) {
    try {
@@ -212,7 +213,7 @@
        {value: 'true', label: !appType ? '继承菜单' : '启用'},
        {value: 'false', label: '禁用'},
      ],
      forbid: sessionStorage.getItem('editMenuType') === 'popview'
      forbid: ispop
    },
    {
      type: 'radio',
@@ -224,7 +225,7 @@
        {value: 'true', label: '继承菜单'},
        {value: 'false', label: '禁用'},
      ],
      forbid: sessionStorage.getItem('editMenuType') === 'popview'
      forbid: ispop
    },
    {
      type: 'multiselect',
src/menu/components/chart/antv-G6/chartcompile/formconfig.jsx
@@ -5,6 +5,8 @@
export function getBaseForm (card, columns) {
  let appType = sessionStorage.getItem('appType')
  let roleList = sessionStorage.getItem('sysRoles')
  let isprint = sessionStorage.getItem('MenuType') === 'billPrint'
  let ispop = sessionStorage.getItem('editMenuType') === 'popview'
  if (roleList) {
    try {
      roleList = JSON.parse(roleList)
@@ -87,7 +89,7 @@
        {value: 'true', label: '启用'},
        {value: 'false', label: '禁用'},
      ],
      forbid: !appType || sessionStorage.getItem('editMenuType') === 'popview'
      forbid: !appType || ispop || isprint
    },
    {
      type: 'radio',
@@ -99,7 +101,7 @@
        {value: 'true', label: '继承菜单'},
        {value: 'false', label: '禁用'},
      ],
      forbid: sessionStorage.getItem('editMenuType') === 'popview'
      forbid: ispop || isprint
    },
    {
      type: 'multiselect',
@@ -108,7 +110,7 @@
      initval: card.blacklist || [],
      required: false,
      options: roleList,
      forbid: !!appType
      forbid: !!appType || isprint
    },
    {
      type: 'radio',
src/menu/components/chart/antv-bar/chartcompile/formconfig.jsx
@@ -5,6 +5,8 @@
export function getBaseForm (card, columns = []) {
  let appType = sessionStorage.getItem('appType')
  let roleList = sessionStorage.getItem('sysRoles')
  let isprint = sessionStorage.getItem('MenuType') === 'billPrint'
  let ispop = sessionStorage.getItem('editMenuType') === 'popview'
  if (roleList) {
    try {
      roleList = JSON.parse(roleList)
@@ -87,7 +89,7 @@
        {value: 'true', text: '启用'},
        {value: 'false', text: '禁用'},
      ],
      forbid: !appType || sessionStorage.getItem('editMenuType') === 'popview'
      forbid: !appType || ispop || isprint
    },
    {
      type: 'radio',
@@ -99,7 +101,7 @@
        {value: 'true', text: '继承菜单'},
        {value: 'false', text: '禁用'},
      ],
      forbid: sessionStorage.getItem('editMenuType') === 'popview'
      forbid: ispop || isprint
    },
    {
      type: 'select',
@@ -109,7 +111,7 @@
      multi: true,
      required: false,
      options: roleList,
      forbid: !!appType
      forbid: !!appType || isprint
    },
    {
      type: 'radio',
src/menu/components/chart/antv-dashboard/chartcompile/formconfig.jsx
@@ -5,6 +5,8 @@
export function getBaseForm (card) {
  let appType = sessionStorage.getItem('appType')
  let roleList = sessionStorage.getItem('sysRoles')
  let isprint = sessionStorage.getItem('MenuType') === 'billPrint'
  let ispop = sessionStorage.getItem('editMenuType') === 'popview'
  if (roleList) {
    try {
      roleList = JSON.parse(roleList)
@@ -61,7 +63,7 @@
        {value: 'true', text: '启用'},
        {value: 'false', text: '禁用'},
      ],
      forbid: !appType || sessionStorage.getItem('editMenuType') === 'popview'
      forbid: !appType || ispop || isprint
    },
    {
      type: 'radio',
@@ -73,7 +75,7 @@
        {value: 'true', text: '继承菜单'},
        {value: 'false', text: '禁用'},
      ],
      forbid: sessionStorage.getItem('editMenuType') === 'popview'
      forbid: ispop || isprint
    },
    {
      type: 'select',
@@ -83,7 +85,7 @@
      multi: true,
      required: false,
      options: roleList,
      forbid: !!appType
      forbid: !!appType || isprint
    }
  ]
}
src/menu/components/chart/antv-pie/chartcompile/formconfig.jsx
@@ -6,6 +6,8 @@
  let appType = sessionStorage.getItem('appType')
  let isApp = appType === 'pc' || appType === 'mob'
  let menulist = null
  let isprint = sessionStorage.getItem('MenuType') === 'billPrint'
  let ispop = sessionStorage.getItem('editMenuType') === 'popview'
  if (isApp) {
    menulist = sessionStorage.getItem('appMenus')
@@ -119,7 +121,7 @@
        {value: 'true', text: '启用'},
        {value: 'false', text: '禁用'},
      ],
      forbid: !appType || sessionStorage.getItem('editMenuType') === 'popview'
      forbid: !appType || ispop || isprint
    },
    {
      type: 'radio',
@@ -131,7 +133,7 @@
        {value: 'true', text: '继承菜单'},
        {value: 'false', text: '禁用'},
      ],
      forbid: sessionStorage.getItem('editMenuType') === 'popview'
      forbid: ispop || isprint
    },
    {
      type: 'select',
@@ -141,7 +143,7 @@
      multi: true,
      required: false,
      options: roleList,
      forbid: !!appType
      forbid: !!appType || isprint
    }
  ]
}
src/menu/components/chart/antv-scatter/chartcompile/formconfig.jsx
@@ -5,6 +5,8 @@
export function getBaseForm (card) {
  let appType = sessionStorage.getItem('appType')
  let roleList = sessionStorage.getItem('sysRoles')
  let isprint = sessionStorage.getItem('MenuType') === 'billPrint'
  let ispop = sessionStorage.getItem('editMenuType') === 'popview'
  if (roleList) {
    try {
      roleList = JSON.parse(roleList)
@@ -61,7 +63,7 @@
        {value: 'true', text: '启用'},
        {value: 'false', text: '禁用'},
      ],
      forbid: !appType || sessionStorage.getItem('editMenuType') === 'popview'
      forbid: !appType || ispop || isprint
    },
    {
      type: 'radio',
@@ -73,7 +75,7 @@
        {value: 'true', text: '继承菜单'},
        {value: 'false', text: '禁用'},
      ],
      forbid: sessionStorage.getItem('editMenuType') === 'popview'
      forbid: ispop || isprint
    },
    {
      type: 'select',
@@ -83,7 +85,7 @@
      multi: true,
      required: false,
      options: roleList,
      forbid: !!appType
      forbid: !!appType || isprint
    }
  ]
}
src/menu/components/chart/chart-custom/chartcompile/formconfig.jsx
@@ -5,6 +5,8 @@
export function getBaseForm (card) {
  let appType = sessionStorage.getItem('appType')
  let roleList = sessionStorage.getItem('sysRoles')
  let isprint = sessionStorage.getItem('MenuType') === 'billPrint'
  let ispop = sessionStorage.getItem('editMenuType') === 'popview'
  if (roleList) {
    try {
      roleList = JSON.parse(roleList)
@@ -72,7 +74,7 @@
        {value: 'true', text: '启用'},
        {value: 'false', text: '禁用'},
      ],
      forbid: !appType || sessionStorage.getItem('editMenuType') === 'popview'
      forbid: !appType || ispop || isprint
    },
    {
      type: 'radio',
@@ -84,7 +86,7 @@
        {value: 'true', text: '继承菜单'},
        {value: 'false', text: '禁用'},
      ],
      forbid: sessionStorage.getItem('editMenuType') === 'popview'
      forbid: ispop || isprint
    },
    {
      type: 'select',
@@ -94,7 +96,7 @@
      multi: true,
      required: false,
      options: roleList,
      forbid: !!appType
      forbid: !!appType || isprint
    },
    // {
    //   type: 'cascader',
src/menu/components/code/sandbox/options.jsx
@@ -4,6 +4,8 @@
export default function (wrap) {
  let appType = sessionStorage.getItem('appType')
  let roleList = sessionStorage.getItem('sysRoles')
  let isprint = sessionStorage.getItem('MenuType') === 'billPrint'
  let ispop = sessionStorage.getItem('editMenuType') === 'popview'
  if (roleList) {
    try {
@@ -71,7 +73,7 @@
        {value: 'true', label: '启用'},
        {value: 'false', label: '禁用'},
      ],
      forbid: !appType || sessionStorage.getItem('editMenuType') === 'popview'
      forbid: !appType || ispop || isprint
    },
    {
      type: 'radio',
@@ -83,7 +85,7 @@
        {value: 'true', label: '继承菜单'},
        {value: 'false', label: '禁用'},
      ],
      forbid: sessionStorage.getItem('editMenuType') === 'popview'
      forbid: ispop || isprint
    },
    {
      type: 'multiselect',
@@ -92,7 +94,7 @@
      initval: wrap.blacklist || [],
      required: false,
      options: roleList,
      forbid: !!appType
      forbid: !!appType || isprint
    },
  ]
src/menu/components/editor/braft-editor/options.jsx
@@ -4,6 +4,8 @@
export default function (wrap, columns) {
  let appType = sessionStorage.getItem('appType')
  let roleList = sessionStorage.getItem('sysRoles')
  let isprint = sessionStorage.getItem('MenuType') === 'billPrint'
  let ispop = sessionStorage.getItem('editMenuType') === 'popview'
  let menu = window.GLOB.customMenu
  let interfaces = []
@@ -157,7 +159,7 @@
        {value: 'true', label: '启用'},
        {value: 'false', label: '禁用'},
      ],
      forbid: !appType || sessionStorage.getItem('editMenuType') === 'popview'
      forbid: !appType || ispop || isprint
    },
    {
      type: 'multiselect',
@@ -166,7 +168,7 @@
      initval: wrap.blacklist || [],
      required: false,
      options: roleList,
      forbid: !!appType
      forbid: !!appType || isprint
    },
  ]
src/menu/components/table/normal-table/options.jsx
@@ -4,6 +4,8 @@
export default function (wrap, action = [], columns = []) {
  let roleList = sessionStorage.getItem('sysRoles')
  let appType = sessionStorage.getItem('appType')
  let isprint = sessionStorage.getItem('MenuType') === 'billPrint'
  let ispop = sessionStorage.getItem('editMenuType') === 'popview'
  if (roleList) {
    try {
@@ -197,7 +199,7 @@
      max: 3000,
      precision: 0,
      required: false,
      forbid: appType !== ''
      forbid: appType !== '' || isprint
    },
    {
      type: 'select',
@@ -264,6 +266,7 @@
        {value: 'true', label: '验证'},
        {value: 'false', label: '忽略'},
      ],
      forbid: isprint
    },
    {
      type: 'radio',
@@ -275,7 +278,7 @@
        {value: 'true', label: !appType ? '继承菜单' : '启用'},
        {value: 'false', label: '禁用'},
      ],
      forbid: sessionStorage.getItem('editMenuType') === 'popview'
      forbid: ispop || isprint
    },
    {
      type: 'radio',
@@ -287,7 +290,7 @@
        {value: 'true', label: '继承菜单'},
        {value: 'false', label: '禁用'},
      ],
      forbid: sessionStorage.getItem('editMenuType') === 'popview'
      forbid: ispop || isprint
    },
    {
      type: 'multiselect',
@@ -296,7 +299,7 @@
      initval: wrap.blacklist || [],
      required: false,
      options: roleList,
      forbid: !!appType
      forbid: !!appType || isprint
    },
  ]
src/menu/components/timeline/normal-timeline/options.jsx
@@ -4,6 +4,7 @@
export default function (wrap, columns) {
  let roleList = sessionStorage.getItem('sysRoles')
  let appType = sessionStorage.getItem('appType')
  let ispop = sessionStorage.getItem('editMenuType') === 'popview'
  if (roleList) {
    try {
@@ -171,7 +172,7 @@
        {value: 'true', label: !appType ? '继承菜单' : '启用'},
        {value: 'false', label: '禁用'},
      ],
      forbid: sessionStorage.getItem('editMenuType') === 'popview'
      forbid: ispop
    },
    {
      type: 'radio',
@@ -183,7 +184,7 @@
        {value: 'true', label: '继承菜单'},
        {value: 'false', label: '禁用'},
      ],
      forbid: sessionStorage.getItem('editMenuType') === 'popview'
      forbid: ispop
    },
    {
      type: 'radio',
src/menu/components/tree/antd-tree/options.jsx
@@ -4,6 +4,7 @@
export default function (wrap, columns = []) {
  let roleList = sessionStorage.getItem('sysRoles')
  let appType = sessionStorage.getItem('appType')
  let ispop = sessionStorage.getItem('editMenuType') === 'popview'
  if (roleList) {
    try {
@@ -131,7 +132,7 @@
        {value: 'true', label: '启用'},
        {value: 'false', label: '禁用'},
      ],
      forbid: !appType || sessionStorage.getItem('editMenuType') === 'popview'
      forbid: !appType || ispop
    },
    {
      type: 'radio',
@@ -143,7 +144,7 @@
        {value: 'true', label: '继承菜单'},
        {value: 'false', label: '禁用'},
      ],
      forbid: sessionStorage.getItem('editMenuType') === 'popview'
      forbid: ispop
    },
    {
      type: 'multiselect',
src/menu/datasource/index.jsx
@@ -147,6 +147,12 @@
    this.setState({loading: true})
    this.verifyRef.submitDataSource().then(res => {
      let MenuType = sessionStorage.getItem('MenuType')
      if (MenuType === 'billPrint') {
        res.setting.supModule = ['empty']
      }
      if (res.columns) {
        res.columns = res.columns.map(item => {
    
src/menu/datasource/verifycard/columnform/index.jsx
@@ -91,6 +91,7 @@
                  <Select.Option value="Nvarchar(512)"> Nvarchar(512) </Select.Option>
                  <Select.Option value="Nvarchar(1024)"> Nvarchar(1024) </Select.Option>
                  <Select.Option value="Nvarchar(2048)"> Nvarchar(2048) </Select.Option>
                  <Select.Option value="Nvarchar(4000)"> Nvarchar(4000) </Select.Option>
                  <Select.Option value="Nvarchar(max)"> Nvarchar(max) </Select.Option>
                  <Select.Option value="Int"> Int </Select.Option>
                  <Select.Option value="Decimal(18,0)"> Decimal(18,0) </Select.Option>
src/menu/datasource/verifycard/index.jsx
@@ -86,6 +86,7 @@
          { value: 'Nvarchar(512)', text: 'Nvarchar(512)' },
          { value: 'Nvarchar(1024)', text: 'Nvarchar(1024)' },
          { value: 'Nvarchar(2048)', text: 'Nvarchar(2048)' },
          { value: 'Nvarchar(4000)', text: 'Nvarchar(4000)' },
          { value: 'Nvarchar(max)', text: 'Nvarchar(max)' },
          { value: 'Int', text: 'Int' },
          { value: 'Decimal(18,0)', text: 'Decimal(18,0)' },
src/menu/datasource/verifycard/settingform/index.jsx
@@ -27,7 +27,7 @@
    modules: [],
    innerRules: [],
    innertip: '',
    MenuType: '',
    MenuType: sessionStorage.getItem('MenuType') || '',
    ismain: false
  }
@@ -35,12 +35,6 @@
    const { config, setting } = this.props
    let menu = window.GLOB.customMenu
    let MenuType = ''
    if (menu.parentId === 'BillPrintTemp') {
      MenuType = 'billPrint'
    }
    let modules = MenuUtils.getSupModules(menu.components, config.uuid, menu.interfaces)
    let ismain = false
@@ -90,7 +84,7 @@
      }
    }
    this.setState({modules, innerRules, innertip, setting: _setting, ismain, MenuType})
    this.setState({modules, innerRules, innertip, setting: _setting, ismain})
  }
  handleConfirm = () => {
src/menu/modulesource/option.jsx
@@ -32,6 +32,7 @@
import xflow from '@/assets/mobimg/xflow.png'
import Voucher from '@/assets/mobimg/voucher.png'
import Account from '@/assets/mobimg/account.png'
import canlendar from '@/assets/mobimg/canlendar.png'
// 组件配置信息
export const menuOptions = [
@@ -50,7 +51,7 @@
  { type: 'menu', url: NormalTable, component: 'table', subtype: 'normaltable', title: '常用表', width: 24 },
  { type: 'menu', url: NormalTable, component: 'table', subtype: 'editable', title: '表格(可编辑)', width: 24, forbid: ['billPrint'] },
  { type: 'menu', url: timeline, component: 'timeline', subtype: 'timeline', title: '时间轴', width: 12 },
  { type: 'menu', url: timeline, component: 'calendar', subtype: 'calendar', title: '日历', width: 24 },
  { type: 'menu', url: canlendar, component: 'calendar', subtype: 'calendar', title: '日历', width: 24 },
  { type: 'menu', url: tree, component: 'tree', subtype: 'normaltree', title: '树形列表', width: 12, forbid: ['billPrint'] },
  { type: 'menu', url: line, component: 'line', subtype: 'line', title: '折线图', width: 24 },
  { type: 'menu', url: bar, component: 'bar', subtype: 'bar', title: '柱状图', width: 24 },
src/menu/process/index.jsx
New file
@@ -0,0 +1,136 @@
import React, {Component} from 'react'
import PropTypes from 'prop-types'
import { is, fromJS } from 'immutable'
import { Modal, Tooltip, notification } from 'antd'
import { QuestionCircleOutlined, PlusOutlined, CloseOutlined } from '@ant-design/icons'
import SettingForm from './settingform'
import './index.scss'
const { confirm } = Modal
class ProcessComponent extends Component {
  static propTpyes = {
    config: PropTypes.any,
    updateConfig: PropTypes.func
  }
  state = {
    visible: false,
    urlFields: this.props.config.urlFields || []
  }
  shouldComponentUpdate (nextProps, nextState) {
    return !is(fromJS(this.state), fromJS(nextState))
  }
  editDataSource = () => {
    this.setState({
      visible: true
    })
  }
  verifySubmit = () => {
    const { urlFields } = this.state
    const { config } = this.props
    this.verifyRef.handleConfirm().then(res => {
      if (urlFields.filter(field => field === res.field).length > 0) {
        notification.warning({
          top: 92,
          message: '字段已存在!',
          duration: 5
        })
        return
      }
      let _urlFields = [...urlFields, res.field]
      this.setState({
        visible: false,
        urlFields: _urlFields
      })
      if (window.GLOB.urlFields) {
        window.GLOB.urlFields = _urlFields
      }
      this.props.updateConfig({...config, urlFields: _urlFields})
    })
  }
  deleteField = (field) => {
    let config = JSON.stringify(this.props.config)
    const _this = this
    if (new RegExp(field, 'ig').test(config)) {
      confirm({
        title: `配置中存在@${field}@,确定删除吗?`,
        content: '',
        onOk() {
          _this.execDelete(field)
        },
        onCancel() {}
      })
    } else {
      this.execDelete(field)
    }
  }
  execDelete = (_field) => {
    const { config } = this.props
    let _urlFields = this.state.urlFields.filter(field => field !== _field)
    this.setState({
      urlFields: _urlFields
    })
    if (window.GLOB.urlFields) {
      window.GLOB.urlFields = _urlFields
    }
    this.props.updateConfig({...config, urlFields: _urlFields})
  }
  render () {
    const { visible, urlFields } = this.state
    return (
      <div className="url-field-component">
        <div className="field-plus">
          <Tooltip placement="topLeft" title="页面可接收的参数字段,在查询数据源或自定义脚本中使用 @字段@ 接收。">
            <QuestionCircleOutlined className="mk-form-tip" />
            url变量
          </Tooltip>
          <PlusOutlined title="添加" onClick={() => this.editDataSource()} />
        </div>
        <div>
          {urlFields.map((field, index) => {
            return (
              <div className="field-item" key={index}>
                <CloseOutlined title="删除" onClick={() => this.deleteField(field)} />
                {field}
              </div>
            )
          })}
        </div>
        <Modal
          title="字段添加"
          visible={visible}
          width={500}
          maskClosable={false}
          onOk={this.verifySubmit}
          onCancel={() => { this.setState({ visible: false }) }}
          destroyOnClose
        >
          <SettingForm
            inputSubmit={this.verifySubmit}
            wrappedComponentRef={(inst) => this.verifyRef = inst}
          />
        </Modal>
      </div>
    )
  }
}
export default ProcessComponent
src/menu/process/index.scss
New file
@@ -0,0 +1,25 @@
.url-field-component {
  margin-bottom: 15px;
  .field-plus {
    line-height: 35px;
    padding-left: 16px;
    >.anticon-plus {
      color: #26C281;
      padding: 2px 5px;
      margin-left: 5px;
    }
  }
  .field-item {
    position: relative;
    border: 1px solid #e8e8e8;
    padding: 5px 10px;
    border-radius: 4px;
    >.anticon-close {
      position: absolute;
      right: 5px;
      top: 3px;
      font-size: 13px;
    }
  }
}
src/menu/process/settingform/index.jsx
New file
@@ -0,0 +1,82 @@
import React, {Component} from 'react'
import PropTypes from 'prop-types'
import { Form, Input } from 'antd'
// import './index.scss'
class SettingForm extends Component {
  static propTpyes = {
    inputSubmit: PropTypes.func  // 回车事件
  }
  handleConfirm = () => {
    // 表单提交时检查输入值是否正确
    return new Promise((resolve, reject) => {
      this.props.form.validateFieldsAndScroll((err, values) => {
        if (!err) {
          resolve(values)
        } else {
          reject(err)
        }
      })
    })
  }
  handleSubmit = (e) => {
    e.preventDefault()
    if (this.props.inputSubmit) {
      this.props.inputSubmit()
    }
  }
  componentDidMount() {
    try {
      let _input = document.getElementById('field')
      if (_input.focus) {
        _input.focus()
      }
    } catch (e) {
      console.warn('focus error!')
    }
  }
  render() {
    const { getFieldDecorator } = this.props.form
    const formItemLayout = {
      labelCol: {
        xs: { span: 24 },
        sm: { span: 8 }
      },
      wrapperCol: {
        xs: { span: 24 },
        sm: { span: 14 }
      }
    }
    return (
      <div className="url-field-form">
        <Form {...formItemLayout}>
          <Form.Item label="字段名">
            {getFieldDecorator('field', {
              initialValue: '',
              rules: [
                {
                  required: true,
                  message: '请输入字段名!'
                },
                {
                  pattern: /^[a-zA-Z0-9_]*$/ig,
                  message: '字段可使用英文、数字或_'
                }
              ]
            })(<Input placeholder={''} autoComplete="off" onPressEnter={this.handleSubmit} />)}
          </Form.Item>
        </Form>
      </div>
    )
  }
}
export default Form.create()(SettingForm)
src/menu/process/settingform/index.scss
src/tabviews/custom/components/chart/antv-X6/nodeupdate/index.jsx
@@ -463,7 +463,7 @@
        fields.push(
          <Col span={24} key={index}>
            <Form.Item label={item.label}>
              <ColorSketch defaultValue={item.initval} onChange={(value) => this.change(value, item.field)}/>
              <ColorSketch config={{initval: item.initval}} onChange={(value) => this.change(value, item.field)}/>
            </Form.Item>
          </Col>
        )
src/tabviews/custom/components/form/simple-form/index.jsx
@@ -25,8 +25,7 @@
    loading: false,
    data: null,
    group: null,
    BData: '',
    step: 0
    BData: ''
  }
  UNSAFE_componentWillMount () {
src/tabviews/custom/components/table/base-table/index.jsx
@@ -385,6 +385,8 @@
  getStatFieldsValue = () => {
    const { setting, config, search, BID, orderBy } = this.state
    if (!config.statFields) return
    if (setting.supModule && !BID) { // BID 不存在时,不做查询
      this.setState({
        statFValue: []
src/tabviews/custom/components/table/edit-table/normalTable/index.jsx
@@ -1727,12 +1727,12 @@
    if (res && res.ErrCode === 'S') { // 执行成功
      notification.success({
        top: 92,
        message: res.ErrMesg || '执行成功',
        message: res.message || '执行成功',
        duration: submit.stime ? submit.stime : 2
      })
    } else if (res && res.ErrCode === 'Y') { // 执行成功
      Modal.success({
        title: res.ErrMesg || '执行成功'
        title: res.message || '执行成功'
      })
    } else if (res && res.ErrCode === '-1') { // 完成后不提示
@@ -1768,23 +1768,23 @@
    if (res.ErrCode === 'E') {
      Modal.error({
        title: res.message || res.ErrMesg,
        title: res.message || '执行失败!',
      })
    } else if (res.ErrCode === 'N') {
      notification.error({
        top: 92,
        message: res.message || res.ErrMesg,
        message: res.message || '执行失败!',
        duration: submit.ntime ? submit.ntime : 10
      })
    } else if (res.ErrCode === 'F') {
      notification.error({
        className: 'notification-custom-error',
        top: 92,
        message: res.message || res.ErrMesg,
        message: res.message || '执行失败!',
        duration: submit.ftime ? submit.ftime : 10
      })
    } else if (res.ErrCode === 'NM') {
      message.error(res.message || res.ErrMesg)
      message.error(res.message || '执行失败!')
    }
    
    this.setState({
src/tabviews/custom/index.jsx
@@ -62,7 +62,6 @@
    viewlost: false,      // 页面丢失:1、未获取到配置-页面丢失;2、页面未启用
    lostmsg: '',          // 页面丢失时的提示信息
    config: null,         // 页面配置信息,包括组件等
    userConfig: null,     // 用户自定义设置
    loading: false,       // 列表数据加载中
    visible: false,       // 标签页控制
    shortcuts: null,      // 快捷键
src/tabviews/zshare/actionList/excelInbutton/index.jsx
@@ -526,7 +526,8 @@
      }).then(response => {
        if (!response || response.ErrCode === 'LoginError') return
        // 回调请求
        if (ver_token && response.ErrMesg === 'token_error') {
        if (ver_token && response.ErrCode === 'token_error') {
          response.ErrCode = 'E'
          this.execError(response)
        } else if (btn.callbackFunc ) {
          // 存在回调函数时,调用
src/tabviews/zshare/actionList/funcMegvii/index.jsx
@@ -292,7 +292,7 @@
    }
    if (error) {
      this.execError({ErrCode: 'E', ErrMesg: error})
      this.execError({ErrCode: 'E', message: error})
      return
    }
@@ -312,7 +312,7 @@
      if (datas.length > 0) {
        this.addUser(ip, datas, sessionId)
      } else {
        this.execSuccess({ErrCode: 'S', ErrMesg: '执行成功。'})
        this.execSuccess({ErrCode: 'S', message: '执行成功。'})
      }
    }, (err) => {
      this.execPreError(err, data)
@@ -327,18 +327,18 @@
   * 4、模态框执行成功后是否关闭
   * 5、通知主列表刷新
   */
  execSuccess = (res) => {
  execSuccess = (res = {}) => {
    const { btn } = this.props
    if (res && (res.ErrCode === 'S' || !res.ErrCode)) { // 执行成功
    if (res.ErrCode === 'S' || !res.ErrCode) { // 执行成功
      notification.success({
        top: 92,
        message: res.ErrMesg || '执行成功',
        message: res.message || '执行成功',
        duration: btn.verify && btn.verify.stime ? btn.verify.stime : 2
      })
    } else if (res && res.ErrCode === 'Y') { // 执行成功
      Modal.success({
        title: res.ErrMesg || '执行成功'
        title: res.message || '执行成功'
      })
    } else if (res && res.ErrCode === '-1') { // 完成后不提示
@@ -409,23 +409,23 @@
    if (res.ErrCode === 'E') {
      Modal.error({
        title: res.message || res.ErrMesg,
        title: res.message || '执行失败!',
      })
    } else if (res.ErrCode === 'N') {
      notification.error({
        top: 92,
        message: res.message || res.ErrMesg,
        message: res.message || '执行失败!',
        duration: btn.verify && btn.verify.ntime ? btn.verify.ntime : 10
      })
    } else if (res.ErrCode === 'F') {
      notification.error({
        className: 'notification-custom-error',
        top: 92,
        message: res.message || res.ErrMesg,
        message: res.message || '执行失败!',
        duration: btn.verify && btn.verify.ftime ? btn.verify.ftime : 10
      })
    } else if (res.ErrCode === 'NM') {
      message.error(res.message || res.ErrMesg)
      message.error(res.message || '执行失败!')
    }
    
    this.setState({
src/tabviews/zshare/actionList/funczip/index.jsx
@@ -381,23 +381,23 @@
      return
    } else if (res.ErrCode === 'E') {
      Modal.error({
        title: res.message || res.ErrMesg,
        title: res.message || '执行失败!',
      })
    } else if (res.ErrCode === 'N') {
      notification.error({
        top: 92,
        message: res.message || res.ErrMesg,
        message: res.message || '执行失败!',
        duration: 10
      })
    } else if (res.ErrCode === 'F') {
      notification.error({
        className: 'notification-custom-error',
        top: 92,
        message: res.message || res.ErrMesg,
        message: res.message || '执行失败!',
        duration: 10
      })
    } else if (res.ErrCode === 'NM') {
      message.error(res.message || res.ErrMesg)
      message.error(res.message || '执行失败!')
    }
    if (btn.execError !== 'never') {
src/tabviews/zshare/actionList/normalbutton/index.jsx
@@ -876,7 +876,7 @@
      if (!_vars.includes(_key)) {
        _vars.push(_key)
  
        if (form.fieldlen && form.fieldlen > 2048) {
        if (form.fieldlen && form.fieldlen > 4000) {
          form.fieldlen = 'max'
        }
  
@@ -930,7 +930,7 @@
          if (col.datatype) {
            _declarefields.push(`@${_key} ${col.datatype}`)
          } else {
            if (col.fieldlength && col.fieldlength > 2048) {
            if (col.fieldlength && col.fieldlength > 4000) {
              col.fieldlength = 'max'
            }
  
@@ -1438,7 +1438,6 @@
        result.status = false
        result.message = result.$ErrMesg
        result.ErrCode = 'E'
        result.ErrMesg = result.$ErrMesg
      } else {
        result.status = result.status !== false
        result.ErrCode = result.ErrCode || '-1'
@@ -1890,7 +1889,8 @@
    Api.genericInterface(result).then(res => {
      if (!res) return // LoginError时中断请求
      if (ver_token && res.ErrMesg === 'token_error') {
      if (ver_token && res.ErrCode === 'token_error') {
        res.ErrCode = 'E'
        this.execError(res)
        return
      }
src/tabviews/zshare/actionList/printbutton/index.jsx
@@ -405,7 +405,6 @@
            errorMsg = {
              ErrCode: 'N',
              message: _temp.error,
              ErrMesg: _temp.error,
              status: false
            }
          } else {
@@ -1050,7 +1049,7 @@
        _initvars.push(`@${_key}='${form.value}'`)
      }
      if (form.fieldlen && form.fieldlen > 2048) {
      if (form.fieldlen && form.fieldlen > 4000) {
        form.fieldlen = 'max'
      }
@@ -1264,7 +1263,8 @@
    }).then(response => {
      if (!response || response.ErrCode === 'LoginError') return
      if (ver_token && response.ErrMesg === 'token_error') {
      if (ver_token && response.ErrCode === 'token_error') {
        response.ErrCode = 'E'
        this.execError(response)
        _resolve({next: false, list: []})
      } else if (btn.callbackFunc) {
src/tabviews/zshare/topSearch/index.jsx
@@ -114,22 +114,11 @@
      if (item.advanced && !forbid) {
        _setting.showAdv = true
        if (!['group', 'check', 'switch'].includes(item.type)) {
          item.signValue = true
        }
      } else {
        item.advanced = false
      }
      if (item.advanced && item.initval) {
        let val = item.initval
        if (item.precision === 'hour') {
          if (/,/ig.test(val)) {
            val = val.split(',').map(m => m + ':00').join(',')
          } else {
            val = val + ':00'
          }
        }
        if (['text', 'date', 'datemonth', 'dateweek', 'daterange'].includes(item.type)) {
          advanceValues.push({field: item.field, type: item.type, label: item.label, value: val})
        }
      }
      if (item.type === 'group') {
@@ -179,6 +168,29 @@
        if (item.type === 'checkcard' && item.multiple === 'dropdown' && item.resourceType === '0') {
          this.resetCheckcard(item)
        }
      }
      if (item.signValue && item.initval) {
        let val = item.initval
        if (item.precision === 'hour') {
          if (/,/ig.test(val)) {
            val = val.split(',').map(m => m + ':00').join(',')
          } else {
            val = val + ':00'
          }
        }
        let text = val
        if (item.type === 'select' || item.type === 'link' || item.type === 'radio') {
          item.oriOptions.forEach(cell => {
            if (cell.Value === val) {
              text = cell.Text
            }
          })
        }
        advanceValues.push({field: item.field, type: item.type, label: item.label, value: val, text})
      }
      fieldMap.set(item.field, item)
@@ -621,7 +633,7 @@
      if (visible) {
        let advanceValues = []
        this.state.searchlist.forEach(item => {
          if (!item.advanced) return
          if (!item.signValue) return
    
          let val = this.record[item.field]
          if (val || val === 0) {
@@ -632,9 +644,18 @@
                val = val + ':00'
              }
            }
            if (['text', 'date', 'datemonth', 'dateweek', 'daterange'].includes(item.type)) {
              advanceValues.push({field: item.field, type: item.type, label: item.label, value: val})
            let text = val
            if (item.type === 'select' || item.type === 'link' || item.type === 'radio') {
              item.oriOptions.forEach(cell => {
                if (cell.Value === val) {
                  text = cell.Text
                }
              })
            }
            advanceValues.push({field: item.field, type: item.type, label: item.label, value: val, text})
          }
        })
        this.setState({advanceValues})
@@ -720,7 +741,7 @@
      } else {
        record[item.field] = item.initval
      }
      if (item.advanced && item.initval) {
      if (item.signValue && item.initval) {
        let val = item.initval
        if (item.precision === 'hour') {
          if (/,/ig.test(val)) {
@@ -729,9 +750,18 @@
            val = val + ':00'
          }
        }
        if (['text', 'date', 'datemonth', 'dateweek', 'daterange'].includes(item.type)) {
          advanceValues.push({field: item.field, type: item.type, label: item.label, value: val})
        let text = val
        if (item.type === 'select' || item.type === 'link' || item.type === 'radio') {
          item.oriOptions.forEach(cell => {
            if (cell.Value === val) {
              text = cell.Text
            }
          })
        }
        advanceValues.push({field: item.field, type: item.type, label: item.label, value: val, text})
      }
      return item
@@ -835,7 +865,7 @@
    let advanceValues = []
    this.state.searchlist.forEach(item => {
      if (!item.advanced) return
      if (!item.signValue) return
      let val = this.record[item.field]
      if (val || val === 0) {
@@ -846,9 +876,18 @@
            val = val + ':00'
          }
        }
        if (['text', 'date', 'datemonth', 'dateweek', 'daterange'].includes(item.type)) {
          advanceValues.push({field: item.field, type: item.type, label: item.label, value: val})
        let text = val
        if (item.type === 'select' || item.type === 'link' || item.type === 'radio') {
          item.oriOptions.forEach(cell => {
            if (cell.Value === val) {
              text = cell.Text
            }
          })
        }
        advanceValues.push({field: item.field, type: item.type, label: item.label, value: val, text})
      }
    })
@@ -886,7 +925,7 @@
                return (
                  <div key={index}>
                    <span>{item.label}: </span>
                    <span className="advance-value">{item.value}</span>
                    <span className="advance-value">{item.text}</span>
                    <CloseOutlined onClick={() => this.closeAdvanceForm(item)} />
                  </div>)
              })}
src/templates/sharecomponent/actioncomponent/verifyexcelin/columnform/index.jsx
@@ -110,6 +110,7 @@
                  <Select.Option value="Nvarchar(512)"> Nvarchar(512) </Select.Option>
                  <Select.Option value="Nvarchar(1024)"> Nvarchar(1024) </Select.Option>
                  <Select.Option value="Nvarchar(2048)"> Nvarchar(2048) </Select.Option>
                  <Select.Option value="Nvarchar(4000)"> Nvarchar(4000) </Select.Option>
                  <Select.Option value="Nvarchar(max)"> Nvarchar(max) </Select.Option>
                  <Select.Option value="Int"> Int </Select.Option>
                  <Select.Option value="Decimal(18,0)"> Decimal(18,0) </Select.Option>
src/templates/sharecomponent/actioncomponent/verifyexcelin/index.jsx
@@ -63,6 +63,7 @@
          { value: 'Nvarchar(512)', text: 'Nvarchar(512)' },
          { value: 'Nvarchar(1024)', text: 'Nvarchar(1024)' },
          { value: 'Nvarchar(2048)', text: 'Nvarchar(2048)' },
          { value: 'Nvarchar(4000)', text: 'Nvarchar(4000)' },
          { value: 'Nvarchar(max)', text: 'Nvarchar(max)' },
          { value: 'Int', text: 'Int' },
          { value: 'Decimal(18,0)', text: 'Decimal(18,0)' },
src/templates/sharecomponent/actioncomponent/verifyprint/index.jsx
@@ -144,6 +144,7 @@
          { value: 'Nvarchar(512)', text: 'Nvarchar(512)' },
          { value: 'Nvarchar(1024)', text: 'Nvarchar(1024)' },
          { value: 'Nvarchar(2048)', text: 'Nvarchar(2048)' },
          { value: 'Nvarchar(4000)', text: 'Nvarchar(4000)' },
          { value: 'Nvarchar(max)', text: 'Nvarchar(max)' },
          { value: 'Int', text: 'Int' },
          { value: 'Decimal(18,0)', text: 'Decimal(18,0)' },
@@ -206,7 +207,7 @@
          _fieldlen = _f.decimal ? _f.decimal : 0
        }
        if (_fieldlen > 2048) {
        if (_fieldlen > 4000) {
          _fieldlen = 'max'
        }
src/templates/sharecomponent/fieldscomponent/index.jsx
@@ -64,7 +64,7 @@
                  try { // 存在max
                    _length = +_type.match(/\d+/)[0] || 50
                  } catch (e) {
                    _length = 2048
                    _length = 4000
                  }
                  _type = 'text'
                } else if (/^int/.test(_type)) {
src/templates/sharecomponent/searchcomponent/dragsearch/card.jsx
@@ -1,6 +1,6 @@
import React from 'react'
import { useDrag, useDrop } from 'react-dnd'
import { Select, DatePicker, Input, Popover, Form } from 'antd'
import { Select, DatePicker, Input, Popover, Form, Switch, Radio, Checkbox } from 'antd'
import { EditOutlined, CopyOutlined, CloseOutlined } from '@ant-design/icons'
import moment from 'moment'
@@ -113,6 +113,18 @@
  } else if (card.type === 'checkcard') {
    type = 'checkcard'
    formItem = <CheckCard config={card} />
  } else if (card.type === 'switch') {
    formItem = (<Switch checkedChildren={card.openText || ''} unCheckedChildren={card.closeText || ''} checked={card.initval === card.openVal}/>)
  } else if (card.type === 'radio') {
    let options = card.options
    if (options.length === 0) {
      options = [{Value: '1', Text: '选项1'}, {Value: '2', Text: '选项2'}]
    }
    formItem = (<Radio.Group value={card.initval} style={{lineHeight: '36px'}}>
      {options.map((item, i) => (<Radio key={i} value={item.Value}> {item.Text} </Radio>))}
    </Radio.Group>)
  } else if (card.type === 'check') {
    formItem = <Checkbox style={{lineHeight: '36px'}} checked={card.initval === card.openVal}>{card.checkTip || ''}</Checkbox>
  }
  let labelwidth = card.labelwidth || 33.3
src/templates/zshare/editTable/index.jsx
@@ -389,7 +389,7 @@
        } else {
          let datatype = 'Nvarchar(50)'
          let fieldlength = 50
          if (col.fieldlength && [10, 20, 50, 100, 256, 512, 1024, 2048].includes(col.fieldlength)) {
          if (col.fieldlength && [10, 20, 50, 100, 256, 512, 1024, 2048, 4000].includes(col.fieldlength)) {
            fieldlength = col.fieldlength
            datatype = `Nvarchar(${fieldlength})`
          }
src/templates/zshare/verifycard/index.jsx
@@ -721,7 +721,7 @@
          _fieldlen = _f.decimal ? _f.decimal : 0
        }
        if (_fieldlen > 2048) {
        if (_fieldlen > 4000) {
          _fieldlen = 'max'
        }
@@ -786,7 +786,7 @@
          let _fieldlen = _f.fieldlength || 50
          if (_fieldlen > 2048) {
          if (_fieldlen > 4000) {
            _fieldlen = 'max'
          }
src/utils/utils-datamanage.js
@@ -11,7 +11,6 @@
   * @param {Number}   pageIndex    页码
   * @param {Number}   pageSize     每页数量
   * @param {String}   BID          上级ID
   * @return {Object}  param
   */
  static getQueryDataParams (setting, search = [], orderBy = '', pageIndex = 1, pageSize = 10, BID, id, year) {
    let param = null
@@ -446,13 +445,6 @@
    _customScript = _customScript.replace(item.reg, item.value)
  })
  // _dataresource = _dataresource.replace(/@select\$|\$select@/ig, '')
  // _customScript = _customScript.replace(/@select\$|\$select@/ig, '')
  // _dataresource = _dataresource.replace(/\$sum@/ig, '/*')
  // _dataresource = _dataresource.replace(/@sum\$/ig, '*/')
  // _customScript = _customScript.replace(/\$sum@/ig, '/*')
  // _customScript = _customScript.replace(/@sum\$/ig, '*/')
  let _search = ''
  if (setting.queryType !== 'statistics' && _dataresource) {
    _search = Utils.joinMainSearchkey(searchlist)
@@ -495,8 +487,7 @@
    primaryKey: setting.primaryKey || '',
    foreign_key: '',
    sql: _dataresource,
    script: _customScript,
    // transaction: setting.transaction === 'true'
    script: _customScript
  }
}
src/utils/utils.js
@@ -39,26 +39,6 @@
export default class Utils {
  /**
   * @description 获取会员等级
   * @return {String}  level
   */
  static getMemberLevel () {
    let _level = 10
    let _Mlevel = sessionStorage.getItem('Member_Level')
    if (_Mlevel) {
      if (_Mlevel === md5('mksoft' + window.GLOB.appkey + new Date().getFullYear() + new Date().getMonth() + 10)) {
        _level = 10
      } else if (_Mlevel === md5('mksoft' + window.GLOB.appkey + new Date().getFullYear() + new Date().getMonth() + 20)) {
        _level = 20
      } else if (_Mlevel === md5('mksoft' + window.GLOB.appkey + new Date().getFullYear() + new Date().getMonth() + 30)) {
        _level = 30
      }
    }
    return _level
  }
  /**
   * @description 获取图表高度
   */
  static getHeight (val) {
@@ -1461,7 +1441,7 @@
    if (!_vars.includes(_key)) {
      _vars.push(_key)
      if (form.fieldlen && form.fieldlen > 2048) {
      if (form.fieldlen && form.fieldlen > 4000) {
        form.fieldlen = 'max'
      }
@@ -1515,7 +1495,7 @@
        if (col.datatype) {
          _declarefields.push(`@${_key} ${col.datatype}`)
        } else {
          if (col.fieldlength && col.fieldlength > 2048) {
          if (col.fieldlength && col.fieldlength > 4000) {
            col.fieldlength = 'max'
          }
src/views/billprint/index.jsx
@@ -719,16 +719,11 @@
      _dataresource = `select top 1000 ${setting.arr_field} from ${_dataresource} `
    }
    // 测试系统打印查询语句
    if (window.GLOB.debugger === true) {
      _customScript &&  console.info(`${_dataresource ? '' : '/*不执行默认sql*/\n'}${_customScript}`)
      _dataresource &&  console.info(_dataresource)
    }
    return {
      name: dataName,
      columns: columns,
      par_tablename: '',
      order: setting.order || '',
      type: format === 'array' ? format : '',
      primaryKey: setting.primaryKey || '',
      foreign_key: '',
@@ -755,6 +750,18 @@
    let district = sessionStorage.getItem('district') || ''
    let address = sessionStorage.getItem('address') || ''
    let regoptions = [
      { reg: /@pageSize@/ig, value: 9999 },
      { reg: /@pageIndex@/ig, value: 1},
      { reg: /@ID@/ig, value: `''`},
      { reg: /@BID@/ig, value: `'${BID || ''}'`},
      { reg: /@LoginUID@/ig, value: `'${sessionStorage.getItem('LoginUID') || ''}'`},
      { reg: /@SessionUid@/ig, value: `'${localStorage.getItem('SessionUid') || ''}'`},
      { reg: /@UserID@/ig, value: `'${sessionStorage.getItem('UserID') || ''}'`},
      { reg: /@Appkey@/ig, value: `'${window.GLOB.appkey || ''}'`},
      { reg: /@typename@/ig, value: `'admin'`},
    ]
    let LText = params.map((item, index) => {
      let _sql = item.sql
      let _script = item.script
@@ -766,6 +773,20 @@
        `
      }
      _sql = _sql.replace(/@orderBy@/ig, item.order)
      _script = _script.replace(/@orderBy@/ig, item.order)
      regoptions.forEach(cell => {
        _sql = _sql.replace(cell.reg, cell.value)
        _script = _script.replace(cell.reg, cell.value)
      })
      // 测试系统打印查询语句
      if (window.GLOB.debugger === true) {
        _script && console.info(`${_sql ? '' : '/*不执行默认sql*/\n'}${_script}`)
        _sql &&  console.info(_sql)
      }
      item.columns.forEach(cell => {
        LText_field.push(`Select '${item.name}' as tablename,'${cell.field}' as fieldname,'${cell.datatype}' as field_type`)
      })
src/views/design/header/index.jsx
@@ -23,7 +23,6 @@
    menulist: null, // 一级菜单
    userName: sessionStorage.getItem('CloudUserName'),
    avatar: Utils.getrealurl(sessionStorage.getItem('CloudAvatar')),
    memberLevel: Utils.getMemberLevel(),
    visible: false,
    loading: false
  }
@@ -154,7 +153,7 @@
                trdItem.PageParam = {OpenType: 'newtab'}
              }
              if (trdItem.type === 'CustomPage' && this.state.memberLevel < 20) { // 会员等级大于等于20时,有编辑权限
              if (trdItem.type === 'CustomPage' && window.GLOB.memberLevel < 20) { // 会员等级大于等于20时,有编辑权限
                trdItem.forbidden = true
              }
@@ -408,7 +407,7 @@
  render () {
    const { mainMenu, editLevel } = this.props
    const { menulist, memberLevel, visible, loading } = this.state
    const { menulist, visible, loading } = this.state
    return (
      <header className={'sys-header-container ant-menu-dark ' + (['level2', 'level3'].includes(editLevel) ? 'mask' : '')} id="main-header-container">
@@ -450,7 +449,7 @@
              <div className="icon"><HomeOutlined /></div>
              <div className="title">首页</div>
              <div className="detail">基于自定义页面的首页设计,可实现灵活的元素配置及样式调整,展现当前系统的风格。</div>
              <Button type="primary" disabled={!(memberLevel >= 20)} title={memberLevel >= 20 ? '' : '会员等级不够,无开发权限。'} onClick={() => {window.open('#/menudesign/JTdCJTIyTWVudVR5cGUlMjIlM0ElMjJob21lJTIyJTJDJTIyTWVudUlkJTIyJTNBJTIyaG9tZV9wYWdlX2lkJTIyJTJDJTIyTWVudU5hbWUlMjIlM0ElMjIlRTklQTYlOTYlRTklQTElQjUlMjIlN0Q=')}}>
              <Button type="primary" disabled={window.GLOB.memberLevel < 20} title={window.GLOB.memberLevel < 20 ? '会员等级不够,无开发权限。' : ''} onClick={() => {window.open('#/menudesign/JTdCJTIyTWVudVR5cGUlMjIlM0ElMjJob21lJTIyJTJDJTIyTWVudUlkJTIyJTNBJTIyaG9tZV9wYWdlX2lkJTIyJTJDJTIyTWVudU5hbWUlMjIlM0ElMjIlRTklQTYlOTYlRTklQTElQjUlMjIlN0Q=')}}>
                编辑
              </Button>
            </div> : null
@@ -459,7 +458,7 @@
            <div className="icon"><ApiOutlined /></div>
            <div className="title">接口调试</div>
            <div className="detail">可自动处理登录接口的参数加密,以及业务接口的签名计算,方便开发人员的接口测试工作。</div>
            <Button type="primary" disabled={!(memberLevel >= 20)} title={memberLevel >= 20 ? '' : '会员等级不够,无开发权限。'} onClick={() => {window.open('#/interface')}}>
            <Button type="primary" disabled={window.GLOB.memberLevel < 20} title={window.GLOB.memberLevel < 20 ? '会员等级不够,无开发权限。' : ''} onClick={() => {window.open('#/interface')}}>
              编辑
            </Button>
          </div>
@@ -468,10 +467,10 @@
            <div className="title">应用管理</div>
            <div className="detail">可创建及管理PC、pad及移动端等不同设备的应用,实现明科云APP、微信公众号、小程序等多平台的应用共享。</div>
            {window.GLOB.systemType !== 'production' ? 
              <Button type="primary" disabled={!(memberLevel >= 20)} title={memberLevel >= 20 ? '' : '会员等级不够,无开发权限。'} onClick={() => {window.open('#/appmanage')}}>
              <Button type="primary" disabled={window.GLOB.memberLevel < 20} title={window.GLOB.memberLevel < 20 ? '会员等级不够,无开发权限。' : ''} onClick={() => {window.open('#/appmanage')}}>
                编辑
              </Button> :
              <Button type="primary" disabled={!(memberLevel >= 20)} title={memberLevel >= 20 ? '' : '会员等级不够,无开发权限。'} onClick={() => {window.open('#/appcheck')}}>
              <Button type="primary" disabled={window.GLOB.memberLevel < 20} title={window.GLOB.memberLevel < 20 ? '会员等级不够,无开发权限。' : ''} onClick={() => {window.open('#/appcheck')}}>
                查看
              </Button>
            }
src/views/design/sidemenu/thdmenuplus/index.jsx
@@ -49,7 +49,7 @@
  getUsedTemplate = () => {
    let { sysTemplates } = this.state
    let memberLevel = Utils.getMemberLevel()
    const illust = { // 模板图片,用于已使用模板
      BaseTable: mainsubtable,
      TreePage: treepage,
@@ -63,7 +63,7 @@
      res.UserTemp.forEach(temp => {
        if (!['BaseTable', 'CustomPage'].includes(temp.Template)) {
          return
        } else if (temp.Template === 'CustomPage' && memberLevel < 20) {
        } else if (temp.Template === 'CustomPage' && window.GLOB.memberLevel < 20) {
          temp.disabled = true
          temp.disTitle = '会员等级不够,无开发权限。'
        }
@@ -80,7 +80,7 @@
      })
      sysTemplates = sysTemps.map(temp => {
        if (temp.type === 'CustomPage' && memberLevel < 20) {
        if (temp.type === 'CustomPage' && window.GLOB.memberLevel < 20) {
          temp.disabled = true
          temp.disTitle = '会员等级不够,无开发权限。'
        }
src/views/login/index.jsx
@@ -670,7 +670,18 @@
              showline: res.split_line_show || 'true',
              webSite: res.WebSite || '',
              navBar: res.menu_type, // shutter 百叶窗、linkage_navigation 联动菜单、linkage 联动菜单_无导航栏、menu_board 菜单面板、menu_board_navigation 菜单面板_标签页
              app_version: res.app_version
              app_version: res.app_version,
              Member_Level: 0
            }
            if ([10, 20, 30, 40, 50, 60, 70, 80, 90, 100].includes(res.member_level)) {
              systemMsg.Member_Level = md5('mksoft' + window.GLOB.appkey + res.member_level)
              if (!window.GLOB.memberLevel) {
                Object.defineProperty(window.GLOB, 'memberLevel', {
                  writable: false,
                  value: res.member_level
                })
              }
            }
            let level = res.pwd_level || ''
@@ -758,13 +769,6 @@
              link.rel = 'shortcut icon'
              link.href = res.titlelogo
              document.getElementsByTagName('head')[0].appendChild(link)
            }
            let memberLevel = res.member_level
            if (typeof(memberLevel) === 'number' && memberLevel > 0 && parseInt(memberLevel / 10) * 10 === memberLevel) {
              sessionStorage.setItem('Member_Level', md5('mksoft' + window.GLOB.appkey + new Date().getFullYear() + new Date().getMonth() + memberLevel))
              window.GLOB.memberLevel = memberLevel
            }
            // positecgroup
src/views/menudesign/index.jsx
@@ -95,6 +95,8 @@
    try {
      let param = JSON.parse(window.decodeURIComponent(window.atob(this.props.match.params.param)))
      sessionStorage.setItem('MenuType', param.MenuType || 'custom')
      this.setState({
        MenuType: param.MenuType,
        MenuId: param.MenuId || param.MenuID,
@@ -1115,31 +1117,32 @@
                <Collapse accordion defaultActiveKey="basedata" bordered={false}>
                  {/* 基本信息 */}
                  <Panel header="基本信息" key="basedata">
                    {/* 菜单信息 */}
                    {config && MenuType === 'custom' ? <MenuForm
                      config={config}
                      MenuId={MenuId}
                      parentId={ParentId}
                      MenuName={config.MenuName}
                      MenuNo={config.MenuNo}
                      updateConfig={this.updateConfig}
                    /> : null}
                    {config && MenuType === 'home' ? <HomeForm
                      config={config}
                      updateConfig={this.updateConfig}
                    /> : null}
                    {config && MenuType === 'billPrint' ? <PrintMenuForm
                      config={config}
                      updateConfig={this.updateConfig}
                    /> : null}
                    {config ? <UrlFieldComponent
                      config={config}
                      updateConfig={this.updateConfig}
                    /> : null}
                    {/* 表名添加 */}
                    {config ? <TableComponent config={config} updatetable={this.updateConfig}/> : null}
                    {config ? <Paragraph style={{padding: '15px 0px 0px 18px'}} copyable={{ text: MenuId }}>菜单ID</Paragraph> : null}
                    {config ? <NormalCss config={config} updateConfig={this.updateConfig}/> : null}
                    {config ? <>
                      {MenuType === 'custom' ? <MenuForm
                        config={config}
                        MenuId={MenuId}
                        parentId={ParentId}
                        MenuName={config.MenuName}
                        MenuNo={config.MenuNo}
                        updateConfig={this.updateConfig}
                      /> : null}
                      {MenuType === 'home' ? <HomeForm
                        config={config}
                        updateConfig={this.updateConfig}
                      /> : null}
                      {MenuType === 'billPrint' ? <PrintMenuForm
                        config={config}
                        updateConfig={this.updateConfig}
                      /> : null}
                      <UrlFieldComponent
                        config={config}
                        updateConfig={this.updateConfig}
                      />
                      {/* 表名添加 */}
                      <TableComponent config={config} updatetable={this.updateConfig}/>
                      <Paragraph style={{padding: '15px 0px 0px 18px'}} copyable={{ text: MenuId }}>菜单ID</Paragraph>
                      <NormalCss config={config} updateConfig={this.updateConfig}/>
                    </> : null}
                  </Panel>
                  {/* 组件添加 */}
                  <Panel header="组件" key="component">
src/views/mobdesign/index.jsx
@@ -57,8 +57,6 @@
window.GLOB.urlFields = []               // url变量
window.GLOB.customMenu = null            // 保存菜单信息
const memberLevel = Utils.getMemberLevel()
class MobDesign extends Component {
  state = {
    loading: true,
@@ -94,7 +92,7 @@
      return
    }
    
    if (memberLevel < 30) return
    if (window.GLOB.memberLevel < 30) return
    window.GLOB.developing = true
@@ -157,7 +155,7 @@
  componentDidMount () {
    if (!sessionStorage.getItem('UserID')) return
    if (memberLevel < 30) {
    if (window.GLOB.memberLevel < 30) {
      document.getElementById('mk-mob-design-view').innerHTML = '<div style="text-align: center; font-size: 30px; margin-top: 40vh; height: 100vh; background: #fff;">本应用没有PC端页面的编辑权限,请联系管理员!</div>'
      return
    }
@@ -2072,24 +2070,25 @@
                <Collapse accordion activeKey={activeKey} bordered={false} onChange={(key) => this.setState({activeKey: key})}>
                  {/* 基本信息 */}
                  <Panel header="基本信息" forceRender className="basedata" key="basedata">
                    {/* 菜单信息 */}
                    {config ? <MenuForm
                      config={config}
                      MenuId={MenuId}
                      adapters={adapters}
                      updateConfig={(con) => {
                        this.updateConfig(con)
                        if (con.direction !== config.direction) {
                          this.changeView(con.direction)
                        }
                      }}
                    /> : null}
                    {config ? <UrlFieldComponent config={config} updateConfig={this.updateConfig}/> : null}
                    {/* 表名添加 */}
                    {config ? <TableComponent config={config} updatetable={this.updateConfig}/> : null}
                    {config ? <Paragraph style={{padding: '15px 0px 0px 18px'}} copyable={{ text: MenuId }}>菜单ID</Paragraph> : null}
                    {config ? <Paragraph style={{padding: '10px 0px 0px 18px'}} copyable={{ text:  `${window.GLOB.baseurl}mob/index.html#/index/${sessionStorage.getItem('kei_no')}/${sessionStorage.getItem('typename')}/${sessionStorage.getItem('lang')}/${MenuId}/@BID@` }}>菜单链接</Paragraph> : null}
                    {config ? <NormalCss config={config} updateConfig={this.updateConfig}/> : null}
                    {config ? <>
                      <MenuForm
                        config={config}
                        MenuId={MenuId}
                        adapters={adapters}
                        updateConfig={(con) => {
                          this.updateConfig(con)
                          if (con.direction !== config.direction) {
                            this.changeView(con.direction)
                          }
                        }}
                      />
                      <UrlFieldComponent config={config} updateConfig={this.updateConfig}/>
                      {/* 表名添加 */}
                      <TableComponent config={config} updatetable={this.updateConfig}/>
                      <Paragraph style={{padding: '15px 0px 0px 18px'}} copyable={{ text: MenuId }}>菜单ID</Paragraph>
                      <Paragraph style={{padding: '10px 0px 0px 18px'}} copyable={{ text:  `${window.GLOB.baseurl}mob/index.html#/index/${sessionStorage.getItem('kei_no')}/${sessionStorage.getItem('typename')}/${sessionStorage.getItem('lang')}/${MenuId}/@BID@` }}>菜单链接</Paragraph>
                      <NormalCss config={config} updateConfig={this.updateConfig}/>
                    </> : null}
                  </Panel>
                  {/* 组件添加 */}
                  <Panel header="组件" className="component" key="component">
src/views/pcdesign/index.jsx
@@ -52,8 +52,6 @@
sessionStorage.setItem('typename', 'pc')
document.body.className = ''
const memberLevel = Utils.getMemberLevel()
class MenuDesign extends Component {
  state = {
    loading: true,
@@ -87,7 +85,7 @@
      return
    }
    
    if (memberLevel < 30) return
    if (window.GLOB.memberLevel < 30) return
    sessionStorage.setItem('editMenuType', 'menu') // 编辑菜单类型
@@ -137,7 +135,7 @@
  componentDidMount () {
    if (!sessionStorage.getItem('UserID')) return
    if (memberLevel < 30) {
    if (window.GLOB.memberLevel < 30) {
      document.getElementById('mk-pc-design-view').innerHTML = '<div style="text-align: center; font-size: 30px; margin-top: 40vh; height: 100vh; background: #fff;">本应用没有PC端页面的编辑权限,请联系管理员!</div>'
      return
    }
@@ -1691,17 +1689,18 @@
                <Collapse accordion activeKey={activeKey} bordered={false} onChange={(key) => this.setState({activeKey: key})}>
                  {/* 基本信息 */}
                  <Panel header="基本信息" key="basedata">
                    {/* 菜单信息 */}
                    {config ? <MenuForm
                      config={config}
                      MenuId={MenuId}
                      updateConfig={this.updateConfig}
                    /> : null}
                    {config ? <UrlFieldComponent config={config} updateConfig={this.updateConfig}/> : null}
                    {/* 表名添加 */}
                    {config ? <TableComponent config={config} updatetable={this.updateConfig}/> : null}
                    {config ? <Paragraph style={{padding: '15px 0px 0px 18px'}} copyable={{ text: MenuId }}>菜单ID</Paragraph> : null}
                    {config ? <NormalCss config={config} updateConfig={this.updateConfig}/> : null}
                    {config ? <>
                      <MenuForm
                        config={config}
                        MenuId={MenuId}
                        updateConfig={this.updateConfig}
                      />
                      <UrlFieldComponent config={config} updateConfig={this.updateConfig}/>
                      {/* 表名添加 */}
                      <TableComponent config={config} updatetable={this.updateConfig}/>
                      <Paragraph style={{padding: '15px 0px 0px 18px'}} copyable={{ text: MenuId }}>菜单ID</Paragraph>
                      <NormalCss config={config} updateConfig={this.updateConfig}/>
                    </> : null}
                  </Panel>
                  {/* 组件添加 */}
                  <Panel header="组件" key="component">
src/views/printTemplate/index.jsx
@@ -413,7 +413,7 @@
    } else {
      notification.warning({
        top: 92,
        message: result.ErrMesg,
        message: result.message,
        duration: 5
      })
    }
@@ -489,7 +489,7 @@
      if (error) {
        notification.warning({
          top: 92,
          message: error.ErrMesg,
          message: error.message,
          duration: 5
        })
        return
@@ -787,7 +787,7 @@
          } else {
            notification.warning({
              top: 92,
              message: result.ErrMesg,
              message: result.message,
              duration: 5
            })
            this.setState({
@@ -814,7 +814,7 @@
      } else {
        notification.warning({
          top: 92,
          message: res.ErrMesg,
          message: res.message,
          duration: 5
        })
      }
src/views/sso/index.jsx
@@ -82,7 +82,18 @@
          showline: res.split_line_show || 'true',
          webSite: res.WebSite || '',
          navBar: res.menu_type,
          app_version: res.app_version
          app_version: res.app_version,
          Member_Level: 0
        }
        if ([10, 20, 30, 40, 50, 60, 70, 80, 90, 100].includes(res.member_level)) {
          systemMsg.Member_Level = md5('mksoft' + window.GLOB.appkey + res.member_level)
          if (!window.GLOB.memberLevel) {
            Object.defineProperty(window.GLOB, 'memberLevel', {
              writable: false,
              value: res.member_level
            })
          }
        }
        let level = res.pwd_level || ''
@@ -133,12 +144,6 @@
          document.getElementsByTagName('head')[0].appendChild(link)
        }
        let memberLevel = res.member_level
        if (typeof(memberLevel) === 'number' && memberLevel > 0 && parseInt(memberLevel / 10) * 10 === memberLevel) {
          sessionStorage.setItem('Member_Level', md5('mksoft' + window.GLOB.appkey + new Date().getFullYear() + new Date().getMonth() + memberLevel))
          window.GLOB.memberLevel = memberLevel
        }
        this.props.history.replace('/main')
      } else {
        notification.warning({
src/views/tabledesign/index.jsx
@@ -831,22 +831,23 @@
                <Collapse accordion activeKey={activeKey} bordered={false} onChange={(key) => this.setState({activeKey: key})}>
                  {/* 基本信息 */}
                  <Panel header="基本信息" key="basedata">
                    {/* 菜单信息 */}
                    {config ? <MenuForm
                      config={config}
                      MenuId={MenuId}
                      parentId={ParentId}
                      MenuName={config.MenuName}
                      MenuNo={config.MenuNo}
                      updateConfig={this.updateConfig}
                    /> : null}
                    {config ? <UrlFieldComponent
                      config={config}
                      updateConfig={this.updateConfig}
                    /> : null}
                    {/* 表名添加 */}
                    {config ? <TableComponent config={config} updatetable={this.updateConfig}/> : null}
                    {config ? <Paragraph style={{padding: '15px 0px 0px 18px'}} copyable={{ text: MenuId }}>菜单ID</Paragraph> : null}
                    {config ? <>
                      <MenuForm
                        config={config}
                        MenuId={MenuId}
                        parentId={ParentId}
                        MenuName={config.MenuName}
                        MenuNo={config.MenuNo}
                        updateConfig={this.updateConfig}
                      />
                      <UrlFieldComponent
                        config={config}
                        updateConfig={this.updateConfig}
                      />
                      {/* 表名添加 */}
                      <TableComponent config={config} updatetable={this.updateConfig}/>
                      <Paragraph style={{padding: '15px 0px 0px 18px'}} copyable={{ text: MenuId }}>菜单ID</Paragraph>
                    </> : null}
                  </Panel>
                  <Panel header="搜索" key="search">
                    {Source.searchItems.map((item, index) => (<SourceElement key={index} content={item}/>))}