fastlion-amis
Version:
一种MIS页面生成工具
283 lines (282 loc) • 20.8 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 radio_1 = tslib_1.__importDefault(require("antd/lib/radio"));
var components_1 = require("../../../../components");
var Button_1 = tslib_1.__importDefault(require("../../../../components/Button"));
var icons_1 = require("../../../../components/icons");
var types_1 = require("../types");
var util_1 = require("../../../../utils/print/util");
var print_1 = require("../../../../utils/print");
var moment_1 = tslib_1.__importDefault(require("moment"));
var row_1 = tslib_1.__importDefault(require("antd/lib/row"));
var col_1 = tslib_1.__importDefault(require("antd/lib/col"));
var Option = select_1.default.Option;
var BillPrint = /** @class */ (function (_super) {
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 tslib_1.__awaiter(this, void 0, void 0, function () {
var templates;
var _this = this;
return 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;
if (templates.length > 0) {
(_a = _this.formRef.current) === null || _a === void 0 ? void 0 : _a.setFieldsValue({
label: templates[0].tempName
});
}
});
return [2 /*return*/];
}
});
});
};
BillPrint.prototype.componentWillUnmount = function () {
this.cacheLabelData = undefined;
};
// 获取模板数据
BillPrint.prototype.getTemplates = function () {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var _a, env, templateApi, data, templates;
return tslib_1.__generator(this, function (_b) {
switch (_b.label) {
case 0:
_a = this.props, env = _a.env, templateApi = _a.templateApi, data = _a.data;
return [4 /*yield*/, env.fetcher(templateApi, data).then(function (res) {
if (res.status === 0) {
return res.data;
}
else {
return [];
}
})];
case 1:
templates = _b.sent();
return [2 /*return*/, templates];
}
});
});
};
BillPrint.prototype.getLabelData = function () {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var _a, env, ctx, labelDataApi, primaryField, isRow, printType, flowData, data, res, data_1;
return 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, printType = _a.printType, flowData = _a.data;
data = {};
if (printType == 'bill') {
if (isRow) {
data = ctx;
data.printType = 2;
}
else {
if (!(ctx === null || ctx === void 0 ? void 0 : ctx.ids)) {
message.info('请先选择行数据');
return [2 /*return*/];
}
data.printType = 0;
data.ids = ctx.ids;
data.primaryField = primaryField;
}
}
else {
data = flowData;
}
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.error(res.msg);
return [2 /*return*/, null];
}
return [2 /*return*/];
}
});
});
};
BillPrint.prototype.handleBillPreview = function () {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var values, labelData, template, tempContent, tableColumn, width, height, labelTemplate, templateDatas, param;
var _this = this;
return 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 = tslib_1.__assign(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)(tslib_1.__assign(tslib_1.__assign({}, param), { templateDatas: templateDatas }), function () {
_this.setState({ previewLoading: false });
});
}
return [2 /*return*/];
}
});
});
};
BillPrint.prototype.handleBillPrint = function () {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var values, labelPrintData, template, tempContent, tableColumn, width, height, labelTemplate, templateDatas, param;
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();
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 = tslib_1.__assign(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)(tslib_1.__assign(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');
fetcher(callbackApi, tslib_1.__assign(tslib_1.__assign({}, ctx), { PRINT_TIME: PRINT_TIME }));
};
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') },
__('CRUD.formPrint'),
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: 'bill-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[0] || '', rules: [{ required: true, message: "".concat(__('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(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, null,
react_1.default.createElement(col_1.default, { span: 12 },
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: 24 },
react_1.default.createElement(form_1.default.Item, { name: "label", label: __('CRUD.selectLabel'), rules: [{ required: true, message: "".concat(__('CRUD.select_Label')) }] },
react_1.default.createElement(select_1.default, { getPopupContainer: popupContainer, dropdownClassName: 'label-print-selector' }, 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(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 > 100) {
throw new Error("".concat(__('CRUD.fillIn'), "1-100"));
}
return [2 /*return*/];
});
}); }
}] },
react_1.default.createElement(input_number_1.default, { className: 'input-count', min: 1, max: 100, 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.handleBillPreview.bind(this) }, __('preview')),
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); } }, __('cancel')))));
};
return BillPrint;
}(react_1.default.Component));
exports.default = BillPrint;
//# sourceMappingURL=./renderers/Lion/LabelPrint/components/BillPrint.js.map