vue3.x + elementPlus 封装组件之time-picker 级联选择器

老规矩----前面文章的步骤创建文件导入js等

1. 上才艺

<template>
  <el-time-select
    v-if="step"
    :model-value="valueStep"
    :start="stepList.start"
    :step="stepList.step"
    :end="stepList.end"
    placeholder="选择时间"
    @change="changeStep"
  />
  <!--   :picker-options="timeOptions" -->
  <el-time-picker v-else-if="!isDoubleTime" :model-value="value" :default-value="defaultTime" placeholder="选择时间" @change="change" />
  <el-time-picker
    v-else
    :model-value="valueDbl"
    :default-value="defaultTimeDbl"
    is-range
    range-separator="至"
    start-placeholder="开始时间"
    end-placeholder="结束时间"
    @change="changeDbl"
  />

</template>

<script>
export default {
  props: {
    // 是否步长
    stepList: {
      default() {
        return {
          start: '00:00',
          step: '00:05',
          end: '24:00'
        }
      },
      type: Object
    },
    // 是否步长
    step: {
      default() {
        return false
      },
      type: Boolean
    },
    // 是否展示两个时间
    isDoubleTime: {
      default() {
        return false
      },
      type: Boolean
    },
    // 两个时间的默认数据展示
    defaultTimeDbl: {
      default() {
        return []
      },
      type: [Array, Date]
    },
    valueDbl: {
      default() {
        return []
      },
      type: [Array, Date]
    },
    // 默认时间和步长
    timeOptions: {
      default() {
        return {
          start: '08:30',
          step: '00:15',
          end: '18:30'
        }
      },
      type: Object
    },
    value: {
      default() {
        return ''
      },
      type: String
    },
    // 单个时间的默认数据展示
    defaultTime: {
      default() {
        return ''
      },
      type: [String, Date]
    },
    // 有步长的
    valueStep: {
      default() {
        return ''
      },
      type: String
    },
    // 单个时间的默认数据展示
    defaultTimeStep: {
      default() {
        return ''
      },
      type: String
    }
  },
  emits: ['dataTimeChange', 'dataTimeChangeDbl', 'dataTimeChangeStep'],
  setup(props, ctx) {
    const change = (value) => {
      ctx.emit('dataTimeChange', value)
    }
    const changeDbl = (value) => {
      ctx.emit('dataTimeChangeDbl', value)
    }
    const changeStep = (value) => {
      ctx.emit('dataTimeChangeStep', value)
    }
    return { change, changeDbl, changeStep }
  }
}
</script>

2.使用

 <div>时分秒</div>
    <div>
      <span>时分秒选择</span>
      <MjbDateTime
        v-model="pickerData.dateTime"
        :default-time="pickerData.dateTime"
        :placeholder="pickerData.placeholder"
        @dataTimeChange="dataTimeChange"
      ></MjbDateTime>
    </div>
    <div>
      <span>时分秒区间选择</span>
      <MjbDateTime
        v-model="pickerData.dateTime2"
        is-double-time
        :default-time-dbl="pickerData.dateTime2"
        @dataTimeChangeDbl="dataTimeChange2"
      ></MjbDateTime>
    </div>
    <div>
      <span>时分秒选择步长</span>
      <MjbDateTime
        v-model="pickerData.dateTime3"
        :default-time-step="pickerData.dateTime3"
        :is-double-time="false"
        :step-list="pickerData.stepList"
        step
        @dataTimeChangeStep="dataTimeChangeStep"
      ></MjbDateTime>
    </div>


<script>
import { reactive, toRefs } from 'vue'
// shortcuts  快捷时间选择 例子: :shortcuts="[1, 5, 10]"
const pickerData = reactive({
  // 时分秒数据
  dateTime: new Date(2020, 9, 10, 18, 30),
  dateTime2: [new Date(2016, 9, 10, 8, 40), new Date(2016, 9, 10, 9, 40)],
  dateTime3: '08:30',
  stepList: {
    start: '08:30',
    step: '00:15',
    end: '18:30'
  }
})
export default {
  setup() {

    //   时间修改回调
    const dataTimeChange = (time) => {
      console.log(time)
    }
    //   时间修改回调
    const dataTimeChange2 = (time) => {
      console.log(time)
    }
    //   时间修改回调
    const dataTimeChangeStep = (time) => {
      console.log(time)
    }
    return {  dataTimeChange, dataTimeChange2, dataTimeChangeStep }
  }
}
</script>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以尝试以下步骤来封装一个Vue 3和TypeScript下使用Element Plus的表单提交组件: 1. 安装必要的依赖: - Vue 3:`npm install vue@next` - TypeScript:`npm install -D typescript` - Element Plus:`npm install element-plus` 2. 创建一个新的Vue组件,并为其选择一个合适的名称,例如`FormSubmit.vue`。 3. 在`FormSubmit.vue`文件中,导入必要的模块和样式: ```vue <template> <!-- 表单内容 --> </template> <script lang="ts"> import { defineComponent } from 'vue'; import { ElButton, ElForm, ElFormItem } from 'element-plus'; export default defineComponent({ components: { ElButton, ElForm, ElFormItem, }, }); </script> <style scoped> /* Element Plus 样式 */ @import 'element-plus/packages/theme-chalk/src/index.scss'; /* 自定义样式 */ /* ... */ </style> ``` 4. 在模板中编写表单内容,并使用Element Plus的组件来构建表单: ```vue <template> <el-form ref="form" :model="formData" label-width="120px"> <el-form-item label="姓名" prop="name"> <el-input v-model="formData.name"></el-input> </el-form-item> <!-- 更多表单项 --> <el-form-item> <el-button type="primary" @click="submitForm">提交</el-button> </el-form-item> </el-form> </template> <script lang="ts"> // ... export default defineComponent({ // ... data() { return { formData: { name: '', // 更多表单字段 } }; }, methods: { submitForm() { // 表单提交逻辑 if (this.$refs.form.validate()) { // 表单验证通过,执行提交操作 // ... } } } }); </script> ``` 这样,你就可以使用封装好的表单提交组件来方便地处理表单提交了。你可以根据实际需求添加更多的表单项,并在`submitForm`方法中实现你的提交逻辑。希望这可以帮到你!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值