Quellcode durchsuchen

跳转冠心病

hwy vor 1 Tag
Ursprung
Commit
baa58a20f6
2 geänderte Dateien mit 407 neuen und 366 gelöschten Zeilen
  1. 22 0
      app/statistics/js/comprehensive-query.js
  2. 385 366
      app/statistics/js/home.js

+ 22 - 0
app/statistics/js/comprehensive-query.js

@ -2,6 +2,7 @@ Vue.use(Vuedals.default)
new Vue({
  el: '#main',
  data: {
    selectType: '',
    height: '',
    isloading: false, //加载中
    start: '',
@ -717,6 +718,26 @@ new Vue({
    EventBus.$on('preview-person-info', function (data) {
      vm.$refs.personInfo.openDialog(data)
    })
    // 获取URL地址
    var url = window.location.href
    // 获取参数部分
    var params = url.split('?')[1]
    // 将参数部分转换为对象
    var paramsObj = {}
    if (params) {
      var paramsArr = params.split('&')
      for (var i = 0; i < paramsArr.length; i++) {
        var param = paramsArr[i].split('=')
        paramsObj[param[0]] = param[1]
      }
    }
    if (paramsObj['selectType']) {
      this.selectType = paramsObj['selectType']
    }
    if (this.selectType == 'gxb') {
      vm.tabsClick({ id: '9', text: '冠心病统计', show: true })
    }
  },
  beforeDestroy() {
    EventBus.$off('toPage')
@ -1113,6 +1134,7 @@ new Vue({
      // initScope(this)
    },
    tabsClick: function (item) {
      console.log(item, '1111111111111111111')
      var vm = this
      this.collectCode = ''
      this.copdFilterCheckValue = []

+ 385 - 366
app/statistics/js/home.js

@ -1,373 +1,392 @@
new Vue({
	el: '#main',
	data: {
		roles: [],
		selectedRole: "",
		isopen: true,
		signAnalysis: [{
			photo: '../../../images/qianyujingzhan_icon.png',
			label: '签约进展',
			url: 'sign-progress.html',
            allowArea:"",
		}, {
			photo: '../../../images/xuqianjingzhan_icon.png',
			label: '续签进展',
			url: 'renew-progress.html',
            allowArea:"",
		}, {
			photo: '../../../images/jumingfenxi_icon.png',
			label: '居民分析',
			url: 'resident-analysis.html',
            allowArea:"",
		}, {
			photo: '../../../images/jiankangguanli_icon.png',
			label: '健康管理',
			url: 'health-management-analysis.html',
            allowArea:"",
		},{
			photo: '../../../images/tuigaiqian_icon.png',
			label: '退改签',
			url: 'change-back.html',
            allowArea:"",
		}, {
			photo: '../../../images/lianglvfenxi_icon.png',
			label: '两率分析',
			url: 'two-rate-analysis.html',
            allowArea:"",
		}],
		serviceAnalysis: [{
			photo: '../../../images/zongtifenxi_icon.png',
			label: '总体分析',
			url: 'comprehensive-analysis.html',
            allowArea:"",
		}, {
			photo: '../../../images/zixunfenxi_icon.png',
			label: '咨询分析',
			url: 'consulting-analysis.html',
            allowArea:"",
		}, {
			photo: '../../../images/pijianfenxi_icon.png',
			label: '评价分析',
			url: 'estimate-analysis.html',
            allowArea:"",
		}, {
			photo: '../../../images/changcufangfenxi_icon.png',
			label: '长处方分析',
			url: 'prescription-analysis.html',
			allowArea:"",
		},{
			photo: '../../../images/zhufufenxi_icon_pc.png',
			label: '祝福分析',
			url: 'blessing-analysis.html',
			allowArea:"",	
		},
		 {
			photo: '../../../images/shangmenfuwu_icon.png',
			label: '上门服务',
			url: 'smfw-analysis.html',
			allowArea:"",
		},
		 {
			photo: '../../../images/shaichafenxin_icon.png',
			label: '筛查分析',
			url: 'jbsc-analysis.html',
			allowArea:"",
		},
		 {
			photo: '../../../images/zhuanbingfenxi_icon.png',
			label: '专病分析',
			url: 'special-analysis.html',
			allowArea:"",
		},
		],
		signRateData: {
		    signTask: {
		        text: '',
		        rate: '0.00',
		        sign: 0,
		        people: 0
		    },
		    sign: {
		        text: '',
		        rate: '0.00',
		        sign: 0,
		        people: 0
		    },
		    renew: {
		        text: '',
		        rate: '0.00',
		        sign: 0,
		        people: 0
		    }
		},
		dataQuery: [{
			photo: '../../../images/shujudaochu_icon.png',
			label: '数据查询',
			url: 'comprehensive-query.html',
			allowArea:"",
		},{
			photo: '../../../images/weijishihuifu_icon.png',
			label: '咨询未及时回复',
			url: 'consult-not-reply.html',
			allowArea:"",
		},
		{
			photo: '../../../images/icon-baobiao.png',
			label: '年度考核报表',
			url: 'annual-appraisal-report.html',
			allowArea:"",
		},
		],
		paramValue:'',
		paramType:'',
		isGugan: false,
	},
	methods: {
		open: function() {
			EventBus.$emit('open-click', {});
		},
		showDetail: function(url) {
			window.location.href = url;
		},
		goToPage: function(val){
		    var url = "sign-progress.html";
		    if(val == 2){
		        url = "renew-progress.html";
		    }else if(val == 3){
		        url = "comprehensive-query.html";
		    }
		    window.location.href = url;
		},
		userRoleData:function(v) {
			var vm = this
			var roles = window.sessionStorage.getItem("userRole");
			//如果没有缓存userRole,则说明是第一次进入统计页面,需要重新请求患者信息
			// if(!roles){
			    var vm = this;
			    httpRequest.getDoctorInfo().then(function(res){
			        var docInfo = res.data,
			        userRole = docInfo.userRole;
							if(docInfo.expandLevelName){
								vm.isGugan = docInfo.expandLevelName.indexOf("慢病骨干")>-1
							}
			        _.each(userRole,function(item,index){
						if(item.areas!="350200"){
							item.roleType='2'
						}
					})
					if(docInfo.specialistRole&&docInfo.specialistRole.length){  //如果有专科权限
						_.each(docInfo.specialistRole,function(item,index){
							var hasIndex = _.findIndex(userRole,{areas:item.areas})
							if(hasIndex == -1){   //去重
								item.roleType='1'
								userRole.push(item)
							}
						})
					}
					
			        if(userRole.length>0){
			            window.sessionStorage.setItem("userRole", JSON.stringify(userRole));
									window.localStorage.setItem("docInfo", JSON.stringify(docInfo))
			            window.sessionStorage.setItem("docInfo", JSON.stringify(docInfo));
			            vm.roles = userRole;
			            vm.selectedRole = vm.getHighestRole(userRole).code;
			            var selected = vm.getHighestRole(userRole);
			            window.sessionStorage.setItem("selectedRole", JSON.stringify(selected));
			            $("#main").removeClass("c-hide")
			        }else if(vm.isGugan){
								window.localStorage.setItem("docInfo", JSON.stringify(docInfo))
								window.sessionStorage.setItem("docInfo", JSON.stringify(docInfo));
								var selected = {
									code: docInfo.town,
									areas: docInfo.town,
									name: docInfo.hospitalName
								}
								window.sessionStorage.setItem("selectedRole", JSON.stringify(selected));
								$("#main").removeClass("c-hide")
								
							}
					if(userRole.length==0&&docInfo.specialistRole&&docInfo.specialistRole.length==0&&!vm.isGugan){
						top.toastr.warning("您没有权限查看该页面");
					}            
			    })
			// }else{
			//     this.roles = JSON.parse(roles);
			//     if(this.roles.length>0){
			//         var selected = window.sessionStorage.getItem("selectedRole");
			//         if(selected && selected!= "undefined") {
			//             this.selectedRole = JSON.parse(selected).code;
			//         } else {
			//             this.selectedRole = this.roles[0].code;
			//             var selected = this.roles[0];
			//             window.sessionStorage.setItem("selectedRole", JSON.stringify(selected));
			//         }
			//         $("#main").removeClass("c-hide")
			//     }else{
			//         top.toastr.warning("您没有权限查看该页面");
			//     }	        
			// }
		},
		paramClick:function(v) {
			if(v == 'ztfx') {
				this.showDetail(this.serviceAnalysis[0].url)
			}else if(v == 'zxfx') {
				this.showDetail(this.serviceAnalysis[1].url)
			}else if(v == 'pjfx') {
				this.showDetail(this.serviceAnalysis[2].url)
			}else if(v == 'ccffx') {
				this.showDetail(this.serviceAnalysis[3].url)
			}else if(v == 'zffx') {
				this.showDetail(this.serviceAnalysis[4].url)
			}else if(v == 'smfw') {
				this.showDetail(this.serviceAnalysis[5].url)
			}else if(v == 'scfx') {
				this.showDetail(this.serviceAnalysis[6].url)
			}else if(v == 'zbfx') {
				if(this.paramType) {
					this.showDetail('special-analysis.html?type='+this.paramType)
				}else{
					this.showDetail(this.serviceAnalysis[7].url)
				}
			}else if(v == 'sjcx') {
				this.showDetail(this.dataQuery[0].url)
			}else if(v=='jkmzf'){
            this.showDetail('comprehensive-query.html?iSearch=1')
			}
			else if(v == 'ndkhbb') {
				this.showDetail(this.dataQuery[2].url)
			}else if(v == 'jmfx') {
				this.showDetail(this.signAnalysis[2].url)
			}else if(v == 'jkgl') {
				this.showDetail(this.signAnalysis[3].url)
			}else if(v == 'tgq') {
				this.showDetail(this.signAnalysis[4].url)
			}
			
		},
		getHighestRole(userRole){
			var vm = this
			var index = userRole.findIndex(function(item){return item.code.indexOf(350200)>-1 })
			if(index>-1){
				return userRole[index]
			}
			index = userRole.findIndex(function(item){return item.code.indexOf('jk_')>-1})
			if(index>-1){
				return userRole[index]
			}
			index = userRole.findIndex(function(item){return item.code.length == 6})
			if(index>-1){
				return userRole[index]
			}
			return userRole[0]
		}
	},
	mounted: function() {
	    //获取缓存里面的userRole
		this.userRoleData()
				//TODO 发布删除这个
		// window.location.href = 'comprehensive-query.html'
		// 获取URL地址
		var url = window.location.href;
		// 获取参数部分
		var params = url.split('?')[1];
		// 将参数部分转换为对象
		var paramsObj = {};
		if (params) {
			var paramsArr = params.split('&');
			for (var i = 0; i < paramsArr.length; i++) {
				var param = paramsArr[i].split('=');
				paramsObj[param[0]] = param[1];
			}
		}
		// 获取指定参数的值
		this.paramValue = paramsObj['name'];
		this.paramType = paramsObj['type'];
		
	},
	watch: {
		selectedRole: function(val) {
			var vm = this
			var selected = _.findWhere(this.roles, {
				code: val
			});
			window.sessionStorage.setItem("selectedRole", JSON.stringify(selected));
		    getSignData(this);
		    console.log(this.selectedRole)
			if(vm.selectedRole) {
				vm.paramClick(vm.paramValue)
			}
		},
		// "paramValue":{
		// 	handler:function(v) {
		// 		this.paramClick(v)
		// 	},
		// },
		
	}
  el: '#main',
  data: {
    roles: [],
    selectedRole: '',
    isopen: true,
    signAnalysis: [
      {
        photo: '../../../images/qianyujingzhan_icon.png',
        label: '签约进展',
        url: 'sign-progress.html',
        allowArea: ''
      },
      {
        photo: '../../../images/xuqianjingzhan_icon.png',
        label: '续签进展',
        url: 'renew-progress.html',
        allowArea: ''
      },
      {
        photo: '../../../images/jumingfenxi_icon.png',
        label: '居民分析',
        url: 'resident-analysis.html',
        allowArea: ''
      },
      {
        photo: '../../../images/jiankangguanli_icon.png',
        label: '健康管理',
        url: 'health-management-analysis.html',
        allowArea: ''
      },
      {
        photo: '../../../images/tuigaiqian_icon.png',
        label: '退改签',
        url: 'change-back.html',
        allowArea: ''
      },
      {
        photo: '../../../images/lianglvfenxi_icon.png',
        label: '两率分析',
        url: 'two-rate-analysis.html',
        allowArea: ''
      }
    ],
    serviceAnalysis: [
      {
        photo: '../../../images/zongtifenxi_icon.png',
        label: '总体分析',
        url: 'comprehensive-analysis.html',
        allowArea: ''
      },
      {
        photo: '../../../images/zixunfenxi_icon.png',
        label: '咨询分析',
        url: 'consulting-analysis.html',
        allowArea: ''
      },
      {
        photo: '../../../images/pijianfenxi_icon.png',
        label: '评价分析',
        url: 'estimate-analysis.html',
        allowArea: ''
      },
      {
        photo: '../../../images/changcufangfenxi_icon.png',
        label: '长处方分析',
        url: 'prescription-analysis.html',
        allowArea: ''
      },
      {
        photo: '../../../images/zhufufenxi_icon_pc.png',
        label: '祝福分析',
        url: 'blessing-analysis.html',
        allowArea: ''
      },
      {
        photo: '../../../images/shangmenfuwu_icon.png',
        label: '上门服务',
        url: 'smfw-analysis.html',
        allowArea: ''
      },
      {
        photo: '../../../images/shaichafenxin_icon.png',
        label: '筛查分析',
        url: 'jbsc-analysis.html',
        allowArea: ''
      },
      {
        photo: '../../../images/zhuanbingfenxi_icon.png',
        label: '专病分析',
        url: 'special-analysis.html',
        allowArea: ''
      }
    ],
    signRateData: {
      signTask: {
        text: '',
        rate: '0.00',
        sign: 0,
        people: 0
      },
      sign: {
        text: '',
        rate: '0.00',
        sign: 0,
        people: 0
      },
      renew: {
        text: '',
        rate: '0.00',
        sign: 0,
        people: 0
      }
    },
    dataQuery: [
      {
        photo: '../../../images/shujudaochu_icon.png',
        label: '数据查询',
        url: 'comprehensive-query.html',
        allowArea: ''
      },
      {
        photo: '../../../images/weijishihuifu_icon.png',
        label: '咨询未及时回复',
        url: 'consult-not-reply.html',
        allowArea: ''
      },
      {
        photo: '../../../images/icon-baobiao.png',
        label: '年度考核报表',
        url: 'annual-appraisal-report.html',
        allowArea: ''
      }
    ],
    paramValue: '',
    paramType: '',
    isGugan: false
  },
  methods: {
    open: function () {
      EventBus.$emit('open-click', {})
    },
    showDetail: function (url) {
      window.location.href = url
    },
    goToPage: function (val) {
      var url = 'sign-progress.html'
      if (val == 2) {
        url = 'renew-progress.html'
      } else if (val == 3) {
        url = 'comprehensive-query.html'
      }
      window.location.href = url
    },
    userRoleData: function (v) {
      var vm = this
      var roles = window.sessionStorage.getItem('userRole')
      //如果没有缓存userRole,则说明是第一次进入统计页面,需要重新请求患者信息
      // if(!roles){
      var vm = this
      httpRequest.getDoctorInfo().then(function (res) {
        var docInfo = res.data,
          userRole = docInfo.userRole
        if (docInfo.expandLevelName) {
          vm.isGugan = docInfo.expandLevelName.indexOf('慢病骨干') > -1
        }
        _.each(userRole, function (item, index) {
          if (item.areas != '350200') {
            item.roleType = '2'
          }
        })
        if (docInfo.specialistRole && docInfo.specialistRole.length) {
          //如果有专科权限
          _.each(docInfo.specialistRole, function (item, index) {
            var hasIndex = _.findIndex(userRole, { areas: item.areas })
            if (hasIndex == -1) {
              //去重
              item.roleType = '1'
              userRole.push(item)
            }
          })
        }
        if (userRole.length > 0) {
          window.sessionStorage.setItem('userRole', JSON.stringify(userRole))
          window.localStorage.setItem('docInfo', JSON.stringify(docInfo))
          window.sessionStorage.setItem('docInfo', JSON.stringify(docInfo))
          vm.roles = userRole
          vm.selectedRole = vm.getHighestRole(userRole).code
          var selected = vm.getHighestRole(userRole)
          window.sessionStorage.setItem('selectedRole', JSON.stringify(selected))
          $('#main').removeClass('c-hide')
        } else if (vm.isGugan) {
          window.localStorage.setItem('docInfo', JSON.stringify(docInfo))
          window.sessionStorage.setItem('docInfo', JSON.stringify(docInfo))
          var selected = {
            code: docInfo.town,
            areas: docInfo.town,
            name: docInfo.hospitalName
          }
          window.sessionStorage.setItem('selectedRole', JSON.stringify(selected))
          $('#main').removeClass('c-hide')
        }
        if (userRole.length == 0 && docInfo.specialistRole && docInfo.specialistRole.length == 0 && !vm.isGugan) {
          top.toastr.warning('您没有权限查看该页面')
        }
      })
      // }else{
      //     this.roles = JSON.parse(roles);
      //     if(this.roles.length>0){
      //         var selected = window.sessionStorage.getItem("selectedRole");
      //         if(selected && selected!= "undefined") {
      //             this.selectedRole = JSON.parse(selected).code;
      //         } else {
      //             this.selectedRole = this.roles[0].code;
      //             var selected = this.roles[0];
      //             window.sessionStorage.setItem("selectedRole", JSON.stringify(selected));
      //         }
      //         $("#main").removeClass("c-hide")
      //     }else{
      //         top.toastr.warning("您没有权限查看该页面");
      //     }
      // }
    },
    paramClick: function (v) {
      if (v == 'ztfx') {
        this.showDetail(this.serviceAnalysis[0].url)
      } else if (v == 'zxfx') {
        this.showDetail(this.serviceAnalysis[1].url)
      } else if (v == 'pjfx') {
        this.showDetail(this.serviceAnalysis[2].url)
      } else if (v == 'ccffx') {
        this.showDetail(this.serviceAnalysis[3].url)
      } else if (v == 'zffx') {
        this.showDetail(this.serviceAnalysis[4].url)
      } else if (v == 'smfw') {
        this.showDetail(this.serviceAnalysis[5].url)
      } else if (v == 'scfx') {
        this.showDetail(this.serviceAnalysis[6].url)
      } else if (v == 'zbfx') {
        if (this.paramType) {
          this.showDetail('special-analysis.html?type=' + this.paramType)
        } else {
          this.showDetail(this.serviceAnalysis[7].url)
        }
      } else if (v == 'sjcx') {
        this.showDetail(this.dataQuery[0].url)
      } else if (v == 'jkmzf') {
        this.showDetail('comprehensive-query.html?iSearch=1')
      } else if (v == 'gxb') {
        this.showDetail('comprehensive-query.html?selectType=gxb&iSearch=1')
      } else if (v == 'ndkhbb') {
        this.showDetail(this.dataQuery[2].url)
      } else if (v == 'jmfx') {
        this.showDetail(this.signAnalysis[2].url)
      } else if (v == 'jkgl') {
        this.showDetail(this.signAnalysis[3].url)
      } else if (v == 'tgq') {
        this.showDetail(this.signAnalysis[4].url)
      }
    },
    getHighestRole(userRole) {
      var vm = this
      var index = userRole.findIndex(function (item) {
        return item.code.indexOf(350200) > -1
      })
      if (index > -1) {
        return userRole[index]
      }
      index = userRole.findIndex(function (item) {
        return item.code.indexOf('jk_') > -1
      })
      if (index > -1) {
        return userRole[index]
      }
      index = userRole.findIndex(function (item) {
        return item.code.length == 6
      })
      if (index > -1) {
        return userRole[index]
      }
      return userRole[0]
    }
  },
  mounted: function () {
    //获取缓存里面的userRole
    this.userRoleData()
    //TODO 发布删除这个
    // window.location.href = 'comprehensive-query.html'
    // 获取URL地址
    var url = window.location.href
    // 获取参数部分
    var params = url.split('?')[1]
    // 将参数部分转换为对象
    var paramsObj = {}
    if (params) {
      var paramsArr = params.split('&')
      for (var i = 0; i < paramsArr.length; i++) {
        var param = paramsArr[i].split('=')
        paramsObj[param[0]] = param[1]
      }
    }
    // 获取指定参数的值
    this.paramValue = paramsObj['name']
    this.paramType = paramsObj['type']
  },
  watch: {
    selectedRole: function (val) {
      var vm = this
      var selected = _.findWhere(this.roles, {
        code: val
      })
      window.sessionStorage.setItem('selectedRole', JSON.stringify(selected))
      getSignData(this)
      console.log(this.selectedRole)
      if (vm.selectedRole) {
        vm.paramClick(vm.paramValue)
      }
    }
    // "paramValue":{
    // 	handler:function(v) {
    // 		this.paramClick(v)
    // 	},
    // },
  }
})
function getSignData(vm){
    var code = vm.selectedRole,
        now = new Date(),
        params = {
            area: code,
            level: code == '350200' ? 4 : code.length == 6 ? 3 : 2,
            endDate: now.format("yyyy-MM-dd")
        };
    statisticAPI.getSignInfo(params).then(function(res){
        if(res.status == 200){
            var data = res.data;
            vm.signRateData = {
                signTask: {
                    text: formatRate(data.signTaskRate.rate),
                    rate: '0.00',
                    sign: data.signTaskRate.sign,
                    people: data.signTaskRate.people
                },
                sign: {
                    text: formatRate(data.signRate.rate),
                    rate: '0.00',
                    sign: data.signRate.sign,
                    people: data.signRate.people
                },
                renew: {
                    text: data.renewRange,
                    rate: '0.00',
                    sign: data.renew.split("/")[0],
                    people: data.renew.split("/")[1]
                }
            }
            var val1 = data.signRate.people - data.signRate.sign,
                val2 = data.signTaskRate.people - data.signTaskRate.sign;
            var signArr = [
                    {name: "签约数", value: data.signRate.sign},
                    {name: "未签约数", value: val1 >0 ? val1 : 0},
                ],
                signTaskArr = [
                    {name: "签约数", value: data.signTaskRate.sign},
                    {name: "未达标数", value: val2 >0 ? val2 : 0 }
                ],
                val = data.renew.split("/")[1] - data.renew.split("/")[0],
                renewArr = [
                    {name: "续签数", value: data.renew.split("/")[0]},
                    {name: "未达标数", value: val<0 ? 0 : val}
                ],
                color = ['#12b7f5', '#EBEBF5'];
            var signChart = drawPieChart("signMain", signArr, color, true);
            var completeChart = drawPieChart("completeMain", signTaskArr, color, true);
            var renewChart = drawPieChart("renewMain", renewArr, color, true);
            window.onresize = function() {
                signChart.resize();
                completeChart.resize();
                renewChart.resize();
            }
        }else{
            console.log(res.msg);
function getSignData(vm) {
  var code = vm.selectedRole,
    now = new Date(),
    params = {
      area: code,
      level: code == '350200' ? 4 : code.length == 6 ? 3 : 2,
      endDate: now.format('yyyy-MM-dd')
    }
  statisticAPI.getSignInfo(params).then(function (res) {
    if (res.status == 200) {
      var data = res.data
      vm.signRateData = {
        signTask: {
          text: formatRate(data.signTaskRate.rate),
          rate: '0.00',
          sign: data.signTaskRate.sign,
          people: data.signTaskRate.people
        },
        sign: {
          text: formatRate(data.signRate.rate),
          rate: '0.00',
          sign: data.signRate.sign,
          people: data.signRate.people
        },
        renew: {
          text: data.renewRange,
          rate: '0.00',
          sign: data.renew.split('/')[0],
          people: data.renew.split('/')[1]
        }
    })
      }
      var val1 = data.signRate.people - data.signRate.sign,
        val2 = data.signTaskRate.people - data.signTaskRate.sign
      var signArr = [
          { name: '签约数', value: data.signRate.sign },
          { name: '未签约数', value: val1 > 0 ? val1 : 0 }
        ],
        signTaskArr = [
          { name: '签约数', value: data.signTaskRate.sign },
          { name: '未达标数', value: val2 > 0 ? val2 : 0 }
        ],
        val = data.renew.split('/')[1] - data.renew.split('/')[0],
        renewArr = [
          { name: '续签数', value: data.renew.split('/')[0] },
          { name: '未达标数', value: val < 0 ? 0 : val }
        ],
        color = ['#12b7f5', '#EBEBF5']
      var signChart = drawPieChart('signMain', signArr, color, true)
      var completeChart = drawPieChart('completeMain', signTaskArr, color, true)
      var renewChart = drawPieChart('renewMain', renewArr, color, true)
      window.onresize = function () {
        signChart.resize()
        completeChart.resize()
        renewChart.resize()
      }
    } else {
      console.log(res.msg)
    }
  })
}
function formatRate(str){
    var val = parseFloat(str);
    return val.toFixed(2)+"%";
function formatRate(str) {
  var val = parseFloat(str)
  return val.toFixed(2) + '%'
}