gm-printer 10.13.10 → 10.13.12-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/.eslintcache CHANGED
@@ -1 +1 @@
1
- [{"/Users/min/Documents/GMFE/gm-util/gm-printer/src/util.js":"1","/Users/min/Documents/GMFE/gm-util/gm-printer/src/printer/get_css.js":"2","/Users/min/Documents/GMFE/gm-util/gm-printer/src/printer/barcode.js":"3","/Users/min/Documents/GMFE/gm-util/gm-printer/src/index.js":"4","/Users/min/Documents/GMFE/gm-util/gm-printer/src/editor_stockout/context_menu.js":"5","/Users/min/Documents/GMFE/gm-util/gm-printer/src/editor_stockin/context_menu.js":"6","/Users/min/Documents/GMFE/gm-util/gm-printer/src/editor_statement/context_menu.js":"7","/Users/min/Documents/GMFE/gm-util/gm-printer/src/editor_settle/context_menu.js":"8","/Users/min/Documents/GMFE/gm-util/gm-printer/src/editor_salemenus/context_menu.js":"9","/Users/min/Documents/GMFE/gm-util/gm-printer/src/editor_purchase/editor_special_table.js":"10","/Users/min/Documents/GMFE/gm-util/gm-printer/src/editor_purchase/context_menu.js":"11","/Users/min/Documents/GMFE/gm-util/gm-printer/src/editor_account/context_menu.js":"12","/Users/min/Documents/GMFE/gm-util/gm-printer/src/editor/context_menu.js":"13","/Users/min/Documents/GMFE/gm-util/gm-printer/src/config.js":"14","/Users/min/Documents/GMFE/gm-util/gm-printer/src/common/hoc_with_store.js":"15","/Users/min/Documents/GMFE/gm-util/gm-printer/src/common/hoc_with_shadow_dom.js":"16","/Users/min/Documents/GMFE/gm-util/gm-printer/src/common/get_editor_css.js":"17","/Users/min/Documents/GMFE/gm-util/gm-printer/src/common/editor_title.js":"18","/Users/min/Documents/GMFE/gm-util/gm-printer/src/common/editor_store.js":"19","/Users/min/Documents/GMFE/gm-util/gm-printer/src/common/editor_select.js":"20","/Users/min/Documents/GMFE/gm-util/gm-printer/src/common/editor_edit_field.js":"21","/Users/min/Documents/GMFE/gm-util/gm-printer/src/common/component.js":"22","/Users/min/Documents/GMFE/gm-util/gm-printer/src/editor_stockout/editor.js":"23","/Users/min/Documents/GMFE/gm-util/gm-printer/src/editor_stockin/editor.js":"24","/Users/min/Documents/GMFE/gm-util/gm-printer/src/editor_statement/editor.js":"25","/Users/min/Documents/GMFE/gm-util/gm-printer/src/editor_settle/editor.js":"26","/Users/min/Documents/GMFE/gm-util/gm-printer/src/editor_salemenus/editor.js":"27","/Users/min/Documents/GMFE/gm-util/gm-printer/src/editor_purchase/editor.js":"28","/Users/min/Documents/GMFE/gm-util/gm-printer/src/editor_account_statement/editor.js":"29","/Users/min/Documents/GMFE/gm-util/gm-printer/src/editor_account/editor.js":"30","/Users/min/Documents/GMFE/gm-util/gm-printer/src/editor/editor.js":"31","/Users/min/Documents/GMFE/gm-util/gm-printer/src/components/tooltip/index.js":"32","/Users/min/Documents/GMFE/gm-util/gm-printer/src/common/editor_special_field.js":"33"},{"size":7133,"mtime":1638862566087,"results":"34","hashOfConfig":"35"},{"size":291,"mtime":1638935573926,"results":"36","hashOfConfig":"35"},{"size":523,"mtime":1638935549030,"results":"37","hashOfConfig":"35"},{"size":1093,"mtime":1638861826721,"results":"38","hashOfConfig":"35"},{"size":2293,"mtime":1638948548042,"results":"39","hashOfConfig":"35"},{"size":2292,"mtime":1638948522492,"results":"40","hashOfConfig":"35"},{"size":1078,"mtime":1638948543271,"results":"41","hashOfConfig":"35"},{"size":2040,"mtime":1638948515902,"results":"42","hashOfConfig":"35"},{"size":2991,"mtime":1638948535719,"results":"43","hashOfConfig":"35"},{"size":4379,"mtime":1638935458586,"results":"44","hashOfConfig":"35"},{"size":2521,"mtime":1638948507982,"results":"45","hashOfConfig":"35"},{"size":2943,"mtime":1638948502114,"results":"46","hashOfConfig":"35"},{"size":3732,"mtime":1639722598379,"results":"47","hashOfConfig":"35"},{"size":2833,"mtime":1638861837310,"results":"48","hashOfConfig":"35"},{"size":4212,"mtime":1638935746667,"results":"49","hashOfConfig":"35"},{"size":861,"mtime":1638931446915,"results":"50","hashOfConfig":"35"},{"size":178,"mtime":1638931439249,"results":"51","hashOfConfig":"35"},{"size":3272,"mtime":1638931374761,"results":"52","hashOfConfig":"35"},{"size":22984,"mtime":1639993458515,"results":"53","hashOfConfig":"35"},{"size":4898,"mtime":1639992402586,"results":"54","hashOfConfig":"35"},{"size":13268,"mtime":1638930638946,"results":"55","hashOfConfig":"35"},{"size":14787,"mtime":1638948621474,"results":"56","hashOfConfig":"35"},{"size":2165,"mtime":1638949854481,"results":"57","hashOfConfig":"35"},{"size":2165,"mtime":1638949840121,"results":"58","hashOfConfig":"35"},{"size":2223,"mtime":1638949823846,"results":"59","hashOfConfig":"35"},{"size":2226,"mtime":1638949842800,"results":"60","hashOfConfig":"35"},{"size":3367,"mtime":1638949855771,"results":"61","hashOfConfig":"35"},{"size":2305,"mtime":1638949843817,"results":"62","hashOfConfig":"35"},{"size":3294,"mtime":1638949855131,"results":"63","hashOfConfig":"35"},{"size":2850,"mtime":1638949842017,"results":"64","hashOfConfig":"35"},{"size":4157,"mtime":1638949853726,"results":"65","hashOfConfig":"35"},{"size":605,"mtime":1638949882777,"results":"66","hashOfConfig":"35"},{"size":1175,"mtime":1638949720500,"results":"67","hashOfConfig":"35"},{"filePath":"68","messages":"69","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"jpc0be",{"filePath":"70","messages":"71","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"72","messages":"73","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"74","messages":"75","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"76","messages":"77","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"78","messages":"79","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"80","messages":"81","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"82","messages":"83","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"84","messages":"85","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"86","messages":"87","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"88","messages":"89","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"90","messages":"91","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"92","messages":"93","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"94","messages":"95","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"96","messages":"97","errorCount":2,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"98","messages":"99","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"100","messages":"101","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"102","messages":"103","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"104","messages":"105","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"106","messages":"107","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"108","messages":"109","errorCount":1,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"110","messages":"111","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"112","messages":"113","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"114","messages":"115","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"116","messages":"117","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"118","messages":"119","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"120","messages":"121","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"122","messages":"123","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"124","messages":"125","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"126","messages":"127","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"128","messages":"129","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"130","messages":"131","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"132","messages":"133","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"/Users/min/Documents/GMFE/gm-util/gm-printer/src/util.js",[],"/Users/min/Documents/GMFE/gm-util/gm-printer/src/printer/get_css.js",[],"/Users/min/Documents/GMFE/gm-util/gm-printer/src/printer/barcode.js",[],"/Users/min/Documents/GMFE/gm-util/gm-printer/src/index.js",[],"/Users/min/Documents/GMFE/gm-util/gm-printer/src/editor_stockout/context_menu.js",[],"/Users/min/Documents/GMFE/gm-util/gm-printer/src/editor_stockin/context_menu.js",[],"/Users/min/Documents/GMFE/gm-util/gm-printer/src/editor_statement/context_menu.js",[],"/Users/min/Documents/GMFE/gm-util/gm-printer/src/editor_settle/context_menu.js",[],"/Users/min/Documents/GMFE/gm-util/gm-printer/src/editor_salemenus/context_menu.js",[],"/Users/min/Documents/GMFE/gm-util/gm-printer/src/editor_purchase/editor_special_table.js",[],"/Users/min/Documents/GMFE/gm-util/gm-printer/src/editor_purchase/context_menu.js",[],"/Users/min/Documents/GMFE/gm-util/gm-printer/src/editor_account/context_menu.js",[],"/Users/min/Documents/GMFE/gm-util/gm-printer/src/editor/context_menu.js",[],"/Users/min/Documents/GMFE/gm-util/gm-printer/src/config.js",[],"/Users/min/Documents/GMFE/gm-util/gm-printer/src/common/hoc_with_store.js",["134","135"],"/Users/min/Documents/GMFE/gm-util/gm-printer/src/common/hoc_with_shadow_dom.js",[],"/Users/min/Documents/GMFE/gm-util/gm-printer/src/common/get_editor_css.js",[],"/Users/min/Documents/GMFE/gm-util/gm-printer/src/common/editor_title.js",[],"/Users/min/Documents/GMFE/gm-util/gm-printer/src/common/editor_store.js",[],"/Users/min/Documents/GMFE/gm-util/gm-printer/src/common/editor_select.js",[],"/Users/min/Documents/GMFE/gm-util/gm-printer/src/common/editor_edit_field.js",["136","137","138"],"/Users/min/Documents/GMFE/gm-util/gm-printer/src/common/component.js",[],"/Users/min/Documents/GMFE/gm-util/gm-printer/src/editor_stockout/editor.js",[],"/Users/min/Documents/GMFE/gm-util/gm-printer/src/editor_stockin/editor.js",[],"/Users/min/Documents/GMFE/gm-util/gm-printer/src/editor_statement/editor.js",[],"/Users/min/Documents/GMFE/gm-util/gm-printer/src/editor_settle/editor.js",[],"/Users/min/Documents/GMFE/gm-util/gm-printer/src/editor_salemenus/editor.js",[],"/Users/min/Documents/GMFE/gm-util/gm-printer/src/editor_purchase/editor.js",[],"/Users/min/Documents/GMFE/gm-util/gm-printer/src/editor_account_statement/editor.js",[],"/Users/min/Documents/GMFE/gm-util/gm-printer/src/editor_account/editor.js",[],"/Users/min/Documents/GMFE/gm-util/gm-printer/src/editor/editor.js",[],"/Users/min/Documents/GMFE/gm-util/gm-printer/src/components/tooltip/index.js",[],"/Users/min/Documents/GMFE/gm-util/gm-printer/src/common/editor_special_field.js",[],{"ruleId":"139","severity":2,"message":"140","line":10,"column":29,"nodeType":"141","endLine":10,"endColumn":35},{"ruleId":"139","severity":2,"message":"142","line":145,"column":63,"nodeType":"141","endLine":145,"endColumn":71},{"ruleId":"143","severity":1,"message":"144","line":265,"column":13,"nodeType":"145","endLine":265,"endColumn":49},{"ruleId":"143","severity":1,"message":"144","line":283,"column":13,"nodeType":"145","endLine":283,"endColumn":56},{"ruleId":"146","severity":2,"message":"147","line":436,"column":22,"nodeType":"148","messageId":"149","endLine":436,"endColumn":31},"react/prop-types","'config' is missing in props validation","Identifier","'mockData' is missing in props validation","react/jsx-handler-names","Handler function for onChange prop key must begin with 'handle'","JSXAttribute","gmfe/i18n-check","t函数的key只能为字符串常量(Literal),请使用单引号或双引号包裹","MemberExpression","isVariable"]
1
+ [{"/Users/min/Documents/GMFE/gm-util/gm-printer/src/util.js":"1","/Users/min/Documents/GMFE/gm-util/gm-printer/src/printer/get_css.js":"2","/Users/min/Documents/GMFE/gm-util/gm-printer/src/printer/barcode.js":"3","/Users/min/Documents/GMFE/gm-util/gm-printer/src/index.js":"4","/Users/min/Documents/GMFE/gm-util/gm-printer/src/editor_stockout/context_menu.js":"5","/Users/min/Documents/GMFE/gm-util/gm-printer/src/editor_stockin/context_menu.js":"6","/Users/min/Documents/GMFE/gm-util/gm-printer/src/editor_statement/context_menu.js":"7","/Users/min/Documents/GMFE/gm-util/gm-printer/src/editor_settle/context_menu.js":"8","/Users/min/Documents/GMFE/gm-util/gm-printer/src/editor_salemenus/context_menu.js":"9","/Users/min/Documents/GMFE/gm-util/gm-printer/src/editor_purchase/editor_special_table.js":"10","/Users/min/Documents/GMFE/gm-util/gm-printer/src/editor_purchase/context_menu.js":"11","/Users/min/Documents/GMFE/gm-util/gm-printer/src/editor_account/context_menu.js":"12","/Users/min/Documents/GMFE/gm-util/gm-printer/src/editor/context_menu.js":"13","/Users/min/Documents/GMFE/gm-util/gm-printer/src/config.js":"14","/Users/min/Documents/GMFE/gm-util/gm-printer/src/common/hoc_with_store.js":"15","/Users/min/Documents/GMFE/gm-util/gm-printer/src/common/hoc_with_shadow_dom.js":"16","/Users/min/Documents/GMFE/gm-util/gm-printer/src/common/get_editor_css.js":"17","/Users/min/Documents/GMFE/gm-util/gm-printer/src/common/editor_title.js":"18","/Users/min/Documents/GMFE/gm-util/gm-printer/src/common/editor_store.js":"19","/Users/min/Documents/GMFE/gm-util/gm-printer/src/common/editor_select.js":"20","/Users/min/Documents/GMFE/gm-util/gm-printer/src/common/editor_edit_field.js":"21","/Users/min/Documents/GMFE/gm-util/gm-printer/src/common/component.js":"22","/Users/min/Documents/GMFE/gm-util/gm-printer/src/editor_stockout/editor.js":"23","/Users/min/Documents/GMFE/gm-util/gm-printer/src/editor_stockin/editor.js":"24","/Users/min/Documents/GMFE/gm-util/gm-printer/src/editor_statement/editor.js":"25","/Users/min/Documents/GMFE/gm-util/gm-printer/src/editor_settle/editor.js":"26","/Users/min/Documents/GMFE/gm-util/gm-printer/src/editor_salemenus/editor.js":"27","/Users/min/Documents/GMFE/gm-util/gm-printer/src/editor_purchase/editor.js":"28","/Users/min/Documents/GMFE/gm-util/gm-printer/src/editor_account_statement/editor.js":"29","/Users/min/Documents/GMFE/gm-util/gm-printer/src/editor_account/editor.js":"30","/Users/min/Documents/GMFE/gm-util/gm-printer/src/editor/editor.js":"31","/Users/min/Documents/GMFE/gm-util/gm-printer/src/components/tooltip/index.js":"32","/Users/min/Documents/GMFE/gm-util/gm-printer/src/common/editor_special_field.js":"33","/Users/min/Documents/GMFE/gm-util/gm-printer/src/printer/store.js":"34","/Users/min/Documents/GMFE/gm-util/gm-printer/src/printer/index.js":"35","/Users/min/Documents/GMFE/gm-util/gm-printer/src/printer/do_print.js":"36","/Users/min/Documents/GMFE/gm-util/gm-printer/src/finance_voucher/finance_printer.js":"37","/Users/min/Documents/GMFE/gm-util/gm-printer/src/finance_voucher/components/table_subtotal_tr.js":"38","/Users/min/Documents/GMFE/gm-util/gm-printer/src/finance_voucher/components/table.js":"39","/Users/min/Documents/GMFE/gm-util/gm-printer/src/finance_voucher/components/finance_batch_printer.js":"40"},{"size":7133,"mtime":1638862566087,"results":"41","hashOfConfig":"42"},{"size":291,"mtime":1638935573926,"results":"43","hashOfConfig":"42"},{"size":523,"mtime":1638935549030,"results":"44","hashOfConfig":"42"},{"size":1139,"mtime":1644572548725,"results":"45","hashOfConfig":"46"},{"size":2293,"mtime":1638948548042,"results":"47","hashOfConfig":"42"},{"size":2292,"mtime":1638948522492,"results":"48","hashOfConfig":"42"},{"size":1078,"mtime":1638948543271,"results":"49","hashOfConfig":"42"},{"size":2040,"mtime":1638948515902,"results":"50","hashOfConfig":"42"},{"size":2991,"mtime":1638948535719,"results":"51","hashOfConfig":"42"},{"size":4379,"mtime":1638935458586,"results":"52","hashOfConfig":"42"},{"size":2521,"mtime":1638948507982,"results":"53","hashOfConfig":"42"},{"size":2943,"mtime":1638948502114,"results":"54","hashOfConfig":"42"},{"size":3732,"mtime":1639722598379,"results":"55","hashOfConfig":"42"},{"size":2833,"mtime":1638861837310,"results":"56","hashOfConfig":"42"},{"size":4212,"mtime":1638935746667,"results":"57","hashOfConfig":"42"},{"size":861,"mtime":1638931446915,"results":"58","hashOfConfig":"42"},{"size":178,"mtime":1638931439249,"results":"59","hashOfConfig":"42"},{"size":3272,"mtime":1638931374761,"results":"60","hashOfConfig":"42"},{"size":22984,"mtime":1639993458515,"results":"61","hashOfConfig":"42"},{"size":4898,"mtime":1639992402586,"results":"62","hashOfConfig":"42"},{"size":13268,"mtime":1638930638946,"results":"63","hashOfConfig":"42"},{"size":14787,"mtime":1638948621474,"results":"64","hashOfConfig":"42"},{"size":2165,"mtime":1638949854481,"results":"65","hashOfConfig":"42"},{"size":2165,"mtime":1638949840121,"results":"66","hashOfConfig":"42"},{"size":2223,"mtime":1638949823846,"results":"67","hashOfConfig":"42"},{"size":2226,"mtime":1638949842800,"results":"68","hashOfConfig":"42"},{"size":3367,"mtime":1638949855771,"results":"69","hashOfConfig":"42"},{"size":2305,"mtime":1638949843817,"results":"70","hashOfConfig":"42"},{"size":3294,"mtime":1638949855131,"results":"71","hashOfConfig":"42"},{"size":2850,"mtime":1638949842017,"results":"72","hashOfConfig":"42"},{"size":4157,"mtime":1638949853726,"results":"73","hashOfConfig":"42"},{"size":605,"mtime":1638949882777,"results":"74","hashOfConfig":"42"},{"size":1175,"mtime":1638949720500,"results":"75","hashOfConfig":"42"},{"size":14644,"mtime":1644994596691,"results":"76","hashOfConfig":"46"},{"size":332,"mtime":1644573509040,"results":"77","hashOfConfig":"46"},{"size":3936,"mtime":1644907222767,"results":"78","hashOfConfig":"46"},{"size":8868,"mtime":1644808947014,"results":"79","hashOfConfig":"46"},{"size":4322,"mtime":1646190280604,"results":"80","hashOfConfig":"46"},{"size":9440,"mtime":1644993553716,"results":"81","hashOfConfig":"46"},{"size":724,"mtime":1644808940649,"results":"82","hashOfConfig":"46"},{"filePath":"83","messages":"84","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"jpc0be",{"filePath":"85","messages":"86","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"87","messages":"88","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"89","messages":"90","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"1qaimc",{"filePath":"91","messages":"92","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"93","messages":"94","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"95","messages":"96","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"97","messages":"98","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"99","messages":"100","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"101","messages":"102","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"103","messages":"104","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"105","messages":"106","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"107","messages":"108","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"109","messages":"110","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"111","messages":"112","errorCount":2,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"113","messages":"114","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"115","messages":"116","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"117","messages":"118","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"119","messages":"120","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"121","messages":"122","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"123","messages":"124","errorCount":1,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"125","messages":"126","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"127","messages":"128","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"129","messages":"130","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"131","messages":"132","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"133","messages":"134","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"135","messages":"136","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"137","messages":"138","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"139","messages":"140","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"141","messages":"142","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"143","messages":"144","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"145","messages":"146","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"147","messages":"148","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"149","messages":"150","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"151","messages":"152","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"153","messages":"154","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"155","messages":"156","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"157","messages":"158","errorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"159","messages":"160","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"161","messages":"162","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"/Users/min/Documents/GMFE/gm-util/gm-printer/src/util.js",[],"/Users/min/Documents/GMFE/gm-util/gm-printer/src/printer/get_css.js",[],"/Users/min/Documents/GMFE/gm-util/gm-printer/src/printer/barcode.js",[],"/Users/min/Documents/GMFE/gm-util/gm-printer/src/index.js",[],"/Users/min/Documents/GMFE/gm-util/gm-printer/src/editor_stockout/context_menu.js",[],"/Users/min/Documents/GMFE/gm-util/gm-printer/src/editor_stockin/context_menu.js",[],"/Users/min/Documents/GMFE/gm-util/gm-printer/src/editor_statement/context_menu.js",[],"/Users/min/Documents/GMFE/gm-util/gm-printer/src/editor_settle/context_menu.js",[],"/Users/min/Documents/GMFE/gm-util/gm-printer/src/editor_salemenus/context_menu.js",[],"/Users/min/Documents/GMFE/gm-util/gm-printer/src/editor_purchase/editor_special_table.js",[],"/Users/min/Documents/GMFE/gm-util/gm-printer/src/editor_purchase/context_menu.js",[],"/Users/min/Documents/GMFE/gm-util/gm-printer/src/editor_account/context_menu.js",[],"/Users/min/Documents/GMFE/gm-util/gm-printer/src/editor/context_menu.js",[],"/Users/min/Documents/GMFE/gm-util/gm-printer/src/config.js",[],"/Users/min/Documents/GMFE/gm-util/gm-printer/src/common/hoc_with_store.js",["163","164"],"/Users/min/Documents/GMFE/gm-util/gm-printer/src/common/hoc_with_shadow_dom.js",[],"/Users/min/Documents/GMFE/gm-util/gm-printer/src/common/get_editor_css.js",[],"/Users/min/Documents/GMFE/gm-util/gm-printer/src/common/editor_title.js",[],"/Users/min/Documents/GMFE/gm-util/gm-printer/src/common/editor_store.js",[],"/Users/min/Documents/GMFE/gm-util/gm-printer/src/common/editor_select.js",[],"/Users/min/Documents/GMFE/gm-util/gm-printer/src/common/editor_edit_field.js",["165","166","167"],"/Users/min/Documents/GMFE/gm-util/gm-printer/src/common/component.js",[],"/Users/min/Documents/GMFE/gm-util/gm-printer/src/editor_stockout/editor.js",[],"/Users/min/Documents/GMFE/gm-util/gm-printer/src/editor_stockin/editor.js",[],"/Users/min/Documents/GMFE/gm-util/gm-printer/src/editor_statement/editor.js",[],"/Users/min/Documents/GMFE/gm-util/gm-printer/src/editor_settle/editor.js",[],"/Users/min/Documents/GMFE/gm-util/gm-printer/src/editor_salemenus/editor.js",[],"/Users/min/Documents/GMFE/gm-util/gm-printer/src/editor_purchase/editor.js",[],"/Users/min/Documents/GMFE/gm-util/gm-printer/src/editor_account_statement/editor.js",[],"/Users/min/Documents/GMFE/gm-util/gm-printer/src/editor_account/editor.js",[],"/Users/min/Documents/GMFE/gm-util/gm-printer/src/editor/editor.js",[],"/Users/min/Documents/GMFE/gm-util/gm-printer/src/components/tooltip/index.js",[],"/Users/min/Documents/GMFE/gm-util/gm-printer/src/common/editor_special_field.js",[],"/Users/min/Documents/GMFE/gm-util/gm-printer/src/printer/store.js",[],"/Users/min/Documents/GMFE/gm-util/gm-printer/src/printer/index.js",[],"/Users/min/Documents/GMFE/gm-util/gm-printer/src/printer/do_print.js",[],"/Users/min/Documents/GMFE/gm-util/gm-printer/src/finance_voucher/finance_printer.js",[],"/Users/min/Documents/GMFE/gm-util/gm-printer/src/finance_voucher/components/table_subtotal_tr.js",["168"],"/Users/min/Documents/GMFE/gm-util/gm-printer/src/finance_voucher/components/table.js",[],"/Users/min/Documents/GMFE/gm-util/gm-printer/src/finance_voucher/components/finance_batch_printer.js",[],{"ruleId":"169","severity":2,"message":"170","line":10,"column":29,"nodeType":"171","endLine":10,"endColumn":35},{"ruleId":"169","severity":2,"message":"172","line":145,"column":63,"nodeType":"171","endLine":145,"endColumn":71},{"ruleId":"173","severity":1,"message":"174","line":265,"column":13,"nodeType":"175","endLine":265,"endColumn":49},{"ruleId":"173","severity":1,"message":"174","line":283,"column":13,"nodeType":"175","endLine":283,"endColumn":56},{"ruleId":"176","severity":2,"message":"177","line":436,"column":22,"nodeType":"178","messageId":"179","endLine":436,"endColumn":31},{"ruleId":"176","severity":2,"message":"177","line":120,"column":14,"nodeType":"178","messageId":"179","endLine":120,"endColumn":23},"react/prop-types","'config' is missing in props validation","Identifier","'mockData' is missing in props validation","react/jsx-handler-names","Handler function for onChange prop key must begin with 'handle'","JSXAttribute","gmfe/i18n-check","t函数的key只能为字符串常量(Literal),请使用单引号或双引号包裹","MemberExpression","isVariable"]
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gm-printer",
3
- "version": "10.13.10",
3
+ "version": "10.13.12-alpha.0",
4
4
  "description": "diy printer",
5
5
  "main": "src/index.js",
6
6
  "scripts": {
@@ -0,0 +1,36 @@
1
+ import React from 'react'
2
+ import Printer from '../finance_printer'
3
+ import _ from 'lodash'
4
+ import PropTypes from 'prop-types'
5
+
6
+ class BatchPrinter extends React.Component {
7
+ constructor(props) {
8
+ super(props)
9
+ this.ready = 0
10
+ }
11
+
12
+ handleReady = () => {
13
+ this.ready++
14
+ if (this.ready === this.props.list.length) {
15
+ this.props.onReady()
16
+ }
17
+ }
18
+
19
+ render() {
20
+ const { list } = this.props
21
+ return _.map(list, ({ config, data }, i) => (
22
+ <Printer key={i} data={data} config={config} onReady={this.handleReady} />
23
+ ))
24
+ }
25
+ }
26
+
27
+ BatchPrinter.propTypes = {
28
+ list: PropTypes.array.isRequired,
29
+ onReady: PropTypes.func
30
+ }
31
+
32
+ BatchPrinter.defaultProps = {
33
+ onReady: _.noop
34
+ }
35
+
36
+ export default BatchPrinter
@@ -0,0 +1,343 @@
1
+ import React from 'react'
2
+ import PropTypes from 'prop-types'
3
+ import _ from 'lodash'
4
+ import {
5
+ dispatchMsg,
6
+ getDataKey,
7
+ getHeight,
8
+ getMultiNumber,
9
+ getTableColumnName,
10
+ getWidth,
11
+ isMultiTable
12
+ } from '../../util'
13
+ import { inject, observer } from 'mobx-react'
14
+ import classNames from 'classnames'
15
+ import { MULTI_SUFFIX } from '../../config'
16
+ import SpecialTr from '../../printer/table_special_tr'
17
+ import SubtotalTr from './table_subtotal_tr'
18
+ import PageSummary from '../../printer/page_summary'
19
+
20
+ @inject('printerStore')
21
+ @observer
22
+ class Table extends React.Component {
23
+ constructor(props) {
24
+ super(props)
25
+ this.ref = React.createRef()
26
+ this.state = {
27
+ index: null
28
+ }
29
+ }
30
+
31
+ componentDidMount() {
32
+ const { name, printerStore } = this.props
33
+
34
+ if (!printerStore.ready) {
35
+ const $table = this.ref.current.querySelector('table')
36
+ const tHead = $table.querySelector('thead')
37
+ const ths = tHead.querySelectorAll('th') || []
38
+ const trs = $table.querySelectorAll('tbody tr') || []
39
+ const detailsDiv = $table.querySelectorAll('tr td .b-table-details')
40
+
41
+ printerStore.setHeight(name, getHeight($table))
42
+
43
+ printerStore.setTable(name, {
44
+ head: {
45
+ height: getHeight(tHead),
46
+ widths: _.map(ths, th => getWidth(th))
47
+ },
48
+ body: {
49
+ heights: _.map(trs, tr => getHeight(tr)),
50
+ children: _.map(detailsDiv, div => getHeight(div))
51
+ }
52
+ })
53
+ }
54
+ }
55
+
56
+ handleClick = e => {
57
+ const { name } = this.props
58
+ const { index } = e.target.dataset
59
+
60
+ dispatchMsg('gm-printer-select', {
61
+ selected: getTableColumnName(name, index)
62
+ })
63
+ }
64
+
65
+ handleDragStart = e => {
66
+ const { name } = this.props
67
+ const { index } = e.target.dataset
68
+
69
+ this.setState({
70
+ index
71
+ })
72
+
73
+ dispatchMsg('gm-printer-select', {
74
+ selected: getTableColumnName(name, index)
75
+ })
76
+ }
77
+
78
+ handleSelectedRegion = () => {
79
+ const { name } = this.props
80
+
81
+ dispatchMsg('gm-printer-select-region', { selected: name })
82
+ }
83
+
84
+ handleDrop = e => {
85
+ const { index } = e.target.dataset
86
+
87
+ if (this.state.index !== index) {
88
+ dispatchMsg('gm-printer-table-drag', {
89
+ source: this.state.index,
90
+ target: index
91
+ })
92
+ }
93
+ }
94
+
95
+ handleDragOver = e => {
96
+ e.preventDefault()
97
+ }
98
+
99
+ getColumns = () => {
100
+ const {
101
+ config: { columns, dataKey }
102
+ } = this.props
103
+ const columns1 = columns.map((val, index) => ({ ...val, index }))
104
+ // 如果是多列表格
105
+ if (isMultiTable(dataKey)) {
106
+ // 多栏商品的第二列有点特殊,都带 _MULTI_SUFFIX 后缀
107
+ let res = columns1
108
+ const colNumber = getMultiNumber(dataKey)
109
+ for (let i = 2; i <= colNumber; i++) {
110
+ const colNum = i > 2 ? i : '' // 栏数
111
+ const columnsI = columns.map((val, index) => {
112
+ const data = {
113
+ ...val,
114
+ index,
115
+ text: val.text.replace(
116
+ /{{(price\()?列\.([^{{]+)}}/g,
117
+ (s, s1, s2) => {
118
+ if (s1) {
119
+ // 有price函数插进来
120
+ const mix_suffix = s2.replace(/\*/, () => `${MULTI_SUFFIX}*`)
121
+ return `{{${s1}列.${mix_suffix}${colNum}}}`
122
+ } else {
123
+ return `{{列.${s2}${MULTI_SUFFIX}${colNum}}}`
124
+ }
125
+ }
126
+ ) // {{列.xx}} => {{列.xxMULTI_SUFFIXi}}
127
+ }
128
+ // 多栏商品的明细取 __details_MULTI_SUFFIX
129
+ if (val.specialDetailsKey)
130
+ data.specialDetailsKey =
131
+ val.specialDetailsKey + `${MULTI_SUFFIX}${colNum}`
132
+ return data
133
+ })
134
+ res = res.concat(columnsI)
135
+ }
136
+ return res
137
+ } else {
138
+ return columns1
139
+ }
140
+ }
141
+
142
+ renderDefault() {
143
+ let {
144
+ config,
145
+ config: { dataKey, arrange, customerRowHeight = 23 },
146
+ name,
147
+ range,
148
+ pageIndex,
149
+ printerStore
150
+ } = this.props
151
+
152
+ // 数据
153
+ dataKey = getDataKey(dataKey, arrange)
154
+ const tableData = printerStore.data._table[dataKey] || []
155
+
156
+ // 列
157
+ const columns = this.getColumns()
158
+ // 列宽固定(避免跳页bug)
159
+ const thWidths = printerStore.tablesInfo[name]?.head.widths || []
160
+ // 每页合计在前
161
+ const subtotalTrPageSummary = () => {
162
+ return (
163
+ <>
164
+ <SubtotalTr
165
+ range={range}
166
+ config={config}
167
+ printerStore={printerStore}
168
+ />
169
+ <PageSummary {...this.props} />
170
+ </>
171
+ )
172
+ }
173
+ // 合计在前
174
+ const PageSummarySubtotalTr = () => {
175
+ return (
176
+ <>
177
+ <PageSummary {...this.props} />
178
+ <SubtotalTr
179
+ range={range}
180
+ config={config}
181
+ printerStore={printerStore}
182
+ />
183
+ </>
184
+ )
185
+ }
186
+ const getTdStyle = (index, style = {}) => {
187
+ const width = thWidths[index]
188
+ const { fontSize } = style
189
+ let tdStyle = {}
190
+ let minWidth = 24
191
+
192
+ if (!width) return tdStyle
193
+ if (fontSize) minWidth = _.parseInt(fontSize) * 2
194
+ if (width >= 150) {
195
+ tdStyle = {
196
+ minWidth: width
197
+ }
198
+ } else {
199
+ tdStyle = {
200
+ minWidth,
201
+ width
202
+ }
203
+ }
204
+ return tdStyle
205
+ }
206
+
207
+ return (
208
+ <table>
209
+ <thead>
210
+ <tr style={{ height: `${customerRowHeight}px` }}>
211
+ {_.map(columns, (col, i) => (
212
+ <th
213
+ key={i}
214
+ data-index={col.index}
215
+ data-name={getTableColumnName(name, col.index)}
216
+ draggable
217
+ style={{
218
+ ...getTdStyle(i, col.headStyle),
219
+ ...col.headStyle
220
+ }}
221
+ className={classNames({
222
+ active:
223
+ getTableColumnName(name, col.index) ===
224
+ printerStore.selected
225
+ })}
226
+ onClick={this.handleClick}
227
+ onDragStart={this.handleDragStart}
228
+ onDrop={this.handleDrop}
229
+ onDragOver={this.handleDragOver}
230
+ >
231
+ {col.head}
232
+ </th>
233
+ ))}
234
+ </tr>
235
+ </thead>
236
+ <tbody>
237
+ {_.map(_.range(range.begin, range.end), i => {
238
+ const _special = tableData[i] && tableData[i]._special
239
+ if (_special)
240
+ return <SpecialTr key={i} config={config} data={_special} />
241
+ // 如果项为空对象展现一个占满一行的td
242
+ const isItemNone = !_.keys(tableData[i]).length
243
+
244
+ return (
245
+ <tr style={{ height: `${customerRowHeight}px` }} key={i}>
246
+ {isItemNone ? (
247
+ <td colSpan='99' />
248
+ ) : (
249
+ _.map(columns, (col, j) => {
250
+ return (
251
+ <td
252
+ key={j}
253
+ data-name={getTableColumnName(name, col.index)}
254
+ style={{
255
+ ...getTdStyle(j, col.style),
256
+ ...col.style
257
+ }}
258
+ className={classNames({
259
+ active:
260
+ getTableColumnName(name, col.index) ===
261
+ printerStore.selected
262
+ })}
263
+ dangerouslySetInnerHTML={{
264
+ __html: col.isSpecialColumn
265
+ ? printerStore.templateSpecialDetails(
266
+ col,
267
+ dataKey,
268
+ i
269
+ )
270
+ : printerStore
271
+ .templateFinance(
272
+ col.text,
273
+ dataKey,
274
+ i,
275
+ pageIndex
276
+ )
277
+ .replace(/\(\)/g, '')
278
+ }}
279
+ />
280
+ )
281
+ })
282
+ )}
283
+ </tr>
284
+ )
285
+ })}
286
+ {this.props.config.subtotal.isCommutationPlace
287
+ ? PageSummarySubtotalTr()
288
+ : subtotalTrPageSummary()}
289
+ </tbody>
290
+ </table>
291
+ )
292
+ }
293
+
294
+ renderEmptyTable() {
295
+ return (
296
+ <table>
297
+ <thead />
298
+ <tbody>
299
+ <tr />
300
+ </tbody>
301
+ </table>
302
+ )
303
+ }
304
+
305
+ render() {
306
+ let {
307
+ config: { className, dataKey, arrange },
308
+ name,
309
+ placeholder,
310
+ printerStore
311
+ } = this.props
312
+ dataKey = getDataKey(dataKey, arrange)
313
+ const tableData = printerStore.data._table[dataKey] || []
314
+ const active = printerStore.selectedRegion === name
315
+
316
+ return (
317
+ <div
318
+ ref={this.ref}
319
+ className={classNames(
320
+ 'gm-printer-table',
321
+ 'gm-printer-table-classname-' + (className || 'default'),
322
+ { active }
323
+ )}
324
+ data-name={name}
325
+ data-placeholder={placeholder}
326
+ onClick={this.handleSelectedRegion}
327
+ >
328
+ {tableData.length ? this.renderDefault() : this.renderEmptyTable()}
329
+ </div>
330
+ )
331
+ }
332
+ }
333
+
334
+ Table.propTypes = {
335
+ config: PropTypes.object.isRequired,
336
+ name: PropTypes.string.isRequired,
337
+ range: PropTypes.object.isRequired,
338
+ pageIndex: PropTypes.number.isRequired,
339
+ placeholder: PropTypes.string,
340
+ printerStore: PropTypes.object
341
+ }
342
+
343
+ export default Table
@@ -0,0 +1,147 @@
1
+ import React from 'react'
2
+ import i18next from '../../../locales'
3
+ import PropTypes from 'prop-types'
4
+ import _ from 'lodash'
5
+ import { MULTI_SUFFIX } from '../../config'
6
+ import Big from 'big.js'
7
+ import { coverDigit2Uppercase, getDataKey } from '../../util'
8
+ import { observer } from 'mobx-react'
9
+ import { get } from 'mobx'
10
+
11
+ /**
12
+ * 每页合计组件,分页计算后,根据range来统计每页合计数据
13
+ * @param props
14
+ * @returns {*}
15
+ */
16
+ const SubtotalTr = props => {
17
+ const {
18
+ config: {
19
+ dataKey,
20
+ arrange,
21
+ subtotal,
22
+ subtotal: {
23
+ show,
24
+ isUpperCaseBefore, // 决定小写金额是否在前
25
+ isUpperLowerCaseSeparate, // 决定大小写金额是否分开在两端
26
+ style,
27
+ fields = [
28
+ {
29
+ name: i18next.t('出库金额'),
30
+ valueField: 'real_item_price'
31
+ }
32
+ ],
33
+ displayName = false // 是否展示字段名
34
+ }
35
+ },
36
+ range,
37
+ printerStore: {
38
+ config: {
39
+ financeSpecialConfig: {
40
+ CapitalPrefix = '大写',
41
+ LowercasePrefix = '小写'
42
+ }
43
+ }
44
+ },
45
+ printerStore
46
+ } = props
47
+ const tableData = printerStore.data._table[getDataKey(dataKey, arrange)] || []
48
+ // 计算合计
49
+ const sumData = (list, field) => {
50
+ return _.reduce(
51
+ list,
52
+ (a, b) => {
53
+ let result = a
54
+
55
+ const _origin = b._origin || {}
56
+ const _origin2 = b['_origin' + MULTI_SUFFIX] || {}
57
+
58
+ result = a.plus(_origin[field] || 0)
59
+ if (_origin2[field]) {
60
+ result = result.plus(_origin2[field])
61
+ }
62
+ return result
63
+ },
64
+ Big(0)
65
+ ).toFixed(2)
66
+ }
67
+
68
+ // 每页小计
69
+ // show 是否展示小计,fields<Array> 合计的字段和展现的name,displayName 是否显示名字
70
+ if (show && printerStore.ready) {
71
+ const list = tableData.slice(range.begin, range.end)
72
+
73
+ const sum = {}
74
+
75
+ _.each(fields, v => {
76
+ sum[v.name] = sumData(list, v.valueField)
77
+ })
78
+
79
+ // 定义每页小记的左右两侧内容
80
+ let subtotalLeftContent
81
+ let subtotalRightContent
82
+
83
+ for (const name in sum) {
84
+ const price = sum[name]
85
+ const priceUpperCase = get(subtotal, 'needUpperCase') // needUpperCase在初始模板中undefined,所以必须用这个方法
86
+ ? coverDigit2Uppercase(price)
87
+ : ''
88
+ if (displayName) {
89
+ // 大写金额是否在前
90
+ if (isUpperCaseBefore) {
91
+ subtotalLeftContent = `${name}${priceUpperCase}`
92
+ subtotalRightContent = `(${LowercasePrefix || '小写'}:¥${price})`
93
+ } else {
94
+ subtotalLeftContent = `(${LowercasePrefix || '小写'}:¥${price})`
95
+ subtotalRightContent = `${name} ${priceUpperCase}`
96
+ }
97
+ } else {
98
+ if (isUpperCaseBefore) {
99
+ subtotalLeftContent = `${priceUpperCase}`
100
+ subtotalRightContent = `(${LowercasePrefix || '小写'}:¥${price})`
101
+ } else {
102
+ subtotalLeftContent = `(${LowercasePrefix || '小写'}:¥${price})`
103
+ subtotalRightContent = `${priceUpperCase}`
104
+ }
105
+ }
106
+ }
107
+
108
+ return (
109
+ <tr>
110
+ <td colSpan={99} style={{ fontWeight: 'bold', ...style }}>
111
+ {/* 大写金额和小写金额分开在表格的两侧,通过控制类名实现,添加类名后,覆盖原来的居中、靠右靠左 */}
112
+ <div
113
+ className={
114
+ isUpperLowerCaseSeparate
115
+ ? 'gm-printer-subtotal-UpperLowerCaseSeparate-outer'
116
+ : ''
117
+ }
118
+ style={{ margin: '0 30px' }}
119
+ >
120
+ {i18next.t(`${CapitalPrefix || '大写'}:`)}
121
+ {/* {i18next.t('每页合计')}: */}
122
+ <span
123
+ className={
124
+ isUpperLowerCaseSeparate
125
+ ? 'gm-printer-subtotal-UpperLowerCaseSeparate-inter'
126
+ : ''
127
+ }
128
+ >
129
+ <span>&nbsp;&nbsp;{subtotalLeftContent}&nbsp;&nbsp;</span>
130
+ <span>&nbsp;&nbsp;{subtotalRightContent}&nbsp;&nbsp;</span>
131
+ </span>
132
+ </div>
133
+ </td>
134
+ </tr>
135
+ )
136
+ } else {
137
+ return null
138
+ }
139
+ }
140
+
141
+ SubtotalTr.propTypes = {
142
+ config: PropTypes.object.isRequired,
143
+ range: PropTypes.object.isRequired,
144
+ printStore: PropTypes.object
145
+ }
146
+
147
+ export default observer(SubtotalTr)
@@ -0,0 +1,313 @@
1
+ import i18next from '../../locales'
2
+ import React from 'react'
3
+ import classNames from 'classnames'
4
+ import { inject, observer, Provider } from 'mobx-react'
5
+ import PropTypes from 'prop-types'
6
+ import PrinterStore from '../printer/store'
7
+ import Page from '../printer/page'
8
+ import _ from 'lodash'
9
+ import Panel from '../printer/panel'
10
+ import Table from './components/table'
11
+ import MergePage from '../printer/merge_page'
12
+
13
+ // Header Sign Footer 相对特殊,要单独处理
14
+ const Header = props => (
15
+ <Panel {...props} name='header' placeholder={i18next.t('页眉')} />
16
+ )
17
+
18
+ const Sign = props => (
19
+ <Panel
20
+ {...props}
21
+ style={{
22
+ ...props.style,
23
+ position: 'absolute',
24
+ left: 0,
25
+ right: 0
26
+ }}
27
+ name='sign'
28
+ placeholder={i18next.t('签名')}
29
+ />
30
+ )
31
+
32
+ Sign.propTypes = {
33
+ style: PropTypes.object
34
+ }
35
+
36
+ const Footer = props => (
37
+ <Panel
38
+ {...props}
39
+ style={{
40
+ ...props.style,
41
+ position: 'absolute',
42
+ bottom: 0,
43
+ left: 0,
44
+ right: 0
45
+ }}
46
+ name='footer'
47
+ placeholder={i18next.t('页脚')}
48
+ />
49
+ )
50
+
51
+ Footer.propTypes = {
52
+ style: PropTypes.object
53
+ }
54
+
55
+ @inject('printerStore')
56
+ @observer
57
+ class Printer extends React.Component {
58
+ constructor(props) {
59
+ super(props)
60
+
61
+ // 无实际意义,辅助 onReady,见 didMount
62
+ this.state = {}
63
+
64
+ props.printerStore.init(props.config, props.data)
65
+ props.printerStore.setSelected(props.selected)
66
+ props.printerStore.setSelectedRegion(props.selectedRegion)
67
+ }
68
+
69
+ UNSAFE_componentWillReceiveProps(nextProps) {
70
+ if (nextProps.selected !== this.props.selected) {
71
+ this.props.printerStore.setSelected(nextProps.selected)
72
+ }
73
+ if (nextProps.selectedRegion !== this.props.selectedRegion) {
74
+ this.props.printerStore.setSelectedRegion(nextProps.selectedRegion)
75
+ }
76
+ }
77
+
78
+ componentDidMount() {
79
+ const { printerStore, config } = this.props
80
+ const batchPrintConfig = config.batchPrintConfig
81
+
82
+ // 连续打印不需要计算
83
+ if (batchPrintConfig !== 2) {
84
+ // didMount 代表第一次渲染完成
85
+ printerStore.setReady(true)
86
+
87
+ // 开始计算,获取各种数据
88
+ // printerStore.computedPages()
89
+ printerStore.financeComputedPages()
90
+ }
91
+ // Printer 不是立马就呈现出最终样式,有个过程。这个过程需要时间,什么 ready,不太清楚,估借 setState 来获取过程结束时刻
92
+ this.setState({}, () => {
93
+ this.props.onReady()
94
+ })
95
+ }
96
+
97
+ renderBefore() {
98
+ const { printerStore } = this.props
99
+ const { config } = printerStore
100
+
101
+ return (
102
+ <Page>
103
+ <Header config={config.header} pageIndex={0} />
104
+ {_.map(config.contents, (content, index) => {
105
+ switch (content.type) {
106
+ case 'table':
107
+ // eslint-disable-next-line no-case-declarations
108
+ const list = printerStore.data._table[content.dataKey]
109
+ return (
110
+ <Table
111
+ key={`contents.table.${index}`}
112
+ name={`contents.table.${index}`}
113
+ config={content}
114
+ range={{ begin: 0, end: list?.length || 0 }}
115
+ pageIndex={0}
116
+ placeholder={`${i18next.t('区域')} ${index}`}
117
+ />
118
+ )
119
+
120
+ default:
121
+ return (
122
+ <Panel
123
+ key={`contents.panel.${index}`}
124
+ name={`contents.panel.${index}`}
125
+ config={content}
126
+ pageIndex={0}
127
+ placeholder={`${i18next.t('区域')} ${index}`}
128
+ />
129
+ )
130
+ }
131
+ })}
132
+ <Sign config={config.sign} pageIndex={0} />
133
+ <Footer config={config.footer} pageIndex={0} />
134
+ </Page>
135
+ )
136
+ }
137
+
138
+ renderPage() {
139
+ const { printerStore } = this.props
140
+ const { config } = printerStore
141
+ console.log('printerStore', printerStore.pages)
142
+ return (
143
+ <>
144
+ {_.map(printerStore.pages, (page, i) => {
145
+ const isLastPage = i === printerStore.pages.length - 1
146
+
147
+ return (
148
+ <Page key={i}>
149
+ <Header config={config.header} pageIndex={i} />
150
+
151
+ {_.map(page, (panel, ii) => {
152
+ switch (panel.type) {
153
+ case 'table':
154
+ return (
155
+ <Table
156
+ key={`contents.table.${panel.index}.${ii}`}
157
+ name={`contents.table.${panel.index}`}
158
+ config={config.contents[panel.index]}
159
+ range={{
160
+ begin: panel.begin,
161
+ end: panel.end
162
+ }}
163
+ placeholder={`${i18next.t('区域')} ${panel.index}`}
164
+ pageIndex={i}
165
+ />
166
+ )
167
+
168
+ default:
169
+ return (
170
+ <Panel
171
+ key={`contents.panel.${panel.index}`}
172
+ name={`contents.panel.${panel.index}`}
173
+ config={config.contents[panel.index]}
174
+ pageIndex={i}
175
+ placeholder={`${i18next.t('区域')} ${panel.index}`}
176
+ />
177
+ )
178
+ }
179
+ })}
180
+ {isLastPage && (
181
+ <Sign
182
+ config={config.sign}
183
+ pageIndex={i}
184
+ style={{ bottom: config.footer.style.height }}
185
+ />
186
+ )}
187
+ <Footer config={config.footer} pageIndex={i} />
188
+ </Page>
189
+ )
190
+ })}
191
+ </>
192
+ )
193
+ }
194
+
195
+ renderMerge() {
196
+ const { printerStore } = this.props
197
+ const { config } = printerStore
198
+
199
+ return (
200
+ <MergePage>
201
+ <Header config={config.header} pageIndex={0} />
202
+ {_.map(config.contents, (content, index) => {
203
+ switch (content.type) {
204
+ case 'table':
205
+ // eslint-disable-next-line no-case-declarations
206
+ const list = printerStore.data._table[content.dataKey]
207
+ return (
208
+ <Table
209
+ key={`contents.table.${index}`}
210
+ name={`contents.table.${index}`}
211
+ config={content}
212
+ range={{ begin: 0, end: list?.length || 0 }}
213
+ pageIndex={0}
214
+ placeholder={`${i18next.t('区域')} ${index}`}
215
+ />
216
+ )
217
+
218
+ default:
219
+ return (
220
+ <Panel
221
+ key={`contents.panel.${index}`}
222
+ name={`contents.panel.${index}`}
223
+ config={content}
224
+ pageIndex={0}
225
+ placeholder={`${i18next.t('区域')} ${index}`}
226
+ />
227
+ )
228
+ }
229
+ })}
230
+ <Sign config={config.sign} pageIndex={0} />
231
+ <Footer config={config.footer} pageIndex={0} />
232
+ </MergePage>
233
+ )
234
+ }
235
+
236
+ doRender() {
237
+ const { printerStore, config } = this.props
238
+ // batchPrintConfig: 1 不连续打印(纸张会间断)2 连续打印(纸张连续打,不间断)
239
+ const batchPrintConfig = config.batchPrintConfig
240
+ if (batchPrintConfig === 2) {
241
+ return this.renderMerge()
242
+ } else {
243
+ // renderBefore ,拿到各种数据,哪些模块哪些内容放合适位置,切割表格
244
+ // renderPage,最终渲染打印的页面
245
+ return !printerStore.ready ? this.renderBefore() : this.renderPage()
246
+ }
247
+ }
248
+
249
+ render() {
250
+ const {
251
+ selected,
252
+ data,
253
+ config,
254
+ onReady,
255
+ selectedRegion,
256
+ printerStore,
257
+ ...rest
258
+ } = this.props
259
+
260
+ const {
261
+ size: { width },
262
+ className,
263
+ style
264
+ } = printerStore.config.page
265
+ // batchPrintConfig: 1 不连续打印(纸张会间断)2 连续打印(纸张连续打,不间断)
266
+ const batchPrintConfig = config.batchPrintConfig
267
+
268
+ return (
269
+ <div
270
+ {...rest}
271
+ className={classNames('gm-printer', className)}
272
+ style={Object.assign({}, style, {
273
+ width,
274
+ breakAfter: batchPrintConfig === 2 ? 'auto' : 'always'
275
+ })}
276
+ >
277
+ {this.doRender()}
278
+ </div>
279
+ )
280
+ }
281
+ }
282
+
283
+ Printer.propTypes = {
284
+ className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),
285
+ style: PropTypes.object,
286
+ printerStore: PropTypes.object,
287
+ selected: PropTypes.string,
288
+ selectedRegion: PropTypes.string,
289
+ data: PropTypes.object.isRequired,
290
+ config: PropTypes.object.isRequired,
291
+ onReady: PropTypes.func
292
+ }
293
+
294
+ Printer.defaultProps = {
295
+ onReady: _.noop
296
+ }
297
+
298
+ class WithStorePrinter extends React.Component {
299
+ constructor(props) {
300
+ super(props)
301
+ this.printerStore = new PrinterStore()
302
+ }
303
+
304
+ render() {
305
+ return (
306
+ <Provider printerStore={this.printerStore}>
307
+ <Printer {...this.props} />
308
+ </Provider>
309
+ )
310
+ }
311
+ }
312
+
313
+ export default WithStorePrinter
package/src/index.js CHANGED
@@ -16,7 +16,8 @@ import {
16
16
  doPrint,
17
17
  Printer,
18
18
  getCSS,
19
- getPrintContainerHTML
19
+ getPrintContainerHTML,
20
+ doBatchFinancePrint
20
21
  } from './printer'
21
22
  import { MULTI_SUFFIX, MULTI_SUFFIX3 } from './config'
22
23
 
@@ -41,5 +42,6 @@ export {
41
42
  getCSS,
42
43
  MULTI_SUFFIX,
43
44
  MULTI_SUFFIX3,
44
- getPrintContainerHTML
45
+ getPrintContainerHTML,
46
+ doBatchFinancePrint
45
47
  }
@@ -3,6 +3,7 @@ import ReactDOM from 'react-dom'
3
3
  import Printer from './printer'
4
4
  import getCSS from './get_css'
5
5
  import BatchPrinter from './batch_printer'
6
+ import BatchFinancePrinter from '../finance_voucher/components/finance_batch_printer'
6
7
  import { isZoom } from 'gm-util'
7
8
  import { afterImgAndSvgLoaded } from '../util'
8
9
 
@@ -92,6 +93,25 @@ function toDoPrintBatch(list, isPrint = true) {
92
93
  })
93
94
  }
94
95
 
96
+ function toDoPrintFinanceBatch(list, isPrint = true) {
97
+ return new window.Promise(resolve => {
98
+ const $app = $printer.contentWindow.document.getElementById('appContainer')
99
+ ReactDOM.unmountComponentAtNode($app)
100
+ ReactDOM.render(
101
+ <BatchFinancePrinter
102
+ list={list}
103
+ onReady={() => {
104
+ afterImgAndSvgLoaded(() => {
105
+ isPrint && $printer.contentWindow.print()
106
+ resolve()
107
+ }, $app)
108
+ }}
109
+ />,
110
+ $app
111
+ )
112
+ })
113
+ }
114
+
95
115
  function doPrint({ data, config }, isTest) {
96
116
  init({ isTest })
97
117
 
@@ -107,6 +127,16 @@ function doBatchPrint(
107
127
  return toDoPrintBatch(list, extraCofnig.isPrint)
108
128
  }
109
129
 
130
+ function doBatchFinancePrint(
131
+ list,
132
+ isTest,
133
+ extraCofnig = { isPrint: true, isTipZoom: true }
134
+ ) {
135
+ init({ isTest, isTipZoom: extraCofnig.isTipZoom })
136
+
137
+ return toDoPrintFinanceBatch(list, extraCofnig.isPrint)
138
+ }
139
+
110
140
  /**
111
141
  * @description: 获取打印的html
112
142
  */
@@ -114,4 +144,4 @@ function getPrintContainerHTML() {
114
144
  return $printer.contentWindow.document.getElementsByTagName('html')[0]
115
145
  .innerHTML
116
146
  }
117
- export { doPrint, doBatchPrint, getPrintContainerHTML }
147
+ export { doPrint, doBatchPrint, getPrintContainerHTML, doBatchFinancePrint }
@@ -1,6 +1,11 @@
1
1
  import Printer from './printer'
2
2
  import BatchPrinter from './batch_printer'
3
- import { doPrint, doBatchPrint, getPrintContainerHTML } from './do_print'
3
+ import {
4
+ doPrint,
5
+ doBatchPrint,
6
+ getPrintContainerHTML,
7
+ doBatchFinancePrint
8
+ } from './do_print'
4
9
  import getCSS from './get_css'
5
10
 
6
11
  export {
@@ -9,5 +14,6 @@ export {
9
14
  Printer,
10
15
  BatchPrinter,
11
16
  getCSS,
12
- getPrintContainerHTML
17
+ getPrintContainerHTML,
18
+ doBatchFinancePrint
13
19
  }
@@ -299,6 +299,46 @@ class PrinterStore {
299
299
  this.pages.push(page)
300
300
  }
301
301
 
302
+ @action
303
+ financeComputedPages() {
304
+ // 当前在处理 contents 的索引
305
+ let index = 0
306
+ /** 一页承载的内容. [object, object, ...] */
307
+ let page = []
308
+ const pageFixLineNum = this.config.financeSpecialConfig.pageFixLineNum
309
+ while (index < this.config.contents.length) {
310
+ const content = this.config.contents[index]
311
+ // debugger
312
+ const table = this.tablesInfo[`contents.table.${index}`]
313
+ // 表格行的索引,用于table.slice(begin, end), 分割到不同页面中
314
+ let begin = 0
315
+ let end = 0
316
+
317
+ if (content.type === 'table') {
318
+ while (end < table.body.heights.length) {
319
+ end += pageFixLineNum
320
+ page.push({
321
+ type: 'table',
322
+ index,
323
+ begin,
324
+ end
325
+ })
326
+ this.pages.push(page)
327
+ page = []
328
+ begin = end
329
+ }
330
+ index++
331
+ } else {
332
+ page.push({
333
+ type: 'panel',
334
+ index
335
+ })
336
+ index++
337
+ }
338
+ }
339
+ // this.pages.push(page)
340
+ }
341
+
302
342
  template(text, pageIndex) {
303
343
  // 做好保护,出错就返回 text
304
344
  try {
@@ -334,6 +374,30 @@ class PrinterStore {
334
374
  }
335
375
  }
336
376
 
377
+ /**
378
+ * 配送单的定制化需求:限制表格里的字的个数,超出显示'...'
379
+ */
380
+ templateFinance(text, dataKey, index, pageIndex) {
381
+ // 做好保护,出错就返回 text
382
+ try {
383
+ const list = this.data._table[dataKey] || this.data._table.orders
384
+
385
+ let res = _.template(text, {
386
+ interpolate: /{{([\s\S]+?)}}/g
387
+ })({
388
+ ...this.data.common,
389
+ [i18next.t('列')]: list[index],
390
+ [i18next.t('当前页码')]: pageIndex + 1,
391
+ [i18next.t('页码总数')]: this.pages.length,
392
+ price: price // 提供一个价格处理函数
393
+ })
394
+ res = res.length > 9 ? `${res.slice(0, 9)}...` : res
395
+ return res
396
+ } catch (err) {
397
+ return text
398
+ }
399
+ }
400
+
337
401
  templateSpecialDetails(col, dataKey, index) {
338
402
  // 做好保护,出错就返回 text
339
403
  const { specialDetailsKey, text, detailLastColType, separator } = col
@@ -205,7 +205,13 @@ class Table extends React.Component {
205
205
  }
206
206
 
207
207
  return (
208
- <table>
208
+ <table
209
+ style={{
210
+ // td会撑开table的宽度
211
+ tableLayout: 'inherit',
212
+ wordBreak: 'break-all'
213
+ }}
214
+ >
209
215
  <thead>
210
216
  <tr style={{ height: `${customerRowHeight}px` }}>
211
217
  {_.map(columns, (col, i) => (