newDepartment.vue 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. <script setup lang="ts">
  2. import { ref, reactive, defineEmits } from "vue";
  3. import { ElMessageBox, ElMessage } from "element-plus";
  4. import { postAddDept, postListTree } from "@/api/department";
  5. import { postUserList } from "@/api/userSetting";
  6. import { encryption } from "@/utils/encrypt";
  7. const dialogVisibleAdd = ref(false);
  8. const formRef = ref();
  9. const emit = defineEmits(["handleClick"]);
  10. const form = reactive({
  11. deptName: "",
  12. deptCode: "",
  13. leader: "",
  14. parentCode: "",
  15. hospitalCode: ""
  16. });
  17. const optiones = reactive({
  18. parentOptions: [],
  19. leaderOptions: []
  20. });
  21. // 添加
  22. const postAddDeptApi = async () => {
  23. const { code } = await postAddDept(form);
  24. if (code === 200) {
  25. ElMessage({
  26. message: "添加成功",
  27. type: "success"
  28. });
  29. }
  30. };
  31. // 上级部门
  32. const postListTreeApi = async () => {
  33. const { code, data } = await postListTree();
  34. if (code === 200) {
  35. optiones.parentOptions = data;
  36. }
  37. };
  38. // 负责人
  39. const userList = ref({
  40. username: "",
  41. password: ""
  42. });
  43. const postUserListApi = async () => {
  44. // @ts-ignore
  45. userList.value.username = encryption(localStorage.getItem("rolesName"));
  46. // @ts-ignore
  47. userList.value.password = encryption(localStorage.getItem("password"));
  48. const { code, data } = await postUserList(userList.value);
  49. if (code === 200) {
  50. optiones.leaderOptions = data;
  51. }
  52. };
  53. const handleClose = () => {
  54. formRef.value.clearValidate(); // 清除验证错误
  55. formRef.value.resetFields(); // 重置表单字段
  56. dialogVisibleAdd.value = !dialogVisibleAdd.value;
  57. form.deptName = "";
  58. form.deptCode = "";
  59. form.hospitalCode = "";
  60. form.leader = "";
  61. form.parentCode = "";
  62. };
  63. // 添加部门保存
  64. const saveDepartment = () => {
  65. formRef.value.validate(valid => {
  66. if (valid) {
  67. postAddDeptApi();
  68. emit("handleClick");
  69. handleClose();
  70. }
  71. });
  72. };
  73. const open = node => {
  74. console.log(node, "-------");
  75. dialogVisibleAdd.value = true;
  76. postUserListApi();
  77. if (node) {
  78. // form.leader
  79. form.deptName = "";
  80. form.deptCode = "";
  81. form.hospitalCode = "";
  82. form.leader = "";
  83. optiones.parentOptions = [];
  84. optiones.parentOptions.push(node.data);
  85. form.parentCode = node.data.deptCode;
  86. } else {
  87. postListTreeApi();
  88. }
  89. };
  90. // 添加子部门数据
  91. defineExpose({
  92. open
  93. });
  94. </script>
  95. <template>
  96. <div>
  97. <el-dialog
  98. v-model="dialogVisibleAdd"
  99. title="新建部门"
  100. width="500"
  101. :before-close="handleClose"
  102. >
  103. <el-form
  104. ref="formRef"
  105. :model="form"
  106. label-width="auto"
  107. style="max-width: 600px"
  108. >
  109. <el-form-item
  110. prop="deptName"
  111. label="部门名称"
  112. :rules="[
  113. {
  114. required: true,
  115. message: '请填写部门名称',
  116. trigger: 'blur'
  117. }
  118. ]"
  119. >
  120. <el-input v-model="form.deptName" placeholder="请填写部门名称" />
  121. </el-form-item>
  122. <el-form-item label="部门编号">
  123. <el-input v-model="form.hospitalCode" placeholder="请输入部门编号" />
  124. </el-form-item>
  125. <el-form-item label="上级部门">
  126. <el-tree-select
  127. v-model="form.parentCode"
  128. :data="optiones.parentOptions"
  129. check-strictly
  130. filterable
  131. clearable
  132. :props="{
  133. label: 'deptName',
  134. value: 'deptCode',
  135. children: 'childrenRes'
  136. }"
  137. placeholder="请选择部门"
  138. />
  139. </el-form-item>
  140. <!-- <el-form-item label="部门负责人">
  141. <el-select v-model="form.leader" placeholder="请选择部门负责人">
  142. <el-option
  143. v-for="item in optiones.leaderOptions"
  144. :key="item.value"
  145. :label="item.realName"
  146. :value="item.userCode"
  147. />
  148. </el-select>
  149. </el-form-item> -->
  150. </el-form>
  151. <template #footer>
  152. <div class="dialog-footer">
  153. <el-button @click="handleClose">取消</el-button>
  154. <el-button type="primary" @click="saveDepartment"> 确认 </el-button>
  155. </div>
  156. </template>
  157. </el-dialog>
  158. </div>
  159. </template>