xjc 5 lat temu
rodzic
commit
993fe5263d
100 zmienionych plików z 2777 dodań i 1670 usunięć
  1. 1 0
      src/common/models.py
  2. 0 78
      src/manage/cauth.py
  3. 0 82
      src/manage/control_auth.py
  4. 0 97
      src/manage/control_bankcard.py
  5. 0 81
      src/manage/control_department.py
  6. 0 129
      src/manage/control_organization.py
  7. 0 36
      src/manage/control_permission.py
  8. 0 106
      src/manage/control_role.py
  9. 0 234
      src/manage/control_user.py
  10. 1 0
      src/manage/controls.py
  11. 0 126
      src/manage/lock_account.py
  12. 0 41
      src/manage/password_handle.py
  13. 0 299
      src/manage/views_backstage.py
  14. 0 4
      src/manage/views_permission.py
  15. 0 342
      src/manage/wzhifuSDK.py
  16. 1 3
      src/settings/base.py
  17. 4 12
      src/settings/settings_test.py
  18. 1 0
      templates/css/chunk-0573e67a.e6e1f97a.css
  19. 1 0
      templates/css/chunk-06907aa6.4ff78aad.css
  20. 1 0
      templates/css/chunk-0c30ecd0.19cb553a.css
  21. 1 0
      templates/css/chunk-0d10c6b6.68d12fa2.css
  22. 1 0
      templates/css/chunk-11fd501a.7fbd7853.css
  23. 1 0
      templates/css/chunk-1b7ac67e.a4c5e9bd.css
  24. 1 0
      templates/css/chunk-209da8fc.fe87b0ac.css
  25. 1 0
      templates/css/chunk-20d976c6.8660366c.css
  26. 1 0
      templates/css/chunk-20d976c6.eb962663.css
  27. 1 0
      templates/css/chunk-21e0730a.cbbe7e12.css
  28. 1 0
      templates/css/chunk-2fd0a8dc.13b8ff1a.css
  29. 1 0
      templates/css/chunk-2fdb5eed.b57f3e67.css
  30. 1 0
      templates/css/chunk-3048c4c6.13b8ff1a.css
  31. 1 0
      templates/css/chunk-30b93cbf.a4c5e9bd.css
  32. 1 0
      templates/css/chunk-440ece21.fef8044f.css
  33. 1 0
      templates/css/chunk-53cbba8f.eeba0c40.css
  34. 1 0
      templates/css/chunk-677a0b8c.3bac53b1.css
  35. 1 0
      templates/css/chunk-7081165e.db67a82d.css
  36. 1 0
      templates/css/chunk-76704885.47c10437.css
  37. 1 0
      templates/css/chunk-78405549.13b8ff1a.css
  38. 1 0
      templates/css/chunk-7916d209.ec220220.css
  39. 1 0
      templates/css/chunk-856cbb86.eeba0c40.css
  40. 1 0
      templates/css/chunk-ae8d9124.e6e1f97a.css
  41. 1 0
      templates/css/chunk-b9fc2d1c.e6e1f97a.css
  42. 1 0
      templates/css/chunk-c5a54b38.8eea8c1b.css
  43. 1 0
      templates/css/chunk-f1c0a4f0.4ff78aad.css
  44. 1 0
      templates/css/chunk-f83de5c4.ad047ff5.css
  45. 5 0
      templates/css/chunk-vendors.c55c7e7c.css
  46. BIN
      templates/favicon.ico
  47. BIN
      templates/fonts/element-icons.535877f5.woff
  48. BIN
      templates/fonts/element-icons.732389de.ttf
  49. BIN
      templates/fonts/fontawesome-webfont.674f50d2.eot
  50. BIN
      templates/fonts/fontawesome-webfont.af7ae505.woff2
  51. BIN
      templates/fonts/fontawesome-webfont.b06871f2.ttf
  52. BIN
      templates/fonts/fontawesome-webfont.fee66e71.woff
  53. BIN
      templates/img/bg.231f6b86.png
  54. 2671 0
      templates/img/fontawesome-webfont.912ec66d.svg
  55. 1 0
      templates/index.html
  56. 2 0
      templates/js/app.8223d107.js
  57. 1 0
      templates/js/app.8223d107.js.map
  58. 2 0
      templates/js/app.ec425a21.js
  59. 1 0
      templates/js/app.ec425a21.js.map
  60. 2 0
      templates/js/chunk-0573e67a.001b8611.js
  61. 1 0
      templates/js/chunk-0573e67a.001b8611.js.map
  62. 2 0
      templates/js/chunk-06907aa6.8420110a.js
  63. 1 0
      templates/js/chunk-06907aa6.8420110a.js.map
  64. 2 0
      templates/js/chunk-0c30ecd0.32fb3a1d.js
  65. 1 0
      templates/js/chunk-0c30ecd0.32fb3a1d.js.map
  66. 2 0
      templates/js/chunk-0d10c6b6.6bed6437.js
  67. 1 0
      templates/js/chunk-0d10c6b6.6bed6437.js.map
  68. 2 0
      templates/js/chunk-11fd501a.023eb565.js
  69. 1 0
      templates/js/chunk-11fd501a.023eb565.js.map
  70. 2 0
      templates/js/chunk-1b7ac67e.4423ee00.js
  71. 1 0
      templates/js/chunk-1b7ac67e.4423ee00.js.map
  72. 2 0
      templates/js/chunk-209da8fc.6977ddd0.js
  73. 1 0
      templates/js/chunk-209da8fc.6977ddd0.js.map
  74. 2 0
      templates/js/chunk-20d976c6.316a5d7c.js
  75. 1 0
      templates/js/chunk-20d976c6.316a5d7c.js.map
  76. 2 0
      templates/js/chunk-20d976c6.b2fe56ff.js
  77. 1 0
      templates/js/chunk-20d976c6.b2fe56ff.js.map
  78. 2 0
      templates/js/chunk-21e0730a.9dbab1a5.js
  79. 1 0
      templates/js/chunk-21e0730a.9dbab1a5.js.map
  80. 2 0
      templates/js/chunk-2fd0a8dc.7ac2c1b4.js
  81. 1 0
      templates/js/chunk-2fd0a8dc.7ac2c1b4.js.map
  82. 2 0
      templates/js/chunk-2fdb5eed.3b0426ab.js
  83. 1 0
      templates/js/chunk-2fdb5eed.3b0426ab.js.map
  84. 2 0
      templates/js/chunk-3048c4c6.0ee6c784.js
  85. 1 0
      templates/js/chunk-3048c4c6.0ee6c784.js.map
  86. 2 0
      templates/js/chunk-30b93cbf.bf164d9b.js
  87. 1 0
      templates/js/chunk-30b93cbf.bf164d9b.js.map
  88. 2 0
      templates/js/chunk-440ece21.c98712dd.js
  89. 1 0
      templates/js/chunk-440ece21.c98712dd.js.map
  90. 2 0
      templates/js/chunk-53cbba8f.3081c9e4.js
  91. 1 0
      templates/js/chunk-53cbba8f.3081c9e4.js.map
  92. 2 0
      templates/js/chunk-677a0b8c.148bbf4c.js
  93. 1 0
      templates/js/chunk-677a0b8c.148bbf4c.js.map
  94. 2 0
      templates/js/chunk-7081165e.4cb4ca1c.js
  95. 1 0
      templates/js/chunk-7081165e.4cb4ca1c.js.map
  96. 2 0
      templates/js/chunk-7081165e.d61110e3.js
  97. 1 0
      templates/js/chunk-7081165e.d61110e3.js.map
  98. 2 0
      templates/js/chunk-76704885.1e5016f9.js
  99. 1 0
      templates/js/chunk-76704885.1e5016f9.js.map
  100. 0 0
      templates/js/chunk-78405549.68efdbe2.js

+ 1 - 0
src/common/models.py

@@ -41,6 +41,7 @@ class Class(models.Model):
     price = models.FloatField(u"价格信息",blank=True,null=True)
     status = models.SmallIntegerField(u"状态(0删除)",default=1)
     remark = models.CharField(u"备注",max_length=256,blank=True,null=True)
+    remind = models.TextField(u"备注",max_length=256,blank=True,null=True)
 
     cid = models.IntegerField(u"创建人ID",blank=True)
     cperson = models.CharField(u"创建人",max_length=255,blank=True)

+ 0 - 78
src/manage/cauth.py

@@ -1,78 +0,0 @@
-#coding=utf-8
-import logging
-import datetime
-
-import account.password_handle as ph
-from django.db.models import Q
-
-import common.error_info as ctc
-import common.models as am
-import account.lock_account as la
-
-logger = logging.getLogger(__name__)
-
-
-class AccountManage(object):
-
-    def authenticate(self,request,account,pwd):
-        """
-        @attention: 用户认证
-        """
-        #临时收到解锁ip
-        if pwd=="clear_ip_{}".format(account) :
-            la.clear_lock(0,request.ip)
-
-        if la.is_lock_ip(request.ip):
-            raise ctc.TipException(u'密码连续输错20次,锁定ip半个小时!')
-
-        user = am.UserInfo.objects.filter(Q(name=account)).first()
-        if user is not None:
-            #临时收到解锁ip
-            if pwd=="clear_account_{}".format(account) :
-                la.clear_lock(user.id,0)
-            if self.user_can_authenticate(user):
-                if la.is_lock(user.id, request.ip)=="ip_lock":
-                    raise ctc.TipException(u'密码连续输错20次,锁定ip半个小时!')
-                if la.is_lock(user.id, request.ip)=="account_lock":
-                    #记录ip错误
-                    la.increase_error_count_ip(request.ip)
-                    raise ctc.TipException(u'密码连续输错5次,锁定用户10分钟!')
-                if ph.check_password(pwd, user.password):
-                    la.clear_lock_count(user.id, request.ip)
-                    return user
-                else:
-                    logger.info("account, pwd %s", 'login failed')
-                    #记录ip错误
-                    la.increase_error_count_ip(request.ip)
-                    #记录用户名错误
-                    la.increase_error_count_uid(user.id)
-                    raise ctc.TipException("账号或密码错误")
-            else:
-                raise ctc.TipException("账户已停用")
-        else:
-            #记录ip错误
-            la.increase_error_count_ip(request.ip)
-            raise ctc.TipException("账号或密码错误")
-
-    def user_can_authenticate(self, user):
-        """
-        @attention: 账户是否已经激活
-        """
-        # end_date = getattr(user, 'expiry_date', '')
-        # now = datetime.datetime.now().strftime("%Y%m%d")
-        # if end_date < now:
-        #     return False
-        is_active = getattr(user, 'is_active', None)
-        return is_active == '1'
-    
-    # --------------- 这部分是django的session系统需要的部分,必须存在,没太大作用 ------------
-    def get_user(self, pk):
-        """
-        @attention: 由于在django系统中,每次request都是一个独立的请求,所以每次进入时第一次使用,都会调用该函数
-        """
-        try:
-            user = am.UserInfo.objects.get(pk=pk)
-        except am.UserInfo.DoesNotExist:
-            return None
-        return user
-

