issueEducationTrainingPlan.vue 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. <script lang="ts" setup>
  2. import { ref, reactive, onMounted, watch } from 'vue';
  3. import { queryUserGroupPage } from '@/api/system/person-group';
  4. import { IssueWorkPlanFormRules } from '../configs/form';
  5. import { DistributeParameters } from '../configs/tables';
  6. import { type FormInstance, ElMessage } from 'element-plus';
  7. const props = defineProps<{
  8. data: any;
  9. visible;
  10. }>();
  11. const emit = defineEmits(['update:visible', 'confirm']);
  12. /**
  13. * @description: 下发参数
  14. * @return {*}
  15. */
  16. const issueWorkPlanForm = reactive<DistributeParameters>({
  17. id: 0,
  18. groupId: '',
  19. startTime: '',
  20. endTime: '',
  21. responsibleDeptIds: '',
  22. });
  23. const dialogVisible = ref(props.visible);
  24. watch(
  25. () => props.visible,
  26. (newVal) => {
  27. dialogVisible.value = newVal;
  28. },
  29. );
  30. watch(dialogVisible, (newVal) => {
  31. emit('update:visible', newVal);
  32. });
  33. watch(
  34. () => props.data,
  35. (newData) => {
  36. if (!newData) return;
  37. Object.assign(issueWorkPlanForm, {
  38. id: newData.mid,
  39. responsibleDeptIds: newData.responsibleDeptIds,
  40. groupId: '',
  41. startTime: '',
  42. endTime: '',
  43. });
  44. },
  45. { immediate: true, deep: true },
  46. );
  47. /**
  48. * @description: 下发rules验证
  49. * @param {*} value
  50. * @return {*}
  51. */
  52. const issueWorkPlanFormRules = ref(IssueWorkPlanFormRules);
  53. const groupList = ref<any>([]);
  54. // 获取级联部门分组数据
  55. const loadGroupTreeData = async () => {
  56. queryUserGroupPage({
  57. pageNumber: 1,
  58. pageSize: 500,
  59. }).then((res) => {
  60. groupList.value = res.records;
  61. });
  62. };
  63. const handleCancelIssue = () => {
  64. dialogVisible.value = false;
  65. };
  66. // 表单引用
  67. const formRef = ref<FormInstance>();
  68. const handleConfirmIssue = async () => {
  69. if (!formRef.value) return;
  70. if( issueWorkPlanForm.startTime > issueWorkPlanForm.endTime ){
  71. ElMessage.error('计划开始时间不能晚于计划结束时间');
  72. return;
  73. }
  74. const res = await formRef.value.validateField();
  75. if (res) {
  76. emit('confirm', issueWorkPlanForm);
  77. handleCancelIssue();
  78. }
  79. };
  80. onMounted(() => {
  81. loadGroupTreeData();
  82. });
  83. </script>
  84. <template>
  85. <div class="content">
  86. <el-dialog
  87. v-model="dialogVisible"
  88. title="下发安全教育培训计划任务"
  89. width="600"
  90. :close-on-click-modal="false"
  91. :close-on-press-escape="false"
  92. @close="handleCancelIssue"
  93. >
  94. <div>
  95. <el-form ref="formRef" :model="issueWorkPlanForm" :rules="issueWorkPlanFormRules" label-width="200px">
  96. <!-- 培训责任部门 -->
  97. <el-form-item label="培训责任部门:" prop="responsibleDeptIds">
  98. <el-select
  99. v-model="issueWorkPlanForm.responsibleDeptIds"
  100. :disabled="true"
  101. size="large"
  102. placeholder="分组名称"
  103. style="width: 100%"
  104. >
  105. <el-option :label="props.data.responsibleNames" :value="props.data.responsibleDeptIds" />
  106. </el-select>
  107. </el-form-item>
  108. <el-form-item label="培训责任部门责任人分组:" prop="groupId">
  109. <el-select
  110. v-model="issueWorkPlanForm.groupId"
  111. size="large"
  112. placeholder="请选择培训责任部门责任人所在分组名称"
  113. style="width: 100%"
  114. >
  115. <el-option v-for="group in groupList" :key="group.id" :label="group.name" :value="group.id" />
  116. </el-select>
  117. </el-form-item>
  118. <el-form-item label="计划开始时间:" prop="startTime">
  119. <el-date-picker
  120. v-model="issueWorkPlanForm.startTime"
  121. type="date"
  122. placeholder="请选择完成时间"
  123. style="width: 100%"
  124. />
  125. </el-form-item>
  126. <el-form-item label="计划完成时间:" prop="endTime">
  127. <el-date-picker
  128. v-model="issueWorkPlanForm.endTime"
  129. type="date"
  130. placeholder="请选择完成时间"
  131. style="width: 100%"
  132. />
  133. </el-form-item>
  134. </el-form>
  135. </div>
  136. <template #footer>
  137. <div class="dialog-footer">
  138. <el-button @click="handleCancelIssue">取消</el-button>
  139. <el-button type="primary" @click="handleConfirmIssue"> 确认 </el-button>
  140. </div>
  141. </template>
  142. </el-dialog>
  143. </div>
  144. </template>