index.vue 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. <template>
  2. <div class="app-container">
  3. <h3>员工管理</h3>
  4. <el-card shadow="never" style="margin-top:16px">
  5. <div style="display:flex;justify-content:space-between;align-items:center;margin-bottom:12px">
  6. <span style="font-weight:600">{{ companyName }}</span>
  7. <el-button type="primary" @click="handleAdd">新 增</el-button>
  8. </div>
  9. <el-table :data="tableData" border v-loading="loading">
  10. <el-table-column prop="name" label="员工姓名" min-width="140" />
  11. <el-table-column prop="phone" label="手机号" min-width="140">
  12. <template #default="{ row }">{{ row.phone || '-' }}</template>
  13. </el-table-column>
  14. <el-table-column prop="id_card" label="身份证号" min-width="160">
  15. <template #default="{ row }">{{ row.id_card || '-' }}</template>
  16. </el-table-column>
  17. <el-table-column label="角色" min-width="120">
  18. <template #default="{ row }">{{ ROLE_LABEL[row.role] || row.role }}</template>
  19. </el-table-column>
  20. <el-table-column label="操作" min-width="120" align="center" fixed="right">
  21. <template #default="{ row }">
  22. <el-button type="primary" link @click="handleEdit(row)" v-if="row.role !== 'SUPER_ADMIN'">编辑</el-button>
  23. <el-button type="danger" link @click="handleDelete(row)" v-if="row.role !== 'SUPER_ADMIN'">删除</el-button>
  24. </template>
  25. </el-table-column>
  26. </el-table>
  27. <el-pagination v-model:current-page="searchForm.pageNo" v-model:page-size="searchForm.pageSize" :total="total" layout="total, prev, pager, next" @change="fetchData" style="margin-top:16px;justify-content:flex-end" />
  28. </el-card>
  29. <EmployeeFormDialog ref="formDialogRef" @success="fetchData" />
  30. </div>
  31. </template>
  32. <script setup lang="ts">
  33. import { ref, reactive, onMounted } from "vue";
  34. import { getEmployeeList, deleteEmployee, ROLE_OPTIONS } from "@/api/module_payment/invoice/employee";
  35. import type { EmployeeVO } from "@/api/module_payment/invoice/employee";
  36. import EmployeeFormDialog from "./components/EmployeeFormDialog.vue";
  37. import { ElMessage, ElMessageBox } from "element-plus";
  38. const ROLE_LABEL: Record<string, string> = Object.fromEntries(ROLE_OPTIONS.map(o => [o.value, o.label]));
  39. const companyName = "湖南省铭恩商务管理有限公司";
  40. const searchForm = reactive<Record<string, any>>({ pageNo: 1, pageSize: 10 });
  41. const tableData = ref<EmployeeVO[]>([]);
  42. const total = ref(0);
  43. const loading = ref(false);
  44. const formDialogRef = ref();
  45. async function fetchData() {
  46. loading.value = true;
  47. try {
  48. const res = await getEmployeeList(searchForm);
  49. tableData.value = res.data.data?.list || [];
  50. total.value = res.data.data?.total || 0;
  51. } finally { loading.value = false; }
  52. }
  53. function handleAdd() { formDialogRef.value?.open(); }
  54. function handleEdit(row: EmployeeVO) { formDialogRef.value?.open(row); }
  55. async function handleDelete(row: EmployeeVO) {
  56. try {
  57. await ElMessageBox.confirm(`确认删除员工 ${row.name}?`, '提示', { type: 'warning' });
  58. await deleteEmployee(row.id!);
  59. ElMessage.success('删除成功');
  60. fetchData();
  61. } catch { /* cancelled */ }
  62. }
  63. onMounted(fetchData);
  64. </script>