【优化】优化接龙商品价格计算方式,防止出现微信开发者工具基础库版本问题导致判断起购价异常的问题。

This commit is contained in:
大灰灰
2022-09-27 23:18:53 +08:00
parent 8936876c8f
commit 10872c71e1
3 changed files with 273 additions and 9 deletions

View File

@@ -0,0 +1,210 @@
/**
* 格式化器
* @Author: wenjm
* @Date: 2018-02-24 23:28:28
* @Last Modified by: wenjm
* @Last Modified time: 2018-05-15 14:35:01
*/
export default {
formatDateTime(value) {
return this.formatDate(value, 'yyyy-MM-dd hh:mm:ss');
},
/**
* 格式化时间显示方式
* 用法:format="yyyy-MM-dd hh:mm:ss";
*/
formatDate(value, format = 'yyyy-MM-dd') {
if (!value) return "";
if (!format) format = "yyyy-MM-dd";
let d = value;
if (typeof value === 'string') {
if (value.indexOf("/Date(") > -1)
d = new Date(parseInt(value.replace("/Date(", "").replace(")/", ""), 10));
else
d = new Date(Date.parse(value.replace(/-/g, "/").replace("T", " ").split(".")[0])); //.split(".")[0] 用来处理出现毫秒的情况,截取掉.xxx否则会出错
}
let o = {
"M+": d.getMonth() + 1, //month
"d+": d.getDate(), //day
"h+": d.getHours(), //hour
"m+": d.getMinutes(), //minute
"s+": d.getSeconds(), //second
"q+": Math.floor((d.getMonth() + 3) / 3), //quarter
"S": d.getMilliseconds() //millisecond
};
if (/(y+)/.test(format)) {
format = format.replace(RegExp.$1, (d.getFullYear() + "").substr(4 - RegExp.$1.length));
}
for (let k in o) {
if (new RegExp("(" + k + ")").test(format)) {
format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length));
}
}
return format;
},
formatTime(t) {
if (isNaN(t) || t == 0) { return 0; }
let n = 31536000000;
if (t >= n) {
return this.formatNumber(t / n, '#,##0.##') + ' 年';
}
n = 86400000;
if (t >= n) {
return this.formatNumber(t / n, '#,##0.##') + ' 日';
}
n = 3600000;
if (t >= n) {
return this.formatNumber(t / n, '#,##0.##') + ' 小时';
}
n = 60000;
if (t >= n) {
return this.formatNumber(t / n, '#,##0.##') + ' 分';
}
n = 1000;
if (t >= n) {
return this.formatNumber(t / n, '#,##0.##') + ' 秒';
}
return this.formatNumber(t, '#,##0.##') + ' 毫秒';
},
/**
* 格式化数字显示方式
* 用法
* formatNumber(12345.999,'#,##0.00');
* formatNumber(12345.999,'#,##0.##');
* formatNumber(123,'000000');
*/
formatNumber(value, pattern) {
if (value == null)
return value;
let strarr = value ? value.toString().split('.') : ['0'];
let fmtarr = pattern ? pattern.split('.') : [''];
let retstr = '';
// 整数部分
let str = strarr[0];
let fmt = fmtarr[0];
let i = str.length - 1;
let comma = false;
for (let f = fmt.length - 1; f >= 0; f--) {
switch (fmt.substr(f, 1)) {
case '#':
if (i >= 0) retstr = str.substr(i--, 1) + retstr;
break;
case '0':
if (i >= 0) retstr = str.substr(i--, 1) + retstr;
else retstr = '0' + retstr;
break;
case ',':
comma = true;
retstr = ',' + retstr;
break;
}
}
if (i >= 0) {
if (comma) {
let l = str.length;
for (; i >= 0; i--) {
retstr = str.substr(i, 1) + retstr;
if (i > 0 && ((l - i) % 3) == 0) retstr = ',' + retstr;
}
} else retstr = str.substr(0, i + 1) + retstr;
}
retstr = retstr + '.';
// 处理小数部分
str = strarr.length > 1 ? strarr[1] : '';
fmt = fmtarr.length > 1 ? fmtarr[1] : '';
i = 0;
for (let f = 0; f < fmt.length; f++) {
switch (fmt.substr(f, 1)) {
case '#':
if (i < str.length) retstr += str.substr(i++, 1);
break;
case '0':
if (i < str.length) retstr += str.substr(i++, 1);
else retstr += '0';
break;
}
}
return retstr.replace(/^,+/, '').replace(/\.$/, '');
},
//格式化金额
formatMoney(value, pattern) {
if (!value || value == 0)
return 0;
let sign = value < 0 ? '-' : '';
return sign + this.formatNumber(Math.abs(value), pattern || '#,##0.00');
},
formatMoneyCn(value) {
return '¥' + this.formatMoney(value);
},
formatWeek(value) {
let week = new Array("日", "一", "二", "三", "四", "五", "六");
let datetimeReg = /^[1-9]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])\s+(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d$/;
if (datetimeReg.test(value)) {
value = value.replace(/-/g, "/");
}
let day = new Date(value).getDay();
return "星期" + week[day];
},
formatMoneyAuto(value, pattern = '#,##0.00') {
let unit = "元";
if (value) {
let unitNum = {
// '千': 1000.00,
'万': 10000.00,
'千万': 10000000.00,
'亿': 100000000.00,
'百亿': 10000000000.00
};
let unitCount = {
// "4": '千',
"5": '万',
"8": '千万',
"9": '亿',
"11": '百亿'
};
let count = 0;
let money = value;
while (money >= 1) {
money = money / 10;
count++;
}
let tmp = unitCount[count + ""];
while (count >= 4 && tmp === undefined) {
tmp = unitCount[(--count) + ""];
}
unit = tmp === undefined ? unit : tmp;
value = (count >= 4) ? value / (unitNum[unit]) : value;
}
return this.formatMoney(value, pattern) + unit || "";
},
formatFileSize(value) {
if (null == value || value == '') {
return "0 Bytes";
}
var unitArr = new Array("Bytes", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB");
var index = 0;
var srcsize = parseFloat(value);
index = Math.floor(Math.log(srcsize) / Math.log(1024));
var size = srcsize / Math.pow(1024, index);
size = size.toFixed(2);
return size + unitArr[index];
}
}

