king
2022-10-05 c14ad8237b10d9e24ad3101e706e90c4366636c0
2022-10-05
10个文件已修改
2个文件已添加
310 ■■■■ 已修改文件
public/options.json 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/card/cardcellcomponent/index.jsx 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/share/actioncomponent/formconfig.jsx 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/share/actioncomponent/index.jsx 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/tablenodes/index.jsx 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/debugtable/index.jsx 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/debugtable/index.scss 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/appmanage/index.jsx 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/imdesign/index.jsx 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/menudesign/index.jsx 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mobdesign/index.jsx 68 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/pcdesign/index.jsx 68 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
public/options.json
@@ -1,12 +1,12 @@
{
  "appId": "202108312122504607B107A83F55B40C98CCF",
  "appkey": "20210831212235413F287EC3BF489424496C8",
  "appId": "201912040924165801464FF1788654BC5AC73",
  "appkey": "20191106103859640976D6E924E464D029CF0",
  "mainSystemApi": "http://sso.mk9h.cn/cloud/webapi/dostars",
  "systemType": "",
  "externalDatabase": "false",
  "lineColor": "",
  "filter": "false",
  "defaultApp": "mkindustry",
  "defaultApp": "mk",
  "defaultLang": "zh-CN",
  "WXAppID": "",
  "WXminiAppID": "",
@@ -17,6 +17,6 @@
  "transfer": "false",
  "keepPassword": "true",
  "platforms": ["H5", "wechat", "android", "ios", "wxMiniProgram"],
  "host": "http://demo.mk9h.cn",
  "service": "erp_new/"
  "host": "http://qingqiumarket.cn",
  "service": "MKWMS/"
}
src/menu/components/card/cardcellcomponent/index.jsx
@@ -297,17 +297,6 @@
      <p style={{marginBottom: '5px'}}>{this.state.dict['model.tooltip.func.innerface'].replace('@ableField', ableField)}</p>
    </div>
    let menulist = sessionStorage.getItem('fstMenuList')
    if (menulist) {
      try {
        menulist = JSON.parse(menulist)
      } catch (e) {
        menulist = []
      }
    } else {
      menulist = []
    }
    let supId = ''
    if (cards.setting && cards.setting.supModule) {
      let pid = cards.setting.supModule[cards.setting.supModule.length - 1]
@@ -324,7 +313,7 @@
    this.setState({
      actvisible: true,
      card: card,
      formlist: getActionForm(card, functip, cards, usefulFields, menulist, modules, anchors)
      formlist: getActionForm(card, functip, cards, usefulFields, modules, anchors)
    })
  }
src/menu/components/share/actioncomponent/formconfig.jsx
@@ -12,7 +12,7 @@
 * @param {*} usefulFields   存储过程可用的开始字段
 * @param {*} type           按钮类型,用于区分可选的打开方式
 */
