片区选择负责人优化

pull/174/head
ZHW 4 months ago
parent 230a58494f
commit 6c530a5c63

@ -27,6 +27,11 @@
</div>
</div>
<!-- 空闲管理员提示 -->
<div v-if="availableAdmins.length === 0" class="no-available-admins">
所有区域管理员都有负责的校区当前无空闲区域管理员
</div>
<!-- 校区表格 -->
<div class="card">
<table class="campus-table">
@ -50,12 +55,6 @@
<td>{{ campus.managerPhone }}</td>
<td>{{ formatDate(campus.createdTime) }}</td>
<td class="operation-buttons">
<button
class="btn-stats"
@click="handleViewStats(campus.areaId, campus.areaName)"
>
统计
</button>
<button
class="btn-edit"
@click="handleEdit(campus)"
@ -147,9 +146,19 @@
required
>
<option value="">请选择负责人</option>
<option v-for="admin in adminList" :key="admin.adminId" :value="admin">
{{ admin.adminName }}
</option>
<!-- 显示空闲管理员提示 -->
<optgroup v-if="availableAdmins.length === 0" label="提示">
<option value="" disabled>当前无空闲区域管理员</option>
</optgroup>
<optgroup label="空闲区域管理员" v-else>
<option
v-for="admin in availableAdmins"
:key="admin.adminId"
:value="admin"
>
{{ admin.adminName }} ({{ admin.phone }})
</option>
</optgroup>
</select>
</div>
<div class="form-item">
@ -321,7 +330,7 @@ interface AreaDeviceStatsVO {
//
const campusList = ref<Area[]>([]) //
const cityList = ref<Area[]>([]) //
const adminList = ref<Admin[]>([])
const allAdminList = ref<Admin[]>([]) //
const selectedManager = ref<Admin | null>(null)
const selectedCityFilter = ref('') // ID
const selectedCampus = ref('')
@ -352,6 +361,25 @@ const formData = ref<Area>({
updatedTime: undefined
})
// ID
const assignedManagerIds = computed(() => {
return campusList.value.map(campus => campus.manager)
})
//
const availableAdmins = computed(() => {
return allAdminList.value.filter(admin =>
!assignedManagerIds.value.includes(admin.adminId)
)
})
//
const assignedAdmins = computed(() => {
return allAdminList.value.filter(admin =>
assignedManagerIds.value.includes(admin.adminId)
)
})
//
const formatDate = (date: Date | undefined) => {
if (!date) return '-'
@ -517,7 +545,7 @@ const fetchAdminList = async () => {
const areaAdmins = response.data.filter(admin =>
admin.role === 'AREA_ADMIN' || admin.role === 'ROLE_AREA_ADMIN'
)
adminList.value = areaAdmins
allAdminList.value = areaAdmins
} else {
console.error('获取可分配校区的区域管理员失败:', response?.msg || '未知错误')
alert(`获取可分配校区的区域管理员失败:${response?.msg || '未知错误'}`)
@ -575,12 +603,12 @@ const handleEdit = (campus: Area) => {
formData.value = { ...campus }
//
const matchedAdmin = adminList.value.find(admin => admin.adminId === campus.manager)
const matchedAdmin = allAdminList.value.find(admin => admin.adminId === campus.manager)
selectedManager.value = matchedAdmin || null
//
if (!selectedManager.value) {
const matchedByName = adminList.value.find(admin => admin.adminName === campus.manager)
const matchedByName = allAdminList.value.find(admin => admin.adminName === campus.manager)
selectedManager.value = matchedByName || null
}
@ -613,7 +641,7 @@ const confirmDelete = async () => {
})
if (response?.code === 200) {
fetchCampusList() //
await fetchCampusList() //
showDeleteConfirm.value = false
} else {
const errorMsg = response?.msg || `删除失败(错误码:${response?.code || '未知'}`
@ -681,7 +709,7 @@ const handleSave = async () => {
})
if (response?.code === 200 && response?.data) {
fetchCampusList() //
await fetchCampusList() //
showModal.value = false
} else {
const errorMsg = response?.msg || `更新失败(错误码:${response?.code || '未知'}`
@ -731,7 +759,7 @@ const handleSave = async () => {
})
if (response?.code === 200 && response?.data) {
fetchCampusList() //
await fetchCampusList() //
showModal.value = false
} else {
const errorMsg = response?.msg || `新增失败(错误码:${response?.code || '未知'}`
@ -758,7 +786,7 @@ const handleSave = async () => {
// ID
const getManagerName = (managerId: string) => {
if (!managerId) return '未分配'
const admin = adminList.value.find(admin => admin.adminId === managerId)
const admin = allAdminList.value.find(admin => admin.adminId === managerId)
return admin ? admin.adminName : '未知负责人'
}
@ -813,7 +841,7 @@ onMounted(async () => {
console.log('Token:', authStore.token)
await fetchCityList() //
await fetchAdminList() //
fetchCampusList() //
await fetchCampusList() //
})
</script>
@ -848,6 +876,16 @@ onMounted(async () => {
gap: 16px;
}
.no-available-admins {
background-color: #fffbe6;
border: 1px solid #ffe58f;
color: #faad14;
padding: 12px 16px;
border-radius: 4px;
margin-bottom: 16px;
text-align: center;
}
.btn-add {
background: #42b983;
color: white;

Loading…
Cancel
Save