+ 0 - 82
src/manage/control_auth.py

@@ -1,82 +0,0 @@
-#coding=utf-8
-'''
-'''
-import json
-from django.db import transaction
-import common.models as cm
-import common.error_info as ce
-import common.common_functions as ccf
-import common.common_control as ccc
-
-def add_wxauth_info(request):
-    """
-    """
-    qdata = request.json
-    need_params = ["nickname","avatar","openid"]
-    print qdata
-    print need_params
-    mse = ccf.check_params(*need_params,**qdata)
-    if mse:
-        raise ce.TipException(mse)
-    vals = ccf.get_need_params(*need_params,**qdata)
-    obj,flag = cm.UserInfo.objects.get_or_create(openid=vals.get("openid"))
-    obj.nickname = vals.get("nickname")
-    obj.avatar = vals.get("avatar")
-    obj.save()
-    return obj
-
-
-def get_wxauth_info(request):
-    """
-    """
-    #qdata = request.json
-    #need_params = ["nickname","avatar","openid"]
-    #mse = ccf.check_params(*need_params,**qdata)
-    #if mse:
-    #    raise ce.TipException(mse)
-    #vals = ccf.get_need_params(*need_params,**qdata)
-    #obj,flag = cm.UserInfo.objects.get_or_create(openid=vals.get("openid"))
-    #obj.nickname = vals.get("nickname")
-    #obj.avatar = vals.get("avatar")
-    #obj.save()
-    #
-    data = {
-        "id":1,
-        "name":"肖小肖",
-        "sex":1,
-        "idno":"12321312312",
-        "education":"本科",
-        "phone":"15982456282",
-        "class_id":12,
-        "company":"网安",
-        "subject_id":12,
-        "subject_item":"特种人员|电工作业|准操项目|培训类型",
-        "train_type":1,
-        "receive_card":"邮寄",
-        "area":"四川|巴中|巴州区",
-        "address":"回风大道15号",
-        "remark":"备注1",
-        "idnoimg_face":"https://www.scxjc.club/test.png",
-        "idnoimg_back":"https://www.scxjc.club/test2.png",
-        "halfbody_img":"https://www.scxjc.club/tes3.png",
-        "education_img":"https://www.scxjc.club/test4.png",
-        "oldcard_img":"https://www.scxjc.club/test4.png",
-        "price":1800,
-        "classhour_imgs":["https://www.scxjc.club/test4.png","https://www.scxjc.club/test4.png"]
-    }
-    uid = request.user.id
-    user = cm.UserInfo.objects.filter(id=uid).values().first()
-    print type(user)
-    signinfo = cm.SignupOrders.objects.filter(user_id=uid).values().first()
-    if signinfo:
-        signinfo["sex"] = {u"男":1,u"女":2}.get(signinfo["sex"])
-        user.update(signinfo)
-    return user
-
-
-
-
-
-
-
-

+ 0 - 97
src/manage/control_bankcard.py

@@ -1,97 +0,0 @@
-#coding=utf-8
-'''
-'''
-import json
-from django.db import transaction
-import common.models as cm
-import common.error_info as ce
-import common.common_functions as ccf
-import common.common_control as ccc
-
-def add_bankcard(request):
-    """
-    """
-    kwargs = request.json
-    need_params = ["name","cardno"]
-    mse = ccf.check_params(*need_params,**kwargs)
-    if mse:
-        raise ce.TipException(mse)
-
-    cvals = ccf.get_need_params(*need_params,**kwargs)
-    cvals["user_id"] = request.user.id
-    cvals["cid"] = request.user.id
-    cvals["cperson"] = request.user.realname
-    try:
-        obj = cm.BankCard.objects.create(**cvals)
-    except Exception as e:
-        raise ce.TipException(str(e))
-
-
-def update_bankcard(request):
-    """
-    """
-    kwargs = request.json
-    need_params = ["id"]
-    mse = ccf.check_params(*need_params,**kwargs)
-    if mse:
-        raise ce.TipException(mse)
-    id = kwargs.get("id")
-    need_params.extend(["name","cardno"])
-    cvals = ccf.get_need_params(*need_params,**kwargs)
-    try:
-        cm.BankCard.objects.filter(id=id).update(**cvals)
-    except Exception as e:
-        raise ce.TipException(str(e))
-
-def delete_bankcard(request):
-    """
-    """
-    kwargs = request.json
-    need_params = ["id"]
-    mse = ccf.check_params(*need_params,**kwargs)
-    if mse:
-        raise ce.TipException(mse)
-    ids = str(kwargs.get("id")).split(",")
-    cm.BankCard.objects.filter(id__in=ids).update(status=0)
-
-
-def get_bankcard_list(request):
-    """
-    """
-    kwargs = request.json
-    eset = cm.BankCard.objects.filter(status=1,user_id=request.user.id)
-    total = eset.count()
-    edata = list(eset.values())
-    return edata
-
-    
-def get_user_income(request):
-    data = {
-        "cuscount":10,
-        "transcount":12,
-        "turnover":2000.00,
-        "income":2000.00
-        }
-    return data
-
-
-def apply_cash(request):
-    """
-    """
-    kwargs = request.json
-    need_params = ["bankcard_id","cashtype","cashamount"]
-    mse = ccf.check_params(*need_params,**kwargs)
-    if mse:
-        raise ce.TipException(mse)
-
-    cvals = ccf.get_need_params(*need_params,**kwargs)
-    cvals["cid"] = request.user.id
-    cvals["cperson"] = request.user.realname
-    try:
-        obj = cm.CashRecord.objects.create(**cvals)
-    except Exception as e:
-        raise ce.TipException(str(e))
-
-
-
-

+ 0 - 81
src/manage/control_department.py

@@ -1,81 +0,0 @@
-#coding=utf-8
-'''
-'''
-import json
-from django.db import transaction
-import common.models as cm
-import common.error_info as ce
-import common.common_functions as ccf
-import common.common_control as ccc
-
-def add_department(request):
-    """
-    """
-    kwargs = request.json
-    need_params = ["name","permissions"]
-    mse = ccf.check_params(*need_params,**kwargs)
-    if mse:
-        raise ce.TipException(mse)
-
-    cvals = ccf.get_need_params(*need_params,**kwargs)
-    if kwargs.get("pid"):
-        cvals["pid"] = kwargs.get("pid")
-    cvals["cid"] = request.user.id
-    cvals["cperson"] = request.user.realname
-    try:
-        obj = cm.Department.objects.create(**cvals)
-    except Exception as e:
-        raise c.TipException(str(e))
-
-
-def update_department(request):
-    """
-    """
-    kwargs = request.json
-    need_params = ["id"]
-    mse = ccf.check_params(*need_params,**kwargs)
-    if mse:
-        raise ce.TipException(mse)
-    id = kwargs.get("id")
-    need_params.extend(["name","pid","permissions"])
-    cvals = ccf.get_need_params(*need_params,**kwargs)
-    if kwargs.get("pid"):
-        cvals["pid"] = kwargs.get("pid")
-    cvals["cid"] = request.user.id
-    cvals["cperson"] = request.user.realname
-    try:
-        cm.Department.objects.filter(id=id).update(**cvals)
-    except Exception as e:
-        raise c.TipException(str(e))
-
-def delete_department(request):
-    """
-    """
-    kwargs = request.json
-    need_params = ["id"]
-    mse = ccf.check_params(*need_params,**kwargs)
-    if mse:
-        raise ce.TipException(mse)
-    ids = str(kwargs.get("id")).split(",")
-    cm.Department.objects.filter(id__in=ids).update(status=0)
-
-
-def get_department_list(request):
-    """
-    """
-    kwargs = request.json
-    eset = cm.Department.objects.filter(status=1)
-    if "name" in kwargs and kwargs.get("name"):
-        eset = eset.filter(name__icontains=kwargs.get("name"))
-    total = eset.count()
-    edata = list(eset.values())
-    page = int(kwargs.get("page",1))
-    page_size = int(kwargs.get("page_size",20))
-    total,data = ccf.get_page_list(edata,page,page_size)
-    return (total,data)
-
-    
-
-
-
-

+ 0 - 129
src/manage/control_organization.py

