diff --git a/application/accounts/templates/accounts/user_permissions_list.html b/application/accounts/templates/accounts/user_permissions_list.html
index 5c6fcc7..61077a4 100644
--- a/application/accounts/templates/accounts/user_permissions_list.html
+++ b/application/accounts/templates/accounts/user_permissions_list.html
@@ -21,7 +21,7 @@
-
+
@@ -77,4 +77,119 @@
{% include "authority_modal.html" %}
+
+
+
+
+
+
{% endblock %}
\ No newline at end of file
diff --git a/application/accounts/urls.py b/application/accounts/urls.py
index d27c738..2b37d99 100644
--- a/application/accounts/urls.py
+++ b/application/accounts/urls.py
@@ -2,9 +2,7 @@ from django.urls import path, include
from django.contrib.auth import views as auth_views
-from application.accounts.views import logout_view, user_permissions_list, get_user_existing_permissions, \
- save_user_permissions, refresh_user_permissions, group_perm_list, get_group_permissions, save_group_permissions, \
- user_homepage_view
+from .views import *
urlpatterns = [
path('login/', auth_views.LoginView.as_view(template_name='accounts/login.html'), name='user_login'),
@@ -18,4 +16,5 @@ urlpatterns = [
path('groups_permissions//', get_group_permissions, name='get_group_permissions'),
path('groups_save_permissions//', save_group_permissions, name='save_group_permissions'),
path('homepage', user_homepage_view, name='user_homepage'),
+ path('create_account_profile', create_account_profile, name='create_account_profile'),
]
diff --git a/application/accounts/views.py b/application/accounts/views.py
index 9518f36..3665a29 100644
--- a/application/accounts/views.py
+++ b/application/accounts/views.py
@@ -1,6 +1,8 @@
# 标准库导入
import json
+from datetime import datetime
+from django.db import transaction
from django.http import JsonResponse, HttpResponseBadRequest
from django.shortcuts import redirect, render, get_object_or_404
from django.utils.decorators import method_decorator
@@ -17,9 +19,12 @@ from django.views.decorators.http import require_http_methods
from XH_Digital_Management import settings
# 本地Django应用导入
from application.accounts.models import AccountProfile
+from application.hrm_mgnt.models import EmployeeInformation
from common.auth import group_required
from common.utils.page_helper import paginate_query_and_assign_numbers
+from pypinyin import lazy_pinyin
+
def format_permissions(permissions):
action_prefixes = ['Can add ', 'Can change ', 'Can delete ', 'Can view ']
@@ -84,7 +89,7 @@ class CustomLoginView(LoginView):
def logout_view(request):
logout(request)
# Redirect to a success page, such as the home page
- return redirect('user_homepage')
+ return redirect('user_login')
@login_required
@@ -99,7 +104,7 @@ def user_permissions_list(request):
query_set = query_set.filter(employee_information__name__icontains=name)
if primary_department:
query_set = query_set.filter(employee_information__primary_department=primary_department)
- query_set = query_set.filter(user__is_superuser=True)
+ # query_set = query_set.filter(user__is_superuser=True)
items = paginate_query_and_assign_numbers(
request=request,
@@ -444,3 +449,58 @@ def user_homepage_view(request):
'user': request.user,
}
return render(request, 'user_homepage.html', context)
+
+
+@login_required
+@group_required('系统管理')
+def create_account_profile(request):
+ if request.method == 'POST':
+ data = json.loads(request.body)
+ employee_info_ids = data.get('employee_ids') # 获取employee_ids列表
+
+ # 检查是否提供了必填信息
+ if not employee_info_ids:
+ return JsonResponse({'success': False, 'message': 'Employee Information IDs are required.'})
+
+ # 在事务中创建AccountProfile
+ with transaction.atomic():
+ created_profiles = []
+ for employee_info_id in employee_info_ids:
+ # 尝试获取 employee_information 实例
+ try:
+ employee_information = EmployeeInformation.objects.get(employee_id=employee_info_id)
+ except EmployeeInformation.DoesNotExist as e:
+ return JsonResponse({'success': False, 'message': str(e)})
+
+ # 检查 employee_information 是否已经有对应的AccountProfile
+ if AccountProfile.objects.filter(employee_information=employee_information).exists():
+ return JsonResponse(
+ {'success': False, 'message': f'Employee Information ID {employee_info_id} is already bound to an AccountProfile.'})
+
+ # 将姓名转换为拼音作为用户名
+ username_base = ''.join(lazy_pinyin(employee_information.name))
+ username = username_base
+ counter = 1
+ while User.objects.filter(username=username).exists():
+ username = f"{username_base}{counter}"
+ counter += 1
+
+ # 创建默认密码
+ date_str = datetime.now().strftime('%Y%m%d')
+ password = f"{username_base}{date_str}"
+
+ # 创建新的 User 实例
+ user = User.objects.create_user(
+ username=username,
+ email=employee_information.email,
+ password=password
+ )
+
+ # 创建新的AccountProfile实例
+ account_profile = AccountProfile.objects.create(
+ user=user,
+ employee_information=employee_information
+ )
+ created_profiles.append(account_profile)
+
+ return JsonResponse({'success': True, 'message': f'Created {len(created_profiles)} AccountProfiles successfully.'})
diff --git a/application/hrm_mgnt/urls.py b/application/hrm_mgnt/urls.py
index 12dc009..61122f7 100644
--- a/application/hrm_mgnt/urls.py
+++ b/application/hrm_mgnt/urls.py
@@ -27,4 +27,6 @@ urlpatterns = [
path('pst_list/add/', pst_list_add, name='pst_list_add'),
path('pst_list/modify/', pst_list_modify, name='pst_list_modify'),
path('pst_list/delete/', pst_list_delete, name='pst_list_delete'),
+
+ path('emp_list_for_create_account_profile/', emp_list_for_create_account_profile, name='emp_list_for_create_account_profile'),
]
diff --git a/application/hrm_mgnt/views.py b/application/hrm_mgnt/views.py
index 70deffd..1bd7bab 100644
--- a/application/hrm_mgnt/views.py
+++ b/application/hrm_mgnt/views.py
@@ -1,4 +1,5 @@
-from django.http import JsonResponse, Http404
+from django.core.paginator import Paginator
+from django.http import JsonResponse, Http404
from django.shortcuts import render, get_object_or_404, redirect
from django.template.loader import render_to_string
from django.urls import reverse
@@ -669,3 +670,35 @@ def pst_list_delete(request):
Position.objects.filter(position_id=position_id).delete()
return JsonResponse({"message": "删除成功"})
return JsonResponse({"message": "无效的请求方法"}, status=405)
+
+
+def emp_list_for_create_account_profile(request):
+ # 查询还没有创建AccountProfile的员工信息
+ query_set = EmployeeInformation.objects.exclude(account_profile__isnull=False).order_by('-employee_id')
+
+ # 获取查询参数
+ name = request.GET.get('name', '')
+
+ # 根据提供的参数进行筛选
+ if name:
+ query_set = query_set.filter(name__icontains=name)
+
+ # 对查询结果进行分页
+ paginator = Paginator(query_set, 10) # 每页显示10条记录
+ page_number = request.GET.get('page')
+ page_obj = paginator.get_page(page_number)
+
+ # 创建员工信息的列表,包含需要的字段
+ employees = list(page_obj.object_list.values(
+ 'employee_id', 'name', 'email', 'mobile_number', 'primary_department', 'position'
+ ))
+
+ # 返回JSON响应
+ return JsonResponse({
+ 'success': True,
+ 'employees': employees,
+ 'has_previous': page_obj.has_previous(),
+ 'has_next': page_obj.has_next(),
+ 'num_pages': paginator.num_pages,
+ 'current_page': page_obj.number
+ })
diff --git a/requirements.txt b/requirements.txt
index 3319273..f1a33e2 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -6,4 +6,5 @@ asgiref==3.8.1
sqlparse==0.5.0
openpyxl==3.1.3
numpy==1.26.4
-pytz==2024.1
\ No newline at end of file
+pytz==2024.1
+pypinyin==0.51.0
\ No newline at end of file