From 871597aaf2c838946723ee44fc7fa12487b56d34 Mon Sep 17 00:00:00 2001 From: king <18310653075@163.com> Date: 星期三, 22 一月 2025 15:14:25 +0800 Subject: [PATCH] 2025-01-22 --- src/templates/sharecomponent/fieldscomponent/index.jsx | 217 ++++++++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 176 insertions(+), 41 deletions(-) diff --git a/src/templates/sharecomponent/fieldscomponent/index.jsx b/src/templates/sharecomponent/fieldscomponent/index.jsx index 41a9a0a..4bbf651 100644 --- a/src/templates/sharecomponent/fieldscomponent/index.jsx +++ b/src/templates/sharecomponent/fieldscomponent/index.jsx @@ -3,6 +3,7 @@ import { is, fromJS } from 'immutable' import { Button, Modal, Empty, notification } from 'antd' +import Api from '@/api' import Utils from '@/utils/utils.js' import EditCard from './editcard' @@ -11,8 +12,8 @@ class FieldsComponent extends Component { static propTpyes = { - type: PropTypes.string, // 鎼滅储鏉′欢娣诲姞銆佹樉绀哄垪娣诲姞 - config: PropTypes.object, // 瀹瑰櫒Id + type: PropTypes.string, + config: PropTypes.object, updatefield: PropTypes.func } @@ -23,10 +24,8 @@ selectCards: [] } - queryField = () => { - const { type, config } = this.props - // 鍒ゆ柇鏄惁宸查�夋嫨琛ㄥ悕 - if (!window.GLOB.tableFields || window.GLOB.tableFields.length === 0) { + checkField = () => { + if (!window.GLOB.publicTables || window.GLOB.publicTables.length === 0) { notification.warning({ top: 92, message: '璇烽�夋嫨琛ㄥ悕锛�', @@ -35,9 +34,110 @@ return } + window.GLOB.tableFields = window.GLOB.tableFields || [] + + let index = 0 + + let deffers = window.GLOB.publicTables.map(item => { + let tb = window.GLOB.tableFields.filter(tab => tab.tableName === item.TbName)[0] + + if (tb) { + return Promise.resolve(fromJS(tb).toJS()) + } + + return new Promise(resolve => { + setTimeout(() => { + Api.getCloudConfig({func: 'sPC_Get_FieldName', TBName: item.TbName}).then(res => { + let tabmsg = { + status: res.status, + message: res.message, + tableName: item.TbName, + columns: [] + } + + if (res.FDName && res.FDName.length > 0) { + tabmsg.columns = res.FDName.map(item => { + let _type = item.FieldType.toLowerCase() + let _datatype = item.FieldType.toLowerCase() + let _decimal = 0 + let _length = 50 + if (/^nvarchar/.test(_type)) { + try { // 瀛樺湪max + _length = +_type.match(/\d+/)[0] || 50 + } catch (e) { + _length = 4000 + } + _type = 'text' + } else if (/^int/.test(_type)) { + _type = 'number' + } else if (/^decimal/.test(_type)) { + _decimal = _type.split(',')[1] + _decimal = parseInt(_decimal) + _type = 'number' + } else if (/^datetime/.test(_type)) { + _type = 'datetime' + } else if (/^date/.test(_type)) { + _type = 'date' + } else { + _type = 'text' + } + + if (/^nvarchar/.test(_datatype)) { + _datatype = _datatype.replace(/^nvarchar/, 'Nvarchar') + } else if (/^decimal/.test(_datatype)) { + _datatype = _datatype.replace(/^decimal/, 'Decimal') + } else if (/^int/.test(_datatype)) { + _datatype = _datatype.replace(/^int/, 'Int') + } + + return { + field: item.FieldName || '', + label: item.FieldDec, + type: _type, + datatype: _type, + decimal: _decimal, + length: _length, + $datatype: _datatype + } + }) + } + + resolve(tabmsg) + }) + }, index * 50) + + index++ + }) + }) + Promise.all(deffers).then(response => { + let error = false + let _columns = response + + response.forEach(item => { + if (!item.status) { + error = item.message || '瀛楁鏌ヨ澶辫触锛�' + } + }) + + if (error) { + notification.warning({ + top: 92, + message: error, + duration: 5 + }) + } else { + window.GLOB.tableFields = _columns + this.queryField(_columns) + } + }) + } + + queryField = (tableFields) => { + const { type, config } = this.props + // 琛ㄥ瓧娈甸泦杞负map鏁版嵁 let columns = new Map() - window.GLOB.tableFields.forEach(table => { + tableFields.forEach(table => { table.columns.forEach(column => { columns.set(column.field.toLowerCase(), column) }) @@ -46,9 +146,20 @@ if (type === 'search') { // 娣诲姞鎼滅储鏉′欢锛屽瓧娈甸泦涓瓨鍦ㄦ悳绱㈡潯浠跺瓧娈碉紝浣跨敤鎼滅储鏉′欢瀵硅薄鏇挎崲瀛楁闆嗭紝璁剧疆鏁版嵁绫诲瀷 config.search.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}) + if (item.field) { + if (/,/.test(item.field)) { + item.field.split(',').forEach(n => { + if (columns.has(n.toLowerCase())) { + let _datatype = columns.get(n.toLowerCase()).datatype + columns.set(n.toLowerCase(), {...item, field: n, origin: true, datatype: _datatype}) + } + }) + } else { + 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 === 'columns') { @@ -93,23 +204,19 @@ let config = fromJS(this.props.config).toJS() - // 鑾峰彇宸查�夊瓧娈甸泦鍚� - let cards = selectCards - let columnsMap = new Map() - cards.forEach(card => { - columnsMap.set(card.field.toLowerCase(), card) - }) - let items = [] let keys = [] if (type === 'search') { selectCards.forEach(item => { let _match = '' let initval = '' - if (item.type === 'select') { + let _type = item.type + if (item.type === 'date') { + _type = 'daterange' + } else if (item.type === 'select') { _match = '=' } else { - item.type = 'text' + _type = 'text' _match = 'like' } @@ -118,7 +225,7 @@ label: item.label, field: item.field, initval: initval, - type: item.type, + type: _type, resourceType: '0', options: [], orderType: 'asc', @@ -137,8 +244,8 @@ label: item.label, field: item.field, Hide: 'false', - IsSort: 'true', - type: item.type, + IsSort: 'false', + type: item.type === 'number' ? 'number' : 'text', Width: item.type === 'number' ? 80 : 120 } @@ -146,6 +253,12 @@ newcard.decimal = item.decimal } else { newcard.fieldlength = item.length || 50 + } + + if (item.type === 'date') { + newcard.textFormat = 'YYYY-MM-DD' + } else if (item.type === 'datetime') { + newcard.textFormat = 'YYYY-MM-DD HH:mm:ss' } items.push(newcard) @@ -163,16 +276,19 @@ field: item.field, datatype: _t } - items.push(newcard) + + items.unshift(newcard) keys.push(item.field.toLowerCase()) }) this.props.updatefield(items) } else if (type === 'form') { - let lastItem = config.fields[config.fields.length - 1] + let firstItem = config.fields[0] let span = this.state.appType === 'mob' ? 24 : 12 - if (lastItem && lastItem.span) { - span = lastItem.span + let labelwidth = 33.3 + if (firstItem && firstItem.span) { + span = firstItem.span + labelwidth = firstItem.labelwidth || 33.3 } selectCards.forEach(item => { // 寰幆娣诲姞鏂板瀛楁 let newcard = { @@ -183,34 +299,46 @@ type: item.type, resourceType: '0', span: span, - labelwidth: 33.3, + labelwidth: labelwidth, options: [], dataSource: '', decimal: item.decimal, orderType: 'asc', readonly: 'false', - required: 'true' + required: 'true', + readin: 'top' } - if (item.type === 'text' && item.length >= 256) { + 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 (lastItem && lastItem.type === newcard.type) { - newcard.span = lastItem.span - newcard.labelwidth = lastItem.labelwidth - } else if (lastItem) { - newcard.span = 24 - if (lastItem.span === 12) { - newcard.labelwidth = 16.2 - } else if (lastItem.span === 8) { - newcard.labelwidth = 10.5 - } else if (lastItem.span === 8) { - newcard.labelwidth = 7.7 + if (firstItem) { + if (firstItem.type === newcard.type) { + newcard.span = firstItem.span + newcard.labelwidth = firstItem.labelwidth + } else { + 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 + } } } else { newcard.span = 24 newcard.labelwidth = 16.2 } + } else if (item.type === 'text') { + newcard.fieldlength = item.length || 50 } items.push(newcard) @@ -258,9 +386,16 @@ const { type } = this.props const { fields } = this.state + let label = '鎵归噺娣诲姞' + if (type === 'search') { + label = '娣诲姞鎼滅储' + } else if (type === 'columns') { + label = '娣诲姞鏄剧ず鍒�' + } + return ( <div className="quickly-add"> - <Button type="primary" block onClick={this.queryField}>鎵归噺娣诲姞</Button> + <Button type="primary" block onClick={this.checkField}>{label}</Button> {/* 鏍规嵁瀛楁鍚嶆坊鍔犳樉绀哄垪鍙婃悳绱㈡潯浠� */} <Modal wrapClassName="model-table-fieldmanage-modal" -- Gitblit v1.8.0