当前位置: 首页 > news >正文

前端 关于汇率的计算

汇率是各个国家之间流通货币的单位换算
在项目中通常是金额之间的换算才会用到
好了,直接看图看代码吧。
在这里插入图片描述
其实就是拿到本位币 和币种,在去调汇率的接口进行查询匹配的汇率结果返回来。
我这里获取的是公司里的本位币,币种有人民币,美元等
在这里插入图片描述
上图可以知道
我们是选取的form表单里面的字段,所以嘞我们要用组件里的form,你用你们的组件就行了
在这里插入图片描述

**
   * 基本信息改变
   * @param changedFields 改变的字段信息
   */
  onValuesChange = async (changedFields, allValues) => { // 接收穿过来的值、对象
    const changeField = Object.keys(changedFields)[0];
    switch (changeField) {
      case 'currCode':
      case 'ouId':
      // 注意注意,这个位置要加一个 await  异步操作,
      // 否则在进行计算的时候,可能不能获取到最新的值,会拿到上一次的值,导致计算结果不准确
      await this.ExchangeCounter(allValues); // 当点击了公司和币种的时候都会走这个逻辑
        break;
    }
    this.props?.onValuesChange(changedFields); // 这个是代表传的数据
  };
  // 我这里参数用form 是应为数据比较全面,想拿谁就拿谁。
  ExchangeCounter = async (allValues) => {
    const localCurrCode = allValues.ouId?.currCode; // 定义本位币
    const currCode = allValues.currCode?.currCode; // 重新赋值选中的币种
    // 为了防止接口呗重复调用,我们要价格判断,在保证两个必填且有关联的数据有值的时候才可以调取汇率的接口
    if (localCurrCode && currCode) { 
      const exchangeData = await service.exchangeRateRes({ // 接口传参
        fromCurr: currCode,
        toCurr: localCurrCode
      });
      if (exchangeData.success) {
      // 细节问题;下边并非多此一举,查询到的只有一个值并且有的时候值是空的,那么我们就要赋值默认值,并且要给提示信息。
        if (exchangeData.data == null) { 
          ElNotification({
            type: 'error',
            message: '未获取到汇率,将取用默认值1'
          });
          this.formRef.setFieldsValue({
            exchangeRate: 1
          });
        } else {
          ElNotification({ type: 'success', message: '汇率获取成功' });
          this.formRef.setFieldsValue({
            exchangeRate: maths.rounds(exchangeData?.data, 8) // 重新赋值并保留小数位
          });
        }
      } else {
        ElNotification({
          type: 'error',
          message: exchangeData.msg || '操作失败,未获取到汇率'
        });
        this.formRef.setFieldsValue({
          exchangeRate: 1
        });
      }
    }
  };

在这里插入图片描述

关于小数位的问题看这里。希望帮到你
来看一下效果
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
好了,就到这里了

相关文章:

  • mongoDB 文档查询
  • 安装了python报错 或者执行 npm install 时报node-sass的各种相关错误 解决办法
  • 今天打开一个网站 FSO对象实例创建失败
  • 【LeetCode】5. Longest Palindromic Substring 最大回文子串
  • vu2响应式原理 代码分析
  • 希尔排序
  • vu3响应式原理 代码分析
  • Java Tomcat SSL 服务端/客户端双向认证(一)
  • vue3中 setup注意点
  • redis简介
  • 《Spark GraphX in Action》书评及作者访谈
  • vue3的 computed 计算属性 与 watch监听
  • Diomidis Spinellis:有效的调试
  • ListView的简单使用
  • vue3技术 watch时 value问题
  • 0x05 Python数据分析,Anaconda八斩刀
  • 5、React组件事件详解
  • 78. Subsets
  • CSS3 变换
  • javascript从右向左截取指定位数字符的3种方法
  • Laravel Telescope:优雅的应用调试工具
  • nginx 负载服务器优化
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • Zepto.js源码学习之二
  • 代理模式
  • 前端面试之CSS3新特性
  • 如何使用Mybatis第三方插件--PageHelper实现分页操作
  • 使用docker-compose进行多节点部署
  • 限制Java线程池运行线程以及等待线程数量的策略
  • 学习Vue.js的五个小例子
  • 阿里云API、SDK和CLI应用实践方案
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • %3cscript放入php,跟bWAPP学WEB安全(PHP代码)--XSS跨站脚本攻击
  • (二)c52学习之旅-简单了解单片机
  • (三)elasticsearch 源码之启动流程分析
  • (转)JAVA中的堆栈
  • .Net Memory Profiler的使用举例
  • .NET与java的MVC模式(2):struts2核心工作流程与原理
  • ::before和::after 常见的用法
  • @我的前任是个极品 微博分析
  • [ JavaScript ] JSON方法
  • [20150904]exp slow.txt
  • [ACTF2020 新生赛]Upload 1
  • [bbk5179]第66集 第7章 - 数据库的维护 03
  • [C/C++]_[初级]_[关于编译时出现有符号-无符号不匹配的警告-sizeof使用注意事项]
  • [C]整形提升(转载)
  • [Gym-102091E] How Many Groups
  • [hdu 3065] 病毒侵袭持续中 [AC自动机] [病毒特征码匹配]
  • [js]js设计模式小结
  • [k8s系列]:kubernetes·概念入门
  • [Linux] 用LNMP网站框架搭建论坛
  • [Luogu 3958] NOIP2017 D2T1 奶酪
  • [Python] scikit-learn之mean_squared_error函数(Mean Squared Error(MSE))介绍和使用案例