| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- 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 });
- },
- },
- });
|