Merge branch 'wsc'

This commit is contained in:
王思川 2024-06-17 00:35:12 +08:00
commit f9adc57390
24 changed files with 249 additions and 107 deletions

View File

@ -41,6 +41,7 @@
{% endfor %}
<th class="text-center">权限组</th>
<th class="text-center">用户权限</th>
<th class="text-center">操作</th>
</tr>
</thead>
<tbody id="result" style="color: white;">
@ -59,6 +60,7 @@
<td class="text-center">
<button class="btn btn-outline-primary btn-sm permission-settings-btn" data-bs-toggle="modal" data-bs-target="#userPermissionModal" data-url="{% url 'get_user_existing_permissions' user_id=item.id %}">权限设置</button>
</td>
<td class="text-center"><a href="#" class="delete-btn" style="color: red;" data-target_id="{{ item.id }}" data-bs-toggle="modal" data-bs-target="#deleteModal">删除</a></td>
</tr>
{% empty %}
<tr>
@ -142,7 +144,7 @@
<button id="u-prevPage" class="btn btn-secondary" type="button">上一页</button>
<button id="u-nextPage" class="btn btn-secondary" type="button">下一页</button>
</div>
<button type="button" class="btn btn-secondary" id="refreshPermissions" data-user-id="">刷新权限</button>
{# <button type="button" class="btn btn-secondary" id="refreshPermissions" data-user-id="">刷新权限</button>#}
<button type="button" class="btn btn-primary" id="savePermissions" data-user-id="">保存更改</button>
</div>
</div>
@ -179,6 +181,7 @@
</div>
</div>
</div>
{% include "delete_modal.html" %}
<script>
// 获取 CSRF 令牌

View File

@ -87,6 +87,8 @@ def fixed_assets_list_view(request):
"add_url": reverse("fixed_assets_list_add"),
"delete_url": reverse("fixed_assets_list_delete"),
"table_exclude_field_name": ['asset_id'],
"add_button": True,
"import_excel_button": True
}
return render(request, 'items_list.html', context)
@ -229,6 +231,8 @@ def intangible_assets_list_view(request):
"add_url": reverse("intangible_assets_list_add"),
"delete_url": reverse("intangible_assets_list_delete"),
"table_exclude_field_name": ['asset_id'], # Exclude primary key
"add_button": True,
"import_excel_button": True
}
return render(request, 'items_list.html', context)

View File

@ -55,7 +55,9 @@ def seal_reg_list_view(request):
"modify_url": reverse("seal_reg_list_modify"),
"add_url": reverse("seal_reg_list_add"),
"delete_url": reverse("seal_reg_list_delete"),
"table_exclude_field_name": [], # Add any fields you want to exclude
"table_exclude_field_name": ["record_id"], # Add any fields you want to exclude
"add_button": True,
"import_excel_button": True
}
return render(request, 'items_list.html', context)
@ -171,7 +173,9 @@ def seal_doc_borrow_list_view(request):
"modify_url": reverse("seal_doc_borrow_list_modify"),
"add_url": reverse("seal_doc_borrow_list_add"),
"delete_url": reverse("seal_doc_borrow_list_delete"),
"table_exclude_field_name": [], # Add any fields you want to exclude
"table_exclude_field_name": ["record_id"], # Add any fields you want to exclude
"add_button": True,
"import_excel_button": True
}
return render(request, 'items_list.html', context)
@ -313,7 +317,9 @@ def contract_mgmt_list_view(request):
"modify_url": reverse("contract_mgmt_list_modify"),
"add_url": reverse("contract_mgmt_list_add"),
"delete_url": reverse("contract_mgmt_list_delete"),
"table_exclude_field_name": ['contract_number'], # Exclude primary key
"table_exclude_field_name": ["id", 'contract_number'], # Exclude primary key
"add_button": True,
"import_excel_button": True
}
return render(request, 'items_list.html', context)
@ -441,6 +447,8 @@ def policies_list_view(request):
"add_url": reverse("policies_list_add"),
"delete_url": reverse("policies_list_delete"),
"table_exclude_field_name": ['policy_id'], # Exclude primary key
"add_button": True,
"import_excel_button": True
}
return render(request, 'items_list.html', context)

View File

