DrillPlanCreateItem.vue 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  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. placeholder="请选择配合部门"
  37. >
  38. </el-cascader>
  39. </template>
  40. <template #preplanId>
  41. <el-select
  42. v-model="ruleFormData.preplanId"
  43. multiple
  44. collapse-tags
  45. collapse-tags-tooltip
  46. :max-collapse-tags="1"
  47. placeholder="请选择应急预案"
  48. filterable
  49. @change=""
  50. class="custom-select"
  51. >
  52. <!-- <el-option v-for="item in firstLevelDepts" :key="item.id" :label="item.deptName" :value="item.id" /> -->
  53. </el-select>
  54. </template>
  55. <template #approvalTemplateId>
  56. <el-select
  57. v-model="ruleFormData.approvalTemplateId"
  58. placeholder="请选择审批流程"
  59. class="custom-select"
  60. filterable
  61. >
  62. <el-option v-for="item in allApprovals" :key="item.id" :label="item.templateName" :value="item.id" />
  63. </el-select>
  64. </template>
  65. </BasicForm>
  66. </div>
  67. </template>
  68. <script setup lang="ts">
  69. import BasicForm from '@/components/BasicForm.vue';
  70. import { useFormConfigHook } from '@/hooks/useFormConfigHook';
  71. import { DRILL_CREATE_FORM_CONFIG, DRILL_CREATE_FORM_DATA, DRILL_CREATE_FORM_RULES } from '../configs/plan/form';
  72. import { CreateEmergencyDrillRuleForm } from '../types';
  73. import { onMounted, ref } from 'vue';
  74. import { DeptTree } from '@/types/dept/type';
  75. import { getAllDepartments } from '@/api/auth/dept';
  76. import { getAllApproval } from '@/api/approval/approval';
  77. import { ApprovalInstanceType } from '@/views/system/approval/types';
  78. import { useEmergencyDrillHook } from '../hook';
  79. // 表单配置初始化
  80. const basicFormRef = ref<InstanceType<typeof BasicForm>>();
  81. const { ruleFormConfig, ruleFormData, formRules, cloneRuleFormData, beforeRouteLeave } =
  82. useFormConfigHook<CreateEmergencyDrillRuleForm>(
  83. DRILL_CREATE_FORM_CONFIG,
  84. DRILL_CREATE_FORM_DATA,
  85. DRILL_CREATE_FORM_RULES,
  86. );
  87. const cascaderProp = { multiple: true, expandTrigger: 'hover', emitPath: false, value: 'id', label: 'deptName' };
  88. // 获取级联部门数据
  89. const deptTree = ref<DeptTree[]>();
  90. const loadDeptTreeData = async () => {
  91. const result = await getAllDepartments();
  92. deptTree.value = result;
  93. };
  94. // 获取所有审批流程
  95. const allApprovals = ref<ApprovalInstanceType[]>();
  96. const loadApprovalData = async () => {
  97. const result = await getAllApproval();
  98. allApprovals.value = result;
  99. };
  100. // 获取演练规模字典
  101. const { drillScopeDice, getDrillScopeDict } = useEmergencyDrillHook();
  102. onMounted(() => {
  103. getDrillScopeDict();
  104. loadDeptTreeData();
  105. loadApprovalData();
  106. });
  107. // 表单校验
  108. const formValidate = async () => {
  109. if (!basicFormRef.value) return;
  110. const parentValidateResult = await basicFormRef.value.validateForm();
  111. return parentValidateResult;
  112. };
  113. // 表单数据获取
  114. const getFormData = () => {
  115. cloneRuleFormData();
  116. return ruleFormData;
  117. };
  118. defineExpose({
  119. formValidate,
  120. getFormData,
  121. });
  122. </script>
  123. <style scoped></style>