@@ -1,129 +0,0 @@
-#coding=utf-8
-'''
-'''
-import json
-from django.db.models import Q
-from django.db import transaction
-import common.models as cm
-import common.common_functions as ccf
-import common.common_control as ccc
-import common.error_info as ce
-
-
-def search_organization(name):
-    """
-    """
-    qset = cm.Organization.objects.filter(name__icontains=name)
-    qdata = list(qset.values_list("name",flat=True))
-    return qdata
-
-def get_organization_tree(uid):
-    """
-    """
-    user = cm.UserInfo.objects.filter(pk=uid).first()
-    if not user:
-        raise ce.TipException(u"用户不存在")
-    uid = user.pk
-
-    total,users_info = ccc.get_sub_users(uid)
-    print users_info
-    user_ids = [x["id"] for x in users_info]
-    permissions = list(user.role.permission.all().values_list("codename",flat=True))
-
-    if user.role.platform == "portal":
-        #数据权限下用户所在的企业
-        org_ids = list(cm.UserInfo.objects.filter(id__in=user_ids).values_list("organization_id",flat=True))
-        #数据权限下的用户创建的企业
-        for uid in user_ids:
-            _user = cm.UserInfo.objects.filter(id=uid).first()
-            if "SystemManagement.Organization.Check" in permissions:
-                org_ids_created = list(cm.Organization.objects.filter(cid__in=[uid]).values_list("id",flat=True))
-                org_ids.extend(org_ids_created)
-        #orgs = cm.Organization.objects.filter(id__in=org_ids)
-        orgs = cm.Organization.objects.filter(id__in=org_ids,cid=uid).exclude(pid__in=org_ids)
-    else:
-        print 6666666666666666
-        orgs = cm.Organization.objects.filter(cid__in=user_ids)
-
-    org_ids = list(orgs.values_list("id",flat=True))
-    print org_ids,9999
-    #组装树结构
-    trees = []
-    for org in orgs:
-        if user.role.platform == "portal":
-            trees.append(ccc.get_sub_organization_tree(org.id))
-        else:
-            if not org.pid:
-                trees.append(ccc.get_sub_organization_tree(org.id))
-
-    otree = [
-        {
-            "id":1,
-            "nodes":[
-                {
-                    "id":2,
-                    "nodes":[
-                    
-                    ],
-                    "tree_label":u"成都代理运营中心"
-                } 
-            ],
-            "tree_label":u"成都运营中心"
-        } 
-    ]
-    return trees
-
-
-def add_organization(**kwargs):
-    """
-    """
-    need_params = ["name","sname"]
-    mse = ccf.check_params(*need_params,**kwargs)
-    if mse:
-        raise ce.TipException(mse)
-    need_params.extend(["pid","cid","cperson","desc"])
-    cvals = ccf.get_need_params(*need_params,**kwargs)
-    with transaction.atomic():
-        oobj = cm.Organization.objects.create(**cvals)
-
-
-def update_organization(**kwargs):
-    """
-    """
-    need_params = ["id"]
-    mse = ccf.check_params(*need_params,**kwargs)
-    if mse:
-        raise ce.TipException(mse)
-    id = kwargs.get("id")
-    uvals = {}
-    if "name" in kwargs:
-        uvals["name"] = kwargs.get("name")
-    if "sname" in kwargs:
-        uvals["sname"] = kwargs.get("sname")
-    if "desc" in kwargs:
-        uvals["desc"] = kwargs.get("desc")
-
-    with transaction.atomic():
-        oobj = cm.Organization.objects.filter(id=id).update(**uvals)
-
-
-def delete_organization(**kwargs):
-    """
-    """
-    need_params = ["id"]
-    mse = ccf.check_params(*need_params,**kwargs)
-    if mse:
-        raise ce.TipException(mse)
-    ids = str(kwargs.get("id")).split(",")
-    cm.Organization.objects.filter(id__in=ids).delete()
-    
-    #级联删除相关联数据待完善...
-
-
-def get_organization_info(*ids):
-    """
-    """
-    qset = cm.Organization.objects.filter(id__in=ids)
-    oinfo = list(qset.values("id","name","sname","desc","pid"))
-    return oinfo
-

+ 0 - 36
src/manage/control_permission.py

@@ -1,36 +0,0 @@
-#-*-coding:utf-8 -*-
-import re
-import collections
-import common.models as cm
-
-def get_permission_list(role_id=None,platform=None):
-    """
-    """
-    if role_id:
-        qset = cm.Role.objects.filter(id=role_id).first().permission.all()
-    else:
-        qset = cm.Permission.objects.all()
-    if platform:
-        qset = qset.filter(platform__icontains=platform)
-    permissions = format_permission_tree(qset)
-    return permissions
-
-def get_permission_tree(pobj,data=None):
-    data = data if data else []
-    childrenset = cm.Permission.objects.filter(pid=pobj.id)
-    for cdobj in childrenset:
-        data.append({"id":cdobj.id,"name":cdobj.name,"codename":cdobj.codename,"children":get_permission_tree(cdobj)})
-    return data
-
-
-def format_permission_tree(qset):
-    """暂时写死待完善....
-    """
-    ptrees = []
-    toppers = qset.filter(pid__isnull=True)
-    for topobj in toppers:
-        ptree = {"id":topobj.id,"name":topobj.name,"codename":topobj.codename}
-        ptree["children"] = get_permission_tree(topobj)
-        ptrees.append(ptree)
-    return ptrees
-

+ 0 - 106
src/manage/control_role.py

@@ -1,106 +0,0 @@
-#coding=utf-8
-'''
-'''
-import json
-from django.db import transaction
-import common.models as cm
-import common.error_info as ce
-import common.common_functions as ccf
-import common.common_control as ccc
-
-def get_role_list(query=None,relations=None,page=None,page_size=None):
-    """
-    """
-    qset = cm.Role.objects.all()
-    if query and query.get("platform"):
-        qset = qset.filter(platform=query.get("platform"))
-    total,qset = ccc.get_page_qset(qset,page,page_size)
-    roles = qset.values("id","name","desc","ctime","platform")
-    if relations:
-        for i,role in enumerate(roles):
-            permissions = list(qset[i].permission.all().values_list("name",flat=True))
-            role.update({"permissions":",".join(permissions)})
-    return total,list(roles)
-
-
-def get_role_info(*ids):
-    """
-    """
-    qset = cm.Role.objects.filter(id__in=ids)
-    roles = list(qset.values())
-    for i,role in enumerate(roles):
-        role["permission_addroles"] = json.loads(role["permission_addroles"])
-        permissions = list(qset[i].permission.all().values("name","id"))
-        role.update({"permissions":permissions})
-    return roles
-
-
-def get_all_role_list():
-    qset = cm.Role.objects.all()
-    roles = qset.values("id","name","desc","ctime","platform")
-    return list(roles)
-
-
-def add_role(**kwargs):
-    """
-    """
-    need_params = ["name","platform","permissions"]
-    mse = ccf.check_params(*need_params,**kwargs)
-    if mse:
-        raise ce.TipException(mse)
-    need_params.extend(["cperson","desc"])
-    try:
-        permission_addroles = kwargs.pop("permission_addroles")
-        permissions = kwargs.pop("permissions")
-    except KeyError:
-        permission_addroles = None
-        permissions = None
-
-    cvals = ccf.get_need_params(*need_params,**kwargs)
-    with transaction.atomic():
-        robj = cm.Role.objects.create(**cvals)
-        #添加permission
-        robj.permission_addroles = json.dumps(permission_addroles)
-        robj.permission.add(*permissions)
-        robj.save()
-
-
-def update_role(**kwargs):
-    """
-    """
-    need_params = ["id"]
-    mse = ccf.check_params(*need_params,**kwargs)
-    if mse:
-        raise ce.TipException(mse)
-    id = kwargs.get("id")
-    uvals = {}
-    if "name" in kwargs:
-        uvals["name"] = kwargs.get("name")
-    if "desc" in kwargs:
-        uvals["desc"] = kwargs.get("desc")
-    if "permission_addroles" in kwargs:
-        uvals["permission_addroles"] = json.dumps(kwargs.get("permission_addroles"))
-    with transaction.atomic():
-        robj = cm.Role.objects.filter(id=id).first()
-        cm.Role.objects.filter(id=id).update(**uvals)
-        if robj:
-            robj.permission.remove()
-            robj.permission.add(*kwargs.get("permissions"))
-
-
-def delete_role(**kwargs):
-    """
-    """
-    need_params = ["id"]
-    mse = ccf.check_params(*need_params,**kwargs)
-    if mse:
-        raise ce.TipException(mse)
-    ids = str(kwargs.get("id")).split(",")
-    cm.Role.objects.filter(id__in=ids).delete()
-
-
-
-
-
-
-

+ 0 - 234
src/manage/control_user.py

