From db4ef847383cf2bb24fd242ff46a211ee0459e7a Mon Sep 17 00:00:00 2001 From: king <18310653075@163.com> Date: 星期二, 20 六月 2023 00:09:31 +0800 Subject: [PATCH] Merge branch 'develop' --- src/tabviews/zshare/topSearch/mkCheckCard/index.jsx | 336 +++++++++++++++++++++++++ src/templates/zshare/modalform/fieldtable/index.jsx | 20 + src/tabviews/zshare/topSearch/index.jsx | 44 +++ src/templates/zshare/formconfig.jsx | 41 ++ src/templates/zshare/modalform/datatable/index.jsx | 13 src/tabviews/custom/components/chart/antv-G6/index.jsx | 87 ++++++ src/tabviews/zshare/topSearch/mkCheckCard/index.scss | 185 ++++++++++++++ src/utils/utils.js | 2 src/assets/css/main.scss | 6 src/templates/sharecomponent/searchcomponent/searchform/index.jsx | 18 10 files changed, 727 insertions(+), 25 deletions(-) diff --git a/src/assets/css/main.scss b/src/assets/css/main.scss index a822a26..fca5df4 100644 --- a/src/assets/css/main.scss +++ b/src/assets/css/main.scss @@ -513,4 +513,10 @@ .ant-col.ant-col-0 { display: inline-block; +} + +.ant-dropdown { + .ant-dropdown-menu-item:hover, .ant-dropdown-menu-submenu-title:hover { + background-color: var(--mk-sys-color1); + } } \ No newline at end of file diff --git a/src/tabviews/custom/components/chart/antv-G6/index.jsx b/src/tabviews/custom/components/chart/antv-G6/index.jsx index 31417fb..f481f2e 100644 --- a/src/tabviews/custom/components/chart/antv-G6/index.jsx +++ b/src/tabviews/custom/components/chart/antv-G6/index.jsx @@ -814,6 +814,8 @@ } data = [] + mkgraph = null + selectedId = '' UNSAFE_componentWillMount () { const { config, data, initdata } = this.props @@ -1183,10 +1185,20 @@ _options.push(_item) }) - + root.nodeNumber = 0 root = this.getTree(root, _options, root) root.children = root.children || [] + + if (root.selectedItem) { + let option = {...root.selectedItem} + setTimeout(() => { + MKEmitter.emit('resetSelectLine', config.uuid, option.id, option) + }, 20) + delete root.selectedItem + } else { + this.selectedId = '' + } if (plot.subtype === 'mindmap') { root.type = 'dice-mind-map-root' @@ -1255,6 +1267,12 @@ options = options.filter(option => { if (option.$parentId === parent.id) { delete option.$parentId + + if (this.selectedId && option.id === this.selectedId) { + root.selectedItem = {...option} + option.selected = true + } + parent.children.push(option) root.nodeNumber++ @@ -1278,19 +1296,22 @@ } handleData = () => { - let _element = document.getElementById(this.state.chartId) - if (_element) { - _element.innerHTML = '' - } + const { config } = this.state - setTimeout(() => { + MKEmitter.emit('resetSelectLine', config.uuid, '', '') + + if (this.mkgraph) { + this.mkgraph.clear() + this.resetrender() + } else { this.viewrender() - }, 100) + } } viewrender = () => { const { plot } = this.state + this.selectedId = '' if (this.data.length === 0) { this.setState({empty: true}) } else { @@ -1302,6 +1323,44 @@ this.indentrender() } else if (plot.subtype === 'kapmap') { this.kapmaprender() + } + } + } + + resetrender = () => { + const { plot } = this.state + + if (this.data.length === 0) { + this.setState({empty: true}) + this.selectedId = '' + } else { + this.setState({empty: false}) + + const data = this.getdata() + if (plot.subtype === 'mindmap') { + this.mkgraph.data(data) + + this.mkgraph.render() + + const width = this.wrap.scrollWidth - 30 + + if (plot.collapsed === 'true' && plot.dirField) { + this.mkgraph.zoomTo(1, { x: width / 2, y: plot.height / 2 }) + } else if (plot.collapsed === 'true' || data.nodeNumber < 5) { + this.mkgraph.zoomTo(1, { x: 0, y: plot.height / 2 }) + } + } else if (plot.subtype === 'indentTree') { + this.mkgraph.data(dataIndTransform(data)) + + this.mkgraph.render() + } else if (plot.subtype === 'kapmap') { + this.mkgraph.data(data) + this.mkgraph.render() + this.mkgraph.fitView() + + if (plot.collapsed === 'true' || data.nodeNumber < 5) { + this.mkgraph.zoomTo(1, { x: 0, y: plot.height / 2 }) + } } } } @@ -1364,6 +1423,8 @@ if (plot.collapsed === 'true' || data.nodeNumber < 5) { graph.zoomTo(1, { x: 0, y: plot.height / 2 }) } + + this.mkgraph = graph } indentrender = () => { @@ -1425,6 +1486,8 @@ tree.data(dataIndTransform(data)) tree.render() + + this.mkgraph = tree } /** @@ -1487,6 +1550,8 @@ } else if (plot.collapsed === 'true' || data.nodeNumber < 5) { tree.zoomTo(1, { x: 0, y: plot.height / 2 }) } + + this.mkgraph = tree } handleClick = (data = null) => { @@ -1555,7 +1620,13 @@ MKEmitter.emit('modifyTabs', newtab, true) } else { - MKEmitter.emit('resetSelectLine', config.uuid, (data ? data.$$uuid : ''), data) + if (data) { + this.selectedId = data.$$uuid || '' + MKEmitter.emit('resetSelectLine', config.uuid, data.$$uuid || '', data) + } else { + this.selectedId = '' + MKEmitter.emit('resetSelectLine', config.uuid, '', '') + } } } diff --git a/src/tabviews/zshare/topSearch/index.jsx b/src/tabviews/zshare/topSearch/index.jsx index bb8561d..bdaf619 100644 --- a/src/tabviews/zshare/topSearch/index.jsx +++ b/src/tabviews/zshare/topSearch/index.jsx @@ -15,7 +15,7 @@ import './index.scss' const MutilForm = asyncSpinComponent(() => import('./advanceform')) -const MKCheckCard = asyncComponent(() => import('@/tabviews/zshare/mutilform/mkCheckCard')) +const MKCheckCard = asyncComponent(() => import('./mkCheckCard')) const MKCheck = asyncComponent(() => import('@/tabviews/zshare/mutilform/mkCheck')) const MKSwitch = asyncComponent(() => import('@/tabviews/zshare/mutilform/mkSwitch')) const MKSelect = asyncComponent(() => import('./mkSelect')) @@ -156,6 +156,9 @@ // 鏁版嵁婧愭煡璇㈣鍙� if (item.resourceType === '1' && item.dataSource) { + if (item.multiple === 'dropdown') { + item.parentField = 'pid' + } let _option = Utils.getSelectQueryOptions(item) if (window.GLOB.debugger === true || (window.debugger === true && options.sysType !== 'cloud')) { @@ -178,6 +181,10 @@ } } item.oriOptions = fromJS(item.options).toJS() + + if (item.type === 'checkcard' && item.multiple === 'dropdown' && item.resourceType === '0') { + this.resetCheckcard(item) + } } fieldMap.set(item.field, item) @@ -223,6 +230,37 @@ this.improveSearch(mainItems, localItems) } }) + } + + resetCheckcard = (item) => { + let _options = [] + let _others = [] + item.oriOptions.forEach(op => { + if (op.pid === item.mark) { + _options.push(op) + } else { + _others.push(op) + } + }) + + _options = _options.map(op => { + op.children = [] + + _others = _others.filter(cell => { + if (cell.pid === op.$value) { + op.children.push(cell) + return false + } + return true + }) + + op.subIds = op.children.map(cell => cell.$value) + + return op + }) + + item.oriOptions = _options + item.options = _options } // 鏌ヨ涓嬫媺鑿滃崟 @@ -432,6 +470,10 @@ }) item.oriOptions = [...item.oriOptions, ...options] + + if (item.type === 'checkcard' && item.multiple === 'dropdown') { + this.resetCheckcard(item) + } } if (item.linkField) { diff --git a/src/tabviews/zshare/topSearch/mkCheckCard/index.jsx b/src/tabviews/zshare/topSearch/mkCheckCard/index.jsx new file mode 100644 index 0000000..2d0caf5 --- /dev/null +++ b/src/tabviews/zshare/topSearch/mkCheckCard/index.jsx @@ -0,0 +1,336 @@ +import React, {Component} from 'react' +import PropTypes from 'prop-types' +import { is, fromJS } from 'immutable' +import { Col, Row, Dropdown, Menu } from 'antd' +import { CheckOutlined } from '@ant-design/icons' + +import MKEmitter from '@/utils/events.js' +import './index.scss' + +class MKCheckCard extends Component { + static propTpyes = { + config: PropTypes.object, + onChange: PropTypes.func + } + + state = { + selectKeys: null, + config: null, + options: [] + } + + UNSAFE_componentWillMount() { + let config = fromJS(this.props.config).toJS() + + let selectKeys = config.initval + let initlength = 0 + if (config.multiple === 'true') { + selectKeys = config.initval ? config.initval.split(',') : [] + initlength = selectKeys.length + selectKeys = this.filterVals(config.options, selectKeys) + } + + if (!config.selectStyle && config.backgroundColor) { + config.selectStyle = 'custom' + } else if (!config.selectStyle) { + config.selectStyle = 'background' + } + + if (config.display === 'picture' && !config.picratio) { // 鍏煎鏃ф暟鎹� + config.picratio = config.ratio || '1:1' + } + + config.selectClass = ` mk-${config.selectStyle} ` + config.fields = config.fields || [] + + this.setState({ + config: config, + options: fromJS(config.options).toJS(), + selectKeys: selectKeys + }, () => { + if (config.multiple === 'true' && selectKeys.length < initlength) { + this.props.onChange(selectKeys.join(',')) + } + }) + } + + componentDidMount () { + const { config } = this.state + + if (config.linkField) { + MKEmitter.addListener('mkFP', this.mkFormHandle) + } + } + + shouldComponentUpdate (nextProps, nextState) { + return !is(fromJS(this.state), fromJS(nextState)) + } + + UNSAFE_componentWillReceiveProps (nextProps) { + const { config, selectKeys } = this.state + + if (!is(fromJS(config.oriOptions), fromJS(nextProps.config.oriOptions))) { + if (config.multiple === 'true') { + let keys = this.filterVals(nextProps.config.options, fromJS(selectKeys).toJS()) + if (keys.length < selectKeys.length) { + this.setState({ + selectKeys: keys + }, () => { + this.props.onChange(keys.join(',')) + }) + } + } + + this.setState({ + config: {...config, oriOptions: nextProps.config.oriOptions}, + options: fromJS(nextProps.config.options).toJS() + }) + } + } + + componentWillUnmount () { + this.setState = () => { + return + } + MKEmitter.removeListener('mkFP', this.mkFormHandle) + } + + filterVals = (options, vals) => { + if (options.length === 0 || vals.length === 0) return vals + + let ops = options.map(item => item.$value) + + vals = vals.filter(val => ops.includes(val)) + + return vals + } + + mkFormHandle = (uuid, parentId, level) => { + if (uuid !== this.state.config.uuid) return + + const { config } = this.state + + let options = config.oriOptions.filter(option => option.ParentID === parentId) + + if (config.multiple === 'true') { + this.setState({ + options, + selectKeys: [] + }) + this.props.onChange('') + } else { + let _option = options[0] ? options[0] : null + let val = _option ? _option.$value : '' + + this.setState({ + options, + selectKeys: val + }) + + let other = {} + + if (config.subFields && _option) { + config.subFields.forEach((n, i) => { + other[n.field] = _option[n.field] + setTimeout(() => { + MKEmitter.emit('mkFC', 'input', n.uuid, _option[n.field]) + }, i * 5) + }) + } + + this.props.onChange(val, other) + + if (level < 7 && config.linkFields) { + config.linkFields.forEach((m, i) => { + setTimeout(() => { + MKEmitter.emit('mkFP', m.uuid, val, level + 1) + }, (i + 1) * 70) + }) + } + } + } + + changeCard = (item) => { + const { selectKeys, config } = this.state + + if (config.multiple === 'true') { + let keys = [] + if (selectKeys.includes(item.$value)) { + keys = selectKeys.filter(key => key !== item.$value) + } else { + keys = [...selectKeys, item.$value] + } + + this.setState({ + selectKeys: keys + }, () => { + this.props.onChange(keys.join(',')) + }) + } else if (selectKeys !== item.$value) { + let other = {} + config.subFields && config.subFields.forEach((n, i) => { + other[n.field] = item[n.field] + setTimeout(() => { + MKEmitter.emit('mkFC', 'input', n.uuid, item[n.field]) + }, i * 5) + }) + config.linkFields && config.linkFields.forEach((m, i) => { + setTimeout(() => { + MKEmitter.emit('mkFP', m.uuid, item.$value, 0) + }, (i + 1) * 100) + }) + + this.setState({ + selectKeys: item.$value + }, () => { + this.props.onChange(item.$value, other) + }) + } else { + let other = {} + config.linkFields && config.linkFields.forEach((m, i) => { + setTimeout(() => { + MKEmitter.emit('mkFP', m.uuid, '', 0) + }, (i + 1) * 100) + }) + + this.setState({ + selectKeys: '' + }, () => { + this.props.onChange('', other) + }) + } + } + + getCards = () => { + const { selectKeys, options, config } = this.state + const { display, width, fields, picratio, multiple, backgroundColor, selectStyle, selectClass } = config + + if (options.length === 0) { + return null + } else if (display === 'color') { + return options.map(item => { + let _active = false + if (multiple === 'true') { + _active = selectKeys.includes(item.$value) + } else { + _active = selectKeys === item.$value + } + + return <Col span={width} key={item.key}> + <div className={'card-color-cell' + (_active ? ' active' : '')} style={{background: item.$color}} onClick={() => this.changeCard(item)}> + {fields.map(col => { + return <span className="content-line" key={col.key} style={{color: col.color, fontSize: col.fontSize + 'px', height: col.fontSize * 1.5 + 'px', textAlign: col.align}}>{item[col.field]}</span> + })} + <CheckOutlined /> + </div> + </Col> + }) + } else if (display === 'picture') { + let paddingTop = '100%' + if (picratio === '4:3') { + paddingTop = '75%' + } else if (picratio === '3:2') { + paddingTop = '66.7%' + } else if (picratio === '16:9') { + paddingTop = '56.25%' + } + + return options.map(item => { + let _active = false + if (multiple === 'true') { + _active = selectKeys.includes(item.$value) + } else { + _active = selectKeys === item.$value + } + + return <Col span={width} key={item.key}> + <div className={'card-pic-cell ' + (_active ? 'active' : '')} onClick={() => this.changeCard(item)} style={{paddingTop, backgroundImage: `url(${item.$url})`}}> + <div className="content-wrap"> + <div className="content-center"> + {fields.map(col => { + return <span className="content-line" key={col.key} style={{color: col.color, fontSize: col.fontSize + 'px', height: col.fontSize * 1.5 + 'px', textAlign: col.align}}>{item[col.field]}</span> + })} + </div> + <CheckOutlined /> + </div> + </div> + </Col> + }) + } else { + let _style = selectStyle === 'custom' ? {backgroundColor} : null + + if (multiple === 'dropdown') { + return options.map(item => { + if (item.children.length) { + return <Col span={width} key={item.key}> + <Dropdown + overlayClassName="mk-search-card" + overlay={ + <Menu> + {item.children.map((cell, index) => (<Menu.Item className={selectKeys === cell.$value ? ' active' : ''} key={index} onClick={() => this.changeCard(cell)}>{cell[fields[0].field]}</Menu.Item>))} + </Menu>} + placement="bottomCenter" + > + <div className={'card-cell' + (selectKeys && (selectKeys === item.$value || item.subIds.includes(selectKeys)) ? ' active' : '') + selectClass} onClick={() => this.changeCard(item)}> + <div className="bg-mask" style={_style}></div> + {fields.map(col => { + return <span className="content-line" key={col.key} style={{color: col.color, fontSize: col.fontSize + 'px', height: col.fontSize * 1.5 + 'px', textAlign: col.align}}>{item[col.field]}</span> + })} + </div> + </Dropdown> + </Col> + + } else { + return <Col span={width} key={item.key}> + <div className={'card-cell' + (selectKeys === item.$value ? ' active' : '') + selectClass} onClick={() => this.changeCard(item)}> + <div className="bg-mask" style={_style}></div> + {fields.map(col => { + return <span className="content-line" key={col.key} style={{color: col.color, fontSize: col.fontSize + 'px', height: col.fontSize * 1.5 + 'px', textAlign: col.align}}>{item[col.field]}</span> + })} + </div> + </Col> + } + }) + } else { + return options.map(item => { + let _active = false + if (multiple === 'true') { + _active = selectKeys.includes(item.$value) + } else { + _active = selectKeys === item.$value + } + + return <Col span={width} key={item.key}> + <div className={'card-cell' + (_active ? ' active' : '') + selectClass} onClick={() => this.changeCard(item)}> + <div className="bg-mask" style={_style}></div> + {fields.map(col => { + return <span className="content-line" key={col.key} style={{color: col.color, fontSize: col.fontSize + 'px', height: col.fontSize * 1.5 + 'px', textAlign: col.align}}>{item[col.field]}</span> + })} + </div> + </Col> + }) + } + } + } + + render() { + const { config, options } = this.state + + let extend = '' + + if (options.length * config.width > 24) { + extend += ' mutile-line' + } + if (config.border === 'hide') { + extend += ' border-hide' + } + + return ( + <div className={'check-card-form-wrap ' + extend}> + <Row gutter={12}>{this.getCards()}</Row> + </div> + ) + } +} + +export default MKCheckCard \ No newline at end of file diff --git a/src/tabviews/zshare/topSearch/mkCheckCard/index.scss b/src/tabviews/zshare/topSearch/mkCheckCard/index.scss new file mode 100644 index 0000000..a566ad8 --- /dev/null +++ b/src/tabviews/zshare/topSearch/mkCheckCard/index.scss @@ -0,0 +1,185 @@ +.check-card-form-wrap { + margin-top: 5px; + .card-cell { + position: relative; + border: 1px solid #bcbcbc; + background: #ffffff; + border-radius: 4px; + padding: 4px 6px; + margin-bottom: 2px; + line-height: 1.5; + transition: all 0.3s; + cursor: pointer; + + .bg-mask { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + opacity: 0.6; + border-radius: 4px; + background-color: transparent; + transition: opacity 0.3s; + } + } + + .content-line { + display: block; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + position: relative; + z-index: 1; + line-height: 1.5; + } + .card-cell.mk-background.active { + border-color: var(--mk-sys-color); + background: var(--mk-sys-color); + span { + color: #ffffff!important; + } + } + .card-cell.mk-background.active::after { + content: ' '; + position: absolute; + display: table; + border: 2px solid #ffffff; + border-top: 0; + border-left: 0; + bottom: 0; + right: 10px; + width: 6px; + height: 12px; + transform: rotate(45deg) scale(1) translate(-50%, -50%); + } + .card-cell.mk-font.active { + border-color: var(--mk-sys-color); + span { + color: var(--mk-sys-color)!important; + } + } + .card-cell.mk-custom { + border-color: transparent; + } + .card-cell.mk-custom.active { + .bg-mask { + opacity: 1; + } + } + .card-pic-cell { + position: relative; + border: 1px solid #e8e8e8; + border-radius: 4px; + background-size: cover; + background-position: center; + margin-bottom: 2px; + line-height: 1.5; + cursor: pointer; + transition: all 0.3s; + + .content-wrap { + position: absolute; + top: 6px; + left: 6px; + right: 6px; + bottom: 6px; + .content-center { + position: relative; + top: 50%; + transform: translate(0px, -50%); + } + } + .anticon-check { + display: none; + position: absolute; + color: #ffffff; + border-radius: 20px; + padding: 3px; + width: 18px; + height: 18px; + font-size: 12px; + right: -2px; + bottom: -2px; + background: var(--mk-sys-color); + } + } + + .card-color-cell { + position: relative; + border: 1px solid transparent; + border-radius: 4px; + padding: 4px 6px; + margin-bottom: 2px; + min-height: 32px; + cursor: pointer; + + .anticon-check { + display: none; + position: absolute; + color: #ffffff; + border-radius: 20px; + padding: 3px; + width: 18px; + height: 18px; + font-size: 12px; + right: 0px; + bottom: 0px; + background: var(--mk-sys-color); + } + } + + .card-pic-cell.active, .card-color-cell.active { + .anticon-check { + display: inline-block; + } + } +} + +.check-card-form-wrap.mutile-line { + .card-cell { + margin-bottom: 12px; + } + .card-pic-cell { + margin-bottom: 12px; + } + .card-color-cell { + margin-bottom: 12px; + } +} + +.check-card-form-wrap { + .card-cell.mk-background:hover { + border-color: var(--mk-sys-color); + background: var(--mk-sys-color); + span { + color: #ffffff!important; + } + } + .card-cell.mk-font:hover { + border-color: var(--mk-sys-color); + span { + color: var(--mk-sys-color)!important; + } + } + + .card-cell.mk-custom:not(.active):hover { + .bg-mask { + opacity: 0.8; + } + } + .card-pic-cell:hover { + border-color: var(--mk-sys-color); + box-shadow: 0px 0px 4px var(--mk-sys-color); + } +} +.check-card-form-wrap.border-hide { + .card-cell { + border: 0px; + } +} +.mk-search-card { + .ant-dropdown-menu-item.active { + color: var(--mk-sys-color); + } +} \ No newline at end of file diff --git a/src/templates/sharecomponent/searchcomponent/searchform/index.jsx b/src/templates/sharecomponent/searchcomponent/searchform/index.jsx index 67cb5a2..62e41e1 100644 --- a/src/templates/sharecomponent/searchcomponent/searchform/index.jsx +++ b/src/templates/sharecomponent/searchcomponent/searchform/index.jsx @@ -119,11 +119,7 @@ } state = { - openType: null, // 鎼滅储鏉′欢鏄剧ず绫诲瀷 - resourceType: null, // 涓嬫媺鎼滅储鏃讹紝閫夐」鏉ユ簮绫诲瀷 - formlist: null, // 琛ㄥ崟 - cFields: [], - textTooltip: '瀛楁鍚嶅彲浠ヤ娇鐢ㄩ�楀彿鍒嗛殧锛岃繘琛岀患鍚堟悳绱�', + formlist: null } record = {} @@ -213,6 +209,9 @@ } if (this.record.selectStyle === 'custom') { shows.push('backgroundColor') + } + if (this.record.multiple === 'dropdown') { + shows.push('mark') } } shows.push('linkField') @@ -487,7 +486,7 @@ <Input placeholder="" autoComplete="off" onPressEnter={this.handleSubmit} /> </AutoComplete> } else { - content = <Input placeholder="" autoComplete="off" onPressEnter={this.handleSubmit} /> + content = <Input placeholder="" autoComplete="off" onPressEnter={this.handleSubmit} onChange={(e) => {this.optionChange(item.key, e.target.value)}}/> } } else if (item.type === 'number') { rules = [ @@ -554,7 +553,7 @@ if (this.record.linkField) { type = 'link' } - content = <DataTable type={type} display={this.record.display} linkSubFields={[]} transfield={{}} fields={this.record.fields || []} onChange={this.changeOptions}/> + content = <DataTable type={type} multiple={this.record.multiple} display={this.record.display} linkSubFields={[]} transfield={{}} fields={this.record.fields || []} onChange={this.changeOptions}/> } } else if (item.type === 'fields') { span = 24 @@ -665,10 +664,15 @@ values.options = [] } } else if (values.type === 'checkcard') { + if (values.multiple === 'dropdown' && values.display !== 'text') { + values.multiple = 'false' + } + if (values.resourceType === '0') { values.options = values.options || [] values.options = values.options.map(m => { m.ParentID = m.ParentID || '' + m.pid = m.pid || '' return m }) diff --git a/src/templates/zshare/formconfig.jsx b/src/templates/zshare/formconfig.jsx index d3ee589..0984554 100644 --- a/src/templates/zshare/formconfig.jsx +++ b/src/templates/zshare/formconfig.jsx @@ -386,6 +386,30 @@ }) } + let muloptions = [{ + value: 'false', + text: '鍗曢��' + }, { + value: 'true', + text: '澶氶��' + }, { + value: 'dropdown', + text: '涓嬫媺鑿滃崟' + }] + + if (appType !== '') { + muloptions = [{ + value: 'false', + text: '鍗曢��' + }, { + value: 'true', + text: '澶氶��' + }] + if (card.multiple === 'dropdown') { + card.multiple = 'false' + } + } + return [ { type: 'text', @@ -573,14 +597,9 @@ key: 'multiple', label: '閫夋嫨褰㈠紡', initVal: card.multiple || 'false', + tooltip: appType === '' ? '浣跨敤涓嬫媺鑿滃崟鏃讹紝閫夐」浼氫緷鎹� pid 缁勭粐鏁版嵁鐨勪笂涓嬬骇鍏崇郴锛屼簩绾ч�夐」浼氫笅鎷夊睍绀恒�傛敞锛�1銆佹樉绀轰负鏂囨湰鏃舵湁鏁堬紱2銆佷娇鐢ㄦ暟鎹簮璇疯繑鍥� pid 瀛楁銆�' : '', required: true, - options: [{ - value: 'false', - text: '鍗曢��' - }, { - value: 'true', - text: '澶氶��' - }] + options: muloptions }, { type: 'select', @@ -900,6 +919,14 @@ required: true }, { + type: 'text', + key: 'mark', + label: '椤剁骇鏍囪瘑', + initVal: card.mark || '', + tooltip: 'pid涓庨《绾ф爣璇嗙浉鍚屾椂锛岃涓洪《绾ц妭鐐广��', + required: false + }, + { type: 'multiselect', key: 'blacklist', label: '榛戝悕鍗�', diff --git a/src/templates/zshare/modalform/datatable/index.jsx b/src/templates/zshare/modalform/datatable/index.jsx index 75a9a67..8f3e62b 100644 --- a/src/templates/zshare/modalform/datatable/index.jsx +++ b/src/templates/zshare/modalform/datatable/index.jsx @@ -174,6 +174,7 @@ !is(fromJS(this.props.fields), fromJS(nextProps.fields)) || !is(fromJS(this.props.linkSubFields), fromJS(nextProps.linkSubFields)) || this.props.display !== nextProps.display || + (nextProps.multiple && this.props.multiple !== nextProps.multiple) || this.props.type !== nextProps.type ) { this.setState({editingKey: ''}, () => { @@ -185,9 +186,9 @@ } getCloumns = () => { - const { display, fields, linkSubFields, transfield, type } = this.props + const { display, fields, linkSubFields, transfield, type, multiple } = this.props let columns = [] - let keys = ['ParentID'] + let keys = ['ParentID', 'pid'] if (display === 'picture') { columns.push({ @@ -241,6 +242,14 @@ editable: true, }) + if (multiple === 'dropdown' && display === 'text') { + columns.unshift({ + title: 'pid', + dataIndex: 'pid', + editable: true, + }) + } + if (type === 'link') { columns.unshift({ title: 'ParentID', diff --git a/src/templates/zshare/modalform/fieldtable/index.jsx b/src/templates/zshare/modalform/fieldtable/index.jsx index d9100da..3b607cf 100644 --- a/src/templates/zshare/modalform/fieldtable/index.jsx +++ b/src/templates/zshare/modalform/fieldtable/index.jsx @@ -127,6 +127,26 @@ this.setState({loading: false}) }) return + } else if (fields.filter(f => f.toLowerCase() === 'parentid').length > 0) { + notification.warning({ + top: 92, + message: '瀛楁鍚嶄笉鍙娇鐢╬arentid锛�', + duration: 5 + }) + this.setState({loading: true}, () => { + this.setState({loading: false}) + }) + return + } else if (fields.filter(f => f.toLowerCase() === 'pid').length > 0) { + notification.warning({ + top: 92, + message: '瀛楁鍚嶄笉鍙娇鐢╬id锛�', + duration: 5 + }) + this.setState({loading: true}, () => { + this.setState({loading: false}) + }) + return } this.setState({ data }, () => { diff --git a/src/utils/utils.js b/src/utils/utils.js index 5f9d942..c62e490 100644 --- a/src/utils/utils.js +++ b/src/utils/utils.js @@ -800,6 +800,8 @@ arrfield.push(item.urlField) } else if (item.colorField) { arrfield.push(item.colorField) + } else if (item.parentField) { + arrfield.push(item.parentField) } } -- Gitblit v1.8.0