diff --git a/.gitignore b/.gitignore
index 95d65ce2b9a71f4bb29af2f1f9c13231bc69e3b2..12bc2b3ee3e90884a6db97506c55488fbcb98dc4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,4 +4,6 @@
.history/
.vscode/
-web/package-lock.json
\ No newline at end of file
+web/package-lock.json
+
+*.bat
\ No newline at end of file
diff --git a/backend/dvadmin/system/fixtures/init_menu.json b/backend/dvadmin/system/fixtures/init_menu.json
index 835a41e2bb214bea6bce6d2097b20e538fe43195..ec9742aa7ee793dfef84736611f102781cba0610 100644
--- a/backend/dvadmin/system/fixtures/init_menu.json
+++ b/backend/dvadmin/system/fixtures/init_menu.json
@@ -11,12 +11,164 @@
"status": true,
"cache": false,
"visible": true,
- "parent": null,
"children": [
+ {
+ "name": "用户管理",
+ "icon": "iconfont icon-icon-",
+ "sort": 1,
+ "is_link": false,
+ "is_catalog": false,
+ "web_path": "/user",
+ "component": "system/user/index",
+ "component_name": "user",
+ "status": true,
+ "cache": false,
+ "visible": true,
+ "children": [],
+ "menu_button": [
+ {
+ "name": "查询",
+ "value": "user:Search",
+ "api": "/api/system/user/",
+ "method": 0
+ },
+ {
+ "name": "新增",
+ "value": "user:Create",
+ "api": "/api/system/user/",
+ "method": 1
+ },
+ {
+ "name": "编辑",
+ "value": "user:Update",
+ "api": "/api/system/user/{id}/",
+ "method": 2
+ },
+ {
+ "name": "删除",
+ "value": "user:Delete",
+ "api": "/api/system/user/{id}/",
+ "method": 3
+ },
+ {
+ "name": "导出",
+ "value": "user:Export",
+ "api": "/api/system/user/export/",
+ "method": 1
+ },
+ {
+ "name": "导入",
+ "value": "user:Import",
+ "api": "/api/system/user/import/",
+ "method": 1
+ },
+ {
+ "name": "获取导入模板",
+ "value": "user:ImportTemplate",
+ "api": "/api/system/user/import/",
+ "method": 0
+ },
+ {
+ "name": "批量更新模板",
+ "value": "user:BatchUpdateTemplate",
+ "api": "/api/system/user/update_template/",
+ "method": 0
+ },
+ {
+ "name": "重设密码",
+ "value": "user:ResetPassword",
+ "api": "/api/system/user/{id}/reset_password/",
+ "method": 2
+ },
+ {
+ "name": "重置密码",
+ "value": "user:ResetDefaultPassword",
+ "api": "/api/system/user/{id}/reset_to_default_password/",
+ "method": 2
+ }
+ ],
+ "menu_field": [
+ {
+ "field_name": "avatar",
+ "title": "头像",
+ "model": "Users"
+ },
+ {
+ "field_name": "create_datetime",
+ "title": "创建时间",
+ "model": "Users"
+ },
+ {
+ "field_name": "creator",
+ "title": "创建人",
+ "model": "Users"
+ },
+ {
+ "field_name": "dept",
+ "title": "所属部门",
+ "model": "Users"
+ },
+ {
+ "field_name": "dept_belong_id",
+ "title": "数据归属部门",
+ "model": "Users"
+ },
+ {
+ "field_name": "description",
+ "title": "描述",
+ "model": "Users"
+ },
+ {
+ "field_name": "email",
+ "title": "邮箱",
+ "model": "Users"
+ },
+ {
+ "field_name": "gender",
+ "title": "性别",
+ "model": "Users"
+ },
+ {
+ "field_name": "id",
+ "title": "Id",
+ "model": "Users"
+ },
+ {
+ "field_name": "mobile",
+ "title": "电话",
+ "model": "Users"
+ },
+ {
+ "field_name": "modifier",
+ "title": "修改人",
+ "model": "Users"
+ },
+ {
+ "field_name": "name",
+ "title": "姓名",
+ "model": "Users"
+ },
+ {
+ "field_name": "update_datetime",
+ "title": "修改时间",
+ "model": "Users"
+ },
+ {
+ "field_name": "username",
+ "title": "用户账号",
+ "model": "Users"
+ },
+ {
+ "field_name": "user_type",
+ "title": "用户类型",
+ "model": "Users"
+ }
+ ]
+ },
{
"name": "菜单管理",
"icon": "iconfont icon-caidan",
- "sort": 1,
+ "sort": 2,
"is_link": false,
"is_catalog": false,
"web_path": "/menu",
@@ -25,7 +177,6 @@
"status": true,
"cache": false,
"visible": true,
- "parent": 1,
"children": [],
"menu_button": [
{
@@ -35,11 +186,29 @@
"method": 0
},
{
- "name": "详情",
+ "name": "单例",
"value": "menu:Retrieve",
"api": "/api/system/menu/{id}/",
"method": 0
},
+ {
+ "name": "新增",
+ "value": "menu:Create",
+ "api": "/api/system/menu/",
+ "method": 1
+ },
+ {
+ "name": "编辑",
+ "value": "menu:Update",
+ "api": "/api/system/menu/{id}/",
+ "method": 2
+ },
+ {
+ "name": "删除",
+ "value": "menu:Delete",
+ "api": "/api/system/menu/{id}/",
+ "method": 3
+ },
{
"name": "查询所有",
"value": "menu:SearchAll",
@@ -53,22 +222,28 @@
"method": 0
},
{
- "name": "查询按钮权限",
- "value": "btn:Search",
+ "name": "查询按钮",
+ "value": "menu:SearchButton",
"api": "/api/system/menu_button/",
"method": 0
},
{
- "name": "查询列权限",
- "value": "column:Search",
- "api": "/api/system/column/",
- "method": 0
+ "name": "新增按钮",
+ "value": "menu:CreateButton",
+ "api": "/api/system/menu_button/",
+ "method": 1
},
{
- "name": "新增",
- "value": "menu:Create",
- "api": "/api/system/menu/",
- "method": 1
+ "name": "编辑按钮",
+ "value": "menu:UpdateButton",
+ "api": "/api/system/menu_button/{id}/",
+ "method": 2
+ },
+ {
+ "name": "删除按钮",
+ "value": "menu:DeleteButton",
+ "api": "/api/system/menu_button/{id}/",
+ "method": 3
},
{
"name": "上移",
@@ -83,10 +258,10 @@
"method": 1
},
{
- "name": "新增按钮权限",
- "value": "btn:Create",
- "api": "/api/system/menu_button/",
- "method": 1
+ "name": "查询列权限",
+ "value": "column:Search",
+ "api": "/api/system/column/",
+ "method": 0
},
{
"name": "新增列权限",
@@ -94,47 +269,23 @@
"api": "/api/system/column/",
"method": 1
},
- {
- "name": "自动匹配列权限",
- "value": "column:Match",
- "api": "/api/system/column/auto_match_fields/",
- "method": 1
- },
- {
- "name": "编辑",
- "value": "menu:Update",
- "api": "/api/system/menu/{id}/",
- "method": 2
- },
- {
- "name": "修改按钮权限",
- "value": "btn:Update",
- "api": "/api/system/menu_button/{id}/",
- "method": 2
- },
{
"name": "编辑列权限",
"value": "column:Update",
"api": "/api/system/column/{id}/",
"method": 2
},
- {
- "name": "删除",
- "value": "menu:Delete",
- "api": "/api/system/menu/{id}/",
- "method": 3
- },
- {
- "name": "删除按钮权限",
- "value": "btn:Delete",
- "api": "/api/system/menu_button/{id}/",
- "method": 3
- },
{
"name": "删除列权限",
"value": "column:Delete",
"api": "/api/system/column/{id}/",
"method": 3
+ },
+ {
+ "name": "自动匹配列权限",
+ "value": "column:Match",
+ "api": "/api/system/column/auto_match_fields/",
+ "method": 1
}
],
"menu_field": []
@@ -151,7 +302,6 @@
"status": true,
"cache": false,
"visible": true,
- "parent": 1,
"children": [],
"menu_button": [
{
@@ -223,7 +373,6 @@
"status": true,
"cache": false,
"visible": true,
- "parent": 1,
"children": [],
"menu_button": [
{
@@ -233,17 +382,11 @@
"method": 0
},
{
- "name": "详情",
+ "name": "单例",
"value": "role:Retrieve",
"api": "/api/system/role/{id}/",
"method": 0
},
- {
- "name": "权限配置",
- "value": "role:Permission",
- "api": "/api/system/role/{id}/",
- "method": 0
- },
{
"name": "新增",
"value": "role:Create",
@@ -256,222 +399,122 @@
"api": "/api/system/role/{id}/",
"method": 2
},
- {
- "name": "保存",
- "value": "role:Save",
- "api": "/api/system/role/{id}/",
- "method": 2
- },
{
"name": "删除",
"value": "role:Delete",
"api": "/api/system/role/{id}/",
"method": 3
- }
- ],
- "menu_field": [
- {
- "field_name": "create_datetime",
- "title": "创建时间",
- "model": "Role"
- },
- {
- "field_name": "creator",
- "title": "创建人",
- "model": "Role"
- },
- {
- "field_name": "dept_belong_id",
- "title": "数据归属部门",
- "model": "Role"
- },
- {
- "field_name": "description",
- "title": "描述",
- "model": "Role"
- },
- {
- "field_name": "id",
- "title": "Id",
- "model": "Role"
- },
- {
- "field_name": "key",
- "title": "权限字符",
- "model": "Role"
- },
- {
- "field_name": "modifier",
- "title": "修改人",
- "model": "Role"
},
{
- "field_name": "name",
- "title": "角色名称",
- "model": "Role"
- },
- {
- "field_name": "sort",
- "title": "角色顺序",
- "model": "Role"
- },
- {
- "field_name": "status",
- "title": "角色状态",
- "model": "Role"
- },
- {
- "field_name": "update_datetime",
- "title": "修改时间",
- "model": "Role"
- }
- ]
- },
- {
- "name": "用户管理",
- "icon": "iconfont icon-icon-",
- "sort": 6,
- "is_link": false,
- "is_catalog": false,
- "web_path": "/user",
- "component": "system/user/index",
- "component_name": "user",
- "status": true,
- "cache": false,
- "visible": true,
- "parent": 1,
- "children": [],
- "menu_button": [
- {
- "name": "查询",
- "value": "user:Search",
- "api": "/api/system/user/",
+ "name": "获取所有可授权数据范围的部门",
+ "value": "role:AllDataRangeDept",
+ "api": "/api/system/role_menu_button_permision/role_to_dept_all/",
"method": 0
},
{
- "name": "详情",
- "value": "user:Retrieve",
- "api": "/api/system/user/{id}/",
+ "name": "获取所有可授权菜单",
+ "value": "role:AllCanMenu",
+ "api": "/api/system/role_menu_button_permision/get_role_menu/",
"method": 0
},
{
- "name": "新增",
- "value": "user:Create",
- "api": "/api/system/user/",
- "method": 1
+ "name": "获取所有已授权用户",
+ "value": "role:AllAuthorizedUser",
+ "api": "/api/system/role/get_role_users/",
+ "method": 0
},
{
- "name": "导出",
- "value": "user:Export",
- "api": "/api/system/user/export/",
- "method": 1
+ "name": "获取菜单所有可授权按钮",
+ "value": "role:AllMenuButton",
+ "api": "/api/system/role_menu_button_permision/get_role_menu_btn_field/",
+ "method": 0
},
{
- "name": "导入",
- "value": "user:Import",
- "api": "/api/system/user/import/",
- "method": 1
+ "name": "授权菜单",
+ "value": "role:SetMenu",
+ "api": "/api/system/role_menu_button_permision/set_role_menu/",
+ "method": 2
},
{
- "name": "编辑",
- "value": "user:Update",
- "api": "/api/system/user/{id}/",
+ "name": "授权菜单按钮",
+ "value": "role:SetMenuButton",
+ "api": "/api/system/role_menu_button_permision/set_role_menu_btn/",
"method": 2
},
{
- "name": "重设密码",
- "value": "user:ResetPassword",
- "api": "/api/system/user/{id}/reset_password/",
+ "name": "授权数据范围",
+ "value": "role:SetDataRange",
+ "api": "/api/system/role_menu_button_permision/set_role_menu_btn_data_range/",
"method": 2
},
{
- "name": "重置密码",
- "value": "user:DefaultPassword",
- "api": "/api/system/user/{id}/reset_to_default_password/",
- "method": 2
+ "name": "获取所有用户",
+ "value": "role:AllUser",
+ "api": "/api/system/user/",
+ "method": 0
},
{
- "name": "删除",
- "value": "user:Delete",
- "api": "/api/system/user/{id}/",
- "method": 3
+ "name": "授权用户予角色",
+ "value": "role:SetUserRole",
+ "api": "/api/system/role/{id}/set_role_users/",
+ "method": 2
}
],
"menu_field": [
- {
- "field_name": "avatar",
- "title": "头像",
- "model": "Users"
- },
{
"field_name": "create_datetime",
"title": "创建时间",
- "model": "Users"
+ "model": "Role"
},
{
"field_name": "creator",
"title": "创建人",
- "model": "Users"
- },
- {
- "field_name": "dept",
- "title": "所属部门",
- "model": "Users"
+ "model": "Role"
},
{
"field_name": "dept_belong_id",
"title": "数据归属部门",
- "model": "Users"
+ "model": "Role"
},
{
"field_name": "description",
"title": "描述",
- "model": "Users"
- },
- {
- "field_name": "email",
- "title": "邮箱",
- "model": "Users"
- },
- {
- "field_name": "gender",
- "title": "性别",
- "model": "Users"
+ "model": "Role"
},
{
"field_name": "id",
"title": "Id",
- "model": "Users"
+ "model": "Role"
},
{
- "field_name": "mobile",
- "title": "电话",
- "model": "Users"
+ "field_name": "key",
+ "title": "权限字符",
+ "model": "Role"
},
{
"field_name": "modifier",
"title": "修改人",
- "model": "Users"
+ "model": "Role"
},
{
"field_name": "name",
- "title": "姓名",
- "model": "Users"
+ "title": "角色名称",
+ "model": "Role"
},
{
- "field_name": "update_datetime",
- "title": "修改时间",
- "model": "Users"
+ "field_name": "sort",
+ "title": "角色顺序",
+ "model": "Role"
},
{
- "field_name": "username",
- "title": "用户账号",
- "model": "Users"
+ "field_name": "status",
+ "title": "角色状态",
+ "model": "Role"
},
{
- "field_name": "user_type",
- "title": "用户类型",
- "model": "Users"
+ "field_name": "update_datetime",
+ "title": "修改时间",
+ "model": "Role"
}
]
},
@@ -690,35 +733,11 @@
"menu_button": [
{
"name": "查询",
- "value": "Search",
- "api": "/api/system/downloadCenter/",
- "method": 0
- },
- {
- "name": "详情",
- "value": "Retrieve",
- "api": "/api/system/downloadCenter/{id}/",
- "method": 0
- },
- {
- "name": "新增",
- "value": "Create",
- "api": "/api/system/downloadCenter/",
- "method": 1
- },
- {
- "name": "编辑",
- "value": "Update",
- "api": "/api/system/downloadCenter/{id}/",
- "method": 2
- },
- {
- "name": "删除",
- "value": "Delete",
- "api": "/api/system/downloadCenter/{id}/",
- "method": 3
+ "value": "downloadCenter:Search",
+ "api": "/api/system/download_center/"
}
- ]
+ ],
+ "menu_field": []
}
],
"menu_button": [],
diff --git a/backend/dvadmin/system/models.py b/backend/dvadmin/system/models.py
index b6fe27980ea63fdf6ddf8b179ba03313e5a2138b..7a71c67ed8d2b7e9c651731d71777b26b6107869 100644
--- a/backend/dvadmin/system/models.py
+++ b/backend/dvadmin/system/models.py
@@ -63,6 +63,8 @@ class Users(CoreModel, AbstractUser):
help_text="关联岗位")
role = models.ManyToManyField(to="Role", blank=True, verbose_name="关联角色", db_constraint=False,
help_text="关联角色")
+ current_role = models.ForeignKey(to=Role, null=True, blank=True, db_constraint=False, on_delete=models.SET_NULL,
+ verbose_name="当前登录角色", help_text="当前登录角色", related_name='current_role_set')
dept = models.ForeignKey(
to="Dept",
verbose_name="所属部门",
@@ -72,6 +74,14 @@ class Users(CoreModel, AbstractUser):
blank=True,
help_text="关联部门",
)
+ manage_dept = models.ManyToManyField(
+ to="Dept",
+ verbose_name="管理部门",
+ db_constraint=False,
+ blank=True,
+ help_text="管理部门",
+ related_name='manage_dept_set'
+ )
login_error_count = models.IntegerField(default=0, verbose_name="登录错误次数", help_text="登录错误次数")
pwd_change_count = models.IntegerField(default=0,blank=True, verbose_name="密码修改次数", help_text="密码修改次数")
objects = CustomUserManager()
diff --git a/backend/dvadmin/system/views/user.py b/backend/dvadmin/system/views/user.py
index c31540c22c98a1497a7c684b2608e33a1945f6cf..4e09f90da9c46067c348ffacef3641506f3ec9e0 100644
--- a/backend/dvadmin/system/views/user.py
+++ b/backend/dvadmin/system/views/user.py
@@ -90,6 +90,8 @@ class UserCreateSerializer(CustomModelSerializer):
data = super().save(**kwargs)
data.dept_belong_id = data.dept_id
data.save()
+ if not self.validated_data.get('manage_dept', None):
+ data.manage_dept.add(data.dept_id)
data.post.set(self.initial_data.get("post", []))
return data
@@ -127,6 +129,8 @@ class UserUpdateSerializer(CustomModelSerializer):
data = super().save(**kwargs)
data.dept_belong_id = data.dept_id
data.save()
+ if not self.validated_data.get('manage_dept', None):
+ data.manage_dept.add(data.dept_id)
data.post.set(self.initial_data.get("post", []))
return data
@@ -426,12 +430,9 @@ class UserViewSet(CustomModelViewSet):
queryset = self.filter_queryset(self.get_queryset())
else:
queryset = self.filter_queryset(self.get_queryset())
- # print(queryset.values('id','name','dept__id'))
page = self.paginate_queryset(queryset)
if page is not None:
serializer = self.get_serializer(page, many=True, request=request)
- # print(serializer.data)
return self.get_paginated_response(serializer.data)
serializer = self.get_serializer(queryset, many=True, request=request)
-
return SuccessResponse(data=serializer.data, msg="获取成功")
diff --git a/backend/dvadmin/utils/filters.py b/backend/dvadmin/utils/filters.py
index f61fc62ed214d878693ee6f936b07209e331b101..f62de0c211fd0d583c3da8864d5b541676ced328 100644
--- a/backend/dvadmin/utils/filters.py
+++ b/backend/dvadmin/utils/filters.py
@@ -15,15 +15,16 @@ import six
from django.db import models
from django.db.models import Q, F
from django.db.models.constants import LOOKUP_SEP
-from django_filters import utils, FilterSet
from django_filters.constants import ALL_FIELDS
-from django_filters.filters import CharFilter, DateTimeFromToRangeFilter
from django_filters.rest_framework import DjangoFilterBackend
-from django_filters.utils import get_model_field
+from django_filters.utils import get_model_field, translate_validation, deprecate
+from rest_framework.request import Request
from rest_framework.filters import BaseFilterBackend
from django_filters.conf import settings
-from dvadmin.system.models import Dept, ApiWhiteList, RoleMenuButtonPermission, MenuButton
-from dvadmin.utils.models import CoreModel
+
+from dvadmin.system.models import Dept, ApiWhiteList, RoleMenuButtonPermission, MenuButton, Users
+from util.currency import recursion_down_fast
+
class CoreModelFilterBankend(BaseFilterBackend):
"""
@@ -200,6 +201,34 @@ class DataLevelPermissionsFilter(BaseFilterBackend):
return queryset.filter(dept_belong_id__in=list(set(dept_list)))
+class DataLevelPermissionsSubFilter(DataLevelPermissionsFilter):
+ """数据级权限过滤的子过滤器,过滤管理部门字段manage_dept"""
+
+ def _extracted_from_filter_queryset_33(self, request:Request, queryset, api, method):
+ u:Users = request.user
+ if u.is_superuser:
+ return queryset
+ dept_list = []
+ # 自己部门 交 管理部门
+ if u.manage_dept.exists(): # 兼容旧数据
+ for dept in u.manage_dept.all():
+ dept_list.extend(recursion_down_fast(dept, 'parent', 'id'))
+ else:
+ dept_list = recursion_down_fast(u.dept, 'parent', 'id')
+ dept_list = set(recursion_down_fast(u.dept)) & set(dept_list)
+ # 自己创建的数据要能看到
+ # 应对归属a管b、c等情况,如果自己创建数据则是a,不显式指定自己的数据就查不到
+ if queryset.model._meta.model_name == 'dept':
+ return queryset.filter(Q(id__in=dept_list) | Q(creator=u))
+ return queryset.filter(Q(dept_belong_id__in=dept_list) | Q(creator=u))
+
+
+class DataLevelPermissionMargeFilter(DataLevelPermissionsFilter):
+ def _extracted_from_filter_queryset_33(self, request, queryset, api, method):
+ queryset = super()._extracted_from_filter_queryset_33(request, queryset, api, method)
+ return DataLevelPermissionsSubFilter._extracted_from_filter_queryset_33(self, request, queryset, api, method)
+
+
class CustomDjangoFilterBackend(DjangoFilterBackend):
lookup_prefixes = {
"^": "istartswith",
@@ -240,14 +269,14 @@ class CustomDjangoFilterBackend(DjangoFilterBackend):
# TODO: remove assertion in 2.1
if filterset_class is None and hasattr(view, "filter_class"):
- utils.deprecate(
+ deprecate(
"`%s.filter_class` attribute should be renamed `filterset_class`." % view.__class__.__name__
)
filterset_class = getattr(view, "filter_class", None)
# TODO: remove assertion in 2.1
if filterset_fields is None and hasattr(view, "filter_fields"):
- utils.deprecate(
+ deprecate(
"`%s.filter_fields` attribute should be renamed `filterset_fields`." % view.__class__.__name__
)
self.filter_fields = getattr(view, "filter_fields", None)
@@ -427,5 +456,5 @@ class CustomDjangoFilterBackend(DjangoFilterBackend):
return queryset
if not filterset.is_valid() and self.raise_exception:
- raise utils.translate_validation(filterset.errors)
+ raise translate_validation(filterset.errors)
return filterset.qs
diff --git a/backend/dvadmin/utils/viewset.py b/backend/dvadmin/utils/viewset.py
index 42948b1afb7a80fbe6fd1e8175a6345157365598..43160e696c7d36ac9f629e985a5fe19d3402a63b 100644
--- a/backend/dvadmin/utils/viewset.py
+++ b/backend/dvadmin/utils/viewset.py
@@ -16,7 +16,7 @@ from drf_yasg.utils import swagger_auto_schema
from rest_framework.decorators import action
from rest_framework.viewsets import ModelViewSet
-from dvadmin.utils.filters import DataLevelPermissionsFilter, CoreModelFilterBankend
+from dvadmin.utils.filters import CoreModelFilterBankend, DataLevelPermissionMargeFilter
from dvadmin.utils.import_export_mixin import ExportSerializerMixin, ImportSerializerMixin
from dvadmin.utils.json_response import SuccessResponse, ErrorResponse, DetailResponse
from dvadmin.utils.permission import CustomPermission
@@ -41,7 +41,7 @@ class CustomModelViewSet(ModelViewSet, ImportSerializerMixin, ExportSerializerMi
update_serializer_class = None
filter_fields = '__all__'
search_fields = ()
- extra_filter_class = [CoreModelFilterBankend,DataLevelPermissionsFilter]
+ extra_filter_class = [CoreModelFilterBankend,DataLevelPermissionMargeFilter]
permission_classes = [CustomPermission]
import_field_dict = {}
export_field_label = {}
@@ -152,3 +152,13 @@ class CustomModelViewSet(ModelViewSet, ImportSerializerMixin, ExportSerializerMi
return SuccessResponse(data=[], msg="删除成功")
else:
return ErrorResponse(msg="未获取到keys字段")
+
+ @action(methods=['post'], detail=False)
+ def get_by_ids(self, request):
+ """通过IDS列表获取数据"""
+ ids = request.data.get('ids', [])
+ if ids and ids != ['']:
+ queryset = self.get_queryset().filter(id__in=ids)
+ serializer = self.get_serializer(queryset, many=True)
+ return DetailResponse(data=serializer.data)
+ return DetailResponse(data=None)
diff --git a/backend/templates/terms_service.html b/backend/templates/terms_service.html
index cef7e386f498364ef67303a1b64ac2803b4c4b5a..566cd8663a1fe3c9e419c30040e2102146cd6448 100644
--- a/backend/templates/terms_service.html
+++ b/backend/templates/terms_service.html
@@ -82,7 +82,7 @@
- {{ item }} - | -||
---|---|---|
- item.disabled ? null : onCalenderCellClick(e)">
-
+
- {{ item.date.getDate() }}
-
-
-
-
-
-
-
-
+
+
+
- {{ (currentCalendarDate.toLocaleDateString('en-CA').split('-').slice(0, 2)).join('-') }}
-
+
+ |
+