View File

@@ -0,0 +1,51 @@
格式化器:
支持日期格式化、格式化数字显示、格式化金额、格式化星期、小写金额转大写、文件格式化
使用:
日期格式使用:
2018-02-24 23:28:28 :
var date=formatter.formatDateTime(new Date());
2018-02-24
var date=formatter.formatDate(new Date(),"yyyy-MM-dd");
2018/02/24
var date=formatter.formatDate(new Date(),"yyyy/MM/dd");
2018-02-24 23:28
var date=formatter.formatDate(new Date(),"yyyy-MM-dd HH:mm");
格式化数字显示方式:
123,45.999
var money=formatter.formatNumber(12345.999,'#,##0.00');
星期五
var week=formatter.formatWeek("五");
小写转大写
一千二百三十四
var chinese=formatter.formatMoneyAuto("1234");
文件大小转化:
1Kb
var fileSize=formatter.formatFileSize("1024");
1Mb
var fileSize=formatter.formatFileSize("1024*1024");
案例:
<script>
import formatter from '@/common/utils/formatter.js';
export default {
data() {
return {
appcache: '0Mb'
};
},
onLoad(e) {
var self = this;
// #ifdef APP-PLUS
// 获取当前应用缓存大小并转化为MB、KB、GB等格式
plus.cache.calculate(function(size) {
console.log(size);
self.appcache = formatter.formatFileSize(size);
});
// #endif
},
};
</script>

View File

@@ -144,7 +144,7 @@
</template> </template>
<script> <script>
import formatter from '@/common/utils/formatter.js';
export default { export default {
data() { data() {
@@ -209,7 +209,8 @@
this.cart.forEach(function (item, index, input) { this.cart.forEach(function (item, index, input) {
goodsTotalMoney += item.price * item.nums goodsTotalMoney += item.price * item.nums
}) })
this.totalprice = this.$common.formatMoney(goodsTotalMoney, 2, '') //this.totalprice = this.$common.formatMoney(goodsTotalMoney, 2, '')
this.totalprice = parseFloat(formatter.formatMoney(goodsTotalMoney))
}, },
toNumberChange: function (e) { toNumberChange: function (e) {
console.log(e); console.log(e);
@@ -299,16 +300,18 @@
this.$u.toast('请先选择商品') this.$u.toast('请先选择商品')
return true return true
} }
if (parseFloat(this.totalprice) < parseFloat(this.model.startBuyPrice)) { var totalprice = parseFloat(formatter.formatMoney(this.totalprice));
var startBuyPrice = parseFloat(formatter.formatMoney(this.model.startBuyPrice));
if (totalprice < startBuyPrice) {
this.$u.toast('最小购买价格为' + this.model.startBuyPrice + '元,请增加购买产品') this.$u.toast('最小购买价格为' + this.model.startBuyPrice + '元,请增加购买产品')
return true return true
} }
let userToken = this.$db.get('userToken'); //let userToken = this.$db.get('userToken');
let obj = { //let obj = {
cart: this.cart, // cart: this.cart,
id: this.id, // id: this.id,
token: userToken // token: userToken
} //}
this.submitStatus = true; this.submitStatus = true;
let newData = ''; let newData = '';
for (var i = 0; i < this.cart.length; i++) { for (var i = 0; i < this.cart.length; i++) {