fastlion-amis
Version:
一种MIS页面生成工具
974 lines (973 loc) • 94.4 kB
JavaScript
"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;