UNPKG

fastlion-amis

Version:

一种MIS页面生成工具

902 lines 155 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 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