centerMember.vue 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. <template>
  2. <div class="center-member-page">
  3. <div class="header-section">
  4. <h3>{{ t('project.management.detail.menu.centerMember') }}</h3>
  5. </div>
  6. <el-divider />
  7. <!-- 搜索表单 -->
  8. <el-form :model="queryParams" :inline="true" class="search-form">
  9. <el-form-item label="成员昵称">
  10. <el-input
  11. v-model="queryParams.name"
  12. placeholder="请输入成员昵称"
  13. clearable
  14. style="width: 200px"
  15. @keyup.enter="handleQuery"
  16. />
  17. </el-form-item>
  18. <el-form-item label="中心">
  19. <el-input
  20. v-model="queryParams.center"
  21. placeholder="请输入中心名称"
  22. clearable
  23. style="width: 200px"
  24. @keyup.enter="handleQuery"
  25. />
  26. </el-form-item>
  27. <el-form-item>
  28. <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
  29. <el-button icon="Refresh" @click="resetQuery">重置</el-button>
  30. </el-form-item>
  31. </el-form>
  32. <!-- 数据表格 -->
  33. <el-card shadow="never">
  34. <el-table
  35. v-loading="loading"
  36. border
  37. :data="memberList"
  38. style="width: 100%"
  39. >
  40. <el-table-column label="序号" align="center" prop="id" width="80" />
  41. <el-table-column label="姓名" align="center" prop="name" width="120" />
  42. <el-table-column label="手机号" align="center" prop="phoneNumber" width="150" />
  43. <el-table-column label="部门" align="center" prop="dept" width="200" show-overflow-tooltip />
  44. <el-table-column label="中心" align="center" prop="centers" min-width="200" show-overflow-tooltip />
  45. <el-table-column label="时间" align="center" prop="time" width="180" />
  46. </el-table>
  47. <pagination
  48. v-show="total > 0"
  49. :total="total"
  50. v-model:page="queryParams.pageNum"
  51. v-model:limit="queryParams.pageSize"
  52. @pagination="getList"
  53. />
  54. </el-card>
  55. </div>
  56. </template>
  57. <script setup lang="ts">
  58. import { inject, ref, onMounted } from 'vue';
  59. import { useI18n } from 'vue-i18n';
  60. import { queryCenterMember } from '@/api/project/management';
  61. import { CenterMemberVO, CenterMemberQuery } from '@/api/project/management/types';
  62. const { t } = useI18n();
  63. // 接收从父组件传递的项目ID
  64. const projectId = inject<any>('projectId');
  65. // 列表数据
  66. const memberList = ref<CenterMemberVO[]>([]);
  67. const loading = ref(true);
  68. const total = ref(0);
  69. // 查询参数
  70. const queryParams = ref<CenterMemberQuery>({
  71. pageNum: 1,
  72. pageSize: 10,
  73. projectId: projectId?.value || 0,
  74. name: '',
  75. center: ''
  76. });
  77. /** 查询中心成员列表 */
  78. const getList = async () => {
  79. loading.value = true;
  80. try {
  81. queryParams.value.projectId = projectId?.value || 0;
  82. const res = await queryCenterMember(queryParams.value);
  83. memberList.value = res.rows;
  84. total.value = res.total;
  85. } catch (error) {
  86. console.error('Failed to fetch center members:', error);
  87. } finally {
  88. loading.value = false;
  89. }
  90. };
  91. /** 搜索按钮操作 */
  92. const handleQuery = () => {
  93. queryParams.value.pageNum = 1;
  94. getList();
  95. };
  96. /** 重置按钮操作 */
  97. const resetQuery = () => {
  98. queryParams.value = {
  99. pageNum: 1,
  100. pageSize: 10,
  101. projectId: projectId?.value || 0,
  102. name: '',
  103. center: ''
  104. };
  105. getList();
  106. };
  107. // 组件挂载时加载数据
  108. onMounted(() => {
  109. getList();
  110. });
  111. </script>
  112. <style scoped>
  113. .center-member-page {
  114. height: 100%;
  115. }
  116. .header-section {
  117. display: flex;
  118. justify-content: space-between;
  119. align-items: center;
  120. margin-bottom: 10px;
  121. }
  122. h3 {
  123. font-size: 18px;
  124. font-weight: 600;
  125. color: #303133;
  126. margin: 0;
  127. }
  128. .search-form {
  129. margin-bottom: 16px;
  130. }
  131. </style>