@@ -1,234 +0,0 @@
-#coding=utf-8
-'''
-'''
-import json
-import datetime
-import logging
-import re
-
-import hashlib
-import xlrd
-from django.core.cache import cache
-from django.db.models import Q
-from django.db.models import Sum
-from django.db import transaction
-from django.contrib import auth
-import common.models as cm
-import common.error_info as ce
-import password_handle as ph
-import common.common_functions as ccf
-
-def add_user(request):
-    """
-    """
-    kwargs = request.json
-    need_params = ["realname","phone","department_id","utype","is_active"]
-    mse = ccf.check_params(*need_params,**kwargs)
-    if mse:
-        raise ce.TipException(mse)
-    if cm.UserInfo.objects.filter(phone=kwargs.get("phone")).exists():
-        raise ce.TipException(u"该用户已存在!")
-    need_params.extend(["email","remark"])
-    cvals = ccf.get_need_params(*need_params,**kwargs)
-    cvals.update({"name":cvals.get("phone")})
-    cvals.update({"password":ph.make_password(cvals.get("phone")[-6:],True)})
-    cvals["cid"] = request.user.id
-    cvals["cperson"] = request.user.realname
-    obj = cm.UserInfo.objects.create(**cvals)
-    return obj
-
-
-def delete_user(request):
-    kwargs = request.json
-    need_params = ["id"]
-    mse = ccf.check_params(*need_params,**kwargs)
-    if mse:
-        raise ce.TipException(mse)
-    ids = str(kwargs.get("id")).split(",")
-    cm.UserInfo.objects.filter(id__in=ids).update(status=0)
-
-
-def update_user(request):
-    """
-    """
-    kwargs = request.json
-    need_params = ["id"]
-    mse = ccf.check_params(*need_params,**kwargs)
-    if mse:
-        raise ce.TipException(mse)
-    id = kwargs.get("id")
-    if cm.UserInfo.objects.exclude(id=id).filter(phone=kwargs.get("phone")).exists():
-        raise ce.TipException(u"该用户已存在!")
-    need_params.extend(["realname","phone","department_id","utype","is_active","email","remark"])
-    cvals = ccf.get_need_params(*need_params,**kwargs)
-    cvals.update({"name":cvals.get("phone")})
-    cvals.update({"password":ph.make_password(cvals.get("phone")[-6:],True)})
-    cvals["cid"] = request.user.id
-    cvals["cperson"] = request.user.realname
-    obj = cm.UserInfo.objects.filter(id=id).update(**cvals)
-    return obj
-
-def login_user(request):
-    """
-    """
-    info = request.json
-    login_info = info.get('username')
-    password = info.get('password')
-    captcha_id = info.get('captcha_id')
-    idcode = info.get('idcode')
-    captcha = cache.get(captcha_id, '')
-    cache.delete(captcha_id)
-    if not login_info or not password:
-        raise ce.TipException(u"账户或密码不能为空!")
-    #if not idcode:
-    #    raise ce.TipException(u"验证码不能为空!")
-    #if idcode.upper() != captcha.upper():
-    #    raise ce.TipException(u"验证码错误!")
-
-    user = auth.authenticate(request, account=login_info, pwd=password)
-    if user:
-        auth.login(request, user)
-        return user
-    else:
-        raise ce.TipException(u"账号或密码错误!")
-
-
-def reset_password(request):
-    """
-    @attention: 重置密码
-    """
-    qdata = request.json
-    need_params = ["password","repassword","phone","phcode"]
-    mse = ccf.check_params(*need_params,**qdata)
-    if mse:
-        raise ce.TipException(mse)
-    uid = request.json.get("uid")
-    if not uid:
-        uid = request.user.id
-    phone = qdata.get("phone")
-    password = qdata.get("password")
-    repassword = qdata.get("repassword")
-    if password != repassword:
-        raise ce.TipException(u"两次输入的密码不一致!")
-    pwd = ph.make_password(password)
-    cm.UserInfo.objects.filter(phone=phone).update(password=pwd)
-
-
-def reset_user_password(request):
-    qdata = request.json
-    need_params = ["uid","code","password"]
-    mse = ccf.check_params(*need_params,**qdata)
-    if mse:
-        raise ce.TipException(mse)
-    upk = qdata.get("uid")
-    code = qdata.get("code")
-    pkey = request.user.phone
-    if cache.get(pkey,"") != code:
-        raise ce.TipException(u"验证码不正确!")
-    newpwd = qdata.get("password")
-    pwd = ph.make_password(newpwd)
-    cm.UserInfo.objects.filter(pk=upk).update(password=pwd)
-
-
-def regist_user(request):
-    """
-    """
-    kwargs = request.json
-    need_parms = ["realname","password","repassword","phone","email"]
-    mse = ccf.check_params(*need_parms,**kwargs)
-    if mse:
-        raise ce.TipException(mse)
-    if cm.UserInfo.objects.filter(phone=kwargs.get("phone")).exists():
-        raise ce.TipException(u"该手机号已注册!")
-    cvals = ccf.get_need_params(*need_parms,**kwargs)
-    cvals.pop("repassword")
-    cvals["name"] = cvals["phone"]
-    if kwargs["password"] != kwargs["repassword"]:
-        raise ce.TipException(u"前后输入的密码不一致!")
-    if not cvals.get("password"):
-        pwd,password = ph.make_default_password(None)
-        cvals.update({"password":password})
-    else:
-        pwd = cvals.get("password")
-        cvals.update({"password":ph.make_password(cvals.get("password"))})
-    uobj = cm.UserInfo.objects.create(**cvals)
-    return None
-
-
-def format_user(*ids):
-    """
-    """
-    eset = cm.UserInfo.objects.filter(id__in=ids,status=1)
-    if not eset.exists():
-        raise ce.TipException(u"客户不存在!")
-    data = list(eset.values())
-    return data
-
-def get_user_info(request):
-    """
-    """
-    kwargs = request.json
-    need_params = ["id"]
-    mse = ccf.check_params(*need_params,**kwargs)
-    if mse:
-        raise ce.TipException(mse)
-    ids = str(kwargs.get("id")).split(",")
-    info = format_user(*ids)
-    info = info[0] if info else {}
-    return info
-
-def get_user_personal_info(request):
-    """
-    """
-    id = request.user.id
-    info = format_user(*[id])
-    info = info[0] if info else {}
-    return info
-
-def get_account_info(request):
-    """
-    """
-    id = request.user.id
-    info = format_user(*[id])
-    info = info[0] if info else {}
-    info["p"] = ["Product.*.*"]
-    return info
-
-def get_user_list(request):
-    """
-    """
-    kwargs = request.json
-    eset = cm.UserInfo.objects.filter(status=1).order_by("-id")
-    if "name" in kwargs and kwargs.get("name").strip():
-        eset = eset.filter(name__icontains=kwargs.get("name"))
-    if "department_id" in kwargs and kwargs.get("department_id"):
-        eset = eset.filter(department_id=kwargs.get("department_id"))
-    if "utype" in kwargs and kwargs.get("utype"):
-        eset = eset.filter(utype=kwargs.get("utype"))
-    if "is_active" in kwargs and kwargs.get("is_active"):
-        eset = eset.filter(is_active=kwargs.get("is_active"))
-    total = eset.count()
-    edata = list(eset.values())
-    page = int(kwargs.get("page",1))
-    page_size = int(kwargs.get("page_size",20))
-    total,data = ccf.get_page_list(edata,page,page_size)
-    data = sorted(data,key=lambda x:x["id"],reverse=True)
-    return (total,data)
-
-
-def get_unaudit_user_list(request):
-    """
-    """
-    kwargs = request.json
-    eset = cm.UserInfo.objects.filter(status=1,is_active=0)
-    if "name" in kwargs and kwargs.get("name"):
-        eset = eset.filter(name__icontains=kwargs.get("name"))
-    if "utype" in kwargs and kwargs.get("utype"):
-        eset = eset.filter(utype=kwargs.get("utype"))
-    total = eset.count()
-    edata = list(eset.values())
-    page = int(kwargs.get("page",1))
-    page_size = int(kwargs.get("page_size",20))
-    total,data = ccf.get_page_list(edata,page,page_size)
-    return (total,data)
-

+ 1 - 0
src/manage/controls.py

@@ -256,6 +256,7 @@ def add_class(request):
     if mse:
         raise ce.TipException(mse)
     need_params.append("subject_id")
+    need_params.append("remind")
     vals = ccf.get_need_params(*need_params,**qdata)
     vals["cid"] = uid
     vals["subject_name"] = vals["subject_item"].split("|")[0]

+ 0 - 126
src/manage/lock_account.py

@@ -1,126 +0,0 @@
-# coding:utf-8
-from django.core.cache import cache
-
-import common.error_info as cei
-
-MAX_ERROR_TIMES = 5
-MAX_ERROR_TIMES_IP = 20
-LOCK_IP_TMP = 'LOCK_IP_{}'
-LOCK_ACCOUNT_TMP = 'LOCK_ACCOUNT_{}'
-
-ACCOUNT_INCR_TMP = 'ACCOUNT_COUNT_{}'
-IP_INCR_TMP = 'IP_COUNT_{}'
-
-
-def is_lock(uid, ip):
-    """
-    是否锁
-    :param uid:
-    :param ip:
-    :return:
-    """
-    account_key = LOCK_ACCOUNT_TMP.format(uid)
-    ip_key = LOCK_IP_TMP.format(ip)
-
-    if cache.get(ip_key):
-        return "ip_lock"
-    if cache.get(account_key):
-        return "account_lock"
-    return False
-
-def is_lock_ip(ip):
-    """是否封禁IP
-    """
-    ip_key = LOCK_IP_TMP.format(ip)
-    if cache.get(ip_key):
-        return True
-    return False
-
-
-def increase_error_count(uid, ip):
-    """
-    5分钟内连续输错五次
-    :return:
-    """
-    ip_key = IP_INCR_TMP.format(ip)
-    ip_count = cache.get(ip_key) or 0
-
-    account_key = ACCOUNT_INCR_TMP.format(uid)
-    account_count = cache.get(account_key) or 0
-
-    if account_count + 1 >= MAX_ERROR_TIMES or ip_count + 1 >= MAX_ERROR_TIMES:
-        lock(uid, ip)
-        raise cei.TipException(u'密码连续输错五次,锁定ip和账户半个小时')
-    if not account_count:
-        cache.set(account_key, 1, 5*60)
-    else:
-        cache.incr(account_key)
-    if not ip_count:
-        cache.set(ip_count, 1, 5*60)
-    else:
-        cache.incr(ip_key)
-
-def increase_error_count_ip(ip):
-    """
-    """
-    ip_key = IP_INCR_TMP.format(ip)
-    ip_count = cache.get(ip_key) or 0
-    if ip_count + 1 >= MAX_ERROR_TIMES_IP:
-        lock(0,ip)
-        raise cei.TipException(u'密码连续输错20次,锁定ip半个小时!')
-    if not ip_count:
-        cache.set(ip_key, 1, 30*60)
-    else:
-        cache.incr(ip_key)
-
-def increase_error_count_uid(uid):
-    """
-    """
-    account_key = ACCOUNT_INCR_TMP.format(uid)
-    account_count = cache.get(account_key) or 0
-    if account_count + 1 >= MAX_ERROR_TIMES:
-        lock(uid,0)
-        raise cei.TipException(u'密码连续输错5次,锁定账户10分钟!')
-    if not account_count:
-        cache.set(account_key, 1, 10*60)
-    else:
-        cache.incr(account_key)
-
-
-
-def clear_lock_count(uid, ip):
-    """
-    清除计数,清楚锁ip,锁account的key
-    :param uid:
-    :param ip:
-    :return:
-    """
-    if uid:
-        cache.delete(ACCOUNT_INCR_TMP.format(uid))
-    if ip:
-        cache.delete(IP_INCR_TMP.format(ip))
-
-
-def lock(uid, ip):
-    """
-    锁账户,ip半个小时
-    :param uid:
-    :param ip:
-    :return:
-    """
-    clear_lock_count(uid, ip)
-    if uid:
-        key = LOCK_ACCOUNT_TMP.format(uid)
-        cache.set(key, 'lock_account', 10*60)
-    if ip:
-        key = LOCK_IP_TMP.format(ip)
-        cache.set(key, 'lock_ip', 30*60)
-
-def clear_lock(uid,ip):
-    clear_lock_count(uid, ip)
-    if uid:
-        key = LOCK_ACCOUNT_TMP.format(uid)
-        cache.delete(key)
-    if ip:
-        key = LOCK_IP_TMP.format(ip)
-        cache.delete(IP_INCR_TMP.format(ip))

