DueDate.vue 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252
  1. <template>
  2. <div>
  3. <el-dialog v-model="visible" :title="title" width="600px" append-to-body>
  4. <el-form label-width="100px">
  5. <el-form-item label="小时">
  6. <el-radio-group v-model="hourValue" @change="hourChange">
  7. <el-radio-button label="4" />
  8. <el-radio-button label="8" />
  9. <el-radio-button label="12" />
  10. <el-radio-button label="24" />
  11. <el-radio-button label="自定义" />
  12. <el-input-number v-show="hourValue === '自定义'" v-model="customHourValue" :min="1" @change="customHourValueChange"></el-input-number>
  13. </el-radio-group>
  14. </el-form-item>
  15. <el-form-item label="天">
  16. <el-radio-group v-model="dayValue" @change="dayChange">
  17. <el-radio-button label="1" />
  18. <el-radio-button label="2" />
  19. <el-radio-button label="3" />
  20. <el-radio-button label="4" />
  21. <el-radio-button label="自定义" />
  22. <el-input-number v-show="dayValue === '自定义'" v-model="customDayValue" :min="1" @change="customDayValueChange"></el-input-number>
  23. </el-radio-group>
  24. </el-form-item>
  25. <el-form-item label="周">
  26. <el-radio-group v-model="weekValue" @change="weekChange">
  27. <el-radio-button label="1" />
  28. <el-radio-button label="2" />
  29. <el-radio-button label="3" />
  30. <el-radio-button label="4" />
  31. <el-radio-button label="自定义" />
  32. <el-input-number v-show="weekValue === '自定义'" v-model="customWeekValue" :min="1" @change="customWeekValueChange"></el-input-number>
  33. </el-radio-group>
  34. </el-form-item>
  35. <el-form-item label="月">
  36. <el-radio-group v-model="monthValue" @change="monthChange">
  37. <el-radio-button label="1" />
  38. <el-radio-button label="2" />
  39. <el-radio-button label="3" />
  40. <el-radio-button label="4" />
  41. <el-radio-button label="自定义" />
  42. <el-input-number v-show="monthValue === '自定义'" v-model="customMonthValue" :min="1" @change="customMonthValueChange"></el-input-number>
  43. </el-radio-group>
  44. </el-form-item>
  45. </el-form>
  46. <template #footer>
  47. <div>
  48. <el-button @click="closeDialog">取消</el-button>
  49. <el-button type="primary" @click="confirm">确定</el-button>
  50. </div>
  51. </template>
  52. </el-dialog>
  53. </div>
  54. </template>
  55. <script setup lang="ts">
  56. import useDialog from '@/hooks/useDialog';
  57. interface PropType {
  58. modelValue?: string;
  59. data?: string;
  60. }
  61. const prop = withDefaults(defineProps<PropType>(), {
  62. modelValue: '',
  63. data: ''
  64. });
  65. const emit = defineEmits(['update:modelValue', 'confirmCallBack']);
  66. const { title, visible, openDialog, closeDialog } = useDialog({
  67. title: '设置任务到期时间'
  68. });
  69. const formValue = ref();
  70. const valueType = ref();
  71. const hourValue = ref('');
  72. const dayValue = ref('');
  73. const weekValue = ref('');
  74. const monthValue = ref('');
  75. const customHourValue = ref(1);
  76. const customDayValue = ref(1);
  77. const customWeekValue = ref(1);
  78. const customMonthValue = ref(1);
  79. const hourValueConst = ['4', '8', '12', '24'];
  80. const dayAndWeekAndMonthValueConst = ['1', '2', '3', '4'];
  81. const initValue = () => {
  82. formValue.value = prop.data;
  83. if (prop.data) {
  84. const lastStr = prop.data.substring(prop.data.length - 1);
  85. if (lastStr === 'H') {
  86. const hourValueValue = prop.data.substring(2, prop.data.length - 1);
  87. if (hourValueConst.includes(hourValueValue)) {
  88. hourValue.value = hourValueValue;
  89. } else {
  90. hourValue.value = '自定义';
  91. customHourValue.value = Number(hourValueValue);
  92. }
  93. }
  94. const dayAndWeekAndMonthValue = prop.data.substring(1, prop.data.length - 1);
  95. if (lastStr === 'D') {
  96. if (dayAndWeekAndMonthValueConst.includes(dayAndWeekAndMonthValue)) {
  97. dayValue.value = dayAndWeekAndMonthValue;
  98. } else {
  99. dayValue.value = '自定义';
  100. customDayValue.value = Number(dayAndWeekAndMonthValue);
  101. }
  102. }
  103. if (lastStr === 'W') {
  104. if (dayAndWeekAndMonthValueConst.includes(dayAndWeekAndMonthValue)) {
  105. weekValue.value = dayAndWeekAndMonthValue;
  106. } else {
  107. weekValue.value = '自定义';
  108. customWeekValue.value = Number(dayAndWeekAndMonthValue);
  109. }
  110. }
  111. if (lastStr === 'M') {
  112. if (dayAndWeekAndMonthValueConst.includes(dayAndWeekAndMonthValue)) {
  113. monthValue.value = dayAndWeekAndMonthValue;
  114. } else {
  115. monthValue.value = '自定义';
  116. customMonthValue.value = Number(dayAndWeekAndMonthValue);
  117. }
  118. }
  119. }
  120. };
  121. const confirm = () => {
  122. emit('update:modelValue', formValue.value);
  123. emit('confirmCallBack', formValue.value);
  124. closeDialog();
  125. };
  126. const customHourValueChange = (customHourValue) => {
  127. formValue.value = `PT${customHourValue}H`;
  128. dayValue.value = '';
  129. weekValue.value = '';
  130. monthValue.value = '';
  131. customDayValue.value = 1;
  132. customWeekValue.value = 1;
  133. customMonthValue.value = 1;
  134. };
  135. const customDayValueChange = (customDayValue) => {
  136. formValue.value = `P${customDayValue}D`;
  137. hourValue.value = '';
  138. weekValue.value = '';
  139. monthValue.value = '';
  140. customHourValue.value = 1;
  141. customWeekValue.value = 1;
  142. customMonthValue.value = 1;
  143. };
  144. const customWeekValueChange = (customWeekValue) => {
  145. formValue.value = `P${customWeekValue}W`;
  146. hourValue.value = '';
  147. dayValue.value = '';
  148. monthValue.value = '';
  149. customHourValue.value = 1;
  150. customDayValue.value = 1;
  151. customMonthValue.value = 1;
  152. };
  153. const customMonthValueChange = (customMonthValue) => {
  154. formValue.value = `P${customMonthValue}M`;
  155. hourValue.value = '';
  156. dayValue.value = '';
  157. weekValue.value = '';
  158. customHourValue.value = 1;
  159. customDayValue.value = 1;
  160. customWeekValue.value = 1;
  161. };
  162. const hourChange = (hourValue) => {
  163. if (hourValue === '自定义') {
  164. formValue.value = `PT${customHourValue.value}H`;
  165. } else {
  166. formValue.value = `PT${hourValue}H`;
  167. }
  168. dayValue.value = '';
  169. weekValue.value = '';
  170. monthValue.value = '';
  171. customDayValue.value = 1;
  172. customWeekValue.value = 1;
  173. customMonthValue.value = 1;
  174. };
  175. const dayChange = (dayValue) => {
  176. if (dayValue === '自定义') {
  177. formValue.value = `P${customDayValue.value}D`;
  178. } else {
  179. formValue.value = `P${dayValue}D`;
  180. }
  181. hourValue.value = '';
  182. weekValue.value = '';
  183. monthValue.value = '';
  184. customHourValue.value = 1;
  185. customWeekValue.value = 1;
  186. customMonthValue.value = 1;
  187. };
  188. const weekChange = (weekValue) => {
  189. if (weekValue === '自定义') {
  190. formValue.value = `P${customWeekValue.value}W`;
  191. } else {
  192. formValue.value = `P${weekValue}W`;
  193. }
  194. hourValue.value = '';
  195. dayValue.value = '';
  196. monthValue.value = '';
  197. customHourValue.value = 1;
  198. customDayValue.value = 1;
  199. customMonthValue.value = 1;
  200. };
  201. const monthChange = (monthValue) => {
  202. if (monthValue === '自定义') {
  203. formValue.value = `P${customMonthValue.value}M`;
  204. } else {
  205. formValue.value = `P${monthValue}M`;
  206. }
  207. hourValue.value = '';
  208. dayValue.value = '';
  209. weekValue.value = '';
  210. customHourValue.value = 1;
  211. customDayValue.value = 1;
  212. customWeekValue.value = 1;
  213. };
  214. watch(
  215. () => visible.value,
  216. () => {
  217. if (visible.value) {
  218. initValue();
  219. }
  220. }
  221. );
  222. defineExpose({
  223. openDialog,
  224. closeDialog
  225. });
  226. </script>