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 +2 -2
- package/packages/utils/other.js +44 -25
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sh-tools",
|
|
3
|
-
"version": "2.3.
|
|
4
|
-
"description": "基于fetch和xe-utils
|
|
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"
|
package/packages/utils/other.js
CHANGED
|
@@ -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
|
|
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
|
|
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
|
-
|
|
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 =
|
|
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' ||
|
|
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 (
|
|
193
|
-
rvalue =
|
|
194
|
-
} else if (!$vUtils.isNone(value) &&
|
|
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) &&
|
|
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(
|
|
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
|
|
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 (
|
|
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 (
|
|
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 =
|
|
302
|
+
rtext = rvalue
|
|
284
303
|
}
|
|
285
|
-
return { rvalue, rtext }
|
|
304
|
+
return { rvalue, rtext, rcaculate, rname }
|
|
286
305
|
}
|
|
287
306
|
}
|