newDepartment.vue 4.2 KB

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