首页 > 其他分享 >个人原创自定义计算公式组件可继续扩展

个人原创自定义计算公式组件可继续扩展

时间:2024-05-27 18:31:21浏览次数:23  
标签:return 自定义 -- 公式 customData 组件 formula message 计算公式

<template>
  <div>
    <el-row>
      <el-col :span="24">
        <el-container>
          <el-main
          >
            <el-card>
              <div>
                <el-button
                  size="mini"
                  plain
                  @click="add('ZDY')"
                  style="color: #409eff; border-color: #409eff"
                ><i class="el-icon-plus"></i>添加自定义数据
                </el-button
                >
                <el-input
                  v-model="customData"
                  size="mini"
                  placeholder="请输入自定义数据"
                  style="width: 150px; margin-right: 10px; margin-left: 10px"
                ></el-input>
                <el-button
                  icon="el-icon-plus"
                  circle
                  size="mini"
                  @click="add('+')"
                ></el-button>
                <el-button
                  icon="el-icon-minus"
                  circle
                  size="mini"
                  @click="add('-')"
                ></el-button>
                <el-button
                  icon="el-icon-close"
                  circle
                  size="mini"
                  @click="add('*')"
                ></el-button>
                <el-button circle size="mini" @click="add('/')">
                  <svg-icon icon-class="除号" class-name="custom-class"
                  />
                </el-button>
                <el-button circle size="mini" @click="add('(')">
                  <svg-icon icon-class="左括号" class-name="custom-class"/>
                </el-button>
                <el-button circle size="mini" @click="add(')')">
                  <svg-icon icon-class="右括号" class-name="custom-class"/>
                </el-button>
                <el-button
                  size="mini"
                  plain
                  @click="add('活动数据')"
                  style="color: #8e44ad; border-color: #8e44ad"
                >活动数据
                </el-button
                >
                <el-button
                  style="color: #2980b9; border-color: #2980b9"
                  @click="check"
                  size="mini"
                ><i class="el-icon-finished"></i>校验公式
                </el-button
                >
<!--                <el-input-->
<!--                  v-model="formulaName"-->
<!--                  size="mini"-->
<!--                  style="width: 130px; margin-left: 10px; margin-right: 10px"-->
<!--                  placeholder="请输入公式名称"-->
<!--                ></el-input>-->
                <el-button
                  size="mini"
                  style="color: #67c23a; border-color: #67c23a"
                  @click="sumbmit"
                ><i class="el-icon-document-checked"></i>保存公式
                </el-button
                >
                <el-button
                  plain
                  size="mini"
                  @click="delParam"
                  style="color: #f56c6c; border-color: #f56c6c"
                >
                  <i class="el-icon-back"></i>
                  清除
                </el-button
                >
                <el-button
                  plain
                  size="mini"
                  @click="delParams"
                  style="color: #f56c6c; border-color: #f56c6c"
                >
                  <svg-icon icon-class="清除" class-name="custom-class"/>
                  清除全部
                </el-button
                >
                <el-input
                  class="text-color"
                  placeholder="输入公式,例如:(活动数据+100)x1.2"
                  type="textarea"
                  :rows="7"
                  v-model="formula"
                  :disabled="true"
                >
                </el-input>
              </div>
              <el-link style="color: #8e44ad" :underline="false">
                <i class="el-icon-edit"></i>请输入测试活动数据:
              </el-link
              >
              <el-input
                size="mini"
                style="width: 130px; margin-left: 10px; margin-right: 10px"
                placeholder="输入活动数据"
                v-model="activeData">
              </el-input>
<!--              <el-link style=" color: #67c23a-->
<!--              " :underline="false">-->
<!--                <svg-icon-->
<!--                  icon-class="公式"-->
<!--                  class-name="custom-class"-->
<!--                />-->
<!--                请选择保存的公式:-->
<!--              </el-link>-->
<!--              <el-select-->
<!--                v-model="calculationFormula"-->
<!--                placeholder="请选择公式"-->
<!--                size="mini"-->
<!--                style="width: 130px; margin-left: 10px; margin-right: 10px"-->
<!--              >-->
<!--                <el-option-->
<!--                  v-for="item in options"-->
<!--                  :key="item.value"-->
<!--                  :label="item.label"-->
<!--                  :value="item.value"-->
<!--                >-->
<!--                </el-option>-->
<!--              </el-select>-->
              <el-button
                @click="submit1"
                size="mini"
                style="color: #2ecc71; border-color: #2ecc71"
              >
                <svg-icon
                  icon-class="计算器"
                  class-name="custom-class"
                />
                计算
              </el-button
              >
              <el-input
                placeholder="计算结果"
                style="width: 130px; margin-left: 10px; margin-right: 10px"
                size="mini"
                v-model="calculation"
              >
              </el-input>
            </el-card>
          </el-main>
        </el-container>
      </el-col>
    </el-row>
  </div>
