second.vue 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. <template>
  2. <el-radio-group v-model="state.second.cronEvery" class="el-radio-flex">
  3. <el-radio :label="1">{{ text.Seconds.every }}</el-radio>
  4. <el-radio :label="2">
  5. {{ text.Seconds.interval[0] }}
  6. <el-input-number
  7. type="number"
  8. :min="1"
  9. :max="60"
  10. :size="size"
  11. v-model="state.second.incrementIncrement"
  12. />
  13. {{ text.Seconds.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.second.incrementStart"
  21. />
  22. {{ text.Seconds.interval[2] || '' }}
  23. </el-radio>
  24. <el-radio :label="3">
  25. {{ text.Seconds.cycle[0] }}
  26. <el-input-number
  27. type="number"
  28. v-model="state.second.rangeStart"
  29. :min="0"
  30. :max="60"
  31. :size="size"
  32. />
  33. {{ text.Seconds.cycle[1] || '' }}
  34. <el-input-number
  35. type="number"
  36. v-model="state.second.rangeEnd"
  37. :min="1"
  38. :max="59"
  39. :size="size"
  40. />
  41. {{ text.Seconds.cycle[2] || '' }}
  42. </el-radio>
  43. <el-radio :label="4">
  44. {{ text.Seconds.specific }}
  45. <el-select multiple v-model="state.second.specificSpecific" :size="size">
  46. <el-option :value="index" v-for="(item, index) in 60" :key="item">{{
  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: 'second',
  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 seconds = ''
  83. state.second.specificSpecific.map((val) => {
  84. seconds += val + ','
  85. })
  86. seconds = seconds.slice(0, -1)
  87. return seconds
  88. }
  89. const state = reactive({
  90. second: {
  91. cronEvery: 1,
  92. incrementStart: 3,
  93. incrementIncrement: 5,
  94. rangeStart: 1,
  95. rangeEnd: 0,
  96. specificSpecific: []
  97. },
  98. secondsText: computed(() => {
  99. const cronEvery = state.second.cronEvery
  100. const secondObj = {
  101. 1: '*',
  102. 2:
  103. state.second.incrementStart + '/' + state.second.incrementIncrement,
  104. 3: state.second.rangeStart + '-' + state.second.rangeEnd,
  105. 4: dealData()
  106. }
  107. return secondObj[cronEvery]
  108. })
  109. })
  110. watch(
  111. () => state.secondsText,
  112. (v) => {
  113. const result = {
  114. textData: v,
  115. type: 'secondsText'
  116. }
  117. emit('postResult', result)
  118. },
  119. { immediate: true, deep: true }
  120. )
  121. return {
  122. state
  123. }
  124. }
  125. })
  126. </script>