1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
| Component({
| externalClasses: ['wr-class', 'symbol-class', 'decimal-class'],
| useStore: [],
| properties: {
| priceUnit: {
| type: String,
| value: 'fen',
| }, // 价格单位,分 | 元, fen,yuan
| price: {
| type: null,
| value: '',
| observer(price) {
| this.format(price);
| },
| }, // 价格, 以分为单位
| type: {
| type: String,
| value: '', //
| }, // main 粗体, lighter 细体, mini 黑色, del 中划线, delthrough 中划线,包括货币符号
| symbol: {
| type: String,
| value: '¥', // '¥',
| }, // 货币符号,默认是人民币符号¥
| fill: Boolean, // 是否自动补齐两位小数
| decimalSmaller: Boolean, // 小数字号小一点
| lineThroughWidth: {
| type: null,
| value: '0.12em',
| }, // 划线价线条高度
| },
|
| data: {
| pArr: [],
| },
|
| methods: {
| format(price) {
| price = parseFloat(`${price}`);
| const pArr = [];
| if (!isNaN(price)) {
| const isMinus = price < 0;
| if (isMinus) {
| price = -price;
| }
| if (this.properties.priceUnit === 'yuan') {
| const priceSplit = price.toString().split('.');
| pArr[0] = priceSplit[0];
| pArr[1] = !priceSplit[1]
| ? '00'
| : priceSplit[1].length === 1
| ? `${priceSplit[1]}0`
| : priceSplit[1];
| } else {
| price = Math.round(price * 10 ** 8) / 10 ** 8; // 恢复精度丢失
| price = Math.ceil(price); // 向上取整
| pArr[0] = price >= 100 ? `${price}`.slice(0, -2) : '0';
| pArr[1] = `${price + 100}`.slice(-2);
| }
| if (!this.properties.fill) {
| // 如果 fill 为 false, 不显示小数末尾的0
| if (pArr[1] === '00') pArr[1] = '';
| else if (pArr[1][1] === '0') pArr[1] = pArr[1][0];
| }
| if (isMinus) {
| pArr[0] = `-${pArr[0]}`;
| }
| }
| this.setData({ pArr });
| },
| },
| });
|
|