index.vue 4.2 KB

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