week.vue 3.1 KB

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