fastlion-amis
Version:
一种MIS页面生成工具
300 lines (299 loc) • 23.2 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var react_1 = (0, tslib_1.__importDefault)(require("react"));
var msgsub_1 = (0, tslib_1.__importDefault)(require("../../../../utils/msgsub"));
var style_1 = require("./style");
var Select_1 = (0, tslib_1.__importDefault)(require("antd/lib/Select"));
var card_1 = (0, tslib_1.__importDefault)(require("antd/lib/card"));
var button_1 = (0, tslib_1.__importDefault)(require("antd/lib/button"));
var input_1 = (0, tslib_1.__importDefault)(require("antd/lib/input"));
var shell_1 = require("../../../../../../utils/shell");
var spark_md5_1 = (0, tslib_1.__importDefault)(require("spark-md5"));
require("./MainExport.css");
var tag_1 = (0, tslib_1.__importDefault)(require("antd/lib/tag"));
var ArrowUpOutlined_1 = (0, tslib_1.__importDefault)(require("@ant-design/icons/lib/icons/ArrowUpOutlined"));
var LionExportExcel = /** @class */ (function (_super) {
(0, tslib_1.__extends)(LionExportExcel, _super);
function LionExportExcel(props) {
var _this = _super.call(this, props) || this;
_this._fileTypeList = [{ label: '数据文件', name: 'dataFile' }];
_this._exportRangeList = [{ label: '选中数据', name: '0' }, { label: '所有数据', name: '1' }];
_this._exportTypeList = [{ label: '按设置列导出', name: 'column' }, { label: '按模板导出', name: 'template' }];
_this.handeCancel = function () {
_this.props.handleCancel();
_this.setState({ visible: !_this.state.visible });
};
_this.openDownloadDialog = function (url, saveName) {
return new Promise(function (resolve, reject) {
resolve('');
}).then(function (res) {
if (typeof url == 'object' && url instanceof Blob) {
url = URL.createObjectURL(url); // 创建blob地址
}
var aLink = document.createElement('a');
aLink.href = url;
aLink.download = saveName || ''; // HTML5新增的属性,指定保存文件名,可以不要后缀,注意,file:///模式下不会生效
var event;
if (window.MouseEvent)
event = new MouseEvent('click');
else {
event = document.createEvent('MouseEvents');
event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
}
aLink.dispatchEvent(event);
});
};
_this.handleSubmit = function () { return (0, tslib_1.__awaiter)(_this, void 0, void 0, function () {
var _a, exportRange, exportFields, exportType, _b, ctx, env, selectedItems, exportSetColumnFields, baseUrl, fields;
var _this = this;
var _c, _d;
return (0, tslib_1.__generator)(this, function (_e) {
_a = this.state, exportRange = _a.exportRange, exportFields = _a.exportFields, exportType = _a.exportType;
_b = this.props, ctx = _b.ctx, env = _b.env;
selectedItems = ctx.selectedItems, exportSetColumnFields = ctx.exportSetColumnFields;
if (exportRange === '0' && (selectedItems === null || selectedItems === void 0 ? void 0 : selectedItems.length) <= 0) {
msgsub_1.default._error('选中项为空', env === null || env === void 0 ? void 0 : env.getModalContainer);
return [2 /*return*/];
}
baseUrl = (_d = (_c = env === null || env === void 0 ? void 0 : env.axiosInstance) === null || _c === void 0 ? void 0 : _c.defaults) === null || _d === void 0 ? void 0 : _d.baseURL;
fields = exportType === 'template' ? exportFields.join(',') : exportSetColumnFields.join(',');
this.setState({ loading: true });
if (!shell_1.Shell.hasShell()) {
env.fetcher(ctx.api, (0, tslib_1.__assign)((0, tslib_1.__assign)({}, ctx), { exportType: Number(exportRange), exportFields: fields })).then(function (res) {
var _a, _b;
if ((res === null || res === void 0 ? void 0 : res.status) === 0) {
(res === null || res === void 0 ? void 0 : res.data) && _this.openDownloadDialog((baseUrl !== null && baseUrl !== void 0 ? baseUrl : res === null || res === void 0 ? void 0 : res.reqUrl) + ((_a = res === null || res === void 0 ? void 0 : res.data) === null || _a === void 0 ? void 0 : _a.fileUrl), (_b = res === null || res === void 0 ? void 0 : res.data) === null || _b === void 0 ? void 0 : _b.fileName);
msgsub_1.default._success(res === null || res === void 0 ? void 0 : res.msg, env === null || env === void 0 ? void 0 : env.getModalContainer);
}
else if ((res === null || res === void 0 ? void 0 : res.status) === 301) {
msgsub_1.default._info(res === null || res === void 0 ? void 0 : res.msg, env === null || env === void 0 ? void 0 : env.getModalContainer);
}
else {
msgsub_1.default._error(res === null || res === void 0 ? void 0 : res.msg, env === null || env === void 0 ? void 0 : env.getModalContainer);
}
}).catch(function (err) {
msgsub_1.default._error('导出出错', env === null || env === void 0 ? void 0 : env.getModalContainer);
}).finally(function () { return _this.setState({ loading: false }); });
}
else {
env.fetcher(ctx.api, (0, tslib_1.__assign)((0, tslib_1.__assign)({}, ctx), { exportType: exportRange, exportFields: fields })).
then(function (res) { return (0, tslib_1.__awaiter)(_this, void 0, void 0, function () {
var confirmd, shellRes;
var _a, _b;
return (0, tslib_1.__generator)(this, function (_c) {
switch (_c.label) {
case 0:
this.setState({
visible: false
});
if ((res === null || res === void 0 ? void 0 : res.status) === 301) {
msgsub_1.default._info(res === null || res === void 0 ? void 0 : res.msg, env === null || env === void 0 ? void 0 : env.getModalContainer);
return [2 /*return*/];
}
return [4 /*yield*/, env.confirm('是否要保存并打开文件?')];
case 1:
confirmd = _c.sent();
if (!confirmd) return [3 /*break*/, 3];
return [4 /*yield*/, shell_1.Shell.download((baseUrl !== null && baseUrl !== void 0 ? baseUrl : res === null || res === void 0 ? void 0 : res.reqUrl) + ((_a = res === null || res === void 0 ? void 0 : res.data) === null || _a === void 0 ? void 0 : _a.fileUrl), (_b = res === null || res === void 0 ? void 0 : res.data) === null || _b === void 0 ? void 0 : _b.fileName, 0)];
case 2:
shellRes = _c.sent();
if (shellRes === null || shellRes === void 0 ? void 0 : shellRes.success) {
msgsub_1.default._success(shellRes === null || shellRes === void 0 ? void 0 : shellRes.msg, env === null || env === void 0 ? void 0 : env.getModalContainer);
}
else {
msgsub_1.default._error(shellRes === null || shellRes === void 0 ? void 0 : shellRes.msg, env === null || env === void 0 ? void 0 : env.getModalContainer);
}
return [3 /*break*/, 4];
case 3:
msgsub_1.default._info('用户取消', env === null || env === void 0 ? void 0 : env.getModalContainer);
_c.label = 4;
case 4: return [2 /*return*/];
}
});
}); }).catch(function (err) {
msgsub_1.default._error('导出出错', env === null || env === void 0 ? void 0 : env.getModalContainer);
}).finally(function () { return _this.setState({ loading: false }); });
}
return [2 /*return*/];
});
}); };
_this.handleReset = function () {
var exportTemplates = _this.state.exportTemplates;
var isSelected = _this.props.ctx.selectedItems.length > 0;
_this.setState({
fileType: 'dataFile',
exportRange: isSelected ? '0' : '1',
exportType: 'column',
tempId: exportTemplates.length > 0 ? exportTemplates[0].tempKey : '',
tempName: exportTemplates.length > 0 ? exportTemplates[0].tempName : '',
exportFields: exportTemplates.length > 0 ? exportTemplates[0].exportFields.split(',') : []
});
};
_this.renderSelectTag = function (props) {
var label = props.label, value = props.value, closable = props.closable, onClose = props.onClose;
var onPreventMouseDown = function (event) {
event.preventDefault();
event.stopPropagation();
};
return (react_1.default.createElement(tag_1.default, { icon: react_1.default.createElement(ArrowUpOutlined_1.default, { onClick: function () { return _this.handleSort(value); } }), onMouseDown: onPreventMouseDown, closable: closable, onClose: onClose, style: { margin: 3 } }, label));
};
var exportColumns = props.ctx.exportFields;
var isSelected = props.ctx.selectedItems.length > 0;
_this.allExportColumns = exportColumns;
_this.defaultTemplate = { tempKey: LionExportExcel.DEFAULT_TEMP_ID, tempName: LionExportExcel.DEFAULT_TEMP_NAME, exportFields: exportColumns.map(function (field) { return field.name; }).join(',') };
_this.state = {
visible: true,
loading: false,
fileType: 'dataFile',
exportRange: isSelected ? '0' : '1',
exportType: 'column',
tempId: LionExportExcel.DEFAULT_TEMP_ID,
tempName: LionExportExcel.DEFAULT_TEMP_NAME,
exportFields: exportColumns.map(function (field) { return field.name; }),
exportTemplates: [_this.defaultTemplate]
};
return _this;
}
LionExportExcel.prototype.componentDidMount = function () {
this.handleGetTemplate();
};
LionExportExcel.prototype.handleGetTemplate = function () {
return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
var _a, env, ctx, selectApi, res, template;
return (0, tslib_1.__generator)(this, function (_b) {
switch (_b.label) {
case 0:
_a = this.props, env = _a.env, ctx = _a.ctx;
selectApi = ctx.selectApi;
if (!selectApi) return [3 /*break*/, 2];
return [4 /*yield*/, env.fetcher(selectApi)];
case 1:
res = _b.sent();
if (res.status === 0) {
template = res.data;
template.push(this.defaultTemplate);
this.setState({
exportTemplates: template,
tempId: template[0].tempKey,
tempName: template[0].tempName,
exportFields: template[0].exportFields.split(',')
});
}
_b.label = 2;
case 2: return [2 /*return*/];
}
});
});
};
LionExportExcel.prototype.handleSaveTemplate = function () {
return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
var _a, env, ctx, setApi, _b, tempName, exportFields, tempKey, res;
return (0, tslib_1.__generator)(this, function (_c) {
switch (_c.label) {
case 0:
_a = this.props, env = _a.env, ctx = _a.ctx;
setApi = ctx.setApi;
if (!setApi) return [3 /*break*/, 2];
_b = this.state, tempName = _b.tempName, exportFields = _b.exportFields;
tempKey = spark_md5_1.default.hash(tempName);
return [4 /*yield*/, env.fetcher(setApi, { tempKey: tempKey, tempName: tempName, exportFields: exportFields.join(',') })];
case 1:
res = _c.sent();
if (res.status === 0) {
this.handleGetTemplate();
}
else {
msgsub_1.default._error(res.msg, env === null || env === void 0 ? void 0 : env.getModalContainer);
}
_c.label = 2;
case 2: return [2 /*return*/];
}
});
});
};
LionExportExcel.prototype.handleDeleteTemplate = function () {
return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
var _a, env, ctx, deleteApi, tempId, res;
return (0, tslib_1.__generator)(this, function (_b) {
switch (_b.label) {
case 0:
_a = this.props, env = _a.env, ctx = _a.ctx;
deleteApi = ctx.deleteApi;
if (!deleteApi) return [3 /*break*/, 2];
tempId = this.state.tempId;
return [4 /*yield*/, env.fetcher(deleteApi, { tempKey: tempId })];
case 1:
res = _b.sent();
if (res.status === 0) {
this.handleGetTemplate();
}
else {
msgsub_1.default._error(res.msg, env === null || env === void 0 ? void 0 : env.getModalContainer);
}
_b.label = 2;
case 2: return [2 /*return*/];
}
});
});
};
LionExportExcel.prototype.handleChangeTemplate = function (tempId) {
var _a, _b;
var fields = this.state.exportTemplates.find(function (item) { return item.tempKey === tempId; });
this.setState({ tempId: tempId, tempName: (_a = fields === null || fields === void 0 ? void 0 : fields.tempName) !== null && _a !== void 0 ? _a : '', exportFields: (_b = fields === null || fields === void 0 ? void 0 : fields.exportFields.split(',')) !== null && _b !== void 0 ? _b : [] });
};
LionExportExcel.prototype.handleSort = function (name) {
var exportFields = this.state.exportFields;
var tempArr = Array.from(exportFields);
var index = tempArr.findIndex(function (item) { return name === item; });
if (index > 0) {
var a = tempArr[index - 1];
var b = tempArr[index];
tempArr[index - 1] = b;
tempArr[index] = a;
this.setState({ exportFields: tempArr });
}
};
LionExportExcel.prototype.render = function () {
var _this = this;
var _a = this.props, env = _a.env, normalSelectAll = _a.normalSelectAll;
var _b = this.state, visible = _b.visible, loading = _b.loading, fileType = _b.fileType, exportRange = _b.exportRange, exportType = _b.exportType, tempId = _b.tempId, tempName = _b.tempName, exportFields = _b.exportFields, exportTemplates = _b.exportTemplates;
return (react_1.default.createElement("div", { className: "lion-export-wrapper" },
react_1.default.createElement(style_1.WrapperModal, { wrapClassName: 'fastlion-export', visible: visible, closable: true, getContainer: env === null || env === void 0 ? void 0 : env.getModalContainer, onCancel: this.handeCancel, title: "\u6587\u4EF6\u5BFC\u51FA", zIndex: 9999, maskStyle: { zIndex: 9999 }, footer: react_1.default.createElement("div", { className: "lion-export-btns", style: {
display: 'flex',
width: '100%',
justifyContent: 'space-between',
overflow: 'hidden'
} },
react_1.default.createElement(button_1.default, { onClick: this.handleReset }, "\u91CD\u7F6E"),
react_1.default.createElement("div", null,
react_1.default.createElement(button_1.default, { onClick: this.handeCancel }, "\u53D6\u6D88"),
react_1.default.createElement(button_1.default, { style: { marginLeft: '10px' }, type: 'primary', loading: loading, onClick: this.handleSubmit.bind(this) }, "\u786E\u5B9A"))) },
react_1.default.createElement("div", { style: { width: '100%', marginTop: '4px', paddingLeft: '30px' } },
react_1.default.createElement("span", { style: { textAlign: 'left', paddingRight: '25px', color: '#2a3e61' } }, "\u6587\u4EF6\u7C7B\u578B"),
react_1.default.createElement(Select_1.default, { dropdownStyle: { zIndex: 10019 }, bordered: false, placeholder: '\u6587\u4EF6\u7C7B\u578B', value: fileType, onChange: function (type) { return _this.setState({ fileType: type }); } }, this._fileTypeList.map(function (item, index) { return react_1.default.createElement(Select_1.default.Option, { key: index, value: item.name }, item.label); }))),
react_1.default.createElement("div", { style: { width: '100%', marginTop: '15px', paddingLeft: '30px' } },
react_1.default.createElement("span", { style: { textAlign: 'left', paddingRight: '25px', color: '#2a3e61' } }, "\u5BFC\u51FA\u8303\u56F4"),
react_1.default.createElement(Select_1.default, { dropdownStyle: { zIndex: 10019 }, bordered: false, placeholder: '\u5BFC\u51FA\u8303\u56F4', disabled: normalSelectAll, value: exportRange, onChange: function (type) { return _this.setState({ exportRange: type }); } }, this._exportRangeList.map(function (item, index) { return react_1.default.createElement(Select_1.default.Option, { className: 'lion-option-disabled', key: index, value: item.name, disabled: index !== parseInt(exportRange) }, item.label); }))),
react_1.default.createElement("div", { style: { width: '100%', marginTop: '15px', paddingLeft: '30px' } },
react_1.default.createElement("span", { style: { textAlign: 'left', paddingRight: '25px', color: '#2a3e61' } }, "\u5BFC\u51FA\u65B9\u5F0F"),
react_1.default.createElement(Select_1.default, { dropdownStyle: { zIndex: 10019 }, bordered: false, placeholder: '\u5BFC\u51FA\u65B9\u5F0F', value: exportType, onChange: function (type) { return _this.setState({ exportType: type }); } }, this._exportTypeList.map(function (item, index) { return react_1.default.createElement(Select_1.default.Option, { key: index, value: item.name }, item.label); }))),
react_1.default.createElement("div", { style: { width: '100%', marginTop: '15px', paddingLeft: '30px', display: exportType === 'template' ? 'block' : 'none' } },
react_1.default.createElement("span", { style: { textAlign: 'left', paddingRight: '25px', color: '#2a3e61' } }, "\u5BFC\u51FA\u6A21\u677F"),
react_1.default.createElement(Select_1.default, { className: 'my-select', dropdownStyle: { zIndex: 10019 }, bordered: false, value: tempId, onChange: function (id) { return _this.handleChangeTemplate(id); } }, exportTemplates.map(function (temp) { return react_1.default.createElement(Select_1.default.Option, { value: temp.tempKey }, temp.tempName); }))),
exportType === 'template' &&
react_1.default.createElement("div", { style: { width: '100%', marginTop: '10px', paddingLeft: '30px', paddingRight: '30px' } },
react_1.default.createElement(card_1.default, { bodyStyle: { maxHeight: 'calc(100vh - 510px)', overflow: 'auto' }, style: { width: '100%' }, headStyle: { height: '30px', backgroundColor: '#f5f5f5' }, size: "small", title: "\u5BFC\u51FA\u5B57\u6BB5" },
react_1.default.createElement("div", { style: { marginTop: '12px', width: '100%', padding: '0px 12px' } },
react_1.default.createElement(Select_1.default, { tagRender: this.renderSelectTag, value: exportFields, className: 'my-field-select', placeholder: '\u8BF7\u9009\u62E9\u5BFC\u51FA\u5B57\u6BB5', mode: "multiple", dropdownStyle: { zIndex: 10019 }, onChange: function (value) { return _this.setState({ exportFields: value }); } }, this.allExportColumns.map(function (field) { return react_1.default.createElement(Select_1.default.Option, { key: field.name, value: field.name }, field.label); }))),
react_1.default.createElement("div", { style: { padding: '12px', display: 'flex' } },
react_1.default.createElement(input_1.default, { addonBefore: "\u6A21\u677F\u540D\u79F0", value: tempName, placeholder: '\u8BF7\u8F93\u5165', onChange: function (e) { return _this.setState({ tempName: e.target.value }); } }),
react_1.default.createElement(button_1.default, { style: { fontSize: '13px', borderRadius: '0px' }, type: 'primary', onClick: function () { return _this.handleSaveTemplate(); } }, "\u4FDD\u5B58"),
react_1.default.createElement(button_1.default, { style: { fontSize: '13px', borderRadius: '0px 2px 2px 0px' }, disabled: tempId === LionExportExcel.DEFAULT_TEMP_ID, onClick: function () { return _this.handleDeleteTemplate(); } }, "\u5220\u9664")))))));
};
LionExportExcel.DEFAULT_TEMP_ID = 'defaultTempId';
LionExportExcel.DEFAULT_TEMP_NAME = '默认模板';
return LionExportExcel;
}(react_1.default.Component));
exports.default = LionExportExcel;
//# sourceMappingURL=./renderers/Lion/Table/LionTable/components/MainExport/MainExport.js.map