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