fix: fix some api issue in fronted
This commit is contained in:
@@ -32,38 +32,25 @@ class ItemSerializer(serializers.ModelSerializer):
|
||||
item=obj, is_returned=False
|
||||
).first()
|
||||
if current_usage:
|
||||
return UserSerializer(current_usage.user).data
|
||||
return {
|
||||
'username': current_usage.user,
|
||||
'contact': current_usage.borrower_contact
|
||||
}
|
||||
return None
|
||||
|
||||
|
||||
class ItemUsageSerializer(serializers.ModelSerializer):
|
||||
user = UserSerializer(read_only=True)
|
||||
user_id = serializers.IntegerField(write_only=True)
|
||||
item = ItemSerializer(read_only=True)
|
||||
item_id = serializers.IntegerField(write_only=True)
|
||||
item_name = serializers.CharField(source='item.name', read_only=True)
|
||||
item_serial = serializers.CharField(source='item.serial_number', read_only=True)
|
||||
|
||||
class Meta:
|
||||
model = ItemUsage
|
||||
fields = [
|
||||
'id', 'item', 'item_id', 'user', 'user_id', 'start_time', 'end_time',
|
||||
'purpose', 'notes', 'is_returned', 'condition_before', 'condition_after',
|
||||
'created_at'
|
||||
'id', 'item', 'item_name', 'item_serial', 'user', 'borrower_contact',
|
||||
'start_time', 'end_time', 'purpose', 'notes', 'is_returned',
|
||||
'condition_before', 'condition_after', 'expected_return_time', 'created_at'
|
||||
]
|
||||
|
||||
def create(self, validated_data):
|
||||
# 当创建新的使用记录时,更新物品状态为使用中
|
||||
item = Item.objects.get(id=validated_data['item_id'])
|
||||
item.status = 'in_use'
|
||||
item.save()
|
||||
return super().create(validated_data)
|
||||
|
||||
def update(self, instance, validated_data):
|
||||
# 当归还物品时,更新物品状态为可用
|
||||
if validated_data.get('is_returned', False) and not instance.is_returned:
|
||||
item = instance.item
|
||||
item.status = 'available'
|
||||
item.save()
|
||||
return super().update(instance, validated_data)
|
||||
read_only_fields = ['created_at']
|
||||
|
||||
|
||||
class ItemDetailSerializer(ItemSerializer):
|
||||
|
||||
+11
-17
@@ -32,29 +32,23 @@ class ItemViewSet(viewsets.ModelViewSet):
|
||||
status=status.HTTP_400_BAD_REQUEST
|
||||
)
|
||||
|
||||
user_id = request.data.get('user_id')
|
||||
user_name = request.data.get('user_name')
|
||||
user_contact = request.data.get('user_contact', '')
|
||||
purpose = request.data.get('purpose', '')
|
||||
notes = request.data.get('notes', '')
|
||||
condition_before = request.data.get('condition_before', '')
|
||||
|
||||
if not user_id:
|
||||
if not user_name:
|
||||
return Response(
|
||||
{'error': '请指定使用者'},
|
||||
status=status.HTTP_400_BAD_REQUEST
|
||||
)
|
||||
|
||||
try:
|
||||
user = User.objects.get(id=user_id)
|
||||
except User.DoesNotExist:
|
||||
return Response(
|
||||
{'error': '用户不存在'},
|
||||
{'error': '请输入使用者姓名'},
|
||||
status=status.HTTP_400_BAD_REQUEST
|
||||
)
|
||||
|
||||
# 创建使用记录
|
||||
usage = ItemUsage.objects.create(
|
||||
item=item,
|
||||
user=user,
|
||||
user=user_name,
|
||||
borrower_contact=user_contact,
|
||||
start_time=timezone.now(),
|
||||
purpose=purpose,
|
||||
notes=notes,
|
||||
@@ -125,13 +119,13 @@ class ItemUsageViewSet(viewsets.ModelViewSet):
|
||||
|
||||
@action(detail=False)
|
||||
def by_user(self, request):
|
||||
"""根据用户ID获取使用记录"""
|
||||
user_id = request.query_params.get('user_id')
|
||||
if user_id:
|
||||
usages = self.queryset.filter(user_id=user_id)
|
||||
"""根据用户姓名获取使用记录"""
|
||||
user_name = request.query_params.get('user_name')
|
||||
if user_name:
|
||||
usages = self.queryset.filter(user__icontains=user_name)
|
||||
serializer = self.get_serializer(usages, many=True)
|
||||
return Response(serializer.data)
|
||||
return Response({'error': '请提供用户ID'}, status=status.HTTP_400_BAD_REQUEST)
|
||||
return Response({'error': '请提供用户姓名'}, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
|
||||
class CategoryViewSet(viewsets.ModelViewSet):
|
||||
|
||||
@@ -115,14 +115,18 @@
|
||||
<span>当前使用中的物品</span>
|
||||
</template>
|
||||
<el-table :data="currentUsages" style="width: 100%" max-height="300">
|
||||
<el-table-column prop="item.name" label="物品名称" />
|
||||
<el-table-column prop="user.username" label="使用者" />
|
||||
<el-table-column prop="item_name" label="物品名称" />
|
||||
<el-table-column prop="user" label="使用者" />
|
||||
<el-table-column prop="start_time" label="开始时间">
|
||||
<template #default="scope">
|
||||
{{ formatDate(scope.row.start_time) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="purpose" label="使用目的" />
|
||||
<el-table-column prop="purpose" label="使用目的">
|
||||
<template #default="scope">
|
||||
{{ scope.row.purpose || '无' }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-card>
|
||||
</el-col>
|
||||
|
||||
@@ -80,9 +80,8 @@
|
||||
<span>当前使用者</span>
|
||||
</template>
|
||||
<el-descriptions :column="3" border>
|
||||
<el-descriptions-item label="使用者">{{ item.current_user.username }}</el-descriptions-item>
|
||||
<el-descriptions-item label="姓名">{{ item.current_user.first_name }} {{ item.current_user.last_name }}</el-descriptions-item>
|
||||
<el-descriptions-item label="邮箱">{{ item.current_user.email }}</el-descriptions-item>
|
||||
<el-descriptions-item label="使用者姓名">{{ item.current_user.username }}</el-descriptions-item>
|
||||
<el-descriptions-item label="联系方式">{{ item.current_user.contact }}</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-card>
|
||||
|
||||
@@ -125,14 +124,15 @@
|
||||
<el-dialog v-model="showUsageDialog" title="使用记录详情" width="600px">
|
||||
<div v-if="selectedUsage">
|
||||
<el-descriptions :column="2" border>
|
||||
<el-descriptions-item label="使用者">{{ selectedUsage.user.username }}</el-descriptions-item>
|
||||
<el-descriptions-item label="使用目的">{{ selectedUsage.purpose }}</el-descriptions-item>
|
||||
<el-descriptions-item label="使用者">{{ selectedUsage.user }}</el-descriptions-item>
|
||||
<el-descriptions-item label="联系方式">{{ selectedUsage.borrower_contact }}</el-descriptions-item>
|
||||
<el-descriptions-item label="开始时间">{{ formatDate(selectedUsage.start_time) }}</el-descriptions-item>
|
||||
<el-descriptions-item label="结束时间">
|
||||
{{ selectedUsage.end_time ? formatDate(selectedUsage.end_time) : '使用中' }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="使用前状况">{{ selectedUsage.condition_before || '无' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="使用后状况">{{ selectedUsage.condition_after || '无' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="使用目的">{{ selectedUsage.notes || '无' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="备注" :span="2">{{ selectedUsage.notes || '无' }}</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</div>
|
||||
|
||||
@@ -124,14 +124,10 @@
|
||||
<el-dialog v-model="showBorrowDialog" title="借用物品" width="500px">
|
||||
<el-form :model="borrowForm" label-width="100px">
|
||||
<el-form-item label="使用者">
|
||||
<el-select v-model="borrowForm.user_id" placeholder="请选择使用者">
|
||||
<el-option
|
||||
v-for="user in users"
|
||||
:key="user.id"
|
||||
:label="user.username"
|
||||
:value="user.id"
|
||||
/>
|
||||
</el-select>
|
||||
<el-input v-model="borrowForm.user_name" placeholder="请输入使用者姓名" />
|
||||
</el-form-item>
|
||||
<el-form-item label="联系方式">
|
||||
<el-input v-model="borrowForm.user_contact" placeholder="请输入联系方式(可选)" />
|
||||
</el-form-item>
|
||||
<el-form-item label="使用目的">
|
||||
<el-input v-model="borrowForm.purpose" />
|
||||
@@ -245,7 +241,8 @@ export default {
|
||||
owner: ''
|
||||
},
|
||||
borrowForm: {
|
||||
user_id: null,
|
||||
user_name: '',
|
||||
user_contact: '',
|
||||
purpose: '',
|
||||
condition_before: '',
|
||||
notes: ''
|
||||
@@ -333,7 +330,8 @@ export default {
|
||||
borrowItem(item) {
|
||||
this.currentItem = item
|
||||
this.borrowForm = {
|
||||
user_id: null,
|
||||
user_name: '',
|
||||
user_contact: '',
|
||||
purpose: '',
|
||||
condition_before: '',
|
||||
notes: ''
|
||||
@@ -382,8 +380,8 @@ export default {
|
||||
}
|
||||
},
|
||||
async confirmBorrow() {
|
||||
if (!this.borrowForm.user_id) {
|
||||
ElMessage.error('请选择使用者')
|
||||
if (!this.borrowForm.user_name) {
|
||||
ElMessage.error('请输入使用者姓名')
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
@@ -30,9 +30,9 @@
|
||||
|
||||
<el-card>
|
||||
<el-table :data="filteredUsages" style="width: 100%" v-loading="loading">
|
||||
<el-table-column prop="item.name" label="物品名称" />
|
||||
<el-table-column prop="item.serial_number" label="序列号" />
|
||||
<el-table-column prop="user.username" label="使用者" />
|
||||
<el-table-column prop="item_name" label="物品名称" />
|
||||
<el-table-column prop="item_serial" label="序列号" />
|
||||
<el-table-column prop="user" label="使用者" />
|
||||
<el-table-column prop="start_time" label="开始时间" width="160">
|
||||
<template #default="scope">
|
||||
{{ formatDate(scope.row.start_time) }}
|
||||
@@ -85,19 +85,15 @@
|
||||
<el-col :span="12">
|
||||
<h3>物品信息</h3>
|
||||
<el-descriptions :column="1" border>
|
||||
<el-descriptions-item label="物品名称">{{ selectedUsage.item.name }}</el-descriptions-item>
|
||||
<el-descriptions-item label="序列号">{{ selectedUsage.item.serial_number }}</el-descriptions-item>
|
||||
<el-descriptions-item label="类别">{{ selectedUsage.item.category }}</el-descriptions-item>
|
||||
<el-descriptions-item label="物品名称">{{ selectedUsage.item_name }}</el-descriptions-item>
|
||||
<el-descriptions-item label="序列号">{{ selectedUsage.item_serial }}</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<h3>使用者信息</h3>
|
||||
<el-descriptions :column="1" border>
|
||||
<el-descriptions-item label="用户名">{{ selectedUsage.user.username }}</el-descriptions-item>
|
||||
<el-descriptions-item label="姓名">
|
||||
{{ selectedUsage.user.first_name }} {{ selectedUsage.user.last_name }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="邮箱">{{ selectedUsage.user.email }}</el-descriptions-item>
|
||||
<el-descriptions-item label="使用者">{{ selectedUsage.user }}</el-descriptions-item>
|
||||
<el-descriptions-item label="联系方式">{{ selectedUsage.borrower_contact }}</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
Reference in New Issue
Block a user