fastlion-amis
Version:
一种MIS页面生成工具
317 lines (316 loc) • 22.7 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var react_1 = tslib_1.__importDefault(require("react"));
var form_1 = tslib_1.__importDefault(require("antd/lib/form"));
var input_number_1 = tslib_1.__importDefault(require("antd/lib/input-number"));
var select_1 = tslib_1.__importDefault(require("antd/lib/select"));
var row_1 = tslib_1.__importDefault(require("antd/lib/row"));
var col_1 = tslib_1.__importDefault(require("antd/lib/col"));
var radio_1 = tslib_1.__importDefault(require("antd/lib/radio"));
var icons_1 = require("../../../../components/icons");
var Button_1 = tslib_1.__importDefault(require("../../../../components/Button"));
var components_1 = require("../../../../components");
var message_1 = tslib_1.__importDefault(require("antd/lib/message"));
var modal_1 = tslib_1.__importDefault(require("antd/lib/modal"));
var print_1 = require("../../../../utils/print");
var types_1 = require("../types");
var moment_1 = tslib_1.__importDefault(require("moment"));
var js_base64_1 = require("js-base64");
var empty_1 = tslib_1.__importDefault(require("antd/lib/empty"));
var Option = select_1.default.Option;
var FilePrint = /** @class */ (function (_super) {
tslib_1.__extends(FilePrint, _super);
function FilePrint(props) {
var _this = _super.call(this, props) || this;
_this.formRef = react_1.default.createRef();
_this.state = {
previewLoading: false,
showEmpty: true,
fileDatas: []
};
return _this;
}
FilePrint.prototype.componentDidMount = function () {
var _a;
return tslib_1.__awaiter(this, void 0, void 0, function () {
var _b, ctx, baseUrl, env, selectedItems, pdfRegExp, imgRegExp, fileDatas, i, item, _c, _d, _e;
var _f;
var _this = this;
return tslib_1.__generator(this, function (_g) {
switch (_g.label) {
case 0:
_b = this.props, ctx = _b.ctx, baseUrl = _b.baseUrl, env = _b.env;
selectedItems = ctx === null || ctx === void 0 ? void 0 : ctx.selectedItems;
pdfRegExp = /(.pdf)$/i;
imgRegExp = /\.(jpe?g|png)$/i;
fileDatas = [];
i = 0;
_g.label = 1;
case 1:
if (!(i < selectedItems.length)) return [3 /*break*/, 6];
item = selectedItems[i];
if (!pdfRegExp.test(item.name)) return [3 /*break*/, 3];
_e = (_d = fileDatas).push;
_f = {
type: 'pdf'
};
return [4 /*yield*/, this.downloadPDF(baseUrl + item.addr, (_a = env.token) === null || _a === void 0 ? void 0 : _a.call(env))];
case 2:
_c = _e.apply(_d, [(_f.content = _g.sent(),
_f)]);
return [3 /*break*/, 4];
case 3:
_c = imgRegExp.test(item.name) && fileDatas.push({
type: 'img',
content: baseUrl + item.addr
});
_g.label = 4;
case 4:
_c;
_g.label = 5;
case 5:
i++;
return [3 /*break*/, 1];
case 6:
this.setState({ fileDatas: fileDatas }, function () {
_this.handleFilePreview();
});
return [2 /*return*/];
}
});
});
};
FilePrint.prototype.handleFilePreview = function () {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var values, fileDatas, __, confirm, params;
var _this = this;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
this.setState({ previewLoading: true, showEmpty: false });
return [4 /*yield*/, this.formRef.current.validateFields()];
case 1:
values = _a.sent();
fileDatas = this.state.fileDatas;
__ = this.props.translate;
if (fileDatas.length === 0) {
message_1.default.info("".concat(__('CRUD.countIs0'), ",").concat(__('CRUD.reSelect')));
return [2 /*return*/];
}
confirm = true;
if (!(fileDatas.length >= 20)) return [3 /*break*/, 3];
return [4 /*yield*/, this.showModalTip(fileDatas.length)];
case 2:
confirm = _a.sent();
fileDatas = fileDatas.slice(0, 20);
_a.label = 3;
case 3:
if (confirm) {
// 调用预览函数
this.setState({ previewLoading: true });
params = tslib_1.__assign(tslib_1.__assign({}, values), { direction: values.direction === 0, preview: true });
(0, print_1.filePrint)(tslib_1.__assign(tslib_1.__assign({}, params), { fileDatas: fileDatas }), function () {
_this.setState({ previewLoading: false });
});
}
return [2 /*return*/];
}
});
});
};
// 文件仅打印
FilePrint.prototype.handleFilePrint = function () {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var values, __, fileDatas, params;
var _this = this;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, this.formRef.current.validateFields()];
case 1:
values = _a.sent();
__ = this.props.translate;
fileDatas = this.state.fileDatas;
if (fileDatas.length === 0) {
message_1.default.info("".concat(__('CRUD.countIs0'), ",").concat(__('CRUD.reSelect')));
return [2 /*return*/];
}
params = tslib_1.__assign(tslib_1.__assign({}, values), { direction: values.direction === 0, preview: false });
(0, print_1.filePrint)(tslib_1.__assign(tslib_1.__assign({}, params), { fileDatas: fileDatas }), function () {
_this.savePrintInfo();
});
return [2 /*return*/];
}
});
});
};
FilePrint.prototype.savePrintInfo = function () {
// 获取保存请求的地址
var _a = this.props, fetcher = _a.env.fetcher, ctx = _a.ctx, callbackApi = _a.callbackApi;
if (!callbackApi)
return;
var PRINT_TIME = (0, moment_1.default)(new Date()).format('YYYY-MM-DD HH:mm:ss');
fetcher(callbackApi, tslib_1.__assign(tslib_1.__assign({}, ctx), { PRINT_TIME: PRINT_TIME }));
};
FilePrint.prototype.showModalTip = function (countOfPage) {
return new Promise(function (resolve) {
modal_1.default.confirm({
content: react_1.default.createElement(react_1.default.Fragment, null,
react_1.default.createElement("span", null,
"\u9884\u89C8\u5171\u9700\u6E32\u67D3 ",
react_1.default.createElement("strong", null, countOfPage),
" \u9875\u3002"),
react_1.default.createElement("span", null, "\u5927\u4E8E\u7B49\u4E8E20\u9875\u65F6\uFF0C\u4EC5\u6E32\u67D3\u524D20\u9875\uFF0C\u8BF7\u786E\u8BA4\u662F\u5426\u9884\u89C8\uFF1F")),
okText: '确认',
cancelText: '取消',
onOk: function () { return resolve(true); },
onCancel: function () { return resolve(false); },
zIndex: 2000
});
});
};
FilePrint.prototype.downloadPDF = function (url, token) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
return tslib_1.__generator(this, function (_a) {
return [2 /*return*/, new Promise(function (resolve) {
try {
// if (!/^https?:/i.test(url)) resolve('http');
var xhr = new XMLHttpRequest();
xhr.open('GET', url, false); // false同步方式,需要设置同步,因为按照表格顺序发送请求
var arrybuffer = false;
if (xhr.overrideMimeType) {
try {
xhr.responseType = 'arraybuffer';
arrybuffer = true;
}
catch (err) {
xhr.overrideMimeType('text/plain; charset=x-user-defined');
}
}
xhr.setRequestHeader('token', token);
xhr.send(null);
var data = xhr.response;
var dataArray = void 0;
if (arrybuffer) {
dataArray = new Uint8Array(data);
}
else {
dataArray = new Uint8Array(data.length);
for (var i = 0; i < dataArray.length; i++) {
dataArray[i] = data.charCodeAt(i);
}
}
resolve((0, js_base64_1.fromUint8Array)(dataArray));
}
catch (error) {
resolve(error);
}
})];
});
});
};
FilePrint.prototype.render = function () {
var _this = this;
var _a = this.props, cx = _a.classnames, __ = _a.translate, popupContainer = _a.popupContainer, printers = _a.printers, onHide = _a.onHide;
var _b = this.state, previewLoading = _b.previewLoading, showEmpty = _b.showEmpty;
return (react_1.default.createElement(react_1.default.Fragment, null,
react_1.default.createElement("div", { className: cx('Modal-header') },
react_1.default.createElement("div", { className: cx('Modal-title') },
__('CRUD.filePrint'),
react_1.default.createElement("a", { "data-tooltip": __('Dialog.close'), onClick: function (e) { return onHide(e); }, className: cx('Modal-close') },
react_1.default.createElement(icons_1.CloseIcon, null)))),
react_1.default.createElement("div", { className: cx('Modal-body') },
react_1.default.createElement("div", { className: 'print-form-container' },
react_1.default.createElement("div", { className: 'preview-container' },
react_1.default.createElement(components_1.Spinner, { size: "md", overlay: true, show: previewLoading }),
showEmpty && react_1.default.createElement(empty_1.default, { description: '\u6682\u65E0\u9884\u89C8\u6548\u679C', className: 'preview-empty' }),
react_1.default.createElement("iframe", { id: 'file-preview', width: '100%', height: '100%' })),
react_1.default.createElement(form_1.default, { style: { width: 350 }, ref: this.formRef, colon: false, layout: 'vertical' },
react_1.default.createElement("div", { className: "print-setting" },
react_1.default.createElement("div", { className: "print-setting-label" }, "\u6253\u5370\u8BBE\u5907"),
react_1.default.createElement("div", { className: "print-setting-content" },
react_1.default.createElement(row_1.default, { gutter: 10 },
react_1.default.createElement(col_1.default, { span: 12 },
react_1.default.createElement(form_1.default.Item, { name: "printer", label: __('CRUD.printer'), initialValue: (printers === null || printers === void 0 ? void 0 : printers[0]) || '', rules: [{ required: true, message: "".concat(__('CRUD.selectPrinter')) }] },
react_1.default.createElement(select_1.default, { showSearch: true, getPopupContainer: popupContainer, dropdownClassName: 'label-print-selector' }, printers === null || printers === void 0 ? void 0 : printers.map(function (item) { return react_1.default.createElement(Option, { key: item, value: item }, item); })))),
react_1.default.createElement(col_1.default, { span: 12 },
react_1.default.createElement(form_1.default.Item, { name: "pageSize", label: __('CRUD.pageSize'), initialValue: types_1.pageOptions[0].value, rules: [{ required: true, message: "".concat(__('CRUD.selectPage')) }] },
react_1.default.createElement(select_1.default, { showSearch: true, getPopupContainer: popupContainer, dropdownClassName: 'label-print-selector', onChange: function (value) {
var _a;
var _b = types_1.sizeOptions[value], pageWidth = _b[0], pageHeight = _b[1];
(_a = _this.formRef.current) === null || _a === void 0 ? void 0 : _a.setFieldsValue({
pageWidth: pageWidth,
pageHeight: pageHeight
});
} }, types_1.pageOptions === null || types_1.pageOptions === void 0 ? void 0 : types_1.pageOptions.map(function (item) { return react_1.default.createElement(Option, { key: item.value, value: item.value }, item.label); }))))),
react_1.default.createElement(row_1.default, { gutter: 10 },
react_1.default.createElement(col_1.default, { span: 12 },
react_1.default.createElement(form_1.default.Item, { name: "pageWidth", label: __('width'), initialValue: types_1.sizeOptions[types_1.pageOptions[0].value][0], rules: [{
validator: function (rule, value) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
return tslib_1.__generator(this, function (_a) {
if (value < 0 || value > 1000) {
throw new Error("".concat(__('CRUD.fillIn'), "1-1000"));
}
return [2 /*return*/];
});
}); }
}] },
react_1.default.createElement(input_number_1.default, { className: 'w-full', min: 0, max: 1000 }))),
react_1.default.createElement(col_1.default, { span: 12 },
react_1.default.createElement(form_1.default.Item, { name: "pageHeight", label: __('height'), initialValue: types_1.sizeOptions[types_1.pageOptions[0].value][1], rules: [{
validator: function (rule, value) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
return tslib_1.__generator(this, function (_a) {
if (value < 0 || value > 1000) {
throw new Error("".concat(__('CRUD.fillIn'), "1-1000"));
}
return [2 /*return*/];
});
}); }
}] },
react_1.default.createElement(input_number_1.default, { className: 'w-full', min: 0, max: 1000 }))))),
react_1.default.createElement("div", { className: "print-setting-label" }, "\u7EB8\u5F20\u8BBE\u7F6E"),
react_1.default.createElement("div", { className: "print-setting-content" },
react_1.default.createElement(row_1.default, { gutter: 10 },
react_1.default.createElement(col_1.default, { span: 12 },
react_1.default.createElement(form_1.default.Item, { label: __('up'), name: "marginTop", initialValue: 0 },
react_1.default.createElement(input_number_1.default, { className: "w-full", min: 0 }))),
react_1.default.createElement(col_1.default, { span: 12 },
react_1.default.createElement(form_1.default.Item, { label: __('below'), name: "marginBottom", initialValue: 0 },
react_1.default.createElement(input_number_1.default, { className: "w-full", min: 0 })))),
react_1.default.createElement(row_1.default, { gutter: 10 },
react_1.default.createElement(col_1.default, { span: 12 },
react_1.default.createElement(form_1.default.Item, { label: __('left'), name: "marginLeft", initialValue: 0 },
react_1.default.createElement(input_number_1.default, { className: "w-full", min: 0 }))),
react_1.default.createElement(col_1.default, { span: 12 },
react_1.default.createElement(form_1.default.Item, { label: __('right'), name: "marginRight", initialValue: 0 },
react_1.default.createElement(input_number_1.default, { className: "w-full", min: 0 })))),
react_1.default.createElement(row_1.default, null,
react_1.default.createElement(col_1.default, { span: 24 },
react_1.default.createElement(form_1.default.Item, { name: "direction", label: __('direction'), initialValue: 0, rules: [{ required: true, }] },
react_1.default.createElement(radio_1.default.Group, null,
react_1.default.createElement(radio_1.default, { value: 0, style: { marginRight: 32 } }, __('vertical')),
react_1.default.createElement(radio_1.default, { value: 1 }, __('horizontal'))))))),
react_1.default.createElement("div", { className: "print-setting-label" }, "\u6253\u5370\u5185\u5BB9"),
react_1.default.createElement("div", { className: "print-setting-content" },
react_1.default.createElement(row_1.default, null,
react_1.default.createElement(col_1.default, { span: 12 },
react_1.default.createElement(form_1.default.Item, { name: "count", label: __('CRUD.copies'), initialValue: 1, rules: [{
validator: function (rule, value) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
return tslib_1.__generator(this, function (_a) {
if (value < 1 || value > 10000) {
throw new Error("".concat(__('CRUD.fillIn'), "1-10000"));
}
return [2 /*return*/];
});
}); }
}] },
react_1.default.createElement(input_number_1.default, { className: 'input-count', min: 1, max: 10000, formatter: function (value) { return value ? Number(value).toFixed(0) : ''; } }))))))))),
react_1.default.createElement("div", { className: cx('Modal-footer') },
react_1.default.createElement(Button_1.default, { level: "primary", onClick: this.handleFilePreview.bind(this) }, __('preview')),
react_1.default.createElement(Button_1.default, { level: "primary", onClick: this.handleFilePrint.bind(this) }, __('print')),
react_1.default.createElement(Button_1.default, { onClick: function (e) { return onHide(e); } }, "\u53D6\u6D88"))));
};
return FilePrint;
}(react_1.default.Component));
exports.default = FilePrint;
//# sourceMappingURL=./renderers/Lion/LabelPrint/components/FilePrint.js.map