fastlion-amis
Version:
一种MIS页面生成工具
902 lines • 155 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 types_1 = require("../../types");
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 amis_formula_1 = require("amis-formula");
// import Checkbox from '../../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 antd_1 = require("antd");
var divider_1 = (0, tslib_1.__importDefault)(require("antd/lib/divider"));
var lodash_1 = require("lodash");
var AdvancedModlePopup_1 = (0, tslib_1.__importDefault)(require("../../components/Lion/AdvancedModlePopup"));
var icons_1 = require("../../components/icons");
var utils_1 = require("../Lion/utils/utils");
var ScrollMB_1 = (0, tslib_1.__importDefault)(require("../../components/ScrollMB"));
var LabelPrint_1 = require("../Lion/LabelPrint");
var LodopFuncs_1 = require("../../utils/print/LodopFuncs");
var Workflow_1 = (0, tslib_1.__importDefault)(require("../../components/Mobileprocess/Workflow"));
var locale_1 = require("../../locale");
var keyStep_1 = require("../../utils/keyStep");
var CrudFilter_1 = (0, tslib_1.__importDefault)(require("../../components/Lion/CrudFilter"));
var icons_2 = require("@ant-design/icons");
var sortablejs_1 = (0, tslib_1.__importDefault)(require("sortablejs"));
/**
* 枚举 RangeOptionsEnum 用于表示范围选项
*/
var RangeOptionsEnum;
(function (RangeOptionsEnum) {
RangeOptionsEnum[RangeOptionsEnum["Equal"] = 2] = "Equal";
RangeOptionsEnum[RangeOptionsEnum["GreaterThan"] = 3] = "GreaterThan";
RangeOptionsEnum[RangeOptionsEnum["GreaterThanOrEqual"] = 4] = "GreaterThanOrEqual";
RangeOptionsEnum[RangeOptionsEnum["LessThan"] = 5] = "LessThan";
RangeOptionsEnum[RangeOptionsEnum["LessThanOrEqual"] = 6] = "LessThanOrEqual";
RangeOptionsEnum[RangeOptionsEnum["Between"] = 7] = "Between";
RangeOptionsEnum[RangeOptionsEnum["ContainWithin"] = 8] = "ContainWithin";
RangeOptionsEnum[RangeOptionsEnum["Contain"] = 9] = "Contain";
RangeOptionsEnum[RangeOptionsEnum["IsEmpty"] = 10] = "IsEmpty";
RangeOptionsEnum[RangeOptionsEnum["Fuzzy"] = 11] = "Fuzzy";
RangeOptionsEnum[RangeOptionsEnum["DataTag"] = 12] = "DataTag"; // 数据标签
})(RangeOptionsEnum || (RangeOptionsEnum = {}));
var rangeOptions = [
{ label: '等于', value: RangeOptionsEnum.Equal },
{ label: '大于', value: RangeOptionsEnum.GreaterThan },
{ label: '大于等于', value: RangeOptionsEnum.GreaterThanOrEqual },
{ label: '小于', value: RangeOptionsEnum.LessThan },
{ label: '小于等于', value: RangeOptionsEnum.LessThanOrEqual },
{ label: '介于', value: RangeOptionsEnum.Between },
{ label: '包含于', value: RangeOptionsEnum.ContainWithin },
{ label: '包含', value: RangeOptionsEnum.Contain },
{ label: '为空', value: RangeOptionsEnum.IsEmpty },
{ label: '模糊', value: RangeOptionsEnum.Fuzzy },
{ label: '不等于', value: RangeOptionsEnum.Equal, not: true },
{ label: '不大于', value: RangeOptionsEnum.GreaterThan, not: true },
{ label: '不大于等于', value: RangeOptionsEnum.GreaterThanOrEqual, not: true },
{ label: '不小于', value: RangeOptionsEnum.LessThan, not: true },
{ label: '不小于等于', value: RangeOptionsEnum.LessThanOrEqual, not: true },
{ label: '不介于', value: RangeOptionsEnum.Between, not: true },
{ label: '不包含于', value: RangeOptionsEnum.ContainWithin, not: true },
{ label: '不包含', value: RangeOptionsEnum.Contain, not: true },
{ label: '不为空', value: RangeOptionsEnum.IsEmpty, not: true },
{ label: '不模糊', value: RangeOptionsEnum.Fuzzy, not: true },
{ label: '属于标签', value: RangeOptionsEnum.DataTag }
];
// onlyEmptyRangeOptions 数组映射
var onlyEmptyRangeOptions = [
{ label: '为空', value: RangeOptionsEnum.IsEmpty },
];
// 类型枚举类
var TagTypeEnum;
(function (TagTypeEnum) {
TagTypeEnum["Select"] = "select";
TagTypeEnum["TreeSelect"] = "tree-select";
TagTypeEnum["TransferPicker"] = "transfer-picker";
TagTypeEnum["TabsTransferPicker"] = "tabs-transfer-picker";
TagTypeEnum["InputDateRange"] = "input-date-range";
TagTypeEnum["InputDatetimeRange"] = "input-datetime-range";
TagTypeEnum["InputMonthRange"] = "input-month-range";
TagTypeEnum["InputYearRange"] = "input-year-range";
TagTypeEnum["InputQuarterRange"] = "input-quarter-range";
TagTypeEnum["InputTimeRange"] = "input-time-range";
TagTypeEnum["InputTag"] = "input-tag";
TagTypeEnum["NestedSelect"] = "nested-select";
TagTypeEnum["InputNumber"] = "input-number";
TagTypeEnum["InputText"] = "input-text";
TagTypeEnum["InputDatetime"] = "input-datetime";
TagTypeEnum["InputDate"] = "input-date";
TagTypeEnum["InputMonth"] = "input-month";
TagTypeEnum["file"] = "lion-upload";
TagTypeEnum["Picker"] = "picker";
TagTypeEnum["Switch"] = "switch";
TagTypeEnum["Checkboxes"] = "checkboxes"; //复选按钮
})(TagTypeEnum || (TagTypeEnum = {}));
var notRange = [
// TagTypeEnum.Select,
TagTypeEnum.TreeSelect,
// TagTypeEnum.TransferPicker,
TagTypeEnum.TabsTransferPicker,
TagTypeEnum.InputDateRange,
TagTypeEnum.InputDatetimeRange,
TagTypeEnum.InputMonthRange,
TagTypeEnum.InputYearRange,
TagTypeEnum.InputQuarterRange,
TagTypeEnum.InputTimeRange,
TagTypeEnum.InputTag,
TagTypeEnum.NestedSelect,
TagTypeEnum.Switch
];
var Form = /** @class */ (function (_super) {
(0, tslib_1.__extends)(Form, _super);
function Form(props) {
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
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.casestatr = true;
_this.limitInputRef = react_1.default.createRef();
_this.valueChanged = false;
_this.handleInputFocus = function () {
_this.setState({ inputfocus: false });
};
_this.hanldeAdvancedQueryDefault = function () {
var _a, _b, _c, _d, _e, _f;
var filtersArr = [];
var filtersHeader = [];
if ((_a = _this.filterOptions) === null || _a === void 0 ? void 0 : _a.length) {
filtersArr = _this.getDefaultFilterArrs();
}
if ((_b = _this.filterNorma) === null || _b === void 0 ? void 0 : _b.length) {
filtersHeader = _this.filterNorma;
}
if (((_c = _this.props) === null || _c === void 0 ? void 0 : _c.filtercont) && Object.keys(_this.props.filtercont).length) {
var _g = _this.props, advancedFilter = _g.advancedFilter, handlePrefix = _g.handlePrefix, store_1 = _g.store, body_1 = _g.body;
var conten = handlePrefix === null || handlePrefix === void 0 ? void 0 : handlePrefix(_this.props.filtercont);
var prefix = conten ? (0, tslib_1.__spreadArray)((0, tslib_1.__spreadArray)([], conten === null || conten === void 0 ? void 0 : conten.advancedFilter, true), conten === null || conten === void 0 ? void 0 : conten.advancedFilterSub, true) : [];
var defaultHeader = [];
var defaultFilterArr = [];
if (conten === null || conten === void 0 ? void 0 : conten.advancedHeader) {
defaultHeader = Object.entries(conten === null || conten === void 0 ? void 0 : conten.advancedHeader).map(function (_a) {
var key = _a[0], value = _a[1];
return ({ key: key, value: value });
});
}
if (advancedFilter && ((_d = _this.filterOptions) === null || _d === void 0 ? void 0 : _d.length) && prefix.length) {
defaultFilterArr = prefix;
var newList_1 = [];
prefix.forEach(function (item) {
newList_1.push({
field: item.field,
condition: item.condition,
not: item.not,
op: item.op,
dateLine: item.dateLine
});
if (item.field.includes('--')) {
var originField = item.field.split('--')[0];
_this.dealFilterOptions(originField, item.field);
}
});
var dateList = _this.getDateArr();
var dateLineItem = newList_1.find(function (item) { return item.dateLine; });
filtersArr = dateList.length > 0 && !dateLineItem ? (0, tslib_1.__spreadArray)([
{
field: dateList[0].name,
condition: 1,
not: false,
op: 7,
dateLine: true
}
], newList_1, true) : (0, tslib_1.__spreadArray)([], newList_1, true);
_this.casestatr = ((_e = prefix === null || prefix === void 0 ? void 0 : prefix[0]) === null || _e === void 0 ? void 0 : _e.caseSensitive) == 0 ? false : true;
}
// 高级查询默认值
if (defaultFilterArr.length) {
var filter_1 = (_f = advancedFilter === null || advancedFilter === void 0 ? void 0 : advancedFilter.body) === null || _f === void 0 ? void 0 : _f.find(function (item) { return item.name == "advancedFilter"; });
defaultFilterArr.map(function (item, key) {
var _a, _b, _c, _d;
var isTime = false;
if (filter_1) {
var data_1 = (_a = filter_1.body) === null || _a === void 0 ? void 0 : _a.find(function (data) { return data.name == (item === null || item === void 0 ? void 0 : item.field); });
if (data_1 && [TagTypeEnum.InputDatetime, TagTypeEnum.InputDate, TagTypeEnum.InputMonth].some(function (item) { return item == (data_1 === null || data_1 === void 0 ? void 0 : data_1.type); })) {
isTime = true;
}
else {
isTime = false;
}
}
var values = item === null || item === void 0 ? void 0 : item.values;
var compareField = (0, lodash_1.cloneDeep)(item.compareField);
if (values && typeof values == 'string' && values.includes('(') && values.includes(')') && compareField) {
var columns_1 = (_d = (_c = (_b = body_1) === null || _b === void 0 ? void 0 : _b.find(function (item) { return item.name == 'advancedFilter'; })) === null || _c === void 0 ? void 0 : _c.body) !== null && _d !== void 0 ? _d : [];
var result_1 = values.substring(1, values.length - 1);
compareField.forEach(function (item) {
var match = item;
var regex = new RegExp(match, 'g');
// advancedFilter 默认值设置完善
var content = columns_1.find(function (item) { return item.name == "advancedFilter." + match || item.name == "advancedFilterSub." + match; });
if (content) {
result_1 = result_1.replace(regex, "[" + content.label + "]");
}
});
if (!!result_1) {
filtersArr[key].compareField = compareField;
store_1.changeValue(item.field, result_1, false);
}
}
else {
if (item.op == 7 && (item === null || item === void 0 ? void 0 : item.values) && !isTime) {
var between = (item === null || item === void 0 ? void 0 : item.values).split(",");
if (between.length == 2) {
between.forEach(function (val, index) {
if (index == 0) {
store_1.changeValue(item.field + '-a8', val, false);
}
else {
store_1.changeValue(item.field + '-b8', val, false);
}
});
return;
}
}
store_1.changeValue(item.field, item === null || item === void 0 ? void 0 : item.values, false);
}
});
}
// 高级查询默认值高级查询默认值中的advancedHeader
if (defaultHeader.length) {
defaultHeader.map(function (item) {
store_1.changeValue(item.key, item === null || item === void 0 ? void 0 : item.value, false);
});
}
_this.setState({ filtersHeader: filtersHeader, defaultHeader: defaultHeader, defaultFilterArr: defaultFilterArr, filtersArr: filtersArr });
}
else {
_this.setState({ filtersArr: filtersArr, filtersHeader: filtersHeader });
}
};
_this.handleJump = function (body) {
var _a;
if (body.redirectType === '2') {
_this.props.env.fetcher(body.linkUrl, body.bodydata).then(function (res) {
if (res.ok && res.data != null) {
_this.flowDetail = res.data;
_this.setState({ flowModalVisible: true });
}
else {
antd_1.message.error(res.msg);
}
});
return;
}
var types = (0, helper_1.isMobile)() ? 'drawer' : 'dialog';
var action = {
type: "action",
actionType: types,
close: true
};
action[types] = {
title: body.linkTitle,
type: types,
name: "form-dialog-service-" + (0, utils_1.createRandomValue)(),
size: (_a = body.linkSize) !== null && _a !== void 0 ? _a : 'lg',
bodyClassName: "overflow-y-auto max-h-nestSide-" + types,
className: "h-full",
actions: [],
body: {
schemaApi: {
"method": "get",
"url": body.linkUrl
},
type: "service",
name: "form-service-" + (0, utils_1.createRandomValue)()
}
};
_this.handleAction(_this.props.e, action, body.bodydata);
};
//处理高级查询对应的下拉选择列表,允许字段重复出现,需要构造key
_this.dealFilterOptions = function (value, createName) {
var origin = _this.filterObj[value];
_this.filterObj[createName] = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, origin), { name: createName });
if (!_this.filterOptions.find(function (item) { return item.value === createName; })) {
_this.filterOptions.push({ label: (origin.groupName ? origin.groupName + " \u00B7 " : '') + (origin.label || origin.placeholder), value: createName, type: origin.type, isNumber: origin.isNumber || null });
}
};
_this.changePare = function (value, index) {
var filtersArr = _this.state.filtersArr;
filtersArr[index].compareField = value;
_this.setState({ filtersArr: filtersArr });
};
_this.selectEmptyTime = function (index) {
var filtersArr = _this.state.filtersArr;
var store = _this.props.store;
store.changeValue(filtersArr[index].field, '', false);
filtersArr[index].op = 2;
_this.setState({ filtersArr: filtersArr, emptyTimeSelected: true });
};
_this.getDateArr = function () {
var _a;
var _b = _this.props, body = _b.body, advancedQueryFields = _b.advancedQueryFields;
var filters = Array.isArray(body) ? body : body
? [body] : [];
var adv = (_a = filters.find(function (item) { return item.name === 'advancedFilter'; })) === null || _a === void 0 ? void 0 : _a.body;
if (adv === null || adv === void 0 ? void 0 : adv.length) {
var list = adv.filter(function (item) { return item.type && ['input-date', 'input-datetime', 'input-time', 'input-month', 'input-quarter', 'input-year'].includes(item.type); });
if (advancedQueryFields) {
list = list.filter(function (item) { var _a, _b; return advancedQueryFields.includes((_b = (_a = item.name) === null || _a === void 0 ? void 0 : _a.split('.')) === null || _b === void 0 ? void 0 : _b[1]); });
}
return list;
}
return [];
};
_this.getDefaultFilterArrs = function () {
var body = _this.filterPropsArr();
var dateList = _this.getDateArr();
var defaultCondition = {
field: body[0].value,
condition: 1,
not: false,
op: 2
};
if (dateList.length > 0 && defaultCondition.field === dateList[0].name) {
_this.dealFilterOptions(defaultCondition.field, defaultCondition.field + '--1');
}
var list = dateList.length > 0 ? [
{
field: dateList[0].name,
condition: 1,
not: false,
op: 7,
dateLine: true
},
(0, tslib_1.__assign)((0, tslib_1.__assign)({}, defaultCondition), { field: defaultCondition.field === dateList[0].name ? defaultCondition.field + '--1' : defaultCondition.field })
] : [(0, tslib_1.__assign)({}, defaultCondition)];
return list;
};
_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.handleOptionTransfer = function () {
var _a;
var _b = _this.props, columns = _b.columns, filtercont = _b.filtercont;
var mobile = (0, helper_1.isMobile)();
var allFileds = (_a = columns === null || columns === void 0 ? void 0 : columns.filter(function (column) { return !(column === null || column === void 0 ? void 0 : column.hidden) && column.type !== 'operation'; }).map(function (option) { var _a, _b; return ({ type: option.type, comparable: (_a = option.comparable) !== null && _a !== void 0 ? _a : true, isNumerical: option.isNumerical, label: (option.groupName ? option.groupName + " \u00B7 " : '') + String(option.label), name: (_b = option.name) !== null && _b !== void 0 ? _b : '' }); })) !== null && _a !== void 0 ? _a : [];
return (react_1.default.createElement("div", { style: mobile ? {} : { height: _this.state.unfoldQuery ? 0 : 'auto', overflow: _this.state.unfoldQuery ? 'hidden' : 'auto' } },
react_1.default.createElement(OptionTransfer_1.default, { ref: _this.filterOptionRef, defaultOptionsParam: filtercont === null || filtercont === void 0 ? void 0 : filtercont.optionsParam, allFields: allFileds, onChange: function (data) { return _this.filterOptionData = data; } })));
};
_this.handleMenuClick = function (body) {
var _a, _b, _c;
var item = body.item;
var store = _this.props.store;
var val = item;
if (val.props) {
var name = val.props.name;
var head = name.split(".")[0];
var advancedName = name.split(".").pop();
var data = (_b = (_a = store.data) === null || _a === void 0 ? void 0 : _a[head]) !== null && _b !== void 0 ? _b : {};
var value = (_c = data === null || data === void 0 ? void 0 : data[advancedName]) !== null && _c !== void 0 ? _c : '';
var current = val.props.value;
var key = val.props.valKey;
var headPare = current.value.split(".").pop();
// 所有的条件
var selectList_1 = val.props.items;
//将字符串变成数组只有携带【】的
var valMatch = value.match(/\[([^\]]*)\]/g);
//汉字从selectList获取对应的id name获取到后面的
var valList = valMatch === null || valMatch === void 0 ? void 0 : valMatch.map(function (item) {
var labelToFind = item.substring(1, item.length - 1); // 去除方括号
var foundItem = selectList_1.find(function (obj) { return obj.label === labelToFind; });
if (foundItem) {
return foundItem.value.split(".").pop(); // 替换为匹配的value值
}
return item; // 如果没找到匹配项,则保持原值不变
});
// 要是stort中没有值就只取当前上的值
var List = valList ? (0, tslib_1.__spreadArray)((0, tslib_1.__spreadArray)([], valList, true), [headPare], false) : [headPare];
// 能一直写 而不是更新
var valueList = value + "[" + current.label + "]";
_this.changePare(List, key);
store.changeValue(name, valueList, false);
}
};
// 下拉框参数获取
_this.getDownCondition = function () {
var options = _this.filterPropsArr().map(function (item) { return ((0, tslib_1.__assign)((0, tslib_1.__assign)({}, item), { value: item.value.split('--')[0] })); });
var selectList = [];
options.forEach(function (item) {
if (!selectList.some(function (i) { return i.value === item.value; })) {
selectList.push(item);
}
});
return selectList.filter(function (val) { return (val.type && ['input-number', 'input-text', 'input-date', 'input-datetime'].includes(val.type)) || val.isNumber; });
};
//粘贴
_this.pasteContent = function (item) { return (0, tslib_1.__awaiter)(_this, void 0, void 0, function () {
var content, store, name, _a, parentName, fieldName, obj, value, error_1;
var _b, _c, _d;
return (0, tslib_1.__generator)(this, function (_e) {
switch (_e.label) {
case 0:
_e.trys.push([0, 4, , 5]);
if (!(navigator.clipboard && typeof navigator.clipboard.readText === 'function')) return [3 /*break*/, 2];
return [4 /*yield*/, navigator.clipboard.readText()];
case 1:
content = _e.sent();
if (!(0, lodash_1.isNil)(content) && content !== '') {
store = this.props.store;
name = item.field;
_a = name.split("."), parentName = _a[0], fieldName = _a[1];
obj = (_c = (_b = store.data) === null || _b === void 0 ? void 0 : _b[parentName]) !== null && _c !== void 0 ? _c : {};
value = (_d = obj === null || obj === void 0 ? void 0 : obj[fieldName]) !== null && _d !== void 0 ? _d : '';
store.changeValue(name, value + content, false);
}
return [3 /*break*/, 3];
case 2:
antd_1.message.warning('当前浏览器不支持此功能');
_e.label = 3;
case 3: return [3 /*break*/, 5];
case 4:
error_1 = _e.sent();
console.error('读取剪切板内容时发生错误:', error_1);
antd_1.message.warning('读取剪切板失败');
return [3 /*break*/, 5];
case 5: return [2 /*return*/];
}
});
}); };
_this.pullDown = function () {
var _a = _this.props, initApi = _a.initApi, store = _a.store, initAsyncApi = _a.initAsyncApi, initFinishedField = _a.initFinishedField, initCheckInterval = _a.initCheckInterval, _b = _a.messages, fetchFailed = _b.fetchFailed, fetchSuccess = _b.fetchSuccess;
return 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);
};
_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.shouldCommit = _this.shouldCommit.bind(_this);
_this.handleDialogConfirm = _this.handleDialogConfirm.bind(_this);
_this.resetIsModleFilter = _this.resetIsModleFilter.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);
_this.handleSendAction = _this.handleSendAction.bind(_this);
_this.handlerenew = _this.handlerenew.bind(_this);
_this.handleFiltersArr = _this.handleFiltersArr.bind(_this);
_this.contentRef = react_1.default.createRef();
_this.filterOptionRef = react_1.default.createRef();
if (_this.props.getAdvancedFilterForm) {
_this.getFiltersOptions();
}
_this.state = {
filtersArr: [],
defaultHeader: [],
defaultFilterArr: [],
collpased: true,
caseSensitive: _this.casestatr,
filtersHeader: [],
userChange: false,
disabled: false,
inputfocus: false,
topN: ((_h = (_g = _this.props.filtercont) === null || _g === void 0 ? void 0 : _g.limitParam) === null || _h === void 0 ? void 0 : _h.topN) || 3000,
limitStatus: ((_k = (_j = _this.props.filtercont) === null || _j === void 0 ? void 0 : _j.limitParam) === null || _k === void 0 ? void 0 : _k.limitStatus) || false,
printVisible: false,
flowModalVisible: false,
// 缓存查询条件
cacheFilterParams: [],
expanded: false,
// 选项查询默认不折叠
unfoldQuery: false,
// 条件查询折叠
unfoldParam: false
};
_this.showMoreBtn = props.maxFilterCount != undefined && (props.maxFilterCount > 0 && Array.isArray(props.body) && props.body.length - 1 > props.maxFilterCount);
_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, _d;
var _e = this.props, initApi = _e.initApi, initFetch = _e.initFetch, initFetchOn = _e.initFetchOn, initAsyncApi = _e.initAsyncApi, initOneApi = _e.initOneApi, initFinishedField = _e.initFinishedField, initCheckInterval = _e.initCheckInterval, store = _e.store, _f = _e.messages, fetchSuccess = _f.fetchSuccess, fetchFailed = _f.fetchFailed, onValidate = _e.onValidate, promptPageLeave = _e.promptPageLeave, env = _e.env, rules = _e.rules, body = _e.body, sortable = _e.sortable, crudName = _e.crudName, classPrefix = _e.classPrefix;
if (sortable && crudName) {
var labels = (_a = this.contentRef.current) === null || _a === void 0 ? void 0 : _a.querySelectorAll("." + classPrefix + "Form-label");
labels === null || labels === void 0 ? void 0 : labels.forEach(function (element) { element.setAttribute('style', 'cursor: move'); });
this.sortable = new sortablejs_1.default(this.contentRef.current, {
animation: 150,
handle: "." + classPrefix + "Form-label",
ghostClass: 'is-dragging',
onEnd: function (event) {
var nodeList = event.target.querySelectorAll('form > [data-name]');
var names = [];
nodeList.forEach(function (element) {
var name = element.getAttribute('data-name');
if (name) {
names.push(name);
}
});
if (names.length > 0) {
localStorage.setItem("filter_" + crudName, JSON.stringify(names));
}
}
});
}
if ((_b = this.props) === null || _b === void 0 ? void 0 : _b._bindRef) {
this.props._bindRef(this);
}
if (this.props.name) {
this._formName = this.props.name;
}
// 高级查询打开,查询后,在打开一个有高级查询的弹窗会找到__super下会有高级查询的东西,导致输入值会将其他的值清空掉所以先给他清空初始化一下要是找到的话
this.resetIsModleFilter();
this.hanldeAdvancedQueryDefault();
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 = (_d = (_c = env.blockRouting) === null || _c === void 0 ? void 0 : _c.call(env, this.blockRouting)) !== null && _d !== void 0 ? _d : undefined;
}
if (this.props.flowSpinning) {
this.allFromReadyInterval = setInterval(function () {
var _a, _b, _c;
var subComponents = _this.context.getAllChildrenComponets(_this).filter(function (item) { var _a; return !['dialog', 'drawer'].includes((_a = item === null || item === void 0 ? void 0 : item.props) === null || _a === void 0 ? void 0 : _a.type); });
// 所有子组件就绪状态
var allComponentsReady = !subComponents.some(function (item) { var _a; return (_a = item === null || item === void 0 ? void 0 : item.props) === null || _a === void 0 ? void 0 : _a.store.loading; });
if (allComponentsReady) {
(_b = (_a = _this.props) === null || _a === void 0 ? void 0 : _a.getSpinning) === null || _b === void 0 ? void 0 : _b.call(_a, allComponentsReady, (_c = _this.props) === null || _c === void 0 ? void 0 : _c._formName);
clearInterval(_this.allFromReadyInterval);
}
}, 250);
}
};
Form.prototype.componentDidUpdate = function (prevProps, prevState) {
var _a, _b;
var props = this.props;
var store = props.store;
if ((0, api_1.isApiOutdated)(prevProps.initApi, props.initApi, prevProps.data, props.data)
|| (((_a = prevProps.initApi) === null || _a === void 0 ? void 0 : _a.url) !== ((_b = props.initApi) === null || _b === void 0 ? void 0 : _b.url))) {
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 (props.flowSpinning) {
// const spinArr: boolean[] = this.context.getComponents().filter((item: any) => item.props.type == 'service').map((item: any) => item.props.store.loading)
// const spin = spinArr.some(item => item)
// props?.getSpinning?.(store.loading || spin, props?._formName)
// }
if (prevProps.body !== props.body) {
if (this.props.getAdvancedFilterForm) {
}
this.getFiltersOptions();
}
};
Form.prototype.componentWillUnmount = function () {
var _a, _b;
(_a = this.sortable) === null || _a === void 0 ? void 0 : _a.destroy();
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);
(_b = this.unBlockRouting) === null || _b === void 0 ? void 0 : _b.call(this);
};
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();
//处理高级查询初始化的时候就查询一次
!(0, helper_1.isMobile)() && !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 _a;
var _b = this.props, store = _b.store, onFormChange = _b.onFormChange;
!((_a = this.changeFields) === null || _a === void 0 ? void 0 : _a.includes(name)) && (this.changeFields = (0, tslib_1.__spreadArray)((0, tslib_1.__spread