This commit is contained in:
menxipeng
2025-11-30 17:58:01 +08:00
parent df0e7a16d9
commit 2439766af5
2 changed files with 63 additions and 14 deletions

View File

@@ -170,6 +170,8 @@ export default function CompanyPermissionsPage() {
// 判断是否是总部管理员 // 判断是否是总部管理员
const isAdmin = currentUserRole === "admin" const isAdmin = currentUserRole === "admin"
// 判断是否可以编辑用户admin 和 common 角色都可以)
const canEdit = isAdmin || userRoleFromApi === "common"
// 初始化数据 // 初始化数据
useEffect(() => { useEffect(() => {
@@ -334,19 +336,19 @@ export default function CompanyPermissionsPage() {
<TableHead></TableHead> <TableHead></TableHead>
<TableHead></TableHead> <TableHead></TableHead>
<TableHead></TableHead> <TableHead></TableHead>
{isAdmin && <TableHead></TableHead>} {canEdit && <TableHead></TableHead>}
</TableRow> </TableRow>
</TableHeader> </TableHeader>
<TableBody> <TableBody>
{loading ? ( {loading ? (
<TableRow> <TableRow>
<TableCell colSpan={isAdmin ? 8 : 7} className="text-center py-8"> <TableCell colSpan={canEdit ? 8 : 7} className="text-center py-8">
<div className="text-gray-500">...</div> <div className="text-gray-500">...</div>
</TableCell> </TableCell>
</TableRow> </TableRow>
) : users.length === 0 ? ( ) : users.length === 0 ? (
<TableRow> <TableRow>
<TableCell colSpan={isAdmin ? 8 : 7} className="text-center py-8"> <TableCell colSpan={canEdit ? 8 : 7} className="text-center py-8">
<div className="text-gray-500"></div> <div className="text-gray-500"></div>
</TableCell> </TableCell>
</TableRow> </TableRow>
@@ -388,7 +390,7 @@ export default function CompanyPermissionsPage() {
</div> </div>
</TableCell> </TableCell>
<TableCell>{getStatusBadge(user.status)}</TableCell> <TableCell>{getStatusBadge(user.status)}</TableCell>
{isAdmin && ( {canEdit && (
<TableCell> <TableCell>
<div className="flex space-x-2"> <div className="flex space-x-2">
<Button <Button

View File

@@ -306,13 +306,56 @@ export default function EquipmentPage() {
} }
// 打开查看对话框 // 打开查看对话框
const handleViewEquipment = (equipment: Equipment) => { const handleViewEquipment = async (equipment: Equipment) => {
console.log('查看设备数据:', equipment)
// 先设置设备信息并打开对话框
setViewEquipment(equipment) setViewEquipment(equipment)
setIsViewEquipmentOpen(true) setIsViewEquipmentOpen(true)
// 加载设备类型数据用于显示 // 加载设备类型数据用于显示
if (Object.keys(equipmentTypes).length === 0) { if (Object.keys(equipmentTypes).length === 0) {
fetchEquipmentTypes() fetchEquipmentTypes()
} }
// 如果商户名称为空或未定义,尝试根据 merchantId 查找商户信息
if ((!equipment.merchantName || equipment.merchantName.trim() === '') && equipment.merchantId) {
// 如果商户列表未加载,先加载
let currentMerchants = merchants
if (currentMerchants.length === 0) {
setLoadingMerchants(true)
try {
const response = await apiGet('/back/general/provinceMerchants')
if (response.code === 200) {
currentMerchants = response.data || []
setMerchants(currentMerchants)
}
} catch (error) {
console.error('获取商户列表失败:', error)
} finally {
setLoadingMerchants(false)
}
}
// 查找对应的商户信息
const merchant = currentMerchants.find(
m => (m.merchantsId === equipment.merchantId) || (m.id === equipment.merchantId)
)
console.log('找到的商户信息:', merchant, 'merchantId:', equipment.merchantId)
if (merchant) {
const updatedEquipment = {
...equipment,
merchantName: merchant.merchantName || equipment.merchantName || '-',
mallName: merchant.mallLocation || equipment.mallName || '-'
}
console.log('更新后的设备信息:', updatedEquipment)
setViewEquipment(updatedEquipment)
} else {
console.warn('未找到对应的商户信息merchantId:', equipment.merchantId)
}
}
} }
// 打开编辑对话框 // 打开编辑对话框
@@ -964,13 +1007,13 @@ export default function EquipmentPage() {
{/* 查看设备对话框 */} {/* 查看设备对话框 */}
<Dialog open={isViewEquipmentOpen} onOpenChange={setIsViewEquipmentOpen}> <Dialog open={isViewEquipmentOpen} onOpenChange={setIsViewEquipmentOpen}>
<DialogContent className="max-w-4xl max-h-[90vh] overflow-hidden flex flex-col w-[95vw] sm:w-full p-0 sm:p-6"> <DialogContent className="max-w-4xl max-h-[95vh] overflow-hidden flex flex-col w-[95vw] sm:w-full p-0 sm:p-6">
<DialogHeader className="px-4 sm:px-0 pt-4 sm:pt-0 pb-3 sm:pb-4 border-b sm:border-b-0"> <DialogHeader className="flex-shrink-0 px-4 sm:px-0 pt-4 sm:pt-0 pb-3 sm:pb-4 border-b">
<DialogTitle className="text-base sm:text-lg"></DialogTitle> <DialogTitle className="text-base sm:text-lg"></DialogTitle>
<DialogDescription className="text-xs sm:text-sm"></DialogDescription> <DialogDescription className="text-xs sm:text-sm"></DialogDescription>
</DialogHeader> </DialogHeader>
{viewEquipment && ( {viewEquipment && (
<div className="flex-1 overflow-y-auto px-4 sm:px-0 py-3 sm:py-4 space-y-4 sm:space-y-6"> <div className="flex-1 overflow-y-auto min-h-0 px-4 sm:px-0 py-3 sm:py-4 space-y-4 sm:space-y-6">
{/* 设备基本信息 */} {/* 设备基本信息 */}
<div className="grid grid-cols-1 sm:grid-cols-2 gap-3 sm:gap-4 sm:gap-x-6"> <div className="grid grid-cols-1 sm:grid-cols-2 gap-3 sm:gap-4 sm:gap-x-6">
<div className="space-y-1.5 sm:space-y-2"> <div className="space-y-1.5 sm:space-y-2">
@@ -1006,11 +1049,15 @@ export default function EquipmentPage() {
<div className="grid grid-cols-1 sm:grid-cols-2 gap-3 sm:gap-4 sm:gap-x-6"> <div className="grid grid-cols-1 sm:grid-cols-2 gap-3 sm:gap-4 sm:gap-x-6">
<div className="space-y-1.5 sm:space-y-2"> <div className="space-y-1.5 sm:space-y-2">
<Label className="text-xs sm:text-sm text-gray-500 block"></Label> <Label className="text-xs sm:text-sm text-gray-500 block"></Label>
<div className="text-sm sm:text-base font-medium text-gray-900 break-words">{viewEquipment.merchantName}</div> <div className="text-sm sm:text-base font-medium text-gray-900 break-words">
{viewEquipment.merchantName ? (
<span>{viewEquipment.merchantName}</span>
) : viewEquipment.merchantId ? (
<span className="text-gray-400 italic">...</span>
) : (
<span className="text-gray-400 italic"></span>
)}
</div> </div>
<div className="space-y-1.5 sm:space-y-2">
<Label className="text-xs sm:text-sm text-gray-500 block"></Label>
<div className="text-sm sm:text-base text-gray-900 break-words">{viewEquipment.mallName || '-'}</div>
</div> </div>
<div className="col-span-1 sm:col-span-2 space-y-1.5 sm:space-y-2"> <div className="col-span-1 sm:col-span-2 space-y-1.5 sm:space-y-2">
<Label className="text-xs sm:text-sm text-gray-500 block"></Label> <Label className="text-xs sm:text-sm text-gray-500 block"></Label>
@@ -1079,7 +1126,7 @@ export default function EquipmentPage() {
</div> </div>
</div> </div>
)} )}
<div className="flex flex-col-reverse sm:flex-row justify-end gap-2 px-4 sm:px-0 py-3 sm:py-0 mt-auto border-t pt-3 sm:pt-4"> <div className="flex-shrink-0 flex flex-col-reverse sm:flex-row justify-end gap-2 px-4 sm:px-0 py-3 sm:py-0 mt-auto border-t pt-3 sm:pt-4">
<Button <Button
variant="outline" variant="outline"
onClick={() => setIsViewEquipmentOpen(false)} onClick={() => setIsViewEquipmentOpen(false)}