| | |
| | | if (_options.length) { |
| | | col.extends.forEach(n => { |
| | | record[n.value] = _options.map(o => o[n.key]).join(' / ') |
| | | |
| | | if (n.mutilLabel && !record[n.mutilLabel]) { |
| | | record[n.mutilLabel] = _options[_options.length - 1][n.key] |
| | | } |
| | | }) |
| | | } |
| | | } else { |
| | |
| | | } else if (openType === 'tab') { |
| | | reOptions.Ot = requireOptions.filter(op => ['notRequired', 'requiredSgl', 'requiredOnce'].includes(op.value)) |
| | | |
| | | if (Ot === 'notRequired') { |
| | | shows.push('sysId') |
| | | } |
| | | |
| | | if (shows.includes('linkmenu') && this.record.linkmenu[0] === 'multiMenu') { |
| | | shows.push('multiMenus') |
| | | } else if (this.record.sysId === 'js') { |
| | | shows.push('sign') |
| | | } |
| | | |
| | | reRequired.linkmenu = true |
| | | reTooltip.linkmenu = '' |
| | | } else if (openType === 'innerpage') { |
| | |
| | | |
| | | let id = values.linkmenu[values.linkmenu.length - 1] |
| | | |
| | | list.forEach(item => { |
| | | if (item.MenuID === id) { |
| | | values.MenuID = id |
| | | values.MenuName = item.MenuName |
| | | values.MenuNo = item.MenuNo |
| | | values.tabType = item.type |
| | | } |
| | | }) |
| | | if (id !== 'multiMenu') { |
| | | list.forEach(item => { |
| | | if (item.MenuID === id) { |
| | | values.MenuID = id |
| | | values.MenuName = item.MenuName |
| | | values.MenuNo = item.MenuNo |
| | | values.tabType = item.type |
| | | } |
| | | }) |
| | | delete values.multiMenus |
| | | } else { |
| | | values.multiMenus.forEach(menu => { |
| | | menu.sign = menu.sign || '' |
| | | |
| | | let _id = menu.menuId[menu.menuId.length - 1] |
| | | |
| | | list.forEach(item => { |
| | | if (item.MenuID === _id) { |
| | | menu.MenuID = _id |
| | | menu.MenuName = item.MenuName |
| | | menu.MenuNo = item.MenuNo |
| | | menu.tabType = item.type |
| | | } |
| | | }) |
| | | }) |
| | | } |
| | | } |
| | | } else if (values.OpenType === 'funcbutton' && values.funcType === 'expPdf') { |
| | | values.Ot = 'notRequired' |
| | |
| | | initVal: card.linkmenu || (isApp ? '' : []), |
| | | required: true, |
| | | extendName: 'MenuNo', |
| | | options: isApp ? appMenus : menulist |
| | | options: isApp ? appMenus : (menulist.length ? [...menulist, {value: 'multiMenu', label: '多菜单'}] : []) |
| | | }, |
| | | { |
| | | type: 'text', |
| | |
| | | }, |
| | | { |
| | | type: 'radio', |
| | | key: 'sysId', |
| | | label: '自定义ID', |
| | | initVal: card.sysId || '', |
| | | tooltip: '不选行按钮可在前端生成ID值(32位),作为后续菜单的BID,存在标记时,ID值后将拼接标记值。', |
| | | required: false, |
| | | options: [{ |
| | | value: '', |
| | | text: '空' |
| | | }, { |
| | | value: 'js', |
| | | text: '前端生成' |
| | | }] |
| | | }, |
| | | { |
| | | type: 'text', |
| | | key: 'sign', |
| | | label: '标记', |
| | | initVal: card.sign || '', |
| | | required: false |
| | | }, |
| | | { |
| | | type: 'table', |
| | | key: 'multiMenus', |
| | | label: '菜单列表', |
| | | initVal: card.multiMenus || [], |
| | | required: true, |
| | | actions: ['edit', 'del', 'add', 'move'], |
| | | columns: [ |
| | | { |
| | | title: '名称', |
| | | dataIndex: 'name', |
| | | inputType: 'text', |
| | | editable: true, |
| | | required: false, |
| | | width: '30%' |
| | | }, |
| | | { |
| | | title: '菜单', |
| | | dataIndex: 'menuId', |
| | | inputType: 'cascader', |
| | | editable: true, |
| | | required: true, |
| | | extends: [{key: 'label', value: 'label', mutilLabel: 'name'}], |
| | | width: '30%', |
| | | render: (text, record) => record.label, |
| | | options: menulist |
| | | }, |
| | | { |
| | | title: '标记', |
| | | dataIndex: 'sign', |
| | | inputType: 'text', |
| | | editable: true, |
| | | required: false, |
| | | width: '20%' |
| | | } |
| | | ] |
| | | }, |
| | | { |
| | | type: 'radio', |
| | | key: 'preHandle', |
| | | label: '自定义脚本', |
| | | initVal: card.preHandle || 'false', |
| | |
| | | initVal: card.linkmenu || [], |
| | | required: true, |
| | | extendName: 'MenuNo', |
| | | options: menulist |
| | | options: menulist.length ? [...menulist, {value: 'multiMenu', label: '多菜单'}] : [] |
| | | }, |
| | | { |
| | | type: 'textarea', |
| | |
| | | }, |
| | | { |
| | | type: 'radio', |
| | | key: 'sysId', |
| | | label: '自定义ID', |
| | | initVal: card.sysId || '', |
| | | tooltip: '不选行按钮可在前端生成ID值(32位),作为后续菜单的BID,存在标记时,ID值后将拼接标记值。', |
| | | required: false, |
| | | options: [{ |
| | | value: '', |
| | | text: '空' |
| | | }, { |
| | | value: 'js', |
| | | text: '前端生成' |
| | | }] |
| | | }, |
| | | { |
| | | type: 'text', |
| | | key: 'sign', |
| | | label: '标记', |
| | | initVal: card.sign || '', |
| | | required: false |
| | | }, |
| | | { |
| | | type: 'table', |
| | | key: 'multiMenus', |
| | | label: '菜单列表', |
| | | initVal: card.multiMenus || [], |
| | | required: true, |
| | | actions: ['edit', 'del', 'add', 'move'], |
| | | columns: [ |
| | | { |
| | | title: '名称', |
| | | dataIndex: 'name', |
| | | inputType: 'text', |
| | | editable: true, |
| | | required: false, |
| | | width: '30%' |
| | | }, |
| | | { |
| | | title: '菜单', |
| | | dataIndex: 'menuId', |
| | | inputType: 'cascader', |
| | | editable: true, |
| | | required: true, |
| | | extends: [{key: 'label', value: 'label', mutilLabel: 'name'}], |
| | | width: '30%', |
| | | render: (text, record) => record.label, |
| | | options: menulist |
| | | }, |
| | | { |
| | | title: '标记', |
| | | dataIndex: 'sign', |
| | | inputType: 'text', |
| | | editable: true, |
| | | required: false, |
| | | width: '20%' |
| | | } |
| | | ] |
| | | }, |
| | | { |
| | | type: 'radio', |
| | | key: 'preHandle', |
| | | label: '自定义脚本', |
| | | initVal: card.preHandle || 'false', |
| | |
| | | import React, {Component} from 'react' |
| | | import PropTypes from 'prop-types' |
| | | import { is, fromJS } from 'immutable' |
| | | import { Button, notification } from 'antd' |
| | | import { Button, notification, Dropdown } from 'antd' |
| | | |
| | | import MKEmitter from '@/utils/events.js' |
| | | import MkIcon from '@/components/mk-icon' |
| | | // import './index.scss' |
| | | |
| | | import './index.scss' |
| | | |
| | | class TabButton extends Component { |
| | | static propTpyes = { |
| | |
| | | const { btn, selectedData, BID } = this.props |
| | | const { disabled } = this.state |
| | | |
| | | if (disabled) return |
| | | if (disabled || btn.multiMenus) return |
| | | if (triggerId && btn.uuid !== triggerId) return |
| | | |
| | | if (type === 'linkbtn' && !btn.$toolbtn && !is(fromJS(selectedData || []), fromJS(record))) { |
| | |
| | | let ids = data.map(d => (d.$$uuid || '')) |
| | | ids = ids.filter(Boolean) |
| | | primaryId = ids.join(',') |
| | | } else if (btn.Ot === 'notRequired' && BID) { |
| | | primaryId = BID |
| | | } else if (btn.Ot === 'notRequired') { |
| | | if (btn.sysId === 'js') { |
| | | primaryId = (() => { |
| | | let uuid = [] |
| | | let timestamp = new Date().getTime() |
| | | let _options = '0123456789abcdefghigklmnopqrstuv' |
| | | for (let i = 0; i < 19; i++) { |
| | | uuid.push(_options.substr(Math.floor(Math.random() * 0x20), 1)) |
| | | } |
| | | uuid = timestamp + uuid.join('') |
| | | return uuid |
| | | })() |
| | | primaryId = primaryId + (btn.sign || '') |
| | | } else { |
| | | primaryId = BID || '' |
| | | } |
| | | } |
| | | |
| | | let newtab = {} |
| | |
| | | } |
| | | } |
| | | |
| | | triggerMenu = (tab) => { |
| | | const { btn, selectedData, BID } = this.props |
| | | |
| | | let data = selectedData || [] |
| | | |
| | | if (btn.Ot !== 'notRequired' && data.length === 0) { |
| | | // 需要选择行时,校验数据 |
| | | notification.warning({ |
| | | top: 92, |
| | | message: '请选择行!', |
| | | duration: 5 |
| | | }) |
| | | return false |
| | | } else if (btn.Ot === 'requiredSgl' && data.length !== 1) { |
| | | // 需要选择单行时,校验数据 |
| | | notification.warning({ |
| | | top: 92, |
| | | message: '请选择单行数据!', |
| | | duration: 5 |
| | | }) |
| | | return |
| | | } |
| | | |
| | | let primaryId = '' |
| | | |
| | | if (btn.Ot === 'requiredSgl') { |
| | | primaryId = data[0].$$uuid || '' |
| | | } else if (btn.Ot === 'requiredOnce') { |
| | | let ids = data.map(d => (d.$$uuid || '')) |
| | | ids = ids.filter(Boolean) |
| | | primaryId = ids.join(',') |
| | | } else if (btn.Ot === 'notRequired') { |
| | | if (btn.sysId === 'js') { |
| | | primaryId = (() => { |
| | | let uuid = [] |
| | | let timestamp = new Date().getTime() |
| | | let _options = '0123456789abcdefghigklmnopqrstuv' |
| | | for (let i = 0; i < 19; i++) { |
| | | uuid.push(_options.substr(Math.floor(Math.random() * 0x20), 1)) |
| | | } |
| | | uuid = timestamp + uuid.join('') |
| | | return uuid |
| | | })() |
| | | primaryId = primaryId + (tab.sign || '') |
| | | } else { |
| | | primaryId = BID || '' |
| | | } |
| | | } |
| | | |
| | | let menuId = tab.menuId.slice(-1)[0] |
| | | let menu = null |
| | | |
| | | if (window.GLOB.mkThdMenus.has(menuId)) { |
| | | menu = {...window.GLOB.mkThdMenus.get(menuId), param: { $BID: primaryId }} |
| | | } else if (tab.MenuID) { |
| | | menu = { |
| | | MenuID: tab.MenuID, |
| | | MenuName: tab.MenuName, |
| | | type: tab.tabType, |
| | | param: { $BID: primaryId } |
| | | } |
| | | } |
| | | |
| | | if (!menu) { |
| | | notification.warning({ |
| | | top: 92, |
| | | message: '菜单已删除或没有访问权限!', |
| | | duration: 5 |
| | | }) |
| | | return |
| | | } |
| | | |
| | | |
| | | if (btn.openTab === 'view') { |
| | | window.open('#/view/' + menu.MenuID + '/' + primaryId) |
| | | } else { |
| | | MKEmitter.emit('modifyTabs', menu, true) |
| | | |
| | | MKEmitter.emit('openNewTab') |
| | | } |
| | | |
| | | if (window.GLOB.systemType === 'production') { |
| | | MKEmitter.emit('queryTrigger', {menuId: btn.uuid, name: '标签页'}) |
| | | } |
| | | } |
| | | |
| | | render() { |
| | | const { btn, name } = this.props |
| | | const { disabled, hidden } = this.state |
| | |
| | | label = <span>{btn.icon ? <MkIcon style={{marginRight: '8px'}} type={btn.icon} /> : ''}{name || btn.label}</span> |
| | | } |
| | | |
| | | if (btn.multiMenus && !disabled) { |
| | | return (<Dropdown |
| | | overlay={<div className="mk-tab-dropdown-wrap">{ |
| | | btn.multiMenus.map(tab => <div key={tab.uuid} onClick={() => this.triggerMenu(tab)}>{tab.name}</div>) |
| | | }</div>} |
| | | trigger={['hover']} |
| | | > |
| | | <Button |
| | | type="link" |
| | | title={btn.show === 'icon' ? btn.label : ''} |
| | | style={btn.style || null} |
| | | className={btn.$toolbtn ? (btn.hover || '') : ''} |
| | | >{label}</Button> |
| | | </Dropdown>) |
| | | } |
| | | |
| | | return ( |
| | | <Button |
| | | type="link" |
| | |
| | | .mk-tab-dropdown-wrap { |
| | | box-shadow: 0 0 2px #bcbcbc; |
| | | background: #ffffff; |
| | | min-width: 85px; |
| | | border-radius: 2px; |
| | | |
| | | div { |
| | | height: 32px; |
| | | line-height: 32px; |
| | | padding: 0 15px; |
| | | color: rgba(0, 0, 0, 0.65); |
| | | background: #ffffff; |
| | | cursor: pointer; |
| | | } |
| | | } |