vue新增占比选项以及填写比例

现在需要实现一个功能:新增/删除某个施工人员,并填写它占有总工程的比例,不能超过100%。

功能1:限制单个人员的比例,输入框不能填写数字以外的内容,不能填写负数,也不能超过100%。可以使用oninput进行限制:  

οninput="value=value.replace(/[^\d]/g,'')>100?100:value.replace(/[^\d]/g,'')"

通过value.replace方法将所有非数字替换成空,然后判断它是否超过100%。如果超过,则将其替换成100%。

功能2:添加新增/删除操作,用于增加施工人员以及对应的施工占比,其中vue部分如下:

<el-col :span="1">
  <el-button type="danger" @click="deleteMan(item,index)">删除</el-button>
</el-col>
<el-col :span="1">
  <el-button type="primary" @click="add" 
        v-if="index == arrayData.length - 1">新增</el-button>
</el-col>

其中arrayData为当前施工信息,这里数组不能为空。dataNum为当前计数:

arrayData:[{
  id:0,
  realName:'',
  userId:'',
  userName:'',
  orgId:'',
  workRate:''
}],
dataNum:0,

添加与删除部分代码,限制至少有一位人员参与:

deleteMan(item,index){
  if(this.arrayData.length<=1){//如果只有一个输入框则不可以删除
    this.$message.error('无法删除最后一名人员')
    return false
  }
  this.$confirm(`确定移除${item.realName}施工占比?`,'提示',{
    confirmButtonText: '确定',
    cancleButtonText: '取消',
    type: 'danger'
  }).then(() => {
    this.arrayData.splice(index,1)//删除了数组中对应的数据也就将这个位置的输入框删除
    this.dataNum--
  })
},
add(item){
  if(this.arrayData[this.dataNum].realName === ''){
    this.$message.warning('请先填写上一位人员')
    return false
  }
  this.arrayData.push(//增加就push进数组一个新值
    {
      id:++this.dataNum,
      realName:'',
      userId:'',  //id
      userName:'',  //账号
      orgId:'',
      workRate:''
    }
  )
},

功能3:限制所有施工人员的施工占比总和不能大于100%,首先是vue部分,通过函数进行计算:

<el-form-item
  label="施工占比">
  <el-input v-model="item.workRate"
    οninput="value=value.replace(/[^\d]/g,'')>100?100:value.replace(/[^\d]/g,'')"
    @change="calculateWorkRate(item.id)">
    <template slot="append">%</template>
  </el-input>
</el-form-item>

限制施工占比的方法部分js代码,通过监控当前id内容的变化来计算是否超出100%:

calculateWorkRate(id){
  let rate = 0;
  let over = 0;
  this.arrayData.forEach(item => {
    rate += item.workRate == '' ? 0 : parseInt(item.workRate)
    if(rate > 100) over = 100 - rate
    else over = 0
  })
  this.arrayData[id].workRate = parseInt(this.arrayData[id].workRate) + over
},

最后是完整的vue部分,其中handleBtnAdd方法是选择对应施工人员:

<el-row v-for="(item,index) in arrayData" :key="item.id">
  <el-col :span="10">
    <el-form-item
      label="施工人员" >
      <el-input v-model="item.realName" :readonly="true">
        <template slot="append"
        ><el-button type="primary" @click="handleBtnAdd">{{
            "选择"
          }}</el-button></template>
      </el-input>
    </el-form-item>
  </el-col>
  <el-col :span="10">
    <el-form-item
      label="施工占比">
      <el-input v-model="item.workRate"
        οninput="value=value.replace(/[^\d]/g,'')>100?100:value.replace(/[^\d]/g,'')"
        @change="calculateWorkRate(item.id)">
        <template slot="append">%</template>
      </el-input>
    </el-form-item>
  </el-col>
  <el-col :span="1" style="margin-left: 10px">
    <el-button type="danger" @click="deleteMan(item,index)">删除</el-button>
  </el-col>
  <el-col :span="1" style="margin-left: 30px">
    <el-button type="primary" @click="add" v-if="index == arrayData.length - 1">新增</el-button>
  </el-col>
</el-row>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue中,可以使用第三方组件库如Element UI中的Select组件实现下拉框可修改选项新增选项。具体步骤如下: 1. 安装Element UI组件库(如果已经安装可以跳过此步骤): ```bash npm install element-ui -S ``` 2. 在Vue项目中引入Element UI: ```js import Vue from 'vue' import ElementUI from 'element-ui' import 'element-ui/lib/theme-chalk/index.css' Vue.use(ElementUI) ``` 3. 在Vue组件中使用Select组件: ```html <template> <div> <el-select v-model="selectedOption" filterable remote @query="handleQuery"> <el-option v-for="option in options" :key="option.value" :label="option.label" :value="option.value"></el-option> <el-option v-if="addOption" :key="addOption.value" :label="addOption.label" :value="addOption.value"></el-option> </el-select> <button @click="addOption">新增选项</button> </div> </template> <script> export default { data() { return { selectedOption: '', options: [ { value: 'option1', label: '选项一' }, { value: 'option2', label: '选项二' }, { value: 'option3', label: '选项三' } ], addOption: null } }, methods: { handleQuery(query) { // 处理查询逻辑,根据查询结果设置addOption if (query) { this.addOption = { value: query, label: '新增选项:' + query } } else { this.addOption = null } }, addOption() { // 处理新增选项逻辑 if (this.addOption) { this.options.push(this.addOption) this.selectedOption = this.addOption.value this.addOption = null } } } } </script> ``` 在上面的代码中,我们使用了Element UI中的Select组件,并添加了filterable和remote属性,开启了远程搜索功能。通过监听query事件,根据查询结果动态设置addOption,从而实现了新增选项的功能。同时,我们通过点击按钮的方式触发addOption方法,将新增选项添加到options中,并将其设为当前选中项。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值