| | |
| | | const { columns } = this.props |
| | | let _columns = [] |
| | | columns.forEach((item, index) => { |
| | | console.log(item) |
| | | let cell = { |
| | | align: item.Align, |
| | | dataIndex: item.field || item.uuid, |
| | |
| | | .ant-col { |
| | | padding: 10px; |
| | | .ant-card { |
| | | padding: 10px; |
| | | padding: 0px 10px 10px; |
| | | p { |
| | | margin-bottom: 5px; |
| | | overflow: hidden; |
| | |
| | | opacity: 0.4; |
| | | } |
| | | .base { |
| | | padding-top: 10px; |
| | | cursor: pointer; |
| | | } |
| | | } |
| | |
| | | param.secretkey = Utils.encrypt(param.LText, param.timestamp) |
| | | |
| | | Api.getSystemConfig(param).then(res => { |
| | | console.log(res) |
| | | if (res.status) { |
| | | this.setState({ |
| | | tables: res.data |
| | |
| | | return |
| | | } |
| | | |
| | | let sql = [] |
| | | config.action.forEach((item, index) => { |
| | | sql.push(`'${item.uuid}' as menuid, '${item.label}' as menuname, '${(index + 1) * 10}' as Sort`) |
| | | }) |
| | | sql = sql.join(' union all select ') |
| | | sql = 'select ' + sql |
| | | |
| | | sql = Utils.formatOptions(sql) |
| | | |
| | | let btnParam = { |
| | | func: 'sPC_Button_AddUpt', |
| | | ParentID: menu.MenuID, |
| | |
| | | Template: menu.PageParam.Template || '', |
| | | PageParam: '', |
| | | LongParam: '', |
| | | LongButton: sql |
| | | LText: config.action.map((item, index) => { |
| | | return `select '${item.uuid}' as menuid, '${item.label}' as menuname, '${(index + 1) * 10}' as Sort` |
| | | }) |
| | | } |
| | | |
| | | btnParam.LText = btnParam.LText.join(' union all ') |
| | | btnParam.LText = Utils.formatOptions(btnParam.LText) |
| | | btnParam.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') + '.000' |
| | | btnParam.secretkey = Utils.encrypt(btnParam.LText, btnParam.timestamp) |
| | | |
| | | if (this.state.operaType === 'add') { // 新建菜单 |
| | | let param = { |
| | |
| | | })} |
| | | </div> |
| | | {configAction.length > 0 ? |
| | | <div> |
| | | <p style={{marginTop: '20px', marginBottom: '10px', color: '#1890ff'}}>{this.state.dict['header.menu.action.configurable']}</p> |
| | | {configAction.map((item, index) => { |
| | | return ( |
| | | <div key={index}> |
| | | <Button |
| | | icon={item.icon} |
| | | style={{marginBottom: '10px'}} |
| | | className={'mk-btn mk-' + item.class} |
| | | onClick={() => this.setSubConfig(item)} |
| | | >{item.label}</Button> |
| | | </div> |
| | | ) |
| | | })} |
| | | </div> : null |
| | | <p className="config-btn-title">{this.state.dict['header.menu.action.configurable']}</p> : null |
| | | } |
| | | {configAction.map((item, index) => { |
| | | return ( |
| | | <div key={index}> |
| | | <Button |
| | | icon={item.icon} |
| | | style={{marginBottom: '10px'}} |
| | | className={'mk-btn mk-' + item.class} |
| | | onClick={() => this.setSubConfig(item)} |
| | | >{item.label}</Button> |
| | | </div> |
| | | ) |
| | | })} |
| | | </Panel> |
| | | <Panel header={this.state.dict['header.menu.column']} key="3"> |
| | | <div className="search-element"> |
| | |
| | | } |
| | | } |
| | | } |
| | | .config-btn-title { |
| | | margin-top: 20px; |
| | | margin-bottom: 10px; |
| | | color: #1890ff; |
| | | border-bottom: 1px solid #e8e8e8; |
| | | } |
| | | .tables { |
| | | .ant-select-selection-selected-value { |
| | | opacity: 0.4!important; |
| | |
| | | hover({ id: draggedId }) { |
| | | if (!draggedId) return |
| | | if (draggedId !== id) { |
| | | console.log(id) |
| | | const { index: overIndex } = findCard(id) |
| | | console.log(overIndex) |
| | | console.log(draggedId) |
| | | moveCard(draggedId, overIndex) |
| | | } |
| | | }, |
| | |
| | | import ItemTypes from './itemtypes' |
| | | import './index.scss' |
| | | |
| | | const Container = ({list, setting, placeholder, handleList, handleForm, closeForm }) => { |
| | | const Container = ({list, group, setting, placeholder, handleList, handleForm, closeForm }) => { |
| | | let target = null |
| | | |
| | | const [cards, setCards] = useState(list) |
| | | const moveCard = (id, atIndex) => { |
| | | const { card, index } = findCard(id) |
| | | |
| | | if (!card) return |
| | | |
| | | const _cards = update(cards, { $splice: [[index, 1], [atIndex, 0, card]] }) |
| | | setCards(_cards) |
| | | handleList(_cards) |
| | | if (!group) { |
| | | handleList(_cards) |
| | | } else { |
| | | handleList(_cards, group) |
| | | } |
| | | } |
| | | |
| | | const findCard = id => { |
| | |
| | | const [, drop] = useDrop({ |
| | | accept: ItemTypes.form, |
| | | drop(item) { |
| | | if (item.hasOwnProperty('originalIndex') && group) { |
| | | const { card } = findCard(item.id) |
| | | |
| | | if (!card) { |
| | | handleList(cards, group, item.id) |
| | | } |
| | | } |
| | | if (item.hasOwnProperty('originalIndex')) { |
| | | return |
| | | } |
| | |
| | | newcard.orderBy = '' |
| | | newcard.orderType = 'asc' |
| | | |
| | | let indexes = cards.map(car => {return car.id}) |
| | | let newid = 0 |
| | | while (indexes.includes(newid)) { |
| | | newid++ |
| | | } |
| | | newcard.id = newid |
| | | // let indexes = cards.map(car => {return car.id}) |
| | | // let newid = 0 |
| | | // while (indexes.includes(newid)) { |
| | | // newid++ |
| | | // } |
| | | newcard.id = Utils.getuuid() |
| | | |
| | | let targetId = indexes.length > 0 ? indexes[indexes.length - 1] : 0 |
| | | let targetId = cards.length > 0 ? cards[cards.length - 1].id : 0 |
| | | if (target) { |
| | | targetId = target.id |
| | | } |
| | |
| | | |
| | | const _cards = update(cards, { $splice: [[targetIndex, 0, newcard]] }) |
| | | setCards(_cards) |
| | | handleList(_cards) |
| | | |
| | | if (!group) { |
| | | handleList(_cards) |
| | | } else { |
| | | handleList(_cards, group) |
| | | } |
| | | |
| | | target = null |
| | | } |
| | | }) |
| | |
| | | const { dataSource, type } = this.state |
| | | |
| | | return ( |
| | | <div className="common-modal-edit-card"> |
| | | <div className="modal-fields-edit-card"> |
| | | <Row className="search-row"> |
| | | <Col span={8}> |
| | | <Search placeholder="请输入字段名" onSearch={value => {this.setState({searchKey: value})}} enterButton /> |
| | |
| | | .common-modal-edit-card { |
| | | .modal-fields-edit-card { |
| | | margin-left: -10px; |
| | | margin-right: -10px; |
| | | .ant-col { |
| | | padding: 10px; |
| | | .ant-card { |
| | | padding: 10px; |
| | | padding: 0px 10px 10px; |
| | | p { |
| | | margin-bottom: 5px; |
| | | overflow: hidden; |
| | |
| | | opacity: 0.4; |
| | | } |
| | | .base { |
| | | padding-top: 10px; |
| | | cursor: pointer; |
| | | } |
| | | } |
| | |
| | | class SettingForm extends Component { |
| | | static propTpyes = { |
| | | dict: PropTypes.object, // 字典项 |
| | | data: PropTypes.object |
| | | group: PropTypes.object, // 字典项 |
| | | config: PropTypes.object |
| | | } |
| | | |
| | | state = { |
| | | source: null, |
| | | selectds: null, |
| | | default: null |
| | | } |
| | | |
| | | UNSAFE_componentWillMount () { |
| | | const { config, group } = this.props |
| | | |
| | | let _source = null |
| | | let _default = config.groups[config.groups.length - 1] |
| | | let _selectds = [] |
| | | |
| | | if (config.groups.length === 1) { |
| | | _source = config.fields.filter(item => !item.origin) |
| | | } else { |
| | | _source = [..._default.sublist, ...group.sublist] |
| | | _selectds = group.sublist.map(item => { return item.uuid }) |
| | | } |
| | | |
| | | this.setState({ |
| | | source: _source, |
| | | selectds: _selectds, |
| | | default: _default |
| | | }) |
| | | } |
| | | |
| | | handleConfirm = () => { |
| | |
| | | return new Promise((resolve, reject) => { |
| | | this.props.form.validateFieldsAndScroll((err, values) => { |
| | | if (!err) { |
| | | resolve(values) |
| | | let targetKeys = this.refs['fields-transfer'].state.targetKeys |
| | | let defaultlist = this.state.source.filter(item => !targetKeys.includes(item.uuid)) |
| | | |
| | | values.sublist = targetKeys.map(item => { |
| | | return this.state.source.filter(cell => cell.uuid === item)[0] |
| | | }) |
| | | |
| | | resolve({ |
| | | default: {...this.state.default, sublist: defaultlist}, |
| | | target: values |
| | | }) |
| | | } else { |
| | | reject(err) |
| | | } |
| | |
| | | } |
| | | |
| | | render() { |
| | | const { data } = this.props |
| | | const { group, config } = this.props |
| | | const { getFieldDecorator } = this.props.form |
| | | |
| | | const formItemLayout = { |
| | |
| | | <Row gutter={24}> |
| | | <Col span={12}> |
| | | <Form.Item label="分组名称"> |
| | | {getFieldDecorator('title', { |
| | | initialValue: data.title |
| | | {getFieldDecorator('label', { |
| | | initialValue: group.label, |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: this.props.dict['form.required.input'] + '分组名称!' |
| | | } |
| | | ] |
| | | })(<Input placeholder="" autoComplete="off"/>)} |
| | | </Form.Item> |
| | | </Col> |
| | | <Col span={12}> |
| | | <Form.Item label="排序"> |
| | | {getFieldDecorator('sort', { |
| | | initialValue: data.sort |
| | | initialValue: group.hasOwnProperty('sort') ? group.sort : config.groups.length |
| | | })(<InputNumber min={0} max={100} precision={0} />)} |
| | | </Form.Item> |
| | | </Col> |
| | | <Col span={24}> |
| | | <TransferForm dict={this.props.dict} columns={this.props.columns} ref="column-transfer" selected={this.props.card.sublist}/> |
| | | <TransferForm dict={this.props.dict} fields={this.state.source} ref="fields-transfer" selected={this.state.selectds}/> |
| | | </Col> |
| | | </Row> |
| | | </Form> |
| | |
| | | selectedTables: [], // 已选表名 |
| | | originMenu: null, // 原始菜单 |
| | | groupVisible: false, // 全局配置模态框 |
| | | curgroup: null // 当前组,新建或编辑 |
| | | } |
| | | |
| | | /** |
| | |
| | | _config = editAction.pageParam |
| | | } else { |
| | | _config = JSON.parse(JSON.stringify((Source.baseConfig))) |
| | | _config.groups[0].sublist = _config.fields.map(field => field.uuid) |
| | | } |
| | | |
| | | if (!_config.setting.title) { |
| | |
| | | * 1、表单拖拽添加时,检查是否存在示例表单,如存在则去除示例 |
| | | * 2、表单移动后,保存移动后的顺序 |
| | | */ |
| | | handleList = (list) => { |
| | | handleList = (list, group, elementId) => { |
| | | let _config = JSON.parse(JSON.stringify(this.state.config)) |
| | | |
| | | if (list.length > _config.fields.length) { |
| | | _config.fields = list.filter(item => !item.origin) |
| | | if (!group && !elementId) { |
| | | if (list.length > _config.fields.length) { |
| | | _config.fields = list.filter(item => !item.origin) |
| | | |
| | | this.setState({ |
| | | loading: true, |
| | | config: _config |
| | | }, () => { |
| | | this.setState({ |
| | | loading: false |
| | | }) |
| | | }) |
| | | } else { |
| | | _config.fields = list |
| | | this.setState({config: _config}) |
| | | } |
| | | } else if (group && !elementId) { |
| | | if (list.length > group.sublist.length) { |
| | | group.sublist = list |
| | | _config.groups = _config.groups.map(item => { |
| | | if (item.uuid === group.uuid) { |
| | | return group |
| | | } else { |
| | | return item |
| | | } |
| | | }) |
| | | |
| | | this.setState({ |
| | | loading: true, |
| | | config: _config |
| | | }, () => { |
| | | this.setState({ |
| | | loading: false |
| | | }) |
| | | }) |
| | | } else { |
| | | group.sublist = list |
| | | _config.groups = _config.groups.map(item => { |
| | | if (item.uuid === group.uuid) { |
| | | return group |
| | | } else { |
| | | return item |
| | | } |
| | | }) |
| | | this.setState({config: _config}) |
| | | } |
| | | } else if (group && elementId) { |
| | | let element = null |
| | | _config.groups.forEach(item => { |
| | | item.sublist = item.sublist.filter(cell => { |
| | | if (cell.id !== elementId) { |
| | | return true |
| | | } else { |
| | | element = cell |
| | | return false |
| | | } |
| | | }) |
| | | }) |
| | | |
| | | group.sublist.push(element) |
| | | |
| | | _config.groups = _config.groups.map(item => { |
| | | if (item.uuid === group.uuid) { |
| | | return group |
| | | } else { |
| | | return item |
| | | } |
| | | }) |
| | | |
| | | this.setState({ |
| | | loading: true, |
| | |
| | | loading: false |
| | | }) |
| | | }) |
| | | } else { |
| | | _config.fields = list |
| | | this.setState({config: _config}) |
| | | } |
| | | } |
| | | |
| | |
| | | }) |
| | | }) |
| | | |
| | | config.fields.forEach(item => { |
| | | if (columns.has(item.field)) { |
| | | columns.set(item.field, {...item, selected: true}) |
| | | } |
| | | }) |
| | | if (config.groups.length > 1) { |
| | | config.groups.forEach(group => { |
| | | group.sublist.forEach(item => { |
| | | if (columns.has(item.field)) { |
| | | columns.set(item.field, {...item, selected: true}) |
| | | } |
| | | }) |
| | | }) |
| | | } else { |
| | | config.fields.forEach(item => { |
| | | if (columns.has(item.field)) { |
| | | columns.set(item.field, {...item, selected: true}) |
| | | } |
| | | }) |
| | | } |
| | | |
| | | this.setState({ |
| | | tableVisible: true, |
| | |
| | | columns.set(card.field, card) |
| | | }) |
| | | |
| | | let items = [] |
| | | _config.fields.forEach(item => { |
| | | if (columns.has(item.field)) { |
| | | let cell = columns.get(item.field) |
| | | |
| | | if (cell.selected && cell.type === item.type) { // 数据选择状态及类型未修改时,直接添加 |
| | | items.push(item) |
| | | } else if (cell.selected) { // 数据类型修改时,重置类型及初始值 |
| | | item.type = cell.type |
| | | item.initval = '' |
| | | items.push(item) |
| | | } |
| | | columns.delete(item.field) |
| | | } else if (!item.origin) { // 过滤示例项 |
| | | items.push(item) |
| | | } |
| | | }) |
| | | |
| | | let _columns = [...columns.values()] |
| | | let indexes = items.map(card => {return card.id}) |
| | | let id = Math.max(...indexes, 0) + 1 |
| | | |
| | | _columns.forEach(item => { // 循环添加新增字段 |
| | | if (item.selected) { |
| | | let newcard = { |
| | | id: id, |
| | | if (_config.groups.length > 1) { |
| | | _config.groups.forEach(group => { |
| | | let items = [] |
| | | group.sublist.forEach(item => { |
| | | if (columns.has(item.field)) { |
| | | let cell = columns.get(item.field) |
| | | |
| | | if (cell.selected && cell.type === item.type) { // 数据选择状态及类型未修改时,直接添加 |
| | | items.push(item) |
| | | } else if (cell.selected) { // 数据类型修改时,重置类型及初始值 |
| | | item.type = cell.type |
| | | item.initval = '' |
| | | items.push(item) |
| | | } |
| | | columns.delete(item.field) |
| | | } else if (!item.origin) { // 过滤示例项 |
| | | items.push(item) |
| | | } |
| | | }) |
| | | group.sublist = items |
| | | }) |
| | | |
| | | let _columns = [...columns.values()] |
| | | |
| | | let _additems = _columns.map(item => { // 循环添加新增字段 |
| | | return { |
| | | id: Utils.getuuid(), |
| | | uuid: Utils.getuuid(), |
| | | label: item.label, |
| | | field: item.field, |
| | |
| | | orderBy: '', |
| | | orderType: 'asc', |
| | | } |
| | | }) |
| | | _config.groups[_config.groups.length - 1].sublist = [..._config.groups[_config.groups.length - 1].sublist, ..._additems] |
| | | |
| | | items.push(newcard) |
| | | id++ |
| | | } |
| | | }) |
| | | |
| | | _config.fields = items |
| | | } else { |
| | | let items = [] |
| | | _config.fields.forEach(item => { |
| | | if (columns.has(item.field)) { |
| | | let cell = columns.get(item.field) |
| | | |
| | | if (cell.selected && cell.type === item.type) { // 数据选择状态及类型未修改时,直接添加 |
| | | items.push(item) |
| | | } else if (cell.selected) { // 数据类型修改时,重置类型及初始值 |
| | | item.type = cell.type |
| | | item.initval = '' |
| | | items.push(item) |
| | | } |
| | | columns.delete(item.field) |
| | | } else if (!item.origin) { // 过滤示例项 |
| | | items.push(item) |
| | | } |
| | | }) |
| | | |
| | | let _columns = [...columns.values()] |
| | | |
| | | _columns.forEach(item => { // 循环添加新增字段 |
| | | if (item.selected) { |
| | | let newcard = { |
| | | id: Utils.getuuid(), |
| | | uuid: Utils.getuuid(), |
| | | label: item.label, |
| | | field: item.field, |
| | | initval: '', |
| | | type: item.type, |
| | | resourceType: '0', |
| | | setAll: 'false', |
| | | options: [], |
| | | dataSource: '', |
| | | linkField: '', |
| | | valueField: '', |
| | | valueText: '', |
| | | orderBy: '', |
| | | orderType: 'asc', |
| | | } |
| | | |
| | | items.push(newcard) |
| | | } |
| | | }) |
| | | |
| | | _config.fields = items |
| | | } |
| | | |
| | | this.setState({ |
| | | tableVisible: false, |
| | |
| | | }) |
| | | } |
| | | |
| | | handleGroup = () => { |
| | | handleGroup = (group) => { |
| | | let curgroup = '' |
| | | |
| | | if (group) { |
| | | curgroup = group |
| | | } else { |
| | | curgroup = { |
| | | isnew: true, |
| | | label: '', |
| | | default: false, |
| | | uuid: Utils.getuuid(), |
| | | sublist: [] |
| | | } |
| | | } |
| | | |
| | | this.setState({ |
| | | groupVisible: true, |
| | | curgroup: curgroup |
| | | }) |
| | | } |
| | | |
| | | closeGroup = (group) => { |
| | | let _this = this |
| | | |
| | | confirm({ |
| | | content: `确定删除分组<<${group.label}>>吗?`, |
| | | okText: this.state.dict['header.confirm'], |
| | | cancelText: this.state.dict['header.cancel'], |
| | | onOk() { |
| | | let _config = JSON.parse(JSON.stringify(_this.state.config)) |
| | | _config.groups = _config.groups.filter(item => !(item.uuid === group.uuid)) |
| | | let _length = _config.groups.length |
| | | |
| | | if (_length === 1) { |
| | | _config.fields = [...group.sublist, ..._config.groups[0].sublist] |
| | | _config.groups[0].sublist = [] |
| | | } else { |
| | | _config.groups[_length - 1].sublist = [...group.sublist, ..._config.groups[_length - 1].sublist] |
| | | } |
| | | |
| | | _this.setState({ |
| | | config: _config, |
| | | loading: true |
| | | }, () => { |
| | | _this.setState({ |
| | | loading: false |
| | | }) |
| | | }) |
| | | }, |
| | | onCancel() {} |
| | | }) |
| | | } |
| | | |
| | | handleGroupSave = () => { |
| | | let _group = JSON.parse(JSON.stringify(this.state.curgroup)) |
| | | let config = JSON.parse(JSON.stringify(this.state.config)) |
| | | |
| | | this.groupRef.handleConfirm().then(res => { |
| | | _group = {..._group, ...res.target} |
| | | |
| | | if (_group.isnew) { |
| | | delete _group.isnew |
| | | config.groups.unshift(_group) |
| | | config.groups = config.groups.map(item => { |
| | | if (item.default) { |
| | | return res.default |
| | | } else { |
| | | return item |
| | | } |
| | | }) |
| | | } else { |
| | | config.groups = config.groups.map(item => { |
| | | if (item.uuid === _group.uuid) { |
| | | return _group |
| | | } else if (item.default) { |
| | | return res.default |
| | | } else { |
| | | return item |
| | | } |
| | | }) |
| | | } |
| | | |
| | | config.fields = [] |
| | | |
| | | config.groups = config.groups.sort((a, b) => { |
| | | return a.sort - b.sort |
| | | }) |
| | | |
| | | this.setState({ |
| | | groupVisible: false, |
| | | curgroup: '', |
| | | loading: true, |
| | | config: config |
| | | }, () => { |
| | | this.setState({ |
| | | loading: false |
| | | }) |
| | | }) |
| | | }) |
| | | } |
| | | |
| | | render () { |
| | |
| | | config.groups.map(group => { |
| | | return ( |
| | | <div key={group.uuid}> |
| | | <p className="group-title">{group.label}</p> |
| | | <p className={'group-title' + (group.default ? ' default' : '')}> |
| | | <span>{group.label}</span> |
| | | <Icon className="edit" type="edit" onClick={() => {this.handleGroup(group)}} /> |
| | | <Icon className="edit close" type="close" onClick={() => {this.closeGroup(group)}} /> |
| | | </p> |
| | | <DragElement |
| | | list={config.fields} |
| | | group={group} |
| | | list={group.sublist} |
| | | setting={config.setting} |
| | | placeholder={this.state.dict['header.form.modal.placeholder']} |
| | | handleList={this.handleList} |
| | |
| | | />} |
| | | </Modal> |
| | | <Modal |
| | | wrapClassName="modal-fields" |
| | | title={this.state.dict['header.edit']} |
| | | visible={this.state.tableVisible} |
| | | width={'65vw'} |
| | |
| | | destroyOnClose |
| | | > |
| | | <GroupForm |
| | | data={config.setting} |
| | | config={config} |
| | | group={this.state.curgroup} |
| | | dict={this.state.dict} |
| | | wrappedComponentRef={(inst) => this.settingRef = inst} |
| | | wrappedComponentRef={(inst) => this.groupRef = inst} |
| | | /> |
| | | </Modal> |
| | | </div> |
| | |
| | | .modal-form { |
| | | min-height: 87px; |
| | | .group-title { |
| | | margin: 10px 0px; |
| | | position: relative; |
| | | min-height: 22px; |
| | | margin-bottom: 10px; |
| | | padding-top: 10px; |
| | | border-bottom: 1px solid #e8e8e8; |
| | | .edit { |
| | | position: absolute; |
| | | left: 0; |
| | | top: 0px; |
| | | color: #1890ff; |
| | | cursor: pointer; |
| | | display: none; |
| | | } |
| | | .edit.close { |
| | | left: 20px; |
| | | color: #ff4d4f; |
| | | } |
| | | } |
| | | .group-title.default { |
| | | color: #bcbcbc; |
| | | } |
| | | .group-title:not(.default):hover { |
| | | .edit { |
| | | display: inline-block; |
| | | } |
| | | } |
| | | > .ant-row { |
| | | min-height: 120px; |
| | |
| | | background: rgba(0, 0, 0, 0); |
| | | } |
| | | } |
| | | |
| | | .modal-fields { |
| | | .ant-modal { |
| | | top: 50px; |
| | | padding-bottom: 5px; |
| | | .ant-modal-body { |
| | | max-height: calc(100vh - 190px); |
| | | overflow-y: auto; |
| | | .ant-empty { |
| | | margin: 15vh 8px; |
| | | } |
| | | } |
| | | .ant-modal-body::-webkit-scrollbar { |
| | | width: 7px; |
| | | } |
| | | .ant-modal-body::-webkit-scrollbar-thumb { |
| | | border-radius: 5px; |
| | | box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.13); |
| | | background: rgba(0, 0, 0, 0.13); |
| | | } |
| | | .ant-modal-body::-webkit-scrollbar-track { |
| | | box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.05); |
| | | border-radius: 3px; |
| | | border: 1px solid rgba(0, 0, 0, 0.07); |
| | | background: rgba(0, 0, 0, 0); |
| | | } |
| | | } |
| | | } |
| | |
| | | sort: 101, |
| | | uuid: Utils.getuuid(), |
| | | sublist: [] |
| | | }, { |
| | | label: '组1', |
| | | sort: 1, |
| | | default: false, |
| | | uuid: Utils.getuuid(), |
| | | sublist: [] |
| | | }], |
| | | fields: [ |
| | | { |
| | | origin: true, |
| | | id: 0, |
| | | id: Utils.getuuid(), |
| | | uuid: Utils.getuuid(), |
| | | label: 'text', |
| | | field: '', |
| | |
| | | display: 'dropdown' |
| | | }, { |
| | | origin: true, |
| | | id: 1, |
| | | id: Utils.getuuid(), |
| | | uuid: Utils.getuuid(), |
| | | label: 'select', |
| | | field: '', |
| | |
| | | display: 'dropdown' |
| | | }, { |
| | | origin: true, |
| | | id: 2, |
| | | id: Utils.getuuid(), |
| | | uuid: Utils.getuuid(), |
| | | label: 'date', |
| | | field: '', |
| | |
| | | |
| | | class TransferForm extends Component { |
| | | static propTypes = { |
| | | columns: PropTypes.array, |
| | | fields: PropTypes.array, |
| | | selected: PropTypes.array, |
| | | dict: PropTypes.object, // 字典项 |
| | | } |
| | |
| | | |
| | | UNSAFE_componentWillMount() { |
| | | let datas = new Map() |
| | | this.props.columns.forEach(item => { |
| | | if (item.field) { |
| | | this.props.fields.forEach(item => { |
| | | if (!item.origin) { |
| | | datas.set(item.uuid, item) |
| | | } |
| | | }) |
| | |
| | | this.props.selected.forEach(item => { |
| | | if (datas.has(item)) { |
| | | selecteds.push(item) |
| | | // datas.delete(item) |
| | | } |
| | | }) |
| | | |
| | |
| | | } |
| | | |
| | | render() { |
| | | const { targetKeys, selectedKeys } = this.state |
| | | const { data, targetKeys, selectedKeys } = this.state |
| | | |
| | | return ( |
| | | <div className="common-table-columns-transfer"> |
| | | <div className="modal-fields-transfer"> |
| | | <Transfer |
| | | dataSource={this.state.data} |
| | | dataSource={data} |
| | | titles={[this.props.dict['header.form.column.source'], this.props.dict['header.form.column.target']]} |
| | | targetKeys={targetKeys} |
| | | locale={{itemUnit: this.props.dict['header.form.column.itemUnit'], itemsUnit: this.props.dict['header.form.column.itemsUnit']}} |
| | |
| | | .common-table-columns-transfer { |
| | | .modal-fields-transfer { |
| | | padding-left: 18px; |
| | | .ant-transfer-list { |
| | | width: 296px; |
| | |
| | | * @return {String} value |
| | | */ |
| | | static formatOptions (value) { |
| | | if (!value) return '' |
| | | |
| | | let salt = 'minKe' // 盐值 |
| | | // 关键字转换规则 |
| | | let format = [{ |