locky 4 年之前
父节点
当前提交
cf127381e2
共有 100 个文件被更改,包括 0 次插入11730 次删除
  1. 0 0
      AnsjerUIDManage/__init__.py
  2. 0 16
      AnsjerUIDManage/asgi.py
  3. 0 189
      AnsjerUIDManage/config.py
  4. 0 46
      AnsjerUIDManage/generacode.py
  5. 0 218
      AnsjerUIDManage/settings.py
  6. 0 34
      AnsjerUIDManage/urls.py
  7. 0 16
      AnsjerUIDManage/wsgi.py
  8. 0 528
      Controller/FileController.py
  9. 0 402
      Controller/HistoryUIDController.py
  10. 0 99
      Controller/LogController.py
  11. 0 104
      Controller/OrderTaskController.py
  12. 0 107
      Controller/SalesController.py
  13. 0 479
      Controller/UIDController.py
  14. 0 296
      Controller/UserController.py
  15. 0 0
      Model/__init__.py
  16. 0 3
      Model/admin.py
  17. 0 5
      Model/apps.py
  18. 0 135
      Model/models.py
  19. 0 3
      Model/tests.py
  20. 0 3
      Model/views.py
  21. 0 83
      Object/RedisObject.py
  22. 0 105
      Object/ResponseObject.py
  23. 0 122
      Object/TokenObject.py
  24. 0 262
      Service/CommonService.py
  25. 0 141
      Service/LogMiddleware.py
  26. 0 21
      Service/ModelService.py
  27. 0 21
      manage.py
  28. 0 1
      web/UM-admin/.idea/.name
  29. 0 12
      web/UM-admin/.idea/UM-admin.iml
  30. 0 6
      web/UM-admin/.idea/misc.xml
  31. 0 9
      web/UM-admin/.idea/modules.xml
  32. 0 7
      web/UM-admin/.idea/vcs.xml
  33. 0 522
      web/UM-admin/.idea/workspace.xml
  34. 0 164
      web/UM-admin/admin-add.html
  35. 0 148
      web/UM-admin/admin-edit.html
  36. 0 165
      web/UM-admin/admin-list.html
  37. 0 161
      web/UM-admin/admin-role.html
  38. 0 16
      web/UM-admin/css/font.css
  39. 0 523
      web/UM-admin/css/xadmin.css
  40. 二进制
      web/UM-admin/fonts/iconfont.eot
  41. 0 44
      web/UM-admin/fonts/iconfont.svg
  42. 二进制
      web/UM-admin/fonts/iconfont.ttf
  43. 二进制
      web/UM-admin/fonts/iconfont.woff
  44. 0 444
      web/UM-admin/history-uid-list.html
  45. 二进制
      web/UM-admin/images/aiwrap.png
  46. 二进制
      web/UM-admin/images/bg.png
  47. 0 173
      web/UM-admin/index.html
  48. 0 221
      web/UM-admin/js/admin.js
  49. 0 511
      web/UM-admin/js/city.js
  50. 0 80
      web/UM-admin/js/jqhttpsdk.js
  51. 0 1
      web/UM-admin/js/jquery-3.3.1.min.js
  52. 0 2
      web/UM-admin/js/jquery_cookie_min.js
  53. 0 33
      web/UM-admin/js/shownowtime.js
  54. 0 5018
      web/UM-admin/lib/layui/css/layui.css
  55. 0 1
      web/UM-admin/lib/layui/css/layui.mobile.css
  56. 0 2
      web/UM-admin/lib/layui/css/modules/code.css
  57. 0 1
      web/UM-admin/lib/layui/css/modules/laydate/default/laydate.css
  58. 二进制
      web/UM-admin/lib/layui/css/modules/laydate/icon.png
  59. 0 1
      web/UM-admin/lib/layui/css/modules/laydate/laydate.css
  60. 二进制
      web/UM-admin/lib/layui/css/modules/layer/default/icon-ext.png
  61. 二进制
      web/UM-admin/lib/layui/css/modules/layer/default/icon.png
  62. 0 1
      web/UM-admin/lib/layui/css/modules/layer/default/layer.css
  63. 二进制
      web/UM-admin/lib/layui/css/modules/layer/default/loading-0.gif
  64. 二进制
      web/UM-admin/lib/layui/css/modules/layer/default/loading-1.gif
  65. 二进制
      web/UM-admin/lib/layui/css/modules/layer/default/loading-2.gif
  66. 二进制
      web/UM-admin/lib/layui/font/iconfont.eot
  67. 0 25
      web/UM-admin/lib/layui/font/iconfont.svg
  68. 二进制
      web/UM-admin/lib/layui/font/iconfont.ttf
  69. 二进制
      web/UM-admin/lib/layui/font/iconfont.woff
  70. 二进制
      web/UM-admin/lib/layui/images/face/0.gif
  71. 二进制
      web/UM-admin/lib/layui/images/face/1.gif
  72. 二进制
      web/UM-admin/lib/layui/images/face/10.gif
  73. 二进制
      web/UM-admin/lib/layui/images/face/11.gif
  74. 二进制
      web/UM-admin/lib/layui/images/face/12.gif
  75. 二进制
      web/UM-admin/lib/layui/images/face/13.gif
  76. 二进制
      web/UM-admin/lib/layui/images/face/14.gif
  77. 二进制
      web/UM-admin/lib/layui/images/face/15.gif
  78. 二进制
      web/UM-admin/lib/layui/images/face/16.gif
  79. 二进制
      web/UM-admin/lib/layui/images/face/17.gif
  80. 二进制
      web/UM-admin/lib/layui/images/face/18.gif
  81. 二进制
      web/UM-admin/lib/layui/images/face/19.gif
  82. 二进制
      web/UM-admin/lib/layui/images/face/2.gif
  83. 二进制
      web/UM-admin/lib/layui/images/face/20.gif
  84. 二进制
      web/UM-admin/lib/layui/images/face/21.gif
  85. 二进制
      web/UM-admin/lib/layui/images/face/22.gif
  86. 二进制
      web/UM-admin/lib/layui/images/face/23.gif
  87. 二进制
      web/UM-admin/lib/layui/images/face/24.gif
  88. 二进制
      web/UM-admin/lib/layui/images/face/25.gif
  89. 二进制
      web/UM-admin/lib/layui/images/face/26.gif
  90. 二进制
      web/UM-admin/lib/layui/images/face/27.gif
  91. 二进制
      web/UM-admin/lib/layui/images/face/28.gif
  92. 二进制
      web/UM-admin/lib/layui/images/face/29.gif
  93. 二进制
      web/UM-admin/lib/layui/images/face/3.gif
  94. 二进制
      web/UM-admin/lib/layui/images/face/30.gif
  95. 二进制
      web/UM-admin/lib/layui/images/face/31.gif
  96. 二进制
      web/UM-admin/lib/layui/images/face/32.gif
  97. 二进制
      web/UM-admin/lib/layui/images/face/33.gif
  98. 二进制
      web/UM-admin/lib/layui/images/face/34.gif
  99. 二进制
      web/UM-admin/lib/layui/images/face/35.gif
  100. 二进制
      web/UM-admin/lib/layui/images/face/36.gif

+ 0 - 0
AnsjerUIDManage/__init__.py


+ 0 - 16
AnsjerUIDManage/asgi.py

@@ -1,16 +0,0 @@
-"""
-ASGI config for AnsjerUIDManage project.
-
-It exposes the ASGI callable as a module-level variable named ``application``.
-
-For more information on this file, see
-https://docs.djangoproject.com/en/3.0/howto/deployment/asgi/
-"""
-
-import os
-
-from django.core.asgi import get_asgi_application
-
-os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'AnsjerUIDManage.settings')
-
-application = get_asgi_application()

+ 0 - 189
AnsjerUIDManage/config.py

@@ -1,189 +0,0 @@
-#!/usr/bin/env python3
-# -*- coding: utf-8 -*-
-import datetime, os
-
-SERVER_TYPE = os.environ.get('DJANGO_SETTINGS_MODULE')
-print(SERVER_TYPE)
-
-OAUTH_ACCESS_TOKEN_SECRET = 'a+jbnw%@1%zy^=@dn62%'
-OAUTH_REFRESH_TOKEN_SECRET = 'r+jbnw%@1%zy^=@dn62%'
-
-# access_token超时
-# OAUTH_ACCESS_TOKEN_TIME = datetime.timedelta(hours=1)
-OAUTH_ACCESS_TOKEN_TIME = datetime.timedelta(days=30)
-# refresh_token超时
-OAUTH_REFRESH_TOKEN_TIME = datetime.timedelta(days=30)
-
-SERVER_HOST = 'localhost'
-
-BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
-
-UNICODE_ASCII_CHARACTER_SET = ('abcdefghijklmnopqrstuvwxyz'
-                               'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-                               '0123456789')
-
-# 不同环境配置
-# if SERVER_TYPE == 'AnsjerUIDManage.local_settings':
-#     from AnsjerUIDManage.config_local import *
-# elif SERVER_TYPE == 'AnsjerUIDManage.test_settings':
-#     from AnsjerUIDManage.config_test import *
-# elif SERVER_TYPE == 'AnsjerUIDManage.formal_settings':
-#     from AnsjerUIDManage.config_formal import *
-
-ONLINE_DEVICE = 1000000
-
-SALES = {
-    2020: [
-        {
-            'name': 'United States',
-            'value': [3768901, 23.337, '美国']
-        },
-        {
-            'name': 'Japan',
-            'value': [1886988, 9.027, '日本']
-        },
-        {
-            'name': 'Russia',
-            'value': [1940038, 7.923, '俄国']
-        },
-        {
-            'name': 'Germany',
-            'value': [1319651, 6.253, '德国']
-        },
-        {
-            'name': 'France',
-            'value': [1291157, 5.825, '法国']
-        },
-        {
-            'name': 'United Kingdom',
-            'value': [1041917, 4.567, '英国']
-        },
-        {
-            'name': 'Italy',
-            'value': [859811, 3.875, '意大利']
-        }
-    ],
-    2019: [
-        {
-            'name': 'United States',
-            'value': [2768900, 37.374, '美国']
-        },
-        {
-            'name': 'Japan',
-            'value': [1086988, 14.672, '日本']
-        },
-        {
-            'name': 'Russia',
-            'value': [940038, 12.689, '俄国']
-        },
-        {
-            'name': 'Germany',
-            'value': [919651, 12.413, '德国']
-        },
-        {
-            'name': 'France',
-            'value': [691157, 9.329, '法国']
-        },
-        {
-            'name': 'United Kingdom',
-            'value': [541917, 7.315, '英国']
-        },
-        {
-            'name': 'Italy',
-            'value': [459811, 6.206, '意大利']
-        }
-    ],
-    2018: [
-        {
-            'name': 'United States',
-            'value': [2068912, 32.329, '美国']
-        },
-        {
-            'name': 'Japan',
-            'value': [1007988, 15.751, '日本']
-        },
-        {
-            'name': 'Germany',
-            'value': [909653, 14.214, '德国']
-        },
-        {
-            'name': 'Russia',
-            'value': [900038, 14.064, '俄国']
-        },
-
-        {
-            'name': 'France',
-            'value': [601158, 9.394, '法国']
-        },
-        {
-            'name': 'United Kingdom',
-            'value': [501920, 7.843, '英国']
-        },
-        {
-            'name': 'Italy',
-            'value': [409813, 6.404, '意大利']
-        }
-    ],
-    2017: [
-        {
-            'name': 'United States',
-            'value': [1668900, 30.914, '美国']
-        },
-        {
-            'name': 'Japan',
-            'value': [906988, 16.800, '日本']
-        },
-        {
-            'name': 'Germany',
-            'value': [809651, 14.998, '德国']
-        },
-        {
-            'name': 'Russia',
-            'value': [800038, 14.820, '俄国']
-        },
-        {
-            'name': 'France',
-            'value': [501157, 9.283, '法国']
-        },
-        {
-            'name': 'United Kingdom',
-            'value': [401920, 7.445, '英国']
-        },
-        {
-            'name': 'Italy',
-            'value': [309822, 5.739, '意大利']
-        }
-    ],
-    2016: [
-        {
-            'name': 'United States',
-            'value': [1468900, 31.943, '美国']
-        },
-        {
-            'name': 'Japan',
-            'value': [806988, 17.549, '日本']
-        },
-        {
-            'name': 'Germany',
-            'value': [709651, 15.432, '德国']
-        },
-        {
-            'name': 'Russia',
-            'value': [700038, 15.223, '俄国']
-        },
-
-        {
-            'name': 'France',
-            'value': [401157, 8.724, '法国']
-        },
-        {
-            'name': 'United Kingdom',
-            'value': [301917, 6.566, '英国']
-        },
-        {
-            'name': 'Italy',
-            'value': [209811, 4.562, '意大利']
-        }
-    ]
-
-}

+ 0 - 46
AnsjerUIDManage/generacode.py

@@ -1,46 +0,0 @@
-#!/usr/bin/env python3
-# -*- coding: utf-8 -*-
-import json
-
-import xlwt
-
-from Object.TokenObject import TokenObject
-import base64
-import requests
-
-token = TokenObject()
-token = token.generate({'userID': str(2)})
-
-file = open('./file/UID-2020-09-09-06-14-44.txt', mode='r', encoding='utf-8')
-content = file.read()
-content = content.replace(' ', '\t')
-
-file1 = open('./file/UID_2020_09_09_06_14_44.txt', mode='w', encoding='utf-8')
-file1.write(content)
-file1.close()
-
-tmps = content.split('\n')
-workbook = xlwt.Workbook(encoding='utf-8')
-sheet1 = workbook.add_sheet('UID')
-num = 0
-for tmp in tmps:
-    lines = tmp.split('\t')
-    for i in range(len(lines)):
-        sheet1.write(num, i, lines[i].strip())
-    num += 1
-
-workbook.save('./file/UID_2020_09_09_06_14_44.xls')
-
-
-file.close()
-
-# url = 'http://192.168.136.35:8000/upload'
-# postData = {
-#     'area': 0,
-#     'token': token['access_token'],
-#     'fileName': content
-# }
-# # postData = json.dumps(postData)
-# print(postData)
-# res = requests.post(url=url, data=postData)
-# print(res)

+ 0 - 218
AnsjerUIDManage/settings.py

@@ -1,218 +0,0 @@
-"""
-Django settings for AnsjerUIDManage project.
-
-Generated by 'django-admin startproject' using Django 3.0.7.
-
-For more information on this file, see
-https://docs.djangoproject.com/en/3.0/topics/settings/
-
-For the full list of settings and their values, see
-https://docs.djangoproject.com/en/3.0/ref/settings/
-"""
-
-import os
-
-# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
-# BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
-
-
-# Quick-start development settings - unsuitable for production
-# See https://docs.djangoproject.com/en/3.0/howto/deployment/checklist/
-
-# SECURITY WARNING: keep the secret key used in production secret!
-from AnsjerUIDManage.config import BASE_DIR
-
-SECRET_KEY = 'k#i*q_^=nhr^63ytqenfg!ecqizq60*6_x@sp_6+%u^b24%+fj'
-
-# SECURITY WARNING: don't run with debug turned on in production!
-DEBUG = False
-
-ALLOWED_HOSTS = ['*']
-
-
-# Application definition
-
-INSTALLED_APPS = [
-    'django.contrib.admin',
-    'django.contrib.auth',
-    'django.contrib.contenttypes',
-    'django.contrib.sessions',
-    'django.contrib.messages',
-    'django.contrib.staticfiles',
-    'Model.apps.ModelConfig',
-    'corsheaders',
-]
-
-MIDDLEWARE = [
-    'django.middleware.security.SecurityMiddleware',
-    'Service.LogMiddleware.LogMiddleware',
-    'django.contrib.sessions.middleware.SessionMiddleware',
-    'django.middleware.common.CommonMiddleware',
-    #'django.middleware.csrf.CsrfViewMiddleware',
-    'django.contrib.auth.middleware.AuthenticationMiddleware',
-    'django.contrib.messages.middleware.MessageMiddleware',
-    'django.middleware.clickjacking.XFrameOptionsMiddleware',
-    'corsheaders.middleware.CorsMiddleware',
-    'corsheaders.middleware.CorsPostCsrfMiddleware',
-]
-
-ROOT_URLCONF = 'AnsjerUIDManage.urls'
-CORS_ALLOW_CREDENTIALS = True
-CORS_ORIGIN_ALLOW_ALL = True
-CORS_ALLOW_METHODS = (
-    'DELETE',
-    'GET',
-    'OPTIONS',
-    'PATCH',
-    'POST',
-    'PUT',
-    'VIEW',
-)
-
-CORS_ALLOW_HEADERS = (
-    'XMLHttpRequest',
-    'X_FILENAME',
-    'accept',
-    'accept-encoding',
-    'authorization',
-    'content-type',
-    'dnt',
-    'origin',
-    'user-agent',
-    'x-csrftoken',
-    'x-requested-with',
-    'Pragma',
-)
-
-TEMPLATES = [
-    {
-        'BACKEND': 'django.template.backends.django.DjangoTemplates',
-        'DIRS': [os.path.join(BASE_DIR, 'templates')]
-        ,
-        'APP_DIRS': True,
-        'OPTIONS': {
-            'context_processors': [
-                'django.template.context_processors.debug',
-                'django.template.context_processors.request',
-                'django.contrib.auth.context_processors.auth',
-                'django.contrib.messages.context_processors.messages',
-            ],
-        },
-    },
-]
-
-WSGI_APPLICATION = 'AnsjerUIDManage.wsgi.application'
-
-
-# Database
-# https://docs.djangoproject.com/en/3.0/ref/settings/#databases
-
-# DATABASES_NAME = 'uid_db'
-# USER_NAME = 'root'
-# USER_PASSWORD = '123456'
-# HOST = 'localhost'
-
-
-DATABASES_NAME = 'ansjer_uid'
-USER_NAME = 'root'
-USER_PASSWORD = 'ansjer.x.x'
-HOST = 'localhost'
-
-DATABASES = {
-    # 'default': {
-    #     'ENGINE': 'django.db.backends.sqlite3',
-    #     'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
-    #     'CHECK_SAME_THREAD': False
-    # }
-    'default': {
-        'ENGINE': 'django.db.backends.mysql',
-        'NAME': DATABASES_NAME,
-        'USER': USER_NAME,
-        'PASSWORD': USER_PASSWORD,
-        'HOST': HOST,
-        'PORT': '3306',
-        'OPTIONS': {'charset': 'utf8mb4', 'use_unicode': True, 'init_command': "SET sql_mode='STRICT_TRANS_TABLES'"},
-        'AUTOCOMMIT': True
-    }
-}
-
-
-# Password validation
-# https://docs.djangoproject.com/en/3.0/ref/settings/#auth-password-validators
-
-AUTH_PASSWORD_VALIDATORS = [
-    {
-        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
-    },
-    {
-        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
-    },
-    {
-        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
-    },
-    {
-        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
-    },
-]
-
-
-# Internationalization
-# https://docs.djangoproject.com/en/3.0/topics/i18n/
-
-LANGUAGE_CODE = 'en-us'
-
-TIME_ZONE = 'UTC'
-
-USE_I18N = True
-
-USE_L10N = True
-
-USE_TZ = True
-
-
-# Static files (CSS, JavaScript, Images)
-# https://docs.djangoproject.com/en/3.0/howto/static-files/
-
-STATIC_URL = '/static/'
-
-# 日志模块
-LOGGING = {
-    'version': 1,
-    'disable_existing_loggers': True,
-    'formatters': {
-        'error_format': {
-            # 'format': '{"asctime":"%(asctime)s","thread":"%(threadName)s:%(thread)d","errorline":"%(lineno)d","errorlevel":"%(levelname)s","errorcontent":"%(message)s"}'
-            'format': '%(asctime)s %(threadName)s %(thread)d %(lineno)d %(levelname)s %(message)s'
-        },
-    },
-    'filters': {
-    },
-    'handlers': {
-        'mail_admins': {
-            'level': 'ERROR',
-            'class': 'django.utils.log.AdminEmailHandler',
-            'include_html': True,
-        },
-        'default': {
-            'level': 'ERROR',
-            'class': 'logging.handlers.RotatingFileHandler',
-            'filename': BASE_DIR + '/static/log/error.log',
-            'maxBytes': 1024 * 1024 * 5,  # 5 MB
-            'backupCount': 5,
-            'formatter': 'error_format',
-        },
-        'console': {
-            'level': 'ERROR',
-            'class': 'logging.StreamHandler',
-            'formatter': 'error_format'
-        },
-    },
-    'loggers': {
-        'django': {
-            'handlers': ['default', 'console'],
-            # 'handlers': ['mail_admins','default','console'],
-            'level': 'ERROR',
-            'propagate': False
-        },
-    }
-}

+ 0 - 34
AnsjerUIDManage/urls.py

@@ -1,34 +0,0 @@
-"""AnsjerUIDManage URL Configuration
-
-The `urlpatterns` list routes URLs to views. For more information please see:
-    https://docs.djangoproject.com/en/3.0/topics/http/urls/
-Examples:
-Function views
-    1. Add an import:  from my_app import views
-    2. Add a URL to urlpatterns:  path('', views.home, name='home')
-Class-based views
-    1. Add an import:  from other_app.views import Home
-    2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
-Including another URLconf
-    1. Import the include() function: from django.urls import include, path
-    2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
-"""
-from django.contrib import admin
-from django.urls import path, re_path
-
-from Controller import UserController, FileController, UIDController, LogController, SalesController, \
-    OrderTaskController, HistoryUIDController
-
-urlpatterns = [
-    path('admin/', admin.site.urls),
-    re_path('user/(?P<operation>.*)', UserController.UserView.as_view()),
-    re_path('uid/(?P<operation>.*)', UIDController.UIDView.as_view()),
-    re_path('history/(?P<operation>.*)', HistoryUIDController.HistoryUIDView.as_view()),
-    re_path('log/(?P<operation>.*)', LogController.LogView.as_view()),
-    re_path('orderTask/(?P<operation>.*)', OrderTaskController.OrderTaskView.as_view()),
-    path('upload', FileController.UploadUIDFileView.as_view()),
-    path('download', FileController.DownloadUIDFileView.as_view()),
-    path('sales', SalesController.SalesView.as_view()),
-    path('device/online', SalesController.DeviceOnlineView.as_view())
-
-]

+ 0 - 16
AnsjerUIDManage/wsgi.py

@@ -1,16 +0,0 @@
-"""
-WSGI config for AnsjerUIDManage project.
-
-It exposes the WSGI callable as a module-level variable named ``application``.
-
-For more information on this file, see
-https://docs.djangoproject.com/en/3.0/howto/deployment/wsgi/
-"""
-
-import os
-
-from django.core.wsgi import get_wsgi_application
-
-os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'AnsjerUIDManage.settings')
-
-application = get_wsgi_application()

+ 0 - 528
Controller/FileController.py

@@ -1,528 +0,0 @@
-#!/usr/bin/env python3
-# -*- coding: utf-8 -*-
-import base64
-import json
-import logging
-import os
-import time
-import zipfile
-
-import xlwt
-
-from django.http import StreamingHttpResponse, HttpResponse, QueryDict
-from django.utils.decorators import method_decorator
-from django.views import View
-from django.views.decorators.csrf import csrf_exempt
-from django.db import transaction
-
-from AnsjerUIDManage.config import BASE_DIR
-from Model.models import UIDModel, UserUIDModel, UserModel, LogModel, MacModel, OrderTaskModel, OrderUIDModel
-from Object.RedisObject import RedisObject
-from Object.TokenObject import TokenObject
-from Object.ResponseObject import ResponseObject
-from Service.CommonService import CommonService
-
-
-class UploadUIDFileView(View):
-
-    @method_decorator(csrf_exempt)
-    def dispatch(self, request, *args, **kwargs):
-        return super(UploadUIDFileView, self).dispatch(request, *args, **kwargs)
-
-    def get(self, request, *args, **kwargs):
-        request.encoding = 'utf-8'
-        request_dict = request.GET
-        fileName = request.FILES.get('fileName', None)
-        return self.validate(fileName, request_dict, request)
-
-    def post(self, request, *args, **kwargs):
-        request.encoding = 'utf-8'
-        request_dict = request.POST
-        fileName = request.FILES.get('fileName', None)
-        return self.validate(fileName, request_dict, request)
-
-    def validate(self, fileName, request_dict, request):
-        token = request_dict.get('token', None)
-        area = request_dict.get('area', None)
-        isReset = request_dict.get('isReset', 0)
-        content = request_dict.get('fileName', None)
-        print('content')
-        print(content)
-
-        content = base64.b64decode(content).decode().strip()
-        content = content[3:(len(content) - 3)]
-        uids = content.split('\n')
-        # print(uids)
-        # print(len(uids))
-
-        response = ResponseObject()
-
-        tko = TokenObject(token)
-        if tko.code != 0:
-            return response.json(tko.code)
-
-        # if not fileName and not area:
-        #     return response.json(444, 'fileName,area')
-
-        data = {}
-        duplicate = []
-        for line in uids:
-
-            if len(line) < 20:
-                continue
-
-            if data.__contains__(line):
-                duplicate.append(line)
-            else:
-                data[line] = ''
-
-        if isReset == 0:
-            return self.do_insert(data, duplicate, area, response, request, tko)
-        else:
-            return self.do_reset(data, response, area, request, tko)
-
-    @transaction.atomic
-    def do_insert(self, data, duplicate, area, response, request, token):
-        bulk = []
-        count = 0
-        add_time = int(time.time())
-        update_time = int(time.time())
-        keys = data.keys()
-
-        # 获取最新的mac
-        mac = MacModel.objects.filter().values('id', 'value', 'is_active')[0]
-        if not mac['is_active']:
-            return response.json(175)
-        # redisObject = RedisObject(db=3)
-        key = ''
-        tmpMac = mac['value']
-        savePoint = None
-        for item in keys:
-            key = item.strip()
-            # value = redisObject.get_data(key)
-            # if value is False:
-            #     # redisObject.set_data(key, '1', 600)
-            # else:
-            #     duplicate.append(key)
-            #     continue
-            bulk.append(UIDModel(
-                uid=item.strip(),
-                uid_extra='',
-                status=0,
-                add_time=add_time,
-                update_time=update_time,
-                area=area,
-                mac=mac['value']
-            ))
-            try:
-                try:
-                    if (count % 5000) == 0:
-                        savePoint = transaction.savepoint()
-                        UIDModel.objects.bulk_create(bulk)
-                        bulk.clear()
-                        data = {
-                            'value': mac['value'],
-                            'is_active': tmpMac is not None
-                        }
-                        MacModel.objects.filter().update(**data)
-                except Exception as e:
-                    # print('--------------------------error 5000')
-                    # print(repr(e))
-                    if savePoint:
-                        transaction.rollback(savePoint)
-                    djangoLogger = logging.getLogger('django')
-                    djangoLogger.exception(repr(e))
-                    return response.json(174, str(e))
-                else:
-                    savePoint = None
-            except Exception as e:
-                # print('--------------------------error 5001')
-                # print(repr(e))
-                return response.json(174, str(e))
-            count += 1
-            tmpMac = CommonService.updateMac(mac['value'])
-            if tmpMac is None:
-                # 能分配的mac已用完
-                break
-            else:
-                mac['value'] = tmpMac
-
-        # 当bulk不足5000时,还有数据要插入
-        try:
-            try:
-                savePoint = transaction.savepoint()  # 事务保存点
-                if len(bulk) > 0:
-                    UIDModel.objects.bulk_create(bulk)
-                    bulk.clear()
-            except Exception as e:
-                # print('--------------------------error')
-                # print(repr(e))
-                if savePoint:
-                    transaction.rollback(savePoint)
-                return response.json(174)
-            else:
-                del data
-                del bulk
-                data = {
-                    'value': mac['value'],
-                    'is_active': tmpMac is not None
-                }
-                MacModel.objects.filter().update(**data)
-        except Exception as e:
-            # print('--------------------------error 1111')
-            # print(repr(e))
-            return response.json(174)
-
-        # print('重复:')
-        # print(duplicate)
-
-        operation = self.formatOperation(operation='上传', quantity=int(count), area=int(area))
-        print(operation)
-        self.add_log(request, operation, token)
-
-        if tmpMac is None:
-            return response.json(175, {'last_uid': key})
-        return response.json(0, {'count': count, 'duplicate_count': len(duplicate), 'data': duplicate})
-
-    def do_reset(self, data, response, area, request, token):
-        keys = data.keys()
-        uids = []
-        count = 0
-        for key in keys:
-            uids.append(key.strip())
-            if len(uids) % 5000 == 0:
-                count += self.do_update_uid_status(uids, area)
-                uids.clear()
-
-        if len(uids) > 0:
-            count += self.do_update_uid_status(uids, area)
-            uids.clear()
-
-        operation = self.formatOperation('重置', int(count), int(area))
-        self.add_log(request, operation, token)
-        return response.json(0)
-
-    def do_update_uid_status(self, uids, area):
-        uid_qs = UIDModel.objects.filter(uid__in=uids, area=area, status=2)
-        if uid_qs.exists():
-            uid_ids = []
-            for uid in uid_qs:
-                if uid.status == 2:
-                    uid.status = 1
-                    uid_ids.append(uid.id)
-            UIDModel.objects.bulk_update(uid_qs, fields=['status'])
-
-            try:
-                OrderUIDModel.objects.filter(uid__id__in=tuple(uid_ids)).delete()
-            except Exception as e:
-                print(e)
-
-            return uid_qs.count()
-        return 0
-
-    def add_log(self, request, operation, token):
-        ip = CommonService.get_ip_address(request)
-        now_time = time.time()
-        content = json.loads(json.dumps(request.POST))
-        user_qs = UserModel.objects.filter(id=token.userID)
-
-        if content.__contains__('fileName'):
-            del content['fileName']
-        log = {
-            'status': 200,
-            'content': json.dumps(content),
-            'ip': ip,
-            'time': now_time,
-            'url': 'upload',
-            'operation': operation,
-            'user': user_qs[0]
-        }
-
-        try:
-            LogModel.objects.create(**log)
-        except Exception as e:
-            print('出错')
-            print(repr(e))
-
-    def formatOperation(self, operation, quantity, area):
-        str = '{operation}{quantity}个{area}UID'
-        if area == 0:
-            return str.format(operation=operation, quantity=quantity, area='国内')
-        else:
-            return str.format(operation=operation, quantity=quantity, area='国外')
-
-
-class DownloadUIDFileView(View):
-
-    @method_decorator(csrf_exempt)
-    def dispatch(self, request, *args, **kwargs):
-        return super(DownloadUIDFileView, self).dispatch(request, *args, **kwargs)
-
-    def get(self, request, *args, **kwargs):
-        request.encoding = 'utf-8'
-        request_dict = request.GET
-        return self.validate(request_dict)
-
-    def post(self, request, *args, **kwargs):
-        request.encoding = 'utf-8'
-        request_dict = request.POST
-        return self.validate(request_dict)
-
-    def validate(self, request_dict):
-        token = request_dict.get('token', None)
-        area = request_dict.get('area', None)
-        quantity = int(request_dict.get('quantity', None))
-        fileType = request_dict.get('fileType', None)
-        order_number = request_dict.get('order_number', None)
-        board = request_dict.get('board', None)
-        plan = request_dict.get('plan', None)
-        checksum = request_dict.get('checksum', None)
-        ic_model = request_dict.get('ic_model', None)
-        order_quantity = request_dict.get('order_quantity', None)
-        response = ResponseObject()
-
-        # print(area)
-        # print(quantity)
-        token = TokenObject(token)
-        if token.code != 0:
-            return response.json(token.code)
-
-        if not area or not order_number or not board or not plan or not checksum or not ic_model or not order_quantity or not fileType:
-            return response.json(444)
-
-        area = int(area)
-
-        if area >= 0 and quantity > 0:
-
-            # 保存订单信息
-            now_time = int(time.time())
-            order = {
-                'order_number': order_number,
-                'board': board,
-                'plan': plan,
-                'checksum': checksum,
-                'ic_model': ic_model,
-                'quantity': order_quantity,
-                'add_time': now_time
-            }
-
-            tmp = OrderTaskModel.objects.create(**order)
-            print(tmp)
-
-            order = OrderTaskModel.objects.filter(order_number=order_number).order_by('-add_time')[0]
-
-            uid_qs = UserUIDModel.objects.filter(user__id=token.userID, uid__status=1, uid__area=area)
-
-            uid_values = uid_qs.values('uid__id', 'uid__uid', 'uid__mac', 'uid__uid_extra', 'uid__add_time', 'uid__update_time', 'uid__area')
-
-            count = uid_values.count()
-            if count < quantity:
-                return response.json(444, '设备UID不足')
-
-            if uid_values.exists():
-
-                uid_values = uid_values[0:quantity]
-                uid_qs = uid_qs[0: quantity]
-                if fileType == 'txt':
-                    # return self.download_txt(uid_values, uid_qs, order)
-                    # return self.download_excel(uid_values, order)
-                    return self.download_zip(uid_values, order)
-                elif fileType == 'excel':
-                    return self.download_excel(uid_values, order)
-                else:
-                    return response.json(444, 'fileType')
-            else:
-                return response.json(444, '111')
-        else:
-            return response.json(444, '222')
-
-    def download_txt(self, uid_values, uid_qs, order):
-        updates = []
-        updates_uid = []
-        content = ''
-        now_time = int(time.time())
-        for i in range(len(uid_values)):
-            # print(item)
-            item = uid_values[i]
-            mac: str = item['uid__mac']
-            index = mac.rfind(':')
-            tmp = mac[0:index] + '\t' + mac[index:]
-            content += tmp + '\t'
-            content += item['uid__uid'].strip()
-            content += '\r\n'
-            uidModel = UIDModel(
-                id=item['uid__id'],
-                uid=item['uid__uid'],
-                mac=item['uid__mac'],
-                uid_extra=item['uid__uid_extra'],
-                status=2,
-                add_time=item['uid__add_time'],
-                update_time=now_time,
-                area=item['uid__area']
-            )
-            updates.append(uidModel)
-
-            order_uid = OrderUIDModel(uid=uidModel, order=order, add_time=now_time, update_time=now_time)
-            updates_uid.append(order_uid)
-
-            if len(updates) % 5000 == 0:
-                UIDModel.objects.bulk_update(updates, fields=["status"])
-                OrderUIDModel.objects.bulk_create(updates_uid)
-                updates.clear()
-                updates_uid.clear()
-            # print(item['uid__uid'])
-
-        if len(updates) > 0:
-            UIDModel.objects.bulk_update(updates, fields=["status"])
-            OrderUIDModel.objects.bulk_create(updates_uid)
-            updates.clear()
-            updates_uid.clear()
-
-        del updates
-        del updates_uid
-        content = content[0:len(content) - 1]
-        response = StreamingHttpResponse(content)
-        response['Content-Type'] = 'application/octet-stream'
-        response['Content-Disposition'] = 'attachment;filename=UID'+time.strftime('-%Y-%m-%d-%H-%M-%S', time.localtime()) + '.txt'
-        return response
-
-    def download_excel(self, uid_qs, order):
-        response = HttpResponse(content_type='application/vnd.ms-excel')
-        response['Content-Disposition'] = 'attachment; filename=UID' + time.strftime('-%Y-%m-%d-%H-%M-%S',
-                                                                                     time.localtime()) + '.xls'
-        workbook = xlwt.Workbook(encoding='utf-8')
-        sheet1 = workbook.add_sheet('UID')
-        # row1 = [u'设备UID']
-        # for i in range(0, len(row1)):
-        #     sheet1.write(0, i, row1[i])
-
-        num = 1
-        updates = []
-        updates_uid = []
-        now_time = int(time.time())
-        for item in uid_qs:
-            uid = item['uid__uid']
-            mac = item['uid__mac']
-            index = mac.rfind(':')
-            sheet1.write(num, 0, mac[0:index])
-            sheet1.write(num, 1, mac[index:])
-            sheet1.write(num, 2, uid)
-            num += 1
-            uidModel = UIDModel(
-                id=item['uid__id'],
-                uid=item['uid__uid'],
-                mac=item['uid__mac'],
-                uid_extra=item['uid__uid_extra'],
-                status=2,
-                add_time=item['uid__add_time'],
-                update_time=now_time,
-                area=item['uid__area']
-            )
-            updates.append(uidModel)
-
-            order_uid = OrderUIDModel(uid=uidModel, order=order, add_time=now_time, update_time=now_time)
-            updates_uid.append(order_uid)
-
-            if len(updates) % 5000 == 0:
-                UIDModel.objects.bulk_update(updates, fields=["status"])
-                OrderUIDModel.objects.bulk_create(updates_uid)
-                updates.clear()
-                updates_uid.clear()
-            # print(item['uid__uid'])
-
-        if len(updates) > 0:
-            UIDModel.objects.bulk_update(updates, fields=["status"])
-            OrderUIDModel.objects.bulk_create(updates_uid)
-            updates.clear()
-            updates_uid.clear()
-
-        UIDModel.objects.bulk_update(updates, fields=["status"])
-        workbook.save(response)
-        return response
-
-    def download_zip(self, uid_qs, order):
-        dir_name = 'static/' + time.strftime('%Y_%m_%d_%H_%M_%S', time.localtime())
-        path = '/'.join((BASE_DIR, dir_name)).replace('\\', '/') + '/'
-        if not os.path.exists(path):
-            os.mkdir(path)
-
-        filename = time.strftime('_%Y_%m_%d_%H_%M_%S', time.localtime())
-        txt_filename = 'UID' + filename + '.txt'
-        excel_filename = 'UID' + filename + '.xls'
-
-        txt_file = open(path + txt_filename, 'w+')
-        workbook = xlwt.Workbook(encoding='utf-8')
-        sheet1 = workbook.add_sheet('UID')
-        num = 1
-
-        updates = []
-        updates_uid = []
-        content = ''
-        now_time = int(time.time())
-        for i in range(len(uid_qs)):
-            # print(item)
-            item = uid_qs[i]
-            uid = item['uid__uid']
-            mac = item['uid__mac']
-            index = mac.rfind(':')
-            tmp = mac[0:index] + '\t' + mac[index:]
-            content += tmp + '\t'
-            content += item['uid__uid'].strip()
-            content += '\r\n'
-
-            sheet1.write(num, 0, mac[0:index])
-            sheet1.write(num, 1, mac[index:])
-            sheet1.write(num, 2, uid)
-            num += 1
-
-            uidModel = UIDModel(
-                id=item['uid__id'],
-                uid=item['uid__uid'],
-                mac=item['uid__mac'],
-                uid_extra=item['uid__uid_extra'],
-                status=2,
-                add_time=item['uid__add_time'],
-                update_time=now_time,
-                area=item['uid__area']
-            )
-            updates.append(uidModel)
-
-            order_uid = OrderUIDModel(uid=uidModel, order=order, add_time=now_time, update_time=now_time)
-            updates_uid.append(order_uid)
-
-            if len(updates) % 5000 == 0:
-                UIDModel.objects.bulk_update(updates, fields=["status"])
-                OrderUIDModel.objects.bulk_create(updates_uid)
-                updates.clear()
-                updates_uid.clear()
-            # print(item['uid__uid'])
-
-        if len(updates) > 0:
-            UIDModel.objects.bulk_update(updates, fields=["status"])
-            OrderUIDModel.objects.bulk_create(updates_uid)
-            updates.clear()
-            updates_uid.clear()
-
-        del updates
-        del updates_uid
-        content = content[0:len(content) - 1]
-        txt_file.write(content)
-        txt_file.close()
-
-        workbook.save(path + excel_filename)
-
-        zip_name = path[0:path.rfind('/')] + '.zip'
-        return self.get_zip(path, os.listdir(path), zip_name)
-
-    def get_zip(self, path, files, zip_name):
-        zp = zipfile.ZipFile(zip_name, 'w', zipfile.ZIP_DEFLATED)
-        for file in files:
-            zp.write(filename=(path + file), arcname=str(file))
-        zp.close()
-
-        response = StreamingHttpResponse(open(zip_name, 'rb'))
-        response['content_type'] = "application/octet-stream"
-        response['Content-Disposition'] = 'attachment; filename=UID' + time.strftime('_%Y_%m_%d_%H_%M_%S',
-                                                                                     time.localtime()) + '.zip'
-        return response
-

+ 0 - 402
Controller/HistoryUIDController.py

@@ -1,402 +0,0 @@
-#!/usr/bin/env python3
-# -*- coding: utf-8 -*-
-import json
-import logging
-import time
-
-from django.db import transaction
-from django.http import StreamingHttpResponse
-from django.utils.decorators import method_decorator
-from django.views import View
-from django.views.decorators.csrf import csrf_exempt
-from django.db.models import Avg,Max,Min,Count,Sum, Q  #   引入函数
-
-from Model.models import UIDModel, UserModel, UserUIDModel, HistoryUIDModel
-from Object.RedisObject import RedisObject
-from Object.ResponseObject import ResponseObject
-from Object.TokenObject import TokenObject
-from Service.ModelService import ModelService
-
-
-class HistoryUIDView(View):
-
-    @method_decorator(csrf_exempt)
-    def dispatch(self, request, *args, **kwargs):
-        return super(HistoryUIDView, self).dispatch(request, *args, **kwargs)
-
-    def get(self, request, *args, **kwargs):
-        request.encoding = 'utf-8'
-        request_dict = request.GET
-        operation = kwargs.get('operation')
-        return self.validate(request_dict, operation)
-
-    def post(self, request, *args, **kwargs):
-        request.encoding = 'utf-8'
-        request_dict = request.POST
-        operation = kwargs.get('operation')
-        return self.validate(request_dict, operation)
-
-    def validate(self, request_dict, operation):
-        token = request_dict.get('token', None)
-        response = ResponseObject()
-
-        token = TokenObject(token)
-        if token.code != 0:
-            return response.json(token.code)
-
-        if operation == 'quantity':
-            return self.do_quantity(request_dict, response)
-        elif operation == 'remove':
-            return self.do_remove(request_dict, response)
-        elif operation == 'download':
-            return self.download_txt(token, response)
-        elif operation == 'list':
-            return self.do_list(request_dict, response)
-        elif operation == 'delete':
-            return self.do_delete(token.userID, request_dict, response)
-        elif operation == 'batchDelete':
-            return self.do_batch_delete(token.userID, request_dict, response)
-        elif operation == 'adminUpdate':
-            return self.do_admin_update(token.userID, request_dict, response)
-        else:
-            return response.json(309)
-
-    # 查询当前可用的UID的数量
-    def do_quantity(self, request_dict, response):
-        token = request_dict.get('token', None)
-
-        token = TokenObject(token)
-        if token.code != 0:
-            return response.json(token.code)
-
-        user_qs = UserModel.objects.filter(id=token.userID)
-        if user_qs.exists():
-            user = user_qs[0]
-            if user.permission == '0':
-                return self.do_admin_quantity(request_dict, response, user.username)
-            else:
-                return self.do_not_admin_quantity(request_dict, response, user.username)
-        else:
-            return response.json(9)
-
-    # 管理员的查询UID数量操作
-    def do_admin_quantity(self, request_dict, response, admin):
-        datas = []
-        domestic = HistoryUIDModel.objects.filter(area=0, status=0).count()
-        foreign = HistoryUIDModel.objects.filter(area=1, status=0).count()
-        item = {}
-        item['isAdmin'] = 1
-        item['domestic'] = domestic
-        item['foreign'] = foreign
-        item['username'] = admin
-        datas.append(item)
-
-        user_qs = UserModel.objects.filter(~Q(Q(permission='0')))
-        for user in user_qs:
-            item = {'isAdmin': 0}
-            result = UserUIDModel.objects.filter(user__id=user.id, uid__status=1, uid__area=0).aggregate(num=Count('uid__status'))
-            item['domestic'] = result['num']
-            result = UserUIDModel.objects.filter(user__id=user.id, uid__status=1, uid__area=1).aggregate(num=Count('uid__status'))
-            item['foreign'] = result['num']
-            item['username'] = user.username
-            datas.append(item)
-
-        return response.json(0, {'data': datas})
-
-    # 非管理员的查询UID数量操作
-    def do_not_admin_quantity(self, request_dict, response, username):
-        user_qs = UserModel.objects.filter(username=username)
-        if user_qs.exists():
-            user = user_qs[0]
-            datas = []
-            item = {'isAdmin': 0}
-            result = UserUIDModel.objects.filter(user__id=user.id, uid__status=1, uid__area=0).aggregate(num=Count('uid__status'))
-            item['domestic'] = result['num']
-            result = UserUIDModel.objects.filter(user__id=user.id, uid__status=1, uid__area=1).aggregate(num=Count('uid__status'))
-            item['foreign'] = result['num']
-            item['username'] = user.username
-            datas.append(item)
-            return response.json(0, {'data': datas})
-        else:
-            return response.json(444)
-
-    # 分配UID
-    @transaction.atomic
-    def do_allot(self, request_dict, response):
-        username = request_dict.get('username', None)
-        quantity = int(request_dict.get('quantity', None))
-        area = request_dict.get('area', None)
-        token = request_dict.get('token', None)
-
-        token = TokenObject(token)
-        if token.code != 0:
-            return response.json(token.code)
-        user = UserModel.objects.get(id=token.userID)
-
-        if not user or '0' not in user.permission:
-            return response.json(404)
-
-        # 要分配的对象
-        allot_user_qs = UserModel.objects.filter(username=username)
-        if not allot_user_qs.exists():
-            return response.json(444, 'username')
-
-        # 取出对应区域可用的UID分配给allot_user
-        uid_qs = HistoryUIDModel.objects.filter(area=area, status=0)
-        count = uid_qs.count()
-        if count < quantity:
-            return response.json(444, '设备UID不足')
-
-        updates = []
-        datas = []
-        count = 0
-        if uid_qs.exists():
-            uid_qs = uid_qs[0:quantity]
-            now_time = int(time.time())
-            savePoint = transaction.savepoint()
-            for item in uid_qs:
-                item.status = 1
-                item.update_time = time.time()
-                user_uid = UserUIDModel()
-                user_uid.uid = item
-                user_uid.user = allot_user_qs[0]
-                user_uid.add_time = now_time
-                user_uid.update_time = now_time
-                datas.append(user_uid)
-                updates.append(item)
-
-                if len(datas) % 5000 == 0:
-                    result = self.do_update(datas, updates, savePoint)
-                    if result != 0:
-                        return response.json(result)
-
-            if len(datas) > 0:
-                result = self.do_update(datas, updates, savePoint)
-                if result != 0:
-                    return response.json(result)
-            redisObject = RedisObject()
-            values = uid_qs.values('uid')
-            print(values)
-            redisObject.set_data(key=token.token, val=json.dumps(list(values)), expire=3600)
-            del datas
-            del updates
-            return response.json(0)
-        else:
-            return response.json(444)
-
-    def do_update(self, datas, updates, savePoint, count=0):
-        try:
-            try:
-                if count == 2:
-                    raise Exception("Invalid level!")
-                UserUIDModel.objects.bulk_create(datas)
-                HistoryUIDModel.objects.bulk_update(updates, fields=['status', 'update_time'])
-                datas.clear()
-                updates.clear()
-            except Exception as e:
-                if savePoint:
-                    transaction.savepoint_rollback(savePoint)
-                djangoLogger = logging.getLogger('django')
-                djangoLogger.exception(repr(e))
-                return 174
-        except Exception as e:
-            return 174
-        return 0
-
-    # 把UID表中的数据移动到HistoryUID表中
-    def do_remove(self, request_dict, response):
-        token = TokenObject(request_dict.get('token', None))
-        id = request_dict.get('id', None)
-        start = request_dict.get('start', None)
-        stop = request_dict.get('stop', None)
-
-        if token.code != 0:
-            return response.json(token.code)
-
-        # 通过userID查找用户,判断是否是管理员
-        user_qs = UserModel.objects.filter(id=token.userID)
-        if user_qs.exists():
-            user = user_qs[0]
-            if user.permission != '0':
-                return response.json(404)
-        else:
-            return response.json(9)
-
-        if id:
-            return self.do_remove_by_id(id, response)
-        elif start and stop:
-            return self.do_bulk_remove(int(start), int(stop), response)
-        else:
-            return response.json(444, 'id,start,stop')
-
-    # 移除单条UID记录,id:记录id
-    def do_remove_by_id(self, id, response):
-        id = int(id)
-        uid_qs = HistoryUIDModel.objects.filter(id=id)
-        if not uid_qs.exists():
-            return response.json(173)
-
-        uid = uid_qs[0]
-        if uid:
-            data = {
-                'uid': uid.uid,
-                'uid_extra': uid.uid_extra,
-                'status': uid.status,
-                'add_time': uid.add_time,
-                'update_time': uid.update_time,
-                'area': uid.area
-            }
-            HistoryUIDModel.objects.create(**data)
-            uid.delete()
-            return response.json(0)
-        else:
-            return response.json(444, 'id')
-
-    # 批量移除UID记录。start:开始的UID记录的id;stop:结束的UID记录的id
-    def do_bulk_remove(self, start, stop, response):
-        uid_qs = UIDModel.objects.filter(id__range=(start, stop))
-        histories = []
-        if uid_qs.exists():
-            for item in uid_qs:
-                histories.append(HistoryUIDModel(
-                    uid=item.uid,
-                    uid_extra=item.uid_extra,
-                    status=item.status,
-                    add_time=item.add_time,
-                    update_time=item.update_time,
-                    area=item.area
-                ))
-                if len(histories) % 5000 == 0:
-                    HistoryUIDModel.objects.bulk_create(histories)
-                    histories.clear()
-            if len(histories) > 0:
-                HistoryUIDModel.objects.bulk_create(histories)
-                histories.clear()
-            uid_qs.delete()
-            return response.json(0)
-        else:
-            return response.json(173)
-
-    def download_txt(self, token, response):
-
-        redisObject = RedisObject()
-        uid_qs = redisObject.get_data(key=token.token)
-
-        if uid_qs is False:
-            return response.json(308)
-
-        uid_qs = json.loads(uid_qs)
-        content = ''
-        for item in uid_qs:
-            # print(item)
-            content += item['uid']
-            content += '\r\n'
-
-        redisObject.del_data(key=token.token)
-
-        content = content[0:len(content) - 1]
-        response = StreamingHttpResponse(content)
-        response['Content-Type'] = 'application/octet-stream'
-        filename = 'uid_need_to_set_up_push.txt'
-        response['Content-Disposition'] = 'attachment;filename=' + filename
-
-        return response
-
-    def do_list(self, request_dict, response):
-        page = request_dict.get('page', None)
-        line = request_dict.get('limit', None)
-        status = request_dict.get('status', None)
-        area = request_dict.get('area', None)
-        start_time = request_dict.get('starttime', None)
-        stop_time = request_dict.get('endtime', None)
-        uid = request_dict.get('uid', None)
-
-        if page and line:
-
-            uid_qs = HistoryUIDModel.objects.filter()
-            res = {
-                'count': 0,
-                'data': []
-            }
-
-            if uid_qs.exists():
-                page = int(page)
-                line = int(line)
-
-                start = (page - 1) * line
-                end = start + line
-
-                if uid:
-                    uid_qs = uid_qs.filter(uid=uid)
-
-                if status:
-                    uid_qs = uid_qs.filter(status=status)
-
-                if area:
-                    uid_qs = uid_qs.filter(area=area)
-
-                if start_time:
-                    uid_qs = uid_qs.filter(update_time__gte=start_time)
-
-                if stop_time:
-                    if stop_time > start:
-                        uid_qs = uid_qs.filter(update_time__lte=stop_time)
-
-                res['count'] = uid_qs.count()
-                uid_qs = uid_qs.values()[start:end]
-
-                res['data'] = list(uid_qs)
-
-            print(res)
-            return response.json(0, res)
-        else:
-            return response.json(444)
-
-    def do_delete(self, userID, request_dict, response):
-        uid = request_dict.get('uid', None)
-        user_qs = UserModel.objects.filter(id=userID)
-
-        if user_qs.exists():
-            user = user_qs[0]
-            if int(user.permission) != 0:
-                return response.json(309)
-
-            HistoryUIDModel.objects.filter(uid=uid).delete()
-            return response.json(0)
-        else:
-            return response.json(309)
-
-    def do_batch_delete(self, userID, request_dict, response):
-        perm = ModelService.check_perm(userID, 0)
-        if not perm:
-            return response.json(309)
-
-        uids = request_dict.get('uidlist', None)
-
-        if uids:
-            uids = json.loads(uids)
-            HistoryUIDModel.objects.filter(uid__in=uids).delete()
-            return response.json(0)
-        else:
-            return response.json(444)
-
-    def do_admin_update(self, userID, request_dict, response):
-        perm = ModelService.check_perm(userID, 0)
-        if not perm:
-            return response.json(309)
-
-        uid = request_dict.get('uid', None)
-        content = request_dict.get('content', None)
-
-        if uid and content:
-            content = json.loads(content)
-            print(content)
-            content['update_time'] = int(time.time())
-            uid_qs = HistoryUIDModel.objects.filter(uid=uid)
-            if uid_qs.exists():
-                uid_qs.update(**content)
-                return response.json(0)
-            else:
-                return response.json(173)
-        else:
-            return response.json(444)

+ 0 - 99
Controller/LogController.py

@@ -1,99 +0,0 @@
-#!/usr/bin/env python3
-# -*- coding: utf-8 -*-
-from django.utils.decorators import method_decorator
-from django.views import View
-from django.views.decorators.csrf import csrf_exempt
-
-from Model.models import LogModel
-from Object.ResponseObject import ResponseObject
-from Object.TokenObject import TokenObject
-
-
-class LogView(View):
-
-    @method_decorator(csrf_exempt)
-    def dispatch(self, request, *args, **kwargs):
-        return super(LogView, self).dispatch(request, *args, **kwargs)
-
-    def get(self, request, *args, **kwargs):
-        request.encoding = 'utf-8'
-        request_dict = request.GET
-        operation = kwargs.get('operation')
-        return self.validate(request_dict, operation)
-
-    def post(self, request, *args, **kwargs):
-        request.encoding = 'utf-8'
-        request_dict = request.POST
-        operation = kwargs.get('operation')
-        return self.validate(request_dict, operation)
-
-    def validate(self, request_dict, operation):
-        token = TokenObject(request_dict.get('token', None))
-        response = ResponseObject()
-
-        if token.code != 0:
-            return response.json(token.code)
-
-        if operation == 'query':
-            return self.do_query(request_dict, token, response)
-        elif operation == 'queryAll':
-            return self.do_query_all(request_dict, token, response)
-        elif operation == 'delete':
-            return self.do_delete(request_dict, response)
-        elif operation == 'adminQuery':
-            return self.do_admin_query(request_dict, token, response)
-        else:
-            return response.json(404)
-
-    def do_query(self, request_dict, token: TokenObject, response):
-        page = request_dict.get('page', None)
-        line = request_dict.get('line', None)
-
-        if page and line:
-            log_qs = LogModel.objects.filter(user__id=token.userID).values('id', 'operation', 'time', 'ip', 'user__username')
-            if log_qs.exists():
-                page = int(page)
-                line = int(line)
-                start = (page - 1) * line
-                count = log_qs.count()
-                data = log_qs[start:(start + line)]
-                return response.json(0, {'count': count, 'data': list(data)})
-            else:
-                return response.json(0, {'count': 0, 'data': []})
-        else:
-            return response.json(444)
-
-    def do_query_all(self, request_dict, token: TokenObject, response: ResponseObject):
-        log_qs = LogModel.objects.filter(user__id=token.userID).values('id', 'operation', 'time', 'ip')
-        if log_qs.exists():
-            count = log_qs.count()
-            return response.json(0, {'count': count, 'data': list(log_qs)})
-        else:
-            return response.json(0, {'count': 0, 'data': []})
-
-    def do_delete(self, request_dict, response):
-        id = request_dict.get('id', None)
-
-        if id:
-            LogModel.objects.filter(id=id).delete()
-            return response.json(0)
-        else:
-            return response.json(444)
-
-    def do_admin_query(self, request_dict, token: TokenObject, response):
-        page = request_dict.get('page', None)
-        line = request_dict.get('limit', None)
-
-        if page and line:
-            log_qs = LogModel.objects.filter().values('id', 'operation', 'time', 'ip', 'user__username')
-            if log_qs.exists():
-                page = int(page)
-                line = int(line)
-                start = (page - 1) * line
-                count = log_qs.count()
-                data = log_qs[start:(start + line)]
-                return response.json(0, {'count': count, 'data': list(data)})
-            else:
-                return response.json(0, {'count': 0, 'data': []})
-        else:
-            return response.json(444)

+ 0 - 104
Controller/OrderTaskController.py

@@ -1,104 +0,0 @@
-#!/usr/bin/env python3
-# -*- coding: utf-8 -*-
-import json
-
-from django.views import View
-
-from Model.models import OrderTaskModel
-from Object.ResponseObject import ResponseObject
-from Object.TokenObject import TokenObject
-from Service.ModelService import ModelService
-
-
-class OrderTaskView(View):
-
-    def get(self, request, *args, **kwargs):
-        request.encoding = 'utf-8'
-        operation = kwargs.get('operation', None)
-        request_dict = request.GET
-        return self.validate(request_dict, operation)
-
-    def post(self, request, *args, **kwargs):
-        request.encoding = 'utf-8'
-        operation = kwargs.get('operation', None)
-        request_dict = request.POST
-        return self.validate(request_dict, operation)
-
-    def validate(self, request_dict, operation):
-
-        token = request_dict.get('token', None)
-
-        response = ResponseObject()
-        token = TokenObject(token)
-
-        if token.code != 0:
-            return response.json(0)
-
-        if operation == 'query':
-            return self.do_query(token.userID, request_dict, response)
-        elif operation == 'update':
-            return self.do_update(token.userID, request_dict, response)
-        elif operation == 'delete':
-            return self.do_delete(token.userID, request_dict, response)
-        else:
-            return response.json(404)
-
-    def do_query(self, userID, request_dict, response):
-        perm = ModelService.check_perm(userID, 0)
-        if not perm:
-            return response.json(309)
-
-        page = request_dict.get('page', None)
-        line = request_dict.get('limit', None)
-
-        if page and line:
-
-            order_task_qs = OrderTaskModel.objects.filter()
-            res = {
-                'count': 0,
-                'data': []
-            }
-            if order_task_qs.exists():
-                page = int(page)
-                line = int(line)
-
-                res['count'] = order_task_qs.count()
-                start = (page - 1) * line
-                end = start + line
-
-                order_task_qs = order_task_qs[start:end].values()
-                res['data'] = list(order_task_qs)
-
-            return response.json(0, res)
-        else:
-            return response.json(444)
-
-    def do_update(self, userID, request_dict, response):
-        perm = ModelService.check_perm(userID, 0)
-        if not perm:
-            return response.json(309)
-
-        id = request_dict.get('id', None)
-        content = request_dict.get('content', None)
-        print(content)
-
-        if id and content:
-            content = json.loads(content)
-            print(content)
-            OrderTaskModel.objects.filter(id=id).update(**content)
-            return response.json(0)
-        else:
-            return response.json(444)
-
-    def do_delete(self, userID, request_dict, response):
-        perm = ModelService.check_perm(userID, 0)
-        if not perm:
-            return response.json(309)
-
-        id = request_dict.get('id', None)
-
-        if id:
-            OrderTaskModel.objects.filter(id=id).delete()
-            return response.json(0)
-        else:
-            return response.json(444)

+ 0 - 107
Controller/SalesController.py

@@ -1,107 +0,0 @@
-#!/usr/bin/env python3
-# -*- coding: utf-8 -*-
-import datetime
-import json
-import random
-
-from django.utils.decorators import method_decorator
-from django.views import View
-from django.views.decorators.csrf import csrf_exempt
-
-from AnsjerUIDManage.config import SALES, ONLINE_DEVICE
-from Object.ResponseObject import ResponseObject
-
-
-class SalesView(View):
-
-    @method_decorator(csrf_exempt)
-    def dispatch(self, request, *args, **kwargs):
-        return super(SalesView, self).dispatch(request, *args, **kwargs)
-
-    def get(self, request, *args, **kwargs):
-        request_dict = request.GET
-        return self.validate(request_dict)
-
-    def post(self, request, *args, **kwargs):
-        request_dict = request.POST
-        return self.validate(request_dict)
-
-    def validate(self, request_dict):
-        year = request_dict.get('year', 0)
-        response = ResponseObject()
-        if year:
-            year = int(year)
-            if year == 0:
-                data = SALES.copy()
-                data[2020] = self.get_last_year_data(SALES[2020])
-                return response.json(0, {'data': self.format_data(data)})
-            elif 2015 < year < 2020:
-                data = {year: SALES[year]}
-                return response.json(0, {'data': self.format_data(data)})
-            elif year == 2020:
-                data = {year: self.get_last_year_data(SALES[year])}
-                return response.json(0, {'data': self.format_data(data)})
-            else:
-                return response.json(444)
-        else:
-            return response.json(444)
-
-    def get_last_year_data(self, data):
-        result = []
-        month = datetime.datetime.now().month
-        print(month)
-        sum = 0
-        for item in data:
-            value = item['value']
-            sale = int(value[0] / 12 * month)
-            sum += sale
-
-        for item in data:
-            tmp = {}
-            tmp['name'] = item['name']
-            value = item['value']
-            sale = int(value[0] / 12 * month)
-            percent = round(sale * 100 / sum, 3)
-
-            tmpValue = []
-            tmpValue.append(sale)
-            tmpValue.append(percent)
-            tmpValue.append(value[2])
-            tmp['value'] = tmpValue
-            result.append(tmp)
-        print(result)
-        return result
-
-    def format_data(self, data: dict):
-        result = []
-        keys = data.keys()
-        for key in keys:
-            tmp = {
-                'time': key,
-                'data': data[key]
-            }
-            result.append(tmp)
-        return result
-
-
-class DeviceOnlineView(View):
-
-    @method_decorator(csrf_exempt)
-    def dispatch(self, request, *args, **kwargs):
-        return super(DeviceOnlineView, self).dispatch(request, *args, **kwargs)
-
-    def get(self, request, *args, **kwargs):
-        request_dict = request.GET
-        return self.validate(request_dict)
-
-    def post(self, request, *args, **kwargs):
-        request_dict = request.POST
-        return self.validate(request_dict)
-
-    def validate(self, request_dict):
-        response = ResponseObject()
-        return response.json(0,{'online': random.randint((0.9 * ONLINE_DEVICE), ONLINE_DEVICE)})
-
-
-
-

+ 0 - 479
Controller/UIDController.py

@@ -1,479 +0,0 @@
-#!/usr/bin/env python3
-# -*- coding: utf-8 -*-
-import json
-import logging
-import time
-
-from django.db import transaction
-from django.http import StreamingHttpResponse
-from django.utils.decorators import method_decorator
-from django.views import View
-from django.views.decorators.csrf import csrf_exempt
-from django.db.models import Avg,Max,Min,Count,Sum, Q  #   引入函数
-
-from Model.models import UIDModel, UserModel, UserUIDModel, HistoryUIDModel
-from Object.RedisObject import RedisObject
-from Object.ResponseObject import ResponseObject
-from Object.TokenObject import TokenObject
-from Service.ModelService import ModelService
-
-
-class UIDView(View):
-
-    @method_decorator(csrf_exempt)
-    def dispatch(self, request, *args, **kwargs):
-        return super(UIDView, self).dispatch(request, *args, **kwargs)
-
-    def get(self, request, *args, **kwargs):
-        request.encoding = 'utf-8'
-        request_dict = request.GET
-        operation = kwargs.get('operation')
-        return self.validate(request_dict, operation)
-
-    def post(self, request, *args, **kwargs):
-        request.encoding = 'utf-8'
-        request_dict = request.POST
-        operation = kwargs.get('operation')
-        return self.validate(request_dict, operation)
-
-    def validate(self, request_dict, operation):
-        token = request_dict.get('token', None)
-        response = ResponseObject()
-
-        token = TokenObject(token)
-        if token.code != 0:
-            return response.json(token.code)
-
-        if operation == 'quantity':
-            return self.do_quantity(request_dict, response)
-        elif operation == 'allot':
-            return self.do_allot(request_dict, response)
-        elif operation == 'remove':
-            return self.do_remove(request_dict, response)
-        elif operation == 'download':
-            return self.download_txt(token, response)
-        elif operation == 'download_1':
-            return self.download_txt_two(token, response)
-        elif operation == 'list':
-            return self.do_list(request_dict, response)
-        elif operation == 'delete':
-            return self.do_delete(token.userID, request_dict, response)
-        elif operation == 'batchDelete':
-            return self.do_batch_delete(token.userID, request_dict, response)
-        elif operation == 'adminUpdate':
-            return self.do_admin_update(token.userID, request_dict, response)
-        elif operation == 'history':
-            return self.do_history(token.userID, request_dict, response)
-        elif operation == 'statistics':
-            return self.do_admin_statistics(token.userID, request_dict, response)
-        else:
-            return response.json(309)
-
-    # 查询当前可用的UID的数量
-    def do_quantity(self, request_dict, response):
-        token = request_dict.get('token', None)
-
-        token = TokenObject(token)
-        if token.code != 0:
-            return response.json(token.code)
-
-        user_qs = UserModel.objects.filter(id=token.userID)
-        if user_qs.exists():
-            user = user_qs[0]
-            if user.permission == '0':
-                return self.do_admin_quantity(request_dict, response, user.username)
-            else:
-                return self.do_not_admin_quantity(request_dict, response, user.username)
-        else:
-            return response.json(9)
-
-    # 管理员的查询UID数量操作
-    def do_admin_quantity(self, request_dict, response, admin):
-        datas = []
-        domestic = UIDModel.objects.filter(area=0, status=0).count()
-        foreign = UIDModel.objects.filter(area=1, status=0).count()
-        item = {}
-        item['isAdmin'] = 1
-        item['domestic'] = domestic
-        item['foreign'] = foreign
-        item['username'] = admin
-        datas.append(item)
-
-        user_qs = UserModel.objects.filter(~Q(Q(permission='0')))
-        for user in user_qs:
-            item = {'isAdmin': 0}
-            result = UserUIDModel.objects.filter(user__id=user.id, uid__status=1, uid__area=0).aggregate(num=Count('uid__status'))
-            item['domestic'] = result['num']
-            result = UserUIDModel.objects.filter(user__id=user.id, uid__status=1, uid__area=1).aggregate(num=Count('uid__status'))
-            item['foreign'] = result['num']
-            item['username'] = user.username
-            datas.append(item)
-
-        return response.json(0, {'data': datas})
-
-    # 非管理员的查询UID数量操作
-    def do_not_admin_quantity(self, request_dict, response, username):
-        user_qs = UserModel.objects.filter(username=username)
-        if user_qs.exists():
-            user = user_qs[0]
-            datas = []
-            item = {'isAdmin': 0}
-            result = UserUIDModel.objects.filter(user__id=user.id, uid__status=1, uid__area=0).aggregate(num=Count('uid__status'))
-            item['domestic'] = result['num']
-            result = UserUIDModel.objects.filter(user__id=user.id, uid__status=1, uid__area=1).aggregate(num=Count('uid__status'))
-            item['foreign'] = result['num']
-            item['username'] = user.username
-            datas.append(item)
-            return response.json(0, {'data': datas})
-        else:
-            return response.json(444)
-
-    # 分配UID
-    @transaction.atomic
-    def do_allot(self, request_dict, response):
-        username = request_dict.get('username', None)
-        quantity = int(request_dict.get('quantity', None))
-        area = request_dict.get('area', None)
-        token = request_dict.get('token', None)
-
-        token = TokenObject(token)
-        if token.code != 0:
-            return response.json(token.code)
-        user = UserModel.objects.get(id=token.userID)
-
-        if not user or '0' not in user.permission:
-            return response.json(404)
-
-        # 要分配的对象
-        allot_user_qs = UserModel.objects.filter(username=username)
-        if not allot_user_qs.exists():
-            return response.json(444, 'username')
-
-        # 取出对应区域可用的UID分配给allot_user
-        uid_qs = UIDModel.objects.filter(area=area, status=0)
-        count = uid_qs.count()
-        if count < quantity:
-            return response.json(444, '设备UID不足')
-
-        updates = []
-        datas = []
-        count = 0
-        if uid_qs.exists():
-            uid_qs = uid_qs[0:quantity]
-            now_time = int(time.time())
-            savePoint = transaction.savepoint()
-            for item in uid_qs:
-                item.status = 1
-                item.update_time = time.time()
-                user_uid = UserUIDModel()
-                user_uid.uid = item
-                user_uid.user = allot_user_qs[0]
-                user_uid.add_time = now_time
-                user_uid.update_time = now_time
-                datas.append(user_uid)
-                updates.append(item)
-
-                if len(datas) % 5000 == 0:
-                    result = self.do_update(datas, updates, savePoint)
-                    if result != 0:
-                        return response.json(result)
-
-            if len(datas) > 0:
-                result = self.do_update(datas, updates, savePoint)
-                if result != 0:
-                    return response.json(result)
-            redisObject = RedisObject()
-            values = uid_qs.values('uid')
-            print(values)
-            redisObject.set_data(key=token.token, val=json.dumps(list(values)), expire=3600)
-            del datas
-            del updates
-            return response.json(0)
-        else:
-            return response.json(444)
-
-    def do_update(self, datas, updates, savePoint, count=0):
-        try:
-            try:
-                UserUIDModel.objects.bulk_create(datas)
-                UIDModel.objects.bulk_update(updates, fields=['status', 'update_time'])
-                datas.clear()
-                updates.clear()
-            except Exception as e:
-                if savePoint:
-                    transaction.savepoint_rollback(savePoint)
-                djangoLogger = logging.getLogger('django')
-                djangoLogger.exception(repr(e))
-                return 174
-        except Exception as e:
-            return 174
-        return 0
-
-    # 把UID表中的数据移动到HistoryUID表中
-    def do_remove(self, request_dict, response):
-        token = TokenObject(request_dict.get('token', None))
-        id = request_dict.get('id', None)
-        start = request_dict.get('start', None)
-        stop = request_dict.get('stop', None)
-
-        if token.code != 0:
-            return response.json(token.code)
-
-        # 通过userID查找用户,判断是否是管理员
-        user_qs = UserModel.objects.filter(id=token.userID)
-        if user_qs.exists():
-            user = user_qs[0]
-            if user.permission != '0':
-                return response.json(404)
-        else:
-            return response.json(9)
-
-        if id:
-            return self.do_remove_by_id(id, response)
-        elif start and stop:
-            return self.do_bulk_remove(int(start), int(stop), response)
-        else:
-            return response.json(444, 'id,start,stop')
-
-    # 移除单条UID记录,id:记录id
-    def do_remove_by_id(self, id, response):
-        id = int(id)
-        uid_qs = UIDModel.objects.filter(id=id)
-        if not uid_qs.exists():
-            return response.json(173)
-
-        uid = uid_qs[0]
-        if uid:
-            data = {
-                'uid': uid.uid,
-                'uid_extra': uid.uid_extra,
-                'status': uid.status,
-                'add_time': uid.add_time,
-                'update_time': uid.update_time,
-                'area': uid.area
-            }
-            HistoryUIDModel.objects.create(**data)
-            uid.delete()
-            return response.json(0)
-        else:
-            return response.json(444, 'id')
-
-    # 批量移除UID记录。start:开始的UID记录的id;stop:结束的UID记录的id
-    def do_bulk_remove(self, start, stop, response):
-        uid_qs = UIDModel.objects.filter(id__range=(start, stop))
-        histories = []
-        if uid_qs.exists():
-            for item in uid_qs:
-                histories.append(HistoryUIDModel(
-                    uid=item.uid,
-                    uid_extra=item.uid_extra,
-                    status=item.status,
-                    add_time=item.add_time,
-                    update_time=item.update_time,
-                    area=item.area
-                ))
-                if len(histories) % 5000 == 0:
-                    HistoryUIDModel.objects.bulk_create(histories)
-                    histories.clear()
-            if len(histories) > 0:
-                HistoryUIDModel.objects.bulk_create(histories)
-                histories.clear()
-            uid_qs.delete()
-            return response.json(0)
-        else:
-            return response.json(173)
-
-    def download_txt(self, token, response):
-
-        redisObject = RedisObject()
-        uid_qs = redisObject.get_data(key=token.token)
-
-        if uid_qs is False:
-            return response.json(308)
-
-        uid_qs = json.loads(uid_qs)
-        content = ''
-        for item in uid_qs:
-            # print(item)
-            content += item['uid']
-            content += '\r\n'
-
-        redisObject.del_data(key=token.token)
-
-        content = content[0:len(content) - 1]
-        response = StreamingHttpResponse(content)
-        response['Content-Type'] = 'application/octet-stream'
-        filename = 'uid_need_to_set_up_push.txt'
-        response['Content-Disposition'] = 'attachment;filename=' + filename
-
-        return response
-
-    def download_txt_two(self, token, response):
-
-        uid_qs = UIDModel.objects.filter(status=1)
-
-        if not uid_qs.exists():
-            return response.json(308)
-
-        uid_qs = uid_qs.values()
-        content = ''
-        for item in uid_qs:
-            # print(item)
-            content += item['uid']
-            content += '\r\n'
-
-        content = content[0:len(content) - 1]
-        response = StreamingHttpResponse(content)
-        response['Content-Type'] = 'application/octet-stream'
-        filename = 'uid_need_to_set_up_push.txt'
-        response['Content-Disposition'] = 'attachment;filename=' + filename
-
-        return response
-
-    def do_list(self, request_dict, response):
-        page = request_dict.get('page', None)
-        line = request_dict.get('limit', None)
-        status = request_dict.get('status', None)
-        area = request_dict.get('area', None)
-        start_time = request_dict.get('starttime', None)
-        stop_time = request_dict.get('endtime', None)
-        uid = request_dict.get('uid', None)
-
-        if page and line:
-
-            uid_qs = UIDModel.objects.filter()
-            res = {
-                'count': 0,
-                'data': []
-            }
-
-            if uid_qs.exists():
-                page = int(page)
-                line = int(line)
-
-                start = (page - 1) * line
-                end = start + line
-
-                if uid:
-                    uid_qs = uid_qs.filter(uid=uid)
-
-                if status:
-                    uid_qs = uid_qs.filter(status=status)
-
-                if area:
-                    uid_qs = uid_qs.filter(area=area)
-
-                if start_time:
-                    uid_qs = uid_qs.filter(update_time__gte=start_time)
-
-                if stop_time:
-                    if stop_time > start:
-                        uid_qs = uid_qs.filter(update_time__lte=stop_time)
-
-                res['count'] = uid_qs.count()
-                uid_qs = uid_qs.values()[start:end]
-
-                res['data'] = list(uid_qs)
-
-            print(res)
-            return response.json(0, res)
-        else:
-            return response.json(444)
-
-    def do_delete(self, userID, request_dict, response):
-        uid = request_dict.get('uid', None)
-        user_qs = UserModel.objects.filter(id=userID)
-
-        if user_qs.exists():
-            user = user_qs[0]
-            if int(user.permission) != 0:
-                return response.json(309)
-
-            UIDModel.objects.filter(uid=uid).delete()
-            return response.json(0)
-        else:
-            return response.json(309)
-
-    def do_batch_delete(self, userID, request_dict, response):
-        perm = ModelService.check_perm(userID, 0)
-        if not perm:
-            return response.json(309)
-
-        uids = request_dict.get('uidlist', None)
-
-        if uids:
-            uids = json.loads(uids)
-            UIDModel.objects.filter(uid__in=uids).delete()
-            return response.json(0)
-        else:
-            return response.json(444)
-
-    def do_admin_update(self, userID, request_dict, response):
-        perm = ModelService.check_perm(userID, 0)
-        if not perm:
-            return response.json(309)
-
-        uid = request_dict.get('uid', None)
-        content = request_dict.get('content', None)
-        print(content)
-
-        if uid and content:
-            content = json.loads(content)
-            print(content)
-            content['update_time'] = int(time.time())
-            uid_qs = UIDModel.objects.filter(uid=uid)
-            if uid_qs.exists():
-                uid_qs.update(**content)
-                return response.json(0)
-            else:
-                return response.json(173)
-        else:
-            return response.json(444)
-
-    def do_history(self, userID, request_dict, response):
-        perm = ModelService.check_perm(userID, 0)
-        if not perm:
-            return response.json(309)
-
-        uid_qs = UIDModel.objects.filter(status=2)
-
-        if uid_qs.exists():
-
-            uids = []
-            for uid in uid_qs:
-                uids.append(uid)
-
-                if (len(uids) % 5000) == 0:
-                    HistoryUIDModel.objects.bulk_create(uids)
-                    uids.clear()
-
-            if len(uids) > 0:
-                HistoryUIDModel.objects.bulk_create(uids)
-                uids.clear()
-
-        uid_qs.delete()
-
-        return response.json(0)
-
-    def do_admin_statistics(self, userID, request_dict, response):
-        perm = ModelService.check_perm(userID, 0)
-        if not perm:
-            return response.json(309)
-
-        uid_not_use = UIDModel.objects.filter(status=0).count()
-
-        uid_allocated = UIDModel.objects.filter(status=1).count()
-
-        uid_has_use = UIDModel.objects.filter(status=2).count()
-
-        total = uid_not_use + uid_allocated + uid_has_use
-
-        res = {
-            'uid_not_use': uid_not_use,
-            'uid_allocated': uid_allocated,
-            'uid_has_use': uid_has_use,
-            'total': total
-        }
-
-        return response.json(0, res)
-

+ 0 - 296
Controller/UserController.py

@@ -1,296 +0,0 @@
-#!/usr/bin/env python3
-# -*- coding: utf-8 -*-
-import time
-
-from django.db.models import Q
-from django.utils.decorators import method_decorator
-from django.views import View
-from django.views.decorators.csrf import csrf_exempt
-
-from Model.models import UserModel
-from Object.ResponseObject import ResponseObject
-from Object.TokenObject import TokenObject
-from Service.ModelService import ModelService
-
-
-class UserView(View):
-
-    @method_decorator(csrf_exempt)
-    def dispatch(self, request, *args, **kwargs):
-        return super(UserView, self).dispatch(request, *args, **kwargs)
-
-    def get(self, request, *args, **kwargs):
-        # print('get')
-        request.encoding = 'utf-8'
-        request_dict = request.GET
-        operation = kwargs.get('operation')
-        return self.validation(request_dict, operation)
-
-    def post(self, request, *args, **kwargs):
-        request.encoding = 'utf-8'
-        request_dict = request.POST
-        operation = kwargs.get('operation')
-        return self.validation(request_dict, operation)
-
-    def validation(self, request_dict, operation):
-
-        if operation == 'login':
-            return self.login(request_dict)
-        elif operation == 'logout':
-            return self.logout(request_dict)
-        else:
-            token = request_dict.get('token', None)
-
-            token = TokenObject(token)
-            response = ResponseObject()
-            if token.code != 0:
-                return response.json(token.code)
-
-            if operation == 'query':
-                return self.do_query(request_dict)
-            elif operation == 'modify':
-                return self.do_modify_password(request_dict)
-            elif operation == 'list':
-                return self.do_list(request_dict)
-            elif operation == 'adminAdd':
-                return self.do_admin_add(token.userID, request_dict, response)
-            elif operation == 'adminDelete':
-                return self.do_admin_delete(token.userID, request_dict, response)
-            elif operation == 'adminUpdate':
-                return self.do_admin_update(token.userID, request_dict, response)
-            elif operation == 'adminReset':
-                return self.do_admin_reset(token.userID, request_dict, response)
-            else:
-                return ResponseObject().json(309)
-
-    def login(self, request_dict):
-        username = request_dict.get('username', None)
-        password = request_dict.get('password', None)
-
-        response = ResponseObject()
-
-        if username is None or password is None:
-            return response.json(444)
-
-        user = UserModel.objects.filter(username=username)
-        if user.exists():
-            if user[0].password != password:
-                return response.json(99)
-            else:
-                token = TokenObject()
-                res = token.generate({'userID': user[0].id})
-                res['permission'] = user[0].permission
-                res['username'] = user[0].username
-                user[0].online = 1
-                update = {
-                    'online': 1
-                }
-                user.update(**update)
-                return response.json(0, res)
-        else:
-            return response.json(99)
-
-    def do_query(self, request_dict):
-        # print('do_query')
-        token = TokenObject(request_dict.get('token', None))
-        # page = request_dict.get('page', None)
-        # line = request_dict.get('line', None)
-        # username = request_dict.get('username', None)
-        response = ResponseObject()
-
-        if token.code != 0:
-            return response.json(token.code)
-
-        # if username:
-        #     user_qs = UserModel.objects.filter(username__icontains=username)
-        #     if user_qs.exists():
-        #         users = list(user_qs.values('username'))
-        #         return response.json(0, {'data': users})
-        #     else:
-        #         return response.json(0, {'data': []})
-        # elif page and line:
-        #     print('query_page')
-        #     user_qs = UserModel.objects.filter(id=token.userID)
-        #     if user_qs.exists():
-        #         user = user_qs[0]
-        #         if user.permission == '0':
-        #             return self.do_query_pagination(int(page), int(line), response)
-        #         else:
-        #             return response.json(404)
-        #     else:
-        #         return response.json(9)
-
-        user_qs = UserModel.objects.filter(~Q(Q(permission='0'))).values('id', 'username')
-
-        return response.json(0, {'data': list(user_qs)})
-
-    def do_query_pagination(self, page, line, response):
-        # print('query start')
-        user_qs = UserModel.objects.filter().values()
-        if user_qs.exists():
-            count = user_qs.count()
-            start = (page - 1) * line
-            end = start + line
-            users = list(user_qs[start:end])
-            # print('query end')
-            return response.json(0, {'count': count, 'data': users})
-        else:
-            return response.json(0, {'count': 0, 'data': []})
-
-    def do_modify_password(self, request_dict):
-        token = request_dict.get('token', None)
-        old_password = request_dict.get('oldPassword', None)
-        new_password = request_dict.get('newPassword', None)
-        token = TokenObject(token)
-
-        response = ResponseObject()
-        if token.code != 0:
-            return response.json(token.code)
-
-        if old_password and new_password:
-            user_qs = UserModel.objects.filter(id=token.userID)
-            if user_qs.exists():
-                if user_qs[0].password != old_password:
-                    return response.json(47)
-                user = {
-                    'password': new_password
-                }
-                user_qs.update(**user)
-                return response.json(0)
-            else:
-                return response.json(9)
-        else:
-            return response.json(444)
-
-    def logout(self, request_dict):
-        token = request_dict.get('token', None)
-        token = TokenObject(token)
-        response = ResponseObject()
-        if token.code != 0:
-            return response.json(0)
-
-        user_qs = UserModel.objects.filter(id=token.userID)
-        if user_qs.exists():
-            user = {
-                'online': 0
-            }
-            user_qs.update(**user)
-            return response.json(0)
-        else:
-            return response.json(0)
-
-    def do_list(self, request_dict):
-        token = request_dict.get('token', None)
-
-        response = ResponseObject()
-        token = TokenObject(token)
-        if token.code != 0:
-            return response.json(token.code)
-
-        page = request_dict.get('page', None)
-        line = request_dict.get('limit', None)
-
-        if page and line:
-            user_qs = UserModel.objects.filter()
-
-            res = {
-                'count': user_qs.count(),
-                'data': []
-            }
-            if user_qs.exists():
-                page = int(page)
-                line = int(line)
-
-                start = (page - 1) * line
-                end = start + line
-
-                user_qs = user_qs[start:end].values('id', 'username', 'permission', 'phone', 'login_time', 'add_time')
-
-                res['data'] = list(user_qs)
-            return response.json(0, res)
-        else:
-            return response.json(444)
-
-    def do_admin_add(self, userID, request_dict, response):
-        perm = ModelService.check_perm(userID, 0)
-        if not perm:
-            return response.json(309)
-
-        print(request_dict)
-        username = request_dict.get('username', None)
-        password = request_dict.get('password', None)
-        phone = request_dict.get('phone', None)
-        role = request_dict.get('role', None)
-
-        if username and password and role:
-            user = UserModel()
-            user.username = username
-            user.password = password
-            user.permission = role
-            user.phone = phone
-            user.add_time = int(time.time())
-            user.save()
-            return response.json(0)
-        else:
-            return response.json(444)
-
-    def do_admin_delete(self, userID, request_dict, response):
-        perm = ModelService.check_perm(userID, 0)
-        if not perm:
-            return response.json(309)
-
-        username = request_dict.get('username', None)
-
-        if username:
-            user_qs = UserModel.objects.filter(username=username)
-            if user_qs.exists():
-                user_qs.delete()
-                return response.json(0)
-            else:
-                return response.json(9)
-        else:
-            return response.json(444)
-
-    def do_admin_update(self, userID, request_dict, response):
-        perm = ModelService.check_perm(userID, 0)
-        if not perm:
-            return response.json(309)
-
-        username = request_dict.get('username', None)
-        role = request_dict.get('role', None)
-        password = request_dict.get('password', None)
-        phone = request_dict.get('phone', None)
-
-        if username:
-            update_data = {}
-
-            if role:
-                update_data['permission'] = role
-
-            if password:
-                update_data['password'] = password
-
-            if phone:
-                update_data['phone'] = phone
-
-            UserModel.objects.filter(username=username).update(**update_data)
-            return response.json(0)
-        else:
-            return response.json(444)
-
-    def do_admin_reset(self, userID, request_dict, response):
-        perm = ModelService.check_perm(userID, 0)
-        if not perm:
-            return response.json(309)
-
-        username = request_dict.get('username', None)
-
-        if username:
-            user_qs = UserModel.objects.filter(username=username)
-            if user_qs.exists():
-                user_qs.update(password='123456')
-                return response.json(0)
-            else:
-                return response.json(9)
-        else:
-            return response.json(444)

+ 0 - 0
Model/__init__.py


+ 0 - 3
Model/admin.py

@@ -1,3 +0,0 @@
-from django.contrib import admin
-
-# Register your models here.

+ 0 - 5
Model/apps.py

@@ -1,5 +0,0 @@
-from django.apps import AppConfig
-
-
-class ModelConfig(AppConfig):
-    name = 'Model'

+ 0 - 135
Model/models.py

@@ -1,135 +0,0 @@
-from django.db import models
-
-# Create your models here.
-
-
-class UserModel(models.Model):
-    id = models.AutoField(primary_key=True)
-    username = models.CharField(unique=True, max_length=128, null=False, verbose_name='用户名')
-    password = models.CharField(max_length=128, null=False, verbose_name='密码')
-    permission = models.CharField(max_length=24, null=False, verbose_name='权限')
-    login_time = models.IntegerField(blank=True, default=0, verbose_name='登录时间')
-    online = models.SmallIntegerField(default=0, verbose_name='是否在线')
-    phone = models.CharField(max_length=11, default='', verbose_name='手机号')
-    add_time = models.IntegerField(default=0, verbose_name='添加时间')
-
-    class Meta:
-        verbose_name = '用户表'
-        verbose_name_plural = verbose_name
-        db_table = 'user'
-
-
-class UIDModel(models.Model):
-    id = models.AutoField(primary_key=True)
-    uid = models.CharField(max_length=20, null=False, db_index=True, unique=True, verbose_name='设备id')
-    mac = models.CharField(max_length=17, null=False, default='', verbose_name='设备id对应的mac地址')
-    uid_extra = models.TextField(default='', verbose_name='uid的额外描述')
-    status = models.SmallIntegerField(default=0, verbose_name='使用状态')
-    add_time = models.IntegerField(default=0, verbose_name='添加时间')
-    update_time = models.IntegerField(default=0, verbose_name='更新时间')
-    area = models.SmallIntegerField(default=0, verbose_name='区域')  #0:国内;1:国外
-
-    class Meta:
-        ordering = ('-add_time',)
-        verbose_name = 'uid表'
-        verbose_name_plural = verbose_name
-        db_table = 'uid'
-
-
-class UserUIDModel(models.Model):
-    id = models.AutoField(primary_key=True)
-    user = models.ForeignKey(UserModel, to_field='id', on_delete=models.CASCADE, verbose_name='关联用户表id')
-    uid = models.ForeignKey(UIDModel, to_field='id', on_delete=models.CASCADE, verbose_name='关联uid表id')
-    add_time = models.IntegerField(default=0, verbose_name='添加时间')
-    update_time = models.IntegerField(default=0, verbose_name='更新时间')
-
-    class Meta:
-        verbose_name = '用户与UID的关联表'
-        verbose_name_plural = verbose_name
-        db_table = 'user_uid'
-
-
-class PermissionModel(models.Model):
-    id = models.AutoField(primary_key=True)
-    type = models.SmallIntegerField(null=False, verbose_name='权限枚举')
-    description = models.TextField(default='', verbose_name='权限描述')
-
-    class Meta:
-        verbose_name = '权限表'
-        verbose_name_plural = verbose_name
-        db_table = 'permission'
-
-
-class LogModel(models.Model):
-    id = models.AutoField(primary_key=True)
-    operation = models.CharField(max_length=100, default='', verbose_name='操作描述')
-    time = models.IntegerField(default=0, verbose_name='操作时间')
-    ip = models.CharField(default='', max_length=24, verbose_name='用户ip')
-    user = models.ForeignKey(UserModel, to_field='id', on_delete=models.CASCADE, verbose_name='关联用户id')
-    content = models.TextField(default='', verbose_name='请求参数')
-    status = models.IntegerField(default=0, verbose_name='请求状态')
-    url = models.CharField(max_length=150, default='', verbose_name='请求路径')
-
-    class Meta:
-        ordering = ('-time',)
-        verbose_name = '日志表'
-        verbose_name_plural = verbose_name
-        db_table = 'log'
-
-
-class HistoryUIDModel(models.Model):
-    id = models.AutoField(primary_key=True)
-    uid = models.CharField(max_length=20, null=False, db_index=True, verbose_name='设备id')
-    uid_extra = models.TextField(default='', verbose_name='uid的额外描述')
-    status = models.SmallIntegerField(default=0, verbose_name='使用状态')
-    add_time = models.IntegerField(default=0, verbose_name='添加时间')
-    update_time = models.IntegerField(default=0, verbose_name='更新时间')
-    area = models.SmallIntegerField(default=0, verbose_name='区域')  # 0:国内;1:国外
-
-    class Meta:
-        verbose_name = '历史UID表'
-        verbose_name_plural = verbose_name
-        db_table = 'history_uid'
-
-
-class MacModel(models.Model):
-    id = models.AutoField(primary_key=True)
-    value = models.CharField(max_length=17, null=False, verbose_name='最新的mac地址')
-    is_active = models.BooleanField(default=True, verbose_name='当前mac地址是否可用')
-    add_time = models.IntegerField(default=0, verbose_name='添加时间')
-    update_time = models.IntegerField(default=0, verbose_name='更新时间')
-
-    class Meta:
-        verbose_name = '最新的mac地址表'
-        verbose_name_plural = verbose_name
-        db_table = 'tb_mac'
-
-
-class OrderTaskModel(models.Model):
-    id = models.AutoField(primary_key=True)
-    order_number = models.CharField(max_length=32, verbose_name='订单号')
-    board = models.CharField(max_length=32, verbose_name='主板')
-    plan = models.CharField(max_length=32, verbose_name='配置方案')
-    checksum = models.CharField(max_length=32, verbose_name='校验和')
-    ic_model = models.CharField(max_length=32, verbose_name='ic型号')
-    quantity = models.IntegerField(default=0, verbose_name='通知单上的生成数量')
-    add_time = models.IntegerField(default=0, verbose_name='添加时间')
-
-    class Meta:
-        db_table = 'order_task'
-        verbose_name = '订单任务表'
-        verbose_name_plural = verbose_name
-
-
-class OrderUIDModel(models.Model):
-    id = models.AutoField(primary_key=True)
-    uid = models.ForeignKey(UIDModel, to_field='id', on_delete=models.CASCADE, verbose_name='关联uid表')
-    order = models.ForeignKey(OrderTaskModel, to_field='id', on_delete=models.CASCADE, verbose_name='关联订单任务表')
-    add_time = models.IntegerField(default=0, verbose_name='添加时间')
-    update_time = models.IntegerField(default=0, verbose_name='更新时间')
-
-    class Meta:
-        db_table = 'order_uid'
-        verbose_name = '订单与uid关联表'
-        verbose_name_plural = verbose_name
-

+ 0 - 3
Model/tests.py

@@ -1,3 +0,0 @@
-from django.test import TestCase
-
-# Create your tests here.

+ 0 - 3
Model/views.py

@@ -1,3 +0,0 @@
-from django.shortcuts import render
-
-# Create your views here.

+ 0 - 83
Object/RedisObject.py

@@ -1,83 +0,0 @@
-#!/usr/bin/env python3  
-# -*- coding: utf-8 -*-  
-"""
-@Copyright (C) ansjer cop Video Technology Co.,Ltd.All rights reserved.
-@AUTHOR: ASJRD018
-@NAME: AnsjerOA
-@software: PyCharm
-@DATE: 2018/8/8 17:00
-@Version: python3.6
-@MODIFY DECORD:ansjer dev
-@file: RedisObject.py
-@Contact: chanjunkai@163.com
-"""
-import redis
-
-from AnsjerUIDManage.config import SERVER_HOST
-from AnsjerUIDManage.config import SERVER_TYPE
-
-# SERVER_HOST = '192.168.136.45'
-
-'''
-db=3  -> 统计在线人数用
-'''
-
-
-class RedisObject:
-
-    def __init__(self, db=0, SERVER_HOST = SERVER_HOST):
-        self.POOL = redis.ConnectionPool(host=SERVER_HOST, port=6379, db=db)
-        self.CONN = redis.Redis(connection_pool=self.POOL)
-
-    def set_data(self, key, val, expire=0):
-        try:
-            self.CONN.set(key, val)
-            if expire > 0:
-                self.CONN.expire(key, expire)
-        except Exception as e:
-            return False
-        else:
-            return True
-
-    def get_data(self, key):
-        try:
-            val = self.CONN.get(key)
-        except Exception as e:
-            print(repr(e))
-            return False
-        else:
-            if val:
-                return val.decode('utf-8')
-            else:
-                return False
-
-    def del_data(self, key):
-        try:
-            val = self.CONN.delete(key)
-        except Exception as e:
-            print(repr(e))
-            return False
-        else:
-            return True
-
-    def get_size(self):
-        return self.CONN.dbsize()
-
-    # 向列表插入数据
-    def rpush(self, name, val):
-        self.CONN.rpush(name, val)
-
-    # 获取列表长度
-    def llen(self, name):
-        return self.CONN.llen(name=name)
-
-    # 获取列表所有数据
-    def lrange(self, name, start, end):
-        return self.CONN.lrange(name, start, end)
-
-    def get_ttl(self, key):
-        ttl = self.CONN.ttl(key)
-        if ttl:
-            return ttl
-        else:
-            return 0

+ 0 - 105
Object/ResponseObject.py

@@ -1,105 +0,0 @@
-from django.shortcuts import HttpResponse
-import simplejson as json
-
-
-class ResponseObject(object):
-
-    def __init__(self, lang='cn'):
-        self.lang = lang
-
-    def data(self, code, res={}):
-        data_cn = {
-            0: '成功',
-            5: '请一分钟后再尝试',
-            8: '用户账号已存在',
-            9: '用户账号不存在',
-            10: res,
-            42: '两次输入的新密码错误',
-            43: '客户端服务器已关闭,请下载新版本使用',
-            44: '系统错误,发送邮件失败',
-            45: '系统错误,生成令牌出错!',
-            46: '系统错误,发送短信失败!',
-            47: '旧密码不正确',
-            74: '关联旧用户失败!',
-            79: '您已经申请过重置密码,请到邮箱进行确认!',
-            89: '您已经获得了验证码,请在10分钟后检查或再次确认。',
-            99: '账户或密码错误',
-            101: '手机的用户账号已经存在!',
-            102: '手机的用户账号不存在!',
-            103: '邮箱用户帐户已经存在!',
-            104: '邮箱用户帐户不存在!',
-            107: '用户名格式不符合规则!',
-            108: '邮箱格式不符合规则!',
-            110: '因为用户未激活,用户是无效用户!',
-            111: '您输入的密码不正确!',
-            120: '验证码已过期或不存在、请重新获得验证码!',
-            121: '验证码错了!',
-            138: '手机格式不符合规则!',
-            173: '数据不存在!',
-            174: '数据已存在',
-            175: 'mac地址已用完',
-            305: '令牌格式是错误的,相关参数是不存在的!',
-            307: '令牌已过期!',
-            308: '此次下载已失效',
-            309: '你没有权限访问',
-            404: 'You don not have permission to access this!',
-            444: '请确认参数的正确性!',
-            1112: '您输入的两次密码不一致!',
-            208: '只能预定当天的或者以后的!',
-        }
-        data_en = {
-            0: 'Success',
-            5: 'Please try again one minute later!',
-            8: 'User accounts already exist',
-            9: 'User accounts is not exist',
-            10: res,
-            42: 'The new password entered twice is incorrect',
-            43: 'The client server is closed. Please download the new version for use',
-            44: 'System error,send email fail!',
-            45: 'System error,generate token fail!',
-            46: 'System error, sending SMS failed!',
-            47: 'Old password is incorrect',
-            74: 'Failed to connect old users!',
-            79: 'You have applied for reset password, please go to email for confirmation!',
-            89: 'You have already obtained the verification code, please check it or get it again after 10 minutes.',
-            99: ' ERROR Incorrect account or password',
-            101: 'The user account of the mobile phone has already existed!',
-            102: 'The user account of the mobile phone does not exist!',
-            103: 'The mailbox user account has already existed!',
-            104: 'The mailbox user account does not exist!',
-            107: 'The username format does not conform to the rules!',
-            108: 'The mailbox format does not conform to the rules! ',
-            110: 'Because the user is not activated, the user is an invalid user!',
-            111: 'The password you entered is incorrect!',
-            120: 'The captcha has expired or does not exist, please obtain the captcha again!',
-            121: 'The verification code is wrong!',
-            138: 'The phone format does not conform to the rules! ',
-            173: 'Data does not exists!',
-            174: 'Data already exists',
-            175: 'MAC address has been used up',
-            305: 'The Token format is wrong and the related parameter is None!',
-            307: 'The Token has expired!',
-            308: 'This download has expired!',
-            309: 'You have no access',
-            404: 'You don not have permission to access this!',
-            444: 'Please confirm the correctness of the parameters!',
-            1112: 'The two passwords you entered do not match!',
-        }
-
-        if self.lang == 'cn':
-            msg = data_cn
-        else:
-            msg = data_en
-        try:
-            message = msg[code]
-        except Exception as e:
-            message = '系统错误,code不存在'
-        return {'code': code, 'msg': message, 'res': res}
-
-    def formal(self, code, res={}):
-        formal_data = self.data(code, res)
-        return json.dumps(formal_data,ensure_ascii=False)
-
-    def json(self, code, res={}):
-        result = self.formal(code, res)
-        return HttpResponse(result)

+ 0 - 122
Object/TokenObject.py

@@ -1,122 +0,0 @@
-#!/usr/bin/env python3  
-# -*- coding: utf-8 -*-  
-"""
-@Copyright (C) ansjer cop Video Technology Co.,Ltd.All rights reserved.
-@AUTHOR: ASJRD018
-@NAME: AnsjerOA
-@software: PyCharm
-@DATE: 2018/8/13 15:36
-@Version: python3.6
-@MODIFY DECORD:ansjer dev
-@file: TokenObject.py
-@Contact: chanjunkai@163.com
-"""
-from AnsjerUIDManage.config import OAUTH_ACCESS_TOKEN_SECRET, OAUTH_REFRESH_TOKEN_SECRET, OAUTH_ACCESS_TOKEN_TIME, \
-    OAUTH_REFRESH_TOKEN_TIME
-import jwt, time
-from Object.RedisObject import RedisObject
-
-
-class TokenObject:
-
-    def __init__(self, token=None):
-        self.token = token
-        self.lang = None
-        self.userID = None
-        self.user = ''
-        self.code = 0
-        # 令牌校验
-        self.valid()
-
-    def valid(self):
-        if self.token is None:
-            self.code = 309
-            return
-        try:
-            res = jwt.decode(self.token, OAUTH_ACCESS_TOKEN_SECRET, algorithms='HS256')
-            # print(res)
-            self.userID = res.get('userID', None)
-            self.lang = res.get('lang', None)
-            self.user = res.get('user', '')
-            # 刷新登录时间
-            # if self.userID:
-            #     print(self.user)
-            #     redisObj = RedisObject(db=3)
-            #     redisObj.set_data(key=self.userID, val=self.user, expire=300)
-
-        except jwt.ExpiredSignatureError as e:
-            print('过期')
-            print(repr(e))
-            self.code = 309
-            return
-        except Exception as e:
-            self.code = 309
-            return
-        else:
-            if not self.userID:
-                self.code = 309
-                return
-            else:
-                if self.userID:
-                    self.code = 0
-                    return res
-                else:
-                    self.code = 309
-                    return
-    # token加密
-    def generate(self, data={}):
-        try:
-            access_expire = int(OAUTH_ACCESS_TOKEN_TIME.total_seconds())
-            refresh_expire = int(OAUTH_REFRESH_TOKEN_TIME.total_seconds())
-            now_stamp = int(time.time())
-            access_data = data
-            refresh_data = data
-            access_data['exp'] = access_expire + now_stamp
-            refresh_data['exp'] = refresh_expire + now_stamp
-            access_token = jwt.encode(access_data,
-                                      OAUTH_ACCESS_TOKEN_SECRET,
-                                      algorithm='HS256')
-            refresh_token = jwt.encode(
-                refresh_data,
-                OAUTH_REFRESH_TOKEN_SECRET,
-                algorithm='HS256')
-            res = {
-                'access_token': access_token.decode('utf-8'),
-                'access_expire': access_expire,
-                'refresh_expire': refresh_expire,
-                'refresh_token': refresh_token.decode('utf-8'),
-            }
-        except Exception as e:
-            self.code = 309
-            print(repr(e))
-        else:
-            self.code = 0
-            return res
-
-    def refresh(self):
-        if not self.token:
-            self.code = 309
-            return
-        try:
-            res = jwt.decode(self.token, OAUTH_REFRESH_TOKEN_SECRET, algorithms='HS256')
-        except jwt.ExpiredSignatureError as e:
-            print('过期')
-            print(repr(e))
-            self.code = 309
-        except Exception as e:
-            self.code = 309
-            print(repr(e))
-        else:
-            self.code = 0
-            userID = res.get('userID', '')
-            user = res.get('user', '')
-            lang = self.lang
-            refreshRes = self.generate(data={'userID': userID, 'lang':lang , 'user': user})
-            return refreshRes
-
-# import jwt
-#
-#
-# token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySUQiOiIxNTMzODg0NDE4NTE5MTM4MDAxMzgwMDAiLCJleHAiOjE1NTU1NTEwNjUsInVzZXIiOiIxMTFAcXEuY29tIiwibGFuZyI6ImVuIn0.waPlfIBucSA7rFfnsxOKIVJ_cL6xiP33cAiz1IDoteY'
-# res = jwt.decode(token, 'a+jbgnw%@1%zy^=@dn62%', algorithms='HS256')
-# print(res)

+ 0 - 262
Service/CommonService.py

@@ -1,262 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-import time
-from pathlib import Path
-from random import Random
-import ipdb
-import simplejson as json
-from django.core import serializers
-from django.utils import timezone
-from pyipip import IPIPDatabase
-from AnsjerUIDManage.config import BASE_DIR, UNICODE_ASCII_CHARACTER_SET
-
-
-# 复用性且公用较高封装代码在这
-class CommonService:
-    # 添加模糊搜索
-    @staticmethod
-    def get_kwargs(data={}):
-        kwargs = {}
-        for (k, v) in data.items():
-            if v is not None and v != u'':
-                kwargs[k + '__icontains'] = v
-        return kwargs
-
-    # 定义静态方法
-    # 格式化query_set转dict
-    @staticmethod
-    def qs_to_dict(query_set):
-        sqlJSON = serializers.serialize('json', query_set)
-        sqlList = json.loads(sqlJSON)
-        sqlDict = dict(zip(["datas"], [sqlList]))
-        return sqlDict
-
-    # 获取文件大小
-    @staticmethod
-    def get_file_size(file_path='', suffix_type='', decimal_point=0):
-
-        # for x in ['bytes', 'KB', 'MB', 'GB', 'TB']:
-        # path = Path() / 'D:/TestServer/123444.mp4'
-        path = Path() / file_path
-        size = path.stat().st_size
-        mb_size = 0.0
-        if suffix_type == 'MB':
-            mb_size = size / 1024.0 / 1024.0
-        if decimal_point != 0:
-            mb_size = round(mb_size, decimal_point)
-        return mb_size
-
-    @staticmethod
-    def get_param_flag(data=[]):
-        # print(data)
-        flag = True
-        for v in data:
-            if v is None:
-                flag = False
-                break
-        return flag
-
-    @staticmethod
-    def get_ip_address(request):
-        """
-        获取ip地址
-        :param request:
-        :return:
-        """
-        try:
-            real_ip = request.META['HTTP_X_FORWARDED_FOR']
-            clientIP = real_ip.split(",")[0]
-        except:
-            try:
-                clientIP = request.META['REMOTE_ADDR']
-            except Exception as e:
-                clientIP = ''
-        return clientIP
-
-    # @获取一天每个小时的datetime.datetime
-    @staticmethod
-    def getTimeDict(times):
-        time_dict = {}
-        t = 0
-        for x in range(24):
-            if x < 10:
-                x = '0' + str(x)
-            else:
-                x = str(x)
-            a = times.strftime("%Y-%m-%d") + " " + x + ":00:00"
-            time_dict[t] = timezone.datetime.strptime(a, '%Y-%m-%d %H:%M:%S')
-            t += 1
-        return time_dict
-
-    # 根据ip获取地址
-    @staticmethod
-    def getAddr(ip):
-        base_dir = BASE_DIR
-        # ip数据库
-        db = IPIPDatabase(base_dir + '/DB/17monipdb.dat')
-        addr = db.lookup(ip)
-        ts = addr.split('\t')[0]
-        return ts
-
-    # 通过ip检索ipip指定信息 lang为CN或EN
-    @staticmethod
-    def getIpIpInfo(ip, lang, update=False):
-        ipbd_dir = BASE_DIR + "/DB/mydata4vipday2.ipdb"
-        db = ipdb.City(ipbd_dir)
-        if update:
-            rr = db.reload(ipbd_dir)
-        info = db.find_map(ip, lang)
-        return info
-
-    @staticmethod
-    def getUserID(userPhone='13800138000', getUser=True, setOTAID=False, μs=True):
-        if μs == True:
-            if getUser == True:
-                timeID = str(round(time.time() * 1000000))
-                userID = timeID + userPhone
-
-                return userID
-            else:
-                if setOTAID == False:
-                    timeID = str(round(time.time() * 1000000))
-                    ID = userPhone + timeID
-
-                    return ID
-                else:
-                    timeID = str(round(time.time() * 1000000))
-                    eID = '13800' + timeID + '138000'
-                    return eID
-        else:
-            if getUser == True:
-                timeID = str(round(time.time() * 1000))
-                userID = timeID + userPhone
-
-                return userID
-            else:
-                if setOTAID == False:
-                    timeID = str(round(time.time() * 1000))
-                    ID = userPhone + timeID
-
-                    return ID
-                else:
-                    timeID = str(round(time.time() * 1000))
-                    eID = '13800' + timeID + '138000'
-                    return eID
-
-    # 生成随机数
-    @staticmethod
-    def RandomStr(randomlength=8, number=True):
-        str = ''
-        if number == False:
-            characterSet = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsT' \
-                           'tUuVvWwXxYyZz0123456789'
-        else:
-            characterSet = '0123456789'
-
-        length = len(characterSet) - 1
-
-        random = Random()
-        for index in range(randomlength):
-            str += characterSet[random.randint(0, length)]
-        return str
-
-    # 生成订单好
-    @staticmethod
-    def createOrderID():
-        random_id = CommonService.RandomStr(6, True)
-        order_id = datetime.datetime.now().strftime('%Y%m%d%H%M%S') + str(random_id)
-        print('orderID:')
-        print(order_id)
-        return order_id
-
-    # qs转换list datetime处理
-    @staticmethod
-    def qs_to_list(qs):
-        res = []
-        # print(qs)
-        for ps in qs:
-            try:
-                if 'add_time' in ps:
-                    ps['add_time'] = ps['add_time'].strftime("%Y-%m-%d %H:%M:%S")
-                if 'update_time' in ps:
-                    ps['update_time'] = ps['update_time'].strftime("%Y-%m-%d %H:%M:%S")
-                if 'end_time' in ps:
-                    ps['end_time'] = ps['end_time'].strftime("%Y-%m-%d %H:%M:%S")
-                if 'data_joined' in ps:
-                    if ps['data_joined']:
-                        ps['data_joined'] = ps['data_joined'].strftime("%Y-%m-%d %H:%M:%S")
-                    else:
-                        ps['data_joined'] = ''
-                if 'userID__data_joined' in ps:
-                    if ps['userID__data_joined']:
-                        ps['userID__data_joined'] = ps['userID__data_joined'].strftime("%Y-%m-%d %H:%M:%S")
-                    else:
-                        ps['userID__data_joined'] = ''
-            except Exception as e:
-                pass
-            res.append(ps)
-        return res
-
-    # 获取当前时间
-    @staticmethod
-    def get_now_time_str(n_time, tz):
-        n_time = int(n_time)
-        if tz:
-            n_time = n_time + 3600 * float(tz)
-        n_date = time.strftime('%Y-%m-%d %H:%M:%S', time.gmtime(int(n_time)))
-        return n_date
-
-    # 生成随机数
-    @staticmethod
-    def encrypt_data(randomlength=8, number=False):
-        str = ''
-        if number == False:
-            characterSet = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsT' \
-                           'tUuVvWwXxYyZz0123456789'
-        else:
-            characterSet = '0123456789'
-
-        length = len(characterSet) - 1
-
-        random = Random()
-        for index in range(randomlength):
-            str += characterSet[random.randint(0, length)]
-        return str
-
-    @staticmethod
-    def updateMac(mac: str):
-        macArray = mac.split(':')
-
-        macArray[0] = int(macArray[0], 16)
-        macArray[1] = int(macArray[1], 16)
-        macArray[2] = int(macArray[2], 16)
-        first = int(macArray[5], 16)
-        second = int(macArray[4], 16)
-        three = int(macArray[3], 16)
-
-        # print(macArray)
-        # print(first)
-        # print(second)
-        # print(three)
-
-        if first == 255 and second == 255 and three == 255:
-            return None
-
-        first += 1
-
-        if first / 256 == 1:
-            second += 1
-            first = first % 256
-
-        if second / 256 == 1:
-            three += 1
-            second = second % 256
-
-        macArray[3] = three
-        macArray[4] = second
-        macArray[5] = first
-        # print(macArray)
-
-        tmp = ':'.join(map(lambda x: "%02x" % x, macArray))
-        # print(tmp)
-        return tmp.upper()

+ 0 - 141
Service/LogMiddleware.py

@@ -1,141 +0,0 @@
-#!/usr/bin/env python3
-# -*- coding: utf-8 -*-
-import json
-import threading
-import time
-
-from django.utils.deprecation import MiddlewareMixin
-
-from Model.models import UserModel, LogModel
-from Object import TokenObject
-from Object.TokenObject import TokenObject
-from Service.CommonService import CommonService
-
-
-class LogMiddleware(MiddlewareMixin):
-
-    # def process_request(self, request):
-        # if request.path == '/upload':
-        #     request.encoding = 'utf-8'
-        #     request_dict = request.POST
-        #     print(request.POST)
-        #     request.POST = request_dict
-
-    def process_response(self, request, response):
-
-        if request.path != '/favicon.ico':
-            self.start_log_thread(request, response)
-        return response
-
-    def start_log_thread(self, request, response):
-        print('start_log_thread')
-        asy = threading.Thread(target=add_log, args=(request, response))
-        asy.start()
-
-
-def add_log(request, response):
-    request.encoding = 'utf-8'
-    if request.method == 'GET':
-        request_dict = request.GET
-    elif request.method == 'POST':
-        request_dict = request.POST
-    else:
-        return
-
-    # print(response.content.decode().strip())
-    request_path = request.path.strip().strip('/')
-    print(request_path)
-    jsonObject = {}
-    if request_path == 'download' or request_path == 'uid/download':
-        if response.status_code != 200:
-            return
-    else:
-        try:
-            jsonObject = json.loads(response.content.decode().strip())
-            code = jsonObject.get('code')
-        except Exception as e:
-            print(repr(e))
-            return
-
-        if code is None or code != 0 and response.status_code != 200:
-            print('code is {code}'.format(code=code))
-            return
-
-    token = request_dict.get('token', None)
-    # print(token)
-    token = TokenObject(token)
-
-    status = response.status_code
-    # 去除密码
-    contentDict = dict(request_dict)
-    # print(contentDict)
-    password = contentDict.get('password')
-    if password:
-        contentDict.pop('password')
-
-    content = json.dumps(contentDict)
-    ip = CommonService.get_ip_address(request)
-    now_time = time.time()
-
-    if token.code == 0:
-        user_qs = UserModel.objects.filter(id=token.userID)
-    else:
-        # print(token.code)
-        username = request_dict.get('username', None)
-        if username is None:
-            print('username')
-            return
-        user_qs = UserModel.objects.filter(username=username)
-
-    if not user_qs.exists():
-        # print('exists')
-        return
-
-    user = user_qs[0]
-    operation = ''
-    # print(request_path)
-    if request_path == 'user/login':
-        operation = '登录账号'
-    elif request_path == 'user/logout':
-        operation = '退出登录'
-    elif request_path == 'user/modify':
-        operation = '修改密码'
-    elif request_path == 'upload':
-        area = request_dict.get('area', None)
-        count = jsonObject['res']['count']
-        operation = formatOperation('上传', int(count), int(area))
-    elif request_path == 'uid/allot':
-        area = request_dict.get('area', None)
-        quantity = request_dict.get('quantity', None)
-        if area and quantity:
-            operation = formatOperation('分配', int(quantity), int(area))
-    elif request_path == 'download':
-        area = request_dict.get('area', None)
-        quantity = request_dict.get('quantity', None)
-        if area and quantity:
-            operation = formatOperation('下载', int(quantity), int(area))
-    else:
-        return
-
-    log = {
-        'status': status,
-        'content': content,
-        'ip': ip,
-        'time': now_time,
-        'url': request_path,
-        'operation': operation,
-        'user': user
-    }
-
-    try:
-        LogModel.objects.create(**log)
-    except Exception as e:
-        print(repr(e))
-
-
-def formatOperation(operation, quantity, area):
-    str = '{operation}{quantity}个{area}UID'
-    if area == 0:
-        return str.format(operation=operation, quantity=quantity, area='国内')
-    else:
-        return str.format(operation=operation, quantity=quantity, area='国外')

+ 0 - 21
Service/ModelService.py

@@ -1,21 +0,0 @@
-#!/usr/bin/env python3
-# -*- coding: utf-8 -*-
-from Model.models import UserModel
-
-
-class ModelService:
-
-    @staticmethod
-    def check_perm(userID, permID):
-        try:
-            user_qs = UserModel.objects.filter(id=userID)
-            if user_qs.exists():
-                user = user_qs[0]
-                if int(user.permission) != 0:
-                    return False
-                else:
-                    return True
-            else:
-                return False
-        except Exception as e:
-            print(repr(e))

+ 0 - 21
manage.py

@@ -1,21 +0,0 @@
-#!/usr/bin/env python
-"""Django's command-line utility for administrative tasks."""
-import os
-import sys
-
-
-def main():
-    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'AnsjerUIDManage.settings')
-    try:
-        from django.core.management import execute_from_command_line
-    except ImportError as exc:
-        raise ImportError(
-            "Couldn't import Django. Are you sure it's installed and "
-            "available on your PYTHONPATH environment variable? Did you "
-            "forget to activate a virtual environment?"
-        ) from exc
-    execute_from_command_line(sys.argv)
-
-
-if __name__ == '__main__':
-    main()

+ 0 - 1
web/UM-admin/.idea/.name

@@ -1 +0,0 @@
-UM-admin

+ 0 - 12
web/UM-admin/.idea/UM-admin.iml

@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module type="WEB_MODULE" version="4">
-  <component name="NewModuleRootManager">
-    <content url="file://$MODULE_DIR$">
-      <excludeFolder url="file://$MODULE_DIR$/.tmp" />
-      <excludeFolder url="file://$MODULE_DIR$/temp" />
-      <excludeFolder url="file://$MODULE_DIR$/tmp" />
-    </content>
-    <orderEntry type="inheritedJdk" />
-    <orderEntry type="sourceFolder" forTests="false" />
-  </component>
-</module>

+ 0 - 6
web/UM-admin/.idea/misc.xml

@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="JavaScriptSettings">
-    <option name="languageLevel" value="ES6" />
-  </component>
-</project>

+ 0 - 9
web/UM-admin/.idea/modules.xml

@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="ProjectModuleManager">
-    <modules>
-      <module fileurl="file://$PROJECT_DIR$/.idea/UM-admin.iml" filepath="$PROJECT_DIR$/.idea/UM-admin.iml" />
-      <module fileurl="file://$PROJECT_DIR$/.idea/X-admin.iml" filepath="$PROJECT_DIR$/.idea/X-admin.iml" />
-    </modules>
-  </component>
-</project>

+ 0 - 7
web/UM-admin/.idea/vcs.xml

@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="VcsDirectoryMappings">
-    <mapping directory="$PROJECT_DIR$/../.." vcs="Git" />
-    <mapping directory="$PROJECT_DIR$" vcs="Git" />
-  </component>
-</project>

+ 0 - 522
web/UM-admin/.idea/workspace.xml

@@ -1,522 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="ChangeListManager">
-    <list default="true" id="82e81869-40b7-44bf-a50c-aeb6eb78a233" name="Default Changelist" comment="">
-      <change beforePath="$PROJECT_DIR$/../../AnsjerUM/urls.py" beforeDir="false" afterPath="$PROJECT_DIR$/../../AnsjerUM/urls.py" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../../Controller/SysController.py" beforeDir="false" afterPath="$PROJECT_DIR$/../../Controller/SysController.py" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/js/jqhttpsdk.js" beforeDir="false" afterPath="$PROJECT_DIR$/js/jqhttpsdk.js" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/login.html" beforeDir="false" afterPath="$PROJECT_DIR$/login.html" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/umlist.html" beforeDir="false" afterPath="$PROJECT_DIR$/umlist.html" afterDir="false" />
-    </list>
-    <ignored path="$PROJECT_DIR$/.tmp/" />
-    <ignored path="$PROJECT_DIR$/temp/" />
-    <ignored path="$PROJECT_DIR$/tmp/" />
-    <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
-    <option name="SHOW_DIALOG" value="false" />
-    <option name="HIGHLIGHT_CONFLICTS" value="true" />
-    <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
-    <option name="LAST_RESOLUTION" value="IGNORE" />
-  </component>
-  <component name="FUSProjectUsageTrigger">
-    <session id="1502916291">
-      <usages-collector id="statistics.lifecycle.project">
-        <counts>
-          <entry key="project.closed" value="1" />
-          <entry key="project.open.time.1" value="1" />
-          <entry key="project.open.time.11" value="1" />
-          <entry key="project.open.time.67" value="1" />
-          <entry key="project.open.time.95" value="1" />
-          <entry key="project.opened" value="4" />
-        </counts>
-      </usages-collector>
-      <usages-collector id="statistics.file.extensions.open">
-        <counts>
-          <entry key="css" value="3" />
-          <entry key="html" value="9" />
-          <entry key="js" value="18" />
-          <entry key="json" value="1" />
-          <entry key="md" value="1" />
-        </counts>
-      </usages-collector>
-      <usages-collector id="statistics.file.types.open">
-        <counts>
-          <entry key="CSS" value="3" />
-          <entry key="HTML" value="9" />
-          <entry key="JSON" value="1" />
-          <entry key="JavaScript" value="18" />
-          <entry key="PLAIN_TEXT" value="1" />
-        </counts>
-      </usages-collector>
-      <usages-collector id="statistics.file.extensions.edit">
-        <counts>
-          <entry key="html" value="2465" />
-          <entry key="js" value="37" />
-        </counts>
-      </usages-collector>
-      <usages-collector id="statistics.file.types.edit">
-        <counts>
-          <entry key="HTML" value="2465" />
-          <entry key="JavaScript" value="37" />
-        </counts>
-      </usages-collector>
-    </session>
-    <session id="709442949">
-      <usages-collector id="statistics.lifecycle.project">
-        <counts>
-          <entry key="project.open.time.28" value="1" />
-          <entry key="project.open.time.52" value="1" />
-          <entry key="project.opened" value="2" />
-        </counts>
-      </usages-collector>
-    </session>
-    <session id="-1133389475">
-      <usages-collector id="statistics.lifecycle.project">
-        <counts>
-          <entry key="project.closed" value="2" />
-          <entry key="project.open.time.106" value="1" />
-          <entry key="project.open.time.12" value="1" />
-          <entry key="project.open.time.8" value="1" />
-          <entry key="project.opened" value="3" />
-        </counts>
-      </usages-collector>
-      <usages-collector id="statistics.file.extensions.open">
-        <counts>
-          <entry key="html" value="2" />
-          <entry key="js" value="1" />
-          <entry key="json" value="1" />
-        </counts>
-      </usages-collector>
-      <usages-collector id="statistics.file.types.open">
-        <counts>
-          <entry key="HTML" value="2" />
-          <entry key="JSON" value="1" />
-          <entry key="JavaScript" value="1" />
-        </counts>
-      </usages-collector>
-      <usages-collector id="statistics.file.extensions.edit">
-        <counts>
-          <entry key="html" value="307" />
-        </counts>
-      </usages-collector>
-      <usages-collector id="statistics.file.types.edit">
-        <counts>
-          <entry key="HTML" value="307" />
-        </counts>
-      </usages-collector>
-    </session>
-  </component>
-  <component name="FileEditorManager">
-    <leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
-      <file pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/index.html">
-          <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="288">
-              <caret line="16" column="76" selection-start-line="16" selection-start-column="76" selection-end-line="16" selection-end-column="76" />
-              <folding>
-                <element signature="n#li#1;n#ul#0;n#div#0;n#div#1;n#body#0;n#html#0;n#!!top" />
-              </folding>
-            </state>
-          </provider>
-        </entry>
-      </file>
-      <file pinned="false" current-in-tab="true">
-        <entry file="file://$PROJECT_DIR$/umlist.html">
-          <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="486">
-              <caret line="36" column="37" selection-start-line="36" selection-start-column="37" selection-end-line="36" selection-end-column="37" />
-              <folding>
-                <element signature="n#style#0;n#a#0;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" />
-                <element signature="n#style#0;n#i#0;n#a#0;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" />
-              </folding>
-            </state>
-          </provider>
-        </entry>
-      </file>
-      <file pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/umlog.html">
-          <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="306">
-              <caret line="17" column="68" selection-start-line="17" selection-start-column="68" selection-end-line="17" selection-end-column="68" />
-              <folding>
-                <element signature="n#style#0;n#a#0;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" />
-                <element signature="n#style#0;n#i#0;n#a#0;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" />
-              </folding>
-            </state>
-          </provider>
-        </entry>
-      </file>
-      <file pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/js/jqhttpsdk.js">
-          <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="90">
-              <caret line="5" column="45" selection-start-line="5" selection-start-column="45" selection-end-line="5" selection-end-column="45" />
-            </state>
-          </provider>
-        </entry>
-      </file>
-      <file pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/js/admin.js">
-          <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="3258">
-              <caret line="181" column="16" selection-start-line="181" selection-start-column="16" selection-end-line="181" selection-end-column="16" />
-            </state>
-          </provider>
-        </entry>
-      </file>
-      <file pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/echarts6.html">
-          <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="5832">
-              <caret line="324" selection-start-line="324" selection-end-line="324" />
-            </state>
-          </provider>
-        </entry>
-      </file>
-    </leaf>
-  </component>
-  <component name="FileTemplateManagerImpl">
-    <option name="RECENT_TEMPLATES">
-      <list>
-        <option value="JavaScript File" />
-      </list>
-    </option>
-  </component>
-  <component name="FindInProjectRecents">
-    <findStrings>
-      <find>iconfont</find>
-      <find>hm.js</find>
-      <find>densitydpi</find>
-      <find>系统通知</find>
-      <find>Copyright</find>
-      <find>GetJSON</find>
-      <find>layui-btn</find>
-      <find>distribute_btn</find>
-      <find>select</find>
-      <find>form</find>
-      <find>uploadInst</find>
-      <find>imuidlist</find>
-      <find>tableIns</find>
-      <find>uid</find>
-      <find>X-admin</find>
-      <find>欢迎页面-X-admin2.0</find>
-      <find>where</find>
-      <find>is_use</find>
-      <find>is_use_select</find>
-      <find>获取</find>
-      <find>postJson</find>
-      <find>postJSON</find>
-      <find>009688</find>
-      <find>layui-btn layui-btn-small</find>
-      <find>http_ip_port</find>
-    </findStrings>
-    <replaceStrings>
-      <replace>um</replace>
-      <replace>欢迎页面</replace>
-    </replaceStrings>
-  </component>
-  <component name="Git.Settings">
-    <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$/../.." />
-  </component>
-  <component name="IdeDocumentHistory">
-    <option name="CHANGED_PATHS">
-      <list>
-        <option value="$PROJECT_DIR$/js/shownowtime.js" />
-        <option value="$PROJECT_DIR$/welcome.html" />
-        <option value="$PROJECT_DIR$/js/xadmin.js" />
-        <option value="$PROJECT_DIR$/order-add.html" />
-        <option value="$PROJECT_DIR$/order-list.html" />
-        <option value="$PROJECT_DIR$/uidlist.html" />
-        <option value="$PROJECT_DIR$/umlog.html" />
-        <option value="$PROJECT_DIR$/umlist.html" />
-        <option value="$PROJECT_DIR$/umlist.html" />
-        <option value="$PROJECT_DIR$/index.html" />
-        <option value="$PROJECT_DIR$/js/jqhttpsdk.js" />
-        <option value="$PROJECT_DIR$/login.html" />
-      </list>
-    </option>
-  </component>
-  <component name="JsBuildToolGruntFileManager" detection-done="true" sorting="DEFINITION_ORDER" />
-  <component name="JsBuildToolPackageJson" detection-done="true" sorting="DEFINITION_ORDER" />
-  <component name="JsGulpfileManager">
-    <detection-done>true</detection-done>
-    <sorting>DEFINITION_ORDER</sorting>
-  </component>
-  <component name="ProjectFrameBounds" extendedState="6">
-    <option name="x" value="177" />
-    <option name="y" value="301" />
-    <option name="width" value="1041" />
-    <option name="height" value="816" />
-  </component>
-  <component name="ProjectLevelVcsManager" settingsEditedManually="true">
-    <ConfirmationsSetting value="1" id="Add" />
-  </component>
-  <component name="ProjectView">
-    <navigator proportions="" version="1">
-      <foldersAlwaysOnTop value="true" />
-    </navigator>
-    <panes>
-      <pane id="Scope" />
-      <pane id="ProjectPane">
-        <subPane>
-          <expand>
-            <path>
-              <item name="UM-admin" type="b2602c69:ProjectViewProjectNode" />
-              <item name="UM-admin" type="462c0819:PsiDirectoryNode" />
-            </path>
-            <path>
-              <item name="UM-admin" type="b2602c69:ProjectViewProjectNode" />
-              <item name="UM-admin" type="462c0819:PsiDirectoryNode" />
-              <item name="js" type="462c0819:PsiDirectoryNode" />
-            </path>
-          </expand>
-          <select />
-        </subPane>
-      </pane>
-    </panes>
-  </component>
-  <component name="PropertiesComponent">
-    <property name="WebServerToolWindowFactoryState" value="false" />
-    <property name="last_opened_file_path" value="$PROJECT_DIR$" />
-    <property name="nodejs_interpreter_path.stuck_in_default_project" value="undefined stuck path" />
-    <property name="nodejs_npm_path_reset_for_default_project" value="true" />
-    <property name="settings.editor.selected.configurable" value="project.propVCSSupport.Mappings" />
-  </component>
-  <component name="RecentsManager">
-    <key name="CopyFile.RECENT_KEYS">
-      <recent name="D:\AngularPJ\X-admin" />
-      <recent name="D:\AngularPJ\X-admin\js" />
-      <recent name="D:\AngularPJ\X-admin\lib" />
-    </key>
-  </component>
-  <component name="RunDashboard">
-    <option name="ruleStates">
-      <list>
-        <RuleState>
-          <option name="name" value="ConfigurationTypeDashboardGroupingRule" />
-        </RuleState>
-        <RuleState>
-          <option name="name" value="StatusDashboardGroupingRule" />
-        </RuleState>
-      </list>
-    </option>
-  </component>
-  <component name="SvnConfiguration">
-    <configuration />
-  </component>
-  <component name="TaskManager">
-    <task active="true" id="Default" summary="Default task">
-      <changelist id="82e81869-40b7-44bf-a50c-aeb6eb78a233" name="Default Changelist" comment="" />
-      <created>1537429802436</created>
-      <option name="number" value="Default" />
-      <option name="presentableId" value="Default" />
-      <updated>1537429802436</updated>
-      <workItem from="1537429803795" duration="6418000" />
-      <workItem from="1537490017268" duration="18245000" />
-      <workItem from="1537834686717" duration="619000" />
-      <workItem from="1537842992768" duration="12747000" />
-      <workItem from="1537921617926" duration="702000" />
-      <workItem from="1538035763814" duration="689000" />
-      <workItem from="1538980977813" duration="4513000" />
-      <workItem from="1539564173240" duration="654000" />
-      <workItem from="1539575549002" duration="37000" />
-    </task>
-    <servers />
-  </component>
-  <component name="TimeTrackingManager">
-    <option name="totallyTimeSpent" value="44624000" />
-  </component>
-  <component name="ToolWindowManager">
-    <frame x="-8" y="-8" width="1616" height="886" extended-state="6" />
-    <layout>
-      <window_info id="Favorites" order="0" side_tool="true" />
-      <window_info active="true" content_ui="combo" id="Project" order="1" visible="true" weight="0.19011407" />
-      <window_info id="Structure" order="2" side_tool="true" weight="0.25" />
-      <window_info anchor="bottom" id="Terminal" order="0" weight="0.23271276" />
-      <window_info anchor="bottom" id="Event Log" order="1" side_tool="true" weight="0.23404256" />
-      <window_info anchor="bottom" id="Version Control" order="2" weight="0.32978722" />
-      <window_info anchor="bottom" id="Docker" order="3" show_stripe_button="false" />
-      <window_info anchor="bottom" id="Message" order="4" />
-      <window_info anchor="bottom" id="Find" order="5" weight="0.32991204" />
-      <window_info anchor="bottom" id="Run" order="6" />
-      <window_info anchor="bottom" id="Debug" order="7" weight="0.4" />
-      <window_info anchor="bottom" id="Cvs" order="8" weight="0.25" />
-      <window_info anchor="bottom" id="Inspection" order="9" weight="0.4" />
-      <window_info anchor="bottom" id="TODO" order="10" />
-      <window_info anchor="right" id="Commander" internal_type="SLIDING" order="0" type="SLIDING" weight="0.4" />
-      <window_info anchor="right" id="Ant Build" order="1" weight="0.25" />
-      <window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" />
-    </layout>
-    <layout-to-restore>
-      <window_info id="Favorites" order="0" side_tool="true" />
-      <window_info active="true" content_ui="combo" id="Project" order="1" visible="true" weight="0.15529412" />
-      <window_info id="Structure" order="2" side_tool="true" weight="0.25" />
-      <window_info anchor="bottom" id="Terminal" order="0" />
-      <window_info anchor="bottom" id="Event Log" order="1" side_tool="true" weight="0.31117022" />
-      <window_info anchor="bottom" id="Version Control" order="2" />
-      <window_info anchor="bottom" id="Docker" order="3" show_stripe_button="false" />
-      <window_info anchor="bottom" id="Message" order="4" />
-      <window_info anchor="bottom" id="Find" order="5" />
-      <window_info anchor="bottom" id="Run" order="6" />
-      <window_info anchor="bottom" id="Debug" order="7" weight="0.4" />
-      <window_info anchor="bottom" id="Cvs" order="8" weight="0.25" />
-      <window_info anchor="bottom" id="Inspection" order="9" weight="0.4" />
-      <window_info anchor="bottom" id="TODO" order="10" />
-      <window_info anchor="right" id="Commander" internal_type="SLIDING" order="0" type="SLIDING" weight="0.4" />
-      <window_info anchor="right" id="Ant Build" order="1" weight="0.25" />
-      <window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" />
-    </layout-to-restore>
-  </component>
-  <component name="TypeScriptGeneratedFilesManager">
-    <option name="version" value="1" />
-  </component>
-  <component name="VcsContentAnnotationSettings">
-    <option name="myLimit" value="2678400000" />
-  </component>
-  <component name="editorHistoryManager">
-    <entry file="file://$PROJECT_DIR$/lib/layui/css/layui.css">
-      <provider selected="true" editor-type-id="text-editor" />
-    </entry>
-    <entry file="file://$PROJECT_DIR$/css/xadmin.css">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="230">
-          <caret line="361" column="34" lean-forward="true" selection-start-line="361" selection-start-column="34" selection-end-line="361" selection-end-column="34" />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/README.md" />
-    <entry file="file://$PROJECT_DIR$/js/jquery_cookie_min.js">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="18">
-          <caret line="1" column="83" selection-start-line="1" selection-start-column="83" selection-end-line="1" selection-end-column="83" />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/js/jquery-3.3.1.min.js">
-      <provider selected="true" editor-type-id="text-editor" />
-    </entry>
-    <entry file="file://$PROJECT_DIR$/js/shownowtime.js">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="414">
-          <caret line="23" column="8" lean-forward="true" selection-start-line="23" selection-start-column="8" selection-end-line="23" selection-end-column="8" />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/css/font.css">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="288">
-          <caret line="16" lean-forward="true" selection-start-line="16" selection-end-line="16" />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/order-add.html">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="432">
-          <caret line="39" column="49" lean-forward="true" selection-start-line="39" selection-start-column="49" selection-end-line="39" selection-end-column="49" />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/lib/layui/lay/modules/table.js">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="18">
-          <caret line="1" column="5662" selection-start-line="1" selection-start-column="5662" selection-end-line="1" selection-end-column="5662" />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/order-list.html">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="1422">
-          <caret line="79" column="40" selection-start-line="79" selection-start-column="34" selection-end-line="79" selection-end-column="40" />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/uidlist.html" />
-    <entry file="file://$PROJECT_DIR$/js/city.js">
-      <provider selected="true" editor-type-id="text-editor" />
-    </entry>
-    <entry file="file://$PROJECT_DIR$/user.json">
-      <provider selected="true" editor-type-id="text-editor" />
-    </entry>
-    <entry file="file://$PROJECT_DIR$/login.html">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="134">
-          <caret line="83" column="20" lean-forward="true" selection-start-line="83" selection-start-column="20" selection-end-line="83" selection-end-column="20" />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/unicode.html">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="72">
-          <caret line="4" column="27" selection-start-line="4" selection-start-column="27" selection-end-line="4" selection-end-column="27" />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/welcome.html">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="663">
-          <caret line="61" column="22" selection-start-line="61" selection-start-column="22" selection-end-line="61" selection-end-column="22" />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/lib/layui/layui.all.js">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="36">
-          <caret line="1" column="1985" selection-start-line="1" selection-start-column="1985" selection-end-line="1" selection-end-column="1985" />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/index.html">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="288">
-          <caret line="16" column="76" selection-start-line="16" selection-start-column="76" selection-end-line="16" selection-end-column="76" />
-          <folding>
-            <element signature="n#li#1;n#ul#0;n#div#0;n#div#1;n#body#0;n#html#0;n#!!top" />
-          </folding>
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/umlog.html">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="306">
-          <caret line="17" column="68" selection-start-line="17" selection-start-column="68" selection-end-line="17" selection-end-column="68" />
-          <folding>
-            <element signature="n#style#0;n#a#0;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" />
-            <element signature="n#style#0;n#i#0;n#a#0;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" />
-          </folding>
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/js/jqhttpsdk.js">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="90">
-          <caret line="5" column="45" selection-start-line="5" selection-start-column="45" selection-end-line="5" selection-end-column="45" />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/js/admin.js">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="3258">
-          <caret line="181" column="16" selection-start-line="181" selection-start-column="16" selection-end-line="181" selection-end-column="16" />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/echarts6.html">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="5832">
-          <caret line="324" selection-start-line="324" selection-end-line="324" />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/umlist.html">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="486">
-          <caret line="36" column="37" selection-start-line="36" selection-start-column="37" selection-end-line="36" selection-end-column="37" />
-          <folding>
-            <element signature="n#style#0;n#a#0;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" />
-            <element signature="n#style#0;n#i#0;n#a#0;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" />
-          </folding>
-        </state>
-      </provider>
-    </entry>
-  </component>
-</project>

+ 0 - 164
web/UM-admin/admin-add.html

@@ -1,164 +0,0 @@
-<!DOCTYPE html>
-<html>
-
-<head>
-    <meta charset="UTF-8">
-    <title>欢迎页面</title>
-    <meta name="renderer" content="webkit">
-    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-    <meta name="viewport"
-          content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi"/>
-    <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon"/>
-    <link rel="stylesheet" href="./css/font.css">
-    <link rel="stylesheet" href="./css/xadmin.css">
-    <script type="text/javascript" src="./js/jquery-3.3.1.min.js"></script>
-    <script type="text/javascript" src="./lib/layui/layui.js" charset="utf-8"></script>
-    <script type="text/javascript" src="js/admin.js"></script>
-    <script type="text/javascript" src="./js/jquery_cookie_min.js"></script>
-    <script type="text/javascript" src="./js/jqhttpsdk.js"></script>
-    <!-- 让IE8/9支持媒体查询,从而兼容栅格 -->
-    <!--[if lt IE 9]>
-      <script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
-      <script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
-    <![endif]-->
-</head>
-
-<body>
-<div class="x-body">
-    <form class="layui-form">
-        <div class="layui-form-item">
-            <label for="username" class="layui-form-label">
-                <span class="x-red">*</span>登录名
-            </label>
-            <div class="layui-input-inline">
-                <input type="text" id="username" name="username" required="" lay-verify="required"
-                       autocomplete="off" class="layui-input">
-            </div>
-            <div class="layui-form-mid layui-word-aux">
-                <span class="x-red">*</span>将会成为您唯一的登入名
-            </div>
-        </div>
-        <div class="layui-form-item">
-            <label for="phone" class="layui-form-label">
-                <span class="x-red">*</span>手机
-            </label>
-            <div class="layui-input-inline">
-                <input type="text" id="phone" name="phone" required="" lay-verify="phone"
-                       autocomplete="off" class="layui-input">
-            </div>
-            <div class="layui-form-mid layui-word-aux">
-                <span class="x-red">*</span>将会成为您唯一的登入名
-            </div>
-        </div>
-        <div class="layui-form-item">
-            <label for="L_email" class="layui-form-label">
-                <span class="x-red">*</span>邮箱
-            </label>
-            <div class="layui-input-inline">
-                <input type="text" id="L_email" name="email" required="" lay-verify="email"
-                       autocomplete="off" class="layui-input">
-            </div>
-            <div class="layui-form-mid layui-word-aux">
-                <span class="x-red">*</span>
-            </div>
-        </div>
-        <div class="layui-form-item">
-            <label class="layui-form-label"><span class="x-red">*</span>角色</label>
-            <div class="layui-input-block">
-                <input type="radio" name="role" lay-skin="primary" value="0" title="超级管理员" checked="">
-                <input type="radio" name="role" lay-skin="primary" value="1" title="生产管理员">
-            </div>
-        </div>
-        <div class="layui-form-item">
-            <label for="L_pass" class="layui-form-label">
-                <span class="x-red">*</span>密码
-            </label>
-            <div class="layui-input-inline">
-                <input type="password" id="L_pass" name="password" required="" lay-verify="pass"
-                       autocomplete="off" class="layui-input">
-            </div>
-            <div class="layui-form-mid layui-word-aux">
-                6到16个字符
-            </div>
-        </div>
-        <div class="layui-form-item">
-            <label for="L_repass" class="layui-form-label">
-                <span class="x-red">*</span>确认密码
-            </label>
-            <div class="layui-input-inline">
-                <input type="password" id="L_repass" name="repass" required="" lay-verify="repass"
-                       autocomplete="off" class="layui-input">
-            </div>
-        </div>
-        <div class="layui-form-item">
-            <label for="L_repass" class="layui-form-label">
-            </label>
-            <button class="layui-btn" lay-filter="add" lay-submit="">
-                增加
-            </button>
-        </div>
-    </form>
-</div>
-<script>
-    function print(data) {
-        console.log(data)
-    }
-    layui.use(['form', 'layer'], function () {
-        var $ = jQuery = layui.$;
-        var form = layui.form, layer = layui.layer;
-
-        //自定义验证规则
-        form.verify({
-            nikename: function (value) {
-                if (value.length < 5) {
-                    return '昵称至少得5个字符啊';
-                }
-            }
-            , password: [/(.+){6,12}$/, '密码必须6到12位']
-            , repass: function (value) {
-                if ($('#L_pass').val() != $('#L_repass').val()) {
-                    return '两次密码不一致';
-                }
-            }
-        });
-
-        //监听提交
-        form.on('submit(add)', function (data) {
-            console.log(data.field);
-            var values = data.field;
-            $.post(
-                http_ip_port + '/user/adminAdd',
-                {
-                    username: values.username,
-                    password: values.password,
-                    phone: values.phone,
-                    role: values.role,
-                    token: $.cookie('access_token')
-                },
-                function (res) {
-                    console.log(res);
-                    res = JSON.parse(res);
-                    if(res.code === 0) {
-
-                        //发异步,把数据提交给php
-                        layer.alert("增加成功", {icon: 6}, function () {
-                            // 获得frame索引
-                            var index = parent.layer.getFrameIndex(window.name);
-                            //关闭当前frame
-                            parent.layer.close(index);
-                            parent.location.reload();
-                        });
-                    }else {
-                        alert(res.msg)
-                    }
-                }
-            );
-
-            return false;
-        });
-
-    });
-</script>
-</body>
-
-</html>

+ 0 - 148
web/UM-admin/admin-edit.html

@@ -1,148 +0,0 @@
-<!DOCTYPE html>
-<html>
-
-<head>
-    <meta charset="UTF-8">
-    <title>欢迎页面</title>
-    <meta name="renderer" content="webkit">
-    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-    <meta name="viewport"
-          content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi"/>
-    <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon"/>
-    <link rel="stylesheet" href="./css/font.css">
-    <link rel="stylesheet" href="./css/xadmin.css">
-    <script type="text/javascript" src="./js/jquery-3.3.1.min.js"></script>
-    <script type="text/javascript" src="./lib/layui/layui.js" charset="utf-8"></script>
-    <script type="text/javascript" src="js/admin.js"></script>
-    <script type="text/javascript" src="./js/jquery_cookie_min.js"></script>
-    <script type="text/javascript" src="./js/jqhttpsdk.js"></script>
-    <!-- 让IE8/9支持媒体查询,从而兼容栅格 -->
-    <!--[if lt IE 9]>
-      <script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
-      <script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
-    <![endif]-->
-</head>
-
-<body>
-<div class="x-body">
-    <form class="layui-form">
-        <div class="layui-form-item">
-            <label for="username" class="layui-form-label">
-                <span class="x-red">*</span>登录名
-            </label>
-            <div class="layui-input-inline">
-                <input type="text" id="username" name="username" required="" lay-verify="required"
-                       autocomplete="off" value="admin" class="layui-input" disabled>
-            </div>
-
-        </div>
-        <div class="layui-form-item">
-            <label for="phone" class="layui-form-label">
-                <span class="x-red">*</span>手机
-            </label>
-            <div class="layui-input-inline">
-                <input type="text" value="18925139194" id="phone" name="phone" required="" lay-verify="phone"
-                       autocomplete="off" class="layui-input">
-            </div>
-        </div>
-        <div class="layui-form-item">
-            <label for="L_email" class="layui-form-label">
-                <span class="x-red">*</span>邮箱
-            </label>
-            <div class="layui-input-inline">
-                <input type="text" value="113664000@qq.com" id="L_email" name="email" required="" lay-verify="email"
-                       autocomplete="off" class="layui-input">
-            </div>
-        </div>
-        <div class="layui-form-item">
-            <label class="layui-form-label"><span class="x-red">*</span>角色</label>
-            <div class="layui-input-block">
-                <input type="radio" name="role" lay-skin="primary" title="超级管理员" value="0" checked="">
-                <input type="radio" name="role" lay-skin="primary" title="生产管理员" value="1">
-
-            </div>
-        </div>
-        <div class="layui-form-item">
-            <label for="L_repass" class="layui-form-label">
-            </label>
-            <button class="layui-btn" lay-filter="add" lay-submit="">
-                修改
-            </button>
-        </div>
-    </form>
-</div>
-<script>
-    $(function () {
-        $('#username').val(getQueryString('username'));
-        var role = getQueryString('role')
-        if(role == 0){
-            $("input[title='超级管理员']").click();
-
-        }else if(role == 1){
-            $("input[title='生产管理员']").click();
-        }
-
-    });
-    function getQueryString(name) {
-        var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
-        var r = window.location.search.substr(1).match(reg);
-        if (r !== null)
-         return unescape(r[2]);
-         return null;
-    }
-    layui.use(['form', 'layer'], function () {
-        var $ = jQuery = layui.$;
-        var form = layui.form, layer = layui.layer;
-
-        //自定义验证规则
-        form.verify({
-            nikename: function (value) {
-                if (value.length < 5) {
-                    return '昵称至少得5个字符啊';
-                }
-            }
-            , pass: [/(.+){6,12}$/, '密码必须6到12位']
-            , repass: function (value) {
-                if ($('#L_pass').val() != $('#L_repass').val()) {
-                    return '两次密码不一致';
-                }
-            }
-        });
-
-        //监听提交
-        form.on('submit(add)', function (data) {
-            console.log(data.field);
-            var values = data.field;
-            $.post(
-                http_ip_port + '/user/adminUpdate',
-                {
-                    username: values.username,
-                    password: values.password,
-                    phone: values.phone,
-                    role: values.role,
-                    token: $.cookie('access_token')
-                },
-                function (res) {
-                    console.log(res);
-
-                    //发异步,把数据提交
-                    layer.alert("修改成功", {icon: 6}, function () {
-                        // 获得frame索引
-                        var index = parent.layer.getFrameIndex(window.name);
-                        //关闭当前frame
-                        parent.layer.close(index);
-                        parent.location.reload();
-                    });
-
-
-                }
-            );
-            return false;
-        });
-
-
-    });
-</script>
-</body>
-
-</html>

+ 0 - 165
web/UM-admin/admin-list.html

@@ -1,165 +0,0 @@
-<!DOCTYPE html>
-<html>
-  
-  <head>
-    <meta charset="UTF-8">
-    <title>欢迎页面</title>
-    <meta name="renderer" content="webkit">
-    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-    <meta name="viewport" content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi" />
-    <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon" />
-    <link rel="stylesheet" href="./css/font.css">
-    <link rel="stylesheet" href="./css/xadmin.css">
-    <script type="text/javascript" src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
-    <script type="text/javascript" src="./lib/layui/layui.js" charset="utf-8"></script>
-    <script type="text/javascript" src="js/admin.js"></script>
-    <!-- 让IE8/9支持媒体查询,从而兼容栅格 -->
-    <!--[if lt IE 9]>
-      <script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
-      <script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
-    <![endif]-->
-  </head>
-  
-  <body>
-    <div class="x-nav">
-      <span class="layui-breadcrumb">
-        <a href="">首页</a>
-        <a href="">演示</a>
-        <a>
-          <cite>导航元素</cite></a>
-      </span>
-      <a class="layui-btn layui-btn-small" style="line-height:1.6em;margin-top:3px;float:right" href="javascript:location.replace(location.href);" title="刷新">
-        <i class="layui-icon" style="line-height:30px">ဂ</i></a>
-    </div>
-    <div class="x-body">
-      <div class="layui-row">
-        <form class="layui-form layui-col-md12 x-so">
-          <input class="layui-input" placeholder="开始日" name="start" id="start">
-          <input class="layui-input" placeholder="截止日" name="end" id="end">
-          <input type="text" name="username"  placeholder="请输入用户名" autocomplete="off" class="layui-input">
-          <button class="layui-btn"  lay-submit="" lay-filter="sreach"><i class="layui-icon">&#xe615;</i></button>
-        </form>
-      </div>
-      <xblock>
-        <button class="layui-btn layui-btn-danger" onclick="delAll()"><i class="layui-icon"></i>批量删除</button>
-        <button class="layui-btn" onclick="x_admin_show('添加用户','./admin-add.html')"><i class="layui-icon"></i>添加</button>
-        <span class="x-right" style="line-height:40px">共有数据:88 条</span>
-      </xblock>
-      <table class="layui-table">
-        <thead>
-          <tr>
-            <th>
-              <div class="layui-unselect header layui-form-checkbox" lay-skin="primary"><i class="layui-icon">&#xe605;</i></div>
-            </th>
-            <th>ID</th>
-            <th>登录名</th>
-            <th>手机</th>
-            <th>邮箱</th>
-            <th>角色</th>
-            <th>加入时间</th>
-            <th>状态</th>
-            <th>操作</th>
-        </thead>
-        <tbody>
-          <tr>
-            <td>
-              <div class="layui-unselect layui-form-checkbox" lay-skin="primary" data-id='2'><i class="layui-icon">&#xe605;</i></div>
-            </td>
-            <td>1</td>
-            <td>admin</td>
-            <td>18925139194</td>
-            <td>113664000@qq.com</td>
-            <td>超级管理员</td>
-            <td>2017-01-01 11:11:42</td>
-            <td class="td-status">
-              <span class="layui-btn layui-btn-normal layui-btn-mini">已启用</span></td>
-            <td class="td-manage">
-              <a onclick="member_stop(this,'10001')" href="javascript:;"  title="启用">
-                <i class="layui-icon">&#xe601;</i>
-              </a>
-              <a title="编辑"  onclick="x_admin_show('编辑','admin-edit.html')" href="javascript:;">
-                <i class="layui-icon">&#xe642;</i>
-              </a>
-              <a title="删除" onclick="member_del(this,'要删除的id')" href="javascript:;">
-                <i class="layui-icon">&#xe640;</i>
-              </a>
-            </td>
-          </tr>
-        </tbody>
-      </table>
-      <div class="page">
-        <div>
-          <a class="prev" href="">&lt;&lt;</a>
-          <a class="num" href="">1</a>
-          <span class="current">2</span>
-          <a class="num" href="">3</a>
-          <a class="num" href="">489</a>
-          <a class="next" href="">&gt;&gt;</a>
-        </div>
-      </div>
-
-    </div>
-    <script>
-      layui.use('laydate', function(){
-        var laydate = layui.laydate;
-        
-        //执行一个laydate实例
-        laydate.render({
-          elem: '#start' //指定元素
-        });
-
-        //执行一个laydate实例
-        laydate.render({
-          elem: '#end' //指定元素
-        });
-      });
-
-       /*用户-停用*/
-      function member_stop(obj,id){
-          layer.confirm('确认要停用吗?',function(index){
-
-              if($(obj).attr('title')=='启用'){
-
-                //发异步把用户状态进行更改
-                $(obj).attr('title','停用')
-                $(obj).find('i').html('&#xe62f;');
-
-                $(obj).parents("tr").find(".td-status").find('span').addClass('layui-btn-disabled').html('已停用');
-                layer.msg('已停用!',{icon: 5,time:1000});
-
-              }else{
-                $(obj).attr('title','启用')
-                $(obj).find('i').html('&#xe601;');
-
-                $(obj).parents("tr").find(".td-status").find('span').removeClass('layui-btn-disabled').html('已启用');
-                layer.msg('已启用!',{icon: 5,time:1000});
-              }
-              
-          });
-      }
-
-      /*用户-删除*/
-      function member_del(obj,id){
-          layer.confirm('确认要删除吗?',function(index){
-              //发异步删除数据
-              $(obj).parents("tr").remove();
-              layer.msg('已删除!',{icon:1,time:1000});
-          });
-      }
-
-
-
-      function delAll (argument) {
-
-        var data = tableCheck.getData();
-  
-        layer.confirm('确认要删除吗?'+data,function(index){
-            //捉到所有被选中的,发异步进行删除
-            layer.msg('删除成功', {icon: 1});
-            $(".layui-form-checked").not('.header').parents('tr').remove();
-        });
-      }
-    </script>
-  </body>
-
-</html>

+ 0 - 161
web/UM-admin/admin-role.html

@@ -1,161 +0,0 @@
-<!DOCTYPE html>
-<html>
-  
-  <head>
-    <meta charset="UTF-8">
-    <title>欢迎页面</title>
-    <meta name="renderer" content="webkit">
-    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-    <meta name="viewport" content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi" />
-    <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon" />
-    <link rel="stylesheet" href="./css/font.css">
-    <link rel="stylesheet" href="./css/xadmin.css">
-    <script type="text/javascript" src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
-    <script type="text/javascript" src="./lib/layui/layui.js" charset="utf-8"></script>
-    <script type="text/javascript" src="js/admin.js"></script>
-    <!-- 让IE8/9支持媒体查询,从而兼容栅格 -->
-    <!--[if lt IE 9]>
-      <script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
-      <script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
-    <![endif]-->
-  </head>
-  
-  <body>
-    <div class="x-nav">
-      <span class="layui-breadcrumb">
-        <a href="">首页</a>
-        <a href="">演示</a>
-        <a>
-          <cite>导航元素</cite></a>
-      </span>
-      <a class="layui-btn layui-btn-small" style="line-height:1.6em;margin-top:3px;float:right" href="javascript:location.replace(location.href);" title="刷新">
-        <i class="layui-icon" style="line-height:30px">ဂ</i></a>
-    </div>
-    <div class="x-body">
-      <div class="layui-row">
-        <form class="layui-form layui-col-md12 x-so">
-          <input class="layui-input" placeholder="开始日" name="start" id="start">
-          <input class="layui-input" placeholder="截止日" name="end" id="end">
-          <input type="text" name="username"  placeholder="请输入用户名" autocomplete="off" class="layui-input">
-          <button class="layui-btn"  lay-submit="" lay-filter="sreach"><i class="layui-icon">&#xe615;</i></button>
-        </form>
-      </div>
-      <xblock>
-        <button class="layui-btn layui-btn-danger" onclick="delAll()"><i class="layui-icon"></i>批量删除</button>
-        <button class="layui-btn" onclick="x_admin_show('添加用户','./role-add.html')"><i class="layui-icon"></i>添加</button>
-        <span class="x-right" style="line-height:40px">共有数据:88 条</span>
-      </xblock>
-      <table class="layui-table">
-        <thead>
-          <tr>
-            <th>
-              <div class="layui-unselect header layui-form-checkbox" lay-skin="primary"><i class="layui-icon">&#xe605;</i></div>
-            </th>
-            <th>ID</th>
-            <th>角色名</th>
-            <th>拥有权限规则</th>
-            <th>描述</th>
-            <th>状态</th>
-            <th>操作</th>
-        </thead>
-        <tbody>
-          <tr>
-            <td>
-              <div class="layui-unselect layui-form-checkbox" lay-skin="primary" data-id='2'><i class="layui-icon">&#xe605;</i></div>
-            </td>
-            <td>1</td>
-            <td>超级管理员</td>
-            <td>会员列表,问题列表</td>
-            <td>具有至高无上的权利</td>
-            <td class="td-status">
-              <span class="layui-btn layui-btn-normal layui-btn-mini">已启用</span></td>
-            <td class="td-manage">
-              <a onclick="member_stop(this,'10001')" href="javascript:;"  title="启用">
-                <i class="layui-icon">&#xe601;</i>
-              </a>
-              <a title="编辑"  onclick="x_admin_show('编辑','role-add.html')" href="javascript:;">
-                <i class="layui-icon">&#xe642;</i>
-              </a>
-              <a title="删除" onclick="member_del(this,'要删除的id')" href="javascript:;">
-                <i class="layui-icon">&#xe640;</i>
-              </a>
-            </td>
-          </tr>
-        </tbody>
-      </table>
-      <div class="page">
-        <div>
-          <a class="prev" href="">&lt;&lt;</a>
-          <a class="num" href="">1</a>
-          <span class="current">2</span>
-          <a class="num" href="">3</a>
-          <a class="num" href="">489</a>
-          <a class="next" href="">&gt;&gt;</a>
-        </div>
-      </div>
-
-    </div>
-    <script>
-      layui.use('laydate', function(){
-        var laydate = layui.laydate;
-        
-        //执行一个laydate实例
-        laydate.render({
-          elem: '#start' //指定元素
-        });
-
-        //执行一个laydate实例
-        laydate.render({
-          elem: '#end' //指定元素
-        });
-      });
-
-       /*用户-停用*/
-      function member_stop(obj,id){
-          layer.confirm('确认要停用吗?',function(index){
-
-              if($(obj).attr('title')=='启用'){
-
-                //发异步把用户状态进行更改
-                $(obj).attr('title','停用')
-                $(obj).find('i').html('&#xe62f;');
-
-                $(obj).parents("tr").find(".td-status").find('span').addClass('layui-btn-disabled').html('已停用');
-                layer.msg('已停用!',{icon: 5,time:1000});
-
-              }else{
-                $(obj).attr('title','启用')
-                $(obj).find('i').html('&#xe601;');
-
-                $(obj).parents("tr").find(".td-status").find('span').removeClass('layui-btn-disabled').html('已启用');
-                layer.msg('已启用!',{icon: 5,time:1000});
-              }
-              
-          });
-      }
-
-      /*用户-删除*/
-      function member_del(obj,id){
-          layer.confirm('确认要删除吗?',function(index){
-              //发异步删除数据
-              $(obj).parents("tr").remove();
-              layer.msg('已删除!',{icon:1,time:1000});
-          });
-      }
-
-
-
-      function delAll (argument) {
-
-        var data = tableCheck.getData();
-  
-        layer.confirm('确认要删除吗?'+data,function(index){
-            //捉到所有被选中的,发异步进行删除
-            layer.msg('删除成功', {icon: 1});
-            $(".layui-form-checked").not('.header').parents('tr').remove();
-        });
-      }
-    </script>
-  </body>
-
-</html>

+ 0 - 16
web/UM-admin/css/font.css

@@ -1,16 +0,0 @@
-@font-face {
-  font-family: 'iconfont';
-  src: url('../fonts/iconfont.eot');
-  src: url('../fonts/iconfont.eot?#iefix') format('embedded-opentype'),
-  url('../fonts/iconfont.woff') format('woff'),
-  url('../fonts/iconfont.ttf') format('truetype'),
-  url('../fonts/iconfont.svg#iconfont') format('svg');
-}
-.iconfont{
-  font-family:"iconfont" !important;
-  font-size:16px;font-style:normal;
-  -webkit-font-smoothing: antialiased;
-  -webkit-text-stroke-width: 0.2px;
-  -moz-osx-font-smoothing: grayscale;
-}
-

+ 0 - 523
web/UM-admin/css/xadmin.css

@@ -1,523 +0,0 @@
-@charset "utf-8";
-@import url(../lib/layui/css/layui.css);
-*{
-    margin: 0px;
-    padding: 0px;
-    font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
-}
-a{
-    text-decoration: none;
-}
-html{
-    width: 100%;
-    height: 100%;
-    overflow-x:hidden; 
-    overflow-y:auto;
-}
-body{
-    width: 100%;
-    min-height: 100%;
-}
-.login-bg{
-    /*background: #eeeeee url() 0 0 no-repeat;*/
-     background:url(../images/bg.png) no-repeat center;
-    background-size: cover;
-    overflow: hidden;
-}
-.login{
-    margin: 120px auto 0 auto;
-    min-height: 420px;
-    max-width: 420px;
-    padding: 40px;
-    background-color: #ffffff;
-    margin-left: auto;
-    margin-right: auto;
-    border-radius: 4px;
-    /* overflow-x: hidden; */
-    box-sizing: border-box;
-}
-.login a.logo{
-    display: block;
-    height: 58px;
-    width: 167px;
-    margin: 0 auto 30px auto;
-    background-size: 167px 42px;
-}
-.login .message {
-    margin: 10px 0 0 -58px;
-    padding: 18px 10px 18px 60px;
-    background: #189F92;
-    position: relative;
-    color: #fff;
-    font-size: 16px;
-}
-.login #darkbannerwrap {
-    background: url(../images/aiwrap.png);
-    width: 18px;
-    height: 10px;
-    margin: 0 0 20px -58px;
-    position: relative;
-}
-
-.login input[type=text],
-.login input[type=file],
-.login input[type=password],
-.login input[type=email], select {
-    border: 1px solid #DCDEE0;
-    vertical-align: middle;
-    border-radius: 3px;
-    height: 50px;
-    padding: 0px 16px;
-    font-size: 14px;
-    color: #555555;
-    outline:none;
-    width:100%;
-    box-sizing: border-box;
-}
-.login input[type=text]:focus,
-.login input[type=file]:focus,
-.login input[type=password]:focus,
-.login input[type=email]:focus, select:focus {
-    border: 1px solid #27A9E3;
-}
-.login input[type=submit],
-.login input[type=button]{
-    display: inline-block;
-    vertical-align: middle;
-    padding: 12px 24px;
-    margin: 0px;
-    font-size: 18px;
-    line-height: 24px;
-    text-align: center;
-    white-space: nowrap;
-    vertical-align: middle;
-    cursor: pointer;
-    color: #ffffff;
-    background-color: #189F92;
-    border-radius: 3px;
-    border: none;
-    -webkit-appearance: none;
-    outline:none;
-    width:100%;
-}
-.login hr {
-    background: #fff url() 0 0 no-repeat;
-}
-.login hr.hr15 {
-    height: 15px;
-    border: none;
-    margin: 0px;
-    padding: 0px;
-    width: 100%;
-}
-.login hr.hr20 {
-    height: 20px;
-    border: none;
-    margin: 0px;
-    padding: 0px;
-    width: 100%;
-}
-.x-body{
-    padding: 20px;
-}
-.x-nav{
-    padding: 0 20px;
-    position: relative;
-    z-index: 99;
-    border-bottom: 1px solid #e5e5e5;
-    line-height: 39px;
-    height: 39px;
-    overflow: hidden;
-}
-xblock{
-    display: block;
-    margin-bottom: 10px;
-    padding: 5px;
-    line-height: 22px;
-    /* border-left: 5px solid #009688; */
-    border-radius: 0 2px 2px 0;
-    background-color: #f2f2f2;
-}
-.x-right{
-  float: right;
-}
-.x-so{
-    /*text-align: center;*/
-    /*background: #f2f2f2 url() 0 0 no-repeat;*/
-    margin-bottom: 20px;
-}
-.x-so input.layui-input{
-    width: 150px;
-}
-.x-so .layui-form-label{
-    display: inline-block;
-}
-.x-so input.layui-input,.x-so input.layui-btn{
-    display: inline-block;
-}
-.x-red{
-    color: red;
-}
-.x-a{
-    color: #1AA093;
-}
-.x-a:hover{
-    color: #127F74;
-}
-.x-sort{
-    height: 30px;
-}
-.x-show{
-    cursor: pointer;
-}
-.layui-form-switch{
-    margin-top: 0px;
-}
-.layui-input:focus, .layui-textarea:focus {
-    border-color: #189f92!important;
-}
-
-.page{
-    margin-top: 20px;
-    text-align: center;
-
-}
-.page a{
-    display: inline-block;
-    background: #fff url() 0 0 no-repeat;
-    color: #888;
-    padding: 10px;
-    min-width: 15px;
-    border: 1px solid #E2E2E2;
-
-}
-.page span{
-    display: inline-block;
-    padding: 10px;
-    min-width: 15px;
-    border: 1px solid #E2E2E2;
-}
-.page span.current{
-    display: inline-block;
-    background: #009688 url() 0 0 no-repeat;
-    color: #fff;
-    padding: 10px;
-    min-width: 15px;
-    border: 1px solid #009688;
-}
-.page .pagination li{
-    display: inline-block;
-    margin-right: 5px;
-    text-align: center;
-}
-.page .pagination li.active span{
-    background: #009688 url() 0 0 no-repeat;
-    color: #fff;
-    border: 1px solid #009688;
-
-}
-
-/*登录样式*/
-/*头部*/
-.container{
-    width: 100%;
-    height: 45px;
-    background-color: #222;
-    border-bottom: 1px solid rgba(255, 255, 255, 0.2);
-}
-.container .logo a{
-    float: left;
-    color: #fff;
-    font-size: 18px;
-    padding-left: 20px;
-    line-height: 45px;
-    width: 200px;
-}
-.container .right{
-    background-color:rgba(0,0,0,0);
-    float: right;
-
-}
-.container .left_open{
-    height: 45px;
-    float: left;
-}
-.container .left_open i{
-    display: block;
-    background: rgba(255,255,255,0.1) url() 0 0 no-repeat;
-    color: #fff;
-    width: 32px;
-    height: 32px;
-    line-height: 32px;
-    border-radius: 3px;
-    text-align: center;
-    margin-top: 7px;
-    cursor: pointer;
-}
-.container .left_open i:hover{
-    background: rgba(255,255,255,0.3) url() 0 0 no-repeat;
-}
-
-.container .left{
-    background-color:rgba(0,0,0,0);
-    float: left;
-
-}
-.container .layui-nav-item{
-    line-height: 45px;
-}
-.container .layui-nav-more{
-    top: 20px;
-}
-.container .layui-nav-child{
-    top: 50px;
-}
-.container .layui-nav-child i{
-    margin-right: 10px;
-}
-.layui-nav .layui-nav-item a{
-    color: #fff;
-    cursor: pointer;
-}
-.layui-nav .layui-nav-child a{
-    color: #333;
-    cursor: pointer;
-}
-.left-nav{
-    position: absolute;
-    top: 46px;
-    bottom: 42px;
-    left: 0;
-    z-index: 2;
-    padding-top: 10px;
-    background-color: #EEEEEE;
-    width: 220px;
-    max-width: 220px;
-    overflow: auto;
-    overflow-x:hidden;
-    border-right: 1px solid #e5e5e5;
-
-    /*width: 0px;*/
-}
-.left-nav #nav li{
-    border-bottom: 1px solid #e5e5e5;
-}
-.left-nav #nav li:hover > a{
-    /*color: blue;*/
-}
-.left-nav #nav .current{
-    background-color: rgba(0, 0, 0, 0.3);
-}
-.left-nav #nav li a{
-    font-size: 14px;
-    padding: 10px 15px 10px 20px;
-    display: block;
-    cursor: pointer;
-}
-.left-nav #nav li a cite{
-    font-size: 14px;
-}
-
-.left-nav #nav li .sub-menu{
-    display: none;
-}
-.left-nav #nav li .opened{
-    display: block;
-}
-.left-nav #nav li .opened:hover{
-    /*background: #fff url() 0 0 no-repeat;*/
-}
-.left-nav #nav li .opened .current{
-    
-}
-.left-nav #nav li .sub-menu li:hover{
-    /*color: blue;*/
-     /*background: #fff url() 0 0 no-repeat;*/
-}
-.left-nav #nav li .sub-menu li a{
-    padding: 12px 15px 12px 30px;
-    font-size: 14px;
-    cursor: pointer;
-}
-.left-nav #nav li .sub-menu li .sub-menu li a{
-    padding-left: 45px;
-}
-.left-nav #nav li .sub-menu li a:hover{
-    color: #148cf1;
-}
-.left-nav #nav li .sub-menu li a i{
-    font-size: 12px;
-}
-.left-nav #nav li a i{
-    padding-right: 10px;
-    line-height: 14px;
-}
-.left-nav #nav li .nav_right{
-    float: right;
-    font-size: 16px;
-}
-.x-slide_left {
-    width: 17px;
-    height: 61px;
-    background: url(../images/icon.png) 0 0 no-repeat;
-    position: absolute;
-    top: 200px;
-    left: 221px;
-    cursor: pointer;
-    z-index: 3;
-}
-.page-content{
-    position: absolute;
-    top: 46px;
-    right: 0;
-    bottom: 42px;
-    left: 221px;
-    overflow: hidden;
-    z-index: 1;
-}
-.page-content-bg{
-    position: absolute;
-    top: 46px;
-    right: 0;
-    bottom: 42px;
-    left: 221px;
-    background: rgba(0,0,0,0.5); url() 0 0 no-repeat;
-    overflow: hidden;
-    z-index: 100;
-    display: none;
-}
-
-.page-content .tab{
-    height: 100%;
-    width: 100%;
-    background: #EFEEF0 url() 0 0 no-repeat;
-    margin: 0px;
-}
-.page-content .layui-tab-title{
-    /*padding-top: 5px;*/
-    height: 35px;
-    background: #EFEEF0 url() 0 0 no-repeat;
-    position: relative;
-    z-index: 100;
-}
-.page-content .layui-tab-title li.home i{
-    padding-right: 5px;
-}
-.page-content .layui-tab-title li.home .layui-tab-close{
-    display: none;
-}
-.page-content .layui-tab-title li{
-    line-height: 35px;
-}
-.page-content .layui-tab-title .layui-this:after{
-    height: 36px;
-}
-.page-content .layui-tab-title li .layui-tab-close{
-    border-radius: 50%;
-}
-.page-content .layui-tab-title .layui-this{
-    background: #fff url() 0 0 no-repeat;
-}
-.page-content .layui-tab-bar{
-    height:34px;
-    line-height: 35px;
-}
-.page-content .layui-tab-content{
-    position: absolute;
-    top: 36px;
-    bottom: 0px;
-    width: 100%;
-    background: #fff url() 0 0 no-repeat;
-    padding: 0px;
-    overflow: hidden;
-}
-.page-content .layui-tab-content .layui-tab-item{
-    width: 100%;
-    height: 100%;
-    
-}
-.page-content .layui-tab-content .layui-tab-item iframe{
-    width: 100%;
-    height: 100%;
-
-}
-.x-admin-carousel,.layui-carousel,.x-admin-carousel>[carousel-item]>* {
-    background-color:#fff
-}
-
-.x-admin-backlog .x-admin-backlog-body {
-    display:block;
-    padding:10px 15px;
-    background-color:#f8f8f8;
-    color:#999;
-    border-radius:2px;
-    transition:all .3s;
-    -webkit-transition:all .3s
-}
-.x-admin-backlog-body h3 {
-    padding-bottom:10px;
-    font-size:12px
-}
-.x-admin-backlog-body p cite {
-    font-style:normal;
-    font-size:30px;
-    font-weight:300;
-    color:#009688
-}
-.x-admin-backlog-body:hover {
-    background-color:#CFCFCF;
-    color:#888
-}
-
-.welcome-footer{padding: 30px 0; line-height: 30px; text-align: center; background-color: #eee; color: #666; font-weight: 300;}
-body .layui-layout-admin .footer-demo{height: auto; padding: 15px 0; line-height: 26px;}
-.welcome-footer a{padding: 0 5px;}
-
-table th, table td {
-    word-break: break-all;
-}
-
-.footer{
-    position: fixed;
-    bottom: 0px;
-    width: 100%;
-    background-color: #222;
-    border-top: 1px solid rgba(255, 255, 255, 0.2);
-    line-height: 41px;
-    color: #fff;
-    /*padding-left: 10px;*/
-}
-.footer .copyright{
-    margin-left: 10px;
-}
-
-
-@media screen and (max-width: 768px){
-    .fast-add{
-        display: none;
-    }
-    .layui-nav .to-index{
-        display: none;
-    }
-    .container .logo a{
-        width: 140px;
-    }
-    .container .left_open {
-        /*float: right;*/
-    }
-    .left-nav{
-        left: -221px;
-    }
-    .page-content{
-        left: 0px;
-    }
-    .page-content .layui-tab-content .layui-tab-item{
-        -webkit-overflow-scrolling: touch; 
-        overflow-y: scroll; 
-    }
-    .x-so input.layui-input{
-        width: 100%;
-        margin: 10px;
-    }
-}
-

二进制
web/UM-admin/fonts/iconfont.eot


文件差异内容过多而无法显示
+ 0 - 44
web/UM-admin/fonts/iconfont.svg


二进制
web/UM-admin/fonts/iconfont.ttf


二进制
web/UM-admin/fonts/iconfont.woff


+ 0 - 444
web/UM-admin/history-uid-list.html

@@ -1,444 +0,0 @@
-<!DOCTYPE html>
-<html>
-
-<head>
-    <meta charset="UTF-8">
-    <title>欢迎页面</title>
-    <meta name="renderer" content="webkit">
-    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-    <meta name="viewport"
-          content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi"/>
-    <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon"/>
-    <link rel="stylesheet" href="./css/font.css">
-    <link rel="stylesheet" href="./css/xadmin.css">
-    <script type="text/javascript" src="./js/jquery-3.3.1.min.js"></script>
-    <script type="text/javascript" src="./lib/layui/layui.js" charset="utf-8"></script>
-    <script type="text/javascript" src="js/admin.js"></script>
-    <script type="text/javascript" src="./js/jquery_cookie_min.js"></script>
-    <script type="text/javascript" src="./js/jqhttpsdk.js"></script>
-
-    <!-- 让IE8/9支持媒体查询,从而兼容栅格 -->
-    <!--[if lt IE 9]>
-    <script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
-    <script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
-    <![endif]-->
-</head>
-
-<body>
-<div class="x-nav">
-      <span class="layui-breadcrumb">
-        <a href="">首页</a>
-        <a href="">历史UID管理</a>
-        <a>
-          <cite>管理</cite></a>
-      </span>
-    <a class="layui-btn layui-btn-small" style="line-height:1.6em;margin-top:3px;float:right"
-       href="javascript:location.replace(location.href);" title="刷新">
-        <i class="layui-icon" style="line-height:30px">ဂ</i></a>
-</div>
-<div class="x-body">
-    <div class="layui-row">
-        <form class="layui-form layui-col-md12 x-so">
-            <input class="layui-input" placeholder="开始日" name="start" id="start">
-            <input class="layui-input" placeholder="截止日" name="end" id="end">
-            <div class="layui-input-inline" style="display: none;">
-                <label class="layui-inline">
-                    <select lay-filter="is_use_select" id="status_use_id">
-                        <option value="">状态</option>
-                        <option value="0">未占用</option>
-                        <option value="1">待占用</option>
-                        <option value="2">已占用</option>
-                    </select>
-
-                </label>
-            </div>
-
-            <div class="layui-input-inline">
-                <label class="layui-inline">
-                    <select lay-filter="is_area_select" id="status_area_id">
-                        <option value="">地区</option>
-                        <option value="0">国内</option>
-                        <option value="1">国外</option>
-                    </select>
-
-                </label>
-            </div>
-
-            <div class="layui-inline x-right">
-                <div class="layui-input-inline">
-                    <input type="text" class="layui-input searchVal" placeholder="请输入搜索的uid"/>
-                </div>
-                <a class="layui-btn search_btn" data-type="reload">搜索</a>
-            </div>
-        </form>
-    </div>
-    <xblock>
-        <button class="layui-btn layui-btn-danger delAll_btn"><i class="layui-icon"></i>批量删除</button>
-        <button class="layui-btn" onclick="x_admin_show('添加用户','./order-add.html')" style="display: none;"><i class="layui-icon"></i>添加
-        </button>
-        <a class="layui-btn layui-btn-normal distribute_btn" style="display: none;">开启分发</a>
-        <button type="button" class="layui-btn" id="imuidlist" style="display: none;">
-            <i class="layui-icon">&#xe67c;</i>导入
-        </button>
-    </xblock>
-    <table id="uidlisttab" lay-filter="uidlisttab"></table>
-</div>
-<script>
-    function print(data) {
-        console.log(data)
-    }
-
-    layui.use(['table', 'upload', 'layer', 'form', 'laydate'], function () {
-        var table = layui.table;
-        var $ = jQuery = layui.$;
-        var form = layui.form;
-        var upload = layui.upload;
-        var laydate = layui.laydate;
-
-        //执行一个laydate实例
-        laydate.render({
-            elem: '#start' //指定元素
-            , done: function (value, date, endDate) {
-                // console.log(Date.parse(value))
-                // print(Date.parse($('#start').val())/1000)
-                var starttime = $('#start').val()
-                var endtime = $('#end').val()
-                if (starttime) {
-                    starttime = Date.parse(starttime) / 1000
-                } else {
-                    starttime = ''
-                }
-                if (endtime) {
-                    endtime = Date.parse(endtime) / 1000
-                } else {
-                    endtime = ''
-                }
-                searchTable({
-                    // is_use: $('#status_use_id').val(),
-                    // uid: $(".searchVal").val(),
-                    starttime: starttime,
-                    endtime: endtime
-                })
-            }
-        });
-
-        //执行一个laydate实例
-        laydate.render({
-            elem: '#end' //指定元素
-            , done: function (value, date, endDate) {
-                var starttime = $('#start').val()
-                var endtime = $('#end').val()
-                if (starttime) {
-                    starttime = Date.parse(starttime) / 1000
-                } else {
-                    starttime = ''
-                }
-                if (endtime) {
-                    endtime = Date.parse(endtime) / 1000
-                } else {
-                    endtime = ''
-                }
-                searchTable({
-                    // is_use: $('#status_use_id').val(),
-                    // uid: $(".searchVal").val(),
-                    starttime: starttime,
-                    endtime: endtime
-                })
-            }
-        });
-        //第一个实例
-        var tableIns = table.render({
-            elem: '#uidlisttab',
-            //height: 600,
-            height: 'full',
-            url: http_ip_port + '/history/list', //数据接口
-            page: true, //开启分页
-            limit: 10,
-            cols: [[ //表头
-                {type: "checkbox", fixed: "left", width: 50},
-                {field: 'uid', title: 'UID', width: 250, sort: true,},
-                {field: 'mac', title: 'mac地址', width: 250},
-                {field: 'area', title: '地区', width: 80, templet: '#area'},
-                {field: 'status', title: '使用状态', width: 100, templet: '#isUse'},
-                {field: 'add_time', title: '添加时间', width: 250, sort: true, templet: '#add_time'},
-                {field: 'update_time', title: '修改时间', width: 250, templet:'#update_time'},
-                {title: '操作', templet: '#ListBar', fixed: "right", align: "center"}
-            ]],
-            where: {token: $.cookie('access_token')},
-            parseData: function (res) {
-                console.log(res)
-                return {
-                    "code": res['code'],
-                    "msg": res['msg'],
-                    "count": res['res']['count'],
-                    "data": res['res']['data'],
-                }
-            }
-        });
-        //列表操作
-        table.on('tool(uidlisttab)', function (obj) {
-            var layEvent = obj.event,
-                data = obj.data;
-            if (layEvent === 'edit') { //编辑
-                /*var url = './uid-edit.html?uid=' + data.uid + '&mac=' + data.mac + '&status=' + data.status
-                    + '&add_time=' + data.add_time + '&update_time=' + data.update_time;
-
-                x_admin_show('编辑', url);*/
-            } else if (layEvent === 'del') { //删除
-                layer.confirm('确定删除\r\n' + data.uid + '?', {icon: 3, title: '提示信息'}, function (index) {
-                    console.log(data);
-                    $.post(http_ip_port + "/history/delete", {
-                        uid: data.uid,  //将需要删除的newsId作为参数传入
-                        token: $.cookie('access_token')
-                    }, function (data) {
-                        console.log(data);
-                        tableIns.reload();
-                        layer.close(index);
-                    })
-                });
-            } else if (layEvent === 'look') { //预览
-                layer.alert("此功能需要前台展示,实际开发中传入对应的必要参数进行文章内容页面访问")
-            }
-        });
-        //执行实例
-        upload.render({
-            elem: '#imuidlist', //绑定元素
-            url: http_ip_port + '/uid/register/', //上传接口
-            accept: 'file',
-            data: {
-                token: function () {
-                    return $.cookie('access_token')
-                }
-            },
-            done: function (res) {
-                console.log(res);
-                layer.msg(res['msg']);
-                //上传完毕回调
-                if (res['code'] == 0) {
-                    tableIns.reload();
-                }
-            }
-            , error: function () {
-                //请求异常回调
-            }
-        });
-
-        //批量删除
-        $(".delAll_btn").click(function () {
-            var checkStatus = table.checkStatus('uidlisttab'),
-                data = checkStatus.data,
-                uidlist = [];
-            if (data.length > 0) {
-                for (var i in data) {
-                    uidlist.push(data[i].uid);
-                }
-                console.log(JSON.stringify(uidlist))
-                layer.confirm('确定删除选中的数据?', {icon: 3, title: '提示信息'}, function (index) {
-                    console.log(uidlist)
-                    $.post(
-                        http_ip_port + '/history/batchDelete',
-
-                        {
-                            "uidlist": JSON.stringify(uidlist),
-                            'token': $.cookie('access_token')
-                        },
-                        function (data) {
-                            console.log(data);
-                            tableIns.reload();
-                            layer.close(index);
-                        }
-                    );
-                })
-            } else {
-                layer.msg("请选择需要删除的数据");
-            }
-        })
-
-        function searchTable(where) {
-            // where['token'] = $.cookie('access_token')
-            print(where);
-            table.reload("uidlisttab", {
-                page: {
-                    curr: 1 //重新从第 1 页开始
-                },
-                where: where
-                // {
-                // uid: $(".searchVal").val(),  //搜索的关键字
-                // mac: $(".searchVal").val()
-                // }
-                , parseData: function (res) { //res 即为原始返回的数据
-                    print(res);
-                    console.log(res);
-                    return {
-                        "code": res['code'],
-                        "msg": res['msg'],
-                        "count": res['res']['count'],
-                        "data": res['res']['data'],
-                    };
-                }
-            });
-        }
-
-        //搜索【此功能需要后台配合,所以暂时没有动态效果演示】
-        $(".search_btn").on("click", function () {
-            if ($(".searchVal").val() != '') {
-                searchTable({uid: $(".searchVal").val()});
-            } else {
-                tableIns.reload();
-                layer.msg("请输入搜索的内容");
-            }
-        });
-
-        // select框bind事件
-        form.on('select(is_use_select)', function (data) {
-            console.log(data['value']);
-            var is_use = data['value'];
-            // tableIns.reload()
-            searchTable({
-                status: is_use,
-                uid: $(".searchVal").val(),
-            })
-        });
-
-        form.on('select(is_area_select)', function (data) {
-            console.log(data['value']);
-            var area = data['value'];
-            // tableIns.reload()
-            searchTable({
-                area: area,
-                uid: $(".searchVal").val(),
-            })
-        });
-
-        //开启关闭分发
-        $(".distribute_btn").on("click", function () {
-            var distribute;
-            var thisBtn = $(this);
-            if ($(".distribute_btn").hasClass('layui-btn-normal')) {
-                distribute = false;
-            } else if ($(".distribute_btn").hasClass('layui-btn-danger')) {
-                distribute = true;
-            }
-            $.ajax({
-                method: "post",
-                url: http_ip_port + '/sys/change/',
-                contentType: 'application/json',
-                data: JSON.stringify({
-                    "distribute": distribute,
-                    "token": $.cookie('access_token')
-                }),
-                success: function (data) {
-                    console.log(data)
-                    data = JSON.parse(data)
-                    if (data['code'] == 0) {
-                        tableIns.reload();
-                        if (data['res']['distribute']) {
-                            thisBtn.removeClass('layui-btn-danger')
-                            thisBtn.addClass('layui-btn-normal')
-                            thisBtn.html('开启分发')
-                            layer.msg('开启分发成功');
-                        } else {
-                            thisBtn.removeClass('layui-btn-normal')
-                            thisBtn.addClass('layui-btn-danger')
-                            thisBtn.html('关闭分发')
-                            layer.msg('关闭分发成功');
-                        }
-                    } else {
-                        layer.msg(data['msg']);
-                    }
-                },
-                error: function (data) {
-                    layer.msg(data['msg']);
-                }
-            });
-        });
-
-        //  初始化分发状态按钮
-        function IndexSys() {
-            /*$.ajax({
-                method: "get",
-                url: http_ip_port + '/sys/'+'?token='+$.cookie('access_token'),
-                dataType: 'json',
-                success: function (data) {
-                    if (data['code'] == 0) {
-                        tableIns.reload();
-                        console.log(data)
-                        if (data['res']['distribute']) {
-                            $(".distribute_btn").removeClass('layui-btn-danger')
-                            $(".distribute_btn").addClass('layui-btn-normal')
-                            $(".distribute_btn").html('开启分发')
-                        } else {
-                            $(".distribute_btn").removeClass('layui-btn-normal')
-                            $(".distribute_btn").addClass('layui-btn-danger')
-                            $(".distribute_btn").html('关闭分发')
-                        }
-                    } else {
-                        layer.msg('失败');
-                    }
-                }
-            });*/
-            //tableIns.reload();
-        }
-
-        IndexSys();
-    });
-
-
-</script>
-<script type="text/html" id="ListBar">
-    <a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>
-    <a class="layui-btn layui-btn-xs layui-btn-danger" lay-event="del">删除</a>
-    <!--<a class="layui-btn layui-btn-xs layui-btn-primary" lay-event="look">预览</a>-->
-</script>
-<script type="text/html" id="isUse">
-    {{#  if(d.status == 2){ }}
-    <span class="layui-red x-red">已占用</span>
-    {{#  } else if(d.status == 1){ }}
-    <span class="layui-blue">待占用</span>
-    {{#  } else if(d.status == 0) {}}
-    <span class="layui-green">未占用</span>
-    {{#  }}}
-</script>
-
-<script type="text/html" id="area">
-    {{#  if(d.area == 0){ }}
-    <span class="layui-red ">国内</span>
-    {{#  } else if(d.area == 1){ }}
-    <span class="layui-blue">国外</span>
-    {{#  }}}
-</script>
-
-<script type="text/html" id="add_time">
-    {{#
-    var fun = function formatDate(date) {
-    var date = new Date(date);
-    var YY = date.getFullYear() + '-';
-    var MM = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
-    var DD = (date.getDate() < 10 ? '0' + (date.getDate()) : date.getDate());
-    var hh = (date.getHours() < 10 ? '0' + date.getHours() : date.getHours()) + ':';
-    var mm = (date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes()) + ':';
-    var ss = (date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds());
-    return YY + MM + DD +" "+hh + mm + ss;
-    };
-    }}
-    <span class="layui-green">{{ fun(d.add_time * 1000) }}</span>
-</script>
-
-<script type="text/html" id="update_time">
-    {{#
-    var fun = function formatDate(date) {
-    var date = new Date(date);
-    var YY = date.getFullYear() + '-';
-    var MM = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
-    var DD = (date.getDate() < 10 ? '0' + (date.getDate()) : date.getDate());
-    var hh = (date.getHours() < 10 ? '0' + date.getHours() : date.getHours()) + ':';
-    var mm = (date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes()) + ':';
-    var ss = (date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds());
-    return YY + MM + DD +" "+hh + mm + ss;
-    };
-    }}
-    <span class="layui-green">{{ fun(d.update_time * 1000) }}</span>
-</script>
-</body>
-
-</html>

二进制
web/UM-admin/images/aiwrap.png


二进制
web/UM-admin/images/bg.png


+ 0 - 173
web/UM-admin/index.html

@@ -1,173 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <meta charset="UTF-8">
-    <title>后台登录v1.0</title>
-    <meta name="renderer" content="webkit|ie-comp|ie-stand">
-    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-    <meta name="viewport"
-          content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi"/>
-    <meta http-equiv="Cache-Control" content="no-siteapp"/>
-
-    <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon"/>
-    <link rel="stylesheet" href="./css/font.css">
-    <link rel="stylesheet" href="./css/xadmin.css">
-    <script type="text/javascript" src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
-    <script src="./lib/layui/layui.js" charset="utf-8"></script>
-    <script type="text/javascript" src="js/admin.js"></script>
-    <script type="text/javascript" src="./js/jquery_cookie_min.js"></script>
-</head>
-<body>
-<!-- 顶部开始 -->
-<div class="container">
-    <div class="logo"><a href="./index.html">后台 v1.0</a></div>
-    <div class="left_open">
-        <i title="展开左侧栏" class="iconfont">&#xe699;</i>
-    </div>
-    <!--<ul class="layui-nav left fast-add" lay-filter="">-->
-    <!--<li class="layui-nav-item">-->
-    <!--<a href="javascript:;">+新增</a>-->
-    <!--<dl class="layui-nav-child"> &lt;!&ndash; 二级菜单 &ndash;&gt;-->
-    <!--<dd><a onclick="x_admin_show('资讯','http://www.baidu.com')"><i class="iconfont">&#xe6a2;</i>资讯</a></dd>-->
-    <!--<dd><a onclick="x_admin_show('图片','http://www.baidu.com')"><i class="iconfont">&#xe6a8;</i>图片</a></dd>-->
-    <!--<dd><a onclick="x_admin_show('用户','http://www.baidu.com')"><i class="iconfont">&#xe6b8;</i>用户</a></dd>-->
-    <!--</dl>-->
-    <!--</li>-->
-    <!--</ul>-->
-    <ul class="layui-nav right" lay-filter="">
-        <li class="layui-nav-item">
-            <a href="javascript:;" id="username_title">xxx</a>
-            <dl class="layui-nav-child"> <!-- 二级菜单 -->
-                <!--<dd><a onclick="x_admin_show('个人信息','http://www.baidu.com')">个人信息</a></dd>-->
-                <!--<dd><a onclick="x_admin_show('切换帐号','http://www.baidu.com')">切换帐号</a></dd>-->
-                          <!--       <dd><a href="./login.html" onclick="exitAccount()">退出</a></dd>-->
-                <dd><a onclick="exitAccount()">退出</a></dd>
-            </dl>
-        </li>
-        <!--<li class="layui-nav-item to-index"><a href="/">test</a></li>-->
-    </ul>
-
-</div>
-<!-- 顶部结束 -->
-<!-- 中部开始 -->
-<!-- 左侧菜单开始 -->
-<div class="left-nav">
-    <div id="side-nav">
-        <ul id="nav" style="display:block;">
-            <!--start new-->
-            <li>
-                <a href="javascript:;">
-                    <i class="iconfont">&#xe723;</i>
-                    <cite>UID管理</cite>
-                    <i class="iconfont nav_right">&#xe697;</i>
-                </a>
-                <ul class="sub-menu">
-                    <li>
-                        <a _href="umlist.html">
-                            <i class="iconfont">&#xe6a7;</i>
-                            <cite>UID信息</cite>
-                        </a>
-                    </li>
-                </ul>
-            </li>
-            <li>
-                <a href="javascript:;">
-                    <i class="iconfont">&#59409;</i>
-                    <cite>日志管理</cite>
-                    <i class="iconfont nav_right">&#xe697;</i>
-                </a>
-                <ul class="sub-menu">
-                    <li>
-                        <a _href="umlog.html">
-                            <i class="iconfont">&#xe6a7;</i>
-                            <cite>日志</cite>
-                        </a>
-                    </li>
-                </ul>
-            </li>
-
-            <li>
-                <a href="javascript:;">
-                    <i class="iconfont">&#xe6b8;</i>
-                    <cite>用户管理</cite>
-                    <i class="iconfont nav_right">&#xe697;</i>
-                </a>
-                <ul class="sub-menu">
-                    <li>
-                        <a _href="member-list.html">
-                            <i class="iconfont">&#xe6a7;</i>
-                            <cite>用户信息</cite>
-                        </a>
-                    </li>
-                </ul>
-            </li>
-
-            <li>
-                <a href="javascript:;">
-                    <i class="iconfont">&#59171;</i>
-                    <cite>订单任务管理</cite>
-                    <i class="iconfont nav_right">&#xe697;</i>
-                </a>
-                <ul class="sub-menu">
-                    <li>
-                        <a _href="order-task.html">
-                            <i class="iconfont">&#xe6a7;</i>
-                            <cite>订单任务</cite>
-                        </a>
-                    </li>
-                </ul>
-            </li>
-
-            <li>
-                <a href="javascript:;">
-                    <i class="iconfont">&#xe723;</i>
-                    <cite>历史UID管理</cite>
-                    <i class="iconfont nav_right">&#xe697;</i>
-                </a>
-                <ul class="sub-menu">
-                    <li>
-                        <a _href="history-uid-list.html">
-                            <i class="iconfont">&#xe6a7;</i>
-                            <cite>历史UID信息</cite>
-                        </a>
-                    </li>
-                </ul>
-            </li>
-        </ul>
-    </div>
-</div>
-<!-- <div class="x-slide_left"></div> -->
-<!-- 左侧菜单结束 -->
-<!-- 右侧主体开始 -->
-<div class="page-content">
-    <div class="layui-tab tab" lay-filter="xbs_tab" lay-allowclose="false">
-        <ul class="layui-tab-title">
-            <li class="home"><i class="layui-icon">&#xe68e;</i>首页</li>
-        </ul>
-        <div class="layui-tab-content">
-            <div class="layui-tab-item layui-show">
-                <iframe src='./welcome.html' frameborder="0" scrolling="yes" class="x-iframe"></iframe>
-            </div>
-        </div>
-    </div>
-</div>
-<div class="page-content-bg"></div>
-<!-- 右侧主体结束 -->
-<!-- 中部结束 -->
-<!-- 底部开始 -->
-<div class="footer">
-    <div class="copyright">Copyright ©2018 x-admin v2.3 & chanjunkai v1.0 All Rights Reserved</div>
-</div>
-<!-- 底部结束 -->
-</body>
-<script type="text/javascript">
-    $('#username_title').html($.cookie('username'))
-
-    function exitAccount() {
-        $.cookie('access_token', '', {expires: -1}); // 删除 cookie
-        $.cookie('refresh_token', '', {expires: -1}); // 删除 cookie
-        $.cookie('username', '', {expires: -1}); // 删除 cookie
-        window.location.href = './login.html'
-    }
-</script>
-</html>

+ 0 - 221
web/UM-admin/js/admin.js

@@ -1,221 +0,0 @@
-$(function () {
-    //加载弹出层
-    layui.use(['form', 'element'],
-        function () {
-            layer = layui.layer;
-            element = layui.element;
-        });
-
-    //触发事件
-    var tab = {
-        tabAdd: function (title, url, id) {
-            //新增一个Tab项
-            element.tabAdd('xbs_tab', {
-                title: title
-                ,
-                content: '<iframe tab-id="' + id + '" frameborder="0" src="' + url + '" scrolling="yes" class="x-iframe"></iframe>'
-                ,
-                id: id
-            })
-        }
-        , tabDelete: function (othis) {
-            //删除指定Tab项
-            element.tabDelete('xbs_tab', '44'); //删除:“商品管理”
-
-
-            othis.addClass('layui-btn-disabled');
-        }
-        , tabChange: function (id) {
-            //切换到指定Tab项
-            element.tabChange('xbs_tab', id); //切换到:用户管理
-        }
-    };
-
-
-    tableCheck = {
-        init: function () {
-            $(".layui-form-checkbox").click(function (event) {
-                if ($(this).hasClass('layui-form-checked')) {
-                    $(this).removeClass('layui-form-checked');
-                    if ($(this).hasClass('header')) {
-                        $(".layui-form-checkbox").removeClass('layui-form-checked');
-                    }
-                } else {
-                    $(this).addClass('layui-form-checked');
-                    if ($(this).hasClass('header')) {
-                        $(".layui-form-checkbox").addClass('layui-form-checked');
-                    }
-                }
-
-            });
-        },
-        getData: function () {
-            var obj = $(".layui-form-checked").not('.header');
-            var arr = [];
-            obj.each(function (index, el) {
-                arr.push(obj.eq(index).attr('data-id'));
-            });
-            return arr;
-        }
-    }
-
-    //开启表格多选
-    tableCheck.init();
-
-
-    $('.container .left_open i').click(function (event) {
-        if ($('.left-nav').css('left') == '0px') {
-            $('.left-nav').animate({left: '-221px'}, 100);
-            $('.page-content').animate({left: '0px'}, 100);
-            $('.page-content-bg').hide();
-        } else {
-            $('.left-nav').animate({left: '0px'}, 100);
-            $('.page-content').animate({left: '221px'}, 100);
-            if ($(window).width() < 768) {
-                $('.page-content-bg').show();
-            }
-        }
-
-    });
-
-    $('.page-content-bg').click(function (event) {
-        $('.left-nav').animate({left: '-221px'}, 100);
-        $('.page-content').animate({left: '0px'}, 100);
-        $(this).hide();
-    });
-
-    $('.layui-tab-close').click(function (event) {
-        $('.layui-tab-title li').eq(0).find('i').remove();
-    });
-
-    $("tbody.x-cate tr[fid!='0']").hide();
-    // 栏目多级显示效果
-    $('.x-show').click(function () {
-        if ($(this).attr('status') == 'true') {
-            $(this).html('&#xe625;');
-            $(this).attr('status', 'false');
-            cateId = $(this).parents('tr').attr('cate-id');
-            $("tbody tr[fid=" + cateId + "]").show();
-        } else {
-            cateIds = [];
-            $(this).html('&#xe623;');
-            $(this).attr('status', 'true');
-            cateId = $(this).parents('tr').attr('cate-id');
-            getCateId(cateId);
-            for (var i in cateIds) {
-                $("tbody tr[cate-id=" + cateIds[i] + "]").hide().find('.x-show').html('&#xe623;').attr('status', 'true');
-            }
-        }
-    })
-
-    //左侧菜单效果
-    // $('#content').bind("click",function(event){
-    $('.left-nav #nav li').click(function (event) {
-
-        if ($(this).children('.sub-menu').length) {
-            if ($(this).hasClass('open')) {
-                $(this).removeClass('open');
-                $(this).find('.nav_right').html('&#xe697;');
-                $(this).children('.sub-menu').stop().slideUp();
-                $(this).siblings().children('.sub-menu').slideUp();
-            } else {
-                $(this).addClass('open');
-                $(this).children('a').find('.nav_right').html('&#xe6a6;');
-                $(this).children('.sub-menu').stop().slideDown();
-                $(this).siblings().children('.sub-menu').stop().slideUp();
-                $(this).siblings().find('.nav_right').html('&#xe697;');
-                $(this).siblings().removeClass('open');
-            }
-        } else {
-
-            var url = $(this).children('a').attr('_href');
-            var title = $(this).find('cite').html();
-            var index = $('.left-nav #nav li').index($(this));
-
-            for (var i = 0; i < $('.x-iframe').length; i++) {
-                if ($('.x-iframe').eq(i).attr('tab-id') == index + 1) {
-                    tab.tabChange(index + 1);
-                    event.stopPropagation();
-                    return;
-                }
-            }
-            ;
-
-            tab.tabAdd(title, url, index + 1);
-            tab.tabChange(index + 1);
-        }
-
-        event.stopPropagation();
-
-    })
-
-})
-var cateIds = [];
-
-function getCateId(cateId) {
-
-    $("tbody tr[fid=" + cateId + "]").each(function (index, el) {
-        id = $(el).attr('cate-id');
-        cateIds.push(id);
-        getCateId(id);
-    });
-}
-
-/*弹出层*/
-
-/*
-    参数解释:
-    title   标题
-    url     请求的url
-    id      需要操作的数据id
-    w       弹出层宽度(缺省调默认值)
-    h       弹出层高度(缺省调默认值)
-*/
-function x_admin_show(title, url, w, h) {
-    if (title == null || title == '') {
-        title = false;
-    }
-    ;
-    if (url == null || url == '') {
-        url = "404.html";
-    }
-    ;
-    if (w == null || w == '') {
-        w = ($(window).width() * 0.9);
-    }
-    ;
-    if (h == null || h == '') {
-        h = ($(window).height() - 50);
-    }
-    ;
-    layer.open({
-        type: 2,
-        area: [w + 'px', h + 'px'],
-        fix: false, //不固定
-        maxmin: true,
-        shadeClose: true,
-        shade: 0.4,
-        title: title,
-        content: url
-    });
-}
-
-/*关闭弹出框口*/
-function x_admin_close() {
-    var index = parent.layer.getFrameIndex(window.name);
-    parent.layer.close(index);
-}
-
-
-function formatDate(date) {
-    var date = new Date(date);
-    var YY = date.getFullYear() + '-';
-    var MM = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
-    var DD = (date.getDate() < 10 ? '0' + (date.getDate()) : date.getDate());
-    var hh = (date.getHours() < 10 ? '0' + date.getHours() : date.getHours()) + ':';
-    var mm = (date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes()) + ':';
-    var ss = (date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds());
-    return YY + MM + DD + " " + hh + mm + ss;
-};
-
-

+ 0 - 511
web/UM-admin/js/city.js

@@ -1,511 +0,0 @@
-$.fn.xcity = function(pName,cName,aName){
-
-    var p = $(this).find('select[lay-filter=province]');
-
-    var c = $(this).find('select[lay-filter=city]');
-
-    var a = $(this).find('select[lay-filter=area]');
-
-    var cityList = [];
-
-    var areaList = [];
-
-    showP(provinceList);
-
-    showC(cityList);
-
-    showA(areaList);
-
-    function showP(provinceList) {
-        p.html('');
-
-        is_pName = false;
-        
-        for (var i in provinceList) {
-            
-            if(pName==provinceList[i].name){
-                is_pName = true;
-                cityList = provinceList[i].cityList;
-                p.append("<option selected value='"+provinceList[i].name+"'>"+provinceList[i].name+"</option>")
-            }else{
-                p.append("<option value='"+provinceList[i].name+"'>"+provinceList[i].name+"</option>")
-            }
-        }
-        if(!is_pName){
-            cityList = provinceList[0].cityList;
-        }
-        
-    }
-
-    function showC(cityList) {
-
-        c.html('');
-
-        is_cName = false;
-
-        for (var i in cityList) {
-            if(cName==cityList[i].name){
-                is_cName = true;
-                areaList = cityList[i].areaList;
-                c.append("<option selected value='"+cityList[i].name+"'>"+cityList[i].name+"</option>")
-            }else{
-                c.append("<option value='"+cityList[i].name+"'>"+cityList[i].name+"</option>")
-            }
-        }
-
-        if(!is_cName){
-            areaList = cityList[0].areaList;
-        }
-    }
-
-    function showA(areaList) {
-        a.html('');
-
-        for (var i in areaList) {
-            
-            if(aName==areaList[i]){
-                a.append("<option selected value='"+areaList[i]+"'>"+areaList[i]+"</option>")
-            }else{
-                a.append("<option value='"+areaList[i]+"'>"+areaList[i]+"</option>")
-            }
-        }
-    }
-
-    form.render('select');
-
-    form.on('select(province)', function(data){
-        pName = data.value;
-        showP(provinceList);
-        showC(cityList);
-        showA(areaList);
-        form.render('select');
-    });
-
-    form.on('select(city)', function(data){
-        cName = data.value;
-        showC(cityList);
-        showA(areaList);
-        form.render('select');
-    });
-
-
-
-}
-var provinceList = [
-{name:'北京', cityList:[		   
-{name:'市辖区', areaList:['东城区','西城区','崇文区','宣武区','朝阳区','丰台区','石景山区','海淀区','门头沟区','房山区','通州区','顺义区','昌平区','大兴区','怀柔区','平谷区']},		   
-{name:'县', areaList:['密云县','延庆县']}
-]},
-{name:'上海', cityList:[		   
-{name:'市辖区', areaList:['黄浦区','卢湾区','徐汇区','长宁区','静安区','普陀区','闸北区','虹口区','杨浦区','闵行区','宝山区','嘉定区','浦东新区','金山区','松江区','青浦区','南汇区','奉贤区']},		   
-{name:'县', areaList:['崇明县']}
-]},
-{name:'天津', cityList:[		   
-{name:'市辖区', areaList:['和平区','河东区','河西区','南开区','河北区','红桥区','塘沽区','汉沽区','大港区','东丽区','西青区','津南区','北辰区','武清区','宝坻区']},		   
-{name:'县', areaList:['宁河县','静海县','蓟 县']}
-]},
-{name:'重庆', cityList:[		   
-{name:'市辖区', areaList:['万州区','涪陵区','渝中区','大渡口区','江北区','沙坪坝区','九龙坡区','南岸区','北碚区','万盛区','双桥区','渝北区','巴南区','黔江区','长寿区']},		   
-{name:'县', areaList:['綦江县','潼南县','铜梁县','大足县','荣昌县','璧山县','梁平县','城口县','丰都县','垫江县','武隆县','忠 县','开 县','云阳县','奉节县','巫山县','巫溪县','石柱土家族自治县','秀山土家族苗族自治县','酉阳土家族苗族自治县','彭水苗族土家族自治县']},		   
-{name:'市', areaList:['江津市','合川市','永川市','南川市']}
-]},
-{name:'四川', cityList:[		   
-{name:'成都市', areaList:['市辖区','锦江区','青羊区','金牛区','武侯区','成华区','龙泉驿区','青白江区','新都区','温江县','金堂县','双流县','郫 县','大邑县','蒲江县','新津县','都江堰市','彭州市','邛崃市','崇州市']},		   
-{name:'自贡市', areaList:['市辖区','自流井区','贡井区','大安区','沿滩区','荣 县','富顺县']},		   
-{name:'攀枝花市', areaList:['市辖区','东 区','西 区','仁和区','米易县','盐边县']},		   
-{name:'泸州市', areaList:['市辖区','江阳区','纳溪区','龙马潭区','泸 县','合江县','叙永县','古蔺县']},		   
-{name:'德阳市', areaList:['市辖区','旌阳区','中江县','罗江县','广汉市','什邡市','绵竹市']},		   
-{name:'绵阳市', areaList:['市辖区','涪城区','游仙区','三台县','盐亭县','安 县','梓潼县','北川羌族自治县','平武县','江油市']},		   
-{name:'广元市', areaList:['市辖区','市中区','元坝区','朝天区','旺苍县','青川县','剑阁县','苍溪县']},		   
-{name:'遂宁市', areaList:['市辖区','船山区','安居区','蓬溪县','射洪县','大英县']},		   
-{name:'内江市', areaList:['市辖区','市中区','东兴区','威远县','资中县','隆昌县']},		   
-{name:'乐山市', areaList:['市辖区','市中区','沙湾区','五通桥区','金口河区','犍为县','井研县','夹江县','沐川县','峨边彝族自治县','马边彝族自治县','峨眉山市']},		   
-{name:'南充市', areaList:['市辖区','顺庆区','高坪区','嘉陵区','南部县','营山县','蓬安县','仪陇县','西充县','阆中市']},		   
-{name:'眉山市', areaList:['市辖区','东坡区','仁寿县','彭山县','洪雅县','丹棱县','青神县']},		   
-{name:'宜宾市', areaList:['市辖区','翠屏区','宜宾县','南溪县','江安县','长宁县','高 县','珙 县','筠连县','兴文县','屏山县']},		   
-{name:'广安市', areaList:['市辖区','广安区','岳池县','武胜县','邻水县','华莹市']},		   
-{name:'达州市', areaList:['市辖区','通川区','达 县','宣汉县','开江县','大竹县','渠 县','万源市']},		   
-{name:'雅安市', areaList:['市辖区','雨城区','名山县','荥经县','汉源县','石棉县','天全县','芦山县','宝兴县']},		   
-{name:'巴中市', areaList:['市辖区','巴州区','通江县','南江县','平昌县']},		   
-{name:'资阳市', areaList:['市辖区','雁江区','安岳县','乐至县','简阳市']},		   
-{name:'阿坝藏族羌族自治州', areaList:['汶川县','理 县','茂 县','松潘县','九寨沟县','金川县','小金县','黑水县','马尔康县','壤塘县','阿坝县','若尔盖县','红原县']},		   
-{name:'甘孜藏族自治州', areaList:['康定县','泸定县','丹巴县','九龙县','雅江县','道孚县','炉霍县','甘孜县','新龙县','德格县','白玉县','石渠县','色达县','理塘县','巴塘县','乡城县','稻城县','得荣县']},		   
-{name:'凉山彝族自治州', areaList:['西昌市','木里藏族自治县','盐源县','德昌县','会理县','会东县','宁南县','普格县','布拖县','金阳县','昭觉县','喜德县','冕宁县','越西县','甘洛县','美姑县','雷波县']}
-]},
-{name:'贵州', cityList:[		   
-{name:'贵阳市', areaList:['市辖区','南明区','云岩区','花溪区','乌当区','白云区','小河区','开阳县','息烽县','修文县','清镇市']},		   
-{name:'六盘水市', areaList:['钟山区','六枝特区','水城县','盘 县']},		   
-{name:'遵义市', areaList:['市辖区','红花岗区','汇川区','遵义县','桐梓县','绥阳县','正安县','道真仡佬族苗族自治县','务川仡佬族苗族自治县','凤冈县','湄潭县','余庆县','习水县','赤水市','仁怀市']},		   
-{name:'安顺市', areaList:['市辖区','西秀区','平坝县','普定县','镇宁布依族苗族自治县','关岭布依族苗族自治县','紫云苗族布依族自治县']},		   
-{name:'铜仁地区', areaList:['铜仁市','江口县','玉屏侗族自治县','石阡县','思南县','印江土家族苗族自治县','德江县','沿河土家族自治县','松桃苗族自治县','万山特区']},		   
-{name:'黔西南布依族苗族自治州', areaList:['兴义市','兴仁县','普安县','晴隆县','贞丰县','望谟县','册亨县','安龙县']},		   
-{name:'毕节地区', areaList:['毕节市','大方县','黔西县','金沙县','织金县','纳雍县','威宁彝族回族苗族自治县','赫章县']},		   
-{name:'黔东南苗族侗族自治州', areaList:['凯里市','黄平县','施秉县','三穗县','镇远县','岑巩县','天柱县','锦屏县','剑河县','台江县','黎平县','榕江县','从江县','雷山县','麻江县','丹寨县']},		   
-{name:'黔南布依族苗族自治州', areaList:['都匀市','福泉市','荔波县','贵定县','瓮安县','独山县','平塘县','罗甸县','长顺县','龙里县','惠水县','三都水族自治县']}
-]},
-{name:'云南', cityList:[		   
-{name:'昆明市', areaList:['市辖区','五华区','盘龙区','官渡区','西山区','东川区','呈贡县','晋宁县','富民县','宜良县','石林彝族自治县','嵩明县','禄劝彝族苗族自治县','寻甸回族彝族自治县','安宁市']},		   
-{name:'曲靖市', areaList:['市辖区','麒麟区','马龙县','陆良县','师宗县','罗平县','富源县','会泽县','沾益县','宣威市']},		   
-{name:'玉溪市', areaList:['市辖区','红塔区','江川县','澄江县','通海县','华宁县','易门县','峨山彝族自治县','新平彝族傣族自治县','元江哈尼族彝族傣族自治县']},		   
-{name:'保山市', areaList:['市辖区','隆阳区','施甸县','腾冲县','龙陵县','昌宁县']},		   
-{name:'昭通市', areaList:['市辖区','昭阳区','鲁甸县','巧家县','盐津县','大关县','永善县','绥江县','镇雄县','彝良县','威信县','水富县']},		   
-{name:'丽江市', areaList:['市辖区','古城区','玉龙纳西族自治县','永胜县','华坪县','宁蒗彝族自治县']},		   
-{name:'思茅市', areaList:['市辖区','翠云区','普洱哈尼族彝族自治县','墨江哈尼族自治县','景东彝族自治县','景谷傣族彝族自治县','镇沅彝族哈尼族拉祜族自治县','江城哈尼族彝族自治县','孟连傣族拉祜族佤族自治县','澜沧拉祜族自治县','西盟佤族自治县']},		   
-{name:'临沧市', areaList:['市辖区','临翔区','凤庆县','云 县','永德县','镇康县','双江拉祜族佤族布朗族傣族自治县','耿马傣族佤族自治县','沧源佤族自治县']},		   
-{name:'楚雄彝族自治州', areaList:['楚雄市','双柏县','牟定县','南华县','姚安县','大姚县','永仁县','元谋县','武定县','禄丰县']},		   
-{name:'红河哈尼族彝族自治州', areaList:['个旧市','开远市','蒙自县','屏边苗族自治县','建水县','石屏县','弥勒县','泸西县','元阳县','红河县','金平苗族瑶族傣族自治县','绿春县','河口瑶族自治县']},		   
-{name:'文山壮族苗族自治州', areaList:['文山县','砚山县','西畴县','麻栗坡县','马关县','丘北县','广南县','富宁县']},		   
-{name:'西双版纳傣族自治州', areaList:['景洪市','勐海县','勐腊县']},		   
-{name:'大理白族自治州', areaList:['大理市','漾濞彝族自治县','祥云县','宾川县','弥渡县','南涧彝族自治县','巍山彝族回族自治县','永平县','云龙县','洱源县','剑川县','鹤庆县']},		   
-{name:'德宏傣族景颇族自治州', areaList:['瑞丽市','潞西市','梁河县','盈江县','陇川县']},		   
-{name:'怒江傈僳族自治州', areaList:['泸水县','福贡县','贡山独龙族怒族自治县','兰坪白族普米族自治县']},		   
-{name:'迪庆藏族自治州', areaList:['香格里拉县','德钦县','维西傈僳族自治县']}
-]},
-{name:'西藏', cityList:[		   
-{name:'拉萨市', areaList:['市辖区','城关区','林周县','当雄县','尼木县','曲水县','堆龙德庆县','达孜县','墨竹工卡县']},		   
-{name:'昌都地区', areaList:['昌都县','江达县','贡觉县','类乌齐县','丁青县','察雅县','八宿县','左贡县','芒康县','洛隆县','边坝县']},		   
-{name:'山南地区', areaList:['乃东县','扎囊县','贡嘎县','桑日县','琼结县','曲松县','措美县','洛扎县','加查县','隆子县','错那县','浪卡子县']},		   
-{name:'日喀则地区', areaList:['日喀则市','南木林县','江孜县','定日县','萨迦县','拉孜县','昂仁县','谢通门县','白朗县','仁布县','康马县','定结县','仲巴县','亚东县','吉隆县','聂拉木县','萨嘎县','岗巴县']},		   
-{name:'那曲地区', areaList:['那曲县','嘉黎县','比如县','聂荣县','安多县','申扎县','索 县','班戈县','巴青县','尼玛县']},		   
-{name:'阿里地区', areaList:['普兰县','札达县','噶尔县','日土县','革吉县','改则县','措勤县']},		   
-{name:'林芝地区', areaList:['林芝县','工布江达县','米林县','墨脱县','波密县','察隅县','朗 县']}
-]},
-{name:'河南', cityList:[		   
-{name:'郑州市', areaList:['市辖区','中原区','二七区','管城回族区','金水区','上街区','邙山区','中牟县','巩义市','荥阳市','新密市','新郑市','登封市']},		   
-{name:'开封市', areaList:['市辖区','龙亭区','顺河回族区','鼓楼区','南关区','郊 区','杞 县','通许县','尉氏县','开封县','兰考县']},		   
-{name:'洛阳市', areaList:['市辖区','老城区','西工区','廛河回族区','涧西区','吉利区','洛龙区','孟津县','新安县','栾川县','嵩 县','汝阳县','宜阳县','洛宁县','伊川县','偃师市']},		   
-{name:'平顶山市', areaList:['市辖区','新华区','卫东区','石龙区','湛河区','宝丰县','叶 县','鲁山县','郏 县','舞钢市','汝州市']},		   
-{name:'安阳市', areaList:['市辖区','文峰区','北关区','殷都区','龙安区','安阳县','汤阴县','滑 县','内黄县','林州市']},		   
-{name:'鹤壁市', areaList:['市辖区','鹤山区','山城区','淇滨区','浚 县','淇 县']},		   
-{name:'新乡市', areaList:['市辖区','红旗区','卫滨区','凤泉区','牧野区','新乡县','获嘉县','原阳县','延津县','封丘县','长垣县','卫辉市','辉县市']},		   
-{name:'焦作市', areaList:['市辖区','解放区','中站区','马村区','山阳区','修武县','博爱县','武陟县','温 县','济源市','沁阳市','孟州市']},		   
-{name:'濮阳市', areaList:['市辖区','华龙区','清丰县','南乐县','范 县','台前县','濮阳县']},		   
-{name:'许昌市', areaList:['市辖区','魏都区','许昌县','鄢陵县','襄城县','禹州市','长葛市']},		   
-{name:'漯河市', areaList:['市辖区','源汇区','郾城区','召陵区','舞阳县','临颍县']},		   
-{name:'三门峡市', areaList:['市辖区','湖滨区','渑池县','陕 县','卢氏县','义马市','灵宝市']},		   
-{name:'南阳市', areaList:['市辖区','宛城区','卧龙区','南召县','方城县','西峡县','镇平县','内乡县','淅川县','社旗县','唐河县','新野县','桐柏县','邓州市']},		   
-{name:'商丘市', areaList:['市辖区','梁园区','睢阳区','民权县','睢 县','宁陵县','柘城县','虞城县','夏邑县','永城市']},		   
-{name:'信阳市', areaList:['市辖区','师河区','平桥区','罗山县','光山县','新 县','商城县','固始县','潢川县','淮滨县','息 县']},		   
-{name:'周口市', areaList:['市辖区','川汇区','扶沟县','西华县','商水县','沈丘县','郸城县','淮阳县','太康县','鹿邑县','项城市']},		   
-{name:'驻马店市', areaList:['市辖区','驿城区','西平县','上蔡县','平舆县','正阳县','确山县','泌阳县','汝南县','遂平县','新蔡县']}
-]},
-{name:'湖北', cityList:[		   
-{name:'武汉市', areaList:['市辖区','江岸区','江汉区','乔口区','汉阳区','武昌区','青山区','洪山区','东西湖区','汉南区','蔡甸区','江夏区','黄陂区','新洲区']},		   
-{name:'黄石市', areaList:['市辖区','黄石港区','西塞山区','下陆区','铁山区','阳新县','大冶市']},		   
-{name:'十堰市', areaList:['市辖区','茅箭区','张湾区','郧 县','郧西县','竹山县','竹溪县','房 县','丹江口市']},		   
-{name:'宜昌市', areaList:['市辖区','西陵区','伍家岗区','点军区','猇亭区','夷陵区','远安县','兴山县','秭归县','长阳土家族自治县','五峰土家族自治县','宜都市','当阳市','枝江市']},		   
-{name:'襄樊市', areaList:['市辖区','襄城区','樊城区','襄阳区','南漳县','谷城县','保康县','老河口市','枣阳市','宜城市']},		   
-{name:'鄂州市', areaList:['市辖区','梁子湖区','华容区','鄂城区']},		   
-{name:'荆门市', areaList:['市辖区','东宝区','掇刀区','京山县','沙洋县','钟祥市']},		   
-{name:'孝感市', areaList:['市辖区','孝南区','孝昌县','大悟县','云梦县','应城市','安陆市','汉川市']},		   
-{name:'荆州市', areaList:['市辖区','沙市区','荆州区','公安县','监利县','江陵县','石首市','洪湖市','松滋市']},		   
-{name:'黄冈市', areaList:['市辖区','黄州区','团风县','红安县','罗田县','英山县','浠水县','蕲春县','黄梅县','麻城市','武穴市']},		   
-{name:'咸宁市', areaList:['市辖区','咸安区','嘉鱼县','通城县','崇阳县','通山县','赤壁市']},		   
-{name:'随州市', areaList:['市辖区','曾都区','广水市']},		   
-{name:'恩施土家族苗族自治州', areaList:['恩施市','利川市','建始县','巴东县','宣恩县','咸丰县','来凤县','鹤峰县']},		   
-{name:'省直辖行政单位', areaList:['仙桃市','潜江市','天门市','神农架林区']}
-]},
-{name:'湖南', cityList:[		   
-{name:'长沙市', areaList:['市辖区','芙蓉区','天心区','岳麓区','开福区','雨花区','长沙县','望城县','宁乡县','浏阳市']},		   
-{name:'株洲市', areaList:['市辖区','荷塘区','芦淞区','石峰区','天元区','株洲县','攸 县','茶陵县','炎陵县','醴陵市']},		   
-{name:'湘潭市', areaList:['市辖区','雨湖区','岳塘区','湘潭县','湘乡市','韶山市']},		   
-{name:'衡阳市', areaList:['市辖区','珠晖区','雁峰区','石鼓区','蒸湘区','南岳区','衡阳县','衡南县','衡山县','衡东县','祁东县','耒阳市','常宁市']},		   
-{name:'邵阳市', areaList:['市辖区','双清区','大祥区','北塔区','邵东县','新邵县','邵阳县','隆回县','洞口县','绥宁县','新宁县','城步苗族自治县','武冈市']},		   
-{name:'岳阳市', areaList:['市辖区','岳阳楼区','云溪区','君山区','岳阳县','华容县','湘阴县','平江县','汨罗市','临湘市']},		   
-{name:'常德市', areaList:['市辖区','武陵区','鼎城区','安乡县','汉寿县','澧 县','临澧县','桃源县','石门县','津市市']},		   
-{name:'张家界市', areaList:['市辖区','永定区','武陵源区','慈利县','桑植县']},		   
-{name:'益阳市', areaList:['市辖区','资阳区','赫山区','南 县','桃江县','安化县','沅江市']},		   
-{name:'郴州市', areaList:['市辖区','北湖区','苏仙区','桂阳县','宜章县','永兴县','嘉禾县','临武县','汝城县','桂东县','安仁县','资兴市']},		   
-{name:'永州市', areaList:['市辖区','芝山区','冷水滩区','祁阳县','东安县','双牌县','道 县','江永县','宁远县','蓝山县','新田县','江华瑶族自治县']},		   
-{name:'怀化市', areaList:['市辖区','鹤城区','中方县','沅陵县','辰溪县','溆浦县','会同县','麻阳苗族自治县','新晃侗族自治县','芷江侗族自治县','靖州苗族侗族自治县','通道侗族自治县','洪江市']},		   
-{name:'娄底市', areaList:['市辖区','娄星区','双峰县','新化县','冷水江市','涟源市']},		   
-{name:'湘西土家族苗族自治州', areaList:['吉首市','泸溪县','凤凰县','花垣县','保靖县','古丈县','永顺县','龙山县']}
-]},
-{name:'广东', cityList:[		   
-{name:'广州市', areaList:['市辖区','东山区','荔湾区','越秀区','海珠区','天河区','芳村区','白云区','黄埔区','番禺区','花都区','增城市','从化市']},		   
-{name:'韶关市', areaList:['市辖区','武江区','浈江区','曲江区','始兴县','仁化县','翁源县','乳源瑶族自治县','新丰县','乐昌市','南雄市']},		   
-{name:'深圳市', areaList:['市辖区','罗湖区','福田区','南山区','宝安区','龙岗区','盐田区']},		   
-{name:'珠海市', areaList:['市辖区','香洲区','斗门区','金湾区']},		   
-{name:'汕头市', areaList:['市辖区','龙湖区','金平区','濠江区','潮阳区','潮南区','澄海区','南澳县']},		   
-{name:'佛山市', areaList:['市辖区','禅城区','南海区','顺德区','三水区','高明区']},		   
-{name:'江门市', areaList:['市辖区','蓬江区','江海区','新会区','台山市','开平市','鹤山市','恩平市']},		   
-{name:'湛江市', areaList:['市辖区','赤坎区','霞山区','坡头区','麻章区','遂溪县','徐闻县','廉江市','雷州市','吴川市']},		   
-{name:'茂名市', areaList:['市辖区','茂南区','茂港区','电白县','高州市','化州市','信宜市']},		   
-{name:'肇庆市', areaList:['市辖区','端州区','鼎湖区','广宁县','怀集县','封开县','德庆县','高要市','四会市']},		   
-{name:'惠州市', areaList:['市辖区','惠城区','惠阳区','博罗县','惠东县','龙门县']},		   
-{name:'梅州市', areaList:['市辖区','梅江区','梅 县','大埔县','丰顺县','五华县','平远县','蕉岭县','兴宁市']},		   
-{name:'汕尾市', areaList:['市辖区','城 区','海丰县','陆河县','陆丰市']},		   
-{name:'河源市', areaList:['市辖区','源城区','紫金县','龙川县','连平县','和平县','东源县']},		   
-{name:'阳江市', areaList:['市辖区','江城区','阳西县','阳东县','阳春市']},		   
-{name:'清远市', areaList:['市辖区','清城区','佛冈县','阳山县','连山壮族瑶族自治县','连南瑶族自治县','清新县','英德市','连州市']},		   
-{name:'东莞市', areaList:['东莞市']},		   
-{name:'中山市', areaList:['中山市']},		   
-{name:'潮州市', areaList:['市辖区','湘桥区','潮安县','饶平县']},		   
-{name:'揭阳市', areaList:['市辖区','榕城区','揭东县','揭西县','惠来县','普宁市']},		   
-{name:'云浮市', areaList:['市辖区','云城区','新兴县','郁南县','云安县','罗定市']}
-]},
-{name:'广西', cityList:[		   
-{name:'南宁市', areaList:['市辖区','兴宁区','青秀区','江南区','西乡塘区','良庆区','邕宁区','武鸣县','隆安县','马山县','上林县','宾阳县','横 县']},		   
-{name:'柳州市', areaList:['市辖区','城中区','鱼峰区','柳南区','柳北区','柳江县','柳城县','鹿寨县','融安县','融水苗族自治县','三江侗族自治县']},		   
-{name:'桂林市', areaList:['市辖区','秀峰区','叠彩区','象山区','七星区','雁山区','阳朔县','临桂县','灵川县','全州县','兴安县','永福县','灌阳县','龙胜各族自治县','资源县','平乐县','荔蒲县','恭城瑶族自治县']},		   
-{name:'梧州市', areaList:['市辖区','万秀区','蝶山区','长洲区','苍梧县','藤 县','蒙山县','岑溪市']},		   
-{name:'北海市', areaList:['市辖区','海城区','银海区','铁山港区','合浦县']},		   
-{name:'防城港市', areaList:['市辖区','港口区','防城区','上思县','东兴市']},		   
-{name:'钦州市', areaList:['市辖区','钦南区','钦北区','灵山县','浦北县']},		   
-{name:'贵港市', areaList:['市辖区','港北区','港南区','覃塘区','平南县','桂平市']},		   
-{name:'玉林市', areaList:['市辖区','玉州区','容 县','陆川县','博白县','兴业县','北流市']},		   
-{name:'百色市', areaList:['市辖区','右江区','田阳县','田东县','平果县','德保县','靖西县','那坡县','凌云县','乐业县','田林县','西林县','隆林各族自治县']},		   
-{name:'贺州市', areaList:['市辖区','八步区','昭平县','钟山县','富川瑶族自治县']},		   
-{name:'河池市', areaList:['市辖区','金城江区','南丹县','天峨县','凤山县','东兰县','罗城仫佬族自治县','环江毛南族自治县','巴马瑶族自治县','都安瑶族自治县','大化瑶族自治县','宜州市']},		   
-{name:'来宾市', areaList:['市辖区','兴宾区','忻城县','象州县','武宣县','金秀瑶族自治县','合山市']},		   
-{name:'崇左市', areaList:['市辖区','江洲区','扶绥县','宁明县','龙州县','大新县','天等县','凭祥市']}
-]},
-{name:'陕西', cityList:[		   
-{name:'西安市', areaList:['市辖区','新城区','碑林区','莲湖区','灞桥区','未央区','雁塔区','阎良区','临潼区','长安区','蓝田县','周至县','户 县','高陵县']},		   
-{name:'铜川市', areaList:['市辖区','王益区','印台区','耀州区','宜君县']},		   
-{name:'宝鸡市', areaList:['市辖区','渭滨区','金台区','陈仓区','凤翔县','岐山县','扶风县','眉 县','陇 县','千阳县','麟游县','凤 县','太白县']},		   
-{name:'咸阳市', areaList:['市辖区','秦都区','杨凌区','渭城区','三原县','泾阳县','乾 县','礼泉县','永寿县','彬 县','长武县','旬邑县','淳化县','武功县','兴平市']},		   
-{name:'渭南市', areaList:['市辖区','临渭区','华 县','潼关县','大荔县','合阳县','澄城县','蒲城县','白水县','富平县','韩城市','华阴市']},		   
-{name:'延安市', areaList:['市辖区','宝塔区','延长县','延川县','子长县','安塞县','志丹县','吴旗县','甘泉县','富 县','洛川县','宜川县','黄龙县','黄陵县']},		   
-{name:'汉中市', areaList:['市辖区','汉台区','南郑县','城固县','洋 县','西乡县','勉 县','宁强县','略阳县','镇巴县','留坝县','佛坪县']},		   
-{name:'榆林市', areaList:['市辖区','榆阳区','神木县','府谷县','横山县','靖边县','定边县','绥德县','米脂县','佳 县','吴堡县','清涧县','子洲县']},		   
-{name:'安康市', areaList:['市辖区','汉滨区','汉阴县','石泉县','宁陕县','紫阳县','岚皋县','平利县','镇坪县','旬阳县','白河县']},		   
-{name:'商洛市', areaList:['市辖区','商州区','洛南县','丹凤县','商南县','山阳县','镇安县','柞水县']}
-]},
-{name:'甘肃', cityList:[		   
-{name:'兰州市', areaList:['市辖区','城关区','七里河区','西固区','安宁区','红古区','永登县','皋兰县','榆中县']},		   
-{name:'嘉峪关市', areaList:['市辖区']},		   
-{name:'金昌市', areaList:['市辖区','金川区','永昌县']},		   
-{name:'白银市', areaList:['市辖区','白银区','平川区','靖远县','会宁县','景泰县']},		   
-{name:'天水市', areaList:['市辖区','秦城区','北道区','清水县','秦安县','甘谷县','武山县','张家川回族自治县']},		   
-{name:'武威市', areaList:['市辖区','凉州区','民勤县','古浪县','天祝藏族自治县']},		   
-{name:'张掖市', areaList:['市辖区','甘州区','肃南裕固族自治县','民乐县','临泽县','高台县','山丹县']},		   
-{name:'平凉市', areaList:['市辖区','崆峒区','泾川县','灵台县','崇信县','华亭县','庄浪县','静宁县']},		   
-{name:'酒泉市', areaList:['市辖区','肃州区','金塔县','安西县','肃北蒙古族自治县','阿克塞哈萨克族自治县','玉门市','敦煌市']},		   
-{name:'庆阳市', areaList:['市辖区','西峰区','庆城县','环 县','华池县','合水县','正宁县','宁 县','镇原县']},		   
-{name:'定西市', areaList:['市辖区','安定区','通渭县','陇西县','渭源县','临洮县','漳 县','岷 县']},		   
-{name:'陇南市', areaList:['市辖区','武都区','成 县','文 县','宕昌县','康 县','西和县','礼 县','徽 县','两当县']},		   
-{name:'临夏回族自治州', areaList:['临夏市','临夏县','康乐县','永靖县','广河县','和政县','东乡族自治县','积石山保安族东乡族撒拉族自治县']},		   
-{name:'甘南藏族自治州', areaList:['合作市','临潭县','卓尼县','舟曲县','迭部县','玛曲县','碌曲县','夏河县']}
-]},
-{name:'青海', cityList:[		   
-{name:'西宁市', areaList:['市辖区','城东区','城中区','城西区','城北区','大通回族土族自治县','湟中县','湟源县']},		   
-{name:'海东地区', areaList:['平安县','民和回族土族自治县','乐都县','互助土族自治县','化隆回族自治县','循化撒拉族自治县']},		   
-{name:'海北藏族自治州', areaList:['门源回族自治县','祁连县','海晏县','刚察县']},		   
-{name:'黄南藏族自治州', areaList:['同仁县','尖扎县','泽库县','河南蒙古族自治县']},		   
-{name:'海南藏族自治州', areaList:['共和县','同德县','贵德县','兴海县','贵南县']},		   
-{name:'果洛藏族自治州', areaList:['玛沁县','班玛县','甘德县','达日县','久治县','玛多县']},		   
-{name:'玉树藏族自治州', areaList:['玉树县','杂多县','称多县','治多县','囊谦县','曲麻莱县']},		   
-{name:'海西蒙古族藏族自治州', areaList:['格尔木市','德令哈市','乌兰县','都兰县','天峻县']}
-]},
-{name:'宁夏', cityList:[		   
-{name:'银川市', areaList:['市辖区','兴庆区','西夏区','金凤区','永宁县','贺兰县','灵武市']},		   
-{name:'石嘴山市', areaList:['市辖区','大武口区','惠农区','平罗县']},		   
-{name:'吴忠市', areaList:['市辖区','利通区','盐池县','同心县','青铜峡市']},		   
-{name:'固原市', areaList:['市辖区','原州区','西吉县','隆德县','泾源县','彭阳县','海原县']},		   
-{name:'中卫市', areaList:['市辖区','沙坡头区','中宁县']}
-]},
-{name:'新疆', cityList:[		   
-{name:'乌鲁木齐市', areaList:['市辖区','天山区','沙依巴克区','新市区','水磨沟区','头屯河区','达坂城区','东山区','乌鲁木齐县']},		   
-{name:'克拉玛依市', areaList:['市辖区','独山子区','克拉玛依区','白碱滩区','乌尔禾区']},		   
-{name:'吐鲁番地区', areaList:['吐鲁番市','鄯善县','托克逊县']},		   
-{name:'哈密地区', areaList:['哈密市','巴里坤哈萨克自治县','伊吾县']},		   
-{name:'昌吉回族自治州', areaList:['昌吉市','阜康市','米泉市','呼图壁县','玛纳斯县','奇台县','吉木萨尔县','木垒哈萨克自治县']},		   
-{name:'博尔塔拉蒙古自治州', areaList:['博乐市','精河县','温泉县']},		   
-{name:'巴音郭楞蒙古自治州', areaList:['库尔勒市','轮台县','尉犁县','若羌县','且末县','焉耆回族自治县','和静县','和硕县','博湖县']},		   
-{name:'阿克苏地区', areaList:['阿克苏市','温宿县','库车县','沙雅县','新和县','拜城县','乌什县','阿瓦提县','柯坪县']},		   
-{name:'克孜勒苏柯尔克孜自治州', areaList:['阿图什市','阿克陶县','阿合奇县','乌恰县']},		   
-{name:'喀什地区', areaList:['喀什市','疏附县','疏勒县','英吉沙县','泽普县','莎车县','叶城县','麦盖提县','岳普湖县','伽师县','巴楚县','塔什库尔干塔吉克自治县']},		   
-{name:'和田地区', areaList:['和田市','和田县','墨玉县','皮山县','洛浦县','策勒县','于田县','民丰县']},		   
-{name:'伊犁哈萨克自治州', areaList:['伊宁市','奎屯市','伊宁县','察布查尔锡伯自治县','霍城县','巩留县','新源县','昭苏县','特克斯县','尼勒克县']},		   
-{name:'塔城地区', areaList:['塔城市','乌苏市','额敏县','沙湾县','托里县','裕民县','和布克赛尔蒙古自治县']},		   
-{name:'阿勒泰地区', areaList:['阿勒泰市','布尔津县','富蕴县','福海县','哈巴河县','青河县','吉木乃县']},		   
-{name:'省直辖行政单位', areaList:['石河子市','阿拉尔市','图木舒克市','五家渠市']}
-]},
-{name:'河北', cityList:[		   
-{name:'石家庄市', areaList:['市辖区','长安区','桥东区','桥西区','新华区','井陉矿区','裕华区','井陉县','正定县','栾城县','行唐县','灵寿县','高邑县','深泽县','赞皇县','无极县','平山县','元氏县','赵 县','辛集市','藁城市','晋州市','新乐市','鹿泉市']},		   
-{name:'唐山市', areaList:['市辖区','路南区','路北区','古冶区','开平区','丰南区','丰润区','滦 县','滦南县','乐亭县','迁西县','玉田县','唐海县','遵化市','迁安市']},		   
-{name:'秦皇岛市', areaList:['市辖区','海港区','山海关区','北戴河区','青龙满族自治县','昌黎县','抚宁县','卢龙县']},		   
-{name:'邯郸市', areaList:['市辖区','邯山区','丛台区','复兴区','峰峰矿区','邯郸县','临漳县','成安县','大名县','涉 县','磁 县','肥乡县','永年县','邱 县','鸡泽县','广平县','馆陶县','魏 县','曲周县','武安市']},		   
-{name:'邢台市', areaList:['市辖区','桥东区','桥西区','邢台县','临城县','内丘县','柏乡县','隆尧县','任 县','南和县','宁晋县','巨鹿县','新河县','广宗县','平乡县','威 县','清河县','临西县','南宫市','沙河市']},		   
-{name:'保定市', areaList:['市辖区','新市区','北市区','南市区','满城县','清苑县','涞水县','阜平县','徐水县','定兴县','唐 县','高阳县','容城县','涞源县','望都县','安新县','易 县','曲阳县','蠡 县','顺平县','博野县','雄 县','涿州市','定州市','安国市','高碑店市']},		   
-{name:'张家口市', areaList:['市辖区','桥东区','桥西区','宣化区','下花园区','宣化县','张北县','康保县','沽源县','尚义县','蔚 县','阳原县','怀安县','万全县','怀来县','涿鹿县','赤城县','崇礼县']},		   
-{name:'承德市', areaList:['市辖区','双桥区','双滦区','鹰手营子矿区','承德县','兴隆县','平泉县','滦平县','隆化县','丰宁满族自治县','宽城满族自治县','围场满族蒙古族自治县']},		   
-{name:'沧州市', areaList:['市辖区','新华区','运河区','沧 县','青 县','东光县','海兴县','盐山县','肃宁县','南皮县','吴桥县','献 县','孟村回族自治县','泊头市','任丘市','黄骅市','河间市']},		   
-{name:'廊坊市', areaList:['市辖区','安次区','广阳区','固安县','永清县','香河县','大城县','文安县','大厂回族自治县','霸州市','三河市']},		   
-{name:'衡水市', areaList:['市辖区','桃城区','枣强县','武邑县','武强县','饶阳县','安平县','故城县','景 县','阜城县','冀州市','深州市']}
-]},
-{name:'山西', cityList:[		   
-{name:'太原市', areaList:['市辖区','小店区','迎泽区','杏花岭区','尖草坪区','万柏林区','晋源区','清徐县','阳曲县','娄烦县','古交市']},		   
-{name:'大同市', areaList:['市辖区','城 区','矿 区','南郊区','新荣区','阳高县','天镇县','广灵县','灵丘县','浑源县','左云县','大同县']},		   
-{name:'阳泉市', areaList:['市辖区','城 区','矿 区','郊 区','平定县','盂 县']},		   
-{name:'长治市', areaList:['市辖区','城 区','郊 区','长治县','襄垣县','屯留县','平顺县','黎城县','壶关县','长子县','武乡县','沁 县','沁源县','潞城市']},		   
-{name:'晋城市', areaList:['市辖区','城 区','沁水县','阳城县','陵川县','泽州县','高平市']},		   
-{name:'朔州市', areaList:['市辖区','朔城区','平鲁区','山阴县','应 县','右玉县','怀仁县']},		   
-{name:'晋中市', areaList:['市辖区','榆次区','榆社县','左权县','和顺县','昔阳县','寿阳县','太谷县','祁 县','平遥县','灵石县','介休市']},		   
-{name:'运城市', areaList:['市辖区','盐湖区','临猗县','万荣县','闻喜县','稷山县','新绛县','绛 县','垣曲县','夏 县','平陆县','芮城县','永济市','河津市']},		   
-{name:'忻州市', areaList:['市辖区','忻府区','定襄县','五台县','代 县','繁峙县','宁武县','静乐县','神池县','五寨县','岢岚县','河曲县','保德县','偏关县','原平市']},		   
-{name:'临汾市', areaList:['市辖区','尧都区','曲沃县','翼城县','襄汾县','洪洞县','古 县','安泽县','浮山县','吉 县','乡宁县','大宁县','隰 县','永和县','蒲 县','汾西县','侯马市','霍州市']},		   
-{name:'吕梁市', areaList:['市辖区','离石区','文水县','交城县','兴 县','临 县','柳林县','石楼县','岚 县','方山县','中阳县','交口县','孝义市','汾阳市']}
-]},
-{name:'内蒙古', cityList:[		   
-{name:'呼和浩特市', areaList:['市辖区','新城区','回民区','玉泉区','赛罕区','土默特左旗','托克托县','和林格尔县','清水河县','武川县']},		   
-{name:'包头市', areaList:['市辖区','东河区','昆都仑区','青山区','石拐区','白云矿区','九原区','土默特右旗','固阳县','达尔罕茂明安联合旗']},		   
-{name:'乌海市', areaList:['市辖区','海勃湾区','海南区','乌达区']},		   
-{name:'赤峰市', areaList:['市辖区','红山区','元宝山区','松山区','阿鲁科尔沁旗','巴林左旗','巴林右旗','林西县','克什克腾旗','翁牛特旗','喀喇沁旗','宁城县','敖汉旗']},		   
-{name:'通辽市', areaList:['市辖区','科尔沁区','科尔沁左翼中旗','科尔沁左翼后旗','开鲁县','库伦旗','奈曼旗','扎鲁特旗','霍林郭勒市']},		   
-{name:'鄂尔多斯市', areaList:['东胜区','达拉特旗','准格尔旗','鄂托克前旗','鄂托克旗','杭锦旗','乌审旗','伊金霍洛旗']},		   
-{name:'呼伦贝尔市', areaList:['市辖区','海拉尔区','阿荣旗','莫力达瓦达斡尔族自治旗','鄂伦春自治旗','鄂温克族自治旗','陈巴尔虎旗','新巴尔虎左旗','新巴尔虎右旗','满洲里市','牙克石市','扎兰屯市','额尔古纳市','根河市']},		   
-{name:'巴彦淖尔市', areaList:['市辖区','临河区','五原县','磴口县','乌拉特前旗','乌拉特中旗','乌拉特后旗','杭锦后旗']},		   
-{name:'乌兰察布市', areaList:['市辖区','集宁区','卓资县','化德县','商都县','兴和县','凉城县','察哈尔右翼前旗','察哈尔右翼中旗','察哈尔右翼后旗','四子王旗','丰镇市']},		   
-{name:'兴安盟', areaList:['乌兰浩特市','阿尔山市','科尔沁右翼前旗','科尔沁右翼中旗','扎赉特旗','突泉县']},		   
-{name:'锡林郭勒盟', areaList:['二连浩特市','锡林浩特市','阿巴嘎旗','苏尼特左旗','苏尼特右旗','东乌珠穆沁旗','西乌珠穆沁旗','太仆寺旗','镶黄旗','正镶白旗','正蓝旗','多伦县']},		   
-{name:'阿拉善盟', areaList:['阿拉善左旗','阿拉善右旗','额济纳旗']}
-]},
-{name:'江苏', cityList:[		   
-{name:'南京市', areaList:['市辖区','玄武区','白下区','秦淮区','建邺区','鼓楼区','下关区','浦口区','栖霞区','雨花台区','江宁区','六合区','溧水县','高淳县']},		   
-{name:'无锡市', areaList:['市辖区','崇安区','南长区','北塘区','锡山区','惠山区','滨湖区','江阴市','宜兴市']},		   
-{name:'徐州市', areaList:['市辖区','鼓楼区','云龙区','九里区','贾汪区','泉山区','丰 县','沛 县','铜山县','睢宁县','新沂市','邳州市']},		   
-{name:'常州市', areaList:['市辖区','天宁区','钟楼区','戚墅堰区','新北区','武进区','溧阳市','金坛市']},		   
-{name:'苏州市', areaList:['市辖区','沧浪区','平江区','金阊区','虎丘区','吴中区','相城区','常熟市','张家港市','昆山市','吴江市','太仓市']},		   
-{name:'南通市', areaList:['市辖区','崇川区','港闸区','海安县','如东县','启东市','如皋市','通州市','海门市']},		   
-{name:'连云港市', areaList:['市辖区','连云区','新浦区','海州区','赣榆县','东海县','灌云县','灌南县']},		   
-{name:'淮安市', areaList:['市辖区','清河区','楚州区','淮阴区','清浦区','涟水县','洪泽县','盱眙县','金湖县']},		   
-{name:'盐城市', areaList:['市辖区','亭湖区','盐都区','响水县','滨海县','阜宁县','射阳县','建湖县','东台市','大丰市']},		   
-{name:'扬州市', areaList:['市辖区','广陵区','邗江区','郊 区','宝应县','仪征市','高邮市','江都市']},		   
-{name:'镇江市', areaList:['市辖区','京口区','润州区','丹徒区','丹阳市','扬中市','句容市']},		   
-{name:'泰州市', areaList:['市辖区','海陵区','高港区','兴化市','靖江市','泰兴市','姜堰市']},		   
-{name:'宿迁市', areaList:['市辖区','宿城区','宿豫区','沭阳县','泗阳县','泗洪县']}
-]},
-{name:'浙江', cityList:[		   
-{name:'杭州市', areaList:['市辖区','上城区','下城区','江干区','拱墅区','西湖区','滨江区','萧山区','余杭区','桐庐县','淳安县','建德市','富阳市','临安市']},		   
-{name:'宁波市', areaList:['市辖区','海曙区','江东区','江北区','北仑区','镇海区','鄞州区','象山县','宁海县','余姚市','慈溪市','奉化市']},		   
-{name:'温州市', areaList:['市辖区','鹿城区','龙湾区','瓯海区','洞头县','永嘉县','平阳县','苍南县','文成县','泰顺县','瑞安市','乐清市']},		   
-{name:'嘉兴市', areaList:['市辖区','秀城区','秀洲区','嘉善县','海盐县','海宁市','平湖市','桐乡市']},		   
-{name:'湖州市', areaList:['市辖区','吴兴区','南浔区','德清县','长兴县','安吉县']},		   
-{name:'绍兴市', areaList:['市辖区','越城区','绍兴县','新昌县','诸暨市','上虞市','嵊州市']},		   
-{name:'金华市', areaList:['市辖区','婺城区','金东区','武义县','浦江县','磐安县','兰溪市','义乌市','东阳市','永康市']},		   
-{name:'衢州市', areaList:['市辖区','柯城区','衢江区','常山县','开化县','龙游县','江山市']},		   
-{name:'舟山市', areaList:['市辖区','定海区','普陀区','岱山县','嵊泗县']},		   
-{name:'台州市', areaList:['市辖区','椒江区','黄岩区','路桥区','玉环县','三门县','天台县','仙居县','温岭市','临海市']},		   
-{name:'丽水市', areaList:['市辖区','莲都区','青田县','缙云县','遂昌县','松阳县','云和县','庆元县','景宁畲族自治县','龙泉市']}
-]},
-{name:'安徽', cityList:[		   
-{name:'合肥市', areaList:['市辖区','瑶海区','庐阳区','蜀山区','包河区','长丰县','肥东县','肥西县']},		   
-{name:'芜湖市', areaList:['市辖区','镜湖区','马塘区','新芜区','鸠江区','芜湖县','繁昌县','南陵县']},		   
-{name:'蚌埠市', areaList:['市辖区','龙子湖区','蚌山区','禹会区','淮上区','怀远县','五河县','固镇县']},		   
-{name:'淮南市', areaList:['市辖区','大通区','田家庵区','谢家集区','八公山区','潘集区','凤台县']},		   
-{name:'马鞍山市', areaList:['市辖区','金家庄区','花山区','雨山区','当涂县']},		   
-{name:'淮北市', areaList:['市辖区','杜集区','相山区','烈山区','濉溪县']},		   
-{name:'铜陵市', areaList:['市辖区','铜官山区','狮子山区','郊 区','铜陵县']},		   
-{name:'安庆市', areaList:['市辖区','迎江区','大观区','郊 区','怀宁县','枞阳县','潜山县','太湖县','宿松县','望江县','岳西县','桐城市']},		   
-{name:'黄山市', areaList:['市辖区','屯溪区','黄山区','徽州区','歙 县','休宁县','黟 县','祁门县']},		   
-{name:'滁州市', areaList:['市辖区','琅琊区','南谯区','来安县','全椒县','定远县','凤阳县','天长市','明光市']},		   
-{name:'阜阳市', areaList:['市辖区','颍州区','颍东区','颍泉区','临泉县','太和县','阜南县','颍上县','界首市']},		   
-{name:'宿州市', areaList:['市辖区','墉桥区','砀山县','萧 县','灵璧县','泗 县']},		   
-{name:'巢湖市', areaList:['市辖区','居巢区','庐江县','无为县','含山县','和 县']},		   
-{name:'六安市', areaList:['市辖区','金安区','裕安区','寿 县','霍邱县','舒城县','金寨县','霍山县']},		   
-{name:'亳州市', areaList:['市辖区','谯城区','涡阳县','蒙城县','利辛县']},		   
-{name:'池州市', areaList:['市辖区','贵池区','东至县','石台县','青阳县']},		   
-{name:'宣城市', areaList:['市辖区','宣州区','郎溪县','广德县','泾 县','绩溪县','旌德县','宁国市']}
-]},
-{name:'福建', cityList:[		   
-{name:'福州市', areaList:['市辖区','鼓楼区','台江区','仓山区','马尾区','晋安区','闽侯县','连江县','罗源县','闽清县','永泰县','平潭县','福清市','长乐市']},		   
-{name:'厦门市', areaList:['市辖区','思明区','海沧区','湖里区','集美区','同安区','翔安区']},		   
-{name:'莆田市', areaList:['市辖区','城厢区','涵江区','荔城区','秀屿区','仙游县']},		   
-{name:'三明市', areaList:['市辖区','梅列区','三元区','明溪县','清流县','宁化县','大田县','尤溪县','沙 县','将乐县','泰宁县','建宁县','永安市']},		   
-{name:'泉州市', areaList:['市辖区','鲤城区','丰泽区','洛江区','泉港区','惠安县','安溪县','永春县','德化县','金门县','石狮市','晋江市','南安市']},		   
-{name:'漳州市', areaList:['市辖区','芗城区','龙文区','云霄县','漳浦县','诏安县','长泰县','东山县','南靖县','平和县','华安县','龙海市']},		   
-{name:'南平市', areaList:['市辖区','延平区','顺昌县','浦城县','光泽县','松溪县','政和县','邵武市','武夷山市','建瓯市','建阳市']},		   
-{name:'龙岩市', areaList:['市辖区','新罗区','长汀县','永定县','上杭县','武平县','连城县','漳平市']},		   
-{name:'宁德市', areaList:['市辖区','蕉城区','霞浦县','古田县','屏南县','寿宁县','周宁县','柘荣县','福安市','福鼎市']}
-]},
-{name:'江西', cityList:[		   
-{name:'南昌市', areaList:['市辖区','东湖区','西湖区','青云谱区','湾里区','青山湖区','南昌县','新建县','安义县','进贤县']},		   
-{name:'景德镇市', areaList:['市辖区','昌江区','珠山区','浮梁县','乐平市']},		   
-{name:'萍乡市', areaList:['市辖区','安源区','湘东区','莲花县','上栗县','芦溪县']},		   
-{name:'九江市', areaList:['市辖区','庐山区','浔阳区','九江县','武宁县','修水县','永修县','德安县','星子县','都昌县','湖口县','彭泽县','瑞昌市']},		   
-{name:'新余市', areaList:['市辖区','渝水区','分宜县']},		   
-{name:'鹰潭市', areaList:['市辖区','月湖区','余江县','贵溪市']},		   
-{name:'赣州市', areaList:['市辖区','章贡区','赣 县','信丰县','大余县','上犹县','崇义县','安远县','龙南县','定南县','全南县','宁都县','于都县','兴国县','会昌县','寻乌县','石城县','瑞金市','南康市']},		   
-{name:'吉安市', areaList:['市辖区','吉州区','青原区','吉安县','吉水县','峡江县','新干县','永丰县','泰和县','遂川县','万安县','安福县','永新县','井冈山市']},		   
-{name:'宜春市', areaList:['市辖区','袁州区','奉新县','万载县','上高县','宜丰县','靖安县','铜鼓县','丰城市','樟树市','高安市']},		   
-{name:'抚州市', areaList:['市辖区','临川区','南城县','黎川县','南丰县','崇仁县','乐安县','宜黄县','金溪县','资溪县','东乡县','广昌县']},		   
-{name:'上饶市', areaList:['市辖区','信州区','上饶县','广丰县','玉山县','铅山县','横峰县','弋阳县','余干县','鄱阳县','万年县','婺源县','德兴市']}
-]},
-{name:'山东', cityList:[		   
-{name:'济南市', areaList:['市辖区','历下区','市中区','槐荫区','天桥区','历城区','长清区','平阴县','济阳县','商河县','章丘市']},		   
-{name:'青岛市', areaList:['市辖区','市南区','市北区','四方区','黄岛区','崂山区','李沧区','城阳区','胶州市','即墨市','平度市','胶南市','莱西市']},		   
-{name:'淄博市', areaList:['市辖区','淄川区','张店区','博山区','临淄区','周村区','桓台县','高青县','沂源县']},		   
-{name:'枣庄市', areaList:['市辖区','市中区','薛城区','峄城区','台儿庄区','山亭区','滕州市']},		   
-{name:'东营市', areaList:['市辖区','东营区','河口区','垦利县','利津县','广饶县']},		   
-{name:'烟台市', areaList:['市辖区','芝罘区','福山区','牟平区','莱山区','长岛县','龙口市','莱阳市','莱州市','蓬莱市','招远市','栖霞市','海阳市']},		   
-{name:'潍坊市', areaList:['市辖区','潍城区','寒亭区','坊子区','奎文区','临朐县','昌乐县','青州市','诸城市','寿光市','安丘市','高密市','昌邑市']},		   
-{name:'济宁市', areaList:['市辖区','市中区','任城区','微山县','鱼台县','金乡县','嘉祥县','汶上县','泗水县','梁山县','曲阜市','兖州市','邹城市']},		   
-{name:'泰安市', areaList:['市辖区','泰山区','岱岳区','宁阳县','东平县','新泰市','肥城市']},		   
-{name:'威海市', areaList:['市辖区','环翠区','文登市','荣成市','乳山市']},		   
-{name:'日照市', areaList:['市辖区','东港区','岚山区','五莲县','莒 县']},		   
-{name:'莱芜市', areaList:['市辖区','莱城区','钢城区']},		   
-{name:'临沂市', areaList:['市辖区','兰山区','罗庄区','河东区','沂南县','郯城县','沂水县','苍山县','费 县','平邑县','莒南县','蒙阴县','临沭县']},		   
-{name:'德州市', areaList:['市辖区','德城区','陵 县','宁津县','庆云县','临邑县','齐河县','平原县','夏津县','武城县','乐陵市','禹城市']},		   
-{name:'聊城市', areaList:['市辖区','东昌府区','阳谷县','莘 县','茌平县','东阿县','冠 县','高唐县','临清市']},		   
-{name:'滨州市', areaList:['市辖区','滨城区','惠民县','阳信县','无棣县','沾化县','博兴县','邹平县']},		   
-{name:'荷泽市', areaList:['市辖区','牡丹区','曹 县','单 县','成武县','巨野县','郓城县','鄄城县','定陶县','东明县']}
-]},
-{name:'辽宁', cityList:[		   
-{name:'沈阳市', areaList:['市辖区','和平区','沈河区','大东区','皇姑区','铁西区','苏家屯区','东陵区','新城子区','于洪区','辽中县','康平县','法库县','新民市']},		   
-{name:'大连市', areaList:['市辖区','中山区','西岗区','沙河口区','甘井子区','旅顺口区','金州区','长海县','瓦房店市','普兰店市','庄河市']},		   
-{name:'鞍山市', areaList:['市辖区','铁东区','铁西区','立山区','千山区','台安县','岫岩满族自治县','海城市']},		   
-{name:'抚顺市', areaList:['市辖区','新抚区','东洲区','望花区','顺城区','抚顺县','新宾满族自治县','清原满族自治县']},		   
-{name:'本溪市', areaList:['市辖区','平山区','溪湖区','明山区','南芬区','本溪满族自治县','桓仁满族自治县']},		   
-{name:'丹东市', areaList:['市辖区','元宝区','振兴区','振安区','宽甸满族自治县','东港市','凤城市']},		   
-{name:'锦州市', areaList:['市辖区','古塔区','凌河区','太和区','黑山县','义 县','凌海市','北宁市']},		   
-{name:'营口市', areaList:['市辖区','站前区','西市区','鲅鱼圈区','老边区','盖州市','大石桥市']},		   
-{name:'阜新市', areaList:['市辖区','海州区','新邱区','太平区','清河门区','细河区','阜新蒙古族自治县','彰武县']},		   
-{name:'辽阳市', areaList:['市辖区','白塔区','文圣区','宏伟区','弓长岭区','太子河区','辽阳县','灯塔市']},		   
-{name:'盘锦市', areaList:['市辖区','双台子区','兴隆台区','大洼县','盘山县']},		   
-{name:'铁岭市', areaList:['市辖区','银州区','清河区','铁岭县','西丰县','昌图县','调兵山市','开原市']},		   
-{name:'朝阳市', areaList:['市辖区','双塔区','龙城区','朝阳县','建平县','喀喇沁左翼蒙古族自治县','北票市','凌源市']},		   
-{name:'葫芦岛市', areaList:['市辖区','连山区','龙港区','南票区','绥中县','建昌县','兴城市']}
-]},
-{name:'吉林', cityList:[		   
-{name:'长春市', areaList:['市辖区','南关区','宽城区','朝阳区','二道区','绿园区','双阳区','农安县','九台市','榆树市','德惠市']},		   
-{name:'吉林市', areaList:['市辖区','昌邑区','龙潭区','船营区','丰满区','永吉县','蛟河市','桦甸市','舒兰市','磐石市']},		   
-{name:'四平市', areaList:['市辖区','铁西区','铁东区','梨树县','伊通满族自治县','公主岭市','双辽市']},		   
-{name:'辽源市', areaList:['市辖区','龙山区','西安区','东丰县','东辽县']},		   
-{name:'通化市', areaList:['市辖区','东昌区','二道江区','通化县','辉南县','柳河县','梅河口市','集安市']},		   
-{name:'白山市', areaList:['市辖区','八道江区','抚松县','靖宇县','长白朝鲜族自治县','江源县','临江市']},		   
-{name:'松原市', areaList:['市辖区','宁江区','前郭尔罗斯蒙古族自治县','长岭县','乾安县','扶余县']},		   
-{name:'白城市', areaList:['市辖区','洮北区','镇赉县','通榆县','洮南市','大安市']},		   
-{name:'延边朝鲜族自治州', areaList:['延吉市','图们市','敦化市','珲春市','龙井市','和龙市','汪清县','安图县']}
-]},
-{name:'黑龙江', cityList:[		   
-{name:'哈尔滨市', areaList:['市辖区','道里区','南岗区','道外区','香坊区','动力区','平房区','松北区','呼兰区','依兰县','方正县','宾 县','巴彦县','木兰县','通河县','延寿县','阿城市','双城市','尚志市','五常市']},		   
-{name:'齐齐哈尔市', areaList:['市辖区','龙沙区','建华区','铁锋区','昂昂溪区','富拉尔基区','碾子山区','梅里斯达斡尔族区','龙江县','依安县','泰来县','甘南县','富裕县','克山县','克东县','拜泉县','讷河市']},		   
-{name:'鸡西市', areaList:['市辖区','鸡冠区','恒山区','滴道区','梨树区','城子河区','麻山区','鸡东县','虎林市','密山市']},		   
-{name:'鹤岗市', areaList:['市辖区','向阳区','工农区','南山区','兴安区','东山区','兴山区','萝北县','绥滨县']},		   
-{name:'双鸭山市', areaList:['市辖区','尖山区','岭东区','四方台区','宝山区','集贤县','友谊县','宝清县','饶河县']},		   
-{name:'大庆市', areaList:['市辖区','萨尔图区','龙凤区','让胡路区','红岗区','大同区','肇州县','肇源县','林甸县','杜尔伯特蒙古族自治县']},		   
-{name:'伊春市', areaList:['市辖区','伊春区','南岔区','友好区','西林区','翠峦区','新青区','美溪区','金山屯区','五营区','乌马河区','汤旺河区','带岭区','乌伊岭区','红星区','上甘岭区','嘉荫县','铁力市']},		   
-{name:'佳木斯市', areaList:['市辖区','永红区','向阳区','前进区','东风区','郊 区','桦南县','桦川县','汤原县','抚远县','同江市','富锦市']},		   
-{name:'七台河市', areaList:['市辖区','新兴区','桃山区','茄子河区','勃利县']},		   
-{name:'牡丹江市', areaList:['市辖区','东安区','阳明区','爱民区','西安区','东宁县','林口县','绥芬河市','海林市','宁安市','穆棱市']},		   
-{name:'黑河市', areaList:['市辖区','爱辉区','嫩江县','逊克县','孙吴县','北安市','五大连池市']},		   
-{name:'绥化市', areaList:['市辖区','北林区','望奎县','兰西县','青冈县','庆安县','明水县','绥棱县','安达市','肇东市','海伦市']},		   
-{name:'大兴安岭地区', areaList:['呼玛县','塔河县','漠河县']}
-]},
-{name:'海南', cityList:[		   
-{name:'海口市', areaList:['市辖区','秀英区','龙华区','琼山区','美兰区']},		   
-{name:'三亚市', areaList:['市辖区']},		   
-{name:'省直辖县级行政单位', areaList:['五指山市','琼海市','儋州市','文昌市','万宁市','东方市','定安县','屯昌县','澄迈县','临高县','白沙黎族自治县','昌江黎族自治县','乐东黎族自治县','陵水黎族自治县','保亭黎族苗族自治县','琼中黎族苗族自治县','西沙群岛','南沙群岛','中沙群岛的岛礁及其海域']}
-]},
-{name:'台湾', cityList:[
-{name:'台湾', areaList:['台湾']}
-]},
-{name:'香港', cityList:[
-{name:'香港', areaList:['香港']}
-]},
-{name:'澳门', cityList:[
-{name:'澳门', areaList:['澳门']}
-]}
-];

+ 0 - 80
web/UM-admin/js/jqhttpsdk.js

@@ -1,80 +0,0 @@
-/**
- * 获取数据ajax-get请求
- * @author chanjunkai
- */
-http_ip_port = 'http://47.107.129.126:6639';
-// http_ip_port = 'http://192.168.136.35:8800';
-$.GetJSON = function (url,data,callback){
-    $.ajax({
-        url:url,
-        type:"get",
-        contentType:"application/json",
-        dataType:"json",
-        timeout:10000,
-        data:data,
-        success:function(data){
-            callback(data);
-        }
-    });
-};
-
-/**
- * 提交json数据的post请求
- * @author laixm
- */
-$.postJSON = function(url,data,callback){
-    $.ajax({
-        url:url,
-        type:"post",
-        contentType:"application/json",
-        dataType:"json",
-        data:data,
-        timeout:60000,
-        success:function(msg){
-            callback(msg);
-        },
-        error:function(xhr,textstatus,thrown){
-
-        }
-    });
-};
-
-/**
- * 修改数据的ajax-put请求
- * @author laixm
- */
-$.putJSON = function(url,data,callback){
-    $.ajax({
-        url:url,
-        type:"put",
-        contentType:"application/json",
-        dataType:"json",
-        data:data,
-        timeout:20000,
-        success:function(msg){
-            callback(msg);
-        },
-        error:function(xhr,textstatus,thrown){
-
-        }
-    });
-};
-/**
- * 删除数据的ajax-delete请求
- * @author laixm
- */
-$.deleteJSON = function(url,data,callback){
-    $.ajax({
-        url:url,
-        type:"delete",
-        contentType:"application/json",
-        dataType:"json",
-        data:data,
-        success:function(msg){
-            callback(msg);
-        },
-        error:function(xhr,textstatus,thrown){
-
-        }
-    });
-};

文件差异内容过多而无法显示
+ 0 - 1
web/UM-admin/js/jquery-3.3.1.min.js


+ 0 - 2
web/UM-admin/js/jquery_cookie_min.js

@@ -1,2 +0,0 @@
-/*! jquery.cookie v1.4.1 | MIT */
-!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):"object"==typeof exports?a(require("jquery")):a(jQuery)}(function(a){function b(a){return h.raw?a:encodeURIComponent(a)}function c(a){return h.raw?a:decodeURIComponent(a)}function d(a){return b(h.json?JSON.stringify(a):String(a))}function e(a){0===a.indexOf('"')&&(a=a.slice(1,-1).replace(/\\"/g,'"').replace(/\\\\/g,"\\"));try{return a=decodeURIComponent(a.replace(g," ")),h.json?JSON.parse(a):a}catch(b){}}function f(b,c){var d=h.raw?b:e(b);return a.isFunction(c)?c(d):d}var g=/\+/g,h=a.cookie=function(e,g,i){if(void 0!==g&&!a.isFunction(g)){if(i=a.extend({},h.defaults,i),"number"==typeof i.expires){var j=i.expires,k=i.expires=new Date;k.setTime(+k+864e5*j)}return document.cookie=[b(e),"=",d(g),i.expires?"; expires="+i.expires.toUTCString():"",i.path?"; path="+i.path:"",i.domain?"; domain="+i.domain:"",i.secure?"; secure":""].join("")}for(var l=e?void 0:{},m=document.cookie?document.cookie.split("; "):[],n=0,o=m.length;o>n;n++){var p=m[n].split("="),q=c(p.shift()),r=p.join("=");if(e&&e===q){l=f(r,g);break}e||void 0===(r=f(r))||(l[q]=r)}return l};h.defaults={},a.removeCookie=function(b,c){return void 0===a.cookie(b)?!1:(a.cookie(b,"",a.extend({},c,{expires:-1})),!a.cookie(b))}});

+ 0 - 33
web/UM-admin/js/shownowtime.js

@@ -1,33 +0,0 @@
-window.onload = function(){
-    showTime();     //网页一加载就调用showTime()函数;
-}
-function checkTime(i){  //补位处理
-    if(i<10)
-    {
-        i="0"+i;     //当秒分小于10时,在左边补0;
-    }
-    return i;
-}
-function showTime(){
-    var now=new Date();
-    var year=now.getFullYear();
-    var month=now.getMonth()+1; //js获取的月份是从0开始;
-    var day=now.getDate();
-    var h=now.getHours();
-    var m=now.getMinutes();
-    var s=now.getSeconds();
-    m=checkTime(m)
-    s=checkTime(s)
-
-    var weekday=new Array(7)
-    weekday[0]="星期日"
-    weekday[1]="星期一"
-    weekday[2]="星期二"
-    weekday[3]="星期三"
-    weekday[4]="星期四"
-    weekday[5]="星期五"
-    weekday[6]="星期六"
-    var w=weekday[now.getDay()]; //js获取的星期是0~6,0是星期天;
-    document.getElementById("shownowTime").innerHTML=""+year+"年"+month+"月"+day+"日 "+w+"  "+h+":"+m+":"+s;
-    t=setTimeout('showTime()',500)
-}

+ 0 - 5018
web/UM-admin/lib/layui/css/layui.css

@@ -1,5018 +0,0 @@
-/** layui-v2.4.3 MIT License By https://www.layui.com */
-.layui-inline, img {
-    display: inline-block;
-    vertical-align: middle
-}
-
-h1, h2, h3, h4, h5, h6 {
-    font-weight: 400
-}
-
-.layui-edge, .layui-header, .layui-inline, .layui-main {
-    position: relative
-}
-
-.layui-btn, .layui-edge, .layui-inline, img {
-    vertical-align: middle
-}
-
-.layui-btn, .layui-disabled, .layui-icon, .layui-unselect {
-    -webkit-user-select: none;
-    -ms-user-select: none;
-    -moz-user-select: none
-}
-
-blockquote, body, button, dd, div, dl, dt, form, h1, h2, h3, h4, h5, h6, input, li, ol, p, pre, td, textarea, th, ul {
-    margin: 0;
-    padding: 0;
-    -webkit-tap-highlight-color: rgba(0, 0, 0, 0)
-}
-
-a:active, a:hover {
-    outline: 0
-}
-
-img {
-    border: none
-}
-
-li {
-    list-style: none
-}
-
-table {
-    border-collapse: collapse;
-    border-spacing: 0
-}
-
-h4, h5, h6 {
-    font-size: 100%
-}
-
-button, input, optgroup, option, select, textarea {
-    font-family: inherit;
-    font-size: inherit;
-    font-style: inherit;
-    font-weight: inherit;
-    outline: 0
-}
-
-pre {
-    white-space: pre-wrap;
-    white-space: -moz-pre-wrap;
-    white-space: -pre-wrap;
-    white-space: -o-pre-wrap;
-    word-wrap: break-word
-}
-
-body {
-    line-height: 24px;
-    font: 14px Helvetica Neue, Helvetica, PingFang SC, Tahoma, Arial, sans-serif
-}
-
-hr {
-    height: 1px;
-    margin: 10px 0;
-    border: 0;
-    clear: both
-}
-
-a {
-    color: #333;
-    text-decoration: none
-}
-
-a:hover {
-    color: #777
-}
-
-a cite {
-    font-style: normal;
-    *cursor: pointer
-}
-
-.layui-border-box, .layui-border-box * {
-    box-sizing: border-box
-}
-
-.layui-box, .layui-box * {
-    box-sizing: content-box
-}
-
-.layui-clear {
-    clear: both;
-    *zoom: 1
-}
-
-.layui-clear:after {
-    content: '\20';
-    clear: both;
-    *zoom: 1;
-    display: block;
-    height: 0
-}
-
-.layui-inline {
-    *display: inline;
-    *zoom: 1
-}
-
-.layui-edge {
-    display: inline-block;
-    width: 0;
-    height: 0;
-    border-width: 6px;
-    border-style: dashed;
-    border-color: transparent;
-    overflow: hidden
-}
-
-.layui-edge-top {
-    top: -4px;
-    border-bottom-color: #999;
-    border-bottom-style: solid
-}
-
-.layui-edge-right {
-    border-left-color: #999;
-    border-left-style: solid
-}
-
-.layui-edge-bottom {
-    top: 2px;
-    border-top-color: #999;
-    border-top-style: solid
-}
-
-.layui-edge-left {
-    border-right-color: #999;
-    border-right-style: solid
-}
-
-.layui-elip {
-    text-overflow: ellipsis;
-    overflow: hidden;
-    white-space: nowrap
-}
-
-.layui-disabled, .layui-disabled:hover {
-    color: #d2d2d2 !important;
-    cursor: not-allowed !important
-}
-
-.layui-circle {
-    border-radius: 100%
-}
-
-.layui-show {
-    display: block !important
-}
-
-.layui-hide {
-    display: none !important
-}
-
-@font-face {
-    font-family: layui-icon;
-    src: url(../font/iconfont.eot?v=240);
-    src: url(../font/iconfont.eot?v=240#iefix) format('embedded-opentype'), url(../font/iconfont.svg?v=240#iconfont) format('svg'), url(../font/iconfont.woff?v=240) format('woff'), url(../font/iconfont.ttf?v=240) format('truetype')
-}
-
-.layui-icon {
-    font-family: layui-icon !important;
-    font-size: 16px;
-    font-style: normal;
-    -webkit-font-smoothing: antialiased;
-    -moz-osx-font-smoothing: grayscale
-}
-
-.layui-icon-reply-fill:before {
-    content: "\e611"
-}
-
-.layui-icon-set-fill:before {
-    content: "\e614"
-}
-
-.layui-icon-menu-fill:before {
-    content: "\e60f"
-}
-
-.layui-icon-search:before {
-    content: "\e615"
-}
-
-.layui-icon-share:before {
-    content: "\e641"
-}
-
-.layui-icon-set-sm:before {
-    content: "\e620"
-}
-
-.layui-icon-engine:before {
-    content: "\e628"
-}
-
-.layui-icon-close:before {
-    content: "\1006"
-}
-
-.layui-icon-close-fill:before {
-    content: "\1007"
-}
-
-.layui-icon-chart-screen:before {
-    content: "\e629"
-}
-
-.layui-icon-star:before {
-    content: "\e600"
-}
-
-.layui-icon-circle-dot:before {
-    content: "\e617"
-}
-
-.layui-icon-chat:before {
-    content: "\e606"
-}
-
-.layui-icon-release:before {
-    content: "\e609"
-}
-
-.layui-icon-list:before {
-    content: "\e60a"
-}
-
-.layui-icon-chart:before {
-    content: "\e62c"
-}
-
-.layui-icon-ok-circle:before {
-    content: "\1005"
-}
-
-.layui-icon-layim-theme:before {
-    content: "\e61b"
-}
-
-.layui-icon-table:before {
-    content: "\e62d"
-}
-
-.layui-icon-right:before {
-    content: "\e602"
-}
-
-.layui-icon-left:before {
-    content: "\e603"
-}
-
-.layui-icon-cart-simple:before {
-    content: "\e698"
-}
-
-.layui-icon-face-cry:before {
-    content: "\e69c"
-}
-
-.layui-icon-face-smile:before {
-    content: "\e6af"
-}
-
-.layui-icon-survey:before {
-    content: "\e6b2"
-}
-
-.layui-icon-tree:before {
-    content: "\e62e"
-}
-
-.layui-icon-upload-circle:before {
-    content: "\e62f"
-}
-
-.layui-icon-add-circle:before {
-    content: "\e61f"
-}
-
-.layui-icon-download-circle:before {
-    content: "\e601"
-}
-
-.layui-icon-templeate-1:before {
-    content: "\e630"
-}
-
-.layui-icon-util:before {
-    content: "\e631"
-}
-
-.layui-icon-face-surprised:before {
-    content: "\e664"
-}
-
-.layui-icon-edit:before {
-    content: "\e642"
-}
-
-.layui-icon-speaker:before {
-    content: "\e645"
-}
-
-.layui-icon-down:before {
-    content: "\e61a"
-}
-
-.layui-icon-file:before {
-    content: "\e621"
-}
-
-.layui-icon-layouts:before {
-    content: "\e632"
-}
-
-.layui-icon-rate-half:before {
-    content: "\e6c9"
-}
-
-.layui-icon-add-circle-fine:before {
-    content: "\e608"
-}
-
-.layui-icon-prev-circle:before {
-    content: "\e633"
-}
-
-.layui-icon-read:before {
-    content: "\e705"
-}
-
-.layui-icon-404:before {
-    content: "\e61c"
-}
-
-.layui-icon-carousel:before {
-    content: "\e634"
-}
-
-.layui-icon-help:before {
-    content: "\e607"
-}
-
-.layui-icon-code-circle:before {
-    content: "\e635"
-}
-
-.layui-icon-water:before {
-    content: "\e636"
-}
-
-.layui-icon-username:before {
-    content: "\e66f"
-}
-
-.layui-icon-find-fill:before {
-    content: "\e670"
-}
-
-.layui-icon-about:before {
-    content: "\e60b"
-}
-
-.layui-icon-location:before {
-    content: "\e715"
-}
-
-.layui-icon-up:before {
-    content: "\e619"
-}
-
-.layui-icon-pause:before {
-    content: "\e651"
-}
-
-.layui-icon-date:before {
-    content: "\e637"
-}
-
-.layui-icon-layim-uploadfile:before {
-    content: "\e61d"
-}
-
-.layui-icon-delete:before {
-    content: "\e640"
-}
-
-.layui-icon-play:before {
-    content: "\e652"
-}
-
-.layui-icon-top:before {
-    content: "\e604"
-}
-
-.layui-icon-friends:before {
-    content: "\e612"
-}
-
-.layui-icon-refresh-3:before {
-    content: "\e9aa"
-}
-
-.layui-icon-ok:before {
-    content: "\e605"
-}
-
-.layui-icon-layer:before {
-    content: "\e638"
-}
-
-.layui-icon-face-smile-fine:before {
-    content: "\e60c"
-}
-
-.layui-icon-dollar:before {
-    content: "\e659"
-}
-
-.layui-icon-group:before {
-    content: "\e613"
-}
-
-.layui-icon-layim-download:before {
-    content: "\e61e"
-}
-
-.layui-icon-picture-fine:before {
-    content: "\e60d"
-}
-
-.layui-icon-link:before {
-    content: "\e64c"
-}
-
-.layui-icon-diamond:before {
-    content: "\e735"
-}
-
-.layui-icon-log:before {
-    content: "\e60e"
-}
-
-.layui-icon-rate-solid:before {
-    content: "\e67a"
-}
-
-.layui-icon-fonts-del:before {
-    content: "\e64f"
-}
-
-.layui-icon-unlink:before {
-    content: "\e64d"
-}
-
-.layui-icon-fonts-clear:before {
-    content: "\e639"
-}
-
-.layui-icon-triangle-r:before {
-    content: "\e623"
-}
-
-.layui-icon-circle:before {
-    content: "\e63f"
-}
-
-.layui-icon-radio:before {
-    content: "\e643"
-}
-
-.layui-icon-align-center:before {
-    content: "\e647"
-}
-
-.layui-icon-align-right:before {
-    content: "\e648"
-}
-
-.layui-icon-align-left:before {
-    content: "\e649"
-}
-
-.layui-icon-loading-1:before {
-    content: "\e63e"
-}
-
-.layui-icon-return:before {
-    content: "\e65c"
-}
-
-.layui-icon-fonts-strong:before {
-    content: "\e62b"
-}
-
-.layui-icon-upload:before {
-    content: "\e67c"
-}
-
-.layui-icon-dialogue:before {
-    content: "\e63a"
-}
-
-.layui-icon-video:before {
-    content: "\e6ed"
-}
-
-.layui-icon-headset:before {
-    content: "\e6fc"
-}
-
-.layui-icon-cellphone-fine:before {
-    content: "\e63b"
-}
-
-.layui-icon-add-1:before {
-    content: "\e654"
-}
-
-.layui-icon-face-smile-b:before {
-    content: "\e650"
-}
-
-.layui-icon-fonts-html:before {
-    content: "\e64b"
-}
-
-.layui-icon-form:before {
-    content: "\e63c"
-}
-
-.layui-icon-cart:before {
-    content: "\e657"
-}
-
-.layui-icon-camera-fill:before {
-    content: "\e65d"
-}
-
-.layui-icon-tabs:before {
-    content: "\e62a"
-}
-
-.layui-icon-fonts-code:before {
-    content: "\e64e"
-}
-
-.layui-icon-fire:before {
-    content: "\e756"
-}
-
-.layui-icon-set:before {
-    content: "\e716"
-}
-
-.layui-icon-fonts-u:before {
-    content: "\e646"
-}
-
-.layui-icon-triangle-d:before {
-    content: "\e625"
-}
-
-.layui-icon-tips:before {
-    content: "\e702"
-}
-
-.layui-icon-picture:before {
-    content: "\e64a"
-}
-
-.layui-icon-more-vertical:before {
-    content: "\e671"
-}
-
-.layui-icon-flag:before {
-    content: "\e66c"
-}
-
-.layui-icon-loading:before {
-    content: "\e63d"
-}
-
-.layui-icon-fonts-i:before {
-    content: "\e644"
-}
-
-.layui-icon-refresh-1:before {
-    content: "\e666"
-}
-
-.layui-icon-rmb:before {
-    content: "\e65e"
-}
-
-.layui-icon-home:before {
-    content: "\e68e"
-}
-
-.layui-icon-user:before {
-    content: "\e770"
-}
-
-.layui-icon-notice:before {
-    content: "\e667"
-}
-
-.layui-icon-login-weibo:before {
-    content: "\e675"
-}
-
-.layui-icon-voice:before {
-    content: "\e688"
-}
-
-.layui-icon-upload-drag:before {
-    content: "\e681"
-}
-
-.layui-icon-login-qq:before {
-    content: "\e676"
-}
-
-.layui-icon-snowflake:before {
-    content: "\e6b1"
-}
-
-.layui-icon-file-b:before {
-    content: "\e655"
-}
-
-.layui-icon-template:before {
-    content: "\e663"
-}
-
-.layui-icon-auz:before {
-    content: "\e672"
-}
-
-.layui-icon-console:before {
-    content: "\e665"
-}
-
-.layui-icon-app:before {
-    content: "\e653"
-}
-
-.layui-icon-prev:before {
-    content: "\e65a"
-}
-
-.layui-icon-website:before {
-    content: "\e7ae"
-}
-
-.layui-icon-next:before {
-    content: "\e65b"
-}
-
-.layui-icon-component:before {
-    content: "\e857"
-}
-
-.layui-icon-more:before {
-    content: "\e65f"
-}
-
-.layui-icon-login-wechat:before {
-    content: "\e677"
-}
-
-.layui-icon-shrink-right:before {
-    content: "\e668"
-}
-
-.layui-icon-spread-left:before {
-    content: "\e66b"
-}
-
-.layui-icon-camera:before {
-    content: "\e660"
-}
-
-.layui-icon-note:before {
-    content: "\e66e"
-}
-
-.layui-icon-refresh:before {
-    content: "\e669"
-}
-
-.layui-icon-female:before {
-    content: "\e661"
-}
-
-.layui-icon-male:before {
-    content: "\e662"
-}
-
-.layui-icon-password:before {
-    content: "\e673"
-}
-
-.layui-icon-senior:before {
-    content: "\e674"
-}
-
-.layui-icon-theme:before {
-    content: "\e66a"
-}
-
-.layui-icon-tread:before {
-    content: "\e6c5"
-}
-
-.layui-icon-praise:before {
-    content: "\e6c6"
-}
-
-.layui-icon-star-fill:before {
-    content: "\e658"
-}
-
-.layui-icon-rate:before {
-    content: "\e67b"
-}
-
-.layui-icon-template-1:before {
-    content: "\e656"
-}
-
-.layui-icon-vercode:before {
-    content: "\e679"
-}
-
-.layui-icon-cellphone:before {
-    content: "\e678"
-}
-
-.layui-icon-screen-full:before {
-    content: "\e622"
-}
-
-.layui-icon-screen-restore:before {
-    content: "\e758"
-}
-
-.layui-icon-cols:before {
-    content: "\e610"
-}
-
-.layui-icon-export:before {
-    content: "\e67d"
-}
-
-.layui-icon-print:before {
-    content: "\e66d"
-}
-
-.layui-icon-slider:before {
-    content: "\e714"
-}
-
-.layui-main {
-    width: 1140px;
-    margin: 0 auto
-}
-
-.layui-header {
-    z-index: 1000;
-    height: 60px
-}
-
-.layui-header a:hover {
-    transition: all .5s;
-    -webkit-transition: all .5s
-}
-
-.layui-side {
-    position: fixed;
-    left: 0;
-    top: 0;
-    bottom: 0;
-    z-index: 999;
-    width: 200px;
-    overflow-x: hidden
-}
-
-.layui-side-scroll {
-    position: relative;
-    width: 220px;
-    height: 100%;
-    overflow-x: hidden
-}
-
-.layui-body {
-    position: absolute;
-    left: 200px;
-    right: 0;
-    top: 0;
-    bottom: 0;
-    z-index: 998;
-    width: auto;
-    overflow: hidden;
-    overflow-y: auto;
-    box-sizing: border-box
-}
-
-.layui-layout-body {
-    overflow: hidden
-}
-
-.layui-layout-admin .layui-header {
-    background-color: #23262E
-}
-
-.layui-layout-admin .layui-side {
-    top: 60px;
-    width: 200px;
-    overflow-x: hidden
-}
-
-.layui-layout-admin .layui-body {
-    top: 60px;
-    bottom: 44px
-}
-
-.layui-layout-admin .layui-main {
-    width: auto;
-    margin: 0 15px
-}
-
-.layui-layout-admin .layui-footer {
-    position: fixed;
-    left: 200px;
-    right: 0;
-    bottom: 0;
-    height: 44px;
-    line-height: 44px;
-    padding: 0 15px;
-    background-color: #eee
-}
-
-.layui-layout-admin .layui-logo {
-    position: absolute;
-    left: 0;
-    top: 0;
-    width: 200px;
-    height: 100%;
-    line-height: 60px;
-    text-align: center;
-    color: #009688;
-    font-size: 16px
-}
-
-.layui-layout-admin .layui-header .layui-nav {
-    background: 0 0
-}
-
-.layui-layout-left {
-    position: absolute !important;
-    left: 200px;
-    top: 0
-}
-
-.layui-layout-right {
-    position: absolute !important;
-    right: 0;
-    top: 0
-}
-
-.layui-container {
-    position: relative;
-    margin: 0 auto;
-    padding: 0 15px;
-    box-sizing: border-box
-}
-
-.layui-fluid {
-    position: relative;
-    margin: 0 auto;
-    padding: 0 15px
-}
-
-.layui-row:after, .layui-row:before {
-    content: '';
-    display: block;
-    clear: both
-}
-
-.layui-col-lg1, .layui-col-lg10, .layui-col-lg11, .layui-col-lg12, .layui-col-lg2, .layui-col-lg3, .layui-col-lg4, .layui-col-lg5, .layui-col-lg6, .layui-col-lg7, .layui-col-lg8, .layui-col-lg9, .layui-col-md1, .layui-col-md10, .layui-col-md11, .layui-col-md12, .layui-col-md2, .layui-col-md3, .layui-col-md4, .layui-col-md5, .layui-col-md6, .layui-col-md7, .layui-col-md8, .layui-col-md9, .layui-col-sm1, .layui-col-sm10, .layui-col-sm11, .layui-col-sm12, .layui-col-sm2, .layui-col-sm3, .layui-col-sm4, .layui-col-sm5, .layui-col-sm6, .layui-col-sm7, .layui-col-sm8, .layui-col-sm9, .layui-col-xs1, .layui-col-xs10, .layui-col-xs11, .layui-col-xs12, .layui-col-xs2, .layui-col-xs3, .layui-col-xs4, .layui-col-xs5, .layui-col-xs6, .layui-col-xs7, .layui-col-xs8, .layui-col-xs9 {
-    position: relative;
-    display: block;
-    box-sizing: border-box
-}
-
-.layui-col-xs1, .layui-col-xs10, .layui-col-xs11, .layui-col-xs12, .layui-col-xs2, .layui-col-xs3, .layui-col-xs4, .layui-col-xs5, .layui-col-xs6, .layui-col-xs7, .layui-col-xs8, .layui-col-xs9 {
-    float: left
-}
-
-.layui-col-xs1 {
-    width: 8.33333333%
-}
-
-.layui-col-xs2 {
-    width: 16.66666667%
-}
-
-.layui-col-xs3 {
-    width: 25%
-}
-
-.layui-col-xs4 {
-    width: 33.33333333%
-}
-
-.layui-col-xs5 {
-    width: 41.66666667%
-}
-
-.layui-col-xs6 {
-    width: 50%
-}
-
-.layui-col-xs7 {
-    width: 58.33333333%
-}
-
-.layui-col-xs8 {
-    width: 66.66666667%
-}
-
-.layui-col-xs9 {
-    width: 75%
-}
-
-.layui-col-xs10 {
-    width: 83.33333333%
-}
-
-.layui-col-xs11 {
-    width: 91.66666667%
-}
-
-.layui-col-xs12 {
-    width: 100%
-}
-
-.layui-col-xs-offset1 {
-    margin-left: 8.33333333%
-}
-
-.layui-col-xs-offset2 {
-    margin-left: 16.66666667%
-}
-
-.layui-col-xs-offset3 {
-    margin-left: 25%
-}
-
-.layui-col-xs-offset4 {
-    margin-left: 33.33333333%
-}
-
-.layui-col-xs-offset5 {
-    margin-left: 41.66666667%
-}
-
-.layui-col-xs-offset6 {
-    margin-left: 50%
-}
-
-.layui-col-xs-offset7 {
-    margin-left: 58.33333333%
-}
-
-.layui-col-xs-offset8 {
-    margin-left: 66.66666667%
-}
-
-.layui-col-xs-offset9 {
-    margin-left: 75%
-}
-
-.layui-col-xs-offset10 {
-    margin-left: 83.33333333%
-}
-
-.layui-col-xs-offset11 {
-    margin-left: 91.66666667%
-}
-
-.layui-col-xs-offset12 {
-    margin-left: 100%
-}
-
-@media screen and (max-width: 768px) {
-    .layui-hide-xs {
-        display: none !important
-    }
-
-    .layui-show-xs-block {
-        display: block !important
-    }
-
-    .layui-show-xs-inline {
-        display: inline !important
-    }
-
-    .layui-show-xs-inline-block {
-        display: inline-block !important
-    }
-}
-
-@media screen and (min-width: 768px) {
-    .layui-container {
-        width: 750px
-    }
-
-    .layui-hide-sm {
-        display: none !important
-    }
-
-    .layui-show-sm-block {
-        display: block !important
-    }
-
-    .layui-show-sm-inline {
-        display: inline !important
-    }
-
-    .layui-show-sm-inline-block {
-        display: inline-block !important
-    }
-
-    .layui-col-sm1, .layui-col-sm10, .layui-col-sm11, .layui-col-sm12, .layui-col-sm2, .layui-col-sm3, .layui-col-sm4, .layui-col-sm5, .layui-col-sm6, .layui-col-sm7, .layui-col-sm8, .layui-col-sm9 {
-        float: left
-    }
-
-    .layui-col-sm1 {
-        width: 8.33333333%
-    }
-
-    .layui-col-sm2 {
-        width: 16.66666667%
-    }
-
-    .layui-col-sm3 {
-        width: 25%
-    }
-
-    .layui-col-sm4 {
-        width: 33.33333333%
-    }
-
-    .layui-col-sm5 {
-        width: 41.66666667%
-    }
-
-    .layui-col-sm6 {
-        width: 50%
-    }
-
-    .layui-col-sm7 {
-        width: 58.33333333%
-    }
-
-    .layui-col-sm8 {
-        width: 66.66666667%
-    }
-
-    .layui-col-sm9 {
-        width: 75%
-    }
-
-    .layui-col-sm10 {
-        width: 83.33333333%
-    }
-
-    .layui-col-sm11 {
-        width: 91.66666667%
-    }
-
-    .layui-col-sm12 {
-        width: 100%
-    }
-
-    .layui-col-sm-offset1 {
-        margin-left: 8.33333333%
-    }
-
-    .layui-col-sm-offset2 {
-        margin-left: 16.66666667%
-    }
-
-    .layui-col-sm-offset3 {
-        margin-left: 25%
-    }
-
-    .layui-col-sm-offset4 {
-        margin-left: 33.33333333%
-    }
-
-    .layui-col-sm-offset5 {
-        margin-left: 41.66666667%
-    }
-
-    .layui-col-sm-offset6 {
-        margin-left: 50%
-    }
-
-    .layui-col-sm-offset7 {
-        margin-left: 58.33333333%
-    }
-
-    .layui-col-sm-offset8 {
-        margin-left: 66.66666667%
-    }
-
-    .layui-col-sm-offset9 {
-        margin-left: 75%
-    }
-
-    .layui-col-sm-offset10 {
-        margin-left: 83.33333333%
-    }
-
-    .layui-col-sm-offset11 {
-        margin-left: 91.66666667%
-    }
-
-    .layui-col-sm-offset12 {
-        margin-left: 100%
-    }
-}
-
-@media screen and (min-width: 992px) {
-    .layui-container {
-        width: 970px
-    }
-
-    .layui-hide-md {
-        display: none !important
-    }
-
-    .layui-show-md-block {
-        display: block !important
-    }
-
-    .layui-show-md-inline {
-        display: inline !important
-    }
-
-    .layui-show-md-inline-block {
-        display: inline-block !important
-    }
-
-    .layui-col-md1, .layui-col-md10, .layui-col-md11, .layui-col-md12, .layui-col-md2, .layui-col-md3, .layui-col-md4, .layui-col-md5, .layui-col-md6, .layui-col-md7, .layui-col-md8, .layui-col-md9 {
-        float: left
-    }
-
-    .layui-col-md1 {
-        width: 8.33333333%
-    }
-
-    .layui-col-md2 {
-        width: 16.66666667%
-    }
-
-    .layui-col-md3 {
-        width: 25%
-    }
-
-    .layui-col-md4 {
-        width: 33.33333333%
-    }
-
-    .layui-col-md5 {
-        width: 41.66666667%
-    }
-
-    .layui-col-md6 {
-        width: 50%
-    }
-
-    .layui-col-md7 {
-        width: 58.33333333%
-    }
-
-    .layui-col-md8 {
-        width: 66.66666667%
-    }
-
-    .layui-col-md9 {
-        width: 75%
-    }
-
-    .layui-col-md10 {
-        width: 83.33333333%
-    }
-
-    .layui-col-md11 {
-        width: 91.66666667%
-    }
-
-    .layui-col-md12 {
-        width: 100%
-    }
-
-    .layui-col-md-offset1 {
-        margin-left: 8.33333333%
-    }
-
-    .layui-col-md-offset2 {
-        margin-left: 16.66666667%
-    }
-
-    .layui-col-md-offset3 {
-        margin-left: 25%
-    }
-
-    .layui-col-md-offset4 {
-        margin-left: 33.33333333%
-    }
-
-    .layui-col-md-offset5 {
-        margin-left: 41.66666667%
-    }
-
-    .layui-col-md-offset6 {
-        margin-left: 50%
-    }
-
-    .layui-col-md-offset7 {
-        margin-left: 58.33333333%
-    }
-
-    .layui-col-md-offset8 {
-        margin-left: 66.66666667%
-    }
-
-    .layui-col-md-offset9 {
-        margin-left: 75%
-    }
-
-    .layui-col-md-offset10 {
-        margin-left: 83.33333333%
-    }
-
-    .layui-col-md-offset11 {
-        margin-left: 91.66666667%
-    }
-
-    .layui-col-md-offset12 {
-        margin-left: 100%
-    }
-}
-
-@media screen and (min-width: 1200px) {
-    .layui-container {
-        width: 1170px
-    }
-
-    .layui-hide-lg {
-        display: none !important
-    }
-
-    .layui-show-lg-block {
-        display: block !important
-    }
-
-    .layui-show-lg-inline {
-        display: inline !important
-    }
-
-    .layui-show-lg-inline-block {
-        display: inline-block !important
-    }
-
-    .layui-col-lg1, .layui-col-lg10, .layui-col-lg11, .layui-col-lg12, .layui-col-lg2, .layui-col-lg3, .layui-col-lg4, .layui-col-lg5, .layui-col-lg6, .layui-col-lg7, .layui-col-lg8, .layui-col-lg9 {
-        float: left
-    }
-
-    .layui-col-lg1 {
-        width: 8.33333333%
-    }
-
-    .layui-col-lg2 {
-        width: 16.66666667%
-    }
-
-    .layui-col-lg3 {
-        width: 25%
-    }
-
-    .layui-col-lg4 {
-        width: 33.33333333%
-    }
-
-    .layui-col-lg5 {
-        width: 41.66666667%
-    }
-
-    .layui-col-lg6 {
-        width: 50%
-    }
-
-    .layui-col-lg7 {
-        width: 58.33333333%
-    }
-
-    .layui-col-lg8 {
-        width: 66.66666667%
-    }
-
-    .layui-col-lg9 {
-        width: 75%
-    }
-
-    .layui-col-lg10 {
-        width: 83.33333333%
-    }
-
-    .layui-col-lg11 {
-        width: 91.66666667%
-    }
-
-    .layui-col-lg12 {
-        width: 100%
-    }
-
-    .layui-col-lg-offset1 {
-        margin-left: 8.33333333%
-    }
-
-    .layui-col-lg-offset2 {
-        margin-left: 16.66666667%
-    }
-
-    .layui-col-lg-offset3 {
-        margin-left: 25%
-    }
-
-    .layui-col-lg-offset4 {
-        margin-left: 33.33333333%
-    }
-
-    .layui-col-lg-offset5 {
-        margin-left: 41.66666667%
-    }
-
-    .layui-col-lg-offset6 {
-        margin-left: 50%
-    }
-
-    .layui-col-lg-offset7 {
-        margin-left: 58.33333333%
-    }
-
-    .layui-col-lg-offset8 {
-        margin-left: 66.66666667%
-    }
-
-    .layui-col-lg-offset9 {
-        margin-left: 75%
-    }
-
-    .layui-col-lg-offset10 {
-        margin-left: 83.33333333%
-    }
-
-    .layui-col-lg-offset11 {
-        margin-left: 91.66666667%
-    }
-
-    .layui-col-lg-offset12 {
-        margin-left: 100%
-    }
-}
-
-.layui-col-space1 {
-    margin: -.5px
-}
-
-.layui-col-space1 > * {
-    padding: .5px
-}
-
-.layui-col-space3 {
-    margin: -1.5px
-}
-
-.layui-col-space3 > * {
-    padding: 1.5px
-}
-
-.layui-col-space5 {
-    margin: -2.5px
-}
-
-.layui-col-space5 > * {
-    padding: 2.5px
-}
-
-.layui-col-space8 {
-    margin: -3.5px
-}
-
-.layui-col-space8 > * {
-    padding: 3.5px
-}
-
-.layui-col-space10 {
-    margin: -5px
-}
-
-.layui-col-space10 > * {
-    padding: 5px
-}
-
-.layui-col-space12 {
-    margin: -6px
-}
-
-.layui-col-space12 > * {
-    padding: 6px
-}
-
-.layui-col-space15 {
-    margin: -7.5px
-}
-
-.layui-col-space15 > * {
-    padding: 7.5px
-}
-
-.layui-col-space18 {
-    margin: -9px
-}
-
-.layui-col-space18 > * {
-    padding: 9px
-}
-
-.layui-col-space20 {
-    margin: -10px
-}
-
-.layui-col-space20 > * {
-    padding: 10px
-}
-
-.layui-col-space22 {
-    margin: -11px
-}
-
-.layui-col-space22 > * {
-    padding: 11px
-}
-
-.layui-col-space25 {
-    margin: -12.5px
-}
-
-.layui-col-space25 > * {
-    padding: 12.5px
-}
-
-.layui-col-space30 {
-    margin: -15px
-}
-
-.layui-col-space30 > * {
-    padding: 15px
-}
-
-.layui-btn, .layui-input, .layui-select, .layui-textarea, .layui-upload-button {
-    outline: 0;
-    -webkit-appearance: none;
-    transition: all .3s;
-    -webkit-transition: all .3s;
-    box-sizing: border-box
-}
-
-.layui-elem-quote {
-    margin-bottom: 10px;
-    padding: 15px;
-    line-height: 22px;
-    border-left: 5px solid #009688;
-    border-radius: 0 2px 2px 0;
-    background-color: #f2f2f2
-}
-
-.layui-quote-nm {
-    border-style: solid;
-    border-width: 1px 1px 1px 5px;
-    background: 0 0
-}
-
-.layui-elem-field {
-    margin-bottom: 10px;
-    padding: 0;
-    border-width: 1px;
-    border-style: solid
-}
-
-.layui-elem-field legend {
-    margin-left: 20px;
-    padding: 0 10px;
-    font-size: 20px;
-    font-weight: 300
-}
-
-.layui-field-title {
-    margin: 10px 0 20px;
-    border-width: 1px 0 0
-}
-
-.layui-field-box {
-    padding: 10px 15px
-}
-
-.layui-field-title .layui-field-box {
-    padding: 10px 0
-}
-
-.layui-progress {
-    position: relative;
-    height: 6px;
-    border-radius: 20px;
-    background-color: #e2e2e2
-}
-
-.layui-progress-bar {
-    position: absolute;
-    left: 0;
-    top: 0;
-    width: 0;
-    max-width: 100%;
-    height: 6px;
-    border-radius: 20px;
-    text-align: right;
-    background-color: #5FB878;
-    transition: all .3s;
-    -webkit-transition: all .3s
-}
-
-.layui-progress-big, .layui-progress-big .layui-progress-bar {
-    height: 18px;
-    line-height: 18px
-}
-
-.layui-progress-text {
-    position: relative;
-    top: -20px;
-    line-height: 18px;
-    font-size: 12px;
-    color: #666
-}
-
-.layui-progress-big .layui-progress-text {
-    position: static;
-    padding: 0 10px;
-    color: #fff
-}
-
-.layui-collapse {
-    border-width: 1px;
-    border-style: solid;
-    border-radius: 2px
-}
-
-.layui-colla-content, .layui-colla-item {
-    border-top-width: 1px;
-    border-top-style: solid
-}
-
-.layui-colla-item:first-child {
-    border-top: none
-}
-
-.layui-colla-title {
-    position: relative;
-    height: 42px;
-    line-height: 42px;
-    padding: 0 15px 0 35px;
-    color: #333;
-    background-color: #f2f2f2;
-    cursor: pointer;
-    font-size: 14px;
-    overflow: hidden
-}
-
-.layui-colla-content {
-    display: none;
-    padding: 10px 15px;
-    line-height: 22px;
-    color: #666
-}
-
-.layui-colla-icon {
-    position: absolute;
-    left: 15px;
-    top: 0;
-    font-size: 14px
-}
-
-.layui-card {
-    margin-bottom: 15px;
-    border-radius: 2px;
-    background-color: #fff;
-    box-shadow: 0 1px 2px 0 rgba(0, 0, 0, .05)
-}
-
-.layui-card:last-child {
-    margin-bottom: 0
-}
-
-.layui-card-header {
-    position: relative;
-    height: 42px;
-    line-height: 42px;
-    padding: 0 15px;
-    border-bottom: 1px solid #f6f6f6;
-    color: #333;
-    border-radius: 2px 2px 0 0;
-    font-size: 14px
-}
-
-.layui-bg-black, .layui-bg-blue, .layui-bg-cyan, .layui-bg-green, .layui-bg-orange, .layui-bg-red {
-    color: #fff !important
-}
-
-.layui-card-body {
-    position: relative;
-    padding: 10px 15px;
-    line-height: 24px
-}
-
-.layui-card-body[pad15] {
-    padding: 15px
-}
-
-.layui-card-body[pad20] {
-    padding: 20px
-}
-
-.layui-card-body .layui-table {
-    margin: 5px 0
-}
-
-.layui-card .layui-tab {
-    margin: 0
-}
-
-.layui-panel-window {
-    position: relative;
-    padding: 15px;
-    border-radius: 0;
-    border-top: 5px solid #E6E6E6;
-    background-color: #fff
-}
-
-.layui-auxiliar-moving {
-    position: fixed;
-    left: 0;
-    right: 0;
-    top: 0;
-    bottom: 0;
-    width: 100%;
-    height: 100%;
-    background: 0 0;
-    z-index: 9999999999
-}
-
-.layui-form-label, .layui-form-mid, .layui-form-select, .layui-input-block, .layui-input-inline, .layui-textarea {
-    position: relative
-}
-
-.layui-bg-red {
-    background-color: #FF5722 !important
-}
-
-.layui-bg-orange {
-    background-color: #FFB800 !important
-}
-
-.layui-bg-green {
-    background-color: #009688 !important
-}
-
-.layui-bg-cyan {
-    background-color: #2F4056 !important
-}
-
-.layui-bg-blue {
-    background-color: #1E9FFF !important
-}
-
-.layui-bg-black {
-    background-color: #393D49 !important
-}
-
-.layui-bg-gray {
-    background-color: #eee !important;
-    color: #666 !important
-}
-
-.layui-badge-rim, .layui-colla-content, .layui-colla-item, .layui-collapse, .layui-elem-field, .layui-form-pane .layui-form-item[pane], .layui-form-pane .layui-form-label, .layui-input, .layui-layedit, .layui-layedit-tool, .layui-quote-nm, .layui-select, .layui-tab-bar, .layui-tab-card, .layui-tab-title, .layui-tab-title .layui-this:after, .layui-textarea {
-    border-color: #e6e6e6
-}
-
-.layui-timeline-item:before, hr {
-    background-color: #e6e6e6
-}
-
-.layui-text {
-    line-height: 22px;
-    font-size: 14px;
-    color: #666
-}
-
-.layui-text h1, .layui-text h2, .layui-text h3 {
-    font-weight: 500;
-    color: #333
-}
-
-.layui-text h1 {
-    font-size: 30px
-}
-
-.layui-text h2 {
-    font-size: 24px
-}
-
-.layui-text h3 {
-    font-size: 18px
-}
-
-.layui-text a:not(.layui-btn) {
-    color: #01AAED
-}
-
-.layui-text a:not(.layui-btn):hover {
-    text-decoration: underline
-}
-
-.layui-text ul {
-    padding: 5px 0 5px 15px
-}
-
-.layui-text ul li {
-    margin-top: 5px;
-    list-style-type: disc
-}
-
-.layui-text em, .layui-word-aux {
-    color: #999 !important;
-    padding: 0 5px !important
-}
-
-.layui-btn {
-    display: inline-block;
-    height: 38px;
-    line-height: 38px;
-    padding: 0 18px;
-    background-color: #009688;
-    color: #fff;
-    white-space: nowrap;
-    text-align: center;
-    font-size: 14px;
-    border: none;
-    border-radius: 2px;
-    cursor: pointer
-}
-
-.layui-btn:hover {
-    opacity: .8;
-    filter: alpha(opacity=80);
-    color: #fff
-}
-
-.layui-btn:active {
-    opacity: 1;
-    filter: alpha(opacity=100)
-}
-
-.layui-btn + .layui-btn {
-    margin-left: 10px
-}
-
-.layui-btn-container {
-    font-size: 0
-}
-
-.layui-btn-container .layui-btn {
-    margin-right: 10px;
-    margin-bottom: 10px
-}
-
-.layui-btn-container .layui-btn + .layui-btn {
-    margin-left: 0
-}
-
-.layui-table .layui-btn-container .layui-btn {
-    margin-bottom: 9px
-}
-
-.layui-btn-radius {
-    border-radius: 100px
-}
-
-.layui-btn .layui-icon {
-    margin-right: 3px;
-    font-size: 18px;
-    vertical-align: bottom;
-    vertical-align: middle \9
-}
-
-.layui-btn-primary {
-    border: 1px solid #C9C9C9;
-    background-color: #fff;
-    color: #555
-}
-
-.layui-btn-primary:hover {
-    border-color: #009688;
-    color: #333
-}
-
-.layui-btn-normal {
-    background-color: #1E9FFF
-}
-
-.layui-btn-warm {
-    background-color: #FFB800
-}
-
-.layui-btn-danger {
-    background-color: #FF5722
-}
-
-.layui-btn-disabled, .layui-btn-disabled:active, .layui-btn-disabled:hover {
-    border: 1px solid #e6e6e6;
-    background-color: #FBFBFB;
-    color: #C9C9C9;
-    cursor: not-allowed;
-    opacity: 1
-}
-
-.layui-btn-lg {
-    height: 44px;
-    line-height: 44px;
-    padding: 0 25px;
-    font-size: 16px
-}
-
-.layui-btn-sm {
-    height: 30px;
-    line-height: 30px;
-    padding: 0 10px;
-    font-size: 12px
-}
-
-.layui-btn-sm i {
-    font-size: 16px !important
-}
-
-.layui-btn-xs {
-    height: 22px;
-    line-height: 22px;
-    padding: 0 5px;
-    font-size: 12px
-}
-
-.layui-btn-xs i {
-    font-size: 14px !important
-}
-
-.layui-btn-group {
-    display: inline-block;
-    vertical-align: middle;
-    font-size: 0
-}
-
-.layui-btn-group .layui-btn {
-    margin-left: 0 !important;
-    margin-right: 0 !important;
-    border-left: 1px solid rgba(255, 255, 255, .5);
-    border-radius: 0
-}
-
-.layui-btn-group .layui-btn-primary {
-    border-left: none
-}
-
-.layui-btn-group .layui-btn-primary:hover {
-    border-color: #C9C9C9;
-    color: #009688
-}
-
-.layui-btn-group .layui-btn:first-child {
-    border-left: none;
-    border-radius: 2px 0 0 2px
-}
-
-.layui-btn-group .layui-btn-primary:first-child {
-    border-left: 1px solid #c9c9c9
-}
-
-.layui-btn-group .layui-btn:last-child {
-    border-radius: 0 2px 2px 0
-}
-
-.layui-btn-group .layui-btn + .layui-btn {
-    margin-left: 0
-}
-
-.layui-btn-group + .layui-btn-group {
-    margin-left: 10px
-}
-
-.layui-btn-fluid {
-    width: 100%
-}
-
-.layui-input, .layui-select, .layui-textarea {
-    height: 38px;
-    line-height: 1.3;
-    line-height: 38px \9;
-    border-width: 1px;
-    border-style: solid;
-    background-color: #fff;
-    border-radius: 2px
-}
-
-.layui-input::-webkit-input-placeholder, .layui-select::-webkit-input-placeholder, .layui-textarea::-webkit-input-placeholder {
-    line-height: 1.3
-}
-
-.layui-input, .layui-textarea {
-    display: block;
-    width: 100%;
-    padding-left: 10px
-}
-
-.layui-input:hover, .layui-textarea:hover {
-    border-color: #D2D2D2 !important
-}
-
-.layui-input:focus, .layui-textarea:focus {
-    border-color: #C9C9C9 !important
-}
-
-.layui-textarea {
-    min-height: 100px;
-    height: auto;
-    line-height: 20px;
-    padding: 6px 10px;
-    resize: vertical
-}
-
-.layui-select {
-    padding: 0 10px
-}
-
-.layui-form input[type=checkbox], .layui-form input[type=radio], .layui-form select {
-    display: none
-}
-
-.layui-form [lay-ignore] {
-    display: initial
-}
-
-.layui-form-item {
-    margin-bottom: 15px;
-    clear: both;
-    *zoom: 1
-}
-
-.layui-form-item:after {
-    content: '\20';
-    clear: both;
-    *zoom: 1;
-    display: block;
-    height: 0
-}
-
-.layui-form-label {
-    float: left;
-    display: block;
-    padding: 9px 15px;
-    width: 80px;
-    font-weight: 400;
-    line-height: 20px;
-    text-align: right
-}
-
-.layui-form-label-col {
-    display: block;
-    float: none;
-    padding: 9px 0;
-    line-height: 20px;
-    text-align: left
-}
-
-.layui-form-item .layui-inline {
-    margin-bottom: 5px;
-    margin-right: 10px
-}
-
-.layui-input-block {
-    margin-left: 110px;
-    min-height: 36px
-}
-
-.layui-input-inline {
-    display: inline-block;
-    vertical-align: middle
-}
-
-.layui-form-item .layui-input-inline {
-    float: left;
-    width: 200px;
-    margin-right: 10px
-}
-
-.layui-form-text .layui-input-inline {
-    width: auto
-}
-
-.layui-form-mid {
-    float: left;
-    display: block;
-    padding: 9px 0 !important;
-    line-height: 20px;
-    margin-right: 10px
-}
-
-.layui-form-danger + .layui-form-select .layui-input, .layui-form-danger:focus {
-    border-color: #FF5722 !important
-}
-
-.layui-form-select .layui-input {
-    padding-right: 30px;
-    cursor: pointer
-}
-
-.layui-form-select .layui-edge {
-    position: absolute;
-    right: 10px;
-    top: 50%;
-    margin-top: -3px;
-    cursor: pointer;
-    border-width: 6px;
-    border-top-color: #c2c2c2;
-    border-top-style: solid;
-    transition: all .3s;
-    -webkit-transition: all .3s
-}
-
-.layui-form-select dl {
-    display: none;
-    position: absolute;
-    left: 0;
-    top: 42px;
-    padding: 5px 0;
-    z-index: 899;
-    min-width: 100%;
-    border: 1px solid #d2d2d2;
-    max-height: 300px;
-    overflow-y: auto;
-    background-color: #fff;
-    border-radius: 2px;
-    box-shadow: 0 2px 4px rgba(0, 0, 0, .12);
-    box-sizing: border-box
-}
-
-.layui-form-select dl dd, .layui-form-select dl dt {
-    padding: 0 10px;
-    line-height: 36px;
-    white-space: nowrap;
-    overflow: hidden;
-    text-overflow: ellipsis
-}
-
-.layui-form-select dl dt {
-    font-size: 12px;
-    color: #999
-}
-
-.layui-form-select dl dd {
-    cursor: pointer
-}
-
-.layui-form-select dl dd:hover {
-    background-color: #f2f2f2;
-    -webkit-transition: .5s all;
-    transition: .5s all
-}
-
-.layui-form-select .layui-select-group dd {
-    padding-left: 20px
-}
-
-.layui-form-select dl dd.layui-select-tips {
-    padding-left: 10px !important;
-    color: #999
-}
-
-.layui-form-select dl dd.layui-this {
-    background-color: #5FB878;
-    color: #fff
-}
-
-.layui-form-checkbox, .layui-form-select dl dd.layui-disabled {
-    background-color: #fff
-}
-
-.layui-form-selected dl {
-    display: block
-}
-
-.layui-form-checkbox, .layui-form-checkbox *, .layui-form-switch {
-    display: inline-block;
-    vertical-align: middle
-}
-
-.layui-form-selected .layui-edge {
-    margin-top: -9px;
-    -webkit-transform: rotate(180deg);
-    transform: rotate(180deg);
-    margin-top: -3px \9
-}
-
-:root .layui-form-selected .layui-edge {
-    margin-top: -9px \0/ IE9
-}
-
-.layui-form-selectup dl {
-    top: auto;
-    bottom: 42px
-}
-
-.layui-select-none {
-    margin: 5px 0;
-    text-align: center;
-    color: #999
-}
-
-.layui-select-disabled .layui-disabled {
-    border-color: #eee !important
-}
-
-.layui-select-disabled .layui-edge {
-    border-top-color: #d2d2d2
-}
-
-.layui-form-checkbox {
-    position: relative;
-    height: 30px;
-    line-height: 30px;
-    margin-right: 10px;
-    padding-right: 30px;
-    cursor: pointer;
-    font-size: 0;
-    -webkit-transition: .1s linear;
-    transition: .1s linear;
-    box-sizing: border-box
-}
-
-.layui-form-checkbox span {
-    padding: 0 10px;
-    height: 100%;
-    font-size: 14px;
-    border-radius: 2px 0 0 2px;
-    background-color: #d2d2d2;
-    color: #fff;
-    overflow: hidden;
-    white-space: nowrap;
-    text-overflow: ellipsis
-}
-
-.layui-form-checkbox:hover span {
-    background-color: #c2c2c2
-}
-
-.layui-form-checkbox i {
-    position: absolute;
-    right: 0;
-    top: 0;
-    width: 30px;
-    height: 28px;
-    border: 1px solid #d2d2d2;
-    border-left: none;
-    border-radius: 0 2px 2px 0;
-    color: #fff;
-    font-size: 20px;
-    text-align: center
-}
-
-.layui-form-checkbox:hover i {
-    border-color: #c2c2c2;
-    color: #c2c2c2
-}
-
-.layui-form-checked, .layui-form-checked:hover {
-    border-color: #5FB878
-}
-
-.layui-form-checked span, .layui-form-checked:hover span {
-    background-color: #5FB878
-}
-
-.layui-form-checked i, .layui-form-checked:hover i {
-    color: #5FB878
-}
-
-.layui-form-item .layui-form-checkbox {
-    margin-top: 4px
-}
-
-.layui-form-checkbox[lay-skin=primary] {
-    height: auto !important;
-    line-height: normal !important;
-    min-width: 18px;
-    min-height: 18px;
-    border: none !important;
-    margin-right: 0;
-    padding-left: 28px;
-    padding-right: 0;
-    background: 0 0
-}
-
-.layui-form-checkbox[lay-skin=primary] span {
-    padding-left: 0;
-    padding-right: 15px;
-    line-height: 18px;
-    background: 0 0;
-    color: #666
-}
-
-.layui-form-checkbox[lay-skin=primary] i {
-    right: auto;
-    left: 0;
-    width: 16px;
-    height: 16px;
-    line-height: 16px;
-    border: 1px solid #d2d2d2;
-    font-size: 12px;
-    border-radius: 2px;
-    background-color: #fff;
-    -webkit-transition: .1s linear;
-    transition: .1s linear
-}
-
-.layui-form-checkbox[lay-skin=primary]:hover i {
-    border-color: #5FB878;
-    color: #fff
-}
-
-.layui-form-checked[lay-skin=primary] i {
-    border-color: #5FB878;
-    background-color: #5FB878;
-    color: #fff
-}
-
-.layui-checkbox-disbaled[lay-skin=primary] span {
-    background: 0 0 !important;
-    color: #c2c2c2
-}
-
-.layui-checkbox-disbaled[lay-skin=primary]:hover i {
-    border-color: #d2d2d2
-}
-
-.layui-form-item .layui-form-checkbox[lay-skin=primary] {
-    margin-top: 10px
-}
-
-.layui-form-switch {
-    position: relative;
-    height: 22px;
-    line-height: 22px;
-    min-width: 35px;
-    padding: 0 5px;
-    margin-top: 8px;
-    border: 1px solid #d2d2d2;
-    border-radius: 20px;
-    cursor: pointer;
-    background-color: #fff;
-    -webkit-transition: .1s linear;
-    transition: .1s linear
-}
-
-.layui-form-switch i {
-    position: absolute;
-    left: 5px;
-    top: 3px;
-    width: 16px;
-    height: 16px;
-    border-radius: 20px;
-    background-color: #d2d2d2;
-    -webkit-transition: .1s linear;
-    transition: .1s linear
-}
-
-.layui-form-switch em {
-    position: relative;
-    top: 0;
-    width: 25px;
-    margin-left: 21px;
-    padding: 0 !important;
-    text-align: center !important;
-    color: #999 !important;
-    font-style: normal !important;
-    font-size: 12px
-}
-
-.layui-form-onswitch {
-    border-color: #5FB878;
-    background-color: #5FB878
-}
-
-.layui-checkbox-disbaled, .layui-checkbox-disbaled i {
-    border-color: #e2e2e2 !important
-}
-
-.layui-form-onswitch i {
-    left: 100%;
-    margin-left: -21px;
-    background-color: #fff
-}
-
-.layui-form-onswitch em {
-    margin-left: 5px;
-    margin-right: 21px;
-    color: #fff !important
-}
-
-.layui-checkbox-disbaled span {
-    background-color: #e2e2e2 !important
-}
-
-.layui-checkbox-disbaled:hover i {
-    color: #fff !important
-}
-
-[lay-radio] {
-    display: none
-}
-
-.layui-form-radio, .layui-form-radio * {
-    display: inline-block;
-    vertical-align: middle
-}
-
-.layui-form-radio {
-    line-height: 28px;
-    margin: 6px 10px 0 0;
-    padding-right: 10px;
-    cursor: pointer;
-    font-size: 0
-}
-
-.layui-form-radio * {
-    font-size: 14px
-}
-
-.layui-form-radio > i {
-    margin-right: 8px;
-    font-size: 22px;
-    color: #c2c2c2
-}
-
-.layui-form-radio > i:hover, .layui-form-radioed > i {
-    color: #5FB878
-}
-
-.layui-radio-disbaled > i {
-    color: #e2e2e2 !important
-}
-
-.layui-form-pane .layui-form-label {
-    width: 110px;
-    padding: 8px 15px;
-    height: 38px;
-    line-height: 20px;
-    border-width: 1px;
-    border-style: solid;
-    border-radius: 2px 0 0 2px;
-    text-align: center;
-    background-color: #FBFBFB;
-    overflow: hidden;
-    white-space: nowrap;
-    text-overflow: ellipsis;
-    box-sizing: border-box
-}
-
-.layui-form-pane .layui-input-inline {
-    margin-left: -1px
-}
-
-.layui-form-pane .layui-input-block {
-    margin-left: 110px;
-    left: -1px
-}
-
-.layui-form-pane .layui-input {
-    border-radius: 0 2px 2px 0
-}
-
-.layui-form-pane .layui-form-text .layui-form-label {
-    float: none;
-    width: 100%;
-    border-radius: 2px;
-    box-sizing: border-box;
-    text-align: left
-}
-
-.layui-form-pane .layui-form-text .layui-input-inline {
-    display: block;
-    margin: 0;
-    top: -1px;
-    clear: both
-}
-
-.layui-form-pane .layui-form-text .layui-input-block {
-    margin: 0;
-    left: 0;
-    top: -1px
-}
-
-.layui-form-pane .layui-form-text .layui-textarea {
-    min-height: 100px;
-    border-radius: 0 0 2px 2px
-}
-
-.layui-form-pane .layui-form-checkbox {
-    margin: 4px 0 4px 10px
-}
-
-.layui-form-pane .layui-form-radio, .layui-form-pane .layui-form-switch {
-    margin-top: 6px;
-    margin-left: 10px
-}
-
-.layui-form-pane .layui-form-item[pane] {
-    position: relative;
-    border-width: 1px;
-    border-style: solid
-}
-
-.layui-form-pane .layui-form-item[pane] .layui-form-label {
-    position: absolute;
-    left: 0;
-    top: 0;
-    height: 100%;
-    border-width: 0 1px 0 0
-}
-
-.layui-form-pane .layui-form-item[pane] .layui-input-inline {
-    margin-left: 110px
-}
-
-@media screen and (max-width: 450px) {
-    .layui-form-item .layui-form-label {
-        text-overflow: ellipsis;
-        overflow: hidden;
-        white-space: nowrap
-    }
-
-    .layui-form-item .layui-inline {
-        display: block;
-        margin-right: 0;
-        margin-bottom: 20px;
-        clear: both
-    }
-
-    .layui-form-item .layui-inline:after {
-        content: '\20';
-        clear: both;
-        display: block;
-        height: 0
-    }
-
-    .layui-form-item .layui-input-inline {
-        display: block;
-        float: none;
-        left: -3px;
-        width: auto;
-        margin: 0 0 10px 112px
-    }
-
-    .layui-form-item .layui-input-inline + .layui-form-mid {
-        margin-left: 110px;
-        top: -5px;
-        padding: 0
-    }
-
-    .layui-form-item .layui-form-checkbox {
-        margin-right: 5px;
-        margin-bottom: 5px
-    }
-}
-
-.layui-layedit {
-    border-width: 1px;
-    border-style: solid;
-    border-radius: 2px
-}
-
-.layui-layedit-tool {
-    padding: 3px 5px;
-    border-bottom-width: 1px;
-    border-bottom-style: solid;
-    font-size: 0
-}
-
-.layedit-tool-fixed {
-    position: fixed;
-    top: 0;
-    border-top: 1px solid #e2e2e2
-}
-
-.layui-layedit-tool .layedit-tool-mid, .layui-layedit-tool .layui-icon {
-    display: inline-block;
-    vertical-align: middle;
-    text-align: center;
-    font-size: 14px
-}
-
-.layui-layedit-tool .layui-icon {
-    position: relative;
-    width: 32px;
-    height: 30px;
-    line-height: 30px;
-    margin: 3px 5px;
-    color: #777;
-    cursor: pointer;
-    border-radius: 2px
-}
-
-.layui-layedit-tool .layui-icon:hover {
-    color: #393D49
-}
-
-.layui-layedit-tool .layui-icon:active {
-    color: #000
-}
-
-.layui-layedit-tool .layedit-tool-active {
-    background-color: #e2e2e2;
-    color: #000
-}
-
-.layui-layedit-tool .layui-disabled, .layui-layedit-tool .layui-disabled:hover {
-    color: #d2d2d2;
-    cursor: not-allowed
-}
-
-.layui-layedit-tool .layedit-tool-mid {
-    width: 1px;
-    height: 18px;
-    margin: 0 10px;
-    background-color: #d2d2d2
-}
-
-.layedit-tool-html {
-    width: 50px !important;
-    font-size: 30px !important
-}
-
-.layedit-tool-b, .layedit-tool-code, .layedit-tool-help {
-    font-size: 16px !important
-}
-
-.layedit-tool-d, .layedit-tool-face, .layedit-tool-image, .layedit-tool-unlink {
-    font-size: 18px !important
-}
-
-.layedit-tool-image input {
-    position: absolute;
-    font-size: 0;
-    left: 0;
-    top: 0;
-    width: 100%;
-    height: 100%;
-    opacity: .01;
-    filter: Alpha(opacity=1);
-    cursor: pointer
-}
-
-.layui-layedit-iframe iframe {
-    display: block;
-    width: 100%
-}
-
-#LAY_layedit_code {
-    overflow: hidden
-}
-
-.layui-laypage {
-    display: inline-block;
-    *display: inline;
-    *zoom: 1;
-    vertical-align: middle;
-    margin: 10px 0;
-    font-size: 0
-}
-
-.layui-laypage > a:first-child, .layui-laypage > a:first-child em {
-    border-radius: 2px 0 0 2px
-}
-
-.layui-laypage > a:last-child, .layui-laypage > a:last-child em {
-    border-radius: 0 2px 2px 0
-}
-
-.layui-laypage > :first-child {
-    margin-left: 0 !important
-}
-
-.layui-laypage > :last-child {
-    margin-right: 0 !important
-}
-
-.layui-laypage a, .layui-laypage button, .layui-laypage input, .layui-laypage select, .layui-laypage span {
-    border: 1px solid #e2e2e2
-}
-
-.layui-laypage a, .layui-laypage span {
-    display: inline-block;
-    *display: inline;
-    *zoom: 1;
-    vertical-align: middle;
-    padding: 0 15px;
-    height: 28px;
-    line-height: 28px;
-    margin: 0 -1px 5px 0;
-    background-color: #fff;
-    color: #333;
-    font-size: 12px
-}
-
-.layui-flow-more a *, .layui-laypage input, .layui-table-view select[lay-ignore] {
-    display: inline-block
-}
-
-.layui-laypage a:hover {
-    color: #009688
-}
-
-.layui-laypage em {
-    font-style: normal
-}
-
-.layui-laypage .layui-laypage-spr {
-    color: #999;
-    font-weight: 700
-}
-
-.layui-laypage a {
-    text-decoration: none
-}
-
-.layui-laypage .layui-laypage-curr {
-    position: relative
-}
-
-.layui-laypage .layui-laypage-curr em {
-    position: relative;
-    color: #fff
-}
-
-.layui-laypage .layui-laypage-curr .layui-laypage-em {
-    position: absolute;
-    left: -1px;
-    top: -1px;
-    padding: 1px;
-    width: 100%;
-    height: 100%;
-    background-color: #009688
-}
-
-.layui-laypage-em {
-    border-radius: 2px
-}
-
-.layui-laypage-next em, .layui-laypage-prev em {
-    font-family: Sim sun;
-    font-size: 16px
-}
-
-.layui-laypage .layui-laypage-count, .layui-laypage .layui-laypage-limits, .layui-laypage .layui-laypage-refresh, .layui-laypage .layui-laypage-skip {
-    margin-left: 10px;
-    margin-right: 10px;
-    padding: 0;
-    border: none
-}
-
-.layui-laypage .layui-laypage-limits, .layui-laypage .layui-laypage-refresh {
-    vertical-align: top
-}
-
-.layui-laypage .layui-laypage-refresh i {
-    font-size: 18px;
-    cursor: pointer
-}
-
-.layui-laypage select {
-    height: 22px;
-    padding: 3px;
-    border-radius: 2px;
-    cursor: pointer
-}
-
-.layui-laypage .layui-laypage-skip {
-    height: 30px;
-    line-height: 30px;
-    color: #999
-}
-
-.layui-laypage button, .layui-laypage input {
-    height: 30px;
-    line-height: 30px;
-    border-radius: 2px;
-    vertical-align: top;
-    background-color: #fff;
-    box-sizing: border-box
-}
-
-.layui-laypage input {
-    width: 40px;
-    margin: 0 10px;
-    padding: 0 3px;
-    text-align: center
-}
-
-.layui-laypage input:focus, .layui-laypage select:focus {
-    border-color: #009688 !important
-}
-
-.layui-laypage button {
-    margin-left: 10px;
-    padding: 0 10px;
-    cursor: pointer
-}
-
-.layui-table, .layui-table-view {
-    margin: 10px 0
-}
-
-.layui-flow-more {
-    margin: 10px 0;
-    text-align: center;
-    color: #999;
-    font-size: 14px
-}
-
-.layui-flow-more a {
-    height: 32px;
-    line-height: 32px
-}
-
-.layui-flow-more a * {
-    vertical-align: top
-}
-
-.layui-flow-more a cite {
-    padding: 0 20px;
-    border-radius: 3px;
-    background-color: #eee;
-    color: #333;
-    font-style: normal
-}
-
-.layui-flow-more a cite:hover {
-    opacity: .8
-}
-
-.layui-flow-more a i {
-    font-size: 30px;
-    color: #737383
-}
-
-.layui-table {
-    width: 100%;
-    background-color: #fff;
-    color: #666
-}
-
-.layui-table tr {
-    transition: all .3s;
-    -webkit-transition: all .3s
-}
-
-.layui-table th {
-    text-align: left;
-    font-weight: 400
-}
-
-.layui-table tbody tr:hover, .layui-table thead tr, .layui-table-click, .layui-table-header, .layui-table-hover, .layui-table-mend, .layui-table-patch, .layui-table-tool, .layui-table-total, .layui-table-total tr, .layui-table[lay-even] tr:nth-child(even) {
-    background-color: #f2f2f2
-}
-
-.layui-table td, .layui-table th, .layui-table-col-set, .layui-table-fixed-r, .layui-table-grid-down, .layui-table-header, .layui-table-page, .layui-table-tips-main, .layui-table-tool, .layui-table-total, .layui-table-view, .layui-table[lay-skin=line], .layui-table[lay-skin=row] {
-    border-width: 1px;
-    border-style: solid;
-    border-color: #e6e6e6
-}
-
-.layui-table td, .layui-table th {
-    position: relative;
-    padding: 9px 15px;
-    min-height: 20px;
-    line-height: 20px;
-    font-size: 14px
-}
-
-.layui-table[lay-skin=line] td, .layui-table[lay-skin=line] th {
-    border-width: 0 0 1px
-}
-
-.layui-table[lay-skin=row] td, .layui-table[lay-skin=row] th {
-    border-width: 0 1px 0 0
-}
-
-.layui-table[lay-skin=nob] td, .layui-table[lay-skin=nob] th {
-    border: none
-}
-
-.layui-table img {
-    max-width: 100px
-}
-
-.layui-table[lay-size=lg] td, .layui-table[lay-size=lg] th {
-    padding: 15px 30px
-}
-
-.layui-table-view .layui-table[lay-size=lg] .layui-table-cell {
-    height: 40px;
-    line-height: 40px
-}
-
-.layui-table[lay-size=sm] td, .layui-table[lay-size=sm] th {
-    font-size: 12px;
-    padding: 5px 10px
-}
-
-.layui-table-view .layui-table[lay-size=sm] .layui-table-cell {
-    height: 20px;
-    line-height: 20px
-}
-
-.layui-table[lay-data] {
-    display: none
-}
-
-.layui-table-box {
-    position: relative;
-    overflow: hidden
-}
-
-.layui-table-view .layui-table {
-    position: relative;
-    width: auto;
-    margin: 0
-}
-
-.layui-table-view .layui-table[lay-skin=line] {
-    border-width: 0 1px 0 0
-}
-
-.layui-table-view .layui-table[lay-skin=row] {
-    border-width: 0 0 1px
-}
-
-.layui-table-view .layui-table td, .layui-table-view .layui-table th {
-    padding: 5px 0;
-    border-top: none;
-    border-left: none
-}
-
-.layui-table-view .layui-table th.layui-unselect .layui-table-cell span {
-    cursor: pointer
-}
-
-.layui-table-view .layui-table td {
-    cursor: default
-}
-
-.layui-table-view .layui-form-checkbox[lay-skin=primary] i {
-    width: 18px;
-    height: 18px
-}
-
-.layui-table-view .layui-form-radio {
-    line-height: 0;
-    padding: 0
-}
-
-.layui-table-view .layui-form-radio > i {
-    margin: 0;
-    font-size: 20px
-}
-
-.layui-table-init {
-    position: absolute;
-    left: 0;
-    top: 0;
-    width: 100%;
-    height: 100%;
-    text-align: center;
-    z-index: 10
-}
-
-.layui-table-init .layui-icon {
-    position: absolute;
-    left: 50%;
-    top: 50%;
-    margin: -15px 0 0 -15px;
-    font-size: 30px;
-    color: #c2c2c2
-}
-
-.layui-table-header {
-    border-width: 0 0 1px;
-    overflow: hidden
-}
-
-.layui-table-header .layui-table {
-    margin-bottom: -1px
-}
-
-.layui-table-tool .layui-inline[lay-event] {
-    position: relative;
-    width: 26px;
-    height: 26px;
-    padding: 5px;
-    line-height: 16px;
-    margin-right: 10px;
-    text-align: center;
-    color: #333;
-    border: 1px solid #ccc;
-    cursor: pointer;
-    -webkit-transition: .5s all;
-    transition: .5s all
-}
-
-.layui-table-tool .layui-inline[lay-event]:hover {
-    border: 1px solid #999
-}
-
-.layui-table-tool-temp {
-    padding-right: 120px
-}
-
-.layui-table-tool-self {
-    position: absolute;
-    right: 17px;
-    top: 10px
-}
-
-.layui-table-tool .layui-table-tool-self .layui-inline[lay-event] {
-    margin: 0 0 0 10px
-}
-
-.layui-table-tool-panel {
-    position: absolute;
-    top: 29px;
-    left: -1px;
-    padding: 5px 0;
-    min-width: 150px;
-    min-height: 40px;
-    border: 1px solid #d2d2d2;
-    text-align: left;
-    background-color: #fff;
-    box-shadow: 0 2px 4px rgba(0, 0, 0, .12)
-}
-
-.layui-table-tool-panel li {
-    padding: 0 10px;
-    line-height: 30px;
-    white-space: nowrap;
-    overflow: hidden;
-    text-overflow: ellipsis;
-    -webkit-transition: .5s all;
-    transition: .5s all
-}
-
-.layui-table-tool-panel li .layui-form-checkbox[lay-skin=primary] {
-    width: 100%;
-    padding-left: 28px
-}
-
-.layui-table-tool-panel li:hover {
-    background-color: #f2f2f2
-}
-
-.layui-table-tool-panel li .layui-form-checkbox[lay-skin=primary] i {
-    position: absolute;
-    left: 0;
-    top: 0
-}
-
-.layui-table-tool-panel li .layui-form-checkbox[lay-skin=primary] span {
-    padding: 0
-}
-
-.layui-table-tool .layui-table-tool-self .layui-table-tool-panel {
-    left: auto;
-    right: -1px
-}
-
-.layui-table-col-set {
-    position: absolute;
-    right: 0;
-    top: 0;
-    width: 20px;
-    height: 100%;
-    border-width: 0 0 0 1px;
-    background-color: #fff
-}
-
-.layui-table-sort {
-    width: 10px;
-    height: 20px;
-    margin-left: 5px;
-    cursor: pointer !important
-}
-
-.layui-table-sort .layui-edge {
-    position: absolute;
-    left: 5px;
-    border-width: 5px
-}
-
-.layui-table-sort .layui-table-sort-asc {
-    top: 3px;
-    border-top: none;
-    border-bottom-style: solid;
-    border-bottom-color: #b2b2b2
-}
-
-.layui-table-sort .layui-table-sort-asc:hover {
-    border-bottom-color: #666
-}
-
-.layui-table-sort .layui-table-sort-desc {
-    bottom: 5px;
-    border-bottom: none;
-    border-top-style: solid;
-    border-top-color: #b2b2b2
-}
-
-.layui-table-sort .layui-table-sort-desc:hover {
-    border-top-color: #666
-}
-
-.layui-table-sort[lay-sort=asc] .layui-table-sort-asc {
-    border-bottom-color: #000
-}
-
-.layui-table-sort[lay-sort=desc] .layui-table-sort-desc {
-    border-top-color: #000
-}
-
-.layui-table-cell {
-    height: 28px;
-    line-height: 28px;
-    padding: 0 15px;
-    position: relative;
-    overflow: hidden;
-    text-overflow: ellipsis;
-    white-space: nowrap;
-    box-sizing: border-box
-}
-
-.layui-table-cell .layui-form-checkbox[lay-skin=primary] {
-    top: -1px;
-    padding: 0
-}
-
-.layui-table-cell .layui-table-link {
-    color: #01AAED
-}
-
-.laytable-cell-checkbox, .laytable-cell-numbers, .laytable-cell-radio, .laytable-cell-space {
-    padding: 0;
-    text-align: center
-}
-
-.layui-table-body {
-    position: relative;
-    overflow: auto;
-    margin-right: -1px;
-    margin-bottom: -1px
-}
-
-.layui-table-body .layui-none {
-    line-height: 26px;
-    padding: 15px;
-    text-align: center;
-    color: #999
-}
-
-.layui-table-fixed {
-    position: absolute;
-    left: 0;
-    top: 0;
-    z-index: 101
-}
-
-.layui-table-fixed .layui-table-body {
-    overflow: hidden
-}
-
-.layui-table-fixed-l {
-    box-shadow: 0 -1px 8px rgba(0, 0, 0, .08)
-}
-
-.layui-table-fixed-r {
-    left: auto;
-    right: -1px;
-    border-width: 0 0 0 1px;
-    box-shadow: -1px 0 8px rgba(0, 0, 0, .08)
-}
-
-.layui-table-fixed-r .layui-table-header {
-    position: relative;
-    overflow: visible
-}
-
-.layui-table-mend {
-    position: absolute;
-    right: -49px;
-    top: 0;
-    height: 100%;
-    width: 50px
-}
-
-.layui-table-tool {
-    position: relative;
-    z-index: 890;
-    width: 100%;
-    min-height: 50px;
-    line-height: 30px;
-    padding: 10px 15px;
-    border-width: 0 0 1px
-}
-
-.layui-table-tool .layui-btn-container {
-    margin-bottom: -10px
-}
-
-.layui-table-page, .layui-table-total {
-    border-width: 1px 0 0;
-    margin-bottom: -1px;
-    overflow: hidden
-}
-
-.layui-table-page {
-    position: relative;
-    width: 100%;
-    padding: 7px 7px 0;
-    height: 41px;
-    font-size: 12px;
-    white-space: nowrap
-}
-
-.layui-table-page > div {
-    height: 26px
-}
-
-.layui-table-page .layui-laypage {
-    margin: 0
-}
-
-.layui-table-page .layui-laypage a, .layui-table-page .layui-laypage span {
-    height: 26px;
-    line-height: 26px;
-    margin-bottom: 10px;
-    border: none;
-    background: 0 0
-}
-
-.layui-table-page .layui-laypage a, .layui-table-page .layui-laypage span.layui-laypage-curr {
-    padding: 0 12px
-}
-
-.layui-table-page .layui-laypage span {
-    margin-left: 0;
-    padding: 0
-}
-
-.layui-table-page .layui-laypage .layui-laypage-prev {
-    margin-left: -7px !important
-}
-
-.layui-table-page .layui-laypage .layui-laypage-curr .layui-laypage-em {
-    left: 0;
-    top: 0;
-    padding: 0
-}
-
-.layui-table-page .layui-laypage button, .layui-table-page .layui-laypage input {
-    height: 26px;
-    line-height: 26px
-}
-
-.layui-table-page .layui-laypage input {
-    width: 40px
-}
-
-.layui-table-page .layui-laypage button {
-    padding: 0 10px
-}
-
-.layui-table-page select {
-    height: 18px
-}
-
-.layui-table-patch .layui-table-cell {
-    padding: 0;
-    width: 30px
-}
-
-.layui-table-edit {
-    position: absolute;
-    left: 0;
-    top: 0;
-    width: 100%;
-    height: 100%;
-    padding: 0 14px 1px;
-    border-radius: 0;
-    box-shadow: 1px 1px 20px rgba(0, 0, 0, .15)
-}
-
-.layui-table-edit:focus {
-    border-color: #5FB878 !important
-}
-
-select.layui-table-edit {
-    padding: 0 0 0 10px;
-    border-color: #C9C9C9
-}
-
-.layui-table-view .layui-form-checkbox, .layui-table-view .layui-form-radio, .layui-table-view .layui-form-switch {
-    top: 0;
-    margin: 0;
-    box-sizing: content-box
-}
-
-.layui-table-view .layui-form-checkbox {
-    top: -1px;
-    height: 26px;
-    line-height: 26px
-}
-
-.layui-table-view .layui-form-checkbox i {
-    height: 26px
-}
-
-.layui-table-grid .layui-table-cell {
-    overflow: visible
-}
-
-.layui-table-grid-down {
-    position: absolute;
-    top: 0;
-    right: 0;
-    width: 26px;
-    height: 100%;
-    padding: 5px 0;
-    border-width: 0 0 0 1px;
-    text-align: center;
-    background-color: #fff;
-    color: #999;
-    cursor: pointer
-}
-
-.layui-table-grid-down .layui-icon {
-    position: absolute;
-    top: 50%;
-    left: 50%;
-    margin: -8px 0 0 -8px
-}
-
-.layui-table-grid-down:hover {
-    background-color: #fbfbfb
-}
-
-body .layui-table-tips .layui-layer-content {
-    background: 0 0;
-    padding: 0;
-    box-shadow: 0 1px 6px rgba(0, 0, 0, .12)
-}
-
-.layui-table-tips-main {
-    margin: -44px 0 0 -1px;
-    max-height: 150px;
-    padding: 8px 15px;
-    font-size: 14px;
-    overflow-y: scroll;
-    background-color: #fff;
-    color: #666
-}
-
-.layui-table-tips-c {
-    position: absolute;
-    right: -3px;
-    top: -13px;
-    width: 20px;
-    height: 20px;
-    padding: 3px;
-    cursor: pointer;
-    background-color: #666;
-    border-radius: 50%;
-    color: #fff
-}
-
-.layui-table-tips-c:hover {
-    background-color: #777
-}
-
-.layui-table-tips-c:before {
-    position: relative;
-    right: -2px
-}
-
-.layui-upload-file {
-    display: none !important;
-    opacity: .01;
-    filter: Alpha(opacity=1)
-}
-
-.layui-upload-drag, .layui-upload-form, .layui-upload-wrap {
-    display: inline-block
-}
-
-.layui-upload-list {
-    margin: 10px 0
-}
-
-.layui-upload-choose {
-    padding: 0 10px;
-    color: #999
-}
-
-.layui-upload-drag {
-    position: relative;
-    padding: 30px;
-    border: 1px dashed #e2e2e2;
-    background-color: #fff;
-    text-align: center;
-    cursor: pointer;
-    color: #999
-}
-
-.layui-upload-drag .layui-icon {
-    font-size: 50px;
-    color: #009688
-}
-
-.layui-upload-drag[lay-over] {
-    border-color: #009688
-}
-
-.layui-upload-iframe {
-    position: absolute;
-    width: 0;
-    height: 0;
-    border: 0;
-    visibility: hidden
-}
-
-.layui-upload-wrap {
-    position: relative;
-    vertical-align: middle
-}
-
-.layui-upload-wrap .layui-upload-file {
-    display: block !important;
-    position: absolute;
-    left: 0;
-    top: 0;
-    z-index: 10;
-    font-size: 100px;
-    width: 100%;
-    height: 100%;
-    opacity: .01;
-    filter: Alpha(opacity=1);
-    cursor: pointer
-}
-
-.layui-tree {
-    line-height: 26px
-}
-
-.layui-tree li {
-    text-overflow: ellipsis;
-    overflow: hidden;
-    white-space: nowrap
-}
-
-.layui-tree li .layui-tree-spread, .layui-tree li a {
-    display: inline-block;
-    vertical-align: top;
-    height: 26px;
-    *display: inline;
-    *zoom: 1;
-    cursor: pointer
-}
-
-.layui-tree li a {
-    font-size: 0
-}
-
-.layui-tree li a i {
-    font-size: 16px
-}
-
-.layui-tree li a cite {
-    padding: 0 6px;
-    font-size: 14px;
-    font-style: normal
-}
-
-.layui-tree li i {
-    padding-left: 6px;
-    color: #333;
-    -moz-user-select: none
-}
-
-.layui-tree li .layui-tree-check {
-    font-size: 13px
-}
-
-.layui-tree li .layui-tree-check:hover {
-    color: #009E94
-}
-
-.layui-tree li ul {
-    display: none;
-    margin-left: 20px
-}
-
-.layui-tree li .layui-tree-enter {
-    line-height: 24px;
-    border: 1px dotted #000
-}
-
-.layui-tree-drag {
-    display: none;
-    position: absolute;
-    left: -666px;
-    top: -666px;
-    background-color: #f2f2f2;
-    padding: 5px 10px;
-    border: 1px dotted #000;
-    white-space: nowrap
-}
-
-.layui-tree-drag i {
-    padding-right: 5px
-}
-
-.layui-nav {
-    position: relative;
-    padding: 0 20px;
-    background-color: #393D49;
-    color: #fff;
-    border-radius: 2px;
-    font-size: 0;
-    box-sizing: border-box
-}
-
-.layui-nav * {
-    font-size: 14px
-}
-
-.layui-nav .layui-nav-item {
-    position: relative;
-    display: inline-block;
-    *display: inline;
-    *zoom: 1;
-    vertical-align: middle;
-    line-height: 60px
-}
-
-.layui-nav .layui-nav-item a {
-    display: block;
-    padding: 0 20px;
-    color: #fff;
-    color: rgba(255, 255, 255, .7);
-    transition: all .3s;
-    -webkit-transition: all .3s
-}
-
-.layui-nav .layui-this:after, .layui-nav-bar, .layui-nav-tree .layui-nav-itemed:after {
-    position: absolute;
-    left: 0;
-    top: 0;
-    width: 0;
-    height: 5px;
-    background-color: #5FB878;
-    transition: all .2s;
-    -webkit-transition: all .2s
-}
-
-.layui-nav-bar {
-    z-index: 1000
-}
-
-.layui-nav .layui-nav-item a:hover, .layui-nav .layui-this a {
-    color: #fff
-}
-
-.layui-nav .layui-this:after {
-    content: '';
-    top: auto;
-    bottom: 0;
-    width: 100%
-}
-
-.layui-nav-img {
-    width: 30px;
-    height: 30px;
-    margin-right: 10px;
-    border-radius: 50%
-}
-
-.layui-nav .layui-nav-more {
-    content: '';
-    width: 0;
-    height: 0;
-    border-style: solid dashed dashed;
-    border-color: #fff transparent transparent;
-    overflow: hidden;
-    cursor: pointer;
-    transition: all .2s;
-    -webkit-transition: all .2s;
-    position: absolute;
-    top: 50%;
-    right: 3px;
-    margin-top: -3px;
-    border-width: 6px;
-    border-top-color: rgba(255, 255, 255, .7)
-}
-
-.layui-nav .layui-nav-mored, .layui-nav-itemed > a .layui-nav-more {
-    margin-top: -9px;
-    border-style: dashed dashed solid;
-    border-color: transparent transparent #fff
-}
-
-.layui-nav-child {
-    display: none;
-    position: absolute;
-    left: 0;
-    top: 65px;
-    min-width: 100%;
-    line-height: 36px;
-    padding: 5px 0;
-    box-shadow: 0 2px 4px rgba(0, 0, 0, .12);
-    border: 1px solid #d2d2d2;
-    background-color: #fff;
-    z-index: 100;
-    border-radius: 2px;
-    white-space: nowrap
-}
-
-.layui-nav .layui-nav-child a {
-    color: #333
-}
-
-.layui-nav .layui-nav-child a:hover {
-    background-color: #f2f2f2;
-    color: #000
-}
-
-.layui-nav-child dd {
-    position: relative
-}
-
-.layui-nav .layui-nav-child dd.layui-this a, .layui-nav-child dd.layui-this {
-    background-color: #5FB878;
-    color: #fff
-}
-
-.layui-nav-child dd.layui-this:after {
-    display: none
-}
-
-.layui-nav-tree {
-    width: 200px;
-    padding: 0
-}
-
-.layui-nav-tree .layui-nav-item {
-    display: block;
-    width: 100%;
-    line-height: 45px
-}
-
-.layui-nav-tree .layui-nav-item a {
-    position: relative;
-    height: 45px;
-    line-height: 45px;
-    text-overflow: ellipsis;
-    overflow: hidden;
-    white-space: nowrap
-}
-
-.layui-nav-tree .layui-nav-item a:hover {
-    background-color: #4E5465
-}
-
-.layui-nav-tree .layui-nav-bar {
-    width: 5px;
-    height: 0;
-    background-color: #009688
-}
-
-.layui-nav-tree .layui-nav-child dd.layui-this, .layui-nav-tree .layui-nav-child dd.layui-this a, .layui-nav-tree .layui-this, .layui-nav-tree .layui-this > a, .layui-nav-tree .layui-this > a:hover {
-    background-color: #009688;
-    color: #fff
-}
-
-.layui-nav-tree .layui-this:after {
-    display: none
-}
-
-.layui-nav-itemed > a, .layui-nav-tree .layui-nav-title a, .layui-nav-tree .layui-nav-title a:hover {
-    color: #fff !important
-}
-
-.layui-nav-tree .layui-nav-child {
-    position: relative;
-    z-index: 0;
-    top: 0;
-    border: none;
-    box-shadow: none
-}
-
-.layui-nav-tree .layui-nav-child a {
-    height: 40px;
-    line-height: 40px;
-    color: #fff;
-    color: rgba(255, 255, 255, .7)
-}
-
-.layui-nav-tree .layui-nav-child, .layui-nav-tree .layui-nav-child a:hover {
-    background: 0 0;
-    color: #fff
-}
-
-.layui-nav-tree .layui-nav-more {
-    right: 10px
-}
-
-.layui-nav-itemed > .layui-nav-child {
-    display: block;
-    padding: 0;
-    background-color: rgba(0, 0, 0, .3) !important
-}
-
-.layui-nav-itemed > .layui-nav-child > .layui-this > .layui-nav-child {
-    display: block
-}
-
-.layui-nav-side {
-    position: fixed;
-    top: 0;
-    bottom: 0;
-    left: 0;
-    overflow-x: hidden;
-    z-index: 999
-}
-
-.layui-bg-blue .layui-nav-bar, .layui-bg-blue .layui-nav-itemed:after, .layui-bg-blue .layui-this:after {
-    background-color: #93D1FF
-}
-
-.layui-bg-blue .layui-nav-child dd.layui-this {
-    background-color: #1E9FFF
-}
-
-.layui-bg-blue .layui-nav-itemed > a, .layui-nav-tree.layui-bg-blue .layui-nav-title a, .layui-nav-tree.layui-bg-blue .layui-nav-title a:hover {
-    background-color: #007DDB !important
-}
-
-.layui-breadcrumb {
-    visibility: hidden;
-    font-size: 0
-}
-
-.layui-breadcrumb > * {
-    font-size: 14px
-}
-
-.layui-breadcrumb a {
-    color: #999 !important
-}
-
-.layui-breadcrumb a:hover {
-    color: #5FB878 !important
-}
-
-.layui-breadcrumb a cite {
-    color: #666;
-    font-style: normal
-}
-
-.layui-breadcrumb span[lay-separator] {
-    margin: 0 10px;
-    color: #999
-}
-
-.layui-tab {
-    margin: 10px 0;
-    text-align: left !important
-}
-
-.layui-tab[overflow] > .layui-tab-title {
-    overflow: hidden
-}
-
-.layui-tab-title {
-    position: relative;
-    left: 0;
-    height: 40px;
-    white-space: nowrap;
-    font-size: 0;
-    border-bottom-width: 1px;
-    border-bottom-style: solid;
-    transition: all .2s;
-    -webkit-transition: all .2s
-}
-
-.layui-tab-title li {
-    display: inline-block;
-    *display: inline;
-    *zoom: 1;
-    vertical-align: middle;
-    font-size: 14px;
-    transition: all .2s;
-    -webkit-transition: all .2s;
-    position: relative;
-    line-height: 40px;
-    min-width: 65px;
-    padding: 0 15px;
-    text-align: center;
-    cursor: pointer
-}
-
-.layui-tab-title li a {
-    display: block
-}
-
-.layui-tab-title .layui-this {
-    color: #000
-}
-
-.layui-tab-title .layui-this:after {
-    position: absolute;
-    left: 0;
-    top: 0;
-    content: '';
-    width: 100%;
-    height: 41px;
-    border-width: 1px;
-    border-style: solid;
-    border-bottom-color: #fff;
-    border-radius: 2px 2px 0 0;
-    box-sizing: border-box;
-    pointer-events: none
-}
-
-.layui-tab-bar {
-    position: absolute;
-    right: 0;
-    top: 0;
-    z-index: 10;
-    width: 30px;
-    height: 39px;
-    line-height: 39px;
-    border-width: 1px;
-    border-style: solid;
-    border-radius: 2px;
-    text-align: center;
-    background-color: #fff;
-    cursor: pointer
-}
-
-.layui-tab-bar .layui-icon {
-    position: relative;
-    display: inline-block;
-    top: 3px;
-    transition: all .3s;
-    -webkit-transition: all .3s
-}
-
-.layui-tab-item {
-    display: none
-}
-
-.layui-tab-more {
-    padding-right: 30px;
-    height: auto !important;
-    white-space: normal !important
-}
-
-.layui-tab-more li.layui-this:after {
-    border-bottom-color: #e2e2e2;
-    border-radius: 2px
-}
-
-.layui-tab-more .layui-tab-bar .layui-icon {
-    top: -2px;
-    top: 3px \9;
-    -webkit-transform: rotate(180deg);
-    transform: rotate(180deg)
-}
-
-:root .layui-tab-more .layui-tab-bar .layui-icon {
-    top: -2px \0/ IE9
-}
-
-.layui-tab-content {
-    padding: 10px
-}
-
-.layui-tab-title li .layui-tab-close {
-    position: relative;
-    display: inline-block;
-    width: 18px;
-    height: 18px;
-    line-height: 20px;
-    margin-left: 8px;
-    top: 1px;
-    text-align: center;
-    font-size: 14px;
-    color: #c2c2c2;
-    transition: all .2s;
-    -webkit-transition: all .2s
-}
-
-.layui-tab-title li .layui-tab-close:hover {
-    border-radius: 2px;
-    background-color: #FF5722;
-    color: #fff
-}
-
-.layui-tab-brief > .layui-tab-title .layui-this {
-    color: #009688
-}
-
-.layui-tab-brief > .layui-tab-more li.layui-this:after, .layui-tab-brief > .layui-tab-title .layui-this:after {
-    border: none;
-    border-radius: 0;
-    border-bottom: 2px solid #5FB878
-}
-
-.layui-tab-brief[overflow] > .layui-tab-title .layui-this:after {
-    top: -1px
-}
-
-.layui-tab-card {
-    border-width: 1px;
-    border-style: solid;
-    border-radius: 2px;
-    box-shadow: 0 2px 5px 0 rgba(0, 0, 0, .1)
-}
-
-.layui-tab-card > .layui-tab-title {
-    background-color: #f2f2f2
-}
-
-.layui-tab-card > .layui-tab-title li {
-    margin-right: -1px;
-    margin-left: -1px
-}
-
-.layui-tab-card > .layui-tab-title .layui-this {
-    background-color: #fff
-}
-
-.layui-tab-card > .layui-tab-title .layui-this:after {
-    border-top: none;
-    border-width: 1px;
-    border-bottom-color: #fff
-}
-
-.layui-tab-card > .layui-tab-title .layui-tab-bar {
-    height: 40px;
-    line-height: 40px;
-    border-radius: 0;
-    border-top: none;
-    border-right: none
-}
-
-.layui-tab-card > .layui-tab-more .layui-this {
-    background: 0 0;
-    color: #5FB878
-}
-
-.layui-tab-card > .layui-tab-more .layui-this:after {
-    border: none
-}
-
-.layui-timeline {
-    padding-left: 5px
-}
-
-.layui-timeline-item {
-    position: relative;
-    padding-bottom: 20px
-}
-
-.layui-timeline-axis {
-    position: absolute;
-    left: -5px;
-    top: 0;
-    z-index: 10;
-    width: 20px;
-    height: 20px;
-    line-height: 20px;
-    background-color: #fff;
-    color: #5FB878;
-    border-radius: 50%;
-    text-align: center;
-    cursor: pointer
-}
-
-.layui-timeline-axis:hover {
-    color: #FF5722
-}
-
-.layui-timeline-item:before {
-    content: '';
-    position: absolute;
-    left: 5px;
-    top: 0;
-    z-index: 0;
-    width: 1px;
-    height: 100%
-}
-
-.layui-timeline-item:last-child:before {
-    display: none
-}
-
-.layui-timeline-item:first-child:before {
-    display: block
-}
-
-.layui-timeline-content {
-    padding-left: 25px
-}
-
-.layui-timeline-title {
-    position: relative;
-    margin-bottom: 10px
-}
-
-.layui-badge, .layui-badge-dot, .layui-badge-rim {
-    position: relative;
-    display: inline-block;
-    padding: 0 6px;
-    font-size: 12px;
-    text-align: center;
-    background-color: #FF5722;
-    color: #fff;
-    border-radius: 2px
-}
-
-.layui-badge {
-    height: 18px;
-    line-height: 18px
-}
-
-.layui-badge-dot {
-    width: 8px;
-    height: 8px;
-    padding: 0;
-    border-radius: 50%
-}
-
-.layui-badge-rim {
-    height: 18px;
-    line-height: 18px;
-    border-width: 1px;
-    border-style: solid;
-    background-color: #fff;
-    color: #666
-}
-
-.layui-btn .layui-badge, .layui-btn .layui-badge-dot {
-    margin-left: 5px
-}
-
-.layui-nav .layui-badge, .layui-nav .layui-badge-dot {
-    position: absolute;
-    top: 50%;
-    margin: -8px 6px 0
-}
-
-.layui-tab-title .layui-badge, .layui-tab-title .layui-badge-dot {
-    left: 5px;
-    top: -2px
-}
-
-.layui-carousel {
-    position: relative;
-    left: 0;
-    top: 0;
-    background-color: #f8f8f8
-}
-
-.layui-carousel > [carousel-item] {
-    position: relative;
-    width: 100%;
-    height: 100%;
-    overflow: hidden
-}
-
-.layui-carousel > [carousel-item]:before {
-    position: absolute;
-    content: '\e63d';
-    left: 50%;
-    top: 50%;
-    width: 100px;
-    line-height: 20px;
-    margin: -10px 0 0 -50px;
-    text-align: center;
-    color: #c2c2c2;
-    font-family: layui-icon !important;
-    font-size: 30px;
-    font-style: normal;
-    -webkit-font-smoothing: antialiased;
-    -moz-osx-font-smoothing: grayscale
-}
-
-.layui-carousel > [carousel-item] > * {
-    display: none;
-    position: absolute;
-    left: 0;
-    top: 0;
-    width: 100%;
-    height: 100%;
-    background-color: #f8f8f8;
-    transition-duration: .3s;
-    -webkit-transition-duration: .3s
-}
-
-.layui-carousel-updown > * {
-    -webkit-transition: .3s ease-in-out up;
-    transition: .3s ease-in-out up
-}
-
-.layui-carousel-arrow {
-    display: none \9;
-    opacity: 0;
-    position: absolute;
-    left: 10px;
-    top: 50%;
-    margin-top: -18px;
-    width: 36px;
-    height: 36px;
-    line-height: 36px;
-    text-align: center;
-    font-size: 20px;
-    border: 0;
-    border-radius: 50%;
-    background-color: rgba(0, 0, 0, .2);
-    color: #fff;
-    -webkit-transition-duration: .3s;
-    transition-duration: .3s;
-    cursor: pointer
-}
-
-.layui-carousel-arrow[lay-type=add] {
-    left: auto !important;
-    right: 10px
-}
-
-.layui-carousel:hover .layui-carousel-arrow[lay-type=add], .layui-carousel[lay-arrow=always] .layui-carousel-arrow[lay-type=add] {
-    right: 20px
-}
-
-.layui-carousel[lay-arrow=always] .layui-carousel-arrow {
-    opacity: 1;
-    left: 20px
-}
-
-.layui-carousel[lay-arrow=none] .layui-carousel-arrow {
-    display: none
-}
-
-.layui-carousel-arrow:hover, .layui-carousel-ind ul:hover {
-    background-color: rgba(0, 0, 0, .35)
-}
-
-.layui-carousel:hover .layui-carousel-arrow {
-    display: block \9;
-    opacity: 1;
-    left: 20px
-}
-
-.layui-carousel-ind {
-    position: relative;
-    top: -35px;
-    width: 100%;
-    line-height: 0 !important;
-    text-align: center;
-    font-size: 0
-}
-
-.layui-carousel[lay-indicator=outside] {
-    margin-bottom: 30px
-}
-
-.layui-carousel[lay-indicator=outside] .layui-carousel-ind {
-    top: 10px
-}
-
-.layui-carousel[lay-indicator=outside] .layui-carousel-ind ul {
-    background-color: rgba(0, 0, 0, .5)
-}
-
-.layui-carousel[lay-indicator=none] .layui-carousel-ind {
-    display: none
-}
-
-.layui-carousel-ind ul {
-    display: inline-block;
-    padding: 5px;
-    background-color: rgba(0, 0, 0, .2);
-    border-radius: 10px;
-    -webkit-transition-duration: .3s;
-    transition-duration: .3s
-}
-
-.layui-carousel-ind li {
-    display: inline-block;
-    width: 10px;
-    height: 10px;
-    margin: 0 3px;
-    font-size: 14px;
-    background-color: #e2e2e2;
-    background-color: rgba(255, 255, 255, .5);
-    border-radius: 50%;
-    cursor: pointer;
-    -webkit-transition-duration: .3s;
-    transition-duration: .3s
-}
-
-.layui-carousel-ind li:hover {
-    background-color: rgba(255, 255, 255, .7)
-}
-
-.layui-carousel-ind li.layui-this {
-    background-color: #fff
-}
-
-.layui-carousel > [carousel-item] > .layui-carousel-next, .layui-carousel > [carousel-item] > .layui-carousel-prev, .layui-carousel > [carousel-item] > .layui-this {
-    display: block
-}
-
-.layui-carousel > [carousel-item] > .layui-this {
-    left: 0
-}
-
-.layui-carousel > [carousel-item] > .layui-carousel-prev {
-    left: -100%
-}
-
-.layui-carousel > [carousel-item] > .layui-carousel-next {
-    left: 100%
-}
-
-.layui-carousel > [carousel-item] > .layui-carousel-next.layui-carousel-left, .layui-carousel > [carousel-item] > .layui-carousel-prev.layui-carousel-right {
-    left: 0
-}
-
-.layui-carousel > [carousel-item] > .layui-this.layui-carousel-left {
-    left: -100%
-}
-
-.layui-carousel > [carousel-item] > .layui-this.layui-carousel-right {
-    left: 100%
-}
-
-.layui-carousel[lay-anim=updown] .layui-carousel-arrow {
-    left: 50% !important;
-    top: 20px;
-    margin: 0 0 0 -18px
-}
-
-.layui-carousel[lay-anim=updown] > [carousel-item] > *, .layui-carousel[lay-anim=fade] > [carousel-item] > * {
-    left: 0 !important
-}
-
-.layui-carousel[lay-anim=updown] .layui-carousel-arrow[lay-type=add] {
-    top: auto !important;
-    bottom: 20px
-}
-
-.layui-carousel[lay-anim=updown] .layui-carousel-ind {
-    position: absolute;
-    top: 50%;
-    right: 20px;
-    width: auto;
-    height: auto
-}
-
-.layui-carousel[lay-anim=updown] .layui-carousel-ind ul {
-    padding: 3px 5px
-}
-
-.layui-carousel[lay-anim=updown] .layui-carousel-ind li {
-    display: block;
-    margin: 6px 0
-}
-
-.layui-carousel[lay-anim=updown] > [carousel-item] > .layui-this {
-    top: 0
-}
-
-.layui-carousel[lay-anim=updown] > [carousel-item] > .layui-carousel-prev {
-    top: -100%
-}
-
-.layui-carousel[lay-anim=updown] > [carousel-item] > .layui-carousel-next {
-    top: 100%
-}
-
-.layui-carousel[lay-anim=updown] > [carousel-item] > .layui-carousel-next.layui-carousel-left, .layui-carousel[lay-anim=updown] > [carousel-item] > .layui-carousel-prev.layui-carousel-right {
-    top: 0
-}
-
-.layui-carousel[lay-anim=updown] > [carousel-item] > .layui-this.layui-carousel-left {
-    top: -100%
-}
-
-.layui-carousel[lay-anim=updown] > [carousel-item] > .layui-this.layui-carousel-right {
-    top: 100%
-}
-
-.layui-carousel[lay-anim=fade] > [carousel-item] > .layui-carousel-next, .layui-carousel[lay-anim=fade] > [carousel-item] > .layui-carousel-prev {
-    opacity: 0
-}
-
-.layui-carousel[lay-anim=fade] > [carousel-item] > .layui-carousel-next.layui-carousel-left, .layui-carousel[lay-anim=fade] > [carousel-item] > .layui-carousel-prev.layui-carousel-right {
-    opacity: 1
-}
-
-.layui-carousel[lay-anim=fade] > [carousel-item] > .layui-this.layui-carousel-left, .layui-carousel[lay-anim=fade] > [carousel-item] > .layui-this.layui-carousel-right {
-    opacity: 0
-}
-
-.layui-fixbar {
-    position: fixed;
-    right: 15px;
-    bottom: 15px;
-    z-index: 999999
-}
-
-.layui-fixbar li {
-    width: 50px;
-    height: 50px;
-    line-height: 50px;
-    margin-bottom: 1px;
-    text-align: center;
-    cursor: pointer;
-    font-size: 30px;
-    background-color: #9F9F9F;
-    color: #fff;
-    border-radius: 2px;
-    opacity: .95
-}
-
-.layui-fixbar li:hover {
-    opacity: .85
-}
-
-.layui-fixbar li:active {
-    opacity: 1
-}
-
-.layui-fixbar .layui-fixbar-top {
-    display: none;
-    font-size: 40px
-}
-
-body .layui-util-face {
-    border: none;
-    background: 0 0
-}
-
-body .layui-util-face .layui-layer-content {
-    padding: 0;
-    background-color: #fff;
-    color: #666;
-    box-shadow: none
-}
-
-.layui-util-face .layui-layer-TipsG {
-    display: none
-}
-
-.layui-util-face ul {
-    position: relative;
-    width: 372px;
-    padding: 10px;
-    border: 1px solid #D9D9D9;
-    background-color: #fff;
-    box-shadow: 0 0 20px rgba(0, 0, 0, .2)
-}
-
-.layui-util-face ul li {
-    cursor: pointer;
-    float: left;
-    border: 1px solid #e8e8e8;
-    height: 22px;
-    width: 26px;
-    overflow: hidden;
-    margin: -1px 0 0 -1px;
-    padding: 4px 2px;
-    text-align: center
-}
-
-.layui-util-face ul li:hover {
-    position: relative;
-    z-index: 2;
-    border: 1px solid #eb7350;
-    background: #fff9ec
-}
-
-.layui-code {
-    position: relative;
-    margin: 10px 0;
-    padding: 15px;
-    line-height: 20px;
-    border: 1px solid #ddd;
-    border-left-width: 6px;
-    background-color: #F2F2F2;
-    color: #333;
-    font-family: Courier New;
-    font-size: 12px
-}
-
-.layui-rate, .layui-rate * {
-    display: inline-block;
-    vertical-align: middle
-}
-
-.layui-rate {
-    padding: 10px 5px 10px 0;
-    font-size: 0
-}
-
-.layui-rate li i.layui-icon {
-    font-size: 20px;
-    color: #FFB800;
-    margin-right: 5px;
-    transition: all .3s;
-    -webkit-transition: all .3s
-}
-
-.layui-rate li i:hover {
-    cursor: pointer;
-    transform: scale(1.12);
-    -webkit-transform: scale(1.12)
-}
-
-.layui-rate[readonly] li i:hover {
-    cursor: default;
-    transform: scale(1)
-}
-
-.layui-colorpicker {
-    width: 26px;
-    height: 26px;
-    border: 1px solid #e6e6e6;
-    padding: 5px;
-    border-radius: 2px;
-    line-height: 24px;
-    display: inline-block;
-    cursor: pointer;
-    transition: all .3s;
-    -webkit-transition: all .3s
-}
-
-.layui-colorpicker:hover {
-    border-color: #d2d2d2
-}
-
-.layui-colorpicker.layui-colorpicker-lg {
-    width: 34px;
-    height: 34px;
-    line-height: 32px
-}
-
-.layui-colorpicker.layui-colorpicker-sm {
-    width: 24px;
-    height: 24px;
-    line-height: 22px
-}
-
-.layui-colorpicker.layui-colorpicker-xs {
-    width: 22px;
-    height: 22px;
-    line-height: 20px
-}
-
-.layui-colorpicker-trigger-bgcolor {
-    display: block;
-    background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==);
-    border-radius: 2px
-}
-
-.layui-colorpicker-trigger-span {
-    display: block;
-    height: 100%;
-    box-sizing: border-box;
-    border: 1px solid rgba(0, 0, 0, .15);
-    border-radius: 2px;
-    text-align: center
-}
-
-.layui-colorpicker-trigger-i {
-    display: inline-block;
-    color: #FFF;
-    font-size: 12px
-}
-
-.layui-colorpicker-trigger-i.layui-icon-close {
-    color: #999
-}
-
-.layui-colorpicker-main {
-    position: absolute;
-    z-index: 66666666;
-    width: 280px;
-    padding: 7px;
-    background: #FFF;
-    border: 1px solid #d2d2d2;
-    border-radius: 2px;
-    box-shadow: 0 2px 4px rgba(0, 0, 0, .12)
-}
-
-.layui-colorpicker-main-wrapper {
-    height: 180px;
-    position: relative
-}
-
-.layui-colorpicker-basis {
-    width: 260px;
-    height: 100%;
-    position: relative
-}
-
-.layui-colorpicker-basis-white {
-    width: 100%;
-    height: 100%;
-    position: absolute;
-    top: 0;
-    left: 0;
-    background: linear-gradient(90deg, #FFF, hsla(0, 0%, 100%, 0))
-}
-
-.layui-colorpicker-basis-black {
-    width: 100%;
-    height: 100%;
-    position: absolute;
-    top: 0;
-    left: 0;
-    background: linear-gradient(0deg, #000, transparent)
-}
-
-.layui-colorpicker-basis-cursor {
-    width: 10px;
-    height: 10px;
-    border: 1px solid #FFF;
-    border-radius: 50%;
-    position: absolute;
-    top: -3px;
-    right: -3px;
-    cursor: pointer
-}
-
-.layui-colorpicker-side {
-    position: absolute;
-    top: 0;
-    right: 0;
-    width: 12px;
-    height: 100%;
-    background: linear-gradient(red, #FF0, #0F0, #0FF, #00F, #F0F, red)
-}
-
-.layui-colorpicker-side-slider {
-    width: 100%;
-    height: 5px;
-    box-shadow: 0 0 1px #888;
-    box-sizing: border-box;
-    background: #FFF;
-    border-radius: 1px;
-    border: 1px solid #f0f0f0;
-    cursor: pointer;
-    position: absolute;
-    left: 0
-}
-
-.layui-colorpicker-main-alpha {
-    display: none;
-    height: 12px;
-    margin-top: 7px;
-    background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)
-}
-
-.layui-colorpicker-alpha-bgcolor {
-    height: 100%;
-    position: relative
-}
-
-.layui-colorpicker-alpha-slider {
-    width: 5px;
-    height: 100%;
-    box-shadow: 0 0 1px #888;
-    box-sizing: border-box;
-    background: #FFF;
-    border-radius: 1px;
-    border: 1px solid #f0f0f0;
-    cursor: pointer;
-    position: absolute;
-    top: 0
-}
-
-.layui-colorpicker-main-pre {
-    padding-top: 7px;
-    font-size: 0
-}
-
-.layui-colorpicker-pre {
-    width: 20px;
-    height: 20px;
-    border-radius: 2px;
-    display: inline-block;
-    margin-left: 6px;
-    margin-bottom: 7px;
-    cursor: pointer
-}
-
-.layui-colorpicker-pre:nth-child(11n+1) {
-    margin-left: 0
-}
-
-.layui-colorpicker-pre-isalpha {
-    background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)
-}
-
-.layui-colorpicker-pre.layui-this {
-    box-shadow: 0 0 3px 2px rgba(0, 0, 0, .15)
-}
-
-.layui-colorpicker-pre > div {
-    height: 100%;
-    border-radius: 2px
-}
-
-.layui-colorpicker-main-input {
-    text-align: right;
-    padding-top: 7px
-}
-
-.layui-colorpicker-main-input .layui-btn-container .layui-btn {
-    margin: 0 0 0 10px
-}
-
-.layui-colorpicker-main-input div.layui-inline {
-    float: left;
-    margin-right: 10px;
-    font-size: 14px
-}
-
-.layui-colorpicker-main-input input.layui-input {
-    width: 150px;
-    height: 30px;
-    color: #666
-}
-
-.layui-slider {
-    height: 4px;
-    background: #e2e2e2;
-    border-radius: 3px;
-    position: relative;
-    cursor: pointer
-}
-
-.layui-slider-bar {
-    border-radius: 3px;
-    position: absolute;
-    height: 100%
-}
-
-.layui-slider-step {
-    position: absolute;
-    top: 0;
-    width: 4px;
-    height: 4px;
-    border-radius: 50%;
-    background: #FFF;
-    -webkit-transform: translateX(-50%);
-    transform: translateX(-50%)
-}
-
-.layui-slider-wrap {
-    width: 36px;
-    height: 36px;
-    position: absolute;
-    top: -16px;
-    -webkit-transform: translateX(-50%);
-    transform: translateX(-50%);
-    z-index: 10;
-    text-align: center
-}
-
-.layui-slider-wrap-btn {
-    width: 12px;
-    height: 12px;
-    border-radius: 50%;
-    background: #FFF;
-    display: inline-block;
-    vertical-align: middle;
-    cursor: pointer;
-    transition: .3s
-}
-
-.layui-slider-wrap:after {
-    content: "";
-    height: 100%;
-    display: inline-block;
-    vertical-align: middle
-}
-
-.layui-slider-wrap-btn.layui-slider-hover, .layui-slider-wrap-btn:hover {
-    transform: scale(1.2)
-}
-
-.layui-slider-wrap-btn.layui-disabled:hover {
-    transform: scale(1) !important
-}
-
-.layui-slider-tips {
-    position: absolute;
-    top: -42px;
-    z-index: 66666666;
-    white-space: nowrap;
-    display: none;
-    -webkit-transform: translateX(-50%);
-    transform: translateX(-50%);
-    color: #FFF;
-    background: #000;
-    border-radius: 3px;
-    height: 25px;
-    line-height: 25px;
-    padding: 0 10px
-}
-
-.layui-slider-tips:after {
-    content: '';
-    position: absolute;
-    bottom: -12px;
-    left: 50%;
-    margin-left: -6px;
-    width: 0;
-    height: 0;
-    border-width: 6px;
-    border-style: solid;
-    border-color: #000 transparent transparent
-}
-
-.layui-slider-input {
-    width: 70px;
-    height: 32px;
-    border: 1px solid #e6e6e6;
-    border-radius: 3px;
-    font-size: 16px;
-    line-height: 32px;
-    position: absolute;
-    right: 0;
-    top: -15px
-}
-
-.layui-slider-input-btn {
-    display: none;
-    position: absolute;
-    top: 0;
-    right: 0;
-    width: 20px;
-    height: 100%;
-    border-left: 1px solid #d2d2d2
-}
-
-.layui-slider-input-btn i {
-    cursor: pointer;
-    position: absolute;
-    right: 0;
-    bottom: 0;
-    width: 20px;
-    height: 50%;
-    font-size: 12px;
-    line-height: 16px;
-    text-align: center;
-    color: #999
-}
-
-.layui-slider-input-btn i:first-child {
-    top: 0;
-    border-bottom: 1px solid #d2d2d2
-}
-
-.layui-slider-input-txt {
-    height: 100%;
-    font-size: 14px
-}
-
-.layui-slider-input-txt input {
-    height: 100%;
-    border: none
-}
-
-.layui-slider-input-btn i:hover {
-    color: #009688
-}
-
-.layui-slider-vertical {
-    width: 4px;
-    margin-left: 34px
-}
-
-.layui-slider-vertical .layui-slider-bar {
-    width: 4px
-}
-
-.layui-slider-vertical .layui-slider-step {
-    top: auto;
-    left: 0;
-    -webkit-transform: translateY(50%);
-    transform: translateY(50%)
-}
-
-.layui-slider-vertical .layui-slider-wrap {
-    top: auto;
-    left: -16px;
-    -webkit-transform: translateY(50%);
-    transform: translateY(50%)
-}
-
-.layui-slider-vertical .layui-slider-tips {
-    top: auto;
-    left: 2px
-}
-
-@media \0screen {
-    .layui-slider-wrap-btn {
-        margin-left: -20px
-    }
-
-    .layui-slider-vertical .layui-slider-wrap-btn {
-        margin-left: 0;
-        margin-bottom: -20px
-    }
-
-    .layui-slider-vertical .layui-slider-tips {
-        margin-left: -8px
-    }
-
-    .layui-slider > span {
-        margin-left: 8px
-    }
-}
-
-.layui-anim {
-    -webkit-animation-duration: .3s;
-    animation-duration: .3s;
-    -webkit-animation-fill-mode: both;
-    animation-fill-mode: both
-}
-
-.layui-anim.layui-icon {
-    display: inline-block
-}
-
-.layui-anim-loop {
-    -webkit-animation-iteration-count: infinite;
-    animation-iteration-count: infinite
-}
-
-.layui-trans, .layui-trans a {
-    transition: all .3s;
-    -webkit-transition: all .3s
-}
-
-@-webkit-keyframes layui-rotate {
-    from {
-        -webkit-transform: rotate(0)
-    }
-    to {
-        -webkit-transform: rotate(360deg)
-    }
-}
-
-@keyframes layui-rotate {
-    from {
-        transform: rotate(0)
-    }
-    to {
-        transform: rotate(360deg)
-    }
-}
-
-.layui-anim-rotate {
-    -webkit-animation-name: layui-rotate;
-    animation-name: layui-rotate;
-    -webkit-animation-duration: 1s;
-    animation-duration: 1s;
-    -webkit-animation-timing-function: linear;
-    animation-timing-function: linear
-}
-
-@-webkit-keyframes layui-up {
-    from {
-        -webkit-transform: translate3d(0, 100%, 0);
-        opacity: .3
-    }
-    to {
-        -webkit-transform: translate3d(0, 0, 0);
-        opacity: 1
-    }
-}
-
-@keyframes layui-up {
-    from {
-        transform: translate3d(0, 100%, 0);
-        opacity: .3
-    }
-    to {
-        transform: translate3d(0, 0, 0);
-        opacity: 1
-    }
-}
-
-.layui-anim-up {
-    -webkit-animation-name: layui-up;
-    animation-name: layui-up
-}
-
-@-webkit-keyframes layui-upbit {
-    from {
-        -webkit-transform: translate3d(0, 30px, 0);
-        opacity: .3
-    }
-    to {
-        -webkit-transform: translate3d(0, 0, 0);
-        opacity: 1
-    }
-}
-
-@keyframes layui-upbit {
-    from {
-        transform: translate3d(0, 30px, 0);
-        opacity: .3
-    }
-    to {
-        transform: translate3d(0, 0, 0);
-        opacity: 1
-    }
-}
-
-.layui-anim-upbit {
-    -webkit-animation-name: layui-upbit;
-    animation-name: layui-upbit
-}
-
-@-webkit-keyframes layui-scale {
-    0% {
-        opacity: .3;
-        -webkit-transform: scale(.5)
-    }
-    100% {
-        opacity: 1;
-        -webkit-transform: scale(1)
-    }
-}
-
-@keyframes layui-scale {
-    0% {
-        opacity: .3;
-        -ms-transform: scale(.5);
-        transform: scale(.5)
-    }
-    100% {
-        opacity: 1;
-        -ms-transform: scale(1);
-        transform: scale(1)
-    }
-}
-
-.layui-anim-scale {
-    -webkit-animation-name: layui-scale;
-    animation-name: layui-scale
-}
-
-@-webkit-keyframes layui-scale-spring {
-    0% {
-        opacity: .5;
-        -webkit-transform: scale(.5)
-    }
-    80% {
-        opacity: .8;
-        -webkit-transform: scale(1.1)
-    }
-    100% {
-        opacity: 1;
-        -webkit-transform: scale(1)
-    }
-}
-
-@keyframes layui-scale-spring {
-    0% {
-        opacity: .5;
-        transform: scale(.5)
-    }
-    80% {
-        opacity: .8;
-        transform: scale(1.1)
-    }
-    100% {
-        opacity: 1;
-        transform: scale(1)
-    }
-}
-
-.layui-anim-scaleSpring {
-    -webkit-animation-name: layui-scale-spring;
-    animation-name: layui-scale-spring
-}
-
-@-webkit-keyframes layui-fadein {
-    0% {
-        opacity: 0
-    }
-    100% {
-        opacity: 1
-    }
-}
-
-@keyframes layui-fadein {
-    0% {
-        opacity: 0
-    }
-    100% {
-        opacity: 1
-    }
-}
-
-.layui-anim-fadein {
-    -webkit-animation-name: layui-fadein;
-    animation-name: layui-fadein
-}
-
-@-webkit-keyframes layui-fadeout {
-    0% {
-        opacity: 1
-    }
-    100% {
-        opacity: 0
-    }
-}
-
-@keyframes layui-fadeout {
-    0% {
-        opacity: 1
-    }
-    100% {
-        opacity: 0
-    }
-}
-
-.layui-anim-fadeout {
-    -webkit-animation-name: layui-fadeout;
-    animation-name: layui-fadeout
-}

文件差异内容过多而无法显示
+ 0 - 1
web/UM-admin/lib/layui/css/layui.mobile.css


+ 0 - 2
web/UM-admin/lib/layui/css/modules/code.css

@@ -1,2 +0,0 @@
-/** layui-v2.4.3 MIT License By https://www.layui.com */
- html #layuicss-skincodecss{display:none;position:absolute;width:1989px}.layui-code-h3,.layui-code-view{position:relative;font-size:12px}.layui-code-view{display:block;margin:10px 0;padding:0;border:1px solid #e2e2e2;border-left-width:6px;background-color:#F2F2F2;color:#333;font-family:Courier New}.layui-code-h3{padding:0 10px;height:32px;line-height:32px;border-bottom:1px solid #e2e2e2}.layui-code-h3 a{position:absolute;right:10px;top:0;color:#999}.layui-code-view .layui-code-ol{position:relative;overflow:auto}.layui-code-view .layui-code-ol li{position:relative;margin-left:45px;line-height:20px;padding:0 5px;border-left:1px solid #e2e2e2;list-style-type:decimal-leading-zero;*list-style-type:decimal;background-color:#fff}.layui-code-view pre{margin:0}.layui-code-notepad{border:1px solid #0C0C0C;border-left-color:#3F3F3F;background-color:#0C0C0C;color:#C2BE9E}.layui-code-notepad .layui-code-h3{border-bottom:none}.layui-code-notepad .layui-code-ol li{background-color:#3F3F3F;border-left:none}

文件差异内容过多而无法显示
+ 0 - 1
web/UM-admin/lib/layui/css/modules/laydate/default/laydate.css


二进制
web/UM-admin/lib/layui/css/modules/laydate/icon.png


文件差异内容过多而无法显示
+ 0 - 1
web/UM-admin/lib/layui/css/modules/laydate/laydate.css


二进制
web/UM-admin/lib/layui/css/modules/layer/default/icon-ext.png


二进制
web/UM-admin/lib/layui/css/modules/layer/default/icon.png


文件差异内容过多而无法显示
+ 0 - 1
web/UM-admin/lib/layui/css/modules/layer/default/layer.css


二进制
web/UM-admin/lib/layui/css/modules/layer/default/loading-0.gif


二进制
web/UM-admin/lib/layui/css/modules/layer/default/loading-1.gif


二进制
web/UM-admin/lib/layui/css/modules/layer/default/loading-2.gif


二进制
web/UM-admin/lib/layui/font/iconfont.eot


文件差异内容过多而无法显示
+ 0 - 25
web/UM-admin/lib/layui/font/iconfont.svg


二进制
web/UM-admin/lib/layui/font/iconfont.ttf


二进制
web/UM-admin/lib/layui/font/iconfont.woff


二进制
web/UM-admin/lib/layui/images/face/0.gif


二进制
web/UM-admin/lib/layui/images/face/1.gif


二进制
web/UM-admin/lib/layui/images/face/10.gif


二进制
web/UM-admin/lib/layui/images/face/11.gif


二进制
web/UM-admin/lib/layui/images/face/12.gif


二进制
web/UM-admin/lib/layui/images/face/13.gif


二进制
web/UM-admin/lib/layui/images/face/14.gif


二进制
web/UM-admin/lib/layui/images/face/15.gif


二进制
web/UM-admin/lib/layui/images/face/16.gif


二进制
web/UM-admin/lib/layui/images/face/17.gif


二进制
web/UM-admin/lib/layui/images/face/18.gif


二进制
web/UM-admin/lib/layui/images/face/19.gif


二进制
web/UM-admin/lib/layui/images/face/2.gif


二进制
web/UM-admin/lib/layui/images/face/20.gif


二进制
web/UM-admin/lib/layui/images/face/21.gif


二进制
web/UM-admin/lib/layui/images/face/22.gif


二进制
web/UM-admin/lib/layui/images/face/23.gif


二进制
web/UM-admin/lib/layui/images/face/24.gif


二进制
web/UM-admin/lib/layui/images/face/25.gif


二进制
web/UM-admin/lib/layui/images/face/26.gif


二进制
web/UM-admin/lib/layui/images/face/27.gif


二进制
web/UM-admin/lib/layui/images/face/28.gif


二进制
web/UM-admin/lib/layui/images/face/29.gif


二进制
web/UM-admin/lib/layui/images/face/3.gif


二进制
web/UM-admin/lib/layui/images/face/30.gif


二进制
web/UM-admin/lib/layui/images/face/31.gif


二进制
web/UM-admin/lib/layui/images/face/32.gif


二进制
web/UM-admin/lib/layui/images/face/33.gif


二进制
web/UM-admin/lib/layui/images/face/34.gif


二进制
web/UM-admin/lib/layui/images/face/35.gif


二进制
web/UM-admin/lib/layui/images/face/36.gif


部分文件因为文件数量过多而无法显示