index.vue 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. <template>
  2. <div>
  3. <!-- 策略类型 -->
  4. <a-form-item :label="$t('cloudenv.text_433')">
  5. <a-radio-group v-decorator="decorators.cycle_type">
  6. <a-radio-button v-for="(v, k) in $t('cloudenvScheduledtaskGroupCycleType')" :key="k" :value="k">{{v}}</a-radio-button>
  7. </a-radio-group>
  8. </a-form-item>
  9. <!-- 周期策略 -->
  10. <a-form-item :label="$t('cloudenv.frequency')" v-if="form.fc.getFieldValue('cycleTimer.cycle_type') === 'cycle'">
  11. <div class="d-flex align-items-center">
  12. {{$t('cloudenv.each')}}
  13. <a-input-number class="ml-2" :min="1" v-decorator="decorators.cycle_num" />
  14. <a-select class="mr-2" v-decorator="decorators.cycle_type2" style="width: 100px">
  15. <a-select-option v-for="(item,index) in cycleTypeOpts" :key="index" :value="item.key">{{item.label}}</a-select-option>
  16. </a-select>
  17. {{$t('cloudenv.cycle_once')}}
  18. </div>
  19. </a-form-item>
  20. <!-- 周 -->
  21. <a-form-item :label="$t('cloudenv.text_434')" v-if="form.fc.getFieldValue('cycleTimer.cycle_type') === 'week'">
  22. <a-select v-decorator="decorators.weekDays" mode="multiple">
  23. <a-select-option v-for="(v, k) in $t('flexGroupSubCycleTypeWeek')" :key="k" :value="parseInt(k)">{{v}}</a-select-option>
  24. </a-select>
  25. </a-form-item>
  26. <!-- 月 -->
  27. <a-form-item :label="$t('cloudenv.text_435')" v-if="form.fc.getFieldValue('cycleTimer.cycle_type') === 'month'">
  28. <a-select v-decorator="decorators.monthDays" mode="multiple">
  29. <a-select-option v-for="i in 31" :key="i" :value="parseInt(i)">{{$t('cloudenv.text_436', [i])}}</a-select-option>
  30. </a-select>
  31. </a-form-item>
  32. <!-- 单次策略 -->
  33. <template v-if="form.fc.getFieldValue('cycleTimer.cycle_type') === 'one'">
  34. <a-form-item :label="$t('cloudenv.text_437')">
  35. <a-date-picker
  36. :showTime="{
  37. format: 'HH:mm',
  38. }"
  39. :disabledDate="disabledDate"
  40. :disabledTime="disabledDateTime"
  41. v-decorator="decorators.execTime"
  42. format="YYYY-MM-DD HH:mm" />
  43. </a-form-item>
  44. </template>
  45. <!-- 非单次策略 -->
  46. <template v-if="form.fc.getFieldValue('cycleTimer.cycle_type') !== 'one'">
  47. <a-form-item :label="$t('cloudenv.text_437')" v-if="form.fc.getFieldValue('cycleTimer.cycle_type') !== 'cycle'">
  48. <a-time-picker v-decorator="decorators.hourMinute" format="HH:mm" />
  49. </a-form-item>
  50. <a-form-item :label="$t('cloudenv.text_438')" :help="$t('cloudenv.range_picker_help')">
  51. <a-range-picker
  52. v-decorator="decorators.startEndTime"
  53. :disabledDate="disabledDate"
  54. format="YYYY-MM-DD" />
  55. </a-form-item>
  56. </template>
  57. </div>
  58. </template>
  59. <script>
  60. export default {
  61. props: {
  62. form: Object,
  63. },
  64. data () {
  65. return {
  66. name: 'SckeduledTaskTime',
  67. decorators: {
  68. cycle_type: [
  69. 'cycleTimer.cycle_type',
  70. {
  71. initialValue: 'day',
  72. rules: [
  73. { required: true, message: this.$t('cloudenv.text_443') },
  74. ],
  75. },
  76. ],
  77. weekDays: [
  78. 'cycleTimer.week_days',
  79. {
  80. initialValue: [1, 2, 3, 4, 5],
  81. rules: [
  82. { required: true, message: this.$t('cloudenv.text_444') },
  83. ],
  84. },
  85. ],
  86. monthDays: [
  87. 'cycleTimer.month_days',
  88. {
  89. initialValue: [1],
  90. rules: [
  91. { required: true, message: this.$t('cloudenv.text_445') },
  92. ],
  93. },
  94. ],
  95. cycle_num: [
  96. 'cycleTimer.cycle_num',
  97. {
  98. initialValue: 1,
  99. rules: [
  100. { required: true, message: this.$t('cloudenv.input_cycle_num') },
  101. ],
  102. },
  103. ],
  104. cycle_type2: [
  105. 'cycleTimer.cycle_type2',
  106. {
  107. initialValue: 'month',
  108. },
  109. ],
  110. // 小时:分钟
  111. hourMinute: [
  112. 'hourMinute',
  113. {
  114. initialValue: this.$moment().startOf('day').add(2, 'h'),
  115. rules: [
  116. { required: true, message: this.$t('cloudenv.text_446') },
  117. ],
  118. },
  119. ],
  120. // 有效时间
  121. startEndTime: [
  122. 'startEndTime',
  123. {
  124. // initialValue: [1],
  125. rules: [
  126. { required: false, message: this.$t('cloudenv.text_447') },
  127. ],
  128. },
  129. ],
  130. execTime: [
  131. 'timer.execTime',
  132. {
  133. initialValue: this.$moment().add(1, 'h'),
  134. rules: [
  135. { required: true, message: this.$t('cloudenv.text_437') },
  136. ],
  137. },
  138. ],
  139. },
  140. cycleTypeOpts: [
  141. { key: 'hour', label: this.$t('cloudenv.cycle_type.hour') },
  142. { key: 'day', label: this.$t('cloudenv.cycle_type.day') },
  143. { key: 'week', label: this.$t('cloudenv.cycle_type.week') },
  144. { key: 'month', label: this.$t('cloudenv.cycle_type.month') },
  145. ],
  146. }
  147. },
  148. methods: {
  149. disabledDate (current) {
  150. return current && current < this.$moment().subtract(1, 'd').endOf('day')
  151. },
  152. range (start, end) {
  153. const result = []
  154. for (let i = start; i < end; i++) {
  155. result.push(i)
  156. }
  157. return result
  158. },
  159. disabledDateTime (_ = this.$moment(), type) {
  160. let disabledHours = []
  161. let disabledMinutes = []
  162. let disabledSeconds = []
  163. const dayDiff = _.diff(this.$moment(), 'days', true)
  164. const hourDiff = _.diff(this.$moment(), 'hours', true)
  165. const minutesDiff = _.diff(this.$moment(), 'minutes', true)
  166. // 当天
  167. if (dayDiff > -1 && dayDiff < 0) {
  168. disabledHours = this.range(0, this.$moment().hour())
  169. if (hourDiff > -1 && hourDiff < 0) {
  170. disabledMinutes = this.range(0, this.$moment().minute())
  171. if (minutesDiff > -1 && minutesDiff < 0) {
  172. disabledSeconds = this.range(0, this.$moment().second())
  173. }
  174. }
  175. }
  176. return {
  177. disabledHours: () => disabledHours,
  178. disabledMinutes: () => disabledMinutes,
  179. disabledSeconds: () => disabledSeconds,
  180. }
  181. },
  182. transformParams (params, values) {
  183. if (values.cycleTimer.cycle_type === 'one') {
  184. params.scheduled_type = 'timing'
  185. params.timer = values.timer
  186. } else {
  187. params.scheduled_type = 'cycle'
  188. params.cycle_timer = { ...values.cycleTimer }
  189. }
  190. // 触发时间
  191. if (values.hourMinute) {
  192. // 转换为utc hour
  193. const time = this.$moment(values.hourMinute)
  194. params.cycle_timer.hour = time.subtract(time.utcOffset(), 'minutes').hour()
  195. params.cycle_timer.minute = values.hourMinute.minutes()
  196. }
  197. // 有效时间
  198. if (values.startEndTime && values.startEndTime.length > 0) {
  199. params.cycle_timer.startTime = values.startEndTime[0].set({
  200. hour: 0,
  201. minute: 0,
  202. second: 0,
  203. })
  204. params.cycle_timer.endTime = values.startEndTime[1].set({
  205. hour: 23,
  206. minute: 59,
  207. second: 59,
  208. })
  209. } else {
  210. // 未设置有效时间时,有效时间为 今天-100年
  211. if (!params.cycle_timer) params.cycle_timer = {}
  212. params.cycle_timer.startTime = this.$moment()
  213. params.cycle_timer.endTime = this.$moment().add('year', 100)
  214. }
  215. if (params.cycle_timer && params.cycle_timer.cycle_type === 'cycle') {
  216. params.cycle_timer.cycle_type = params.cycle_timer.cycle_type2
  217. delete params.cycle_timer.cycle_type2
  218. }
  219. },
  220. },
  221. }
  222. </script>