@ -74,13 +74,10 @@
</div>
<!-- 按钮组 开始 -->
<div class="col-md-4 mt-4 text-end">
{% show_modify_records_button model_config %}
<button id="addItemBtn" class="btn btn-outline-secondary"
data-bs-toggle="modal" data-bs-target="#addEditModal">添加
</button>
<button class="btn btn-outline-secondary" data-bs-toggle="modal"
data-bs-target="#downloadModal">导出
</button>
<button class="btn btn-outline-primary" data-bs-toggle="modal"
data-bs-target="#uploadModal">上传Excel
</button>

View File

@ -74,13 +74,10 @@
</div>
<!-- 按钮组 开始 -->
<div class="col-md-4 mt-4 text-end">
{% show_modify_records_button model_config %}
<button id="addItemBtn" class="btn btn-outline-secondary"
data-bs-toggle="modal" data-bs-target="#addEditModal">添加
</button>
<button class="btn btn-outline-secondary" data-bs-toggle="modal"
data-bs-target="#downloadModal">导出
</button>
<button class="btn btn-outline-primary" data-bs-toggle="modal"
data-bs-target="#uploadModal">上传Excel
</button>

View File

@ -62,6 +62,8 @@ def exp_type_list_view(request):
"modify_url": reverse("exp_type_list_modify"),
"add_url": reverse("exp_type_list_add"),
"delete_url": reverse("exp_type_list_delete"),
"add_button": True,
"import_excel_button": True
}
return render(request, 'items_list.html', context)
@ -163,6 +165,8 @@ def exp_detail_list_view(request):
"modify_url": reverse("exp_detail_list_modify"),
"add_url": reverse("exp_detail_list_add"),
"delete_url": reverse("exp_detail_list_delete"),
"add_button": True,
"import_excel_button": True
}
return render(request, 'items_list.html', context)
@ -294,6 +298,8 @@ def gpb_list_view(request):
"modify_url": reverse("gpb_list_modify"),
"add_url": reverse("gpb_list_add"),
"delete_url": reverse("gpb_list_delete"),
"add_button": True,
"import_excel_button": True
}
return render(request, 'items_list.html', context)
@ -412,6 +418,8 @@ def lcb_list_view(request):
"modify_url": reverse("lcb_list_modify"),
"add_url": reverse("lcb_list_add"),
"delete_url": reverse("lcb_list_delete"),
"add_button": True,
"import_excel_button": True
}
return render(request, 'items_list.html', context)
@ -540,6 +548,8 @@ def rbm_detail_list_view(request):
"modify_url": reverse("rbm_detail_list_modify"),
"add_url": reverse("rbm_detail_list_add"),
"delete_url": reverse("rbm_detail_list_delete"),
"add_button": True,
"import_excel_button": True
}
return render(request, 'items_list.html', context)
@ -640,6 +650,8 @@ def bns_cat_list_view(request):
"modify_url": reverse("bns_cat_list_modify"),
"add_url": reverse("bns_cat_list_add"),
"delete_url": reverse("bns_cat_list_delete"),
"add_button": True,
"import_excel_button": True
}
return render(request, 'items_list.html', context)
@ -754,6 +766,8 @@ def bns_alloc_list_view(request):
"modify_url": reverse("bns_alloc_list_modify"),
"add_url": reverse("bns_alloc_list_add"),
"delete_url": reverse("bns_alloc_list_delete"),
"add_button": True,
"import_excel_button": True
}
return render(request, 'items_list.html', context)
@ -867,6 +881,8 @@ def tax_rec_list_view(request):
"modify_url": reverse("tax_rec_list_modify"),
"add_url": reverse("tax_rec_list_add"),
"delete_url": reverse("tax_rec_list_delete"),
"add_button": True,
"import_excel_button": True
}
return render(request, 'items_list.html', context)
@ -1000,6 +1016,8 @@ def inv_ledger_list_view(request):
"modify_url": reverse("inv_ledger_list_modify"),
"add_url": reverse("inv_ledger_list_add"),
"delete_url": reverse("inv_ledger_list_delete"),
"add_button": True,
"import_excel_button": True
}
return render(request, 'items_list.html', context)
@ -1136,6 +1154,8 @@ def inv_rec_list_view(request):
"modify_url": reverse("inv_rec_list_modify"),
"add_url": reverse("inv_rec_list_add"),
"delete_url": reverse("inv_rec_list_delete"),
"add_button": True,
"import_excel_button": True
}
return render(request, 'items_list.html', context)
@ -1396,6 +1416,8 @@ def emp_comm_list_view(request):
"modify_url": reverse("emp_comm_list_modify"),
"add_url": reverse("emp_comm_list_add"),
"delete_url": reverse("emp_comm_list_delete"),
"add_button": True,
"import_excel_button": True
}
return render(request, 'items_list.html', context)

