You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
dianshang-qianduan/src/views/platformAdmin/schoolAdmin/index.vue

177 lines
6.0 KiB
Vue

<template>
<div class="school-admin-workbench">
<section class="admin-hero">
<div class="admin-badge">Platform Admin / School Admins</div>
<h1 class="admin-title">学校管理员</h1>
<p class="admin-subtitle">为学校分配管理员账号账号只能绑定到指定学校后端会固定保存为学校管理员角色</p>
</section>
<section class="admin-panel">
<div class="toolbar">
<el-select v-model="query.schoolId" clearable filterable placeholder="所属学校" class="filter-input">
<el-option v-for="school in schools" :key="school.schoolId" :label="school.schoolName" :value="school.schoolId" />
</el-select>
<el-input v-model="query.name" clearable placeholder="姓名" class="filter-input" @keyup.enter="load" />
<el-input v-model="query.username" clearable placeholder="账号" class="filter-input" @keyup.enter="load" />
<el-input v-model="query.phone" clearable placeholder="手机号" class="filter-input" @keyup.enter="load" />
<el-button type="primary" @click="load"></el-button>
<el-button @click="reset"></el-button>
<el-button type="success" @click="openCreate"></el-button>
</div>
<el-table v-loading="loading" :data="rows" border>
<el-table-column label="姓名" prop="name" min-width="120" />
<el-table-column label="账号" prop="username" min-width="140" />
<el-table-column label="所属学校" min-width="180">
<template #default="{ row }">{{ schoolName(row.schoolId) }}</template>
</el-table-column>
<el-table-column label="性别" prop="sex" width="90" />
<el-table-column label="手机号" prop="phone" min-width="140" />
<el-table-column label="邮箱" prop="email" min-width="180" />
<el-table-column label="操作" width="160" fixed="right">
<template #default="{ row }">
<el-button link type="primary" @click="openEdit(row)"></el-button>
<el-button link type="danger" @click="remove(row)"></el-button>
</template>
</el-table-column>
</el-table>
<el-pagination
class="pager"
layout="total, prev, pager, next, sizes"
:total="total"
v-model:current-page="query.index"
v-model:page-size="query.size"
@current-change="load"
@size-change="handleSizeChange"
/>
<el-dialog
v-model="dialogVisible"
:title="form.userId ? '编辑学校管理员' : '新增学校管理员'"
width="560px"
align-center
append-to-body
custom-class="admin-edit-dialog platform-admin-dialog"
>
<el-form :model="form" label-width="92px">
<el-form-item label="所属学校">
<el-select v-model="form.schoolId" filterable placeholder="请选择学校" style="width: 100%">
<el-option v-for="school in schools" :key="school.schoolId" :label="school.schoolName" :value="school.schoolId" />
</el-select>
</el-form-item>
<el-form-item label="姓名">
<el-input v-model="form.name" />
</el-form-item>
<el-form-item label="账号">
<el-input v-model="form.username" :disabled="Boolean(form.userId)" />
</el-form-item>
<el-form-item label="角色">
<el-input model-value="" disabled />
</el-form-item>
<el-form-item label="性别">
<el-input v-model="form.sex" />
</el-form-item>
<el-form-item label="手机号">
<el-input v-model="form.phone" />
</el-form-item>
<el-form-item label="邮箱">
<el-input v-model="form.email" />
</el-form-item>
</el-form>
<template #footer>
<el-button @click="dialogVisible = false">取消</el-button>
<el-button type="primary" @click="submit"></el-button>
</template>
</el-dialog>
</section>
</div>
</template>
<script setup>
import "@/views/schoolAdmin/admin-theme.scss";
import { ElMessage, ElMessageBox } from "element-plus";
import {
addPlatformSchoolAdmin,
deletePlatformSchoolAdmin,
getPlatformSchoolAdmins,
getPlatformSchools,
updatePlatformSchoolAdmin,
} from "@/api/platformAdmin";
const query = reactive({ index: 1, size: 10, schoolId: "", name: "", username: "", phone: "" });
const rows = ref([]);
const total = ref(0);
const loading = ref(false);
const dialogVisible = ref(false);
const form = ref({});
const schools = ref([]);
const schoolName = (schoolId) => {
return schools.value.find((school) => school.schoolId === schoolId)?.schoolName || schoolId || "-";
};
const loadSchools = async () => {
const res = await getPlatformSchools({ index: 1, size: 1000 });
schools.value = res.data?.list || [];
};
const load = async () => {
loading.value = true;
try {
const res = await getPlatformSchoolAdmins(query);
rows.value = res.data?.list || [];
total.value = res.data?.total || 0;
} finally {
loading.value = false;
}
};
const reset = () => {
query.index = 1;
query.schoolId = "";
query.name = "";
query.username = "";
query.phone = "";
load();
};
const handleSizeChange = () => {
query.index = 1;
load();
};
const openCreate = () => {
form.value = {};
dialogVisible.value = true;
};
const openEdit = (row) => {
form.value = { ...row };
dialogVisible.value = true;
};
const submit = async () => {
if (form.value.userId) {
await updatePlatformSchoolAdmin(form.value.userId, form.value);
} else {
await addPlatformSchoolAdmin(form.value);
}
ElMessage.success("保存成功");
dialogVisible.value = false;
load();
};
const remove = async (row) => {
await ElMessageBox.confirm("确认删除该学校管理员?", "提示", { type: "warning" });
await deletePlatformSchoolAdmin(row.userId);
ElMessage.success("删除成功");
load();
};
onMounted(async () => {
await loadSchools();
await load();
});
</script>