增加预算表的显示功能

This commit is contained in:
2025-12-03 17:17:17 +08:00
parent ddad32b481
commit acf4ef12ec
16 changed files with 1058 additions and 398 deletions

View File

@@ -11,6 +11,125 @@
<span class="flex-grow block border-t border-black" aria-hidden="true" role="presentation"></span>
</h2>
<!-- Component ends here -->
<!-- 投入预算表 -->
<div class="bg-white rounded-lg shadow-md p-4 mb-6">
<h2 class="text-2xl font-bold mb-4">投入预算表</h2>
<p class="text-gray-700 mb-4">分支机构项目的预算表,包括设备和基础设施明细</p>
<!-- 预算模板导入功能 -->
{% if budget_templates %} <!-- 只有当有模板时才显示导入功能 -->
<div class="mb-6 p-4 bg-blue-50 rounded-lg">
<h3 class="text-lg font-semibold mb-2">预算模板导入</h3>
<p class="text-sm text-gray-600 mb-3">从模板一键导入预算,快速生成预算表</p>
<form method="POST" action="{% url 'import-budget-template' branch.id %}">
{% csrf_token %}
<div class="grid grid-cols-1 md:grid-cols-3 gap-4">
<div>
<label for="template" class="block text-sm font-medium text-gray-700 mb-1">选择模板</label>
<select id="template" name="template" class="w-full p-2 border border-gray-300 rounded-md">
{% for template in budget_templates %}
<option value="{{ template.id }}">{{ template.name }}{% if template.is_default %} (默认){% endif %}</option>
{% endfor %}
</select>
</div>
<div>
<label for="budget_name" class="block text-sm font-medium text-gray-700 mb-1">预算名称</label>
<input type="text" id="budget_name" name="budget_name" placeholder="请输入预算名称" class="w-full p-2 border border-gray-300 rounded-md">
</div>
<div class="flex items-end">
<button type="submit" class="bg-blue-500 hover:bg-blue-600 text-white px-4 py-2 rounded-md">
一键导入
</button>
</div>
</div>
</form>
</div>
{% endif %}
{% if budgets %}
{% for budget in budgets %}
<div class="mb-6">
<h3 class="text-lg font-semibold mb-3">{{ budget.activity.name }} - 总预算: ¥{{ budget.total_budget }}</h3>
<!-- 设备预算部分 -->
<div class="mb-4">
<h4 class="text-md font-semibold mb-2">设备预算明细</h4>
{% if budget.equipment_budgets.all %}
<div class="overflow-x-auto">
<table class="min-w-full divide-y divide-gray-200">
<thead class="bg-gray-50">
<tr>
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">项目</th>
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">型号</th>
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">单价</th>
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">采购方式</th>
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">数量</th>
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">小计</th>
</tr>
</thead>
<tbody class="bg-white divide-y divide-gray-200">
{% for equipment in budget.equipment_budgets.all %}
<tr>
<td class="px-6 py-4 whitespace-nowrap">{{ equipment.project }}</td>
<td class="px-6 py-4 whitespace-nowrap">{{ equipment.model }}</td>
<td class="px-6 py-4 whitespace-nowrap">¥{{ equipment.unit_price }}</td>
<td class="px-6 py-4 whitespace-nowrap">{{ equipment.get_procurement_method_display }}</td>
<td class="px-6 py-4 whitespace-nowrap">{{ equipment.quantity }}</td>
<td class="px-6 py-4 whitespace-nowrap">¥{{ equipment.subtotal }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% else %}
<p class="text-gray-500 italic">暂无设备预算明细</p>
{% endif %}
</div>
<!-- 基础设施预算部分 -->
<div>
<h4 class="text-md font-semibold mb-2">基础设施预算明细</h4>
{% if budget.infrastructure_budgets.all %}
<div class="overflow-x-auto">
<table class="min-w-full divide-y divide-gray-200">
<thead class="bg-gray-50">
<tr>
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">名称</th>
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">备注</th>
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">单价</th>
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">单位</th>
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">数量</th>
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">小计</th>
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">说明</th>
</tr>
</thead>
<tbody class="bg-white divide-y divide-gray-200">
{% for infrastructure in budget.infrastructure_budgets.all %}
<tr>
<td class="px-6 py-4 whitespace-nowrap">{{ infrastructure.name }}</td>
<td class="px-6 py-4 whitespace-nowrap">{{ infrastructure.remarks }}</td>
<td class="px-6 py-4 whitespace-nowrap">¥{{ infrastructure.unit_price }}</td>
<td class="px-6 py-4 whitespace-nowrap">{{ infrastructure.unit }}</td>
<td class="px-6 py-4 whitespace-nowrap">{{ infrastructure.quantity }}</td>
<td class="px-6 py-4 whitespace-nowrap">¥{{ infrastructure.subtotal }}</td>
<td class="px-6 py-4 whitespace-nowrap">{{ infrastructure.description }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% else %}
<p class="text-gray-500 italic">暂无基础设施预算明细</p>
{% endif %}
</div>
</div>
{% endfor %}
{% else %}
<p class="text-gray-500 italic">暂无预算信息</p>
{% endif %}
</div>
<div class="bg-white rounded-lg shadow-md p-4 mb-6">
<h2 class="text-2xl font-bold mb-4">基本信息</h2>
<div class="grid grid-cols-1 md:grid-cols-2 gap-4">