UNPKG

fastlion-amis

Version:

一种MIS页面生成工具

290 lines (289 loc) 19.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); var react_1 = (0, tslib_1.__importDefault)(require("react")); var form_1 = (0, tslib_1.__importDefault)(require("antd/lib/form")); var input_number_1 = (0, tslib_1.__importDefault)(require("antd/lib/input-number")); var select_1 = (0, tslib_1.__importDefault)(require("antd/lib/select")); var Row_1 = (0, tslib_1.__importDefault)(require("antd/lib/Row")); var Col_1 = (0, tslib_1.__importDefault)(require("antd/lib/Col")); var Radio_1 = (0, tslib_1.__importDefault)(require("antd/lib/Radio")); var icons_1 = require("../../../../components/icons"); var Button_1 = (0, tslib_1.__importDefault)(require("../../../../components/Button")); var components_1 = require("../../../../components"); var message_1 = (0, tslib_1.__importDefault)(require("antd/lib/message")); var Modal_1 = (0, tslib_1.__importDefault)(require("antd/lib/Modal")); var print_1 = require("../../../../utils/print"); var type_1 = require("../type"); var moment_1 = (0, tslib_1.__importDefault)(require("moment")); var js_base64_1 = require("js-base64"); var Option = select_1.default.Option; var FilePrint = /** @class */ (function (_super) { (0, tslib_1.__extends)(FilePrint, _super); function FilePrint(props) { var _this = _super.call(this, props) || this; _this.formRef = react_1.default.createRef(); _this.state = { previewLoading: true, fileDatas: [] }; return _this; } FilePrint.prototype.componentDidMount = function () { var _a; return (0, 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 (0, 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 (0, tslib_1.__awaiter)(this, void 0, void 0, function () { var values, fileDatas, __, confirm, params; var _this = this; return (0, tslib_1.__generator)(this, function (_a) { switch (_a.label) { case 0: 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(__('CRUD.countIs0') + "," + __('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 = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, values), { direction: values.direction === 0, preview: true, arrange: false, colSpacing: 0, rowSpacing: 0, marginTop: 0, marginLeft: 0 }); (0, print_1.filePrint)((0, tslib_1.__assign)((0, tslib_1.__assign)({}, params), { fileDatas: fileDatas }), function () { _this.setState({ previewLoading: false }); }); } return [2 /*return*/]; } }); }); }; // 文件仅打印 FilePrint.prototype.handleFilePrint = function () { return (0, tslib_1.__awaiter)(this, void 0, void 0, function () { var values, __, fileDatas, params; var _this = this; return (0, 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(__('CRUD.countIs0') + "," + __('CRUD.reSelect')); return [2 /*return*/]; } params = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, values), { direction: values.direction === 0, preview: false, arrange: false, colSpacing: 0, rowSpacing: 0, marginTop: 0, marginLeft: 0 }); (0, print_1.filePrint)((0, tslib_1.__assign)((0, 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'); callbackApi.data = { callbackList: (0, tslib_1.__assign)((0, tslib_1.__assign)({}, callbackApi.data), { PRINT_TIME: PRINT_TIME }) }; fetcher(callbackApi, { ids: ctx === null || ctx === void 0 ? void 0 : ctx.ids }); }; 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 (0, tslib_1.__awaiter)(this, void 0, void 0, function () { return (0, 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 previewLoading = this.state.previewLoading; 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') }, '文件打印', 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 }), react_1.default.createElement("iframe", { id: 'label-preview', width: '100%', height: '100%' })), react_1.default.createElement(form_1.default, { ref: this.formRef, colon: false, labelCol: { span: 5, offset: 1 }, wrapperCol: { span: 16, offset: 1 } }, 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: "" + __('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(form_1.default.Item, { name: "pageSize", label: __('CRUD.pageSize'), initialValue: type_1.pageOptions[0].value, rules: [{ required: true, message: "" + __('CRUD.selectPage') }] }, react_1.default.createElement(select_1.default, { showSearch: true, getPopupContainer: popupContainer, dropdownClassName: 'label-print-selector', onChange: function (value) { var _a; var _b = type_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 }); } }, type_1.pageOptions === null || type_1.pageOptions === void 0 ? void 0 : type_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: 24 }, react_1.default.createElement(Col_1.default, { span: 6, style: { position: 'relative', top: 2, padding: 0, textAlign: 'right' } }, "\u5BBD*\u9AD8(mm)"), react_1.default.createElement(Col_1.default, { span: 8, style: { paddingLeft: 15 } }, react_1.default.createElement(form_1.default.Item, { style: { width: 140 }, name: "pageWidth", initialValue: type_1.sizeOptions[type_1.pageOptions[0].value][0], rules: [{ validator: function (rule, value) { return (0, tslib_1.__awaiter)(_this, void 0, void 0, function () { return (0, tslib_1.__generator)(this, function (_a) { if (value < 0 || value > 1000) { throw new Error(__('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: 8, style: { marginLeft: 12 } }, react_1.default.createElement(form_1.default.Item, { style: { width: 140 }, name: "pageHeight", initialValue: type_1.sizeOptions[type_1.pageOptions[0].value][1], rules: [{ validator: function (rule, value) { return (0, tslib_1.__awaiter)(_this, void 0, void 0, function () { return (0, tslib_1.__generator)(this, function (_a) { if (value < 0 || value > 1000) { throw new Error(__('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(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(form_1.default.Item, { name: "count", label: __('CRUD.copies'), initialValue: 1, rules: [{ validator: function (rule, value) { return (0, tslib_1.__awaiter)(_this, void 0, void 0, function () { return (0, tslib_1.__generator)(this, function (_a) { if (value < 1 || value > 10000) { throw new Error(__('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