issueEducationTrainingPlan.vue 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  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 } 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. const res = await formRef.value.validateField();
  71. if (res) {
  72. emit('confirm', issueWorkPlanForm);
  73. handleCancelIssue();
  74. }
  75. };
  76. onMounted(() => {
  77. loadGroupTreeData();
  78. });
  79. </script>
  80. <template>
  81. <div class="content">
  82. <el-dialog
  83. v-model="dialogVisible"
  84. title="下发安全教育培训计划任务"
  85. width="600"
  86. :close-on-click-modal="false"
  87. :close-on-press-escape="false"
  88. @close="handleCancelIssue"
  89. >
  90. <div>
  91. <el-form ref="formRef" :model="issueWorkPlanForm" :rules="issueWorkPlanFormRules" label-width="200px">
  92. <!-- 培训责任部门 -->
  93. <el-form-item label="培训责任部门:" prop="responsibleDeptIds">
  94. <el-select
  95. v-model="issueWorkPlanForm.responsibleDeptIds"
  96. :disabled="true"
  97. size="large"
  98. placeholder="分组名称"
  99. style="width: 100%"
  100. >
  101. <el-option :label="props.data.responsibleNames" :value="props.data.responsibleDeptIds" />
  102. </el-select>
  103. </el-form-item>
  104. <el-form-item label="培训责任部门责任人分组:" prop="groupId">
  105. <el-select
  106. v-model="issueWorkPlanForm.groupId"
  107. size="large"
  108. placeholder="请选择培训责任部门责任人所在分组名称"
  109. style="width: 100%"
  110. >
  111. <el-option v-for="group in groupList" :key="group.id" :label="group.name" :value="group.id" />
  112. </el-select>
  113. </el-form-item>
  114. <el-form-item label="计划开始时间:" prop="startTime">
  115. <el-date-picker
  116. v-model="issueWorkPlanForm.startTime"
  117. type="date"
  118. placeholder="请选择完成时间"
  119. style="width: 100%"
  120. />
  121. </el-form-item>
  122. <el-form-item label="计划完成时间:" prop="endTime">
  123. <el-date-picker
  124. v-model="issueWorkPlanForm.endTime"
  125. type="date"
  126. placeholder="请选择完成时间"
  127. style="width: 100%"
  128. />
  129. </el-form-item>
  130. </el-form>
  131. </div>
  132. <template #footer>
  133. <div class="dialog-footer">
  134. <el-button @click="handleCancelIssue">取消</el-button>
  135. <el-button type="primary" @click="handleConfirmIssue"> 确认 </el-button>
  136. </div>
  137. </template>
  138. </el-dialog>
  139. </div>
  140. </template>