| | |
| | | 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 Utils from '@/utils/utils.js' |
| | |
| | | let fieldMap = new Map() |
| | | let check = action.setting.formType === 'check' |
| | | |
| | | if (this.props.data) { |
| | | 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] |
| | |
| | | } 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 |
| | |
| | | |
| | | // 数据自动填充 |
| | | 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' |
| | |
| | | } else if (item.type === 'linkMain') { |
| | | readin = false |
| | | item.readin = false |
| | | item.$verify = item.verifyVal === 'true' |
| | | } else if (item.type === 'number') { |
| | | item.decimal = item.decimal || 0 |
| | | item.fieldlength = item.decimal |
| | |
| | | |
| | | if (['select', 'link', 'radio', 'checkbox', 'checkcard', 'multiselect', 'cascader'].includes(item.type)) { |
| | | item.options = item.options || [] |
| | | item.options = item.options.filter(cell => { |
| | | cell.value = cell.Value |
| | | cell.label = cell.Text |
| | | |
| | | return !cell.Hide |
| | | }) |
| | | 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(), |
| | |
| | | } 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') { |
| | |
| | | if (isNaN(item.initval) || item.initval === '') { |
| | | item.initval = 0 |
| | | } |
| | | } else if (['select', 'link', 'radio', 'checkbox', 'checkcard', 'multiselect', 'cascader'].includes(item.type) && item.resourceType === '1') { |
| | | } else if (item.$select && item.resourceType === '1') { |
| | | deForms.push(item) |
| | | } else if (item.type === 'rate') { |
| | | item.rateCount = item.rateCount || 5 |
| | |
| | | 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({ |
| | |
| | | }) |
| | | } 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])\d{8}$/, |
| | | 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') { |
| | |
| | | } 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 < 1e-6) { |
| | | if (item.min > 0 && item.min < 1e-6) { |
| | | if (item.min === 1e-6) { |
| | | callback(item.label + '最小值为 0.000001') |
| | | } else if (item.min === 1e-7) { |
| | |
| | | } else if (item.min === 1e-11) { |
| | | callback(item.label + '最小值为 0.00000000001') |
| | | } else { |
| | | callback(item.label + '最小值为 ' + item.min) |
| | | callback(item.label + (dict['less_limit'] || '最小值为 ') + item.min) |
| | | } |
| | | } else { |
| | | callback(item.label + (dict['less_limit'] || '最小值为 ') + item.min) |
| | |
| | | |
| | | 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') { |
| | |
| | | resetFocus = (id, field) => { |
| | | const { action } = this.props |
| | | |
| | | if (id !== action.uuid) return |
| | | if (id !== action.uuid.replace(/_pop$/, '')) return |
| | | |
| | | let focusId = '' |
| | | |
| | |
| | | } |
| | | |
| | | getFormData = (deForms) => { |
| | | if (deForms.length === 1) { |
| | | 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) |
| | |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * @description 获取下拉表单选项信息 |
| | | */ |
| | | improveBackActionForm = (deForms) => { |
| | | const { BID, action } = this.props |
| | | |
| | | 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 获取下拉表单选项信息 |
| | | */ |
| | |
| | | sql = sql.replace(/@BID@/ig, `'${BID}'`) |
| | | |
| | | if (window.GLOB.debugger === true) { |
| | | console.info(sql) |
| | | window.mkInfo(sql) |
| | | } |
| | | |
| | | sql = sql.replace(/%/ig, ' mpercent ') |
| | |
| | | sql = sql.replace(/@BID@/ig, `'${BID}'`) |
| | | |
| | | if (window.GLOB.debugger === true) { |
| | | console.info(sql) |
| | | window.mkInfo(sql) |
| | | } |
| | | |
| | | sql = sql.replace(/%/ig, ' mpercent ') |
| | |
| | | new Promise(resolve => { |
| | | 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) |
| | |
| | | new Promise(resolve => { |
| | | 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) |
| | |
| | | param.LText = param.LText.replace(/@BID@/ig, `'${this.props.BID || ''}'`) |
| | | |
| | | if (window.GLOB.debugger) { |
| | | console.info(param.LText) |
| | | window.mkInfo(param.LText) |
| | | } |
| | | |
| | | if (window.GLOB.execType === 'x') { |
| | |
| | | setTimeout(() => { |
| | | 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) |
| | |
| | | return fields |
| | | } |
| | | |
| | | handleConfirm = (formId) => { |
| | | 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) => { |
| | |
| | | } |
| | | let forms = [] |
| | | let record = {...this.record, ...values} |
| | | let locals = null |
| | | |
| | | formlist.forEach(item => { |
| | | if (!item.field || ['hint', 'split', 'formula'].includes(item.type)) return |
| | |
| | | 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] : '' |
| | | |
| | |
| | | } else if (item.declare === 'decimal') { |
| | | _item.type = 'number' |
| | | _item.fieldlen = item.decimal || 0 |
| | | } else if (['text', 'textarea', 'linkMain'].includes(item.type)) { |
| | | } 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 { |
| | |
| | | _item.value = _item.value.replace(/(^\s*|\s*$)/g, '') |
| | | } |
| | | } |
| | | if (item.type === 'text' && /@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.type === 'text' && 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.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') { |
| | |
| | | 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) |
| | | }) |