UNPKG

fastlion-amis

Version:

一种MIS页面生成工具

227 lines (226 loc) 14.9 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 Radio_1 = (0, tslib_1.__importDefault)(require("antd/lib/Radio")); var components_1 = require("../../../../components"); var Button_1 = (0, tslib_1.__importDefault)(require("../../../../components/Button")); var icons_1 = require("../../../../components/icons"); var message_1 = (0, tslib_1.__importDefault)(require("antd/lib/message")); var util_1 = require("../../../../utils/print/util"); var print_1 = require("../../../../utils/print"); var moment_1 = (0, tslib_1.__importDefault)(require("moment")); var Option = select_1.default.Option; var BillPrint = /** @class */ (function (_super) { (0, tslib_1.__extends)(BillPrint, _super); function BillPrint(props) { var _this = _super.call(this, props) || this; _this.formRef = react_1.default.createRef(); _this.state = { previewLoading: false, templates: [] }; return _this; } BillPrint.prototype.componentDidMount = function () { return (0, tslib_1.__awaiter)(this, void 0, void 0, function () { var templates; var _this = this; return (0, tslib_1.__generator)(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, this.getTemplates()]; case 1: templates = _a.sent(); this.setState({ templates: templates }, function () { var _a; (_a = _this.formRef.current) === null || _a === void 0 ? void 0 : _a.setFieldsValue({ label: templates[0].tempName }); _this.handleBillPreview(); }); return [2 /*return*/]; } }); }); }; BillPrint.prototype.componentWillUnmount = function () { this.cacheLabelData = undefined; }; // 获取模板数据 BillPrint.prototype.getTemplates = function () { return (0, tslib_1.__awaiter)(this, void 0, void 0, function () { var _a, env, templateApi, templates; return (0, tslib_1.__generator)(this, function (_b) { switch (_b.label) { case 0: _a = this.props, env = _a.env, templateApi = _a.templateApi; return [4 /*yield*/, env.fetcher(templateApi).then(function (res) { if (res.status === 0) { return Promise.resolve(res.data); } else { return Promise.resolve([]); } })]; case 1: templates = _b.sent(); return [2 /*return*/, templates]; } }); }); }; BillPrint.prototype.getLabelData = function () { return (0, tslib_1.__awaiter)(this, void 0, void 0, function () { var _a, env, ctx, labelDataApi, primaryField, isRow, data, res, data_1; return (0, tslib_1.__generator)(this, function (_b) { switch (_b.label) { case 0: if (this.cacheLabelData) { return [2 /*return*/, this.cacheLabelData]; } _a = this.props, env = _a.env, ctx = _a.ctx, labelDataApi = _a.labelDataApi, primaryField = _a.primaryField, isRow = _a.isRow; data = {}; if (isRow) { data = ctx; data.printType = 2; } else { if (!(ctx === null || ctx === void 0 ? void 0 : ctx.ids)) { message_1.default.info('请先选择行数据'); return [2 /*return*/]; } data.printType = 0; data.ids = ctx.ids; data.primaryField = primaryField; } return [4 /*yield*/, env.fetcher(labelDataApi, data)]; case 1: res = _b.sent(); if (res.status === 0) { data_1 = res.data; this.cacheLabelData = data_1; return [2 /*return*/, data_1]; } else { message_1.default.error(res.msg); return [2 /*return*/, null]; } return [2 /*return*/]; } }); }); }; BillPrint.prototype.handleBillPreview = function () { return (0, tslib_1.__awaiter)(this, void 0, void 0, function () { var values, labelData, template, tempContent, tableColumn, width, height, labelTemplate, templateDatas, param; var _this = this; return (0, tslib_1.__generator)(this, function (_a) { switch (_a.label) { case 0: this.setState({ previewLoading: true }); return [4 /*yield*/, this.formRef.current.validateFields()]; case 1: values = _a.sent(); return [4 /*yield*/, this.getLabelData()]; case 2: labelData = _a.sent(); template = this.state.templates.find(function (temp) { return temp.tempName === values.label; }); if (labelData && template) { tempContent = template.tempContent, tableColumn = template.tableColumn, width = template.width, height = template.height; labelTemplate = (0, util_1.buildLabelTemplate)(tempContent); templateDatas = (0, util_1.setLabelTemplateData)(labelTemplate, labelData.items, this.props.baseUrl, tableColumn); param = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, values), { pageWidth: width, pageHeight: height, preview: true, direction: values.direction === 0, arrange: false, marginTop: 0, marginLeft: 0, rowSpacing: 0, colSpacing: 0 }); (0, print_1.billPrint)((0, tslib_1.__assign)((0, tslib_1.__assign)({}, param), { templateDatas: templateDatas }), function () { _this.setState({ previewLoading: false }); }); } return [2 /*return*/]; } }); }); }; BillPrint.prototype.handleBillPrint = function () { return (0, tslib_1.__awaiter)(this, void 0, void 0, function () { var values, labelPrintData, template, tempContent, tableColumn, width, height, labelTemplate, templateDatas, param; 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(); return [4 /*yield*/, this.getLabelData()]; case 2: labelPrintData = _a.sent(); template = this.state.templates.find(function (temp) { return temp.tempName === values.label; }); if (labelPrintData && template) { tempContent = template.tempContent, tableColumn = template.tableColumn, width = template.width, height = template.height; labelTemplate = (0, util_1.buildLabelTemplate)(tempContent); templateDatas = (0, util_1.setLabelTemplateData)(labelTemplate, labelPrintData.items, this.props.baseUrl, tableColumn); param = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, values), { pageWidth: width, pageHeight: height, preview: false, direction: values.direction === 0, arrange: false, marginTop: 0, marginLeft: 0, rowSpacing: 0, colSpacing: 0 }); (0, print_1.billPrint)((0, tslib_1.__assign)((0, tslib_1.__assign)({}, param), { templateDatas: templateDatas }), function () { _this.savePrintInfo(); }); } return [2 /*return*/]; } }); }); }; BillPrint.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 }); }; BillPrint.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, templates = _b.templates; var templateNames = templates.map(function (item) { return item.tempName; }); 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, { style: { width: 300, marginLeft: -20, marginRight: 40 }, ref: this.formRef, colon: false, labelCol: { span: 8, offset: 1 }, wrapperCol: { span: 16, offset: 1 } }, react_1.default.createElement(form_1.default.Item, { name: "printer", label: __('CRUD.printer'), initialValue: printers[0] || '', rules: [{ required: true, message: "" + __('CRUD.selectPrinter') }] }, react_1.default.createElement(select_1.default, { getPopupContainer: popupContainer, dropdownClassName: 'label-print-selector' }, printers.map(function (item) { return react_1.default.createElement(Option, { key: item, value: item }, item); }))), react_1.default.createElement(form_1.default.Item, { name: "label", label: __('CRUD.selectLabel'), rules: [{ required: true, message: "" + __('CRUD.select_Label') }] }, react_1.default.createElement(select_1.default, { getPopupContainer: popupContainer, dropdownClassName: 'label-print-selector', onChange: function () { return _this.handleBillPreview(); } }, templateNames === null || templateNames === void 0 ? void 0 : templateNames.map(function (item) { return react_1.default.createElement(Option, { key: item, value: item }, item); }))), 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, { onChange: function () { return _this.handleBillPreview(); } }, 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.handleBillPrint.bind(this) }, __('print')), react_1.default.createElement(Button_1.default, { onClick: function (e) { return onHide(e); } }, "\u53D6\u6D88")))); }; return BillPrint; }(react_1.default.Component)); exports.default = BillPrint; //# sourceMappingURL=./renderers/Lion/LabelPrint/components/BillPrint.js.map