year.vue 2.9 KB

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