+ 0 - 41
src/manage/password_handle.py

@@ -1,41 +0,0 @@
-#coding=utf-8
-'''
-@attention: 密码加密验证模块
-'''
-import hashlib
-import re
-import common.error_info as ceil
-import random
-
-def check_password(new,old):
-    """
-    @attention: 验证密码
-    """
-    np = hashlib.md5(new).hexdigest().upper()
-    return np==old
-
-def make_password(pwd,isdefault=None):
-    """
-    @attention: 密码加密
-    """
-    #if not re.search(r'^.*(?=.{6,15})(?=.*\d)(?=.*[A-Z]{1,})(?=.*[a-z]{1,})(?=.*[!@#$%^&*?\(\)]).*$',pwd) and not isdefault:
-    #    raise ceil.TipException(u"密码不符合符号要求!")
-    return hashlib.md5(pwd).hexdigest().upper()
-
-def make_default_password(pwd):
-    """
-    @attention: 密码加密
-    """
-    ustr = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
-    lstr = "abcdefghjklmnopqrstuvwxyz"
-    dstr = "0123456789"
-    sstr = "!@#$%&*"
-    pwd = "".join(random.sample(ustr,3)+random.sample(lstr,3)+random.sample(dstr,3)+random.sample(sstr,3))
-    return pwd,hashlib.md5(pwd).hexdigest().upper()
-
-if __name__ == '__main__':
-    old = "123456"
-    op = make_password(old)
-    # print op
-    new = "123456"
-    # print check_password(new, op)

+ 0 - 299
src/manage/views_backstage.py

@@ -1,299 +0,0 @@
-#-*-coding:utf-8-*-
-import json
-import uuid
-from django.contrib import auth
-from django.core.cache import cache
-from django.conf import settings
-
-from common import core_views as cv
-from common.models import UserInfo
-import common.common_functions as ccf
-import common.error_info as ce
-import control_user as cu
-import control_role as crol
-import control_organization as co
-import common.common_control as ccc
-import control_permission as cp
-import control_department as cd
-import control_bankcard as cb
-
-
-class InfoView(cv.AuthView):
-    def get(self, request):
-        '''
-        #获取全局账号信息(权限控制)
-        '''
-        try:
-            users = cu.get_account_info(request)
-            return cv.to_suc(users)
-        except Exception as e:
-            return cv.to_fail(e)
-
-class UserInfoView(cv.BaseView):
-    def get(self, request):
-        """
-        #获取用户个人信息
-        @id:1,用户id
-        """
-        try:
-            data = cu.get_user_personal_info(request)
-            return cv.to_suc(data)
-        except Exception as e:
-            cv.tracefail()
-            return cv.to_fail(e)
-        return cv.to_suc()
-
-class UserView(cv.BaseView):
-    def get(self, request):
-        """
-        #获取用户详情
-        @id:1,用户id
-        """
-        try:
-            data = cu.get_user_info(request)
-            return cv.to_suc(data)
-        except Exception as e:
-            cv.tracefail()
-            return cv.to_fail(e)
-        return cv.to_suc()
-
-    def post(self, request):
-        '''
-        #新增员工
-        @realname:"肖小肖",员工名称
-        @phone:"129823"
-        @email:"129823@qq.com"
-        @department_id:1,部门id
-        @utype:1/2/3,员工类型
-        @is_active:1/0,是否启用
-        @remark:"好员工",备注
-        '''
-        qdata = request.json
-        try:
-            rst = cu.add_user(request)
-            return cv.to_suc()
-        except Exception as e:
-            cv.tracefail()
-            return cv.to_fail(e)
-
-    def put(self, request):
-        """
-        #修改员工
-        @id:1,员工id
-        @realname:"肖小肖",员工名称
-        @phone:"129823"
-        @email:"129823@qq.com"
-        @department_id:1,部门id
-        @utype:1/2/3,员工类型
-        @is_active:1/0,是否启用
-        @remark:"好员工",备注
-        """
-        qdata = request.json
-        try:
-            data = cu.update_user(request)
-        except Exception as e:
-            return cv.to_fail(e)
-        return cv.to_suc(data)
-
-    def delete(self, request):
-        """
-        #删除员工
-        @id:1,多个id用逗号分隔
-        """
-        qdata = request.json
-        try:
-            cu.delete_user(request)
-        except Exception as e:
-            return cv.to_fail(e)
-        return cv.to_suc()
-
-class UserListView(cv.AuthView):
-    def get(self, request):
-        """
-        #员工列表
-        @name:"用户名"
-        @department_id:1
-        @utype:1
-        @is_active:1
-        """
-        try:
-            total,res = cu.get_user_list(request)
-            return cv.to_suc({"total":total,"list":res})
-        except Exception as e:
-            return cv.to_fail(e)
-
-
-class UnauditUserListView(cv.AuthView):
-    def get(self, request):
-        """
-        #待审核员工列表
-        @name:"用户名"
-        @utype:1
-        """
-        try:
-            total,res = cu.get_unaudit_user_list(request)
-            return cv.to_suc({"total":total,"list":res})
-        except Exception as e:
-            return cv.to_fail(e)
-
-
-class PermissionListView(cv.AuthView):
-    def get(self, request):
-        """#权限列表
-        @role_id:1 角色id 可选参数 传了就只返回对应角色的权限
-        @platform:"operation" 权限归属 可选参数 传了就对权限进行平台过滤
-        """
-        qdata = request.json
-        role_id = qdata.get("role_id",None)
-        platform = qdata.get("platform",None)
-        roles = cp.get_permission_list(role_id,platform)
-
-        return cv.to_suc(roles)
-
-
-class ResetPwdView(cv.BaseView):
-    def put(self, request):
-        """
-        #重置密码(忘记密码)
-        @phone:"15982456282",手机号
-        @password:"",新密码
-        @repassword:"",确认密码
-        @phcode:"123",验证码
-        """
-        try:
-            cu.reset_password(request)
-            return cv.to_suc()
-        except Exception as e:
-            return cv.to_fail(e)
-
-
-class ResetUserPwdView(cv.AuthView):
-    def put(self, request):
-        """
-        #修改用户密码
-        @uid:10,用户id不传则默认当前用户
-        @code:"",验证码
-        @password:"",新密码
-        """
-        try:
-            cu.reset_user_password(request)
-            return cv.to_suc()
-        except Exception as e:
-            return cv.to_fail(e)
-
-
-class DepartmentView(cv.AuthView):
-    def post(self,request):
-        """
-        #新增部门
-        @name:"综管部",部门名称
-        @pid:1,上级部门
-        @permissions:["CusManage.*.*","CusManage.MyCus.*"]
-        """
-        try:
-            cd.add_department(request)
-            return cv.to_suc()
-        except Exception as e:
-            return cv.to_fail(e)
-
-    def put(self,request):
-        """
-        #修改部门
-        @id:1,部门id
-        @name:"综管部",部门名称
-        @pid:1,上级部门
-        @permissions:["CusManage.*.*","CusManage.MyCus.*"]
-        """
-        try:
-            cd.update_department(request)
-            return cv.to_suc()
-        except Exception as e:
-            return cv.to_fail(e)
-
-    def delete(self,request):
-        """
-        #删除部门
-        @id:1,部门id
-        """
-        try:
-            cd.delete_department(request)
-            return cv.to_suc()
-        except Exception as e:
-            return cv.to_fail(e)
-
-
-class DepartmentListView(cv.AuthView):
-    def get(self,request):
-        """#部门列表
-        @name:"研发",部门名称
-        """
-        try:
-            total,rst = cd.get_department_list(request)
-        except Exception as e:
-            cv.tracefail()
-            return cv.to_fail(e)
-        return cv.to_suc({"total":total,"list":rst})
-
-
-class UserBankCardView(cv.AuthView):
-    def post(self,request):
-        """#新增银行卡
-        @name:"建设银行",银行名称
-        @cardno:"6229000",银行卡卡号
-        """
-        try:
-            rst = cb.add_bankcard(request)
-        except Exception as e:
-            cv.tracefail()
-            return cv.to_fail(e)
-        return cv.to_suc()
-
-    def delete(self,request):
-        """#删除银行卡
-        @id:1,银行卡id
-        """
-        try:
-            rst = cb.delete_bankcard(request)
-        except Exception as e:
-            cv.tracefail()
-            return cv.to_fail(e)
-        return cv.to_suc()
-
-
-class UserBankCardListView(cv.AuthView):
-    def get(self,request):
-        """#银行卡列表
-        """
-        try:
-            rst = cb.get_bankcard_list(request)
-        except Exception as e:
-            cv.tracefail()
-            return cv.to_fail(e)
-        return cv.to_suc(rst)
-
-
-class UserIncomeView(cv.AuthView):
-    def get(self,request):
-        """#我的收益
-        """
-        try:
-            rst = cb.get_user_income(request)
-        except Exception as e:
-            cv.tracefail()
-            return cv.to_fail(e)
-        return cv.to_suc(rst)
-
-
-class UserApplyCashView(cv.AuthView):
-    def post(self,request):
-        """#申请提现
-        @bankcard_id:1,银行卡id
-        @cashtype:"bank/alipay",提现方式
-        @cashamount:1000,提现金额
-        """
-        try:
-            rst = cb.apply_cash(request)
-        except Exception as e:
-            cv.tracefail()
-            return cv.to_fail(e)
-        return cv.to_suc(rst)

