index.vue 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  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. import dayjs from "dayjs";
  11. const $route: any = useRoute();
  12. const tableData = reactive({
  13. list: [],
  14. params: {
  15. pageNumber: 1,
  16. pageSize: 10,
  17. organizationCode: "",
  18. organizationType: "",
  19. realName: ""
  20. },
  21. total: 0
  22. });
  23. const handleNodeClick = (data: any, userType: string) => {
  24. console.log("handleNodeClick");
  25. if (userType == "group") {
  26. tableData.params.organizationCode = data.groupCode;
  27. tableData.params.organizationType = userType;
  28. } else {
  29. tableData.params.organizationCode = data.deptCode;
  30. tableData.params.organizationType = userType;
  31. }
  32. postOrganizationUserPageApi();
  33. };
  34. const loading = ref(true);
  35. const postOrganizationUserPageApi = async () => {
  36. if ($route.name == "users") {
  37. tableData.params.organizationType = "group";
  38. }
  39. if ($route.name == "prosonDepartment") {
  40. tableData.params.organizationType = "dept";
  41. }
  42. const { code, data, msg } = await postOrganizationUserPage(tableData.params);
  43. if (code == 200) {
  44. tableData.list = data.records;
  45. tableData.total = data.totalRow;
  46. loading.value = false;
  47. } else {
  48. ElMessage.error(msg);
  49. }
  50. };
  51. const handleSizeChange = val => {
  52. tableData.params.pageSize = val;
  53. postOrganizationUserPageApi();
  54. };
  55. const handleCurrentChange = val => {
  56. tableData.params.pageNumber = val;
  57. postOrganizationUserPageApi();
  58. };
  59. defineExpose({
  60. handleNodeClick,
  61. postOrganizationUserPageApi,
  62. handleCurrentChange,
  63. tableData
  64. });
  65. // 时间戳转换
  66. const getTime = day => {
  67. if (day) {
  68. return dayjs(day).format("YYYY-MM-DD");
  69. }
  70. return "";
  71. };
  72. </script>
  73. <template>
  74. <div>
  75. <div class="flex justify-between mb-3">
  76. <el-input
  77. v-model="tableData.params.realName"
  78. :prefix-icon="Search"
  79. placeholder="搜索姓名"
  80. class="mb-2"
  81. style="max-width: 300px"
  82. clearable
  83. @change="postOrganizationUserPageApi"
  84. @keyup.enter="postOrganizationUserPageApi"
  85. />
  86. <slot name="add-button" />
  87. <!-- <el-button type="primary" @click="AddPerson">添加人员</el-button> -->
  88. </div>
  89. <!-- v-loading="loading" -->
  90. <el-table
  91. v-if="(tableData.params.organizationType = 'dept')"
  92. :data="tableData.list"
  93. style="width: 100%"
  94. >
  95. <el-table-column prop="realName" label="姓名" />
  96. <el-table-column prop="hospitalCode" label="工号" />
  97. <el-table-column
  98. v-if="$route.name != 'users'"
  99. prop="gender"
  100. label="性别"
  101. />
  102. <el-table-column label="出生日期">
  103. <template #default="{ row }">
  104. <span>{{ getTime(row.birth) }}</span>
  105. </template>
  106. </el-table-column>
  107. <el-table-column prop="jobTitle" label="职称" />
  108. <el-table-column prop="dept" label="部门" />
  109. <el-table-column label="操作">
  110. <template #default="{ row }">
  111. <slot name="actions" :row="row" />
  112. </template>
  113. </el-table-column>
  114. </el-table>
  115. <el-table v-else :data="tableData.list" style="width: 100%">
  116. <el-table-column prop="realName" label="姓名" />
  117. <el-table-column prop="hospitalCode" label="工号" />
  118. <el-table-column prop="jobTitle" label="职称" />
  119. <el-table-column prop="dept" label="部门" />
  120. <el-table-column prop="phone" label="手机号" />
  121. <el-table-column label="操作">
  122. <template #default="{ row }">
  123. <slot name="actions" :row="row" />
  124. </template>
  125. </el-table-column>
  126. </el-table>
  127. <div>
  128. <div class="float-left mt-3 total">共{{ tableData.total }}条数据</div>
  129. <div class="float-right right-0 mr-10 mt-3">
  130. <el-pagination
  131. v-model:current-page="tableData.params.pageNumber"
  132. v-model:page-size="tableData.params.pageSize"
  133. background
  134. layout="prev, pager, next"
  135. :total="tableData.total"
  136. @size-change="handleSizeChange"
  137. @current-change="handleCurrentChange"
  138. />
  139. </div>
  140. </div>
  141. </div>
  142. </template>
  143. <style scoped>
  144. .total {
  145. font-size: 14px;
  146. /* font-family: PingFangSC-Regular; */
  147. font-weight: 400;
  148. line-height: 22px;
  149. color: #0009;
  150. letter-spacing: 0;
  151. }
  152. </style>