index.vue 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. <script setup lang="ts">
  2. defineOptions({
  3. name: ""
  4. });
  5. import { ref, reactive, onMounted } from "vue";
  6. import { ElMessageBox, ElMessage } from "element-plus";
  7. import { Search } from "@element-plus/icons-vue";
  8. import { postOrganizationUserPage } from "@/api/userSetting";
  9. import { useRoute } from "vue-router";
  10. const $route: any = useRoute();
  11. const tableData = reactive({
  12. list: [],
  13. params: {
  14. pageNumber: 1,
  15. pageSize: 10,
  16. organizationCode: "",
  17. organizationType: "",
  18. realName: ""
  19. },
  20. total: 0
  21. });
  22. const handleNodeClick = (data: any, userType: string) => {
  23. if (userType == "group") {
  24. tableData.params.organizationCode = data.groupCode;
  25. tableData.params.organizationType = userType;
  26. } else {
  27. tableData.params.organizationCode = data.deptCode;
  28. tableData.params.organizationType = userType;
  29. }
  30. postOrganizationUserPageApi();
  31. };
  32. const postOrganizationUserPageApi = async () => {
  33. if ($route.name == "users") {
  34. tableData.params.organizationType = "group";
  35. }
  36. if ($route.name == "prosonDepartment") {
  37. tableData.params.organizationType = "dept";
  38. }
  39. const { code, data, msg } = await postOrganizationUserPage(tableData.params);
  40. if (code == 200) {
  41. tableData.list = data.records;
  42. tableData.total = data.totalRow;
  43. } else {
  44. ElMessage.error(msg);
  45. }
  46. };
  47. const handleSizeChange = val => {
  48. tableData.params.pageSize = val;
  49. postOrganizationUserPageApi();
  50. };
  51. const handleCurrentChange = val => {
  52. tableData.params.pageNumber = val;
  53. postOrganizationUserPageApi();
  54. };
  55. defineExpose({
  56. handleNodeClick,
  57. postOrganizationUserPageApi,
  58. tableData
  59. });
  60. </script>
  61. <template>
  62. <div>
  63. <div class="flex justify-between mb-3">
  64. <el-input
  65. v-model="tableData.params.realName"
  66. :prefix-icon="Search"
  67. placeholder="搜索"
  68. class="mb-2"
  69. style="max-width: 300px"
  70. clearable
  71. @change="postOrganizationUserPageApi"
  72. @keyup.enter="postOrganizationUserPageApi"
  73. />
  74. <slot name="add-button" />
  75. <!-- <el-button type="primary" @click="AddPerson">添加成员</el-button> -->
  76. </div>
  77. <el-table
  78. v-if="(tableData.params.organizationType = 'dept')"
  79. :data="tableData.list"
  80. style="width: 100%"
  81. >
  82. <el-table-column prop="realName" label="姓名" />
  83. <el-table-column prop="hospitalCode" label="工号" />
  84. <el-table-column
  85. v-if="$route.name != 'users'"
  86. prop="address"
  87. label="性别"
  88. />
  89. <el-table-column prop="address" label="年龄" />
  90. <el-table-column prop="jobTitle" label="职称" />
  91. <el-table-column prop="dept" label="部门" />
  92. <el-table-column label="操作">
  93. <template #default="{ row }">
  94. <slot name="actions" :row="row" />
  95. </template>
  96. </el-table-column>
  97. </el-table>
  98. <el-table v-else :data="tableData.list" style="width: 100%">
  99. <el-table-column prop="realName" label="姓名" />
  100. <el-table-column prop="hospitalCode" label="工号" />
  101. <el-table-column prop="jobTitle" label="职称" />
  102. <el-table-column prop="dept" label="部门" />
  103. <el-table-column prop="phone" label="手机号" />
  104. <el-table-column label="操作">
  105. <template #default="{ row }">
  106. <slot name="actions" :row="row" />
  107. </template>
  108. </el-table-column>
  109. </el-table>
  110. <div>
  111. <div class="float-left mt-3 total">{{ tableData.total }}条数据</div>
  112. <div class="absolute right-0 mr-20 mt-3">
  113. <el-pagination
  114. v-model:current-page="tableData.params.pageNumber"
  115. v-model:page-size="tableData.params.pageSize"
  116. background
  117. layout="prev, pager, next"
  118. :total="tableData.total"
  119. @size-change="handleSizeChange"
  120. @current-change="handleCurrentChange"
  121. />
  122. </div>
  123. </div>
  124. </div>
  125. </template>
  126. <style scoped>
  127. .total {
  128. font-size: 14px;
  129. /* font-family: PingFangSC-Regular; */
  130. font-weight: 400;
  131. line-height: 22px;
  132. color: #0009;
  133. letter-spacing: 0;
  134. }
  135. </style>