com.kailaimei.carbon/pages/count/count.vue

454 lines
11 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<view class="main">
<!-- 头部 -->
<status-nav></status-nav>
<!-- 计算碳足迹 -->
<view class="calculator-bg">
<view class="bg-img">
<image src="/static/count-bg.png" mode="widthFix"></image>
</view>
<view class="calculator">
<view class="cate">
<view class="list" v-for="(item,index) in cateList" :key="index">
<view class="title">
<text>{{index}}</text>
</view>
<view class="item" v-for="(item1,index1) in item" :key="index1" @tap="changeEv(index,index1)">
{{item1.title}}
</view>
</view>
</view>
<view class="interface">
<scroll-view class="result" scroll-y="true">
<view class="individual" v-if="cateTagList.length>0">
<view class="list" v-for="(item,index) in cateList" :key="index">
<view class="item" v-for="(item1,index1) in item" :key="index1"
v-if="cateTagList.indexOf(item1.tag)!==-1">
<view>{{item1.title}}</view>
<view>
<input type="text" focus="true" v-model="item1.num" placeholder="0"
@tap="changeFocus(index,index1)">
</view>
<view>{{item1.company}}</view>
</view>
</view>
</view>
<view class="subtotal">
<view class="item">
<view>衣<text>排碳</text></view>
<view>{{subTotal[0]?subTotal[0].toFixed(2):0}}</view>
<view>kg</view>
</view>
<view class="item">
<view>食<text>排碳</text></view>
<view>{{subTotal[1]?subTotal[1].toFixed(2):0}}</view>
<view>kg</view>
</view>
<view class="item">
<view>住<text>排碳</text></view>
<view>{{subTotal[2]?subTotal[2].toFixed(2):0}}</view>
<view>kg</view>
</view>
<view class="item">
<view>行<text>排碳</text></view>
<view>{{subTotal[3]?subTotal[3].toFixed(2):0}}</view>
<view>kg</view>
</view>
<view class="item">
<view>用<text>排碳</text></view>
<view>{{subTotal[4]?subTotal[4].toFixed(2):0}}</view>
<view>kg</view>
</view>
</view>
<view class="total">
<view class="item">
<view>合计排碳</view>
<view>{{total>0?total.toFixed(2):0}}</view>
<view>kg</view>
</view>
</view>
</scroll-view>
<view class="interface-btns">
<view class="num">
<view class="btn" v-for="(item,index) in numlist" :key="index" @tap="chengeNum(item)">
{{item}}
</view>
</view>
<view class="operate">
<view class="btn" v-for="(item,index) in operateList" :key="index" @tap="choseEv(index)">
{{item}}
</view>
</view>
</view>
</view>
<!-- 导航 -->
<tabbar :current='0'></tabbar>
<!-- 操作说明 -->
<view class="explain">操作说明:点击图标,计算您的碳足迹。</view>
</view>
</view>
<!-- 轮播 -->
<view class="banner">
<swiper-pull></swiper-pull>
</view>
<!-- 底部 -->
<view class="footer">
<text>中国绿色碳汇基金会低碳旅游专项基金监制北京凯来美气候技术咨询有限公司开发</text>
</view>
</view>
</template>
<script>
import statusNav from '@/components/status-nav/status-nav.vue';
import tabbar from '@/components/tabbar/tabbar.vue';
import swiperPull from '@/components/swiper/swiper-pull.vue';
export default {
components: {
statusNav,
tabbar,
swiperPull
},
data() {
return {
statusHeight: uni.getSystemInfoSync().statusBarHeight, //状态栏高度
cateList: {
'衣': [{
'title': '购买衣服数量',
'company': '件',
'carbon': 7.01,
'num': '',
'tag': 'a1'
},
{
'title': '洗衣服使用量',
'company': '千克',
'carbon': 1.46,
'num': '',
'tag': 'a2'
}
],
'食': [{
'title': '吸烟数量',
'company': '包',
'carbon': 0.00591,
'num': '',
'tag': 'b1'
},
{
'title': '喝白酒数量',
'company': '升',
'carbon': 4.5,
'num': '',
'tag': 'b2'
},
{
'title': '喝红酒数量',
'company': '升',
'carbon': 1.75,
'num': '',
'tag': 'b3'
},
{
'title': '喝啤酒数量',
'company': '瓶',
'carbon': 0.43,
'num': '',
'tag': 'b4'
},
{
'title': '肉类消费',
'company': '千克',
'carbon': 8.823,
'num': '',
'tag': 'b5'
},
{
'title': '粮食消费',
'company': '千克',
'carbon': 0.918,
'num': '',
'tag': 'b6'
}
],
'住': [{
'title': '用电',
'company': '度',
'carbon': 0.581,
'num': '',
'tag': 'c1'
},
{
'title': '煤气',
'company': '立方米',
'carbon': 2.826,
'num': '',
'tag': 'c2'
},
{
'title': '天然气',
'company': '立方米',
'carbon': 2.826,
'num': '',
'tag': 'c3'
},
{
'title': '燃煤',
'company': '千克',
'carbon': 3.0978,
'num': '',
'tag': 'c4'
},
{
'title': '集中取暖',
'company': '立方米',
'carbon': 46.57,
'num': '',
'tag': 'c5'
},
{
'title': '装修用木材',
'company': '千克',
'carbon': 0.31,
'num': '',
'tag': 'c6'
},
{
'title': '装修用陶瓷',
'company': '千克',
'carbon': 0.74,
'num': '',
'tag': 'c7'
},
{
'title': '装修用钢材',
'company': '千克',
'carbon': 2.3,
'num': '',
'tag': 'c8'
},
{
'title': '装修用铝材',
'company': '千克',
'carbon': 15.8,
'num': '',
'tag': 'c9'
}
],
'行': [{
'title': '飞机',
'company': '千米',
'carbon': 0.088,
'num': '',
'tag': 'd1'
},
{
'title': '火车',
'company': '千米',
'carbon': 0.0262,
'num': '',
'tag': 'd2'
},
{
'title': '轮船',
'company': '千米',
'carbon': 0.128,
'num': '',
'tag': 'd3'
},
{
'title': '地铁',
'company': '千米',
'carbon': 0.0153,
'num': '',
'tag': 'd4'
},
{
'title': '公共汽车',
'company': '千米',
'carbon': 0.03344,
'num': '',
'tag': 'd5'
},
{
'title': '低油耗小轿车',
'company': '千米',
'carbon': 0.16,
'num': '',
'tag': 'd6'
},
{
'title': '中油耗小轿车',
'company': '千米',
'carbon': 0.24,
'num': '',
'tag': 'd7'
},
{
'title': '高油耗小轿车',
'company': '千米',
'carbon': 0.33,
'num': '',
'tag': 'd8'
},
],
'用': [{
'title': '塑料袋使用量',
'company': '个',
'carbon': 0.0821,
'num': '',
'tag': 'e1'
},
{
'title': '纸制品',
'company': '千克',
'carbon': 1.4,
'num': '',
'tag': 'e2'
},
{
'title': '一次性筷子',
'company': '双',
'carbon': 0.023,
'num': '',
'tag': 'e3'
}
]
},
numlist: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '00', '.'],
operateList: ['CE', '计算'],
cateTagList: [], //分类标题
subTotal: [0, 0, 0, 0, 0], //小计
total: 0, //总计
focusIndex: '', //选中一级分类
focusIndex1: 0, //选中二级分类
}
},
onLoad() {
if (uni.getStorageSync('subTotal')) {
uni.removeStorageSync('subTotal');
}
if (uni.getStorageSync('allTotal')) {
uni.removeStorageSync('allTotal');
}
},
methods: {
// 选择分类
changeEv(index, index1) {
this.cateTagList.push(this.cateList[index][index1].tag);
this.focusIndex = index;
this.focusIndex1 = index1;
},
// 获取光标
changeFocus(index, index1) {
this.focusIndex = index;
this.focusIndex1 = index1;
},
// 计算器按钮
chengeNum(num) {
if (this.cateTagList.length > 0) {
let curNum = this.cateList[this.focusIndex][this.focusIndex1].num;
if (curNum.indexOf('.') == -1 && curNum !== '') {
this.cateList[this.focusIndex][this.focusIndex1].num = curNum + num;
} else {
if (num !== '.') {
this.cateList[this.focusIndex][this.focusIndex1].num = curNum + num;
}
}
}
},
// 计算 || 清除
choseEv(index) {
if (this.cateTagList.length > 0) {
if (index == 0) {
this.cateList[this.focusIndex][this.focusIndex1].num = '';
// 计算
this.calculationEv();
} else {
// 计算
this.calculationEv();
}
}
},
// 计算
calculationEv() {
// 小计
let subTotalArr1 = this.cateList['衣'].filter(item => {
return item.num !== ''
});
let subTotalNum1 = 0;
subTotalArr1.forEach(item => {
subTotalNum1 += item.num * item.carbon * 1;
})
this.subTotal[0] = parseFloat(subTotalNum1);
let subTotalArr2 = this.cateList['食'].filter(item => {
return item.num !== ''
});
let subTotalNum2 = 0;
subTotalArr2.forEach(item => {
subTotalNum2 += item.num * item.carbon * 1;
})
this.subTotal[1] = parseFloat(subTotalNum2);
let subTotalArr3 = this.cateList['住'].filter(item => {
return item.num !== ''
});
let subTotalNum3 = 0;
subTotalArr3.forEach(item => {
subTotalNum3 += item.num * item.carbon * 1;
})
this.subTotal[2] = parseFloat(subTotalNum3);
let subTotalArr4 = this.cateList['行'].filter(item => {
return item.num !== ''
});
let subTotalNum4 = 0;
subTotalArr4.forEach(item => {
subTotalNum4 += item.num * item.carbon * 1;
})
this.subTotal[3] = parseFloat(subTotalNum4);
let subTotalArr5 = this.cateList['用'].filter(item => {
return item.num !== ''
});
let subTotalNum5 = 0;
subTotalArr5.forEach(item => {
subTotalNum5 += item.num * item.carbon * 1;
})
this.subTotal[4] = parseFloat(subTotalNum5);
// 总计
let totalArr = this.subTotal.filter(item => {
return item !== 0
});
let totalNum = 0;
totalArr.forEach(item => {
totalNum += item * 1;
})
this.total = parseFloat(totalNum);
// 缓存小计数据
let cacheTotal = [];
cacheTotal[0] = this.subTotal[0].toFixed(2);
cacheTotal[1] = this.subTotal[1].toFixed(2);
cacheTotal[2] = this.subTotal[2].toFixed(2);
cacheTotal[3] = this.subTotal[3].toFixed(2);
cacheTotal[4] = this.subTotal[4].toFixed(2);
uni.setStorageSync('subTotal', cacheTotal);
// 缓存总计数据
uni.setStorageSync('allTotal', this.total.toFixed(2));
},
}
}
</script>
<style>
</style>