View File

@ -74,7 +74,7 @@
</div>
<!-- 按钮组 开始 -->
<div class="col-md-4 mt-4 text-end">
{% show_modify_records_button model_config %}
<button id="addItemBtn" class="btn btn-outline-secondary"
data-bs-toggle="modal" data-bs-target="#addEditModal">添加
</button>

View File

@ -74,13 +74,9 @@
</div>
<!-- 按钮组 开始 -->
<div class="col-md-4 mt-4 text-end">
{% show_modify_records_button model_config %}
<button id="addItemBtn" class="btn btn-outline-secondary"
data-bs-toggle="modal" data-bs-target="#addEditModal">添加
</button>
<button class="btn btn-outline-secondary" data-bs-toggle="modal"
data-bs-target="#downloadModal">导出
</button>
<button class="btn btn-outline-primary" data-bs-toggle="modal"
data-bs-target="#uploadModal">上传Excel
</button>

View File

@ -74,7 +74,7 @@
</div>
<!-- 按钮组 开始 -->
<div class="col-md-4 mt-4 text-end">
{% show_modify_records_button model_config %}
<button id="addItemBtn" class="btn btn-outline-secondary"
data-bs-toggle="modal" data-bs-target="#addEditModal">添加
</button>

View File

@ -444,6 +444,8 @@ def alv_list_view(request):
"add_url": reverse("alv_list_add"),
"delete_url": reverse("alv_list_delete"),
"table_exclude_field_name": ['record_id'],
"add_button": True,
"import_excel_button": True
}
return render(request, 'items_list.html', context)
@ -562,6 +564,8 @@ def rk_list_view(request):
"add_url": reverse("rk_list_add"),
"delete_url": reverse("rk_list_delete"),
"table_exclude_field_name": ['rank_id'],
"add_button": True,
"import_excel_button": True
}
return render(request, 'items_list.html', context)
@ -682,6 +686,8 @@ def pst_list_view(request):
"add_url": reverse("pst_list_add"),
"delete_url": reverse("pst_list_delete"),
"table_exclude_field_name": ['position_id'],
"add_button": True,
"import_excel_button": True
}
return render(request, 'items_list.html', context)

View File

@ -74,7 +74,7 @@
</div>
<!-- 按钮组 开始 -->
<div class="col-md-4 mt-4 text-end">
{% show_modify_records_button model_config %}
<button id="addItemBtn" class="btn btn-outline-secondary"
data-bs-toggle="modal" data-bs-target="#addEditModal">添加
</button>

View File

@ -85,6 +85,8 @@ def proj_res_list_view(request):
"add_url": reverse("proj_res_list_add"),
"delete_url": reverse("proj_res_list_delete"),
"table_exclude_field_name": ['resource_id'], # Exclude primary key
"add_button": True,
"import_excel_button": True
}
return render(request, 'pj_list.html', context)
@ -217,6 +219,8 @@ def cust_list_view(request):
"add_url": reverse("cust_list_add"),
"delete_url": reverse("cust_list_delete"),
"table_exclude_field_name": ['customer_id'], # Exclude primary key
"add_button": True,
"import_excel_button": True
}
return render(request, 'items_list.html', context)

View File

