102 lines
2.2 KiB
JavaScript
102 lines
2.2 KiB
JavaScript
function addNum (num1, num2) {
|
|
let sq1, sq2, m;
|
|
try {
|
|
sq1 = num1.toString().split('.')[1].length;
|
|
}
|
|
catch (e) {
|
|
sq1 = 0;
|
|
}
|
|
try {
|
|
sq2 = num2.toString().split('.')[1].length;
|
|
}
|
|
catch (e) {
|
|
sq2 = 0;
|
|
}
|
|
m = Math.pow(10, Math.max(sq1, sq2));
|
|
return (Math.round(num1 * m) + Math.round(num2 * m)) / m;
|
|
}
|
|
|
|
Component({
|
|
externalClasses: ['i-class'],
|
|
|
|
properties: {
|
|
// small || default || large
|
|
size: String,
|
|
value: {
|
|
type: Number,
|
|
value: 1
|
|
},
|
|
min: {
|
|
type: Number,
|
|
value: -Infinity
|
|
},
|
|
max: {
|
|
type: Number,
|
|
value: Infinity
|
|
},
|
|
step: {
|
|
type: Number,
|
|
value: 1
|
|
}
|
|
},
|
|
|
|
|
|
methods: {
|
|
handleChangeStep(e, type) {
|
|
const { dataset = {} } = e.currentTarget;
|
|
const { disabled } = dataset;
|
|
const { step } = this.data;
|
|
let { value } = this.data;
|
|
|
|
if (disabled) return null;
|
|
|
|
if (type === 'minus') {
|
|
value = addNum(value, -step);
|
|
} else if (type === 'plus') {
|
|
value = addNum(value, step);
|
|
}
|
|
|
|
if (value < this.data.min || value > this.data.max) return null;
|
|
|
|
this.handleEmit(value, type);
|
|
},
|
|
|
|
handleMinus(e) {
|
|
this.handleChangeStep(e, 'minus');
|
|
},
|
|
|
|
handlePlus(e) {
|
|
this.handleChangeStep(e, 'plus');
|
|
},
|
|
|
|
handleBlur(e) {
|
|
let { value } = e.detail;
|
|
const { min, max } = this.data;
|
|
|
|
if (!value) {
|
|
setTimeout(() => {
|
|
this.handleEmit(value);
|
|
}, 16);
|
|
return;
|
|
}
|
|
|
|
value = +value;
|
|
if (value > max) {
|
|
value = max;
|
|
} else if (value < min) {
|
|
value = min;
|
|
}
|
|
|
|
this.handleEmit(value);
|
|
},
|
|
handleEmit (value, type) {
|
|
const data = {
|
|
value: value
|
|
};
|
|
if (type) data.type = type;
|
|
|
|
this.triggerEvent('change', data);
|
|
}
|
|
}
|
|
});
|