Merge branch 'master' into positec
| | |
| | | } catch (e) { |
| | | console.warn('WebSql 初始化失败!') |
| | | window.GLOB.WebSql = null |
| | | |
| | | if (window.indexedDB) { |
| | | this.openIndexDB(db) |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | .ant-pagination-next:hover .ant-pagination-item-link { |
| | | color: $color6; |
| | | } |
| | | .ant-pagination-options { |
| | | > div:not(:first-child) { |
| | | z-index: 1; |
| | | } |
| | | } |
| | | } |
| | | // 表格排序图标 |
| | | .ant-table-thead > tr > th .ant-table-column-sorter .ant-table-column-sorter-inner .ant-table-column-sorter-up.on, .ant-table-thead > tr > th .ant-table-column-sorter .ant-table-column-sorter-inner .ant-table-column-sorter-down.on { |
| | |
| | | confirm({ |
| | | title: '您确定要退出吗?', |
| | | content: '', |
| | | okText: '确定', |
| | | cancelText: '取消', |
| | | onOk() { |
| | | sessionStorage.clear() |
| | | _this.props.logout() |
| | |
| | | import PropTypes from 'prop-types' |
| | | import { is, fromJS } from 'immutable' |
| | | import { Popover, Checkbox, message } from 'antd' |
| | | import { PlusOutlined, PlusSquareOutlined, EditOutlined, FontColorsOutlined, DeleteOutlined, SettingOutlined, ToolOutlined, ClockCircleOutlined } from '@ant-design/icons' |
| | | import { PlusOutlined, PlusSquareOutlined, EditOutlined, FontColorsOutlined, DeleteOutlined, SettingOutlined, ToolOutlined, ClockCircleOutlined, ColumnHeightOutlined } from '@ant-design/icons' |
| | | |
| | | import asyncComponent from '@/utils/asyncComponent' |
| | | import asyncIconComponent from '@/utils/asyncIconComponent' |
| | |
| | | |
| | | return ( |
| | | <div className="menu-balcony-edit-box" style={_style} id={card.uuid}> |
| | | {card.style.height ? <ColumnHeightOutlined className="fixed-height" title="定高" /> : null} |
| | | <Popover overlayClassName="mk-popover-control-wrap" mouseLeaveDelay={0.2} mouseEnterDelay={0.2} content={ |
| | | <div className="mk-popover-control"> |
| | | <PlusOutlined className="plus" title="添加元素" onClick={this.addElement} /> |
| | |
| | | right: -30px; |
| | | font-size: 16px; |
| | | } |
| | | .fixed-height { |
| | | position: absolute; |
| | | bottom: 3px; |
| | | right: 3px; |
| | | font-size: 10px; |
| | | color: orange; |
| | | } |
| | | } |
| | | .menu-balcony-edit-box::after { |
| | | display: block; |
| | |
| | | delete _card.supNodes |
| | | } |
| | | |
| | | |
| | | if (res.layout === 'flex') { |
| | | _card.wrap.pagestyle = 'page' |
| | | } |
| | |
| | | const { card } = this.state |
| | | |
| | | let _card = {...card, wrap: res} |
| | | |
| | | if (res.supNodes) { |
| | | _card.supNodes = res.supNodes |
| | | _card.supNodes = _card.supNodes.map(item => { |
| | | item.componentId = item.nodes[item.nodes.length - 1] |
| | | return item |
| | | }) |
| | | |
| | | delete res.supNodes |
| | | } else { |
| | | delete _card.supNodes |
| | | } |
| | | |
| | | |
| | | if (res.layout === 'flex') { |
| | | _card.wrap.pagestyle = 'page' |
| | |
| | | const NormalForm = asyncIconComponent(() => import('@/components/normalform')) |
| | | const CopyComponent = asyncIconComponent(() => import('@/menu/components/share/copycomponent')) |
| | | |
| | | const Card = ({ id, card, sort, active, moveCard, findCard, closeCard, selectCard, updateGroup }) => { |
| | | const Card = ({ id, card, sort, labelSize, active, moveCard, findCard, closeCard, selectCard, updateGroup }) => { |
| | | const originalIndex = findCard(id).index |
| | | const [{ isDragging }, drag] = useDrag({ |
| | | item: { type: 'form', id, originalIndex }, |
| | |
| | | updateGroup(_card) |
| | | } |
| | | |
| | | let style = {fontSize: labelSize} |
| | | let s = labelSize * 1.5 + 'px' |
| | | let sortStyle = {width: s, height: s, lineHeight: s, borderRadius: s} |
| | | |
| | | return ( |
| | | <Popover overlayClassName="mk-popover-control-wrap" mouseLeaveDelay={0.2} mouseEnterDelay={0.2} content={ |
| | | <div className="mk-popover-control"> |
| | |
| | | </div> |
| | | } trigger="hover"> |
| | | <div className={'page-card ' + (active ? 'active' : '')} onClick={select} style={{ opacity: opacity}}> |
| | | <div ref={node => drag(drop(node))}> |
| | | <span className="form-sort">{sort}</span> |
| | | <div ref={node => drag(drop(node))} style={style}> |
| | | <span className="form-sort" style={sortStyle}>{sort}</span> |
| | | {card.setting.title} |
| | | </div> |
| | | </div> |
| | |
| | | import Card from './card' |
| | | import './index.scss' |
| | | |
| | | const Container = ({list, selectId, tabtype, handleList, handleGroup, closeGroup, selectGroup}) => { |
| | | const Container = ({list, labelSize, selectId, tabtype, handleList, handleGroup, closeGroup, selectGroup}) => { |
| | | const [cards, setCards] = useState(list) |
| | | const moveCard = (id, atIndex) => { |
| | | const { card, index } = findCard(id) |
| | |
| | | id={card.uuid} |
| | | key={card.uuid} |
| | | sort={i + 1} |
| | | labelSize={labelSize} |
| | | active={card.uuid === selectId} |
| | | card={card} |
| | | moveCard={moveCard} |
| | |
| | | display: flex; |
| | | line-height: 30px; |
| | | min-height: 50px; |
| | | font-weight: inherit; |
| | | div { |
| | | font-weight: inherit; |
| | | } |
| | | .page-card { |
| | | position: relative; |
| | | flex: 1; |
| | |
| | | {value: 'static', label: '静态'}, |
| | | ], |
| | | controlFields: [ |
| | | {field: 'empty', values: ['dynamic']}, |
| | | {field: 'supModule', values: ['static']}, |
| | | ] |
| | | }, |
| | |
| | | }, |
| | | { |
| | | type: 'radio', |
| | | field: 'empty', |
| | | label: '空值隐藏', |
| | | initval: wrap.empty || 'show', |
| | | tooltip: '当查询数据为空时,隐藏该组件。', |
| | | required: false, |
| | | skip: true, |
| | | options: [ |
| | | {value: 'show', label: '否'}, |
| | | {value: 'hidden', label: '是'}, |
| | | ], |
| | | }, |
| | | { |
| | | type: 'radio', |
| | | field: 'permission', |
| | | label: '权限验证', |
| | | initval: wrap.permission || 'false', |
| | |
| | | changeStyle = () => { |
| | | const { card } = this.state |
| | | |
| | | MKEmitter.emit('changeStyle', ['height', 'background', 'border', 'padding', 'margin', 'shadow', 'clear', 'minHeight'], card.style, this.getStyle) |
| | | MKEmitter.emit('changeStyle', ['height', 'font1', 'background', 'border', 'padding', 'margin', 'shadow', 'clear', 'minHeight'], card.style, this.getStyle) |
| | | } |
| | | |
| | | getStyle = (style) => { |
| | |
| | | render() { |
| | | const { card, group, appType } = this.state |
| | | |
| | | let labelSize = 14 |
| | | if (card.style.fontSize) { |
| | | labelSize = parseInt(card.style.fontSize) |
| | | } |
| | | |
| | | return ( |
| | | <div className="menu-normal-form-edit-box" style={resetStyle(card.style)} onClick={this.clickComponent} id={card.uuid}> |
| | | <Popover overlayClassName="mk-popover-control-wrap" mouseLeaveDelay={0.2} mouseEnterDelay={0.2} content={ |
| | |
| | | </Popover> |
| | | <FormTitle |
| | | list={card.subcards} |
| | | labelSize={labelSize} |
| | | selectId={group ? group.uuid : ''} |
| | | handleList={this.changecards} |
| | | handleGroup={this.changeGroup} |
| | |
| | | top: 1px; |
| | | cursor: pointer; |
| | | padding: 5px; |
| | | color: rgba(0, 0, 0, 0.65); |
| | | background: rgba(255, 255, 255, 0.55); |
| | | } |
| | | |
| | |
| | | } |
| | | .form-area { |
| | | position: relative; |
| | | font-size: 14px; |
| | | .page-card { |
| | | background: transparent; |
| | | } |
| | |
| | | {value: 'static', label: '静态'}, |
| | | ], |
| | | controlFields: [ |
| | | {field: 'empty', values: ['dynamic']}, |
| | | {field: 'supModule', values: ['static']}, |
| | | ] |
| | | }, |
| | |
| | | options: [ |
| | | {value: 'show', label: '显示'}, |
| | | {value: 'hidden', label: '隐藏'}, |
| | | ] |
| | | ], |
| | | // controlFields: [ |
| | | // {field: 'labelSize', values: ['show']}, |
| | | // ] |
| | | }, |
| | | // { |
| | | // type: 'number', |
| | | // field: 'labelSize', |
| | | // label: '名称大小', |
| | | // initval: wrap.labelSize || '', |
| | | // tooltip: '分组名称字体大小。', |
| | | // min: 12, |
| | | // max: 50, |
| | | // precision: 0, |
| | | // required: false |
| | | // }, |
| | | { |
| | | type: 'radio', |
| | | field: 'tabtype', |
| | |
| | | }, |
| | | { |
| | | type: 'radio', |
| | | field: 'empty', |
| | | label: '空值隐藏', |
| | | initval: wrap.empty || 'show', |
| | | tooltip: '当查询数据为空时,隐藏该组件。', |
| | | required: false, |
| | | skip: true, |
| | | options: [ |
| | | {value: 'show', label: '否'}, |
| | | {value: 'hidden', label: '是'}, |
| | | ], |
| | | }, |
| | | { |
| | | type: 'radio', |
| | | field: 'permission', |
| | | label: '权限验证', |
| | | initval: wrap.permission || 'false', |
| | |
| | | changeStyle = () => { |
| | | const { card } = this.state |
| | | |
| | | MKEmitter.emit('changeStyle', ['height', 'background', 'border', 'padding', 'margin', 'shadow', 'clear', 'minHeight'], card.style, this.getStyle) |
| | | MKEmitter.emit('changeStyle', ['height', 'font1', 'background', 'border', 'padding', 'margin', 'shadow', 'clear', 'minHeight'], card.style, this.getStyle) |
| | | } |
| | | |
| | | getStyle = (style) => { |
| | |
| | | render() { |
| | | const { card, group, appType } = this.state |
| | | |
| | | let labelSize = 14 |
| | | if (card.style.fontSize) { |
| | | labelSize = parseInt(card.style.fontSize) |
| | | } |
| | | |
| | | return ( |
| | | <div className="menu-normal-form-edit-box" style={resetStyle(card.style)} onClick={this.clickComponent} id={card.uuid}> |
| | | <Popover overlayClassName="mk-popover-control-wrap" mouseLeaveDelay={0.2} mouseEnterDelay={0.2} content={ |
| | |
| | | </Popover> |
| | | <FormTitle |
| | | list={card.subcards} |
| | | labelSize={labelSize} |
| | | tabtype={card.wrap.tabtype || ''} |
| | | selectId={group ? group.uuid : ''} |
| | | handleList={this.changecards} |
| | |
| | | } |
| | | .form-area { |
| | | position: relative; |
| | | font-size: 14px; |
| | | .page-card { |
| | | background: transparent; |
| | | } |
| | |
| | | }, |
| | | { |
| | | type: 'radio', |
| | | field: 'readonly', |
| | | label: '只读', |
| | | initval: wrap.readonly || 'false', |
| | | required: true, |
| | | options: [ |
| | | {value: 'false', label: '否'}, |
| | | {value: 'true', label: '是'}, |
| | | ], |
| | | controlFields: [ |
| | | {field: 'addable', values: ['false']}, |
| | | ] |
| | | }, |
| | | { |
| | | type: 'radio', |
| | | field: 'addable', |
| | | label: '可新增', |
| | | initval: wrap.addable || 'false', |
| | | required: true, |
| | | options: [ |
| | | {value: 'true', label: '是'}, |
| | | {value: 'false', label: '否'}, |
| | | {value: 'true', label: '是'}, |
| | | ], |
| | | controlFields: [ |
| | | {field: 'linkmenu', values: ['true']}, |
| | |
| | | if (Ot === 'required') { |
| | | shows.push('progress') |
| | | } |
| | | if (Ot === 'required' && (intertype === 'inner' || intertype === 'system')) { |
| | | shows.push('execType') |
| | | } |
| | | if (this.record.openmenu && this.record.openmenu !== 'goback') { |
| | | shows.push('open') |
| | | } |
| | |
| | | } else if (_funcType === 'closetab') { |
| | | shows.push('refreshTab') |
| | | } else if (_funcType === 'scan') { |
| | | shows.push('linkmenu') |
| | | shows.push('linkmenu', 'prefix') |
| | | |
| | | reRequired.linkmenu = false |
| | | reTooltip.linkmenu = '使用扫码登录功能或菜单跳转功能时,需选择跳转的菜单。' |
| | |
| | | { value: 'mkUnBinding', text: '用户解绑' }, |
| | | { value: 'mkUnsubscribe', text: '注销账户' }, |
| | | { value: 'reAuth', text: '切换系统(清空缓存-小程序)' }, |
| | | { value: 'clearCache', text: '清空本地配置' }, |
| | | { value: 'copyurl', text: '复制链接地址' }, |
| | | { value: 'logout', text: '退出' }, |
| | | { value: 'goBack', text: '返回' }, |
| | |
| | | required: true, |
| | | extendName: 'MenuNo', |
| | | options: isApp ? appMenus : menulist |
| | | }, |
| | | { |
| | | type: 'text', |
| | | key: 'prefix', |
| | | label: '前缀', |
| | | initVal: card.prefix || '', |
| | | tooltip: '扫码信息将与前缀拼接后执行。注:跳转菜单需以mkbid开头。', |
| | | required: false |
| | | }, |
| | | { |
| | | type: 'textarea', |
| | |
| | | label: '关闭提示', |
| | | initVal: card.closeText || '', |
| | | required: false, |
| | | }, |
| | | { |
| | | type: 'radio', |
| | | key: 'execType', |
| | | label: '请求方式', |
| | | initVal: card.execType || 'multi', |
| | | tooltip: '选中多条数据时的请求方式,注:当选中数据超过20条时将逐条请求。', |
| | | required: false, |
| | | options: [{ |
| | | value: 'multi', |
| | | text: '批量请求' |
| | | }, { |
| | | value: 'single', |
| | | text: '逐条请求' |
| | | }] |
| | | }, |
| | | { |
| | | type: 'radio', |
| | |
| | | }, |
| | | { |
| | | type: 'radio', |
| | | key: 'execType', |
| | | label: '请求方式', |
| | | initVal: card.execType || 'multi', |
| | | tooltip: '选中多条数据时的请求方式,注:当选中数据超过20条时将逐条请求。', |
| | | required: false, |
| | | options: [{ |
| | | value: 'multi', |
| | | text: '批量请求' |
| | | }, { |
| | | value: 'single', |
| | | text: '逐条请求' |
| | | }] |
| | | }, |
| | | { |
| | | type: 'radio', |
| | | key: 'progress', |
| | | label: '进度提示', |
| | | initVal: card.progress || 'number', |
| | |
| | | roleList = [] |
| | | } |
| | | |
| | | if (['picture', 'link', 'colspan'].includes(card.type)) { |
| | | // if (['picture', 'link', 'colspan'].includes(card.type)) { |
| | | if (['picture', 'link'].includes(card.type)) { |
| | | card.type = 'text' |
| | | } |
| | | |
| | |
| | | value: 'custom', |
| | | text: '自定义列' |
| | | }, { |
| | | value: 'action', |
| | | text: '操作' |
| | | value: 'colspan', |
| | | text: '合并列' |
| | | // }, { |
| | | // value: 'action', |
| | | // text: '操作' |
| | | }, { |
| | | value: 'formula', |
| | | text: '公式' |
| | |
| | | value: 'index', |
| | | text: '序号' |
| | | }] |
| | | |
| | | if (!card.isSub) { |
| | | options.push({ |
| | | value: 'action', |
| | | text: '操作' |
| | | }) |
| | | } |
| | | |
| | | let editCols = [ |
| | | { |
| | |
| | | editCols.push({ |
| | | field: col.uuid, |
| | | label: col.label |
| | | }) |
| | | } else if (col.type === 'colspan') { |
| | | col.subcols.forEach(subcol => { |
| | | if (subcol.editable === 'true' && subcol.uuid !== card.uuid) { |
| | | editCols.push({ |
| | | field: subcol.uuid, |
| | | label: col.label + '-' + subcol.label |
| | | }) |
| | | } |
| | | }) |
| | | } |
| | | }) |
| | |
| | | type: 'radio', |
| | | key: 'IsSort', |
| | | label: '排序', |
| | | initVal: card.IsSort || 'false', |
| | | initVal: card.IsSort || (card.isSub ? 'false' : 'true'), |
| | | required: true, |
| | | options: [{ |
| | | value: 'true', |
| | |
| | | number: ['label', 'field', 'type', 'Align', 'Hide', 'IsSort', 'Width', 'decimal', 'format', 'prefix', 'postfix', 'editable', 'initval', 'sum', 'blacklist'], |
| | | textarea: ['label', 'field', 'type', 'Align', 'Hide', 'Width', 'prefix', 'initval', 'postfix', 'blacklist'], |
| | | custom: ['label', 'type', 'Align', 'Hide', 'Width', 'blacklist'], |
| | | colspan: ['label', 'type', 'Align', 'Hide', 'blacklist'], |
| | | action: ['label', 'type', 'Align', 'Width'], |
| | | formula: ['label', 'type', 'Align', 'Hide', 'Width', 'prefix', 'postfix', 'eval', 'formula', 'blacklist'], |
| | | index: ['label', 'type', 'Align', 'Width'] |
| | |
| | | return item |
| | | }) |
| | | }, () => { |
| | | if (value === 'action') { |
| | | if (value === 'action' || value === 'colspan') { |
| | | this.props.form.setFieldsValue({Align: 'center'}) |
| | | } |
| | | }) |
| | |
| | | } |
| | | |
| | | handleSubmit = () => { |
| | | const { columns, column } = this.props |
| | | // const { columns } = this.props |
| | | // 表单提交时检查输入值是否正确 |
| | | this.props.form.validateFieldsAndScroll((err, values) => { |
| | | if (!err) { |
| | | values.uuid = column.uuid |
| | | values.marks = column.marks || [] |
| | | |
| | | if (values.field && columns.filter(col => col.field && col.uuid !== values.uuid && col.field === values.field).length > 0) { |
| | | notification.warning({ |
| | | top: 92, |
| | | message: '字段已添加!', |
| | | duration: 5 |
| | | }) |
| | | return |
| | | } |
| | | // if (values.field && columns.filter(col => col.field && col.uuid !== values.uuid && col.field === values.field).length > 0) { |
| | | // notification.warning({ |
| | | // top: 92, |
| | | // message: '字段已添加!', |
| | | // duration: 5 |
| | | // }) |
| | | // return |
| | | // } |
| | | this.setState({visible: false, formlist: null}) |
| | | this.props.submitCol(values) |
| | | |
| | |
| | | </th> |
| | | ) |
| | | |
| | | let style = {cursor: 'move', textAlign: align} |
| | | if (column.Width) { |
| | | style.width = column.Width |
| | | style.minWidth = column.Width |
| | | } |
| | | if (index !== undefined) { |
| | | let style = {cursor: 'move', textAlign: align} |
| | | if (column.Width) { |
| | | style.width = column.Width |
| | | style.minWidth = column.Width |
| | | } |
| | | |
| | | return connectDragSource( |
| | | connectDropTarget(<th {...restProps} index={index} style={style} onDoubleClick={() => this.props.editColumn(column)}> |
| | | <Popover overlayClassName="mk-popover-control-wrap" mouseLeaveDelay={0.2} mouseEnterDelay={0.2} content={ |
| | | <div className="mk-popover-control" onDoubleClick={(e) => e.stopPropagation()}> |
| | | {['custom', 'action'].includes(column.type) ? |
| | | <PlusOutlined className="plus" title="添加" onClick={() => this.props.addElement(column)} /> : null |
| | | } |
| | | <EditOutlined className="edit" title="编辑" onClick={() => this.props.editColumn(column)} /> |
| | | {column.type === 'custom' ? <PasteComponent options={['customCardElement']} updateConfig={(res, resolve) => this.props.pasteCell(column, res, resolve)} /> : null} |
| | | {column.type === 'action' ? <PasteComponent options={['action']} updateConfig={(res, resolve) => this.props.pasteCell(column, res, resolve)} /> : null} |
| | | {column.type === 'custom' || column.type === 'action' ? <FontColorsOutlined className="style" title="调整样式" onClick={() => this.props.changeStyle(column)}/> : null} |
| | | <DeleteOutlined className="close" title="删除" onClick={this.deleteCol} /> |
| | | {['text', 'number', 'formula'].includes(column.type) ? <MarkColumn field={column.field || ''} columns={fields} marks={column.marks} onSubmit={this.updateMarks} /> : null } |
| | | </div> |
| | | } trigger="hover"> |
| | | {children} |
| | | </Popover> |
| | | </th>), |
| | | ) |
| | | return connectDragSource( |
| | | connectDropTarget(<th {...restProps} index={index} style={style} onDoubleClick={() => this.props.editColumn(column)}> |
| | | <Popover overlayClassName="mk-popover-control-wrap" mouseLeaveDelay={0.2} mouseEnterDelay={0.2} content={ |
| | | <div className="mk-popover-control" onDoubleClick={(e) => e.stopPropagation()}> |
| | | {['custom', 'colspan', 'action'].includes(column.type) ? |
| | | <PlusOutlined className="plus" title="添加" onClick={() => this.props.addElement(column)} /> : null |
| | | } |
| | | <EditOutlined className="edit" title="编辑" onClick={() => this.props.editColumn(column)} /> |
| | | {column.type === 'custom' ? <PasteComponent options={['customCardElement']} updateConfig={(res, resolve) => this.props.pasteCell(column, res, resolve)} /> : null} |
| | | {column.type === 'action' ? <PasteComponent options={['action']} updateConfig={(res, resolve) => this.props.pasteCell(column, res, resolve)} /> : null} |
| | | {column.type === 'custom' || column.type === 'action' ? <FontColorsOutlined className="style" title="调整样式" onClick={() => this.props.changeStyle(column)}/> : null} |
| | | <DeleteOutlined className="close" title="删除" onClick={this.deleteCol} /> |
| | | {['text', 'number', 'formula'].includes(column.type) ? <MarkColumn field={column.field || ''} columns={fields} marks={column.marks} onSubmit={this.updateMarks} /> : null } |
| | | </div> |
| | | } trigger="hover"> |
| | | {children} |
| | | </Popover> |
| | | </th>), |
| | | ) |
| | | } else if (column) { |
| | | let style = {textAlign: align} |
| | | if (column.Width) { |
| | | style.width = column.Width |
| | | style.minWidth = column.Width |
| | | } |
| | | |
| | | return ( |
| | | <th {...restProps} style={style} key={column.uuid} onDoubleClick={() => this.props.editColumn(column)}> |
| | | <Popover overlayClassName="mk-popover-control-wrap" mouseLeaveDelay={0.2} mouseEnterDelay={0.2} content={ |
| | | <div className="mk-popover-control" onDoubleClick={(e) => e.stopPropagation()}> |
| | | {['custom', 'colspan'].includes(column.type) ? |
| | | <PlusOutlined className="plus" title="添加" onClick={() => this.props.addElement(column)} /> : null |
| | | } |
| | | <EditOutlined className="edit" title="编辑" onClick={() => this.props.editColumn(column)} /> |
| | | {column.type === 'custom' ? <PasteComponent options={['customCardElement']} updateConfig={(res, resolve) => this.props.pasteCell(column, res, resolve)} /> : null} |
| | | <DeleteOutlined className="close" title="删除" onClick={this.deleteCol} /> |
| | | {column && ['text', 'number', 'formula'].includes(column.type) ? <MarkColumn field={column.field || ''} columns={fields} marks={column.marks} onSubmit={this.updateMarks} /> : null } |
| | | </div> |
| | | } trigger="hover"> |
| | | {children} |
| | | </Popover> |
| | | </th> |
| | | ) |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | let _columns = fromJS(this.state.columns).toJS() |
| | | let type = item.subType |
| | | |
| | | if (!['text', 'number', 'textarea', 'custom', 'action', 'formula', 'index'].includes(item.subType)) { |
| | | if (!['text', 'number', 'textarea', 'custom', 'action', 'formula', 'index', 'colspan'].includes(item.subType)) { |
| | | type = 'text' |
| | | } |
| | | |
| | | let col = { focus: true, uuid: Utils.getuuid(), label: 'label', field: '', type: type, elements: [] } |
| | | if (col.type === 'action') { |
| | | if (col.type === 'colspan') { |
| | | col.subcols = [] |
| | | } else if (col.type === 'action') { |
| | | col.label = '操作' |
| | | } else if (col.type === 'index') { |
| | | col.label = '序号' |
| | |
| | | }) |
| | | } |
| | | |
| | | updateCol = (col, btn) => { |
| | | let _columns = fromJS(this.state.columns).toJS() |
| | | _columns = _columns.map(column => { |
| | | loopCol = (columns, col) => { |
| | | return columns.map(column => { |
| | | if (column.type === 'colspan') { |
| | | column.subcols = this.loopCol(column.subcols || [], col) |
| | | } |
| | | if (column.uuid === col.uuid) { |
| | | return col |
| | | } |
| | | return column |
| | | }) |
| | | } |
| | | |
| | | updateCol = (col, btn) => { |
| | | let _columns = fromJS(this.state.columns).toJS() |
| | | _columns = this.loopCol(_columns, col) |
| | | |
| | | this.setState({ |
| | | columns: _columns, |
| | |
| | | addElement = (col) => { |
| | | let column = fromJS(col).toJS() |
| | | |
| | | if (column.type === 'custom') { |
| | | if (column.type === 'colspan') { |
| | | column.subcols = column.subcols || [] |
| | | let subcol = { isSub: true, focus: true, uuid: Utils.getuuid(), label: 'label', field: '', type: 'text' } |
| | | column.subcols.push(subcol) |
| | | |
| | | this.setState({ |
| | | card: subcol |
| | | }) |
| | | this.updateCol(column) |
| | | } else if (column.type === 'custom') { |
| | | let newcard = {uuid: Utils.getuuid(), focus: true, width: 24, eleType: 'text', datatype: 'dynamic', style: {paddingLeft: '4px'}} |
| | | |
| | | // 注册事件-添加元素 |
| | |
| | | submitCol = (col) => { |
| | | const { card } = this.state |
| | | |
| | | if (col.type === 'custom') { |
| | | col.uuid = card.uuid |
| | | col.isSub = card.isSub === true |
| | | col.marks = card.marks || [] |
| | | |
| | | if (col.type === 'colspan') { |
| | | col.subcols = card.subcols || [] |
| | | } else if (col.type === 'custom') { |
| | | col.style = card.style || {} |
| | | col.elements = card.type === 'custom' ? (card.elements || []) : [] |
| | | } else if (col.type === 'action') { |
| | |
| | | this.setState({card: null}) |
| | | } |
| | | |
| | | loopDelCol = (columns, col) => { |
| | | return columns.filter(column => { |
| | | if (column.type === 'colspan') { |
| | | column.subcols = this.loopDelCol(column.subcols, col) |
| | | } |
| | | return column.uuid !== col.uuid |
| | | }) |
| | | } |
| | | |
| | | deleteCol = (col) => { |
| | | let _columns = fromJS(this.state.columns).toJS() |
| | | |
| | | _columns = _columns.filter(column => column.uuid !== col.uuid) |
| | | _columns = this.loopDelCol(_columns, col) |
| | | |
| | | this.setState({ |
| | | columns: _columns |
| | |
| | | MKEmitter.removeListener('submitStyle', this.getStyle) |
| | | } |
| | | |
| | | handlecolumns = (columns, fields, config, isSub) => { |
| | | return columns.map((col, index) => { |
| | | let title = col.label |
| | | if (col.editable === 'true') { |
| | | title = <span>{col.label}<EditOutlined style={{position: 'absolute', bottom: 0, right: 0, color: '#1890ff', opacity: '0.7'}}/></span> |
| | | } |
| | | |
| | | return { |
| | | title: title, |
| | | dataIndex: col.uuid, |
| | | align: col.Align, |
| | | sorter: col.IsSort === 'true', |
| | | onCell: () => ({ |
| | | column: col, |
| | | width: col.Width, |
| | | config: config, |
| | | upComponent: this.updateCol |
| | | }), |
| | | onHeaderCell: () => ({ |
| | | index: isSub ? undefined : index, |
| | | column: col, |
| | | fields: fields, |
| | | align: col.Align, |
| | | moveCol: this.moveCol, |
| | | dropCol: this.dropCol, |
| | | updateCol: this.updateCol, |
| | | addElement: this.addElement, |
| | | editColumn: this.editColumn, |
| | | pasteCell: this.pasteCell, |
| | | changeStyle: this.changeStyle, |
| | | deleteCol: this.deleteCol, |
| | | }), |
| | | children: col.subcols && col.subcols.length ? this.handlecolumns(col.subcols, fields, config, true) : null, |
| | | } |
| | | }) |
| | | } |
| | | |
| | | render() { |
| | | const { config } = this.props |
| | | const { fields, card, lineMarks, tableId, visible } = this.state |
| | |
| | | } |
| | | } |
| | | |
| | | const columns = this.state.columns.map((col, index) => { |
| | | let title = col.label |
| | | if (col.editable === 'true') { |
| | | title = <span>{col.label}<EditOutlined style={{position: 'absolute', bottom: 0, right: 0, color: '#1890ff', opacity: '0.7'}}/></span> |
| | | } |
| | | return { |
| | | title: title, |
| | | dataIndex: col.uuid, |
| | | align: col.Align, |
| | | sorter: col.IsSort === 'true', |
| | | onCell: () => ({ |
| | | column: col, |
| | | width: col.Width, |
| | | config: config, |
| | | upComponent: this.updateCol |
| | | }), |
| | | onHeaderCell: () => ({ |
| | | index, |
| | | column: col, |
| | | fields: fields, |
| | | align: col.Align, |
| | | moveCol: this.moveCol, |
| | | dropCol: this.dropCol, |
| | | updateCol: this.updateCol, |
| | | addElement: this.addElement, |
| | | editColumn: this.editColumn, |
| | | pasteCell: this.pasteCell, |
| | | changeStyle: this.changeStyle, |
| | | deleteCol: this.deleteCol, |
| | | }), |
| | | } |
| | | }) |
| | | const columns = this.handlecolumns(this.state.columns, fields, config) |
| | | |
| | | return ( |
| | | <div className={`edit-table-columns ${config.setting.laypage} ${config.wrap.mode || ''} table-vertical-${config.wrap.vertical || ''}`} id={tableId}> |
| | |
| | | } |
| | | >.anticon-copy { |
| | | color: #26C281; |
| | | margin-left: 5px; |
| | | } |
| | | >.anticon-delete { |
| | | color: #ff4d4f; |
| | |
| | | if (col.format === 'abs') { |
| | | config.absFields.push(col.field) |
| | | } |
| | | } else if (col.type === 'colspan' && col.subcols) { |
| | | col.subcols.forEach(scol => { |
| | | if (scol.type === 'number') { |
| | | if (scol.format === 'abs') { |
| | | config.absFields.push(scol.field) |
| | | } |
| | | } |
| | | }) |
| | | } |
| | | }) |
| | | |
| | |
| | | options: [ |
| | | {value: 'true', label: '可编辑'}, |
| | | {value: 'false', label: '不可编辑'}, |
| | | ], |
| | | controlFields: [ |
| | | {field: 'switchable', values: ['true']}, |
| | | ] |
| | | }, |
| | | { |
| | |
| | | forbid: !appType || sessionStorage.getItem('editMenuType') === 'popview' |
| | | }, |
| | | { |
| | | type: 'radio', |
| | | field: 'switchable', |
| | | label: '状态切换', |
| | | initval: wrap.switchable || 'true', |
| | | tooltip: '是否可以在编辑和默认table状态间切换。', |
| | | required: false, |
| | | options: [ |
| | | {value: 'true', label: '启用'}, |
| | | {value: 'false', label: '禁用'}, |
| | | ] |
| | | }, |
| | | { |
| | | type: 'multiselect', |
| | | field: 'blacklist', |
| | | label: '黑名单', |
| | |
| | | title: col.label, |
| | | dataIndex: col.uuid, |
| | | align: col.Align, |
| | | // sorter: !isSub && col.IsSort === 'true', |
| | | sorter: col.IsSort === 'true', |
| | | onCell: () => ({ |
| | | column: col, |
| | |
| | | this.setState({visible: true}) |
| | | } |
| | | |
| | | resetconfig = (item, uuids = {}) => { |
| | | resetconfig = (item) => { |
| | | if (item.type === 'tabs') { |
| | | uuids[item.uuid] = MenuUtils.getuuid() |
| | | item.uuid = uuids[item.uuid] |
| | | item.uuid = MenuUtils.getuuid() |
| | | item.setting.name = item.setting.name + MenuUtils.getSignName() |
| | | item.name = item.setting.name |
| | | |
| | | item.subtabs.forEach(tab => { |
| | | uuids[tab.uuid] = MenuUtils.getuuid() |
| | | tab.uuid = uuids[tab.uuid] |
| | | tab.uuid = MenuUtils.getuuid() |
| | | |
| | | tab.components = tab.components.map(cell => { |
| | | cell = this.resetconfig(cell, uuids) |
| | | cell = this.resetconfig(cell) |
| | | return cell |
| | | }) |
| | | }) |
| | | } else if (item.type === 'group') { |
| | | uuids[item.uuid] = MenuUtils.getuuid() |
| | | item.uuid = uuids[item.uuid] |
| | | item.uuid = MenuUtils.getuuid() |
| | | item.setting.name = item.setting.name + MenuUtils.getSignName() |
| | | item.name = item.setting.name |
| | | |
| | | item.components = item.components.map(cell => { |
| | | cell = MenuUtils.resetComponentConfig(cell, uuids) |
| | | cell = MenuUtils.resetComponentConfig(cell) |
| | | |
| | | return cell |
| | | }) |
| | | } else { |
| | | item = MenuUtils.resetComponentConfig(item, uuids) |
| | | item = MenuUtils.resetComponentConfig(item) |
| | | } |
| | | |
| | | return item |
| | |
| | | return |
| | | } |
| | | |
| | | res = this.resetconfig(res, {}) |
| | | res = this.resetconfig(res) |
| | | |
| | | delete res.copyType |
| | | |
| | |
| | | </Col> |
| | | <Col span={24} className="sqlfield"> |
| | | <Form.Item label={'可用字段'}> |
| | | <Tooltip mouseLeaveDelay={0.3} mouseEnterDelay={0.3} placement="top" title={'公共值,请按照@xxx@格式使用。'}><span style={{color: '#1890ff'}}>BID, LoginUID, SessionUid, UserID, Appkey, time_id</span></Tooltip>, |
| | | <Tooltip mouseLeaveDelay={0.3} mouseEnterDelay={0.3} placement="top" title={'公共值,请按照@xxx@格式使用。'}><span style={{color: '#1890ff'}}>BID, LoginUID, SessionUid, UserID, Appkey, time_id, typename</span></Tooltip>, |
| | | <Tooltip mouseLeaveDelay={0.3} mouseEnterDelay={0.3} placement="top" title={'系统变量,系统会定义变量并赋值。'}><span style={{color: '#fa8c16'}}>UserName, FullName, RoleID, mk_departmentcode, mk_organization, mk_user_type, mk_nation, mk_province, mk_city, mk_district, mk_address</span></Tooltip>, |
| | | <Tooltip mouseLeaveDelay={0.3} mouseEnterDelay={0.3} placement="top" title={'排序、分页以及搜索条件变量,请按照@xxx@格式使用。'}>orderBy, pageSize, pageIndex{usefulFields ? ', ' + usefulFields : ''}</Tooltip> |
| | | <Tooltip mouseLeaveDelay={0.3} mouseEnterDelay={0.3} placement="top" title={'url变量,请按照@xxx@格式使用。'}>{urlFields ? ', ' : ''}<span style={{color: '#13c2c2'}}>{urlFields}</span></Tooltip> |
| | |
| | | let _customScript = '' |
| | | let arr_field = columns.map(item => item.field).join(',') |
| | | |
| | | if (scripts.length > 0) { |
| | | scripts.forEach(item => { |
| | | _customScript += ` |
| | | ${item.sql} |
| | | ` |
| | | }) |
| | | } |
| | | scripts.forEach(item => { |
| | | _customScript += ` |
| | | ${item.sql} |
| | | ` |
| | | }) |
| | | |
| | | if (!arr_field) { |
| | | arr_field = '*' |
| | |
| | | // error = '系统函数' + _customScript.match(/\$ex@.{1,50}@ex\$/g)[0].replace(/\$ex@|@ex\$/g, '') + '未定义' |
| | | // } |
| | | |
| | | _dataresource = _dataresource.replace(/@(BID|LoginUID|SessionUid|UserID|Appkey|time_id|datam|upid)@/ig, `'${timestamp}'`) |
| | | _customScript = _customScript.replace(/@(BID|LoginUID|SessionUid|UserID|Appkey|time_id|datam|upid)@/ig, `'${timestamp}'`) |
| | | _dataresource = _dataresource.replace(/@(BID|LoginUID|SessionUid|UserID|Appkey|time_id|datam|upid|typename)@/ig, `'${timestamp}'`) |
| | | _customScript = _customScript.replace(/@(BID|LoginUID|SessionUid|UserID|Appkey|time_id|datam|upid|typename)@/ig, `'${timestamp}'`) |
| | | |
| | | _dataresource = _dataresource.replace(/@\$|\$@/ig, '') |
| | | _customScript = _customScript.replace(/@\$|\$@/ig, '') |
| | |
| | | if (/@[0-9a-zA-Z_]+@/ig.test(sql)) { |
| | | let arr = sql.match(/@[0-9a-zA-Z_]+@/ig) |
| | | |
| | | let getTrueSql = (sl) => { |
| | | if (!/\/\*/.test(sl)) return sl |
| | | let index = 0 |
| | | |
| | | sl = sl.replace(/\s/ig, ' ') |
| | | sl = sl.replace(/\*\//ig, 'm_k@') |
| | | sl = sl.replace(/\/\*/ig, () => { |
| | | index++ |
| | | return '@m_k' + index |
| | | }) |
| | | |
| | | for (let i = index; i > 0; i--) { |
| | | let reg = new RegExp(`@m_k${i}.+m_k@`, 'ig') |
| | | sl = sl.replace(reg, '') |
| | | } |
| | | |
| | | return sl |
| | | } |
| | | |
| | | let _scripts = [] |
| | | _dataresource = _dataresource.replace('/*system_query*/', '') |
| | | _dataresource = getTrueSql(_dataresource) |
| | | scripts.forEach(item => { |
| | | _scripts.push({...item, sql: getTrueSql(item.sql)}) |
| | | }) |
| | | |
| | | arr.forEach(item => { |
| | | let reg = new RegExp(item, 'ig') |
| | | if (reg.test(_dataresource)) { |
| | | errors.push(`数据源中存在未替换值${item}`) |
| | | } |
| | | scripts && scripts.forEach(script => { |
| | | _scripts.forEach(script => { |
| | | if (reg.test(script.sql)) { |
| | | errors.push(`自定义脚本(${script.$index || ''})存在未替换值${item}`) |
| | | } |
| | |
| | | visible: false |
| | | } |
| | | |
| | | resetconfig = (item, uuids = {}) => { |
| | | resetconfig = (item) => { |
| | | let appType = sessionStorage.getItem('appType') |
| | | |
| | | if (item.type === 'tabs') { |
| | | uuids[item.uuid] = MenuUtils.getuuid() |
| | | item.uuid = uuids[item.uuid] |
| | | item.uuid = MenuUtils.getuuid() |
| | | item.setting.name = item.setting.name + MenuUtils.getSignName() |
| | | item.name = item.setting.name |
| | | |
| | | item.subtabs.forEach(tab => { |
| | | uuids[tab.uuid] = MenuUtils.getuuid() |
| | | tab.uuid = uuids[tab.uuid] |
| | | tab.uuid = MenuUtils.getuuid() |
| | | |
| | | if (appType !== 'mob') { |
| | | tab.components = tab.components.filter(cell => cell.type !== 'menubar') |
| | | } |
| | | |
| | | tab.components = tab.components.map(cell => { |
| | | cell = this.resetconfig(cell, uuids) |
| | | cell = this.resetconfig(cell) |
| | | return cell |
| | | }) |
| | | }) |
| | | } else if (item.type === 'group') { |
| | | uuids[item.uuid] = MenuUtils.getuuid() |
| | | item.uuid = uuids[item.uuid] |
| | | item.uuid = MenuUtils.getuuid() |
| | | item.setting.name = item.setting.name + MenuUtils.getSignName() |
| | | item.name = item.setting.name |
| | | |
| | | item.components = item.components.map(cell => { |
| | | cell = MenuUtils.resetComponentConfig(cell, uuids) |
| | | cell = MenuUtils.resetComponentConfig(cell) |
| | | return cell |
| | | }) |
| | | } else { |
| | | item = MenuUtils.resetComponentConfig(item, uuids) |
| | | item = MenuUtils.resetComponentConfig(item) |
| | | } |
| | | |
| | | return item |
| | |
| | | this.callback = null |
| | | } |
| | | |
| | | updateStyle = (style) => { |
| | | updateStyle = (style, prop) => { |
| | | const { card } = this.state |
| | | |
| | | let _style = { |
| | | ...card, |
| | | ...style |
| | | } |
| | | |
| | | if (prop && !_style[prop]) { |
| | | delete _style[prop] |
| | | } |
| | | |
| | | this.setState({ |
| | |
| | | * @description 修改背景颜色 ,颜色控件 |
| | | */ |
| | | changeBackgroundColor = (val) => { |
| | | this.updateStyle({backgroundColor: val}) |
| | | this.updateStyle({backgroundColor: val}, 'backgroundColor') |
| | | } |
| | | |
| | | changeBackground = (val) => { |
| | |
| | | } |
| | | |
| | | changeWidth = (val) => { |
| | | const { card } = this.state |
| | | let _style = {...card} |
| | | |
| | | if (val === '0px') { |
| | | delete _style.width |
| | | } else { |
| | | _style.width = val |
| | | } |
| | | |
| | | this.setState({ |
| | | card: _style |
| | | }) |
| | | |
| | | this.callback && this.callback(_style) |
| | | this.updateStyle({width: val === '0px' ? '' : val}, 'width') |
| | | } |
| | | |
| | | changeHeight = (val) => { |
| | | let _val = val |
| | | if (_val === '0px') { |
| | | _val = 'auto' |
| | | } |
| | | |
| | | this.updateStyle({height: _val}) |
| | | this.updateStyle({height: val === '0px' ? '' : val}, 'height') |
| | | } |
| | | |
| | | changeNormalStyle = (val, type) => { |
| | |
| | | label={<BgColorsOutlined title="背景颜色"/>} |
| | | labelCol={{xs: { span: 24 }, sm: { span: 4 }}} wrapperCol={ {xs: { span: 24 }, sm: { span: 20 }} } |
| | | > |
| | | <ColorSketch value={card.backgroundColor || '#ffffff'} onChange={this.changeBackgroundColor} /> |
| | | <ColorSketch allowClear={true} value={card.backgroundColor || ''} onChange={this.changeBackgroundColor} /> |
| | | </Form.Item> |
| | | <Form.Item |
| | | colon={false} |
| | |
| | | .color-sketch-block { |
| | | position: relative; |
| | | top: 10px; |
| | | .color-sketch-value { |
| | | .anticon-close-circle { |
| | | background: transparent; |
| | | } |
| | | .anticon-close-circle:hover { |
| | | color: #ffffff; |
| | | } |
| | | } |
| | | } |
| | | .color-sketch-block + .ant-input { |
| | | float: right; |
| | |
| | | newcard.span = 24 |
| | | newcard.focus = true |
| | | |
| | | if (item.subType === 'textarea') { |
| | | newcard.required = 'false' |
| | | } |
| | | |
| | | let targetId = '' |
| | | |
| | | if (item.dropTargetId) { |
| | |
| | | controlFields: [ |
| | | {field: 'reload', values: ['back']}, |
| | | {field: 'linkmenu', values: ['scan']}, |
| | | {field: 'prefix', values: ['scan']}, |
| | | ], |
| | | span: 24 |
| | | }, |
| | |
| | | options: menulist |
| | | }, |
| | | { |
| | | type: 'text', |
| | | field: 'prefix', |
| | | label: '前缀', |
| | | initval: wrap.prefix || '', |
| | | tooltip: '扫码信息将与前缀拼接后执行。注:跳转菜单需以mkbid开头。', |
| | | required: false |
| | | }, |
| | | { |
| | | type: 'radio', |
| | | field: 'minishow', |
| | | label: '小程序中', |
| | |
| | | import { is, fromJS } from 'immutable' |
| | | import { Button, Modal, notification } from 'antd' |
| | | import moment from 'moment' |
| | | import md5 from 'md5' |
| | | |
| | | import Utils from '@/utils/utils.js' |
| | | import MenuUtils, { getTables } from '@/utils/utils-custom.js' |
| | |
| | | } |
| | | |
| | | if (_config.components) { |
| | | let uuids = {} // 重置公共数据源 |
| | | let commonId = Utils.getuuid() |
| | | if (_config.interfaces && _config.interfaces.length > 0) { |
| | | config.interfaces = _config.interfaces.map(inter => { |
| | | uuids[inter.uuid] = this.getuuid() |
| | | inter.uuid = uuids[inter.uuid] |
| | | inter.uuid = md5(commonId + inter.uuid) |
| | | return inter |
| | | }) |
| | | } |
| | | config.components = MenuUtils.resetConfig(_config.components, uuids, res.clearMenu === 'true') |
| | | config.components = MenuUtils.resetConfig(_config.components, commonId, res.clearMenu === 'true') |
| | | config.tables = _config.tables || [] |
| | | config.style = _config.style || {} |
| | | config.statusBarbgColor = _config.statusBarbgColor || '' |
| | |
| | | |
| | | if (cell.syncComponentId === item.setting.supModule) { |
| | | cell.syncComponentId = '' |
| | | if (cell.execSuccess === 'line' || cell.execSuccess === 'grid') { |
| | | cell.execSuccess = 'mainline' |
| | | } |
| | | } |
| | | |
| | | if (cell.OpenType === 'funcbutton' && cell.funcType === 'print' && cell.verify) { // 打印机设置 |
| | |
| | | |
| | | if (cell.syncComponentId === item.setting.supModule) { |
| | | cell.syncComponentId = '' |
| | | if (cell.execSuccess === 'line' || cell.execSuccess === 'grid') { |
| | | cell.execSuccess = 'mainline' |
| | | } |
| | | } |
| | | |
| | | if (cell.OpenType === 'funcbutton' && cell.funcType === 'print' && cell.verify) { // 打印机设置 |
| | |
| | | let subconfig = fromJS(_config).toJS() |
| | | |
| | | subconfig.columns = subconfig.subColumns || [] |
| | | subconfig.setting.primaryKey = subconfig.setting.subKey |
| | | |
| | | subcard.style = subcard.backStyle |
| | | subcard.elements = subcard.backElements |
| | |
| | | .circle-select:hover { |
| | | border-color: var(--mk-sys-color); |
| | | } |
| | | >.card-row-list { |
| | | >.ant-col:not(.extend-card) { |
| | | .card-item-box:hover { |
| | | background-color: var(--mk-sys-color2); |
| | | } |
| | | } |
| | | } |
| | | .sub-card-wrap.mk-parity-bg { |
| | | .ant-col:nth-child(even){ |
| | | .card-item-box:not(:hover) { |
| | | background-color: var(--mk-sys-color1); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | .card-item-wrap { |
| | | .card-item-box { |
| | |
| | | overflow: hidden; |
| | | transition: height 0.3s; |
| | | } |
| | | .sub-card-wrap { |
| | | .card-item-box:hover { |
| | | background-color: var(--mk-sys-color2); |
| | | } |
| | | } |
| | | } |
| | | .card-item-wrap.flex-card { |
| | | >.card-item-box:first-child { |
| | |
| | | margin-right: 35px; |
| | | } |
| | | |
| | | .sub-card-wrap.mk-parity-bg { |
| | | .ant-col:nth-child(even){ |
| | | .card-item-box:not(:hover) { |
| | | background-color: var(--mk-sys-color1); |
| | | .data-zoom:not(.check) { |
| | | .sub-card-wrap.mk-parity-bg { |
| | | .ant-col:nth-child(even){ |
| | | .card-item-box { |
| | | background-color: var(--mk-sys-color1); |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | render() { |
| | | const { config, loading, BID, BData, data, group, dict } = this.state |
| | | |
| | | if (config.wrap.empty === 'hidden' && (!data || data.$$empty)) return null |
| | | |
| | | return ( |
| | | <div className="custom-simple-form-box" id={'anchor' + config.uuid} style={{...config.style}}> |
| | | {loading ? |
| | |
| | | _group = _groups || _group |
| | | } |
| | | |
| | | config.titleStyle = {} |
| | | config.sortStyle = {} |
| | | |
| | | if (config.style.fontSize) { |
| | | let size = parseInt(config.style.fontSize) |
| | | config.titleStyle = {fontSize: size} |
| | | let s = size * 1.5 + 'px' |
| | | config.sortStyle = {width: s, height: s, lineHeight: s, borderRadius: s} |
| | | } |
| | | |
| | | this.setState({ |
| | | sync: _sync, |
| | | data: _data, |
| | |
| | | render() { |
| | | const { config, loading, BID, BData, data, group, dict, step } = this.state |
| | | |
| | | if (config.wrap.empty === 'hidden' && (!data || data.$$empty)) return null |
| | | |
| | | return ( |
| | | <div className="custom-normal-form-box" id={'anchor' + config.uuid} style={{...config.style}}> |
| | | {loading ? |
| | |
| | | } |
| | | {config.wrap.groupLabel !== 'hidden' ? <div className="mk-normal-form-title"> |
| | | {config.subcards.map(card => ( |
| | | <div key={card.uuid} className={'form-title' + (card.sort <= step ? ' active' : '')}> |
| | | <span className="form-sort" style={{background: config.wrap.color}}>{card.sort}</span> |
| | | <div key={card.uuid} style={config.titleStyle} className={'form-title' + (card.sort <= step ? ' active' : '')}> |
| | | <span className="form-sort" style={{background: config.wrap.color, ...config.sortStyle}}>{card.sort}</span> |
| | | <span className="before-line" style={{background: config.wrap.color}}></span> |
| | | <span className="after-line" style={{background: config.wrap.color}}></span> |
| | | {card.setting.title} |
| | |
| | | line-height: 30px; |
| | | min-height: 50px; |
| | | margin-bottom: 20px; |
| | | font-weight: inherit; |
| | | .form-title { |
| | | position: relative; |
| | | flex: 1; |
| | | text-align: center; |
| | | font-weight: inherit; |
| | | .form-sort { |
| | | background: #d8d8d8; |
| | | display: block; |
| | |
| | | return group |
| | | }) |
| | | |
| | | config.titleStyle = {} |
| | | |
| | | if (config.style.fontSize) { |
| | | config.titleStyle = {fontSize: parseInt(config.style.fontSize)} |
| | | } |
| | | |
| | | this.setState({ |
| | | sync: _sync, |
| | | data: _data, |
| | |
| | | render() { |
| | | const { config, loading, BID, BData, data, group, dict } = this.state |
| | | |
| | | if (config.wrap.empty === 'hidden' && (!data || data.$$empty)) return null |
| | | |
| | | return ( |
| | | <div className="custom-tab-form-box" id={'anchor' + config.uuid} style={{...config.style}}> |
| | | {loading ? |
| | |
| | | } |
| | | {config.wrap.groupLabel !== 'hidden' ? <div className={'mk-normal-form-title ' + config.wrap.tabtype}> |
| | | {config.subcards.map(card => ( |
| | | <div key={card.uuid} onClick={() => this.changeGroup(card)} className={'form-title' + (group && group.uuid === card.uuid ? ' active' : '')}> |
| | | <div key={card.uuid} onClick={() => this.changeGroup(card)} style={config.titleStyle} className={'form-title' + (group && group.uuid === card.uuid ? ' active' : '')}> |
| | | {card.setting.title} |
| | | </div>)) |
| | | } |
| | |
| | | min-height: 36px; |
| | | margin-bottom: 20px; |
| | | font-size: 16px; |
| | | font-weight: inherit; |
| | | .form-title { |
| | | position: relative; |
| | | flex: 1; |
| | | text-align: center; |
| | | cursor: pointer; |
| | | font-weight: inherit; |
| | | } |
| | | } |
| | | .mk-normal-form-title.mkbtn { |
| | |
| | | import React, {Component} from 'react' |
| | | import PropTypes from 'prop-types' |
| | | import { is, fromJS } from 'immutable' |
| | | import { notification, Select, Divider } from 'antd' |
| | | import { notification, Select, Divider, Modal } from 'antd' |
| | | import { PlusOutlined } from '@ant-design/icons' |
| | | import moment from 'moment' |
| | | |
| | |
| | | import './index.scss' |
| | | |
| | | const { Option } = Select |
| | | const { confirm } = Modal |
| | | |
| | | class AccountModule extends Component { |
| | | static propTpyes = { |
| | |
| | | } |
| | | |
| | | changeBook = (value) => { |
| | | const { books } = this.state |
| | | const { books, activeItem } = this.state |
| | | |
| | | let activeItem = books.filter(item => item.id === value)[0] |
| | | let Item = books.filter(item => item.id === value)[0] |
| | | |
| | | this.setState({activeItem}) |
| | | |
| | | if (activeItem) { |
| | | MKEmitter.emit('resetSelectLine', this.props.config.uuid, activeItem.id, activeItem) |
| | | |
| | | let userid = sessionStorage.getItem('UserID') || '' |
| | | let sid = localStorage.getItem('SessionUid') || '' |
| | | let param = { |
| | | func: 'sPC_TableData_InUpDe', |
| | | LText: `delete tmp_session_show_key where createuserid='${userid}' and createuser='${sid}' and key_type='fcc_years' |
| | | insert into tmp_session_show_key ( key_id,key_type,createuserid,CreateUser,CreateStaff) |
| | | select '${activeItem.id}','fcc_years','${userid}','${sid}','${sessionStorage.getItem('Full_Name') || ''}'`, |
| | | exec_type: 'y' |
| | | } |
| | | |
| | | param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') |
| | | param.secretkey = Utils.encrypt('', param.timestamp) |
| | | param.LText = Utils.formatOptions(param.LText) |
| | | |
| | | Api.genericInterface(param) |
| | | if (!activeItem && Item) { |
| | | this.setBook(Item) |
| | | } else if (Item) { |
| | | const that = this |
| | | confirm({ |
| | | title: '确定切换账套吗?', |
| | | content: '切换账套时系统需要刷新。', |
| | | onOk() { |
| | | return new Promise(resolve => { |
| | | that.setBook(Item, resolve) |
| | | }) |
| | | }, |
| | | onCancel() {} |
| | | }) |
| | | } |
| | | } |
| | | |
| | | setBook = (item, resolve) => { |
| | | if (!resolve) { |
| | | this.setState({activeItem: item}) |
| | | |
| | | MKEmitter.emit('resetSelectLine', this.props.config.uuid, item.id, item) |
| | | } |
| | | |
| | | let userid = sessionStorage.getItem('UserID') || '' |
| | | let sid = localStorage.getItem('SessionUid') || '' |
| | | let param = { |
| | | func: 'sPC_TableData_InUpDe', |
| | | LText: `delete tmp_session_show_key where createuserid='${userid}' and key_type='fcc_years' |
| | | insert into tmp_session_show_key ( key_id,key_type,createuserid,CreateUser,CreateStaff) |
| | | select '${item.id}','fcc_years','${userid}','${sid}','${sessionStorage.getItem('Full_Name') || ''}'`, |
| | | exec_type: 'y' |
| | | } |
| | | |
| | | param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') |
| | | param.secretkey = Utils.encrypt('', param.timestamp) |
| | | param.LText = Utils.formatOptions(param.LText) |
| | | |
| | | Api.genericInterface(param).then(res => { |
| | | if (!res.status) { |
| | | notification.warning({ |
| | | top: 92, |
| | | message: res.message, |
| | | duration: 5 |
| | | }) |
| | | resolve && resolve() |
| | | return |
| | | } |
| | | |
| | | if (resolve) { |
| | | window.location.reload() |
| | | } |
| | | }) |
| | | } |
| | | |
| | | addBook = () => { |
| | |
| | | {books.map(item => ( |
| | | <Option disabled={!item.months} key={item.id}>{item.account_name}</Option> |
| | | ))} |
| | | </Select> : <Select value={activeItem ? activeItem.id : ''} placeholder="请选择账套" onChange={this.changeBook}> |
| | | </Select> : <Select value={activeItem ? activeItem.id : ''} disabled={config.wrap.readonly === 'true'} placeholder="请选择账套" onChange={this.changeBook}> |
| | | {books.map(item => ( |
| | | <Option disabled={!item.months} key={item.id}>{item.account_name}</Option> |
| | | ))} |
| | |
| | | .date { |
| | | margin-left: 15px; |
| | | } |
| | | .ant-select.ant-select-disabled { |
| | | .ant-select-selection:hover { |
| | | border-color: #d9d9d9; |
| | | } |
| | | .ant-select-selection, .ant-select-selection:focus, .ant-select-selection:active { |
| | | border-color: #d9d9d9; |
| | | box-shadow: none; |
| | | } |
| | | } |
| | | } |
| | | |
| | | .mk-add-book { |
| | |
| | | } |
| | | |
| | | // config.wrap.type = 'checkVoucher' |
| | | // BID = '20230214130744811P0K95RQ155KG0QIQOFV' |
| | | // BID = '20230228173542370E2F4FC1773704C29A6A4' |
| | | |
| | | // config.wrap.type = 'checkTemp' |
| | | // BID = '20230214174458780MFR8IA576ON4VKNOLVH' |
| | |
| | | let line = {...record} |
| | | line[col.field] = value |
| | | |
| | | if (col.field === 'subject_voucher_text') { |
| | | MKEmitter.emit('changeRecord', col.tableId, line) |
| | | |
| | | setTimeout(() => { |
| | | let cl = {subject_voucher_text: 'subject_code', subject_code: 'debit', debit: 'credit'} |
| | | MKEmitter.emit('tdFocus', cl[col.uuid] + record.uuid) |
| | | }, 50) |
| | | return |
| | | } |
| | | |
| | | if (col.field === 'debit') { |
| | | line.credit = '' |
| | | if (isNaN(line.debit)) { |
| | |
| | | if (value !== record[col.field]) { |
| | | let line = {...record, [col.field]: value} |
| | | |
| | | if (col.field === 'subject_voucher_text') { |
| | | MKEmitter.emit('changeRecord', col.tableId, line) |
| | | return |
| | | } |
| | | |
| | | if (col.field === 'debit') { |
| | | line.credit = '' |
| | | if (isNaN(line.debit)) { |
| | |
| | | setting.orisel = true |
| | | } |
| | | |
| | | _config.cols.forEach(column => { |
| | | if (column.type === 'action') { |
| | | column.operations = column.elements |
| | | } |
| | | }) |
| | | |
| | | _config.style = _config.style || {} |
| | | |
| | | this.setState({ |
| | |
| | | }) |
| | | } |
| | | |
| | | if (column.type === 'action') { |
| | | column.operations = column.elements |
| | | } |
| | | |
| | | _columns.push(column) |
| | | }) |
| | | |
| | |
| | | pageIndex: 1, // 初始页面索引 |
| | | pageSize: 10, // 每页数据条数 |
| | | columns: null, // 显示列 |
| | | fields: [], |
| | | forms: [], |
| | | pickup: false, // 收起未选择项 |
| | | orderfields: {}, // 排序id与field转换 |
| | | loading: false, |
| | |
| | | |
| | | let _columns = [] |
| | | let deForms = [] |
| | | columns.forEach(item => { |
| | | if (!initEditLine && item.editable === 'true') { |
| | | initEditLine = item |
| | | } |
| | | let _forms = {} |
| | | |
| | | if (item.type === 'text' && item.editable === 'true' && item.editType === 'select' && item.resourceType === '1') { |
| | | let _option = Utils.getSelectQueryOptions(item) |
| | | let getColumns = (cols) => { |
| | | return cols.map(item => { |
| | | let cell = null |
| | | |
| | | if (item.type === 'colspan') { |
| | | cell = { title: item.label, align: item.Align } |
| | | cell.children = getColumns(item.subcols) |
| | | } else { |
| | | if (item.editable === 'true') { |
| | | _forms[item.field] = item |
| | | if (!initEditLine) { |
| | | initEditLine = item |
| | | } |
| | | } |
| | | |
| | | if (item.type === 'text' && item.editable === 'true' && item.editType === 'select' && item.resourceType === '1') { |
| | | let _option = Utils.getSelectQueryOptions(item) |
| | | |
| | | if (window.GLOB.debugger === true || window.debugger === true) { |
| | | console.info(_option.sql) |
| | | } |
| | | |
| | | item.base_sql = window.btoa(window.encodeURIComponent(_option.sql)) |
| | | item.arr_field = _option.field |
| | | |
| | | deForms.push(item) |
| | | } |
| | | |
| | | if (item.field) { |
| | | orderfields[item.uuid] = item.field |
| | | } |
| | | |
| | | if (window.GLOB.debugger === true || window.debugger === true) { |
| | | console.info(_option.sql) |
| | | cell = { |
| | | align: item.Align, |
| | | dataIndex: item.uuid, |
| | | title: item.label, |
| | | sorter: !!(item.field && item.IsSort === 'true'), |
| | | width: item.Width || 120, |
| | | $type: item.type, |
| | | onCell: record => ({ |
| | | record, |
| | | col: item, |
| | | config: item.type === 'custom' || item.type === 'action' ? {setting, columns: fields} : null, |
| | | }) |
| | | } |
| | | } |
| | | |
| | | return cell |
| | | }) |
| | | } |
| | | _columns = getColumns(columns) |
| | | |
| | | item.base_sql = window.btoa(window.encodeURIComponent(_option.sql)) |
| | | item.arr_field = _option.field |
| | | let forms = [] |
| | | fields.forEach(item => { |
| | | if (item.field === setting.primaryKey) return |
| | | |
| | | deForms.push(item) |
| | | if (_forms[item.field]) { |
| | | forms.push({..._forms[item.field], datatype: item.datatype}) |
| | | } else { |
| | | forms.push(item) |
| | | } |
| | | }) |
| | | |
| | | if (item.field) { |
| | | orderfields[item.uuid] = item.field |
| | | _columns.forEach(item => { |
| | | if (item.$type === 'action') return |
| | | |
| | | let _copy = fromJS(item).toJS() |
| | | _copy.sorter = false |
| | | |
| | | if (item.editable === 'true') { |
| | | _copy.title = <span>{item.label}<EditOutlined className="system-color mk-edit-sign"/></span> |
| | | } |
| | | |
| | | let _item = { |
| | | align: item.Align, |
| | | dataIndex: item.uuid, |
| | | title: item.label, |
| | | sorter: item.field && item.IsSort === 'true', |
| | | width: item.Width || 120, |
| | | onCell: record => ({ |
| | | record, |
| | | col: item, |
| | | config: item.type === 'custom' || item.type === 'action' ? {setting, columns: fields} : null, |
| | | }) |
| | | } |
| | | |
| | | if (item.type !== 'action') { |
| | | let _copy = fromJS(_item).toJS() |
| | | _copy.sorter = false |
| | | |
| | | if (item.editable === 'true') { |
| | | _copy.title = <span>{item.label}<EditOutlined className="system-color mk-edit-sign"/></span> |
| | | } |
| | | edColumns.push(_copy) |
| | | } |
| | | _columns.push(_item) |
| | | edColumns.push(_copy) |
| | | }) |
| | | |
| | | if (setting.delable !== 'false' && setting.operType !== 'buoyMode') { |
| | |
| | | }) |
| | | } |
| | | |
| | | // if (setting.borderColor) { // 边框颜色 |
| | | // let style = `#${setting.tableId} table, #${setting.tableId} tr, #${setting.tableId} th, #${setting.tableId} td {border-color: ${setting.borderColor}}` |
| | | // let ele = document.createElement('style') |
| | | // ele.innerHTML = style |
| | | // document.getElementsByTagName('head')[0].appendChild(ele) |
| | | // } |
| | | |
| | | let size = (setting.pageSize || 10) + '' |
| | | let pageOptions = ['10', '25', '50', '100', '500', '1000'] |
| | | |
| | |
| | | } |
| | | |
| | | this.setState({ |
| | | forms, |
| | | pageSize: setting.pageSize || 10, |
| | | pageOptions, |
| | | columns: _columns, |
| | |
| | | } |
| | | |
| | | componentDidMount () { |
| | | const { fields, setting } = this.props |
| | | |
| | | this.setState({ |
| | | fields: fields.filter(item => item.field !== setting.primaryKey), |
| | | }) |
| | | |
| | | MKEmitter.addListener('subLine', this.subLine) |
| | | MKEmitter.addListener('nextLine', this.nextLine) |
| | | MKEmitter.addListener('addRecord', this.addLine) |
| | |
| | | } |
| | | |
| | | subLine = (col, record) => { |
| | | const { tableId, fields, edData } = this.state |
| | | const { tableId, forms, edData } = this.state |
| | | |
| | | if (col && col.tableId !== tableId) return |
| | | |
| | |
| | | setTimeout(() => { |
| | | let item = fromJS(record).toJS() |
| | | let line = [] |
| | | fields.forEach(col => { |
| | | forms.forEach(col => { |
| | | if (col.editable !== 'true' || item.$deleted) { |
| | | if (col.type === 'number') { |
| | | item[col.field] = +item[col.field] |
| | |
| | | } |
| | | |
| | | plusLine = () => { |
| | | const { edData, fields, initEditLine } = this.state |
| | | const { edData, forms, initEditLine } = this.state |
| | | |
| | | let item = {...edData[edData.length - 1]} |
| | | |
| | |
| | | item.$type = 'add' |
| | | item.$Index = '' |
| | | |
| | | fields.forEach(col => { |
| | | forms.forEach(col => { |
| | | if (col.initval !== '$copy') { |
| | | item[col.field] = col.initval |
| | | } |
| | |
| | | |
| | | addLine = (id, record) => { |
| | | const { BID } = this.props |
| | | const { edData, fields, tableId } = this.state |
| | | const { edData, forms, tableId } = this.state |
| | | |
| | | if (id) { |
| | | if (id !== tableId) return |
| | |
| | | item.$Index = '' |
| | | item.$$BID = BID || '' |
| | | |
| | | fields.forEach(col => { |
| | | forms.forEach(col => { |
| | | if (col.initval !== '$copy') { |
| | | item[col.field] = col.initval |
| | | } |
| | |
| | | item.$$BID = BID || '' |
| | | } |
| | | |
| | | fields.forEach(col => { |
| | | forms.forEach(col => { |
| | | if (col.initval !== '$copy') { |
| | | item[col.field] = col.initval |
| | | } |
| | |
| | | } |
| | | |
| | | checkData = () => { |
| | | const { edData, fields } = this.state |
| | | const { edData, forms } = this.state |
| | | |
| | | if (edData.length === 0) { |
| | | notification.warning({ |
| | |
| | | let Index = 1 |
| | | let data = fromJS(edData).toJS().map(item => { |
| | | let line = [] |
| | | fields.forEach(col => { |
| | | forms.forEach(col => { |
| | | if (col.editable !== 'true' || item.$deleted) { |
| | | if (col.type === 'number') { |
| | | item[col.field] = +item[col.field] |
| | |
| | | |
| | | submit = (data, type) => { |
| | | const { submit, BID, setting } = this.props |
| | | const { fields } = this.state |
| | | const { forms } = this.state |
| | | |
| | | if (type !== 'simple' && (setting.commit === 'change' || setting.commit === 'simple')) { |
| | | data = data.filter(item => !item.$origin) |
| | |
| | | return |
| | | } |
| | | |
| | | let result = getEditTableSql(submit, data, fields) |
| | | let result = getEditTableSql(submit, data, forms) |
| | | |
| | | let param = { |
| | | excel_in: result.lines, |
| | |
| | | </div> : null} |
| | | <div className="edit-custom-table-btn-wrap" style={submit.wrapStyle}> |
| | | {!submit.hasAction && pickup ? <Button style={submit.style} onClick={() => setTimeout(() => {this.checkData()}, 10)} loading={loading} className="submit-table" type="link">提交</Button> : null} |
| | | <Switch title="编辑" className="main-pickup" checkedChildren="开" unCheckedChildren="关" disabled={loading || this.props.loading} checked={pickup} onChange={this.pickupChange} /> |
| | | {setting.switchable !== 'false' ? <Switch title="编辑" className="main-pickup" checkedChildren="开" unCheckedChildren="关" disabled={loading || this.props.loading} checked={pickup} onChange={this.pickupChange} /> : null} |
| | | </div> |
| | | <div className={`edit-custom-table ${pickup ? 'editable' : ''} ${setting.tableHeader || ''} ${setting.operType || ''} ${height ? 'fixed-height' : ''} ${setting.mode || ''} table-vertical-${setting.vertical || ''}`} id={tableId}> |
| | | <div className={`edit-custom-table ${pickup ? 'editable' : ''} ${setting.tableHeader || ''} ${setting.operType || ''} ${height ? 'fixed-height' : ''} ${setting.mode || ''} table-vertical-${setting.vertical || ''} mk-edit-${setting.editType || 'simple'}`} id={tableId}> |
| | | <Table |
| | | rowKey="$$uuid" |
| | | components={components} |
| | |
| | | } |
| | | } |
| | | } |
| | | .edit-custom-table.mk-edit-multi { |
| | | th .ant-table-column-title .anticon-edit { |
| | | display: none; |
| | | } |
| | | } |
| | | .edit-custom-table.editable { |
| | | td { |
| | | background-color: #ffffff!important; |
| | |
| | | } |
| | | } |
| | | |
| | | _config.cols.forEach(column => { |
| | | if (column.type === 'action') { |
| | | column.operations = column.elements |
| | | } |
| | | }) |
| | | |
| | | // if (setting.color) { |
| | | // setting.style.color = setting.color |
| | | // } |
| | | // if (setting.fontSize) { |
| | | // setting.style.fontSize = setting.fontSize |
| | | // } |
| | | |
| | | if (_config.wrap.collapse === 'true') { |
| | | _config.wrap.title = _config.wrap.title || ' ' |
| | | } |
| | |
| | | return |
| | | } |
| | | |
| | | // 内部函数为z_mk_express,表示查询快递信息 |
| | | if (config.setting.interType === 'inner' && config.setting.innerFunc === 'z_mk_express') { |
| | | this.getExpress() |
| | | return |
| | |
| | | |
| | | if (!mutil && cell.syncComponentId === item.setting.supModule) { |
| | | cell.syncComponentId = '' |
| | | if (cell.execSuccess === 'line' || cell.execSuccess === 'grid') { |
| | | cell.execSuccess = 'mainline' |
| | | } |
| | | } |
| | | |
| | | if (cell.OpenType === 'funcbutton' && cell.funcType === 'print' && cell.verify) { // 打印机设置 |
| | |
| | | |
| | | if (!mutil && cell.syncComponentId === item.setting.supModule) { |
| | | cell.syncComponentId = '' |
| | | if (cell.execSuccess === 'line' || cell.execSuccess === 'grid') { |
| | | cell.execSuccess = 'mainline' |
| | | } |
| | | } |
| | | |
| | | if (cell.OpenType === 'funcbutton' && cell.funcType === 'print' && cell.verify) { // 打印机设置 |
| | |
| | | |
| | | if (!mutil && cell.syncComponentId === item.setting.supModule) { |
| | | cell.syncComponentId = '' |
| | | if (cell.execSuccess === 'line' || cell.execSuccess === 'grid') { |
| | | cell.execSuccess = 'mainline' |
| | | } |
| | | } |
| | | |
| | | if (cell.OpenType === 'funcbutton' && cell.funcType === 'print' && cell.verify) { // 打印机设置 |
| | |
| | | |
| | | if (cell.syncComponentId === item.wrap.supModule) { |
| | | cell.syncComponentId = '' |
| | | if (cell.execSuccess === 'line' || cell.execSuccess === 'grid') { |
| | | cell.execSuccess = 'mainline' |
| | | } |
| | | } |
| | | |
| | | if (cell.OpenType === 'funcbutton' && cell.funcType === 'print' && cell.verify) { // 打印机设置 |
| | |
| | | |
| | | if (cell.syncComponentId === item.setting.supModule) { |
| | | cell.syncComponentId = '' |
| | | if (cell.execSuccess === 'line' || cell.execSuccess === 'grid') { |
| | | cell.execSuccess = 'mainline' |
| | | } |
| | | } |
| | | |
| | | if (cell.OpenType === 'funcbutton' && cell.funcType === 'print' && cell.verify) { // 打印机设置 |
| | |
| | | |
| | | if (group.subButton.syncComponentId === item.setting.supModule) { |
| | | group.subButton.syncComponentId = '' |
| | | if (group.subButton.execSuccess === 'grid') { |
| | | group.subButton.execSuccess = 'mainline' |
| | | } |
| | | } |
| | | |
| | | group.fields = group.fields.map(cell => { |
| | |
| | | |
| | | // dataName 系统生成的数据源名称 |
| | | if (component.setting.sync === 'true') { |
| | | component.dataName = Utils.getdataName() |
| | | component.dataName = 'mk' + component.uuid.slice(-18) |
| | | } |
| | | |
| | | // floor 组件的层级 |
| | |
| | | |
| | | if (!mutil && cell.syncComponentId === item.setting.supModule) { |
| | | cell.syncComponentId = '' |
| | | if (cell.execSuccess === 'line' || cell.execSuccess === 'grid') { |
| | | cell.execSuccess = 'mainline' |
| | | } |
| | | } |
| | | |
| | | if (cell.btnstyle) { // 兼容 |
| | |
| | | |
| | | if (!mutil && cell.syncComponentId === item.setting.supModule) { |
| | | cell.syncComponentId = '' |
| | | if (cell.execSuccess === 'line' || cell.execSuccess === 'grid') { |
| | | cell.execSuccess = 'mainline' |
| | | } |
| | | } |
| | | if (card.btnstyle) { // 兼容 |
| | | card.style = card.style || {} |
| | |
| | | |
| | | if (!mutil && cell.syncComponentId === item.setting.supModule) { |
| | | cell.syncComponentId = '' |
| | | if (cell.execSuccess === 'line' || cell.execSuccess === 'grid') { |
| | | cell.execSuccess = 'mainline' |
| | | } |
| | | } |
| | | |
| | | if (card.btnstyle) { // 兼容 |
| | |
| | | |
| | | if (cell.syncComponentId === item.wrap.supModule) { |
| | | cell.syncComponentId = '' |
| | | if (cell.execSuccess === 'line' || cell.execSuccess === 'grid') { |
| | | cell.execSuccess = 'mainline' |
| | | } |
| | | } |
| | | } else if (['text', 'number', 'formula'].includes(cell.eleType)) { |
| | | if (!cell.height) { |
| | |
| | | |
| | | if (cell.syncComponentId === item.setting.supModule) { |
| | | cell.syncComponentId = '' |
| | | if (cell.execSuccess === 'line' || cell.execSuccess === 'grid') { |
| | | cell.execSuccess = 'mainline' |
| | | } |
| | | } |
| | | |
| | | if (cell.btnstyle) { // 兼容 |
| | |
| | | |
| | | if (group.subButton.syncComponentId === item.setting.supModule) { |
| | | group.subButton.syncComponentId = '' |
| | | if (group.subButton.execSuccess === 'grid') { |
| | | group.subButton.execSuccess = 'mainline' |
| | | } |
| | | } |
| | | |
| | | group.fields = group.fields.map(cell => { |
| | |
| | | |
| | | // dataName 系统生成的数据源名称 |
| | | if (component.setting.sync === 'true') { |
| | | component.dataName = Utils.getdataName() |
| | | component.dataName = 'mk' + component.uuid.slice(-18) |
| | | } |
| | | |
| | | // floor 组件的层级 |
| | |
| | | let sheetName = btn.verify.sheet |
| | | let errDetail = '' |
| | | |
| | | if (Object.keys(workbook.Sheets).length === 1) { |
| | | if (sheetName === 'Sheet1' && Object.keys(workbook.Sheets).length === 1) { |
| | | sheetName = Object.keys(workbook.Sheets)[0] |
| | | } |
| | | |
| | |
| | | |
| | | this.table2excel(column, table, this.state.excelName.replace(/\.xlsx/ig, '.xls')) |
| | | |
| | | if (btn.verify && btn.verify.enable === 'true' && btn.verify.script) { |
| | | if (btn.verify.enable === 'true' && btn.verify.script) { |
| | | this.execCustomScript() |
| | | } else { |
| | | this.execSuccess({ErrCode: 'S', ErrMesg: '导出成功!'}) |
| | | } |
| | | } else { |
| | | let letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' |
| | | let cols = [] |
| | | |
| | | for (let index = 0; index < columns.length; index++) { |
| | | let i = Math.floor(index / 26) |
| | | let s = letters[i - 1] || '' |
| | | |
| | | cols.push(s + letters[index % 26]) |
| | | } |
| | | |
| | | let table = [] |
| | | let _header = [] |
| | | let _topRow = {} |
| | | let colwidth = [] |
| | | let requires = [] |
| | | let merges = [] |
| | | |
| | | columns.forEach((col, i) => { |
| | | _header.push(col.Column) |
| | | _topRow[col.Column] = col.Text |
| | | colwidth.push({width: col.Width || 20}) |
| | | colwidth.push({wch: col.Width || 20}) |
| | | if (col.required === 'true') { |
| | | requires.push(i) |
| | | } |
| | | }) |
| | | |
| | | let table = [] |
| | | |
| | | table.push(_topRow) |
| | | |
| | | if (btn.verify.merge === 'true') { |
| | | let fLine = {} |
| | | let sLine = {} |
| | | let sign = '' |
| | | columns.forEach((col, i) => { |
| | | if (/.+-.+/.test(col.Text)) { |
| | | let _sign = col.Text.split('-')[0] |
| | | let _name = col.Text.split('-')[1] |
| | | fLine[col.Column] = _sign |
| | | sLine[col.Column] = _name |
| | | |
| | | if (sign === _sign) { |
| | | merges[merges.length - 1] = merges[merges.length - 1].split(':')[0] + `:${cols[i]}1` |
| | | } else { |
| | | merges.push(`${cols[i]}1:${cols[i]}2`) |
| | | sign = _sign |
| | | } |
| | | } else { |
| | | fLine[col.Column] = col.Text |
| | | sLine[col.Column] = col.Text |
| | | sign = '' |
| | | merges.push(`${cols[i]}1:${cols[i]}2`) |
| | | } |
| | | }) |
| | | |
| | | table.push(fLine) |
| | | table.push(sLine) |
| | | } else { |
| | | table.push(_topRow) |
| | | } |
| | | |
| | | data && data.forEach((item, index) => { |
| | | let _row = {} |
| | |
| | | |
| | | ws['!cols'] = colwidth |
| | | |
| | | if (btn.verify.rowHeight) { |
| | | ws['!rows'] = Array(table.length).fill({hpx: btn.verify.rowHeight}) |
| | | } |
| | | |
| | | if (requires.length) { |
| | | let cols = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' |
| | | requires.forEach(col => { |
| | | if (cols[col]) { |
| | | ws[cols[col] + '1'].s = {font: { color: { rgb: 'F5222D' } }} |
| | | } |
| | | }) |
| | | } |
| | | |
| | | if (merges.length) { |
| | | ws['!merges'] = [] |
| | | merges.forEach(item => { |
| | | ws['!merges'].push(XLSX.utils.decode_range(item)) |
| | | }) |
| | | |
| | | cols.forEach(col => { |
| | | if (ws[col + '1'].s) { |
| | | ws[col + '1'].s = {font: { color: { rgb: 'F5222D' } }, alignment: { horizontal: 'center', vertical: 'center' }} |
| | | } else { |
| | | ws[col + '1'].s = {alignment: { horizontal: 'center', vertical: 'center' }} |
| | | } |
| | | ws[col + '2'].s = {alignment: { horizontal: 'center', vertical: 'center' }} |
| | | }) |
| | | } |
| | | |
| | | // ws["A1"].s = {fill: { bgColor: { rgb: "FFFFAA" }}, font: { color: { rgb: "1890FF" } }} |
| | | |
| | | |
| | | const wb = XLSX.utils.book_new() |
| | | XLSX.utils.book_append_sheet(wb, ws, 'Sheet1') |
| | | XLSX.utils.book_append_sheet(wb, ws, btn.verify.sheet || 'Sheet1') |
| | | |
| | | XLSX.writeFile(wb, this.state.excelName) |
| | | |
| | | if (btn.verify && btn.verify.enable === 'true' && btn.verify.script) { |
| | | if (btn.verify.enable === 'true' && btn.verify.script) { |
| | | this.execCustomScript() |
| | | } else { |
| | | this.execSuccess({ErrCode: 'S', ErrMesg: '导出成功!'}) |
| | |
| | | height: 34px; |
| | | border-radius: 0px; |
| | | padding-left: 15px!important; |
| | | border-bottom-width: 1px!important; |
| | | .anticon { |
| | | display: none; |
| | | } |
| | |
| | | _sql = _sql.replace(/@SessionUid@/ig, `'${localStorage.getItem('SessionUid') || ''}'`) |
| | | _sql = _sql.replace(/@UserID@/ig, `'${sessionStorage.getItem('UserID') || ''}'`) |
| | | _sql = _sql.replace(/@Appkey@/ig, `'${window.GLOB.appkey || ''}'`) |
| | | _sql = _sql.replace(/@typename@/ig, `'admin'`) |
| | | |
| | | return _sql |
| | | } |
| | |
| | | |
| | | if (params[0].$unCheckParam) { |
| | | this.checkLoopRequest(params, _resolve) |
| | | } else if (params.length <= 20) { |
| | | } else if (params.length <= 20 && btn.execType !== 'single') { |
| | | let deffers = params.map((param, i) => { |
| | | return new Promise(resolve => { |
| | | setTimeout(() => { |
| | |
| | | let iserror = false |
| | | let errorMsg = '' |
| | | result.forEach(res => { |
| | | if (iserror) return |
| | | if (res.status) { |
| | | errorMsg = res |
| | | } else { |
| | |
| | | _resolve() |
| | | }) |
| | | } else { // 超出20个请求时循环执行 |
| | | if (btn.progress === 'progressbar' && btn.$toolbtn) { |
| | | if (btn.progress === 'progressbar' && btn.$toolbtn && params.length > 1) { |
| | | this.setState({ |
| | | loadingTotal: params.length |
| | | }) |
| | |
| | | className={className} |
| | | onClick={(e) => {e.stopPropagation(); this.actionTrigger()}} |
| | | >{label}</Button> |
| | | <span onClick={(e) => {e.stopPropagation()}}>{this.getPop()}</span> |
| | | <span onClick={(e) => {e.stopPropagation()}} onDoubleClick={(e) => {e.stopPropagation()}}>{this.getPop()}</span> |
| | | </> |
| | | ) |
| | | } |
| | |
| | | _customScript = _customScript.replace(/@UserID@/ig, `'${sessionStorage.getItem('UserID') || ''}'`) |
| | | _dataresource = _dataresource.replace(/@Appkey@/ig, `'${window.GLOB.appkey || ''}'`) |
| | | _customScript = _customScript.replace(/@Appkey@/ig, `'${window.GLOB.appkey || ''}'`) |
| | | _dataresource = _dataresource.replace(/@typename@/ig, `'admin'`) |
| | | _customScript = _customScript.replace(/@typename@/ig, `'admin'`) |
| | | |
| | | |
| | | let LText = '' |
| | |
| | | if (item.database === 'sso') { |
| | | let sql = _sso + item.base_sql |
| | | _sso = '' |
| | | |
| | | sql = sql.replace(/@ID@/ig, `'${this.state.ID || ''}'`) |
| | | sql = sql.replace(/@BID@/ig, `'${BID}'`) |
| | | |
| | | if (debug) { |
| | | console.info(sql) |
| | | } |
| | |
| | | } else { |
| | | let sql = _sql + item.base_sql |
| | | _sql = '' |
| | | |
| | | sql = sql.replace(/@ID@/ig, `'${this.state.ID || ''}'`) |
| | | sql = sql.replace(/@BID@/ig, `'${BID}'`) |
| | | |
| | | if (debug) { |
| | | console.info(sql) |
| | | } |
| | |
| | | LText: localItems.join(' union all '), |
| | | obj_name: '', |
| | | arr_field: '', |
| | | table_type: 'Y', |
| | | BID: BID || '', |
| | | ID: this.state.ID || '' |
| | | table_type: 'Y' |
| | | } |
| | | |
| | | if (param.LText) { |
| | |
| | | LText: mainItems.join(' union all '), |
| | | obj_name: '', |
| | | arr_field: '', |
| | | table_type: 'Y', |
| | | BID: BID || '', |
| | | ID: this.state.ID || '' |
| | | table_type: 'Y' |
| | | } |
| | | |
| | | if (mainparam.LText) { |
| | |
| | | func: 'sPC_Get_SelectedList', |
| | | LText: _sql + form.base_sql, |
| | | obj_name: form.field, |
| | | arr_field: form.arr_field, |
| | | BID: this.props.BID || '', |
| | | ID: this.state.ID || '' |
| | | arr_field: form.arr_field |
| | | } |
| | | |
| | | param.LText = param.LText.replace(/@ID@/ig, `'${this.state.ID || ''}'`) |
| | | param.LText = param.LText.replace(/@BID@/ig, `'${this.props.BID || ''}'`) |
| | | |
| | | if (debug) { |
| | | console.info(param.LText) |
| | | } |
| | |
| | | const { config } = this.props |
| | | const { value } = this.state |
| | | |
| | | if (config.inputType === 'password') { |
| | | return <Input.Password ref={this.inputRef} className="mk-form-input" placeholder={config.placeholder || ''} value={value} autoComplete="off" disabled={config.readonly} onChange={this.handleChange} onPressEnter={this.handleInputSubmit}/> |
| | | } |
| | | |
| | | return <Input ref={this.inputRef} className="mk-form-input" allowClear placeholder={config.placeholder || ''} value={value} autoComplete="off" disabled={config.readonly} onChange={this.handleChange} onPressEnter={this.handleInputSubmit} /> |
| | | } |
| | | } |
| | |
| | | .mk-form-input { |
| | | .mk-form-input:not(.ant-input-password) { |
| | | .ant-input-suffix { |
| | | opacity: 0; |
| | | transition: opacity 0.3s; |
| | |
| | | |
| | | if (item.subType === 'linkMain') { |
| | | newcard.hidden = 'true' |
| | | } else if (item.subType === 'textarea') { |
| | | newcard.required = 'false' |
| | | } |
| | | |
| | | let targetId = '' |
| | |
| | | })(<InputNumber min={10} max={2000} precision={0} onPressEnter={this.handleSubmit}/>)} |
| | | </Form.Item> |
| | | </Col> : null} |
| | | {display === 'dialog' && appType === 'mob' ? <Col span={12}> |
| | | <Form.Item label={ |
| | | <Tooltip placement="topLeft" title="小于100时为百分率,大于100时为绝对值。空值时宽度自适应。"> |
| | | <QuestionCircleOutlined className="mk-form-tip" /> |
| | | 宽度 |
| | | </Tooltip> |
| | | }> |
| | | {getFieldDecorator('width', { |
| | | initialValue: config.setting.width || '' |
| | | })(<InputNumber min={10} max={2000} precision={0} onPressEnter={this.handleSubmit}/>)} |
| | | </Form.Item> |
| | | </Col> : null} |
| | | {['dialog', 'drawer', 'modal'].includes(display) ? <Col span={12}> |
| | | <Form.Item label="初始焦点"> |
| | | {getFieldDecorator('focus', { |
| | |
| | | <Form {...formItemLayout}> |
| | | <Row gutter={24}> |
| | | <Col span={8}> |
| | | <Form.Item label="表名"> |
| | | <Form.Item label={ |
| | | <Tooltip placement="bottomLeft" title="导入时工作表名与excel中必须一致,注:工作表名为Sheet1且excel中仅有一个工作表时不进行表名验证。"> |
| | | <QuestionCircleOutlined className="mk-form-tip" /> |
| | | 工作表 |
| | | </Tooltip> |
| | | }> |
| | | {getFieldDecorator('sheet', { |
| | | initialValue: verify.sheet || '', |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: '请输入表名!' |
| | | message: '请输入工作表名!' |
| | | } |
| | | ] |
| | | })(<Input placeholder="" autoComplete="off" />)} |
| | |
| | | </Col> |
| | | <Col span={24} className="sqlfield"> |
| | | <Form.Item label={'可用字段'}> |
| | | <Tooltip mouseLeaveDelay={0.3} mouseEnterDelay={0.3} placement="top" title={'公共值,请按照@xxx@格式使用。'}><span style={{color: '#1890ff'}}>BID, ID, LoginUID, SessionUid, UserID, Appkey, time_id</span></Tooltip>, |
| | | <Tooltip mouseLeaveDelay={0.3} mouseEnterDelay={0.3} placement="top" title={'公共值,请按照@xxx@格式使用。'}><span style={{color: '#1890ff'}}>BID, ID, LoginUID, SessionUid, UserID, Appkey, time_id, typename</span></Tooltip>, |
| | | <Tooltip mouseLeaveDelay={0.3} mouseEnterDelay={0.3} placement="top" title={'系统变量,系统会定义变量并赋值。'}><span style={{color: '#fa8c16'}}>UserName, FullName, RoleID, mk_departmentcode, mk_organization, mk_user_type, mk_nation, mk_province, mk_city, mk_district, mk_address</span></Tooltip> |
| | | {usefulfields ? <Tooltip mouseLeaveDelay={0.3} mouseEnterDelay={0.3} placement="top" title={'搜索条件,请按照@xxx@格式使用。'}>, {usefulfields}</Tooltip> : null} |
| | | {linefields ? <Tooltip mouseLeaveDelay={0.3} mouseEnterDelay={0.3} placement="top" title={'表单及行变量,系统会定义变量并赋值。'}>, {linefields}</Tooltip> : null} |
| | |
| | | import React, {Component} from 'react' |
| | | import PropTypes from 'prop-types' |
| | | import { Form, Row, Col, Input, Radio, Tooltip, notification } from 'antd' |
| | | import { Form, Row, Col, Input, Radio, Tooltip, notification, InputNumber } from 'antd' |
| | | import { QuestionCircleOutlined } from '@ant-design/icons' |
| | | |
| | | import Utils from '@/utils/utils.js' |
| | |
| | | </Radio.Group>)} |
| | | </Form.Item> |
| | | </Col> : null} |
| | | {btnType !== 'print' ? <Col span={8}> |
| | | <Form.Item label={ |
| | | <Tooltip placement="topLeft" title="导出excel中工作表名称,默认为Sheet1。"> |
| | | <QuestionCircleOutlined className="mk-form-tip" /> |
| | | 工作表 |
| | | </Tooltip> |
| | | }> |
| | | {getFieldDecorator('sheet', { |
| | | initialValue: setting.sheet || '' |
| | | })(<Input placeholder="" autoComplete="off" />)} |
| | | </Form.Item> |
| | | </Col> : null} |
| | | {btnType !== 'print' ? <Col span={8}> |
| | | <Form.Item label={ |
| | | <Tooltip placement="topLeft" title="导出excel中的行高。"> |
| | | <QuestionCircleOutlined className="mk-form-tip" /> |
| | | 行高 |
| | | </Tooltip> |
| | | }> |
| | | {getFieldDecorator('rowHeight', { |
| | | initialValue: setting.rowHeight || '' |
| | | })(<InputNumber min={10} max={200} precision={0} />)} |
| | | </Form.Item> |
| | | </Col> : null} |
| | | {btnType !== 'print' ? <Col span={8}> |
| | | <Form.Item label={ |
| | | <Tooltip placement="topLeft" title="请将需要合并的表头使用中横线分隔(如:商品-数量、商品-单价),前部分将作为主表头,后部分将作为子表头。"> |
| | | <QuestionCircleOutlined className="mk-form-tip" /> |
| | | 表头合并 |
| | | </Tooltip> |
| | | }> |
| | | {getFieldDecorator('merge', { |
| | | initialValue: setting.merge || 'false' |
| | | })( |
| | | <Radio.Group> |
| | | <Radio value="false">否</Radio> |
| | | <Radio value="true">是</Radio> |
| | | </Radio.Group>)} |
| | | </Form.Item> |
| | | </Col> : null} |
| | | </Row> |
| | | </Form> |
| | | </div> |
| | |
| | | columns.push(cell) |
| | | }) |
| | | |
| | | if (config.subtype === 'dualdatacard') { |
| | | config.subColumns.forEach(item => { |
| | | if (fields.includes(item.field) || !item.field) return |
| | | fields.push(item.field) |
| | | |
| | | let cell = { |
| | | Column: item.field, |
| | | Text: item.label, |
| | | Width: 20, |
| | | abs: 'false', |
| | | output: 'true', |
| | | required: 'false', |
| | | type: 'text', |
| | | uuid: Utils.getuuid() |
| | | } |
| | | |
| | | if (item.type === 'number') { |
| | | cell.type = 'number' |
| | | cell.decimal = item.decimal |
| | | } |
| | | |
| | | columns.push(cell) |
| | | }) |
| | | } |
| | | |
| | | this.setState({ |
| | | verify: {...verify, columns: columns} |
| | | }) |
| | |
| | | _dataresource = '' |
| | | } |
| | | |
| | | _dataresource = _dataresource.replace(/@(BID|ID|LoginUID|SessionUid|UserID|Appkey|time_id)@/ig, `'${timestamp}'`) |
| | | _customScript = _customScript.replace(/@(BID|ID|LoginUID|SessionUid|UserID|Appkey|time_id)@/ig, `'${timestamp}'`) |
| | | _dataresource = _dataresource.replace(/@(BID|ID|LoginUID|SessionUid|UserID|Appkey|time_id|typename)@/ig, `'${timestamp}'`) |
| | | _customScript = _customScript.replace(/@(BID|ID|LoginUID|SessionUid|UserID|Appkey|time_id|typename)@/ig, `'${timestamp}'`) |
| | | _dataresource = _dataresource.replace(/@\$|\$@/ig, '') |
| | | _customScript = _customScript.replace(/@\$|\$@/ig, '') |
| | | |
| | |
| | | _dataresource = '' |
| | | } |
| | | |
| | | _dataresource = _dataresource.replace(/@(BID|ID|LoginUID|SessionUid|UserID|Appkey|time_id)@/ig, `'${timestamp}'`) |
| | | _customScript = _customScript.replace(/@(BID|ID|LoginUID|SessionUid|UserID|Appkey|time_id)@/ig, `'${timestamp}'`) |
| | | _dataresource = _dataresource.replace(/@(BID|ID|LoginUID|SessionUid|UserID|Appkey|time_id|typename)@/ig, `'${timestamp}'`) |
| | | _customScript = _customScript.replace(/@(BID|ID|LoginUID|SessionUid|UserID|Appkey|time_id|typename)@/ig, `'${timestamp}'`) |
| | | _dataresource = _dataresource.replace(/@\$|\$@/ig, '') |
| | | _customScript = _customScript.replace(/@\$|\$@/ig, '') |
| | | |
| | |
| | | |
| | | if (item.type === 'text' && item.length >= 256) { |
| | | newcard.type = 'textarea' |
| | | newcard.required = 'false' |
| | | newcard.fieldlength = item.length |
| | | if (firstItem) { |
| | | if (firstItem.type === newcard.type) { |
| | |
| | | }, |
| | | { |
| | | type: 'radio', |
| | | key: 'inputType', |
| | | label: '加密显示', |
| | | initVal: card.inputType || 'text', |
| | | required: false, |
| | | options: [{ |
| | | value: 'text', |
| | | text: '否' |
| | | }, { |
| | | value: 'password', |
| | | text: '是' |
| | | }] |
| | | }, |
| | | { |
| | | type: 'radio', |
| | | key: 'interception', |
| | | label: '截取空格', |
| | | initVal: card.interception || 'true', |
| | |
| | | const MkEditIcon = asyncComponent(() => import('@/components/mkIcon')) |
| | | |
| | | const modalTypeOptions = { |
| | | text: ['initval', 'readonly', 'required', 'hidden', 'readin', 'fieldlength', 'regular', 'interception', 'span', 'labelwidth', 'encryption', 'tooltip', 'extra', 'enter', 'cursor', 'scan', 'splitline', 'placeholder', 'place', 'marginTop', 'marginBottom', 'lenControl'], |
| | | text: ['initval', 'readonly', 'required', 'hidden', 'readin', 'fieldlength', 'regular', 'interception', 'span', 'labelwidth', 'encryption', 'tooltip', 'extra', 'enter', 'cursor', 'scan', 'splitline', 'placeholder', 'place', 'marginTop', 'marginBottom', 'lenControl', 'inputType'], |
| | | number: ['initval', 'readonly', 'hidden', 'decimal', 'min', 'max', 'readin', 'span', 'labelwidth', 'tooltip', 'extra', 'enter', 'cursor', 'splitline', 'place', 'marginTop', 'marginBottom'], |
| | | select: ['initval', 'readonly', 'required', 'hidden', 'readin', 'resourceType', 'declare', 'setAll', 'linkSubField', 'span', 'labelwidth', 'tooltip', 'extra', 'emptyText', 'enter', 'splitline', 'dropdown', 'marginTop', 'marginBottom', 'empty'], |
| | | checkbox: ['initval', 'readonly', 'required', 'hidden', 'readin', 'resourceType', 'fieldlength', 'span', 'labelwidth', 'tooltip', 'extra', 'splitline', 'arrange', 'marginTop', 'marginBottom', 'empty'], |
| | |
| | | } |
| | | |
| | | param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') |
| | | param.LText = param.LText.replace(/@(BID|ID|LoginUID|SessionUid|UserID|Appkey|time_id)@/ig, `'${param.timestamp}'`) |
| | | param.LText = param.LText.replace(/@(BID|ID|LoginUID|SessionUid|UserID|Appkey|time_id|typename)@/ig, `'${param.timestamp}'`) |
| | | |
| | | console.info(`/* sql 验证 */\n${param.LText.replace(/\n\s{6,20}/ig, '\n')}`) |
| | | |
| | |
| | | </Col> |
| | | <Col span={24} className="sqlfield"> |
| | | <Form.Item label={'可用字段'}> |
| | | <Tooltip mouseLeaveDelay={0.3} mouseEnterDelay={0.3} placement="top" title={'公共值,请按照@xxx@格式使用。'}><span style={{color: '#1890ff'}}>BID, ID, LoginUID, SessionUid, UserID, Appkey, time_id</span></Tooltip>, |
| | | <Tooltip mouseLeaveDelay={0.3} mouseEnterDelay={0.3} placement="top" title={'公共值,请按照@xxx@格式使用。'}><span style={{color: '#1890ff'}}>BID, ID, LoginUID, SessionUid, UserID, Appkey, time_id, typename</span></Tooltip>, |
| | | <Tooltip mouseLeaveDelay={0.3} mouseEnterDelay={0.3} placement="top" title={'系统变量,系统会定义变量并赋值。'}><span style={{color: '#fa8c16'}}>UserName, FullName, RoleID, mk_departmentcode, mk_organization, mk_user_type, mk_nation, mk_province, mk_city, mk_district, mk_address</span></Tooltip>, |
| | | <Tooltip mouseLeaveDelay={0.3} mouseEnterDelay={0.3} placement="top" title={'系统变量,系统会定义变量并在单号生成或创建凭证时使用。'}><span style={{color: '#13c2c2'}}>BillCode, BVoucher, FIBVoucherDate, FiYear, ModularDetailCode</span></Tooltip> |
| | | {usefulfields ? <span>, {usefulfields}</span> : ''} |
| | |
| | | values.uuid = editItem ? editItem.uuid : '' |
| | | values.position = values.position || (editItem ? editItem.position : 'front') |
| | | |
| | | if (type === 'fullscreen' && editItem) { |
| | | values.status = editItem.status || 'true' |
| | | } |
| | | |
| | | let _quot = values.sql.match(/'{1}/g) |
| | | let _lparen = values.sql.match(/\({1}/g) |
| | | let _rparen = values.sql.match(/\){1}/g) |
| | |
| | | let _backCustomScript = '' // 默认sql后执行脚本 |
| | | |
| | | this.props.customScripts.forEach(item => { |
| | | if (item.status === 'false' && values.uuid !== item.uuid) return |
| | | |
| | | let _item = values.uuid === item.uuid ? values : item |
| | | |
| | | if (_item.status === 'false') return |
| | | |
| | | if (_item.position === 'init') { |
| | | _initCustomScript += ` |
| | | /* 初始化脚本 */ |
| | |
| | | import md5 from 'md5' |
| | | |
| | | export default class MenuUtils { |
| | | /** |
| | | * @description 获取下级模块 |
| | |
| | | * @description 重置菜单配置,页面整体复制 |
| | | * @return {String} components 配置信息 |
| | | */ |
| | | static resetConfig = (components, uuids = {}, clear = false) => { |
| | | static resetConfig = (components, commonId, clear = false) => { |
| | | return components.map(item => { |
| | | if (item.type === 'navbar') { |
| | | return item |
| | |
| | | item.type = 'card' |
| | | } |
| | | |
| | | uuids[item.uuid] = this.getuuid() |
| | | item.uuid = uuids[item.uuid] |
| | | item.uuid = md5(commonId + item.uuid) |
| | | |
| | | if (item.type === 'tabs') { |
| | | item.subtabs.forEach(tab => { |
| | | uuids[tab.uuid] = this.getuuid() |
| | | tab.uuid = uuids[tab.uuid] |
| | | tab.uuid = md5(commonId + tab.uuid) |
| | | |
| | | tab.components = this.resetConfig(tab.components, uuids, clear) |
| | | tab.components = this.resetConfig(tab.components, commonId, clear) |
| | | }) |
| | | } else if (item.type === 'group') { |
| | | item.components = this.resetConfig(item.components, uuids, clear) |
| | | item.components = this.resetConfig(item.components, commonId, clear) |
| | | } else if (item.type === 'menubar') { |
| | | item.subMenus = item.subMenus.map(cell => { |
| | | cell.uuid = this.getuuid() |
| | |
| | | return cell |
| | | }) |
| | | } else if (['card', 'carousel', 'timeline'].includes(item.type)) { |
| | | if (item.wrap.datatype === 'public' && uuids[item.wrap.publicId]) { |
| | | item.wrap.publicId = uuids[item.wrap.publicId] |
| | | if (item.wrap.datatype === 'public' && item.wrap.publicId) { |
| | | item.wrap.publicId = md5(commonId + item.wrap.publicId) |
| | | } |
| | | |
| | | if (item.supNodes && item.supNodes.length > 0) { |
| | | item.supNodes = item.supNodes.map(cell => { |
| | | cell.nodes = cell.nodes.map(n => md5(commonId + n)) |
| | | cell.componentId = cell.nodes[cell.nodes.length - 1] |
| | | |
| | | return cell |
| | | }) |
| | | } |
| | | |
| | | item.subcards.forEach(card => { |
| | |
| | | card.elements = card.elements.map(cell => { |
| | | cell.uuid = this.getuuid() |
| | | |
| | | if (clear && cell.eleType === 'button' && cell.pageTemplate === 'linkpage' && cell.linkmenu) { |
| | | cell.pageTemplate = '' |
| | | cell.linkmenu = '' |
| | | if (cell.eleType === 'button') { |
| | | if (clear && cell.pageTemplate === 'linkpage' && cell.linkmenu) { |
| | | cell.pageTemplate = '' |
| | | cell.linkmenu = '' |
| | | } |
| | | this.resetBtn(cell, commonId) |
| | | } |
| | | |
| | | return cell |
| | |
| | | card.backElements = card.backElements.map(cell => { |
| | | cell.uuid = this.getuuid() |
| | | |
| | | if (clear && cell.eleType === 'button' && cell.pageTemplate === 'linkpage' && cell.linkmenu) { |
| | | cell.pageTemplate = '' |
| | | cell.linkmenu = '' |
| | | if (cell.eleType === 'button') { |
| | | if (clear && cell.pageTemplate === 'linkpage' && cell.linkmenu) { |
| | | cell.pageTemplate = '' |
| | | cell.linkmenu = '' |
| | | } |
| | | this.resetBtn(cell, commonId) |
| | | } |
| | | |
| | | return cell |
| | |
| | | } |
| | | }) |
| | | } else if (item.type === 'balcony') { |
| | | if (item.wrap.datatype === 'public' && uuids[item.wrap.publicId]) { |
| | | item.wrap.publicId = uuids[item.wrap.publicId] |
| | | if (item.wrap.datatype === 'public' && item.wrap.publicId) { |
| | | item.wrap.publicId = md5(commonId + item.wrap.publicId) |
| | | } |
| | | if (item.elements) { |
| | | item.elements = item.elements.map(cell => { |
| | | cell.uuid = this.getuuid() |
| | | |
| | | if (clear && cell.eleType === 'button' && cell.pageTemplate === 'linkpage' && cell.linkmenu) { |
| | | cell.pageTemplate = '' |
| | | cell.linkmenu = '' |
| | | if (cell.eleType === 'button') { |
| | | if (clear && cell.pageTemplate === 'linkpage' && cell.linkmenu) { |
| | | cell.pageTemplate = '' |
| | | cell.linkmenu = '' |
| | | } |
| | | this.resetBtn(cell, commonId) |
| | | } |
| | | |
| | | return cell |
| | |
| | | } else if (item.type === 'table' && item.cols) { |
| | | let loopCol = (col) => { |
| | | col.subcols = col.subcols.map(c => { |
| | | c.uuid = this.getuuid() |
| | | c.uuid = md5(commonId + c.uuid) |
| | | |
| | | if (c.type === 'colspan' && c.subcols) { |
| | | c = loopCol(c) |
| | |
| | | cell.linkmenu = '' |
| | | } |
| | | |
| | | this.resetBtn(cell, commonId) |
| | | |
| | | return cell |
| | | }) |
| | | } |
| | |
| | | |
| | | return col |
| | | } |
| | | let _uuids = {} |
| | | item.cols = item.cols.map(col => { |
| | | let uuid = this.getuuid() |
| | | |
| | | _uuids[col.uuid] = uuid |
| | | col.uuid = uuid |
| | | item.cols = item.cols.map(col => { |
| | | col.uuid = md5(commonId + col.uuid) |
| | | |
| | | if (col.type === 'colspan' && col.subcols) { |
| | | col = loopCol(col) |
| | |
| | | } else if (col.type === 'action' && col.elements) { |
| | | col.elements = col.elements.map(cell => { |
| | | cell.uuid = this.getuuid() |
| | | this.resetBtn(cell, commonId) |
| | | return cell |
| | | }) |
| | | } |
| | |
| | | |
| | | if (item.subtype === 'editable') { |
| | | item.cols = item.cols.map(col => { |
| | | if (col.editable === 'true' && col.enter && _uuids[col.enter]) { |
| | | col.enter = _uuids[col.enter] |
| | | if (col.editable === 'true' && col.enter) { |
| | | col.enter = md5(commonId + col.enter) |
| | | } else if (col.type === 'colspan' && col.subcols) { |
| | | col.subcols = col.subcols.map(c => { |
| | | if (c.editable === 'true' && c.enter) { |
| | | c.enter = md5(commonId + c.enter) |
| | | } |
| | | return c |
| | | }) |
| | | } |
| | | return col |
| | | }) |
| | |
| | | |
| | | return m |
| | | }) |
| | | |
| | | if (cell.subButton) { |
| | | this.resetBtn(cell.subButton, commonId) |
| | | } |
| | | |
| | | return cell |
| | | }) |
| | | } |
| | |
| | | item.btnlog = null |
| | | } |
| | | |
| | | let oriUids = {} |
| | | if (item.action) { |
| | | item.action = item.action.map(cell => { |
| | | let _uuid = this.getuuid() |
| | | |
| | | oriUids[cell.uuid] = _uuid |
| | | cell.uuid = _uuid |
| | | cell.uuid = md5(commonId + cell.uuid) |
| | | |
| | | if (clear && cell.pageTemplate === 'linkpage' && cell.linkmenu) { |
| | | cell.pageTemplate = '' |
| | | cell.linkmenu = '' |
| | | } |
| | | |
| | | this.resetBtn(cell, commonId) |
| | | |
| | | return cell |
| | | }) |
| | |
| | | } |
| | | |
| | | if (item.setting && item.setting.supModule && item.setting.supModule[0] !== 'empty') { |
| | | let em = false |
| | | item.setting.supModule = item.setting.supModule.map(c => { |
| | | if (!uuids[c]) { |
| | | em = true |
| | | } |
| | | return uuids[c] || '' |
| | | return md5(commonId + c) |
| | | }) |
| | | if (em) { |
| | | item.setting.supModule = '' |
| | | } |
| | | if (item.wrap && item.wrap.supModule) { |
| | | item.wrap.supModule = item.setting.supModule |
| | | } |
| | | } |
| | | |
| | | if (item.wrap && item.wrap.doubleClick) { |
| | | item.wrap.doubleClick = oriUids[item.wrap.doubleClick] || '' |
| | | item.wrap.doubleClick = md5(commonId + item.wrap.doubleClick) |
| | | } |
| | | |
| | | return item |
| | | }) |
| | | } |
| | | |
| | | /** |
| | | * @description 按钮重置 |
| | | */ |
| | | static resetBtn (btn, commonId) { |
| | | if (btn.switchTab && btn.switchTab.length > 0) { |
| | | btn.switchTab = btn.switchTab.map(m => md5(commonId + m)) |
| | | } |
| | | if (btn.anchors && btn.anchors.length > 0) { |
| | | btn.anchors = btn.anchors.map(m => md5(commonId + m)) |
| | | } |
| | | if (btn.syncComponent && btn.syncComponent.length > 0) { |
| | | btn.syncComponent = btn.syncComponent.map(m => md5(commonId + m)) |
| | | } |
| | | } |
| | | |
| | | /** |
| | |
| | | * @description 重置组件配置 |
| | | * @return {String} item 组件信息 |
| | | */ |
| | | static resetComponentConfig = (item, uuids = {}) => { |
| | | static resetComponentConfig = (item) => { |
| | | if (item.type === 'navbar') { |
| | | return item |
| | | } |
| | |
| | | item.type = 'card' |
| | | } |
| | | |
| | | let _uuid = this.getuuid() |
| | | |
| | | uuids[item.uuid] = _uuid |
| | | |
| | | item.uuid = _uuid |
| | | item.uuid = this.getuuid() |
| | | let commonId = this.getuuid() |
| | | |
| | | // 重置组件名称 |
| | | let sign = this.getSignName() |
| | |
| | | return col |
| | | } |
| | | |
| | | let _uuids = {} |
| | | item.cols = item.cols.map(col => { |
| | | let uuid = this.getuuid() |
| | | |
| | | _uuids[col.uuid] = uuid |
| | | col.uuid = uuid |
| | | col.uuid = md5(commonId + col.uuid) |
| | | |
| | | if (col.type === 'colspan' && col.subcols) { |
| | | col = loopCol(col) |
| | |
| | | |
| | | if (item.subtype === 'editable') { |
| | | item.cols = item.cols.map(col => { |
| | | if (col.editable === 'true' && col.enter && _uuids[col.enter]) { |
| | | col.enter = _uuids[col.enter] |
| | | if (col.editable === 'true' && col.enter) { |
| | | col.enter = md5(commonId + col.enter) |
| | | } |
| | | return col |
| | | }) |
| | |
| | | |
| | | delete item.btnlog |
| | | |
| | | let oriUids = {} |
| | | if (item.action) { |
| | | if (sessionStorage.getItem('editMenuType') === 'popview') { |
| | | item.action = item.action.filter(c => c.OpenType !== 'popview' && c.OpenType !== 'funcbutton') |
| | | } |
| | | item.action = item.action.map(cell => { |
| | | let _uuid = this.getuuid() |
| | | |
| | | oriUids[cell.uuid] = _uuid |
| | | |
| | | cell.uuid = _uuid |
| | | cell.uuid = md5(commonId + cell.uuid) |
| | | |
| | | return cell |
| | | }) |
| | |
| | | } |
| | | |
| | | if (item.wrap && item.wrap.doubleClick) { |
| | | item.wrap.doubleClick = oriUids[item.wrap.doubleClick] || '' |
| | | item.wrap.doubleClick = md5(commonId + item.wrap.doubleClick) |
| | | } |
| | | |
| | | return item |
| | |
| | | _customScript = _customScript.replace(/@UserID@/ig, `'${sessionStorage.getItem('UserID') || ''}'`) |
| | | _dataresource = _dataresource.replace(/@Appkey@/ig, `'${window.GLOB.appkey || ''}'`) |
| | | _customScript = _customScript.replace(/@Appkey@/ig, `'${window.GLOB.appkey || ''}'`) |
| | | _dataresource = _dataresource.replace(/@typename@/ig, `'admin'`) |
| | | _customScript = _customScript.replace(/@typename@/ig, `'admin'`) |
| | | |
| | | let regoptions = null |
| | | if (setting.queryType === 'statistics' || _customScript) { |
| | |
| | | _customScript = _customScript.replace(/@UserID@/ig, `'${sessionStorage.getItem('UserID') || ''}'`) |
| | | _dataresource = _dataresource.replace(/@Appkey@/ig, `'${window.GLOB.appkey || ''}'`) |
| | | _customScript = _customScript.replace(/@Appkey@/ig, `'${window.GLOB.appkey || ''}'`) |
| | | _dataresource = _dataresource.replace(/@typename@/ig, `'admin'`) |
| | | _customScript = _customScript.replace(/@typename@/ig, `'admin'`) |
| | | |
| | | let regoptions = null |
| | | if (setting.queryType === 'statistics' || _customScript) { |
| | |
| | | sql = sql.replace(/@SessionUid@/ig, `'${localStorage.getItem('SessionUid') || ''}'`) |
| | | sql = sql.replace(/@UserID@/ig, `'${sessionStorage.getItem('UserID') || ''}'`) |
| | | sql = sql.replace(/@Appkey@/ig, `'${window.GLOB.appkey || ''}'`) |
| | | sql = sql.replace(/@typename@/ig, `'admin'`) |
| | | |
| | | // 测试系统打印查询语句 |
| | | if (window.GLOB.debugger === true || (window.debugger === true && options.sysType !== 'cloud')) { |
| | |
| | | sql = sql.replace(/@SessionUid@/ig, `'${localStorage.getItem('SessionUid') || ''}'`) |
| | | sql = sql.replace(/@UserID@/ig, `'${sessionStorage.getItem('UserID') || ''}'`) |
| | | sql = sql.replace(/@Appkey@/ig, `'${window.GLOB.appkey || ''}'`) |
| | | sql = sql.replace(/@typename@/ig, `'admin'`) |
| | | |
| | | if (window.GLOB.debugger === true || (window.debugger === true && options.sysType !== 'cloud')) { |
| | | console.info(sql.replace(/\n\s{8}/ig, '\n')) |
| | |
| | | _script = _script.replace(/@UserID@/ig, userId) |
| | | _sql = _sql.replace(/@Appkey@/ig, `'${window.GLOB.appkey || ''}'`) |
| | | _script = _script.replace(/@Appkey@/ig, `'${window.GLOB.appkey || ''}'`) |
| | | _sql = _sql.replace(/@typename@/ig, `'admin'`) |
| | | _script = _script.replace(/@typename@/ig, `'admin'`) |
| | | |
| | | // 测试系统打印查询语句 |
| | | if (window.GLOB.debugger === true || (window.debugger === true && options.sysType !== 'cloud')) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * @description 数据源名称,用于统一查询 |
| | | * @return {String} name |
| | | */ |
| | | static getdataName () { |
| | | let name = [] |
| | | let _options = 'abcdefghigklmnopqrstuvwxyz' |
| | | for (let i = 0; i < 6; i++) { |
| | | name.push(_options.substr(Math.floor(Math.random() * 26), 1)) |
| | | } |
| | | name.splice(3, 0, new Date().getTime()) |
| | | return name.join('') |
| | | } |
| | | |
| | | /** |
| | | * @description 生成32位uuid string + 时间 |
| | | * @return {String} uuid |
| | | */ |
| | |
| | | |
| | | return value |
| | | } |
| | | |
| | | // /** |
| | | // * @description sql解密 |
| | | // * @return {String} value |
| | | // */ |
| | | // static unFormatOptions (value) { |
| | | // if (!value) return '' |
| | | |
| | | // value = window.atob(value) |
| | | // value = value.replace('minKe', '') |
| | | // value = window.decodeURIComponent(window.atob(value)) |
| | | |
| | | // // 外联数据库替换 |
| | | // if (window.GLOB.externalDatabase !== null && window.GLOB.externalDatabase) { |
| | | // value = value.replace(window.GLOB.externalDatabase, '@db@') |
| | | // } |
| | | |
| | | // value = value.replace(/ mpercent /ig, '%') |
| | | |
| | | // // 替换关键字 |
| | | // formatKeys.forEach(item => { |
| | | // let reg = new RegExp('(\\s)?' + item.value.replace(/\s/g, '') + '(\\s)?', 'ig') |
| | | // value = value.replace(reg, ' ' + item.key + ' ') |
| | | // }) |
| | | |
| | | // // value = value.replace(/\n/ig, ' \n ') |
| | | |
| | | // return value |
| | | // } |
| | | |
| | | /** |
| | | * @description sPC_TableData_InUpDe sql加密 |
| | |
| | | _callbacksql = _callbacksql.replace(/@SessionUid@/ig, `'${localStorage.getItem('SessionUid') || ''}'`) |
| | | _callbacksql = _callbacksql.replace(/@UserID@/ig, `'${sessionStorage.getItem('UserID') || ''}'`) |
| | | _callbacksql = _callbacksql.replace(/@Appkey@/ig, `'${window.GLOB.appkey || ''}'`) |
| | | _callbacksql = _callbacksql.replace(/@typename@/ig, `'admin'`) |
| | | |
| | | return { |
| | | sql: _sql, |
| | |
| | | // floor 组件的层级 |
| | | // pageable 是否分页,组件属性,不分页的组件才可以统一查询 |
| | | if (component.setting.sync === 'true') { |
| | | component.dataName = Utils.getdataName() |
| | | component.dataName = 'mk' + component.uuid.slice(-18) |
| | | let param = this.getDefaultParam(component) |
| | | _pars.push(param) |
| | | } else { |
| | |
| | | import { Modal, notification, Col, Card, Tabs, Row, Input, Button } from 'antd' |
| | | import { PlusOutlined } from '@ant-design/icons' |
| | | import moment from 'moment' |
| | | import md5 from 'md5' |
| | | |
| | | import Api from '@/api' |
| | | import { sysTemps } from '@/utils/option.js' |
| | |
| | | config.MenuNo = param.MenuNo |
| | | config.easyCode = '' |
| | | |
| | | let uuids = {} // 重置公共数据源 |
| | | let commonId = Utils.getuuid() |
| | | if (config.interfaces && config.interfaces.length > 0) { |
| | | config.interfaces = config.interfaces.map(inter => { |
| | | uuids[inter.uuid] = this.getuuid() |
| | | inter.uuid = uuids[inter.uuid] |
| | | inter.uuid = md5(commonId + inter.uuid) |
| | | return inter |
| | | }) |
| | | } |
| | | |
| | | config.components = MenuUtils.resetConfig(config.components, uuids) |
| | | config.components = MenuUtils.resetConfig(config.components, commonId) |
| | | config.enabled = false |
| | | |
| | | param.LongParam = window.btoa(window.encodeURIComponent(JSON.stringify(config))) |
| | |
| | | } else { |
| | | resolve(result) |
| | | } |
| | | }) |
| | | }, this.netError) |
| | | }) |
| | | } else { |
| | | resolve({status: true}) |
| | |
| | | } |
| | | return Api.getSystemConfig(_param) |
| | | } |
| | | }).then(res => { // 页面按钮关系保存 |
| | | }, this.netError).then(res => { // 页面按钮关系保存 |
| | | if (!res || !res.status) return res |
| | | |
| | | this.setState({ |
| | |
| | | status: true |
| | | } |
| | | } |
| | | }).then(res => { |
| | | }, this.netError).then(res => { |
| | | this.setState({ |
| | | menuloading: false |
| | | }) |
| | |
| | | duration: 5 |
| | | }) |
| | | } |
| | | }) |
| | | }, this.netError) |
| | | }, 300 + (+sessionStorage.getItem('mkDelay'))) |
| | | } |
| | | |
| | | netError = (error) => { |
| | | this.setState({ |
| | | menuloading: false |
| | | }) |
| | | if (!error) { |
| | | notification.warning({ |
| | | top: 92, |
| | | message: '保存失败,请检查网络是否正常。', |
| | | duration: 5 |
| | | }) |
| | | } |
| | | } |
| | | |
| | | getRoleFields = () => { |
| | | if (sessionStorage.getItem('sysRoles')) return |
| | | |
| | |
| | | } |
| | | } |
| | | } else { |
| | | let uuids = {} // 重置公共数据源 |
| | | let commonId = Utils.getuuid() |
| | | if (config.interfaces && config.interfaces.length > 0) { |
| | | config.interfaces = config.interfaces.map(inter => { |
| | | uuids[inter.uuid] = this.getuuid() |
| | | inter.uuid = uuids[inter.uuid] |
| | | inter.uuid = md5(commonId + inter.uuid) |
| | | return inter |
| | | }) |
| | | } |
| | | |
| | | config.components = MenuUtils.resetConfig(config.components, uuids, urlParam.clearMenu) |
| | | config.components = MenuUtils.resetConfig(config.components, commonId, urlParam.clearMenu) |
| | | |
| | | if (config.version !== 2.0) { |
| | | config.components = this.collectTB(config.components) |
| | |
| | | } |
| | | |
| | | resolve(result) |
| | | }) |
| | | }, this.netError) |
| | | } else { |
| | | resolve(res) |
| | | } |
| | | } else { |
| | | resolve(res) |
| | | } |
| | | }) |
| | | }, this.netError) |
| | | } |
| | | } |
| | | }).then(res => { // 页面保存 |
| | |
| | | duration: 5 |
| | | }) |
| | | } |
| | | }) |
| | | }, this.netError) |
| | | }, 300 + (+sessionStorage.getItem('mkDelay'))) |
| | | } |
| | | |
| | | netError = (error) => { |
| | | this.setState({ |
| | | menuloading: false |
| | | }) |
| | | if (!error) { |
| | | notification.warning({ |
| | | top: 92, |
| | | message: '保存失败,请检查网络是否正常。', |
| | | duration: 5 |
| | | }) |
| | | } |
| | | } |
| | | |
| | | getRoleFields = () => { |
| | | if (sessionStorage.getItem('sysRoles')) return |
| | | |
| | |
| | | } |
| | | } |
| | | } else { |
| | | let uuids = {} // 重置公共数据源 |
| | | let commonId = Utils.getuuid() |
| | | if (config.interfaces && config.interfaces.length > 0) { |
| | | config.interfaces = config.interfaces.map(inter => { |
| | | uuids[inter.uuid] = this.getuuid() |
| | | inter.uuid = uuids[inter.uuid] |
| | | inter.uuid = md5(commonId + inter.uuid) |
| | | return inter |
| | | }) |
| | | } |
| | | config.components = MenuUtils.resetConfig(config.components, uuids, urlParam.clearMenu) |
| | | config.components = MenuUtils.resetConfig(config.components, commonId, urlParam.clearMenu) |
| | | |
| | | if (config.version !== 2.0) { |
| | | config.components = this.collectTB(config.components) |
| | |
| | | } |
| | | |
| | | resolve(result) |
| | | }) |
| | | }, this.netError) |
| | | } else { |
| | | resolve(res) |
| | | } |
| | | } else { |
| | | resolve(res) |
| | | } |
| | | }) |
| | | }, this.netError) |
| | | } |
| | | } |
| | | }).then(res => { // 页面保存 |
| | |
| | | duration: 5 |
| | | }) |
| | | } |
| | | }) |
| | | }, this.netError) |
| | | }, 300 + (+sessionStorage.getItem('mkDelay'))) |
| | | } |
| | | |
| | | netError = (error) => { |
| | | this.setState({ |
| | | menuloading: false |
| | | }) |
| | | if (!error) { |
| | | notification.warning({ |
| | | top: 92, |
| | | message: '保存失败,请检查网络是否正常。', |
| | | duration: 5 |
| | | }) |
| | | } |
| | | } |
| | | |
| | | getRoleFields = () => { |
| | | if (sessionStorage.getItem('sysRoles') || sessionStorage.getItem('permFuncField')) return |
| | | Api.getSystemConfig({func: 'sPC_Get_Roles_sModular'}).then(res => { |
| | |
| | | new Promise(resolve => { |
| | | Api.getSystemConfig(param).then(res => { |
| | | resolve(res) |
| | | }) |
| | | }, this.netError) |
| | | }).then(res => { |
| | | if (!res || !res.status) return res |
| | | |
| | |
| | | duration: 5 |
| | | }) |
| | | } |
| | | }) |
| | | }, this.netError) |
| | | }, 300 + (+sessionStorage.getItem('mkDelay'))) |
| | | } |
| | | |
| | | netError = (error) => { |
| | | this.setState({ |
| | | menuloading: false |
| | | }) |
| | | if (!error) { |
| | | notification.warning({ |
| | | top: 92, |
| | | message: '保存失败,请检查网络是否正常。', |
| | | duration: 5 |
| | | }) |
| | | } |
| | | } |
| | | |
| | | getRoleFields = () => { |
| | | if (sessionStorage.getItem('sysRoles')) return |
| | | Api.getSystemConfig({func: 'sPC_Get_Roles_sModular'}).then(res => { |