</template>
<script>
  export default {
    name: "CalculationFormula",
    props: ['value'],
    data() {
      return {
        formula: "",
        activeData: "",
        calculation: "",
        formulaName: "",
        customData: "",
        calculationFormula:this.value,
        options: [],
        bol: false,
      };
    },
     // 监听父组件计算公式值的变化触发逻辑
    watch: {
      value: {
        immediate: true,
        handler(value) {
          if (value === null){
            this.formula = "";
            // this.formulaName = "";
            this.customData = "";
            this.activeData = "";
            this.calculation = "";
          }else {
            this.formula = value;
          }
        }
      }
    },
    methods: {
      // 清除最后一串字符
      delParam() {
        if (this.formula === "") {
          return this.$message({
            message: "当前文本框内没有公式,无法清除",
            type: "warning",
          });
        }
        this.formula = this.formula.substring(0, this.formula.length - 1);
      },
      // 清除全部
      delParams() {
        if (this.formula === "") {
          return this.$message({
            message: "当前文本框内没有公式,无法清除",
            type: "warning",
          });
        }
        this.formula = "";
        this.customData = "";
      },
      add(e) {
        if (e !== "ZDY") {
          this.formula = this.formula + e;
          return;
        }
        if (this.customData === "") {
          return this.$message({
            message: "请先输入自定义数据!",
            type: "warning",
          });
        }
        this.formula = this.formula + this.customData;
        this.customData = "";
      },

      check() {
        if (this.formula === "") {
          return this.$message({
            message: "请先输入公式!",
            type: "warning",
          });
        }
        try {
          var result = eval(this.formula.replace(/活动数据/g, 0));
          if (typeof result === "number" && !isNaN(result) && result >= 0) {
            this.$message.success("公式校验合法请点击确定!");
            this.bol = true;
          } else {
            this.$message.error("公式校验不合法!计算结果为负数!");
            return;
          }
        } catch (error) {
          this.$message.error("公式校验不合法,请检查!");
        }
      },
      sumbmit() {
        if (this.formula === "") {
          return this.$message({
            message: "请先输自定义公式!",
            type: "warning",
          });
        }
        if (this.bol === false) {
          return this.$message({
            message: "请先校验公式!",
            type: "warning",
          });
        }
        // if (this.formulaName === "") {
        //   return this.$message({
        //     message: "请输入公式名称!",
        //     type: "warning",
        //   });
        // }

        // this.options.push({
        //   value: this.formula,
        //   label: this.formulaName,
        // });
        this.$message.success(this.formulaName + "添加成功,请输入活动数据!");
        // this.formula = "";
        // this.formulaName = "";
        // this.customData = "";
        this.bol = false;
      },
      submit1() {
        // if (this.options.length === 0) {
        //   return this.$message.error("请先保存公式!");
        // }
        if (this.activeData === "") {
          return this.$message.error("请先输入活动数据!");
        }
        // if (this.calculationFormula === "") {
        //   return this.$message.error("请先选择公式!");
        // }
        this.calculation = eval(this.formula.replace(/活动数据/g, this.activeData));
        this.$emit('transmitValue', this.formula)
      },
    },
  };
</script>

<style scoped>
  .el-row {
    margin-bottom: 20px;

  &
  :last-child {
    margin-bottom: 0;
  }

  }
  .el-col {
    border-radius: 4px;
  }

  .bg-purple {
    background: #d3dce6;
  }

  .bg-purple-light {
    background: #e5e9f2;
  }

  .grid-content {
    border-radius: 4px;
    min-height: 36px;
  }

  .row-bg {
    padding: 10px 0;
    background-color: #f9fafc;
  }

  .text {
    font-size: 16px;
  }

  .item {
    padding: 18px 0;
  }

  .el-input {
    background-color: #f5f5f5;
  }