@ -56,6 +56,8 @@ def sma_reg_list_view(request):
"modify_url": reverse("sma_reg_list_modify"),
"add_url": reverse("sma_reg_list_add"),
"delete_url": reverse("sma_reg_list_delete"),
"add_button": True,
"import_excel_button": True
}
return render(request, 'items_list.html', context)
@ -171,7 +173,9 @@ def acc_op_mgmt_list_view(request):
"modify_url": reverse("acc_op_mgmt_list_modify"),
"add_url": reverse("acc_op_mgmt_list_add"),
"delete_url": reverse("acc_op_mgmt_list_delete"),
"table_exclude_field_name": [], # Add any fields you want to exclude
"table_exclude_field_name": ["record_id"], # Add any fields you want to exclude
"add_button": True,
"import_excel_button": True
}
return render(request, 'items_list.html', context)
@ -287,7 +291,9 @@ def web_reg_list_view(request):
"modify_url": reverse("web_reg_list_modify"),
"add_url": reverse("web_reg_list_add"),
"delete_url": reverse("web_reg_list_delete"),
"table_exclude_field_name": [], # Add any fields you want to exclude
"table_exclude_field_name": ["record_id"], # Add any fields you want to exclude
"add_button": True,
"import_excel_button": True
}
return render(request, 'items_list.html', context)
@ -398,7 +404,9 @@ def web_maint_rec_list_view(request):
"modify_url": reverse("web_maint_rec_list_modify"),
"add_url": reverse("web_maint_rec_list_add"),
"delete_url": reverse("web_maint_rec_list_delete"),
"table_exclude_field_name": [], # Add any fields you want to exclude
"table_exclude_field_name": ["record_id"], # Add any fields you want to exclude
"add_button": True,
"import_excel_button": True
}
return render(request, 'items_list.html', context)

View File

@ -74,13 +74,9 @@
</div>
<!-- 按钮组 开始 -->
<div class="col-md-4 mt-4 text-end">
{% show_modify_records_button model_config %}
<button id="addItemBtn" class="btn btn-outline-secondary"
data-bs-toggle="modal" data-bs-target="#addEditModal">添加
</button>
<button class="btn btn-outline-secondary" data-bs-toggle="modal"
data-bs-target="#downloadModal">导出
</button>
<button class="btn btn-outline-primary" data-bs-toggle="modal"
data-bs-target="#uploadModal">上传Excel
</button>

View File

