UNPKG

fastlion-amis

Version:

一种MIS页面生成工具

974 lines (973 loc) 94.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.FormRenderer = void 0; var tslib_1 = require("tslib"); var react_1 = (0, tslib_1.__importDefault)(require("react")); var factory_1 = require("../../factory"); var form_1 = require("../../store/form"); var tpl_1 = require("../../utils/tpl"); var classnames_1 = (0, tslib_1.__importDefault)(require("classnames")); var filter_schema_1 = (0, tslib_1.__importDefault)(require("../../utils/filter-schema")); var helper_1 = require("../../utils/helper"); var debounce_1 = (0, tslib_1.__importDefault)(require("lodash/debounce")); var flatten_1 = (0, tslib_1.__importDefault)(require("lodash/flatten")); var find_1 = (0, tslib_1.__importDefault)(require("lodash/find")); var Scoped_1 = require("../../Scoped"); var tpl_builtin_1 = require("../../utils/tpl-builtin"); var api_1 = require("../../utils/api"); var Spinner_1 = (0, tslib_1.__importDefault)(require("../../components/Spinner")); var components_1 = require("../../components"); var mobx_state_tree_1 = require("mobx-state-tree"); var msgsub_1 = (0, tslib_1.__importDefault)(require("../Lion/utils/msgsub")); var throttle_1 = (0, tslib_1.__importDefault)(require("lodash/throttle")); // Aug var amis_formula_1 = require("amis-formula"); // import Select from '../../components/Select' var Checkbox_1 = (0, tslib_1.__importDefault)(require("../../components/Checkbox")); var Button_1 = (0, tslib_1.__importDefault)(require("../../components/Button")); var OptionTransfer_1 = (0, tslib_1.__importDefault)(require("../../components/Lion/OptionTransfer")); var row_1 = (0, tslib_1.__importDefault)(require("antd/lib/row")); var col_1 = (0, tslib_1.__importDefault)(require("antd/lib/col")); var select_1 = (0, tslib_1.__importDefault)(require("antd/lib/select")); var print_1 = require("../../utils/print"); var ExpressPrint_1 = require("../Lion/ExpressPrint/ExpressPrint"); var util_1 = require("../../utils/print/util"); var divider_1 = (0, tslib_1.__importDefault)(require("antd/lib/divider")); var antd_1 = require("antd"); var icons_1 = require("@ant-design/icons"); var lodash_1 = require("lodash"); var rangeOptions1 = [ { label: '等于', value: 2 }, { label: '大于', value: 3 }, { label: '大于等于', value: 4 }, { label: '小于', value: 5 }, { label: '小于等于', value: 6 }, { label: '介于', value: 7 }, { label: '包含于', value: 8 }, { label: '包含', value: 9 }, { label: '为空', value: 10 }, ]; var rangeOptions2 = [ { label: '等于', value: 2 }, { label: '大于', value: 3 }, { label: '大于等于', value: 4 }, { label: '小于', value: 5 }, { label: '小于等于', value: 6 }, { label: '介于', value: 7 }, { label: '包含于', value: 8 }, { label: '包含', value: 9 }, { label: '为空', value: 10 }, ]; var rangeOptions3 = [ { label: '模糊', value: 11 }, { label: '等于', value: 2 }, ]; var notRange = ['select', 'tree-select', 'transfer-picker', 'tabs-transfer-picker', 'input-date-range', 'input-datetime-range', 'input-month-range', 'input-year-range', 'input-quarter-range', 'input-time-range', 'input-tag', 'nested-select']; var Form = /** @class */ (function (_super) { (0, tslib_1.__extends)(Form, _super); function Form(props) { var _a, _b, _c, _d, _e, _f, _g, _h; var _this = _super.call(this, props) || this; _this.hooks = {}; _this.shouldLoadInitApi = false; _this.lazyEmitChange = (0, debounce_1.default)(_this.emitChange.bind(_this), 250, { trailing: true, leading: false }); _this.changeFields = []; _this.handleUserChange = function () { return _this.setState({ userChange: true }); }; _this.changeTimes = 0; _this.filterObj = {}; _this.valueChanged = false; _this.getSameEle = function (marr1, marr2) { var eleIsInArr = function (ele, arr) { return arr.some(function (m) { return m === ele.name.split(".")[1]; }); }; return marr1.filter(function (x) { return eleIsInArr(x, marr2); }); }; _this.onInit = _this.onInit.bind(_this); _this.handleAction = _this.handleAction.bind(_this); _this.handleQuery = _this.handleQuery.bind(_this); _this.handleChange = _this.handleChange.bind(_this); // Jay _this.handleInputTableChange = _this.handleInputTableChange.bind(_this); _this.abandonFormItem = _this.abandonFormItem.bind(_this); _this.received = false; _this.setEdited = _this.setEdited.bind(_this); _this.setFormLoading = _this.setFormLoading.bind(_this); _this.confirmAdvancedFilter.bind(_this); _this.resetAdvancedFilter.bind(_this); (_b = (_a = _this.props).getFilterForm) === null || _b === void 0 ? void 0 : _b.call(_a, _this); (_d = (_c = _this.props).getAdvancedFilterForm) === null || _d === void 0 ? void 0 : _d.call(_c, _this); (_f = (_e = _this.props).getFormInstance) === null || _f === void 0 ? void 0 : _f.call(_e, _this); _this.buildExtendAction.bind(_this); _this.shouldCommit = _this.shouldCommit.bind(_this); _this.handleDialogConfirm = _this.handleDialogConfirm.bind(_this); _this.handleDialogClose = _this.handleDialogClose.bind(_this); _this.handleDrawerConfirm = _this.handleDrawerConfirm.bind(_this); _this.handleDrawerClose = _this.handleDrawerClose.bind(_this); _this.handleFormSubmit = _this.handleFormSubmit.bind(_this); _this.validate = _this.validate.bind(_this); _this.submit = _this.submit.bind(_this); _this.addHook = _this.addHook.bind(_this); _this.removeHook = _this.removeHook.bind(_this); _this.emitChange = _this.emitChange.bind(_this); _this.handleBulkChange = _this.handleBulkChange.bind(_this); _this.renderFormItems = _this.renderFormItems.bind(_this); _this.reload = _this.reload.bind(_this); _this.silentReload = _this.silentReload.bind(_this); _this.initInterval = _this.initInterval.bind(_this); _this.blockRouting = _this.blockRouting.bind(_this); _this.handleChangeFields = _this.handleChangeFields.bind(_this); _this.beforePageUnload = _this.beforePageUnload.bind(_this); //Aug 自适应布局 _this.computeAutoLayout = (0, throttle_1.default)(_this.computeAutoLayout.bind(_this), 500); _this.handlerenew = _this.handlerenew.bind(_this); _this.contentRef = react_1.default.createRef(); _this.filterOptionRef = react_1.default.createRef(); var filtersArr = []; var filtersHeader = []; if (_this.props.getAdvancedFilterForm) { _this.getFiltersOptions(); if ((_g = _this.filterOptions) === null || _g === void 0 ? void 0 : _g.length) { filtersArr[0] = { field: _this.filterOptions[0].value, condition: 1, not: false, op: _this.filterOptions[0].type === 'input-text' ? 11 : 2, }; } if ((_h = _this.filterNorma) === null || _h === void 0 ? void 0 : _h.length) { filtersHeader = _this.filterNorma; } } _this.state = { autoColumnCount: 0, filtersArr: filtersArr, collpased: true, filtersHeader: filtersHeader, userChange: false, }; _this._formName = props.name; var store = props.store, canAccessSuperData = props.canAccessSuperData, persistData = props.persistData, simpleMode = props.simpleMode; store.setCanAccessSuperData(canAccessSuperData !== false); store.setPersistData(persistData); if (simpleMode) { store.setInited(true); } if (store && store.parentStore && store.parentStore.storeType === 'ComboStore') { var combo = store.parentStore; combo.addForm(store); combo.forms.forEach(function (form) { return form.items.forEach(function (item) { return item.unique && item.syncOptions(undefined, form.data); }); }); } return _this; } Form.prototype.componentDidMount = function () { var _this = this; var _a, _b, _c; var _d = this.props, initApi = _d.initApi, initFetch = _d.initFetch, initFetchOn = _d.initFetchOn, initAsyncApi = _d.initAsyncApi, initOneApi = _d.initOneApi, initFinishedField = _d.initFinishedField, initCheckInterval = _d.initCheckInterval, store = _d.store, _e = _d.messages, fetchSuccess = _e.fetchSuccess, fetchFailed = _e.fetchFailed, onValidate = _d.onValidate, promptPageLeave = _d.promptPageLeave, env = _d.env, rules = _d.rules, body = _d.body; if ((_a = this.props) === null || _a === void 0 ? void 0 : _a._bindRef) { this.props._bindRef(this); } if (this.props.name) { this._formName = this.props.name; } // chencicsy 将service中的某些数据合并到form start var _superData = {}; var existInputTable = Array.isArray(body) ? body === null || body === void 0 ? void 0 : body.some(function (item) { var _a; return (item === null || item === void 0 ? void 0 : item.type) === 'input-table' || ((_a = item === null || item === void 0 ? void 0 : item.group) === null || _a === void 0 ? void 0 : _a.some(function (groupItem) { return (groupItem === null || groupItem === void 0 ? void 0 : groupItem.type) === 'input-table'; })); }) : false; // body存在input-table合并数据域会出问题 // if (!existInputTable && this.props?.getSuperData) { // _superData = this.props?.getSuperData() // Object.entries(_superData).forEach((items: any[]) => { // this.handleBulkChange({ [items[0]]: items[1] }, false) // }) // } // chencicsy 将service中的某些数据合并到form end this.mounted = true; setTimeout(function () { _this.is_edit = false; }, 0); this.is_edit = false; if (onValidate) { var finalValidate_1 = (0, helper_1.promisify)(onValidate); this.disposeOnValidate = this.addHook(function () { return (0, tslib_1.__awaiter)(_this, void 0, void 0, function () { var result; return (0, tslib_1.__generator)(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, finalValidate_1(store.data, store)]; case 1: result = _a.sent(); if (result && (0, helper_1.isObject)(result)) { Object.keys(result).forEach(function (key) { var msg = result[key]; var items = store.getItemsByPath(key); // 没有找到 if (!Array.isArray(items) || !items.length) { return; } // 在setError之前,提前把残留的error信息清除掉,否则每次onValidate后都会一直把报错 append 上去 items.forEach(function (item) { return item.clearError(); }); if (msg) { msg = Array.isArray(msg) ? msg : [msg]; items.forEach(function (item) { return item.addError(msg); }); } delete result[key]; }); (0, helper_1.isEmpty)(result) ? store.clearRestError() : store.setRestError(Object.keys(result).map(function (key) { return result[key]; })); } return [2 /*return*/]; } }); }); }); } if (Array.isArray(rules) && rules.length) { this.disposeRulesValidate = this.addHook(function () { if (!store.valid) { return; } rules.forEach(function (item) { return !(0, tpl_1.evalExpression)(item.rule, store.data) && store.addRestError(item.message); }); }); } // Jay // 处理initOneApi字段 if ((0, api_1.isEffectiveApi)(initOneApi, store.data, initFetch, initFetchOn)) { store .fetchInitData(initOneApi, store.data, { successMessage: fetchSuccess, errorMessage: fetchFailed, onSuccess: function () { } }) .then(this.initInterval) .then(this.onInit); } else if ((0, api_1.isEffectiveApi)(initApi, store.data, initFetch, initFetchOn)) { store .fetchInitData(initApi, store.data, { successMessage: fetchSuccess, errorMessage: fetchFailed, onSuccess: function () { if (!(0, api_1.isEffectiveApi)(initAsyncApi, store.data) || store.data[initFinishedField || 'finished']) { return; } return (0, helper_1.until)(function () { return store.checkRemote(initAsyncApi, store.data); }, function (ret) { return ret && ret[initFinishedField || 'finished']; }, function (cancel) { return (_this.asyncCancel = cancel); }, initCheckInterval); } }) .then(this.initInterval) .then(this.onInit); } else { setTimeout(this.onInit.bind(this), 4); } if (promptPageLeave) { window.addEventListener('beforeunload', this.beforePageUnload); this.unBlockRouting = (_c = (_b = env.blockRouting) === null || _b === void 0 ? void 0 : _b.call(env, this.blockRouting)) !== null && _c !== void 0 ? _c : undefined; } //Aug this.computeAutoLayout(); window.addEventListener('resize', this.computeAutoLayout); }; Form.prototype.componentDidUpdate = function (prevProps) { var props = this.props; var store = props.store; var _a = this.props, initApi = _a.initApi, initFetch = _a.initFetch, initFetchOn = _a.initFetchOn; if ((0, api_1.isApiOutdated)(prevProps.initApi, props.initApi, prevProps.data, props.data)) { var fetchSuccess = props.fetchSuccess, fetchFailed = props.fetchFailed; // Jay this.is_edit = false; store[store.hasRemoteData ? 'fetchData' : 'fetchInitData'](props.initApi, store.data, { successMessage: fetchSuccess, errorMessage: fetchFailed }).then(this.initInterval); } if (prevProps.body !== props.body) { if (this.props.getAdvancedFilterForm) { } this.getFiltersOptions(); } }; Form.prototype.componentWillUnmount = function () { var _a; this.mounted = false; clearTimeout(this.timer); // this.lazyHandleChange.flush(); this.lazyEmitChange.cancel(); this.asyncCancel && this.asyncCancel(); this.disposeOnValidate && this.disposeOnValidate(); this.disposeRulesValidate && this.disposeRulesValidate(); window.removeEventListener('beforeunload', this.beforePageUnload); (_a = this.unBlockRouting) === null || _a === void 0 ? void 0 : _a.call(this); // Aug window.removeEventListener('resize', this.computeAutoLayout); }; // Aug 计算自适应布局 Form.prototype.computeAutoLayout = function () { var _a = this.props, autoLayout = _a.autoLayout, ns = _a.classPrefix, mode = _a.mode, useMobileUI = _a.useMobileUI; if (!autoLayout) { return; } var count; if (useMobileUI && (0, helper_1.isMobile)()) { // 移动端布局总是一列 ,赋值0或者1其实都可以 count = 0; } else { var wrapperWidth = this.contentRef.current.offsetWidth; // 水平模式下 label跟input一行,宽度给大一点 var itemWidth = mode === 'horizontal' ? 320 : 260; count = Math.floor(wrapperWidth / itemWidth); } if (count !== this.state.autoColumnCount) { this.setState({ autoColumnCount: count }); } }; Form.prototype.blockRouting = function () { var store = this.props.store; var _a = this.props, promptPageLeaveMessage = _a.promptPageLeaveMessage, promptPageLeave = _a.promptPageLeave; if (promptPageLeave && store.modified) { return promptPageLeaveMessage || '新的修改没有保存,确认要离开?'; } }; Form.prototype.beforePageUnload = function (e) { var blocked = this.blockRouting(); if (blocked) { e.preventDefault(); e.returnValue = ''; } }; Form.prototype.onInit = function () { return (0, tslib_1.__awaiter)(this, void 0, void 0, function () { var _a, onInit, store, persistData, submitOnInit, advancedFilterVisible, data, initedAt, hooks; return (0, tslib_1.__generator)(this, function (_b) { switch (_b.label) { case 0: _a = this.props, onInit = _a.onInit, store = _a.store, persistData = _a.persistData, submitOnInit = _a.submitOnInit, advancedFilterVisible = _a.advancedFilterVisible; if (!(0, mobx_state_tree_1.isAlive)(store)) { return [2 /*return*/]; } data = (0, helper_1.cloneObject)(store.data); initedAt = store.initedAt; store.setInited(true); hooks = this.hooks['init'] || []; return [4 /*yield*/, Promise.all(hooks.map(function (hook) { return hook(data); }))]; case 1: _b.sent(); if (!(0, mobx_state_tree_1.isAlive)(store)) { return [2 /*return*/]; } if (store.initedAt !== initedAt) { // 说明,之前的数据已经失效了。 // 比如 combo 一开始设置了初始值,然后 form 的 initApi 又返回了新的值。 // 这个时候 store 的数据应该已经 init 了新的值。但是 data 还是老的,这个时候 // onInit 出去就是错误的。 data = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, data), store.data); } persistData && store.getLocalPersistData(); //处理高级查询初始化的时候就查询一次 !advancedFilterVisible && onInit && onInit(data, this.props, true); this.is_edit = false; // Jay submitOnInit && this.handleAction(undefined, { type: 'submit' }, store.data); return [2 /*return*/]; } }); }); }; Form.prototype.reload = function (subPath, query, ctx, silent) { var _a; var _this = this; if (query) { return this.receive(query); } var _b = this.props, store = _b.store, initApi = _b.initApi, initAsyncApi = _b.initAsyncApi, initFinishedField = _b.initFinishedField, _c = _b.messages, fetchSuccess = _c.fetchSuccess, fetchFailed = _c.fetchFailed; (0, api_1.isEffectiveApi)(initAsyncApi, store.data) && store.updateData((_a = {}, _a[initFinishedField || 'finished'] = false, _a)); (0, api_1.isEffectiveApi)(initApi, store.data) ? store .fetchInitData(initApi, store.data, { successMessage: fetchSuccess, errorMessage: fetchFailed, silent: silent, onSuccess: function () { if (!(0, api_1.isEffectiveApi)(initAsyncApi, store.data) || store.data[initFinishedField || 'finished']) { return; } return (0, helper_1.until)(function () { return store.checkRemote(initAsyncApi, store.data); }, function (ret) { return ret && ret[initFinishedField || 'finished']; }, function (cancel) { return (_this.asyncCancel = cancel); }); } }) .then(function (result) { if (result === null || result === void 0 ? void 0 : result.ok) { _this.initInterval(result); store.reset(undefined, false); } }) : store.reset(undefined, false); }; Form.prototype.receive = function (values) { var store = this.props.store; // Jay this.received = true; store.updateData(values, store.data); this.reload(); }; Form.prototype.silentReload = function (target, query) { this.reload(target, query, undefined, true); }; Form.prototype.initInterval = function (value) { var _a = this.props, interval = _a.interval, silentPolling = _a.silentPolling, stopAutoRefreshWhen = _a.stopAutoRefreshWhen, data = _a.data; clearTimeout(this.timer); interval && this.mounted && (!stopAutoRefreshWhen || !(0, tpl_1.evalExpression)(stopAutoRefreshWhen, data)) && (this.timer = setTimeout(silentPolling ? this.silentReload : this.reload, Math.max(interval, 1000))); return value; }; Form.prototype.isValidated = function () { return this.props.store.validated; }; Form.prototype.validate = function (forceValidate) { var store = this.props.store; this.flush(); return store.validate(this.hooks['validate'] || [], forceValidate); }; Form.prototype.clearErrors = function () { var store = this.props.store; return store.clearErrors(); }; Form.prototype.getValues = function () { var store = this.props.store; this.flush(); return store.data; }; Form.prototype.setValues = function (value) { var store = this.props.store; this.flush(); store.setValues(value); }; Form.prototype.submit = function (fn) { var _a = this.props, store = _a.store, messages = _a.messages, __ = _a.translate; this.flush(); return store.submit(fn, this.hooks['validate'] || [], __(messages && messages.validateFailed)); }; // 如果开启了 lazyChange,需要一个 flush 方法把队列中值应用上。 Form.prototype.flush = function () { var hooks = this.hooks['flush'] || []; hooks.forEach(function (fn) { return fn(); }); this.lazyEmitChange.flush(); }; Form.prototype.reset = function () { var _a = this.props, store = _a.store, onReset = _a.onReset; store.reset(onReset); }; Form.prototype.addHook = function (fn, type) { var _this = this; if (type === void 0) { type = 'validate'; } this.hooks[type] = this.hooks[type] || []; this.hooks[type].push(type === 'flush' ? fn : (0, helper_1.promisify)(fn)); return function () { _this.removeHook(fn, type); fn = helper_1.noop; }; }; Form.prototype.removeHook = function (fn, type) { if (type === void 0) { type = 'validate'; } var hooks = this.hooks[type]; if (!hooks) { return; } for (var i = 0, len = hooks.length; i < len; i++) { var hook = hooks[i]; if (hook === fn || hook.raw === fn) { hooks.splice(i, 1); len--; i--; } } }; // Jay // input-table组件增删改时的处理函数 // 传递:form->wrapControl->input-table // exec:是否执行 Form.prototype.handleInputTableChange = function (value, name) { var store = this.props.store; store.changeInputTableValue(value, name); }; // Jay Form.prototype.abandonFormItem = function (value, name) { var store = this.props.store; store.abandonFormItem(value, name); }; // Jay Form.prototype.setEdited = function () { this.is_edit = true; }; // Jay Form.prototype.setFormLoading = function (loading) { var store = this.props.store; store.markFetching(loading); }; Form.prototype.handleChange = function (value, name, submit, changePristine, type) { var _a; if (changePristine === void 0) { changePristine = false; } var _b = this.props, store = _b.store, formLazyChange = _b.formLazyChange, handleFilterOptions = _b.handleFilterOptions, handleSaveData = _b.handleSaveData; if (typeof name !== 'string') { return; } store.changeValue(name, value, changePristine); handleFilterOptions && (handleFilterOptions === null || handleFilterOptions === void 0 ? void 0 : handleFilterOptions(store.data)); if (store.items) { store.items.forEach(function (item) { if (item.name == name && item.options && item.options.length) { handleSaveData && (handleSaveData === null || handleSaveData === void 0 ? void 0 : handleSaveData(name, item.options)); } }); } // 首次初始化:componentDidmount将is_edit置为false // 再次点击编辑:富文本插件会触发一次onChange,在componentDidMount之后触发 // 富文本内进行了处理 ---> Tinymce组件 // 数据被修改,直接将标识符设为true if (!this.is_edit) { this.is_edit = true; } if (!changePristine) { if (!this.valueChanged) this.valueChanged = true; if (this.props.api && !((_a = this.changeFields) === null || _a === void 0 ? void 0 : _a.includes(name))) { this.changeFields = (0, tslib_1.__spreadArray)((0, tslib_1.__spreadArray)([], this.changeFields, true), [name], false); } (formLazyChange === false ? this.emitChange : this.lazyEmitChange)(submit); } if (store.persistData && store.inited) { store.setLocalPersistData(); } }; Form.prototype.emitChange = function (submit) { var _a = this.props, onChange = _a.onChange, store = _a.store, submitOnChange = _a.submitOnChange; if (!(0, mobx_state_tree_1.isAlive)(store)) { return; } onChange && onChange(store.data, (0, helper_1.difference)(store.data, store.pristine), this.props); store.clearRestError(); (submit || (submitOnChange && store.inited)) && this.handleAction(undefined, { type: 'submit' }, store.data); }; Form.prototype.handleBulkChange = function (values, submit, is_mount) { var _a = this.props, onChange = _a.onChange, store = _a.store, formLazyChange = _a.formLazyChange; store.updateData(values); store.items.forEach(function (formItem) { var updatedValue = (0, helper_1.getVariable)(values, formItem.name, false); if (updatedValue !== undefined) { // 更新验证状态但保留错误信息 formItem.reset(true); // 这里需要更新value,否则提交时不会使用新的字段值校验 formItem.changeTmpValue(updatedValue); formItem.validateOnChange && formItem.validate(values); } }); // 数据被修改,将标识符设为true this.is_edit = true; if (is_mount) { this.is_edit = false; } (formLazyChange === false ? this.emitChange : this.lazyEmitChange)(submit); }; Form.prototype.handleFormSubmit = function (e) { var preventEnterSubmit = this.props.preventEnterSubmit; e.preventDefault(); if (preventEnterSubmit) { return false; } return this.handleAction(e, { type: 'submit' }, this.props.store.data); }; //判断是否提交数据 Form.prototype.shouldCommit = function (action) { var _a, _b; /** * @author:Chencicsy * @description:控制当数据未修改时不进行api请求 * @param:preventModifySubmit,is_edit **/ var _c = this.props, store = _c.store, onFinished = _c.onFinished, env = _c.env, onReset = _c.onReset; if (action.redirect) { var redirect = action.redirect && (0, tpl_1.filter)(action.redirect, store.data); redirect && env.jumpTo(redirect, action); } else if (action.reload) { this.reloadTarget(action.reload, store.data); } action.close && this.closeTarget(action.close); action.close && ((_b = (_a = this.props).onDialogClose) === null || _b === void 0 ? void 0 : _b.call(_a)); onFinished(store.data, action); store.reset(onReset); msgsub_1.default._warning('未修改数据', env === null || env === void 0 ? void 0 : env.getModalContainer); }; Form.prototype.handleAction = function (e, action, data, throwErrors, delegate) { var _this = this; var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m; if (throwErrors === void 0) { throwErrors = false; } var _o = this.props, store = _o.store, onSubmit = _o.onSubmit, api = _o.api, asyncApi = _o.asyncApi, finishedField = _o.finishedField, checkInterval = _o.checkInterval, _p = _o.messages, saveSuccess = _p.saveSuccess, saveFailed = _p.saveFailed, resetAfterSubmit = _o.resetAfterSubmit, clearAfterSubmit = _o.clearAfterSubmit, onAction = _o.onAction, onSaved = _o.onSaved, onReset = _o.onReset, onFinished = _o.onFinished, onFailed = _o.onFailed, redirect = _o.redirect, reload = _o.reload, target = _o.target, env = _o.env, onChange = _o.onChange, clearPersistDataAfterSubmit = _o.clearPersistDataAfterSubmit, trimValues = _o.trimValues, __ = _o.translate, preventModifySubmit = _o.preventModifySubmit; // 做动作之前,先把数据同步一下。 this.flush(); if (trimValues) { store.trimValues(); } // 如果 data 就是当前层,则 flush 一下。 if (data === this.props.data) { data = store.data; } if (Array.isArray(action.required) && action.required.length) { return store.validateFields(action.required).then(function (result) { if (!result) { env.notify('error', __('Form.validateFailed')); } else { _this.handleAction(e, (0, tslib_1.__assign)((0, tslib_1.__assign)({}, action), { required: undefined }), data, throwErrors, delegate); } }); } if (action.type === 'submit' || action.actionType === 'submit' || action.actionType === 'confirm' || action.actionType === 'reset-and-submit' || action.actionType === 'clear-and-submit') { store.setCurrentAction(action); (_b = (_a = this.props).handleReset) === null || _b === void 0 ? void 0 : _b.call(_a); if (action.actionType === 'reset-and-submit') { store.reset(onReset); } else if (action.actionType === 'clear-and-submit') { store.clear(onReset); } if (action.actionType == "flow_save_drat") { store.updateData({ FLOW_SAVE_DRAT_VALUE: 1 }); } return this.submit(function (values) { return (0, tslib_1.__awaiter)(_this, void 0, void 0, function () { var data_1, finnalAsyncApi_1; var _a; var _this = this; var _b; return (0, tslib_1.__generator)(this, function (_c) { if (onSubmit && onSubmit(values, action) === false) { return [2 /*return*/, Promise.resolve(false)]; } if (preventModifySubmit && !this.is_edit && !this.valueChanged) { this.shouldCommit(action); return [2 /*return*/]; } if (target) { this.submitToTarget(target, values); } else if (action.actionType === 'reload') { action.target && this.reloadTarget(action.target, values); } else if (action.actionType === 'dialog') { store.openDialog(data); } else if (action.actionType === 'drawer') { store.openDrawer(data); } else if ((0, api_1.isEffectiveApi)(action.api || api, values)) { data_1 = Object.assign(values, store.hiddenIputTable, store.inputTableData, { changeFields: (_b = this.changeFields) === null || _b === void 0 ? void 0 : _b.join() }); finnalAsyncApi_1 = action.asyncApi || asyncApi; (0, api_1.isEffectiveApi)(finnalAsyncApi_1, store.data) && store.updateData((_a = {}, _a[finishedField || 'finished'] = false, _a)); return [2 /*return*/, store .saveRemote(action.api || api, data_1, { successMessage: saveSuccess, errorMessage: saveFailed, onSuccess: function () { if (!(0, api_1.isEffectiveApi)(finnalAsyncApi_1, store.data) || store.data[finishedField || 'finished']) { return; } return (0, helper_1.until)(function () { return store.checkRemote(finnalAsyncApi_1, store.data); }, function (ret) { return ret && ret[finishedField || 'finished']; }, function (cancel) { return (_this.asyncCancel = cancel); }, checkInterval); } }) .then(function (response) { return (0, tslib_1.__awaiter)(_this, void 0, void 0, function () { var feedback, _data, scanAfterDo, key, element, cmd, printBody, baseUrl, labelTemplate, templateDatas, portBody, body, confirmed; var _a, _b, _c; return (0, tslib_1.__generator)(this, function (_d) { switch (_d.label) { case 0: onSaved && onSaved(values, response); feedback = action.feedback || this.props.feedback; _data = (0, amis_formula_1.createObject)(data_1, response); // if ((_data as any)?.status === 10003) { // handleActionCallback_10003(_data, store, this.handleAction, () => { action.close && this.closeTarget(action.close) }, false, env) // return; // } if (((_a = _data) === null || _a === void 0 ? void 0 : _a.status) === 20003) { scanAfterDo = _data.scanAfterDo; for (key in scanAfterDo) { if (Object.prototype.hasOwnProperty.call(scanAfterDo, key)) { element = scanAfterDo[key]; cmd = element.cmd; switch (cmd) { case 'STEP_PRINT_LABEL': printBody = element.body; baseUrl = process.env.NODE_ENV === 'production' ? (_c = (_b = env.axiosInstance) === null || _b === void 0 ? void 0 : _b.defaults) === null || _c === void 0 ? void 0 : _c.baseURL : 'https://saasdev.fastlion.cn/saas'; labelTemplate = (0, util_1.buildLabelTemplate)(printBody.labelTemplate.tempContent); templateDatas = (0, util_1.setLabelTemplateData)(labelTemplate, printBody.labelData, baseUrl); (0, print_1.labelPrint)({ templateDatas: templateDatas, marginTop: 0, marginLeft: 0, pageWidth: 210, pageHeight: 297, direction: true, preview: false, printer: printBody.labelPrinter, count: 1 }); break; case 'STEP_PORT': portBody = element.body; (0, ExpressPrint_1.expressLabels)(portBody, env.fetcher, this.props.translate, false); break; case 'STEP_SHOW': body = element.body; env.alert(body.message); break; default: break; } } } } if (!(feedback && (0, helper_1.isVisible)(feedback, store.data))) return [3 /*break*/, 2]; return [4 /*yield*/, this.openFeedback(feedback, store.data)]; case 1: confirmed = _d.sent(); // 如果 feedback 配置了,取消就跳过原有逻辑。 if (feedback.skipRestOnCancel && !confirmed) { throw new helper_1.SkipOperation(); } else if (feedback.skipRestOnConfirm && confirmed) { throw new helper_1.SkipOperation(); } _d.label = 2; case 2: return [2 /*return*/]; } }); }); })]; } return [2 /*return*/, Promise.resolve(null)]; }); }); }) .then(function (values) { // 有可能 onSubmit return false 了,那么后面的就不应该再执行了。 if (values === false) { return store.data; } if (onFinished && onFinished(values, action) === false) { return values; } resetAfterSubmit && store.reset(onReset); clearAfterSubmit && store.clear(onReset); clearPersistDataAfterSubmit && store.clearLocalPersistData(); if (action.redirect || redirect) { var finalRedirect = (0, tpl_1.filter)(action.redirect || redirect, store.data); finalRedirect && env.jumpTo(finalRedirect, action); } else if (action.reload || reload) { _this.reloadTarget(action.reload || reload, store.data); } action.close && _this.closeTarget(action.close); return values; }) .catch(function (reason) { if (reason instanceof helper_1.SkipOperation) { return; } onFailed && onFailed(reason, store.errors); if (throwErrors) { throw reason; } }); } else if (action.type === 'reset' || action.actionType === 'reset') { (_d = (_c = this.props).handledelVisible) === null || _d === void 0 ? void 0 : _d.call(_c, undefined, true); store.setCurrentAction(action); store.reset(onReset); (_f = (_e = this.props).handleFilterOptions) === null || _f === void 0 ? void 0 : _f.call(_e, store.data); (_h = (_g = this.props).handleReset) === null || _h === void 0 ? void 0 : _h.call(_g); } else if (action.actionType === 'clear') { store.setCurrentAction(action); store.clear(onReset); } else if (action.actionType === 'dialog') { store.setCurrentAction(action); store.openDialog(data); } else if (action.actionType === 'drawer') { store.setCurrentAction(action); store.openDrawer(data); } else if (action.actionType === 'ajax') { store.setCurrentAction(action); if (!(0, api_1.isEffectiveApi)(action.api)) { return env.alert(__("\u5F53 actionType \u4E3A ajax \u65F6\uFF0C\u8BF7\u8BBE\u7F6E api \u5C5E\u6027")); } if (preventModifySubmit && !this.is_edit && !this.valueChanged) { return this.shouldCommit(action); } return store .saveRemote(action.api, data, { successMessage: __((action.messages && action.messages.success) || saveSuccess), errorMessage: __((action.messages && action.messages.failed) || saveFailed) }) .then(function (response) { return (0, tslib_1.__awaiter)(_this, void 0, void 0, function () { var _data, redirect; var _a, _b; return (0, tslib_1.__generator)(this, function (_c) { switch (_c.label) { case 0: response && onChange && onChange(store.data, (0, helper_1.difference)(store.data, store.pristine), this.props); _data = (0, amis_formula_1.createObject)(data, response); if (!store.validated) return [3 /*break*/, 2]; return [4 /*yield*/, this.validate(true)]; case 1: _c.sent(); _c.label = 2; case 2: if (!(action.feedback && (0, helper_1.isVisible)(action.feedback, store.data))) return [3 /*break*/, 4]; return [4 /*yield*/, this.openFeedback(action.feedback, store.data)]; case 3: _c.sent(); _c.label = 4; case 4: redirect = action.redirect && (0, tpl_1.filter)(action.redirect, store.data); redirect && env.jumpTo(redirect, action); action.reload && this.reloadTarget(action.reload, store.data); action.close && this.closeTarget(action.close); // Jay // ajax类型支持关闭dialog action.close && ((_b = (_a = this.props).onDialogClose) === null || _b === void 0 ? void 0 : _b.call(_a)); return [2 /*return*/]; } }); }); }) .catch(function (e) { onFailed && onFailed(e, store.errors); if (throwErrors) { throw e; } }); } else if (action.actionType === 'reload') { store.setCurrentAction(action); if (action.target) { this.reloadTarget(action.target, data); } else { // 刷自己 this.receive(data); } // action.target && this.reloadTarget(action.target, data); } else if (action.actionType === 'advanced-filter') { (_k = (_j = this.props).handleFilterOptions) === null || _k === void 0 ? void 0 : _k.call(_j, store.data); // 高级查询 (_m = (_l = this.props).handleFilterAdvanced) === null || _m === void 0 ? void 0 : _m.call(_l); } else if (onAction) { // 不识别的丢给上层去处理。 return onAction(e, action, data, throwErrors, delegate || this.context); } }; Form.prototype.handleQuery = function (query) { var _a, _b; if (this.props.initApi) { this.receive(query); } else { (_b = (_a = this.props).onQuery) === null || _b === void 0 ? void 0 : _b.call(_a, query); } }; Form.prototype.handleDialogConfirm = function (values, action, ctx, targets) { var _a = this.props, store = _a.store, onChange = _a.onChange; if ((action.mergeData || store.action.mergeData) && values.length === 1 && values[0] && targets[0].props.type === 'form') { this.handleBulkChange(values[0], false); } store.closeDialog(true); }; Form.prototype.handleDialogClose = function (confirmed) { if (confirmed === void 0) { confirmed = false; } var store = this.props.store; store.closeDialog(confirmed); }; Form.prototype.handleDrawerConfirm = function (values, action, ctx, targets) { var _a = this.props, store = _a.store, onChange = _a.onChange; if ((action.mergeData || store.action.mergeData) && values.length === 1 && values[0] && targets[0].props.type === 'form') { store.updateData(values[0]); onChange && onChange(store.data, (0, helper_1.difference)(store.data, store.pristine), this.props); } store.closeDrawer(true); }; Form.prototype.handleDrawerClose = function () { var store = this.props.store; store.closeDrawer(false); }; Form.prototype.submitToTarget = function (target, values) { // 会被覆写 }; Form.prototype.reloadTarget = function (target, data) { // 会被覆写 }; Form.prototype.closeTarget = function (target) { // 会被覆写 }; Form.prototype.openFeedback = function (dialog, ctx) { var _this = this; return new Promise(function (resolve) { var store = _this.props.store; store.setCurrentAction({ type: 'button', actionType: 'dialog', dialog: dialog }); store.openDialog(ctx, undefined, function (confirmed) { resolve(confirmed); }); }); }; Form.prototype.buildActions = function () { var _a = this.props, actions = _a.actions, submitText = _a.submitText, body = _a.body, __ = _a.translate; if (typeof actions !== 'undefined' || !submitText || (Array.isArray(body) && body.some(function (item) { var _a, _b, _c, _d, _e;