DrillPlanCreateItem.vue 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. <template>
  2. <div>
  3. <BasicForm ref="basicFormRef" :formData="ruleFormData" :formRules="formRules" :formConfig="ruleFormConfig">
  4. <template #drillScope>
  5. <el-select v-model="ruleFormData.drillScope" placeholder="请选择演练规模" filterable>
  6. <el-option
  7. v-for="item in drillScopeDice"
  8. :key="item.itemCode"
  9. :label="item.itemValue"
  10. :value="item.itemCode"
  11. />
  12. </el-select>
  13. </template>
  14. <template #responsibleDeptIdList>
  15. <el-cascader
  16. v-model="ruleFormData.responsibleDeptIdList"
  17. :options="deptTree"
  18. :props="cascaderProp"
  19. clearable
  20. collapse-tags
  21. :show-all-levels="false"
  22. :max-collapse-tags="3"
  23. placeholder="请选择责任部门"
  24. >
  25. </el-cascader>
  26. </template>
  27. <template #coordinateDeptIdList>
  28. <el-cascader
  29. v-model="ruleFormData.coordinateDeptIdList"
  30. :options="deptTree"
  31. :props="cascaderProp"
  32. clearable
  33. collapse-tags
  34. :show-all-levels="false"
  35. :max-collapse-tags="3"
  36. popper-class="cascader-popper--custom"
  37. placeholder="请选择配合部门"
  38. >
  39. </el-cascader>
  40. </template>
  41. <template #emergencyPlanId>
  42. <el-select
  43. v-model="ruleFormData.emergencyPlanId"
  44. placeholder="请选择应急预案"
  45. popper-class="el-scrollbar--custom"
  46. filterable
  47. >
  48. <el-option v-for="item in allPlans" :key="item.id" :label="item.planName" :value="item.id" />
  49. </el-select>
  50. </template>
  51. <template #approvalTemplateId>
  52. <el-select
  53. v-model="ruleFormData.approvalTemplateId"
  54. placeholder="请选择审批流程"
  55. popper-class="el-scrollbar--custom"
  56. filterable
  57. >
  58. <el-option v-for="item in allApprovals" :key="item.id" :label="item.templateName" :value="item.id" />
  59. </el-select>
  60. </template>
  61. </BasicForm>
  62. </div>
  63. </template>
  64. <script setup lang="ts">
  65. import BasicForm from '@/components/BasicForm.vue';
  66. import { useFormConfigHook } from '@/hooks/useFormConfigHook';
  67. import { DRILL_CREATE_FORM_CONFIG, DRILL_CREATE_FORM_DATA, DRILL_CREATE_FORM_RULES } from '../configs/plan/form';
  68. import { CreateEmergencyDrillRuleForm } from '../types';
  69. import { onMounted, ref } from 'vue';
  70. import { DeptTree } from '@/types/dept/type';
  71. import { getAllDepartments } from '@/api/auth/dept';
  72. import { getAllApproval } from '@/api/approval/approval';
  73. import { queryAllEmergencyPlan } from '@/api/emergency-drill/emergency-drill';
  74. import { ApprovalInstanceType } from '@/views/system/approval/types';
  75. import { useEmergencyDrillHook } from '../hook';
  76. // 表单配置初始化
  77. const basicFormRef = ref<InstanceType<typeof BasicForm>>();
  78. const { ruleFormConfig, ruleFormData, formRules, cloneRuleFormData, beforeRouteLeave } =
  79. useFormConfigHook<CreateEmergencyDrillRuleForm>(
  80. DRILL_CREATE_FORM_CONFIG,
  81. DRILL_CREATE_FORM_DATA,
  82. DRILL_CREATE_FORM_RULES,
  83. );
  84. const cascaderProp = {
  85. multiple: true,
  86. expandTrigger: 'hover',
  87. checkStrictly: true,
  88. emitPath: false,
  89. value: 'id',
  90. label: 'deptName',
  91. };
  92. // 获取级联部门数据
  93. const deptTree = ref<DeptTree[]>();
  94. const loadDeptTreeData = async () => {
  95. const result = await getAllDepartments();
  96. deptTree.value = result[0].children;
  97. };
  98. // 获取所有预案
  99. const allPlans = ref<{ id: number; planName: string; status: number }[]>();
  100. const loadAllPlans = async () => {
  101. const result = await queryAllEmergencyPlan();
  102. allPlans.value = result.filter((item) => item.status === 3);
  103. };
  104. // 获取所有审批流程
  105. const allApprovals = ref<ApprovalInstanceType[]>();
  106. const loadApprovalData = async () => {
  107. const result = await getAllApproval();
  108. allApprovals.value = result;
  109. };
  110. // 获取演练规模字典
  111. const { drillScopeDice, getDrillScopeDict } = useEmergencyDrillHook();
  112. onMounted(() => {
  113. getDrillScopeDict();
  114. loadDeptTreeData();
  115. loadAllPlans();
  116. loadApprovalData();
  117. });
  118. // 表单校验
  119. const formValidate = async () => {
  120. if (!basicFormRef.value) return;
  121. const parentValidateResult = await basicFormRef.value.validateForm();
  122. return parentValidateResult;
  123. };
  124. // 表单数据获取
  125. const getFormData = () => {
  126. cloneRuleFormData();
  127. return ruleFormData;
  128. };
  129. defineExpose({
  130. formValidate,
  131. getFormData,
  132. });
  133. </script>
  134. <style scoped></style>