Merge branch 'wsc'
This commit is contained in:
commit
f9adc57390
|
@ -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 令牌
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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':
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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 ''
|
||||
|
||||
|
||||
|
|
|
@ -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>
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
|
Loading…
Reference in New Issue