| | |
| | | } |
| | | |
| | | render() { |
| | | const { wrap, MenuType } = this.props |
| | | const { wrap, MenuType, config } = this.props |
| | | const { getFieldDecorator } = this.props.form |
| | | const { roleList } = this.state |
| | | |
| | |
| | | )} |
| | | </Form.Item> |
| | | </Col> |
| | | <Col span={12}> |
| | | <Form.Item label={ |
| | | <Tooltip placement="topLeft" title="双击表格中行,触发的按钮。"> |
| | | <Icon type="question-circle" /> |
| | | 双击事件 |
| | | </Tooltip> |
| | | }> |
| | | {getFieldDecorator('doubleClick', { |
| | | initialValue: wrap.doubleClick || '' |
| | | })( |
| | | <Select allowClear> |
| | | {config.action.map(option => |
| | | <Select.Option key={option.uuid} value={option.uuid}>{option.label}</Select.Option> |
| | | )} |
| | | </Select> |
| | | )} |
| | | </Form.Item> |
| | | </Col> |
| | | {MenuType !== 'billPrint' ? <Col span={12}> |
| | | <Form.Item label="黑名单"> |
| | | {getFieldDecorator('blacklist', { |
| | |
| | | } |
| | | |
| | | render() { |
| | | let { lineMarks, data, className, ...resProps } = this.props |
| | | let { lineMarks, onDoubleClick, data, className, ...resProps } = this.props |
| | | let style = {} |
| | | |
| | | if (lineMarks && lineMarks.length > 0) { |
| | |
| | | }) |
| | | } |
| | | |
| | | return <tr {...resProps} className={className} style={style}/> |
| | | return <tr {...resProps} onDoubleClick={onDoubleClick} className={className} style={style}/> |
| | | } |
| | | } |
| | | |
| | |
| | | if (col.linkThdMenu || col.linkurl) { |
| | | content = ( |
| | | <div> |
| | | <div className="link-menu" onDoubleClick={() => this.triggerLink(col, record)}></div> |
| | | <div className="link-menu" onDoubleClick={(e) => this.triggerLink(e, col, record)}></div> |
| | | {content} |
| | | </div> |
| | | ) |
| | |
| | | if (col.linkThdMenu || col.linkurl) { |
| | | content = ( |
| | | <div> |
| | | <div className="link-menu" onDoubleClick={() => this.triggerLink(col, record)}></div> |
| | | <div className="link-menu" onDoubleClick={(e) => this.triggerLink(e, col, record)}></div> |
| | | {content} |
| | | </div> |
| | | ) |
| | |
| | | } |
| | | |
| | | // 字段透视 |
| | | triggerLink = (item, record) => { |
| | | triggerLink = (e, item, record) => { |
| | | const { tabviews, MenuID } = this.props |
| | | e.stopPropagation() |
| | | |
| | | if (item.linkThdMenu) { |
| | | let tabmenu = item.linkThdMenu |
| | |
| | | }) |
| | | } |
| | | |
| | | doubleClickLine = (record) => { |
| | | const { setting } = this.props |
| | | |
| | | if (!setting.doubleClick) return |
| | | |
| | | MKEmitter.emit('triggerBtnId', setting.doubleClick, [record]) |
| | | } |
| | | |
| | | render() { |
| | | const { setting, statFValue, lineMarks, data } = this.props |
| | | const { selectedRowKeys, activeIndex, pickup } = this.state |
| | |
| | | lineMarks, |
| | | data: record, |
| | | className: index === activeIndex ? ' mk-row-active ' : '', |
| | | onClick: () => {this.changeRow(record, index)} |
| | | onClick: () => {this.changeRow(record, index)}, |
| | | onDoubleClick: () => {this.doubleClickLine(record)} |
| | | } |
| | | }} |
| | | onChange={this.changeTable} |
| | |
| | | }) |
| | | } |
| | | |
| | | if (item.setting && item.setting.supModule) { |
| | | let pid = item.setting.supModule.slice(-1)[0] |
| | | if (pid && pid !== 'empty') { |
| | | item.setting.supModule = pid |
| | | } else { |
| | | item.setting.supModule = '' |
| | | } |
| | | } |
| | | |
| | | // 权限过滤 |
| | | if (this.props.menuType !== 'HS') { |
| | | if (item.action && item.action.length > 0) { |
| | |
| | | }) |
| | | } |
| | | } |
| | | |
| | | if (item.setting && item.setting.supModule) { |
| | | let pid = item.setting.supModule.slice(-1)[0] |
| | | if (pid && pid !== 'empty') { |
| | | item.setting.supModule = pid |
| | | } else { |
| | | item.setting.supModule = '' |
| | | } |
| | | } |
| | | if (item.wrap && item.wrap.doubleClick) { |
| | | let index = item.action.findIndex((btn) => btn.uuid === item.wrap.doubleClick) |
| | | if (index === -1) { |
| | | item.wrap.doubleClick = '' |
| | | } |
| | | } |
| | | |
| | | return true |
| | | }) |
| | | } |
| | |
| | | class NewPageButton extends Component { |
| | | static propTpyes = { |
| | | show: PropTypes.any, // 按钮显示样式控制 |
| | | position: PropTypes.any, // 按钮位置,工具栏为toolbar |
| | | BID: PropTypes.string, // 主表ID |
| | | btn: PropTypes.object, // 按钮 |
| | | selectedData: PropTypes.any, // 子表中选择数据 |
| | |
| | | } |
| | | |
| | | componentDidMount () { |
| | | const { show } = this.props |
| | | const { position } = this.props |
| | | |
| | | if (show === 'actionList') { |
| | | if (position === 'toolbar') { |
| | | MKEmitter.addListener('triggerBtnId', this.actionTrigger) |
| | | } |
| | | } |
| | |
| | | /** |
| | | * @description 触发按钮操作 |
| | | */ |
| | | actionTrigger = (triggerId) => { |
| | | actionTrigger = (triggerId, record) => { |
| | | const { setting, selectedData, btn } = this.props |
| | | const { loading } = this.state |
| | | |
| | | if ((triggerId && btn.uuid !== triggerId) || loading) return |
| | | |
| | | let data = selectedData || [] |
| | | let data = record || selectedData || [] |
| | | |
| | | if (data.length !== 1) { |
| | | // 需要选择单行时,校验数据 |
| | |
| | | class ExcelInButton extends Component { |
| | | static propTpyes = { |
| | | show: PropTypes.any, // 显示样式 |
| | | position: PropTypes.any, // 按钮位置,工具栏为toolbar |
| | | BID: PropTypes.string, // 主表ID |
| | | selectedData: PropTypes.any, // 子表中选择数据 |
| | | Tab: PropTypes.any, // 如果当前元素为标签时,tab为标签信息 |
| | |
| | | } |
| | | |
| | | componentDidMount () { |
| | | const { show } = this.props |
| | | const { position } = this.props |
| | | |
| | | if (show === 'actionList') { |
| | | if (position === 'toolbar') { |
| | | MKEmitter.addListener('triggerBtnId', this.actionTrigger) |
| | | } |
| | | } |
| | |
| | | /** |
| | | * @description 触发按钮操作 |
| | | */ |
| | | actionTrigger = (triggerId) => { |
| | | actionTrigger = (triggerId, record) => { |
| | | const { setting, Tab, BID, btn, selectedData } = this.props |
| | | const { loading } = this.state |
| | | |
| | |
| | | return |
| | | } |
| | | |
| | | let data = selectedData || [] |
| | | let data = record || selectedData || [] |
| | | |
| | | if (btn.Ot === 'requiredSgl' && data.length !== 1) { |
| | | // 需要选择单行时,校验数据 |
| | |
| | | class ExcelOutButton extends Component { |
| | | static propTpyes = { |
| | | BID: PropTypes.string, // 主表ID |
| | | position: PropTypes.any, // 按钮位置,工具栏为toolbar |
| | | show: PropTypes.any, // 显示样式 |
| | | Tab: PropTypes.any, // 如果当前元素为标签时,tab为标签信息 |
| | | btn: PropTypes.object, // 按钮 |
| | |
| | | } |
| | | |
| | | componentDidMount () { |
| | | const { show } = this.props |
| | | const { position } = this.props |
| | | |
| | | if (show === 'actionList') { |
| | | if (position === 'toolbar') { |
| | | MKEmitter.addListener('triggerBtnId', this.actionTrigger) |
| | | } |
| | | } |
| | |
| | | BData={BData} |
| | | setting={setting} |
| | | columns={columns} |
| | | position="toolbar" |
| | | ContainerId={ContainerId} |
| | | selectedData={selectedData} |
| | | updateStatus={this.updateStatus} |
| | |
| | | Tab={Tab} |
| | | btn={item} |
| | | setting={setting} |
| | | position="toolbar" |
| | | selectedData={selectedData} |
| | | updateStatus={this.updateStatus} |
| | | /> |
| | |
| | | Tab={Tab} |
| | | btn={item} |
| | | setting={setting} |
| | | position="toolbar" |
| | | getexceloutparam={getexceloutparam} |
| | | updateStatus={this.updateStatus} |
| | | /> |
| | |
| | | btn={item} |
| | | BData={BData} |
| | | setting={setting} |
| | | position="toolbar" |
| | | selectedData={selectedData} |
| | | updateStatus={this.updateStatus} |
| | | /> |
| | |
| | | btn={item} |
| | | MenuID={MenuID} |
| | | setting={setting} |
| | | position="toolbar" |
| | | selectedData={selectedData} |
| | | updateStatus={this.updateStatus} |
| | | /> |
| | |
| | | show="actionList" |
| | | btn={item} |
| | | setting={setting} |
| | | position="toolbar" |
| | | selectedData={selectedData} |
| | | updateStatus={this.updateStatus} |
| | | /> |
| | |
| | | BID={BID} |
| | | btn={item} |
| | | setting={setting} |
| | | position="toolbar" |
| | | selectedData={selectedData} |
| | | updateStatus={this.updateStatus} |
| | | /> |
| | |
| | | btn={item} |
| | | BData={BData} |
| | | setting={setting} |
| | | position="toolbar" |
| | | ContainerId={ContainerId} |
| | | selectedData={selectedData} |
| | | updateStatus={this.updateStatus} |
| | |
| | | class NewPageButton extends Component { |
| | | static propTpyes = { |
| | | show: PropTypes.any, // 按钮显示样式控制 |
| | | position: PropTypes.any, // 按钮位置,工具栏为toolbar |
| | | btn: PropTypes.object, // 按钮 |
| | | selectedData: PropTypes.any, // 子表中选择数据 |
| | | setting: PropTypes.any, // 页面通用设置 |
| | |
| | | } |
| | | |
| | | componentDidMount () { |
| | | const { show } = this.props |
| | | const { position } = this.props |
| | | |
| | | if (show === 'actionList') { |
| | | if (position === 'toolbar') { |
| | | MKEmitter.addListener('triggerBtnId', this.actionTrigger) |
| | | } |
| | | } |
| | |
| | | /** |
| | | * @description 触发按钮操作 |
| | | */ |
| | | actionTrigger = (triggerId) => { |
| | | actionTrigger = (triggerId, record) => { |
| | | const { setting, btn, selectedData } = this.props |
| | | const _this = this |
| | | |
| | | if (triggerId && btn.uuid !== triggerId) return |
| | | |
| | | let data = selectedData || [] |
| | | let data = record || selectedData || [] |
| | | |
| | | if (btn.Ot === 'requiredSgl' && data.length !== 1) { |
| | | // 需要选择单行时,校验数据 |
| | |
| | | class NormalButton extends Component { |
| | | static propTpyes = { |
| | | show: PropTypes.any, // 按钮显示样式控制 |
| | | position: PropTypes.any, // 按钮位置,工具栏为toolbar |
| | | BID: PropTypes.string, // 主表ID |
| | | BData: PropTypes.any, // 主表数据 |
| | | style: PropTypes.any, // 按钮样式 |
| | |
| | | } |
| | | |
| | | componentDidMount () { |
| | | const { show } = this.props |
| | | const { position } = this.props |
| | | |
| | | if (show === 'actionList') { |
| | | if (position === 'toolbar') { |
| | | MKEmitter.addListener('triggerBtnId', this.actionTrigger) |
| | | } |
| | | } |
| | |
| | | /** |
| | | * @description 触发按钮操作 |
| | | */ |
| | | actionTrigger = (triggerId) => { |
| | | actionTrigger = (triggerId, record) => { |
| | | const { setting, Tab, BID, btn, selectedData } = this.props |
| | | const { loading } = this.state |
| | | |
| | |
| | | } |
| | | |
| | | let _this = this |
| | | let data = selectedData || [] |
| | | let data = record || selectedData || [] |
| | | |
| | | if (btn.Ot !== 'notRequired' && data.length === 0) { |
| | | // 需要选择行时,校验数据 |
| | |
| | | class NormalButton extends Component { |
| | | static propTpyes = { |
| | | show: PropTypes.any, // 按钮显示样式控制 |
| | | position: PropTypes.any, // 按钮位置,工具栏为toolbar |
| | | BID: PropTypes.string, // 主表ID |
| | | BData: PropTypes.any, // 主表数据 |
| | | selectedData: PropTypes.any, // 子表中选择数据 |
| | |
| | | } |
| | | |
| | | componentDidMount () { |
| | | const { show } = this.props |
| | | const { position } = this.props |
| | | |
| | | if (show === 'actionList') { |
| | | if (position === 'toolbar') { |
| | | MKEmitter.addListener('triggerBtnId', this.actionTrigger) |
| | | } |
| | | } |
| | |
| | | /** |
| | | * @description 触发按钮操作 |
| | | */ |
| | | actionTrigger = (triggerId) => { |
| | | actionTrigger = (triggerId, record) => { |
| | | const { setting, Tab, BID, btn, selectedData } = this.props |
| | | const { loading } = this.state |
| | | |
| | |
| | | return |
| | | } |
| | | |
| | | let data = selectedData || [] |
| | | let data = record || selectedData || [] |
| | | |
| | | if (btn.Ot === 'requiredSgl' && data.length !== 1) { |
| | | // 需要选择单行时,校验数据 |
| | |
| | | class PrintButton extends Component { |
| | | static propTpyes = { |
| | | show: PropTypes.any, // 按钮显示样式控制 |
| | | position: PropTypes.any, // 按钮位置,工具栏为toolbar |
| | | BID: PropTypes.string, // 主表ID |
| | | BData: PropTypes.any, // 主表数据 |
| | | selectedData: PropTypes.any, // 子表中选择数据 |
| | |
| | | } |
| | | |
| | | componentDidMount () { |
| | | const { show } = this.props |
| | | const { position } = this.props |
| | | |
| | | if (show === 'actionList') { |
| | | if (position === 'toolbar') { |
| | | MKEmitter.addListener('triggerBtnId', this.actionTrigger) |
| | | } |
| | | } |
| | |
| | | /** |
| | | * @description 触发按钮操作 |
| | | */ |
| | | actionTrigger = (triggerId) => { |
| | | actionTrigger = (triggerId, record) => { |
| | | const { setting, Tab, BID, btn, selectedData } = this.props |
| | | const { loading } = this.state |
| | | |
| | |
| | | } |
| | | |
| | | let _this = this |
| | | let data = selectedData || [] |
| | | let data = record || selectedData || [] |
| | | |
| | | if (btn.Ot !== 'notRequired' && data.length === 0) { |
| | | // 需要选择行时,校验数据 |
| | |
| | | class TabButton extends Component { |
| | | static propTpyes = { |
| | | show: PropTypes.any, // 按钮显示样式控制 |
| | | position: PropTypes.any, // 按钮位置,工具栏为toolbar |
| | | MenuID: PropTypes.string, // 菜单ID |
| | | btn: PropTypes.object, // 按钮 |
| | | selectedData: PropTypes.any, // 子表中选择数据 |
| | |
| | | } |
| | | |
| | | componentDidMount () { |
| | | const { show } = this.props |
| | | const { position } = this.props |
| | | |
| | | if (show === 'actionList') { |
| | | if (position === 'toolbar') { |
| | | MKEmitter.addListener('triggerBtnId', this.actionTrigger) |
| | | } |
| | | } |
| | |
| | | /** |
| | | * @description 触发按钮操作 |
| | | */ |
| | | actionTrigger = (triggerId) => { |
| | | actionTrigger = (triggerId, record) => { |
| | | const { setting, btn, tabviews, MenuID, selectedData } = this.props |
| | | |
| | | if (triggerId && btn.uuid !== triggerId) return |
| | | |
| | | let data = selectedData || [] |
| | | let data = record || selectedData || [] |
| | | |
| | | if (btn.Ot === 'requiredSgl' && data.length !== 1) { |
| | | // 需要选择单行时,校验数据 |
| | |
| | | } |
| | | |
| | | // 字段透视 |
| | | triggerLink = (item, record) => { |
| | | triggerLink = (e, item, record) => { |
| | | const { tabviews, MenuID, setting } = this.props |
| | | |
| | | e.stopPropagation() |
| | | |
| | | if (item.linkThdMenu) { |
| | | let tabmenu = item.linkThdMenu |
| | |
| | | return { |
| | | children: ( |
| | | <div className={className}> |
| | | <div className="baseboard link-menu" onDoubleClick={() => this.triggerLink(item, record)}></div> |
| | | <div className="content link-menu" style={{ minWidth: (item.Width || 120) + 'px' }} onDoubleClick={() => this.triggerLink(item, record)}> |
| | | <div className="baseboard link-menu" onDoubleClick={(e) => this.triggerLink(e, item, record)}></div> |
| | | <div className="content link-menu" onDoubleClick={(e) => this.triggerLink(e, item, record)}> |
| | | {content} |
| | | </div> |
| | | </div> |
| | |
| | | } |
| | | return ( |
| | | <div className={className}> |
| | | <div className="baseboard link-menu" onDoubleClick={() => this.triggerLink(item, record)}></div> |
| | | <div className="content link-menu" style={{ minWidth: (item.Width || 120) + 'px' }} onDoubleClick={() => this.triggerLink(item, record)}> |
| | | <div className="baseboard link-menu" onDoubleClick={(e) => this.triggerLink(e, item, record)}></div> |
| | | <div className="content link-menu" onDoubleClick={(e) => this.triggerLink(e, item, record)}> |
| | | {content} |
| | | </div> |
| | | </div> |
| | |
| | | children: ( |
| | | <div className={className}> |
| | | <div className="baseboard"></div> |
| | | <div className="content" style={{ minWidth: (item.Width || 120) + 'px' }}> |
| | | <div className="content"> |
| | | {content} |
| | | </div> |
| | | </div> |
| | |
| | | return ( |
| | | <div className={className}> |
| | | <div className="baseboard"></div> |
| | | <div className="content" style={{ minWidth: (item.Width || 120) + 'px' }}> |
| | | <div className="content"> |
| | | {content} |
| | | </div> |
| | | </div> |
| | |
| | | if (item.linkThdMenu || item.linkurl) { |
| | | return ( |
| | | <div className={className}> |
| | | <div className="baseboard link-menu" onDoubleClick={() => this.triggerLink(item, record)}></div> |
| | | <div className="content link-menu" style={{ minWidth: (item.Width || 120) + 'px' }} onDoubleClick={() => this.triggerLink(item, record)}> |
| | | <div className="baseboard link-menu" onDoubleClick={(e) => this.triggerLink(e, item, record)}></div> |
| | | <div className="content link-menu" onDoubleClick={(e) => this.triggerLink(e, item, record)}> |
| | | {content} |
| | | </div> |
| | | </div> |
| | |
| | | return ( |
| | | <div className={className}> |
| | | <div className="baseboard"></div> |
| | | <div className="content" style={{ minWidth: (item.Width || 120) + 'px' }}> |
| | | <div className="content"> |
| | | {content} |
| | | </div> |
| | | </div> |
| | |
| | | |
| | | let maxHeight = item.maxHeight || 128 |
| | | return ( |
| | | <div className="picture-col" style={{ minWidth: (item.Width || 120) + 'px' }}> |
| | | <div className="picture-col"> |
| | | {photos && photos.map((url, i) => { |
| | | if (item.scale === 'true') { |
| | | return <img style={{maxHeight: maxHeight}} className="image-scale" onClick={this.imgScale} key={`${i}`} src={url} alt=""/> |
| | |
| | | |
| | | return ( |
| | | <div> |
| | | <div className="content" style={{ minWidth: (item.Width || 120) + 'px' }}> |
| | | <div className="content"> |
| | | {content ? <Paragraph copyable ellipsis={{ rows: 3, expandable: true }}>{content}</Paragraph> : null } |
| | | </div> |
| | | </div> |
| | |
| | | |
| | | return ( |
| | | <div> |
| | | <div className="content" style={{ minWidth: (item.Width || 120) + 'px' }}> |
| | | <div className="content"> |
| | | {content ? <a href={_href} target="_blank" rel="noopener noreferrer">{content}</a> : null } |
| | | </div> |
| | | </div> |
| | | ) |
| | | } else if (item.type === 'action') { |
| | | return ( |
| | | <div className="action-col" style={{ minWidth: (item.Width || 120) + 'px' }}> |
| | | <div className="action-col"> |
| | | {item.operations.map(btn => { |
| | | if (['exec', 'prompt', 'pop'].includes(btn.OpenType)) { |
| | | return ( |
| | |
| | | |
| | | return ( |
| | | <div> |
| | | <div className="content" style={{ minWidth: (item.Width || 120) + 'px' }}> |
| | | <div className="content"> |
| | | {this.getCospanContent(ordertype, contents, images)} |
| | | </div> |
| | | </div> |
| | |
| | | return data |
| | | } |
| | | |
| | | doubleClickLine = (record) => { |
| | | const { setting } = this.props |
| | | |
| | | if (!setting.doubleClick) return |
| | | |
| | | MKEmitter.emit('triggerBtnId', setting.doubleClick, [record]) |
| | | } |
| | | |
| | | render() { |
| | | const { setting, pickup, statFValue } = this.props |
| | | const { selectedRowKeys, lineMarks, activeIndex } = this.state |
| | |
| | | scroll={{ x: '100%', y: false }} |
| | | onRow={(record, index) => { |
| | | return { |
| | | onClick: () => {this.changeRow(record, index)} |
| | | onClick: () => {this.changeRow(record, index)}, |
| | | onDoubleClick: () => {this.doubleClickLine(record)} |
| | | } |
| | | }} |
| | | onChange={this.changeTable} |
| | |
| | | |
| | | class SettingForm extends Component { |
| | | static propTpyes = { |
| | | type: PropTypes.string, // 菜单类型,main或subtable |
| | | config: PropTypes.object, // 页面配置 |
| | | dict: PropTypes.object, // 字典项 |
| | | menu: PropTypes.object, // 菜单信息 |
| | | setting: PropTypes.object, // 数据源配置 |
| | |
| | | } |
| | | |
| | | render() { |
| | | const { setting, dict, menu, type, columns } = this.props |
| | | const { setting, dict, menu, config, columns } = this.props |
| | | const { getFieldDecorator } = this.props.form |
| | | const { interType, funcRules, funcTooltip } = this.state |
| | | |
| | |
| | | </Radio.Group>)} |
| | | </Form.Item> |
| | | </Col> |
| | | {type === 'main' ? <Col span={12}> |
| | | {config.Template === 'CommonTable' ? <Col span={12}> |
| | | <Form.Item label="按钮固定"> |
| | | {getFieldDecorator('actionfixed', { |
| | | initialValue: setting.actionfixed === 'true' || setting.actionfixed === true ? 'true' : 'false' |
| | |
| | | </Radio.Group>)} |
| | | </Form.Item> |
| | | </Col> : null} |
| | | {type === 'main' ? <Col span={12}> |
| | | {config.Template === 'CommonTable' ? <Col span={12}> |
| | | <Form.Item label={ |
| | | <Tooltip placement="topLeft" title={'含有合并列或表格出现横向滚动时会显示异常,请慎用!'}> |
| | | <Icon type="question-circle" /> |
| | |
| | | </Radio.Group>)} |
| | | </Form.Item> |
| | | </Col> |
| | | <Col span={12}> |
| | | <Form.Item label={ |
| | | <Tooltip placement="topLeft" title="双击表格中行,触发的按钮。"> |
| | | <Icon type="question-circle" /> |
| | | 双击事件 |
| | | </Tooltip> |
| | | }> |
| | | {getFieldDecorator('doubleClick', { |
| | | initialValue: setting.doubleClick || '' |
| | | })( |
| | | <Select allowClear> |
| | | {config.action.map(option => |
| | | <Select.Option key={option.uuid} value={option.uuid}>{option.label}</Select.Option> |
| | | )} |
| | | </Select> |
| | | )} |
| | | </Form.Item> |
| | | </Col> |
| | | </Row> |
| | | </Form> |
| | | </div> |
| | |
| | | <Tabs activeKey={activeKey} className="verify-card-box" onChange={this.changeTab}> |
| | | <TabPane tab="数据源" key="setting"> |
| | | <DataSource |
| | | type={config.Template === 'CommonTable' ? 'main' : ''} |
| | | menu={menu} |
| | | dict={dict} |
| | | config={config} |
| | | columns={columns} |
| | | setting={setting} |
| | | scripts={scripts} |