</style>
<style scoped>
  .content-textarea {
    height: 400px;
    margin: 20px;
    padding: 20px;
  }

  .content-textarea__item {
    display: inline-block;
    height: 24px;
    line-height: 24px;
    padding: 0 8px;
    background: #ecf5ff;
    border: 1px solid #d9ecff;
    border-radius: 2px;
  }

  .text-color /deep/ .el-textarea__inner {
    background-color: transparent;
    color: #2c3e50;
    font-size: 20px;
    font-family: "Times New Roman", Georgia, Serif;
    font-weight: bold;
    -webkit-text-stroke: 0px #2c3e50;
  }
</style>
// 附上组件图片

标签:return,自定义,--,公式,customData,组件,formula,message,计算公式
From: https://blog.csdn.net/qq_51292891/article/details/139154831

相关文章

  • k8s核心组件
    k8s核心组件KubernetesAPIServer由于APIServer是Kubernetes集群数据的唯一访问入口,因此安全性与高性能成为APIServer设计和实现的两大核心目标。通过采用HTTPS安全传输通道与CA签名数字证书强制双向认证的方式,APIServer的安全性得以保障。此外,为了更细粒度地控制用户或应用......
  • uniapp APP端全局组件-水印
    一、水印核心代码<template><viewclass="watermark-box":style="{backgroundImage:`url(${waterMarkImgSrc})`,backgroundSize:`auto${height}px`}"><canvasid="watermark"class="watermark&......
  • 小程序自定义swiper的指示点样式及颜色
    1图居中、圆边角、指示点颜色更改、指示点样式更改下图是样式不好看的组件要修改成这样::  wxml:<swiperclass="bd"indicator-dots="{{true}}"indicator-active-color="#ff8f00"autoplay="{{true}}"interval="5000"duration="500">......
  • ocelot自定义认证token
    中间件publicclassCustomOcelotMiddleware:Ocelot.Middleware.OcelotMiddleware{privatereadonlyRequestDelegate_next;publicIConfiguration_configuration;privatereadonlyIAuth_authUtil;privatereadonlySysLogApp_logApp;......
  • 警惕!自定义注解使用不当的排查实录
    一、引言大家好,在日常开发过程中,Java注解(Annotation)是开发中经常使用的一个手段,用于给代码添加元数据的标记。它们可以提供代码额外的信息,这些信息可以在编译时或运行时被访问。注解不会改变代码的执行逻辑,但可以被编译器、JVM或框架等工具用于生成额外的代码、提供警告或执......
  • 服务发现组件 Eureka 的几个主要调用过程
     前言现在流行的微服务体系结构正在改变我们构建应用程序的方式,从单一的单体服务转变为越来越小的可单独部署的服务(称为微服务),共同构成了我们的应用程序。当进行一个业务时不可避免就会存在多个服务之间调用,假如一个服务A要访问在另一台服务器部署的服务B,那么前提是服......
  • 在openkylin上编译UKUI开源组件
    目录一、准备工作二、搭建Qt编译环境三、编译UKUI开源组件这里就不赘述怎么安装openkylin系统了,可以虚拟机安装也可以使用本地安装,UKUI桌面环境主要是使用Qt开发,下面讲解从搭建Qt编译环境到编译开源组件,这里使用的openkylin系统是openkylin2.0nile 一、准备工作打开......
  • custom:用户自定义插件,提供开放能力
    custom插件的功能:支持用户在右键菜单中自定义插件。简介custom插件大量采用声明式代码(声明代替代码开发),比如:只需使用style=()=>"...",即可注册css。只需使用styleTemplate=()=>({renderArg}),即可引入css文件,并且支持渲染模板。只需使用html=()=>"...",即......
  • 响应式UI组件DevExtreme中文教程 - 工具栏的自适应模式
    DevExtreme拥有高性能的HTML5/JavaScript小部件集合,使您可以利用现代Web开发堆栈(包括React,Angular,ASP.NETCore,jQuery,Knockout等)构建交互式的Web应用程序。从Angular和Reac,到ASP.NETCore或Vue,DevExtreme包含全面的高性能和响应式UI小部件集合,可在传统Web和下一代移动应用程......
  • 响应式UI组件DevExtreme中文教程 - 工具栏的自适应模式
    DevExtreme拥有高性能的HTML5/JavaScript小部件集合,使您可以利用现代Web开发堆栈(包括React,Angular,ASP.NETCore,jQuery,Knockout等)构建交互式的Web应用程序。从Angular和Reac,到ASP.NETCore或Vue,DevExtreme包含全面的高性能和响应式UI小部件集合,可在传统Web和下一代移动应用程序中......