addPerson.vue 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. <script setup lang="ts">
  2. import { ref, reactive, watch } from "vue";
  3. import { Search } from "@element-plus/icons-vue";
  4. import { ElMessageBox, ElMessage } from "element-plus";
  5. import { postAssignmentUser } from "@/api/userSetting";
  6. import { treeDept, postListTreeWithUserApi } from "@/api/department";
  7. const dialogVisibleAdd = ref(false);
  8. const $emit = defineEmits(["handeClick"]);
  9. const form = reactive({
  10. sourceCodes: [],
  11. targetCodes: [],
  12. linkAction: "link",
  13. correlatedModel: "userRole"
  14. });
  15. // const treeRef = ref();
  16. const filterText = ref("");
  17. const handleClose = () => {
  18. dialogVisibleAdd.value = !dialogVisibleAdd.value;
  19. };
  20. // 添加部门保存
  21. const saveDepartment = () => {
  22. if (form.sourceCodes.length > 0) {
  23. postAssignmentUserApi();
  24. } else {
  25. ElMessage.error("请选择人员");
  26. }
  27. };
  28. const open = item => {
  29. form.sourceCodes = [];
  30. form.targetCodes = [];
  31. dialogVisibleAdd.value = true;
  32. postListTreeWithUserApi();
  33. // form.sourceCodes.push(item.roleCode);
  34. form.targetCodes.push(item.roleCode);
  35. filterText.value = "";
  36. };
  37. const postAssignmentUserApi = async () => {
  38. // 清除为null的数据
  39. let sourceCodes = [];
  40. form.sourceCodes.map(item => {
  41. if (item) {
  42. sourceCodes.push(item);
  43. }
  44. });
  45. form.sourceCodes = sourceCodes;
  46. const { code, msg } = await postAssignmentUser(form);
  47. if (code === 200) {
  48. ElMessage({
  49. message: "添加成功",
  50. type: "success"
  51. });
  52. $emit("handeClick");
  53. dialogVisibleAdd.value = false;
  54. } else {
  55. // ElMessage({
  56. // message: msg,
  57. // type: "error"
  58. // });
  59. }
  60. };
  61. // 树选择
  62. const handleCheck = (node, checked) => {
  63. console.log("树选择", node, checked);
  64. form.sourceCodes = [];
  65. checked.checkedNodes.forEach(item => {
  66. form.sourceCodes.push(item.userCode);
  67. });
  68. // form.targetCodes = [];
  69. // checked.checkedNodes.forEach(item => {
  70. // form.targetCodes.push(item.userCode);
  71. // });
  72. };
  73. defineExpose({
  74. open
  75. });
  76. // ---------------------
  77. const treeRef = ref();
  78. watch(filterText, val => {
  79. treeRef.value!.filter(val);
  80. });
  81. const filterNode = (value: string, data: any) => {
  82. if (!value) return true; // 如果没有过滤关键词,显示所有节点
  83. return data.userNameNew && data.userNameNew.includes(value); // 使用 userName 进行匹配
  84. };
  85. const defaultProps = {
  86. label: "userNameNew",
  87. value: "userCodeNew",
  88. children: "children"
  89. };
  90. </script>
  91. <template>
  92. <div>
  93. <el-dialog v-model="dialogVisibleAdd" title="人员" width="500">
  94. <el-input
  95. v-model="filterText"
  96. placeholder="请搜索员工姓名"
  97. class="mb-2"
  98. :prefix-icon="Search"
  99. />
  100. <el-tree
  101. ref="treeRef"
  102. :data="treeDept"
  103. show-checkbox
  104. node-key="id"
  105. :props="defaultProps"
  106. :filter-node-method="filterNode"
  107. @check="handleCheck"
  108. />
  109. <template #footer>
  110. <div class="dialog-footer">
  111. <el-button @click="handleClose">取消</el-button>
  112. <el-button type="primary" @click="saveDepartment"> 确认 </el-button>
  113. </div>
  114. </template>
  115. </el-dialog>
  116. </div>
  117. </template>