From 471988e97c28ba5458c8a34ccdbf092b4a1c287c Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期四, 18 十二月 2025 12:04:46 +0800
Subject: [PATCH] 2025-12-18
---
src/tabviews/custom/components/form/simple-form/index.jsx | 351 ++++++++++++++++++++++++++++++++++++++++++---------------
1 files changed, 256 insertions(+), 95 deletions(-)
diff --git a/src/tabviews/custom/components/form/simple-form/index.jsx b/src/tabviews/custom/components/form/simple-form/index.jsx
index 31331d5..fc9822d 100644
--- a/src/tabviews/custom/components/form/simple-form/index.jsx
+++ b/src/tabviews/custom/components/form/simple-form/index.jsx
@@ -1,15 +1,13 @@
import React, {Component} from 'react'
import PropTypes from 'prop-types'
import { is, fromJS } from 'immutable'
-import { Spin, notification, Modal } from 'antd'
+import { Spin, Button } from 'antd'
import Api from '@/api'
import UtilsDM from '@/utils/utils-datamanage.js'
import asyncComponent from '@/utils/asyncComponent'
import asyncSpinComponent from '@/utils/asyncSpinComponent'
import MKEmitter from '@/utils/events.js'
-import zhCN from '@/locales/zh-CN/main.js'
-import enUS from '@/locales/en-US/main.js'
import './index.scss'
const MutilForm = asyncSpinComponent(() => import('@/tabviews/zshare/mutilform'))
@@ -18,85 +16,102 @@
class SimpleForm extends Component {
static propTpyes = {
- data: PropTypes.array, // 缁熶竴鏌ヨ鏁版嵁
- config: PropTypes.object, // 缁勪欢閰嶇疆淇℃伅
- mainSearch: PropTypes.any, // 澶栧眰鎼滅储鏉′欢
+ config: PropTypes.object
}
state = {
- dict: sessionStorage.getItem('lang') !== 'en-US' ? zhCN : enUS,
BID: '',
config: null,
loading: false,
- sync: false,
data: null,
group: null,
- BData: '',
- step: 0
+ BData: ''
}
UNSAFE_componentWillMount () {
- const { data } = this.props
- let config = fromJS(this.props.config).toJS()
+ const { config } = this.props
+ let _config = fromJS(config).toJS()
let _data = null
- let _sync = false
-
let BID = ''
let BData = ''
- if (config.setting.supModule) {
- BData = window.GLOB.CacheData.get(config.setting.supModule)
+ if (_config.setting.supModule) {
+ BData = window.GLOB.CacheData.get(_config.setting.supModule)
} else {
- BData = window.GLOB.CacheData.get(config.$pageId)
+ BData = window.GLOB.CacheData.get(_config.$pageId)
}
if (BData) {
BID = BData.$BID || ''
}
- if (config.wrap.datatype !== 'static') {
- _sync = config.setting.sync === 'true'
+ if (_config.wrap.datatype === 'dynamic') {
+ _config.setting.onload = _config.setting.sync === 'true' ? 'false' : _config.setting.onload || 'true'
- if (_sync && data && data[config.dataName]) {
- _data = data[config.dataName]
- if (Array.isArray(_data)) {
- _data = _data[0] || {$$empty: true}
- }
- _sync = false
+ if (_config.setting.supModule && !BID) {
+ _config.setting.onload = 'false'
+ }
+
+ if (_config.setting.sync === 'true' && window.GLOB.SyncData.has(_config.dataName)) {
+ _data = window.GLOB.SyncData.get(_config.dataName) || []
+ _data = _data[0] || {$$empty: true}
+ _data.$$uuid = _data[_config.setting.primaryKey] || ''
+
+ _config.setting.sync = 'false'
+
+ window.GLOB.SyncData.delete(_config.dataName)
+ }
+ } else if (_config.wrap.datatype === 'public') {
+ if (window.GLOB.CacheData.has(_config.wrap.publicId)) {
+ _data = window.GLOB.CacheData.get(_config.wrap.publicId)
+ _data = fromJS(_data).toJS()
+ _data.$$BID = BID || ''
+ _data.$$BData = BData || ''
}
} else {
_data = {$$empty: true}
}
- let _group = config.subcards[0]
+ let _group = _config.subcards[0]
- if (_group.subButton.enable === 'false') {
+ if (_config.wrap.refocus) {
+ _group.setting.refocus = _config.wrap.refocus
+ }
+
+ if (_group.subButton.enable === 'false' && (!_group.closeButton || _group.closeButton.enable !== 'true') && (!_group.resetButton || _group.resetButton.enable !== 'true')) {
_group.subButton.style.display = 'none'
_group.$button = 'no-button'
}
this.setState({
- sync: _sync,
data: _data,
group: _group,
BID: BID || '',
BData: BData || '',
- config: config,
- arr_field: config.columns.map(col => col.field).join(','),
- }, () => {
- if (config.wrap.datatype !== 'static' && config.setting.sync !== 'true' && config.setting.onload === 'true') {
- setTimeout(() => {
- this.loadData()
- }, config.setting.delay || 0)
- }
+ config: _config
})
}
componentDidMount () {
+ const { config } = this.state
+
MKEmitter.addListener('reloadData', this.reloadData)
MKEmitter.addListener('mkFormSubmit', this.mkFormSubmit)
MKEmitter.addListener('resetSelectLine', this.resetParentParam)
+ MKEmitter.addListener('queryModuleParam', this.queryModuleParam)
MKEmitter.addListener('refreshByButtonResult', this.refreshByButtonResult)
+
+ if (config.setting.sync === 'true') {
+ MKEmitter.addListener('transferSyncData', this.transferSyncData)
+ }
+
+ if (config.wrap.datatype === 'public') {
+ MKEmitter.addListener('mkPublicData', this.mkPublicData)
+ } else if (config.setting.useMSearch) {
+ MKEmitter.addListener('searchRefresh', this.searchRefresh)
+ }
+
+ this.initExec()
}
shouldComponentUpdate (nextProps, nextState) {
@@ -108,57 +123,164 @@
return
}
MKEmitter.removeListener('reloadData', this.reloadData)
+ MKEmitter.removeListener('mkPublicData', this.mkPublicData)
MKEmitter.removeListener('mkFormSubmit', this.mkFormSubmit)
+ MKEmitter.removeListener('searchRefresh', this.searchRefresh)
MKEmitter.removeListener('resetSelectLine', this.resetParentParam)
+ MKEmitter.removeListener('transferSyncData', this.transferSyncData)
+ MKEmitter.removeListener('queryModuleParam', this.queryModuleParam)
MKEmitter.removeListener('refreshByButtonResult', this.refreshByButtonResult)
}
- /**
- * @description 鍥捐〃鏁版嵁鏇存柊锛屽埛鏂板唴瀹�
- */
- UNSAFE_componentWillReceiveProps (nextProps) {
- const { sync, config } = this.state
-
- if (sync && !is(fromJS(this.props.data), fromJS(nextProps.data))) {
- let _data = {$$empty: true}
- if (nextProps.data && nextProps.data[config.dataName]) {
- _data = nextProps.data[config.dataName]
- if (Array.isArray(_data)) {
- _data = _data[0] || {$$empty: true}
- }
- }
-
- this.setState({sync: false, data: _data})
- } else if (config.setting.useMSearch && nextProps.mainSearch && !is(fromJS(this.props.mainSearch), fromJS(nextProps.mainSearch))) {
- this.setState({}, () => {
+ initExec = () => {
+ const { config } = this.state
+
+ if (config.wrap.datatype === 'dynamic' && config.setting.onload === 'true') {
+ setTimeout(() => {
this.loadData()
+ }, config.setting.delay || 0)
+ }
+ }
+
+ transferSyncData = (syncId) => {
+ const { config } = this.state
+
+ if (config.$syncId !== syncId) return
+
+ let _data = window.GLOB.SyncData.get(config.dataName) || []
+ _data = _data[0] || {$$empty: true}
+ _data.$$uuid = _data[config.setting.primaryKey] || ''
+
+ this.setState({data: _data})
+
+ window.GLOB.SyncData.delete(config.dataName)
+
+ MKEmitter.removeListener('transferSyncData', this.transferSyncData)
+ }
+
+ mkPublicData = (publicId, data) => {
+ const { config, BID, BData } = this.state
+
+ if (config.wrap.datatype === 'public' && config.wrap.publicId === publicId) {
+ let _data = fromJS(data).toJS()
+
+ _data.$$BID = BID || ''
+ _data.$$BData = BData || ''
+
+ this.setState({
+ data: null
+ }, () => {
+ this.setState({data: _data})
})
}
}
- reloadData = (menuId, id) => {
+ searchRefresh = (searchId) => {
+ const { config } = this.state
+
+ if (config.$searchId !== searchId) return
+
+ this.setState({}, () => {
+ this.loadData()
+ })
+ }
+
+ /**
+ * @description 鑾峰彇缁勪欢鎼滅储
+ */
+ queryModuleParam = (menuId, callback) => {
const { config } = this.state
if (config.uuid !== menuId) return
- this.loadData()
+ let searches = []
+ if (config.setting.useMSearch) { // 涓昏〃鎼滅储鏉′欢
+ searches = window.GLOB.SearchBox.get(config.$searchId) || []
+ }
+
+ callback({
+ search: searches
+ })
+ }
+
+ reloadData = (menuId, id) => {
+ const { config, group } = this.state
+
+ if (config.uuid !== menuId) return
+
+ if (id === 'focus-refresh' && config.wrap.refocus) {
+ let _group = fromJS(group).toJS()
+ _group.setting.focus = config.wrap.refocus
+
+ if (config.wrap.datatype === 'static') {
+ this.setState({
+ data: null,
+ group: _group
+ }, () => {
+ this.setState({data: {$$empty: true}})
+ })
+ } else {
+ this.setState({
+ group: _group
+ }, () => {
+ this.loadData(true)
+ })
+ }
+ } else if (id === 'focus-nofresh' && config.wrap.refocus) {
+ let formId = ''
+ group.fields.forEach(item => {
+ if (item.field === config.wrap.refocus) {
+ formId = item.uuid
+ }
+ })
+ MKEmitter.emit('mkFC', 'focus', formId)
+ } else {
+ this.loadData()
+ }
}
/**
* @description 鎸夐挳鎵ц瀹屾垚鍚庨〉闈㈠埛鏂�
- * @param {*} menuId // 鑿滃崟Id
- * @param {*} position // 鍒锋柊浣嶇疆
- * @param {*} btn // 鎵ц鐨勬寜閽�
*/
- refreshByButtonResult = (menuId, position, btn, id) => {
+ refreshByButtonResult = (menuId, position, btn, id, lines, res) => {
const { config, group, BID } = this.state
- if (group.uuid !== menuId) return
+ if (config.uuid !== menuId) return
- if (position === 'mainline' && config.setting.supModule && BID) {
- MKEmitter.emit('reloadData', config.setting.supModule, BID)
+ if (position === 'resetData') {
+ let _data = fromJS(this.state.data || {}).toJS()
+
+ Object.keys(_data).forEach(key => {
+ let _key = key.toLowerCase()
+ if (typeof(res[_key]) !== 'undefined') {
+ _data[key] = res[_key]
+ }
+ })
+
+ this.setState({
+ data: _data
+ })
+ return
+ }
+ if (position === 'grid' && config.wrap.refocus) {
+ let _group = fromJS(group).toJS()
+ _group.setting.focus = config.wrap.refocus
+
+ this.setState({
+ group: _group
+ })
+ }
+
+ if (['mainline', 'maingrid', 'popclose'].includes(position) && config.setting.supModule) {
+ MKEmitter.emit('reloadData', config.setting.supModule, position === 'maingrid' ? '' : BID)
+ } else if (position === 'grid' && config.wrap.datatype === 'static') {
+ this.setState({
+ data: null
+ }, () => {
+ this.setState({data: {$$empty: true}})
+ })
} else {
- this.loadData()
+ this.loadData(position === 'grid')
}
if (id) {
@@ -186,7 +308,9 @@
})
} else {
this.setState({ BID: id, BData: data }, () => {
- this.loadData()
+ if (config.wrap.datatype !== 'public') {
+ this.loadData()
+ }
})
}
}
@@ -195,7 +319,7 @@
execSuccess = (btn, id) => {
if (btn.linkmenu && btn.linkmenu.length > 0) {
let menu_id = btn.linkmenu[btn.linkmenu.length - 1]
- let menu = window.GLOB.mkThdMenus.filter(m => m.MenuID === menu_id)[0] || ''
+ let menu = window.GLOB.mkThdMenus.get(menu_id) || ''
if (!menu) return
@@ -204,19 +328,26 @@
param: {$BID: id || ''}
}
- if (['linkage_navigation', 'linkage', 'menu_board'].includes(window.GLOB.navBar)) {
- MKEmitter.emit('modifyTabs', newtab, 'replace')
- } else {
- MKEmitter.emit('modifyTabs', newtab, 'plus', true)
- }
+ MKEmitter.emit('modifyTabs', newtab, true)
}
}
- async loadData () {
- const { mainSearch } = this.props
- const { config, arr_field, BID } = this.state
+ async loadData (refocus) {
+ const { config, BID, group } = this.state
- if (config.wrap.datatype === 'static') {
+ if (config.wrap.refocus && !refocus && group.setting.focus === config.wrap.refocus) {
+ let _group = fromJS(group).toJS()
+ _group.setting.focus = config.wrap.focus
+
+ this.setState({
+ group: _group
+ })
+ }
+
+ if (config.wrap.datatype === 'public') {
+ MKEmitter.emit('reloadData', config.wrap.publicId)
+ return
+ } else if (config.wrap.datatype === 'static') {
this.setState({
data: {$$empty: true}
})
@@ -227,13 +358,16 @@
}, () => {
this.setState({data: {$$empty: true}})
})
+ MKEmitter.emit('resetSelectLine', config.uuid, '', '')
return
}
- let searches = config.setting.useMSearch && mainSearch ? mainSearch : []
+ let searches = []
+ if (config.setting.useMSearch) { // 涓昏〃鎼滅储鏉′欢
+ searches = window.GLOB.SearchBox.get(config.$searchId) || []
+ }
- let requireFields = searches.filter(item => item.required && item.value === '')
- if (requireFields.length > 0) {
+ if (config.$s_req && searches.filter(item => item.required && item.value === '').length > 0) {
return
}
@@ -242,11 +376,13 @@
})
let _orderBy = config.setting.order || ''
- let param = UtilsDM.getQueryDataParams(config.setting, arr_field, searches, _orderBy, 1, 1, BID)
+ let param = UtilsDM.getQueryDataParams(config.setting, searches, _orderBy, 1, 1, BID)
let result = await Api.genericInterface(param)
if (result.status) {
let _data = result.data && result.data[0] ? result.data[0] : {$$empty: true}
+
+ _data.$$uuid = _data[config.setting.primaryKey] || ''
this.setState({
data: null,
@@ -254,38 +390,61 @@
}, () => {
this.setState({data: _data})
})
+
+ MKEmitter.emit('resetSelectLine', config.uuid, _data.$$uuid, _data)
+
+ UtilsDM.querySuccess(result)
} else {
this.setState({
loading: false,
})
- if (result.ErrCode === 'N') {
- Modal.error({
- title: result.message,
- })
- } else {
- notification.error({
- top: 92,
- message: result.message,
- duration: 10
- })
- }
+ UtilsDM.queryFail(result)
}
}
- mkFormSubmit = (btnId) => {
+ mkFormSubmit = (btnId, callback, formId, errId) => {
const { group } = this.state
if (group.uuid !== btnId) return
- this.formRef.handleConfirm().then(res => {
+ this.formRef.handleConfirm(formId, errId).then(res => {
MKEmitter.emit('triggerFormSubmit', {menuId: btnId, form: res})
+ }, () => {
+ callback && callback()
+ })
+ }
+
+ closeTab = () => {
+ const { group } = this.state
+
+ MKEmitter.emit('closeTabView', group.subButton.$MenuID)
+
+ let tabId = ''
+ if (group.closeButton.refreshTab && group.closeButton.refreshTab.length > 0 && window.GLOB.appType !== 'pc') {
+ tabId = group.closeButton.refreshTab[group.closeButton.refreshTab.length - 1]
+ }
+ if (tabId && group.subButton.$MenuID !== tabId) { // 鍒锋柊褰撳墠鑿滃崟鏃舵棤鏁�
+ MKEmitter.emit('reloadMenuView', tabId)
+ }
+ }
+
+ resetTab = () => {
+ const { data } = this.state
+
+ this.setState({
+ data: null
+ }, () => {
+ this.setState({data: data})
})
}
render() {
- const { config, loading, BID, BData, data, group, dict } = this.state
+ const { config, loading, BID, BData, data, group } = this.state
+ if (config.wrap.empty === 'hidden' && (!data || data.$$empty)) return null
+ if (config.idCtrl && (!data || data.$$empty)) return null
+
return (
<div className="custom-simple-form-box" id={'anchor' + config.uuid} style={{...config.style}}>
{loading ?
@@ -298,10 +457,10 @@
{data ? <MutilForm
BID={BID}
BData={BData}
- dict={dict}
data={data}
action={group}
- inputSubmit={() => this.mkFormSubmit(group.uuid)}
+ unload={config.setting.supModule && !BID}
+ inputSubmit={(id, errId) => this.mkFormSubmit(group.uuid, null, id, errId)}
wrappedComponentRef={(inst) => this.formRef = inst}
/> : null}
{data ? <div className={'mk-form-action ' + (group.$button || '')}>
@@ -312,6 +471,8 @@
columns={config.columns}
selectedData={data.$$empty ? [] : [data]}
/>
+ {group.resetButton && group.resetButton.enable === 'true' ? <Button type="link" onClick={this.resetTab} style={group.resetButton.style}>{group.resetButton.label}</Button> : null}
+ {group.closeButton && group.closeButton.enable === 'true' ? <Button type="link" onClick={this.closeTab} style={group.closeButton.style}>{group.closeButton.label}</Button> : null}
</div> : null}
</div>
)
--
Gitblit v1.8.0