@ -1,30 +1,41 @@
import json
import os
from django.apps import apps
from django.conf import settings
from django.contrib.auth.decorators import login_required
from django.core.exceptions import ValidationError
from django.core.files.storage import default_storage
from django.http import JsonResponse, Http404
from django.shortcuts import render, get_object_or_404
from django.template.loader import render_to_string
from django.urls import reverse
from django.views.decorators.csrf import csrf_protect
from openpyxl import load_workbook
from rest_framework import status
from rest_framework.decorators import api_view, permission_classes
from rest_framework.pagination import PageNumberPagination
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response
from django.contrib.auth.decorators import login_required
from rest_framework.serializers import ModelSerializer
from application.org_mgnt.forms import CompanyEntityForm, PrimaryDepartmentForm, SecondaryDepartmentForm
from application.org_mgnt.models import PrimaryDepartment, SecondaryDepartment, CompanyEntity, CompanyBankAccount
from application.org_mgnt.serializers import EntityChangeRecordSerializer, CompanyBankAccountSerializer
from application.org_mgnt.forms import (
CompanyEntityForm,
PrimaryDepartmentForm,
SecondaryDepartmentForm
)
from application.org_mgnt.models import (
PrimaryDepartment,
SecondaryDepartment,
CompanyEntity,
CompanyBankAccount
)
from application.org_mgnt.serializers import (
EntityChangeRecordSerializer,
CompanyBankAccountSerializer
)
from common.auth import custom_permission_required
from common.utils.page_helper import paginate_query_and_assign_numbers
from django.http import JsonResponse
from django.core.files.storage import default_storage
from django.conf import settings
from openpyxl import load_workbook
from django.apps import apps
from rest_framework.serializers import ModelSerializer
from django.core.exceptions import ValidationError
import os
class StandardResultsSetPagination(PageNumberPagination):
@ -33,7 +44,6 @@ class StandardResultsSetPagination(PageNumberPagination):
max_page_size = 100
@login_required
@custom_permission_required('org_mgnt.view_companyentity')
def eir_list_view(request):
# 声明查询集
@ -122,7 +132,6 @@ def eir_list_view(request):
return render(request, 'ce_list.html', context)
@login_required
@custom_permission_required('org_mgnt.add_companyentity')
def eir_list_add(request):
if request.method == 'POST':
@ -141,7 +150,6 @@ def eir_list_add(request):
return JsonResponse({"message": "无效的请求方法"}, status=405)
@login_required
@custom_permission_required('org_mgnt.change_companyentity')
def eir_list_modify(request):
if request.method == 'POST':
@ -173,7 +181,6 @@ def eir_list_modify(request):
return JsonResponse({"message": "无效的请求方法"}, status=405)
@login_required
@custom_permission_required('org_mgnt.delete_companyentity')
def eir_list_delete(request):
if request.method == 'GET':
@ -184,7 +191,6 @@ def eir_list_delete(request):
@api_view(['GET'])
@login_required
@custom_permission_required('org_mgnt.view_entitychangerecord')
def change_record_list(request, entity_id):
entity = get_object_or_404(CompanyEntity, pk=entity_id)
@ -198,7 +204,6 @@ def change_record_list(request, entity_id):
@api_view(['GET'])
@login_required
@custom_permission_required('org_mgnt.view_companybankaccount')
def bank_account_list(request, entity_id):
entity = get_object_or_404(CompanyEntity, pk=entity_id)
@ -256,7 +261,6 @@ def delete_bank_account(request, account_id):
return Response(status=status.HTTP_204_NO_CONTENT)
@login_required
@custom_permission_required('org_mgnt.view_primarydepartment')
def pd_list_view(request):
# 声明查询集
@ -310,12 +314,12 @@ def pd_list_view(request):
"modify_url": reverse("pd_list_modify"),
"add_url": reverse("pd_list_add"),
"delete_url": reverse("pd_list_delete"),
"add_button": True
}
return render(request, 'items_list.html', context)
@login_required
@custom_permission_required('org_mgnt.add_primarydepartment')
def pd_list_add(request):
if request.method == 'POST':
@ -334,7 +338,6 @@ def pd_list_add(request):
return JsonResponse({"message": "无效的请求方法"}, status=405)
@login_required
@custom_permission_required('org_mgnt.change_primarydepartment')
def pd_list_modify(request):
if request.method == 'POST':
@ -366,17 +369,15 @@ def pd_list_modify(request):
return JsonResponse({"message": "无效的请求方法"}, status=405)
@login_required
@custom_permission_required('org_mgnt.delete_primarydepartment')
def pd_list_delete(request):
if request.method == 'GET':
primary_department_id = request.GET.get('primary_department_id')
PrimaryDepartment.objects.filter(primary_department_id=primary_department_id).delete()
id = request.GET.get('id')
PrimaryDepartment.objects.filter(primary_department_id=id).delete()
return JsonResponse({"message": "删除成功"})
return JsonResponse({"message": "无效的请求方法"}, status=405)
@login_required
@custom_permission_required('org_mgnt.view_secondarydepartment')
def sd_list_view(request):
# 声明查询集
@ -431,12 +432,12 @@ def sd_list_view(request):
"modify_url": reverse("sd_list_modify"),
"add_url": reverse("sd_list_add"),
"delete_url": reverse("sd_list_delete"),
"add_button": True
}
return render(request, 'items_list.html', context)
@login_required
@custom_permission_required('org_mgnt.add_secondarydepartment')
def sd_list_add(request):
if request.method == 'POST':
@ -455,7 +456,6 @@ def sd_list_add(request):
return JsonResponse({"message": "无效的请求方法"}, status=405)
@login_required
@custom_permission_required('org_mgnt.change_secondarydepartment')
def sd_list_modify(request):
if request.method == 'POST':
@ -487,7 +487,6 @@ def sd_list_modify(request):
return JsonResponse({"message": "无效的请求方法"}, status=405)
@login_required
@custom_permission_required('org_mgnt.delete_secondarydepartment')
def sd_list_delete(request):
if request.method == 'GET':

View File

@ -1,8 +1,17 @@
from django import forms
from .models import *
from ..org_mgnt.models import PrimaryDepartment
class GroupBusinessTargetForm(forms.ModelForm):
primary_department = forms.ModelChoiceField(
queryset=PrimaryDepartment.objects.all(),
widget=forms.Select(attrs={'class': 'form-control'}),
empty_label="选择一级部门",
label="一级部门"
)
class Meta:
model = GroupBusinessTarget
fields = '__all__'
@ -19,6 +28,24 @@ class GroupBusinessTargetForm(forms.ModelForm):
'operating_profit': forms.NumberInput(attrs={'class': 'form-control'}),
}
def __init__(self, *args, **kwargs):
super(GroupBusinessTargetForm, self).__init__(*args, **kwargs)
if 'instance' in kwargs:
self.fields['primary_department'].initial = kwargs['instance'].primary_department
print(f"Initial primary department: {self.fields['primary_department'].initial}") # 调试输出
def clean(self):
cleaned_data = super().clean()
primary_department = cleaned_data.get('primary_department')
year = cleaned_data.get('year')
project_nature = cleaned_data.get('project_nature')
if primary_department and year and project_nature:
if GroupBusinessTarget.objects.filter(primary_department=primary_department, year=year, project_nature=project_nature).exists():
raise forms.ValidationError("该一级部门在同一年已经有一个相同项目性质的业绩目标。")
return cleaned_data
class EmployeePerformanceTargetForm(forms.ModelForm):
class Meta:

View File

@ -123,6 +123,8 @@ def gbo_list_view(request):
"modify_url": reverse("gbo_list_modify"),
"add_url": reverse("gbo_list_add"),
"delete_url": reverse("gbo_list_delete"),
"add_button": True,
"import_excel_button": True
}
return render(request, 'items_list.html', context)
@ -183,7 +185,7 @@ def gbo_list_modify(request):
@custom_permission_required('perf_mgnt.delete_groupbusinesstarget')
def gbo_list_delete(request):
if request.method == 'GET':
target_id = request.GET.get('target_id')
target_id = request.GET.get('id')
GroupBusinessTarget.objects.filter(target_id=target_id).delete()
return JsonResponse({"message": "删除成功"})
return JsonResponse({"message": "无效的请求方法"}, status=405)
@ -341,6 +343,8 @@ def emt_list_view(request):
"modify_url": reverse("emt_list_modify"),
"add_url": reverse("emt_list_add"),
"delete_url": reverse("emt_list_delete"),
"add_button": True,
"import_excel_button": True
}
return render(request, 'items_list.html', context)

View File

@ -95,6 +95,8 @@ def proj_ledger_list_view(request):
"add_url": reverse("proj_ledger_list_add"),
"delete_url": reverse("proj_ledger_list_delete"),
"table_exclude_field_name": ['project_id'], # Exclude primary key
"add_button": True,
"import_excel_button": True
}
return render(request, 'items_list.html', context)
@ -221,6 +223,8 @@ def emp_proj_income_list_view(request):
"add_url": reverse("emp_proj_income_list_add"),
"delete_url": reverse("emp_proj_income_list_delete"),
"table_exclude_field_name": ['record_id'], # Exclude primary key
"add_button": True,
"import_excel_button": True
}
return render(request, 'items_list.html', context)

View File

@ -74,13 +74,10 @@
</div>
<!-- 按钮组 开始 -->
<div class="col-md-4 mt-4 text-end">
{% show_modify_records_button model_config %}
<button id="addItemBtn" class="btn btn-outline-secondary"
data-bs-toggle="modal" data-bs-target="#addEditModal">添加
</button>
<button class="btn btn-outline-secondary" data-bs-toggle="modal"
data-bs-target="#downloadModal">导出
</button>
<button class="btn btn-outline-primary" data-bs-toggle="modal"
data-bs-target="#uploadModal">上传Excel
</button>

View File

@ -74,13 +74,10 @@
</div>
<!-- 按钮组 开始 -->
<div class="col-md-4 mt-4 text-end">
{% show_modify_records_button model_config %}
<button id="addItemBtn" class="btn btn-outline-secondary"
data-bs-toggle="modal" data-bs-target="#addEditModal">添加
</button>
<button class="btn btn-outline-secondary" data-bs-toggle="modal"
data-bs-target="#downloadModal">导出
</button>
<button class="btn btn-outline-primary" data-bs-toggle="modal"
data-bs-target="#uploadModal">上传Excel
</button>

View File

@ -59,6 +59,8 @@ def cg_cat_list_view(request):
"modify_url": reverse("cg_cat_list_modify"),
"add_url": reverse("cg_cat_list_add"),
"delete_url": reverse("cg_cat_list_delete"),
"add_button": True,
"import_excel_button": True
}
return render(request, 'items_list.html', context)
@ -292,6 +294,8 @@ def cmp_phone_reg_list_view(request):
"modify_url": reverse("cmp_phone_reg_list_modify"),
"add_url": reverse("cmp_phone_reg_list_add"),
"delete_url": reverse("cmp_phone_reg_list_delete"),
"add_button": True,
"import_excel_button": True
}
return render(request, 'items_list.html', context)
@ -410,6 +414,8 @@ def bv_usage_list_view(request):
"modify_url": reverse("bv_usage_list_modify"),
"add_url": reverse("bv_usage_list_add"),
"delete_url": reverse("bv_usage_list_delete"),
"add_button": True,
"import_excel_button": True
}
return render(request, 'items_list.html', context)
@ -533,6 +539,8 @@ def mem_acc_list_view(request):
"modify_url": reverse("mem_acc_list_modify"),
"add_url": reverse("mem_acc_list_add"),
"delete_url": reverse("mem_acc_list_delete"),
"add_button": True,
"import_excel_button": True
}
return render(request, 'items_list.html', context)