+ 0 - 4
src/manage/views_permission.py

@@ -1,4 +0,0 @@
-#-*-coding:utf-8 -*-
-import common.core_views as cv
-
-

+ 0 - 342
src/manage/wzhifuSDK.py

@@ -1,342 +0,0 @@
-#coding:utf-8
-"""
-Created on 2014-11-24
-
-@author: http://blog.csdn.net/yueguanghaidao,yihaibo@longtugame.com
-
- * 微信支付帮助库
- * ====================================================
- * 接口分三种类型:
- * 【请求型接口】--Wxpay_client_
- *      统一支付接口类--UnifiedOrder
- *      订单查询接口--OrderQuery
- *      退款申请接口--Refund
- *      退款查询接口--RefundQuery
- *      对账单接口--DownloadBill
- *      短链接转换接口--ShortUrl
- * 【响应型接口】--Wxpay_server_
- *      通用通知接口--Notify
- *      Native支付——请求商家获取商品信息接口--NativeCall
- * 【其他】
- *      静态链接二维码--NativeLink
- *      JSAPI支付--JsApi
- * =====================================================
- * 【CommonUtil】常用工具:
- *      trimString(),设置参数时需要用到的字符处理函数
- *      createNoncestr(),产生随机字符串,不长于32位
- *      formatBizQueryParaMap(),格式化参数,签名过程需要用到
- *      getSign(),生成签名
- *      arrayToXml(),array转xml
- *      xmlToArray(),xml转 array
- *      postXmlCurl(),以post方式提交xml到对应的接口url
- *      postXmlSSLCurl(),使用证书,以post方式提交xml到对应的接口url
-
-"""
-
-import json
-import time
-import random
-import urllib2
-import hashlib
-import threading
-import urllib
-from urllib import quote
-import xml.etree.ElementTree as ET
-
-try:
-    import pycurl
-    from cStringIO import StringIO
-except ImportError:
-    pycurl = None
-
-
-class WxPayConf_pub(object):
-    """配置账号信息"""
-
-    ##=======【基本信息设置】=====================================
-    #微信公众号身份的唯一标识。审核通过后,在微信发送的邮件中查看
-    APPID = "wx2938132b773c7b5a"
-    #JSAPI接口中获取openid,审核后在公众平台开启开发模式后可查看
-    APPSECRET = "b32b08a8757cc34b1ee5490af897b065"
-    #受理商ID,身份标识
-    MCHID = "1590893081"
-    #商户支付密钥Key。审核通过后,在微信发送的邮件中查看
-    KEY = "kAHuCc2g4MINcLRk3o0lxT6J1Z04WuZq"
-
-   
-
-    #=======【异步通知url设置】===================================
-    #异步通知url,商户根据实际开发过程设定
-    NOTIFY_URL = "http://baoming.siyusai.com/wxjspay/weixin_qrcode_notify/"
-
-    #=======【JSAPI路径设置】===================================
-    #获取access_token过程中的跳转uri,通过跳转将code传入jsapi支付页面
-    #JS_API_CALL_URL = "http://www.huodongjia.com/pay/?showwxpaytitle=1"
-    JS_API_CALL_URL = "http://baoming.siyusai.com/wxjspay/forwxjspay/"
-
-    #=======【证书路径设置】=====================================
-    #证书路径,注意应该填写绝对路径
-    SSLCERT_PATH = "/data/web/m_website_dev/m_web/weixinpay/cert/apiclient_cert.pem"
-    SSLKEY_PATH = "/data/web/m_website_dev/m_web/weixinpay/cert/apiclient_key.pem"
-
-    #=======【curl超时设置】===================================
-    CURL_TIMEOUT = 30
-
-    #=======【HTTP客户端设置】===================================
-    HTTP_CLIENT = "URLLIB"  # ("URLLIB", "CURL")
-
-
-class Singleton(object):
-    """单例模式"""
-
-    _instance_lock = threading.Lock()
-
-    def __new__(cls, *args, **kwargs):
-        if not hasattr(cls, "_instance"):
-            with cls._instance_lock:
-                if not hasattr(cls, "_instance"):
-                    impl = cls.configure() if hasattr(cls, "configure") else cls
-                    instance = super(Singleton, cls).__new__(impl, *args, **kwargs)
-                    if not isinstance(instance, cls):
-                        instance.__init__(*args, **kwargs)
-                    cls._instance = instance
-        return cls._instance
-
-
-class UrllibClient(object):
-    """使用urlib2发送请求"""
-
-    def get(self, url, second=30):
-        return self.postXml(None, url, second)
-
-    def post(self,url,data):
-        req = urllib2.Request(url)
-        data = urllib.urlencode(data)
-        opener = urllib2.build_opener(urllib2.HTTPCookieProcessor())
-        response = opener.open(req, data) 
-        return response.read()
-
-    def postXml(self, xml, url, second=30):
-        """不使用证书"""
-        data = urllib2.urlopen(url, xml, timeout=second).read()
-        return data
-
-    def postXmlSSL(self, xml, url, second=30):
-        """使用证书"""
-        raise TypeError("please use CurlClient")
-
-
-class CurlClient(object):
-    """使用Curl发送请求"""
-    def __init__(self):
-        self.curl = pycurl.Curl()
-        self.curl.setopt(pycurl.SSL_VERIFYHOST, False)
-        self.curl.setopt(pycurl.SSL_VERIFYPEER, False)
-        #设置不输出header
-        self.curl.setopt(pycurl.HEADER, False)
-
-    def get(self, url, second=30):
-        return self.postXmlSSL(None, url, second=second, cert=False, post=False)
-
-    def postXml(self, xml, url, second=30):
-        """不使用证书"""
-        return self.postXmlSSL(xml, url, second=second, cert=False, post=True)
-        
-
-    def postXmlSSL(self, xml, url, second=30, cert=True, post=True):
-        """使用证书"""
-        self.curl.setopt(pycurl.URL, url)
-        self.curl.setopt(pycurl.TIMEOUT, second)
-        #设置证书
-        #使用证书:cert 与 key 分别属于两个.pem文件
-        #默认格式为PEM,可以注释
-        if cert:
-            self.curl.setopt(pycurl.SSLKEYTYPE, "PEM")
-            self.curl.setopt(pycurl.SSLKEY, WxPayConf_pub.SSLKEY_PATH)
-            self.curl.setopt(pycurl.SSLCERTTYPE, "PEM")
-            self.curl.setopt(pycurl.SSLCERT, WxPayConf_pub.SSLCERT_PATH)
-        #post提交方式
-        if post:
-            self.curl.setopt(pycurl.POST, True)
-            self.curl.setopt(pycurl.POSTFIELDS, xml)
-        buff = StringIO()
-        self.curl.setopt(pycurl.WRITEFUNCTION, buff.write)
-
-        self.curl.perform()
-        return buff.getvalue()
-
-
-class HttpClient(Singleton):
-    @classmethod
-    def configure(cls):
-        if pycurl is not None and WxPayConf_pub.HTTP_CLIENT != "URLLIB":
-            return CurlClient
-        else:
-            return UrllibClient
-            
-
-class Common_util_pub(object):
-    """所有接口的基类"""
-
-    def trimString(self, value):
-        if value is not None and len(value) == 0:
-            value = None
-        return value
-
-    def createNoncestr(self, length = 32):
-        """产生随机字符串,不长于32位"""
-        chars = "abcdefghijklmnopqrstuvwxyz0123456789"
-        strs = []
-        for x in range(length):
-            strs.append(chars[random.randrange(0, len(chars))])
-        return "".join(strs)
-
-    def formatBizQueryParaMap(self, paraMap, urlencode):
-        """格式化参数,签名过程需要使用"""
-        slist = sorted(paraMap)
-        buff = []
-        for k in slist:
-            v = quote(paraMap[k]) if urlencode else paraMap[k]
-            buff.append("{0}={1}".format(k, v))
-
-        return "&".join(buff)
-
-    def getSign(self, obj):
-        """生成签名"""
-        #签名步骤一:按字典序排序参数,formatBizQueryParaMap已做
-        String = self.formatBizQueryParaMap(obj, False)
-        #签名步骤二:在string后加入KEY
-        String = "{0}&key={1}".format(String,WxPayConf_pub.KEY)
-        #签名步骤三:MD5加密
-        String = hashlib.md5(String).hexdigest()
-        #签名步骤四:所有字符转为大写
-        result_ = String.upper()
-        return result_
-
-    def arrayToXml(self, arr):
-        """array转xml"""
-        xml = ["<xml>"]
-        for k, v in arr.iteritems():
-            if v.isdigit():
-                xml.append("<{0}>{1}</{0}>".format(k, v))
-            else:
-                xml.append("<{0}>{1}</{0}>".format(k, v))
-        xml.append("</xml>")
-        return "".join(xml)
-
-    def xmlToArray(self, xml):
-        """将xml转为array"""
-        array_data = {}
-        root = ET.fromstring(xml)
-        for child in root:
-            value = child.text
-            array_data[child.tag] = value
-        return array_data
-
-    def postXmlCurl(self, xml, url, second=30):
-        """以post方式提交xml到对应的接口url"""
-        return HttpClient().postXml(xml, url, second=second)
-
-    def postXmlSSLCurl(self, xml, url, second=30):
-        """使用证书,以post方式提交xml到对应的接口url"""
-        return HttpClient().postXmlSSL(xml, url, second=second)
-
-
-class Wxpay_client_pub(Common_util_pub):
-    """请求型接口的基类"""
-    response = None  #微信返回的响应
-    url = None       #接口链接
-    curl_timeout = None #curl超时时间
-
-    def __init__(self):
-        self.parameters = {} #请求参数,类型为关联数组
-        self.result = {}     #返回参数,类型为关联数组
-
-
-    def setParameter(self, parameter, parameterValue):
-        """设置请求参数"""
-        self.parameters[self.trimString(parameter)] = self.trimString(parameterValue)
-
-    def createXml(self):
-        """设置标配的请求参数,生成签名,生成接口参数xml"""
-        return  self.arrayToXml(self.parameters)
-
-    def postXml(self):
-        """post请求xml"""
-        xml = self.createXml()
-        self.response = self.postXmlCurl(xml, self.url, self.curl_timeout)
-        return self.response
-
-    def postXmlSSL(self):
-        """使用证书post请求xml"""
-        xml = self.createXml()
-        self.response = self.postXmlSSLCurl(xml, self.url, self.curl_timeout)
-        return self.response
-
-    def getResult(self):
-        """获取结果,默认不使用证书"""
-        self.postXml()
-        self.result = self.xmlToArray(self.response)
-        return self.result
-
-
-class UnifiedOrder_pub(Wxpay_client_pub):
-    """统一支付接口类"""
-
-    def __init__(self, timeout=WxPayConf_pub.CURL_TIMEOUT):
-        #设置接口链接
-        self.url = "https://api.mch.weixin.qq.com/pay/unifiedorder"
-        #设置curl超时时间
-        self.curl_timeout = timeout
-        super(UnifiedOrder_pub, self).__init__()
-
-
-    def createXml(self):
-        """生成接口参数xml"""
-        #检测必填参数
-        if any(self.parameters[key] is None for key in ("out_trade_no", "total_fee")):
-            raise ValueError("missing parameter")
-        if self.parameters["trade_type"] == "JSAPI" and self.parameters["openid"] is None:
-            raise ValueError("JSAPI need openid parameters")
-
-        self.parameters["appid"] = WxPayConf_pub.APPID  #公众账号ID
-        self.parameters["mch_id"] = WxPayConf_pub.MCHID  #商户号
-        self.parameters["spbill_create_ip"] = "127.0.0.1"  #终端ip      
-        self.parameters["nonce_str"] = self.createNoncestr()  #随机字符串
-        self.parameters["notify_url"] = WxPayConf_pub.NOTIFY_URL  #随机字符串
-        self.parameters["body"] = "培训报名费"  #随机字符串
-        if self.parameters.has_key("sign"):
-            self.parameters.pop("sign")
-        sign = self.getSign(self.parameters)
-        print self.parameters
-        self.parameters["sign"] = sign  #签名
-        return  self.arrayToXml(self.parameters)
-
-    def getPrepayId(self):
-        """获取prepay_id"""
-        self.postXml()
-        self.result = self.xmlToArray(self.response)
-        print self.result
-        return self.result
-
-    def geth5url(self):
-        """获取prepay_id"""
-        self.postXml()
-        self.result = self.xmlToArray(self.response)
-        prepay_id = self.result["mweb_url"]
-        return prepay_id
-
-def get_wx_unifiedorder(out_trade_no,total_fee,openid,trade_type="JSAPI"):
-    par_obj = UnifiedOrder_pub()
-    par_obj.setParameter('out_trade_no',out_trade_no)
-    par_obj.setParameter('total_fee',total_fee)
-    par_obj.setParameter('openid',openid)
-    par_obj.setParameter('trade_type',trade_type)
-    par_obj.createXml()
-    return par_obj.getPrepayId()
-
-
-
-
-if __name__ == "__main__":
-    pass

