day.vue 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. <template>
  2. <el-radio-group v-model="state.day.cronEvery" class="el-radio-flex">
  3. <el-radio :label="1">{{ text.Days.every }}</el-radio>
  4. <el-radio :label="7">{{ text.Days.noTouch }}</el-radio>
  5. <el-radio :label="2">
  6. {{ text.Days.cycleDay[0] }}
  7. <el-input-number
  8. :size="size"
  9. type="number"
  10. v-model="state.day.cycleStart"
  11. :min="1"
  12. :max="31"
  13. />
  14. {{ text.Days.cycleDay[1] }}
  15. <el-input-number
  16. :size="size"
  17. type="number"
  18. v-model="state.day.cycleEnd"
  19. :min="1"
  20. :max="31"
  21. />
  22. {{ text.Days.cycleDay[2] }}
  23. </el-radio>
  24. <el-radio :label="3">
  25. {{ text.Days.intervalDay[0] }}
  26. <el-input-number
  27. :size="size"
  28. type="number"
  29. v-model="state.day.loopStart"
  30. :min="1"
  31. :max="31"
  32. />
  33. {{ text.Days.intervalDay[1] }}
  34. <el-input-number
  35. :size="size"
  36. type="number"
  37. v-model="state.day.loopEnd"
  38. :min="1"
  39. :max="31"
  40. />
  41. {{ text.Days.intervalDay[2] }}
  42. </el-radio>
  43. <el-radio :label="4">
  44. {{ text.Days.workDay[0] }}
  45. <el-input-number
  46. :size="size"
  47. type="number"
  48. v-model="state.day.workDay"
  49. :min="1"
  50. :max="7"
  51. />
  52. {{ text.Days.workDay[1] }}
  53. </el-radio>
  54. <el-radio :label="5">
  55. {{ text.Days.lastDay }}
  56. </el-radio>
  57. <el-radio :label="6">
  58. {{ text.Days.specificDay }}
  59. <el-select multiple v-model="state.day.specificSpecific" :size="size">
  60. <el-option v-for="(val, index) in 31" :key="index" :value="val">
  61. {{ val }}
  62. </el-option>
  63. </el-select>
  64. </el-radio>
  65. </el-radio-group>
  66. </template>
  67. <script>
  68. import { reactive, computed, defineComponent, watch } from 'vue'
  69. import {
  70. ElSelect,
  71. ElOption,
  72. ElInputNumber,
  73. ElRadioGroup,
  74. ElRadio
  75. } from 'element-plus'
  76. export default defineComponent({
  77. name: 'day',
  78. components: {
  79. ElSelect,
  80. ElOption,
  81. ElInputNumber,
  82. ElRadioGroup,
  83. ElRadio
  84. },
  85. props: {
  86. text: {},
  87. size: {
  88. type: String,
  89. default: 'small'
  90. }
  91. },
  92. setup(props, { emit }) {
  93. const dealData = () => {
  94. let days = ''
  95. state.day.specificSpecific.map((val) => {
  96. days += val + ','
  97. })
  98. days = days.slice(0, -1)
  99. return days
  100. }
  101. const state = reactive({
  102. day: {
  103. cronEvery: 1,
  104. cycleStart: 1,
  105. cycleEnd: 2,
  106. loopStart: 1,
  107. loopEnd: 1,
  108. workDay: 1,
  109. lastDay: 0,
  110. specificSpecific: []
  111. },
  112. daysText: computed(() => {
  113. const cronEvery = state.day.cronEvery
  114. const dayObj = {
  115. 1: '*',
  116. 2: state.day.cycleStart + '-' + state.day.cycleEnd,
  117. 3: state.day.loopStart + '/' + state.day.loopEnd,
  118. 4: state.day.workDay + 'W',
  119. 5: 'L',
  120. 6: dealData(),
  121. 7: '?'
  122. }
  123. return dayObj[cronEvery]
  124. })
  125. })
  126. watch(
  127. () => state.daysText,
  128. (v) => {
  129. const result = {
  130. textData: v,
  131. type: 'daysText'
  132. }
  133. emit('postResult', result)
  134. },
  135. { immediate: true, deep: true }
  136. )
  137. return {
  138. state
  139. }
  140. }
  141. })
  142. </script>