hy-app 0.5.9 → 0.5.10
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/components/hy-check-button/hy-check-button.vue +3 -3
- package/components/hy-input/hy-input.vue +1 -1
- package/components/hy-input/index.scss +5 -0
- package/components/hy-line-progress/index.scss +1 -0
- package/components/hy-textarea/hy-textarea.vue +1 -1
- package/components/hy-textarea/index.scss +5 -0
- package/libs/css/theme.scss +1 -1
- package/libs/utils/inside.ts +260 -271
- package/package.json +2 -2
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<view class="hy-check-button">
|
|
3
3
|
<template v-for="(item, i) in columns_1" :key="i">
|
|
4
|
-
<
|
|
5
|
-
:text="item?.[fieldNames.label]
|
|
4
|
+
<hy-tag
|
|
5
|
+
:text="item?.[fieldNames.label]"
|
|
6
6
|
:name="i"
|
|
7
7
|
:type="type"
|
|
8
8
|
:size="size"
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
:disabled="isDisabled(item.disabled)"
|
|
11
11
|
:plain="!item?.[fieldNames.checked]"
|
|
12
12
|
@click="onCheckbox"
|
|
13
|
-
></
|
|
13
|
+
></hy-tag>
|
|
14
14
|
</template>
|
|
15
15
|
</view>
|
|
16
16
|
</template>
|
|
@@ -177,7 +177,7 @@ const isShowClear = computed(() => {
|
|
|
177
177
|
const inputClass = computed((): string => {
|
|
178
178
|
let classes: string[] = [],
|
|
179
179
|
{ border, shape } = props
|
|
180
|
-
border === 'surround' && (classes = classes.concat(['hy-
|
|
180
|
+
border === 'surround' && (classes = classes.concat(['hy-input__border', 'hy-input__radius']))
|
|
181
181
|
classes.push(`hy-input__${shape}`)
|
|
182
182
|
border === 'bottom' && (classes = classes.concat(['hy-border__bottom', 'hy-input__no-radius']))
|
|
183
183
|
props.disabled && classes.push('hy-input__disabled')
|
|
@@ -111,7 +111,7 @@ watch(
|
|
|
111
111
|
// 组件的类名
|
|
112
112
|
const textareaClass = computed(() => {
|
|
113
113
|
let classes: string[] = []
|
|
114
|
-
props.border === 'surround' && (classes = classes.concat(['hy-
|
|
114
|
+
props.border === 'surround' && (classes = classes.concat(['hy-textarea__border', 'hy-textarea__radius']))
|
|
115
115
|
props.border === 'bottom' &&
|
|
116
116
|
(classes = classes.concat(['hy-border__bottom', 'hy-textarea__no-radius']))
|
|
117
117
|
props.disabled && classes.push('hy-textarea__disabled')
|
package/libs/css/theme.scss
CHANGED
|
@@ -93,4 +93,4 @@ $hy-border-margin-padding-sm: var(--hy-border-margin-padding-sm, 10rpx) !default
|
|
|
93
93
|
$hy-border-margin-padding-base: var(--hy-border-margin-padding-base, 20rpx) !default;
|
|
94
94
|
$hy-border-margin-padding-lg: var(--hy-border-margin-padding-lg, 30rpx) !default;
|
|
95
95
|
/* 底部线条 */
|
|
96
|
-
$hy-border-line: var(--hy-border-line,
|
|
96
|
+
$hy-border-line: var(--hy-border-line, 1px solid #e8e8e8) !default;
|
package/libs/utils/inside.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// 内部使用方法
|
|
2
|
-
import { inject } from
|
|
2
|
+
import { inject } from 'vue'
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* 生成bem规则类名
|
|
@@ -12,39 +12,37 @@ import { inject } from "vue";
|
|
|
12
12
|
* @returns {Array|string}
|
|
13
13
|
*/
|
|
14
14
|
export const bem = (
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
15
|
+
name: string,
|
|
16
|
+
props: Record<string, any>,
|
|
17
|
+
fixed: string[],
|
|
18
|
+
change?: string[]
|
|
19
19
|
): string | string[] => {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
);
|
|
47
|
-
};
|
|
20
|
+
// 类名前缀
|
|
21
|
+
const prefix = `hy-${name}--`
|
|
22
|
+
const classes: Record<string, string | boolean> = {}
|
|
23
|
+
if (fixed) {
|
|
24
|
+
fixed.map((item: string) => {
|
|
25
|
+
// 这里的类名,会一直存在
|
|
26
|
+
classes[prefix + props[item]] = true
|
|
27
|
+
if (item === 'type' && props['plain']) {
|
|
28
|
+
classes[prefix + props[item] + '__plain'] = true
|
|
29
|
+
}
|
|
30
|
+
})
|
|
31
|
+
}
|
|
32
|
+
if (change) {
|
|
33
|
+
change.map((item: string) => {
|
|
34
|
+
// 这里的类名,会根据this[item]的值为true或者false,而进行添加或者移除某一个类
|
|
35
|
+
props[item] ? (classes[prefix + item] = props[item]) : delete classes[prefix + item]
|
|
36
|
+
})
|
|
37
|
+
}
|
|
38
|
+
return (
|
|
39
|
+
Object.keys(classes)
|
|
40
|
+
// 支付宝,头条小程序无法动态绑定一个数组类名,否则解析出来的结果会带有",",而导致失效
|
|
41
|
+
// #ifdef MP-ALIPAY || MP-TOUTIAO || MP-LARK
|
|
42
|
+
.join(' ')
|
|
43
|
+
// #endif
|
|
44
|
+
)
|
|
45
|
+
}
|
|
48
46
|
|
|
49
47
|
/**
|
|
50
48
|
* @description 在u-form的子组件内容发生变化,或者失去焦点时,尝试通知u-form执行校验方法
|
|
@@ -52,13 +50,13 @@ export const bem = (
|
|
|
52
50
|
* @param {*} event
|
|
53
51
|
*/
|
|
54
52
|
export function formValidate(event) {
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
53
|
+
// const formItem = $parent.call(instance, "u-form-item");
|
|
54
|
+
const form = inject('uForm')
|
|
55
|
+
// 如果发生变化的input或者textarea等,其父组件中有u-form-item或者u-form等,就执行form的validate方法
|
|
56
|
+
// 同时将form-item的pros传递给form,让其进行精确对象验证
|
|
57
|
+
// if (formItem && form) {
|
|
58
|
+
// form.validateField(formItem.prop, () => {}, event);
|
|
59
|
+
// }
|
|
62
60
|
}
|
|
63
61
|
|
|
64
62
|
/**
|
|
@@ -66,19 +64,19 @@ export function formValidate(event) {
|
|
|
66
64
|
* @param {*} err 错误内容
|
|
67
65
|
*/
|
|
68
66
|
export function error(err: string) {
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
67
|
+
// 开发环境才提示,生产环境不会提示
|
|
68
|
+
if (process.env.NODE_ENV === 'development') {
|
|
69
|
+
console.error(`华玥组件提示:${err}`)
|
|
70
|
+
}
|
|
73
71
|
}
|
|
74
72
|
|
|
75
73
|
export const sleep = (value = 100) => {
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
}
|
|
74
|
+
return new Promise((resolve) => {
|
|
75
|
+
setTimeout(() => {
|
|
76
|
+
resolve(null)
|
|
77
|
+
}, value)
|
|
78
|
+
})
|
|
79
|
+
}
|
|
82
80
|
|
|
83
81
|
/**
|
|
84
82
|
* @param {Number} len uuid的长度
|
|
@@ -86,219 +84,214 @@ export const sleep = (value = 100) => {
|
|
|
86
84
|
* @param {Nubmer} radix 生成uuid的基数(意味着返回的字符串都是这个基数),2-二进制,8-八进制,10-十进制,16-十六进制
|
|
87
85
|
*/
|
|
88
86
|
export function guid(len = 32, firstU = true, radix = null) {
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
radix = radix || chars.length;
|
|
87
|
+
const chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('')
|
|
88
|
+
const uuid = []
|
|
89
|
+
radix = radix || chars.length
|
|
93
90
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
91
|
+
if (len) {
|
|
92
|
+
// 如果指定uuid长度,只是取随机的字符,0|x为位运算,能去掉x的小数位,返回整数位
|
|
93
|
+
for (let i = 0; i < len; i++) uuid[i] = chars[0 | (Math.random() * radix)]
|
|
94
|
+
} else {
|
|
95
|
+
let r
|
|
96
|
+
// rfc4122标准要求返回的uuid中,某些位为固定的字符
|
|
97
|
+
uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-'
|
|
98
|
+
uuid[14] = '4'
|
|
102
99
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
100
|
+
for (let i = 0; i < 36; i++) {
|
|
101
|
+
if (!uuid[i]) {
|
|
102
|
+
r = 0 | (Math.random() * 16)
|
|
103
|
+
uuid[i] = chars[i == 19 ? (r & 0x3) | 0x8 : r]
|
|
104
|
+
}
|
|
105
|
+
}
|
|
108
106
|
}
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
return uuid.join("");
|
|
107
|
+
// 移除第一个字符,并用u替代,因为第一个字符为数值时,该guuid不能用作id或者class
|
|
108
|
+
if (firstU) {
|
|
109
|
+
uuid.shift()
|
|
110
|
+
return `hy${uuid.join('')}`
|
|
111
|
+
}
|
|
112
|
+
return uuid.join('')
|
|
116
113
|
}
|
|
117
114
|
|
|
118
115
|
/**
|
|
119
116
|
* @description 获取设备信息
|
|
120
117
|
* */
|
|
121
118
|
export const getWindowInfo = (): UniNamespace.GetWindowInfoResult => {
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
}
|
|
119
|
+
let ret: UniNamespace.GetWindowInfoResult
|
|
120
|
+
// #ifdef APP || H5
|
|
121
|
+
ret = uni.getWindowInfo()
|
|
122
|
+
// #endif
|
|
123
|
+
// #ifndef APP || H5
|
|
124
|
+
ret = uni.getSystemInfoSync()
|
|
125
|
+
// #endif
|
|
126
|
+
return ret
|
|
127
|
+
}
|
|
131
128
|
|
|
132
129
|
function pickExclude(obj, keys) {
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
Object.prototype.toString.call(obj),
|
|
137
|
-
)
|
|
138
|
-
) {
|
|
139
|
-
return {};
|
|
140
|
-
}
|
|
141
|
-
return Object.keys(obj).reduce((prev, key) => {
|
|
142
|
-
if (!keys.includes(key)) {
|
|
143
|
-
prev[key] = obj[key];
|
|
130
|
+
// 某些情况下,type可能会为
|
|
131
|
+
if (!['[object Object]', '[object File]'].includes(Object.prototype.toString.call(obj))) {
|
|
132
|
+
return {}
|
|
144
133
|
}
|
|
145
|
-
return prev
|
|
146
|
-
|
|
134
|
+
return Object.keys(obj).reduce((prev, key) => {
|
|
135
|
+
if (!keys.includes(key)) {
|
|
136
|
+
prev[key] = obj[key]
|
|
137
|
+
}
|
|
138
|
+
return prev
|
|
139
|
+
}, {})
|
|
147
140
|
}
|
|
148
141
|
|
|
149
142
|
function formatImage(res) {
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
143
|
+
return res.tempFiles.map((item) => ({
|
|
144
|
+
...pickExclude(item, ['path']),
|
|
145
|
+
type: 'image',
|
|
146
|
+
url: item.path,
|
|
147
|
+
thumb: item.path,
|
|
148
|
+
size: item.size,
|
|
149
|
+
// #ifdef H5
|
|
150
|
+
name: item.name,
|
|
151
|
+
file: item
|
|
152
|
+
// #endif
|
|
153
|
+
}))
|
|
161
154
|
}
|
|
162
155
|
|
|
163
156
|
function formatVideo(res) {
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
157
|
+
return [
|
|
158
|
+
{
|
|
159
|
+
...pickExclude(res, ['tempFilePath', 'thumbTempFilePath', 'errMsg']),
|
|
160
|
+
type: 'video',
|
|
161
|
+
url: res.tempFilePath,
|
|
162
|
+
thumb: res.thumbTempFilePath,
|
|
163
|
+
size: res.size,
|
|
164
|
+
// #ifdef H5
|
|
165
|
+
name: res.name,
|
|
166
|
+
file: res
|
|
167
|
+
// #endif
|
|
168
|
+
}
|
|
169
|
+
]
|
|
177
170
|
}
|
|
178
171
|
|
|
179
172
|
function formatMedia(res) {
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
173
|
+
return res.tempFiles.map((item) => ({
|
|
174
|
+
...pickExclude(item, ['fileType', 'thumbTempFilePath', 'tempFilePath']),
|
|
175
|
+
type: res.type,
|
|
176
|
+
url: item.tempFilePath,
|
|
177
|
+
thumb: res.type === 'video' ? item.thumbTempFilePath : item.tempFilePath,
|
|
178
|
+
size: item.size,
|
|
179
|
+
// #ifdef H5
|
|
180
|
+
file: item
|
|
181
|
+
// #endif
|
|
182
|
+
}))
|
|
190
183
|
}
|
|
191
184
|
|
|
192
185
|
function formatFile(res) {
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
186
|
+
return res.tempFiles.map((item) => ({
|
|
187
|
+
...pickExclude(item, ['path']),
|
|
188
|
+
url: item.path,
|
|
189
|
+
size: item.size,
|
|
190
|
+
// #ifdef H5
|
|
191
|
+
name: item.name,
|
|
192
|
+
type: item.type,
|
|
193
|
+
file: item
|
|
194
|
+
// #endif
|
|
195
|
+
}))
|
|
203
196
|
}
|
|
204
197
|
|
|
205
198
|
export function chooseFile({
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
199
|
+
accept,
|
|
200
|
+
multiple,
|
|
201
|
+
capture,
|
|
202
|
+
compressed,
|
|
203
|
+
maxDuration,
|
|
204
|
+
sizeType,
|
|
205
|
+
camera,
|
|
206
|
+
maxCount,
|
|
207
|
+
extension
|
|
215
208
|
}: any) {
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
209
|
+
return new Promise((resolve, reject) => {
|
|
210
|
+
switch (accept) {
|
|
211
|
+
case 'image':
|
|
212
|
+
uni.chooseImage({
|
|
213
|
+
count: multiple ? Math.min(maxCount, 9) : 1,
|
|
214
|
+
sourceType: capture,
|
|
215
|
+
sizeType,
|
|
216
|
+
success: (res) => resolve(formatImage(res)),
|
|
217
|
+
fail: reject
|
|
218
|
+
})
|
|
219
|
+
break
|
|
220
|
+
// #ifdef MP-WEIXIN
|
|
221
|
+
// 只有微信小程序才支持chooseMedia接口
|
|
222
|
+
case 'media':
|
|
223
|
+
wx.chooseMedia({
|
|
224
|
+
count: multiple ? Math.min(maxCount, 9) : 1,
|
|
225
|
+
sourceType: capture,
|
|
226
|
+
maxDuration,
|
|
227
|
+
sizeType,
|
|
228
|
+
camera,
|
|
229
|
+
success: (res) => resolve(formatMedia(res)),
|
|
230
|
+
fail: reject
|
|
231
|
+
})
|
|
232
|
+
break
|
|
233
|
+
// #endif
|
|
234
|
+
case 'video':
|
|
235
|
+
uni.chooseVideo({
|
|
236
|
+
sourceType: capture,
|
|
237
|
+
compressed,
|
|
238
|
+
maxDuration,
|
|
239
|
+
camera,
|
|
240
|
+
success: (res) => resolve(formatVideo(res)),
|
|
241
|
+
fail: reject
|
|
242
|
+
})
|
|
243
|
+
break
|
|
244
|
+
// #ifdef MP-WEIXIN || H5
|
|
245
|
+
// 只有微信小程序才支持chooseMessageFile接口
|
|
246
|
+
case 'file':
|
|
247
|
+
// #ifdef MP-WEIXIN
|
|
248
|
+
wx.chooseMessageFile({
|
|
249
|
+
count: multiple ? maxCount : 1,
|
|
250
|
+
type: accept,
|
|
251
|
+
success: (res) => resolve(formatFile(res)),
|
|
252
|
+
fail: reject
|
|
253
|
+
})
|
|
254
|
+
// #endif
|
|
255
|
+
// #ifdef H5
|
|
256
|
+
// 需要hx2.9.9以上才支持uni.chooseFile
|
|
257
|
+
let params = {
|
|
258
|
+
count: multiple ? maxCount : 1,
|
|
259
|
+
type: accept,
|
|
260
|
+
success: (res) => resolve(formatFile(res)),
|
|
261
|
+
fail: reject
|
|
262
|
+
}
|
|
263
|
+
if (extension.length && extension.length > 0) {
|
|
264
|
+
params.extension = extension
|
|
265
|
+
}
|
|
266
|
+
uni.chooseFile(params)
|
|
267
|
+
// #endif
|
|
268
|
+
break
|
|
269
|
+
// #endif
|
|
270
|
+
default:
|
|
271
|
+
// 此为保底选项,在accept不为上面任意一项的时候选取全部文件
|
|
272
|
+
// #ifdef MP-WEIXIN
|
|
273
|
+
wx.chooseMessageFile({
|
|
274
|
+
count: multiple ? maxCount : 1,
|
|
275
|
+
type: 'all',
|
|
276
|
+
success: (res) => resolve(formatFile(res)),
|
|
277
|
+
fail: reject
|
|
278
|
+
})
|
|
279
|
+
// #endif
|
|
280
|
+
// #ifdef H5
|
|
281
|
+
// 需要hx2.9.9以上才支持uni.chooseFile
|
|
282
|
+
let paramsFile = {
|
|
283
|
+
count: multiple ? maxCount : 1,
|
|
284
|
+
type: 'all',
|
|
285
|
+
success: (res) => resolve(formatFile(res)),
|
|
286
|
+
fail: reject
|
|
287
|
+
}
|
|
288
|
+
if (extension.length && extension.length > 0) {
|
|
289
|
+
paramsFile.extension = extension
|
|
290
|
+
}
|
|
291
|
+
uni.chooseFile(paramsFile)
|
|
292
|
+
// #endif
|
|
272
293
|
}
|
|
273
|
-
|
|
274
|
-
// #endif
|
|
275
|
-
break;
|
|
276
|
-
// #endif
|
|
277
|
-
default:
|
|
278
|
-
// 此为保底选项,在accept不为上面任意一项的时候选取全部文件
|
|
279
|
-
// #ifdef MP-WEIXIN
|
|
280
|
-
wx.chooseMessageFile({
|
|
281
|
-
count: multiple ? maxCount : 1,
|
|
282
|
-
type: "all",
|
|
283
|
-
success: (res) => resolve(formatFile(res)),
|
|
284
|
-
fail: reject,
|
|
285
|
-
});
|
|
286
|
-
// #endif
|
|
287
|
-
// #ifdef H5
|
|
288
|
-
// 需要hx2.9.9以上才支持uni.chooseFile
|
|
289
|
-
let paramsFile = {
|
|
290
|
-
count: multiple ? maxCount : 1,
|
|
291
|
-
type: "all",
|
|
292
|
-
success: (res) => resolve(formatFile(res)),
|
|
293
|
-
fail: reject,
|
|
294
|
-
};
|
|
295
|
-
if (extension.length && extension.length > 0) {
|
|
296
|
-
paramsFile.extension = extension;
|
|
297
|
-
}
|
|
298
|
-
uni.chooseFile(paramsFile);
|
|
299
|
-
// #endif
|
|
300
|
-
}
|
|
301
|
-
});
|
|
294
|
+
})
|
|
302
295
|
}
|
|
303
296
|
|
|
304
297
|
/**
|
|
@@ -310,30 +303,29 @@ export function chooseFile({
|
|
|
310
303
|
* @returns {string} 格式化后的数字
|
|
311
304
|
*/
|
|
312
305
|
export function priceFormat(
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
306
|
+
number: string | number,
|
|
307
|
+
decimals = 0,
|
|
308
|
+
decimalPoint = '.',
|
|
309
|
+
thousandsSeparator = ','
|
|
317
310
|
) {
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
typeof
|
|
323
|
-
|
|
324
|
-
let s = "";
|
|
311
|
+
number = `${number}`.replace(/[^0-9+-Ee.]/g, '')
|
|
312
|
+
const n = !isFinite(+number) ? 0 : +number
|
|
313
|
+
const prec = !isFinite(+decimals) ? 0 : Math.abs(decimals)
|
|
314
|
+
const sep = typeof thousandsSeparator === 'undefined' ? ',' : thousandsSeparator
|
|
315
|
+
const dec = typeof decimalPoint === 'undefined' ? '.' : decimalPoint
|
|
316
|
+
let s = ''
|
|
325
317
|
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
318
|
+
s = (prec ? n + '' : `${Math.round(n)}`).split('.')
|
|
319
|
+
const re = /(-?\d+)(\d{3})/
|
|
320
|
+
while (re.test(s[0])) {
|
|
321
|
+
s[0] = s[0].replace(re, `$1${sep}$2`)
|
|
322
|
+
}
|
|
331
323
|
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
324
|
+
if ((s[1] || '').length < prec) {
|
|
325
|
+
s[1] = s[1] || ''
|
|
326
|
+
s[1] += new Array(prec - s[1].length + 1).join('0')
|
|
327
|
+
}
|
|
328
|
+
return s.join(dec)
|
|
337
329
|
}
|
|
338
330
|
|
|
339
331
|
/**
|
|
@@ -342,20 +334,17 @@ export function priceFormat(
|
|
|
342
334
|
* @return {string}
|
|
343
335
|
* */
|
|
344
336
|
export const formatName = (name: string): string => {
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
337
|
+
let value = ''
|
|
338
|
+
if (name.length === 2) {
|
|
339
|
+
value = name.substring(0, 1) + '*'
|
|
340
|
+
} else if (name.length > 2) {
|
|
341
|
+
let char = ''
|
|
342
|
+
for (let i = 0, len = name.length - 2; i < len; i++) {
|
|
343
|
+
char += '*'
|
|
344
|
+
}
|
|
345
|
+
value = name.substring(0, 1) + char + name.substring(name.length - 1, name.length)
|
|
346
|
+
} else {
|
|
347
|
+
value = name
|
|
352
348
|
}
|
|
353
|
-
value
|
|
354
|
-
|
|
355
|
-
char +
|
|
356
|
-
name.substring(name.length - 1, name.length);
|
|
357
|
-
} else {
|
|
358
|
-
value = name;
|
|
359
|
-
}
|
|
360
|
-
return value;
|
|
361
|
-
};
|
|
349
|
+
return value
|
|
350
|
+
}
|