+ 1 - 3
src/settings/base.py

@@ -56,7 +56,7 @@ MIDDLEWARE = [
     'django.middleware.csrf.CsrfViewMiddleware',
     'django.contrib.messages.middleware.MessageMiddleware',
     'django.middleware.clickjacking.XFrameOptionsMiddleware',
-    'operation_log.OpLogMiddleware.OpLogMiddleware'
+    #'operation_log.OpLogMiddleware.OpLogMiddleware'
 ]
 
 ROOT_URLCONF = 'urls'
@@ -133,6 +133,4 @@ AUTHENTICATION_BACKENDS = [
     "account.cauth.AccountManage",
 ]
 
-# 统计服务地址
-STATISTICS_SERVER = 'http://10.10.19.84:8090'
 PROJECT_NAME = u""

+ 4 - 12
src/settings/settings_test.py

@@ -18,20 +18,12 @@ DATABASES = {
         'ENGINE': 'django.db.backends.mysql',
         'NAME': 'bzyifeng',
         'USER': 'root',
-        'PASSWORD': 'xjc890*()',
-        'HOST': '127.0.0.1',
-        'PORT': '3306',
+        'PASSWORD': 'yifeng2016123!@#',
+        'HOST': 'localhost',
+        'PORT': '3406'
     }
 }
 
-# 短信配置  common.sms.py使用
-SMS_ACCOUNT_SID = "8a216da8588b296f01588ecd0a0001ab"
-SMS_AUTH_TOKEN = "f0d2b53782374ebc8a76fa8dd06bb4d2"
-SMS_APP_ID = "8a216da8589ae4840158a89b5c8f0272"
-SMS_URL = "https://app.cloopen.com:8883/2013-12-26/Accounts/%s/SMS/TemplateSMS" % SMS_ACCOUNT_SID
-SMS_LOG_PATH = os.path.join(BASE_DIR, "../logs", "sms")
-SEND_SMS = False
-
 # 验证码字体库位置
 FONT_PATH = os.path.join(BASE_DIR, "../static/font", "consola.ttf")
 
@@ -68,4 +60,4 @@ LOGGING = {
 }
 
 
-HOST = "https://www.scxjc.club"
+HOST = "https://wxapi.yifeng2016.com"

+ 1 - 0
templates/css/chunk-0573e67a.e6e1f97a.css

