From a1e9b18a4dbfd21e1bf4d5cb60974ac2f0115efd Mon Sep 17 00:00:00 2001 From: king <18310653075@163.com> Date: 星期五, 30 五月 2025 15:18:44 +0800 Subject: [PATCH] 2025-05-30 --- src/tabviews/zshare/mutilform/index.jsx | 2618 +++++++++++++++++++++++++++++++++-------------------------- 1 files changed, 1,464 insertions(+), 1,154 deletions(-) diff --git a/src/tabviews/zshare/mutilform/index.jsx b/src/tabviews/zshare/mutilform/index.jsx index 7010528..b681516 100644 --- a/src/tabviews/zshare/mutilform/index.jsx +++ b/src/tabviews/zshare/mutilform/index.jsx @@ -1,335 +1,1076 @@ import React, {Component} from 'react' import PropTypes from 'prop-types' import { fromJS } from 'immutable' -import { Form, Row, Col, Input, InputNumber, Select, DatePicker, notification, Checkbox, Radio, Tooltip, Icon } from 'antd' +import { Form, Row, Col, notification, Tooltip, Rate } from 'antd' +import { QuestionCircleOutlined, StarFilled } from '@ant-design/icons' import moment from 'moment' +import md5 from 'md5' import Api from '@/api' -import options from '@/store/options.js' -import { formRule } from '@/utils/option.js' import Utils from '@/utils/utils.js' import asyncComponent from '@/utils/asyncComponent' -import asyncSpinComponent from '@/utils/asyncSpinComponent' +import MKEmitter from '@/utils/events.js' +import MKInput from './mkInput' +import MKNumberInput from './mkNumberInput' +import MKSelect from './mkSelect' +import MkIcon from '@/components/mk-icon' import './index.scss' -const { MonthPicker } = DatePicker +const MKCheckCard = asyncComponent(() => import('./mkCheckCard')) +const MKSwitch = asyncComponent(() => import('./mkSwitch')) +const MKCheck = asyncComponent(() => import('./mkCheck')) +const MKCheckbox = asyncComponent(() => import('./mkCheckbox')) +const MKRadio = asyncComponent(() => import('./mkRadio')) +const MKDatePicker = asyncComponent(() => import('./mkDatePicker')) +const MKTextArea = asyncComponent(() => import('./mkTextArea')) +const MKFileUpload = asyncComponent(() => import('../fileupload')) +const MKColor = asyncComponent(() => import('./mkColor')) +const MkFormula = asyncComponent(() => import('./mkFormula')) +const MkCascader = asyncComponent(() => import('./mkCascader')) +const MkVercode = asyncComponent(() => import('./mkVercode')) +const MKPopSelect = asyncComponent(() => import('./mkPopSelect')) +const MKEditor = asyncComponent(() => import('@/components/editor')) -const CheckCard = asyncComponent(() => import('./checkCard')) -const CustomSwitch = asyncComponent(() => import('./customSwitch')) -const CustomTextArea = asyncComponent(() => import('./customTextArea')) -const FileUpload = asyncComponent(() => import('../fileupload')) -const ColorSketch = asyncComponent(() => import('@/mob/colorsketch')) -const Editor = asyncSpinComponent(() => import('@/components/editor')) - -class MainSearch extends Component { +class MutilFormComponent extends Component { static propTpyes = { - menuType: PropTypes.object, // 鑿滃崟绫诲瀷锛屾槸鍚︿负HS action: PropTypes.object, // 鎸夐挳淇℃伅銆佽〃鍗曞垪琛� - dict: PropTypes.object, // 瀛楀吀椤� data: PropTypes.any, // 琛ㄦ牸鏁版嵁 BID: PropTypes.any, // 涓昏〃ID BData: PropTypes.any, // 涓昏〃鏁版嵁 + unload: PropTypes.any, // 涓嬫媺鑿滃崟涓嶅姞杞芥暟鎹� inputSubmit: PropTypes.func // input鍥炶溅鎻愪氦 } state = { - cols: 2, // 鏄剧ず涓哄灏戝垪 - datatype: null, // 鏁版嵁绫诲瀷 - readtype: null, // 鏄惁鍙 - readin: null, // 琛屾暟鎹槸鍚﹀啓鍏� - writein: null, // 鎵ц鏃舵槸鍚﹀~鍏ラ粯璁ql - fieldlen: null, // 瀛楁闀垮害 formlist: [], // 琛ㄥ崟椤� - intercepts: [], // 鎴彇瀛楁 - record: {} // 璁板綍涓嬫媺琛ㄥ崟鍏宠仈瀛楁锛岀敤浜庢暟鎹啓鍏� + ID: '', + send_type: '', + timestamp: '', + n_id: '', + focusId: '', + reFocusId: '', + dict: window.GLOB.dict } - UNSAFE_componentWillMount () { - let cols = 2 - if (this.props.action.setting && this.props.action.setting.cols) { - cols = parseInt(this.props.action.setting.cols) - if (cols > 4 || cols < 1) { - cols = 2 - } - } - - this.setState({ - cols: cols - }) - } + record = {} + submitId = '' componentDidMount () { - const { data, BData } = this.props - let action = fromJS(this.props.action).toJS() - - let datatype = {} - let readtype = {} - let readin = {} - let writein = {} - let fieldlen = {} - let formlist = [] - let intercepts = [] - let _inputfields = [] + const { action, unload } = this.props + const { dict } = this.state - if (action.groups.length > 0) { - action.groups.forEach(group => { - if (group.sublist.length === 0) return - - if (!group.default) { - formlist.push({ - type: 'title', - label: group.label, - uuid: group.uuid - }) - } - - formlist.push(...group.sublist) - }) - } else { - formlist = action.fields - } - + let data = {} + let BData = {} let linkFields = {} // 鍏宠仈鑿滃崟 - let supItemVal = {} // 涓婄骇鑿滃崟鍒濆鍊� + let controlFields = {} // 鎺у埗琛ㄥ崟 let deForms = [] // 闇�瑕佸姩鎬佽幏鍙栦笅鎷夎彍鍗曠殑琛ㄥ崟 - formlist.forEach(item => { - if (item.type === 'text' || item.type === 'number') { // 鐢ㄤ簬杩囨护涓嬫媺鑿滃崟鍏宠仈琛ㄥ崟 - _inputfields.push(item.field) - } else if (item.type === 'textarea') { - _inputfields.push(item.field) - } else if (item.type === 'link') { - linkFields[item.linkField] = linkFields[item.linkField] || [] - linkFields[item.linkField].push(item.field) - } - if (item.interception === 'true') { // 瀛楃鎴彇瀛楁 - intercepts.push(item.field) - } - }) + let record = {} + let formlist = fromJS(action.fields).toJS() + let fieldMap = new Map() + let check = action.setting.formType === 'check' - formlist = formlist.map(item => { - if (item.type === 'title') return item + if (this.props.data && !this.props.data.$$empty) { + Object.keys(this.props.data).forEach(key => { + data[key.toLowerCase()] = this.props.data[key] + }) + } else if (action.uuid && sessionStorage.getItem('local_' + action.uuid)) { + let _data = JSON.parse(sessionStorage.getItem('local_' + action.uuid)) + + Object.keys(_data).forEach(key => { + data[key.toLowerCase()] = _data[key] + }) + } + + if (this.props.BData) { + Object.keys(this.props.BData).forEach(key => { + BData[key.toLowerCase()] = this.props.BData[key] + }) + } + + formlist = formlist.filter(item => { + if (item.type === 'hint') { + if (item.field && data[item.field.toLowerCase()]) { + item.message = data[item.field.toLowerCase()] + } + delete item.field + } + + if (item.supField) { // 澶氬眰琛ㄥ崟鎺у埗 + if (['hint', 'split', 'formula'].includes(item.type)) { + item.field = item.uuid + fieldMap.set(item.field, item) + } + let supvals = [] + if (item.supvalue) { + item.supvalue.split(',').forEach(val => { + supvals.push(val) + if (/^([-]?(0|[1-9][0-9]*)(\.[0-9]+)?)$/.test(val)) { + supvals.push(+val) + } + }) + } else { + supvals.push('') + } + supvals = Array.from(new Set(supvals)) + controlFields[item.supField] = controlFields[item.supField] || [] + controlFields[item.supField].push({field: item.field, values: supvals}) + } + // if (item.type === 'link') { + if (item.linkField) { + linkFields[item.linkField] = linkFields[item.linkField] || [] + linkFields[item.linkField].push({field: item.field, uuid: item.uuid}) + } + + if (item.style) { + delete item.style.marginTop + delete item.style.marginBottom + delete item.style.marginLeft + delete item.style.marginRight + } + + if (item.type === 'split' && item.splitctrl) { + if (data.hasOwnProperty(item.splitctrl.toLowerCase()) && data[item.splitctrl.toLowerCase()] === '') { + return false + } + } + + if (['hint', 'split', 'formula'].includes(item.type)) return true + if (item.type === 'date') { + item.precision = item.precision || 'day' + } else if (item.type === 'datetime') { + item.type = 'date' + item.precision = 'second' + } else if (item.type === 'fileupload') { + item.fieldlength = item.fieldlength || 512 + } + + if (!item.field || !['text', 'number', 'switch', 'check', 'rate', 'select', 'popSelect', 'link', 'cascader', 'linkMain', 'funcvar', 'date', 'datemonth', 'radio', 'checkbox', 'checkcard', 'fileupload', 'textarea', 'multiselect', 'brafteditor', 'color', 'vercode'].includes(item.type)) return false + + if (/^\s+$/.test(item.label)) { + item.style = item.style || {} + item.style.opacity = 0 + item.style.width = 1 + item.style.display = 'inline-block' + } // 鏁版嵁鑷姩濉厖 - let _readin = item.readin !== 'false' - if (item.type === 'linkMain' || item.type === 'funcvar') { - _readin = false - } + let readin = item.readin !== 'false' + item.local = item.readin === 'local' + item.readin = item.readin !== 'false' && item.readin !== 'top' + item.readonly = check || item.readonly === 'true' + item.writein = item.writein !== 'false' + item.defHidden = item.hidden === 'true' + item.hidden = item.hidden === 'true' + item.fieldlength = item.fieldlength || 50 - let _fieldlen = item.fieldlength || 50 - if (item.type === 'textarea' || item.type === 'fileupload' || item.type === 'multiselect' || item.type === 'brafteditor') { - _fieldlen = item.fieldlength || 512 + let key = item.field.toLowerCase() + + if (item.type === 'funcvar') { + readin = false + item.readin = false + item.hidden = true + } else if (item.type === 'linkMain') { + readin = false + item.readin = false + item.$verify = item.verifyVal === 'true' } else if (item.type === 'number') { - _fieldlen = item.decimal ? item.decimal : 0 + item.decimal = item.decimal || 0 + item.fieldlength = item.decimal item.initval = item.initval || 0 } - datatype[item.field] = item.type - readtype[item.field] = item.readonly === 'true' - readin[item.field] = _readin - writein[item.field] = item.writein !== 'false' - fieldlen[item.field] = _fieldlen + if (['select', 'link', 'radio', 'checkbox', 'checkcard', 'multiselect', 'cascader'].includes(item.type)) { + item.options = item.options || [] + item.$select = true + if (item.type === 'checkcard') { + item.options = item.options.filter(cell => { + cell.$value = cell.$value + '' + return !cell.Hide + }) + } else { + item.options = item.options.filter(cell => { + cell.value = cell.Value + '' + cell.label = cell.Text + + return !cell.Hide + }) + } + + if (item.setAll === 'true' && ['select', 'link', 'radio'].includes(item.type)) { // 娣诲姞绌哄�� + item.options.unshift({ + key: Utils.getuuid(), + value: '', + label: item.emptyText || '绌�', + ParentID: '' + }) + } + item.oriOptions = fromJS(item.options).toJS() - if (item.setAll === 'true' && (item.type === 'select' || item.type === 'link' || item.type === 'radio')) { // 娣诲姞绌哄�� - item.options.unshift({ - key: Utils.getuuid(), - Value: '', - Text: item.emptyText || '绌�', - ParentID: '' - }) + if (item.empty === 'hidden' && item.oriOptions.length === 0) { + item.hidden = true + } + if (item.type === 'checkcard' && item.readonly && item.unchecked === 'hidden') { + let selectKeys = item.initval + if (item.multiple === 'true') { + selectKeys = selectKeys ? selectKeys.split(',') : [] + item.options = item.options.filter(item => selectKeys.includes(item.$value)) + } else { + item.options = item.options.filter(item => selectKeys === item.$value) + } + item.oriOptions = fromJS(item.options).toJS() + if (item.options.length === 0) { + item.hidden = true + } + } } - item.oriOptions = item.options ? fromJS(item.options).toJS() : null // 淇濆瓨鍒濆鍒楄〃锛岀敤浜庤仈鍔ㄨ彍鍗曟帶鍒� + let newval = '$empty' + + if (readin && data.hasOwnProperty(key)) { + newval = data[key] + } + if (item.type === 'linkMain' && BData.hasOwnProperty(key)) { + newval = BData[key] + } else if (item.type === 'date') { // 鏃堕棿琛ㄥ崟锛屾彁浜ゅ�间负澶╂垨绉� + let _format = 'YYYY-MM-DD HH:mm:ss' + if (item.precision === 'day') { + _format = 'YYYY-MM-DD' + } + + if (newval !== '$empty') { + newval = moment(newval, 'YYYY-MM-DD HH:mm:ss').format(_format) + newval = newval === 'Invalid date' ? '$empty' : newval + } + if (newval === '$empty' && item.initval) { + newval = moment().subtract(item.initval, 'days').format(_format) + } + + if (item.minDate) { + if (item.minDate === 'custom') { + if (/^\d{4}-\d{2}-\d{2}$/.test(item.minDateField)) { + item.minDate = moment(item.minDateField).format('YYYY-MM-DD') + } else { + let val = data[item.minDateField.toLowerCase()] + item.minDate = val ? moment(val).format('YYYY-MM-DD') : '' + } + + item.minDate = item.minDate === 'Invalid date' ? '' : item.minDate + } else { + item.minDate = moment().add(item.minDate, 'days').format('YYYY-MM-DD') + } + } + if (item.maxDate) { + if (item.maxDate === 'custom') { + if (/^\d{4}-\d{2}-\d{2}$/.test(item.maxDateField)) { + item.maxDate = moment(item.maxDateField).format('YYYY-MM-DD') + } else { + let val = data[item.maxDateField.toLowerCase()] + item.maxDate = val ? moment(val).format('YYYY-MM-DD') : '' + } + + item.maxDate = item.maxDate === 'Invalid date' ? '' : item.maxDate + } else { + item.maxDate = moment().add(item.maxDate, 'days').format('YYYY-MM-DD') + } + } + } else if (item.type === 'datemonth') { + if (newval !== '$empty') { + newval = moment(newval, 'YYYY-MM').format('YYYY-MM') + newval = newval === 'Invalid date' ? '$empty' : newval + } + if (newval === '$empty' && item.initval) { + newval = moment().subtract(item.initval, 'month').format('YYYY-MM') + } + } else if (item.type === 'switch' || item.type === 'check') { // 寮�鍏冲嬀閫夋鍙帴鏀跺浐瀹氬�� + if (newval !== '$empty' && (newval === item.closeVal || newval === item.openVal)) { + + } else if (item.initval === true) { + newval = item.openVal + } else { + newval = item.closeVal + } + } else if (item.type === 'popSelect') { + if (newval && newval !== '$empty') { + item.showValue = data[item.showField.toLowerCase()] || '' + } else { + item.showValue = '' + } + if (window.backend && action.uuid) { + item.formSqlId = md5(action.uuid.replace(/_pop$/, '') + item.uuid) + } + } else if (item.type === 'brafteditor') { + if (window.backend && newval && /<\/span>/.test(newval) && item.encryption === 'true') { + try { + newval = window.btoa(window.encodeURIComponent(newval)) + } catch (e) { + newval = '' + } + } + } else if (item.$select && item.resourceType === '0') { + newval = newval + '' + } + + if (newval !== '$empty') { + item.initval = newval + } else if (item.initval === undefined) { + item.initval = '' + } + + if (item.type === 'number') { + if (isNaN(item.initval) || item.initval === '') { + item.initval = 0 + } + } else if (item.$select && item.resourceType === '1') { + deForms.push(item) + } else if (item.type === 'rate') { + item.rateCount = item.rateCount || 5 + item.allowHalf = item.allowHalf === 'true' + + if (item.allowHalf) { + item.initval = parseFloat(item.initval) + if (item.initval % 0.5 !== 0) { + item.initval = parseInt(item.initval) + } + } else { + item.initval = parseInt(item.initval) + } + + if (isNaN(item.initval) || item.initval < 0) { + item.initval = 0 + } else if (item.initval > item.rateCount) { + item.initval = item.rateCount + } + } + + item.rules = [] + if (item.type === 'text') { + item.initval = item.initval + '' + if (/@currentYear@/ig.test(item.initval)) { // 绯荤粺鍙橀噺鏇挎崲 + item.initval = item.initval.replace(/@currentYear@/ig, moment().format('YYYY')) + } + + if (item.required === 'true') { + item.rules.push({ + required: true, + message: item.label + (dict['not_empty'] || '涓嶅彲涓虹┖锛�') + }) + } + + item.rules.push({ + validator: (rule, value, callback) => { + if (/'/.test(value)) { + callback(dict['single_quot'] || '涓嶅彲浣跨敤鑻辨枃鐘舵�佺殑鍗曞紩鍙凤紒') + // } else if (/--/.test(value)) { + // callback('涓嶅彲浣跨敤 -- 锛�') + } else { + callback() + } + } + }) + + if (!item.lenControl || item.lenControl === 'limit') { + item.rules.push({ + max: item.fieldlength, + message: (dict['max_char'] || '鏈�澶欯max涓瓧绗�').replace('@max', item.fieldlength) + }) + } + + if (item.regular) { + if (item.regular === 'number') { + let reg = /^[0-9.-]*$/ + if (item.regularExtra) { + reg = new RegExp('^[0-9.-' + item.regularExtra.replace(/\.|-/g, '') + ']*$') + } + item.rules.push({ + pattern: reg, + message: item.regularText || dict['enter_num'] || '璇疯緭鍏ユ暟瀛楋紒' + }) + } else if (item.regular === 'letter') { + let reg = /^[a-zA-Z]*$/ + if (item.regularExtra) { + reg = new RegExp('^[a-zA-Z' + item.regularExtra + ']*$') + } + item.rules.push({ + pattern: reg, + message: item.regularText || dict['enter_letter'] || '璇疯緭鍏ュ瓧姣嶏紒' + }) + } else if (item.regular === 'letter_number') { + let reg = /^[a-zA-Z0-9]*$/ + if (item.regularExtra) { + reg = new RegExp('^[a-zA-Z0-9' + item.regularExtra + ']*$') + } + item.rules.push({ + pattern: reg, + message: item.regularText || dict['enter_num_letter'] || '璇疯緭鍏ユ暟瀛楁垨瀛楁瘝' + }) + } else if (item.regular === 'letter&number') { + let reg = /^[a-zA-Z0-9@_.]*$/ + if (item.regularExtra) { + reg = new RegExp('^[a-zA-Z0-9@_.' + item.regularExtra.replace(/\.|_|@/g, '') + ']*$') + } + item.rules.push({ + pattern: reg, + message: item.regularText || dict['enter_num_letter_char'] || '璇疯緭鍏ユ暟瀛椼�佸瓧姣嶄互鍙夽_.' + }) + } else if (item.regular === 'phone') { + item.rules.push({ + pattern: /^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\s?\d{4}\s?\d{4}$/, + message: item.regularText || dict['phone_error'] || '璇锋纭緭鍏ユ墜鏈哄彿' + }) + } else if (item.regular === 'email') { + item.rules.push({ + pattern: /^([a-zA-Z0-9._-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/, + message: item.regularText || dict['email_error'] || '璇锋纭緭鍏ラ偖绠卞湴鍧�' + }) + } + } + } else if (item.type === 'number') { + item.rules = [{ + required: true, + message: item.label + (dict['not_empty'] || '涓嶅彲涓虹┖锛�') + }] + + if (typeof(item.min) === 'number' || typeof(item.max) === 'number' || item.notZero === 'true') { + item.rules.push({ + validator: (rule, value, callback) => { + if (isNaN(value)) { + callback() + } else if (item.notZero === 'true' && value === 0) { + callback(item.label + (dict['not_zero'] || '涓嶅彲涓�0')) + } else if (typeof(item.min) === 'number' && value < item.min) { + if (item.min > 0 && item.min < 1e-6) { + if (item.min === 1e-6) { + callback(item.label + '鏈�灏忓�间负 0.000001') + } else if (item.min === 1e-7) { + callback(item.label + '鏈�灏忓�间负 0.0000001') + } else if (item.min === 1e-8) { + callback(item.label + '鏈�灏忓�间负 0.00000001') + } else if (item.min === 1e-9) { + callback(item.label + '鏈�灏忓�间负 0.000000001') + } else if (item.min === 1e-10) { + callback(item.label + '鏈�灏忓�间负 0.0000000001') + } else if (item.min === 1e-11) { + callback(item.label + '鏈�灏忓�间负 0.00000000001') + } else { + callback(item.label + (dict['less_limit'] || '鏈�灏忓�间负 ') + item.min) + } + } else { + callback(item.label + (dict['less_limit'] || '鏈�灏忓�间负 ') + item.min) + } + } else if (typeof(item.max) === 'number' && value > item.max) { + callback(item.label + (dict['max_limit'] || '鏈�澶у�间负 ') + item.max) + } else { + callback() + } + } + }) + } + } else if (item.type === 'textarea') { + if (item.required === 'true') { + item.rules.push({ + required: true, + message: item.label + (dict['not_empty'] || '涓嶅彲涓虹┖锛�') + }) + } + + item.rules.push({ + validator: (rule, value, callback) => { + if (/'/.test(value)) { + callback(dict['single_quot'] || '涓嶅彲浣跨敤鑻辨枃鐘舵�佺殑鍗曞紩鍙凤紒') + // } else if (/--/.test(value)) { + // callback('涓嶅彲浣跨敤 -- 锛�') + } else { + callback() + } + } + }, { + max: item.fieldlength, + message: (dict['max_char'] || '鏈�澶欯max涓瓧绗�').replace('@max', item.fieldlength) + }) + } else if (item.type === 'brafteditor') { + if (item.required === 'true') { + item.rules.push({ + required: true, + message: item.label + (dict['not_empty'] || '涓嶅彲涓虹┖锛�') + }) + } + + item.rules.push({ + max: item.fieldlength, + message: (dict['max_char'] || '鏈�澶欯max涓瓧绗�').replace('@max', item.fieldlength) + }) + } else if (item.type === 'linkMain' || item.type === 'vercode') { + if (item.required === 'true') { + item.rules.push({ + required: true, + message: item.label + (dict['not_empty'] || '涓嶅彲涓虹┖锛�') + }) + } + } else { + if (item.required === 'true') { + item.rules.push({ + required: true, + message: (dict['select_tip'] || '璇烽�夋嫨') + item.label + '!' + }) + } + if (['cascader', 'checkbox', 'checkcard', 'fileupload', 'multiselect'].includes(item.type) && item.fieldlength) { + item.rules.push({ + max: item.fieldlength, + message: (dict['max_char'] || '鏈�澶欯max涓瓧绗�').replace('@max', item.fieldlength) + }) + } + } + + if (item.rules.length === 0) { + item.rules = null + } + + fieldMap.set(item.field, item) + + return true + }) + + Object.keys(controlFields).forEach(key => { + if (!fieldMap.has(key)) return + + let supItem = fieldMap.get(key) + let fields = [] + + controlFields[key].forEach(item => { + if (!fieldMap.has(item.field)) return + + let cell = fieldMap.get(item.field) + + let _hidden = false + + if (supItem.hidden && !supItem.defHidden) { + _hidden = true + } else { + let box = [...item.values] + if (supItem.type === 'multiselect' || (supItem.type === 'checkcard' && supItem.multiple === 'true')) { + box.push(...supItem.initval.split(',')) + } else { + box.push(supItem.initval) + } + + if (box.length === Array.from(new Set(box)).length) { + _hidden = true + } + } + + if (_hidden) { + cell.hidden = true + if (cell.empty === 'hidden') { + cell.$hidden = true + } + fieldMap.set(item.field, cell) + } + + fields.push(item) + }) + + supItem.controlFields = fields + + fieldMap.set(key, supItem) + }) + + let reFieldsVal = null + + formlist = formlist.map(cell => { + if (cell.labelwidth) { + cell.labelCol = {style: {width: cell.labelwidth + '%'}} + cell.wrapperCol = {style: {width: (100 - cell.labelwidth) + '%'}} + } + if (!cell.field || !fieldMap.has(cell.field) || ['hint', 'split', 'formula'].includes(cell.type)) return cell + let item = fieldMap.get(cell.field) // 涓嬬骇琛ㄥ崟鎺у埗-瀛楁鍐欏叆 - if ((item.type === 'select' || item.type === 'radio') && item.linkSubField && item.linkSubField.length > 0) { - item.linkSubField = item.linkSubField.filter(_item => _inputfields.includes(_item)) - } - if (item.linkSubField && item.linkSubField.length === 0) { + if (item.linkSubField && item.linkSubField.length > 0) { + if ((['select', 'radio', 'link'].includes(item.type) || (item.type === 'checkcard' && item.multiple !== 'true') || (item.type === 'cascader' && item.resourceType !== '2'))) { + item.subFields = [] + item.linkSubField.forEach(m => { + let n = fieldMap.get(m) + if (n && ['text', 'number', 'textarea', 'select'].includes(n.type)) { + item.subFields.push({ + uuid: n.uuid, + field: m + }) + } + }) + + if (item.oriOptions.length > 0) { + item.oriOptions = item.oriOptions.map(cell => { + item.subFields.forEach(m => { + cell[m.field] = cell[m.field] === undefined ? '' : cell[m.field] + }) + return cell + }) + + item.options = fromJS(item.oriOptions).toJS() + } + } else if (item.type === 'switch') { + item.options = [] + item.subFields = [] + item.linkSubField.forEach(m => { + let n = fieldMap.get(m) + if (n && ['text', 'number', 'textarea', 'select'].includes(n.type)) { + item.subFields.push({ + uuid: n.uuid, + field: m + }) + } + }) + + reFieldsVal = reFieldsVal || {} + + let val = item.initval === item.openVal ? item.openText : item.closeText + + item.subFields.forEach(n => { + reFieldsVal[n.field] = val || '' + }) + } else if (item.type === 'fileupload') { + item.options = [] + item.subFields = [] + item.linkSubField.forEach(m => { + let n = fieldMap.get(m) + if (n && ['text', 'number', 'textarea', 'select'].includes(n.type)) { + item.subFields.push({ + uuid: n.uuid, + field: m + }) + } + }) + } else if (item.type === 'popSelect') { + item.options = [] + item.subFields = [] + item.linkSubField.forEach(m => { + let n = fieldMap.get(m) + if (n && ['text', 'number', 'textarea', 'select'].includes(n.type)) { + item.subFields.push({ + uuid: n.uuid, + field: m + }) + } + }) + } + item.linkSubField = null } - let newval = '' + // if (item.type === 'link') { + if (item.linkField) { + item.supInitVal = '' - if (item.type === 'linkMain') { - newval = BData && BData[item.field] ? BData[item.field] : '' - } else if (_readin && !/^date/.test(item.type) && this.props.data && this.props.data.hasOwnProperty(item.field)) { - newval = this.props.data[item.field] - } else if (item.type === 'date') { // 鏃堕棿鎼滅储 - if (_readin && this.props.data && this.props.data.hasOwnProperty(item.field)) { - newval = this.props.data[item.field] - } - if (newval) { - newval = moment(newval, 'YYYY-MM-DD') - newval = newval.format('YYYY-MM-DD') === 'Invalid date' ? '' : newval - } - if (!newval && item.initval) { - newval = moment().subtract(item.initval, 'days') - } else if (!newval) { - newval = null - } - } else if (item.type === 'datemonth') { - if (_readin && this.props.data && this.props.data.hasOwnProperty(item.field)) { - newval = this.props.data[item.field] - } - if (newval) { - newval = moment(newval, 'YYYY-MM') - newval = newval.format('YYYY-MM') === 'Invalid date' ? '' : newval - } - if (!newval && item.initval) { - newval = moment().subtract(item.initval, 'month') - } else if (!newval) { - newval = null - } - } else if (item.type === 'datetime') { - if (_readin && this.props.data && this.props.data.hasOwnProperty(item.field)) { - newval = this.props.data[item.field] - } - if (newval) { - newval = moment(newval, 'YYYY-MM-DD HH:mm:ss') - newval = newval.format('YYYY-MM-DD HH:mm:ss') === 'Invalid date' ? '' : newval - } - if (!newval && item.initval) { - newval = moment(moment().subtract(item.initval, 'days').format('YYYY-MM-DD') + ' 00:00:00', 'YYYY-MM-DD HH:mm:ss') - } else if (!newval) { - newval = null - } - } - - if (item.type === 'switch' && newval !== '') { // 寮�鍏冲彧鎺ユ敹鍥哄畾鍊� - if (newval !== item.closeVal && newval !== item.openVal) { - newval = '' - } else if (newval === item.openVal) { - newval = true - } else { - newval = false - } - } - - // 璇诲彇琛ㄦ牸鏁版嵁鎴栬鏈夋椂闂寸殑鍒濆鍊� - item.initval = newval !== '' ? newval : item.initval - - // 涓嬫媺琛ㄥ崟锛屽瓨鍦ㄤ笂绾ц彍鍗曟椂锛岀敓鎴愭樉绀哄�煎垪琛紝浼樺厛浠ユ暟瀛楀垽鏂� - if (item.supvalue) { - let supvals = [] - item.supvalue.split(',').forEach(val => { - supvals.push(val) - if (/^([-]?(0|[1-9][0-9]*)(\.[0-9]+)?)$/.test(val)) { - supvals.push(+val) + if (fieldMap.has(item.linkField)) { + let supitem = fieldMap.get(item.linkField) + item.supInitVal = supitem.initval || '' + if (supitem.$first) { + item.$resetSup = true } - }) - item.supvalue = supvals + } else if (data.hasOwnProperty(item.linkField.toLowerCase())) { + item.supInitVal = data[item.linkField.toLowerCase()] + } + + item.options = item.oriOptions.filter(option => option.ParentID === item.supInitVal || option.value === '') } + + if (['select', 'link', 'radio'].includes(item.type)) { // 閫変腑绗竴椤� + if (/^\s*\$first\s*$/.test(item.initval)) { + item.$first = true + item.initval = '' + } + if (item.resourceType === '0') { // 閫変腑绗竴椤� + if (item.$first) { + item.initval = item.options[0] ? item.options[0].value : '' + } + } + } + + record[item.field] = item.initval + item.orgval = item.initval if (linkFields[item.field]) { item.linkFields = linkFields[item.field] } - supItemVal[item.field] = item.initval + + if (item.enter === 'tab' || item.enter === 'sub') { + item.tabUuid = '' + if (item.enter === 'sub' && item.errTabField) { + if (item.errTabField === 'origin') { + item.errTabUuid = item.uuid + } else if (fieldMap.has(item.errTabField)) { + item.errTabUuid = fieldMap.get(item.errTabField).uuid + } + } + if (item.tabField && fieldMap.has(item.tabField)) { + item.tabUuid = fieldMap.get(item.tabField).uuid + } else if (item.enter === 'tab') { + item.enter = 'false' + } else if (item.enter === 'sub' && ['text', 'number'].includes(item.type)) { + item.tabUuid = item.uuid + } + } - if (['select', 'link', 'multiselect', 'radio', 'checkbox', 'checkcard'].includes(item.type) && item.resourceType === '1') { - deForms.push(item) - } else if (['select', 'link', 'radio'].includes(item.type) && item.resourceType !== '1') { // 閫変腑绗竴椤� - if (typeof(item.initval) === 'string' && item.initval.indexOf('$first') > -1) { - item.initval = item.options[0] ? item.options[0].Value : '' + if (item.subFields && item.options.length > 0) { + let initval = item.initval + if (item.type === 'cascader' && item.separator) { + initval = initval.split(item.separator).pop() + } + // eslint-disable-next-line + let option = item.options.filter(cell => initval == cell.value)[0] + + if (option) { + reFieldsVal = reFieldsVal || {} + item.subFields.forEach(n => { + reFieldsVal[n.field] = option[n.field] + }) + } + } + + return item + }) + + if (reFieldsVal) { + formlist = formlist.map(cell => { + if (reFieldsVal[cell.field] === undefined) return cell + + cell.initval = reFieldsVal[cell.field] + record[cell.field] = reFieldsVal[cell.field] + + return cell + }) + } + + this.record = record + let ID = this.props.data ? this.props.data.$$uuid || '' : '' + let focusItem = null + + if (action.setting.focus && fieldMap.has(action.setting.focus)) { + focusItem = fieldMap.get(action.setting.focus) + } + + let reFocusItem = null + if (action.setting.refocus && fieldMap.has(action.setting.refocus)) { + reFocusItem = fieldMap.get(action.setting.refocus) + } + + this.setState({ + formlist, + ID, + focusId: focusItem ? focusItem.uuid : '', + reFocusId: reFocusItem ? reFocusItem.uuid : '' + }, () => { + if (unload) return + + if (focusItem) { + if (focusItem.type === 'text' || focusItem.type === 'number') { + setTimeout(() => { + MKEmitter.emit('mkFC', 'focus', focusItem.uuid) + }, 20) + } else { + setTimeout(() => { + MKEmitter.emit('mkFC', 'focus', focusItem.uuid) + }, 500) + } + } + + if (deForms.length > 0) { + if (action.$cache && action.setting.cache !== 'false') { + Api.getLCacheConfig(action.uuid, action.$time, this.props.BID, ID).then(res => { + if (!res.valid) { + this.getFormData(deForms) + } else { + this.resetFormList(res.data, true) + } + }) + } else { + this.getFormData(deForms) + } + } + }) + + if (action.subButton && action.subButton.resetForms) { + MKEmitter.addListener('resetForms', this.resetForms) + } + MKEmitter.addListener('resetFocus', this.resetFocus) + } + + componentWillUnmount () { + this.setState = () => { + return + } + MKEmitter.removeListener('resetForms', this.resetForms) + MKEmitter.removeListener('resetFocus', this.resetFocus) + } + + resetFocus = (id, field) => { + const { action } = this.props + + if (id !== action.uuid.replace(/_pop$/, '')) return + + let focusId = '' + + this.state.formlist.forEach(item => { + if (item.field === field) { + focusId = item.uuid + } + }) + + if (!focusId) return + + setTimeout(() => { + MKEmitter.emit('mkFC', 'focus', focusId) + }, 20) + } + + resetForms = (id, data) => { + const { action } = this.props + const { focusId, reFocusId } = this.state + + if (id !== action.uuid) return + + let formlist = fromJS(this.state.formlist).toJS() + let resetForms = action.subButton.resetForms || [] + + formlist = formlist.map(item => { + if (item.type !== 'text' && item.type !== 'number') return item + + if (resetForms.includes(item.field)) { + let key = item.field.toLowerCase() + if (typeof(data[key]) !== 'undefined') { + item.initval = data[key] + this.record[item.field] = data[key] + } else { + item.initval = item.orgval + this.record[item.field] = item.orgval } } return item }) - formlist = formlist.map(item => { - if (item.type === 'link') { - item.supInitVal = '' + let _list = fromJS(formlist).toJS().map(item => { + if (item.type !== 'text' && item.type !== 'number') return item - if (supItemVal[item.linkField]) { - item.supInitVal = supItemVal[item.linkField] - } else if (data && data.hasOwnProperty(item.linkField)) { - item.supInitVal = data[item.linkField] - } - - item.options = item.oriOptions.filter(option => option.ParentID === item.supInitVal || option.Value === '') + if (resetForms.includes(item.field) && !item.hidden) { + item.hidden = true } + return item }) this.setState({ - readin, - writein, - readtype, - datatype, - fieldlen, - intercepts, - formlist + formlist: _list }, () => { - if (action.setting && action.setting.focus) { - this.selectInput(action.setting.focus, 'init') - } - // 鐢ㄦ潵鏇存柊state锛岄槻姝㈠彈鎺ц〃鍗曞垵濮嬫椂涓嶆樉绀� this.setState({ - loaded: true + formlist }) - this.improveActionForm(deForms) }) + + if (reFocusId || focusId || this.submitId) { + setTimeout(() => { + MKEmitter.emit('mkFC', 'focus', this.submitId || reFocusId || focusId) + }, 20) + } } - selectInput = (selectId, type) => { - try { - let _form = document.getElementById('main-form-box') - let _inputs = _form.getElementsByTagName('input') - _inputs = [..._inputs] - _inputs.forEach(input => { - if (!input || input.id !== selectId) return - - if (input.className === 'ant-select-search__field' && type !== 'init') { - let div = input.parentNode - while (div && div.parentNode) { - div = div.parentNode - if (div.id === selectId) { - div && div.click && div.click() - div = null - } - } - } else if (input.select) { - input.select() - } else if (input.focus) { - input.focus() - } - }) - } catch { - console.warn('focus error锛�') + getFormData = (deForms) => { + if (window.backend && window.GLOB.CacheData.has('sql_' + md5(this.props.action.uuid.replace(/_pop$/, '') + deForms[0].uuid))) { + this.improveBackActionForm(deForms) + } else if (deForms.length === 1) { + this.improveSimpleActionForm(deForms) + } else if (!window.GLOB.mkHS && window.GLOB.sysType === 'local' && window.GLOB.systemType !== 'production') { + this.improveSimpleActionForm(deForms) + } else { + this.improveActionForm(deForms) } } /** * @description 鑾峰彇涓嬫媺琛ㄥ崟閫夐」淇℃伅 */ - improveActionForm = (deForms) => { - const { BID, menuType } = this.props - const { formlist } = this.state + improveBackActionForm = (deForms) => { + const { BID, action } = this.props - if (deForms.length === 0) { - return - } else if (menuType !== 'HS' && options.sysType === 'local' && !window.GLOB.systemType) { - this.improveSimpleActionForm(deForms) - return + let sysvals = { + mk_departmentcode: sessionStorage.getItem('departmentcode') || '', + mk_organization: sessionStorage.getItem('organization') || '', + mk_user_type: sessionStorage.getItem('mk_user_type') || '', + id: this.state.ID || '', + bid: BID || '', + datam: sessionStorage.getItem('dataM') === 'true' ? 'Y' : '', + datam_begin: sessionStorage.getItem('dataM') === 'true' ? 'Y' : '', + datam_end: sessionStorage.getItem('dataM') === 'true' ? 'Y' : '' + } + if (window.GLOB.externalDatabase !== null) { + sysvals.db = window.GLOB.externalDatabase } let deffers = [] let mainItems = [] // 浜戠鎴栧崟鐐规暟鎹� let localItems = [] // 鏈湴鏁版嵁 + let cache = action.setting.cache !== 'false' && !action.$cache + let skip = false + + deForms.forEach(item => { + let ex = window.GLOB.CacheData.get('sql_' + md5(action.uuid.replace(/_pop$/, '') + item.uuid)) + + if (!ex) { + notification.warning({ + top: 92, + message: '琛ㄥ崟锛�' + item.label + '锛夋棤鍙墽琛岃剼鏈��', + duration: 5 + }) + return + } + + let exps = [] + ex.reps.forEach(n => { + let key = n.toLowerCase() + if (sysvals.hasOwnProperty(key)) { + exps.push({ + key: n, + value: sysvals[key] + }) + } + }) + + let cell = { + id: ex.id, + menuname: item.label + '锛堣〃鍗曪級', + exps: exps, + md5_id: '' + } + + if (item.database === 'sso' && window.GLOB.mainSystemApi) { + mainItems.push(cell) + } else { + localItems.push(cell) + } + }) + + if (localItems.length) { + if (!window.GLOB.mkHS && window.GLOB.sysType === 'local' && window.GLOB.systemType !== 'production') { + localItems.forEach(item => { + deffers.push({ + $backend: true, + $type: 's_Get_SelectedList', + data: [item] + }) + }) + } else { + deffers.push({ + $backend: true, + $type: 's_Get_SelectedList', + data: localItems + }) + } + } + + if (mainItems.length) { + if (!window.GLOB.mkHS && window.GLOB.sysType === 'local' && window.GLOB.systemType !== 'production') { + mainItems.forEach(item => { + deffers.push({ + $backend: true, + $type: 's_Get_SelectedList', + data: [item], + rduri: window.GLOB.mainSystemApi + }) + }) + } else { + deffers.push({ + $backend: true, + $type: 's_Get_SelectedList', + data: mainItems, + rduri: window.GLOB.mainSystemApi + }) + } + } + + if (!deffers.length) return + + deffers = deffers.map((item, i) => { + return new Promise(resolve => { + setTimeout(() => { + Api.getSystemCacheConfig(item, cache).then(res => { + if (!res.status) { + if (res.ErrCode !== '-2') { + notification.warning({ + top: 92, + message: res.message, + duration: 5 + }) + } + skip = true + } + resolve(res) + }) + }, 30 * i) + }) + }) + + Promise.all(deffers).then(response => { + let result = {} + + response.forEach(item => { + result = {...result, ...item} + }) + + delete result.ErrCode + delete result.ErrMesg + delete result.message + delete result.status + + this.resetFormList(result, skip) + }) + } + /** + * @description 鑾峰彇涓嬫媺琛ㄥ崟閫夐」淇℃伅 + */ + improveActionForm = (deForms) => { + const { BID, action } = this.props + + let deffers = [] + let mainItems = [] // 浜戠鎴栧崟鐐规暟鎹� + let localItems = [] // 鏈湴鏁版嵁 + let cache = action.setting.cache !== 'false' && !action.$cache + let skip = false + + let _sql = `Declare @mk_departmentcode nvarchar(512),@mk_organization nvarchar(512),@mk_user_type nvarchar(20) select @mk_departmentcode='${sessionStorage.getItem('departmentcode') || ''}',@mk_organization='${sessionStorage.getItem('organization') || ''}',@mk_user_type='${sessionStorage.getItem('mk_user_type') || ''}'\n` + let _sso = _sql deForms.forEach(item => { if (item.database === 'sso') { - mainItems.push(`select '${item.field}' as obj_name,'${item.arr_field}' as arr_field,'${item.base_sql}' as LText`) + let sql = _sso + item.base_sql + _sso = '' + + sql = sql.replace(/@ID@/ig, `'${this.state.ID || ''}'`) + sql = sql.replace(/@BID@/ig, `'${BID}'`) + + if (window.GLOB.debugger === true) { + window.mkInfo(sql) + } + + sql = sql.replace(/%/ig, ' mpercent ') + + mainItems.push(`select '${item.field}' as obj_name,'${item.arr_field}' as arr_field,'${window.btoa(window.encodeURIComponent(sql))}' as LText`) } else { - localItems.push(`select '${item.field}' as obj_name,'${item.arr_field}' as arr_field,'${item.base_sql}' as LText`) + let sql = _sql + item.base_sql + _sql = '' + + sql = sql.replace(/@ID@/ig, `'${this.state.ID || ''}'`) + sql = sql.replace(/@BID@/ig, `'${BID}'`) + + if (window.GLOB.debugger === true) { + window.mkInfo(sql) + } + + sql = sql.replace(/%/ig, ' mpercent ') + + localItems.push(`select '${item.field}' as obj_name,'${item.arr_field}' as arr_field,'${window.btoa(window.encodeURIComponent(sql))}' as LText`) } }) - - if (menuType !== 'HS' && window.GLOB.systemType !== 'production') { - localItems = [...localItems, ...mainItems] - mainItems = [] - } // 鏈湴璇锋眰 let param = { @@ -340,28 +1081,31 @@ table_type: 'Y' } - if (BID) { - param.BID = BID - } - if (param.LText) { - param.LText = Utils.formatOptions(param.LText) - param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') - param.secretkey = Utils.encrypt(param.LText, param.timestamp) + if (window.GLOB.execType === 'x') { + param.exec_type = 'x' + } - if (menuType === 'HS') { // 浜戠鏁版嵁楠岃瘉 + param.LText = Utils.formatOptions(param.LText, param.exec_type) + param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') + param.secretkey = Utils.encrypt(window.GLOB.execType === 'x' ? '' : param.LText, param.timestamp) + + if (window.GLOB.mkHS) { // 浜戠鏁版嵁楠岃瘉 param.open_key = Utils.encryptOpenKey(param.secretkey, param.timestamp) } deffers.push( new Promise(resolve => { - Api.getSystemCacheConfig(param).then(res => { + Api.getSystemCacheConfig(param, cache).then(res => { if (!res.status) { - notification.warning({ - top: 92, - message: res.message, - duration: 5 - }) + if (res.ErrCode !== '-2') { + notification.warning({ + top: 92, + message: res.message, + duration: 5 + }) + } + skip = true } resolve(res) }) @@ -378,35 +1122,34 @@ table_type: 'Y' } - if (BID) { - mainparam.BID = BID - } - if (mainparam.LText) { - mainparam.LText = Utils.formatOptions(mainparam.LText) - mainparam.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') - mainparam.secretkey = Utils.encrypt(mainparam.LText, mainparam.timestamp) + if (window.GLOB.execType === 'x') { + mainparam.exec_type = 'x' + } - if (menuType === 'HS') { // 浜戠鏁版嵁楠岃瘉 - mainparam.open_key = Utils.encryptOpenKey(mainparam.secretkey, mainparam.timestamp) - if (options.cloudServiceApi) { - mainparam.rduri = options.cloudServiceApi - mainparam.userid = sessionStorage.getItem('CloudUserID') || '' - mainparam.LoginUID = sessionStorage.getItem('CloudLoginUID') || '' - } - } else if (window.GLOB.mainSystemApi) { + mainparam.LText = Utils.formatOptions(mainparam.LText, mainparam.exec_type) + mainparam.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') + mainparam.secretkey = Utils.encrypt(window.GLOB.execType === 'x' ? '' : mainparam.LText, mainparam.timestamp) + + if (window.GLOB.mainSystemApi) { mainparam.rduri = window.GLOB.mainSystemApi + } + if (window.GLOB.mkHS) { // 浜戠鏁版嵁楠岃瘉 + mainparam.open_key = Utils.encryptOpenKey(mainparam.secretkey, mainparam.timestamp) } deffers.push( new Promise(resolve => { - Api.getSystemCacheConfig(mainparam).then(res => { + Api.getSystemCacheConfig(mainparam, cache).then(res => { if (!res.status) { - notification.warning({ - top: 92, - message: res.message, - duration: 5 - }) + if (res.ErrCode !== '-2') { + notification.warning({ + top: 92, + message: res.message, + duration: 5 + }) + } + skip = true } resolve(res) }) @@ -422,62 +1165,7 @@ delete result.message delete result.status - let _formlist = formlist.map(item => { - if (['select', 'link', 'multiselect', 'radio', 'checkbox', 'checkcard'].includes(item.type) && result[item.field] && result[item.field].length > 0) { - let options = [] - result[item.field].forEach(cell => { - let _cell = { key: Utils.getuuid() } - - if (item.type !== 'checkcard') { - _cell.Value = cell[item.valueField] - _cell.Text = cell[item.valueText] - if ((!_cell.Value && _cell.Value !== 0) || (!_cell.Text && _cell.Text !== 0)) return - } else { - _cell.$value = cell[item.valueField] - _cell = {..._cell, ...cell} - if (!_cell.$value && _cell.$value !== 0) return - } - - if (item.type === 'link') { - _cell.ParentID = cell[item.linkField] === undefined ? '' : cell[item.linkField] - } else if (item.linkSubField) { - item.linkSubField.forEach(_field => { - _cell[_field] = (cell[_field] || cell[_field] === 0) ? cell[_field] : '' - }) - } - - options.push(_cell) - }) - - item.oriOptions = [...item.oriOptions, ...options] - } - return item - }) - let values = [] - - this.setState({ - formlist: _formlist.map(item => { - if (item.type === 'link') { - item.options = item.oriOptions.filter(option => option.ParentID === item.supInitVal || option.Value === '') - } else if (['select', 'multiselect', 'radio', 'checkbox', 'checkcard'].includes(item.type)) { - item.options = item.oriOptions - } - if (['select', 'link', 'radio'].includes(item.type) && typeof(item.initval) === 'string' && item.initval.indexOf('$first') > -1) { // 閫変腑绗竴椤� - item.initval = item.options[0] ? item.options[0].Value : '' - values.push({field: item.field, value: item.initval}) - } - return item - }) - }, () => { - if (values.length === 0) return - let fieldsvalue = {} - values.forEach(item => { - if (this.props.form.getFieldValue(item.field) !== undefined) { - fieldsvalue[item.field] = item.value - } - }) - this.props.form.setFieldsValue(fieldsvalue) - }) + this.resetFormList(result, skip) }) } @@ -485,41 +1173,66 @@ * @description 娴嬭瘯绯荤粺鑾峰彇涓嬫媺琛ㄥ崟閫夐」淇℃伅 */ improveSimpleActionForm = (deForms) => { - const { formlist } = this.state + const { action } = this.props - let deffers = deForms.map(form => { + let cache = this.props.action.setting.cache !== 'false' && !action.$cache + let _sql = `Declare @mk_departmentcode nvarchar(512),@mk_organization nvarchar(512),@mk_user_type nvarchar(20) select @mk_departmentcode='${sessionStorage.getItem('departmentcode') || ''}',@mk_organization='${sessionStorage.getItem('organization') || ''}',@mk_user_type='${sessionStorage.getItem('mk_user_type') || ''}'\n` + let skip = false + + let deffers = deForms.map((form, index) => { let param = { func: 'sPC_Get_SelectedList', - LText: form.data_sql, + LText: _sql + form.base_sql, obj_name: form.field, arr_field: form.arr_field } - - if (this.props.BID) { - param.BID = this.props.BID + + param.LText = param.LText.replace(/@ID@/ig, `'${this.state.ID || ''}'`) + param.LText = param.LText.replace(/@BID@/ig, `'${this.props.BID || ''}'`) + + if (window.GLOB.debugger) { + window.mkInfo(param.LText) + } + + if (window.GLOB.execType === 'x') { + param.exec_type = 'x' } + param.LText = Utils.formatOptions(param.LText, param.exec_type) param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') - param.secretkey = Utils.encrypt(param.LText, param.timestamp) + param.secretkey = Utils.encrypt(window.GLOB.execType === 'x' ? '' : param.LText, param.timestamp) + + if (form.database === 'sso' && window.GLOB.mainSystemApi) { + param.rduri = window.GLOB.mainSystemApi + } + if (window.GLOB.mkHS) { // 浜戠鏁版嵁楠岃瘉 + param.open_key = Utils.encryptOpenKey(param.secretkey, param.timestamp) + } return ( new Promise(resolve => { - Api.getSystemCacheConfig(param).then(res => { - if (!res.status) { - notification.warning({ - top: 92, - message: res.message, - duration: 5 - }) - } - resolve(res) - }) + setTimeout(() => { + Api.getSystemCacheConfig(param, cache).then(res => { + if (!res.status) { + if (res.ErrCode !== '-2') { + notification.warning({ + top: 92, + message: res.message, + duration: 5 + }) + } + skip = true + } + resolve(res) + }) + }, index * 30) }) ) }) Promise.all(deffers).then(response => { let result = {} + response.forEach(res => { result = {...result, ...res} }) @@ -529,695 +1242,312 @@ delete result.message delete result.status - let _formlist = formlist.map(item => { - if (['select', 'link', 'multiselect', 'radio', 'checkbox', 'checkcard'].includes(item.type) && result[item.field] && result[item.field].length > 0) { - let options = [] - result[item.field].forEach(cell => { - let _cell = { key: Utils.getuuid() } - - if (item.type !== 'checkcard') { - _cell.Value = cell[item.valueField] - _cell.Text = cell[item.valueText] - if ((!_cell.Value && _cell.Value !== 0) || (!_cell.Text && _cell.Text !== 0)) return - } else { - _cell.$value = cell[item.valueField] - _cell = {..._cell, ...cell} - if (!_cell.$value && _cell.$value !== 0) return - } - - if (item.type === 'link') { - _cell.ParentID = cell[item.linkField] === undefined ? '' : cell[item.linkField] - } else if (item.linkSubField) { - item.linkSubField.forEach(_field => { - _cell[_field] = (cell[_field] || cell[_field] === 0) ? cell[_field] : '' - }) - } - - options.push(_cell) - }) - - item.oriOptions = [...item.oriOptions, ...options] - } - return item - }) - let values = [] - - this.setState({ - formlist: _formlist.map(item => { - if (item.type === 'link') { - item.options = item.oriOptions.filter(option => option.ParentID === item.supInitVal || option.Value === '') - } else if (['select', 'multiselect', 'radio', 'checkbox', 'checkcard'].includes(item.type)) { - item.options = item.oriOptions - } - if (['select', 'link', 'radio'].includes(item.type) && typeof(item.initval) === 'string' && item.initval.indexOf('$first') > -1) { // 閫変腑绗竴椤� - item.initval = item.options[0] ? item.options[0].Value : '' - values.push({field: item.field, value: item.initval}) - } - return item - }) - }, () => { - if (values.length === 0) return - let fieldsvalue = {} - values.forEach(item => { - if (this.props.form.getFieldValue(item.field) !== undefined) { - fieldsvalue[item.field] = item.value - } - }) - this.props.form.setFieldsValue(fieldsvalue) - }) + this.resetFormList(result, skip) }) } - resetform = (formlist, supfields, index, fieldsvalue) => { - index++ - let subfields = [] + resetFormList = (result, skip) => { + const { BID, action } = this.props - supfields.forEach(supfield => { - formlist = formlist.map(item => { - if (item.type === 'link' && item.linkField === supfield.field) { + if (action.$cache && action.setting.cache !== 'false' && !skip) { + Api.writeCacheConfig(action.uuid, fromJS(result).toJS(), BID, this.state.ID) + } + + let reFieldsVal = null + let _formlist = fromJS(this.state.formlist).toJS().map(item => { + if (['select', 'link', 'radio', 'checkbox', 'checkcard', 'multiselect', 'cascader'].includes(item.type) && result[item.field] && result[item.field].length > 0) { + let options = [] + let map = new Map() + let all = false + result[item.field].forEach(cell => { + let _cell = { key: Utils.getuuid() , ParentID: ''} + + if (item.linkField && cell[item.linkField] !== undefined) { + _cell.ParentID = cell[item.linkField] + } + + if (item.type !== 'checkcard') { + _cell.value = cell[item.valueField] + _cell.label = cell[item.valueText] + '' + if (map.has(_cell.ParentID + _cell.value)) return + if (!_cell.label) { + if (!all) { + _cell.label = '鍏ㄩ儴' + all = true + } else { + return + } + } + + map.set(_cell.ParentID + _cell.value, 0) + } else { + _cell.$value = cell[item.cardValField] + _cell = {..._cell, ...cell} + + if (item.urlField) { + _cell.$url = cell[item.urlField] || '' + } else if (item.colorField) { + _cell.$color = cell[item.colorField] || '' + } + + if (map.has(_cell.ParentID + _cell.$value)) return + + map.set(_cell.ParentID + _cell.$value, 0) + } - item.options = item.oriOptions.filter(option => option.ParentID === supfield.initval || option.Value === '') - item.initval = item.options[0] ? item.options[0].Value : '' + if (item.subFields) { + item.subFields.forEach(m => { + _cell[m.field] = cell[m.field] === undefined ? '' : cell[m.field] + }) + } - if (this.props.form.getFieldValue(item.field) !== undefined) { - fieldsvalue[item.field] = item.initval + if (item.disableField && cell[item.disableField] && /^true$/ig.test(cell[item.disableField])) { + _cell.$disabled = true } - subfields.push(item) - } - return item - }) - }) + options.push(_cell) + }) - if (subfields.length === 0 || index > 6) { - return {formlist: formlist, fieldsvalue: fieldsvalue} - } else { - return this.resetform(formlist, subfields, index, fieldsvalue) - } - } + item.oriOptions = [...item.oriOptions, ...options] - selectChange = (_field, value) => { - const { record } = this.state - let formlist = fromJS(this.state.formlist).toJS() - let subfields = [] - let fieldsvalue = {} - let _record = {} - - formlist = formlist.map(item => { - if (item.type === 'link' && item.linkField === _field.field) { - item.options = item.oriOptions.filter(option => option.ParentID === value || option.Value === '') - item.initval = item.options[0] ? item.options[0].Value : '' - - if (this.props.form.getFieldValue(item.field) !== undefined) { - fieldsvalue[item.field] = item.initval + // if (item.type === 'link') { + if (item.linkField) { + let supInitVal = item.supInitVal + if (item.$resetSup) { + supInitVal = this.record[item.linkField] + } + item.options = item.oriOptions.filter(option => option.ParentID === supInitVal || option.value === '') + // } else if (['select', 'radio', 'checkbox', 'checkcard', 'multiselect'].includes(item.type)) { + } else { + item.options = item.oriOptions } - subfields.push(item) + if (['select', 'link', 'radio'].includes(item.type) && item.$first) { // 閫変腑绗竴椤� + item.initval = item.options[0] ? item.options[0].value : '' + this.record[item.field] = item.initval + } + + if (item.subFields && item.options.length > 0) { + let initval = item.initval + if (item.type === 'cascader' && item.separator) { + initval = initval.split(item.separator).pop() + } + // eslint-disable-next-line + let option = item.options.filter(cell => initval == cell.value)[0] + + if (option) { + reFieldsVal = reFieldsVal || {} + item.subFields.forEach(n => { + reFieldsVal[n.field] = option[n.field] + }) + } + } + + if (item.empty === 'hidden' && item.oriOptions.length > 0 && !item.$hidden) { + item.hidden = false + } + if (item.type === 'checkcard' && item.readonly && item.unchecked === 'hidden') { + let selectKeys = item.initval + if (item.multiple === 'true') { + selectKeys = selectKeys ? selectKeys.split(',') : [] + item.options = item.options.filter(item => selectKeys.includes(item.$value)) + } else { + item.options = item.options.filter(item => selectKeys === item.$value) + } + item.oriOptions = fromJS(item.options).toJS() + if (item.options.length === 0) { + item.hidden = true + } else { + item.hidden = false + } + } } + return item }) - - // 琛ㄥ崟鍒囨崲鏃讹紝鏇存柊鍏宠仈瀛楁 - if (_field.linkSubField) { - let _data = _field.options.filter(op => op.Value === value)[0] - if (_data) { - _field.linkSubField.forEach(subfield => { - if (this.props.form.getFieldValue(subfield) !== undefined) { - fieldsvalue[subfield] = (_data[subfield] || _data[subfield] === 0) ? _data[subfield] : '' - } else { - _record[subfield] = (_data[subfield] || _data[subfield] === 0) ? _data[subfield] : '' - } - }) - } - } + if (reFieldsVal) { + _formlist = _formlist.map((cell, i) => { + if (reFieldsVal[cell.field] === undefined) return cell - if (subfields.length === 0) { - this.props.form.setFieldsValue(fieldsvalue) - this.setState({ - record: {...record, ..._record} - }) - } else { - let result = this.resetform(formlist, subfields, 0, fieldsvalue) + cell.initval = reFieldsVal[cell.field] + this.record[cell.field] = reFieldsVal[cell.field] - this.props.form.setFieldsValue(fieldsvalue) - this.setState({ - formlist: result.formlist, - record: {...record, ..._record} + setTimeout(() => { + MKEmitter.emit('mkFC', 'input', cell.uuid, reFieldsVal[cell.field]) + }, i * 5) + + return cell }) } - this.setState({}, () => { - if (!_field.enter || _field.enter === 'false') return - - if (_field.enter === 'tab') { - this.selectInput(_field.tabField) - } else if (_field.enter === 'sub') { - this.handleSubmit() - } + this.setState({ + formlist: _formlist }) } - handleConfirmPassword = (rule, value, callback, item) => { - let val = parseFloat(value) + recordChange = (values, item) => { + this.record = {...this.record, ...values} - if (!isNaN(val)) { - if (typeof(item.min) === 'number' && val < item.min) { - callback(item.label + '鏈�灏忓�间负 ' + item.min) - } else if (typeof(item.max) === 'number' && val > item.max) { - callback(item.label + '鏈�澶у�间负 ' + item.max) - } + if (!item || !item.controlFields) return + + let map = new Map() + this.state.formlist.forEach(cell => { + if (!cell.field) return + map.set(cell.field, cell) + }) + + let reset = (current) => { + let val = this.record[current.field] + + current.controlFields.forEach(cell => { + let m = map.get(cell.field) + + m.hidden = false + + if (current.hidden) { + m.hidden = true + } else { + let box = [...cell.values] + if (current.type === 'multiselect' || (current.type === 'checkcard' && current.multiple === 'true')) { + box.push(...val.split(',')) + } else { + box.push(val) + } + + if (box.length === Array.from(new Set(box)).length) { + m.hidden = true + } + } + + if (m.empty === 'hidden' && m.oriOptions.length === 0) { + m.hidden = true + } + + if (m.hidden) { + m.initval = this.record[m.field] + } + + map.set(cell.field, m) + + if (m.controlFields) { + reset(m) + } + }) } - callback() - } - handleChange = (e, item) => { - let val = e.target.value + reset(item) - if (item.enter === 'false') return - if (!val || !/\n/ig.test(val)) return - if (item.enter === 'tab') { - this.selectInput(item.tabField) - } else { - this.handleSubmit(e) - this.selectInput(item.tabField || item.field) - } - } - - handleInputSubmit = (e, item) => { - if (item.enter === 'false') return - if (item.enter === 'tab') { - this.selectInput(item.tabField) - } else { - this.handleSubmit(e) - this.selectInput(item.tabField || item.field) - } + this.setState({ + formlist: this.state.formlist.map(cell => { + if (cell.field) { + return map.get(cell.field) + } + return cell + }) + }) } getFields() { const { getFieldDecorator } = this.props.form - const { cols, formlist } = this.state + const { formlist } = this.state const fields = [] - let filtration = {} formlist.forEach((item, index) => { - if ((!item.field && item.type !== 'title' && item.type !== 'hint') || item.hidden === 'true' || item.type === 'funcvar') return - if (item.supField) { // 澶氬眰琛ㄥ崟鎺у埗 - let _supVal = this.props.form.getFieldValue(item.supField) + if (item.hidden) return - if (_supVal === undefined && filtration[item.supField]) { - _supVal = filtration[item.supField] - } - - if (item.supvalue.includes(_supVal)) { - let _subVal = this.props.form.getFieldValue(item.field) - filtration[item.field] = _subVal === undefined ? item.initval : _subVal + if (item.type === 'split') { + if (item.opacity === 'false') { + fields.push( + <div key={index}></div> + ) } else { - return + fields.push( + <Col span={24} key={index}> + <p className="mk-form-split-line" style={item.style}>{item.label}</p> + </Col> + ) } - } - - let _colspan = 24 / cols - if (item.entireLine === 'true') { - _colspan = 24 - } - - if (item.type === 'title') { - fields.push( - <Col span={24} key={index}> - <p>{item.label}</p> - </Col> - ) } else if (item.type === 'hint') { fields.push( - <Col span={24} key={index}> - <Form.Item colon={!!item.label} label={item.label || ' '} className="hint"> - <div className="message">{item.message}</div> + <Col span={item.span || 24} key={index}> + <Form.Item className="hint" colon={false} label={item.label ? <span className="mk-form-label" style={item.style}>{item.label}</span> : ' '} labelCol={item.labelCol} wrapperCol={item.wrapperCol}> + <div className="message" style={item.style}>{item.message}</div> </Form.Item> </Col> ) - } else if (item.type === 'text') { - let _max = item.fieldlength || 50 - let _rules = [{ - pattern: /^[^']*$/ig, - message: formRule.input.quotemsg - }] - - if (item.regular) { - if (item.regular === 'number') { - _rules = [{ - pattern: /^[0-9.-]*$/ig, - message: formRule.input.numbermsg - }] - } else if (item.regular === 'letter') { - _rules = [{ - pattern: /^[a-zA-Z]*$/ig, - message: formRule.input.lettermsg - }] - } else if (item.regular === 'letter&number') { - _rules = [{ - pattern: /^[a-zA-Z0-9]*$/ig, - message: formRule.input.letternummsg - }] - } else if (item.regular === 'funcname') { - _rules = [{ - pattern: /^[\u4E00-\u9FA50-9a-zA-Z_]*$/ig, - message: formRule.input.funcname - }] - } + } else if (item.type === 'formula') { + fields.push( + <Col span={item.span || 24} key={index}> + <Form.Item className="hint" colon={false} label={<span className="mk-form-label" style={item.style}>{item.label}</span>} labelCol={item.labelCol} wrapperCol={item.wrapperCol}> + <MkFormula config={item} data={this.record}></MkFormula> + </Form.Item> + </Col> + ) + } else { + let content = null + let className = '' + let label = item.tooltip ? <Tooltip placement="topLeft" title={item.tooltip}><QuestionCircleOutlined style={{color: '#c49f47', marginRight: '3px'}}/> + <span className="mk-form-label" style={item.style}>{item.label}</span> + </Tooltip> : <span className="mk-form-label" style={item.style}>{item.label}</span> + + if (item.type === 'text' || item.type === 'linkMain') { + content = (<MKInput config={item} onChange={(val, defer) => !defer && this.recordChange({[item.field]: val})} onSubmit={this.props.inputSubmit} />) + } else if (item.type === 'number') { + content = (<MKNumberInput config={item} onChange={(val, defer) => !defer && this.recordChange({[item.field]: val})} onSubmit={this.props.inputSubmit} />) + } else if (item.type === 'select' || item.type === 'link' || item.type === 'multiselect') { + content = (<MKSelect config={item} onChange={(val, other) => this.recordChange({[item.field]: val, ...other}, item)} onSubmit={this.props.inputSubmit} />) + } else if (item.type === 'popSelect') { + content = (<MKPopSelect config={item} BID={this.props.BID} ID={this.state.ID} onChange={(val, other) => this.recordChange({[item.field]: val, ...other}, item)} onSubmit={this.props.inputSubmit} />) + } else if (item.type === 'cascader') { + content = (<MkCascader config={item} onChange={(val, other) => this.recordChange({[item.field]: val, ...other}, item)}/>) + } else if (item.type === 'color') { + content = (<MKColor config={item} onChange={(val) => this.recordChange({[item.field]: val})}/>) + } else if (item.type === 'checkcard') { + className = 'checkcard' + content = (<MKCheckCard config={item} onChange={(val, other) => this.recordChange({[item.field]: val, ...other}, item)}/>) + } else if (item.type === 'switch') { + content = (<MKSwitch config={item} onChange={(val, other) => this.recordChange({[item.field]: val, ...other}, item)} onSubmit={this.props.inputSubmit}/>) + } else if (item.type === 'check') { + content = (<MKCheck config={item} onChange={(val) => this.recordChange({[item.field]: val}, item)} onSubmit={this.props.inputSubmit}/>) + } else if (item.type === 'checkbox') { + content = (<MKCheckbox config={item} onChange={(val) => this.recordChange({[item.field]: val})}/>) + } else if (item.type === 'radio') { + content = (<MKRadio config={item} onChange={(val, other) => this.recordChange({[item.field]: val, ...other}, item)}/>) + } else if (item.type === 'date' || item.type === 'datemonth') { + content = (<MKDatePicker config={item} onChange={(val) => this.recordChange({[item.field]: val})} onSubmit={this.props.inputSubmit}/>) + } else if (item.type === 'fileupload') { + className = item.readonly ? 'readonly' : '' + className += item.fileType === 'picture-card' ? ' file-upload' : '' + content = (<MKFileUpload config={item} data={this.record} onChange={(val, other = {}) => this.recordChange({[item.field]: val, ...other})} />) + } else if (item.type === 'textarea') { + content = (<MKTextArea config={item} onChange={(val, defer) => !defer && this.recordChange({[item.field]: val})}/>) + } else if (item.type === 'rate') { + content = (<Rate count={item.rateCount} disabled={item.readonly} style={{color: item.color || '#fadb14'}} onChange={(val) => this.recordChange({[item.field]: val})} character={item.character ? <MkIcon type={item.character}/> : <StarFilled />} allowHalf={item.allowHalf}/>) + } else if (item.type === 'vercode') { + content = (<MkVercode config={item} record={this.record} onSend={(send_type, timestamp, n_id) => this.setState({send_type, timestamp, n_id})} onChange={(val) => this.recordChange({[item.field]: val})} onSubmit={this.props.inputSubmit}/>) + } else if (item.type === 'brafteditor') { + content = (<MKEditor config={item} onChange={(val) => this.recordChange({[item.field]: val})}/>) + label = item.hidelabel !== 'true' ? label : '' } - fields.push( - <Col span={_colspan} key={index}> - <Form.Item label={item.tooltip ? - <Tooltip placement="topLeft" title={item.tooltip}> - <Icon type="question-circle" /> - {item.label} - </Tooltip> : item.label - }> - {getFieldDecorator(item.field, { - initialValue: item.initval + '', - rules: [ - { - required: item.required === 'true', - message: this.props.dict['form.required.input'] + item.label + '!' - }, - { - max: _max, - message: formRule.input.formMessage.replace('@max', _max) - }, - ..._rules - ] - })(<Input placeholder="" autoComplete="off" disabled={item.readonly === 'true'} onChange={(e) => this.handleChange(e, item)} onPressEnter={(e) => this.handleInputSubmit(e, item)} />)} - </Form.Item> - </Col> - ) - } else if (item.type === 'number') { // 鏁板瓧 - let precision = (item.decimal || item.decimal === 0) ? item.decimal : null + if (!content) return fields.push( - <Col span={_colspan} key={index}> - <Form.Item label={item.tooltip ? - <Tooltip placement="topLeft" title={item.tooltip}> - <Icon type="question-circle" /> - {item.label} - </Tooltip> : item.label - }> + <Col span={item.span || 24} key={index}> + <Form.Item + label={label} + colon={false} + className={className} + extra={item.extra || null} + labelCol={item.labelCol} + wrapperCol={item.wrapperCol} + > {getFieldDecorator(item.field, { initialValue: item.initval, - rules: [ - { - required: true, - message: this.props.dict['form.required.input'] + item.label + '!' - }, - { - validator: (rule, value, callback) => this.handleConfirmPassword(rule, value, callback, item) - } - ] - })( - precision === null ? - <InputNumber disabled={item.readonly === 'true'} onPressEnter={(e) => this.handleInputSubmit(e, item)} /> : - <InputNumber precision={precision} disabled={item.readonly === 'true'} onPressEnter={(e) => this.handleInputSubmit(e, item)} /> - )} - </Form.Item> - </Col> - ) - } else if (item.type === 'color') { // 棰滆壊閫夋嫨 - fields.push( - <Col span={_colspan} key={index}> - <Form.Item label={item.tooltip ? - <Tooltip placement="topLeft" title={item.tooltip}> - <Icon type="question-circle" /> - {item.label} - </Tooltip> : item.label - }> - {getFieldDecorator(item.field, { - initialValue: item.initval || 'transparent', - rules: [ - { - required: item.required === 'true', - message: this.props.dict['form.required.select'] + item.label + '!' - } - ] - })( - <ColorSketch /> - )} - </Form.Item> - </Col> - ) - } else if (item.type === 'checkcard') { // 澶氶�夋 - fields.push( - <Col span={24} key={index}> - <Form.Item label={item.tooltip ? - <Tooltip placement="topLeft" title={item.tooltip}> - <Icon type="question-circle" /> - {item.label} - </Tooltip> : item.label - } className="checkcard"> - {getFieldDecorator(item.field, { - initialValue: item.initval, - rules: [ - { - required: item.required === 'true', - message: this.props.dict['form.required.select'] + item.label + '!' - } - ] - })(<CheckCard card={item} />)} - </Form.Item> - </Col> - ) - } else if (item.type === 'switch') { // 澶氶�夋 - fields.push( - <Col span={_colspan} key={index}> - <Form.Item label={item.tooltip ? - <Tooltip placement="topLeft" title={item.tooltip}> - <Icon type="question-circle" /> - {item.label} - </Tooltip> : item.label - }> - {getFieldDecorator(item.field, { - initialValue: item.initval, - rules: [ - { - required: item.required === 'true', - message: this.props.dict['form.required.select'] + item.label + '!' - } - ] - })(<CustomSwitch Item={item} />)} - </Form.Item> - </Col> - ) - } else if (item.type === 'checkbox') { // 澶氶�夋 - let _initval = item.initval ? item.initval.split(',').filter(Boolean) : [] - - fields.push( - <Col span={_colspan} key={index}> - <Form.Item label={item.tooltip ? - <Tooltip placement="topLeft" title={item.tooltip}> - <Icon type="question-circle" /> - {item.label} - </Tooltip> : item.label - }> - {getFieldDecorator(item.field, { - initialValue: _initval, - rules: [ - { - required: item.required === 'true', - message: this.props.dict['form.required.select'] + item.label + '!' - } - ] - })( - <Checkbox.Group disabled={item.readonly === 'true'}> - {item.options.map(option => <Checkbox key={option.key} title={option.Text} value={option.Value}>{option.Text}</Checkbox>)} - </Checkbox.Group> - )} - </Form.Item> - </Col> - ) - } else if (item.type === 'radio') { // 鍗曢�夋 - fields.push( - <Col span={_colspan} key={index}> - <Form.Item label={item.tooltip ? - <Tooltip placement="topLeft" title={item.tooltip}> - <Icon type="question-circle" /> - {item.label} - </Tooltip> : item.label - }> - {getFieldDecorator(item.field, { - initialValue: item.initval, - rules: [ - { - required: item.required === 'true', - message: this.props.dict['form.required.select'] + item.label + '!' - } - ] - })( - <Radio.Group disabled={item.readonly === 'true'} onChange={(e) => {this.selectChange(item, e.target.value)}}> - {item.options.map(option => <Radio key={option.key} value={option.Value}>{option.Text}</Radio>)} - </Radio.Group> - )} - </Form.Item> - </Col> - ) - } else if (item.type === 'select' || item.type === 'link') { // 涓嬫媺鎼滅储 - fields.push( - <Col span={_colspan} key={index}> - <Form.Item label={item.tooltip ? - <Tooltip placement="topLeft" title={item.tooltip}> - <Icon type="question-circle" /> - {item.label} - </Tooltip> : item.label - }> - {getFieldDecorator(item.field, { - initialValue: item.initval, - rules: [ - { - required: item.required === 'true', - message: this.props.dict['form.required.select'] + item.label + '!' - } - ] - })( - <Select - showSearch - allowClear={true} - filterOption={(input, option) => option.props.children.toLowerCase().indexOf(input.toLowerCase()) >= 0} - onSelect={(value) => {this.selectChange(item, value)}} - disabled={item.readonly === 'true'} - > - {item.options.map(option => - <Select.Option id={option.key} title={option.Text} key={option.key} value={option.Value}>{option.Text}</Select.Option> - )} - </Select> - )} - </Form.Item> - </Col> - ) - } else if (item.type === 'multiselect') { // 澶氶�� - let _initval = item.initval ? item.initval.split(',').filter(Boolean) : [] - fields.push( - <Col span={_colspan} key={index}> - <Form.Item label={item.tooltip ? - <Tooltip placement="topLeft" title={item.tooltip}> - <Icon type="question-circle" /> - {item.label} - </Tooltip> : item.label - }> - {getFieldDecorator(item.field, { - initialValue: _initval, - rules: [ - { - required: item.required === 'true', - message: this.props.dict['form.required.select'] + item.label + '!' - } - ] - })( - <Select - showSearch - mode="multiple" - filterOption={(input, option) => option.props.children.toLowerCase().indexOf(input.toLowerCase()) >= 0} - disabled={item.readonly === 'true'} - > - {item.options.map(option => - <Select.Option id={option.key} title={option.Text} key={option.key} value={option.Value}>{option.Text}</Select.Option> - )} - </Select> - )} - </Form.Item> - </Col> - ) - } else if (item.type === 'date') { // 鏃堕棿鎼滅储 - fields.push( - <Col span={_colspan} key={index}> - <Form.Item label={item.tooltip ? - <Tooltip placement="topLeft" title={item.tooltip}> - <Icon type="question-circle" /> - {item.label} - </Tooltip> : item.label - }> - {getFieldDecorator(item.field, { - initialValue: item.initval, - rules: [ - { - required: item.required === 'true', - message: this.props.dict['form.required.select'] + item.label + '!' - } - ] - })( - <DatePicker disabled={item.readonly === 'true'} /> - )} - </Form.Item> - </Col> - ) - } else if (item.type === 'datemonth') { - fields.push( - <Col span={_colspan} key={index}> - <Form.Item label={item.tooltip ? - <Tooltip placement="topLeft" title={item.tooltip}> - <Icon type="question-circle" /> - {item.label} - </Tooltip> : item.label - }> - {getFieldDecorator(item.field, { - initialValue: item.initval, - rules: [ - { - required: item.required === 'true', - message: this.props.dict['form.required.select'] + item.label + '!' - } - ] - })( - <MonthPicker disabled={item.readonly === 'true'} /> - )} - </Form.Item> - </Col> - ) - } else if (item.type === 'datetime') { - fields.push( - <Col span={_colspan} key={index}> - <Form.Item label={item.tooltip ? - <Tooltip placement="topLeft" title={item.tooltip}> - <Icon type="question-circle" /> - {item.label} - </Tooltip> : item.label - }> - {getFieldDecorator(item.field, { - initialValue: item.initval, - rules: [ - { - required: item.required === 'true', - message: this.props.dict['form.required.select'] + item.label + '!' - } - ] - })( - <DatePicker showTime disabled={item.readonly === 'true'} /> - )} - </Form.Item> - </Col> - ) - } else if (item.type === 'fileupload') { - let filelist = this.props.data ? this.props.data[item.field] : item.initval - if (filelist && this.state.readin[item.field]) { - try { - filelist = filelist.split(',').map((url, index) => { - return { - uid: `${index}`, - name: url.slice(url.lastIndexOf('/') + 1), - status: 'done', - url: url, - origin: true - } - }) - } catch { - filelist = [] - } - } else { - filelist = [] - } - - fields.push( - <Col span={_colspan} key={index}> - <Form.Item label={item.tooltip ? - <Tooltip placement="topLeft" title={item.tooltip}> - <Icon type="question-circle" /> - {item.label} - </Tooltip> : item.label - }> - {getFieldDecorator(item.field, { - initialValue: filelist, - rules: [ - { - required: item.required === 'true', - message: this.props.dict['form.required.select'] + item.label + '!' - } - ] - })( - <FileUpload accept={item.suffix} maxFile={item.maxfile} fileType={item.fileType || 'text'} /> - )} - </Form.Item> - </Col> - ) - } else if (item.type === 'linkMain') { - fields.push( - <Col span={_colspan} key={index}> - <Form.Item label={item.tooltip ? - <Tooltip placement="topLeft" title={item.tooltip}> - <Icon type="question-circle" /> - {item.label} - </Tooltip> : item.label - }> - {getFieldDecorator(item.field, { - initialValue: item.initval, - rules: [ - { - required: item.required === 'true', - message: this.props.dict['form.required.input'] + item.label + '!' - } - ] - })(<Input placeholder="" autoComplete="off" disabled={item.readonly === 'true'} />)} - </Form.Item> - </Col> - ) - } else if (item.type === 'funcvar') { - // 鍑芥暟鍙橀噺瀛楁锛岄粯璁や笉鏄剧ず - } else if (item.type === 'textarea') { - let _max = item.fieldlength || 512 - let _rules = [] - if (item.encryption !== 'true') { - _rules = [{ - pattern: /^[^']*$/ig, - message: formRule.input.quotemsg - }] - } - fields.push( - <Col span={24} key={index}> - <Form.Item label={item.tooltip ? - <Tooltip placement="topLeft" title={item.tooltip}> - <Icon type="question-circle" /> - {item.label} - </Tooltip> : item.label - }> - {getFieldDecorator(item.field, { - initialValue: item.initval, - rules: [ - { - required: item.required === 'true', - message: this.props.dict['form.required.input'] + item.label + '!' - }, - { - max: _max, - message: formRule.input.formMessage.replace('@max', _max) - }, - ..._rules - ] - })(<CustomTextArea Item={item} />)} - </Form.Item> - </Col> - ) - } else if (item.type === 'brafteditor') { - let _max = item.fieldlength || 512 - - fields.push( - <Col span={24} key={index}> - <Form.Item label={item.hidelabel !== 'true' && item.tooltip ? - <Tooltip placement="topLeft" title={item.tooltip}> - <Icon type="question-circle" /> - {item.label} - </Tooltip> : (item.hidelabel !== 'true' ? item.label : '') - }> - {getFieldDecorator(item.field, { - initialValue: item.initval || '', - rules: [ - { - required: item.required === 'true', - message: this.props.dict['form.required.input'] + item.label + '!' - }, - { - max: _max, - message: formRule.input.formMessage.replace('@max', _max) - } - ] - })(<Editor Item={item}/>)} + rules: item.rules + })(content)} </Form.Item> </Col> ) @@ -1227,186 +1557,166 @@ return fields } - handleConfirm = () => { - const { record, intercepts, writein } = this.state - let _format = { - date: 'YYYY-MM-DD', - datemonth: 'YYYY-MM', - datetime: 'YYYY-MM-DD HH:mm:ss' - } + handleConfirm = (formId, errId) => { + const { action } = this.props + const { formlist, send_type, timestamp, n_id } = this.state + window.CACHE.errFocusId = '' // 琛ㄥ崟鎻愪氦鏃舵鏌ヨ緭鍏ュ�兼槸鍚︽纭� return new Promise((resolve, reject) => { this.props.form.validateFieldsAndScroll((err, values) => { - if (!err) { - let search = [] - // 闅愯棌琛ㄥ崟 - this.state.formlist.forEach(item => { - if (!item.field) return - - let _item = null - if (item.type === 'funcvar') { - _item = { - type: 'funcvar', - readonly: 'true', - readin: false, - writein: writein[item.field], - fieldlen: this.state.fieldlen[item.field], - key: item.field, - value: '' - } - } else if (item.hidden === 'true') { - let _val = item.initval - if (record.hasOwnProperty(item.field)) { - _val = record[item.field] - } - - _item = { - type: this.state.datatype[item.field], - readonly: this.state.readtype[item.field], - readin: this.state.readin[item.field], - writein: writein[item.field], - fieldlen: this.state.fieldlen[item.field], - key: item.field, - value: _val - } - } else if (item.supField && !item.supvalue.includes(this.props.form.getFieldValue(item.supField))) { - _item = { - type: this.state.datatype[item.field], - readonly: this.state.readtype[item.field], - readin: this.state.readin[item.field], - writein: writein[item.field], - fieldlen: this.state.fieldlen[item.field], - key: item.field, - value: item.initval - } - } - - if (!_item) return - - if (_item.value === undefined) { - _item.value = '' - } else if (item.type === 'date' || item.type === 'datemonth' || item.type === 'datetime') { - if (!_item.value) { - _item.value = '' - } else if (_item.value.format) { - _item.value = _item.value.format(_format[item.type]) - } - } else if (item.type === 'text' && _item.value && typeof(_item.value) === 'string') { // 鐗规畩瀛楁鏇挎崲 - _item.value = _item.value.replace(/^(\s*)@appkey@(\s*)$/ig, window.GLOB.appkey) - _item.value = _item.value.replace(/^(\s*)@SessionUid@(\s*)$/ig, (localStorage.getItem('SessionUid') || '')) - _item.value = _item.value.replace(/^(\s*)@bid@(\s*)$/ig, (this.props.BID || '')) - } - - search.push(_item) - }) - - Object.keys(values).forEach(key => { - if (values[key] === undefined) { // 琛ㄥ崟寮傚父锛燂紵锛� - if (search.filter(s => s.key === key).length === 0) { - search.push({ - type: this.state.datatype[key], - readonly: this.state.readtype[key], - readin: this.state.readin[key], - writein: writein[key], - fieldlen: this.state.fieldlen[key], - key: key, - value: '' - }) - } - return - } - - let _value = '' - let _type = this.state.datatype[key] - if (_type === 'datetime') { - _value = values[key] ? moment(values[key]).format('YYYY-MM-DD HH:mm:ss') : '' - } else if (_type === 'datemonth') { - _value = values[key] ? moment(values[key]).format('YYYY-MM') : '' - } else if (_type === 'date') { - _value = values[key] ? moment(values[key]).format('YYYY-MM-DD') : '' - } else if (_type === 'number') { - _value = values[key] - - } else if (_type === 'multiselect' || _type === 'checkbox') { - _value = values[key] ? values[key].join(',') : '' - - } else if (_type === 'fileupload') { - let vals = [] - - if (values[key] && values[key].length > 0) { - values[key].forEach(_val => { - if (_val.origin && _val.url) { - vals.push(_val.url) - } else if (!_val.origin && _val.status === 'done' && _val.response) { - vals.push(Utils.getrealurl(_val.response)) - } - }) - } - - _value = vals.join(',') - } else if (_type === 'text' || _type === 'textarea') { - _value = values[key].replace(/\t*|\v*/g, '') // 鍘婚櫎鍒惰〃绗� - - if (intercepts.includes(key)) { // 鍘婚櫎棣栧熬绌烘牸 - _value = _value.replace(/(^\s*|\s*$)/g, '') - } - if (_type === 'text' && _value) { // 鐗规畩瀛楁鏇挎崲 - _value = _value.replace(/^(\s*)@appkey@(\s*)$/ig, window.GLOB.appkey) - _value = _value.replace(/^(\s*)@SessionUid@(\s*)$/ig, (localStorage.getItem('SessionUid') || '')) - _value = _value.replace(/^(\s*)@bid@(\s*)$/ig, (this.props.BID || '')) - } - } else { - _value = values[key] - } - - if (_value === undefined) { - _value = '' - } - - search.push({ - type: this.state.datatype[key], - readonly: this.state.readtype[key], - readin: this.state.readin[key], - writein: writein[key], - fieldlen: this.state.fieldlen[key], - key: key, - value: _value - }) - }) - - resolve(search) - } else { + if (err) { reject(err) + return } + let forms = [] + let record = {...this.record, ...values} + let locals = null + + formlist.forEach(item => { + if (!item.field || ['hint', 'split', 'formula'].includes(item.type)) return + + let _item = { + type: item.type, + readin: item.readin, + writein: item.writein, + fieldlen: item.fieldlength, + key: item.field, + isconst: item.constant === 'true' + } + + if (item.$verify) { + _item.$verify = true + _item.label = item.label + } + + _item.value = record[item.field] !== undefined ? record[item.field] : '' + + if (item.type === 'funcvar') { + _item.value = '' + } else if (item.declare === 'decimal') { + _item.type = 'number' + _item.fieldlen = item.decimal || 0 + } else if (['text', 'textarea', 'linkMain', 'brafteditor'].includes(item.type)) { + _item.value = _item.value + '' + _item.value = _item.value.replace(/\t+|\v+/g, '') // 鍘婚櫎鍒惰〃绗� + + if (item.interception !== 'false') { // 鍘婚櫎棣栧熬绌烘牸 + if (item.interception === 'func') { + try { + // eslint-disable-next-line + let func = new Function('value', 'data', item.func) + _item.value = func(_item.value, record) + _item.value = _item.value !== undefined ? _item.value : '' + } catch (e) { + console.warn(e) + _item.value = '' + } + } else if (item.interception === 'charTure') { + let str = _item.value.replace(/(^\s*|\s*$)/g, '') + let result = '' + for (let i = 0 ; i < str.length; i++) { + let code = str.charCodeAt(i) + if (code >= 65281 && code <= 65373) { + result += String.fromCharCode(str.charCodeAt(i) - 65248) + } else if (code === 12288) { + result += String.fromCharCode(str.charCodeAt(i) - 12288 + 32) + } else { + result += str.charAt(i) + } + } + _item.value = result + } else { + _item.value = _item.value.replace(/(^\s*|\s*$)/g, '') + } + } + if (item.type === 'text') { + if (/@appkey@|@SessionUid@|@bid@/ig.test(_item.value)) { // 鐗规畩瀛楁鏇挎崲 + _item.value = _item.value.replace(/^(\s*)@appkey@(\s*)$/ig, window.GLOB.appkey).replace(/^(\s*)@SessionUid@(\s*)$/ig, (localStorage.getItem('SessionUid') || '')).replace(/^(\s*)@bid@(\s*)$/ig, (this.props.BID || '')) + } + if (item.lenControl && item.lenControl !== 'limit') { + if (item.lenControl === 'left') { + _item.value = _item.value.substr(0, item.fieldlength) + } else { + _item.value = _item.value.slice(-item.fieldlength) + } + } + if (item.regular === 'phone') { + _item.value = _item.value.replace(/\s+/g, '') + } + } + } else if (item.type === 'datemonth') { + _item.type = 'text' + } else if (item.type === 'date') { + _item.type = item.declareType === 'nvarchar(50)' ? 'text' : 'date' + } else if (item.type === 'vercode') { + _item.type = 'text' + forms.push({ + type: 'text', + readin: false, + writein: false, + fieldlen: 50, + key: 'mk_timestamp', + value: timestamp || '' + }) + + forms.push({ + type: 'text', + readin: false, + writein: false, + fieldlen: 50, + key: 'mk_send_type', + value: send_type || '' + }) + + forms.push({ + type: 'text', + readin: false, + writein: false, + fieldlen: 50, + key: 'mk_n_id', + value: n_id || '' + }) + } + + if (item.local) { + locals = locals || {} + locals[item.field] = _item.value + } + + forms.push(_item) + }) + + this.submitId = formId || '' + window.CACHE.errFocusId = errId || '' + + if (locals) { + sessionStorage.setItem('local_' + action.uuid, JSON.stringify(locals)) + } + + resolve(forms) }) }) } - handleSubmit = (e) => { - e && e.preventDefault() - this.props.inputSubmit() - } - render() { - const { cols } = this.state - const formItemLayout = { - // labelCol: { - // xs: { span: 24 }, - // sm: { span: 8 } - // }, - // wrapperCol: { - // xs: { span: 24 }, - // sm: { span: 16 } - // } + const { action } = this.props + + let _align = 'left_right' + if (action.setting && action.setting.align) { + _align = action.setting.align + } + let space = ' space-normal' + if (action.setting && action.setting.verticalSpace) { + space = ' space-' + action.setting.verticalSpace } return ( - <Form {...formItemLayout} className="ant-advanced-search-form main-form-field" id="main-form-box"> - <Row className={'cols' + cols} gutter={24}>{this.getFields()}</Row> + <Form className={'main-form-field ' + _align + space}> + <Row gutter={24}>{this.getFields()}</Row> </Form> ) } } -export default Form.create()(MainSearch) \ No newline at end of file +export default Form.create()(MutilFormComponent) \ No newline at end of file -- Gitblit v1.8.0