gm-printer 10.42.2 → 10.42.3-beta.1

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.
@@ -1,11 +1,15 @@
1
1
  import React from 'react'
2
2
  import PropTypes from 'prop-types'
3
3
  import _ from 'lodash'
4
- import { coverDigit2Uppercase, getDataKey, isMultiTable } from '../util'
4
+ import {
5
+ coverDigit2Uppercase,
6
+ getDataKey,
7
+ isMultiTable,
8
+ maskedSum
9
+ } from '../util'
5
10
  import { MULTI_SUFFIX, MULTI_SUFFIX3 } from '../config'
6
11
  import { observer } from 'mobx-react'
7
12
  import classNames from 'classnames'
8
- import Big from 'big.js'
9
13
 
10
14
  function buildTemplateField(fieldStr, suffix) {
11
15
  // 如果 field 是 "{{列.下单数}}",提取出 "下单数"
@@ -45,39 +49,18 @@ const DiySummary = props => {
45
49
 
46
50
  // 计算合计
47
51
  const sumData = field => {
48
- if (isMulti) {
49
- return _.reduce(
50
- tableData,
51
- (a, b, i) => {
52
- let result = a
53
- // 先通过 templateTable 获取原始字段的值
54
- const bRes = getRes(field, i)
55
- result = a.plus(+bRes || 0)
56
-
57
- // 双栏
58
- const multiField = buildTemplateField(field, MULTI_SUFFIX)
59
- result = result.plus(+getRes(multiField, i) || 0)
60
-
61
- // 三栏
62
- const multiField3 = buildTemplateField(field, MULTI_SUFFIX3)
63
- result = result.plus(+getRes(multiField3, i) || 0)
64
-
65
- return result
66
- },
67
- Big(0)
68
- ).toFixed(2)
69
- }
70
-
71
- return _.reduce(
72
- tableData,
73
- (a, b, i) => {
74
- let result = a
75
- const bRes = getRes(field, i)
76
- result = a.plus(+bRes || 0)
77
- return result
78
- },
79
- Big(0)
80
- ).toFixed(2)
52
+ // 收集本列渲染结果(含多栏后缀列),任一脱敏 '***' 则合计显 '***'
53
+ // 注意:基于渲染后字符串判定,假设模板整格就是脱敏值;带前后缀的模板(如 '{{列.金额}}元')无法识别
54
+ const values = []
55
+ _.each(tableData, (b, i) => {
56
+ values.push(getRes(field, i))
57
+ if (isMulti) {
58
+ // 双栏/三栏取后缀字段
59
+ values.push(getRes(buildTemplateField(field, MULTI_SUFFIX), i))
60
+ values.push(getRes(buildTemplateField(field, MULTI_SUFFIX3), i))
61
+ }
62
+ })
63
+ return maskedSum(values)
81
64
 
82
65
  function getRes(field, i) {
83
66
  return printerStore
@@ -4,7 +4,7 @@ import PropTypes from 'prop-types'
4
4
  import _ from 'lodash'
5
5
  import { MULTI_SUFFIX, MULTI_SUFFIX3 } from '../config'
6
6
  import Big from 'big.js'
7
- import { coverDigit2Uppercase, getDataKey } from '../util'
7
+ import { coverDigit2Uppercase, getDataKey, maskedSum } from '../util'
8
8
  import { observer } from 'mobx-react'
9
9
  import { get } from 'mobx'
10
10
  import classNames from 'classnames'
@@ -76,21 +76,18 @@ const SubtotalTr = props => {
76
76
  if (field === 'real_item_price') field = '出库金额'
77
77
  if (field === 'settle_money2') field = '结算金额'
78
78
  if (field === 'total_money2') field = '金额'
79
- return _.reduce(
80
- list,
81
- (a, b) => {
82
- let result = a
83
- result = a.plus(b[field] || 0)
84
- if (b?.[field + MULTI_SUFFIX]) {
85
- result = result.plus(b?.[field + MULTI_SUFFIX])
86
- }
87
- if (b?.[field + MULTI_SUFFIX3]) {
88
- result = result.plus(b?.[field + MULTI_SUFFIX3])
89
- }
90
- return result
91
- },
92
- Big(0)
93
- ).toFixed(2)
79
+ // 收集本列所有值(含多栏后缀列),任一脱敏 '***' 则合计显 '***',否则 Big('***') 会崩溃
80
+ const values = []
81
+ _.each(list, b => {
82
+ values.push(b[field])
83
+ if (b?.[field + MULTI_SUFFIX]) {
84
+ values.push(b[field + MULTI_SUFFIX])
85
+ }
86
+ if (b?.[field + MULTI_SUFFIX3]) {
87
+ values.push(b[field + MULTI_SUFFIX3])
88
+ }
89
+ })
90
+ return maskedSum(values)
94
91
  }
95
92
 
96
93
  const getData = field => {
package/src/util.js CHANGED
@@ -120,7 +120,23 @@ function getOverallOrderTrHeight(overallOrder) {
120
120
  }
121
121
 
122
122
  // eslint-disable-next-line
123
+ // 成本权限脱敏值:后端对无成本权限用户的金额字段返回 '***'(商品维度混合脱敏)
124
+ const MASKED_VALUE = '***'
125
+ const isMaskedValue = v => v === MASKED_VALUE
126
+
127
+ /**
128
+ * 脱敏感知求和:任一值为 '***' 则整体返回 '***'(口径:合计不能暴露脱敏行的贡献)
129
+ * 非数字值按 0 容错,同时兼容原始数值字段与渲染后字符串
130
+ * @param {Array} values 参与求和的值
131
+ */
132
+ const maskedSum = values => {
133
+ if (values.some(isMaskedValue)) return MASKED_VALUE
134
+ return values.reduce((a, b) => a.plus(+b || 0), Big(0)).toFixed(2)
135
+ }
136
+
123
137
  const coverDigit2Uppercase = n => {
138
+ // 脱敏值直接透传:否则 Math.abs('***') 得 NaN,Big(NaN) 会抛异常
139
+ if (isMaskedValue(n)) return MASKED_VALUE
124
140
  if (_.isNil(n) || _.isNaN(n)) {
125
141
  return '-'
126
142
  }
@@ -384,5 +400,8 @@ export {
384
400
  caclSingleDetailsPageHeight,
385
401
  getArrayMid,
386
402
  getColSpanLength,
387
- getOverallOrderTrHeight
403
+ getOverallOrderTrHeight,
404
+ MASKED_VALUE,
405
+ isMaskedValue,
406
+ maskedSum
388
407
  }