From 7b0dbecd1d6155d26ec67be0a47a16264c738c85 Mon Sep 17 00:00:00 2001 From: king <18310653075@163.com> Date: 星期二, 09 五月 2023 14:48:10 +0800 Subject: [PATCH] 2023-05-09 --- src/templates/sharecomponent/fieldscomponent/index.jsx | 340 ++++++++++++++++++++++++++++++++------------------------ 1 files changed, 192 insertions(+), 148 deletions(-) diff --git a/src/templates/sharecomponent/fieldscomponent/index.jsx b/src/templates/sharecomponent/fieldscomponent/index.jsx index e83eded..c493ccd 100644 --- a/src/templates/sharecomponent/fieldscomponent/index.jsx +++ b/src/templates/sharecomponent/fieldscomponent/index.jsx @@ -1,34 +1,32 @@ import React, {Component} from 'react' import PropTypes from 'prop-types' -import { fromJS } from 'immutable' +import { is, fromJS } from 'immutable' import { Button, Modal, Empty, notification } from 'antd' import Utils from '@/utils/utils.js' -import zhCN from '@/locales/zh-CN/model.js' -import enUS from '@/locales/en-US/model.js' import EditCard from './editcard' +import MKEmitter from '@/utils/events.js' import './index.scss' -// **鎮茶鑰呭線寰�姝g‘锛屼箰瑙傝�呭線寰�鎴愬姛 class FieldsComponent extends Component { static propTpyes = { type: PropTypes.string, // 鎼滅储鏉′欢娣诲姞銆佹樉绀哄垪娣诲姞 config: PropTypes.object, // 瀹瑰櫒Id - tableFields: PropTypes.string, // 宸查�夎〃瀛楁闆� updatefield: PropTypes.func } state = { - dict: (!localStorage.getItem('lang') || localStorage.getItem('lang') === 'zh-CN') ? zhCN : enUS, - fields: [], // 瀛楁闆� - tableVisible: false, // 妯℃�佹鎺у埗 + appType: sessionStorage.getItem('appType'), + fields: [], // 瀛楁闆� + visible: false, // 妯℃�佹鎺у埗 + selectCards: [] } queryField = () => { - const { type, config, tableFields } = this.props + const { type, config } = this.props // 鍒ゆ柇鏄惁宸查�夋嫨琛ㄥ悕 - if (!config.tables || config.tables.length === 0) { + if (!window.GLOB.tableFields || window.GLOB.tableFields.length === 0) { notification.warning({ top: 92, message: '璇烽�夋嫨琛ㄥ悕锛�', @@ -39,170 +37,222 @@ // 琛ㄥ瓧娈甸泦杞负map鏁版嵁 let columns = new Map() - tableFields.forEach(table => { + window.GLOB.tableFields.forEach(table => { table.columns.forEach(column => { - columns.set(column.field, column) + columns.set(column.field.toLowerCase(), column) }) }) if (type === 'search') { // 娣诲姞鎼滅储鏉′欢锛屽瓧娈甸泦涓瓨鍦ㄦ悳绱㈡潯浠跺瓧娈碉紝浣跨敤鎼滅储鏉′欢瀵硅薄鏇挎崲瀛楁闆嗭紝璁剧疆鏁版嵁绫诲瀷 config.search.forEach(item => { - if (columns.has(item.field)) { - let _datatype = columns.get(item.field).datatype - columns.set(item.field, {...item, selected: true, datatype: _datatype}) + if (item.field && columns.has(item.field.toLowerCase())) { + let _datatype = columns.get(item.field.toLowerCase()).datatype + columns.set(item.field.toLowerCase(), {...item, origin: true, datatype: _datatype}) } }) } else if (type === 'columns') { // 娣诲姞鏄剧ず鍒楋紝瀛楁闆嗕腑瀛樺湪鏄剧ず鍒楀瓧娈碉紝浣跨敤鏄剧ず鍒楀璞℃浛鎹㈠瓧娈甸泦锛岃缃暟鎹被鍨� config.columns.forEach(item => { - if (columns.has(item.field)) { - let _datatype = columns.get(item.field).datatype - columns.set(item.field, {...item, selected: true, datatype: _datatype}) + if (item.field && columns.has(item.field.toLowerCase())) { + let _datatype = columns.get(item.field.toLowerCase()).datatype + columns.set(item.field.toLowerCase(), {...item, origin: true, datatype: _datatype}) + } + }) + } else if (type === 'fields') { + config.columns.forEach(item => { + if (columns.has(item.field.toLowerCase())) { + let _datatype = columns.get(item.field.toLowerCase()).datatype + columns.set(item.field.toLowerCase(), {...item, origin: true, datatype: _datatype}) + } + }) + } else if (type === 'form') { + config.fields.forEach(item => { + if (item.field && columns.has(item.field.toLowerCase())) { + let _datatype = columns.get(item.field.toLowerCase()).datatype + columns.set(item.field.toLowerCase(), {...item, origin: true, datatype: _datatype}) } }) } // 鏄剧ず瀛楁闆嗗脊绐� this.setState({ - tableVisible: true, + visible: true, + selectCards: [], fields: [...columns.values()] }) } addFieldSubmit = () => { const { type } = this.props + const { selectCards, fields } = this.state // 瀛楁闆嗕负绌猴紝鍏抽棴寮圭獥 - if (!this.state.fields || this.state.fields.length === 0) { - this.setState({ - tableVisible: false - }) + if (!fields || fields.length === 0) { + this.setState({ visible: false }) } let config = fromJS(this.props.config).toJS() // 鑾峰彇宸查�夊瓧娈甸泦鍚� - let cards = this.refs.searchcard.state.selectCards + let cards = selectCards let columnsMap = new Map() cards.forEach(card => { - columnsMap.set(card.field, card) + columnsMap.set(card.field.toLowerCase(), card) }) let items = [] + let keys = [] if (type === 'search') { - config.search.forEach(item => { - if (columnsMap.has(item.field)) { - let cell = columnsMap.get(item.field) + selectCards.forEach(item => { + let _match = '' + let initval = '' + let _type = item.type + if (item.type === 'date') { + _type = 'daterange' + } else if (item.type === 'select') { + _match = '=' + } else { + _type = 'text' + _match = 'like' + } - if (cell.selected && cell.type === item.type) { // 鏁版嵁鏈慨鏀� - items.push(item) - } else if (cell.selected) { // 鏁版嵁绫诲瀷淇敼 - if (cell.type === 'select') { - item.match = '=' - } else if (cell.type === 'daterange') { - item.match = 'between' + let newcard = { + uuid: Utils.getuuid(), + label: item.label, + field: item.field, + initval: initval, + type: _type, + resourceType: '0', + options: [], + orderType: 'asc', + match: _match, + } + + items.push(newcard) + keys.push(item.field.toLowerCase()) + }) + MKEmitter.emit('plusSearch', config.uuid, items, 'multil') + } else if (type === 'columns') { + selectCards.forEach(item => { + let newcard = { + uuid: Utils.getuuid(), + Align: 'left', + label: item.label, + field: item.field, + Hide: 'false', + IsSort: 'true', + type: item.type, + Width: item.type === 'number' ? 80 : 120 + } + + if (item.type === 'number') { + newcard.decimal = item.decimal + } else { + newcard.fieldlength = item.length || 50 + } + + items.push(newcard) + keys.push(item.field.toLowerCase()) + }) + MKEmitter.emit('plusColumns', config.uuid, items) + } else if (type === 'fields') { + items = [...config.columns] + + selectCards.forEach(item => { + let _t = item.$datatype || (item.type === 'number' ? 'Decimal(18,0)' : 'Nvarchar(50)') + let newcard = { + uuid: Utils.getuuid(), + label: item.label, + field: item.field, + datatype: _t + } + items.unshift(newcard) + keys.push(item.field.toLowerCase()) + }) + + this.props.updatefield(items) + } else if (type === 'form') { + let firstItem = config.fields[0] + let span = this.state.appType === 'mob' ? 24 : 12 + let labelwidth = 33.3 + if (firstItem && firstItem.span) { + span = firstItem.span + labelwidth = firstItem.labelwidth || 33.3 + } + selectCards.forEach(item => { // 寰幆娣诲姞鏂板瀛楁 + let newcard = { + uuid: Utils.getuuid(), + label: item.label, + field: item.field, + initval: item.type === 'number' ? 0 : '', + type: item.type, + resourceType: '0', + span: span, + labelwidth: labelwidth, + options: [], + dataSource: '', + decimal: item.decimal, + orderType: 'asc', + readonly: 'false', + required: 'true' + } + + if (/^icon|images?$/ig.test(item.field)) { + newcard.type = 'fileupload' + newcard.fileType = 'picture-card' + newcard.fieldlength = item.length || 512 + newcard.maxSize = 1 + newcard.maxfile = 1 + } else if (item.type === 'text' && item.length >= 256) { + newcard.type = 'textarea' + newcard.required = 'false' + newcard.fieldlength = item.length + if (firstItem) { + if (firstItem.type === newcard.type) { + newcard.span = firstItem.span + newcard.labelwidth = firstItem.labelwidth } else { - cell.type = 'text' - item.match = 'like' + newcard.span = 24 + if (firstItem.span === 12) { + newcard.labelwidth = 16.2 + } else if (firstItem.span === 8) { + newcard.labelwidth = 10.5 + } else if (firstItem.span === 6) { + newcard.labelwidth = 7.7 + } } - - item.type = cell.type - item.initval = '' - items.push(item) - } - columnsMap.delete(item.field) - } else if (!item.origin) { - items.push(item) - } - }) - - let _columns = [...columnsMap.values()] - - _columns.forEach(item => { - if (item.selected) { - let _match = '' - if (item.type === 'select') { - _match = '=' - } else if (item.type === 'daterange') { - _match = 'between' } else { - item.type = 'text' - _match = 'like' + newcard.span = 24 + newcard.labelwidth = 16.2 } - - let newcard = { - 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', - match: _match, - display: 'dropdown' - } - - items.push(newcard) } + + items.push(newcard) + keys.push(item.field.toLowerCase()) }) - } else if (type === 'columns') { - config.columns.forEach(item => { - if (columnsMap.has(item.field)) { - let cell = columnsMap.get(item.field) - - if (cell.selected) { - items.push(item) - } - columnsMap.delete(item.field) - } else if (!item.origin) { - items.push(item) - } - }) - - let _columns = [...columnsMap.values()] - - _columns.forEach(item => { - if (item.selected) { - let newcard = { - uuid: Utils.getuuid(), - Align: 'left', - label: item.label, - field: item.field, - Hide: 'false', - IsSort: item.type === 'picture' ? 'false' : 'true', - type: item.type, - Width: 120 - } - - items.push(newcard) - } - }) + + this.props.plusFields(items) } - let _config = null - - if (type === 'search') { - _config = {...this.props.config, search: items} - } else if (type === 'columns') { - _config = {...this.props.config, columns: items} - } - - if (_config) { - this.props.updatefield(_config) - - notification.success({ - top: 92, - message: '鎿嶄綔鎴愬姛', - duration: 2 + this.setState({ + selectCards: [], + fields: fromJS(fields).toJS().map(cell => { + if (keys.includes(cell.field.toLowerCase())) { + cell.origin = true + } + return cell }) - } + }) + + notification.success({ + top: 92, + message: '鎿嶄綔鎴愬姛', + duration: 2 + }) + } + + shouldComponentUpdate (nextProps, nextState) { + return !is(fromJS(this.state), fromJS(nextState)) } /** @@ -214,43 +264,37 @@ } } + onChange = (selectCards) => { + this.setState({selectCards}) + } + render() { const { type } = this.props - const { dict, fields } = this.state + const { fields } = this.state - let label = '' + let label = '鎵归噺娣诲姞' if (type === 'search') { - label = dict['header.menu.search.add'] + label = '娣诲姞鎼滅储' } else if (type === 'columns') { - label = dict['header.menu.column.add'] + label = '娣诲姞鏄剧ず鍒�' } return ( - <div> + <div className="quickly-add"> <Button type="primary" block onClick={this.queryField}>{label}</Button> {/* 鏍规嵁瀛楁鍚嶆坊鍔犳樉绀哄垪鍙婃悳绱㈡潯浠� */} <Modal wrapClassName="model-table-fieldmanage-modal" - title={dict['model.edit']} - visible={this.state.tableVisible} + title="缂栬緫" + visible={this.state.visible} width={'65vw'} maskClosable={false} - style={{minWidth: '900px', maxWidth: '1200px'}} - cancelText={dict['header.close']} + cancelText="鍏抽棴" onOk={this.addFieldSubmit} - onCancel={() => { // 鍙栨秷娣诲姞 - this.setState({ - tableVisible: false - }) - }} + onCancel={() => this.setState({ visible: false })} destroyOnClose > - {fields.length > 0 ? - <EditCard data={fields} ref="searchcard" type={type} dict={dict} /> : null - } - {(!fields || fields.length === 0) && - <Empty /> - } + {fields.length > 0 ? <EditCard data={fields} onChange={this.onChange} type={type} /> : <Empty />} </Modal> </div> ) -- Gitblit v1.8.0