View File

@ -79,16 +79,40 @@ def subtract(value, arg):
return ''
@register.simple_tag()
def show_modify_records_button(model_config):
# 预设的模型配置列表
display = [
@register.simple_tag(takes_context=True)
def render_button(context, button_type):
buttons = {
'modify_records_button': {
'class': 'btn btn-outline-secondary',
'target': '#modifyRecordsModal',
'text': '修改记录',
'id': 'modifyRecordBtn'
},
'report_excel_button': {
'class': 'btn btn-outline-secondary',
'target': '#downloadModal',
'text': '导出',
'id': 'reportExcelBtn'
},
'import_excel_button': {
'class': 'btn btn-outline-primary',
'target': '#uploadModal',
'text': '上传Excel',
'id': 'importExcelBtn'
},
'add_button': {
'class': 'btn btn-outline-secondary',
'target': '#addEditModal',
'text': '添加',
'id': 'addItemBtn'
}
}
]
if model_config in display:
return mark_safe(
'<button class="btn btn-outline-secondary" data-bs-toggle="modal" data-bs-target="#modifyRecordsModal">修改记录</button>')
if context.get(button_type):
button = buttons.get(button_type)
if button:
return mark_safe(
f'<button id= "{button["id"]}" class="{button["class"]}" data-bs-toggle="modal" data-bs-target="{button["target"]}">{button["text"]}</button>')
return ''

View File