export function getActionForm (card, functip, config, usefulFields, menulist = [], modules = [], anchors = []) {
export function getActionForm (card, functip, config, usefulFields, modules = [], anchors = []) {
  let appType = sessionStorage.getItem('appType')
  let viewType = sessionStorage.getItem('editMenuType') // 弹窗 popview
  let printTemps = sessionStorage.getItem('printTemps')
@@ -20,6 +20,7 @@
  let setting = config.setting || {}
  let columns = config.columns || []
  let appMenus = []
  let menulist = []
  let type = ''
  if (card.eleType === 'button') {
@@ -115,6 +116,17 @@
    } else {
      appMenus = []
    }
  } else {
    menulist = sessionStorage.getItem('fstMenuList')
    if (menulist) {
      try {
        menulist = JSON.parse(menulist)
      } catch (e) {
        menulist = []
      }
    } else {
      menulist = []
    }
  }
  if (appType === 'mob') {
    opentypes = opentypes.filter(item => ['pop', 'prompt', 'exec', 'innerpage', 'funcbutton'].includes(item.value))
src/menu/components/share/actioncomponent/index.jsx
@@ -171,17 +171,6 @@
      functip = ''
    }
    let menulist = sessionStorage.getItem('fstMenuList')
    if (menulist) {
      try {
        menulist = JSON.parse(menulist)
      } catch (e) {
        menulist = []
      }
    } else {
      menulist = []
    }
    let supId = ''
    if (config.setting && config.setting.supModule) {
      let pid = config.setting.supModule[config.setting.supModule.length - 1]
@@ -198,7 +187,7 @@
    this.setState({
      visible: true,
      card: card,
      formlist: getActionForm(card, functip, config, usefulFields, menulist, modules, anchors)
      formlist: getActionForm(card, functip, config, usefulFields, modules, anchors)
    })
  }
src/menu/tablenodes/index.jsx
@@ -138,8 +138,14 @@
              item[item.tbname].forEach((m, i) => {
                if (m.debug_url) {
                  let _param = JSON.parse(window.decodeURIComponent(window.atob(m.debug_url)))
                  let label = _param.MenuName
                  if (_param && _param.type === 'app') {
                    label += ` (${_param.kei_no} | ${_param.typename}${param.lang !== 'zh-CN' ? ' | ' + param.lang : ''})`
                  }
                  cell.children.push({
                    label: _param.MenuName,
                    label: label,
                    id: item.tbname + 'menu' + i,
                    direction: 'right',
                    color: '#1890ff',
@@ -176,6 +182,16 @@
          _param = window.btoa(window.encodeURIComponent(JSON.stringify(_param)))
          window.open(`#/menudesign/${_param}`)
        }
      } else if (menu.param.type === 'app') {
        if (menu.param.typename !== 'pc') {
          let _param = {...menu.param}
          _param = window.btoa(window.encodeURIComponent(JSON.stringify(_param)))
          window.open(`#/mobdesign/${_param}`)
        } else {
          let _param = {...menu.param}
          _param = window.btoa(window.encodeURIComponent(JSON.stringify(_param)))
          window.open(`#/pcdesign/${_param}`)
        }
      }
    }
  }
src/tabviews/debugtable/index.jsx
New file
@@ -0,0 +1,94 @@
import React, {Component} from 'react'
import { is, fromJS } from 'immutable'
import { notification, Table} from 'antd'
import Api from '@/api'
import UtilsDM from '@/utils/utils-datamanage.js'
import './index.scss'
class DebugTable extends Component {
  state = {
    columns: null,        // 显示列
    data: [],             // 列表数据集
    loading: false,       // 列表数据加载中
    setting: {
      interType: 'system',
      execute: true,
      dataresource: 'select * from s_debug_value_log where createuserid=@userid@'
    },
    arr_field: 'ID,Sort,CDefine1,CDefine2,CDefine3,CDefine4,CDefine5,CDefine6,CDefine7,'
  }
  /**
   * @description 子表数据加载
   */
  async loadmaindata () {
    const { setting, arr_field } = this.state
    this.setState({
      loading: true
    })
    let _orderBy = 'sort'
    let param = UtilsDM.getQueryDataParams(setting, arr_field, [], _orderBy, 1, 9999, '')
    let result = await Api.genericInterface(param)
    if (result.status) {
      let start = 1
      this.setState({
        data: result.data.map((item, index) => {
          item.key = index
          item.$$uuid = item.ID || ''
          item.$$key = '' + item.key + item.$$uuid
          item.$Index = start + index + ''
          return item
        }),
        loading: false
      })
    } else {
      this.setState({
        loading: false
      })
      notification.error({
        top: 92,
        message: result.message,
        duration: 10
      })
    }
  }
  UNSAFE_componentWillMount() {
    // 组件加载时,获取菜单数据
    this.loadmaindata()
  }
  shouldComponentUpdate (nextProps, nextState) {
    return !is(fromJS(this.state), fromJS(nextState))
  }
  /**
   * @description 组件销毁,清除state更新
   */
  componentWillUnmount () {
    this.setState = () => {
      return
    }
  }
  render() {
    const { data, loading, columns } = this.state
    return (
      <div className="debugtable">
        <Table size="middle" columns={columns} dataSource={data} loading={loading} scroll={{ x: '100%', y: false }}/>
      </div>
    )
  }
}
export default DebugTable
src/tabviews/debugtable/index.scss
New file
@@ -0,0 +1,4 @@
.debugtable {
  position: relative;
  min-height: 200px;
}
src/views/appmanage/index.jsx
@@ -709,8 +709,9 @@
    if (item.typename === 'pc') {
      route = 'pcdesign'
    }
    let param = {...item, kei_no: selectApp.kei_no, remark: selectApp.remark, type: 'app'}
    window.open(window.location.href.replace(/#.+/ig, `#/${route}/${window.btoa(window.encodeURIComponent(JSON.stringify({...item, kei_no: selectApp.kei_no, remark: selectApp.remark, type: 'app'})))}`))
    window.open(window.location.href.replace(/#.+/ig, `#/${route}/${window.btoa(window.encodeURIComponent(JSON.stringify(param)))}`))
  }
  jumpMenu = (item) => {
src/views/imdesign/index.jsx
@@ -55,10 +55,9 @@
      if (param.type === 'app') {
        sessionStorage.setItem('appId', param.ID || '')
        sessionStorage.setItem('appName', param.remark || '')
        sessionStorage.setItem('lang', param.lang || 'zh-CN')
        sessionStorage.setItem('kei_no', param.kei_no || '')
        sessionStorage.setItem('role_type', param.role_type || 'true')
        sessionStorage.setItem('login_types', param.login_types || 'false')
        sessionStorage.setItem('typename', param.typename || 'mob')
        sessionStorage.setItem('adapter', param.adapter || '')
        sessionStorage.setItem('sysBgColor', param.sysBgColor || '#ffffff')
src/views/menudesign/index.jsx
@@ -639,7 +639,7 @@
      }
      tbs = tbs.map(tb => `'${tb}'`).join(';')
      let key = md5(config.uuid + window.GLOB.appkey + tbs.toLowerCase())
      let key = md5(config.uuid + tbs.toLowerCase())
      let url = ''
      if (config.tbkey === key) {
src/views/mobdesign/index.jsx
@@ -2,16 +2,16 @@
import { DndProvider } from 'react-dnd'
import { withRouter } from 'react-router'
import { is, fromJS } from 'immutable'
import moment from 'moment'
import HTML5Backend from 'react-dnd-html5-backend'
import { ConfigProvider, notification, Modal, Collapse, Switch, Button, message, Spin, Typography } from 'antd'
import { DoubleLeftOutlined, DoubleRightOutlined, HomeOutlined, LoginOutlined, RedoOutlined, ArrowLeftOutlined, EyeOutlined, EyeInvisibleOutlined } from '@ant-design/icons'
import moment from 'moment'
import md5 from 'md5'
import Api from '@/api'
import Utils, { setGLOBFuncs } from '@/utils/utils.js'
import zhCN from '@/locales/zh-CN/mob.js'
import enUS from '@/locales/en-US/mob.js'
import antdEnUS from 'antd/es/locale/en_US'
import antdZhCN from 'antd/es/locale/zh_CN'
import MKEmitter from '@/utils/events.js'
import MenuUtils from '@/utils/utils-custom.js'
@@ -33,6 +33,7 @@
const ViewNodes = asyncComponent(() => import('@/menu/viewnodes'))
const SourceWrap = asyncComponent(() => import('@/mob/modulesource'))
const Modulecell = asyncComponent(() => import('@/menu/modulecell'))
const TableNodes = asyncComponent(() => import('@/menu/tablenodes'))
const BgController = asyncComponent(() => import('@/pc/bgcontroller'))
const ReplaceField = asyncComponent(() => import('@/menu/replaceField'))
const SysInterface = asyncComponent(() => import('@/menu/sysinterface'))
@@ -61,7 +62,6 @@
class MobDesign extends Component {
  state = {
    localedict: sessionStorage.getItem('lang') !== 'en-US' ? antdZhCN : antdEnUS,
    dict: sessionStorage.getItem('lang') !== 'en-US' ? zhCN : enUS,
    loading: true,
    MenuId: '',
@@ -89,10 +89,9 @@
      if (param.type === 'app') {
        sessionStorage.setItem('appId', param.ID || '')
        sessionStorage.setItem('appName', param.remark || '')
        sessionStorage.setItem('lang', param.lang || 'zh-CN')
        sessionStorage.setItem('kei_no', param.kei_no || '')
        sessionStorage.setItem('role_type', param.role_type || 'true')
        sessionStorage.setItem('login_types', param.login_types || 'false')
        sessionStorage.setItem('typename', param.typename || 'mob')
        sessionStorage.setItem('adapter', param.adapter || '')
        sessionStorage.setItem('sysBgColor', param.sysBgColor || '#ffffff')
@@ -100,7 +99,6 @@
        sessionStorage.setItem('instantMessage', param.instantMessage || '')
        this.setState({
          localedict: sessionStorage.getItem('lang') !== 'en-US' ? antdZhCN : antdEnUS,
          dict: sessionStorage.getItem('lang') !== 'en-US' ? zhCN : enUS
        })
        this.getAppMessage(param.MenuID)
@@ -919,12 +917,16 @@
    })
  }
  getMenuMessage = () => {
  getMenuMessage = (tbs) => {
    const { config } = this.state
    
    let traversal = (components) => {
      let list = []
      components.forEach(item => {
        if (item.$tables) {
          tbs.push(...item.$tables)
        }
        let m = {
          key: item.uuid,
          title: item.name,
@@ -1320,10 +1322,50 @@
        config.enabled = false
      }
      let tbs = []
      let roleParam = {type: 'view', version: '1.0', key: config.uuid, title: config.MenuName, children: []}
      roleParam.children = this.getMenuMessage()
      roleParam.children = this.getMenuMessage(tbs)
      config.loginview = false
      config.tabview = false
      let arr = []
      tbs = tbs.filter(tb => {
        let _tb = tb.toLowerCase()
        if (arr.includes(_tb)) return false
        arr.push(_tb)
        return true
      })
      tbs.sort()
      if (tbs.length && sessionStorage.getItem('mk_tb_names')) {
        let names = sessionStorage.getItem('mk_tb_names')
        tbs = tbs.filter(tb => names.indexOf(',' + tb.toLowerCase() + ',') > -1)
      }
      tbs = tbs.map(tb => `'${tb}'`).join(';')
      let key = md5(config.uuid + sessionStorage.getItem('kei_no') + sessionStorage.getItem('typename') + sessionStorage.getItem('lang') + tbs.toLowerCase())
      let url = ''
      if (config.tbkey === key) {
        key = ''
      } else {
        let urlparam = {
          type: 'app',
          MenuID: config.uuid,
          ID: sessionStorage.getItem('appId') || '',
          remark: sessionStorage.getItem('appName') || '',
          lang: sessionStorage.getItem('lang') || '',
          kei_no: sessionStorage.getItem('kei_no') || '',
          typename: sessionStorage.getItem('typename') || '',
          adapter: sessionStorage.getItem('adapter') || '',
          sysBgColor: sessionStorage.getItem('sysBgColor') || '',
          MenuName: config.MenuName || '',
        }
        url = window.btoa(window.encodeURIComponent(JSON.stringify(urlparam)))
        config.tbkey = key
      }
      if (roleParam.children.length === 0) {
        roleParam.pass = true
@@ -1377,7 +1419,10 @@
        menus_rolelist: window.btoa(window.encodeURIComponent(JSON.stringify(roleParam))),
        LText: '',
        LTexttb: '',
        menus_used_list
        menus_used_list,
        debug_md5: key,
        debug_url: url,
        debug_list: window.btoa(tbs)
      }
      param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss')
@@ -1921,10 +1966,10 @@
  render () {
    const { viewType, localedict, comloading, loading, settingshow, controlshow, activeKey, dict, MenuId, config, menuloading, customComponents, adapters, eyeopen } = this.state
    const { viewType, comloading, loading, settingshow, controlshow, activeKey, dict, MenuId, config, menuloading, customComponents, adapters, eyeopen } = this.state
    return (
      <ConfigProvider locale={localedict}>
      <ConfigProvider locale={antdZhCN}>
        <div className={'mk-mob-view ' + viewType} id="mk-mob-design-view">
          <Header changeView={this.changeView}/>
          {loading ? <Spin className="view-spin" size="large" /> : null}
@@ -1979,6 +2024,7 @@
                <Button className="mk-border-purple" onClick={() => this.setState({eyeopen: !eyeopen})}>{!eyeopen ? <EyeOutlined /> : <EyeInvisibleOutlined />} 组件名</Button>
                <CreateView resetmenu={this.getAppMenus} />
                <PasteController insert={this.insert} />
                <TableNodes config={config} />
                <ViewNodes config={config} MenuId={MenuId}/>
                <SysInterface config={config} updateConfig={this.updateConfig}/>
                <PictureController/>
src/views/pcdesign/index.jsx
@@ -2,16 +2,17 @@
import { DndProvider } from 'react-dnd'
import { withRouter } from 'react-router'
import { is, fromJS } from 'immutable'
import moment from 'moment'
import HTML5Backend from 'react-dnd-html5-backend'
import { ConfigProvider, notification, Modal, Collapse, Switch, Button, message, Spin, Typography } from 'antd'
import { DoubleLeftOutlined, DoubleRightOutlined, HomeOutlined, LoginOutlined, RedoOutlined, ArrowLeftOutlined, EyeOutlined, EyeInvisibleOutlined } from '@ant-design/icons'
import moment from 'moment'
import md5 from 'md5'
import Api from '@/api'
import Utils, { setGLOBFuncs } from '@/utils/utils.js'
import zhCN from '@/locales/zh-CN/mob.js'
import enUS from '@/locales/en-US/mob.js'
import antdEnUS from 'antd/es/locale/en_US'
// import antdEnUS from 'antd/es/locale/en_US'
import antdZhCN from 'antd/es/locale/zh_CN'
import MKEmitter from '@/utils/events.js'
import MenuUtils from '@/utils/utils-custom.js'
@@ -31,6 +32,7 @@
const ViewNodes = asyncComponent(() => import('@/menu/viewnodes'))
const SourceWrap = asyncComponent(() => import('@/pc/modulesource'))
const Modulecell = asyncComponent(() => import('@/menu/modulecell'))
const TableNodes = asyncComponent(() => import('@/menu/tablenodes'))
const CreateView = asyncComponent(() => import('@/pc/createview'))
const BgController = asyncComponent(() => import('@/pc/bgcontroller'))
const Quotecomponent = asyncComponent(() => import('@/pc/quotecomponent'))
@@ -55,7 +57,6 @@
class MenuDesign extends Component {
  state = {
    localedict: sessionStorage.getItem('lang') !== 'en-US' ? antdZhCN : antdEnUS,
    dict: sessionStorage.getItem('lang') !== 'en-US' ? zhCN : enUS,
    loading: true,
    MenuId: '',
@@ -91,14 +92,12 @@
      if (param.type === 'app') {
        sessionStorage.setItem('appId', param.ID || '')
        sessionStorage.setItem('appName', param.remark || '')
        sessionStorage.setItem('lang', param.lang || 'zh-CN')
        sessionStorage.setItem('kei_no', param.kei_no || '')
        sessionStorage.setItem('role_type', param.role_type || 'true')
        sessionStorage.setItem('login_types', param.login_types || 'false')
        sessionStorage.setItem('sysBgColor', param.sysBgColor || '#ffffff')
        this.setState({
          localedict: sessionStorage.getItem('lang') !== 'en-US' ? antdZhCN : antdEnUS,
          dict: sessionStorage.getItem('lang') !== 'en-US' ? zhCN : enUS
        })
        this.getAppMessage(param.MenuID)
@@ -869,7 +868,7 @@
    })
  }
  getMenuMessage = () => {
  getMenuMessage = (tbs) => {
    const { config } = this.state
    let nodes = {type: 'view', version: '1.0', key: config.uuid, title: config.MenuName, children: []}
    let popviews = []
@@ -877,6 +876,10 @@
    let traversal = (components) => {
      let list = []
      components.forEach(item => {
        if (item.$tables) {
          tbs.push(...item.$tables)
        }
        let m = {
          key: item.uuid,
          title: item.name,
@@ -1204,11 +1207,50 @@
        config.enabled = false
      }
      let roleParam = this.getMenuMessage()
      let tbs = []
      let roleParam = this.getMenuMessage(tbs)
      let subMenus = this.getSubMenus()
      let menus_used_list = subMenus.map(m => `'${config.uuid}','${config.MenuName || ''}','${config.MenuNo || ''}','${m.MenuID}','${m.MenuName}'`).join(';')
      menus_used_list = window.btoa(window.encodeURIComponent(menus_used_list || 'del'))
      let arr = []
      tbs = tbs.filter(tb => {
        let _tb = tb.toLowerCase()
        if (arr.includes(_tb)) return false
        arr.push(_tb)
        return true
      })
      tbs.sort()
      if (tbs.length && sessionStorage.getItem('mk_tb_names')) {
        let names = sessionStorage.getItem('mk_tb_names')
        tbs = tbs.filter(tb => names.indexOf(',' + tb.toLowerCase() + ',') > -1)
      }
      tbs = tbs.map(tb => `'${tb}'`).join(';')
      let key = md5(config.uuid + sessionStorage.getItem('kei_no') + 'pc' + sessionStorage.getItem('lang') + tbs.toLowerCase())
      let url = ''
      if (config.tbkey === key) {
        key = ''
      } else {
        let urlparam = {
          type: 'app',
          MenuID: config.uuid,
          ID: sessionStorage.getItem('appId') || '',
          remark: sessionStorage.getItem('appName') || '',
          lang: sessionStorage.getItem('lang') || '',
          kei_no: sessionStorage.getItem('kei_no') || '',
          typename: 'pc',
          sysBgColor: sessionStorage.getItem('sysBgColor') || '',
          MenuName: config.MenuName || '',
        }
        url = window.btoa(window.encodeURIComponent(JSON.stringify(urlparam)))
        config.tbkey = key
      }
      let param = {
        func: 'sPC_TrdMenu_AddUpt',
@@ -1227,7 +1269,10 @@
        open_edition: config.open_edition,
        LText: '',
        LTexttb: '',
        menus_used_list
        menus_used_list,
        debug_md5: key,
        debug_url: url,
        debug_list: window.btoa(tbs)
      }
      param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss')
@@ -1830,10 +1875,10 @@
  }
  render () {
    const { localedict, loading, comloading, activeKey, settingshow, controlshow, dict, MenuId, config, menuloading, customComponents, eyeopen } = this.state
    const { loading, comloading, activeKey, settingshow, controlshow, dict, MenuId, config, menuloading, customComponents, eyeopen } = this.state
    return (
      <ConfigProvider locale={localedict}>
      <ConfigProvider locale={antdZhCN}>
        <div className={'mk-pc-view '} id="mk-pc-design-view">
          {loading ? <Spin className="view-spin" size="large" /> : null}
          <DndProvider backend={HTML5Backend}>
@@ -1886,6 +1931,7 @@
                <Button className="mk-border-purple" onClick={() => this.setState({eyeopen: !eyeopen})}>{!eyeopen ? <EyeOutlined /> : <EyeInvisibleOutlined />} 组件名</Button>
                <CreateView resetmenu={this.getAppMenus} />
                <PasteController insert={this.insert} />
                <TableNodes config={config} />
                <ViewNodes config={config} MenuId={MenuId}/>
                <SysInterface config={config} updateConfig={this.updateConfig}/>
                <PictureController/>