hour.vue 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. <template>
  2. <el-radio-group v-model="state.hour.cronEvery" class="el-radio-flex">
  3. <el-radio :label="1">{{ text.Hours.every }}</el-radio>
  4. <el-radio :label="2">
  5. {{ text.Hours.interval[0] }}
  6. <el-input-number
  7. type="number"
  8. :min="1"
  9. :max="60"
  10. :size="size"
  11. v-model="state.hour.incrementIncrement"
  12. />
  13. {{ text.Hours.interval[1] || '' }}
  14. <el-input
  15. type="number"
  16. class="input-width-number"
  17. min="0"
  18. max="59"
  19. :size="size"
  20. v-model="state.hour.incrementStart"
  21. />
  22. {{ text.Hours.interval[2] || '' }}
  23. </el-radio>
  24. <el-radio :label="3">
  25. {{ text.Hours.cycle[0] }}
  26. <el-input-number
  27. type="number"
  28. v-model="state.hour.rangeStart"
  29. :min="0"
  30. :max="60"
  31. :size="size"
  32. />
  33. {{ text.Hours.cycle[1] || '' }}
  34. <el-input-number
  35. type="number"
  36. v-model="state.hour.rangeEnd"
  37. :min="1"
  38. :max="59"
  39. :size="size"
  40. />
  41. {{ text.Hours.cycle[2] || '' }}
  42. </el-radio>
  43. <el-radio :label="4">
  44. {{ text.Hours.specific }}
  45. <el-select multiple v-model="state.hour.specificSpecific" :size="size">
  46. <el-option :value="index" v-for="(item, index) in 24" :key="index">{{
  47. index
  48. }}</el-option>
  49. </el-select>
  50. </el-radio>
  51. </el-radio-group>
  52. </template>
  53. <script>
  54. import { reactive, computed, defineComponent, watch } from 'vue'
  55. import {
  56. ElSelect,
  57. ElOption,
  58. ElInputNumber,
  59. ElInput,
  60. ElRadioGroup,
  61. ElRadio
  62. } from 'element-plus'
  63. export default defineComponent({
  64. name: 'hour',
  65. components: {
  66. ElSelect,
  67. ElOption,
  68. ElInputNumber,
  69. ElInput,
  70. ElRadioGroup,
  71. ElRadio
  72. },
  73. props: {
  74. text: {},
  75. size: {
  76. type: String,
  77. default: 'small'
  78. }
  79. },
  80. setup(props, { emit }) {
  81. const dealData = () => {
  82. let hours = ''
  83. state.hour.specificSpecific.map((val) => {
  84. hours += val + ','
  85. })
  86. hours = hours.slice(0, -1)
  87. return hours
  88. }
  89. const state = reactive({
  90. hour: {
  91. cronEvery: 1,
  92. incrementStart: 3,
  93. incrementIncrement: 5,
  94. rangeStart: 1,
  95. rangeEnd: 0,
  96. specificSpecific: []
  97. },
  98. hoursText: computed(() => {
  99. const cronEvery = state.hour.cronEvery
  100. const hoursObj = {
  101. 1: '*',
  102. 2: state.hour.incrementStart + '/' + state.hour.incrementIncrement,
  103. 3: state.hour.rangeStart + '-' + state.hour.rangeEnd,
  104. 4: dealData()
  105. }
  106. return hoursObj[cronEvery]
  107. })
  108. })
  109. watch(
  110. () => state.hoursText,
  111. (v) => {
  112. const result = {
  113. textData: v,
  114. type: 'hoursText'
  115. }
  116. emit('postResult', result)
  117. },
  118. { immediate: true, deep: true }
  119. )
  120. return {
  121. state
  122. }
  123. }
  124. })
  125. </script>