@ -15,39 +15,37 @@
<div class="card-body">
<div class="row">
<div class="col-md-8">
<!-- 筛选表单 开始 -->
<form action="{% url form_action_url %}" method="get">
{% csrf_token %}
<div class="row">
{% for filter in filters %}
{% if filter.type == 'text' %}
<div class="col">
<label for="{{ filter.id }}"
class="form-label">{{ filter.label }}</label>
<label for="{{ filter.id }}" class="form-label">{{ filter.label }}</label>
<input type="text" class="form-control"
id="{{ filter.id }}"
name="{{ filter.name }}"
placeholder="{{ filter.placeholder }}">
placeholder="{{ filter.placeholder }}"
value="{{ request.GET|get_value:filter.name|default:'' }}">
</div>
{% elif filter.type == 'select' %}
<div class="col">
<label class="form-label"
for="{{ filter.id }}">{{ filter.label }}</label>
<label class="form-label" for="{{ filter.id }}">{{ filter.label }}</label>
<select class="form-control"
id="{{ filter.id }}"
name="{{ filter.name }}">
<option value="">请选择</option>
{% for option in filter.options %}
<option value="{{ option.value }}"
{% if request.GET|get_value:filter.name == option.value %}selected{% endif %}>{{ option.display }}
{% if request.GET|get_value:filter.name == option.value %}selected{% endif %}>
{{ option.display }}
</option>
{% endfor %}
</select>
</div>
{% elif filter.type == 'date' %}
<div class="col">
<label for="{{ filter.id }}"
class="form-label">{{ filter.label }}</label>
<label for="{{ filter.id }}" class="form-label">{{ filter.label }}</label>
<input type="date" class="form-control"
id="{{ filter.id }}"
name="{{ filter.name }}"
@ -55,8 +53,7 @@
</div>
{% elif filter.type == 'month' %}
<div class="col">
<label for="{{ filter.id }}"
class="form-label">{{ filter.label }}</label>
<label for="{{ filter.id }}" class="form-label">{{ filter.label }}</label>
<input type="month" class="form-control"
id="{{ filter.id }}"
name="{{ filter.name }}"
@ -65,27 +62,17 @@
{% endif %}
{% endfor %}
<div class="col mt-4 d-flex align-items-center">
<button type="submit" class="btn btn-primary">查询
</button>
<button type="submit" class="btn btn-primary">查询</button>
</div>
</div>
</form>
<!-- 筛选表单 结束 -->
</div>
<!-- 按钮组 开始 -->
<div class="col-md-4 mt-4 text-end">
{% show_modify_records_button model_config %}
<button id="addItemBtn" class="btn btn-outline-secondary"
data-bs-toggle="modal" data-bs-target="#addEditModal">添加
</button>
<button class="btn btn-outline-secondary" data-bs-toggle="modal"
data-bs-target="#downloadModal">导出
</button>
<button class="btn btn-outline-primary" data-bs-toggle="modal"
data-bs-target="#uploadModal">上传Excel
</button>
{% render_button 'modify_records_button' %}
{% render_button 'add_button' %}
{% render_button 'report_excel_button' %}
{% render_button 'import_excel_button' %}
</div>
<!-- 按钮组 结束 -->
</div>
</div>
</div>
@ -96,7 +83,6 @@
<div class="card">
<div class="card-body table-border-style">
<div class="table-responsive">
<!-- 表格 开始 -->
<table class="table">
{% get_verbose_field_names_from_model model_config table_exclude_field_name as columns %}
<thead>
@ -114,14 +100,19 @@
<td class="text-center">{{ field.value }}</td>
{% endfor %}
<td class="text-center">
<a href="#" class="edit-btn"
<a href="#"
id="editBtn"
class="edit-btn"
data-id="{{ item|get_pk_value }}"
data-bs-toggle="modal"
data-bs-target="#addEditModal">编辑</a>
<a href="#" class="edit-btn" style="color: red"
<a href="#"
id="deleteBtn"
class="edit-btn"
style="color: red"
data-id="{{ item|get_pk_value }}"
data-bs-toggle="modal"
data-bs-target="#addEditModal">删除</a>
data-bs-target="#deleteModal">删除</a>
</td>
</tr>
{% empty %}
@ -133,7 +124,6 @@
{% endfor %}
</tbody>
</table>
<!-- 表格 结束 -->
</div>
</div>
</div>
@ -162,13 +152,35 @@
</div>
</div>
<div id="deleteModal" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="deleteModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="deleteModalLabel">提示</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<p>此操作会删除当前数据,是否继续?</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-light" data-bs-dismiss="modal">取消</button>
<button type="button" class="btn btn-danger" id="confirmDeleteBtn">删除</button>
</div>
</div>
</div>
</div>
{% include 'modify_record_modal.html' with modify_records_url=modify_records_url %}
{% include 'delete_modal.html' with delete_url=delete_url %}
{% include 'upload_excel_modal.html' with excel_upload_config=excel_upload_config %}
<script>
const add_url = "{{ add_url }}";
const modify_url = "{{ modify_url }}";
const deleteUrl = "{{ delete_url }}";
let targetIdToDelete = null;
$(document).ready(function () {
// 处理添加按钮点击事件
@ -197,7 +209,7 @@
});
// 处理编辑按钮点击事件
$('.edit-btn').click(function () {
$('#editBtn').click(function () {
var itemId = $(this).data('id');
$.ajax({
url: modify_url,
@ -245,6 +257,35 @@
});
});
}
// 删除和确认删除
$(document).on('click', '#deleteBtn, #confirmDeleteBtn', function (event) {
if (event.target.id === 'deleteBtn') {
// 打开删除模态框
targetIdToDelete = $(this).data('id');
$('#deleteModal').modal('show');
} else if (event.target.id === 'confirmDeleteBtn') {
// 确认删除
if (targetIdToDelete !== null) {
$.ajax({
type: 'GET',
url: deleteUrl,
data: {
'id': targetIdToDelete
},
success: function (response) {
showAlert('success', "删除成功");
location.reload();
},
error: function (response) {
showAlert('danger', "删除失败");
}
});
}
$('#deleteModal').modal('hide');
}
});
});
</script>

View File

@ -119,7 +119,7 @@
{#$('#uploadModal').modal('hide');#}
// 检查是否有文件被选中
if ($('#inputFile').get(0).files.length === 0) {
alert("没有文件选中");
showAlert('danger', '未选择文件');
$('#uploadModal').modal('show');
return;
}
@ -172,7 +172,7 @@
}
// 显示错误消息
alert(errorMsg);
showAlert('danger', errorMsg);
}
});
});