index.vue 4.3 KB

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