|
@@ -20,6 +20,7 @@ import oss2
|
|
import simplejson
|
|
import simplejson
|
|
import simplejson as json
|
|
import simplejson as json
|
|
import requests
|
|
import requests
|
|
|
|
+import xlwt
|
|
from django.contrib.auth.hashers import make_password, check_password # 对密码加密模块
|
|
from django.contrib.auth.hashers import make_password, check_password # 对密码加密模块
|
|
from django.db import transaction
|
|
from django.db import transaction
|
|
from django.db.models import Q
|
|
from django.db.models import Q
|
|
@@ -64,12 +65,10 @@ class LoginView(TemplateView):
|
|
request.encoding = 'utf-8'
|
|
request.encoding = 'utf-8'
|
|
request_dict = request.POST
|
|
request_dict = request.POST
|
|
language = request_dict.get('language', 'en')
|
|
language = request_dict.get('language', 'en')
|
|
- response = ResponseObject(language,'pc')
|
|
|
|
|
|
+ response = ResponseObject(language, 'pc')
|
|
|
|
|
|
return self.validates(request_dict, response)
|
|
return self.validates(request_dict, response)
|
|
|
|
|
|
-
|
|
|
|
-
|
|
|
|
def validates(self, request_dict, response):
|
|
def validates(self, request_dict, response):
|
|
username = request_dict.get('username', None)
|
|
username = request_dict.get('username', None)
|
|
password = request_dict.get('password', None)
|
|
password = request_dict.get('password', None)
|
|
@@ -136,8 +135,6 @@ class LoginView(TemplateView):
|
|
return response.json(tko.code)
|
|
return response.json(tko.code)
|
|
|
|
|
|
|
|
|
|
-
|
|
|
|
-
|
|
|
|
# 获取登录权限
|
|
# 获取登录权限
|
|
class GetPermissions(TemplateView):
|
|
class GetPermissions(TemplateView):
|
|
@method_decorator(csrf_exempt) # @csrf_exempt
|
|
@method_decorator(csrf_exempt) # @csrf_exempt
|
|
@@ -150,23 +147,19 @@ class GetPermissions(TemplateView):
|
|
request_dict = request.GET
|
|
request_dict = request.GET
|
|
language = request_dict.get('language', 'en')
|
|
language = request_dict.get('language', 'en')
|
|
response = ResponseObject(language, 'pc')
|
|
response = ResponseObject(language, 'pc')
|
|
- return self.validates(request_dict,token, response)
|
|
|
|
|
|
+ return self.validates(request_dict, token, response)
|
|
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- def validates(self, request_dict,token, response):
|
|
|
|
- tko = TokenObject(token,returntpye='pc')
|
|
|
|
|
|
+ def validates(self, request_dict, token, response):
|
|
|
|
+ tko = TokenObject(token, returntpye='pc')
|
|
response.lang = tko.lang
|
|
response.lang = tko.lang
|
|
if tko.code != 0:
|
|
if tko.code != 0:
|
|
return response.json(tko.code)
|
|
return response.json(tko.code)
|
|
userID = tko.userID
|
|
userID = tko.userID
|
|
|
|
|
|
-
|
|
|
|
user_qs = Device_User.objects.filter(userID=userID)
|
|
user_qs = Device_User.objects.filter(userID=userID)
|
|
if not user_qs.exists():
|
|
if not user_qs.exists():
|
|
return response.json(104)
|
|
return response.json(104)
|
|
- #待补充逻辑
|
|
|
|
|
|
+ # 待补充逻辑
|
|
username = user_qs[0].username
|
|
username = user_qs[0].username
|
|
userIconPath = user_qs[0].userIconPath.url
|
|
userIconPath = user_qs[0].userIconPath.url
|
|
if userIconPath:
|
|
if userIconPath:
|
|
@@ -175,20 +168,20 @@ class GetPermissions(TemplateView):
|
|
userIconUrl = SERVER_DOMAIN + 'account/getAvatar/' + userIconPath
|
|
userIconUrl = SERVER_DOMAIN + 'account/getAvatar/' + userIconPath
|
|
|
|
|
|
role_qs = Role.objects.filter(device_user=userID)
|
|
role_qs = Role.objects.filter(device_user=userID)
|
|
- menu_qs = MenuModel.objects.filter(role__in=role_qs,menutype=2);
|
|
|
|
|
|
+ menu_qs = MenuModel.objects.filter(role__in=role_qs, menutype=2);
|
|
perms = []
|
|
perms = []
|
|
for menu in menu_qs:
|
|
for menu in menu_qs:
|
|
perms.append(menu.menu_code)
|
|
perms.append(menu.menu_code)
|
|
- res={
|
|
|
|
- "code": 200,
|
|
|
|
- "msg": "success",
|
|
|
|
- "data": {
|
|
|
|
- "roles": ["admin"], # 一个用户可包含多个角色如["admin","editor","XXXX"],必须返回,如小项目用不到角色权限请返回 ["admin"]
|
|
|
|
- "ability": ["READ", "WRITE", "DELETE"], # 如果用不到rabc精细化权限可以不返回,建议返回
|
|
|
|
- "username": username, # 用户名,必须返回
|
|
|
|
- "avatar": userIconUrl,# 头像,必须返回
|
|
|
|
- "perms": perms
|
|
|
|
- }
|
|
|
|
|
|
+ res = {
|
|
|
|
+ "code": 200,
|
|
|
|
+ "msg": "success",
|
|
|
|
+ "data": {
|
|
|
|
+ "roles": ["admin"], # 一个用户可包含多个角色如["admin","editor","XXXX"],必须返回,如小项目用不到角色权限请返回 ["admin"]
|
|
|
|
+ "ability": ["READ", "WRITE", "DELETE"], # 如果用不到rabc精细化权限可以不返回,建议返回
|
|
|
|
+ "username": username, # 用户名,必须返回
|
|
|
|
+ "avatar": userIconUrl, # 头像,必须返回
|
|
|
|
+ "perms": perms
|
|
|
|
+ }
|
|
}
|
|
}
|
|
return response.json(0, res)
|
|
return response.json(0, res)
|
|
|
|
|
|
@@ -205,46 +198,45 @@ class GetList(TemplateView):
|
|
request_dict = request.GET
|
|
request_dict = request.GET
|
|
language = request_dict.get('language', 'en')
|
|
language = request_dict.get('language', 'en')
|
|
response = ResponseObject(language, 'pc')
|
|
response = ResponseObject(language, 'pc')
|
|
- return self.validates(request_dict,token, response)
|
|
|
|
|
|
+ return self.validates(request_dict, token, response)
|
|
|
|
|
|
-
|
|
|
|
- def validates(self, request_dict,token, response):
|
|
|
|
- tko = TokenObject(token,returntpye='pc')
|
|
|
|
|
|
+ def validates(self, request_dict, token, response):
|
|
|
|
+ tko = TokenObject(token, returntpye='pc')
|
|
response.lang = tko.lang
|
|
response.lang = tko.lang
|
|
if tko.code != 0:
|
|
if tko.code != 0:
|
|
return response.json(tko.code)
|
|
return response.json(tko.code)
|
|
userID = tko.userID
|
|
userID = tko.userID
|
|
|
|
|
|
- role_qs =Role.objects.filter(device_user=userID)
|
|
|
|
- menu_qs = MenuModel.objects.filter(parentId=0,role__in=role_qs,menutype=1);
|
|
|
|
|
|
+ role_qs = Role.objects.filter(device_user=userID)
|
|
|
|
+ menu_qs = MenuModel.objects.filter(parentId=0, role__in=role_qs, menutype=1);
|
|
list = []
|
|
list = []
|
|
|
|
|
|
for menu in menu_qs:
|
|
for menu in menu_qs:
|
|
list.append(
|
|
list.append(
|
|
{
|
|
{
|
|
- 'id': menu.id,
|
|
|
|
- 'parentId': menu.parentId,
|
|
|
|
- 'path': menu.path,
|
|
|
|
- 'name': menu.name,
|
|
|
|
- 'component': menu.component,
|
|
|
|
- 'meta': {
|
|
|
|
|
|
+ 'id': menu.id,
|
|
|
|
+ 'parentId': menu.parentId,
|
|
|
|
+ 'path': menu.path,
|
|
|
|
+ 'name': menu.name,
|
|
|
|
+ 'component': menu.component,
|
|
|
|
+ 'meta': {
|
|
'hidden': menu.hidden,
|
|
'hidden': menu.hidden,
|
|
'levelHidden': menu.levelHidden,
|
|
'levelHidden': menu.levelHidden,
|
|
'title': menu.title,
|
|
'title': menu.title,
|
|
'icon': menu.icon,
|
|
'icon': menu.icon,
|
|
- 'isCustomSvg':menu.isCustomSvg,
|
|
|
|
|
|
+ 'isCustomSvg': menu.isCustomSvg,
|
|
'noKeepAlive': menu.noKeepAlive,
|
|
'noKeepAlive': menu.noKeepAlive,
|
|
- 'noClosable':menu.noClosable,
|
|
|
|
|
|
+ 'noClosable': menu.noClosable,
|
|
'badge': menu.badge,
|
|
'badge': menu.badge,
|
|
'tabHidden': menu.tabHidden,
|
|
'tabHidden': menu.tabHidden,
|
|
'activeMenu': menu.activeMenu,
|
|
'activeMenu': menu.activeMenu,
|
|
- 'dot':menu.dot,
|
|
|
|
|
|
+ 'dot': menu.dot,
|
|
'dynamicNewTab': menu.dynamicNewTab,
|
|
'dynamicNewTab': menu.dynamicNewTab,
|
|
'sort': menu.sort
|
|
'sort': menu.sort
|
|
}
|
|
}
|
|
}
|
|
}
|
|
)
|
|
)
|
|
- menu_qs = MenuModel.objects.filter(role__in=role_qs,menutype=1)
|
|
|
|
|
|
+ menu_qs = MenuModel.objects.filter(role__in=role_qs, menutype=1)
|
|
menulist = []
|
|
menulist = []
|
|
for objlist in list:
|
|
for objlist in list:
|
|
menulist.append(self.menulist(menu_qs, objlist))
|
|
menulist.append(self.menulist(menu_qs, objlist))
|
|
@@ -290,7 +282,6 @@ class GetList(TemplateView):
|
|
return objlist
|
|
return objlist
|
|
|
|
|
|
|
|
|
|
-
|
|
|
|
class UserManagement(View):
|
|
class UserManagement(View):
|
|
def get(self, request, *args, **kwargs):
|
|
def get(self, request, *args, **kwargs):
|
|
request.encoding = 'utf-8'
|
|
request.encoding = 'utf-8'
|
|
@@ -333,12 +324,16 @@ class UserManagement(View):
|
|
return self.deleteFeedBack(request_dict, response)
|
|
return self.deleteFeedBack(request_dict, response)
|
|
elif operation == 'getSysMessageList':
|
|
elif operation == 'getSysMessageList':
|
|
return self.getSysMessageList(request_dict, response)
|
|
return self.getSysMessageList(request_dict, response)
|
|
|
|
+ elif operation == 'collectFeedBack':
|
|
|
|
+ return self.collectFeedBack(request_dict, response)
|
|
|
|
+ elif operation == 'exportFeedBack':
|
|
|
|
+ return self.exportFeedBack(request_dict, response)
|
|
else:
|
|
else:
|
|
return response.json(404)
|
|
return response.json(404)
|
|
|
|
|
|
def getUserInfo(self, userID, request_dict, response):
|
|
def getUserInfo(self, userID, request_dict, response):
|
|
print('request_dict: ', request_dict)
|
|
print('request_dict: ', request_dict)
|
|
- username = request_dict.get('username', '').strip() # 移除字符串头尾的空格
|
|
|
|
|
|
+ username = request_dict.get('username', '').strip() # 移除字符串头尾的空格
|
|
NickName = request_dict.get('NickName', '').strip()
|
|
NickName = request_dict.get('NickName', '').strip()
|
|
phone = request_dict.get('phone', '').strip()
|
|
phone = request_dict.get('phone', '').strip()
|
|
userEmail = request_dict.get('userEmail', '').strip()
|
|
userEmail = request_dict.get('userEmail', '').strip()
|
|
@@ -372,7 +367,7 @@ class UserManagement(View):
|
|
user_list = []
|
|
user_list = []
|
|
for device_user in device_users:
|
|
for device_user in device_users:
|
|
role = device_user.role.first()
|
|
role = device_user.role.first()
|
|
- rid = role.rid if role else 1 # 不存在角色默认分配为'Users'
|
|
|
|
|
|
+ rid = role.rid if role else 1 # 不存在角色默认分配为'Users'
|
|
user_ex_qs = UserExModel.objects.filter(userID_id=device_user.userID).values('appBundleId')
|
|
user_ex_qs = UserExModel.objects.filter(userID_id=device_user.userID).values('appBundleId')
|
|
app_bundle_id = user_ex_qs[0]['appBundleId'] if user_ex_qs.exists() else ''
|
|
app_bundle_id = user_ex_qs[0]['appBundleId'] if user_ex_qs.exists() else ''
|
|
user_list.append({
|
|
user_list.append({
|
|
@@ -395,7 +390,7 @@ class UserManagement(View):
|
|
def AddOrEditAccount(self, userID, request_dict, response):
|
|
def AddOrEditAccount(self, userID, request_dict, response):
|
|
# 添加/编辑用户
|
|
# 添加/编辑用户
|
|
print('request_dict: ', request_dict)
|
|
print('request_dict: ', request_dict)
|
|
- username = request_dict.get('username', '').strip() # 移除字符串头尾的空格
|
|
|
|
|
|
+ username = request_dict.get('username', '').strip() # 移除字符串头尾的空格
|
|
userEmail = request_dict.get('userEmail', '').strip()
|
|
userEmail = request_dict.get('userEmail', '').strip()
|
|
roleName = request_dict.get('role', None)
|
|
roleName = request_dict.get('role', None)
|
|
password = request_dict.get('password', None)
|
|
password = request_dict.get('password', None)
|
|
@@ -430,11 +425,11 @@ class UserManagement(View):
|
|
device_user_role.clear()
|
|
device_user_role.clear()
|
|
role_qs = Role.objects.filter(roleName=roleName) # 账号角色
|
|
role_qs = Role.objects.filter(roleName=roleName) # 账号角色
|
|
device_user_qs[0].role.set(role_qs)
|
|
device_user_qs[0].role.set(role_qs)
|
|
- else: # 添加用户
|
|
|
|
|
|
+ else: # 添加用户
|
|
# 查询邮箱是否已注册
|
|
# 查询邮箱是否已注册
|
|
if Device_User.objects.filter(userEmail=userEmail).exists():
|
|
if Device_User.objects.filter(userEmail=userEmail).exists():
|
|
return response.json(103)
|
|
return response.json(103)
|
|
- role_qs = Role.objects.filter(roleName=roleName) # 账号角色
|
|
|
|
|
|
+ role_qs = Role.objects.filter(roleName=roleName) # 账号角色
|
|
# 创建用户
|
|
# 创建用户
|
|
user_data = {
|
|
user_data = {
|
|
"username": username,
|
|
"username": username,
|
|
@@ -480,26 +475,27 @@ class UserManagement(View):
|
|
def getFeedbackList(self, request_dict, response):
|
|
def getFeedbackList(self, request_dict, response):
|
|
status = request_dict.get('status', 0)
|
|
status = request_dict.get('status', 0)
|
|
username = request_dict.get('username', None)
|
|
username = request_dict.get('username', None)
|
|
|
|
+ collect_status = request_dict.get('collectStatus', 0)
|
|
pageNo = request_dict.get('pageNo', None)
|
|
pageNo = request_dict.get('pageNo', None)
|
|
pageSize = request_dict.get('pageSize', None)
|
|
pageSize = request_dict.get('pageSize', None)
|
|
-
|
|
|
|
if not all([pageNo, pageSize]):
|
|
if not all([pageNo, pageSize]):
|
|
return response.json(444)
|
|
return response.json(444)
|
|
-
|
|
|
|
page = int(pageNo)
|
|
page = int(pageNo)
|
|
line = int(pageSize)
|
|
line = int(pageSize)
|
|
try:
|
|
try:
|
|
filter_data = {}
|
|
filter_data = {}
|
|
- if status or username:
|
|
|
|
|
|
+ if status or username or collect_status:
|
|
if status:
|
|
if status:
|
|
filter_data['status'] = int(status)
|
|
filter_data['status'] = int(status)
|
|
if username:
|
|
if username:
|
|
filter_data['userID_id'] = ModelService.get_userID_byname(username)
|
|
filter_data['userID_id'] = ModelService.get_userID_byname(username)
|
|
|
|
+ if collect_status:
|
|
|
|
+ filter_data['collect_status'] = int(collect_status)
|
|
feed_back_qs = FeedBackModel.objects.filter()
|
|
feed_back_qs = FeedBackModel.objects.filter()
|
|
if filter_data:
|
|
if filter_data:
|
|
- feed_back_qs = feed_back_qs.filter(**filter_data)
|
|
|
|
|
|
+ feed_back_qs = feed_back_qs.filter(**filter_data).values()
|
|
total = feed_back_qs.count()
|
|
total = feed_back_qs.count()
|
|
- feed_backs = feed_back_qs[(page - 1) * line:page * line]. values(
|
|
|
|
|
|
+ feed_backs = feed_back_qs.values(
|
|
'id',
|
|
'id',
|
|
'userID__username',
|
|
'userID__username',
|
|
'userID__phone',
|
|
'userID__phone',
|
|
@@ -514,8 +510,10 @@ class UserManagement(View):
|
|
'os_version',
|
|
'os_version',
|
|
'uid',
|
|
'uid',
|
|
'appBundleId',
|
|
'appBundleId',
|
|
- 'score')
|
|
|
|
-
|
|
|
|
|
|
+ 'score',
|
|
|
|
+ 'collect_status'
|
|
|
|
+ )
|
|
|
|
+ feed_backs = feed_backs[(page - 1) * line: page * line]
|
|
feed_back_id_list = [feed_back['id'] for feed_back in feed_backs]
|
|
feed_back_id_list = [feed_back['id'] for feed_back in feed_backs]
|
|
stat_res_qs = StatResModel.objects.filter(
|
|
stat_res_qs = StatResModel.objects.filter(
|
|
feedbackmodel__id__in=feed_back_id_list).values(
|
|
feedbackmodel__id__in=feed_back_id_list).values(
|
|
@@ -555,8 +553,8 @@ class UserManagement(View):
|
|
return response.json(173)
|
|
return response.json(173)
|
|
with transaction.atomic():
|
|
with transaction.atomic():
|
|
SysMsgModel.objects.create(userID_id=feed_back_qs.first().userID_id, msg=msg, uid=uid,
|
|
SysMsgModel.objects.create(userID_id=feed_back_qs.first().userID_id, msg=msg, uid=uid,
|
|
- addTime=nowTime, updTime=nowTime) # 创建系统消息
|
|
|
|
- feed_back_qs.update(status=1) # 更新状态为已回复
|
|
|
|
|
|
+ addTime=nowTime, updTime=nowTime) # 创建系统消息
|
|
|
|
+ feed_back_qs.update(status=1) # 更新状态为已回复
|
|
return response.json(0)
|
|
return response.json(0)
|
|
except Exception as e:
|
|
except Exception as e:
|
|
print(e)
|
|
print(e)
|
|
@@ -661,7 +659,7 @@ class UserManagement(View):
|
|
# 根据UserExModel表的userID群发消息给用户
|
|
# 根据UserExModel表的userID群发消息给用户
|
|
region_list = lang.split(',')
|
|
region_list = lang.split(',')
|
|
appBundleId_list = recever.split(',')
|
|
appBundleId_list = recever.split(',')
|
|
- userID_list = UserExModel.objects.filter(appBundleId__in=appBundleId_list, region__in=region_list)\
|
|
|
|
|
|
+ userID_list = UserExModel.objects.filter(appBundleId__in=appBundleId_list, region__in=region_list) \
|
|
.values_list('userID_id', flat=True)
|
|
.values_list('userID_id', flat=True)
|
|
sys_msg_list = []
|
|
sys_msg_list = []
|
|
for userID in userID_list:
|
|
for userID in userID_list:
|
|
@@ -675,3 +673,74 @@ class UserManagement(View):
|
|
print(e)
|
|
print(e)
|
|
return response.json(500, repr(e))
|
|
return response.json(500, repr(e))
|
|
|
|
|
|
|
|
+ def collectFeedBack(self, request_dict, response):
|
|
|
|
+ """收藏或取消收藏用户反馈信息"""
|
|
|
|
+ feedBackID = request_dict.get('feedBackID', None)
|
|
|
|
+ collect_status = request_dict.get('collectStatus', None)
|
|
|
|
+ if not all([feedBackID, collect_status]):
|
|
|
|
+ return response.json(444)
|
|
|
|
+ feedBackID = int(feedBackID)
|
|
|
|
+ collect_status = int(collect_status)
|
|
|
|
+ feed_back_qs = FeedBackModel.objects.filter(id=feedBackID, collect_status=collect_status)
|
|
|
|
+ if feed_back_qs.exists(): # 判断是否已收藏
|
|
|
|
+ feed_qs = feed_back_qs.first()
|
|
|
|
+ feed_qs.collect_status = 0
|
|
|
|
+ feed_qs.save()
|
|
|
|
+ else:
|
|
|
|
+ FeedBackModel.objects.filter(id=feedBackID).update(collect_status=collect_status)
|
|
|
|
+ return response.json(0)
|
|
|
|
+
|
|
|
|
+ def exportFeedBack(self, request_dict, response):
|
|
|
|
+ status = request_dict.get('status', None)
|
|
|
|
+ collect_status = request_dict.get('collectStatus', None)
|
|
|
|
+ try:
|
|
|
|
+ with transaction.atomic():
|
|
|
|
+ filter_data = {}
|
|
|
|
+ if status or collect_status:
|
|
|
|
+ if status:
|
|
|
|
+ filter_data['status'] = int(status)
|
|
|
|
+ if collect_status:
|
|
|
|
+ filter_data['collect_status'] = int(collect_status)
|
|
|
|
+ feed_back_qs = FeedBackModel.objects.filter()
|
|
|
|
+ if filter_data:
|
|
|
|
+ feed_back_qs = feed_back_qs.filter(**filter_data)
|
|
|
|
+ feed_backs = feed_back_qs.values(
|
|
|
|
+ 'id',
|
|
|
|
+ 'userID__username',
|
|
|
|
+ 'userID__phone',
|
|
|
|
+ 'userID__userEmail',
|
|
|
|
+ 'content',
|
|
|
|
+ 'addTime',
|
|
|
|
+ 'status',
|
|
|
|
+ 'type',
|
|
|
|
+ 'app',
|
|
|
|
+ 'app_version',
|
|
|
|
+ 'phone_model',
|
|
|
|
+ 'os_version',
|
|
|
|
+ 'uid',
|
|
|
|
+ 'appBundleId',
|
|
|
|
+ 'score',
|
|
|
|
+ 'collect_status'
|
|
|
|
+ )
|
|
|
|
+ feed_back_id_list = [feed_back['id'] for feed_back in feed_backs]
|
|
|
|
+ stat_res_qs = StatResModel.objects.filter(
|
|
|
|
+ feedbackmodel__id__in=feed_back_id_list).values(
|
|
|
|
+ 'name', 'feedbackmodel__id')
|
|
|
|
+ auth = oss2.Auth(OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET)
|
|
|
|
+ bucket = oss2.Bucket(
|
|
|
|
+ auth, 'oss-cn-hongkong.aliyuncs.com', 'statres')
|
|
|
|
+ feed_back_list = []
|
|
|
|
+ for feed_back in feed_backs:
|
|
|
|
+ feed_back['img_url'] = []
|
|
|
|
+ for stat_res in stat_res_qs:
|
|
|
|
+ if stat_res['feedbackmodel__id'] == feed_back['id']:
|
|
|
|
+ obj = 'feedback/' + stat_res['name']
|
|
|
|
+ img_url = bucket.sign_url('GET', obj, 3600)
|
|
|
|
+ feed_back['img_url'].append(img_url)
|
|
|
|
+ if not feed_back['userID__username']:
|
|
|
|
+ feed_back['userID__username'] = feed_back['userID__userEmail'] if feed_back[
|
|
|
|
+ 'userID__userEmail'] else feed_back['userID__phone']
|
|
|
|
+ feed_back_list.append(feed_back)
|
|
|
|
+ return response.json(0, {'list': feed_back_list})
|
|
|
|
+ except Exception as e:
|
|
|
|
+ print(e)
|