123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- Component({
- externalClasses: ['wr-class', 'symbol-class', 'decimal-class'],
- // useStore: [],
- properties: {
- priceUnit: {
- type: String,
- value: 'fen',
- }, // 价格单位,分 | 元, fen,yuan
- price: {
- type: String,
- optionalTypes: [Number],
- 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: [] as string[],
- },
- methods: {
- format(price: string | number) {
- 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 })
- },
- },
- })
|