Vue2实现vue-cron回显以及一些自适应改动

64 篇文章 3 订阅
49 篇文章 2 订阅

参照组件:一个cron表达式生成插件,基于vue3.0与element-plus实现

一、Vue-cron组件改动

computed: {
    text() {
      return Language
    },
    secondsText: {
      get: function () {
        let seconds = ''
        const cronEvery = this.second.cronEvery
        switch (cronEvery.toString()) {
          case '1':
            seconds = '*'
            break
          case '2':
            seconds = this.second.incrementStart + '/' + this.second.incrementIncrement
            break
          case '3':
            this.second.specificSpecific.forEach(val => {
              seconds += val + ','
            })
            seconds = seconds.slice(0, -1)
            break
          case '4':
            seconds = this.second.rangeStart + '-' + this.second.rangeEnd
            break
        }
        return seconds
      }
      ..... //剩下的参照
      },
    cron() {
     // 自适应去除年
      return `${this.secondsText || '*'} ${this.minutesText || '*'} ${this.hoursText || '*'} ${this.daysText || '*'} ${this.monthsText || '*'} ${this.weeksText || '?'} `
    }

二、my-cron组件适配

import Vue from 'vue'
import Cron from '../../../my-cron/src/Cron'
import Base from '../Base'
import { Popover, Button, Input, Tabs, TabPane, Row, Col, Radio, InputNumber, Select, Option } from 'element-ui'

const components = [Popover, Button, Input, Tabs, TabPane, Row, Col, Radio, InputNumber, Select, Option]
components.forEach(comp => {
  Vue.use(comp)
})


export default {
  name: 'MyCron',
  mixins: [Base],
  components: {
    Cron
  },
  props: {
    placeholder: {
      type: String,
      default: '请输入定时策略'
    },
    vm: { // 用于操作实例,例如changeCron时调取后端cron校验
      type: Object,
      default() {
        return {}
      }
    }
  },
  data() {
    return {
      cronPopover: false,
      cron: '',
      value: ''
    }
  },
  watch: {
    cron: {
      handler(val) {
        this.$refs.cron.setValue(val)
        this.fieldValue = val
        this.$emit('change', val)
      }
    },
    fieldValue: {
      immediate: true,
      handler(val) {
        this.cron = val
      }
    }
  },
  methods: {
    changeCron(val) {
      this.cron = val
      this.hidePopover()
    },
    hidePopover() {
      this.cronPopover = false
    }
  },
  render() {
    const vnode = (
      <el-popover vModel={this.cronPopover} disabled={this.disabled || this.readonly}>
        <Cron {...{
          props: { i18n: 'cn' },
          on: {
            change: this.changeCron,
            close: this.hidePopover
          }
        }}></Cron>
        <el-input slot="reference"
          clearable={true}
          disabled={this.disabled}
          readonly={this.readonly}
          vModel={this.cron}
          placeholder={this.placeholder}></el-input>
      </el-popover>
    )
    return this.renderComponent(vnode)
  }
}

三、使用实例


<my-cron label="表达式"
              name="cronExpression"
              :vm="vm"
              :rules="{ required: true, message: '表达式' }">
              </my-cron>
  • vm是当前vue实例
data() {
    return {
      vm: this
    }
  }

四、代码地址

自适应后的Vue-cron组件
封装在form中的cron组件逻辑调整

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值