sh-tools 2.3.0 → 2.3.2

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/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "sh-tools",
3
- "version": "2.3.0",
4
- "description": "基于fetch和xe-utils二次封装,支持宏公式计算,及notification提示窗",
3
+ "version": "2.3.2",
4
+ "description": "基于fetch和xe-utils二次封装,支持宏公式计算",
5
5
  "main": "packages/index.js",
6
6
  "scripts": {
7
7
  "lib": "vue-cli-service build --target lib packages/index.js --name sh-tools --dest lib"
@@ -1,4 +1,15 @@
1
1
  import XEUtils from 'xe-utils'
2
+ const defaultDateFormat = {
3
+ date: 'yyyy-MM-dd',
4
+ time: 'HH:mm:ss',
5
+ datetime: 'yyyy-MM-dd HH:mm:ss',
6
+ month: 'yyyy-MM',
7
+ week: 'yyyy-MM-dd',
8
+ year: 'yyyy'
9
+ }
10
+ const endStrs = ['Id', '_id']
11
+ const numberTypes = ['integer', 'number', 'float']
12
+ const dateReplaceMap = { YYYY: 'yyyy', DD: 'dd', hh: 'HH' }
2
13
 
3
14
  export default {
4
15
  toDateDiffText(date) {
@@ -146,20 +157,13 @@ export default {
146
157
  // 封装 系统内对渲染器格式化方法
147
158
  formatRender(value, key, rowData, renderName, renderProps, renderContext, editable) {
148
159
  // editable: 是否对返回值进行修正 默认 否
149
- let rvalue, rtext, rname
150
- let { $vUtils, $vxePluginNames } = renderContext
160
+ let rvalue, rtext, rname, rcaculate
161
+ let { $vUtils } = renderContext
151
162
  let { min, max, digits, type, multiple, split, options, format, range, nodeKey, labelField, moneyUnit, openValue, openLabel, closeValue, closeLabel, defaultValue, separator } =
152
163
  renderProps || {}
153
- let defaultDateFormat = {
154
- date: 'yyyy-MM-dd',
155
- time: 'HH:mm:ss',
156
- datetime: 'yyyy-MM-dd HH:mm:ss',
157
- month: 'yyyy-MM',
158
- week: 'yyyy-MM-dd',
159
- year: 'yyyy'
160
- }
164
+ let field = key
161
165
  if (renderName === '$vRowCell') {
162
- let field = rowData[key + 'field'] || key
166
+ field = rowData[key + 'field'] || key
163
167
  rname = rowData[field + 'RenderName'] || '$vInput'
164
168
  } else {
165
169
  rname = renderName
@@ -167,7 +171,21 @@ export default {
167
171
  // 对于多选获取数组类型值进行解析 赋值
168
172
  let oriArray = []
169
173
  // 配置公式,优先取解析后的嵌套公式
170
- let formula = $vUtils.get(renderProps, `formulaMap.${key}`) || renderProps.formula
174
+ let formula = renderProps.formula
175
+ let formulaList = $vUtils.get(renderProps, 'formulaList') || []
176
+ let caculateConfig = $vUtils.get(renderProps, 'caculateConfig') || {}
177
+ let caculateEnable = caculateConfig.enabled && (caculateConfig.type === 'all' || (caculateConfig.type === 'edit' && editable))
178
+ if (caculateEnable && formulaList.length > 0) {
179
+ for (let i = 0; i < formulaList.length; i++) {
180
+ let item = formulaList[i]
181
+ if (!item.content || !item.field) continue
182
+ rcaculate = $vUtils.calculate(item.content, rowData)
183
+ $vUtils.set(rowData, item.field, rcaculate)
184
+ if (item.field === field) break
185
+ }
186
+ } else if (caculateEnable && formula) {
187
+ rcaculate = $vUtils.calculate(formula, rowData)
188
+ }
171
189
  // 进行默认赋值 若没有任何解析原数返回
172
190
  rvalue = value
173
191
  if (!$vUtils.isNone(defaultValue) && $vUtils.isNone(value)) {
@@ -180,7 +198,7 @@ export default {
180
198
  switch (rname) {
181
199
  case '$vInput':
182
200
  case '$vMoney':
183
- let isNumberType = rname === '$vMoney' || ['integer', 'number', 'float'].includes(type)
201
+ let isNumberType = rname === '$vMoney' || numberTypes.includes(type)
184
202
  if (editable && isNumberType && !$vUtils.isNone(value)) {
185
203
  if ($vUtils.isNumber(+max) && +value > +max) {
186
204
  value = +max
@@ -189,11 +207,11 @@ export default {
189
207
  }
190
208
  }
191
209
  // 首先提取公式进行公式计算
192
- if (formula) {
193
- rvalue = $vUtils.calculate(formula, rowData)
194
- } else if (!$vUtils.isNone(value) && ['integer'].includes(type)) {
210
+ if (rcaculate !== undefined) {
211
+ rvalue = rcaculate
212
+ } else if (!$vUtils.isNone(value) && type === 'integer') {
195
213
  rvalue = $vUtils.toInteger(value)
196
- } else if (!$vUtils.isNone(value) && ['number', 'float'].includes(type)) {
214
+ } else if (!$vUtils.isNone(value) && numberTypes.includes(type)) {
197
215
  rvalue = $vUtils.truncate(value, digits)
198
216
  }
199
217
  if (rname === '$vMoney' && !$vUtils.isNone(rvalue)) {
@@ -205,7 +223,7 @@ export default {
205
223
  }
206
224
  break
207
225
  case '$vTime':
208
- format = format ? format.replace('YYYY', 'yyyy').replace('DD', 'dd').replace('hh', 'HH') : defaultDateFormat[type]
226
+ format = format ? format.replace(dateReplaceMap, match => dateReplaceMap[match]) : defaultDateFormat[type]
209
227
  if ($vUtils.isNumber(value)) value = String(value)
210
228
  if (range && Array.isArray(value) && format) {
211
229
  rvalue = value.map(item => $vUtils.toDateString(item || '', format))
@@ -223,15 +241,16 @@ export default {
223
241
  case '$vUpload':
224
242
  case '$vTree':
225
243
  let prefixKey = key
226
- const endStrs = ['Id', '_id']
227
- endStrs.forEach(end => {
244
+ for (const end of endStrs) {
228
245
  if (String(key).endsWith(end)) {
229
246
  prefixKey = key.replace(end, '')
247
+ break
230
248
  }
231
- })
249
+ }
232
250
  let isMutiple = multiple || ['$vCheckgroup', '$vUpload'].includes(rname)
233
251
  let optionValue = 'value'
234
252
  let optionLabel = 'label'
253
+ let hasOptions = options && options.length > 0
235
254
  if (rname === '$vTree') {
236
255
  optionValue = nodeKey || 'id'
237
256
  if (labelField) optionLabel = labelField
@@ -243,7 +262,7 @@ export default {
243
262
  oriArray = String(value).split(split)
244
263
  }
245
264
  oriArray = oriArray.filter(item => !$vUtils.isNone(item))
246
- if (options && options.length) {
265
+ if (hasOptions) {
247
266
  let rns = oriArray.map(orv => {
248
267
  let valueOption = options.find(option => $vUtils.isEqual(option[optionValue], orv))
249
268
  return valueOption ? valueOption[optionLabel] : ''
@@ -254,7 +273,7 @@ export default {
254
273
  }
255
274
  rvalue = oriArray
256
275
  } else {
257
- if (options && options.length) {
276
+ if (hasOptions) {
258
277
  let valueOption = options.find(option => $vUtils.isEqual(option[optionValue], value))
259
278
  rtext = valueOption ? valueOption[optionLabel] : ''
260
279
  } else {
@@ -280,8 +299,8 @@ export default {
280
299
  }
281
300
  break
282
301
  default:
283
- rtext = String(rvalue)
302
+ rtext = rvalue
284
303
  }
285
- return { rvalue, rtext }
304
+ return { rvalue, rtext, rcaculate, rname }
286
305
  }
287
306
  }