1.0 #174

Merged
pc8xi2fbj merged 2 commits from zhanghongwei_branch into develop 6 days ago

@ -1,10 +1,21 @@
// src/api/types/workorder.ts
// src/api/types/workorder.ts
export interface WorkOrder {
orderId: string
deviceId: string
areaId: string
orderType: 'repair' | 'maintenance' | 'inspection' // 添加此属性
description: string
priority: 'low' | 'medium' | 'high' | 'urgent' // 添加此属性
status: 'pending' | 'processing' | 'reviewing' | 'completed' | 'timeout'
createdTime?: string
assignedRepairmanId?: string
createdTime?: string
grabbedTime?: string // 添加此属性
deadline?: string // 添加此属性
completedTime?: string // 添加此属性
dealNote?: string // 添加此属性
imgUrl?: string // 添加此属性
createdBy: string // 添加此属性
updatedTime?: string // 添加此属性
alertId?: string // 添加此属性
}

@ -51,7 +51,11 @@
<td>{{ campus.areaName }}</td>
<td>{{ getCityName(campus.parentAreaId) }}</td> <!-- 显示所属市区名称 -->
<td>{{ campus.address }}</td>
<td>{{ getManagerName(campus.manager) }}</td>
<td>
<span v-if="managerNames[campus.areaId]">{{ managerNames[campus.areaId] }}</span>
<span v-else-if="loadingManagerNames.includes(campus.areaId)">加载中...</span>
<span v-else></span>
</td>
<td>{{ campus.managerPhone }}</td>
<td>{{ formatDate(campus.createdTime) }}</td>
<td class="operation-buttons">
@ -348,6 +352,10 @@ const saving = ref(false) // 添加保存状态
const deleting = ref(false) //
const loadingStats = ref(false) //
//
const managerNames = ref<Record<string, string>>({}) //
const loadingManagerNames = ref<string[]>([]) // ID
//
const formData = ref<Area>({
areaId: '',
@ -420,6 +428,84 @@ const totalPages = computed(() => {
return Math.ceil(filteredCount / pageSize.value)
})
//
const loadManagerName = async (areaId: string, managerId: string) => {
if (!managerId) {
managerNames.value[areaId] = '未分配'
return
}
//
if (loadingManagerNames.value.includes(areaId)) return
loadingManagerNames.value.push(areaId)
try {
const response = await request<{
code: number
msg: string
data: Admin
}>(`/api/web/admin/${managerId}`, {
method: 'GET',
})
if (response.code === 200 && response.data) {
managerNames.value[areaId] = response.data.adminName
} else {
managerNames.value[areaId] = '未知负责人'
}
} catch (error) {
console.error('获取管理员姓名失败:', error)
managerNames.value[areaId] = '未知负责人'
} finally {
loadingManagerNames.value = loadingManagerNames.value.filter(id => id !== areaId)
}
}
//
const loadAllManagerNames = async () => {
for (const campus of campusList.value) {
await loadManagerName(campus.areaId, campus.manager)
}
}
// ID
const updateAdminAreaId = async (adminId: string, areaId: string) => {
try {
const response = await request<{
code: number
msg: string
data: Admin
}>('/api/web/admin/save', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${authStore.token}`
},
body: JSON.stringify({
adminId: adminId,
areaId: areaId
})
});
if (response.code === 200) {
//
const adminIndex = allAdminList.value.findIndex(admin => admin.adminId === adminId);
if (adminIndex !== -1) { //
const admin = allAdminList.value[adminIndex];
if (admin) { //
admin.areaId = areaId;
}
}
console.log('管理员区域ID更新成功');
} else {
console.error('更新管理员区域ID失败:', response.msg);
}
} catch (error) {
console.error('更新管理员区域ID请求失败:', error);
}
}
//
const fetchCampusList = async () => {
loading.value = true
@ -472,6 +558,9 @@ const fetchCampusList = async () => {
}
campusList.value = allCampuses
//
await loadAllManagerNames()
} catch (error: any) {
console.error('请求异常:', error)
const errorMsg = error.message.includes('401') || error.message.includes('403')
@ -562,11 +651,14 @@ const fetchAdminList = async () => {
}
// - ID
const onManagerChange = () => {
// - IDareaId
const onManagerChange = async () => {
if (selectedManager.value) {
formData.value.manager = selectedManager.value.adminId // ID
formData.value.managerPhone = selectedManager.value.phone
// areaIdareaId
// areaId
} else {
formData.value.manager = ''
formData.value.managerPhone = ''
@ -612,6 +704,11 @@ const handleEdit = (campus: Area) => {
selectedManager.value = matchedByName || null
}
// areaId
if (selectedManager.value && campus.areaId) {
selectedManager.value.areaId = campus.areaId;
}
showModal.value = true
}
@ -699,6 +796,7 @@ const handleSave = async () => {
'Authorization': `Bearer ${authStore.token}` //
},
body: JSON.stringify({
areaId: formData.value.areaId,
areaName: formData.value.areaName,
areaType: 'campus',
parentAreaId: formData.value.parentAreaId,
@ -709,6 +807,10 @@ const handleSave = async () => {
})
if (response?.code === 200 && response?.data) {
// areaId
if (selectedManager.value && response.data.areaId) {
await updateAdminAreaId(selectedManager.value.adminId, response.data.areaId);
}
await fetchCampusList() //
showModal.value = false
} else {
@ -759,6 +861,10 @@ const handleSave = async () => {
})
if (response?.code === 200 && response?.data) {
// areaId - 使areaId
if (selectedManager.value && response.data.areaId) {
await updateAdminAreaId(selectedManager.value.adminId, response.data.areaId);
}
await fetchCampusList() //
showModal.value = false
} else {
@ -783,7 +889,7 @@ const handleSave = async () => {
}
// ID
// ID - 使
const getManagerName = (managerId: string) => {
if (!managerId) return '未分配'
const admin = allAdminList.value.find(admin => admin.adminId === managerId)

@ -42,7 +42,7 @@
<td>{{ formatRole(admin.role) }}</td>
<td>
<span v-if="admin.role === 'ROLE_AREA_ADMIN'" class="area-list">
{{ admin.areaName || (admin.areaId ? getAreaNameById(admin.areaId) : '') || '未关联区域' }}
{{ getAreaNameFromCache(admin.areaId) || admin.areaName || '未关联区域' }}
</span>
<span v-else>-</span>
</td>
@ -182,7 +182,7 @@
<div class="form-group" v-if="editFormData.role === 'ROLE_AREA_ADMIN' && originalAdminData?.areaId">
<label class="form-label">关联区域</label>
<div class="readonly-area">
{{ getAreaNameById(originalAdminData.areaId) }}
{{ getAreaNameFromCache(originalAdminData.areaId) || originalAdminData.areaName || '未关联区域' }}
</div>
</div>
@ -268,6 +268,9 @@ const loading = ref(false)
const showAddModal = ref(false)
const showEditModal = ref(false)
//
const areaNameCache = ref<Record<string, string>>({})
//
const unassignedAreas = ref<Area[]>([])
@ -327,6 +330,54 @@ const loadUnassignedAreas = async () => {
}
}
// ID -
const getAreaNameById = async (areaId: string | undefined): Promise<string> => {
if (!areaId) return '未知区域'
try {
const token = authStore.token
if (!token) {
console.warn('未获取到 Token跳转到登录页')
await router.push('/login')
return '未知区域'
}
const response = await request<ResultVO<Area>>(`/api/web/area/${areaId}`, {
method: 'GET',
})
if (response.code === 200 && response.data) {
const areaName = response.data.areaName || '未知区域'
//
areaNameCache.value[areaId] = areaName
return areaName
} else {
console.error('获取区域信息失败:', response.message)
return '未知区域'
}
} catch (error: any) {
console.error('请求区域信息异常:', error)
return '未知区域'
}
}
//
const getAreaNameFromCache = (areaId: string | undefined): string => {
if (!areaId) return '未知区域'
return areaNameCache.value[areaId] || ''
}
//
const preloadAreaNames = async (adminList: Admin[]) => {
const areaIds = adminList
.filter(admin => admin.role === 'ROLE_AREA_ADMIN' && admin.areaId && !areaNameCache.value[admin.areaId])
.map(admin => admin.areaId!)
for (const areaId of areaIds) {
await getAreaNameById(areaId)
}
}
//
const fetchAdminList = async () => {
loading.value = true
@ -349,15 +400,20 @@ const fetchAdminList = async () => {
})
if (response.code === 200) {
admins.value = (response.data || []).map((admin: any) => ({
const adminList = (response.data || []).map((admin: any) => ({
adminId: admin.adminId || '',
name: admin.adminName || '未知姓名', //
name: admin.adminName || '未知姓名',
account: admin.adminId || '',
phone: admin.phone || '未知电话',
role: admin.role || '未知角色',
areaId: admin.areaId,
areaName: admin.areaName || undefined //
areaName: admin.areaName || undefined
}))
admins.value = adminList
//
await preloadAreaNames(adminList)
} else {
const errorMsg = response.message || `获取失败(错误码:${response.code}`
console.error('获取管理员列表失败:', errorMsg)
@ -391,15 +447,6 @@ const formatRole = (role: string): string => {
return roleMap[role] || role
}
// ID
// script
const getAreaNameById = (areaId: string | undefined): string => {
if (!areaId) return '未知区域'
const area = unassignedAreas.value.find(a => a.areaId === areaId)
return area ? area.areaName : '未知区域'
}
//
const filteredAdmins = computed(() => {
return admins.value.filter(admin => {

@ -259,9 +259,9 @@ const currentOrder = ref<WorkOrder>({
orderId: '',
deviceId: '',
areaId: '',
orderType: 'repair',
orderType: 'repair', //
description: '',
priority: 'medium',
priority: 'medium', //
status: 'pending',
assignedRepairmanId: '',
createdTime: undefined,
@ -860,21 +860,22 @@ onMounted(() => {
flex-direction: column;
}
.btn-back {
background: #f0f0f0;
color: #333;
border: 1px solid #ddd;
padding: 8px 16px;
border-radius: 4px;
font-size: 14px;
cursor: pointer;
transition: all 0.3s;
}
/* 在 MaintenanceRecord.vue 中更新按钮样式 */
.btn-back {
background: #f0f0f0;
color: #333;
border: none; /* 移除边框 */
padding: 8px 16px;
border-radius: 4px;
cursor: pointer;
font-size: 14px;
transition: background 0.3s;
}
.btn-back:hover {
background: #e0e0e0;
}
.btn-back:hover {
background: #e0e0e0;
border-color: #bbb;
}
.modal-content {
width: 95%;

Loading…
Cancel
Save