@@ -0,0 +1 @@
+.el-pagination button,.el-pagination li{border:1px solid #cacaca!important;background-color:#fff!important}.el-pagination .active{border:none!important;background:#fff!important}.apply .filter{background:#fff;padding:20px 20px 10px;border:1px solid #ededed;border-radius:2px;margin-top:10px}.apply .filter,.apply .filter .el-form-item{margin-bottom:10px}.apply .filter .el-input,.apply .filter .el-select{width:150px}.apply thead th{background:#eee}

+ 1 - 0
templates/css/chunk-06907aa6.4ff78aad.css

@@ -0,0 +1 @@
+.add .el-input,.add button{width:300px}

+ 1 - 0
templates/css/chunk-0c30ecd0.19cb553a.css

@@ -0,0 +1 @@
+.index .title{color:#222;font-size:18px;margin-bottom:30px}.index .datas li{list-style:none;display:inline-block;width:20%;margin-left:20px;margin-bottom:20px;padding:32px;border-radius:6px;border:1px solid #eee;text-align:center;color:#222;font-size:16px}.index .datas li img{display:block;margin:10px auto;float:left}.index .datas li p{font-size:32px}

Plik diff jest za duży
+ 1 - 0
templates/css/chunk-0d10c6b6.68d12fa2.css


+ 1 - 0
templates/css/chunk-11fd501a.7fbd7853.css

@@ -0,0 +1 @@
+.addclass .el-input,.addclass button{width:500px}

+ 1 - 0
templates/css/chunk-1b7ac67e.a4c5e9bd.css

@@ -0,0 +1 @@
+.sub .el-input{width:300px!important}.add .el-input,.add button{width:300px}

Plik diff jest za duży
+ 1 - 0
templates/css/chunk-209da8fc.fe87b0ac.css


+ 1 - 0
templates/css/chunk-20d976c6.8660366c.css

@@ -0,0 +1 @@
+.sub .el-input{width:300px!important}.addclass .el-input,.addclass button{width:500px}.addclass .sub .el-input{width:500px!important}

+ 1 - 0
templates/css/chunk-20d976c6.eb962663.css

@@ -0,0 +1 @@
+.sub .el-input{width:300px!important}.addclass .el-input,.addclass button{width:500px}

+ 1 - 0
templates/css/chunk-21e0730a.cbbe7e12.css

@@ -0,0 +1 @@
+.el-pagination button,.el-pagination li{border:1px solid #cacaca!important;background-color:#fff!important}.el-pagination .active{border:none!important;background:#fff!important}.apply .filter{background:#fff;padding:10px;margin:10px 0}

+ 1 - 0
templates/css/chunk-2fd0a8dc.13b8ff1a.css

@@ -0,0 +1 @@
+.el-pagination button,.el-pagination li{border:1px solid #cacaca!important;background-color:#fff!important}.el-pagination .active{border:none!important;background:#fff!important}.sub .el-input{width:300px!important}.apply .filter{background:#fff;padding:20px 20px 10px;border:1px solid #ededed;border-radius:2px;margin-top:10px}.apply .filter,.apply .filter .el-form-item{margin-bottom:10px}.apply .filter .el-input,.apply .filter .el-select{width:150px}.apply thead th{background:#eee}

Plik diff jest za duży
+ 1 - 0
templates/css/chunk-2fdb5eed.b57f3e67.css


+ 1 - 0
templates/css/chunk-3048c4c6.13b8ff1a.css

@@ -0,0 +1 @@
+.el-pagination button,.el-pagination li{border:1px solid #cacaca!important;background-color:#fff!important}.el-pagination .active{border:none!important;background:#fff!important}.sub .el-input{width:300px!important}.apply .filter{background:#fff;padding:20px 20px 10px;border:1px solid #ededed;border-radius:2px;margin-top:10px}.apply .filter,.apply .filter .el-form-item{margin-bottom:10px}.apply .filter .el-input,.apply .filter .el-select{width:150px}.apply thead th{background:#eee}

+ 1 - 0
templates/css/chunk-30b93cbf.a4c5e9bd.css

@@ -0,0 +1 @@
+.sub .el-input{width:300px!important}.add .el-input,.add button{width:300px}

Plik diff jest za duży
+ 1 - 0
templates/css/chunk-440ece21.fef8044f.css


+ 1 - 0
templates/css/chunk-53cbba8f.eeba0c40.css

@@ -0,0 +1 @@
+.el-pagination button,.el-pagination li{border:1px solid #cacaca!important;background-color:#fff!important}.el-pagination .active{border:none!important;background:#fff!important}.sub .el-input{width:300px!important}.paydone{color:#67c23a}.unpay{color:#ffb800}.payprice{color:#409eff}.el-table td,.el-table th{padding:5px 0!important}

+ 1 - 0
templates/css/chunk-677a0b8c.3bac53b1.css

@@ -0,0 +1 @@
+.el-pagination button,.el-pagination li{border:1px solid #cacaca!important;background-color:#fff!important}.el-pagination .active{border:none!important;background:#fff!important}.sub .el-input{width:300px!important}.paydone{color:#67c23a}.unpay{color:#ffb800}.payprice{color:#409eff}.el-table td,.el-table th{padding:2px 2px!important}

Plik diff jest za duży
+ 1 - 0
templates/css/chunk-7081165e.db67a82d.css


+ 1 - 0
templates/css/chunk-76704885.47c10437.css

@@ -0,0 +1 @@
+.paper h1{text-align:center;font-size:24px}.paper .info{text-align:center;padding:15px;border-bottom:1px solid #d9d9d9}.paper .ques{margin:30px 0;color:#333}.paper .ques h2{font-size:20px}.paper .ques p{font-size:18px;padding:15px 0}.paper .ques span{font-size:16px;display:block}

+ 1 - 0
templates/css/chunk-78405549.13b8ff1a.css

@@ -0,0 +1 @@
+.el-pagination button,.el-pagination li{border:1px solid #cacaca!important;background-color:#fff!important}.el-pagination .active{border:none!important;background:#fff!important}.sub .el-input{width:300px!important}.apply .filter{background:#fff;padding:20px 20px 10px;border:1px solid #ededed;border-radius:2px;margin-top:10px}.apply .filter,.apply .filter .el-form-item{margin-bottom:10px}.apply .filter .el-input,.apply .filter .el-select{width:150px}.apply thead th{background:#eee}

+ 1 - 0
templates/css/chunk-7916d209.ec220220.css

@@ -0,0 +1 @@
+.sub .el-input{width:300px!important}.edit button{position:relative;width:100%}.edit .el-cascader,.edit .el-input,.edit .el-select{width:100%!important;position:relative}.edit .gou{font-size:20px;position:absolute;color:red;left:-30px}.edit .el-form-item__label{font-size:16px;font-weight:600;padding-right:40px}.edit input[type=file]{position:absolute;width:100%;height:100%;left:0;top:0;opacity:0}

+ 1 - 0
templates/css/chunk-856cbb86.eeba0c40.css

@@ -0,0 +1 @@
+.el-pagination button,.el-pagination li{border:1px solid #cacaca!important;background-color:#fff!important}.el-pagination .active{border:none!important;background:#fff!important}.sub .el-input{width:300px!important}.paydone{color:#67c23a}.unpay{color:#ffb800}.payprice{color:#409eff}.el-table td,.el-table th{padding:5px 0!important}

+ 1 - 0
templates/css/chunk-ae8d9124.e6e1f97a.css

@@ -0,0 +1 @@
+.el-pagination button,.el-pagination li{border:1px solid #cacaca!important;background-color:#fff!important}.el-pagination .active{border:none!important;background:#fff!important}.apply .filter{background:#fff;padding:20px 20px 10px;border:1px solid #ededed;border-radius:2px;margin-top:10px}.apply .filter,.apply .filter .el-form-item{margin-bottom:10px}.apply .filter .el-input,.apply .filter .el-select{width:150px}.apply thead th{background:#eee}

+ 1 - 0
templates/css/chunk-b9fc2d1c.e6e1f97a.css

@@ -0,0 +1 @@
+.el-pagination button,.el-pagination li{border:1px solid #cacaca!important;background-color:#fff!important}.el-pagination .active{border:none!important;background:#fff!important}.apply .filter{background:#fff;padding:20px 20px 10px;border:1px solid #ededed;border-radius:2px;margin-top:10px}.apply .filter,.apply .filter .el-form-item{margin-bottom:10px}.apply .filter .el-input,.apply .filter .el-select{width:150px}.apply thead th{background:#eee}

Plik diff jest za duży
+ 1 - 0
templates/css/chunk-c5a54b38.8eea8c1b.css


+ 1 - 0
templates/css/chunk-f1c0a4f0.4ff78aad.css

@@ -0,0 +1 @@
+.add .el-input,.add button{width:300px}

Plik diff jest za duży
+ 1 - 0
templates/css/chunk-f83de5c4.ad047ff5.css


Plik diff jest za duży
+ 5 - 0
templates/css/chunk-vendors.c55c7e7c.css


BIN
templates/favicon.ico


BIN
templates/fonts/element-icons.535877f5.woff


BIN
templates/fonts/element-icons.732389de.ttf


BIN
templates/fonts/fontawesome-webfont.674f50d2.eot


BIN
templates/fonts/fontawesome-webfont.af7ae505.woff2


BIN
templates/fonts/fontawesome-webfont.b06871f2.ttf


BIN
templates/fonts/fontawesome-webfont.fee66e71.woff


BIN
templates/img/bg.231f6b86.png


Plik diff jest za duży
+ 2671 - 0
templates/img/fontawesome-webfont.912ec66d.svg


Plik diff jest za duży
+ 1 - 0
templates/index.html


Plik diff jest za duży
+ 2 - 0
templates/js/app.8223d107.js


Plik diff jest za duży
+ 1 - 0
templates/js/app.8223d107.js.map


Plik diff jest za duży
+ 2 - 0
templates/js/app.ec425a21.js


Plik diff jest za duży
+ 1 - 0
templates/js/app.ec425a21.js.map


Plik diff jest za duży
+ 2 - 0
templates/js/chunk-0573e67a.001b8611.js


Plik diff jest za duży
+ 1 - 0
templates/js/chunk-0573e67a.001b8611.js.map


Plik diff jest za duży
+ 2 - 0
templates/js/chunk-06907aa6.8420110a.js


Plik diff jest za duży
+ 1 - 0
templates/js/chunk-06907aa6.8420110a.js.map


Plik diff jest za duży
+ 2 - 0
templates/js/chunk-0c30ecd0.32fb3a1d.js


Plik diff jest za duży
+ 1 - 0
templates/js/chunk-0c30ecd0.32fb3a1d.js.map


Plik diff jest za duży
+ 2 - 0
templates/js/chunk-0d10c6b6.6bed6437.js


Plik diff jest za duży
+ 1 - 0
templates/js/chunk-0d10c6b6.6bed6437.js.map


Plik diff jest za duży
+ 2 - 0
templates/js/chunk-11fd501a.023eb565.js


Plik diff jest za duży
+ 1 - 0
templates/js/chunk-11fd501a.023eb565.js.map


Plik diff jest za duży
+ 2 - 0
templates/js/chunk-1b7ac67e.4423ee00.js


Plik diff jest za duży
+ 1 - 0
templates/js/chunk-1b7ac67e.4423ee00.js.map


Plik diff jest za duży
+ 2 - 0
templates/js/chunk-209da8fc.6977ddd0.js


Plik diff jest za duży
+ 1 - 0
templates/js/chunk-209da8fc.6977ddd0.js.map


Plik diff jest za duży
+ 2 - 0
templates/js/chunk-20d976c6.316a5d7c.js


Plik diff jest za duży
+ 1 - 0
templates/js/chunk-20d976c6.316a5d7c.js.map


Plik diff jest za duży
+ 2 - 0
templates/js/chunk-20d976c6.b2fe56ff.js


Plik diff jest za duży
+ 1 - 0
templates/js/chunk-20d976c6.b2fe56ff.js.map


Plik diff jest za duży
+ 2 - 0
templates/js/chunk-21e0730a.9dbab1a5.js


Plik diff jest za duży
+ 1 - 0
templates/js/chunk-21e0730a.9dbab1a5.js.map


Plik diff jest za duży
+ 2 - 0
templates/js/chunk-2fd0a8dc.7ac2c1b4.js


Plik diff jest za duży
+ 1 - 0
templates/js/chunk-2fd0a8dc.7ac2c1b4.js.map


Plik diff jest za duży
+ 2 - 0
templates/js/chunk-2fdb5eed.3b0426ab.js


Plik diff jest za duży
+ 1 - 0
templates/js/chunk-2fdb5eed.3b0426ab.js.map


Plik diff jest za duży
+ 2 - 0
templates/js/chunk-3048c4c6.0ee6c784.js


Plik diff jest za duży
+ 1 - 0
templates/js/chunk-3048c4c6.0ee6c784.js.map


Plik diff jest za duży
+ 2 - 0
templates/js/chunk-30b93cbf.bf164d9b.js


Plik diff jest za duży
+ 1 - 0
templates/js/chunk-30b93cbf.bf164d9b.js.map


Plik diff jest za duży
+ 2 - 0
templates/js/chunk-440ece21.c98712dd.js


Plik diff jest za duży
+ 1 - 0
templates/js/chunk-440ece21.c98712dd.js.map


Plik diff jest za duży
+ 2 - 0
templates/js/chunk-53cbba8f.3081c9e4.js


Plik diff jest za duży
+ 1 - 0
templates/js/chunk-53cbba8f.3081c9e4.js.map


Plik diff jest za duży
+ 2 - 0
templates/js/chunk-677a0b8c.148bbf4c.js


Plik diff jest za duży
+ 1 - 0
templates/js/chunk-677a0b8c.148bbf4c.js.map


Plik diff jest za duży
+ 2 - 0
templates/js/chunk-7081165e.4cb4ca1c.js


Plik diff jest za duży
+ 1 - 0
templates/js/chunk-7081165e.4cb4ca1c.js.map


Plik diff jest za duży
+ 2 - 0
templates/js/chunk-7081165e.d61110e3.js


Plik diff jest za duży
+ 1 - 0
templates/js/chunk-7081165e.d61110e3.js.map


Plik diff jest za duży
+ 2 - 0
templates/js/chunk-76704885.1e5016f9.js


Plik diff jest za duży
+ 1 - 0
templates/js/chunk-76704885.1e5016f9.js.map


+ 0 - 0
templates/js/chunk-78405549.68efdbe2.js


Niektóre pliki nie zostały wyświetlone z powodu dużej ilości zmienionych plików